summaryrefslogtreecommitdiff
path: root/Master
diff options
context:
space:
mode:
Diffstat (limited to 'Master')
-rw-r--r--Master/texmf-dist/context/data/scite/cont-cs-scite.properties98
-rw-r--r--Master/texmf-dist/context/data/scite/cont-de-scite.properties98
-rw-r--r--Master/texmf-dist/context/data/scite/cont-en-scite.properties98
-rw-r--r--Master/texmf-dist/context/data/scite/cont-fr-scite.properties98
-rw-r--r--Master/texmf-dist/context/data/scite/cont-it-scite.properties98
-rw-r--r--Master/texmf-dist/context/data/scite/cont-nl-scite.properties98
-rw-r--r--Master/texmf-dist/context/data/scite/cont-pe-scite.properties98
-rw-r--r--Master/texmf-dist/context/data/scite/cont-ro-scite.properties98
-rw-r--r--Master/texmf-dist/context/data/scite/context.properties27
-rw-r--r--Master/texmf-dist/context/data/scite/scite-ctx.lua (renamed from Master/texmf-dist/scripts/context/lua/scite-ctx.lua)193
-rw-r--r--Master/texmf-dist/context/data/scite/scite-ctx.properties3
-rw-r--r--Master/texmf-dist/context/data/scite/scite-ctx.readme27
-rw-r--r--Master/texmf-dist/context/data/textadept/context.lua710
-rw-r--r--Master/texmf-dist/context/data/texworks/TUG/TeXworks.ini18
-rw-r--r--Master/texmf-dist/context/data/texworks/TUG/texworks.ini45
-rw-r--r--Master/texmf-dist/context/data/texworks/configuration/tools.ini35
-rw-r--r--Master/texmf-dist/fonts/enc/dvips/context/ec-2004.enc82
-rw-r--r--Master/texmf-dist/fonts/map/pdftex/context/mkiv-base.map252
-rw-r--r--Master/texmf-dist/fonts/map/pdftex/context/mkiv-px.map51
-rw-r--r--Master/texmf-dist/fonts/map/pdftex/context/mkiv-tx.map94
-rw-r--r--Master/texmf-dist/fonts/map/pdftex/context/original-public-lm.map78
-rw-r--r--Master/texmf-dist/metapost/base/mfplain.mp2
-rw-r--r--Master/texmf-dist/metapost/context/base/mp-back.mp232
-rw-r--r--Master/texmf-dist/metapost/context/base/mp-chem.mp104
-rw-r--r--Master/texmf-dist/metapost/context/base/mp-page.mp27
-rw-r--r--Master/texmf-dist/metapost/context/base/mp-text.mp3
-rw-r--r--Master/texmf-dist/metapost/context/base/mp-tool.mp2
-rw-r--r--Master/texmf-dist/metapost/context/font/punkfont.mp15
-rwxr-xr-xMaster/texmf-dist/scripts/context/lua/luatools.lua2222
-rw-r--r--Master/texmf-dist/scripts/context/lua/luatools.rme2
-rw-r--r--Master/texmf-dist/scripts/context/lua/mtx-babel.lua2
-rw-r--r--Master/texmf-dist/scripts/context/lua/mtx-cache.lua19
-rw-r--r--Master/texmf-dist/scripts/context/lua/mtx-chars.lua26
-rw-r--r--Master/texmf-dist/scripts/context/lua/mtx-check.lua12
-rw-r--r--Master/texmf-dist/scripts/context/lua/mtx-context.lua355
-rw-r--r--Master/texmf-dist/scripts/context/lua/mtx-convert.lua10
-rw-r--r--Master/texmf-dist/scripts/context/lua/mtx-fonts.lua312
-rw-r--r--Master/texmf-dist/scripts/context/lua/mtx-grep.lua4
-rw-r--r--Master/texmf-dist/scripts/context/lua/mtx-interface.lua30
-rw-r--r--Master/texmf-dist/scripts/context/lua/mtx-metatex.lua2
-rw-r--r--Master/texmf-dist/scripts/context/lua/mtx-modules.lua167
-rw-r--r--Master/texmf-dist/scripts/context/lua/mtx-mptopdf.lua99
-rw-r--r--Master/texmf-dist/scripts/context/lua/mtx-mtxworks.lua14
-rw-r--r--Master/texmf-dist/scripts/context/lua/mtx-package.lua2
-rw-r--r--Master/texmf-dist/scripts/context/lua/mtx-patterns.lua46
-rw-r--r--Master/texmf-dist/scripts/context/lua/mtx-profile.lua16
-rw-r--r--Master/texmf-dist/scripts/context/lua/mtx-scite.lua166
-rw-r--r--Master/texmf-dist/scripts/context/lua/mtx-server-ctx-fonttest.lua302
-rw-r--r--Master/texmf-dist/scripts/context/lua/mtx-server-ctx-help.lua207
-rw-r--r--Master/texmf-dist/scripts/context/lua/mtx-server-ctx-startup.lua32
-rw-r--r--Master/texmf-dist/scripts/context/lua/mtx-server.lua11
-rw-r--r--Master/texmf-dist/scripts/context/lua/mtx-texworks.lua33
-rw-r--r--Master/texmf-dist/scripts/context/lua/mtx-timing.lua80
-rw-r--r--Master/texmf-dist/scripts/context/lua/mtx-tools.lua129
-rw-r--r--Master/texmf-dist/scripts/context/lua/mtx-update.lua175
-rw-r--r--Master/texmf-dist/scripts/context/lua/mtx-watch.lua401
-rwxr-xr-xMaster/texmf-dist/scripts/context/lua/mtxrun.lua7371
-rw-r--r--Master/texmf-dist/scripts/context/lua/mtxrun.rme21
-rw-r--r--Master/texmf-dist/scripts/context/lua/x-ldx.lua96
-rw-r--r--Master/texmf-dist/scripts/context/perl/mptopdf.pl8
-rw-r--r--Master/texmf-dist/scripts/context/perl/texshow.pl956
-rw-r--r--Master/texmf-dist/scripts/context/ruby/base/ctx.rb5
-rw-r--r--Master/texmf-dist/scripts/context/ruby/base/tex.rb17
-rw-r--r--Master/texmf-dist/scripts/context/ruby/newimgtopdf.rb8
-rw-r--r--Master/texmf-dist/scripts/context/ruby/newpstopdf.rb8
-rw-r--r--Master/texmf-dist/scripts/context/ruby/newtexexec.rb8
-rw-r--r--Master/texmf-dist/scripts/context/ruby/newtexutil.rb8
-rwxr-xr-xMaster/texmf-dist/scripts/context/stubs/mswin/context.cmd5
-rw-r--r--Master/texmf-dist/scripts/context/stubs/mswin/context.exebin0 -> 6144 bytes
-rwxr-xr-xMaster/texmf-dist/scripts/context/stubs/mswin/ctxtools.bat5
-rwxr-xr-xMaster/texmf-dist/scripts/context/stubs/mswin/luatools.cmd5
-rw-r--r--Master/texmf-dist/scripts/context/stubs/mswin/luatools.exebin0 -> 6144 bytes
-rw-r--r--Master/texmf-dist/scripts/context/stubs/mswin/luatools.lua2222
-rwxr-xr-xMaster/texmf-dist/scripts/context/stubs/mswin/makempy.bat5
-rw-r--r--Master/texmf-dist/scripts/context/stubs/mswin/metatex.cmd5
-rw-r--r--Master/texmf-dist/scripts/context/stubs/mswin/metatex.exebin0 -> 6144 bytes
-rwxr-xr-xMaster/texmf-dist/scripts/context/stubs/mswin/mpstools.bat5
-rwxr-xr-xMaster/texmf-dist/scripts/context/stubs/mswin/mptopdf.bat5
-rwxr-xr-xMaster/texmf-dist/scripts/context/stubs/mswin/mtxrun.cmd5
-rw-r--r--Master/texmf-dist/scripts/context/stubs/mswin/mtxrun.dllbin0 -> 9216 bytes
-rw-r--r--Master/texmf-dist/scripts/context/stubs/mswin/mtxrun.exebin0 -> 6144 bytes
-rw-r--r--Master/texmf-dist/scripts/context/stubs/mswin/mtxrun.lua7371
-rwxr-xr-xMaster/texmf-dist/scripts/context/stubs/mswin/mtxtools.bat5
-rw-r--r--Master/texmf-dist/scripts/context/stubs/mswin/mtxworks.cmd1
-rwxr-xr-xMaster/texmf-dist/scripts/context/stubs/mswin/pdftools.bat5
-rwxr-xr-xMaster/texmf-dist/scripts/context/stubs/mswin/pstopdf.bat5
-rwxr-xr-xMaster/texmf-dist/scripts/context/stubs/mswin/rlxtools.bat5
-rwxr-xr-xMaster/texmf-dist/scripts/context/stubs/mswin/runtools.bat5
-rwxr-xr-xMaster/texmf-dist/scripts/context/stubs/mswin/texexec.bat5
-rw-r--r--Master/texmf-dist/scripts/context/stubs/mswin/texexec.cmd5
-rw-r--r--Master/texmf-dist/scripts/context/stubs/mswin/texexec.exebin0 -> 6144 bytes
-rwxr-xr-xMaster/texmf-dist/scripts/context/stubs/mswin/texfont.bat5
-rw-r--r--Master/texmf-dist/scripts/context/stubs/mswin/texmfstart.cmd5
-rw-r--r--Master/texmf-dist/scripts/context/stubs/mswin/texmfstart.exebin0 -> 6144 bytes
-rwxr-xr-xMaster/texmf-dist/scripts/context/stubs/mswin/textools.bat5
-rwxr-xr-xMaster/texmf-dist/scripts/context/stubs/mswin/texutil.bat5
-rwxr-xr-xMaster/texmf-dist/scripts/context/stubs/mswin/tmftools.bat5
-rwxr-xr-xMaster/texmf-dist/scripts/context/stubs/mswin/xmltools.bat5
-rw-r--r--Master/texmf-dist/scripts/context/stubs/source/mtxrun_dll.c221
-rw-r--r--Master/texmf-dist/scripts/context/stubs/source/mtxrun_exe.c8
-rw-r--r--Master/texmf-dist/scripts/context/stubs/source/readme.txt36
-rwxr-xr-xMaster/texmf-dist/scripts/context/stubs/unix/ctxtools2
-rw-r--r--Master/texmf-dist/scripts/context/stubs/unix/luatools2222
-rwxr-xr-xMaster/texmf-dist/scripts/context/stubs/unix/makempy2
-rwxr-xr-xMaster/texmf-dist/scripts/context/stubs/unix/mpstools2
-rwxr-xr-xMaster/texmf-dist/scripts/context/stubs/unix/mptopdf2
-rw-r--r--Master/texmf-dist/scripts/context/stubs/unix/mtxrun7371
-rwxr-xr-xMaster/texmf-dist/scripts/context/stubs/unix/mtxtools2
-rw-r--r--Master/texmf-dist/scripts/context/stubs/unix/mtxworks2
-rwxr-xr-xMaster/texmf-dist/scripts/context/stubs/unix/pdftools2
-rwxr-xr-xMaster/texmf-dist/scripts/context/stubs/unix/pstopdf2
-rwxr-xr-xMaster/texmf-dist/scripts/context/stubs/unix/rlxtools2
-rwxr-xr-xMaster/texmf-dist/scripts/context/stubs/unix/runtools2
-rwxr-xr-xMaster/texmf-dist/scripts/context/stubs/unix/texexec2
-rwxr-xr-xMaster/texmf-dist/scripts/context/stubs/unix/texfont2
-rwxr-xr-xMaster/texmf-dist/scripts/context/stubs/unix/textools2
-rwxr-xr-xMaster/texmf-dist/scripts/context/stubs/unix/texutil2
-rwxr-xr-xMaster/texmf-dist/scripts/context/stubs/unix/tmftools2
-rwxr-xr-xMaster/texmf-dist/scripts/context/stubs/unix/xmltools2
-rw-r--r--Master/texmf-dist/tex/context/base/anch-bar.mkiv41
-rw-r--r--Master/texmf-dist/tex/context/base/anch-pgr.mkiv38
-rw-r--r--Master/texmf-dist/tex/context/base/anch-pos.lua109
-rw-r--r--Master/texmf-dist/tex/context/base/anch-pos.mkiv24
-rw-r--r--Master/texmf-dist/tex/context/base/anch-snc.mkiv2
-rw-r--r--Master/texmf-dist/tex/context/base/attr-ini.lua157
-rw-r--r--Master/texmf-dist/tex/context/base/attr-ini.mkiv74
-rw-r--r--Master/texmf-dist/tex/context/base/back-ini.lua4
-rw-r--r--Master/texmf-dist/tex/context/base/back-ini.mkiv2
-rw-r--r--Master/texmf-dist/tex/context/base/back-pdf.lua36
-rw-r--r--Master/texmf-dist/tex/context/base/back-pdf.mkiv55
-rw-r--r--Master/texmf-dist/tex/context/base/back-u3d.mkiv156
-rw-r--r--Master/texmf-dist/tex/context/base/bibl-bib.lua605
-rw-r--r--Master/texmf-dist/tex/context/base/bibl-bib.mkiv943
-rw-r--r--Master/texmf-dist/tex/context/base/bibl-tra.lua194
-rw-r--r--Master/texmf-dist/tex/context/base/bibl-tra.mkii (renamed from Master/texmf-dist/tex/context/bib/t-bib.tex)469
-rw-r--r--Master/texmf-dist/tex/context/base/bibl-tra.mkiv1552
-rw-r--r--Master/texmf-dist/tex/context/base/bibl-tst.lua2
-rw-r--r--Master/texmf-dist/tex/context/base/blob-ini.lua165
-rw-r--r--Master/texmf-dist/tex/context/base/blob-ini.mkiv34
-rw-r--r--Master/texmf-dist/tex/context/base/buff-ini.lua382
-rw-r--r--Master/texmf-dist/tex/context/base/buff-ini.mkii8
-rw-r--r--Master/texmf-dist/tex/context/base/buff-ini.mkiv54
-rw-r--r--Master/texmf-dist/tex/context/base/buff-ver.mkii10
-rw-r--r--Master/texmf-dist/tex/context/base/buff-ver.mkiv290
-rw-r--r--Master/texmf-dist/tex/context/base/bxml-apa.mkiv613
-rw-r--r--Master/texmf-dist/tex/context/base/catc-ctx.tex16
-rw-r--r--Master/texmf-dist/tex/context/base/catc-def.tex12
-rw-r--r--Master/texmf-dist/tex/context/base/catc-ini.lua9
-rw-r--r--Master/texmf-dist/tex/context/base/catc-ini.mkiv57
-rw-r--r--Master/texmf-dist/tex/context/base/char-act.mkiv13
-rw-r--r--Master/texmf-dist/tex/context/base/char-cmp.lua3
-rw-r--r--Master/texmf-dist/tex/context/base/char-def.lua240
-rw-r--r--Master/texmf-dist/tex/context/base/char-enc.lua2
-rw-r--r--Master/texmf-dist/tex/context/base/char-ini.lua102
-rw-r--r--Master/texmf-dist/tex/context/base/char-ini.mkiv2
-rw-r--r--Master/texmf-dist/tex/context/base/char-map.lua2
-rw-r--r--Master/texmf-dist/tex/context/base/char-tex.lua89
-rw-r--r--Master/texmf-dist/tex/context/base/char-utf.lua2
-rw-r--r--Master/texmf-dist/tex/context/base/char-utf.mkiv2
-rw-r--r--Master/texmf-dist/tex/context/base/chem-ini.lua9
-rw-r--r--Master/texmf-dist/tex/context/base/chem-ini.mkiv2
-rw-r--r--Master/texmf-dist/tex/context/base/chem-str.lua24
-rw-r--r--Master/texmf-dist/tex/context/base/chem-str.mkiv15
-rw-r--r--Master/texmf-dist/tex/context/base/colo-ext.mkii10
-rw-r--r--Master/texmf-dist/tex/context/base/colo-ext.mkiv60
-rw-r--r--Master/texmf-dist/tex/context/base/colo-hex.mkii4
-rw-r--r--Master/texmf-dist/tex/context/base/colo-hex.mkiv2
-rw-r--r--Master/texmf-dist/tex/context/base/colo-ini.lua255
-rw-r--r--Master/texmf-dist/tex/context/base/colo-ini.mkiv133
-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-x11.tex677
-rw-r--r--Master/texmf-dist/tex/context/base/cont-cz.tex35
-rw-r--r--Master/texmf-dist/tex/context/base/cont-fil.tex3
-rw-r--r--Master/texmf-dist/tex/context/base/cont-log.tex66
-rw-r--r--Master/texmf-dist/tex/context/base/cont-new.mkii3
-rw-r--r--Master/texmf-dist/tex/context/base/cont-new.mkiv116
-rw-r--r--Master/texmf-dist/tex/context/base/cont-new.tex2
-rw-r--r--Master/texmf-dist/tex/context/base/cont-uk.tex38
-rw-r--r--Master/texmf-dist/tex/context/base/context-base.lmx68
-rw-r--r--Master/texmf-dist/tex/context/base/context-characters.lmx2
-rw-r--r--Master/texmf-dist/tex/context/base/context-debug.lmx2
-rw-r--r--Master/texmf-dist/tex/context/base/context-error.lmx2
-rw-r--r--Master/texmf-dist/tex/context/base/context-fonttest.lmx2
-rw-r--r--Master/texmf-dist/tex/context/base/context-help.lmx2
-rw-r--r--Master/texmf-dist/tex/context/base/context-timing.lmx2
-rw-r--r--Master/texmf-dist/tex/context/base/context.mkii15
-rw-r--r--Master/texmf-dist/tex/context/base/context.mkiv54
-rw-r--r--Master/texmf-dist/tex/context/base/context.tex2
-rw-r--r--Master/texmf-dist/tex/context/base/core-bar.tex194
-rw-r--r--Master/texmf-dist/tex/context/base/core-blk.tex676
-rw-r--r--Master/texmf-dist/tex/context/base/core-box.tex953
-rw-r--r--Master/texmf-dist/tex/context/base/core-con.lua176
-rw-r--r--Master/texmf-dist/tex/context/base/core-con.mkiv4
-rw-r--r--Master/texmf-dist/tex/context/base/core-ctx.lua25
-rw-r--r--Master/texmf-dist/tex/context/base/core-ctx.mkiv4
-rw-r--r--Master/texmf-dist/tex/context/base/core-def.mkii21
-rw-r--r--Master/texmf-dist/tex/context/base/core-def.mkiv38
-rw-r--r--Master/texmf-dist/tex/context/base/core-env.mkiv170
-rw-r--r--Master/texmf-dist/tex/context/base/core-fil.mkiv55
-rw-r--r--Master/texmf-dist/tex/context/base/core-fnt.mkiv183
-rw-r--r--Master/texmf-dist/tex/context/base/core-grd.mkiv1074
-rw-r--r--Master/texmf-dist/tex/context/base/core-ini.mkiv2
-rw-r--r--Master/texmf-dist/tex/context/base/core-job.lua52
-rw-r--r--Master/texmf-dist/tex/context/base/core-job.mkii5
-rw-r--r--Master/texmf-dist/tex/context/base/core-job.mkiv58
-rw-r--r--Master/texmf-dist/tex/context/base/core-mis.mkiv121
-rw-r--r--Master/texmf-dist/tex/context/base/core-spa.lua720
-rw-r--r--Master/texmf-dist/tex/context/base/core-spa.mkiv4277
-rw-r--r--Master/texmf-dist/tex/context/base/core-sys.lua22
-rw-r--r--Master/texmf-dist/tex/context/base/core-sys.mkiv149
-rw-r--r--Master/texmf-dist/tex/context/base/core-two.lua8
-rw-r--r--Master/texmf-dist/tex/context/base/core-two.mkiv2
-rw-r--r--Master/texmf-dist/tex/context/base/core-uti.lua33
-rw-r--r--Master/texmf-dist/tex/context/base/core-uti.mkiv2
-rw-r--r--Master/texmf-dist/tex/context/base/core-var.mkiv15
-rw-r--r--Master/texmf-dist/tex/context/base/data-aux.lua20
-rw-r--r--Master/texmf-dist/tex/context/base/data-bin.lua9
-rw-r--r--Master/texmf-dist/tex/context/base/data-con.lua6
-rw-r--r--Master/texmf-dist/tex/context/base/data-crl.lua10
-rw-r--r--Master/texmf-dist/tex/context/base/data-ctx.lua6
-rw-r--r--Master/texmf-dist/tex/context/base/data-gen.lua2
-rw-r--r--Master/texmf-dist/tex/context/base/data-inp.lua2
-rw-r--r--Master/texmf-dist/tex/context/base/data-lst.lua15
-rw-r--r--Master/texmf-dist/tex/context/base/data-lua.lua125
-rw-r--r--Master/texmf-dist/tex/context/base/data-out.lua2
-rw-r--r--Master/texmf-dist/tex/context/base/data-pre.lua25
-rw-r--r--Master/texmf-dist/tex/context/base/data-res.lua533
-rw-r--r--Master/texmf-dist/tex/context/base/data-sch.lua142
-rw-r--r--Master/texmf-dist/tex/context/base/data-tex.lua37
-rw-r--r--Master/texmf-dist/tex/context/base/data-tmf.lua43
-rw-r--r--Master/texmf-dist/tex/context/base/data-tmp.lua8
-rw-r--r--Master/texmf-dist/tex/context/base/data-tre.lua12
-rw-r--r--Master/texmf-dist/tex/context/base/data-use.lua28
-rw-r--r--Master/texmf-dist/tex/context/base/data-zip.lua78
-rw-r--r--Master/texmf-dist/tex/context/base/enco-def.mkii2
-rw-r--r--Master/texmf-dist/tex/context/base/enco-ffr.mkii4
-rw-r--r--Master/texmf-dist/tex/context/base/enco-ini.mkii2
-rw-r--r--Master/texmf-dist/tex/context/base/enco-ini.mkiv144
-rw-r--r--Master/texmf-dist/tex/context/base/enco-l7x.mkii236
-rw-r--r--Master/texmf-dist/tex/context/base/font-afm.lua133
-rw-r--r--Master/texmf-dist/tex/context/base/font-agl.lua3695
-rw-r--r--Master/texmf-dist/tex/context/base/font-chk.lua16
-rw-r--r--Master/texmf-dist/tex/context/base/font-cid.lua13
-rw-r--r--Master/texmf-dist/tex/context/base/font-col.lua5
-rw-r--r--Master/texmf-dist/tex/context/base/font-col.mkiv4
-rw-r--r--Master/texmf-dist/tex/context/base/font-ctx.lua314
-rw-r--r--Master/texmf-dist/tex/context/base/font-def.lua140
-rw-r--r--Master/texmf-dist/tex/context/base/font-dum.lua221
-rw-r--r--Master/texmf-dist/tex/context/base/font-enc.lua4
-rw-r--r--Master/texmf-dist/tex/context/base/font-enh.lua201
-rw-r--r--Master/texmf-dist/tex/context/base/font-ext.lua440
-rw-r--r--Master/texmf-dist/tex/context/base/font-fbk.lua2
-rw-r--r--Master/texmf-dist/tex/context/base/font-gds.lua294
-rw-r--r--Master/texmf-dist/tex/context/base/font-gds.mkiv83
-rw-r--r--Master/texmf-dist/tex/context/base/font-ini.lua58
-rw-r--r--Master/texmf-dist/tex/context/base/font-ini.mkii30
-rw-r--r--Master/texmf-dist/tex/context/base/font-ini.mkiv691
-rw-r--r--Master/texmf-dist/tex/context/base/font-log.lua4
-rw-r--r--Master/texmf-dist/tex/context/base/font-map.lua390
-rw-r--r--Master/texmf-dist/tex/context/base/font-mis.lua28
-rw-r--r--Master/texmf-dist/tex/context/base/font-ota.lua38
-rw-r--r--Master/texmf-dist/tex/context/base/font-otb.lua228
-rw-r--r--Master/texmf-dist/tex/context/base/font-otc.lua29
-rw-r--r--Master/texmf-dist/tex/context/base/font-otd.lua2
-rw-r--r--Master/texmf-dist/tex/context/base/font-otf.lua654
-rw-r--r--Master/texmf-dist/tex/context/base/font-oti.lua2
-rw-r--r--Master/texmf-dist/tex/context/base/font-otn.lua630
-rw-r--r--Master/texmf-dist/tex/context/base/font-otp.lua156
-rw-r--r--Master/texmf-dist/tex/context/base/font-ott.lua19
-rw-r--r--Master/texmf-dist/tex/context/base/font-pat.lua36
-rw-r--r--Master/texmf-dist/tex/context/base/font-run.mkiv45
-rw-r--r--Master/texmf-dist/tex/context/base/font-syn.lua1273
-rw-r--r--Master/texmf-dist/tex/context/base/font-tfm.lua455
-rw-r--r--Master/texmf-dist/tex/context/base/font-tra.mkiv8
-rw-r--r--Master/texmf-dist/tex/context/base/font-vf.lua2
-rw-r--r--Master/texmf-dist/tex/context/base/font-xtx.lua27
-rw-r--r--Master/texmf-dist/tex/context/base/font-xtx.mkii49
-rw-r--r--Master/texmf-dist/tex/context/base/grph-fig.mkiv160
-rw-r--r--Master/texmf-dist/tex/context/base/grph-fil.lua42
-rw-r--r--Master/texmf-dist/tex/context/base/grph-inc.lua530
-rw-r--r--Master/texmf-dist/tex/context/base/grph-inc.mkii5
-rw-r--r--Master/texmf-dist/tex/context/base/grph-inc.mkiv29
-rw-r--r--Master/texmf-dist/tex/context/base/grph-swf.lua43
-rw-r--r--Master/texmf-dist/tex/context/base/grph-trf.mkii4
-rw-r--r--Master/texmf-dist/tex/context/base/grph-trf.mkiv21
-rw-r--r--Master/texmf-dist/tex/context/base/grph-u3d.lua48
-rw-r--r--Master/texmf-dist/tex/context/base/hand-ini.mkiv34
-rw-r--r--Master/texmf-dist/tex/context/base/java-ini.lua13
-rw-r--r--Master/texmf-dist/tex/context/base/l-aux.lua108
-rw-r--r--Master/texmf-dist/tex/context/base/l-boolean.lua2
-rw-r--r--Master/texmf-dist/tex/context/base/l-dimen.lua109
-rw-r--r--Master/texmf-dist/tex/context/base/l-dir.lua152
-rw-r--r--Master/texmf-dist/tex/context/base/l-file.lua148
-rw-r--r--Master/texmf-dist/tex/context/base/l-io.lua17
-rw-r--r--Master/texmf-dist/tex/context/base/l-lpeg.lua157
-rw-r--r--Master/texmf-dist/tex/context/base/l-math.lua2
-rw-r--r--Master/texmf-dist/tex/context/base/l-md5.lua2
-rw-r--r--Master/texmf-dist/tex/context/base/l-number.lua23
-rw-r--r--Master/texmf-dist/tex/context/base/l-os.lua305
-rw-r--r--Master/texmf-dist/tex/context/base/l-pdfview.lua95
-rw-r--r--Master/texmf-dist/tex/context/base/l-set.lua2
-rw-r--r--Master/texmf-dist/tex/context/base/l-string.lua83
-rw-r--r--Master/texmf-dist/tex/context/base/l-table.lua163
-rw-r--r--Master/texmf-dist/tex/context/base/l-unicode.lua39
-rw-r--r--Master/texmf-dist/tex/context/base/l-url.lua49
-rw-r--r--Master/texmf-dist/tex/context/base/l-utils.lua30
-rw-r--r--Master/texmf-dist/tex/context/base/l-xml.lua2442
-rw-r--r--Master/texmf-dist/tex/context/base/lang-alt.tex91
-rw-r--r--Master/texmf-dist/tex/context/base/lang-bal.tex108
-rw-r--r--Master/texmf-dist/tex/context/base/lang-cjk.mkiv14
-rw-r--r--Master/texmf-dist/tex/context/base/lang-ger.tex9
-rw-r--r--Master/texmf-dist/tex/context/base/lang-ini.lua281
-rw-r--r--Master/texmf-dist/tex/context/base/lang-ini.mkii42
-rw-r--r--Master/texmf-dist/tex/context/base/lang-ini.mkiv54
-rw-r--r--Master/texmf-dist/tex/context/base/lang-ita.tex52
-rw-r--r--Master/texmf-dist/tex/context/base/lang-lab.mkiv76
-rw-r--r--Master/texmf-dist/tex/context/base/lang-mis.mkiv8
-rw-r--r--Master/texmf-dist/tex/context/base/lang-sla.tex14
-rw-r--r--Master/texmf-dist/tex/context/base/lang-url.lua136
-rw-r--r--Master/texmf-dist/tex/context/base/lang-url.mkiv13
-rw-r--r--Master/texmf-dist/tex/context/base/lang-wrd.lua225
-rw-r--r--Master/texmf-dist/tex/context/base/lang-wrd.mkiv54
-rw-r--r--Master/texmf-dist/tex/context/base/lpdf-ano.lua140
-rw-r--r--Master/texmf-dist/tex/context/base/lpdf-col.lua2
-rw-r--r--Master/texmf-dist/tex/context/base/lpdf-fld.lua334
-rw-r--r--Master/texmf-dist/tex/context/base/lpdf-grp.lua18
-rw-r--r--Master/texmf-dist/tex/context/base/lpdf-ini.lua461
-rw-r--r--Master/texmf-dist/tex/context/base/lpdf-ini.mkiv15
-rw-r--r--Master/texmf-dist/tex/context/base/lpdf-mis.lua133
-rw-r--r--Master/texmf-dist/tex/context/base/lpdf-nod.lua8
-rw-r--r--Master/texmf-dist/tex/context/base/lpdf-pdx.lua139
-rw-r--r--Master/texmf-dist/tex/context/base/lpdf-pdx.mkiv71
-rw-r--r--Master/texmf-dist/tex/context/base/lpdf-ren.lua18
-rw-r--r--Master/texmf-dist/tex/context/base/lpdf-swf.lua109
-rw-r--r--Master/texmf-dist/tex/context/base/lpdf-u3d.lua127
-rw-r--r--Master/texmf-dist/tex/context/base/lpdf-wid.lua95
-rw-r--r--Master/texmf-dist/tex/context/base/lpdf-xmp.lua165
-rw-r--r--Master/texmf-dist/tex/context/base/lpdf-xmp.xml43
-rw-r--r--Master/texmf-dist/tex/context/base/luat-cbk.lua128
-rw-r--r--Master/texmf-dist/tex/context/base/luat-cnf.lua18
-rw-r--r--Master/texmf-dist/tex/context/base/luat-cod.mkiv2
-rw-r--r--Master/texmf-dist/tex/context/base/luat-dum.lua69
-rw-r--r--Master/texmf-dist/tex/context/base/luat-env.lua78
-rw-r--r--Master/texmf-dist/tex/context/base/luat-exe.lua21
-rw-r--r--Master/texmf-dist/tex/context/base/luat-fio.lua6
-rw-r--r--Master/texmf-dist/tex/context/base/luat-ini.lua16
-rw-r--r--Master/texmf-dist/tex/context/base/luat-ini.mkiv18
-rw-r--r--Master/texmf-dist/tex/context/base/luat-iop.lua167
-rw-r--r--Master/texmf-dist/tex/context/base/luat-lib.mkiv9
-rw-r--r--Master/texmf-dist/tex/context/base/luat-lua.lua5
-rw-r--r--Master/texmf-dist/tex/context/base/luat-run.lua19
-rw-r--r--Master/texmf-dist/tex/context/base/luat-sta.lua13
-rw-r--r--Master/texmf-dist/tex/context/base/luat-sto.lua12
-rw-r--r--Master/texmf-dist/tex/context/base/lxml-aux.lua543
-rw-r--r--Master/texmf-dist/tex/context/base/lxml-ctx.lua131
-rw-r--r--Master/texmf-dist/tex/context/base/lxml-ctx.mkiv64
-rw-r--r--Master/texmf-dist/tex/context/base/lxml-dir.lua112
-rw-r--r--Master/texmf-dist/tex/context/base/lxml-ent.lua124
-rw-r--r--Master/texmf-dist/tex/context/base/lxml-inf.lua53
-rw-r--r--Master/texmf-dist/tex/context/base/lxml-ini.lua1138
-rw-r--r--Master/texmf-dist/tex/context/base/lxml-ini.mkiv360
-rw-r--r--Master/texmf-dist/tex/context/base/lxml-lpt.lua1259
-rw-r--r--Master/texmf-dist/tex/context/base/lxml-mis.lua57
-rw-r--r--Master/texmf-dist/tex/context/base/lxml-pth.lua1555
-rw-r--r--Master/texmf-dist/tex/context/base/lxml-sor.lua158
-rw-r--r--Master/texmf-dist/tex/context/base/lxml-sor.mkiv94
-rw-r--r--Master/texmf-dist/tex/context/base/lxml-tab.lua1025
-rw-r--r--Master/texmf-dist/tex/context/base/lxml-tex.lua1410
-rw-r--r--Master/texmf-dist/tex/context/base/lxml-xml.lua288
-rw-r--r--Master/texmf-dist/tex/context/base/m-barcodes.mkiv122
-rw-r--r--Master/texmf-dist/tex/context/base/m-chart.mkii48
-rw-r--r--Master/texmf-dist/tex/context/base/m-chart.mkiv20
-rw-r--r--Master/texmf-dist/tex/context/base/m-chart.tex36
-rw-r--r--Master/texmf-dist/tex/context/base/m-chemic.mkiv5
-rw-r--r--Master/texmf-dist/tex/context/base/m-database.tex60
-rw-r--r--Master/texmf-dist/tex/context/base/m-directives.tex5
-rw-r--r--Master/texmf-dist/tex/context/base/m-graph.mkiv2
-rw-r--r--Master/texmf-dist/tex/context/base/m-narrowtt.tex2
-rw-r--r--Master/texmf-dist/tex/context/base/m-obsolete.tex5
-rw-r--r--Master/texmf-dist/tex/context/base/m-pstricks.lua73
-rw-r--r--Master/texmf-dist/tex/context/base/m-pstricks.mkii (renamed from Master/texmf-dist/tex/context/base/m-pstric.tex)16
-rw-r--r--Master/texmf-dist/tex/context/base/m-pstricks.mkiv66
-rw-r--r--Master/texmf-dist/tex/context/base/m-pstricks.tex (renamed from Master/texmf-dist/tex/context/base/type-one.tex)10
-rw-r--r--Master/texmf-dist/tex/context/base/m-punk.mkiv243
-rw-r--r--Master/texmf-dist/tex/context/base/m-punk.tex233
-rw-r--r--Master/texmf-dist/tex/context/base/m-steps.mkii83
-rw-r--r--Master/texmf-dist/tex/context/base/m-steps.mkiv20
-rw-r--r--Master/texmf-dist/tex/context/base/m-steps.tex69
-rw-r--r--Master/texmf-dist/tex/context/base/m-timing.tex26
-rw-r--r--Master/texmf-dist/tex/context/base/m-trackers.tex (renamed from Master/texmf-dist/tex/context/base/m-track.tex)0
-rw-r--r--Master/texmf-dist/tex/context/base/m-translate.tex6
-rw-r--r--Master/texmf-dist/tex/context/base/math-ali.mkiv273
-rw-r--r--Master/texmf-dist/tex/context/base/math-arr.mkiv74
-rw-r--r--Master/texmf-dist/tex/context/base/math-def.mkiv128
-rw-r--r--Master/texmf-dist/tex/context/base/math-dim.lua17
-rw-r--r--Master/texmf-dist/tex/context/base/math-ent.lua2
-rw-r--r--Master/texmf-dist/tex/context/base/math-ext.lua37
-rw-r--r--Master/texmf-dist/tex/context/base/math-for.mkiv12
-rw-r--r--Master/texmf-dist/tex/context/base/math-ini.lua46
-rw-r--r--Master/texmf-dist/tex/context/base/math-ini.mkii5
-rw-r--r--Master/texmf-dist/tex/context/base/math-ini.mkiv199
-rw-r--r--Master/texmf-dist/tex/context/base/math-inl.mkiv339
-rw-r--r--Master/texmf-dist/tex/context/base/math-int.mkiv5
-rw-r--r--Master/texmf-dist/tex/context/base/math-lan.mkiv67
-rw-r--r--Master/texmf-dist/tex/context/base/math-lbr.mkii67
-rw-r--r--Master/texmf-dist/tex/context/base/math-map.lua287
-rw-r--r--Master/texmf-dist/tex/context/base/math-noa.lua78
-rw-r--r--Master/texmf-dist/tex/context/base/math-pln.mkiv2
-rw-r--r--Master/texmf-dist/tex/context/base/math-run.mkii54
-rw-r--r--Master/texmf-dist/tex/context/base/math-scr.mkiv88
-rw-r--r--Master/texmf-dist/tex/context/base/math-tex.mkii2
-rw-r--r--Master/texmf-dist/tex/context/base/math-vfu.lua880
-rw-r--r--Master/texmf-dist/tex/context/base/meta-dum.tex2
-rw-r--r--Master/texmf-dist/tex/context/base/meta-fig.mkiv2
-rw-r--r--Master/texmf-dist/tex/context/base/meta-fun.lua2
-rw-r--r--Master/texmf-dist/tex/context/base/meta-ini.mkii8
-rw-r--r--Master/texmf-dist/tex/context/base/meta-ini.mkiv133
-rw-r--r--Master/texmf-dist/tex/context/base/meta-pdf.lua20
-rw-r--r--Master/texmf-dist/tex/context/base/meta-pdh.lua58
-rw-r--r--Master/texmf-dist/tex/context/base/meta-pdh.mkiv2
-rw-r--r--Master/texmf-dist/tex/context/base/meta-tex.mkii11
-rw-r--r--Master/texmf-dist/tex/context/base/meta-tex.mkiv2
-rw-r--r--Master/texmf-dist/tex/context/base/meta-txt.tex24
-rw-r--r--Master/texmf-dist/tex/context/base/metatex.tex27
-rw-r--r--Master/texmf-dist/tex/context/base/mlib-ctx.lua39
-rw-r--r--Master/texmf-dist/tex/context/base/mlib-pdf.lua8
-rw-r--r--Master/texmf-dist/tex/context/base/mlib-pps.lua212
-rw-r--r--Master/texmf-dist/tex/context/base/mlib-pps.mkiv49
-rw-r--r--Master/texmf-dist/tex/context/base/mlib-run.lua19
-rw-r--r--Master/texmf-dist/tex/context/base/mtx-context-arrange.tex12
-rw-r--r--Master/texmf-dist/tex/context/base/mtx-context-combine.tex70
-rw-r--r--Master/texmf-dist/tex/context/base/mtx-context-common.tex43
-rw-r--r--Master/texmf-dist/tex/context/base/mtx-context-ideas.tex2
-rw-r--r--Master/texmf-dist/tex/context/base/mtx-context-listing.tex74
-rw-r--r--Master/texmf-dist/tex/context/base/mtx-context-timing.tex2
-rw-r--r--Master/texmf-dist/tex/context/base/mult-chk.lua8
-rw-r--r--Master/texmf-dist/tex/context/base/mult-cld.lua170
-rw-r--r--Master/texmf-dist/tex/context/base/mult-cld.mkiv11
-rw-r--r--Master/texmf-dist/tex/context/base/mult-clm.lua184
-rw-r--r--Master/texmf-dist/tex/context/base/mult-de.tex69
-rw-r--r--Master/texmf-dist/tex/context/base/mult-def.lua335
-rw-r--r--Master/texmf-dist/tex/context/base/mult-en.tex73
-rw-r--r--Master/texmf-dist/tex/context/base/mult-fr.tex69
-rw-r--r--Master/texmf-dist/tex/context/base/mult-ini.lua47
-rw-r--r--Master/texmf-dist/tex/context/base/mult-ini.mkiv62
-rw-r--r--Master/texmf-dist/tex/context/base/mult-it.tex69
-rw-r--r--Master/texmf-dist/tex/context/base/mult-mcs.tex110
-rw-r--r--Master/texmf-dist/tex/context/base/mult-mde.tex110
-rw-r--r--Master/texmf-dist/tex/context/base/mult-men.tex110
-rw-r--r--Master/texmf-dist/tex/context/base/mult-mes.lua43
-rw-r--r--Master/texmf-dist/tex/context/base/mult-mfr.tex110
-rw-r--r--Master/texmf-dist/tex/context/base/mult-mit.tex110
-rw-r--r--Master/texmf-dist/tex/context/base/mult-mnl.tex110
-rw-r--r--Master/texmf-dist/tex/context/base/mult-mno.tex110
-rw-r--r--Master/texmf-dist/tex/context/base/mult-mpe.tex110
-rw-r--r--Master/texmf-dist/tex/context/base/mult-mro.tex110
-rw-r--r--Master/texmf-dist/tex/context/base/mult-nl.tex73
-rw-r--r--Master/texmf-dist/tex/context/base/mult-ro.tex69
-rw-r--r--Master/texmf-dist/tex/context/base/mult-sys.tex75
-rw-r--r--Master/texmf-dist/tex/context/base/node-aux.lua145
-rw-r--r--Master/texmf-dist/tex/context/base/node-bck.lua5
-rw-r--r--Master/texmf-dist/tex/context/base/node-bck.mkiv4
-rw-r--r--Master/texmf-dist/tex/context/base/node-dir.lua308
-rw-r--r--Master/texmf-dist/tex/context/base/node-ext.lua2
-rw-r--r--Master/texmf-dist/tex/context/base/node-fin.lua8
-rw-r--r--Master/texmf-dist/tex/context/base/node-fin.mkiv12
-rw-r--r--Master/texmf-dist/tex/context/base/node-fnt.lua11
-rw-r--r--Master/texmf-dist/tex/context/base/node-ini.lua50
-rw-r--r--Master/texmf-dist/tex/context/base/node-ini.mkiv30
-rw-r--r--Master/texmf-dist/tex/context/base/node-inj.lua135
-rw-r--r--Master/texmf-dist/tex/context/base/node-mig.lua120
-rw-r--r--Master/texmf-dist/tex/context/base/node-mig.mkiv60
-rw-r--r--Master/texmf-dist/tex/context/base/node-pag.lua30
-rw-r--r--Master/texmf-dist/tex/context/base/node-pag.mkiv20
-rw-r--r--Master/texmf-dist/tex/context/base/node-par.lua88
-rw-r--r--Master/texmf-dist/tex/context/base/node-par.mkiv40
-rw-r--r--Master/texmf-dist/tex/context/base/node-pro.lua32
-rw-r--r--Master/texmf-dist/tex/context/base/node-ref.lua34
-rw-r--r--Master/texmf-dist/tex/context/base/node-res.lua230
-rw-r--r--Master/texmf-dist/tex/context/base/node-rul.lua288
-rw-r--r--Master/texmf-dist/tex/context/base/node-rul.mkiv343
-rw-r--r--Master/texmf-dist/tex/context/base/node-seq.lua104
-rw-r--r--Master/texmf-dist/tex/context/base/node-ser.lua4
-rw-r--r--Master/texmf-dist/tex/context/base/node-shp.lua4
-rw-r--r--Master/texmf-dist/tex/context/base/node-tex.lua8
-rw-r--r--Master/texmf-dist/tex/context/base/node-tra.lua94
-rw-r--r--Master/texmf-dist/tex/context/base/node-tsk.lua167
-rw-r--r--Master/texmf-dist/tex/context/base/node-tst.lua10
-rw-r--r--Master/texmf-dist/tex/context/base/node-typ.lua53
-rw-r--r--Master/texmf-dist/tex/context/base/pack-box.mkii16
-rw-r--r--Master/texmf-dist/tex/context/base/pack-box.mkiv31
-rw-r--r--Master/texmf-dist/tex/context/base/pack-lyr.mkiv20
-rw-r--r--Master/texmf-dist/tex/context/base/pack-obj.lua2
-rw-r--r--Master/texmf-dist/tex/context/base/pack-obj.mkiv3
-rw-r--r--Master/texmf-dist/tex/context/base/pack-rul.lua16
-rw-r--r--Master/texmf-dist/tex/context/base/pack-rul.mkiv273
-rw-r--r--Master/texmf-dist/tex/context/base/page-app.mkiv14
-rw-r--r--Master/texmf-dist/tex/context/base/page-bck.mkiv8
-rw-r--r--Master/texmf-dist/tex/context/base/page-flt.lua227
-rw-r--r--Master/texmf-dist/tex/context/base/page-flt.mkiv233
-rw-r--r--Master/texmf-dist/tex/context/base/page-flw.mkiv6
-rw-r--r--Master/texmf-dist/tex/context/base/page-imp.mkiv15
-rw-r--r--Master/texmf-dist/tex/context/base/page-ini.mkii2
-rw-r--r--Master/texmf-dist/tex/context/base/page-ini.mkiv164
-rw-r--r--Master/texmf-dist/tex/context/base/page-lay.mkiv69
-rw-r--r--Master/texmf-dist/tex/context/base/page-lin.lua238
-rw-r--r--Master/texmf-dist/tex/context/base/page-lin.mkiv286
-rw-r--r--Master/texmf-dist/tex/context/base/page-mak.mkiv14
-rw-r--r--Master/texmf-dist/tex/context/base/page-mar.mkiv17
-rw-r--r--Master/texmf-dist/tex/context/base/page-mis.mkiv127
-rw-r--r--Master/texmf-dist/tex/context/base/page-mul.mkiv180
-rw-r--r--Master/texmf-dist/tex/context/base/page-not.mkiv11
-rw-r--r--Master/texmf-dist/tex/context/base/page-one.mkiv172
-rw-r--r--Master/texmf-dist/tex/context/base/page-par.mkiv2
-rw-r--r--Master/texmf-dist/tex/context/base/page-plg.mkiv4
-rw-r--r--Master/texmf-dist/tex/context/base/page-set.mkii369
-rw-r--r--Master/texmf-dist/tex/context/base/page-set.mkiv506
-rw-r--r--Master/texmf-dist/tex/context/base/page-sid.mkiv99
-rw-r--r--Master/texmf-dist/tex/context/base/page-spr.mkiv4
-rw-r--r--Master/texmf-dist/tex/context/base/page-str.lua221
-rw-r--r--Master/texmf-dist/tex/context/base/page-str.mkiv438
-rw-r--r--Master/texmf-dist/tex/context/base/page-txt.mkiv121
-rw-r--r--Master/texmf-dist/tex/context/base/ppchtex.mkii101
-rw-r--r--Master/texmf-dist/tex/context/base/ppchtex.mkiv113
-rw-r--r--Master/texmf-dist/tex/context/base/pret-lua.lua147
-rw-r--r--Master/texmf-dist/tex/context/base/pret-mp.lua6
-rw-r--r--Master/texmf-dist/tex/context/base/pret-tex.lua6
-rw-r--r--Master/texmf-dist/tex/context/base/pret-xml.lua136
-rw-r--r--Master/texmf-dist/tex/context/base/prop-ini.mkiv22
-rw-r--r--Master/texmf-dist/tex/context/base/prop-lay.mkiv6
-rw-r--r--Master/texmf-dist/tex/context/base/prop-mis.mkiv46
-rw-r--r--Master/texmf-dist/tex/context/base/regi-8859-1.lua46
-rw-r--r--Master/texmf-dist/tex/context/base/regi-8859-10.lua46
-rw-r--r--Master/texmf-dist/tex/context/base/regi-8859-11.lua46
-rw-r--r--Master/texmf-dist/tex/context/base/regi-8859-13.lua46
-rw-r--r--Master/texmf-dist/tex/context/base/regi-8859-14.lua46
-rw-r--r--Master/texmf-dist/tex/context/base/regi-8859-15.lua46
-rw-r--r--Master/texmf-dist/tex/context/base/regi-8859-16.lua46
-rw-r--r--Master/texmf-dist/tex/context/base/regi-8859-2.lua46
-rw-r--r--Master/texmf-dist/tex/context/base/regi-8859-3.lua46
-rw-r--r--Master/texmf-dist/tex/context/base/regi-8859-4.lua46
-rw-r--r--Master/texmf-dist/tex/context/base/regi-8859-5.lua46
-rw-r--r--Master/texmf-dist/tex/context/base/regi-8859-6.lua46
-rw-r--r--Master/texmf-dist/tex/context/base/regi-8859-7.lua46
-rw-r--r--Master/texmf-dist/tex/context/base/regi-8859-8.lua46
-rw-r--r--Master/texmf-dist/tex/context/base/regi-8859-9.lua46
-rw-r--r--Master/texmf-dist/tex/context/base/regi-cp1250.lua46
-rw-r--r--Master/texmf-dist/tex/context/base/regi-cp1251.lua46
-rw-r--r--Master/texmf-dist/tex/context/base/regi-cp1252.lua46
-rw-r--r--Master/texmf-dist/tex/context/base/regi-cp1253.lua46
-rw-r--r--Master/texmf-dist/tex/context/base/regi-cp1254.lua46
-rw-r--r--Master/texmf-dist/tex/context/base/regi-cp1255.lua46
-rw-r--r--Master/texmf-dist/tex/context/base/regi-cp1256.lua46
-rw-r--r--Master/texmf-dist/tex/context/base/regi-cp1257.lua46
-rw-r--r--Master/texmf-dist/tex/context/base/regi-cp1258.lua46
-rw-r--r--Master/texmf-dist/tex/context/base/regi-ini.lua8
-rw-r--r--Master/texmf-dist/tex/context/base/regi-ini.mkiv2
-rw-r--r--Master/texmf-dist/tex/context/base/regi-utf.mkii1
-rw-r--r--Master/texmf-dist/tex/context/base/s-abr-01.tex7
-rw-r--r--Master/texmf-dist/tex/context/base/s-chi-00.tex2
-rw-r--r--Master/texmf-dist/tex/context/base/s-fnt-10.tex1
-rw-r--r--Master/texmf-dist/tex/context/base/s-fnt-25.tex40
-rw-r--r--Master/texmf-dist/tex/context/base/s-fnt-26.tex73
-rw-r--r--Master/texmf-dist/tex/context/base/s-inf-01.tex203
-rw-r--r--Master/texmf-dist/tex/context/base/s-inf-02.tex27
-rw-r--r--Master/texmf-dist/tex/context/base/s-map-10.tex3
-rw-r--r--Master/texmf-dist/tex/context/base/s-mod-00.tex11
-rw-r--r--Master/texmf-dist/tex/context/base/s-mod-01.tex17
-rw-r--r--Master/texmf-dist/tex/context/base/s-mod.ctx24
-rw-r--r--Master/texmf-dist/tex/context/base/s-pre-60.tex2
-rw-r--r--Master/texmf-dist/tex/context/base/s-pre-64.tex2
-rw-r--r--Master/texmf-dist/tex/context/base/s-ptj-01.tex166
-rw-r--r--Master/texmf-dist/tex/context/base/scrn-bar.mkiv4
-rw-r--r--Master/texmf-dist/tex/context/base/scrn-but.mkiv5
-rw-r--r--Master/texmf-dist/tex/context/base/scrn-fld.mkii2
-rw-r--r--Master/texmf-dist/tex/context/base/scrn-fld.mkiv105
-rw-r--r--Master/texmf-dist/tex/context/base/scrn-hlp.mkiv46
-rw-r--r--Master/texmf-dist/tex/context/base/scrn-int.lua2
-rw-r--r--Master/texmf-dist/tex/context/base/scrn-int.mkii24
-rw-r--r--Master/texmf-dist/tex/context/base/scrn-int.mkiv67
-rw-r--r--Master/texmf-dist/tex/context/base/scrn-men.mkiv19
-rw-r--r--Master/texmf-dist/tex/context/base/scrn-nav.mkiv28
-rw-r--r--Master/texmf-dist/tex/context/base/scrp-cjk.lua13
-rw-r--r--Master/texmf-dist/tex/context/base/scrp-ini.lua4
-rw-r--r--Master/texmf-dist/tex/context/base/scrp-ini.mkiv16
-rw-r--r--Master/texmf-dist/tex/context/base/sort-ini.lua320
-rw-r--r--Master/texmf-dist/tex/context/base/sort-lan.lua402
-rw-r--r--Master/texmf-dist/tex/context/base/sort-lan.mkii74
-rw-r--r--Master/texmf-dist/tex/context/base/spac-ali.mkiv677
-rw-r--r--Master/texmf-dist/tex/context/base/spac-def.mkiv118
-rw-r--r--Master/texmf-dist/tex/context/base/spac-fnt.mkiv94
-rw-r--r--Master/texmf-dist/tex/context/base/spac-gen.mkii (renamed from Master/texmf-dist/tex/context/base/core-spa.mkii)40
-rw-r--r--Master/texmf-dist/tex/context/base/spac-grd.mkii (renamed from Master/texmf-dist/tex/context/base/core-grd.mkii)0
-rw-r--r--Master/texmf-dist/tex/context/base/spac-grd.mkiv259
-rw-r--r--Master/texmf-dist/tex/context/base/spac-hor.lua32
-rw-r--r--Master/texmf-dist/tex/context/base/spac-hor.mkiv946
-rw-r--r--Master/texmf-dist/tex/context/base/spac-pag.mkiv199
-rw-r--r--Master/texmf-dist/tex/context/base/spac-par.mkiv192
-rw-r--r--Master/texmf-dist/tex/context/base/spac-ver.lua1185
-rw-r--r--Master/texmf-dist/tex/context/base/spac-ver.mkiv2078
-rw-r--r--Master/texmf-dist/tex/context/base/spec-dpm.mkii3
-rw-r--r--Master/texmf-dist/tex/context/base/spec-dpx.mkii3
-rw-r--r--Master/texmf-dist/tex/context/base/spec-fdf.mkii229
-rw-r--r--Master/texmf-dist/tex/context/base/spec-tpd.mkii2
-rw-r--r--Master/texmf-dist/tex/context/base/spec-tst.mkii102
-rw-r--r--Master/texmf-dist/tex/context/base/strc-bkm.lua52
-rw-r--r--Master/texmf-dist/tex/context/base/strc-bkm.mkiv5
-rw-r--r--Master/texmf-dist/tex/context/base/strc-blk.lua17
-rw-r--r--Master/texmf-dist/tex/context/base/strc-blk.mkiv18
-rw-r--r--Master/texmf-dist/tex/context/base/strc-def.mkiv19
-rw-r--r--Master/texmf-dist/tex/context/base/strc-des.lua2
-rw-r--r--Master/texmf-dist/tex/context/base/strc-des.mkiv390
-rw-r--r--Master/texmf-dist/tex/context/base/strc-doc.lua163
-rw-r--r--Master/texmf-dist/tex/context/base/strc-doc.mkiv84
-rw-r--r--Master/texmf-dist/tex/context/base/strc-flt.lua2
-rw-r--r--Master/texmf-dist/tex/context/base/strc-flt.mkiv409
-rw-r--r--Master/texmf-dist/tex/context/base/strc-ini.lua42
-rw-r--r--Master/texmf-dist/tex/context/base/strc-ini.mkiv8
-rw-r--r--Master/texmf-dist/tex/context/base/strc-itm.lua2
-rw-r--r--Master/texmf-dist/tex/context/base/strc-itm.mkii33
-rw-r--r--Master/texmf-dist/tex/context/base/strc-itm.mkiv347
-rw-r--r--Master/texmf-dist/tex/context/base/strc-lnt.mkiv54
-rw-r--r--Master/texmf-dist/tex/context/base/strc-lst.lua255
-rw-r--r--Master/texmf-dist/tex/context/base/strc-lst.mkiv91
-rw-r--r--Master/texmf-dist/tex/context/base/strc-mar.lua2
-rw-r--r--Master/texmf-dist/tex/context/base/strc-mar.mkiv14
-rw-r--r--Master/texmf-dist/tex/context/base/strc-mat.lua2
-rw-r--r--Master/texmf-dist/tex/context/base/strc-mat.mkiv962
-rw-r--r--Master/texmf-dist/tex/context/base/strc-not.lua75
-rw-r--r--Master/texmf-dist/tex/context/base/strc-not.mkii32
-rw-r--r--Master/texmf-dist/tex/context/base/strc-not.mkiv405
-rw-r--r--Master/texmf-dist/tex/context/base/strc-num.lua98
-rw-r--r--Master/texmf-dist/tex/context/base/strc-num.mkiv110
-rw-r--r--Master/texmf-dist/tex/context/base/strc-pag.lua110
-rw-r--r--Master/texmf-dist/tex/context/base/strc-pag.mkiv97
-rw-r--r--Master/texmf-dist/tex/context/base/strc-prc.lua2
-rw-r--r--Master/texmf-dist/tex/context/base/strc-prc.mkiv2
-rw-r--r--Master/texmf-dist/tex/context/base/strc-ref.lua641
-rw-r--r--Master/texmf-dist/tex/context/base/strc-ref.mkii3
-rw-r--r--Master/texmf-dist/tex/context/base/strc-ref.mkiv290
-rw-r--r--Master/texmf-dist/tex/context/base/strc-reg.lua245
-rw-r--r--Master/texmf-dist/tex/context/base/strc-reg.mkii3
-rw-r--r--Master/texmf-dist/tex/context/base/strc-reg.mkiv282
-rw-r--r--Master/texmf-dist/tex/context/base/strc-ren.mkiv95
-rw-r--r--Master/texmf-dist/tex/context/base/strc-sbe.mkiv11
-rw-r--r--Master/texmf-dist/tex/context/base/strc-sec.mkiv244
-rw-r--r--Master/texmf-dist/tex/context/base/strc-syn.lua42
-rw-r--r--Master/texmf-dist/tex/context/base/strc-syn.mkiv103
-rw-r--r--Master/texmf-dist/tex/context/base/strc-xml.mkiv18
-rw-r--r--Master/texmf-dist/tex/context/base/supp-box.tex7
-rw-r--r--Master/texmf-dist/tex/context/base/supp-dir.mkiv23
-rw-r--r--Master/texmf-dist/tex/context/base/supp-fil.lua201
-rw-r--r--Master/texmf-dist/tex/context/base/supp-fil.mkii2
-rw-r--r--Master/texmf-dist/tex/context/base/supp-fil.mkiv199
-rw-r--r--Master/texmf-dist/tex/context/base/supp-mat.mkii (renamed from Master/texmf-dist/tex/context/base/supp-mat.tex)0
-rw-r--r--Master/texmf-dist/tex/context/base/supp-mat.mkiv293
-rw-r--r--Master/texmf-dist/tex/context/base/supp-mis.mkii27
-rw-r--r--Master/texmf-dist/tex/context/base/supp-mis.tex9
-rw-r--r--Master/texmf-dist/tex/context/base/supp-mpe.tex9
-rw-r--r--Master/texmf-dist/tex/context/base/supp-mps.mkii3
-rw-r--r--Master/texmf-dist/tex/context/base/supp-num.tex23
-rw-r--r--Master/texmf-dist/tex/context/base/supp-pdf.tex3
-rw-r--r--Master/texmf-dist/tex/context/base/supp-ran.lua31
-rw-r--r--Master/texmf-dist/tex/context/base/supp-vis.tex11
-rw-r--r--Master/texmf-dist/tex/context/base/symb-ini.mkiv10
-rw-r--r--Master/texmf-dist/tex/context/base/syst-aux.mkiv246
-rw-r--r--Master/texmf-dist/tex/context/base/syst-con.lua2
-rw-r--r--Master/texmf-dist/tex/context/base/syst-ext.mkii29
-rw-r--r--Master/texmf-dist/tex/context/base/syst-gen.mkii10
-rw-r--r--Master/texmf-dist/tex/context/base/syst-ini.tex17
-rw-r--r--Master/texmf-dist/tex/context/base/syst-ltx.tex56
-rw-r--r--Master/texmf-dist/tex/context/base/syst-lua.lua46
-rw-r--r--Master/texmf-dist/tex/context/base/tabl-com.mkii (renamed from Master/texmf-dist/tex/context/base/type-tmf.tex)17
-rw-r--r--Master/texmf-dist/tex/context/base/tabl-com.mkiv21
-rw-r--r--Master/texmf-dist/tex/context/base/tabl-ltb.mkii2
-rw-r--r--Master/texmf-dist/tex/context/base/tabl-ltb.mkiv30
-rw-r--r--Master/texmf-dist/tex/context/base/tabl-ntb.mkii2
-rw-r--r--Master/texmf-dist/tex/context/base/tabl-ntb.mkiv100
-rw-r--r--Master/texmf-dist/tex/context/base/tabl-tab.mkiv81
-rw-r--r--Master/texmf-dist/tex/context/base/tabl-tbl.mkii3
-rw-r--r--Master/texmf-dist/tex/context/base/tabl-tbl.mkiv108
-rw-r--r--Master/texmf-dist/tex/context/base/tabl-tsp.mkiv6
-rw-r--r--Master/texmf-dist/tex/context/base/task-ini.lua101
-rw-r--r--Master/texmf-dist/tex/context/base/toks-ini.lua12
-rw-r--r--Master/texmf-dist/tex/context/base/toks-ini.mkiv4
-rw-r--r--Master/texmf-dist/tex/context/base/trac-deb.lua73
-rw-r--r--Master/texmf-dist/tex/context/base/trac-deb.mkiv16
-rw-r--r--Master/texmf-dist/tex/context/base/trac-inf.lua36
-rw-r--r--Master/texmf-dist/tex/context/base/trac-lmx.lua263
-rw-r--r--Master/texmf-dist/tex/context/base/trac-log.lua70
-rw-r--r--Master/texmf-dist/tex/context/base/trac-tex.mkiv19
-rw-r--r--Master/texmf-dist/tex/context/base/trac-tim.lua101
-rw-r--r--Master/texmf-dist/tex/context/base/trac-tra.lua180
-rw-r--r--Master/texmf-dist/tex/context/base/type-buy.mkii (renamed from Master/texmf-dist/tex/context/base/type-buy.tex)230
-rw-r--r--Master/texmf-dist/tex/context/base/type-buy.mkiv82
-rw-r--r--Master/texmf-dist/tex/context/base/type-cbg.mkii (renamed from Master/texmf-dist/tex/context/base/type-cbg.tex)0
-rw-r--r--Master/texmf-dist/tex/context/base/type-cow.mkii (renamed from Master/texmf-dist/tex/context/base/type-cow.tex)0
-rw-r--r--Master/texmf-dist/tex/context/base/type-cow.mkiv85
-rw-r--r--Master/texmf-dist/tex/context/base/type-def.mkii86
-rw-r--r--Master/texmf-dist/tex/context/base/type-def.mkiv48
-rw-r--r--Master/texmf-dist/tex/context/base/type-def.tex128
-rw-r--r--Master/texmf-dist/tex/context/base/type-exp.mkii (renamed from Master/texmf-dist/tex/context/base/type-exp.tex)0
-rw-r--r--Master/texmf-dist/tex/context/base/type-fsf.mkii (renamed from Master/texmf-dist/tex/context/base/type-fsf.tex)0
-rw-r--r--Master/texmf-dist/tex/context/base/type-ghz.mkii (renamed from Master/texmf-dist/tex/context/base/type-ghz.tex)0
-rw-r--r--Master/texmf-dist/tex/context/base/type-ghz.mkiv (renamed from Master/texmf-dist/tex/context/base/type-hgz.tex)6
-rw-r--r--Master/texmf-dist/tex/context/base/type-hgz.mkii1
-rw-r--r--Master/texmf-dist/tex/context/base/type-hgz.mkiv1
-rw-r--r--Master/texmf-dist/tex/context/base/type-husayni-default.mkiv146
-rw-r--r--Master/texmf-dist/tex/context/base/type-ini.mkii19
-rw-r--r--Master/texmf-dist/tex/context/base/type-ini.mkiv296
-rw-r--r--Master/texmf-dist/tex/context/base/type-lua.mkiv88
-rw-r--r--Master/texmf-dist/tex/context/base/type-mac.mkii373
-rw-r--r--Master/texmf-dist/tex/context/base/type-mac.mkiv373
-rw-r--r--Master/texmf-dist/tex/context/base/type-mac.tex434
-rw-r--r--Master/texmf-dist/tex/context/base/type-msw.mkii1
-rw-r--r--Master/texmf-dist/tex/context/base/type-msw.mkiv1
-rw-r--r--Master/texmf-dist/tex/context/base/type-one.mkii3867
-rw-r--r--Master/texmf-dist/tex/context/base/type-one.mkiv99
-rw-r--r--Master/texmf-dist/tex/context/base/type-otf.mkii2426
-rw-r--r--Master/texmf-dist/tex/context/base/type-otf.mkiv2162
-rw-r--r--Master/texmf-dist/tex/context/base/type-otf.tex155
-rw-r--r--Master/texmf-dist/tex/context/base/type-pre.mkii (renamed from Master/texmf-dist/tex/context/base/type-pre.tex)0
-rw-r--r--Master/texmf-dist/tex/context/base/type-run.mkiv4
-rw-r--r--Master/texmf-dist/tex/context/base/type-set.mkii81
-rw-r--r--Master/texmf-dist/tex/context/base/type-set.mkiv77
-rw-r--r--Master/texmf-dist/tex/context/base/type-siz.mkii157
-rw-r--r--Master/texmf-dist/tex/context/base/type-siz.mkiv159
-rw-r--r--Master/texmf-dist/tex/context/base/type-siz.tex179
-rw-r--r--Master/texmf-dist/tex/context/base/type-tmf.mkii1147
-rw-r--r--Master/texmf-dist/tex/context/base/type-tmf.mkiv919
-rw-r--r--Master/texmf-dist/tex/context/base/type-win.mkii (renamed from Master/texmf-dist/tex/context/base/type-msw.tex)2
-rw-r--r--Master/texmf-dist/tex/context/base/type-win.mkiv (renamed from Master/texmf-dist/tex/context/base/type-win.tex)34
-rw-r--r--Master/texmf-dist/tex/context/base/type-xtx.mkii (renamed from Master/texmf-dist/tex/context/base/type-xtx.tex)1
-rw-r--r--Master/texmf-dist/tex/context/base/typo-brk.lua119
-rw-r--r--Master/texmf-dist/tex/context/base/typo-brk.mkiv46
-rw-r--r--Master/texmf-dist/tex/context/base/typo-cap.lua14
-rw-r--r--Master/texmf-dist/tex/context/base/typo-cap.mkiv22
-rw-r--r--Master/texmf-dist/tex/context/base/typo-dig.lua106
-rw-r--r--Master/texmf-dist/tex/context/base/typo-dig.mkiv51
-rw-r--r--Master/texmf-dist/tex/context/base/typo-krn.lua84
-rw-r--r--Master/texmf-dist/tex/context/base/typo-krn.mkiv60
-rw-r--r--Master/texmf-dist/tex/context/base/typo-mir.lua63
-rw-r--r--Master/texmf-dist/tex/context/base/typo-mir.mkiv14
-rw-r--r--Master/texmf-dist/tex/context/base/typo-rep.lua135
-rw-r--r--Master/texmf-dist/tex/context/base/typo-rep.mkiv53
-rw-r--r--Master/texmf-dist/tex/context/base/typo-spa.lua27
-rw-r--r--Master/texmf-dist/tex/context/base/typo-spa.mkiv12
-rw-r--r--Master/texmf-dist/tex/context/base/unic-031.mkii10
-rw-r--r--Master/texmf-dist/tex/context/base/verb-eif.mkii2
-rw-r--r--Master/texmf-dist/tex/context/base/verb-ini.mkii25
-rw-r--r--Master/texmf-dist/tex/context/base/verb-js.mkii2
-rw-r--r--Master/texmf-dist/tex/context/base/verb-jv.mkii2
-rw-r--r--Master/texmf-dist/tex/context/base/verb-pas.mkii2
-rw-r--r--Master/texmf-dist/tex/context/base/verb-raw.mkii6
-rw-r--r--Master/texmf-dist/tex/context/base/verb-sql.mkii2
-rw-r--r--Master/texmf-dist/tex/context/base/x-asciimath.lua267
-rw-r--r--Master/texmf-dist/tex/context/base/x-asciimath.mkiv96
-rw-r--r--Master/texmf-dist/tex/context/base/x-calcmath.lua289
-rw-r--r--Master/texmf-dist/tex/context/base/x-calcmath.mkiv2
-rw-r--r--Master/texmf-dist/tex/context/base/x-cals.lua209
-rw-r--r--Master/texmf-dist/tex/context/base/x-cals.mkiv207
-rw-r--r--Master/texmf-dist/tex/context/base/x-chemml.mkiv2
-rw-r--r--Master/texmf-dist/tex/context/base/x-contml.mkii (renamed from Master/texmf-dist/tex/context/base/x-contml.tex)2
-rw-r--r--Master/texmf-dist/tex/context/base/x-corres.mkii (renamed from Master/texmf-dist/tex/context/base/x-corres.tex)0
-rw-r--r--Master/texmf-dist/tex/context/base/x-ct.lua182
-rw-r--r--Master/texmf-dist/tex/context/base/x-ct.mkiv179
-rw-r--r--Master/texmf-dist/tex/context/base/x-dir-05.mkii51
-rw-r--r--Master/texmf-dist/tex/context/base/x-dir-05.mkiv72
-rw-r--r--Master/texmf-dist/tex/context/base/x-fe.mkii (renamed from Master/texmf-dist/tex/context/base/x-fe.tex)0
-rw-r--r--Master/texmf-dist/tex/context/base/x-fig-03.tex10
-rw-r--r--Master/texmf-dist/tex/context/base/x-fo.mkii (renamed from Master/texmf-dist/tex/context/base/x-fo.tex)38
-rw-r--r--Master/texmf-dist/tex/context/base/x-foxet.mkii28
-rw-r--r--Master/texmf-dist/tex/context/base/x-foxet.mkiv29
-rw-r--r--Master/texmf-dist/tex/context/base/x-foxet.tex15
-rw-r--r--Master/texmf-dist/tex/context/base/x-ldx.tex20
-rw-r--r--Master/texmf-dist/tex/context/base/x-mathml.lua331
-rw-r--r--Master/texmf-dist/tex/context/base/x-mathml.mkiv77
-rw-r--r--Master/texmf-dist/tex/context/base/x-pending.mkiv39
-rw-r--r--Master/texmf-dist/tex/context/base/x-set-11.mkii556
-rw-r--r--Master/texmf-dist/tex/context/base/x-set-11.mkiv566
-rw-r--r--Master/texmf-dist/tex/context/base/x-set-11.tex890
-rw-r--r--Master/texmf-dist/tex/context/base/x-set-12.tex17
-rw-r--r--Master/texmf-dist/tex/context/base/x-set-99.tex283
-rw-r--r--Master/texmf-dist/tex/context/base/x-xtag.mkiv23
-rw-r--r--Master/texmf-dist/tex/context/bib/bibl-apa-de.tex4
-rw-r--r--Master/texmf-dist/tex/context/bib/t-bib.mkii5
-rw-r--r--Master/texmf-dist/tex/context/bib/t-bib.mkiv62
-rw-r--r--Master/texmf-dist/tex/context/bib/t-bibltx.tex75
-rw-r--r--Master/texmf-dist/tex/context/config/cont-cz.ini5
-rw-r--r--Master/texmf-dist/tex/context/config/cont-de.ini5
-rw-r--r--Master/texmf-dist/tex/context/config/cont-en.ini5
-rw-r--r--Master/texmf-dist/tex/context/config/cont-fmt.tex29
-rw-r--r--Master/texmf-dist/tex/context/config/cont-fr.ini5
-rw-r--r--Master/texmf-dist/tex/context/config/cont-it.ini5
-rw-r--r--Master/texmf-dist/tex/context/config/cont-nl.ini5
-rw-r--r--Master/texmf-dist/tex/context/config/cont-ro.ini5
-rw-r--r--Master/texmf-dist/tex/context/config/cont-uk.ini5
-rw-r--r--Master/texmf-dist/tex/context/fonts/antykwa-math.lfg57
-rw-r--r--Master/texmf-dist/tex/context/fonts/charter-math.lfg28
-rw-r--r--Master/texmf-dist/tex/context/fonts/garamond-math.lfg28
-rw-r--r--Master/texmf-dist/tex/context/fonts/husayni.lfg178
-rw-r--r--Master/texmf-dist/tex/context/fonts/hvmath-math.lfg24
-rw-r--r--Master/texmf-dist/tex/context/fonts/informal-math.lfg22
-rw-r--r--Master/texmf-dist/tex/context/fonts/iwona-math.lfg57
-rw-r--r--Master/texmf-dist/tex/context/fonts/lm-math.lfg230
-rw-r--r--Master/texmf-dist/tex/context/fonts/lucida-math.lfg320
-rw-r--r--Master/texmf-dist/tex/context/fonts/mathtimes-math.lfg24
-rw-r--r--Master/texmf-dist/tex/context/fonts/px-math.lfg24
-rw-r--r--Master/texmf-dist/tex/context/fonts/symbol-math.lfg17
-rw-r--r--Master/texmf-dist/tex/context/fonts/tx-math.lfg24
-rw-r--r--Master/texmf-dist/tex/context/fonts/utopia-math.lfg28
-rw-r--r--Master/texmf-dist/tex/context/interface/cont-cs.xml71
-rw-r--r--Master/texmf-dist/tex/context/interface/cont-de.xml71
-rw-r--r--Master/texmf-dist/tex/context/interface/cont-en.xml59
-rw-r--r--Master/texmf-dist/tex/context/interface/cont-fr.xml67
-rw-r--r--Master/texmf-dist/tex/context/interface/cont-it.xml71
-rw-r--r--Master/texmf-dist/tex/context/interface/cont-nl.xml71
-rw-r--r--Master/texmf-dist/tex/context/interface/cont-pe.xml71
-rw-r--r--Master/texmf-dist/tex/context/interface/cont-ro.xml71
-rw-r--r--Master/texmf-dist/tex/context/interface/keys-cs.xml69
-rw-r--r--Master/texmf-dist/tex/context/interface/keys-de.xml69
-rw-r--r--Master/texmf-dist/tex/context/interface/keys-en.xml73
-rw-r--r--Master/texmf-dist/tex/context/interface/keys-fr.xml69
-rw-r--r--Master/texmf-dist/tex/context/interface/keys-it.xml69
-rw-r--r--Master/texmf-dist/tex/context/interface/keys-nl.xml73
-rw-r--r--Master/texmf-dist/tex/context/interface/keys-pe.xml69
-rw-r--r--Master/texmf-dist/tex/context/interface/keys-ro.xml69
-rw-r--r--Master/texmf-dist/tex/context/interface/t-bib.xml411
-rw-r--r--Master/texmf-dist/tex/context/patterns/lang-ba.hyp36
-rw-r--r--Master/texmf-dist/tex/context/patterns/lang-ba.pat224
-rw-r--r--Master/texmf-dist/tex/context/patterns/lang-bg.hyp2
-rw-r--r--Master/texmf-dist/tex/context/patterns/lang-bg.pat2
-rw-r--r--Master/texmf-dist/tex/context/patterns/lang-ca.hyp2
-rw-r--r--Master/texmf-dist/tex/context/patterns/lang-ca.pat2
-rw-r--r--Master/texmf-dist/tex/context/patterns/lang-ca.rme2
-rw-r--r--Master/texmf-dist/tex/context/patterns/lang-cs.hyp2
-rw-r--r--Master/texmf-dist/tex/context/patterns/lang-cs.pat2
-rw-r--r--Master/texmf-dist/tex/context/patterns/lang-cy.hyp33
-rw-r--r--Master/texmf-dist/tex/context/patterns/lang-cy.pat35
-rw-r--r--Master/texmf-dist/tex/context/patterns/lang-cy.rme (renamed from Master/texmf-dist/tex/context/patterns/lang-il.rme)16
-rw-r--r--Master/texmf-dist/tex/context/patterns/lang-da.hyp2
-rw-r--r--Master/texmf-dist/tex/context/patterns/lang-da.pat2
-rw-r--r--Master/texmf-dist/tex/context/patterns/lang-de.hyp6
-rw-r--r--Master/texmf-dist/tex/context/patterns/lang-de.pat14392
-rw-r--r--Master/texmf-dist/tex/context/patterns/lang-de.rme16
-rw-r--r--Master/texmf-dist/tex/context/patterns/lang-deo.hyp6
-rw-r--r--Master/texmf-dist/tex/context/patterns/lang-deo.pat14238
-rw-r--r--Master/texmf-dist/tex/context/patterns/lang-deo.rme16
-rw-r--r--Master/texmf-dist/tex/context/patterns/lang-es.hyp2
-rw-r--r--Master/texmf-dist/tex/context/patterns/lang-es.pat1238
-rw-r--r--Master/texmf-dist/tex/context/patterns/lang-es.rme96
-rw-r--r--Master/texmf-dist/tex/context/patterns/lang-et.hyp2
-rw-r--r--Master/texmf-dist/tex/context/patterns/lang-et.pat2
-rw-r--r--Master/texmf-dist/tex/context/patterns/lang-eu.hyp2
-rw-r--r--Master/texmf-dist/tex/context/patterns/lang-eu.pat2
-rw-r--r--Master/texmf-dist/tex/context/patterns/lang-fi.hyp2
-rw-r--r--Master/texmf-dist/tex/context/patterns/lang-fi.pat2
-rw-r--r--Master/texmf-dist/tex/context/patterns/lang-fr.hyp2
-rw-r--r--Master/texmf-dist/tex/context/patterns/lang-fr.pat2
-rw-r--r--Master/texmf-dist/tex/context/patterns/lang-gb.hyp2
-rw-r--r--Master/texmf-dist/tex/context/patterns/lang-gb.pat2
-rw-r--r--Master/texmf-dist/tex/context/patterns/lang-hr.hyp2
-rw-r--r--Master/texmf-dist/tex/context/patterns/lang-hr.pat2
-rw-r--r--Master/texmf-dist/tex/context/patterns/lang-hu.hyp2
-rw-r--r--Master/texmf-dist/tex/context/patterns/lang-hu.pat68283
-rw-r--r--Master/texmf-dist/tex/context/patterns/lang-hu.rme69
-rw-r--r--Master/texmf-dist/tex/context/patterns/lang-il.pat1905
-rw-r--r--Master/texmf-dist/tex/context/patterns/lang-is.hyp32
-rw-r--r--Master/texmf-dist/tex/context/patterns/lang-is.pat4219
-rw-r--r--Master/texmf-dist/tex/context/patterns/lang-is.rme79
-rw-r--r--Master/texmf-dist/tex/context/patterns/lang-it.hyp2
-rw-r--r--Master/texmf-dist/tex/context/patterns/lang-it.pat2
-rw-r--r--Master/texmf-dist/tex/context/patterns/lang-la.hyp2
-rw-r--r--Master/texmf-dist/tex/context/patterns/lang-la.pat2
-rw-r--r--Master/texmf-dist/tex/context/patterns/lang-lt.hyp (renamed from Master/texmf-dist/tex/context/patterns/lang-il.hyp)2
-rw-r--r--Master/texmf-dist/tex/context/patterns/lang-lt.pat1553
-rw-r--r--Master/texmf-dist/tex/context/patterns/lang-lt.rme47
-rw-r--r--Master/texmf-dist/tex/context/patterns/lang-mn.hyp8
-rw-r--r--Master/texmf-dist/tex/context/patterns/lang-mn.pat995
-rw-r--r--Master/texmf-dist/tex/context/patterns/lang-mn.rme86
-rw-r--r--Master/texmf-dist/tex/context/patterns/lang-nb.hyp2
-rw-r--r--Master/texmf-dist/tex/context/patterns/lang-nb.pat2
-rw-r--r--Master/texmf-dist/tex/context/patterns/lang-nl.hyp2
-rw-r--r--Master/texmf-dist/tex/context/patterns/lang-nl.pat2
-rw-r--r--Master/texmf-dist/tex/context/patterns/lang-nn.hyp2
-rw-r--r--Master/texmf-dist/tex/context/patterns/lang-nn.pat2
-rw-r--r--Master/texmf-dist/tex/context/patterns/lang-no.hyp118
-rw-r--r--Master/texmf-dist/tex/context/patterns/lang-no.pat26818
-rw-r--r--Master/texmf-dist/tex/context/patterns/lang-pl.hyp2
-rw-r--r--Master/texmf-dist/tex/context/patterns/lang-pl.pat2
-rw-r--r--Master/texmf-dist/tex/context/patterns/lang-pt.hyp2
-rw-r--r--Master/texmf-dist/tex/context/patterns/lang-pt.pat2
-rw-r--r--Master/texmf-dist/tex/context/patterns/lang-ro.hyp2
-rw-r--r--Master/texmf-dist/tex/context/patterns/lang-ro.pat2
-rw-r--r--Master/texmf-dist/tex/context/patterns/lang-ru.hyp2
-rw-r--r--Master/texmf-dist/tex/context/patterns/lang-ru.pat2
-rw-r--r--Master/texmf-dist/tex/context/patterns/lang-sk.hyp2
-rw-r--r--Master/texmf-dist/tex/context/patterns/lang-sk.pat2
-rw-r--r--Master/texmf-dist/tex/context/patterns/lang-sl.hyp2
-rw-r--r--Master/texmf-dist/tex/context/patterns/lang-sl.pat2
-rw-r--r--Master/texmf-dist/tex/context/patterns/lang-sr.hyp137
-rw-r--r--Master/texmf-dist/tex/context/patterns/lang-sr.pat2432
-rw-r--r--Master/texmf-dist/tex/context/patterns/lang-sr.rme80
-rw-r--r--Master/texmf-dist/tex/context/patterns/lang-sv.hyp2
-rw-r--r--Master/texmf-dist/tex/context/patterns/lang-sv.pat2
-rw-r--r--Master/texmf-dist/tex/context/patterns/lang-tk.hyp8
-rw-r--r--Master/texmf-dist/tex/context/patterns/lang-tk.pat2378
-rw-r--r--Master/texmf-dist/tex/context/patterns/lang-tk.rme18
-rw-r--r--Master/texmf-dist/tex/context/patterns/lang-tr.hyp2
-rw-r--r--Master/texmf-dist/tex/context/patterns/lang-tr.pat2
-rw-r--r--Master/texmf-dist/tex/context/patterns/lang-us.hyp2
-rw-r--r--Master/texmf-dist/tex/context/patterns/lang-us.pat2
-rw-r--r--Master/texmf-dist/tex/context/patterns/lang-zh.hyp8
-rw-r--r--Master/texmf-dist/tex/context/patterns/lang-zh.pat195
-rw-r--r--Master/texmf-dist/tex/context/patterns/lang-zh.rme88
-rw-r--r--Master/texmf-dist/tex/context/sample/demo-cld.cld74
-rw-r--r--Master/texmf-dist/tex/context/sample/sample.tex68
-rw-r--r--Master/texmf-dist/tex/context/test/chem-str-test.tex560
-rw-r--r--Master/texmf-dist/tex/context/test/sort-lan-test.tex38
-rw-r--r--Master/texmf-dist/tex/context/test/x-cals-test.tex48
-rw-r--r--Master/texmf-dist/tex/context/test/x-cals-test.xml522
-rw-r--r--Master/texmf-dist/tex/context/test/x-cml-test.tex9
-rw-r--r--Master/texmf-dist/tex/context/test/x-cml-test.xml210
-rw-r--r--Master/texmf-dist/tex/context/test/x-ct-test.tex7
-rw-r--r--Master/texmf-dist/tex/context/test/x-ct-test.xml149
-rw-r--r--Master/texmf-dist/tex/context/test/x-mmp-test.tex12
-rw-r--r--Master/texmf-dist/tex/context/test/x-mmp-test.xml1270
-rw-r--r--Master/texmf-dist/tex/generic/context/luatex-fonts-merged.lua4193
-rw-r--r--Master/texmf-dist/tex/generic/context/luatex-fonts.lua2
-rw-r--r--Master/texmf-dist/tex/generic/context/luatex-mplib.lua6
-rw-r--r--Master/texmf-dist/tex/generic/context/luatex-test.tex6
-rw-r--r--Master/texmf-dist/tex/generic/context/m-ch-en.tex4
934 files changed, 173771 insertions, 111680 deletions
diff --git a/Master/texmf-dist/context/data/scite/cont-cs-scite.properties b/Master/texmf-dist/context/data/scite/cont-cs-scite.properties
index fbc653e57cc..ddf42aacdd6 100644
--- a/Master/texmf-dist/context/data/scite/cont-cs-scite.properties
+++ b/Master/texmf-dist/context/data/scite/cont-cs-scite.properties
@@ -1,97 +1 @@
-keywordclass.macros.context.cs=\
-CAP Cap Caps MESIC Rimskecislice SLOVA \
-SLOVO Slova Slovo VSEDNIDEN Znak Znaky \
-aktualnicislonadpisu aktualnidatum appendix barva bilemisto bublinkovanapoveda \
-bypassblocks cap cernalinka cernelinky chapter chem \
-cisla cislonadpisu citace citovat completecombinedlist completelistoffloats \
-completelistofsorts completelistofsynonyms completeregister coupledregister crlf datum \
-definebodyfontDEF definebodyfontREF definedfont definefontfeature definefonthandling definetype \
-definetypeface definuj definujbarvu definujblok definujbloksekce definujbuffer \
-definujfont definujformatodkazu definujinterakcnimenu definujinterakcnimenu definujkombinovanyseznam definujkonverzi \
-definujlogo definujnadpis definujobrazeksymbol definujodkaz definujodsazovani definujodstavce \
-definujopis definujoramovani definujoramovanytext definujpaletu definujplvouciobjekt definujpodpole \
-definujpole definujpopis definujpopisek definujprekryv definujpreskok definujprofil \
-definujprogram definujprostredizakladnihofontu definujrejstrik definujsablonutabulky definujsekci definujseznam \
-definujseznamodkazu definujskupinubarev definujstartstop definujsymbol definujsynonumumfontu definujsynonyma \
-definujtabelaci definujtext definujtrideni definujupravu definujvelikostpapiru definujverzi \
-definujvycet definujvystup definujzakladnifont definujzasobnikpoli definujznaceni description \
-dodrzujprofil dodrzujverzi dodrzujverziprofilu dvoustrannypapir emptylines enumeration \
-externiobraz footnotetext forceblocks framedtext hl hlavnijazyk \
-indentation ininner inouter instalacejazyka interakcnilista interakcnitlacitka \
-jazyk jdidolu jdina jdinabox klonujpole komentar \
-konvertujcislo kopirujpole korekcebilehomista labeling listsymbol loadsorts \
-loadsynonyms mapfontsize marginalnilinka marginalnitext matematika mediaeval \
-meritko mesic mezera mrizka nadpis nadruhyokraj \
-nadtrzeni nadtrzeno name naokraj nastavbarvu nastavbarvy \
-nastavbilamista nastavblok nastavbloksekce nastavbuffer nastavcernelinky nastavcislonadpisu \
-nastavcislostrany nastavcislovani nastavcislovaniodstavcu nastavcislovaniradku nastavcislovanistran nastavcitaci \
-nastavdefinicipoznamekpodcarou nastavdeleniplvoucichobjektu nastavdelitko nastavdolnitexty nastavexterniobrazy nastavhorejsek \
-nastavhornitexty nastavinterakci nastavinterakcnilistu nastavinterakcnimenu nastavinterakcniobrazovku nastavjazyk \
-nastavkapitalky nastavkombinovanyseznam nastavkomentar nastavlegendu nastavmarginalie nastavmarginalniblok \
-nastavmarginalnilinky nastavmeziradkovoumezeru nastavnadpis nastavnadpisy nastavodkazovani nastavodsazeni \
-nastavodsazovani nastavodstavce nastavopis nastavoramovanetexty nastavoramovani nastavorez \
-nastavotoceni nastavpaletu nastavplvouciobjekt nastavplvouciobjekty nastavpodcislostrany nastavpodtrzeni \
-nastavpole nastavpolozky nastavpopisek nastavpopisky nastavpopisy nastavpozadi \
-nastavpozadi nastavpoznamkypodcarou nastavprechodstrany nastavpreskok nastavprofily nastavprogramy \
-nastavprostredizakladnihofontu nastavpublikace nastavradkovani nastavradky nastavrastr nastavrejstrik \
-nastavrovnice nastavsadusymbolu nastavsekci nastavseznam nastavseznamodkazu nastavsirkucary \
-nastavsloupce nastavspodek nastavspojeni nastavsynchronizaci nastavsynchronizacnilistu nastavsynonyma \
-nastavsystem nastavtab nastavtabelaci nastavtabulky nastavtenkelinky nastavtext \
-nastavtexthlavicky nastavtextovelinky nastavtextpopisku nastavtexttexty nastavtextyupati nastavtextyzahlavi \
-nastavtlacitka nastavtoleranci nastavtrideni nastavtype nastavumisteniprotejsku nastavumistovani \
-nastavupati nastavupravu nastavurl nastavusporadani nastavvelikostpapiru nastavverze \
-nastavvsechnapole nastavvycty nastavvyplnovelinky nastavvyplnoveradky nastavvystup nastavvzhled \
-nastavzahlavi nastavzakladnifont nastavzarovnani nastavznaceni nastavzuzeni nastrane \
-nejakyradek nekde nextsection nivy nizky nocap \
-nop obrazovka odkaz odkaz odkaznadatum odkaznastranu \
-odkaznatext odsazovani okr opis opissoubor oramovani \
-oref orez otocit oznacverzi paragraph parovastrana \
-part pis placefloat placelistoffloats placelistofsorts placelistofsynonyms \
-placereferencelist podtrzeni podtrzeno pol pole polozka \
-polozky popisky porovnejpaletu porovnejskupinubarev pozadi pozice \
-poznamka poznamkapodcarou pref prelozit premistinamrizku prepninazakladnifont \
-preskoc preskrtnuti preskrtnuto prizpusobivepole prizpusobvzhled program \
-propojeneznaceni propojenydokument propojenyrejstrik publikace ran ref \
-register reservefloat reset resettextcontent resetznaceni rimskecislice \
-rozdelplvouciobjekt rozpojeneznaceni roztazene schovejbloky section sedabarva \
-seeregister settextcontent setupfonthandling setupfontsynonym setupforms setupinterlinespace2 \
-setupitemgroup setuplistalternative setuppaper setupstrut sloupec slovovpravo \
-sort spodek stanovcharakteristickuseznamu stanovcislonadpisu startalignment startbarva \
-startbuffer startbuffer startcitace startcolumns startcombination startdescription \
-startdocument startenumeration startfakt startfigure startfloattext startformula \
-startframedtext starthiding startinteraktivnimenu startitemgroup startkomentar startkomponenta \
-startlegend startline startlinecorrection startlinenumbering startlines startlocal \
-startlocalenvironment startlocalfootnotes startmakeup startmarginalnilinka startmarginblock startnamemakeup \
-startnarrower startopposite startoverlay startoverview startparagraph startpositioning \
-startpostponing startpozadi startprodukt startprofile startprojekt startprostredi \
-startregister startsymbolset startsynchronization starttable starttables starttabulate \
-starttextovalinka starttyping startunpacked startverze startzhustene stopalignment \
-stopbarva stopbuffer stopbuffer stopcitace stopcolumns stopcombination \
-stopdescription stopdocument stopenumeration stopfakt stopfigure stopfloattext \
-stopformula stopframedtext stophiding stopinteraktivnimenu stopitemgroup stopkomentar \
-stopkomponenta stoplegend stopline stoplinecorrection stoplinenumbering stoplines \
-stoplocal stoplocalenvironment stoplocalfootnotes stopmakeup stopmarginalnilinka stopmarginblock \
-stopnamemakeup stopnarrower stopopposite stopoverlay stopoverview stopparagraph \
-stoppositioning stoppostponing stoppozadi stopprodukt stopprofile stopprojekt \
-stopprostredi stopsymbolset stopsynchronization stoptable stoptables stoptabulate \
-stoptextovalinka stoptyping stopunpacked stopverze stopzhustene strana \
-sub subject subsection subsubject subsubsection subsubsubject \
-sym symbol synchronizacnilista synchronizovat synonym tab \
-tecky tenkalinka tenkelinky tex texthlavicky textovalinka \
-textpopisku title tlacitko tref tvrdemezery typebuffer \
-typstrany ukazbarvu ukazexterniobrazy ukazmrizku ukaznastaveni ukazpaletu \
-ukazpodpery ukazpole ukazpostredizakladnihofontu ukazramecek ukazsadusymbolu ukazskupinubarev \
-ukazupravu ukazvytisk ukazvzhled ukazzakladnifont umistikombinovanyseznam umistikombinovanyseznam \
-umistilegendu umistiloga umistilokalnipoznamkypodcarou umistinadsebe umistinamrizku umistipodrovnici \
-umistipoznamkypodcarou umistirejstrik umistirejstrik umistirovnici umistiseznam umistivedlesebe \
-umistizalozky usedirectory usetypescript usetypescriptfile uzijURL uzijbloky \
-uzijexternidokument uzijexterniobraz uzijexternisoubor uzijexternisoubory uzijexternizvuk uzijkodovani \
-uzijmodul uzijodkazy uzijprikazy uzijspeciality uzijsymbol verze \
-vl vlasovalinka vlevo vpravo vradku vsedniden \
-vyberbloky vyberpapir vyberverzi vyplnenytext vyplnovelinky vyplnovepole \
-vyplnovyradek vysoky zablokujinterakcnimenu zachovejbloky zadnamezera zadnebilemisto \
-zadnedalsibloky zadnedalsisoubory zadnehorniadolniradky zadneodsazovani zadnezahlaviaupati zadneznaceni \
-zadnyseznam zalozka zapisdorejstriku zapisdoseznamu zapisdoseznamuodkazu zapismeziseznam \
-zaramovani zarovnanonastred zarovnanovlevo zarovnanovpravo zasobnikpoli zaznamovepole \
-zhustene ziskejbuffer ziskejznaceni zlomek znaceni znak \
-znaky zpracujbloky zpracujstranu zrcadlit zref \ No newline at end of file
+keywordclass.macros.context.cs=CAP Cap Caps MESIC Rimskecislice SLOVA SLOVO Slova Slovo VSEDNIDEN Znak Znaky aktualnicislonadpisu aktualnidatum appendix barva bilemisto bublinkovanapoveda bypassblocks cap cernalinka cernelinky chapter chem cisla cislonadpisu citace citovat completecombinedlist completelistoffloats completelistofsorts completelistofsynonyms completeregister coupledregister crlf datum definebodyfontDEF definebodyfontREF definedfont definefontfeature definefonthandling definetype definetypeface definuj definujbarvu definujblok definujbloksekce definujbuffer definujfont definujformatodkazu definujinterakcnimenu definujinterakcnimenu definujkombinovanyseznam definujkonverzi definujlogo definujnadpis definujobrazeksymbol definujodkaz definujodsazovani definujodstavce definujopis definujoramovani definujoramovanytext definujpaletu definujplvouciobjekt definujpodpole definujpole definujpopis definujpopisek definujprekryv definujpreskok definujprofil definujprogram definujprostredizakladnihofontu definujrejstrik definujsablonutabulky definujsekci definujseznam definujseznamodkazu definujskupinubarev definujstartstop definujsymbol definujsynonumumfontu definujsynonyma definujtabelaci definujtext definujtrideni definujupravu definujvelikostpapiru definujverzi definujvycet definujvystup definujzakladnifont definujzasobnikpoli definujznaceni description dodrzujprofil dodrzujverzi dodrzujverziprofilu dvoustrannypapir emptylines enumeration externiobraz footnotetext forceblocks framedtext hl hlavnijazyk indentation ininner inouter instalacejazyka interakcnilista interakcnitlacitka jazyk jdidolu jdina jdinabox klonujpole komentar konvertujcislo kopirujpole korekcebilehomista labeling listsymbol loadsorts loadsynonyms mapfontsize marginalnilinka marginalnitext matematika mediaeval meritko mesic mezera mrizka nadpis nadruhyokraj name naokraj nastavbarvu nastavbarvy nastavbilamista nastavblok nastavbloksekce nastavbuffer nastavcernelinky nastavcislonadpisu nastavcislostrany nastavcislovani nastavcislovaniodstavcu nastavcislovaniradku nastavcislovanistran nastavcitaci nastavdefinicipoznamekpodcarou nastavdeleniplvoucichobjektu nastavdelitko nastavdolnitexty nastavexterniobrazy nastavhorejsek nastavhornitexty nastavinterakci nastavinterakcnilistu nastavinterakcnimenu nastavinterakcniobrazovku nastavjazyk nastavkapitalky nastavkombinovanyseznam nastavkomentar nastavlegendu nastavmarginalie nastavmarginalniblok nastavmarginalnilinky nastavmeziradkovoumezeru nastavnadpis nastavnadpisy nastavodkazovani nastavodsazeni nastavodsazovani nastavodstavce nastavopis nastavoramovanetexty nastavoramovani nastavorez nastavotoceni nastavpaletu nastavplvouciobjekt nastavplvouciobjekty nastavpodcislostrany nastavpodtrzeni nastavpole nastavpolozky nastavpopisek nastavpopisky nastavpopisy nastavpozadi nastavpozadi nastavpoznamkypodcarou nastavprechodstrany nastavpreskok nastavprofily nastavprogramy nastavprostredizakladnihofontu nastavpublikace nastavradkovani nastavradky nastavrastr nastavrejstrik nastavrovnice nastavsadusymbolu nastavsekci nastavseznam nastavseznamodkazu nastavsirkucary nastavsloupce nastavspodek nastavspojeni nastavsynchronizaci nastavsynchronizacnilistu nastavsynonyma nastavsystem nastavtab nastavtabelaci nastavtabulky nastavtenkelinky nastavtext nastavtexthlavicky nastavtextovelinky nastavtextpopisku nastavtexttexty nastavtextyupati nastavtextyzahlavi nastavtlacitka nastavtoleranci nastavtrideni nastavtype nastavumisteniprotejsku nastavumistovani nastavupati nastavupravu nastavurl nastavusporadani nastavvelikostpapiru nastavverze nastavvsechnapole nastavvycty nastavvyplnovelinky nastavvyplnoveradky nastavvystup nastavvzhled nastavzahlavi nastavzakladnifont nastavzarovnani nastavznaceni nastavzuzeni nastrane nejakyradek nekde nextsection nivy nizky nocap nop obrazovka odkaz odkaz odkaznadatum odkaznastranu odkaznatext odsazovani okr opis opissoubor oramovani oref orez otocit overbar overbars overstrike overstrikes oznacverzi paragraph parovastrana part pis placefloat placelistoffloats placelistofsorts placelistofsynonyms placereferencelist pol pole polozka polozky popisky porovnejpaletu porovnejskupinubarev pozadi pozice poznamka poznamkapodcarou pref prelozit premistinamrizku prepninazakladnifont preskoc prizpusobivepole prizpusobvzhled program propojeneznaceni propojenydokument propojenyrejstrik publikace ran ref register reservefloat reset resettextcontent resetznaceni rimskecislice rozdelplvouciobjekt rozpojeneznaceni roztazene schovejbloky section sedabarva seeregister settextcontent setupfonthandling setupfontsynonym setupforms setupinterlinespace2 setupitemgroup setuplistalternative setuppaper setupstrut sloupec slovovpravo sort spodek stanovcharakteristickuseznamu stanovcislonadpisu startalignment startbarva startbuffer startbuffer startcitace startcolumns startcombination startdescription startdocument startenumeration startfakt startfigure startfloattext startformula startframedtext starthiding startinteraktivnimenu startitemgroup startkomentar startkomponenta startlegend startline startlinecorrection startlinenumbering startlines startlocal startlocalenvironment startlocalfootnotes startmakeup startmarginalnilinka startmarginblock startnamemakeup startnarrower startopposite startoverlay startoverview startparagraph startpositioning startpostponing startpozadi startprodukt startprofile startprojekt startprostredi startregister startsymbolset startsynchronization starttable starttables starttabulate starttextovalinka starttyping startunpacked startverze startzhustene stopalignment stopbarva stopbuffer stopbuffer stopcitace stopcolumns stopcombination stopdescription stopdocument stopenumeration stopfakt stopfigure stopfloattext stopformula stopframedtext stophiding stopinteraktivnimenu stopitemgroup stopkomentar stopkomponenta stoplegend stopline stoplinecorrection stoplinenumbering stoplines stoplocal stoplocalenvironment stoplocalfootnotes stopmakeup stopmarginalnilinka stopmarginblock stopnamemakeup stopnarrower stopopposite stopoverlay stopoverview stopparagraph stoppositioning stoppostponing stoppozadi stopprodukt stopprofile stopprojekt stopprostredi stopsymbolset stopsynchronization stoptable stoptables stoptabulate stoptextovalinka stoptyping stopunpacked stopverze stopzhustene strana sub subject subsection subsubject subsubsection subsubsubject sym symbol synchronizacnilista synchronizovat synonym tab tecky tenkalinka tenkelinky tex texthlavicky textovalinka textpopisku title tlacitko tref tvrdemezery typebuffer typstrany ukazbarvu ukazexterniobrazy ukazmrizku ukaznastaveni ukazpaletu ukazpodpery ukazpole ukazpostredizakladnihofontu ukazramecek ukazsadusymbolu ukazskupinubarev ukazupravu ukazvytisk ukazvzhled ukazzakladnifont umistikombinovanyseznam umistikombinovanyseznam umistilegendu umistiloga umistilokalnipoznamkypodcarou umistinadsebe umistinamrizku umistipodrovnici umistipoznamkypodcarou umistirejstrik umistirejstrik umistirovnici umistiseznam umistivedlesebe umistizalozky underbar underbars usedirectory usetypescript usetypescriptfile uzijURL uzijbloky uzijexternidokument uzijexterniobraz uzijexternisoubor uzijexternisoubory uzijexternizvuk uzijkodovani uzijmodul uzijodkazy uzijprikazy uzijspeciality uzijsymbol verze vl vlasovalinka vlevo vpravo vradku vsedniden vyberbloky vyberpapir vyberverzi vyplnenytext vyplnovelinky vyplnovepole vyplnovyradek vysoky zablokujinterakcnimenu zachovejbloky zadnamezera zadnebilemisto zadnedalsibloky zadnedalsisoubory zadnehorniadolniradky zadneodsazovani zadnezahlaviaupati zadneznaceni zadnyseznam zalozka zapisdorejstriku zapisdoseznamu zapisdoseznamuodkazu zapismeziseznam zaramovani zarovnanonastred zarovnanovlevo zarovnanovpravo zasobnikpoli zaznamovepole zhustene ziskejbuffer ziskejznaceni zlomek znaceni znak znaky zpracujbloky zpracujstranu zrcadlit zref \ No newline at end of file
diff --git a/Master/texmf-dist/context/data/scite/cont-de-scite.properties b/Master/texmf-dist/context/data/scite/cont-de-scite.properties
index f749bfe9713..b0e05b91aa5 100644
--- a/Master/texmf-dist/context/data/scite/cont-de-scite.properties
+++ b/Master/texmf-dist/context/data/scite/cont-de-scite.properties
@@ -1,97 +1 @@
-keywordclass.macros.context.de=\
-Buchstabe Buchstaben CAP Cap Caps MONAT \
-Roemischezahlen WOCHENTAG WOERTER WORT Woerter Wort \
-amgitterausrichten amgitterneuausrichten appendix aufseite ausfuellfeld ausfuelltext \
-ausschnitt bearbeitebloecke bearbeiteseite behaltebloecke bei benutzekodierung \
-benutzespezielles beschrifteversion beschriftung bestimmekopfnummer bestimmelistencharakeristika bildschirm \
-blanko bookmark bruch buchstabe buchstaben but \
-bypassblocks cap chapter chem completecombinedlist completelistoffloats \
-completelistofsorts completelistofsynonyms completeregister coupledregister crlf datum \
-definebodyfontDEF definebodyfontREF definedfont definefontfeature definefonthandling defineoutput \
-defineschriftsynonym definetype definetypeface definiereabbsymbol definiereabsaetze definiereabschnitt \
-definiereabschnittsblock definierebeschreibung definierebeschreibungen definierebeschriftung definiereblanko definiereblock \
-definiereeinzug definierefarbe definierefarbengruppe definierefeld definierefeldstapel definierefliesstext \
-definierefliesstextumgebung definieregleitobjekt definiereinteraktionsmenue definiereinteraktionsmenue definierekonversion definierelabel \
-definiereliste definierelogo definieren definierenummerierung definiereoverlay definierepalette \
-definierepapierformat definiereprofil definiereprogramme definierepuffer definierereferenz definierereferenzformat \
-definierereferenzliste definiereregister definiereschrift definieresortieren definierestartstop definieresubfeld \
-definieresymbol definieresynonyme definieretabellenvorlage definieretabulator definieretext definieretippen \
-definiereueberschrift definiereumbruch definiereumrahmt definiereumrahmtertext definiereversion definierezusammengestellteliste \
-description doppelseite doppelseitigespapier drehen duennelinie duennerumriss \
-durchgestrichen durchstreichen einezeile einziehen emptylines entknuepfebeschriftung \
-enumeration externeabbildung farbe feld feldstapel festesspatium \
-folgeprofil folgeprofilversion folgeversion footnotetext forceblocks format \
-framedtext fussnote gefuelltesrechteck gefuelltezeile gestreckt gitter \
-graufarbe haarlinie hauptsprache heutigesdatum heutigeskopfnummer hintergrund \
-hl hoch holebeschriftung holepuffer imlinken imrechten \
-imumriss in inaktiviereinteraktionsmenue inanderermarginale indentation ininner \
-inmarginalie inouter installieresprache interaktionsbalken interaktionsknopfe inzeile \
-irgendwo its keinebeschriftung keinebloeckemehr keinedateienmehr keinekopfundfusszeilen \
-keineliste keinspatium keinzeilenobenundunten keinzwischenraum kleinerdurchschuss klonierefeld \
-knopf kommentar konvertierezahl kopf kopfnummer kopierefeld \
-korrigierezwischenraum labeling labels labeltext linksbuendig listsymbol \
-loadsorts loadsynonyms mapfontsize mar marginallinie marginaltext \
-mathematik mediaeval monat nachunten name nextsection \
-nichteinziehen nocap nop notiz paragraph part \
-passelayoutan passendfeld placefloat placelistoffloats placelistofsorts placelistofsynonyms \
-placereferencelist platzierebookmarks platziereformel platzierefussnoten platzierelegende platziereliste \
-platzierelogo platzierelokalefussnoten platzierenebeneinander platziereregister platziereregister platziereuntereinander \
-platziereunterformel platzierezusammengestellteliste platzierezusammengestellteliste pos position posten \
-programm publikation punkt ran rechteck rechtecke \
-rechtsbuendig ref referenz register registrierefelder reservefloat \
-resettextcontent roemischezahlen ruecksetzten ruecksetztenbeschriftung schreibezumregister schreibezurliste \
-schreibezurreferenzliste schreibezwischenliste section seeregister seite seitenreferenz \
-seitentyp settext setupfonthandling setupfontsynonym setupforms setupinterlinespace2 \
-setupitemgroup setuplistalternative setuppaper setupstrut showsymbolset sort \
-spalte spatium spiegeln sprache startalignment startbuffer \
-startbuffer startcolumns startcombination startdescription startdocument startenumeration \
-startfarbe startfigure startfloattext startformula startframedtext startgeg \
-starthiding starthintergrund startinteraktionsmenue startitemgroup startkleinerdurchschuss startkommentar \
-startkomponente startlegend startline startlinecorrection startlinenumbering startlines \
-startlocal startlocalenvironment startlocalfootnotes startmakeup startmarginallinie startmarginblock \
-startnamemakeup startnarrower startopposite startoverlay startoverview startparagraph \
-startpositioning startpostponing startprodukt startprofile startprojekt startregister \
-startsymbolset startsynchronization starttable starttables starttabulate starttextlinie \
-starttyping startumgebung startunpacked startversion startzitat stelleabsaetzeein \
-stelleabsatznummerierungein stelleabschnittein stelleabschnittsblockein stelleanordnenein stelleausgabeein stelleausrichtungein \
-stelleausschnittein stellebeschreibungein stellebeschriftungein stellebilderunterschriftein stellebildunterschriftein stellebindestrichein \
-stelleblankoein stelleblockein stelledrehenein stelleduennerumrissein stelleeinziehenein stelleeinzuegein \
-stelleengerein stelleexterneabbildungenein stellefarbeein stellefarbenein stellefeldein stellefelderin \
-stellefliesstextein stellefliesstextumgebungein stelleformelnein stellefussnotendefinitionein stellefussnotenein stellefusszeileein \
-stellefusszeilentextein stellegefuelltesrechteckein stellegefuelltezeileein stellegegenueberplatzierenein stellegleitobjekteein stellegleitobjektein \
-stellehintergruendeein stellehintergrundein stelleinmarginalieein stelleinteraktionein stelleinteraktionsbalkenein stelleinteraktionsbildschirmein \
-stelleinteraktionsmenueein stelleknopfein stellekombinationein stellekommentarein stellekopfzahlein stellekopfzeileein \
-stellekopfzeilentextein stellelabeltextein stellelayoutein stellelegendeein stellelinienbreiteein stellelisteein \
-stellemarginalblockein stellemarginallinieein stellenobenein stellenummerierungein stellepaletteein stellepapierformatein \
-stelleplatziegeteiltegleitobjekt stellepositionierenein stellepostenein stelleprofilein stelleprogrammein stellepublikationein \
-stellepufferein stellerasterein stellerechteckein stellereferenzierenein stellereferenzlisteein stelleregisterein \
-stelleseitennummerein stelleseitennummeriernungein stelleseitenuebergangein stellesortierenein stellespaltenein stellespatiumein \
-stellespracheein stellesymbolsetein stellesynchronisationein stellesynchronisationsbalkenein stellesynonymein stellesystemein \
-stelletabein stelletabellenein stelletabulatorein stelletextein stelletextobenein stelletexttexteein \
-stelletextumrissein stelletextuntenein stelletipein stelletippenein stelletoleranzein stelleueberschriftein \
-stelleueberschriftenein stelleueberschrifttextein stelleumbruchein stelleumrahmtein stelleumrahmtetexteein stelleuntenein \
-stelleunterseitennummerein stelleunterstreichenein stelleurlein stelleversalienein stelleversionein stellezeilenabstandein \
-stellezeilenein stellezeilennumerierungein stellezitierenein stellezusammengestelltelisteein stellezwischenraumein stopalignment \
-stopbuffer stopbuffer stopcolumns stopcombination stopdescription stopdocument \
-stopenumeration stopfarbe stopfigure stopfloattext stopformula stopframedtext \
-stopgeg stophiding stophintergrund stopinteraktionsmenue stopitemgroup stopkleinerdurchschuss \
-stopkommentar stopkomponente stoplegend stopline stoplinecorrection stoplinenumbering \
-stoplines stoplocal stoplocalenvironment stoplocalfootnotes stopmakeup stopmarginallinie \
-stopmarginblock stopnamemakeup stopnarrower stopopposite stopoverlay stopoverview \
-stopparagraph stoppositioning stoppostponing stopprodukt stopprofile stopprojekt \
-stopsymbolset stopsynchronization stoptable stoptables stoptabulate stoptextlinie \
-stoptyping stopumgebung stopunpacked stopversion stopzitat sub \
-subject subsection subsubject subsubsection subsubsubject sym \
-symbol synchronisationsbalken synchronisieren synonym tab teilegleitobjekt \
-tex textlinie textreferenz tief tiho tip \
-tippedatei tippen tippepuffer title tooltip ueber \
-ueberschrifttext uebersetzten ueberstreichen ueberstrichen umrahmt unterstreichen \
-unterstrichen usedirectory usetypescript usetypescriptfile verbergebloecke vergleichefarbengruppe \
-vergleichepalette verknuepfebeschriftung verknuepfedokument verknuepfregister version verweis \
-verweisdatum verwendeURL verwendebefehl verwendebloecke verwendeexteresdokument verwendeexterneabbildung \
-verwendeexternedatei verwendeexternedateien verwendeexternestonstueck verwendemodul verwendereferenzen verwendesymbole \
-vl von waehlebloeckeaus waehlepapieraus waehleversionaus wechselezumfliesstext \
-wochentag wortrechts zeigedruck zeigeeinstellungen zeigeexterneabbildungen zeigefarbe \
-zeigefarbengruppe zeigefelder zeigefliesstext zeigefliesstextumgebung zeigegitter zeigelayout \
-zeigepalette zeigerahmen zeigestruts zeigeumbruch zentriert ziffern \
-zitat zitieren zu zurbox zwischenraum \ No newline at end of file
+keywordclass.macros.context.de=Buchstabe Buchstaben CAP Cap Caps MONAT Roemischezahlen WOCHENTAG WOERTER WORT Woerter Wort amgitterausrichten amgitterneuausrichten appendix aufseite ausfuellfeld ausfuelltext ausschnitt bearbeitebloecke bearbeiteseite behaltebloecke bei benutzekodierung benutzespezielles beschrifteversion beschriftung bestimmekopfnummer bestimmelistencharakeristika bildschirm blanko bookmark bruch buchstabe buchstaben but bypassblocks cap chapter chem completecombinedlist completelistoffloats completelistofsorts completelistofsynonyms completeregister coupledregister crlf datum definebodyfontDEF definebodyfontREF definedfont definefontfeature definefonthandling defineoutput defineschriftsynonym definetype definetypeface definiereabbsymbol definiereabsaetze definiereabschnitt definiereabschnittsblock definierebeschreibung definierebeschreibungen definierebeschriftung definiereblanko definiereblock definiereeinzug definierefarbe definierefarbengruppe definierefeld definierefeldstapel definierefliesstext definierefliesstextumgebung definieregleitobjekt definiereinteraktionsmenue definiereinteraktionsmenue definierekonversion definierelabel definiereliste definierelogo definieren definierenummerierung definiereoverlay definierepalette definierepapierformat definiereprofil definiereprogramme definierepuffer definierereferenz definierereferenzformat definierereferenzliste definiereregister definiereschrift definieresortieren definierestartstop definieresubfeld definieresymbol definieresynonyme definieretabellenvorlage definieretabulator definieretext definieretippen definiereueberschrift definiereumbruch definiereumrahmt definiereumrahmtertext definiereversion definierezusammengestellteliste description doppelseite doppelseitigespapier drehen duennelinie duennerumriss einezeile einziehen emptylines entknuepfebeschriftung enumeration externeabbildung farbe feld feldstapel festesspatium folgeprofil folgeprofilversion folgeversion footnotetext forceblocks format framedtext fussnote gefuelltesrechteck gefuelltezeile gestreckt gitter graufarbe haarlinie hauptsprache heutigesdatum heutigeskopfnummer hintergrund hl hoch holebeschriftung holepuffer imlinken imrechten imumriss in inaktiviereinteraktionsmenue inanderermarginale indentation ininner inmarginalie inouter installieresprache interaktionsbalken interaktionsknopfe inzeile irgendwo its keinebeschriftung keinebloeckemehr keinedateienmehr keinekopfundfusszeilen keineliste keinspatium keinzeilenobenundunten keinzwischenraum kleinerdurchschuss klonierefeld knopf kommentar konvertierezahl kopf kopfnummer kopierefeld korrigierezwischenraum labeling labels labeltext linksbuendig listsymbol loadsorts loadsynonyms mapfontsize mar marginallinie marginaltext mathematik mediaeval monat nachunten name nextsection nichteinziehen nocap nop notiz overbar overbars overstrike overstrikes paragraph part passelayoutan passendfeld placefloat placelistoffloats placelistofsorts placelistofsynonyms placereferencelist platzierebookmarks platziereformel platzierefussnoten platzierelegende platziereliste platzierelogo platzierelokalefussnoten platzierenebeneinander platziereregister platziereregister platziereuntereinander platziereunterformel platzierezusammengestellteliste platzierezusammengestellteliste pos position posten programm publikation punkt ran rechteck rechtecke rechtsbuendig ref referenz register registrierefelder reservefloat resettextcontent roemischezahlen ruecksetzten ruecksetztenbeschriftung schreibezumregister schreibezurliste schreibezurreferenzliste schreibezwischenliste section seeregister seite seitenreferenz seitentyp settext setupfonthandling setupfontsynonym setupforms setupinterlinespace2 setupitemgroup setuplistalternative setuppaper setupstrut showsymbolset sort spalte spatium spiegeln sprache startalignment startbuffer startbuffer startcolumns startcombination startdescription startdocument startenumeration startfarbe startfigure startfloattext startformula startframedtext startgeg starthiding starthintergrund startinteraktionsmenue startitemgroup startkleinerdurchschuss startkommentar startkomponente startlegend startline startlinecorrection startlinenumbering startlines startlocal startlocalenvironment startlocalfootnotes startmakeup startmarginallinie startmarginblock startnamemakeup startnarrower startopposite startoverlay startoverview startparagraph startpositioning startpostponing startprodukt startprofile startprojekt startregister startsymbolset startsynchronization starttable starttables starttabulate starttextlinie starttyping startumgebung startunpacked startversion startzitat stelleabsaetzeein stelleabsatznummerierungein stelleabschnittein stelleabschnittsblockein stelleanordnenein stelleausgabeein stelleausrichtungein stelleausschnittein stellebeschreibungein stellebeschriftungein stellebilderunterschriftein stellebildunterschriftein stellebindestrichein stelleblankoein stelleblockein stelledrehenein stelleduennerumrissein stelleeinziehenein stelleeinzuegein stelleengerein stelleexterneabbildungenein stellefarbeein stellefarbenein stellefeldein stellefelderin stellefliesstextein stellefliesstextumgebungein stelleformelnein stellefussnotendefinitionein stellefussnotenein stellefusszeileein stellefusszeilentextein stellegefuelltesrechteckein stellegefuelltezeileein stellegegenueberplatzierenein stellegleitobjekteein stellegleitobjektein stellehintergruendeein stellehintergrundein stelleinmarginalieein stelleinteraktionein stelleinteraktionsbalkenein stelleinteraktionsbildschirmein stelleinteraktionsmenueein stelleknopfein stellekombinationein stellekommentarein stellekopfzahlein stellekopfzeileein stellekopfzeilentextein stellelabeltextein stellelayoutein stellelegendeein stellelinienbreiteein stellelisteein stellemarginalblockein stellemarginallinieein stellenobenein stellenummerierungein stellepaletteein stellepapierformatein stelleplatziegeteiltegleitobjekt stellepositionierenein stellepostenein stelleprofilein stelleprogrammein stellepublikationein stellepufferein stellerasterein stellerechteckein stellereferenzierenein stellereferenzlisteein stelleregisterein stelleseitennummerein stelleseitennummeriernungein stelleseitenuebergangein stellesortierenein stellespaltenein stellespatiumein stellespracheein stellesymbolsetein stellesynchronisationein stellesynchronisationsbalkenein stellesynonymein stellesystemein stelletabein stelletabellenein stelletabulatorein stelletextein stelletextobenein stelletexttexteein stelletextumrissein stelletextuntenein stelletipein stelletippenein stelletoleranzein stelleueberschriftein stelleueberschriftenein stelleueberschrifttextein stelleumbruchein stelleumrahmtein stelleumrahmtetexteein stelleuntenein stelleunterseitennummerein stelleunterstreichenein stelleurlein stelleversalienein stelleversionein stellezeilenabstandein stellezeilenein stellezeilennumerierungein stellezitierenein stellezusammengestelltelisteein stellezwischenraumein stopalignment stopbuffer stopbuffer stopcolumns stopcombination stopdescription stopdocument stopenumeration stopfarbe stopfigure stopfloattext stopformula stopframedtext stopgeg stophiding stophintergrund stopinteraktionsmenue stopitemgroup stopkleinerdurchschuss stopkommentar stopkomponente stoplegend stopline stoplinecorrection stoplinenumbering stoplines stoplocal stoplocalenvironment stoplocalfootnotes stopmakeup stopmarginallinie stopmarginblock stopnamemakeup stopnarrower stopopposite stopoverlay stopoverview stopparagraph stoppositioning stoppostponing stopprodukt stopprofile stopprojekt stopsymbolset stopsynchronization stoptable stoptables stoptabulate stoptextlinie stoptyping stopumgebung stopunpacked stopversion stopzitat sub subject subsection subsubject subsubsection subsubsubject sym symbol synchronisationsbalken synchronisieren synonym tab teilegleitobjekt tex textlinie textreferenz tief tiho tip tippedatei tippen tippepuffer title tooltip ueber ueberschrifttext uebersetzten umrahmt underbar underbars usedirectory usetypescript usetypescriptfile verbergebloecke vergleichefarbengruppe vergleichepalette verknuepfebeschriftung verknuepfedokument verknuepfregister version verweis verweisdatum verwendeURL verwendebefehl verwendebloecke verwendeexteresdokument verwendeexterneabbildung verwendeexternedatei verwendeexternedateien verwendeexternestonstueck verwendemodul verwendereferenzen verwendesymbole vl von waehlebloeckeaus waehlepapieraus waehleversionaus wechselezumfliesstext wochentag wortrechts zeigedruck zeigeeinstellungen zeigeexterneabbildungen zeigefarbe zeigefarbengruppe zeigefelder zeigefliesstext zeigefliesstextumgebung zeigegitter zeigelayout zeigepalette zeigerahmen zeigestruts zeigeumbruch zentriert ziffern zitat zitieren zu zurbox zwischenraum \ No newline at end of file
diff --git a/Master/texmf-dist/context/data/scite/cont-en-scite.properties b/Master/texmf-dist/context/data/scite/cont-en-scite.properties
index 72414c1132f..a83042bf6eb 100644
--- a/Master/texmf-dist/context/data/scite/cont-en-scite.properties
+++ b/Master/texmf-dist/context/data/scite/cont-en-scite.properties
@@ -1,97 +1 @@
-keywordclass.macros.context.en=\
-CAP Cap Caps Character Characters MONTH \
-Romannumerals WEEKDAY WORD WORDS Word Words \
-about adaptlayout appendix at atpage background \
-blackrule blackrules blank bookmark but button \
-bypassblocks cap chapter character characters chem \
-clip clonefield color column comment comparecolorgroup \
-comparepalet completecombinedlist completelistoffloats completelistofsorts completelistofsynonyms completeregister \
-convertnumber copyfield correctwhitespace coupledocument coupledregister couplemarking \
-couplepage couplepaper coupleregister crlf currentdate currentheadnumber \
-date decouplemarking define defineblank defineblock definebodyfont \
-definebodyfontDEF definebodyfontREF definebodyfontenvironment definebuffer definecolor definecolorgroup \
-definecombinedlist defineconversion definedescription definedfont defineenumeration definefield \
-definefieldstack definefiguresymbol definefloat definefont definefontfeature definefonthandling \
-definefontsynonym defineframed defineframedtext definehead defineindenting defineinteractionmenu \
-defineinteractionmenu definelabel definelist definelogo definemakeup definemarking \
-defineoutput defineoverlay definepalet definepapersize defineparagraphs defineprofile \
-defineprogram definereference definereferenceformat definereferencelist defineregister definesection \
-definesectionblock definesorting definestartstop definesubfield definesymbol definesynonyms \
-definetabletemplate definetabulate definetext definetype definetypeface definetyping \
-defineversion description determineheadnumber determinelistcharacteristics disableinteractionmenu emptylines \
-enumeration externalfigure field fieldstack fillinfield fillinline \
-fillinrules fillintext fitfield fixedspaces followprofile followprofileversion \
-followversion footnote footnotetext forceblocks fraction framed \
-framedtext from getbuffer getmarking godown goto \
-gotobox graycolor grid hairline head headnumber \
-headtext hideblocks high hl in indentation \
-indenting inframed ininner inleft inline inmargin \
-inothermargin inouter inright installlanguage interactionbar interactionbuttons \
-item items its keepblocks labeling labels \
-labeltext language leftaligned listsymbol loadsorts loadsynonyms \
-logfields lohi low mainlanguage mapfontsize mar \
-marginrule margintext marking markversion mathematics mediaeval \
-midaligned mirror month moveongrid name nextsection \
-nocap noheaderandfooterlines noindenting nolist nomarking nomoreblocks \
-nomorefiles nop nospace note notopandbottomlines nowhitespace \
-numbers overbar overbars overstrike overstrikes packed \
-page pagereference pagetype paragraph part periods \
-placebookmarks placecombinedlist placecombinedlist placefloat placefootnotes placeformula \
-placelegend placelist placelistoffloats placelistofsorts placelistofsynonyms placelocalfootnotes \
-placelogos placeongrid placeontopofeachother placereferencelist placeregister placeregister \
-placesidebyside placesubformula position processblocks processpage program \
-publication quotation quote ran ref reference \
-referral referraldate register reservefloat reset resetmarking \
-resettextcontent rightaligned romannumerals rotate scale screen \
-section seeregister selectblocks selectpaper selectversion settextcontent \
-setupalign setuparranging setupbackground setupbackgrounds setupblackrules setupblank \
-setupblock setupbodyfont setupbodyfontenvironment setupbottom setupbottomtexts setupbuffer \
-setupbuttons setupcapitals setupcaption setupcaptions setupclipping setupcolor \
-setupcolors setupcolumns setupcombinations setupcombinedlist setupcomment setupdescriptions \
-setupenumerations setupexternalfigures setupfield setupfields setupfillinlines setupfillinrules \
-setupfloat setupfloats setupfloatsplitting setupfonthandling setupfontsynonym setupfooter \
-setupfootertexts setupfootnotedefinition setupfootnotes setupforms setupformulae setupframed \
-setupframedtexts setuphead setupheader setupheadertexts setupheadnumber setupheads \
-setupheadtext setuphyphenmark setupindentations setupindenting setupinmargin setupinteraction \
-setupinteractionbar setupinteractionmenu setupinteractionscreen setupinterlinespace setupinterlinespace2 setupitemgroup \
-setupitems setuplabeltext setuplanguage setuplayout setuplegend setuplinenumbering \
-setuplines setuplinewidth setuplist setuplistalternative setupmakeup setupmarginblocks \
-setupmarginrules setupmarking setupnarrower setupnumbering setupoppositeplacing setupoutput \
-setuppagenumber setuppagenumbering setuppagetransitions setuppalet setuppaper setuppapersize \
-setupparagraphnumbering setupparagraphs setuppositioning setupprofiles setupprograms setuppublications \
-setupquote setupreferencelist setupreferencing setupregister setuprotate setupscreens \
-setupsection setupsectionblock setupsorting setupspacing setupstrut setupsubpagenumber \
-setupsymbolset setupsynchronization setupsynchronizationbar setupsynonyms setupsystem setuptab \
-setuptables setuptabulate setuptext setuptextrules setuptexttexts setupthinrules \
-setuptolerance setuptop setuptoptexts setuptype setuptyping setupunderbar \
-setupurl setupversions setupwhitespace showbodyfont showbodyfontenvironment showcolor \
-showcolorgroup showexternalfigures showfields showframe showgrid showlayout \
-showmakeup showpalet showprint showsetups showstruts showsymbolset \
-someline somewhere sort space splitfloat startalignment \
-startbackground startbuffer startbuffer startcolor startcolumns startcombination \
-startcomment startcomponent startdescription startdocument startenumeration startenvironment \
-startfact startfigure startfloattext startformula startframedtext starthiding \
-startinteractionmenu startitemgroup startlegend startline startlinecorrection startlinenumbering \
-startlines startlocal startlocalenvironment startlocalfootnotes startmakeup startmarginblock \
-startmarginrule startnamemakeup startnarrower startopposite startoverlay startoverview \
-startpacked startparagraph startpositioning startpostponing startproduct startprofile \
-startproject startquotation startregister startsymbolset startsynchronization starttable \
-starttables starttabulate starttextrule starttyping startunpacked startversion \
-stopalignment stopbackground stopbuffer stopbuffer stopcolor stopcolumns \
-stopcombination stopcomment stopcomponent stopdescription stopdocument stopenumeration \
-stopenvironment stopfact stopfigure stopfloattext stopformula stopframedtext \
-stophiding stopinteractionmenu stopitemgroup stoplegend stopline stoplinecorrection \
-stoplinenumbering stoplines stoplocal stoplocalenvironment stoplocalfootnotes stopmakeup \
-stopmarginblock stopmarginrule stopnamemakeup stopnarrower stopopposite stopoverlay \
-stopoverview stoppacked stopparagraph stoppositioning stoppostponing stopproduct \
-stopprofile stopproject stopquotation stopsymbolset stopsynchronization stoptable \
-stoptables stoptabulate stoptextrule stoptyping stopunpacked stopversion \
-stretched sub subject subsection subsubject subsubsection \
-subsubsubject switchtobodyfont sym symbol synchronizationbar synchronize \
-synonym tab tex textreference textrule thinrule \
-thinrules title tooltip translate typ type \
-typebuffer typefile underbar underbars useURL useblocks \
-usecommands usedirectory useencoding useexternaldocument useexternalfigure useexternalfile \
-useexternalfiles useexternalsoundtrack usemodule usereferences usespecials usesymbols \
-usetypescript usetypescriptfile version vl weekday whitespace \
-wordright writebetweenlist writetolist writetoreferencelist writetoregister \ No newline at end of file
+keywordclass.macros.context.en=CAP Cap Caps Character Characters MONTH Romannumerals WEEKDAY WORD WORDS Word Words about adaptlayout appendix at atpage background blackrule blackrules blank bookmark but button bypassblocks cap chapter character characters chem clip clonefield color column comment comparecolorgroup comparepalet completecombinedlist completelistoffloats completelistofsorts completelistofsynonyms completeregister convertnumber copyfield correctwhitespace coupledocument coupledregister couplemarking couplepage couplepaper coupleregister crlf currentdate currentheadnumber date decouplemarking define defineblank defineblock definebodyfont definebodyfontDEF definebodyfontREF definebodyfontenvironment definebuffer definecolor definecolorgroup definecombinedlist defineconversion definedescription definedfont defineenumeration definefield definefieldstack definefiguresymbol definefloat definefont definefontfeature definefonthandling definefontsynonym defineframed defineframedtext definehead defineindenting defineinteractionmenu defineinteractionmenu definelabel definelist definelogo definemakeup definemarking defineoutput defineoverlay definepalet definepapersize defineparagraphs defineprofile defineprogram definereference definereferenceformat definereferencelist defineregister definesection definesectionblock definesorting definestartstop definesubfield definesymbol definesynonyms definetabletemplate definetabulate definetext definetype definetypeface definetyping defineversion description determineheadnumber determinelistcharacteristics disableinteractionmenu emptylines enumeration externalfigure field fieldstack fillinfield fillinline fillinrules fillintext fitfield fixedspaces followprofile followprofileversion followversion footnote footnotetext forceblocks fraction framed framedtext from getbuffer getmarking godown goto gotobox graycolor grid hairline head headnumber headtext hideblocks high hl in indentation indenting inframed ininner inleft inline inmargin inothermargin inouter inright installlanguage interactionbar interactionbuttons item items its keepblocks labeling labels labeltext language leftaligned listsymbol loadsorts loadsynonyms logfields lohi low mainlanguage mapfontsize mar marginrule margintext marking markversion mathematics mediaeval midaligned mirror month moveongrid name nextsection nocap noheaderandfooterlines noindenting nolist nomarking nomoreblocks nomorefiles nop nospace note notopandbottomlines nowhitespace numbers overbar overbars overstrike overstrikes packed page pagereference pagetype paragraph part periods placebookmarks placecombinedlist placecombinedlist placefloat placefootnotes placeformula placelegend placelist placelistoffloats placelistofsorts placelistofsynonyms placelocalfootnotes placelogos placeongrid placeontopofeachother placereferencelist placeregister placeregister placesidebyside placesubformula position processblocks processpage program publication quotation quote ran ref reference referral referraldate register reservefloat reset resetmarking resettextcontent rightaligned romannumerals rotate scale screen section seeregister selectblocks selectpaper selectversion settextcontent setupalign setuparranging setupbackground setupbackgrounds setupblackrules setupblank setupblock setupbodyfont setupbodyfontenvironment setupbottom setupbottomtexts setupbuffer setupbuttons setupcapitals setupcaption setupcaptions setupclipping setupcolor setupcolors setupcolumns setupcombinations setupcombinedlist setupcomment setupdescriptions setupenumerations setupexternalfigures setupfield setupfields setupfillinlines setupfillinrules setupfloat setupfloats setupfloatsplitting setupfonthandling setupfontsynonym setupfooter setupfootertexts setupfootnotedefinition setupfootnotes setupforms setupformulae setupframed setupframedtexts setuphead setupheader setupheadertexts setupheadnumber setupheads setupheadtext setuphyphenmark setupindentations setupindenting setupinmargin setupinteraction setupinteractionbar setupinteractionmenu setupinteractionscreen setupinterlinespace setupinterlinespace2 setupitemgroup setupitems setuplabeltext setuplanguage setuplayout setuplegend setuplinenumbering setuplines setuplinewidth setuplist setuplistalternative setupmakeup setupmarginblocks setupmarginrules setupmarking setupnarrower setupnumbering setupoppositeplacing setupoutput setuppagenumber setuppagenumbering setuppagetransitions setuppalet setuppaper setuppapersize setupparagraphnumbering setupparagraphs setuppositioning setupprofiles setupprograms setuppublications setupquote setupreferencelist setupreferencing setupregister setuprotate setupscreens setupsection setupsectionblock setupsorting setupspacing setupstrut setupsubpagenumber setupsymbolset setupsynchronization setupsynchronizationbar setupsynonyms setupsystem setuptab setuptables setuptabulate setuptext setuptextrules setuptexttexts setupthinrules setuptolerance setuptop setuptoptexts setuptype setuptyping setupunderbar setupurl setupversions setupwhitespace showbodyfont showbodyfontenvironment showcolor showcolorgroup showexternalfigures showfields showframe showgrid showlayout showmakeup showpalet showprint showsetups showstruts showsymbolset someline somewhere sort space splitfloat startalignment startbackground startbuffer startbuffer startcolor startcolumns startcombination startcomment startcomponent startdescription startdocument startenumeration startenvironment startfact startfigure startfloattext startformula startframedtext starthiding startinteractionmenu startitemgroup startlegend startline startlinecorrection startlinenumbering startlines startlocal startlocalenvironment startlocalfootnotes startmakeup startmarginblock startmarginrule startnamemakeup startnarrower startopposite startoverlay startoverview startpacked startparagraph startpositioning startpostponing startproduct startprofile startproject startquotation startregister startsymbolset startsynchronization starttable starttables starttabulate starttextrule starttyping startunpacked startversion stopalignment stopbackground stopbuffer stopbuffer stopcolor stopcolumns stopcombination stopcomment stopcomponent stopdescription stopdocument stopenumeration stopenvironment stopfact stopfigure stopfloattext stopformula stopframedtext stophiding stopinteractionmenu stopitemgroup stoplegend stopline stoplinecorrection stoplinenumbering stoplines stoplocal stoplocalenvironment stoplocalfootnotes stopmakeup stopmarginblock stopmarginrule stopnamemakeup stopnarrower stopopposite stopoverlay stopoverview stoppacked stopparagraph stoppositioning stoppostponing stopproduct stopprofile stopproject stopquotation stopsymbolset stopsynchronization stoptable stoptables stoptabulate stoptextrule stoptyping stopunpacked stopversion stretched sub subject subsection subsubject subsubsection subsubsubject switchtobodyfont sym symbol synchronizationbar synchronize synonym tab tex textreference textrule thinrule thinrules title tooltip translate typ type typebuffer typefile underbar underbars useURL useblocks usecommands usedirectory useencoding useexternaldocument useexternalfigure useexternalfile useexternalfiles useexternalsoundtrack usemodule usereferences usespecials usesymbols usetypescript usetypescriptfile version vl weekday whitespace wordright writebetweenlist writetolist writetoreferencelist writetoregister \ No newline at end of file
diff --git a/Master/texmf-dist/context/data/scite/cont-fr-scite.properties b/Master/texmf-dist/context/data/scite/cont-fr-scite.properties
index caa7069dbb0..606be2efaba 100644
--- a/Master/texmf-dist/context/data/scite/cont-fr-scite.properties
+++ b/Master/texmf-dist/context/data/scite/cont-fr-scite.properties
@@ -1,97 +1 @@
-keywordclass.macros.context.fr=\
-CAP Cap Caps Caractere Caracteres Chiffresromains \
-JOURSEMAINE MOIS MOT MOTS Mot Mots \
-a adaptedisposition ajustechamp alaligne alapage aligneadroite \
-aligneagauche aligneaumilieu appendix arriereplan baha barreinteraction \
-barresynchronisation bas bouton boutonsinteraction but cacheblocs \
-cap caractere caracteres champ changepolicecorps chapter \
-chem chiffresromains citation citer clip clonechamp \
-colonne commentaire comparegroupecouleur comparepalette completecombinedlist completelistoffloats \
-completelistofsorts completelistofsynonyms completeregistre composeenalinea concernant convertitnumero \
-copitchamp corrigeespaceblanc couleur couleurgrise coupledocument coupledregister \
-couplemarquage couplepapier coupleregistre crlf dactylographier dans \
-dansautremarge dansdroite dansgauche dansmarge date datecourante \
-daterecommandation de decouplemarquage definebodyfontDEF definebodyfontREF definedfont \
-definefontfeature definefonthandling defineframed defineframedtext definetypeface definit \
-definitbloc definitblocsection definitbuffer definitchamp definitcompoalinea definitconversion \
-definitcouleur definitdactylo definitdemarrestoppe definitdescription definitenumeration definitenvironnementpolicecorps \
-definitetiquette definitflottant definitformatreference definitgroupecouleur definitliste definitlisteimbriquee \
-definitlistereference definitlogo definitmakeup definitmarquage definitmenuinteraction definitmenuinteraction \
-definitnotepdp definitpalette definitparagraphes definitpilechamp definitpolice definitpolicecorps \
-definitprofil definitprogramme definitreference definitregistre definitrevetement definitsection \
-definitsortie definitsouschamp definitsymbole definitsymbolefigure definitsynonymepolice definitsynonymes \
-definittabulation definittaillepapier definittete definittexte definittrametableau definittri \
-definittype definitversion definitvide definitvide demarreciter deplacesurgrille \
-description determinecaracteristiqueliste determinenumerotete echelle ecran ecritdansliste \
-ecritdanslistereference ecritentreliste ecritregistre el element elements \
-emptylines enumeration espace espaceblanc espacesfixes etiquettes \
-etire fichierdactylo figureexterne forceblocs fraction framed \
-framedtext gardeblocs grille groupe haut hl \
-indentation inframed inhibemenuinteraction ininner inouter installelangue \
-joursemaine labeling labeltexte langue langueprincipale ligneh \
-lignenoire ligneregleetexte lignesnoires listesymbole loadsorts loadsynonyms \
-logchamp mapfontsize mar margereglee marquage marquageversion \
-marquepage mathematique mediaeval mois montrecadre montrechamps \
-montrecouleur montredisposition montreedition montreenvironnementpolicecorps montrefiguresexternes montregrille \
-montregroupecouleur montrejeusymboles montremakeup montrepalette montrepolicecorps montrereglages \
-montrestruts motdroit name nextsection nocap nop \
-note notepdp numeros numerotete numerotetecourant obtientmarquage \
-oriente overbar overbars page pagedouble paragraph \
-part pasplusdeblocs pasplusdefichiers periodes pilechamp placecoteacote \
-placeflottant placeformule placelegende placelesunsaudessusdesautres placeliste placelisteinmbriquee \
-placelisteinmbriquee placelistereference placelistoffloats placelistofsorts placelistofsynonyms placelogos \
-placemarquespages placenotespdp placenotespdplocales placeregistre placeregistre placesousformule \
-placesurgrille position prendbuffer programme publication qqpart \
-ran raz razmarquage recommandation ref reference \
-referencepage referencetexte reflete register reglealignement reglealineas \
-reglearrangement reglearriereplan reglearriereplans reglebarreinteraction reglebarresynchronisation reglebloc \
-regleblocmarge regleblocsection regleboutons reglebuffer reglecapitales reglechamp \
-reglechamps regleclipping reglecolonnes reglecombinaisons reglecommentaire reglecompoetroite \
-reglecomposeenalinea reglecouleur reglecouleurs regledactylo regledansmarge regledescriptions \
-regledisposition regleecraninteraction regleecrans regleelements regleencadre regleentete \
-regleenumerations regleenvironnementpolicecorps regleepaisseurligne regleespaceblanc regleespacement regleespacementinterligne \
-reglefiguresexternes regleflottant regleflottants regleformulaires regleformules regleinf \
-regleinteraction regleintitule regleintitules reglejeusymboles reglelabeltexte reglelangue \
-reglelegende reglelignes reglelignesnoires reglelignesreglestexte regleliste reglelisteimbriquee \
-reglelistereference reglemakeup reglemargereglee reglemarquage reglemarquagehyphenation reglemenuinteraction \
-reglenotepdp reglenumeropage reglenumerotation reglenumerotationligne reglenumerotationpage reglenumerotationparagraphe \
-reglenumerotete regleoriente reglepalette reglepapier regleparagraphes reglepdp \
-regleplacementopposition reglepolicecorps reglepositionnement regleprofils regleprogrammes reglepublications \
-reglereferencage regleregistre regleremplitligne regleremplitlignesreglees reglesection regleseparationflottant \
-reglesortie reglesouslignage reglesousnumeropage reglestrut reglesup reglesynchronisation \
-reglesynonymes reglesysteme regletab regletableaux regletabulation regletaillepapier \
-regletete regletetes regletexte regletextesentete regletextesinf regletextespdp \
-regletextessup regletextestexte regletextetete regletolerance regletraitsfins regletransitionspage \
-regletri regletype regleurl regleversions remplitchamp remplitligne \
-remplitlignesreglees remplittexte reservefloat resettextcontent sansalinea sansespace \
-sansespaceblanc sanslignesenteteetpdp sanslignessupetinf sansliste sansmarquage sauteblocs \
-section seeregister selectionneblocs selectionnepapier selectionneversion separeflottant \
-settext setupfonthandling setupfontsynonym setupframedtexts setupinterlinespace2 setupitemgroup \
-setuplistalternative sort sousligne souslignetout startalignment startarriereplan \
-startbuffer startbuffer startcitation startcolumns startcombination startcommentaire \
-startcomposant startcouleur startdescription startdocument startenumeration startenvironement \
-startfait startfigure startfloattext startformula startframedtext startgroupe \
-starthiding startitemgroup startlegend startligneregleetexte startline startlinecorrection \
-startlinenumbering startlines startlocal startlocalenvironment startlocalfootnotes startmakeup \
-startmargereglee startmarginblock startmenuinteraction startnamemakeup startnarrower startopposite \
-startoverlay startoverview startparagraph startpositioning startpostponing startproduit \
-startprofile startprojet startregister startsymbolset startsynchronization starttable \
-starttables starttabulate starttyping startunpacked startversion stopalignment \
-stoparriereplan stopbuffer stopbuffer stopcitation stopcolumns stopcombination \
-stopcommentaire stopcomposant stopcouleur stopdescription stopdocument stopenumeration \
-stopenvironement stopfait stopfigure stopfloattext stopformula stopframedtext \
-stopgroupe stophiding stopitemgroup stoplegend stopligneregleetexte stopline \
-stoplinecorrection stoplinenumbering stoplines stoplocal stoplocalenvironment stoplocalfootnotes \
-stopmakeup stopmargereglee stopmarginblock stopmenuinteraction stopnamemakeup stopnarrower \
-stopopposite stopoverlay stopoverview stopparagraph stoppositioning stoppostponing \
-stopproduit stopprofile stopprojet stopsymbolset stopsynchronization stoptable \
-stoptables stoptabulate stoptyping stopunpacked stopversion sub \
-subject subsection subsubject subsubsection subsubsubject suggestion \
-suivantprofil suivantversion suivantversionprofil surligne surlignetout sym \
-symbole synchronise synonym tab tapebuffer tapepage \
-tete tex textemarge textenotepdp textetete title \
-traduire traiteblocs traitepage traitfin traitsfins typ \
-uneligne usedirectory usetypescript usetypescriptfile utiliseURL utiliseblocs \
-utilisecommandes utilisedocumentexterne utiliseencodage utilisefichierexterne utilisefichiersexternes utilisefigureexterne \
-utilisemodule utilisepsiteaudioexterne utilisereferences utilisespecialites utilisesymboles va \
-vaalaboite vaenbas version vide vl \ No newline at end of file
+keywordclass.macros.context.fr=CAP Cap Caps Caractere Caracteres Chiffresromains JOURSEMAINE MOIS MOT MOTS Mot Mots a adaptedisposition ajustechamp alaligne alapage aligneadroite aligneagauche aligneaumilieu appendix arriereplan baha barreinteraction barresynchronisation bas bouton boutonsinteraction but cacheblocs cap caractere caracteres champ changepolicecorps chapter chem chiffresromains citation citer clip clonechamp colonne commentaire comparegroupecouleur comparepalette completecombinedlist completelistoffloats completelistofsorts completelistofsynonyms completeregistre composeenalinea concernant convertitnumero copitchamp corrigeespaceblanc couleur couleurgrise coupledocument coupledregister couplemarquage couplepapier coupleregistre crlf dactylographier dans dansautremarge dansdroite dansgauche dansmarge date datecourante daterecommandation de decouplemarquage definebodyfontDEF definebodyfontREF definedfont definefontfeature definefonthandling defineframed defineframedtext definetypeface definit definitbloc definitblocsection definitbuffer definitchamp definitcompoalinea definitconversion definitcouleur definitdactylo definitdemarrestoppe definitdescription definitenumeration definitenvironnementpolicecorps definitetiquette definitflottant definitformatreference definitgroupecouleur definitliste definitlisteimbriquee definitlistereference definitlogo definitmakeup definitmarquage definitmenuinteraction definitmenuinteraction definitnotepdp definitpalette definitparagraphes definitpilechamp definitpolice definitpolicecorps definitprofil definitprogramme definitreference definitregistre definitrevetement definitsection definitsortie definitsouschamp definitsymbole definitsymbolefigure definitsynonymepolice definitsynonymes definittabulation definittaillepapier definittete definittexte definittrametableau definittri definittype definitversion definitvide definitvide demarreciter deplacesurgrille description determinecaracteristiqueliste determinenumerotete echelle ecran ecritdansliste ecritdanslistereference ecritentreliste ecritregistre el element elements emptylines enumeration espace espaceblanc espacesfixes etiquettes etire fichierdactylo figureexterne forceblocs fraction framed framedtext gardeblocs grille groupe haut hl indentation inframed inhibemenuinteraction ininner inouter installelangue joursemaine labeling labeltexte langue langueprincipale ligneh lignenoire ligneregleetexte lignesnoires listesymbole loadsorts loadsynonyms logchamp mapfontsize mar margereglee marquage marquageversion marquepage mathematique mediaeval mois montrecadre montrechamps montrecouleur montredisposition montreedition montreenvironnementpolicecorps montrefiguresexternes montregrille montregroupecouleur montrejeusymboles montremakeup montrepalette montrepolicecorps montrereglages montrestruts motdroit name nextsection nocap nop note notepdp numeros numerotete numerotetecourant obtientmarquage oriente overbar overbars overstrike overstrikes page pagedouble paragraph part pasplusdeblocs pasplusdefichiers periodes pilechamp placecoteacote placeflottant placeformule placelegende placelesunsaudessusdesautres placeliste placelisteinmbriquee placelisteinmbriquee placelistereference placelistoffloats placelistofsorts placelistofsynonyms placelogos placemarquespages placenotespdp placenotespdplocales placeregistre placeregistre placesousformule placesurgrille position prendbuffer programme publication qqpart ran raz razmarquage recommandation ref reference referencepage referencetexte reflete register reglealignement reglealineas reglearrangement reglearriereplan reglearriereplans reglebarreinteraction reglebarresynchronisation reglebloc regleblocmarge regleblocsection regleboutons reglebuffer reglecapitales reglechamp reglechamps regleclipping reglecolonnes reglecombinaisons reglecommentaire reglecompoetroite reglecomposeenalinea reglecouleur reglecouleurs regledactylo regledansmarge regledescriptions regledisposition regleecraninteraction regleecrans regleelements regleencadre regleentete regleenumerations regleenvironnementpolicecorps regleepaisseurligne regleespaceblanc regleespacement regleespacementinterligne reglefiguresexternes regleflottant regleflottants regleformulaires regleformules regleinf regleinteraction regleintitule regleintitules reglejeusymboles reglelabeltexte reglelangue reglelegende reglelignes reglelignesnoires reglelignesreglestexte regleliste reglelisteimbriquee reglelistereference reglemakeup reglemargereglee reglemarquage reglemarquagehyphenation reglemenuinteraction reglenotepdp reglenumeropage reglenumerotation reglenumerotationligne reglenumerotationpage reglenumerotationparagraphe reglenumerotete regleoriente reglepalette reglepapier regleparagraphes reglepdp regleplacementopposition reglepolicecorps reglepositionnement regleprofils regleprogrammes reglepublications reglereferencage regleregistre regleremplitligne regleremplitlignesreglees reglesection regleseparationflottant reglesortie reglesouslignage reglesousnumeropage reglestrut reglesup reglesynchronisation reglesynonymes reglesysteme regletab regletableaux regletabulation regletaillepapier regletete regletetes regletexte regletextesentete regletextesinf regletextespdp regletextessup regletextestexte regletextetete regletolerance regletraitsfins regletransitionspage regletri regletype regleurl regleversions remplitchamp remplitligne remplitlignesreglees remplittexte reservefloat resettextcontent sansalinea sansespace sansespaceblanc sanslignesenteteetpdp sanslignessupetinf sansliste sansmarquage sauteblocs section seeregister selectionneblocs selectionnepapier selectionneversion separeflottant settext setupfonthandling setupfontsynonym setupframedtexts setupinterlinespace2 setupitemgroup setuplistalternative sort startalignment startarriereplan startbuffer startbuffer startcitation startcolumns startcombination startcommentaire startcomposant startcouleur startdescription startdocument startenumeration startenvironement startfait startfigure startfloattext startformula startframedtext startgroupe starthiding startitemgroup startlegend startligneregleetexte startline startlinecorrection startlinenumbering startlines startlocal startlocalenvironment startlocalfootnotes startmakeup startmargereglee startmarginblock startmenuinteraction startnamemakeup startnarrower startopposite startoverlay startoverview startparagraph startpositioning startpostponing startproduit startprofile startprojet startregister startsymbolset startsynchronization starttable starttables starttabulate starttyping startunpacked startversion stopalignment stoparriereplan stopbuffer stopbuffer stopcitation stopcolumns stopcombination stopcommentaire stopcomposant stopcouleur stopdescription stopdocument stopenumeration stopenvironement stopfait stopfigure stopfloattext stopformula stopframedtext stopgroupe stophiding stopitemgroup stoplegend stopligneregleetexte stopline stoplinecorrection stoplinenumbering stoplines stoplocal stoplocalenvironment stoplocalfootnotes stopmakeup stopmargereglee stopmarginblock stopmenuinteraction stopnamemakeup stopnarrower stopopposite stopoverlay stopoverview stopparagraph stoppositioning stoppostponing stopproduit stopprofile stopprojet stopsymbolset stopsynchronization stoptable stoptables stoptabulate stoptyping stopunpacked stopversion sub subject subsection subsubject subsubsection subsubsubject suggestion suivantprofil suivantversion suivantversionprofil sym symbole synchronise synonym tab tapebuffer tapepage tete tex textemarge textenotepdp textetete title traduire traiteblocs traitepage traitfin traitsfins typ underbar underbars uneligne usedirectory usetypescript usetypescriptfile utiliseURL utiliseblocs utilisecommandes utilisedocumentexterne utiliseencodage utilisefichierexterne utilisefichiersexternes utilisefigureexterne utilisemodule utilisepsiteaudioexterne utilisereferences utilisespecialites utilisesymboles va vaalaboite vaenbas version vide vl \ No newline at end of file
diff --git a/Master/texmf-dist/context/data/scite/cont-it-scite.properties b/Master/texmf-dist/context/data/scite/cont-it-scite.properties
index 0a6a31425f2..da5df24007d 100644
--- a/Master/texmf-dist/context/data/scite/cont-it-scite.properties
+++ b/Master/texmf-dist/context/data/scite/cont-it-scite.properties
@@ -1,97 +1 @@
-keywordclass.macros.context.it=\
-CAP Cap Caps GIORNOSETTIMANA Lettera Lettere \
-MESE Numeriromani PAROLA PAROLE Parola Parole \
-accoppiacarta accoppiadocumento accoppiamarcatura accoppiapagina accoppiaregistro adattacampo \
-adattalayout al allineacentro allineadestra allineasinistra ap \
-apagina appendix barrainterazione barrasincronizzazione bastablocchi bastafile \
-cambiaafontdeltesto campi camporiempimento cap capello chapter \
-chim circondato citazione clip clonacampo colonna \
-colore coloregrigio commento completecombinedlist completelistoffloats completelistofsorts \
-completelistofsynonyms completeregister confrontagruppocolori confrontatavolozza convertinumero copiacampo \
-correggispaziobianco coupledregister crlf da daqualcheparte data \
-datadioggi datareferral definebodyfontDEF definebodyfontREF definedfont definefontfeature \
-definefonthandling definetypeface definisci definisciambientefontdeltesto definisciblocco definiscibloccosezione \
-definiscibuffer definiscicampo definiscicapoversi definiscicolore definisciconversione definiscidescrizione \
-definiscidimensionicarta definiscielenco definiscielencocombinato definiscienumerazione definiscietichetta definiscifigurasimbolo \
-definiscifont definiscifontdeltesto definisciformatoriferimento definiscigruppocolori definisciincorniciato definisciiniziatermina \
-definiscilistariferimenti definiscilogo definiscimakeup definiscimarcatura definiscimenuinterazione definiscimenuinterazione \
-definiscimodellotabella definiscioggettomobile definisciordinamento definiscioutput definisciprofilo definisciprogramma \
-definisciregistro definiscirientro definisciriferimento definiscirigovuoto definiscisezione definiscisimbolo \
-definiscisinonimi definiscisinonimofont definiscisottocampo definiscisovrapposizione definiscistackcampi definiscitabulato \
-definiscitavolozza definiscitesta definiscitesto definiscitestoincorniciato definiscitype definiscityping \
-definisciversion description determinacarattersticheelenco determinanumerotesta disabilitamenuinterazione el \
-elaborablocchi elaborapagina elementi elemento emptylines enumeration \
-etichette figuraesterna fondo forzablocchi framedtext frazione \
-giornosettimana griglia hl impaccato impostaallineamento impostaambientefontdeltesto \
-impostaampiezzariga impostabarrainterazione impostabarrasincronizzazione impostablocchimargine impostablocco impostabloccosezione \
-impostabuffer impostacampi impostacampo impostacapoversi impostacaption impostacaptions \
-impostacima impostaclippling impostacolonne impostacolore impostacolori impostacombinazioni \
-impostacommento impostadefinizionenotepdp impostadescrizioni impostadimensionicarta impostaelementi impostaelenco \
-impostaelencocombinato impostaenumerazioni impostafigureesterne impostafondo impostafontdeltesto impostaforms \
-impostaformule impostaincorniciato impostainmargine impostainstestazione impostainterazione impostainterlinea \
-impostalayout impostalegenda impostalineemargine impostalineenere impostalineeriempimento impostalineesottili \
-impostalineetesto impostalingua impostalistariferimenti impostamaiuscole impostamakeup impostamarcatura \
-impostamenuinterazione impostamenzione impostanotepdp impostanumerazione impostanumerazionecapoversi impostanumerazionepagina \
-impostanumerazionerighe impostanumeropagina impostanumerosottopagina impostanumerotesta impostaoggettimobili impostaoggettomobile \
-impostaordinamento impostaoutput impostaparranging impostapdp impostapiustretto impostaposizionamento \
-impostaposizionamentoopposti impostaprofili impostaprogrammi impostapubblicazioni impostapulsanti impostaregistro \
-impostarientri impostarientro impostariferimento impostarighe impostarigheriempimento impostarigovuoto \
-impostarotazione impostaschermi impostaschermointerazione impostasegnosillabazione impostasetsimboli impostasezione \
-impostasfondi impostasfondo impostasincronizzazione impostasinonimi impostasistema impostasottolinea \
-impostaspaziatura impostaspaziobianco impostaspezzamentooggettomobile impostastrut impostatab impostatabelle \
-impostatabulato impostatavolozza impostatesta impostateste impostatesticima impostatestifondo \
-impostatestiincorniciati impostatestiintestazioni impostatestipdp impostatesto impostatestoetichette impostatestointestazioni \
-impostatestotesti impostatolleranza impostatransizionepagina impostatype impostatyping impostaurl \
-impostaversioni in inaltromargine incorniciato indentation indestra \
-ininner inmargine inouter inriga insinistra installalingua \
-intorno labeling lettera lettere lineamargine lineanera \
-lineasottile lineatesto lineenere lineeriempimento lineesottili lingua \
-linguaprincipale listsymbol loadsorts loadsynonyms logcampi mapfontsize \
-mar marcatura marcaversione matematica mediaeval menzione \
-mese mettielenco mettielencocombinato mettielencocombinato mettifiancoafianco mettiformula \
-mettiingriglia mettilegenda mettiloghi mettinotepdp mettinotepdplocali mettiregistro \
-mettiregistro mettisegnalibro mettisottoformula mettiunosullaltro mostraambientefontdeltesto mostracampi \
-mostracolore mostracornice mostrafiguresterne mostrafontdeltesto mostragriglia mostragruppocolori \
-mostraimpostazioni mostralyout mostramakeup mostrasetsimboli mostrastampa mostrastruts \
-mostratavolozza name nascondiblocchi nextsection nienteelenco nientelineecimafondo \
-nientelineintestazionepdp nientemarcatura nienterientro nientespazio nientespaziobianco nocap \
-nop nota notapdp numeri numeriromani numerotesta \
-numerotestacorrente pagina paragraph paroladestra part ped \
-pedap placefloat placelistoffloats placelistofsorts placelistofsynonyms placereferencelist \
-posizione prendibuffer prendimarcatura programma pubblicazione pulsante \
-pulsantinterazione punti qualcheriga ran referral register \
-reimposta reimpostamarcatura reservefloat resettextcontent rientro rif \
-riferimento riferimentopagina riferimentotesto riflessione rigariempimento rigovuoto \
-ruota saltablocchi sbarrati sbarrato scala schermo \
-scrividentroelenco scriviinelenco scriviinlistariferimenti scriviinregistro section seeregister \
-segnalibro seguiprofilo seguiversione seguiversioneprofilo selezionablocchi selezionacarta \
-selezionaversione separamarcatura settext setupfonthandling setupfontsynonym setupinterlinespace2 \
-setupitemgroup setuplistalternative setuppaper sfondo sim simbolo \
-sincronizza sopralinea sopralinee sort sottolinea sottolinee \
-spazifissi spazio spaziobianco spezzaoggettomobile spostaagriglia stackcampi \
-startalignment startambiente startbuffer startbuffer startcitazione startcolore \
-startcolumns startcombination startcommento startcomponenet startdescription startdocument \
-startenumeration startfatto startfigure startfloattext startformula startframedtext \
-starthiding startimpaccato startitemgroup startlegend startline startlineamargine \
-startlineatesto startlinecorrection startlinenumbering startlines startlocal startlocalenvironment \
-startlocalfootnotes startmakeup startmarginblock startmenuinterattivo startnamemakeup startnarrower \
-startopposite startoverlay startoverview startparagraph startpositioning startpostponing \
-startprodotto startprofile startprogetto startregister startsfondo startsymbolset \
-startsynchronization starttable starttables starttabulate starttyping startunpacked \
-startversione stirato stopalignment stopambiente stopbuffer stopbuffer \
-stopcitazione stopcolore stopcolumns stopcombination stopcommento stopcomponenet \
-stopdescription stopdocument stopenumeration stopfatto stopfigure stopfloattext \
-stopformula stopframedtext stophiding stopimpaccato stopitemgroup stoplegend \
-stopline stoplineamargine stoplineatesto stoplinecorrection stoplinenumbering stoplines \
-stoplocal stoplocalenvironment stoplocalfootnotes stopmakeup stopmarginblock stopmenuinterattivo \
-stopnamemakeup stopnarrower stopopposite stopoverlay stopoverview stopparagraph \
-stoppositioning stoppostponing stopprodotto stopprofile stopprogetto stopsfondo \
-stopsymbolset stopsynchronization stoptable stoptables stoptabulate stoptyping \
-stopunpacked stopversione sub subject subsection subsubject \
-subsubsection subsubsubject synonym tab testa testoetichetta \
-testoinmargine testoinstestazioni testonotapdp testoriempimento tex tieniblocchi \
-tipopagina title tooltip traduci typ type \
-typebuffer typefile usaURL usablocco usacodifica usacolonnasonoraesterna \
-usacomandi usadocumentoesterno usafiguraesterna usafileesterni usafileesterno usamodulo \
-usariferimenti usasimboli usaspecialita usedirectory usetypescript usetypescriptfile \
-vaia vaiabox vaigiu versione vl \ No newline at end of file
+keywordclass.macros.context.it=CAP Cap Caps GIORNOSETTIMANA Lettera Lettere MESE Numeriromani PAROLA PAROLE Parola Parole accoppiacarta accoppiadocumento accoppiamarcatura accoppiapagina accoppiaregistro adattacampo adattalayout al allineacentro allineadestra allineasinistra ap apagina appendix barrainterazione barrasincronizzazione bastablocchi bastafile cambiaafontdeltesto campi camporiempimento cap capello chapter chim circondato citazione clip clonacampo colonna colore coloregrigio commento completecombinedlist completelistoffloats completelistofsorts completelistofsynonyms completeregister confrontagruppocolori confrontatavolozza convertinumero copiacampo correggispaziobianco coupledregister crlf da daqualcheparte data datadioggi datareferral definebodyfontDEF definebodyfontREF definedfont definefontfeature definefonthandling definetypeface definisci definisciambientefontdeltesto definisciblocco definiscibloccosezione definiscibuffer definiscicampo definiscicapoversi definiscicolore definisciconversione definiscidescrizione definiscidimensionicarta definiscielenco definiscielencocombinato definiscienumerazione definiscietichetta definiscifigurasimbolo definiscifont definiscifontdeltesto definisciformatoriferimento definiscigruppocolori definisciincorniciato definisciiniziatermina definiscilistariferimenti definiscilogo definiscimakeup definiscimarcatura definiscimenuinterazione definiscimenuinterazione definiscimodellotabella definiscioggettomobile definisciordinamento definiscioutput definisciprofilo definisciprogramma definisciregistro definiscirientro definisciriferimento definiscirigovuoto definiscisezione definiscisimbolo definiscisinonimi definiscisinonimofont definiscisottocampo definiscisovrapposizione definiscistackcampi definiscitabulato definiscitavolozza definiscitesta definiscitesto definiscitestoincorniciato definiscitype definiscityping definisciversion description determinacarattersticheelenco determinanumerotesta disabilitamenuinterazione el elaborablocchi elaborapagina elementi elemento emptylines enumeration etichette figuraesterna fondo forzablocchi framedtext frazione giornosettimana griglia hl impaccato impostaallineamento impostaambientefontdeltesto impostaampiezzariga impostabarrainterazione impostabarrasincronizzazione impostablocchimargine impostablocco impostabloccosezione impostabuffer impostacampi impostacampo impostacapoversi impostacaption impostacaptions impostacima impostaclippling impostacolonne impostacolore impostacolori impostacombinazioni impostacommento impostadefinizionenotepdp impostadescrizioni impostadimensionicarta impostaelementi impostaelenco impostaelencocombinato impostaenumerazioni impostafigureesterne impostafondo impostafontdeltesto impostaforms impostaformule impostaincorniciato impostainmargine impostainstestazione impostainterazione impostainterlinea impostalayout impostalegenda impostalineemargine impostalineenere impostalineeriempimento impostalineesottili impostalineetesto impostalingua impostalistariferimenti impostamaiuscole impostamakeup impostamarcatura impostamenuinterazione impostamenzione impostanotepdp impostanumerazione impostanumerazionecapoversi impostanumerazionepagina impostanumerazionerighe impostanumeropagina impostanumerosottopagina impostanumerotesta impostaoggettimobili impostaoggettomobile impostaordinamento impostaoutput impostaparranging impostapdp impostapiustretto impostaposizionamento impostaposizionamentoopposti impostaprofili impostaprogrammi impostapubblicazioni impostapulsanti impostaregistro impostarientri impostarientro impostariferimento impostarighe impostarigheriempimento impostarigovuoto impostarotazione impostaschermi impostaschermointerazione impostasegnosillabazione impostasetsimboli impostasezione impostasfondi impostasfondo impostasincronizzazione impostasinonimi impostasistema impostasottolinea impostaspaziatura impostaspaziobianco impostaspezzamentooggettomobile impostastrut impostatab impostatabelle impostatabulato impostatavolozza impostatesta impostateste impostatesticima impostatestifondo impostatestiincorniciati impostatestiintestazioni impostatestipdp impostatesto impostatestoetichette impostatestointestazioni impostatestotesti impostatolleranza impostatransizionepagina impostatype impostatyping impostaurl impostaversioni in inaltromargine incorniciato indentation indestra ininner inmargine inouter inriga insinistra installalingua intorno labeling lettera lettere lineamargine lineanera lineasottile lineatesto lineenere lineeriempimento lineesottili lingua linguaprincipale listsymbol loadsorts loadsynonyms logcampi mapfontsize mar marcatura marcaversione matematica mediaeval menzione mese mettielenco mettielencocombinato mettielencocombinato mettifiancoafianco mettiformula mettiingriglia mettilegenda mettiloghi mettinotepdp mettinotepdplocali mettiregistro mettiregistro mettisegnalibro mettisottoformula mettiunosullaltro mostraambientefontdeltesto mostracampi mostracolore mostracornice mostrafiguresterne mostrafontdeltesto mostragriglia mostragruppocolori mostraimpostazioni mostralyout mostramakeup mostrasetsimboli mostrastampa mostrastruts mostratavolozza name nascondiblocchi nextsection nienteelenco nientelineecimafondo nientelineintestazionepdp nientemarcatura nienterientro nientespazio nientespaziobianco nocap nop nota notapdp numeri numeriromani numerotesta numerotestacorrente overbar overbars overstrike overstrikes pagina paragraph paroladestra part ped pedap placefloat placelistoffloats placelistofsorts placelistofsynonyms placereferencelist posizione prendibuffer prendimarcatura programma pubblicazione pulsante pulsantinterazione punti qualcheriga ran referral register reimposta reimpostamarcatura reservefloat resettextcontent rientro rif riferimento riferimentopagina riferimentotesto riflessione rigariempimento rigovuoto ruota saltablocchi scala schermo scrividentroelenco scriviinelenco scriviinlistariferimenti scriviinregistro section seeregister segnalibro seguiprofilo seguiversione seguiversioneprofilo selezionablocchi selezionacarta selezionaversione separamarcatura settext setupfonthandling setupfontsynonym setupinterlinespace2 setupitemgroup setuplistalternative setuppaper sfondo sim simbolo sincronizza sort spazifissi spazio spaziobianco spezzaoggettomobile spostaagriglia stackcampi startalignment startambiente startbuffer startbuffer startcitazione startcolore startcolumns startcombination startcommento startcomponenet startdescription startdocument startenumeration startfatto startfigure startfloattext startformula startframedtext starthiding startimpaccato startitemgroup startlegend startline startlineamargine startlineatesto startlinecorrection startlinenumbering startlines startlocal startlocalenvironment startlocalfootnotes startmakeup startmarginblock startmenuinterattivo startnamemakeup startnarrower startopposite startoverlay startoverview startparagraph startpositioning startpostponing startprodotto startprofile startprogetto startregister startsfondo startsymbolset startsynchronization starttable starttables starttabulate starttyping startunpacked startversione stirato stopalignment stopambiente stopbuffer stopbuffer stopcitazione stopcolore stopcolumns stopcombination stopcommento stopcomponenet stopdescription stopdocument stopenumeration stopfatto stopfigure stopfloattext stopformula stopframedtext stophiding stopimpaccato stopitemgroup stoplegend stopline stoplineamargine stoplineatesto stoplinecorrection stoplinenumbering stoplines stoplocal stoplocalenvironment stoplocalfootnotes stopmakeup stopmarginblock stopmenuinterattivo stopnamemakeup stopnarrower stopopposite stopoverlay stopoverview stopparagraph stoppositioning stoppostponing stopprodotto stopprofile stopprogetto stopsfondo stopsymbolset stopsynchronization stoptable stoptables stoptabulate stoptyping stopunpacked stopversione sub subject subsection subsubject subsubsection subsubsubject synonym tab testa testoetichetta testoinmargine testoinstestazioni testonotapdp testoriempimento tex tieniblocchi tipopagina title tooltip traduci typ type typebuffer typefile underbar underbars usaURL usablocco usacodifica usacolonnasonoraesterna usacomandi usadocumentoesterno usafiguraesterna usafileesterni usafileesterno usamodulo usariferimenti usasimboli usaspecialita usedirectory usetypescript usetypescriptfile vaia vaiabox vaigiu versione vl \ No newline at end of file
diff --git a/Master/texmf-dist/context/data/scite/cont-nl-scite.properties b/Master/texmf-dist/context/data/scite/cont-nl-scite.properties
index e3254a5b489..688c8a7c034 100644
--- a/Master/texmf-dist/context/data/scite/cont-nl-scite.properties
+++ b/Master/texmf-dist/context/data/scite/cont-nl-scite.properties
@@ -1,97 +1 @@
-keywordclass.macros.context.nl=\
-CAP Cap Caps Letter Letters MAAND \
-Romeins WEEKDAG WOORD WOORDEN Woord Woorden \
-about achtergrond appendix bepaalkopnummer bepaallijstkenmerken blanko \
-blokje blokjes blokkeerinteractiemenu bookmark breuk but \
-button cap chapter chem cijfers citaat \
-citeer clip commentaar completecombinedlist completelistoffloats completelistofsorts \
-completelistofsynonyms converteernummer copieerveld corrigeerwitruimte coupledregister crlf \
-datum definebodyfontDEF definebodyfontREF definedfont definefontfeature definefonthandling \
-definetypeface definieer definieeralineas definieerbeeldmerk definieerblanko definieerblok \
-definieerbuffer definieerconversie definieerfiguursymbool definieerfont definieerfontsynoniem definieerinteractiemenu \
-definieerinteractiemenu definieerkadertekst definieerkleur definieerkleurgroep definieerkop definieerkorps \
-definieerkorpsomgeving definieerlijst definieermarkering definieeromlijnd definieeropmaak definieeroverlay \
-definieerpalet definieerpapierformaat definieerplaatsblok definieerprofiel definieerprogramma definieerreferentie \
-definieerreferentieformaat definieerreferentielijst definieerregister definieersamengesteldelijst definieersectie definieersectieblok \
-definieersorteren definieerstartstop definieersubveld definieersymbool definieersynoniemen definieertabelvorm \
-definieertabulatie definieertekst definieertype definieertypen definieeruitvoer definieerveld \
-definieerveldstapel definieerversie description doordefinieren doorlabelen doornummeren \
-doorspringen doorstreep doorstrepen dunnelijn dunnelijnen eenregel \
-enumeration ergens externfiguur forceerblokken framedtext gebruikURL \
-gebruikblokken gebruikcommandos gebruikexterndocument gebruikexternefile gebruikexternefiles gebruikexternfiguur \
-gebruikexterngeluidsfragment gebruikmodule gebruikreferenties gebruikspecials gebruiksymbolen gebruiktypescript \
-gebruiktypescriptfile geenblokkenmeer geenbovenenonderregels geenfilesmeer geenhoofdenvoetregels geenlijst \
-geenmarkering geenspatie geenwitruimte grijskleur haalbuffer haalmarkering \
-haarlijn handhaafblokken hl hoofdtaal hoog huidigedatum \
-huidigekopnummer in inanderemarge inbinnen inbuiten indentation \
-inlijnd inlinker inmarge inrechter inregel inspringen \
-installeertaal interactiebalk interactiebuttons invullijnen invulregel invultekst \
-invulveld items its kantlijn kenmerk kenmerkdatum \
-kleur kloonveld kolom kop kopnummer koppeldocument \
-koppelmarkering koppelpagina koppelpapier koppelregister koptekst laag \
-labeling labels labeltekst laho legeregels letter \
-letters lijstsymbool loadsorts loadsynonyms maand mapfontsize \
-mar margetekst markeer markeerversie mediaeval naar \
-naarbox name nextsection nietinspringen nocap noot \
-nop omlaag omlijnd onderstreep onderstrepen ontkoppelmarkering \
-op opelkaar oppagina overstreep overstrepen pagina \
-paginareferentie paragraph part paslayoutaan passeerblokken passendveld \
-plaatsbeeldmerken plaatsbookmarks plaatsformule plaatslegenda plaatslijst plaatslokalevoetnoten \
-plaatsnaastelkaar plaatsonderelkaar plaatsopgrid plaatsplaatsblok plaatsreferentielijst plaatsregister \
-plaatsregister plaatssamengesteldelijst plaatssamengesteldelijst plaatssubformule plaatsvoetnoten placelistoffloats \
-placelistofsorts placelistofsynonyms positioneer programma publicatie punten \
-ran ref referentie regellinks regelmidden regelrechts \
-register registreervelden reservefloat reset resetmarkering resettextcontent \
-romeins rooster roteer schaal scherm schrijfnaarlijst \
-schrijfnaarreferentielijst schrijfnaarregister schrijftussenlijst section seeregister selecteerblokken \
-selecteerpapier selecteerversie setupfonthandling setupfontsynonym setupinterlinespace2 setuplistalternative \
-som soortpagina sort spatie spiegel splitsplaatsblok \
-startachtergrond startalignment startbuffer startbuffer startcitaat startcolumns \
-startcombination startcommentaar startdescription startdocument startenumeration startfigure \
-startfloattext startformula startframedtext startgeg starthiding startinteractiemenu \
-startitemgroup startkantlijn startkleur startlegend startline startlinecorrection \
-startlinenumbering startlines startlocal startlocalenvironment startlocalfootnotes startmakeup \
-startmarginblock startnamemakeup startnarrower startomgeving startonderdeel startopelkaar \
-startopposite startoverlay startoverview startparagraph startpositioning startpostponing \
-startprodukt startprofile startprojekt startregister startsymbolset startsynchronization \
-starttable starttables starttabulate starttekstlijn starttyping startunpacked \
-startversie stelachtergrondenin stelachtergrondin stelalineasin stelarrangerenin stelblankoin \
-stelblokin stelblokjesin stelblokkopjein stelblokkopjesin stelbovenin stelboventekstenin \
-stelbufferin stelbuttonsin stelciterenin stelclipin stelcombinatiesin stelcommentaarin \
-steldoordefinierenin steldoornummerenin steldoorspringenin steldunnelijnenin stelexternefigurenin stelformulesin \
-stelformulierenin stelhoofdin stelhoofdtekstenin stelinmargein stelinspringenin stelinteractiebalkin \
-stelinteractiein stelinteractiemenuin stelinteractieschermin stelinterliniein stelinvullijnenin stelinvulregelsin \
-stelitemgroepin stelitemsin stelkadertekstenin stelkantlijnin stelkapitalenin stelkleurenin \
-stelkleurin stelkolommenin stelkopin stelkopnummerin stelkoppeltekenin stelkoppenin \
-stelkoptekstin stelkorpsin stelkorpsomgevingin stellabeltekstin stellayoutin stellegendain \
-stellijndiktein stellijstin stelmargeblokkenin stelmarkeringin stelnaastplaatsenin stelnummerenin \
-stelomlijndin stelonderin stelonderstrepenin stelondertekstenin stelopmaakin stelpaginanummerin \
-stelpaginanummeringin stelpaginaovergangenin stelpaletin stelpapierformaatin stelpapierin stelparagraafnummerenin \
-stelplaatsblokin stelplaatsblokkenin stelplaatsbloksplitsenin stelpositionerenin stelprofielenin stelprogrammasin \
-stelpublicatiesin stelrastersin stelreferentielijstin stelrefererenin stelregelnummerenin stelregelsin \
-stelregisterin stelroterenin stelsamengesteldelijstin stelsectieblokin stelsectiein stelsmallerin \
-stelsorterenin stelspatieringin stelstrutin stelsubpaginanummerin stelsymboolsetin stelsynchronisatiebalkin \
-stelsynchronisatiein stelsynoniemenin stelsysteemin steltaalin steltabellenin steltabin \
-steltabulatiein steltekstin steltekstinhoudin steltekstlijnenin stelteksttekstenin steltolerantiein \
-steltypein steltypenin steluitlijnenin steluitvoerin stelurlin stelveldenin \
-stelveldin stelversiesin stelvoetin stelvoetnootdefinitiein stelvoetnotenin stelvoettekstenin \
-stelwitruimtein stopachtergrond stopalignment stopbuffer stopbuffer stopcitaat \
-stopcolumns stopcombination stopcommentaar stopdescription stopdocument stopenumeration \
-stopfigure stopfloattext stopformula stopframedtext stopgeg stophiding \
-stopinteractiemenu stopitemgroup stopkantlijn stopkleur stoplegend stopline \
-stoplinecorrection stoplinenumbering stoplines stoplocal stoplocalenvironment stoplocalfootnotes \
-stopmakeup stopmarginblock stopnamemakeup stopnarrower stopomgeving stoponderdeel \
-stopopelkaar stopopposite stopoverlay stopoverview stopparagraph stoppositioning \
-stoppostponing stopprodukt stopprofile stopprojekt stopsymbolset stopsynchronization \
-stoptable stoptables stoptabulate stoptekstlijn stoptyping stopunpacked \
-stopversie sub subject subsection subsubject subsubsection \
-subsubsubject suggestie switchnaarkorps sym symbool synchronisatiebalk \
-synchroniseer synonym taal tab tekstlijn tekstreferentie \
-tex title toonexternefiguren toongrid tooninstellingen toonkader \
-toonkleur toonkleurgroep toonkorps toonkorpsomgeving toonlayout toonopmaak \
-toonpalet toonprint toonstruts toonsymboolset toonvelden typ \
-type typebuffer typefile uit uitgerekt usecodering \
-usedirectory vastespaties veld veldstapel verbergblokken vergelijkkleurgroep \
-vergelijkpalet verplaatsopgrid versie vertaal verwerkblokken verwerkpagina \
-vl voetnoot voetnoottekst volgprofiel volgprofielversie volgversie \
-volledigregister weekdag wiskunde witruimte woordrechts \ No newline at end of file
+keywordclass.macros.context.nl=CAP Cap Caps Letter Letters MAAND Romeins WEEKDAG WOORD WOORDEN Woord Woorden about achtergrond appendix bepaalkopnummer bepaallijstkenmerken blanko blokje blokjes blokkeerinteractiemenu bookmark breuk but button cap chapter chem cijfers citaat citeer clip commentaar completecombinedlist completelistoffloats completelistofsorts completelistofsynonyms converteernummer copieerveld corrigeerwitruimte coupledregister crlf datum definebodyfontDEF definebodyfontREF definedfont definefontfeature definefonthandling definetypeface definieer definieeralineas definieerbeeldmerk definieerblanko definieerblok definieerbuffer definieerconversie definieerfiguursymbool definieerfont definieerfontsynoniem definieerinteractiemenu definieerinteractiemenu definieerkadertekst definieerkleur definieerkleurgroep definieerkop definieerkorps definieerkorpsomgeving definieerlijst definieermarkering definieeromlijnd definieeropmaak definieeroverlay definieerpalet definieerpapierformaat definieerplaatsblok definieerprofiel definieerprogramma definieerreferentie definieerreferentieformaat definieerreferentielijst definieerregister definieersamengesteldelijst definieersectie definieersectieblok definieersorteren definieerstartstop definieersubveld definieersymbool definieersynoniemen definieertabelvorm definieertabulatie definieertekst definieertype definieertypen definieeruitvoer definieerveld definieerveldstapel definieerversie description doordefinieren doorlabelen doornummeren doorspringen dunnelijn dunnelijnen eenregel enumeration ergens externfiguur forceerblokken framedtext gebruikURL gebruikblokken gebruikcommandos gebruikexterndocument gebruikexternefile gebruikexternefiles gebruikexternfiguur gebruikexterngeluidsfragment gebruikmodule gebruikreferenties gebruikspecials gebruiksymbolen gebruiktypescript gebruiktypescriptfile geenblokkenmeer geenbovenenonderregels geenfilesmeer geenhoofdenvoetregels geenlijst geenmarkering geenspatie geenwitruimte grijskleur haalbuffer haalmarkering haarlijn handhaafblokken hl hoofdtaal hoog huidigedatum huidigekopnummer in inanderemarge inbinnen inbuiten indentation inlijnd inlinker inmarge inrechter inregel inspringen installeertaal interactiebalk interactiebuttons invullijnen invulregel invultekst invulveld items its kantlijn kenmerk kenmerkdatum kleur kloonveld kolom kop kopnummer koppeldocument koppelmarkering koppelpagina koppelpapier koppelregister koptekst laag labeling labels labeltekst laho legeregels letter letters lijstsymbool loadsorts loadsynonyms maand mapfontsize mar margetekst markeer markeerversie mediaeval naar naarbox name nextsection nietinspringen nocap noot nop omlaag omlijnd ontkoppelmarkering op opelkaar oppagina overbar overbars overstrike overstrikes pagina paginareferentie paragraph part paslayoutaan passeerblokken passendveld plaatsbeeldmerken plaatsbookmarks plaatsformule plaatslegenda plaatslijst plaatslokalevoetnoten plaatsnaastelkaar plaatsonderelkaar plaatsopgrid plaatsplaatsblok plaatsreferentielijst plaatsregister plaatsregister plaatssamengesteldelijst plaatssamengesteldelijst plaatssubformule plaatsvoetnoten placelistoffloats placelistofsorts placelistofsynonyms positioneer programma publicatie punten ran ref referentie regellinks regelmidden regelrechts register registreervelden reservefloat reset resetmarkering resettextcontent romeins rooster roteer schaal scherm schrijfnaarlijst schrijfnaarreferentielijst schrijfnaarregister schrijftussenlijst section seeregister selecteerblokken selecteerpapier selecteerversie setupfonthandling setupfontsynonym setupinterlinespace2 setuplistalternative som soortpagina sort spatie spiegel splitsplaatsblok startachtergrond startalignment startbuffer startbuffer startcitaat startcolumns startcombination startcommentaar startdescription startdocument startenumeration startfigure startfloattext startformula startframedtext startgeg starthiding startinteractiemenu startitemgroup startkantlijn startkleur startlegend startline startlinecorrection startlinenumbering startlines startlocal startlocalenvironment startlocalfootnotes startmakeup startmarginblock startnamemakeup startnarrower startomgeving startonderdeel startopelkaar startopposite startoverlay startoverview startparagraph startpositioning startpostponing startprodukt startprofile startprojekt startregister startsymbolset startsynchronization starttable starttables starttabulate starttekstlijn starttyping startunpacked startversie stelachtergrondenin stelachtergrondin stelalineasin stelarrangerenin stelblankoin stelblokin stelblokjesin stelblokkopjein stelblokkopjesin stelbovenin stelboventekstenin stelbufferin stelbuttonsin stelciterenin stelclipin stelcombinatiesin stelcommentaarin steldoordefinierenin steldoornummerenin steldoorspringenin steldunnelijnenin stelexternefigurenin stelformulesin stelformulierenin stelhoofdin stelhoofdtekstenin stelinmargein stelinspringenin stelinteractiebalkin stelinteractiein stelinteractiemenuin stelinteractieschermin stelinterliniein stelinvullijnenin stelinvulregelsin stelitemgroepin stelitemsin stelkadertekstenin stelkantlijnin stelkapitalenin stelkleurenin stelkleurin stelkolommenin stelkopin stelkopnummerin stelkoppeltekenin stelkoppenin stelkoptekstin stelkorpsin stelkorpsomgevingin stellabeltekstin stellayoutin stellegendain stellijndiktein stellijstin stelmargeblokkenin stelmarkeringin stelnaastplaatsenin stelnummerenin stelomlijndin stelonderin stelonderstrepenin stelondertekstenin stelopmaakin stelpaginanummerin stelpaginanummeringin stelpaginaovergangenin stelpaletin stelpapierformaatin stelpapierin stelparagraafnummerenin stelplaatsblokin stelplaatsblokkenin stelplaatsbloksplitsenin stelpositionerenin stelprofielenin stelprogrammasin stelpublicatiesin stelrastersin stelreferentielijstin stelrefererenin stelregelnummerenin stelregelsin stelregisterin stelroterenin stelsamengesteldelijstin stelsectieblokin stelsectiein stelsmallerin stelsorterenin stelspatieringin stelstrutin stelsubpaginanummerin stelsymboolsetin stelsynchronisatiebalkin stelsynchronisatiein stelsynoniemenin stelsysteemin steltaalin steltabellenin steltabin steltabulatiein steltekstin steltekstinhoudin steltekstlijnenin stelteksttekstenin steltolerantiein steltypein steltypenin steluitlijnenin steluitvoerin stelurlin stelveldenin stelveldin stelversiesin stelvoetin stelvoetnootdefinitiein stelvoetnotenin stelvoettekstenin stelwitruimtein stopachtergrond stopalignment stopbuffer stopbuffer stopcitaat stopcolumns stopcombination stopcommentaar stopdescription stopdocument stopenumeration stopfigure stopfloattext stopformula stopframedtext stopgeg stophiding stopinteractiemenu stopitemgroup stopkantlijn stopkleur stoplegend stopline stoplinecorrection stoplinenumbering stoplines stoplocal stoplocalenvironment stoplocalfootnotes stopmakeup stopmarginblock stopnamemakeup stopnarrower stopomgeving stoponderdeel stopopelkaar stopopposite stopoverlay stopoverview stopparagraph stoppositioning stoppostponing stopprodukt stopprofile stopprojekt stopsymbolset stopsynchronization stoptable stoptables stoptabulate stoptekstlijn stoptyping stopunpacked stopversie sub subject subsection subsubject subsubsection subsubsubject suggestie switchnaarkorps sym symbool synchronisatiebalk synchroniseer synonym taal tab tekstlijn tekstreferentie tex title toonexternefiguren toongrid tooninstellingen toonkader toonkleur toonkleurgroep toonkorps toonkorpsomgeving toonlayout toonopmaak toonpalet toonprint toonstruts toonsymboolset toonvelden typ type typebuffer typefile uit uitgerekt underbar underbars usecodering usedirectory vastespaties veld veldstapel verbergblokken vergelijkkleurgroep vergelijkpalet verplaatsopgrid versie vertaal verwerkblokken verwerkpagina vl voetnoot voetnoottekst volgprofiel volgprofielversie volgversie volledigregister weekdag wiskunde witruimte woordrechts \ No newline at end of file
diff --git a/Master/texmf-dist/context/data/scite/cont-pe-scite.properties b/Master/texmf-dist/context/data/scite/cont-pe-scite.properties
index a9756b04c44..a1769572557 100644
--- a/Master/texmf-dist/context/data/scite/cont-pe-scite.properties
+++ b/Master/texmf-dist/context/data/scite/cont-pe-scite.properties
@@ -1,97 +1 @@
-keywordclass.macros.context.pe=\
-CAP Cap Caps Character Characters MONTH \
-Romannumerals WEEKDAY WORD WORDS Word Words \
-appendix cap chapter chem completecombinedlist completelistoffloats \
-completelistofsorts completelistofsynonyms coupledregister crlf definebodyfontDEF definebodyfontREF \
-definedfont definefontfeature definefonthandling definetypeface description enumeration \
-framedtext indentation its labeling loadsorts loadsynonyms \
-mapfontsize mediaeval name nextsection nocap paragraph \
-part placelistoffloats placelistofsorts placelistofsynonyms ran register \
-reservefloat resettextcontent section seeregister setupcapitals setupfonthandling \
-setupfontsynonym setupinterlinespace2 setuplistalternative setupurl sort startalignment \
-startbuffer startbuffer startcolumns startcombination startdescription startdocument \
-startenumeration startfigure startfloattext startformula startframedtext starthiding \
-startitemgroup startlegend startline startlinecorrection startlinenumbering startlines \
-startlocal startlocalenvironment startlocalfootnotes startmakeup startmarginblock startnamemakeup \
-startnarrower startopposite startoverlay startoverview startparagraph startpositioning \
-startpostponing startprofile startregister startsymbolset startsynchronization starttable \
-starttables starttabulate starttyping startunpacked startتوضیح startتولید \
-startحقیقت startخط‌حاشیه startخط‌متن startرنگ startفشرده startمحیط \
-startمنوی‌پانل startمولفه startنسخه startنقل‌قول startپروژه startپس‌زمینه \
-stopalignment stopbuffer stopbuffer stopcolumns stopcombination stopdescription \
-stopdocument stopenumeration stopfigure stopfloattext stopformula stopframedtext \
-stophiding stopitemgroup stoplegend stopline stoplinecorrection stoplinenumbering \
-stoplines stoplocal stoplocalenvironment stoplocalfootnotes stopmakeup stopmarginblock \
-stopnamemakeup stopnarrower stopopposite stopoverlay stopoverview stopparagraph \
-stoppositioning stoppostponing stopprofile stopsymbolset stopsynchronization stoptable \
-stoptables stoptabulate stoptyping stopunpacked stopتوضیح stopتولید \
-stopحقیقت stopخط‌حاشیه stopخط‌متن stopرنگ stopفشرده stopمحیط \
-stopمنوی‌پانل stopمولفه stopنسخه stopنقل‌قول stopپروژه stopپس‌زمینه \
-sub subject subsection subsubject subsubsection subsubsubject \
-synonym title tooltip typ useURL usedirectory \
-آیتم آیتمها آینه اجباربلوکها از ازکارانداختن‌منوی‌پانل \
-استفاده‌بلوکها استفاده‌دستخط‌تایپ استفاده‌رمزینه استفاده‌شکل‌خارجی استفاده‌فرمانها استفاده‌قطعه‌موزیک‌خارجی \
-استفاده‌مدول استفاده‌مرجعها استفاده‌نمادها استفاده‌نوشتارخارجی استفاده‌ویژگیها استفاده‌پرونده‌خارجی \
-استفاده‌پرونده‌دستخط‌تایپ استفاده‌پرونده‌های‌خارجی اعدادلاتین اما انتخاب‌برگ انتخاب‌بلوکها \
-انتخاب‌نسخه انتقال‌به‌توری بارگذاری‌آرایش بارگذاری‌آیتمها بارگذاری‌ارجاع بارگذاری‌اندازه‌برگ \
-بارگذاری‌باریکتر بارگذاری‌بافر بارگذاری‌بالا بارگذاری‌بخش بارگذاری‌بردباری بارگذاری‌برنامه‌ها \
-بارگذاری‌برگ بارگذاری‌بست بارگذاری‌بلوک بارگذاری‌بلوکهای‌حاشیه بارگذاری‌بلوک‌بخش بارگذاری‌تایپ \
-بارگذاری‌تایپ‌کردن بارگذاری‌تب بارگذاری‌ترتیب بارگذاری‌ترتیب بارگذاری‌ترکیب‌ها بارگذاری‌تطابق \
-بارگذاری‌تعریف‌پانوشت بارگذاری‌تنظیم بارگذاری‌ته‌برگ بارگذاری‌تورفتگی بارگذاری‌تورفتگیها بارگذاری‌توضیح \
-بارگذاری‌ثبت بارگذاری‌جدولها بارگذاری‌جدول‌بندی بارگذاری‌خالی بارگذاری‌خروجی بارگذاری‌خطها \
-بارگذاری‌خطهای‌حاشیه بارگذاری‌خطهای‌سیاه بارگذاری‌خطهای‌متن بارگذاری‌خطها‌ی‌نازک بارگذاری‌درج‌درخطها بارگذاری‌درج‌مخالف \
-بارگذاری‌درون‌حاشیه بارگذاری‌دوران بارگذاری‌دکمه‌ها بارگذاری‌راهنما بارگذاری‌رنگ بارگذاری‌رنگها \
-بارگذاری‌زبان بارگذاری‌ستونها بارگذاری‌سر بارگذاری‌سربرگ بارگذاری‌سرها بارگذاری‌سیستم \
-بارگذاری‌شرح بارگذاری‌شرح بارگذاری‌شرحها بارگذاری‌شماره‌زیرصفحه بارگذاری‌شماره‌سر بارگذاری‌شماره‌صفحه \
-بارگذاری‌شماره‌گذاری بارگذاری‌شماره‌گذاریها بارگذاری‌شماره‌گذاری‌صفحه بارگذاری‌شماره‌گذاری‌پاراگراف بارگذاری‌شماره‌‌گذاری‌خط بارگذاری‌شناور \
-بارگذاری‌شناورها بارگذاری‌شکافتن‌شناورها بارگذاری‌شکلهای‌خارجی بارگذاری‌طرح بارگذاری‌طرح‌بندی بارگذاری‌عرض‌خط \
-بارگذاری‌فاصله‌بین‌خط بارگذاری‌فرمولها بارگذاری‌فضای‌سفید بارگذاری‌فضا‌گذاری بارگذاری‌قالبی بارگذاری‌قلم‌متن \
-بارگذاری‌لوح بارگذاری‌لیست بارگذاری‌لیست‌ترکیبی بارگذاری‌لیست‌مرجع بارگذاری‌مترادفها بارگذاری‌متن \
-بارگذاری‌متنهای‌بالا بارگذاری‌متن‌سر بارگذاری‌متن‌سربرگ بارگذاری‌متن‌قالبی بارگذاری‌متن‌متنها بارگذاری‌متن‌پانوشت \
-بارگذاری‌متن‌پایین بارگذاری‌مجموعه‌نماد بارگذاری‌محیط‌قلم‌متن بارگذاری‌منوی‌پانل بارگذاری‌مکان‌گذاری بارگذاری‌میدان \
-بارگذاری‌میدانها بارگذاری‌میله‌تطابق بارگذاری‌میله‌زیر بارگذاری‌میله‌پانل بارگذاری‌نسخه‌ها بارگذاری‌نشانه‌شکستن \
-بارگذاری‌نشانه‌گذاری بارگذاری‌نشرها بارگذاری‌نقل بارگذاری‌پاراگرافها بارگذاری‌پانل بارگذاری‌پانوشتها \
-بارگذاری‌پایین بارگذاری‌پرده‌ها بارگذاری‌پرده‌پانل بارگذاری‌پروفایلها بارگذاری‌پرکردن‌خطها بارگذاری‌پس‌زمینه \
-بارگذاری‌پس‌زمینه‌ها بارگذاری‌چیدن بارگذاری‌گذارصفحه بارگذاری‌گروه‌آیتم بازنشانی بازنشانی‌نشانه‌گذاری \
-باگذاری‌متن‌برچسب بدون‌بلوکهای‌بیشتر بدون‌تورفتگی بدون‌خط‌بالاوپایین بدون‌خط‌سروته‌برگ بدون‌فایلهای‌بیشتر \
-بدون‌فضا بدون‌فضای‌سفید بدون‌لیست بدون‌نشانه‌گذاری برنامه بروبه \
-بروبه‌جعبه بروپایین برچسبها بلند بلوکهای‌پردازش بلوکها‌پنهان \
-بنویس‌بین‌لیست بنویس‌درثبت بنویس‌درلیست‌مرجع بنویس‌در‌لیست تاریخ تاریخ‌جاری \
-تاریخ‌رجوع تایپ تایپ‌بافر تایپ‌پرونده تب ترجمه \
-تطابق تعریف تعریف‌آرایش تعریف‌آرم تعریف‌الگوی‌جدول تعریف‌اندازه‌برگ \
-تعریف‌بافر تعریف‌بخش تعریف‌برنامه تعریف‌برچسب تعریف‌بلوک تعریف‌بلوک‌بخش \
-تعریف‌تایپ تعریف‌تایپ‌کردن تعریف‌تبدیل تعریف‌ترتیب تعریف‌توده‌میدان تعریف‌تورفتگی \
-تعریف‌ثبت تعریف‌جدول‌بندی تعریف‌خالی تعریف‌خروجی تعریف‌رنگ تعریف‌زیرمیدان \
-تعریف‌سر تعریف‌شرح تعریف‌شروع‌پایان تعریف‌شماره‌بندی تعریف‌شمایل‌مرجع تعریف‌شناور \
-تعریف‌قالبی تعریف‌قلم تعریف‌قلم‌متن تعریف‌لوح تعریف‌لیست تعریف‌لیست‌ترکیبی \
-تعریف‌لیست‌مرجع تعریف‌مترادفها تعریف‌مترادف‌قلم تعریف‌متن تعریف‌متن‌قالبی تعریف‌محیط‌قلم‌بدنه \
-تعریف‌مرجع تعریف‌منوی‌پانل تعریف‌منوی‌پانل تعریف‌میدان تعریف‌نسخه تعریف‌نشانه‌گذاری \
-تعریف‌نماد تعریف‌نمادشکل تعریف‌پاراگرافها تعریف‌پروفایل تعریف‌پوشش تعریف‌گروه‌رنگ \
-تعیین‌شماره‌سر تعیین‌محتوای‌متن تعیین‌مشخصات‌لیست تغییربه‌قلم‌بدنه تنظیم‌راست تنظیم‌طرح‌بندی \
-تنظیم‌وسط تورفتگی توری توضیح تک ثبت‌زوج \
-ثبت‌کامل جداسازی‌نشانه‌گذاری حاش حرف حرفها حفظ‌بلوکها \
-خالی خطهای‌سیاه خطهای‌نازک خطها‌خالی خط‌حاشیه خط‌زدن \
-خط‌زدنها خط‌سیاه خط‌متن خط‌مو خط‌نازک خ‌ا \
-خ‌ع در درج‌آرمها درج‌ثبت درج‌ثبت درج‌درخط \
-درج‌درخطها درج‌درمتن درج‌درمیدان درج‌در‌بالای‌یکدیگر درج‌در‌توری درج‌راهنما \
-درج‌زیرفرمول درج‌شناور درج‌فرمول درج‌لیست درج‌لیست‌مختلط درج‌لیست‌مختلط \
-درج‌لیست‌مرجع درج‌پانوشتها درج‌پانوشتهای‌موضعی درج‌چوب‌خط درج‌کنار‌به‌کنار درحاشیه \
-درحاشیه‌دیگر درخارجی درخط درداخلی درراست درصفحه \
-درقالبی درمورد درون درچپ دریافت‌بافر دریافت‌نشانه \
-دوران دکمه دکمه‌پانل رج رجوع رنگ \
-رنگ‌خاکستری روزهفته ریاضی زبان زبان‌اصلی ستون \
-سر شماره‌سر شماره‌سرجاری شماره‌مبدل شماره‌ها شکافتن‌شناور \
-شکل‌خارجی صفحه صفحه‌زوج صفحه‌پردازش عبوربلوکها فشرده \
-فضا فضاهای‌ثابت فضای‌سفید فضای‌سفیدصحیح قالبی لوح‌مقایسه \
-ماه متن‌برچسب متن‌حاشیه متن‌سر متن‌پانوشت مرجع \
-مرجع‌صفحه مرجع‌متن مقایسه‌گروه‌رنگ مقیاس منفی مکان \
-میدان میدانهای‌گزارش میدان‌شبیه‌سازی میدان‌پشته میدان‌کپی میله‌تطابق \
-میله‌رو میله‌زیر میله‌ها‌رو میله‌پانل میله‌‌های‌زیر نسخه \
-نسخه‌نشانه نشانه‌گذاری نشانه‌گذاری‌زوج نشر نصب‌زبان نقطه‌ها \
-نقل نقل‌قول نم نماد نمادلیست نمایش‌آرایش \
-نمایش‌بارگذاریها نمایش‌بستها نمایش‌توری نمایش‌رنگ نمایش‌شکلهای‌خارجی نمایش‌طرح‌بندی \
-نمایش‌قالب نمایش‌قلم‌بدنه نمایش‌لوح نمایش‌مجموعه‌علامت نمایش‌محیط‌قلم‌بدنه نمایش‌میدانها \
-نمایش‌چاپ نمایش‌گروه‌رنگ نوشتارزوج نوع‌صفحه پابا پانوشت \
-پایین پرده پرکردن‌میدان پس‌زمینه پیروی‌نسخه پیروی‌نسخه‌پروفایل \
-پیروی‌پروفایل چوبخط چپ‌چین کاغذزوج کسر کشیده \
-کلمه‌راست گیره یادداشت یک‌جا یک‌خط \ No newline at end of file
+keywordclass.macros.context.pe=CAP Cap Caps Character Characters MONTH Romannumerals WEEKDAY WORD WORDS Word Words appendix cap chapter chem completecombinedlist completelistoffloats completelistofsorts completelistofsynonyms coupledregister crlf definebodyfontDEF definebodyfontREF definedfont definefontfeature definefonthandling definetypeface description enumeration framedtext indentation its labeling loadsorts loadsynonyms mapfontsize mediaeval name nextsection nocap overbar overbars overstrike overstrikes paragraph part placelistoffloats placelistofsorts placelistofsynonyms ran register reservefloat resettextcontent section seeregister setupcapitals setupfonthandling setupfontsynonym setupinterlinespace2 setuplistalternative setupurl sort startalignment startbuffer startbuffer startcolumns startcombination startdescription startdocument startenumeration startfigure startfloattext startformula startframedtext starthiding startitemgroup startlegend startline startlinecorrection startlinenumbering startlines startlocal startlocalenvironment startlocalfootnotes startmakeup startmarginblock startnamemakeup startnarrower startopposite startoverlay startoverview startparagraph startpositioning startpostponing startprofile startregister startsymbolset startsynchronization starttable starttables starttabulate starttyping startunpacked startتوضیح startتولید startحقیقت startخط‌حاشیه startخط‌متن startرنگ startفشرده startمحیط startمنوی‌پانل startمولفه startنسخه startنقل‌قول startپروژه startپس‌زمینه stopalignment stopbuffer stopbuffer stopcolumns stopcombination stopdescription stopdocument stopenumeration stopfigure stopfloattext stopformula stopframedtext stophiding stopitemgroup stoplegend stopline stoplinecorrection stoplinenumbering stoplines stoplocal stoplocalenvironment stoplocalfootnotes stopmakeup stopmarginblock stopnamemakeup stopnarrower stopopposite stopoverlay stopoverview stopparagraph stoppositioning stoppostponing stopprofile stopsymbolset stopsynchronization stoptable stoptables stoptabulate stoptyping stopunpacked stopتوضیح stopتولید stopحقیقت stopخط‌حاشیه stopخط‌متن stopرنگ stopفشرده stopمحیط stopمنوی‌پانل stopمولفه stopنسخه stopنقل‌قول stopپروژه stopپس‌زمینه sub subject subsection subsubject subsubsection subsubsubject synonym title tooltip typ underbar underbars useURL usedirectory آیتم آیتمها آینه اجباربلوکها از ازکارانداختن‌منوی‌پانل استفاده‌بلوکها استفاده‌دستخط‌تایپ استفاده‌رمزینه استفاده‌شکل‌خارجی استفاده‌فرمانها استفاده‌قطعه‌موزیک‌خارجی استفاده‌مدول استفاده‌مرجعها استفاده‌نمادها استفاده‌نوشتارخارجی استفاده‌ویژگیها استفاده‌پرونده‌خارجی استفاده‌پرونده‌دستخط‌تایپ استفاده‌پرونده‌های‌خارجی اعدادلاتین اما انتخاب‌برگ انتخاب‌بلوکها انتخاب‌نسخه انتقال‌به‌توری بارگذاری‌آرایش بارگذاری‌آیتمها بارگذاری‌ارجاع بارگذاری‌اندازه‌برگ بارگذاری‌باریکتر بارگذاری‌بافر بارگذاری‌بالا بارگذاری‌بخش بارگذاری‌بردباری بارگذاری‌برنامه‌ها بارگذاری‌برگ بارگذاری‌بست بارگذاری‌بلوک بارگذاری‌بلوکهای‌حاشیه بارگذاری‌بلوک‌بخش بارگذاری‌تایپ بارگذاری‌تایپ‌کردن بارگذاری‌تب بارگذاری‌ترتیب بارگذاری‌ترتیب بارگذاری‌ترکیب‌ها بارگذاری‌تطابق بارگذاری‌تعریف‌پانوشت بارگذاری‌تنظیم بارگذاری‌ته‌برگ بارگذاری‌تورفتگی بارگذاری‌تورفتگیها بارگذاری‌توضیح بارگذاری‌ثبت بارگذاری‌جدولها بارگذاری‌جدول‌بندی بارگذاری‌خالی بارگذاری‌خروجی بارگذاری‌خطها بارگذاری‌خطهای‌حاشیه بارگذاری‌خطهای‌سیاه بارگذاری‌خطهای‌متن بارگذاری‌خطها‌ی‌نازک بارگذاری‌درج‌درخطها بارگذاری‌درج‌مخالف بارگذاری‌درون‌حاشیه بارگذاری‌دوران بارگذاری‌دکمه‌ها بارگذاری‌راهنما بارگذاری‌رنگ بارگذاری‌رنگها بارگذاری‌زبان بارگذاری‌ستونها بارگذاری‌سر بارگذاری‌سربرگ بارگذاری‌سرها بارگذاری‌سیستم بارگذاری‌شرح بارگذاری‌شرح بارگذاری‌شرحها بارگذاری‌شماره‌زیرصفحه بارگذاری‌شماره‌سر بارگذاری‌شماره‌صفحه بارگذاری‌شماره‌گذاری بارگذاری‌شماره‌گذاریها بارگذاری‌شماره‌گذاری‌صفحه بارگذاری‌شماره‌گذاری‌پاراگراف بارگذاری‌شماره‌‌گذاری‌خط بارگذاری‌شناور بارگذاری‌شناورها بارگذاری‌شکافتن‌شناورها بارگذاری‌شکلهای‌خارجی بارگذاری‌طرح بارگذاری‌طرح‌بندی بارگذاری‌عرض‌خط بارگذاری‌فاصله‌بین‌خط بارگذاری‌فرمولها بارگذاری‌فضای‌سفید بارگذاری‌فضا‌گذاری بارگذاری‌قالبی بارگذاری‌قلم‌متن بارگذاری‌لوح بارگذاری‌لیست بارگذاری‌لیست‌ترکیبی بارگذاری‌لیست‌مرجع بارگذاری‌مترادفها بارگذاری‌متن بارگذاری‌متنهای‌بالا بارگذاری‌متن‌سر بارگذاری‌متن‌سربرگ بارگذاری‌متن‌قالبی بارگذاری‌متن‌متنها بارگذاری‌متن‌پانوشت بارگذاری‌متن‌پایین بارگذاری‌مجموعه‌نماد بارگذاری‌محیط‌قلم‌متن بارگذاری‌منوی‌پانل بارگذاری‌مکان‌گذاری بارگذاری‌میدان بارگذاری‌میدانها بارگذاری‌میله‌تطابق بارگذاری‌میله‌زیر بارگذاری‌میله‌پانل بارگذاری‌نسخه‌ها بارگذاری‌نشانه‌شکستن بارگذاری‌نشانه‌گذاری بارگذاری‌نشرها بارگذاری‌نقل بارگذاری‌پاراگرافها بارگذاری‌پانل بارگذاری‌پانوشتها بارگذاری‌پایین بارگذاری‌پرده‌ها بارگذاری‌پرده‌پانل بارگذاری‌پروفایلها بارگذاری‌پرکردن‌خطها بارگذاری‌پس‌زمینه بارگذاری‌پس‌زمینه‌ها بارگذاری‌چیدن بارگذاری‌گذارصفحه بارگذاری‌گروه‌آیتم بازنشانی بازنشانی‌نشانه‌گذاری باگذاری‌متن‌برچسب بدون‌بلوکهای‌بیشتر بدون‌تورفتگی بدون‌خط‌بالاوپایین بدون‌خط‌سروته‌برگ بدون‌فایلهای‌بیشتر بدون‌فضا بدون‌فضای‌سفید بدون‌لیست بدون‌نشانه‌گذاری برنامه بروبه بروبه‌جعبه بروپایین برچسبها بلند بلوکهای‌پردازش بلوکها‌پنهان بنویس‌بین‌لیست بنویس‌درثبت بنویس‌درلیست‌مرجع بنویس‌در‌لیست تاریخ تاریخ‌جاری تاریخ‌رجوع تایپ تایپ‌بافر تایپ‌پرونده تب ترجمه تطابق تعریف تعریف‌آرایش تعریف‌آرم تعریف‌الگوی‌جدول تعریف‌اندازه‌برگ تعریف‌بافر تعریف‌بخش تعریف‌برنامه تعریف‌برچسب تعریف‌بلوک تعریف‌بلوک‌بخش تعریف‌تایپ تعریف‌تایپ‌کردن تعریف‌تبدیل تعریف‌ترتیب تعریف‌توده‌میدان تعریف‌تورفتگی تعریف‌ثبت تعریف‌جدول‌بندی تعریف‌خالی تعریف‌خروجی تعریف‌رنگ تعریف‌زیرمیدان تعریف‌سر تعریف‌شرح تعریف‌شروع‌پایان تعریف‌شماره‌بندی تعریف‌شمایل‌مرجع تعریف‌شناور تعریف‌قالبی تعریف‌قلم تعریف‌قلم‌متن تعریف‌لوح تعریف‌لیست تعریف‌لیست‌ترکیبی تعریف‌لیست‌مرجع تعریف‌مترادفها تعریف‌مترادف‌قلم تعریف‌متن تعریف‌متن‌قالبی تعریف‌محیط‌قلم‌بدنه تعریف‌مرجع تعریف‌منوی‌پانل تعریف‌منوی‌پانل تعریف‌میدان تعریف‌نسخه تعریف‌نشانه‌گذاری تعریف‌نماد تعریف‌نمادشکل تعریف‌پاراگرافها تعریف‌پروفایل تعریف‌پوشش تعریف‌گروه‌رنگ تعیین‌شماره‌سر تعیین‌محتوای‌متن تعیین‌مشخصات‌لیست تغییربه‌قلم‌بدنه تنظیم‌راست تنظیم‌طرح‌بندی تنظیم‌وسط تورفتگی توری توضیح تک ثبت‌زوج ثبت‌کامل جداسازی‌نشانه‌گذاری حاش حرف حرفها حفظ‌بلوکها خالی خطهای‌سیاه خطهای‌نازک خطها‌خالی خط‌حاشیه خط‌سیاه خط‌متن خط‌مو خط‌نازک خ‌ا خ‌ع در درج‌آرمها درج‌ثبت درج‌ثبت درج‌درخط درج‌درخطها درج‌درمتن درج‌درمیدان درج‌در‌بالای‌یکدیگر درج‌در‌توری درج‌راهنما درج‌زیرفرمول درج‌شناور درج‌فرمول درج‌لیست درج‌لیست‌مختلط درج‌لیست‌مختلط درج‌لیست‌مرجع درج‌پانوشتها درج‌پانوشتهای‌موضعی درج‌چوب‌خط درج‌کنار‌به‌کنار درحاشیه درحاشیه‌دیگر درخارجی درخط درداخلی درراست درصفحه درقالبی درمورد درون درچپ دریافت‌بافر دریافت‌نشانه دوران دکمه دکمه‌پانل رج رجوع رنگ رنگ‌خاکستری روزهفته ریاضی زبان زبان‌اصلی ستون سر شماره‌سر شماره‌سرجاری شماره‌مبدل شماره‌ها شکافتن‌شناور شکل‌خارجی صفحه صفحه‌زوج صفحه‌پردازش عبوربلوکها فشرده فضا فضاهای‌ثابت فضای‌سفید فضای‌سفیدصحیح قالبی لوح‌مقایسه ماه متن‌برچسب متن‌حاشیه متن‌سر متن‌پانوشت مرجع مرجع‌صفحه مرجع‌متن مقایسه‌گروه‌رنگ مقیاس منفی مکان میدان میدانهای‌گزارش میدان‌شبیه‌سازی میدان‌پشته میدان‌کپی میله‌تطابق میله‌پانل نسخه نسخه‌نشانه نشانه‌گذاری نشانه‌گذاری‌زوج نشر نصب‌زبان نقطه‌ها نقل نقل‌قول نم نماد نمادلیست نمایش‌آرایش نمایش‌بارگذاریها نمایش‌بستها نمایش‌توری نمایش‌رنگ نمایش‌شکلهای‌خارجی نمایش‌طرح‌بندی نمایش‌قالب نمایش‌قلم‌بدنه نمایش‌لوح نمایش‌مجموعه‌علامت نمایش‌محیط‌قلم‌بدنه نمایش‌میدانها نمایش‌چاپ نمایش‌گروه‌رنگ نوشتارزوج نوع‌صفحه پابا پانوشت پایین پرده پرکردن‌میدان پس‌زمینه پیروی‌نسخه پیروی‌نسخه‌پروفایل پیروی‌پروفایل چوبخط چپ‌چین کاغذزوج کسر کشیده کلمه‌راست گیره یادداشت یک‌جا یک‌خط \ No newline at end of file
diff --git a/Master/texmf-dist/context/data/scite/cont-ro-scite.properties b/Master/texmf-dist/context/data/scite/cont-ro-scite.properties
index da9af1b3ae1..47fd2b9c3ce 100644
--- a/Master/texmf-dist/context/data/scite/cont-ro-scite.properties
+++ b/Master/texmf-dist/context/data/scite/cont-ro-scite.properties
@@ -1,97 +1 @@
-keywordclass.macros.context.ro=\
-CAP CUVANT CUVINTE Cap Caps Cuvant \
-Cuvinte LUNA Litera Litere Numereromane ZIDINSAPTAMANA \
-adapteazaaspect adubuffer adumarcaje afiseazaaspect afiseazacampuri afiseazaculoare \
-afiseazafiguriexterne afiseazafonttext afiseazagrid afiseazagrupculoare afiseazamakeup afiseazamediufonttext \
-afiseazapaleta afiseazarama afiseazasetari afiseazasetsimboluri afiseazastruts afiseazatiparire \
-aliniat aliniatcentru aliniatdreapta aliniatstanga appendix ascundeblocuri \
-barainteractiune barasincronizare barasus blanc but butoaneinteractiune \
-buton camp campumplere cap chapter chem \
-citat clip cloneazacamp coloana comentariu comparagrupculoare \
-comparapaleta completecombinedlist completelistoffloats completelistofsorts completelistofsynonyms completeregister \
-convertestenumar copiazacamp corecteazaspatiualb coupledregister crlf culoare \
-culoaregri cupleazadocument cupleazamarcaje cupleazaregistru cuvantdreapta data \
-datacurenta datareferit decupleazamarcaje definebodyfontDEF definebodyfontREF definedfont \
-definefontfeature definefonthandling defineste definestealiat definesteantet definesteblanc \
-definestebloc definesteblocsectiune definestebuffer definestecamp definesteconversie definesteculoare \
-definestedescriere definestedimensiunehartie definesteenumerare definesteeticheta definestefloat definestefont \
-definestefonttext definesteformatreferinte definestegrupculori definesteinconjurare definestelista definestelistacombinata \
-definestelistareferinte definestelogo definestemakeup definestemarcaje definestemediulfonttext definestemeniuinteractiune \
-definestemeniuinteractiune definesteoutput definesteoverlay definestepaleta definesteparagraf definesteprofil \
-definesteprogram definestereferinte definesteregistru definestesablontabel definestesectiune definestesimbol \
-definestesimbolfigura definestesinonim definestesinonimfont definestesortare definestestartstop definestestivacampuri \
-definestesubcamp definestetabulatori definestetext definestetexteinconjurate definestetextinconjurat definestetyping \
-definesteversiune definetype definetypeface description despre determinacaracteristicilelistei \
-determinanumartitlu dezactiveazameniuinteractiune din dute dutebox ecran \
-el element element emptylines enumeration etichete \
-faraaliniat farafisiere faraliniiantetsisubsol faraliniisussijos faralista faramarcaje \
-faraspatiu faraspatiualb figuraexterna firdepar folosesteURL folosestebloc \
-folosestecodificarea folosestecomenzi folosestedocumentextern folosestefiguraexterna folosestefisiereexterne folosestefisierextern \
-folosestemodul folosestemuzicaexterna folosestereferinte folosestesimboluri folosestespeciale footnotetext \
-forteazablocuri fractie framed framedtext fundal gatablocuri \
-grid hartiedubla hl impachetat impartefloat in \
-inalt inaltamargine indentation indreapta inframed ininner \
-injos inlinie inouter instalarelimba instanga intins \
-jos jossus la labeling lapagina limba \
-limbaprincipala liniemargine linieneagra liniepeste liniesubtire linieumplere \
-liniinegre liniipeste liniisubtiri listsymbol litera litere \
-loadsorts loadsynonyms logcampuri luna mapfontsize mar \
-marcaje marcheazaversiune marginal matematica mediaeval minicitat \
-mutapegrid name nextsection nocap nop nota \
-notasubsol numartitlu numartitlucurent numere numereromane olinie \
-pagina paginadubla paragraph part pastreazablocuri placefloat \
-placelistoffloats placelistofsorts placelistofsynonyms placereferencelist plaseazapegrid plaseazasemnecarte \
-potrivestecamp pozitie proceseazabloc proceseazapagina program publicatie \
-puncte punedeasuprafiecareia punefatainfata puneformula punelegenda punelista \
-punelistacombinata punelistacombinata punelogouri punenotesubsol punenotesubsollocale puneregistru \
-puneregistru punesubformula ran ref referinta referintapagina \
-referintatext referit reflexie register reservefloat reset \
-reseteazamarcaje resettextcontent riglatext rigleumplere roteste saripesteblocuri \
-scala scriebuffer scrieinlista scrieinlistareferinte scrieinregistru scrieintreliste \
-section seeregister selecteazablocuri selecteazahartie selecteazaversiune semncarte \
-setarebarasincronizare setarelimba setareoutput setarepozitie setaresincronizare seteazaaliniat \
-seteazaaliniate seteazaalinierea seteazaantet seteazaaranjareapag seteazaaspect seteazabarainteractiune \
-seteazablanc seteazabloc seteazablocsectiune seteazablocurimarginale seteazabuffer seteazabutoane \
-seteazacamp seteazacampuri seteazaclipping seteazacoloane seteazacombinari seteazacomentariu \
-seteazaculoare seteazaculori seteazadefinireanotasubsol seteazadescriere seteazadimensiunihartie seteazaecrane \
-seteazaecraninteractiune seteazaelemente seteazaenumerare seteazafiguriexterne seteazafloat seteazafloats \
-seteazafonttext seteazaformulare seteazaformule seteazafundal seteazafundaluri seteazagrosimelinie \
-seteazaimpartireafloat seteazainconjurat seteazaingust seteazainteractiunea seteazajos seteazalegenda \
-seteazalegenda seteazalegendele seteazaliniesilabe seteazaliniesubtire seteazalinii seteazaliniimargine \
-seteazaliniinegre seteazaliniiumplere seteazalista seteazalistacombinata seteazalistareferinte seteazamajuscule \
-seteazamakeup seteazamarcaje seteazamarginal seteazamediulfonttext seteazameniuinteractiune seteazaminicitat \
-seteazanotasubsol seteazanumarpagina seteazanumarsubpagina seteazanumartitlu seteazanumerotare seteazanumerotarelinii \
-seteazanumerotarepagina seteazanumerotareparagrafe seteazapaleta seteazaparagrafe seteazaplasareaopozita seteazaprofile \
-seteazaprograme seteazapublicatii seteazareferinte seteazaregistru seteazarigletext seteazarigleumplere \
-seteazarotare seteazasectiune seteazasimbol seteazasinonime seteazasistem seteazasortare \
-seteazaspatiu seteazaspatiualb seteazaspatiuinterliniar seteazastrut seteazasublinie seteazasubsol \
-seteazasus seteazatab seteazatabele seteazatabulatori seteazatext seteazatexteantet \
-seteazatextejos seteazatextesubsol seteazatextesus seteazatextetext seteazatexteticheta seteazatexttitlu \
-seteazatitlu seteazatitluri seteazatoleranta seteazatranzitiepagina seteazatype seteazatyping \
-seteazaurl seteazaversiuni settextcontent setupfonthandling setupfontsynonym setupinterlinespace2 \
-setupitemgroup setuplistalternative setuppaper sim simbol sincronizeaza \
-sort spatiifixate spatiu spatiualb startalignment startbuffer \
-startbuffer startcitat startcolumns startcombination startcomentariu startcomponenta \
-startculoare startdescription startdocument startenumeration startfact startfigure \
-startfloattext startformula startframedtext startfundal starthiding startimpachetat \
-startitemgroup startlegend startline startlinecorrection startlinenumbering startlines \
-startliniemargine startlocal startlocalenvironment startlocalfootnotes startmakeup startmarginblock \
-startmediu startmeniuinteractiune startnamemakeup startnarrower startopposite startoverlay \
-startoverview startparagraph startpositioning startpostponing startprodus startprofile \
-startproiect startregister startriglatext startsymbolset startsynchronization starttable \
-starttables starttabulate starttyping startunpacked startversiune stivacampuri \
-stopalignment stopbuffer stopbuffer stopcitat stopcolumns stopcombination \
-stopcomentariu stopcomponenta stopculoare stopdescription stopdocument stopenumeration \
-stopfact stopfigure stopfloattext stopformula stopframedtext stopfundal \
-stophiding stopimpachetat stopitemgroup stoplegend stopline stoplinecorrection \
-stoplinenumbering stoplines stopliniemargine stoplocal stoplocalenvironment stoplocalfootnotes \
-stopmakeup stopmarginblock stopmediu stopmeniuinteractiune stopnamemakeup stopnarrower \
-stopopposite stopoverlay stopoverview stopparagraph stoppositioning stoppostponing \
-stopprodus stopprofile stopproiect stopriglatext stopsymbolset stopsynchronization \
-stoptable stoptables stoptabulate stoptyping stopunpacked stopversiune \
-sub subject sublinie sublinii subsection subsubject \
-subsubsection subsubsubject supralinie synonym tab tex \
-texteticheta textmarginal texttitlu textumplere tippagina title \
-titlu tooltip traduce trecilafonttext typ type \
-typefile undeva urmeazaprofil urmeazaversiune urmeazaversiuneprofil usedirectory \
-usetypescript usetypescriptfile versiune vl zidinsaptamana \ No newline at end of file
+keywordclass.macros.context.ro=CAP CUVANT CUVINTE Cap Caps Cuvant Cuvinte LUNA Litera Litere Numereromane ZIDINSAPTAMANA adapteazaaspect adubuffer adumarcaje afiseazaaspect afiseazacampuri afiseazaculoare afiseazafiguriexterne afiseazafonttext afiseazagrid afiseazagrupculoare afiseazamakeup afiseazamediufonttext afiseazapaleta afiseazarama afiseazasetari afiseazasetsimboluri afiseazastruts afiseazatiparire aliniat aliniatcentru aliniatdreapta aliniatstanga appendix ascundeblocuri barainteractiune barasincronizare blanc but butoaneinteractiune buton camp campumplere cap chapter chem citat clip cloneazacamp coloana comentariu comparagrupculoare comparapaleta completecombinedlist completelistoffloats completelistofsorts completelistofsynonyms completeregister convertestenumar copiazacamp corecteazaspatiualb coupledregister crlf culoare culoaregri cupleazadocument cupleazamarcaje cupleazaregistru cuvantdreapta data datacurenta datareferit decupleazamarcaje definebodyfontDEF definebodyfontREF definedfont definefontfeature definefonthandling defineste definestealiat definesteantet definesteblanc definestebloc definesteblocsectiune definestebuffer definestecamp definesteconversie definesteculoare definestedescriere definestedimensiunehartie definesteenumerare definesteeticheta definestefloat definestefont definestefonttext definesteformatreferinte definestegrupculori definesteinconjurare definestelista definestelistacombinata definestelistareferinte definestelogo definestemakeup definestemarcaje definestemediulfonttext definestemeniuinteractiune definestemeniuinteractiune definesteoutput definesteoverlay definestepaleta definesteparagraf definesteprofil definesteprogram definestereferinte definesteregistru definestesablontabel definestesectiune definestesimbol definestesimbolfigura definestesinonim definestesinonimfont definestesortare definestestartstop definestestivacampuri definestesubcamp definestetabulatori definestetext definestetexteinconjurate definestetextinconjurat definestetyping definesteversiune definetype definetypeface description despre determinacaracteristicilelistei determinanumartitlu dezactiveazameniuinteractiune din dute dutebox ecran el element element emptylines enumeration etichete faraaliniat farafisiere faraliniiantetsisubsol faraliniisussijos faralista faramarcaje faraspatiu faraspatiualb figuraexterna firdepar folosesteURL folosestebloc folosestecodificarea folosestecomenzi folosestedocumentextern folosestefiguraexterna folosestefisiereexterne folosestefisierextern folosestemodul folosestemuzicaexterna folosestereferinte folosestesimboluri folosestespeciale footnotetext forteazablocuri fractie framed framedtext fundal gatablocuri grid hartiedubla hl impachetat impartefloat in inalt inaltamargine indentation indreapta inframed ininner injos inlinie inouter instalarelimba instanga intins jos jossus la labeling lapagina limba limbaprincipala liniemargine linieneagra liniesubtire linieumplere liniinegre liniisubtiri listsymbol litera litere loadsorts loadsynonyms logcampuri luna mapfontsize mar marcaje marcheazaversiune marginal matematica mediaeval minicitat mutapegrid name nextsection nocap nop nota notasubsol numartitlu numartitlucurent numere numereromane olinie overbar overbars overstrike overstrikes pagina paginadubla paragraph part pastreazablocuri placefloat placelistoffloats placelistofsorts placelistofsynonyms placereferencelist plaseazapegrid plaseazasemnecarte potrivestecamp pozitie proceseazabloc proceseazapagina program publicatie puncte punedeasuprafiecareia punefatainfata puneformula punelegenda punelista punelistacombinata punelistacombinata punelogouri punenotesubsol punenotesubsollocale puneregistru puneregistru punesubformula ran ref referinta referintapagina referintatext referit reflexie register reservefloat reset reseteazamarcaje resettextcontent riglatext rigleumplere roteste saripesteblocuri scala scriebuffer scrieinlista scrieinlistareferinte scrieinregistru scrieintreliste section seeregister selecteazablocuri selecteazahartie selecteazaversiune semncarte setarebarasincronizare setarelimba setareoutput setarepozitie setaresincronizare seteazaaliniat seteazaaliniate seteazaalinierea seteazaantet seteazaaranjareapag seteazaaspect seteazabarainteractiune seteazablanc seteazabloc seteazablocsectiune seteazablocurimarginale seteazabuffer seteazabutoane seteazacamp seteazacampuri seteazaclipping seteazacoloane seteazacombinari seteazacomentariu seteazaculoare seteazaculori seteazadefinireanotasubsol seteazadescriere seteazadimensiunihartie seteazaecrane seteazaecraninteractiune seteazaelemente seteazaenumerare seteazafiguriexterne seteazafloat seteazafloats seteazafonttext seteazaformulare seteazaformule seteazafundal seteazafundaluri seteazagrosimelinie seteazaimpartireafloat seteazainconjurat seteazaingust seteazainteractiunea seteazajos seteazalegenda seteazalegenda seteazalegendele seteazaliniesilabe seteazaliniesubtire seteazalinii seteazaliniimargine seteazaliniinegre seteazaliniiumplere seteazalista seteazalistacombinata seteazalistareferinte seteazamajuscule seteazamakeup seteazamarcaje seteazamarginal seteazamediulfonttext seteazameniuinteractiune seteazaminicitat seteazanotasubsol seteazanumarpagina seteazanumarsubpagina seteazanumartitlu seteazanumerotare seteazanumerotarelinii seteazanumerotarepagina seteazanumerotareparagrafe seteazapaleta seteazaparagrafe seteazaplasareaopozita seteazaprofile seteazaprograme seteazapublicatii seteazareferinte seteazaregistru seteazarigletext seteazarigleumplere seteazarotare seteazasectiune seteazasimbol seteazasinonime seteazasistem seteazasortare seteazaspatiu seteazaspatiualb seteazaspatiuinterliniar seteazastrut seteazasublinie seteazasubsol seteazasus seteazatab seteazatabele seteazatabulatori seteazatext seteazatexteantet seteazatextejos seteazatextesubsol seteazatextesus seteazatextetext seteazatexteticheta seteazatexttitlu seteazatitlu seteazatitluri seteazatoleranta seteazatranzitiepagina seteazatype seteazatyping seteazaurl seteazaversiuni settextcontent setupfonthandling setupfontsynonym setupinterlinespace2 setupitemgroup setuplistalternative setuppaper sim simbol sincronizeaza sort spatiifixate spatiu spatiualb startalignment startbuffer startbuffer startcitat startcolumns startcombination startcomentariu startcomponenta startculoare startdescription startdocument startenumeration startfact startfigure startfloattext startformula startframedtext startfundal starthiding startimpachetat startitemgroup startlegend startline startlinecorrection startlinenumbering startlines startliniemargine startlocal startlocalenvironment startlocalfootnotes startmakeup startmarginblock startmediu startmeniuinteractiune startnamemakeup startnarrower startopposite startoverlay startoverview startparagraph startpositioning startpostponing startprodus startprofile startproiect startregister startriglatext startsymbolset startsynchronization starttable starttables starttabulate starttyping startunpacked startversiune stivacampuri stopalignment stopbuffer stopbuffer stopcitat stopcolumns stopcombination stopcomentariu stopcomponenta stopculoare stopdescription stopdocument stopenumeration stopfact stopfigure stopfloattext stopformula stopframedtext stopfundal stophiding stopimpachetat stopitemgroup stoplegend stopline stoplinecorrection stoplinenumbering stoplines stopliniemargine stoplocal stoplocalenvironment stoplocalfootnotes stopmakeup stopmarginblock stopmediu stopmeniuinteractiune stopnamemakeup stopnarrower stopopposite stopoverlay stopoverview stopparagraph stoppositioning stoppostponing stopprodus stopprofile stopproiect stopriglatext stopsymbolset stopsynchronization stoptable stoptables stoptabulate stoptyping stopunpacked stopversiune sub subject subsection subsubject subsubsection subsubsubject synonym tab tex texteticheta textmarginal texttitlu textumplere tippagina title titlu tooltip traduce trecilafonttext typ type typefile underbar underbars undeva urmeazaprofil urmeazaversiune urmeazaversiuneprofil usedirectory usetypescript usetypescriptfile versiune vl zidinsaptamana \ No newline at end of file
diff --git a/Master/texmf-dist/context/data/scite/context.properties b/Master/texmf-dist/context/data/scite/context.properties
index cd1e8b36723..13fa079c02e 100644
--- a/Master/texmf-dist/context/data/scite/context.properties
+++ b/Master/texmf-dist/context/data/scite/context.properties
@@ -27,6 +27,14 @@
# if PLAT_WIN
# find.command=fgrep -G -n $(find.what) $(find.files)
+# Just UTF-8
+
+code.page=65001
+output.code.page=65001
+
+textwrapper.margin=4
+textwrapper.length=68
+
# ConTeXt: suffixes (really needed)
file.patterns.tex=
@@ -47,12 +55,22 @@ import latex-scite
# Example : patterns
file.patterns.xml=
-file.patterns.example=*.xml;*.xsl;*.xsd;*.fo;*.exa;*.rlb;*.rlg;*.rlv;*.rng;*.xfdf;*.xslt;*.dtd;*.lmx
+file.patterns.example=*.xml;*.xsl;*.xsd;*.fo;*.exa;*.rlb;*.rlg;*.rlv;*.rng;*.xfdf;*.xslt;*.dtd;*.lmx;*.ctx
filter.example=eXaMpLe|$(file.patterns.example)|
lexer.$(file.patterns.example)=xml
+# Lua : patterns
+
+file.patterns.lua=*.lua;*.luc;*.cld;*.tuc;*.luj
+
+filter.lua=Lua MkIV|$(file.patterns.lua)|
+lexer.$(file.patterns.lua)=lua
+
+command.compile.$(file.patterns.lua)=mtxrun --script "$(FileNameExt)"
+command.go.$(file.patterns.lua)=mtxrun --script "$(FileNameExt)"
+
# Commands: some scripts
if PLAT_WIN
@@ -76,7 +94,7 @@ name.metafun.console=$(name.context.console)
name.example.console=$(name.context.console)
if PLAT_WIN
- name.context.mtxrun=mtxrun.cmd --autogenerate
+ name.context.mtxrun=mtxrun --autogenerate
if PLAT_GTK
name.context.mtxrun=mtxrun --autogenerate
@@ -94,13 +112,10 @@ name.example.xmlcheck=tidy -quiet -utf8 -xml -errors
name.metafun.mptopdf=$(name.context.mtxrun) --script mptopdf
-# wwwserver --start --port=8061 --url=http://localhost:8061 --forcetemp --direct
-# wwwserver.rb --direct
-
# if needed one can set MTX_SERVER_ROOT to the root of the documentation
if PLAT_WIN
- name.context.wwwserver=cmd /c start /min "Context Documentation" $(name.context.mtxrun) --script server --start
+ name.context.wwwserver=cmd /c start /min "Context Documentation" $(name.context.mtxrun) --script server --auto
if PLAT_GTK
name.context.wwwserver=$(name.context.mtxrun) --script server --start > ~/context-wwwserver.log &
diff --git a/Master/texmf-dist/scripts/context/lua/scite-ctx.lua b/Master/texmf-dist/context/data/scite/scite-ctx.lua
index 1b832928909..8e6b6ebab74 100644
--- a/Master/texmf-dist/scripts/context/lua/scite-ctx.lua
+++ b/Master/texmf-dist/context/data/scite/scite-ctx.lua
@@ -68,6 +68,11 @@
-- generic functions
+props = props or { } -- setmetatable(props,{ __index = function(k,v) props[k] = "unknown" return "unknown" end } )
+
+local byte, lower, upper, gsub, sub, find, rep, match, gmatch = string.byte, string.lower, string.upper, string.gsub, string.sub, string.find, string.rep, string.match, string.gmatch
+local sort, concat = table.sort, table.concat
+
local crlf = "\n"
function traceln(str)
@@ -75,26 +80,6 @@ function traceln(str)
io.flush()
end
-function table.found(tab, str)
- local l, r, p
- if #str == 0 then
- return false
- else
- l, r = 1, #tab
- while l <= r do
- p = math.floor((l+r)/2)
- if str < tab[p] then
- r = p - 1
- elseif str > tab[p] then
- l = p + 1
- else
- return true
- end
- end
- return false
- end
-end
-
function string:grab(delimiter)
local list = {}
for snippet in self:gmatch(delimiter) do
@@ -103,10 +88,6 @@ function string:grab(delimiter)
return list
end
-function string:is_empty()
- return not self:find("%S")
-end
-
function string:expand()
return (self:gsub("ENV%((%w+)%)", os.envvar))
end
@@ -115,24 +96,18 @@ function string:strip()
return (self:gsub("^%s*(.-)%s*$", "%1"))
end
-do
-
- local lower, gsub, sub = string.lower, string.gsub, string.sub
-
- function table.alphasort(list,i)
- if i and i > 0 then
- local function alphacmp(a,b)
- return lower(gsub(sub(a,i),'0',' ')) < lower(gsub(sub(b,i),'0',' '))
- end
- table.sort(list,alphacmp)
- else
- local function alphacmp(a,b)
- return a:lower() < b:lower()
- end
- table.sort(list,alphacmp)
+function table.alphasort(list,i)
+ if i and i > 0 then
+ local function alphacmp(a,b)
+ return lower(gsub(sub(a,i),'0',' ')) < lower(gsub(sub(b,i),'0',' '))
end
+ sort(list,alphacmp)
+ else
+ local function alphacmp(a,b)
+ return lower(a) < lower(b)
+ end
+ sort(list,alphacmp)
end
-
end
function io.exists(filename)
@@ -150,11 +125,11 @@ function os.envvar(str)
if s ~= '' then
return s
end
- s = os.getenv(str:upper())
+ s = os.getenv(upper(str))
if s ~= '' then
return s
end
- s = os.getenv(str:lower())
+ s = os.getenv(lower(str))
if s ~= '' then
return s
end
@@ -217,9 +192,9 @@ function getfiletype()
return 'tex'
elseif editor.Lexer == SCLEX_XML then
return 'xml'
- elseif firstline:find("^%%") then
+ elseif find(firstline,"^%%") then
return 'tex'
- elseif firstline:find("^<%?xml") then
+ elseif find(firstline,"^<%?xml") then
return 'xml'
else
return 'unknown'
@@ -233,7 +208,7 @@ function get_dir_list(mask)
if props['PLAT_GTK'] and props['PLAT_GTK'] ~= "" then
f = io.popen('ls -1 ' .. mask)
else
- mask = mask:gsub('/','\\')
+ mask = gsub(mask,'/','\\')
local tmpfile = 'scite-ctx.tmp'
local cmd = 'dir /b "' .. mask .. '" > ' .. tmpfile
os.execute(cmd)
@@ -257,7 +232,7 @@ do
print("loading scite-ctx.lua definition file\n")
print("- see scite-ctx.properties for configuring info\n")
print("- ctx.spellcheck.wordpath set to " .. props['ctx.spellcheck.wordpath'])
- if (props['ctx.spellcheck.wordpath']:lower()):find("ctxspellpath") then
+ if find(lower(props['ctx.spellcheck.wordpath']),"ctxspellpath") then
if os.getenv('ctxspellpath') then
print("- ctxspellpath set to " .. os.getenv('CTXSPELLPATH'))
else
@@ -268,7 +243,7 @@ do
print("\n- ctx.wraptext.length is set to " .. props['ctx.wraptext.length'])
if props['ctx.helpinfo'] ~= '' then
print("\n- key bindings:\n")
- print(((string.strip(props['ctx.helpinfo'])):gsub("%s*\|%s*","\n")))
+ print((gsub(string.strip(props['ctx.helpinfo']),"%s*\|%s*","\n")))
end
print("\n- recognized first lines:\n")
print("xml <?xml version='1.0' language='nl'")
@@ -280,7 +255,7 @@ end
-- written while listening to Talk Talk
-local magicstring = string.rep("<ctx-crlf/>", 2)
+local magicstring = rep("<ctx-crlf/>", 2)
function wrap_text()
@@ -315,14 +290,14 @@ function wrap_text()
local replacement = { }
local templine = ''
- local indentation = string.rep(' ',startcolumn)
+ local indentation = rep(' ',startcolumn)
local selection = editor:GetSelText()
- selection = selection:gsub("[\n\r][\n\r]","\n")
- selection = selection:gsub("\n\n+",' ' .. magicstring .. ' ')
- selection = selection:gsub("^%s",'')
+ selection = gsub(selection,"[\n\r][\n\r]","\n")
+ selection = gsub(selection,"\n\n+",' ' .. magicstring .. ' ')
+ selection = gsub(selection,"^%s",'')
- for snippet in selection:gmatch("%S+") do
+ for snippet in gmatch(selection,"%S+") do
if snippet == magicstring then
replacement[#replacement+1] = templine
replacement[#replacement+1] = ""
@@ -338,13 +313,13 @@ function wrap_text()
end
replacement[#replacement+1] = templine
- replacement[1] = replacement[1]:gsub("^%s+",'')
+ replacement[1] = gsub(replacement[1],"^%s+",'')
if endcolumn == 0 then
replacement[#replacement+1] = ""
end
- editor:ReplaceSel(table.concat(replacement,"\n"))
+ editor:ReplaceSel(concat(replacement,"\n"))
end
@@ -361,11 +336,11 @@ function unwrap_text()
startposition = editor.SelectionStart
endposition = editor.SelectionEnd
- local magicstring = string.rep("<multiplelines/>", 2)
- local selection = string.gsub(editor:GetSelText(),"[\n\r][\n\r]+", ' ' .. magicstring .. ' ')
+ local magicstring = rep("<multiplelines/>", 2)
+ local selection = gsub(editor:GetSelText(),"[\n\r][\n\r]+", ' ' .. magicstring .. ' ')
local replacement = ''
- for snippet in selection:gmatch("%S+") do
+ for snippet in gmatch(selection,"%S+") do
if snippet == magicstring then
replacement = replacement .. "\n"
else
@@ -399,11 +374,11 @@ function sort_text()
startposition = extend_to_start()
endposition = extend_to_end()
- local selection = string.gsub(editor:GetSelText(), "%s*$", '')
+ local selection = gsub(editor:GetSelText(), "%s*$", '')
list = string.grab(selection,"[^\n\r]+")
table.alphasort(list, startcolumn)
- local replacement = table.concat(list, "\n")
+ local replacement = concat(list, "\n")
editor:GotoPos(startposition)
editor:SetSel(startposition,endposition)
@@ -414,6 +389,26 @@ function sort_text()
end
+function uncomment_xml()
+
+ local startposition = editor.SelectionStart
+ local endposition = editor.SelectionEnd
+
+ if startposition == endposition then return end
+
+ local startposition = editor.SelectionStart
+ local endposition = editor.SelectionEnd
+
+ local selection = gsub(editor:GetSelText(), "%<%!%-%-.-%-%-%>", '')
+
+ editor:GotoPos(startposition)
+ editor:SetSel(startposition,endposition)
+
+ editor:ReplaceSel(selection)
+ editor:GotoPos(startposition)
+
+end
+
function document_text()
local startposition = editor.SelectionStart
@@ -432,25 +427,25 @@ function document_text()
for i = editor:LineFromPosition(startposition), editor:LineFromPosition(endposition) do
local str = editor:GetLine(i)
if filetype == 'xml' then
- if str:find("^<%!%-%- .* %-%->%s*$") then
- replacement = replacement .. str:gsub("^<%!%-%- (.*) %-%->(%s*)$","%1\n")
- elseif not str:is_empty() then
- replacement = replacement .. '<!-- ' .. str:gsub("(%s*)$",'') .. " -->\n"
+ if find(str,"^<%!%-%- .* %-%->%s*$") then
+ replacement = replacement .. gsub(str,"^<%!%-%- (.*) %-%->(%s*)$","%1\n")
+ elseif find(str,"%S") then
+ replacement = replacement .. '<!-- ' .. gsub(str,"(%s*)$",'') .. " -->\n"
else
replacement = replacement .. str
end
else
- if str:find("^%%D%s+$") then
+ if find(str,"^%%D%s+$") then
replacement = replacement .. "\n"
- elseif str:find("^%%D ") then
- replacement = replacement .. str:gsub("^%%D ",'')
+ elseif find(str,"^%%D ") then
+ replacement = replacement .. gsub(str,"^%%D ",'')
else
replacement = replacement .. '%D ' .. str
end
end
end
- editor:ReplaceSel(replacement:gsub("[\n\r]$",''))
+ editor:ReplaceSel(gsub(replacement,"[\n\r]$",''))
end
@@ -467,10 +462,10 @@ function quote_text()
end
local replacement = editor:GetSelText()
- replacement = replacement.gsub("\`\`(.-)\'\'", leftquotation .. "%1" .. rightquotation)
- replacement = replacement.gsub("\"(.-)\"", leftquotation .. "%1" .. rightquotation)
- replacement = replacement.gsub("\`(.-)\'", leftquote .. "%1" .. rightquote )
- replacement = replacement.gsub("\'(.-)\'", leftquote .. "%1" .. rightquote )
+ replacement = gsub(replacement,"\`\`(.-)\'\'", leftquotation .. "%1" .. rightquotation)
+ replacement = gsub(replacement,"\"(.-)\"", leftquotation .. "%1" .. rightquotation)
+ replacement = gsub(replacement,"\`(.-)\'", leftquote .. "%1" .. rightquote )
+ replacement = gsub(replacement,"\'(.-)\'", leftquote .. "%1" .. rightquote )
editor:ReplaceSel(replacement)
end
@@ -480,9 +475,9 @@ function compound_text()
local filetype = getfiletype()
if filetype == 'xml' then
- editor:ReplaceSel(string.gsub(editor:GetSelText(),"(>[^<%-][^<%-]+)([-\/])(%w%w+)","%1<compound token='%2'/>%3"))
+ editor:ReplaceSel(gsub(editor:GetSelText(),"(>[^<%-][^<%-]+)([-\/])(%w%w+)","%1<compound token='%2'/>%3"))
else
- editor:ReplaceSel(string.gsub(editor:GetSelText(),"([^\|])([-\/]+)([^\|])","%1|%2|%3"))
+ editor:ReplaceSel(gsub(editor:GetSelText(),"([^\|])([-\/]+)([^\|])","%1|%2|%3"))
end
end
@@ -517,7 +512,7 @@ local worddone = 0
-- local command = "kpsewhich" .. progflag .. typeflag .. " " .. filename .. " > " .. tempname
-- os.execute(command)
-- for line in io.lines(tempname) do
--- return string.gsub(line, "\s*$", '')
+-- return gsub(line, "\s*$", '')
-- end
-- end
@@ -543,9 +538,9 @@ function check_text()
if props["ctx.spellcheck.language"] == 'auto' then
if filetype == 'tex' then
-- % version =1.0 language=uk
- firstline = firstline:gsub("^%%%s*",'')
- firstline = firstline:gsub("%s*$",'')
- for key, val in firstline:gmatch("(%w+)=(%w+)") do
+ firstline = gsub(firstline,"^%%%s*",'')
+ firstline = gsub(firstline,"%s*$",'')
+ for key, val in gmatch(firstline,"(%w+)=(%w+)") do
if key == "language" then
language = val
traceln("auto document language " .. "'" .. language .. "' (tex)")
@@ -554,9 +549,9 @@ function check_text()
skipfirst = true
elseif filetype == 'xml' then
-- <?xml version='1.0' language='uk' ?>
- firstline = firstline:gsub("^%<%?xml%s*", '')
- firstline = firstline:gsub("%s*%?%>%s*$", '')
- for key, val in firstline:gmatch("(%w+)=[\"\'](.-)[\"\']") do
+ firstline = gsub(firstline,"^%<%?xml%s*", '')
+ firstline = gsub(firstline,"%s*%?%>%s*$", '')
+ for key, val in gmatch(firstline,"(%w+)=[\"\'](.-)[\"\']") do
if key == "language" then
language = val
traceln("auto document language " .. "'" .. language .. "' (xml)")
@@ -573,15 +568,15 @@ function check_text()
if fname ~= '' and fname ~= wordfile then
wordfile, worddone, wordlist = fname, 0, {}
- for filename in wordfile:gmatch("[^%,]+") do
+ for filename in gmatch(wordfile,"[^%,]+") do
if wordpath ~= '' then
filename = string.expand(wordpath) .. '/' .. filename
end
if io.exists(filename) then
traceln("loading " .. filename)
for line in io.lines(filename) do
- if not line:find("^[\%\#\-]") then
- str = line:gsub("%s*$", '')
+ if not find(line,"^[\%\#\-]") then
+ str = gsub(line,"%s*$", '')
rawset(wordlist,str,true)
worddone = worddone + 1
end
@@ -612,7 +607,7 @@ function check_text()
elseif ch == wordskip then
skip = true
end
- if ch:find("%w") and not ch:find("%d") then
+ if find(ch,"%w") and not find(ch,"%d") then
if not skip then
if ok then
endpos = k
@@ -627,7 +622,7 @@ function check_text()
if len >= wordsize then
snippet = editor:textrange(startpos,endpos+1)
i = i + 1
- if wordlist[snippet] or wordlist[snippet:lower()] then -- table.found(wordlist,snippet)
+ if wordlist[snippet] or wordlist[lower(snippet)] then
j = j + 1
else
editor:StartStyling(startpos,INDICS_MASK)
@@ -660,19 +655,19 @@ function UserListShow(menutrigger, menulist)
menuactions = {}
for i=1, #list do
if list[i] ~= '' then
- for key, val in list[i]:gmatch("%s*(.+)=(.+)%s*") do
+ for key, val in gmatch(list[i],"%s*(.+)=(.+)%s*") do
menuentries[#menuentries+1] = key
menuactions[key] = val
end
end
end
- local menustring = table.concat(menuentries,'|')
+ local menustring = concat(menuentries,'|')
if menustring == "" then
traceln("There are no templates defined for this file type.")
else
- editor.AutoCSeparator = string.byte('|')
+ editor.AutoCSeparator = byte('|')
editor:UserListShow(menutrigger,menustring)
- editor.AutoCSeparator = string.byte(' ')
+ editor.AutoCSeparator = byte(' ')
end
end
@@ -693,7 +688,7 @@ function show_menu(menulist)
end
function process_menu(action)
- if not action:find("%(%)$") then
+ if not find(action,"%(%)$") then
assert(loadstring(action .. "()"))()
else
assert(loadstring(action))()
@@ -731,7 +726,7 @@ function insert_template(templatelist)
if not ctx_path_done[path] or rescan then
local pattern = "*.*"
for i, pathname in ipairs(ctx_template_paths) do
- print("scanning " .. path:gsub("\\","/") .. "/" .. pathname)
+ print("scanning " .. gsub(path,"\\","/") .. "/" .. pathname)
ctx_path_name[path] = pathname
ctx_path_list[path] = get_dir_list(pathname .. "/" .. pattern)
if ctx_list_loaded(path) then
@@ -750,9 +745,9 @@ function insert_template(templatelist)
local pattern = "%." .. suffix .. "$"
local n = 0
for j, filename in ipairs(ctx_path_list[path]) do
- if filename:find(pattern) then
+ if find(filename,pattern) then
n = n + 1
- local menuname = filename:gsub("%..-$","")
+ local menuname = gsub(filename,"%..-$","")
if ctx_template_list ~= "" then
ctx_template_list = ctx_template_list .. "|"
end
@@ -789,7 +784,7 @@ function process_template_one(action)
if ctx_auto_templates then
local f = io.open(action,"r")
if f then
- text = string.gsub(f:read("*all"),"\n$","")
+ text = gsub(f:read("*all"),"\n$","")
f:close()
else
print("unable to auto load template file " .. text)
@@ -806,7 +801,7 @@ function process_template_one(action)
else
local f = io.open(text,"r")
if f then
- text = string.gsub(f:read("*all"),"\n$","")
+ text = gsub(f:read("*all"),"\n$","")
f:close()
else
print("unable to load template file " .. text)
@@ -815,9 +810,9 @@ function process_template_one(action)
end
end
if text then
- text = text:gsub("\\n","\n")
- local pos = text:find("%?")
- text = text:gsub("%?","")
+ text = gsub(text,"\\n","\n")
+ local pos = find(text,"%?")
+ text = gsub(text,"%?","")
editor:insert(editor.CurrentPos,text)
if pos then
editor.CurrentPos = editor.CurrentPos + pos - 1
diff --git a/Master/texmf-dist/context/data/scite/scite-ctx.properties b/Master/texmf-dist/context/data/scite/scite-ctx.properties
index 94a51aeb739..f23508acab4 100644
--- a/Master/texmf-dist/context/data/scite/scite-ctx.properties
+++ b/Master/texmf-dist/context/data/scite/scite-ctx.properties
@@ -12,7 +12,8 @@
# <?xml version='1.0' language='uk' ?>
ext.lua.auto.reload=1
-ext.lua.startup.script=$(SciteDefaultHome)/scite-ctx.lua
+#~ ext.lua.startup.script=$(SciteDefaultHome)/scite-ctx.lua
+ext.lua.startup.script=$(SciteUserHome)/scite-ctx.lua
#~ extension.$(file.patterns.context)=scite-ctx.lua
#~ extension.$(file.patterns.example)=scite-ctx.lua
diff --git a/Master/texmf-dist/context/data/scite/scite-ctx.readme b/Master/texmf-dist/context/data/scite/scite-ctx.readme
index f796e543eb9..c5f5977a669 100644
--- a/Master/texmf-dist/context/data/scite/scite-ctx.readme
+++ b/Master/texmf-dist/context/data/scite/scite-ctx.readme
@@ -1,8 +1,19 @@
-Short note:
-
-- use scite 1.64 of later
-- copy scite-ctx.lua to ..\scite\wscite
-- copy scite-ctx.properties to wherever context.properties lives
-- add "import" to context.properties
-- create path for spell files and put spell files there
-- let environment variable CTXSPELLPATH to spell path
+installation:
+
+-- download scite and install it (take the normal scite, not one that ships with ruby)
+-- copy the texmf-context\context\data\scite\*.properties to c:\users\<youraccount>
+-- copy the texmf-context\context\data\scite\*.lua to the place where scite has its own support files (wscite)
+-- add the line "import context" to your user properties file (entry under menu Options)
+
+running context:
+
+-- add texmf-mswin\bin to your path
+
+or
+
+-- start scite from a cmd that also calls setuptex
+
+spellchecking:
+
+-- create a path for spell files and put spell files there (these are files with just words)
+-- set the environment variable CTXSPELLPATH to this path
diff --git a/Master/texmf-dist/context/data/textadept/context.lua b/Master/texmf-dist/context/data/textadept/context.lua
new file mode 100644
index 00000000000..f386eb87d13
--- /dev/null
+++ b/Master/texmf-dist/context/data/textadept/context.lua
@@ -0,0 +1,710 @@
+--[[
+ Preliminary ConTeXT lexer
+
+ % ConTeXt
+ tex context
+ mkii context
+ mkiv context
+
+ experiment dd 2009/10/28 .. todo:
+
+ -- figure out if tabs instead of splits are possible
+ -- locate an option to enter name in file dialogue (like windows permits)
+ -- nesting of lua somehow does not re-lex while typing (backtrack till begin_...)
+ -- find trick to overload latex lexer (mime_types, metatype trickery)
+ -- convert scite lua scripts to textadept
+ -- check linux and osx versions
+ -- figure out why loading a file fails (lfs too)
+
+ so, this is just an experiment
+
+]]--
+
+local textadept = _G.textadept
+
+module(..., package.seeall)
+
+local context = context
+local lua = require 'lua'
+
+local P, R, S, V = lpeg.P, lpeg.R, lpeg.S, lpeg.V
+
+--~ local some_words = { "starttext", "stoptext", "writestatus" }
+
+local some_words = {
+ "CAP",
+ "Cap",
+ "Caps",
+ "Character",
+ "Characters",
+ "MONTH",
+ "Romannumerals",
+ "WEEKDAY",
+ "WORD",
+ "WORDS",
+ "Word",
+ "Words",
+ "about",
+ "adaptlayout",
+ "adding",
+ "appendix",
+ "arg",
+ "at",
+ "atpage",
+ "background",
+ "blackrule",
+ "blackrules",
+ "blank",
+ "bookmark",
+ "but",
+ "button",
+ "bypassblocks",
+ "cap",
+ "chapter",
+ "character",
+ "characters",
+ "chem",
+ "clip",
+ "clonefield",
+ "color",
+ "column",
+ "comment",
+ "comparecolorgroup",
+ "comparepalet",
+ "completecombinedlist",
+ "completelistoffloats",
+ "completelistofsorts",
+ "completelistofsynonyms",
+ "completeregister",
+ "convertnumber",
+ "copyfield",
+ "correctwhitespace",
+ "coupledocument",
+ "coupledregister",
+ "couplemarking",
+ "couplepage",
+ "couplepaper",
+ "coupleregister",
+ "crlf",
+ "currentdate",
+ "currentheadnumber",
+ "date",
+ "decouplemarking",
+ "define",
+ "defineblank",
+ "defineblock",
+ "definebodyfont",
+ "definebodyfontenvironment",
+ "definebuffer",
+ "definecolor",
+ "definecolorgroup",
+ "definecombinedlist",
+ "defineconversion",
+ "definedescription",
+ "defineenumeration",
+ "definefield",
+ "definefieldstack",
+ "definefiguresymbol",
+ "definefloat",
+ "definefont",
+ "defineframed",
+ "defineframedtext",
+ "definehead",
+ "defineindenting",
+ "defineinteractionmenu",
+ "defineinteractionmenu",
+ "definelabel",
+ "definelist",
+ "definelogo",
+ "definemakeup",
+ "definemarking",
+ "defineoutput",
+ "defineoverlay",
+ "definepalet",
+ "definepapersize",
+ "defineparagraphs",
+ "defineprofile",
+ "defineprogram",
+ "definerawfont",
+ "definereference",
+ "definereferenceformat",
+ "definereferencelist",
+ "defineregister",
+ "definerule",
+ "definesection",
+ "definesectionblock",
+ "definesorting",
+ "definestartstop",
+ "definesubfield",
+ "definesymbol",
+ "definesynonyms",
+ "definetabletemplate",
+ "definetabulate",
+ "definetext",
+ "definetextposition",
+ "definetextvariable",
+ "definetype",
+ "definetyping",
+ "defineversion",
+ "description",
+ "determineheadnumber",
+ "determinelistcharacteristics",
+ "disableinteractionmenu",
+ "donttest",
+ "emptylines",
+ "enumeration",
+ "externalfigure",
+ "field",
+ "fieldstack",
+ "fillinfield",
+ "fillinline",
+ "fillinrules",
+ "fillintext",
+ "fitfield",
+ "fixedspaces",
+ "followprofile",
+ "followprofileversion",
+ "followversion",
+ "footnote",
+ "footnotetext",
+ "forceblocks",
+ "fraction",
+ "framed",
+ "framedtext",
+ "from",
+ "getbuffer",
+ "getmarking",
+ "godown",
+ "goto",
+ "gotobox",
+ "graycolor",
+ "grid",
+ "hairline",
+ "head",
+ "headnumber",
+ "headtext",
+ "hideblocks",
+ "high",
+ "hl",
+ "in",
+ "indentation",
+ "indenting",
+ "inframed",
+ "ininner",
+ "inleft",
+ "inline",
+ "inmargin",
+ "inothermargin",
+ "inouter",
+ "inright",
+ "installlanguage",
+ "interactionbar",
+ "interactionbuttons",
+ "item",
+ "items",
+ "its",
+ "keepblocks",
+ "labeling",
+ "labels",
+ "labeltext",
+ "language",
+ "leftaligned",
+ "listsymbol",
+ "loadsorts",
+ "loadsynonyms",
+ "logfields",
+ "lohi",
+ "low",
+ "mainlanguage",
+ "mar",
+ "marginrule",
+ "margintext",
+ "marking",
+ "markversion",
+ "mathematics",
+ "mediaeval",
+ "midaligned",
+ "mirror",
+ "month",
+ "moveongrid",
+ "name",
+ "nextsection",
+ "nocap",
+ "noheaderandfooterlines",
+ "noindenting",
+ "nolist",
+ "nomarking",
+ "nomoreblocks",
+ "nomorefiles",
+ "nop",
+ "nospace",
+ "note",
+ "notopandbottomlines",
+ "nowhitespace",
+ "numbers",
+ "overbar",
+ "overbars",
+ "overstrike",
+ "overstrikes",
+ "packed",
+ "page",
+ "pagereference",
+ "pagetype",
+ "paragraph",
+ "part",
+ "periods",
+ "placebookmarks",
+ "placecombinedlist",
+ "placecombinedlist",
+ "placefloat",
+ "placefootnotes",
+ "placeformula",
+ "placelegend",
+ "placelist",
+ "placelistoffloats",
+ "placelistofsorts",
+ "placelistofsynonyms",
+ "placelocalfootnotes",
+ "placelogos",
+ "placeongrid",
+ "placeontopofeachother",
+ "placereferencelist",
+ "placeregister",
+ "placeregister",
+ "placerule",
+ "placesidebyside",
+ "placesubformula",
+ "placetextvariable",
+ "position",
+ "positiontext",
+ "processblocks",
+ "processpage",
+ "program",
+ "publication",
+ "quotation",
+ "quote",
+ "ran",
+ "ref",
+ "reference",
+ "referral",
+ "referraldate",
+ "register",
+ "reservefloat",
+ "reset",
+ "resetmarking",
+ "resettextcontent",
+ "rightaligned",
+ "romannumerals",
+ "rotate",
+ "scale",
+ "screen",
+ "section",
+ "seeregister",
+ "selectblocks",
+ "selectpaper",
+ "selectversion",
+ "settextcontent",
+ "settextvariable",
+ "setupalign",
+ "setuparranging",
+ "setupbackground",
+ "setupbackgrounds",
+ "setupblackrules",
+ "setupblank",
+ "setupblock",
+ "setupbodyfont",
+ "setupbodyfontenvironment",
+ "setupbottom",
+ "setupbottomtexts",
+ "setupbuffer",
+ "setupbuttons",
+ "setupcapitals",
+ "setupcaption",
+ "setupcaptions",
+ "setupclipping",
+ "setupcolor",
+ "setupcolors",
+ "setupcolumns",
+ "setupcombinations",
+ "setupcombinedlist",
+ "setupcomment",
+ "setupdescriptions",
+ "setupenumerations",
+ "setupexternalfigures",
+ "setupfield",
+ "setupfields",
+ "setupfillinlines",
+ "setupfillinrules",
+ "setupfloat",
+ "setupfloats",
+ "setupfloatsplitting",
+ "setupfooter",
+ "setupfootertexts",
+ "setupfootnotedefinition",
+ "setupfootnotes",
+ "setupforms",
+ "setupformulae",
+ "setupframed",
+ "setupframedtexts",
+ "setuphead",
+ "setupheader",
+ "setupheadertexts",
+ "setupheadnumber",
+ "setupheads",
+ "setupheadtext",
+ "setuphyphenmark",
+ "setupindentations",
+ "setupindenting",
+ "setupinmargin",
+ "setupinteraction",
+ "setupinteractionbar",
+ "setupinteractionscreen",
+ "setupinterlinespace",
+ "setupinterlinespace",
+ "setupitemgroup",
+ "setupitems",
+ "setuplabeltext",
+ "setuplanguage",
+ "setuplayout",
+ "setuplegend",
+ "setuplinenumbering",
+ "setuplines",
+ "setuplinewidth",
+ "setuplist",
+ "setuplistalternative",
+ "setupmakeup",
+ "setupmarginblocks",
+ "setupmarginrules",
+ "setupmarking",
+ "setupnarrower",
+ "setupnumbering",
+ "setupoppositeplacing",
+ "setupoutput",
+ "setuppagenumber",
+ "setuppagenumbering",
+ "setuppagetransitions",
+ "setuppalet",
+ "setuppaper",
+ "setuppapersize",
+ "setupparagraphnumbering",
+ "setupparagraphs",
+ "setuppositioning",
+ "setupprofiles",
+ "setupprograms",
+ "setuppublications",
+ "setupquote",
+ "setupreferencelist",
+ "setupreferencing",
+ "setupregister",
+ "setuprotate",
+ "setuprule",
+ "setupscreens",
+ "setupsection",
+ "setupsectionblock",
+ "setupsorting",
+ "setupspacing",
+ "setupstrut",
+ "setupsubpagenumber",
+ "setupsymbolset",
+ "setupsynchronization",
+ "setupsynchronizationbar",
+ "setupsynonyms",
+ "setupsystem",
+ "setuptab",
+ "setuptables",
+ "setuptabulate",
+ "setuptext",
+ "setuptextposition",
+ "setuptextrules",
+ "setuptexttexts",
+ "setuptextvariable",
+ "setupthinrules",
+ "setuptolerance",
+ "setuptop",
+ "setuptoptexts",
+ "setuptype",
+ "setuptyping",
+ "setupunderbar",
+ "setupurl",
+ "setupversions",
+ "setupwhitespace",
+ "showbodyfont",
+ "showbodyfontenvironment",
+ "showcolor",
+ "showcolorgroup",
+ "showexternalfigures",
+ "showfields",
+ "showframe",
+ "showgrid",
+ "showlayout",
+ "showmakeup",
+ "showpalet",
+ "showprint",
+ "showsetups",
+ "showstruts",
+ "showsymbolset",
+ "someline",
+ "somewhere",
+ "sort",
+ "space",
+ "splitfloat",
+ "startalignment",
+ "startbackground",
+ "startbuffer",
+ "startcolor",
+ "startcolumns",
+ "startcombination",
+ "startcomment",
+ "startcomponent",
+ "startdescription",
+ "startdocument",
+ "startenumeration",
+ "startenvironment",
+ "startfact",
+ "startfigure",
+ "startfloattext",
+ "startformula",
+ "startframedtext",
+ "starthiding",
+ "startinteractionmenu",
+ "startitemgroup",
+ "startlegend",
+ "startline",
+ "startlinecorrection",
+ "startlinenumbering",
+ "startlines",
+ "startlocal",
+ "startlocalenvironment",
+ "startlocalfootnotes",
+ "startmakeup",
+ "startmarginblock",
+ "startmarginrule",
+ "startnamemakeup",
+ "startnarrower",
+ "startopposite",
+ "startoverlay",
+ "startoverview",
+ "startpacked",
+ "startparagraph",
+ "startpositioning",
+ "startpostponing",
+ "startproduct",
+ "startprofile",
+ "startproject",
+ "startquotation",
+ "startregister",
+ "startsymbolset",
+ "startsynchronization",
+ "starttable",
+ "starttables",
+ "starttabulate",
+ "starttextrule",
+ "starttyping",
+ "startunpacked",
+ "startversion",
+ "stopalignment",
+ "stopbackground",
+ "stopbuffer",
+ "stopcolor",
+ "stopcolumns",
+ "stopcombination",
+ "stopcomment",
+ "stopcomponent",
+ "stopdescription",
+ "stopdocument",
+ "stopenumeration",
+ "stopenvironment",
+ "stopfact",
+ "stopfigure",
+ "stopfloattext",
+ "stopformula",
+ "stopframedtext",
+ "stophiding",
+ "stopinteractionmenu",
+ "stopitemgroup",
+ "stoplegend",
+ "stopline",
+ "stoplinecorrection",
+ "stoplinenumbering",
+ "stoplines",
+ "stoplocal",
+ "stoplocalenvironment",
+ "stoplocalfootnotes",
+ "stopmakeup",
+ "stopmarginblock",
+ "stopmarginrule",
+ "stopnamemakeup",
+ "stopnarrower",
+ "stopopposite",
+ "stopoverlay",
+ "stopoverview",
+ "stoppacked",
+ "stopparagraph",
+ "stoppositioning",
+ "stoppostponing",
+ "stopproduct",
+ "stopprofile",
+ "stopproject",
+ "stopquotation",
+ "stopsymbolset",
+ "stopsynchronization",
+ "stoptable",
+ "stoptables",
+ "stoptabulate",
+ "stoptextrule",
+ "stoptyping",
+ "stopunpacked",
+ "stopversion",
+ "stretched",
+ "sub",
+ "subject",
+ "subsection",
+ "subsubject",
+ "subsubsection",
+ "subsubsubject",
+ "switchtobodyfont",
+ "switchtorawfont",
+ "sym",
+ "symbol",
+ "synchronizationbar",
+ "synchronize",
+ "synonym",
+ "tab",
+ "tex",
+ "textreference",
+ "textrule",
+ "textvariable",
+ "thinrule",
+ "thinrules",
+ "title",
+ "tooltip",
+ "translate",
+ "typ",
+ "type",
+ "typebuffer",
+ "typefile",
+ "underbar",
+ "underbars",
+ "useURL",
+ "useblocks",
+ "usecommands",
+ "usedirectory",
+ "useencoding",
+ "useexternaldocument",
+ "useexternalfigure",
+ "useexternalfile",
+ "useexternalfiles",
+ "useexternalsoundtrack",
+ "usemodule",
+ "usereferences",
+ "usespecials",
+ "usesymbols",
+ "version",
+ "vl",
+ "weekday",
+ "whitespace",
+ "wordright",
+ "writebetweenlist",
+ "writetolist",
+ "writetoreferencelist",
+ "writetoregister",
+}
+
+local tex_word_match = word_match(word_list(some_words))
+
+--~ local function tex_preamble_match()
+--~ return P(function(input, index)
+--~ if index < 10 then
+--~ local s, e, word = input:find('^(.+)[\n\r]',index)
+--~ if word then
+--~ local interface = word:match("interface=(..)")
+--~ if interface then
+--~ local name = "c:/data/develop/context/lua/textadept/cont-" .. interface .. "-scite.lua"
+--~ --~ local f = io.open(name,"rb") -- fails
+--~ if f then
+--~ local data = f:read("*all")
+--~ data = data and loadstring(data)
+--~ data = data and data()
+--~ if data and type(data) == "table" then
+--~ some_words = word_list(data)
+--~ context.LoadTokens()
+--~ -- InitLexer(context)
+--~ end
+--~ f:close()
+--~ end
+--~ end
+--~ end
+--~ end
+--~ return false
+--~ end)
+--~ end
+
+local spacing = token('whitespace', S(" \n\r\t\f")^1)
+--~ local preamble = token('preamble', P('%') * tex_preamble_match())
+local comment = token('comment', P('%') * (1-S("\n\r"))^0)
+local keyword = token('keyword', P('\\') * tex_word_match)
+local command = token('command', P('\\') * ((R("az","AZ")+S("@!?"))^1 + P(1)))
+local grouping = token('grouping', S("{$}"))
+local specials = token('specials', S("#()[]<>=\""))
+local extras = token('extras', S("`~%^&_-+/\'|"))
+
+-- LexByLine = true
+
+local startluacode = token("grouping", P("\\startluacode"))
+local stopluacode = token("grouping", P("\\stopluacode"))
+--~ local startctxlua = token("grouping", P("\\ctxlua") * spacing^0 * P("{"))
+--~ local stopctxlua = token("grouping", P("}"))
+
+--~ local startMPcode = token("grouping", P("\\startMPcode"))
+--~ local stopMPcode = token("grouping", P("\\stopMPcode"))
+--~ local startuseMPgraphic = token("grouping", P("\\startuseMPgraphic"))
+--~ local stopuseMPgraphic = token("grouping", P("\\stopuseMPgraphic"))
+--~ local startreusableMPgraphic = token("grouping", P("\\startreusableMPgraphic"))
+--~ local stopreusableMPgraphic = token("grouping", P("\\stopreusableMPgraphic"))
+--~ local startuniqueMPgraphic = token("grouping", P("\\startuniqueMPgraphic"))
+--~ local stopuniqueMPgraphic = token("grouping", P("\\stopuniqueMPgraphic"))
+
+function LoadTokens()
+
+ lua.LoadTokens()
+
+ add_token(context, 'whitespace', spacing)
+--~ add_token(context, 'preamble', preamble)
+ add_token(context, 'comment', comment)
+ add_token(context, 'keyword', keyword)
+ add_token(context, 'command', command)
+ add_token(context, 'grouping', grouping)
+ add_token(context, 'specials', specials)
+ add_token(context, 'extras', extras)
+ add_token(context, 'any_char', any_char)
+
+ lua.TokenPatterns.any_char = token('default', 1 - stopluacode)
+
+ make_embeddable(lua, context, startluacode, stopluacode)
+-- make_embeddable(lua, context, startctxlua, stopctxlua) -- no multiple embeddables unless more complex anychar
+ embed_language(context, lua)
+
+-- metapost.LoadTokens()
+-- metapost.TokenPatterns.any_char = token('any_char', 1 - stopMPcode - stopuseMPgraphic - stopreusableMPgraphic - stopuniqueMPgraphic)
+-- make_embeddable(metapost, context, startMPcode, stopMPcode )
+-- make_embeddable(metapost, context, startuseMPgraphic, stopuseMPgraphic )
+-- make_embeddable(metapost, context, startreusableMPgraphic, stopreusableMPgraphic)
+-- make_embeddable(metapost, context, startuniqueMPgraphic, stopuniqueMPgraphic )
+end
+
+local bold = true
+local italic = true
+
+function LoadStyles()
+ add_style('preamble', style_nothing .. { fore = colors.yellow, bold = bold })
+ add_style('comment', style_nothing .. { fore = colors.yellow, bold = bold })
+ add_style('keyword', style_nothing .. { fore = colors.green, bold = bold, italic = italic })
+ add_style('command', style_nothing .. { fore = colors.green, bold = bold })
+ add_style('grouping', style_nothing .. { fore = colors.red, bold = bold })
+ add_style('specials', style_nothing .. { fore = colors.blue, bold = bold })
+ add_style('extras', style_nothing .. { fore = colors.yellow, bold = bold })
+end
+
+--~ textadept.mime_types.extensions["tex"] = context
+--~ textadept.mime_types.extensions["mkii"] = context
+--~ textadept.mime_types.extensions["mkiv"] = context
diff --git a/Master/texmf-dist/context/data/texworks/TUG/TeXworks.ini b/Master/texmf-dist/context/data/texworks/TUG/TeXworks.ini
new file mode 100644
index 00000000000..8c0a4a43df3
--- /dev/null
+++ b/Master/texmf-dist/context/data/texworks/TUG/TeXworks.ini
@@ -0,0 +1,18 @@
+[General]
+launchOption=1
+locale=en
+syntaxColoring=ConTeXt TeX
+autoIndent=None
+wrapLines=false
+tabWidth=32
+font="Lucida Console,10,-1,5,50,0,0,0,0,0"
+language=None
+scaleOption=1
+previewScale=200
+magnifierSize=2
+circularMagnifier=true
+defaultEngine=ConTeXt MkIV
+binaryPaths=
+autoHideConsole=false
+openDialogDir=
+recentFileList=
diff --git a/Master/texmf-dist/context/data/texworks/TUG/texworks.ini b/Master/texmf-dist/context/data/texworks/TUG/texworks.ini
deleted file mode 100644
index 8ef43433ed1..00000000000
--- a/Master/texmf-dist/context/data/texworks/TUG/texworks.ini
+++ /dev/null
@@ -1,45 +0,0 @@
-[General]
-launchOption=1
-locale=en
-syntaxColoring=ConTeXt TeX
-autoIndent=None
-wrapLines=false
-tabWidth=32
-font="Lucida Console,10,-1,5,50,0,0,0,0,0"
-language=None
-scaleOption=1
-previewScale=200
-magnifierSize=2
-circularMagnifier=true
-defaultEngine=ConTeXt MkIV
-binaryPaths=
-autoHideConsole=false
-openDialogDir=
-recentFileList=
-
-[engines]
-size=6
-1\arguments=--autogenerate, --script, context, $fullname
-1\name=ConTeXt MkIV
-1\program=mtxrun.cmd
-1\showPdf=true
-2\arguments=--autogenerate, --script, check, $fullname
-2\name=ConTeXt MkIV Check
-2\program=mtxrun.cmd
-2\showPdf=false
-3\arguments=--autogenerate, --script, context, --purgeall
-3\name=ConTeXt MkIV Purge
-3\program=mtxrun.cmd
-3\showPdf=false
-4\arguments=/c, start, mtxrun.cmd, --autogenerate, --script, server, --auto
-4\name=ConTeXt MkIV Server
-4\program=cmd.exe
-4\showPdf=false
-5\name=ConTeXt MkIV Update
-5\program=mtxrun.cmd
-5\arguments=--autogenerate, --script, update, --force, --make
-5\showPdf=false
-6\name=ConTeXt MkIV Make
-6\program=mtxrun.cmd
-6\arguments=--autogenerate, --script, context, --generate, --make
-6\showPdf=false
diff --git a/Master/texmf-dist/context/data/texworks/configuration/tools.ini b/Master/texmf-dist/context/data/texworks/configuration/tools.ini
new file mode 100644
index 00000000000..73071028b41
--- /dev/null
+++ b/Master/texmf-dist/context/data/texworks/configuration/tools.ini
@@ -0,0 +1,35 @@
+[001]
+name=ConTeXt MkIV
+program=mtxrun
+arguments=--autogenerate, --script, context, $fullname
+showPdf=true
+
+[002]
+name=ConTeXt MkIV Check
+program=mtxrun
+arguments=--autogenerate, --script, check, $fullname
+showPdf=false
+
+[003]
+name=ConTeXt MkIV Purge
+program=mtxrun
+arguments=--autogenerate, --script, context, --purgeall
+showPdf=false
+
+[004]
+name=ConTeXt MkIV Server
+program=cmd.exe
+arguments=/c, start, mtxrun, --autogenerate, --script, server, --auto
+showPdf=false
+
+[005]
+name=ConTeXt MkIV Update
+program=mtxrun
+arguments=--autogenerate, --script, update, --force, --make
+showPdf=false
+
+[006]
+name=ConTeXt MkIV Make
+program=mtxrun
+arguments=--autogenerate, --script, context, --generate, --make
+showPdf=false
diff --git a/Master/texmf-dist/fonts/enc/dvips/context/ec-2004.enc b/Master/texmf-dist/fonts/enc/dvips/context/ec-2004.enc
new file mode 100644
index 00000000000..f092a34a2fe
--- /dev/null
+++ b/Master/texmf-dist/fonts/enc/dvips/context/ec-2004.enc
@@ -0,0 +1,82 @@
+%
+% This is the EC encoding.
+%
+% These are the ligs and kerns in addition to those found in the
+% AFM file. (The only ligs in the Times-Roman.afm file are the
+% fi and fl ligatures.)
+%
+% LIGKERN space l =: lslash ; space L =: Lslash ;
+% LIGKERN question quoteleft =: questiondown ; exclam quoteleft =: exclamdown ;
+% LIGKERN hyphen hyphen =: endash ; endash hyphen =: emdash ;
+% LIGKERN quoteleft quoteleft =: quotedblleft ;
+% LIGKERN quoteright quoteright =: quotedblright ;
+%
+% We blow away kerns to and from spaces (TeX doesn't have a
+% space) and also remove any kerns from the numbers (although
+% the only kern pair that mentions a number in Times-Roman.afm
+% is one one.)
+%
+% LIGKERN space {} * ; * {} space ; zero {} * ; * {} zero ;
+% LIGKERN one {} * ; * {} one ; two {} * ; * {} two ;
+% LIGKERN three {} * ; * {} three ; four {} * ; * {} four ;
+% LIGKERN five {} * ; * {} five ; six {} * ; * {} six ;
+% LIGKERN seven {} * ; * {} seven ; eight {} * ; * {} eight ;
+% LIGKERN nine {} * ; * {} nine ;
+% LIGKERN comma comma =: quotedblbase ; less less =: guillemotleft ;
+% LIGKERN greater greater =: guillemotright ;
+%
+/ECEncoding [ % now 256 chars follow
+% 0x00
+ /grave /acute /circumflex /tilde /dieresis /hungarumlaut /ring /caron
+ /breve /macron /dotaccent /cedilla
+ /ogonek /quotesinglbase /guilsinglleft /guilsinglright
+% 0x10
+ /quotedblleft /quotedblright /quotedblbase /guillemotleft
+ /guillemotright /endash /emdash /cwm
+ /zeroinferior /dotlessi /dotlessj /ff /fi /fl /ffi /ffl
+% 0x20
+ /visualspace /exclam /quotedbl /numbersign
+ /dollar /percent /ampersand /quoteright
+ /parenleft /parenright /asterisk /plus /comma /hyphen /period /slash
+% 0x30
+ /zero /one /two /three /four /five /six /seven
+ /eight /nine /colon /semicolon /less /equal /greater /question
+% 0x40
+ /at /A /B /C /D /E /F /G /H /I /J /K /L /M /N /O
+% 0x50
+ /P /Q /R /S /T /U /V /W
+ /X /Y /Z /bracketleft /backslash /bracketright /asciicircum /underscore
+% 0x60
+ /quoteleft /a /b /c /d /e /f /g /h /i /j /k /l /m /n /o
+% 0x70
+ /p /q /r /s /t /u /v /w
+ /x /y /z /braceleft /bar /braceright /asciitilde /hyphen
+% 0x80
+ /Abreve /Aogonek /Cacute /Ccaron /Dcaron /Ecaron /Eogonek /Gbreve
+ /Lacute /Lcaron /Lslash /Nacute /Ncaron /Ng /Ohungarumlaut /Racute
+% 0x90
+ /Rcaron /Sacute /Scaron /Scedilla
+ /Tcaron /Tcedilla /Uhungarumlaut /Uring
+ /Ydieresis /Zacute /Zcaron /Zdotaccent /IJ /Idotaccent /dbar /section
+% 0xA0
+ /abreve /aogonek /cacute /ccaron /dcaron /ecaron /eogonek /gbreve
+ /lacute /lcaron /lslash /nacute /ncaron /ng /ohungarumlaut /racute
+% 0xB0
+ /rcaron /sacute /scaron /scedilla
+ /tquoteright /tcedilla /uhungarumlaut /uring
+ /ldot /zacute /zcaron /zdotaccent /ij /exclamdown /questiondown /sterling
+% 0xC0
+ /Agrave /Aacute /Acircumflex /Atilde /Adieresis /Aring /AE /Ccedilla
+ /Egrave /Eacute /Ecircumflex /Edieresis
+ /Igrave /Iacute /Icircumflex /Idieresis
+% 0xD0
+ /Eth /Ntilde /Ograve /Oacute /Ocircumflex /Otilde /Odieresis /OE
+ /Oslash /Ugrave /Uacute /Ucircumflex /Udieresis /Yacute /Thorn /Germandbls
+% 0xE0
+ /agrave /aacute /acircumflex /atilde /adieresis /aring /ae /ccedilla
+ /egrave /eacute /ecircumflex /edieresis
+ /igrave /iacute /icircumflex /idieresis
+% 0xF0
+ /eth /ntilde /ograve /oacute /ocircumflex /otilde /odieresis /oe
+ /oslash /ugrave /uacute /ucircumflex /udieresis /yacute /thorn /germandbls
+] def
diff --git a/Master/texmf-dist/fonts/map/pdftex/context/mkiv-base.map b/Master/texmf-dist/fonts/map/pdftex/context/mkiv-base.map
new file mode 100644
index 00000000000..482bf089466
--- /dev/null
+++ b/Master/texmf-dist/fonts/map/pdftex/context/mkiv-base.map
@@ -0,0 +1,252 @@
+% some left-overs
+
+% context
+
+contnav ContextNavigation <contnav.pfb
+hans Hans-Regular <hans.pfb
+hans-sh Hans-sh-Regular <hans-sh.pfb
+
+% dingbats
+
+uzdr Dingbats <uzdr.pfb
+pzdr Dingbats <pzdr.pfb
+
+% symbols
+
+usyr StandardSymL <usyr.pfb
+
+% ralph
+
+rsfs7 rsfs5 <rsfs7.pfb
+rsfs5 rsfs7 <rsfs5.pfb
+rsfs10 rsfs10 <rsfs10.pfb
+
+% marvosym
+
+fmvr8x MarVoSym <marvosym.pfb
+fmvri8x MarVoSym ".167 SlantFont" <marvosym.pfb
+
+% xypic
+
+xyatip10 XYATIP10 <xyatip10.pfb
+xybsql10 XYBSQL10 <xybsql10.pfb
+xybtip10 XYBTIP10 <xybtip10.pfb
+xycirc10 XYCIRC10 <xycirc10.pfb
+xydash10 XYDASH10 <xydash10.pfb
+
+xycmat10 XYCMAT10 <xycmat10.pfb
+xycmbt10 XYCMBT10 <xycmbt10.pfb
+xyeuat10 XYEUAT10 <xyeuat10.pfb
+xyeubt10 XYEUBT10 <xyeubt10.pfb
+
+xycmat11 XYCMAT10 "1.1 ExtendFont" <xycmat10.pfb
+xycmbt11 XYCMBT10 "1.1 ExtendFont" <xycmbt10.pfb
+xyeuat11 XYEUAT10 "1.1 ExtendFont" <xyeuat10.pfb
+xyeubt11 XYEUBT10 "1.1 ExtendFont" <xyeubt10.pfb
+
+xycmat12 XYCMAT10 "1.2 ExtendFont" <xycmat10.pfb
+xycmbt12 XYCMBT10 "1.2 ExtendFont" <xycmbt10.pfb
+xyeuat12 XYEUAT10 "1.2 ExtendFont" <xyeuat10.pfb
+xyeubt12 XYEUBT10 "1.2 ExtendFont" <xyeubt10.pfb
+
+% euro
+
+zpeub EuroSerif-Bold <zpeub.pfb
+zpeubi EuroSerif-BoldItalic <zpeubi.pfb
+zpeubis EuroSans-BoldItalic <zpeubis.pfb
+zpeubit EuroMono-BoldItalic <zpeubit.pfb
+zpeubs EuroSans-Bold <zpeubs.pfb
+zpeubt EuroMono-Bold <zpeubt.pfb
+zpeur EuroSerif-Regular <zpeur.pfb
+zpeuri EuroSerif-Italic <zpeuri.pfb
+zpeuris EuroSans-Italic <zpeuris.pfb
+zpeurit EuroMono-Italic <zpeurit.pfb
+zpeurs EuroSans-Regular <zpeurs.pfb
+zpeurt EuroMono-Regular <zpeurt.pfb
+
+% not used i think
+
+lasy5 LASY5 <lasy5.pfb
+lasy6 LASY6 <lasy6.pfb
+lasy7 LASY7 <lasy7.pfb
+lasy8 LASY8 <lasy8.pfb
+lasy9 LASY9 <lasy9.pfb
+lasy10 LASY10 <lasy10.pfb
+
+lasyb10 LASYB10 <lasyb10.pfb
+lcircle10 LCIRCLE10 <lcircle1.pfb
+lcirclew10 LCIRCLEW10 <lcirclew.pfb
+lcmss8 LCMSS8 <lcmss8.pfb
+lcmssb8 LCMSSB8 <lcmssb8.pfb
+lcmssi8 LCMSSI8 <lcmssi8.pfb
+line10 LINE10 <line10.pfb
+linew10 LINEW10 <linew10.pfb
+
+wncyb10 WNCYB10 <wncyb10.pfb
+wncyi10 WNCYI10 <wncyi10.pfb
+wncyr10 WNCYR10 <wncyr10.pfb
+wncysc10 WNCYSC10 <wncysc10.pfb
+wncyss10 WNCYSS10 <wncyss10.pfb
+
+manfnt MANFNT <manfnt.pfb
+
+% ams
+
+msam5 MSAM5 <msam5.pfb
+msam7 MSAM7 <msam7.pfb
+msam10 MSAM10 <msam10.pfb
+msbm5 MSBM5 <msbm5.pfb
+msbm7 MSBM7 <msbm7.pfb
+msbm10 MSBM10 <msbm10.pfb
+
+% metapost
+
+logo8 LOGO8 <logo8.pfb
+logo9 LOGO9 <logo9.pfb
+logo10 LOGO10 <logo10.pfb
+logobf10 LOGOBF10 <logobf10.pfb
+logosl10 LOGOSL10 <logosl10.pfb
+
+% euler .. used for manuals
+
+euex10 EUEX10 <euex10.pfb
+
+eufb5 EUFB5 <eufb5.pfb
+eufb7 EUFB7 <eufb7.pfb
+eufb10 EUFB10 <eufb10.pfb
+
+eufm5 EUFM5 <eufm5.pfb
+eufm7 EUFM7 <eufm7.pfb
+eufm10 EUFM10 <eufm10.pfb
+
+eurb5 EURB5 <eurb5.pfb
+eurb7 EURB7 <eurb7.pfb
+eurb10 EURB10 <eurb10.pfb
+
+eurm5 EURM5 <eurm5.pfb
+eurm7 EURM7 <eurm7.pfb
+eurm10 EURM10 <eurm10.pfb
+
+eusb5 EUSB5 <eusb5.pfb
+eusb7 EUSB7 <eusb7.pfb
+eusb10 EUSB10 <eusb10.pfb
+
+eusm5 EUSM5 <eusm5.pfb
+eusm7 EUSM7 <eusm7.pfb
+eusm10 EUSM10 <eusm10.pfb
+
+% lm leftovers, used by inclusion
+
+cmb10 CMB10 <lm-rep-cmrm.enc <lmb10.pfb
+cmbx10 CMBX10 <lm-rep-cmrm.enc <lmbx10.pfb
+cmbx12 CMBX12 <lm-rep-cmrm.enc <lmbx12.pfb
+cmbx5 CMBX5 <lm-rep-cmrm.enc <lmbx5.pfb
+cmbx6 CMBX6 <lm-rep-cmrm.enc <lmbx6.pfb
+cmbx7 CMBX7 <lm-rep-cmrm.enc <lmbx7.pfb
+cmbx8 CMBX8 <lm-rep-cmrm.enc <lmbx8.pfb
+cmbx9 CMBX9 <lm-rep-cmrm.enc <lmbx9.pfb
+cmbxsl10 CMBXSL10 <lm-rep-cmrm.enc <lmbxo10.pfb
+cmbxti10 CMBXTI10 <lm-rep-cmit.enc <lmbxi10.pfb
+cmbxti12 CMBXTI12 <lm-rep-cmit.enc <lmbxti10.pfb
+cmbxti7 CMBXTI7 <lm-rep-cmit.enc <lmbxti10.pfb
+cmcsc10 CMCSC10 <lm-rep-cmsc.enc <lmcsc10.pfb
+cmcsc8 CMCSC8 <lm-rep-cmsc.enc <lmcsc10.pfb
+cmcsc9 CMCSC9 <lm-rep-cmsc.enc <lmcsc10.pfb
+cminch CMINCH <lm-rep-cmin.enc <lmssbx10.pfb
+cmitt10 CMITT10 <lm-rep-cmitt.enc <lmtti10.pfb
+cmitt12 CMITT12 <lm-rep-cmitt.enc <lmtti10.pfb
+cmitt9 CMITT9 <lm-rep-cmitt.enc <lmtti10.pfb
+cmr10 CMR10 <lm-rep-cmrm.enc <lmr10.pfb
+cmr12 CMR12 <lm-rep-cmrm.enc <lmr12.pfb
+cmr17 CMR17 <lm-rep-cmrm.enc <lmr17.pfb
+cmr5 CMR5 <lm-rep-cmsc.enc <lmr5.pfb
+cmr6 CMR6 <lm-rep-cmrm.enc <lmr6.pfb
+cmr7 CMR7 <lm-rep-cmrm.enc <lmr7.pfb
+cmr8 CMR8 <lm-rep-cmrm.enc <lmr8.pfb
+cmr9 CMR9 <lm-rep-cmrm.enc <lmr9.pfb
+cmsl10 CMSL10 <lm-rep-cmrm.enc <lmro10.pfb
+cmsl12 CMSL12 <lm-rep-cmrm.enc <lmro12.pfb
+cmsl6 CMSL6 <lm-rep-cmrm.enc <lmro8.pfb
+cmsl8 CMSL8 <lm-rep-cmrm.enc <lmro8.pfb
+cmsl9 CMSL9 <lm-rep-cmrm.enc <lmro9.pfb
+cmsltt10 CMSLTT10 <lm-rep-cmtt.enc <lmtto10.pfb
+cmsltt9 CMSLTT9 <lm-rep-cmtt.enc <lmtto10.pfb
+cmss10 CMS10 <lm-rep-cmrm.enc <lmss10.pfb
+cmss12 CMS12 <lm-rep-cmrm.enc <lmss12.pfb
+cmss17 CMS17 <lm-rep-cmrm.enc <lmss17.pfb
+cmss8 CMS8 <lm-rep-cmrm.enc <lmss8.pfb
+cmss9 CMS9 <lm-rep-cmrm.enc <lmss9.pfb
+cmssbx10 CMSSBX10 <lm-rep-cmrm.enc <lmssbx10.pfb
+cmssbxo10 CMSSBXO10 <lm-rep-cmrm.enc <lmssbo10.pfb
+cmssdc10 CMSSDC10 <lm-rep-cmrm.enc <lmssdc10.pfb
+cmssi10 CMSI10 <lm-rep-cmrm.enc <lmsso10.pfb
+cmssi12 CMSI12 <lm-rep-cmrm.enc <lmsso12.pfb
+cmssi17 CMSI17 <lm-rep-cmrm.enc <lmsso17.pfb
+cmssi8 CMSSI8 <lm-rep-cmrm.enc <lmsso8.pfb
+cmssi9 CMSSI9 <lm-rep-cmrm.enc <lmsso9.pfb
+cmssq8 CMSQ8 <lm-rep-cmrm.enc <lmssq8.pfb
+cmssqi8 CMSSQI8 <lm-rep-cmrm.enc <lmssqo8.pfb
+cmtcsc10 CMTCSC10 <lm-rep-cmtt.enc <lmtcsc10.pfb
+cmti10 CMTI10 <lm-rep-cmit.enc <lmri10.pfb
+cmti12 CMTI12 <lm-rep-cmit.enc <lmri12.pfb
+cmti7 CMTI7 <lm-rep-cmit.enc <lmri7.pfb
+cmti8 CMTI8 <lm-rep-cmit.enc <lmri8.pfb
+cmti9 CMTI9 <lm-rep-cmit.enc <lmri9.pfb
+cmtt10 CMTT10 <lm-rep-cmtt.enc <lmtt10.pfb
+cmtt12 CMTT12 <lm-rep-cmtt.enc <lmtt12.pfb
+cmtt8 CMTT8 <lm-rep-cmtt.enc <lmtt8.pfb
+cmtt9 CMTT9 <lm-rep-cmtt.enc <lmtt9.pfb
+cmvtt10 CMVTT10 <lm-rep-cmrm.enc <lmvtt10.pfb
+
+% math
+
+cmex10 LMMathExtension10-Regular "enclmmathex ReEncodeFont" <lm-mathex.enc <lmex10.pfb
+cmex9 LMMathExtension10-Regular "enclmmathex ReEncodeFont" <lm-mathex.enc <lmex10.pfb
+cmex8 LMMathExtension10-Regular "enclmmathex ReEncodeFont" <lm-mathex.enc <lmex10.pfb
+cmex7 LMMathExtension10-Regular "enclmmathex ReEncodeFont" <lm-mathex.enc <lmex10.pfb
+
+cmmi5 LMMathItalic5-Italic "enclmmathit ReEncodeFont" <lm-mathit.enc <lmmi5.pfb
+cmmi6 LMMathItalic6-Italic "enclmmathit ReEncodeFont" <lm-mathit.enc <lmmi6.pfb
+cmmi7 LMMathItalic7-Italic "enclmmathit ReEncodeFont" <lm-mathit.enc <lmmi7.pfb
+cmmi8 LMMathItalic8-Italic "enclmmathit ReEncodeFont" <lm-mathit.enc <lmmi8.pfb
+cmmi9 LMMathItalic9-Italic "enclmmathit ReEncodeFont" <lm-mathit.enc <lmmi9.pfb
+cmmi10 LMMathItalic10-Italic "enclmmathit ReEncodeFont" <lm-mathit.enc <lmmi10.pfb
+cmmi12 LMMathItalic12-Italic "enclmmathit ReEncodeFont" <lm-mathit.enc <lmmi12.pfb
+
+cmmib5 LMMathItalic5-BoldItalic "enclmmathit ReEncodeFont" <lm-mathit.enc <lmmib5.pfb
+cmmib6 LMMathItalic6-BoldItalic "enclmmathit ReEncodeFont" <lm-mathit.enc <lmmib6.pfb
+cmmib7 LMMathItalic7-BoldItalic "enclmmathit ReEncodeFont" <lm-mathit.enc <lmmib7.pfb
+cmmib8 LMMathItalic8-BoldItalic "enclmmathit ReEncodeFont" <lm-mathit.enc <lmmib8.pfb
+cmmib9 LMMathItalic9-BoldItalic "enclmmathit ReEncodeFont" <lm-mathit.enc <lmmib9.pfb
+cmmib10 LMMathItalic10-BoldItalic "enclmmathit ReEncodeFont" <lm-mathit.enc <lmmib10.pfb
+cmmib12 LMMathItalic12-BoldItalic "enclmmathit ReEncodeFont" <lm-mathit.enc <lmmib12.pfb
+
+cmsy5 LMMathSymbols5-Italic "enclmmathsy ReEncodeFont" <lm-mathsy.enc <lmsy5.pfb
+cmsy6 LMMathSymbols6-Italic "enclmmathsy ReEncodeFont" <lm-mathsy.enc <lmsy6.pfb
+cmsy7 LMMathSymbols7-Italic "enclmmathsy ReEncodeFont" <lm-mathsy.enc <lmsy7.pfb
+cmsy8 LMMathSymbols8-Italic "enclmmathsy ReEncodeFont" <lm-mathsy.enc <lmsy8.pfb
+cmsy9 LMMathSymbols9-Italic "enclmmathsy ReEncodeFont" <lm-mathsy.enc <lmsy9.pfb
+cmsy10 LMMathSymbols10-Italic "enclmmathsy ReEncodeFont" <lm-mathsy.enc <lmsy10.pfb
+
+cmbsy5 LMMathSymbols5-BoldItalic "enclmmathsy ReEncodeFont" <lm-mathsy.enc <lmbsy5.pfb
+cmbsy6 LMMathSymbols6-BoldItalic "enclmmathsy ReEncodeFont" <lm-mathsy.enc <lmbsy6.pfb
+cmbsy7 LMMathSymbols7-BoldItalic "enclmmathsy ReEncodeFont" <lm-mathsy.enc <lmbsy7.pfb
+cmbsy8 LMMathSymbols8-BoldItalic "enclmmathsy ReEncodeFont" <lm-mathsy.enc <lmbsy8.pfb
+cmbsy9 LMMathSymbols9-BoldItalic "enclmmathsy ReEncodeFont" <lm-mathsy.enc <lmbsy9.pfb
+cmbsy10 LMMathSymbols10-BoldItalic "enclmmathsy ReEncodeFont" <lm-mathsy.enc <lmbsy10.pfb
+
+% original
+
+cmdunh10 CMDUNH10 <cmdunh10.pfb
+
+cmtex10 CMTEX10 <cmtex10.pfb
+cmtex8 CMTEX8 <cmtex8.pfb
+cmtex9 CMTEX9 <cmtex9.pfb
+
+cmff10 CMFF10 <cmff10.pfb
+cmfi10 CMFI10 <cmfi10.pfb
+cmfib8 CMFIB8 <cmfib8.pfb
+
+% a weird one, not used in context
+
+cmu10 LMRoman10-Italic "-0.25 SlantFont" <lm-rep-cmit.enc <lmri10.pfb
diff --git a/Master/texmf-dist/fonts/map/pdftex/context/mkiv-px.map b/Master/texmf-dist/fonts/map/pdftex/context/mkiv-px.map
new file mode 100644
index 00000000000..6a27e357d61
--- /dev/null
+++ b/Master/texmf-dist/fonts/map/pdftex/context/mkiv-px.map
@@ -0,0 +1,51 @@
+% This file a (slightly adapted) copy of the map file
+% that comes with the PX fonts by Young Ryu.
+
+% URW fonts replaced by TeX Gyre
+
+% TeX Gyre Pagella (Palatino)
+
+rpxpplr TeXGyrePagella-Regular "encq8r ReEncodeFont" <q-8r.enc <qplr.pfb
+rpxpplb TeXGyrePagella-Bold "encq8r ReEncodeFont" <q-8r.enc <qplb.pfb
+rpxpplri TeXGyrePagella-Italic "encq8r ReEncodeFont" <q-8r.enc <qplri.pfb
+rpxpplbi TeXGyrePagella-BoldItalic "encq8r ReEncodeFont" <q-8r.enc <qplbi.pfb
+% no idea why these were added
+rpxpplro TeXGyrePagella-Oblique ".167 SlantFont encq8r ReEncodeFont" <q-8r.enc <qplr.pfb
+rpxpplbo TeXGyrePagella-BoldOblique ".167 SlantFont encq8r ReEncodeFont" <q-8r.enc <qplb.pfb
+
+% PX Text
+
+rpxr rpxr <rpxr.pfb
+rpxsl rpxr ".167 SlantFont" <rpxr.pfb
+rpxi rpxi <rpxi.pfb
+rpxsc rpxsc <rpxsc.pfb
+rpxb rpxb <rpxb.pfb
+rpxbsl rpxb ".167 SlantFont" <rpxb.pfb
+rpxbi rpxbi <rpxbi.pfb
+rpxbsc rpxbsc <rpxbsc.pfb
+rpcxb rpcxb <rpcxb.pfb
+rpcxbsl rpcxb ".167 SlantFont" <rpcxb.pfb
+rpcxbi rpcxbi <rpcxbi.pfb
+rpcxi rpcxi <rpcxi.pfb
+rpcxr rpcxr <rpcxr.pfb
+rpcxsl rpcxsl ".167 SlantFont" <rpcxr.pfb
+
+% PX Math
+
+rpxbmi rpxbmi <rpxbmi.pfb
+rpxmi rpxmi <rpxmi.pfb
+
+pxbex pxbex <pxbex.pfb
+pxbexa pxbexa <pxbexa.pfb
+pxbmia pxbmia <pxbmia.pfb
+pxbsy pxbsy <pxbsy.pfb
+pxbsya pxbsya <pxbsya.pfb
+pxbsyb pxbsyb <pxbsyb.pfb
+pxbsyc pxbsyc <pxbsyc.pfb
+pxex pxex <pxex.pfb
+pxexa pxexa <pxexa.pfb
+pxmia pxmia <pxmia.pfb
+pxsy pxsy <pxsy.pfb
+pxsya pxsya <pxsya.pfb
+pxsyb pxsyb <pxsyb.pfb
+pxsyc pxsyc <pxsyc.pfb
diff --git a/Master/texmf-dist/fonts/map/pdftex/context/mkiv-tx.map b/Master/texmf-dist/fonts/map/pdftex/context/mkiv-tx.map
new file mode 100644
index 00000000000..d2600fa787d
--- /dev/null
+++ b/Master/texmf-dist/fonts/map/pdftex/context/mkiv-tx.map
@@ -0,0 +1,94 @@
+% This file is a (slightly adapted) copy of the map file
+% that comes with the TX fonts by Young Ryu.
+
+% URW fonts replaced by TeX Gyre
+
+% TeX Gyre Termes (Times)
+
+rtxptmr TeXGyreTermes-Regular "encq8r ReEncodeFont" <q-8r.enc <qtmr.pfb
+rtxptmb TeXGyreTermes-Bold "encq8r ReEncodeFont" <q-8r.enc <qtmb.pfb
+rtxptmri TeXGyreTermes-Italic "encq8r ReEncodeFont" <q-8r.enc <qtmri.pfb
+rtxptmbi TeXGyreTermes-BoldItalic "encq8r ReEncodeFont" <q-8r.enc <qtmbi.pfb
+% no idea why these were added
+rtxptmro TeXGyreTermes-Oblique ".167 SlantFont encq8r ReEncodeFont" <q-8r.enc <qtmr.pfb
+rtxptmbo TeXGyreTermes-BoldOblique ".167 SlantFont encq8r ReEncodeFont" <q-8r.enc <qtmb.pfb
+
+% TeX Gyre Heros (Helvetica)
+
+rtxphvr TeXGyreHeros-Regular "encqrm ReEncodeFont" <q-rm.enc <qtmr.pfb
+rtxphvb TeXGyreHeros-Bold "encqrm ReEncodeFont" <q-rm.enc <qtmb.pfb
+% probably not used by txfonts
+% rtxphvri TeXGyreHeros-Italic "encqrm ReEncodeFont" <q-rm.enc <qtmri.pfb
+% rtxphvbi TeXGyreHeros-BoldItalic "encqrm ReEncodeFont" <q-rm.enc <qtmbi.pfb
+% followed original definitions; one could also use the italic version
+rtxphvro TeXGyreHeros-Oblique ".167 SlantFont encqrm ReEncodeFont" <q-rm.enc <qtmr.pfb
+rtxphvbo TeXGyreHeros-BoldOblique ".167 SlantFont encqrm ReEncodeFont" <q-rm.enc <qtmb.pfb
+
+% TX Text
+
+rtxr rtxr <rtxr.pfb
+rtxsl rtxr ".167 SlantFont" <rtxr.pfb
+rtxi rtxi <rtxi.pfb
+rtxsc rtxsc <rtxsc.pfb
+rtxb rtxb <rtxb.pfb
+rtxbsl rtxb ".167 SlantFont" <rtxb.pfb
+rtxbi rtxbi <rtxbi.pfb
+rtxbsc rtxbsc <rtxbsc.pfb
+rtcxb rtcxb <rtcxb.pfb
+rtcxbsl rtcxb ".167 SlantFont" <rtcxb.pfb
+rtcxbi rtcxbi <rtcxbi.pfb
+rtcxi rtcxi <rtcxi.pfb
+rtcxr rtcxr <rtcxr.pfb
+rtcxsl rtcx ".167 SlantFont" <rtcxr.pfb
+
+% TX Math
+
+rtxbmi rtxbmi <rtxbmi.pfb
+rtxmi rtxmi <rtxmi.pfb
+
+txbex txbex <txbex.pfb
+txbexa txbexa <txbexa.pfb
+txbmia txbmia <txbmia.pfb
+txbsy txbsy <txbsy.pfb
+txbsya txbsya <txbsya.pfb
+txbsyb txbsyb <txbsyb.pfb
+txbsyc txbsyc <txbsyc.pfb
+txex txex <txex.pfb
+txexa txexa <txexa.pfb
+txmia txmia <txmia.pfb
+txsy txsy <txsy.pfb
+txsya txsya <txsya.pfb
+txsyb txsyb <txsyb.pfb
+txsyc txsyc <txsyc.pfb
+
+% TX TT Text
+
+txtt txtt <txtt.pfb
+txttsl txtt ".167 SlantFont" <txtt.pfb
+txttsc txttsc <txttsc.pfb
+txbtt txbtt <txbtt.pfb
+txbttsl txbtt ".167 SlantFont" <txbtt.pfb
+txbttsc txbttsc <txbttsc.pfb
+t1xtt t1xtt <t1xtt.pfb
+t1xttsl t1xtt ".167 SlantFont" <t1xtt.pfb
+t1xttsc t1xttsc <t1xttsc.pfb
+t1xbtt t1xbtt <t1xbtt.pfb
+t1xbttsl t1xbtt ".167 SlantFont" <t1xbtt.pfb
+t1xbttsc t1xbttsc <t1xbttsc.pfb
+tcxtt tcxtt <tcxtt.pfb
+tcxttsl tcxtt ".167 SlantFont" <tcxtt.pfb
+tcxbtt tcxbtt <tcxbtt.pfb
+tcxbttsl tcxbtt ".167 SlantFont" <tcxbtt.pfb
+
+% TX SS Text
+
+rtxss rtxss <rtxss.pfb
+rtxsssl rtxss ".167 SlantFont" <rtxss.pfb
+rtxsssc rtxsssc <rtxsssc.pfb
+rtxbss rtxbss <rtxbss.pfb
+rtxbsssl rtxbss ".167 SlantFont" <rtxbss.pfb
+rtxbsssc rtxbsssc <rtxbsssc.pfb
+rtcxss rtcxss <rtcxss.pfb
+rtcxbss rtcxbss <rtcxbss.pfb
+rtcxsssl rtcxss ".167 SlantFont" <rtcxss.pfb
+rtcxbsso rtcxbss ".167 SlantFont" <rtcxbss.pfb
diff --git a/Master/texmf-dist/fonts/map/pdftex/context/original-public-lm.map b/Master/texmf-dist/fonts/map/pdftex/context/original-public-lm.map
index 3d5ada70d2a..83fccd0aa95 100644
--- a/Master/texmf-dist/fonts/map/pdftex/context/original-public-lm.map
+++ b/Master/texmf-dist/fonts/map/pdftex/context/original-public-lm.map
@@ -1,7 +1,7 @@
% LM replacement, thanks to Jacko
% official
-%
+
% cmb10 LMRomanDemi10-Regular <lm-rep-cmrm.enc <lmb10.pfb
% cmbx10 LMRoman10-Bold <lm-rep-cmrm.enc <lmbx10.pfb
% cmbx12 LMRoman12-Bold <lm-rep-cmrm.enc <lmbx12.pfb
@@ -126,45 +126,57 @@ cmtt8 CMTT8 <lm-rep-cmtt.enc <lmtt8.pfb
cmtt9 CMTT9 <lm-rep-cmtt.enc <lmtt9.pfb
cmvtt10 CMVTT10 <lm-rep-cmrm.enc <lmvtt10.pfb
+% Math
+
+cmex10 LMMathExtension10-Regular "enclmmathex ReEncodeFont" <lm-mathex.enc <lmex10.pfb
+cmex9 LMMathExtension10-Regular "enclmmathex ReEncodeFont" <lm-mathex.enc <lmex10.pfb
+cmex8 LMMathExtension10-Regular "enclmmathex ReEncodeFont" <lm-mathex.enc <lmex10.pfb
+cmex7 LMMathExtension10-Regular "enclmmathex ReEncodeFont" <lm-mathex.enc <lmex10.pfb
+
+cmmi5 LMMathItalic5-Italic "enclmmathit ReEncodeFont" <lm-mathit.enc <lmmi5.pfb
+cmmi6 LMMathItalic6-Italic "enclmmathit ReEncodeFont" <lm-mathit.enc <lmmi6.pfb
+cmmi7 LMMathItalic7-Italic "enclmmathit ReEncodeFont" <lm-mathit.enc <lmmi7.pfb
+cmmi8 LMMathItalic8-Italic "enclmmathit ReEncodeFont" <lm-mathit.enc <lmmi8.pfb
+cmmi9 LMMathItalic9-Italic "enclmmathit ReEncodeFont" <lm-mathit.enc <lmmi9.pfb
+cmmi10 LMMathItalic10-Italic "enclmmathit ReEncodeFont" <lm-mathit.enc <lmmi10.pfb
+cmmi12 LMMathItalic12-Italic "enclmmathit ReEncodeFont" <lm-mathit.enc <lmmi12.pfb
+
+cmmib5 LMMathItalic5-BoldItalic "enclmmathit ReEncodeFont" <lm-mathit.enc <lmmib5.pfb
+cmmib6 LMMathItalic6-BoldItalic "enclmmathit ReEncodeFont" <lm-mathit.enc <lmmib6.pfb
+cmmib7 LMMathItalic7-BoldItalic "enclmmathit ReEncodeFont" <lm-mathit.enc <lmmib7.pfb
+cmmib8 LMMathItalic8-BoldItalic "enclmmathit ReEncodeFont" <lm-mathit.enc <lmmib8.pfb
+cmmib9 LMMathItalic9-BoldItalic "enclmmathit ReEncodeFont" <lm-mathit.enc <lmmib9.pfb
+cmmib10 LMMathItalic10-BoldItalic "enclmmathit ReEncodeFont" <lm-mathit.enc <lmmib10.pfb
+cmmib12 LMMathItalic12-BoldItalic "enclmmathit ReEncodeFont" <lm-mathit.enc <lmmib12.pfb
+
+cmsy5 LMMathSymbols5-Italic "enclmmathsy ReEncodeFont" <lm-mathsy.enc <lmsy5.pfb
+cmsy6 LMMathSymbols6-Italic "enclmmathsy ReEncodeFont" <lm-mathsy.enc <lmsy6.pfb
+cmsy7 LMMathSymbols7-Italic "enclmmathsy ReEncodeFont" <lm-mathsy.enc <lmsy7.pfb
+cmsy8 LMMathSymbols8-Italic "enclmmathsy ReEncodeFont" <lm-mathsy.enc <lmsy8.pfb
+cmsy9 LMMathSymbols9-Italic "enclmmathsy ReEncodeFont" <lm-mathsy.enc <lmsy9.pfb
+cmsy10 LMMathSymbols10-Italic "enclmmathsy ReEncodeFont" <lm-mathsy.enc <lmsy10.pfb
+
+cmbsy5 LMMathSymbols5-BoldItalic "enclmmathsy ReEncodeFont" <lm-mathsy.enc <lmbsy5.pfb
+cmbsy6 LMMathSymbols6-BoldItalic "enclmmathsy ReEncodeFont" <lm-mathsy.enc <lmbsy6.pfb
+cmbsy7 LMMathSymbols7-BoldItalic "enclmmathsy ReEncodeFont" <lm-mathsy.enc <lmbsy7.pfb
+cmbsy8 LMMathSymbols8-BoldItalic "enclmmathsy ReEncodeFont" <lm-mathsy.enc <lmbsy8.pfb
+cmbsy9 LMMathSymbols9-BoldItalic "enclmmathsy ReEncodeFont" <lm-mathsy.enc <lmbsy9.pfb
+cmbsy10 LMMathSymbols10-BoldItalic "enclmmathsy ReEncodeFont" <lm-mathsy.enc <lmbsy10.pfb
+
+
% original
-cmbsy10 CMBSY10 <cmbsy10.pfb
-cmbsy5 CMBSY5 <cmbsy5.pfb
-cmbsy6 CMBSY7 <cmbsy7.pfb
-cmbsy7 CMBSY7 <cmbsy7.pfb
-cmbsy8 CMBSY7 <cmbsy7.pfb
-cmbsy9 CMBSY10 <cmbsy10.pfb
cmdunh10 CMDUNH10 <cmdunh10.pfb
-cmex10 CMEX10 <cmex10.pfb
-cmex7 CMEX10 <cmex10.pfb
-cmex8 CMEX10 <cmex10.pfb
-cmex9 CMEX10 <cmex10.pfb
-cmff10 CMFF10 <cmff10.pfb
-cmfi10 CMFI10 <cmfi10.pfb
-cmfib8 CMFIB8 <cmfib8.pfb
-cmmi10 CMMI10 <cmmi10.pfb
-cmmi12 CMMI12 <cmmi12.pfb
-cmmi5 CMMI5 <cmmi5.pfb
-cmmi6 CMMI6 <cmmi6.pfb
-cmmi7 CMMI7 <cmmi7.pfb
-cmmi8 CMMI8 <cmmi8.pfb
-cmmi9 CMMI9 <cmmi9.pfb
-cmmib10 CMMIB10 <cmmib10.pfb
-cmmib5 CMMIB5 <cmmib5.pfb
-cmmib6 CMMIB7 <cmmib7.pfb
-cmmib7 CMMIB7 <cmmib7.pfb
-cmmib8 CMMIB7 <cmmib7.pfb
-cmmib9 CMMIB10 <cmmib10.pfb
-cmsy10 CMSY10 <cmsy10.pfb
-cmsy5 CMSY5 <cmsy5.pfb
-cmsy6 CMSY6 <cmsy6.pfb
-cmsy7 CMSY7 <cmsy7.pfb
-cmsy8 CMSY8 <cmsy8.pfb
-cmsy9 CMSY9 <cmsy9.pfb
+
cmtex10 CMTEX10 <cmtex10.pfb
cmtex8 CMTEX8 <cmtex8.pfb
cmtex9 CMTEX9 <cmtex9.pfb
+cmff10 CMFF10 <cmff10.pfb
+cmfi10 CMFI10 <cmfi10.pfb
+cmfib8 CMFIB8 <cmfib8.pfb
+
+
% a weird one, not used in context
cmu10 LMRoman10-Italic "-0.25 SlantFont" <lm-rep-cmit.enc <lmri10.pfb
diff --git a/Master/texmf-dist/metapost/base/mfplain.mp b/Master/texmf-dist/metapost/base/mfplain.mp
index 74e1867589d..8a4f732483d 100644
--- a/Master/texmf-dist/metapost/base/mfplain.mp
+++ b/Master/texmf-dist/metapost/base/mfplain.mp
@@ -1,7 +1,7 @@
% $Id: mfplain.mp,v 1.9 2005/04/28 06:45:21 taco Exp $
% Public domain.
-% This is the plain MetaPost base that's look like what's described
+% This is the plain MetaPost base that looks like what's described
% in The METAFONTbook.
string base_name, base_version; base_name="mfplain"; base_version="0.99";
diff --git a/Master/texmf-dist/metapost/context/base/mp-back.mp b/Master/texmf-dist/metapost/context/base/mp-back.mp
index 99e88554b62..f49474cf77f 100644
--- a/Master/texmf-dist/metapost/context/base/mp-back.mp
+++ b/Master/texmf-dist/metapost/context/base/mp-back.mp
@@ -1,6 +1,6 @@
%D \module
%D [ file=mp-back.mp,
-%D version=2000.05.31,
+%D version=2000.05.31,
%D title=\CONTEXT\ \METAPOST\ graphics,
%D subtitle=backgrounds,
%D author=Hans Hagen,
@@ -8,199 +8,199 @@
%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 licen-en.pdf for
-%C details.
+%C therefore copyrighted by \PRAGMA. See licen-en.pdf for
+%C details.
-if unknown context_tool : input mp-tool ; fi ;
-if known context_back : endinput ; fi ;
+if unknown context_tool : input mp-tool ; fi ;
+if known context_back : endinput ; fi ;
-boolean context_back ; context_back := true ;
+boolean context_back ; context_back := true ;
-def some_hash ( expr hash_width ,
- hash_height ,
- hash_linewidth ,
- hash_linecolor ,
- hash_angle ,
- hash_gap ) =
+def some_hash ( expr hash_width ,
+ hash_height ,
+ hash_linewidth ,
+ hash_linecolor ,
+ hash_angle ,
+ hash_gap ) =
stripe_gap := hash_gap ;
stripe_angle := hash_angle ;
- drawoptions (withpen pencircle scaled hash_linewidth
+ drawoptions (withpen pencircle scaled hash_linewidth
withcolor hash_linecolor) ;
path p ; p := unitsquare xscaled hash_width yscaled hash_height ;
stripe_path_a () (draw) p ; % next we move it all to quadrant 1
- currentpicture := currentpicture shifted urcorner currentpicture ;
+ currentpicture := currentpicture shifted urcorner currentpicture ;
-enddef ;
+enddef ;
-def some_double_back (expr back_type ,
+def some_double_back (expr back_type ,
back_width ,
back_height ,
- back_delta ,
- back_linewidth ,
- back_linecolor ,
- back_fillcolor ,
- back_topcolor ,
+ back_delta ,
+ back_linewidth ,
+ back_linecolor ,
+ back_fillcolor ,
+ back_topcolor ,
back_bottomcolor ,
- back_leftcolor ,
- back_rightcolor ) =
+ back_leftcolor ,
+ back_rightcolor ) =
- numeric ww ; ww := back_width ;
- numeric hh ; hh := back_height ;
- numeric dd ; dd := back_delta ;
+ numeric ww ; ww := back_width ;
+ numeric hh ; hh := back_height ;
+ numeric dd ; dd := back_delta ;
- color back_nillcolor ; back_nillcolor := back_topcolor ;
+ color back_nillcolor ; back_nillcolor := back_topcolor ;
- path p ; p := fullsquare xscaled ww yscaled hh ;
- path q ; q := fullsquare xscaled (ww-2dd) yscaled (hh-2dd) ;
- path r ; r := llcorner p --
- lrcorner p shifted (-3dd,0) .. controls lrcorner p ..
- lrcorner p shifted (0, 3dd) --
- urcorner p shifted (0,-3dd) .. controls urcorner p ..
+ path p ; p := fullsquare xscaled ww yscaled hh ;
+ path q ; q := fullsquare xscaled (ww-2dd) yscaled (hh-2dd) ;
+ path r ; r := llcorner p --
+ lrcorner p shifted (-3dd,0) .. controls lrcorner p ..
+ lrcorner p shifted (0, 3dd) --
+ urcorner p shifted (0,-3dd) .. controls urcorner p ..
urcorner p shifted (-3dd,0) --
ulcorner p -- cycle ;
path s ; s := r xscaled ((ww-2dd)/ww) yscaled ((hh-2dd)/hh) ;
- path t ; t := llcorner p --
- lrcorner p --
- urcorner p shifted (0,-3dd) .. controls urcorner p ..
- urcorner p shifted (-3dd,0) --
- ulcorner p shifted ( 3dd,0) .. controls ulcorner p ..
+ path t ; t := llcorner p --
+ lrcorner p --
+ urcorner p shifted (0,-3dd) .. controls urcorner p ..
+ urcorner p shifted (-3dd,0) --
+ ulcorner p shifted ( 3dd,0) .. controls ulcorner p ..
ulcorner p shifted (0,-3dd) --
llcorner p -- cycle ;
path u ; u := t xscaled ((ww-2dd)/ww) yscaled ((hh-2dd)/hh) ;
- path v ; v := llcorner p shifted ( 3dd,0) --
- lrcorner p shifted (-3dd,0) .. controls lrcorner p ..
- lrcorner p shifted (0, 3dd) --
- urcorner p shifted (0,-3dd) .. controls urcorner p ..
+ path v ; v := llcorner p shifted ( 3dd,0) --
+ lrcorner p shifted (-3dd,0) .. controls lrcorner p ..
+ lrcorner p shifted (0, 3dd) --
+ urcorner p shifted (0,-3dd) .. controls urcorner p ..
urcorner p shifted (-3dd,0) --
- ulcorner p shifted ( 3dd,0) .. controls ulcorner p ..
+ ulcorner p shifted ( 3dd,0) .. controls ulcorner p ..
ulcorner p shifted (0,-3dd) ..
llcorner p shifted (0, 3dd) .. controls llcorner p .. cycle ; % {down} .. cycle ;
path w ; w := t xscaled ((ww-2dd)/ww) yscaled ((hh-2dd)/hh) ;
- path a ; a := llcorner p -- ulcorner p --
+ path a ; a := llcorner p -- ulcorner p --
ulcorner q -- llcorner q -- cycle ;
- path b ; b := llcorner p -- lrcorner p --
+ path b ; b := llcorner p -- lrcorner p --
lrcorner q -- llcorner q -- cycle ;
- path c ; c := lrcorner p -- urcorner p --
+ path c ; c := lrcorner p -- urcorner p --
urcorner q -- lrcorner q -- cycle ;
- path d ; d := ulcorner p -- urcorner p --
+ path d ; d := ulcorner p -- urcorner p --
urcorner q -- ulcorner q -- cycle ;
- path e ; e := llcorner p -- lrcorner p --
- urcorner p -- urcorner q --
+ path e ; e := llcorner p -- lrcorner p --
+ urcorner p -- urcorner q --
lrcorner q -- llcorner q -- cycle ;
- path f ; f := llcorner p -- ulcorner p --
- urcorner p -- urcorner q --
+ path f ; f := llcorner p -- ulcorner p --
+ urcorner p -- urcorner q --
ulcorner q -- llcorner q -- cycle ;
- linecap := butt ; pickup pencircle scaled back_linewidth ;
+ linecap := butt ; pickup pencircle scaled back_linewidth ;
- if back_type=1 :
+ if back_type=1 :
- fill p withcolor back_fillcolor ;
- fill a withcolor back_leftcolor ;
- fill b withcolor back_bottomcolor ;
- fill c withcolor back_rightcolor ;
- fill d withcolor back_topcolor ;
- draw a withcolor back_linecolor ;
- draw d withcolor back_linecolor ;
- draw b withcolor back_linecolor ;
- draw c withcolor back_linecolor ;
+ fill p withcolor back_fillcolor ;
+ fill a withcolor back_leftcolor ;
+ fill b withcolor back_bottomcolor ;
+ fill c withcolor back_rightcolor ;
+ fill d withcolor back_topcolor ;
+ draw a withcolor back_linecolor ;
+ draw d withcolor back_linecolor ;
+ draw b withcolor back_linecolor ;
+ draw c withcolor back_linecolor ;
- elseif back_type=2 :
+ elseif back_type=2 :
- fill p withcolor back_fillcolor ;
- fill e withcolor back_bottomcolor ;
- fill f withcolor back_topcolor ;
- draw e withcolor back_linecolor ;
- draw f withcolor back_linecolor ;
+ fill p withcolor back_fillcolor ;
+ fill e withcolor back_bottomcolor ;
+ fill f withcolor back_topcolor ;
+ draw e withcolor back_linecolor ;
+ draw f withcolor back_linecolor ;
- elseif back_type=3 :
+ elseif back_type=3 :
- fill v withcolor back_nillcolor ;
- fill w withcolor back_fillcolor ;
- draw v withcolor back_linecolor ;
- draw w withcolor back_linecolor ;
+ fill v withcolor back_nillcolor ;
+ fill w withcolor back_fillcolor ;
+ draw v withcolor back_linecolor ;
+ draw w withcolor back_linecolor ;
- elseif back_type=4 :
+ elseif back_type=4 :
- fill t withcolor back_nillcolor ;
- fill u withcolor back_fillcolor ;
- draw t withcolor back_linecolor ;
- draw u withcolor back_linecolor ;
+ fill t withcolor back_nillcolor ;
+ fill u withcolor back_fillcolor ;
+ draw t withcolor back_linecolor ;
+ draw u withcolor back_linecolor ;
- elseif back_type=5 :
+ elseif back_type=5 :
- t := t rotatedaround(center t,180) ;
- u := u rotatedaround(center u,180) ;
+ t := t rotatedaround(center t,180) ;
+ u := u rotatedaround(center u,180) ;
- fill t withcolor back_nillcolor ;
- fill u withcolor back_fillcolor ;
- draw t withcolor back_linecolor ;
- draw u withcolor back_linecolor ;
+ fill t withcolor back_nillcolor ;
+ fill u withcolor back_fillcolor ;
+ draw t withcolor back_linecolor ;
+ draw u withcolor back_linecolor ;
- elseif back_type=6 :
+ elseif back_type=6 :
- r := r rotatedaround(center r,180) ;
- s := s rotatedaround(center s,180) ;
+ r := r rotatedaround(center r,180) ;
+ s := s rotatedaround(center s,180) ;
- fill r withcolor back_nillcolor ;
- fill s withcolor back_fillcolor ;
- draw r withcolor back_linecolor ;
- draw s withcolor back_linecolor ;
+ fill r withcolor back_nillcolor ;
+ fill s withcolor back_fillcolor ;
+ draw r withcolor back_linecolor ;
+ draw s withcolor back_linecolor ;
- elseif back_type=7 :
+ elseif back_type=7 :
- fill r withcolor back_nillcolor ;
- fill s withcolor back_fillcolor ;
- draw r withcolor back_linecolor ;
- draw s withcolor back_linecolor ;
+ fill r withcolor back_nillcolor ;
+ fill s withcolor back_fillcolor ;
+ draw r withcolor back_linecolor ;
+ draw s withcolor back_linecolor ;
-fi ;
+fi ;
-enddef ;
+enddef ;
endinput ;
-beginfig (1) ;
+beginfig (1) ;
-some_double_back (1, 4.5cm, 1.5cm, .25cm, 1mm,
+some_double_back (1, 4.5cm, 1.5cm, .25cm, 1mm,
.5white, .8white, .7white, .6white, .7white, .6white)
-currentpicture := currentpicture shifted (0,-3cm) ;
+currentpicture := currentpicture shifted (0,-3cm) ;
-some_double_back (2, 4.5cm, 1.5cm, .25cm, 1mm,
+some_double_back (2, 4.5cm, 1.5cm, .25cm, 1mm,
.5white, .8white, .7white, .6white, white, white)
-currentpicture := currentpicture shifted (0,-3cm) ;
+currentpicture := currentpicture shifted (0,-3cm) ;
-some_double_back (3, 4.5cm, 1.5cm, .25cm, 1mm,
+some_double_back (3, 4.5cm, 1.5cm, .25cm, 1mm,
.5white, .8white, .7white, white, white, white)
-currentpicture := currentpicture shifted (0,-3cm) ;
+currentpicture := currentpicture shifted (0,-3cm) ;
-some_double_back (4, 4.5cm, 1.5cm, .25cm, 1mm,
+some_double_back (4, 4.5cm, 1.5cm, .25cm, 1mm,
.5white, .8white, .7white, white, white, white)
-currentpicture := currentpicture shifted (0,-3cm) ;
+currentpicture := currentpicture shifted (0,-3cm) ;
-some_double_back (5, 4.5cm, 1.5cm, .25cm, 1mm,
+some_double_back (5, 4.5cm, 1.5cm, .25cm, 1mm,
.5white, .8white, .7white, white, white, white)
-currentpicture := currentpicture shifted (0,-3cm) ;
+currentpicture := currentpicture shifted (0,-3cm) ;
-some_double_back (6, 4.5cm, 1.5cm, .25cm, 1mm,
+some_double_back (6, 4.5cm, 1.5cm, .25cm, 1mm,
.5white, .8white, .7white, white, white, white)
-currentpicture := currentpicture shifted (0,-3cm) ;
+currentpicture := currentpicture shifted (0,-3cm) ;
-some_double_back (7, 4.5cm, 1.5cm, .25cm, 1mm,
+some_double_back (7, 4.5cm, 1.5cm, .25cm, 1mm,
.5white, .8white, .7white, white, white, white)
-currentpicture := currentpicture shifted (0,-3cm) ;
+currentpicture := currentpicture shifted (0,-3cm) ;
-some_double_back (8, 4.5cm, 1.5cm, .25cm, 1mm,
+some_double_back (8, 4.5cm, 1.5cm, .25cm, 1mm,
.5white, .8white, .7white, white, white, white)
-endfig ;
+endfig ;
end .
diff --git a/Master/texmf-dist/metapost/context/base/mp-chem.mp b/Master/texmf-dist/metapost/context/base/mp-chem.mp
index 1a5be841633..c70dafd85cd 100644
--- a/Master/texmf-dist/metapost/context/base/mp-chem.mp
+++ b/Master/texmf-dist/metapost/context/base/mp-chem.mp
@@ -51,6 +51,7 @@ path
chem_sb_path[], chem_msb_path[], chem_psb_path[],
chem_s_path[], chem_ss_path[], chem_mss_path[], chem_pss_path[],
chem_e_path[], chem_sd_path[], chem_bb_path[], chem_oe_path[],
+ chem_bd_path[], chem_bw_path[],
chem_ddt_path[], chem_ddb_path[], chem_ldt_path[], chem_ldb_path[], chem_rdt_path[], chem_rdb_path[],
chem_dbl_path[], chem_dbr_path[],
chem_ad_path[], chem_au_path[],
@@ -73,6 +74,7 @@ chem_radical_max := 1.50 ;
chem_text_min := 0.75 ;
chem_text_max := 1.75 ;
chem_circle_radius := 0.80 ;
+chem_circle_radius := 1.10 ;
chem_rotation := 1 ;
chem_adjacent := 0 ;
chem_substituent := 0 ;
@@ -82,6 +84,10 @@ chem_doing_pb := false ;
chem_shift := origin ;
chem_dot_factor := 4 ;
chem_text_trace := false ;
+chem_bd_n := 4 ;
+chem_bw_n := 4 ;
+chem_bd_angle := 4 ;
+chem_bb_angle := 4 ;
vardef chem_start_structure(expr n, l, r, t, b, scale, axis, fixedwidth, fixedheight, offset) =
chem_setting_axis := axis ;
@@ -347,6 +353,14 @@ enddef ;
vardef chem_oe (expr n, f, t, r, c) = % one
chem_draw (n, chem_oe_path[n], f, t, r, c) ;
enddef ;
+vardef chem_bd (expr n, f, t, r, c) = % one
+ for i=0 upto 5 :
+ chem_draw (n, subpath (2i,2i+1) of chem_bd_path[n], f, t, r, c) ;
+ endfor ;
+enddef ;
+vardef chem_bw (expr n, f, t, r, c) = % one
+ chem_draw (n, chem_bw_path[n], f, t, r, c) ;
+enddef ;
vardef chem_z_zero@#(text t) =
chem_text@#(t, chem_do(origin)) ;
@@ -600,37 +614,37 @@ vardef chem_restore =
fi ;
enddef ;
-def chem_init_some(expr n, ratio, angle, start, initialrot, initialmov) =
+def chem_init_some(expr n, ratio, start, initialrot, initialmov) =
chem_width [n] := ratio * chem_base_width * chem_setting_scale ;
- chem_angle [n] := angle ;
+ chem_angle [n] := 360/abs(n) ;
chem_start [n] := start ;
chem_initialrot[n] := initialrot ;
chem_initialmov[n] := initialmov ;
- chem_b_zero [n] := (chem_width[n],0) rotated (angle/2) ;
- chem_n_zero [n] := (chem_text_min*chem_width[n],0) rotated (angle/2) ;
+ chem_b_zero [n] := (chem_width[n],0) rotated (chem_angle[n]/2) ;
+ chem_n_zero [n] := (chem_text_min*chem_width[n],0) rotated (chem_angle[n]/2) ;
chem_r_max [n] := chem_radical_max*chem_b_zero[n] ;
chem_r_path [n] := chem_b_zero[n] -- chem_r_max[n] ;
- chem_mr_path [n] := chem_r_path [n] rotatedaround(chem_b_zero[n], (180-angle)/2) ;
- chem_pr_path [n] := chem_r_path [n] rotatedaround(chem_b_zero[n],-(180-angle)/2) ;
+ chem_mr_path [n] := chem_r_path [n] rotatedaround(chem_b_zero[n], (180-chem_angle[n])/2) ;
+ chem_pr_path [n] := chem_r_path [n] rotatedaround(chem_b_zero[n],-(180-chem_angle[n])/2) ;
chem_r_zero [n] := point 1 of chem_r_path [n] ;
chem_mr_zero [n] := point 1 of chem_mr_path[n] ;
chem_pr_zero [n] := point 1 of chem_pr_path[n] ;
chem_crz_zero [n] := point 1 of (chem_r_path[n] enlonged chem_center_offset) ;
- chem_au_path [n] := subpath (0.2,0.8) of (chem_r_max[n] -- (chem_r_max[n] rotated angle)) ;
+ chem_au_path [n] := subpath (0.2,0.8) of (chem_r_max[n] -- (chem_r_max[n] rotated chem_angle[n])) ;
chem_ad_path [n] := reverse(chem_au_path[n]) ;
- chem_rt_zero [n] := (((chem_radical_max+chem_radical_min)/2)*chem_width[n],0) rotated (angle/2) ;
+ chem_rt_zero [n] := (((chem_radical_max+chem_radical_min)/2)*chem_width[n],0) rotated (chem_angle[n]/2) ;
chem_rtt_zero [n] := chem_rt_zero[n] rotated + 10 ;
chem_rbt_zero [n] := chem_rt_zero[n] rotated - 10 ;
- chem_b_path [n] := reverse(chem_b_zero[n] -- (chem_b_zero[n] rotated -angle)) ;
- chem_bx_path [n] := reverse(chem_b_zero[n] -- (chem_b_zero[n] rotated -angle)) ; % ?
+ chem_b_path [n] := reverse(chem_b_zero[n] -- (chem_b_zero[n] rotated -chem_angle[n])) ;
+ chem_bx_path [n] := reverse(chem_b_zero[n] -- (chem_b_zero[n] rotated -chem_angle[n])) ; % ?
chem_sb_path [n] := subpath (0.25,0.75) of chem_b_path[n] ;
- chem_s_path [n] := point 0 of chem_b_path[n] -- point 0 of (chem_b_path[n] rotated (2angle)) ;
+ chem_s_path [n] := point 0 of chem_b_path[n] -- point 0 of (chem_b_path[n] rotated (2chem_angle[n])) ;
chem_ss_path [n] := subpath (0.25,0.75) of (chem_s_path[n]) ;
chem_pss_path [n] := subpath (0.00,0.75) of (chem_s_path[n]) ;
chem_mss_path [n] := subpath (0.25,1.00) of (chem_s_path[n]) ;
chem_mid_zero [n] := origin shifted (-.25chem_width[n],0) ;
- chem_midst_path[n] := chem_mid_zero[n] -- (chem_width[n],0) rotated ( angle + angle/2) ;
- chem_midsb_path[n] := chem_mid_zero[n] -- (chem_width[n],0) rotated (-angle - angle/2) ;
+ chem_midst_path[n] := chem_mid_zero[n] -- (chem_width[n],0) rotated ( chem_angle[n] + chem_angle[n]/2) ;
+ chem_midsb_path[n] := chem_mid_zero[n] -- (chem_width[n],0) rotated (-chem_angle[n] - chem_angle[n]/2) ;
chem_midt_path [n] := subpath (0.25,1.00) of chem_midst_path [n] ;
chem_midb_path [n] := subpath (0.25,1.00) of chem_midsb_path [n] ;
chem_msb_path [n] := subpath (0.00,0.75) of chem_b_path[n] ;
@@ -647,26 +661,28 @@ def chem_init_some(expr n, ratio, angle, start, initialrot, initialmov) =
point 0 of chem_sb_path[n] rotatedaround(point 1 of chem_sb_path[n], -4) --
point 0 of chem_sb_path[n] rotatedaround(point 1 of chem_sb_path[n], 4) -- cycle ;
chem_rb_path [n] := chem_b_zero[n] -- chem_r_max[n] rotated -2 -- chem_r_max[n] -- chem_r_max[n] rotated 2 -- cycle ;
- chem_mrb_path [n] := chem_rb_path[n] rotatedaround(chem_b_zero[n], (180-angle)/2) ;
- chem_prb_path [n] := chem_rb_path[n] rotatedaround(chem_b_zero[n],-(180-angle)/2) ;
- chem_msr_path [n] := chem_sr_path[n] rotatedaround(chem_b_zero[n], (180-angle)/2) ;
- chem_psr_path [n] := chem_sr_path[n] rotatedaround(chem_b_zero[n],-(180-angle)/2) ;
+ chem_mrb_path [n] := chem_rb_path[n] rotatedaround(chem_b_zero[n], (180-chem_angle[n])/2) ;
+ chem_prb_path [n] := chem_rb_path[n] rotatedaround(chem_b_zero[n],-(180-chem_angle[n])/2) ;
+ chem_msr_path [n] := chem_sr_path[n] rotatedaround(chem_b_zero[n], (180-chem_angle[n])/2) ;
+ chem_psr_path [n] := chem_sr_path[n] rotatedaround(chem_b_zero[n],-(180-chem_angle[n])/2) ;
% not yet ok:
- chem_c_path [n] := subpath (30/45, -30/45) of (fullcircle scaled (1.25*chem_circle_radius*chem_width[n]));
- chem_cc_path [n] := subpath (30/45,8-30/45) of (fullcircle rotated 90 scaled (1.25*chem_circle_radius*chem_width[n]));
+% chem_c_path [n] := subpath (30/45, -30/45) of (fullcircle scaled (1.25*chem_circle_radius*chem_width[n]));
+% chem_cc_path [n] := subpath (30/45,8-30/45) of (fullcircle rotated 90 scaled (1.25*chem_circle_radius*chem_width[n]));
+ chem_c_path [n] := subpath (30/45, -30/45) of (fullcircle scaled (chem_width[n]));
+ chem_cc_path [n] := subpath (30/45,8-30/45) of (fullcircle rotated 90 scaled (chem_width[n]));
enddef ;
-def chem_init_three = chem_init_some(3,30/52 ,120,-60,1,2) ; enddef ; % 60
-def chem_init_four = chem_init_some(4,30/42.5, 90, 0,1,0) ; enddef ; % 45
-def chem_init_five = chem_init_some(5,30/35 , 72, 0,1,0) ; enddef ; % 36
-def chem_init_six = chem_init_some(6, 1 , 60, 0,1,0) ; enddef ; % 30
-def chem_init_eight = chem_init_some(8,30/22.5, 45, 0,1,0) ; enddef ; % 22.5
+def chem_init_three = chem_init_some(3,30/52 ,-60,1,2) ; enddef ; % 60
+def chem_init_four = chem_init_some(4,30/42.5, 0,1,0) ; enddef ; % 45
+def chem_init_five = chem_init_some(5,30/35 , 0,1,0) ; enddef ; % 36
+def chem_init_six = chem_init_some(6, 1 , 0,1,0) ; enddef ; % 30
+def chem_init_eight = chem_init_some(8,30/22.5, 0,1,0) ; enddef ; % 22.5
% bb R -R R Z -RZ +RZ
-def chem_init_some_front(expr n, ratio, angle, start, initialrot, initialmov) =
- chem_init_some(n, ratio, angle, start, initialrot, initialmov) ;
- chem_bb_path [n] := chem_b_path[n] rotated -angle -- chem_b_path[n] -- chem_b_path[n] rotated angle --
+def chem_init_some_front(expr n, ratio, start, initialrot, initialmov) =
+ chem_init_some(n, ratio, start, initialrot, initialmov) ;
+ chem_bb_path [n] := chem_b_path[n] rotated -chem_angle[n] -- chem_b_path[n] -- chem_b_path[n] rotated chem_angle[n] --
(reverse(chem_b_path[n] shortened (chem_base_width/20))) paralleled (chem_base_width/20) --
cycle ;
chem_r_max [n] := chem_radical_max*chem_b_zero[n] ;
@@ -677,12 +693,12 @@ def chem_init_some_front(expr n, ratio, angle, start, initialrot, initialmov) =
chem_pr_zero [n] := point 1 of chem_pr_path[n] ;
enddef ;
-def chem_init_five_front = chem_init_some_front(-5,30/35,72,0,2,0) ; enddef ; % 36
-def chem_init_six_front = chem_init_some_front(-6, 1 ,60,0,2,0) ; enddef ; % 30
+def chem_init_five_front = chem_init_some_front(-5,30/35,0,2,0) ; enddef ; % 36
+def chem_init_six_front = chem_init_some_front(-6, 1 ,0,2,0) ; enddef ; % 30
-def chem_init_one =
+vardef chem_init_one =
chem_width [1] := .75 * chem_base_width * chem_setting_scale ;
- chem_angle [1] := 45 ;
+ chem_angle [1] := 360/8 ;
chem_start [1] := 0 ;
chem_initialrot[1] := 1 ;
chem_initialmov[1] := 1 ;
@@ -704,14 +720,31 @@ def chem_init_one =
chem_ldb_path [1] := chem_ddb_path [1] shifted (0,-.1chem_width[1]) ;
chem_rdt_path [1] := chem_ddt_path [1] shifted (0, .1chem_width[1]) ;
chem_rdb_path [1] := chem_ddb_path [1] shifted (0, .1chem_width[1]) ;
- chem_bb_path [1] := point 0 of chem_r_path[1] --
- point 1 of chem_r_path[1] rotatedaround(point 0 of chem_r_path[1], -4) --
- point 1 of chem_r_path[1] rotatedaround(point 0 of chem_r_path[1], 4) -- cycle ;
+ save pr ; pair pr[] ;
+ pr0 := point 0 of chem_r_path[1] ;
+ pr1 := point 1 of chem_r_path[1] ;
+ chem_bb_path [1] := pr0 -- (pr1 rotatedaround(pr0,-chem_bb_angle)) -- (pr1 rotatedaround(pr0,chem_bb_angle)) -- cycle ;
chem_oe_path [1] := ((-20,0)--(10,0){up}..(20,10)..(30,0)..(40,-10)..(50.0,0)..(60,10)..(70,0)..(80,-10)..{up}(90,0)--(120,0))
- xsized (.75*chem_width[1]) shifted point 0 of chem_r_path[1] ;
+ xsized (.75*chem_width[1]) shifted pr0 ;
chem_rt_zero [1] := point .5 of chem_r_path[1] ;
chem_rtt_zero [1] := chem_rt_zero[1] rotated + (chem_angle[1]/2) ;
chem_rbt_zero [1] := chem_rt_zero[1] rotated - (chem_angle[1]/2) ;
+ % added by Alan Braslau (adapted to use shared variables):
+ save p ; pair p[] ;
+ p0 := pr1 rotatedaround(pr0, -chem_bd_angle) ;
+ p1 := pr1 rotatedaround(pr0, +chem_bd_angle) ;
+ p2 := p0 shifted - pr1 ;
+ p3 := p1 shifted - pr1 ;
+ chem_bd_path [1] :=
+ p0 -- p1 for i=chem_bd_n downto 0 :
+ -- p2 shifted (i/chem_bd_n)[pr1,pr0]
+ -- p3 shifted (i/chem_bd_n)[pr1,pr0]
+ endfor ;
+ chem_bw_path [1] :=
+ for i=0 upto chem_bw_n - 1 :
+ ((i) /chem_bw_n)[pr0,pr1] .. ((i+.25)/chem_bw_n)[pr0,pr1] shifted p2 ..
+ ((i+.50)/chem_bw_n)[pr0,pr1] .. ((i+.75)/chem_bw_n)[pr0,pr1] shifted -p2 ..
+ endfor pr1 ;
enddef ;
def chem_init_all =
@@ -726,4 +759,3 @@ def chem_init_all =
enddef ;
chem_init_all ;
-
diff --git a/Master/texmf-dist/metapost/context/base/mp-page.mp b/Master/texmf-dist/metapost/context/base/mp-page.mp
index 71ca12aa021..60bfb141754 100644
--- a/Master/texmf-dist/metapost/context/base/mp-page.mp
+++ b/Master/texmf-dist/metapost/context/base/mp-page.mp
@@ -444,4 +444,31 @@ def Enlarged (expr p, d) =
ulEnlarged (p,d) -- cycle)
enddef ;
+% New:
+
+def position_anchor_bar(expr p_b_self, p_e_self, y_b_self, y_e_self, h_b_self, d_e_self,
+ distance, linewidth, linecolor) =
+ StartPage ;
+ path p ; p :=
+ if p_b_self=p_e_self :
+ (xpart ulcorner Field[Text][Text],y_b_self+h_b_self) --
+ (xpart llcorner Field[Text][Text],y_e_self-d_e_self) ;
+ elseif RealPageNumber=p_b_self :
+ (xpart ulcorner Field[Text][Text],y_b_self+h_b_self) --
+ (llcorner Field[Text][Text]) ;
+ elseif RealPageNumber=p_e_self :
+ (ulcorner Field[Text][Text]) --
+ (xpart llcorner Field[Text][Text],y_e_self-d_e_self) ;
+ else :
+ (ulcorner Field[Text][Text]) --
+ (llcorner Field[Text][Text]) ;
+ fi ;
+ p := p shifted (-llcorner Field[Text][Text]-(distance,0)) ;
+ interim linecap := butt ;
+ draw p
+ withpen pencircle scaled linewidth
+ withcolor linecolor ;
+ StopPage ;
+enddef ;
+
endinput ;
diff --git a/Master/texmf-dist/metapost/context/base/mp-text.mp b/Master/texmf-dist/metapost/context/base/mp-text.mp
index efba39d7d1f..60e16c09bbb 100644
--- a/Master/texmf-dist/metapost/context/base/mp-text.mp
+++ b/Master/texmf-dist/metapost/context/base/mp-text.mp
@@ -107,6 +107,9 @@ enddef ;
pair laboff.origin ; laboff.origin = (0,0) ; % (infinity,infinity) ;
pair laboff.raw ; laboff.raw = (0,0) ; % (infinity,infinity) ;
+laboff.origin = (0,0) ; labxf.origin := 0 ; labyf.origin := 0 ;
+laboff.raw = (0,0) ; labxf.raw := 0 ; labyf.raw := 0 ;
+
vardef thelabel@#(expr s, z) =
save p ; picture p ;
p = s if not picture s : infont defaultfont scaled defaultscale fi ;
diff --git a/Master/texmf-dist/metapost/context/base/mp-tool.mp b/Master/texmf-dist/metapost/context/base/mp-tool.mp
index aa3d77f263b..1a748baf9ea 100644
--- a/Master/texmf-dist/metapost/context/base/mp-tool.mp
+++ b/Master/texmf-dist/metapost/context/base/mp-tool.mp
@@ -21,6 +21,8 @@ if known context_tool : endinput ; fi ;
boolean context_tool ; context_tool := true ;
+let @## = @# ;
+
%D New, version number testing:
%D
%D \starttyping
diff --git a/Master/texmf-dist/metapost/context/font/punkfont.mp b/Master/texmf-dist/metapost/context/font/punkfont.mp
index a96e2e29fb2..e57499859c8 100644
--- a/Master/texmf-dist/metapost/context/font/punkfont.mp
+++ b/Master/texmf-dist/metapost/context/font/punkfont.mp
@@ -63,6 +63,15 @@ if unknown punk_font_loaded :
path dot_pen_path ;
dot_pen_path := tensepath makepath currentpen ;
+% px# := .8pt# ; % horizontal thickness of pen
+% define_pixels(u,dev) ;
+% define_blacker_pixels(px,py,dot) ;
+% pickup pencircle xscaled 1.25px yscaled 1.25py ;
+% punk_pen := savepen ;
+% pickup pencircle scaled 1.25dot ;
+% path dot_pen_path ;
+% dot_pen_path := tensepath makepath currentpen ;
+
defaultcolormodel := 1 ;
def beginpunkchar(expr c,n,h,v) = % code $c$; width is $n$ units
@@ -331,19 +340,19 @@ z1=pp(1.5u,0); z2=pp(1.5u,h); z3=pp(w-1.5u,h); z4=pp(w-1.5u,0);
pd z1; pd z4; draw z1--z2--z3--z4; % stems and bar
endchar;
-beginpunkchar(930,13,1,1); % $\Sigma$
+beginpunkchar(931,13,1,1); % $\Sigma$
z1=pp(w-u,h); z2=pp(u,h); z3=pp(.5w-u,.5h); z4=pp(u,0); z5=pp(w-u,0);
pd z1; pd z5; draw z1--z2{.5[z4,z5]-z2}..z3--z4--z5; % arms and diagonals
endchar;
-beginpunkchar(932,15,1,.5); % $\Upsilon$
+beginpunkchar(933,15,1,.5); % $\Upsilon$
z1=pp(u,.8h); z2=pp(.3w,h); z3=pp(.5w,.5h); z4=pp(.5w,0);
pd z1; pd z4; draw z1..z2..tension2..z3---z4; % left arc and stem
z5=pp(w-u,.8h); z6=pp(.7w,h);
pd z5; draw z5..z6..tension2..{z4-z3}z3; % right arc
endchar;
-beginpunkchar(933,13,1,2); % $\Phi$
+beginpunkchar(934,13,1,2); % $\Phi$
z1=pp(.5w,h); z2=pp(.5w,0); pd z1; pd z2; draw z1--z2; % stem
z3=pp(.5w,2/3h); z4=pp(u,.5h); z5=pp(.5w,1/4h); z6=pp(w-u,.5h);
pd z3; draw z3..z4..z5..z6..z3; % bowl
diff --git a/Master/texmf-dist/scripts/context/lua/luatools.lua b/Master/texmf-dist/scripts/context/lua/luatools.lua
index 433d1b8dc0a..1d87322c108 100755
--- a/Master/texmf-dist/scripts/context/lua/luatools.lua
+++ b/Master/texmf-dist/scripts/context/lua/luatools.lua
@@ -39,13 +39,16 @@ do -- create closure to overcome 200 locals limit
if not modules then modules = { } end modules ['l-string'] = {
version = 1.001,
- comment = "companion to luat-lib.tex",
+ comment = "companion to luat-lib.mkiv",
author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
copyright = "PRAGMA ADE / ConTeXt Development Team",
license = "see context related readme files"
}
-local sub, gsub, find, match, gmatch, format, char, byte, rep = string.sub, string.gsub, string.find, string.match, string.gmatch, string.format, string.char, string.byte, string.rep
+local sub, gsub, find, match, gmatch, format, char, byte, rep, lower = string.sub, string.gsub, string.find, string.match, string.gmatch, string.format, string.char, string.byte, string.rep, string.lower
+local lpegmatch = lpeg.match
+
+-- some functions may disappear as they are not used anywhere
if not string.split then
@@ -85,8 +88,16 @@ function string:unquote()
return (gsub(self,"^([\"\'])(.*)%1$","%2"))
end
+--~ function string:unquote()
+--~ if find(self,"^[\'\"]") then
+--~ return sub(self,2,-2)
+--~ else
+--~ return self
+--~ end
+--~ end
+
function string:quote() -- we could use format("%q")
- return '"' .. self:unquote() .. '"'
+ return format("%q",self)
end
function string:count(pattern) -- variant 3
@@ -106,12 +117,23 @@ function string:limit(n,sentinel)
end
end
-function string:strip()
- return (gsub(self,"^%s*(.-)%s*$", "%1"))
+--~ function string:strip() -- the .- is quite efficient
+--~ -- return match(self,"^%s*(.-)%s*$") or ""
+--~ -- return match(self,'^%s*(.*%S)') or '' -- posted on lua list
+--~ return find(s,'^%s*$') and '' or match(s,'^%s*(.*%S)')
+--~ end
+
+do -- roberto's variant:
+ local space = lpeg.S(" \t\v\n")
+ local nospace = 1 - space
+ local stripper = space^0 * lpeg.C((space^0 * nospace^1)^0)
+ function string.strip(str)
+ return lpegmatch(stripper,str) or ""
+ end
end
function string:is_empty()
- return not find(find,"%S")
+ return not find(self,"%S")
end
function string:enhance(pattern,action)
@@ -145,14 +167,14 @@ if not string.characters then
local function nextchar(str, index)
index = index + 1
- return (index <= #str) and index or nil, str:sub(index,index)
+ return (index <= #str) and index or nil, sub(str,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, byte(str:sub(index,index))
+ return (index <= #str) and index or nil, byte(sub(str,index,index))
end
function string:bytes()
return nextbyte, self, 0
@@ -165,7 +187,7 @@ end
function string:rpadd(n,chr)
local m = n-#self
if m > 0 then
- return self .. self.rep(chr or " ",m)
+ return self .. rep(chr or " ",m)
else
return self
end
@@ -174,7 +196,7 @@ end
function string:lpadd(n,chr)
local m = n-#self
if m > 0 then
- return self.rep(chr or " ",m) .. self
+ return rep(chr or " ",m) .. self
else
return self
end
@@ -222,6 +244,17 @@ function string:pattesc()
return (gsub(self,".",patterns_escapes))
end
+local simple_escapes = {
+ ["-"] = "%-",
+ ["."] = "%.",
+ ["?"] = ".",
+ ["*"] = ".*",
+}
+
+function string:simpleesc()
+ return (gsub(self,".",simple_escapes))
+end
+
function string:tohash()
local t = { }
for s in gmatch(self,"([^, ]+)") do -- lpeg
@@ -233,10 +266,10 @@ end
local pattern = lpeg.Ct(lpeg.C(1)^0)
function string:totable()
- return pattern:match(self)
+ return lpegmatch(pattern,self)
end
---~ for _, str in ipairs {
+--~ local t = {
--~ "1234567123456712345671234567",
--~ "a\tb\tc",
--~ "aa\tbb\tcc",
@@ -244,7 +277,10 @@ end
--~ "aaaa\tbbbb\tcccc",
--~ "aaaaa\tbbbbb\tccccc",
--~ "aaaaaa\tbbbbbb\tcccccc",
---~ } do print(string.tabtospace(str)) end
+--~ }
+--~ for k,v do
+--~ print(string.tabtospace(t[k]))
+--~ end
function string.tabtospace(str,tab)
-- we don't handle embedded newlines
@@ -252,7 +288,7 @@ function string.tabtospace(str,tab)
local s = find(str,"\t")
if s then
if not tab then tab = 7 end -- only when found
- local d = tab-(s-1)%tab
+ local d = tab-(s-1) % tab
if d > 0 then
str = gsub(str,"\t",rep(" ",d),1)
else
@@ -271,6 +307,25 @@ function string:compactlong() -- strips newlines and leading spaces
return self
end
+function string:striplong() -- strips newlines and leading spaces
+ self = gsub(self,"^%s*","")
+ self = gsub(self,"[\n\r]+ *","\n")
+ return self
+end
+
+function string:topattern(lowercase,strict)
+ if lowercase then
+ self = lower(self)
+ end
+ self = gsub(self,".",simple_escapes)
+ if self == "" then
+ self = ".*"
+ elseif strict then
+ self = "^" .. self .. "$"
+ end
+ return self
+end
+
end -- of closure
@@ -278,58 +333,64 @@ do -- create closure to overcome 200 locals limit
if not modules then modules = { } end modules ['l-lpeg'] = {
version = 1.001,
- comment = "companion to luat-lib.tex",
+ comment = "companion to luat-lib.mkiv",
author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
copyright = "PRAGMA ADE / ConTeXt Development Team",
license = "see context related readme files"
}
-local P, S, Ct, C, Cs, Cc = lpeg.P, lpeg.S, lpeg.Ct, lpeg.C, lpeg.Cs, lpeg.Cc
-
---~ 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 = { }
+local lpeg = require("lpeg")
+
+lpeg.patterns = lpeg.patterns or { } -- so that we can share
+local patterns = lpeg.patterns
+
+local P, R, S, Ct, C, Cs, Cc, V = lpeg.P, lpeg.R, lpeg.S, lpeg.Ct, lpeg.C, lpeg.Cs, lpeg.Cc, lpeg.V
+local match = lpeg.match
+
+local digit, sign = R('09'), S('+-')
+local cr, lf, crlf = P("\r"), P("\n"), P("\r\n")
+local utf8byte = R("\128\191")
+
+patterns.utf8byte = utf8byte
+patterns.utf8one = R("\000\127")
+patterns.utf8two = R("\194\223") * utf8byte
+patterns.utf8three = R("\224\239") * utf8byte * utf8byte
+patterns.utf8four = R("\240\244") * utf8byte * utf8byte * utf8byte
+
+patterns.digit = digit
+patterns.sign = sign
+patterns.cardinal = sign^0 * digit^1
+patterns.integer = sign^0 * digit^1
+patterns.float = sign^0 * digit^0 * P('.') * digit^1
+patterns.number = patterns.float + patterns.integer
+patterns.oct = P("0") * R("07")^1
+patterns.octal = patterns.oct
+patterns.HEX = P("0x") * R("09","AF")^1
+patterns.hex = P("0x") * R("09","af")^1
+patterns.hexadecimal = P("0x") * R("09","AF","af")^1
+patterns.lowercase = R("az")
+patterns.uppercase = R("AZ")
+patterns.letter = patterns.lowercase + patterns.uppercase
+patterns.space = S(" ")
+patterns.eol = S("\n\r")
+patterns.spacer = S(" \t\f\v") -- + string.char(0xc2, 0xa0) if we want utf (cf mail roberto)
+patterns.newline = crlf + cr + lf
+patterns.nonspace = 1 - patterns.space
+patterns.nonspacer = 1 - patterns.spacer
+patterns.whitespace = patterns.eol + patterns.spacer
+patterns.nonwhitespace = 1 - patterns.whitespace
+patterns.utf8 = patterns.utf8one + patterns.utf8two + patterns.utf8three + patterns.utf8four
+patterns.utfbom = P('\000\000\254\255') + P('\255\254\000\000') + P('\255\254') + P('\254\255') + P('\239\187\191')
function lpeg.anywhere(pattern) --slightly adapted from website
- return P { P(pattern) + 1 * lpeg.V(1) }
-end
-
-function lpeg.startswith(pattern) --slightly adapted
- return P(pattern)
+ return P { P(pattern) + 1 * V(1) } -- why so complex?
end
function lpeg.splitter(pattern, action)
return (((1-P(pattern))^1)/action+1)^0
end
--- variant:
-
---~ local parser = lpeg.Ct(lpeg.splitat(newline))
-
-local crlf = P("\r\n")
-local cr = P("\r")
-local lf = P("\n")
-local space = S(" \t\f\v") -- + string.char(0xc2, 0xa0) if we want utf (cf mail roberto)
-local newline = crlf + cr + lf
-local spacing = space^0 * newline
-
+local spacing = patterns.spacer^0 * patterns.newline -- sort of strip
local empty = spacing * Cc("")
local nonempty = Cs((1-spacing)^1) * spacing^-1
local content = (empty + nonempty)^1
@@ -337,15 +398,15 @@ local content = (empty + nonempty)^1
local capture = Ct(content^0)
function string:splitlines()
- return capture:match(self)
+ return match(capture,self)
end
-lpeg.linebyline = content -- better make a sublibrary
+patterns.textline = content
---~ local p = lpeg.splitat("->",false) print(p:match("oeps->what->more")) -- oeps what more
---~ local p = lpeg.splitat("->",true) print(p:match("oeps->what->more")) -- oeps what->more
---~ local p = lpeg.splitat("->",false) print(p:match("oeps")) -- oeps
---~ local p = lpeg.splitat("->",true) print(p:match("oeps")) -- oeps
+--~ local p = lpeg.splitat("->",false) print(match(p,"oeps->what->more")) -- oeps what more
+--~ local p = lpeg.splitat("->",true) print(match(p,"oeps->what->more")) -- oeps what->more
+--~ local p = lpeg.splitat("->",false) print(match(p,"oeps")) -- oeps
+--~ local p = lpeg.splitat("->",true) print(match(p,"oeps")) -- oeps
local splitters_s, splitters_m = { }, { }
@@ -355,7 +416,7 @@ local function splitat(separator,single)
separator = P(separator)
if single then
local other, any = C((1 - separator)^0), P(1)
- splitter = other * (separator * C(any^0) + "")
+ splitter = other * (separator * C(any^0) + "") -- ?
splitters_s[separator] = splitter
else
local other = C((1 - separator)^0)
@@ -370,15 +431,72 @@ lpeg.splitat = splitat
local cache = { }
+function lpeg.split(separator,str)
+ local c = cache[separator]
+ if not c then
+ c = Ct(splitat(separator))
+ cache[separator] = c
+ end
+ return match(c,str)
+end
+
function string:split(separator)
local c = cache[separator]
if not c then
c = Ct(splitat(separator))
cache[separator] = c
end
- return c:match(self)
+ return match(c,self)
+end
+
+lpeg.splitters = cache
+
+local cache = { }
+
+function lpeg.checkedsplit(separator,str)
+ local c = cache[separator]
+ if not c then
+ separator = P(separator)
+ local other = C((1 - separator)^0)
+ c = Ct(separator^0 * other * (separator^1 * other)^0)
+ cache[separator] = c
+ end
+ return match(c,str)
+end
+
+function string:checkedsplit(separator)
+ local c = cache[separator]
+ if not c then
+ separator = P(separator)
+ local other = C((1 - separator)^0)
+ c = Ct(separator^0 * other * (separator^1 * other)^0)
+ cache[separator] = c
+ end
+ return match(c,self)
end
+--~ function lpeg.append(list,pp)
+--~ local p = pp
+--~ for l=1,#list do
+--~ if p then
+--~ p = p + P(list[l])
+--~ else
+--~ p = P(list[l])
+--~ end
+--~ end
+--~ return p
+--~ end
+
+--~ from roberto's site:
+
+local f1 = string.byte
+
+local function f2(s) local c1, c2 = f1(s,1,2) return c1 * 64 + c2 - 12416 end
+local function f3(s) local c1, c2, c3 = f1(s,1,3) return (c1 * 64 + c2) * 64 + c3 - 925824 end
+local function f4(s) local c1, c2, c3, c4 = f1(s,1,4) return ((c1 * 64 + c2) * 64 + c3) * 64 + c4 - 63447168 end
+
+patterns.utf8byte = patterns.utf8one/f1 + patterns.utf8two/f2 + patterns.utf8three/f3 + patterns.utf8four/f4
+
end -- of closure
@@ -386,7 +504,7 @@ do -- create closure to overcome 200 locals limit
if not modules then modules = { } end modules ['l-table'] = {
version = 1.001,
- comment = "companion to luat-lib.tex",
+ comment = "companion to luat-lib.mkiv",
author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
copyright = "PRAGMA ADE / ConTeXt Development Team",
license = "see context related readme files"
@@ -395,9 +513,10 @@ if not modules then modules = { } end modules ['l-table'] = {
table.join = table.concat
local concat, sort, insert, remove = table.concat, table.sort, table.insert, table.remove
-local format, find, gsub, lower, dump = string.format, string.find, string.gsub, string.lower, string.dump
+local format, find, gsub, lower, dump, match = string.format, string.find, string.gsub, string.lower, string.dump, string.match
local getmetatable, setmetatable = getmetatable, setmetatable
-local type, next, tostring, ipairs = type, next, tostring, ipairs
+local type, next, tostring, tonumber, ipairs = type, next, tostring, tonumber, ipairs
+local unpack = unpack or table.unpack
function table.strip(tab)
local lst = { }
@@ -412,6 +531,14 @@ function table.strip(tab)
return lst
end
+function table.keys(t)
+ local k = { }
+ for key, _ in next, t do
+ k[#k+1] = key
+ end
+ return k
+end
+
local function compare(a,b)
return (tostring(a) < tostring(b))
end
@@ -455,7 +582,7 @@ end
table.sortedkeys = sortedkeys
table.sortedhashkeys = sortedhashkeys
-function table.sortedpairs(t)
+function table.sortedhash(t)
local s = sortedhashkeys(t) -- maybe just sortedkeys
local n = 0
local function kv(s)
@@ -466,6 +593,8 @@ function table.sortedpairs(t)
return kv, s
end
+table.sortedpairs = table.sortedhash
+
function table.append(t, list)
for _,v in next, list do
insert(t,v)
@@ -588,18 +717,18 @@ end
-- slower than #t on indexed tables (#t only returns the size of the numerically indexed slice)
-function table.is_empty(t)
+function table.is_empty(t) -- obolete, use inline code instead
return not t or not next(t)
end
-function table.one_entry(t)
+function table.one_entry(t) -- obolete, use inline code instead
local n = next(t)
return n and not next(t,n)
end
-function table.starts_at(t)
- return ipairs(t,1)(t,0)
-end
+--~ function table.starts_at(t) -- obsolete, not nice
+--~ return ipairs(t,1)(t,0)
+--~ end
function table.tohash(t,value)
local h = { }
@@ -677,6 +806,8 @@ end
--
-- local propername = lpeg.P(lpeg.R("AZ","az","__") * lpeg.R("09","AZ","az", "__")^0 * lpeg.P(-1) )
+-- problem: there no good number_to_string converter with the best resolution
+
local function do_serialize(root,name,depth,level,indexed)
if level > 0 then
depth = depth .. " "
@@ -699,8 +830,9 @@ local function do_serialize(root,name,depth,level,indexed)
handle(format("%s{",depth))
end
end
+ -- we could check for k (index) being number (cardinal)
if root and next(root) then
- local first, last = nil, 0 -- #root cannot be trusted here
+ local first, last = nil, 0 -- #root cannot be trusted here (will be ok in 5.2 when ipairs is gone)
if compact then
-- NOT: for k=1,#root do (we need to quit at nil)
for k,v in ipairs(root) do -- can we use next?
@@ -721,10 +853,10 @@ local function do_serialize(root,name,depth,level,indexed)
if hexify then
handle(format("%s 0x%04X,",depth,v))
else
- handle(format("%s %s,",depth,v))
+ handle(format("%s %s,",depth,v)) -- %.99g
end
elseif t == "string" then
- if reduce and (find(v,"^[%-%+]?[%d]-%.?[%d+]$") == 1) then
+ if reduce and tonumber(v) then
handle(format("%s %s,",depth,v))
else
handle(format("%s %q,",depth,v))
@@ -761,29 +893,29 @@ local function do_serialize(root,name,depth,level,indexed)
--~ if hexify then
--~ handle(format("%s %s=0x%04X,",depth,key(k),v))
--~ else
- --~ handle(format("%s %s=%s,",depth,key(k),v))
+ --~ handle(format("%s %s=%s,",depth,key(k),v)) -- %.99g
--~ end
if type(k) == "number" then -- or find(k,"^%d+$") then
if hexify then
handle(format("%s [0x%04X]=0x%04X,",depth,k,v))
else
- handle(format("%s [%s]=%s,",depth,k,v))
+ handle(format("%s [%s]=%s,",depth,k,v)) -- %.99g
end
elseif noquotes and not reserved[k] and find(k,"^%a[%w%_]*$") then
if hexify then
handle(format("%s %s=0x%04X,",depth,k,v))
else
- handle(format("%s %s=%s,",depth,k,v))
+ handle(format("%s %s=%s,",depth,k,v)) -- %.99g
end
else
if hexify then
handle(format("%s [%q]=0x%04X,",depth,k,v))
else
- handle(format("%s [%q]=%s,",depth,k,v))
+ handle(format("%s [%q]=%s,",depth,k,v)) -- %.99g
end
end
elseif t == "string" then
- if reduce and (find(v,"^[%-%+]?[%d]-%.?[%d+]$") == 1) then
+ if reduce and tonumber(v) then
--~ handle(format("%s %s=%s,",depth,key(k),v))
if type(k) == "number" then -- or find(k,"^%d+$") then
if hexify then
@@ -992,7 +1124,7 @@ function table.tofile(filename,root,name,reduce,noquotes,hexify)
end
end
-local function flatten(t,f,complete)
+local function flatten(t,f,complete) -- is this used? meybe a variant with next, ...
for i=1,#t do
local v = t[i]
if type(v) == "table" then
@@ -1021,6 +1153,24 @@ end
table.flatten_one_level = table.unnest
+-- a better one:
+
+local function flattened(t,f)
+ if not f then
+ f = { }
+ end
+ for k, v in next, t do
+ if type(v) == "table" then
+ flattened(v,f)
+ else
+ f[k] = v
+ end
+ end
+ return f
+end
+
+table.flattened = flattened
+
-- the next three may disappear
function table.remove_value(t,value) -- todo: n
@@ -1156,7 +1306,7 @@ function table.clone(t,p) -- t is optional or nil or table
elseif not t then
t = { }
end
- setmetatable(t, { __index = function(_,key) return p[key] end })
+ setmetatable(t, { __index = function(_,key) return p[key] end }) -- why not __index = p ?
return t
end
@@ -1184,21 +1334,35 @@ function table.reverse(t)
return tt
end
---~ function table.keys(t)
---~ local k = { }
---~ for k,_ in next, t do
---~ k[#k+1] = k
---~ end
---~ return k
---~ end
+function table.insert_before_value(t,value,extra)
+ for i=1,#t do
+ if t[i] == extra then
+ remove(t,i)
+ end
+ end
+ for i=1,#t do
+ if t[i] == value then
+ insert(t,i,extra)
+ return
+ end
+ end
+ insert(t,1,extra)
+end
---~ function table.keys_as_string(t)
---~ local k = { }
---~ for k,_ in next, t do
---~ k[#k+1] = k
---~ end
---~ return concat(k,"")
---~ end
+function table.insert_after_value(t,value,extra)
+ for i=1,#t do
+ if t[i] == extra then
+ remove(t,i)
+ end
+ end
+ for i=1,#t do
+ if t[i] == value then
+ insert(t,i+1,extra)
+ return
+ end
+ end
+ insert(t,#t+1,extra)
+end
end -- of closure
@@ -1207,13 +1371,13 @@ do -- create closure to overcome 200 locals limit
if not modules then modules = { } end modules ['l-io'] = {
version = 1.001,
- comment = "companion to luat-lib.tex",
+ comment = "companion to luat-lib.mkiv",
author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
copyright = "PRAGMA ADE / ConTeXt Development Team",
license = "see context related readme files"
}
-local byte = string.byte
+local byte, find, gsub = string.byte, string.find, string.gsub
if string.find(os.getenv("PATH"),";") then
io.fileseparator, io.pathseparator = "\\", ";"
@@ -1242,7 +1406,7 @@ function io.savedata(filename,data,joiner)
elseif type(data) == "function" then
data(f)
else
- f:write(data)
+ f:write(data or "")
end
f:close()
return true
@@ -1371,20 +1535,21 @@ function io.ask(question,default,options)
end
io.write(string.format(" "))
local answer = io.read()
- answer = answer:gsub("^%s*(.*)%s*$","%1")
+ answer = gsub(answer,"^%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
+ for k=1,#options do
+ if options[k] == answer then
return answer
end
end
local pattern = "^" .. answer
- for _,v in pairs(options) do
- if v:find(pattern) then
+ for k=1,#options do
+ local v = options[k]
+ if find(v,pattern) then
return v
end
end
@@ -1399,20 +1564,22 @@ do -- create closure to overcome 200 locals limit
if not modules then modules = { } end modules ['l-number'] = {
version = 1.001,
- comment = "companion to luat-lib.tex",
+ comment = "companion to luat-lib.mkiv",
author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
copyright = "PRAGMA ADE / ConTeXt Development Team",
license = "see context related readme files"
}
-local format = string.format
+local tostring = tostring
+local format, floor, insert, match = string.format, math.floor, table.insert, string.match
+local lpegmatch = lpeg.match
number = number or { }
-- a,b,c,d,e,f = number.toset(100101)
function number.toset(n)
- return (tostring(n)):match("(.?)(.?)(.?)(.?)(.?)(.?)(.?)(.?)")
+ return match(tostring(n),"(.?)(.?)(.?)(.?)(.?)(.?)(.?)(.?)")
end
function number.toevenhex(n)
@@ -1438,10 +1605,21 @@ end
local one = lpeg.C(1-lpeg.S(''))^1
function number.toset(n)
- return one:match(tostring(n))
+ return lpegmatch(one,tostring(n))
end
-
+function number.bits(n,zero)
+ local t, i = { }, (zero and 0) or 1
+ while n > 0 do
+ local m = n % 2
+ if m > 0 then
+ insert(t,1,i)
+ end
+ n = floor(n/2)
+ i = i + 1
+ end
+ return t
+end
end -- of closure
@@ -1450,7 +1628,7 @@ do -- create closure to overcome 200 locals limit
if not modules then modules = { } end modules ['l-set'] = {
version = 1.001,
- comment = "companion to luat-lib.tex",
+ comment = "companion to luat-lib.mkiv",
author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
copyright = "PRAGMA ADE / ConTeXt Development Team",
license = "see context related readme files"
@@ -1540,46 +1718,63 @@ do -- create closure to overcome 200 locals limit
if not modules then modules = { } end modules ['l-os'] = {
version = 1.001,
- comment = "companion to luat-lub.tex",
+ comment = "companion to luat-lib.mkiv",
author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
copyright = "PRAGMA ADE / ConTeXt Development Team",
license = "see context related readme files"
}
-local find = string.find
+-- maybe build io.flush in os.execute
+
+local find, format, gsub = string.find, string.format, string.gsub
+local random, ceil = math.random, math.ceil
+
+local execute, spawn, exec, ioflush = os.execute, os.spawn or os.execute, os.exec or os.execute, io.flush
+
+function os.execute(...) ioflush() return execute(...) end
+function os.spawn (...) ioflush() return spawn (...) end
+function os.exec (...) ioflush() return exec (...) end
function os.resultof(command)
- return io.popen(command,"r"):read("*all")
+ ioflush() -- else messed up logging
+ local handle = io.popen(command,"r")
+ if not handle then
+ -- print("unknown command '".. command .. "' in os.resultof")
+ return ""
+ else
+ return handle:read("*all") or ""
+ end
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)
+--~ os.type : windows | unix (new, we already guessed os.platform)
+--~ os.name : windows | msdos | linux | macosx | solaris | .. | generic (new)
+--~ os.platform : extended os.name with architecture
if not io.fileseparator then
if find(os.getenv("PATH"),";") then
- io.fileseparator, io.pathseparator, os.platform = "\\", ";", os.type or "windows"
+ io.fileseparator, io.pathseparator, os.type = "\\", ";", os.type or "mswin"
else
- io.fileseparator, io.pathseparator, os.platform = "/" , ":", os.type or "unix"
+ io.fileseparator, io.pathseparator, os.type = "/" , ":", os.type or "unix"
end
end
-os.platform = os.platform or os.type or (io.pathseparator == ";" and "windows") or "unix"
+os.type = os.type or (io.pathseparator == ";" and "windows") or "unix"
+os.name = os.name or (os.type == "windows" and "mswin" ) or "linux"
+
+if os.type == "windows" then
+ os.libsuffix, os.binsuffix = 'dll', 'exe'
+else
+ os.libsuffix, os.binsuffix = 'so', ''
+end
function os.launch(str)
- if os.platform == "windows" then
+ if os.type == "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
@@ -1609,64 +1804,218 @@ end
--~ print(os.date("%H:%M:%S",os.gettimeofday()))
--~ print(os.date("%H:%M:%S",os.time()))
-os.arch = os.arch or function()
- local a = os.resultof("uname -m") or "linux"
- os.arch = function()
- return a
+-- no need for function anymore as we have more clever code and helpers now
+-- this metatable trickery might as well disappear
+
+os.resolvers = os.resolvers or { }
+
+local resolvers = os.resolvers
+
+local osmt = getmetatable(os) or { __index = function(t,k) t[k] = "unset" return "unset" end } -- maybe nil
+local osix = osmt.__index
+
+osmt.__index = function(t,k)
+ return (resolvers[k] or osix)(t,k)
+end
+
+setmetatable(os,osmt)
+
+if not os.setenv then
+
+ -- we still store them but they won't be seen in
+ -- child processes although we might pass them some day
+ -- using command concatination
+
+ local env, getenv = { }, os.getenv
+
+ function os.setenv(k,v)
+ env[k] = v
end
- return a
+
+ function os.getenv(k)
+ return env[k] or getenv(k)
+ end
+
end
-local platform
+-- we can use HOSTTYPE on some platforms
-function os.currentplatform(name,default)
- if not platform then
- local name = os.name or os.platform or name -- os.name is built in, os.platform is mine
- if not name then
- platform = default or "linux"
- elseif name == "windows" or name == "mswin" or name == "win32" or name == "msdos" then
- if os.getenv("PROCESSOR_ARCHITECTURE") == "AMD64" then
- platform = "mswin-64"
- else
- platform = "mswin"
- end
+local name, platform = os.name or "linux", os.getenv("MTX_PLATFORM") or ""
+
+local function guess()
+ local architecture = os.resultof("uname -m") or ""
+ if architecture ~= "" then
+ return architecture
+ end
+ architecture = os.getenv("HOSTTYPE") or ""
+ if architecture ~= "" then
+ return architecture
+ end
+ return os.resultof("echo $HOSTTYPE") or ""
+end
+
+if platform ~= "" then
+
+ os.platform = platform
+
+elseif os.type == "windows" then
+
+ -- we could set the variable directly, no function needed here
+
+ function os.resolvers.platform(t,k)
+ local platform, architecture = "", os.getenv("PROCESSOR_ARCHITECTURE") or ""
+ if find(architecture,"AMD64") then
+ platform = "mswin-64"
else
- local architecture = os.arch()
- if name == "linux" then
- if find(architecture,"x86_64") then
- platform = "linux-64"
- elseif find(architecture,"ppc") then
- platform = "linux-ppc"
- else
- platform = "linux"
- end
- elseif name == "macosx" then
- if find(architecture,"i386") then
- platform = "osx-intel"
- else
- platform = "osx-ppc"
- end
- elseif name == "sunos" then
- if find(architecture,"sparc") then
- platform = "solaris-sparc"
- else -- if architecture == 'i86pc'
- platform = "solaris-intel"
- end
- elseif name == "freebsd" then
- if find(architecture,"amd64") then
- platform = "freebsd-amd64"
- else
- platform = "freebsd"
- end
- else
- platform = default or name
- end
+ platform = "mswin"
end
- function os.currentplatform()
- return platform
+ os.setenv("MTX_PLATFORM",platform)
+ os.platform = platform
+ return platform
+ end
+
+elseif name == "linux" then
+
+ function os.resolvers.platform(t,k)
+ -- we sometims have HOSTTYPE set so let's check that first
+ local platform, architecture = "", os.getenv("HOSTTYPE") or os.resultof("uname -m") or ""
+ if find(architecture,"x86_64") then
+ platform = "linux-64"
+ elseif find(architecture,"ppc") then
+ platform = "linux-ppc"
+ else
+ platform = "linux"
+ end
+ os.setenv("MTX_PLATFORM",platform)
+ os.platform = platform
+ return platform
+ end
+
+elseif name == "macosx" then
+
+ --[[
+ Identifying the architecture of OSX is quite a mess and this
+ is the best we can come up with. For some reason $HOSTTYPE is
+ a kind of pseudo environment variable, not known to the current
+ environment. And yes, uname cannot be trusted either, so there
+ is a change that you end up with a 32 bit run on a 64 bit system.
+ Also, some proper 64 bit intel macs are too cheap (low-end) and
+ therefore not permitted to run the 64 bit kernel.
+ ]]--
+
+ function os.resolvers.platform(t,k)
+ -- local platform, architecture = "", os.getenv("HOSTTYPE") or ""
+ -- if architecture == "" then
+ -- architecture = os.resultof("echo $HOSTTYPE") or ""
+ -- end
+ local platform, architecture = "", os.resultof("echo $HOSTTYPE") or ""
+ if architecture == "" then
+ -- print("\nI have no clue what kind of OSX you're running so let's assume an 32 bit intel.\n")
+ platform = "osx-intel"
+ elseif find(architecture,"i386") then
+ platform = "osx-intel"
+ elseif find(architecture,"x86_64") then
+ platform = "osx-64"
+ else
+ platform = "osx-ppc"
+ end
+ os.setenv("MTX_PLATFORM",platform)
+ os.platform = platform
+ return platform
+ end
+
+elseif name == "sunos" then
+
+ function os.resolvers.platform(t,k)
+ local platform, architecture = "", os.resultof("uname -m") or ""
+ if find(architecture,"sparc") then
+ platform = "solaris-sparc"
+ else -- if architecture == 'i86pc'
+ platform = "solaris-intel"
+ end
+ os.setenv("MTX_PLATFORM",platform)
+ os.platform = platform
+ return platform
+ end
+
+elseif name == "freebsd" then
+
+ function os.resolvers.platform(t,k)
+ local platform, architecture = "", os.resultof("uname -m") or ""
+ if find(architecture,"amd64") then
+ platform = "freebsd-amd64"
+ else
+ platform = "freebsd"
+ end
+ os.setenv("MTX_PLATFORM",platform)
+ os.platform = platform
+ return platform
+ end
+
+elseif name == "kfreebsd" then
+
+ function os.resolvers.platform(t,k)
+ -- we sometims have HOSTTYPE set so let's check that first
+ local platform, architecture = "", os.getenv("HOSTTYPE") or os.resultof("uname -m") or ""
+ if find(architecture,"x86_64") then
+ platform = "kfreebsd-64"
+ else
+ platform = "kfreebsd-i386"
+ end
+ os.setenv("MTX_PLATFORM",platform)
+ os.platform = platform
+ return platform
+ end
+
+else
+
+ -- platform = "linux"
+ -- os.setenv("MTX_PLATFORM",platform)
+ -- os.platform = platform
+
+ function os.resolvers.platform(t,k)
+ local platform = "linux"
+ os.setenv("MTX_PLATFORM",platform)
+ os.platform = platform
+ return platform
+ end
+
+end
+
+-- beware, we set the randomseed
+
+-- from wikipedia: Version 4 UUIDs use a scheme relying only on random numbers. This algorithm sets the
+-- version number as well as two reserved bits. All other bits are set using a random or pseudorandom
+-- data source. Version 4 UUIDs have the form xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx with hexadecimal
+-- digits x and hexadecimal digits 8, 9, A, or B for y. e.g. f47ac10b-58cc-4372-a567-0e02b2c3d479.
+--
+-- as we don't call this function too often there is not so much risk on repetition
+
+local t = { 8, 9, "a", "b" }
+
+function os.uuid()
+ return format("%04x%04x-4%03x-%s%03x-%04x-%04x%04x%04x",
+ random(0xFFFF),random(0xFFFF),
+ random(0x0FFF),
+ t[ceil(random(4))] or 8,random(0x0FFF),
+ random(0xFFFF),
+ random(0xFFFF),random(0xFFFF),random(0xFFFF)
+ )
+end
+
+local d
+
+function os.timezone(delta)
+ d = d or tonumber(tonumber(os.date("%H")-os.date("!%H")))
+ if delta then
+ if d > 0 then
+ return format("+%02i:00",d)
+ else
+ return format("-%02i:00",-d)
end
+ else
+ return 1
end
- return platform
end
@@ -1676,7 +2025,7 @@ do -- create closure to overcome 200 locals limit
if not modules then modules = { } end modules ['l-file'] = {
version = 1.001,
- comment = "companion to luat-lib.tex",
+ comment = "companion to luat-lib.mkiv",
author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
copyright = "PRAGMA ADE / ConTeXt Development Team",
license = "see context related readme files"
@@ -1687,14 +2036,17 @@ if not modules then modules = { } end modules ['l-file'] = {
file = file or { }
local concat = table.concat
-local find, gmatch, match, gsub = string.find, string.gmatch, string.match, string.gsub
+local find, gmatch, match, gsub, sub, char = string.find, string.gmatch, string.match, string.gsub, string.sub, string.char
+local lpegmatch = lpeg.match
function file.removesuffix(filename)
return (gsub(filename,"%.[%a%d]+$",""))
end
function file.addsuffix(filename, suffix)
- if not find(filename,"%.[%a%d]+$") then
+ if not suffix or suffix == "" then
+ return filename
+ elseif not find(filename,"%.[%a%d]+$") then
return filename .. "." .. suffix
else
return filename
@@ -1717,20 +2069,39 @@ function file.nameonly(name)
return (gsub(match(name,"^.+[/\\](.-)$") or name,"%..*$",""))
end
-function file.extname(name)
- return match(name,"^.+%.([^/\\]-)$") or ""
+function file.extname(name,default)
+ return match(name,"^.+%.([^/\\]-)$") or default or ""
end
file.suffix = file.extname
---~ 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 = concat({...},"/")
+--~ pth = gsub(pth,"\\","/")
+--~ local a, b = match(pth,"^(.*://)(.*)$")
+--~ if a and b then
+--~ return a .. gsub(b,"//+","/")
+--~ end
+--~ a, b = match(pth,"^(//)(.*)$")
+--~ if a and b then
+--~ return a .. gsub(b,"//+","/")
+--~ end
+--~ return (gsub(pth,"//+","/"))
+--~ end
+
+local trick_1 = char(1)
+local trick_2 = "^" .. trick_1 .. "/+"
function file.join(...)
- local pth = concat({...},"/")
+ local lst = { ... }
+ local a, b = lst[1], lst[2]
+ if a == "" then
+ lst[1] = trick_1
+ elseif b and find(a,"^/+$") and find(b,"^/") then
+ lst[1] = ""
+ lst[2] = gsub(b,"^/+","")
+ end
+ local pth = concat(lst,"/")
pth = gsub(pth,"\\","/")
local a, b = match(pth,"^(.*://)(.*)$")
if a and b then
@@ -1740,17 +2111,28 @@ function file.join(...)
if a and b then
return a .. gsub(b,"//+","/")
end
+ pth = gsub(pth,trick_2,"")
return (gsub(pth,"//+","/"))
end
+--~ print(file.join("//","/y"))
+--~ print(file.join("/","/y"))
+--~ print(file.join("","/y"))
+--~ print(file.join("/x/","/y"))
+--~ 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.iswritable(name)
local a = lfs.attributes(name) or lfs.attributes(file.dirname(name,"."))
- return a and a.permissions:sub(2,2) == "w"
+ return a and sub(a.permissions,2,2) == "w"
end
function file.isreadable(name)
local a = lfs.attributes(name)
- return a and a.permissions:sub(1,1) == "r"
+ return a and sub(a.permissions,1,1) == "r"
end
file.is_readable = file.isreadable
@@ -1758,36 +2140,50 @@ file.is_writable = file.iswritable
-- todo: lpeg
-function file.split_path(str)
- local t = { }
- str = gsub(str,"\\", "/")
- str = gsub(str,"(%a):([;/])", "%1\001%2")
- for name in gmatch(str,"([^;:]+)") do
- if name ~= "" then
- t[#t+1] = gsub(name,"\001",":")
- end
- end
- return t
+--~ function file.split_path(str)
+--~ local t = { }
+--~ str = gsub(str,"\\", "/")
+--~ str = gsub(str,"(%a):([;/])", "%1\001%2")
+--~ for name in gmatch(str,"([^;:]+)") do
+--~ if name ~= "" then
+--~ t[#t+1] = gsub(name,"\001",":")
+--~ end
+--~ end
+--~ return t
+--~ end
+
+local checkedsplit = string.checkedsplit
+
+function file.split_path(str,separator)
+ str = gsub(str,"\\","/")
+ return checkedsplit(str,separator or io.pathseparator)
end
function file.join_path(tab)
return concat(tab,io.pathseparator) -- can have trailing //
end
+-- we can hash them weakly
+
function file.collapse_path(str)
- str = gsub(str,"/%./","/")
- local n, m = 1, 1
- while n > 0 or m > 0 do
- str, n = gsub(str,"[^/%.]+/%.%.$","")
- str, m = gsub(str,"[^/%.]+/%.%./","")
- end
- str = gsub(str,"([^/])/$","%1")
- str = gsub(str,"^%./","")
- str = gsub(str,"/%.$","")
+ str = gsub(str,"\\","/")
+ if find(str,"/") then
+ str = gsub(str,"^%./",(gsub(lfs.currentdir(),"\\","/")) .. "/") -- ./xx in qualified
+ str = gsub(str,"/%./","/")
+ local n, m = 1, 1
+ while n > 0 or m > 0 do
+ str, n = gsub(str,"[^/%.]+/%.%.$","")
+ str, m = gsub(str,"[^/%.]+/%.%./","")
+ end
+ str = gsub(str,"([^/])/$","%1")
+ -- str = gsub(str,"^%./","") -- ./xx in qualified
+ str = gsub(str,"/%.$","")
+ end
if str == "" then str = "." end
return str
end
+--~ print(file.collapse_path("/a"))
--~ print(file.collapse_path("a/./b/.."))
--~ print(file.collapse_path("a/aa/../b/bb"))
--~ print(file.collapse_path("a/../.."))
@@ -1817,27 +2213,27 @@ end
--~ local pattern = (noslashes^0 * slashes)^0 * (noperiod^1 * period)^1 * lpeg.C(noperiod^1) * -1
--~ function file.extname(name)
---~ return pattern:match(name) or ""
+--~ return lpegmatch(pattern,name) or ""
--~ end
--~ local pattern = lpeg.Cs(((period * noperiod^1 * -1)/"" + 1)^1)
--~ function file.removesuffix(name)
---~ return pattern:match(name)
+--~ return lpegmatch(pattern,name)
--~ end
--~ local pattern = (noslashes^0 * slashes)^1 * lpeg.C(noslashes^1) * -1
--~ function file.basename(name)
---~ return pattern:match(name) or name
+--~ return lpegmatch(pattern,name) or name
--~ end
--~ local pattern = (noslashes^0 * slashes)^1 * lpeg.Cp() * noslashes^1 * -1
--~ function file.dirname(name)
---~ local p = pattern:match(name)
+--~ local p = lpegmatch(pattern,name)
--~ if p then
---~ return name:sub(1,p-2)
+--~ return sub(name,1,p-2)
--~ else
--~ return ""
--~ end
@@ -1846,7 +2242,7 @@ end
--~ local pattern = (noslashes^0 * slashes)^0 * (noperiod^1 * period)^1 * lpeg.Cp() * noperiod^1 * -1
--~ function file.addsuffix(name, suffix)
---~ local p = pattern:match(name)
+--~ local p = lpegmatch(pattern,name)
--~ if p then
--~ return name
--~ else
@@ -1857,9 +2253,9 @@ end
--~ local pattern = (noslashes^0 * slashes)^0 * (noperiod^1 * period)^1 * lpeg.Cp() * noperiod^1 * -1
--~ function file.replacesuffix(name,suffix)
---~ local p = pattern:match(name)
+--~ local p = lpegmatch(pattern,name)
--~ if p then
---~ return name:sub(1,p-2) .. "." .. suffix
+--~ return sub(name,1,p-2) .. "." .. suffix
--~ else
--~ return name .. "." .. suffix
--~ end
@@ -1868,11 +2264,11 @@ end
--~ local pattern = (noslashes^0 * slashes)^0 * lpeg.Cp() * ((noperiod^1 * period)^1 * lpeg.Cp() + lpeg.P(true)) * noperiod^1 * -1
--~ function file.nameonly(name)
---~ local a, b = pattern:match(name)
+--~ local a, b = lpegmatch(pattern,name)
--~ if b then
---~ return name:sub(a,b-2)
+--~ return sub(name,a,b-2)
--~ elseif a then
---~ return name:sub(a)
+--~ return sub(name,a)
--~ else
--~ return name
--~ end
@@ -1906,11 +2302,11 @@ local rootbased = lpeg.P("/") + letter*lpeg.P(":")
-- ./name ../name /name c: :// name/name
function file.is_qualified_path(filename)
- return qualified:match(filename)
+ return lpegmatch(qualified,filename) ~= nil
end
function file.is_rootbased_path(filename)
- return rootbased:match(filename)
+ return lpegmatch(rootbased,filename) ~= nil
end
local slash = lpeg.S("\\/")
@@ -1923,16 +2319,25 @@ local base = lpeg.C((1-suffix)^0)
local pattern = (drive + lpeg.Cc("")) * (path + lpeg.Cc("")) * (base + lpeg.Cc("")) * (suffix + lpeg.Cc(""))
function file.splitname(str) -- returns drive, path, base, suffix
- return pattern:match(str)
+ return lpegmatch(pattern,str)
end
--- function test(t) for k, v in pairs(t) do print(v, "=>", file.splitname(v)) end end
+-- function test(t) for k, v in next, t do print(v, "=>", file.splitname(v)) end end
--
-- test { "c:", "c:/aa", "c:/aa/bb", "c:/aa/bb/cc", "c:/aa/bb/cc.dd", "c:/aa/bb/cc.dd.ee" }
-- test { "c:", "c:aa", "c:aa/bb", "c:aa/bb/cc", "c:aa/bb/cc.dd", "c:aa/bb/cc.dd.ee" }
-- test { "/aa", "/aa/bb", "/aa/bb/cc", "/aa/bb/cc.dd", "/aa/bb/cc.dd.ee" }
-- test { "aa", "aa/bb", "aa/bb/cc", "aa/bb/cc.dd", "aa/bb/cc.dd.ee" }
+--~ -- todo:
+--~
+--~ if os.type == "windows" then
+--~ local currentdir = lfs.currentdir
+--~ function lfs.currentdir()
+--~ return (gsub(currentdir(),"\\","/"))
+--~ end
+--~ end
+
end -- of closure
@@ -1997,7 +2402,7 @@ end
function file.loadchecksum(name)
if md5 then
local data = io.loaddata(name .. ".md5")
- return data and data:gsub("%s","")
+ return data and (gsub(data,"%s",""))
end
return nil
end
@@ -2018,14 +2423,15 @@ do -- create closure to overcome 200 locals limit
if not modules then modules = { } end modules ['l-url'] = {
version = 1.001,
- comment = "companion to luat-lib.tex",
+ comment = "companion to luat-lib.mkiv",
author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
copyright = "PRAGMA ADE / ConTeXt Development Team",
license = "see context related readme files"
}
-local char, gmatch = string.char, string.gmatch
+local char, gmatch, gsub = string.char, string.gmatch, string.gsub
local tonumber, type = tonumber, type
+local lpegmatch = lpeg.match
-- from the spec (on the web):
--
@@ -2049,7 +2455,9 @@ local hexdigit = lpeg.R("09","AF","af")
local plus = lpeg.P("+")
local escaped = (plus / " ") + (percent * lpeg.C(hexdigit * hexdigit) / tochar)
-local scheme = lpeg.Cs((escaped+(1-colon-slash-qmark-hash))^0) * colon + lpeg.Cc("")
+-- we assume schemes with more than 1 character (in order to avoid problems with windows disks)
+
+local scheme = lpeg.Cs((escaped+(1-colon-slash-qmark-hash))^2) * 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("")
@@ -2057,25 +2465,51 @@ local fragment = hash * lpeg.Cs((escaped+(1- endofstring))^0
local parser = lpeg.Ct(scheme * authority * path * query * fragment)
+-- todo: reconsider Ct as we can as well have five return values (saves a table)
+-- so we can have two parsers, one with and one without
+
function url.split(str)
- return (type(str) == "string" and parser:match(str)) or str
+ return (type(str) == "string" and lpegmatch(parser,str)) or str
end
+-- todo: cache them
+
function url.hashed(str)
local s = url.split(str)
+ local somescheme = s[1] ~= ""
return {
- scheme = (s[1] ~= "" and s[1]) or "file",
+ scheme = (somescheme and s[1]) or "file",
authority = s[2],
- path = s[3],
- query = s[4],
- fragment = s[5],
- original = str
+ path = s[3],
+ query = s[4],
+ fragment = s[5],
+ original = str,
+ noscheme = not somescheme,
}
end
+function url.hasscheme(str)
+ return url.split(str)[1] ~= ""
+end
+
+function url.addscheme(str,scheme)
+ return (url.hasscheme(str) and str) or ((scheme or "file:///") .. str)
+end
+
+function url.construct(hash)
+ local fullurl = hash.sheme .. "://".. hash.authority .. hash.path
+ if hash.query then
+ fullurl = fullurl .. "?".. hash.query
+ end
+ if hash.fragment then
+ fullurl = fullurl .. "?".. hash.fragment
+ end
+ return fullurl
+end
+
function url.filename(filename)
local t = url.hashed(filename)
- return (t.scheme == "file" and t.path:gsub("^/([a-zA-Z])([:|])/)","%1:")) or filename
+ return (t.scheme == "file" and (gsub(t.path,"^/([a-zA-Z])([:|])/)","%1:"))) or filename
end
function url.query(str)
@@ -2129,17 +2563,26 @@ do -- create closure to overcome 200 locals limit
if not modules then modules = { } end modules ['l-dir'] = {
version = 1.001,
- comment = "companion to luat-lib.tex",
+ comment = "companion to luat-lib.mkiv",
author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
copyright = "PRAGMA ADE / ConTeXt Development Team",
license = "see context related readme files"
}
+-- dir.expand_name will be merged with cleanpath and collapsepath
+
local type = type
-local find, gmatch = string.find, string.gmatch
+local find, gmatch, match, gsub = string.find, string.gmatch, string.match, string.gsub
+local lpegmatch = lpeg.match
dir = dir or { }
+-- handy
+
+function dir.current()
+ return (gsub(lfs.currentdir(),"\\","/"))
+end
+
-- optimizing for no string.find (*) does not save time
local attributes = lfs.attributes
@@ -2170,6 +2613,35 @@ end
dir.glob_pattern = glob_pattern
+local function collect_pattern(path,patt,recurse,result)
+ local ok, scanner
+ result = result or { }
+ 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 find(path,"/$") then path = path .. '/' end
+ for name in scanner do
+ local full = path .. name
+ local attr = attributes(full)
+ local mode = attr.mode
+ if mode == 'file' then
+ if find(full,patt) then
+ result[name] = attr
+ end
+ elseif recurse and (mode == "directory") and (name ~= '.') and (name ~= "..") then
+ attr.list = collect_pattern(full,patt,recurse)
+ result[name] = attr
+ end
+ end
+ end
+ return result
+end
+
+dir.collect_pattern = collect_pattern
+
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 {
@@ -2189,29 +2661,48 @@ local filter = Cs ( (
)^0 )
local function glob(str,t)
- if type(str) == "table" then
- local t = t or { }
- for s=1,#str do
- glob(str[s],t)
+ if type(t) == "function" then
+ if type(str) == "table" then
+ for s=1,#str do
+ glob(str[s],t)
+ end
+ elseif lfs.isfile(str) then
+ t(str)
+ else
+ local split = lpegmatch(pattern,str)
+ if split then
+ local root, path, base = split[1], split[2], split[3]
+ local recurse = find(base,"%*%*")
+ local start = root .. path
+ local result = lpegmatch(filter,start .. base)
+ glob_pattern(start,result,recurse,t)
+ end
end
- return t
- elseif lfs.isfile(str) then
- local t = t or { }
- t[#t+1] = str
- return t
else
- local split = pattern:match(str)
- if split then
+ if type(str) == "table" 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 = find(base,"%*%*")
- local start = root .. path
- local result = filter:match(start .. base)
- glob_pattern(start,result,recurse,action)
+ for s=1,#str do
+ glob(str[s],t)
+ end
+ return t
+ elseif lfs.isfile(str) then
+ local t = t or { }
+ t[#t+1] = str
return t
else
- return { }
+ local split = lpegmatch(pattern,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 = find(base,"%*%*")
+ local start = root .. path
+ local result = lpegmatch(filter,start .. base)
+ glob_pattern(start,result,recurse,action)
+ return t
+ else
+ return { }
+ end
end
end
end
@@ -2273,11 +2764,12 @@ end
local make_indeed = true -- false
-if string.find(os.getenv("PATH"),";") then
+if string.find(os.getenv("PATH"),";") then -- os.type == "windows"
function dir.mkdirs(...)
- local str, pth = "", ""
- for _, s in ipairs({...}) do
+ local str, pth, t = "", "", { ... }
+ for i=1,#t do
+ local s = t[i]
if s ~= "" then
if str ~= "" then
str = str .. "/" .. s
@@ -2288,13 +2780,13 @@ if string.find(os.getenv("PATH"),";") then
end
local first, middle, last
local drive = false
- first, middle, last = str:match("^(//)(//*)(.*)$")
+ first, middle, last = match(str,"^(//)(//*)(.*)$")
if first then
-- empty network path == local path
else
- first, last = str:match("^(//)/*(.-)$")
+ first, last = match(str,"^(//)/*(.-)$")
if first then
- middle, last = str:match("([^/]+)/+(.-)$")
+ middle, last = match(str,"([^/]+)/+(.-)$")
if middle then
pth = "//" .. middle
else
@@ -2302,11 +2794,11 @@ if string.find(os.getenv("PATH"),";") then
last = ""
end
else
- first, middle, last = str:match("^([a-zA-Z]:)(/*)(.-)$")
+ first, middle, last = match(str,"^([a-zA-Z]:)(/*)(.-)$")
if first then
pth, drive = first .. middle, true
else
- middle, last = str:match("^(/*)(.-)$")
+ middle, last = match(str,"^(/*)(.-)$")
if not middle then
last = str
end
@@ -2340,34 +2832,31 @@ if string.find(os.getenv("PATH"),";") then
--~ print(dir.mkdirs("///a/b/c"))
--~ print(dir.mkdirs("a/bbb//ccc/"))
- function dir.expand_name(str)
- local first, nothing, last = str:match("^(//)(//*)(.*)$")
+ function dir.expand_name(str) -- will be merged with cleanpath and collapsepath
+ local first, nothing, last = match(str,"^(//)(//*)(.*)$")
if first then
- first = lfs.currentdir() .. "/"
- first = first:gsub("\\","/")
+ first = dir.current() .. "/"
end
if not first then
- first, last = str:match("^(//)/*(.*)$")
+ first, last = match(str,"^(//)/*(.*)$")
end
if not first then
- first, last = str:match("^([a-zA-Z]:)(.*)$")
+ first, last = match(str,"^([a-zA-Z]:)(.*)$")
if first and not find(last,"^/") then
local d = lfs.currentdir()
if lfs.chdir(first) then
- first = lfs.currentdir()
- first = first:gsub("\\","/")
+ first = dir.current()
end
lfs.chdir(d)
end
end
if not first then
- first, last = lfs.currentdir(), str
- first = first:gsub("\\","/")
+ first, last = dir.current(), str
end
- last = last:gsub("//","/")
- last = last:gsub("/%./","/")
- last = last:gsub("^/*","")
- first = first:gsub("/*$","")
+ last = gsub(last,"//","/")
+ last = gsub(last,"/%./","/")
+ last = gsub(last,"^/*","")
+ first = gsub(first,"/*$","")
if last == "" then
return first
else
@@ -2378,8 +2867,9 @@ if string.find(os.getenv("PATH"),";") then
else
function dir.mkdirs(...)
- local str, pth = "", ""
- for _, s in ipairs({...}) do
+ local str, pth, t = "", "", { ... }
+ for i=1,#t do
+ local s = t[i]
if s ~= "" then
if str ~= "" then
str = str .. "/" .. s
@@ -2388,7 +2878,7 @@ else
end
end
end
- str = str:gsub("/+","/")
+ str = gsub(str,"/+","/")
if find(str,"^/") then
pth = "/"
for s in gmatch(str,"[^/]+") do
@@ -2422,12 +2912,12 @@ else
--~ print(dir.mkdirs("///a/b/c"))
--~ print(dir.mkdirs("a/bbb//ccc/"))
- function dir.expand_name(str)
+ function dir.expand_name(str) -- will be merged with cleanpath and collapsepath
if not find(str,"^/") then
str = lfs.currentdir() .. "/" .. str
end
- str = str:gsub("//","/")
- str = str:gsub("/%./","/")
+ str = gsub(str,"//","/")
+ str = gsub(str,"/%./","/")
return str
end
@@ -2442,7 +2932,7 @@ do -- create closure to overcome 200 locals limit
if not modules then modules = { } end modules ['l-boolean'] = {
version = 1.001,
- comment = "companion to luat-lib.tex",
+ comment = "companion to luat-lib.mkiv",
author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
copyright = "PRAGMA ADE / ConTeXt Development Team",
license = "see context related readme files"
@@ -2503,19 +2993,40 @@ do -- create closure to overcome 200 locals limit
if not modules then modules = { } end modules ['l-unicode'] = {
version = 1.001,
- comment = "companion to luat-lib.tex",
+ comment = "companion to luat-lib.mkiv",
author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
copyright = "PRAGMA ADE / ConTeXt Development Team",
license = "see context related readme files"
}
+if not unicode then
+
+ unicode = { utf8 = { } }
+
+ local floor, char = math.floor, string.char
+
+ function unicode.utf8.utfchar(n)
+ if n < 0x80 then
+ return char(n)
+ elseif n < 0x800 then
+ return char(0xC0 + floor(n/0x40)) .. char(0x80 + (n % 0x40))
+ elseif n < 0x10000 then
+ return char(0xE0 + floor(n/0x1000)) .. char(0x80 + (floor(n/0x40) % 0x40)) .. char(0x80 + (n % 0x40))
+ elseif n < 0x40000 then
+ return char(0xF0 + floor(n/0x40000)) .. char(0x80 + floor(n/0x1000)) .. char(0x80 + (floor(n/0x40) % 0x40)) .. char(0x80 + (n % 0x40))
+ else -- wrong:
+ -- return char(0xF1 + floor(n/0x1000000)) .. char(0x80 + floor(n/0x40000)) .. char(0x80 + floor(n/0x1000)) .. char(0x80 + (floor(n/0x40) % 0x40)) .. char(0x80 + (n % 0x40))
+ return "?"
+ end
+ end
+
+end
+
utf = utf or unicode.utf8
local concat, utfchar, utfgsub = table.concat, utf.char, utf.gsub
local char, byte, find, bytepairs = string.char, string.byte, string.find, string.bytepairs
-unicode = unicode or { }
-
-- 0 EF BB BF UTF-8
-- 1 FF FE UTF-16-little-endian
-- 2 FE FF UTF-16-big-endian
@@ -2530,14 +3041,20 @@ unicode.utfname = {
[4] = 'utf-32-be'
}
-function unicode.utftype(f) -- \000 fails !
+-- \000 fails in <= 5.0 but is valid in >=5.1 where %z is depricated
+
+function unicode.utftype(f)
local str = f:read(4)
if not str then
f:seek('set')
return 0
- elseif find(str,"^%z%z\254\255") then
+ -- elseif find(str,"^%z%z\254\255") then -- depricated
+ -- elseif find(str,"^\000\000\254\255") then -- not permitted and bugged
+ elseif find(str,"\000\000\254\255",1,true) then -- seems to work okay (TH)
return 4
- elseif find(str,"^\255\254%z%z") then
+ -- elseif find(str,"^\255\254%z%z") then -- depricated
+ -- elseif find(str,"^\255\254\000\000") then -- not permitted and bugged
+ elseif find(str,"\255\254\000\000",1,true) then -- seems to work okay (TH)
return 3
elseif find(str,"^\254\255") then
f:seek('set',2)
@@ -2681,7 +3198,7 @@ do -- create closure to overcome 200 locals limit
if not modules then modules = { } end modules ['l-math'] = {
version = 1.001,
- comment = "companion to luat-lib.tex",
+ comment = "companion to luat-lib.mkiv",
author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
copyright = "PRAGMA ADE / ConTeXt Development Team",
license = "see context related readme files"
@@ -2728,7 +3245,7 @@ do -- create closure to overcome 200 locals limit
if not modules then modules = { } end modules ['l-utils'] = {
version = 1.001,
- comment = "companion to luat-lib.tex",
+ comment = "companion to luat-lib.mkiv",
author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
copyright = "PRAGMA ADE / ConTeXt Development Team",
license = "see context related readme files"
@@ -2736,6 +3253,10 @@ if not modules then modules = { } end modules ['l-utils'] = {
-- hm, quite unreadable
+local gsub = string.gsub
+local concat = table.concat
+local type, next = type, next
+
if not utils then utils = { } end
if not utils.merger then utils.merger = { } end
if not utils.lua then utils.lua = { } end
@@ -2773,7 +3294,7 @@ function utils.merger._self_load_(name)
end
if data and utils.merger.strip_comment then
-- saves some 20K
- data = data:gsub("%-%-~[^\n\r]*[\r\n]", "")
+ data = gsub(data,"%-%-~[^\n\r]*[\r\n]", "")
end
return data or ""
end
@@ -2791,7 +3312,7 @@ end
function utils.merger._self_swap_(data,code)
if data ~= "" then
- return (data:gsub(utils.merger.pattern, function(s)
+ return (gsub(data,utils.merger.pattern, function(s)
return "\n\n" .. "-- "..utils.merger.m_begin .. "\n" .. code .. "\n" .. "-- "..utils.merger.m_end .. "\n\n"
end, 1))
else
@@ -2801,8 +3322,8 @@ end
--~ stripper:
--~
---~ data = string.gsub(data,"%-%-~[^\n]*\n","")
---~ data = string.gsub(data,"\n\n+","\n")
+--~ data = gsub(data,"%-%-~[^\n]*\n","")
+--~ data = gsub(data,"\n\n+","\n")
function utils.merger._self_libs_(libs,list)
local result, f, frozen = { }, nil, false
@@ -2810,9 +3331,10 @@ function utils.merger._self_libs_(libs,list)
if type(libs) == 'string' then libs = { libs } end
if type(list) == 'string' then list = { list } end
local foundpath = nil
- for _, lib in ipairs(libs) do
- for _, pth in ipairs(list) do
- pth = string.gsub(pth,"\\","/") -- file.clean_path
+ for i=1,#libs do
+ local lib = libs[i]
+ for j=1,#list do
+ local pth = gsub(list[j],"\\","/") -- file.clean_path
utils.report("checking library path %s",pth)
local name = pth .. "/" .. lib
if lfs.isfile(name) then
@@ -2824,7 +3346,8 @@ function utils.merger._self_libs_(libs,list)
if foundpath then
utils.report("using library path %s",foundpath)
local right, wrong = { }, { }
- for _, lib in ipairs(libs) do
+ for i=1,#libs do
+ local lib = libs[i]
local fullname = foundpath .. "/" .. lib
if lfs.isfile(fullname) then
-- right[#right+1] = lib
@@ -2838,15 +3361,15 @@ function utils.merger._self_libs_(libs,list)
end
end
if #right > 0 then
- utils.report("merged libraries: %s",table.concat(right," "))
+ utils.report("merged libraries: %s",concat(right," "))
end
if #wrong > 0 then
- utils.report("skipped libraries: %s",table.concat(wrong," "))
+ utils.report("skipped libraries: %s",concat(wrong," "))
end
else
utils.report("no valid library path found")
end
- return table.concat(result, "\n\n")
+ return concat(result, "\n\n")
end
function utils.merger.selfcreate(libs,list,target)
@@ -2904,16 +3427,28 @@ do -- create closure to overcome 200 locals limit
if not modules then modules = { } end modules ['l-aux'] = {
version = 1.001,
- comment = "companion to luat-lib.tex",
+ comment = "companion to luat-lib.mkiv",
author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
copyright = "PRAGMA ADE / ConTeXt Development Team",
license = "see context related readme files"
}
+-- for inline, no store split : for s in string.gmatch(str,",* *([^,]+)") do .. end
+
aux = aux or { }
local concat, format, gmatch = table.concat, string.format, string.gmatch
local tostring, type = tostring, type
+local lpegmatch = lpeg.match
+
+local P, R, V = lpeg.P, lpeg.R, lpeg.V
+
+local escape, left, right = P("\\"), P('{'), P('}')
+
+lpeg.patterns.balanced = P {
+ [1] = ((escape * (left+right)) + (1 - (left+right)) + V(2))^0,
+ [2] = left * V(1) * right
+}
local space = lpeg.P(' ')
local equal = lpeg.P("=")
@@ -2921,7 +3456,7 @@ 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 nested = lpeg.P { lbrace * (nobrace + lpeg.V(1))^0 * rbrace }
local spaces = space^0
local value = lpeg.P(lbrace * lpeg.C((nobrace + nested)^0) * rbrace) + lpeg.C((nested + (1-comma))^0)
@@ -2959,13 +3494,13 @@ function aux.make_settings_to_hash_pattern(set,how)
end
end
-function aux.settings_to_hash(str)
+function aux.settings_to_hash(str,existing)
if str and str ~= "" then
- hash = { }
+ hash = existing or { }
if moretolerant then
- pattern_b_s:match(str)
+ lpegmatch(pattern_b_s,str)
else
- pattern_a_s:match(str)
+ lpegmatch(pattern_a_s,str)
end
return hash
else
@@ -2973,39 +3508,41 @@ function aux.settings_to_hash(str)
end
end
-function aux.settings_to_hash_tolerant(str)
+function aux.settings_to_hash_tolerant(str,existing)
if str and str ~= "" then
- hash = { }
- pattern_b_s:match(str)
+ hash = existing or { }
+ lpegmatch(pattern_b_s,str)
return hash
else
return { }
end
end
-function aux.settings_to_hash_strict(str)
+function aux.settings_to_hash_strict(str,existing)
if str and str ~= "" then
- hash = { }
- pattern_c_s:match(str)
+ hash = existing or { }
+ lpegmatch(pattern_c_s,str)
return next(hash) and hash
else
return nil
end
end
-local seperator = comma * space^0
+local separator = 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)
+local pattern = lpeg.Ct(value*(separator*value)^0)
-- "aap, {noot}, mies" : outer {} removes, leading spaces ignored
aux.settings_to_array_pattern = pattern
+-- we could use a weak table as cache
+
function aux.settings_to_array(str)
if not str or str == "" then
return { }
else
- return pattern:match(str)
+ return lpegmatch(pattern,str)
end
end
@@ -3014,10 +3551,10 @@ local function set(t,v)
end
local value = lpeg.P(lpeg.Carg(1)*value) / set
-local pattern = value*(seperator*value)^0 * lpeg.Carg(1)
+local pattern = value*(separator*value)^0 * lpeg.Carg(1)
function aux.add_settings_to_array(t,str)
- return pattern:match(str, nil, t)
+ return lpegmatch(pattern,str,nil,t)
end
function aux.hash_to_string(h,separator,yes,no,strict,omit)
@@ -3065,6 +3602,13 @@ function aux.settings_to_set(str,t)
return t
end
+local value = lbrace * lpeg.C((nobrace + nested)^0) * rbrace
+local pattern = lpeg.Ct((space + value)^0)
+
+function aux.arguments_to_table(str)
+ return lpegmatch(pattern,str)
+end
+
-- temporary here
function aux.getparameters(self,class,parentclass,settings)
@@ -3073,36 +3617,31 @@ function aux.getparameters(self,class,parentclass,settings)
sc = table.clone(self[parent])
self[class] = sc
end
- aux.add_settings_to_array(sc, settings)
+ aux.settings_to_hash(settings,sc)
end
-- temporary here
-local digit = lpeg.R("09")
-local period = lpeg.P(".")
-local zero = lpeg.P("0")
-
---~ local finish = lpeg.P(-1)
---~ local nodigit = (1-digit) + finish
---~ local case_1 = (period * zero^1 * #nodigit)/"" -- .000
---~ local case_2 = (period * (1-(zero^0/"") * #nodigit)^1 * (zero^0/"") * nodigit) -- .010 .10 .100100
-
+local digit = lpeg.R("09")
+local period = lpeg.P(".")
+local zero = lpeg.P("0")
local trailingzeros = zero^0 * -digit -- suggested by Roberto R
-local case_1 = period * trailingzeros / ""
-local case_2 = period * (digit - trailingzeros)^1 * (trailingzeros / "")
-
-local number = digit^1 * (case_1 + case_2)
-local stripper = lpeg.Cs((number + 1)^0)
+local case_1 = period * trailingzeros / ""
+local case_2 = period * (digit - trailingzeros)^1 * (trailingzeros / "")
+local number = digit^1 * (case_1 + case_2)
+local stripper = lpeg.Cs((number + 1)^0)
--~ local sample = "bla 11.00 bla 11 bla 0.1100 bla 1.00100 bla 0.00 bla 0.001 bla 1.1100 bla 0.100100100 bla 0.00100100100"
--~ collectgarbage("collect")
--~ str = string.rep(sample,10000)
--~ local ts = os.clock()
---~ stripper:match(str)
---~ print(#str, os.clock()-ts, stripper:match(sample))
+--~ lpegmatch(stripper,str)
+--~ print(#str, os.clock()-ts, lpegmatch(stripper,sample))
+
+lpeg.patterns.strip_zeros = stripper
function aux.strip_zeros(str)
- return stripper:match(str)
+ return lpegmatch(stripper,str)
end
function aux.definetable(target) -- defines undefined tables
@@ -3126,6 +3665,24 @@ function aux.accesstable(target)
return t
end
+-- as we use this a lot ...
+
+--~ function aux.cachefunction(action,weak)
+--~ local cache = { }
+--~ if weak then
+--~ setmetatable(cache, { __mode = "kv" } )
+--~ end
+--~ local function reminder(str)
+--~ local found = cache[str]
+--~ if not found then
+--~ found = action(str)
+--~ cache[str] = found
+--~ end
+--~ return found
+--~ end
+--~ return reminder, cache
+--~ end
+
end -- of closure
@@ -3133,7 +3690,7 @@ do -- create closure to overcome 200 locals limit
if not modules then modules = { } end modules ['trac-tra'] = {
version = 1.001,
- comment = "companion to luat-lib.tex",
+ comment = "companion to trac-tra.mkiv",
author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
copyright = "PRAGMA ADE / ConTeXt Development Team",
license = "see context related readme files"
@@ -3143,12 +3700,17 @@ if not modules then modules = { } end modules ['trac-tra'] = {
-- bound to a variable, like node.new, node.copy etc (contrary to for instance
-- node.has_attribute which is bound to a has_attribute local variable in mkiv)
+local debug = require "debug"
+
+local getinfo = debug.getinfo
+local type, next = type, next
+local concat = table.concat
+local format, find, lower, gmatch, gsub = string.format, string.find, string.lower, string.gmatch, string.gsub
+
debugger = debugger or { }
local counters = { }
local names = { }
-local getinfo = debug.getinfo
-local format, find, lower, gmatch = string.format, string.find, string.lower, string.gmatch
-- one
@@ -3187,10 +3749,10 @@ function debugger.showstats(printer,threshold)
local total, grandtotal, functions = 0, 0, 0
printer("\n") -- ugly but ok
-- table.sort(counters)
- for func, count in pairs(counters) do
+ for func, count in next, counters do
if count > threshold then
local name = getname(func)
- if not name:find("for generator") then
+ if not find(name,"for generator") then
printer(format("%8i %s", count, name))
total = total + count
end
@@ -3222,7 +3784,7 @@ end
--~ local total, grandtotal, functions = 0, 0, 0
--~ printer("\n") -- ugly but ok
--~ -- table.sort(counters)
---~ for func, count in pairs(counters) do
+--~ for func, count in next, counters do
--~ if count > threshold then
--~ printer(format("%8i %s", count, func))
--~ total = total + count
@@ -3276,38 +3838,77 @@ end
--~ print("")
--~ debugger.showstats(print,3)
-trackers = trackers or { }
+setters = setters or { }
+setters.data = setters.data or { }
-local data, done = { }, { }
+--~ local function set(t,what,value)
+--~ local data, done = t.data, t.done
+--~ if type(what) == "string" then
+--~ what = aux.settings_to_array(what) -- inefficient but ok
+--~ end
+--~ for i=1,#what do
+--~ local w = what[i]
+--~ for d, f in next, data do
+--~ if done[d] then
+--~ -- prevent recursion due to wildcards
+--~ elseif find(d,w) then
+--~ done[d] = true
+--~ for i=1,#f do
+--~ f[i](value)
+--~ end
+--~ end
+--~ end
+--~ end
+--~ end
-local function set(what,value)
+local function set(t,what,value)
+ local data, done = t.data, t.done
if type(what) == "string" then
- what = aux.settings_to_array(what)
+ what = aux.settings_to_hash(what) -- inefficient but ok
end
- for i=1,#what do
- local w = what[i]
+ for w, v in next, what do
+ if v == "" then
+ v = value
+ else
+ v = toboolean(v)
+ end
for d, f in next, data do
if done[d] then
-- prevent recursion due to wildcards
elseif find(d,w) then
done[d] = true
for i=1,#f do
- f[i](value)
+ f[i](v)
end
end
end
end
end
-local function reset()
- for d, f in next, data do
+local function reset(t)
+ for d, f in next, t.data do
for i=1,#f do
f[i](false)
end
end
end
-function trackers.register(what,...)
+local function enable(t,what)
+ set(t,what,true)
+end
+
+local function disable(t,what)
+ local data = t.data
+ if not what or what == "" then
+ t.done = { }
+ reset(t)
+ else
+ set(t,what,false)
+ end
+end
+
+function setters.register(t,what,...)
+ local data = t.data
what = lower(what)
local w = data[what]
if not w then
@@ -3319,32 +3920,32 @@ function trackers.register(what,...)
if typ == "function" then
w[#w+1] = fnc
elseif typ == "string" then
- w[#w+1] = function(value) set(fnc,value,nesting) end
+ w[#w+1] = function(value) set(t,fnc,value,nesting) end
end
end
end
-function trackers.enable(what)
- done = { }
- set(what,true)
+function setters.enable(t,what)
+ local e = t.enable
+ t.enable, t.done = enable, { }
+ enable(t,string.simpleesc(tostring(what)))
+ t.enable, t.done = e, { }
end
-function trackers.disable(what)
- done = { }
- if not what or what == "" then
- trackers.reset(what)
- else
- set(what,false)
- end
+function setters.disable(t,what)
+ local e = t.disable
+ t.disable, t.done = disable, { }
+ disable(t,string.simpleesc(tostring(what)))
+ t.disable, t.done = e, { }
end
-function trackers.reset(what)
- done = { }
- reset()
+function setters.reset(t)
+ t.done = { }
+ reset(t)
end
-function trackers.list() -- pattern
- local list = table.sortedkeys(data)
+function setters.list(t) -- pattern
+ local list = table.sortedkeys(t.data)
local user, system = { }, { }
for l=1,#list do
local what = list[l]
@@ -3357,6 +3958,78 @@ function trackers.list() -- pattern
return user, system
end
+function setters.show(t)
+ commands.writestatus("","")
+ local list = setters.list(t)
+ for k=1,#list do
+ commands.writestatus(t.name,list[k])
+ end
+ commands.writestatus("","")
+end
+
+-- we could have used a bit of oo and the trackers:enable syntax but
+-- there is already a lot of code around using the singular tracker
+
+-- we could make this into a module
+
+function setters.new(name)
+ local t
+ t = {
+ data = { },
+ name = name,
+ enable = function(...) setters.enable (t,...) end,
+ disable = function(...) setters.disable (t,...) end,
+ register = function(...) setters.register(t,...) end,
+ list = function(...) setters.list (t,...) end,
+ show = function(...) setters.show (t,...) end,
+ }
+ setters.data[name] = t
+ return t
+end
+
+trackers = setters.new("trackers")
+directives = setters.new("directives")
+experiments = setters.new("experiments")
+
+-- nice trick: we overload two of the directives related functions with variants that
+-- do tracing (itself using a tracker) .. proof of concept
+
+local trace_directives = false local trace_directives = false trackers.register("system.directives", function(v) trace_directives = v end)
+local trace_experiments = false local trace_experiments = false trackers.register("system.experiments", function(v) trace_experiments = v end)
+
+local e = directives.enable
+local d = directives.disable
+
+function directives.enable(...)
+ commands.writestatus("directives","enabling: %s",concat({...}," "))
+ e(...)
+end
+
+function directives.disable(...)
+ commands.writestatus("directives","disabling: %s",concat({...}," "))
+ d(...)
+end
+
+local e = experiments.enable
+local d = experiments.disable
+
+function experiments.enable(...)
+ commands.writestatus("experiments","enabling: %s",concat({...}," "))
+ e(...)
+end
+
+function experiments.disable(...)
+ commands.writestatus("experiments","disabling: %s",concat({...}," "))
+ d(...)
+end
+
+-- a useful example
+
+directives.register("system.nostatistics", function(v)
+ statistics.enable = not v
+end)
+
+
end -- of closure
@@ -3364,7 +4037,7 @@ do -- create closure to overcome 200 locals limit
if not modules then modules = { } end modules ['luat-env'] = {
version = 1.001,
- comment = "companion to luat-lib.tex",
+ comment = "companion to luat-lib.mkiv",
author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
copyright = "PRAGMA ADE / ConTeXt Development Team",
license = "see context related readme files"
@@ -3376,10 +4049,10 @@ if not modules then modules = { } end modules ['luat-env'] = {
-- evolved before bytecode arrays were available and so a lot of
-- code has disappeared already.
-local trace_verbose = false trackers.register("resolvers.verbose", function(v) trace_verbose = v end)
-local trace_locating = false trackers.register("resolvers.locating", function(v) trace_locating = v trackers.enable("resolvers.verbose") end)
+local trace_locating = false trackers.register("resolvers.locating", function(v) trace_locating = v end)
-local format = string.format
+local format, sub, match, gsub, find = string.format, string.sub, string.match, string.gsub, string.find
+local unquote, quote = string.unquote, string.quote
-- precautions
@@ -3413,13 +4086,14 @@ if not environment.jobname then environ
function environment.initialize_arguments(arg)
local arguments, files = { }, { }
environment.arguments, environment.files, environment.sortedflags = arguments, files, nil
- for index, argument in pairs(arg) do
+ for index=1,#arg do
+ local argument = arg[index]
if index > 0 then
- local flag, value = argument:match("^%-+(.+)=(.-)$")
+ local flag, value = match(argument,"^%-+(.-)=(.-)$")
if flag then
- arguments[flag] = string.unquote(value or "")
+ arguments[flag] = unquote(value or "")
else
- flag = argument:match("^%-+(.+)")
+ flag = match(argument,"^%-+(.+)")
if flag then
arguments[flag] = true
else
@@ -3446,25 +4120,30 @@ function environment.argument(name,partial)
return arguments[name]
elseif partial then
if not sortedflags then
- sortedflags = { }
- for _,v in pairs(table.sortedkeys(arguments)) do
- sortedflags[#sortedflags+1] = "^" .. v
+ sortedflags = table.sortedkeys(arguments)
+ for k=1,#sortedflags do
+ sortedflags[k] = "^" .. sortedflags[k]
end
environment.sortedflags = sortedflags
end
-- example of potential clash: ^mode ^modefile
- for _,v in ipairs(sortedflags) do
- if name:find(v) then
- return arguments[v:sub(2,#v)]
+ for k=1,#sortedflags do
+ local v = sortedflags[k]
+ if find(name,v) then
+ return arguments[sub(v,2,#v)]
end
end
end
return nil
end
+environment.argument("x",true)
+
function environment.split_arguments(separator) -- rather special, cut-off before separator
local done, before, after = false, { }, { }
- for _,v in ipairs(environment.original_arguments) do
+ local original_arguments = environment.original_arguments
+ for k=1,#original_arguments do
+ local v = original_arguments[k]
if not done and v == separator then
done = true
elseif done then
@@ -3481,16 +4160,17 @@ function environment.reconstruct_commandline(arg,noquote)
if noquote and #arg == 1 then
local a = arg[1]
a = resolvers.resolve(a)
- a = a:unquote()
+ a = unquote(a)
return a
- elseif next(arg) then
+ elseif #arg > 0 then
local result = { }
- for _,a in ipairs(arg) do -- ipairs 1 .. #n
+ for i=1,#arg do
+ local a = arg[i]
a = resolvers.resolve(a)
- a = a:unquote()
- a = a:gsub('"','\\"') -- tricky
- if a:find(" ") then
- result[#result+1] = a:quote()
+ a = unquote(a)
+ a = gsub(a,'"','\\"') -- tricky
+ if find(a," ") then
+ result[#result+1] = quote(a)
else
result[#result+1] = a
end
@@ -3503,17 +4183,18 @@ end
if arg then
- -- new, reconstruct quoted snippets (maybe better just remnove the " then and add them later)
+ -- new, reconstruct quoted snippets (maybe better just remove the " then and add them later)
local newarg, instring = { }, false
- for index, argument in ipairs(arg) do
- if argument:find("^\"") then
- newarg[#newarg+1] = argument:gsub("^\"","")
- if not argument:find("\"$") then
+ for index=1,#arg do
+ local argument = arg[index]
+ if find(argument,"^\"") then
+ newarg[#newarg+1] = gsub(argument,"^\"","")
+ if not find(argument,"\"$") then
instring = true
end
- elseif argument:find("\"$") then
- newarg[#newarg] = newarg[#newarg] .. " " .. argument:gsub("\"$","")
+ elseif find(argument,"\"$") then
+ newarg[#newarg] = newarg[#newarg] .. " " .. gsub(argument,"\"$","")
instring = false
elseif instring then
newarg[#newarg] = newarg[#newarg] .. " " .. argument
@@ -3568,12 +4249,12 @@ function environment.luafilechunk(filename) -- used for loading lua bytecode in
filename = file.replacesuffix(filename, "lua")
local fullname = environment.luafile(filename)
if fullname and fullname ~= "" then
- if trace_verbose then
+ if trace_locating then
logs.report("fileio","loading file %s", fullname)
end
return environment.loadedluacode(fullname)
else
- if trace_verbose then
+ if trace_locating then
logs.report("fileio","unknown file %s", filename)
end
return nil
@@ -3593,7 +4274,7 @@ function environment.loadluafile(filename, version)
-- when not overloaded by explicit suffix we look for a luc file first
local fullname = (lucname and environment.luafile(lucname)) or ""
if fullname ~= "" then
- if trace_verbose then
+ if trace_locating then
logs.report("fileio","loading %s", fullname)
end
chunk = loadfile(fullname) -- this way we don't need a file exists check
@@ -3611,7 +4292,7 @@ function environment.loadluafile(filename, version)
if v == version then
return true
else
- if trace_verbose then
+ if trace_locating then
logs.report("fileio","version mismatch for %s: lua=%s, luc=%s", filename, v, version)
end
environment.loadluafile(filename)
@@ -3622,12 +4303,12 @@ function environment.loadluafile(filename, version)
end
fullname = (luaname and environment.luafile(luaname)) or ""
if fullname ~= "" then
- if trace_verbose then
+ if trace_locating then
logs.report("fileio","loading %s", fullname)
end
chunk = loadfile(fullname) -- this way we don't need a file exists check
if not chunk then
- if verbose then
+ if trace_locating then
logs.report("fileio","unknown file %s", filename)
end
else
@@ -3645,7 +4326,7 @@ do -- create closure to overcome 200 locals limit
if not modules then modules = { } end modules ['trac-inf'] = {
version = 1.001,
- comment = "companion to luat-lib.tex",
+ comment = "companion to trac-inf.mkiv",
author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
copyright = "PRAGMA ADE / ConTeXt Development Team",
license = "see context related readme files"
@@ -3670,6 +4351,14 @@ function statistics.hastimer(instance)
return instance and instance.starttime
end
+function statistics.resettiming(instance)
+ if not instance then
+ notimer = { timing = 0, loadtime = 0 }
+ else
+ instance.timing, instance.loadtime = 0, 0
+ end
+end
+
function statistics.starttiming(instance)
if not instance then
notimer = { }
@@ -3684,6 +4373,8 @@ function statistics.starttiming(instance)
if not instance.loadtime then
instance.loadtime = 0
end
+ else
+--~ logs.report("system","nested timing (%s)",tostring(instance))
end
instance.timing = it + 1
end
@@ -3729,6 +4420,12 @@ function statistics.elapsedindeed(instance)
return t > statistics.threshold
end
+function statistics.elapsedseconds(instance,rest) -- returns nil if 0 seconds
+ if statistics.elapsedindeed(instance) then
+ return format("%s seconds %s", statistics.elapsedtime(instance),rest or "")
+ end
+end
+
-- general function
function statistics.register(tag,fnc)
@@ -3807,14 +4504,32 @@ function statistics.timed(action,report)
report("total runtime: %s",statistics.elapsedtime(timer))
end
+-- where, not really the best spot for this:
+
+commands = commands or { }
+
+local timer
+
+function commands.resettimer()
+ statistics.resettiming(timer)
+ statistics.starttiming(timer)
+end
+
+function commands.elapsedtime()
+ statistics.stoptiming(timer)
+ tex.sprint(statistics.elapsedtime(timer))
+end
+
+commands.resettimer()
+
end -- of closure
do -- create closure to overcome 200 locals limit
-if not modules then modules = { } end modules ['luat-log'] = {
+if not modules then modules = { } end modules ['trac-log'] = {
version = 1.001,
- comment = "companion to luat-lib.tex",
+ comment = "companion to trac-log.mkiv",
author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
copyright = "PRAGMA ADE / ConTeXt Development Team",
license = "see context related readme files"
@@ -3822,7 +4537,11 @@ if not modules then modules = { } end modules ['luat-log'] = {
-- this is old code that needs an overhaul
-local write_nl, write, format = texio.write_nl or print, texio.write or io.write, string.format
+--~ io.stdout:setvbuf("no")
+--~ io.stderr:setvbuf("no")
+
+local write_nl, write = texio.write_nl or print, texio.write or io.write
+local format, gmatch = string.format, string.gmatch
local texcount = tex and tex.count
if texlua then
@@ -3903,25 +4622,48 @@ function logs.tex.line(fmt,...) -- new
end
end
+--~ function logs.tex.start_page_number()
+--~ local real, user, sub = texcount.realpageno, texcount.userpageno, texcount.subpageno
+--~ if real > 0 then
+--~ if user > 0 then
+--~ if sub > 0 then
+--~ write(format("[%s.%s.%s",real,user,sub))
+--~ else
+--~ write(format("[%s.%s",real,user))
+--~ end
+--~ else
+--~ write(format("[%s",real))
+--~ end
+--~ else
+--~ write("[-")
+--~ end
+--~ end
+
+--~ function logs.tex.stop_page_number()
+--~ write("]")
+--~ end
+
+local real, user, sub
+
function logs.tex.start_page_number()
- local real, user, sub = texcount.realpageno, texcount.userpageno, texcount.subpageno
+ real, user, sub = texcount.realpageno, texcount.userpageno, texcount.subpageno
+end
+
+function logs.tex.stop_page_number()
if real > 0 then
if user > 0 then
if sub > 0 then
- write(format("[%s.%s.%s",real,user,sub))
+ logs.report("pages", "flushing realpage %s, userpage %s, subpage %s",real,user,sub)
else
- write(format("[%s.%s",real,user))
+ logs.report("pages", "flushing realpage %s, userpage %s",real,user)
end
else
- write(format("[%s",real))
+ logs.report("pages", "flushing realpage %s",real)
end
else
- write("[-")
+ logs.report("pages", "flushing page")
end
-end
-
-function logs.tex.stop_page_number()
- write("]")
+ io.flush()
end
logs.tex.report_job_stat = statistics.show_job_stat
@@ -4021,7 +4763,7 @@ end
function logs.setprogram(_name_,_banner_,_verbose_)
name, banner = _name_, _banner_
if _verbose_ then
- trackers.enable("resolvers.verbose")
+ trackers.enable("resolvers.locating")
end
logs.set_method("tex")
logs.report = report -- also used in libraries
@@ -4034,9 +4776,9 @@ end
function logs.setverbose(what)
if what then
- trackers.enable("resolvers.verbose")
+ trackers.enable("resolvers.locating")
else
- trackers.disable("resolvers.verbose")
+ trackers.disable("resolvers.locating")
end
logs.verbose = what or false
end
@@ -4053,7 +4795,7 @@ logs.report = logs.tex.report
logs.simple = logs.tex.report
function logs.reportlines(str) -- todo: <lines></lines>
- for line in str:gmatch("(.-)[\n\r]") do
+ for line in gmatch(str,"(.-)[\n\r]") do
logs.report(line)
end
end
@@ -4064,8 +4806,12 @@ end
logs.simpleline = logs.reportline
-function logs.help(message,option)
+function logs.reportbanner() -- for scripts too
logs.report(banner)
+end
+
+function logs.help(message,option)
+ logs.reportbanner()
logs.reportline()
logs.reportlines(message)
local moreinfo = logs.moreinfo or ""
@@ -4097,6 +4843,11 @@ end
--~ logs.system(syslogname,"context","test","fonts","font %s recached due to newer version (%s)","blabla","123")
--~ end
+function logs.fatal(where,...)
+ logs.report(where,"fatal error: %s, aborting now",format(...))
+ os.exit()
+end
+
end -- of closure
@@ -4104,10 +4855,10 @@ do -- create closure to overcome 200 locals limit
if not modules then modules = { } end modules ['data-inp'] = {
version = 1.001,
+ comment = "companion to luat-lib.mkiv",
author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
copyright = "PRAGMA ADE / ConTeXt Development Team",
license = "see context related readme files",
- comment = "companion to luat-lib.tex",
}
-- After a few years using the code the large luat-inp.lua file
@@ -4119,7 +4870,7 @@ if not modules then modules = { } end modules ['data-inp'] = {
-- * some public auxiliary functions were made private
--
-- TODO: os.getenv -> os.env[]
--- TODO: instances.[hashes,cnffiles,configurations,522] -> ipairs (alles check, sneller)
+-- TODO: instances.[hashes,cnffiles,configurations,522]
-- TODO: check escaping in find etc, too much, too slow
-- This lib is multi-purpose and can be loaded again later on so that
@@ -4140,12 +4891,13 @@ if not modules then modules = { } end modules ['data-inp'] = {
local format, gsub, find, lower, upper, match, gmatch = string.format, string.gsub, string.find, string.lower, string.upper, string.match, string.gmatch
local concat, insert, sortedkeys = table.concat, table.insert, table.sortedkeys
local next, type = next, type
+local lpegmatch = lpeg.match
-local trace_locating, trace_detail, trace_verbose = false, false, false
+local trace_locating, trace_detail, trace_expansions = false, false, false
-trackers.register("resolvers.verbose", function(v) trace_verbose = v end)
-trackers.register("resolvers.locating", function(v) trace_locating = v trackers.enable("resolvers.verbose") end)
-trackers.register("resolvers.detail", function(v) trace_detail = v trackers.enable("resolvers.verbose,resolvers.detail") end)
+trackers.register("resolvers.locating", function(v) trace_locating = v end)
+trackers.register("resolvers.details", function(v) trace_detail = v end)
+trackers.register("resolvers.expansions", function(v) trace_expansions = v end) -- todo
if not resolvers then
resolvers = {
@@ -4169,7 +4921,7 @@ resolvers.generators.notfound = { nil }
resolvers.cacheversion = '1.0.1'
resolvers.cnfname = 'texmf.cnf'
resolvers.luaname = 'texmfcnf.lua'
-resolvers.homedir = os.env[os.platform == "windows" and 'USERPROFILE'] or os.env['HOME'] or '~'
+resolvers.homedir = os.env[os.type == "windows" and 'USERPROFILE'] or os.env['HOME'] or '~'
resolvers.cnfdefault = '{$SELFAUTODIR,$SELFAUTOPARENT}{,{/share,}/texmf{-local,.local,}/web2c}'
local dummy_path_expr = "^!*unset/*$"
@@ -4211,8 +4963,8 @@ suffixes['lua'] = { 'lua', 'luc', 'tma', 'tmc' }
alternatives['map files'] = 'map'
alternatives['enc files'] = 'enc'
-alternatives['cid files'] = 'cid'
-alternatives['fea files'] = 'fea'
+alternatives['cid maps'] = 'cid' -- great, why no cid files
+alternatives['font feature files'] = 'fea' -- and fea files here
alternatives['opentype fonts'] = 'otf'
alternatives['truetype fonts'] = 'ttf'
alternatives['truetype collections'] = 'ttc'
@@ -4228,6 +4980,11 @@ formats ['sfd'] = 'SFDFONTS'
suffixes ['sfd'] = { 'sfd' }
alternatives['subfont definition files'] = 'sfd'
+-- lib paths
+
+formats ['lib'] = 'CLUAINPUTS' -- new (needs checking)
+suffixes['lib'] = (os.libsuffix and { os.libsuffix }) or { 'dll', 'so' }
+
-- In practice we will work within one tds tree, but i want to keep
-- the option open to build tools that look at multiple trees, which is
-- why we keep the tree specific data in a table. We used to pass the
@@ -4350,8 +5107,10 @@ local function check_configuration() -- not yet ok, no time for debugging now
-- bad luck
end
fix("LUAINPUTS" , ".;$TEXINPUTS;$TEXMFSCRIPTS") -- no progname, hm
- fix("FONTFEATURES", ".;$TEXMF/fonts/fea//;$OPENTYPEFONTS;$TTFONTS;$T1FONTS;$AFMFONTS")
- fix("FONTCIDMAPS" , ".;$TEXMF/fonts/cid//;$OPENTYPEFONTS;$TTFONTS;$T1FONTS;$AFMFONTS")
+ -- this will go away some day
+ fix("FONTFEATURES", ".;$TEXMF/fonts/{data,fea}//;$OPENTYPEFONTS;$TTFONTS;$T1FONTS;$AFMFONTS")
+ fix("FONTCIDMAPS" , ".;$TEXMF/fonts/{data,cid}//;$OPENTYPEFONTS;$TTFONTS;$T1FONTS;$AFMFONTS")
+ --
fix("LUATEXLIBS" , ".;$TEXMF/luatex/lua//")
end
@@ -4366,7 +5125,7 @@ function resolvers.settrace(n) -- no longer number but: 'locating' or 'detail'
end
end
-resolvers.settrace(os.getenv("MTX.resolvers.TRACE") or os.getenv("MTX_INPUT_TRACE"))
+resolvers.settrace(os.getenv("MTX_INPUT_TRACE"))
function resolvers.osenv(key)
local ie = instance.environment
@@ -4454,37 +5213,43 @@ end
-- work that well; the parsing is ok, but dealing with the resulting
-- table is a pain because we need to work inside-out recursively
+local function do_first(a,b)
+ local t = { }
+ for s in gmatch(b,"[^,]+") do t[#t+1] = a .. s end
+ return "{" .. concat(t,",") .. "}"
+end
+
+local function do_second(a,b)
+ local t = { }
+ for s in gmatch(a,"[^,]+") do t[#t+1] = s .. b end
+ return "{" .. concat(t,",") .. "}"
+end
+
+local function do_both(a,b)
+ local t = { }
+ for sa in gmatch(a,"[^,]+") do
+ for sb in gmatch(b,"[^,]+") do
+ t[#t+1] = sa .. sb
+ end
+ end
+ return "{" .. concat(t,",") .. "}"
+end
+
+local function do_three(a,b,c)
+ return a .. b.. c
+end
+
local function splitpathexpr(str, t, validate)
-- no need for further optimization as it is only called a
- -- few times, we can use lpeg for the sub; we could move
- -- the local functions outside the body
+ -- few times, we can use lpeg for the sub
+ if trace_expansions then
+ logs.report("fileio","expanding variable '%s'",str)
+ end
t = t or { }
str = gsub(str,",}",",@}")
str = gsub(str,"{,","{@,")
-- str = "@" .. str .. "@"
local ok, done
- local function do_first(a,b)
- local t = { }
- for s in gmatch(b,"[^,]+") do t[#t+1] = a .. s end
- return "{" .. concat(t,",") .. "}"
- end
- local function do_second(a,b)
- local t = { }
- for s in gmatch(a,"[^,]+") do t[#t+1] = s .. b end
- return "{" .. concat(t,",") .. "}"
- end
- local function do_both(a,b)
- local t = { }
- for sa in gmatch(a,"[^,]+") do
- for sb in gmatch(b,"[^,]+") do
- t[#t+1] = sa .. sb
- end
- end
- return "{" .. concat(t,",") .. "}"
- end
- local function do_three(a,b,c)
- return a .. b.. c
- end
while true do
done = false
while true do
@@ -4515,6 +5280,11 @@ local function splitpathexpr(str, t, validate)
t[#t+1] = s
end
end
+ if trace_expansions then
+ for k=1,#t do
+ logs.report("fileio","% 4i: %s",k,t[k])
+ end
+ end
return t
end
@@ -4554,18 +5324,27 @@ end
-- also we now follow the stupid route: if not set then just assume *one*
-- cnf file under texmf (i.e. distribution)
-resolvers.ownpath = resolvers.ownpath or nil
-resolvers.ownbin = resolvers.ownbin or arg[-2] or arg[-1] or arg[0] or "luatex"
-resolvers.autoselfdir = true -- false may be handy for debugging
+local args = environment and environment.original_arguments or arg -- this needs a cleanup
+
+resolvers.ownbin = resolvers.ownbin or args[-2] or arg[-2] or args[-1] or arg[-1] or arg[0] or "luatex"
+resolvers.ownbin = gsub(resolvers.ownbin,"\\","/")
function resolvers.getownpath()
- if not resolvers.ownpath then
- if resolvers.autoselfdir and os.selfdir then
- resolvers.ownpath = os.selfdir
- else
- local binary = resolvers.ownbin
- if os.platform == "windows" then
- binary = file.replacesuffix(binary,"exe")
+ local ownpath = resolvers.ownpath or os.selfdir
+ if not ownpath or ownpath == "" or ownpath == "unset" then
+ ownpath = args[-1] or arg[-1]
+ ownpath = ownpath and file.dirname(gsub(ownpath,"\\","/"))
+ if not ownpath or ownpath == "" then
+ ownpath = args[-0] or arg[-0]
+ ownpath = ownpath and file.dirname(gsub(ownpath,"\\","/"))
+ end
+ local binary = resolvers.ownbin
+ if not ownpath or ownpath == "" then
+ ownpath = ownpath and file.dirname(binary)
+ end
+ if not ownpath or ownpath == "" then
+ if os.binsuffix ~= "" then
+ binary = file.replacesuffix(binary,os.binsuffix)
end
for p in gmatch(os.getenv("PATH"),"[^"..io.pathseparator.."]+") do
local b = file.join(p,binary)
@@ -4577,30 +5356,39 @@ function resolvers.getownpath()
local olddir = lfs.currentdir()
if lfs.chdir(p) then
local pp = lfs.currentdir()
- if trace_verbose and p ~= pp then
- logs.report("fileio","following symlink %s to %s",p,pp)
+ if trace_locating and p ~= pp then
+ logs.report("fileio","following symlink '%s' to '%s'",p,pp)
end
- resolvers.ownpath = pp
+ ownpath = pp
lfs.chdir(olddir)
else
- if trace_verbose then
- logs.report("fileio","unable to check path %s",p)
+ if trace_locating then
+ logs.report("fileio","unable to check path '%s'",p)
end
- resolvers.ownpath = p
+ ownpath = p
end
break
end
end
end
- if not resolvers.ownpath then resolvers.ownpath = '.' end
+ if not ownpath or ownpath == "" then
+ ownpath = "."
+ logs.report("fileio","forcing fallback ownpath .")
+ elseif trace_locating then
+ logs.report("fileio","using ownpath '%s'",ownpath)
+ end
end
- return resolvers.ownpath
+ resolvers.ownpath = ownpath
+ function resolvers.getownpath()
+ return resolvers.ownpath
+ end
+ return ownpath
end
local own_places = { "SELFAUTOLOC", "SELFAUTODIR", "SELFAUTOPARENT", "TEXMFCNF" }
local function identify_own()
- local ownpath = resolvers.getownpath() or lfs.currentdir()
+ local ownpath = resolvers.getownpath() or dir.current()
local ie = instance.environment
if ownpath then
if resolvers.env('SELFAUTOLOC') == "" then os.env['SELFAUTOLOC'] = file.collapse_path(ownpath) end
@@ -4613,10 +5401,10 @@ local function identify_own()
if resolvers.env('TEXMFCNF') == "" then os.env['TEXMFCNF'] = resolvers.cnfdefault end
if resolvers.env('TEXOS') == "" then os.env['TEXOS'] = resolvers.env('SELFAUTODIR') end
if resolvers.env('TEXROOT') == "" then os.env['TEXROOT'] = resolvers.env('SELFAUTOPARENT') end
- if trace_verbose then
+ if trace_locating then
for i=1,#own_places do
local v = own_places[i]
- logs.report("fileio","variable %s set to %s",v,resolvers.env(v) or "unknown")
+ logs.report("fileio","variable '%s' set to '%s'",v,resolvers.env(v) or "unknown")
end
end
identify_own = function() end
@@ -4648,10 +5436,8 @@ end
local function load_cnf_file(fname)
fname = resolvers.clean_path(fname)
local lname = file.replacesuffix(fname,'lua')
- local f = io.open(lname)
- if f then -- this will go
- f:close()
- local dname = file.dirname(fname)
+ if lfs.isfile(lname) then
+ local dname = file.dirname(fname) -- fname ?
if not instance.configuration[dname] then
resolvers.load_data(dname,'configuration',lname and file.basename(lname))
instance.order[#instance.order+1] = instance.configuration[dname]
@@ -4659,8 +5445,8 @@ local function load_cnf_file(fname)
else
f = io.open(fname)
if f then
- if trace_verbose then
- logs.report("fileio","loading %s", fname)
+ if trace_locating then
+ logs.report("fileio","loading configuration file %s", fname)
end
local line, data, n, k, v
local dname = file.dirname(fname)
@@ -4694,14 +5480,16 @@ local function load_cnf_file(fname)
end
end
f:close()
- elseif trace_verbose then
- logs.report("fileio","skipping %s", fname)
+ elseif trace_locating then
+ logs.report("fileio","skipping configuration file '%s'", fname)
end
end
end
local function collapse_cnf_data() -- potential optimization: pass start index (setup and configuration are shared)
- for _,c in ipairs(instance.order) do
+ local order = instance.order
+ for i=1,#order do
+ local c = order[i]
for k,v in next, c do
if not instance.variables[k] then
if instance.environment[k] then
@@ -4717,19 +5505,24 @@ end
function resolvers.load_cnf()
local function loadoldconfigdata()
- for _, fname in ipairs(instance.cnffiles) do
- load_cnf_file(fname)
+ local cnffiles = instance.cnffiles
+ for i=1,#cnffiles do
+ load_cnf_file(cnffiles[i])
end
end
-- instance.cnffiles contain complete names now !
+ -- we still use a funny mix of cnf and new but soon
+ -- we will switch to lua exclusively as we only use
+ -- the file to collect the tree roots
if #instance.cnffiles == 0 then
- if trace_verbose then
+ if trace_locating then
logs.report("fileio","no cnf files found (TEXMFCNF may not be set/known)")
end
else
- instance.rootpath = instance.cnffiles[1]
- for k,fname in ipairs(instance.cnffiles) do
- instance.cnffiles[k] = file.collapse_path(gsub(fname,"\\",'/'))
+ local cnffiles = instance.cnffiles
+ instance.rootpath = cnffiles[1]
+ for k=1,#cnffiles do
+ instance.cnffiles[k] = file.collapse_path(cnffiles[k])
end
for i=1,3 do
instance.rootpath = file.dirname(instance.rootpath)
@@ -4757,8 +5550,9 @@ function resolvers.load_lua()
-- yet harmless
else
instance.rootpath = instance.luafiles[1]
- for k,fname in ipairs(instance.luafiles) do
- instance.luafiles[k] = file.collapse_path(gsub(fname,"\\",'/'))
+ local luafiles = instance.luafiles
+ for k=1,#luafiles do
+ instance.luafiles[k] = file.collapse_path(luafiles[k])
end
for i=1,3 do
instance.rootpath = file.dirname(instance.rootpath)
@@ -4790,14 +5584,14 @@ end
function resolvers.append_hash(type,tag,name)
if trace_locating then
- logs.report("fileio","= hash append: %s",tag)
+ logs.report("fileio","hash '%s' appended",tag)
end
insert(instance.hashes, { ['type']=type, ['tag']=tag, ['name']=name } )
end
function resolvers.prepend_hash(type,tag,name)
if trace_locating then
- logs.report("fileio","= hash prepend: %s",tag)
+ logs.report("fileio","hash '%s' prepended",tag)
end
insert(instance.hashes, 1, { ['type']=type, ['tag']=tag, ['name']=name } )
end
@@ -4821,9 +5615,11 @@ end
-- locators
function resolvers.locatelists()
- for _, path in ipairs(resolvers.clean_path_list('TEXMF')) do
- if trace_verbose then
- logs.report("fileio","locating list of %s",path)
+ local texmfpaths = resolvers.clean_path_list('TEXMF')
+ for i=1,#texmfpaths do
+ local path = texmfpaths[i]
+ if trace_locating then
+ logs.report("fileio","locating list of '%s'",path)
end
resolvers.locatedatabase(file.collapse_path(path))
end
@@ -4836,11 +5632,11 @@ end
function resolvers.locators.tex(specification)
if specification and specification ~= '' and lfs.isdir(specification) then
if trace_locating then
- logs.report("fileio",'! tex locator found: %s',specification)
+ logs.report("fileio","tex locator '%s' found",specification)
end
resolvers.append_hash('file',specification,filename)
elseif trace_locating then
- logs.report("fileio",'? tex locator not found: %s',specification)
+ logs.report("fileio","tex locator '%s' not found",specification)
end
end
@@ -4854,7 +5650,9 @@ function resolvers.loadfiles()
instance.loaderror = false
instance.files = { }
if not instance.renewcache then
- for _, hash in ipairs(instance.hashes) do
+ local hashes = instance.hashes
+ for k=1,#hashes do
+ local hash = hashes[k]
resolvers.hashdatabase(hash.tag,hash.name)
if instance.loaderror then break end
end
@@ -4868,8 +5666,9 @@ end
-- generators:
function resolvers.loadlists()
- for _, hash in ipairs(instance.hashes) do
- resolvers.generatedatabase(hash.tag)
+ local hashes = instance.hashes
+ for i=1,#hashes do
+ resolvers.generatedatabase(hashes[i].tag)
end
end
@@ -4881,10 +5680,27 @@ end
local weird = lpeg.P(".")^1 + lpeg.anywhere(lpeg.S("~`!#$%^&*()={}[]:;\"\'||<>,?\n\r\t"))
+--~ local l_forbidden = lpeg.S("~`!#$%^&*()={}[]:;\"\'||\\/<>,?\n\r\t")
+--~ local l_confusing = lpeg.P(" ")
+--~ local l_character = lpeg.patterns.utf8
+--~ local l_dangerous = lpeg.P(".")
+
+--~ local l_normal = (l_character - l_forbidden - l_confusing - l_dangerous) * (l_character - l_forbidden - l_confusing^2)^0 * lpeg.P(-1)
+--~ ----- l_normal = l_normal * lpeg.Cc(true) + lpeg.Cc(false)
+
+--~ local function test(str)
+--~ print(str,lpeg.match(l_normal,str))
+--~ end
+--~ test("ヒラギノ明朝 Pro W3")
+--~ test("..ヒラギノ明朝 Pro W3")
+--~ test(":ヒラギノ明朝 Pro W3;")
+--~ test("ヒラギノ明朝 /Pro W3;")
+--~ test("ヒラギノ明朝 Pro W3")
+
function resolvers.generators.tex(specification)
local tag = specification
- if trace_verbose then
- logs.report("fileio","scanning path %s",specification)
+ if trace_locating then
+ logs.report("fileio","scanning path '%s'",specification)
end
instance.files[tag] = { }
local files = instance.files[tag]
@@ -4900,7 +5716,8 @@ function resolvers.generators.tex(specification)
full = spec
end
for name in directory(full) do
- if not weird:match(name) then
+ if not lpegmatch(weird,name) then
+ -- if lpegmatch(l_normal,name) then
local mode = attributes(full..name,'mode')
if mode == 'file' then
if path then
@@ -4933,7 +5750,7 @@ function resolvers.generators.tex(specification)
end
end
action()
- if trace_verbose then
+ if trace_locating then
logs.report("fileio","%s files found on %s directories with %s uppercase remappings",n,m,r)
end
end
@@ -4948,11 +5765,48 @@ end
-- we join them and split them after the expansion has taken place. This
-- is more convenient.
+--~ local checkedsplit = string.checkedsplit
+
+local cache = { }
+
+local splitter = lpeg.Ct(lpeg.splitat(lpeg.S(os.type == "windows" and ";" or ":;")))
+
+local function split_kpse_path(str) -- beware, this can be either a path or a {specification}
+ local found = cache[str]
+ if not found then
+ if str == "" then
+ found = { }
+ else
+ str = gsub(str,"\\","/")
+--~ local split = (find(str,";") and checkedsplit(str,";")) or checkedsplit(str,io.pathseparator)
+local split = lpegmatch(splitter,str)
+ found = { }
+ for i=1,#split do
+ local s = split[i]
+ if not find(s,"^{*unset}*") then
+ found[#found+1] = s
+ end
+ end
+ if trace_expansions then
+ logs.report("fileio","splitting path specification '%s'",str)
+ for k=1,#found do
+ logs.report("fileio","% 4i: %s",k,found[k])
+ end
+ end
+ cache[str] = found
+ end
+ end
+ return found
+end
+
+resolvers.split_kpse_path = split_kpse_path
+
function resolvers.splitconfig()
- for i,c in ipairs(instance) do
- for k,v in pairs(c) do
+ for i=1,#instance do
+ local c = instance[i]
+ for k,v in next, c do
if type(v) == 'string' then
- local t = file.split_path(v)
+ local t = split_kpse_path(v)
if #t > 1 then
c[k] = t
end
@@ -4962,21 +5816,25 @@ function resolvers.splitconfig()
end
function resolvers.joinconfig()
- for i,c in ipairs(instance.order) do
- for k,v in pairs(c) do -- ipairs?
+ local order = instance.order
+ for i=1,#order do
+ local c = order[i]
+ for k,v in next, c do -- indexed?
if type(v) == 'table' then
c[k] = file.join_path(v)
end
end
end
end
+
function resolvers.split_path(str)
if type(str) == 'table' then
return str
else
- return file.split_path(str)
+ return split_kpse_path(str)
end
end
+
function resolvers.join_path(str)
if type(str) == 'table' then
return file.join_path(str)
@@ -4988,8 +5846,9 @@ end
function resolvers.splitexpansions()
local ie = instance.expansions
for k,v in next, ie do
- local t, h = { }, { }
- for _,vv in ipairs(file.split_path(v)) do
+ local t, h, p = { }, { }, split_kpse_path(v)
+ for kk=1,#p do
+ local vv = p[kk]
if vv ~= "" and not h[vv] then
t[#t+1] = vv
h[vv] = true
@@ -5036,11 +5895,15 @@ function resolvers.serialize(files)
end
t[#t+1] = "return {"
if instance.sortdata then
- for _, k in pairs(sortedkeys(files)) do -- ipairs
+ local sortedfiles = sortedkeys(files)
+ for i=1,#sortedfiles do
+ local k = sortedfiles[i]
local fk = files[k]
if type(fk) == 'table' then
t[#t+1] = "\t['" .. k .. "']={"
- for _, kk in pairs(sortedkeys(fk)) do -- ipairs
+ local sortedfk = sortedkeys(fk)
+ for j=1,#sortedfk do
+ local kk = sortedfk[j]
t[#t+1] = dump(kk,fk[kk],"\t\t")
end
t[#t+1] = "\t},"
@@ -5065,12 +5928,18 @@ function resolvers.serialize(files)
return concat(t,"\n")
end
+local data_state = { }
+
+function resolvers.data_state()
+ return data_state or { }
+end
+
function resolvers.save_data(dataname, makename) -- untested without cache overload
for cachename, files in next, instance[dataname] do
local name = (makename or file.join)(cachename,dataname)
local luaname, lucname = name .. ".lua", name .. ".luc"
- if trace_verbose then
- logs.report("fileio","preparing %s for %s",dataname,cachename)
+ if trace_locating then
+ logs.report("fileio","preparing '%s' for '%s'",dataname,cachename)
end
for k, v in next, files do
if type(v) == "table" and #v == 1 then
@@ -5084,24 +5953,25 @@ function resolvers.save_data(dataname, makename) -- untested without cache overl
date = os.date("%Y-%m-%d"),
time = os.date("%H:%M:%S"),
content = files,
+ uuid = os.uuid(),
}
local ok = io.savedata(luaname,resolvers.serialize(data))
if ok then
- if trace_verbose then
- logs.report("fileio","%s saved in %s",dataname,luaname)
+ if trace_locating then
+ logs.report("fileio","'%s' saved in '%s'",dataname,luaname)
end
if utils.lua.compile(luaname,lucname,false,true) then -- no cleanup but strip
- if trace_verbose then
- logs.report("fileio","%s compiled to %s",dataname,lucname)
+ if trace_locating then
+ logs.report("fileio","'%s' compiled to '%s'",dataname,lucname)
end
else
- if trace_verbose then
- logs.report("fileio","compiling failed for %s, deleting file %s",dataname,lucname)
+ if trace_locating then
+ logs.report("fileio","compiling failed for '%s', deleting file '%s'",dataname,lucname)
end
os.remove(lucname)
end
- elseif trace_verbose then
- logs.report("fileio","unable to save %s in %s (access error)",dataname,luaname)
+ elseif trace_locating then
+ logs.report("fileio","unable to save '%s' in '%s' (access error)",dataname,luaname)
end
end
end
@@ -5113,19 +5983,20 @@ function resolvers.load_data(pathname,dataname,filename,makename) -- untested wi
if blob then
local data = blob()
if data and data.content and data.type == dataname and data.version == resolvers.cacheversion then
- if trace_verbose then
- logs.report("fileio","loading %s for %s from %s",dataname,pathname,filename)
+ data_state[#data_state+1] = data.uuid
+ if trace_locating then
+ logs.report("fileio","loading '%s' for '%s' from '%s'",dataname,pathname,filename)
end
instance[dataname][pathname] = data.content
else
- if trace_verbose then
- logs.report("fileio","skipping %s for %s from %s",dataname,pathname,filename)
+ if trace_locating then
+ logs.report("fileio","skipping '%s' for '%s' from '%s'",dataname,pathname,filename)
end
instance[dataname][pathname] = { }
instance.loaderror = true
end
- elseif trace_verbose then
- logs.report("fileio","skipping %s for %s from %s",dataname,pathname,filename)
+ elseif trace_locating then
+ logs.report("fileio","skipping '%s' for '%s' from '%s'",dataname,pathname,filename)
end
end
@@ -5144,15 +6015,17 @@ function resolvers.resetconfig()
end
function resolvers.loadnewconfig()
- for _, cnf in ipairs(instance.luafiles) do
+ local luafiles = instance.luafiles
+ for i=1,#luafiles do
+ local cnf = luafiles[i]
local pathname = file.dirname(cnf)
local filename = file.join(pathname,resolvers.luaname)
local blob = loadfile(filename)
if blob then
local data = blob()
if data then
- if trace_verbose then
- logs.report("fileio","loading configuration file %s",filename)
+ if trace_locating then
+ logs.report("fileio","loading configuration file '%s'",filename)
end
if true then
-- flatten to variable.progname
@@ -5173,14 +6046,14 @@ function resolvers.loadnewconfig()
instance['setup'][pathname] = data
end
else
- if trace_verbose then
- logs.report("fileio","skipping configuration file %s",filename)
+ if trace_locating then
+ logs.report("fileio","skipping configuration file '%s'",filename)
end
instance['setup'][pathname] = { }
instance.loaderror = true
end
- elseif trace_verbose then
- logs.report("fileio","skipping configuration file %s",filename)
+ elseif trace_locating then
+ logs.report("fileio","skipping configuration file '%s'",filename)
end
instance.order[#instance.order+1] = instance.setup[pathname]
if instance.loaderror then break end
@@ -5189,7 +6062,9 @@ end
function resolvers.loadoldconfig()
if not instance.renewcache then
- for _, cnf in ipairs(instance.cnffiles) do
+ local cnffiles = instance.cnffiles
+ for i=1,#cnffiles do
+ local cnf = cnffiles[i]
local dname = file.dirname(cnf)
resolvers.load_data(dname,'configuration')
instance.order[#instance.order+1] = instance.configuration[dname]
@@ -5379,7 +6254,7 @@ end
function resolvers.expanded_path_list(str)
if not str then
- return ep or { }
+ return ep or { } -- ep ?
elseif instance.savelists then
-- engine+progname hash
str = gsub(str,"%$","")
@@ -5397,9 +6272,9 @@ end
function resolvers.expanded_path_list_from_var(str) -- brrr
local tmp = resolvers.var_of_format_or_suffix(gsub(str,"%$",""))
if tmp ~= "" then
- return resolvers.expanded_path_list(str)
- else
return resolvers.expanded_path_list(tmp)
+ else
+ return resolvers.expanded_path_list(str)
end
end
@@ -5446,9 +6321,9 @@ function resolvers.isreadable.file(name)
local readable = lfs.isfile(name) -- brrr
if trace_detail then
if readable then
- logs.report("fileio","+ readable: %s",name)
+ logs.report("fileio","file '%s' is readable",name)
else
- logs.report("fileio","- readable: %s", name)
+ logs.report("fileio","file '%s' is not readable", name)
end
end
return readable
@@ -5464,7 +6339,7 @@ local function collect_files(names)
for k=1,#names do
local fname = names[k]
if trace_detail then
- logs.report("fileio","? blobpath asked: %s",fname)
+ logs.report("fileio","checking name '%s'",fname)
end
local bname = file.basename(fname)
local dname = file.dirname(fname)
@@ -5480,7 +6355,7 @@ local function collect_files(names)
local files = blobpath and instance.files[blobpath]
if files then
if trace_detail then
- logs.report("fileio",'? blobpath do: %s (%s)',blobpath,bname)
+ logs.report("fileio","deep checking '%s' (%s)",blobpath,bname)
end
local blobfile = files[bname]
if not blobfile then
@@ -5514,7 +6389,7 @@ local function collect_files(names)
end
end
elseif trace_locating then
- logs.report("fileio",'! blobpath no: %s (%s)',blobpath,bname)
+ logs.report("fileio","no match in '%s' (%s)",blobpath,bname)
end
end
end
@@ -5564,14 +6439,13 @@ end
local function collect_instance_files(filename,collected) -- todo : plugin (scanners, checkers etc)
local result = collected or { }
local stamp = nil
- filename = file.collapse_path(filename) -- elsewhere
- filename = file.collapse_path(gsub(filename,"\\","/")) -- elsewhere
+ filename = file.collapse_path(filename)
-- speed up / beware: format problem
if instance.remember then
stamp = filename .. "--" .. instance.engine .. "--" .. instance.progname .. "--" .. instance.format
if instance.found[stamp] then
if trace_locating then
- logs.report("fileio",'! remembered: %s',filename)
+ logs.report("fileio","remembering file '%s'",filename)
end
return instance.found[stamp]
end
@@ -5579,7 +6453,7 @@ local function collect_instance_files(filename,collected) -- todo : plugin (scan
if not dangerous[instance.format or "?"] then
if resolvers.isreadable.file(filename) then
if trace_detail then
- logs.report("fileio",'= found directly: %s',filename)
+ logs.report("fileio","file '%s' found directly",filename)
end
instance.found[stamp] = { filename }
return { filename }
@@ -5587,13 +6461,13 @@ local function collect_instance_files(filename,collected) -- todo : plugin (scan
end
if find(filename,'%*') then
if trace_locating then
- logs.report("fileio",'! wildcard: %s', filename)
+ logs.report("fileio","checking wildcard '%s'", filename)
end
result = resolvers.find_wildcard_files(filename)
elseif file.is_qualified_path(filename) then
if resolvers.isreadable.file(filename) then
if trace_locating then
- logs.report("fileio",'! qualified: %s', filename)
+ logs.report("fileio","qualified name '%s'", filename)
end
result = { filename }
else
@@ -5603,7 +6477,7 @@ local function collect_instance_files(filename,collected) -- todo : plugin (scan
forcedname = filename .. ".tex"
if resolvers.isreadable.file(forcedname) then
if trace_locating then
- logs.report("fileio",'! no suffix, forcing standard filetype: tex')
+ logs.report("fileio","no suffix, forcing standard filetype 'tex'")
end
result, ok = { forcedname }, true
end
@@ -5613,7 +6487,7 @@ local function collect_instance_files(filename,collected) -- todo : plugin (scan
forcedname = filename .. "." .. s
if resolvers.isreadable.file(forcedname) then
if trace_locating then
- logs.report("fileio",'! no suffix, forcing format filetype: %s', s)
+ logs.report("fileio","no suffix, forcing format filetype '%s'", s)
end
result, ok = { forcedname }, true
break
@@ -5625,7 +6499,7 @@ local function collect_instance_files(filename,collected) -- todo : plugin (scan
-- try to find in tree (no suffix manipulation), here we search for the
-- matching last part of the name
local basename = file.basename(filename)
- local pattern = (filename .. "$"):gsub("([%.%-])","%%%1")
+ local pattern = gsub(filename .. "$","([%.%-])","%%%1")
local savedformat = instance.format
local format = savedformat or ""
if format == "" then
@@ -5635,19 +6509,21 @@ local function collect_instance_files(filename,collected) -- todo : plugin (scan
instance.format = "othertextfiles" -- kind of everything, maybe texinput is better
end
--
- local resolved = collect_instance_files(basename)
- if #result == 0 then
- local lowered = lower(basename)
- if filename ~= lowered then
- resolved = collect_instance_files(lowered)
+ if basename ~= filename then
+ local resolved = collect_instance_files(basename)
+ if #result == 0 then
+ local lowered = lower(basename)
+ if filename ~= lowered then
+ resolved = collect_instance_files(lowered)
+ end
end
- end
- resolvers.format = savedformat
- --
- for r=1,#resolved do
- local rr = resolved[r]
- if rr:find(pattern) then
- result[#result+1], ok = rr, true
+ resolvers.format = savedformat
+ --
+ for r=1,#resolved do
+ local rr = resolved[r]
+ if find(rr,pattern) then
+ result[#result+1], ok = rr, true
+ end
end
end
-- a real wildcard:
@@ -5656,14 +6532,14 @@ local function collect_instance_files(filename,collected) -- todo : plugin (scan
-- local filelist = collect_files({basename})
-- for f=1,#filelist do
-- local ff = filelist[f][3] or ""
- -- if ff:find(pattern) then
+ -- if find(ff,pattern) then
-- result[#result+1], ok = ff, true
-- end
-- end
-- end
end
if not ok and trace_locating then
- logs.report("fileio",'? qualified: %s', filename)
+ logs.report("fileio","qualified name '%s'", filename)
end
end
else
@@ -5682,12 +6558,12 @@ local function collect_instance_files(filename,collected) -- todo : plugin (scan
wantedfiles[#wantedfiles+1] = forcedname
filetype = resolvers.format_of_suffix(forcedname)
if trace_locating then
- logs.report("fileio",'! forcing filetype: %s',filetype)
+ logs.report("fileio","forcing filetype '%s'",filetype)
end
else
filetype = resolvers.format_of_suffix(filename)
if trace_locating then
- logs.report("fileio",'! using suffix based filetype: %s',filetype)
+ logs.report("fileio","using suffix based filetype '%s'",filetype)
end
end
else
@@ -5699,7 +6575,7 @@ local function collect_instance_files(filename,collected) -- todo : plugin (scan
end
filetype = instance.format
if trace_locating then
- logs.report("fileio",'! using given filetype: %s',filetype)
+ logs.report("fileio","using given filetype '%s'",filetype)
end
end
local typespec = resolvers.variable_of_format(filetype)
@@ -5707,9 +6583,7 @@ local function collect_instance_files(filename,collected) -- todo : plugin (scan
if not pathlist or #pathlist == 0 then
-- no pathlist, access check only / todo == wildcard
if trace_detail then
- logs.report("fileio",'? filename: %s',filename)
- logs.report("fileio",'? filetype: %s',filetype or '?')
- logs.report("fileio",'? wanted files: %s',concat(wantedfiles," | "))
+ logs.report("fileio","checking filename '%s', filetype '%s', wanted files '%s'",filename, filetype or '?',concat(wantedfiles," | "))
end
for k=1,#wantedfiles do
local fname = wantedfiles[k]
@@ -5730,36 +6604,59 @@ local function collect_instance_files(filename,collected) -- todo : plugin (scan
else
-- list search
local filelist = collect_files(wantedfiles)
- local doscan, recurse
+ local dirlist = { }
+ if filelist then
+ for i=1,#filelist do
+ dirlist[i] = file.dirname(filelist[i][2]) .. "/"
+ end
+ end
if trace_detail then
- logs.report("fileio",'? filename: %s',filename)
+ logs.report("fileio","checking filename '%s'",filename)
end
-- a bit messy ... esp the doscan setting here
+ local doscan
for k=1,#pathlist do
local path = pathlist[k]
if find(path,"^!!") then doscan = false else doscan = true end
- if find(path,"//$") then recurse = true else recurse = false end
local pathname = gsub(path,"^!+", '')
done = false
-- using file list
- if filelist and not (done and not instance.allresults) and recurse then
- -- compare list entries with permitted pattern
- pathname = gsub(pathname,"([%-%.])","%%%1") -- this also influences
- pathname = gsub(pathname,"/+$", '/.*') -- later usage of pathname
- pathname = gsub(pathname,"//", '/.-/') -- not ok for /// but harmless
- local expr = "^" .. pathname
+ if filelist then
+ local expression
+ -- compare list entries with permitted pattern -- /xx /xx//
+ if not find(pathname,"/$") then
+ expression = pathname .. "/"
+ else
+ expression = pathname
+ end
+ expression = gsub(expression,"([%-%.])","%%%1") -- this also influences
+ expression = gsub(expression,"//+$", '/.*') -- later usage of pathname
+ expression = gsub(expression,"//", '/.-/') -- not ok for /// but harmless
+ expression = "^" .. expression .. "$"
+ if trace_detail then
+ logs.report("fileio","using pattern '%s' for path '%s'",expression,pathname)
+ end
for k=1,#filelist do
local fl = filelist[k]
local f = fl[2]
- if find(f,expr) then
- if trace_detail then
- logs.report("fileio",'= found in hash: %s',f)
- end
+ local d = dirlist[k]
+ if find(d,expression) then
--- todo, test for readable
result[#result+1] = fl[3]
resolvers.register_in_trees(f) -- for tracing used files
done = true
- if not instance.allresults then break end
+ if instance.allresults then
+ if trace_detail then
+ logs.report("fileio","match in hash for file '%s' on path '%s', continue scanning",f,d)
+ end
+ else
+ if trace_detail then
+ logs.report("fileio","match in hash for file '%s' on path '%s', quit scanning",f,d)
+ end
+ break
+ end
+ elseif trace_detail then
+ logs.report("fileio","no match in hash for file '%s' on path '%s'",f,d)
end
end
end
@@ -5775,7 +6672,7 @@ local function collect_instance_files(filename,collected) -- todo : plugin (scan
local fname = file.join(ppname,w)
if resolvers.isreadable.file(fname) then
if trace_detail then
- logs.report("fileio",'= found by scanning: %s',fname)
+ logs.report("fileio","found '%s' by scanning",fname)
end
result[#result+1] = fname
done = true
@@ -5838,7 +6735,7 @@ function resolvers.find_given_files(filename)
local hashes = instance.hashes
for k=1,#hashes do
local hash = hashes[k]
- local files = instance.files[hash.tag]
+ local files = instance.files[hash.tag] or { }
local blist = files[bname]
if not blist then
local rname = "remap:"..bname
@@ -5948,9 +6845,9 @@ function resolvers.load(option)
statistics.starttiming(instance)
resolvers.resetconfig()
resolvers.identify_cnf()
- resolvers.load_lua()
+ resolvers.load_lua() -- will become the new method
resolvers.expand_variables()
- resolvers.load_cnf()
+ resolvers.load_cnf() -- will be skipped when we have a lua file
resolvers.expand_variables()
if option ~= "nofiles" then
resolvers.load_hash()
@@ -5962,22 +6859,23 @@ end
function resolvers.for_files(command, files, filetype, mustexist)
if files and #files > 0 then
local function report(str)
- if trace_verbose then
+ if trace_locating then
logs.report("fileio",str) -- has already verbose
else
print(str)
end
end
- if trace_verbose then
- report('')
+ if trace_locating then
+ report('') -- ?
end
- for _, file in ipairs(files) do
+ for f=1,#files do
+ local file = files[f]
local result = command(file,filetype,mustexist)
if type(result) == 'string' then
report(result)
else
- for _,v in ipairs(result) do
- report(v)
+ for i=1,#result do
+ report(result[i]) -- could be unpack
end
end
end
@@ -6024,18 +6922,19 @@ end
function table.sequenced(t,sep) -- temp here
local s = { }
- for k, v in pairs(t) do -- pairs?
- s[#s+1] = k .. "=" .. v
+ for k, v in next, t do -- indexed?
+ s[#s+1] = k .. "=" .. tostring(v)
end
return concat(s, sep or " | ")
end
function resolvers.methodhandler(what, filename, filetype) -- ...
+ filename = file.collapse_path(filename)
local specification = (type(filename) == "string" and resolvers.splitmethod(filename)) or filename -- no or { }, let it bomb
local scheme = specification.scheme
if resolvers[what][scheme] then
if trace_locating then
- logs.report("fileio",'= handler: %s -> %s -> %s',specification.original,what,table.sequenced(specification))
+ logs.report("fileio","handler '%s' -> '%s' -> '%s'",specification.original,what,table.sequenced(specification))
end
return resolvers[what][scheme](filename,filetype) -- todo: specification
else
@@ -6055,8 +6954,9 @@ function resolvers.clean_path(str)
end
function resolvers.do_with_path(name,func)
- for _, v in pairs(resolvers.expanded_path_list(name)) do -- pairs?
- func("^"..resolvers.clean_path(v))
+ local pathlist = resolvers.expanded_path_list(name)
+ for i=1,#pathlist do
+ func("^"..resolvers.clean_path(pathlist[i]))
end
end
@@ -6065,7 +6965,9 @@ function resolvers.do_with_var(name,func)
end
function resolvers.with_files(pattern,handle)
- for _, hash in ipairs(instance.hashes) do
+ local hashes = instance.hashes
+ for i=1,#hashes do
+ local hash = hashes[i]
local blobpath = hash.tag
local blobtype = hash.type
if blobpath then
@@ -6080,7 +6982,7 @@ function resolvers.with_files(pattern,handle)
if type(v) == "string" then
handle(blobtype,blobpath,v,k)
else
- for _,vv in pairs(v) do -- ipairs?
+ for _,vv in next, v do -- indexed
handle(blobtype,blobpath,vv,k)
end
end
@@ -6092,7 +6994,7 @@ function resolvers.with_files(pattern,handle)
end
function resolvers.locate_format(name)
- local barename, fmtname = name:gsub("%.%a+$",""), ""
+ local barename, fmtname = gsub(name,"%.%a+$",""), ""
if resolvers.usecache then
local path = file.join(caches.setpath("formats")) -- maybe platform
fmtname = file.join(path,barename..".fmt") or ""
@@ -6140,7 +7042,7 @@ do -- create closure to overcome 200 locals limit
if not modules then modules = { } end modules ['data-tmp'] = {
version = 1.001,
- comment = "companion to luat-lib.tex",
+ comment = "companion to luat-lib.mkiv",
author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
copyright = "PRAGMA ADE / ConTeXt Development Team",
license = "see context related readme files"
@@ -6164,7 +7066,7 @@ luatools with a recache feature.</p>
local format, lower, gsub = string.format, string.lower, string.gsub
-local trace_cache = false trackers.register("resolvers.cache", function(v) trace_cache = v end)
+local trace_cache = false trackers.register("resolvers.cache", function(v) trace_cache = v end) -- not used yet
caches = caches or { }
@@ -6251,7 +7153,8 @@ function caches.setpath(...)
caches.path = '.'
end
caches.path = resolvers.clean_path(caches.path)
- if not table.is_empty({...}) then
+ local dirs = { ... }
+ if #dirs > 0 then
local pth = dir.mkdirs(caches.path,...)
return pth
end
@@ -6297,6 +7200,7 @@ function caches.savedata(filepath,filename,data,raw)
if raw then
reduce, simplify = false, false
end
+ data.cache_uuid = os.uuid()
if caches.direct then
file.savedata(tmaname, table.serialize(data,'return',false,true,false)) -- no hex
else
@@ -6322,7 +7226,7 @@ do -- create closure to overcome 200 locals limit
if not modules then modules = { } end modules ['data-inp'] = {
version = 1.001,
- comment = "companion to luat-lib.tex",
+ comment = "companion to luat-lib.mkiv",
author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
copyright = "PRAGMA ADE / ConTeXt Development Team",
license = "see context related readme files"
@@ -6343,7 +7247,7 @@ do -- create closure to overcome 200 locals limit
if not modules then modules = { } end modules ['data-out'] = {
version = 1.001,
- comment = "companion to luat-lib.tex",
+ comment = "companion to luat-lib.mkiv",
author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
copyright = "PRAGMA ADE / ConTeXt Development Team",
license = "see context related readme files"
@@ -6359,7 +7263,7 @@ do -- create closure to overcome 200 locals limit
if not modules then modules = { } end modules ['data-con'] = {
version = 1.001,
- comment = "companion to luat-lib.tex",
+ comment = "companion to luat-lib.mkiv",
author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
copyright = "PRAGMA ADE / ConTeXt Development Team",
license = "see context related readme files"
@@ -6370,8 +7274,6 @@ local format, lower, gsub = string.format, string.lower, string.gsub
local trace_cache = false trackers.register("resolvers.cache", function(v) trace_cache = v end)
local trace_containers = false trackers.register("resolvers.containers", function(v) trace_containers = v end)
local trace_storage = false trackers.register("resolvers.storage", function(v) trace_storage = v end)
-local trace_verbose = false trackers.register("resolvers.verbose", function(v) trace_verbose = v end)
-local trace_locating = false trackers.register("resolvers.locating", function(v) trace_locating = v trackers.enable("resolvers.verbose") end)
--[[ldx--
<p>Once we found ourselves defining similar cache constructs
@@ -6435,7 +7337,7 @@ 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
+ return storage and storage.cache_version == container.version
else
return false
end
@@ -6487,16 +7389,15 @@ do -- create closure to overcome 200 locals limit
if not modules then modules = { } end modules ['data-use'] = {
version = 1.001,
- comment = "companion to luat-lib.tex",
+ comment = "companion to luat-lib.mkiv",
author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
copyright = "PRAGMA ADE / ConTeXt Development Team",
license = "see context related readme files"
}
-local format, lower, gsub = string.format, string.lower, string.gsub
+local format, lower, gsub, find = string.format, string.lower, string.gsub, string.find
-local trace_verbose = false trackers.register("resolvers.verbose", function(v) trace_verbose = v end)
-local trace_locating = false trackers.register("resolvers.locating", function(v) trace_locating = v trackers.enable("resolvers.verbose") end)
+local trace_locating = false trackers.register("resolvers.locating", function(v) trace_locating = v end)
-- since we want to use the cache instead of the tree, we will now
-- reimplement the saver.
@@ -6540,19 +7441,20 @@ resolvers.automounted = resolvers.automounted or { }
function resolvers.automount(usecache)
local mountpaths = resolvers.clean_path_list(resolvers.expansion('TEXMFMOUNT'))
- if table.is_empty(mountpaths) and usecache then
+ if (not mountpaths or #mountpaths == 0) and usecache then
mountpaths = { caches.setpath("mount") }
end
- if not table.is_empty(mountpaths) then
+ if mountpaths and #mountpaths > 0 then
statistics.starttiming(resolvers.instance)
- for k, root in pairs(mountpaths) do
+ for k=1,#mountpaths do
+ local root = mountpaths[k]
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
+ if find(line,"^[%%#%-]") then -- or %W
-- skip
- elseif line:find("^zip://") then
+ elseif find(line,"^zip://") then
if trace_locating then
logs.report("fileio","mounting %s",line)
end
@@ -6597,11 +7499,13 @@ function statistics.check_fmt_status(texname)
local luv = dofile(luvname)
if luv and luv.sourcefile then
local sourcehash = md5.hex(io.loaddata(resolvers.find_file(luv.sourcefile)) or "unknown")
- if luv.enginebanner and luv.enginebanner ~= enginebanner then
- return "engine mismatch"
+ local luvbanner = luv.enginebanner or "?"
+ if luvbanner ~= enginebanner then
+ return string.format("engine mismatch (luv:%s <> bin:%s)",luvbanner,enginebanner)
end
- if luv.sourcehash and luv.sourcehash ~= sourcehash then
- return "source mismatch"
+ local luvhash = luv.sourcehash or "?"
+ if luvhash ~= sourcehash then
+ return string.format("source mismatch (luv:%s <> bin:%s)",luvhash,sourcehash)
end
else
return "invalid status file"
@@ -6727,7 +7631,7 @@ do -- create closure to overcome 200 locals limit
if not modules then modules = { } end modules ['data-aux'] = {
version = 1.001,
- comment = "companion to luat-lib.tex",
+ comment = "companion to luat-lib.mkiv",
author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
copyright = "PRAGMA ADE / ConTeXt Development Team",
license = "see context related readme files"
@@ -6735,47 +7639,47 @@ if not modules then modules = { } end modules ['data-aux'] = {
local find = string.find
-local trace_verbose = false trackers.register("resolvers.verbose", function(v) trace_verbose = v end)
+local trace_locating = false trackers.register("resolvers.locating", function(v) trace_locating = v end)
function resolvers.update_script(oldname,newname) -- oldname -> own.name, not per se a suffix
local scriptpath = "scripts/context/lua"
newname = file.addsuffix(newname,"lua")
local oldscript = resolvers.clean_path(oldname)
- if trace_verbose then
+ if trace_locating then
logs.report("fileio","to be replaced old script %s", oldscript)
end
local newscripts = resolvers.find_files(newname) or { }
if #newscripts == 0 then
- if trace_verbose then
+ if trace_locating then
logs.report("fileio","unable to locate new script")
end
else
for i=1,#newscripts do
local newscript = resolvers.clean_path(newscripts[i])
- if trace_verbose then
+ if trace_locating then
logs.report("fileio","checking new script %s", newscript)
end
if oldscript == newscript then
- if trace_verbose then
+ if trace_locating then
logs.report("fileio","old and new script are the same")
end
elseif not find(newscript,scriptpath) then
- if trace_verbose then
+ if trace_locating then
logs.report("fileio","new script should come from %s",scriptpath)
end
elseif not (find(oldscript,file.removesuffix(newname).."$") or find(oldscript,newname.."$")) then
- if trace_verbose then
+ if trace_locating then
logs.report("fileio","invalid new script name")
end
else
local newdata = io.loaddata(newscript)
if newdata then
- if trace_verbose then
+ if trace_locating then
logs.report("fileio","old script content replaced by new content")
end
io.savedata(oldscript,newdata)
break
- elseif trace_verbose then
+ elseif trace_locating then
logs.report("fileio","unable to load new script")
end
end
@@ -6790,7 +7694,7 @@ do -- create closure to overcome 200 locals limit
if not modules then modules = { } end modules ['data-lst'] = {
version = 1.001,
- comment = "companion to luat-lib.tex",
+ comment = "companion to luat-lib.mkiv",
author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
copyright = "PRAGMA ADE / ConTeXt Development Team",
license = "see context related readme files"
@@ -6814,7 +7718,9 @@ local function list(list,report)
local instance = resolvers.instance
local pat = upper(pattern or "","")
local report = report or texio.write_nl
- for _,key in pairs(table.sortedkeys(list)) do
+ local sorted = table.sortedkeys(list)
+ for i=1,#sorted do
+ local key = sorted[i]
if instance.pattern == "" or find(upper(key),pat) then
if instance.kpseonly then
if instance.kpsevars[key] then
@@ -6833,11 +7739,14 @@ function resolvers.listers.expansions() list(resolvers.instance.expansions) end
function resolvers.listers.configurations(report)
local report = report or texio.write_nl
local instance = resolvers.instance
- for _,key in ipairs(table.sortedkeys(instance.kpsevars)) do
+ local sorted = table.sortedkeys(instance.kpsevars)
+ for i=1,#sorted do
+ local key = sorted[i]
if not instance.pattern or (instance.pattern=="") or find(key,instance.pattern) then
report(format("%s\n",key))
- for i,c in ipairs(instance.order) do
- local str = c[key]
+ local order = instance.order
+ for i=1,#order do
+ local str = order[i][key]
if str then
report(format("\t%s\t%s",i,str))
end
@@ -6943,7 +7852,7 @@ if not resolvers then
os.exit()
end
-logs.setprogram('LuaTools',"TDS Management Tool 1.31",environment.arguments["verbose"] or false)
+logs.setprogram('LuaTools',"TDS Management Tool 1.32",environment.arguments["verbose"] or false)
local instance = resolvers.reset()
@@ -7000,6 +7909,12 @@ end
if environment.arguments["trace"] then resolvers.settrace(environment.arguments["trace"]) end
+local trackspec = environment.argument("trackers") or environment.argument("track")
+
+if trackspec then
+ trackers.enable(trackspec)
+end
+
runners = runners or { }
messages = messages or { }
@@ -7033,6 +7948,7 @@ messages.help = [[
--engine=str target engine
--progname=str format or backend
--pattern=str filter variables
+--trackers=list enable given trackers
]]
function runners.make_format(texname)
@@ -7091,8 +8007,9 @@ function runners.make_format(texname)
logs.simple("using uncompiled initialization file: %s",luaname)
end
else
- for _, v in pairs({instance.luaname, instance.progname, barename}) do
- v = string.gsub(v..".lua","%.lua%.lua$",".lua")
+ local what = { instance.luaname, instance.progname, barename }
+ for k=1,#what do
+ local v = string.gsub(what[k]..".lua","%.lua%.lua$",".lua")
if v and (v ~= "") then
luaname = resolvers.find_files(v)[1] or ""
if luaname ~= "" then
@@ -7116,7 +8033,8 @@ function runners.make_format(texname)
logs.simple("using lua initialization file: %s",luaname)
local mp = dir.glob(file.removesuffix(file.basename(luaname)).."-*.mem")
if mp and #mp > 0 then
- for _, name in ipairs(mp) do
+ for i=1,#mp do
+ local name = mp[i]
logs.simple("removing related mplib format %s", file.basename(name))
os.remove(name)
end
diff --git a/Master/texmf-dist/scripts/context/lua/luatools.rme b/Master/texmf-dist/scripts/context/lua/luatools.rme
index b320e1184b5..901e9a9a3fc 100644
--- a/Master/texmf-dist/scripts/context/lua/luatools.rme
+++ b/Master/texmf-dist/scripts/context/lua/luatools.rme
@@ -1,3 +1,3 @@
On MSWindows the luatools.lua script is called
-with luatools.cmd. On Unix you can either rename
+with luatools.exe. On Unix you can either rename
luatools.lua to luatools, or use a symlink.
diff --git a/Master/texmf-dist/scripts/context/lua/mtx-babel.lua b/Master/texmf-dist/scripts/context/lua/mtx-babel.lua
index e241e933454..01e2ba4b223 100644
--- a/Master/texmf-dist/scripts/context/lua/mtx-babel.lua
+++ b/Master/texmf-dist/scripts/context/lua/mtx-babel.lua
@@ -415,7 +415,7 @@ do
end
-logs.extendbanner("Babel Conversion Tools 1.2",true)
+logs.extendbanner("Babel Input To UTF Conversion 1.20",true)
messages.help = [[
--language=string conversion language (e.g. greek)
diff --git a/Master/texmf-dist/scripts/context/lua/mtx-cache.lua b/Master/texmf-dist/scripts/context/lua/mtx-cache.lua
index a1fbed8255d..c2a0db00d89 100644
--- a/Master/texmf-dist/scripts/context/lua/mtx-cache.lua
+++ b/Master/texmf-dist/scripts/context/lua/mtx-cache.lua
@@ -22,9 +22,11 @@ function scripts.cache.collect_two(...)
return path, rest
end
+local suffixes = { "afm", "tfm", "def", "enc", "otf", "mp", "data" }
+
function scripts.cache.process_one(action)
- for k, v in ipairs({ "afm", "tfm", "def", "enc", "otf", "mp", "data" }) do
- action("fonts", v)
+ for i=1,#suffixes do
+ action("fonts", suffixes[i])
end
end
@@ -35,13 +37,10 @@ end
-- todo: recursive delete of paths
function scripts.cache.remove(list,keep)
- local keepsuffixes = { }
- for _, v in ipairs(keep or {}) do
- keepsuffixes[v] = true
- end
- local n = 0
- for _,filename in ipairs(list) do
- if filename:find("luatex%-cache") then -- safeguard
+ local n, keepsuffixes = 0, table.tohash(keep or { })
+ for i=1,#list do
+ local filename = list[i]
+ if string.find(filename,"luatex%-cache") then -- safeguard
if not keepsuffixes[file.extname(filename) or ""] then
os.remove(filename)
n = n + 1
@@ -76,7 +75,7 @@ function scripts.cache.list(all)
end)
end
-logs.extendbanner("Cache Tools 0.10")
+logs.extendbanner("ConTeXt & MetaTeX Cache Management 0.10")
messages.help = [[
--purge remove not used files
diff --git a/Master/texmf-dist/scripts/context/lua/mtx-chars.lua b/Master/texmf-dist/scripts/context/lua/mtx-chars.lua
index d4330ca304d..6acacfbd22e 100644
--- a/Master/texmf-dist/scripts/context/lua/mtx-chars.lua
+++ b/Master/texmf-dist/scripts/context/lua/mtx-chars.lua
@@ -11,17 +11,17 @@ local format, concat, utfchar, upper = string.format, table.concat, unicode.utf8
scripts = scripts or { }
scripts.chars = scripts.chars or { }
-local banner = [[
--- filename : char-mth.lua
--- comment : companion to char-mth.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
-
-if not versions then versions = { } end versions['char-mth'] = 1.001
-if not characters then characters = { } end
-]]
-
+--~ local banner = [[
+--~ -- filename : char-mth.lua
+--~ -- comment : companion to char-mth.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
+--~
+--~ if not versions then versions = { } end versions['char-mth'] = 1.001
+--~ if not characters then characters = { } end
+--~ ]]
+--~
--~ function scripts.chars.stixtomkiv(inname,outname)
--~ if inname == "" then
--~ logs.report("aquiring math data","invalid datafilename")
@@ -248,7 +248,7 @@ function scripts.chars.makeencoutf()
end
local f = open("xetx-cls.tex",banner_utf_classes)
if f then
- for k, v in pairs(xtxclasses) do
+ for k, v in next, xtxclasses do
f:write(format("\\defineXTXcharinjectionclass[lb:%s]\n",k))
end
f:write("\n")
@@ -301,7 +301,7 @@ function scripts.chars.makeencoutf()
end
end
-logs.extendbanner("Character Tools 0.10")
+logs.extendbanner("MkII Character Table Generators 0.10")
messages.help = [[
--stix convert stix table to math table
diff --git a/Master/texmf-dist/scripts/context/lua/mtx-check.lua b/Master/texmf-dist/scripts/context/lua/mtx-check.lua
index 6be7f276597..4266ddf0d46 100644
--- a/Master/texmf-dist/scripts/context/lua/mtx-check.lua
+++ b/Master/texmf-dist/scripts/context/lua/mtx-check.lua
@@ -40,6 +40,8 @@ do
local l_s, r_s = P("["), P("]")
local l_g, r_g = P("{"), P("}")
+ local okay = lpeg.P("{[}") + lpeg.P("{]}")
+
local esc = P("\\")
local cr = P("\r")
local lf = P("\n")
@@ -72,7 +74,7 @@ do
["tokens"] = (V("ignore") + V("whatever") + V("grouped") + V("setup") + V("display") + V("inline") + V("errors") + 1)^0,
["whatever"] = line + esc * 1 + C(P("%") * (1-line)^0),
["grouped"] = l_g * (V("whatever") + V("grouped") + V("setup") + V("display") + V("inline") + (1 - l_g - r_g))^0 * r_g,
- ["setup"] = l_s * (V("whatever") + V("grouped") + V("setup") + V("display") + V("inline") + (1 - l_s - r_s))^0 * r_s,
+ ["setup"] = l_s * (okay + V("whatever") + V("grouped") + V("setup") + V("display") + V("inline") + (1 - l_s - r_s))^0 * r_s,
["display"] = d_m * (V("whatever") + V("grouped") + (1 - d_m))^0 * d_m,
["inline"] = i_m * (V("whatever") + V("grouped") + (1 - i_m))^0 * i_m,
["errors"] = (V("gerror")+ V("serror") + V("derror") + V("ierror")),
@@ -103,8 +105,10 @@ function scripts.checker.check(filename)
local str = io.loaddata(filename)
if str then
validator.check(str)
- if #validator.errors > 0 then
- for k, v in ipairs(validator.errors) do
+ local errors = validator.errors
+ if #errors > 0 then
+ for k=1,#errors do
+ local v = errors[k]
local kind, position, line = v[1], v[2], v[3]
local data = str:sub(position-30,position+30)
data = data:gsub("(.)", {
@@ -123,7 +127,7 @@ function scripts.checker.check(filename)
end
end
-logs.extendbanner("Syntax Checking 0.10",true)
+logs.extendbanner("Basic ConTeXt Syntax Checking 0.10",true)
messages.help = [[
--convert check tex file for errors
diff --git a/Master/texmf-dist/scripts/context/lua/mtx-context.lua b/Master/texmf-dist/scripts/context/lua/mtx-context.lua
index 71d2eee5611..79e74e407ff 100644
--- a/Master/texmf-dist/scripts/context/lua/mtx-context.lua
+++ b/Master/texmf-dist/scripts/context/lua/mtx-context.lua
@@ -66,7 +66,7 @@ do
function ctxrunner.reflag(flags)
local t = { }
- for _, flag in pairs(flags) do
+ for _, flag in next, flags do
local key, value = flag:match("^(.-)=(.+)$")
if key and value then
t[key] = value
@@ -122,22 +122,24 @@ do
return
end
end
- if table.is_empty(ctxdata.prepfiles) then
- logs.simple("nothing prepared, no ctl file saved")
- os.remove(ctlname)
- else
+ local prepfiles = ctxdata.prepfiles
+ if prepfiles and next(prepfiles) then
logs.simple("saving logdata in: %s",ctlname)
f = io.open(ctlname,'w')
if f then
f:write("<?xml version='1.0' standalone='yes'?>\n\n")
f:write(string.format("<ctx:preplist local='%s'>\n",yn(ctxdata.runlocal)))
---~ for name, value in pairs(ctxdata.prepfiles) do
- for _, name in ipairs(table.sortedkeys(ctxdata.prepfiles)) do
- f:write(string.format("\t<ctx:prepfile done='%s'>%s</ctx:prepfile>\n",yn(ctxdata.prepfiles[name]),name))
+ local sorted = table.sortedkeys(prepfiles)
+ for i=1,#sorted do
+ local name = sorted[i]
+ f:write(string.format("\t<ctx:prepfile done='%s'>%s</ctx:prepfile>\n",yn(prepfiles[name]),name))
end
f:write("</ctx:preplist>\n")
f:close()
end
+ else
+ logs.simple("nothing prepared, no ctl file saved")
+ os.remove(ctlname)
end
end
@@ -153,7 +155,7 @@ do
print(table.serialize(ctxdata.modules))
print(table.serialize(ctxdata.filters))
print(table.serialize(ctxdata.modes))
- print(xml.serialize(ctxdata.xmldata))
+ print(xml.tostring(ctxdata.xmldata))
end
function ctxrunner.manipulate(ctxdata,ctxname,defaultname)
@@ -180,7 +182,7 @@ do
local found = lfs.isfile(usedname)
if not found then
- for _, path in pairs(ctxdata.locations) do
+ for _, path in next, ctxdata.locations do
local fullname = file.join(path,ctxdata.ctxname)
if lfs.isfile(fullname) then
usedname, found = fullname, true
@@ -189,6 +191,9 @@ do
end
end
+ usedname = resolvers.find_file(ctxdata.ctxname,"tex")
+ found = usedname ~= ""
+
if not found and defaultname and defaultname ~= "" and lfs.isfile(defaultname) then
usedname, found = defaultname, true
end
@@ -218,40 +223,40 @@ do
ctxdata.flags = ctxrunner.reflag(ctxdata.flags)
- for _, message in ipairs(ctxdata.messages) do
- logs.simple("ctx comment: %s", xml.tostring(message))
+ local messages = ctxdata.messages
+ for i=1,#messages do
+ logs.simple("ctx comment: %s", xml.tostring(messages[i]))
end
- xml.each(ctxdata.xmldata,"ctx:value[@name='job']", function(ek,e,k)
- e[k] = ctxdata.variables['job'] or ""
- end)
+ for r, d, k in xml.elements(ctxdata.xmldata,"ctx:value[@name='job']") do
+ d[k] = ctxdata.variables['job'] or ""
+ end
local commands = { }
- xml.each(ctxdata.xmldata,"/ctx:job/ctx:preprocess/ctx:processors/ctx:processor", function(r,d,k)
- local ek = d[k]
- commands[ek.at and ek.at['name'] or "unknown"] = ek
- end)
+ for e in xml.collected(ctxdata.xmldata,"/ctx:job/ctx:preprocess/ctx:processors/ctx:processor") do
+ commands[e.at and e.at['name'] or "unknown"] = e
+ end
- local suffix = xml.filter(ctxdata.xmldata,"/ctx:job/ctx:preprocess/attribute(suffix)") or ctxdata.suffix
- local runlocal = xml.filter(ctxdata.xmldata,"/ctx:job/ctx:preprocess/ctx:processors/attribute(local)")
+ local suffix = xml.filter(ctxdata.xmldata,"/ctx:job/ctx:preprocess/attribute('suffix')") or ctxdata.suffix
+ local runlocal = xml.filter(ctxdata.xmldata,"/ctx:job/ctx:preprocess/ctx:processors/attribute('local')")
runlocal = toboolean(runlocal)
- for _, files in ipairs(xml.filters.elements(ctxdata.xmldata,"/ctx:job/ctx:preprocess/ctx:files")) do
- for _, pattern in ipairs(xml.filters.elements(files,"ctx:file")) do
+ for files in xml.collected(ctxdata.xmldata,"/ctx:job/ctx:preprocess/ctx:files") do
+ for pattern in xml.collected(files,"ctx:file") do
preprocessor = pattern.at['processor'] or ""
if preprocessor ~= "" then
ctxdata.variables['old'] = ctxdata.jobname
- xml.each(ctxdata.xmldata,"ctx:value", function(r,d,k)
+ for r, d, k in xml.elements(ctxdata.xmldata,"ctx:value") do
local ek = d[k]
local ekat = ek.at['name']
if ekat == 'old' then
d[k] = ctxrunner.substitute(ctxdata.variables[ekat] or "")
end
- end)
+ end
pattern = ctxrunner.justtext(xml.tostring(pattern))
@@ -260,7 +265,9 @@ do
local pluspath = false
if #oldfiles == 0 then
-- message: no files match pattern
- for _, p in ipairs(ctxdata.paths) do
+ local paths = ctxdata.paths
+ for i=1,#paths do
+ local p = paths[i]
local oldfiles = dir.glob(path.join(p,pattern))
if #oldfiles > 0 then
pluspath = true
@@ -271,15 +278,18 @@ do
if #oldfiles == 0 then
-- message: no old files
else
- for _, oldfile in ipairs(oldfiles) do
- newfile = oldfile .. "." .. suffix -- addsuffix will add one only
+ for i=1,#oldfiles do
+ local oldfile = oldfiles[i]
+ local newfile = oldfile .. "." .. suffix -- addsuffix will add one only
if ctxdata.runlocal then
newfile = file.basename(newfile)
end
if oldfile ~= newfile and file.needsupdate(oldfile,newfile) then
-- message: oldfile needs preprocessing
-- os.remove(newfile)
- for _, pp in ipairs(preprocessor:split(',')) do
+ local splitted = preprocessor:split(',')
+ for i=1,#splitted do
+ local pp = splitted[i]
local command = commands[pp]
if command then
command = xml.copy(command)
@@ -290,27 +300,27 @@ do
if ctxdata.runlocal then
newfile = file.basename(newfile)
end
- xml.each(command,"ctx:old", function(r,d,k)
+ for r, d, k in xml.elements(command,"ctx:old") do
d[k] = ctxrunner.substitute(oldfile)
- end)
- xml.each(command,"ctx:new", function(r,d,k)
+ end
+ for r, d, k in xml.elements(command,"ctx:new") do
d[k] = ctxrunner.substitute(newfile)
- end)
- -- message: preprocessing #{oldfile} into #{newfile} using #{pp}
+ end
ctxdata.variables['old'] = oldfile
ctxdata.variables['new'] = newfile
- xml.each(command,"ctx:value", function(r,d,k)
+ for r, d, k in xml.elements(command,"ctx:value") do
local ek = d[k]
local ekat = ek.at and ek.at['name']
if ekat then
d[k] = ctxrunner.substitute(ctxdata.variables[ekat] or "")
end
- end)
+ end
-- potential optimization: when mtxrun run internal
- command = xml.text(command)
- command = ctxrunner.justtext(command) -- command is still xml element here
+ command = xml.content(command)
+ command = ctxrunner.justtext(command)
logs.simple("command: %s",command)
local result = os.spawn(command) or 0
+ -- somehow we get the wrong return value
if result > 0 then
logs.simple("error, return code: %s",result)
end
@@ -340,6 +350,14 @@ do
end
+ function ctxrunner.preppedfile(ctxdata,filename)
+ if ctxdata.prepfiles[file.basename(filename)] then
+ return filename .. ".prep"
+ else
+ return filename
+ end
+ end
+
end
-- rest
@@ -352,7 +370,9 @@ scripts.context.multipass = {
function scripts.context.multipass.hashfiles(jobname)
local hash = { }
- for _, suffix in ipairs(scripts.context.multipass.suffixes) do
+ local suffixes = scripts.context.multipass.suffixes
+ for i=1,#suffixes do
+ local suffix = suffixes[i]
local full = jobname .. suffix
hash[full] = md5.hex(io.loaddata(full) or "unknown")
end
@@ -360,7 +380,7 @@ function scripts.context.multipass.hashfiles(jobname)
end
function scripts.context.multipass.changed(oldhash, newhash)
- for k,v in pairs(oldhash) do
+ for k,v in next, oldhash do
if v ~= newhash[k] then
return true
end
@@ -398,7 +418,7 @@ function scripts.context.multipass.makeoptionfile(jobname,ctxdata,kindofrun,curr
end
local function setvalues(flag,format,plural)
if type(flag) == "table" then
- for k, v in pairs(flag) do
+ for k, v in next, flag do
f:write(format:format(v),"\n")
end
else
@@ -434,9 +454,17 @@ function scripts.context.multipass.makeoptionfile(jobname,ctxdata,kindofrun,curr
if type(environment.argument("track")) == "string" then
setvalue ("track" , "\\enabletrackers[%s]")
end
+ if type(environment.argument("trackers")) == "string" then
+ setvalue ("trackers" , "\\enabletrackers[%s]")
+ end
+ if type(environment.argument("directives")) == "string" then
+ setvalue ("directives", "\\enabledirectives[%s]")
+ end
setfixed ("timing" , "\\usemodule[timing]")
setfixed ("batchmode" , "\\batchmode")
+ setfixed ("batch" , "\\batchmode")
setfixed ("nonstopmode" , "\\nonstopmode")
+ setfixed ("nonstop" , "\\nonstopmode")
setfixed ("tracefiles" , "\\tracefilestrue")
setfixed ("nostats" , "\\nomkivstatistics")
setfixed ("paranoid" , "\\def\\maxreadlevel{1}")
@@ -451,10 +479,11 @@ function scripts.context.multipass.makeoptionfile(jobname,ctxdata,kindofrun,curr
--
setalways("%% process info")
--
- setalways( "\\setupsystem[\\c!n=%s,\\c!m=%s]", kindofrun or 0, currentrun or 0)
- setalways( "\\setupsystem[\\c!type=%s]",os.platform)
- setvalue ("inputfile" , "\\setupsystem[inputfile=%s]")
+ -- setvalue ("inputfile" , "\\setupsystem[inputfile=%s]")
+ setalways( "\\setupsystem[inputfile=%s]",environment.argument("input") or environment.files[1] or "\\jobname")
setvalue ("result" , "\\setupsystem[file=%s]")
+ setalways( "\\setupsystem[\\c!n=%s,\\c!m=%s]", kindofrun or 0, currentrun or 0)
+ -- setalways( "\\setupsystem[\\c!type=%s]",os.type) -- windows or unix
setvalues("path" , "\\usepath[%s]")
setvalue ("setuppath" , "\\setupsystem[\\c!directory={%s}]")
setvalue ("randomseed" , "\\setupsystem[\\c!random=%s]")
@@ -557,18 +586,15 @@ scripts.context.interfaces = {
it = "cont-it",
ro = "cont-ro",
pe = "cont-pe",
- -- for taco and me
- -- xp = "cont-xp",
}
scripts.context.defaultformats = {
"cont-en",
"cont-nl",
--- "cont-xp",
"mptopdf",
-- "metatex",
"metafun",
- "plain"
+-- "plain"
}
local function analyze(filename)
@@ -585,6 +611,9 @@ local function analyze(filename)
elseif line:find("^<?xml ") then
t.type = "xml"
end
+ if t.nofruns then
+ scripts.context.multipass.nofruns = t.nofruns
+ end
if not t.engine then
t.engine = 'luatex'
end
@@ -594,12 +623,12 @@ local function analyze(filename)
return nil
end
-local function makestub(format,filename)
+local function makestub(format,filename,prepname)
local stubname = file.replacesuffix(file.basename(filename),'run')
local f = io.open(stubname,'w')
if f then
f:write("\\starttext\n")
- f:write(string.format(format,filename),"\n")
+ f:write(string.format(format,prepname or filename),"\n")
f:write("\\stoptext\n")
f:close()
filename = stubname
@@ -607,27 +636,32 @@ local function makestub(format,filename)
return filename
end
-function scripts.context.openpdf(name)
- os.spawn(string.format('pdfopen --file "%s" 2>&1', file.replacesuffix(name,"pdf")))
-end
-function scripts.context.closepdf(name)
- os.spawn(string.format('pdfclose --file "%s" 2>&1', file.replacesuffix(name,"pdf")))
-end
-
--~ function scripts.context.openpdf(name)
---~ -- somehow two instances start up, one with a funny filename
---~ os.spawn(string.format("\"c:/program files/kde/bin/okular.exe\" --unique %s",file.replacesuffix(name,"pdf")))
+--~ os.spawn(string.format('pdfopen --file "%s" 2>&1', file.replacesuffix(name,"pdf")))
--~ end
--~ function scripts.context.closepdf(name)
---~ --
+--~ os.spawn(string.format('pdfclose --file "%s" 2>&1', file.replacesuffix(name,"pdf")))
--~ end
+local pdfview -- delayed loading
+
+function scripts.context.openpdf(name)
+ pdfview = pdfview or dofile(resolvers.find_file("l-pdfview.lua","tex"))
+ logs.simple("pdfview methods: %s, current method: %s, MTX_PDFVIEW_METHOD=%s",pdfview.methods(),pdfview.method,os.getenv(pdfview.METHOD) or "<unset>")
+ pdfview.open(file.replacesuffix(name,"pdf"))
+end
+
+function scripts.context.closepdf(name)
+ pdfview = pdfview or dofile(resolvers.find_file("l-pdfview.lua","tex"))
+ pdfview.close(file.replacesuffix(name,"pdf"))
+end
+
function scripts.context.run(ctxdata,filename)
-- filename overloads environment.files
local files = (filename and { filename }) or environment.files
if ctxdata then
-- todo: interface
- for k,v in pairs(ctxdata.flags) do
+ for k,v in next, ctxdata.flags do
environment.setargument(k,v)
end
end
@@ -648,7 +682,8 @@ function scripts.context.run(ctxdata,filename)
end
--
if formatfile and scriptfile then
- for _, filename in ipairs(files) do
+ for i=1,#files do
+ local filename = files[i]
local basename, pathname = file.basename(filename), file.dirname(filename)
local jobname = file.removesuffix(basename)
if pathname == "" then
@@ -657,11 +692,18 @@ function scripts.context.run(ctxdata,filename)
-- look at the first line
local a = analyze(filename)
if a and (a.engine == 'pdftex' or a.engine == 'xetex' or environment.argument("pdftex") or environment.argument("xetex")) then
- local texexec = resolvers.find_file("texexec.rb") or ""
- if texexec ~= "" then
- os.setenv("RUBYOPT","")
- local command = string.format("ruby %s %s",texexec,environment.reconstruct_commandline(environment.arguments_after))
- os.exec(command)
+ if false then
+ -- we need to write a top etc too and run mp etc so it's not worth the
+ -- trouble, so it will take a while before the next is finished
+ --
+ -- require "mtx-texutil.lua"
+ else
+ local texexec = resolvers.find_file("texexec.rb") or ""
+ if texexec ~= "" then
+ os.setenv("RUBYOPT","")
+ local command = string.format("ruby %s %s",texexec,environment.reconstruct_commandline(environment.arguments_after))
+ os.exec(command)
+ end
end
else
if a and a.interface and a.interface ~= interface then
@@ -677,6 +719,7 @@ function scripts.context.run(ctxdata,filename)
end
if formatfile and scriptfile then
-- we default to mkiv xml !
+ -- the --prep argument might become automatic (and noprep)
local suffix = file.extname(filename) or "?"
if scripts.context.xmlsuffixes[suffix] or environment.argument("forcexml") then
if environment.argument("mkii") then
@@ -688,6 +731,9 @@ function scripts.context.run(ctxdata,filename)
filename = makestub("\\ctxlua{context.runfile('%s')}",filename)
elseif scripts.context.luasuffixes[suffix] or environment.argument("forcelua") then
filename = makestub("\\ctxlua{dofile('%s')}",filename)
+ elseif environment.argument("prep") then
+ -- we need to keep the original jobname
+ filename = makestub("\\readfile{%s}{}{}",filename,ctxrunner.preppedfile(ctxdata,filename))
end
--
-- todo: also other stubs
@@ -701,7 +747,7 @@ function scripts.context.run(ctxdata,filename)
oldbase = file.removesuffix(jobname)
newbase = file.removesuffix(resultname)
if oldbase ~= newbase then
- for _, suffix in pairs(scripts.context.beforesuffixes) do
+ for _, suffix in next, scripts.context.beforesuffixes do
local oldname = file.addsuffix(oldbase,suffix)
local newname = file.addsuffix(newbase,suffix)
local tmpname = "keep-"..oldname
@@ -732,9 +778,13 @@ function scripts.context.run(ctxdata,filename)
end
--
local flags = { }
- if environment.argument("batchmode") then
+ if environment.argument("batchmode") or environment.argument("batch") then
flags[#flags+1] = "--interaction=batchmode"
end
+ if environment.argument("synctex") then
+ logs.simple("warning: syntex is enabled") -- can add upto 5% runtime
+ flags[#flags+1] = "--synctex=1"
+ end
flags[#flags+1] = "--fmt=" .. string.quote(formatfile)
flags[#flags+1] = "--lua=" .. string.quote(scriptfile)
flags[#flags+1] = "--backend=pdf"
@@ -754,16 +804,16 @@ function scripts.context.run(ctxdata,filename)
--~ scripts.context.make(formatname)
--~ returncode, errorstring = os.spawn(command)
--~ if returncode == 3 then
- --~ logs.simple("fatal error, return code 3, message: %s",errorstring or "?")
+ --~ logs.simple("ks: return code 3, message: %s",errorstring or "?")
--~ os.exit(1)
--~ end
--~ end
if not returncode then
- logs.simple("fatal error, no return code, message: %s",errorstring or "?")
+ logs.simple("fatal error: no return code, message: %s",errorstring or "?")
os.exit(1)
break
elseif returncode > 0 then
- logs.simple("fatal error, return code: %s",returncode or "?")
+ logs.simple("fatal error: return code: %s",returncode or "?")
os.exit(returncode)
break
else
@@ -784,24 +834,24 @@ function scripts.context.run(ctxdata,filename)
logs.simple("arrange run: %s",command)
local returncode, errorstring = os.spawn(command)
if not returncode then
- logs.simple("fatal error, no return code, message: %s",errorstring or "?")
+ logs.simple("fatal error: no return code, message: %s",errorstring or "?")
os.exit(1)
elseif returncode > 0 then
- logs.simple("fatal error, return code: %s",returncode or "?")
+ logs.simple("fatal error: return code: %s",returncode or "?")
os.exit(returncode)
end
end
--
if environment.argument("purge") then
- scripts.context.purge_job(filename)
+ scripts.context.purge_job(jobname)
elseif environment.argument("purgeall") then
- scripts.context.purge_job(filename,true)
+ scripts.context.purge_job(jobname,true)
end
--
os.remove(jobname..".top")
--
if resultname then
- for _, suffix in pairs(scripts.context.aftersuffixes) do
+ for _, suffix in next, scripts.context.aftersuffixes do
local oldname = file.addsuffix(oldbase,suffix)
local newname = file.addsuffix(newbase,suffix)
local tmpname = "keep-"..oldname
@@ -910,9 +960,11 @@ function scripts.context.make(name)
(environment.argument("xetex") and "mtxrun texexec.rb --make --xetex " ) or false,
}
local list = (name and { name }) or (environment.files[1] and environment.files) or scripts.context.defaultformats
- for _, name in ipairs(list) do
+ for i=1,#list do
+ local name = list[i]
name = scripts.context.interfaces[name] or name
- for _, runner in ipairs(runners) do
+ for i=1,#runners do
+ local runner = runners[i]
if runner then
local command = runner .. name
logs.simple("running command: %s",command)
@@ -970,24 +1022,29 @@ local loaded = false
function scripts.context.metapost()
local filename = environment.files[1] or ""
---~ local tempname = "mtx-context-metapost.tex"
---~ local tempdata = string.format(template,"metafun",filename)
---~ io.savedata(tempname,tempdata)
---~ environment.files[1] = tempname
---~ environment.setargument("result",file.removesuffix(filename))
---~ environment.setargument("once",true)
---~ scripts.context.run()
if not loaded then
dofile(resolvers.find_file("mlib-run.lua"))
loaded = true
commands = commands or { }
commands.writestatus = logs.report
end
- local formatname = environment.arguments("format") or "metafun"
+ local formatname = environment.argument("format") or "metafun"
if formatname == "" or type(format) == "boolean" then
formatname = "metafun"
end
- if environment.arguments("svg") then
+ if environment.argument("pdf") then
+ local basename = file.removesuffix(filename)
+ local resultname = environment.argument("result") or basename
+ local jobname = "mtx-context-metapost"
+ local tempname = file.addsuffix(jobname,"tex")
+ io.savedata(tempname,string.format(template,"metafun",filename))
+ environment.files[1] = tempname
+ environment.setargument("result",resultname)
+ environment.setargument("once",true)
+ scripts.context.run()
+ scripts.context.purge_job(jobname,true)
+ scripts.context.purge_job(resultname,true)
+ elseif environment.argument("svg") then
metapost.directrun(formatname,filename,"svg")
else
metapost.directrun(formatname,filename,"mps")
@@ -1041,7 +1098,7 @@ local function purge_file(dfile,cfile)
if os.remove(dfile) then
return file.basename(dfile)
end
- else
+ elseif dfile then
if os.remove(dfile) then
return file.basename(dfile)
end
@@ -1049,22 +1106,24 @@ local function purge_file(dfile,cfile)
end
function scripts.context.purge_job(jobname,all)
- jobname = file.basename(jobname)
- local filebase = file.removesuffix(jobname)
- local deleted = { }
- for _, suffix in ipairs(obsolete_results) do
- deleted[#deleted+1] = purge_file(filebase.."."..suffix,filebase..".pdf")
- end
- for _, suffix in ipairs(temporary_runfiles) do
- deleted[#deleted+1] = purge_file(filebase.."."..suffix)
- end
- if all then
- for _, suffix in ipairs(persistent_runfiles) do
- deleted[#deleted+1] = purge_file(filebase.."."..suffix)
+ if jobname and jobname ~= "" then
+ jobname = file.basename(jobname)
+ local filebase = file.removesuffix(jobname)
+ local deleted = { }
+ for i=1,#obsolete_results do
+ deleted[#deleted+1] = purge_file(filebase.."."..obsolete_results[i],filebase..".pdf")
+ end
+ for i=1,#temporary_runfiles do
+ deleted[#deleted+1] = purge_file(filebase.."."..temporary_runfiles[i])
+ end
+ if all then
+ for i=1,#persistent_runfiles do
+ deleted[#deleted+1] = purge_file(filebase.."."..persistent_runfiles[i])
+ end
+ end
+ if #deleted > 0 then
+ logs.simple("purged files: %s", table.join(deleted,", "))
end
- end
- if #deleted > 0 then
- logs.simple("purged files: %s", table.join(deleted,", "))
end
end
@@ -1077,7 +1136,8 @@ function scripts.context.purge(all)
local persistent = table.tohash(persistent_runfiles)
local generic = table.tohash(generic_files)
local deleted = { }
- for _, name in ipairs(files) do
+ for i=1,#files do
+ local name = files[i]
local suffix = file.extname(name)
local basename = file.basename(name)
if obsolete[suffix] or temporary[suffix] or persistent[suffix] or generic[basename] then
@@ -1146,7 +1206,8 @@ function scripts.context.extras(pattern)
else
logs.extendbanner(extra)
end
- for k,v in ipairs(list) do
+ for i=1,#list do
+ local v = list[i]
local data = io.loaddata(v) or ""
data = string.match(data,"begin help(.-)end help")
if data then
@@ -1154,6 +1215,7 @@ function scripts.context.extras(pattern)
for s in string.gmatch(data,"%% *(.-)[\n\r]") do
h[#h+1] = s
end
+ h[#h+1] = ""
logs.help(table.concat(h,"\n"),"nomoreinfo")
end
end
@@ -1191,8 +1253,15 @@ end
-- todo: we need to do a dummy run
-function scripts.context.track()
- environment.files = { "m-track" }
+function scripts.context.trackers()
+ environment.files = { resolvers.find_file("m-trackers.tex") }
+ scripts.context.multipass.nofruns = 1
+ scripts.context.run()
+ -- maybe filter from log
+end
+
+function scripts.context.directives()
+ environment.files = { resolvers.find_file("m-directives.tex") }
scripts.context.multipass.nofruns = 1
scripts.context.run()
-- maybe filter from log
@@ -1338,35 +1407,65 @@ function scripts.context.update()
end
end
-logs.extendbanner("ConTeXt Tools 0.51",true)
+logs.extendbanner("ConTeXt Process Management 0.51",true)
messages.help = [[
--run process (one or more) files (default action)
--make create context formats
---generate generate file database etc.
---ctx=name use ctx file
---version report installed context version
+
+--ctx=name use ctx file (process management specification)
+--interface use specified user interface (default: en)
+
+--autopdf close pdf file in viewer and start pdf viewer afterwards
+--purge(all) purge files either or not after a run (--pattern=...)
+
+--usemodule=list load the given module or style, normally part o fthe distribution
+--environment=list load the given environment file first (document styles)
+--mode=list enable given the modes (conditional processing in styles)
+--path=list also consult the given paths when files are looked for
+--arguments=list set variables that can be consulted during a run (key/value pairs)
+--randomseed=number set the randomseed
+--result=name rename the resulting output to the given name
+--trackers=list show/set tracker variables
+--directives=list show/set directive variables
+
--forcexml force xml stub (optional flag: --mkii)
--forcecld force cld (context lua document) stub
---autopdf close pdf file in viewer and start pdf viewer afterwards
---once only one run
---purge(all) purge files (--pattern=...)
---result=name rename result to given name
---arrange run extra arrange pass
+
+--arrange run extra imposition pass, given that the style sets up imposition
+--noarrange ignore imposition specifications in the style
+
+--once only run once (no multipass data file is produced)
+--batchmode run without stopping and don't show messages on the console
+--nonstopmode run without stopping
+
+--generate generate file database etc. (as luatools does)
+--paranoid don't descend to .. and ../..
+--version report installed context version
--expert expert options
---interface use specified user interface
]]
+-- filter=list is kind of obsolete
+-- color is obsolete for mkiv, always on
+-- separation is obsolete for mkiv, no longer available
+-- output is currently obsolete for mkiv
+-- setuppath=list must check
+-- modefile=name must check
+-- input=name load the given inputfile (must check)
+
messages.expert = [[
expert options:
--touch update context version number (remake needed afterwards, also provide --expert)
+--nostats omit runtime statistics at the end of the run
--update update context from website (not to be confused with contextgarden)
--profile profile job (use: mtxrun --script profile --analyse)
---track show/set tracker variables
--timing generate timing and statistics overview
+--tracefiles show some extra info when locating files (at the tex end)
+
--extra=name process extra (mtx-context-<name> in distribution)
+--extras show extras
]]
messages.private = [[
@@ -1387,6 +1486,8 @@ special options:
if environment.argument("once") then
scripts.context.multipass.nofruns = 1
+elseif environment.argument("runs") then
+ scripts.context.multipass.nofruns = tonumber(environment.argument("runs")) or nil
end
if environment.argument("profile") then
@@ -1417,12 +1518,22 @@ elseif environment.argument("update") then
scripts.context.update()
elseif environment.argument("expert") then
logs.help(table.join({ messages.expert, messages.private, messages.special },"\n"))
+elseif environment.argument("extras") then
+ scripts.context.extras()
elseif environment.argument("extra") then
scripts.context.extra()
elseif environment.argument("help") then
- logs.help(messages.help)
-elseif environment.argument("track") and type(environment.argument("track")) == "boolean" then
- scripts.context.track()
+ if environment.files[1] == "extras" then
+ scripts.context.extras()
+ else
+ logs.help(messages.help)
+ end
+elseif environment.argument("trackers") and type(environment.argument("trackers")) == "boolean" then
+ scripts.context.trackers()
+elseif environment.argument("directives") and type(environment.argument("directives")) == "boolean" then
+ scripts.context.directives()
+elseif environment.argument("track") and type(environment.argument("track")) == "boolean" then -- for old times sake, will go
+ scripts.context.trackers()
elseif environment.files[1] then
-- scripts.context.timed(scripts.context.run)
scripts.context.timed(scripts.context.autoctx)
diff --git a/Master/texmf-dist/scripts/context/lua/mtx-convert.lua b/Master/texmf-dist/scripts/context/lua/mtx-convert.lua
index c0c383b176f..62198a62188 100644
--- a/Master/texmf-dist/scripts/context/lua/mtx-convert.lua
+++ b/Master/texmf-dist/scripts/context/lua/mtx-convert.lua
@@ -11,7 +11,7 @@ if not modules then modules = { } end modules ['mtx-convert'] = {
graphics = graphics or { }
graphics.converters = graphics.converters or { }
-local gsprogram = (os.platform == "windows" and "gswin32c") or "gs"
+local gsprogram = (os.type == "windows" and "gswin32c") or "gs"
local gstemplate = "%s -q -sDEVICE=pdfwrite -dEPSCrop -dNOPAUSE -dNOCACHE -dBATCH -dAutoRotatePages=/None -dProcessColorModel=/DeviceCMYK -sOutputFile=%s %s -c quit"
function graphics.converters.eps(oldname,newname)
@@ -31,6 +31,7 @@ function graphics.converters.jpg(oldname,newname)
return imtemplate[quality]:format(improgram,oldname,newname)
end
+graphics.converters.gif = graphics.converters.jpg
graphics.converters.tif = graphics.converters.jpg
graphics.converters.tiff = graphics.converters.jpg
graphics.converters.png = graphics.converters.jpg
@@ -111,13 +112,14 @@ function scripts.convert.convertall()
end
function scripts.convert.convertgiven()
- for _, name in ipairs(environment.files) do
- graphics.converters.convertfile(name)
+ local files = environment.files
+ for i=1,#files do
+ graphics.converters.convertfile(files[i])
end
end
-logs.extendbanner("Graphic Conversion Tools 0.10",true)
+logs.extendbanner("ConTeXT Graphic Conversion Helpers 0.10",true)
messages.help = [[
--convertall convert all graphics on path
diff --git a/Master/texmf-dist/scripts/context/lua/mtx-fonts.lua b/Master/texmf-dist/scripts/context/lua/mtx-fonts.lua
index dd319047590..74012ae38d3 100644
--- a/Master/texmf-dist/scripts/context/lua/mtx-fonts.lua
+++ b/Master/texmf-dist/scripts/context/lua/mtx-fonts.lua
@@ -15,30 +15,81 @@ dofile(resolvers.find_file("font-mis.lua","tex"))
scripts = scripts or { }
scripts.fonts = scripts.fonts or { }
-function scripts.fonts.reload(verbose)
- fonts.names.load(true,verbose)
-end
-
-function scripts.fonts.names(name)
- name = name or "luatex-fonts-names.lua"
+function fonts.names.simple()
+ local simpleversion = 1.001
+ local simplelist = { "ttf", "otf", "ttc", "dfont" }
+ local name = "luatex-fonts-names.lua"
+ fonts.names.filters.list = simplelist
+ fonts.names.version = simpleversion -- this number is the same as in font-dum.lua
+ logs.report("fontnames","generating font database for 'luatex-fonts' version %s",fonts.names.version)
fonts.names.identify(true)
local data = fonts.names.data
if data then
- data.fallback_mapping = nil
+ local simplemappings = { }
+ local simplified = {
+ mappings = simplemappings,
+ version = simpleversion,
+ }
+ local specifications = data.specifications
+ for i=1,#simplelist do
+ local format = simplelist[i]
+ for tag, index in next, data.mappings[format] do
+ local s = specifications[index]
+ simplemappings[tag] = { s.rawname, s.filename, s.subfont }
+ end
+ end
logs.report("fontnames","saving names in '%s'",name)
- io.savedata(name,table.serialize(data,true))
+ io.savedata(name,table.serialize(simplified,true))
+ local data = io.loaddata(resolvers.find_file("font-dum.lua","tex"))
+ local dummy = string.match(data,"fonts%.names%.version%s*=%s*([%d%.]+)")
+ if tonumber(dummy) ~= simpleversion then
+ logs.report("fontnames","warning: version number %s in 'font-dum' does not match database version number %s",dummy or "?",simpleversion)
+ end
elseif lfs.isfile(name) then
os.remove(name)
end
end
-local function showfeatures(v,n,f,s,t)
- logs.simple("fontname: %s",v)
- logs.simple("fullname: %s",n)
- logs.simple("filename: %s",f)
- local features = fonts.get_features(f,t)
+function scripts.fonts.reload()
+ if environment.argument("simple") then
+ fonts.names.simple()
+ else
+ fonts.names.load(true)
+ end
+end
+
+local function subfont(sf)
+ if sf then
+ return string.format("index: % 2s", sf)
+ else
+ return ""
+ end
+end
+
+local function fontweight(fw)
+ if fw then
+ return string.format("conflict: %s", fw)
+ else
+ return ""
+ end
+end
+
+local function showfeatures(tag,specification)
+ logs.simple("mapping : %s",tag)
+ logs.simple("fontname: %s",specification.fontname)
+ logs.simple("fullname: %s",specification.fullname)
+ logs.simple("filename: %s",specification.filename)
+ logs.simple("family : %s",specification.familyname or "<nofamily>")
+ logs.simple("weight : %s",specification.weight or "<noweight>")
+ logs.simple("style : %s",specification.style or "<nostyle>")
+ logs.simple("width : %s",specification.width or "<nowidth>")
+ logs.simple("variant : %s",specification.variant or "<novariant>")
+ logs.simple("subfont : %s",subfont(specification.subfont))
+ logs.simple("fweight : %s",fontweight(specification.fontweight))
+ -- maybe more
+ local features = fonts.get_features(specification.filename,specification.format)
if features then
- for what, v in table.sortedpairs(features) do
+ for what, v in table.sortedhash(features) do
local data = features[what]
if data and next(data) then
logs.simple()
@@ -46,9 +97,9 @@ local function showfeatures(v,n,f,s,t)
logs.simple()
logs.simple("feature script languages")
logs.simple()
- for f,ff in table.sortedpairs(data) do
+ for f,ff in table.sortedhash(data) do
local done = false
- for s, ss in table.sortedpairs(ff) do
+ for s, ss in table.sortedhash(ff) do
if s == "*" then s = "all" end
if ss ["*"] then ss["*"] = nil ss.all = true end
if done then
@@ -61,56 +112,146 @@ local function showfeatures(v,n,f,s,t)
end
end
end
+ else
+ logs.simple()
+ logs.simple("no features")
+ logs.simple()
end
logs.reportline()
end
-function scripts.fonts.list(pattern,reload,all,info)
+local function reloadbase(reload)
if reload then
logs.simple("fontnames, reloading font database")
- end
- -- make a function for this
- pattern = pattern:lower()
- pattern = pattern:gsub("%-","%%-")
- pattern = pattern:gsub("%.","%%.")
- pattern = pattern:gsub("%*",".*")
- pattern = pattern:gsub("%?",".?")
- if pattern == "" then
- pattern = ".*"
- else
- pattern = "^" .. pattern .. "$"
- end
- --
- local t = fonts.names.list(pattern,reload)
- if reload then
+ names.load(true)
logs.simple("fontnames, done\n\n")
end
+end
+
+local function list_specifications(t,info)
if t then
- local s, w = table.sortedkeys(t), { 0, 0, 0 }
- local function action(f)
- for k,v in ipairs(s) do
- local type, name, file, sub = unpack(t[v])
- f(v,name,file,sub,type)
+ local s = table.sortedkeys(t)
+ if info then
+ for k=1,#s do
+ local v = s[k]
+ showfeatures(v,t[v])
+ end
+ else
+ for k=1,#s do
+ local v = s[k]
+ local entry = t[v]
+ s[k] = {
+ entry.familyname or "<nofamily>",
+ entry.weight or "<noweight>",
+ entry.style or "<nostyle>",
+ entry.width or "<nowidth>",
+ entry.variant or "<novariant>",
+ entry.fontname,
+ entry.filename,
+ subfont(entry.subfont),
+ fontweight(entry.fontweight),
+ }
+ e[k] = entry
+ end
+ table.formatcolumns(s)
+ for k=1,#s do
+ local v = s[k]
+ texio.write_nl(v)
end
end
- action(function(v,n,f,s,t)
- if #v > w[1] then w[1] = #v end
- if #n > w[2] then w[2] = #n end
- if #f > w[3] then w[3] = #f end
- end)
- action(function(v,n,f,s,t)
- if s then s = "(sub)" else s = "" end
- if info then
- showfeatures(v,n,f,s,t)
- else
- local str = string.format("%s %s %s %s",v:padd(w[1]," "),n:padd(w[2]," "),f:padd(w[3]," "), s)
- print(str:strip())
+ end
+end
+
+local function list_matches(t,info)
+ if t then
+ local s, w = table.sortedkeys(t), { 0, 0, 0 }
+ if info then
+ for k=1,#s do
+ local v = s[k]
+ showfeatures(v,t[v])
end
- end)
+ else
+ for k=1,#s do
+ local v = s[k]
+ local entry = t[v]
+ s[k] = {
+ v,
+ entry.fontname,
+ entry.filename,
+ subfont(entry.subfont)
+ }
+ end
+ table.formatcolumns(s)
+ for k=1,#s do
+ texio.write_nl(s[k])
+ end
+ end
end
end
-function scripts.fonts.save(name,sub)
+function scripts.fonts.list()
+
+ local all = environment.argument("all")
+ local info = environment.argument("info")
+ local reload = environment.argument("reload")
+ local pattern = environment.argument("pattern")
+ local filter = environment.argument("filter")
+ local given = environment.files[1]
+
+ reloadbase(reload)
+
+ if environment.argument("name") then
+ if pattern then
+ --~ mtxrun --script font --list --name --pattern=*somename*
+ list_matches(fonts.names.list(string.topattern(pattern,true),reload,all),info)
+ elseif filter then
+ logs.report("fontnames","not supported: --list --name --filter",name)
+ elseif given then
+ --~ mtxrun --script font --list --name somename
+ list_matches(fonts.names.list(given,reload,all),info)
+ else
+ logs.report("fontnames","not supported: --list --name <no specification>",name)
+ end
+ elseif environment.argument("spec") then
+ if pattern then
+ --~ mtxrun --script font --list --spec --pattern=*somename*
+ logs.report("fontnames","not supported: --list --spec --pattern",name)
+ elseif filter then
+ --~ mtxrun --script font --list --spec --filter="fontname=somename"
+ list_specifications(fonts.names.getlookups(filter),info)
+ elseif given then
+ --~ mtxrun --script font --list --spec somename
+ list_specifications(fonts.names.collectspec(given,reload,all),info)
+ else
+ logs.report("fontnames","not supported: --list --spec <no specification>",name)
+ end
+ elseif environment.argument("file") then
+ if pattern then
+ --~ mtxrun --script font --list --file --pattern=*somename*
+ list_specifications(fonts.names.collectfiles(string.topattern(pattern,true),reload,all),info)
+ elseif filter then
+ logs.report("fontnames","not supported: --list --spec",name)
+ elseif given then
+ --~ mtxrun --script font --list --file somename
+ list_specifications(fonts.names.collectfiles(given,reload,all),info)
+ else
+ logs.report("fontnames","not supported: --list --file <no specification>",name)
+ end
+ elseif pattern then
+ --~ mtxrun --script font --list --pattern=*somename*
+ list_matches(fonts.names.list(string.topattern(pattern,true),reload,all),info)
+ elseif given then
+ --~ mtxrun --script font --list somename
+ list_matches(fonts.names.list(given,reload,all),info)
+ else
+ logs.report("fontnames","not supported: --list <no specification>",name)
+ end
+
+end
+
+function scripts.fonts.save()
+ local name = environment.files[1] or ""
+ local sub = environment.files[2] or ""
local function save(savename,fontblob)
if fontblob then
savename = savename:lower() .. ".lua"
@@ -128,12 +269,15 @@ function scripts.fonts.save(name,sub)
if fontinfo then
logs.simple("font: %s located as %s",name,filename)
if fontinfo[1] then
- for _, v in ipairs(fontinfo) do
+ for k=1,#fontinfo do
+ local v = fontinfo[k]
save(v.fontname,fontloader.open(filename,v.fullname))
end
else
save(fontinfo.fullname,fontloader.open(filename))
end
+ else
+ logs.simple("font: %s cannot be read",filename)
end
else
logs.simple("font: %s not saved",filename)
@@ -141,35 +285,61 @@ function scripts.fonts.save(name,sub)
else
logs.simple("font: %s not found",name)
end
+ else
+ logs.simple("font: no name given")
end
end
-logs.extendbanner("Font Tools 0.20",true)
+logs.extendbanner("ConTeXt Font Database Management 0.21",true)
messages.help = [[
---reload generate new font database
---list [--info] list installed fonts (show info)
--save save open type font in raw table
---names generate 'luatex-fonts-names.lua' (not for context!)
---pattern=str filter files
---all provide alternatives
+--reload generate new font database
+--reload --simple generate 'luatex-fonts-names.lua' (not for context!)
+
+--list --name list installed fonts, filter by name [--pattern]
+--list --spec list installed fonts, filter by spec [--filter]
+--list --file list installed fonts, filter by file [--pattern]
+
+--pattern=str filter files using pattern
+--filter=list key-value pairs
+--all show all found instances
+--info give more details
+--track=list enable trackers
+
+examples of searches:
+
+mtxrun --script font --list somename (== --pattern=*somename*)
+
+mtxrun --script font --list --name somename
+mtxrun --script font --list --name --pattern=*somename*
+
+mtxrun --script font --list --spec somename
+mtxrun --script font --list --spec somename-bold-italic
+mtxrun --script font --list --spec --pattern=*somename*
+mtxrun --script font --list --spec --filter="fontname=somename"
+mtxrun --script font --list --spec --filter="familyname=somename,weight=bold,style=italic,width=condensed"
+
+mtxrun --script font --list --file somename
+mtxrun --script font --list --file --pattern=*somename*
]]
-if environment.argument("reload") then
- scripts.fonts.reload(true)
-elseif environment.argument("names") then
- scripts.fonts.names()
-elseif environment.argument("list") then
- local pattern = environment.argument("pattern") or environment.files[1] or ""
- local all = environment.argument("all")
- local info = environment.argument("info")
- local reload = environment.argument("reload")
- scripts.fonts.list(pattern,reload,all,info)
+local track = environment.argument("track")
+
+if track then trackers.enable(track) end
+
+if environment.argument("names") then
+ environment.setargument("reload",true)
+ environment.setargument("simple",true)
+end
+
+if environment.argument("list") then
+ scripts.fonts.list()
+elseif environment.argument("reload") then
+ scripts.fonts.reload()
elseif environment.argument("save") then
- local name = environment.files[1] or ""
- local sub = environment.files[2] or ""
- scripts.fonts.save(name,sub)
+ scripts.fonts.save()
else
logs.help(messages.help)
end
diff --git a/Master/texmf-dist/scripts/context/lua/mtx-grep.lua b/Master/texmf-dist/scripts/context/lua/mtx-grep.lua
index a6617d711f7..9604bc9f85d 100644
--- a/Master/texmf-dist/scripts/context/lua/mtx-grep.lua
+++ b/Master/texmf-dist/scripts/context/lua/mtx-grep.lua
@@ -70,7 +70,9 @@ function scripts.grep.find(pattern, files, offset)
end
local capture = (content/check)^0
for i=offset or 1, #files do
- for _, nam in ipairs(dir.glob(files[i])) do
+ local globbed = dir.glob(files[i])
+ for i=1,#globbed do
+ local nam = globbed[i]
name = nam
local data = io.loaddata(name)
if data then
diff --git a/Master/texmf-dist/scripts/context/lua/mtx-interface.lua b/Master/texmf-dist/scripts/context/lua/mtx-interface.lua
index 264a2dbe4f4..730a030d930 100644
--- a/Master/texmf-dist/scripts/context/lua/mtx-interface.lua
+++ b/Master/texmf-dist/scripts/context/lua/mtx-interface.lua
@@ -18,7 +18,8 @@ local messageinterfaces = { 'en','cs','de','it','nl','ro','fr','pe','no' }
function flushers.scite(interface,collection)
local result, i = {}, 0
result[#result+1] = format("keywordclass.macros.context.%s=",interface)
- for _, command in ipairs(collection) do
+ for i=1,#collection do
+ local command = collection[i]
if i==0 then
result[#result+1] = "\\\n"
i = 5
@@ -38,7 +39,8 @@ function flushers.jedit(interface,collection)
result[#result+1] = "<MODE>"
result[#result+1] = "\t<RULES>"
result[#result+1] = "\t\t<KEYWORDS>"
- for _, command in ipairs(collection) do
+ for i=1,#collection do
+ local command = collection[i]
result[#result+1] = format("\t\t\t<KEYWORD2>%s</KEYWORD2>",command)
end
result[#result+1] = "\t\t</KEYWORDS>"
@@ -52,7 +54,8 @@ function flushers.bbedit(interface,collection)
result[#result+1] = "<?xml version='1.0'?>"
result[#result+1] = "<key>BBLMKeywordList</key>"
result[#result+1] = "<array>"
- for _, command in ipairs(collection) do
+ for i=1,#collection do
+ local command = collection[i]
result[#result+1] = format("\t<string>\\%s</string>",command)
end
result[#result+1] = "</array>"
@@ -60,7 +63,8 @@ function flushers.bbedit(interface,collection)
end
function flushers.raw(interface,collection)
- for _, command in ipairs(collection) do
+ for i=1,#collection do
+ local command = collection[i]
logs.simple(command)
end
end
@@ -74,7 +78,8 @@ function scripts.interface.editor(editor)
if xmlfile == "" then
logs.simple("unable to locate cont-en.xml")
end
- for _, interface in ipairs(interfaces) do
+ for i=1,#interfaces do
+ local interface = interfaces[i]
local keyfile = resolvers.find_file(format("keys-%s.xml",interface)) or ""
if keyfile == "" then
logs.simple("unable to locate keys-*.xml")
@@ -138,7 +143,7 @@ function scripts.interface.check()
end
function scripts.interface.context()
- local filename = resolvers.find_file("mult-def.lua") or ""
+ local filename = resolvers.find_file(environment.files[1] or "mult-def.lua") or ""
if filename ~= "" then
local interface = dofile(filename)
if interface and next(interface) then
@@ -150,7 +155,9 @@ function scripts.interface.context()
texresult[#texresult+1] = format("%% definitions for interface %s for language %s\n%%",what,language)
xmlresult[#xmlresult+1] = format("\t<!-- definitions for interface %s for language %s -->\n",what,language)
xmlresult[#xmlresult+1] = format("\t<cd:%s>",what)
- for _, key in ipairs(table.sortedkeys(t)) do
+ local sorted = table.sortedkeys(t)
+ for i=1,#sorted do
+ local key = sorted[i]
local v = t[key]
local value = v[language] or v["en"]
if not value then
@@ -178,7 +185,7 @@ function scripts.interface.context()
return a .. b .. c .. b
end)
end
- for language, _ in pairs(commands.setuplayout) do
+ for language, _ in next, commands.setuplayout do
local texresult, xmlresult = { }, { }
texresult[#texresult+1] = format("%% this file is auto-generated, don't edit this file\n%%")
xmlresult[#xmlresult+1] = format("<?xml version='1.0'?>\n",tag)
@@ -213,10 +220,11 @@ function scripts.interface.context()
end
function scripts.interface.messages()
- local filename = resolvers.find_file("mult-mes.lua") or ""
+ local filename = resolvers.find_file(environment.files[1] or "mult-mes.lua") or ""
if filename ~= "" then
local messages = dofile(filename)
- for _, interface in ipairs(messageinterfaces) do
+ for i=1,#messageinterfaces do
+ local interface = messageinterfaces[i]
local texresult = { }
for category, data in next, messages do
for tag, message in next, data do
@@ -234,7 +242,7 @@ function scripts.interface.messages()
end
end
-logs.extendbanner("Interface Tools 0.11",true)
+logs.extendbanner("ConTeXt Interface Related Goodies 0.11",true)
messages.help = [[
--scite generate scite interface
diff --git a/Master/texmf-dist/scripts/context/lua/mtx-metatex.lua b/Master/texmf-dist/scripts/context/lua/mtx-metatex.lua
index f8c871a7b1c..4453e2ccb47 100644
--- a/Master/texmf-dist/scripts/context/lua/mtx-metatex.lua
+++ b/Master/texmf-dist/scripts/context/lua/mtx-metatex.lua
@@ -49,7 +49,7 @@ function scripts.metatex.timed(action)
statistics.timed(action)
end
-logs.extendbanner("MetaTeX Tools 0.10",true)
+logs.extendbanner("MetaTeX Process Management 0.10",true)
messages.help = [[
--run process (one or more) files (default action)
diff --git a/Master/texmf-dist/scripts/context/lua/mtx-modules.lua b/Master/texmf-dist/scripts/context/lua/mtx-modules.lua
new file mode 100644
index 00000000000..3a348593f8e
--- /dev/null
+++ b/Master/texmf-dist/scripts/context/lua/mtx-modules.lua
@@ -0,0 +1,167 @@
+if not modules then modules = { } end modules ['mtx-modules'] = {
+ version = 1.002,
+ comment = "companion to mtxrun.lua",
+ author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
+ copyright = "PRAGMA ADE / ConTeXt Development Team",
+ license = "see context related readme files"
+}
+
+scripts = scripts or { }
+scripts.modules = scripts.modules or { }
+
+-- Documentation can be woven into a source file. This script can generates
+-- a file with the documentation and source fragments properly tagged. The
+-- documentation is included as comment:
+--
+-- %D ...... some kind of documentation
+-- %M ...... macros needed for documenation
+-- %S B begin skipping
+-- %S E end skipping
+--
+-- The generated file is structured as:
+--
+-- \starttypen
+-- \startmodule[type=suffix]
+-- \startdocumentation
+-- \stopdocumentation
+-- \startdefinition
+-- \stopdefinition
+-- \stopmodule
+-- \stoptypen
+--
+-- Macro definitions specific to the documentation are not surrounded by
+-- start-stop commands. The suffix specificaction can be overruled at runtime,
+-- but defaults to the file extension. This specification can be used for language
+-- depended verbatim typesetting.
+
+local find, format, sub, is_empty, strip = string.find, string.format, string.sub, string.is_empty, string.strip
+
+local function source_to_ted(inpname,outname,filetype)
+ local inp = io.open(inpname)
+ if not inp then
+ logs.simple("unable to open '%s'",inpname)
+ return
+ end
+ local out = io.open(outname,"w")
+ if not out then
+ logs.simple("unable to open '%s'",outname)
+ return
+ end
+ logs.simple("converting '%s' to '%s'",inpname,outname)
+ local skiplevel, indocument, indefinition = 0, false, false
+ out:write(format("\\startmodule[type=%s]\n",filetype or file.suffix(inpname)))
+ for line in inp:lines() do
+--~ line = strip(line)
+ if find(line,"^%%D ") or find(line,"^%%D$") then
+ if skiplevel == 0 then
+ local someline = (#line < 3 and "") or sub(line,4,#line)
+ if indocument then
+ out:write(format("%s\n",someline))
+ else
+ if indefinition then
+ out:write("\\stopdefinition\n")
+ indefinition = false
+ end
+ if not indocument then
+ out:write("\n\\startdocumentation\n")
+ end
+ out:write(format("%s\n",someline))
+ indocument = true
+ end
+ end
+ elseif find(line,"^%%M ") or find(line,"^%%M$") then
+ if skiplevel == 0 then
+ local someline = (#line < 3 and "") or sub(line,4,#line)
+ out:write(format("%s\n",someline))
+ end
+ elseif find(line,"^%%S B") then
+ skiplevel = skiplevel + 1
+ elseif find(line,"^%%S E") then
+ skiplevel = skiplevel - 1
+ elseif find(line,"^%%") then
+ -- nothing
+ elseif skiplevel == 0 then
+ inlocaldocument = indocument
+ inlocaldocument = false
+ local someline = line
+ if indocument then
+ out:write("\\stopdocumentation\n")
+ indocument = false
+ end
+ if indefinition then
+ if is_empty(someline) then
+ out:write("\\stopdefinition\n")
+ indefinition = false
+ else
+ out:write(format("%s\n",someline))
+ end
+ elseif not is_empty(someline) then
+ out:write("\n\\startdefinition\n")
+ indefinition = true
+ if inlocaldocument then
+ -- nothing
+ else
+ out:write(format("%s\n",someline))
+ end
+ end
+ end
+ end
+ if indocument then
+ out:write("\\stopdocumentation\n")
+ end
+ if indefinition then
+ out:write("\\stopdefinition\n")
+ end
+ out:write("\\stopmodule\n")
+ out:close()
+ inp:close()
+ return true
+end
+
+local suffixes = table.tohash { 'tex','mkii','mkiv','mp' }
+
+function scripts.modules.process(runtex)
+ local processed = { }
+ local prep = environment.argument("prep")
+ local files = environment.files
+ for i=1,#files do
+ local shortname = files[i]
+ local suffix = file.suffix(shortname)
+ if suffixes[suffix] then
+ local longname
+ if prep then
+ longname = shortname .. ".prep"
+ else
+ longname = file.removesuffix(shortname) .. "-" .. suffix .. ".ted"
+ end
+ local done = source_to_ted(shortname,longname)
+ if done and runtex then
+ os.execute(format("mtxrun --script context --usemodule=mod-01 %s",longname))
+ processed[#processed+1] = longname
+ end
+ end
+ end
+ for i=1,#processed do
+ local name = processed[i]
+ logs.simple("modules","processed: %s",name)
+ end
+end
+
+-- context --ctx=m-modules.ctx xxx.mkiv
+
+
+logs.extendbanner("ConTeXt Module Documentation Generators 1.00",true)
+
+messages.help = [[
+--convert convert source files (tex, mkii, mkiv, mp) to 'ted' files
+--process process source files (tex, mkii, mkiv, mp) to 'pdf' files
+--prep use original name with suffix 'prep' appended
+]]
+
+if environment.argument("process") then
+ scripts.modules.process(true)
+elseif environment.argument("convert") then
+ scripts.modules.process(false)
+else
+ logs.help(messages.help)
+end
diff --git a/Master/texmf-dist/scripts/context/lua/mtx-mptopdf.lua b/Master/texmf-dist/scripts/context/lua/mtx-mptopdf.lua
index 4243625adb9..342ff1c284a 100644
--- a/Master/texmf-dist/scripts/context/lua/mtx-mptopdf.lua
+++ b/Master/texmf-dist/scripts/context/lua/mtx-mptopdf.lua
@@ -1,6 +1,6 @@
if not modules then modules = { } end modules ['mtx-mptopdf'] = {
version = 1.303,
- comment = "companion to mtxrun.lua",
+ comment = "companion to mtxrun.lua, patched by HH so errors are his",
author = "Taco Hoekwater, Elvenkind BV, Dordrecht NL",
copyright = "Elvenkind BV / ConTeXt Development Team",
license = "see context related readme files"
@@ -10,40 +10,30 @@ scripts = scripts or { }
scripts.mptopdf = scripts.mptopdf or { }
scripts.mptopdf.aux = scripts.mptopdf.aux or { }
-do
- -- setup functions and variables here
+local dosish = os.type == 'windows'
+local miktex = dosish and environment.TEXSYSTEM and environment.TEXSYSTEM:find("miktex")
+local escapeshell = environment.SHELL and environment.SHELL:find("sh") and true
- local dosish, miktex, escapeshell = false, false, false
+function scripts.mptopdf.aux.find_latex(fname)
+ local d = io.loaddata(fname) or ""
+ return d:find("\\documentstyle") or d:find("\\documentclass") or d:find("\\begin{document}")
+end
- if os.platform == 'windows' then
- dosish = true
- if environment.TEXSYSTEM and environment.TEXSYSTEM:find("miktex") then
- miktex = true
+function scripts.mptopdf.aux.do_convert (fname)
+ local command, done, pdfdest = "", 0, ""
+ if fname:find(".%d+$") or fname:find("%.mps$") then
+ if miktex then
+ command = "pdftex -undump=mptopdf"
+ else
+ command = "pdftex -fmt=mptopdf -progname=context"
end
- end
- if environment.SHELL and environment.SHELL:find("sh") then
- escapeshell = true
- end
-
- function scripts.mptopdf.aux.find_latex(fname)
- local d = io.loaddata(fname) or ""
- return d:find("\\documentstyle") or d:find("\\documentclass") or d:find("\\begin{document}")
- end
-
- function scripts.mptopdf.aux.do_convert (fname)
- local command, done, pdfdest = "", 0, ""
- if fname:find(".%d+$") or fname:find("%.mps$") then
- if miktex then
- command = "pdftex -undump=mptopdf"
- else
- command = "pdftex -fmt=mptopdf -progname=context"
- end
- if dosish then
- command = string.format('%s \\relax "%s"',command,fname)
- else
- command = string.format('%s \\\\relax "%s"',command,fname)
- end
- os.execute(command)
+ if dosish then
+ command = string.format('%s \\relax "%s"',command,fname)
+ else
+ command = string.format('%s \\\\relax "%s"',command,fname)
+ end
+ local result = os.execute(command)
+ if result == 0 then
local name, suffix = file.nameonly(fname), file.extname(fname)
local pdfsrc = name .. ".pdf"
if lfs.isfile(pdfsrc) then
@@ -55,29 +45,28 @@ do
done = 1
end
end
- return done, pdfdest
end
+ return done, pdfdest
+end
- function scripts.mptopdf.aux.make_mps(fn,latex,rawmp,metafun)
- local rest, mpbin = latex and " --tex=latex " or " ", ""
- if rawmp then
- if metafun then
- mpbin = "mpost --progname=mpost --mem=metafun"
- else
- mpbin = "mpost --mem=mpost"
- end
+function scripts.mptopdf.aux.make_mps(fn,latex,rawmp,metafun)
+ local rest, mpbin = latex and " --tex=latex " or " ", ""
+ if rawmp then
+ if metafun then
+ mpbin = "mpost --progname=mpost --mem=metafun"
else
- if latex then
- mpbin = "mpost --mem=mpost"
- else
- mpbin = "texexec --mptex"
- end
+ mpbin = "mpost --mem=mpost"
end
- local runner = mpbin .. rest .. fn
- logs.simple("running: %s\n", runner)
- return (os.execute(runner))
- end
-
+ else
+ if latex then
+ mpbin = "mpost --mem=mpost"
+ else
+ mpbin = "texexec --mptex"
+ end
+ end
+ local runner = mpbin .. rest .. fn
+ logs.simple("running: %s\n", runner)
+ return (os.execute(runner))
end
function scripts.mptopdf.convertall()
@@ -97,7 +86,8 @@ function scripts.mptopdf.convertall()
exit(1)
end
local report = { }
- for _,fn in ipairs(files) do
+ for i=1,#files do
+ local fn = files[i]
local success, name = scripts.mptopdf.aux.do_convert(fn)
if success > 0 then
report[#report+1] = { fn, name }
@@ -106,11 +96,12 @@ function scripts.mptopdf.convertall()
if #report > 0 then
logs.simple("number of converted files: %i", #report)
logs.simple("")
- for _, r in ipairs(report) do
+ for i=1,#report do
+ local r = report[i]
logs.simple("%s => %s", r[1], r[2])
end
else
- logs.simple("no input files match %s", table.concat(files,' '))
+ logs.simple("no files are converted")
end
else
logs.simple("no files match %s", table.concat(environment.files,' '))
diff --git a/Master/texmf-dist/scripts/context/lua/mtx-mtxworks.lua b/Master/texmf-dist/scripts/context/lua/mtx-mtxworks.lua
new file mode 100644
index 00000000000..1239ae4c5b5
--- /dev/null
+++ b/Master/texmf-dist/scripts/context/lua/mtx-mtxworks.lua
@@ -0,0 +1,14 @@
+if not modules then modules = { } end modules ['mtx-mtxworks'] = {
+ version = 1.002,
+ comment = "companion to mtxrun.lua",
+ author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
+ copyright = "PRAGMA ADE / ConTeXt Development Team",
+ license = "see context related readme files"
+}
+
+-- this is a shortcut to "mtxrun --script texworks --start"
+
+environment.setargument("start",true)
+
+require "mtx-texworks"
+
diff --git a/Master/texmf-dist/scripts/context/lua/mtx-package.lua b/Master/texmf-dist/scripts/context/lua/mtx-package.lua
index 06c89907adf..b36fc0ed89c 100644
--- a/Master/texmf-dist/scripts/context/lua/mtx-package.lua
+++ b/Master/texmf-dist/scripts/context/lua/mtx-package.lua
@@ -55,7 +55,7 @@ function scripts.package.merge_luatex_files(name,strip)
end
end
-logs.extendbanner("Package Tools 0.1",true)
+logs.extendbanner("Distribution Related Goodies 0.10",true)
messages.help = [[
--merge merge 'loadmodule' into merge file
diff --git a/Master/texmf-dist/scripts/context/lua/mtx-patterns.lua b/Master/texmf-dist/scripts/context/lua/mtx-patterns.lua
index 7f130465bdf..293016991ff 100644
--- a/Master/texmf-dist/scripts/context/lua/mtx-patterns.lua
+++ b/Master/texmf-dist/scripts/context/lua/mtx-patterns.lua
@@ -14,25 +14,25 @@ scripts.patterns = scripts.patterns or { }
scripts.patterns.list = {
{ "??", "hyph-ar.tex", "arabic" },
{ "bg", "hyph-bg.tex", "bulgarian" },
--- { "ca", "hyph-ca.tex", "" },
+ { "ca", "hyph-ca.tex", "catalan" },
{ "??", "hyph-cop.tex", "coptic" },
{ "cs", "hyph-cs.tex", "czech" },
- { "??", "hyph-cy.tex", "welsh" },
+ { "cy", "hyph-cy.tex", "welsh" },
{ "da", "hyph-da.tex", "danish" },
{ "deo", "hyph-de-1901.tex", "german, old spelling" },
{ "de", "hyph-de-1996.tex", "german, new spelling" },
--~ { "??", "hyph-el-monoton.tex", "" },
--~ { "??", "hyph-el-polyton.tex", "" },
---~ { "agr", "hyph-grc", "ancient greek" },
+ { "agr", "hyph-grc", "ancient greek" },
--~ { "???", "hyph-x-ibycus", "ancient greek in ibycus encoding" },
--~ { "gr", "", "" },
- { "??", "hyph-eo.tex", "esperanto" },
+ { "eo", "hyph-eo.tex", "esperanto" },
{ "gb", "hyph-en-gb.tex", "british english" },
{ "us", "hyph-en-us.tex", "american english" },
{ "es", "hyph-es.tex", "spanish" },
{ "et", "hyph-et.tex", "estonian" },
{ "eu", "hyph-eu.tex", "basque" }, -- ba is Bashkir!
- { "??", "hyph-fa.tex", "farsi" },
+ { "fa", "hyph-fa.tex", "farsi" },
{ "fi", "hyph-fi.tex", "finnish" },
{ "fr", "hyph-fr.tex", "french" },
-- { "??", "hyph-ga.tex", "" },
@@ -43,11 +43,11 @@ scripts.patterns.list = {
{ "hu", "hyph-hu.tex", "hungarian" },
{ "??", "hyph-ia.tex", "interlingua" },
{ "??", "hyph-id.tex", "indonesian" },
- { "??", "hyph-is.tex", "icelandic" },
+ { "is", "hyph-is.tex", "icelandic" },
{ "it", "hyph-it.tex", "italian" },
{ "la", "hyph-la.tex", "latin" },
- { "??", "hyph-mn-cyrl.tex", "mongolian, cyrillic script" },
- { "??", "hyph-mn-cyrl-x-new.tex", "mongolian, cyrillic script (new patterns)" },
+ { "lt", "hyph-lt.tex", "lithuanian" },
+ { "mn", "hyph-mn-cyrl.tex", "mongolian, cyrillic script" },
{ "nb", "hyph-nb.tex", "norwegian bokmål" },
{ "nl", "hyph-nl.tex", "dutch" },
{ "nn", "hyph-nn.tex", "norwegian nynorsk" },
@@ -55,13 +55,14 @@ scripts.patterns.list = {
{ "pt", "hyph-pt.tex", "portuguese" },
{ "ro", "hyph-ro.tex", "romanian" },
{ "ru", "hyph-ru.tex", "russian" },
- { "sk", "hyph-sk.tex", "" },
+ { "sk", "hyph-sk.tex", "slovak" },
{ "sl", "hyph-sl.tex", "slovenian" },
- { "??", "hyph-sr-cyrl.tex", "serbian" },
+ { "sr", "hyph-sr-cyrl.tex", "serbian" },
{ "sv", "hyph-sv.tex", "swedish" },
{ "tr", "hyph-tr.tex", "turkish" },
+ { "tk", "hyph-tk.tex", "turkman" },
{ "uk", "hyph-uk.tex", "ukrainian" },
- { "??", "hyph-zh-latn.tex", "zh-latn, chinese Pinyin" },
+ { "zh", "hyph-zh-latn.tex", "zh-latn, chinese Pinyin" },
}
@@ -152,7 +153,7 @@ function scripts.patterns.load(path,name,mnemonic,fullcheck)
end
h.patterns = nil
h.hyphenation = nil
- for k, v in pairs(h) do
+ for k, v in next, h do
if not permitted_commands[k] then okay = false end
if mnemonic then
logs.simple("command \\%s found in language %s, file %s, n=%s",k,mnemonic,name,v)
@@ -161,7 +162,7 @@ function scripts.patterns.load(path,name,mnemonic,fullcheck)
end
end
if not environment.argument("fast") then
- for k, v in pairs(c) do
+ for k, v in next, c do
if mnemonic then
logs.simple("command \\%s found in comment of language %s, file %s, n=%s",k,mnemonic,name,v)
else
@@ -221,7 +222,7 @@ function scripts.patterns.load(path,name,mnemonic,fullcheck)
end
end
local stripped = { }
- for k, v in pairs(p) do
+ for k, v in next, p do
if mnemonic then
logs.simple("invalid character %s (0x%04X) in patterns of language %s, file %s, n=%s",char(k),k,mnemonic,name,v)
else
@@ -233,7 +234,7 @@ function scripts.patterns.load(path,name,mnemonic,fullcheck)
stripped[k] = true
end
end
- for k, v in pairs(h) do
+ for k, v in next, h do
if mnemonic then
logs.simple("invalid character %s (0x%04X) in exceptions of language %s, file %s, n=%s",char(k),k,mnemonic,name,v)
else
@@ -246,7 +247,7 @@ function scripts.patterns.load(path,name,mnemonic,fullcheck)
end
end
local stripset = ""
- for k, v in pairs(stripped) do
+ for k, v in next, stripped do
logs.simple("entries that contain character %s will be omitted",char(k))
stripset = stripset .. "%" .. char(k)
end
@@ -292,8 +293,10 @@ end
function scripts.patterns.check()
local path = environment.argument("path") or "."
local found = false
- if #environment.files > 0 then
- for _, name in ipairs(environment.files) do
+ local files = environment.files
+ if #files > 0 then
+ for i=1,#files do
+ local name = files[i]
logs.simple("checking language file %s", name)
local okay = scripts.patterns.load(path,name,nil,not environment.argument("fast"))
if #environment.files > 1 then
@@ -301,7 +304,7 @@ function scripts.patterns.check()
end
end
else
- for k, v in pairs(scripts.patterns.list) do
+ for k, v in next, scripts.patterns.list do
local mnemonic, name = v[1], v[2]
logs.simple("checking language %s, file %s", mnemonic, name)
local okay = scripts.patterns.load(path,name,mnemonic,not environment.argument("fast"))
@@ -322,7 +325,7 @@ function scripts.patterns.convert()
if path == destination then
logs.simple("source path and destination path should differ (use --path and/or --destination)")
else
- for k, v in pairs(scripts.patterns.list) do
+ for k, v in next, scripts.patterns.list do
local mnemonic, name = v[1], v[2]
logs.simple("converting language %s, file %s", mnemonic, name)
local okay, patterns, hyphenations, comment, stripped, pused, hused = scripts.patterns.load(path,name,false)
@@ -337,7 +340,7 @@ function scripts.patterns.convert()
end
end
-logs.extendbanner("Pattern Tools 0.20",true)
+logs.extendbanner("ConTeXt Pattern File Management 0.20",true)
messages.help = [[
--convert generate context language files (mnemonic driven, if not given then all)
@@ -360,3 +363,4 @@ end
-- mtxrun --script pattern --check --path=c:/data/develop/svn-hyphen/trunk/hyph-utf8/tex/generic/hyph-utf8/patterns
-- mtxrun --script pattern --check --fast --path=c:/data/develop/svn-hyphen/trunk/hyph-utf8/tex/generic/hyph-utf8/patterns
-- mtxrun --script pattern --convert --path=c:/data/develop/svn-hyphen/trunk/hyph-utf8/tex/generic/hyph-utf8/patterns --destination=e:/tmp/patterns
+-- mtxrun --script pattern --convert --path=c:/data/develop/svn-hyphen/branches/luatex/hyph-utf8/tex/generic/hyph-utf8/patterns/tex --destination=e:/tmp/patterns
diff --git a/Master/texmf-dist/scripts/context/lua/mtx-profile.lua b/Master/texmf-dist/scripts/context/lua/mtx-profile.lua
index d99f7e926bc..11d48d0399b 100644
--- a/Master/texmf-dist/scripts/context/lua/mtx-profile.lua
+++ b/Master/texmf-dist/scripts/context/lua/mtx-profile.lua
@@ -54,9 +54,13 @@ function scripts.profiler.analyse(filename)
f:close()
print("")
local loaded = { }
- for _, filename in ipairs(table.sortedkeys(times)) do
+ local sortedtable.sortedkeys(times)
+ for i=1,#sorted do
+ local filename = sorted[i]
local functions = times[filename]
- for _, functionname in ipairs(table.sortedkeys(functions)) do
+ local sorted = table.sortedkeys(functions)
+ for i=1,#sorted do
+ local functionname = sorted[i]
local totaltime = functions[functionname]
local count = counts[functionname]
totalcount = totalcount + count
@@ -81,7 +85,9 @@ function scripts.profiler.analyse(filename)
end
end
print("")
- for _, call in ipairs(table.sortedkeys(calls)) do
+ local sorted = table.sortedkeys(calls)
+ for i=1,#sorted do
+ local call = sorted[i]
local n = calls[call]
totalcalls = totalcalls + n
if n > callthreshold then
@@ -95,7 +101,7 @@ function scripts.profiler.analyse(filename)
end
end
-function scripts.profiler.analyse(filename)
+function scripts.profiler.x_analyse(filename)
local f = io.open(filename)
local calls = { }
local lines = 0
@@ -148,7 +154,7 @@ end
--~ scripts.profiler.analyse("t:/manuals/mk/mk-fonts-profile.lua")
--~ scripts.profiler.analyse("t:/manuals/mk/mk-introduction-profile.lua")
-logs.extendbanner("LuaTeX Profiler 1.00",true)
+logs.extendbanner("ConTeXt MkIV LuaTeX Profiler 1.00",true)
messages.help = [[
--analyse analyse lua calls
diff --git a/Master/texmf-dist/scripts/context/lua/mtx-scite.lua b/Master/texmf-dist/scripts/context/lua/mtx-scite.lua
new file mode 100644
index 00000000000..d5f0a5344e5
--- /dev/null
+++ b/Master/texmf-dist/scripts/context/lua/mtx-scite.lua
@@ -0,0 +1,166 @@
+if not modules then modules = { } end modules ['mtx-scite'] = {
+ version = 1.001,
+ comment = "companion to mtxrun.lua",
+ author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
+ copyright = "PRAGMA ADE / ConTeXt Development Team",
+ license = "see context related readme files"
+}
+
+-- todo: append to global properties else order of loading problem
+-- linux problem ... files are under root protection so we need --install
+
+scripts = scripts or { }
+scripts.scite = scripts.scite or { }
+
+local scitesignals = { "scite-context.rme", "context.properties" }
+local screenfont = "lmtypewriter10-regular.ttf"
+
+function scripts.scite.start(indeed)
+ local usedsignal, datapath, fullname, workname, userpath, fontpath
+ if os.type == "windows" then
+ workname = "scite.exe"
+ userpath = os.getenv("USERPROFILE") or ""
+ fontpath = os.getenv("SYSTEMROOT")
+ fontpath = (fontpath and file.join(fontpath,"fonts")) or ""
+ else
+ workname = "scite"
+ userpath = os.getenv("HOME") or ""
+ fontpath = ""
+ end
+ local binpaths = file.split_path(os.getenv("PATH")) or file.split_path(os.getenv("path"))
+ for i=1,#scitesignals do
+ local scitesignal = scitesignals[i]
+ local scitepath = resolvers.find_file(scitesignal,"other text files") or ""
+ if scitepath ~= "" then
+ scitepath = file.dirname(scitepath) -- data
+ if scitepath == "" then
+ scitepath = resolvers.clean_path(lfs.currentdir())
+ else
+ usedsignal, datapath = scitesignal, scitepath
+ break
+ end
+ end
+ end
+ if not datapath or datapath == "" then
+ logs.simple("invalid datapath, maybe you need to regenerate the file database")
+ return false
+ end
+ if not binpaths or #binpaths == 0 then
+ logs.simple("invalid binpath")
+ return false
+ end
+ for i=1,#binpaths do
+ local p = file.join(binpaths[i],workname)
+ if lfs.isfile(p) and lfs.attributes(p,"size") > 10000 then -- avoind stub
+ fullname = p
+ break
+ end
+ end
+ if not fullname then
+ logs.simple("unable to locate %s",workname)
+ return false
+ end
+ local properties = dir.glob(file.join(datapath,"*.properties"))
+ local luafiles = dir.glob(file.join(datapath,"*.lua"))
+ local extrafont = resolvers.find_file(screenfont,"truetype font") or ""
+ local pragmafound = dir.glob(file.join(datapath,"pragma.properties"))
+ if userpath == "" then
+ logs.simple("unable to figure out userpath")
+ return false
+ end
+ local verbose = environment.argument("verbose")
+ local tobecopied, logdata = { }, { }
+ local function check_state(fullname,newpath)
+ local basename = file.basename(fullname)
+ local destination = file.join(newpath,basename)
+ local pa, da = lfs.attributes(fullname), lfs.attributes(destination)
+ if not da then
+ logdata[#logdata+1] = { "new : %s", basename }
+ tobecopied[#tobecopied+1] = { fullname, destination }
+ elseif pa.modification > da.modification then
+ logdata[#logdata+1] = { "outdated : %s", basename }
+ tobecopied[#tobecopied+1] = { fullname, destination }
+ else
+ logdata[#logdata+1] = { "up to date : %s", basename }
+ end
+ end
+ for i=1,#properties do
+ check_state(properties[i],userpath)
+ end
+ for i=1,#luafiles do
+ check_state(luafiles[i],userpath)
+ end
+ if fontpath ~= "" then
+ check_state(extrafont,fontpath)
+ end
+ local userpropfile = "SciTEUser.properties"
+ if os.name ~= "windows" then
+ userpropfile = "." .. userpropfile
+ end
+ local fullpropfile = file.join(userpath,userpropfile)
+ local userpropdata = io.loaddata(fullpropfile) or ""
+ local propfiledone = false
+ if pragmafound then
+ if userpropdata == "" then
+ logdata[#logdata+1] = { "error : no user properties found on '%s'", fullpropfile }
+ elseif string.find(userpropdata,"import *pragma") then
+ logdata[#logdata+1] = { "up to date : 'import pragma' in '%s'", userpropfile }
+ else
+ logdata[#logdata+1] = { "yet unset : 'import pragma' in '%s'", userpropfile }
+ userproperties = userpropdata .. "\n\nimport pragma\n\n"
+ propfiledone = true
+ end
+ else
+ if string.find(userpropdata,"import *context") then
+ logdata[#logdata+1] = { "up to date : 'import context' in '%s'", userpropfile }
+ else
+ logdata[#logdata+1] = { "yet unset : 'import context' in '%s'", userpropfile }
+ userproperties = userpropdata .. "\n\nimport context\n\n"
+ propfiledone = true
+ end
+ end
+ if not indeed or verbose then
+ logs.simple("used signal: %s", usedsignal)
+ logs.simple("data path : %s", datapath)
+ logs.simple("full name : %s", fullname)
+ logs.simple("user path : %s", userpath)
+ logs.simple("extra font : %s", extrafont)
+ end
+ if #logdata > 0 then
+ logs.simple("")
+ for k=1,#logdata do
+ local v = logdata[k]
+ logs.simple(v[1],v[2])
+ end
+ end
+ if indeed then
+ if #tobecopied > 0 then
+ logs.simple("warning : copying updated files")
+ for i=1,#tobecopied do
+ local what = tobecopied[i]
+ logs.simple("copying : '%s' => '%s'",what[1],what[2])
+ file.copy(what[1],what[2])
+ end
+ end
+ if propfiledone then
+ logs.simple("saving : '%s'",userpropfile)
+ io.savedata(fullpropfile,userpropdata)
+ end
+ os.launch(fullname)
+ end
+end
+
+logs.extendbanner("Scite Startup Script 1.00",true)
+
+messages.help = [[
+--start [--verbose] start scite
+--test report what will happen
+]]
+
+if environment.argument("start") then
+ scripts.scite.start(true)
+elseif environment.argument("test") then
+ scripts.scite.start()
+else
+ logs.help(messages.help)
+end
diff --git a/Master/texmf-dist/scripts/context/lua/mtx-server-ctx-fonttest.lua b/Master/texmf-dist/scripts/context/lua/mtx-server-ctx-fonttest.lua
index f593c2e351d..b2a993bf836 100644
--- a/Master/texmf-dist/scripts/context/lua/mtx-server-ctx-fonttest.lua
+++ b/Master/texmf-dist/scripts/context/lua/mtx-server-ctx-fonttest.lua
@@ -6,7 +6,7 @@ if not modules then modules = { } end modules ['mtx-server-ctx-fonttest'] = {
license = "see context related readme files"
}
-dofile(resolvers.find_file("l-aux.lua","tex"))
+--~ dofile(resolvers.find_file("l-aux.lua","tex"))
dofile(resolvers.find_file("trac-lmx.lua","tex"))
dofile(resolvers.find_file("font-ott.lua","tex"))
dofile(resolvers.find_file("font-syn.lua","tex"))
@@ -21,8 +21,11 @@ local temppath = caches.setpath("temp","mtx-server-ctx-fonttest")
local basename = "mtx-server-ctx-fonttest-data.lua"
local basepath = temppath
-for _, suffix in ipairs { "tex", "pdf", "log" } do
- os.remove(file.join(temppath,file.addsuffix(tempname,suffix)))
+local remove_suffixes = { "tex", "pdf", "log" }
+local what_options = { "trace", "basemode" }
+
+for i=1,#remove_suffixes do
+ os.remove(file.join(temppath,file.addsuffix(tempname,remove_suffixes[i])))
end
local process_templates = { }
@@ -30,7 +33,7 @@ local process_templates = { }
process_templates.default = [[
\starttext
\setcharactermirroring[1]
- \definefontfeature[sample][%s]
+ \definefontfeature[sample][analyse=yes,%s]
\definedfont[name:%s*sample]
\startTEXpage[offset=3pt]
\detokenize{%s}
@@ -147,9 +150,10 @@ local cache = { }
local function showfeatures(f)
if f then
+ logs.simple("processing font '%s'",f)
local features = cache[f]
if features == nil then
- features = fonts.get_features(f)
+ features = fonts.get_features(resolvers.find_file(f))
if not features then
logs.simple("building cache for '%s'",f)
io.savedata(file.join(temppath,file.addsuffix(tempname,"tex")),format(process_templates.cache,f,f))
@@ -166,18 +170,18 @@ local function showfeatures(f)
local function show(what)
local data = features[what]
if data and next(data) then
- for f,ff in pairs(data) do
+ for f,ff in next, data do
if find(f,"<") then
-- ignore aat for the moment
else
fea[f] = true
- for s, ss in pairs(ff) do
+ for s, ss in next, ff do
if find(s,"%*") then
-- ignore *
else
scr[s] = true
local rs = rev[s] if not rs then rs = {} rev[s] = rs end
- for k, l in pairs(ss) do
+ for k, l in next, ss do
if find(k,"%*") then
-- ignore *
else
@@ -192,16 +196,16 @@ local function showfeatures(f)
end
end
end
- for what, v in table.sortedpairs(features) do
+ for what, v in table.sortedhash(features) do
show(what)
end
local stupid = { }
stupid[#stupid+1] = "var feature_hash = new Array ;"
- for s, sr in pairs(rev) do
+ for s, sr in next, rev do
stupid[#stupid+1] = format("feature_hash['%s'] = new Array ;",s)
- for l, lr in pairs(sr) do
+ for l, lr in next, sr do
stupid[#stupid+1] = format("feature_hash['%s']['%s'] = new Array ;",s,l)
- for f, fr in pairs(lr) do
+ for f, fr in next, lr do
stupid[#stupid+1] = format("feature_hash['%s']['%s']['%s'] = true ;",s,l,f)
end
end
@@ -217,25 +221,50 @@ local function showfeatures(f)
end
end
+local template_h = [[
+<tr>
+ <th>safe name&nbsp;&nbsp;&nbsp;&nbsp;</th>
+ <th>family name&nbsp;&nbsp;&nbsp;&nbsp;</th>
+ <th>style-variant-weight-width&nbsp;&nbsp;&nbsp;&nbsp;</th>
+ <th>font name&nbsp;&nbsp;&nbsp;&nbsp;</th>
+ <th>weight&nbsp;&nbsp;&nbsp;&nbsp;</th>
+ <th>filename</th>
+</tr>]]
+
+local template_d = [[
+<tr>
+ <td><a href='mtx-server-ctx-fonttest.lua?selection=%s'>%s</a>&nbsp;&nbsp;&nbsp;&nbsp;</td>
+ <td>%s&nbsp;&nbsp;&nbsp;&nbsp;</td>
+ <td>%s-%s-%s-%s&nbsp;&nbsp;&nbsp;&nbsp;</td>
+ <td>%s&nbsp;&nbsp;&nbsp;&nbsp;</td>
+ <td>%s&nbsp;&nbsp;&nbsp;&nbsp;</td>
+ <td>%s</td>
+</tr>]]
+
local function select_font()
- local t = fonts.names.list(".*")
+ local t = fonts.names.list(".*",false,true)
if t then
local listoffonts = { }
- local t = fonts.names.list(".*")
- if t then
- listoffonts[#listoffonts+1] = "<table>"
- listoffonts[#listoffonts+1] = "<tr><th>safe name</th><th>font name</th><th>filename</th><th>sub font&nbsp;</th><th>type</th></tr>"
- for k, id in ipairs(table.sortedkeys(t)) do
- local ti = t[id]
- local type, name, file, sub = ti[1], ti[2], ti[3], ti[4]
- if type == "otf" or type == "ttf" or type == "ttc" then
- if sub then sub = "(sub)" else sub = "" end
- listoffonts[#listoffonts+1] = format("<tr><td><a href='mtx-server-ctx-fonttest.lua?selection=%s'>%s</a></td><td>%s</td><td>%s</td><td>%s</td><td>%s</td></tr>",id,id,name,file,sub,type)
- end
+ listoffonts[#listoffonts+1] = "<table>"
+ listoffonts[#listoffonts+1] = template_h
+ for k, v in table.sortedhash(t) do
+ local kind = v.format
+ if kind == "otf" or kind == "ttf" or kind == "ttc" then
+ local fontname = v.fontname
+ listoffonts[#listoffonts+1] = format(template_d, fontname, fontname,
+ v.familyname or "",
+ t.variant or "normal",
+ t.weight or "normal",
+ t.width or "normal",
+ t.style or "normal",
+ v.rawname or fontname,
+ v.fontweight or "",
+ v.filename or ""
+ )
end
- listoffonts[#listoffonts+1] = "</table>"
- return concat(listoffonts,"\n")
end
+ listoffonts[#listoffonts+1] = "</table>"
+ return concat(listoffonts,"\n")
end
return "<b>no fonts</b>"
end
@@ -260,65 +289,80 @@ local result_template = [[
scripts.webserver.registerpath(temppath)
+local function get_specification(name)
+ return fonts.names.resolvedspecification(name or "")
+end
+
local function edit_font(currentfont,detail,tempname)
- local fontname, fontfile, issub = fonts.names.specification(currentfont or "")
- local htmldata = showfeatures(fontfile)
- if htmldata then
- local features, languages, scripts, options = { }, { }, { }, { }
- for k,v in ipairs(table.sortedkeys(htmldata.scripts)) do
- local s = fonts.otf.tables.scripts[v] or v
- if detail and v == detail.script then
- scripts[#scripts+1] = format("<input title='%s' id='s-%s' type='radio' name='script' value='%s' onclick='check_script()' checked='checked'/>&nbsp;<span id='t-s-%s'>%s</span>",s,v,v,v,v)
- else
- scripts[#scripts+1] = format("<input title='%s' id='s-%s' type='radio' name='script' value='%s' onclick='check_script()' />&nbsp;<span id='t-s-%s'>%s</span>",s,v,v,v,v)
+ logs.simple("entering edit mode for '%s'",currentfont)
+ local specification = get_specification(currentfont)
+ if specification then
+ local htmldata = showfeatures(specification.filename)
+ if htmldata then
+ local features, languages, scripts, options = { }, { }, { }, { }
+ local sorted = table.sortedkeys(htmldata.scripts)
+ for k=1,#sorted do
+ local v = sorted[k]
+ local s = fonts.otf.tables.scripts[v] or v
+ if detail and v == detail.script then
+ scripts[#scripts+1] = format("<input title='%s' id='s-%s' type='radio' name='script' value='%s' onclick='check_script()' checked='checked'/>&nbsp;<span id='t-s-%s'>%s</span>",s,v,v,v,v)
+ else
+ scripts[#scripts+1] = format("<input title='%s' id='s-%s' type='radio' name='script' value='%s' onclick='check_script()' />&nbsp;<span id='t-s-%s'>%s</span>",s,v,v,v,v)
+ end
end
- end
- for k,v in ipairs(table.sortedkeys(htmldata.languages)) do
- local l = fonts.otf.tables.languages[v] or v
- if detail and v == detail.language then
- languages[#languages+1] = format("<input title='%s' id='l-%s' type='radio' name='language' value='%s' onclick='check_language()' checked='checked'/>&nbsp;<span id='t-l-%s'>%s</span>",l,v,v,v,v)
- else
- languages[#languages+1] = format("<input title='%s' id='l-%s' type='radio' name='language' value='%s' onclick='check_language()' />&nbsp;<span id='t-l-%s'>%s</span>",l,v,v,v,v)
+ local sorted = table.sortedkeys(htmldata.languages)
+ for k=1,#sorted do
+ local v = sorted[k]
+ local l = fonts.otf.tables.languages[v] or v
+ if detail and v == detail.language then
+ languages[#languages+1] = format("<input title='%s' id='l-%s' type='radio' name='language' value='%s' onclick='check_language()' checked='checked'/>&nbsp;<span id='t-l-%s'>%s</span>",l,v,v,v,v)
+ else
+ languages[#languages+1] = format("<input title='%s' id='l-%s' type='radio' name='language' value='%s' onclick='check_language()' />&nbsp;<span id='t-l-%s'>%s</span>",l,v,v,v,v)
+ end
end
- end
- for k,v in ipairs(table.sortedkeys(htmldata.features)) do
- local f = fonts.otf.tables.features[v] or v
- if detail and detail["f-"..v] then
- features[#features+1] = format("<input title='%s' id='f-%s' type='checkbox' name='f-%s' onclick='check_feature()' checked='checked'/>&nbsp;<span id='t-f-%s'>%s</span>",f,v,v,v,v)
- else
- features[#features+1] = format("<input title='%s' id='f-%s' type='checkbox' name='f-%s' onclick='check_feature()' />&nbsp;<span id='t-f-%s'>%s</span>",f,v,v,v,v)
+ local sorted = table.sortedkeys(htmldata.features)
+ for k=1,#sorted do
+ local v = sorted[k]
+ local f = fonts.otf.tables.features[v] or v
+ if detail and detail["f-"..v] then
+ features[#features+1] = format("<input title='%s' id='f-%s' type='checkbox' name='f-%s' onclick='check_feature()' checked='checked'/>&nbsp;<span id='t-f-%s'>%s</span>",f,v,v,v,v)
+ else
+ features[#features+1] = format("<input title='%s' id='f-%s' type='checkbox' name='f-%s' onclick='check_feature()' />&nbsp;<span id='t-f-%s'>%s</span>",f,v,v,v,v)
+ end
end
- end
- for k, v in ipairs { "trace", "basemode" } do
- if detail and detail["o-"..v] then
- options[#options+1] = format("<input id='o-%s' type='checkbox' name='o-%s' checked='checked'/>&nbsp;%s",v,v,v)
+ for k=1,#what_options do
+ local v = what_options[k]
+ if detail and detail["o-"..v] then
+ options[#options+1] = format("<input id='o-%s' type='checkbox' name='o-%s' checked='checked'/>&nbsp;%s",v,v,v)
+ else
+ options[#options+1] = format("<input id='o-%s' type='checkbox' name='o-%s'/>&nbsp;%s",v,v,v)
+ end
+ end
+ local e = format(edit_template,
+ (detail and detail.sampletext) or sample_line,(detail and detail.name) or "no name",(detail and detail.title) or "",
+ concat(scripts," "),concat(languages," "),concat(features," "),concat(options," "))
+ if tempname then
+ local pdffile, texfile = file.addsuffix(tempname,"pdf"), file.addsuffix(tempname,"tex")
+ local r = format(result_template,pdffile,texfile,pdffile)
+ return e .. r, htmldata.javascript or ""
else
- options[#options+1] = format("<input id='o-%s' type='checkbox' name='o-%s'/>&nbsp;%s",v,v,v)
+ return e, htmldata.javascript or ""
end
- end
- local e = format(edit_template,
- (detail and detail.sampletext) or sample_line,(detail and detail.name) or "no name",(detail and detail.title) or "",
- concat(scripts," "),concat(languages," "),concat(features," "),concat(options," "))
- if tempname then
- local pdffile, texfile = file.addsuffix(tempname,"pdf"), file.addsuffix(tempname,"tex")
- local r = format(result_template,pdffile,texfile,pdffile)
- return e .. r, htmldata.javascript or ""
else
- return e, htmldata.javascript or ""
+ return "error, nothing set up yet"
end
else
- return "error, nothing set up yet"
+ return "error, no info about font"
end
end
local function process_font(currentfont,detail) -- maybe just fontname
- local fontname, fontfile, issub = fonts.names.specification(currentfont or "")
local features = {
"mode=node",
format("language=%s",detail.language or "dflt"),
format("script=%s",detail.script or "dflt"),
}
- for k,v in pairs(detail) do
+ for k,v in next, detail do
local f = match(k,"^f%-(.*)$")
if f then
features[#features+1] = format("%s=yes",f)
@@ -361,25 +405,38 @@ local function show_log(currentfont,detail)
end
local function show_font(currentfont,detail)
- local fontname, fontfile, issub = fonts.names.specification(currentfont or "")
- local features = fonts.get_features(fontfile)
+ local specification = get_specification(currentfont)
+ local features = fonts.get_features(specification.filename)
local result = { }
result[#result+1] = format("<h1>names</h1>",what)
result[#result+1] = "<table>"
- result[#result+1] = format("<tr><td class='tc'>fontname:</td><td>%s</td></tr>",currentfont)
- result[#result+1] = format("<tr><td class='tc'>fullname:</td><td>%s</td></tr>",fontname)
- result[#result+1] = format("<tr><td class='tc'>filename:</td><td>%s</td></tr>",fontfile)
+ result[#result+1] = format("<tr><td class='tc'>fontname: </td><td>%s</td></tr>",currentfont)
+ result[#result+1] = format("<tr><td class='tc'>fullname: </td><td>%s</td></tr>",specification.fontname or "-")
+ result[#result+1] = format("<tr><td class='tc'>filename: </td><td>%s</td></tr>",specification.fontfile or "-")
+ result[#result+1] = format("<tr><td class='tc'>familyname: </td><td>%s</td></tr>",specification.familyname or "-")
+ result[#result+1] = format("<tr><td class='tc'>fontweight: </td><td>%s</td></tr>",specification.fontweight or "-")
+ result[#result+1] = format("<tr><td class='tc'>format: </td><td>%s</td></tr>",specification.format or "-")
+ result[#result+1] = format("<tr><td class='tc'>fullname: </td><td>%s</td></tr>",specification.fullname or "-")
+ result[#result+1] = format("<tr><td class='tc'>subfamily: </td><td>%s</td></tr>",specification.subfamily or "-")
+ result[#result+1] = format("<tr><td class='tc'>rawname: </td><td>%s</td></tr>",specification.rawname or "-")
+ result[#result+1] = format("<tr><td class='tc'>designsize: </td><td>%s</td></tr>",specification.designsize or "-")
+ result[#result+1] = format("<tr><td class='tc'>minimumsize:</td><td>%s</td></tr>",specification.minsize or "-")
+ result[#result+1] = format("<tr><td class='tc'>maximumsize:</td><td>%s</td></tr>",specification.maxsize or "-")
+ result[#result+1] = format("<tr><td class='tc'>style: </td><td>%s</td></tr>",specification.style ~= "" and specification.style or "normal")
+ result[#result+1] = format("<tr><td class='tc'>variant: </td><td>%s</td></tr>",specification.variant ~= "" and specification.variant or "normal")
+ result[#result+1] = format("<tr><td class='tc'>weight: </td><td>%s</td></tr>",specification.weight ~= "" and specification.weight or "normal")
+ result[#result+1] = format("<tr><td class='tc'>width: </td><td>%s</td></tr>",specification.width ~= "" and specification.width or "normal")
result[#result+1] = "</table>"
if features then
- for what, v in table.sortedpairs(features) do
+ for what, v in table.sortedhash(features) do
local data = features[what]
if data and next(data) then
result[#result+1] = format("<h1>%s features</h1>",what)
result[#result+1] = "<table>"
result[#result+1] = "<tr><th>feature</th><th>tag&nbsp;</th><th>script&nbsp;</th><th>languages&nbsp;</th></tr>"
- for f,ff in table.sortedpairs(data) do
+ for f,ff in table.sortedhash(data) do
local done = false
- for s, ss in table.sortedpairs(ff) do
+ for s, ss in table.sortedhash(ff) do
if s == "*" then s = "all" end
if ss ["*"] then ss["*"] = nil ss.all = true end
if done then
@@ -457,10 +514,10 @@ local function loadstored(detail,currentfont,name)
detail.title = storage.title or detail.title
detail.sampletext = storage.text or detail.sampletext
detail.name = name or "no name"
- for k,v in pairs(storage.features) do
+ for k,v in next, storage.features do
detail["f-"..k] = v
end
- for k,v in pairs(storage.options) do
+ for k,v in next, storage.options do
detail["o-"..k] = v
end
end
@@ -486,19 +543,20 @@ local function deletestored(detail,currentfont,name)
end
local function save_font(currentfont,detail)
- local fontname, fontfile, issub = fonts.names.specification(currentfont or "")
+ local specification = get_specification(currentfont)
local name, title, script, language, features, options, text = currentfont, "", "dflt", "dflt", { }, { }, ""
if detail then
- local htmldata = showfeatures(fontfile)
+ local htmldata = showfeatures(specification.filename)
script = detail.script or script
language = detail.language or language
text = string.strip(detail.sampletext or text)
name = string.strip(detail.name or name)
title = string.strip(detail.title or title)
- for k,v in pairs(htmldata.features) do
+ for k,v in next, htmldata.features do
if detail["f-"..k] then features[k] = true end
end
- for k,v in ipairs { "trace", "basemode" } do
+ for k=1,#what_options do
+ local v = what_options[k]
if detail["o-"..v] then options[k] = true end
end
end
@@ -518,8 +576,8 @@ local function load_font(currentfont)
local storage = loadbase(datafile)
local result = {}
result[#result+1] = format("<tr><th>del&nbsp;</th><th>name&nbsp;</th><th>font&nbsp;</th><th>fontname&nbsp;</th><th>script&nbsp;</th><th>language&nbsp;</th><th>features&nbsp;</th><th>title&nbsp;</th><th>sampletext&nbsp;</th></tr>")
- for k,v in table.sortedpairs(storage) do
- local fontname, fontfile, issub = fonts.names.specification(v.font or "")
+ for k,v in table.sortedhash(storage) do
+ local fontname, fontfile = get_specification(v.font)
result[#result+1] = format("<tr><td><a href='mtx-server-ctx-fonttest.lua?deletename=%s'>x</a>&nbsp;</td><td><a href='mtx-server-ctx-fonttest.lua?loadname=%s'>%s</a>&nbsp;</td><td>%s&nbsp;</td<td>%s&nbsp;</td><td>%s&nbsp;</td><td>%s&nbsp;</td><td>%s&nbsp;</td><td>%s&nbsp;</td><td>%s&nbsp;</td></tr>",
k,k,k,v.font,fontname,v.script,v.language,concat(table.sortedkeys(v.features)," "),v.title or "no title",v.text or "")
end
@@ -562,6 +620,13 @@ local status_template = [[
<input type="hidden" name="currentfont" value="%s" />
]]
+local variables = {
+ ['color-background-one'] = lmx.get('color-background-green'),
+ ['color-background-two'] = lmx.get('color-background-blue'),
+ ['title'] = 'ConTeXt Font Tester',
+ ['formaction'] = "mtx-server-ctx-fonttest.lua",
+}
+
function doit(configuration,filename,hashed)
local start = os.clock()
@@ -589,65 +654,52 @@ function doit(configuration,filename,hashed)
action = "extras"
end
- lmx.restore()
-
- local fontname, fontfile, issub = fonts.names.specification(currentfont or "")
+ local fontname, fontfile = get_specification(currentfont)
if fontfile then
- lmx.variables['title-default'] = format('ConTeXt Font Tester: %s (%s)',fontname,fontfile)
+ variables.title = format('ConTeXt Font Tester: %s (%s)',fontname,fontfile)
else
- lmx.variables['title-default'] = 'ConTeXt Font Tester'
+ variables.title = 'ConTeXt Font Tester'
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'] = lmx.variables['title-default']
-
- lmx.set('title', lmx.get('title'))
- lmx.set('color-background-one', lmx.get('color-background-green'))
- lmx.set('color-background-two', lmx.get('color-background-blue'))
-
-- lua table and adapt
- lmx.set('formaction', "mtx-server-ctx-fonttest.lua")
+ local buttons = { 'process', 'select', 'save', 'load', 'edit', 'reset', 'features', 'source', 'log', 'info', 'extras'}
+ local menu = { }
- local menu = { }
- for k, v in ipairs { 'process', 'select', 'save', 'load', 'edit', 'reset', 'features', 'source', 'log', 'info', 'extras'} do
- menu[#menu+1] = format("<button name='action' value='%s' type='submit'>%s</button>",v,v)
+ for i=1,#buttons do
+ local button = buttons[i]
+ menu[#menu+1] = format("<button name='action' value='%s' type='submit'>%s</button>",button,button)
end
- lmx.set('menu', concat(menu,"&nbsp;"))
- logs.simple("action: %s",action or "no action")
+ variables.menu = concat(menu,"&nbsp;")
+ variables.status = format(status_template,currentfont or "")
+ variables.maintext = ""
+ variables.javascriptdata = ""
+ variables.javascripts = ""
+ variables.javascriptinit = ""
- lmx.set("status",format(status_template,currentfont or ""))
+ logs.simple("action: %s",action or "no action")
local result
if action == "select" then
- lmx.set('maintext',select_font())
+ variables.maintext = select_font()
elseif action == "info" then
- lmx.set('maintext',info_about())
+ variables.maintext = info_about()
elseif action == "extras" then
- lmx.set('maintext',do_extras())
+ variables.maintext = do_extras()
elseif currentfont and currentfont ~= "" then
if action == "save" then
- lmx.set('maintext',save_font(currentfont,detail))
+ variables.maintext = save_font(currentfont,detail)
elseif action == "load" then
- lmx.set('maintext',load_font(currentfont,detail))
+ variables.maintext = load_font(currentfont,detail)
elseif action == "source" then
- lmx.set('maintext',show_source(currentfont,detail))
+ variables.maintext = show_source(currentfont,detail)
elseif action == "log" then
- lmx.set('maintext',show_log(currentfont,detail))
+ variables.maintext = show_log(currentfont,detail)
elseif action == "features" then
- lmx.set('maintext',show_font(currentfont,detail))
+ variables.maintext = show_font(currentfont,detail)
else
local e, s
if action == "process" then
@@ -659,16 +711,16 @@ function doit(configuration,filename,hashed)
else
e, s = process_font(currentfont,detail)
end
- lmx.set('maintext',e)
- lmx.set('javascriptdata',s)
- lmx.set('javascripts',javascripts)
- lmx.set('javascriptinit', "check_form()")
+ variables.maintext = e
+ variables.javascriptdata = s
+ variables.javascripts = javascripts
+ variables.javascriptinit = "check_form()"
end
else
- lmx.set('maintext',select_font())
+ variables.maintext = select_font()
end
- result = { content = lmx.convert('context-fonttest.lmx') }
+ result = { content = lmx.convert('context-fonttest.lmx',false,variables) }
logs.simple("time spent on page: %0.03f seconds",os.clock()-start)
diff --git a/Master/texmf-dist/scripts/context/lua/mtx-server-ctx-help.lua b/Master/texmf-dist/scripts/context/lua/mtx-server-ctx-help.lua
index c53d9f6e0f2..2f072f97747 100644
--- a/Master/texmf-dist/scripts/context/lua/mtx-server-ctx-help.lua
+++ b/Master/texmf-dist/scripts/context/lua/mtx-server-ctx-help.lua
@@ -6,8 +6,10 @@ if not modules then modules = { } end modules ['mtx-server-ctx-help'] = {
license = "see context related readme files"
}
---~ dofile(resolvers.find_file("l-xml.lua","tex"))
-dofile(resolvers.find_file("l-aux.lua","tex"))
+-- todo in lua interface: noargument, oneargument, twoarguments, threearguments
+
+--~ dofile(resolvers.find_file("l-aux.lua","tex"))
+--~ dofile(resolvers.find_file("l-url.lua","tex"))
dofile(resolvers.find_file("trac-lmx.lua","tex"))
-- problem ... serialize parent stack
@@ -277,18 +279,23 @@ document.setups.translations = document.setups.translations or {
}
document.setups.formats = {
- interface = [[<a href='mtx-server-ctx-help.lua?interface=%s'>%s</a>]],
- href = [[<a href='mtx-server-ctx-help.lua?command=%s'>%s</a>]],
- source = [[<a href='mtx-server-ctx-help.lua?source=%s'>%s</a>]],
- optional_single = "[optional string %s]",
- optional_list = "[optional list %s]",
- mandate_single = "[mandate string %s]",
- mandate_list = "[mandate list %s]",
- parameter = [[<tr><td width='15%%'>%s</td><td width='15%%'>%s</td><td width='70%%'>%s</td></tr>]],
- parameters = [[<table width='100%%'>%s</table>]],
- listing = [[<pre><t>%s</t></listing>]],
- special = "<i>%s</i>",
- default = "<u>%s</u>",
+ open_command = { [[\%s]], [[context.%s (]] },
+ close_command = { [[]], [[ )]] },
+ connector = { [[]], [[, ]] },
+ href_in_list = { [[<a href='mtx-server-ctx-help.lua?command=%s&mode=%s'>%s</a>]], [[<a href='mtx-server-ctx-help.lua?command=%s&mode=%s'>%s</a>]] },
+ href_as_command = { [[<a href='mtx-server-ctx-help.lua?command=%s&mode=%s'>\%s</a>]], [[<a href='mtx-server-ctx-help.lua?command=%s&mode=%s'>context.%s</a>]] },
+ interface = [[<a href='mtx-server-ctx-help.lua?interface=%s&mode=%s'>%s</a>]],
+ source = [[<a href='mtx-server-ctx-help.lua?source=%s&mode=%s'>%s</a>]],
+ modes = { [[<a href='mtx-server-ctx-help.lua?mode=2'>lua mode</a>]], [[<a href='mtx-server-ctx-help.lua?mode=1'>tex mode</a>]] },
+ optional_single = { "[optional string %s]", "{optional string %s}" },
+ optional_list = { "[optional list %s]", "{optional table %s}" } ,
+ mandate_single = { "[mandate string %s]", "{mandate string %s}" },
+ mandate_list = { "[mandate list %s]", "{mandate list %s}" },
+ parameter = [[<tr><td width='15%%'>%s</td><td width='15%%'>%s</td><td width='70%%'>%s</td></tr>]],
+ parameters = [[<table width='100%%'>%s</table>]],
+ listing = [[<pre><t>%s</t></listing>]],
+ special = [[<i>%s</i>]],
+ default = [[<u>%s</u>]],
}
local function translate(tag,int,noformat)
@@ -298,7 +305,7 @@ local function translate(tag,int,noformat)
if noformat then
return ti[tag] or te[tag] or tag
else
- return document.setups.formats.special:format(ti[tag] or te[tag] or tag)
+ return format(document.setups.formats.special,ti[tag] or te[tag] or tag)
end
end
@@ -307,7 +314,7 @@ local function translated(e,int)
local s = attributes.type or "?"
local tag = s:match("^cd:(.*)$")
if attributes.default == "yes" then
- return document.setups.formats.default:format(tag)
+ return format(document.setups.formats.default,tag or "?")
elseif tag then
return translate(tag,int)
else
@@ -318,7 +325,8 @@ end
document.setups.loaded = document.setups.loaded or { }
document.setups.current = { }
-document.setups.showsources = false
+document.setups.showsources = true
+document.setups.mode = 1
function document.setups.load(filename)
filename = resolvers.find_file(filename) or ""
@@ -358,16 +366,15 @@ end
function document.setups.csname(ek,int)
local cs = ""
- local at = ek.at
+ local at = ek.at or { }
if at.type == 'environment' then
cs = translate("start",int,true) .. cs
end
- for r, d, k in xml.elements(ek,'cd:sequence/(cd:string|variable)') do
- local dk = d[k]
- if dk.tg == "string" then
- cs = cs .. dk.at.value
+ for e in xml.collected(ek,'cd:sequence/(cd:string|variable)') do
+ if e.tg == "string" then
+ cs = cs .. e.at.value
else
- cs = cs .. dk.at.value -- to be translated
+ cs = cs .. e.at.value -- to be translated
end
end
return cs
@@ -380,9 +387,8 @@ function document.setups.names()
names = { }
local name = document.setups.name
local csname = document.setups.csname
- for r, d, k in xml.elements(current.root,'cd:command') do
- local dk = d[k]
- names[#names+1] = { dk.at.name, csname(dk,int) }
+ for e in xml.collected(current.root,'cd:command') do
+ names[#names+1] = { e.at.name, csname(e,int) }
end
table.sort(names, function(a,b) return a[2]:lower() < b[2]:lower() end)
current.names = names
@@ -403,8 +409,9 @@ end
function document.setups.showused()
local current = document.setups.current
if current.root and next(current.used) then
- for k,v in ipairs(table.sortedkeys(current.used)) do
- xml.sprint(current.used[v])
+ local sorted = table.sortedkeys(current.used)
+ for i=1,#sorted do
+ xml.sprint(current.used[sorted[i]])
end
end
end
@@ -412,12 +419,12 @@ function document.setups.showall()
local current = document.setups.current
if current.root then
local list = { }
- xml.each_element(current.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])
+ for e in xml.collected(current.root,"cd:command") do
+ list[document.setups.name(e)] = e
+ end
+ local sorted = table.sortedkeys(list)
+ for i=1,#sorted do
+ xml.sprint(list[sorted[i]])
end
end
end
@@ -431,46 +438,56 @@ function document.setups.resolve(name)
end
end
-function document.setups.collect(name,int)
+function document.setups.collect(name,int,lastmode)
local current = document.setups.current
local formats = document.setups.formats
- local command = xml.filter(current.root,format("cd:command[@name='%s']",name))
+ local command = xml.filter(current.root,format("cd:command[@name='%s']/first()",name))
if command then
- local attributes = command.at
+ local attributes = command.at or { }
local data = {
command = command,
category = attributes.category or "",
}
if document.setups.showsources then
- data.source = (attributes.file and formats.source:format(attributes.file,attributes.file)) or ""
+ data.source = (attributes.file and formats.source:format(attributes.file,lastmode,attributes.file)) or ""
else
data.source = attributes.file or ""
end
- local sequence, n = { "\\" .. document.setups.csname(command,int) }, 0
- local arguments = { }
+ local n, sequence, tags = 0, { }, { }
+ sequence[#sequence+1] = formats.open_command[lastmode]:format(document.setups.csname(command,int))
+ local arguments, tag = { }, ""
for r, d, k in xml.elements(command,"(cd:keywords|cd:assignments)") do
n = n + 1
local attributes = d[k].at
+ if #sequence > 1 then
+ local c = formats.connector[lastmode]
+ if c ~= "" then
+ sequence[#sequence+1] = c
+ end
+ end
if attributes.optional == 'yes' then
if attributes.list == 'yes' then
- sequence[#sequence+1] = formats.optional_list:format(n)
+ tag = formats.optional_list[lastmode]:format(n)
else
- sequence[#sequence+1] = formats.optional_single:format(n)
+ tag = formats.optional_single[lastmode]:format(n)
end
else
if attributes.list == 'yes' then
- sequence[#sequence+1] = formats.mandate_list:format(n)
+ tag = formats.mandate_list[lastmode]:format(n)
else
- sequence[#sequence+1] = formats.mandate_single:format(n)
+ tag = formats.mandate_single[lastmode]:format(n)
end
end
+ sequence[#sequence+1] = tag
+ tags[#tags+1] = tag
end
+ sequence[#sequence+1] = formats.close_command[lastmode]
data.sequence = concat(sequence, " ")
local parameters, n = { }, 0
for r, d, k in xml.elements(command,"(cd:keywords|cd:assignments)") do
n = n + 1
if d[k].tg == "keywords" then
- local left = sequence[n+1]
+ local left = tags[n]
local right = { }
for r, d, k in xml.elements(d[k],"(cd:constant|cd:resolve)") do
local tag = d[k].tg
@@ -488,13 +505,13 @@ function document.setups.collect(name,int)
end
parameters[#parameters+1] = formats.parameter:format(left,"",concat(right, ", "))
else
- local what = sequence[n+1]
+ local what = tags[n]
for r, d, k in xml.elements(d[k],"(cd:parameter|cd:inherit)") do
local tag = d[k].tg
local left, right = d[k].at.name or "?", { }
if tag == "inherit" then
local name = d[k].at.name or "?"
- local goto = document.setups.formats.href:format(name,"\\"..name)
+ local goto = document.setups.formats.href_as_command[lastmode]:format(name,lastmode,name)
if #parameters > 0 and not parameters[#parameters]:find("<br/>") then
parameters[#parameters+1] = formats.parameter:format("<br/>","","")
end
@@ -521,7 +538,8 @@ function document.setups.collect(name,int)
end
parameters[#parameters+1] = formats.parameter:format("<br/>","","")
end
- data.parameters = parameters
+ data.parameters = parameters or { }
+ data.mode = formats.modes[lastmode or 1]
return data
else
return nil
@@ -532,25 +550,6 @@ end
tex = tex or { }
-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-main-left'] = '#3F3F3F'
-lmx.variables['color-background-main-right'] = '#5F5F5F'
-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 Help Information'
-lmx.variables['title'] = lmx.variables['title-default']
-
-function lmx.loadedfile(filename)
- return io.loaddata(resolvers.find_file(filename)) -- return resolvers.texdatablob(filename)
-end
-
-- -- --
local interfaces = {
@@ -564,7 +563,19 @@ local interfaces = {
romanian = 'ro',
}
-local lastinterface, lastcommand, lastsource = "en", "", ""
+local lastinterface, lastcommand, lastsource, lastmode = "en", "", "", 1
+
+local variables = {
+ ['color-background-main-left'] = '#3F3F3F',
+ ['color-background-main-right'] = '#5F5F5F',
+ ['color-background-one'] = lmx.get('color-background-green'),
+ ['color-background-two'] = lmx.get('color-background-blue'),
+ ['title'] = 'ConTeXt Help Information',
+}
+
+--~ function lmx.loadedfile(filename)
+--~ return io.loaddata(resolvers.find_file(filename)) -- return resolvers.texdatablob(filename)
+--~ end
local function doit(configuration,filename,hashed)
@@ -572,9 +583,12 @@ local function doit(configuration,filename,hashed)
local start = os.clock()
- local detail = aux.settings_to_hash(hashed.query or "")
+ local detail = url.query(hashed.query or "")
- lastinterface, lastcommand, lastsource = detail.interface or lastinterface, detail.command or lastcommand, detail.source or lastsource
+ lastinterface = detail.interface or lastinterface
+ lastcommand = detail.command or lastcommand
+ lastsource = detail.source or lastsource
+ lastmode = tonumber(detail.mode or lastmode) or 1
if lastinterface then
logs.simple("checking interface: %s",lastinterface)
@@ -587,58 +601,61 @@ local function doit(configuration,filename,hashed)
local result = { content = "error" }
local names, refs, ints = document.setups.names(lastinterface), { }, { }
- for k,v in ipairs(names) do
- refs[k] = document.setups.formats.href:format(v[1],v[2])
+ for k=1,#names do
+ local v = names[k]
+ refs[k] = formats.href_in_list[lastmode]:format(v[1],lastmode,v[2])
end
- for k,v in ipairs(table.sortedkeys(interfaces)) do
- ints[k] = document.setups.formats.interface:format(interfaces[v],v)
+ if lastmode ~= 2 then
+ local sorted = table.sortedkeys(interfaces)
+ for k=1,#sorted do
+ local v = sorted[k]
+ ints[k] = formats.interface:format(interfaces[v],lastmode,v)
+ end
end
- lmx.restore()
- lmx.set('title', 'ConTeXt Help Information')
- lmx.set('color-background-one', lmx.get('color-background-green'))
- lmx.set('color-background-two', lmx.get('color-background-blue'))
-
local n = concat(refs,"<br/>")
local i = concat(ints,"<br/><br/>")
if div then
- lmx.set('names',div:format(n))
- lmx.set('interfaces',div:format(i))
+ variables.names = div:format(n)
+ variables.interfaces = div:format(i)
else
- lmx.set('names', n)
- lmx.set('interfaces', i)
+ variables.names = n
+ variables.interfaces = i
end
-- first we need to add information about mkii/mkiv
+ variables.maintitle = "no definition"
+ variables.maintext = ""
+ variables.extra = ""
+
if document.setups.showsources and lastsource and lastsource ~= "" then
-- todo: mkii, mkiv, tex (can be different)
local data = io.loaddata(resolvers.find_file(lastsource))
- lmx.set('maintitle', lastsource)
- lmx.set('maintext', formats.listing:format(data))
+ variables.maintitle = lastsource
+ variables.maintext = formats.listing:format(data)
lastsource = ""
elseif lastcommand and lastcommand ~= "" then
- local data = document.setups.collect(lastcommand,lastinterface)
+ local data = document.setups.collect(lastcommand,lastinterface,lastmode)
if data then
- lmx.set('maintitle', data.sequence)
- local extra = { }
- for k, v in ipairs { "environment", "category", "source" } do
+ local what, extra = { "environment", "category", "source", "mode" }, { }
+ for k=1,#what do
+ local v = what[k]
if data[v] and data[v] ~= "" then
lmx.set(v, data[v])
extra[#extra+1] = v .. ": " .. data[v]
end
end
- lmx.set('extra', concat(extra,", "))
- lmx.set('maintext', formats.parameters:format(concat(data.parameters)))
+ variables.maintitle = data.sequence
+ variables.maintext = formats.parameters:format(concat(data.parameters))
+ variables.extra = concat(extra,"&nbsp;&nbsp;&nbsp;")
else
- lmx.set('maintext', "select command")
+ variables.maintext = "select command"
end
- else
- lmx.set('maintext', "no definition")
end
- local content = lmx.convert('context-help.lmx')
+ local content = lmx.convert('context-help.lmx',false,variables)
logs.simple("time spent on page: %0.03f seconds",os.clock()-start)
diff --git a/Master/texmf-dist/scripts/context/lua/mtx-server-ctx-startup.lua b/Master/texmf-dist/scripts/context/lua/mtx-server-ctx-startup.lua
index fcb757b3e60..59536c36cdb 100644
--- a/Master/texmf-dist/scripts/context/lua/mtx-server-ctx-startup.lua
+++ b/Master/texmf-dist/scripts/context/lua/mtx-server-ctx-startup.lua
@@ -10,25 +10,6 @@ dofile(resolvers.find_file("trac-lmx.lua","tex"))
function doit(configuration,filename,hashed)
- lmx.restore()
-
- 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'] = "Overview Of Goodies"
-
- lmx.set('title', lmx.get('title'))
- lmx.set('color-background-one', lmx.get('color-background-green'))
- lmx.set('color-background-two', lmx.get('color-background-blue'))
-
-
local list = { }
local root = file.dirname(resolvers.find_file("mtx-server.lua") or ".")
if root == "" then root = "." end
@@ -42,11 +23,16 @@ function doit(configuration,filename,hashed)
end
end
- lmx.set('maintext',table.concat(list,"\n"))
-
- result = { content = lmx.convert('context-base.lmx') }
+ local variables = {
+ ['color-background-one'] = lmx.get('color-background-green'),
+ ['color-background-two'] = lmx.get('color-background-blue'),
+ ['title'] = "Overview Of Goodies",
+ ['color-background-one'] = lmx.get('color-background-green'),
+ ['color-background-two'] = lmx.get('color-background-blue'),
+ ['maintext'] = table.concat(list,"\n"),
+ }
- return result
+ return { content = lmx.convert('context-base.lmx',false,variables) }
end
diff --git a/Master/texmf-dist/scripts/context/lua/mtx-server.lua b/Master/texmf-dist/scripts/context/lua/mtx-server.lua
index 615506ac0ce..dc0befcaa2f 100644
--- a/Master/texmf-dist/scripts/context/lua/mtx-server.lua
+++ b/Master/texmf-dist/scripts/context/lua/mtx-server.lua
@@ -252,7 +252,8 @@ function scripts.webserver.run(configuration)
end
-- locate root and index file in tex tree
if not lfs.isdir(configuration.root) then
- for _, name in ipairs(indices) do
+ for i=1,#indices do
+ local name = indices[i]
local root = resolvers.resolve("path:" .. name) or ""
if root ~= "" then
configuration.root = root
@@ -263,7 +264,8 @@ function scripts.webserver.run(configuration)
end
configuration.root = dir.expand_name(configuration.root)
if not configuration.index then
- for _, name in ipairs(indices) do
+ for i=1,#indices do
+ local name = indices[i]
if lfs.isfile(file.join(configuration.root,name)) then
configuration.index = name -- we will prepend the rootpath later
break
@@ -281,8 +283,11 @@ function scripts.webserver.run(configuration)
logs.simple("scripts subpath: %s",configuration.scripts)
logs.simple("context services: http://localhost:%s/mtx-server-ctx-startup.lua",configuration.port)
local server = assert(socket.bind("*", configuration.port))
+--~ local reading = { server }
while true do -- no multiple clients
local start = os.clock()
+--~ local input = socket.select(reading)
+--~ local client = input:accept()
local client = server:accept()
client:settimeout(configuration.timeout or 60)
local request, e = client:receive()
@@ -323,7 +328,7 @@ function scripts.webserver.run(configuration)
end
end
-logs.extendbanner("Simple Webserver 0.10")
+logs.extendbanner("Simple Webserver For Helpers 0.10")
messages.help = [[
--start start server
diff --git a/Master/texmf-dist/scripts/context/lua/mtx-texworks.lua b/Master/texmf-dist/scripts/context/lua/mtx-texworks.lua
index f525d5336e2..73ab846cd7f 100644
--- a/Master/texmf-dist/scripts/context/lua/mtx-texworks.lua
+++ b/Master/texmf-dist/scripts/context/lua/mtx-texworks.lua
@@ -20,29 +20,31 @@ local texworkspaths = {
}
local texworkssignal = "texworks-context.rme"
-local texworkininame = "TeXworks.ini"
+local texworkininame = "texworks.ini"
function scripts.texworks.start(indeed)
- local is_mswin = os.platform == "windows"
- local workname = (is_mswin and "texworks.exe") or "TeXworks"
+ local workname = (os.type == "windows" and "texworks.exe") or "texworks"
local fullname = nil
local binpaths = file.split_path(os.getenv("PATH")) or file.split_path(os.getenv("path"))
- local datapath = resolvers.find_file(texworkssignal,"other text files") or ""
+ local usedsignal = texworkssignal
+ local datapath = resolvers.find_file(usedsignal,"other text files") or ""
if datapath ~= "" then
datapath = file.dirname(datapath) -- data
if datapath == "" then
- datapath = resolvers.ownpath
+ datapath = resolvers.clean_path(lfs.currentdir())
end
else
- datapath = resolvers.find_file(texworkininame,"other text files") or ""
+ usedsignal = texworkininame
+ datapath = resolvers.find_file(usedsignal,"other text files") or ""
if datapath == "" then
- datapath = resolvers.find_file(string.lower(texworkininame),"other text files") or ""
+ usedsignal = string.lower(usedsignal)
+ datapath = resolvers.find_file(usedsignal,"other text files") or ""
end
if datapath ~= "" and lfs.isfile(datapath) then
datapath = file.dirname(datapath) -- TUG
datapath = file.dirname(datapath) -- data
if datapath == "" then
- datapath = resolvers.ownpath
+ datapath = resolvers.clean_path(lfs.currentdir())
end
end
end
@@ -56,7 +58,7 @@ function scripts.texworks.start(indeed)
end
for i=1,#binpaths do
local p = file.join(binpaths[i],workname)
- if lfs.isfile(p) then
+ if lfs.isfile(p) and lfs.attributes(p,"size") > 10000 then -- avoind stub
fullname = p
break
end
@@ -65,22 +67,23 @@ function scripts.texworks.start(indeed)
logs.simple("unable to locate %s",workname)
return false
end
- for _, subpath in ipairs(texworkspaths) do
- dir.makedirs(file.join(datapath,subpath))
+ for i=1,#texworkspaths do
+ dir.makedirs(file.join(datapath,texworkspaths[i]))
end
os.setenv("TW_INIPATH",datapath)
os.setenv("TW_LIBPATH",datapath)
if not indeed or environment.argument("verbose") then
- logs.simple("data path: %s", datapath)
- logs.simple("full name: %s", fullname)
+ logs.simple("used signal: %s", usedsignal)
+ logs.simple("data path : %s", datapath)
+ logs.simple("full name : %s", fullname)
+ logs.simple("set paths : TW_INIPATH TW_LIBPATH")
end
if indeed then
os.launch(fullname)
end
end
-
-logs.extendbanner("TeXworks startup script 1.0",true)
+logs.extendbanner("TeXworks Startup Script 1.00",true)
messages.help = [[
--start [--verbose] start texworks
diff --git a/Master/texmf-dist/scripts/context/lua/mtx-timing.lua b/Master/texmf-dist/scripts/context/lua/mtx-timing.lua
index 1dcb9aa0e0d..40e33cdaef0 100644
--- a/Master/texmf-dist/scripts/context/lua/mtx-timing.lua
+++ b/Master/texmf-dist/scripts/context/lua/mtx-timing.lua
@@ -55,15 +55,17 @@ local html_menu = [[
local directrun = true
-function goodies.progress.make_svg(filename,other)
+local what = { "parameters", "nodes" }
+
+function plugins.progress.make_svg(filename,other)
local metadata, menudata, c = { }, { }, 0
metadata[#metadata+1] = 'outputformat := "svg" ;'
- for _, kind in pairs { "parameters", "nodes" } do
- local mdk = { }
+ for i=1,#what do
+ local kind, mdk = what[i], { }
menudata[kind] = mdk
- for n, name in pairs(goodies.progress[kind](filename)) do
- local first = goodies.progress.path(filename,name)
- local second = goodies.progress.path(filename,other)
+ for n, name in next, plugins.progress[kind](filename) do
+ local first = plugins.progress.path(filename,name)
+ local second = plugins.progress.path(filename,other)
c = c + 1
metadata[#metadata+1] = format(meta,c,first,second)
mdk[#mdk+1] = { name, c }
@@ -88,18 +90,19 @@ function goodies.progress.make_svg(filename,other)
end
end
-function goodies.progress.makehtml(filename,other,menudata,metadata)
+function plugins.progress.makehtml(filename,other,menudata,metadata)
local graphics = { }
local result = { graphics = graphics }
- for _, kind in pairs { "parameters", "nodes" } do
+ for i=1,#what do
+ local kind, menu = what[i], { }
local md = menudata[kind]
- local menu = { }
result[kind] = menu
- for k, v in ipairs(md) do
+ for k=1,#md do
+ local v = md[k]
local name, number = v[1], v[2]
- local min = goodies.progress.bot(filename,name)
- local max = goodies.progress.top(filename,name)
- local pages = goodies.progress.pages(filename)
+ local min = plugins.progress.bot(filename,name)
+ local max = plugins.progress.top(filename,name)
+ local pages = plugins.progress.pages(filename)
local average = math.round(max/pages)
if directrun then
local data = metadata[number]
@@ -119,55 +122,44 @@ function goodies.progress.makehtml(filename,other,menudata,metadata)
return result
end
-function goodies.progress.valid_file(name)
+function plugins.progress.valid_file(name)
return name and name ~= "" and lfs.isfile(name .. "-luatex-progress.lut")
end
-function goodies.progress.make_lmx_page(name,launch,remove)
+function plugins.progress.make_lmx_page(name,launch,remove)
+
local filename = name .. "-luatex-progress"
local other = "elapsed_time"
local template = 'context-timing.lmx'
- 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']
+ plugins.progress.convert(filename)
- lmx.variables['title-default'] = 'ConTeXt Timing Information'
- lmx.variables['title'] = lmx.variables['title-default']
+ local menudata, metadata = plugins.progress.make_svg(filename,other)
+ local htmldata = plugins.progress.makehtml(filename,other,menudata,metadata)
lmx.htmfile = function(name) return name .. "-timing.xhtml" end
lmx.lmxfile = function(name) return resolvers.find_file(name,'tex') end
- lmx.set('title', format('ConTeXt Timing Information: %s',file.basename(name)))
- lmx.set('color-background-one', lmx.get('color-background-green'))
- lmx.set('color-background-two', lmx.get('color-background-blue'))
-
- goodies.progress.convert(filename)
-
- local menudata, metadata = goodies.progress.make_svg(filename,other)
- local htmldata = goodies.progress.makehtml(filename,other,menudata,metadata)
-
- lmx.set('parametersmenu', concat(htmldata.parameters, "&nbsp;&nbsp;"))
- lmx.set('nodesmenu', concat(htmldata.nodes, "&nbsp;&nbsp;"))
- lmx.set('graphics', concat(htmldata.graphics, "\n\n"))
+ local variables = {
+ ['title-default'] = 'ConTeXt Timing Information',
+ ['title'] = format('ConTeXt Timing Information: %s',file.basename(name)),
+ ['parametersmenu'] = concat(htmldata.parameters, "&nbsp;&nbsp;"),
+ ['nodesmenu'] = concat(htmldata.nodes, "&nbsp;&nbsp;"),
+ ['graphics'] = concat(htmldata.graphics, "\n\n"),
+ ['color-background-one'] = lmx.get('color-background-green'),
+ ['color-background-two'] = lmx.get('color-background-blue'),
+ }
if launch then
- local htmfile = lmx.show(template)
+ local htmfile = lmx.show(template,variables)
if remove then
os.sleep(1) -- give time to launch
os.remove(htmfile)
end
else
- lmx.make(template)
+ lmx.make(template,variables)
end
- lmx.restore()
end
scripts = scripts or { }
@@ -176,17 +168,17 @@ scripts.timings = scripts.timings or { }
function scripts.timings.xhtml(filename)
if filename == "" then
logs.simple("provide filename")
- elseif not goodies.progress.valid_file(filename) then
+ elseif not plugins.progress.valid_file(filename) then
logs.simple("first run context again with the --timing option")
else
local basename = file.removesuffix(filename)
local launch = environment.argument("launch")
local remove = environment.argument("remove")
- goodies.progress.make_lmx_page(basename,launch,remove)
+ plugins.progress.make_lmx_page(basename,launch,remove)
end
end
-logs.extendbanner("ConTeXt Timing Tools 0.1",true)
+logs.extendbanner("ConTeXt Timing Tools 0.10",true)
messages.help = [[
--xhtml make xhtml file
diff --git a/Master/texmf-dist/scripts/context/lua/mtx-tools.lua b/Master/texmf-dist/scripts/context/lua/mtx-tools.lua
index 87fd51dc60d..bf4add16840 100644
--- a/Master/texmf-dist/scripts/context/lua/mtx-tools.lua
+++ b/Master/texmf-dist/scripts/context/lua/mtx-tools.lua
@@ -6,9 +6,7 @@ if not modules then modules = { } end modules ['mtx-tools'] = {
license = "see context related readme files"
}
--- data tables by Thomas A. Schmitz
-
-local find, gsub = string.find, string.gsub
+local find, format, sub, rep, gsub, lower = string.find, string.format, string.sub, string.rep, string.gsub, string.lower
scripts = scripts or { }
scripts.tools = scripts.tools or { }
@@ -17,7 +15,9 @@ local bomb_1, bomb_2 = "^\254\255", "^\239\187\191"
function scripts.tools.disarmutfbomb()
local force, done = environment.argument("force"), false
- for _, name in ipairs(environment.files) do
+ local files = environment.files
+ for i=1,#files do
+ local name = files[i]
if lfs.isfile(name) then
local data = io.loaddata(name)
if not data then
@@ -44,14 +44,133 @@ function scripts.tools.disarmutfbomb()
end
end
-logs.extendbanner("All Kind Of Tools 1.0",true)
+function scripts.tools.downcase()
+ local pattern = environment.argument('pattern') or "*"
+ local recurse = environment.argument('recurse')
+ local force = environment.argument('force')
+ local n = 0
+ if recurse and not find(pattern,"^%*%*%/") then
+ pattern = "**/*" .. pattern
+ end
+ dir.glob(pattern,function(name)
+ local basename = file.basename(name)
+ if lower(basename) ~= basename then
+ n = n + 1
+ if force then
+ os.rename(name,lower(name))
+ end
+ end
+ end)
+ if n > 0 then
+ if force then
+ logs.simple("%s files renamed",n)
+ else
+ logs.simple("use --force to do a real rename (%s files involved)",n)
+ end
+ else
+ logs.simple("nothing to do")
+ end
+end
+
+
+function scripts.tools.dirtoxml()
+
+ local join, removesuffix, extname, date = file.join, file.removesuffix, file.extname, os.date
+
+ local xmlns = "http://www.pragma-ade.com/rlg/xmldir.rng"
+ local timestamp = "%Y-%m-%d %H:%M"
+
+ local pattern = environment.argument('pattern') or ".*"
+ local url = environment.argument('url') or "no-url"
+ local root = environment.argument('root') or "."
+ local outputfile = environment.argument('output')
+
+ local recurse = environment.argument('recurse')
+ local stripname = environment.argument('stripname')
+ local longname = environment.argument('longname')
+
+ local function flush(list,result,n,path)
+ n, result = n or 1, result or { }
+ local d = rep(" ",n)
+ for name, attr in table.sortedhash(list) do
+ local mode = attr.mode
+ if mode == "file" then
+ result[#result+1] = format("%s<file name='%s'>",d,(longname and path and join(path,name)) or name)
+ result[#result+1] = format("%s <base>%s</base>",d,removesuffix(name))
+ result[#result+1] = format("%s <type>%s</type>",d,extname(name))
+ result[#result+1] = format("%s <size>%s</size>",d,attr.size)
+ result[#result+1] = format("%s <permissions>%s</permissions>",d,sub(attr.permissions,7,9))
+ result[#result+1] = format("%s <date>%s</date>",d,date(timestamp,attr.modification))
+ result[#result+1] = format("%s</file>",d)
+ elseif mode == "directory" then
+ result[#result+1] = format("%s<directory name='%s'>",d,name)
+ flush(attr.list,result,n+1,(path and join(path,name)) or name)
+ result[#result+1] = format("%s</directory>",d)
+ end
+ end
+ end
+
+ if not pattern or pattern == "" then
+ logs.report('provide --pattern=')
+ return
+ end
+
+ if stripname then
+ pattern = file.dirname(pattern)
+ end
+
+ local luapattern = string.topattern(pattern,true)
+
+ lfs.chdir(root)
+
+ local list = dir.collect_pattern(root,luapattern,recurse)
+
+ if list[outputfile] then
+ list[outputfile] = nil
+ end
+
+ local result = { "<?xml version='1.0'?>" }
+ result[#result+1] = format("<files url=%q root=%q pattern=%q luapattern=%q xmlns='%s' timestamp='%s'>",url,root,pattern,luapattern,xmlns,date(timestamp))
+ flush(list,result)
+ result[#result+1] = "</files>"
+
+ result = table.concat(result,"\n")
+
+ if not outputfile or outputfile == "" then
+ texio.write_nl(result)
+ else
+ io.savedata(outputfile,result)
+ end
+
+end
+
+logs.extendbanner("Some File Related Goodies 1.01",true)
messages.help = [[
--disarmutfbomb remove utf bomb if present
+ --force remove indeed
+
+--dirtoxml glob directory into xml
+ --pattern glob pattern (default: *)
+ --url url attribute (no processing)
+ --root the root of the globbed path (default: .)
+ --output output filename (console by default)
+ --recurse recurse into subdirecories
+ --stripname take pathpart of given pattern
+ --longname set name attributes to full path name
+
+--downcase
+ --pattern glob pattern (default: *)
+ --recurse recurse into subdirecories
+ --force downcase indeed
]]
if environment.argument("disarmutfbomb") then
scripts.tools.disarmutfbomb()
+elseif environment.argument("dirtoxml") then
+ scripts.tools.dirtoxml()
+elseif environment.argument("downcase") then
+ scripts.tools.downcase()
else
logs.help(messages.help)
end
diff --git a/Master/texmf-dist/scripts/context/lua/mtx-update.lua b/Master/texmf-dist/scripts/context/lua/mtx-update.lua
index bc6ca402639..b56083d3809 100644
--- a/Master/texmf-dist/scripts/context/lua/mtx-update.lua
+++ b/Master/texmf-dist/scripts/context/lua/mtx-update.lua
@@ -86,10 +86,12 @@ scripts.update.engines = {
["xetex"] = {
{ "base/xetex/", "texmf" },
{ "fonts/new/", "texmf" },
+ { "bin/luatex/<platform>/", "texmf-<platform>" }, -- tools
{ "bin/xetex/<platform>/", "texmf-<platform>" },
},
["pdftex"] = {
{ "fonts/old/", "texmf" },
+ { "bin/luatex/<platform>/", "texmf-<platform>" }, -- tools
{ "bin/pdftex/<platform>/", "texmf-<platform>" },
},
["all"] = {
@@ -112,30 +114,34 @@ scripts.update.goodies = {
}
scripts.update.platforms = {
- ["mswin"] = "mswin",
- ["windows"] = "mswin",
- ["win32"] = "mswin",
- ["win"] = "mswin",
- ["linux"] = "linux",
- ["freebsd"] = "freebsd",
- ["freebsd-amd64"] = "freebsd-amd64",
- ["linux-32"] = "linux",
- ["linux-64"] = "linux-64",
- ["linux32"] = "linux",
- ["linux64"] = "linux-64",
- ["linux-ppc"] = "linux-ppc",
- ["ppc"] = "linux-ppc",
- ["osx"] = "osx-intel",
- ["macosx"] = "osx-intel",
- ["osx-intel"] = "osx-intel",
- ["osx-ppc"] = "osx-ppc",
- ["osx-powerpc"] = "osx-ppc",
- ["osxintel"] = "osx-intel",
- ["osxppc"] = "osx-ppc",
- ["osxpowerpc"] = "osx-ppc",
- ["solaris-intel"] = "solaris-intel",
- ["solaris-sparc"] = "solaris-sparc",
- ["solaris"] = "solaris-sparc",
+ ["mswin"] = "mswin",
+ ["windows"] = "mswin",
+ ["win32"] = "mswin",
+ ["win"] = "mswin",
+ ["linux"] = "linux",
+ ["freebsd"] = "freebsd",
+ ["freebsd-amd64"] = "freebsd-amd64",
+ ["kfreebsd"] = "kfreebsd-i386",
+ ["kfreebsd-i386"] = "kfreebsd-i386",
+ ["kfreebsd-amd64"] = "kfreebsd-amd64",
+ ["linux-32"] = "linux",
+ ["linux-64"] = "linux-64",
+ ["linux32"] = "linux",
+ ["linux64"] = "linux-64",
+ ["linux-ppc"] = "linux-ppc",
+ ["ppc"] = "linux-ppc",
+ ["osx"] = "osx-intel",
+ ["macosx"] = "osx-intel",
+ ["osx-intel"] = "osx-intel",
+ ["osx-ppc"] = "osx-ppc",
+ ["osx-powerpc"] = "osx-ppc",
+ ["osx-64"] = "osx-64",
+ ["osxintel"] = "osx-intel",
+ ["osxppc"] = "osx-ppc",
+ ["osxpowerpc"] = "osx-ppc",
+ ["solaris-intel"] = "solaris-intel",
+ ["solaris-sparc"] = "solaris-sparc",
+ ["solaris"] = "solaris-sparc",
}
-- the list is filled up later (when we know what modules to download)
@@ -144,12 +150,14 @@ scripts.update.modules = {
}
function scripts.update.run(str)
- logs.report("run", str)
+ -- important, otherwise formats fly to a weird place
+ -- (texlua sets luatex as the engine, we need to reset that or to fix texexec :)
+ os.setenv("engine",nil)
if environment.argument("force") then
- -- important, otherwise formats fly to a weird place
- -- (texlua sets luatex as the engine, we need to reset that or to fix texexec :)
- os.setenv("engine",nil)
+ logs.report("run", str)
os.execute(str)
+ else
+ logs.report("dry run", str)
end
end
@@ -165,16 +173,16 @@ function scripts.update.synchronize()
logs.report("update","start")
- local texroot = scripts.update.fullpath(states.get("paths.root"))
- local engines = states.get('engines') or { }
- local platforms = states.get('platforms') or { }
- local repositories = states.get('repositories') -- minimals
- local bin = states.get("rsync.program") -- rsync
- local url = states.get("rsync.server") -- contextgarden.net
- local version = states.get("context.version") -- current (or beta)
- local extras = states.get("extras") -- extras (like modules)
- local goodies = states.get("goodies") -- goodies (like editors)
- local force = environment.argument("force")
+ local texroot = scripts.update.fullpath(states.get("paths.root"))
+ local engines = states.get('engines') or { }
+ local platforms = states.get('platforms') or { }
+ local repositories = states.get('repositories') -- minimals
+ local bin = states.get("rsync.program") -- rsync
+ local url = states.get("rsync.server") -- contextgarden.net
+ local version = states.get("context.version") -- current (or beta)
+ local extras = states.get("extras") -- extras (like modules)
+ local goodies = states.get("goodies") -- goodies (like editors)
+ local force = environment.argument("force")
bin = string.gsub(bin,"\\","/")
@@ -188,18 +196,19 @@ function scripts.update.synchronize()
if force then
dir.mkdirs(format("%s/%s", texroot, "texmf-cache"))
dir.mkdirs(format("%s/%s", texroot, "texmf-local"))
+ dir.mkdirs(format("%s/%s", texroot, "texmf-project"))
end
if ok or not force then
- local fetched, individual, osplatform = { }, { }, os.currentplatform()
+ local fetched, individual, osplatform = { }, { }, os.platform
-- takes a collection as argument and returns a list of folders
local function collection_to_list_of_folders(collection, platform)
local archives = {}
- for _, c in ipairs(collection) do
- local archive = c[1]
+ for i=1,#collection do
+ local archive = collection[i][1]
archive = archive:gsub("<platform>", platform)
archive = archive:gsub("<version>", version)
archives[#archives+1] = archive
@@ -220,7 +229,7 @@ function scripts.update.synchronize()
return prefix .. concat(list_of_folders, format(" %s", prefix))
end
- -- example of usage: print(list_of_folders_to_rsync_string(collection_to_list_of_folders(scripts.update.base, os.currentplatform)))
+ -- example of usage: print(list_of_folders_to_rsync_string(collection_to_list_of_folders(scripts.update.base, os.platform)))
-- rename function and add some more functionality:
-- * recursive/non-recursive (default: non-recursive)
@@ -255,7 +264,8 @@ function scripts.update.synchronize()
local available_modules = get_list_of_files_from_rsync({"modules/"})
-- hash of requested modules
-- local h = table.tohash(extras:split(","))
- for _, s in ipairs(available_modules) do
+ for i=1,#available_modules do
+ local s = available_modules[i]
-- if extras == "all" or h[s] then
if extras.all or extras[s] then
scripts.update.modules[#scripts.update.modules+1] = { format("modules/%s/",s), "texmf-context" }
@@ -269,7 +279,8 @@ function scripts.update.synchronize()
if collection and platform then
platform = scripts.update.platforms[platform]
if platform then
- for _, c in ipairs(collection) do
+ for i=1,#collection do
+ local c = collection[i]
local archive = c[1]:gsub("<platform>", platform)
local destination = format("%s/%s", texroot, c[2]:gsub("<platform>", platform))
destination = destination:gsub("\\","/")
@@ -283,30 +294,32 @@ function scripts.update.synchronize()
end
end
- for platform, _ in pairs(platforms) do
+ for platform, _ in next, platforms do
add_collection(scripts.update.base,platform)
end
- for platform, _ in pairs(platforms) do
+ for platform, _ in next, platforms do
add_collection(scripts.update.modules,platform)
end
- for engine, _ in pairs(engines) do
- for platform, _ in pairs(platforms) do
+ for engine, _ in next, engines do
+ for platform, _ in next, platforms do
add_collection(scripts.update.engines[engine],platform)
end
end
if goodies and type(goodies) == "table" then
- for goodie, _ in pairs(goodies) do
- for platform, _ in pairs(platforms) do
+ for goodie, _ in next, goodies do
+ for platform, _ in next, platforms do
add_collection(scripts.update.goodies[goodie],platform)
end
end
end
local combined = { }
- for _, repository in ipairs(scripts.update.repositories) do
+ local update_repositories = scripts.update.repositories
+ for i=1,#update_repositories do
+ local repository = update_repositories[i]
if repositories[repository] then
- for _, v in pairs(individual) do
+ for _, v in next, individual do
local archive, destination = v[1], v[2]
local cd = combined[destination]
if not cd then
@@ -318,14 +331,14 @@ function scripts.update.synchronize()
end
end
if logs.verbose then
- for k, v in pairs(combined) do
+ for k, v in next, combined do
logs.report("update", k)
- for k,v in ipairs(v) do
- logs.report("update", " <= " .. v)
+ for i=1,#v do
+ logs.report("update", " <= " .. v[i])
end
end
end
- for destination, archive in pairs(combined) do
+ for destination, archive in next, combined do
local archives, command = concat(archive," "), ""
-- local normalflags, deleteflags = states.get("rsync.flags.normal"), states.get("rsync.flags.delete")
-- if environment.argument("keep") or destination:find("%.$") then
@@ -334,13 +347,17 @@ function scripts.update.synchronize()
-- command = format("%s %s %s %s'%s' '%s'", bin, normalflags, deleteflags, url, archives, destination)
-- end
local normalflags, deleteflags = states.get("rsync.flags.normal"), ""
+ local dryrunflags = ""
+ if not environment.argument("force") then
+ dryrunflags = "--dry-run"
+ end
if (destination:find("texmf$") or destination:find("texmf%-context$")) and (not environment.argument("keep")) then
deleteflags = states.get("rsync.flags.delete")
end
- command = format("%s %s %s %s'%s' '%s'", bin, normalflags, deleteflags, url, archives, destination)
- logs.report("mtx update", format("running command: %s",command))
+ command = format("%s %s %s %s %s'%s' '%s'", bin, normalflags, deleteflags, dryrunflags, url, archives, destination)
+ --logs.report("mtx update", format("running command: %s",command))
if not fetched[command] then
- scripts.update.run(command)
+ scripts.update.run(command,true)
fetched[command] = command
end
end
@@ -363,7 +380,7 @@ function scripts.update.synchronize()
end
end
- for platform, _ in pairs(platforms) do
+ for platform, _ in next, platforms do
update_script('luatools',platform)
update_script('mtxrun',platform)
end
@@ -374,12 +391,20 @@ function scripts.update.synchronize()
if not force then
logs.report("update", "use --force to really update files")
end
+
+ resolvers.load_tree(texroot) -- else we operate in the wrong tree
+
+ -- update filename database for pdftex/xetex
+ scripts.update.run("mktexlsr")
+ -- update filename database for luatex
+ scripts.update.run("luatools --generate")
+
logs.report("update","done")
end
function table.fromhash(t)
local h = { }
- for k, v in pairs(t) do -- no ipairs here
+ for k, v in next, t do -- not indexed
if v then h[#h+1] = k end
end
return h
@@ -390,34 +415,34 @@ function scripts.update.make()
logs.report("make","start")
- local force = environment.argument("force")
- local texroot = scripts.update.fullpath(states.get("paths.root"))
- local engines = states.get('engines')
- local goodies = states.get('goodies')
+ local force = environment.argument("force")
+ local texroot = scripts.update.fullpath(states.get("paths.root"))
+ local engines = states.get('engines')
+ local goodies = states.get('goodies')
local platforms = states.get('platforms')
- local formats = states.get('formats')
+ local formats = states.get('formats')
resolvers.load_tree(texroot)
- -- update filename database for pdftex/xetex
+
scripts.update.run("mktexlsr")
- -- update filename database for luatex
scripts.update.run("luatools --generate")
+
local askedformats = formats
local texformats = table.tohash(scripts.update.texformats)
local mpformats = table.tohash(scripts.update.mpformats)
- for k,v in pairs(texformats) do
+ for k,v in next, texformats do
if not askedformats[k] then
texformats[k] = nil
end
end
- for k,v in pairs(mpformats) do
+ for k,v in next, mpformats do
if not askedformats[k] then
mpformats[k] = nil
end
end
local formatlist = concat(table.fromhash(texformats), " ")
if formatlist ~= "" then
- for engine in pairs(engines) do
+ for engine in next, engines do
if engine == "luatex" then
scripts.update.run(format("context --make")) -- maybe also formatlist
else
@@ -438,7 +463,7 @@ function scripts.update.make()
logs.report("make","done")
end
-logs.extendbanner("Download Tools 0.20",true)
+logs.extendbanner("ConTeXt Minimals Updater 0.21",true)
messages.help = [[
--platform=string platform (windows, linux, linux-64, osx-intel, osx-ppc, linux-ppc)
@@ -476,7 +501,7 @@ if scripts.savestate then
states.set("rsync.program", environment.argument("rsync"), "rsync", true) -- ok
states.set("rsync.server", environment.argument("server"), "contextgarden.net::", true) -- ok
states.set("rsync.module", environment.argument("module"), "minimals", true) -- ok
- states.set("rsync.flags.normal", environment.argument("flags"), "-rpztlv --stats", true) -- ok
+ states.set("rsync.flags.normal", environment.argument("flags"), "-rpztlv", true) -- ok
states.set("rsync.flags.delete", nil, "--delete", true) -- ok
states.set("paths.root", environment.argument("texroot"), "tex", true) -- ok
@@ -490,7 +515,7 @@ if scripts.savestate then
local valid = scripts.update.engines
for r in gmatch(environment.argument("engine") or "all","([^, ]+)") do
if r == "all" then
- for k, v in pairs(valid) do
+ for k, v in next, valid do
if k ~= "all" then
states.set("engines." .. k, true)
end
@@ -500,7 +525,7 @@ if scripts.savestate then
end
end
local valid = scripts.update.platforms
- for r in gmatch(environment.argument("platform") or os.currentplatform(),"([^, ]+)") do
+ for r in gmatch(environment.argument("platform") or os.platform,"([^, ]+)") do
if valid[r] then states.set("platforms." .. r, true) end
end
diff --git a/Master/texmf-dist/scripts/context/lua/mtx-watch.lua b/Master/texmf-dist/scripts/context/lua/mtx-watch.lua
index 2e4dcf6efec..10f01cf8698 100644
--- a/Master/texmf-dist/scripts/context/lua/mtx-watch.lua
+++ b/Master/texmf-dist/scripts/context/lua/mtx-watch.lua
@@ -9,160 +9,247 @@ if not modules then modules = { } end modules ['mtx-watch'] = {
scripts = scripts or { }
scripts.watch = scripts.watch or { }
-do
+local format, concat, difftime, time = string.format, table.concat, os.difftime, os.time
+local next, type = next, type
- function scripts.watch.save_exa_modes(joblog,ctmname)
+-- the machine/instance matches the server app we use
+
+local machine = socket.dns.gethostname() or "unknown-machine"
+local instance = string.match(machine,"(%d+)$") or "0"
+
+function scripts.watch.save_exa_modes(joblog,ctmname)
+ local values = joblog and joblog.values
+ if values then
local t= { }
- if joblog then
- t[#t+1] = "<?xml version='1.0' standalone='yes'?>\n"
- t[#t+1] = "<exa:variables xmlns:exa='htpp://www.pragma-ade.com/schemas/exa-variables.rng'>"
- if joblog.values then
- for k, v in pairs(joblog.values) do
- t[#t+1] = string.format("\t<exa:variable label='%s'>%s</exa:variable>", k, tostring(v))
+ t[#t+1] = "<?xml version='1.0' standalone='yes'?>\n"
+ t[#t+1] = "<exa:variables xmlns:exa='htpp://www.pragma-ade.com/schemas/exa-variables.rng'>"
+ for k, v in next, joblog.values do
+ t[#t+1] = format("\t<exa:variable label='%s'>%s</exa:variable>", k, tostring(v))
+ end
+ t[#t+1] = "</exa:variables>"
+ io.savedata(ctmname,concat(t,"\n"))
+ else
+ os.remove(ctmname)
+ end
+end
+
+local function toset(t)
+ if type(t) == "table" then
+ return concat(t,",")
+ else
+ return t
+ end
+end
+
+local function noset(t)
+ if type(t) == "table" then
+ return t[1]
+ else
+ return t
+ end
+end
+
+local lfsdir, lfsattributes = lfs.dir, lfs.attributes
+
+local function glob(files,path)
+ for name in lfsdir(path) do
+ if name:find("^%.") then
+ -- skip . and ..
+ else
+ name = path .. "/" .. name
+ local a = lfsattributes(name)
+ if not a then
+ -- weird
+ elseif a.mode == "directory" then
+ if name:find("graphics$") or name:find("figures$") or name:find("resources$") then
+ -- skip these too
+ else
+ glob(files,name)
end
- else
- t[#t+1] = "<!-- no modes -->"
+ elseif name:find(".%luj$") then
+ files[name] = a.change or a.ctime or a.modification or a.mtime
end
- t[#t+1] = "</exa:variables>"
end
- os.remove(ctmname)
- io.savedata(ctmname,table.concat(t,"\n"))
end
+end
- function scripts.watch.watch()
- local delay = environment.argument("delay") or 5
- local logpath = environment.argument("logpath") or ""
- local pipe = environment.argument("pipe") or false
- if #environment.files > 0 then
- for _, path in ipairs(environment.files) do
- logs.report("watch", "watching path ".. path)
+local clock = os.gettimeofday or os.time -- we cannot trust os.clock on linux
+
+function scripts.watch.watch()
+ local delay = tonumber(environment.argument("delay") or 5) or 5
+ if delay == 0 then
+ delay = .25
+ end
+ local logpath = environment.argument("logpath") or ""
+ local pipe = environment.argument("pipe") or false
+ local watcher = "mtxwatch.run"
+ local paths = environment.files
+ if #paths > 0 then
+ if environment.argument("automachine") then
+ logpath = string.gsub(logpath,"/machine/","/"..machine.."/")
+ for i=1,#paths do
+ paths[i] = string.gsub(paths[i],"/machine/","/"..machine.."/")
end
- local function glob(files,path)
- for name in lfs.dir(path) do
- if name:find("^%.") then
- -- skip . and ..
- else
- name = path .. "/" .. name
- local a = lfs.attributes(name)
- if not a then
- -- weird
- elseif a.mode == "directory" then
- if name:find("graphics$") or name:find("figures$") or name:find("resources$") then
- -- skip these too
+ end
+ for i=1,#paths do
+ logs.report("watch", "watching path ".. paths[i])
+ end
+ local function process()
+ local done = false
+ for i=1,#paths do
+ local path = paths[i]
+ lfs.chdir(path)
+ local files = { }
+ glob(files,path)
+ table.sort(files) -- what gets sorted here, todo: by time
+ for name, time in next, files do
+ --~ local ok, joblog = xpcall(function() return dofile(name) end, function() end )
+ local ok, joblog = pcall(dofile,name)
+ if ok and joblog then
+ if joblog.status == "processing" then
+ logs.report("watch",format("aborted job, %s added to queue",name))
+ joblog.status = "queued"
+ io.savedata(name, table.serialize(joblog,true))
+ elseif joblog.status == "queued" then
+ local command = joblog.command
+ if command then
+ local replacements = {
+ inputpath = toset((joblog.paths and joblog.paths.input ) or "."),
+ outputpath = noset((joblog.paths and joblog.paths.output) or "."),
+ filename = joblog.filename or "",
+ }
+ -- todo: revision path etc
+ command = command:gsub("%%(.-)%%", replacements)
+ if command ~= "" then
+ joblog.status = "processing"
+ joblog.runtime = clock()
+ io.savedata(name, table.serialize(joblog,true))
+ logs.report("watch",format("running: %s", command))
+ local newpath = file.dirname(name)
+ io.flush()
+ local result = ""
+ local ctmname = file.basename(replacements.filename)
+ if ctmname == "" then ctmname = name end -- use self as fallback
+ ctmname = file.replacesuffix(ctmname,"ctm")
+ if newpath ~= "" and newpath ~= "." then
+ local oldpath = lfs.currentdir()
+ lfs.chdir(newpath)
+ scripts.watch.save_exa_modes(joblog,ctmname)
+ if pipe then result = os.resultof(command) else result = os.spawn(command) end
+ lfs.chdir(oldpath)
+ else
+ scripts.watch.save_exa_modes(joblog,ctmname)
+ if pipe then result = os.resultof(command) else result = os.spawn(command) end
+ end
+ logs.report("watch",format("return value: %s", result))
+ done = true
+ local path, base = replacements.outputpath, file.basename(replacements.filename)
+ joblog.runtime = clock() - joblog.runtime
+ if base ~= "" then
+ joblog.result = file.replacesuffix(file.join(path,base),"pdf")
+ joblog.size = lfs.attributes(joblog.result,"size")
+ end
+ joblog.status = "finished"
+ else
+ joblog.status = "invalid command"
+ end
else
- glob(files,name)
+ joblog.status = "no command"
+ end
+ -- pcall, when error sleep + again
+ -- todo: just one log file and append
+ io.savedata(name, table.serialize(joblog,true))
+ if logpath and logpath ~= "" then
+ local name = file.join(logpath,os.uuid() .. ".lua")
+ io.savedata(name, table.serialize(joblog,true))
+ logs.report("watch", "saving joblog in " .. name)
end
- elseif name:find(".%luj$") then
- files[name] = a.change or a.ctime or a.modification or a.mtime
end
end
end
end
- local function toset(t)
- if type(t) == "table" then
- return table.concat(t,",")
- else
- return t
+ end
+ local n, start = 0, time()
+--~ local function wait()
+--~ io.flush()
+--~ if not done then
+--~ n = n + 1
+--~ if n >= 10 then
+--~ logs.report("watch", format("run time: %i seconds, memory usage: %0.3g MB", difftime(time(),start), (status.luastate_bytes/1024)/1000))
+--~ n = 0
+--~ end
+--~ os.sleep(delay)
+--~ end
+--~ end
+ local wtime = 0
+ local function wait()
+ io.flush()
+ if not done then
+ n = n + 1
+ if n >= 10 then
+ logs.report("watch", format("run time: %i seconds, memory usage: %0.3g MB", difftime(time(),start), (status.luastate_bytes/1024)/1000))
+ n = 0
end
- end
- local function noset(t)
- if type(t) == "table" then
- return t[1]
- else
- return t
+ local ttime = 0
+ while ttime <= delay do
+ local wt = lfs.attributes(watcher,"mtime")
+ if wt and wt ~= wtime then
+ -- fast signal that there is a request
+ wtime = wt
+ break
+ end
+ ttime = ttime + 0.2
+ os.sleep(0.2)
end
end
- local function process()
- local done = false
- for _, path in ipairs(environment.files) do
- lfs.chdir(path)
- local files = { }
- glob(files,path)
- table.sort(files) -- what gets sorted here
- for name, time in pairs(files) do
- --~ local ok, joblog = xpcall(function() return dofile(name) end, function() end )
- local ok, joblog = pcall(dofile,name)
- if ok and joblog then
- if joblog.status == "processing" then
- logs.report("watch",string.format("aborted job, %s added to queue",name))
- joblog.status = "queued"
- io.savedata(name, table.serialize(joblog,true))
- elseif joblog.status == "queued" then
- local command = joblog.command
- if command then
- local replacements = {
- inputpath = toset((joblog.paths and joblog.paths.input ) or "."),
- outputpath = noset((joblog.paths and joblog.paths.output) or "."),
- filename = joblog.filename or "",
- }
- command = command:gsub("%%(.-)%%", replacements)
- if command ~= "" then
- joblog.status = "processing"
- joblog.runtime = os.time() -- os.clock()
- io.savedata(name, table.serialize(joblog,true))
- logs.report("watch",string.format("running: %s", command))
- local newpath = file.dirname(name)
- io.flush()
- local result = ""
- local ctmname = file.basename(replacements.filename)
- if ctmname == "" then ctmname = name end -- use self as fallback
- ctmname = file.replacesuffix(ctmname,"ctm")
- if newpath ~= "" and newpath ~= "." then
- local oldpath = lfs.currentdir()
- lfs.chdir(newpath)
- scripts.watch.save_exa_modes(joblog,ctmname)
- if pipe then result = os.resultof(command) else result = os.spawn(command) end
- lfs.chdir(oldpath)
- else
- scripts.watch.save_exa_modes(joblog,ctmname)
- if pipe then result = os.resultof(command) else result = os.spawn(command) end
- end
- logs.report("watch",string.format("return value: %s", result))
- done = true
- local path, base = replacements.outputpath, file.basename(replacements.filename)
- joblog.runtime = os.time() - joblog.runtime -- os.clock() - joblog.runtime
- joblog.result = file.replacesuffix(file.join(path,base),"pdf")
- joblog.size = lfs.attributes(joblog.result,"size")
- joblog.status = "finished"
- else
- joblog.status = "invalid command"
- end
- else
- joblog.status = "no command"
- end
- -- pcall, when error sleep + again
- io.savedata(name, table.serialize(joblog,true))
- if logpath ~= "" then
- local name = string.format("%s/%s%04i%09i.lua", logpath, os.time(), math.floor((os.clock()*100)%1000), math.random(99999999))
- io.savedata(name, table.serialize(joblog,true))
- logs.report("watch", "saving joblog ".. name)
+ end
+ local cleanupdelay, cleanup = environment.argument("cleanup"), false
+ if cleanupdelay then
+ local lasttime = time()
+ cleanup = function()
+ local currenttime = time()
+ local delta = difftime(currenttime,lasttime)
+ if delta > cleanupdelay then
+ lasttime = currenttime
+ for i=1,#paths do
+ local path = paths[i]
+ if string.find(path,"%.") then
+ -- safeguard, we want a fully qualified path
+ else
+ local files = dir.glob(file.join(path,"*"))
+ for i=1,#files do
+ local name = files[i]
+ local filetime = lfs.attributes(name,"modification")
+ local delta = difftime(currenttime,filetime)
+ if delta > cleanupdelay then
+ -- logs.report("watch",format("cleaning up '%s'",name))
+ os.remove(name)
end
end
end
end
end
end
- local n, start = 0, os.clock()
- local function wait()
- io.flush()
- if not done then
- n = n + 1
- if n >= 10 then
- logs.report("watch", string.format("run time: %i seconds, memory usage: %0.3g MB", os.clock() - start, (status.luastate_bytes/1024)/1000))
- n = 0
- end
- os.sleep(delay)
- end
+ else
+ cleanup = function()
+ -- nothing
end
- while true do
+ end
+ while true do
+ if false then
+--~ if true then
+ process()
+ cleanup()
+ wait()
+ else
pcall(process)
+ pcall(cleanup)
pcall(wait)
end
- else
- logs.report("watch", "no paths to watch")
end
+ else
+ logs.report("watch", "no paths to watch")
end
-
end
function scripts.watch.collect_logs(path) -- clean 'm up too
@@ -171,10 +258,11 @@ function scripts.watch.collect_logs(path) -- clean 'm up too
local files = dir.globfiles(path,false,"^%d+%.lua$")
local collection = { }
local valid = table.tohash({"filename","result","runtime","size","status"})
- for _, name in ipairs(files) do
+ for i=1,#files do
+ local name = files[i]
local t = dofile(name)
if t and type(t) == "table" and t.status then
- for k, v in pairs(t) do
+ for k, v in next, t do
if not valid[k] then
t[k] = nil
end
@@ -186,21 +274,21 @@ function scripts.watch.collect_logs(path) -- clean 'm up too
end
function scripts.watch.save_logs(collection,path) -- play safe
- if collection and not table.is_empty(collection) then
+ if collection and next(collection) then
path = path or environment.argument("logpath") or ""
path = (path == "" and ".") or path
- local filename = string.format("%s/collected-%s.lua",path,tostring(os.time()))
+ local filename = format("%s/collected-%s.lua",path,tostring(time()))
io.savedata(filename,table.serialize(collection,true))
local check = dofile(filename)
- for k,v in pairs(check) do
+ for k,v in next, check do
if not collection[k] then
logs.error("watch", "error in saving file")
os.remove(filename)
return false
end
end
- for k,v in pairs(check) do
- os.remove(string.format("%s.lua",k))
+ for k,v in next, check do
+ os.remove(format("%s.lua",k))
end
return true
else
@@ -213,10 +301,11 @@ function scripts.watch.collect_collections(path) -- removes duplicates
path = (path == "" and ".") or path
local files = dir.globfiles(path,false,"^collected%-%d+%.lua$")
local collection = { }
- for _, name in ipairs(files) do
+ for i=1,#files do
+ local name = files[i]
local t = dofile(name)
if t and type(t) == "table" then
- for k, v in pairs(t) do
+ for k, v in next, t do
collection[k] = v
end
end
@@ -227,26 +316,56 @@ end
function scripts.watch.show_logs(path) -- removes duplicates
local collection = scripts.watch.collect_collections(path) or { }
local max = 0
- for k,v in pairs(collection) do
+ for k,v in next, collection do
v = v.filename or "?"
if #v > max then max = #v end
end
- print(max)
- for k,v in ipairs(table.sortedkeys(collection)) do
+ -- print(max)
+ local sorted = table.sortedkeys(collection)
+ for k=1,#sorted do
+ local v = sorted[k]
local c = collection[v]
local f, s, r, n = c.filename or "?", c.status or "?", c.runtime or 0, c.size or 0
- logs.report("watch", string.format("%s %s %3i %8i %s",string.padd(f,max," "),string.padd(s,10," "),r,n,v))
+ logs.report("watch", format("%s %s %3i %8i %s",string.padd(f,max," "),string.padd(s,10," "),r,n,v))
+ end
+end
+
+function scripts.watch.cleanup_stale_files() -- removes duplicates
+ local path = environment.files[1]
+ local delay = tonumber(environment.argument("cleanup"))
+ local force = environment.argument("force")
+ if not path or path == "." then
+ logs.report("watch","provide qualified path")
+ elseif not delay then
+ logs.report("watch","missing --cleanup=delay")
+ else
+ logs.report("watch","dryrun, use --force for real cleanup")
+ local files = dir.glob(file.join(path,"*"))
+ local rtime = time()
+ for i=1,#files do
+ local name = files[i]
+ local mtime = lfs.attributes(name,"modification")
+ local delta = difftime(rtime,mtime)
+ if delta > delay then
+ logs.report("watch",format("cleaning up '%s'",name))
+ if force then
+ os.remove(name)
+ end
+ end
+ end
end
end
-logs.extendbanner("Watchdog 1.00",true)
+logs.extendbanner("ConTeXt Request Watchdog 1.00",true)
messages.help = [[
--logpath optional path for log files
---watch watch given path
+--watch watch given path [--delay]
--pipe use pipe instead of execute
--delay delay between sweeps
+--automachine replace /machine/ in path /<servername>/
--collect condense log files
+--cleanup=delay remove files in given path [--force]
--showlog show log data
]]
@@ -254,6 +373,8 @@ if environment.argument("watch") then
scripts.watch.watch()
elseif environment.argument("collect") then
scripts.watch.save_logs(scripts.watch.collect_logs())
+elseif environment.argument("cleanup") then
+ scripts.watch.save_logs(scripts.watch.cleanup_stale_files())
elseif environment.argument("showlog") then
scripts.watch.show_logs()
else
diff --git a/Master/texmf-dist/scripts/context/lua/mtxrun.lua b/Master/texmf-dist/scripts/context/lua/mtxrun.lua
index 82d1edecbc5..b99327692d7 100755
--- a/Master/texmf-dist/scripts/context/lua/mtxrun.lua
+++ b/Master/texmf-dist/scripts/context/lua/mtxrun.lua
@@ -48,13 +48,16 @@ do -- create closure to overcome 200 locals limit
if not modules then modules = { } end modules ['l-string'] = {
version = 1.001,
- comment = "companion to luat-lib.tex",
+ comment = "companion to luat-lib.mkiv",
author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
copyright = "PRAGMA ADE / ConTeXt Development Team",
license = "see context related readme files"
}
-local sub, gsub, find, match, gmatch, format, char, byte, rep = string.sub, string.gsub, string.find, string.match, string.gmatch, string.format, string.char, string.byte, string.rep
+local sub, gsub, find, match, gmatch, format, char, byte, rep, lower = string.sub, string.gsub, string.find, string.match, string.gmatch, string.format, string.char, string.byte, string.rep, string.lower
+local lpegmatch = lpeg.match
+
+-- some functions may disappear as they are not used anywhere
if not string.split then
@@ -94,8 +97,16 @@ function string:unquote()
return (gsub(self,"^([\"\'])(.*)%1$","%2"))
end
+--~ function string:unquote()
+--~ if find(self,"^[\'\"]") then
+--~ return sub(self,2,-2)
+--~ else
+--~ return self
+--~ end
+--~ end
+
function string:quote() -- we could use format("%q")
- return '"' .. self:unquote() .. '"'
+ return format("%q",self)
end
function string:count(pattern) -- variant 3
@@ -115,12 +126,23 @@ function string:limit(n,sentinel)
end
end
-function string:strip()
- return (gsub(self,"^%s*(.-)%s*$", "%1"))
+--~ function string:strip() -- the .- is quite efficient
+--~ -- return match(self,"^%s*(.-)%s*$") or ""
+--~ -- return match(self,'^%s*(.*%S)') or '' -- posted on lua list
+--~ return find(s,'^%s*$') and '' or match(s,'^%s*(.*%S)')
+--~ end
+
+do -- roberto's variant:
+ local space = lpeg.S(" \t\v\n")
+ local nospace = 1 - space
+ local stripper = space^0 * lpeg.C((space^0 * nospace^1)^0)
+ function string.strip(str)
+ return lpegmatch(stripper,str) or ""
+ end
end
function string:is_empty()
- return not find(find,"%S")
+ return not find(self,"%S")
end
function string:enhance(pattern,action)
@@ -154,14 +176,14 @@ if not string.characters then
local function nextchar(str, index)
index = index + 1
- return (index <= #str) and index or nil, str:sub(index,index)
+ return (index <= #str) and index or nil, sub(str,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, byte(str:sub(index,index))
+ return (index <= #str) and index or nil, byte(sub(str,index,index))
end
function string:bytes()
return nextbyte, self, 0
@@ -174,7 +196,7 @@ end
function string:rpadd(n,chr)
local m = n-#self
if m > 0 then
- return self .. self.rep(chr or " ",m)
+ return self .. rep(chr or " ",m)
else
return self
end
@@ -183,7 +205,7 @@ end
function string:lpadd(n,chr)
local m = n-#self
if m > 0 then
- return self.rep(chr or " ",m) .. self
+ return rep(chr or " ",m) .. self
else
return self
end
@@ -231,6 +253,17 @@ function string:pattesc()
return (gsub(self,".",patterns_escapes))
end
+local simple_escapes = {
+ ["-"] = "%-",
+ ["."] = "%.",
+ ["?"] = ".",
+ ["*"] = ".*",
+}
+
+function string:simpleesc()
+ return (gsub(self,".",simple_escapes))
+end
+
function string:tohash()
local t = { }
for s in gmatch(self,"([^, ]+)") do -- lpeg
@@ -242,10 +275,10 @@ end
local pattern = lpeg.Ct(lpeg.C(1)^0)
function string:totable()
- return pattern:match(self)
+ return lpegmatch(pattern,self)
end
---~ for _, str in ipairs {
+--~ local t = {
--~ "1234567123456712345671234567",
--~ "a\tb\tc",
--~ "aa\tbb\tcc",
@@ -253,7 +286,10 @@ end
--~ "aaaa\tbbbb\tcccc",
--~ "aaaaa\tbbbbb\tccccc",
--~ "aaaaaa\tbbbbbb\tcccccc",
---~ } do print(string.tabtospace(str)) end
+--~ }
+--~ for k,v do
+--~ print(string.tabtospace(t[k]))
+--~ end
function string.tabtospace(str,tab)
-- we don't handle embedded newlines
@@ -261,7 +297,7 @@ function string.tabtospace(str,tab)
local s = find(str,"\t")
if s then
if not tab then tab = 7 end -- only when found
- local d = tab-(s-1)%tab
+ local d = tab-(s-1) % tab
if d > 0 then
str = gsub(str,"\t",rep(" ",d),1)
else
@@ -280,6 +316,25 @@ function string:compactlong() -- strips newlines and leading spaces
return self
end
+function string:striplong() -- strips newlines and leading spaces
+ self = gsub(self,"^%s*","")
+ self = gsub(self,"[\n\r]+ *","\n")
+ return self
+end
+
+function string:topattern(lowercase,strict)
+ if lowercase then
+ self = lower(self)
+ end
+ self = gsub(self,".",simple_escapes)
+ if self == "" then
+ self = ".*"
+ elseif strict then
+ self = "^" .. self .. "$"
+ end
+ return self
+end
+
end -- of closure
@@ -287,58 +342,64 @@ do -- create closure to overcome 200 locals limit
if not modules then modules = { } end modules ['l-lpeg'] = {
version = 1.001,
- comment = "companion to luat-lib.tex",
+ comment = "companion to luat-lib.mkiv",
author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
copyright = "PRAGMA ADE / ConTeXt Development Team",
license = "see context related readme files"
}
-local P, S, Ct, C, Cs, Cc = lpeg.P, lpeg.S, lpeg.Ct, lpeg.C, lpeg.Cs, lpeg.Cc
-
---~ 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 = { }
+local lpeg = require("lpeg")
+
+lpeg.patterns = lpeg.patterns or { } -- so that we can share
+local patterns = lpeg.patterns
+
+local P, R, S, Ct, C, Cs, Cc, V = lpeg.P, lpeg.R, lpeg.S, lpeg.Ct, lpeg.C, lpeg.Cs, lpeg.Cc, lpeg.V
+local match = lpeg.match
+
+local digit, sign = R('09'), S('+-')
+local cr, lf, crlf = P("\r"), P("\n"), P("\r\n")
+local utf8byte = R("\128\191")
+
+patterns.utf8byte = utf8byte
+patterns.utf8one = R("\000\127")
+patterns.utf8two = R("\194\223") * utf8byte
+patterns.utf8three = R("\224\239") * utf8byte * utf8byte
+patterns.utf8four = R("\240\244") * utf8byte * utf8byte * utf8byte
+
+patterns.digit = digit
+patterns.sign = sign
+patterns.cardinal = sign^0 * digit^1
+patterns.integer = sign^0 * digit^1
+patterns.float = sign^0 * digit^0 * P('.') * digit^1
+patterns.number = patterns.float + patterns.integer
+patterns.oct = P("0") * R("07")^1
+patterns.octal = patterns.oct
+patterns.HEX = P("0x") * R("09","AF")^1
+patterns.hex = P("0x") * R("09","af")^1
+patterns.hexadecimal = P("0x") * R("09","AF","af")^1
+patterns.lowercase = R("az")
+patterns.uppercase = R("AZ")
+patterns.letter = patterns.lowercase + patterns.uppercase
+patterns.space = S(" ")
+patterns.eol = S("\n\r")
+patterns.spacer = S(" \t\f\v") -- + string.char(0xc2, 0xa0) if we want utf (cf mail roberto)
+patterns.newline = crlf + cr + lf
+patterns.nonspace = 1 - patterns.space
+patterns.nonspacer = 1 - patterns.spacer
+patterns.whitespace = patterns.eol + patterns.spacer
+patterns.nonwhitespace = 1 - patterns.whitespace
+patterns.utf8 = patterns.utf8one + patterns.utf8two + patterns.utf8three + patterns.utf8four
+patterns.utfbom = P('\000\000\254\255') + P('\255\254\000\000') + P('\255\254') + P('\254\255') + P('\239\187\191')
function lpeg.anywhere(pattern) --slightly adapted from website
- return P { P(pattern) + 1 * lpeg.V(1) }
-end
-
-function lpeg.startswith(pattern) --slightly adapted
- return P(pattern)
+ return P { P(pattern) + 1 * V(1) } -- why so complex?
end
function lpeg.splitter(pattern, action)
return (((1-P(pattern))^1)/action+1)^0
end
--- variant:
-
---~ local parser = lpeg.Ct(lpeg.splitat(newline))
-
-local crlf = P("\r\n")
-local cr = P("\r")
-local lf = P("\n")
-local space = S(" \t\f\v") -- + string.char(0xc2, 0xa0) if we want utf (cf mail roberto)
-local newline = crlf + cr + lf
-local spacing = space^0 * newline
-
+local spacing = patterns.spacer^0 * patterns.newline -- sort of strip
local empty = spacing * Cc("")
local nonempty = Cs((1-spacing)^1) * spacing^-1
local content = (empty + nonempty)^1
@@ -346,15 +407,15 @@ local content = (empty + nonempty)^1
local capture = Ct(content^0)
function string:splitlines()
- return capture:match(self)
+ return match(capture,self)
end
-lpeg.linebyline = content -- better make a sublibrary
+patterns.textline = content
---~ local p = lpeg.splitat("->",false) print(p:match("oeps->what->more")) -- oeps what more
---~ local p = lpeg.splitat("->",true) print(p:match("oeps->what->more")) -- oeps what->more
---~ local p = lpeg.splitat("->",false) print(p:match("oeps")) -- oeps
---~ local p = lpeg.splitat("->",true) print(p:match("oeps")) -- oeps
+--~ local p = lpeg.splitat("->",false) print(match(p,"oeps->what->more")) -- oeps what more
+--~ local p = lpeg.splitat("->",true) print(match(p,"oeps->what->more")) -- oeps what->more
+--~ local p = lpeg.splitat("->",false) print(match(p,"oeps")) -- oeps
+--~ local p = lpeg.splitat("->",true) print(match(p,"oeps")) -- oeps
local splitters_s, splitters_m = { }, { }
@@ -364,7 +425,7 @@ local function splitat(separator,single)
separator = P(separator)
if single then
local other, any = C((1 - separator)^0), P(1)
- splitter = other * (separator * C(any^0) + "")
+ splitter = other * (separator * C(any^0) + "") -- ?
splitters_s[separator] = splitter
else
local other = C((1 - separator)^0)
@@ -379,15 +440,72 @@ lpeg.splitat = splitat
local cache = { }
+function lpeg.split(separator,str)
+ local c = cache[separator]
+ if not c then
+ c = Ct(splitat(separator))
+ cache[separator] = c
+ end
+ return match(c,str)
+end
+
function string:split(separator)
local c = cache[separator]
if not c then
c = Ct(splitat(separator))
cache[separator] = c
end
- return c:match(self)
+ return match(c,self)
+end
+
+lpeg.splitters = cache
+
+local cache = { }
+
+function lpeg.checkedsplit(separator,str)
+ local c = cache[separator]
+ if not c then
+ separator = P(separator)
+ local other = C((1 - separator)^0)
+ c = Ct(separator^0 * other * (separator^1 * other)^0)
+ cache[separator] = c
+ end
+ return match(c,str)
+end
+
+function string:checkedsplit(separator)
+ local c = cache[separator]
+ if not c then
+ separator = P(separator)
+ local other = C((1 - separator)^0)
+ c = Ct(separator^0 * other * (separator^1 * other)^0)
+ cache[separator] = c
+ end
+ return match(c,self)
end
+--~ function lpeg.append(list,pp)
+--~ local p = pp
+--~ for l=1,#list do
+--~ if p then
+--~ p = p + P(list[l])
+--~ else
+--~ p = P(list[l])
+--~ end
+--~ end
+--~ return p
+--~ end
+
+--~ from roberto's site:
+
+local f1 = string.byte
+
+local function f2(s) local c1, c2 = f1(s,1,2) return c1 * 64 + c2 - 12416 end
+local function f3(s) local c1, c2, c3 = f1(s,1,3) return (c1 * 64 + c2) * 64 + c3 - 925824 end
+local function f4(s) local c1, c2, c3, c4 = f1(s,1,4) return ((c1 * 64 + c2) * 64 + c3) * 64 + c4 - 63447168 end
+
+patterns.utf8byte = patterns.utf8one/f1 + patterns.utf8two/f2 + patterns.utf8three/f3 + patterns.utf8four/f4
+
end -- of closure
@@ -395,7 +513,7 @@ do -- create closure to overcome 200 locals limit
if not modules then modules = { } end modules ['l-table'] = {
version = 1.001,
- comment = "companion to luat-lib.tex",
+ comment = "companion to luat-lib.mkiv",
author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
copyright = "PRAGMA ADE / ConTeXt Development Team",
license = "see context related readme files"
@@ -404,9 +522,58 @@ if not modules then modules = { } end modules ['l-table'] = {
table.join = table.concat
local concat, sort, insert, remove = table.concat, table.sort, table.insert, table.remove
-local format, find, gsub, lower, dump = string.format, string.find, string.gsub, string.lower, string.dump
+local format, find, gsub, lower, dump, match = string.format, string.find, string.gsub, string.lower, string.dump, string.match
local getmetatable, setmetatable = getmetatable, setmetatable
-local type, next, tostring, ipairs = type, next, tostring, ipairs
+local type, next, tostring, tonumber, ipairs = type, next, tostring, tonumber, ipairs
+
+-- Starting with version 5.2 Lua no longer provide ipairs, which makes
+-- sense. As we already used the for loop and # in most places the
+-- impact on ConTeXt was not that large; the remaining ipairs already
+-- have been replaced. In a similar fashio we also hardly used pairs.
+--
+-- Just in case, we provide the fallbacks as discussed in Programming
+-- in Lua (http://www.lua.org/pil/7.3.html):
+
+if not ipairs then
+
+ -- for k, v in ipairs(t) do ... end
+ -- for k=1,#t do local v = t[k] ... end
+
+ local function iterate(a,i)
+ i = i + 1
+ local v = a[i]
+ if v ~= nil then
+ return i, v --, nil
+ end
+ end
+
+ function ipairs(a)
+ return iterate, a, 0
+ end
+
+end
+
+if not pairs then
+
+ -- for k, v in pairs(t) do ... end
+ -- for k, v in next, t do ... end
+
+ function pairs(t)
+ return next, t -- , nil
+ end
+
+end
+
+-- Also, unpack has been moved to the table table, and for compatiility
+-- reasons we provide both now.
+
+if not table.unpack then
+ table.unpack = _G.unpack
+elseif not unpack then
+ _G.unpack = table.unpack
+end
+
+-- extra functions, some might go (when not used)
function table.strip(tab)
local lst = { }
@@ -421,6 +588,14 @@ function table.strip(tab)
return lst
end
+function table.keys(t)
+ local k = { }
+ for key, _ in next, t do
+ k[#k+1] = key
+ end
+ return k
+end
+
local function compare(a,b)
return (tostring(a) < tostring(b))
end
@@ -464,7 +639,7 @@ end
table.sortedkeys = sortedkeys
table.sortedhashkeys = sortedhashkeys
-function table.sortedpairs(t)
+function table.sortedhash(t)
local s = sortedhashkeys(t) -- maybe just sortedkeys
local n = 0
local function kv(s)
@@ -475,6 +650,8 @@ function table.sortedpairs(t)
return kv, s
end
+table.sortedpairs = table.sortedhash
+
function table.append(t, list)
for _,v in next, list do
insert(t,v)
@@ -583,7 +760,7 @@ end
table.fastcopy = fastcopy
table.copy = copy
--- rougly: copy-loop : unpack : sub == 0.9 : 0.4 : 0.45 (so in critical apps, use unpack)
+-- roughly: 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) }
@@ -597,18 +774,18 @@ end
-- slower than #t on indexed tables (#t only returns the size of the numerically indexed slice)
-function table.is_empty(t)
+function table.is_empty(t) -- obolete, use inline code instead
return not t or not next(t)
end
-function table.one_entry(t)
+function table.one_entry(t) -- obolete, use inline code instead
local n = next(t)
return n and not next(t,n)
end
-function table.starts_at(t)
- return ipairs(t,1)(t,0)
-end
+--~ function table.starts_at(t) -- obsolete, not nice anyway
+--~ return ipairs(t,1)(t,0)
+--~ end
function table.tohash(t,value)
local h = { }
@@ -686,6 +863,8 @@ end
--
-- local propername = lpeg.P(lpeg.R("AZ","az","__") * lpeg.R("09","AZ","az", "__")^0 * lpeg.P(-1) )
+-- problem: there no good number_to_string converter with the best resolution
+
local function do_serialize(root,name,depth,level,indexed)
if level > 0 then
depth = depth .. " "
@@ -708,8 +887,9 @@ local function do_serialize(root,name,depth,level,indexed)
handle(format("%s{",depth))
end
end
+ -- we could check for k (index) being number (cardinal)
if root and next(root) then
- local first, last = nil, 0 -- #root cannot be trusted here
+ local first, last = nil, 0 -- #root cannot be trusted here (will be ok in 5.2 when ipairs is gone)
if compact then
-- NOT: for k=1,#root do (we need to quit at nil)
for k,v in ipairs(root) do -- can we use next?
@@ -730,10 +910,10 @@ local function do_serialize(root,name,depth,level,indexed)
if hexify then
handle(format("%s 0x%04X,",depth,v))
else
- handle(format("%s %s,",depth,v))
+ handle(format("%s %s,",depth,v)) -- %.99g
end
elseif t == "string" then
- if reduce and (find(v,"^[%-%+]?[%d]-%.?[%d+]$") == 1) then
+ if reduce and tonumber(v) then
handle(format("%s %s,",depth,v))
else
handle(format("%s %q,",depth,v))
@@ -770,29 +950,29 @@ local function do_serialize(root,name,depth,level,indexed)
--~ if hexify then
--~ handle(format("%s %s=0x%04X,",depth,key(k),v))
--~ else
- --~ handle(format("%s %s=%s,",depth,key(k),v))
+ --~ handle(format("%s %s=%s,",depth,key(k),v)) -- %.99g
--~ end
if type(k) == "number" then -- or find(k,"^%d+$") then
if hexify then
handle(format("%s [0x%04X]=0x%04X,",depth,k,v))
else
- handle(format("%s [%s]=%s,",depth,k,v))
+ handle(format("%s [%s]=%s,",depth,k,v)) -- %.99g
end
elseif noquotes and not reserved[k] and find(k,"^%a[%w%_]*$") then
if hexify then
handle(format("%s %s=0x%04X,",depth,k,v))
else
- handle(format("%s %s=%s,",depth,k,v))
+ handle(format("%s %s=%s,",depth,k,v)) -- %.99g
end
else
if hexify then
handle(format("%s [%q]=0x%04X,",depth,k,v))
else
- handle(format("%s [%q]=%s,",depth,k,v))
+ handle(format("%s [%q]=%s,",depth,k,v)) -- %.99g
end
end
elseif t == "string" then
- if reduce and (find(v,"^[%-%+]?[%d]-%.?[%d+]$") == 1) then
+ if reduce and tonumber(v) then
--~ handle(format("%s %s=%s,",depth,key(k),v))
if type(k) == "number" then -- or find(k,"^%d+$") then
if hexify then
@@ -1001,7 +1181,7 @@ function table.tofile(filename,root,name,reduce,noquotes,hexify)
end
end
-local function flatten(t,f,complete)
+local function flatten(t,f,complete) -- is this used? meybe a variant with next, ...
for i=1,#t do
local v = t[i]
if type(v) == "table" then
@@ -1030,6 +1210,24 @@ end
table.flatten_one_level = table.unnest
+-- a better one:
+
+local function flattened(t,f)
+ if not f then
+ f = { }
+ end
+ for k, v in next, t do
+ if type(v) == "table" then
+ flattened(v,f)
+ else
+ f[k] = v
+ end
+ end
+ return f
+end
+
+table.flattened = flattened
+
-- the next three may disappear
function table.remove_value(t,value) -- todo: n
@@ -1165,7 +1363,7 @@ function table.clone(t,p) -- t is optional or nil or table
elseif not t then
t = { }
end
- setmetatable(t, { __index = function(_,key) return p[key] end })
+ setmetatable(t, { __index = function(_,key) return p[key] end }) -- why not __index = p ?
return t
end
@@ -1193,21 +1391,36 @@ function table.reverse(t)
return tt
end
---~ function table.keys(t)
---~ local k = { }
---~ for k,_ in next, t do
---~ k[#k+1] = k
---~ end
---~ return k
---~ end
+function table.insert_before_value(t,value,extra)
+ for i=1,#t do
+ if t[i] == extra then
+ remove(t,i)
+ end
+ end
+ for i=1,#t do
+ if t[i] == value then
+ insert(t,i,extra)
+ return
+ end
+ end
+ insert(t,1,extra)
+end
+
+function table.insert_after_value(t,value,extra)
+ for i=1,#t do
+ if t[i] == extra then
+ remove(t,i)
+ end
+ end
+ for i=1,#t do
+ if t[i] == value then
+ insert(t,i+1,extra)
+ return
+ end
+ end
+ insert(t,#t+1,extra)
+end
---~ function table.keys_as_string(t)
---~ local k = { }
---~ for k,_ in next, t do
---~ k[#k+1] = k
---~ end
---~ return concat(k,"")
---~ end
end -- of closure
@@ -1216,13 +1429,13 @@ do -- create closure to overcome 200 locals limit
if not modules then modules = { } end modules ['l-io'] = {
version = 1.001,
- comment = "companion to luat-lib.tex",
+ comment = "companion to luat-lib.mkiv",
author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
copyright = "PRAGMA ADE / ConTeXt Development Team",
license = "see context related readme files"
}
-local byte = string.byte
+local byte, find, gsub = string.byte, string.find, string.gsub
if string.find(os.getenv("PATH"),";") then
io.fileseparator, io.pathseparator = "\\", ";"
@@ -1251,7 +1464,7 @@ function io.savedata(filename,data,joiner)
elseif type(data) == "function" then
data(f)
else
- f:write(data)
+ f:write(data or "")
end
f:close()
return true
@@ -1380,20 +1593,21 @@ function io.ask(question,default,options)
end
io.write(string.format(" "))
local answer = io.read()
- answer = answer:gsub("^%s*(.*)%s*$","%1")
+ answer = gsub(answer,"^%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
+ for k=1,#options do
+ if options[k] == answer then
return answer
end
end
local pattern = "^" .. answer
- for _,v in pairs(options) do
- if v:find(pattern) then
+ for k=1,#options do
+ local v = options[k]
+ if find(v,pattern) then
return v
end
end
@@ -1408,20 +1622,22 @@ do -- create closure to overcome 200 locals limit
if not modules then modules = { } end modules ['l-number'] = {
version = 1.001,
- comment = "companion to luat-lib.tex",
+ comment = "companion to luat-lib.mkiv",
author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
copyright = "PRAGMA ADE / ConTeXt Development Team",
license = "see context related readme files"
}
-local format = string.format
+local tostring = tostring
+local format, floor, insert, match = string.format, math.floor, table.insert, string.match
+local lpegmatch = lpeg.match
number = number or { }
-- a,b,c,d,e,f = number.toset(100101)
function number.toset(n)
- return (tostring(n)):match("(.?)(.?)(.?)(.?)(.?)(.?)(.?)(.?)")
+ return match(tostring(n),"(.?)(.?)(.?)(.?)(.?)(.?)(.?)(.?)")
end
function number.toevenhex(n)
@@ -1447,10 +1663,21 @@ end
local one = lpeg.C(1-lpeg.S(''))^1
function number.toset(n)
- return one:match(tostring(n))
+ return lpegmatch(one,tostring(n))
end
-
+function number.bits(n,zero)
+ local t, i = { }, (zero and 0) or 1
+ while n > 0 do
+ local m = n % 2
+ if m > 0 then
+ insert(t,1,i)
+ end
+ n = floor(n/2)
+ i = i + 1
+ end
+ return t
+end
end -- of closure
@@ -1459,7 +1686,7 @@ do -- create closure to overcome 200 locals limit
if not modules then modules = { } end modules ['l-set'] = {
version = 1.001,
- comment = "companion to luat-lib.tex",
+ comment = "companion to luat-lib.mkiv",
author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
copyright = "PRAGMA ADE / ConTeXt Development Team",
license = "see context related readme files"
@@ -1549,46 +1776,63 @@ do -- create closure to overcome 200 locals limit
if not modules then modules = { } end modules ['l-os'] = {
version = 1.001,
- comment = "companion to luat-lub.tex",
+ comment = "companion to luat-lib.mkiv",
author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
copyright = "PRAGMA ADE / ConTeXt Development Team",
license = "see context related readme files"
}
-local find = string.find
+-- maybe build io.flush in os.execute
+
+local find, format, gsub = string.find, string.format, string.gsub
+local random, ceil = math.random, math.ceil
+
+local execute, spawn, exec, ioflush = os.execute, os.spawn or os.execute, os.exec or os.execute, io.flush
+
+function os.execute(...) ioflush() return execute(...) end
+function os.spawn (...) ioflush() return spawn (...) end
+function os.exec (...) ioflush() return exec (...) end
function os.resultof(command)
- return io.popen(command,"r"):read("*all")
+ ioflush() -- else messed up logging
+ local handle = io.popen(command,"r")
+ if not handle then
+ -- print("unknown command '".. command .. "' in os.resultof")
+ return ""
+ else
+ return handle:read("*all") or ""
+ end
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)
+--~ os.type : windows | unix (new, we already guessed os.platform)
+--~ os.name : windows | msdos | linux | macosx | solaris | .. | generic (new)
+--~ os.platform : extended os.name with architecture
if not io.fileseparator then
if find(os.getenv("PATH"),";") then
- io.fileseparator, io.pathseparator, os.platform = "\\", ";", os.type or "windows"
+ io.fileseparator, io.pathseparator, os.type = "\\", ";", os.type or "mswin"
else
- io.fileseparator, io.pathseparator, os.platform = "/" , ":", os.type or "unix"
+ io.fileseparator, io.pathseparator, os.type = "/" , ":", os.type or "unix"
end
end
-os.platform = os.platform or os.type or (io.pathseparator == ";" and "windows") or "unix"
+os.type = os.type or (io.pathseparator == ";" and "windows") or "unix"
+os.name = os.name or (os.type == "windows" and "mswin" ) or "linux"
+
+if os.type == "windows" then
+ os.libsuffix, os.binsuffix = 'dll', 'exe'
+else
+ os.libsuffix, os.binsuffix = 'so', ''
+end
function os.launch(str)
- if os.platform == "windows" then
+ if os.type == "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
@@ -1618,64 +1862,218 @@ end
--~ print(os.date("%H:%M:%S",os.gettimeofday()))
--~ print(os.date("%H:%M:%S",os.time()))
-os.arch = os.arch or function()
- local a = os.resultof("uname -m") or "linux"
- os.arch = function()
- return a
+-- no need for function anymore as we have more clever code and helpers now
+-- this metatable trickery might as well disappear
+
+os.resolvers = os.resolvers or { }
+
+local resolvers = os.resolvers
+
+local osmt = getmetatable(os) or { __index = function(t,k) t[k] = "unset" return "unset" end } -- maybe nil
+local osix = osmt.__index
+
+osmt.__index = function(t,k)
+ return (resolvers[k] or osix)(t,k)
+end
+
+setmetatable(os,osmt)
+
+if not os.setenv then
+
+ -- we still store them but they won't be seen in
+ -- child processes although we might pass them some day
+ -- using command concatination
+
+ local env, getenv = { }, os.getenv
+
+ function os.setenv(k,v)
+ env[k] = v
+ end
+
+ function os.getenv(k)
+ return env[k] or getenv(k)
end
- return a
+
end
-local platform
+-- we can use HOSTTYPE on some platforms
-function os.currentplatform(name,default)
- if not platform then
- local name = os.name or os.platform or name -- os.name is built in, os.platform is mine
- if not name then
- platform = default or "linux"
- elseif name == "windows" or name == "mswin" or name == "win32" or name == "msdos" then
- if os.getenv("PROCESSOR_ARCHITECTURE") == "AMD64" then
- platform = "mswin-64"
- else
- platform = "mswin"
- end
+local name, platform = os.name or "linux", os.getenv("MTX_PLATFORM") or ""
+
+local function guess()
+ local architecture = os.resultof("uname -m") or ""
+ if architecture ~= "" then
+ return architecture
+ end
+ architecture = os.getenv("HOSTTYPE") or ""
+ if architecture ~= "" then
+ return architecture
+ end
+ return os.resultof("echo $HOSTTYPE") or ""
+end
+
+if platform ~= "" then
+
+ os.platform = platform
+
+elseif os.type == "windows" then
+
+ -- we could set the variable directly, no function needed here
+
+ function os.resolvers.platform(t,k)
+ local platform, architecture = "", os.getenv("PROCESSOR_ARCHITECTURE") or ""
+ if find(architecture,"AMD64") then
+ platform = "mswin-64"
else
- local architecture = os.arch()
- if name == "linux" then
- if find(architecture,"x86_64") then
- platform = "linux-64"
- elseif find(architecture,"ppc") then
- platform = "linux-ppc"
- else
- platform = "linux"
- end
- elseif name == "macosx" then
- if find(architecture,"i386") then
- platform = "osx-intel"
- else
- platform = "osx-ppc"
- end
- elseif name == "sunos" then
- if find(architecture,"sparc") then
- platform = "solaris-sparc"
- else -- if architecture == 'i86pc'
- platform = "solaris-intel"
- end
- elseif name == "freebsd" then
- if find(architecture,"amd64") then
- platform = "freebsd-amd64"
- else
- platform = "freebsd"
- end
- else
- platform = default or name
- end
+ platform = "mswin"
end
- function os.currentplatform()
- return platform
+ os.setenv("MTX_PLATFORM",platform)
+ os.platform = platform
+ return platform
+ end
+
+elseif name == "linux" then
+
+ function os.resolvers.platform(t,k)
+ -- we sometims have HOSTTYPE set so let's check that first
+ local platform, architecture = "", os.getenv("HOSTTYPE") or os.resultof("uname -m") or ""
+ if find(architecture,"x86_64") then
+ platform = "linux-64"
+ elseif find(architecture,"ppc") then
+ platform = "linux-ppc"
+ else
+ platform = "linux"
+ end
+ os.setenv("MTX_PLATFORM",platform)
+ os.platform = platform
+ return platform
+ end
+
+elseif name == "macosx" then
+
+ --[[
+ Identifying the architecture of OSX is quite a mess and this
+ is the best we can come up with. For some reason $HOSTTYPE is
+ a kind of pseudo environment variable, not known to the current
+ environment. And yes, uname cannot be trusted either, so there
+ is a change that you end up with a 32 bit run on a 64 bit system.
+ Also, some proper 64 bit intel macs are too cheap (low-end) and
+ therefore not permitted to run the 64 bit kernel.
+ ]]--
+
+ function os.resolvers.platform(t,k)
+ -- local platform, architecture = "", os.getenv("HOSTTYPE") or ""
+ -- if architecture == "" then
+ -- architecture = os.resultof("echo $HOSTTYPE") or ""
+ -- end
+ local platform, architecture = "", os.resultof("echo $HOSTTYPE") or ""
+ if architecture == "" then
+ -- print("\nI have no clue what kind of OSX you're running so let's assume an 32 bit intel.\n")
+ platform = "osx-intel"
+ elseif find(architecture,"i386") then
+ platform = "osx-intel"
+ elseif find(architecture,"x86_64") then
+ platform = "osx-64"
+ else
+ platform = "osx-ppc"
end
+ os.setenv("MTX_PLATFORM",platform)
+ os.platform = platform
+ return platform
+ end
+
+elseif name == "sunos" then
+
+ function os.resolvers.platform(t,k)
+ local platform, architecture = "", os.resultof("uname -m") or ""
+ if find(architecture,"sparc") then
+ platform = "solaris-sparc"
+ else -- if architecture == 'i86pc'
+ platform = "solaris-intel"
+ end
+ os.setenv("MTX_PLATFORM",platform)
+ os.platform = platform
+ return platform
+ end
+
+elseif name == "freebsd" then
+
+ function os.resolvers.platform(t,k)
+ local platform, architecture = "", os.resultof("uname -m") or ""
+ if find(architecture,"amd64") then
+ platform = "freebsd-amd64"
+ else
+ platform = "freebsd"
+ end
+ os.setenv("MTX_PLATFORM",platform)
+ os.platform = platform
+ return platform
+ end
+
+elseif name == "kfreebsd" then
+
+ function os.resolvers.platform(t,k)
+ -- we sometims have HOSTTYPE set so let's check that first
+ local platform, architecture = "", os.getenv("HOSTTYPE") or os.resultof("uname -m") or ""
+ if find(architecture,"x86_64") then
+ platform = "kfreebsd-64"
+ else
+ platform = "kfreebsd-i386"
+ end
+ os.setenv("MTX_PLATFORM",platform)
+ os.platform = platform
+ return platform
+ end
+
+else
+
+ -- platform = "linux"
+ -- os.setenv("MTX_PLATFORM",platform)
+ -- os.platform = platform
+
+ function os.resolvers.platform(t,k)
+ local platform = "linux"
+ os.setenv("MTX_PLATFORM",platform)
+ os.platform = platform
+ return platform
+ end
+
+end
+
+-- beware, we set the randomseed
+
+-- from wikipedia: Version 4 UUIDs use a scheme relying only on random numbers. This algorithm sets the
+-- version number as well as two reserved bits. All other bits are set using a random or pseudorandom
+-- data source. Version 4 UUIDs have the form xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx with hexadecimal
+-- digits x and hexadecimal digits 8, 9, A, or B for y. e.g. f47ac10b-58cc-4372-a567-0e02b2c3d479.
+--
+-- as we don't call this function too often there is not so much risk on repetition
+
+local t = { 8, 9, "a", "b" }
+
+function os.uuid()
+ return format("%04x%04x-4%03x-%s%03x-%04x-%04x%04x%04x",
+ random(0xFFFF),random(0xFFFF),
+ random(0x0FFF),
+ t[ceil(random(4))] or 8,random(0x0FFF),
+ random(0xFFFF),
+ random(0xFFFF),random(0xFFFF),random(0xFFFF)
+ )
+end
+
+local d
+
+function os.timezone(delta)
+ d = d or tonumber(tonumber(os.date("%H")-os.date("!%H")))
+ if delta then
+ if d > 0 then
+ return format("+%02i:00",d)
+ else
+ return format("-%02i:00",-d)
+ end
+ else
+ return 1
end
- return platform
end
@@ -1685,7 +2083,7 @@ do -- create closure to overcome 200 locals limit
if not modules then modules = { } end modules ['l-file'] = {
version = 1.001,
- comment = "companion to luat-lib.tex",
+ comment = "companion to luat-lib.mkiv",
author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
copyright = "PRAGMA ADE / ConTeXt Development Team",
license = "see context related readme files"
@@ -1696,14 +2094,17 @@ if not modules then modules = { } end modules ['l-file'] = {
file = file or { }
local concat = table.concat
-local find, gmatch, match, gsub = string.find, string.gmatch, string.match, string.gsub
+local find, gmatch, match, gsub, sub, char = string.find, string.gmatch, string.match, string.gsub, string.sub, string.char
+local lpegmatch = lpeg.match
function file.removesuffix(filename)
return (gsub(filename,"%.[%a%d]+$",""))
end
function file.addsuffix(filename, suffix)
- if not find(filename,"%.[%a%d]+$") then
+ if not suffix or suffix == "" then
+ return filename
+ elseif not find(filename,"%.[%a%d]+$") then
return filename .. "." .. suffix
else
return filename
@@ -1726,20 +2127,39 @@ function file.nameonly(name)
return (gsub(match(name,"^.+[/\\](.-)$") or name,"%..*$",""))
end
-function file.extname(name)
- return match(name,"^.+%.([^/\\]-)$") or ""
+function file.extname(name,default)
+ return match(name,"^.+%.([^/\\]-)$") or default or ""
end
file.suffix = file.extname
---~ 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 = concat({...},"/")
+--~ pth = gsub(pth,"\\","/")
+--~ local a, b = match(pth,"^(.*://)(.*)$")
+--~ if a and b then
+--~ return a .. gsub(b,"//+","/")
+--~ end
+--~ a, b = match(pth,"^(//)(.*)$")
+--~ if a and b then
+--~ return a .. gsub(b,"//+","/")
+--~ end
+--~ return (gsub(pth,"//+","/"))
+--~ end
+
+local trick_1 = char(1)
+local trick_2 = "^" .. trick_1 .. "/+"
function file.join(...)
- local pth = concat({...},"/")
+ local lst = { ... }
+ local a, b = lst[1], lst[2]
+ if a == "" then
+ lst[1] = trick_1
+ elseif b and find(a,"^/+$") and find(b,"^/") then
+ lst[1] = ""
+ lst[2] = gsub(b,"^/+","")
+ end
+ local pth = concat(lst,"/")
pth = gsub(pth,"\\","/")
local a, b = match(pth,"^(.*://)(.*)$")
if a and b then
@@ -1749,17 +2169,28 @@ function file.join(...)
if a and b then
return a .. gsub(b,"//+","/")
end
+ pth = gsub(pth,trick_2,"")
return (gsub(pth,"//+","/"))
end
+--~ print(file.join("//","/y"))
+--~ print(file.join("/","/y"))
+--~ print(file.join("","/y"))
+--~ print(file.join("/x/","/y"))
+--~ 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.iswritable(name)
local a = lfs.attributes(name) or lfs.attributes(file.dirname(name,"."))
- return a and a.permissions:sub(2,2) == "w"
+ return a and sub(a.permissions,2,2) == "w"
end
function file.isreadable(name)
local a = lfs.attributes(name)
- return a and a.permissions:sub(1,1) == "r"
+ return a and sub(a.permissions,1,1) == "r"
end
file.is_readable = file.isreadable
@@ -1767,36 +2198,50 @@ file.is_writable = file.iswritable
-- todo: lpeg
-function file.split_path(str)
- local t = { }
- str = gsub(str,"\\", "/")
- str = gsub(str,"(%a):([;/])", "%1\001%2")
- for name in gmatch(str,"([^;:]+)") do
- if name ~= "" then
- t[#t+1] = gsub(name,"\001",":")
- end
- end
- return t
+--~ function file.split_path(str)
+--~ local t = { }
+--~ str = gsub(str,"\\", "/")
+--~ str = gsub(str,"(%a):([;/])", "%1\001%2")
+--~ for name in gmatch(str,"([^;:]+)") do
+--~ if name ~= "" then
+--~ t[#t+1] = gsub(name,"\001",":")
+--~ end
+--~ end
+--~ return t
+--~ end
+
+local checkedsplit = string.checkedsplit
+
+function file.split_path(str,separator)
+ str = gsub(str,"\\","/")
+ return checkedsplit(str,separator or io.pathseparator)
end
function file.join_path(tab)
return concat(tab,io.pathseparator) -- can have trailing //
end
+-- we can hash them weakly
+
function file.collapse_path(str)
- str = gsub(str,"/%./","/")
- local n, m = 1, 1
- while n > 0 or m > 0 do
- str, n = gsub(str,"[^/%.]+/%.%.$","")
- str, m = gsub(str,"[^/%.]+/%.%./","")
- end
- str = gsub(str,"([^/])/$","%1")
- str = gsub(str,"^%./","")
- str = gsub(str,"/%.$","")
+ str = gsub(str,"\\","/")
+ if find(str,"/") then
+ str = gsub(str,"^%./",(gsub(lfs.currentdir(),"\\","/")) .. "/") -- ./xx in qualified
+ str = gsub(str,"/%./","/")
+ local n, m = 1, 1
+ while n > 0 or m > 0 do
+ str, n = gsub(str,"[^/%.]+/%.%.$","")
+ str, m = gsub(str,"[^/%.]+/%.%./","")
+ end
+ str = gsub(str,"([^/])/$","%1")
+ -- str = gsub(str,"^%./","") -- ./xx in qualified
+ str = gsub(str,"/%.$","")
+ end
if str == "" then str = "." end
return str
end
+--~ print(file.collapse_path("/a"))
--~ print(file.collapse_path("a/./b/.."))
--~ print(file.collapse_path("a/aa/../b/bb"))
--~ print(file.collapse_path("a/../.."))
@@ -1826,27 +2271,27 @@ end
--~ local pattern = (noslashes^0 * slashes)^0 * (noperiod^1 * period)^1 * lpeg.C(noperiod^1) * -1
--~ function file.extname(name)
---~ return pattern:match(name) or ""
+--~ return lpegmatch(pattern,name) or ""
--~ end
--~ local pattern = lpeg.Cs(((period * noperiod^1 * -1)/"" + 1)^1)
--~ function file.removesuffix(name)
---~ return pattern:match(name)
+--~ return lpegmatch(pattern,name)
--~ end
--~ local pattern = (noslashes^0 * slashes)^1 * lpeg.C(noslashes^1) * -1
--~ function file.basename(name)
---~ return pattern:match(name) or name
+--~ return lpegmatch(pattern,name) or name
--~ end
--~ local pattern = (noslashes^0 * slashes)^1 * lpeg.Cp() * noslashes^1 * -1
--~ function file.dirname(name)
---~ local p = pattern:match(name)
+--~ local p = lpegmatch(pattern,name)
--~ if p then
---~ return name:sub(1,p-2)
+--~ return sub(name,1,p-2)
--~ else
--~ return ""
--~ end
@@ -1855,7 +2300,7 @@ end
--~ local pattern = (noslashes^0 * slashes)^0 * (noperiod^1 * period)^1 * lpeg.Cp() * noperiod^1 * -1
--~ function file.addsuffix(name, suffix)
---~ local p = pattern:match(name)
+--~ local p = lpegmatch(pattern,name)
--~ if p then
--~ return name
--~ else
@@ -1866,9 +2311,9 @@ end
--~ local pattern = (noslashes^0 * slashes)^0 * (noperiod^1 * period)^1 * lpeg.Cp() * noperiod^1 * -1
--~ function file.replacesuffix(name,suffix)
---~ local p = pattern:match(name)
+--~ local p = lpegmatch(pattern,name)
--~ if p then
---~ return name:sub(1,p-2) .. "." .. suffix
+--~ return sub(name,1,p-2) .. "." .. suffix
--~ else
--~ return name .. "." .. suffix
--~ end
@@ -1877,11 +2322,11 @@ end
--~ local pattern = (noslashes^0 * slashes)^0 * lpeg.Cp() * ((noperiod^1 * period)^1 * lpeg.Cp() + lpeg.P(true)) * noperiod^1 * -1
--~ function file.nameonly(name)
---~ local a, b = pattern:match(name)
+--~ local a, b = lpegmatch(pattern,name)
--~ if b then
---~ return name:sub(a,b-2)
+--~ return sub(name,a,b-2)
--~ elseif a then
---~ return name:sub(a)
+--~ return sub(name,a)
--~ else
--~ return name
--~ end
@@ -1915,11 +2360,11 @@ local rootbased = lpeg.P("/") + letter*lpeg.P(":")
-- ./name ../name /name c: :// name/name
function file.is_qualified_path(filename)
- return qualified:match(filename)
+ return lpegmatch(qualified,filename) ~= nil
end
function file.is_rootbased_path(filename)
- return rootbased:match(filename)
+ return lpegmatch(rootbased,filename) ~= nil
end
local slash = lpeg.S("\\/")
@@ -1932,16 +2377,25 @@ local base = lpeg.C((1-suffix)^0)
local pattern = (drive + lpeg.Cc("")) * (path + lpeg.Cc("")) * (base + lpeg.Cc("")) * (suffix + lpeg.Cc(""))
function file.splitname(str) -- returns drive, path, base, suffix
- return pattern:match(str)
+ return lpegmatch(pattern,str)
end
--- function test(t) for k, v in pairs(t) do print(v, "=>", file.splitname(v)) end end
+-- function test(t) for k, v in next, t do print(v, "=>", file.splitname(v)) end end
--
-- test { "c:", "c:/aa", "c:/aa/bb", "c:/aa/bb/cc", "c:/aa/bb/cc.dd", "c:/aa/bb/cc.dd.ee" }
-- test { "c:", "c:aa", "c:aa/bb", "c:aa/bb/cc", "c:aa/bb/cc.dd", "c:aa/bb/cc.dd.ee" }
-- test { "/aa", "/aa/bb", "/aa/bb/cc", "/aa/bb/cc.dd", "/aa/bb/cc.dd.ee" }
-- test { "aa", "aa/bb", "aa/bb/cc", "aa/bb/cc.dd", "aa/bb/cc.dd.ee" }
+--~ -- todo:
+--~
+--~ if os.type == "windows" then
+--~ local currentdir = lfs.currentdir
+--~ function lfs.currentdir()
+--~ return (gsub(currentdir(),"\\","/"))
+--~ end
+--~ end
+
end -- of closure
@@ -2006,7 +2460,7 @@ end
function file.loadchecksum(name)
if md5 then
local data = io.loaddata(name .. ".md5")
- return data and data:gsub("%s","")
+ return data and (gsub(data,"%s",""))
end
return nil
end
@@ -2025,19 +2479,168 @@ end -- of closure
do -- create closure to overcome 200 locals limit
+if not modules then modules = { } end modules ['l-url'] = {
+ version = 1.001,
+ comment = "companion to luat-lib.mkiv",
+ author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
+ copyright = "PRAGMA ADE / ConTeXt Development Team",
+ license = "see context related readme files"
+}
+
+local char, gmatch, gsub = string.char, string.gmatch, string.gsub
+local tonumber, type = tonumber, type
+local lpegmatch = lpeg.match
+
+-- 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
+
+url = url or { }
+
+local function tochar(s)
+ return 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 plus = lpeg.P("+")
+local escaped = (plus / " ") + (percent * lpeg.C(hexdigit * hexdigit) / tochar)
+
+-- we assume schemes with more than 1 character (in order to avoid problems with windows disks)
+
+local scheme = lpeg.Cs((escaped+(1-colon-slash-qmark-hash))^2) * 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)
+
+-- todo: reconsider Ct as we can as well have five return values (saves a table)
+-- so we can have two parsers, one with and one without
+
+function url.split(str)
+ return (type(str) == "string" and lpegmatch(parser,str)) or str
+end
+
+-- todo: cache them
+
+function url.hashed(str)
+ local s = url.split(str)
+ local somescheme = s[1] ~= ""
+ return {
+ scheme = (somescheme and s[1]) or "file",
+ authority = s[2],
+ path = s[3],
+ query = s[4],
+ fragment = s[5],
+ original = str,
+ noscheme = not somescheme,
+ }
+end
+
+function url.hasscheme(str)
+ return url.split(str)[1] ~= ""
+end
+
+function url.addscheme(str,scheme)
+ return (url.hasscheme(str) and str) or ((scheme or "file:///") .. str)
+end
+
+function url.construct(hash)
+ local fullurl = hash.sheme .. "://".. hash.authority .. hash.path
+ if hash.query then
+ fullurl = fullurl .. "?".. hash.query
+ end
+ if hash.fragment then
+ fullurl = fullurl .. "?".. hash.fragment
+ end
+ return fullurl
+end
+
+function url.filename(filename)
+ local t = url.hashed(filename)
+ return (t.scheme == "file" and (gsub(t.path,"^/([a-zA-Z])([:|])/)","%1:"))) or filename
+end
+
+function url.query(str)
+ if type(str) == "string" then
+ local t = { }
+ for k, v in gmatch(str,"([^&=]*)=([^&=]*)") 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")
+
+
+end -- of closure
+
+do -- create closure to overcome 200 locals limit
+
if not modules then modules = { } end modules ['l-dir'] = {
version = 1.001,
- comment = "companion to luat-lib.tex",
+ comment = "companion to luat-lib.mkiv",
author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
copyright = "PRAGMA ADE / ConTeXt Development Team",
license = "see context related readme files"
}
+-- dir.expand_name will be merged with cleanpath and collapsepath
+
local type = type
-local find, gmatch = string.find, string.gmatch
+local find, gmatch, match, gsub = string.find, string.gmatch, string.match, string.gsub
+local lpegmatch = lpeg.match
dir = dir or { }
+-- handy
+
+function dir.current()
+ return (gsub(lfs.currentdir(),"\\","/"))
+end
+
-- optimizing for no string.find (*) does not save time
local attributes = lfs.attributes
@@ -2068,6 +2671,35 @@ end
dir.glob_pattern = glob_pattern
+local function collect_pattern(path,patt,recurse,result)
+ local ok, scanner
+ result = result or { }
+ 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 find(path,"/$") then path = path .. '/' end
+ for name in scanner do
+ local full = path .. name
+ local attr = attributes(full)
+ local mode = attr.mode
+ if mode == 'file' then
+ if find(full,patt) then
+ result[name] = attr
+ end
+ elseif recurse and (mode == "directory") and (name ~= '.') and (name ~= "..") then
+ attr.list = collect_pattern(full,patt,recurse)
+ result[name] = attr
+ end
+ end
+ end
+ return result
+end
+
+dir.collect_pattern = collect_pattern
+
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 {
@@ -2087,29 +2719,48 @@ local filter = Cs ( (
)^0 )
local function glob(str,t)
- if type(str) == "table" then
- local t = t or { }
- for s=1,#str do
- glob(str[s],t)
+ if type(t) == "function" then
+ if type(str) == "table" then
+ for s=1,#str do
+ glob(str[s],t)
+ end
+ elseif lfs.isfile(str) then
+ t(str)
+ else
+ local split = lpegmatch(pattern,str)
+ if split then
+ local root, path, base = split[1], split[2], split[3]
+ local recurse = find(base,"%*%*")
+ local start = root .. path
+ local result = lpegmatch(filter,start .. base)
+ glob_pattern(start,result,recurse,t)
+ end
end
- return t
- elseif lfs.isfile(str) then
- local t = t or { }
- t[#t+1] = str
- return t
else
- local split = pattern:match(str)
- if split then
+ if type(str) == "table" 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 = find(base,"%*%*")
- local start = root .. path
- local result = filter:match(start .. base)
- glob_pattern(start,result,recurse,action)
+ for s=1,#str do
+ glob(str[s],t)
+ end
+ return t
+ elseif lfs.isfile(str) then
+ local t = t or { }
+ t[#t+1] = str
return t
else
- return { }
+ local split = lpegmatch(pattern,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 = find(base,"%*%*")
+ local start = root .. path
+ local result = lpegmatch(filter,start .. base)
+ glob_pattern(start,result,recurse,action)
+ return t
+ else
+ return { }
+ end
end
end
end
@@ -2171,11 +2822,12 @@ end
local make_indeed = true -- false
-if string.find(os.getenv("PATH"),";") then
+if string.find(os.getenv("PATH"),";") then -- os.type == "windows"
function dir.mkdirs(...)
- local str, pth = "", ""
- for _, s in ipairs({...}) do
+ local str, pth, t = "", "", { ... }
+ for i=1,#t do
+ local s = t[i]
if s ~= "" then
if str ~= "" then
str = str .. "/" .. s
@@ -2186,13 +2838,13 @@ if string.find(os.getenv("PATH"),";") then
end
local first, middle, last
local drive = false
- first, middle, last = str:match("^(//)(//*)(.*)$")
+ first, middle, last = match(str,"^(//)(//*)(.*)$")
if first then
-- empty network path == local path
else
- first, last = str:match("^(//)/*(.-)$")
+ first, last = match(str,"^(//)/*(.-)$")
if first then
- middle, last = str:match("([^/]+)/+(.-)$")
+ middle, last = match(str,"([^/]+)/+(.-)$")
if middle then
pth = "//" .. middle
else
@@ -2200,11 +2852,11 @@ if string.find(os.getenv("PATH"),";") then
last = ""
end
else
- first, middle, last = str:match("^([a-zA-Z]:)(/*)(.-)$")
+ first, middle, last = match(str,"^([a-zA-Z]:)(/*)(.-)$")
if first then
pth, drive = first .. middle, true
else
- middle, last = str:match("^(/*)(.-)$")
+ middle, last = match(str,"^(/*)(.-)$")
if not middle then
last = str
end
@@ -2238,34 +2890,31 @@ if string.find(os.getenv("PATH"),";") then
--~ print(dir.mkdirs("///a/b/c"))
--~ print(dir.mkdirs("a/bbb//ccc/"))
- function dir.expand_name(str)
- local first, nothing, last = str:match("^(//)(//*)(.*)$")
+ function dir.expand_name(str) -- will be merged with cleanpath and collapsepath
+ local first, nothing, last = match(str,"^(//)(//*)(.*)$")
if first then
- first = lfs.currentdir() .. "/"
- first = first:gsub("\\","/")
+ first = dir.current() .. "/"
end
if not first then
- first, last = str:match("^(//)/*(.*)$")
+ first, last = match(str,"^(//)/*(.*)$")
end
if not first then
- first, last = str:match("^([a-zA-Z]:)(.*)$")
+ first, last = match(str,"^([a-zA-Z]:)(.*)$")
if first and not find(last,"^/") then
local d = lfs.currentdir()
if lfs.chdir(first) then
- first = lfs.currentdir()
- first = first:gsub("\\","/")
+ first = dir.current()
end
lfs.chdir(d)
end
end
if not first then
- first, last = lfs.currentdir(), str
- first = first:gsub("\\","/")
+ first, last = dir.current(), str
end
- last = last:gsub("//","/")
- last = last:gsub("/%./","/")
- last = last:gsub("^/*","")
- first = first:gsub("/*$","")
+ last = gsub(last,"//","/")
+ last = gsub(last,"/%./","/")
+ last = gsub(last,"^/*","")
+ first = gsub(first,"/*$","")
if last == "" then
return first
else
@@ -2276,8 +2925,9 @@ if string.find(os.getenv("PATH"),";") then
else
function dir.mkdirs(...)
- local str, pth = "", ""
- for _, s in ipairs({...}) do
+ local str, pth, t = "", "", { ... }
+ for i=1,#t do
+ local s = t[i]
if s ~= "" then
if str ~= "" then
str = str .. "/" .. s
@@ -2286,7 +2936,7 @@ else
end
end
end
- str = str:gsub("/+","/")
+ str = gsub(str,"/+","/")
if find(str,"^/") then
pth = "/"
for s in gmatch(str,"[^/]+") do
@@ -2320,12 +2970,12 @@ else
--~ print(dir.mkdirs("///a/b/c"))
--~ print(dir.mkdirs("a/bbb//ccc/"))
- function dir.expand_name(str)
+ function dir.expand_name(str) -- will be merged with cleanpath and collapsepath
if not find(str,"^/") then
str = lfs.currentdir() .. "/" .. str
end
- str = str:gsub("//","/")
- str = str:gsub("/%./","/")
+ str = gsub(str,"//","/")
+ str = gsub(str,"/%./","/")
return str
end
@@ -2340,7 +2990,7 @@ do -- create closure to overcome 200 locals limit
if not modules then modules = { } end modules ['l-boolean'] = {
version = 1.001,
- comment = "companion to luat-lib.tex",
+ comment = "companion to luat-lib.mkiv",
author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
copyright = "PRAGMA ADE / ConTeXt Development Team",
license = "see context related readme files"
@@ -2401,7 +3051,7 @@ do -- create closure to overcome 200 locals limit
if not modules then modules = { } end modules ['l-math'] = {
version = 1.001,
- comment = "companion to luat-lib.tex",
+ comment = "companion to luat-lib.mkiv",
author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
copyright = "PRAGMA ADE / ConTeXt Development Team",
license = "see context related readme files"
@@ -2448,7 +3098,7 @@ do -- create closure to overcome 200 locals limit
if not modules then modules = { } end modules ['l-utils'] = {
version = 1.001,
- comment = "companion to luat-lib.tex",
+ comment = "companion to luat-lib.mkiv",
author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
copyright = "PRAGMA ADE / ConTeXt Development Team",
license = "see context related readme files"
@@ -2456,6 +3106,10 @@ if not modules then modules = { } end modules ['l-utils'] = {
-- hm, quite unreadable
+local gsub = string.gsub
+local concat = table.concat
+local type, next = type, next
+
if not utils then utils = { } end
if not utils.merger then utils.merger = { } end
if not utils.lua then utils.lua = { } end
@@ -2493,7 +3147,7 @@ function utils.merger._self_load_(name)
end
if data and utils.merger.strip_comment then
-- saves some 20K
- data = data:gsub("%-%-~[^\n\r]*[\r\n]", "")
+ data = gsub(data,"%-%-~[^\n\r]*[\r\n]", "")
end
return data or ""
end
@@ -2511,7 +3165,7 @@ end
function utils.merger._self_swap_(data,code)
if data ~= "" then
- return (data:gsub(utils.merger.pattern, function(s)
+ return (gsub(data,utils.merger.pattern, function(s)
return "\n\n" .. "-- "..utils.merger.m_begin .. "\n" .. code .. "\n" .. "-- "..utils.merger.m_end .. "\n\n"
end, 1))
else
@@ -2521,8 +3175,8 @@ end
--~ stripper:
--~
---~ data = string.gsub(data,"%-%-~[^\n]*\n","")
---~ data = string.gsub(data,"\n\n+","\n")
+--~ data = gsub(data,"%-%-~[^\n]*\n","")
+--~ data = gsub(data,"\n\n+","\n")
function utils.merger._self_libs_(libs,list)
local result, f, frozen = { }, nil, false
@@ -2530,9 +3184,10 @@ function utils.merger._self_libs_(libs,list)
if type(libs) == 'string' then libs = { libs } end
if type(list) == 'string' then list = { list } end
local foundpath = nil
- for _, lib in ipairs(libs) do
- for _, pth in ipairs(list) do
- pth = string.gsub(pth,"\\","/") -- file.clean_path
+ for i=1,#libs do
+ local lib = libs[i]
+ for j=1,#list do
+ local pth = gsub(list[j],"\\","/") -- file.clean_path
utils.report("checking library path %s",pth)
local name = pth .. "/" .. lib
if lfs.isfile(name) then
@@ -2544,7 +3199,8 @@ function utils.merger._self_libs_(libs,list)
if foundpath then
utils.report("using library path %s",foundpath)
local right, wrong = { }, { }
- for _, lib in ipairs(libs) do
+ for i=1,#libs do
+ local lib = libs[i]
local fullname = foundpath .. "/" .. lib
if lfs.isfile(fullname) then
-- right[#right+1] = lib
@@ -2558,15 +3214,15 @@ function utils.merger._self_libs_(libs,list)
end
end
if #right > 0 then
- utils.report("merged libraries: %s",table.concat(right," "))
+ utils.report("merged libraries: %s",concat(right," "))
end
if #wrong > 0 then
- utils.report("skipped libraries: %s",table.concat(wrong," "))
+ utils.report("skipped libraries: %s",concat(wrong," "))
end
else
utils.report("no valid library path found")
end
- return table.concat(result, "\n\n")
+ return concat(result, "\n\n")
end
function utils.merger.selfcreate(libs,list,target)
@@ -2624,16 +3280,28 @@ do -- create closure to overcome 200 locals limit
if not modules then modules = { } end modules ['l-aux'] = {
version = 1.001,
- comment = "companion to luat-lib.tex",
+ comment = "companion to luat-lib.mkiv",
author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
copyright = "PRAGMA ADE / ConTeXt Development Team",
license = "see context related readme files"
}
+-- for inline, no store split : for s in string.gmatch(str,",* *([^,]+)") do .. end
+
aux = aux or { }
local concat, format, gmatch = table.concat, string.format, string.gmatch
local tostring, type = tostring, type
+local lpegmatch = lpeg.match
+
+local P, R, V = lpeg.P, lpeg.R, lpeg.V
+
+local escape, left, right = P("\\"), P('{'), P('}')
+
+lpeg.patterns.balanced = P {
+ [1] = ((escape * (left+right)) + (1 - (left+right)) + V(2))^0,
+ [2] = left * V(1) * right
+}
local space = lpeg.P(' ')
local equal = lpeg.P("=")
@@ -2641,7 +3309,7 @@ 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 nested = lpeg.P { lbrace * (nobrace + lpeg.V(1))^0 * rbrace }
local spaces = space^0
local value = lpeg.P(lbrace * lpeg.C((nobrace + nested)^0) * rbrace) + lpeg.C((nested + (1-comma))^0)
@@ -2679,13 +3347,13 @@ function aux.make_settings_to_hash_pattern(set,how)
end
end
-function aux.settings_to_hash(str)
+function aux.settings_to_hash(str,existing)
if str and str ~= "" then
- hash = { }
+ hash = existing or { }
if moretolerant then
- pattern_b_s:match(str)
+ lpegmatch(pattern_b_s,str)
else
- pattern_a_s:match(str)
+ lpegmatch(pattern_a_s,str)
end
return hash
else
@@ -2693,39 +3361,41 @@ function aux.settings_to_hash(str)
end
end
-function aux.settings_to_hash_tolerant(str)
+function aux.settings_to_hash_tolerant(str,existing)
if str and str ~= "" then
- hash = { }
- pattern_b_s:match(str)
+ hash = existing or { }
+ lpegmatch(pattern_b_s,str)
return hash
else
return { }
end
end
-function aux.settings_to_hash_strict(str)
+function aux.settings_to_hash_strict(str,existing)
if str and str ~= "" then
- hash = { }
- pattern_c_s:match(str)
+ hash = existing or { }
+ lpegmatch(pattern_c_s,str)
return next(hash) and hash
else
return nil
end
end
-local seperator = comma * space^0
+local separator = 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)
+local pattern = lpeg.Ct(value*(separator*value)^0)
-- "aap, {noot}, mies" : outer {} removes, leading spaces ignored
aux.settings_to_array_pattern = pattern
+-- we could use a weak table as cache
+
function aux.settings_to_array(str)
if not str or str == "" then
return { }
else
- return pattern:match(str)
+ return lpegmatch(pattern,str)
end
end
@@ -2734,10 +3404,10 @@ local function set(t,v)
end
local value = lpeg.P(lpeg.Carg(1)*value) / set
-local pattern = value*(seperator*value)^0 * lpeg.Carg(1)
+local pattern = value*(separator*value)^0 * lpeg.Carg(1)
function aux.add_settings_to_array(t,str)
- return pattern:match(str, nil, t)
+ return lpegmatch(pattern,str,nil,t)
end
function aux.hash_to_string(h,separator,yes,no,strict,omit)
@@ -2785,6 +3455,13 @@ function aux.settings_to_set(str,t)
return t
end
+local value = lbrace * lpeg.C((nobrace + nested)^0) * rbrace
+local pattern = lpeg.Ct((space + value)^0)
+
+function aux.arguments_to_table(str)
+ return lpegmatch(pattern,str)
+end
+
-- temporary here
function aux.getparameters(self,class,parentclass,settings)
@@ -2793,36 +3470,31 @@ function aux.getparameters(self,class,parentclass,settings)
sc = table.clone(self[parent])
self[class] = sc
end
- aux.add_settings_to_array(sc, settings)
+ aux.settings_to_hash(settings,sc)
end
-- temporary here
-local digit = lpeg.R("09")
-local period = lpeg.P(".")
-local zero = lpeg.P("0")
-
---~ local finish = lpeg.P(-1)
---~ local nodigit = (1-digit) + finish
---~ local case_1 = (period * zero^1 * #nodigit)/"" -- .000
---~ local case_2 = (period * (1-(zero^0/"") * #nodigit)^1 * (zero^0/"") * nodigit) -- .010 .10 .100100
-
+local digit = lpeg.R("09")
+local period = lpeg.P(".")
+local zero = lpeg.P("0")
local trailingzeros = zero^0 * -digit -- suggested by Roberto R
-local case_1 = period * trailingzeros / ""
-local case_2 = period * (digit - trailingzeros)^1 * (trailingzeros / "")
-
-local number = digit^1 * (case_1 + case_2)
-local stripper = lpeg.Cs((number + 1)^0)
+local case_1 = period * trailingzeros / ""
+local case_2 = period * (digit - trailingzeros)^1 * (trailingzeros / "")
+local number = digit^1 * (case_1 + case_2)
+local stripper = lpeg.Cs((number + 1)^0)
--~ local sample = "bla 11.00 bla 11 bla 0.1100 bla 1.00100 bla 0.00 bla 0.001 bla 1.1100 bla 0.100100100 bla 0.00100100100"
--~ collectgarbage("collect")
--~ str = string.rep(sample,10000)
--~ local ts = os.clock()
---~ stripper:match(str)
---~ print(#str, os.clock()-ts, stripper:match(sample))
+--~ lpegmatch(stripper,str)
+--~ print(#str, os.clock()-ts, lpegmatch(stripper,sample))
+
+lpeg.patterns.strip_zeros = stripper
function aux.strip_zeros(str)
- return stripper:match(str)
+ return lpegmatch(stripper,str)
end
function aux.definetable(target) -- defines undefined tables
@@ -2846,6 +3518,375 @@ function aux.accesstable(target)
return t
end
+--~ function string.commaseparated(str)
+--~ return gmatch(str,"([^,%s]+)")
+--~ end
+
+-- as we use this a lot ...
+
+--~ function aux.cachefunction(action,weak)
+--~ local cache = { }
+--~ if weak then
+--~ setmetatable(cache, { __mode = "kv" } )
+--~ end
+--~ local function reminder(str)
+--~ local found = cache[str]
+--~ if not found then
+--~ found = action(str)
+--~ cache[str] = found
+--~ end
+--~ return found
+--~ end
+--~ return reminder, cache
+--~ end
+
+
+end -- of closure
+
+do -- create closure to overcome 200 locals limit
+
+if not modules then modules = { } end modules ['trac-tra'] = {
+ version = 1.001,
+ comment = "companion to trac-tra.mkiv",
+ author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
+ copyright = "PRAGMA ADE / ConTeXt Development Team",
+ license = "see context related readme files"
+}
+
+-- the <anonymous> tag is kind of generic and used for functions that are not
+-- bound to a variable, like node.new, node.copy etc (contrary to for instance
+-- node.has_attribute which is bound to a has_attribute local variable in mkiv)
+
+local debug = require "debug"
+
+local getinfo = debug.getinfo
+local type, next = type, next
+local concat = table.concat
+local format, find, lower, gmatch, gsub = string.format, string.find, string.lower, string.gmatch, string.gsub
+
+debugger = debugger or { }
+
+local counters = { }
+local names = { }
+
+-- one
+
+local function hook()
+ local f = getinfo(2,"f").func
+ local n = getinfo(2,"Sn")
+-- if n.what == "C" and n.name then print (n.namewhat .. ': ' .. n.name) end
+ if f then
+ local cf = counters[f]
+ if cf == nil then
+ counters[f] = 1
+ names[f] = n
+ else
+ counters[f] = cf + 1
+ end
+ end
+end
+local function getname(func)
+ local n = names[func]
+ if n then
+ if n.what == "C" then
+ return n.name or '<anonymous>'
+ 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 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
+ -- table.sort(counters)
+ for func, count in next, counters do
+ if count > threshold then
+ local name = getname(func)
+ if not find(name,"for generator") then
+ printer(format("%8i %s", count, name))
+ total = total + count
+ end
+ end
+ grandtotal = grandtotal + count
+ functions = functions + 1
+ end
+ printer(format("functions: %s, total: %s, grand total: %s, threshold: %s\n", functions, total, grandtotal, threshold))
+end
+
+-- two
+
+--~ local function hook()
+--~ local n = getinfo(2)
+--~ if n.what=="C" and not n.name then
+--~ local f = tostring(debug.traceback())
+--~ local cf = counters[f]
+--~ if cf == nil then
+--~ counters[f] = 1
+--~ names[f] = n
+--~ else
+--~ counters[f] = cf + 1
+--~ end
+--~ 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
+--~ -- table.sort(counters)
+--~ for func, count in next, counters do
+--~ if count > threshold then
+--~ printer(format("%8i %s", count, func))
+--~ total = total + count
+--~ end
+--~ grandtotal = grandtotal + count
+--~ functions = functions + 1
+--~ end
+--~ printer(format("functions: %s, total: %s, grand total: %s, threshold: %s\n", functions, total, grandtotal, threshold))
+--~ end
+
+-- rest
+
+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
+
+--~ 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)
+
+setters = setters or { }
+setters.data = setters.data or { }
+
+--~ local function set(t,what,value)
+--~ local data, done = t.data, t.done
+--~ if type(what) == "string" then
+--~ what = aux.settings_to_array(what) -- inefficient but ok
+--~ end
+--~ for i=1,#what do
+--~ local w = what[i]
+--~ for d, f in next, data do
+--~ if done[d] then
+--~ -- prevent recursion due to wildcards
+--~ elseif find(d,w) then
+--~ done[d] = true
+--~ for i=1,#f do
+--~ f[i](value)
+--~ end
+--~ end
+--~ end
+--~ end
+--~ end
+
+local function set(t,what,value)
+ local data, done = t.data, t.done
+ if type(what) == "string" then
+ what = aux.settings_to_hash(what) -- inefficient but ok
+ end
+ for w, v in next, what do
+ if v == "" then
+ v = value
+ else
+ v = toboolean(v)
+ end
+ for d, f in next, data do
+ if done[d] then
+ -- prevent recursion due to wildcards
+ elseif find(d,w) then
+ done[d] = true
+ for i=1,#f do
+ f[i](v)
+ end
+ end
+ end
+ end
+end
+
+local function reset(t)
+ for d, f in next, t.data do
+ for i=1,#f do
+ f[i](false)
+ end
+ end
+end
+
+local function enable(t,what)
+ set(t,what,true)
+end
+
+local function disable(t,what)
+ local data = t.data
+ if not what or what == "" then
+ t.done = { }
+ reset(t)
+ else
+ set(t,what,false)
+ end
+end
+
+function setters.register(t,what,...)
+ local data = t.data
+ what = lower(what)
+ local w = data[what]
+ if not w then
+ w = { }
+ data[what] = w
+ end
+ for _, fnc in next, { ... } do
+ local typ = type(fnc)
+ if typ == "function" then
+ w[#w+1] = fnc
+ elseif typ == "string" then
+ w[#w+1] = function(value) set(t,fnc,value,nesting) end
+ end
+ end
+end
+
+function setters.enable(t,what)
+ local e = t.enable
+ t.enable, t.done = enable, { }
+ enable(t,string.simpleesc(tostring(what)))
+ t.enable, t.done = e, { }
+end
+
+function setters.disable(t,what)
+ local e = t.disable
+ t.disable, t.done = disable, { }
+ disable(t,string.simpleesc(tostring(what)))
+ t.disable, t.done = e, { }
+end
+
+function setters.reset(t)
+ t.done = { }
+ reset(t)
+end
+
+function setters.list(t) -- pattern
+ local list = table.sortedkeys(t.data)
+ local user, system = { }, { }
+ for l=1,#list do
+ local what = list[l]
+ if find(what,"^%*") then
+ system[#system+1] = what
+ else
+ user[#user+1] = what
+ end
+ end
+ return user, system
+end
+
+function setters.show(t)
+ commands.writestatus("","")
+ local list = setters.list(t)
+ for k=1,#list do
+ commands.writestatus(t.name,list[k])
+ end
+ commands.writestatus("","")
+end
+
+-- we could have used a bit of oo and the trackers:enable syntax but
+-- there is already a lot of code around using the singular tracker
+
+-- we could make this into a module
+
+function setters.new(name)
+ local t
+ t = {
+ data = { },
+ name = name,
+ enable = function(...) setters.enable (t,...) end,
+ disable = function(...) setters.disable (t,...) end,
+ register = function(...) setters.register(t,...) end,
+ list = function(...) setters.list (t,...) end,
+ show = function(...) setters.show (t,...) end,
+ }
+ setters.data[name] = t
+ return t
+end
+
+trackers = setters.new("trackers")
+directives = setters.new("directives")
+experiments = setters.new("experiments")
+
+-- nice trick: we overload two of the directives related functions with variants that
+-- do tracing (itself using a tracker) .. proof of concept
+
+local trace_directives = false local trace_directives = false trackers.register("system.directives", function(v) trace_directives = v end)
+local trace_experiments = false local trace_experiments = false trackers.register("system.experiments", function(v) trace_experiments = v end)
+
+local e = directives.enable
+local d = directives.disable
+
+function directives.enable(...)
+ commands.writestatus("directives","enabling: %s",concat({...}," "))
+ e(...)
+end
+
+function directives.disable(...)
+ commands.writestatus("directives","disabling: %s",concat({...}," "))
+ d(...)
+end
+
+local e = experiments.enable
+local d = experiments.disable
+
+function experiments.enable(...)
+ commands.writestatus("experiments","enabling: %s",concat({...}," "))
+ e(...)
+end
+
+function experiments.disable(...)
+ commands.writestatus("experiments","disabling: %s",concat({...}," "))
+ d(...)
+end
+
+-- a useful example
+
+directives.register("system.nostatistics", function(v)
+ statistics.enable = not v
+end)
+
+
end -- of closure
@@ -2859,6 +3900,12 @@ if not modules then modules = { } end modules ['lxml-tab'] = {
license = "see context related readme files"
}
+-- this module needs a cleanup: check latest lpeg, passing args, (sub)grammar, etc etc
+-- stripping spaces from e.g. cont-en.xml saves .2 sec runtime so it's not worth the
+-- trouble
+
+local trace_entities = false trackers.register("xml.entities", function(v) trace_entities = v end)
+
--[[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
@@ -2866,18 +3913,6 @@ parent access; a first version used different trickery but was less optimized to
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>
@@ -2888,26 +3923,11 @@ xml = xml or { }
--~ local xml = xml
local concat, remove, insert = table.concat, table.remove, table.insert
-local type, next, setmetatable = type, next, setmetatable
-local format, lower, find = string.format, string.lower, string.find
-
---[[ldx--
-<p>This module can be used stand alone but also inside <l n='mkiv'/> in
-which case it hooks into the tracker code. Therefore we provide a few
-functions that set the tracers.</p>
---ldx]]--
-
-local trace_remap = false
-
-if trackers then
- trackers.register("xml.remap", function(v) trace_remap = v end)
-end
-
-function xml.settrace(str,value)
- if str == "remap" then
- trace_remap = value or false
- end
-end
+local type, next, setmetatable, getmetatable, tonumber = type, next, setmetatable, getmetatable, tonumber
+local format, lower, find, match, gsub = string.format, string.lower, string.find, string.match, string.gsub
+local utfchar = unicode.utf8.char
+local lpegmatch = lpeg.match
+local P, S, R, C, V, C, Cs = lpeg.P, lpeg.S, lpeg.R, lpeg.C, lpeg.V, lpeg.C, lpeg.Cs
--[[ldx--
<p>First a hack to enable namespace resolving. A namespace is characterized by
@@ -2919,7 +3939,7 @@ much cleaner.</p>
xml.xmlns = xml.xmlns or { }
-local check = lpeg.P(false)
+local check = P(false)
local parse = check
--[[ldx--
@@ -2932,8 +3952,8 @@ xml.registerns("mml","mathml")
--ldx]]--
function xml.registerns(namespace, pattern) -- pattern can be an lpeg
- check = check + lpeg.C(lpeg.P(lower(pattern))) / namespace
- parse = lpeg.P { lpeg.P(check) + 1 * lpeg.V(1) }
+ check = check + C(P(lower(pattern))) / namespace
+ parse = P { P(check) + 1 * V(1) }
end
--[[ldx--
@@ -2947,7 +3967,7 @@ xml.checkns("m","http://www.w3.org/mathml")
--ldx]]--
function xml.checkns(namespace,url)
- local ns = parse:match(lower(url))
+ local ns = lpegmatch(parse,lower(url))
if ns and namespace ~= ns then
xml.xmlns[namespace] = ns
end
@@ -2965,7 +3985,7 @@ This returns <t>mml</t>.
--ldx]]--
function xml.resolvens(url)
- return parse:match(lower(url)) or ""
+ return lpegmatch(parse,lower(url)) or ""
end
--[[ldx--
@@ -3004,27 +4024,36 @@ local x = xml.convert(somestring)
<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
+<p>Valid entities are:</p>
+
+<typing>
+<!ENTITY xxxx SYSTEM "yyyy" NDATA zzzz>
+<!ENTITY xxxx PUBLIC "yyyy" >
+<!ENTITY xxxx "yyyy" >
+</typing>
+--ldx]]--
-- not just one big nested table capture (lpeg overflow)
local nsremap, resolvens = xml.xmlns, xml.resolvens
-local stack, top, dt, at, xmlns, errorstr, entities = {}, {}, {}, {}, {}, nil, {}
+local stack, top, dt, at, xmlns, errorstr, entities = { }, { }, { }, { }, { }, nil, { }
+local strip, cleanup, utfize, resolve, resolve_predefined, unify_predefined = false, false, false, false, false, false
+local dcache, hcache, acache = { }, { }, { }
-local mt = { __tostring = xml.text }
+local mt = { }
-function xml.check_error(top,toclose)
- return ""
+function initialize_mt(root)
+ mt = { __index = root } -- will be redefined later
end
-local strip = false
-local cleanup = false
+function xml.setproperty(root,k,v)
+ getmetatable(root).__index[k] = v
+end
-function xml.set_text_cleanup(fnc)
- cleanup = fnc
+function xml.check_error(top,toclose)
+ return ""
end
local function add_attribute(namespace,tag,value)
@@ -3034,12 +4063,31 @@ local function add_attribute(namespace,tag,value)
if tag == "xmlns" then
xmlns[#xmlns+1] = resolvens(value)
at[tag] = value
+ elseif namespace == "" then
+ at[tag] = value
elseif namespace == "xmlns" then
xml.checkns(tag,value)
at["xmlns:" .. tag] = value
else
- at[tag] = value
+ -- for the moment this way:
+ at[namespace .. ":" .. tag] = value
+ 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)
+ if at.xmlns then
+ remove(xmlns)
end
+ at = { }
end
local function add_begin(spacing, namespace, tag)
@@ -3067,28 +4115,12 @@ local function add_end(spacing, namespace, tag)
end
dt = top.dt
dt[#dt+1] = toclose
- dt[0] = top
+ -- dt[0] = top -- nasty circular reference when serializing table
if toclose.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)
- if at.xmlns then
- remove(xmlns)
- end
- at = { }
-end
-
local function add_text(text)
if cleanup and #text > 0 then
dt[#dt+1] = cleanup(text)
@@ -3104,7 +4136,7 @@ local function add_special(what, spacing, text)
if strip and (what == "@cm@" or what == "@dt@") then
-- forget it
else
- dt[#dt+1] = { special=true, ns="", tg=what, dt={text} }
+ dt[#dt+1] = { special=true, ns="", tg=what, dt={ text } }
end
end
@@ -3112,7 +4144,199 @@ local function set_message(txt)
errorstr = "garbage at the end of the file: " .. gsub(txt,"([ \n\r\t]*)","")
end
-local P, S, R, C, V = lpeg.P, lpeg.S, lpeg.R, lpeg.C, lpeg.V
+local reported_attribute_errors = { }
+
+local function attribute_value_error(str)
+ if not reported_attribute_errors[str] then
+ logs.report("xml","invalid attribute value: %q",str)
+ reported_attribute_errors[str] = true
+ at._error_ = str
+ end
+ return str
+end
+local function attribute_specification_error(str)
+ if not reported_attribute_errors[str] then
+ logs.report("xml","invalid attribute specification: %q",str)
+ reported_attribute_errors[str] = true
+ at._error_ = str
+ end
+ return str
+end
+
+function xml.unknown_dec_entity_format(str) return (str == "" and "&error;") or format("&%s;",str) end
+function xml.unknown_hex_entity_format(str) return format("&#x%s;",str) end
+function xml.unknown_any_entity_format(str) return format("&#x%s;",str) end
+
+local function fromhex(s)
+ local n = tonumber(s,16)
+ if n then
+ return utfchar(n)
+ else
+ return format("h:%s",s), true
+ end
+end
+
+local function fromdec(s)
+ local n = tonumber(s)
+ if n then
+ return utfchar(n)
+ else
+ return format("d:%s",s), true
+ end
+end
+
+-- one level expansion (simple case), no checking done
+
+local rest = (1-P(";"))^0
+local many = P(1)^0
+
+local parsedentity =
+ P("&") * (P("#x")*(rest/fromhex) + P("#")*(rest/fromdec)) * P(";") * P(-1) +
+ (P("#x")*(many/fromhex) + P("#")*(many/fromdec))
+
+-- parsing in the xml file
+
+local predefined_unified = {
+ [38] = "&amp;",
+ [42] = "&quot;",
+ [47] = "&apos;",
+ [74] = "&lt;",
+ [76] = "&gr;",
+}
+
+local predefined_simplified = {
+ [38] = "&", amp = "&",
+ [42] = '"', quot = '"',
+ [47] = "'", apos = "'",
+ [74] = "<", lt = "<",
+ [76] = ">", gt = ">",
+}
+
+local function handle_hex_entity(str)
+ local h = hcache[str]
+ if not h then
+ local n = tonumber(str,16)
+ h = unify_predefined and predefined_unified[n]
+ if h then
+ if trace_entities then
+ logs.report("xml","utfize, converting hex entity &#x%s; into %s",str,h)
+ end
+ elseif utfize then
+ h = (n and utfchar(n)) or xml.unknown_hex_entity_format(str) or ""
+ if not n then
+ logs.report("xml","utfize, ignoring hex entity &#x%s;",str)
+ elseif trace_entities then
+ logs.report("xml","utfize, converting hex entity &#x%s; into %s",str,h)
+ end
+ else
+ if trace_entities then
+ logs.report("xml","found entity &#x%s;",str)
+ end
+ h = "&#x" .. str .. ";"
+ end
+ hcache[str] = h
+ end
+ return h
+end
+
+local function handle_dec_entity(str)
+ local d = dcache[str]
+ if not d then
+ local n = tonumber(str)
+ d = unify_predefined and predefined_unified[n]
+ if d then
+ if trace_entities then
+ logs.report("xml","utfize, converting dec entity &#%s; into %s",str,d)
+ end
+ elseif utfize then
+ d = (n and utfchar(n)) or xml.unknown_dec_entity_format(str) or ""
+ if not n then
+ logs.report("xml","utfize, ignoring dec entity &#%s;",str)
+ elseif trace_entities then
+ logs.report("xml","utfize, converting dec entity &#%s; into %s",str,h)
+ end
+ else
+ if trace_entities then
+ logs.report("xml","found entity &#%s;",str)
+ end
+ d = "&#" .. str .. ";"
+ end
+ dcache[str] = d
+ end
+ return d
+end
+
+xml.parsedentitylpeg = parsedentity
+
+local function handle_any_entity(str)
+ if resolve then
+ local a = acache[str] -- per instance ! todo
+ if not a then
+ a = resolve_predefined and predefined_simplified[str]
+ if a then
+ -- one of the predefined
+ elseif type(resolve) == "function" then
+ a = resolve(str) or entities[str]
+ else
+ a = entities[str]
+ end
+ if a then
+ if trace_entities then
+ logs.report("xml","resolved entity &%s; -> %s (internal)",str,a)
+ end
+ a = lpegmatch(parsedentity,a) or a
+ else
+ if xml.unknown_any_entity_format then
+ a = xml.unknown_any_entity_format(str) or ""
+ end
+ if a then
+ if trace_entities then
+ logs.report("xml","resolved entity &%s; -> %s (external)",str,a)
+ end
+ else
+ if trace_entities then
+ logs.report("xml","keeping entity &%s;",str)
+ end
+ if str == "" then
+ a = "&error;"
+ else
+ a = "&" .. str .. ";"
+ end
+ end
+ end
+ acache[str] = a
+ elseif trace_entities then
+ if not acache[str] then
+ logs.report("xml","converting entity &%s; into %s",str,a)
+ acache[str] = a
+ end
+ end
+ return a
+ else
+ local a = acache[str]
+ if not a then
+ if trace_entities then
+ logs.report("xml","found entity &%s;",str)
+ end
+ a = resolve_predefined and predefined_simplified[str]
+ if a then
+ -- one of the predefined
+ acache[str] = a
+ elseif str == "" then
+ a = "&error;"
+ acache[str] = a
+ else
+ a = "&" .. str .. ";"
+ acache[str] = a
+ end
+ end
+ return a
+ end
+end
+
+local function handle_end_entity(chr)
+ logs.report("xml","error in entity, %q found instead of ';'",chr)
+end
local space = S(' \r\n\t')
local open = P('<')
@@ -3122,24 +4346,50 @@ local dquote = S('"')
local equal = P('=')
local slash = P('/')
local colon = P(':')
+local semicolon = P(';')
+local ampersand = 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 = lpeg.patterns.utfbom -- no capture
+local spacing = C(space^0)
-local utfbom = P('\000\000\254\255') + P('\255\254\000\000') +
- P('\255\254') + P('\254\255') + P('\239\187\191') -- no capture
+----- entitycontent = (1-open-semicolon)^0
+local anyentitycontent = (1-open-semicolon-space-close)^0
+local hexentitycontent = R("AF","af","09")^0
+local decentitycontent = R("09")^0
+local parsedentity = P("#")/"" * (
+ P("x")/"" * (hexentitycontent/handle_hex_entity) +
+ (decentitycontent/handle_dec_entity)
+ ) + (anyentitycontent/handle_any_entity)
+local entity = ampersand/"" * parsedentity * ( (semicolon/"") + #(P(1)/handle_end_entity))
+
+local text_unparsed = C((1-open)^1)
+local text_parsed = Cs(((1-open-ampersand)^1 + entity)^1)
-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
+----- value = (squote * C((1 - squote)^0) * squote) + (dquote * C((1 - dquote)^0) * dquote) -- ampersand and < also invalid in value
+local value = (squote * Cs((entity + (1 - squote))^0) * squote) + (dquote * Cs((entity + (1 - dquote))^0) * dquote) -- ampersand and < also invalid in value
+
+local endofattributes = slash * close + close -- recovery of flacky html
+local whatever = space * name * optionalspace * equal
+local wrongvalue = C(P(1-whatever-close)^1 + P(1-close)^1) / attribute_value_error
+----- wrongvalue = C(P(1-whatever-endofattributes)^1 + P(1-endofattributes)^1) / attribute_value_error
+----- wrongvalue = C(P(1-space-endofattributes)^1) / attribute_value_error
+local wrongvalue = Cs(P(entity + (1-space-endofattributes))^1) / attribute_value_error
-local text = justtext / add_text
+local attributevalue = value + wrongvalue
+
+local attribute = (somespace * name * optionalspace * equal * optionalspace * attributevalue) / add_attribute
+----- attributes = (attribute)^0
+
+local attributes = (attribute + somespace^-1 * (((1-endofattributes)^1)/attribute_specification_error))^0
+
+local parsedtext = text_parsed / add_text
+local unparsedtext = text_unparsed / 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
@@ -3157,19 +4407,27 @@ local someinstruction = C((1 - endinstruction)^0)
local somecomment = C((1 - endcomment )^0)
local somecdata = C((1 - endcdata )^0)
-local function entity(k,v) entities[k] = v end
+local function normalentity(k,v ) entities[k] = v end
+local function systementity(k,v,n) entities[k] = v end
+local function publicentity(k,v,n) 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 doctypename = C((1-somespace-close)^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 normalentitytype = (doctypename * somespace * value)/normalentity
+local publicentitytype = (doctypename * somespace * P("PUBLIC") * somespace * value)/publicentity
+local systementitytype = (doctypename * somespace * P("SYSTEM") * somespace * value * somespace * P("NDATA") * somespace * doctypename)/systementity
+local entitydoctype = optionalspace * P("<!ENTITY") * somespace * (systementitytype + publicentitytype + normalentitytype) * optionalspace * close
+
+local doctypeset = beginset * optionalspace * P(elementdoctype + entitydoctype + space)^0 * optionalspace * endset
+local definitiondoctype= doctypename * somespace * doctypeset
+local publicdoctype = doctypename * somespace * P("PUBLIC") * somespace * value * somespace * value * somespace * doctypeset
+local systemdoctype = doctypename * somespace * P("SYSTEM") * somespace * value * somespace * doctypeset
+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
@@ -3179,60 +4437,116 @@ local doctype = (spacing * begindoctype * somedoctype * enddoct
-- 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 instruction = (Cc("@pi@") * spacing * begininstruction * someinstruction * endinstruction) / add_special
+-- local comment = (Cc("@cm@") * spacing * begincomment * somecomment * endcomment ) / add_special
+-- local cdata = (Cc("@cd@") * spacing * begincdata * somecdata * endcdata ) / add_special
+-- local doctype = (Cc("@dt@") * spacing * begindoctype * somedoctype * enddoctype ) / add_special
-local trailer = space^0 * (justtext/set_message)^0
+local trailer = space^0 * (text_unparsed/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",
+local grammar_parsed_text = 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,
+ children = parsedtext + V("parent") + emptyelement + comment + cdata + instruction,
}
--- todo: xml.new + properties like entities and strip and such (store in root)
+local grammar_unparsed_text = P { "preamble",
+ preamble = utfbom^0 * instruction^0 * (doctype + comment + instruction)^0 * V("parent") * trailer,
+ parent = beginelement * V("children")^0 * endelement,
+ children = unparsedtext + V("parent") + emptyelement + comment + cdata + instruction,
+}
-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 {}
+-- maybe we will add settinsg to result as well
+
+local function xmlconvert(data, settings)
+ settings = settings or { } -- no_root strip_cm_and_dt given_entities parent_root error_handler
+ strip = settings.strip_cm_and_dt
+ utfize = settings.utfize_entities
+ resolve = settings.resolve_entities
+ resolve_predefined = settings.resolve_predefined_entities -- in case we have escaped entities
+ unify_predefined = settings.unify_predefined_entities -- &#038; -> &amp;
+ cleanup = settings.text_cleanup
+ stack, top, at, xmlns, errorstr, result, entities = { }, { }, { }, { }, nil, nil, settings.entities or { }
+ acache, hcache, dcache = { }, { }, { } -- not stored
+ reported_attribute_errors = { }
+ if settings.parent_root then
+ mt = getmetatable(settings.parent_root)
+ else
+ initialize_mt(top)
+ end
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"
+ elseif utfize or resolve then
+ if lpegmatch(grammar_parsed_text,data) then
+ errorstr = ""
+ else
+ errorstr = "invalid xml file - parsed text"
+ end
+ elseif type(data) == "string" then
+ if lpegmatch(grammar_unparsed_text,data) then
+ errorstr = ""
+ else
+ errorstr = "invalid xml file - unparsed text"
+ end
else
- errorstr = ""
+ errorstr = "invalid xml file - no text at all"
end
if errorstr and errorstr ~= "" then
- result = { dt = { { ns = "", tg = "error", dt = { errorstr }, at={}, er = true } }, error = true }
+ result = { dt = { { ns = "", tg = "error", dt = { errorstr }, at={ }, er = true } } }
setmetatable(stack, mt)
- if xml.error_handler then xml.error_handler("load",errorstr) end
+ local error_handler = settings.error_handler
+ if error_handler == false then
+ -- no error message
+ else
+ error_handler = error_handler or xml.error_handler
+ if error_handler then
+ xml.error_handler("load",errorstr)
+ end
+ end
else
result = stack[1]
end
- if not no_root then
- result = { special = true, ns = "", tg = '@rt@', dt = result.dt, at={}, entities = entities }
+ if not settings.no_root then
+ result = { special = true, ns = "", tg = '@rt@', dt = result.dt, at={ }, entities = entities, settings = settings }
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
+v.__p__ = result -- new, experiment, else we cannot go back to settings, we need to test this !
break
end
end
end
+ if errorstr and errorstr ~= "" then
+ result.error = true
+ end
return result
end
+xml.convert = xmlconvert
+
+function xml.inheritedconvert(data,xmldata)
+ local settings = xmldata.settings
+ settings.parent_root = xmldata -- to be tested
+ -- settings.no_root = true
+ local xc = xmlconvert(data,settings)
+ -- xc.settings = nil
+ -- xc.entities = nil
+ -- xc.special = nil
+ -- xc.ri = nil
+ -- print(xc.tg)
+ return xc
+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>
@@ -3243,7 +4557,7 @@ function xml.is_valid(root)
end
function xml.package(tag,attributes,data)
- local ns, tg = tag:match("^(.-):?([^:]+)$")
+ local ns, tg = match(tag,"^(.-):?([^:]+)$")
local t = { ns = ns, tg = tg, dt = data or "", at = attributes or {} }
setmetatable(t, mt)
return t
@@ -3261,21 +4575,19 @@ the whole file first. The function accepts a string representing
a filename or a file handle.</p>
--ldx]]--
-function xml.load(filename)
+function xml.load(filename,settings)
+ local data = ""
if type(filename) == "string" then
+ -- local data = io.loaddata(filename) - -todo: check type in io.loaddata
local f = io.open(filename,'r')
if f then
- local root = xml.convert(f:read("*all"))
+ data = 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("")
+ data = filename:read("*all")
end
+ return xmlconvert(data,settings)
end
--[[ldx--
@@ -3283,9 +4595,11 @@ end
valid trees, which is what the next function does.</p>
--ldx]]--
+local no_root = { no_root = true }
+
function xml.toxml(data)
if type(data) == "string" then
- local root = { xml.convert(data,true) }
+ local root = { xmlconvert(data,no_root) }
return (#root > 1 and root) or root[1]
else
return data
@@ -3305,7 +4619,7 @@ local function copy(old,tables)
if not tables[old] then
tables[old] = new
end
- for k,v in pairs(old) do
+ for k,v in next, old do
new[k] = (type(v) == "table" and (tables[v] or copy(v, tables))) or v
end
local mt = getmetatable(old)
@@ -3330,217 +4644,304 @@ alternative.</p>
-- 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
- local etg, edt = e.tg, e.dt
- local spc = specialconverter and specialconverter[etg]
- if spc then
- 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
+function xml.checkbom(root) -- can be made faster
+ if root.ri then
+ local dt, found = root.dt, false
+ for k=1,#dt do
+ local v = dt[k]
+ if type(v) == "table" and v.special and v.tg == "@pi@" and find(v.dt[1],"xml.*version=") then
+ found = true
+ break
end
end
+ if not found then
+ insert(dt, 1, { special=true, ns="", tg="@pi@", dt = { "xml version='1.0' standalone='yes'"} } )
+ insert(dt, 2, "\n" )
+ 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)
+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]]--
+
+-- new experimental reorganized serialize
+
+local function verbose_element(e,handlers)
+ local handle = handlers.handle
+ local serialize = handlers.serialize
+ local ens, etg, eat, edt, ern = e.ns, e.tg, e.at, e.dt, e.rn
+ local ats = eat and next(eat) and { }
+ if ats then
+ for k,v in next, eat do
+ ats[#ats+1] = format('%s=%q',k,v)
+ end
+ end
+ if ern and trace_remap and ern ~= ens then
+ ens = ern
+ end
+ if ens ~= "" then
+ if edt and #edt > 0 then
+ if ats then
+ handle("<",ens,":",etg," ",concat(ats," "),">")
+ else
+ handle("<",ens,":",etg,">")
+ end
+ for i=1,#edt do
+ local e = edt[i]
+ if type(e) == "string" then
+ handle(e)
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)
+ serialize(e,handlers)
+ end
end
+ handle("</",ens,":",etg,">")
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 next, eat do
- ats[#ats+1] = format('%s=%q',k,attributeconverter(v))
- end
- else
- for k,v in next, eat do
- ats[#ats+1] = format('%s=%q',k,v)
- end
- end
+ handle("<",ens,":",etg," ",concat(ats," "),"/>")
+ else
+ handle("<",ens,":",etg,"/>")
end
- if ern and trace_remap and ern ~= ens then
- ens = ern
+ end
+ else
+ if edt and #edt > 0 then
+ if ats then
+ handle("<",etg," ",concat(ats," "),">")
+ else
+ handle("<",etg,">")
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 .. ">")
+ for i=1,#edt do
+ local ei = edt[i]
+ if type(ei) == "string" then
+ handle(ei)
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
+ serialize(ei,handlers)
end
+ end
+ handle("</",etg,">")
+ else
+ if ats then
+ handle("<",etg," ",concat(ats," "),"/>")
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
- local ei = edt[i]
- if type(ei) == "string" then
- if textconverter then
- handle(textconverter(ei))
- else
- handle(ei)
- end
- else
- serialize(ei,handle,textconverter,attributeconverter,specialconverter,nocommands)
- end
- 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
+ handle("<",etg,"/>")
end
end
- elseif type(e) == "string" then
- if textconverter then
- handle(textconverter(e))
+ end
+end
+
+local function verbose_pi(e,handlers)
+ handlers.handle("<?",e.dt[1],"?>")
+end
+
+local function verbose_comment(e,handlers)
+ handlers.handle("<!--",e.dt[1],"-->")
+end
+
+local function verbose_cdata(e,handlers)
+ handlers.handle("<![CDATA[", e.dt[1],"]]>")
+end
+
+local function verbose_doctype(e,handlers)
+ handlers.handle("<!DOCTYPE ",e.dt[1],">")
+end
+
+local function verbose_root(e,handlers)
+ handlers.serialize(e.dt,handlers)
+end
+
+local function verbose_text(e,handlers)
+ handlers.handle(e)
+end
+
+local function verbose_document(e,handlers)
+ local serialize = handlers.serialize
+ local functions = handlers.functions
+ for i=1,#e do
+ local ei = e[i]
+ if type(ei) == "string" then
+ functions["@tx@"](ei,handlers)
else
- handle(e)
+ serialize(ei,handlers)
end
- else
- for i=1,#e do
- local ei = e[i]
- if type(ei) == "string" then
- if textconverter then
- handle(textconverter(ei))
- else
- handle(ei)
- end
- else
- serialize(ei,handle,textconverter,attributeconverter,specialconverter,nocommands)
- end
+ end
+end
+
+local function serialize(e,handlers,...)
+ local initialize = handlers.initialize
+ local finalize = handlers.finalize
+ local functions = handlers.functions
+ if initialize then
+ local state = initialize(...)
+ if not state == true then
+ return state
end
end
+ local etg = e.tg
+ if etg then
+ (functions[etg] or functions["@el@"])(e,handlers)
+ -- elseif type(e) == "string" then
+ -- functions["@tx@"](e,handlers)
+ else
+ functions["@dc@"](e,handlers)
+ end
+ if finalize then
+ return finalize()
+ end
end
-xml.serialize = serialize
+local function xserialize(e,handlers)
+ local functions = handlers.functions
+ local etg = e.tg
+ if etg then
+ (functions[etg] or functions["@el@"])(e,handlers)
+ -- elseif type(e) == "string" then
+ -- functions["@tx@"](e,handlers)
+ else
+ functions["@dc@"](e,handlers)
+ end
+end
-function xml.checkbom(root) -- can be made faster
- if root.ri then
- local dt, found = root.dt, false
- for k=1,#dt do
- local v = dt[k]
- if type(v) == "table" and v.special and v.tg == "@pi" and find(v.dt,"xml.*version=") then
- found = true
- break
+local handlers = { }
+
+local function newhandlers(settings)
+ local t = table.copy(handlers.verbose or { }) -- merge
+ if settings then
+ for k,v in next, settings do
+ if type(v) == "table" then
+ tk = t[k] if not tk then tk = { } t[k] = tk end
+ for kk,vv in next, v do
+ tk[kk] = vv
+ end
+ else
+ t[k] = v
end
end
- if not found then
- insert(dt, 1, { special=true, ns="", tg="@pi@", dt = { "xml version='1.0' standalone='yes'"} } )
- insert(dt, 2, "\n" )
+ if settings.name then
+ handlers[settings.name] = t
end
end
+ return t
end
+local nofunction = function() end
+
+function xml.sethandlersfunction(handler,name,fnc)
+ handler.functions[name] = fnc or nofunction
+end
+
+function xml.gethandlersfunction(handler,name)
+ return handler.functions[name]
+end
+
+function xml.gethandlers(name)
+ return handlers[name]
+end
+
+newhandlers {
+ name = "verbose",
+ initialize = false, -- faster than nil and mt lookup
+ finalize = false, -- faster than nil and mt lookup
+ serialize = xserialize,
+ handle = print,
+ functions = {
+ ["@dc@"] = verbose_document,
+ ["@dt@"] = verbose_doctype,
+ ["@rt@"] = verbose_root,
+ ["@el@"] = verbose_element,
+ ["@pi@"] = verbose_pi,
+ ["@cm@"] = verbose_comment,
+ ["@cd@"] = verbose_cdata,
+ ["@tx@"] = verbose_text,
+ }
+}
+
--[[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>
+<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>Beware, these were timing with the old routine but measurements will not be that
+much different I guess.</p>
--ldx]]--
-function xml.tostring(root) -- 25% overhead due to collecting
+-- maybe this will move to lxml-xml
+
+local result
+
+local xmlfilehandler = newhandlers {
+ name = "file",
+ initialize = function(name) result = io.open(name,"wb") return result end,
+ finalize = function() result:close() return true end,
+ handle = function(...) result:write(...) end,
+}
+
+-- no checking on writeability here but not faster either
+--
+-- local xmlfilehandler = newhandlers {
+-- initialize = function(name) io.output(name,"wb") return true end,
+-- finalize = function() io.close() return true end,
+-- handle = io.write,
+-- }
+
+
+function xml.save(root,name)
+ serialize(root,xmlfilehandler,name)
+end
+
+local result
+
+local xmlstringhandler = newhandlers {
+ name = "string",
+ initialize = function() result = { } return result end,
+ finalize = function() return concat(result) end,
+ handle = function(...) result[#result+1] = concat { ... } end
+}
+
+local function xmltostring(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) -- brrr, slow (direct printing is faster)
- return concat(result,"")
+ else -- if next(root) then -- next is faster than type (and >0 test)
+ return serialize(root,xmlstringhandler) or ""
end
end
return ""
end
+local function xmltext(root) -- inline
+ return (root and xmltostring(root)) or ""
+end
+
+function initialize_mt(root)
+ mt = { __tostring = xmltext, __index = root }
+end
+
+xml.defaulthandlers = handlers
+xml.newhandlers = newhandlers
+xml.serialize = serialize
+xml.tostring = xmltostring
+
--[[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)
+local function xmlstring(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)
+ xmlstring(edt[i],handle)
end
end
else
@@ -3548,54 +4949,52 @@ function xml.string(e,handle)
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>
+xml.string = xmlstring
-<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--
+<p>A few helpers:</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()
+--~ xmlsetproperty(root,"settings",settings)
+
+function xml.settings(e)
+ while e do
+ local s = e.settings
+ if s then
+ return s
+ else
+ e = e.__p__
+ end
end
+ return nil
end
---[[ldx--
-<p>A few helpers:</p>
---ldx]]--
-
-function xml.body(root)
- return (root.ri and root.dt[root.ri]) or root
+function xml.root(e)
+ local r = e
+ while e do
+ e = e.__p__
+ if e then
+ r = e
+ end
+ end
+ return r
end
-function xml.text(root)
- return (root and xml.tostring(root)) or ""
+function xml.parent(root)
+ return root.__p__
end
-function xml.content(root) -- bugged
- return (root and root.dt and xml.tostring(root.dt)) or ""
+function xml.body(root)
+ return (root.ri and root.dt[root.ri]) or root -- not ok yet
end
-function xml.isempty(root, pattern)
- if pattern == "" or pattern == "*" then
- pattern = nil
- end
- if pattern then
- -- todo
- return false
+function xml.name(root)
+ if not root then
+ return ""
+ elseif root.ns == "" then
+ return root.tg
else
- return not root or not root.dt or #root.dt == 0 or root.dt == ""
+ return root.ns .. ":" .. root.tg
end
end
@@ -3603,18 +5002,15 @@ end
<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 ""
+function xml.erase(dt,k)
+ if dt then
+ if k then
+ dt[k] = ""
+ else for k=1,#dt do
+ dt[1] = { "" }
+ end end
end
end
@@ -3635,6 +5031,42 @@ function xml.assign(dt,k,root)
end
end
+-- the following helpers may move
+
+--[[ldx--
+<p>The next helper assigns a tree (or string). Usage:</p>
+<typing>
+xml.tocdata(e)
+xml.tocdata(e,"error")
+</typing>
+--ldx]]--
+
+function xml.tocdata(e,wrapper)
+ local whatever = xmltostring(e.dt)
+ if wrapper then
+ whatever = format("<%s>%s</%s>",wrapper,whatever,wrapper)
+ end
+ local t = { special = true, ns = "", tg = "@cd@", at = {}, rn = "", dt = { whatever }, __p__ = e }
+ setmetatable(t,getmetatable(e))
+ e.dt = { t }
+end
+
+function xml.makestandalone(root)
+ if root.ri then
+ local dt = root.dt
+ for k=1,#dt do
+ local v = dt[k]
+ if type(v) == "table" and v.special and v.tg == "@pi@" then
+ local txt = v.dt[1]
+ if find(txt,"xml.*version=") then
+ v.dt[1] = txt .. " standalone='yes'"
+ break
+ end
+ end
+ end
+ end
+end
+
end -- of closure
@@ -3648,1420 +5080,1285 @@ if not modules then modules = { } end modules ['lxml-pth'] = {
license = "see context related readme files"
}
+-- e.ni is only valid after a filter run
+
local concat, remove, insert = table.concat, table.remove, table.insert
local type, next, tonumber, tostring, setmetatable, loadstring = type, next, tonumber, tostring, setmetatable, loadstring
-local format, lower, gmatch, gsub, find = string.format, string.lower, string.gmatch, string.gsub, string.find
+local format, upper, lower, gmatch, gsub, find, rep = string.format, string.upper, string.lower, string.gmatch, string.gsub, string.find, string.rep
+local lpegmatch = lpeg.match
+
+-- beware, this is not xpath ... e.g. position is different (currently) and
+-- we have reverse-sibling as reversed preceding sibling
--[[ldx--
<p>This module can be used stand alone but also inside <l n='mkiv'/> in
which case it hooks into the tracker code. Therefore we provide a few
functions that set the tracers. Here we overload a previously defined
function.</p>
+<p>If I can get in the mood I will make a variant that is XSLT compliant
+but I wonder if it makes sense.</P>
--ldx]]--
-local trace_lpath = false
-
-if trackers then
- trackers.register("xml.lpath", function(v) trace_lpath = v end)
-end
+--[[ldx--
+<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>
-local settrace = xml.settrace -- lxml-tab
+<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>
+--ldx]]--
-function xml.settrace(str,value)
- if str == "lpath" then
- trace_lpath = value or false
- else
- settrace(str,value) -- lxml-tab
- end
-end
+local trace_lpath = false if trackers then trackers.register("xml.path", function(v) trace_lpath = v end) end
+local trace_lparse = false if trackers then trackers.register("xml.parse", function(v) trace_lparse = v end) end
+local trace_lprofile = false if trackers then trackers.register("xml.profile", function(v) trace_lpath = v trace_lparse = v trace_lprofile = v end) end
--[[ldx--
-<p>We've now arrived at an intersting part: accessing the tree using a subset
+<p>We've now arrived at an interesting 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]]--
-local lpathcalls = 0 -- statistics
-local lpathcached = 0 -- statistics
+local lpathcalls = 0 function xml.lpathcalls () return lpathcalls end
+local lpathcached = 0 function xml.lpathcached() return lpathcached end
-xml.functions = xml.functions or { }
-xml.expressions = xml.expressions or { }
+xml.functions = xml.functions or { } -- internal
+xml.expressions = xml.expressions or { } -- in expressions
+xml.finalizers = xml.finalizers or { } -- fast do-with ... (with return value other than collection)
+xml.specialhandler = xml.specialhandler or { }
local functions = xml.functions
local expressions = xml.expressions
+local finalizers = xml.finalizers
-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",
-}
-
--- a rather dumb lpeg
+finalizers.xml = finalizers.xml or { }
+finalizers.tex = finalizers.tex or { }
-local P, S, R, C, V, Cc = lpeg.P, lpeg.S, lpeg.R, lpeg.C, lpeg.V, lpeg.Cc
+local function fallback (t, name)
+ local fn = finalizers[name]
+ if fn then
+ t[name] = fn
+ else
+ logs.report("xml","unknown sub finalizer '%s'",tostring(name))
+ fn = function() end
+ end
+ return fn
+end
--- instead of using functions we just parse a few names which saves a call
--- later on
+setmetatable(finalizers.xml, { __index = fallback })
+setmetatable(finalizers.tex, { __index = fallback })
-local lp_position = P("position()") / "ps"
-local lp_index = P("index()") / "id"
-local lp_text = P("text()") / "tx"
-local lp_name = P("name()") / "(ns~='' and ns..':'..tg)" -- "((rt.ns~='' and rt.ns..':'..rt.tg) or '')"
-local lp_tag = P("tag()") / "tg" -- (rt.tg or '')
-local lp_ns = P("ns()") / "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 '')")
+xml.defaultprotocol = "xml"
-local lp_lua_function = C(R("az","AZ","--","__")^1 * (P(".") * R("az","AZ","--","__")^1)^1) * P("(") / function(t) -- todo: better . handling
- return t .. "("
-end
+-- as xsl does not follow xpath completely here we will also
+-- be more liberal especially with regards to the use of | and
+-- the rootpath:
+--
+-- test : all 'test' under current
+-- /test : 'test' relative to current
+-- a|b|c : set of names
+-- (a|b|c) : idem
+-- ! : not
+--
+-- after all, we're not doing transformations but filtering. in
+-- addition we provide filter functions (last bit)
+--
+-- todo: optimizer
+--
+-- .. : parent
+-- * : all kids
+-- / : anchor here
+-- // : /**/
+-- ** : all in between
+--
+-- so far we had (more practical as we don't transform)
+--
+-- {/test} : kids 'test' under current node
+-- {test} : any kid with tag 'test'
+-- {//test} : same as above
-local lp_function = C(R("az","AZ","--","__")^1) * P("(") / function(t) -- todo: better . handling
- if expressions[t] then
- return "expressions." .. t .. "("
- else
- return "expressions.error("
- end
-end
+-- evaluator (needs to be redone, for the moment copied)
-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) -- lpeg.P{"("*C(((1-S("()"))+V(1))^0)*")"}
+-- todo: apply_axis(list,notable) and collection vs single
--- if we use a dedicated namespace then we don't need to pass rt and k
+local apply_axis = { }
-local lp_special = (C(P("name")+P("text")+P("tag"))) * value / function(t,s)
- if expressions[t] then
- if s then
- return "expressions." .. t .. "(r,k," .. s ..")"
- else
- return "expressions." .. t .. "(r,k)"
+apply_axis['root'] = function(list)
+ local collected = { }
+ for l=1,#list do
+ local ll = list[l]
+ local rt = ll
+ while ll do
+ ll = ll.__p__
+ if ll then
+ rt = ll
+ end
end
- else
- return "expressions.error(" .. t .. ")"
+ collected[#collected+1] = rt
end
+ return collected
end
-local converter = lpeg.Cs ( (
- lp_position +
- lp_index +
- lp_text + lp_name + -- fast one
- lp_special +
- lp_noequal + lp_doequal +
- lp_attribute +
- lp_lua_function +
- lp_function +
-1 )^1 )
-
--- expressions,root,rootdt,k,e,edt,ns,tg,idx,hsh[tg] or 1
+apply_axis['self'] = function(list)
+--~ local collected = { }
+--~ for l=1,#list do
+--~ collected[#collected+1] = list[l]
+--~ end
+--~ return collected
+ return list
+end
-local template = [[
- return function(expressions,r,d,k,e,dt,ns,tg,id,ps)
- local at, tx = e.at or { }, dt[1] or ""
- return %s
+apply_axis['child'] = function(list)
+ local collected = { }
+ for l=1,#list do
+ local ll = list[l]
+ local dt = ll.dt
+ local en = 0
+ for k=1,#dt do
+ local dk = dt[k]
+ if dk.tg then
+ collected[#collected+1] = dk
+ dk.ni = k -- refresh
+ en = en + 1
+ dk.ei = en
+ end
+ end
+ ll.en = en
end
-]]
-
-local function make_expression(str)
- str = converter:match(str)
- return str, loadstring(format(template,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 = 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 + -- brrr, not here !
- 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 +
- many + any +
- crap + empty
-)
-
-local grammar = P { "startup",
- startup = (initial + documentroot + subtreeroot + roottag + docroottag + subroottag)^0 * V("followup"),
- followup = ((slash + parenttag + childtag + selftag)^0 * selector)^1,
-}
+ return collected
+end
-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
- insert(map, 1, { 16 })
+local function collect(list,collected)
+ local dt = list.dt
+ if dt then
+ local en = 0
+ for k=1,#dt do
+ local dk = dt[k]
+ if dk.tg then
+ collected[#collected+1] = dk
+ dk.ni = k -- refresh
+ en = en + 1
+ dk.ei = en
+ collect(dk,collected)
end
- -- print(gsub(table.serialize(map),"[ \n]+"," "))
- return map
end
+ list.en = en
end
end
+apply_axis['descendant'] = function(list)
+ local collected = { }
+ for l=1,#list do
+ collect(list[l],collected)
+ end
+ return collected
+end
-local cache = { }
-
-function xml.lpath(pattern,trace)
- lpathcalls = lpathcalls + 1
- if type(pattern) == "string" then
- local result = cache[pattern]
- if result == nil then -- can be false which is valid -)
- result = compose(pattern)
- cache[pattern] = result
- lpathcached = lpathcached + 1
+local function collect(list,collected)
+ local dt = list.dt
+ if dt then
+ local en = 0
+ for k=1,#dt do
+ local dk = dt[k]
+ if dk.tg then
+ collected[#collected+1] = dk
+ dk.ni = k -- refresh
+ en = en + 1
+ dk.ei = en
+ collect(dk,collected)
+ end
end
- if trace or trace_lpath then
- xml.lshow(result)
+ list.en = en
+ end
+end
+apply_axis['descendant-or-self'] = function(list)
+ local collected = { }
+ for l=1,#list do
+ local ll = list[l]
+ if ll.special ~= true then -- catch double root
+ collected[#collected+1] = ll
end
- return result
- else
- return pattern
+ collect(ll,collected)
end
+ return collected
end
-function xml.cached_patterns()
- return cache
+apply_axis['ancestor'] = function(list)
+ local collected = { }
+ for l=1,#list do
+ local ll = list[l]
+ while ll do
+ ll = ll.__p__
+ if ll then
+ collected[#collected+1] = ll
+ end
+ end
+ end
+ return collected
end
--- we run out of locals (limited to 200)
---
--- local fallbackreport = (texio and texio.write) or io.write
-
-function xml.lshow(pattern,report)
--- report = report or fallbackreport
- report = report or (texio and texio.write) or io.write
- 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=1,#lp do
- local v = lp[k]
- 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]]))
+apply_axis['ancestor-or-self'] = function(list)
+ local collected = { }
+ for l=1,#list do
+ local ll = list[l]
+ collected[#collected+1] = ll
+ while ll do
+ ll = ll.__p__
+ if ll then
+ collected[#collected+1] = ll
end
end
end
+ return collected
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
- local report = (type(t[#t]) == "function" and t[#t]) or (texio and texio.write) or io.write
- 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")
+apply_axis['parent'] = function(list)
+ local collected = { }
+ for l=1,#list do
+ local pl = list[l].__p__
+ if pl then
+ collected[#collected+1] = pl
end
end
+ return collected
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]]--
-
-local functions = xml.functions
-local expressions = xml.expressions
-
-expressions.contains = string.find
-expressions.find = string.find
-expressions.upper = string.upper
-expressions.lower = string.lower
-expressions.number = tonumber
-expressions.boolean = toboolean
-
-expressions.oneof = function(s,...) -- slow
- local t = {...} for i=1,#t do if s == t[i] then return true end end return false
+apply_axis['attribute'] = function(list)
+ return { }
end
-expressions.error = function(str)
- xml.error_handler("unknown function in lpath expression",str or "?")
- return false
+apply_axis['namespace'] = function(list)
+ return { }
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
+apply_axis['following'] = function(list) -- incomplete
+--~ local collected = { }
+--~ for l=1,#list do
+--~ local ll = list[l]
+--~ local p = ll.__p__
+--~ local d = p.dt
+--~ for i=ll.ni+1,#d do
+--~ local di = d[i]
+--~ if type(di) == "table" then
+--~ collected[#collected+1] = di
+--~ break
+--~ end
+--~ end
+--~ end
+--~ return collected
+ return { }
+end
+
+apply_axis['preceding'] = function(list) -- incomplete
+--~ local collected = { }
+--~ for l=1,#list do
+--~ local ll = list[l]
+--~ local p = ll.__p__
+--~ local d = p.dt
+--~ for i=ll.ni-1,1,-1 do
+--~ local di = d[i]
+--~ if type(di) == "table" then
+--~ collected[#collected+1] = di
+--~ break
+--~ end
+--~ end
+--~ end
+--~ return collected
+ return { }
end
-functions.name = function(d,k,n) -- ns + tg
- local found = false
- n = n or 0
- if not k then
- -- not found
- elseif n == 0 then
- local dk = d[k]
- found = dk and (type(dk) == "table") and dk
- elseif n < 0 then
- for i=k-1,1,-1 do
- local di = d[i]
- if type(di) == "table" then
- if n == -1 then
- found = di
- break
- else
- n = n + 1
- end
- end
- end
- else
- for i=k+1,#d,1 do
+apply_axis['following-sibling'] = function(list)
+ local collected = { }
+ for l=1,#list do
+ local ll = list[l]
+ local p = ll.__p__
+ local d = p.dt
+ for i=ll.ni+1,#d do
local di = d[i]
if type(di) == "table" then
- if n == 1 then
- found = di
- break
- else
- n = n - 1
- end
+ collected[#collected+1] = di
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
+ return collected
end
-functions.tag = function(d,k,n) -- only tg
- local found = false
- n = n or 0
- if not k then
- -- not found
- elseif n == 0 then
- local dk = d[k]
- found = dk and (type(dk) == "table") and dk
- elseif n < 0 then
- for i=k-1,1,-1 do
+apply_axis['preceding-sibling'] = function(list)
+ local collected = { }
+ for l=1,#list do
+ local ll = list[l]
+ local p = ll.__p__
+ local d = p.dt
+ for i=1,ll.ni-1 do
local di = d[i]
if type(di) == "table" then
- if n == -1 then
- found = di
- break
- else
- n = n + 1
- end
+ collected[#collected+1] = di
end
end
- else
- for i=k+1,#d,1 do
+ end
+ return collected
+end
+
+apply_axis['reverse-sibling'] = function(list) -- reverse preceding
+ local collected = { }
+ for l=1,#list do
+ local ll = list[l]
+ local p = ll.__p__
+ local d = p.dt
+ for i=ll.ni-1,1,-1 do
local di = d[i]
if type(di) == "table" then
- if n == 1 then
- found = di
- break
- else
- n = n - 1
- end
+ collected[#collected+1] = di
end
end
end
- return (found and found.tg) or ""
+ return collected
end
-expressions.text = functions.text
-expressions.name = functions.name
-expressions.tag = functions.tag
+apply_axis['auto-descendant-or-self'] = apply_axis['descendant-or-self']
+apply_axis['auto-descendant'] = apply_axis['descendant']
+apply_axis['auto-child'] = apply_axis['child']
+apply_axis['auto-self'] = apply_axis['self']
+apply_axis['initial-child'] = apply_axis['child']
-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
+local function apply_nodes(list,directive,nodes)
+ -- todo: nodes[1] etc ... negated node name in set ... when needed
+ -- ... currently ignored
+ local maxn = #nodes
+ if maxn == 3 then --optimized loop
+ local nns, ntg = nodes[2], nodes[3]
+ if not nns and not ntg then -- wildcard
+ if directive then
+ return list
+ else
+ return { }
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
- local hsh = { } -- this will slooow down the lot
- 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
- -- we can optimize this for simple searches, but it probably does not pay off
- hsh[tg] = (hsh[tg] or 0) + 1
- 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
+ local collected, m, p = { }, 0, nil
+ if not nns then -- only check tag
+ for l=1,#list do
+ local ll = list[l]
+ local ltg = ll.tg
+ if ltg then
+ if directive then
+ if ntg == ltg then
+ local llp = ll.__p__ ; if llp ~= p then p, m = llp, 1 else m = m + 1 end
+ collected[#collected+1], ll.mi = ll, m
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](expressions,root,rootdt,k,e,edt,ns,tg,idx,hsh[tg] or 1)
- 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
+ elseif ntg ~= ltg then
+ local llp = ll.__p__ ; if llp ~= p then p, m = llp, 1 else m = m + 1 end
+ collected[#collected+1], ll.mi = ll, m
+ end
+ end
+ end
+ elseif not ntg then -- only check namespace
+ for l=1,#list do
+ local ll = list[l]
+ local lns = ll.rn or ll.ns
+ if lns then
+ if directive then
+ if lns == nns then
+ local llp = ll.__p__ ; if llp ~= p then p, m = llp, 1 else m = m + 1 end
+ collected[#collected+1], ll.mi = ll, m
end
+ elseif lns ~= nns then
+ local llp = ll.__p__ ; if llp ~= p then p, m = llp, 1 else m = m + 1 end
+ collected[#collected+1], ll.mi = ll, m
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
+ end
+ else -- check both
+ for l=1,#list do
+ local ll = list[l]
+ local ltg = ll.tg
+ if ltg then
+ local lns = ll.rn or ll.ns
+ local ok = ltg == ntg and lns == nns
+ if directive then
+ if ok then
+ local llp = ll.__p__ ; if llp ~= p then p, m = llp, 1 else m = m + 1 end
+ collected[#collected+1], ll.mi = ll, m
end
- break -- else loop
+ elseif not ok then
+ local llp = ll.__p__ ; if llp ~= p then p, m = llp, 1 else m = m + 1 end
+ collected[#collected+1], ll.mi = ll, m
end
end
end
end
+ return collected
end
+ else
+ local collected, m, p = { }, 0, nil
+ for l=1,#list do
+ local ll = list[l]
+ local ltg = ll.tg
+ if ltg then
+ local lns = ll.rn or ll.ns
+ local ok = false
+ for n=1,maxn,3 do
+ local nns, ntg = nodes[n+1], nodes[n+2]
+ ok = (not ntg or ltg == ntg) and (not nns or lns == nns)
+ if ok then
+ break
+ end
+ end
+ if directive then
+ if ok then
+ local llp = ll.__p__ ; if llp ~= p then p, m = llp, 1 else m = m + 1 end
+ collected[#collected+1], ll.mi = ll, m
+ end
+ elseif not ok then
+ local llp = ll.__p__ ; if llp ~= p then p, m = llp, 1 else m = m + 1 end
+ collected[#collected+1], ll.mi = ll, m
+ end
+ end
+ end
+ return collected
end
- return true
end
-xml.traverse = traverse
+local quit_expression = false
---[[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>
+local function apply_expression(list,expression,order)
+ local collected = { }
+ quit_expression = false
+ for l=1,#list do
+ local ll = list[l]
+ if expression(list,ll,l,order) then -- nasty, order alleen valid als n=1
+ collected[#collected+1] = ll
+ end
+ if quit_expression then
+ break
+ end
+ end
+ return collected
+end
+
+local P, V, C, Cs, Cc, Ct, R, S, Cg, Cb = lpeg.P, lpeg.V, lpeg.C, lpeg.Cs, lpeg.Cc, lpeg.Ct, lpeg.R, lpeg.S, lpeg.Cg, lpeg.Cb
+
+local spaces = S(" \n\r\t\f")^0
+local lp_space = S(" \n\r\t\f")
+local lp_any = P(1)
+local lp_noequal = P("!=") / "~=" + P("<=") + P(">=") + P("==")
+local lp_doequal = P("=") / "=="
+local lp_or = P("|") / " or "
+local lp_and = P("&") / " and "
+
+local lp_builtin = P (
+ P("firstindex") / "1" +
+ P("lastindex") / "(#ll.__p__.dt or 1)" +
+ P("firstelement") / "1" +
+ P("lastelement") / "(ll.__p__.en or 1)" +
+ P("first") / "1" +
+ P("last") / "#list" +
+ P("rootposition") / "order" +
+ P("position") / "l" + -- is element in finalizer
+ P("order") / "order" +
+ P("element") / "(ll.ei or 1)" +
+ P("index") / "(ll.ni or 1)" +
+ P("match") / "(ll.mi or 1)" +
+ P("text") / "(ll.dt[1] or '')" +
+ -- P("name") / "(ll.ns~='' and ll.ns..':'..ll.tg)" +
+ P("name") / "((ll.ns~='' and ll.ns..':'..ll.tg) or ll.tg)" +
+ P("tag") / "ll.tg" +
+ P("ns") / "ll.ns"
+ ) * ((spaces * P("(") * spaces * P(")"))/"")
+
+local lp_attribute = (P("@") + P("attribute::")) / "" * Cc("(ll.at and ll.at['") * R("az","AZ","--","__")^1 * Cc("'])")
+local lp_fastpos_p = ((P("+")^0 * R("09")^1 * P(-1)) / function(s) return "l==" .. s end)
+local lp_fastpos_n = ((P("-") * R("09")^1 * P(-1)) / function(s) return "(" .. s .. "<0 and (#list+".. s .. "==l))" end)
+local lp_fastpos = lp_fastpos_n + lp_fastpos_p
+local lp_reserved = C("and") + C("or") + C("not") + C("div") + C("mod") + C("true") + C("false")
+
+local lp_lua_function = C(R("az","AZ","__")^1 * (P(".") * R("az","AZ","__")^1)^1) * ("(") / function(t) -- todo: better . handling
+ return t .. "("
+end
-<typing>
-local r, d, k = xml.filter(root,"/a/b/c/position(4)"
-</typing>
---ldx]]--
+local lp_function = C(R("az","AZ","__")^1) * P("(") / function(t) -- todo: better . handling
+ if expressions[t] then
+ return "expr." .. t .. "("
+ else
+ return "expr.error("
+ end
+end
-local traverse, lpath, convert = xml.traverse, xml.lpath, xml.convert
+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) -- lpeg.P{"("*C(((1-S("()"))+V(1))^0)*")"}
-xml.filters = { }
+local lp_child = Cc("expr.child(ll,'") * R("az","AZ","--","__")^1 * Cc("')")
+local lp_number = S("+-") * R("09")^1
+local lp_string = Cc("'") * R("az","AZ","--","__")^1 * Cc("'")
+local lp_content = (P("'") * (1-P("'"))^0 * P("'") + P('"') * (1-P('"'))^0 * P('"'))
-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
+local cleaner
-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
+local lp_special = (C(P("name")+P("text")+P("tag")+P("count")+P("child"))) * value / function(t,s)
+ if expressions[t] then
+ s = s and s ~= "" and lpegmatch(cleaner,s)
+ if s and s ~= "" then
+ return "expr." .. t .. "(ll," .. s ..")"
else
- return ekat, rt, dt, dk
+ return "expr." .. t .. "(ll)"
end
else
- return { }, rt, dt, dk
+ return "expr.error(" .. t .. ")"
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
+local content =
+ lp_builtin +
+ lp_attribute +
+ lp_special +
+ lp_noequal + lp_doequal +
+ lp_or + lp_and +
+ lp_reserved +
+ lp_lua_function + lp_function +
+ lp_content + -- too fragile
+ lp_child +
+ lp_any
+
+local converter = Cs (
+ lp_fastpos + (P { lparent * (V(1))^0 * rparent + content } )^0
+)
-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
+cleaner = Cs ( (
+--~ lp_fastpos +
+ lp_reserved +
+ lp_number +
+ lp_string +
+1 )^1 )
-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
+--~ expr
-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
+local template_e = [[
+ local expr = xml.expressions
+ return function(list,ll,l,order)
+ return %s
+ 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
+local template_f_y = [[
+ local finalizer = xml.finalizers['%s']['%s']
+ return function(collection)
+ return finalizer(collection,%s)
+ 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
+local template_f_n = [[
+ return xml.finalizers['%s']['%s']
+]]
+
+--
+
+local register_self = { kind = "axis", axis = "self" } -- , apply = apply_axis["self"] }
+local register_parent = { kind = "axis", axis = "parent" } -- , apply = apply_axis["parent"] }
+local register_descendant = { kind = "axis", axis = "descendant" } -- , apply = apply_axis["descendant"] }
+local register_child = { kind = "axis", axis = "child" } -- , apply = apply_axis["child"] }
+local register_descendant_or_self = { kind = "axis", axis = "descendant-or-self" } -- , apply = apply_axis["descendant-or-self"] }
+local register_root = { kind = "axis", axis = "root" } -- , apply = apply_axis["root"] }
+local register_ancestor = { kind = "axis", axis = "ancestor" } -- , apply = apply_axis["ancestor"] }
+local register_ancestor_or_self = { kind = "axis", axis = "ancestor-or-self" } -- , apply = apply_axis["ancestor-or-self"] }
+local register_attribute = { kind = "axis", axis = "attribute" } -- , apply = apply_axis["attribute"] }
+local register_namespace = { kind = "axis", axis = "namespace" } -- , apply = apply_axis["namespace"] }
+local register_following = { kind = "axis", axis = "following" } -- , apply = apply_axis["following"] }
+local register_following_sibling = { kind = "axis", axis = "following-sibling" } -- , apply = apply_axis["following-sibling"] }
+local register_preceding = { kind = "axis", axis = "preceding" } -- , apply = apply_axis["preceding"] }
+local register_preceding_sibling = { kind = "axis", axis = "preceding-sibling" } -- , apply = apply_axis["preceding-sibling"] }
+local register_reverse_sibling = { kind = "axis", axis = "reverse-sibling" } -- , apply = apply_axis["reverse-sibling"] }
+
+local register_auto_descendant_or_self = { kind = "axis", axis = "auto-descendant-or-self" } -- , apply = apply_axis["auto-descendant-or-self"] }
+local register_auto_descendant = { kind = "axis", axis = "auto-descendant" } -- , apply = apply_axis["auto-descendant"] }
+local register_auto_self = { kind = "axis", axis = "auto-self" } -- , apply = apply_axis["auto-self"] }
+local register_auto_child = { kind = "axis", axis = "auto-child" } -- , apply = apply_axis["auto-child"] }
+
+local register_initial_child = { kind = "axis", axis = "initial-child" } -- , apply = apply_axis["initial-child"] }
+
+local register_all_nodes = { kind = "nodes", nodetest = true, nodes = { true, false, false } }
+
+local skip = { }
+
+local function errorrunner_e(str,cnv)
+ if not skip[str] then
+ logs.report("lpath","error in expression: %s => %s",str,cnv)
+ skip[str] = cnv or str
end
- return nil, nil, nil, nil
+ return false
+end
+local function errorrunner_f(str,arg)
+ logs.report("lpath","error in finalizer: %s(%s)",str,arg or "")
+ return false
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[gsub(arguments,"^([\"\'])(.*)%1$","%2")])) or ""
+local function register_nodes(nodetest,nodes)
+ return { kind = "nodes", nodetest = nodetest, nodes = nodes }
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
+local function register_expression(expression)
+ local converted = lpegmatch(converter,expression)
+ local runner = loadstring(format(template_e,converted))
+ runner = (runner and runner()) or function() errorrunner_e(expression,converted) end
+ return { kind = "expression", expression = expression, converted = converted, evaluator = runner }
+end
+
+local function register_finalizer(protocol,name,arguments)
+ local runner
+ if arguments and arguments ~= "" then
+ runner = loadstring(format(template_f_y,protocol or xml.defaultprotocol,name,arguments))
else
- return "", rt, dt, dk
+ runner = loadstring(format(template_f_n,protocol or xml.defaultprotocol,name))
end
+ runner = (runner and runner()) or function() errorrunner_f(name,arguments) end
+ return { kind = "finalizer", name = name, arguments = arguments, finalizer = runner }
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
+local expression = P { "ex",
+ ex = "[" * C((V("sq") + V("dq") + (1 - S("[]")) + V("ex"))^0) * "]",
+ sq = "'" * (1 - S("'"))^0 * "'",
+ dq = '"' * (1 - S('"'))^0 * '"',
+}
-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
+local arguments = P { "ar",
+ ar = "(" * Cs((V("sq") + V("dq") + V("nq") + P(1-P(")")))^0) * ")",
+ nq = ((1 - S("),'\""))^1) / function(s) return format("%q",s) end,
+ sq = P("'") * (1 - P("'"))^0 * P("'"),
+ dq = P('"') * (1 - P('"'))^0 * P('"'),
+}
+
+-- todo: better arg parser
+
+local function register_error(str)
+ return { kind = "error", error = format("unparsed: %s",str) }
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]]--
+-- there is a difference in * and /*/ and so we need to catch a few special cases
+
+local special_1 = P("*") * Cc(register_auto_descendant) * Cc(register_all_nodes) -- last one not needed
+local special_2 = P("/") * Cc(register_auto_self)
+local special_3 = P("") * Cc(register_auto_self)
+
+local parser = Ct { "patterns", -- can be made a bit faster by moving pattern outside
+
+ patterns = spaces * V("protocol") * spaces * (
+ ( V("special") * spaces * P(-1) ) +
+ ( V("initial") * spaces * V("step") * spaces * (P("/") * spaces * V("step") * spaces)^0 )
+ ),
+
+ protocol = Cg(V("letters"),"protocol") * P("://") + Cg(Cc(nil),"protocol"),
+
+ -- the / is needed for // as descendant or self is somewhat special
+ -- step = (V("shortcuts") + V("axis") * spaces * V("nodes")^0 + V("error")) * spaces * V("expressions")^0 * spaces * V("finalizer")^0,
+ step = ((V("shortcuts") + P("/") + V("axis")) * spaces * V("nodes")^0 + V("error")) * spaces * V("expressions")^0 * spaces * V("finalizer")^0,
+
+ axis = V("descendant") + V("child") + V("parent") + V("self") + V("root") + V("ancestor") +
+ V("descendant_or_self") + V("following_sibling") + V("following") +
+ V("reverse_sibling") + V("preceding_sibling") + V("preceding") + V("ancestor_or_self") +
+ #(1-P(-1)) * Cc(register_auto_child),
+
+ special = special_1 + special_2 + special_3,
--- not faster but hipper ... although ... i can't get rid of the trailing / in the path
+ initial = (P("/") * spaces * Cc(register_initial_child))^-1,
-local P, S, R, C, V, Cc = lpeg.P, lpeg.S, lpeg.R, lpeg.C, lpeg.V, lpeg.Cc
+ error = (P(1)^1) / register_error,
-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
+ shortcuts_a = V("s_descendant_or_self") + V("s_descendant") + V("s_child") + V("s_parent") + V("s_self") + V("s_root") + V("s_ancestor"),
-local parser = direct + action + attribute
+ shortcuts = V("shortcuts_a") * (spaces * "/" * spaces * V("shortcuts_a"))^0,
-local filters = xml.filters
-local attribute_filter = xml.filters.attributes
-local default_filter = xml.filters.default
+ s_descendant_or_self = (P("***/") + P("/")) * Cc(register_descendant_or_self), --- *** is a bonus
+ -- s_descendant_or_self = P("/") * Cc(register_descendant_or_self),
+ s_descendant = P("**") * Cc(register_descendant),
+ s_child = P("*") * #(1-P(":")) * Cc(register_child ),
+-- s_child = P("*") * #(P("/")+P(-1)) * Cc(register_child ),
+ s_parent = P("..") * Cc(register_parent ),
+ s_self = P("." ) * Cc(register_self ),
+ s_root = P("^^") * Cc(register_root ),
+ s_ancestor = P("^") * Cc(register_ancestor ),
--- todo: also hash, could be gc'd
+ descendant = P("descendant::") * Cc(register_descendant ),
+ child = P("child::") * Cc(register_child ),
+ parent = P("parent::") * Cc(register_parent ),
+ self = P("self::") * Cc(register_self ),
+ root = P('root::') * Cc(register_root ),
+ ancestor = P('ancestor::') * Cc(register_ancestor ),
+ descendant_or_self = P('descendant-or-self::') * Cc(register_descendant_or_self ),
+ ancestor_or_self = P('ancestor-or-self::') * Cc(register_ancestor_or_self ),
+ -- attribute = P('attribute::') * Cc(register_attribute ),
+ -- namespace = P('namespace::') * Cc(register_namespace ),
+ following = P('following::') * Cc(register_following ),
+ following_sibling = P('following-sibling::') * Cc(register_following_sibling ),
+ preceding = P('preceding::') * Cc(register_preceding ),
+ preceding_sibling = P('preceding-sibling::') * Cc(register_preceding_sibling ),
+ reverse_sibling = P('reverse-sibling::') * Cc(register_reverse_sibling ),
+
+ nodes = (V("nodefunction") * spaces * P("(") * V("nodeset") * P(")") + V("nodetest") * V("nodeset")) / register_nodes,
+
+ expressions = expression / register_expression,
+
+ letters = R("az")^1,
+ name = (1-lpeg.S("/[]()|:*!"))^1,
+ negate = P("!") * Cc(false),
+
+ nodefunction = V("negate") + P("not") * Cc(false) + Cc(true),
+ nodetest = V("negate") + Cc(true),
+ nodename = (V("negate") + Cc(true)) * spaces * ((V("wildnodename") * P(":") * V("wildnodename")) + (Cc(false) * V("wildnodename"))),
+ wildnodename = (C(V("name")) + P("*") * Cc(false)) * #(1-P("(")),
+ nodeset = spaces * Ct(V("nodename") * (spaces * P("|") * spaces * V("nodename"))^0) * spaces,
+
+ finalizer = (Cb("protocol") * P("/")^-1 * C(V("name")) * arguments * P(-1)) / register_finalizer,
+
+}
+
+local cache = { }
-function xml.filter(root,pattern)
- local kind, a, b, c = parser:match(pattern)
- 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)
+local function nodesettostring(set,nodetest)
+ local t = { }
+ for i=1,#set,3 do
+ local directive, ns, tg = set[i], set[i+1], set[i+2]
+ if not ns or ns == "" then ns = "*" end
+ if not tg or tg == "" then tg = "*" end
+ tg = (tg == "@rt@" and "[root]") or format("%s:%s",ns,tg)
+ t[#t+1] = (directive and tg) or format("not(%s)",tg)
+ end
+ if nodetest == false then
+ return format("not(%s)",concat(t,"|"))
else
- return default_filter(root,pattern)
+ return concat(t,"|")
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
+local function tagstostring(list)
+ if #list == 0 then
+ return "no elements"
+ else
+ local t = { }
+ for i=1, #list do
+ local li = list[i]
+ local ns, tg = li.ns, li.tg
+ if not ns or ns == "" then ns = "*" end
+ if not tg or tg == "" then tg = "*" end
+ t[#t+1] = (tg == "@rt@" and "[root]") or format("%s:%s",ns,tg)
+ end
+ return concat(t," ")
+ end
+end
---[[ldx--
-<p>The following functions collect elements and texts.</p>
---ldx]]--
+xml.nodesettostring = nodesettostring
--- still somewhat bugged
+local parse_pattern -- we have a harmless kind of circular reference
-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
+local function lshow(parsed)
+ if type(parsed) == "string" then
+ parsed = parse_pattern(parsed)
+ end
+ local s = table.serialize_functions -- ugly
+ table.serialize_functions = false -- ugly
+ logs.report("lpath","%s://%s => %s",parsed.protocol or xml.defaultprotocol,parsed.pattern,table.serialize(parsed,false))
+ table.serialize_functions = s -- ugly
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 ""
+xml.lshow = lshow
+
+local function add_comment(p,str)
+ local pc = p.comment
+ if not pc then
+ p.comment = { str }
+ else
+ pc[#pc+1] = str
+ end
+end
+
+parse_pattern = function (pattern) -- the gain of caching is rather minimal
+ lpathcalls = lpathcalls + 1
+ if type(pattern) == "table" then
+ return pattern
+ else
+ local parsed = cache[pattern]
+ if parsed then
+ lpathcached = lpathcached + 1
+ else
+ parsed = lpegmatch(parser,pattern)
+ if parsed then
+ parsed.pattern = pattern
+ local np = #parsed
+ if np == 0 then
+ parsed = { pattern = pattern, register_self, state = "parsing error" }
+ logs.report("lpath","parsing error in '%s'",pattern)
+ lshow(parsed)
else
- t[#t+1] = ""
+ -- we could have done this with a more complex parser but this
+ -- is cleaner
+ local pi = parsed[1]
+ if pi.axis == "auto-child" then
+ if false then
+ add_comment(parsed, "auto-child replaced by auto-descendant-or-self")
+ parsed[1] = register_auto_descendant_or_self
+ else
+ add_comment(parsed, "auto-child replaced by auto-descendant")
+ parsed[1] = register_auto_descendant
+ end
+ elseif pi.axis == "initial-child" and np > 1 and parsed[2].axis then
+ add_comment(parsed, "initial-child removed") -- we could also make it a auto-self
+ remove(parsed,1)
+ end
+ local np = #parsed -- can have changed
+ if np > 1 then
+ local pnp = parsed[np]
+ if pnp.kind == "nodes" and pnp.nodetest == true then
+ local nodes = pnp.nodes
+ if nodes[1] == true and nodes[2] == false and nodes[3] == false then
+ add_comment(parsed, "redundant final wildcard filter removed")
+ remove(parsed,np)
+ end
+ end
+ end
end
else
- t[#t+1] = tx or ""
+ parsed = { pattern = pattern }
+ end
+ cache[pattern] = parsed
+ if trace_lparse and not trace_lprofile then
+ lshow(parsed)
end
- else
- t[#t+1] = ""
end
- end)
- return t
+ return parsed
+ end
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
+-- we can move all calls inline and then merge the trace back
+-- technically we can combine axis and the next nodes which is
+-- what we did before but this a bit cleaner (but slower too)
+-- but interesting is that it's not that much faster when we
+-- go inline
+--
+-- beware: we need to return a collection even when we filter
+-- else the (simple) cache gets messed up
+
+-- caching found lookups saves not that much (max .1 sec on a 8 sec run)
+-- and it also messes up finalizers
+
+-- watch out: when there is a finalizer, it's always called as there
+-- can be cases that a finalizer returns (or does) something in case
+-- there is no match; an example of this is count()
+
+local profiled = { } xml.profiled = profiled
+
+local function profiled_apply(list,parsed,nofparsed,order)
+ local p = profiled[parsed.pattern]
+ if p then
+ p.tested = p.tested + 1
+ else
+ p = { tested = 1, matched = 0, finalized = 0 }
+ profiled[parsed.pattern] = p
+ end
+ local collected = list
+ for i=1,nofparsed do
+ local pi = parsed[i]
+ local kind = pi.kind
+ if kind == "axis" then
+ collected = apply_axis[pi.axis](collected)
+ elseif kind == "nodes" then
+ collected = apply_nodes(collected,pi.nodetest,pi.nodes)
+ elseif kind == "expression" then
+ collected = apply_expression(collected,pi.evaluator,order)
+ elseif kind == "finalizer" then
+ collected = pi.finalizer(collected)
+ p.matched = p.matched + 1
+ p.finalized = p.finalized + 1
+ return collected
+ end
+ if not collected or #collected == 0 then
+ local pn = i < nofparsed and parsed[nofparsed]
+ if pn and pn.kind == "finalizer" then
+ collected = pn.finalizer(collected)
+ p.finalized = p.finalized + 1
+ return collected
end
+ return nil
end
- end)
- return #t > 0 and {}
+ end
+ if collected then
+ p.matched = p.matched + 1
+ end
+ return collected
+end
+
+local function traced_apply(list,parsed,nofparsed,order)
+ if trace_lparse then
+ lshow(parsed)
+ end
+ logs.report("lpath", "collecting : %s",parsed.pattern)
+ logs.report("lpath", " root tags : %s",tagstostring(list))
+ logs.report("lpath", " order : %s",order or "unset")
+ local collected = list
+ for i=1,nofparsed do
+ local pi = parsed[i]
+ local kind = pi.kind
+ if kind == "axis" then
+ collected = apply_axis[pi.axis](collected)
+ logs.report("lpath", "% 10i : ax : %s",(collected and #collected) or 0,pi.axis)
+ elseif kind == "nodes" then
+ collected = apply_nodes(collected,pi.nodetest,pi.nodes)
+ logs.report("lpath", "% 10i : ns : %s",(collected and #collected) or 0,nodesettostring(pi.nodes,pi.nodetest))
+ elseif kind == "expression" then
+ collected = apply_expression(collected,pi.evaluator,order)
+ logs.report("lpath", "% 10i : ex : %s -> %s",(collected and #collected) or 0,pi.expression,pi.converted)
+ elseif kind == "finalizer" then
+ collected = pi.finalizer(collected)
+ logs.report("lpath", "% 10i : fi : %s : %s(%s)",(type(collected) == "table" and #collected) or 0,parsed.protocol or xml.defaultprotocol,pi.name,pi.arguments or "")
+ return collected
+ end
+ if not collected or #collected == 0 then
+ local pn = i < nofparsed and parsed[nofparsed]
+ if pn and pn.kind == "finalizer" then
+ collected = pn.finalizer(collected)
+ logs.report("lpath", "% 10i : fi : %s : %s(%s)",(type(collected) == "table" and #collected) or 0,parsed.protocol or xml.defaultprotocol,pn.name,pn.arguments or "")
+ return collected
+ end
+ return nil
+ end
+ end
+ return collected
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])
+local function normal_apply(list,parsed,nofparsed,order)
+ local collected = list
+ for i=1,nofparsed do
+ local pi = parsed[i]
+ local kind = pi.kind
+ if kind == "axis" then
+ local axis = pi.axis
+ if axis ~= "self" then
+ collected = apply_axis[axis](collected)
+ end
+ elseif kind == "nodes" then
+ collected = apply_nodes(collected,pi.nodetest,pi.nodes)
+ elseif kind == "expression" then
+ collected = apply_expression(collected,pi.evaluator,order)
+ elseif kind == "finalizer" then
+ return pi.finalizer(collected)
+ end
+ if not collected or #collected == 0 then
+ local pf = i < nofparsed and parsed[nofparsed].finalizer
+ if pf then
+ return pf(collected) -- can be anything
+ end
+ return nil
+ end
+ end
+ return collected
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
+local function parse_apply(list,pattern)
+ -- we avoid an extra call
+ local parsed = cache[pattern]
+ if parsed then
+ lpathcalls = lpathcalls + 1
+ lpathcached = lpathcached + 1
+ elseif type(pattern) == "table" then
+ lpathcalls = lpathcalls + 1
+ parsed = pattern
+ else
+ parsed = parse_pattern(pattern) or pattern
+ end
+ if not parsed then
+ return
+ end
+ local nofparsed = #parsed
+ if nofparsed == 0 then
+ return -- something is wrong
+ end
+ local one = list[1]
+ if not one then
+ return -- something is wrong
+ elseif not trace_lpath then
+ return normal_apply(list,parsed,nofparsed,one.mi)
+ elseif trace_lprofile then
+ return profiled_apply(list,parsed,nofparsed,one.mi)
+ else
+ return traced_apply(list,parsed,nofparsed,one.mi)
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
+-- internal (parsed)
-function xml.elements(root,pattern,reverse)
- return wrap(function() traverse(root, lpath(pattern), yield, reverse) end)
+expressions.child = function(e,pattern)
+ return parse_apply({ e },pattern) -- todo: cache
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)
+expressions.count = function(e,pattern)
+ local collected = parse_apply({ e },pattern) -- todo: cache
+ return (collected and #collected) or 0
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
+-- external
+
+expressions.oneof = function(s,...) -- slow
+ local t = {...} for i=1,#t do if s == t[i] then return true end end return false
+end
+expressions.error = function(str)
+ xml.error_handler("unknown function in lpath expression",tostring(str or "?"))
+ return false
+end
+expressions.undefined = function(s)
+ return s == nil
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)
+expressions.quit = function(s)
+ if s or s == nil then
+ quit_expression = true
+ end
+ return true
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)
+expressions.print = function(...)
+ print(...)
+ return true
end
---[[ldx--
-<p>We've now arrives at the functions that manipulate the tree.</p>
---ldx]]--
+expressions.contains = find
+expressions.find = find
+expressions.upper = upper
+expressions.lower = lower
+expressions.number = tonumber
+expressions.boolean = toboolean
-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
+-- user interface
+
+local function traverse(root,pattern,handle)
+ logs.report("xml","use 'xml.selection' instead for '%s'",pattern)
+ local collected = parse_apply({ root },pattern)
+ if collected then
+ for c=1,#collected do
+ local e = collected[c]
+ local r = e.__p__
+ handle(r,r.dt,e.ni)
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
- insert(d,k,element) -- untested
---~ elseif element.dt then
---~ for _,v in ipairs(element.dt) do -- i added
---~ insert(d,k,v)
---~ k = k + 1
---~ end
---~ end
- else
- local edt = element.dt
- if edt then
- for i=1,#edt do
- insert(d,k,edt[i])
- k = k + 1
- end
- end
- end
- end
+local function selection(root,pattern,handle)
+ local collected = parse_apply({ root },pattern)
+ if collected then
+ if handle then
+ for c=1,#collected do
+ handle(collected[c])
end
+ else
+ return collected
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
+xml.parse_parser = parser
+xml.parse_pattern = parse_pattern
+xml.parse_apply = parse_apply
+xml.traverse = traverse -- old method, r, d, k
+xml.selection = selection -- new method, simple handle
-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] = remove(m[2],m[3])
- end
- return deleted
+local lpath = parse_pattern
+
+xml.lpath = lpath
+
+function xml.cached_patterns()
+ return cache
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)
+-- generic function finalizer (independant namespace)
+
+local function dofunction(collected,fnc)
+ if collected then
+ local f = functions[fnc]
+ if f then
+ for c=1,#collected do
+ f(collected[c])
+ end
+ else
+ logs.report("xml","unknown function '%s'",fnc)
+ 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
+xml.finalizers.xml["function"] = dofunction
+xml.finalizers.tex["function"] = dofunction
+
+-- functions
+
+expressions.text = function(e,n)
+ local rdt = e.__p__.dt
+ return (rdt and rdt[n]) or ""
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 gmatch(attribute or "href","([^|]+)") do
- name = ek.at[a]
- if name then break end
+expressions.name = function(e,n) -- ns + tg
+ local found = false
+ n = tonumber(n) or 0
+ if n == 0 then
+ found = type(e) == "table" and e
+ elseif n < 0 then
+ local d, k = e.__p__.dt, e.ni
+ for i=k-1,1,-1 do
+ local di = d[i]
+ if type(di) == "table" then
+ if n == -1 then
+ found = di
+ break
+ else
+ n = n + 1
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)
+ else
+ local d, k = e.__p__.dt, e.ni
+ for i=k+1,#d,1 do
+ local di = d[i]
+ if type(di) == "table" then
+ if n == 1 then
+ found = di
+ break
+ else
+ n = n - 1
end
- xml.assign(d,k,xi)
end
end
end
- xml.each_element(xmldata, pattern, include)
+ 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
-function xml.strip_whitespace(root, pattern, nolines) -- strips all leading and trailing space !
- 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" then
-
- if str == "" then
- -- stripped
+expressions.tag = function(e,n) -- only tg
+ if not e then
+ return ""
+ else
+ local found = false
+ n = tonumber(n) or 0
+ if n == 0 then
+ found = (type(e) == "table") and e -- seems to fail
+ elseif n < 0 then
+ local d, k = e.__p__.dt, e.ni
+ for i=k-1,1,-1 do
+ local di = d[i]
+ if type(di) == "table" then
+ if n == -1 then
+ found = di
+ break
else
- if nolines then
- str = gsub(str,"[ \n\r\t]+"," ")
- end
- if str == "" then
- -- stripped
- else
- t[#t+1] = str
- end
+ n = n + 1
end
- else
- t[#t+1] = str
end
end
- d[k].dt = t
- end
- end)
-end
-
-local function rename_space(root, oldspace, newspace) -- fast variant
- local ndt = #root.dt
- 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
+ else
+ local d, k = e.__p__.dt, e.ni
+ for i=k+1,#d,1 do
+ local di = d[i]
+ if type(di) == "table" then
+ if n == 1 then
+ found = di
+ break
+ else
+ n = n - 1
+ end
end
end
- local edt = e.dt
- if edt then
- rename_space(edt, oldspace, newspace)
- end
end
+ return (found and found.tg) or ""
end
end
-xml.rename_space = rename_space
+--[[ldx--
+<p>This is the main filter function. It returns whatever is asked for.</p>
+--ldx]]--
-function xml.remap_tag(root, pattern, newtg)
- traverse(root, lpath(pattern), function(r,d,k)
- d[k].tg = newtg
- end)
+function xml.filter(root,pattern) -- no longer funny attribute handling here
+ return parse_apply({ root },pattern)
end
-function xml.remap_namespace(root, pattern, newns)
- traverse(root, lpath(pattern), function(r,d,k)
- d[k].ns = newns
- 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]) -- old method
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)
+for e in xml.collected(xml.load('text.xml'),"title") do
+ print(e) -- new one
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)
+</typing>
+--ldx]]--
+
+local wrap, yield = coroutine.wrap, coroutine.yield
+
+function xml.elements(root,pattern,reverse) -- r, d, k
+ local collected = parse_apply({ root },pattern)
+ if collected then
+ if reverse then
+ return wrap(function() for c=#collected,1,-1 do
+ local e = collected[c] local r = e.__p__ yield(r,r.dt,e.ni)
+ end end)
+ else
+ return wrap(function() for c=1,#collected do
+ local e = collected[c] local r = e.__p__ yield(r,r.dt,e.ni)
+ end end)
+ end
+ end
+ return wrap(function() 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
+function xml.collected(root,pattern,reverse) -- e
+ local collected = parse_apply({ root },pattern)
+ if collected then
+ if reverse then
+ return wrap(function() for c=#collected,1,-1 do yield(collected[c]) end end)
else
- found = true
+ return wrap(function() for c=1,#collected do yield(collected[c]) end end)
end
- return true
- end)
- return found
+ end
+ return wrap(function() end)
end
---[[ldx--
-<p>Here are a few synonyms.</p>
---ldx]]--
-xml.filters.position = xml.filters.index
+end -- of closure
-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
+do -- create closure to overcome 200 locals limit
-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
+if not modules then modules = { } end modules ['lxml-mis'] = {
+ 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"
+}
-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
+local concat = table.concat
+local type, next, tonumber, tostring, setmetatable, loadstring = type, next, tonumber, tostring, setmetatable, loadstring
+local format, gsub, match = string.format, string.gsub, string.match
+local lpegmatch = lpeg.match
--[[ldx--
-<p>The following helper functions best belong to the <t>lmxl-ini</t>
+<p>The following helper functions best belong to the <t>lxml-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)
+local function xmlgsub(t,old,new) -- will be replaced
local dt = t.dt
if dt then
for k=1,#dt do
@@ -5069,28 +6366,26 @@ function xml.gsub(t,old,new)
if type(v) == "string" then
dt[k] = gsub(v,old,new)
else
- xml.gsub(v,old,new)
+ xmlgsub(v,old,new)
end
end
end
end
+--~ xml.gsub = xmlgsub
+
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")
+ if d and k then
+ local dkm = d[k-1]
+ if dkm and type(dkm) == "string" then
+ local s = match(dkm,"\n(%s+)")
+ xmlgsub(dk,"\n"..rep(" ",#s),"\n")
+ end
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
+--~ xml.unescapes = { } for k,v in next, xml.escapes do xml.unescapes[v] = k end
--~ function xml.escaped (str) return (gsub(str,"(.)" , xml.escapes )) end
--~ function xml.unescaped(str) return (gsub(str,"(&.-;)", xml.unescapes)) end
@@ -5114,8 +6409,6 @@ 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)
@@ -5124,84 +6417,32 @@ local unescaped = Cs(normal * (special * normal)^0)
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
+xml.escaped_pattern = escaped
+xml.unescaped_pattern = unescaped
+xml.cleansed_pattern = cleansed
-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)
+function xml.escaped (str) return lpegmatch(escaped,str) end
+function xml.unescaped(str) return lpegmatch(unescaped,str) end
+function xml.cleansed (str) return lpegmatch(cleansed,str) end
+
+-- this might move
+
+function xml.fillin(root,pattern,str,check)
+ local e = xml.first(root,pattern)
+ if e then
+ local n = #e.dt
+ if not check or n == 0 or (n == 1 and e.dt[1] == "") then
+ e.dt = { str }
end
- else
- return ""
end
end
-function xml.statistics()
- return {
- lpathcalls = lpathcalls,
- lpathcached = lpathcached,
- }
-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.settrace("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)"))
-
end -- of closure
do -- create closure to overcome 200 locals limit
-if not modules then modules = { } end modules ['lxml-ent'] = {
+if not modules then modules = { } end modules ['lxml-aux'] = {
version = 1.001,
comment = "this module is the basis for the lxml-* ones",
author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
@@ -5209,457 +6450,836 @@ if not modules then modules = { } end modules ['lxml-ent'] = {
license = "see context related readme files"
}
-local type, next, tonumber, tostring, setmetatable, loadstring = type, next, tonumber, tostring, setmetatable, loadstring
-local format, gsub, find = string.format, string.gsub, string.find
-local utfchar = unicode.utf8.char
+-- not all functions here make sense anymore vbut we keep them for
+-- compatibility reasons
---[[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]]--
+local trace_manipulations = false trackers.register("lxml.manipulations", function(v) trace_manipulations = v end)
-xml.entities = xml.entities or { } -- xml.entity_handler == function
+local xmlparseapply, xmlconvert, xmlcopy, xmlname = xml.parse_apply, xml.convert, xml.copy, xml.name
+local xmlinheritedconvert = xml.inheritedconvert
-function xml.entity_handler(e)
- return format("[%s]",e)
-end
+local type = type
+local insert, remove = table.insert, table.remove
+local gmatch, gsub = string.gmatch, string.gsub
-local function toutf(s)
- return utfchar(tonumber(s,16))
+local function report(what,pattern,c,e)
+ logs.report("xml","%s element '%s' (root: '%s', position: %s, index: %s, pattern: %s)",what,xmlname(e),xmlname(e.__p__),c,e.ni,pattern)
end
-local 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 find(dk,"&#x.-;") then
- d[k] = gsub(dk,"&#x(.-);",toutf)
+local function withelements(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)
+ withelements(e,handle,depth+1)
+ end
end
- else
- utfize(dk)
end
end
end
-xml.utfize = utfize
+xml.withelements = withelements
-local function resolve(e) -- hex encoded always first, just to avoid mkii fallbacks
- if find(e,"^#x") then
- return utfchar(tonumber(e:sub(3),16))
- elseif find(e,"^#") then
- return utfchar(tonumber(e:sub(2)))
- else
- local ee = xml.entities[e] -- we cannot shortcut this one (is reloaded)
- if ee then
- return ee
- else
- local h = xml.entity_handler
- return (h and h(e)) or "&" .. e .. ";"
+function xml.withelement(e,n,handle) -- slow
+ if e and n ~= 0 and handle then
+ local edt = e.dt
+ if edt then
+ if n > 0 then
+ for i=1,#edt do
+ local ei = edt[i]
+ if type(ei) == "table" then
+ if n == 1 then
+ handle(ei)
+ return
+ else
+ n = n - 1
+ end
+ end
+ end
+ elseif n < 0 then
+ for i=#edt,1,-1 do
+ local ei = edt[i]
+ if type(ei) == "table" then
+ if n == -1 then
+ handle(ei)
+ return
+ else
+ n = n + 1
+ end
+ end
+ end
+ end
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 find(dk,"&.-;") then
- d[k] = gsub(dk,"&(.-);",resolve)
- end
- else
- resolve_entities(dk)
+xml.elements_only = xml.collected
+
+function xml.each_element(root,pattern,handle,reverse)
+ local collected = xmlparseapply({ root },pattern)
+ if collected then
+ if reverse then
+ for c=#collected,1,-1 do
+ handle(collected[c])
+ end
+ else
+ for c=1,#collected do
+ handle(collected[c])
end
end
+ return collected
end
end
-xml.resolve_entities = resolve_entities
+xml.process_elements = xml.each_element
-function xml.utfize_text(str)
- if find(str,"&#") then
- return (gsub(str,"&#x(.-);",toutf))
- else
- return str
+function xml.process_attributes(root,pattern,handle)
+ local collected = xmlparseapply({ root },pattern)
+ if collected and handle then
+ for c=1,#collected do
+ handle(collected[c].at)
+ end
end
+ return collected
end
-function xml.resolve_text_entities(str) -- maybe an lpeg. maybe resolve inline
- if find(str,"&") then
- return (gsub(str,"&(.-);",resolve))
- else
- return str
- end
+--[[ldx--
+<p>The following functions collect elements and texts.</p>
+--ldx]]--
+
+-- are these still needed -> lxml-cmp.lua
+
+function xml.collect_elements(root, pattern)
+ return xmlparseapply({ root },pattern)
end
-function xml.show_text_entities(str)
- if find(str,"&") then
- return (gsub(str,"&(.-);","[%1]"))
- else
- return str
+function xml.collect_texts(root, pattern, flatten) -- todo: variant with handle
+ local collected = xmlparseapply({ root },pattern)
+ if collected and flatten then
+ local xmltostring = xml.tostring
+ for c=1,#collected do
+ collected[c] = xmltostring(collected[c].dt)
+ end
end
+ return collected or { }
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 next, documententities do
- allentities[k] = v
+function xml.collect_tags(root, pattern, nonamespace)
+ local collected = xmlparseapply({ root },pattern)
+ if collected then
+ local t = { }
+ for c=1,#collected do
+ local e = collected[c]
+ local ns, tg = e.ns, e.tg
+ if nonamespace then
+ t[#t+1] = tg
+ elseif ns == "" then
+ t[#t+1] = tg
+ else
+ t[#t+1] = ns .. ":" .. tg
+ end
end
+ return t
end
end
+--[[ldx--
+<p>We've now arrived at the functions that manipulate the tree.</p>
+--ldx]]--
-end -- of closure
+local no_root = { no_root = true }
-do -- create closure to overcome 200 locals limit
+function xml.redo_ni(d)
+ for k=1,#d do
+ local dk = d[k]
+ if type(dk) == "table" then
+ dk.ni = k
+ end
+ end
+end
-if not modules then modules = { } end modules ['lxml-mis'] = {
- 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"
-}
+local function xmltoelement(whatever,root)
+ if not whatever then
+ return nil
+ end
+ local element
+ if type(whatever) == "string" then
+ element = xmlinheritedconvert(whatever,root)
+ else
+ element = whatever -- we assume a table
+ end
+ if element.error then
+ return whatever -- string
+ end
+ if element then
+ --~ if element.ri then
+ --~ element = element.dt[element.ri].dt
+ --~ else
+ --~ element = element.dt
+ --~ end
+ end
+ return element
+end
-local concat = table.concat
-local type, next, tonumber, tostring, setmetatable, loadstring = type, next, tonumber, tostring, setmetatable, loadstring
-local format, gsub = string.format, string.gsub
+xml.toelement = xmltoelement
---[[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]]--
+local function copiedelement(element,newparent)
+ if type(element) == "string" then
+ return element
+ else
+ element = xmlcopy(element).dt
+ if newparent and type(element) == "table" then
+ element.__p__ = newparent
+ end
+ return element
+ end
+end
-function xml.gsub(t,old,new)
- local dt = t.dt
- if dt then
- for k=1,#dt do
- local v = dt[k]
- if type(v) == "string" then
- dt[k] = gsub(v,old,new)
- else
- xml.gsub(v,old,new)
+function xml.delete_element(root,pattern)
+ local collected = xmlparseapply({ root },pattern)
+ if collected then
+ for c=1,#collected do
+ local e = collected[c]
+ local p = e.__p__
+ if p then
+ if trace_manipulations then
+ report('deleting',pattern,c,e)
+ end
+ local d = p.dt
+ remove(d,e.ni)
+ xml.redo_ni(d) -- can be made faster and inlined
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")
+function xml.replace_element(root,pattern,whatever)
+ local element = root and xmltoelement(whatever,root)
+ local collected = element and xmlparseapply({ root },pattern)
+ if collected then
+ for c=1,#collected do
+ local e = collected[c]
+ local p = e.__p__
+ if p then
+ if trace_manipulations then
+ report('replacing',pattern,c,e)
+ end
+ local d = p.dt
+ d[e.ni] = copiedelement(element,p)
+ xml.redo_ni(d) -- probably not needed
+ end
+ end
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)
+local function inject_element(root,pattern,whatever,prepend)
+ local element = root and xmltoelement(whatever,root)
+ local collected = element and xmlparseapply({ root },pattern)
+ if collected then
+ for c=1,#collected do
+ local e = collected[c]
+ local r = e.__p__
+ local d, k, rri = r.dt, e.ni, r.ri
+ local edt = (rri and d[rri].dt) or (d and d[k] and d[k].dt)
+ if edt then
+ local be, af
+ local cp = copiedelement(element,e)
+ if prepend then
+ be, af = cp, edt
+ else
+ be, af = edt, cp
+ end
+ for i=1,#af do
+ be[#be+1] = af[i]
+ end
+ if rri then
+ r.dt[rri].dt = be
+ else
+ d[k].dt = be
+ end
+ xml.redo_ni(d)
+ end
+ end
+ end
end
---~ xml.escapes = { ['&'] = '&amp;', ['<'] = '&lt;', ['>'] = '&gt;', ['"'] = '&quot;' }
---~ xml.unescapes = { } for k,v in pairs(xml.escapes) do xml.unescapes[v] = k end
+local function insert_element(root,pattern,whatever,before) -- todo: element als functie
+ local element = root and xmltoelement(whatever,root)
+ local collected = element and xmlparseapply({ root },pattern)
+ if collected then
+ for c=1,#collected do
+ local e = collected[c]
+ local r = e.__p__
+ local d, k = r.dt, e.ni
+ if not before then
+ k = k + 1
+ end
+ insert(d,k,copiedelement(element,r))
+ xml.redo_ni(d)
+ end
+ end
+end
---~ function xml.escaped (str) return (gsub(str,"(.)" , xml.escapes )) end
---~ function xml.unescaped(str) return (gsub(str,"(&.-;)", xml.unescapes)) end
---~ function xml.cleansed (str) return (gsub(str,"<.->" , '' )) end -- "%b<>"
+xml.insert_element = insert_element
+xml.insert_element_after = insert_element
+xml.insert_element_before = function(r,p,e) insert_element(r,p,e,true) end
+xml.inject_element = inject_element
+xml.inject_element_after = inject_element
+xml.inject_element_before = function(r,p,e) inject_element(r,p,e,true) end
-local P, S, R, C, V, Cc, Cs = lpeg.P, lpeg.S, lpeg.R, lpeg.C, lpeg.V, lpeg.Cc, lpeg.Cs
+local function include(xmldata,pattern,attribute,recursive,loaddata)
+ -- parse="text" (default: xml), encoding="" (todo)
+ -- attribute = attribute or 'href'
+ pattern = pattern or 'include'
+ loaddata = loaddata or io.loaddata
+ local collected = xmlparseapply({ xmldata },pattern)
+ if collected then
+ for c=1,#collected do
+ local ek = collected[c]
+ local name = nil
+ local ekdt = ek.dt
+ local ekat = ek.at
+ local epdt = ek.__p__.dt
+ if not attribute or attribute == "" then
+ name = (type(ekdt) == "table" and ekdt[1]) or ekdt -- ckeck, probably always tab or str
+ end
+ if not name then
+ for a in gmatch(attribute or "href","([^|]+)") do
+ name = ekat[a]
+ if name then break end
+ end
+ end
+ local data = (name and name ~= "" and loaddata(name)) or ""
+ if data == "" then
+ epdt[ek.ni] = "" -- xml.empty(d,k)
+ elseif ekat["parse"] == "text" then
+ -- for the moment hard coded
+ epdt[ek.ni] = xml.escaped(data) -- d[k] = xml.escaped(data)
+ else
+--~ local settings = xmldata.settings
+--~ settings.parent_root = xmldata -- to be tested
+--~ local xi = xmlconvert(data,settings)
+ local xi = xmlinheritedconvert(data,xmldata)
+ if not xi then
+ epdt[ek.ni] = "" -- xml.empty(d,k)
+ else
+ if recursive then
+ include(xi,pattern,attribute,recursive,loaddata)
+ end
+ epdt[ek.ni] = xml.body(xi) -- xml.assign(d,k,xi)
+ end
+ end
+ end
+ end
+end
--- 100 * 2500 * "oeps< oeps> oeps&" : gsub:lpeg|lpeg|lpeg
---
--- 1021:0335:0287:0247
+xml.include = include
--- 10 * 1000 * "oeps< oeps> oeps& asfjhalskfjh alskfjh alskfjh alskfjh ;al J;LSFDJ"
---
--- 1559:0257:0288:0190 (last one suggested by roberto)
+--~ local function manipulate(xmldata,pattern,manipulator) -- untested and might go away
+--~ local collected = xmlparseapply({ xmldata },pattern)
+--~ if collected then
+--~ local xmltostring = xml.tostring
+--~ for c=1,#collected do
+--~ local e = collected[c]
+--~ local data = manipulator(xmltostring(e))
+--~ if data == "" then
+--~ epdt[e.ni] = ""
+--~ else
+--~ local xi = xmlinheritedconvert(data,xmldata)
+--~ if not xi then
+--~ epdt[e.ni] = ""
+--~ else
+--~ epdt[e.ni] = xml.body(xi) -- xml.assign(d,k,xi)
+--~ end
+--~ end
+--~ end
+--~ end
+--~ end
--- 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)
+--~ xml.manipulate = manipulate
--- 100 * 1000 * "oeps&lt; oeps&gt; oeps&amp;" : gsub:lpeg == 0153:0280:0151:0080 (last one by roberto)
+function xml.strip_whitespace(root, pattern, nolines) -- strips all leading and trailing space !
+ local collected = xmlparseapply({ root },pattern)
+ if collected then
+ for i=1,#collected do
+ local e = collected[i]
+ local edt = e.dt
+ if edt then
+ local t = { }
+ for i=1,#edt do
+ local str = edt[i]
+ if type(str) == "string" then
+ if str == "" then
+ -- stripped
+ else
+ if nolines then
+ str = gsub(str,"[ \n\r\t]+"," ")
+ end
+ if str == "" then
+ -- stripped
+ else
+ t[#t+1] = str
+ end
+ end
+ else
+ --~ str.ni = i
+ t[#t+1] = str
+ end
+ end
+ e.dt = t
+ end
+ end
+ end
+end
--- 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)
+function xml.strip_whitespace(root, pattern, nolines, anywhere) -- strips all leading and trailing spacing
+ local collected = xmlparseapply({ root },pattern) -- beware, indices no longer are valid now
+ if collected then
+ for i=1,#collected do
+ local e = collected[i]
+ local edt = e.dt
+ if edt then
+ if anywhere then
+ local t = { }
+ for e=1,#edt do
+ local str = edt[e]
+ if type(str) ~= "string" then
+ t[#t+1] = str
+ elseif str ~= "" then
+ -- todo: lpeg for each case
+ if nolines then
+ str = gsub(str,"%s+"," ")
+ end
+ str = gsub(str,"^%s*(.-)%s*$","%1")
+ if str ~= "" then
+ t[#t+1] = str
+ end
+ end
+ end
+ e.dt = t
+ else
+ -- we can assume a regular sparse xml table with no successive strings
+ -- otherwise we should use a while loop
+ if #edt > 0 then
+ -- strip front
+ local str = edt[1]
+ if type(str) ~= "string" then
+ -- nothing
+ elseif str == "" then
+ remove(edt,1)
+ else
+ if nolines then
+ str = gsub(str,"%s+"," ")
+ end
+ str = gsub(str,"^%s+","")
+ if str == "" then
+ remove(edt,1)
+ else
+ edt[1] = str
+ end
+ end
+ end
+ if #edt > 1 then
+ -- strip end
+ local str = edt[#edt]
+ if type(str) ~= "string" then
+ -- nothing
+ elseif str == "" then
+ remove(edt)
+ else
+ if nolines then
+ str = gsub(str,"%s+"," ")
+ end
+ str = gsub(str,"%s+$","")
+ if str == "" then
+ remove(edt)
+ else
+ edt[#edt] = str
+ end
+ end
+ end
+ end
+ end
+ end
+ end
+end
--- 100 * 5000 * "oeps <oeps bla='oeps' foo='bar'> oeps </oeps> oeps " : gsub:lpeg == 623:501 msec (short tags, less difference)
+local function rename_space(root, oldspace, newspace) -- fast variant
+ local ndt = #root.dt
+ 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_space(edt, oldspace, newspace)
+ end
+ end
+ end
+end
-local cleansed = Cs(((P("<") * (1-P(">"))^0 * P(">"))/"" + 1)^0)
+xml.rename_space = rename_space
-xml.escaped_pattern = escaped
-xml.unescaped_pattern = unescaped
-xml.cleansed_pattern = cleansed
+function xml.remap_tag(root, pattern, newtg)
+ local collected = xmlparseapply({ root },pattern)
+ if collected then
+ for c=1,#collected do
+ collected[c].tg = newtg
+ end
+ end
+end
-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
+function xml.remap_namespace(root, pattern, newns)
+ local collected = xmlparseapply({ root },pattern)
+ if collected then
+ for c=1,#collected do
+ collected[c].ns = newns
+ end
+ 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)
+function xml.check_namespace(root, pattern, newns)
+ local collected = xmlparseapply({ root },pattern)
+ if collected then
+ for c=1,#collected do
+ local e = collected[c]
+ if (not e.rn or e.rn == "") and e.ns == "" then
+ e.rn = newns
+ end
end
- if lastseparator then
- return concat(result,separator or "",1,#result-1) .. (lastseparator or "") .. result[#result]
- else
- return concat(result,separator)
+ end
+end
+
+function xml.remap_name(root, pattern, newtg, newns, newrn)
+ local collected = xmlparseapply({ root },pattern)
+ if collected then
+ for c=1,#collected do
+ local e = collected[c]
+ e.tg, e.ns, e.rn = newtg, newns, newrn
end
- else
- return ""
end
end
+--[[ldx--
+<p>Here are a few synonyms.</p>
+--ldx]]--
+
+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
+
end -- of closure
do -- create closure to overcome 200 locals limit
-if not modules then modules = { } end modules ['trac-tra'] = {
+if not modules then modules = { } end modules ['lxml-xml'] = {
version = 1.001,
- comment = "companion to luat-lib.tex",
+ 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"
}
--- the <anonymous> tag is kind of generic and used for functions that are not
--- bound to a variable, like node.new, node.copy etc (contrary to for instance
--- node.has_attribute which is bound to a has_attribute local variable in mkiv)
+local finalizers = xml.finalizers.xml
+local xmlfilter = xml.filter -- we could inline this one for speed
+local xmltostring = xml.tostring
+local xmlserialize = xml.serialize
-debugger = debugger or { }
+local function first(collected) -- wrong ?
+ return collected and collected[1]
+end
-local counters = { }
-local names = { }
-local getinfo = debug.getinfo
-local format, find, lower, gmatch = string.format, string.find, string.lower, string.gmatch
+local function last(collected)
+ return collected and collected[#collected]
+end
--- one
+local function all(collected)
+ return collected
+end
-local function hook()
- local f = getinfo(2,"f").func
- local n = getinfo(2,"Sn")
--- if n.what == "C" and n.name then print (n.namewhat .. ': ' .. n.name) end
- if f then
- local cf = counters[f]
- if cf == nil then
- counters[f] = 1
- names[f] = n
- else
- counters[f] = cf + 1
+local function reverse(collected)
+ if collected then
+ local reversed = { }
+ for c=#collected,1,-1 do
+ reversed[#reversed+1] = collected[c]
end
+ return reversed
end
end
-local function getname(func)
- local n = names[func]
- if n then
- if n.what == "C" then
- return n.name or '<anonymous>'
- 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 format("%s : %s : %s", n.short_src or "unknown source", n.linedefined or "--", name)
- end
- else
- return "unknown"
+
+local function attribute(collected,name)
+ if collected and #collected > 0 then
+ local at = collected[1].at
+ return at and at[name]
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
- -- table.sort(counters)
- for func, count in pairs(counters) do
- if count > threshold then
- local name = getname(func)
- if not name:find("for generator") then
- printer(format("%8i %s", count, name))
- total = total + count
- end
- end
- grandtotal = grandtotal + count
- functions = functions + 1
- end
- printer(format("functions: %s, total: %s, grand total: %s, threshold: %s\n", functions, total, grandtotal, threshold))
+
+local function att(id,name)
+ local at = id.at
+ return at and at[name]
end
--- two
+local function count(collected)
+ return (collected and #collected) or 0
+end
---~ local function hook()
---~ local n = getinfo(2)
---~ if n.what=="C" and not n.name then
---~ local f = tostring(debug.traceback())
---~ local cf = counters[f]
---~ if cf == nil then
---~ counters[f] = 1
---~ names[f] = n
---~ else
---~ counters[f] = cf + 1
---~ end
---~ 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
---~ -- table.sort(counters)
---~ for func, count in pairs(counters) do
---~ if count > threshold then
---~ printer(format("%8i %s", count, func))
---~ total = total + count
---~ end
---~ grandtotal = grandtotal + count
---~ functions = functions + 1
---~ end
---~ printer(format("functions: %s, total: %s, grand total: %s, threshold: %s\n", functions, total, grandtotal, threshold))
---~ end
+local function position(collected,n)
+ if collected then
+ n = tonumber(n) or 0
+ if n < 0 then
+ return collected[#collected + n + 1]
+ elseif n > 0 then
+ return collected[n]
+ else
+ return collected[1].mi or 0
+ end
+ end
+end
--- rest
+local function match(collected)
+ return (collected and collected[1].mi) or 0 -- match
+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()
+local function index(collected)
+ if collected then
+ return collected[1].ni
end
end
-function debugger.enable()
- debug.sethook(hook,"c")
+local function attributes(collected,arguments)
+ if collected then
+ local at = collected[1].at
+ if arguments then
+ return at[arguments]
+ elseif next(at) then
+ return at -- all of them
+ end
+ end
end
-function debugger.disable()
- debug.sethook()
---~ counters[debug.getinfo(2,"f").func] = nil
+local function chainattribute(collected,arguments) -- todo: optional levels
+ if collected then
+ local e = collected[1]
+ while e do
+ local at = e.at
+ if at then
+ local a = at[arguments]
+ if a then
+ return a
+ end
+ else
+ break -- error
+ end
+ e = e.__p__
+ end
+ end
+ return ""
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
+local function raw(collected) -- hybrid
+ if collected then
+ local e = collected[1] or collected
+ return (e and xmlserialize(e)) or "" -- only first as we cannot concat function
else
- function debugger.tracing() return false end ; return false
+ return ""
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)
-
-trackers = trackers or { }
+local function text(collected) -- hybrid
+ if collected then
+ local e = collected[1] or collected
+ return (e and xmltostring(e.dt)) or ""
+ else
+ return ""
+ end
+end
-local data, done = { }, { }
+local function texts(collected)
+ if collected then
+ local t = { }
+ for c=1,#collected do
+ local e = collection[c]
+ if e and e.dt then
+ t[#t+1] = e.dt
+ end
+ end
+ return t
+ end
+end
-local function set(what,value)
- if type(what) == "string" then
- what = aux.settings_to_array(what)
+local function tag(collected,n)
+ if collected then
+ local c
+ if n == 0 or not n then
+ c = collected[1]
+ elseif n > 1 then
+ c = collected[n]
+ else
+ c = collected[#collected-n+1]
+ end
+ return c and c.tg
end
- for i=1,#what do
- local w = what[i]
- for d, f in next, data do
- if done[d] then
- -- prevent recursion due to wildcards
- elseif find(d,w) then
- done[d] = true
- for i=1,#f do
- f[i](value)
- end
+end
+
+local function name(collected,n)
+ if collected then
+ local c
+ if n == 0 or not n then
+ c = collected[1]
+ elseif n > 1 then
+ c = collected[n]
+ else
+ c = collected[#collected-n+1]
+ end
+ if c then
+ if c.ns == "" then
+ return c.tg
+ else
+ return c.ns .. ":" .. c.tg
end
end
end
end
-local function reset()
- for d, f in next, data do
- for i=1,#f do
- f[i](false)
+local function tags(collected,nonamespace)
+ if collected then
+ local t = { }
+ for c=1,#collected do
+ local e = collected[c]
+ local ns, tg = e.ns, e.tg
+ if nonamespace or ns == "" then
+ t[#t+1] = tg
+ else
+ t[#t+1] = ns .. ":" .. tg
+ end
end
+ return t
end
end
-function trackers.register(what,...)
- what = lower(what)
- local w = data[what]
- if not w then
- w = { }
- data[what] = w
- end
- for _, fnc in next, { ... } do
- local typ = type(fnc)
- if typ == "function" then
- w[#w+1] = fnc
- elseif typ == "string" then
- w[#w+1] = function(value) set(fnc,value,nesting) end
+local function empty(collected)
+ if collected then
+ for c=1,#collected do
+ local e = collected[c]
+ if e then
+ local edt = e.dt
+ if edt then
+ local n = #edt
+ if n == 1 then
+ local edk = edt[1]
+ local typ = type(edk)
+ if typ == "table" then
+ return false
+ elseif edk ~= "" then -- maybe an extra tester for spacing only
+ return false
+ end
+ elseif n > 1 then
+ return false
+ end
+ end
+ end
end
end
+ return true
end
-function trackers.enable(what)
- done = { }
- set(what,true)
+finalizers.first = first
+finalizers.last = last
+finalizers.all = all
+finalizers.reverse = reverse
+finalizers.elements = all
+finalizers.default = all
+finalizers.attribute = attribute
+finalizers.att = att
+finalizers.count = count
+finalizers.position = position
+finalizers.match = match
+finalizers.index = index
+finalizers.attributes = attributes
+finalizers.chainattribute = chainattribute
+finalizers.text = text
+finalizers.texts = texts
+finalizers.tag = tag
+finalizers.name = name
+finalizers.tags = tags
+finalizers.empty = empty
+
+-- shortcuts -- we could support xmlfilter(id,pattern,first)
+
+function xml.first(id,pattern)
+ return first(xmlfilter(id,pattern))
end
-function trackers.disable(what)
- done = { }
- if not what or what == "" then
- trackers.reset(what)
+function xml.last(id,pattern)
+ return last(xmlfilter(id,pattern))
+end
+
+function xml.count(id,pattern)
+ return count(xmlfilter(id,pattern))
+end
+
+function xml.attribute(id,pattern,a,default)
+ return attribute(xmlfilter(id,pattern),a,default)
+end
+
+function xml.raw(id,pattern)
+ if pattern then
+ return raw(xmlfilter(id,pattern))
else
- set(what,false)
+ return raw(id)
end
end
-function trackers.reset(what)
- done = { }
- reset()
+function xml.text(id,pattern)
+ if pattern then
+ -- return text(xmlfilter(id,pattern))
+ local collected = xmlfilter(id,pattern)
+ return (collected and xmltostring(collected[1].dt)) or ""
+ elseif id then
+ -- return text(id)
+ return xmltostring(id.dt) or ""
+ else
+ return ""
+ end
end
-function trackers.list() -- pattern
- local list = table.sortedkeys(data)
- local user, system = { }, { }
- for l=1,#list do
- local what = list[l]
- if find(what,"^%*") then
- system[#system+1] = what
- else
- user[#user+1] = what
- end
- end
- return user, system
+xml.content = text
+
+function xml.position(id,pattern,n) -- element
+ return position(xmlfilter(id,pattern),n)
+end
+
+function xml.match(id,pattern) -- number
+ return match(xmlfilter(id,pattern))
+end
+
+function xml.empty(id,pattern)
+ return empty(xmlfilter(id,pattern))
end
+xml.all = xml.filter
+xml.index = xml.position
+xml.found = xml.filter
+
end -- of closure
@@ -5667,7 +7287,7 @@ do -- create closure to overcome 200 locals limit
if not modules then modules = { } end modules ['luat-env'] = {
version = 1.001,
- comment = "companion to luat-lib.tex",
+ comment = "companion to luat-lib.mkiv",
author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
copyright = "PRAGMA ADE / ConTeXt Development Team",
license = "see context related readme files"
@@ -5679,10 +7299,10 @@ if not modules then modules = { } end modules ['luat-env'] = {
-- evolved before bytecode arrays were available and so a lot of
-- code has disappeared already.
-local trace_verbose = false trackers.register("resolvers.verbose", function(v) trace_verbose = v end)
-local trace_locating = false trackers.register("resolvers.locating", function(v) trace_locating = v trackers.enable("resolvers.verbose") end)
+local trace_locating = false trackers.register("resolvers.locating", function(v) trace_locating = v end)
-local format = string.format
+local format, sub, match, gsub, find = string.format, string.sub, string.match, string.gsub, string.find
+local unquote, quote = string.unquote, string.quote
-- precautions
@@ -5716,13 +7336,14 @@ if not environment.jobname then environ
function environment.initialize_arguments(arg)
local arguments, files = { }, { }
environment.arguments, environment.files, environment.sortedflags = arguments, files, nil
- for index, argument in pairs(arg) do
+ for index=1,#arg do
+ local argument = arg[index]
if index > 0 then
- local flag, value = argument:match("^%-+(.+)=(.-)$")
+ local flag, value = match(argument,"^%-+(.-)=(.-)$")
if flag then
- arguments[flag] = string.unquote(value or "")
+ arguments[flag] = unquote(value or "")
else
- flag = argument:match("^%-+(.+)")
+ flag = match(argument,"^%-+(.+)")
if flag then
arguments[flag] = true
else
@@ -5749,25 +7370,30 @@ function environment.argument(name,partial)
return arguments[name]
elseif partial then
if not sortedflags then
- sortedflags = { }
- for _,v in pairs(table.sortedkeys(arguments)) do
- sortedflags[#sortedflags+1] = "^" .. v
+ sortedflags = table.sortedkeys(arguments)
+ for k=1,#sortedflags do
+ sortedflags[k] = "^" .. sortedflags[k]
end
environment.sortedflags = sortedflags
end
-- example of potential clash: ^mode ^modefile
- for _,v in ipairs(sortedflags) do
- if name:find(v) then
- return arguments[v:sub(2,#v)]
+ for k=1,#sortedflags do
+ local v = sortedflags[k]
+ if find(name,v) then
+ return arguments[sub(v,2,#v)]
end
end
end
return nil
end
+environment.argument("x",true)
+
function environment.split_arguments(separator) -- rather special, cut-off before separator
local done, before, after = false, { }, { }
- for _,v in ipairs(environment.original_arguments) do
+ local original_arguments = environment.original_arguments
+ for k=1,#original_arguments do
+ local v = original_arguments[k]
if not done and v == separator then
done = true
elseif done then
@@ -5784,16 +7410,17 @@ function environment.reconstruct_commandline(arg,noquote)
if noquote and #arg == 1 then
local a = arg[1]
a = resolvers.resolve(a)
- a = a:unquote()
+ a = unquote(a)
return a
- elseif next(arg) then
+ elseif #arg > 0 then
local result = { }
- for _,a in ipairs(arg) do -- ipairs 1 .. #n
+ for i=1,#arg do
+ local a = arg[i]
a = resolvers.resolve(a)
- a = a:unquote()
- a = a:gsub('"','\\"') -- tricky
- if a:find(" ") then
- result[#result+1] = a:quote()
+ a = unquote(a)
+ a = gsub(a,'"','\\"') -- tricky
+ if find(a," ") then
+ result[#result+1] = quote(a)
else
result[#result+1] = a
end
@@ -5806,17 +7433,18 @@ end
if arg then
- -- new, reconstruct quoted snippets (maybe better just remnove the " then and add them later)
+ -- new, reconstruct quoted snippets (maybe better just remove the " then and add them later)
local newarg, instring = { }, false
- for index, argument in ipairs(arg) do
- if argument:find("^\"") then
- newarg[#newarg+1] = argument:gsub("^\"","")
- if not argument:find("\"$") then
+ for index=1,#arg do
+ local argument = arg[index]
+ if find(argument,"^\"") then
+ newarg[#newarg+1] = gsub(argument,"^\"","")
+ if not find(argument,"\"$") then
instring = true
end
- elseif argument:find("\"$") then
- newarg[#newarg] = newarg[#newarg] .. " " .. argument:gsub("\"$","")
+ elseif find(argument,"\"$") then
+ newarg[#newarg] = newarg[#newarg] .. " " .. gsub(argument,"\"$","")
instring = false
elseif instring then
newarg[#newarg] = newarg[#newarg] .. " " .. argument
@@ -5871,12 +7499,12 @@ function environment.luafilechunk(filename) -- used for loading lua bytecode in
filename = file.replacesuffix(filename, "lua")
local fullname = environment.luafile(filename)
if fullname and fullname ~= "" then
- if trace_verbose then
+ if trace_locating then
logs.report("fileio","loading file %s", fullname)
end
return environment.loadedluacode(fullname)
else
- if trace_verbose then
+ if trace_locating then
logs.report("fileio","unknown file %s", filename)
end
return nil
@@ -5896,7 +7524,7 @@ function environment.loadluafile(filename, version)
-- when not overloaded by explicit suffix we look for a luc file first
local fullname = (lucname and environment.luafile(lucname)) or ""
if fullname ~= "" then
- if trace_verbose then
+ if trace_locating then
logs.report("fileio","loading %s", fullname)
end
chunk = loadfile(fullname) -- this way we don't need a file exists check
@@ -5914,7 +7542,7 @@ function environment.loadluafile(filename, version)
if v == version then
return true
else
- if trace_verbose then
+ if trace_locating then
logs.report("fileio","version mismatch for %s: lua=%s, luc=%s", filename, v, version)
end
environment.loadluafile(filename)
@@ -5925,12 +7553,12 @@ function environment.loadluafile(filename, version)
end
fullname = (luaname and environment.luafile(luaname)) or ""
if fullname ~= "" then
- if trace_verbose then
+ if trace_locating then
logs.report("fileio","loading %s", fullname)
end
chunk = loadfile(fullname) -- this way we don't need a file exists check
if not chunk then
- if verbose then
+ if trace_locating then
logs.report("fileio","unknown file %s", filename)
end
else
@@ -5948,7 +7576,7 @@ do -- create closure to overcome 200 locals limit
if not modules then modules = { } end modules ['trac-inf'] = {
version = 1.001,
- comment = "companion to luat-lib.tex",
+ comment = "companion to trac-inf.mkiv",
author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
copyright = "PRAGMA ADE / ConTeXt Development Team",
license = "see context related readme files"
@@ -5973,6 +7601,14 @@ function statistics.hastimer(instance)
return instance and instance.starttime
end
+function statistics.resettiming(instance)
+ if not instance then
+ notimer = { timing = 0, loadtime = 0 }
+ else
+ instance.timing, instance.loadtime = 0, 0
+ end
+end
+
function statistics.starttiming(instance)
if not instance then
notimer = { }
@@ -5987,6 +7623,8 @@ function statistics.starttiming(instance)
if not instance.loadtime then
instance.loadtime = 0
end
+ else
+--~ logs.report("system","nested timing (%s)",tostring(instance))
end
instance.timing = it + 1
end
@@ -6032,6 +7670,12 @@ function statistics.elapsedindeed(instance)
return t > statistics.threshold
end
+function statistics.elapsedseconds(instance,rest) -- returns nil if 0 seconds
+ if statistics.elapsedindeed(instance) then
+ return format("%s seconds %s", statistics.elapsedtime(instance),rest or "")
+ end
+end
+
-- general function
function statistics.register(tag,fnc)
@@ -6110,14 +7754,32 @@ function statistics.timed(action,report)
report("total runtime: %s",statistics.elapsedtime(timer))
end
+-- where, not really the best spot for this:
+
+commands = commands or { }
+
+local timer
+
+function commands.resettimer()
+ statistics.resettiming(timer)
+ statistics.starttiming(timer)
+end
+
+function commands.elapsedtime()
+ statistics.stoptiming(timer)
+ tex.sprint(statistics.elapsedtime(timer))
+end
+
+commands.resettimer()
+
end -- of closure
do -- create closure to overcome 200 locals limit
-if not modules then modules = { } end modules ['luat-log'] = {
+if not modules then modules = { } end modules ['trac-log'] = {
version = 1.001,
- comment = "companion to luat-lib.tex",
+ comment = "companion to trac-log.mkiv",
author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
copyright = "PRAGMA ADE / ConTeXt Development Team",
license = "see context related readme files"
@@ -6125,7 +7787,11 @@ if not modules then modules = { } end modules ['luat-log'] = {
-- this is old code that needs an overhaul
-local write_nl, write, format = texio.write_nl or print, texio.write or io.write, string.format
+--~ io.stdout:setvbuf("no")
+--~ io.stderr:setvbuf("no")
+
+local write_nl, write = texio.write_nl or print, texio.write or io.write
+local format, gmatch = string.format, string.gmatch
local texcount = tex and tex.count
if texlua then
@@ -6206,25 +7872,48 @@ function logs.tex.line(fmt,...) -- new
end
end
+--~ function logs.tex.start_page_number()
+--~ local real, user, sub = texcount.realpageno, texcount.userpageno, texcount.subpageno
+--~ if real > 0 then
+--~ if user > 0 then
+--~ if sub > 0 then
+--~ write(format("[%s.%s.%s",real,user,sub))
+--~ else
+--~ write(format("[%s.%s",real,user))
+--~ end
+--~ else
+--~ write(format("[%s",real))
+--~ end
+--~ else
+--~ write("[-")
+--~ end
+--~ end
+
+--~ function logs.tex.stop_page_number()
+--~ write("]")
+--~ end
+
+local real, user, sub
+
function logs.tex.start_page_number()
- local real, user, sub = texcount.realpageno, texcount.userpageno, texcount.subpageno
+ real, user, sub = texcount.realpageno, texcount.userpageno, texcount.subpageno
+end
+
+function logs.tex.stop_page_number()
if real > 0 then
if user > 0 then
if sub > 0 then
- write(format("[%s.%s.%s",real,user,sub))
+ logs.report("pages", "flushing realpage %s, userpage %s, subpage %s",real,user,sub)
else
- write(format("[%s.%s",real,user))
+ logs.report("pages", "flushing realpage %s, userpage %s",real,user)
end
else
- write(format("[%s",real))
+ logs.report("pages", "flushing realpage %s",real)
end
else
- write("[-")
+ logs.report("pages", "flushing page")
end
-end
-
-function logs.tex.stop_page_number()
- write("]")
+ io.flush()
end
logs.tex.report_job_stat = statistics.show_job_stat
@@ -6324,7 +8013,7 @@ end
function logs.setprogram(_name_,_banner_,_verbose_)
name, banner = _name_, _banner_
if _verbose_ then
- trackers.enable("resolvers.verbose")
+ trackers.enable("resolvers.locating")
end
logs.set_method("tex")
logs.report = report -- also used in libraries
@@ -6337,9 +8026,9 @@ end
function logs.setverbose(what)
if what then
- trackers.enable("resolvers.verbose")
+ trackers.enable("resolvers.locating")
else
- trackers.disable("resolvers.verbose")
+ trackers.disable("resolvers.locating")
end
logs.verbose = what or false
end
@@ -6356,7 +8045,7 @@ logs.report = logs.tex.report
logs.simple = logs.tex.report
function logs.reportlines(str) -- todo: <lines></lines>
- for line in str:gmatch("(.-)[\n\r]") do
+ for line in gmatch(str,"(.-)[\n\r]") do
logs.report(line)
end
end
@@ -6367,8 +8056,12 @@ end
logs.simpleline = logs.reportline
-function logs.help(message,option)
+function logs.reportbanner() -- for scripts too
logs.report(banner)
+end
+
+function logs.help(message,option)
+ logs.reportbanner()
logs.reportline()
logs.reportlines(message)
local moreinfo = logs.moreinfo or ""
@@ -6400,6 +8093,11 @@ end
--~ logs.system(syslogname,"context","test","fonts","font %s recached due to newer version (%s)","blabla","123")
--~ end
+function logs.fatal(where,...)
+ logs.report(where,"fatal error: %s, aborting now",format(...))
+ os.exit()
+end
+
end -- of closure
@@ -6407,10 +8105,10 @@ do -- create closure to overcome 200 locals limit
if not modules then modules = { } end modules ['data-inp'] = {
version = 1.001,
+ comment = "companion to luat-lib.mkiv",
author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
copyright = "PRAGMA ADE / ConTeXt Development Team",
license = "see context related readme files",
- comment = "companion to luat-lib.tex",
}
-- After a few years using the code the large luat-inp.lua file
@@ -6422,7 +8120,7 @@ if not modules then modules = { } end modules ['data-inp'] = {
-- * some public auxiliary functions were made private
--
-- TODO: os.getenv -> os.env[]
--- TODO: instances.[hashes,cnffiles,configurations,522] -> ipairs (alles check, sneller)
+-- TODO: instances.[hashes,cnffiles,configurations,522]
-- TODO: check escaping in find etc, too much, too slow
-- This lib is multi-purpose and can be loaded again later on so that
@@ -6443,12 +8141,13 @@ if not modules then modules = { } end modules ['data-inp'] = {
local format, gsub, find, lower, upper, match, gmatch = string.format, string.gsub, string.find, string.lower, string.upper, string.match, string.gmatch
local concat, insert, sortedkeys = table.concat, table.insert, table.sortedkeys
local next, type = next, type
+local lpegmatch = lpeg.match
-local trace_locating, trace_detail, trace_verbose = false, false, false
+local trace_locating, trace_detail, trace_expansions = false, false, false
-trackers.register("resolvers.verbose", function(v) trace_verbose = v end)
-trackers.register("resolvers.locating", function(v) trace_locating = v trackers.enable("resolvers.verbose") end)
-trackers.register("resolvers.detail", function(v) trace_detail = v trackers.enable("resolvers.verbose,resolvers.detail") end)
+trackers.register("resolvers.locating", function(v) trace_locating = v end)
+trackers.register("resolvers.details", function(v) trace_detail = v end)
+trackers.register("resolvers.expansions", function(v) trace_expansions = v end) -- todo
if not resolvers then
resolvers = {
@@ -6472,7 +8171,7 @@ resolvers.generators.notfound = { nil }
resolvers.cacheversion = '1.0.1'
resolvers.cnfname = 'texmf.cnf'
resolvers.luaname = 'texmfcnf.lua'
-resolvers.homedir = os.env[os.platform == "windows" and 'USERPROFILE'] or os.env['HOME'] or '~'
+resolvers.homedir = os.env[os.type == "windows" and 'USERPROFILE'] or os.env['HOME'] or '~'
resolvers.cnfdefault = '{$SELFAUTODIR,$SELFAUTOPARENT}{,{/share,}/texmf{-local,.local,}/web2c}'
local dummy_path_expr = "^!*unset/*$"
@@ -6514,8 +8213,8 @@ suffixes['lua'] = { 'lua', 'luc', 'tma', 'tmc' }
alternatives['map files'] = 'map'
alternatives['enc files'] = 'enc'
-alternatives['cid files'] = 'cid'
-alternatives['fea files'] = 'fea'
+alternatives['cid maps'] = 'cid' -- great, why no cid files
+alternatives['font feature files'] = 'fea' -- and fea files here
alternatives['opentype fonts'] = 'otf'
alternatives['truetype fonts'] = 'ttf'
alternatives['truetype collections'] = 'ttc'
@@ -6531,6 +8230,11 @@ formats ['sfd'] = 'SFDFONTS'
suffixes ['sfd'] = { 'sfd' }
alternatives['subfont definition files'] = 'sfd'
+-- lib paths
+
+formats ['lib'] = 'CLUAINPUTS' -- new (needs checking)
+suffixes['lib'] = (os.libsuffix and { os.libsuffix }) or { 'dll', 'so' }
+
-- In practice we will work within one tds tree, but i want to keep
-- the option open to build tools that look at multiple trees, which is
-- why we keep the tree specific data in a table. We used to pass the
@@ -6653,8 +8357,10 @@ local function check_configuration() -- not yet ok, no time for debugging now
-- bad luck
end
fix("LUAINPUTS" , ".;$TEXINPUTS;$TEXMFSCRIPTS") -- no progname, hm
- fix("FONTFEATURES", ".;$TEXMF/fonts/fea//;$OPENTYPEFONTS;$TTFONTS;$T1FONTS;$AFMFONTS")
- fix("FONTCIDMAPS" , ".;$TEXMF/fonts/cid//;$OPENTYPEFONTS;$TTFONTS;$T1FONTS;$AFMFONTS")
+ -- this will go away some day
+ fix("FONTFEATURES", ".;$TEXMF/fonts/{data,fea}//;$OPENTYPEFONTS;$TTFONTS;$T1FONTS;$AFMFONTS")
+ fix("FONTCIDMAPS" , ".;$TEXMF/fonts/{data,cid}//;$OPENTYPEFONTS;$TTFONTS;$T1FONTS;$AFMFONTS")
+ --
fix("LUATEXLIBS" , ".;$TEXMF/luatex/lua//")
end
@@ -6669,7 +8375,7 @@ function resolvers.settrace(n) -- no longer number but: 'locating' or 'detail'
end
end
-resolvers.settrace(os.getenv("MTX.resolvers.TRACE") or os.getenv("MTX_INPUT_TRACE"))
+resolvers.settrace(os.getenv("MTX_INPUT_TRACE"))
function resolvers.osenv(key)
local ie = instance.environment
@@ -6757,37 +8463,43 @@ end
-- work that well; the parsing is ok, but dealing with the resulting
-- table is a pain because we need to work inside-out recursively
+local function do_first(a,b)
+ local t = { }
+ for s in gmatch(b,"[^,]+") do t[#t+1] = a .. s end
+ return "{" .. concat(t,",") .. "}"
+end
+
+local function do_second(a,b)
+ local t = { }
+ for s in gmatch(a,"[^,]+") do t[#t+1] = s .. b end
+ return "{" .. concat(t,",") .. "}"
+end
+
+local function do_both(a,b)
+ local t = { }
+ for sa in gmatch(a,"[^,]+") do
+ for sb in gmatch(b,"[^,]+") do
+ t[#t+1] = sa .. sb
+ end
+ end
+ return "{" .. concat(t,",") .. "}"
+end
+
+local function do_three(a,b,c)
+ return a .. b.. c
+end
+
local function splitpathexpr(str, t, validate)
-- no need for further optimization as it is only called a
- -- few times, we can use lpeg for the sub; we could move
- -- the local functions outside the body
+ -- few times, we can use lpeg for the sub
+ if trace_expansions then
+ logs.report("fileio","expanding variable '%s'",str)
+ end
t = t or { }
str = gsub(str,",}",",@}")
str = gsub(str,"{,","{@,")
-- str = "@" .. str .. "@"
local ok, done
- local function do_first(a,b)
- local t = { }
- for s in gmatch(b,"[^,]+") do t[#t+1] = a .. s end
- return "{" .. concat(t,",") .. "}"
- end
- local function do_second(a,b)
- local t = { }
- for s in gmatch(a,"[^,]+") do t[#t+1] = s .. b end
- return "{" .. concat(t,",") .. "}"
- end
- local function do_both(a,b)
- local t = { }
- for sa in gmatch(a,"[^,]+") do
- for sb in gmatch(b,"[^,]+") do
- t[#t+1] = sa .. sb
- end
- end
- return "{" .. concat(t,",") .. "}"
- end
- local function do_three(a,b,c)
- return a .. b.. c
- end
while true do
done = false
while true do
@@ -6818,6 +8530,11 @@ local function splitpathexpr(str, t, validate)
t[#t+1] = s
end
end
+ if trace_expansions then
+ for k=1,#t do
+ logs.report("fileio","% 4i: %s",k,t[k])
+ end
+ end
return t
end
@@ -6857,18 +8574,27 @@ end
-- also we now follow the stupid route: if not set then just assume *one*
-- cnf file under texmf (i.e. distribution)
-resolvers.ownpath = resolvers.ownpath or nil
-resolvers.ownbin = resolvers.ownbin or arg[-2] or arg[-1] or arg[0] or "luatex"
-resolvers.autoselfdir = true -- false may be handy for debugging
+local args = environment and environment.original_arguments or arg -- this needs a cleanup
+
+resolvers.ownbin = resolvers.ownbin or args[-2] or arg[-2] or args[-1] or arg[-1] or arg[0] or "luatex"
+resolvers.ownbin = gsub(resolvers.ownbin,"\\","/")
function resolvers.getownpath()
- if not resolvers.ownpath then
- if resolvers.autoselfdir and os.selfdir then
- resolvers.ownpath = os.selfdir
- else
- local binary = resolvers.ownbin
- if os.platform == "windows" then
- binary = file.replacesuffix(binary,"exe")
+ local ownpath = resolvers.ownpath or os.selfdir
+ if not ownpath or ownpath == "" or ownpath == "unset" then
+ ownpath = args[-1] or arg[-1]
+ ownpath = ownpath and file.dirname(gsub(ownpath,"\\","/"))
+ if not ownpath or ownpath == "" then
+ ownpath = args[-0] or arg[-0]
+ ownpath = ownpath and file.dirname(gsub(ownpath,"\\","/"))
+ end
+ local binary = resolvers.ownbin
+ if not ownpath or ownpath == "" then
+ ownpath = ownpath and file.dirname(binary)
+ end
+ if not ownpath or ownpath == "" then
+ if os.binsuffix ~= "" then
+ binary = file.replacesuffix(binary,os.binsuffix)
end
for p in gmatch(os.getenv("PATH"),"[^"..io.pathseparator.."]+") do
local b = file.join(p,binary)
@@ -6880,30 +8606,39 @@ function resolvers.getownpath()
local olddir = lfs.currentdir()
if lfs.chdir(p) then
local pp = lfs.currentdir()
- if trace_verbose and p ~= pp then
- logs.report("fileio","following symlink %s to %s",p,pp)
+ if trace_locating and p ~= pp then
+ logs.report("fileio","following symlink '%s' to '%s'",p,pp)
end
- resolvers.ownpath = pp
+ ownpath = pp
lfs.chdir(olddir)
else
- if trace_verbose then
- logs.report("fileio","unable to check path %s",p)
+ if trace_locating then
+ logs.report("fileio","unable to check path '%s'",p)
end
- resolvers.ownpath = p
+ ownpath = p
end
break
end
end
end
- if not resolvers.ownpath then resolvers.ownpath = '.' end
+ if not ownpath or ownpath == "" then
+ ownpath = "."
+ logs.report("fileio","forcing fallback ownpath .")
+ elseif trace_locating then
+ logs.report("fileio","using ownpath '%s'",ownpath)
+ end
+ end
+ resolvers.ownpath = ownpath
+ function resolvers.getownpath()
+ return resolvers.ownpath
end
- return resolvers.ownpath
+ return ownpath
end
local own_places = { "SELFAUTOLOC", "SELFAUTODIR", "SELFAUTOPARENT", "TEXMFCNF" }
local function identify_own()
- local ownpath = resolvers.getownpath() or lfs.currentdir()
+ local ownpath = resolvers.getownpath() or dir.current()
local ie = instance.environment
if ownpath then
if resolvers.env('SELFAUTOLOC') == "" then os.env['SELFAUTOLOC'] = file.collapse_path(ownpath) end
@@ -6916,10 +8651,10 @@ local function identify_own()
if resolvers.env('TEXMFCNF') == "" then os.env['TEXMFCNF'] = resolvers.cnfdefault end
if resolvers.env('TEXOS') == "" then os.env['TEXOS'] = resolvers.env('SELFAUTODIR') end
if resolvers.env('TEXROOT') == "" then os.env['TEXROOT'] = resolvers.env('SELFAUTOPARENT') end
- if trace_verbose then
+ if trace_locating then
for i=1,#own_places do
local v = own_places[i]
- logs.report("fileio","variable %s set to %s",v,resolvers.env(v) or "unknown")
+ logs.report("fileio","variable '%s' set to '%s'",v,resolvers.env(v) or "unknown")
end
end
identify_own = function() end
@@ -6951,10 +8686,8 @@ end
local function load_cnf_file(fname)
fname = resolvers.clean_path(fname)
local lname = file.replacesuffix(fname,'lua')
- local f = io.open(lname)
- if f then -- this will go
- f:close()
- local dname = file.dirname(fname)
+ if lfs.isfile(lname) then
+ local dname = file.dirname(fname) -- fname ?
if not instance.configuration[dname] then
resolvers.load_data(dname,'configuration',lname and file.basename(lname))
instance.order[#instance.order+1] = instance.configuration[dname]
@@ -6962,8 +8695,8 @@ local function load_cnf_file(fname)
else
f = io.open(fname)
if f then
- if trace_verbose then
- logs.report("fileio","loading %s", fname)
+ if trace_locating then
+ logs.report("fileio","loading configuration file %s", fname)
end
local line, data, n, k, v
local dname = file.dirname(fname)
@@ -6997,14 +8730,16 @@ local function load_cnf_file(fname)
end
end
f:close()
- elseif trace_verbose then
- logs.report("fileio","skipping %s", fname)
+ elseif trace_locating then
+ logs.report("fileio","skipping configuration file '%s'", fname)
end
end
end
local function collapse_cnf_data() -- potential optimization: pass start index (setup and configuration are shared)
- for _,c in ipairs(instance.order) do
+ local order = instance.order
+ for i=1,#order do
+ local c = order[i]
for k,v in next, c do
if not instance.variables[k] then
if instance.environment[k] then
@@ -7020,19 +8755,24 @@ end
function resolvers.load_cnf()
local function loadoldconfigdata()
- for _, fname in ipairs(instance.cnffiles) do
- load_cnf_file(fname)
+ local cnffiles = instance.cnffiles
+ for i=1,#cnffiles do
+ load_cnf_file(cnffiles[i])
end
end
-- instance.cnffiles contain complete names now !
+ -- we still use a funny mix of cnf and new but soon
+ -- we will switch to lua exclusively as we only use
+ -- the file to collect the tree roots
if #instance.cnffiles == 0 then
- if trace_verbose then
+ if trace_locating then
logs.report("fileio","no cnf files found (TEXMFCNF may not be set/known)")
end
else
- instance.rootpath = instance.cnffiles[1]
- for k,fname in ipairs(instance.cnffiles) do
- instance.cnffiles[k] = file.collapse_path(gsub(fname,"\\",'/'))
+ local cnffiles = instance.cnffiles
+ instance.rootpath = cnffiles[1]
+ for k=1,#cnffiles do
+ instance.cnffiles[k] = file.collapse_path(cnffiles[k])
end
for i=1,3 do
instance.rootpath = file.dirname(instance.rootpath)
@@ -7060,8 +8800,9 @@ function resolvers.load_lua()
-- yet harmless
else
instance.rootpath = instance.luafiles[1]
- for k,fname in ipairs(instance.luafiles) do
- instance.luafiles[k] = file.collapse_path(gsub(fname,"\\",'/'))
+ local luafiles = instance.luafiles
+ for k=1,#luafiles do
+ instance.luafiles[k] = file.collapse_path(luafiles[k])
end
for i=1,3 do
instance.rootpath = file.dirname(instance.rootpath)
@@ -7093,14 +8834,14 @@ end
function resolvers.append_hash(type,tag,name)
if trace_locating then
- logs.report("fileio","= hash append: %s",tag)
+ logs.report("fileio","hash '%s' appended",tag)
end
insert(instance.hashes, { ['type']=type, ['tag']=tag, ['name']=name } )
end
function resolvers.prepend_hash(type,tag,name)
if trace_locating then
- logs.report("fileio","= hash prepend: %s",tag)
+ logs.report("fileio","hash '%s' prepended",tag)
end
insert(instance.hashes, 1, { ['type']=type, ['tag']=tag, ['name']=name } )
end
@@ -7124,9 +8865,11 @@ end
-- locators
function resolvers.locatelists()
- for _, path in ipairs(resolvers.clean_path_list('TEXMF')) do
- if trace_verbose then
- logs.report("fileio","locating list of %s",path)
+ local texmfpaths = resolvers.clean_path_list('TEXMF')
+ for i=1,#texmfpaths do
+ local path = texmfpaths[i]
+ if trace_locating then
+ logs.report("fileio","locating list of '%s'",path)
end
resolvers.locatedatabase(file.collapse_path(path))
end
@@ -7139,11 +8882,11 @@ end
function resolvers.locators.tex(specification)
if specification and specification ~= '' and lfs.isdir(specification) then
if trace_locating then
- logs.report("fileio",'! tex locator found: %s',specification)
+ logs.report("fileio","tex locator '%s' found",specification)
end
resolvers.append_hash('file',specification,filename)
elseif trace_locating then
- logs.report("fileio",'? tex locator not found: %s',specification)
+ logs.report("fileio","tex locator '%s' not found",specification)
end
end
@@ -7157,7 +8900,9 @@ function resolvers.loadfiles()
instance.loaderror = false
instance.files = { }
if not instance.renewcache then
- for _, hash in ipairs(instance.hashes) do
+ local hashes = instance.hashes
+ for k=1,#hashes do
+ local hash = hashes[k]
resolvers.hashdatabase(hash.tag,hash.name)
if instance.loaderror then break end
end
@@ -7171,8 +8916,9 @@ end
-- generators:
function resolvers.loadlists()
- for _, hash in ipairs(instance.hashes) do
- resolvers.generatedatabase(hash.tag)
+ local hashes = instance.hashes
+ for i=1,#hashes do
+ resolvers.generatedatabase(hashes[i].tag)
end
end
@@ -7184,10 +8930,27 @@ end
local weird = lpeg.P(".")^1 + lpeg.anywhere(lpeg.S("~`!#$%^&*()={}[]:;\"\'||<>,?\n\r\t"))
+--~ local l_forbidden = lpeg.S("~`!#$%^&*()={}[]:;\"\'||\\/<>,?\n\r\t")
+--~ local l_confusing = lpeg.P(" ")
+--~ local l_character = lpeg.patterns.utf8
+--~ local l_dangerous = lpeg.P(".")
+
+--~ local l_normal = (l_character - l_forbidden - l_confusing - l_dangerous) * (l_character - l_forbidden - l_confusing^2)^0 * lpeg.P(-1)
+--~ ----- l_normal = l_normal * lpeg.Cc(true) + lpeg.Cc(false)
+
+--~ local function test(str)
+--~ print(str,lpeg.match(l_normal,str))
+--~ end
+--~ test("ヒラギノ明朝 Pro W3")
+--~ test("..ヒラギノ明朝 Pro W3")
+--~ test(":ヒラギノ明朝 Pro W3;")
+--~ test("ヒラギノ明朝 /Pro W3;")
+--~ test("ヒラギノ明朝 Pro W3")
+
function resolvers.generators.tex(specification)
local tag = specification
- if trace_verbose then
- logs.report("fileio","scanning path %s",specification)
+ if trace_locating then
+ logs.report("fileio","scanning path '%s'",specification)
end
instance.files[tag] = { }
local files = instance.files[tag]
@@ -7203,7 +8966,8 @@ function resolvers.generators.tex(specification)
full = spec
end
for name in directory(full) do
- if not weird:match(name) then
+ if not lpegmatch(weird,name) then
+ -- if lpegmatch(l_normal,name) then
local mode = attributes(full..name,'mode')
if mode == 'file' then
if path then
@@ -7236,7 +9000,7 @@ function resolvers.generators.tex(specification)
end
end
action()
- if trace_verbose then
+ if trace_locating then
logs.report("fileio","%s files found on %s directories with %s uppercase remappings",n,m,r)
end
end
@@ -7251,11 +9015,48 @@ end
-- we join them and split them after the expansion has taken place. This
-- is more convenient.
+--~ local checkedsplit = string.checkedsplit
+
+local cache = { }
+
+local splitter = lpeg.Ct(lpeg.splitat(lpeg.S(os.type == "windows" and ";" or ":;")))
+
+local function split_kpse_path(str) -- beware, this can be either a path or a {specification}
+ local found = cache[str]
+ if not found then
+ if str == "" then
+ found = { }
+ else
+ str = gsub(str,"\\","/")
+--~ local split = (find(str,";") and checkedsplit(str,";")) or checkedsplit(str,io.pathseparator)
+local split = lpegmatch(splitter,str)
+ found = { }
+ for i=1,#split do
+ local s = split[i]
+ if not find(s,"^{*unset}*") then
+ found[#found+1] = s
+ end
+ end
+ if trace_expansions then
+ logs.report("fileio","splitting path specification '%s'",str)
+ for k=1,#found do
+ logs.report("fileio","% 4i: %s",k,found[k])
+ end
+ end
+ cache[str] = found
+ end
+ end
+ return found
+end
+
+resolvers.split_kpse_path = split_kpse_path
+
function resolvers.splitconfig()
- for i,c in ipairs(instance) do
- for k,v in pairs(c) do
+ for i=1,#instance do
+ local c = instance[i]
+ for k,v in next, c do
if type(v) == 'string' then
- local t = file.split_path(v)
+ local t = split_kpse_path(v)
if #t > 1 then
c[k] = t
end
@@ -7265,21 +9066,25 @@ function resolvers.splitconfig()
end
function resolvers.joinconfig()
- for i,c in ipairs(instance.order) do
- for k,v in pairs(c) do -- ipairs?
+ local order = instance.order
+ for i=1,#order do
+ local c = order[i]
+ for k,v in next, c do -- indexed?
if type(v) == 'table' then
c[k] = file.join_path(v)
end
end
end
end
+
function resolvers.split_path(str)
if type(str) == 'table' then
return str
else
- return file.split_path(str)
+ return split_kpse_path(str)
end
end
+
function resolvers.join_path(str)
if type(str) == 'table' then
return file.join_path(str)
@@ -7291,8 +9096,9 @@ end
function resolvers.splitexpansions()
local ie = instance.expansions
for k,v in next, ie do
- local t, h = { }, { }
- for _,vv in ipairs(file.split_path(v)) do
+ local t, h, p = { }, { }, split_kpse_path(v)
+ for kk=1,#p do
+ local vv = p[kk]
if vv ~= "" and not h[vv] then
t[#t+1] = vv
h[vv] = true
@@ -7339,11 +9145,15 @@ function resolvers.serialize(files)
end
t[#t+1] = "return {"
if instance.sortdata then
- for _, k in pairs(sortedkeys(files)) do -- ipairs
+ local sortedfiles = sortedkeys(files)
+ for i=1,#sortedfiles do
+ local k = sortedfiles[i]
local fk = files[k]
if type(fk) == 'table' then
t[#t+1] = "\t['" .. k .. "']={"
- for _, kk in pairs(sortedkeys(fk)) do -- ipairs
+ local sortedfk = sortedkeys(fk)
+ for j=1,#sortedfk do
+ local kk = sortedfk[j]
t[#t+1] = dump(kk,fk[kk],"\t\t")
end
t[#t+1] = "\t},"
@@ -7368,12 +9178,18 @@ function resolvers.serialize(files)
return concat(t,"\n")
end
+local data_state = { }
+
+function resolvers.data_state()
+ return data_state or { }
+end
+
function resolvers.save_data(dataname, makename) -- untested without cache overload
for cachename, files in next, instance[dataname] do
local name = (makename or file.join)(cachename,dataname)
local luaname, lucname = name .. ".lua", name .. ".luc"
- if trace_verbose then
- logs.report("fileio","preparing %s for %s",dataname,cachename)
+ if trace_locating then
+ logs.report("fileio","preparing '%s' for '%s'",dataname,cachename)
end
for k, v in next, files do
if type(v) == "table" and #v == 1 then
@@ -7387,24 +9203,25 @@ function resolvers.save_data(dataname, makename) -- untested without cache overl
date = os.date("%Y-%m-%d"),
time = os.date("%H:%M:%S"),
content = files,
+ uuid = os.uuid(),
}
local ok = io.savedata(luaname,resolvers.serialize(data))
if ok then
- if trace_verbose then
- logs.report("fileio","%s saved in %s",dataname,luaname)
+ if trace_locating then
+ logs.report("fileio","'%s' saved in '%s'",dataname,luaname)
end
if utils.lua.compile(luaname,lucname,false,true) then -- no cleanup but strip
- if trace_verbose then
- logs.report("fileio","%s compiled to %s",dataname,lucname)
+ if trace_locating then
+ logs.report("fileio","'%s' compiled to '%s'",dataname,lucname)
end
else
- if trace_verbose then
- logs.report("fileio","compiling failed for %s, deleting file %s",dataname,lucname)
+ if trace_locating then
+ logs.report("fileio","compiling failed for '%s', deleting file '%s'",dataname,lucname)
end
os.remove(lucname)
end
- elseif trace_verbose then
- logs.report("fileio","unable to save %s in %s (access error)",dataname,luaname)
+ elseif trace_locating then
+ logs.report("fileio","unable to save '%s' in '%s' (access error)",dataname,luaname)
end
end
end
@@ -7416,19 +9233,20 @@ function resolvers.load_data(pathname,dataname,filename,makename) -- untested wi
if blob then
local data = blob()
if data and data.content and data.type == dataname and data.version == resolvers.cacheversion then
- if trace_verbose then
- logs.report("fileio","loading %s for %s from %s",dataname,pathname,filename)
+ data_state[#data_state+1] = data.uuid
+ if trace_locating then
+ logs.report("fileio","loading '%s' for '%s' from '%s'",dataname,pathname,filename)
end
instance[dataname][pathname] = data.content
else
- if trace_verbose then
- logs.report("fileio","skipping %s for %s from %s",dataname,pathname,filename)
+ if trace_locating then
+ logs.report("fileio","skipping '%s' for '%s' from '%s'",dataname,pathname,filename)
end
instance[dataname][pathname] = { }
instance.loaderror = true
end
- elseif trace_verbose then
- logs.report("fileio","skipping %s for %s from %s",dataname,pathname,filename)
+ elseif trace_locating then
+ logs.report("fileio","skipping '%s' for '%s' from '%s'",dataname,pathname,filename)
end
end
@@ -7447,15 +9265,17 @@ function resolvers.resetconfig()
end
function resolvers.loadnewconfig()
- for _, cnf in ipairs(instance.luafiles) do
+ local luafiles = instance.luafiles
+ for i=1,#luafiles do
+ local cnf = luafiles[i]
local pathname = file.dirname(cnf)
local filename = file.join(pathname,resolvers.luaname)
local blob = loadfile(filename)
if blob then
local data = blob()
if data then
- if trace_verbose then
- logs.report("fileio","loading configuration file %s",filename)
+ if trace_locating then
+ logs.report("fileio","loading configuration file '%s'",filename)
end
if true then
-- flatten to variable.progname
@@ -7476,14 +9296,14 @@ function resolvers.loadnewconfig()
instance['setup'][pathname] = data
end
else
- if trace_verbose then
- logs.report("fileio","skipping configuration file %s",filename)
+ if trace_locating then
+ logs.report("fileio","skipping configuration file '%s'",filename)
end
instance['setup'][pathname] = { }
instance.loaderror = true
end
- elseif trace_verbose then
- logs.report("fileio","skipping configuration file %s",filename)
+ elseif trace_locating then
+ logs.report("fileio","skipping configuration file '%s'",filename)
end
instance.order[#instance.order+1] = instance.setup[pathname]
if instance.loaderror then break end
@@ -7492,7 +9312,9 @@ end
function resolvers.loadoldconfig()
if not instance.renewcache then
- for _, cnf in ipairs(instance.cnffiles) do
+ local cnffiles = instance.cnffiles
+ for i=1,#cnffiles do
+ local cnf = cnffiles[i]
local dname = file.dirname(cnf)
resolvers.load_data(dname,'configuration')
instance.order[#instance.order+1] = instance.configuration[dname]
@@ -7682,7 +9504,7 @@ end
function resolvers.expanded_path_list(str)
if not str then
- return ep or { }
+ return ep or { } -- ep ?
elseif instance.savelists then
-- engine+progname hash
str = gsub(str,"%$","")
@@ -7700,9 +9522,9 @@ end
function resolvers.expanded_path_list_from_var(str) -- brrr
local tmp = resolvers.var_of_format_or_suffix(gsub(str,"%$",""))
if tmp ~= "" then
- return resolvers.expanded_path_list(str)
- else
return resolvers.expanded_path_list(tmp)
+ else
+ return resolvers.expanded_path_list(str)
end
end
@@ -7749,9 +9571,9 @@ function resolvers.isreadable.file(name)
local readable = lfs.isfile(name) -- brrr
if trace_detail then
if readable then
- logs.report("fileio","+ readable: %s",name)
+ logs.report("fileio","file '%s' is readable",name)
else
- logs.report("fileio","- readable: %s", name)
+ logs.report("fileio","file '%s' is not readable", name)
end
end
return readable
@@ -7767,7 +9589,7 @@ local function collect_files(names)
for k=1,#names do
local fname = names[k]
if trace_detail then
- logs.report("fileio","? blobpath asked: %s",fname)
+ logs.report("fileio","checking name '%s'",fname)
end
local bname = file.basename(fname)
local dname = file.dirname(fname)
@@ -7783,7 +9605,7 @@ local function collect_files(names)
local files = blobpath and instance.files[blobpath]
if files then
if trace_detail then
- logs.report("fileio",'? blobpath do: %s (%s)',blobpath,bname)
+ logs.report("fileio","deep checking '%s' (%s)",blobpath,bname)
end
local blobfile = files[bname]
if not blobfile then
@@ -7817,7 +9639,7 @@ local function collect_files(names)
end
end
elseif trace_locating then
- logs.report("fileio",'! blobpath no: %s (%s)',blobpath,bname)
+ logs.report("fileio","no match in '%s' (%s)",blobpath,bname)
end
end
end
@@ -7867,14 +9689,13 @@ end
local function collect_instance_files(filename,collected) -- todo : plugin (scanners, checkers etc)
local result = collected or { }
local stamp = nil
- filename = file.collapse_path(filename) -- elsewhere
- filename = file.collapse_path(gsub(filename,"\\","/")) -- elsewhere
+ filename = file.collapse_path(filename)
-- speed up / beware: format problem
if instance.remember then
stamp = filename .. "--" .. instance.engine .. "--" .. instance.progname .. "--" .. instance.format
if instance.found[stamp] then
if trace_locating then
- logs.report("fileio",'! remembered: %s',filename)
+ logs.report("fileio","remembering file '%s'",filename)
end
return instance.found[stamp]
end
@@ -7882,7 +9703,7 @@ local function collect_instance_files(filename,collected) -- todo : plugin (scan
if not dangerous[instance.format or "?"] then
if resolvers.isreadable.file(filename) then
if trace_detail then
- logs.report("fileio",'= found directly: %s',filename)
+ logs.report("fileio","file '%s' found directly",filename)
end
instance.found[stamp] = { filename }
return { filename }
@@ -7890,13 +9711,13 @@ local function collect_instance_files(filename,collected) -- todo : plugin (scan
end
if find(filename,'%*') then
if trace_locating then
- logs.report("fileio",'! wildcard: %s', filename)
+ logs.report("fileio","checking wildcard '%s'", filename)
end
result = resolvers.find_wildcard_files(filename)
elseif file.is_qualified_path(filename) then
if resolvers.isreadable.file(filename) then
if trace_locating then
- logs.report("fileio",'! qualified: %s', filename)
+ logs.report("fileio","qualified name '%s'", filename)
end
result = { filename }
else
@@ -7906,7 +9727,7 @@ local function collect_instance_files(filename,collected) -- todo : plugin (scan
forcedname = filename .. ".tex"
if resolvers.isreadable.file(forcedname) then
if trace_locating then
- logs.report("fileio",'! no suffix, forcing standard filetype: tex')
+ logs.report("fileio","no suffix, forcing standard filetype 'tex'")
end
result, ok = { forcedname }, true
end
@@ -7916,7 +9737,7 @@ local function collect_instance_files(filename,collected) -- todo : plugin (scan
forcedname = filename .. "." .. s
if resolvers.isreadable.file(forcedname) then
if trace_locating then
- logs.report("fileio",'! no suffix, forcing format filetype: %s', s)
+ logs.report("fileio","no suffix, forcing format filetype '%s'", s)
end
result, ok = { forcedname }, true
break
@@ -7928,7 +9749,7 @@ local function collect_instance_files(filename,collected) -- todo : plugin (scan
-- try to find in tree (no suffix manipulation), here we search for the
-- matching last part of the name
local basename = file.basename(filename)
- local pattern = (filename .. "$"):gsub("([%.%-])","%%%1")
+ local pattern = gsub(filename .. "$","([%.%-])","%%%1")
local savedformat = instance.format
local format = savedformat or ""
if format == "" then
@@ -7938,19 +9759,21 @@ local function collect_instance_files(filename,collected) -- todo : plugin (scan
instance.format = "othertextfiles" -- kind of everything, maybe texinput is better
end
--
- local resolved = collect_instance_files(basename)
- if #result == 0 then
- local lowered = lower(basename)
- if filename ~= lowered then
- resolved = collect_instance_files(lowered)
+ if basename ~= filename then
+ local resolved = collect_instance_files(basename)
+ if #result == 0 then
+ local lowered = lower(basename)
+ if filename ~= lowered then
+ resolved = collect_instance_files(lowered)
+ end
end
- end
- resolvers.format = savedformat
- --
- for r=1,#resolved do
- local rr = resolved[r]
- if rr:find(pattern) then
- result[#result+1], ok = rr, true
+ resolvers.format = savedformat
+ --
+ for r=1,#resolved do
+ local rr = resolved[r]
+ if find(rr,pattern) then
+ result[#result+1], ok = rr, true
+ end
end
end
-- a real wildcard:
@@ -7959,14 +9782,14 @@ local function collect_instance_files(filename,collected) -- todo : plugin (scan
-- local filelist = collect_files({basename})
-- for f=1,#filelist do
-- local ff = filelist[f][3] or ""
- -- if ff:find(pattern) then
+ -- if find(ff,pattern) then
-- result[#result+1], ok = ff, true
-- end
-- end
-- end
end
if not ok and trace_locating then
- logs.report("fileio",'? qualified: %s', filename)
+ logs.report("fileio","qualified name '%s'", filename)
end
end
else
@@ -7985,12 +9808,12 @@ local function collect_instance_files(filename,collected) -- todo : plugin (scan
wantedfiles[#wantedfiles+1] = forcedname
filetype = resolvers.format_of_suffix(forcedname)
if trace_locating then
- logs.report("fileio",'! forcing filetype: %s',filetype)
+ logs.report("fileio","forcing filetype '%s'",filetype)
end
else
filetype = resolvers.format_of_suffix(filename)
if trace_locating then
- logs.report("fileio",'! using suffix based filetype: %s',filetype)
+ logs.report("fileio","using suffix based filetype '%s'",filetype)
end
end
else
@@ -8002,7 +9825,7 @@ local function collect_instance_files(filename,collected) -- todo : plugin (scan
end
filetype = instance.format
if trace_locating then
- logs.report("fileio",'! using given filetype: %s',filetype)
+ logs.report("fileio","using given filetype '%s'",filetype)
end
end
local typespec = resolvers.variable_of_format(filetype)
@@ -8010,9 +9833,7 @@ local function collect_instance_files(filename,collected) -- todo : plugin (scan
if not pathlist or #pathlist == 0 then
-- no pathlist, access check only / todo == wildcard
if trace_detail then
- logs.report("fileio",'? filename: %s',filename)
- logs.report("fileio",'? filetype: %s',filetype or '?')
- logs.report("fileio",'? wanted files: %s',concat(wantedfiles," | "))
+ logs.report("fileio","checking filename '%s', filetype '%s', wanted files '%s'",filename, filetype or '?',concat(wantedfiles," | "))
end
for k=1,#wantedfiles do
local fname = wantedfiles[k]
@@ -8033,36 +9854,59 @@ local function collect_instance_files(filename,collected) -- todo : plugin (scan
else
-- list search
local filelist = collect_files(wantedfiles)
- local doscan, recurse
+ local dirlist = { }
+ if filelist then
+ for i=1,#filelist do
+ dirlist[i] = file.dirname(filelist[i][2]) .. "/"
+ end
+ end
if trace_detail then
- logs.report("fileio",'? filename: %s',filename)
+ logs.report("fileio","checking filename '%s'",filename)
end
-- a bit messy ... esp the doscan setting here
+ local doscan
for k=1,#pathlist do
local path = pathlist[k]
if find(path,"^!!") then doscan = false else doscan = true end
- if find(path,"//$") then recurse = true else recurse = false end
local pathname = gsub(path,"^!+", '')
done = false
-- using file list
- if filelist and not (done and not instance.allresults) and recurse then
- -- compare list entries with permitted pattern
- pathname = gsub(pathname,"([%-%.])","%%%1") -- this also influences
- pathname = gsub(pathname,"/+$", '/.*') -- later usage of pathname
- pathname = gsub(pathname,"//", '/.-/') -- not ok for /// but harmless
- local expr = "^" .. pathname
+ if filelist then
+ local expression
+ -- compare list entries with permitted pattern -- /xx /xx//
+ if not find(pathname,"/$") then
+ expression = pathname .. "/"
+ else
+ expression = pathname
+ end
+ expression = gsub(expression,"([%-%.])","%%%1") -- this also influences
+ expression = gsub(expression,"//+$", '/.*') -- later usage of pathname
+ expression = gsub(expression,"//", '/.-/') -- not ok for /// but harmless
+ expression = "^" .. expression .. "$"
+ if trace_detail then
+ logs.report("fileio","using pattern '%s' for path '%s'",expression,pathname)
+ end
for k=1,#filelist do
local fl = filelist[k]
local f = fl[2]
- if find(f,expr) then
- if trace_detail then
- logs.report("fileio",'= found in hash: %s',f)
- end
+ local d = dirlist[k]
+ if find(d,expression) then
--- todo, test for readable
result[#result+1] = fl[3]
resolvers.register_in_trees(f) -- for tracing used files
done = true
- if not instance.allresults then break end
+ if instance.allresults then
+ if trace_detail then
+ logs.report("fileio","match in hash for file '%s' on path '%s', continue scanning",f,d)
+ end
+ else
+ if trace_detail then
+ logs.report("fileio","match in hash for file '%s' on path '%s', quit scanning",f,d)
+ end
+ break
+ end
+ elseif trace_detail then
+ logs.report("fileio","no match in hash for file '%s' on path '%s'",f,d)
end
end
end
@@ -8078,7 +9922,7 @@ local function collect_instance_files(filename,collected) -- todo : plugin (scan
local fname = file.join(ppname,w)
if resolvers.isreadable.file(fname) then
if trace_detail then
- logs.report("fileio",'= found by scanning: %s',fname)
+ logs.report("fileio","found '%s' by scanning",fname)
end
result[#result+1] = fname
done = true
@@ -8141,7 +9985,7 @@ function resolvers.find_given_files(filename)
local hashes = instance.hashes
for k=1,#hashes do
local hash = hashes[k]
- local files = instance.files[hash.tag]
+ local files = instance.files[hash.tag] or { }
local blist = files[bname]
if not blist then
local rname = "remap:"..bname
@@ -8251,9 +10095,9 @@ function resolvers.load(option)
statistics.starttiming(instance)
resolvers.resetconfig()
resolvers.identify_cnf()
- resolvers.load_lua()
+ resolvers.load_lua() -- will become the new method
resolvers.expand_variables()
- resolvers.load_cnf()
+ resolvers.load_cnf() -- will be skipped when we have a lua file
resolvers.expand_variables()
if option ~= "nofiles" then
resolvers.load_hash()
@@ -8265,22 +10109,23 @@ end
function resolvers.for_files(command, files, filetype, mustexist)
if files and #files > 0 then
local function report(str)
- if trace_verbose then
+ if trace_locating then
logs.report("fileio",str) -- has already verbose
else
print(str)
end
end
- if trace_verbose then
- report('')
+ if trace_locating then
+ report('') -- ?
end
- for _, file in ipairs(files) do
+ for f=1,#files do
+ local file = files[f]
local result = command(file,filetype,mustexist)
if type(result) == 'string' then
report(result)
else
- for _,v in ipairs(result) do
- report(v)
+ for i=1,#result do
+ report(result[i]) -- could be unpack
end
end
end
@@ -8327,18 +10172,19 @@ end
function table.sequenced(t,sep) -- temp here
local s = { }
- for k, v in pairs(t) do -- pairs?
- s[#s+1] = k .. "=" .. v
+ for k, v in next, t do -- indexed?
+ s[#s+1] = k .. "=" .. tostring(v)
end
return concat(s, sep or " | ")
end
function resolvers.methodhandler(what, filename, filetype) -- ...
+ filename = file.collapse_path(filename)
local specification = (type(filename) == "string" and resolvers.splitmethod(filename)) or filename -- no or { }, let it bomb
local scheme = specification.scheme
if resolvers[what][scheme] then
if trace_locating then
- logs.report("fileio",'= handler: %s -> %s -> %s',specification.original,what,table.sequenced(specification))
+ logs.report("fileio","handler '%s' -> '%s' -> '%s'",specification.original,what,table.sequenced(specification))
end
return resolvers[what][scheme](filename,filetype) -- todo: specification
else
@@ -8358,8 +10204,9 @@ function resolvers.clean_path(str)
end
function resolvers.do_with_path(name,func)
- for _, v in pairs(resolvers.expanded_path_list(name)) do -- pairs?
- func("^"..resolvers.clean_path(v))
+ local pathlist = resolvers.expanded_path_list(name)
+ for i=1,#pathlist do
+ func("^"..resolvers.clean_path(pathlist[i]))
end
end
@@ -8368,7 +10215,9 @@ function resolvers.do_with_var(name,func)
end
function resolvers.with_files(pattern,handle)
- for _, hash in ipairs(instance.hashes) do
+ local hashes = instance.hashes
+ for i=1,#hashes do
+ local hash = hashes[i]
local blobpath = hash.tag
local blobtype = hash.type
if blobpath then
@@ -8383,7 +10232,7 @@ function resolvers.with_files(pattern,handle)
if type(v) == "string" then
handle(blobtype,blobpath,v,k)
else
- for _,vv in pairs(v) do -- ipairs?
+ for _,vv in next, v do -- indexed
handle(blobtype,blobpath,vv,k)
end
end
@@ -8395,7 +10244,7 @@ function resolvers.with_files(pattern,handle)
end
function resolvers.locate_format(name)
- local barename, fmtname = name:gsub("%.%a+$",""), ""
+ local barename, fmtname = gsub(name,"%.%a+$",""), ""
if resolvers.usecache then
local path = file.join(caches.setpath("formats")) -- maybe platform
fmtname = file.join(path,barename..".fmt") or ""
@@ -8443,7 +10292,7 @@ do -- create closure to overcome 200 locals limit
if not modules then modules = { } end modules ['data-tmp'] = {
version = 1.001,
- comment = "companion to luat-lib.tex",
+ comment = "companion to luat-lib.mkiv",
author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
copyright = "PRAGMA ADE / ConTeXt Development Team",
license = "see context related readme files"
@@ -8467,7 +10316,7 @@ luatools with a recache feature.</p>
local format, lower, gsub = string.format, string.lower, string.gsub
-local trace_cache = false trackers.register("resolvers.cache", function(v) trace_cache = v end)
+local trace_cache = false trackers.register("resolvers.cache", function(v) trace_cache = v end) -- not used yet
caches = caches or { }
@@ -8554,7 +10403,8 @@ function caches.setpath(...)
caches.path = '.'
end
caches.path = resolvers.clean_path(caches.path)
- if not table.is_empty({...}) then
+ local dirs = { ... }
+ if #dirs > 0 then
local pth = dir.mkdirs(caches.path,...)
return pth
end
@@ -8600,6 +10450,7 @@ function caches.savedata(filepath,filename,data,raw)
if raw then
reduce, simplify = false, false
end
+ data.cache_uuid = os.uuid()
if caches.direct then
file.savedata(tmaname, table.serialize(data,'return',false,true,false)) -- no hex
else
@@ -8625,7 +10476,7 @@ do -- create closure to overcome 200 locals limit
if not modules then modules = { } end modules ['data-res'] = {
version = 1.001,
- comment = "companion to luat-lib.tex",
+ comment = "companion to luat-lib.mkiv",
author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
copyright = "PRAGMA ADE / ConTeXt Development Team",
license = "see context related readme files"
@@ -8660,6 +10511,14 @@ prefixes.relative = function(str,n)
return resolvers.clean_path(str)
end
+prefixes.auto = function(str)
+ local fullname = prefixes.relative(str)
+ if not lfs.isfile(fullname) then
+ fullname = prefixes.locate(str)
+ end
+ return fullname
+end
+
prefixes.locate = function(str)
local fullname = resolvers.find_given_file(str) or ""
return resolvers.clean_path((fullname ~= "" and fullname) or str)
@@ -8683,6 +10542,16 @@ prefixes.full = prefixes.locate
prefixes.file = prefixes.filename
prefixes.path = prefixes.pathname
+function resolvers.allprefixes(separator)
+ local all = table.sortedkeys(prefixes)
+ if separator then
+ for i=1,#all do
+ all[i] = all[i] .. ":"
+ end
+ end
+ return all
+end
+
local function _resolve_(method,target)
if prefixes[method] then
return prefixes[method](target)
@@ -8693,7 +10562,8 @@ end
local function resolve(str)
if type(str) == "table" then
- for k, v in pairs(str) do -- ipairs
+ for k=1,#str do
+ local v = str[k]
str[k] = resolve(v) or v
end
elseif str and str ~= "" then
@@ -8706,7 +10576,7 @@ resolvers.resolve = resolve
if os.uname then
- for k, v in pairs(os.uname()) do
+ for k, v in next, os.uname() do
if not prefixes[k] then
prefixes[k] = function() return v end
end
@@ -8721,7 +10591,7 @@ do -- create closure to overcome 200 locals limit
if not modules then modules = { } end modules ['data-inp'] = {
version = 1.001,
- comment = "companion to luat-lib.tex",
+ comment = "companion to luat-lib.mkiv",
author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
copyright = "PRAGMA ADE / ConTeXt Development Team",
license = "see context related readme files"
@@ -8742,7 +10612,7 @@ do -- create closure to overcome 200 locals limit
if not modules then modules = { } end modules ['data-out'] = {
version = 1.001,
- comment = "companion to luat-lib.tex",
+ comment = "companion to luat-lib.mkiv",
author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
copyright = "PRAGMA ADE / ConTeXt Development Team",
license = "see context related readme files"
@@ -8758,7 +10628,7 @@ do -- create closure to overcome 200 locals limit
if not modules then modules = { } end modules ['data-con'] = {
version = 1.001,
- comment = "companion to luat-lib.tex",
+ comment = "companion to luat-lib.mkiv",
author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
copyright = "PRAGMA ADE / ConTeXt Development Team",
license = "see context related readme files"
@@ -8769,8 +10639,6 @@ local format, lower, gsub = string.format, string.lower, string.gsub
local trace_cache = false trackers.register("resolvers.cache", function(v) trace_cache = v end)
local trace_containers = false trackers.register("resolvers.containers", function(v) trace_containers = v end)
local trace_storage = false trackers.register("resolvers.storage", function(v) trace_storage = v end)
-local trace_verbose = false trackers.register("resolvers.verbose", function(v) trace_verbose = v end)
-local trace_locating = false trackers.register("resolvers.locating", function(v) trace_locating = v trackers.enable("resolvers.verbose") end)
--[[ldx--
<p>Once we found ourselves defining similar cache constructs
@@ -8834,7 +10702,7 @@ 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
+ return storage and storage.cache_version == container.version
else
return false
end
@@ -8886,16 +10754,15 @@ do -- create closure to overcome 200 locals limit
if not modules then modules = { } end modules ['data-use'] = {
version = 1.001,
- comment = "companion to luat-lib.tex",
+ comment = "companion to luat-lib.mkiv",
author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
copyright = "PRAGMA ADE / ConTeXt Development Team",
license = "see context related readme files"
}
-local format, lower, gsub = string.format, string.lower, string.gsub
+local format, lower, gsub, find = string.format, string.lower, string.gsub, string.find
-local trace_verbose = false trackers.register("resolvers.verbose", function(v) trace_verbose = v end)
-local trace_locating = false trackers.register("resolvers.locating", function(v) trace_locating = v trackers.enable("resolvers.verbose") end)
+local trace_locating = false trackers.register("resolvers.locating", function(v) trace_locating = v end)
-- since we want to use the cache instead of the tree, we will now
-- reimplement the saver.
@@ -8939,19 +10806,20 @@ resolvers.automounted = resolvers.automounted or { }
function resolvers.automount(usecache)
local mountpaths = resolvers.clean_path_list(resolvers.expansion('TEXMFMOUNT'))
- if table.is_empty(mountpaths) and usecache then
+ if (not mountpaths or #mountpaths == 0) and usecache then
mountpaths = { caches.setpath("mount") }
end
- if not table.is_empty(mountpaths) then
+ if mountpaths and #mountpaths > 0 then
statistics.starttiming(resolvers.instance)
- for k, root in pairs(mountpaths) do
+ for k=1,#mountpaths do
+ local root = mountpaths[k]
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
+ if find(line,"^[%%#%-]") then -- or %W
-- skip
- elseif line:find("^zip://") then
+ elseif find(line,"^zip://") then
if trace_locating then
logs.report("fileio","mounting %s",line)
end
@@ -8996,11 +10864,13 @@ function statistics.check_fmt_status(texname)
local luv = dofile(luvname)
if luv and luv.sourcefile then
local sourcehash = md5.hex(io.loaddata(resolvers.find_file(luv.sourcefile)) or "unknown")
- if luv.enginebanner and luv.enginebanner ~= enginebanner then
- return "engine mismatch"
+ local luvbanner = luv.enginebanner or "?"
+ if luvbanner ~= enginebanner then
+ return string.format("engine mismatch (luv:%s <> bin:%s)",luvbanner,enginebanner)
end
- if luv.sourcehash and luv.sourcehash ~= sourcehash then
- return "source mismatch"
+ local luvhash = luv.sourcehash or "?"
+ if luvhash ~= sourcehash then
+ return string.format("source mismatch (luv:%s <> bin:%s)",luvhash,sourcehash)
end
else
return "invalid status file"
@@ -9019,18 +10889,22 @@ do -- create closure to overcome 200 locals limit
if not modules then modules = { } end modules ['data-zip'] = {
version = 1.001,
- comment = "companion to luat-lib.tex",
+ comment = "companion to luat-lib.mkiv",
author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
copyright = "PRAGMA ADE / ConTeXt Development Team",
license = "see context related readme files"
}
-local format, find = string.format, string.find
+local format, find, match = string.format, string.find, string.match
+local unpack = unpack or table.unpack
-local trace_locating, trace_verbose = false, false
+local trace_locating = false trackers.register("resolvers.locating", function(v) trace_locating = v end)
-trackers.register("resolvers.verbose", function(v) trace_verbose = v end)
-trackers.register("resolvers.locating", function(v) trace_locating = v trace_verbose = v end)
+-- zip:///oeps.zip?name=bla/bla.tex
+-- zip:///oeps.zip?tree=tex/texmf-local
+-- zip:///texmf.zip?tree=/tex/texmf
+-- zip:///texmf.zip?tree=/tex/texmf-local
+-- zip:///texmf-mine.zip?tree=/tex/texmf-projects
zip = zip or { }
zip.archives = zip.archives or { }
@@ -9041,9 +10915,6 @@ local locators, hashers, concatinators = resolvers.locators, resolvers.hashers,
local archives = zip.archives
--- zip:///oeps.zip?name=bla/bla.tex
--- zip:///oeps.zip?tree=tex/texmf-local
-
local function validzip(str) -- todo: use url splitter
if not find(str,"^zip://") then
return "zip:///" .. str
@@ -9073,26 +10944,22 @@ function zip.closearchive(name)
end
end
--- zip:///texmf.zip?tree=/tex/texmf
--- zip:///texmf.zip?tree=/tex/texmf-local
--- zip:///texmf-mine.zip?tree=/tex/texmf-projects
-
function locators.zip(specification) -- where is this used? startup zips (untested)
specification = resolvers.splitmethod(specification)
local zipfile = specification.path
local zfile = zip.openarchive(name) -- tricky, could be in to be initialized tree
if trace_locating then
if zfile then
- logs.report("fileio",'! zip locator, found: %s',specification.original)
+ logs.report("fileio","zip locator, archive '%s' found",specification.original)
else
- logs.report("fileio",'? zip locator, not found: %s',specification.original)
+ logs.report("fileio","zip locator, archive '%s' not found",specification.original)
end
end
end
function hashers.zip(tag,name)
- if trace_verbose then
- logs.report("fileio","loading zip file %s as %s",name,tag)
+ if trace_locating then
+ logs.report("fileio","loading zip file '%s' as '%s'",name,tag)
end
resolvers.usezipfile(format("%s?tree=%s",tag,name))
end
@@ -9117,23 +10984,25 @@ function finders.zip(specification,filetype)
local zfile = zip.openarchive(specification.path)
if zfile then
if trace_locating then
- logs.report("fileio",'! zip finder, path: %s',specification.path)
+ logs.report("fileio","zip finder, archive '%s' found",specification.path)
end
local dfile = zfile:open(q.name)
if dfile then
dfile = zfile:close()
if trace_locating then
- logs.report("fileio",'+ zip finder, name: %s',q.name)
+ logs.report("fileio","zip finder, file '%s' found",q.name)
end
return specification.original
+ elseif trace_locating then
+ logs.report("fileio","zip finder, file '%s' not found",q.name)
end
elseif trace_locating then
- logs.report("fileio",'? zip finder, path %s',specification.path)
+ logs.report("fileio","zip finder, unknown archive '%s'",specification.path)
end
end
end
if trace_locating then
- logs.report("fileio",'- zip finder, name: %s',filename)
+ logs.report("fileio","zip finder, '%s' not found",filename)
end
return unpack(finders.notfound)
end
@@ -9146,20 +11015,25 @@ function openers.zip(specification)
local zfile = zip.openarchive(zipspecification.path)
if zfile then
if trace_locating then
- logs.report("fileio",'+ zip starter, path: %s',zipspecification.path)
+ logs.report("fileio","zip opener, archive '%s' opened",zipspecification.path)
end
local dfile = zfile:open(q.name)
if dfile then
logs.show_open(specification)
+ if trace_locating then
+ logs.report("fileio","zip opener, file '%s' found",q.name)
+ end
return openers.text_opener(specification,dfile,'zip')
+ elseif trace_locating then
+ logs.report("fileio","zip opener, file '%s' not found",q.name)
end
elseif trace_locating then
- logs.report("fileio",'- zip starter, path %s',zipspecification.path)
+ logs.report("fileio","zip opener, unknown archive '%s'",zipspecification.path)
end
end
end
if trace_locating then
- logs.report("fileio",'- zip opener, name: %s',filename)
+ logs.report("fileio","zip opener, '%s' not found",filename)
end
return unpack(openers.notfound)
end
@@ -9172,25 +11046,27 @@ function loaders.zip(specification)
local zfile = zip.openarchive(specification.path)
if zfile then
if trace_locating then
- logs.report("fileio",'+ zip starter, path: %s',specification.path)
+ logs.report("fileio","zip loader, archive '%s' opened",specification.path)
end
local dfile = zfile:open(q.name)
if dfile then
logs.show_load(filename)
if trace_locating then
- logs.report("fileio",'+ zip loader, name: %s',filename)
+ logs.report("fileio","zip loader, file '%s' loaded",filename)
end
local s = dfile:read("*all")
dfile:close()
return true, s, #s
+ elseif trace_locating then
+ logs.report("fileio","zip loader, file '%s' not found",q.name)
end
elseif trace_locating then
- logs.report("fileio",'- zip starter, path: %s',specification.path)
+ logs.report("fileio","zip loader, unknown archive '%s'",specification.path)
end
end
end
if trace_locating then
- logs.report("fileio",'- zip loader, name: %s',filename)
+ logs.report("fileio","zip loader, '%s' not found",filename)
end
return unpack(openers.notfound)
end
@@ -9200,21 +11076,15 @@ end
function resolvers.usezipfile(zipname)
zipname = validzip(zipname)
- if trace_locating then
- logs.report("fileio",'! zip use, file: %s',zipname)
- end
local specification = resolvers.splitmethod(zipname)
local zipfile = specification.path
if zipfile and not zip.registeredfiles[zipname] then
local tree = url.query(specification.query).tree or ""
- if trace_locating then
- logs.report("fileio",'! zip register, file: %s',zipname)
- end
local z = zip.openarchive(zipfile)
if z then
local instance = resolvers.instance
if trace_locating then
- logs.report("fileio","= zipfile, registering: %s",zipname)
+ logs.report("fileio","zip registering, registering archive '%s'",zipname)
end
statistics.starttiming(instance)
resolvers.prepend_hash('zip',zipname,zipfile)
@@ -9223,10 +11093,10 @@ function resolvers.usezipfile(zipname)
instance.files[zipname] = resolvers.register_zip_file(z,tree or "")
statistics.stoptiming(instance)
elseif trace_locating then
- logs.report("fileio","? zipfile, unknown: %s",zipname)
+ logs.report("fileio","zip registering, unknown archive '%s'",zipname)
end
elseif trace_locating then
- logs.report("fileio",'! zip register, no file: %s',zipname)
+ logs.report("fileio","zip registering, '%s' not found",zipname)
end
end
@@ -9238,11 +11108,11 @@ function resolvers.register_zip_file(z,tree)
filter = format("^%s/(.+)/(.-)$",tree)
end
if trace_locating then
- logs.report("fileio",'= zip filter: %s',filter)
+ logs.report("fileio","zip registering, using filter '%s'",filter)
end
local register, n = resolvers.register_file, 0
for i in z:files() do
- local path, name = i.filename:match(filter)
+ local path, name = match(i.filename,filter)
if path then
if name and name ~= '' then
register(files, name, path)
@@ -9255,7 +11125,7 @@ function resolvers.register_zip_file(z,tree)
n = n + 1
end
end
- logs.report("fileio",'= zip entries: %s',n)
+ logs.report("fileio","zip registering, %s files registered",n)
return files
end
@@ -9266,12 +11136,14 @@ do -- create closure to overcome 200 locals limit
if not modules then modules = { } end modules ['data-crl'] = {
version = 1.001,
- comment = "companion to luat-lib.tex",
+ comment = "companion to luat-lib.mkiv",
author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
copyright = "PRAGMA ADE / ConTeXt Development Team",
license = "see context related readme files"
}
+local gsub = string.gsub
+
curl = curl or { }
curl.cached = { }
@@ -9280,9 +11152,9 @@ curl.cachepath = caches.definepath("curl")
local finders, openers, loaders = resolvers.finders, resolvers.openers, resolvers.loaders
function curl.fetch(protocol, name)
- local cachename = curl.cachepath() .. "/" .. name:gsub("[^%a%d%.]+","-")
--- cachename = cachename:gsub("[\\/]", io.fileseparator)
- cachename = cachename:gsub("[\\]", "/") -- cleanup
+ local cachename = curl.cachepath() .. "/" .. gsub(name,"[^%a%d%.]+","-")
+-- cachename = gsub(cachename,"[\\/]", io.fileseparator)
+ cachename = gsub(cachename,"[\\]", "/") -- cleanup
if not curl.cached[name] then
if not io.exists(cachename) then
curl.cached[name] = cachename
@@ -9328,6 +11200,164 @@ end -- of closure
do -- create closure to overcome 200 locals limit
+if not modules then modules = { } end modules ['data-lua'] = {
+ version = 1.001,
+ comment = "companion to luat-lib.mkiv",
+ author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
+ copyright = "PRAGMA ADE / ConTeXt Development Team",
+ license = "see context related readme files"
+}
+
+-- some loading stuff ... we might move this one to slot 2 depending
+-- on the developments (the loaders must not trigger kpse); we could
+-- of course use a more extensive lib path spec
+
+local trace_locating = false trackers.register("resolvers.locating", function(v) trace_locating = v end)
+
+local gsub, insert = string.gsub, table.insert
+local unpack = unpack or table.unpack
+
+local libformats = { 'luatexlibs', 'tex', 'texmfscripts', 'othertextfiles' } -- 'luainputs'
+local clibformats = { 'lib' }
+
+local _path_, libpaths, _cpath_, clibpaths
+
+function package.libpaths()
+ if not _path_ or package.path ~= _path_ then
+ _path_ = package.path
+ libpaths = file.split_path(_path_,";")
+ end
+ return libpaths
+end
+
+function package.clibpaths()
+ if not _cpath_ or package.cpath ~= _cpath_ then
+ _cpath_ = package.cpath
+ clibpaths = file.split_path(_cpath_,";")
+ end
+ return clibpaths
+end
+
+local function thepath(...)
+ local t = { ... } t[#t+1] = "?.lua"
+ local path = file.join(unpack(t))
+ if trace_locating then
+ logs.report("fileio","! appending '%s' to 'package.path'",path)
+ end
+ return path
+end
+
+local p_libpaths, a_libpaths = { }, { }
+
+function package.append_libpath(...)
+ insert(a_libpath,thepath(...))
+end
+
+function package.prepend_libpath(...)
+ insert(p_libpaths,1,thepath(...))
+end
+
+-- beware, we need to return a loadfile result !
+
+local function loaded(libpaths,name,simple)
+ for i=1,#libpaths do -- package.path, might become option
+ local libpath = libpaths[i]
+ local resolved = gsub(libpath,"%?",simple)
+ if trace_locating then -- more detail
+ logs.report("fileio","! checking for '%s' on 'package.path': '%s' => '%s'",simple,libpath,resolved)
+ end
+ if resolvers.isreadable.file(resolved) then
+ if trace_locating then
+ logs.report("fileio","! lib '%s' located via 'package.path': '%s'",name,resolved)
+ end
+ return loadfile(resolved)
+ end
+ end
+end
+
+
+package.loaders[2] = function(name) -- was [#package.loaders+1]
+ if trace_locating then -- mode detail
+ logs.report("fileio","! locating '%s'",name)
+ end
+ for i=1,#libformats do
+ local format = libformats[i]
+ local resolved = resolvers.find_file(name,format) or ""
+ if trace_locating then -- mode detail
+ logs.report("fileio","! checking for '%s' using 'libformat path': '%s'",name,format)
+ end
+ if resolved ~= "" then
+ if trace_locating then
+ logs.report("fileio","! lib '%s' located via environment: '%s'",name,resolved)
+ end
+ return loadfile(resolved)
+ end
+ end
+ -- libpaths
+ local libpaths, clibpaths = package.libpaths(), package.clibpaths()
+ local simple = gsub(name,"%.lua$","")
+ local simple = gsub(simple,"%.","/")
+ local resolved = loaded(p_libpaths,name,simple) or loaded(libpaths,name,simple) or loaded(a_libpaths,name,simple)
+ if resolved then
+ return resolved
+ end
+ --
+ local libname = file.addsuffix(simple,os.libsuffix)
+ for i=1,#clibformats do
+ -- better have a dedicated loop
+ local format = clibformats[i]
+ local paths = resolvers.expanded_path_list_from_var(format)
+ for p=1,#paths do
+ local path = paths[p]
+ local resolved = file.join(path,libname)
+ if trace_locating then -- mode detail
+ logs.report("fileio","! checking for '%s' using 'clibformat path': '%s'",libname,path)
+ end
+ if resolvers.isreadable.file(resolved) then
+ if trace_locating then
+ logs.report("fileio","! lib '%s' located via 'clibformat': '%s'",libname,resolved)
+ end
+ return package.loadlib(resolved,name)
+ end
+ end
+ end
+ for i=1,#clibpaths do -- package.path, might become option
+ local libpath = clibpaths[i]
+ local resolved = gsub(libpath,"?",simple)
+ if trace_locating then -- more detail
+ logs.report("fileio","! checking for '%s' on 'package.cpath': '%s'",simple,libpath)
+ end
+ if resolvers.isreadable.file(resolved) then
+ if trace_locating then
+ logs.report("fileio","! lib '%s' located via 'package.cpath': '%s'",name,resolved)
+ end
+ return package.loadlib(resolved,name)
+ end
+ end
+ -- just in case the distribution is messed up
+ if trace_loading then -- more detail
+ logs.report("fileio","! checking for '%s' using 'luatexlibs': '%s'",name)
+ end
+ local resolved = resolvers.find_file(file.basename(name),'luatexlibs') or ""
+ if resolved ~= "" then
+ if trace_locating then
+ logs.report("fileio","! lib '%s' located by basename via environment: '%s'",name,resolved)
+ end
+ return loadfile(resolved)
+ end
+ if trace_locating then
+ logs.report("fileio",'? unable to locate lib: %s',name)
+ end
+-- return "unable to locate " .. name
+end
+
+resolvers.loadlualib = require
+
+
+end -- of closure
+
+do -- create closure to overcome 200 locals limit
+
if not modules then modules = { } end modules ['luat-kps'] = {
version = 1.001,
comment = "companion to luatools.lua",
@@ -9437,7 +11467,7 @@ do -- create closure to overcome 200 locals limit
if not modules then modules = { } end modules ['data-aux'] = {
version = 1.001,
- comment = "companion to luat-lib.tex",
+ comment = "companion to luat-lib.mkiv",
author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
copyright = "PRAGMA ADE / ConTeXt Development Team",
license = "see context related readme files"
@@ -9445,47 +11475,47 @@ if not modules then modules = { } end modules ['data-aux'] = {
local find = string.find
-local trace_verbose = false trackers.register("resolvers.verbose", function(v) trace_verbose = v end)
+local trace_locating = false trackers.register("resolvers.locating", function(v) trace_locating = v end)
function resolvers.update_script(oldname,newname) -- oldname -> own.name, not per se a suffix
local scriptpath = "scripts/context/lua"
newname = file.addsuffix(newname,"lua")
local oldscript = resolvers.clean_path(oldname)
- if trace_verbose then
+ if trace_locating then
logs.report("fileio","to be replaced old script %s", oldscript)
end
local newscripts = resolvers.find_files(newname) or { }
if #newscripts == 0 then
- if trace_verbose then
+ if trace_locating then
logs.report("fileio","unable to locate new script")
end
else
for i=1,#newscripts do
local newscript = resolvers.clean_path(newscripts[i])
- if trace_verbose then
+ if trace_locating then
logs.report("fileio","checking new script %s", newscript)
end
if oldscript == newscript then
- if trace_verbose then
+ if trace_locating then
logs.report("fileio","old and new script are the same")
end
elseif not find(newscript,scriptpath) then
- if trace_verbose then
+ if trace_locating then
logs.report("fileio","new script should come from %s",scriptpath)
end
elseif not (find(oldscript,file.removesuffix(newname).."$") or find(oldscript,newname.."$")) then
- if trace_verbose then
+ if trace_locating then
logs.report("fileio","invalid new script name")
end
else
local newdata = io.loaddata(newscript)
if newdata then
- if trace_verbose then
+ if trace_locating then
logs.report("fileio","old script content replaced by new content")
end
io.savedata(oldscript,newdata)
break
- elseif trace_verbose then
+ elseif trace_locating then
logs.report("fileio","unable to load new script")
end
end
@@ -9500,25 +11530,28 @@ do -- create closure to overcome 200 locals limit
if not modules then modules = { } end modules ['data-tmf'] = {
version = 1.001,
- comment = "companion to luat-lib.tex",
+ comment = "companion to luat-lib.mkiv",
author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
copyright = "PRAGMA ADE / ConTeXt Development Team",
license = "see context related readme files"
}
+local find, gsub, match = string.find, string.gsub, string.match
+local getenv, setenv = os.getenv, os.setenv
+
-- loads *.tmf files in minimal tree roots (to be optimized and documented)
function resolvers.check_environment(tree)
logs.simpleline()
- os.setenv('TMP', os.getenv('TMP') or os.getenv('TEMP') or os.getenv('TMPDIR') or os.getenv('HOME'))
- os.setenv('TEXOS', os.getenv('TEXOS') or ("texmf-" .. os.currentplatform()))
- os.setenv('TEXPATH', (tree or "tex"):gsub("\/+$",''))
- os.setenv('TEXMFOS', os.getenv('TEXPATH') .. "/" .. os.getenv('TEXOS'))
+ setenv('TMP', getenv('TMP') or getenv('TEMP') or getenv('TMPDIR') or getenv('HOME'))
+ setenv('TEXOS', getenv('TEXOS') or ("texmf-" .. os.platform))
+ setenv('TEXPATH', gsub(tree or "tex","\/+$",''))
+ setenv('TEXMFOS', getenv('TEXPATH') .. "/" .. getenv('TEXOS'))
logs.simpleline()
- logs.simple("preset : TEXPATH => %s", os.getenv('TEXPATH'))
- logs.simple("preset : TEXOS => %s", os.getenv('TEXOS'))
- logs.simple("preset : TEXMFOS => %s", os.getenv('TEXMFOS'))
- logs.simple("preset : TMP => %s", os.getenv('TMP'))
+ logs.simple("preset : TEXPATH => %s", getenv('TEXPATH'))
+ logs.simple("preset : TEXOS => %s", getenv('TEXOS'))
+ logs.simple("preset : TEXMFOS => %s", getenv('TEXMFOS'))
+ logs.simple("preset : TMP => %s", getenv('TMP'))
logs.simple('')
end
@@ -9526,27 +11559,27 @@ function resolvers.load_environment(name) -- todo: key=value as well as lua
local f = io.open(name)
if f then
for line in f:lines() do
- if line:find("^[%%%#]") then
+ if find(line,"^[%%%#]") then
-- skip comment
else
- local key, how, value = line:match("^(.-)%s*([<=>%?]+)%s*(.*)%s*$")
+ local key, how, value = match(line,"^(.-)%s*([<=>%?]+)%s*(.*)%s*$")
if how then
- value = value:gsub("%%(.-)%%", function(v) return os.getenv(v) or "" end)
+ value = gsub(value,"%%(.-)%%", function(v) return getenv(v) or "" end)
if how == "=" or how == "<<" then
- os.setenv(key,value)
+ setenv(key,value)
elseif how == "?" or how == "??" then
- os.setenv(key,os.getenv(key) or value)
+ setenv(key,getenv(key) or value)
elseif how == "<" or how == "+=" then
- if os.getenv(key) then
- os.setenv(key,os.getenv(key) .. io.fileseparator .. value)
+ if getenv(key) then
+ setenv(key,getenv(key) .. io.fileseparator .. value)
else
- os.setenv(key,value)
+ setenv(key,value)
end
elseif how == ">" or how == "=+" then
- if os.getenv(key) then
- os.setenv(key,value .. io.pathseparator .. os.getenv(key))
+ if getenv(key) then
+ setenv(key,value .. io.pathseparator .. getenv(key))
else
- os.setenv(key,value)
+ setenv(key,value)
end
end
end
@@ -9585,6 +11618,9 @@ if not modules then modules = { } end modules ['luat-sta'] = {
-- this code is used in the updater
+local gmatch, match = string.gmatch, string.match
+local type = type
+
states = states or { }
states.data = states.data or { }
states.hash = states.hash or { }
@@ -9613,13 +11649,17 @@ function states.set_by_tag(tag,key,value,default,persistent)
if d then
if type(d) == "table" then
local dkey, hkey = key, key
- local pre, post = key:match("(.+)%.([^%.]+)$")
+ local pre, post = match(key,"(.+)%.([^%.]+)$")
if pre and post then
- for k in pre:gmatch("[^%.]+") do
+ for k in gmatch(pre,"[^%.]+") do
local dk = d[k]
if not dk then
dk = { }
d[k] = dk
+ elseif type(dk) == "string" then
+ -- invalid table, unable to upgrade structure
+ -- hope for the best or delete the state file
+ break
end
d = dk
end
@@ -9647,7 +11687,7 @@ function states.get_by_tag(tag,key,default)
else
local d = states.data[tag]
if d then
- for k in key:gmatch("[^%.]+") do
+ for k in gmatch(key,"[^%.]+") do
local dk = d[k]
if dk then
d = dk
@@ -9782,6 +11822,7 @@ own.libs = { -- todo: check which ones are really needed
'l-os.lua',
'l-file.lua',
'l-md5.lua',
+ 'l-url.lua',
'l-dir.lua',
'l-boolean.lua',
'l-math.lua',
@@ -9790,11 +11831,13 @@ own.libs = { -- todo: check which ones are really needed
'l-utils.lua',
'l-aux.lua',
-- 'l-xml.lua',
+ 'trac-tra.lua',
'lxml-tab.lua',
- 'lxml-pth.lua',
- 'lxml-ent.lua',
+ 'lxml-lpt.lua',
+-- 'lxml-ent.lua',
'lxml-mis.lua',
- 'trac-tra.lua',
+ 'lxml-aux.lua',
+ 'lxml-xml.lua',
'luat-env.lua',
'trac-inf.lua',
'trac-log.lua',
@@ -9809,7 +11852,7 @@ own.libs = { -- todo: check which ones are really needed
-- 'data-bin.lua',
'data-zip.lua',
'data-crl.lua',
--- 'data-lua.lua',
+ 'data-lua.lua',
'data-kps.lua', -- so that we can replace kpsewhich
'data-aux.lua', -- updater
'data-tmf.lua', -- tree files
@@ -9827,7 +11870,8 @@ end
-- End of hack.
-own.name = (environment and environment.ownname) or arg[0] or 'luatools.lua'
+own.name = (environment and environment.ownname) or arg[0] or 'luatools.lua'
+
own.path = string.match(own.name,"^(.+)[\\/].-$") or "."
own.list = { '.' }
@@ -9865,18 +11909,25 @@ if not resolvers then
os.exit()
end
-logs.setprogram('MTXrun',"TDS Runner Tool 1.22",environment.arguments["verbose"] or false)
+logs.setprogram('MTXrun',"TDS Runner Tool 1.24",environment.arguments["verbose"] or false)
local instance = resolvers.reset()
+local trackspec = environment.argument("trackers") or environment.argument("track")
+
+if trackspec then
+ trackers.enable(trackspec)
+end
+
runners = runners or { } -- global
messages = messages or { }
messages.help = [[
---script run an mtx script (--noquotes)
---execute run a script or program (--noquotes)
+--script run an mtx script (lua prefered method) (--noquotes), no script gives list
+--execute run a script or program (texmfstart method) (--noquotes)
--resolve resolve prefixed arguments
--ctxlua run internally (using preloaded libs)
+--internal run script using built in libraries (same as --ctxlua)
--locate locate given filename
--autotree use texmf tree cf. env 'texmfstart_tree' or 'texmfstarttree'
@@ -9893,16 +11944,20 @@ messages.help = [[
--unix create unix (linux) stubs
--verbose give a bit more info
+--trackers=list enable given trackers
--engine=str target engine
--progname=str format or backend
--edit launch editor with found file
--launch (--all) launch files like manuals, assumes os support
---intern run script using built in libraries
+--timedrun run a script an time its run
+--autogenerate regenerate databases if needed (handy when used to run context in an editor)
+
+--usekpse use kpse as fallback (when no mkiv and cache installed, often slower)
+--forcekpse force using kpse (handy when no mkiv and cache installed but less functionality)
---usekpse use kpse as fallback (when no mkiv and cache installed, often slower)
---forcekpse force using kpse (handy when no mkiv and cache installed but less functionality)
+--prefixes show supported prefixes
]]
runners.applications = {
@@ -9918,20 +11973,17 @@ runners.suffixes = {
}
runners.registered = {
- texexec = { 'texexec.rb', true }, -- context mkii runner (only tool not to be luafied)
+ texexec = { 'texexec.rb', false }, -- context mkii runner (only tool not to be luafied)
texutil = { 'texutil.rb', true }, -- old perl based index sorter for mkii (old versions need it)
texfont = { 'texfont.pl', true }, -- perl script that makes mkii font metric files
texfind = { 'texfind.pl', false }, -- perltk based tex searching tool, mostly used at pragma
texshow = { 'texshow.pl', false }, -- perltk based context help system, will be luafied
- -- texwork = { \texwork.pl', false }, -- perltk based editing environment, only used at pragma
-
+ -- texwork = { 'texwork.pl', false }, -- perltk based editing environment, only used at pragma
makempy = { 'makempy.pl', true },
mptopdf = { 'mptopdf.pl', true },
pstopdf = { 'pstopdf.rb', true }, -- converts ps (and some more) images, does some cleaning (replaced)
-
-- examplex = { 'examplex.rb', false },
concheck = { 'concheck.rb', false },
-
runtools = { 'runtools.rb', true },
textools = { 'textools.rb', true },
tmftools = { 'tmftools.rb', true },
@@ -9943,7 +11995,6 @@ runners.registered = {
xmltools = { 'xmltools.rb', true },
-- luatools = { 'luatools.lua', true },
mtxtools = { 'mtxtools.rb', true },
-
pdftrimwhite = { 'pdftrimwhite.pl', false }
}
@@ -9952,6 +12003,13 @@ runners.launchers = {
unix = { }
}
+-- like runners.libpath("framework"): looks on script's subpath
+
+function runners.libpath(...)
+ package.prepend_libpath(file.dirname(environment.ownscript),...)
+ package.prepend_libpath(file.dirname(environment.ownname) ,...)
+end
+
function runners.prepare()
local checkname = environment.argument("ifchanged")
if checkname and checkname ~= "" then
@@ -9996,7 +12054,7 @@ function runners.prepare()
return "run"
end
-function runners.execute_script(fullname,internal)
+function runners.execute_script(fullname,internal,nosplit)
local noquote = environment.argument("noquotes")
if fullname and fullname ~= "" then
local state = runners.prepare()
@@ -10036,17 +12094,20 @@ function runners.execute_script(fullname,internal)
end
end
if result and result ~= "" then
- local before, after = environment.split_arguments(fullname) -- already done
- environment.arguments_before, environment.arguments_after = before, after
+ if not no_split then
+ local before, after = environment.split_arguments(fullname) -- already done
+ environment.arguments_before, environment.arguments_after = before, after
+ end
if internal then
- arg = { } for _,v in pairs(after) do arg[#arg+1] = v end
+ arg = { } for _,v in pairs(environment.arguments_after) do arg[#arg+1] = v end
+ environment.ownscript = result
dofile(result)
else
local binary = runners.applications[file.extname(result)]
if binary and binary ~= "" then
result = binary .. " " .. result
end
- local command = result .. " " .. environment.reconstruct_commandline(after,noquote)
+ local command = result .. " " .. environment.reconstruct_commandline(environment.arguments_after,noquote)
if logs.verbose then
logs.simpleline()
logs.simple("executing: %s",command)
@@ -10054,8 +12115,24 @@ function runners.execute_script(fullname,internal)
logs.simpleline()
io.flush()
end
- local code = os.exec(command) -- maybe spawn
- return code == 0
+ -- no os.exec because otherwise we get the wrong return value
+ local code = os.execute(command) -- maybe spawn
+ if code == 0 then
+ return true
+ else
+ if binary then
+ binary = file.addsuffix(binary,os.binsuffix)
+ for p in string.gmatch(os.getenv("PATH"),"[^"..io.pathseparator.."]+") do
+ if lfs.isfile(file.join(p,binary)) then
+ return false
+ end
+ end
+ logs.simpleline()
+ logs.simple("This script needs '%s' which seems not to be installed.",binary)
+ logs.simpleline()
+ end
+ return false
+ end
end
end
end
@@ -10088,7 +12165,7 @@ function runners.execute_program(fullname)
return false
end
--- the --usekpse flag will fallback on kpse
+-- the --usekpse flag will fallback on kpse (hm, we can better update mtx-stubs)
local windows_stub = '@echo off\013\010setlocal\013\010set ownpath=%%~dp0%%\013\010texlua "%%ownpath%%mtxrun.lua" --usekpse --execute %s %%*\013\010endlocal\013\010'
local unix_stub = '#!/bin/sh\010mtxrun --usekpse --execute %s \"$@\"\010'
@@ -10143,7 +12220,7 @@ function runners.locate_file(filename)
end
function runners.locate_platform()
- runners.report_location(os.currentplatform())
+ runners.report_location(os.platform)
end
function runners.report_location(result)
@@ -10176,7 +12253,8 @@ end
function runners.save_script_session(filename, list)
local t = { }
- for _, key in ipairs(list) do
+ for i=1,#list do
+ local key = list[i]
t[key] = environment.arguments[key]
end
io.savedata(filename,table.serialize(t,true))
@@ -10265,20 +12343,22 @@ function runners.find_mtx_script(filename)
if fullname and fullname ~= "" then
return fullname
end
+ -- mtx- prefix checking
+ local mtxprefix = (filename:find("^mtx%-") and "") or "mtx-"
-- context namespace, mtx-<filename>
- fullname = "mtx-" .. filename
+ fullname = mtxprefix .. filename
fullname = found(fullname) or resolvers.find_file(fullname)
if fullname and fullname ~= "" then
return fullname
end
-- context namespace, mtx-<filename>s
- fullname = "mtx-" .. basename .. "s" .. "." .. suffix
+ fullname = mtxprefix .. basename .. "s" .. "." .. suffix
fullname = found(fullname) or resolvers.find_file(fullname)
if fullname and fullname ~= "" then
return fullname
end
-- context namespace, mtx-<filename minus trailing s>
- fullname = "mtx-" .. basename:gsub("s$","") .. "." .. suffix
+ fullname = mtxprefix .. basename:gsub("s$","") .. "." .. suffix
fullname = found(fullname) or resolvers.find_file(fullname)
if fullname and fullname ~= "" then
return fullname
@@ -10288,9 +12368,17 @@ function runners.find_mtx_script(filename)
return fullname
end
-function runners.execute_ctx_script(filename,arguments)
+function runners.execute_ctx_script(filename)
+ local arguments = environment.arguments_after
local fullname = runners.find_mtx_script(filename) or ""
- -- retyr after generate but only if --autogenerate
+ if file.extname(fullname) == "cld" then
+ -- handy in editors where we force --autopdf
+ logs.simple("running cld script: %s",filename)
+ table.insert(arguments,1,fullname)
+ table.insert(arguments,"--autopdf")
+ fullname = runners.find_mtx_script("context") or ""
+ end
+ -- retry after generate but only if --autogenerate
if fullname == "" and environment.argument("autogenerate") then -- might become the default
instance.renewcache = true
logs.setverbose(true)
@@ -10319,32 +12407,51 @@ function runners.execute_ctx_script(filename,arguments)
if logs.verbose then
logs.simple("using script: %s\n",fullname)
end
+ environment.ownscript = fullname
dofile(fullname)
local savename = environment.arguments['save']
- if savename and runners.save_list and not table.is_empty(runners.save_list or { }) then
- if type(savename) ~= "string" then savename = file.basename(fullname) end
- savename = file.replacesuffix(savename,"cfg")
- runners.save_script_session(savename, runners.save_list)
+ if savename then
+ local save_list = runners.save_list
+ if save_list and next(save_list) then
+ if type(savename) ~= "string" then savename = file.basename(fullname) end
+ savename = file.replacesuffix(savename,"cfg")
+ runners.save_script_session(savename,save_list)
+ end
end
return true
end
else
- logs.setverbose(true)
- if filename == "" then
- logs.simple("unknown script, no name given")
+ -- logs.setverbose(true)
+ if filename == "" or filename == "help" then
local context = resolvers.find_file("mtx-context.lua")
+ logs.setverbose(true)
if context ~= "" then
local result = dir.glob((string.gsub(context,"mtx%-context","mtx-*"))) -- () needed
local valid = { }
- for _, scriptname in ipairs(result) do
- scriptname = string.match(scriptname,".*mtx%-([^%-]-)%.lua")
- if scriptname then
- valid[#valid+1] = scriptname
+ table.sort(result)
+ for i=1,#result do
+ local scriptname = result[i]
+ local scriptbase = string.match(scriptname,".*mtx%-([^%-]-)%.lua")
+ if scriptbase then
+ local data = io.loaddata(scriptname)
+ local banner, version = string.match(data,"[\n\r]logs%.extendbanner%s*%(%s*[\"\']([^\n\r]+)%s*(%d+%.%d+)")
+ if banner then
+ valid[#valid+1] = { scriptbase, version, banner }
+ end
end
end
if #valid > 0 then
- logs.simple("known scripts: %s",table.concat(valid,", "))
+ logs.reportbanner()
+ logs.reportline()
+ logs.simple("no script name given, known scripts:")
+ logs.simple()
+ for k=1,#valid do
+ local v = valid[k]
+ logs.simple("%-12s %4s %s",v[1],v[2],v[3])
+ end
end
+ else
+ logs.simple("no script name given")
end
else
filename = file.addsuffix(filename,"lua")
@@ -10358,6 +12465,12 @@ function runners.execute_ctx_script(filename,arguments)
end
end
+function runners.prefixes()
+ logs.reportbanner()
+ logs.reportline()
+ logs.simple(table.concat(resolvers.allprefixes(true)," "))
+end
+
function runners.timedrun(filename) -- just for me
if filename and filename ~= "" then
runners.timed(function() os.execute(filename) end)
@@ -10385,7 +12498,9 @@ instance.lsrmode = environment.argument("lsr") or false
-- maybe the unset has to go to this level
-if environment.argument("usekpse") or environment.argument("forcekpse") then
+local is_mkii_stub = runners.registered[file.removesuffix(file.basename(filename))]
+
+if environment.argument("usekpse") or environment.argument("forcekpse") or is_mkii_stub then
os.setenv("engine","")
os.setenv("progname","")
@@ -10420,7 +12535,7 @@ if environment.argument("usekpse") or environment.argument("forcekpse") then
return (kpse_initialized():show_path(name)) or ""
end
- elseif environment.argument("usekpse") then
+ elseif environment.argument("usekpse") or is_mkii_stub then
resolvers.load()
@@ -10449,7 +12564,6 @@ else
end
-
if environment.argument("selfmerge") then
-- embed used libraries
utils.merger.selfmerge(own.name,own.libs,own.list)
@@ -10462,9 +12576,14 @@ elseif environment.argument("selfupdate") then
elseif environment.argument("ctxlua") or environment.argument("internal") then
-- run a script by loading it (using libs)
ok = runners.execute_script(filename,true)
-elseif environment.argument("script") or environment.argument("s") then
+elseif environment.argument("script") or environment.argument("scripts") then
-- run a script by loading it (using libs), pass args
- ok = runners.execute_ctx_script(filename,after)
+ if is_mkii_stub then
+ -- execute mkii script
+ ok = runners.execute_script(filename,false,true)
+ else
+ ok = runners.execute_ctx_script(filename)
+ end
elseif environment.argument("execute") then
-- execute script
ok = runners.execute_script(filename)
@@ -10491,6 +12610,8 @@ elseif environment.argument("locate") then
elseif environment.argument("platform")then
-- locate platform
runners.locate_platform()
+elseif environment.argument("prefixes") then
+ runners.prefixes()
elseif environment.argument("timedrun") then
-- locate platform
runners.timedrun(filename)
@@ -10499,8 +12620,14 @@ elseif environment.argument("help") or filename=='help' or filename == "" then
-- execute script
elseif filename:find("^bin:") then
ok = runners.execute_program(filename)
+elseif is_mkii_stub then
+ -- execute mkii script
+ ok = runners.execute_script(filename,false,true)
else
- ok = runners.execute_script(filename)
+ ok = runners.execute_ctx_script(filename)
+ if not ok then
+ ok = runners.execute_script(filename)
+ end
end
if os.platform == "unix" then
diff --git a/Master/texmf-dist/scripts/context/lua/mtxrun.rme b/Master/texmf-dist/scripts/context/lua/mtxrun.rme
index 9cb56486aba..9850e389d74 100644
--- a/Master/texmf-dist/scripts/context/lua/mtxrun.rme
+++ b/Master/texmf-dist/scripts/context/lua/mtxrun.rme
@@ -1,3 +1,18 @@
-On MSWindows the mtxrun.lua script is called
-with mtxrun.cmd. On Unix you can either rename
-mtxrun.lua to mtxrun, or use a symlink.
+On MSWindows the mtxrun.lua script is called with
+mtxrun.exe. On Unix you can either rename mtxrun.lua
+to mtxrun, or use a symlink.
+
+You can create additional stubs, like
+
+copy mtxrun.exe luatools.exe
+copy mtxrun.exe texexec.exe
+copy mtxrun.exe context.exe
+copy mtxrun.exe mtx-server.exe
+
+The mtxrun.exe program is rather dump and only
+intercepts mtxrun, luatools and texmfstart (for
+old times sake) and passes the buck to mtxrun.lua
+which happens to know enough of mkii to deal
+with kpse based lookups and therefore acts like
+texmfstart but when used with mkiv it behaves
+more clever and looks for more.
diff --git a/Master/texmf-dist/scripts/context/lua/x-ldx.lua b/Master/texmf-dist/scripts/context/lua/x-ldx.lua
index af5c9c0c87e..e0f21d68cd9 100644
--- a/Master/texmf-dist/scripts/context/lua/x-ldx.lua
+++ b/Master/texmf-dist/scripts/context/lua/x-ldx.lua
@@ -6,7 +6,8 @@ itself serves as an example of using <logo label='lua'/> in combination
with <logo label='tex'/>.
I will rewrite this using lpeg once I have the time to study that nice new
-subsystem.
+subsystem. On the other hand, we cannot expect proper <logo label='tex'/>
+ad for educational purposed the syntax migh be wrong.
--ldx]]--
banner = "version 1.0.1 - 2007+ - PRAGMA ADE / CONTEXT"
@@ -126,79 +127,8 @@ ldx.make_index = true
function ldx.enhance(data) -- i need to use lpeg and then we can properly autoindent -)
local e = ldx.escape
- for _,v in pairs(data) do
- if v.code then
- local dqs, sqs, com, cmt, cod = { }, { }, { }, { }, e(v.code)
- cod = cod:gsub('\\"', "##d##")
- cod = cod:gsub("\\'", "##s##")
- cod = cod:gsub("%-%-%[%[.-%]%]%-%-", function(s)
- cmt[#cmt+1] = s
- return "[[[[".. #cmt .."]]]]"
- end)
- cod = cod:gsub("%-%-([^\n]*)", function(s)
- com[#com+1] = s
- return "[[".. #com .."]]"
- end)
- cod = cod:gsub("(%b\"\")", function(s)
- dqs[#dqs+1] = s:sub(2,-2) or ""
- return "<<<<".. #dqs ..">>>>"
- end)
- cod = cod:gsub("(%b\'\')", function(s)
- sqs[#sqs+1] = s:sub(2,-2) or ""
- return "<<".. #sqs ..">>"
- end)
- cod = cod:gsub("(%a+)",function(key)
- local class = ldx.keywords.reserved[key]
- if class then
- return "<key class='" .. class .. "'>" .. key .. "</key>"
- else
- return key
- end
- end)
- cod = cod:gsub("<<<<(%d+)>>>>", function(s)
- return "<dqs>" .. dqs[tonumber(s)] .. "</dqs>"
- end)
- cod = cod:gsub("<<(%d+)>>", function(s)
- return "<sqs>" .. sqs[tonumber(s)] .. "</sqs>"
- end)
- cod = cod:gsub("%[%[%[%[(%d+)%]%]%]%]", function(s)
- return cmt[tonumber(s)]
- end)
- cod = cod:gsub("%[%[(%d+)%]%]", function(s)
- return "<com>" .. com[tonumber(s)] .. "</com>"
- end)
- cod = cod:gsub("##d##", "\\\"")
- cod = cod:gsub("##s##", "\\\'")
- if ldx.make_index then
- local lines = cod:split("\n")
- local f = "(<key class='1'>function</key>)%s+([%w%.]+)%s*%("
- for k,v in pairs(lines) do
- -- functies
- v = v:gsub(f,function(key, str)
- return "<function>" .. str .. "</function>("
- end)
- -- variables
- v = v:gsub("^([%w][%w%,%s]-)(=[^=])",function(str, rest)
- local t = string.split(str, ",%s*")
- for k,v in pairs(t) do
- t[k] = "<variable>" .. v .. "</variable>"
- end
- return table.join(t,", ") .. rest
- end)
- -- so far
- lines[k] = v
- end
- v.code = table.concat(lines,"\n")
- else
- v.code = cod
- end
- end
- end
-end
-
-function ldx.enhance(data) -- i need to use lpeg and then we can properly autoindent -)
- local e = ldx.escape
- for _,v in pairs(data) do
+ for k=1,#data do
+ local v = data[k]
if v.code then
local dqs, sqs, com, cmt, cod = { }, { }, { }, { }, e(v.code)
cod = cod:gsub('\\"', "##d##")
@@ -244,7 +174,8 @@ function ldx.enhance(data) -- i need to use lpeg and then we can properly autoin
if ldx.make_index then
local lines = cod:split("\n")
local f = "(<key class='1'>function</key>)%s+([%w%.]+)%s*%("
- for k,v in pairs(lines) do
+ for k=1,#lines do
+ local v = lines[k]
-- functies
v = v:gsub(f,function(key, str)
return "<function>" .. str .. "</function>("
@@ -252,8 +183,8 @@ function ldx.enhance(data) -- i need to use lpeg and then we can properly autoin
-- variables
v = v:gsub("^([%w][%w%,%s]-)(=[^=])",function(str, rest)
local t = string.split(str, ",%s*")
- for k,v in pairs(t) do
- t[k] = "<variable>" .. v .. "</variable>"
+ for k=1,#t do
+ t[k] = "<variable>" .. t[k] .. "</variable>"
end
return table.join(t,", ") .. rest
end)
@@ -276,14 +207,17 @@ and by calculating the indentation we also avoid space troubles. It also makes
it possible to change the indentation afterwards.
--ldx]]--
-function ldx.as_xml(data)
+function ldx.as_xml(data) -- ldx: not needed
local t, cmode = { }, false
t[#t+1] = "<?xml version='1.0' standalone='yes'?>\n"
t[#t+1] = "\n<document xmlns:ldx='http://www.pragma-ade.com/schemas/ldx.rng' xmlns='http://www.pragma-ade.com/schemas/ldx.rng'>\n"
- for _,v in pairs(data) do -- ldx: not needed
+ for k=1,#data do
+ local v = data[k]
if v.code and not v.code:is_empty() then
t[#t+1] = "\n<code>\n"
- for k,v in pairs(v.code:split("\n")) do -- make this faster
+ local split = v.code:split("\n")
+ for k=1,#split do -- make this faster
+ local v = split[k]
local a, b = v:find("^(%s+)")
if v then v = v:gsub("[\n\r ]+$","") end
if a and b then
@@ -384,3 +318,5 @@ The main conversion call is:
if arg and arg[1] then
ldx.convert(arg[1],arg[2])
end
+
+--~ exit(1)
diff --git a/Master/texmf-dist/scripts/context/perl/mptopdf.pl b/Master/texmf-dist/scripts/context/perl/mptopdf.pl
index a6b946baa4d..41d1ae1f7ef 100644
--- a/Master/texmf-dist/scripts/context/perl/mptopdf.pl
+++ b/Master/texmf-dist/scripts/context/perl/mptopdf.pl
@@ -104,7 +104,7 @@ if (($pattern eq '')||($Help)) {
my $error = system ($runner) ;
if ($error) {
print "\n$program : error while processing mp file\n" ;
- exit ;
+ exit 1 ;
} else {
$pattern =~ s/\.mp$//io ;
@files = glob "$pattern.*" ;
@@ -131,7 +131,11 @@ foreach my $file (@files) {
} else {
$command = "$command \\\\relax $file" ;
}
- system($command) ;
+ my $error = system($command) ;
+ if ($error) {
+ print "\n$program : error while processing tex file\n" ;
+ exit 1 ;
+ }
my $pdfsrc = basename($_).".pdf";
rename ($pdfsrc, "$_-$1.pdf") ;
if (-e $pdfsrc) {
diff --git a/Master/texmf-dist/scripts/context/perl/texshow.pl b/Master/texmf-dist/scripts/context/perl/texshow.pl
deleted file mode 100644
index 629c28f99ec..00000000000
--- a/Master/texmf-dist/scripts/context/perl/texshow.pl
+++ /dev/null
@@ -1,956 +0,0 @@
-eval '(exit $?0)' && eval 'exec perl -w -S $0 ${1+"$@"}' && eval 'exec perl -w -S $0 $argv:q'
- if 0;
-
-#D \module
-#D [ file=texshow.pl,
-#D version=2006.08.04,
-#D title=TeXShow,
-#D subtitle=showing \CONTEXT\ commands,
-#D author=Taco Hoekwater,
-#D date=\currentdate,
-#D copyright={Taco Hoekwater}]
-
-#D Early 1999 \TEXSHOW\ showed up in the \CONTEXT\ distribution. At that time
-#D the user interface was described in files named \type {setup*.tex}. The
-#D program used a stripped down version of these definition files, generated
-#D by \CONTEXT\ itself. \TEXSHOW\ shows you the commands, their (optional)
-#D arguments, as well as the parameters and their values. For some five years
-#D there was no need to change \TEXSHOW. However, when a few years ago we
-#D started providing an \XML\ variant of the user interface definitions, Taco
-#D came up with \TEXSHOW||\XML. Because Patricks \CONTEXT\ garden and tools
-#D like \CTXTOOLS\ also use the \XML\ definitions, it's time to drop the old
-#D \TEX\ based definitions and move forward. From now on Taco's version is the
-#D one to be used.
-#D
-#D Hans Hagen - Januari 2005
-#D
-#D ChangeLog:
-#D \startitemize
-#D \item Add keyboard bindings for quitting the app: Ctrl-q,Ctrl-x,Alt-F4 (2006/07/19)
-#D \item Support for define --resolve (2006/08/04)
-#D \stopitemize
-
-use strict;
-use Getopt::Long ;
-use XML::Parser;
-use Data::Dumper;
-use Tk;
-use Tk::ROText ;
-use Config;
-use Time::HiRes;
-
-$Getopt::Long::passthrough = 1 ; # no error message
-$Getopt::Long::autoabbrev = 1 ; # partial switch accepted
-
-my $ShowHelp = 0;
-my $Debug = 0;
-my $Editmode = 0;
-my $Interface = 'cont-en';
-my $current_command;
-my $current_interface;
-my $current_part;
-my @setup_files;
-
-my %setups;
-my %commes;
-my %descrs;
-my %examps;
-my %trees;
-my %positions;
-my %locations;
-my %crosslinks;
-
-
-&GetOptions
- ( "help" => \$ShowHelp ,
- "interface=s" => \$Interface ,
- "debug" => \$Debug,
- "edit" => \$Editmode) ;
-
-print "\n";
-
-show('TeXShow-XML 0.3 beta','Taco Hoekwater 2006',"/");
-
-print "\n";
-
-if ($ShowHelp) {
- show('--help','print this help');
- show('--interface=lg','primary interface');
- show('--debug','print debugging info');
- show('string','show info about command \'string\'');
- show('string lg','show info about \'string\' in language \'lg\'');
- print "\n";
- exit 0;
-}
-
-my $command = $ARGV[0] || '';
-my $interface = $ARGV[1] || '';
-if ($interface =~ /^[a-z][a-z]$/i) {
- $Interface = 'cont-' . lc($interface);
-} elsif ($interface && $command =~ /^[a-z][a-z]$/i) {
- show('debug',"switching '$interface' and '$command'");
- $Interface = 'cont-' . lc($command);
- $command = $interface;
-}
-
-if ($command =~ s/^\\//) {
- show('debug','removed initial command backslash');
-}
-
-show('interface', $Interface);
-if ($command){
- show ('command', "\\$command") ;
-}
-
-print "\n";
-
-show('status','searching for setup files');
-
-my $setup_path;
-my ($mainwindow,$interfaceframe,$partframe,$leftframe,$rightframe,$buttonframe);
-my ($request,$listbox,$textwindow,%interfacebuttons,%partbuttons);
-
-my ($textfont,$userfont,$buttonfont);
-
-my $Part;
-
-if (setups_found($Interface)) {
- $current_interface = '';
- $current_command = '';
- $current_part = 'Command';
- show('status','loading setups') ;
- load_setups($Interface) ;
- show ('status','initializing display') ;
- initialize_display();
- change_setup();
- show_command ($command);
- $mainwindow->deiconify();
- show ('status','entering main loop') ;
- MainLoop () ;
- show ('status','closing down') ;
-} else {
- show ('error','no setup files found') ;
-}
-print "\n";
-
-sub initialize_display {
- my $dosish = ($Config{'osname'} =~ /dos|win/i) ;
- my $default_size = $dosish ? 9 : 12 ;
- my $s_vertical = 30 ;
- my $s_horizontal = 72 ;
- my $c_horizontal = 24 ;
- if (!$dosish) {
- $textfont = "-adobe-courier-bold-r-normal--$default_size-120-75-75-m-70-iso8859-1" ;
- $userfont = "-adobe-courier-bold-o-normal--$default_size-120-75-75-m-70-iso8859-1" ;
- $buttonfont = "-adobe-helvetica-bold-r-normal--$default_size-120-75-75-p-69-iso8859-1";
- } else {
- $textfont = "Courier $default_size " ;
- $userfont = "Courier $default_size italic" ;
- $buttonfont = "Helvetica $default_size bold " ;
- }
- $mainwindow = MainWindow -> new ( -title => 'ConTeXt commands' ) ;
- $buttonframe = $mainwindow -> Frame () ; # buttons
- $leftframe = $mainwindow -> Frame () ; # leftside
- $rightframe = $mainwindow -> Frame();
- $request = $rightframe -> Entry (-font => $textfont,
- -background => 'ivory1',
- -width => $c_horizontal);
- $listbox = $rightframe -> Scrolled ('Listbox',
- -scrollbars => 'e',
- -font => $textfont,
- -width => $c_horizontal,
- -selectbackground => 'gray',
- -background => 'ivory1',
- -selectmode => 'browse') ;
- $textwindow = $leftframe -> Scrolled ('ROText',
- -scrollbars => 'se',
- -height => $s_vertical,
- -width => $s_horizontal,
- -wrap => 'none',
- -background => 'ivory1',
- -font => $textfont);
- $interfaceframe = $leftframe -> Frame();
- $mainwindow -> withdraw() ;
- $mainwindow -> resizable ('y', 'y') ;
- foreach (@setup_files) {
- $interfacebuttons{$_} = $buttonframe -> Radiobutton (-text => $_,
- -value => $_,
- -font => $buttonfont,
- -selectcolor => 'ivory1',
- -indicatoron => 0,
- -command => \&change_setup,
- -variable => \$Interface );
-
- $interfacebuttons{$_} -> pack (-padx => '2p',-pady => '2p','-side' => 'left' );
- }
- foreach (qw(Command Description Comments Examples)) {
- $partbuttons{$_} = $interfaceframe -> Radiobutton (-text => $_,
- -value => $_,
- -font => $buttonfont,
- -selectcolor => 'ivory1',
- -indicatoron => 0,
- -command => \&change_part,
- -variable => \$Part );
- $partbuttons{$_} -> pack (-padx => '2p',-pady => '2p','-side' => 'left' );
- }
- # global top
- $buttonframe -> pack ( -side => 'top' , -fill => 'x' , -expand => 0 ) ;
- # top in left
- $interfaceframe -> pack ( -side => 'top' , -fill => 'x' , -expand => 0 ) ;
- $textwindow -> pack ( -side => 'top' , -fill => 'both' , -expand => 1 ) ;
- $leftframe -> pack ( -side => 'left' , -fill => 'both' , -expand => 1 ) ;
- # right
- $request -> pack ( -side => 'top' , -fill => 'x' ) ;
- $listbox -> pack ( -side => 'bottom' , -fill => 'both' , -expand => 1 ) ;
- $rightframe -> pack ( -side => 'right' , -fill => 'both' , -expand => 1 ) ;
- $listbox -> bind ('<B1-Motion>', \&show_command ) ;
- $listbox -> bind ('<1>' , \&show_command ) ;
- $listbox -> bind ('<Key>' , \&show_command ) ;
- $textwindow -> tag ('configure', 'user' , -font => $userfont ) ;
- $textwindow -> tag ('configure', 'optional' , -font => $userfont ) ;
- $textwindow -> tag ('configure', 'command' , -foreground => 'green3' ) ;
- $textwindow -> tag ('configure', 'variable' , -font => $userfont ) ;
- $textwindow -> tag ('configure', 'default' , -underline => 1 ) ;
- $textwindow -> tag ('configure', 'symbol' , -foreground => 'blue3' ) ;
- $textwindow -> tag ('configure', 'or' , -foreground => 'yellow3' ) ;
- $textwindow -> tag ('configure', 'argument' , -foreground => 'red3' ) ;
- $textwindow -> tag ('configure', 'par' , -lmargin1 => '4m' ,
- -wrap => 'word' ,
- -lmargin2 => '6m' ) ;
- foreach my $chr ('a'..'z','A'..'Z') {
- $mainwindow -> bind ( "<KeyPress-$chr>", sub { insert_request(shift, $chr) } );
- }
- $request -> bind ('<Return>', sub { handle_request() } ) ;
- $mainwindow -> bind ( "<backslash>", sub { insert_request(shift, "\\") } ) ;
- $mainwindow -> bind ( "<space>", sub { new_request() } ) ;
- $mainwindow -> bind ( "<BackSpace>", sub { delete_request() } ) ;
- $mainwindow -> bind ( "<Prior>", sub { prev_command() } ) ;
- $mainwindow -> bind ( "<Next>", sub { next_command() } ) ;
- $mainwindow -> bind ( "<Control-x>", sub { exit(0) } ) ;
- $mainwindow -> bind ( "<Control-X>", sub { exit(0) } ) ;
- $mainwindow -> bind ( "<Control-q>", sub { exit(0) } ) ;
- $mainwindow -> bind ( "<Control-Q>", sub { exit(0) } ) ;
- $mainwindow -> bind ( "<Alt-F4>", sub { exit(0) } ) ;
-}
-
-sub show {
- my ($pre,$post,$sep) = @_;
- unless ($pre eq 'debug' && !$Debug) {
- $sep = ':' unless defined $sep;
- print sprintf("%22s $sep %+s\n",$pre,$post);
- }
-}
-
-sub change_setup {
- # switches to another setup file
- if ($current_interface ne $Interface ) {
- my $loc = 0;
- if ($current_command) {
- $loc = $positions{$Interface}{$current_command} || 0;
- }
- my @list = sort {lc $a cmp lc $b} keys %{$setups{$Interface}} ;
- my $num = 0;
- map { $locations{$Interface}{$_} = $num++; } @list;
- $listbox -> delete ('0.0', 'end') ;
- $listbox -> insert ('end', @list) ;
- # try to switch to other command as well, here.
- if ($current_command ne '') {
- show_command($crosslinks{$Interface}[$loc] || '');
- } else {
- $listbox -> selectionSet ('0.0', '0.0') ;
- $listbox -> activate ('0.0') ;
- }
- }
- $current_interface = $Interface;
- $mainwindow -> focus ;
-}
-
-sub change_part {
- if ($Part ne $current_part) {
- if($Part eq 'Command') {
- show_command();
- } elsif ($Part eq 'Description') {
- show_description();
- } elsif ($Part eq 'Comments') {
- show_comments();
- } elsif ($Part eq 'Examples') {
- show_examples();
- }
- }
- $current_part = $Part;
-}
-
-
-sub setups_found {
- # find the setup files
- my ($primary) = @_;
- $setup_path = `kpsewhich --progname=context cont-en.xml` ;
- chomp $setup_path;
- show ('debug', "path = '$setup_path'");
- if ($setup_path) {
- $setup_path =~ s/cont-en\.xml.*// ;
- @setup_files = glob ("${setup_path}cont\-??.xml") ; # HH: pattern patched, too greedy
- show ('debug', "globbed path into '@setup_files'");
- if (@setup_files) {
- my $found = 0;
- foreach (@setup_files) {
- s/\.xml.*$//;
- s/^.*?cont-/cont-/;
- if ($_ eq $primary) {
- $found = 1;
- show ('debug', "found primary setup '$primary'");
- } else {
- show ('debug', "found non-primary setup '$_'");
- }
- }
- if ($found) {
- return 1;
- } else {
- show('error',"setup file for '$primary' not found, using 'cont-en'");
- $Interface = 'cont-en';
- return 1;
- }
- } else {
- show('error',"setup file glob failed");
- }
- } elsif ($!) {
- show('error','kpsewhich not found');
- } else {
- show('error','setup files not found');
- }
- return 0;
-}
-
-sub load_setup {
- my ($path,$filename) = @_;
- my $localdefs = {};
- unless (keys %{$setups{$filename}}) {
- if (open(IN,"<${path}$filename.xml")) {
- my $position = 0 ;
- local $/ = '</cd:command>';
- while (my $data= <IN>) {
- next if $data =~ /\<\/cd:interface/;
- if ($data =~ /\<cd:interface/) {
- $data =~ s/^(.*?)\<cd:command/\<cd:command/sm;
- my $meta = $1;
- while ($meta =~ s!<cd:define name=(['"])(.*?)\1>(.*?)</cd:define>!!sm) {
- my $localdef = $2;
- my $localval = $3;
- $localdefs->{$localdef} = $localval;
- }
- }
- #
- if (keys %$localdefs) {
- while ($data =~ /<cd:resolve/) {
- $data =~ s/<cd:resolve name=(['"])(.*?)\1\/>/$localdefs->{$2}/ms;
- }
- }
- $data =~ s/\s*\n\s*//g;
- $data =~ /\<cd:command(.*?)\>/;
- my $info = $1;
- my ($name,$environment) = ('','');
- while ($info =~ s/^\s*(.*?)\s*=\s*(["'])(.*?)\2\s*//) {
- my $a = $1; my $b = $3;
- if ($a eq 'name') {
- $name = $b;
- } elsif ($a eq 'type') {
- $environment = $b;
- }
- }
- my $cmd = $name;
- if ($environment) {
- $cmd = "start" . $name;
- }
- $setups {$filename}{$cmd} = $data ;
- $trees {$filename}{$cmd} = undef;
- $positions {$filename}{$cmd} = ++$position ;
- $crosslinks{$filename}[$position] = $cmd ;
- }
- close IN;
- # now get explanations as well ...
- my $explname = $filename;
- $explname =~ s/cont-/expl-/;
- my $extras = 0 ;
- if (open(IN,"<${path}$explname.xml")) {
- local $/ = '</cd:explanation>';
- while (my $data= <IN>) {
- if ($data =~ /\<\/cd:explanations/) {
- next;
- }
- if ($data =~ /\<cd:explanations/) {
- $data =~ s/^(.*?)\<cd:explanation /\<cd:explanation /sm;
- my $meta = $1;
- }
- #
- $extras++;
- $data =~ /\<cd:explanation(.*?)\>/;
- my $info = $1;
- my ($name,$environment) = ('','');
- while ($info =~ s/^\s*(.*?)\s*=\s*(["'])(.*?)\2\s*//) {
- my $a = $1; my $b = $3;
- if ($a eq 'name') {
- $name = $b;
- } elsif ($a eq 'type') {
- $environment = $b;
- }
- }
- my $cmd = $name;
- if ($environment) {
- $cmd = "start" . $name;
- }
- my $comment = '';
- my $description = '';
- my @examples = ();
- $data =~ /\<cd:description\>(.*)\<\/cd:description\>/s and $description = $1;
- $data =~ /\<cd:comment\>(.*)\<\/cd:comment\>/s and $comment = $1;
- while ($data =~ s/\<cd:example\>(.*?)\<\/cd:example\>//s) {
- push @examples, $1;
- }
- if (length($comment) && $comment =~ /\S/) {
- $commes {$filename}{$cmd} = $comment;
- }
- if (length($description) && $description =~ /\S/) {
- $descrs {$filename}{$cmd} = $description;
- }
- my $testex = "@examples";
- if (length($testex) && $testex =~ /\S/) {
- $examps {$filename}{$cmd} = [@examples];
- }
- }
- }
- if ($extras) {
- show('debug',"interface '$filename', $position\&$extras commands");
- } else {
- show('debug',"interface '$filename', $position commands");
- }
- } else {
- show ('debug',"open() of ${path}$filename.xml failed");
- }
- }
- $Interface = $filename ;
-}
-
-sub load_setups {
- my ($primary) = @_;
- # load all setup files, but default to $primary
- my $t0 = [Time::HiRes::gettimeofday()];
- foreach my $setup (@setup_files) {
- if ($setup ne $primary) {
- load_setup ($setup_path,$setup);
- show('status',"loading '$setup' took " .Time::HiRes::tv_interval($t0) . " seconds");
- $t0 = [Time::HiRes::gettimeofday()];
- };
- };
- load_setup ($setup_path,$primary);
- show('status',"loading '$primary' took " .Time::HiRes::tv_interval($t0) . " seconds");
-}
-
-my @history = ();
-my $current_history = 0;
-
-sub show_command {
- my ($command,$nofix) = @_;
- if (keys %{$setups{$Interface}}) {
- my $key = '';
- if (defined $command && $command &&
- (defined $setups{$Interface}{$command} ||
- defined $setups{$Interface}{"start" . $command})) {
- $key = $command;
- my $whence =$locations{$Interface}{$command};
- $listbox -> selectionClear ('0.0','end') ;
- $listbox -> selectionSet($whence,$whence);
- $listbox -> activate($whence);
- $listbox -> see($whence);
- } else {
- $listbox -> selectionSet('0.0','0.0') unless $listbox->curselection();
- $key = $listbox -> get($listbox->curselection()) ;
- }
- show('debug',"current command: $current_command");
- show('debug'," new command: $key");
- $current_command = $key ;
- $textwindow -> delete ('1.0', 'end' ) ;
- $partbuttons{"Command"}->select();
- $partbuttons{"Command"}->configure('-state' => 'normal');
- $partbuttons{"Description"}->configure('-state' => 'disabled');
- $partbuttons{"Comments"}->configure('-state' => 'disabled');
- $partbuttons{"Examples"}->configure('-state' => 'disabled');
- if (defined $commes{$Interface}{$key}) {
- $partbuttons{"Comments"}->configure('-state' => 'normal');
- }
- if (defined $descrs{$Interface}{$key}) {
- $partbuttons{"Description"}->configure('-state' => 'normal');
- }
- if (defined $examps{$Interface}{$key}) {
- $partbuttons{"Examples"}->configure('-state' => 'normal');
- }
- unless (defined $nofix && $nofix) {
- push @history, $key;
- $current_history = $#history;
- }
- do_update_command ($key) ;
- $mainwindow -> update();
- $mainwindow -> focus() ;
- }
-}
-
-sub prev_command {
- if ($current_history > 0) {
- $current_history--;
- show_command($history[$current_history],1);
- }
-}
-
-sub next_command {
- unless ($current_history == $#history) {
- $current_history++;
- show_command($history[$current_history],1);
- }
-}
-
-sub show_description {
- $textwindow -> delete ('1.0', 'end' ) ;
- if (defined $descrs{$current_interface}{$current_command}) {
- $textwindow-> insert ('end',$descrs{$current_interface}{$current_command});
- }
- $mainwindow -> update();
- $mainwindow -> focus() ;
-}
-
-sub show_comments {
- $textwindow -> delete ('1.0', 'end' ) ;
- if (defined $commes{$current_interface}{$current_command}) {
- $textwindow-> insert ('end',$commes{$current_interface}{$current_command});
- }
- $mainwindow -> update();
- $mainwindow -> focus() ;
-}
-
-
-sub show_examples {
- $textwindow -> delete ('1.0', 'end' ) ;
- if (defined $examps{$current_interface}{$current_command}) {
- $textwindow-> insert ('end',join("\n\n",@{$examps{$current_interface}{$current_command}}));
- }
- $mainwindow -> update();
- $mainwindow -> focus() ;
-}
-
-
-
-
-sub has_attr {
- my ($elem,$att,$val) = @_;
- return 1 if (attribute($elem,$att) eq $val);
- return 0;
-}
-
-
-sub view_post {
- my ($stuff,$extra) = @_;
- $extra = '' unless defined $extra;
- $stuff =~ /^(.)(.*?)(.)$/;
- my ($l,$c,$r) = ($1,$2,$3);
- if ($l eq '[' || $l eq '(') {
- return ($l,['symbol','par',$extra],$c,['par',$extra],$r,['symbol','par',$extra],"\n",'par');
- } else {
- return ($l,['argument','par',$extra],$c,['par',$extra],$r,['argument','par',$extra],"\n",'par');
- }
-}
-
-sub view_pre {
- my ($stuff) = @_;
- $stuff =~ /^(.)(.*?)(.)$/;
- my ($l,$c,$r) = ($1,$2,$3);
- if ($l eq '[' || $l eq '(') {
- return ($l,['symbol'],$c,'',$r,['symbol']);
- } else {
- return ($l,['argument'],$c,'',$r,['argument']);
- }
-}
-
-sub create_setup_arguments {
- my $argx = shift;
- my @predisp = ();
- my @postdisp = ();
- foreach my $arg (children($argx)) {
- if (name($arg) eq 'cd:keywords') {
- # children are Constant* & Inherit? & Variable*
- my @children = children($arg);
- my $optional = (attribute($arg,'optional') eq 'yes' ? 'optional' : '');
- if (@children){
- push @predisp,'[', ['symbol',$optional];
- if (has_attr($arg,'list', 'yes')) {
- if (has_attr($arg,'interactive', 'exclusive')) {
- push @predisp, '...', '';
- } else {
- push @predisp, '..,...,..', '';
- }
- } else {
- push @predisp,'...', '';
- }
- push @predisp,']', ['symbol',$optional];
- }
- push @postdisp,'[', ['symbol','par',$optional];
- my $firsttrue = 1;
- foreach my $kwd (@children) {
- if ($firsttrue) {
- $firsttrue = 0;
- } else {
- push @postdisp,', ', ['symbol','par'];
- }
- if (name($kwd) eq 'cd:constant' ||
- name($kwd) eq 'cd:variable') {
- my $v = attribute($kwd,'type');
- my $def = '';
- my $var = '';
- $var = 'variable' if (name($kwd) eq 'cd:variable') ;
- $def = 'default' if (has_attr($kwd,'default', 'yes'));
- if ($v =~ /^cd:/) {
- $v =~ s/^cd://;
- $v .= "s" if (has_attr($arg,'list', 'yes'));
- push @postdisp, $v, ['user',$def,'par',$var];
- } else {
- push @postdisp, $v, [$def,'par',$var];
- }
- } elsif (name($kwd) eq 'cd:inherit') {
- my $v = attribute($kwd,'name');
- $textwindow -> tag ('configure', $v , -foreground => 'blue3',-underline => 1 ) ;
- $textwindow -> tagBind($v,'<ButtonPress>',sub {show_command($v)} );
- push @postdisp,"see ","par", "$v", [$v,'par'];
- }
- }
- push @postdisp,']', ['symbol','par',$optional];
- push @postdisp,"\n", 'par';
- } elsif (name($arg) eq 'cd:assignments') {
- # children are Parameter* & Inherit?
- my @children = children($arg);
- my $optional = (attribute($arg,'optional') eq 'yes' ? 'optional' : '');
- if (@children) {
- push @predisp,'[', ['symbol',$optional];
- if (has_attr($arg,'list', 'yes')) {
- push @predisp, '..,..=..,..', '';
- } else {
- push @predisp,'..=..', '';
- }
- push @predisp,']', ['symbol',$optional];
- push @postdisp,'[', ['symbol','par',$optional];
- my $isfirst = 1;
- foreach my $assn (@children) {
- if ($isfirst) {
- $isfirst = 0;
- } else {
- push @postdisp,",\n ", ['symbol','par'];
- }
- if (name($assn) eq 'cd:parameter') {
- push @postdisp,attribute($assn,'name'), 'par';
- push @postdisp,'=', ['symbol','par'];
- my $firstxtrue = 1;
- foreach my $par (children($assn)) {
- if ($firstxtrue) {
- $firstxtrue = 0;
- } else {
- push @postdisp,'|', ['or','par'];
- }
- if (name($par) eq 'cd:constant' || name($par) eq 'cd:variable') {
- my $var = '';
- $var = 'variable' if name($par) eq 'cd:variable';
- my $v = attribute($par,'type');
- if ($v =~ /^cd:/) {
- $v =~ s/^cd://;
- push @postdisp,$v, ['user','par',$var];
- } else {
- push @postdisp,$v, ['par',$var];
- }
- }
- }
- } elsif (name($assn) eq 'cd:inherit') {
- my $v = attribute($assn,'name');
- $textwindow -> tag ('configure', $v , -foreground => 'blue3',-underline => 1 ) ;
- $textwindow -> tagBind($v,'<ButtonPress>',sub {show_command($v)} );
- push @postdisp,"see ","par", "$v", [$v,'par'];
- }
- }
- push @postdisp,"]", ['symbol','par',$optional], "\n", '';
- }
- } elsif (name($arg) eq 'cd:content') {
- push @predisp, view_pre('{...}');
- push @postdisp, view_post('{...}');
- } elsif (name($arg) eq 'cd:triplet') {
- if (has_attr($arg,'list','yes')) {
- push @predisp, view_pre('[x:y:z=,..]');
- push @postdisp,view_post('[x:y:z=,..]');
- } else {
- push @predisp, view_pre('[x:y:z=]');
- push @postdisp,view_post('[x:y:z=]');
- }
- } elsif (name($arg) eq 'cd:reference') {
- my $optional = (attribute($arg,'optional') eq 'yes' ? 'optional' : '');
- if (has_attr($arg,'list','yes')) {
- push @postdisp, view_post('[ref,..]',$optional);
- push @predisp, view_pre('[ref,..]');
- } else {
- push @postdisp, view_post('[ref]',$optional);
- push @predisp, view_pre('[ref]');;
- }
- } elsif (name($arg) eq 'cd:word') {
- if (has_attr($arg,'list','yes')) {
- push @predisp, view_pre ('{...,...}');
- push @postdisp,view_post('{...,...}');
- } else {
- push @predisp, view_pre('{...}');
- push @postdisp, view_post('{...}');
- }
- } elsif (name($arg) eq 'cd:nothing') {
- my $sep = attribute($arg,'separator');
- if ($sep) {
- if($sep eq 'backslash') {
-# push @postdisp,'\\\\','par';
- push @predisp,'\\\\','';
- } else {
-# push @postdisp,$sep,'par';
- push @predisp,$sep,'';
- }
- }
- push @predisp,'...','';
- push @postdisp,'text',['variable','par'],"\n",'par';
- } elsif (name($arg) eq 'cd:file') {
- push @predisp,'...',['default'];
- push @postdisp,'...',['default','par'],"\n",'par';
- } elsif (name($arg) eq 'cd:csname') {
- push @predisp,'\command',['command'];
- push @postdisp,'\command',['command','par'],"\n",'par';
- } elsif (name($arg) eq 'cd:index') {
- if (has_attr($arg,'list','yes')) {
- push @predisp,view_pre('{..+...+..}');
- push @postdisp,view_post('{..+...+..}');
- } else {
- push @predisp, view_pre('{...}');
- push @postdisp,view_post('{...}');
- }
- } elsif (name($arg) eq 'cd:position') {
- if (has_attr($arg,'list','yes')) {
- push @predisp,view_pre('(...,...)');
- push @postdisp,view_post('(...,...)');
- } else {
- push @predisp,view_pre('(...)');
- push @postdisp,view_post('(...)');
- }
- } elsif (name($arg) eq 'cd:displaymath') {
- push @predisp, ('$$',['argument'],'...','','$$',['argument']);
- push @postdisp, ('$$',['argument','par'],'...',['par'],'$$',['argument','par']);
- } elsif (name($arg) eq 'cd:tex') {
- my $sep = attribute($arg,'separator');
- if ($sep) {
- if($sep eq 'backslash') {
-# push @postdisp,'\\\\','par';
- push @predisp,'\\\\','';
- } else {
-# push @postdisp,$sep,'par';
- push @predisp,$sep,'';
- }
- }
- my $cmd = "\\" . attribute($arg,'command');
- push @predisp,$cmd,'';
-# push @postdisp,$cmd,['command','par'],"\n",'par';
- }
- }
- return (\@predisp,\@postdisp);
-}
-
-
-# <foo><head id="a">Hello <em>there</em></head><bar>Howdy<ref/></bar>do</foo>
-#
-# would be:
-#
-# Tag Content
-# ==================================================================
-# [foo, [{}, head, [{id => "a"}, 0, "Hello ", em, [{}, 0, "there"]],
-# bar, [ {}, 0, "Howdy", ref, [{}]],
-# 0, "do"
-# ]
-# ]
-
-sub attribute {
- my ($elem,$att) = @_;
- if (defined $elem->[1] && defined $elem->[1]->[0] && defined $elem->[1]->[0]->{$att}) {
- my $ret = $elem->[1]->[0]->{$att};
- show ('debug',"returning attribute $att=$ret");
- return $elem->[1]->[0]->{$att};
- } else {
- return '';
- }
-}
-
-sub name {
- my ($elem) = @_;
- if (defined $elem->[0] ) {
- return $elem->[0];
- } else {
- return '';
- }
-}
-
-# return all children at a certain level
-sub children {
- my ($elem) = @_;
- if (defined $elem->[1] && defined $elem->[1]->[1]) {
- my @items = @{$elem->[1]};
- shift @items ; # deletes the attribute.
- my @ret = ();
- while (@items) {
- push @ret, [shift @items, shift @items];
- }
- return @ret;
- } else {
- return ();
- }
-}
-
-# return the first child with the right name
-sub find {
- my ($elem,$name) = @_;
- if ($elem->[0] eq $name) {
- return $elem;
- }
- if (ref($elem->[1]) eq 'ARRAY') {
- my @contents = @{$elem->[1]};
- shift @contents;
- while (my $ename = shift @contents) {
- my $con = shift @contents;
- if ($ename eq $name) {
- return [$ename,$con];
- }
- }
- }
- return [];
-}
-
-sub do_update_command # type: 0=display, 1=compute only
- { my ($command, $type) = @_ ;
- $type = 0 unless defined $type;
- my $setup;
- if (!defined $trees{$Interface}{$command}) {
- my $parser = XML::Parser->new('Style' => 'Tree');
- $trees{$Interface}{$command} = $parser->parse($setups{$Interface}{$command});
- }
- $setup = $trees{$Interface}{$command} ;
- my $predisp = undef;
- my $postdisp = undef;
- my @cmddisp = ();
- my @cmddispafter = ();
- my $pradisp = undef;
- my $altdisp = undef;
- if (attribute($setup,'file')) {
- my $filename = attribute($setup,'file');
- my $fileline = attribute($setup,'line') || 0;
- $textwindow->insert ('end',"$filename:${fileline}::\n\n", '' );
- }
- # start with backslash
- push @cmddisp, "\\", 'command' ;
- my $env = 0;
- if (has_attr($setup,'type','environment')) {
- $env = 1;
- }
- if ($env) { push @cmddisp, "start", 'command' ; }
- if ($env) { push @cmddispafter, " ... ", '', "\\stop", 'command' ; }
- my $seq = find($setup,'cd:sequence');
- # display rest of command name
- foreach my $seqpart (children($seq)) {
- my $text = attribute($seqpart,'value');
- if (name($seqpart) eq 'cd:variable') {
- push @cmddisp, $text, ['command','user'];
- if ($env) { push @cmddispafter, $text, ['command','user']; }
- } elsif (name($seqpart) eq 'cd:string') {
- push @cmddisp, $text, 'command';
- if ($env) { push @cmddispafter, $text, 'command'; }
- }
- }
- #
- my $args = find($setup,'cd:arguments');
- # display commands
- if ($args) {
- my $curarg = 0;
- foreach my $arg (children($args)) {
- if (name($arg) eq 'cd:choice') {
- my ($a,$b) = children($arg);
- ($predisp,$postdisp) = create_setup_arguments(['cd:arguments',[{}, @$a]]);
- ($pradisp,$altdisp) = create_setup_arguments(['cd:arguments',[{}, @$b]]);
- } else {
- ($predisp,$postdisp) = create_setup_arguments($args);
- }
- $curarg++;
- }
- }
- return if $type;
- if(defined $postdisp) {
- if(defined $altdisp) {
- $textwindow->insert('end',@cmddisp,@$predisp,@cmddispafter, "\n",'',
- @cmddisp,@$pradisp,@cmddispafter, "\n\n",'',
- @cmddisp, "\n",'',
- @$postdisp, "\n",'',
- @cmddisp, "\n",'',
- @$altdisp);
- } else {
- $textwindow->insert('end',@cmddisp,@$predisp, @cmddispafter ,"\n\n",'',
- @cmddisp,"\n",'',
- @$postdisp);
- }
- } else {
- $textwindow->insert('end',@cmddisp);
- }
-}
-
-
-#D The next feature is dedicated to Tobias, who suggested
-#D it, and Taco, who saw it as yet another proof of the
-#D speed of \PERL. It's also dedicated to Ton, who needs it
-#D for translating the big manual.
-
-sub handle_request {
- my $index = $listbox -> index('end') ;
- return unless $index;
- my $req = $request -> get ;
- return unless $req;
- $req =~ s/\\//o ;
- $req =~ s/\s//go ;
- $request -> delete('0','end') ;
- $request -> insert('0',$req) ;
- return unless $req;
- my ($l,$c) = split (/\./,$index) ;
- for (my $i=0;$i<=$l;$i++) {
- $index = "$i.0" ;
- my $str = $listbox -> get ($index, $index) ;
- if (defined $str && ref($str) eq 'ARRAY') {
- $str = "@{$str}";
- }
- if (defined $str && $str =~ /^$req/) {
- show_command($str) ;
- return ;
- }
- }
-}
-
-sub insert_request {
- my ($self, $chr) = @_ ;
- # don't echo duplicate if $chr was keyed in in the (focussed) entrybox
- $request -> insert ('end', $chr) unless $self eq $request;
- handle_request();
-}
-
-sub delete_request {
- my $self = shift ;
- # delete last character, carefully
- if ($self ne $request) {
- my $to = $request -> index ('end') ;
- my $from = $to - 1 ;
- if ($from<0) { $from = 0 }
- $request -> delete ($from,$to);
- }
- handle_request();
-}
-
-sub new_request {
- $request -> delete (0,'end') ;
- handle_request();
-}
-
diff --git a/Master/texmf-dist/scripts/context/ruby/base/ctx.rb b/Master/texmf-dist/scripts/context/ruby/base/ctx.rb
index a077297f243..13b4045afe0 100644
--- a/Master/texmf-dist/scripts/context/ruby/base/ctx.rb
+++ b/Master/texmf-dist/scripts/context/ruby/base/ctx.rb
@@ -124,6 +124,11 @@ class CtxRunner
report("loading ctx file #{@ctxname}")
end
+ if @xmldata then
+ # out if a sudden rexml started to be picky about namespaces
+ @xmldata.gsub!(/<ctx:job>/,"<ctx:job xmlns:ctx='http://www.pragma-ade.com/rng/ctx.rng'>")
+ end
+
begin
@xmldata = REXML::Document.new(@xmldata)
rescue
diff --git a/Master/texmf-dist/scripts/context/ruby/base/tex.rb b/Master/texmf-dist/scripts/context/ruby/base/tex.rb
index 23db7f1e872..84025693b01 100644
--- a/Master/texmf-dist/scripts/context/ruby/base/tex.rb
+++ b/Master/texmf-dist/scripts/context/ruby/base/tex.rb
@@ -680,6 +680,11 @@ class TEX
texformatpath = ''
setvariable('error','no permissions to write')
end
+ if not mpsformats then
+ # we want metafun to be in sync
+ setvariable('mpsformats',defaultmpsformats)
+ mpsformats = validmpsformat(getarrayvariable('mpsformats'))
+ end
else
texformatpath = ''
end
@@ -756,7 +761,8 @@ class TEX
# utilities
report('start of analysis')
results = Array.new
- ['texexec','texutil','ctxtools'].each do |program|
+ # ['texexec','texutil','ctxtools'].each do |program|
+ ['texexec'].each do |program|
result = `texmfstart #{program} --help`
result.sub!(/.*?(#{program}[^\n]+)\n.*/mi) do $1 end
results.push("#{result}")
@@ -1718,10 +1724,10 @@ end
def fixbackendvars(backend)
if backend then
- report("fixing backend map path for #{backend}") if getvariable('verbose')
ENV['backend'] = backend ;
ENV['progname'] = backend unless validtexengine(backend)
- ENV['TEXFONTMAPS'] = ['.',"\$TEXMF/fonts/map/{#{backend},pdftex,dvips,}//",'./fonts//'].join_path
+ ENV['TEXFONTMAPS'] = ['.',"\$TEXMF/fonts/{data,map}/{#{backend},pdftex,dvips,}//",'./fonts//'].join_path
+ report("fixing backend map path for #{backend}: #{ENV['TEXFONTMAPS']}") if getvariable('verbose')
else
report("unable to fix backend map path") if getvariable('verbose')
end
@@ -2047,7 +2053,10 @@ end
Kpse.runscript('ctxtools',rawbase,'--purge') if getvariable('purge')
Kpse.runscript('ctxtools',rawbase,'--purge --all') if getvariable('purgeall')
-# till here
+
+ # runcommand('mtxrun','--script','ctxtools',rawbase,'--purge') if getvariable('purge')
+ # runcommand('mtxrun','--script','ctxtools',rawbase,'--purge --all') if getvariable('purgeall')
+
when 'latex' then
ok = runtex(rawname)
diff --git a/Master/texmf-dist/scripts/context/ruby/newimgtopdf.rb b/Master/texmf-dist/scripts/context/ruby/newimgtopdf.rb
deleted file mode 100644
index 563ae5b80a0..00000000000
--- a/Master/texmf-dist/scripts/context/ruby/newimgtopdf.rb
+++ /dev/null
@@ -1,8 +0,0 @@
-#!/usr/bin/env ruby
-
-# program : imgtopdf
-# copyright : PRAGMA Advanced Document Engineering
-# version : 2002-2005
-# author : Hans Hagen
-
-load(File.join(File.expand_path(File.dirname($0)),'imgtopdf.rb'))
diff --git a/Master/texmf-dist/scripts/context/ruby/newpstopdf.rb b/Master/texmf-dist/scripts/context/ruby/newpstopdf.rb
deleted file mode 100644
index a45b4cab896..00000000000
--- a/Master/texmf-dist/scripts/context/ruby/newpstopdf.rb
+++ /dev/null
@@ -1,8 +0,0 @@
-#!/usr/bin/env ruby
-
-# program : pstopdf
-# copyright : PRAGMA Advanced Document Engineering
-# version : 2002-2005
-# author : Hans Hagen
-
-load(File.join(File.expand_path(File.dirname($0)),'pstopdf.rb'))
diff --git a/Master/texmf-dist/scripts/context/ruby/newtexexec.rb b/Master/texmf-dist/scripts/context/ruby/newtexexec.rb
deleted file mode 100644
index 6b4db52dc51..00000000000
--- a/Master/texmf-dist/scripts/context/ruby/newtexexec.rb
+++ /dev/null
@@ -1,8 +0,0 @@
-#!/usr/bin/env ruby
-
-# program : texexec
-# copyright : PRAGMA Advanced Document Engineering
-# version : 1997-2006
-# author : Hans Hagen
-
-load(File.join(File.expand_path(File.dirname($0)),'texexec.rb'))
diff --git a/Master/texmf-dist/scripts/context/ruby/newtexutil.rb b/Master/texmf-dist/scripts/context/ruby/newtexutil.rb
deleted file mode 100644
index d6dd06a71ee..00000000000
--- a/Master/texmf-dist/scripts/context/ruby/newtexutil.rb
+++ /dev/null
@@ -1,8 +0,0 @@
-#!/usr/bin/env ruby
-
-# program : texexec
-# copyright : PRAGMA Advanced Document Engineering
-# version : 1997-2006
-# author : Hans Hagen
-
-load(File.join(File.expand_path(File.dirname($0)),'texutil.rb'))
diff --git a/Master/texmf-dist/scripts/context/stubs/mswin/context.cmd b/Master/texmf-dist/scripts/context/stubs/mswin/context.cmd
deleted file mode 100755
index 11303c2714e..00000000000
--- a/Master/texmf-dist/scripts/context/stubs/mswin/context.cmd
+++ /dev/null
@@ -1,5 +0,0 @@
-@echo off
-setlocal
-set ownpath=%~dp0%
-texlua "%ownpath%mtxrun.lua" --script context %*
-endlocal
diff --git a/Master/texmf-dist/scripts/context/stubs/mswin/context.exe b/Master/texmf-dist/scripts/context/stubs/mswin/context.exe
new file mode 100644
index 00000000000..2d45f27494d
--- /dev/null
+++ b/Master/texmf-dist/scripts/context/stubs/mswin/context.exe
Binary files differ
diff --git a/Master/texmf-dist/scripts/context/stubs/mswin/ctxtools.bat b/Master/texmf-dist/scripts/context/stubs/mswin/ctxtools.bat
deleted file mode 100755
index f502b6750bd..00000000000
--- a/Master/texmf-dist/scripts/context/stubs/mswin/ctxtools.bat
+++ /dev/null
@@ -1,5 +0,0 @@
-@echo off
-setlocal
-set ownpath=%~dp0%
-texlua "%ownpath%mtxrun.lua" --usekpse --execute ctxtools.rb %*
-endlocal
diff --git a/Master/texmf-dist/scripts/context/stubs/mswin/luatools.cmd b/Master/texmf-dist/scripts/context/stubs/mswin/luatools.cmd
deleted file mode 100755
index 635ee0db3d5..00000000000
--- a/Master/texmf-dist/scripts/context/stubs/mswin/luatools.cmd
+++ /dev/null
@@ -1,5 +0,0 @@
-@echo off
-setlocal
-set ownpath=%~dp0%
-texlua "%ownpath%luatools.lua" %*
-endlocal
diff --git a/Master/texmf-dist/scripts/context/stubs/mswin/luatools.exe b/Master/texmf-dist/scripts/context/stubs/mswin/luatools.exe
new file mode 100644
index 00000000000..2d45f27494d
--- /dev/null
+++ b/Master/texmf-dist/scripts/context/stubs/mswin/luatools.exe
Binary files differ
diff --git a/Master/texmf-dist/scripts/context/stubs/mswin/luatools.lua b/Master/texmf-dist/scripts/context/stubs/mswin/luatools.lua
index 433d1b8dc0a..1d87322c108 100644
--- a/Master/texmf-dist/scripts/context/stubs/mswin/luatools.lua
+++ b/Master/texmf-dist/scripts/context/stubs/mswin/luatools.lua
@@ -39,13 +39,16 @@ do -- create closure to overcome 200 locals limit
if not modules then modules = { } end modules ['l-string'] = {
version = 1.001,
- comment = "companion to luat-lib.tex",
+ comment = "companion to luat-lib.mkiv",
author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
copyright = "PRAGMA ADE / ConTeXt Development Team",
license = "see context related readme files"
}
-local sub, gsub, find, match, gmatch, format, char, byte, rep = string.sub, string.gsub, string.find, string.match, string.gmatch, string.format, string.char, string.byte, string.rep
+local sub, gsub, find, match, gmatch, format, char, byte, rep, lower = string.sub, string.gsub, string.find, string.match, string.gmatch, string.format, string.char, string.byte, string.rep, string.lower
+local lpegmatch = lpeg.match
+
+-- some functions may disappear as they are not used anywhere
if not string.split then
@@ -85,8 +88,16 @@ function string:unquote()
return (gsub(self,"^([\"\'])(.*)%1$","%2"))
end
+--~ function string:unquote()
+--~ if find(self,"^[\'\"]") then
+--~ return sub(self,2,-2)
+--~ else
+--~ return self
+--~ end
+--~ end
+
function string:quote() -- we could use format("%q")
- return '"' .. self:unquote() .. '"'
+ return format("%q",self)
end
function string:count(pattern) -- variant 3
@@ -106,12 +117,23 @@ function string:limit(n,sentinel)
end
end
-function string:strip()
- return (gsub(self,"^%s*(.-)%s*$", "%1"))
+--~ function string:strip() -- the .- is quite efficient
+--~ -- return match(self,"^%s*(.-)%s*$") or ""
+--~ -- return match(self,'^%s*(.*%S)') or '' -- posted on lua list
+--~ return find(s,'^%s*$') and '' or match(s,'^%s*(.*%S)')
+--~ end
+
+do -- roberto's variant:
+ local space = lpeg.S(" \t\v\n")
+ local nospace = 1 - space
+ local stripper = space^0 * lpeg.C((space^0 * nospace^1)^0)
+ function string.strip(str)
+ return lpegmatch(stripper,str) or ""
+ end
end
function string:is_empty()
- return not find(find,"%S")
+ return not find(self,"%S")
end
function string:enhance(pattern,action)
@@ -145,14 +167,14 @@ if not string.characters then
local function nextchar(str, index)
index = index + 1
- return (index <= #str) and index or nil, str:sub(index,index)
+ return (index <= #str) and index or nil, sub(str,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, byte(str:sub(index,index))
+ return (index <= #str) and index or nil, byte(sub(str,index,index))
end
function string:bytes()
return nextbyte, self, 0
@@ -165,7 +187,7 @@ end
function string:rpadd(n,chr)
local m = n-#self
if m > 0 then
- return self .. self.rep(chr or " ",m)
+ return self .. rep(chr or " ",m)
else
return self
end
@@ -174,7 +196,7 @@ end
function string:lpadd(n,chr)
local m = n-#self
if m > 0 then
- return self.rep(chr or " ",m) .. self
+ return rep(chr or " ",m) .. self
else
return self
end
@@ -222,6 +244,17 @@ function string:pattesc()
return (gsub(self,".",patterns_escapes))
end
+local simple_escapes = {
+ ["-"] = "%-",
+ ["."] = "%.",
+ ["?"] = ".",
+ ["*"] = ".*",
+}
+
+function string:simpleesc()
+ return (gsub(self,".",simple_escapes))
+end
+
function string:tohash()
local t = { }
for s in gmatch(self,"([^, ]+)") do -- lpeg
@@ -233,10 +266,10 @@ end
local pattern = lpeg.Ct(lpeg.C(1)^0)
function string:totable()
- return pattern:match(self)
+ return lpegmatch(pattern,self)
end
---~ for _, str in ipairs {
+--~ local t = {
--~ "1234567123456712345671234567",
--~ "a\tb\tc",
--~ "aa\tbb\tcc",
@@ -244,7 +277,10 @@ end
--~ "aaaa\tbbbb\tcccc",
--~ "aaaaa\tbbbbb\tccccc",
--~ "aaaaaa\tbbbbbb\tcccccc",
---~ } do print(string.tabtospace(str)) end
+--~ }
+--~ for k,v do
+--~ print(string.tabtospace(t[k]))
+--~ end
function string.tabtospace(str,tab)
-- we don't handle embedded newlines
@@ -252,7 +288,7 @@ function string.tabtospace(str,tab)
local s = find(str,"\t")
if s then
if not tab then tab = 7 end -- only when found
- local d = tab-(s-1)%tab
+ local d = tab-(s-1) % tab
if d > 0 then
str = gsub(str,"\t",rep(" ",d),1)
else
@@ -271,6 +307,25 @@ function string:compactlong() -- strips newlines and leading spaces
return self
end
+function string:striplong() -- strips newlines and leading spaces
+ self = gsub(self,"^%s*","")
+ self = gsub(self,"[\n\r]+ *","\n")
+ return self
+end
+
+function string:topattern(lowercase,strict)
+ if lowercase then
+ self = lower(self)
+ end
+ self = gsub(self,".",simple_escapes)
+ if self == "" then
+ self = ".*"
+ elseif strict then
+ self = "^" .. self .. "$"
+ end
+ return self
+end
+
end -- of closure
@@ -278,58 +333,64 @@ do -- create closure to overcome 200 locals limit
if not modules then modules = { } end modules ['l-lpeg'] = {
version = 1.001,
- comment = "companion to luat-lib.tex",
+ comment = "companion to luat-lib.mkiv",
author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
copyright = "PRAGMA ADE / ConTeXt Development Team",
license = "see context related readme files"
}
-local P, S, Ct, C, Cs, Cc = lpeg.P, lpeg.S, lpeg.Ct, lpeg.C, lpeg.Cs, lpeg.Cc
-
---~ 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 = { }
+local lpeg = require("lpeg")
+
+lpeg.patterns = lpeg.patterns or { } -- so that we can share
+local patterns = lpeg.patterns
+
+local P, R, S, Ct, C, Cs, Cc, V = lpeg.P, lpeg.R, lpeg.S, lpeg.Ct, lpeg.C, lpeg.Cs, lpeg.Cc, lpeg.V
+local match = lpeg.match
+
+local digit, sign = R('09'), S('+-')
+local cr, lf, crlf = P("\r"), P("\n"), P("\r\n")
+local utf8byte = R("\128\191")
+
+patterns.utf8byte = utf8byte
+patterns.utf8one = R("\000\127")
+patterns.utf8two = R("\194\223") * utf8byte
+patterns.utf8three = R("\224\239") * utf8byte * utf8byte
+patterns.utf8four = R("\240\244") * utf8byte * utf8byte * utf8byte
+
+patterns.digit = digit
+patterns.sign = sign
+patterns.cardinal = sign^0 * digit^1
+patterns.integer = sign^0 * digit^1
+patterns.float = sign^0 * digit^0 * P('.') * digit^1
+patterns.number = patterns.float + patterns.integer
+patterns.oct = P("0") * R("07")^1
+patterns.octal = patterns.oct
+patterns.HEX = P("0x") * R("09","AF")^1
+patterns.hex = P("0x") * R("09","af")^1
+patterns.hexadecimal = P("0x") * R("09","AF","af")^1
+patterns.lowercase = R("az")
+patterns.uppercase = R("AZ")
+patterns.letter = patterns.lowercase + patterns.uppercase
+patterns.space = S(" ")
+patterns.eol = S("\n\r")
+patterns.spacer = S(" \t\f\v") -- + string.char(0xc2, 0xa0) if we want utf (cf mail roberto)
+patterns.newline = crlf + cr + lf
+patterns.nonspace = 1 - patterns.space
+patterns.nonspacer = 1 - patterns.spacer
+patterns.whitespace = patterns.eol + patterns.spacer
+patterns.nonwhitespace = 1 - patterns.whitespace
+patterns.utf8 = patterns.utf8one + patterns.utf8two + patterns.utf8three + patterns.utf8four
+patterns.utfbom = P('\000\000\254\255') + P('\255\254\000\000') + P('\255\254') + P('\254\255') + P('\239\187\191')
function lpeg.anywhere(pattern) --slightly adapted from website
- return P { P(pattern) + 1 * lpeg.V(1) }
-end
-
-function lpeg.startswith(pattern) --slightly adapted
- return P(pattern)
+ return P { P(pattern) + 1 * V(1) } -- why so complex?
end
function lpeg.splitter(pattern, action)
return (((1-P(pattern))^1)/action+1)^0
end
--- variant:
-
---~ local parser = lpeg.Ct(lpeg.splitat(newline))
-
-local crlf = P("\r\n")
-local cr = P("\r")
-local lf = P("\n")
-local space = S(" \t\f\v") -- + string.char(0xc2, 0xa0) if we want utf (cf mail roberto)
-local newline = crlf + cr + lf
-local spacing = space^0 * newline
-
+local spacing = patterns.spacer^0 * patterns.newline -- sort of strip
local empty = spacing * Cc("")
local nonempty = Cs((1-spacing)^1) * spacing^-1
local content = (empty + nonempty)^1
@@ -337,15 +398,15 @@ local content = (empty + nonempty)^1
local capture = Ct(content^0)
function string:splitlines()
- return capture:match(self)
+ return match(capture,self)
end
-lpeg.linebyline = content -- better make a sublibrary
+patterns.textline = content
---~ local p = lpeg.splitat("->",false) print(p:match("oeps->what->more")) -- oeps what more
---~ local p = lpeg.splitat("->",true) print(p:match("oeps->what->more")) -- oeps what->more
---~ local p = lpeg.splitat("->",false) print(p:match("oeps")) -- oeps
---~ local p = lpeg.splitat("->",true) print(p:match("oeps")) -- oeps
+--~ local p = lpeg.splitat("->",false) print(match(p,"oeps->what->more")) -- oeps what more
+--~ local p = lpeg.splitat("->",true) print(match(p,"oeps->what->more")) -- oeps what->more
+--~ local p = lpeg.splitat("->",false) print(match(p,"oeps")) -- oeps
+--~ local p = lpeg.splitat("->",true) print(match(p,"oeps")) -- oeps
local splitters_s, splitters_m = { }, { }
@@ -355,7 +416,7 @@ local function splitat(separator,single)
separator = P(separator)
if single then
local other, any = C((1 - separator)^0), P(1)
- splitter = other * (separator * C(any^0) + "")
+ splitter = other * (separator * C(any^0) + "") -- ?
splitters_s[separator] = splitter
else
local other = C((1 - separator)^0)
@@ -370,15 +431,72 @@ lpeg.splitat = splitat
local cache = { }
+function lpeg.split(separator,str)
+ local c = cache[separator]
+ if not c then
+ c = Ct(splitat(separator))
+ cache[separator] = c
+ end
+ return match(c,str)
+end
+
function string:split(separator)
local c = cache[separator]
if not c then
c = Ct(splitat(separator))
cache[separator] = c
end
- return c:match(self)
+ return match(c,self)
+end
+
+lpeg.splitters = cache
+
+local cache = { }
+
+function lpeg.checkedsplit(separator,str)
+ local c = cache[separator]
+ if not c then
+ separator = P(separator)
+ local other = C((1 - separator)^0)
+ c = Ct(separator^0 * other * (separator^1 * other)^0)
+ cache[separator] = c
+ end
+ return match(c,str)
+end
+
+function string:checkedsplit(separator)
+ local c = cache[separator]
+ if not c then
+ separator = P(separator)
+ local other = C((1 - separator)^0)
+ c = Ct(separator^0 * other * (separator^1 * other)^0)
+ cache[separator] = c
+ end
+ return match(c,self)
end
+--~ function lpeg.append(list,pp)
+--~ local p = pp
+--~ for l=1,#list do
+--~ if p then
+--~ p = p + P(list[l])
+--~ else
+--~ p = P(list[l])
+--~ end
+--~ end
+--~ return p
+--~ end
+
+--~ from roberto's site:
+
+local f1 = string.byte
+
+local function f2(s) local c1, c2 = f1(s,1,2) return c1 * 64 + c2 - 12416 end
+local function f3(s) local c1, c2, c3 = f1(s,1,3) return (c1 * 64 + c2) * 64 + c3 - 925824 end
+local function f4(s) local c1, c2, c3, c4 = f1(s,1,4) return ((c1 * 64 + c2) * 64 + c3) * 64 + c4 - 63447168 end
+
+patterns.utf8byte = patterns.utf8one/f1 + patterns.utf8two/f2 + patterns.utf8three/f3 + patterns.utf8four/f4
+
end -- of closure
@@ -386,7 +504,7 @@ do -- create closure to overcome 200 locals limit
if not modules then modules = { } end modules ['l-table'] = {
version = 1.001,
- comment = "companion to luat-lib.tex",
+ comment = "companion to luat-lib.mkiv",
author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
copyright = "PRAGMA ADE / ConTeXt Development Team",
license = "see context related readme files"
@@ -395,9 +513,10 @@ if not modules then modules = { } end modules ['l-table'] = {
table.join = table.concat
local concat, sort, insert, remove = table.concat, table.sort, table.insert, table.remove
-local format, find, gsub, lower, dump = string.format, string.find, string.gsub, string.lower, string.dump
+local format, find, gsub, lower, dump, match = string.format, string.find, string.gsub, string.lower, string.dump, string.match
local getmetatable, setmetatable = getmetatable, setmetatable
-local type, next, tostring, ipairs = type, next, tostring, ipairs
+local type, next, tostring, tonumber, ipairs = type, next, tostring, tonumber, ipairs
+local unpack = unpack or table.unpack
function table.strip(tab)
local lst = { }
@@ -412,6 +531,14 @@ function table.strip(tab)
return lst
end
+function table.keys(t)
+ local k = { }
+ for key, _ in next, t do
+ k[#k+1] = key
+ end
+ return k
+end
+
local function compare(a,b)
return (tostring(a) < tostring(b))
end
@@ -455,7 +582,7 @@ end
table.sortedkeys = sortedkeys
table.sortedhashkeys = sortedhashkeys
-function table.sortedpairs(t)
+function table.sortedhash(t)
local s = sortedhashkeys(t) -- maybe just sortedkeys
local n = 0
local function kv(s)
@@ -466,6 +593,8 @@ function table.sortedpairs(t)
return kv, s
end
+table.sortedpairs = table.sortedhash
+
function table.append(t, list)
for _,v in next, list do
insert(t,v)
@@ -588,18 +717,18 @@ end
-- slower than #t on indexed tables (#t only returns the size of the numerically indexed slice)
-function table.is_empty(t)
+function table.is_empty(t) -- obolete, use inline code instead
return not t or not next(t)
end
-function table.one_entry(t)
+function table.one_entry(t) -- obolete, use inline code instead
local n = next(t)
return n and not next(t,n)
end
-function table.starts_at(t)
- return ipairs(t,1)(t,0)
-end
+--~ function table.starts_at(t) -- obsolete, not nice
+--~ return ipairs(t,1)(t,0)
+--~ end
function table.tohash(t,value)
local h = { }
@@ -677,6 +806,8 @@ end
--
-- local propername = lpeg.P(lpeg.R("AZ","az","__") * lpeg.R("09","AZ","az", "__")^0 * lpeg.P(-1) )
+-- problem: there no good number_to_string converter with the best resolution
+
local function do_serialize(root,name,depth,level,indexed)
if level > 0 then
depth = depth .. " "
@@ -699,8 +830,9 @@ local function do_serialize(root,name,depth,level,indexed)
handle(format("%s{",depth))
end
end
+ -- we could check for k (index) being number (cardinal)
if root and next(root) then
- local first, last = nil, 0 -- #root cannot be trusted here
+ local first, last = nil, 0 -- #root cannot be trusted here (will be ok in 5.2 when ipairs is gone)
if compact then
-- NOT: for k=1,#root do (we need to quit at nil)
for k,v in ipairs(root) do -- can we use next?
@@ -721,10 +853,10 @@ local function do_serialize(root,name,depth,level,indexed)
if hexify then
handle(format("%s 0x%04X,",depth,v))
else
- handle(format("%s %s,",depth,v))
+ handle(format("%s %s,",depth,v)) -- %.99g
end
elseif t == "string" then
- if reduce and (find(v,"^[%-%+]?[%d]-%.?[%d+]$") == 1) then
+ if reduce and tonumber(v) then
handle(format("%s %s,",depth,v))
else
handle(format("%s %q,",depth,v))
@@ -761,29 +893,29 @@ local function do_serialize(root,name,depth,level,indexed)
--~ if hexify then
--~ handle(format("%s %s=0x%04X,",depth,key(k),v))
--~ else
- --~ handle(format("%s %s=%s,",depth,key(k),v))
+ --~ handle(format("%s %s=%s,",depth,key(k),v)) -- %.99g
--~ end
if type(k) == "number" then -- or find(k,"^%d+$") then
if hexify then
handle(format("%s [0x%04X]=0x%04X,",depth,k,v))
else
- handle(format("%s [%s]=%s,",depth,k,v))
+ handle(format("%s [%s]=%s,",depth,k,v)) -- %.99g
end
elseif noquotes and not reserved[k] and find(k,"^%a[%w%_]*$") then
if hexify then
handle(format("%s %s=0x%04X,",depth,k,v))
else
- handle(format("%s %s=%s,",depth,k,v))
+ handle(format("%s %s=%s,",depth,k,v)) -- %.99g
end
else
if hexify then
handle(format("%s [%q]=0x%04X,",depth,k,v))
else
- handle(format("%s [%q]=%s,",depth,k,v))
+ handle(format("%s [%q]=%s,",depth,k,v)) -- %.99g
end
end
elseif t == "string" then
- if reduce and (find(v,"^[%-%+]?[%d]-%.?[%d+]$") == 1) then
+ if reduce and tonumber(v) then
--~ handle(format("%s %s=%s,",depth,key(k),v))
if type(k) == "number" then -- or find(k,"^%d+$") then
if hexify then
@@ -992,7 +1124,7 @@ function table.tofile(filename,root,name,reduce,noquotes,hexify)
end
end
-local function flatten(t,f,complete)
+local function flatten(t,f,complete) -- is this used? meybe a variant with next, ...
for i=1,#t do
local v = t[i]
if type(v) == "table" then
@@ -1021,6 +1153,24 @@ end
table.flatten_one_level = table.unnest
+-- a better one:
+
+local function flattened(t,f)
+ if not f then
+ f = { }
+ end
+ for k, v in next, t do
+ if type(v) == "table" then
+ flattened(v,f)
+ else
+ f[k] = v
+ end
+ end
+ return f
+end
+
+table.flattened = flattened
+
-- the next three may disappear
function table.remove_value(t,value) -- todo: n
@@ -1156,7 +1306,7 @@ function table.clone(t,p) -- t is optional or nil or table
elseif not t then
t = { }
end
- setmetatable(t, { __index = function(_,key) return p[key] end })
+ setmetatable(t, { __index = function(_,key) return p[key] end }) -- why not __index = p ?
return t
end
@@ -1184,21 +1334,35 @@ function table.reverse(t)
return tt
end
---~ function table.keys(t)
---~ local k = { }
---~ for k,_ in next, t do
---~ k[#k+1] = k
---~ end
---~ return k
---~ end
+function table.insert_before_value(t,value,extra)
+ for i=1,#t do
+ if t[i] == extra then
+ remove(t,i)
+ end
+ end
+ for i=1,#t do
+ if t[i] == value then
+ insert(t,i,extra)
+ return
+ end
+ end
+ insert(t,1,extra)
+end
---~ function table.keys_as_string(t)
---~ local k = { }
---~ for k,_ in next, t do
---~ k[#k+1] = k
---~ end
---~ return concat(k,"")
---~ end
+function table.insert_after_value(t,value,extra)
+ for i=1,#t do
+ if t[i] == extra then
+ remove(t,i)
+ end
+ end
+ for i=1,#t do
+ if t[i] == value then
+ insert(t,i+1,extra)
+ return
+ end
+ end
+ insert(t,#t+1,extra)
+end
end -- of closure
@@ -1207,13 +1371,13 @@ do -- create closure to overcome 200 locals limit
if not modules then modules = { } end modules ['l-io'] = {
version = 1.001,
- comment = "companion to luat-lib.tex",
+ comment = "companion to luat-lib.mkiv",
author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
copyright = "PRAGMA ADE / ConTeXt Development Team",
license = "see context related readme files"
}
-local byte = string.byte
+local byte, find, gsub = string.byte, string.find, string.gsub
if string.find(os.getenv("PATH"),";") then
io.fileseparator, io.pathseparator = "\\", ";"
@@ -1242,7 +1406,7 @@ function io.savedata(filename,data,joiner)
elseif type(data) == "function" then
data(f)
else
- f:write(data)
+ f:write(data or "")
end
f:close()
return true
@@ -1371,20 +1535,21 @@ function io.ask(question,default,options)
end
io.write(string.format(" "))
local answer = io.read()
- answer = answer:gsub("^%s*(.*)%s*$","%1")
+ answer = gsub(answer,"^%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
+ for k=1,#options do
+ if options[k] == answer then
return answer
end
end
local pattern = "^" .. answer
- for _,v in pairs(options) do
- if v:find(pattern) then
+ for k=1,#options do
+ local v = options[k]
+ if find(v,pattern) then
return v
end
end
@@ -1399,20 +1564,22 @@ do -- create closure to overcome 200 locals limit
if not modules then modules = { } end modules ['l-number'] = {
version = 1.001,
- comment = "companion to luat-lib.tex",
+ comment = "companion to luat-lib.mkiv",
author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
copyright = "PRAGMA ADE / ConTeXt Development Team",
license = "see context related readme files"
}
-local format = string.format
+local tostring = tostring
+local format, floor, insert, match = string.format, math.floor, table.insert, string.match
+local lpegmatch = lpeg.match
number = number or { }
-- a,b,c,d,e,f = number.toset(100101)
function number.toset(n)
- return (tostring(n)):match("(.?)(.?)(.?)(.?)(.?)(.?)(.?)(.?)")
+ return match(tostring(n),"(.?)(.?)(.?)(.?)(.?)(.?)(.?)(.?)")
end
function number.toevenhex(n)
@@ -1438,10 +1605,21 @@ end
local one = lpeg.C(1-lpeg.S(''))^1
function number.toset(n)
- return one:match(tostring(n))
+ return lpegmatch(one,tostring(n))
end
-
+function number.bits(n,zero)
+ local t, i = { }, (zero and 0) or 1
+ while n > 0 do
+ local m = n % 2
+ if m > 0 then
+ insert(t,1,i)
+ end
+ n = floor(n/2)
+ i = i + 1
+ end
+ return t
+end
end -- of closure
@@ -1450,7 +1628,7 @@ do -- create closure to overcome 200 locals limit
if not modules then modules = { } end modules ['l-set'] = {
version = 1.001,
- comment = "companion to luat-lib.tex",
+ comment = "companion to luat-lib.mkiv",
author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
copyright = "PRAGMA ADE / ConTeXt Development Team",
license = "see context related readme files"
@@ -1540,46 +1718,63 @@ do -- create closure to overcome 200 locals limit
if not modules then modules = { } end modules ['l-os'] = {
version = 1.001,
- comment = "companion to luat-lub.tex",
+ comment = "companion to luat-lib.mkiv",
author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
copyright = "PRAGMA ADE / ConTeXt Development Team",
license = "see context related readme files"
}
-local find = string.find
+-- maybe build io.flush in os.execute
+
+local find, format, gsub = string.find, string.format, string.gsub
+local random, ceil = math.random, math.ceil
+
+local execute, spawn, exec, ioflush = os.execute, os.spawn or os.execute, os.exec or os.execute, io.flush
+
+function os.execute(...) ioflush() return execute(...) end
+function os.spawn (...) ioflush() return spawn (...) end
+function os.exec (...) ioflush() return exec (...) end
function os.resultof(command)
- return io.popen(command,"r"):read("*all")
+ ioflush() -- else messed up logging
+ local handle = io.popen(command,"r")
+ if not handle then
+ -- print("unknown command '".. command .. "' in os.resultof")
+ return ""
+ else
+ return handle:read("*all") or ""
+ end
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)
+--~ os.type : windows | unix (new, we already guessed os.platform)
+--~ os.name : windows | msdos | linux | macosx | solaris | .. | generic (new)
+--~ os.platform : extended os.name with architecture
if not io.fileseparator then
if find(os.getenv("PATH"),";") then
- io.fileseparator, io.pathseparator, os.platform = "\\", ";", os.type or "windows"
+ io.fileseparator, io.pathseparator, os.type = "\\", ";", os.type or "mswin"
else
- io.fileseparator, io.pathseparator, os.platform = "/" , ":", os.type or "unix"
+ io.fileseparator, io.pathseparator, os.type = "/" , ":", os.type or "unix"
end
end
-os.platform = os.platform or os.type or (io.pathseparator == ";" and "windows") or "unix"
+os.type = os.type or (io.pathseparator == ";" and "windows") or "unix"
+os.name = os.name or (os.type == "windows" and "mswin" ) or "linux"
+
+if os.type == "windows" then
+ os.libsuffix, os.binsuffix = 'dll', 'exe'
+else
+ os.libsuffix, os.binsuffix = 'so', ''
+end
function os.launch(str)
- if os.platform == "windows" then
+ if os.type == "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
@@ -1609,64 +1804,218 @@ end
--~ print(os.date("%H:%M:%S",os.gettimeofday()))
--~ print(os.date("%H:%M:%S",os.time()))
-os.arch = os.arch or function()
- local a = os.resultof("uname -m") or "linux"
- os.arch = function()
- return a
+-- no need for function anymore as we have more clever code and helpers now
+-- this metatable trickery might as well disappear
+
+os.resolvers = os.resolvers or { }
+
+local resolvers = os.resolvers
+
+local osmt = getmetatable(os) or { __index = function(t,k) t[k] = "unset" return "unset" end } -- maybe nil
+local osix = osmt.__index
+
+osmt.__index = function(t,k)
+ return (resolvers[k] or osix)(t,k)
+end
+
+setmetatable(os,osmt)
+
+if not os.setenv then
+
+ -- we still store them but they won't be seen in
+ -- child processes although we might pass them some day
+ -- using command concatination
+
+ local env, getenv = { }, os.getenv
+
+ function os.setenv(k,v)
+ env[k] = v
end
- return a
+
+ function os.getenv(k)
+ return env[k] or getenv(k)
+ end
+
end
-local platform
+-- we can use HOSTTYPE on some platforms
-function os.currentplatform(name,default)
- if not platform then
- local name = os.name or os.platform or name -- os.name is built in, os.platform is mine
- if not name then
- platform = default or "linux"
- elseif name == "windows" or name == "mswin" or name == "win32" or name == "msdos" then
- if os.getenv("PROCESSOR_ARCHITECTURE") == "AMD64" then
- platform = "mswin-64"
- else
- platform = "mswin"
- end
+local name, platform = os.name or "linux", os.getenv("MTX_PLATFORM") or ""
+
+local function guess()
+ local architecture = os.resultof("uname -m") or ""
+ if architecture ~= "" then
+ return architecture
+ end
+ architecture = os.getenv("HOSTTYPE") or ""
+ if architecture ~= "" then
+ return architecture
+ end
+ return os.resultof("echo $HOSTTYPE") or ""
+end
+
+if platform ~= "" then
+
+ os.platform = platform
+
+elseif os.type == "windows" then
+
+ -- we could set the variable directly, no function needed here
+
+ function os.resolvers.platform(t,k)
+ local platform, architecture = "", os.getenv("PROCESSOR_ARCHITECTURE") or ""
+ if find(architecture,"AMD64") then
+ platform = "mswin-64"
else
- local architecture = os.arch()
- if name == "linux" then
- if find(architecture,"x86_64") then
- platform = "linux-64"
- elseif find(architecture,"ppc") then
- platform = "linux-ppc"
- else
- platform = "linux"
- end
- elseif name == "macosx" then
- if find(architecture,"i386") then
- platform = "osx-intel"
- else
- platform = "osx-ppc"
- end
- elseif name == "sunos" then
- if find(architecture,"sparc") then
- platform = "solaris-sparc"
- else -- if architecture == 'i86pc'
- platform = "solaris-intel"
- end
- elseif name == "freebsd" then
- if find(architecture,"amd64") then
- platform = "freebsd-amd64"
- else
- platform = "freebsd"
- end
- else
- platform = default or name
- end
+ platform = "mswin"
end
- function os.currentplatform()
- return platform
+ os.setenv("MTX_PLATFORM",platform)
+ os.platform = platform
+ return platform
+ end
+
+elseif name == "linux" then
+
+ function os.resolvers.platform(t,k)
+ -- we sometims have HOSTTYPE set so let's check that first
+ local platform, architecture = "", os.getenv("HOSTTYPE") or os.resultof("uname -m") or ""
+ if find(architecture,"x86_64") then
+ platform = "linux-64"
+ elseif find(architecture,"ppc") then
+ platform = "linux-ppc"
+ else
+ platform = "linux"
+ end
+ os.setenv("MTX_PLATFORM",platform)
+ os.platform = platform
+ return platform
+ end
+
+elseif name == "macosx" then
+
+ --[[
+ Identifying the architecture of OSX is quite a mess and this
+ is the best we can come up with. For some reason $HOSTTYPE is
+ a kind of pseudo environment variable, not known to the current
+ environment. And yes, uname cannot be trusted either, so there
+ is a change that you end up with a 32 bit run on a 64 bit system.
+ Also, some proper 64 bit intel macs are too cheap (low-end) and
+ therefore not permitted to run the 64 bit kernel.
+ ]]--
+
+ function os.resolvers.platform(t,k)
+ -- local platform, architecture = "", os.getenv("HOSTTYPE") or ""
+ -- if architecture == "" then
+ -- architecture = os.resultof("echo $HOSTTYPE") or ""
+ -- end
+ local platform, architecture = "", os.resultof("echo $HOSTTYPE") or ""
+ if architecture == "" then
+ -- print("\nI have no clue what kind of OSX you're running so let's assume an 32 bit intel.\n")
+ platform = "osx-intel"
+ elseif find(architecture,"i386") then
+ platform = "osx-intel"
+ elseif find(architecture,"x86_64") then
+ platform = "osx-64"
+ else
+ platform = "osx-ppc"
+ end
+ os.setenv("MTX_PLATFORM",platform)
+ os.platform = platform
+ return platform
+ end
+
+elseif name == "sunos" then
+
+ function os.resolvers.platform(t,k)
+ local platform, architecture = "", os.resultof("uname -m") or ""
+ if find(architecture,"sparc") then
+ platform = "solaris-sparc"
+ else -- if architecture == 'i86pc'
+ platform = "solaris-intel"
+ end
+ os.setenv("MTX_PLATFORM",platform)
+ os.platform = platform
+ return platform
+ end
+
+elseif name == "freebsd" then
+
+ function os.resolvers.platform(t,k)
+ local platform, architecture = "", os.resultof("uname -m") or ""
+ if find(architecture,"amd64") then
+ platform = "freebsd-amd64"
+ else
+ platform = "freebsd"
+ end
+ os.setenv("MTX_PLATFORM",platform)
+ os.platform = platform
+ return platform
+ end
+
+elseif name == "kfreebsd" then
+
+ function os.resolvers.platform(t,k)
+ -- we sometims have HOSTTYPE set so let's check that first
+ local platform, architecture = "", os.getenv("HOSTTYPE") or os.resultof("uname -m") or ""
+ if find(architecture,"x86_64") then
+ platform = "kfreebsd-64"
+ else
+ platform = "kfreebsd-i386"
+ end
+ os.setenv("MTX_PLATFORM",platform)
+ os.platform = platform
+ return platform
+ end
+
+else
+
+ -- platform = "linux"
+ -- os.setenv("MTX_PLATFORM",platform)
+ -- os.platform = platform
+
+ function os.resolvers.platform(t,k)
+ local platform = "linux"
+ os.setenv("MTX_PLATFORM",platform)
+ os.platform = platform
+ return platform
+ end
+
+end
+
+-- beware, we set the randomseed
+
+-- from wikipedia: Version 4 UUIDs use a scheme relying only on random numbers. This algorithm sets the
+-- version number as well as two reserved bits. All other bits are set using a random or pseudorandom
+-- data source. Version 4 UUIDs have the form xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx with hexadecimal
+-- digits x and hexadecimal digits 8, 9, A, or B for y. e.g. f47ac10b-58cc-4372-a567-0e02b2c3d479.
+--
+-- as we don't call this function too often there is not so much risk on repetition
+
+local t = { 8, 9, "a", "b" }
+
+function os.uuid()
+ return format("%04x%04x-4%03x-%s%03x-%04x-%04x%04x%04x",
+ random(0xFFFF),random(0xFFFF),
+ random(0x0FFF),
+ t[ceil(random(4))] or 8,random(0x0FFF),
+ random(0xFFFF),
+ random(0xFFFF),random(0xFFFF),random(0xFFFF)
+ )
+end
+
+local d
+
+function os.timezone(delta)
+ d = d or tonumber(tonumber(os.date("%H")-os.date("!%H")))
+ if delta then
+ if d > 0 then
+ return format("+%02i:00",d)
+ else
+ return format("-%02i:00",-d)
end
+ else
+ return 1
end
- return platform
end
@@ -1676,7 +2025,7 @@ do -- create closure to overcome 200 locals limit
if not modules then modules = { } end modules ['l-file'] = {
version = 1.001,
- comment = "companion to luat-lib.tex",
+ comment = "companion to luat-lib.mkiv",
author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
copyright = "PRAGMA ADE / ConTeXt Development Team",
license = "see context related readme files"
@@ -1687,14 +2036,17 @@ if not modules then modules = { } end modules ['l-file'] = {
file = file or { }
local concat = table.concat
-local find, gmatch, match, gsub = string.find, string.gmatch, string.match, string.gsub
+local find, gmatch, match, gsub, sub, char = string.find, string.gmatch, string.match, string.gsub, string.sub, string.char
+local lpegmatch = lpeg.match
function file.removesuffix(filename)
return (gsub(filename,"%.[%a%d]+$",""))
end
function file.addsuffix(filename, suffix)
- if not find(filename,"%.[%a%d]+$") then
+ if not suffix or suffix == "" then
+ return filename
+ elseif not find(filename,"%.[%a%d]+$") then
return filename .. "." .. suffix
else
return filename
@@ -1717,20 +2069,39 @@ function file.nameonly(name)
return (gsub(match(name,"^.+[/\\](.-)$") or name,"%..*$",""))
end
-function file.extname(name)
- return match(name,"^.+%.([^/\\]-)$") or ""
+function file.extname(name,default)
+ return match(name,"^.+%.([^/\\]-)$") or default or ""
end
file.suffix = file.extname
---~ 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 = concat({...},"/")
+--~ pth = gsub(pth,"\\","/")
+--~ local a, b = match(pth,"^(.*://)(.*)$")
+--~ if a and b then
+--~ return a .. gsub(b,"//+","/")
+--~ end
+--~ a, b = match(pth,"^(//)(.*)$")
+--~ if a and b then
+--~ return a .. gsub(b,"//+","/")
+--~ end
+--~ return (gsub(pth,"//+","/"))
+--~ end
+
+local trick_1 = char(1)
+local trick_2 = "^" .. trick_1 .. "/+"
function file.join(...)
- local pth = concat({...},"/")
+ local lst = { ... }
+ local a, b = lst[1], lst[2]
+ if a == "" then
+ lst[1] = trick_1
+ elseif b and find(a,"^/+$") and find(b,"^/") then
+ lst[1] = ""
+ lst[2] = gsub(b,"^/+","")
+ end
+ local pth = concat(lst,"/")
pth = gsub(pth,"\\","/")
local a, b = match(pth,"^(.*://)(.*)$")
if a and b then
@@ -1740,17 +2111,28 @@ function file.join(...)
if a and b then
return a .. gsub(b,"//+","/")
end
+ pth = gsub(pth,trick_2,"")
return (gsub(pth,"//+","/"))
end
+--~ print(file.join("//","/y"))
+--~ print(file.join("/","/y"))
+--~ print(file.join("","/y"))
+--~ print(file.join("/x/","/y"))
+--~ 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.iswritable(name)
local a = lfs.attributes(name) or lfs.attributes(file.dirname(name,"."))
- return a and a.permissions:sub(2,2) == "w"
+ return a and sub(a.permissions,2,2) == "w"
end
function file.isreadable(name)
local a = lfs.attributes(name)
- return a and a.permissions:sub(1,1) == "r"
+ return a and sub(a.permissions,1,1) == "r"
end
file.is_readable = file.isreadable
@@ -1758,36 +2140,50 @@ file.is_writable = file.iswritable
-- todo: lpeg
-function file.split_path(str)
- local t = { }
- str = gsub(str,"\\", "/")
- str = gsub(str,"(%a):([;/])", "%1\001%2")
- for name in gmatch(str,"([^;:]+)") do
- if name ~= "" then
- t[#t+1] = gsub(name,"\001",":")
- end
- end
- return t
+--~ function file.split_path(str)
+--~ local t = { }
+--~ str = gsub(str,"\\", "/")
+--~ str = gsub(str,"(%a):([;/])", "%1\001%2")
+--~ for name in gmatch(str,"([^;:]+)") do
+--~ if name ~= "" then
+--~ t[#t+1] = gsub(name,"\001",":")
+--~ end
+--~ end
+--~ return t
+--~ end
+
+local checkedsplit = string.checkedsplit
+
+function file.split_path(str,separator)
+ str = gsub(str,"\\","/")
+ return checkedsplit(str,separator or io.pathseparator)
end
function file.join_path(tab)
return concat(tab,io.pathseparator) -- can have trailing //
end
+-- we can hash them weakly
+
function file.collapse_path(str)
- str = gsub(str,"/%./","/")
- local n, m = 1, 1
- while n > 0 or m > 0 do
- str, n = gsub(str,"[^/%.]+/%.%.$","")
- str, m = gsub(str,"[^/%.]+/%.%./","")
- end
- str = gsub(str,"([^/])/$","%1")
- str = gsub(str,"^%./","")
- str = gsub(str,"/%.$","")
+ str = gsub(str,"\\","/")
+ if find(str,"/") then
+ str = gsub(str,"^%./",(gsub(lfs.currentdir(),"\\","/")) .. "/") -- ./xx in qualified
+ str = gsub(str,"/%./","/")
+ local n, m = 1, 1
+ while n > 0 or m > 0 do
+ str, n = gsub(str,"[^/%.]+/%.%.$","")
+ str, m = gsub(str,"[^/%.]+/%.%./","")
+ end
+ str = gsub(str,"([^/])/$","%1")
+ -- str = gsub(str,"^%./","") -- ./xx in qualified
+ str = gsub(str,"/%.$","")
+ end
if str == "" then str = "." end
return str
end
+--~ print(file.collapse_path("/a"))
--~ print(file.collapse_path("a/./b/.."))
--~ print(file.collapse_path("a/aa/../b/bb"))
--~ print(file.collapse_path("a/../.."))
@@ -1817,27 +2213,27 @@ end
--~ local pattern = (noslashes^0 * slashes)^0 * (noperiod^1 * period)^1 * lpeg.C(noperiod^1) * -1
--~ function file.extname(name)
---~ return pattern:match(name) or ""
+--~ return lpegmatch(pattern,name) or ""
--~ end
--~ local pattern = lpeg.Cs(((period * noperiod^1 * -1)/"" + 1)^1)
--~ function file.removesuffix(name)
---~ return pattern:match(name)
+--~ return lpegmatch(pattern,name)
--~ end
--~ local pattern = (noslashes^0 * slashes)^1 * lpeg.C(noslashes^1) * -1
--~ function file.basename(name)
---~ return pattern:match(name) or name
+--~ return lpegmatch(pattern,name) or name
--~ end
--~ local pattern = (noslashes^0 * slashes)^1 * lpeg.Cp() * noslashes^1 * -1
--~ function file.dirname(name)
---~ local p = pattern:match(name)
+--~ local p = lpegmatch(pattern,name)
--~ if p then
---~ return name:sub(1,p-2)
+--~ return sub(name,1,p-2)
--~ else
--~ return ""
--~ end
@@ -1846,7 +2242,7 @@ end
--~ local pattern = (noslashes^0 * slashes)^0 * (noperiod^1 * period)^1 * lpeg.Cp() * noperiod^1 * -1
--~ function file.addsuffix(name, suffix)
---~ local p = pattern:match(name)
+--~ local p = lpegmatch(pattern,name)
--~ if p then
--~ return name
--~ else
@@ -1857,9 +2253,9 @@ end
--~ local pattern = (noslashes^0 * slashes)^0 * (noperiod^1 * period)^1 * lpeg.Cp() * noperiod^1 * -1
--~ function file.replacesuffix(name,suffix)
---~ local p = pattern:match(name)
+--~ local p = lpegmatch(pattern,name)
--~ if p then
---~ return name:sub(1,p-2) .. "." .. suffix
+--~ return sub(name,1,p-2) .. "." .. suffix
--~ else
--~ return name .. "." .. suffix
--~ end
@@ -1868,11 +2264,11 @@ end
--~ local pattern = (noslashes^0 * slashes)^0 * lpeg.Cp() * ((noperiod^1 * period)^1 * lpeg.Cp() + lpeg.P(true)) * noperiod^1 * -1
--~ function file.nameonly(name)
---~ local a, b = pattern:match(name)
+--~ local a, b = lpegmatch(pattern,name)
--~ if b then
---~ return name:sub(a,b-2)
+--~ return sub(name,a,b-2)
--~ elseif a then
---~ return name:sub(a)
+--~ return sub(name,a)
--~ else
--~ return name
--~ end
@@ -1906,11 +2302,11 @@ local rootbased = lpeg.P("/") + letter*lpeg.P(":")
-- ./name ../name /name c: :// name/name
function file.is_qualified_path(filename)
- return qualified:match(filename)
+ return lpegmatch(qualified,filename) ~= nil
end
function file.is_rootbased_path(filename)
- return rootbased:match(filename)
+ return lpegmatch(rootbased,filename) ~= nil
end
local slash = lpeg.S("\\/")
@@ -1923,16 +2319,25 @@ local base = lpeg.C((1-suffix)^0)
local pattern = (drive + lpeg.Cc("")) * (path + lpeg.Cc("")) * (base + lpeg.Cc("")) * (suffix + lpeg.Cc(""))
function file.splitname(str) -- returns drive, path, base, suffix
- return pattern:match(str)
+ return lpegmatch(pattern,str)
end
--- function test(t) for k, v in pairs(t) do print(v, "=>", file.splitname(v)) end end
+-- function test(t) for k, v in next, t do print(v, "=>", file.splitname(v)) end end
--
-- test { "c:", "c:/aa", "c:/aa/bb", "c:/aa/bb/cc", "c:/aa/bb/cc.dd", "c:/aa/bb/cc.dd.ee" }
-- test { "c:", "c:aa", "c:aa/bb", "c:aa/bb/cc", "c:aa/bb/cc.dd", "c:aa/bb/cc.dd.ee" }
-- test { "/aa", "/aa/bb", "/aa/bb/cc", "/aa/bb/cc.dd", "/aa/bb/cc.dd.ee" }
-- test { "aa", "aa/bb", "aa/bb/cc", "aa/bb/cc.dd", "aa/bb/cc.dd.ee" }
+--~ -- todo:
+--~
+--~ if os.type == "windows" then
+--~ local currentdir = lfs.currentdir
+--~ function lfs.currentdir()
+--~ return (gsub(currentdir(),"\\","/"))
+--~ end
+--~ end
+
end -- of closure
@@ -1997,7 +2402,7 @@ end
function file.loadchecksum(name)
if md5 then
local data = io.loaddata(name .. ".md5")
- return data and data:gsub("%s","")
+ return data and (gsub(data,"%s",""))
end
return nil
end
@@ -2018,14 +2423,15 @@ do -- create closure to overcome 200 locals limit
if not modules then modules = { } end modules ['l-url'] = {
version = 1.001,
- comment = "companion to luat-lib.tex",
+ comment = "companion to luat-lib.mkiv",
author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
copyright = "PRAGMA ADE / ConTeXt Development Team",
license = "see context related readme files"
}
-local char, gmatch = string.char, string.gmatch
+local char, gmatch, gsub = string.char, string.gmatch, string.gsub
local tonumber, type = tonumber, type
+local lpegmatch = lpeg.match
-- from the spec (on the web):
--
@@ -2049,7 +2455,9 @@ local hexdigit = lpeg.R("09","AF","af")
local plus = lpeg.P("+")
local escaped = (plus / " ") + (percent * lpeg.C(hexdigit * hexdigit) / tochar)
-local scheme = lpeg.Cs((escaped+(1-colon-slash-qmark-hash))^0) * colon + lpeg.Cc("")
+-- we assume schemes with more than 1 character (in order to avoid problems with windows disks)
+
+local scheme = lpeg.Cs((escaped+(1-colon-slash-qmark-hash))^2) * 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("")
@@ -2057,25 +2465,51 @@ local fragment = hash * lpeg.Cs((escaped+(1- endofstring))^0
local parser = lpeg.Ct(scheme * authority * path * query * fragment)
+-- todo: reconsider Ct as we can as well have five return values (saves a table)
+-- so we can have two parsers, one with and one without
+
function url.split(str)
- return (type(str) == "string" and parser:match(str)) or str
+ return (type(str) == "string" and lpegmatch(parser,str)) or str
end
+-- todo: cache them
+
function url.hashed(str)
local s = url.split(str)
+ local somescheme = s[1] ~= ""
return {
- scheme = (s[1] ~= "" and s[1]) or "file",
+ scheme = (somescheme and s[1]) or "file",
authority = s[2],
- path = s[3],
- query = s[4],
- fragment = s[5],
- original = str
+ path = s[3],
+ query = s[4],
+ fragment = s[5],
+ original = str,
+ noscheme = not somescheme,
}
end
+function url.hasscheme(str)
+ return url.split(str)[1] ~= ""
+end
+
+function url.addscheme(str,scheme)
+ return (url.hasscheme(str) and str) or ((scheme or "file:///") .. str)
+end
+
+function url.construct(hash)
+ local fullurl = hash.sheme .. "://".. hash.authority .. hash.path
+ if hash.query then
+ fullurl = fullurl .. "?".. hash.query
+ end
+ if hash.fragment then
+ fullurl = fullurl .. "?".. hash.fragment
+ end
+ return fullurl
+end
+
function url.filename(filename)
local t = url.hashed(filename)
- return (t.scheme == "file" and t.path:gsub("^/([a-zA-Z])([:|])/)","%1:")) or filename
+ return (t.scheme == "file" and (gsub(t.path,"^/([a-zA-Z])([:|])/)","%1:"))) or filename
end
function url.query(str)
@@ -2129,17 +2563,26 @@ do -- create closure to overcome 200 locals limit
if not modules then modules = { } end modules ['l-dir'] = {
version = 1.001,
- comment = "companion to luat-lib.tex",
+ comment = "companion to luat-lib.mkiv",
author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
copyright = "PRAGMA ADE / ConTeXt Development Team",
license = "see context related readme files"
}
+-- dir.expand_name will be merged with cleanpath and collapsepath
+
local type = type
-local find, gmatch = string.find, string.gmatch
+local find, gmatch, match, gsub = string.find, string.gmatch, string.match, string.gsub
+local lpegmatch = lpeg.match
dir = dir or { }
+-- handy
+
+function dir.current()
+ return (gsub(lfs.currentdir(),"\\","/"))
+end
+
-- optimizing for no string.find (*) does not save time
local attributes = lfs.attributes
@@ -2170,6 +2613,35 @@ end
dir.glob_pattern = glob_pattern
+local function collect_pattern(path,patt,recurse,result)
+ local ok, scanner
+ result = result or { }
+ 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 find(path,"/$") then path = path .. '/' end
+ for name in scanner do
+ local full = path .. name
+ local attr = attributes(full)
+ local mode = attr.mode
+ if mode == 'file' then
+ if find(full,patt) then
+ result[name] = attr
+ end
+ elseif recurse and (mode == "directory") and (name ~= '.') and (name ~= "..") then
+ attr.list = collect_pattern(full,patt,recurse)
+ result[name] = attr
+ end
+ end
+ end
+ return result
+end
+
+dir.collect_pattern = collect_pattern
+
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 {
@@ -2189,29 +2661,48 @@ local filter = Cs ( (
)^0 )
local function glob(str,t)
- if type(str) == "table" then
- local t = t or { }
- for s=1,#str do
- glob(str[s],t)
+ if type(t) == "function" then
+ if type(str) == "table" then
+ for s=1,#str do
+ glob(str[s],t)
+ end
+ elseif lfs.isfile(str) then
+ t(str)
+ else
+ local split = lpegmatch(pattern,str)
+ if split then
+ local root, path, base = split[1], split[2], split[3]
+ local recurse = find(base,"%*%*")
+ local start = root .. path
+ local result = lpegmatch(filter,start .. base)
+ glob_pattern(start,result,recurse,t)
+ end
end
- return t
- elseif lfs.isfile(str) then
- local t = t or { }
- t[#t+1] = str
- return t
else
- local split = pattern:match(str)
- if split then
+ if type(str) == "table" 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 = find(base,"%*%*")
- local start = root .. path
- local result = filter:match(start .. base)
- glob_pattern(start,result,recurse,action)
+ for s=1,#str do
+ glob(str[s],t)
+ end
+ return t
+ elseif lfs.isfile(str) then
+ local t = t or { }
+ t[#t+1] = str
return t
else
- return { }
+ local split = lpegmatch(pattern,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 = find(base,"%*%*")
+ local start = root .. path
+ local result = lpegmatch(filter,start .. base)
+ glob_pattern(start,result,recurse,action)
+ return t
+ else
+ return { }
+ end
end
end
end
@@ -2273,11 +2764,12 @@ end
local make_indeed = true -- false
-if string.find(os.getenv("PATH"),";") then
+if string.find(os.getenv("PATH"),";") then -- os.type == "windows"
function dir.mkdirs(...)
- local str, pth = "", ""
- for _, s in ipairs({...}) do
+ local str, pth, t = "", "", { ... }
+ for i=1,#t do
+ local s = t[i]
if s ~= "" then
if str ~= "" then
str = str .. "/" .. s
@@ -2288,13 +2780,13 @@ if string.find(os.getenv("PATH"),";") then
end
local first, middle, last
local drive = false
- first, middle, last = str:match("^(//)(//*)(.*)$")
+ first, middle, last = match(str,"^(//)(//*)(.*)$")
if first then
-- empty network path == local path
else
- first, last = str:match("^(//)/*(.-)$")
+ first, last = match(str,"^(//)/*(.-)$")
if first then
- middle, last = str:match("([^/]+)/+(.-)$")
+ middle, last = match(str,"([^/]+)/+(.-)$")
if middle then
pth = "//" .. middle
else
@@ -2302,11 +2794,11 @@ if string.find(os.getenv("PATH"),";") then
last = ""
end
else
- first, middle, last = str:match("^([a-zA-Z]:)(/*)(.-)$")
+ first, middle, last = match(str,"^([a-zA-Z]:)(/*)(.-)$")
if first then
pth, drive = first .. middle, true
else
- middle, last = str:match("^(/*)(.-)$")
+ middle, last = match(str,"^(/*)(.-)$")
if not middle then
last = str
end
@@ -2340,34 +2832,31 @@ if string.find(os.getenv("PATH"),";") then
--~ print(dir.mkdirs("///a/b/c"))
--~ print(dir.mkdirs("a/bbb//ccc/"))
- function dir.expand_name(str)
- local first, nothing, last = str:match("^(//)(//*)(.*)$")
+ function dir.expand_name(str) -- will be merged with cleanpath and collapsepath
+ local first, nothing, last = match(str,"^(//)(//*)(.*)$")
if first then
- first = lfs.currentdir() .. "/"
- first = first:gsub("\\","/")
+ first = dir.current() .. "/"
end
if not first then
- first, last = str:match("^(//)/*(.*)$")
+ first, last = match(str,"^(//)/*(.*)$")
end
if not first then
- first, last = str:match("^([a-zA-Z]:)(.*)$")
+ first, last = match(str,"^([a-zA-Z]:)(.*)$")
if first and not find(last,"^/") then
local d = lfs.currentdir()
if lfs.chdir(first) then
- first = lfs.currentdir()
- first = first:gsub("\\","/")
+ first = dir.current()
end
lfs.chdir(d)
end
end
if not first then
- first, last = lfs.currentdir(), str
- first = first:gsub("\\","/")
+ first, last = dir.current(), str
end
- last = last:gsub("//","/")
- last = last:gsub("/%./","/")
- last = last:gsub("^/*","")
- first = first:gsub("/*$","")
+ last = gsub(last,"//","/")
+ last = gsub(last,"/%./","/")
+ last = gsub(last,"^/*","")
+ first = gsub(first,"/*$","")
if last == "" then
return first
else
@@ -2378,8 +2867,9 @@ if string.find(os.getenv("PATH"),";") then
else
function dir.mkdirs(...)
- local str, pth = "", ""
- for _, s in ipairs({...}) do
+ local str, pth, t = "", "", { ... }
+ for i=1,#t do
+ local s = t[i]
if s ~= "" then
if str ~= "" then
str = str .. "/" .. s
@@ -2388,7 +2878,7 @@ else
end
end
end
- str = str:gsub("/+","/")
+ str = gsub(str,"/+","/")
if find(str,"^/") then
pth = "/"
for s in gmatch(str,"[^/]+") do
@@ -2422,12 +2912,12 @@ else
--~ print(dir.mkdirs("///a/b/c"))
--~ print(dir.mkdirs("a/bbb//ccc/"))
- function dir.expand_name(str)
+ function dir.expand_name(str) -- will be merged with cleanpath and collapsepath
if not find(str,"^/") then
str = lfs.currentdir() .. "/" .. str
end
- str = str:gsub("//","/")
- str = str:gsub("/%./","/")
+ str = gsub(str,"//","/")
+ str = gsub(str,"/%./","/")
return str
end
@@ -2442,7 +2932,7 @@ do -- create closure to overcome 200 locals limit
if not modules then modules = { } end modules ['l-boolean'] = {
version = 1.001,
- comment = "companion to luat-lib.tex",
+ comment = "companion to luat-lib.mkiv",
author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
copyright = "PRAGMA ADE / ConTeXt Development Team",
license = "see context related readme files"
@@ -2503,19 +2993,40 @@ do -- create closure to overcome 200 locals limit
if not modules then modules = { } end modules ['l-unicode'] = {
version = 1.001,
- comment = "companion to luat-lib.tex",
+ comment = "companion to luat-lib.mkiv",
author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
copyright = "PRAGMA ADE / ConTeXt Development Team",
license = "see context related readme files"
}
+if not unicode then
+
+ unicode = { utf8 = { } }
+
+ local floor, char = math.floor, string.char
+
+ function unicode.utf8.utfchar(n)
+ if n < 0x80 then
+ return char(n)
+ elseif n < 0x800 then
+ return char(0xC0 + floor(n/0x40)) .. char(0x80 + (n % 0x40))
+ elseif n < 0x10000 then
+ return char(0xE0 + floor(n/0x1000)) .. char(0x80 + (floor(n/0x40) % 0x40)) .. char(0x80 + (n % 0x40))
+ elseif n < 0x40000 then
+ return char(0xF0 + floor(n/0x40000)) .. char(0x80 + floor(n/0x1000)) .. char(0x80 + (floor(n/0x40) % 0x40)) .. char(0x80 + (n % 0x40))
+ else -- wrong:
+ -- return char(0xF1 + floor(n/0x1000000)) .. char(0x80 + floor(n/0x40000)) .. char(0x80 + floor(n/0x1000)) .. char(0x80 + (floor(n/0x40) % 0x40)) .. char(0x80 + (n % 0x40))
+ return "?"
+ end
+ end
+
+end
+
utf = utf or unicode.utf8
local concat, utfchar, utfgsub = table.concat, utf.char, utf.gsub
local char, byte, find, bytepairs = string.char, string.byte, string.find, string.bytepairs
-unicode = unicode or { }
-
-- 0 EF BB BF UTF-8
-- 1 FF FE UTF-16-little-endian
-- 2 FE FF UTF-16-big-endian
@@ -2530,14 +3041,20 @@ unicode.utfname = {
[4] = 'utf-32-be'
}
-function unicode.utftype(f) -- \000 fails !
+-- \000 fails in <= 5.0 but is valid in >=5.1 where %z is depricated
+
+function unicode.utftype(f)
local str = f:read(4)
if not str then
f:seek('set')
return 0
- elseif find(str,"^%z%z\254\255") then
+ -- elseif find(str,"^%z%z\254\255") then -- depricated
+ -- elseif find(str,"^\000\000\254\255") then -- not permitted and bugged
+ elseif find(str,"\000\000\254\255",1,true) then -- seems to work okay (TH)
return 4
- elseif find(str,"^\255\254%z%z") then
+ -- elseif find(str,"^\255\254%z%z") then -- depricated
+ -- elseif find(str,"^\255\254\000\000") then -- not permitted and bugged
+ elseif find(str,"\255\254\000\000",1,true) then -- seems to work okay (TH)
return 3
elseif find(str,"^\254\255") then
f:seek('set',2)
@@ -2681,7 +3198,7 @@ do -- create closure to overcome 200 locals limit
if not modules then modules = { } end modules ['l-math'] = {
version = 1.001,
- comment = "companion to luat-lib.tex",
+ comment = "companion to luat-lib.mkiv",
author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
copyright = "PRAGMA ADE / ConTeXt Development Team",
license = "see context related readme files"
@@ -2728,7 +3245,7 @@ do -- create closure to overcome 200 locals limit
if not modules then modules = { } end modules ['l-utils'] = {
version = 1.001,
- comment = "companion to luat-lib.tex",
+ comment = "companion to luat-lib.mkiv",
author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
copyright = "PRAGMA ADE / ConTeXt Development Team",
license = "see context related readme files"
@@ -2736,6 +3253,10 @@ if not modules then modules = { } end modules ['l-utils'] = {
-- hm, quite unreadable
+local gsub = string.gsub
+local concat = table.concat
+local type, next = type, next
+
if not utils then utils = { } end
if not utils.merger then utils.merger = { } end
if not utils.lua then utils.lua = { } end
@@ -2773,7 +3294,7 @@ function utils.merger._self_load_(name)
end
if data and utils.merger.strip_comment then
-- saves some 20K
- data = data:gsub("%-%-~[^\n\r]*[\r\n]", "")
+ data = gsub(data,"%-%-~[^\n\r]*[\r\n]", "")
end
return data or ""
end
@@ -2791,7 +3312,7 @@ end
function utils.merger._self_swap_(data,code)
if data ~= "" then
- return (data:gsub(utils.merger.pattern, function(s)
+ return (gsub(data,utils.merger.pattern, function(s)
return "\n\n" .. "-- "..utils.merger.m_begin .. "\n" .. code .. "\n" .. "-- "..utils.merger.m_end .. "\n\n"
end, 1))
else
@@ -2801,8 +3322,8 @@ end
--~ stripper:
--~
---~ data = string.gsub(data,"%-%-~[^\n]*\n","")
---~ data = string.gsub(data,"\n\n+","\n")
+--~ data = gsub(data,"%-%-~[^\n]*\n","")
+--~ data = gsub(data,"\n\n+","\n")
function utils.merger._self_libs_(libs,list)
local result, f, frozen = { }, nil, false
@@ -2810,9 +3331,10 @@ function utils.merger._self_libs_(libs,list)
if type(libs) == 'string' then libs = { libs } end
if type(list) == 'string' then list = { list } end
local foundpath = nil
- for _, lib in ipairs(libs) do
- for _, pth in ipairs(list) do
- pth = string.gsub(pth,"\\","/") -- file.clean_path
+ for i=1,#libs do
+ local lib = libs[i]
+ for j=1,#list do
+ local pth = gsub(list[j],"\\","/") -- file.clean_path
utils.report("checking library path %s",pth)
local name = pth .. "/" .. lib
if lfs.isfile(name) then
@@ -2824,7 +3346,8 @@ function utils.merger._self_libs_(libs,list)
if foundpath then
utils.report("using library path %s",foundpath)
local right, wrong = { }, { }
- for _, lib in ipairs(libs) do
+ for i=1,#libs do
+ local lib = libs[i]
local fullname = foundpath .. "/" .. lib
if lfs.isfile(fullname) then
-- right[#right+1] = lib
@@ -2838,15 +3361,15 @@ function utils.merger._self_libs_(libs,list)
end
end
if #right > 0 then
- utils.report("merged libraries: %s",table.concat(right," "))
+ utils.report("merged libraries: %s",concat(right," "))
end
if #wrong > 0 then
- utils.report("skipped libraries: %s",table.concat(wrong," "))
+ utils.report("skipped libraries: %s",concat(wrong," "))
end
else
utils.report("no valid library path found")
end
- return table.concat(result, "\n\n")
+ return concat(result, "\n\n")
end
function utils.merger.selfcreate(libs,list,target)
@@ -2904,16 +3427,28 @@ do -- create closure to overcome 200 locals limit
if not modules then modules = { } end modules ['l-aux'] = {
version = 1.001,
- comment = "companion to luat-lib.tex",
+ comment = "companion to luat-lib.mkiv",
author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
copyright = "PRAGMA ADE / ConTeXt Development Team",
license = "see context related readme files"
}
+-- for inline, no store split : for s in string.gmatch(str,",* *([^,]+)") do .. end
+
aux = aux or { }
local concat, format, gmatch = table.concat, string.format, string.gmatch
local tostring, type = tostring, type
+local lpegmatch = lpeg.match
+
+local P, R, V = lpeg.P, lpeg.R, lpeg.V
+
+local escape, left, right = P("\\"), P('{'), P('}')
+
+lpeg.patterns.balanced = P {
+ [1] = ((escape * (left+right)) + (1 - (left+right)) + V(2))^0,
+ [2] = left * V(1) * right
+}
local space = lpeg.P(' ')
local equal = lpeg.P("=")
@@ -2921,7 +3456,7 @@ 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 nested = lpeg.P { lbrace * (nobrace + lpeg.V(1))^0 * rbrace }
local spaces = space^0
local value = lpeg.P(lbrace * lpeg.C((nobrace + nested)^0) * rbrace) + lpeg.C((nested + (1-comma))^0)
@@ -2959,13 +3494,13 @@ function aux.make_settings_to_hash_pattern(set,how)
end
end
-function aux.settings_to_hash(str)
+function aux.settings_to_hash(str,existing)
if str and str ~= "" then
- hash = { }
+ hash = existing or { }
if moretolerant then
- pattern_b_s:match(str)
+ lpegmatch(pattern_b_s,str)
else
- pattern_a_s:match(str)
+ lpegmatch(pattern_a_s,str)
end
return hash
else
@@ -2973,39 +3508,41 @@ function aux.settings_to_hash(str)
end
end
-function aux.settings_to_hash_tolerant(str)
+function aux.settings_to_hash_tolerant(str,existing)
if str and str ~= "" then
- hash = { }
- pattern_b_s:match(str)
+ hash = existing or { }
+ lpegmatch(pattern_b_s,str)
return hash
else
return { }
end
end
-function aux.settings_to_hash_strict(str)
+function aux.settings_to_hash_strict(str,existing)
if str and str ~= "" then
- hash = { }
- pattern_c_s:match(str)
+ hash = existing or { }
+ lpegmatch(pattern_c_s,str)
return next(hash) and hash
else
return nil
end
end
-local seperator = comma * space^0
+local separator = 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)
+local pattern = lpeg.Ct(value*(separator*value)^0)
-- "aap, {noot}, mies" : outer {} removes, leading spaces ignored
aux.settings_to_array_pattern = pattern
+-- we could use a weak table as cache
+
function aux.settings_to_array(str)
if not str or str == "" then
return { }
else
- return pattern:match(str)
+ return lpegmatch(pattern,str)
end
end
@@ -3014,10 +3551,10 @@ local function set(t,v)
end
local value = lpeg.P(lpeg.Carg(1)*value) / set
-local pattern = value*(seperator*value)^0 * lpeg.Carg(1)
+local pattern = value*(separator*value)^0 * lpeg.Carg(1)
function aux.add_settings_to_array(t,str)
- return pattern:match(str, nil, t)
+ return lpegmatch(pattern,str,nil,t)
end
function aux.hash_to_string(h,separator,yes,no,strict,omit)
@@ -3065,6 +3602,13 @@ function aux.settings_to_set(str,t)
return t
end
+local value = lbrace * lpeg.C((nobrace + nested)^0) * rbrace
+local pattern = lpeg.Ct((space + value)^0)
+
+function aux.arguments_to_table(str)
+ return lpegmatch(pattern,str)
+end
+
-- temporary here
function aux.getparameters(self,class,parentclass,settings)
@@ -3073,36 +3617,31 @@ function aux.getparameters(self,class,parentclass,settings)
sc = table.clone(self[parent])
self[class] = sc
end
- aux.add_settings_to_array(sc, settings)
+ aux.settings_to_hash(settings,sc)
end
-- temporary here
-local digit = lpeg.R("09")
-local period = lpeg.P(".")
-local zero = lpeg.P("0")
-
---~ local finish = lpeg.P(-1)
---~ local nodigit = (1-digit) + finish
---~ local case_1 = (period * zero^1 * #nodigit)/"" -- .000
---~ local case_2 = (period * (1-(zero^0/"") * #nodigit)^1 * (zero^0/"") * nodigit) -- .010 .10 .100100
-
+local digit = lpeg.R("09")
+local period = lpeg.P(".")
+local zero = lpeg.P("0")
local trailingzeros = zero^0 * -digit -- suggested by Roberto R
-local case_1 = period * trailingzeros / ""
-local case_2 = period * (digit - trailingzeros)^1 * (trailingzeros / "")
-
-local number = digit^1 * (case_1 + case_2)
-local stripper = lpeg.Cs((number + 1)^0)
+local case_1 = period * trailingzeros / ""
+local case_2 = period * (digit - trailingzeros)^1 * (trailingzeros / "")
+local number = digit^1 * (case_1 + case_2)
+local stripper = lpeg.Cs((number + 1)^0)
--~ local sample = "bla 11.00 bla 11 bla 0.1100 bla 1.00100 bla 0.00 bla 0.001 bla 1.1100 bla 0.100100100 bla 0.00100100100"
--~ collectgarbage("collect")
--~ str = string.rep(sample,10000)
--~ local ts = os.clock()
---~ stripper:match(str)
---~ print(#str, os.clock()-ts, stripper:match(sample))
+--~ lpegmatch(stripper,str)
+--~ print(#str, os.clock()-ts, lpegmatch(stripper,sample))
+
+lpeg.patterns.strip_zeros = stripper
function aux.strip_zeros(str)
- return stripper:match(str)
+ return lpegmatch(stripper,str)
end
function aux.definetable(target) -- defines undefined tables
@@ -3126,6 +3665,24 @@ function aux.accesstable(target)
return t
end
+-- as we use this a lot ...
+
+--~ function aux.cachefunction(action,weak)
+--~ local cache = { }
+--~ if weak then
+--~ setmetatable(cache, { __mode = "kv" } )
+--~ end
+--~ local function reminder(str)
+--~ local found = cache[str]
+--~ if not found then
+--~ found = action(str)
+--~ cache[str] = found
+--~ end
+--~ return found
+--~ end
+--~ return reminder, cache
+--~ end
+
end -- of closure
@@ -3133,7 +3690,7 @@ do -- create closure to overcome 200 locals limit
if not modules then modules = { } end modules ['trac-tra'] = {
version = 1.001,
- comment = "companion to luat-lib.tex",
+ comment = "companion to trac-tra.mkiv",
author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
copyright = "PRAGMA ADE / ConTeXt Development Team",
license = "see context related readme files"
@@ -3143,12 +3700,17 @@ if not modules then modules = { } end modules ['trac-tra'] = {
-- bound to a variable, like node.new, node.copy etc (contrary to for instance
-- node.has_attribute which is bound to a has_attribute local variable in mkiv)
+local debug = require "debug"
+
+local getinfo = debug.getinfo
+local type, next = type, next
+local concat = table.concat
+local format, find, lower, gmatch, gsub = string.format, string.find, string.lower, string.gmatch, string.gsub
+
debugger = debugger or { }
local counters = { }
local names = { }
-local getinfo = debug.getinfo
-local format, find, lower, gmatch = string.format, string.find, string.lower, string.gmatch
-- one
@@ -3187,10 +3749,10 @@ function debugger.showstats(printer,threshold)
local total, grandtotal, functions = 0, 0, 0
printer("\n") -- ugly but ok
-- table.sort(counters)
- for func, count in pairs(counters) do
+ for func, count in next, counters do
if count > threshold then
local name = getname(func)
- if not name:find("for generator") then
+ if not find(name,"for generator") then
printer(format("%8i %s", count, name))
total = total + count
end
@@ -3222,7 +3784,7 @@ end
--~ local total, grandtotal, functions = 0, 0, 0
--~ printer("\n") -- ugly but ok
--~ -- table.sort(counters)
---~ for func, count in pairs(counters) do
+--~ for func, count in next, counters do
--~ if count > threshold then
--~ printer(format("%8i %s", count, func))
--~ total = total + count
@@ -3276,38 +3838,77 @@ end
--~ print("")
--~ debugger.showstats(print,3)
-trackers = trackers or { }
+setters = setters or { }
+setters.data = setters.data or { }
-local data, done = { }, { }
+--~ local function set(t,what,value)
+--~ local data, done = t.data, t.done
+--~ if type(what) == "string" then
+--~ what = aux.settings_to_array(what) -- inefficient but ok
+--~ end
+--~ for i=1,#what do
+--~ local w = what[i]
+--~ for d, f in next, data do
+--~ if done[d] then
+--~ -- prevent recursion due to wildcards
+--~ elseif find(d,w) then
+--~ done[d] = true
+--~ for i=1,#f do
+--~ f[i](value)
+--~ end
+--~ end
+--~ end
+--~ end
+--~ end
-local function set(what,value)
+local function set(t,what,value)
+ local data, done = t.data, t.done
if type(what) == "string" then
- what = aux.settings_to_array(what)
+ what = aux.settings_to_hash(what) -- inefficient but ok
end
- for i=1,#what do
- local w = what[i]
+ for w, v in next, what do
+ if v == "" then
+ v = value
+ else
+ v = toboolean(v)
+ end
for d, f in next, data do
if done[d] then
-- prevent recursion due to wildcards
elseif find(d,w) then
done[d] = true
for i=1,#f do
- f[i](value)
+ f[i](v)
end
end
end
end
end
-local function reset()
- for d, f in next, data do
+local function reset(t)
+ for d, f in next, t.data do
for i=1,#f do
f[i](false)
end
end
end
-function trackers.register(what,...)
+local function enable(t,what)
+ set(t,what,true)
+end
+
+local function disable(t,what)
+ local data = t.data
+ if not what or what == "" then
+ t.done = { }
+ reset(t)
+ else
+ set(t,what,false)
+ end
+end
+
+function setters.register(t,what,...)
+ local data = t.data
what = lower(what)
local w = data[what]
if not w then
@@ -3319,32 +3920,32 @@ function trackers.register(what,...)
if typ == "function" then
w[#w+1] = fnc
elseif typ == "string" then
- w[#w+1] = function(value) set(fnc,value,nesting) end
+ w[#w+1] = function(value) set(t,fnc,value,nesting) end
end
end
end
-function trackers.enable(what)
- done = { }
- set(what,true)
+function setters.enable(t,what)
+ local e = t.enable
+ t.enable, t.done = enable, { }
+ enable(t,string.simpleesc(tostring(what)))
+ t.enable, t.done = e, { }
end
-function trackers.disable(what)
- done = { }
- if not what or what == "" then
- trackers.reset(what)
- else
- set(what,false)
- end
+function setters.disable(t,what)
+ local e = t.disable
+ t.disable, t.done = disable, { }
+ disable(t,string.simpleesc(tostring(what)))
+ t.disable, t.done = e, { }
end
-function trackers.reset(what)
- done = { }
- reset()
+function setters.reset(t)
+ t.done = { }
+ reset(t)
end
-function trackers.list() -- pattern
- local list = table.sortedkeys(data)
+function setters.list(t) -- pattern
+ local list = table.sortedkeys(t.data)
local user, system = { }, { }
for l=1,#list do
local what = list[l]
@@ -3357,6 +3958,78 @@ function trackers.list() -- pattern
return user, system
end
+function setters.show(t)
+ commands.writestatus("","")
+ local list = setters.list(t)
+ for k=1,#list do
+ commands.writestatus(t.name,list[k])
+ end
+ commands.writestatus("","")
+end
+
+-- we could have used a bit of oo and the trackers:enable syntax but
+-- there is already a lot of code around using the singular tracker
+
+-- we could make this into a module
+
+function setters.new(name)
+ local t
+ t = {
+ data = { },
+ name = name,
+ enable = function(...) setters.enable (t,...) end,
+ disable = function(...) setters.disable (t,...) end,
+ register = function(...) setters.register(t,...) end,
+ list = function(...) setters.list (t,...) end,
+ show = function(...) setters.show (t,...) end,
+ }
+ setters.data[name] = t
+ return t
+end
+
+trackers = setters.new("trackers")
+directives = setters.new("directives")
+experiments = setters.new("experiments")
+
+-- nice trick: we overload two of the directives related functions with variants that
+-- do tracing (itself using a tracker) .. proof of concept
+
+local trace_directives = false local trace_directives = false trackers.register("system.directives", function(v) trace_directives = v end)
+local trace_experiments = false local trace_experiments = false trackers.register("system.experiments", function(v) trace_experiments = v end)
+
+local e = directives.enable
+local d = directives.disable
+
+function directives.enable(...)
+ commands.writestatus("directives","enabling: %s",concat({...}," "))
+ e(...)
+end
+
+function directives.disable(...)
+ commands.writestatus("directives","disabling: %s",concat({...}," "))
+ d(...)
+end
+
+local e = experiments.enable
+local d = experiments.disable
+
+function experiments.enable(...)
+ commands.writestatus("experiments","enabling: %s",concat({...}," "))
+ e(...)
+end
+
+function experiments.disable(...)
+ commands.writestatus("experiments","disabling: %s",concat({...}," "))
+ d(...)
+end
+
+-- a useful example
+
+directives.register("system.nostatistics", function(v)
+ statistics.enable = not v
+end)
+
+
end -- of closure
@@ -3364,7 +4037,7 @@ do -- create closure to overcome 200 locals limit
if not modules then modules = { } end modules ['luat-env'] = {
version = 1.001,
- comment = "companion to luat-lib.tex",
+ comment = "companion to luat-lib.mkiv",
author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
copyright = "PRAGMA ADE / ConTeXt Development Team",
license = "see context related readme files"
@@ -3376,10 +4049,10 @@ if not modules then modules = { } end modules ['luat-env'] = {
-- evolved before bytecode arrays were available and so a lot of
-- code has disappeared already.
-local trace_verbose = false trackers.register("resolvers.verbose", function(v) trace_verbose = v end)
-local trace_locating = false trackers.register("resolvers.locating", function(v) trace_locating = v trackers.enable("resolvers.verbose") end)
+local trace_locating = false trackers.register("resolvers.locating", function(v) trace_locating = v end)
-local format = string.format
+local format, sub, match, gsub, find = string.format, string.sub, string.match, string.gsub, string.find
+local unquote, quote = string.unquote, string.quote
-- precautions
@@ -3413,13 +4086,14 @@ if not environment.jobname then environ
function environment.initialize_arguments(arg)
local arguments, files = { }, { }
environment.arguments, environment.files, environment.sortedflags = arguments, files, nil
- for index, argument in pairs(arg) do
+ for index=1,#arg do
+ local argument = arg[index]
if index > 0 then
- local flag, value = argument:match("^%-+(.+)=(.-)$")
+ local flag, value = match(argument,"^%-+(.-)=(.-)$")
if flag then
- arguments[flag] = string.unquote(value or "")
+ arguments[flag] = unquote(value or "")
else
- flag = argument:match("^%-+(.+)")
+ flag = match(argument,"^%-+(.+)")
if flag then
arguments[flag] = true
else
@@ -3446,25 +4120,30 @@ function environment.argument(name,partial)
return arguments[name]
elseif partial then
if not sortedflags then
- sortedflags = { }
- for _,v in pairs(table.sortedkeys(arguments)) do
- sortedflags[#sortedflags+1] = "^" .. v
+ sortedflags = table.sortedkeys(arguments)
+ for k=1,#sortedflags do
+ sortedflags[k] = "^" .. sortedflags[k]
end
environment.sortedflags = sortedflags
end
-- example of potential clash: ^mode ^modefile
- for _,v in ipairs(sortedflags) do
- if name:find(v) then
- return arguments[v:sub(2,#v)]
+ for k=1,#sortedflags do
+ local v = sortedflags[k]
+ if find(name,v) then
+ return arguments[sub(v,2,#v)]
end
end
end
return nil
end
+environment.argument("x",true)
+
function environment.split_arguments(separator) -- rather special, cut-off before separator
local done, before, after = false, { }, { }
- for _,v in ipairs(environment.original_arguments) do
+ local original_arguments = environment.original_arguments
+ for k=1,#original_arguments do
+ local v = original_arguments[k]
if not done and v == separator then
done = true
elseif done then
@@ -3481,16 +4160,17 @@ function environment.reconstruct_commandline(arg,noquote)
if noquote and #arg == 1 then
local a = arg[1]
a = resolvers.resolve(a)
- a = a:unquote()
+ a = unquote(a)
return a
- elseif next(arg) then
+ elseif #arg > 0 then
local result = { }
- for _,a in ipairs(arg) do -- ipairs 1 .. #n
+ for i=1,#arg do
+ local a = arg[i]
a = resolvers.resolve(a)
- a = a:unquote()
- a = a:gsub('"','\\"') -- tricky
- if a:find(" ") then
- result[#result+1] = a:quote()
+ a = unquote(a)
+ a = gsub(a,'"','\\"') -- tricky
+ if find(a," ") then
+ result[#result+1] = quote(a)
else
result[#result+1] = a
end
@@ -3503,17 +4183,18 @@ end
if arg then
- -- new, reconstruct quoted snippets (maybe better just remnove the " then and add them later)
+ -- new, reconstruct quoted snippets (maybe better just remove the " then and add them later)
local newarg, instring = { }, false
- for index, argument in ipairs(arg) do
- if argument:find("^\"") then
- newarg[#newarg+1] = argument:gsub("^\"","")
- if not argument:find("\"$") then
+ for index=1,#arg do
+ local argument = arg[index]
+ if find(argument,"^\"") then
+ newarg[#newarg+1] = gsub(argument,"^\"","")
+ if not find(argument,"\"$") then
instring = true
end
- elseif argument:find("\"$") then
- newarg[#newarg] = newarg[#newarg] .. " " .. argument:gsub("\"$","")
+ elseif find(argument,"\"$") then
+ newarg[#newarg] = newarg[#newarg] .. " " .. gsub(argument,"\"$","")
instring = false
elseif instring then
newarg[#newarg] = newarg[#newarg] .. " " .. argument
@@ -3568,12 +4249,12 @@ function environment.luafilechunk(filename) -- used for loading lua bytecode in
filename = file.replacesuffix(filename, "lua")
local fullname = environment.luafile(filename)
if fullname and fullname ~= "" then
- if trace_verbose then
+ if trace_locating then
logs.report("fileio","loading file %s", fullname)
end
return environment.loadedluacode(fullname)
else
- if trace_verbose then
+ if trace_locating then
logs.report("fileio","unknown file %s", filename)
end
return nil
@@ -3593,7 +4274,7 @@ function environment.loadluafile(filename, version)
-- when not overloaded by explicit suffix we look for a luc file first
local fullname = (lucname and environment.luafile(lucname)) or ""
if fullname ~= "" then
- if trace_verbose then
+ if trace_locating then
logs.report("fileio","loading %s", fullname)
end
chunk = loadfile(fullname) -- this way we don't need a file exists check
@@ -3611,7 +4292,7 @@ function environment.loadluafile(filename, version)
if v == version then
return true
else
- if trace_verbose then
+ if trace_locating then
logs.report("fileio","version mismatch for %s: lua=%s, luc=%s", filename, v, version)
end
environment.loadluafile(filename)
@@ -3622,12 +4303,12 @@ function environment.loadluafile(filename, version)
end
fullname = (luaname and environment.luafile(luaname)) or ""
if fullname ~= "" then
- if trace_verbose then
+ if trace_locating then
logs.report("fileio","loading %s", fullname)
end
chunk = loadfile(fullname) -- this way we don't need a file exists check
if not chunk then
- if verbose then
+ if trace_locating then
logs.report("fileio","unknown file %s", filename)
end
else
@@ -3645,7 +4326,7 @@ do -- create closure to overcome 200 locals limit
if not modules then modules = { } end modules ['trac-inf'] = {
version = 1.001,
- comment = "companion to luat-lib.tex",
+ comment = "companion to trac-inf.mkiv",
author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
copyright = "PRAGMA ADE / ConTeXt Development Team",
license = "see context related readme files"
@@ -3670,6 +4351,14 @@ function statistics.hastimer(instance)
return instance and instance.starttime
end
+function statistics.resettiming(instance)
+ if not instance then
+ notimer = { timing = 0, loadtime = 0 }
+ else
+ instance.timing, instance.loadtime = 0, 0
+ end
+end
+
function statistics.starttiming(instance)
if not instance then
notimer = { }
@@ -3684,6 +4373,8 @@ function statistics.starttiming(instance)
if not instance.loadtime then
instance.loadtime = 0
end
+ else
+--~ logs.report("system","nested timing (%s)",tostring(instance))
end
instance.timing = it + 1
end
@@ -3729,6 +4420,12 @@ function statistics.elapsedindeed(instance)
return t > statistics.threshold
end
+function statistics.elapsedseconds(instance,rest) -- returns nil if 0 seconds
+ if statistics.elapsedindeed(instance) then
+ return format("%s seconds %s", statistics.elapsedtime(instance),rest or "")
+ end
+end
+
-- general function
function statistics.register(tag,fnc)
@@ -3807,14 +4504,32 @@ function statistics.timed(action,report)
report("total runtime: %s",statistics.elapsedtime(timer))
end
+-- where, not really the best spot for this:
+
+commands = commands or { }
+
+local timer
+
+function commands.resettimer()
+ statistics.resettiming(timer)
+ statistics.starttiming(timer)
+end
+
+function commands.elapsedtime()
+ statistics.stoptiming(timer)
+ tex.sprint(statistics.elapsedtime(timer))
+end
+
+commands.resettimer()
+
end -- of closure
do -- create closure to overcome 200 locals limit
-if not modules then modules = { } end modules ['luat-log'] = {
+if not modules then modules = { } end modules ['trac-log'] = {
version = 1.001,
- comment = "companion to luat-lib.tex",
+ comment = "companion to trac-log.mkiv",
author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
copyright = "PRAGMA ADE / ConTeXt Development Team",
license = "see context related readme files"
@@ -3822,7 +4537,11 @@ if not modules then modules = { } end modules ['luat-log'] = {
-- this is old code that needs an overhaul
-local write_nl, write, format = texio.write_nl or print, texio.write or io.write, string.format
+--~ io.stdout:setvbuf("no")
+--~ io.stderr:setvbuf("no")
+
+local write_nl, write = texio.write_nl or print, texio.write or io.write
+local format, gmatch = string.format, string.gmatch
local texcount = tex and tex.count
if texlua then
@@ -3903,25 +4622,48 @@ function logs.tex.line(fmt,...) -- new
end
end
+--~ function logs.tex.start_page_number()
+--~ local real, user, sub = texcount.realpageno, texcount.userpageno, texcount.subpageno
+--~ if real > 0 then
+--~ if user > 0 then
+--~ if sub > 0 then
+--~ write(format("[%s.%s.%s",real,user,sub))
+--~ else
+--~ write(format("[%s.%s",real,user))
+--~ end
+--~ else
+--~ write(format("[%s",real))
+--~ end
+--~ else
+--~ write("[-")
+--~ end
+--~ end
+
+--~ function logs.tex.stop_page_number()
+--~ write("]")
+--~ end
+
+local real, user, sub
+
function logs.tex.start_page_number()
- local real, user, sub = texcount.realpageno, texcount.userpageno, texcount.subpageno
+ real, user, sub = texcount.realpageno, texcount.userpageno, texcount.subpageno
+end
+
+function logs.tex.stop_page_number()
if real > 0 then
if user > 0 then
if sub > 0 then
- write(format("[%s.%s.%s",real,user,sub))
+ logs.report("pages", "flushing realpage %s, userpage %s, subpage %s",real,user,sub)
else
- write(format("[%s.%s",real,user))
+ logs.report("pages", "flushing realpage %s, userpage %s",real,user)
end
else
- write(format("[%s",real))
+ logs.report("pages", "flushing realpage %s",real)
end
else
- write("[-")
+ logs.report("pages", "flushing page")
end
-end
-
-function logs.tex.stop_page_number()
- write("]")
+ io.flush()
end
logs.tex.report_job_stat = statistics.show_job_stat
@@ -4021,7 +4763,7 @@ end
function logs.setprogram(_name_,_banner_,_verbose_)
name, banner = _name_, _banner_
if _verbose_ then
- trackers.enable("resolvers.verbose")
+ trackers.enable("resolvers.locating")
end
logs.set_method("tex")
logs.report = report -- also used in libraries
@@ -4034,9 +4776,9 @@ end
function logs.setverbose(what)
if what then
- trackers.enable("resolvers.verbose")
+ trackers.enable("resolvers.locating")
else
- trackers.disable("resolvers.verbose")
+ trackers.disable("resolvers.locating")
end
logs.verbose = what or false
end
@@ -4053,7 +4795,7 @@ logs.report = logs.tex.report
logs.simple = logs.tex.report
function logs.reportlines(str) -- todo: <lines></lines>
- for line in str:gmatch("(.-)[\n\r]") do
+ for line in gmatch(str,"(.-)[\n\r]") do
logs.report(line)
end
end
@@ -4064,8 +4806,12 @@ end
logs.simpleline = logs.reportline
-function logs.help(message,option)
+function logs.reportbanner() -- for scripts too
logs.report(banner)
+end
+
+function logs.help(message,option)
+ logs.reportbanner()
logs.reportline()
logs.reportlines(message)
local moreinfo = logs.moreinfo or ""
@@ -4097,6 +4843,11 @@ end
--~ logs.system(syslogname,"context","test","fonts","font %s recached due to newer version (%s)","blabla","123")
--~ end
+function logs.fatal(where,...)
+ logs.report(where,"fatal error: %s, aborting now",format(...))
+ os.exit()
+end
+
end -- of closure
@@ -4104,10 +4855,10 @@ do -- create closure to overcome 200 locals limit
if not modules then modules = { } end modules ['data-inp'] = {
version = 1.001,
+ comment = "companion to luat-lib.mkiv",
author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
copyright = "PRAGMA ADE / ConTeXt Development Team",
license = "see context related readme files",
- comment = "companion to luat-lib.tex",
}
-- After a few years using the code the large luat-inp.lua file
@@ -4119,7 +4870,7 @@ if not modules then modules = { } end modules ['data-inp'] = {
-- * some public auxiliary functions were made private
--
-- TODO: os.getenv -> os.env[]
--- TODO: instances.[hashes,cnffiles,configurations,522] -> ipairs (alles check, sneller)
+-- TODO: instances.[hashes,cnffiles,configurations,522]
-- TODO: check escaping in find etc, too much, too slow
-- This lib is multi-purpose and can be loaded again later on so that
@@ -4140,12 +4891,13 @@ if not modules then modules = { } end modules ['data-inp'] = {
local format, gsub, find, lower, upper, match, gmatch = string.format, string.gsub, string.find, string.lower, string.upper, string.match, string.gmatch
local concat, insert, sortedkeys = table.concat, table.insert, table.sortedkeys
local next, type = next, type
+local lpegmatch = lpeg.match
-local trace_locating, trace_detail, trace_verbose = false, false, false
+local trace_locating, trace_detail, trace_expansions = false, false, false
-trackers.register("resolvers.verbose", function(v) trace_verbose = v end)
-trackers.register("resolvers.locating", function(v) trace_locating = v trackers.enable("resolvers.verbose") end)
-trackers.register("resolvers.detail", function(v) trace_detail = v trackers.enable("resolvers.verbose,resolvers.detail") end)
+trackers.register("resolvers.locating", function(v) trace_locating = v end)
+trackers.register("resolvers.details", function(v) trace_detail = v end)
+trackers.register("resolvers.expansions", function(v) trace_expansions = v end) -- todo
if not resolvers then
resolvers = {
@@ -4169,7 +4921,7 @@ resolvers.generators.notfound = { nil }
resolvers.cacheversion = '1.0.1'
resolvers.cnfname = 'texmf.cnf'
resolvers.luaname = 'texmfcnf.lua'
-resolvers.homedir = os.env[os.platform == "windows" and 'USERPROFILE'] or os.env['HOME'] or '~'
+resolvers.homedir = os.env[os.type == "windows" and 'USERPROFILE'] or os.env['HOME'] or '~'
resolvers.cnfdefault = '{$SELFAUTODIR,$SELFAUTOPARENT}{,{/share,}/texmf{-local,.local,}/web2c}'
local dummy_path_expr = "^!*unset/*$"
@@ -4211,8 +4963,8 @@ suffixes['lua'] = { 'lua', 'luc', 'tma', 'tmc' }
alternatives['map files'] = 'map'
alternatives['enc files'] = 'enc'
-alternatives['cid files'] = 'cid'
-alternatives['fea files'] = 'fea'
+alternatives['cid maps'] = 'cid' -- great, why no cid files
+alternatives['font feature files'] = 'fea' -- and fea files here
alternatives['opentype fonts'] = 'otf'
alternatives['truetype fonts'] = 'ttf'
alternatives['truetype collections'] = 'ttc'
@@ -4228,6 +4980,11 @@ formats ['sfd'] = 'SFDFONTS'
suffixes ['sfd'] = { 'sfd' }
alternatives['subfont definition files'] = 'sfd'
+-- lib paths
+
+formats ['lib'] = 'CLUAINPUTS' -- new (needs checking)
+suffixes['lib'] = (os.libsuffix and { os.libsuffix }) or { 'dll', 'so' }
+
-- In practice we will work within one tds tree, but i want to keep
-- the option open to build tools that look at multiple trees, which is
-- why we keep the tree specific data in a table. We used to pass the
@@ -4350,8 +5107,10 @@ local function check_configuration() -- not yet ok, no time for debugging now
-- bad luck
end
fix("LUAINPUTS" , ".;$TEXINPUTS;$TEXMFSCRIPTS") -- no progname, hm
- fix("FONTFEATURES", ".;$TEXMF/fonts/fea//;$OPENTYPEFONTS;$TTFONTS;$T1FONTS;$AFMFONTS")
- fix("FONTCIDMAPS" , ".;$TEXMF/fonts/cid//;$OPENTYPEFONTS;$TTFONTS;$T1FONTS;$AFMFONTS")
+ -- this will go away some day
+ fix("FONTFEATURES", ".;$TEXMF/fonts/{data,fea}//;$OPENTYPEFONTS;$TTFONTS;$T1FONTS;$AFMFONTS")
+ fix("FONTCIDMAPS" , ".;$TEXMF/fonts/{data,cid}//;$OPENTYPEFONTS;$TTFONTS;$T1FONTS;$AFMFONTS")
+ --
fix("LUATEXLIBS" , ".;$TEXMF/luatex/lua//")
end
@@ -4366,7 +5125,7 @@ function resolvers.settrace(n) -- no longer number but: 'locating' or 'detail'
end
end
-resolvers.settrace(os.getenv("MTX.resolvers.TRACE") or os.getenv("MTX_INPUT_TRACE"))
+resolvers.settrace(os.getenv("MTX_INPUT_TRACE"))
function resolvers.osenv(key)
local ie = instance.environment
@@ -4454,37 +5213,43 @@ end
-- work that well; the parsing is ok, but dealing with the resulting
-- table is a pain because we need to work inside-out recursively
+local function do_first(a,b)
+ local t = { }
+ for s in gmatch(b,"[^,]+") do t[#t+1] = a .. s end
+ return "{" .. concat(t,",") .. "}"
+end
+
+local function do_second(a,b)
+ local t = { }
+ for s in gmatch(a,"[^,]+") do t[#t+1] = s .. b end
+ return "{" .. concat(t,",") .. "}"
+end
+
+local function do_both(a,b)
+ local t = { }
+ for sa in gmatch(a,"[^,]+") do
+ for sb in gmatch(b,"[^,]+") do
+ t[#t+1] = sa .. sb
+ end
+ end
+ return "{" .. concat(t,",") .. "}"
+end
+
+local function do_three(a,b,c)
+ return a .. b.. c
+end
+
local function splitpathexpr(str, t, validate)
-- no need for further optimization as it is only called a
- -- few times, we can use lpeg for the sub; we could move
- -- the local functions outside the body
+ -- few times, we can use lpeg for the sub
+ if trace_expansions then
+ logs.report("fileio","expanding variable '%s'",str)
+ end
t = t or { }
str = gsub(str,",}",",@}")
str = gsub(str,"{,","{@,")
-- str = "@" .. str .. "@"
local ok, done
- local function do_first(a,b)
- local t = { }
- for s in gmatch(b,"[^,]+") do t[#t+1] = a .. s end
- return "{" .. concat(t,",") .. "}"
- end
- local function do_second(a,b)
- local t = { }
- for s in gmatch(a,"[^,]+") do t[#t+1] = s .. b end
- return "{" .. concat(t,",") .. "}"
- end
- local function do_both(a,b)
- local t = { }
- for sa in gmatch(a,"[^,]+") do
- for sb in gmatch(b,"[^,]+") do
- t[#t+1] = sa .. sb
- end
- end
- return "{" .. concat(t,",") .. "}"
- end
- local function do_three(a,b,c)
- return a .. b.. c
- end
while true do
done = false
while true do
@@ -4515,6 +5280,11 @@ local function splitpathexpr(str, t, validate)
t[#t+1] = s
end
end
+ if trace_expansions then
+ for k=1,#t do
+ logs.report("fileio","% 4i: %s",k,t[k])
+ end
+ end
return t
end
@@ -4554,18 +5324,27 @@ end
-- also we now follow the stupid route: if not set then just assume *one*
-- cnf file under texmf (i.e. distribution)
-resolvers.ownpath = resolvers.ownpath or nil
-resolvers.ownbin = resolvers.ownbin or arg[-2] or arg[-1] or arg[0] or "luatex"
-resolvers.autoselfdir = true -- false may be handy for debugging
+local args = environment and environment.original_arguments or arg -- this needs a cleanup
+
+resolvers.ownbin = resolvers.ownbin or args[-2] or arg[-2] or args[-1] or arg[-1] or arg[0] or "luatex"
+resolvers.ownbin = gsub(resolvers.ownbin,"\\","/")
function resolvers.getownpath()
- if not resolvers.ownpath then
- if resolvers.autoselfdir and os.selfdir then
- resolvers.ownpath = os.selfdir
- else
- local binary = resolvers.ownbin
- if os.platform == "windows" then
- binary = file.replacesuffix(binary,"exe")
+ local ownpath = resolvers.ownpath or os.selfdir
+ if not ownpath or ownpath == "" or ownpath == "unset" then
+ ownpath = args[-1] or arg[-1]
+ ownpath = ownpath and file.dirname(gsub(ownpath,"\\","/"))
+ if not ownpath or ownpath == "" then
+ ownpath = args[-0] or arg[-0]
+ ownpath = ownpath and file.dirname(gsub(ownpath,"\\","/"))
+ end
+ local binary = resolvers.ownbin
+ if not ownpath or ownpath == "" then
+ ownpath = ownpath and file.dirname(binary)
+ end
+ if not ownpath or ownpath == "" then
+ if os.binsuffix ~= "" then
+ binary = file.replacesuffix(binary,os.binsuffix)
end
for p in gmatch(os.getenv("PATH"),"[^"..io.pathseparator.."]+") do
local b = file.join(p,binary)
@@ -4577,30 +5356,39 @@ function resolvers.getownpath()
local olddir = lfs.currentdir()
if lfs.chdir(p) then
local pp = lfs.currentdir()
- if trace_verbose and p ~= pp then
- logs.report("fileio","following symlink %s to %s",p,pp)
+ if trace_locating and p ~= pp then
+ logs.report("fileio","following symlink '%s' to '%s'",p,pp)
end
- resolvers.ownpath = pp
+ ownpath = pp
lfs.chdir(olddir)
else
- if trace_verbose then
- logs.report("fileio","unable to check path %s",p)
+ if trace_locating then
+ logs.report("fileio","unable to check path '%s'",p)
end
- resolvers.ownpath = p
+ ownpath = p
end
break
end
end
end
- if not resolvers.ownpath then resolvers.ownpath = '.' end
+ if not ownpath or ownpath == "" then
+ ownpath = "."
+ logs.report("fileio","forcing fallback ownpath .")
+ elseif trace_locating then
+ logs.report("fileio","using ownpath '%s'",ownpath)
+ end
end
- return resolvers.ownpath
+ resolvers.ownpath = ownpath
+ function resolvers.getownpath()
+ return resolvers.ownpath
+ end
+ return ownpath
end
local own_places = { "SELFAUTOLOC", "SELFAUTODIR", "SELFAUTOPARENT", "TEXMFCNF" }
local function identify_own()
- local ownpath = resolvers.getownpath() or lfs.currentdir()
+ local ownpath = resolvers.getownpath() or dir.current()
local ie = instance.environment
if ownpath then
if resolvers.env('SELFAUTOLOC') == "" then os.env['SELFAUTOLOC'] = file.collapse_path(ownpath) end
@@ -4613,10 +5401,10 @@ local function identify_own()
if resolvers.env('TEXMFCNF') == "" then os.env['TEXMFCNF'] = resolvers.cnfdefault end
if resolvers.env('TEXOS') == "" then os.env['TEXOS'] = resolvers.env('SELFAUTODIR') end
if resolvers.env('TEXROOT') == "" then os.env['TEXROOT'] = resolvers.env('SELFAUTOPARENT') end
- if trace_verbose then
+ if trace_locating then
for i=1,#own_places do
local v = own_places[i]
- logs.report("fileio","variable %s set to %s",v,resolvers.env(v) or "unknown")
+ logs.report("fileio","variable '%s' set to '%s'",v,resolvers.env(v) or "unknown")
end
end
identify_own = function() end
@@ -4648,10 +5436,8 @@ end
local function load_cnf_file(fname)
fname = resolvers.clean_path(fname)
local lname = file.replacesuffix(fname,'lua')
- local f = io.open(lname)
- if f then -- this will go
- f:close()
- local dname = file.dirname(fname)
+ if lfs.isfile(lname) then
+ local dname = file.dirname(fname) -- fname ?
if not instance.configuration[dname] then
resolvers.load_data(dname,'configuration',lname and file.basename(lname))
instance.order[#instance.order+1] = instance.configuration[dname]
@@ -4659,8 +5445,8 @@ local function load_cnf_file(fname)
else
f = io.open(fname)
if f then
- if trace_verbose then
- logs.report("fileio","loading %s", fname)
+ if trace_locating then
+ logs.report("fileio","loading configuration file %s", fname)
end
local line, data, n, k, v
local dname = file.dirname(fname)
@@ -4694,14 +5480,16 @@ local function load_cnf_file(fname)
end
end
f:close()
- elseif trace_verbose then
- logs.report("fileio","skipping %s", fname)
+ elseif trace_locating then
+ logs.report("fileio","skipping configuration file '%s'", fname)
end
end
end
local function collapse_cnf_data() -- potential optimization: pass start index (setup and configuration are shared)
- for _,c in ipairs(instance.order) do
+ local order = instance.order
+ for i=1,#order do
+ local c = order[i]
for k,v in next, c do
if not instance.variables[k] then
if instance.environment[k] then
@@ -4717,19 +5505,24 @@ end
function resolvers.load_cnf()
local function loadoldconfigdata()
- for _, fname in ipairs(instance.cnffiles) do
- load_cnf_file(fname)
+ local cnffiles = instance.cnffiles
+ for i=1,#cnffiles do
+ load_cnf_file(cnffiles[i])
end
end
-- instance.cnffiles contain complete names now !
+ -- we still use a funny mix of cnf and new but soon
+ -- we will switch to lua exclusively as we only use
+ -- the file to collect the tree roots
if #instance.cnffiles == 0 then
- if trace_verbose then
+ if trace_locating then
logs.report("fileio","no cnf files found (TEXMFCNF may not be set/known)")
end
else
- instance.rootpath = instance.cnffiles[1]
- for k,fname in ipairs(instance.cnffiles) do
- instance.cnffiles[k] = file.collapse_path(gsub(fname,"\\",'/'))
+ local cnffiles = instance.cnffiles
+ instance.rootpath = cnffiles[1]
+ for k=1,#cnffiles do
+ instance.cnffiles[k] = file.collapse_path(cnffiles[k])
end
for i=1,3 do
instance.rootpath = file.dirname(instance.rootpath)
@@ -4757,8 +5550,9 @@ function resolvers.load_lua()
-- yet harmless
else
instance.rootpath = instance.luafiles[1]
- for k,fname in ipairs(instance.luafiles) do
- instance.luafiles[k] = file.collapse_path(gsub(fname,"\\",'/'))
+ local luafiles = instance.luafiles
+ for k=1,#luafiles do
+ instance.luafiles[k] = file.collapse_path(luafiles[k])
end
for i=1,3 do
instance.rootpath = file.dirname(instance.rootpath)
@@ -4790,14 +5584,14 @@ end
function resolvers.append_hash(type,tag,name)
if trace_locating then
- logs.report("fileio","= hash append: %s",tag)
+ logs.report("fileio","hash '%s' appended",tag)
end
insert(instance.hashes, { ['type']=type, ['tag']=tag, ['name']=name } )
end
function resolvers.prepend_hash(type,tag,name)
if trace_locating then
- logs.report("fileio","= hash prepend: %s",tag)
+ logs.report("fileio","hash '%s' prepended",tag)
end
insert(instance.hashes, 1, { ['type']=type, ['tag']=tag, ['name']=name } )
end
@@ -4821,9 +5615,11 @@ end
-- locators
function resolvers.locatelists()
- for _, path in ipairs(resolvers.clean_path_list('TEXMF')) do
- if trace_verbose then
- logs.report("fileio","locating list of %s",path)
+ local texmfpaths = resolvers.clean_path_list('TEXMF')
+ for i=1,#texmfpaths do
+ local path = texmfpaths[i]
+ if trace_locating then
+ logs.report("fileio","locating list of '%s'",path)
end
resolvers.locatedatabase(file.collapse_path(path))
end
@@ -4836,11 +5632,11 @@ end
function resolvers.locators.tex(specification)
if specification and specification ~= '' and lfs.isdir(specification) then
if trace_locating then
- logs.report("fileio",'! tex locator found: %s',specification)
+ logs.report("fileio","tex locator '%s' found",specification)
end
resolvers.append_hash('file',specification,filename)
elseif trace_locating then
- logs.report("fileio",'? tex locator not found: %s',specification)
+ logs.report("fileio","tex locator '%s' not found",specification)
end
end
@@ -4854,7 +5650,9 @@ function resolvers.loadfiles()
instance.loaderror = false
instance.files = { }
if not instance.renewcache then
- for _, hash in ipairs(instance.hashes) do
+ local hashes = instance.hashes
+ for k=1,#hashes do
+ local hash = hashes[k]
resolvers.hashdatabase(hash.tag,hash.name)
if instance.loaderror then break end
end
@@ -4868,8 +5666,9 @@ end
-- generators:
function resolvers.loadlists()
- for _, hash in ipairs(instance.hashes) do
- resolvers.generatedatabase(hash.tag)
+ local hashes = instance.hashes
+ for i=1,#hashes do
+ resolvers.generatedatabase(hashes[i].tag)
end
end
@@ -4881,10 +5680,27 @@ end
local weird = lpeg.P(".")^1 + lpeg.anywhere(lpeg.S("~`!#$%^&*()={}[]:;\"\'||<>,?\n\r\t"))
+--~ local l_forbidden = lpeg.S("~`!#$%^&*()={}[]:;\"\'||\\/<>,?\n\r\t")
+--~ local l_confusing = lpeg.P(" ")
+--~ local l_character = lpeg.patterns.utf8
+--~ local l_dangerous = lpeg.P(".")
+
+--~ local l_normal = (l_character - l_forbidden - l_confusing - l_dangerous) * (l_character - l_forbidden - l_confusing^2)^0 * lpeg.P(-1)
+--~ ----- l_normal = l_normal * lpeg.Cc(true) + lpeg.Cc(false)
+
+--~ local function test(str)
+--~ print(str,lpeg.match(l_normal,str))
+--~ end
+--~ test("ヒラギノ明朝 Pro W3")
+--~ test("..ヒラギノ明朝 Pro W3")
+--~ test(":ヒラギノ明朝 Pro W3;")
+--~ test("ヒラギノ明朝 /Pro W3;")
+--~ test("ヒラギノ明朝 Pro W3")
+
function resolvers.generators.tex(specification)
local tag = specification
- if trace_verbose then
- logs.report("fileio","scanning path %s",specification)
+ if trace_locating then
+ logs.report("fileio","scanning path '%s'",specification)
end
instance.files[tag] = { }
local files = instance.files[tag]
@@ -4900,7 +5716,8 @@ function resolvers.generators.tex(specification)
full = spec
end
for name in directory(full) do
- if not weird:match(name) then
+ if not lpegmatch(weird,name) then
+ -- if lpegmatch(l_normal,name) then
local mode = attributes(full..name,'mode')
if mode == 'file' then
if path then
@@ -4933,7 +5750,7 @@ function resolvers.generators.tex(specification)
end
end
action()
- if trace_verbose then
+ if trace_locating then
logs.report("fileio","%s files found on %s directories with %s uppercase remappings",n,m,r)
end
end
@@ -4948,11 +5765,48 @@ end
-- we join them and split them after the expansion has taken place. This
-- is more convenient.
+--~ local checkedsplit = string.checkedsplit
+
+local cache = { }
+
+local splitter = lpeg.Ct(lpeg.splitat(lpeg.S(os.type == "windows" and ";" or ":;")))
+
+local function split_kpse_path(str) -- beware, this can be either a path or a {specification}
+ local found = cache[str]
+ if not found then
+ if str == "" then
+ found = { }
+ else
+ str = gsub(str,"\\","/")
+--~ local split = (find(str,";") and checkedsplit(str,";")) or checkedsplit(str,io.pathseparator)
+local split = lpegmatch(splitter,str)
+ found = { }
+ for i=1,#split do
+ local s = split[i]
+ if not find(s,"^{*unset}*") then
+ found[#found+1] = s
+ end
+ end
+ if trace_expansions then
+ logs.report("fileio","splitting path specification '%s'",str)
+ for k=1,#found do
+ logs.report("fileio","% 4i: %s",k,found[k])
+ end
+ end
+ cache[str] = found
+ end
+ end
+ return found
+end
+
+resolvers.split_kpse_path = split_kpse_path
+
function resolvers.splitconfig()
- for i,c in ipairs(instance) do
- for k,v in pairs(c) do
+ for i=1,#instance do
+ local c = instance[i]
+ for k,v in next, c do
if type(v) == 'string' then
- local t = file.split_path(v)
+ local t = split_kpse_path(v)
if #t > 1 then
c[k] = t
end
@@ -4962,21 +5816,25 @@ function resolvers.splitconfig()
end
function resolvers.joinconfig()
- for i,c in ipairs(instance.order) do
- for k,v in pairs(c) do -- ipairs?
+ local order = instance.order
+ for i=1,#order do
+ local c = order[i]
+ for k,v in next, c do -- indexed?
if type(v) == 'table' then
c[k] = file.join_path(v)
end
end
end
end
+
function resolvers.split_path(str)
if type(str) == 'table' then
return str
else
- return file.split_path(str)
+ return split_kpse_path(str)
end
end
+
function resolvers.join_path(str)
if type(str) == 'table' then
return file.join_path(str)
@@ -4988,8 +5846,9 @@ end
function resolvers.splitexpansions()
local ie = instance.expansions
for k,v in next, ie do
- local t, h = { }, { }
- for _,vv in ipairs(file.split_path(v)) do
+ local t, h, p = { }, { }, split_kpse_path(v)
+ for kk=1,#p do
+ local vv = p[kk]
if vv ~= "" and not h[vv] then
t[#t+1] = vv
h[vv] = true
@@ -5036,11 +5895,15 @@ function resolvers.serialize(files)
end
t[#t+1] = "return {"
if instance.sortdata then
- for _, k in pairs(sortedkeys(files)) do -- ipairs
+ local sortedfiles = sortedkeys(files)
+ for i=1,#sortedfiles do
+ local k = sortedfiles[i]
local fk = files[k]
if type(fk) == 'table' then
t[#t+1] = "\t['" .. k .. "']={"
- for _, kk in pairs(sortedkeys(fk)) do -- ipairs
+ local sortedfk = sortedkeys(fk)
+ for j=1,#sortedfk do
+ local kk = sortedfk[j]
t[#t+1] = dump(kk,fk[kk],"\t\t")
end
t[#t+1] = "\t},"
@@ -5065,12 +5928,18 @@ function resolvers.serialize(files)
return concat(t,"\n")
end
+local data_state = { }
+
+function resolvers.data_state()
+ return data_state or { }
+end
+
function resolvers.save_data(dataname, makename) -- untested without cache overload
for cachename, files in next, instance[dataname] do
local name = (makename or file.join)(cachename,dataname)
local luaname, lucname = name .. ".lua", name .. ".luc"
- if trace_verbose then
- logs.report("fileio","preparing %s for %s",dataname,cachename)
+ if trace_locating then
+ logs.report("fileio","preparing '%s' for '%s'",dataname,cachename)
end
for k, v in next, files do
if type(v) == "table" and #v == 1 then
@@ -5084,24 +5953,25 @@ function resolvers.save_data(dataname, makename) -- untested without cache overl
date = os.date("%Y-%m-%d"),
time = os.date("%H:%M:%S"),
content = files,
+ uuid = os.uuid(),
}
local ok = io.savedata(luaname,resolvers.serialize(data))
if ok then
- if trace_verbose then
- logs.report("fileio","%s saved in %s",dataname,luaname)
+ if trace_locating then
+ logs.report("fileio","'%s' saved in '%s'",dataname,luaname)
end
if utils.lua.compile(luaname,lucname,false,true) then -- no cleanup but strip
- if trace_verbose then
- logs.report("fileio","%s compiled to %s",dataname,lucname)
+ if trace_locating then
+ logs.report("fileio","'%s' compiled to '%s'",dataname,lucname)
end
else
- if trace_verbose then
- logs.report("fileio","compiling failed for %s, deleting file %s",dataname,lucname)
+ if trace_locating then
+ logs.report("fileio","compiling failed for '%s', deleting file '%s'",dataname,lucname)
end
os.remove(lucname)
end
- elseif trace_verbose then
- logs.report("fileio","unable to save %s in %s (access error)",dataname,luaname)
+ elseif trace_locating then
+ logs.report("fileio","unable to save '%s' in '%s' (access error)",dataname,luaname)
end
end
end
@@ -5113,19 +5983,20 @@ function resolvers.load_data(pathname,dataname,filename,makename) -- untested wi
if blob then
local data = blob()
if data and data.content and data.type == dataname and data.version == resolvers.cacheversion then
- if trace_verbose then
- logs.report("fileio","loading %s for %s from %s",dataname,pathname,filename)
+ data_state[#data_state+1] = data.uuid
+ if trace_locating then
+ logs.report("fileio","loading '%s' for '%s' from '%s'",dataname,pathname,filename)
end
instance[dataname][pathname] = data.content
else
- if trace_verbose then
- logs.report("fileio","skipping %s for %s from %s",dataname,pathname,filename)
+ if trace_locating then
+ logs.report("fileio","skipping '%s' for '%s' from '%s'",dataname,pathname,filename)
end
instance[dataname][pathname] = { }
instance.loaderror = true
end
- elseif trace_verbose then
- logs.report("fileio","skipping %s for %s from %s",dataname,pathname,filename)
+ elseif trace_locating then
+ logs.report("fileio","skipping '%s' for '%s' from '%s'",dataname,pathname,filename)
end
end
@@ -5144,15 +6015,17 @@ function resolvers.resetconfig()
end
function resolvers.loadnewconfig()
- for _, cnf in ipairs(instance.luafiles) do
+ local luafiles = instance.luafiles
+ for i=1,#luafiles do
+ local cnf = luafiles[i]
local pathname = file.dirname(cnf)
local filename = file.join(pathname,resolvers.luaname)
local blob = loadfile(filename)
if blob then
local data = blob()
if data then
- if trace_verbose then
- logs.report("fileio","loading configuration file %s",filename)
+ if trace_locating then
+ logs.report("fileio","loading configuration file '%s'",filename)
end
if true then
-- flatten to variable.progname
@@ -5173,14 +6046,14 @@ function resolvers.loadnewconfig()
instance['setup'][pathname] = data
end
else
- if trace_verbose then
- logs.report("fileio","skipping configuration file %s",filename)
+ if trace_locating then
+ logs.report("fileio","skipping configuration file '%s'",filename)
end
instance['setup'][pathname] = { }
instance.loaderror = true
end
- elseif trace_verbose then
- logs.report("fileio","skipping configuration file %s",filename)
+ elseif trace_locating then
+ logs.report("fileio","skipping configuration file '%s'",filename)
end
instance.order[#instance.order+1] = instance.setup[pathname]
if instance.loaderror then break end
@@ -5189,7 +6062,9 @@ end
function resolvers.loadoldconfig()
if not instance.renewcache then
- for _, cnf in ipairs(instance.cnffiles) do
+ local cnffiles = instance.cnffiles
+ for i=1,#cnffiles do
+ local cnf = cnffiles[i]
local dname = file.dirname(cnf)
resolvers.load_data(dname,'configuration')
instance.order[#instance.order+1] = instance.configuration[dname]
@@ -5379,7 +6254,7 @@ end
function resolvers.expanded_path_list(str)
if not str then
- return ep or { }
+ return ep or { } -- ep ?
elseif instance.savelists then
-- engine+progname hash
str = gsub(str,"%$","")
@@ -5397,9 +6272,9 @@ end
function resolvers.expanded_path_list_from_var(str) -- brrr
local tmp = resolvers.var_of_format_or_suffix(gsub(str,"%$",""))
if tmp ~= "" then
- return resolvers.expanded_path_list(str)
- else
return resolvers.expanded_path_list(tmp)
+ else
+ return resolvers.expanded_path_list(str)
end
end
@@ -5446,9 +6321,9 @@ function resolvers.isreadable.file(name)
local readable = lfs.isfile(name) -- brrr
if trace_detail then
if readable then
- logs.report("fileio","+ readable: %s",name)
+ logs.report("fileio","file '%s' is readable",name)
else
- logs.report("fileio","- readable: %s", name)
+ logs.report("fileio","file '%s' is not readable", name)
end
end
return readable
@@ -5464,7 +6339,7 @@ local function collect_files(names)
for k=1,#names do
local fname = names[k]
if trace_detail then
- logs.report("fileio","? blobpath asked: %s",fname)
+ logs.report("fileio","checking name '%s'",fname)
end
local bname = file.basename(fname)
local dname = file.dirname(fname)
@@ -5480,7 +6355,7 @@ local function collect_files(names)
local files = blobpath and instance.files[blobpath]
if files then
if trace_detail then
- logs.report("fileio",'? blobpath do: %s (%s)',blobpath,bname)
+ logs.report("fileio","deep checking '%s' (%s)",blobpath,bname)
end
local blobfile = files[bname]
if not blobfile then
@@ -5514,7 +6389,7 @@ local function collect_files(names)
end
end
elseif trace_locating then
- logs.report("fileio",'! blobpath no: %s (%s)',blobpath,bname)
+ logs.report("fileio","no match in '%s' (%s)",blobpath,bname)
end
end
end
@@ -5564,14 +6439,13 @@ end
local function collect_instance_files(filename,collected) -- todo : plugin (scanners, checkers etc)
local result = collected or { }
local stamp = nil
- filename = file.collapse_path(filename) -- elsewhere
- filename = file.collapse_path(gsub(filename,"\\","/")) -- elsewhere
+ filename = file.collapse_path(filename)
-- speed up / beware: format problem
if instance.remember then
stamp = filename .. "--" .. instance.engine .. "--" .. instance.progname .. "--" .. instance.format
if instance.found[stamp] then
if trace_locating then
- logs.report("fileio",'! remembered: %s',filename)
+ logs.report("fileio","remembering file '%s'",filename)
end
return instance.found[stamp]
end
@@ -5579,7 +6453,7 @@ local function collect_instance_files(filename,collected) -- todo : plugin (scan
if not dangerous[instance.format or "?"] then
if resolvers.isreadable.file(filename) then
if trace_detail then
- logs.report("fileio",'= found directly: %s',filename)
+ logs.report("fileio","file '%s' found directly",filename)
end
instance.found[stamp] = { filename }
return { filename }
@@ -5587,13 +6461,13 @@ local function collect_instance_files(filename,collected) -- todo : plugin (scan
end
if find(filename,'%*') then
if trace_locating then
- logs.report("fileio",'! wildcard: %s', filename)
+ logs.report("fileio","checking wildcard '%s'", filename)
end
result = resolvers.find_wildcard_files(filename)
elseif file.is_qualified_path(filename) then
if resolvers.isreadable.file(filename) then
if trace_locating then
- logs.report("fileio",'! qualified: %s', filename)
+ logs.report("fileio","qualified name '%s'", filename)
end
result = { filename }
else
@@ -5603,7 +6477,7 @@ local function collect_instance_files(filename,collected) -- todo : plugin (scan
forcedname = filename .. ".tex"
if resolvers.isreadable.file(forcedname) then
if trace_locating then
- logs.report("fileio",'! no suffix, forcing standard filetype: tex')
+ logs.report("fileio","no suffix, forcing standard filetype 'tex'")
end
result, ok = { forcedname }, true
end
@@ -5613,7 +6487,7 @@ local function collect_instance_files(filename,collected) -- todo : plugin (scan
forcedname = filename .. "." .. s
if resolvers.isreadable.file(forcedname) then
if trace_locating then
- logs.report("fileio",'! no suffix, forcing format filetype: %s', s)
+ logs.report("fileio","no suffix, forcing format filetype '%s'", s)
end
result, ok = { forcedname }, true
break
@@ -5625,7 +6499,7 @@ local function collect_instance_files(filename,collected) -- todo : plugin (scan
-- try to find in tree (no suffix manipulation), here we search for the
-- matching last part of the name
local basename = file.basename(filename)
- local pattern = (filename .. "$"):gsub("([%.%-])","%%%1")
+ local pattern = gsub(filename .. "$","([%.%-])","%%%1")
local savedformat = instance.format
local format = savedformat or ""
if format == "" then
@@ -5635,19 +6509,21 @@ local function collect_instance_files(filename,collected) -- todo : plugin (scan
instance.format = "othertextfiles" -- kind of everything, maybe texinput is better
end
--
- local resolved = collect_instance_files(basename)
- if #result == 0 then
- local lowered = lower(basename)
- if filename ~= lowered then
- resolved = collect_instance_files(lowered)
+ if basename ~= filename then
+ local resolved = collect_instance_files(basename)
+ if #result == 0 then
+ local lowered = lower(basename)
+ if filename ~= lowered then
+ resolved = collect_instance_files(lowered)
+ end
end
- end
- resolvers.format = savedformat
- --
- for r=1,#resolved do
- local rr = resolved[r]
- if rr:find(pattern) then
- result[#result+1], ok = rr, true
+ resolvers.format = savedformat
+ --
+ for r=1,#resolved do
+ local rr = resolved[r]
+ if find(rr,pattern) then
+ result[#result+1], ok = rr, true
+ end
end
end
-- a real wildcard:
@@ -5656,14 +6532,14 @@ local function collect_instance_files(filename,collected) -- todo : plugin (scan
-- local filelist = collect_files({basename})
-- for f=1,#filelist do
-- local ff = filelist[f][3] or ""
- -- if ff:find(pattern) then
+ -- if find(ff,pattern) then
-- result[#result+1], ok = ff, true
-- end
-- end
-- end
end
if not ok and trace_locating then
- logs.report("fileio",'? qualified: %s', filename)
+ logs.report("fileio","qualified name '%s'", filename)
end
end
else
@@ -5682,12 +6558,12 @@ local function collect_instance_files(filename,collected) -- todo : plugin (scan
wantedfiles[#wantedfiles+1] = forcedname
filetype = resolvers.format_of_suffix(forcedname)
if trace_locating then
- logs.report("fileio",'! forcing filetype: %s',filetype)
+ logs.report("fileio","forcing filetype '%s'",filetype)
end
else
filetype = resolvers.format_of_suffix(filename)
if trace_locating then
- logs.report("fileio",'! using suffix based filetype: %s',filetype)
+ logs.report("fileio","using suffix based filetype '%s'",filetype)
end
end
else
@@ -5699,7 +6575,7 @@ local function collect_instance_files(filename,collected) -- todo : plugin (scan
end
filetype = instance.format
if trace_locating then
- logs.report("fileio",'! using given filetype: %s',filetype)
+ logs.report("fileio","using given filetype '%s'",filetype)
end
end
local typespec = resolvers.variable_of_format(filetype)
@@ -5707,9 +6583,7 @@ local function collect_instance_files(filename,collected) -- todo : plugin (scan
if not pathlist or #pathlist == 0 then
-- no pathlist, access check only / todo == wildcard
if trace_detail then
- logs.report("fileio",'? filename: %s',filename)
- logs.report("fileio",'? filetype: %s',filetype or '?')
- logs.report("fileio",'? wanted files: %s',concat(wantedfiles," | "))
+ logs.report("fileio","checking filename '%s', filetype '%s', wanted files '%s'",filename, filetype or '?',concat(wantedfiles," | "))
end
for k=1,#wantedfiles do
local fname = wantedfiles[k]
@@ -5730,36 +6604,59 @@ local function collect_instance_files(filename,collected) -- todo : plugin (scan
else
-- list search
local filelist = collect_files(wantedfiles)
- local doscan, recurse
+ local dirlist = { }
+ if filelist then
+ for i=1,#filelist do
+ dirlist[i] = file.dirname(filelist[i][2]) .. "/"
+ end
+ end
if trace_detail then
- logs.report("fileio",'? filename: %s',filename)
+ logs.report("fileio","checking filename '%s'",filename)
end
-- a bit messy ... esp the doscan setting here
+ local doscan
for k=1,#pathlist do
local path = pathlist[k]
if find(path,"^!!") then doscan = false else doscan = true end
- if find(path,"//$") then recurse = true else recurse = false end
local pathname = gsub(path,"^!+", '')
done = false
-- using file list
- if filelist and not (done and not instance.allresults) and recurse then
- -- compare list entries with permitted pattern
- pathname = gsub(pathname,"([%-%.])","%%%1") -- this also influences
- pathname = gsub(pathname,"/+$", '/.*') -- later usage of pathname
- pathname = gsub(pathname,"//", '/.-/') -- not ok for /// but harmless
- local expr = "^" .. pathname
+ if filelist then
+ local expression
+ -- compare list entries with permitted pattern -- /xx /xx//
+ if not find(pathname,"/$") then
+ expression = pathname .. "/"
+ else
+ expression = pathname
+ end
+ expression = gsub(expression,"([%-%.])","%%%1") -- this also influences
+ expression = gsub(expression,"//+$", '/.*') -- later usage of pathname
+ expression = gsub(expression,"//", '/.-/') -- not ok for /// but harmless
+ expression = "^" .. expression .. "$"
+ if trace_detail then
+ logs.report("fileio","using pattern '%s' for path '%s'",expression,pathname)
+ end
for k=1,#filelist do
local fl = filelist[k]
local f = fl[2]
- if find(f,expr) then
- if trace_detail then
- logs.report("fileio",'= found in hash: %s',f)
- end
+ local d = dirlist[k]
+ if find(d,expression) then
--- todo, test for readable
result[#result+1] = fl[3]
resolvers.register_in_trees(f) -- for tracing used files
done = true
- if not instance.allresults then break end
+ if instance.allresults then
+ if trace_detail then
+ logs.report("fileio","match in hash for file '%s' on path '%s', continue scanning",f,d)
+ end
+ else
+ if trace_detail then
+ logs.report("fileio","match in hash for file '%s' on path '%s', quit scanning",f,d)
+ end
+ break
+ end
+ elseif trace_detail then
+ logs.report("fileio","no match in hash for file '%s' on path '%s'",f,d)
end
end
end
@@ -5775,7 +6672,7 @@ local function collect_instance_files(filename,collected) -- todo : plugin (scan
local fname = file.join(ppname,w)
if resolvers.isreadable.file(fname) then
if trace_detail then
- logs.report("fileio",'= found by scanning: %s',fname)
+ logs.report("fileio","found '%s' by scanning",fname)
end
result[#result+1] = fname
done = true
@@ -5838,7 +6735,7 @@ function resolvers.find_given_files(filename)
local hashes = instance.hashes
for k=1,#hashes do
local hash = hashes[k]
- local files = instance.files[hash.tag]
+ local files = instance.files[hash.tag] or { }
local blist = files[bname]
if not blist then
local rname = "remap:"..bname
@@ -5948,9 +6845,9 @@ function resolvers.load(option)
statistics.starttiming(instance)
resolvers.resetconfig()
resolvers.identify_cnf()
- resolvers.load_lua()
+ resolvers.load_lua() -- will become the new method
resolvers.expand_variables()
- resolvers.load_cnf()
+ resolvers.load_cnf() -- will be skipped when we have a lua file
resolvers.expand_variables()
if option ~= "nofiles" then
resolvers.load_hash()
@@ -5962,22 +6859,23 @@ end
function resolvers.for_files(command, files, filetype, mustexist)
if files and #files > 0 then
local function report(str)
- if trace_verbose then
+ if trace_locating then
logs.report("fileio",str) -- has already verbose
else
print(str)
end
end
- if trace_verbose then
- report('')
+ if trace_locating then
+ report('') -- ?
end
- for _, file in ipairs(files) do
+ for f=1,#files do
+ local file = files[f]
local result = command(file,filetype,mustexist)
if type(result) == 'string' then
report(result)
else
- for _,v in ipairs(result) do
- report(v)
+ for i=1,#result do
+ report(result[i]) -- could be unpack
end
end
end
@@ -6024,18 +6922,19 @@ end
function table.sequenced(t,sep) -- temp here
local s = { }
- for k, v in pairs(t) do -- pairs?
- s[#s+1] = k .. "=" .. v
+ for k, v in next, t do -- indexed?
+ s[#s+1] = k .. "=" .. tostring(v)
end
return concat(s, sep or " | ")
end
function resolvers.methodhandler(what, filename, filetype) -- ...
+ filename = file.collapse_path(filename)
local specification = (type(filename) == "string" and resolvers.splitmethod(filename)) or filename -- no or { }, let it bomb
local scheme = specification.scheme
if resolvers[what][scheme] then
if trace_locating then
- logs.report("fileio",'= handler: %s -> %s -> %s',specification.original,what,table.sequenced(specification))
+ logs.report("fileio","handler '%s' -> '%s' -> '%s'",specification.original,what,table.sequenced(specification))
end
return resolvers[what][scheme](filename,filetype) -- todo: specification
else
@@ -6055,8 +6954,9 @@ function resolvers.clean_path(str)
end
function resolvers.do_with_path(name,func)
- for _, v in pairs(resolvers.expanded_path_list(name)) do -- pairs?
- func("^"..resolvers.clean_path(v))
+ local pathlist = resolvers.expanded_path_list(name)
+ for i=1,#pathlist do
+ func("^"..resolvers.clean_path(pathlist[i]))
end
end
@@ -6065,7 +6965,9 @@ function resolvers.do_with_var(name,func)
end
function resolvers.with_files(pattern,handle)
- for _, hash in ipairs(instance.hashes) do
+ local hashes = instance.hashes
+ for i=1,#hashes do
+ local hash = hashes[i]
local blobpath = hash.tag
local blobtype = hash.type
if blobpath then
@@ -6080,7 +6982,7 @@ function resolvers.with_files(pattern,handle)
if type(v) == "string" then
handle(blobtype,blobpath,v,k)
else
- for _,vv in pairs(v) do -- ipairs?
+ for _,vv in next, v do -- indexed
handle(blobtype,blobpath,vv,k)
end
end
@@ -6092,7 +6994,7 @@ function resolvers.with_files(pattern,handle)
end
function resolvers.locate_format(name)
- local barename, fmtname = name:gsub("%.%a+$",""), ""
+ local barename, fmtname = gsub(name,"%.%a+$",""), ""
if resolvers.usecache then
local path = file.join(caches.setpath("formats")) -- maybe platform
fmtname = file.join(path,barename..".fmt") or ""
@@ -6140,7 +7042,7 @@ do -- create closure to overcome 200 locals limit
if not modules then modules = { } end modules ['data-tmp'] = {
version = 1.001,
- comment = "companion to luat-lib.tex",
+ comment = "companion to luat-lib.mkiv",
author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
copyright = "PRAGMA ADE / ConTeXt Development Team",
license = "see context related readme files"
@@ -6164,7 +7066,7 @@ luatools with a recache feature.</p>
local format, lower, gsub = string.format, string.lower, string.gsub
-local trace_cache = false trackers.register("resolvers.cache", function(v) trace_cache = v end)
+local trace_cache = false trackers.register("resolvers.cache", function(v) trace_cache = v end) -- not used yet
caches = caches or { }
@@ -6251,7 +7153,8 @@ function caches.setpath(...)
caches.path = '.'
end
caches.path = resolvers.clean_path(caches.path)
- if not table.is_empty({...}) then
+ local dirs = { ... }
+ if #dirs > 0 then
local pth = dir.mkdirs(caches.path,...)
return pth
end
@@ -6297,6 +7200,7 @@ function caches.savedata(filepath,filename,data,raw)
if raw then
reduce, simplify = false, false
end
+ data.cache_uuid = os.uuid()
if caches.direct then
file.savedata(tmaname, table.serialize(data,'return',false,true,false)) -- no hex
else
@@ -6322,7 +7226,7 @@ do -- create closure to overcome 200 locals limit
if not modules then modules = { } end modules ['data-inp'] = {
version = 1.001,
- comment = "companion to luat-lib.tex",
+ comment = "companion to luat-lib.mkiv",
author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
copyright = "PRAGMA ADE / ConTeXt Development Team",
license = "see context related readme files"
@@ -6343,7 +7247,7 @@ do -- create closure to overcome 200 locals limit
if not modules then modules = { } end modules ['data-out'] = {
version = 1.001,
- comment = "companion to luat-lib.tex",
+ comment = "companion to luat-lib.mkiv",
author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
copyright = "PRAGMA ADE / ConTeXt Development Team",
license = "see context related readme files"
@@ -6359,7 +7263,7 @@ do -- create closure to overcome 200 locals limit
if not modules then modules = { } end modules ['data-con'] = {
version = 1.001,
- comment = "companion to luat-lib.tex",
+ comment = "companion to luat-lib.mkiv",
author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
copyright = "PRAGMA ADE / ConTeXt Development Team",
license = "see context related readme files"
@@ -6370,8 +7274,6 @@ local format, lower, gsub = string.format, string.lower, string.gsub
local trace_cache = false trackers.register("resolvers.cache", function(v) trace_cache = v end)
local trace_containers = false trackers.register("resolvers.containers", function(v) trace_containers = v end)
local trace_storage = false trackers.register("resolvers.storage", function(v) trace_storage = v end)
-local trace_verbose = false trackers.register("resolvers.verbose", function(v) trace_verbose = v end)
-local trace_locating = false trackers.register("resolvers.locating", function(v) trace_locating = v trackers.enable("resolvers.verbose") end)
--[[ldx--
<p>Once we found ourselves defining similar cache constructs
@@ -6435,7 +7337,7 @@ 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
+ return storage and storage.cache_version == container.version
else
return false
end
@@ -6487,16 +7389,15 @@ do -- create closure to overcome 200 locals limit
if not modules then modules = { } end modules ['data-use'] = {
version = 1.001,
- comment = "companion to luat-lib.tex",
+ comment = "companion to luat-lib.mkiv",
author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
copyright = "PRAGMA ADE / ConTeXt Development Team",
license = "see context related readme files"
}
-local format, lower, gsub = string.format, string.lower, string.gsub
+local format, lower, gsub, find = string.format, string.lower, string.gsub, string.find
-local trace_verbose = false trackers.register("resolvers.verbose", function(v) trace_verbose = v end)
-local trace_locating = false trackers.register("resolvers.locating", function(v) trace_locating = v trackers.enable("resolvers.verbose") end)
+local trace_locating = false trackers.register("resolvers.locating", function(v) trace_locating = v end)
-- since we want to use the cache instead of the tree, we will now
-- reimplement the saver.
@@ -6540,19 +7441,20 @@ resolvers.automounted = resolvers.automounted or { }
function resolvers.automount(usecache)
local mountpaths = resolvers.clean_path_list(resolvers.expansion('TEXMFMOUNT'))
- if table.is_empty(mountpaths) and usecache then
+ if (not mountpaths or #mountpaths == 0) and usecache then
mountpaths = { caches.setpath("mount") }
end
- if not table.is_empty(mountpaths) then
+ if mountpaths and #mountpaths > 0 then
statistics.starttiming(resolvers.instance)
- for k, root in pairs(mountpaths) do
+ for k=1,#mountpaths do
+ local root = mountpaths[k]
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
+ if find(line,"^[%%#%-]") then -- or %W
-- skip
- elseif line:find("^zip://") then
+ elseif find(line,"^zip://") then
if trace_locating then
logs.report("fileio","mounting %s",line)
end
@@ -6597,11 +7499,13 @@ function statistics.check_fmt_status(texname)
local luv = dofile(luvname)
if luv and luv.sourcefile then
local sourcehash = md5.hex(io.loaddata(resolvers.find_file(luv.sourcefile)) or "unknown")
- if luv.enginebanner and luv.enginebanner ~= enginebanner then
- return "engine mismatch"
+ local luvbanner = luv.enginebanner or "?"
+ if luvbanner ~= enginebanner then
+ return string.format("engine mismatch (luv:%s <> bin:%s)",luvbanner,enginebanner)
end
- if luv.sourcehash and luv.sourcehash ~= sourcehash then
- return "source mismatch"
+ local luvhash = luv.sourcehash or "?"
+ if luvhash ~= sourcehash then
+ return string.format("source mismatch (luv:%s <> bin:%s)",luvhash,sourcehash)
end
else
return "invalid status file"
@@ -6727,7 +7631,7 @@ do -- create closure to overcome 200 locals limit
if not modules then modules = { } end modules ['data-aux'] = {
version = 1.001,
- comment = "companion to luat-lib.tex",
+ comment = "companion to luat-lib.mkiv",
author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
copyright = "PRAGMA ADE / ConTeXt Development Team",
license = "see context related readme files"
@@ -6735,47 +7639,47 @@ if not modules then modules = { } end modules ['data-aux'] = {
local find = string.find
-local trace_verbose = false trackers.register("resolvers.verbose", function(v) trace_verbose = v end)
+local trace_locating = false trackers.register("resolvers.locating", function(v) trace_locating = v end)
function resolvers.update_script(oldname,newname) -- oldname -> own.name, not per se a suffix
local scriptpath = "scripts/context/lua"
newname = file.addsuffix(newname,"lua")
local oldscript = resolvers.clean_path(oldname)
- if trace_verbose then
+ if trace_locating then
logs.report("fileio","to be replaced old script %s", oldscript)
end
local newscripts = resolvers.find_files(newname) or { }
if #newscripts == 0 then
- if trace_verbose then
+ if trace_locating then
logs.report("fileio","unable to locate new script")
end
else
for i=1,#newscripts do
local newscript = resolvers.clean_path(newscripts[i])
- if trace_verbose then
+ if trace_locating then
logs.report("fileio","checking new script %s", newscript)
end
if oldscript == newscript then
- if trace_verbose then
+ if trace_locating then
logs.report("fileio","old and new script are the same")
end
elseif not find(newscript,scriptpath) then
- if trace_verbose then
+ if trace_locating then
logs.report("fileio","new script should come from %s",scriptpath)
end
elseif not (find(oldscript,file.removesuffix(newname).."$") or find(oldscript,newname.."$")) then
- if trace_verbose then
+ if trace_locating then
logs.report("fileio","invalid new script name")
end
else
local newdata = io.loaddata(newscript)
if newdata then
- if trace_verbose then
+ if trace_locating then
logs.report("fileio","old script content replaced by new content")
end
io.savedata(oldscript,newdata)
break
- elseif trace_verbose then
+ elseif trace_locating then
logs.report("fileio","unable to load new script")
end
end
@@ -6790,7 +7694,7 @@ do -- create closure to overcome 200 locals limit
if not modules then modules = { } end modules ['data-lst'] = {
version = 1.001,
- comment = "companion to luat-lib.tex",
+ comment = "companion to luat-lib.mkiv",
author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
copyright = "PRAGMA ADE / ConTeXt Development Team",
license = "see context related readme files"
@@ -6814,7 +7718,9 @@ local function list(list,report)
local instance = resolvers.instance
local pat = upper(pattern or "","")
local report = report or texio.write_nl
- for _,key in pairs(table.sortedkeys(list)) do
+ local sorted = table.sortedkeys(list)
+ for i=1,#sorted do
+ local key = sorted[i]
if instance.pattern == "" or find(upper(key),pat) then
if instance.kpseonly then
if instance.kpsevars[key] then
@@ -6833,11 +7739,14 @@ function resolvers.listers.expansions() list(resolvers.instance.expansions) end
function resolvers.listers.configurations(report)
local report = report or texio.write_nl
local instance = resolvers.instance
- for _,key in ipairs(table.sortedkeys(instance.kpsevars)) do
+ local sorted = table.sortedkeys(instance.kpsevars)
+ for i=1,#sorted do
+ local key = sorted[i]
if not instance.pattern or (instance.pattern=="") or find(key,instance.pattern) then
report(format("%s\n",key))
- for i,c in ipairs(instance.order) do
- local str = c[key]
+ local order = instance.order
+ for i=1,#order do
+ local str = order[i][key]
if str then
report(format("\t%s\t%s",i,str))
end
@@ -6943,7 +7852,7 @@ if not resolvers then
os.exit()
end
-logs.setprogram('LuaTools',"TDS Management Tool 1.31",environment.arguments["verbose"] or false)
+logs.setprogram('LuaTools',"TDS Management Tool 1.32",environment.arguments["verbose"] or false)
local instance = resolvers.reset()
@@ -7000,6 +7909,12 @@ end
if environment.arguments["trace"] then resolvers.settrace(environment.arguments["trace"]) end
+local trackspec = environment.argument("trackers") or environment.argument("track")
+
+if trackspec then
+ trackers.enable(trackspec)
+end
+
runners = runners or { }
messages = messages or { }
@@ -7033,6 +7948,7 @@ messages.help = [[
--engine=str target engine
--progname=str format or backend
--pattern=str filter variables
+--trackers=list enable given trackers
]]
function runners.make_format(texname)
@@ -7091,8 +8007,9 @@ function runners.make_format(texname)
logs.simple("using uncompiled initialization file: %s",luaname)
end
else
- for _, v in pairs({instance.luaname, instance.progname, barename}) do
- v = string.gsub(v..".lua","%.lua%.lua$",".lua")
+ local what = { instance.luaname, instance.progname, barename }
+ for k=1,#what do
+ local v = string.gsub(what[k]..".lua","%.lua%.lua$",".lua")
if v and (v ~= "") then
luaname = resolvers.find_files(v)[1] or ""
if luaname ~= "" then
@@ -7116,7 +8033,8 @@ function runners.make_format(texname)
logs.simple("using lua initialization file: %s",luaname)
local mp = dir.glob(file.removesuffix(file.basename(luaname)).."-*.mem")
if mp and #mp > 0 then
- for _, name in ipairs(mp) do
+ for i=1,#mp do
+ local name = mp[i]
logs.simple("removing related mplib format %s", file.basename(name))
os.remove(name)
end
diff --git a/Master/texmf-dist/scripts/context/stubs/mswin/makempy.bat b/Master/texmf-dist/scripts/context/stubs/mswin/makempy.bat
deleted file mode 100755
index d02bbf7ca7e..00000000000
--- a/Master/texmf-dist/scripts/context/stubs/mswin/makempy.bat
+++ /dev/null
@@ -1,5 +0,0 @@
-@echo off
-setlocal
-set ownpath=%~dp0%
-texlua "%ownpath%mtxrun.lua" --usekpse --execute makempy.pl %*
-endlocal
diff --git a/Master/texmf-dist/scripts/context/stubs/mswin/metatex.cmd b/Master/texmf-dist/scripts/context/stubs/mswin/metatex.cmd
deleted file mode 100644
index 858f28f8fd5..00000000000
--- a/Master/texmf-dist/scripts/context/stubs/mswin/metatex.cmd
+++ /dev/null
@@ -1,5 +0,0 @@
-@echo off
-setlocal
-set ownpath=%~dp0%
-texlua "%ownpath%mtxrun.lua" --script metatex %*
-endlocal
diff --git a/Master/texmf-dist/scripts/context/stubs/mswin/metatex.exe b/Master/texmf-dist/scripts/context/stubs/mswin/metatex.exe
new file mode 100644
index 00000000000..2d45f27494d
--- /dev/null
+++ b/Master/texmf-dist/scripts/context/stubs/mswin/metatex.exe
Binary files differ
diff --git a/Master/texmf-dist/scripts/context/stubs/mswin/mpstools.bat b/Master/texmf-dist/scripts/context/stubs/mswin/mpstools.bat
deleted file mode 100755
index 8fa0c9639c2..00000000000
--- a/Master/texmf-dist/scripts/context/stubs/mswin/mpstools.bat
+++ /dev/null
@@ -1,5 +0,0 @@
-@echo off
-setlocal
-set ownpath=%~dp0%
-texlua "%ownpath%mtxrun.lua" --usekpse --execute mpstools.rb %*
-endlocal
diff --git a/Master/texmf-dist/scripts/context/stubs/mswin/mptopdf.bat b/Master/texmf-dist/scripts/context/stubs/mswin/mptopdf.bat
deleted file mode 100755
index 3cab9669f7e..00000000000
--- a/Master/texmf-dist/scripts/context/stubs/mswin/mptopdf.bat
+++ /dev/null
@@ -1,5 +0,0 @@
-@echo off
-setlocal
-set ownpath=%~dp0%
-texlua "%ownpath%mtxrun.lua" --usekpse --execute mptopdf.pl %*
-endlocal
diff --git a/Master/texmf-dist/scripts/context/stubs/mswin/mtxrun.cmd b/Master/texmf-dist/scripts/context/stubs/mswin/mtxrun.cmd
deleted file mode 100755
index 858bab87fed..00000000000
--- a/Master/texmf-dist/scripts/context/stubs/mswin/mtxrun.cmd
+++ /dev/null
@@ -1,5 +0,0 @@
-@echo off
-setlocal
-set ownpath=%~dp0%
-texlua "%ownpath%mtxrun.lua" %*
-endlocal
diff --git a/Master/texmf-dist/scripts/context/stubs/mswin/mtxrun.dll b/Master/texmf-dist/scripts/context/stubs/mswin/mtxrun.dll
new file mode 100644
index 00000000000..23e476cac49
--- /dev/null
+++ b/Master/texmf-dist/scripts/context/stubs/mswin/mtxrun.dll
Binary files differ
diff --git a/Master/texmf-dist/scripts/context/stubs/mswin/mtxrun.exe b/Master/texmf-dist/scripts/context/stubs/mswin/mtxrun.exe
new file mode 100644
index 00000000000..745eaf22464
--- /dev/null
+++ b/Master/texmf-dist/scripts/context/stubs/mswin/mtxrun.exe
Binary files differ
diff --git a/Master/texmf-dist/scripts/context/stubs/mswin/mtxrun.lua b/Master/texmf-dist/scripts/context/stubs/mswin/mtxrun.lua
index 82d1edecbc5..b99327692d7 100644
--- a/Master/texmf-dist/scripts/context/stubs/mswin/mtxrun.lua
+++ b/Master/texmf-dist/scripts/context/stubs/mswin/mtxrun.lua
@@ -48,13 +48,16 @@ do -- create closure to overcome 200 locals limit
if not modules then modules = { } end modules ['l-string'] = {
version = 1.001,
- comment = "companion to luat-lib.tex",
+ comment = "companion to luat-lib.mkiv",
author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
copyright = "PRAGMA ADE / ConTeXt Development Team",
license = "see context related readme files"
}
-local sub, gsub, find, match, gmatch, format, char, byte, rep = string.sub, string.gsub, string.find, string.match, string.gmatch, string.format, string.char, string.byte, string.rep
+local sub, gsub, find, match, gmatch, format, char, byte, rep, lower = string.sub, string.gsub, string.find, string.match, string.gmatch, string.format, string.char, string.byte, string.rep, string.lower
+local lpegmatch = lpeg.match
+
+-- some functions may disappear as they are not used anywhere
if not string.split then
@@ -94,8 +97,16 @@ function string:unquote()
return (gsub(self,"^([\"\'])(.*)%1$","%2"))
end
+--~ function string:unquote()
+--~ if find(self,"^[\'\"]") then
+--~ return sub(self,2,-2)
+--~ else
+--~ return self
+--~ end
+--~ end
+
function string:quote() -- we could use format("%q")
- return '"' .. self:unquote() .. '"'
+ return format("%q",self)
end
function string:count(pattern) -- variant 3
@@ -115,12 +126,23 @@ function string:limit(n,sentinel)
end
end
-function string:strip()
- return (gsub(self,"^%s*(.-)%s*$", "%1"))
+--~ function string:strip() -- the .- is quite efficient
+--~ -- return match(self,"^%s*(.-)%s*$") or ""
+--~ -- return match(self,'^%s*(.*%S)') or '' -- posted on lua list
+--~ return find(s,'^%s*$') and '' or match(s,'^%s*(.*%S)')
+--~ end
+
+do -- roberto's variant:
+ local space = lpeg.S(" \t\v\n")
+ local nospace = 1 - space
+ local stripper = space^0 * lpeg.C((space^0 * nospace^1)^0)
+ function string.strip(str)
+ return lpegmatch(stripper,str) or ""
+ end
end
function string:is_empty()
- return not find(find,"%S")
+ return not find(self,"%S")
end
function string:enhance(pattern,action)
@@ -154,14 +176,14 @@ if not string.characters then
local function nextchar(str, index)
index = index + 1
- return (index <= #str) and index or nil, str:sub(index,index)
+ return (index <= #str) and index or nil, sub(str,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, byte(str:sub(index,index))
+ return (index <= #str) and index or nil, byte(sub(str,index,index))
end
function string:bytes()
return nextbyte, self, 0
@@ -174,7 +196,7 @@ end
function string:rpadd(n,chr)
local m = n-#self
if m > 0 then
- return self .. self.rep(chr or " ",m)
+ return self .. rep(chr or " ",m)
else
return self
end
@@ -183,7 +205,7 @@ end
function string:lpadd(n,chr)
local m = n-#self
if m > 0 then
- return self.rep(chr or " ",m) .. self
+ return rep(chr or " ",m) .. self
else
return self
end
@@ -231,6 +253,17 @@ function string:pattesc()
return (gsub(self,".",patterns_escapes))
end
+local simple_escapes = {
+ ["-"] = "%-",
+ ["."] = "%.",
+ ["?"] = ".",
+ ["*"] = ".*",
+}
+
+function string:simpleesc()
+ return (gsub(self,".",simple_escapes))
+end
+
function string:tohash()
local t = { }
for s in gmatch(self,"([^, ]+)") do -- lpeg
@@ -242,10 +275,10 @@ end
local pattern = lpeg.Ct(lpeg.C(1)^0)
function string:totable()
- return pattern:match(self)
+ return lpegmatch(pattern,self)
end
---~ for _, str in ipairs {
+--~ local t = {
--~ "1234567123456712345671234567",
--~ "a\tb\tc",
--~ "aa\tbb\tcc",
@@ -253,7 +286,10 @@ end
--~ "aaaa\tbbbb\tcccc",
--~ "aaaaa\tbbbbb\tccccc",
--~ "aaaaaa\tbbbbbb\tcccccc",
---~ } do print(string.tabtospace(str)) end
+--~ }
+--~ for k,v do
+--~ print(string.tabtospace(t[k]))
+--~ end
function string.tabtospace(str,tab)
-- we don't handle embedded newlines
@@ -261,7 +297,7 @@ function string.tabtospace(str,tab)
local s = find(str,"\t")
if s then
if not tab then tab = 7 end -- only when found
- local d = tab-(s-1)%tab
+ local d = tab-(s-1) % tab
if d > 0 then
str = gsub(str,"\t",rep(" ",d),1)
else
@@ -280,6 +316,25 @@ function string:compactlong() -- strips newlines and leading spaces
return self
end
+function string:striplong() -- strips newlines and leading spaces
+ self = gsub(self,"^%s*","")
+ self = gsub(self,"[\n\r]+ *","\n")
+ return self
+end
+
+function string:topattern(lowercase,strict)
+ if lowercase then
+ self = lower(self)
+ end
+ self = gsub(self,".",simple_escapes)
+ if self == "" then
+ self = ".*"
+ elseif strict then
+ self = "^" .. self .. "$"
+ end
+ return self
+end
+
end -- of closure
@@ -287,58 +342,64 @@ do -- create closure to overcome 200 locals limit
if not modules then modules = { } end modules ['l-lpeg'] = {
version = 1.001,
- comment = "companion to luat-lib.tex",
+ comment = "companion to luat-lib.mkiv",
author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
copyright = "PRAGMA ADE / ConTeXt Development Team",
license = "see context related readme files"
}
-local P, S, Ct, C, Cs, Cc = lpeg.P, lpeg.S, lpeg.Ct, lpeg.C, lpeg.Cs, lpeg.Cc
-
---~ 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 = { }
+local lpeg = require("lpeg")
+
+lpeg.patterns = lpeg.patterns or { } -- so that we can share
+local patterns = lpeg.patterns
+
+local P, R, S, Ct, C, Cs, Cc, V = lpeg.P, lpeg.R, lpeg.S, lpeg.Ct, lpeg.C, lpeg.Cs, lpeg.Cc, lpeg.V
+local match = lpeg.match
+
+local digit, sign = R('09'), S('+-')
+local cr, lf, crlf = P("\r"), P("\n"), P("\r\n")
+local utf8byte = R("\128\191")
+
+patterns.utf8byte = utf8byte
+patterns.utf8one = R("\000\127")
+patterns.utf8two = R("\194\223") * utf8byte
+patterns.utf8three = R("\224\239") * utf8byte * utf8byte
+patterns.utf8four = R("\240\244") * utf8byte * utf8byte * utf8byte
+
+patterns.digit = digit
+patterns.sign = sign
+patterns.cardinal = sign^0 * digit^1
+patterns.integer = sign^0 * digit^1
+patterns.float = sign^0 * digit^0 * P('.') * digit^1
+patterns.number = patterns.float + patterns.integer
+patterns.oct = P("0") * R("07")^1
+patterns.octal = patterns.oct
+patterns.HEX = P("0x") * R("09","AF")^1
+patterns.hex = P("0x") * R("09","af")^1
+patterns.hexadecimal = P("0x") * R("09","AF","af")^1
+patterns.lowercase = R("az")
+patterns.uppercase = R("AZ")
+patterns.letter = patterns.lowercase + patterns.uppercase
+patterns.space = S(" ")
+patterns.eol = S("\n\r")
+patterns.spacer = S(" \t\f\v") -- + string.char(0xc2, 0xa0) if we want utf (cf mail roberto)
+patterns.newline = crlf + cr + lf
+patterns.nonspace = 1 - patterns.space
+patterns.nonspacer = 1 - patterns.spacer
+patterns.whitespace = patterns.eol + patterns.spacer
+patterns.nonwhitespace = 1 - patterns.whitespace
+patterns.utf8 = patterns.utf8one + patterns.utf8two + patterns.utf8three + patterns.utf8four
+patterns.utfbom = P('\000\000\254\255') + P('\255\254\000\000') + P('\255\254') + P('\254\255') + P('\239\187\191')
function lpeg.anywhere(pattern) --slightly adapted from website
- return P { P(pattern) + 1 * lpeg.V(1) }
-end
-
-function lpeg.startswith(pattern) --slightly adapted
- return P(pattern)
+ return P { P(pattern) + 1 * V(1) } -- why so complex?
end
function lpeg.splitter(pattern, action)
return (((1-P(pattern))^1)/action+1)^0
end
--- variant:
-
---~ local parser = lpeg.Ct(lpeg.splitat(newline))
-
-local crlf = P("\r\n")
-local cr = P("\r")
-local lf = P("\n")
-local space = S(" \t\f\v") -- + string.char(0xc2, 0xa0) if we want utf (cf mail roberto)
-local newline = crlf + cr + lf
-local spacing = space^0 * newline
-
+local spacing = patterns.spacer^0 * patterns.newline -- sort of strip
local empty = spacing * Cc("")
local nonempty = Cs((1-spacing)^1) * spacing^-1
local content = (empty + nonempty)^1
@@ -346,15 +407,15 @@ local content = (empty + nonempty)^1
local capture = Ct(content^0)
function string:splitlines()
- return capture:match(self)
+ return match(capture,self)
end
-lpeg.linebyline = content -- better make a sublibrary
+patterns.textline = content
---~ local p = lpeg.splitat("->",false) print(p:match("oeps->what->more")) -- oeps what more
---~ local p = lpeg.splitat("->",true) print(p:match("oeps->what->more")) -- oeps what->more
---~ local p = lpeg.splitat("->",false) print(p:match("oeps")) -- oeps
---~ local p = lpeg.splitat("->",true) print(p:match("oeps")) -- oeps
+--~ local p = lpeg.splitat("->",false) print(match(p,"oeps->what->more")) -- oeps what more
+--~ local p = lpeg.splitat("->",true) print(match(p,"oeps->what->more")) -- oeps what->more
+--~ local p = lpeg.splitat("->",false) print(match(p,"oeps")) -- oeps
+--~ local p = lpeg.splitat("->",true) print(match(p,"oeps")) -- oeps
local splitters_s, splitters_m = { }, { }
@@ -364,7 +425,7 @@ local function splitat(separator,single)
separator = P(separator)
if single then
local other, any = C((1 - separator)^0), P(1)
- splitter = other * (separator * C(any^0) + "")
+ splitter = other * (separator * C(any^0) + "") -- ?
splitters_s[separator] = splitter
else
local other = C((1 - separator)^0)
@@ -379,15 +440,72 @@ lpeg.splitat = splitat
local cache = { }
+function lpeg.split(separator,str)
+ local c = cache[separator]
+ if not c then
+ c = Ct(splitat(separator))
+ cache[separator] = c
+ end
+ return match(c,str)
+end
+
function string:split(separator)
local c = cache[separator]
if not c then
c = Ct(splitat(separator))
cache[separator] = c
end
- return c:match(self)
+ return match(c,self)
+end
+
+lpeg.splitters = cache
+
+local cache = { }
+
+function lpeg.checkedsplit(separator,str)
+ local c = cache[separator]
+ if not c then
+ separator = P(separator)
+ local other = C((1 - separator)^0)
+ c = Ct(separator^0 * other * (separator^1 * other)^0)
+ cache[separator] = c
+ end
+ return match(c,str)
+end
+
+function string:checkedsplit(separator)
+ local c = cache[separator]
+ if not c then
+ separator = P(separator)
+ local other = C((1 - separator)^0)
+ c = Ct(separator^0 * other * (separator^1 * other)^0)
+ cache[separator] = c
+ end
+ return match(c,self)
end
+--~ function lpeg.append(list,pp)
+--~ local p = pp
+--~ for l=1,#list do
+--~ if p then
+--~ p = p + P(list[l])
+--~ else
+--~ p = P(list[l])
+--~ end
+--~ end
+--~ return p
+--~ end
+
+--~ from roberto's site:
+
+local f1 = string.byte
+
+local function f2(s) local c1, c2 = f1(s,1,2) return c1 * 64 + c2 - 12416 end
+local function f3(s) local c1, c2, c3 = f1(s,1,3) return (c1 * 64 + c2) * 64 + c3 - 925824 end
+local function f4(s) local c1, c2, c3, c4 = f1(s,1,4) return ((c1 * 64 + c2) * 64 + c3) * 64 + c4 - 63447168 end
+
+patterns.utf8byte = patterns.utf8one/f1 + patterns.utf8two/f2 + patterns.utf8three/f3 + patterns.utf8four/f4
+
end -- of closure
@@ -395,7 +513,7 @@ do -- create closure to overcome 200 locals limit
if not modules then modules = { } end modules ['l-table'] = {
version = 1.001,
- comment = "companion to luat-lib.tex",
+ comment = "companion to luat-lib.mkiv",
author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
copyright = "PRAGMA ADE / ConTeXt Development Team",
license = "see context related readme files"
@@ -404,9 +522,58 @@ if not modules then modules = { } end modules ['l-table'] = {
table.join = table.concat
local concat, sort, insert, remove = table.concat, table.sort, table.insert, table.remove
-local format, find, gsub, lower, dump = string.format, string.find, string.gsub, string.lower, string.dump
+local format, find, gsub, lower, dump, match = string.format, string.find, string.gsub, string.lower, string.dump, string.match
local getmetatable, setmetatable = getmetatable, setmetatable
-local type, next, tostring, ipairs = type, next, tostring, ipairs
+local type, next, tostring, tonumber, ipairs = type, next, tostring, tonumber, ipairs
+
+-- Starting with version 5.2 Lua no longer provide ipairs, which makes
+-- sense. As we already used the for loop and # in most places the
+-- impact on ConTeXt was not that large; the remaining ipairs already
+-- have been replaced. In a similar fashio we also hardly used pairs.
+--
+-- Just in case, we provide the fallbacks as discussed in Programming
+-- in Lua (http://www.lua.org/pil/7.3.html):
+
+if not ipairs then
+
+ -- for k, v in ipairs(t) do ... end
+ -- for k=1,#t do local v = t[k] ... end
+
+ local function iterate(a,i)
+ i = i + 1
+ local v = a[i]
+ if v ~= nil then
+ return i, v --, nil
+ end
+ end
+
+ function ipairs(a)
+ return iterate, a, 0
+ end
+
+end
+
+if not pairs then
+
+ -- for k, v in pairs(t) do ... end
+ -- for k, v in next, t do ... end
+
+ function pairs(t)
+ return next, t -- , nil
+ end
+
+end
+
+-- Also, unpack has been moved to the table table, and for compatiility
+-- reasons we provide both now.
+
+if not table.unpack then
+ table.unpack = _G.unpack
+elseif not unpack then
+ _G.unpack = table.unpack
+end
+
+-- extra functions, some might go (when not used)
function table.strip(tab)
local lst = { }
@@ -421,6 +588,14 @@ function table.strip(tab)
return lst
end
+function table.keys(t)
+ local k = { }
+ for key, _ in next, t do
+ k[#k+1] = key
+ end
+ return k
+end
+
local function compare(a,b)
return (tostring(a) < tostring(b))
end
@@ -464,7 +639,7 @@ end
table.sortedkeys = sortedkeys
table.sortedhashkeys = sortedhashkeys
-function table.sortedpairs(t)
+function table.sortedhash(t)
local s = sortedhashkeys(t) -- maybe just sortedkeys
local n = 0
local function kv(s)
@@ -475,6 +650,8 @@ function table.sortedpairs(t)
return kv, s
end
+table.sortedpairs = table.sortedhash
+
function table.append(t, list)
for _,v in next, list do
insert(t,v)
@@ -583,7 +760,7 @@ end
table.fastcopy = fastcopy
table.copy = copy
--- rougly: copy-loop : unpack : sub == 0.9 : 0.4 : 0.45 (so in critical apps, use unpack)
+-- roughly: 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) }
@@ -597,18 +774,18 @@ end
-- slower than #t on indexed tables (#t only returns the size of the numerically indexed slice)
-function table.is_empty(t)
+function table.is_empty(t) -- obolete, use inline code instead
return not t or not next(t)
end
-function table.one_entry(t)
+function table.one_entry(t) -- obolete, use inline code instead
local n = next(t)
return n and not next(t,n)
end
-function table.starts_at(t)
- return ipairs(t,1)(t,0)
-end
+--~ function table.starts_at(t) -- obsolete, not nice anyway
+--~ return ipairs(t,1)(t,0)
+--~ end
function table.tohash(t,value)
local h = { }
@@ -686,6 +863,8 @@ end
--
-- local propername = lpeg.P(lpeg.R("AZ","az","__") * lpeg.R("09","AZ","az", "__")^0 * lpeg.P(-1) )
+-- problem: there no good number_to_string converter with the best resolution
+
local function do_serialize(root,name,depth,level,indexed)
if level > 0 then
depth = depth .. " "
@@ -708,8 +887,9 @@ local function do_serialize(root,name,depth,level,indexed)
handle(format("%s{",depth))
end
end
+ -- we could check for k (index) being number (cardinal)
if root and next(root) then
- local first, last = nil, 0 -- #root cannot be trusted here
+ local first, last = nil, 0 -- #root cannot be trusted here (will be ok in 5.2 when ipairs is gone)
if compact then
-- NOT: for k=1,#root do (we need to quit at nil)
for k,v in ipairs(root) do -- can we use next?
@@ -730,10 +910,10 @@ local function do_serialize(root,name,depth,level,indexed)
if hexify then
handle(format("%s 0x%04X,",depth,v))
else
- handle(format("%s %s,",depth,v))
+ handle(format("%s %s,",depth,v)) -- %.99g
end
elseif t == "string" then
- if reduce and (find(v,"^[%-%+]?[%d]-%.?[%d+]$") == 1) then
+ if reduce and tonumber(v) then
handle(format("%s %s,",depth,v))
else
handle(format("%s %q,",depth,v))
@@ -770,29 +950,29 @@ local function do_serialize(root,name,depth,level,indexed)
--~ if hexify then
--~ handle(format("%s %s=0x%04X,",depth,key(k),v))
--~ else
- --~ handle(format("%s %s=%s,",depth,key(k),v))
+ --~ handle(format("%s %s=%s,",depth,key(k),v)) -- %.99g
--~ end
if type(k) == "number" then -- or find(k,"^%d+$") then
if hexify then
handle(format("%s [0x%04X]=0x%04X,",depth,k,v))
else
- handle(format("%s [%s]=%s,",depth,k,v))
+ handle(format("%s [%s]=%s,",depth,k,v)) -- %.99g
end
elseif noquotes and not reserved[k] and find(k,"^%a[%w%_]*$") then
if hexify then
handle(format("%s %s=0x%04X,",depth,k,v))
else
- handle(format("%s %s=%s,",depth,k,v))
+ handle(format("%s %s=%s,",depth,k,v)) -- %.99g
end
else
if hexify then
handle(format("%s [%q]=0x%04X,",depth,k,v))
else
- handle(format("%s [%q]=%s,",depth,k,v))
+ handle(format("%s [%q]=%s,",depth,k,v)) -- %.99g
end
end
elseif t == "string" then
- if reduce and (find(v,"^[%-%+]?[%d]-%.?[%d+]$") == 1) then
+ if reduce and tonumber(v) then
--~ handle(format("%s %s=%s,",depth,key(k),v))
if type(k) == "number" then -- or find(k,"^%d+$") then
if hexify then
@@ -1001,7 +1181,7 @@ function table.tofile(filename,root,name,reduce,noquotes,hexify)
end
end
-local function flatten(t,f,complete)
+local function flatten(t,f,complete) -- is this used? meybe a variant with next, ...
for i=1,#t do
local v = t[i]
if type(v) == "table" then
@@ -1030,6 +1210,24 @@ end
table.flatten_one_level = table.unnest
+-- a better one:
+
+local function flattened(t,f)
+ if not f then
+ f = { }
+ end
+ for k, v in next, t do
+ if type(v) == "table" then
+ flattened(v,f)
+ else
+ f[k] = v
+ end
+ end
+ return f
+end
+
+table.flattened = flattened
+
-- the next three may disappear
function table.remove_value(t,value) -- todo: n
@@ -1165,7 +1363,7 @@ function table.clone(t,p) -- t is optional or nil or table
elseif not t then
t = { }
end
- setmetatable(t, { __index = function(_,key) return p[key] end })
+ setmetatable(t, { __index = function(_,key) return p[key] end }) -- why not __index = p ?
return t
end
@@ -1193,21 +1391,36 @@ function table.reverse(t)
return tt
end
---~ function table.keys(t)
---~ local k = { }
---~ for k,_ in next, t do
---~ k[#k+1] = k
---~ end
---~ return k
---~ end
+function table.insert_before_value(t,value,extra)
+ for i=1,#t do
+ if t[i] == extra then
+ remove(t,i)
+ end
+ end
+ for i=1,#t do
+ if t[i] == value then
+ insert(t,i,extra)
+ return
+ end
+ end
+ insert(t,1,extra)
+end
+
+function table.insert_after_value(t,value,extra)
+ for i=1,#t do
+ if t[i] == extra then
+ remove(t,i)
+ end
+ end
+ for i=1,#t do
+ if t[i] == value then
+ insert(t,i+1,extra)
+ return
+ end
+ end
+ insert(t,#t+1,extra)
+end
---~ function table.keys_as_string(t)
---~ local k = { }
---~ for k,_ in next, t do
---~ k[#k+1] = k
---~ end
---~ return concat(k,"")
---~ end
end -- of closure
@@ -1216,13 +1429,13 @@ do -- create closure to overcome 200 locals limit
if not modules then modules = { } end modules ['l-io'] = {
version = 1.001,
- comment = "companion to luat-lib.tex",
+ comment = "companion to luat-lib.mkiv",
author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
copyright = "PRAGMA ADE / ConTeXt Development Team",
license = "see context related readme files"
}
-local byte = string.byte
+local byte, find, gsub = string.byte, string.find, string.gsub
if string.find(os.getenv("PATH"),";") then
io.fileseparator, io.pathseparator = "\\", ";"
@@ -1251,7 +1464,7 @@ function io.savedata(filename,data,joiner)
elseif type(data) == "function" then
data(f)
else
- f:write(data)
+ f:write(data or "")
end
f:close()
return true
@@ -1380,20 +1593,21 @@ function io.ask(question,default,options)
end
io.write(string.format(" "))
local answer = io.read()
- answer = answer:gsub("^%s*(.*)%s*$","%1")
+ answer = gsub(answer,"^%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
+ for k=1,#options do
+ if options[k] == answer then
return answer
end
end
local pattern = "^" .. answer
- for _,v in pairs(options) do
- if v:find(pattern) then
+ for k=1,#options do
+ local v = options[k]
+ if find(v,pattern) then
return v
end
end
@@ -1408,20 +1622,22 @@ do -- create closure to overcome 200 locals limit
if not modules then modules = { } end modules ['l-number'] = {
version = 1.001,
- comment = "companion to luat-lib.tex",
+ comment = "companion to luat-lib.mkiv",
author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
copyright = "PRAGMA ADE / ConTeXt Development Team",
license = "see context related readme files"
}
-local format = string.format
+local tostring = tostring
+local format, floor, insert, match = string.format, math.floor, table.insert, string.match
+local lpegmatch = lpeg.match
number = number or { }
-- a,b,c,d,e,f = number.toset(100101)
function number.toset(n)
- return (tostring(n)):match("(.?)(.?)(.?)(.?)(.?)(.?)(.?)(.?)")
+ return match(tostring(n),"(.?)(.?)(.?)(.?)(.?)(.?)(.?)(.?)")
end
function number.toevenhex(n)
@@ -1447,10 +1663,21 @@ end
local one = lpeg.C(1-lpeg.S(''))^1
function number.toset(n)
- return one:match(tostring(n))
+ return lpegmatch(one,tostring(n))
end
-
+function number.bits(n,zero)
+ local t, i = { }, (zero and 0) or 1
+ while n > 0 do
+ local m = n % 2
+ if m > 0 then
+ insert(t,1,i)
+ end
+ n = floor(n/2)
+ i = i + 1
+ end
+ return t
+end
end -- of closure
@@ -1459,7 +1686,7 @@ do -- create closure to overcome 200 locals limit
if not modules then modules = { } end modules ['l-set'] = {
version = 1.001,
- comment = "companion to luat-lib.tex",
+ comment = "companion to luat-lib.mkiv",
author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
copyright = "PRAGMA ADE / ConTeXt Development Team",
license = "see context related readme files"
@@ -1549,46 +1776,63 @@ do -- create closure to overcome 200 locals limit
if not modules then modules = { } end modules ['l-os'] = {
version = 1.001,
- comment = "companion to luat-lub.tex",
+ comment = "companion to luat-lib.mkiv",
author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
copyright = "PRAGMA ADE / ConTeXt Development Team",
license = "see context related readme files"
}
-local find = string.find
+-- maybe build io.flush in os.execute
+
+local find, format, gsub = string.find, string.format, string.gsub
+local random, ceil = math.random, math.ceil
+
+local execute, spawn, exec, ioflush = os.execute, os.spawn or os.execute, os.exec or os.execute, io.flush
+
+function os.execute(...) ioflush() return execute(...) end
+function os.spawn (...) ioflush() return spawn (...) end
+function os.exec (...) ioflush() return exec (...) end
function os.resultof(command)
- return io.popen(command,"r"):read("*all")
+ ioflush() -- else messed up logging
+ local handle = io.popen(command,"r")
+ if not handle then
+ -- print("unknown command '".. command .. "' in os.resultof")
+ return ""
+ else
+ return handle:read("*all") or ""
+ end
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)
+--~ os.type : windows | unix (new, we already guessed os.platform)
+--~ os.name : windows | msdos | linux | macosx | solaris | .. | generic (new)
+--~ os.platform : extended os.name with architecture
if not io.fileseparator then
if find(os.getenv("PATH"),";") then
- io.fileseparator, io.pathseparator, os.platform = "\\", ";", os.type or "windows"
+ io.fileseparator, io.pathseparator, os.type = "\\", ";", os.type or "mswin"
else
- io.fileseparator, io.pathseparator, os.platform = "/" , ":", os.type or "unix"
+ io.fileseparator, io.pathseparator, os.type = "/" , ":", os.type or "unix"
end
end
-os.platform = os.platform or os.type or (io.pathseparator == ";" and "windows") or "unix"
+os.type = os.type or (io.pathseparator == ";" and "windows") or "unix"
+os.name = os.name or (os.type == "windows" and "mswin" ) or "linux"
+
+if os.type == "windows" then
+ os.libsuffix, os.binsuffix = 'dll', 'exe'
+else
+ os.libsuffix, os.binsuffix = 'so', ''
+end
function os.launch(str)
- if os.platform == "windows" then
+ if os.type == "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
@@ -1618,64 +1862,218 @@ end
--~ print(os.date("%H:%M:%S",os.gettimeofday()))
--~ print(os.date("%H:%M:%S",os.time()))
-os.arch = os.arch or function()
- local a = os.resultof("uname -m") or "linux"
- os.arch = function()
- return a
+-- no need for function anymore as we have more clever code and helpers now
+-- this metatable trickery might as well disappear
+
+os.resolvers = os.resolvers or { }
+
+local resolvers = os.resolvers
+
+local osmt = getmetatable(os) or { __index = function(t,k) t[k] = "unset" return "unset" end } -- maybe nil
+local osix = osmt.__index
+
+osmt.__index = function(t,k)
+ return (resolvers[k] or osix)(t,k)
+end
+
+setmetatable(os,osmt)
+
+if not os.setenv then
+
+ -- we still store them but they won't be seen in
+ -- child processes although we might pass them some day
+ -- using command concatination
+
+ local env, getenv = { }, os.getenv
+
+ function os.setenv(k,v)
+ env[k] = v
+ end
+
+ function os.getenv(k)
+ return env[k] or getenv(k)
end
- return a
+
end
-local platform
+-- we can use HOSTTYPE on some platforms
-function os.currentplatform(name,default)
- if not platform then
- local name = os.name or os.platform or name -- os.name is built in, os.platform is mine
- if not name then
- platform = default or "linux"
- elseif name == "windows" or name == "mswin" or name == "win32" or name == "msdos" then
- if os.getenv("PROCESSOR_ARCHITECTURE") == "AMD64" then
- platform = "mswin-64"
- else
- platform = "mswin"
- end
+local name, platform = os.name or "linux", os.getenv("MTX_PLATFORM") or ""
+
+local function guess()
+ local architecture = os.resultof("uname -m") or ""
+ if architecture ~= "" then
+ return architecture
+ end
+ architecture = os.getenv("HOSTTYPE") or ""
+ if architecture ~= "" then
+ return architecture
+ end
+ return os.resultof("echo $HOSTTYPE") or ""
+end
+
+if platform ~= "" then
+
+ os.platform = platform
+
+elseif os.type == "windows" then
+
+ -- we could set the variable directly, no function needed here
+
+ function os.resolvers.platform(t,k)
+ local platform, architecture = "", os.getenv("PROCESSOR_ARCHITECTURE") or ""
+ if find(architecture,"AMD64") then
+ platform = "mswin-64"
else
- local architecture = os.arch()
- if name == "linux" then
- if find(architecture,"x86_64") then
- platform = "linux-64"
- elseif find(architecture,"ppc") then
- platform = "linux-ppc"
- else
- platform = "linux"
- end
- elseif name == "macosx" then
- if find(architecture,"i386") then
- platform = "osx-intel"
- else
- platform = "osx-ppc"
- end
- elseif name == "sunos" then
- if find(architecture,"sparc") then
- platform = "solaris-sparc"
- else -- if architecture == 'i86pc'
- platform = "solaris-intel"
- end
- elseif name == "freebsd" then
- if find(architecture,"amd64") then
- platform = "freebsd-amd64"
- else
- platform = "freebsd"
- end
- else
- platform = default or name
- end
+ platform = "mswin"
end
- function os.currentplatform()
- return platform
+ os.setenv("MTX_PLATFORM",platform)
+ os.platform = platform
+ return platform
+ end
+
+elseif name == "linux" then
+
+ function os.resolvers.platform(t,k)
+ -- we sometims have HOSTTYPE set so let's check that first
+ local platform, architecture = "", os.getenv("HOSTTYPE") or os.resultof("uname -m") or ""
+ if find(architecture,"x86_64") then
+ platform = "linux-64"
+ elseif find(architecture,"ppc") then
+ platform = "linux-ppc"
+ else
+ platform = "linux"
+ end
+ os.setenv("MTX_PLATFORM",platform)
+ os.platform = platform
+ return platform
+ end
+
+elseif name == "macosx" then
+
+ --[[
+ Identifying the architecture of OSX is quite a mess and this
+ is the best we can come up with. For some reason $HOSTTYPE is
+ a kind of pseudo environment variable, not known to the current
+ environment. And yes, uname cannot be trusted either, so there
+ is a change that you end up with a 32 bit run on a 64 bit system.
+ Also, some proper 64 bit intel macs are too cheap (low-end) and
+ therefore not permitted to run the 64 bit kernel.
+ ]]--
+
+ function os.resolvers.platform(t,k)
+ -- local platform, architecture = "", os.getenv("HOSTTYPE") or ""
+ -- if architecture == "" then
+ -- architecture = os.resultof("echo $HOSTTYPE") or ""
+ -- end
+ local platform, architecture = "", os.resultof("echo $HOSTTYPE") or ""
+ if architecture == "" then
+ -- print("\nI have no clue what kind of OSX you're running so let's assume an 32 bit intel.\n")
+ platform = "osx-intel"
+ elseif find(architecture,"i386") then
+ platform = "osx-intel"
+ elseif find(architecture,"x86_64") then
+ platform = "osx-64"
+ else
+ platform = "osx-ppc"
end
+ os.setenv("MTX_PLATFORM",platform)
+ os.platform = platform
+ return platform
+ end
+
+elseif name == "sunos" then
+
+ function os.resolvers.platform(t,k)
+ local platform, architecture = "", os.resultof("uname -m") or ""
+ if find(architecture,"sparc") then
+ platform = "solaris-sparc"
+ else -- if architecture == 'i86pc'
+ platform = "solaris-intel"
+ end
+ os.setenv("MTX_PLATFORM",platform)
+ os.platform = platform
+ return platform
+ end
+
+elseif name == "freebsd" then
+
+ function os.resolvers.platform(t,k)
+ local platform, architecture = "", os.resultof("uname -m") or ""
+ if find(architecture,"amd64") then
+ platform = "freebsd-amd64"
+ else
+ platform = "freebsd"
+ end
+ os.setenv("MTX_PLATFORM",platform)
+ os.platform = platform
+ return platform
+ end
+
+elseif name == "kfreebsd" then
+
+ function os.resolvers.platform(t,k)
+ -- we sometims have HOSTTYPE set so let's check that first
+ local platform, architecture = "", os.getenv("HOSTTYPE") or os.resultof("uname -m") or ""
+ if find(architecture,"x86_64") then
+ platform = "kfreebsd-64"
+ else
+ platform = "kfreebsd-i386"
+ end
+ os.setenv("MTX_PLATFORM",platform)
+ os.platform = platform
+ return platform
+ end
+
+else
+
+ -- platform = "linux"
+ -- os.setenv("MTX_PLATFORM",platform)
+ -- os.platform = platform
+
+ function os.resolvers.platform(t,k)
+ local platform = "linux"
+ os.setenv("MTX_PLATFORM",platform)
+ os.platform = platform
+ return platform
+ end
+
+end
+
+-- beware, we set the randomseed
+
+-- from wikipedia: Version 4 UUIDs use a scheme relying only on random numbers. This algorithm sets the
+-- version number as well as two reserved bits. All other bits are set using a random or pseudorandom
+-- data source. Version 4 UUIDs have the form xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx with hexadecimal
+-- digits x and hexadecimal digits 8, 9, A, or B for y. e.g. f47ac10b-58cc-4372-a567-0e02b2c3d479.
+--
+-- as we don't call this function too often there is not so much risk on repetition
+
+local t = { 8, 9, "a", "b" }
+
+function os.uuid()
+ return format("%04x%04x-4%03x-%s%03x-%04x-%04x%04x%04x",
+ random(0xFFFF),random(0xFFFF),
+ random(0x0FFF),
+ t[ceil(random(4))] or 8,random(0x0FFF),
+ random(0xFFFF),
+ random(0xFFFF),random(0xFFFF),random(0xFFFF)
+ )
+end
+
+local d
+
+function os.timezone(delta)
+ d = d or tonumber(tonumber(os.date("%H")-os.date("!%H")))
+ if delta then
+ if d > 0 then
+ return format("+%02i:00",d)
+ else
+ return format("-%02i:00",-d)
+ end
+ else
+ return 1
end
- return platform
end
@@ -1685,7 +2083,7 @@ do -- create closure to overcome 200 locals limit
if not modules then modules = { } end modules ['l-file'] = {
version = 1.001,
- comment = "companion to luat-lib.tex",
+ comment = "companion to luat-lib.mkiv",
author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
copyright = "PRAGMA ADE / ConTeXt Development Team",
license = "see context related readme files"
@@ -1696,14 +2094,17 @@ if not modules then modules = { } end modules ['l-file'] = {
file = file or { }
local concat = table.concat
-local find, gmatch, match, gsub = string.find, string.gmatch, string.match, string.gsub
+local find, gmatch, match, gsub, sub, char = string.find, string.gmatch, string.match, string.gsub, string.sub, string.char
+local lpegmatch = lpeg.match
function file.removesuffix(filename)
return (gsub(filename,"%.[%a%d]+$",""))
end
function file.addsuffix(filename, suffix)
- if not find(filename,"%.[%a%d]+$") then
+ if not suffix or suffix == "" then
+ return filename
+ elseif not find(filename,"%.[%a%d]+$") then
return filename .. "." .. suffix
else
return filename
@@ -1726,20 +2127,39 @@ function file.nameonly(name)
return (gsub(match(name,"^.+[/\\](.-)$") or name,"%..*$",""))
end
-function file.extname(name)
- return match(name,"^.+%.([^/\\]-)$") or ""
+function file.extname(name,default)
+ return match(name,"^.+%.([^/\\]-)$") or default or ""
end
file.suffix = file.extname
---~ 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 = concat({...},"/")
+--~ pth = gsub(pth,"\\","/")
+--~ local a, b = match(pth,"^(.*://)(.*)$")
+--~ if a and b then
+--~ return a .. gsub(b,"//+","/")
+--~ end
+--~ a, b = match(pth,"^(//)(.*)$")
+--~ if a and b then
+--~ return a .. gsub(b,"//+","/")
+--~ end
+--~ return (gsub(pth,"//+","/"))
+--~ end
+
+local trick_1 = char(1)
+local trick_2 = "^" .. trick_1 .. "/+"
function file.join(...)
- local pth = concat({...},"/")
+ local lst = { ... }
+ local a, b = lst[1], lst[2]
+ if a == "" then
+ lst[1] = trick_1
+ elseif b and find(a,"^/+$") and find(b,"^/") then
+ lst[1] = ""
+ lst[2] = gsub(b,"^/+","")
+ end
+ local pth = concat(lst,"/")
pth = gsub(pth,"\\","/")
local a, b = match(pth,"^(.*://)(.*)$")
if a and b then
@@ -1749,17 +2169,28 @@ function file.join(...)
if a and b then
return a .. gsub(b,"//+","/")
end
+ pth = gsub(pth,trick_2,"")
return (gsub(pth,"//+","/"))
end
+--~ print(file.join("//","/y"))
+--~ print(file.join("/","/y"))
+--~ print(file.join("","/y"))
+--~ print(file.join("/x/","/y"))
+--~ 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.iswritable(name)
local a = lfs.attributes(name) or lfs.attributes(file.dirname(name,"."))
- return a and a.permissions:sub(2,2) == "w"
+ return a and sub(a.permissions,2,2) == "w"
end
function file.isreadable(name)
local a = lfs.attributes(name)
- return a and a.permissions:sub(1,1) == "r"
+ return a and sub(a.permissions,1,1) == "r"
end
file.is_readable = file.isreadable
@@ -1767,36 +2198,50 @@ file.is_writable = file.iswritable
-- todo: lpeg
-function file.split_path(str)
- local t = { }
- str = gsub(str,"\\", "/")
- str = gsub(str,"(%a):([;/])", "%1\001%2")
- for name in gmatch(str,"([^;:]+)") do
- if name ~= "" then
- t[#t+1] = gsub(name,"\001",":")
- end
- end
- return t
+--~ function file.split_path(str)
+--~ local t = { }
+--~ str = gsub(str,"\\", "/")
+--~ str = gsub(str,"(%a):([;/])", "%1\001%2")
+--~ for name in gmatch(str,"([^;:]+)") do
+--~ if name ~= "" then
+--~ t[#t+1] = gsub(name,"\001",":")
+--~ end
+--~ end
+--~ return t
+--~ end
+
+local checkedsplit = string.checkedsplit
+
+function file.split_path(str,separator)
+ str = gsub(str,"\\","/")
+ return checkedsplit(str,separator or io.pathseparator)
end
function file.join_path(tab)
return concat(tab,io.pathseparator) -- can have trailing //
end
+-- we can hash them weakly
+
function file.collapse_path(str)
- str = gsub(str,"/%./","/")
- local n, m = 1, 1
- while n > 0 or m > 0 do
- str, n = gsub(str,"[^/%.]+/%.%.$","")
- str, m = gsub(str,"[^/%.]+/%.%./","")
- end
- str = gsub(str,"([^/])/$","%1")
- str = gsub(str,"^%./","")
- str = gsub(str,"/%.$","")
+ str = gsub(str,"\\","/")
+ if find(str,"/") then
+ str = gsub(str,"^%./",(gsub(lfs.currentdir(),"\\","/")) .. "/") -- ./xx in qualified
+ str = gsub(str,"/%./","/")
+ local n, m = 1, 1
+ while n > 0 or m > 0 do
+ str, n = gsub(str,"[^/%.]+/%.%.$","")
+ str, m = gsub(str,"[^/%.]+/%.%./","")
+ end
+ str = gsub(str,"([^/])/$","%1")
+ -- str = gsub(str,"^%./","") -- ./xx in qualified
+ str = gsub(str,"/%.$","")
+ end
if str == "" then str = "." end
return str
end
+--~ print(file.collapse_path("/a"))
--~ print(file.collapse_path("a/./b/.."))
--~ print(file.collapse_path("a/aa/../b/bb"))
--~ print(file.collapse_path("a/../.."))
@@ -1826,27 +2271,27 @@ end
--~ local pattern = (noslashes^0 * slashes)^0 * (noperiod^1 * period)^1 * lpeg.C(noperiod^1) * -1
--~ function file.extname(name)
---~ return pattern:match(name) or ""
+--~ return lpegmatch(pattern,name) or ""
--~ end
--~ local pattern = lpeg.Cs(((period * noperiod^1 * -1)/"" + 1)^1)
--~ function file.removesuffix(name)
---~ return pattern:match(name)
+--~ return lpegmatch(pattern,name)
--~ end
--~ local pattern = (noslashes^0 * slashes)^1 * lpeg.C(noslashes^1) * -1
--~ function file.basename(name)
---~ return pattern:match(name) or name
+--~ return lpegmatch(pattern,name) or name
--~ end
--~ local pattern = (noslashes^0 * slashes)^1 * lpeg.Cp() * noslashes^1 * -1
--~ function file.dirname(name)
---~ local p = pattern:match(name)
+--~ local p = lpegmatch(pattern,name)
--~ if p then
---~ return name:sub(1,p-2)
+--~ return sub(name,1,p-2)
--~ else
--~ return ""
--~ end
@@ -1855,7 +2300,7 @@ end
--~ local pattern = (noslashes^0 * slashes)^0 * (noperiod^1 * period)^1 * lpeg.Cp() * noperiod^1 * -1
--~ function file.addsuffix(name, suffix)
---~ local p = pattern:match(name)
+--~ local p = lpegmatch(pattern,name)
--~ if p then
--~ return name
--~ else
@@ -1866,9 +2311,9 @@ end
--~ local pattern = (noslashes^0 * slashes)^0 * (noperiod^1 * period)^1 * lpeg.Cp() * noperiod^1 * -1
--~ function file.replacesuffix(name,suffix)
---~ local p = pattern:match(name)
+--~ local p = lpegmatch(pattern,name)
--~ if p then
---~ return name:sub(1,p-2) .. "." .. suffix
+--~ return sub(name,1,p-2) .. "." .. suffix
--~ else
--~ return name .. "." .. suffix
--~ end
@@ -1877,11 +2322,11 @@ end
--~ local pattern = (noslashes^0 * slashes)^0 * lpeg.Cp() * ((noperiod^1 * period)^1 * lpeg.Cp() + lpeg.P(true)) * noperiod^1 * -1
--~ function file.nameonly(name)
---~ local a, b = pattern:match(name)
+--~ local a, b = lpegmatch(pattern,name)
--~ if b then
---~ return name:sub(a,b-2)
+--~ return sub(name,a,b-2)
--~ elseif a then
---~ return name:sub(a)
+--~ return sub(name,a)
--~ else
--~ return name
--~ end
@@ -1915,11 +2360,11 @@ local rootbased = lpeg.P("/") + letter*lpeg.P(":")
-- ./name ../name /name c: :// name/name
function file.is_qualified_path(filename)
- return qualified:match(filename)
+ return lpegmatch(qualified,filename) ~= nil
end
function file.is_rootbased_path(filename)
- return rootbased:match(filename)
+ return lpegmatch(rootbased,filename) ~= nil
end
local slash = lpeg.S("\\/")
@@ -1932,16 +2377,25 @@ local base = lpeg.C((1-suffix)^0)
local pattern = (drive + lpeg.Cc("")) * (path + lpeg.Cc("")) * (base + lpeg.Cc("")) * (suffix + lpeg.Cc(""))
function file.splitname(str) -- returns drive, path, base, suffix
- return pattern:match(str)
+ return lpegmatch(pattern,str)
end
--- function test(t) for k, v in pairs(t) do print(v, "=>", file.splitname(v)) end end
+-- function test(t) for k, v in next, t do print(v, "=>", file.splitname(v)) end end
--
-- test { "c:", "c:/aa", "c:/aa/bb", "c:/aa/bb/cc", "c:/aa/bb/cc.dd", "c:/aa/bb/cc.dd.ee" }
-- test { "c:", "c:aa", "c:aa/bb", "c:aa/bb/cc", "c:aa/bb/cc.dd", "c:aa/bb/cc.dd.ee" }
-- test { "/aa", "/aa/bb", "/aa/bb/cc", "/aa/bb/cc.dd", "/aa/bb/cc.dd.ee" }
-- test { "aa", "aa/bb", "aa/bb/cc", "aa/bb/cc.dd", "aa/bb/cc.dd.ee" }
+--~ -- todo:
+--~
+--~ if os.type == "windows" then
+--~ local currentdir = lfs.currentdir
+--~ function lfs.currentdir()
+--~ return (gsub(currentdir(),"\\","/"))
+--~ end
+--~ end
+
end -- of closure
@@ -2006,7 +2460,7 @@ end
function file.loadchecksum(name)
if md5 then
local data = io.loaddata(name .. ".md5")
- return data and data:gsub("%s","")
+ return data and (gsub(data,"%s",""))
end
return nil
end
@@ -2025,19 +2479,168 @@ end -- of closure
do -- create closure to overcome 200 locals limit
+if not modules then modules = { } end modules ['l-url'] = {
+ version = 1.001,
+ comment = "companion to luat-lib.mkiv",
+ author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
+ copyright = "PRAGMA ADE / ConTeXt Development Team",
+ license = "see context related readme files"
+}
+
+local char, gmatch, gsub = string.char, string.gmatch, string.gsub
+local tonumber, type = tonumber, type
+local lpegmatch = lpeg.match
+
+-- 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
+
+url = url or { }
+
+local function tochar(s)
+ return 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 plus = lpeg.P("+")
+local escaped = (plus / " ") + (percent * lpeg.C(hexdigit * hexdigit) / tochar)
+
+-- we assume schemes with more than 1 character (in order to avoid problems with windows disks)
+
+local scheme = lpeg.Cs((escaped+(1-colon-slash-qmark-hash))^2) * 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)
+
+-- todo: reconsider Ct as we can as well have five return values (saves a table)
+-- so we can have two parsers, one with and one without
+
+function url.split(str)
+ return (type(str) == "string" and lpegmatch(parser,str)) or str
+end
+
+-- todo: cache them
+
+function url.hashed(str)
+ local s = url.split(str)
+ local somescheme = s[1] ~= ""
+ return {
+ scheme = (somescheme and s[1]) or "file",
+ authority = s[2],
+ path = s[3],
+ query = s[4],
+ fragment = s[5],
+ original = str,
+ noscheme = not somescheme,
+ }
+end
+
+function url.hasscheme(str)
+ return url.split(str)[1] ~= ""
+end
+
+function url.addscheme(str,scheme)
+ return (url.hasscheme(str) and str) or ((scheme or "file:///") .. str)
+end
+
+function url.construct(hash)
+ local fullurl = hash.sheme .. "://".. hash.authority .. hash.path
+ if hash.query then
+ fullurl = fullurl .. "?".. hash.query
+ end
+ if hash.fragment then
+ fullurl = fullurl .. "?".. hash.fragment
+ end
+ return fullurl
+end
+
+function url.filename(filename)
+ local t = url.hashed(filename)
+ return (t.scheme == "file" and (gsub(t.path,"^/([a-zA-Z])([:|])/)","%1:"))) or filename
+end
+
+function url.query(str)
+ if type(str) == "string" then
+ local t = { }
+ for k, v in gmatch(str,"([^&=]*)=([^&=]*)") 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")
+
+
+end -- of closure
+
+do -- create closure to overcome 200 locals limit
+
if not modules then modules = { } end modules ['l-dir'] = {
version = 1.001,
- comment = "companion to luat-lib.tex",
+ comment = "companion to luat-lib.mkiv",
author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
copyright = "PRAGMA ADE / ConTeXt Development Team",
license = "see context related readme files"
}
+-- dir.expand_name will be merged with cleanpath and collapsepath
+
local type = type
-local find, gmatch = string.find, string.gmatch
+local find, gmatch, match, gsub = string.find, string.gmatch, string.match, string.gsub
+local lpegmatch = lpeg.match
dir = dir or { }
+-- handy
+
+function dir.current()
+ return (gsub(lfs.currentdir(),"\\","/"))
+end
+
-- optimizing for no string.find (*) does not save time
local attributes = lfs.attributes
@@ -2068,6 +2671,35 @@ end
dir.glob_pattern = glob_pattern
+local function collect_pattern(path,patt,recurse,result)
+ local ok, scanner
+ result = result or { }
+ 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 find(path,"/$") then path = path .. '/' end
+ for name in scanner do
+ local full = path .. name
+ local attr = attributes(full)
+ local mode = attr.mode
+ if mode == 'file' then
+ if find(full,patt) then
+ result[name] = attr
+ end
+ elseif recurse and (mode == "directory") and (name ~= '.') and (name ~= "..") then
+ attr.list = collect_pattern(full,patt,recurse)
+ result[name] = attr
+ end
+ end
+ end
+ return result
+end
+
+dir.collect_pattern = collect_pattern
+
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 {
@@ -2087,29 +2719,48 @@ local filter = Cs ( (
)^0 )
local function glob(str,t)
- if type(str) == "table" then
- local t = t or { }
- for s=1,#str do
- glob(str[s],t)
+ if type(t) == "function" then
+ if type(str) == "table" then
+ for s=1,#str do
+ glob(str[s],t)
+ end
+ elseif lfs.isfile(str) then
+ t(str)
+ else
+ local split = lpegmatch(pattern,str)
+ if split then
+ local root, path, base = split[1], split[2], split[3]
+ local recurse = find(base,"%*%*")
+ local start = root .. path
+ local result = lpegmatch(filter,start .. base)
+ glob_pattern(start,result,recurse,t)
+ end
end
- return t
- elseif lfs.isfile(str) then
- local t = t or { }
- t[#t+1] = str
- return t
else
- local split = pattern:match(str)
- if split then
+ if type(str) == "table" 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 = find(base,"%*%*")
- local start = root .. path
- local result = filter:match(start .. base)
- glob_pattern(start,result,recurse,action)
+ for s=1,#str do
+ glob(str[s],t)
+ end
+ return t
+ elseif lfs.isfile(str) then
+ local t = t or { }
+ t[#t+1] = str
return t
else
- return { }
+ local split = lpegmatch(pattern,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 = find(base,"%*%*")
+ local start = root .. path
+ local result = lpegmatch(filter,start .. base)
+ glob_pattern(start,result,recurse,action)
+ return t
+ else
+ return { }
+ end
end
end
end
@@ -2171,11 +2822,12 @@ end
local make_indeed = true -- false
-if string.find(os.getenv("PATH"),";") then
+if string.find(os.getenv("PATH"),";") then -- os.type == "windows"
function dir.mkdirs(...)
- local str, pth = "", ""
- for _, s in ipairs({...}) do
+ local str, pth, t = "", "", { ... }
+ for i=1,#t do
+ local s = t[i]
if s ~= "" then
if str ~= "" then
str = str .. "/" .. s
@@ -2186,13 +2838,13 @@ if string.find(os.getenv("PATH"),";") then
end
local first, middle, last
local drive = false
- first, middle, last = str:match("^(//)(//*)(.*)$")
+ first, middle, last = match(str,"^(//)(//*)(.*)$")
if first then
-- empty network path == local path
else
- first, last = str:match("^(//)/*(.-)$")
+ first, last = match(str,"^(//)/*(.-)$")
if first then
- middle, last = str:match("([^/]+)/+(.-)$")
+ middle, last = match(str,"([^/]+)/+(.-)$")
if middle then
pth = "//" .. middle
else
@@ -2200,11 +2852,11 @@ if string.find(os.getenv("PATH"),";") then
last = ""
end
else
- first, middle, last = str:match("^([a-zA-Z]:)(/*)(.-)$")
+ first, middle, last = match(str,"^([a-zA-Z]:)(/*)(.-)$")
if first then
pth, drive = first .. middle, true
else
- middle, last = str:match("^(/*)(.-)$")
+ middle, last = match(str,"^(/*)(.-)$")
if not middle then
last = str
end
@@ -2238,34 +2890,31 @@ if string.find(os.getenv("PATH"),";") then
--~ print(dir.mkdirs("///a/b/c"))
--~ print(dir.mkdirs("a/bbb//ccc/"))
- function dir.expand_name(str)
- local first, nothing, last = str:match("^(//)(//*)(.*)$")
+ function dir.expand_name(str) -- will be merged with cleanpath and collapsepath
+ local first, nothing, last = match(str,"^(//)(//*)(.*)$")
if first then
- first = lfs.currentdir() .. "/"
- first = first:gsub("\\","/")
+ first = dir.current() .. "/"
end
if not first then
- first, last = str:match("^(//)/*(.*)$")
+ first, last = match(str,"^(//)/*(.*)$")
end
if not first then
- first, last = str:match("^([a-zA-Z]:)(.*)$")
+ first, last = match(str,"^([a-zA-Z]:)(.*)$")
if first and not find(last,"^/") then
local d = lfs.currentdir()
if lfs.chdir(first) then
- first = lfs.currentdir()
- first = first:gsub("\\","/")
+ first = dir.current()
end
lfs.chdir(d)
end
end
if not first then
- first, last = lfs.currentdir(), str
- first = first:gsub("\\","/")
+ first, last = dir.current(), str
end
- last = last:gsub("//","/")
- last = last:gsub("/%./","/")
- last = last:gsub("^/*","")
- first = first:gsub("/*$","")
+ last = gsub(last,"//","/")
+ last = gsub(last,"/%./","/")
+ last = gsub(last,"^/*","")
+ first = gsub(first,"/*$","")
if last == "" then
return first
else
@@ -2276,8 +2925,9 @@ if string.find(os.getenv("PATH"),";") then
else
function dir.mkdirs(...)
- local str, pth = "", ""
- for _, s in ipairs({...}) do
+ local str, pth, t = "", "", { ... }
+ for i=1,#t do
+ local s = t[i]
if s ~= "" then
if str ~= "" then
str = str .. "/" .. s
@@ -2286,7 +2936,7 @@ else
end
end
end
- str = str:gsub("/+","/")
+ str = gsub(str,"/+","/")
if find(str,"^/") then
pth = "/"
for s in gmatch(str,"[^/]+") do
@@ -2320,12 +2970,12 @@ else
--~ print(dir.mkdirs("///a/b/c"))
--~ print(dir.mkdirs("a/bbb//ccc/"))
- function dir.expand_name(str)
+ function dir.expand_name(str) -- will be merged with cleanpath and collapsepath
if not find(str,"^/") then
str = lfs.currentdir() .. "/" .. str
end
- str = str:gsub("//","/")
- str = str:gsub("/%./","/")
+ str = gsub(str,"//","/")
+ str = gsub(str,"/%./","/")
return str
end
@@ -2340,7 +2990,7 @@ do -- create closure to overcome 200 locals limit
if not modules then modules = { } end modules ['l-boolean'] = {
version = 1.001,
- comment = "companion to luat-lib.tex",
+ comment = "companion to luat-lib.mkiv",
author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
copyright = "PRAGMA ADE / ConTeXt Development Team",
license = "see context related readme files"
@@ -2401,7 +3051,7 @@ do -- create closure to overcome 200 locals limit
if not modules then modules = { } end modules ['l-math'] = {
version = 1.001,
- comment = "companion to luat-lib.tex",
+ comment = "companion to luat-lib.mkiv",
author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
copyright = "PRAGMA ADE / ConTeXt Development Team",
license = "see context related readme files"
@@ -2448,7 +3098,7 @@ do -- create closure to overcome 200 locals limit
if not modules then modules = { } end modules ['l-utils'] = {
version = 1.001,
- comment = "companion to luat-lib.tex",
+ comment = "companion to luat-lib.mkiv",
author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
copyright = "PRAGMA ADE / ConTeXt Development Team",
license = "see context related readme files"
@@ -2456,6 +3106,10 @@ if not modules then modules = { } end modules ['l-utils'] = {
-- hm, quite unreadable
+local gsub = string.gsub
+local concat = table.concat
+local type, next = type, next
+
if not utils then utils = { } end
if not utils.merger then utils.merger = { } end
if not utils.lua then utils.lua = { } end
@@ -2493,7 +3147,7 @@ function utils.merger._self_load_(name)
end
if data and utils.merger.strip_comment then
-- saves some 20K
- data = data:gsub("%-%-~[^\n\r]*[\r\n]", "")
+ data = gsub(data,"%-%-~[^\n\r]*[\r\n]", "")
end
return data or ""
end
@@ -2511,7 +3165,7 @@ end
function utils.merger._self_swap_(data,code)
if data ~= "" then
- return (data:gsub(utils.merger.pattern, function(s)
+ return (gsub(data,utils.merger.pattern, function(s)
return "\n\n" .. "-- "..utils.merger.m_begin .. "\n" .. code .. "\n" .. "-- "..utils.merger.m_end .. "\n\n"
end, 1))
else
@@ -2521,8 +3175,8 @@ end
--~ stripper:
--~
---~ data = string.gsub(data,"%-%-~[^\n]*\n","")
---~ data = string.gsub(data,"\n\n+","\n")
+--~ data = gsub(data,"%-%-~[^\n]*\n","")
+--~ data = gsub(data,"\n\n+","\n")
function utils.merger._self_libs_(libs,list)
local result, f, frozen = { }, nil, false
@@ -2530,9 +3184,10 @@ function utils.merger._self_libs_(libs,list)
if type(libs) == 'string' then libs = { libs } end
if type(list) == 'string' then list = { list } end
local foundpath = nil
- for _, lib in ipairs(libs) do
- for _, pth in ipairs(list) do
- pth = string.gsub(pth,"\\","/") -- file.clean_path
+ for i=1,#libs do
+ local lib = libs[i]
+ for j=1,#list do
+ local pth = gsub(list[j],"\\","/") -- file.clean_path
utils.report("checking library path %s",pth)
local name = pth .. "/" .. lib
if lfs.isfile(name) then
@@ -2544,7 +3199,8 @@ function utils.merger._self_libs_(libs,list)
if foundpath then
utils.report("using library path %s",foundpath)
local right, wrong = { }, { }
- for _, lib in ipairs(libs) do
+ for i=1,#libs do
+ local lib = libs[i]
local fullname = foundpath .. "/" .. lib
if lfs.isfile(fullname) then
-- right[#right+1] = lib
@@ -2558,15 +3214,15 @@ function utils.merger._self_libs_(libs,list)
end
end
if #right > 0 then
- utils.report("merged libraries: %s",table.concat(right," "))
+ utils.report("merged libraries: %s",concat(right," "))
end
if #wrong > 0 then
- utils.report("skipped libraries: %s",table.concat(wrong," "))
+ utils.report("skipped libraries: %s",concat(wrong," "))
end
else
utils.report("no valid library path found")
end
- return table.concat(result, "\n\n")
+ return concat(result, "\n\n")
end
function utils.merger.selfcreate(libs,list,target)
@@ -2624,16 +3280,28 @@ do -- create closure to overcome 200 locals limit
if not modules then modules = { } end modules ['l-aux'] = {
version = 1.001,
- comment = "companion to luat-lib.tex",
+ comment = "companion to luat-lib.mkiv",
author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
copyright = "PRAGMA ADE / ConTeXt Development Team",
license = "see context related readme files"
}
+-- for inline, no store split : for s in string.gmatch(str,",* *([^,]+)") do .. end
+
aux = aux or { }
local concat, format, gmatch = table.concat, string.format, string.gmatch
local tostring, type = tostring, type
+local lpegmatch = lpeg.match
+
+local P, R, V = lpeg.P, lpeg.R, lpeg.V
+
+local escape, left, right = P("\\"), P('{'), P('}')
+
+lpeg.patterns.balanced = P {
+ [1] = ((escape * (left+right)) + (1 - (left+right)) + V(2))^0,
+ [2] = left * V(1) * right
+}
local space = lpeg.P(' ')
local equal = lpeg.P("=")
@@ -2641,7 +3309,7 @@ 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 nested = lpeg.P { lbrace * (nobrace + lpeg.V(1))^0 * rbrace }
local spaces = space^0
local value = lpeg.P(lbrace * lpeg.C((nobrace + nested)^0) * rbrace) + lpeg.C((nested + (1-comma))^0)
@@ -2679,13 +3347,13 @@ function aux.make_settings_to_hash_pattern(set,how)
end
end
-function aux.settings_to_hash(str)
+function aux.settings_to_hash(str,existing)
if str and str ~= "" then
- hash = { }
+ hash = existing or { }
if moretolerant then
- pattern_b_s:match(str)
+ lpegmatch(pattern_b_s,str)
else
- pattern_a_s:match(str)
+ lpegmatch(pattern_a_s,str)
end
return hash
else
@@ -2693,39 +3361,41 @@ function aux.settings_to_hash(str)
end
end
-function aux.settings_to_hash_tolerant(str)
+function aux.settings_to_hash_tolerant(str,existing)
if str and str ~= "" then
- hash = { }
- pattern_b_s:match(str)
+ hash = existing or { }
+ lpegmatch(pattern_b_s,str)
return hash
else
return { }
end
end
-function aux.settings_to_hash_strict(str)
+function aux.settings_to_hash_strict(str,existing)
if str and str ~= "" then
- hash = { }
- pattern_c_s:match(str)
+ hash = existing or { }
+ lpegmatch(pattern_c_s,str)
return next(hash) and hash
else
return nil
end
end
-local seperator = comma * space^0
+local separator = 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)
+local pattern = lpeg.Ct(value*(separator*value)^0)
-- "aap, {noot}, mies" : outer {} removes, leading spaces ignored
aux.settings_to_array_pattern = pattern
+-- we could use a weak table as cache
+
function aux.settings_to_array(str)
if not str or str == "" then
return { }
else
- return pattern:match(str)
+ return lpegmatch(pattern,str)
end
end
@@ -2734,10 +3404,10 @@ local function set(t,v)
end
local value = lpeg.P(lpeg.Carg(1)*value) / set
-local pattern = value*(seperator*value)^0 * lpeg.Carg(1)
+local pattern = value*(separator*value)^0 * lpeg.Carg(1)
function aux.add_settings_to_array(t,str)
- return pattern:match(str, nil, t)
+ return lpegmatch(pattern,str,nil,t)
end
function aux.hash_to_string(h,separator,yes,no,strict,omit)
@@ -2785,6 +3455,13 @@ function aux.settings_to_set(str,t)
return t
end
+local value = lbrace * lpeg.C((nobrace + nested)^0) * rbrace
+local pattern = lpeg.Ct((space + value)^0)
+
+function aux.arguments_to_table(str)
+ return lpegmatch(pattern,str)
+end
+
-- temporary here
function aux.getparameters(self,class,parentclass,settings)
@@ -2793,36 +3470,31 @@ function aux.getparameters(self,class,parentclass,settings)
sc = table.clone(self[parent])
self[class] = sc
end
- aux.add_settings_to_array(sc, settings)
+ aux.settings_to_hash(settings,sc)
end
-- temporary here
-local digit = lpeg.R("09")
-local period = lpeg.P(".")
-local zero = lpeg.P("0")
-
---~ local finish = lpeg.P(-1)
---~ local nodigit = (1-digit) + finish
---~ local case_1 = (period * zero^1 * #nodigit)/"" -- .000
---~ local case_2 = (period * (1-(zero^0/"") * #nodigit)^1 * (zero^0/"") * nodigit) -- .010 .10 .100100
-
+local digit = lpeg.R("09")
+local period = lpeg.P(".")
+local zero = lpeg.P("0")
local trailingzeros = zero^0 * -digit -- suggested by Roberto R
-local case_1 = period * trailingzeros / ""
-local case_2 = period * (digit - trailingzeros)^1 * (trailingzeros / "")
-
-local number = digit^1 * (case_1 + case_2)
-local stripper = lpeg.Cs((number + 1)^0)
+local case_1 = period * trailingzeros / ""
+local case_2 = period * (digit - trailingzeros)^1 * (trailingzeros / "")
+local number = digit^1 * (case_1 + case_2)
+local stripper = lpeg.Cs((number + 1)^0)
--~ local sample = "bla 11.00 bla 11 bla 0.1100 bla 1.00100 bla 0.00 bla 0.001 bla 1.1100 bla 0.100100100 bla 0.00100100100"
--~ collectgarbage("collect")
--~ str = string.rep(sample,10000)
--~ local ts = os.clock()
---~ stripper:match(str)
---~ print(#str, os.clock()-ts, stripper:match(sample))
+--~ lpegmatch(stripper,str)
+--~ print(#str, os.clock()-ts, lpegmatch(stripper,sample))
+
+lpeg.patterns.strip_zeros = stripper
function aux.strip_zeros(str)
- return stripper:match(str)
+ return lpegmatch(stripper,str)
end
function aux.definetable(target) -- defines undefined tables
@@ -2846,6 +3518,375 @@ function aux.accesstable(target)
return t
end
+--~ function string.commaseparated(str)
+--~ return gmatch(str,"([^,%s]+)")
+--~ end
+
+-- as we use this a lot ...
+
+--~ function aux.cachefunction(action,weak)
+--~ local cache = { }
+--~ if weak then
+--~ setmetatable(cache, { __mode = "kv" } )
+--~ end
+--~ local function reminder(str)
+--~ local found = cache[str]
+--~ if not found then
+--~ found = action(str)
+--~ cache[str] = found
+--~ end
+--~ return found
+--~ end
+--~ return reminder, cache
+--~ end
+
+
+end -- of closure
+
+do -- create closure to overcome 200 locals limit
+
+if not modules then modules = { } end modules ['trac-tra'] = {
+ version = 1.001,
+ comment = "companion to trac-tra.mkiv",
+ author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
+ copyright = "PRAGMA ADE / ConTeXt Development Team",
+ license = "see context related readme files"
+}
+
+-- the <anonymous> tag is kind of generic and used for functions that are not
+-- bound to a variable, like node.new, node.copy etc (contrary to for instance
+-- node.has_attribute which is bound to a has_attribute local variable in mkiv)
+
+local debug = require "debug"
+
+local getinfo = debug.getinfo
+local type, next = type, next
+local concat = table.concat
+local format, find, lower, gmatch, gsub = string.format, string.find, string.lower, string.gmatch, string.gsub
+
+debugger = debugger or { }
+
+local counters = { }
+local names = { }
+
+-- one
+
+local function hook()
+ local f = getinfo(2,"f").func
+ local n = getinfo(2,"Sn")
+-- if n.what == "C" and n.name then print (n.namewhat .. ': ' .. n.name) end
+ if f then
+ local cf = counters[f]
+ if cf == nil then
+ counters[f] = 1
+ names[f] = n
+ else
+ counters[f] = cf + 1
+ end
+ end
+end
+local function getname(func)
+ local n = names[func]
+ if n then
+ if n.what == "C" then
+ return n.name or '<anonymous>'
+ 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 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
+ -- table.sort(counters)
+ for func, count in next, counters do
+ if count > threshold then
+ local name = getname(func)
+ if not find(name,"for generator") then
+ printer(format("%8i %s", count, name))
+ total = total + count
+ end
+ end
+ grandtotal = grandtotal + count
+ functions = functions + 1
+ end
+ printer(format("functions: %s, total: %s, grand total: %s, threshold: %s\n", functions, total, grandtotal, threshold))
+end
+
+-- two
+
+--~ local function hook()
+--~ local n = getinfo(2)
+--~ if n.what=="C" and not n.name then
+--~ local f = tostring(debug.traceback())
+--~ local cf = counters[f]
+--~ if cf == nil then
+--~ counters[f] = 1
+--~ names[f] = n
+--~ else
+--~ counters[f] = cf + 1
+--~ end
+--~ 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
+--~ -- table.sort(counters)
+--~ for func, count in next, counters do
+--~ if count > threshold then
+--~ printer(format("%8i %s", count, func))
+--~ total = total + count
+--~ end
+--~ grandtotal = grandtotal + count
+--~ functions = functions + 1
+--~ end
+--~ printer(format("functions: %s, total: %s, grand total: %s, threshold: %s\n", functions, total, grandtotal, threshold))
+--~ end
+
+-- rest
+
+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
+
+--~ 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)
+
+setters = setters or { }
+setters.data = setters.data or { }
+
+--~ local function set(t,what,value)
+--~ local data, done = t.data, t.done
+--~ if type(what) == "string" then
+--~ what = aux.settings_to_array(what) -- inefficient but ok
+--~ end
+--~ for i=1,#what do
+--~ local w = what[i]
+--~ for d, f in next, data do
+--~ if done[d] then
+--~ -- prevent recursion due to wildcards
+--~ elseif find(d,w) then
+--~ done[d] = true
+--~ for i=1,#f do
+--~ f[i](value)
+--~ end
+--~ end
+--~ end
+--~ end
+--~ end
+
+local function set(t,what,value)
+ local data, done = t.data, t.done
+ if type(what) == "string" then
+ what = aux.settings_to_hash(what) -- inefficient but ok
+ end
+ for w, v in next, what do
+ if v == "" then
+ v = value
+ else
+ v = toboolean(v)
+ end
+ for d, f in next, data do
+ if done[d] then
+ -- prevent recursion due to wildcards
+ elseif find(d,w) then
+ done[d] = true
+ for i=1,#f do
+ f[i](v)
+ end
+ end
+ end
+ end
+end
+
+local function reset(t)
+ for d, f in next, t.data do
+ for i=1,#f do
+ f[i](false)
+ end
+ end
+end
+
+local function enable(t,what)
+ set(t,what,true)
+end
+
+local function disable(t,what)
+ local data = t.data
+ if not what or what == "" then
+ t.done = { }
+ reset(t)
+ else
+ set(t,what,false)
+ end
+end
+
+function setters.register(t,what,...)
+ local data = t.data
+ what = lower(what)
+ local w = data[what]
+ if not w then
+ w = { }
+ data[what] = w
+ end
+ for _, fnc in next, { ... } do
+ local typ = type(fnc)
+ if typ == "function" then
+ w[#w+1] = fnc
+ elseif typ == "string" then
+ w[#w+1] = function(value) set(t,fnc,value,nesting) end
+ end
+ end
+end
+
+function setters.enable(t,what)
+ local e = t.enable
+ t.enable, t.done = enable, { }
+ enable(t,string.simpleesc(tostring(what)))
+ t.enable, t.done = e, { }
+end
+
+function setters.disable(t,what)
+ local e = t.disable
+ t.disable, t.done = disable, { }
+ disable(t,string.simpleesc(tostring(what)))
+ t.disable, t.done = e, { }
+end
+
+function setters.reset(t)
+ t.done = { }
+ reset(t)
+end
+
+function setters.list(t) -- pattern
+ local list = table.sortedkeys(t.data)
+ local user, system = { }, { }
+ for l=1,#list do
+ local what = list[l]
+ if find(what,"^%*") then
+ system[#system+1] = what
+ else
+ user[#user+1] = what
+ end
+ end
+ return user, system
+end
+
+function setters.show(t)
+ commands.writestatus("","")
+ local list = setters.list(t)
+ for k=1,#list do
+ commands.writestatus(t.name,list[k])
+ end
+ commands.writestatus("","")
+end
+
+-- we could have used a bit of oo and the trackers:enable syntax but
+-- there is already a lot of code around using the singular tracker
+
+-- we could make this into a module
+
+function setters.new(name)
+ local t
+ t = {
+ data = { },
+ name = name,
+ enable = function(...) setters.enable (t,...) end,
+ disable = function(...) setters.disable (t,...) end,
+ register = function(...) setters.register(t,...) end,
+ list = function(...) setters.list (t,...) end,
+ show = function(...) setters.show (t,...) end,
+ }
+ setters.data[name] = t
+ return t
+end
+
+trackers = setters.new("trackers")
+directives = setters.new("directives")
+experiments = setters.new("experiments")
+
+-- nice trick: we overload two of the directives related functions with variants that
+-- do tracing (itself using a tracker) .. proof of concept
+
+local trace_directives = false local trace_directives = false trackers.register("system.directives", function(v) trace_directives = v end)
+local trace_experiments = false local trace_experiments = false trackers.register("system.experiments", function(v) trace_experiments = v end)
+
+local e = directives.enable
+local d = directives.disable
+
+function directives.enable(...)
+ commands.writestatus("directives","enabling: %s",concat({...}," "))
+ e(...)
+end
+
+function directives.disable(...)
+ commands.writestatus("directives","disabling: %s",concat({...}," "))
+ d(...)
+end
+
+local e = experiments.enable
+local d = experiments.disable
+
+function experiments.enable(...)
+ commands.writestatus("experiments","enabling: %s",concat({...}," "))
+ e(...)
+end
+
+function experiments.disable(...)
+ commands.writestatus("experiments","disabling: %s",concat({...}," "))
+ d(...)
+end
+
+-- a useful example
+
+directives.register("system.nostatistics", function(v)
+ statistics.enable = not v
+end)
+
+
end -- of closure
@@ -2859,6 +3900,12 @@ if not modules then modules = { } end modules ['lxml-tab'] = {
license = "see context related readme files"
}
+-- this module needs a cleanup: check latest lpeg, passing args, (sub)grammar, etc etc
+-- stripping spaces from e.g. cont-en.xml saves .2 sec runtime so it's not worth the
+-- trouble
+
+local trace_entities = false trackers.register("xml.entities", function(v) trace_entities = v end)
+
--[[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
@@ -2866,18 +3913,6 @@ parent access; a first version used different trickery but was less optimized to
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>
@@ -2888,26 +3923,11 @@ xml = xml or { }
--~ local xml = xml
local concat, remove, insert = table.concat, table.remove, table.insert
-local type, next, setmetatable = type, next, setmetatable
-local format, lower, find = string.format, string.lower, string.find
-
---[[ldx--
-<p>This module can be used stand alone but also inside <l n='mkiv'/> in
-which case it hooks into the tracker code. Therefore we provide a few
-functions that set the tracers.</p>
---ldx]]--
-
-local trace_remap = false
-
-if trackers then
- trackers.register("xml.remap", function(v) trace_remap = v end)
-end
-
-function xml.settrace(str,value)
- if str == "remap" then
- trace_remap = value or false
- end
-end
+local type, next, setmetatable, getmetatable, tonumber = type, next, setmetatable, getmetatable, tonumber
+local format, lower, find, match, gsub = string.format, string.lower, string.find, string.match, string.gsub
+local utfchar = unicode.utf8.char
+local lpegmatch = lpeg.match
+local P, S, R, C, V, C, Cs = lpeg.P, lpeg.S, lpeg.R, lpeg.C, lpeg.V, lpeg.C, lpeg.Cs
--[[ldx--
<p>First a hack to enable namespace resolving. A namespace is characterized by
@@ -2919,7 +3939,7 @@ much cleaner.</p>
xml.xmlns = xml.xmlns or { }
-local check = lpeg.P(false)
+local check = P(false)
local parse = check
--[[ldx--
@@ -2932,8 +3952,8 @@ xml.registerns("mml","mathml")
--ldx]]--
function xml.registerns(namespace, pattern) -- pattern can be an lpeg
- check = check + lpeg.C(lpeg.P(lower(pattern))) / namespace
- parse = lpeg.P { lpeg.P(check) + 1 * lpeg.V(1) }
+ check = check + C(P(lower(pattern))) / namespace
+ parse = P { P(check) + 1 * V(1) }
end
--[[ldx--
@@ -2947,7 +3967,7 @@ xml.checkns("m","http://www.w3.org/mathml")
--ldx]]--
function xml.checkns(namespace,url)
- local ns = parse:match(lower(url))
+ local ns = lpegmatch(parse,lower(url))
if ns and namespace ~= ns then
xml.xmlns[namespace] = ns
end
@@ -2965,7 +3985,7 @@ This returns <t>mml</t>.
--ldx]]--
function xml.resolvens(url)
- return parse:match(lower(url)) or ""
+ return lpegmatch(parse,lower(url)) or ""
end
--[[ldx--
@@ -3004,27 +4024,36 @@ local x = xml.convert(somestring)
<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
+<p>Valid entities are:</p>
+
+<typing>
+<!ENTITY xxxx SYSTEM "yyyy" NDATA zzzz>
+<!ENTITY xxxx PUBLIC "yyyy" >
+<!ENTITY xxxx "yyyy" >
+</typing>
+--ldx]]--
-- not just one big nested table capture (lpeg overflow)
local nsremap, resolvens = xml.xmlns, xml.resolvens
-local stack, top, dt, at, xmlns, errorstr, entities = {}, {}, {}, {}, {}, nil, {}
+local stack, top, dt, at, xmlns, errorstr, entities = { }, { }, { }, { }, { }, nil, { }
+local strip, cleanup, utfize, resolve, resolve_predefined, unify_predefined = false, false, false, false, false, false
+local dcache, hcache, acache = { }, { }, { }
-local mt = { __tostring = xml.text }
+local mt = { }
-function xml.check_error(top,toclose)
- return ""
+function initialize_mt(root)
+ mt = { __index = root } -- will be redefined later
end
-local strip = false
-local cleanup = false
+function xml.setproperty(root,k,v)
+ getmetatable(root).__index[k] = v
+end
-function xml.set_text_cleanup(fnc)
- cleanup = fnc
+function xml.check_error(top,toclose)
+ return ""
end
local function add_attribute(namespace,tag,value)
@@ -3034,12 +4063,31 @@ local function add_attribute(namespace,tag,value)
if tag == "xmlns" then
xmlns[#xmlns+1] = resolvens(value)
at[tag] = value
+ elseif namespace == "" then
+ at[tag] = value
elseif namespace == "xmlns" then
xml.checkns(tag,value)
at["xmlns:" .. tag] = value
else
- at[tag] = value
+ -- for the moment this way:
+ at[namespace .. ":" .. tag] = value
+ 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)
+ if at.xmlns then
+ remove(xmlns)
end
+ at = { }
end
local function add_begin(spacing, namespace, tag)
@@ -3067,28 +4115,12 @@ local function add_end(spacing, namespace, tag)
end
dt = top.dt
dt[#dt+1] = toclose
- dt[0] = top
+ -- dt[0] = top -- nasty circular reference when serializing table
if toclose.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)
- if at.xmlns then
- remove(xmlns)
- end
- at = { }
-end
-
local function add_text(text)
if cleanup and #text > 0 then
dt[#dt+1] = cleanup(text)
@@ -3104,7 +4136,7 @@ local function add_special(what, spacing, text)
if strip and (what == "@cm@" or what == "@dt@") then
-- forget it
else
- dt[#dt+1] = { special=true, ns="", tg=what, dt={text} }
+ dt[#dt+1] = { special=true, ns="", tg=what, dt={ text } }
end
end
@@ -3112,7 +4144,199 @@ local function set_message(txt)
errorstr = "garbage at the end of the file: " .. gsub(txt,"([ \n\r\t]*)","")
end
-local P, S, R, C, V = lpeg.P, lpeg.S, lpeg.R, lpeg.C, lpeg.V
+local reported_attribute_errors = { }
+
+local function attribute_value_error(str)
+ if not reported_attribute_errors[str] then
+ logs.report("xml","invalid attribute value: %q",str)
+ reported_attribute_errors[str] = true
+ at._error_ = str
+ end
+ return str
+end
+local function attribute_specification_error(str)
+ if not reported_attribute_errors[str] then
+ logs.report("xml","invalid attribute specification: %q",str)
+ reported_attribute_errors[str] = true
+ at._error_ = str
+ end
+ return str
+end
+
+function xml.unknown_dec_entity_format(str) return (str == "" and "&error;") or format("&%s;",str) end
+function xml.unknown_hex_entity_format(str) return format("&#x%s;",str) end
+function xml.unknown_any_entity_format(str) return format("&#x%s;",str) end
+
+local function fromhex(s)
+ local n = tonumber(s,16)
+ if n then
+ return utfchar(n)
+ else
+ return format("h:%s",s), true
+ end
+end
+
+local function fromdec(s)
+ local n = tonumber(s)
+ if n then
+ return utfchar(n)
+ else
+ return format("d:%s",s), true
+ end
+end
+
+-- one level expansion (simple case), no checking done
+
+local rest = (1-P(";"))^0
+local many = P(1)^0
+
+local parsedentity =
+ P("&") * (P("#x")*(rest/fromhex) + P("#")*(rest/fromdec)) * P(";") * P(-1) +
+ (P("#x")*(many/fromhex) + P("#")*(many/fromdec))
+
+-- parsing in the xml file
+
+local predefined_unified = {
+ [38] = "&amp;",
+ [42] = "&quot;",
+ [47] = "&apos;",
+ [74] = "&lt;",
+ [76] = "&gr;",
+}
+
+local predefined_simplified = {
+ [38] = "&", amp = "&",
+ [42] = '"', quot = '"',
+ [47] = "'", apos = "'",
+ [74] = "<", lt = "<",
+ [76] = ">", gt = ">",
+}
+
+local function handle_hex_entity(str)
+ local h = hcache[str]
+ if not h then
+ local n = tonumber(str,16)
+ h = unify_predefined and predefined_unified[n]
+ if h then
+ if trace_entities then
+ logs.report("xml","utfize, converting hex entity &#x%s; into %s",str,h)
+ end
+ elseif utfize then
+ h = (n and utfchar(n)) or xml.unknown_hex_entity_format(str) or ""
+ if not n then
+ logs.report("xml","utfize, ignoring hex entity &#x%s;",str)
+ elseif trace_entities then
+ logs.report("xml","utfize, converting hex entity &#x%s; into %s",str,h)
+ end
+ else
+ if trace_entities then
+ logs.report("xml","found entity &#x%s;",str)
+ end
+ h = "&#x" .. str .. ";"
+ end
+ hcache[str] = h
+ end
+ return h
+end
+
+local function handle_dec_entity(str)
+ local d = dcache[str]
+ if not d then
+ local n = tonumber(str)
+ d = unify_predefined and predefined_unified[n]
+ if d then
+ if trace_entities then
+ logs.report("xml","utfize, converting dec entity &#%s; into %s",str,d)
+ end
+ elseif utfize then
+ d = (n and utfchar(n)) or xml.unknown_dec_entity_format(str) or ""
+ if not n then
+ logs.report("xml","utfize, ignoring dec entity &#%s;",str)
+ elseif trace_entities then
+ logs.report("xml","utfize, converting dec entity &#%s; into %s",str,h)
+ end
+ else
+ if trace_entities then
+ logs.report("xml","found entity &#%s;",str)
+ end
+ d = "&#" .. str .. ";"
+ end
+ dcache[str] = d
+ end
+ return d
+end
+
+xml.parsedentitylpeg = parsedentity
+
+local function handle_any_entity(str)
+ if resolve then
+ local a = acache[str] -- per instance ! todo
+ if not a then
+ a = resolve_predefined and predefined_simplified[str]
+ if a then
+ -- one of the predefined
+ elseif type(resolve) == "function" then
+ a = resolve(str) or entities[str]
+ else
+ a = entities[str]
+ end
+ if a then
+ if trace_entities then
+ logs.report("xml","resolved entity &%s; -> %s (internal)",str,a)
+ end
+ a = lpegmatch(parsedentity,a) or a
+ else
+ if xml.unknown_any_entity_format then
+ a = xml.unknown_any_entity_format(str) or ""
+ end
+ if a then
+ if trace_entities then
+ logs.report("xml","resolved entity &%s; -> %s (external)",str,a)
+ end
+ else
+ if trace_entities then
+ logs.report("xml","keeping entity &%s;",str)
+ end
+ if str == "" then
+ a = "&error;"
+ else
+ a = "&" .. str .. ";"
+ end
+ end
+ end
+ acache[str] = a
+ elseif trace_entities then
+ if not acache[str] then
+ logs.report("xml","converting entity &%s; into %s",str,a)
+ acache[str] = a
+ end
+ end
+ return a
+ else
+ local a = acache[str]
+ if not a then
+ if trace_entities then
+ logs.report("xml","found entity &%s;",str)
+ end
+ a = resolve_predefined and predefined_simplified[str]
+ if a then
+ -- one of the predefined
+ acache[str] = a
+ elseif str == "" then
+ a = "&error;"
+ acache[str] = a
+ else
+ a = "&" .. str .. ";"
+ acache[str] = a
+ end
+ end
+ return a
+ end
+end
+
+local function handle_end_entity(chr)
+ logs.report("xml","error in entity, %q found instead of ';'",chr)
+end
local space = S(' \r\n\t')
local open = P('<')
@@ -3122,24 +4346,50 @@ local dquote = S('"')
local equal = P('=')
local slash = P('/')
local colon = P(':')
+local semicolon = P(';')
+local ampersand = 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 = lpeg.patterns.utfbom -- no capture
+local spacing = C(space^0)
-local utfbom = P('\000\000\254\255') + P('\255\254\000\000') +
- P('\255\254') + P('\254\255') + P('\239\187\191') -- no capture
+----- entitycontent = (1-open-semicolon)^0
+local anyentitycontent = (1-open-semicolon-space-close)^0
+local hexentitycontent = R("AF","af","09")^0
+local decentitycontent = R("09")^0
+local parsedentity = P("#")/"" * (
+ P("x")/"" * (hexentitycontent/handle_hex_entity) +
+ (decentitycontent/handle_dec_entity)
+ ) + (anyentitycontent/handle_any_entity)
+local entity = ampersand/"" * parsedentity * ( (semicolon/"") + #(P(1)/handle_end_entity))
+
+local text_unparsed = C((1-open)^1)
+local text_parsed = Cs(((1-open-ampersand)^1 + entity)^1)
-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
+----- value = (squote * C((1 - squote)^0) * squote) + (dquote * C((1 - dquote)^0) * dquote) -- ampersand and < also invalid in value
+local value = (squote * Cs((entity + (1 - squote))^0) * squote) + (dquote * Cs((entity + (1 - dquote))^0) * dquote) -- ampersand and < also invalid in value
+
+local endofattributes = slash * close + close -- recovery of flacky html
+local whatever = space * name * optionalspace * equal
+local wrongvalue = C(P(1-whatever-close)^1 + P(1-close)^1) / attribute_value_error
+----- wrongvalue = C(P(1-whatever-endofattributes)^1 + P(1-endofattributes)^1) / attribute_value_error
+----- wrongvalue = C(P(1-space-endofattributes)^1) / attribute_value_error
+local wrongvalue = Cs(P(entity + (1-space-endofattributes))^1) / attribute_value_error
-local text = justtext / add_text
+local attributevalue = value + wrongvalue
+
+local attribute = (somespace * name * optionalspace * equal * optionalspace * attributevalue) / add_attribute
+----- attributes = (attribute)^0
+
+local attributes = (attribute + somespace^-1 * (((1-endofattributes)^1)/attribute_specification_error))^0
+
+local parsedtext = text_parsed / add_text
+local unparsedtext = text_unparsed / 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
@@ -3157,19 +4407,27 @@ local someinstruction = C((1 - endinstruction)^0)
local somecomment = C((1 - endcomment )^0)
local somecdata = C((1 - endcdata )^0)
-local function entity(k,v) entities[k] = v end
+local function normalentity(k,v ) entities[k] = v end
+local function systementity(k,v,n) entities[k] = v end
+local function publicentity(k,v,n) 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 doctypename = C((1-somespace-close)^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 normalentitytype = (doctypename * somespace * value)/normalentity
+local publicentitytype = (doctypename * somespace * P("PUBLIC") * somespace * value)/publicentity
+local systementitytype = (doctypename * somespace * P("SYSTEM") * somespace * value * somespace * P("NDATA") * somespace * doctypename)/systementity
+local entitydoctype = optionalspace * P("<!ENTITY") * somespace * (systementitytype + publicentitytype + normalentitytype) * optionalspace * close
+
+local doctypeset = beginset * optionalspace * P(elementdoctype + entitydoctype + space)^0 * optionalspace * endset
+local definitiondoctype= doctypename * somespace * doctypeset
+local publicdoctype = doctypename * somespace * P("PUBLIC") * somespace * value * somespace * value * somespace * doctypeset
+local systemdoctype = doctypename * somespace * P("SYSTEM") * somespace * value * somespace * doctypeset
+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
@@ -3179,60 +4437,116 @@ local doctype = (spacing * begindoctype * somedoctype * enddoct
-- 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 instruction = (Cc("@pi@") * spacing * begininstruction * someinstruction * endinstruction) / add_special
+-- local comment = (Cc("@cm@") * spacing * begincomment * somecomment * endcomment ) / add_special
+-- local cdata = (Cc("@cd@") * spacing * begincdata * somecdata * endcdata ) / add_special
+-- local doctype = (Cc("@dt@") * spacing * begindoctype * somedoctype * enddoctype ) / add_special
-local trailer = space^0 * (justtext/set_message)^0
+local trailer = space^0 * (text_unparsed/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",
+local grammar_parsed_text = 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,
+ children = parsedtext + V("parent") + emptyelement + comment + cdata + instruction,
}
--- todo: xml.new + properties like entities and strip and such (store in root)
+local grammar_unparsed_text = P { "preamble",
+ preamble = utfbom^0 * instruction^0 * (doctype + comment + instruction)^0 * V("parent") * trailer,
+ parent = beginelement * V("children")^0 * endelement,
+ children = unparsedtext + V("parent") + emptyelement + comment + cdata + instruction,
+}
-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 {}
+-- maybe we will add settinsg to result as well
+
+local function xmlconvert(data, settings)
+ settings = settings or { } -- no_root strip_cm_and_dt given_entities parent_root error_handler
+ strip = settings.strip_cm_and_dt
+ utfize = settings.utfize_entities
+ resolve = settings.resolve_entities
+ resolve_predefined = settings.resolve_predefined_entities -- in case we have escaped entities
+ unify_predefined = settings.unify_predefined_entities -- &#038; -> &amp;
+ cleanup = settings.text_cleanup
+ stack, top, at, xmlns, errorstr, result, entities = { }, { }, { }, { }, nil, nil, settings.entities or { }
+ acache, hcache, dcache = { }, { }, { } -- not stored
+ reported_attribute_errors = { }
+ if settings.parent_root then
+ mt = getmetatable(settings.parent_root)
+ else
+ initialize_mt(top)
+ end
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"
+ elseif utfize or resolve then
+ if lpegmatch(grammar_parsed_text,data) then
+ errorstr = ""
+ else
+ errorstr = "invalid xml file - parsed text"
+ end
+ elseif type(data) == "string" then
+ if lpegmatch(grammar_unparsed_text,data) then
+ errorstr = ""
+ else
+ errorstr = "invalid xml file - unparsed text"
+ end
else
- errorstr = ""
+ errorstr = "invalid xml file - no text at all"
end
if errorstr and errorstr ~= "" then
- result = { dt = { { ns = "", tg = "error", dt = { errorstr }, at={}, er = true } }, error = true }
+ result = { dt = { { ns = "", tg = "error", dt = { errorstr }, at={ }, er = true } } }
setmetatable(stack, mt)
- if xml.error_handler then xml.error_handler("load",errorstr) end
+ local error_handler = settings.error_handler
+ if error_handler == false then
+ -- no error message
+ else
+ error_handler = error_handler or xml.error_handler
+ if error_handler then
+ xml.error_handler("load",errorstr)
+ end
+ end
else
result = stack[1]
end
- if not no_root then
- result = { special = true, ns = "", tg = '@rt@', dt = result.dt, at={}, entities = entities }
+ if not settings.no_root then
+ result = { special = true, ns = "", tg = '@rt@', dt = result.dt, at={ }, entities = entities, settings = settings }
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
+v.__p__ = result -- new, experiment, else we cannot go back to settings, we need to test this !
break
end
end
end
+ if errorstr and errorstr ~= "" then
+ result.error = true
+ end
return result
end
+xml.convert = xmlconvert
+
+function xml.inheritedconvert(data,xmldata)
+ local settings = xmldata.settings
+ settings.parent_root = xmldata -- to be tested
+ -- settings.no_root = true
+ local xc = xmlconvert(data,settings)
+ -- xc.settings = nil
+ -- xc.entities = nil
+ -- xc.special = nil
+ -- xc.ri = nil
+ -- print(xc.tg)
+ return xc
+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>
@@ -3243,7 +4557,7 @@ function xml.is_valid(root)
end
function xml.package(tag,attributes,data)
- local ns, tg = tag:match("^(.-):?([^:]+)$")
+ local ns, tg = match(tag,"^(.-):?([^:]+)$")
local t = { ns = ns, tg = tg, dt = data or "", at = attributes or {} }
setmetatable(t, mt)
return t
@@ -3261,21 +4575,19 @@ the whole file first. The function accepts a string representing
a filename or a file handle.</p>
--ldx]]--
-function xml.load(filename)
+function xml.load(filename,settings)
+ local data = ""
if type(filename) == "string" then
+ -- local data = io.loaddata(filename) - -todo: check type in io.loaddata
local f = io.open(filename,'r')
if f then
- local root = xml.convert(f:read("*all"))
+ data = 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("")
+ data = filename:read("*all")
end
+ return xmlconvert(data,settings)
end
--[[ldx--
@@ -3283,9 +4595,11 @@ end
valid trees, which is what the next function does.</p>
--ldx]]--
+local no_root = { no_root = true }
+
function xml.toxml(data)
if type(data) == "string" then
- local root = { xml.convert(data,true) }
+ local root = { xmlconvert(data,no_root) }
return (#root > 1 and root) or root[1]
else
return data
@@ -3305,7 +4619,7 @@ local function copy(old,tables)
if not tables[old] then
tables[old] = new
end
- for k,v in pairs(old) do
+ for k,v in next, old do
new[k] = (type(v) == "table" and (tables[v] or copy(v, tables))) or v
end
local mt = getmetatable(old)
@@ -3330,217 +4644,304 @@ alternative.</p>
-- 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
- local etg, edt = e.tg, e.dt
- local spc = specialconverter and specialconverter[etg]
- if spc then
- 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
+function xml.checkbom(root) -- can be made faster
+ if root.ri then
+ local dt, found = root.dt, false
+ for k=1,#dt do
+ local v = dt[k]
+ if type(v) == "table" and v.special and v.tg == "@pi@" and find(v.dt[1],"xml.*version=") then
+ found = true
+ break
end
end
+ if not found then
+ insert(dt, 1, { special=true, ns="", tg="@pi@", dt = { "xml version='1.0' standalone='yes'"} } )
+ insert(dt, 2, "\n" )
+ 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)
+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]]--
+
+-- new experimental reorganized serialize
+
+local function verbose_element(e,handlers)
+ local handle = handlers.handle
+ local serialize = handlers.serialize
+ local ens, etg, eat, edt, ern = e.ns, e.tg, e.at, e.dt, e.rn
+ local ats = eat and next(eat) and { }
+ if ats then
+ for k,v in next, eat do
+ ats[#ats+1] = format('%s=%q',k,v)
+ end
+ end
+ if ern and trace_remap and ern ~= ens then
+ ens = ern
+ end
+ if ens ~= "" then
+ if edt and #edt > 0 then
+ if ats then
+ handle("<",ens,":",etg," ",concat(ats," "),">")
+ else
+ handle("<",ens,":",etg,">")
+ end
+ for i=1,#edt do
+ local e = edt[i]
+ if type(e) == "string" then
+ handle(e)
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)
+ serialize(e,handlers)
+ end
end
+ handle("</",ens,":",etg,">")
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 next, eat do
- ats[#ats+1] = format('%s=%q',k,attributeconverter(v))
- end
- else
- for k,v in next, eat do
- ats[#ats+1] = format('%s=%q',k,v)
- end
- end
+ handle("<",ens,":",etg," ",concat(ats," "),"/>")
+ else
+ handle("<",ens,":",etg,"/>")
end
- if ern and trace_remap and ern ~= ens then
- ens = ern
+ end
+ else
+ if edt and #edt > 0 then
+ if ats then
+ handle("<",etg," ",concat(ats," "),">")
+ else
+ handle("<",etg,">")
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 .. ">")
+ for i=1,#edt do
+ local ei = edt[i]
+ if type(ei) == "string" then
+ handle(ei)
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
+ serialize(ei,handlers)
end
+ end
+ handle("</",etg,">")
+ else
+ if ats then
+ handle("<",etg," ",concat(ats," "),"/>")
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
- local ei = edt[i]
- if type(ei) == "string" then
- if textconverter then
- handle(textconverter(ei))
- else
- handle(ei)
- end
- else
- serialize(ei,handle,textconverter,attributeconverter,specialconverter,nocommands)
- end
- 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
+ handle("<",etg,"/>")
end
end
- elseif type(e) == "string" then
- if textconverter then
- handle(textconverter(e))
+ end
+end
+
+local function verbose_pi(e,handlers)
+ handlers.handle("<?",e.dt[1],"?>")
+end
+
+local function verbose_comment(e,handlers)
+ handlers.handle("<!--",e.dt[1],"-->")
+end
+
+local function verbose_cdata(e,handlers)
+ handlers.handle("<![CDATA[", e.dt[1],"]]>")
+end
+
+local function verbose_doctype(e,handlers)
+ handlers.handle("<!DOCTYPE ",e.dt[1],">")
+end
+
+local function verbose_root(e,handlers)
+ handlers.serialize(e.dt,handlers)
+end
+
+local function verbose_text(e,handlers)
+ handlers.handle(e)
+end
+
+local function verbose_document(e,handlers)
+ local serialize = handlers.serialize
+ local functions = handlers.functions
+ for i=1,#e do
+ local ei = e[i]
+ if type(ei) == "string" then
+ functions["@tx@"](ei,handlers)
else
- handle(e)
+ serialize(ei,handlers)
end
- else
- for i=1,#e do
- local ei = e[i]
- if type(ei) == "string" then
- if textconverter then
- handle(textconverter(ei))
- else
- handle(ei)
- end
- else
- serialize(ei,handle,textconverter,attributeconverter,specialconverter,nocommands)
- end
+ end
+end
+
+local function serialize(e,handlers,...)
+ local initialize = handlers.initialize
+ local finalize = handlers.finalize
+ local functions = handlers.functions
+ if initialize then
+ local state = initialize(...)
+ if not state == true then
+ return state
end
end
+ local etg = e.tg
+ if etg then
+ (functions[etg] or functions["@el@"])(e,handlers)
+ -- elseif type(e) == "string" then
+ -- functions["@tx@"](e,handlers)
+ else
+ functions["@dc@"](e,handlers)
+ end
+ if finalize then
+ return finalize()
+ end
end
-xml.serialize = serialize
+local function xserialize(e,handlers)
+ local functions = handlers.functions
+ local etg = e.tg
+ if etg then
+ (functions[etg] or functions["@el@"])(e,handlers)
+ -- elseif type(e) == "string" then
+ -- functions["@tx@"](e,handlers)
+ else
+ functions["@dc@"](e,handlers)
+ end
+end
-function xml.checkbom(root) -- can be made faster
- if root.ri then
- local dt, found = root.dt, false
- for k=1,#dt do
- local v = dt[k]
- if type(v) == "table" and v.special and v.tg == "@pi" and find(v.dt,"xml.*version=") then
- found = true
- break
+local handlers = { }
+
+local function newhandlers(settings)
+ local t = table.copy(handlers.verbose or { }) -- merge
+ if settings then
+ for k,v in next, settings do
+ if type(v) == "table" then
+ tk = t[k] if not tk then tk = { } t[k] = tk end
+ for kk,vv in next, v do
+ tk[kk] = vv
+ end
+ else
+ t[k] = v
end
end
- if not found then
- insert(dt, 1, { special=true, ns="", tg="@pi@", dt = { "xml version='1.0' standalone='yes'"} } )
- insert(dt, 2, "\n" )
+ if settings.name then
+ handlers[settings.name] = t
end
end
+ return t
end
+local nofunction = function() end
+
+function xml.sethandlersfunction(handler,name,fnc)
+ handler.functions[name] = fnc or nofunction
+end
+
+function xml.gethandlersfunction(handler,name)
+ return handler.functions[name]
+end
+
+function xml.gethandlers(name)
+ return handlers[name]
+end
+
+newhandlers {
+ name = "verbose",
+ initialize = false, -- faster than nil and mt lookup
+ finalize = false, -- faster than nil and mt lookup
+ serialize = xserialize,
+ handle = print,
+ functions = {
+ ["@dc@"] = verbose_document,
+ ["@dt@"] = verbose_doctype,
+ ["@rt@"] = verbose_root,
+ ["@el@"] = verbose_element,
+ ["@pi@"] = verbose_pi,
+ ["@cm@"] = verbose_comment,
+ ["@cd@"] = verbose_cdata,
+ ["@tx@"] = verbose_text,
+ }
+}
+
--[[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>
+<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>Beware, these were timing with the old routine but measurements will not be that
+much different I guess.</p>
--ldx]]--
-function xml.tostring(root) -- 25% overhead due to collecting
+-- maybe this will move to lxml-xml
+
+local result
+
+local xmlfilehandler = newhandlers {
+ name = "file",
+ initialize = function(name) result = io.open(name,"wb") return result end,
+ finalize = function() result:close() return true end,
+ handle = function(...) result:write(...) end,
+}
+
+-- no checking on writeability here but not faster either
+--
+-- local xmlfilehandler = newhandlers {
+-- initialize = function(name) io.output(name,"wb") return true end,
+-- finalize = function() io.close() return true end,
+-- handle = io.write,
+-- }
+
+
+function xml.save(root,name)
+ serialize(root,xmlfilehandler,name)
+end
+
+local result
+
+local xmlstringhandler = newhandlers {
+ name = "string",
+ initialize = function() result = { } return result end,
+ finalize = function() return concat(result) end,
+ handle = function(...) result[#result+1] = concat { ... } end
+}
+
+local function xmltostring(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) -- brrr, slow (direct printing is faster)
- return concat(result,"")
+ else -- if next(root) then -- next is faster than type (and >0 test)
+ return serialize(root,xmlstringhandler) or ""
end
end
return ""
end
+local function xmltext(root) -- inline
+ return (root and xmltostring(root)) or ""
+end
+
+function initialize_mt(root)
+ mt = { __tostring = xmltext, __index = root }
+end
+
+xml.defaulthandlers = handlers
+xml.newhandlers = newhandlers
+xml.serialize = serialize
+xml.tostring = xmltostring
+
--[[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)
+local function xmlstring(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)
+ xmlstring(edt[i],handle)
end
end
else
@@ -3548,54 +4949,52 @@ function xml.string(e,handle)
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>
+xml.string = xmlstring
-<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--
+<p>A few helpers:</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()
+--~ xmlsetproperty(root,"settings",settings)
+
+function xml.settings(e)
+ while e do
+ local s = e.settings
+ if s then
+ return s
+ else
+ e = e.__p__
+ end
end
+ return nil
end
---[[ldx--
-<p>A few helpers:</p>
---ldx]]--
-
-function xml.body(root)
- return (root.ri and root.dt[root.ri]) or root
+function xml.root(e)
+ local r = e
+ while e do
+ e = e.__p__
+ if e then
+ r = e
+ end
+ end
+ return r
end
-function xml.text(root)
- return (root and xml.tostring(root)) or ""
+function xml.parent(root)
+ return root.__p__
end
-function xml.content(root) -- bugged
- return (root and root.dt and xml.tostring(root.dt)) or ""
+function xml.body(root)
+ return (root.ri and root.dt[root.ri]) or root -- not ok yet
end
-function xml.isempty(root, pattern)
- if pattern == "" or pattern == "*" then
- pattern = nil
- end
- if pattern then
- -- todo
- return false
+function xml.name(root)
+ if not root then
+ return ""
+ elseif root.ns == "" then
+ return root.tg
else
- return not root or not root.dt or #root.dt == 0 or root.dt == ""
+ return root.ns .. ":" .. root.tg
end
end
@@ -3603,18 +5002,15 @@ end
<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 ""
+function xml.erase(dt,k)
+ if dt then
+ if k then
+ dt[k] = ""
+ else for k=1,#dt do
+ dt[1] = { "" }
+ end end
end
end
@@ -3635,6 +5031,42 @@ function xml.assign(dt,k,root)
end
end
+-- the following helpers may move
+
+--[[ldx--
+<p>The next helper assigns a tree (or string). Usage:</p>
+<typing>
+xml.tocdata(e)
+xml.tocdata(e,"error")
+</typing>
+--ldx]]--
+
+function xml.tocdata(e,wrapper)
+ local whatever = xmltostring(e.dt)
+ if wrapper then
+ whatever = format("<%s>%s</%s>",wrapper,whatever,wrapper)
+ end
+ local t = { special = true, ns = "", tg = "@cd@", at = {}, rn = "", dt = { whatever }, __p__ = e }
+ setmetatable(t,getmetatable(e))
+ e.dt = { t }
+end
+
+function xml.makestandalone(root)
+ if root.ri then
+ local dt = root.dt
+ for k=1,#dt do
+ local v = dt[k]
+ if type(v) == "table" and v.special and v.tg == "@pi@" then
+ local txt = v.dt[1]
+ if find(txt,"xml.*version=") then
+ v.dt[1] = txt .. " standalone='yes'"
+ break
+ end
+ end
+ end
+ end
+end
+
end -- of closure
@@ -3648,1420 +5080,1285 @@ if not modules then modules = { } end modules ['lxml-pth'] = {
license = "see context related readme files"
}
+-- e.ni is only valid after a filter run
+
local concat, remove, insert = table.concat, table.remove, table.insert
local type, next, tonumber, tostring, setmetatable, loadstring = type, next, tonumber, tostring, setmetatable, loadstring
-local format, lower, gmatch, gsub, find = string.format, string.lower, string.gmatch, string.gsub, string.find
+local format, upper, lower, gmatch, gsub, find, rep = string.format, string.upper, string.lower, string.gmatch, string.gsub, string.find, string.rep
+local lpegmatch = lpeg.match
+
+-- beware, this is not xpath ... e.g. position is different (currently) and
+-- we have reverse-sibling as reversed preceding sibling
--[[ldx--
<p>This module can be used stand alone but also inside <l n='mkiv'/> in
which case it hooks into the tracker code. Therefore we provide a few
functions that set the tracers. Here we overload a previously defined
function.</p>
+<p>If I can get in the mood I will make a variant that is XSLT compliant
+but I wonder if it makes sense.</P>
--ldx]]--
-local trace_lpath = false
-
-if trackers then
- trackers.register("xml.lpath", function(v) trace_lpath = v end)
-end
+--[[ldx--
+<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>
-local settrace = xml.settrace -- lxml-tab
+<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>
+--ldx]]--
-function xml.settrace(str,value)
- if str == "lpath" then
- trace_lpath = value or false
- else
- settrace(str,value) -- lxml-tab
- end
-end
+local trace_lpath = false if trackers then trackers.register("xml.path", function(v) trace_lpath = v end) end
+local trace_lparse = false if trackers then trackers.register("xml.parse", function(v) trace_lparse = v end) end
+local trace_lprofile = false if trackers then trackers.register("xml.profile", function(v) trace_lpath = v trace_lparse = v trace_lprofile = v end) end
--[[ldx--
-<p>We've now arrived at an intersting part: accessing the tree using a subset
+<p>We've now arrived at an interesting 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]]--
-local lpathcalls = 0 -- statistics
-local lpathcached = 0 -- statistics
+local lpathcalls = 0 function xml.lpathcalls () return lpathcalls end
+local lpathcached = 0 function xml.lpathcached() return lpathcached end
-xml.functions = xml.functions or { }
-xml.expressions = xml.expressions or { }
+xml.functions = xml.functions or { } -- internal
+xml.expressions = xml.expressions or { } -- in expressions
+xml.finalizers = xml.finalizers or { } -- fast do-with ... (with return value other than collection)
+xml.specialhandler = xml.specialhandler or { }
local functions = xml.functions
local expressions = xml.expressions
+local finalizers = xml.finalizers
-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",
-}
-
--- a rather dumb lpeg
+finalizers.xml = finalizers.xml or { }
+finalizers.tex = finalizers.tex or { }
-local P, S, R, C, V, Cc = lpeg.P, lpeg.S, lpeg.R, lpeg.C, lpeg.V, lpeg.Cc
+local function fallback (t, name)
+ local fn = finalizers[name]
+ if fn then
+ t[name] = fn
+ else
+ logs.report("xml","unknown sub finalizer '%s'",tostring(name))
+ fn = function() end
+ end
+ return fn
+end
--- instead of using functions we just parse a few names which saves a call
--- later on
+setmetatable(finalizers.xml, { __index = fallback })
+setmetatable(finalizers.tex, { __index = fallback })
-local lp_position = P("position()") / "ps"
-local lp_index = P("index()") / "id"
-local lp_text = P("text()") / "tx"
-local lp_name = P("name()") / "(ns~='' and ns..':'..tg)" -- "((rt.ns~='' and rt.ns..':'..rt.tg) or '')"
-local lp_tag = P("tag()") / "tg" -- (rt.tg or '')
-local lp_ns = P("ns()") / "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 '')")
+xml.defaultprotocol = "xml"
-local lp_lua_function = C(R("az","AZ","--","__")^1 * (P(".") * R("az","AZ","--","__")^1)^1) * P("(") / function(t) -- todo: better . handling
- return t .. "("
-end
+-- as xsl does not follow xpath completely here we will also
+-- be more liberal especially with regards to the use of | and
+-- the rootpath:
+--
+-- test : all 'test' under current
+-- /test : 'test' relative to current
+-- a|b|c : set of names
+-- (a|b|c) : idem
+-- ! : not
+--
+-- after all, we're not doing transformations but filtering. in
+-- addition we provide filter functions (last bit)
+--
+-- todo: optimizer
+--
+-- .. : parent
+-- * : all kids
+-- / : anchor here
+-- // : /**/
+-- ** : all in between
+--
+-- so far we had (more practical as we don't transform)
+--
+-- {/test} : kids 'test' under current node
+-- {test} : any kid with tag 'test'
+-- {//test} : same as above
-local lp_function = C(R("az","AZ","--","__")^1) * P("(") / function(t) -- todo: better . handling
- if expressions[t] then
- return "expressions." .. t .. "("
- else
- return "expressions.error("
- end
-end
+-- evaluator (needs to be redone, for the moment copied)
-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) -- lpeg.P{"("*C(((1-S("()"))+V(1))^0)*")"}
+-- todo: apply_axis(list,notable) and collection vs single
--- if we use a dedicated namespace then we don't need to pass rt and k
+local apply_axis = { }
-local lp_special = (C(P("name")+P("text")+P("tag"))) * value / function(t,s)
- if expressions[t] then
- if s then
- return "expressions." .. t .. "(r,k," .. s ..")"
- else
- return "expressions." .. t .. "(r,k)"
+apply_axis['root'] = function(list)
+ local collected = { }
+ for l=1,#list do
+ local ll = list[l]
+ local rt = ll
+ while ll do
+ ll = ll.__p__
+ if ll then
+ rt = ll
+ end
end
- else
- return "expressions.error(" .. t .. ")"
+ collected[#collected+1] = rt
end
+ return collected
end
-local converter = lpeg.Cs ( (
- lp_position +
- lp_index +
- lp_text + lp_name + -- fast one
- lp_special +
- lp_noequal + lp_doequal +
- lp_attribute +
- lp_lua_function +
- lp_function +
-1 )^1 )
-
--- expressions,root,rootdt,k,e,edt,ns,tg,idx,hsh[tg] or 1
+apply_axis['self'] = function(list)
+--~ local collected = { }
+--~ for l=1,#list do
+--~ collected[#collected+1] = list[l]
+--~ end
+--~ return collected
+ return list
+end
-local template = [[
- return function(expressions,r,d,k,e,dt,ns,tg,id,ps)
- local at, tx = e.at or { }, dt[1] or ""
- return %s
+apply_axis['child'] = function(list)
+ local collected = { }
+ for l=1,#list do
+ local ll = list[l]
+ local dt = ll.dt
+ local en = 0
+ for k=1,#dt do
+ local dk = dt[k]
+ if dk.tg then
+ collected[#collected+1] = dk
+ dk.ni = k -- refresh
+ en = en + 1
+ dk.ei = en
+ end
+ end
+ ll.en = en
end
-]]
-
-local function make_expression(str)
- str = converter:match(str)
- return str, loadstring(format(template,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 = 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 + -- brrr, not here !
- 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 +
- many + any +
- crap + empty
-)
-
-local grammar = P { "startup",
- startup = (initial + documentroot + subtreeroot + roottag + docroottag + subroottag)^0 * V("followup"),
- followup = ((slash + parenttag + childtag + selftag)^0 * selector)^1,
-}
+ return collected
+end
-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
- insert(map, 1, { 16 })
+local function collect(list,collected)
+ local dt = list.dt
+ if dt then
+ local en = 0
+ for k=1,#dt do
+ local dk = dt[k]
+ if dk.tg then
+ collected[#collected+1] = dk
+ dk.ni = k -- refresh
+ en = en + 1
+ dk.ei = en
+ collect(dk,collected)
end
- -- print(gsub(table.serialize(map),"[ \n]+"," "))
- return map
end
+ list.en = en
end
end
+apply_axis['descendant'] = function(list)
+ local collected = { }
+ for l=1,#list do
+ collect(list[l],collected)
+ end
+ return collected
+end
-local cache = { }
-
-function xml.lpath(pattern,trace)
- lpathcalls = lpathcalls + 1
- if type(pattern) == "string" then
- local result = cache[pattern]
- if result == nil then -- can be false which is valid -)
- result = compose(pattern)
- cache[pattern] = result
- lpathcached = lpathcached + 1
+local function collect(list,collected)
+ local dt = list.dt
+ if dt then
+ local en = 0
+ for k=1,#dt do
+ local dk = dt[k]
+ if dk.tg then
+ collected[#collected+1] = dk
+ dk.ni = k -- refresh
+ en = en + 1
+ dk.ei = en
+ collect(dk,collected)
+ end
end
- if trace or trace_lpath then
- xml.lshow(result)
+ list.en = en
+ end
+end
+apply_axis['descendant-or-self'] = function(list)
+ local collected = { }
+ for l=1,#list do
+ local ll = list[l]
+ if ll.special ~= true then -- catch double root
+ collected[#collected+1] = ll
end
- return result
- else
- return pattern
+ collect(ll,collected)
end
+ return collected
end
-function xml.cached_patterns()
- return cache
+apply_axis['ancestor'] = function(list)
+ local collected = { }
+ for l=1,#list do
+ local ll = list[l]
+ while ll do
+ ll = ll.__p__
+ if ll then
+ collected[#collected+1] = ll
+ end
+ end
+ end
+ return collected
end
--- we run out of locals (limited to 200)
---
--- local fallbackreport = (texio and texio.write) or io.write
-
-function xml.lshow(pattern,report)
--- report = report or fallbackreport
- report = report or (texio and texio.write) or io.write
- 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=1,#lp do
- local v = lp[k]
- 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]]))
+apply_axis['ancestor-or-self'] = function(list)
+ local collected = { }
+ for l=1,#list do
+ local ll = list[l]
+ collected[#collected+1] = ll
+ while ll do
+ ll = ll.__p__
+ if ll then
+ collected[#collected+1] = ll
end
end
end
+ return collected
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
- local report = (type(t[#t]) == "function" and t[#t]) or (texio and texio.write) or io.write
- 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")
+apply_axis['parent'] = function(list)
+ local collected = { }
+ for l=1,#list do
+ local pl = list[l].__p__
+ if pl then
+ collected[#collected+1] = pl
end
end
+ return collected
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]]--
-
-local functions = xml.functions
-local expressions = xml.expressions
-
-expressions.contains = string.find
-expressions.find = string.find
-expressions.upper = string.upper
-expressions.lower = string.lower
-expressions.number = tonumber
-expressions.boolean = toboolean
-
-expressions.oneof = function(s,...) -- slow
- local t = {...} for i=1,#t do if s == t[i] then return true end end return false
+apply_axis['attribute'] = function(list)
+ return { }
end
-expressions.error = function(str)
- xml.error_handler("unknown function in lpath expression",str or "?")
- return false
+apply_axis['namespace'] = function(list)
+ return { }
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
+apply_axis['following'] = function(list) -- incomplete
+--~ local collected = { }
+--~ for l=1,#list do
+--~ local ll = list[l]
+--~ local p = ll.__p__
+--~ local d = p.dt
+--~ for i=ll.ni+1,#d do
+--~ local di = d[i]
+--~ if type(di) == "table" then
+--~ collected[#collected+1] = di
+--~ break
+--~ end
+--~ end
+--~ end
+--~ return collected
+ return { }
+end
+
+apply_axis['preceding'] = function(list) -- incomplete
+--~ local collected = { }
+--~ for l=1,#list do
+--~ local ll = list[l]
+--~ local p = ll.__p__
+--~ local d = p.dt
+--~ for i=ll.ni-1,1,-1 do
+--~ local di = d[i]
+--~ if type(di) == "table" then
+--~ collected[#collected+1] = di
+--~ break
+--~ end
+--~ end
+--~ end
+--~ return collected
+ return { }
end
-functions.name = function(d,k,n) -- ns + tg
- local found = false
- n = n or 0
- if not k then
- -- not found
- elseif n == 0 then
- local dk = d[k]
- found = dk and (type(dk) == "table") and dk
- elseif n < 0 then
- for i=k-1,1,-1 do
- local di = d[i]
- if type(di) == "table" then
- if n == -1 then
- found = di
- break
- else
- n = n + 1
- end
- end
- end
- else
- for i=k+1,#d,1 do
+apply_axis['following-sibling'] = function(list)
+ local collected = { }
+ for l=1,#list do
+ local ll = list[l]
+ local p = ll.__p__
+ local d = p.dt
+ for i=ll.ni+1,#d do
local di = d[i]
if type(di) == "table" then
- if n == 1 then
- found = di
- break
- else
- n = n - 1
- end
+ collected[#collected+1] = di
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
+ return collected
end
-functions.tag = function(d,k,n) -- only tg
- local found = false
- n = n or 0
- if not k then
- -- not found
- elseif n == 0 then
- local dk = d[k]
- found = dk and (type(dk) == "table") and dk
- elseif n < 0 then
- for i=k-1,1,-1 do
+apply_axis['preceding-sibling'] = function(list)
+ local collected = { }
+ for l=1,#list do
+ local ll = list[l]
+ local p = ll.__p__
+ local d = p.dt
+ for i=1,ll.ni-1 do
local di = d[i]
if type(di) == "table" then
- if n == -1 then
- found = di
- break
- else
- n = n + 1
- end
+ collected[#collected+1] = di
end
end
- else
- for i=k+1,#d,1 do
+ end
+ return collected
+end
+
+apply_axis['reverse-sibling'] = function(list) -- reverse preceding
+ local collected = { }
+ for l=1,#list do
+ local ll = list[l]
+ local p = ll.__p__
+ local d = p.dt
+ for i=ll.ni-1,1,-1 do
local di = d[i]
if type(di) == "table" then
- if n == 1 then
- found = di
- break
- else
- n = n - 1
- end
+ collected[#collected+1] = di
end
end
end
- return (found and found.tg) or ""
+ return collected
end
-expressions.text = functions.text
-expressions.name = functions.name
-expressions.tag = functions.tag
+apply_axis['auto-descendant-or-self'] = apply_axis['descendant-or-self']
+apply_axis['auto-descendant'] = apply_axis['descendant']
+apply_axis['auto-child'] = apply_axis['child']
+apply_axis['auto-self'] = apply_axis['self']
+apply_axis['initial-child'] = apply_axis['child']
-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
+local function apply_nodes(list,directive,nodes)
+ -- todo: nodes[1] etc ... negated node name in set ... when needed
+ -- ... currently ignored
+ local maxn = #nodes
+ if maxn == 3 then --optimized loop
+ local nns, ntg = nodes[2], nodes[3]
+ if not nns and not ntg then -- wildcard
+ if directive then
+ return list
+ else
+ return { }
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
- local hsh = { } -- this will slooow down the lot
- 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
- -- we can optimize this for simple searches, but it probably does not pay off
- hsh[tg] = (hsh[tg] or 0) + 1
- 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
+ local collected, m, p = { }, 0, nil
+ if not nns then -- only check tag
+ for l=1,#list do
+ local ll = list[l]
+ local ltg = ll.tg
+ if ltg then
+ if directive then
+ if ntg == ltg then
+ local llp = ll.__p__ ; if llp ~= p then p, m = llp, 1 else m = m + 1 end
+ collected[#collected+1], ll.mi = ll, m
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](expressions,root,rootdt,k,e,edt,ns,tg,idx,hsh[tg] or 1)
- 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
+ elseif ntg ~= ltg then
+ local llp = ll.__p__ ; if llp ~= p then p, m = llp, 1 else m = m + 1 end
+ collected[#collected+1], ll.mi = ll, m
+ end
+ end
+ end
+ elseif not ntg then -- only check namespace
+ for l=1,#list do
+ local ll = list[l]
+ local lns = ll.rn or ll.ns
+ if lns then
+ if directive then
+ if lns == nns then
+ local llp = ll.__p__ ; if llp ~= p then p, m = llp, 1 else m = m + 1 end
+ collected[#collected+1], ll.mi = ll, m
end
+ elseif lns ~= nns then
+ local llp = ll.__p__ ; if llp ~= p then p, m = llp, 1 else m = m + 1 end
+ collected[#collected+1], ll.mi = ll, m
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
+ end
+ else -- check both
+ for l=1,#list do
+ local ll = list[l]
+ local ltg = ll.tg
+ if ltg then
+ local lns = ll.rn or ll.ns
+ local ok = ltg == ntg and lns == nns
+ if directive then
+ if ok then
+ local llp = ll.__p__ ; if llp ~= p then p, m = llp, 1 else m = m + 1 end
+ collected[#collected+1], ll.mi = ll, m
end
- break -- else loop
+ elseif not ok then
+ local llp = ll.__p__ ; if llp ~= p then p, m = llp, 1 else m = m + 1 end
+ collected[#collected+1], ll.mi = ll, m
end
end
end
end
+ return collected
end
+ else
+ local collected, m, p = { }, 0, nil
+ for l=1,#list do
+ local ll = list[l]
+ local ltg = ll.tg
+ if ltg then
+ local lns = ll.rn or ll.ns
+ local ok = false
+ for n=1,maxn,3 do
+ local nns, ntg = nodes[n+1], nodes[n+2]
+ ok = (not ntg or ltg == ntg) and (not nns or lns == nns)
+ if ok then
+ break
+ end
+ end
+ if directive then
+ if ok then
+ local llp = ll.__p__ ; if llp ~= p then p, m = llp, 1 else m = m + 1 end
+ collected[#collected+1], ll.mi = ll, m
+ end
+ elseif not ok then
+ local llp = ll.__p__ ; if llp ~= p then p, m = llp, 1 else m = m + 1 end
+ collected[#collected+1], ll.mi = ll, m
+ end
+ end
+ end
+ return collected
end
- return true
end
-xml.traverse = traverse
+local quit_expression = false
---[[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>
+local function apply_expression(list,expression,order)
+ local collected = { }
+ quit_expression = false
+ for l=1,#list do
+ local ll = list[l]
+ if expression(list,ll,l,order) then -- nasty, order alleen valid als n=1
+ collected[#collected+1] = ll
+ end
+ if quit_expression then
+ break
+ end
+ end
+ return collected
+end
+
+local P, V, C, Cs, Cc, Ct, R, S, Cg, Cb = lpeg.P, lpeg.V, lpeg.C, lpeg.Cs, lpeg.Cc, lpeg.Ct, lpeg.R, lpeg.S, lpeg.Cg, lpeg.Cb
+
+local spaces = S(" \n\r\t\f")^0
+local lp_space = S(" \n\r\t\f")
+local lp_any = P(1)
+local lp_noequal = P("!=") / "~=" + P("<=") + P(">=") + P("==")
+local lp_doequal = P("=") / "=="
+local lp_or = P("|") / " or "
+local lp_and = P("&") / " and "
+
+local lp_builtin = P (
+ P("firstindex") / "1" +
+ P("lastindex") / "(#ll.__p__.dt or 1)" +
+ P("firstelement") / "1" +
+ P("lastelement") / "(ll.__p__.en or 1)" +
+ P("first") / "1" +
+ P("last") / "#list" +
+ P("rootposition") / "order" +
+ P("position") / "l" + -- is element in finalizer
+ P("order") / "order" +
+ P("element") / "(ll.ei or 1)" +
+ P("index") / "(ll.ni or 1)" +
+ P("match") / "(ll.mi or 1)" +
+ P("text") / "(ll.dt[1] or '')" +
+ -- P("name") / "(ll.ns~='' and ll.ns..':'..ll.tg)" +
+ P("name") / "((ll.ns~='' and ll.ns..':'..ll.tg) or ll.tg)" +
+ P("tag") / "ll.tg" +
+ P("ns") / "ll.ns"
+ ) * ((spaces * P("(") * spaces * P(")"))/"")
+
+local lp_attribute = (P("@") + P("attribute::")) / "" * Cc("(ll.at and ll.at['") * R("az","AZ","--","__")^1 * Cc("'])")
+local lp_fastpos_p = ((P("+")^0 * R("09")^1 * P(-1)) / function(s) return "l==" .. s end)
+local lp_fastpos_n = ((P("-") * R("09")^1 * P(-1)) / function(s) return "(" .. s .. "<0 and (#list+".. s .. "==l))" end)
+local lp_fastpos = lp_fastpos_n + lp_fastpos_p
+local lp_reserved = C("and") + C("or") + C("not") + C("div") + C("mod") + C("true") + C("false")
+
+local lp_lua_function = C(R("az","AZ","__")^1 * (P(".") * R("az","AZ","__")^1)^1) * ("(") / function(t) -- todo: better . handling
+ return t .. "("
+end
-<typing>
-local r, d, k = xml.filter(root,"/a/b/c/position(4)"
-</typing>
---ldx]]--
+local lp_function = C(R("az","AZ","__")^1) * P("(") / function(t) -- todo: better . handling
+ if expressions[t] then
+ return "expr." .. t .. "("
+ else
+ return "expr.error("
+ end
+end
-local traverse, lpath, convert = xml.traverse, xml.lpath, xml.convert
+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) -- lpeg.P{"("*C(((1-S("()"))+V(1))^0)*")"}
-xml.filters = { }
+local lp_child = Cc("expr.child(ll,'") * R("az","AZ","--","__")^1 * Cc("')")
+local lp_number = S("+-") * R("09")^1
+local lp_string = Cc("'") * R("az","AZ","--","__")^1 * Cc("'")
+local lp_content = (P("'") * (1-P("'"))^0 * P("'") + P('"') * (1-P('"'))^0 * P('"'))
-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
+local cleaner
-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
+local lp_special = (C(P("name")+P("text")+P("tag")+P("count")+P("child"))) * value / function(t,s)
+ if expressions[t] then
+ s = s and s ~= "" and lpegmatch(cleaner,s)
+ if s and s ~= "" then
+ return "expr." .. t .. "(ll," .. s ..")"
else
- return ekat, rt, dt, dk
+ return "expr." .. t .. "(ll)"
end
else
- return { }, rt, dt, dk
+ return "expr.error(" .. t .. ")"
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
+local content =
+ lp_builtin +
+ lp_attribute +
+ lp_special +
+ lp_noequal + lp_doequal +
+ lp_or + lp_and +
+ lp_reserved +
+ lp_lua_function + lp_function +
+ lp_content + -- too fragile
+ lp_child +
+ lp_any
+
+local converter = Cs (
+ lp_fastpos + (P { lparent * (V(1))^0 * rparent + content } )^0
+)
-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
+cleaner = Cs ( (
+--~ lp_fastpos +
+ lp_reserved +
+ lp_number +
+ lp_string +
+1 )^1 )
-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
+--~ expr
-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
+local template_e = [[
+ local expr = xml.expressions
+ return function(list,ll,l,order)
+ return %s
+ 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
+local template_f_y = [[
+ local finalizer = xml.finalizers['%s']['%s']
+ return function(collection)
+ return finalizer(collection,%s)
+ 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
+local template_f_n = [[
+ return xml.finalizers['%s']['%s']
+]]
+
+--
+
+local register_self = { kind = "axis", axis = "self" } -- , apply = apply_axis["self"] }
+local register_parent = { kind = "axis", axis = "parent" } -- , apply = apply_axis["parent"] }
+local register_descendant = { kind = "axis", axis = "descendant" } -- , apply = apply_axis["descendant"] }
+local register_child = { kind = "axis", axis = "child" } -- , apply = apply_axis["child"] }
+local register_descendant_or_self = { kind = "axis", axis = "descendant-or-self" } -- , apply = apply_axis["descendant-or-self"] }
+local register_root = { kind = "axis", axis = "root" } -- , apply = apply_axis["root"] }
+local register_ancestor = { kind = "axis", axis = "ancestor" } -- , apply = apply_axis["ancestor"] }
+local register_ancestor_or_self = { kind = "axis", axis = "ancestor-or-self" } -- , apply = apply_axis["ancestor-or-self"] }
+local register_attribute = { kind = "axis", axis = "attribute" } -- , apply = apply_axis["attribute"] }
+local register_namespace = { kind = "axis", axis = "namespace" } -- , apply = apply_axis["namespace"] }
+local register_following = { kind = "axis", axis = "following" } -- , apply = apply_axis["following"] }
+local register_following_sibling = { kind = "axis", axis = "following-sibling" } -- , apply = apply_axis["following-sibling"] }
+local register_preceding = { kind = "axis", axis = "preceding" } -- , apply = apply_axis["preceding"] }
+local register_preceding_sibling = { kind = "axis", axis = "preceding-sibling" } -- , apply = apply_axis["preceding-sibling"] }
+local register_reverse_sibling = { kind = "axis", axis = "reverse-sibling" } -- , apply = apply_axis["reverse-sibling"] }
+
+local register_auto_descendant_or_self = { kind = "axis", axis = "auto-descendant-or-self" } -- , apply = apply_axis["auto-descendant-or-self"] }
+local register_auto_descendant = { kind = "axis", axis = "auto-descendant" } -- , apply = apply_axis["auto-descendant"] }
+local register_auto_self = { kind = "axis", axis = "auto-self" } -- , apply = apply_axis["auto-self"] }
+local register_auto_child = { kind = "axis", axis = "auto-child" } -- , apply = apply_axis["auto-child"] }
+
+local register_initial_child = { kind = "axis", axis = "initial-child" } -- , apply = apply_axis["initial-child"] }
+
+local register_all_nodes = { kind = "nodes", nodetest = true, nodes = { true, false, false } }
+
+local skip = { }
+
+local function errorrunner_e(str,cnv)
+ if not skip[str] then
+ logs.report("lpath","error in expression: %s => %s",str,cnv)
+ skip[str] = cnv or str
end
- return nil, nil, nil, nil
+ return false
+end
+local function errorrunner_f(str,arg)
+ logs.report("lpath","error in finalizer: %s(%s)",str,arg or "")
+ return false
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[gsub(arguments,"^([\"\'])(.*)%1$","%2")])) or ""
+local function register_nodes(nodetest,nodes)
+ return { kind = "nodes", nodetest = nodetest, nodes = nodes }
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
+local function register_expression(expression)
+ local converted = lpegmatch(converter,expression)
+ local runner = loadstring(format(template_e,converted))
+ runner = (runner and runner()) or function() errorrunner_e(expression,converted) end
+ return { kind = "expression", expression = expression, converted = converted, evaluator = runner }
+end
+
+local function register_finalizer(protocol,name,arguments)
+ local runner
+ if arguments and arguments ~= "" then
+ runner = loadstring(format(template_f_y,protocol or xml.defaultprotocol,name,arguments))
else
- return "", rt, dt, dk
+ runner = loadstring(format(template_f_n,protocol or xml.defaultprotocol,name))
end
+ runner = (runner and runner()) or function() errorrunner_f(name,arguments) end
+ return { kind = "finalizer", name = name, arguments = arguments, finalizer = runner }
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
+local expression = P { "ex",
+ ex = "[" * C((V("sq") + V("dq") + (1 - S("[]")) + V("ex"))^0) * "]",
+ sq = "'" * (1 - S("'"))^0 * "'",
+ dq = '"' * (1 - S('"'))^0 * '"',
+}
-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
+local arguments = P { "ar",
+ ar = "(" * Cs((V("sq") + V("dq") + V("nq") + P(1-P(")")))^0) * ")",
+ nq = ((1 - S("),'\""))^1) / function(s) return format("%q",s) end,
+ sq = P("'") * (1 - P("'"))^0 * P("'"),
+ dq = P('"') * (1 - P('"'))^0 * P('"'),
+}
+
+-- todo: better arg parser
+
+local function register_error(str)
+ return { kind = "error", error = format("unparsed: %s",str) }
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]]--
+-- there is a difference in * and /*/ and so we need to catch a few special cases
+
+local special_1 = P("*") * Cc(register_auto_descendant) * Cc(register_all_nodes) -- last one not needed
+local special_2 = P("/") * Cc(register_auto_self)
+local special_3 = P("") * Cc(register_auto_self)
+
+local parser = Ct { "patterns", -- can be made a bit faster by moving pattern outside
+
+ patterns = spaces * V("protocol") * spaces * (
+ ( V("special") * spaces * P(-1) ) +
+ ( V("initial") * spaces * V("step") * spaces * (P("/") * spaces * V("step") * spaces)^0 )
+ ),
+
+ protocol = Cg(V("letters"),"protocol") * P("://") + Cg(Cc(nil),"protocol"),
+
+ -- the / is needed for // as descendant or self is somewhat special
+ -- step = (V("shortcuts") + V("axis") * spaces * V("nodes")^0 + V("error")) * spaces * V("expressions")^0 * spaces * V("finalizer")^0,
+ step = ((V("shortcuts") + P("/") + V("axis")) * spaces * V("nodes")^0 + V("error")) * spaces * V("expressions")^0 * spaces * V("finalizer")^0,
+
+ axis = V("descendant") + V("child") + V("parent") + V("self") + V("root") + V("ancestor") +
+ V("descendant_or_self") + V("following_sibling") + V("following") +
+ V("reverse_sibling") + V("preceding_sibling") + V("preceding") + V("ancestor_or_self") +
+ #(1-P(-1)) * Cc(register_auto_child),
+
+ special = special_1 + special_2 + special_3,
--- not faster but hipper ... although ... i can't get rid of the trailing / in the path
+ initial = (P("/") * spaces * Cc(register_initial_child))^-1,
-local P, S, R, C, V, Cc = lpeg.P, lpeg.S, lpeg.R, lpeg.C, lpeg.V, lpeg.Cc
+ error = (P(1)^1) / register_error,
-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
+ shortcuts_a = V("s_descendant_or_self") + V("s_descendant") + V("s_child") + V("s_parent") + V("s_self") + V("s_root") + V("s_ancestor"),
-local parser = direct + action + attribute
+ shortcuts = V("shortcuts_a") * (spaces * "/" * spaces * V("shortcuts_a"))^0,
-local filters = xml.filters
-local attribute_filter = xml.filters.attributes
-local default_filter = xml.filters.default
+ s_descendant_or_self = (P("***/") + P("/")) * Cc(register_descendant_or_self), --- *** is a bonus
+ -- s_descendant_or_self = P("/") * Cc(register_descendant_or_self),
+ s_descendant = P("**") * Cc(register_descendant),
+ s_child = P("*") * #(1-P(":")) * Cc(register_child ),
+-- s_child = P("*") * #(P("/")+P(-1)) * Cc(register_child ),
+ s_parent = P("..") * Cc(register_parent ),
+ s_self = P("." ) * Cc(register_self ),
+ s_root = P("^^") * Cc(register_root ),
+ s_ancestor = P("^") * Cc(register_ancestor ),
--- todo: also hash, could be gc'd
+ descendant = P("descendant::") * Cc(register_descendant ),
+ child = P("child::") * Cc(register_child ),
+ parent = P("parent::") * Cc(register_parent ),
+ self = P("self::") * Cc(register_self ),
+ root = P('root::') * Cc(register_root ),
+ ancestor = P('ancestor::') * Cc(register_ancestor ),
+ descendant_or_self = P('descendant-or-self::') * Cc(register_descendant_or_self ),
+ ancestor_or_self = P('ancestor-or-self::') * Cc(register_ancestor_or_self ),
+ -- attribute = P('attribute::') * Cc(register_attribute ),
+ -- namespace = P('namespace::') * Cc(register_namespace ),
+ following = P('following::') * Cc(register_following ),
+ following_sibling = P('following-sibling::') * Cc(register_following_sibling ),
+ preceding = P('preceding::') * Cc(register_preceding ),
+ preceding_sibling = P('preceding-sibling::') * Cc(register_preceding_sibling ),
+ reverse_sibling = P('reverse-sibling::') * Cc(register_reverse_sibling ),
+
+ nodes = (V("nodefunction") * spaces * P("(") * V("nodeset") * P(")") + V("nodetest") * V("nodeset")) / register_nodes,
+
+ expressions = expression / register_expression,
+
+ letters = R("az")^1,
+ name = (1-lpeg.S("/[]()|:*!"))^1,
+ negate = P("!") * Cc(false),
+
+ nodefunction = V("negate") + P("not") * Cc(false) + Cc(true),
+ nodetest = V("negate") + Cc(true),
+ nodename = (V("negate") + Cc(true)) * spaces * ((V("wildnodename") * P(":") * V("wildnodename")) + (Cc(false) * V("wildnodename"))),
+ wildnodename = (C(V("name")) + P("*") * Cc(false)) * #(1-P("(")),
+ nodeset = spaces * Ct(V("nodename") * (spaces * P("|") * spaces * V("nodename"))^0) * spaces,
+
+ finalizer = (Cb("protocol") * P("/")^-1 * C(V("name")) * arguments * P(-1)) / register_finalizer,
+
+}
+
+local cache = { }
-function xml.filter(root,pattern)
- local kind, a, b, c = parser:match(pattern)
- 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)
+local function nodesettostring(set,nodetest)
+ local t = { }
+ for i=1,#set,3 do
+ local directive, ns, tg = set[i], set[i+1], set[i+2]
+ if not ns or ns == "" then ns = "*" end
+ if not tg or tg == "" then tg = "*" end
+ tg = (tg == "@rt@" and "[root]") or format("%s:%s",ns,tg)
+ t[#t+1] = (directive and tg) or format("not(%s)",tg)
+ end
+ if nodetest == false then
+ return format("not(%s)",concat(t,"|"))
else
- return default_filter(root,pattern)
+ return concat(t,"|")
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
+local function tagstostring(list)
+ if #list == 0 then
+ return "no elements"
+ else
+ local t = { }
+ for i=1, #list do
+ local li = list[i]
+ local ns, tg = li.ns, li.tg
+ if not ns or ns == "" then ns = "*" end
+ if not tg or tg == "" then tg = "*" end
+ t[#t+1] = (tg == "@rt@" and "[root]") or format("%s:%s",ns,tg)
+ end
+ return concat(t," ")
+ end
+end
---[[ldx--
-<p>The following functions collect elements and texts.</p>
---ldx]]--
+xml.nodesettostring = nodesettostring
--- still somewhat bugged
+local parse_pattern -- we have a harmless kind of circular reference
-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
+local function lshow(parsed)
+ if type(parsed) == "string" then
+ parsed = parse_pattern(parsed)
+ end
+ local s = table.serialize_functions -- ugly
+ table.serialize_functions = false -- ugly
+ logs.report("lpath","%s://%s => %s",parsed.protocol or xml.defaultprotocol,parsed.pattern,table.serialize(parsed,false))
+ table.serialize_functions = s -- ugly
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 ""
+xml.lshow = lshow
+
+local function add_comment(p,str)
+ local pc = p.comment
+ if not pc then
+ p.comment = { str }
+ else
+ pc[#pc+1] = str
+ end
+end
+
+parse_pattern = function (pattern) -- the gain of caching is rather minimal
+ lpathcalls = lpathcalls + 1
+ if type(pattern) == "table" then
+ return pattern
+ else
+ local parsed = cache[pattern]
+ if parsed then
+ lpathcached = lpathcached + 1
+ else
+ parsed = lpegmatch(parser,pattern)
+ if parsed then
+ parsed.pattern = pattern
+ local np = #parsed
+ if np == 0 then
+ parsed = { pattern = pattern, register_self, state = "parsing error" }
+ logs.report("lpath","parsing error in '%s'",pattern)
+ lshow(parsed)
else
- t[#t+1] = ""
+ -- we could have done this with a more complex parser but this
+ -- is cleaner
+ local pi = parsed[1]
+ if pi.axis == "auto-child" then
+ if false then
+ add_comment(parsed, "auto-child replaced by auto-descendant-or-self")
+ parsed[1] = register_auto_descendant_or_self
+ else
+ add_comment(parsed, "auto-child replaced by auto-descendant")
+ parsed[1] = register_auto_descendant
+ end
+ elseif pi.axis == "initial-child" and np > 1 and parsed[2].axis then
+ add_comment(parsed, "initial-child removed") -- we could also make it a auto-self
+ remove(parsed,1)
+ end
+ local np = #parsed -- can have changed
+ if np > 1 then
+ local pnp = parsed[np]
+ if pnp.kind == "nodes" and pnp.nodetest == true then
+ local nodes = pnp.nodes
+ if nodes[1] == true and nodes[2] == false and nodes[3] == false then
+ add_comment(parsed, "redundant final wildcard filter removed")
+ remove(parsed,np)
+ end
+ end
+ end
end
else
- t[#t+1] = tx or ""
+ parsed = { pattern = pattern }
+ end
+ cache[pattern] = parsed
+ if trace_lparse and not trace_lprofile then
+ lshow(parsed)
end
- else
- t[#t+1] = ""
end
- end)
- return t
+ return parsed
+ end
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
+-- we can move all calls inline and then merge the trace back
+-- technically we can combine axis and the next nodes which is
+-- what we did before but this a bit cleaner (but slower too)
+-- but interesting is that it's not that much faster when we
+-- go inline
+--
+-- beware: we need to return a collection even when we filter
+-- else the (simple) cache gets messed up
+
+-- caching found lookups saves not that much (max .1 sec on a 8 sec run)
+-- and it also messes up finalizers
+
+-- watch out: when there is a finalizer, it's always called as there
+-- can be cases that a finalizer returns (or does) something in case
+-- there is no match; an example of this is count()
+
+local profiled = { } xml.profiled = profiled
+
+local function profiled_apply(list,parsed,nofparsed,order)
+ local p = profiled[parsed.pattern]
+ if p then
+ p.tested = p.tested + 1
+ else
+ p = { tested = 1, matched = 0, finalized = 0 }
+ profiled[parsed.pattern] = p
+ end
+ local collected = list
+ for i=1,nofparsed do
+ local pi = parsed[i]
+ local kind = pi.kind
+ if kind == "axis" then
+ collected = apply_axis[pi.axis](collected)
+ elseif kind == "nodes" then
+ collected = apply_nodes(collected,pi.nodetest,pi.nodes)
+ elseif kind == "expression" then
+ collected = apply_expression(collected,pi.evaluator,order)
+ elseif kind == "finalizer" then
+ collected = pi.finalizer(collected)
+ p.matched = p.matched + 1
+ p.finalized = p.finalized + 1
+ return collected
+ end
+ if not collected or #collected == 0 then
+ local pn = i < nofparsed and parsed[nofparsed]
+ if pn and pn.kind == "finalizer" then
+ collected = pn.finalizer(collected)
+ p.finalized = p.finalized + 1
+ return collected
end
+ return nil
end
- end)
- return #t > 0 and {}
+ end
+ if collected then
+ p.matched = p.matched + 1
+ end
+ return collected
+end
+
+local function traced_apply(list,parsed,nofparsed,order)
+ if trace_lparse then
+ lshow(parsed)
+ end
+ logs.report("lpath", "collecting : %s",parsed.pattern)
+ logs.report("lpath", " root tags : %s",tagstostring(list))
+ logs.report("lpath", " order : %s",order or "unset")
+ local collected = list
+ for i=1,nofparsed do
+ local pi = parsed[i]
+ local kind = pi.kind
+ if kind == "axis" then
+ collected = apply_axis[pi.axis](collected)
+ logs.report("lpath", "% 10i : ax : %s",(collected and #collected) or 0,pi.axis)
+ elseif kind == "nodes" then
+ collected = apply_nodes(collected,pi.nodetest,pi.nodes)
+ logs.report("lpath", "% 10i : ns : %s",(collected and #collected) or 0,nodesettostring(pi.nodes,pi.nodetest))
+ elseif kind == "expression" then
+ collected = apply_expression(collected,pi.evaluator,order)
+ logs.report("lpath", "% 10i : ex : %s -> %s",(collected and #collected) or 0,pi.expression,pi.converted)
+ elseif kind == "finalizer" then
+ collected = pi.finalizer(collected)
+ logs.report("lpath", "% 10i : fi : %s : %s(%s)",(type(collected) == "table" and #collected) or 0,parsed.protocol or xml.defaultprotocol,pi.name,pi.arguments or "")
+ return collected
+ end
+ if not collected or #collected == 0 then
+ local pn = i < nofparsed and parsed[nofparsed]
+ if pn and pn.kind == "finalizer" then
+ collected = pn.finalizer(collected)
+ logs.report("lpath", "% 10i : fi : %s : %s(%s)",(type(collected) == "table" and #collected) or 0,parsed.protocol or xml.defaultprotocol,pn.name,pn.arguments or "")
+ return collected
+ end
+ return nil
+ end
+ end
+ return collected
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])
+local function normal_apply(list,parsed,nofparsed,order)
+ local collected = list
+ for i=1,nofparsed do
+ local pi = parsed[i]
+ local kind = pi.kind
+ if kind == "axis" then
+ local axis = pi.axis
+ if axis ~= "self" then
+ collected = apply_axis[axis](collected)
+ end
+ elseif kind == "nodes" then
+ collected = apply_nodes(collected,pi.nodetest,pi.nodes)
+ elseif kind == "expression" then
+ collected = apply_expression(collected,pi.evaluator,order)
+ elseif kind == "finalizer" then
+ return pi.finalizer(collected)
+ end
+ if not collected or #collected == 0 then
+ local pf = i < nofparsed and parsed[nofparsed].finalizer
+ if pf then
+ return pf(collected) -- can be anything
+ end
+ return nil
+ end
+ end
+ return collected
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
+local function parse_apply(list,pattern)
+ -- we avoid an extra call
+ local parsed = cache[pattern]
+ if parsed then
+ lpathcalls = lpathcalls + 1
+ lpathcached = lpathcached + 1
+ elseif type(pattern) == "table" then
+ lpathcalls = lpathcalls + 1
+ parsed = pattern
+ else
+ parsed = parse_pattern(pattern) or pattern
+ end
+ if not parsed then
+ return
+ end
+ local nofparsed = #parsed
+ if nofparsed == 0 then
+ return -- something is wrong
+ end
+ local one = list[1]
+ if not one then
+ return -- something is wrong
+ elseif not trace_lpath then
+ return normal_apply(list,parsed,nofparsed,one.mi)
+ elseif trace_lprofile then
+ return profiled_apply(list,parsed,nofparsed,one.mi)
+ else
+ return traced_apply(list,parsed,nofparsed,one.mi)
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
+-- internal (parsed)
-function xml.elements(root,pattern,reverse)
- return wrap(function() traverse(root, lpath(pattern), yield, reverse) end)
+expressions.child = function(e,pattern)
+ return parse_apply({ e },pattern) -- todo: cache
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)
+expressions.count = function(e,pattern)
+ local collected = parse_apply({ e },pattern) -- todo: cache
+ return (collected and #collected) or 0
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
+-- external
+
+expressions.oneof = function(s,...) -- slow
+ local t = {...} for i=1,#t do if s == t[i] then return true end end return false
+end
+expressions.error = function(str)
+ xml.error_handler("unknown function in lpath expression",tostring(str or "?"))
+ return false
+end
+expressions.undefined = function(s)
+ return s == nil
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)
+expressions.quit = function(s)
+ if s or s == nil then
+ quit_expression = true
+ end
+ return true
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)
+expressions.print = function(...)
+ print(...)
+ return true
end
---[[ldx--
-<p>We've now arrives at the functions that manipulate the tree.</p>
---ldx]]--
+expressions.contains = find
+expressions.find = find
+expressions.upper = upper
+expressions.lower = lower
+expressions.number = tonumber
+expressions.boolean = toboolean
-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
+-- user interface
+
+local function traverse(root,pattern,handle)
+ logs.report("xml","use 'xml.selection' instead for '%s'",pattern)
+ local collected = parse_apply({ root },pattern)
+ if collected then
+ for c=1,#collected do
+ local e = collected[c]
+ local r = e.__p__
+ handle(r,r.dt,e.ni)
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
- insert(d,k,element) -- untested
---~ elseif element.dt then
---~ for _,v in ipairs(element.dt) do -- i added
---~ insert(d,k,v)
---~ k = k + 1
---~ end
---~ end
- else
- local edt = element.dt
- if edt then
- for i=1,#edt do
- insert(d,k,edt[i])
- k = k + 1
- end
- end
- end
- end
+local function selection(root,pattern,handle)
+ local collected = parse_apply({ root },pattern)
+ if collected then
+ if handle then
+ for c=1,#collected do
+ handle(collected[c])
end
+ else
+ return collected
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
+xml.parse_parser = parser
+xml.parse_pattern = parse_pattern
+xml.parse_apply = parse_apply
+xml.traverse = traverse -- old method, r, d, k
+xml.selection = selection -- new method, simple handle
-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] = remove(m[2],m[3])
- end
- return deleted
+local lpath = parse_pattern
+
+xml.lpath = lpath
+
+function xml.cached_patterns()
+ return cache
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)
+-- generic function finalizer (independant namespace)
+
+local function dofunction(collected,fnc)
+ if collected then
+ local f = functions[fnc]
+ if f then
+ for c=1,#collected do
+ f(collected[c])
+ end
+ else
+ logs.report("xml","unknown function '%s'",fnc)
+ 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
+xml.finalizers.xml["function"] = dofunction
+xml.finalizers.tex["function"] = dofunction
+
+-- functions
+
+expressions.text = function(e,n)
+ local rdt = e.__p__.dt
+ return (rdt and rdt[n]) or ""
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 gmatch(attribute or "href","([^|]+)") do
- name = ek.at[a]
- if name then break end
+expressions.name = function(e,n) -- ns + tg
+ local found = false
+ n = tonumber(n) or 0
+ if n == 0 then
+ found = type(e) == "table" and e
+ elseif n < 0 then
+ local d, k = e.__p__.dt, e.ni
+ for i=k-1,1,-1 do
+ local di = d[i]
+ if type(di) == "table" then
+ if n == -1 then
+ found = di
+ break
+ else
+ n = n + 1
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)
+ else
+ local d, k = e.__p__.dt, e.ni
+ for i=k+1,#d,1 do
+ local di = d[i]
+ if type(di) == "table" then
+ if n == 1 then
+ found = di
+ break
+ else
+ n = n - 1
end
- xml.assign(d,k,xi)
end
end
end
- xml.each_element(xmldata, pattern, include)
+ 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
-function xml.strip_whitespace(root, pattern, nolines) -- strips all leading and trailing space !
- 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" then
-
- if str == "" then
- -- stripped
+expressions.tag = function(e,n) -- only tg
+ if not e then
+ return ""
+ else
+ local found = false
+ n = tonumber(n) or 0
+ if n == 0 then
+ found = (type(e) == "table") and e -- seems to fail
+ elseif n < 0 then
+ local d, k = e.__p__.dt, e.ni
+ for i=k-1,1,-1 do
+ local di = d[i]
+ if type(di) == "table" then
+ if n == -1 then
+ found = di
+ break
else
- if nolines then
- str = gsub(str,"[ \n\r\t]+"," ")
- end
- if str == "" then
- -- stripped
- else
- t[#t+1] = str
- end
+ n = n + 1
end
- else
- t[#t+1] = str
end
end
- d[k].dt = t
- end
- end)
-end
-
-local function rename_space(root, oldspace, newspace) -- fast variant
- local ndt = #root.dt
- 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
+ else
+ local d, k = e.__p__.dt, e.ni
+ for i=k+1,#d,1 do
+ local di = d[i]
+ if type(di) == "table" then
+ if n == 1 then
+ found = di
+ break
+ else
+ n = n - 1
+ end
end
end
- local edt = e.dt
- if edt then
- rename_space(edt, oldspace, newspace)
- end
end
+ return (found and found.tg) or ""
end
end
-xml.rename_space = rename_space
+--[[ldx--
+<p>This is the main filter function. It returns whatever is asked for.</p>
+--ldx]]--
-function xml.remap_tag(root, pattern, newtg)
- traverse(root, lpath(pattern), function(r,d,k)
- d[k].tg = newtg
- end)
+function xml.filter(root,pattern) -- no longer funny attribute handling here
+ return parse_apply({ root },pattern)
end
-function xml.remap_namespace(root, pattern, newns)
- traverse(root, lpath(pattern), function(r,d,k)
- d[k].ns = newns
- 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]) -- old method
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)
+for e in xml.collected(xml.load('text.xml'),"title") do
+ print(e) -- new one
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)
+</typing>
+--ldx]]--
+
+local wrap, yield = coroutine.wrap, coroutine.yield
+
+function xml.elements(root,pattern,reverse) -- r, d, k
+ local collected = parse_apply({ root },pattern)
+ if collected then
+ if reverse then
+ return wrap(function() for c=#collected,1,-1 do
+ local e = collected[c] local r = e.__p__ yield(r,r.dt,e.ni)
+ end end)
+ else
+ return wrap(function() for c=1,#collected do
+ local e = collected[c] local r = e.__p__ yield(r,r.dt,e.ni)
+ end end)
+ end
+ end
+ return wrap(function() 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
+function xml.collected(root,pattern,reverse) -- e
+ local collected = parse_apply({ root },pattern)
+ if collected then
+ if reverse then
+ return wrap(function() for c=#collected,1,-1 do yield(collected[c]) end end)
else
- found = true
+ return wrap(function() for c=1,#collected do yield(collected[c]) end end)
end
- return true
- end)
- return found
+ end
+ return wrap(function() end)
end
---[[ldx--
-<p>Here are a few synonyms.</p>
---ldx]]--
-xml.filters.position = xml.filters.index
+end -- of closure
-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
+do -- create closure to overcome 200 locals limit
-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
+if not modules then modules = { } end modules ['lxml-mis'] = {
+ 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"
+}
-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
+local concat = table.concat
+local type, next, tonumber, tostring, setmetatable, loadstring = type, next, tonumber, tostring, setmetatable, loadstring
+local format, gsub, match = string.format, string.gsub, string.match
+local lpegmatch = lpeg.match
--[[ldx--
-<p>The following helper functions best belong to the <t>lmxl-ini</t>
+<p>The following helper functions best belong to the <t>lxml-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)
+local function xmlgsub(t,old,new) -- will be replaced
local dt = t.dt
if dt then
for k=1,#dt do
@@ -5069,28 +6366,26 @@ function xml.gsub(t,old,new)
if type(v) == "string" then
dt[k] = gsub(v,old,new)
else
- xml.gsub(v,old,new)
+ xmlgsub(v,old,new)
end
end
end
end
+--~ xml.gsub = xmlgsub
+
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")
+ if d and k then
+ local dkm = d[k-1]
+ if dkm and type(dkm) == "string" then
+ local s = match(dkm,"\n(%s+)")
+ xmlgsub(dk,"\n"..rep(" ",#s),"\n")
+ end
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
+--~ xml.unescapes = { } for k,v in next, xml.escapes do xml.unescapes[v] = k end
--~ function xml.escaped (str) return (gsub(str,"(.)" , xml.escapes )) end
--~ function xml.unescaped(str) return (gsub(str,"(&.-;)", xml.unescapes)) end
@@ -5114,8 +6409,6 @@ 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)
@@ -5124,84 +6417,32 @@ local unescaped = Cs(normal * (special * normal)^0)
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
+xml.escaped_pattern = escaped
+xml.unescaped_pattern = unescaped
+xml.cleansed_pattern = cleansed
-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)
+function xml.escaped (str) return lpegmatch(escaped,str) end
+function xml.unescaped(str) return lpegmatch(unescaped,str) end
+function xml.cleansed (str) return lpegmatch(cleansed,str) end
+
+-- this might move
+
+function xml.fillin(root,pattern,str,check)
+ local e = xml.first(root,pattern)
+ if e then
+ local n = #e.dt
+ if not check or n == 0 or (n == 1 and e.dt[1] == "") then
+ e.dt = { str }
end
- else
- return ""
end
end
-function xml.statistics()
- return {
- lpathcalls = lpathcalls,
- lpathcached = lpathcached,
- }
-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.settrace("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)"))
-
end -- of closure
do -- create closure to overcome 200 locals limit
-if not modules then modules = { } end modules ['lxml-ent'] = {
+if not modules then modules = { } end modules ['lxml-aux'] = {
version = 1.001,
comment = "this module is the basis for the lxml-* ones",
author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
@@ -5209,457 +6450,836 @@ if not modules then modules = { } end modules ['lxml-ent'] = {
license = "see context related readme files"
}
-local type, next, tonumber, tostring, setmetatable, loadstring = type, next, tonumber, tostring, setmetatable, loadstring
-local format, gsub, find = string.format, string.gsub, string.find
-local utfchar = unicode.utf8.char
+-- not all functions here make sense anymore vbut we keep them for
+-- compatibility reasons
---[[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]]--
+local trace_manipulations = false trackers.register("lxml.manipulations", function(v) trace_manipulations = v end)
-xml.entities = xml.entities or { } -- xml.entity_handler == function
+local xmlparseapply, xmlconvert, xmlcopy, xmlname = xml.parse_apply, xml.convert, xml.copy, xml.name
+local xmlinheritedconvert = xml.inheritedconvert
-function xml.entity_handler(e)
- return format("[%s]",e)
-end
+local type = type
+local insert, remove = table.insert, table.remove
+local gmatch, gsub = string.gmatch, string.gsub
-local function toutf(s)
- return utfchar(tonumber(s,16))
+local function report(what,pattern,c,e)
+ logs.report("xml","%s element '%s' (root: '%s', position: %s, index: %s, pattern: %s)",what,xmlname(e),xmlname(e.__p__),c,e.ni,pattern)
end
-local 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 find(dk,"&#x.-;") then
- d[k] = gsub(dk,"&#x(.-);",toutf)
+local function withelements(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)
+ withelements(e,handle,depth+1)
+ end
end
- else
- utfize(dk)
end
end
end
-xml.utfize = utfize
+xml.withelements = withelements
-local function resolve(e) -- hex encoded always first, just to avoid mkii fallbacks
- if find(e,"^#x") then
- return utfchar(tonumber(e:sub(3),16))
- elseif find(e,"^#") then
- return utfchar(tonumber(e:sub(2)))
- else
- local ee = xml.entities[e] -- we cannot shortcut this one (is reloaded)
- if ee then
- return ee
- else
- local h = xml.entity_handler
- return (h and h(e)) or "&" .. e .. ";"
+function xml.withelement(e,n,handle) -- slow
+ if e and n ~= 0 and handle then
+ local edt = e.dt
+ if edt then
+ if n > 0 then
+ for i=1,#edt do
+ local ei = edt[i]
+ if type(ei) == "table" then
+ if n == 1 then
+ handle(ei)
+ return
+ else
+ n = n - 1
+ end
+ end
+ end
+ elseif n < 0 then
+ for i=#edt,1,-1 do
+ local ei = edt[i]
+ if type(ei) == "table" then
+ if n == -1 then
+ handle(ei)
+ return
+ else
+ n = n + 1
+ end
+ end
+ end
+ end
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 find(dk,"&.-;") then
- d[k] = gsub(dk,"&(.-);",resolve)
- end
- else
- resolve_entities(dk)
+xml.elements_only = xml.collected
+
+function xml.each_element(root,pattern,handle,reverse)
+ local collected = xmlparseapply({ root },pattern)
+ if collected then
+ if reverse then
+ for c=#collected,1,-1 do
+ handle(collected[c])
+ end
+ else
+ for c=1,#collected do
+ handle(collected[c])
end
end
+ return collected
end
end
-xml.resolve_entities = resolve_entities
+xml.process_elements = xml.each_element
-function xml.utfize_text(str)
- if find(str,"&#") then
- return (gsub(str,"&#x(.-);",toutf))
- else
- return str
+function xml.process_attributes(root,pattern,handle)
+ local collected = xmlparseapply({ root },pattern)
+ if collected and handle then
+ for c=1,#collected do
+ handle(collected[c].at)
+ end
end
+ return collected
end
-function xml.resolve_text_entities(str) -- maybe an lpeg. maybe resolve inline
- if find(str,"&") then
- return (gsub(str,"&(.-);",resolve))
- else
- return str
- end
+--[[ldx--
+<p>The following functions collect elements and texts.</p>
+--ldx]]--
+
+-- are these still needed -> lxml-cmp.lua
+
+function xml.collect_elements(root, pattern)
+ return xmlparseapply({ root },pattern)
end
-function xml.show_text_entities(str)
- if find(str,"&") then
- return (gsub(str,"&(.-);","[%1]"))
- else
- return str
+function xml.collect_texts(root, pattern, flatten) -- todo: variant with handle
+ local collected = xmlparseapply({ root },pattern)
+ if collected and flatten then
+ local xmltostring = xml.tostring
+ for c=1,#collected do
+ collected[c] = xmltostring(collected[c].dt)
+ end
end
+ return collected or { }
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 next, documententities do
- allentities[k] = v
+function xml.collect_tags(root, pattern, nonamespace)
+ local collected = xmlparseapply({ root },pattern)
+ if collected then
+ local t = { }
+ for c=1,#collected do
+ local e = collected[c]
+ local ns, tg = e.ns, e.tg
+ if nonamespace then
+ t[#t+1] = tg
+ elseif ns == "" then
+ t[#t+1] = tg
+ else
+ t[#t+1] = ns .. ":" .. tg
+ end
end
+ return t
end
end
+--[[ldx--
+<p>We've now arrived at the functions that manipulate the tree.</p>
+--ldx]]--
-end -- of closure
+local no_root = { no_root = true }
-do -- create closure to overcome 200 locals limit
+function xml.redo_ni(d)
+ for k=1,#d do
+ local dk = d[k]
+ if type(dk) == "table" then
+ dk.ni = k
+ end
+ end
+end
-if not modules then modules = { } end modules ['lxml-mis'] = {
- 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"
-}
+local function xmltoelement(whatever,root)
+ if not whatever then
+ return nil
+ end
+ local element
+ if type(whatever) == "string" then
+ element = xmlinheritedconvert(whatever,root)
+ else
+ element = whatever -- we assume a table
+ end
+ if element.error then
+ return whatever -- string
+ end
+ if element then
+ --~ if element.ri then
+ --~ element = element.dt[element.ri].dt
+ --~ else
+ --~ element = element.dt
+ --~ end
+ end
+ return element
+end
-local concat = table.concat
-local type, next, tonumber, tostring, setmetatable, loadstring = type, next, tonumber, tostring, setmetatable, loadstring
-local format, gsub = string.format, string.gsub
+xml.toelement = xmltoelement
---[[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]]--
+local function copiedelement(element,newparent)
+ if type(element) == "string" then
+ return element
+ else
+ element = xmlcopy(element).dt
+ if newparent and type(element) == "table" then
+ element.__p__ = newparent
+ end
+ return element
+ end
+end
-function xml.gsub(t,old,new)
- local dt = t.dt
- if dt then
- for k=1,#dt do
- local v = dt[k]
- if type(v) == "string" then
- dt[k] = gsub(v,old,new)
- else
- xml.gsub(v,old,new)
+function xml.delete_element(root,pattern)
+ local collected = xmlparseapply({ root },pattern)
+ if collected then
+ for c=1,#collected do
+ local e = collected[c]
+ local p = e.__p__
+ if p then
+ if trace_manipulations then
+ report('deleting',pattern,c,e)
+ end
+ local d = p.dt
+ remove(d,e.ni)
+ xml.redo_ni(d) -- can be made faster and inlined
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")
+function xml.replace_element(root,pattern,whatever)
+ local element = root and xmltoelement(whatever,root)
+ local collected = element and xmlparseapply({ root },pattern)
+ if collected then
+ for c=1,#collected do
+ local e = collected[c]
+ local p = e.__p__
+ if p then
+ if trace_manipulations then
+ report('replacing',pattern,c,e)
+ end
+ local d = p.dt
+ d[e.ni] = copiedelement(element,p)
+ xml.redo_ni(d) -- probably not needed
+ end
+ end
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)
+local function inject_element(root,pattern,whatever,prepend)
+ local element = root and xmltoelement(whatever,root)
+ local collected = element and xmlparseapply({ root },pattern)
+ if collected then
+ for c=1,#collected do
+ local e = collected[c]
+ local r = e.__p__
+ local d, k, rri = r.dt, e.ni, r.ri
+ local edt = (rri and d[rri].dt) or (d and d[k] and d[k].dt)
+ if edt then
+ local be, af
+ local cp = copiedelement(element,e)
+ if prepend then
+ be, af = cp, edt
+ else
+ be, af = edt, cp
+ end
+ for i=1,#af do
+ be[#be+1] = af[i]
+ end
+ if rri then
+ r.dt[rri].dt = be
+ else
+ d[k].dt = be
+ end
+ xml.redo_ni(d)
+ end
+ end
+ end
end
---~ xml.escapes = { ['&'] = '&amp;', ['<'] = '&lt;', ['>'] = '&gt;', ['"'] = '&quot;' }
---~ xml.unescapes = { } for k,v in pairs(xml.escapes) do xml.unescapes[v] = k end
+local function insert_element(root,pattern,whatever,before) -- todo: element als functie
+ local element = root and xmltoelement(whatever,root)
+ local collected = element and xmlparseapply({ root },pattern)
+ if collected then
+ for c=1,#collected do
+ local e = collected[c]
+ local r = e.__p__
+ local d, k = r.dt, e.ni
+ if not before then
+ k = k + 1
+ end
+ insert(d,k,copiedelement(element,r))
+ xml.redo_ni(d)
+ end
+ end
+end
---~ function xml.escaped (str) return (gsub(str,"(.)" , xml.escapes )) end
---~ function xml.unescaped(str) return (gsub(str,"(&.-;)", xml.unescapes)) end
---~ function xml.cleansed (str) return (gsub(str,"<.->" , '' )) end -- "%b<>"
+xml.insert_element = insert_element
+xml.insert_element_after = insert_element
+xml.insert_element_before = function(r,p,e) insert_element(r,p,e,true) end
+xml.inject_element = inject_element
+xml.inject_element_after = inject_element
+xml.inject_element_before = function(r,p,e) inject_element(r,p,e,true) end
-local P, S, R, C, V, Cc, Cs = lpeg.P, lpeg.S, lpeg.R, lpeg.C, lpeg.V, lpeg.Cc, lpeg.Cs
+local function include(xmldata,pattern,attribute,recursive,loaddata)
+ -- parse="text" (default: xml), encoding="" (todo)
+ -- attribute = attribute or 'href'
+ pattern = pattern or 'include'
+ loaddata = loaddata or io.loaddata
+ local collected = xmlparseapply({ xmldata },pattern)
+ if collected then
+ for c=1,#collected do
+ local ek = collected[c]
+ local name = nil
+ local ekdt = ek.dt
+ local ekat = ek.at
+ local epdt = ek.__p__.dt
+ if not attribute or attribute == "" then
+ name = (type(ekdt) == "table" and ekdt[1]) or ekdt -- ckeck, probably always tab or str
+ end
+ if not name then
+ for a in gmatch(attribute or "href","([^|]+)") do
+ name = ekat[a]
+ if name then break end
+ end
+ end
+ local data = (name and name ~= "" and loaddata(name)) or ""
+ if data == "" then
+ epdt[ek.ni] = "" -- xml.empty(d,k)
+ elseif ekat["parse"] == "text" then
+ -- for the moment hard coded
+ epdt[ek.ni] = xml.escaped(data) -- d[k] = xml.escaped(data)
+ else
+--~ local settings = xmldata.settings
+--~ settings.parent_root = xmldata -- to be tested
+--~ local xi = xmlconvert(data,settings)
+ local xi = xmlinheritedconvert(data,xmldata)
+ if not xi then
+ epdt[ek.ni] = "" -- xml.empty(d,k)
+ else
+ if recursive then
+ include(xi,pattern,attribute,recursive,loaddata)
+ end
+ epdt[ek.ni] = xml.body(xi) -- xml.assign(d,k,xi)
+ end
+ end
+ end
+ end
+end
--- 100 * 2500 * "oeps< oeps> oeps&" : gsub:lpeg|lpeg|lpeg
---
--- 1021:0335:0287:0247
+xml.include = include
--- 10 * 1000 * "oeps< oeps> oeps& asfjhalskfjh alskfjh alskfjh alskfjh ;al J;LSFDJ"
---
--- 1559:0257:0288:0190 (last one suggested by roberto)
+--~ local function manipulate(xmldata,pattern,manipulator) -- untested and might go away
+--~ local collected = xmlparseapply({ xmldata },pattern)
+--~ if collected then
+--~ local xmltostring = xml.tostring
+--~ for c=1,#collected do
+--~ local e = collected[c]
+--~ local data = manipulator(xmltostring(e))
+--~ if data == "" then
+--~ epdt[e.ni] = ""
+--~ else
+--~ local xi = xmlinheritedconvert(data,xmldata)
+--~ if not xi then
+--~ epdt[e.ni] = ""
+--~ else
+--~ epdt[e.ni] = xml.body(xi) -- xml.assign(d,k,xi)
+--~ end
+--~ end
+--~ end
+--~ end
+--~ end
--- 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)
+--~ xml.manipulate = manipulate
--- 100 * 1000 * "oeps&lt; oeps&gt; oeps&amp;" : gsub:lpeg == 0153:0280:0151:0080 (last one by roberto)
+function xml.strip_whitespace(root, pattern, nolines) -- strips all leading and trailing space !
+ local collected = xmlparseapply({ root },pattern)
+ if collected then
+ for i=1,#collected do
+ local e = collected[i]
+ local edt = e.dt
+ if edt then
+ local t = { }
+ for i=1,#edt do
+ local str = edt[i]
+ if type(str) == "string" then
+ if str == "" then
+ -- stripped
+ else
+ if nolines then
+ str = gsub(str,"[ \n\r\t]+"," ")
+ end
+ if str == "" then
+ -- stripped
+ else
+ t[#t+1] = str
+ end
+ end
+ else
+ --~ str.ni = i
+ t[#t+1] = str
+ end
+ end
+ e.dt = t
+ end
+ end
+ end
+end
--- 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)
+function xml.strip_whitespace(root, pattern, nolines, anywhere) -- strips all leading and trailing spacing
+ local collected = xmlparseapply({ root },pattern) -- beware, indices no longer are valid now
+ if collected then
+ for i=1,#collected do
+ local e = collected[i]
+ local edt = e.dt
+ if edt then
+ if anywhere then
+ local t = { }
+ for e=1,#edt do
+ local str = edt[e]
+ if type(str) ~= "string" then
+ t[#t+1] = str
+ elseif str ~= "" then
+ -- todo: lpeg for each case
+ if nolines then
+ str = gsub(str,"%s+"," ")
+ end
+ str = gsub(str,"^%s*(.-)%s*$","%1")
+ if str ~= "" then
+ t[#t+1] = str
+ end
+ end
+ end
+ e.dt = t
+ else
+ -- we can assume a regular sparse xml table with no successive strings
+ -- otherwise we should use a while loop
+ if #edt > 0 then
+ -- strip front
+ local str = edt[1]
+ if type(str) ~= "string" then
+ -- nothing
+ elseif str == "" then
+ remove(edt,1)
+ else
+ if nolines then
+ str = gsub(str,"%s+"," ")
+ end
+ str = gsub(str,"^%s+","")
+ if str == "" then
+ remove(edt,1)
+ else
+ edt[1] = str
+ end
+ end
+ end
+ if #edt > 1 then
+ -- strip end
+ local str = edt[#edt]
+ if type(str) ~= "string" then
+ -- nothing
+ elseif str == "" then
+ remove(edt)
+ else
+ if nolines then
+ str = gsub(str,"%s+"," ")
+ end
+ str = gsub(str,"%s+$","")
+ if str == "" then
+ remove(edt)
+ else
+ edt[#edt] = str
+ end
+ end
+ end
+ end
+ end
+ end
+ end
+end
--- 100 * 5000 * "oeps <oeps bla='oeps' foo='bar'> oeps </oeps> oeps " : gsub:lpeg == 623:501 msec (short tags, less difference)
+local function rename_space(root, oldspace, newspace) -- fast variant
+ local ndt = #root.dt
+ 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_space(edt, oldspace, newspace)
+ end
+ end
+ end
+end
-local cleansed = Cs(((P("<") * (1-P(">"))^0 * P(">"))/"" + 1)^0)
+xml.rename_space = rename_space
-xml.escaped_pattern = escaped
-xml.unescaped_pattern = unescaped
-xml.cleansed_pattern = cleansed
+function xml.remap_tag(root, pattern, newtg)
+ local collected = xmlparseapply({ root },pattern)
+ if collected then
+ for c=1,#collected do
+ collected[c].tg = newtg
+ end
+ end
+end
-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
+function xml.remap_namespace(root, pattern, newns)
+ local collected = xmlparseapply({ root },pattern)
+ if collected then
+ for c=1,#collected do
+ collected[c].ns = newns
+ end
+ 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)
+function xml.check_namespace(root, pattern, newns)
+ local collected = xmlparseapply({ root },pattern)
+ if collected then
+ for c=1,#collected do
+ local e = collected[c]
+ if (not e.rn or e.rn == "") and e.ns == "" then
+ e.rn = newns
+ end
end
- if lastseparator then
- return concat(result,separator or "",1,#result-1) .. (lastseparator or "") .. result[#result]
- else
- return concat(result,separator)
+ end
+end
+
+function xml.remap_name(root, pattern, newtg, newns, newrn)
+ local collected = xmlparseapply({ root },pattern)
+ if collected then
+ for c=1,#collected do
+ local e = collected[c]
+ e.tg, e.ns, e.rn = newtg, newns, newrn
end
- else
- return ""
end
end
+--[[ldx--
+<p>Here are a few synonyms.</p>
+--ldx]]--
+
+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
+
end -- of closure
do -- create closure to overcome 200 locals limit
-if not modules then modules = { } end modules ['trac-tra'] = {
+if not modules then modules = { } end modules ['lxml-xml'] = {
version = 1.001,
- comment = "companion to luat-lib.tex",
+ 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"
}
--- the <anonymous> tag is kind of generic and used for functions that are not
--- bound to a variable, like node.new, node.copy etc (contrary to for instance
--- node.has_attribute which is bound to a has_attribute local variable in mkiv)
+local finalizers = xml.finalizers.xml
+local xmlfilter = xml.filter -- we could inline this one for speed
+local xmltostring = xml.tostring
+local xmlserialize = xml.serialize
-debugger = debugger or { }
+local function first(collected) -- wrong ?
+ return collected and collected[1]
+end
-local counters = { }
-local names = { }
-local getinfo = debug.getinfo
-local format, find, lower, gmatch = string.format, string.find, string.lower, string.gmatch
+local function last(collected)
+ return collected and collected[#collected]
+end
--- one
+local function all(collected)
+ return collected
+end
-local function hook()
- local f = getinfo(2,"f").func
- local n = getinfo(2,"Sn")
--- if n.what == "C" and n.name then print (n.namewhat .. ': ' .. n.name) end
- if f then
- local cf = counters[f]
- if cf == nil then
- counters[f] = 1
- names[f] = n
- else
- counters[f] = cf + 1
+local function reverse(collected)
+ if collected then
+ local reversed = { }
+ for c=#collected,1,-1 do
+ reversed[#reversed+1] = collected[c]
end
+ return reversed
end
end
-local function getname(func)
- local n = names[func]
- if n then
- if n.what == "C" then
- return n.name or '<anonymous>'
- 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 format("%s : %s : %s", n.short_src or "unknown source", n.linedefined or "--", name)
- end
- else
- return "unknown"
+
+local function attribute(collected,name)
+ if collected and #collected > 0 then
+ local at = collected[1].at
+ return at and at[name]
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
- -- table.sort(counters)
- for func, count in pairs(counters) do
- if count > threshold then
- local name = getname(func)
- if not name:find("for generator") then
- printer(format("%8i %s", count, name))
- total = total + count
- end
- end
- grandtotal = grandtotal + count
- functions = functions + 1
- end
- printer(format("functions: %s, total: %s, grand total: %s, threshold: %s\n", functions, total, grandtotal, threshold))
+
+local function att(id,name)
+ local at = id.at
+ return at and at[name]
end
--- two
+local function count(collected)
+ return (collected and #collected) or 0
+end
---~ local function hook()
---~ local n = getinfo(2)
---~ if n.what=="C" and not n.name then
---~ local f = tostring(debug.traceback())
---~ local cf = counters[f]
---~ if cf == nil then
---~ counters[f] = 1
---~ names[f] = n
---~ else
---~ counters[f] = cf + 1
---~ end
---~ 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
---~ -- table.sort(counters)
---~ for func, count in pairs(counters) do
---~ if count > threshold then
---~ printer(format("%8i %s", count, func))
---~ total = total + count
---~ end
---~ grandtotal = grandtotal + count
---~ functions = functions + 1
---~ end
---~ printer(format("functions: %s, total: %s, grand total: %s, threshold: %s\n", functions, total, grandtotal, threshold))
---~ end
+local function position(collected,n)
+ if collected then
+ n = tonumber(n) or 0
+ if n < 0 then
+ return collected[#collected + n + 1]
+ elseif n > 0 then
+ return collected[n]
+ else
+ return collected[1].mi or 0
+ end
+ end
+end
--- rest
+local function match(collected)
+ return (collected and collected[1].mi) or 0 -- match
+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()
+local function index(collected)
+ if collected then
+ return collected[1].ni
end
end
-function debugger.enable()
- debug.sethook(hook,"c")
+local function attributes(collected,arguments)
+ if collected then
+ local at = collected[1].at
+ if arguments then
+ return at[arguments]
+ elseif next(at) then
+ return at -- all of them
+ end
+ end
end
-function debugger.disable()
- debug.sethook()
---~ counters[debug.getinfo(2,"f").func] = nil
+local function chainattribute(collected,arguments) -- todo: optional levels
+ if collected then
+ local e = collected[1]
+ while e do
+ local at = e.at
+ if at then
+ local a = at[arguments]
+ if a then
+ return a
+ end
+ else
+ break -- error
+ end
+ e = e.__p__
+ end
+ end
+ return ""
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
+local function raw(collected) -- hybrid
+ if collected then
+ local e = collected[1] or collected
+ return (e and xmlserialize(e)) or "" -- only first as we cannot concat function
else
- function debugger.tracing() return false end ; return false
+ return ""
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)
-
-trackers = trackers or { }
+local function text(collected) -- hybrid
+ if collected then
+ local e = collected[1] or collected
+ return (e and xmltostring(e.dt)) or ""
+ else
+ return ""
+ end
+end
-local data, done = { }, { }
+local function texts(collected)
+ if collected then
+ local t = { }
+ for c=1,#collected do
+ local e = collection[c]
+ if e and e.dt then
+ t[#t+1] = e.dt
+ end
+ end
+ return t
+ end
+end
-local function set(what,value)
- if type(what) == "string" then
- what = aux.settings_to_array(what)
+local function tag(collected,n)
+ if collected then
+ local c
+ if n == 0 or not n then
+ c = collected[1]
+ elseif n > 1 then
+ c = collected[n]
+ else
+ c = collected[#collected-n+1]
+ end
+ return c and c.tg
end
- for i=1,#what do
- local w = what[i]
- for d, f in next, data do
- if done[d] then
- -- prevent recursion due to wildcards
- elseif find(d,w) then
- done[d] = true
- for i=1,#f do
- f[i](value)
- end
+end
+
+local function name(collected,n)
+ if collected then
+ local c
+ if n == 0 or not n then
+ c = collected[1]
+ elseif n > 1 then
+ c = collected[n]
+ else
+ c = collected[#collected-n+1]
+ end
+ if c then
+ if c.ns == "" then
+ return c.tg
+ else
+ return c.ns .. ":" .. c.tg
end
end
end
end
-local function reset()
- for d, f in next, data do
- for i=1,#f do
- f[i](false)
+local function tags(collected,nonamespace)
+ if collected then
+ local t = { }
+ for c=1,#collected do
+ local e = collected[c]
+ local ns, tg = e.ns, e.tg
+ if nonamespace or ns == "" then
+ t[#t+1] = tg
+ else
+ t[#t+1] = ns .. ":" .. tg
+ end
end
+ return t
end
end
-function trackers.register(what,...)
- what = lower(what)
- local w = data[what]
- if not w then
- w = { }
- data[what] = w
- end
- for _, fnc in next, { ... } do
- local typ = type(fnc)
- if typ == "function" then
- w[#w+1] = fnc
- elseif typ == "string" then
- w[#w+1] = function(value) set(fnc,value,nesting) end
+local function empty(collected)
+ if collected then
+ for c=1,#collected do
+ local e = collected[c]
+ if e then
+ local edt = e.dt
+ if edt then
+ local n = #edt
+ if n == 1 then
+ local edk = edt[1]
+ local typ = type(edk)
+ if typ == "table" then
+ return false
+ elseif edk ~= "" then -- maybe an extra tester for spacing only
+ return false
+ end
+ elseif n > 1 then
+ return false
+ end
+ end
+ end
end
end
+ return true
end
-function trackers.enable(what)
- done = { }
- set(what,true)
+finalizers.first = first
+finalizers.last = last
+finalizers.all = all
+finalizers.reverse = reverse
+finalizers.elements = all
+finalizers.default = all
+finalizers.attribute = attribute
+finalizers.att = att
+finalizers.count = count
+finalizers.position = position
+finalizers.match = match
+finalizers.index = index
+finalizers.attributes = attributes
+finalizers.chainattribute = chainattribute
+finalizers.text = text
+finalizers.texts = texts
+finalizers.tag = tag
+finalizers.name = name
+finalizers.tags = tags
+finalizers.empty = empty
+
+-- shortcuts -- we could support xmlfilter(id,pattern,first)
+
+function xml.first(id,pattern)
+ return first(xmlfilter(id,pattern))
end
-function trackers.disable(what)
- done = { }
- if not what or what == "" then
- trackers.reset(what)
+function xml.last(id,pattern)
+ return last(xmlfilter(id,pattern))
+end
+
+function xml.count(id,pattern)
+ return count(xmlfilter(id,pattern))
+end
+
+function xml.attribute(id,pattern,a,default)
+ return attribute(xmlfilter(id,pattern),a,default)
+end
+
+function xml.raw(id,pattern)
+ if pattern then
+ return raw(xmlfilter(id,pattern))
else
- set(what,false)
+ return raw(id)
end
end
-function trackers.reset(what)
- done = { }
- reset()
+function xml.text(id,pattern)
+ if pattern then
+ -- return text(xmlfilter(id,pattern))
+ local collected = xmlfilter(id,pattern)
+ return (collected and xmltostring(collected[1].dt)) or ""
+ elseif id then
+ -- return text(id)
+ return xmltostring(id.dt) or ""
+ else
+ return ""
+ end
end
-function trackers.list() -- pattern
- local list = table.sortedkeys(data)
- local user, system = { }, { }
- for l=1,#list do
- local what = list[l]
- if find(what,"^%*") then
- system[#system+1] = what
- else
- user[#user+1] = what
- end
- end
- return user, system
+xml.content = text
+
+function xml.position(id,pattern,n) -- element
+ return position(xmlfilter(id,pattern),n)
+end
+
+function xml.match(id,pattern) -- number
+ return match(xmlfilter(id,pattern))
+end
+
+function xml.empty(id,pattern)
+ return empty(xmlfilter(id,pattern))
end
+xml.all = xml.filter
+xml.index = xml.position
+xml.found = xml.filter
+
end -- of closure
@@ -5667,7 +7287,7 @@ do -- create closure to overcome 200 locals limit
if not modules then modules = { } end modules ['luat-env'] = {
version = 1.001,
- comment = "companion to luat-lib.tex",
+ comment = "companion to luat-lib.mkiv",
author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
copyright = "PRAGMA ADE / ConTeXt Development Team",
license = "see context related readme files"
@@ -5679,10 +7299,10 @@ if not modules then modules = { } end modules ['luat-env'] = {
-- evolved before bytecode arrays were available and so a lot of
-- code has disappeared already.
-local trace_verbose = false trackers.register("resolvers.verbose", function(v) trace_verbose = v end)
-local trace_locating = false trackers.register("resolvers.locating", function(v) trace_locating = v trackers.enable("resolvers.verbose") end)
+local trace_locating = false trackers.register("resolvers.locating", function(v) trace_locating = v end)
-local format = string.format
+local format, sub, match, gsub, find = string.format, string.sub, string.match, string.gsub, string.find
+local unquote, quote = string.unquote, string.quote
-- precautions
@@ -5716,13 +7336,14 @@ if not environment.jobname then environ
function environment.initialize_arguments(arg)
local arguments, files = { }, { }
environment.arguments, environment.files, environment.sortedflags = arguments, files, nil
- for index, argument in pairs(arg) do
+ for index=1,#arg do
+ local argument = arg[index]
if index > 0 then
- local flag, value = argument:match("^%-+(.+)=(.-)$")
+ local flag, value = match(argument,"^%-+(.-)=(.-)$")
if flag then
- arguments[flag] = string.unquote(value or "")
+ arguments[flag] = unquote(value or "")
else
- flag = argument:match("^%-+(.+)")
+ flag = match(argument,"^%-+(.+)")
if flag then
arguments[flag] = true
else
@@ -5749,25 +7370,30 @@ function environment.argument(name,partial)
return arguments[name]
elseif partial then
if not sortedflags then
- sortedflags = { }
- for _,v in pairs(table.sortedkeys(arguments)) do
- sortedflags[#sortedflags+1] = "^" .. v
+ sortedflags = table.sortedkeys(arguments)
+ for k=1,#sortedflags do
+ sortedflags[k] = "^" .. sortedflags[k]
end
environment.sortedflags = sortedflags
end
-- example of potential clash: ^mode ^modefile
- for _,v in ipairs(sortedflags) do
- if name:find(v) then
- return arguments[v:sub(2,#v)]
+ for k=1,#sortedflags do
+ local v = sortedflags[k]
+ if find(name,v) then
+ return arguments[sub(v,2,#v)]
end
end
end
return nil
end
+environment.argument("x",true)
+
function environment.split_arguments(separator) -- rather special, cut-off before separator
local done, before, after = false, { }, { }
- for _,v in ipairs(environment.original_arguments) do
+ local original_arguments = environment.original_arguments
+ for k=1,#original_arguments do
+ local v = original_arguments[k]
if not done and v == separator then
done = true
elseif done then
@@ -5784,16 +7410,17 @@ function environment.reconstruct_commandline(arg,noquote)
if noquote and #arg == 1 then
local a = arg[1]
a = resolvers.resolve(a)
- a = a:unquote()
+ a = unquote(a)
return a
- elseif next(arg) then
+ elseif #arg > 0 then
local result = { }
- for _,a in ipairs(arg) do -- ipairs 1 .. #n
+ for i=1,#arg do
+ local a = arg[i]
a = resolvers.resolve(a)
- a = a:unquote()
- a = a:gsub('"','\\"') -- tricky
- if a:find(" ") then
- result[#result+1] = a:quote()
+ a = unquote(a)
+ a = gsub(a,'"','\\"') -- tricky
+ if find(a," ") then
+ result[#result+1] = quote(a)
else
result[#result+1] = a
end
@@ -5806,17 +7433,18 @@ end
if arg then
- -- new, reconstruct quoted snippets (maybe better just remnove the " then and add them later)
+ -- new, reconstruct quoted snippets (maybe better just remove the " then and add them later)
local newarg, instring = { }, false
- for index, argument in ipairs(arg) do
- if argument:find("^\"") then
- newarg[#newarg+1] = argument:gsub("^\"","")
- if not argument:find("\"$") then
+ for index=1,#arg do
+ local argument = arg[index]
+ if find(argument,"^\"") then
+ newarg[#newarg+1] = gsub(argument,"^\"","")
+ if not find(argument,"\"$") then
instring = true
end
- elseif argument:find("\"$") then
- newarg[#newarg] = newarg[#newarg] .. " " .. argument:gsub("\"$","")
+ elseif find(argument,"\"$") then
+ newarg[#newarg] = newarg[#newarg] .. " " .. gsub(argument,"\"$","")
instring = false
elseif instring then
newarg[#newarg] = newarg[#newarg] .. " " .. argument
@@ -5871,12 +7499,12 @@ function environment.luafilechunk(filename) -- used for loading lua bytecode in
filename = file.replacesuffix(filename, "lua")
local fullname = environment.luafile(filename)
if fullname and fullname ~= "" then
- if trace_verbose then
+ if trace_locating then
logs.report("fileio","loading file %s", fullname)
end
return environment.loadedluacode(fullname)
else
- if trace_verbose then
+ if trace_locating then
logs.report("fileio","unknown file %s", filename)
end
return nil
@@ -5896,7 +7524,7 @@ function environment.loadluafile(filename, version)
-- when not overloaded by explicit suffix we look for a luc file first
local fullname = (lucname and environment.luafile(lucname)) or ""
if fullname ~= "" then
- if trace_verbose then
+ if trace_locating then
logs.report("fileio","loading %s", fullname)
end
chunk = loadfile(fullname) -- this way we don't need a file exists check
@@ -5914,7 +7542,7 @@ function environment.loadluafile(filename, version)
if v == version then
return true
else
- if trace_verbose then
+ if trace_locating then
logs.report("fileio","version mismatch for %s: lua=%s, luc=%s", filename, v, version)
end
environment.loadluafile(filename)
@@ -5925,12 +7553,12 @@ function environment.loadluafile(filename, version)
end
fullname = (luaname and environment.luafile(luaname)) or ""
if fullname ~= "" then
- if trace_verbose then
+ if trace_locating then
logs.report("fileio","loading %s", fullname)
end
chunk = loadfile(fullname) -- this way we don't need a file exists check
if not chunk then
- if verbose then
+ if trace_locating then
logs.report("fileio","unknown file %s", filename)
end
else
@@ -5948,7 +7576,7 @@ do -- create closure to overcome 200 locals limit
if not modules then modules = { } end modules ['trac-inf'] = {
version = 1.001,
- comment = "companion to luat-lib.tex",
+ comment = "companion to trac-inf.mkiv",
author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
copyright = "PRAGMA ADE / ConTeXt Development Team",
license = "see context related readme files"
@@ -5973,6 +7601,14 @@ function statistics.hastimer(instance)
return instance and instance.starttime
end
+function statistics.resettiming(instance)
+ if not instance then
+ notimer = { timing = 0, loadtime = 0 }
+ else
+ instance.timing, instance.loadtime = 0, 0
+ end
+end
+
function statistics.starttiming(instance)
if not instance then
notimer = { }
@@ -5987,6 +7623,8 @@ function statistics.starttiming(instance)
if not instance.loadtime then
instance.loadtime = 0
end
+ else
+--~ logs.report("system","nested timing (%s)",tostring(instance))
end
instance.timing = it + 1
end
@@ -6032,6 +7670,12 @@ function statistics.elapsedindeed(instance)
return t > statistics.threshold
end
+function statistics.elapsedseconds(instance,rest) -- returns nil if 0 seconds
+ if statistics.elapsedindeed(instance) then
+ return format("%s seconds %s", statistics.elapsedtime(instance),rest or "")
+ end
+end
+
-- general function
function statistics.register(tag,fnc)
@@ -6110,14 +7754,32 @@ function statistics.timed(action,report)
report("total runtime: %s",statistics.elapsedtime(timer))
end
+-- where, not really the best spot for this:
+
+commands = commands or { }
+
+local timer
+
+function commands.resettimer()
+ statistics.resettiming(timer)
+ statistics.starttiming(timer)
+end
+
+function commands.elapsedtime()
+ statistics.stoptiming(timer)
+ tex.sprint(statistics.elapsedtime(timer))
+end
+
+commands.resettimer()
+
end -- of closure
do -- create closure to overcome 200 locals limit
-if not modules then modules = { } end modules ['luat-log'] = {
+if not modules then modules = { } end modules ['trac-log'] = {
version = 1.001,
- comment = "companion to luat-lib.tex",
+ comment = "companion to trac-log.mkiv",
author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
copyright = "PRAGMA ADE / ConTeXt Development Team",
license = "see context related readme files"
@@ -6125,7 +7787,11 @@ if not modules then modules = { } end modules ['luat-log'] = {
-- this is old code that needs an overhaul
-local write_nl, write, format = texio.write_nl or print, texio.write or io.write, string.format
+--~ io.stdout:setvbuf("no")
+--~ io.stderr:setvbuf("no")
+
+local write_nl, write = texio.write_nl or print, texio.write or io.write
+local format, gmatch = string.format, string.gmatch
local texcount = tex and tex.count
if texlua then
@@ -6206,25 +7872,48 @@ function logs.tex.line(fmt,...) -- new
end
end
+--~ function logs.tex.start_page_number()
+--~ local real, user, sub = texcount.realpageno, texcount.userpageno, texcount.subpageno
+--~ if real > 0 then
+--~ if user > 0 then
+--~ if sub > 0 then
+--~ write(format("[%s.%s.%s",real,user,sub))
+--~ else
+--~ write(format("[%s.%s",real,user))
+--~ end
+--~ else
+--~ write(format("[%s",real))
+--~ end
+--~ else
+--~ write("[-")
+--~ end
+--~ end
+
+--~ function logs.tex.stop_page_number()
+--~ write("]")
+--~ end
+
+local real, user, sub
+
function logs.tex.start_page_number()
- local real, user, sub = texcount.realpageno, texcount.userpageno, texcount.subpageno
+ real, user, sub = texcount.realpageno, texcount.userpageno, texcount.subpageno
+end
+
+function logs.tex.stop_page_number()
if real > 0 then
if user > 0 then
if sub > 0 then
- write(format("[%s.%s.%s",real,user,sub))
+ logs.report("pages", "flushing realpage %s, userpage %s, subpage %s",real,user,sub)
else
- write(format("[%s.%s",real,user))
+ logs.report("pages", "flushing realpage %s, userpage %s",real,user)
end
else
- write(format("[%s",real))
+ logs.report("pages", "flushing realpage %s",real)
end
else
- write("[-")
+ logs.report("pages", "flushing page")
end
-end
-
-function logs.tex.stop_page_number()
- write("]")
+ io.flush()
end
logs.tex.report_job_stat = statistics.show_job_stat
@@ -6324,7 +8013,7 @@ end
function logs.setprogram(_name_,_banner_,_verbose_)
name, banner = _name_, _banner_
if _verbose_ then
- trackers.enable("resolvers.verbose")
+ trackers.enable("resolvers.locating")
end
logs.set_method("tex")
logs.report = report -- also used in libraries
@@ -6337,9 +8026,9 @@ end
function logs.setverbose(what)
if what then
- trackers.enable("resolvers.verbose")
+ trackers.enable("resolvers.locating")
else
- trackers.disable("resolvers.verbose")
+ trackers.disable("resolvers.locating")
end
logs.verbose = what or false
end
@@ -6356,7 +8045,7 @@ logs.report = logs.tex.report
logs.simple = logs.tex.report
function logs.reportlines(str) -- todo: <lines></lines>
- for line in str:gmatch("(.-)[\n\r]") do
+ for line in gmatch(str,"(.-)[\n\r]") do
logs.report(line)
end
end
@@ -6367,8 +8056,12 @@ end
logs.simpleline = logs.reportline
-function logs.help(message,option)
+function logs.reportbanner() -- for scripts too
logs.report(banner)
+end
+
+function logs.help(message,option)
+ logs.reportbanner()
logs.reportline()
logs.reportlines(message)
local moreinfo = logs.moreinfo or ""
@@ -6400,6 +8093,11 @@ end
--~ logs.system(syslogname,"context","test","fonts","font %s recached due to newer version (%s)","blabla","123")
--~ end
+function logs.fatal(where,...)
+ logs.report(where,"fatal error: %s, aborting now",format(...))
+ os.exit()
+end
+
end -- of closure
@@ -6407,10 +8105,10 @@ do -- create closure to overcome 200 locals limit
if not modules then modules = { } end modules ['data-inp'] = {
version = 1.001,
+ comment = "companion to luat-lib.mkiv",
author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
copyright = "PRAGMA ADE / ConTeXt Development Team",
license = "see context related readme files",
- comment = "companion to luat-lib.tex",
}
-- After a few years using the code the large luat-inp.lua file
@@ -6422,7 +8120,7 @@ if not modules then modules = { } end modules ['data-inp'] = {
-- * some public auxiliary functions were made private
--
-- TODO: os.getenv -> os.env[]
--- TODO: instances.[hashes,cnffiles,configurations,522] -> ipairs (alles check, sneller)
+-- TODO: instances.[hashes,cnffiles,configurations,522]
-- TODO: check escaping in find etc, too much, too slow
-- This lib is multi-purpose and can be loaded again later on so that
@@ -6443,12 +8141,13 @@ if not modules then modules = { } end modules ['data-inp'] = {
local format, gsub, find, lower, upper, match, gmatch = string.format, string.gsub, string.find, string.lower, string.upper, string.match, string.gmatch
local concat, insert, sortedkeys = table.concat, table.insert, table.sortedkeys
local next, type = next, type
+local lpegmatch = lpeg.match
-local trace_locating, trace_detail, trace_verbose = false, false, false
+local trace_locating, trace_detail, trace_expansions = false, false, false
-trackers.register("resolvers.verbose", function(v) trace_verbose = v end)
-trackers.register("resolvers.locating", function(v) trace_locating = v trackers.enable("resolvers.verbose") end)
-trackers.register("resolvers.detail", function(v) trace_detail = v trackers.enable("resolvers.verbose,resolvers.detail") end)
+trackers.register("resolvers.locating", function(v) trace_locating = v end)
+trackers.register("resolvers.details", function(v) trace_detail = v end)
+trackers.register("resolvers.expansions", function(v) trace_expansions = v end) -- todo
if not resolvers then
resolvers = {
@@ -6472,7 +8171,7 @@ resolvers.generators.notfound = { nil }
resolvers.cacheversion = '1.0.1'
resolvers.cnfname = 'texmf.cnf'
resolvers.luaname = 'texmfcnf.lua'
-resolvers.homedir = os.env[os.platform == "windows" and 'USERPROFILE'] or os.env['HOME'] or '~'
+resolvers.homedir = os.env[os.type == "windows" and 'USERPROFILE'] or os.env['HOME'] or '~'
resolvers.cnfdefault = '{$SELFAUTODIR,$SELFAUTOPARENT}{,{/share,}/texmf{-local,.local,}/web2c}'
local dummy_path_expr = "^!*unset/*$"
@@ -6514,8 +8213,8 @@ suffixes['lua'] = { 'lua', 'luc', 'tma', 'tmc' }
alternatives['map files'] = 'map'
alternatives['enc files'] = 'enc'
-alternatives['cid files'] = 'cid'
-alternatives['fea files'] = 'fea'
+alternatives['cid maps'] = 'cid' -- great, why no cid files
+alternatives['font feature files'] = 'fea' -- and fea files here
alternatives['opentype fonts'] = 'otf'
alternatives['truetype fonts'] = 'ttf'
alternatives['truetype collections'] = 'ttc'
@@ -6531,6 +8230,11 @@ formats ['sfd'] = 'SFDFONTS'
suffixes ['sfd'] = { 'sfd' }
alternatives['subfont definition files'] = 'sfd'
+-- lib paths
+
+formats ['lib'] = 'CLUAINPUTS' -- new (needs checking)
+suffixes['lib'] = (os.libsuffix and { os.libsuffix }) or { 'dll', 'so' }
+
-- In practice we will work within one tds tree, but i want to keep
-- the option open to build tools that look at multiple trees, which is
-- why we keep the tree specific data in a table. We used to pass the
@@ -6653,8 +8357,10 @@ local function check_configuration() -- not yet ok, no time for debugging now
-- bad luck
end
fix("LUAINPUTS" , ".;$TEXINPUTS;$TEXMFSCRIPTS") -- no progname, hm
- fix("FONTFEATURES", ".;$TEXMF/fonts/fea//;$OPENTYPEFONTS;$TTFONTS;$T1FONTS;$AFMFONTS")
- fix("FONTCIDMAPS" , ".;$TEXMF/fonts/cid//;$OPENTYPEFONTS;$TTFONTS;$T1FONTS;$AFMFONTS")
+ -- this will go away some day
+ fix("FONTFEATURES", ".;$TEXMF/fonts/{data,fea}//;$OPENTYPEFONTS;$TTFONTS;$T1FONTS;$AFMFONTS")
+ fix("FONTCIDMAPS" , ".;$TEXMF/fonts/{data,cid}//;$OPENTYPEFONTS;$TTFONTS;$T1FONTS;$AFMFONTS")
+ --
fix("LUATEXLIBS" , ".;$TEXMF/luatex/lua//")
end
@@ -6669,7 +8375,7 @@ function resolvers.settrace(n) -- no longer number but: 'locating' or 'detail'
end
end
-resolvers.settrace(os.getenv("MTX.resolvers.TRACE") or os.getenv("MTX_INPUT_TRACE"))
+resolvers.settrace(os.getenv("MTX_INPUT_TRACE"))
function resolvers.osenv(key)
local ie = instance.environment
@@ -6757,37 +8463,43 @@ end
-- work that well; the parsing is ok, but dealing with the resulting
-- table is a pain because we need to work inside-out recursively
+local function do_first(a,b)
+ local t = { }
+ for s in gmatch(b,"[^,]+") do t[#t+1] = a .. s end
+ return "{" .. concat(t,",") .. "}"
+end
+
+local function do_second(a,b)
+ local t = { }
+ for s in gmatch(a,"[^,]+") do t[#t+1] = s .. b end
+ return "{" .. concat(t,",") .. "}"
+end
+
+local function do_both(a,b)
+ local t = { }
+ for sa in gmatch(a,"[^,]+") do
+ for sb in gmatch(b,"[^,]+") do
+ t[#t+1] = sa .. sb
+ end
+ end
+ return "{" .. concat(t,",") .. "}"
+end
+
+local function do_three(a,b,c)
+ return a .. b.. c
+end
+
local function splitpathexpr(str, t, validate)
-- no need for further optimization as it is only called a
- -- few times, we can use lpeg for the sub; we could move
- -- the local functions outside the body
+ -- few times, we can use lpeg for the sub
+ if trace_expansions then
+ logs.report("fileio","expanding variable '%s'",str)
+ end
t = t or { }
str = gsub(str,",}",",@}")
str = gsub(str,"{,","{@,")
-- str = "@" .. str .. "@"
local ok, done
- local function do_first(a,b)
- local t = { }
- for s in gmatch(b,"[^,]+") do t[#t+1] = a .. s end
- return "{" .. concat(t,",") .. "}"
- end
- local function do_second(a,b)
- local t = { }
- for s in gmatch(a,"[^,]+") do t[#t+1] = s .. b end
- return "{" .. concat(t,",") .. "}"
- end
- local function do_both(a,b)
- local t = { }
- for sa in gmatch(a,"[^,]+") do
- for sb in gmatch(b,"[^,]+") do
- t[#t+1] = sa .. sb
- end
- end
- return "{" .. concat(t,",") .. "}"
- end
- local function do_three(a,b,c)
- return a .. b.. c
- end
while true do
done = false
while true do
@@ -6818,6 +8530,11 @@ local function splitpathexpr(str, t, validate)
t[#t+1] = s
end
end
+ if trace_expansions then
+ for k=1,#t do
+ logs.report("fileio","% 4i: %s",k,t[k])
+ end
+ end
return t
end
@@ -6857,18 +8574,27 @@ end
-- also we now follow the stupid route: if not set then just assume *one*
-- cnf file under texmf (i.e. distribution)
-resolvers.ownpath = resolvers.ownpath or nil
-resolvers.ownbin = resolvers.ownbin or arg[-2] or arg[-1] or arg[0] or "luatex"
-resolvers.autoselfdir = true -- false may be handy for debugging
+local args = environment and environment.original_arguments or arg -- this needs a cleanup
+
+resolvers.ownbin = resolvers.ownbin or args[-2] or arg[-2] or args[-1] or arg[-1] or arg[0] or "luatex"
+resolvers.ownbin = gsub(resolvers.ownbin,"\\","/")
function resolvers.getownpath()
- if not resolvers.ownpath then
- if resolvers.autoselfdir and os.selfdir then
- resolvers.ownpath = os.selfdir
- else
- local binary = resolvers.ownbin
- if os.platform == "windows" then
- binary = file.replacesuffix(binary,"exe")
+ local ownpath = resolvers.ownpath or os.selfdir
+ if not ownpath or ownpath == "" or ownpath == "unset" then
+ ownpath = args[-1] or arg[-1]
+ ownpath = ownpath and file.dirname(gsub(ownpath,"\\","/"))
+ if not ownpath or ownpath == "" then
+ ownpath = args[-0] or arg[-0]
+ ownpath = ownpath and file.dirname(gsub(ownpath,"\\","/"))
+ end
+ local binary = resolvers.ownbin
+ if not ownpath or ownpath == "" then
+ ownpath = ownpath and file.dirname(binary)
+ end
+ if not ownpath or ownpath == "" then
+ if os.binsuffix ~= "" then
+ binary = file.replacesuffix(binary,os.binsuffix)
end
for p in gmatch(os.getenv("PATH"),"[^"..io.pathseparator.."]+") do
local b = file.join(p,binary)
@@ -6880,30 +8606,39 @@ function resolvers.getownpath()
local olddir = lfs.currentdir()
if lfs.chdir(p) then
local pp = lfs.currentdir()
- if trace_verbose and p ~= pp then
- logs.report("fileio","following symlink %s to %s",p,pp)
+ if trace_locating and p ~= pp then
+ logs.report("fileio","following symlink '%s' to '%s'",p,pp)
end
- resolvers.ownpath = pp
+ ownpath = pp
lfs.chdir(olddir)
else
- if trace_verbose then
- logs.report("fileio","unable to check path %s",p)
+ if trace_locating then
+ logs.report("fileio","unable to check path '%s'",p)
end
- resolvers.ownpath = p
+ ownpath = p
end
break
end
end
end
- if not resolvers.ownpath then resolvers.ownpath = '.' end
+ if not ownpath or ownpath == "" then
+ ownpath = "."
+ logs.report("fileio","forcing fallback ownpath .")
+ elseif trace_locating then
+ logs.report("fileio","using ownpath '%s'",ownpath)
+ end
+ end
+ resolvers.ownpath = ownpath
+ function resolvers.getownpath()
+ return resolvers.ownpath
end
- return resolvers.ownpath
+ return ownpath
end
local own_places = { "SELFAUTOLOC", "SELFAUTODIR", "SELFAUTOPARENT", "TEXMFCNF" }
local function identify_own()
- local ownpath = resolvers.getownpath() or lfs.currentdir()
+ local ownpath = resolvers.getownpath() or dir.current()
local ie = instance.environment
if ownpath then
if resolvers.env('SELFAUTOLOC') == "" then os.env['SELFAUTOLOC'] = file.collapse_path(ownpath) end
@@ -6916,10 +8651,10 @@ local function identify_own()
if resolvers.env('TEXMFCNF') == "" then os.env['TEXMFCNF'] = resolvers.cnfdefault end
if resolvers.env('TEXOS') == "" then os.env['TEXOS'] = resolvers.env('SELFAUTODIR') end
if resolvers.env('TEXROOT') == "" then os.env['TEXROOT'] = resolvers.env('SELFAUTOPARENT') end
- if trace_verbose then
+ if trace_locating then
for i=1,#own_places do
local v = own_places[i]
- logs.report("fileio","variable %s set to %s",v,resolvers.env(v) or "unknown")
+ logs.report("fileio","variable '%s' set to '%s'",v,resolvers.env(v) or "unknown")
end
end
identify_own = function() end
@@ -6951,10 +8686,8 @@ end
local function load_cnf_file(fname)
fname = resolvers.clean_path(fname)
local lname = file.replacesuffix(fname,'lua')
- local f = io.open(lname)
- if f then -- this will go
- f:close()
- local dname = file.dirname(fname)
+ if lfs.isfile(lname) then
+ local dname = file.dirname(fname) -- fname ?
if not instance.configuration[dname] then
resolvers.load_data(dname,'configuration',lname and file.basename(lname))
instance.order[#instance.order+1] = instance.configuration[dname]
@@ -6962,8 +8695,8 @@ local function load_cnf_file(fname)
else
f = io.open(fname)
if f then
- if trace_verbose then
- logs.report("fileio","loading %s", fname)
+ if trace_locating then
+ logs.report("fileio","loading configuration file %s", fname)
end
local line, data, n, k, v
local dname = file.dirname(fname)
@@ -6997,14 +8730,16 @@ local function load_cnf_file(fname)
end
end
f:close()
- elseif trace_verbose then
- logs.report("fileio","skipping %s", fname)
+ elseif trace_locating then
+ logs.report("fileio","skipping configuration file '%s'", fname)
end
end
end
local function collapse_cnf_data() -- potential optimization: pass start index (setup and configuration are shared)
- for _,c in ipairs(instance.order) do
+ local order = instance.order
+ for i=1,#order do
+ local c = order[i]
for k,v in next, c do
if not instance.variables[k] then
if instance.environment[k] then
@@ -7020,19 +8755,24 @@ end
function resolvers.load_cnf()
local function loadoldconfigdata()
- for _, fname in ipairs(instance.cnffiles) do
- load_cnf_file(fname)
+ local cnffiles = instance.cnffiles
+ for i=1,#cnffiles do
+ load_cnf_file(cnffiles[i])
end
end
-- instance.cnffiles contain complete names now !
+ -- we still use a funny mix of cnf and new but soon
+ -- we will switch to lua exclusively as we only use
+ -- the file to collect the tree roots
if #instance.cnffiles == 0 then
- if trace_verbose then
+ if trace_locating then
logs.report("fileio","no cnf files found (TEXMFCNF may not be set/known)")
end
else
- instance.rootpath = instance.cnffiles[1]
- for k,fname in ipairs(instance.cnffiles) do
- instance.cnffiles[k] = file.collapse_path(gsub(fname,"\\",'/'))
+ local cnffiles = instance.cnffiles
+ instance.rootpath = cnffiles[1]
+ for k=1,#cnffiles do
+ instance.cnffiles[k] = file.collapse_path(cnffiles[k])
end
for i=1,3 do
instance.rootpath = file.dirname(instance.rootpath)
@@ -7060,8 +8800,9 @@ function resolvers.load_lua()
-- yet harmless
else
instance.rootpath = instance.luafiles[1]
- for k,fname in ipairs(instance.luafiles) do
- instance.luafiles[k] = file.collapse_path(gsub(fname,"\\",'/'))
+ local luafiles = instance.luafiles
+ for k=1,#luafiles do
+ instance.luafiles[k] = file.collapse_path(luafiles[k])
end
for i=1,3 do
instance.rootpath = file.dirname(instance.rootpath)
@@ -7093,14 +8834,14 @@ end
function resolvers.append_hash(type,tag,name)
if trace_locating then
- logs.report("fileio","= hash append: %s",tag)
+ logs.report("fileio","hash '%s' appended",tag)
end
insert(instance.hashes, { ['type']=type, ['tag']=tag, ['name']=name } )
end
function resolvers.prepend_hash(type,tag,name)
if trace_locating then
- logs.report("fileio","= hash prepend: %s",tag)
+ logs.report("fileio","hash '%s' prepended",tag)
end
insert(instance.hashes, 1, { ['type']=type, ['tag']=tag, ['name']=name } )
end
@@ -7124,9 +8865,11 @@ end
-- locators
function resolvers.locatelists()
- for _, path in ipairs(resolvers.clean_path_list('TEXMF')) do
- if trace_verbose then
- logs.report("fileio","locating list of %s",path)
+ local texmfpaths = resolvers.clean_path_list('TEXMF')
+ for i=1,#texmfpaths do
+ local path = texmfpaths[i]
+ if trace_locating then
+ logs.report("fileio","locating list of '%s'",path)
end
resolvers.locatedatabase(file.collapse_path(path))
end
@@ -7139,11 +8882,11 @@ end
function resolvers.locators.tex(specification)
if specification and specification ~= '' and lfs.isdir(specification) then
if trace_locating then
- logs.report("fileio",'! tex locator found: %s',specification)
+ logs.report("fileio","tex locator '%s' found",specification)
end
resolvers.append_hash('file',specification,filename)
elseif trace_locating then
- logs.report("fileio",'? tex locator not found: %s',specification)
+ logs.report("fileio","tex locator '%s' not found",specification)
end
end
@@ -7157,7 +8900,9 @@ function resolvers.loadfiles()
instance.loaderror = false
instance.files = { }
if not instance.renewcache then
- for _, hash in ipairs(instance.hashes) do
+ local hashes = instance.hashes
+ for k=1,#hashes do
+ local hash = hashes[k]
resolvers.hashdatabase(hash.tag,hash.name)
if instance.loaderror then break end
end
@@ -7171,8 +8916,9 @@ end
-- generators:
function resolvers.loadlists()
- for _, hash in ipairs(instance.hashes) do
- resolvers.generatedatabase(hash.tag)
+ local hashes = instance.hashes
+ for i=1,#hashes do
+ resolvers.generatedatabase(hashes[i].tag)
end
end
@@ -7184,10 +8930,27 @@ end
local weird = lpeg.P(".")^1 + lpeg.anywhere(lpeg.S("~`!#$%^&*()={}[]:;\"\'||<>,?\n\r\t"))
+--~ local l_forbidden = lpeg.S("~`!#$%^&*()={}[]:;\"\'||\\/<>,?\n\r\t")
+--~ local l_confusing = lpeg.P(" ")
+--~ local l_character = lpeg.patterns.utf8
+--~ local l_dangerous = lpeg.P(".")
+
+--~ local l_normal = (l_character - l_forbidden - l_confusing - l_dangerous) * (l_character - l_forbidden - l_confusing^2)^0 * lpeg.P(-1)
+--~ ----- l_normal = l_normal * lpeg.Cc(true) + lpeg.Cc(false)
+
+--~ local function test(str)
+--~ print(str,lpeg.match(l_normal,str))
+--~ end
+--~ test("ヒラギノ明朝 Pro W3")
+--~ test("..ヒラギノ明朝 Pro W3")
+--~ test(":ヒラギノ明朝 Pro W3;")
+--~ test("ヒラギノ明朝 /Pro W3;")
+--~ test("ヒラギノ明朝 Pro W3")
+
function resolvers.generators.tex(specification)
local tag = specification
- if trace_verbose then
- logs.report("fileio","scanning path %s",specification)
+ if trace_locating then
+ logs.report("fileio","scanning path '%s'",specification)
end
instance.files[tag] = { }
local files = instance.files[tag]
@@ -7203,7 +8966,8 @@ function resolvers.generators.tex(specification)
full = spec
end
for name in directory(full) do
- if not weird:match(name) then
+ if not lpegmatch(weird,name) then
+ -- if lpegmatch(l_normal,name) then
local mode = attributes(full..name,'mode')
if mode == 'file' then
if path then
@@ -7236,7 +9000,7 @@ function resolvers.generators.tex(specification)
end
end
action()
- if trace_verbose then
+ if trace_locating then
logs.report("fileio","%s files found on %s directories with %s uppercase remappings",n,m,r)
end
end
@@ -7251,11 +9015,48 @@ end
-- we join them and split them after the expansion has taken place. This
-- is more convenient.
+--~ local checkedsplit = string.checkedsplit
+
+local cache = { }
+
+local splitter = lpeg.Ct(lpeg.splitat(lpeg.S(os.type == "windows" and ";" or ":;")))
+
+local function split_kpse_path(str) -- beware, this can be either a path or a {specification}
+ local found = cache[str]
+ if not found then
+ if str == "" then
+ found = { }
+ else
+ str = gsub(str,"\\","/")
+--~ local split = (find(str,";") and checkedsplit(str,";")) or checkedsplit(str,io.pathseparator)
+local split = lpegmatch(splitter,str)
+ found = { }
+ for i=1,#split do
+ local s = split[i]
+ if not find(s,"^{*unset}*") then
+ found[#found+1] = s
+ end
+ end
+ if trace_expansions then
+ logs.report("fileio","splitting path specification '%s'",str)
+ for k=1,#found do
+ logs.report("fileio","% 4i: %s",k,found[k])
+ end
+ end
+ cache[str] = found
+ end
+ end
+ return found
+end
+
+resolvers.split_kpse_path = split_kpse_path
+
function resolvers.splitconfig()
- for i,c in ipairs(instance) do
- for k,v in pairs(c) do
+ for i=1,#instance do
+ local c = instance[i]
+ for k,v in next, c do
if type(v) == 'string' then
- local t = file.split_path(v)
+ local t = split_kpse_path(v)
if #t > 1 then
c[k] = t
end
@@ -7265,21 +9066,25 @@ function resolvers.splitconfig()
end
function resolvers.joinconfig()
- for i,c in ipairs(instance.order) do
- for k,v in pairs(c) do -- ipairs?
+ local order = instance.order
+ for i=1,#order do
+ local c = order[i]
+ for k,v in next, c do -- indexed?
if type(v) == 'table' then
c[k] = file.join_path(v)
end
end
end
end
+
function resolvers.split_path(str)
if type(str) == 'table' then
return str
else
- return file.split_path(str)
+ return split_kpse_path(str)
end
end
+
function resolvers.join_path(str)
if type(str) == 'table' then
return file.join_path(str)
@@ -7291,8 +9096,9 @@ end
function resolvers.splitexpansions()
local ie = instance.expansions
for k,v in next, ie do
- local t, h = { }, { }
- for _,vv in ipairs(file.split_path(v)) do
+ local t, h, p = { }, { }, split_kpse_path(v)
+ for kk=1,#p do
+ local vv = p[kk]
if vv ~= "" and not h[vv] then
t[#t+1] = vv
h[vv] = true
@@ -7339,11 +9145,15 @@ function resolvers.serialize(files)
end
t[#t+1] = "return {"
if instance.sortdata then
- for _, k in pairs(sortedkeys(files)) do -- ipairs
+ local sortedfiles = sortedkeys(files)
+ for i=1,#sortedfiles do
+ local k = sortedfiles[i]
local fk = files[k]
if type(fk) == 'table' then
t[#t+1] = "\t['" .. k .. "']={"
- for _, kk in pairs(sortedkeys(fk)) do -- ipairs
+ local sortedfk = sortedkeys(fk)
+ for j=1,#sortedfk do
+ local kk = sortedfk[j]
t[#t+1] = dump(kk,fk[kk],"\t\t")
end
t[#t+1] = "\t},"
@@ -7368,12 +9178,18 @@ function resolvers.serialize(files)
return concat(t,"\n")
end
+local data_state = { }
+
+function resolvers.data_state()
+ return data_state or { }
+end
+
function resolvers.save_data(dataname, makename) -- untested without cache overload
for cachename, files in next, instance[dataname] do
local name = (makename or file.join)(cachename,dataname)
local luaname, lucname = name .. ".lua", name .. ".luc"
- if trace_verbose then
- logs.report("fileio","preparing %s for %s",dataname,cachename)
+ if trace_locating then
+ logs.report("fileio","preparing '%s' for '%s'",dataname,cachename)
end
for k, v in next, files do
if type(v) == "table" and #v == 1 then
@@ -7387,24 +9203,25 @@ function resolvers.save_data(dataname, makename) -- untested without cache overl
date = os.date("%Y-%m-%d"),
time = os.date("%H:%M:%S"),
content = files,
+ uuid = os.uuid(),
}
local ok = io.savedata(luaname,resolvers.serialize(data))
if ok then
- if trace_verbose then
- logs.report("fileio","%s saved in %s",dataname,luaname)
+ if trace_locating then
+ logs.report("fileio","'%s' saved in '%s'",dataname,luaname)
end
if utils.lua.compile(luaname,lucname,false,true) then -- no cleanup but strip
- if trace_verbose then
- logs.report("fileio","%s compiled to %s",dataname,lucname)
+ if trace_locating then
+ logs.report("fileio","'%s' compiled to '%s'",dataname,lucname)
end
else
- if trace_verbose then
- logs.report("fileio","compiling failed for %s, deleting file %s",dataname,lucname)
+ if trace_locating then
+ logs.report("fileio","compiling failed for '%s', deleting file '%s'",dataname,lucname)
end
os.remove(lucname)
end
- elseif trace_verbose then
- logs.report("fileio","unable to save %s in %s (access error)",dataname,luaname)
+ elseif trace_locating then
+ logs.report("fileio","unable to save '%s' in '%s' (access error)",dataname,luaname)
end
end
end
@@ -7416,19 +9233,20 @@ function resolvers.load_data(pathname,dataname,filename,makename) -- untested wi
if blob then
local data = blob()
if data and data.content and data.type == dataname and data.version == resolvers.cacheversion then
- if trace_verbose then
- logs.report("fileio","loading %s for %s from %s",dataname,pathname,filename)
+ data_state[#data_state+1] = data.uuid
+ if trace_locating then
+ logs.report("fileio","loading '%s' for '%s' from '%s'",dataname,pathname,filename)
end
instance[dataname][pathname] = data.content
else
- if trace_verbose then
- logs.report("fileio","skipping %s for %s from %s",dataname,pathname,filename)
+ if trace_locating then
+ logs.report("fileio","skipping '%s' for '%s' from '%s'",dataname,pathname,filename)
end
instance[dataname][pathname] = { }
instance.loaderror = true
end
- elseif trace_verbose then
- logs.report("fileio","skipping %s for %s from %s",dataname,pathname,filename)
+ elseif trace_locating then
+ logs.report("fileio","skipping '%s' for '%s' from '%s'",dataname,pathname,filename)
end
end
@@ -7447,15 +9265,17 @@ function resolvers.resetconfig()
end
function resolvers.loadnewconfig()
- for _, cnf in ipairs(instance.luafiles) do
+ local luafiles = instance.luafiles
+ for i=1,#luafiles do
+ local cnf = luafiles[i]
local pathname = file.dirname(cnf)
local filename = file.join(pathname,resolvers.luaname)
local blob = loadfile(filename)
if blob then
local data = blob()
if data then
- if trace_verbose then
- logs.report("fileio","loading configuration file %s",filename)
+ if trace_locating then
+ logs.report("fileio","loading configuration file '%s'",filename)
end
if true then
-- flatten to variable.progname
@@ -7476,14 +9296,14 @@ function resolvers.loadnewconfig()
instance['setup'][pathname] = data
end
else
- if trace_verbose then
- logs.report("fileio","skipping configuration file %s",filename)
+ if trace_locating then
+ logs.report("fileio","skipping configuration file '%s'",filename)
end
instance['setup'][pathname] = { }
instance.loaderror = true
end
- elseif trace_verbose then
- logs.report("fileio","skipping configuration file %s",filename)
+ elseif trace_locating then
+ logs.report("fileio","skipping configuration file '%s'",filename)
end
instance.order[#instance.order+1] = instance.setup[pathname]
if instance.loaderror then break end
@@ -7492,7 +9312,9 @@ end
function resolvers.loadoldconfig()
if not instance.renewcache then
- for _, cnf in ipairs(instance.cnffiles) do
+ local cnffiles = instance.cnffiles
+ for i=1,#cnffiles do
+ local cnf = cnffiles[i]
local dname = file.dirname(cnf)
resolvers.load_data(dname,'configuration')
instance.order[#instance.order+1] = instance.configuration[dname]
@@ -7682,7 +9504,7 @@ end
function resolvers.expanded_path_list(str)
if not str then
- return ep or { }
+ return ep or { } -- ep ?
elseif instance.savelists then
-- engine+progname hash
str = gsub(str,"%$","")
@@ -7700,9 +9522,9 @@ end
function resolvers.expanded_path_list_from_var(str) -- brrr
local tmp = resolvers.var_of_format_or_suffix(gsub(str,"%$",""))
if tmp ~= "" then
- return resolvers.expanded_path_list(str)
- else
return resolvers.expanded_path_list(tmp)
+ else
+ return resolvers.expanded_path_list(str)
end
end
@@ -7749,9 +9571,9 @@ function resolvers.isreadable.file(name)
local readable = lfs.isfile(name) -- brrr
if trace_detail then
if readable then
- logs.report("fileio","+ readable: %s",name)
+ logs.report("fileio","file '%s' is readable",name)
else
- logs.report("fileio","- readable: %s", name)
+ logs.report("fileio","file '%s' is not readable", name)
end
end
return readable
@@ -7767,7 +9589,7 @@ local function collect_files(names)
for k=1,#names do
local fname = names[k]
if trace_detail then
- logs.report("fileio","? blobpath asked: %s",fname)
+ logs.report("fileio","checking name '%s'",fname)
end
local bname = file.basename(fname)
local dname = file.dirname(fname)
@@ -7783,7 +9605,7 @@ local function collect_files(names)
local files = blobpath and instance.files[blobpath]
if files then
if trace_detail then
- logs.report("fileio",'? blobpath do: %s (%s)',blobpath,bname)
+ logs.report("fileio","deep checking '%s' (%s)",blobpath,bname)
end
local blobfile = files[bname]
if not blobfile then
@@ -7817,7 +9639,7 @@ local function collect_files(names)
end
end
elseif trace_locating then
- logs.report("fileio",'! blobpath no: %s (%s)',blobpath,bname)
+ logs.report("fileio","no match in '%s' (%s)",blobpath,bname)
end
end
end
@@ -7867,14 +9689,13 @@ end
local function collect_instance_files(filename,collected) -- todo : plugin (scanners, checkers etc)
local result = collected or { }
local stamp = nil
- filename = file.collapse_path(filename) -- elsewhere
- filename = file.collapse_path(gsub(filename,"\\","/")) -- elsewhere
+ filename = file.collapse_path(filename)
-- speed up / beware: format problem
if instance.remember then
stamp = filename .. "--" .. instance.engine .. "--" .. instance.progname .. "--" .. instance.format
if instance.found[stamp] then
if trace_locating then
- logs.report("fileio",'! remembered: %s',filename)
+ logs.report("fileio","remembering file '%s'",filename)
end
return instance.found[stamp]
end
@@ -7882,7 +9703,7 @@ local function collect_instance_files(filename,collected) -- todo : plugin (scan
if not dangerous[instance.format or "?"] then
if resolvers.isreadable.file(filename) then
if trace_detail then
- logs.report("fileio",'= found directly: %s',filename)
+ logs.report("fileio","file '%s' found directly",filename)
end
instance.found[stamp] = { filename }
return { filename }
@@ -7890,13 +9711,13 @@ local function collect_instance_files(filename,collected) -- todo : plugin (scan
end
if find(filename,'%*') then
if trace_locating then
- logs.report("fileio",'! wildcard: %s', filename)
+ logs.report("fileio","checking wildcard '%s'", filename)
end
result = resolvers.find_wildcard_files(filename)
elseif file.is_qualified_path(filename) then
if resolvers.isreadable.file(filename) then
if trace_locating then
- logs.report("fileio",'! qualified: %s', filename)
+ logs.report("fileio","qualified name '%s'", filename)
end
result = { filename }
else
@@ -7906,7 +9727,7 @@ local function collect_instance_files(filename,collected) -- todo : plugin (scan
forcedname = filename .. ".tex"
if resolvers.isreadable.file(forcedname) then
if trace_locating then
- logs.report("fileio",'! no suffix, forcing standard filetype: tex')
+ logs.report("fileio","no suffix, forcing standard filetype 'tex'")
end
result, ok = { forcedname }, true
end
@@ -7916,7 +9737,7 @@ local function collect_instance_files(filename,collected) -- todo : plugin (scan
forcedname = filename .. "." .. s
if resolvers.isreadable.file(forcedname) then
if trace_locating then
- logs.report("fileio",'! no suffix, forcing format filetype: %s', s)
+ logs.report("fileio","no suffix, forcing format filetype '%s'", s)
end
result, ok = { forcedname }, true
break
@@ -7928,7 +9749,7 @@ local function collect_instance_files(filename,collected) -- todo : plugin (scan
-- try to find in tree (no suffix manipulation), here we search for the
-- matching last part of the name
local basename = file.basename(filename)
- local pattern = (filename .. "$"):gsub("([%.%-])","%%%1")
+ local pattern = gsub(filename .. "$","([%.%-])","%%%1")
local savedformat = instance.format
local format = savedformat or ""
if format == "" then
@@ -7938,19 +9759,21 @@ local function collect_instance_files(filename,collected) -- todo : plugin (scan
instance.format = "othertextfiles" -- kind of everything, maybe texinput is better
end
--
- local resolved = collect_instance_files(basename)
- if #result == 0 then
- local lowered = lower(basename)
- if filename ~= lowered then
- resolved = collect_instance_files(lowered)
+ if basename ~= filename then
+ local resolved = collect_instance_files(basename)
+ if #result == 0 then
+ local lowered = lower(basename)
+ if filename ~= lowered then
+ resolved = collect_instance_files(lowered)
+ end
end
- end
- resolvers.format = savedformat
- --
- for r=1,#resolved do
- local rr = resolved[r]
- if rr:find(pattern) then
- result[#result+1], ok = rr, true
+ resolvers.format = savedformat
+ --
+ for r=1,#resolved do
+ local rr = resolved[r]
+ if find(rr,pattern) then
+ result[#result+1], ok = rr, true
+ end
end
end
-- a real wildcard:
@@ -7959,14 +9782,14 @@ local function collect_instance_files(filename,collected) -- todo : plugin (scan
-- local filelist = collect_files({basename})
-- for f=1,#filelist do
-- local ff = filelist[f][3] or ""
- -- if ff:find(pattern) then
+ -- if find(ff,pattern) then
-- result[#result+1], ok = ff, true
-- end
-- end
-- end
end
if not ok and trace_locating then
- logs.report("fileio",'? qualified: %s', filename)
+ logs.report("fileio","qualified name '%s'", filename)
end
end
else
@@ -7985,12 +9808,12 @@ local function collect_instance_files(filename,collected) -- todo : plugin (scan
wantedfiles[#wantedfiles+1] = forcedname
filetype = resolvers.format_of_suffix(forcedname)
if trace_locating then
- logs.report("fileio",'! forcing filetype: %s',filetype)
+ logs.report("fileio","forcing filetype '%s'",filetype)
end
else
filetype = resolvers.format_of_suffix(filename)
if trace_locating then
- logs.report("fileio",'! using suffix based filetype: %s',filetype)
+ logs.report("fileio","using suffix based filetype '%s'",filetype)
end
end
else
@@ -8002,7 +9825,7 @@ local function collect_instance_files(filename,collected) -- todo : plugin (scan
end
filetype = instance.format
if trace_locating then
- logs.report("fileio",'! using given filetype: %s',filetype)
+ logs.report("fileio","using given filetype '%s'",filetype)
end
end
local typespec = resolvers.variable_of_format(filetype)
@@ -8010,9 +9833,7 @@ local function collect_instance_files(filename,collected) -- todo : plugin (scan
if not pathlist or #pathlist == 0 then
-- no pathlist, access check only / todo == wildcard
if trace_detail then
- logs.report("fileio",'? filename: %s',filename)
- logs.report("fileio",'? filetype: %s',filetype or '?')
- logs.report("fileio",'? wanted files: %s',concat(wantedfiles," | "))
+ logs.report("fileio","checking filename '%s', filetype '%s', wanted files '%s'",filename, filetype or '?',concat(wantedfiles," | "))
end
for k=1,#wantedfiles do
local fname = wantedfiles[k]
@@ -8033,36 +9854,59 @@ local function collect_instance_files(filename,collected) -- todo : plugin (scan
else
-- list search
local filelist = collect_files(wantedfiles)
- local doscan, recurse
+ local dirlist = { }
+ if filelist then
+ for i=1,#filelist do
+ dirlist[i] = file.dirname(filelist[i][2]) .. "/"
+ end
+ end
if trace_detail then
- logs.report("fileio",'? filename: %s',filename)
+ logs.report("fileio","checking filename '%s'",filename)
end
-- a bit messy ... esp the doscan setting here
+ local doscan
for k=1,#pathlist do
local path = pathlist[k]
if find(path,"^!!") then doscan = false else doscan = true end
- if find(path,"//$") then recurse = true else recurse = false end
local pathname = gsub(path,"^!+", '')
done = false
-- using file list
- if filelist and not (done and not instance.allresults) and recurse then
- -- compare list entries with permitted pattern
- pathname = gsub(pathname,"([%-%.])","%%%1") -- this also influences
- pathname = gsub(pathname,"/+$", '/.*') -- later usage of pathname
- pathname = gsub(pathname,"//", '/.-/') -- not ok for /// but harmless
- local expr = "^" .. pathname
+ if filelist then
+ local expression
+ -- compare list entries with permitted pattern -- /xx /xx//
+ if not find(pathname,"/$") then
+ expression = pathname .. "/"
+ else
+ expression = pathname
+ end
+ expression = gsub(expression,"([%-%.])","%%%1") -- this also influences
+ expression = gsub(expression,"//+$", '/.*') -- later usage of pathname
+ expression = gsub(expression,"//", '/.-/') -- not ok for /// but harmless
+ expression = "^" .. expression .. "$"
+ if trace_detail then
+ logs.report("fileio","using pattern '%s' for path '%s'",expression,pathname)
+ end
for k=1,#filelist do
local fl = filelist[k]
local f = fl[2]
- if find(f,expr) then
- if trace_detail then
- logs.report("fileio",'= found in hash: %s',f)
- end
+ local d = dirlist[k]
+ if find(d,expression) then
--- todo, test for readable
result[#result+1] = fl[3]
resolvers.register_in_trees(f) -- for tracing used files
done = true
- if not instance.allresults then break end
+ if instance.allresults then
+ if trace_detail then
+ logs.report("fileio","match in hash for file '%s' on path '%s', continue scanning",f,d)
+ end
+ else
+ if trace_detail then
+ logs.report("fileio","match in hash for file '%s' on path '%s', quit scanning",f,d)
+ end
+ break
+ end
+ elseif trace_detail then
+ logs.report("fileio","no match in hash for file '%s' on path '%s'",f,d)
end
end
end
@@ -8078,7 +9922,7 @@ local function collect_instance_files(filename,collected) -- todo : plugin (scan
local fname = file.join(ppname,w)
if resolvers.isreadable.file(fname) then
if trace_detail then
- logs.report("fileio",'= found by scanning: %s',fname)
+ logs.report("fileio","found '%s' by scanning",fname)
end
result[#result+1] = fname
done = true
@@ -8141,7 +9985,7 @@ function resolvers.find_given_files(filename)
local hashes = instance.hashes
for k=1,#hashes do
local hash = hashes[k]
- local files = instance.files[hash.tag]
+ local files = instance.files[hash.tag] or { }
local blist = files[bname]
if not blist then
local rname = "remap:"..bname
@@ -8251,9 +10095,9 @@ function resolvers.load(option)
statistics.starttiming(instance)
resolvers.resetconfig()
resolvers.identify_cnf()
- resolvers.load_lua()
+ resolvers.load_lua() -- will become the new method
resolvers.expand_variables()
- resolvers.load_cnf()
+ resolvers.load_cnf() -- will be skipped when we have a lua file
resolvers.expand_variables()
if option ~= "nofiles" then
resolvers.load_hash()
@@ -8265,22 +10109,23 @@ end
function resolvers.for_files(command, files, filetype, mustexist)
if files and #files > 0 then
local function report(str)
- if trace_verbose then
+ if trace_locating then
logs.report("fileio",str) -- has already verbose
else
print(str)
end
end
- if trace_verbose then
- report('')
+ if trace_locating then
+ report('') -- ?
end
- for _, file in ipairs(files) do
+ for f=1,#files do
+ local file = files[f]
local result = command(file,filetype,mustexist)
if type(result) == 'string' then
report(result)
else
- for _,v in ipairs(result) do
- report(v)
+ for i=1,#result do
+ report(result[i]) -- could be unpack
end
end
end
@@ -8327,18 +10172,19 @@ end
function table.sequenced(t,sep) -- temp here
local s = { }
- for k, v in pairs(t) do -- pairs?
- s[#s+1] = k .. "=" .. v
+ for k, v in next, t do -- indexed?
+ s[#s+1] = k .. "=" .. tostring(v)
end
return concat(s, sep or " | ")
end
function resolvers.methodhandler(what, filename, filetype) -- ...
+ filename = file.collapse_path(filename)
local specification = (type(filename) == "string" and resolvers.splitmethod(filename)) or filename -- no or { }, let it bomb
local scheme = specification.scheme
if resolvers[what][scheme] then
if trace_locating then
- logs.report("fileio",'= handler: %s -> %s -> %s',specification.original,what,table.sequenced(specification))
+ logs.report("fileio","handler '%s' -> '%s' -> '%s'",specification.original,what,table.sequenced(specification))
end
return resolvers[what][scheme](filename,filetype) -- todo: specification
else
@@ -8358,8 +10204,9 @@ function resolvers.clean_path(str)
end
function resolvers.do_with_path(name,func)
- for _, v in pairs(resolvers.expanded_path_list(name)) do -- pairs?
- func("^"..resolvers.clean_path(v))
+ local pathlist = resolvers.expanded_path_list(name)
+ for i=1,#pathlist do
+ func("^"..resolvers.clean_path(pathlist[i]))
end
end
@@ -8368,7 +10215,9 @@ function resolvers.do_with_var(name,func)
end
function resolvers.with_files(pattern,handle)
- for _, hash in ipairs(instance.hashes) do
+ local hashes = instance.hashes
+ for i=1,#hashes do
+ local hash = hashes[i]
local blobpath = hash.tag
local blobtype = hash.type
if blobpath then
@@ -8383,7 +10232,7 @@ function resolvers.with_files(pattern,handle)
if type(v) == "string" then
handle(blobtype,blobpath,v,k)
else
- for _,vv in pairs(v) do -- ipairs?
+ for _,vv in next, v do -- indexed
handle(blobtype,blobpath,vv,k)
end
end
@@ -8395,7 +10244,7 @@ function resolvers.with_files(pattern,handle)
end
function resolvers.locate_format(name)
- local barename, fmtname = name:gsub("%.%a+$",""), ""
+ local barename, fmtname = gsub(name,"%.%a+$",""), ""
if resolvers.usecache then
local path = file.join(caches.setpath("formats")) -- maybe platform
fmtname = file.join(path,barename..".fmt") or ""
@@ -8443,7 +10292,7 @@ do -- create closure to overcome 200 locals limit
if not modules then modules = { } end modules ['data-tmp'] = {
version = 1.001,
- comment = "companion to luat-lib.tex",
+ comment = "companion to luat-lib.mkiv",
author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
copyright = "PRAGMA ADE / ConTeXt Development Team",
license = "see context related readme files"
@@ -8467,7 +10316,7 @@ luatools with a recache feature.</p>
local format, lower, gsub = string.format, string.lower, string.gsub
-local trace_cache = false trackers.register("resolvers.cache", function(v) trace_cache = v end)
+local trace_cache = false trackers.register("resolvers.cache", function(v) trace_cache = v end) -- not used yet
caches = caches or { }
@@ -8554,7 +10403,8 @@ function caches.setpath(...)
caches.path = '.'
end
caches.path = resolvers.clean_path(caches.path)
- if not table.is_empty({...}) then
+ local dirs = { ... }
+ if #dirs > 0 then
local pth = dir.mkdirs(caches.path,...)
return pth
end
@@ -8600,6 +10450,7 @@ function caches.savedata(filepath,filename,data,raw)
if raw then
reduce, simplify = false, false
end
+ data.cache_uuid = os.uuid()
if caches.direct then
file.savedata(tmaname, table.serialize(data,'return',false,true,false)) -- no hex
else
@@ -8625,7 +10476,7 @@ do -- create closure to overcome 200 locals limit
if not modules then modules = { } end modules ['data-res'] = {
version = 1.001,
- comment = "companion to luat-lib.tex",
+ comment = "companion to luat-lib.mkiv",
author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
copyright = "PRAGMA ADE / ConTeXt Development Team",
license = "see context related readme files"
@@ -8660,6 +10511,14 @@ prefixes.relative = function(str,n)
return resolvers.clean_path(str)
end
+prefixes.auto = function(str)
+ local fullname = prefixes.relative(str)
+ if not lfs.isfile(fullname) then
+ fullname = prefixes.locate(str)
+ end
+ return fullname
+end
+
prefixes.locate = function(str)
local fullname = resolvers.find_given_file(str) or ""
return resolvers.clean_path((fullname ~= "" and fullname) or str)
@@ -8683,6 +10542,16 @@ prefixes.full = prefixes.locate
prefixes.file = prefixes.filename
prefixes.path = prefixes.pathname
+function resolvers.allprefixes(separator)
+ local all = table.sortedkeys(prefixes)
+ if separator then
+ for i=1,#all do
+ all[i] = all[i] .. ":"
+ end
+ end
+ return all
+end
+
local function _resolve_(method,target)
if prefixes[method] then
return prefixes[method](target)
@@ -8693,7 +10562,8 @@ end
local function resolve(str)
if type(str) == "table" then
- for k, v in pairs(str) do -- ipairs
+ for k=1,#str do
+ local v = str[k]
str[k] = resolve(v) or v
end
elseif str and str ~= "" then
@@ -8706,7 +10576,7 @@ resolvers.resolve = resolve
if os.uname then
- for k, v in pairs(os.uname()) do
+ for k, v in next, os.uname() do
if not prefixes[k] then
prefixes[k] = function() return v end
end
@@ -8721,7 +10591,7 @@ do -- create closure to overcome 200 locals limit
if not modules then modules = { } end modules ['data-inp'] = {
version = 1.001,
- comment = "companion to luat-lib.tex",
+ comment = "companion to luat-lib.mkiv",
author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
copyright = "PRAGMA ADE / ConTeXt Development Team",
license = "see context related readme files"
@@ -8742,7 +10612,7 @@ do -- create closure to overcome 200 locals limit
if not modules then modules = { } end modules ['data-out'] = {
version = 1.001,
- comment = "companion to luat-lib.tex",
+ comment = "companion to luat-lib.mkiv",
author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
copyright = "PRAGMA ADE / ConTeXt Development Team",
license = "see context related readme files"
@@ -8758,7 +10628,7 @@ do -- create closure to overcome 200 locals limit
if not modules then modules = { } end modules ['data-con'] = {
version = 1.001,
- comment = "companion to luat-lib.tex",
+ comment = "companion to luat-lib.mkiv",
author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
copyright = "PRAGMA ADE / ConTeXt Development Team",
license = "see context related readme files"
@@ -8769,8 +10639,6 @@ local format, lower, gsub = string.format, string.lower, string.gsub
local trace_cache = false trackers.register("resolvers.cache", function(v) trace_cache = v end)
local trace_containers = false trackers.register("resolvers.containers", function(v) trace_containers = v end)
local trace_storage = false trackers.register("resolvers.storage", function(v) trace_storage = v end)
-local trace_verbose = false trackers.register("resolvers.verbose", function(v) trace_verbose = v end)
-local trace_locating = false trackers.register("resolvers.locating", function(v) trace_locating = v trackers.enable("resolvers.verbose") end)
--[[ldx--
<p>Once we found ourselves defining similar cache constructs
@@ -8834,7 +10702,7 @@ 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
+ return storage and storage.cache_version == container.version
else
return false
end
@@ -8886,16 +10754,15 @@ do -- create closure to overcome 200 locals limit
if not modules then modules = { } end modules ['data-use'] = {
version = 1.001,
- comment = "companion to luat-lib.tex",
+ comment = "companion to luat-lib.mkiv",
author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
copyright = "PRAGMA ADE / ConTeXt Development Team",
license = "see context related readme files"
}
-local format, lower, gsub = string.format, string.lower, string.gsub
+local format, lower, gsub, find = string.format, string.lower, string.gsub, string.find
-local trace_verbose = false trackers.register("resolvers.verbose", function(v) trace_verbose = v end)
-local trace_locating = false trackers.register("resolvers.locating", function(v) trace_locating = v trackers.enable("resolvers.verbose") end)
+local trace_locating = false trackers.register("resolvers.locating", function(v) trace_locating = v end)
-- since we want to use the cache instead of the tree, we will now
-- reimplement the saver.
@@ -8939,19 +10806,20 @@ resolvers.automounted = resolvers.automounted or { }
function resolvers.automount(usecache)
local mountpaths = resolvers.clean_path_list(resolvers.expansion('TEXMFMOUNT'))
- if table.is_empty(mountpaths) and usecache then
+ if (not mountpaths or #mountpaths == 0) and usecache then
mountpaths = { caches.setpath("mount") }
end
- if not table.is_empty(mountpaths) then
+ if mountpaths and #mountpaths > 0 then
statistics.starttiming(resolvers.instance)
- for k, root in pairs(mountpaths) do
+ for k=1,#mountpaths do
+ local root = mountpaths[k]
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
+ if find(line,"^[%%#%-]") then -- or %W
-- skip
- elseif line:find("^zip://") then
+ elseif find(line,"^zip://") then
if trace_locating then
logs.report("fileio","mounting %s",line)
end
@@ -8996,11 +10864,13 @@ function statistics.check_fmt_status(texname)
local luv = dofile(luvname)
if luv and luv.sourcefile then
local sourcehash = md5.hex(io.loaddata(resolvers.find_file(luv.sourcefile)) or "unknown")
- if luv.enginebanner and luv.enginebanner ~= enginebanner then
- return "engine mismatch"
+ local luvbanner = luv.enginebanner or "?"
+ if luvbanner ~= enginebanner then
+ return string.format("engine mismatch (luv:%s <> bin:%s)",luvbanner,enginebanner)
end
- if luv.sourcehash and luv.sourcehash ~= sourcehash then
- return "source mismatch"
+ local luvhash = luv.sourcehash or "?"
+ if luvhash ~= sourcehash then
+ return string.format("source mismatch (luv:%s <> bin:%s)",luvhash,sourcehash)
end
else
return "invalid status file"
@@ -9019,18 +10889,22 @@ do -- create closure to overcome 200 locals limit
if not modules then modules = { } end modules ['data-zip'] = {
version = 1.001,
- comment = "companion to luat-lib.tex",
+ comment = "companion to luat-lib.mkiv",
author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
copyright = "PRAGMA ADE / ConTeXt Development Team",
license = "see context related readme files"
}
-local format, find = string.format, string.find
+local format, find, match = string.format, string.find, string.match
+local unpack = unpack or table.unpack
-local trace_locating, trace_verbose = false, false
+local trace_locating = false trackers.register("resolvers.locating", function(v) trace_locating = v end)
-trackers.register("resolvers.verbose", function(v) trace_verbose = v end)
-trackers.register("resolvers.locating", function(v) trace_locating = v trace_verbose = v end)
+-- zip:///oeps.zip?name=bla/bla.tex
+-- zip:///oeps.zip?tree=tex/texmf-local
+-- zip:///texmf.zip?tree=/tex/texmf
+-- zip:///texmf.zip?tree=/tex/texmf-local
+-- zip:///texmf-mine.zip?tree=/tex/texmf-projects
zip = zip or { }
zip.archives = zip.archives or { }
@@ -9041,9 +10915,6 @@ local locators, hashers, concatinators = resolvers.locators, resolvers.hashers,
local archives = zip.archives
--- zip:///oeps.zip?name=bla/bla.tex
--- zip:///oeps.zip?tree=tex/texmf-local
-
local function validzip(str) -- todo: use url splitter
if not find(str,"^zip://") then
return "zip:///" .. str
@@ -9073,26 +10944,22 @@ function zip.closearchive(name)
end
end
--- zip:///texmf.zip?tree=/tex/texmf
--- zip:///texmf.zip?tree=/tex/texmf-local
--- zip:///texmf-mine.zip?tree=/tex/texmf-projects
-
function locators.zip(specification) -- where is this used? startup zips (untested)
specification = resolvers.splitmethod(specification)
local zipfile = specification.path
local zfile = zip.openarchive(name) -- tricky, could be in to be initialized tree
if trace_locating then
if zfile then
- logs.report("fileio",'! zip locator, found: %s',specification.original)
+ logs.report("fileio","zip locator, archive '%s' found",specification.original)
else
- logs.report("fileio",'? zip locator, not found: %s',specification.original)
+ logs.report("fileio","zip locator, archive '%s' not found",specification.original)
end
end
end
function hashers.zip(tag,name)
- if trace_verbose then
- logs.report("fileio","loading zip file %s as %s",name,tag)
+ if trace_locating then
+ logs.report("fileio","loading zip file '%s' as '%s'",name,tag)
end
resolvers.usezipfile(format("%s?tree=%s",tag,name))
end
@@ -9117,23 +10984,25 @@ function finders.zip(specification,filetype)
local zfile = zip.openarchive(specification.path)
if zfile then
if trace_locating then
- logs.report("fileio",'! zip finder, path: %s',specification.path)
+ logs.report("fileio","zip finder, archive '%s' found",specification.path)
end
local dfile = zfile:open(q.name)
if dfile then
dfile = zfile:close()
if trace_locating then
- logs.report("fileio",'+ zip finder, name: %s',q.name)
+ logs.report("fileio","zip finder, file '%s' found",q.name)
end
return specification.original
+ elseif trace_locating then
+ logs.report("fileio","zip finder, file '%s' not found",q.name)
end
elseif trace_locating then
- logs.report("fileio",'? zip finder, path %s',specification.path)
+ logs.report("fileio","zip finder, unknown archive '%s'",specification.path)
end
end
end
if trace_locating then
- logs.report("fileio",'- zip finder, name: %s',filename)
+ logs.report("fileio","zip finder, '%s' not found",filename)
end
return unpack(finders.notfound)
end
@@ -9146,20 +11015,25 @@ function openers.zip(specification)
local zfile = zip.openarchive(zipspecification.path)
if zfile then
if trace_locating then
- logs.report("fileio",'+ zip starter, path: %s',zipspecification.path)
+ logs.report("fileio","zip opener, archive '%s' opened",zipspecification.path)
end
local dfile = zfile:open(q.name)
if dfile then
logs.show_open(specification)
+ if trace_locating then
+ logs.report("fileio","zip opener, file '%s' found",q.name)
+ end
return openers.text_opener(specification,dfile,'zip')
+ elseif trace_locating then
+ logs.report("fileio","zip opener, file '%s' not found",q.name)
end
elseif trace_locating then
- logs.report("fileio",'- zip starter, path %s',zipspecification.path)
+ logs.report("fileio","zip opener, unknown archive '%s'",zipspecification.path)
end
end
end
if trace_locating then
- logs.report("fileio",'- zip opener, name: %s',filename)
+ logs.report("fileio","zip opener, '%s' not found",filename)
end
return unpack(openers.notfound)
end
@@ -9172,25 +11046,27 @@ function loaders.zip(specification)
local zfile = zip.openarchive(specification.path)
if zfile then
if trace_locating then
- logs.report("fileio",'+ zip starter, path: %s',specification.path)
+ logs.report("fileio","zip loader, archive '%s' opened",specification.path)
end
local dfile = zfile:open(q.name)
if dfile then
logs.show_load(filename)
if trace_locating then
- logs.report("fileio",'+ zip loader, name: %s',filename)
+ logs.report("fileio","zip loader, file '%s' loaded",filename)
end
local s = dfile:read("*all")
dfile:close()
return true, s, #s
+ elseif trace_locating then
+ logs.report("fileio","zip loader, file '%s' not found",q.name)
end
elseif trace_locating then
- logs.report("fileio",'- zip starter, path: %s',specification.path)
+ logs.report("fileio","zip loader, unknown archive '%s'",specification.path)
end
end
end
if trace_locating then
- logs.report("fileio",'- zip loader, name: %s',filename)
+ logs.report("fileio","zip loader, '%s' not found",filename)
end
return unpack(openers.notfound)
end
@@ -9200,21 +11076,15 @@ end
function resolvers.usezipfile(zipname)
zipname = validzip(zipname)
- if trace_locating then
- logs.report("fileio",'! zip use, file: %s',zipname)
- end
local specification = resolvers.splitmethod(zipname)
local zipfile = specification.path
if zipfile and not zip.registeredfiles[zipname] then
local tree = url.query(specification.query).tree or ""
- if trace_locating then
- logs.report("fileio",'! zip register, file: %s',zipname)
- end
local z = zip.openarchive(zipfile)
if z then
local instance = resolvers.instance
if trace_locating then
- logs.report("fileio","= zipfile, registering: %s",zipname)
+ logs.report("fileio","zip registering, registering archive '%s'",zipname)
end
statistics.starttiming(instance)
resolvers.prepend_hash('zip',zipname,zipfile)
@@ -9223,10 +11093,10 @@ function resolvers.usezipfile(zipname)
instance.files[zipname] = resolvers.register_zip_file(z,tree or "")
statistics.stoptiming(instance)
elseif trace_locating then
- logs.report("fileio","? zipfile, unknown: %s",zipname)
+ logs.report("fileio","zip registering, unknown archive '%s'",zipname)
end
elseif trace_locating then
- logs.report("fileio",'! zip register, no file: %s',zipname)
+ logs.report("fileio","zip registering, '%s' not found",zipname)
end
end
@@ -9238,11 +11108,11 @@ function resolvers.register_zip_file(z,tree)
filter = format("^%s/(.+)/(.-)$",tree)
end
if trace_locating then
- logs.report("fileio",'= zip filter: %s',filter)
+ logs.report("fileio","zip registering, using filter '%s'",filter)
end
local register, n = resolvers.register_file, 0
for i in z:files() do
- local path, name = i.filename:match(filter)
+ local path, name = match(i.filename,filter)
if path then
if name and name ~= '' then
register(files, name, path)
@@ -9255,7 +11125,7 @@ function resolvers.register_zip_file(z,tree)
n = n + 1
end
end
- logs.report("fileio",'= zip entries: %s',n)
+ logs.report("fileio","zip registering, %s files registered",n)
return files
end
@@ -9266,12 +11136,14 @@ do -- create closure to overcome 200 locals limit
if not modules then modules = { } end modules ['data-crl'] = {
version = 1.001,
- comment = "companion to luat-lib.tex",
+ comment = "companion to luat-lib.mkiv",
author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
copyright = "PRAGMA ADE / ConTeXt Development Team",
license = "see context related readme files"
}
+local gsub = string.gsub
+
curl = curl or { }
curl.cached = { }
@@ -9280,9 +11152,9 @@ curl.cachepath = caches.definepath("curl")
local finders, openers, loaders = resolvers.finders, resolvers.openers, resolvers.loaders
function curl.fetch(protocol, name)
- local cachename = curl.cachepath() .. "/" .. name:gsub("[^%a%d%.]+","-")
--- cachename = cachename:gsub("[\\/]", io.fileseparator)
- cachename = cachename:gsub("[\\]", "/") -- cleanup
+ local cachename = curl.cachepath() .. "/" .. gsub(name,"[^%a%d%.]+","-")
+-- cachename = gsub(cachename,"[\\/]", io.fileseparator)
+ cachename = gsub(cachename,"[\\]", "/") -- cleanup
if not curl.cached[name] then
if not io.exists(cachename) then
curl.cached[name] = cachename
@@ -9328,6 +11200,164 @@ end -- of closure
do -- create closure to overcome 200 locals limit
+if not modules then modules = { } end modules ['data-lua'] = {
+ version = 1.001,
+ comment = "companion to luat-lib.mkiv",
+ author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
+ copyright = "PRAGMA ADE / ConTeXt Development Team",
+ license = "see context related readme files"
+}
+
+-- some loading stuff ... we might move this one to slot 2 depending
+-- on the developments (the loaders must not trigger kpse); we could
+-- of course use a more extensive lib path spec
+
+local trace_locating = false trackers.register("resolvers.locating", function(v) trace_locating = v end)
+
+local gsub, insert = string.gsub, table.insert
+local unpack = unpack or table.unpack
+
+local libformats = { 'luatexlibs', 'tex', 'texmfscripts', 'othertextfiles' } -- 'luainputs'
+local clibformats = { 'lib' }
+
+local _path_, libpaths, _cpath_, clibpaths
+
+function package.libpaths()
+ if not _path_ or package.path ~= _path_ then
+ _path_ = package.path
+ libpaths = file.split_path(_path_,";")
+ end
+ return libpaths
+end
+
+function package.clibpaths()
+ if not _cpath_ or package.cpath ~= _cpath_ then
+ _cpath_ = package.cpath
+ clibpaths = file.split_path(_cpath_,";")
+ end
+ return clibpaths
+end
+
+local function thepath(...)
+ local t = { ... } t[#t+1] = "?.lua"
+ local path = file.join(unpack(t))
+ if trace_locating then
+ logs.report("fileio","! appending '%s' to 'package.path'",path)
+ end
+ return path
+end
+
+local p_libpaths, a_libpaths = { }, { }
+
+function package.append_libpath(...)
+ insert(a_libpath,thepath(...))
+end
+
+function package.prepend_libpath(...)
+ insert(p_libpaths,1,thepath(...))
+end
+
+-- beware, we need to return a loadfile result !
+
+local function loaded(libpaths,name,simple)
+ for i=1,#libpaths do -- package.path, might become option
+ local libpath = libpaths[i]
+ local resolved = gsub(libpath,"%?",simple)
+ if trace_locating then -- more detail
+ logs.report("fileio","! checking for '%s' on 'package.path': '%s' => '%s'",simple,libpath,resolved)
+ end
+ if resolvers.isreadable.file(resolved) then
+ if trace_locating then
+ logs.report("fileio","! lib '%s' located via 'package.path': '%s'",name,resolved)
+ end
+ return loadfile(resolved)
+ end
+ end
+end
+
+
+package.loaders[2] = function(name) -- was [#package.loaders+1]
+ if trace_locating then -- mode detail
+ logs.report("fileio","! locating '%s'",name)
+ end
+ for i=1,#libformats do
+ local format = libformats[i]
+ local resolved = resolvers.find_file(name,format) or ""
+ if trace_locating then -- mode detail
+ logs.report("fileio","! checking for '%s' using 'libformat path': '%s'",name,format)
+ end
+ if resolved ~= "" then
+ if trace_locating then
+ logs.report("fileio","! lib '%s' located via environment: '%s'",name,resolved)
+ end
+ return loadfile(resolved)
+ end
+ end
+ -- libpaths
+ local libpaths, clibpaths = package.libpaths(), package.clibpaths()
+ local simple = gsub(name,"%.lua$","")
+ local simple = gsub(simple,"%.","/")
+ local resolved = loaded(p_libpaths,name,simple) or loaded(libpaths,name,simple) or loaded(a_libpaths,name,simple)
+ if resolved then
+ return resolved
+ end
+ --
+ local libname = file.addsuffix(simple,os.libsuffix)
+ for i=1,#clibformats do
+ -- better have a dedicated loop
+ local format = clibformats[i]
+ local paths = resolvers.expanded_path_list_from_var(format)
+ for p=1,#paths do
+ local path = paths[p]
+ local resolved = file.join(path,libname)
+ if trace_locating then -- mode detail
+ logs.report("fileio","! checking for '%s' using 'clibformat path': '%s'",libname,path)
+ end
+ if resolvers.isreadable.file(resolved) then
+ if trace_locating then
+ logs.report("fileio","! lib '%s' located via 'clibformat': '%s'",libname,resolved)
+ end
+ return package.loadlib(resolved,name)
+ end
+ end
+ end
+ for i=1,#clibpaths do -- package.path, might become option
+ local libpath = clibpaths[i]
+ local resolved = gsub(libpath,"?",simple)
+ if trace_locating then -- more detail
+ logs.report("fileio","! checking for '%s' on 'package.cpath': '%s'",simple,libpath)
+ end
+ if resolvers.isreadable.file(resolved) then
+ if trace_locating then
+ logs.report("fileio","! lib '%s' located via 'package.cpath': '%s'",name,resolved)
+ end
+ return package.loadlib(resolved,name)
+ end
+ end
+ -- just in case the distribution is messed up
+ if trace_loading then -- more detail
+ logs.report("fileio","! checking for '%s' using 'luatexlibs': '%s'",name)
+ end
+ local resolved = resolvers.find_file(file.basename(name),'luatexlibs') or ""
+ if resolved ~= "" then
+ if trace_locating then
+ logs.report("fileio","! lib '%s' located by basename via environment: '%s'",name,resolved)
+ end
+ return loadfile(resolved)
+ end
+ if trace_locating then
+ logs.report("fileio",'? unable to locate lib: %s',name)
+ end
+-- return "unable to locate " .. name
+end
+
+resolvers.loadlualib = require
+
+
+end -- of closure
+
+do -- create closure to overcome 200 locals limit
+
if not modules then modules = { } end modules ['luat-kps'] = {
version = 1.001,
comment = "companion to luatools.lua",
@@ -9437,7 +11467,7 @@ do -- create closure to overcome 200 locals limit
if not modules then modules = { } end modules ['data-aux'] = {
version = 1.001,
- comment = "companion to luat-lib.tex",
+ comment = "companion to luat-lib.mkiv",
author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
copyright = "PRAGMA ADE / ConTeXt Development Team",
license = "see context related readme files"
@@ -9445,47 +11475,47 @@ if not modules then modules = { } end modules ['data-aux'] = {
local find = string.find
-local trace_verbose = false trackers.register("resolvers.verbose", function(v) trace_verbose = v end)
+local trace_locating = false trackers.register("resolvers.locating", function(v) trace_locating = v end)
function resolvers.update_script(oldname,newname) -- oldname -> own.name, not per se a suffix
local scriptpath = "scripts/context/lua"
newname = file.addsuffix(newname,"lua")
local oldscript = resolvers.clean_path(oldname)
- if trace_verbose then
+ if trace_locating then
logs.report("fileio","to be replaced old script %s", oldscript)
end
local newscripts = resolvers.find_files(newname) or { }
if #newscripts == 0 then
- if trace_verbose then
+ if trace_locating then
logs.report("fileio","unable to locate new script")
end
else
for i=1,#newscripts do
local newscript = resolvers.clean_path(newscripts[i])
- if trace_verbose then
+ if trace_locating then
logs.report("fileio","checking new script %s", newscript)
end
if oldscript == newscript then
- if trace_verbose then
+ if trace_locating then
logs.report("fileio","old and new script are the same")
end
elseif not find(newscript,scriptpath) then
- if trace_verbose then
+ if trace_locating then
logs.report("fileio","new script should come from %s",scriptpath)
end
elseif not (find(oldscript,file.removesuffix(newname).."$") or find(oldscript,newname.."$")) then
- if trace_verbose then
+ if trace_locating then
logs.report("fileio","invalid new script name")
end
else
local newdata = io.loaddata(newscript)
if newdata then
- if trace_verbose then
+ if trace_locating then
logs.report("fileio","old script content replaced by new content")
end
io.savedata(oldscript,newdata)
break
- elseif trace_verbose then
+ elseif trace_locating then
logs.report("fileio","unable to load new script")
end
end
@@ -9500,25 +11530,28 @@ do -- create closure to overcome 200 locals limit
if not modules then modules = { } end modules ['data-tmf'] = {
version = 1.001,
- comment = "companion to luat-lib.tex",
+ comment = "companion to luat-lib.mkiv",
author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
copyright = "PRAGMA ADE / ConTeXt Development Team",
license = "see context related readme files"
}
+local find, gsub, match = string.find, string.gsub, string.match
+local getenv, setenv = os.getenv, os.setenv
+
-- loads *.tmf files in minimal tree roots (to be optimized and documented)
function resolvers.check_environment(tree)
logs.simpleline()
- os.setenv('TMP', os.getenv('TMP') or os.getenv('TEMP') or os.getenv('TMPDIR') or os.getenv('HOME'))
- os.setenv('TEXOS', os.getenv('TEXOS') or ("texmf-" .. os.currentplatform()))
- os.setenv('TEXPATH', (tree or "tex"):gsub("\/+$",''))
- os.setenv('TEXMFOS', os.getenv('TEXPATH') .. "/" .. os.getenv('TEXOS'))
+ setenv('TMP', getenv('TMP') or getenv('TEMP') or getenv('TMPDIR') or getenv('HOME'))
+ setenv('TEXOS', getenv('TEXOS') or ("texmf-" .. os.platform))
+ setenv('TEXPATH', gsub(tree or "tex","\/+$",''))
+ setenv('TEXMFOS', getenv('TEXPATH') .. "/" .. getenv('TEXOS'))
logs.simpleline()
- logs.simple("preset : TEXPATH => %s", os.getenv('TEXPATH'))
- logs.simple("preset : TEXOS => %s", os.getenv('TEXOS'))
- logs.simple("preset : TEXMFOS => %s", os.getenv('TEXMFOS'))
- logs.simple("preset : TMP => %s", os.getenv('TMP'))
+ logs.simple("preset : TEXPATH => %s", getenv('TEXPATH'))
+ logs.simple("preset : TEXOS => %s", getenv('TEXOS'))
+ logs.simple("preset : TEXMFOS => %s", getenv('TEXMFOS'))
+ logs.simple("preset : TMP => %s", getenv('TMP'))
logs.simple('')
end
@@ -9526,27 +11559,27 @@ function resolvers.load_environment(name) -- todo: key=value as well as lua
local f = io.open(name)
if f then
for line in f:lines() do
- if line:find("^[%%%#]") then
+ if find(line,"^[%%%#]") then
-- skip comment
else
- local key, how, value = line:match("^(.-)%s*([<=>%?]+)%s*(.*)%s*$")
+ local key, how, value = match(line,"^(.-)%s*([<=>%?]+)%s*(.*)%s*$")
if how then
- value = value:gsub("%%(.-)%%", function(v) return os.getenv(v) or "" end)
+ value = gsub(value,"%%(.-)%%", function(v) return getenv(v) or "" end)
if how == "=" or how == "<<" then
- os.setenv(key,value)
+ setenv(key,value)
elseif how == "?" or how == "??" then
- os.setenv(key,os.getenv(key) or value)
+ setenv(key,getenv(key) or value)
elseif how == "<" or how == "+=" then
- if os.getenv(key) then
- os.setenv(key,os.getenv(key) .. io.fileseparator .. value)
+ if getenv(key) then
+ setenv(key,getenv(key) .. io.fileseparator .. value)
else
- os.setenv(key,value)
+ setenv(key,value)
end
elseif how == ">" or how == "=+" then
- if os.getenv(key) then
- os.setenv(key,value .. io.pathseparator .. os.getenv(key))
+ if getenv(key) then
+ setenv(key,value .. io.pathseparator .. getenv(key))
else
- os.setenv(key,value)
+ setenv(key,value)
end
end
end
@@ -9585,6 +11618,9 @@ if not modules then modules = { } end modules ['luat-sta'] = {
-- this code is used in the updater
+local gmatch, match = string.gmatch, string.match
+local type = type
+
states = states or { }
states.data = states.data or { }
states.hash = states.hash or { }
@@ -9613,13 +11649,17 @@ function states.set_by_tag(tag,key,value,default,persistent)
if d then
if type(d) == "table" then
local dkey, hkey = key, key
- local pre, post = key:match("(.+)%.([^%.]+)$")
+ local pre, post = match(key,"(.+)%.([^%.]+)$")
if pre and post then
- for k in pre:gmatch("[^%.]+") do
+ for k in gmatch(pre,"[^%.]+") do
local dk = d[k]
if not dk then
dk = { }
d[k] = dk
+ elseif type(dk) == "string" then
+ -- invalid table, unable to upgrade structure
+ -- hope for the best or delete the state file
+ break
end
d = dk
end
@@ -9647,7 +11687,7 @@ function states.get_by_tag(tag,key,default)
else
local d = states.data[tag]
if d then
- for k in key:gmatch("[^%.]+") do
+ for k in gmatch(key,"[^%.]+") do
local dk = d[k]
if dk then
d = dk
@@ -9782,6 +11822,7 @@ own.libs = { -- todo: check which ones are really needed
'l-os.lua',
'l-file.lua',
'l-md5.lua',
+ 'l-url.lua',
'l-dir.lua',
'l-boolean.lua',
'l-math.lua',
@@ -9790,11 +11831,13 @@ own.libs = { -- todo: check which ones are really needed
'l-utils.lua',
'l-aux.lua',
-- 'l-xml.lua',
+ 'trac-tra.lua',
'lxml-tab.lua',
- 'lxml-pth.lua',
- 'lxml-ent.lua',
+ 'lxml-lpt.lua',
+-- 'lxml-ent.lua',
'lxml-mis.lua',
- 'trac-tra.lua',
+ 'lxml-aux.lua',
+ 'lxml-xml.lua',
'luat-env.lua',
'trac-inf.lua',
'trac-log.lua',
@@ -9809,7 +11852,7 @@ own.libs = { -- todo: check which ones are really needed
-- 'data-bin.lua',
'data-zip.lua',
'data-crl.lua',
--- 'data-lua.lua',
+ 'data-lua.lua',
'data-kps.lua', -- so that we can replace kpsewhich
'data-aux.lua', -- updater
'data-tmf.lua', -- tree files
@@ -9827,7 +11870,8 @@ end
-- End of hack.
-own.name = (environment and environment.ownname) or arg[0] or 'luatools.lua'
+own.name = (environment and environment.ownname) or arg[0] or 'luatools.lua'
+
own.path = string.match(own.name,"^(.+)[\\/].-$") or "."
own.list = { '.' }
@@ -9865,18 +11909,25 @@ if not resolvers then
os.exit()
end
-logs.setprogram('MTXrun',"TDS Runner Tool 1.22",environment.arguments["verbose"] or false)
+logs.setprogram('MTXrun',"TDS Runner Tool 1.24",environment.arguments["verbose"] or false)
local instance = resolvers.reset()
+local trackspec = environment.argument("trackers") or environment.argument("track")
+
+if trackspec then
+ trackers.enable(trackspec)
+end
+
runners = runners or { } -- global
messages = messages or { }
messages.help = [[
---script run an mtx script (--noquotes)
---execute run a script or program (--noquotes)
+--script run an mtx script (lua prefered method) (--noquotes), no script gives list
+--execute run a script or program (texmfstart method) (--noquotes)
--resolve resolve prefixed arguments
--ctxlua run internally (using preloaded libs)
+--internal run script using built in libraries (same as --ctxlua)
--locate locate given filename
--autotree use texmf tree cf. env 'texmfstart_tree' or 'texmfstarttree'
@@ -9893,16 +11944,20 @@ messages.help = [[
--unix create unix (linux) stubs
--verbose give a bit more info
+--trackers=list enable given trackers
--engine=str target engine
--progname=str format or backend
--edit launch editor with found file
--launch (--all) launch files like manuals, assumes os support
---intern run script using built in libraries
+--timedrun run a script an time its run
+--autogenerate regenerate databases if needed (handy when used to run context in an editor)
+
+--usekpse use kpse as fallback (when no mkiv and cache installed, often slower)
+--forcekpse force using kpse (handy when no mkiv and cache installed but less functionality)
---usekpse use kpse as fallback (when no mkiv and cache installed, often slower)
---forcekpse force using kpse (handy when no mkiv and cache installed but less functionality)
+--prefixes show supported prefixes
]]
runners.applications = {
@@ -9918,20 +11973,17 @@ runners.suffixes = {
}
runners.registered = {
- texexec = { 'texexec.rb', true }, -- context mkii runner (only tool not to be luafied)
+ texexec = { 'texexec.rb', false }, -- context mkii runner (only tool not to be luafied)
texutil = { 'texutil.rb', true }, -- old perl based index sorter for mkii (old versions need it)
texfont = { 'texfont.pl', true }, -- perl script that makes mkii font metric files
texfind = { 'texfind.pl', false }, -- perltk based tex searching tool, mostly used at pragma
texshow = { 'texshow.pl', false }, -- perltk based context help system, will be luafied
- -- texwork = { \texwork.pl', false }, -- perltk based editing environment, only used at pragma
-
+ -- texwork = { 'texwork.pl', false }, -- perltk based editing environment, only used at pragma
makempy = { 'makempy.pl', true },
mptopdf = { 'mptopdf.pl', true },
pstopdf = { 'pstopdf.rb', true }, -- converts ps (and some more) images, does some cleaning (replaced)
-
-- examplex = { 'examplex.rb', false },
concheck = { 'concheck.rb', false },
-
runtools = { 'runtools.rb', true },
textools = { 'textools.rb', true },
tmftools = { 'tmftools.rb', true },
@@ -9943,7 +11995,6 @@ runners.registered = {
xmltools = { 'xmltools.rb', true },
-- luatools = { 'luatools.lua', true },
mtxtools = { 'mtxtools.rb', true },
-
pdftrimwhite = { 'pdftrimwhite.pl', false }
}
@@ -9952,6 +12003,13 @@ runners.launchers = {
unix = { }
}
+-- like runners.libpath("framework"): looks on script's subpath
+
+function runners.libpath(...)
+ package.prepend_libpath(file.dirname(environment.ownscript),...)
+ package.prepend_libpath(file.dirname(environment.ownname) ,...)
+end
+
function runners.prepare()
local checkname = environment.argument("ifchanged")
if checkname and checkname ~= "" then
@@ -9996,7 +12054,7 @@ function runners.prepare()
return "run"
end
-function runners.execute_script(fullname,internal)
+function runners.execute_script(fullname,internal,nosplit)
local noquote = environment.argument("noquotes")
if fullname and fullname ~= "" then
local state = runners.prepare()
@@ -10036,17 +12094,20 @@ function runners.execute_script(fullname,internal)
end
end
if result and result ~= "" then
- local before, after = environment.split_arguments(fullname) -- already done
- environment.arguments_before, environment.arguments_after = before, after
+ if not no_split then
+ local before, after = environment.split_arguments(fullname) -- already done
+ environment.arguments_before, environment.arguments_after = before, after
+ end
if internal then
- arg = { } for _,v in pairs(after) do arg[#arg+1] = v end
+ arg = { } for _,v in pairs(environment.arguments_after) do arg[#arg+1] = v end
+ environment.ownscript = result
dofile(result)
else
local binary = runners.applications[file.extname(result)]
if binary and binary ~= "" then
result = binary .. " " .. result
end
- local command = result .. " " .. environment.reconstruct_commandline(after,noquote)
+ local command = result .. " " .. environment.reconstruct_commandline(environment.arguments_after,noquote)
if logs.verbose then
logs.simpleline()
logs.simple("executing: %s",command)
@@ -10054,8 +12115,24 @@ function runners.execute_script(fullname,internal)
logs.simpleline()
io.flush()
end
- local code = os.exec(command) -- maybe spawn
- return code == 0
+ -- no os.exec because otherwise we get the wrong return value
+ local code = os.execute(command) -- maybe spawn
+ if code == 0 then
+ return true
+ else
+ if binary then
+ binary = file.addsuffix(binary,os.binsuffix)
+ for p in string.gmatch(os.getenv("PATH"),"[^"..io.pathseparator.."]+") do
+ if lfs.isfile(file.join(p,binary)) then
+ return false
+ end
+ end
+ logs.simpleline()
+ logs.simple("This script needs '%s' which seems not to be installed.",binary)
+ logs.simpleline()
+ end
+ return false
+ end
end
end
end
@@ -10088,7 +12165,7 @@ function runners.execute_program(fullname)
return false
end
--- the --usekpse flag will fallback on kpse
+-- the --usekpse flag will fallback on kpse (hm, we can better update mtx-stubs)
local windows_stub = '@echo off\013\010setlocal\013\010set ownpath=%%~dp0%%\013\010texlua "%%ownpath%%mtxrun.lua" --usekpse --execute %s %%*\013\010endlocal\013\010'
local unix_stub = '#!/bin/sh\010mtxrun --usekpse --execute %s \"$@\"\010'
@@ -10143,7 +12220,7 @@ function runners.locate_file(filename)
end
function runners.locate_platform()
- runners.report_location(os.currentplatform())
+ runners.report_location(os.platform)
end
function runners.report_location(result)
@@ -10176,7 +12253,8 @@ end
function runners.save_script_session(filename, list)
local t = { }
- for _, key in ipairs(list) do
+ for i=1,#list do
+ local key = list[i]
t[key] = environment.arguments[key]
end
io.savedata(filename,table.serialize(t,true))
@@ -10265,20 +12343,22 @@ function runners.find_mtx_script(filename)
if fullname and fullname ~= "" then
return fullname
end
+ -- mtx- prefix checking
+ local mtxprefix = (filename:find("^mtx%-") and "") or "mtx-"
-- context namespace, mtx-<filename>
- fullname = "mtx-" .. filename
+ fullname = mtxprefix .. filename
fullname = found(fullname) or resolvers.find_file(fullname)
if fullname and fullname ~= "" then
return fullname
end
-- context namespace, mtx-<filename>s
- fullname = "mtx-" .. basename .. "s" .. "." .. suffix
+ fullname = mtxprefix .. basename .. "s" .. "." .. suffix
fullname = found(fullname) or resolvers.find_file(fullname)
if fullname and fullname ~= "" then
return fullname
end
-- context namespace, mtx-<filename minus trailing s>
- fullname = "mtx-" .. basename:gsub("s$","") .. "." .. suffix
+ fullname = mtxprefix .. basename:gsub("s$","") .. "." .. suffix
fullname = found(fullname) or resolvers.find_file(fullname)
if fullname and fullname ~= "" then
return fullname
@@ -10288,9 +12368,17 @@ function runners.find_mtx_script(filename)
return fullname
end
-function runners.execute_ctx_script(filename,arguments)
+function runners.execute_ctx_script(filename)
+ local arguments = environment.arguments_after
local fullname = runners.find_mtx_script(filename) or ""
- -- retyr after generate but only if --autogenerate
+ if file.extname(fullname) == "cld" then
+ -- handy in editors where we force --autopdf
+ logs.simple("running cld script: %s",filename)
+ table.insert(arguments,1,fullname)
+ table.insert(arguments,"--autopdf")
+ fullname = runners.find_mtx_script("context") or ""
+ end
+ -- retry after generate but only if --autogenerate
if fullname == "" and environment.argument("autogenerate") then -- might become the default
instance.renewcache = true
logs.setverbose(true)
@@ -10319,32 +12407,51 @@ function runners.execute_ctx_script(filename,arguments)
if logs.verbose then
logs.simple("using script: %s\n",fullname)
end
+ environment.ownscript = fullname
dofile(fullname)
local savename = environment.arguments['save']
- if savename and runners.save_list and not table.is_empty(runners.save_list or { }) then
- if type(savename) ~= "string" then savename = file.basename(fullname) end
- savename = file.replacesuffix(savename,"cfg")
- runners.save_script_session(savename, runners.save_list)
+ if savename then
+ local save_list = runners.save_list
+ if save_list and next(save_list) then
+ if type(savename) ~= "string" then savename = file.basename(fullname) end
+ savename = file.replacesuffix(savename,"cfg")
+ runners.save_script_session(savename,save_list)
+ end
end
return true
end
else
- logs.setverbose(true)
- if filename == "" then
- logs.simple("unknown script, no name given")
+ -- logs.setverbose(true)
+ if filename == "" or filename == "help" then
local context = resolvers.find_file("mtx-context.lua")
+ logs.setverbose(true)
if context ~= "" then
local result = dir.glob((string.gsub(context,"mtx%-context","mtx-*"))) -- () needed
local valid = { }
- for _, scriptname in ipairs(result) do
- scriptname = string.match(scriptname,".*mtx%-([^%-]-)%.lua")
- if scriptname then
- valid[#valid+1] = scriptname
+ table.sort(result)
+ for i=1,#result do
+ local scriptname = result[i]
+ local scriptbase = string.match(scriptname,".*mtx%-([^%-]-)%.lua")
+ if scriptbase then
+ local data = io.loaddata(scriptname)
+ local banner, version = string.match(data,"[\n\r]logs%.extendbanner%s*%(%s*[\"\']([^\n\r]+)%s*(%d+%.%d+)")
+ if banner then
+ valid[#valid+1] = { scriptbase, version, banner }
+ end
end
end
if #valid > 0 then
- logs.simple("known scripts: %s",table.concat(valid,", "))
+ logs.reportbanner()
+ logs.reportline()
+ logs.simple("no script name given, known scripts:")
+ logs.simple()
+ for k=1,#valid do
+ local v = valid[k]
+ logs.simple("%-12s %4s %s",v[1],v[2],v[3])
+ end
end
+ else
+ logs.simple("no script name given")
end
else
filename = file.addsuffix(filename,"lua")
@@ -10358,6 +12465,12 @@ function runners.execute_ctx_script(filename,arguments)
end
end
+function runners.prefixes()
+ logs.reportbanner()
+ logs.reportline()
+ logs.simple(table.concat(resolvers.allprefixes(true)," "))
+end
+
function runners.timedrun(filename) -- just for me
if filename and filename ~= "" then
runners.timed(function() os.execute(filename) end)
@@ -10385,7 +12498,9 @@ instance.lsrmode = environment.argument("lsr") or false
-- maybe the unset has to go to this level
-if environment.argument("usekpse") or environment.argument("forcekpse") then
+local is_mkii_stub = runners.registered[file.removesuffix(file.basename(filename))]
+
+if environment.argument("usekpse") or environment.argument("forcekpse") or is_mkii_stub then
os.setenv("engine","")
os.setenv("progname","")
@@ -10420,7 +12535,7 @@ if environment.argument("usekpse") or environment.argument("forcekpse") then
return (kpse_initialized():show_path(name)) or ""
end
- elseif environment.argument("usekpse") then
+ elseif environment.argument("usekpse") or is_mkii_stub then
resolvers.load()
@@ -10449,7 +12564,6 @@ else
end
-
if environment.argument("selfmerge") then
-- embed used libraries
utils.merger.selfmerge(own.name,own.libs,own.list)
@@ -10462,9 +12576,14 @@ elseif environment.argument("selfupdate") then
elseif environment.argument("ctxlua") or environment.argument("internal") then
-- run a script by loading it (using libs)
ok = runners.execute_script(filename,true)
-elseif environment.argument("script") or environment.argument("s") then
+elseif environment.argument("script") or environment.argument("scripts") then
-- run a script by loading it (using libs), pass args
- ok = runners.execute_ctx_script(filename,after)
+ if is_mkii_stub then
+ -- execute mkii script
+ ok = runners.execute_script(filename,false,true)
+ else
+ ok = runners.execute_ctx_script(filename)
+ end
elseif environment.argument("execute") then
-- execute script
ok = runners.execute_script(filename)
@@ -10491,6 +12610,8 @@ elseif environment.argument("locate") then
elseif environment.argument("platform")then
-- locate platform
runners.locate_platform()
+elseif environment.argument("prefixes") then
+ runners.prefixes()
elseif environment.argument("timedrun") then
-- locate platform
runners.timedrun(filename)
@@ -10499,8 +12620,14 @@ elseif environment.argument("help") or filename=='help' or filename == "" then
-- execute script
elseif filename:find("^bin:") then
ok = runners.execute_program(filename)
+elseif is_mkii_stub then
+ -- execute mkii script
+ ok = runners.execute_script(filename,false,true)
else
- ok = runners.execute_script(filename)
+ ok = runners.execute_ctx_script(filename)
+ if not ok then
+ ok = runners.execute_script(filename)
+ end
end
if os.platform == "unix" then
diff --git a/Master/texmf-dist/scripts/context/stubs/mswin/mtxtools.bat b/Master/texmf-dist/scripts/context/stubs/mswin/mtxtools.bat
deleted file mode 100755
index 2e0fd35080d..00000000000
--- a/Master/texmf-dist/scripts/context/stubs/mswin/mtxtools.bat
+++ /dev/null
@@ -1,5 +0,0 @@
-@echo off
-setlocal
-set ownpath=%~dp0%
-texlua "%ownpath%mtxrun.lua" --usekpse --execute mtxtools.rb %*
-endlocal
diff --git a/Master/texmf-dist/scripts/context/stubs/mswin/mtxworks.cmd b/Master/texmf-dist/scripts/context/stubs/mswin/mtxworks.cmd
deleted file mode 100644
index 322d9464dd5..00000000000
--- a/Master/texmf-dist/scripts/context/stubs/mswin/mtxworks.cmd
+++ /dev/null
@@ -1 +0,0 @@
-mtxrun --script texworks --start
diff --git a/Master/texmf-dist/scripts/context/stubs/mswin/pdftools.bat b/Master/texmf-dist/scripts/context/stubs/mswin/pdftools.bat
deleted file mode 100755
index 94c8cf3bd79..00000000000
--- a/Master/texmf-dist/scripts/context/stubs/mswin/pdftools.bat
+++ /dev/null
@@ -1,5 +0,0 @@
-@echo off
-setlocal
-set ownpath=%~dp0%
-texlua "%ownpath%mtxrun.lua" --usekpse --execute pdftools.rb %*
-endlocal
diff --git a/Master/texmf-dist/scripts/context/stubs/mswin/pstopdf.bat b/Master/texmf-dist/scripts/context/stubs/mswin/pstopdf.bat
deleted file mode 100755
index ebc3cb690a7..00000000000
--- a/Master/texmf-dist/scripts/context/stubs/mswin/pstopdf.bat
+++ /dev/null
@@ -1,5 +0,0 @@
-@echo off
-setlocal
-set ownpath=%~dp0%
-texlua "%ownpath%mtxrun.lua" --usekpse --execute pstopdf.rb %*
-endlocal
diff --git a/Master/texmf-dist/scripts/context/stubs/mswin/rlxtools.bat b/Master/texmf-dist/scripts/context/stubs/mswin/rlxtools.bat
deleted file mode 100755
index 5069c935f3c..00000000000
--- a/Master/texmf-dist/scripts/context/stubs/mswin/rlxtools.bat
+++ /dev/null
@@ -1,5 +0,0 @@
-@echo off
-setlocal
-set ownpath=%~dp0%
-texlua "%ownpath%mtxrun.lua" --usekpse --execute rlxtools.rb %*
-endlocal
diff --git a/Master/texmf-dist/scripts/context/stubs/mswin/runtools.bat b/Master/texmf-dist/scripts/context/stubs/mswin/runtools.bat
deleted file mode 100755
index 2f89413d436..00000000000
--- a/Master/texmf-dist/scripts/context/stubs/mswin/runtools.bat
+++ /dev/null
@@ -1,5 +0,0 @@
-@echo off
-setlocal
-set ownpath=%~dp0%
-texlua "%ownpath%mtxrun.lua" --usekpse --execute runtools.rb %*
-endlocal
diff --git a/Master/texmf-dist/scripts/context/stubs/mswin/texexec.bat b/Master/texmf-dist/scripts/context/stubs/mswin/texexec.bat
deleted file mode 100755
index 6e8b80aabce..00000000000
--- a/Master/texmf-dist/scripts/context/stubs/mswin/texexec.bat
+++ /dev/null
@@ -1,5 +0,0 @@
-@echo off
-setlocal
-set ownpath=%~dp0%
-texlua "%ownpath%mtxrun.lua" --usekpse --execute texexec.rb %*
-endlocal
diff --git a/Master/texmf-dist/scripts/context/stubs/mswin/texexec.cmd b/Master/texmf-dist/scripts/context/stubs/mswin/texexec.cmd
deleted file mode 100644
index acbe41fd82b..00000000000
--- a/Master/texmf-dist/scripts/context/stubs/mswin/texexec.cmd
+++ /dev/null
@@ -1,5 +0,0 @@
-@echo off
-setlocal
-set ownpath=%~dp0%
-texlua "%ownpath%mtxrun.lua" --usekpse --execute texexec.rb %*
-endlocal
diff --git a/Master/texmf-dist/scripts/context/stubs/mswin/texexec.exe b/Master/texmf-dist/scripts/context/stubs/mswin/texexec.exe
new file mode 100644
index 00000000000..2d45f27494d
--- /dev/null
+++ b/Master/texmf-dist/scripts/context/stubs/mswin/texexec.exe
Binary files differ
diff --git a/Master/texmf-dist/scripts/context/stubs/mswin/texfont.bat b/Master/texmf-dist/scripts/context/stubs/mswin/texfont.bat
deleted file mode 100755
index 498d4d85b51..00000000000
--- a/Master/texmf-dist/scripts/context/stubs/mswin/texfont.bat
+++ /dev/null
@@ -1,5 +0,0 @@
-@echo off
-setlocal
-set ownpath=%~dp0%
-texlua "%ownpath%mtxrun.lua" --usekpse --execute texfont.pl %*
-endlocal
diff --git a/Master/texmf-dist/scripts/context/stubs/mswin/texmfstart.cmd b/Master/texmf-dist/scripts/context/stubs/mswin/texmfstart.cmd
deleted file mode 100644
index 47a10cc54cd..00000000000
--- a/Master/texmf-dist/scripts/context/stubs/mswin/texmfstart.cmd
+++ /dev/null
@@ -1,5 +0,0 @@
-@echo off
-setlocal
-set ownpath=%~dp0%
-texlua "%ownpath%mtxrun.lua" --usekpse %*
-endlocal
diff --git a/Master/texmf-dist/scripts/context/stubs/mswin/texmfstart.exe b/Master/texmf-dist/scripts/context/stubs/mswin/texmfstart.exe
new file mode 100644
index 00000000000..2d45f27494d
--- /dev/null
+++ b/Master/texmf-dist/scripts/context/stubs/mswin/texmfstart.exe
Binary files differ
diff --git a/Master/texmf-dist/scripts/context/stubs/mswin/textools.bat b/Master/texmf-dist/scripts/context/stubs/mswin/textools.bat
deleted file mode 100755
index b4cdfa1b332..00000000000
--- a/Master/texmf-dist/scripts/context/stubs/mswin/textools.bat
+++ /dev/null
@@ -1,5 +0,0 @@
-@echo off
-setlocal
-set ownpath=%~dp0%
-texlua "%ownpath%mtxrun.lua" --usekpse --execute textools.rb %*
-endlocal
diff --git a/Master/texmf-dist/scripts/context/stubs/mswin/texutil.bat b/Master/texmf-dist/scripts/context/stubs/mswin/texutil.bat
deleted file mode 100755
index 8b718640dcf..00000000000
--- a/Master/texmf-dist/scripts/context/stubs/mswin/texutil.bat
+++ /dev/null
@@ -1,5 +0,0 @@
-@echo off
-setlocal
-set ownpath=%~dp0%
-texlua "%ownpath%mtxrun.lua" --usekpse --execute texutil.rb %*
-endlocal
diff --git a/Master/texmf-dist/scripts/context/stubs/mswin/tmftools.bat b/Master/texmf-dist/scripts/context/stubs/mswin/tmftools.bat
deleted file mode 100755
index 1f5d8022280..00000000000
--- a/Master/texmf-dist/scripts/context/stubs/mswin/tmftools.bat
+++ /dev/null
@@ -1,5 +0,0 @@
-@echo off
-setlocal
-set ownpath=%~dp0%
-texlua "%ownpath%mtxrun.lua" --usekpse --execute tmftools.rb %*
-endlocal
diff --git a/Master/texmf-dist/scripts/context/stubs/mswin/xmltools.bat b/Master/texmf-dist/scripts/context/stubs/mswin/xmltools.bat
deleted file mode 100755
index 41f4ec30465..00000000000
--- a/Master/texmf-dist/scripts/context/stubs/mswin/xmltools.bat
+++ /dev/null
@@ -1,5 +0,0 @@
-@echo off
-setlocal
-set ownpath=%~dp0%
-texlua "%ownpath%mtxrun.lua" --usekpse --execute xmltools.rb %*
-endlocal
diff --git a/Master/texmf-dist/scripts/context/stubs/source/mtxrun_dll.c b/Master/texmf-dist/scripts/context/stubs/source/mtxrun_dll.c
new file mode 100644
index 00000000000..5b7cd31a07b
--- /dev/null
+++ b/Master/texmf-dist/scripts/context/stubs/source/mtxrun_dll.c
@@ -0,0 +1,221 @@
+/************************************************************************
+
+ Copyright:
+
+ Public Domain
+ Originally written in 2010 by Tomasz M. Trzeciak and Hans Hagen
+
+ This program is derived from the 'runscript' program originally
+ written in 2009 by T.M. Trzeciak. It has been adapted for use in
+ ConTeXt MkIV.
+
+ Comment:
+
+ In ConTeXt MkIV we have two core scripts: luatools.lua and
+ mtxrun.lua where the second one is used to launch other scripts.
+ Normally a user will use a call like:
+
+ mtxrun --script font --reload
+
+ Here mtxrun is a lua script. In order to avoid the usage of a cmd
+ file on windows this runner will start texlua directly. If the
+ shared library luatex.dll is available, texlua will be started in
+ the same process avoiding thus any additional overhead. Otherwise
+ it will be spawned in a new proces.
+
+ We also don't want to use other runners, like those that use kpse
+ to locate the script as this is exactly what mtxrun itself is doing
+ already. Therefore the runscript program is adapted to a more direct
+ approach suitable for mtxrun.
+
+ Compilation:
+
+ with gcc (size optimized):
+
+ gcc -Os -s -shared -o mtxrun.dll mtxrun_dll.c
+ gcc -Os -s -o mtxrun.exe mtxrun_exe.c -L./ -lmtxrun
+
+ with tcc (extra small size):
+
+ tcc -shared -o mtxrun.dll mtxrun_dll.c
+ tcc -o mtxrun.exe mtxrun_exe.c mtxrun.def
+
+************************************************************************/
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <windows.h>
+
+//#define STATIC
+#define IS_WHITESPACE(c) ((c == ' ') || (c == '\t'))
+#define MAX_CMD 32768
+#define DIE(...) { \
+ fprintf( stderr, "mtxrun: " ); \
+ fprintf( stderr, __VA_ARGS__ ); \
+ return 1; \
+}
+
+char texlua_name[] = "texlua"; // just a bare name, luatex strips the rest anyway
+static char cmdline[MAX_CMD];
+static char dirpath[MAX_PATH];
+static char progname[MAX_PATH];
+static char scriptpath[MAX_PATH];
+static char luatexpath[MAX_PATH];
+HMODULE dllluatex = NULL;
+typedef int ( *mainlikeproc )( int, char ** );
+
+#ifdef STATIC
+int main( int argc, char *argv[] )
+#else
+__declspec(dllexport) int dllrunscript( int argc, char *argv[] )
+#endif
+{
+ char *s, *luatexfname, *argstr, **lua_argv;
+ int k, quoted, lua_argc;
+ int passprogname = 0;
+
+ // directory of this module/executable
+
+ HMODULE module_handle = GetModuleHandle( "mtxrun.dll" );
+ // if ( module_handle == NULL ) exe path will be used, which is OK too
+ k = (int) GetModuleFileName( module_handle, dirpath, MAX_PATH );
+ if ( !k || ( k == MAX_PATH ) )
+ DIE( "unable to determine a valid module name\n" );
+ s = strrchr(dirpath, '\\');
+ if ( s == NULL ) DIE( "no directory part in module path: %s\n", dirpath );
+ *(++s) = '\0'; //remove file name, leave trailing backslash
+
+ // program name
+
+ k = strlen(argv[0]);
+ while ( k && (argv[0][k-1] != '/') && (argv[0][k-1] != '\\') ) k--;
+ strcpy(progname, &argv[0][k]);
+ s = progname;
+ if ( s = strrchr(s, '.') ) *s = '\0'; // remove file extension part
+
+ // script path
+
+ strcpy( scriptpath, dirpath );
+ k = strlen(progname);
+ if ( k < 6 ) k = 6; // in case the program name is shorter than "mtxrun"
+ if ( strlen(dirpath) + k + 4 >= MAX_PATH )
+ DIE( "path too long: %s%s\n", dirpath, progname );
+ if ( ( strcmpi(progname,"mtxrun") == 0 ) || ( strcmpi(progname,"luatools") == 0 ) ) {
+ strcat( scriptpath, progname );
+ strcat( scriptpath, ".lua" );
+ } else {
+ strcat( scriptpath, "mtxrun.lua" );
+ if ( strcmpi(progname,"texmfstart") != 0 ) passprogname = 1;
+ }
+ if ( GetFileAttributes(scriptpath) == INVALID_FILE_ATTRIBUTES )
+ DIE( "file not found: %s\n", scriptpath );
+
+ // find texlua.exe
+
+ if ( !SearchPath(
+ getenv( "PATH" ), // path to search (optional)
+ "texlua.exe", // file name to search
+ NULL, // file extension to add (optional)
+ MAX_PATH, // output buffer size
+ luatexpath, // output buffer pointer
+ &luatexfname ) // pointer to a file part in the output buffer (optional)
+ ) DIE( "unable to locate texlua.exe on the search path" );
+
+ // link directly with luatex.dll if available in texlua's dir
+
+ strcpy( luatexfname, "luatex.dll" );
+ if ( dllluatex = LoadLibrary(luatexpath) )
+ {
+ mainlikeproc dllluatexmain = (mainlikeproc) GetProcAddress( dllluatex, "dllluatexmain" );
+ if ( dllluatexmain == NULL )
+ DIE( "unable to locate dllluatexmain procedure in luatex.dll" );
+
+ // set up argument list for texlua script
+
+ lua_argv = (char **)malloc( (argc + 4) * sizeof(char *) );
+ if ( lua_argv == NULL ) DIE( "out of memory\n" );
+ lua_argv[lua_argc=0] = texlua_name;
+ lua_argv[++lua_argc] = scriptpath; // script to execute
+ if (passprogname) {
+ lua_argv[++lua_argc] = "--script";
+ lua_argv[++lua_argc] = progname;
+ }
+ for ( k = 1; k < argc; k++ ) lua_argv[++lua_argc] = argv[k];
+ lua_argv[++lua_argc] = NULL;
+
+ // call texlua interpreter
+ // dllluatexmain never returns, but we pretend that it does
+
+ k = dllluatexmain( lua_argc, lua_argv );
+ if (lua_argv) free( lua_argv );
+ return k;
+ }
+
+ // we are still here, so no luatex.dll; spawn texlua.exe instead
+
+ strcpy( luatexfname, "texlua.exe" );
+ strcpy( cmdline, "\"" );
+ strcat( cmdline, luatexpath );
+ strcat( cmdline, "\" \"" );
+ strcat( cmdline, scriptpath );
+ strcat( cmdline, "\"" );
+ if (passprogname) {
+ strcat( cmdline, " --script " );
+ strcat( cmdline, progname );
+ }
+
+ argstr = GetCommandLine(); // get the command line of this process
+ if ( argstr == NULL ) DIE( "unable to retrieve the command line string\n" );
+
+ // skip over argv[0] in the argument string
+ // (it can contain embedded double quotes if launched from cmd.exe!)
+
+ for ( quoted = 0; (*argstr) && ( !IS_WHITESPACE(*argstr) || quoted ); argstr++ )
+ if (*argstr == '"') quoted = !quoted;
+
+ // pass through all the arguments
+
+ if ( strlen(cmdline) + strlen(argstr) >= MAX_CMD )
+ DIE( "command line string too long:\n%s%s\n", cmdline, argstr );
+ strcat( cmdline, argstr );
+
+ // create child process
+
+ STARTUPINFO si;
+ PROCESS_INFORMATION pi;
+ ZeroMemory( &si, sizeof(si) );
+ si.cb = sizeof(si);
+ si.dwFlags = STARTF_USESTDHANDLES;// | STARTF_USESHOWWINDOW;
+ //si.dwFlags = STARTF_USESHOWWINDOW;
+ //si.wShowWindow = SW_HIDE ; // can be used to hide console window (requires STARTF_USESHOWWINDOW flag)
+ si.hStdInput = GetStdHandle( STD_INPUT_HANDLE );
+ si.hStdOutput = GetStdHandle( STD_OUTPUT_HANDLE );
+ si.hStdError = GetStdHandle( STD_ERROR_HANDLE );
+ ZeroMemory( &pi, sizeof(pi) );
+
+ if( !CreateProcess(
+ NULL, // module name (uses command line if NULL)
+ cmdline, // command line
+ NULL, // process security atrributes
+ NULL, // thread security atrributes
+ TRUE, // handle inheritance
+ 0, // creation flags, e.g. CREATE_NEW_CONSOLE, CREATE_NO_WINDOW, DETACHED_PROCESS
+ NULL, // pointer to environment block (uses parent if NULL)
+ NULL, // starting directory (uses parent if NULL)
+ &si, // STARTUPINFO structure
+ &pi ) // PROCESS_INFORMATION structure
+ ) DIE( "command execution failed: %s\n", cmdline );
+
+ DWORD ret = 0;
+ CloseHandle( pi.hThread ); // thread handle is not needed
+ if ( WaitForSingleObject( pi.hProcess, INFINITE ) == WAIT_OBJECT_0 ) {
+ if ( !GetExitCodeProcess( pi.hProcess, &ret) )
+ DIE( "unable to retrieve process exit code: %s\n", cmdline );
+ } else DIE( "failed to wait for process termination: %s\n", cmdline );
+ CloseHandle( pi.hProcess );
+
+ // propagate exit code from the child process
+
+ return ret;
+
+}
diff --git a/Master/texmf-dist/scripts/context/stubs/source/mtxrun_exe.c b/Master/texmf-dist/scripts/context/stubs/source/mtxrun_exe.c
new file mode 100644
index 00000000000..0c27c272e37
--- /dev/null
+++ b/Master/texmf-dist/scripts/context/stubs/source/mtxrun_exe.c
@@ -0,0 +1,8 @@
+// This is the .exe part of the mtxrun program, see mtxrun_dll.c
+// for more details.
+
+#include <windows.h>
+
+__declspec(dllimport) int dllrunscript( int argc, char *argv[] );
+
+int main( int argc, char *argv[] ) { return dllrunscript( argc, argv ); }
diff --git a/Master/texmf-dist/scripts/context/stubs/source/readme.txt b/Master/texmf-dist/scripts/context/stubs/source/readme.txt
new file mode 100644
index 00000000000..354d85b0920
--- /dev/null
+++ b/Master/texmf-dist/scripts/context/stubs/source/readme.txt
@@ -0,0 +1,36 @@
+Copyright:
+
+The originally 'runscript' program was written by in 2009 by
+T.M.Trzeciak and is public domain. This derived mtxrun program
+is an adapted version by Hans Hagen.
+
+Comment:
+
+In ConTeXt MkIV we have two core scripts: luatools.lua and
+mtxrun.lua where the second one is used to launch other scripts.
+Normally a user will use a call like:
+
+mtxrun --script font --reload
+
+Here mtxrun is a lua script. In order to avoid the usage of a cmd
+file on windows this runner will start texlua directly. In TeXlive
+a runner is added for each cmd file but we don't want that overhead
+(and extra files). By using an exe we can call these scripts in
+batch files without the need for using call.
+
+We also don't want to use other runners, like those that use kpse
+to locate the script as this is exactly what mtxrun itself is doing
+already. Therefore the runscript program is adapted to a more direct
+approach suitable for mtxrun.
+
+Compilation:
+
+with gcc (size optimized):
+
+gcc -Os -s -shared -o mtxrun.dll mtxrun_dll.c
+gcc -Os -s -o mtxrun.exe mtxrun_exe.c -L./ -lmtxrun
+
+with tcc (ver. 0.9.24), extra small size
+
+tcc -shared -o runscript.dll runscript_dll.c
+tcc -o runscript.exe runscript_exe.c runscript.def
diff --git a/Master/texmf-dist/scripts/context/stubs/unix/ctxtools b/Master/texmf-dist/scripts/context/stubs/unix/ctxtools
deleted file mode 100755
index 4658a345a8c..00000000000
--- a/Master/texmf-dist/scripts/context/stubs/unix/ctxtools
+++ /dev/null
@@ -1,2 +0,0 @@
-#!/bin/sh
-mtxrun --usekpse --execute ctxtools.rb "$@"
diff --git a/Master/texmf-dist/scripts/context/stubs/unix/luatools b/Master/texmf-dist/scripts/context/stubs/unix/luatools
index 433d1b8dc0a..1d87322c108 100644
--- a/Master/texmf-dist/scripts/context/stubs/unix/luatools
+++ b/Master/texmf-dist/scripts/context/stubs/unix/luatools
@@ -39,13 +39,16 @@ do -- create closure to overcome 200 locals limit
if not modules then modules = { } end modules ['l-string'] = {
version = 1.001,
- comment = "companion to luat-lib.tex",
+ comment = "companion to luat-lib.mkiv",
author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
copyright = "PRAGMA ADE / ConTeXt Development Team",
license = "see context related readme files"
}
-local sub, gsub, find, match, gmatch, format, char, byte, rep = string.sub, string.gsub, string.find, string.match, string.gmatch, string.format, string.char, string.byte, string.rep
+local sub, gsub, find, match, gmatch, format, char, byte, rep, lower = string.sub, string.gsub, string.find, string.match, string.gmatch, string.format, string.char, string.byte, string.rep, string.lower
+local lpegmatch = lpeg.match
+
+-- some functions may disappear as they are not used anywhere
if not string.split then
@@ -85,8 +88,16 @@ function string:unquote()
return (gsub(self,"^([\"\'])(.*)%1$","%2"))
end
+--~ function string:unquote()
+--~ if find(self,"^[\'\"]") then
+--~ return sub(self,2,-2)
+--~ else
+--~ return self
+--~ end
+--~ end
+
function string:quote() -- we could use format("%q")
- return '"' .. self:unquote() .. '"'
+ return format("%q",self)
end
function string:count(pattern) -- variant 3
@@ -106,12 +117,23 @@ function string:limit(n,sentinel)
end
end
-function string:strip()
- return (gsub(self,"^%s*(.-)%s*$", "%1"))
+--~ function string:strip() -- the .- is quite efficient
+--~ -- return match(self,"^%s*(.-)%s*$") or ""
+--~ -- return match(self,'^%s*(.*%S)') or '' -- posted on lua list
+--~ return find(s,'^%s*$') and '' or match(s,'^%s*(.*%S)')
+--~ end
+
+do -- roberto's variant:
+ local space = lpeg.S(" \t\v\n")
+ local nospace = 1 - space
+ local stripper = space^0 * lpeg.C((space^0 * nospace^1)^0)
+ function string.strip(str)
+ return lpegmatch(stripper,str) or ""
+ end
end
function string:is_empty()
- return not find(find,"%S")
+ return not find(self,"%S")
end
function string:enhance(pattern,action)
@@ -145,14 +167,14 @@ if not string.characters then
local function nextchar(str, index)
index = index + 1
- return (index <= #str) and index or nil, str:sub(index,index)
+ return (index <= #str) and index or nil, sub(str,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, byte(str:sub(index,index))
+ return (index <= #str) and index or nil, byte(sub(str,index,index))
end
function string:bytes()
return nextbyte, self, 0
@@ -165,7 +187,7 @@ end
function string:rpadd(n,chr)
local m = n-#self
if m > 0 then
- return self .. self.rep(chr or " ",m)
+ return self .. rep(chr or " ",m)
else
return self
end
@@ -174,7 +196,7 @@ end
function string:lpadd(n,chr)
local m = n-#self
if m > 0 then
- return self.rep(chr or " ",m) .. self
+ return rep(chr or " ",m) .. self
else
return self
end
@@ -222,6 +244,17 @@ function string:pattesc()
return (gsub(self,".",patterns_escapes))
end
+local simple_escapes = {
+ ["-"] = "%-",
+ ["."] = "%.",
+ ["?"] = ".",
+ ["*"] = ".*",
+}
+
+function string:simpleesc()
+ return (gsub(self,".",simple_escapes))
+end
+
function string:tohash()
local t = { }
for s in gmatch(self,"([^, ]+)") do -- lpeg
@@ -233,10 +266,10 @@ end
local pattern = lpeg.Ct(lpeg.C(1)^0)
function string:totable()
- return pattern:match(self)
+ return lpegmatch(pattern,self)
end
---~ for _, str in ipairs {
+--~ local t = {
--~ "1234567123456712345671234567",
--~ "a\tb\tc",
--~ "aa\tbb\tcc",
@@ -244,7 +277,10 @@ end
--~ "aaaa\tbbbb\tcccc",
--~ "aaaaa\tbbbbb\tccccc",
--~ "aaaaaa\tbbbbbb\tcccccc",
---~ } do print(string.tabtospace(str)) end
+--~ }
+--~ for k,v do
+--~ print(string.tabtospace(t[k]))
+--~ end
function string.tabtospace(str,tab)
-- we don't handle embedded newlines
@@ -252,7 +288,7 @@ function string.tabtospace(str,tab)
local s = find(str,"\t")
if s then
if not tab then tab = 7 end -- only when found
- local d = tab-(s-1)%tab
+ local d = tab-(s-1) % tab
if d > 0 then
str = gsub(str,"\t",rep(" ",d),1)
else
@@ -271,6 +307,25 @@ function string:compactlong() -- strips newlines and leading spaces
return self
end
+function string:striplong() -- strips newlines and leading spaces
+ self = gsub(self,"^%s*","")
+ self = gsub(self,"[\n\r]+ *","\n")
+ return self
+end
+
+function string:topattern(lowercase,strict)
+ if lowercase then
+ self = lower(self)
+ end
+ self = gsub(self,".",simple_escapes)
+ if self == "" then
+ self = ".*"
+ elseif strict then
+ self = "^" .. self .. "$"
+ end
+ return self
+end
+
end -- of closure
@@ -278,58 +333,64 @@ do -- create closure to overcome 200 locals limit
if not modules then modules = { } end modules ['l-lpeg'] = {
version = 1.001,
- comment = "companion to luat-lib.tex",
+ comment = "companion to luat-lib.mkiv",
author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
copyright = "PRAGMA ADE / ConTeXt Development Team",
license = "see context related readme files"
}
-local P, S, Ct, C, Cs, Cc = lpeg.P, lpeg.S, lpeg.Ct, lpeg.C, lpeg.Cs, lpeg.Cc
-
---~ 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 = { }
+local lpeg = require("lpeg")
+
+lpeg.patterns = lpeg.patterns or { } -- so that we can share
+local patterns = lpeg.patterns
+
+local P, R, S, Ct, C, Cs, Cc, V = lpeg.P, lpeg.R, lpeg.S, lpeg.Ct, lpeg.C, lpeg.Cs, lpeg.Cc, lpeg.V
+local match = lpeg.match
+
+local digit, sign = R('09'), S('+-')
+local cr, lf, crlf = P("\r"), P("\n"), P("\r\n")
+local utf8byte = R("\128\191")
+
+patterns.utf8byte = utf8byte
+patterns.utf8one = R("\000\127")
+patterns.utf8two = R("\194\223") * utf8byte
+patterns.utf8three = R("\224\239") * utf8byte * utf8byte
+patterns.utf8four = R("\240\244") * utf8byte * utf8byte * utf8byte
+
+patterns.digit = digit
+patterns.sign = sign
+patterns.cardinal = sign^0 * digit^1
+patterns.integer = sign^0 * digit^1
+patterns.float = sign^0 * digit^0 * P('.') * digit^1
+patterns.number = patterns.float + patterns.integer
+patterns.oct = P("0") * R("07")^1
+patterns.octal = patterns.oct
+patterns.HEX = P("0x") * R("09","AF")^1
+patterns.hex = P("0x") * R("09","af")^1
+patterns.hexadecimal = P("0x") * R("09","AF","af")^1
+patterns.lowercase = R("az")
+patterns.uppercase = R("AZ")
+patterns.letter = patterns.lowercase + patterns.uppercase
+patterns.space = S(" ")
+patterns.eol = S("\n\r")
+patterns.spacer = S(" \t\f\v") -- + string.char(0xc2, 0xa0) if we want utf (cf mail roberto)
+patterns.newline = crlf + cr + lf
+patterns.nonspace = 1 - patterns.space
+patterns.nonspacer = 1 - patterns.spacer
+patterns.whitespace = patterns.eol + patterns.spacer
+patterns.nonwhitespace = 1 - patterns.whitespace
+patterns.utf8 = patterns.utf8one + patterns.utf8two + patterns.utf8three + patterns.utf8four
+patterns.utfbom = P('\000\000\254\255') + P('\255\254\000\000') + P('\255\254') + P('\254\255') + P('\239\187\191')
function lpeg.anywhere(pattern) --slightly adapted from website
- return P { P(pattern) + 1 * lpeg.V(1) }
-end
-
-function lpeg.startswith(pattern) --slightly adapted
- return P(pattern)
+ return P { P(pattern) + 1 * V(1) } -- why so complex?
end
function lpeg.splitter(pattern, action)
return (((1-P(pattern))^1)/action+1)^0
end
--- variant:
-
---~ local parser = lpeg.Ct(lpeg.splitat(newline))
-
-local crlf = P("\r\n")
-local cr = P("\r")
-local lf = P("\n")
-local space = S(" \t\f\v") -- + string.char(0xc2, 0xa0) if we want utf (cf mail roberto)
-local newline = crlf + cr + lf
-local spacing = space^0 * newline
-
+local spacing = patterns.spacer^0 * patterns.newline -- sort of strip
local empty = spacing * Cc("")
local nonempty = Cs((1-spacing)^1) * spacing^-1
local content = (empty + nonempty)^1
@@ -337,15 +398,15 @@ local content = (empty + nonempty)^1
local capture = Ct(content^0)
function string:splitlines()
- return capture:match(self)
+ return match(capture,self)
end
-lpeg.linebyline = content -- better make a sublibrary
+patterns.textline = content
---~ local p = lpeg.splitat("->",false) print(p:match("oeps->what->more")) -- oeps what more
---~ local p = lpeg.splitat("->",true) print(p:match("oeps->what->more")) -- oeps what->more
---~ local p = lpeg.splitat("->",false) print(p:match("oeps")) -- oeps
---~ local p = lpeg.splitat("->",true) print(p:match("oeps")) -- oeps
+--~ local p = lpeg.splitat("->",false) print(match(p,"oeps->what->more")) -- oeps what more
+--~ local p = lpeg.splitat("->",true) print(match(p,"oeps->what->more")) -- oeps what->more
+--~ local p = lpeg.splitat("->",false) print(match(p,"oeps")) -- oeps
+--~ local p = lpeg.splitat("->",true) print(match(p,"oeps")) -- oeps
local splitters_s, splitters_m = { }, { }
@@ -355,7 +416,7 @@ local function splitat(separator,single)
separator = P(separator)
if single then
local other, any = C((1 - separator)^0), P(1)
- splitter = other * (separator * C(any^0) + "")
+ splitter = other * (separator * C(any^0) + "") -- ?
splitters_s[separator] = splitter
else
local other = C((1 - separator)^0)
@@ -370,15 +431,72 @@ lpeg.splitat = splitat
local cache = { }
+function lpeg.split(separator,str)
+ local c = cache[separator]
+ if not c then
+ c = Ct(splitat(separator))
+ cache[separator] = c
+ end
+ return match(c,str)
+end
+
function string:split(separator)
local c = cache[separator]
if not c then
c = Ct(splitat(separator))
cache[separator] = c
end
- return c:match(self)
+ return match(c,self)
+end
+
+lpeg.splitters = cache
+
+local cache = { }
+
+function lpeg.checkedsplit(separator,str)
+ local c = cache[separator]
+ if not c then
+ separator = P(separator)
+ local other = C((1 - separator)^0)
+ c = Ct(separator^0 * other * (separator^1 * other)^0)
+ cache[separator] = c
+ end
+ return match(c,str)
+end
+
+function string:checkedsplit(separator)
+ local c = cache[separator]
+ if not c then
+ separator = P(separator)
+ local other = C((1 - separator)^0)
+ c = Ct(separator^0 * other * (separator^1 * other)^0)
+ cache[separator] = c
+ end
+ return match(c,self)
end
+--~ function lpeg.append(list,pp)
+--~ local p = pp
+--~ for l=1,#list do
+--~ if p then
+--~ p = p + P(list[l])
+--~ else
+--~ p = P(list[l])
+--~ end
+--~ end
+--~ return p
+--~ end
+
+--~ from roberto's site:
+
+local f1 = string.byte
+
+local function f2(s) local c1, c2 = f1(s,1,2) return c1 * 64 + c2 - 12416 end
+local function f3(s) local c1, c2, c3 = f1(s,1,3) return (c1 * 64 + c2) * 64 + c3 - 925824 end
+local function f4(s) local c1, c2, c3, c4 = f1(s,1,4) return ((c1 * 64 + c2) * 64 + c3) * 64 + c4 - 63447168 end
+
+patterns.utf8byte = patterns.utf8one/f1 + patterns.utf8two/f2 + patterns.utf8three/f3 + patterns.utf8four/f4
+
end -- of closure
@@ -386,7 +504,7 @@ do -- create closure to overcome 200 locals limit
if not modules then modules = { } end modules ['l-table'] = {
version = 1.001,
- comment = "companion to luat-lib.tex",
+ comment = "companion to luat-lib.mkiv",
author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
copyright = "PRAGMA ADE / ConTeXt Development Team",
license = "see context related readme files"
@@ -395,9 +513,10 @@ if not modules then modules = { } end modules ['l-table'] = {
table.join = table.concat
local concat, sort, insert, remove = table.concat, table.sort, table.insert, table.remove
-local format, find, gsub, lower, dump = string.format, string.find, string.gsub, string.lower, string.dump
+local format, find, gsub, lower, dump, match = string.format, string.find, string.gsub, string.lower, string.dump, string.match
local getmetatable, setmetatable = getmetatable, setmetatable
-local type, next, tostring, ipairs = type, next, tostring, ipairs
+local type, next, tostring, tonumber, ipairs = type, next, tostring, tonumber, ipairs
+local unpack = unpack or table.unpack
function table.strip(tab)
local lst = { }
@@ -412,6 +531,14 @@ function table.strip(tab)
return lst
end
+function table.keys(t)
+ local k = { }
+ for key, _ in next, t do
+ k[#k+1] = key
+ end
+ return k
+end
+
local function compare(a,b)
return (tostring(a) < tostring(b))
end
@@ -455,7 +582,7 @@ end
table.sortedkeys = sortedkeys
table.sortedhashkeys = sortedhashkeys
-function table.sortedpairs(t)
+function table.sortedhash(t)
local s = sortedhashkeys(t) -- maybe just sortedkeys
local n = 0
local function kv(s)
@@ -466,6 +593,8 @@ function table.sortedpairs(t)
return kv, s
end
+table.sortedpairs = table.sortedhash
+
function table.append(t, list)
for _,v in next, list do
insert(t,v)
@@ -588,18 +717,18 @@ end
-- slower than #t on indexed tables (#t only returns the size of the numerically indexed slice)
-function table.is_empty(t)
+function table.is_empty(t) -- obolete, use inline code instead
return not t or not next(t)
end
-function table.one_entry(t)
+function table.one_entry(t) -- obolete, use inline code instead
local n = next(t)
return n and not next(t,n)
end
-function table.starts_at(t)
- return ipairs(t,1)(t,0)
-end
+--~ function table.starts_at(t) -- obsolete, not nice
+--~ return ipairs(t,1)(t,0)
+--~ end
function table.tohash(t,value)
local h = { }
@@ -677,6 +806,8 @@ end
--
-- local propername = lpeg.P(lpeg.R("AZ","az","__") * lpeg.R("09","AZ","az", "__")^0 * lpeg.P(-1) )
+-- problem: there no good number_to_string converter with the best resolution
+
local function do_serialize(root,name,depth,level,indexed)
if level > 0 then
depth = depth .. " "
@@ -699,8 +830,9 @@ local function do_serialize(root,name,depth,level,indexed)
handle(format("%s{",depth))
end
end
+ -- we could check for k (index) being number (cardinal)
if root and next(root) then
- local first, last = nil, 0 -- #root cannot be trusted here
+ local first, last = nil, 0 -- #root cannot be trusted here (will be ok in 5.2 when ipairs is gone)
if compact then
-- NOT: for k=1,#root do (we need to quit at nil)
for k,v in ipairs(root) do -- can we use next?
@@ -721,10 +853,10 @@ local function do_serialize(root,name,depth,level,indexed)
if hexify then
handle(format("%s 0x%04X,",depth,v))
else
- handle(format("%s %s,",depth,v))
+ handle(format("%s %s,",depth,v)) -- %.99g
end
elseif t == "string" then
- if reduce and (find(v,"^[%-%+]?[%d]-%.?[%d+]$") == 1) then
+ if reduce and tonumber(v) then
handle(format("%s %s,",depth,v))
else
handle(format("%s %q,",depth,v))
@@ -761,29 +893,29 @@ local function do_serialize(root,name,depth,level,indexed)
--~ if hexify then
--~ handle(format("%s %s=0x%04X,",depth,key(k),v))
--~ else
- --~ handle(format("%s %s=%s,",depth,key(k),v))
+ --~ handle(format("%s %s=%s,",depth,key(k),v)) -- %.99g
--~ end
if type(k) == "number" then -- or find(k,"^%d+$") then
if hexify then
handle(format("%s [0x%04X]=0x%04X,",depth,k,v))
else
- handle(format("%s [%s]=%s,",depth,k,v))
+ handle(format("%s [%s]=%s,",depth,k,v)) -- %.99g
end
elseif noquotes and not reserved[k] and find(k,"^%a[%w%_]*$") then
if hexify then
handle(format("%s %s=0x%04X,",depth,k,v))
else
- handle(format("%s %s=%s,",depth,k,v))
+ handle(format("%s %s=%s,",depth,k,v)) -- %.99g
end
else
if hexify then
handle(format("%s [%q]=0x%04X,",depth,k,v))
else
- handle(format("%s [%q]=%s,",depth,k,v))
+ handle(format("%s [%q]=%s,",depth,k,v)) -- %.99g
end
end
elseif t == "string" then
- if reduce and (find(v,"^[%-%+]?[%d]-%.?[%d+]$") == 1) then
+ if reduce and tonumber(v) then
--~ handle(format("%s %s=%s,",depth,key(k),v))
if type(k) == "number" then -- or find(k,"^%d+$") then
if hexify then
@@ -992,7 +1124,7 @@ function table.tofile(filename,root,name,reduce,noquotes,hexify)
end
end
-local function flatten(t,f,complete)
+local function flatten(t,f,complete) -- is this used? meybe a variant with next, ...
for i=1,#t do
local v = t[i]
if type(v) == "table" then
@@ -1021,6 +1153,24 @@ end
table.flatten_one_level = table.unnest
+-- a better one:
+
+local function flattened(t,f)
+ if not f then
+ f = { }
+ end
+ for k, v in next, t do
+ if type(v) == "table" then
+ flattened(v,f)
+ else
+ f[k] = v
+ end
+ end
+ return f
+end
+
+table.flattened = flattened
+
-- the next three may disappear
function table.remove_value(t,value) -- todo: n
@@ -1156,7 +1306,7 @@ function table.clone(t,p) -- t is optional or nil or table
elseif not t then
t = { }
end
- setmetatable(t, { __index = function(_,key) return p[key] end })
+ setmetatable(t, { __index = function(_,key) return p[key] end }) -- why not __index = p ?
return t
end
@@ -1184,21 +1334,35 @@ function table.reverse(t)
return tt
end
---~ function table.keys(t)
---~ local k = { }
---~ for k,_ in next, t do
---~ k[#k+1] = k
---~ end
---~ return k
---~ end
+function table.insert_before_value(t,value,extra)
+ for i=1,#t do
+ if t[i] == extra then
+ remove(t,i)
+ end
+ end
+ for i=1,#t do
+ if t[i] == value then
+ insert(t,i,extra)
+ return
+ end
+ end
+ insert(t,1,extra)
+end
---~ function table.keys_as_string(t)
---~ local k = { }
---~ for k,_ in next, t do
---~ k[#k+1] = k
---~ end
---~ return concat(k,"")
---~ end
+function table.insert_after_value(t,value,extra)
+ for i=1,#t do
+ if t[i] == extra then
+ remove(t,i)
+ end
+ end
+ for i=1,#t do
+ if t[i] == value then
+ insert(t,i+1,extra)
+ return
+ end
+ end
+ insert(t,#t+1,extra)
+end
end -- of closure
@@ -1207,13 +1371,13 @@ do -- create closure to overcome 200 locals limit
if not modules then modules = { } end modules ['l-io'] = {
version = 1.001,
- comment = "companion to luat-lib.tex",
+ comment = "companion to luat-lib.mkiv",
author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
copyright = "PRAGMA ADE / ConTeXt Development Team",
license = "see context related readme files"
}
-local byte = string.byte
+local byte, find, gsub = string.byte, string.find, string.gsub
if string.find(os.getenv("PATH"),";") then
io.fileseparator, io.pathseparator = "\\", ";"
@@ -1242,7 +1406,7 @@ function io.savedata(filename,data,joiner)
elseif type(data) == "function" then
data(f)
else
- f:write(data)
+ f:write(data or "")
end
f:close()
return true
@@ -1371,20 +1535,21 @@ function io.ask(question,default,options)
end
io.write(string.format(" "))
local answer = io.read()
- answer = answer:gsub("^%s*(.*)%s*$","%1")
+ answer = gsub(answer,"^%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
+ for k=1,#options do
+ if options[k] == answer then
return answer
end
end
local pattern = "^" .. answer
- for _,v in pairs(options) do
- if v:find(pattern) then
+ for k=1,#options do
+ local v = options[k]
+ if find(v,pattern) then
return v
end
end
@@ -1399,20 +1564,22 @@ do -- create closure to overcome 200 locals limit
if not modules then modules = { } end modules ['l-number'] = {
version = 1.001,
- comment = "companion to luat-lib.tex",
+ comment = "companion to luat-lib.mkiv",
author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
copyright = "PRAGMA ADE / ConTeXt Development Team",
license = "see context related readme files"
}
-local format = string.format
+local tostring = tostring
+local format, floor, insert, match = string.format, math.floor, table.insert, string.match
+local lpegmatch = lpeg.match
number = number or { }
-- a,b,c,d,e,f = number.toset(100101)
function number.toset(n)
- return (tostring(n)):match("(.?)(.?)(.?)(.?)(.?)(.?)(.?)(.?)")
+ return match(tostring(n),"(.?)(.?)(.?)(.?)(.?)(.?)(.?)(.?)")
end
function number.toevenhex(n)
@@ -1438,10 +1605,21 @@ end
local one = lpeg.C(1-lpeg.S(''))^1
function number.toset(n)
- return one:match(tostring(n))
+ return lpegmatch(one,tostring(n))
end
-
+function number.bits(n,zero)
+ local t, i = { }, (zero and 0) or 1
+ while n > 0 do
+ local m = n % 2
+ if m > 0 then
+ insert(t,1,i)
+ end
+ n = floor(n/2)
+ i = i + 1
+ end
+ return t
+end
end -- of closure
@@ -1450,7 +1628,7 @@ do -- create closure to overcome 200 locals limit
if not modules then modules = { } end modules ['l-set'] = {
version = 1.001,
- comment = "companion to luat-lib.tex",
+ comment = "companion to luat-lib.mkiv",
author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
copyright = "PRAGMA ADE / ConTeXt Development Team",
license = "see context related readme files"
@@ -1540,46 +1718,63 @@ do -- create closure to overcome 200 locals limit
if not modules then modules = { } end modules ['l-os'] = {
version = 1.001,
- comment = "companion to luat-lub.tex",
+ comment = "companion to luat-lib.mkiv",
author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
copyright = "PRAGMA ADE / ConTeXt Development Team",
license = "see context related readme files"
}
-local find = string.find
+-- maybe build io.flush in os.execute
+
+local find, format, gsub = string.find, string.format, string.gsub
+local random, ceil = math.random, math.ceil
+
+local execute, spawn, exec, ioflush = os.execute, os.spawn or os.execute, os.exec or os.execute, io.flush
+
+function os.execute(...) ioflush() return execute(...) end
+function os.spawn (...) ioflush() return spawn (...) end
+function os.exec (...) ioflush() return exec (...) end
function os.resultof(command)
- return io.popen(command,"r"):read("*all")
+ ioflush() -- else messed up logging
+ local handle = io.popen(command,"r")
+ if not handle then
+ -- print("unknown command '".. command .. "' in os.resultof")
+ return ""
+ else
+ return handle:read("*all") or ""
+ end
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)
+--~ os.type : windows | unix (new, we already guessed os.platform)
+--~ os.name : windows | msdos | linux | macosx | solaris | .. | generic (new)
+--~ os.platform : extended os.name with architecture
if not io.fileseparator then
if find(os.getenv("PATH"),";") then
- io.fileseparator, io.pathseparator, os.platform = "\\", ";", os.type or "windows"
+ io.fileseparator, io.pathseparator, os.type = "\\", ";", os.type or "mswin"
else
- io.fileseparator, io.pathseparator, os.platform = "/" , ":", os.type or "unix"
+ io.fileseparator, io.pathseparator, os.type = "/" , ":", os.type or "unix"
end
end
-os.platform = os.platform or os.type or (io.pathseparator == ";" and "windows") or "unix"
+os.type = os.type or (io.pathseparator == ";" and "windows") or "unix"
+os.name = os.name or (os.type == "windows" and "mswin" ) or "linux"
+
+if os.type == "windows" then
+ os.libsuffix, os.binsuffix = 'dll', 'exe'
+else
+ os.libsuffix, os.binsuffix = 'so', ''
+end
function os.launch(str)
- if os.platform == "windows" then
+ if os.type == "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
@@ -1609,64 +1804,218 @@ end
--~ print(os.date("%H:%M:%S",os.gettimeofday()))
--~ print(os.date("%H:%M:%S",os.time()))
-os.arch = os.arch or function()
- local a = os.resultof("uname -m") or "linux"
- os.arch = function()
- return a
+-- no need for function anymore as we have more clever code and helpers now
+-- this metatable trickery might as well disappear
+
+os.resolvers = os.resolvers or { }
+
+local resolvers = os.resolvers
+
+local osmt = getmetatable(os) or { __index = function(t,k) t[k] = "unset" return "unset" end } -- maybe nil
+local osix = osmt.__index
+
+osmt.__index = function(t,k)
+ return (resolvers[k] or osix)(t,k)
+end
+
+setmetatable(os,osmt)
+
+if not os.setenv then
+
+ -- we still store them but they won't be seen in
+ -- child processes although we might pass them some day
+ -- using command concatination
+
+ local env, getenv = { }, os.getenv
+
+ function os.setenv(k,v)
+ env[k] = v
end
- return a
+
+ function os.getenv(k)
+ return env[k] or getenv(k)
+ end
+
end
-local platform
+-- we can use HOSTTYPE on some platforms
-function os.currentplatform(name,default)
- if not platform then
- local name = os.name or os.platform or name -- os.name is built in, os.platform is mine
- if not name then
- platform = default or "linux"
- elseif name == "windows" or name == "mswin" or name == "win32" or name == "msdos" then
- if os.getenv("PROCESSOR_ARCHITECTURE") == "AMD64" then
- platform = "mswin-64"
- else
- platform = "mswin"
- end
+local name, platform = os.name or "linux", os.getenv("MTX_PLATFORM") or ""
+
+local function guess()
+ local architecture = os.resultof("uname -m") or ""
+ if architecture ~= "" then
+ return architecture
+ end
+ architecture = os.getenv("HOSTTYPE") or ""
+ if architecture ~= "" then
+ return architecture
+ end
+ return os.resultof("echo $HOSTTYPE") or ""
+end
+
+if platform ~= "" then
+
+ os.platform = platform
+
+elseif os.type == "windows" then
+
+ -- we could set the variable directly, no function needed here
+
+ function os.resolvers.platform(t,k)
+ local platform, architecture = "", os.getenv("PROCESSOR_ARCHITECTURE") or ""
+ if find(architecture,"AMD64") then
+ platform = "mswin-64"
else
- local architecture = os.arch()
- if name == "linux" then
- if find(architecture,"x86_64") then
- platform = "linux-64"
- elseif find(architecture,"ppc") then
- platform = "linux-ppc"
- else
- platform = "linux"
- end
- elseif name == "macosx" then
- if find(architecture,"i386") then
- platform = "osx-intel"
- else
- platform = "osx-ppc"
- end
- elseif name == "sunos" then
- if find(architecture,"sparc") then
- platform = "solaris-sparc"
- else -- if architecture == 'i86pc'
- platform = "solaris-intel"
- end
- elseif name == "freebsd" then
- if find(architecture,"amd64") then
- platform = "freebsd-amd64"
- else
- platform = "freebsd"
- end
- else
- platform = default or name
- end
+ platform = "mswin"
end
- function os.currentplatform()
- return platform
+ os.setenv("MTX_PLATFORM",platform)
+ os.platform = platform
+ return platform
+ end
+
+elseif name == "linux" then
+
+ function os.resolvers.platform(t,k)
+ -- we sometims have HOSTTYPE set so let's check that first
+ local platform, architecture = "", os.getenv("HOSTTYPE") or os.resultof("uname -m") or ""
+ if find(architecture,"x86_64") then
+ platform = "linux-64"
+ elseif find(architecture,"ppc") then
+ platform = "linux-ppc"
+ else
+ platform = "linux"
+ end
+ os.setenv("MTX_PLATFORM",platform)
+ os.platform = platform
+ return platform
+ end
+
+elseif name == "macosx" then
+
+ --[[
+ Identifying the architecture of OSX is quite a mess and this
+ is the best we can come up with. For some reason $HOSTTYPE is
+ a kind of pseudo environment variable, not known to the current
+ environment. And yes, uname cannot be trusted either, so there
+ is a change that you end up with a 32 bit run on a 64 bit system.
+ Also, some proper 64 bit intel macs are too cheap (low-end) and
+ therefore not permitted to run the 64 bit kernel.
+ ]]--
+
+ function os.resolvers.platform(t,k)
+ -- local platform, architecture = "", os.getenv("HOSTTYPE") or ""
+ -- if architecture == "" then
+ -- architecture = os.resultof("echo $HOSTTYPE") or ""
+ -- end
+ local platform, architecture = "", os.resultof("echo $HOSTTYPE") or ""
+ if architecture == "" then
+ -- print("\nI have no clue what kind of OSX you're running so let's assume an 32 bit intel.\n")
+ platform = "osx-intel"
+ elseif find(architecture,"i386") then
+ platform = "osx-intel"
+ elseif find(architecture,"x86_64") then
+ platform = "osx-64"
+ else
+ platform = "osx-ppc"
+ end
+ os.setenv("MTX_PLATFORM",platform)
+ os.platform = platform
+ return platform
+ end
+
+elseif name == "sunos" then
+
+ function os.resolvers.platform(t,k)
+ local platform, architecture = "", os.resultof("uname -m") or ""
+ if find(architecture,"sparc") then
+ platform = "solaris-sparc"
+ else -- if architecture == 'i86pc'
+ platform = "solaris-intel"
+ end
+ os.setenv("MTX_PLATFORM",platform)
+ os.platform = platform
+ return platform
+ end
+
+elseif name == "freebsd" then
+
+ function os.resolvers.platform(t,k)
+ local platform, architecture = "", os.resultof("uname -m") or ""
+ if find(architecture,"amd64") then
+ platform = "freebsd-amd64"
+ else
+ platform = "freebsd"
+ end
+ os.setenv("MTX_PLATFORM",platform)
+ os.platform = platform
+ return platform
+ end
+
+elseif name == "kfreebsd" then
+
+ function os.resolvers.platform(t,k)
+ -- we sometims have HOSTTYPE set so let's check that first
+ local platform, architecture = "", os.getenv("HOSTTYPE") or os.resultof("uname -m") or ""
+ if find(architecture,"x86_64") then
+ platform = "kfreebsd-64"
+ else
+ platform = "kfreebsd-i386"
+ end
+ os.setenv("MTX_PLATFORM",platform)
+ os.platform = platform
+ return platform
+ end
+
+else
+
+ -- platform = "linux"
+ -- os.setenv("MTX_PLATFORM",platform)
+ -- os.platform = platform
+
+ function os.resolvers.platform(t,k)
+ local platform = "linux"
+ os.setenv("MTX_PLATFORM",platform)
+ os.platform = platform
+ return platform
+ end
+
+end
+
+-- beware, we set the randomseed
+
+-- from wikipedia: Version 4 UUIDs use a scheme relying only on random numbers. This algorithm sets the
+-- version number as well as two reserved bits. All other bits are set using a random or pseudorandom
+-- data source. Version 4 UUIDs have the form xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx with hexadecimal
+-- digits x and hexadecimal digits 8, 9, A, or B for y. e.g. f47ac10b-58cc-4372-a567-0e02b2c3d479.
+--
+-- as we don't call this function too often there is not so much risk on repetition
+
+local t = { 8, 9, "a", "b" }
+
+function os.uuid()
+ return format("%04x%04x-4%03x-%s%03x-%04x-%04x%04x%04x",
+ random(0xFFFF),random(0xFFFF),
+ random(0x0FFF),
+ t[ceil(random(4))] or 8,random(0x0FFF),
+ random(0xFFFF),
+ random(0xFFFF),random(0xFFFF),random(0xFFFF)
+ )
+end
+
+local d
+
+function os.timezone(delta)
+ d = d or tonumber(tonumber(os.date("%H")-os.date("!%H")))
+ if delta then
+ if d > 0 then
+ return format("+%02i:00",d)
+ else
+ return format("-%02i:00",-d)
end
+ else
+ return 1
end
- return platform
end
@@ -1676,7 +2025,7 @@ do -- create closure to overcome 200 locals limit
if not modules then modules = { } end modules ['l-file'] = {
version = 1.001,
- comment = "companion to luat-lib.tex",
+ comment = "companion to luat-lib.mkiv",
author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
copyright = "PRAGMA ADE / ConTeXt Development Team",
license = "see context related readme files"
@@ -1687,14 +2036,17 @@ if not modules then modules = { } end modules ['l-file'] = {
file = file or { }
local concat = table.concat
-local find, gmatch, match, gsub = string.find, string.gmatch, string.match, string.gsub
+local find, gmatch, match, gsub, sub, char = string.find, string.gmatch, string.match, string.gsub, string.sub, string.char
+local lpegmatch = lpeg.match
function file.removesuffix(filename)
return (gsub(filename,"%.[%a%d]+$",""))
end
function file.addsuffix(filename, suffix)
- if not find(filename,"%.[%a%d]+$") then
+ if not suffix or suffix == "" then
+ return filename
+ elseif not find(filename,"%.[%a%d]+$") then
return filename .. "." .. suffix
else
return filename
@@ -1717,20 +2069,39 @@ function file.nameonly(name)
return (gsub(match(name,"^.+[/\\](.-)$") or name,"%..*$",""))
end
-function file.extname(name)
- return match(name,"^.+%.([^/\\]-)$") or ""
+function file.extname(name,default)
+ return match(name,"^.+%.([^/\\]-)$") or default or ""
end
file.suffix = file.extname
---~ 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 = concat({...},"/")
+--~ pth = gsub(pth,"\\","/")
+--~ local a, b = match(pth,"^(.*://)(.*)$")
+--~ if a and b then
+--~ return a .. gsub(b,"//+","/")
+--~ end
+--~ a, b = match(pth,"^(//)(.*)$")
+--~ if a and b then
+--~ return a .. gsub(b,"//+","/")
+--~ end
+--~ return (gsub(pth,"//+","/"))
+--~ end
+
+local trick_1 = char(1)
+local trick_2 = "^" .. trick_1 .. "/+"
function file.join(...)
- local pth = concat({...},"/")
+ local lst = { ... }
+ local a, b = lst[1], lst[2]
+ if a == "" then
+ lst[1] = trick_1
+ elseif b and find(a,"^/+$") and find(b,"^/") then
+ lst[1] = ""
+ lst[2] = gsub(b,"^/+","")
+ end
+ local pth = concat(lst,"/")
pth = gsub(pth,"\\","/")
local a, b = match(pth,"^(.*://)(.*)$")
if a and b then
@@ -1740,17 +2111,28 @@ function file.join(...)
if a and b then
return a .. gsub(b,"//+","/")
end
+ pth = gsub(pth,trick_2,"")
return (gsub(pth,"//+","/"))
end
+--~ print(file.join("//","/y"))
+--~ print(file.join("/","/y"))
+--~ print(file.join("","/y"))
+--~ print(file.join("/x/","/y"))
+--~ 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.iswritable(name)
local a = lfs.attributes(name) or lfs.attributes(file.dirname(name,"."))
- return a and a.permissions:sub(2,2) == "w"
+ return a and sub(a.permissions,2,2) == "w"
end
function file.isreadable(name)
local a = lfs.attributes(name)
- return a and a.permissions:sub(1,1) == "r"
+ return a and sub(a.permissions,1,1) == "r"
end
file.is_readable = file.isreadable
@@ -1758,36 +2140,50 @@ file.is_writable = file.iswritable
-- todo: lpeg
-function file.split_path(str)
- local t = { }
- str = gsub(str,"\\", "/")
- str = gsub(str,"(%a):([;/])", "%1\001%2")
- for name in gmatch(str,"([^;:]+)") do
- if name ~= "" then
- t[#t+1] = gsub(name,"\001",":")
- end
- end
- return t
+--~ function file.split_path(str)
+--~ local t = { }
+--~ str = gsub(str,"\\", "/")
+--~ str = gsub(str,"(%a):([;/])", "%1\001%2")
+--~ for name in gmatch(str,"([^;:]+)") do
+--~ if name ~= "" then
+--~ t[#t+1] = gsub(name,"\001",":")
+--~ end
+--~ end
+--~ return t
+--~ end
+
+local checkedsplit = string.checkedsplit
+
+function file.split_path(str,separator)
+ str = gsub(str,"\\","/")
+ return checkedsplit(str,separator or io.pathseparator)
end
function file.join_path(tab)
return concat(tab,io.pathseparator) -- can have trailing //
end
+-- we can hash them weakly
+
function file.collapse_path(str)
- str = gsub(str,"/%./","/")
- local n, m = 1, 1
- while n > 0 or m > 0 do
- str, n = gsub(str,"[^/%.]+/%.%.$","")
- str, m = gsub(str,"[^/%.]+/%.%./","")
- end
- str = gsub(str,"([^/])/$","%1")
- str = gsub(str,"^%./","")
- str = gsub(str,"/%.$","")
+ str = gsub(str,"\\","/")
+ if find(str,"/") then
+ str = gsub(str,"^%./",(gsub(lfs.currentdir(),"\\","/")) .. "/") -- ./xx in qualified
+ str = gsub(str,"/%./","/")
+ local n, m = 1, 1
+ while n > 0 or m > 0 do
+ str, n = gsub(str,"[^/%.]+/%.%.$","")
+ str, m = gsub(str,"[^/%.]+/%.%./","")
+ end
+ str = gsub(str,"([^/])/$","%1")
+ -- str = gsub(str,"^%./","") -- ./xx in qualified
+ str = gsub(str,"/%.$","")
+ end
if str == "" then str = "." end
return str
end
+--~ print(file.collapse_path("/a"))
--~ print(file.collapse_path("a/./b/.."))
--~ print(file.collapse_path("a/aa/../b/bb"))
--~ print(file.collapse_path("a/../.."))
@@ -1817,27 +2213,27 @@ end
--~ local pattern = (noslashes^0 * slashes)^0 * (noperiod^1 * period)^1 * lpeg.C(noperiod^1) * -1
--~ function file.extname(name)
---~ return pattern:match(name) or ""
+--~ return lpegmatch(pattern,name) or ""
--~ end
--~ local pattern = lpeg.Cs(((period * noperiod^1 * -1)/"" + 1)^1)
--~ function file.removesuffix(name)
---~ return pattern:match(name)
+--~ return lpegmatch(pattern,name)
--~ end
--~ local pattern = (noslashes^0 * slashes)^1 * lpeg.C(noslashes^1) * -1
--~ function file.basename(name)
---~ return pattern:match(name) or name
+--~ return lpegmatch(pattern,name) or name
--~ end
--~ local pattern = (noslashes^0 * slashes)^1 * lpeg.Cp() * noslashes^1 * -1
--~ function file.dirname(name)
---~ local p = pattern:match(name)
+--~ local p = lpegmatch(pattern,name)
--~ if p then
---~ return name:sub(1,p-2)
+--~ return sub(name,1,p-2)
--~ else
--~ return ""
--~ end
@@ -1846,7 +2242,7 @@ end
--~ local pattern = (noslashes^0 * slashes)^0 * (noperiod^1 * period)^1 * lpeg.Cp() * noperiod^1 * -1
--~ function file.addsuffix(name, suffix)
---~ local p = pattern:match(name)
+--~ local p = lpegmatch(pattern,name)
--~ if p then
--~ return name
--~ else
@@ -1857,9 +2253,9 @@ end
--~ local pattern = (noslashes^0 * slashes)^0 * (noperiod^1 * period)^1 * lpeg.Cp() * noperiod^1 * -1
--~ function file.replacesuffix(name,suffix)
---~ local p = pattern:match(name)
+--~ local p = lpegmatch(pattern,name)
--~ if p then
---~ return name:sub(1,p-2) .. "." .. suffix
+--~ return sub(name,1,p-2) .. "." .. suffix
--~ else
--~ return name .. "." .. suffix
--~ end
@@ -1868,11 +2264,11 @@ end
--~ local pattern = (noslashes^0 * slashes)^0 * lpeg.Cp() * ((noperiod^1 * period)^1 * lpeg.Cp() + lpeg.P(true)) * noperiod^1 * -1
--~ function file.nameonly(name)
---~ local a, b = pattern:match(name)
+--~ local a, b = lpegmatch(pattern,name)
--~ if b then
---~ return name:sub(a,b-2)
+--~ return sub(name,a,b-2)
--~ elseif a then
---~ return name:sub(a)
+--~ return sub(name,a)
--~ else
--~ return name
--~ end
@@ -1906,11 +2302,11 @@ local rootbased = lpeg.P("/") + letter*lpeg.P(":")
-- ./name ../name /name c: :// name/name
function file.is_qualified_path(filename)
- return qualified:match(filename)
+ return lpegmatch(qualified,filename) ~= nil
end
function file.is_rootbased_path(filename)
- return rootbased:match(filename)
+ return lpegmatch(rootbased,filename) ~= nil
end
local slash = lpeg.S("\\/")
@@ -1923,16 +2319,25 @@ local base = lpeg.C((1-suffix)^0)
local pattern = (drive + lpeg.Cc("")) * (path + lpeg.Cc("")) * (base + lpeg.Cc("")) * (suffix + lpeg.Cc(""))
function file.splitname(str) -- returns drive, path, base, suffix
- return pattern:match(str)
+ return lpegmatch(pattern,str)
end
--- function test(t) for k, v in pairs(t) do print(v, "=>", file.splitname(v)) end end
+-- function test(t) for k, v in next, t do print(v, "=>", file.splitname(v)) end end
--
-- test { "c:", "c:/aa", "c:/aa/bb", "c:/aa/bb/cc", "c:/aa/bb/cc.dd", "c:/aa/bb/cc.dd.ee" }
-- test { "c:", "c:aa", "c:aa/bb", "c:aa/bb/cc", "c:aa/bb/cc.dd", "c:aa/bb/cc.dd.ee" }
-- test { "/aa", "/aa/bb", "/aa/bb/cc", "/aa/bb/cc.dd", "/aa/bb/cc.dd.ee" }
-- test { "aa", "aa/bb", "aa/bb/cc", "aa/bb/cc.dd", "aa/bb/cc.dd.ee" }
+--~ -- todo:
+--~
+--~ if os.type == "windows" then
+--~ local currentdir = lfs.currentdir
+--~ function lfs.currentdir()
+--~ return (gsub(currentdir(),"\\","/"))
+--~ end
+--~ end
+
end -- of closure
@@ -1997,7 +2402,7 @@ end
function file.loadchecksum(name)
if md5 then
local data = io.loaddata(name .. ".md5")
- return data and data:gsub("%s","")
+ return data and (gsub(data,"%s",""))
end
return nil
end
@@ -2018,14 +2423,15 @@ do -- create closure to overcome 200 locals limit
if not modules then modules = { } end modules ['l-url'] = {
version = 1.001,
- comment = "companion to luat-lib.tex",
+ comment = "companion to luat-lib.mkiv",
author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
copyright = "PRAGMA ADE / ConTeXt Development Team",
license = "see context related readme files"
}
-local char, gmatch = string.char, string.gmatch
+local char, gmatch, gsub = string.char, string.gmatch, string.gsub
local tonumber, type = tonumber, type
+local lpegmatch = lpeg.match
-- from the spec (on the web):
--
@@ -2049,7 +2455,9 @@ local hexdigit = lpeg.R("09","AF","af")
local plus = lpeg.P("+")
local escaped = (plus / " ") + (percent * lpeg.C(hexdigit * hexdigit) / tochar)
-local scheme = lpeg.Cs((escaped+(1-colon-slash-qmark-hash))^0) * colon + lpeg.Cc("")
+-- we assume schemes with more than 1 character (in order to avoid problems with windows disks)
+
+local scheme = lpeg.Cs((escaped+(1-colon-slash-qmark-hash))^2) * 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("")
@@ -2057,25 +2465,51 @@ local fragment = hash * lpeg.Cs((escaped+(1- endofstring))^0
local parser = lpeg.Ct(scheme * authority * path * query * fragment)
+-- todo: reconsider Ct as we can as well have five return values (saves a table)
+-- so we can have two parsers, one with and one without
+
function url.split(str)
- return (type(str) == "string" and parser:match(str)) or str
+ return (type(str) == "string" and lpegmatch(parser,str)) or str
end
+-- todo: cache them
+
function url.hashed(str)
local s = url.split(str)
+ local somescheme = s[1] ~= ""
return {
- scheme = (s[1] ~= "" and s[1]) or "file",
+ scheme = (somescheme and s[1]) or "file",
authority = s[2],
- path = s[3],
- query = s[4],
- fragment = s[5],
- original = str
+ path = s[3],
+ query = s[4],
+ fragment = s[5],
+ original = str,
+ noscheme = not somescheme,
}
end
+function url.hasscheme(str)
+ return url.split(str)[1] ~= ""
+end
+
+function url.addscheme(str,scheme)
+ return (url.hasscheme(str) and str) or ((scheme or "file:///") .. str)
+end
+
+function url.construct(hash)
+ local fullurl = hash.sheme .. "://".. hash.authority .. hash.path
+ if hash.query then
+ fullurl = fullurl .. "?".. hash.query
+ end
+ if hash.fragment then
+ fullurl = fullurl .. "?".. hash.fragment
+ end
+ return fullurl
+end
+
function url.filename(filename)
local t = url.hashed(filename)
- return (t.scheme == "file" and t.path:gsub("^/([a-zA-Z])([:|])/)","%1:")) or filename
+ return (t.scheme == "file" and (gsub(t.path,"^/([a-zA-Z])([:|])/)","%1:"))) or filename
end
function url.query(str)
@@ -2129,17 +2563,26 @@ do -- create closure to overcome 200 locals limit
if not modules then modules = { } end modules ['l-dir'] = {
version = 1.001,
- comment = "companion to luat-lib.tex",
+ comment = "companion to luat-lib.mkiv",
author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
copyright = "PRAGMA ADE / ConTeXt Development Team",
license = "see context related readme files"
}
+-- dir.expand_name will be merged with cleanpath and collapsepath
+
local type = type
-local find, gmatch = string.find, string.gmatch
+local find, gmatch, match, gsub = string.find, string.gmatch, string.match, string.gsub
+local lpegmatch = lpeg.match
dir = dir or { }
+-- handy
+
+function dir.current()
+ return (gsub(lfs.currentdir(),"\\","/"))
+end
+
-- optimizing for no string.find (*) does not save time
local attributes = lfs.attributes
@@ -2170,6 +2613,35 @@ end
dir.glob_pattern = glob_pattern
+local function collect_pattern(path,patt,recurse,result)
+ local ok, scanner
+ result = result or { }
+ 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 find(path,"/$") then path = path .. '/' end
+ for name in scanner do
+ local full = path .. name
+ local attr = attributes(full)
+ local mode = attr.mode
+ if mode == 'file' then
+ if find(full,patt) then
+ result[name] = attr
+ end
+ elseif recurse and (mode == "directory") and (name ~= '.') and (name ~= "..") then
+ attr.list = collect_pattern(full,patt,recurse)
+ result[name] = attr
+ end
+ end
+ end
+ return result
+end
+
+dir.collect_pattern = collect_pattern
+
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 {
@@ -2189,29 +2661,48 @@ local filter = Cs ( (
)^0 )
local function glob(str,t)
- if type(str) == "table" then
- local t = t or { }
- for s=1,#str do
- glob(str[s],t)
+ if type(t) == "function" then
+ if type(str) == "table" then
+ for s=1,#str do
+ glob(str[s],t)
+ end
+ elseif lfs.isfile(str) then
+ t(str)
+ else
+ local split = lpegmatch(pattern,str)
+ if split then
+ local root, path, base = split[1], split[2], split[3]
+ local recurse = find(base,"%*%*")
+ local start = root .. path
+ local result = lpegmatch(filter,start .. base)
+ glob_pattern(start,result,recurse,t)
+ end
end
- return t
- elseif lfs.isfile(str) then
- local t = t or { }
- t[#t+1] = str
- return t
else
- local split = pattern:match(str)
- if split then
+ if type(str) == "table" 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 = find(base,"%*%*")
- local start = root .. path
- local result = filter:match(start .. base)
- glob_pattern(start,result,recurse,action)
+ for s=1,#str do
+ glob(str[s],t)
+ end
+ return t
+ elseif lfs.isfile(str) then
+ local t = t or { }
+ t[#t+1] = str
return t
else
- return { }
+ local split = lpegmatch(pattern,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 = find(base,"%*%*")
+ local start = root .. path
+ local result = lpegmatch(filter,start .. base)
+ glob_pattern(start,result,recurse,action)
+ return t
+ else
+ return { }
+ end
end
end
end
@@ -2273,11 +2764,12 @@ end
local make_indeed = true -- false
-if string.find(os.getenv("PATH"),";") then
+if string.find(os.getenv("PATH"),";") then -- os.type == "windows"
function dir.mkdirs(...)
- local str, pth = "", ""
- for _, s in ipairs({...}) do
+ local str, pth, t = "", "", { ... }
+ for i=1,#t do
+ local s = t[i]
if s ~= "" then
if str ~= "" then
str = str .. "/" .. s
@@ -2288,13 +2780,13 @@ if string.find(os.getenv("PATH"),";") then
end
local first, middle, last
local drive = false
- first, middle, last = str:match("^(//)(//*)(.*)$")
+ first, middle, last = match(str,"^(//)(//*)(.*)$")
if first then
-- empty network path == local path
else
- first, last = str:match("^(//)/*(.-)$")
+ first, last = match(str,"^(//)/*(.-)$")
if first then
- middle, last = str:match("([^/]+)/+(.-)$")
+ middle, last = match(str,"([^/]+)/+(.-)$")
if middle then
pth = "//" .. middle
else
@@ -2302,11 +2794,11 @@ if string.find(os.getenv("PATH"),";") then
last = ""
end
else
- first, middle, last = str:match("^([a-zA-Z]:)(/*)(.-)$")
+ first, middle, last = match(str,"^([a-zA-Z]:)(/*)(.-)$")
if first then
pth, drive = first .. middle, true
else
- middle, last = str:match("^(/*)(.-)$")
+ middle, last = match(str,"^(/*)(.-)$")
if not middle then
last = str
end
@@ -2340,34 +2832,31 @@ if string.find(os.getenv("PATH"),";") then
--~ print(dir.mkdirs("///a/b/c"))
--~ print(dir.mkdirs("a/bbb//ccc/"))
- function dir.expand_name(str)
- local first, nothing, last = str:match("^(//)(//*)(.*)$")
+ function dir.expand_name(str) -- will be merged with cleanpath and collapsepath
+ local first, nothing, last = match(str,"^(//)(//*)(.*)$")
if first then
- first = lfs.currentdir() .. "/"
- first = first:gsub("\\","/")
+ first = dir.current() .. "/"
end
if not first then
- first, last = str:match("^(//)/*(.*)$")
+ first, last = match(str,"^(//)/*(.*)$")
end
if not first then
- first, last = str:match("^([a-zA-Z]:)(.*)$")
+ first, last = match(str,"^([a-zA-Z]:)(.*)$")
if first and not find(last,"^/") then
local d = lfs.currentdir()
if lfs.chdir(first) then
- first = lfs.currentdir()
- first = first:gsub("\\","/")
+ first = dir.current()
end
lfs.chdir(d)
end
end
if not first then
- first, last = lfs.currentdir(), str
- first = first:gsub("\\","/")
+ first, last = dir.current(), str
end
- last = last:gsub("//","/")
- last = last:gsub("/%./","/")
- last = last:gsub("^/*","")
- first = first:gsub("/*$","")
+ last = gsub(last,"//","/")
+ last = gsub(last,"/%./","/")
+ last = gsub(last,"^/*","")
+ first = gsub(first,"/*$","")
if last == "" then
return first
else
@@ -2378,8 +2867,9 @@ if string.find(os.getenv("PATH"),";") then
else
function dir.mkdirs(...)
- local str, pth = "", ""
- for _, s in ipairs({...}) do
+ local str, pth, t = "", "", { ... }
+ for i=1,#t do
+ local s = t[i]
if s ~= "" then
if str ~= "" then
str = str .. "/" .. s
@@ -2388,7 +2878,7 @@ else
end
end
end
- str = str:gsub("/+","/")
+ str = gsub(str,"/+","/")
if find(str,"^/") then
pth = "/"
for s in gmatch(str,"[^/]+") do
@@ -2422,12 +2912,12 @@ else
--~ print(dir.mkdirs("///a/b/c"))
--~ print(dir.mkdirs("a/bbb//ccc/"))
- function dir.expand_name(str)
+ function dir.expand_name(str) -- will be merged with cleanpath and collapsepath
if not find(str,"^/") then
str = lfs.currentdir() .. "/" .. str
end
- str = str:gsub("//","/")
- str = str:gsub("/%./","/")
+ str = gsub(str,"//","/")
+ str = gsub(str,"/%./","/")
return str
end
@@ -2442,7 +2932,7 @@ do -- create closure to overcome 200 locals limit
if not modules then modules = { } end modules ['l-boolean'] = {
version = 1.001,
- comment = "companion to luat-lib.tex",
+ comment = "companion to luat-lib.mkiv",
author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
copyright = "PRAGMA ADE / ConTeXt Development Team",
license = "see context related readme files"
@@ -2503,19 +2993,40 @@ do -- create closure to overcome 200 locals limit
if not modules then modules = { } end modules ['l-unicode'] = {
version = 1.001,
- comment = "companion to luat-lib.tex",
+ comment = "companion to luat-lib.mkiv",
author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
copyright = "PRAGMA ADE / ConTeXt Development Team",
license = "see context related readme files"
}
+if not unicode then
+
+ unicode = { utf8 = { } }
+
+ local floor, char = math.floor, string.char
+
+ function unicode.utf8.utfchar(n)
+ if n < 0x80 then
+ return char(n)
+ elseif n < 0x800 then
+ return char(0xC0 + floor(n/0x40)) .. char(0x80 + (n % 0x40))
+ elseif n < 0x10000 then
+ return char(0xE0 + floor(n/0x1000)) .. char(0x80 + (floor(n/0x40) % 0x40)) .. char(0x80 + (n % 0x40))
+ elseif n < 0x40000 then
+ return char(0xF0 + floor(n/0x40000)) .. char(0x80 + floor(n/0x1000)) .. char(0x80 + (floor(n/0x40) % 0x40)) .. char(0x80 + (n % 0x40))
+ else -- wrong:
+ -- return char(0xF1 + floor(n/0x1000000)) .. char(0x80 + floor(n/0x40000)) .. char(0x80 + floor(n/0x1000)) .. char(0x80 + (floor(n/0x40) % 0x40)) .. char(0x80 + (n % 0x40))
+ return "?"
+ end
+ end
+
+end
+
utf = utf or unicode.utf8
local concat, utfchar, utfgsub = table.concat, utf.char, utf.gsub
local char, byte, find, bytepairs = string.char, string.byte, string.find, string.bytepairs
-unicode = unicode or { }
-
-- 0 EF BB BF UTF-8
-- 1 FF FE UTF-16-little-endian
-- 2 FE FF UTF-16-big-endian
@@ -2530,14 +3041,20 @@ unicode.utfname = {
[4] = 'utf-32-be'
}
-function unicode.utftype(f) -- \000 fails !
+-- \000 fails in <= 5.0 but is valid in >=5.1 where %z is depricated
+
+function unicode.utftype(f)
local str = f:read(4)
if not str then
f:seek('set')
return 0
- elseif find(str,"^%z%z\254\255") then
+ -- elseif find(str,"^%z%z\254\255") then -- depricated
+ -- elseif find(str,"^\000\000\254\255") then -- not permitted and bugged
+ elseif find(str,"\000\000\254\255",1,true) then -- seems to work okay (TH)
return 4
- elseif find(str,"^\255\254%z%z") then
+ -- elseif find(str,"^\255\254%z%z") then -- depricated
+ -- elseif find(str,"^\255\254\000\000") then -- not permitted and bugged
+ elseif find(str,"\255\254\000\000",1,true) then -- seems to work okay (TH)
return 3
elseif find(str,"^\254\255") then
f:seek('set',2)
@@ -2681,7 +3198,7 @@ do -- create closure to overcome 200 locals limit
if not modules then modules = { } end modules ['l-math'] = {
version = 1.001,
- comment = "companion to luat-lib.tex",
+ comment = "companion to luat-lib.mkiv",
author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
copyright = "PRAGMA ADE / ConTeXt Development Team",
license = "see context related readme files"
@@ -2728,7 +3245,7 @@ do -- create closure to overcome 200 locals limit
if not modules then modules = { } end modules ['l-utils'] = {
version = 1.001,
- comment = "companion to luat-lib.tex",
+ comment = "companion to luat-lib.mkiv",
author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
copyright = "PRAGMA ADE / ConTeXt Development Team",
license = "see context related readme files"
@@ -2736,6 +3253,10 @@ if not modules then modules = { } end modules ['l-utils'] = {
-- hm, quite unreadable
+local gsub = string.gsub
+local concat = table.concat
+local type, next = type, next
+
if not utils then utils = { } end
if not utils.merger then utils.merger = { } end
if not utils.lua then utils.lua = { } end
@@ -2773,7 +3294,7 @@ function utils.merger._self_load_(name)
end
if data and utils.merger.strip_comment then
-- saves some 20K
- data = data:gsub("%-%-~[^\n\r]*[\r\n]", "")
+ data = gsub(data,"%-%-~[^\n\r]*[\r\n]", "")
end
return data or ""
end
@@ -2791,7 +3312,7 @@ end
function utils.merger._self_swap_(data,code)
if data ~= "" then
- return (data:gsub(utils.merger.pattern, function(s)
+ return (gsub(data,utils.merger.pattern, function(s)
return "\n\n" .. "-- "..utils.merger.m_begin .. "\n" .. code .. "\n" .. "-- "..utils.merger.m_end .. "\n\n"
end, 1))
else
@@ -2801,8 +3322,8 @@ end
--~ stripper:
--~
---~ data = string.gsub(data,"%-%-~[^\n]*\n","")
---~ data = string.gsub(data,"\n\n+","\n")
+--~ data = gsub(data,"%-%-~[^\n]*\n","")
+--~ data = gsub(data,"\n\n+","\n")
function utils.merger._self_libs_(libs,list)
local result, f, frozen = { }, nil, false
@@ -2810,9 +3331,10 @@ function utils.merger._self_libs_(libs,list)
if type(libs) == 'string' then libs = { libs } end
if type(list) == 'string' then list = { list } end
local foundpath = nil
- for _, lib in ipairs(libs) do
- for _, pth in ipairs(list) do
- pth = string.gsub(pth,"\\","/") -- file.clean_path
+ for i=1,#libs do
+ local lib = libs[i]
+ for j=1,#list do
+ local pth = gsub(list[j],"\\","/") -- file.clean_path
utils.report("checking library path %s",pth)
local name = pth .. "/" .. lib
if lfs.isfile(name) then
@@ -2824,7 +3346,8 @@ function utils.merger._self_libs_(libs,list)
if foundpath then
utils.report("using library path %s",foundpath)
local right, wrong = { }, { }
- for _, lib in ipairs(libs) do
+ for i=1,#libs do
+ local lib = libs[i]
local fullname = foundpath .. "/" .. lib
if lfs.isfile(fullname) then
-- right[#right+1] = lib
@@ -2838,15 +3361,15 @@ function utils.merger._self_libs_(libs,list)
end
end
if #right > 0 then
- utils.report("merged libraries: %s",table.concat(right," "))
+ utils.report("merged libraries: %s",concat(right," "))
end
if #wrong > 0 then
- utils.report("skipped libraries: %s",table.concat(wrong," "))
+ utils.report("skipped libraries: %s",concat(wrong," "))
end
else
utils.report("no valid library path found")
end
- return table.concat(result, "\n\n")
+ return concat(result, "\n\n")
end
function utils.merger.selfcreate(libs,list,target)
@@ -2904,16 +3427,28 @@ do -- create closure to overcome 200 locals limit
if not modules then modules = { } end modules ['l-aux'] = {
version = 1.001,
- comment = "companion to luat-lib.tex",
+ comment = "companion to luat-lib.mkiv",
author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
copyright = "PRAGMA ADE / ConTeXt Development Team",
license = "see context related readme files"
}
+-- for inline, no store split : for s in string.gmatch(str,",* *([^,]+)") do .. end
+
aux = aux or { }
local concat, format, gmatch = table.concat, string.format, string.gmatch
local tostring, type = tostring, type
+local lpegmatch = lpeg.match
+
+local P, R, V = lpeg.P, lpeg.R, lpeg.V
+
+local escape, left, right = P("\\"), P('{'), P('}')
+
+lpeg.patterns.balanced = P {
+ [1] = ((escape * (left+right)) + (1 - (left+right)) + V(2))^0,
+ [2] = left * V(1) * right
+}
local space = lpeg.P(' ')
local equal = lpeg.P("=")
@@ -2921,7 +3456,7 @@ 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 nested = lpeg.P { lbrace * (nobrace + lpeg.V(1))^0 * rbrace }
local spaces = space^0
local value = lpeg.P(lbrace * lpeg.C((nobrace + nested)^0) * rbrace) + lpeg.C((nested + (1-comma))^0)
@@ -2959,13 +3494,13 @@ function aux.make_settings_to_hash_pattern(set,how)
end
end
-function aux.settings_to_hash(str)
+function aux.settings_to_hash(str,existing)
if str and str ~= "" then
- hash = { }
+ hash = existing or { }
if moretolerant then
- pattern_b_s:match(str)
+ lpegmatch(pattern_b_s,str)
else
- pattern_a_s:match(str)
+ lpegmatch(pattern_a_s,str)
end
return hash
else
@@ -2973,39 +3508,41 @@ function aux.settings_to_hash(str)
end
end
-function aux.settings_to_hash_tolerant(str)
+function aux.settings_to_hash_tolerant(str,existing)
if str and str ~= "" then
- hash = { }
- pattern_b_s:match(str)
+ hash = existing or { }
+ lpegmatch(pattern_b_s,str)
return hash
else
return { }
end
end
-function aux.settings_to_hash_strict(str)
+function aux.settings_to_hash_strict(str,existing)
if str and str ~= "" then
- hash = { }
- pattern_c_s:match(str)
+ hash = existing or { }
+ lpegmatch(pattern_c_s,str)
return next(hash) and hash
else
return nil
end
end
-local seperator = comma * space^0
+local separator = 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)
+local pattern = lpeg.Ct(value*(separator*value)^0)
-- "aap, {noot}, mies" : outer {} removes, leading spaces ignored
aux.settings_to_array_pattern = pattern
+-- we could use a weak table as cache
+
function aux.settings_to_array(str)
if not str or str == "" then
return { }
else
- return pattern:match(str)
+ return lpegmatch(pattern,str)
end
end
@@ -3014,10 +3551,10 @@ local function set(t,v)
end
local value = lpeg.P(lpeg.Carg(1)*value) / set
-local pattern = value*(seperator*value)^0 * lpeg.Carg(1)
+local pattern = value*(separator*value)^0 * lpeg.Carg(1)
function aux.add_settings_to_array(t,str)
- return pattern:match(str, nil, t)
+ return lpegmatch(pattern,str,nil,t)
end
function aux.hash_to_string(h,separator,yes,no,strict,omit)
@@ -3065,6 +3602,13 @@ function aux.settings_to_set(str,t)
return t
end
+local value = lbrace * lpeg.C((nobrace + nested)^0) * rbrace
+local pattern = lpeg.Ct((space + value)^0)
+
+function aux.arguments_to_table(str)
+ return lpegmatch(pattern,str)
+end
+
-- temporary here
function aux.getparameters(self,class,parentclass,settings)
@@ -3073,36 +3617,31 @@ function aux.getparameters(self,class,parentclass,settings)
sc = table.clone(self[parent])
self[class] = sc
end
- aux.add_settings_to_array(sc, settings)
+ aux.settings_to_hash(settings,sc)
end
-- temporary here
-local digit = lpeg.R("09")
-local period = lpeg.P(".")
-local zero = lpeg.P("0")
-
---~ local finish = lpeg.P(-1)
---~ local nodigit = (1-digit) + finish
---~ local case_1 = (period * zero^1 * #nodigit)/"" -- .000
---~ local case_2 = (period * (1-(zero^0/"") * #nodigit)^1 * (zero^0/"") * nodigit) -- .010 .10 .100100
-
+local digit = lpeg.R("09")
+local period = lpeg.P(".")
+local zero = lpeg.P("0")
local trailingzeros = zero^0 * -digit -- suggested by Roberto R
-local case_1 = period * trailingzeros / ""
-local case_2 = period * (digit - trailingzeros)^1 * (trailingzeros / "")
-
-local number = digit^1 * (case_1 + case_2)
-local stripper = lpeg.Cs((number + 1)^0)
+local case_1 = period * trailingzeros / ""
+local case_2 = period * (digit - trailingzeros)^1 * (trailingzeros / "")
+local number = digit^1 * (case_1 + case_2)
+local stripper = lpeg.Cs((number + 1)^0)
--~ local sample = "bla 11.00 bla 11 bla 0.1100 bla 1.00100 bla 0.00 bla 0.001 bla 1.1100 bla 0.100100100 bla 0.00100100100"
--~ collectgarbage("collect")
--~ str = string.rep(sample,10000)
--~ local ts = os.clock()
---~ stripper:match(str)
---~ print(#str, os.clock()-ts, stripper:match(sample))
+--~ lpegmatch(stripper,str)
+--~ print(#str, os.clock()-ts, lpegmatch(stripper,sample))
+
+lpeg.patterns.strip_zeros = stripper
function aux.strip_zeros(str)
- return stripper:match(str)
+ return lpegmatch(stripper,str)
end
function aux.definetable(target) -- defines undefined tables
@@ -3126,6 +3665,24 @@ function aux.accesstable(target)
return t
end
+-- as we use this a lot ...
+
+--~ function aux.cachefunction(action,weak)
+--~ local cache = { }
+--~ if weak then
+--~ setmetatable(cache, { __mode = "kv" } )
+--~ end
+--~ local function reminder(str)
+--~ local found = cache[str]
+--~ if not found then
+--~ found = action(str)
+--~ cache[str] = found
+--~ end
+--~ return found
+--~ end
+--~ return reminder, cache
+--~ end
+
end -- of closure
@@ -3133,7 +3690,7 @@ do -- create closure to overcome 200 locals limit
if not modules then modules = { } end modules ['trac-tra'] = {
version = 1.001,
- comment = "companion to luat-lib.tex",
+ comment = "companion to trac-tra.mkiv",
author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
copyright = "PRAGMA ADE / ConTeXt Development Team",
license = "see context related readme files"
@@ -3143,12 +3700,17 @@ if not modules then modules = { } end modules ['trac-tra'] = {
-- bound to a variable, like node.new, node.copy etc (contrary to for instance
-- node.has_attribute which is bound to a has_attribute local variable in mkiv)
+local debug = require "debug"
+
+local getinfo = debug.getinfo
+local type, next = type, next
+local concat = table.concat
+local format, find, lower, gmatch, gsub = string.format, string.find, string.lower, string.gmatch, string.gsub
+
debugger = debugger or { }
local counters = { }
local names = { }
-local getinfo = debug.getinfo
-local format, find, lower, gmatch = string.format, string.find, string.lower, string.gmatch
-- one
@@ -3187,10 +3749,10 @@ function debugger.showstats(printer,threshold)
local total, grandtotal, functions = 0, 0, 0
printer("\n") -- ugly but ok
-- table.sort(counters)
- for func, count in pairs(counters) do
+ for func, count in next, counters do
if count > threshold then
local name = getname(func)
- if not name:find("for generator") then
+ if not find(name,"for generator") then
printer(format("%8i %s", count, name))
total = total + count
end
@@ -3222,7 +3784,7 @@ end
--~ local total, grandtotal, functions = 0, 0, 0
--~ printer("\n") -- ugly but ok
--~ -- table.sort(counters)
---~ for func, count in pairs(counters) do
+--~ for func, count in next, counters do
--~ if count > threshold then
--~ printer(format("%8i %s", count, func))
--~ total = total + count
@@ -3276,38 +3838,77 @@ end
--~ print("")
--~ debugger.showstats(print,3)
-trackers = trackers or { }
+setters = setters or { }
+setters.data = setters.data or { }
-local data, done = { }, { }
+--~ local function set(t,what,value)
+--~ local data, done = t.data, t.done
+--~ if type(what) == "string" then
+--~ what = aux.settings_to_array(what) -- inefficient but ok
+--~ end
+--~ for i=1,#what do
+--~ local w = what[i]
+--~ for d, f in next, data do
+--~ if done[d] then
+--~ -- prevent recursion due to wildcards
+--~ elseif find(d,w) then
+--~ done[d] = true
+--~ for i=1,#f do
+--~ f[i](value)
+--~ end
+--~ end
+--~ end
+--~ end
+--~ end
-local function set(what,value)
+local function set(t,what,value)
+ local data, done = t.data, t.done
if type(what) == "string" then
- what = aux.settings_to_array(what)
+ what = aux.settings_to_hash(what) -- inefficient but ok
end
- for i=1,#what do
- local w = what[i]
+ for w, v in next, what do
+ if v == "" then
+ v = value
+ else
+ v = toboolean(v)
+ end
for d, f in next, data do
if done[d] then
-- prevent recursion due to wildcards
elseif find(d,w) then
done[d] = true
for i=1,#f do
- f[i](value)
+ f[i](v)
end
end
end
end
end
-local function reset()
- for d, f in next, data do
+local function reset(t)
+ for d, f in next, t.data do
for i=1,#f do
f[i](false)
end
end
end
-function trackers.register(what,...)
+local function enable(t,what)
+ set(t,what,true)
+end
+
+local function disable(t,what)
+ local data = t.data
+ if not what or what == "" then
+ t.done = { }
+ reset(t)
+ else
+ set(t,what,false)
+ end
+end
+
+function setters.register(t,what,...)
+ local data = t.data
what = lower(what)
local w = data[what]
if not w then
@@ -3319,32 +3920,32 @@ function trackers.register(what,...)
if typ == "function" then
w[#w+1] = fnc
elseif typ == "string" then
- w[#w+1] = function(value) set(fnc,value,nesting) end
+ w[#w+1] = function(value) set(t,fnc,value,nesting) end
end
end
end
-function trackers.enable(what)
- done = { }
- set(what,true)
+function setters.enable(t,what)
+ local e = t.enable
+ t.enable, t.done = enable, { }
+ enable(t,string.simpleesc(tostring(what)))
+ t.enable, t.done = e, { }
end
-function trackers.disable(what)
- done = { }
- if not what or what == "" then
- trackers.reset(what)
- else
- set(what,false)
- end
+function setters.disable(t,what)
+ local e = t.disable
+ t.disable, t.done = disable, { }
+ disable(t,string.simpleesc(tostring(what)))
+ t.disable, t.done = e, { }
end
-function trackers.reset(what)
- done = { }
- reset()
+function setters.reset(t)
+ t.done = { }
+ reset(t)
end
-function trackers.list() -- pattern
- local list = table.sortedkeys(data)
+function setters.list(t) -- pattern
+ local list = table.sortedkeys(t.data)
local user, system = { }, { }
for l=1,#list do
local what = list[l]
@@ -3357,6 +3958,78 @@ function trackers.list() -- pattern
return user, system
end
+function setters.show(t)
+ commands.writestatus("","")
+ local list = setters.list(t)
+ for k=1,#list do
+ commands.writestatus(t.name,list[k])
+ end
+ commands.writestatus("","")
+end
+
+-- we could have used a bit of oo and the trackers:enable syntax but
+-- there is already a lot of code around using the singular tracker
+
+-- we could make this into a module
+
+function setters.new(name)
+ local t
+ t = {
+ data = { },
+ name = name,
+ enable = function(...) setters.enable (t,...) end,
+ disable = function(...) setters.disable (t,...) end,
+ register = function(...) setters.register(t,...) end,
+ list = function(...) setters.list (t,...) end,
+ show = function(...) setters.show (t,...) end,
+ }
+ setters.data[name] = t
+ return t
+end
+
+trackers = setters.new("trackers")
+directives = setters.new("directives")
+experiments = setters.new("experiments")
+
+-- nice trick: we overload two of the directives related functions with variants that
+-- do tracing (itself using a tracker) .. proof of concept
+
+local trace_directives = false local trace_directives = false trackers.register("system.directives", function(v) trace_directives = v end)
+local trace_experiments = false local trace_experiments = false trackers.register("system.experiments", function(v) trace_experiments = v end)
+
+local e = directives.enable
+local d = directives.disable
+
+function directives.enable(...)
+ commands.writestatus("directives","enabling: %s",concat({...}," "))
+ e(...)
+end
+
+function directives.disable(...)
+ commands.writestatus("directives","disabling: %s",concat({...}," "))
+ d(...)
+end
+
+local e = experiments.enable
+local d = experiments.disable
+
+function experiments.enable(...)
+ commands.writestatus("experiments","enabling: %s",concat({...}," "))
+ e(...)
+end
+
+function experiments.disable(...)
+ commands.writestatus("experiments","disabling: %s",concat({...}," "))
+ d(...)
+end
+
+-- a useful example
+
+directives.register("system.nostatistics", function(v)
+ statistics.enable = not v
+end)
+
+
end -- of closure
@@ -3364,7 +4037,7 @@ do -- create closure to overcome 200 locals limit
if not modules then modules = { } end modules ['luat-env'] = {
version = 1.001,
- comment = "companion to luat-lib.tex",
+ comment = "companion to luat-lib.mkiv",
author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
copyright = "PRAGMA ADE / ConTeXt Development Team",
license = "see context related readme files"
@@ -3376,10 +4049,10 @@ if not modules then modules = { } end modules ['luat-env'] = {
-- evolved before bytecode arrays were available and so a lot of
-- code has disappeared already.
-local trace_verbose = false trackers.register("resolvers.verbose", function(v) trace_verbose = v end)
-local trace_locating = false trackers.register("resolvers.locating", function(v) trace_locating = v trackers.enable("resolvers.verbose") end)
+local trace_locating = false trackers.register("resolvers.locating", function(v) trace_locating = v end)
-local format = string.format
+local format, sub, match, gsub, find = string.format, string.sub, string.match, string.gsub, string.find
+local unquote, quote = string.unquote, string.quote
-- precautions
@@ -3413,13 +4086,14 @@ if not environment.jobname then environ
function environment.initialize_arguments(arg)
local arguments, files = { }, { }
environment.arguments, environment.files, environment.sortedflags = arguments, files, nil
- for index, argument in pairs(arg) do
+ for index=1,#arg do
+ local argument = arg[index]
if index > 0 then
- local flag, value = argument:match("^%-+(.+)=(.-)$")
+ local flag, value = match(argument,"^%-+(.-)=(.-)$")
if flag then
- arguments[flag] = string.unquote(value or "")
+ arguments[flag] = unquote(value or "")
else
- flag = argument:match("^%-+(.+)")
+ flag = match(argument,"^%-+(.+)")
if flag then
arguments[flag] = true
else
@@ -3446,25 +4120,30 @@ function environment.argument(name,partial)
return arguments[name]
elseif partial then
if not sortedflags then
- sortedflags = { }
- for _,v in pairs(table.sortedkeys(arguments)) do
- sortedflags[#sortedflags+1] = "^" .. v
+ sortedflags = table.sortedkeys(arguments)
+ for k=1,#sortedflags do
+ sortedflags[k] = "^" .. sortedflags[k]
end
environment.sortedflags = sortedflags
end
-- example of potential clash: ^mode ^modefile
- for _,v in ipairs(sortedflags) do
- if name:find(v) then
- return arguments[v:sub(2,#v)]
+ for k=1,#sortedflags do
+ local v = sortedflags[k]
+ if find(name,v) then
+ return arguments[sub(v,2,#v)]
end
end
end
return nil
end
+environment.argument("x",true)
+
function environment.split_arguments(separator) -- rather special, cut-off before separator
local done, before, after = false, { }, { }
- for _,v in ipairs(environment.original_arguments) do
+ local original_arguments = environment.original_arguments
+ for k=1,#original_arguments do
+ local v = original_arguments[k]
if not done and v == separator then
done = true
elseif done then
@@ -3481,16 +4160,17 @@ function environment.reconstruct_commandline(arg,noquote)
if noquote and #arg == 1 then
local a = arg[1]
a = resolvers.resolve(a)
- a = a:unquote()
+ a = unquote(a)
return a
- elseif next(arg) then
+ elseif #arg > 0 then
local result = { }
- for _,a in ipairs(arg) do -- ipairs 1 .. #n
+ for i=1,#arg do
+ local a = arg[i]
a = resolvers.resolve(a)
- a = a:unquote()
- a = a:gsub('"','\\"') -- tricky
- if a:find(" ") then
- result[#result+1] = a:quote()
+ a = unquote(a)
+ a = gsub(a,'"','\\"') -- tricky
+ if find(a," ") then
+ result[#result+1] = quote(a)
else
result[#result+1] = a
end
@@ -3503,17 +4183,18 @@ end
if arg then
- -- new, reconstruct quoted snippets (maybe better just remnove the " then and add them later)
+ -- new, reconstruct quoted snippets (maybe better just remove the " then and add them later)
local newarg, instring = { }, false
- for index, argument in ipairs(arg) do
- if argument:find("^\"") then
- newarg[#newarg+1] = argument:gsub("^\"","")
- if not argument:find("\"$") then
+ for index=1,#arg do
+ local argument = arg[index]
+ if find(argument,"^\"") then
+ newarg[#newarg+1] = gsub(argument,"^\"","")
+ if not find(argument,"\"$") then
instring = true
end
- elseif argument:find("\"$") then
- newarg[#newarg] = newarg[#newarg] .. " " .. argument:gsub("\"$","")
+ elseif find(argument,"\"$") then
+ newarg[#newarg] = newarg[#newarg] .. " " .. gsub(argument,"\"$","")
instring = false
elseif instring then
newarg[#newarg] = newarg[#newarg] .. " " .. argument
@@ -3568,12 +4249,12 @@ function environment.luafilechunk(filename) -- used for loading lua bytecode in
filename = file.replacesuffix(filename, "lua")
local fullname = environment.luafile(filename)
if fullname and fullname ~= "" then
- if trace_verbose then
+ if trace_locating then
logs.report("fileio","loading file %s", fullname)
end
return environment.loadedluacode(fullname)
else
- if trace_verbose then
+ if trace_locating then
logs.report("fileio","unknown file %s", filename)
end
return nil
@@ -3593,7 +4274,7 @@ function environment.loadluafile(filename, version)
-- when not overloaded by explicit suffix we look for a luc file first
local fullname = (lucname and environment.luafile(lucname)) or ""
if fullname ~= "" then
- if trace_verbose then
+ if trace_locating then
logs.report("fileio","loading %s", fullname)
end
chunk = loadfile(fullname) -- this way we don't need a file exists check
@@ -3611,7 +4292,7 @@ function environment.loadluafile(filename, version)
if v == version then
return true
else
- if trace_verbose then
+ if trace_locating then
logs.report("fileio","version mismatch for %s: lua=%s, luc=%s", filename, v, version)
end
environment.loadluafile(filename)
@@ -3622,12 +4303,12 @@ function environment.loadluafile(filename, version)
end
fullname = (luaname and environment.luafile(luaname)) or ""
if fullname ~= "" then
- if trace_verbose then
+ if trace_locating then
logs.report("fileio","loading %s", fullname)
end
chunk = loadfile(fullname) -- this way we don't need a file exists check
if not chunk then
- if verbose then
+ if trace_locating then
logs.report("fileio","unknown file %s", filename)
end
else
@@ -3645,7 +4326,7 @@ do -- create closure to overcome 200 locals limit
if not modules then modules = { } end modules ['trac-inf'] = {
version = 1.001,
- comment = "companion to luat-lib.tex",
+ comment = "companion to trac-inf.mkiv",
author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
copyright = "PRAGMA ADE / ConTeXt Development Team",
license = "see context related readme files"
@@ -3670,6 +4351,14 @@ function statistics.hastimer(instance)
return instance and instance.starttime
end
+function statistics.resettiming(instance)
+ if not instance then
+ notimer = { timing = 0, loadtime = 0 }
+ else
+ instance.timing, instance.loadtime = 0, 0
+ end
+end
+
function statistics.starttiming(instance)
if not instance then
notimer = { }
@@ -3684,6 +4373,8 @@ function statistics.starttiming(instance)
if not instance.loadtime then
instance.loadtime = 0
end
+ else
+--~ logs.report("system","nested timing (%s)",tostring(instance))
end
instance.timing = it + 1
end
@@ -3729,6 +4420,12 @@ function statistics.elapsedindeed(instance)
return t > statistics.threshold
end
+function statistics.elapsedseconds(instance,rest) -- returns nil if 0 seconds
+ if statistics.elapsedindeed(instance) then
+ return format("%s seconds %s", statistics.elapsedtime(instance),rest or "")
+ end
+end
+
-- general function
function statistics.register(tag,fnc)
@@ -3807,14 +4504,32 @@ function statistics.timed(action,report)
report("total runtime: %s",statistics.elapsedtime(timer))
end
+-- where, not really the best spot for this:
+
+commands = commands or { }
+
+local timer
+
+function commands.resettimer()
+ statistics.resettiming(timer)
+ statistics.starttiming(timer)
+end
+
+function commands.elapsedtime()
+ statistics.stoptiming(timer)
+ tex.sprint(statistics.elapsedtime(timer))
+end
+
+commands.resettimer()
+
end -- of closure
do -- create closure to overcome 200 locals limit
-if not modules then modules = { } end modules ['luat-log'] = {
+if not modules then modules = { } end modules ['trac-log'] = {
version = 1.001,
- comment = "companion to luat-lib.tex",
+ comment = "companion to trac-log.mkiv",
author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
copyright = "PRAGMA ADE / ConTeXt Development Team",
license = "see context related readme files"
@@ -3822,7 +4537,11 @@ if not modules then modules = { } end modules ['luat-log'] = {
-- this is old code that needs an overhaul
-local write_nl, write, format = texio.write_nl or print, texio.write or io.write, string.format
+--~ io.stdout:setvbuf("no")
+--~ io.stderr:setvbuf("no")
+
+local write_nl, write = texio.write_nl or print, texio.write or io.write
+local format, gmatch = string.format, string.gmatch
local texcount = tex and tex.count
if texlua then
@@ -3903,25 +4622,48 @@ function logs.tex.line(fmt,...) -- new
end
end
+--~ function logs.tex.start_page_number()
+--~ local real, user, sub = texcount.realpageno, texcount.userpageno, texcount.subpageno
+--~ if real > 0 then
+--~ if user > 0 then
+--~ if sub > 0 then
+--~ write(format("[%s.%s.%s",real,user,sub))
+--~ else
+--~ write(format("[%s.%s",real,user))
+--~ end
+--~ else
+--~ write(format("[%s",real))
+--~ end
+--~ else
+--~ write("[-")
+--~ end
+--~ end
+
+--~ function logs.tex.stop_page_number()
+--~ write("]")
+--~ end
+
+local real, user, sub
+
function logs.tex.start_page_number()
- local real, user, sub = texcount.realpageno, texcount.userpageno, texcount.subpageno
+ real, user, sub = texcount.realpageno, texcount.userpageno, texcount.subpageno
+end
+
+function logs.tex.stop_page_number()
if real > 0 then
if user > 0 then
if sub > 0 then
- write(format("[%s.%s.%s",real,user,sub))
+ logs.report("pages", "flushing realpage %s, userpage %s, subpage %s",real,user,sub)
else
- write(format("[%s.%s",real,user))
+ logs.report("pages", "flushing realpage %s, userpage %s",real,user)
end
else
- write(format("[%s",real))
+ logs.report("pages", "flushing realpage %s",real)
end
else
- write("[-")
+ logs.report("pages", "flushing page")
end
-end
-
-function logs.tex.stop_page_number()
- write("]")
+ io.flush()
end
logs.tex.report_job_stat = statistics.show_job_stat
@@ -4021,7 +4763,7 @@ end
function logs.setprogram(_name_,_banner_,_verbose_)
name, banner = _name_, _banner_
if _verbose_ then
- trackers.enable("resolvers.verbose")
+ trackers.enable("resolvers.locating")
end
logs.set_method("tex")
logs.report = report -- also used in libraries
@@ -4034,9 +4776,9 @@ end
function logs.setverbose(what)
if what then
- trackers.enable("resolvers.verbose")
+ trackers.enable("resolvers.locating")
else
- trackers.disable("resolvers.verbose")
+ trackers.disable("resolvers.locating")
end
logs.verbose = what or false
end
@@ -4053,7 +4795,7 @@ logs.report = logs.tex.report
logs.simple = logs.tex.report
function logs.reportlines(str) -- todo: <lines></lines>
- for line in str:gmatch("(.-)[\n\r]") do
+ for line in gmatch(str,"(.-)[\n\r]") do
logs.report(line)
end
end
@@ -4064,8 +4806,12 @@ end
logs.simpleline = logs.reportline
-function logs.help(message,option)
+function logs.reportbanner() -- for scripts too
logs.report(banner)
+end
+
+function logs.help(message,option)
+ logs.reportbanner()
logs.reportline()
logs.reportlines(message)
local moreinfo = logs.moreinfo or ""
@@ -4097,6 +4843,11 @@ end
--~ logs.system(syslogname,"context","test","fonts","font %s recached due to newer version (%s)","blabla","123")
--~ end
+function logs.fatal(where,...)
+ logs.report(where,"fatal error: %s, aborting now",format(...))
+ os.exit()
+end
+
end -- of closure
@@ -4104,10 +4855,10 @@ do -- create closure to overcome 200 locals limit
if not modules then modules = { } end modules ['data-inp'] = {
version = 1.001,
+ comment = "companion to luat-lib.mkiv",
author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
copyright = "PRAGMA ADE / ConTeXt Development Team",
license = "see context related readme files",
- comment = "companion to luat-lib.tex",
}
-- After a few years using the code the large luat-inp.lua file
@@ -4119,7 +4870,7 @@ if not modules then modules = { } end modules ['data-inp'] = {
-- * some public auxiliary functions were made private
--
-- TODO: os.getenv -> os.env[]
--- TODO: instances.[hashes,cnffiles,configurations,522] -> ipairs (alles check, sneller)
+-- TODO: instances.[hashes,cnffiles,configurations,522]
-- TODO: check escaping in find etc, too much, too slow
-- This lib is multi-purpose and can be loaded again later on so that
@@ -4140,12 +4891,13 @@ if not modules then modules = { } end modules ['data-inp'] = {
local format, gsub, find, lower, upper, match, gmatch = string.format, string.gsub, string.find, string.lower, string.upper, string.match, string.gmatch
local concat, insert, sortedkeys = table.concat, table.insert, table.sortedkeys
local next, type = next, type
+local lpegmatch = lpeg.match
-local trace_locating, trace_detail, trace_verbose = false, false, false
+local trace_locating, trace_detail, trace_expansions = false, false, false
-trackers.register("resolvers.verbose", function(v) trace_verbose = v end)
-trackers.register("resolvers.locating", function(v) trace_locating = v trackers.enable("resolvers.verbose") end)
-trackers.register("resolvers.detail", function(v) trace_detail = v trackers.enable("resolvers.verbose,resolvers.detail") end)
+trackers.register("resolvers.locating", function(v) trace_locating = v end)
+trackers.register("resolvers.details", function(v) trace_detail = v end)
+trackers.register("resolvers.expansions", function(v) trace_expansions = v end) -- todo
if not resolvers then
resolvers = {
@@ -4169,7 +4921,7 @@ resolvers.generators.notfound = { nil }
resolvers.cacheversion = '1.0.1'
resolvers.cnfname = 'texmf.cnf'
resolvers.luaname = 'texmfcnf.lua'
-resolvers.homedir = os.env[os.platform == "windows" and 'USERPROFILE'] or os.env['HOME'] or '~'
+resolvers.homedir = os.env[os.type == "windows" and 'USERPROFILE'] or os.env['HOME'] or '~'
resolvers.cnfdefault = '{$SELFAUTODIR,$SELFAUTOPARENT}{,{/share,}/texmf{-local,.local,}/web2c}'
local dummy_path_expr = "^!*unset/*$"
@@ -4211,8 +4963,8 @@ suffixes['lua'] = { 'lua', 'luc', 'tma', 'tmc' }
alternatives['map files'] = 'map'
alternatives['enc files'] = 'enc'
-alternatives['cid files'] = 'cid'
-alternatives['fea files'] = 'fea'
+alternatives['cid maps'] = 'cid' -- great, why no cid files
+alternatives['font feature files'] = 'fea' -- and fea files here
alternatives['opentype fonts'] = 'otf'
alternatives['truetype fonts'] = 'ttf'
alternatives['truetype collections'] = 'ttc'
@@ -4228,6 +4980,11 @@ formats ['sfd'] = 'SFDFONTS'
suffixes ['sfd'] = { 'sfd' }
alternatives['subfont definition files'] = 'sfd'
+-- lib paths
+
+formats ['lib'] = 'CLUAINPUTS' -- new (needs checking)
+suffixes['lib'] = (os.libsuffix and { os.libsuffix }) or { 'dll', 'so' }
+
-- In practice we will work within one tds tree, but i want to keep
-- the option open to build tools that look at multiple trees, which is
-- why we keep the tree specific data in a table. We used to pass the
@@ -4350,8 +5107,10 @@ local function check_configuration() -- not yet ok, no time for debugging now
-- bad luck
end
fix("LUAINPUTS" , ".;$TEXINPUTS;$TEXMFSCRIPTS") -- no progname, hm
- fix("FONTFEATURES", ".;$TEXMF/fonts/fea//;$OPENTYPEFONTS;$TTFONTS;$T1FONTS;$AFMFONTS")
- fix("FONTCIDMAPS" , ".;$TEXMF/fonts/cid//;$OPENTYPEFONTS;$TTFONTS;$T1FONTS;$AFMFONTS")
+ -- this will go away some day
+ fix("FONTFEATURES", ".;$TEXMF/fonts/{data,fea}//;$OPENTYPEFONTS;$TTFONTS;$T1FONTS;$AFMFONTS")
+ fix("FONTCIDMAPS" , ".;$TEXMF/fonts/{data,cid}//;$OPENTYPEFONTS;$TTFONTS;$T1FONTS;$AFMFONTS")
+ --
fix("LUATEXLIBS" , ".;$TEXMF/luatex/lua//")
end
@@ -4366,7 +5125,7 @@ function resolvers.settrace(n) -- no longer number but: 'locating' or 'detail'
end
end
-resolvers.settrace(os.getenv("MTX.resolvers.TRACE") or os.getenv("MTX_INPUT_TRACE"))
+resolvers.settrace(os.getenv("MTX_INPUT_TRACE"))
function resolvers.osenv(key)
local ie = instance.environment
@@ -4454,37 +5213,43 @@ end
-- work that well; the parsing is ok, but dealing with the resulting
-- table is a pain because we need to work inside-out recursively
+local function do_first(a,b)
+ local t = { }
+ for s in gmatch(b,"[^,]+") do t[#t+1] = a .. s end
+ return "{" .. concat(t,",") .. "}"
+end
+
+local function do_second(a,b)
+ local t = { }
+ for s in gmatch(a,"[^,]+") do t[#t+1] = s .. b end
+ return "{" .. concat(t,",") .. "}"
+end
+
+local function do_both(a,b)
+ local t = { }
+ for sa in gmatch(a,"[^,]+") do
+ for sb in gmatch(b,"[^,]+") do
+ t[#t+1] = sa .. sb
+ end
+ end
+ return "{" .. concat(t,",") .. "}"
+end
+
+local function do_three(a,b,c)
+ return a .. b.. c
+end
+
local function splitpathexpr(str, t, validate)
-- no need for further optimization as it is only called a
- -- few times, we can use lpeg for the sub; we could move
- -- the local functions outside the body
+ -- few times, we can use lpeg for the sub
+ if trace_expansions then
+ logs.report("fileio","expanding variable '%s'",str)
+ end
t = t or { }
str = gsub(str,",}",",@}")
str = gsub(str,"{,","{@,")
-- str = "@" .. str .. "@"
local ok, done
- local function do_first(a,b)
- local t = { }
- for s in gmatch(b,"[^,]+") do t[#t+1] = a .. s end
- return "{" .. concat(t,",") .. "}"
- end
- local function do_second(a,b)
- local t = { }
- for s in gmatch(a,"[^,]+") do t[#t+1] = s .. b end
- return "{" .. concat(t,",") .. "}"
- end
- local function do_both(a,b)
- local t = { }
- for sa in gmatch(a,"[^,]+") do
- for sb in gmatch(b,"[^,]+") do
- t[#t+1] = sa .. sb
- end
- end
- return "{" .. concat(t,",") .. "}"
- end
- local function do_three(a,b,c)
- return a .. b.. c
- end
while true do
done = false
while true do
@@ -4515,6 +5280,11 @@ local function splitpathexpr(str, t, validate)
t[#t+1] = s
end
end
+ if trace_expansions then
+ for k=1,#t do
+ logs.report("fileio","% 4i: %s",k,t[k])
+ end
+ end
return t
end
@@ -4554,18 +5324,27 @@ end
-- also we now follow the stupid route: if not set then just assume *one*
-- cnf file under texmf (i.e. distribution)
-resolvers.ownpath = resolvers.ownpath or nil
-resolvers.ownbin = resolvers.ownbin or arg[-2] or arg[-1] or arg[0] or "luatex"
-resolvers.autoselfdir = true -- false may be handy for debugging
+local args = environment and environment.original_arguments or arg -- this needs a cleanup
+
+resolvers.ownbin = resolvers.ownbin or args[-2] or arg[-2] or args[-1] or arg[-1] or arg[0] or "luatex"
+resolvers.ownbin = gsub(resolvers.ownbin,"\\","/")
function resolvers.getownpath()
- if not resolvers.ownpath then
- if resolvers.autoselfdir and os.selfdir then
- resolvers.ownpath = os.selfdir
- else
- local binary = resolvers.ownbin
- if os.platform == "windows" then
- binary = file.replacesuffix(binary,"exe")
+ local ownpath = resolvers.ownpath or os.selfdir
+ if not ownpath or ownpath == "" or ownpath == "unset" then
+ ownpath = args[-1] or arg[-1]
+ ownpath = ownpath and file.dirname(gsub(ownpath,"\\","/"))
+ if not ownpath or ownpath == "" then
+ ownpath = args[-0] or arg[-0]
+ ownpath = ownpath and file.dirname(gsub(ownpath,"\\","/"))
+ end
+ local binary = resolvers.ownbin
+ if not ownpath or ownpath == "" then
+ ownpath = ownpath and file.dirname(binary)
+ end
+ if not ownpath or ownpath == "" then
+ if os.binsuffix ~= "" then
+ binary = file.replacesuffix(binary,os.binsuffix)
end
for p in gmatch(os.getenv("PATH"),"[^"..io.pathseparator.."]+") do
local b = file.join(p,binary)
@@ -4577,30 +5356,39 @@ function resolvers.getownpath()
local olddir = lfs.currentdir()
if lfs.chdir(p) then
local pp = lfs.currentdir()
- if trace_verbose and p ~= pp then
- logs.report("fileio","following symlink %s to %s",p,pp)
+ if trace_locating and p ~= pp then
+ logs.report("fileio","following symlink '%s' to '%s'",p,pp)
end
- resolvers.ownpath = pp
+ ownpath = pp
lfs.chdir(olddir)
else
- if trace_verbose then
- logs.report("fileio","unable to check path %s",p)
+ if trace_locating then
+ logs.report("fileio","unable to check path '%s'",p)
end
- resolvers.ownpath = p
+ ownpath = p
end
break
end
end
end
- if not resolvers.ownpath then resolvers.ownpath = '.' end
+ if not ownpath or ownpath == "" then
+ ownpath = "."
+ logs.report("fileio","forcing fallback ownpath .")
+ elseif trace_locating then
+ logs.report("fileio","using ownpath '%s'",ownpath)
+ end
end
- return resolvers.ownpath
+ resolvers.ownpath = ownpath
+ function resolvers.getownpath()
+ return resolvers.ownpath
+ end
+ return ownpath
end
local own_places = { "SELFAUTOLOC", "SELFAUTODIR", "SELFAUTOPARENT", "TEXMFCNF" }
local function identify_own()
- local ownpath = resolvers.getownpath() or lfs.currentdir()
+ local ownpath = resolvers.getownpath() or dir.current()
local ie = instance.environment
if ownpath then
if resolvers.env('SELFAUTOLOC') == "" then os.env['SELFAUTOLOC'] = file.collapse_path(ownpath) end
@@ -4613,10 +5401,10 @@ local function identify_own()
if resolvers.env('TEXMFCNF') == "" then os.env['TEXMFCNF'] = resolvers.cnfdefault end
if resolvers.env('TEXOS') == "" then os.env['TEXOS'] = resolvers.env('SELFAUTODIR') end
if resolvers.env('TEXROOT') == "" then os.env['TEXROOT'] = resolvers.env('SELFAUTOPARENT') end
- if trace_verbose then
+ if trace_locating then
for i=1,#own_places do
local v = own_places[i]
- logs.report("fileio","variable %s set to %s",v,resolvers.env(v) or "unknown")
+ logs.report("fileio","variable '%s' set to '%s'",v,resolvers.env(v) or "unknown")
end
end
identify_own = function() end
@@ -4648,10 +5436,8 @@ end
local function load_cnf_file(fname)
fname = resolvers.clean_path(fname)
local lname = file.replacesuffix(fname,'lua')
- local f = io.open(lname)
- if f then -- this will go
- f:close()
- local dname = file.dirname(fname)
+ if lfs.isfile(lname) then
+ local dname = file.dirname(fname) -- fname ?
if not instance.configuration[dname] then
resolvers.load_data(dname,'configuration',lname and file.basename(lname))
instance.order[#instance.order+1] = instance.configuration[dname]
@@ -4659,8 +5445,8 @@ local function load_cnf_file(fname)
else
f = io.open(fname)
if f then
- if trace_verbose then
- logs.report("fileio","loading %s", fname)
+ if trace_locating then
+ logs.report("fileio","loading configuration file %s", fname)
end
local line, data, n, k, v
local dname = file.dirname(fname)
@@ -4694,14 +5480,16 @@ local function load_cnf_file(fname)
end
end
f:close()
- elseif trace_verbose then
- logs.report("fileio","skipping %s", fname)
+ elseif trace_locating then
+ logs.report("fileio","skipping configuration file '%s'", fname)
end
end
end
local function collapse_cnf_data() -- potential optimization: pass start index (setup and configuration are shared)
- for _,c in ipairs(instance.order) do
+ local order = instance.order
+ for i=1,#order do
+ local c = order[i]
for k,v in next, c do
if not instance.variables[k] then
if instance.environment[k] then
@@ -4717,19 +5505,24 @@ end
function resolvers.load_cnf()
local function loadoldconfigdata()
- for _, fname in ipairs(instance.cnffiles) do
- load_cnf_file(fname)
+ local cnffiles = instance.cnffiles
+ for i=1,#cnffiles do
+ load_cnf_file(cnffiles[i])
end
end
-- instance.cnffiles contain complete names now !
+ -- we still use a funny mix of cnf and new but soon
+ -- we will switch to lua exclusively as we only use
+ -- the file to collect the tree roots
if #instance.cnffiles == 0 then
- if trace_verbose then
+ if trace_locating then
logs.report("fileio","no cnf files found (TEXMFCNF may not be set/known)")
end
else
- instance.rootpath = instance.cnffiles[1]
- for k,fname in ipairs(instance.cnffiles) do
- instance.cnffiles[k] = file.collapse_path(gsub(fname,"\\",'/'))
+ local cnffiles = instance.cnffiles
+ instance.rootpath = cnffiles[1]
+ for k=1,#cnffiles do
+ instance.cnffiles[k] = file.collapse_path(cnffiles[k])
end
for i=1,3 do
instance.rootpath = file.dirname(instance.rootpath)
@@ -4757,8 +5550,9 @@ function resolvers.load_lua()
-- yet harmless
else
instance.rootpath = instance.luafiles[1]
- for k,fname in ipairs(instance.luafiles) do
- instance.luafiles[k] = file.collapse_path(gsub(fname,"\\",'/'))
+ local luafiles = instance.luafiles
+ for k=1,#luafiles do
+ instance.luafiles[k] = file.collapse_path(luafiles[k])
end
for i=1,3 do
instance.rootpath = file.dirname(instance.rootpath)
@@ -4790,14 +5584,14 @@ end
function resolvers.append_hash(type,tag,name)
if trace_locating then
- logs.report("fileio","= hash append: %s",tag)
+ logs.report("fileio","hash '%s' appended",tag)
end
insert(instance.hashes, { ['type']=type, ['tag']=tag, ['name']=name } )
end
function resolvers.prepend_hash(type,tag,name)
if trace_locating then
- logs.report("fileio","= hash prepend: %s",tag)
+ logs.report("fileio","hash '%s' prepended",tag)
end
insert(instance.hashes, 1, { ['type']=type, ['tag']=tag, ['name']=name } )
end
@@ -4821,9 +5615,11 @@ end
-- locators
function resolvers.locatelists()
- for _, path in ipairs(resolvers.clean_path_list('TEXMF')) do
- if trace_verbose then
- logs.report("fileio","locating list of %s",path)
+ local texmfpaths = resolvers.clean_path_list('TEXMF')
+ for i=1,#texmfpaths do
+ local path = texmfpaths[i]
+ if trace_locating then
+ logs.report("fileio","locating list of '%s'",path)
end
resolvers.locatedatabase(file.collapse_path(path))
end
@@ -4836,11 +5632,11 @@ end
function resolvers.locators.tex(specification)
if specification and specification ~= '' and lfs.isdir(specification) then
if trace_locating then
- logs.report("fileio",'! tex locator found: %s',specification)
+ logs.report("fileio","tex locator '%s' found",specification)
end
resolvers.append_hash('file',specification,filename)
elseif trace_locating then
- logs.report("fileio",'? tex locator not found: %s',specification)
+ logs.report("fileio","tex locator '%s' not found",specification)
end
end
@@ -4854,7 +5650,9 @@ function resolvers.loadfiles()
instance.loaderror = false
instance.files = { }
if not instance.renewcache then
- for _, hash in ipairs(instance.hashes) do
+ local hashes = instance.hashes
+ for k=1,#hashes do
+ local hash = hashes[k]
resolvers.hashdatabase(hash.tag,hash.name)
if instance.loaderror then break end
end
@@ -4868,8 +5666,9 @@ end
-- generators:
function resolvers.loadlists()
- for _, hash in ipairs(instance.hashes) do
- resolvers.generatedatabase(hash.tag)
+ local hashes = instance.hashes
+ for i=1,#hashes do
+ resolvers.generatedatabase(hashes[i].tag)
end
end
@@ -4881,10 +5680,27 @@ end
local weird = lpeg.P(".")^1 + lpeg.anywhere(lpeg.S("~`!#$%^&*()={}[]:;\"\'||<>,?\n\r\t"))
+--~ local l_forbidden = lpeg.S("~`!#$%^&*()={}[]:;\"\'||\\/<>,?\n\r\t")
+--~ local l_confusing = lpeg.P(" ")
+--~ local l_character = lpeg.patterns.utf8
+--~ local l_dangerous = lpeg.P(".")
+
+--~ local l_normal = (l_character - l_forbidden - l_confusing - l_dangerous) * (l_character - l_forbidden - l_confusing^2)^0 * lpeg.P(-1)
+--~ ----- l_normal = l_normal * lpeg.Cc(true) + lpeg.Cc(false)
+
+--~ local function test(str)
+--~ print(str,lpeg.match(l_normal,str))
+--~ end
+--~ test("ヒラギノ明朝 Pro W3")
+--~ test("..ヒラギノ明朝 Pro W3")
+--~ test(":ヒラギノ明朝 Pro W3;")
+--~ test("ヒラギノ明朝 /Pro W3;")
+--~ test("ヒラギノ明朝 Pro W3")
+
function resolvers.generators.tex(specification)
local tag = specification
- if trace_verbose then
- logs.report("fileio","scanning path %s",specification)
+ if trace_locating then
+ logs.report("fileio","scanning path '%s'",specification)
end
instance.files[tag] = { }
local files = instance.files[tag]
@@ -4900,7 +5716,8 @@ function resolvers.generators.tex(specification)
full = spec
end
for name in directory(full) do
- if not weird:match(name) then
+ if not lpegmatch(weird,name) then
+ -- if lpegmatch(l_normal,name) then
local mode = attributes(full..name,'mode')
if mode == 'file' then
if path then
@@ -4933,7 +5750,7 @@ function resolvers.generators.tex(specification)
end
end
action()
- if trace_verbose then
+ if trace_locating then
logs.report("fileio","%s files found on %s directories with %s uppercase remappings",n,m,r)
end
end
@@ -4948,11 +5765,48 @@ end
-- we join them and split them after the expansion has taken place. This
-- is more convenient.
+--~ local checkedsplit = string.checkedsplit
+
+local cache = { }
+
+local splitter = lpeg.Ct(lpeg.splitat(lpeg.S(os.type == "windows" and ";" or ":;")))
+
+local function split_kpse_path(str) -- beware, this can be either a path or a {specification}
+ local found = cache[str]
+ if not found then
+ if str == "" then
+ found = { }
+ else
+ str = gsub(str,"\\","/")
+--~ local split = (find(str,";") and checkedsplit(str,";")) or checkedsplit(str,io.pathseparator)
+local split = lpegmatch(splitter,str)
+ found = { }
+ for i=1,#split do
+ local s = split[i]
+ if not find(s,"^{*unset}*") then
+ found[#found+1] = s
+ end
+ end
+ if trace_expansions then
+ logs.report("fileio","splitting path specification '%s'",str)
+ for k=1,#found do
+ logs.report("fileio","% 4i: %s",k,found[k])
+ end
+ end
+ cache[str] = found
+ end
+ end
+ return found
+end
+
+resolvers.split_kpse_path = split_kpse_path
+
function resolvers.splitconfig()
- for i,c in ipairs(instance) do
- for k,v in pairs(c) do
+ for i=1,#instance do
+ local c = instance[i]
+ for k,v in next, c do
if type(v) == 'string' then
- local t = file.split_path(v)
+ local t = split_kpse_path(v)
if #t > 1 then
c[k] = t
end
@@ -4962,21 +5816,25 @@ function resolvers.splitconfig()
end
function resolvers.joinconfig()
- for i,c in ipairs(instance.order) do
- for k,v in pairs(c) do -- ipairs?
+ local order = instance.order
+ for i=1,#order do
+ local c = order[i]
+ for k,v in next, c do -- indexed?
if type(v) == 'table' then
c[k] = file.join_path(v)
end
end
end
end
+
function resolvers.split_path(str)
if type(str) == 'table' then
return str
else
- return file.split_path(str)
+ return split_kpse_path(str)
end
end
+
function resolvers.join_path(str)
if type(str) == 'table' then
return file.join_path(str)
@@ -4988,8 +5846,9 @@ end
function resolvers.splitexpansions()
local ie = instance.expansions
for k,v in next, ie do
- local t, h = { }, { }
- for _,vv in ipairs(file.split_path(v)) do
+ local t, h, p = { }, { }, split_kpse_path(v)
+ for kk=1,#p do
+ local vv = p[kk]
if vv ~= "" and not h[vv] then
t[#t+1] = vv
h[vv] = true
@@ -5036,11 +5895,15 @@ function resolvers.serialize(files)
end
t[#t+1] = "return {"
if instance.sortdata then
- for _, k in pairs(sortedkeys(files)) do -- ipairs
+ local sortedfiles = sortedkeys(files)
+ for i=1,#sortedfiles do
+ local k = sortedfiles[i]
local fk = files[k]
if type(fk) == 'table' then
t[#t+1] = "\t['" .. k .. "']={"
- for _, kk in pairs(sortedkeys(fk)) do -- ipairs
+ local sortedfk = sortedkeys(fk)
+ for j=1,#sortedfk do
+ local kk = sortedfk[j]
t[#t+1] = dump(kk,fk[kk],"\t\t")
end
t[#t+1] = "\t},"
@@ -5065,12 +5928,18 @@ function resolvers.serialize(files)
return concat(t,"\n")
end
+local data_state = { }
+
+function resolvers.data_state()
+ return data_state or { }
+end
+
function resolvers.save_data(dataname, makename) -- untested without cache overload
for cachename, files in next, instance[dataname] do
local name = (makename or file.join)(cachename,dataname)
local luaname, lucname = name .. ".lua", name .. ".luc"
- if trace_verbose then
- logs.report("fileio","preparing %s for %s",dataname,cachename)
+ if trace_locating then
+ logs.report("fileio","preparing '%s' for '%s'",dataname,cachename)
end
for k, v in next, files do
if type(v) == "table" and #v == 1 then
@@ -5084,24 +5953,25 @@ function resolvers.save_data(dataname, makename) -- untested without cache overl
date = os.date("%Y-%m-%d"),
time = os.date("%H:%M:%S"),
content = files,
+ uuid = os.uuid(),
}
local ok = io.savedata(luaname,resolvers.serialize(data))
if ok then
- if trace_verbose then
- logs.report("fileio","%s saved in %s",dataname,luaname)
+ if trace_locating then
+ logs.report("fileio","'%s' saved in '%s'",dataname,luaname)
end
if utils.lua.compile(luaname,lucname,false,true) then -- no cleanup but strip
- if trace_verbose then
- logs.report("fileio","%s compiled to %s",dataname,lucname)
+ if trace_locating then
+ logs.report("fileio","'%s' compiled to '%s'",dataname,lucname)
end
else
- if trace_verbose then
- logs.report("fileio","compiling failed for %s, deleting file %s",dataname,lucname)
+ if trace_locating then
+ logs.report("fileio","compiling failed for '%s', deleting file '%s'",dataname,lucname)
end
os.remove(lucname)
end
- elseif trace_verbose then
- logs.report("fileio","unable to save %s in %s (access error)",dataname,luaname)
+ elseif trace_locating then
+ logs.report("fileio","unable to save '%s' in '%s' (access error)",dataname,luaname)
end
end
end
@@ -5113,19 +5983,20 @@ function resolvers.load_data(pathname,dataname,filename,makename) -- untested wi
if blob then
local data = blob()
if data and data.content and data.type == dataname and data.version == resolvers.cacheversion then
- if trace_verbose then
- logs.report("fileio","loading %s for %s from %s",dataname,pathname,filename)
+ data_state[#data_state+1] = data.uuid
+ if trace_locating then
+ logs.report("fileio","loading '%s' for '%s' from '%s'",dataname,pathname,filename)
end
instance[dataname][pathname] = data.content
else
- if trace_verbose then
- logs.report("fileio","skipping %s for %s from %s",dataname,pathname,filename)
+ if trace_locating then
+ logs.report("fileio","skipping '%s' for '%s' from '%s'",dataname,pathname,filename)
end
instance[dataname][pathname] = { }
instance.loaderror = true
end
- elseif trace_verbose then
- logs.report("fileio","skipping %s for %s from %s",dataname,pathname,filename)
+ elseif trace_locating then
+ logs.report("fileio","skipping '%s' for '%s' from '%s'",dataname,pathname,filename)
end
end
@@ -5144,15 +6015,17 @@ function resolvers.resetconfig()
end
function resolvers.loadnewconfig()
- for _, cnf in ipairs(instance.luafiles) do
+ local luafiles = instance.luafiles
+ for i=1,#luafiles do
+ local cnf = luafiles[i]
local pathname = file.dirname(cnf)
local filename = file.join(pathname,resolvers.luaname)
local blob = loadfile(filename)
if blob then
local data = blob()
if data then
- if trace_verbose then
- logs.report("fileio","loading configuration file %s",filename)
+ if trace_locating then
+ logs.report("fileio","loading configuration file '%s'",filename)
end
if true then
-- flatten to variable.progname
@@ -5173,14 +6046,14 @@ function resolvers.loadnewconfig()
instance['setup'][pathname] = data
end
else
- if trace_verbose then
- logs.report("fileio","skipping configuration file %s",filename)
+ if trace_locating then
+ logs.report("fileio","skipping configuration file '%s'",filename)
end
instance['setup'][pathname] = { }
instance.loaderror = true
end
- elseif trace_verbose then
- logs.report("fileio","skipping configuration file %s",filename)
+ elseif trace_locating then
+ logs.report("fileio","skipping configuration file '%s'",filename)
end
instance.order[#instance.order+1] = instance.setup[pathname]
if instance.loaderror then break end
@@ -5189,7 +6062,9 @@ end
function resolvers.loadoldconfig()
if not instance.renewcache then
- for _, cnf in ipairs(instance.cnffiles) do
+ local cnffiles = instance.cnffiles
+ for i=1,#cnffiles do
+ local cnf = cnffiles[i]
local dname = file.dirname(cnf)
resolvers.load_data(dname,'configuration')
instance.order[#instance.order+1] = instance.configuration[dname]
@@ -5379,7 +6254,7 @@ end
function resolvers.expanded_path_list(str)
if not str then
- return ep or { }
+ return ep or { } -- ep ?
elseif instance.savelists then
-- engine+progname hash
str = gsub(str,"%$","")
@@ -5397,9 +6272,9 @@ end
function resolvers.expanded_path_list_from_var(str) -- brrr
local tmp = resolvers.var_of_format_or_suffix(gsub(str,"%$",""))
if tmp ~= "" then
- return resolvers.expanded_path_list(str)
- else
return resolvers.expanded_path_list(tmp)
+ else
+ return resolvers.expanded_path_list(str)
end
end
@@ -5446,9 +6321,9 @@ function resolvers.isreadable.file(name)
local readable = lfs.isfile(name) -- brrr
if trace_detail then
if readable then
- logs.report("fileio","+ readable: %s",name)
+ logs.report("fileio","file '%s' is readable",name)
else
- logs.report("fileio","- readable: %s", name)
+ logs.report("fileio","file '%s' is not readable", name)
end
end
return readable
@@ -5464,7 +6339,7 @@ local function collect_files(names)
for k=1,#names do
local fname = names[k]
if trace_detail then
- logs.report("fileio","? blobpath asked: %s",fname)
+ logs.report("fileio","checking name '%s'",fname)
end
local bname = file.basename(fname)
local dname = file.dirname(fname)
@@ -5480,7 +6355,7 @@ local function collect_files(names)
local files = blobpath and instance.files[blobpath]
if files then
if trace_detail then
- logs.report("fileio",'? blobpath do: %s (%s)',blobpath,bname)
+ logs.report("fileio","deep checking '%s' (%s)",blobpath,bname)
end
local blobfile = files[bname]
if not blobfile then
@@ -5514,7 +6389,7 @@ local function collect_files(names)
end
end
elseif trace_locating then
- logs.report("fileio",'! blobpath no: %s (%s)',blobpath,bname)
+ logs.report("fileio","no match in '%s' (%s)",blobpath,bname)
end
end
end
@@ -5564,14 +6439,13 @@ end
local function collect_instance_files(filename,collected) -- todo : plugin (scanners, checkers etc)
local result = collected or { }
local stamp = nil
- filename = file.collapse_path(filename) -- elsewhere
- filename = file.collapse_path(gsub(filename,"\\","/")) -- elsewhere
+ filename = file.collapse_path(filename)
-- speed up / beware: format problem
if instance.remember then
stamp = filename .. "--" .. instance.engine .. "--" .. instance.progname .. "--" .. instance.format
if instance.found[stamp] then
if trace_locating then
- logs.report("fileio",'! remembered: %s',filename)
+ logs.report("fileio","remembering file '%s'",filename)
end
return instance.found[stamp]
end
@@ -5579,7 +6453,7 @@ local function collect_instance_files(filename,collected) -- todo : plugin (scan
if not dangerous[instance.format or "?"] then
if resolvers.isreadable.file(filename) then
if trace_detail then
- logs.report("fileio",'= found directly: %s',filename)
+ logs.report("fileio","file '%s' found directly",filename)
end
instance.found[stamp] = { filename }
return { filename }
@@ -5587,13 +6461,13 @@ local function collect_instance_files(filename,collected) -- todo : plugin (scan
end
if find(filename,'%*') then
if trace_locating then
- logs.report("fileio",'! wildcard: %s', filename)
+ logs.report("fileio","checking wildcard '%s'", filename)
end
result = resolvers.find_wildcard_files(filename)
elseif file.is_qualified_path(filename) then
if resolvers.isreadable.file(filename) then
if trace_locating then
- logs.report("fileio",'! qualified: %s', filename)
+ logs.report("fileio","qualified name '%s'", filename)
end
result = { filename }
else
@@ -5603,7 +6477,7 @@ local function collect_instance_files(filename,collected) -- todo : plugin (scan
forcedname = filename .. ".tex"
if resolvers.isreadable.file(forcedname) then
if trace_locating then
- logs.report("fileio",'! no suffix, forcing standard filetype: tex')
+ logs.report("fileio","no suffix, forcing standard filetype 'tex'")
end
result, ok = { forcedname }, true
end
@@ -5613,7 +6487,7 @@ local function collect_instance_files(filename,collected) -- todo : plugin (scan
forcedname = filename .. "." .. s
if resolvers.isreadable.file(forcedname) then
if trace_locating then
- logs.report("fileio",'! no suffix, forcing format filetype: %s', s)
+ logs.report("fileio","no suffix, forcing format filetype '%s'", s)
end
result, ok = { forcedname }, true
break
@@ -5625,7 +6499,7 @@ local function collect_instance_files(filename,collected) -- todo : plugin (scan
-- try to find in tree (no suffix manipulation), here we search for the
-- matching last part of the name
local basename = file.basename(filename)
- local pattern = (filename .. "$"):gsub("([%.%-])","%%%1")
+ local pattern = gsub(filename .. "$","([%.%-])","%%%1")
local savedformat = instance.format
local format = savedformat or ""
if format == "" then
@@ -5635,19 +6509,21 @@ local function collect_instance_files(filename,collected) -- todo : plugin (scan
instance.format = "othertextfiles" -- kind of everything, maybe texinput is better
end
--
- local resolved = collect_instance_files(basename)
- if #result == 0 then
- local lowered = lower(basename)
- if filename ~= lowered then
- resolved = collect_instance_files(lowered)
+ if basename ~= filename then
+ local resolved = collect_instance_files(basename)
+ if #result == 0 then
+ local lowered = lower(basename)
+ if filename ~= lowered then
+ resolved = collect_instance_files(lowered)
+ end
end
- end
- resolvers.format = savedformat
- --
- for r=1,#resolved do
- local rr = resolved[r]
- if rr:find(pattern) then
- result[#result+1], ok = rr, true
+ resolvers.format = savedformat
+ --
+ for r=1,#resolved do
+ local rr = resolved[r]
+ if find(rr,pattern) then
+ result[#result+1], ok = rr, true
+ end
end
end
-- a real wildcard:
@@ -5656,14 +6532,14 @@ local function collect_instance_files(filename,collected) -- todo : plugin (scan
-- local filelist = collect_files({basename})
-- for f=1,#filelist do
-- local ff = filelist[f][3] or ""
- -- if ff:find(pattern) then
+ -- if find(ff,pattern) then
-- result[#result+1], ok = ff, true
-- end
-- end
-- end
end
if not ok and trace_locating then
- logs.report("fileio",'? qualified: %s', filename)
+ logs.report("fileio","qualified name '%s'", filename)
end
end
else
@@ -5682,12 +6558,12 @@ local function collect_instance_files(filename,collected) -- todo : plugin (scan
wantedfiles[#wantedfiles+1] = forcedname
filetype = resolvers.format_of_suffix(forcedname)
if trace_locating then
- logs.report("fileio",'! forcing filetype: %s',filetype)
+ logs.report("fileio","forcing filetype '%s'",filetype)
end
else
filetype = resolvers.format_of_suffix(filename)
if trace_locating then
- logs.report("fileio",'! using suffix based filetype: %s',filetype)
+ logs.report("fileio","using suffix based filetype '%s'",filetype)
end
end
else
@@ -5699,7 +6575,7 @@ local function collect_instance_files(filename,collected) -- todo : plugin (scan
end
filetype = instance.format
if trace_locating then
- logs.report("fileio",'! using given filetype: %s',filetype)
+ logs.report("fileio","using given filetype '%s'",filetype)
end
end
local typespec = resolvers.variable_of_format(filetype)
@@ -5707,9 +6583,7 @@ local function collect_instance_files(filename,collected) -- todo : plugin (scan
if not pathlist or #pathlist == 0 then
-- no pathlist, access check only / todo == wildcard
if trace_detail then
- logs.report("fileio",'? filename: %s',filename)
- logs.report("fileio",'? filetype: %s',filetype or '?')
- logs.report("fileio",'? wanted files: %s',concat(wantedfiles," | "))
+ logs.report("fileio","checking filename '%s', filetype '%s', wanted files '%s'",filename, filetype or '?',concat(wantedfiles," | "))
end
for k=1,#wantedfiles do
local fname = wantedfiles[k]
@@ -5730,36 +6604,59 @@ local function collect_instance_files(filename,collected) -- todo : plugin (scan
else
-- list search
local filelist = collect_files(wantedfiles)
- local doscan, recurse
+ local dirlist = { }
+ if filelist then
+ for i=1,#filelist do
+ dirlist[i] = file.dirname(filelist[i][2]) .. "/"
+ end
+ end
if trace_detail then
- logs.report("fileio",'? filename: %s',filename)
+ logs.report("fileio","checking filename '%s'",filename)
end
-- a bit messy ... esp the doscan setting here
+ local doscan
for k=1,#pathlist do
local path = pathlist[k]
if find(path,"^!!") then doscan = false else doscan = true end
- if find(path,"//$") then recurse = true else recurse = false end
local pathname = gsub(path,"^!+", '')
done = false
-- using file list
- if filelist and not (done and not instance.allresults) and recurse then
- -- compare list entries with permitted pattern
- pathname = gsub(pathname,"([%-%.])","%%%1") -- this also influences
- pathname = gsub(pathname,"/+$", '/.*') -- later usage of pathname
- pathname = gsub(pathname,"//", '/.-/') -- not ok for /// but harmless
- local expr = "^" .. pathname
+ if filelist then
+ local expression
+ -- compare list entries with permitted pattern -- /xx /xx//
+ if not find(pathname,"/$") then
+ expression = pathname .. "/"
+ else
+ expression = pathname
+ end
+ expression = gsub(expression,"([%-%.])","%%%1") -- this also influences
+ expression = gsub(expression,"//+$", '/.*') -- later usage of pathname
+ expression = gsub(expression,"//", '/.-/') -- not ok for /// but harmless
+ expression = "^" .. expression .. "$"
+ if trace_detail then
+ logs.report("fileio","using pattern '%s' for path '%s'",expression,pathname)
+ end
for k=1,#filelist do
local fl = filelist[k]
local f = fl[2]
- if find(f,expr) then
- if trace_detail then
- logs.report("fileio",'= found in hash: %s',f)
- end
+ local d = dirlist[k]
+ if find(d,expression) then
--- todo, test for readable
result[#result+1] = fl[3]
resolvers.register_in_trees(f) -- for tracing used files
done = true
- if not instance.allresults then break end
+ if instance.allresults then
+ if trace_detail then
+ logs.report("fileio","match in hash for file '%s' on path '%s', continue scanning",f,d)
+ end
+ else
+ if trace_detail then
+ logs.report("fileio","match in hash for file '%s' on path '%s', quit scanning",f,d)
+ end
+ break
+ end
+ elseif trace_detail then
+ logs.report("fileio","no match in hash for file '%s' on path '%s'",f,d)
end
end
end
@@ -5775,7 +6672,7 @@ local function collect_instance_files(filename,collected) -- todo : plugin (scan
local fname = file.join(ppname,w)
if resolvers.isreadable.file(fname) then
if trace_detail then
- logs.report("fileio",'= found by scanning: %s',fname)
+ logs.report("fileio","found '%s' by scanning",fname)
end
result[#result+1] = fname
done = true
@@ -5838,7 +6735,7 @@ function resolvers.find_given_files(filename)
local hashes = instance.hashes
for k=1,#hashes do
local hash = hashes[k]
- local files = instance.files[hash.tag]
+ local files = instance.files[hash.tag] or { }
local blist = files[bname]
if not blist then
local rname = "remap:"..bname
@@ -5948,9 +6845,9 @@ function resolvers.load(option)
statistics.starttiming(instance)
resolvers.resetconfig()
resolvers.identify_cnf()
- resolvers.load_lua()
+ resolvers.load_lua() -- will become the new method
resolvers.expand_variables()
- resolvers.load_cnf()
+ resolvers.load_cnf() -- will be skipped when we have a lua file
resolvers.expand_variables()
if option ~= "nofiles" then
resolvers.load_hash()
@@ -5962,22 +6859,23 @@ end
function resolvers.for_files(command, files, filetype, mustexist)
if files and #files > 0 then
local function report(str)
- if trace_verbose then
+ if trace_locating then
logs.report("fileio",str) -- has already verbose
else
print(str)
end
end
- if trace_verbose then
- report('')
+ if trace_locating then
+ report('') -- ?
end
- for _, file in ipairs(files) do
+ for f=1,#files do
+ local file = files[f]
local result = command(file,filetype,mustexist)
if type(result) == 'string' then
report(result)
else
- for _,v in ipairs(result) do
- report(v)
+ for i=1,#result do
+ report(result[i]) -- could be unpack
end
end
end
@@ -6024,18 +6922,19 @@ end
function table.sequenced(t,sep) -- temp here
local s = { }
- for k, v in pairs(t) do -- pairs?
- s[#s+1] = k .. "=" .. v
+ for k, v in next, t do -- indexed?
+ s[#s+1] = k .. "=" .. tostring(v)
end
return concat(s, sep or " | ")
end
function resolvers.methodhandler(what, filename, filetype) -- ...
+ filename = file.collapse_path(filename)
local specification = (type(filename) == "string" and resolvers.splitmethod(filename)) or filename -- no or { }, let it bomb
local scheme = specification.scheme
if resolvers[what][scheme] then
if trace_locating then
- logs.report("fileio",'= handler: %s -> %s -> %s',specification.original,what,table.sequenced(specification))
+ logs.report("fileio","handler '%s' -> '%s' -> '%s'",specification.original,what,table.sequenced(specification))
end
return resolvers[what][scheme](filename,filetype) -- todo: specification
else
@@ -6055,8 +6954,9 @@ function resolvers.clean_path(str)
end
function resolvers.do_with_path(name,func)
- for _, v in pairs(resolvers.expanded_path_list(name)) do -- pairs?
- func("^"..resolvers.clean_path(v))
+ local pathlist = resolvers.expanded_path_list(name)
+ for i=1,#pathlist do
+ func("^"..resolvers.clean_path(pathlist[i]))
end
end
@@ -6065,7 +6965,9 @@ function resolvers.do_with_var(name,func)
end
function resolvers.with_files(pattern,handle)
- for _, hash in ipairs(instance.hashes) do
+ local hashes = instance.hashes
+ for i=1,#hashes do
+ local hash = hashes[i]
local blobpath = hash.tag
local blobtype = hash.type
if blobpath then
@@ -6080,7 +6982,7 @@ function resolvers.with_files(pattern,handle)
if type(v) == "string" then
handle(blobtype,blobpath,v,k)
else
- for _,vv in pairs(v) do -- ipairs?
+ for _,vv in next, v do -- indexed
handle(blobtype,blobpath,vv,k)
end
end
@@ -6092,7 +6994,7 @@ function resolvers.with_files(pattern,handle)
end
function resolvers.locate_format(name)
- local barename, fmtname = name:gsub("%.%a+$",""), ""
+ local barename, fmtname = gsub(name,"%.%a+$",""), ""
if resolvers.usecache then
local path = file.join(caches.setpath("formats")) -- maybe platform
fmtname = file.join(path,barename..".fmt") or ""
@@ -6140,7 +7042,7 @@ do -- create closure to overcome 200 locals limit
if not modules then modules = { } end modules ['data-tmp'] = {
version = 1.001,
- comment = "companion to luat-lib.tex",
+ comment = "companion to luat-lib.mkiv",
author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
copyright = "PRAGMA ADE / ConTeXt Development Team",
license = "see context related readme files"
@@ -6164,7 +7066,7 @@ luatools with a recache feature.</p>
local format, lower, gsub = string.format, string.lower, string.gsub
-local trace_cache = false trackers.register("resolvers.cache", function(v) trace_cache = v end)
+local trace_cache = false trackers.register("resolvers.cache", function(v) trace_cache = v end) -- not used yet
caches = caches or { }
@@ -6251,7 +7153,8 @@ function caches.setpath(...)
caches.path = '.'
end
caches.path = resolvers.clean_path(caches.path)
- if not table.is_empty({...}) then
+ local dirs = { ... }
+ if #dirs > 0 then
local pth = dir.mkdirs(caches.path,...)
return pth
end
@@ -6297,6 +7200,7 @@ function caches.savedata(filepath,filename,data,raw)
if raw then
reduce, simplify = false, false
end
+ data.cache_uuid = os.uuid()
if caches.direct then
file.savedata(tmaname, table.serialize(data,'return',false,true,false)) -- no hex
else
@@ -6322,7 +7226,7 @@ do -- create closure to overcome 200 locals limit
if not modules then modules = { } end modules ['data-inp'] = {
version = 1.001,
- comment = "companion to luat-lib.tex",
+ comment = "companion to luat-lib.mkiv",
author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
copyright = "PRAGMA ADE / ConTeXt Development Team",
license = "see context related readme files"
@@ -6343,7 +7247,7 @@ do -- create closure to overcome 200 locals limit
if not modules then modules = { } end modules ['data-out'] = {
version = 1.001,
- comment = "companion to luat-lib.tex",
+ comment = "companion to luat-lib.mkiv",
author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
copyright = "PRAGMA ADE / ConTeXt Development Team",
license = "see context related readme files"
@@ -6359,7 +7263,7 @@ do -- create closure to overcome 200 locals limit
if not modules then modules = { } end modules ['data-con'] = {
version = 1.001,
- comment = "companion to luat-lib.tex",
+ comment = "companion to luat-lib.mkiv",
author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
copyright = "PRAGMA ADE / ConTeXt Development Team",
license = "see context related readme files"
@@ -6370,8 +7274,6 @@ local format, lower, gsub = string.format, string.lower, string.gsub
local trace_cache = false trackers.register("resolvers.cache", function(v) trace_cache = v end)
local trace_containers = false trackers.register("resolvers.containers", function(v) trace_containers = v end)
local trace_storage = false trackers.register("resolvers.storage", function(v) trace_storage = v end)
-local trace_verbose = false trackers.register("resolvers.verbose", function(v) trace_verbose = v end)
-local trace_locating = false trackers.register("resolvers.locating", function(v) trace_locating = v trackers.enable("resolvers.verbose") end)
--[[ldx--
<p>Once we found ourselves defining similar cache constructs
@@ -6435,7 +7337,7 @@ 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
+ return storage and storage.cache_version == container.version
else
return false
end
@@ -6487,16 +7389,15 @@ do -- create closure to overcome 200 locals limit
if not modules then modules = { } end modules ['data-use'] = {
version = 1.001,
- comment = "companion to luat-lib.tex",
+ comment = "companion to luat-lib.mkiv",
author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
copyright = "PRAGMA ADE / ConTeXt Development Team",
license = "see context related readme files"
}
-local format, lower, gsub = string.format, string.lower, string.gsub
+local format, lower, gsub, find = string.format, string.lower, string.gsub, string.find
-local trace_verbose = false trackers.register("resolvers.verbose", function(v) trace_verbose = v end)
-local trace_locating = false trackers.register("resolvers.locating", function(v) trace_locating = v trackers.enable("resolvers.verbose") end)
+local trace_locating = false trackers.register("resolvers.locating", function(v) trace_locating = v end)
-- since we want to use the cache instead of the tree, we will now
-- reimplement the saver.
@@ -6540,19 +7441,20 @@ resolvers.automounted = resolvers.automounted or { }
function resolvers.automount(usecache)
local mountpaths = resolvers.clean_path_list(resolvers.expansion('TEXMFMOUNT'))
- if table.is_empty(mountpaths) and usecache then
+ if (not mountpaths or #mountpaths == 0) and usecache then
mountpaths = { caches.setpath("mount") }
end
- if not table.is_empty(mountpaths) then
+ if mountpaths and #mountpaths > 0 then
statistics.starttiming(resolvers.instance)
- for k, root in pairs(mountpaths) do
+ for k=1,#mountpaths do
+ local root = mountpaths[k]
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
+ if find(line,"^[%%#%-]") then -- or %W
-- skip
- elseif line:find("^zip://") then
+ elseif find(line,"^zip://") then
if trace_locating then
logs.report("fileio","mounting %s",line)
end
@@ -6597,11 +7499,13 @@ function statistics.check_fmt_status(texname)
local luv = dofile(luvname)
if luv and luv.sourcefile then
local sourcehash = md5.hex(io.loaddata(resolvers.find_file(luv.sourcefile)) or "unknown")
- if luv.enginebanner and luv.enginebanner ~= enginebanner then
- return "engine mismatch"
+ local luvbanner = luv.enginebanner or "?"
+ if luvbanner ~= enginebanner then
+ return string.format("engine mismatch (luv:%s <> bin:%s)",luvbanner,enginebanner)
end
- if luv.sourcehash and luv.sourcehash ~= sourcehash then
- return "source mismatch"
+ local luvhash = luv.sourcehash or "?"
+ if luvhash ~= sourcehash then
+ return string.format("source mismatch (luv:%s <> bin:%s)",luvhash,sourcehash)
end
else
return "invalid status file"
@@ -6727,7 +7631,7 @@ do -- create closure to overcome 200 locals limit
if not modules then modules = { } end modules ['data-aux'] = {
version = 1.001,
- comment = "companion to luat-lib.tex",
+ comment = "companion to luat-lib.mkiv",
author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
copyright = "PRAGMA ADE / ConTeXt Development Team",
license = "see context related readme files"
@@ -6735,47 +7639,47 @@ if not modules then modules = { } end modules ['data-aux'] = {
local find = string.find
-local trace_verbose = false trackers.register("resolvers.verbose", function(v) trace_verbose = v end)
+local trace_locating = false trackers.register("resolvers.locating", function(v) trace_locating = v end)
function resolvers.update_script(oldname,newname) -- oldname -> own.name, not per se a suffix
local scriptpath = "scripts/context/lua"
newname = file.addsuffix(newname,"lua")
local oldscript = resolvers.clean_path(oldname)
- if trace_verbose then
+ if trace_locating then
logs.report("fileio","to be replaced old script %s", oldscript)
end
local newscripts = resolvers.find_files(newname) or { }
if #newscripts == 0 then
- if trace_verbose then
+ if trace_locating then
logs.report("fileio","unable to locate new script")
end
else
for i=1,#newscripts do
local newscript = resolvers.clean_path(newscripts[i])
- if trace_verbose then
+ if trace_locating then
logs.report("fileio","checking new script %s", newscript)
end
if oldscript == newscript then
- if trace_verbose then
+ if trace_locating then
logs.report("fileio","old and new script are the same")
end
elseif not find(newscript,scriptpath) then
- if trace_verbose then
+ if trace_locating then
logs.report("fileio","new script should come from %s",scriptpath)
end
elseif not (find(oldscript,file.removesuffix(newname).."$") or find(oldscript,newname.."$")) then
- if trace_verbose then
+ if trace_locating then
logs.report("fileio","invalid new script name")
end
else
local newdata = io.loaddata(newscript)
if newdata then
- if trace_verbose then
+ if trace_locating then
logs.report("fileio","old script content replaced by new content")
end
io.savedata(oldscript,newdata)
break
- elseif trace_verbose then
+ elseif trace_locating then
logs.report("fileio","unable to load new script")
end
end
@@ -6790,7 +7694,7 @@ do -- create closure to overcome 200 locals limit
if not modules then modules = { } end modules ['data-lst'] = {
version = 1.001,
- comment = "companion to luat-lib.tex",
+ comment = "companion to luat-lib.mkiv",
author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
copyright = "PRAGMA ADE / ConTeXt Development Team",
license = "see context related readme files"
@@ -6814,7 +7718,9 @@ local function list(list,report)
local instance = resolvers.instance
local pat = upper(pattern or "","")
local report = report or texio.write_nl
- for _,key in pairs(table.sortedkeys(list)) do
+ local sorted = table.sortedkeys(list)
+ for i=1,#sorted do
+ local key = sorted[i]
if instance.pattern == "" or find(upper(key),pat) then
if instance.kpseonly then
if instance.kpsevars[key] then
@@ -6833,11 +7739,14 @@ function resolvers.listers.expansions() list(resolvers.instance.expansions) end
function resolvers.listers.configurations(report)
local report = report or texio.write_nl
local instance = resolvers.instance
- for _,key in ipairs(table.sortedkeys(instance.kpsevars)) do
+ local sorted = table.sortedkeys(instance.kpsevars)
+ for i=1,#sorted do
+ local key = sorted[i]
if not instance.pattern or (instance.pattern=="") or find(key,instance.pattern) then
report(format("%s\n",key))
- for i,c in ipairs(instance.order) do
- local str = c[key]
+ local order = instance.order
+ for i=1,#order do
+ local str = order[i][key]
if str then
report(format("\t%s\t%s",i,str))
end
@@ -6943,7 +7852,7 @@ if not resolvers then
os.exit()
end
-logs.setprogram('LuaTools',"TDS Management Tool 1.31",environment.arguments["verbose"] or false)
+logs.setprogram('LuaTools',"TDS Management Tool 1.32",environment.arguments["verbose"] or false)
local instance = resolvers.reset()
@@ -7000,6 +7909,12 @@ end
if environment.arguments["trace"] then resolvers.settrace(environment.arguments["trace"]) end
+local trackspec = environment.argument("trackers") or environment.argument("track")
+
+if trackspec then
+ trackers.enable(trackspec)
+end
+
runners = runners or { }
messages = messages or { }
@@ -7033,6 +7948,7 @@ messages.help = [[
--engine=str target engine
--progname=str format or backend
--pattern=str filter variables
+--trackers=list enable given trackers
]]
function runners.make_format(texname)
@@ -7091,8 +8007,9 @@ function runners.make_format(texname)
logs.simple("using uncompiled initialization file: %s",luaname)
end
else
- for _, v in pairs({instance.luaname, instance.progname, barename}) do
- v = string.gsub(v..".lua","%.lua%.lua$",".lua")
+ local what = { instance.luaname, instance.progname, barename }
+ for k=1,#what do
+ local v = string.gsub(what[k]..".lua","%.lua%.lua$",".lua")
if v and (v ~= "") then
luaname = resolvers.find_files(v)[1] or ""
if luaname ~= "" then
@@ -7116,7 +8033,8 @@ function runners.make_format(texname)
logs.simple("using lua initialization file: %s",luaname)
local mp = dir.glob(file.removesuffix(file.basename(luaname)).."-*.mem")
if mp and #mp > 0 then
- for _, name in ipairs(mp) do
+ for i=1,#mp do
+ local name = mp[i]
logs.simple("removing related mplib format %s", file.basename(name))
os.remove(name)
end
diff --git a/Master/texmf-dist/scripts/context/stubs/unix/makempy b/Master/texmf-dist/scripts/context/stubs/unix/makempy
deleted file mode 100755
index 34892b28460..00000000000
--- a/Master/texmf-dist/scripts/context/stubs/unix/makempy
+++ /dev/null
@@ -1,2 +0,0 @@
-#!/bin/sh
-mtxrun --usekpse --execute makempy.pl "$@"
diff --git a/Master/texmf-dist/scripts/context/stubs/unix/mpstools b/Master/texmf-dist/scripts/context/stubs/unix/mpstools
deleted file mode 100755
index 1a64d90b03f..00000000000
--- a/Master/texmf-dist/scripts/context/stubs/unix/mpstools
+++ /dev/null
@@ -1,2 +0,0 @@
-#!/bin/sh
-mtxrun --usekpse --execute mpstools.rb "$@"
diff --git a/Master/texmf-dist/scripts/context/stubs/unix/mptopdf b/Master/texmf-dist/scripts/context/stubs/unix/mptopdf
deleted file mode 100755
index f57a8b7a792..00000000000
--- a/Master/texmf-dist/scripts/context/stubs/unix/mptopdf
+++ /dev/null
@@ -1,2 +0,0 @@
-#!/bin/sh
-mtxrun --usekpse --execute mptopdf.pl "$@"
diff --git a/Master/texmf-dist/scripts/context/stubs/unix/mtxrun b/Master/texmf-dist/scripts/context/stubs/unix/mtxrun
index 82d1edecbc5..b99327692d7 100644
--- a/Master/texmf-dist/scripts/context/stubs/unix/mtxrun
+++ b/Master/texmf-dist/scripts/context/stubs/unix/mtxrun
@@ -48,13 +48,16 @@ do -- create closure to overcome 200 locals limit
if not modules then modules = { } end modules ['l-string'] = {
version = 1.001,
- comment = "companion to luat-lib.tex",
+ comment = "companion to luat-lib.mkiv",
author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
copyright = "PRAGMA ADE / ConTeXt Development Team",
license = "see context related readme files"
}
-local sub, gsub, find, match, gmatch, format, char, byte, rep = string.sub, string.gsub, string.find, string.match, string.gmatch, string.format, string.char, string.byte, string.rep
+local sub, gsub, find, match, gmatch, format, char, byte, rep, lower = string.sub, string.gsub, string.find, string.match, string.gmatch, string.format, string.char, string.byte, string.rep, string.lower
+local lpegmatch = lpeg.match
+
+-- some functions may disappear as they are not used anywhere
if not string.split then
@@ -94,8 +97,16 @@ function string:unquote()
return (gsub(self,"^([\"\'])(.*)%1$","%2"))
end
+--~ function string:unquote()
+--~ if find(self,"^[\'\"]") then
+--~ return sub(self,2,-2)
+--~ else
+--~ return self
+--~ end
+--~ end
+
function string:quote() -- we could use format("%q")
- return '"' .. self:unquote() .. '"'
+ return format("%q",self)
end
function string:count(pattern) -- variant 3
@@ -115,12 +126,23 @@ function string:limit(n,sentinel)
end
end
-function string:strip()
- return (gsub(self,"^%s*(.-)%s*$", "%1"))
+--~ function string:strip() -- the .- is quite efficient
+--~ -- return match(self,"^%s*(.-)%s*$") or ""
+--~ -- return match(self,'^%s*(.*%S)') or '' -- posted on lua list
+--~ return find(s,'^%s*$') and '' or match(s,'^%s*(.*%S)')
+--~ end
+
+do -- roberto's variant:
+ local space = lpeg.S(" \t\v\n")
+ local nospace = 1 - space
+ local stripper = space^0 * lpeg.C((space^0 * nospace^1)^0)
+ function string.strip(str)
+ return lpegmatch(stripper,str) or ""
+ end
end
function string:is_empty()
- return not find(find,"%S")
+ return not find(self,"%S")
end
function string:enhance(pattern,action)
@@ -154,14 +176,14 @@ if not string.characters then
local function nextchar(str, index)
index = index + 1
- return (index <= #str) and index or nil, str:sub(index,index)
+ return (index <= #str) and index or nil, sub(str,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, byte(str:sub(index,index))
+ return (index <= #str) and index or nil, byte(sub(str,index,index))
end
function string:bytes()
return nextbyte, self, 0
@@ -174,7 +196,7 @@ end
function string:rpadd(n,chr)
local m = n-#self
if m > 0 then
- return self .. self.rep(chr or " ",m)
+ return self .. rep(chr or " ",m)
else
return self
end
@@ -183,7 +205,7 @@ end
function string:lpadd(n,chr)
local m = n-#self
if m > 0 then
- return self.rep(chr or " ",m) .. self
+ return rep(chr or " ",m) .. self
else
return self
end
@@ -231,6 +253,17 @@ function string:pattesc()
return (gsub(self,".",patterns_escapes))
end
+local simple_escapes = {
+ ["-"] = "%-",
+ ["."] = "%.",
+ ["?"] = ".",
+ ["*"] = ".*",
+}
+
+function string:simpleesc()
+ return (gsub(self,".",simple_escapes))
+end
+
function string:tohash()
local t = { }
for s in gmatch(self,"([^, ]+)") do -- lpeg
@@ -242,10 +275,10 @@ end
local pattern = lpeg.Ct(lpeg.C(1)^0)
function string:totable()
- return pattern:match(self)
+ return lpegmatch(pattern,self)
end
---~ for _, str in ipairs {
+--~ local t = {
--~ "1234567123456712345671234567",
--~ "a\tb\tc",
--~ "aa\tbb\tcc",
@@ -253,7 +286,10 @@ end
--~ "aaaa\tbbbb\tcccc",
--~ "aaaaa\tbbbbb\tccccc",
--~ "aaaaaa\tbbbbbb\tcccccc",
---~ } do print(string.tabtospace(str)) end
+--~ }
+--~ for k,v do
+--~ print(string.tabtospace(t[k]))
+--~ end
function string.tabtospace(str,tab)
-- we don't handle embedded newlines
@@ -261,7 +297,7 @@ function string.tabtospace(str,tab)
local s = find(str,"\t")
if s then
if not tab then tab = 7 end -- only when found
- local d = tab-(s-1)%tab
+ local d = tab-(s-1) % tab
if d > 0 then
str = gsub(str,"\t",rep(" ",d),1)
else
@@ -280,6 +316,25 @@ function string:compactlong() -- strips newlines and leading spaces
return self
end
+function string:striplong() -- strips newlines and leading spaces
+ self = gsub(self,"^%s*","")
+ self = gsub(self,"[\n\r]+ *","\n")
+ return self
+end
+
+function string:topattern(lowercase,strict)
+ if lowercase then
+ self = lower(self)
+ end
+ self = gsub(self,".",simple_escapes)
+ if self == "" then
+ self = ".*"
+ elseif strict then
+ self = "^" .. self .. "$"
+ end
+ return self
+end
+
end -- of closure
@@ -287,58 +342,64 @@ do -- create closure to overcome 200 locals limit
if not modules then modules = { } end modules ['l-lpeg'] = {
version = 1.001,
- comment = "companion to luat-lib.tex",
+ comment = "companion to luat-lib.mkiv",
author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
copyright = "PRAGMA ADE / ConTeXt Development Team",
license = "see context related readme files"
}
-local P, S, Ct, C, Cs, Cc = lpeg.P, lpeg.S, lpeg.Ct, lpeg.C, lpeg.Cs, lpeg.Cc
-
---~ 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 = { }
+local lpeg = require("lpeg")
+
+lpeg.patterns = lpeg.patterns or { } -- so that we can share
+local patterns = lpeg.patterns
+
+local P, R, S, Ct, C, Cs, Cc, V = lpeg.P, lpeg.R, lpeg.S, lpeg.Ct, lpeg.C, lpeg.Cs, lpeg.Cc, lpeg.V
+local match = lpeg.match
+
+local digit, sign = R('09'), S('+-')
+local cr, lf, crlf = P("\r"), P("\n"), P("\r\n")
+local utf8byte = R("\128\191")
+
+patterns.utf8byte = utf8byte
+patterns.utf8one = R("\000\127")
+patterns.utf8two = R("\194\223") * utf8byte
+patterns.utf8three = R("\224\239") * utf8byte * utf8byte
+patterns.utf8four = R("\240\244") * utf8byte * utf8byte * utf8byte
+
+patterns.digit = digit
+patterns.sign = sign
+patterns.cardinal = sign^0 * digit^1
+patterns.integer = sign^0 * digit^1
+patterns.float = sign^0 * digit^0 * P('.') * digit^1
+patterns.number = patterns.float + patterns.integer
+patterns.oct = P("0") * R("07")^1
+patterns.octal = patterns.oct
+patterns.HEX = P("0x") * R("09","AF")^1
+patterns.hex = P("0x") * R("09","af")^1
+patterns.hexadecimal = P("0x") * R("09","AF","af")^1
+patterns.lowercase = R("az")
+patterns.uppercase = R("AZ")
+patterns.letter = patterns.lowercase + patterns.uppercase
+patterns.space = S(" ")
+patterns.eol = S("\n\r")
+patterns.spacer = S(" \t\f\v") -- + string.char(0xc2, 0xa0) if we want utf (cf mail roberto)
+patterns.newline = crlf + cr + lf
+patterns.nonspace = 1 - patterns.space
+patterns.nonspacer = 1 - patterns.spacer
+patterns.whitespace = patterns.eol + patterns.spacer
+patterns.nonwhitespace = 1 - patterns.whitespace
+patterns.utf8 = patterns.utf8one + patterns.utf8two + patterns.utf8three + patterns.utf8four
+patterns.utfbom = P('\000\000\254\255') + P('\255\254\000\000') + P('\255\254') + P('\254\255') + P('\239\187\191')
function lpeg.anywhere(pattern) --slightly adapted from website
- return P { P(pattern) + 1 * lpeg.V(1) }
-end
-
-function lpeg.startswith(pattern) --slightly adapted
- return P(pattern)
+ return P { P(pattern) + 1 * V(1) } -- why so complex?
end
function lpeg.splitter(pattern, action)
return (((1-P(pattern))^1)/action+1)^0
end
--- variant:
-
---~ local parser = lpeg.Ct(lpeg.splitat(newline))
-
-local crlf = P("\r\n")
-local cr = P("\r")
-local lf = P("\n")
-local space = S(" \t\f\v") -- + string.char(0xc2, 0xa0) if we want utf (cf mail roberto)
-local newline = crlf + cr + lf
-local spacing = space^0 * newline
-
+local spacing = patterns.spacer^0 * patterns.newline -- sort of strip
local empty = spacing * Cc("")
local nonempty = Cs((1-spacing)^1) * spacing^-1
local content = (empty + nonempty)^1
@@ -346,15 +407,15 @@ local content = (empty + nonempty)^1
local capture = Ct(content^0)
function string:splitlines()
- return capture:match(self)
+ return match(capture,self)
end
-lpeg.linebyline = content -- better make a sublibrary
+patterns.textline = content
---~ local p = lpeg.splitat("->",false) print(p:match("oeps->what->more")) -- oeps what more
---~ local p = lpeg.splitat("->",true) print(p:match("oeps->what->more")) -- oeps what->more
---~ local p = lpeg.splitat("->",false) print(p:match("oeps")) -- oeps
---~ local p = lpeg.splitat("->",true) print(p:match("oeps")) -- oeps
+--~ local p = lpeg.splitat("->",false) print(match(p,"oeps->what->more")) -- oeps what more
+--~ local p = lpeg.splitat("->",true) print(match(p,"oeps->what->more")) -- oeps what->more
+--~ local p = lpeg.splitat("->",false) print(match(p,"oeps")) -- oeps
+--~ local p = lpeg.splitat("->",true) print(match(p,"oeps")) -- oeps
local splitters_s, splitters_m = { }, { }
@@ -364,7 +425,7 @@ local function splitat(separator,single)
separator = P(separator)
if single then
local other, any = C((1 - separator)^0), P(1)
- splitter = other * (separator * C(any^0) + "")
+ splitter = other * (separator * C(any^0) + "") -- ?
splitters_s[separator] = splitter
else
local other = C((1 - separator)^0)
@@ -379,15 +440,72 @@ lpeg.splitat = splitat
local cache = { }
+function lpeg.split(separator,str)
+ local c = cache[separator]
+ if not c then
+ c = Ct(splitat(separator))
+ cache[separator] = c
+ end
+ return match(c,str)
+end
+
function string:split(separator)
local c = cache[separator]
if not c then
c = Ct(splitat(separator))
cache[separator] = c
end
- return c:match(self)
+ return match(c,self)
+end
+
+lpeg.splitters = cache
+
+local cache = { }
+
+function lpeg.checkedsplit(separator,str)
+ local c = cache[separator]
+ if not c then
+ separator = P(separator)
+ local other = C((1 - separator)^0)
+ c = Ct(separator^0 * other * (separator^1 * other)^0)
+ cache[separator] = c
+ end
+ return match(c,str)
+end
+
+function string:checkedsplit(separator)
+ local c = cache[separator]
+ if not c then
+ separator = P(separator)
+ local other = C((1 - separator)^0)
+ c = Ct(separator^0 * other * (separator^1 * other)^0)
+ cache[separator] = c
+ end
+ return match(c,self)
end
+--~ function lpeg.append(list,pp)
+--~ local p = pp
+--~ for l=1,#list do
+--~ if p then
+--~ p = p + P(list[l])
+--~ else
+--~ p = P(list[l])
+--~ end
+--~ end
+--~ return p
+--~ end
+
+--~ from roberto's site:
+
+local f1 = string.byte
+
+local function f2(s) local c1, c2 = f1(s,1,2) return c1 * 64 + c2 - 12416 end
+local function f3(s) local c1, c2, c3 = f1(s,1,3) return (c1 * 64 + c2) * 64 + c3 - 925824 end
+local function f4(s) local c1, c2, c3, c4 = f1(s,1,4) return ((c1 * 64 + c2) * 64 + c3) * 64 + c4 - 63447168 end
+
+patterns.utf8byte = patterns.utf8one/f1 + patterns.utf8two/f2 + patterns.utf8three/f3 + patterns.utf8four/f4
+
end -- of closure
@@ -395,7 +513,7 @@ do -- create closure to overcome 200 locals limit
if not modules then modules = { } end modules ['l-table'] = {
version = 1.001,
- comment = "companion to luat-lib.tex",
+ comment = "companion to luat-lib.mkiv",
author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
copyright = "PRAGMA ADE / ConTeXt Development Team",
license = "see context related readme files"
@@ -404,9 +522,58 @@ if not modules then modules = { } end modules ['l-table'] = {
table.join = table.concat
local concat, sort, insert, remove = table.concat, table.sort, table.insert, table.remove
-local format, find, gsub, lower, dump = string.format, string.find, string.gsub, string.lower, string.dump
+local format, find, gsub, lower, dump, match = string.format, string.find, string.gsub, string.lower, string.dump, string.match
local getmetatable, setmetatable = getmetatable, setmetatable
-local type, next, tostring, ipairs = type, next, tostring, ipairs
+local type, next, tostring, tonumber, ipairs = type, next, tostring, tonumber, ipairs
+
+-- Starting with version 5.2 Lua no longer provide ipairs, which makes
+-- sense. As we already used the for loop and # in most places the
+-- impact on ConTeXt was not that large; the remaining ipairs already
+-- have been replaced. In a similar fashio we also hardly used pairs.
+--
+-- Just in case, we provide the fallbacks as discussed in Programming
+-- in Lua (http://www.lua.org/pil/7.3.html):
+
+if not ipairs then
+
+ -- for k, v in ipairs(t) do ... end
+ -- for k=1,#t do local v = t[k] ... end
+
+ local function iterate(a,i)
+ i = i + 1
+ local v = a[i]
+ if v ~= nil then
+ return i, v --, nil
+ end
+ end
+
+ function ipairs(a)
+ return iterate, a, 0
+ end
+
+end
+
+if not pairs then
+
+ -- for k, v in pairs(t) do ... end
+ -- for k, v in next, t do ... end
+
+ function pairs(t)
+ return next, t -- , nil
+ end
+
+end
+
+-- Also, unpack has been moved to the table table, and for compatiility
+-- reasons we provide both now.
+
+if not table.unpack then
+ table.unpack = _G.unpack
+elseif not unpack then
+ _G.unpack = table.unpack
+end
+
+-- extra functions, some might go (when not used)
function table.strip(tab)
local lst = { }
@@ -421,6 +588,14 @@ function table.strip(tab)
return lst
end
+function table.keys(t)
+ local k = { }
+ for key, _ in next, t do
+ k[#k+1] = key
+ end
+ return k
+end
+
local function compare(a,b)
return (tostring(a) < tostring(b))
end
@@ -464,7 +639,7 @@ end
table.sortedkeys = sortedkeys
table.sortedhashkeys = sortedhashkeys
-function table.sortedpairs(t)
+function table.sortedhash(t)
local s = sortedhashkeys(t) -- maybe just sortedkeys
local n = 0
local function kv(s)
@@ -475,6 +650,8 @@ function table.sortedpairs(t)
return kv, s
end
+table.sortedpairs = table.sortedhash
+
function table.append(t, list)
for _,v in next, list do
insert(t,v)
@@ -583,7 +760,7 @@ end
table.fastcopy = fastcopy
table.copy = copy
--- rougly: copy-loop : unpack : sub == 0.9 : 0.4 : 0.45 (so in critical apps, use unpack)
+-- roughly: 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) }
@@ -597,18 +774,18 @@ end
-- slower than #t on indexed tables (#t only returns the size of the numerically indexed slice)
-function table.is_empty(t)
+function table.is_empty(t) -- obolete, use inline code instead
return not t or not next(t)
end
-function table.one_entry(t)
+function table.one_entry(t) -- obolete, use inline code instead
local n = next(t)
return n and not next(t,n)
end
-function table.starts_at(t)
- return ipairs(t,1)(t,0)
-end
+--~ function table.starts_at(t) -- obsolete, not nice anyway
+--~ return ipairs(t,1)(t,0)
+--~ end
function table.tohash(t,value)
local h = { }
@@ -686,6 +863,8 @@ end
--
-- local propername = lpeg.P(lpeg.R("AZ","az","__") * lpeg.R("09","AZ","az", "__")^0 * lpeg.P(-1) )
+-- problem: there no good number_to_string converter with the best resolution
+
local function do_serialize(root,name,depth,level,indexed)
if level > 0 then
depth = depth .. " "
@@ -708,8 +887,9 @@ local function do_serialize(root,name,depth,level,indexed)
handle(format("%s{",depth))
end
end
+ -- we could check for k (index) being number (cardinal)
if root and next(root) then
- local first, last = nil, 0 -- #root cannot be trusted here
+ local first, last = nil, 0 -- #root cannot be trusted here (will be ok in 5.2 when ipairs is gone)
if compact then
-- NOT: for k=1,#root do (we need to quit at nil)
for k,v in ipairs(root) do -- can we use next?
@@ -730,10 +910,10 @@ local function do_serialize(root,name,depth,level,indexed)
if hexify then
handle(format("%s 0x%04X,",depth,v))
else
- handle(format("%s %s,",depth,v))
+ handle(format("%s %s,",depth,v)) -- %.99g
end
elseif t == "string" then
- if reduce and (find(v,"^[%-%+]?[%d]-%.?[%d+]$") == 1) then
+ if reduce and tonumber(v) then
handle(format("%s %s,",depth,v))
else
handle(format("%s %q,",depth,v))
@@ -770,29 +950,29 @@ local function do_serialize(root,name,depth,level,indexed)
--~ if hexify then
--~ handle(format("%s %s=0x%04X,",depth,key(k),v))
--~ else
- --~ handle(format("%s %s=%s,",depth,key(k),v))
+ --~ handle(format("%s %s=%s,",depth,key(k),v)) -- %.99g
--~ end
if type(k) == "number" then -- or find(k,"^%d+$") then
if hexify then
handle(format("%s [0x%04X]=0x%04X,",depth,k,v))
else
- handle(format("%s [%s]=%s,",depth,k,v))
+ handle(format("%s [%s]=%s,",depth,k,v)) -- %.99g
end
elseif noquotes and not reserved[k] and find(k,"^%a[%w%_]*$") then
if hexify then
handle(format("%s %s=0x%04X,",depth,k,v))
else
- handle(format("%s %s=%s,",depth,k,v))
+ handle(format("%s %s=%s,",depth,k,v)) -- %.99g
end
else
if hexify then
handle(format("%s [%q]=0x%04X,",depth,k,v))
else
- handle(format("%s [%q]=%s,",depth,k,v))
+ handle(format("%s [%q]=%s,",depth,k,v)) -- %.99g
end
end
elseif t == "string" then
- if reduce and (find(v,"^[%-%+]?[%d]-%.?[%d+]$") == 1) then
+ if reduce and tonumber(v) then
--~ handle(format("%s %s=%s,",depth,key(k),v))
if type(k) == "number" then -- or find(k,"^%d+$") then
if hexify then
@@ -1001,7 +1181,7 @@ function table.tofile(filename,root,name,reduce,noquotes,hexify)
end
end
-local function flatten(t,f,complete)
+local function flatten(t,f,complete) -- is this used? meybe a variant with next, ...
for i=1,#t do
local v = t[i]
if type(v) == "table" then
@@ -1030,6 +1210,24 @@ end
table.flatten_one_level = table.unnest
+-- a better one:
+
+local function flattened(t,f)
+ if not f then
+ f = { }
+ end
+ for k, v in next, t do
+ if type(v) == "table" then
+ flattened(v,f)
+ else
+ f[k] = v
+ end
+ end
+ return f
+end
+
+table.flattened = flattened
+
-- the next three may disappear
function table.remove_value(t,value) -- todo: n
@@ -1165,7 +1363,7 @@ function table.clone(t,p) -- t is optional or nil or table
elseif not t then
t = { }
end
- setmetatable(t, { __index = function(_,key) return p[key] end })
+ setmetatable(t, { __index = function(_,key) return p[key] end }) -- why not __index = p ?
return t
end
@@ -1193,21 +1391,36 @@ function table.reverse(t)
return tt
end
---~ function table.keys(t)
---~ local k = { }
---~ for k,_ in next, t do
---~ k[#k+1] = k
---~ end
---~ return k
---~ end
+function table.insert_before_value(t,value,extra)
+ for i=1,#t do
+ if t[i] == extra then
+ remove(t,i)
+ end
+ end
+ for i=1,#t do
+ if t[i] == value then
+ insert(t,i,extra)
+ return
+ end
+ end
+ insert(t,1,extra)
+end
+
+function table.insert_after_value(t,value,extra)
+ for i=1,#t do
+ if t[i] == extra then
+ remove(t,i)
+ end
+ end
+ for i=1,#t do
+ if t[i] == value then
+ insert(t,i+1,extra)
+ return
+ end
+ end
+ insert(t,#t+1,extra)
+end
---~ function table.keys_as_string(t)
---~ local k = { }
---~ for k,_ in next, t do
---~ k[#k+1] = k
---~ end
---~ return concat(k,"")
---~ end
end -- of closure
@@ -1216,13 +1429,13 @@ do -- create closure to overcome 200 locals limit
if not modules then modules = { } end modules ['l-io'] = {
version = 1.001,
- comment = "companion to luat-lib.tex",
+ comment = "companion to luat-lib.mkiv",
author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
copyright = "PRAGMA ADE / ConTeXt Development Team",
license = "see context related readme files"
}
-local byte = string.byte
+local byte, find, gsub = string.byte, string.find, string.gsub
if string.find(os.getenv("PATH"),";") then
io.fileseparator, io.pathseparator = "\\", ";"
@@ -1251,7 +1464,7 @@ function io.savedata(filename,data,joiner)
elseif type(data) == "function" then
data(f)
else
- f:write(data)
+ f:write(data or "")
end
f:close()
return true
@@ -1380,20 +1593,21 @@ function io.ask(question,default,options)
end
io.write(string.format(" "))
local answer = io.read()
- answer = answer:gsub("^%s*(.*)%s*$","%1")
+ answer = gsub(answer,"^%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
+ for k=1,#options do
+ if options[k] == answer then
return answer
end
end
local pattern = "^" .. answer
- for _,v in pairs(options) do
- if v:find(pattern) then
+ for k=1,#options do
+ local v = options[k]
+ if find(v,pattern) then
return v
end
end
@@ -1408,20 +1622,22 @@ do -- create closure to overcome 200 locals limit
if not modules then modules = { } end modules ['l-number'] = {
version = 1.001,
- comment = "companion to luat-lib.tex",
+ comment = "companion to luat-lib.mkiv",
author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
copyright = "PRAGMA ADE / ConTeXt Development Team",
license = "see context related readme files"
}
-local format = string.format
+local tostring = tostring
+local format, floor, insert, match = string.format, math.floor, table.insert, string.match
+local lpegmatch = lpeg.match
number = number or { }
-- a,b,c,d,e,f = number.toset(100101)
function number.toset(n)
- return (tostring(n)):match("(.?)(.?)(.?)(.?)(.?)(.?)(.?)(.?)")
+ return match(tostring(n),"(.?)(.?)(.?)(.?)(.?)(.?)(.?)(.?)")
end
function number.toevenhex(n)
@@ -1447,10 +1663,21 @@ end
local one = lpeg.C(1-lpeg.S(''))^1
function number.toset(n)
- return one:match(tostring(n))
+ return lpegmatch(one,tostring(n))
end
-
+function number.bits(n,zero)
+ local t, i = { }, (zero and 0) or 1
+ while n > 0 do
+ local m = n % 2
+ if m > 0 then
+ insert(t,1,i)
+ end
+ n = floor(n/2)
+ i = i + 1
+ end
+ return t
+end
end -- of closure
@@ -1459,7 +1686,7 @@ do -- create closure to overcome 200 locals limit
if not modules then modules = { } end modules ['l-set'] = {
version = 1.001,
- comment = "companion to luat-lib.tex",
+ comment = "companion to luat-lib.mkiv",
author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
copyright = "PRAGMA ADE / ConTeXt Development Team",
license = "see context related readme files"
@@ -1549,46 +1776,63 @@ do -- create closure to overcome 200 locals limit
if not modules then modules = { } end modules ['l-os'] = {
version = 1.001,
- comment = "companion to luat-lub.tex",
+ comment = "companion to luat-lib.mkiv",
author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
copyright = "PRAGMA ADE / ConTeXt Development Team",
license = "see context related readme files"
}
-local find = string.find
+-- maybe build io.flush in os.execute
+
+local find, format, gsub = string.find, string.format, string.gsub
+local random, ceil = math.random, math.ceil
+
+local execute, spawn, exec, ioflush = os.execute, os.spawn or os.execute, os.exec or os.execute, io.flush
+
+function os.execute(...) ioflush() return execute(...) end
+function os.spawn (...) ioflush() return spawn (...) end
+function os.exec (...) ioflush() return exec (...) end
function os.resultof(command)
- return io.popen(command,"r"):read("*all")
+ ioflush() -- else messed up logging
+ local handle = io.popen(command,"r")
+ if not handle then
+ -- print("unknown command '".. command .. "' in os.resultof")
+ return ""
+ else
+ return handle:read("*all") or ""
+ end
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)
+--~ os.type : windows | unix (new, we already guessed os.platform)
+--~ os.name : windows | msdos | linux | macosx | solaris | .. | generic (new)
+--~ os.platform : extended os.name with architecture
if not io.fileseparator then
if find(os.getenv("PATH"),";") then
- io.fileseparator, io.pathseparator, os.platform = "\\", ";", os.type or "windows"
+ io.fileseparator, io.pathseparator, os.type = "\\", ";", os.type or "mswin"
else
- io.fileseparator, io.pathseparator, os.platform = "/" , ":", os.type or "unix"
+ io.fileseparator, io.pathseparator, os.type = "/" , ":", os.type or "unix"
end
end
-os.platform = os.platform or os.type or (io.pathseparator == ";" and "windows") or "unix"
+os.type = os.type or (io.pathseparator == ";" and "windows") or "unix"
+os.name = os.name or (os.type == "windows" and "mswin" ) or "linux"
+
+if os.type == "windows" then
+ os.libsuffix, os.binsuffix = 'dll', 'exe'
+else
+ os.libsuffix, os.binsuffix = 'so', ''
+end
function os.launch(str)
- if os.platform == "windows" then
+ if os.type == "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
@@ -1618,64 +1862,218 @@ end
--~ print(os.date("%H:%M:%S",os.gettimeofday()))
--~ print(os.date("%H:%M:%S",os.time()))
-os.arch = os.arch or function()
- local a = os.resultof("uname -m") or "linux"
- os.arch = function()
- return a
+-- no need for function anymore as we have more clever code and helpers now
+-- this metatable trickery might as well disappear
+
+os.resolvers = os.resolvers or { }
+
+local resolvers = os.resolvers
+
+local osmt = getmetatable(os) or { __index = function(t,k) t[k] = "unset" return "unset" end } -- maybe nil
+local osix = osmt.__index
+
+osmt.__index = function(t,k)
+ return (resolvers[k] or osix)(t,k)
+end
+
+setmetatable(os,osmt)
+
+if not os.setenv then
+
+ -- we still store them but they won't be seen in
+ -- child processes although we might pass them some day
+ -- using command concatination
+
+ local env, getenv = { }, os.getenv
+
+ function os.setenv(k,v)
+ env[k] = v
+ end
+
+ function os.getenv(k)
+ return env[k] or getenv(k)
end
- return a
+
end
-local platform
+-- we can use HOSTTYPE on some platforms
-function os.currentplatform(name,default)
- if not platform then
- local name = os.name or os.platform or name -- os.name is built in, os.platform is mine
- if not name then
- platform = default or "linux"
- elseif name == "windows" or name == "mswin" or name == "win32" or name == "msdos" then
- if os.getenv("PROCESSOR_ARCHITECTURE") == "AMD64" then
- platform = "mswin-64"
- else
- platform = "mswin"
- end
+local name, platform = os.name or "linux", os.getenv("MTX_PLATFORM") or ""
+
+local function guess()
+ local architecture = os.resultof("uname -m") or ""
+ if architecture ~= "" then
+ return architecture
+ end
+ architecture = os.getenv("HOSTTYPE") or ""
+ if architecture ~= "" then
+ return architecture
+ end
+ return os.resultof("echo $HOSTTYPE") or ""
+end
+
+if platform ~= "" then
+
+ os.platform = platform
+
+elseif os.type == "windows" then
+
+ -- we could set the variable directly, no function needed here
+
+ function os.resolvers.platform(t,k)
+ local platform, architecture = "", os.getenv("PROCESSOR_ARCHITECTURE") or ""
+ if find(architecture,"AMD64") then
+ platform = "mswin-64"
else
- local architecture = os.arch()
- if name == "linux" then
- if find(architecture,"x86_64") then
- platform = "linux-64"
- elseif find(architecture,"ppc") then
- platform = "linux-ppc"
- else
- platform = "linux"
- end
- elseif name == "macosx" then
- if find(architecture,"i386") then
- platform = "osx-intel"
- else
- platform = "osx-ppc"
- end
- elseif name == "sunos" then
- if find(architecture,"sparc") then
- platform = "solaris-sparc"
- else -- if architecture == 'i86pc'
- platform = "solaris-intel"
- end
- elseif name == "freebsd" then
- if find(architecture,"amd64") then
- platform = "freebsd-amd64"
- else
- platform = "freebsd"
- end
- else
- platform = default or name
- end
+ platform = "mswin"
end
- function os.currentplatform()
- return platform
+ os.setenv("MTX_PLATFORM",platform)
+ os.platform = platform
+ return platform
+ end
+
+elseif name == "linux" then
+
+ function os.resolvers.platform(t,k)
+ -- we sometims have HOSTTYPE set so let's check that first
+ local platform, architecture = "", os.getenv("HOSTTYPE") or os.resultof("uname -m") or ""
+ if find(architecture,"x86_64") then
+ platform = "linux-64"
+ elseif find(architecture,"ppc") then
+ platform = "linux-ppc"
+ else
+ platform = "linux"
+ end
+ os.setenv("MTX_PLATFORM",platform)
+ os.platform = platform
+ return platform
+ end
+
+elseif name == "macosx" then
+
+ --[[
+ Identifying the architecture of OSX is quite a mess and this
+ is the best we can come up with. For some reason $HOSTTYPE is
+ a kind of pseudo environment variable, not known to the current
+ environment. And yes, uname cannot be trusted either, so there
+ is a change that you end up with a 32 bit run on a 64 bit system.
+ Also, some proper 64 bit intel macs are too cheap (low-end) and
+ therefore not permitted to run the 64 bit kernel.
+ ]]--
+
+ function os.resolvers.platform(t,k)
+ -- local platform, architecture = "", os.getenv("HOSTTYPE") or ""
+ -- if architecture == "" then
+ -- architecture = os.resultof("echo $HOSTTYPE") or ""
+ -- end
+ local platform, architecture = "", os.resultof("echo $HOSTTYPE") or ""
+ if architecture == "" then
+ -- print("\nI have no clue what kind of OSX you're running so let's assume an 32 bit intel.\n")
+ platform = "osx-intel"
+ elseif find(architecture,"i386") then
+ platform = "osx-intel"
+ elseif find(architecture,"x86_64") then
+ platform = "osx-64"
+ else
+ platform = "osx-ppc"
end
+ os.setenv("MTX_PLATFORM",platform)
+ os.platform = platform
+ return platform
+ end
+
+elseif name == "sunos" then
+
+ function os.resolvers.platform(t,k)
+ local platform, architecture = "", os.resultof("uname -m") or ""
+ if find(architecture,"sparc") then
+ platform = "solaris-sparc"
+ else -- if architecture == 'i86pc'
+ platform = "solaris-intel"
+ end
+ os.setenv("MTX_PLATFORM",platform)
+ os.platform = platform
+ return platform
+ end
+
+elseif name == "freebsd" then
+
+ function os.resolvers.platform(t,k)
+ local platform, architecture = "", os.resultof("uname -m") or ""
+ if find(architecture,"amd64") then
+ platform = "freebsd-amd64"
+ else
+ platform = "freebsd"
+ end
+ os.setenv("MTX_PLATFORM",platform)
+ os.platform = platform
+ return platform
+ end
+
+elseif name == "kfreebsd" then
+
+ function os.resolvers.platform(t,k)
+ -- we sometims have HOSTTYPE set so let's check that first
+ local platform, architecture = "", os.getenv("HOSTTYPE") or os.resultof("uname -m") or ""
+ if find(architecture,"x86_64") then
+ platform = "kfreebsd-64"
+ else
+ platform = "kfreebsd-i386"
+ end
+ os.setenv("MTX_PLATFORM",platform)
+ os.platform = platform
+ return platform
+ end
+
+else
+
+ -- platform = "linux"
+ -- os.setenv("MTX_PLATFORM",platform)
+ -- os.platform = platform
+
+ function os.resolvers.platform(t,k)
+ local platform = "linux"
+ os.setenv("MTX_PLATFORM",platform)
+ os.platform = platform
+ return platform
+ end
+
+end
+
+-- beware, we set the randomseed
+
+-- from wikipedia: Version 4 UUIDs use a scheme relying only on random numbers. This algorithm sets the
+-- version number as well as two reserved bits. All other bits are set using a random or pseudorandom
+-- data source. Version 4 UUIDs have the form xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx with hexadecimal
+-- digits x and hexadecimal digits 8, 9, A, or B for y. e.g. f47ac10b-58cc-4372-a567-0e02b2c3d479.
+--
+-- as we don't call this function too often there is not so much risk on repetition
+
+local t = { 8, 9, "a", "b" }
+
+function os.uuid()
+ return format("%04x%04x-4%03x-%s%03x-%04x-%04x%04x%04x",
+ random(0xFFFF),random(0xFFFF),
+ random(0x0FFF),
+ t[ceil(random(4))] or 8,random(0x0FFF),
+ random(0xFFFF),
+ random(0xFFFF),random(0xFFFF),random(0xFFFF)
+ )
+end
+
+local d
+
+function os.timezone(delta)
+ d = d or tonumber(tonumber(os.date("%H")-os.date("!%H")))
+ if delta then
+ if d > 0 then
+ return format("+%02i:00",d)
+ else
+ return format("-%02i:00",-d)
+ end
+ else
+ return 1
end
- return platform
end
@@ -1685,7 +2083,7 @@ do -- create closure to overcome 200 locals limit
if not modules then modules = { } end modules ['l-file'] = {
version = 1.001,
- comment = "companion to luat-lib.tex",
+ comment = "companion to luat-lib.mkiv",
author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
copyright = "PRAGMA ADE / ConTeXt Development Team",
license = "see context related readme files"
@@ -1696,14 +2094,17 @@ if not modules then modules = { } end modules ['l-file'] = {
file = file or { }
local concat = table.concat
-local find, gmatch, match, gsub = string.find, string.gmatch, string.match, string.gsub
+local find, gmatch, match, gsub, sub, char = string.find, string.gmatch, string.match, string.gsub, string.sub, string.char
+local lpegmatch = lpeg.match
function file.removesuffix(filename)
return (gsub(filename,"%.[%a%d]+$",""))
end
function file.addsuffix(filename, suffix)
- if not find(filename,"%.[%a%d]+$") then
+ if not suffix or suffix == "" then
+ return filename
+ elseif not find(filename,"%.[%a%d]+$") then
return filename .. "." .. suffix
else
return filename
@@ -1726,20 +2127,39 @@ function file.nameonly(name)
return (gsub(match(name,"^.+[/\\](.-)$") or name,"%..*$",""))
end
-function file.extname(name)
- return match(name,"^.+%.([^/\\]-)$") or ""
+function file.extname(name,default)
+ return match(name,"^.+%.([^/\\]-)$") or default or ""
end
file.suffix = file.extname
---~ 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 = concat({...},"/")
+--~ pth = gsub(pth,"\\","/")
+--~ local a, b = match(pth,"^(.*://)(.*)$")
+--~ if a and b then
+--~ return a .. gsub(b,"//+","/")
+--~ end
+--~ a, b = match(pth,"^(//)(.*)$")
+--~ if a and b then
+--~ return a .. gsub(b,"//+","/")
+--~ end
+--~ return (gsub(pth,"//+","/"))
+--~ end
+
+local trick_1 = char(1)
+local trick_2 = "^" .. trick_1 .. "/+"
function file.join(...)
- local pth = concat({...},"/")
+ local lst = { ... }
+ local a, b = lst[1], lst[2]
+ if a == "" then
+ lst[1] = trick_1
+ elseif b and find(a,"^/+$") and find(b,"^/") then
+ lst[1] = ""
+ lst[2] = gsub(b,"^/+","")
+ end
+ local pth = concat(lst,"/")
pth = gsub(pth,"\\","/")
local a, b = match(pth,"^(.*://)(.*)$")
if a and b then
@@ -1749,17 +2169,28 @@ function file.join(...)
if a and b then
return a .. gsub(b,"//+","/")
end
+ pth = gsub(pth,trick_2,"")
return (gsub(pth,"//+","/"))
end
+--~ print(file.join("//","/y"))
+--~ print(file.join("/","/y"))
+--~ print(file.join("","/y"))
+--~ print(file.join("/x/","/y"))
+--~ 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.iswritable(name)
local a = lfs.attributes(name) or lfs.attributes(file.dirname(name,"."))
- return a and a.permissions:sub(2,2) == "w"
+ return a and sub(a.permissions,2,2) == "w"
end
function file.isreadable(name)
local a = lfs.attributes(name)
- return a and a.permissions:sub(1,1) == "r"
+ return a and sub(a.permissions,1,1) == "r"
end
file.is_readable = file.isreadable
@@ -1767,36 +2198,50 @@ file.is_writable = file.iswritable
-- todo: lpeg
-function file.split_path(str)
- local t = { }
- str = gsub(str,"\\", "/")
- str = gsub(str,"(%a):([;/])", "%1\001%2")
- for name in gmatch(str,"([^;:]+)") do
- if name ~= "" then
- t[#t+1] = gsub(name,"\001",":")
- end
- end
- return t
+--~ function file.split_path(str)
+--~ local t = { }
+--~ str = gsub(str,"\\", "/")
+--~ str = gsub(str,"(%a):([;/])", "%1\001%2")
+--~ for name in gmatch(str,"([^;:]+)") do
+--~ if name ~= "" then
+--~ t[#t+1] = gsub(name,"\001",":")
+--~ end
+--~ end
+--~ return t
+--~ end
+
+local checkedsplit = string.checkedsplit
+
+function file.split_path(str,separator)
+ str = gsub(str,"\\","/")
+ return checkedsplit(str,separator or io.pathseparator)
end
function file.join_path(tab)
return concat(tab,io.pathseparator) -- can have trailing //
end
+-- we can hash them weakly
+
function file.collapse_path(str)
- str = gsub(str,"/%./","/")
- local n, m = 1, 1
- while n > 0 or m > 0 do
- str, n = gsub(str,"[^/%.]+/%.%.$","")
- str, m = gsub(str,"[^/%.]+/%.%./","")
- end
- str = gsub(str,"([^/])/$","%1")
- str = gsub(str,"^%./","")
- str = gsub(str,"/%.$","")
+ str = gsub(str,"\\","/")
+ if find(str,"/") then
+ str = gsub(str,"^%./",(gsub(lfs.currentdir(),"\\","/")) .. "/") -- ./xx in qualified
+ str = gsub(str,"/%./","/")
+ local n, m = 1, 1
+ while n > 0 or m > 0 do
+ str, n = gsub(str,"[^/%.]+/%.%.$","")
+ str, m = gsub(str,"[^/%.]+/%.%./","")
+ end
+ str = gsub(str,"([^/])/$","%1")
+ -- str = gsub(str,"^%./","") -- ./xx in qualified
+ str = gsub(str,"/%.$","")
+ end
if str == "" then str = "." end
return str
end
+--~ print(file.collapse_path("/a"))
--~ print(file.collapse_path("a/./b/.."))
--~ print(file.collapse_path("a/aa/../b/bb"))
--~ print(file.collapse_path("a/../.."))
@@ -1826,27 +2271,27 @@ end
--~ local pattern = (noslashes^0 * slashes)^0 * (noperiod^1 * period)^1 * lpeg.C(noperiod^1) * -1
--~ function file.extname(name)
---~ return pattern:match(name) or ""
+--~ return lpegmatch(pattern,name) or ""
--~ end
--~ local pattern = lpeg.Cs(((period * noperiod^1 * -1)/"" + 1)^1)
--~ function file.removesuffix(name)
---~ return pattern:match(name)
+--~ return lpegmatch(pattern,name)
--~ end
--~ local pattern = (noslashes^0 * slashes)^1 * lpeg.C(noslashes^1) * -1
--~ function file.basename(name)
---~ return pattern:match(name) or name
+--~ return lpegmatch(pattern,name) or name
--~ end
--~ local pattern = (noslashes^0 * slashes)^1 * lpeg.Cp() * noslashes^1 * -1
--~ function file.dirname(name)
---~ local p = pattern:match(name)
+--~ local p = lpegmatch(pattern,name)
--~ if p then
---~ return name:sub(1,p-2)
+--~ return sub(name,1,p-2)
--~ else
--~ return ""
--~ end
@@ -1855,7 +2300,7 @@ end
--~ local pattern = (noslashes^0 * slashes)^0 * (noperiod^1 * period)^1 * lpeg.Cp() * noperiod^1 * -1
--~ function file.addsuffix(name, suffix)
---~ local p = pattern:match(name)
+--~ local p = lpegmatch(pattern,name)
--~ if p then
--~ return name
--~ else
@@ -1866,9 +2311,9 @@ end
--~ local pattern = (noslashes^0 * slashes)^0 * (noperiod^1 * period)^1 * lpeg.Cp() * noperiod^1 * -1
--~ function file.replacesuffix(name,suffix)
---~ local p = pattern:match(name)
+--~ local p = lpegmatch(pattern,name)
--~ if p then
---~ return name:sub(1,p-2) .. "." .. suffix
+--~ return sub(name,1,p-2) .. "." .. suffix
--~ else
--~ return name .. "." .. suffix
--~ end
@@ -1877,11 +2322,11 @@ end
--~ local pattern = (noslashes^0 * slashes)^0 * lpeg.Cp() * ((noperiod^1 * period)^1 * lpeg.Cp() + lpeg.P(true)) * noperiod^1 * -1
--~ function file.nameonly(name)
---~ local a, b = pattern:match(name)
+--~ local a, b = lpegmatch(pattern,name)
--~ if b then
---~ return name:sub(a,b-2)
+--~ return sub(name,a,b-2)
--~ elseif a then
---~ return name:sub(a)
+--~ return sub(name,a)
--~ else
--~ return name
--~ end
@@ -1915,11 +2360,11 @@ local rootbased = lpeg.P("/") + letter*lpeg.P(":")
-- ./name ../name /name c: :// name/name
function file.is_qualified_path(filename)
- return qualified:match(filename)
+ return lpegmatch(qualified,filename) ~= nil
end
function file.is_rootbased_path(filename)
- return rootbased:match(filename)
+ return lpegmatch(rootbased,filename) ~= nil
end
local slash = lpeg.S("\\/")
@@ -1932,16 +2377,25 @@ local base = lpeg.C((1-suffix)^0)
local pattern = (drive + lpeg.Cc("")) * (path + lpeg.Cc("")) * (base + lpeg.Cc("")) * (suffix + lpeg.Cc(""))
function file.splitname(str) -- returns drive, path, base, suffix
- return pattern:match(str)
+ return lpegmatch(pattern,str)
end
--- function test(t) for k, v in pairs(t) do print(v, "=>", file.splitname(v)) end end
+-- function test(t) for k, v in next, t do print(v, "=>", file.splitname(v)) end end
--
-- test { "c:", "c:/aa", "c:/aa/bb", "c:/aa/bb/cc", "c:/aa/bb/cc.dd", "c:/aa/bb/cc.dd.ee" }
-- test { "c:", "c:aa", "c:aa/bb", "c:aa/bb/cc", "c:aa/bb/cc.dd", "c:aa/bb/cc.dd.ee" }
-- test { "/aa", "/aa/bb", "/aa/bb/cc", "/aa/bb/cc.dd", "/aa/bb/cc.dd.ee" }
-- test { "aa", "aa/bb", "aa/bb/cc", "aa/bb/cc.dd", "aa/bb/cc.dd.ee" }
+--~ -- todo:
+--~
+--~ if os.type == "windows" then
+--~ local currentdir = lfs.currentdir
+--~ function lfs.currentdir()
+--~ return (gsub(currentdir(),"\\","/"))
+--~ end
+--~ end
+
end -- of closure
@@ -2006,7 +2460,7 @@ end
function file.loadchecksum(name)
if md5 then
local data = io.loaddata(name .. ".md5")
- return data and data:gsub("%s","")
+ return data and (gsub(data,"%s",""))
end
return nil
end
@@ -2025,19 +2479,168 @@ end -- of closure
do -- create closure to overcome 200 locals limit
+if not modules then modules = { } end modules ['l-url'] = {
+ version = 1.001,
+ comment = "companion to luat-lib.mkiv",
+ author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
+ copyright = "PRAGMA ADE / ConTeXt Development Team",
+ license = "see context related readme files"
+}
+
+local char, gmatch, gsub = string.char, string.gmatch, string.gsub
+local tonumber, type = tonumber, type
+local lpegmatch = lpeg.match
+
+-- 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
+
+url = url or { }
+
+local function tochar(s)
+ return 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 plus = lpeg.P("+")
+local escaped = (plus / " ") + (percent * lpeg.C(hexdigit * hexdigit) / tochar)
+
+-- we assume schemes with more than 1 character (in order to avoid problems with windows disks)
+
+local scheme = lpeg.Cs((escaped+(1-colon-slash-qmark-hash))^2) * 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)
+
+-- todo: reconsider Ct as we can as well have five return values (saves a table)
+-- so we can have two parsers, one with and one without
+
+function url.split(str)
+ return (type(str) == "string" and lpegmatch(parser,str)) or str
+end
+
+-- todo: cache them
+
+function url.hashed(str)
+ local s = url.split(str)
+ local somescheme = s[1] ~= ""
+ return {
+ scheme = (somescheme and s[1]) or "file",
+ authority = s[2],
+ path = s[3],
+ query = s[4],
+ fragment = s[5],
+ original = str,
+ noscheme = not somescheme,
+ }
+end
+
+function url.hasscheme(str)
+ return url.split(str)[1] ~= ""
+end
+
+function url.addscheme(str,scheme)
+ return (url.hasscheme(str) and str) or ((scheme or "file:///") .. str)
+end
+
+function url.construct(hash)
+ local fullurl = hash.sheme .. "://".. hash.authority .. hash.path
+ if hash.query then
+ fullurl = fullurl .. "?".. hash.query
+ end
+ if hash.fragment then
+ fullurl = fullurl .. "?".. hash.fragment
+ end
+ return fullurl
+end
+
+function url.filename(filename)
+ local t = url.hashed(filename)
+ return (t.scheme == "file" and (gsub(t.path,"^/([a-zA-Z])([:|])/)","%1:"))) or filename
+end
+
+function url.query(str)
+ if type(str) == "string" then
+ local t = { }
+ for k, v in gmatch(str,"([^&=]*)=([^&=]*)") 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")
+
+
+end -- of closure
+
+do -- create closure to overcome 200 locals limit
+
if not modules then modules = { } end modules ['l-dir'] = {
version = 1.001,
- comment = "companion to luat-lib.tex",
+ comment = "companion to luat-lib.mkiv",
author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
copyright = "PRAGMA ADE / ConTeXt Development Team",
license = "see context related readme files"
}
+-- dir.expand_name will be merged with cleanpath and collapsepath
+
local type = type
-local find, gmatch = string.find, string.gmatch
+local find, gmatch, match, gsub = string.find, string.gmatch, string.match, string.gsub
+local lpegmatch = lpeg.match
dir = dir or { }
+-- handy
+
+function dir.current()
+ return (gsub(lfs.currentdir(),"\\","/"))
+end
+
-- optimizing for no string.find (*) does not save time
local attributes = lfs.attributes
@@ -2068,6 +2671,35 @@ end
dir.glob_pattern = glob_pattern
+local function collect_pattern(path,patt,recurse,result)
+ local ok, scanner
+ result = result or { }
+ 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 find(path,"/$") then path = path .. '/' end
+ for name in scanner do
+ local full = path .. name
+ local attr = attributes(full)
+ local mode = attr.mode
+ if mode == 'file' then
+ if find(full,patt) then
+ result[name] = attr
+ end
+ elseif recurse and (mode == "directory") and (name ~= '.') and (name ~= "..") then
+ attr.list = collect_pattern(full,patt,recurse)
+ result[name] = attr
+ end
+ end
+ end
+ return result
+end
+
+dir.collect_pattern = collect_pattern
+
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 {
@@ -2087,29 +2719,48 @@ local filter = Cs ( (
)^0 )
local function glob(str,t)
- if type(str) == "table" then
- local t = t or { }
- for s=1,#str do
- glob(str[s],t)
+ if type(t) == "function" then
+ if type(str) == "table" then
+ for s=1,#str do
+ glob(str[s],t)
+ end
+ elseif lfs.isfile(str) then
+ t(str)
+ else
+ local split = lpegmatch(pattern,str)
+ if split then
+ local root, path, base = split[1], split[2], split[3]
+ local recurse = find(base,"%*%*")
+ local start = root .. path
+ local result = lpegmatch(filter,start .. base)
+ glob_pattern(start,result,recurse,t)
+ end
end
- return t
- elseif lfs.isfile(str) then
- local t = t or { }
- t[#t+1] = str
- return t
else
- local split = pattern:match(str)
- if split then
+ if type(str) == "table" 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 = find(base,"%*%*")
- local start = root .. path
- local result = filter:match(start .. base)
- glob_pattern(start,result,recurse,action)
+ for s=1,#str do
+ glob(str[s],t)
+ end
+ return t
+ elseif lfs.isfile(str) then
+ local t = t or { }
+ t[#t+1] = str
return t
else
- return { }
+ local split = lpegmatch(pattern,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 = find(base,"%*%*")
+ local start = root .. path
+ local result = lpegmatch(filter,start .. base)
+ glob_pattern(start,result,recurse,action)
+ return t
+ else
+ return { }
+ end
end
end
end
@@ -2171,11 +2822,12 @@ end
local make_indeed = true -- false
-if string.find(os.getenv("PATH"),";") then
+if string.find(os.getenv("PATH"),";") then -- os.type == "windows"
function dir.mkdirs(...)
- local str, pth = "", ""
- for _, s in ipairs({...}) do
+ local str, pth, t = "", "", { ... }
+ for i=1,#t do
+ local s = t[i]
if s ~= "" then
if str ~= "" then
str = str .. "/" .. s
@@ -2186,13 +2838,13 @@ if string.find(os.getenv("PATH"),";") then
end
local first, middle, last
local drive = false
- first, middle, last = str:match("^(//)(//*)(.*)$")
+ first, middle, last = match(str,"^(//)(//*)(.*)$")
if first then
-- empty network path == local path
else
- first, last = str:match("^(//)/*(.-)$")
+ first, last = match(str,"^(//)/*(.-)$")
if first then
- middle, last = str:match("([^/]+)/+(.-)$")
+ middle, last = match(str,"([^/]+)/+(.-)$")
if middle then
pth = "//" .. middle
else
@@ -2200,11 +2852,11 @@ if string.find(os.getenv("PATH"),";") then
last = ""
end
else
- first, middle, last = str:match("^([a-zA-Z]:)(/*)(.-)$")
+ first, middle, last = match(str,"^([a-zA-Z]:)(/*)(.-)$")
if first then
pth, drive = first .. middle, true
else
- middle, last = str:match("^(/*)(.-)$")
+ middle, last = match(str,"^(/*)(.-)$")
if not middle then
last = str
end
@@ -2238,34 +2890,31 @@ if string.find(os.getenv("PATH"),";") then
--~ print(dir.mkdirs("///a/b/c"))
--~ print(dir.mkdirs("a/bbb//ccc/"))
- function dir.expand_name(str)
- local first, nothing, last = str:match("^(//)(//*)(.*)$")
+ function dir.expand_name(str) -- will be merged with cleanpath and collapsepath
+ local first, nothing, last = match(str,"^(//)(//*)(.*)$")
if first then
- first = lfs.currentdir() .. "/"
- first = first:gsub("\\","/")
+ first = dir.current() .. "/"
end
if not first then
- first, last = str:match("^(//)/*(.*)$")
+ first, last = match(str,"^(//)/*(.*)$")
end
if not first then
- first, last = str:match("^([a-zA-Z]:)(.*)$")
+ first, last = match(str,"^([a-zA-Z]:)(.*)$")
if first and not find(last,"^/") then
local d = lfs.currentdir()
if lfs.chdir(first) then
- first = lfs.currentdir()
- first = first:gsub("\\","/")
+ first = dir.current()
end
lfs.chdir(d)
end
end
if not first then
- first, last = lfs.currentdir(), str
- first = first:gsub("\\","/")
+ first, last = dir.current(), str
end
- last = last:gsub("//","/")
- last = last:gsub("/%./","/")
- last = last:gsub("^/*","")
- first = first:gsub("/*$","")
+ last = gsub(last,"//","/")
+ last = gsub(last,"/%./","/")
+ last = gsub(last,"^/*","")
+ first = gsub(first,"/*$","")
if last == "" then
return first
else
@@ -2276,8 +2925,9 @@ if string.find(os.getenv("PATH"),";") then
else
function dir.mkdirs(...)
- local str, pth = "", ""
- for _, s in ipairs({...}) do
+ local str, pth, t = "", "", { ... }
+ for i=1,#t do
+ local s = t[i]
if s ~= "" then
if str ~= "" then
str = str .. "/" .. s
@@ -2286,7 +2936,7 @@ else
end
end
end
- str = str:gsub("/+","/")
+ str = gsub(str,"/+","/")
if find(str,"^/") then
pth = "/"
for s in gmatch(str,"[^/]+") do
@@ -2320,12 +2970,12 @@ else
--~ print(dir.mkdirs("///a/b/c"))
--~ print(dir.mkdirs("a/bbb//ccc/"))
- function dir.expand_name(str)
+ function dir.expand_name(str) -- will be merged with cleanpath and collapsepath
if not find(str,"^/") then
str = lfs.currentdir() .. "/" .. str
end
- str = str:gsub("//","/")
- str = str:gsub("/%./","/")
+ str = gsub(str,"//","/")
+ str = gsub(str,"/%./","/")
return str
end
@@ -2340,7 +2990,7 @@ do -- create closure to overcome 200 locals limit
if not modules then modules = { } end modules ['l-boolean'] = {
version = 1.001,
- comment = "companion to luat-lib.tex",
+ comment = "companion to luat-lib.mkiv",
author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
copyright = "PRAGMA ADE / ConTeXt Development Team",
license = "see context related readme files"
@@ -2401,7 +3051,7 @@ do -- create closure to overcome 200 locals limit
if not modules then modules = { } end modules ['l-math'] = {
version = 1.001,
- comment = "companion to luat-lib.tex",
+ comment = "companion to luat-lib.mkiv",
author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
copyright = "PRAGMA ADE / ConTeXt Development Team",
license = "see context related readme files"
@@ -2448,7 +3098,7 @@ do -- create closure to overcome 200 locals limit
if not modules then modules = { } end modules ['l-utils'] = {
version = 1.001,
- comment = "companion to luat-lib.tex",
+ comment = "companion to luat-lib.mkiv",
author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
copyright = "PRAGMA ADE / ConTeXt Development Team",
license = "see context related readme files"
@@ -2456,6 +3106,10 @@ if not modules then modules = { } end modules ['l-utils'] = {
-- hm, quite unreadable
+local gsub = string.gsub
+local concat = table.concat
+local type, next = type, next
+
if not utils then utils = { } end
if not utils.merger then utils.merger = { } end
if not utils.lua then utils.lua = { } end
@@ -2493,7 +3147,7 @@ function utils.merger._self_load_(name)
end
if data and utils.merger.strip_comment then
-- saves some 20K
- data = data:gsub("%-%-~[^\n\r]*[\r\n]", "")
+ data = gsub(data,"%-%-~[^\n\r]*[\r\n]", "")
end
return data or ""
end
@@ -2511,7 +3165,7 @@ end
function utils.merger._self_swap_(data,code)
if data ~= "" then
- return (data:gsub(utils.merger.pattern, function(s)
+ return (gsub(data,utils.merger.pattern, function(s)
return "\n\n" .. "-- "..utils.merger.m_begin .. "\n" .. code .. "\n" .. "-- "..utils.merger.m_end .. "\n\n"
end, 1))
else
@@ -2521,8 +3175,8 @@ end
--~ stripper:
--~
---~ data = string.gsub(data,"%-%-~[^\n]*\n","")
---~ data = string.gsub(data,"\n\n+","\n")
+--~ data = gsub(data,"%-%-~[^\n]*\n","")
+--~ data = gsub(data,"\n\n+","\n")
function utils.merger._self_libs_(libs,list)
local result, f, frozen = { }, nil, false
@@ -2530,9 +3184,10 @@ function utils.merger._self_libs_(libs,list)
if type(libs) == 'string' then libs = { libs } end
if type(list) == 'string' then list = { list } end
local foundpath = nil
- for _, lib in ipairs(libs) do
- for _, pth in ipairs(list) do
- pth = string.gsub(pth,"\\","/") -- file.clean_path
+ for i=1,#libs do
+ local lib = libs[i]
+ for j=1,#list do
+ local pth = gsub(list[j],"\\","/") -- file.clean_path
utils.report("checking library path %s",pth)
local name = pth .. "/" .. lib
if lfs.isfile(name) then
@@ -2544,7 +3199,8 @@ function utils.merger._self_libs_(libs,list)
if foundpath then
utils.report("using library path %s",foundpath)
local right, wrong = { }, { }
- for _, lib in ipairs(libs) do
+ for i=1,#libs do
+ local lib = libs[i]
local fullname = foundpath .. "/" .. lib
if lfs.isfile(fullname) then
-- right[#right+1] = lib
@@ -2558,15 +3214,15 @@ function utils.merger._self_libs_(libs,list)
end
end
if #right > 0 then
- utils.report("merged libraries: %s",table.concat(right," "))
+ utils.report("merged libraries: %s",concat(right," "))
end
if #wrong > 0 then
- utils.report("skipped libraries: %s",table.concat(wrong," "))
+ utils.report("skipped libraries: %s",concat(wrong," "))
end
else
utils.report("no valid library path found")
end
- return table.concat(result, "\n\n")
+ return concat(result, "\n\n")
end
function utils.merger.selfcreate(libs,list,target)
@@ -2624,16 +3280,28 @@ do -- create closure to overcome 200 locals limit
if not modules then modules = { } end modules ['l-aux'] = {
version = 1.001,
- comment = "companion to luat-lib.tex",
+ comment = "companion to luat-lib.mkiv",
author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
copyright = "PRAGMA ADE / ConTeXt Development Team",
license = "see context related readme files"
}
+-- for inline, no store split : for s in string.gmatch(str,",* *([^,]+)") do .. end
+
aux = aux or { }
local concat, format, gmatch = table.concat, string.format, string.gmatch
local tostring, type = tostring, type
+local lpegmatch = lpeg.match
+
+local P, R, V = lpeg.P, lpeg.R, lpeg.V
+
+local escape, left, right = P("\\"), P('{'), P('}')
+
+lpeg.patterns.balanced = P {
+ [1] = ((escape * (left+right)) + (1 - (left+right)) + V(2))^0,
+ [2] = left * V(1) * right
+}
local space = lpeg.P(' ')
local equal = lpeg.P("=")
@@ -2641,7 +3309,7 @@ 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 nested = lpeg.P { lbrace * (nobrace + lpeg.V(1))^0 * rbrace }
local spaces = space^0
local value = lpeg.P(lbrace * lpeg.C((nobrace + nested)^0) * rbrace) + lpeg.C((nested + (1-comma))^0)
@@ -2679,13 +3347,13 @@ function aux.make_settings_to_hash_pattern(set,how)
end
end
-function aux.settings_to_hash(str)
+function aux.settings_to_hash(str,existing)
if str and str ~= "" then
- hash = { }
+ hash = existing or { }
if moretolerant then
- pattern_b_s:match(str)
+ lpegmatch(pattern_b_s,str)
else
- pattern_a_s:match(str)
+ lpegmatch(pattern_a_s,str)
end
return hash
else
@@ -2693,39 +3361,41 @@ function aux.settings_to_hash(str)
end
end
-function aux.settings_to_hash_tolerant(str)
+function aux.settings_to_hash_tolerant(str,existing)
if str and str ~= "" then
- hash = { }
- pattern_b_s:match(str)
+ hash = existing or { }
+ lpegmatch(pattern_b_s,str)
return hash
else
return { }
end
end
-function aux.settings_to_hash_strict(str)
+function aux.settings_to_hash_strict(str,existing)
if str and str ~= "" then
- hash = { }
- pattern_c_s:match(str)
+ hash = existing or { }
+ lpegmatch(pattern_c_s,str)
return next(hash) and hash
else
return nil
end
end
-local seperator = comma * space^0
+local separator = 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)
+local pattern = lpeg.Ct(value*(separator*value)^0)
-- "aap, {noot}, mies" : outer {} removes, leading spaces ignored
aux.settings_to_array_pattern = pattern
+-- we could use a weak table as cache
+
function aux.settings_to_array(str)
if not str or str == "" then
return { }
else
- return pattern:match(str)
+ return lpegmatch(pattern,str)
end
end
@@ -2734,10 +3404,10 @@ local function set(t,v)
end
local value = lpeg.P(lpeg.Carg(1)*value) / set
-local pattern = value*(seperator*value)^0 * lpeg.Carg(1)
+local pattern = value*(separator*value)^0 * lpeg.Carg(1)
function aux.add_settings_to_array(t,str)
- return pattern:match(str, nil, t)
+ return lpegmatch(pattern,str,nil,t)
end
function aux.hash_to_string(h,separator,yes,no,strict,omit)
@@ -2785,6 +3455,13 @@ function aux.settings_to_set(str,t)
return t
end
+local value = lbrace * lpeg.C((nobrace + nested)^0) * rbrace
+local pattern = lpeg.Ct((space + value)^0)
+
+function aux.arguments_to_table(str)
+ return lpegmatch(pattern,str)
+end
+
-- temporary here
function aux.getparameters(self,class,parentclass,settings)
@@ -2793,36 +3470,31 @@ function aux.getparameters(self,class,parentclass,settings)
sc = table.clone(self[parent])
self[class] = sc
end
- aux.add_settings_to_array(sc, settings)
+ aux.settings_to_hash(settings,sc)
end
-- temporary here
-local digit = lpeg.R("09")
-local period = lpeg.P(".")
-local zero = lpeg.P("0")
-
---~ local finish = lpeg.P(-1)
---~ local nodigit = (1-digit) + finish
---~ local case_1 = (period * zero^1 * #nodigit)/"" -- .000
---~ local case_2 = (period * (1-(zero^0/"") * #nodigit)^1 * (zero^0/"") * nodigit) -- .010 .10 .100100
-
+local digit = lpeg.R("09")
+local period = lpeg.P(".")
+local zero = lpeg.P("0")
local trailingzeros = zero^0 * -digit -- suggested by Roberto R
-local case_1 = period * trailingzeros / ""
-local case_2 = period * (digit - trailingzeros)^1 * (trailingzeros / "")
-
-local number = digit^1 * (case_1 + case_2)
-local stripper = lpeg.Cs((number + 1)^0)
+local case_1 = period * trailingzeros / ""
+local case_2 = period * (digit - trailingzeros)^1 * (trailingzeros / "")
+local number = digit^1 * (case_1 + case_2)
+local stripper = lpeg.Cs((number + 1)^0)
--~ local sample = "bla 11.00 bla 11 bla 0.1100 bla 1.00100 bla 0.00 bla 0.001 bla 1.1100 bla 0.100100100 bla 0.00100100100"
--~ collectgarbage("collect")
--~ str = string.rep(sample,10000)
--~ local ts = os.clock()
---~ stripper:match(str)
---~ print(#str, os.clock()-ts, stripper:match(sample))
+--~ lpegmatch(stripper,str)
+--~ print(#str, os.clock()-ts, lpegmatch(stripper,sample))
+
+lpeg.patterns.strip_zeros = stripper
function aux.strip_zeros(str)
- return stripper:match(str)
+ return lpegmatch(stripper,str)
end
function aux.definetable(target) -- defines undefined tables
@@ -2846,6 +3518,375 @@ function aux.accesstable(target)
return t
end
+--~ function string.commaseparated(str)
+--~ return gmatch(str,"([^,%s]+)")
+--~ end
+
+-- as we use this a lot ...
+
+--~ function aux.cachefunction(action,weak)
+--~ local cache = { }
+--~ if weak then
+--~ setmetatable(cache, { __mode = "kv" } )
+--~ end
+--~ local function reminder(str)
+--~ local found = cache[str]
+--~ if not found then
+--~ found = action(str)
+--~ cache[str] = found
+--~ end
+--~ return found
+--~ end
+--~ return reminder, cache
+--~ end
+
+
+end -- of closure
+
+do -- create closure to overcome 200 locals limit
+
+if not modules then modules = { } end modules ['trac-tra'] = {
+ version = 1.001,
+ comment = "companion to trac-tra.mkiv",
+ author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
+ copyright = "PRAGMA ADE / ConTeXt Development Team",
+ license = "see context related readme files"
+}
+
+-- the <anonymous> tag is kind of generic and used for functions that are not
+-- bound to a variable, like node.new, node.copy etc (contrary to for instance
+-- node.has_attribute which is bound to a has_attribute local variable in mkiv)
+
+local debug = require "debug"
+
+local getinfo = debug.getinfo
+local type, next = type, next
+local concat = table.concat
+local format, find, lower, gmatch, gsub = string.format, string.find, string.lower, string.gmatch, string.gsub
+
+debugger = debugger or { }
+
+local counters = { }
+local names = { }
+
+-- one
+
+local function hook()
+ local f = getinfo(2,"f").func
+ local n = getinfo(2,"Sn")
+-- if n.what == "C" and n.name then print (n.namewhat .. ': ' .. n.name) end
+ if f then
+ local cf = counters[f]
+ if cf == nil then
+ counters[f] = 1
+ names[f] = n
+ else
+ counters[f] = cf + 1
+ end
+ end
+end
+local function getname(func)
+ local n = names[func]
+ if n then
+ if n.what == "C" then
+ return n.name or '<anonymous>'
+ 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 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
+ -- table.sort(counters)
+ for func, count in next, counters do
+ if count > threshold then
+ local name = getname(func)
+ if not find(name,"for generator") then
+ printer(format("%8i %s", count, name))
+ total = total + count
+ end
+ end
+ grandtotal = grandtotal + count
+ functions = functions + 1
+ end
+ printer(format("functions: %s, total: %s, grand total: %s, threshold: %s\n", functions, total, grandtotal, threshold))
+end
+
+-- two
+
+--~ local function hook()
+--~ local n = getinfo(2)
+--~ if n.what=="C" and not n.name then
+--~ local f = tostring(debug.traceback())
+--~ local cf = counters[f]
+--~ if cf == nil then
+--~ counters[f] = 1
+--~ names[f] = n
+--~ else
+--~ counters[f] = cf + 1
+--~ end
+--~ 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
+--~ -- table.sort(counters)
+--~ for func, count in next, counters do
+--~ if count > threshold then
+--~ printer(format("%8i %s", count, func))
+--~ total = total + count
+--~ end
+--~ grandtotal = grandtotal + count
+--~ functions = functions + 1
+--~ end
+--~ printer(format("functions: %s, total: %s, grand total: %s, threshold: %s\n", functions, total, grandtotal, threshold))
+--~ end
+
+-- rest
+
+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
+
+--~ 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)
+
+setters = setters or { }
+setters.data = setters.data or { }
+
+--~ local function set(t,what,value)
+--~ local data, done = t.data, t.done
+--~ if type(what) == "string" then
+--~ what = aux.settings_to_array(what) -- inefficient but ok
+--~ end
+--~ for i=1,#what do
+--~ local w = what[i]
+--~ for d, f in next, data do
+--~ if done[d] then
+--~ -- prevent recursion due to wildcards
+--~ elseif find(d,w) then
+--~ done[d] = true
+--~ for i=1,#f do
+--~ f[i](value)
+--~ end
+--~ end
+--~ end
+--~ end
+--~ end
+
+local function set(t,what,value)
+ local data, done = t.data, t.done
+ if type(what) == "string" then
+ what = aux.settings_to_hash(what) -- inefficient but ok
+ end
+ for w, v in next, what do
+ if v == "" then
+ v = value
+ else
+ v = toboolean(v)
+ end
+ for d, f in next, data do
+ if done[d] then
+ -- prevent recursion due to wildcards
+ elseif find(d,w) then
+ done[d] = true
+ for i=1,#f do
+ f[i](v)
+ end
+ end
+ end
+ end
+end
+
+local function reset(t)
+ for d, f in next, t.data do
+ for i=1,#f do
+ f[i](false)
+ end
+ end
+end
+
+local function enable(t,what)
+ set(t,what,true)
+end
+
+local function disable(t,what)
+ local data = t.data
+ if not what or what == "" then
+ t.done = { }
+ reset(t)
+ else
+ set(t,what,false)
+ end
+end
+
+function setters.register(t,what,...)
+ local data = t.data
+ what = lower(what)
+ local w = data[what]
+ if not w then
+ w = { }
+ data[what] = w
+ end
+ for _, fnc in next, { ... } do
+ local typ = type(fnc)
+ if typ == "function" then
+ w[#w+1] = fnc
+ elseif typ == "string" then
+ w[#w+1] = function(value) set(t,fnc,value,nesting) end
+ end
+ end
+end
+
+function setters.enable(t,what)
+ local e = t.enable
+ t.enable, t.done = enable, { }
+ enable(t,string.simpleesc(tostring(what)))
+ t.enable, t.done = e, { }
+end
+
+function setters.disable(t,what)
+ local e = t.disable
+ t.disable, t.done = disable, { }
+ disable(t,string.simpleesc(tostring(what)))
+ t.disable, t.done = e, { }
+end
+
+function setters.reset(t)
+ t.done = { }
+ reset(t)
+end
+
+function setters.list(t) -- pattern
+ local list = table.sortedkeys(t.data)
+ local user, system = { }, { }
+ for l=1,#list do
+ local what = list[l]
+ if find(what,"^%*") then
+ system[#system+1] = what
+ else
+ user[#user+1] = what
+ end
+ end
+ return user, system
+end
+
+function setters.show(t)
+ commands.writestatus("","")
+ local list = setters.list(t)
+ for k=1,#list do
+ commands.writestatus(t.name,list[k])
+ end
+ commands.writestatus("","")
+end
+
+-- we could have used a bit of oo and the trackers:enable syntax but
+-- there is already a lot of code around using the singular tracker
+
+-- we could make this into a module
+
+function setters.new(name)
+ local t
+ t = {
+ data = { },
+ name = name,
+ enable = function(...) setters.enable (t,...) end,
+ disable = function(...) setters.disable (t,...) end,
+ register = function(...) setters.register(t,...) end,
+ list = function(...) setters.list (t,...) end,
+ show = function(...) setters.show (t,...) end,
+ }
+ setters.data[name] = t
+ return t
+end
+
+trackers = setters.new("trackers")
+directives = setters.new("directives")
+experiments = setters.new("experiments")
+
+-- nice trick: we overload two of the directives related functions with variants that
+-- do tracing (itself using a tracker) .. proof of concept
+
+local trace_directives = false local trace_directives = false trackers.register("system.directives", function(v) trace_directives = v end)
+local trace_experiments = false local trace_experiments = false trackers.register("system.experiments", function(v) trace_experiments = v end)
+
+local e = directives.enable
+local d = directives.disable
+
+function directives.enable(...)
+ commands.writestatus("directives","enabling: %s",concat({...}," "))
+ e(...)
+end
+
+function directives.disable(...)
+ commands.writestatus("directives","disabling: %s",concat({...}," "))
+ d(...)
+end
+
+local e = experiments.enable
+local d = experiments.disable
+
+function experiments.enable(...)
+ commands.writestatus("experiments","enabling: %s",concat({...}," "))
+ e(...)
+end
+
+function experiments.disable(...)
+ commands.writestatus("experiments","disabling: %s",concat({...}," "))
+ d(...)
+end
+
+-- a useful example
+
+directives.register("system.nostatistics", function(v)
+ statistics.enable = not v
+end)
+
+
end -- of closure
@@ -2859,6 +3900,12 @@ if not modules then modules = { } end modules ['lxml-tab'] = {
license = "see context related readme files"
}
+-- this module needs a cleanup: check latest lpeg, passing args, (sub)grammar, etc etc
+-- stripping spaces from e.g. cont-en.xml saves .2 sec runtime so it's not worth the
+-- trouble
+
+local trace_entities = false trackers.register("xml.entities", function(v) trace_entities = v end)
+
--[[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
@@ -2866,18 +3913,6 @@ parent access; a first version used different trickery but was less optimized to
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>
@@ -2888,26 +3923,11 @@ xml = xml or { }
--~ local xml = xml
local concat, remove, insert = table.concat, table.remove, table.insert
-local type, next, setmetatable = type, next, setmetatable
-local format, lower, find = string.format, string.lower, string.find
-
---[[ldx--
-<p>This module can be used stand alone but also inside <l n='mkiv'/> in
-which case it hooks into the tracker code. Therefore we provide a few
-functions that set the tracers.</p>
---ldx]]--
-
-local trace_remap = false
-
-if trackers then
- trackers.register("xml.remap", function(v) trace_remap = v end)
-end
-
-function xml.settrace(str,value)
- if str == "remap" then
- trace_remap = value or false
- end
-end
+local type, next, setmetatable, getmetatable, tonumber = type, next, setmetatable, getmetatable, tonumber
+local format, lower, find, match, gsub = string.format, string.lower, string.find, string.match, string.gsub
+local utfchar = unicode.utf8.char
+local lpegmatch = lpeg.match
+local P, S, R, C, V, C, Cs = lpeg.P, lpeg.S, lpeg.R, lpeg.C, lpeg.V, lpeg.C, lpeg.Cs
--[[ldx--
<p>First a hack to enable namespace resolving. A namespace is characterized by
@@ -2919,7 +3939,7 @@ much cleaner.</p>
xml.xmlns = xml.xmlns or { }
-local check = lpeg.P(false)
+local check = P(false)
local parse = check
--[[ldx--
@@ -2932,8 +3952,8 @@ xml.registerns("mml","mathml")
--ldx]]--
function xml.registerns(namespace, pattern) -- pattern can be an lpeg
- check = check + lpeg.C(lpeg.P(lower(pattern))) / namespace
- parse = lpeg.P { lpeg.P(check) + 1 * lpeg.V(1) }
+ check = check + C(P(lower(pattern))) / namespace
+ parse = P { P(check) + 1 * V(1) }
end
--[[ldx--
@@ -2947,7 +3967,7 @@ xml.checkns("m","http://www.w3.org/mathml")
--ldx]]--
function xml.checkns(namespace,url)
- local ns = parse:match(lower(url))
+ local ns = lpegmatch(parse,lower(url))
if ns and namespace ~= ns then
xml.xmlns[namespace] = ns
end
@@ -2965,7 +3985,7 @@ This returns <t>mml</t>.
--ldx]]--
function xml.resolvens(url)
- return parse:match(lower(url)) or ""
+ return lpegmatch(parse,lower(url)) or ""
end
--[[ldx--
@@ -3004,27 +4024,36 @@ local x = xml.convert(somestring)
<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
+<p>Valid entities are:</p>
+
+<typing>
+<!ENTITY xxxx SYSTEM "yyyy" NDATA zzzz>
+<!ENTITY xxxx PUBLIC "yyyy" >
+<!ENTITY xxxx "yyyy" >
+</typing>
+--ldx]]--
-- not just one big nested table capture (lpeg overflow)
local nsremap, resolvens = xml.xmlns, xml.resolvens
-local stack, top, dt, at, xmlns, errorstr, entities = {}, {}, {}, {}, {}, nil, {}
+local stack, top, dt, at, xmlns, errorstr, entities = { }, { }, { }, { }, { }, nil, { }
+local strip, cleanup, utfize, resolve, resolve_predefined, unify_predefined = false, false, false, false, false, false
+local dcache, hcache, acache = { }, { }, { }
-local mt = { __tostring = xml.text }
+local mt = { }
-function xml.check_error(top,toclose)
- return ""
+function initialize_mt(root)
+ mt = { __index = root } -- will be redefined later
end
-local strip = false
-local cleanup = false
+function xml.setproperty(root,k,v)
+ getmetatable(root).__index[k] = v
+end
-function xml.set_text_cleanup(fnc)
- cleanup = fnc
+function xml.check_error(top,toclose)
+ return ""
end
local function add_attribute(namespace,tag,value)
@@ -3034,12 +4063,31 @@ local function add_attribute(namespace,tag,value)
if tag == "xmlns" then
xmlns[#xmlns+1] = resolvens(value)
at[tag] = value
+ elseif namespace == "" then
+ at[tag] = value
elseif namespace == "xmlns" then
xml.checkns(tag,value)
at["xmlns:" .. tag] = value
else
- at[tag] = value
+ -- for the moment this way:
+ at[namespace .. ":" .. tag] = value
+ 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)
+ if at.xmlns then
+ remove(xmlns)
end
+ at = { }
end
local function add_begin(spacing, namespace, tag)
@@ -3067,28 +4115,12 @@ local function add_end(spacing, namespace, tag)
end
dt = top.dt
dt[#dt+1] = toclose
- dt[0] = top
+ -- dt[0] = top -- nasty circular reference when serializing table
if toclose.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)
- if at.xmlns then
- remove(xmlns)
- end
- at = { }
-end
-
local function add_text(text)
if cleanup and #text > 0 then
dt[#dt+1] = cleanup(text)
@@ -3104,7 +4136,7 @@ local function add_special(what, spacing, text)
if strip and (what == "@cm@" or what == "@dt@") then
-- forget it
else
- dt[#dt+1] = { special=true, ns="", tg=what, dt={text} }
+ dt[#dt+1] = { special=true, ns="", tg=what, dt={ text } }
end
end
@@ -3112,7 +4144,199 @@ local function set_message(txt)
errorstr = "garbage at the end of the file: " .. gsub(txt,"([ \n\r\t]*)","")
end
-local P, S, R, C, V = lpeg.P, lpeg.S, lpeg.R, lpeg.C, lpeg.V
+local reported_attribute_errors = { }
+
+local function attribute_value_error(str)
+ if not reported_attribute_errors[str] then
+ logs.report("xml","invalid attribute value: %q",str)
+ reported_attribute_errors[str] = true
+ at._error_ = str
+ end
+ return str
+end
+local function attribute_specification_error(str)
+ if not reported_attribute_errors[str] then
+ logs.report("xml","invalid attribute specification: %q",str)
+ reported_attribute_errors[str] = true
+ at._error_ = str
+ end
+ return str
+end
+
+function xml.unknown_dec_entity_format(str) return (str == "" and "&error;") or format("&%s;",str) end
+function xml.unknown_hex_entity_format(str) return format("&#x%s;",str) end
+function xml.unknown_any_entity_format(str) return format("&#x%s;",str) end
+
+local function fromhex(s)
+ local n = tonumber(s,16)
+ if n then
+ return utfchar(n)
+ else
+ return format("h:%s",s), true
+ end
+end
+
+local function fromdec(s)
+ local n = tonumber(s)
+ if n then
+ return utfchar(n)
+ else
+ return format("d:%s",s), true
+ end
+end
+
+-- one level expansion (simple case), no checking done
+
+local rest = (1-P(";"))^0
+local many = P(1)^0
+
+local parsedentity =
+ P("&") * (P("#x")*(rest/fromhex) + P("#")*(rest/fromdec)) * P(";") * P(-1) +
+ (P("#x")*(many/fromhex) + P("#")*(many/fromdec))
+
+-- parsing in the xml file
+
+local predefined_unified = {
+ [38] = "&amp;",
+ [42] = "&quot;",
+ [47] = "&apos;",
+ [74] = "&lt;",
+ [76] = "&gr;",
+}
+
+local predefined_simplified = {
+ [38] = "&", amp = "&",
+ [42] = '"', quot = '"',
+ [47] = "'", apos = "'",
+ [74] = "<", lt = "<",
+ [76] = ">", gt = ">",
+}
+
+local function handle_hex_entity(str)
+ local h = hcache[str]
+ if not h then
+ local n = tonumber(str,16)
+ h = unify_predefined and predefined_unified[n]
+ if h then
+ if trace_entities then
+ logs.report("xml","utfize, converting hex entity &#x%s; into %s",str,h)
+ end
+ elseif utfize then
+ h = (n and utfchar(n)) or xml.unknown_hex_entity_format(str) or ""
+ if not n then
+ logs.report("xml","utfize, ignoring hex entity &#x%s;",str)
+ elseif trace_entities then
+ logs.report("xml","utfize, converting hex entity &#x%s; into %s",str,h)
+ end
+ else
+ if trace_entities then
+ logs.report("xml","found entity &#x%s;",str)
+ end
+ h = "&#x" .. str .. ";"
+ end
+ hcache[str] = h
+ end
+ return h
+end
+
+local function handle_dec_entity(str)
+ local d = dcache[str]
+ if not d then
+ local n = tonumber(str)
+ d = unify_predefined and predefined_unified[n]
+ if d then
+ if trace_entities then
+ logs.report("xml","utfize, converting dec entity &#%s; into %s",str,d)
+ end
+ elseif utfize then
+ d = (n and utfchar(n)) or xml.unknown_dec_entity_format(str) or ""
+ if not n then
+ logs.report("xml","utfize, ignoring dec entity &#%s;",str)
+ elseif trace_entities then
+ logs.report("xml","utfize, converting dec entity &#%s; into %s",str,h)
+ end
+ else
+ if trace_entities then
+ logs.report("xml","found entity &#%s;",str)
+ end
+ d = "&#" .. str .. ";"
+ end
+ dcache[str] = d
+ end
+ return d
+end
+
+xml.parsedentitylpeg = parsedentity
+
+local function handle_any_entity(str)
+ if resolve then
+ local a = acache[str] -- per instance ! todo
+ if not a then
+ a = resolve_predefined and predefined_simplified[str]
+ if a then
+ -- one of the predefined
+ elseif type(resolve) == "function" then
+ a = resolve(str) or entities[str]
+ else
+ a = entities[str]
+ end
+ if a then
+ if trace_entities then
+ logs.report("xml","resolved entity &%s; -> %s (internal)",str,a)
+ end
+ a = lpegmatch(parsedentity,a) or a
+ else
+ if xml.unknown_any_entity_format then
+ a = xml.unknown_any_entity_format(str) or ""
+ end
+ if a then
+ if trace_entities then
+ logs.report("xml","resolved entity &%s; -> %s (external)",str,a)
+ end
+ else
+ if trace_entities then
+ logs.report("xml","keeping entity &%s;",str)
+ end
+ if str == "" then
+ a = "&error;"
+ else
+ a = "&" .. str .. ";"
+ end
+ end
+ end
+ acache[str] = a
+ elseif trace_entities then
+ if not acache[str] then
+ logs.report("xml","converting entity &%s; into %s",str,a)
+ acache[str] = a
+ end
+ end
+ return a
+ else
+ local a = acache[str]
+ if not a then
+ if trace_entities then
+ logs.report("xml","found entity &%s;",str)
+ end
+ a = resolve_predefined and predefined_simplified[str]
+ if a then
+ -- one of the predefined
+ acache[str] = a
+ elseif str == "" then
+ a = "&error;"
+ acache[str] = a
+ else
+ a = "&" .. str .. ";"
+ acache[str] = a
+ end
+ end
+ return a
+ end
+end
+
+local function handle_end_entity(chr)
+ logs.report("xml","error in entity, %q found instead of ';'",chr)
+end
local space = S(' \r\n\t')
local open = P('<')
@@ -3122,24 +4346,50 @@ local dquote = S('"')
local equal = P('=')
local slash = P('/')
local colon = P(':')
+local semicolon = P(';')
+local ampersand = 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 = lpeg.patterns.utfbom -- no capture
+local spacing = C(space^0)
-local utfbom = P('\000\000\254\255') + P('\255\254\000\000') +
- P('\255\254') + P('\254\255') + P('\239\187\191') -- no capture
+----- entitycontent = (1-open-semicolon)^0
+local anyentitycontent = (1-open-semicolon-space-close)^0
+local hexentitycontent = R("AF","af","09")^0
+local decentitycontent = R("09")^0
+local parsedentity = P("#")/"" * (
+ P("x")/"" * (hexentitycontent/handle_hex_entity) +
+ (decentitycontent/handle_dec_entity)
+ ) + (anyentitycontent/handle_any_entity)
+local entity = ampersand/"" * parsedentity * ( (semicolon/"") + #(P(1)/handle_end_entity))
+
+local text_unparsed = C((1-open)^1)
+local text_parsed = Cs(((1-open-ampersand)^1 + entity)^1)
-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
+----- value = (squote * C((1 - squote)^0) * squote) + (dquote * C((1 - dquote)^0) * dquote) -- ampersand and < also invalid in value
+local value = (squote * Cs((entity + (1 - squote))^0) * squote) + (dquote * Cs((entity + (1 - dquote))^0) * dquote) -- ampersand and < also invalid in value
+
+local endofattributes = slash * close + close -- recovery of flacky html
+local whatever = space * name * optionalspace * equal
+local wrongvalue = C(P(1-whatever-close)^1 + P(1-close)^1) / attribute_value_error
+----- wrongvalue = C(P(1-whatever-endofattributes)^1 + P(1-endofattributes)^1) / attribute_value_error
+----- wrongvalue = C(P(1-space-endofattributes)^1) / attribute_value_error
+local wrongvalue = Cs(P(entity + (1-space-endofattributes))^1) / attribute_value_error
-local text = justtext / add_text
+local attributevalue = value + wrongvalue
+
+local attribute = (somespace * name * optionalspace * equal * optionalspace * attributevalue) / add_attribute
+----- attributes = (attribute)^0
+
+local attributes = (attribute + somespace^-1 * (((1-endofattributes)^1)/attribute_specification_error))^0
+
+local parsedtext = text_parsed / add_text
+local unparsedtext = text_unparsed / 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
@@ -3157,19 +4407,27 @@ local someinstruction = C((1 - endinstruction)^0)
local somecomment = C((1 - endcomment )^0)
local somecdata = C((1 - endcdata )^0)
-local function entity(k,v) entities[k] = v end
+local function normalentity(k,v ) entities[k] = v end
+local function systementity(k,v,n) entities[k] = v end
+local function publicentity(k,v,n) 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 doctypename = C((1-somespace-close)^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 normalentitytype = (doctypename * somespace * value)/normalentity
+local publicentitytype = (doctypename * somespace * P("PUBLIC") * somespace * value)/publicentity
+local systementitytype = (doctypename * somespace * P("SYSTEM") * somespace * value * somespace * P("NDATA") * somespace * doctypename)/systementity
+local entitydoctype = optionalspace * P("<!ENTITY") * somespace * (systementitytype + publicentitytype + normalentitytype) * optionalspace * close
+
+local doctypeset = beginset * optionalspace * P(elementdoctype + entitydoctype + space)^0 * optionalspace * endset
+local definitiondoctype= doctypename * somespace * doctypeset
+local publicdoctype = doctypename * somespace * P("PUBLIC") * somespace * value * somespace * value * somespace * doctypeset
+local systemdoctype = doctypename * somespace * P("SYSTEM") * somespace * value * somespace * doctypeset
+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
@@ -3179,60 +4437,116 @@ local doctype = (spacing * begindoctype * somedoctype * enddoct
-- 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 instruction = (Cc("@pi@") * spacing * begininstruction * someinstruction * endinstruction) / add_special
+-- local comment = (Cc("@cm@") * spacing * begincomment * somecomment * endcomment ) / add_special
+-- local cdata = (Cc("@cd@") * spacing * begincdata * somecdata * endcdata ) / add_special
+-- local doctype = (Cc("@dt@") * spacing * begindoctype * somedoctype * enddoctype ) / add_special
-local trailer = space^0 * (justtext/set_message)^0
+local trailer = space^0 * (text_unparsed/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",
+local grammar_parsed_text = 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,
+ children = parsedtext + V("parent") + emptyelement + comment + cdata + instruction,
}
--- todo: xml.new + properties like entities and strip and such (store in root)
+local grammar_unparsed_text = P { "preamble",
+ preamble = utfbom^0 * instruction^0 * (doctype + comment + instruction)^0 * V("parent") * trailer,
+ parent = beginelement * V("children")^0 * endelement,
+ children = unparsedtext + V("parent") + emptyelement + comment + cdata + instruction,
+}
-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 {}
+-- maybe we will add settinsg to result as well
+
+local function xmlconvert(data, settings)
+ settings = settings or { } -- no_root strip_cm_and_dt given_entities parent_root error_handler
+ strip = settings.strip_cm_and_dt
+ utfize = settings.utfize_entities
+ resolve = settings.resolve_entities
+ resolve_predefined = settings.resolve_predefined_entities -- in case we have escaped entities
+ unify_predefined = settings.unify_predefined_entities -- &#038; -> &amp;
+ cleanup = settings.text_cleanup
+ stack, top, at, xmlns, errorstr, result, entities = { }, { }, { }, { }, nil, nil, settings.entities or { }
+ acache, hcache, dcache = { }, { }, { } -- not stored
+ reported_attribute_errors = { }
+ if settings.parent_root then
+ mt = getmetatable(settings.parent_root)
+ else
+ initialize_mt(top)
+ end
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"
+ elseif utfize or resolve then
+ if lpegmatch(grammar_parsed_text,data) then
+ errorstr = ""
+ else
+ errorstr = "invalid xml file - parsed text"
+ end
+ elseif type(data) == "string" then
+ if lpegmatch(grammar_unparsed_text,data) then
+ errorstr = ""
+ else
+ errorstr = "invalid xml file - unparsed text"
+ end
else
- errorstr = ""
+ errorstr = "invalid xml file - no text at all"
end
if errorstr and errorstr ~= "" then
- result = { dt = { { ns = "", tg = "error", dt = { errorstr }, at={}, er = true } }, error = true }
+ result = { dt = { { ns = "", tg = "error", dt = { errorstr }, at={ }, er = true } } }
setmetatable(stack, mt)
- if xml.error_handler then xml.error_handler("load",errorstr) end
+ local error_handler = settings.error_handler
+ if error_handler == false then
+ -- no error message
+ else
+ error_handler = error_handler or xml.error_handler
+ if error_handler then
+ xml.error_handler("load",errorstr)
+ end
+ end
else
result = stack[1]
end
- if not no_root then
- result = { special = true, ns = "", tg = '@rt@', dt = result.dt, at={}, entities = entities }
+ if not settings.no_root then
+ result = { special = true, ns = "", tg = '@rt@', dt = result.dt, at={ }, entities = entities, settings = settings }
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
+v.__p__ = result -- new, experiment, else we cannot go back to settings, we need to test this !
break
end
end
end
+ if errorstr and errorstr ~= "" then
+ result.error = true
+ end
return result
end
+xml.convert = xmlconvert
+
+function xml.inheritedconvert(data,xmldata)
+ local settings = xmldata.settings
+ settings.parent_root = xmldata -- to be tested
+ -- settings.no_root = true
+ local xc = xmlconvert(data,settings)
+ -- xc.settings = nil
+ -- xc.entities = nil
+ -- xc.special = nil
+ -- xc.ri = nil
+ -- print(xc.tg)
+ return xc
+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>
@@ -3243,7 +4557,7 @@ function xml.is_valid(root)
end
function xml.package(tag,attributes,data)
- local ns, tg = tag:match("^(.-):?([^:]+)$")
+ local ns, tg = match(tag,"^(.-):?([^:]+)$")
local t = { ns = ns, tg = tg, dt = data or "", at = attributes or {} }
setmetatable(t, mt)
return t
@@ -3261,21 +4575,19 @@ the whole file first. The function accepts a string representing
a filename or a file handle.</p>
--ldx]]--
-function xml.load(filename)
+function xml.load(filename,settings)
+ local data = ""
if type(filename) == "string" then
+ -- local data = io.loaddata(filename) - -todo: check type in io.loaddata
local f = io.open(filename,'r')
if f then
- local root = xml.convert(f:read("*all"))
+ data = 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("")
+ data = filename:read("*all")
end
+ return xmlconvert(data,settings)
end
--[[ldx--
@@ -3283,9 +4595,11 @@ end
valid trees, which is what the next function does.</p>
--ldx]]--
+local no_root = { no_root = true }
+
function xml.toxml(data)
if type(data) == "string" then
- local root = { xml.convert(data,true) }
+ local root = { xmlconvert(data,no_root) }
return (#root > 1 and root) or root[1]
else
return data
@@ -3305,7 +4619,7 @@ local function copy(old,tables)
if not tables[old] then
tables[old] = new
end
- for k,v in pairs(old) do
+ for k,v in next, old do
new[k] = (type(v) == "table" and (tables[v] or copy(v, tables))) or v
end
local mt = getmetatable(old)
@@ -3330,217 +4644,304 @@ alternative.</p>
-- 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
- local etg, edt = e.tg, e.dt
- local spc = specialconverter and specialconverter[etg]
- if spc then
- 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
+function xml.checkbom(root) -- can be made faster
+ if root.ri then
+ local dt, found = root.dt, false
+ for k=1,#dt do
+ local v = dt[k]
+ if type(v) == "table" and v.special and v.tg == "@pi@" and find(v.dt[1],"xml.*version=") then
+ found = true
+ break
end
end
+ if not found then
+ insert(dt, 1, { special=true, ns="", tg="@pi@", dt = { "xml version='1.0' standalone='yes'"} } )
+ insert(dt, 2, "\n" )
+ 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)
+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]]--
+
+-- new experimental reorganized serialize
+
+local function verbose_element(e,handlers)
+ local handle = handlers.handle
+ local serialize = handlers.serialize
+ local ens, etg, eat, edt, ern = e.ns, e.tg, e.at, e.dt, e.rn
+ local ats = eat and next(eat) and { }
+ if ats then
+ for k,v in next, eat do
+ ats[#ats+1] = format('%s=%q',k,v)
+ end
+ end
+ if ern and trace_remap and ern ~= ens then
+ ens = ern
+ end
+ if ens ~= "" then
+ if edt and #edt > 0 then
+ if ats then
+ handle("<",ens,":",etg," ",concat(ats," "),">")
+ else
+ handle("<",ens,":",etg,">")
+ end
+ for i=1,#edt do
+ local e = edt[i]
+ if type(e) == "string" then
+ handle(e)
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)
+ serialize(e,handlers)
+ end
end
+ handle("</",ens,":",etg,">")
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 next, eat do
- ats[#ats+1] = format('%s=%q',k,attributeconverter(v))
- end
- else
- for k,v in next, eat do
- ats[#ats+1] = format('%s=%q',k,v)
- end
- end
+ handle("<",ens,":",etg," ",concat(ats," "),"/>")
+ else
+ handle("<",ens,":",etg,"/>")
end
- if ern and trace_remap and ern ~= ens then
- ens = ern
+ end
+ else
+ if edt and #edt > 0 then
+ if ats then
+ handle("<",etg," ",concat(ats," "),">")
+ else
+ handle("<",etg,">")
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 .. ">")
+ for i=1,#edt do
+ local ei = edt[i]
+ if type(ei) == "string" then
+ handle(ei)
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
+ serialize(ei,handlers)
end
+ end
+ handle("</",etg,">")
+ else
+ if ats then
+ handle("<",etg," ",concat(ats," "),"/>")
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
- local ei = edt[i]
- if type(ei) == "string" then
- if textconverter then
- handle(textconverter(ei))
- else
- handle(ei)
- end
- else
- serialize(ei,handle,textconverter,attributeconverter,specialconverter,nocommands)
- end
- 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
+ handle("<",etg,"/>")
end
end
- elseif type(e) == "string" then
- if textconverter then
- handle(textconverter(e))
+ end
+end
+
+local function verbose_pi(e,handlers)
+ handlers.handle("<?",e.dt[1],"?>")
+end
+
+local function verbose_comment(e,handlers)
+ handlers.handle("<!--",e.dt[1],"-->")
+end
+
+local function verbose_cdata(e,handlers)
+ handlers.handle("<![CDATA[", e.dt[1],"]]>")
+end
+
+local function verbose_doctype(e,handlers)
+ handlers.handle("<!DOCTYPE ",e.dt[1],">")
+end
+
+local function verbose_root(e,handlers)
+ handlers.serialize(e.dt,handlers)
+end
+
+local function verbose_text(e,handlers)
+ handlers.handle(e)
+end
+
+local function verbose_document(e,handlers)
+ local serialize = handlers.serialize
+ local functions = handlers.functions
+ for i=1,#e do
+ local ei = e[i]
+ if type(ei) == "string" then
+ functions["@tx@"](ei,handlers)
else
- handle(e)
+ serialize(ei,handlers)
end
- else
- for i=1,#e do
- local ei = e[i]
- if type(ei) == "string" then
- if textconverter then
- handle(textconverter(ei))
- else
- handle(ei)
- end
- else
- serialize(ei,handle,textconverter,attributeconverter,specialconverter,nocommands)
- end
+ end
+end
+
+local function serialize(e,handlers,...)
+ local initialize = handlers.initialize
+ local finalize = handlers.finalize
+ local functions = handlers.functions
+ if initialize then
+ local state = initialize(...)
+ if not state == true then
+ return state
end
end
+ local etg = e.tg
+ if etg then
+ (functions[etg] or functions["@el@"])(e,handlers)
+ -- elseif type(e) == "string" then
+ -- functions["@tx@"](e,handlers)
+ else
+ functions["@dc@"](e,handlers)
+ end
+ if finalize then
+ return finalize()
+ end
end
-xml.serialize = serialize
+local function xserialize(e,handlers)
+ local functions = handlers.functions
+ local etg = e.tg
+ if etg then
+ (functions[etg] or functions["@el@"])(e,handlers)
+ -- elseif type(e) == "string" then
+ -- functions["@tx@"](e,handlers)
+ else
+ functions["@dc@"](e,handlers)
+ end
+end
-function xml.checkbom(root) -- can be made faster
- if root.ri then
- local dt, found = root.dt, false
- for k=1,#dt do
- local v = dt[k]
- if type(v) == "table" and v.special and v.tg == "@pi" and find(v.dt,"xml.*version=") then
- found = true
- break
+local handlers = { }
+
+local function newhandlers(settings)
+ local t = table.copy(handlers.verbose or { }) -- merge
+ if settings then
+ for k,v in next, settings do
+ if type(v) == "table" then
+ tk = t[k] if not tk then tk = { } t[k] = tk end
+ for kk,vv in next, v do
+ tk[kk] = vv
+ end
+ else
+ t[k] = v
end
end
- if not found then
- insert(dt, 1, { special=true, ns="", tg="@pi@", dt = { "xml version='1.0' standalone='yes'"} } )
- insert(dt, 2, "\n" )
+ if settings.name then
+ handlers[settings.name] = t
end
end
+ return t
end
+local nofunction = function() end
+
+function xml.sethandlersfunction(handler,name,fnc)
+ handler.functions[name] = fnc or nofunction
+end
+
+function xml.gethandlersfunction(handler,name)
+ return handler.functions[name]
+end
+
+function xml.gethandlers(name)
+ return handlers[name]
+end
+
+newhandlers {
+ name = "verbose",
+ initialize = false, -- faster than nil and mt lookup
+ finalize = false, -- faster than nil and mt lookup
+ serialize = xserialize,
+ handle = print,
+ functions = {
+ ["@dc@"] = verbose_document,
+ ["@dt@"] = verbose_doctype,
+ ["@rt@"] = verbose_root,
+ ["@el@"] = verbose_element,
+ ["@pi@"] = verbose_pi,
+ ["@cm@"] = verbose_comment,
+ ["@cd@"] = verbose_cdata,
+ ["@tx@"] = verbose_text,
+ }
+}
+
--[[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>
+<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>Beware, these were timing with the old routine but measurements will not be that
+much different I guess.</p>
--ldx]]--
-function xml.tostring(root) -- 25% overhead due to collecting
+-- maybe this will move to lxml-xml
+
+local result
+
+local xmlfilehandler = newhandlers {
+ name = "file",
+ initialize = function(name) result = io.open(name,"wb") return result end,
+ finalize = function() result:close() return true end,
+ handle = function(...) result:write(...) end,
+}
+
+-- no checking on writeability here but not faster either
+--
+-- local xmlfilehandler = newhandlers {
+-- initialize = function(name) io.output(name,"wb") return true end,
+-- finalize = function() io.close() return true end,
+-- handle = io.write,
+-- }
+
+
+function xml.save(root,name)
+ serialize(root,xmlfilehandler,name)
+end
+
+local result
+
+local xmlstringhandler = newhandlers {
+ name = "string",
+ initialize = function() result = { } return result end,
+ finalize = function() return concat(result) end,
+ handle = function(...) result[#result+1] = concat { ... } end
+}
+
+local function xmltostring(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) -- brrr, slow (direct printing is faster)
- return concat(result,"")
+ else -- if next(root) then -- next is faster than type (and >0 test)
+ return serialize(root,xmlstringhandler) or ""
end
end
return ""
end
+local function xmltext(root) -- inline
+ return (root and xmltostring(root)) or ""
+end
+
+function initialize_mt(root)
+ mt = { __tostring = xmltext, __index = root }
+end
+
+xml.defaulthandlers = handlers
+xml.newhandlers = newhandlers
+xml.serialize = serialize
+xml.tostring = xmltostring
+
--[[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)
+local function xmlstring(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)
+ xmlstring(edt[i],handle)
end
end
else
@@ -3548,54 +4949,52 @@ function xml.string(e,handle)
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>
+xml.string = xmlstring
-<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--
+<p>A few helpers:</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()
+--~ xmlsetproperty(root,"settings",settings)
+
+function xml.settings(e)
+ while e do
+ local s = e.settings
+ if s then
+ return s
+ else
+ e = e.__p__
+ end
end
+ return nil
end
---[[ldx--
-<p>A few helpers:</p>
---ldx]]--
-
-function xml.body(root)
- return (root.ri and root.dt[root.ri]) or root
+function xml.root(e)
+ local r = e
+ while e do
+ e = e.__p__
+ if e then
+ r = e
+ end
+ end
+ return r
end
-function xml.text(root)
- return (root and xml.tostring(root)) or ""
+function xml.parent(root)
+ return root.__p__
end
-function xml.content(root) -- bugged
- return (root and root.dt and xml.tostring(root.dt)) or ""
+function xml.body(root)
+ return (root.ri and root.dt[root.ri]) or root -- not ok yet
end
-function xml.isempty(root, pattern)
- if pattern == "" or pattern == "*" then
- pattern = nil
- end
- if pattern then
- -- todo
- return false
+function xml.name(root)
+ if not root then
+ return ""
+ elseif root.ns == "" then
+ return root.tg
else
- return not root or not root.dt or #root.dt == 0 or root.dt == ""
+ return root.ns .. ":" .. root.tg
end
end
@@ -3603,18 +5002,15 @@ end
<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 ""
+function xml.erase(dt,k)
+ if dt then
+ if k then
+ dt[k] = ""
+ else for k=1,#dt do
+ dt[1] = { "" }
+ end end
end
end
@@ -3635,6 +5031,42 @@ function xml.assign(dt,k,root)
end
end
+-- the following helpers may move
+
+--[[ldx--
+<p>The next helper assigns a tree (or string). Usage:</p>
+<typing>
+xml.tocdata(e)
+xml.tocdata(e,"error")
+</typing>
+--ldx]]--
+
+function xml.tocdata(e,wrapper)
+ local whatever = xmltostring(e.dt)
+ if wrapper then
+ whatever = format("<%s>%s</%s>",wrapper,whatever,wrapper)
+ end
+ local t = { special = true, ns = "", tg = "@cd@", at = {}, rn = "", dt = { whatever }, __p__ = e }
+ setmetatable(t,getmetatable(e))
+ e.dt = { t }
+end
+
+function xml.makestandalone(root)
+ if root.ri then
+ local dt = root.dt
+ for k=1,#dt do
+ local v = dt[k]
+ if type(v) == "table" and v.special and v.tg == "@pi@" then
+ local txt = v.dt[1]
+ if find(txt,"xml.*version=") then
+ v.dt[1] = txt .. " standalone='yes'"
+ break
+ end
+ end
+ end
+ end
+end
+
end -- of closure
@@ -3648,1420 +5080,1285 @@ if not modules then modules = { } end modules ['lxml-pth'] = {
license = "see context related readme files"
}
+-- e.ni is only valid after a filter run
+
local concat, remove, insert = table.concat, table.remove, table.insert
local type, next, tonumber, tostring, setmetatable, loadstring = type, next, tonumber, tostring, setmetatable, loadstring
-local format, lower, gmatch, gsub, find = string.format, string.lower, string.gmatch, string.gsub, string.find
+local format, upper, lower, gmatch, gsub, find, rep = string.format, string.upper, string.lower, string.gmatch, string.gsub, string.find, string.rep
+local lpegmatch = lpeg.match
+
+-- beware, this is not xpath ... e.g. position is different (currently) and
+-- we have reverse-sibling as reversed preceding sibling
--[[ldx--
<p>This module can be used stand alone but also inside <l n='mkiv'/> in
which case it hooks into the tracker code. Therefore we provide a few
functions that set the tracers. Here we overload a previously defined
function.</p>
+<p>If I can get in the mood I will make a variant that is XSLT compliant
+but I wonder if it makes sense.</P>
--ldx]]--
-local trace_lpath = false
-
-if trackers then
- trackers.register("xml.lpath", function(v) trace_lpath = v end)
-end
+--[[ldx--
+<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>
-local settrace = xml.settrace -- lxml-tab
+<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>
+--ldx]]--
-function xml.settrace(str,value)
- if str == "lpath" then
- trace_lpath = value or false
- else
- settrace(str,value) -- lxml-tab
- end
-end
+local trace_lpath = false if trackers then trackers.register("xml.path", function(v) trace_lpath = v end) end
+local trace_lparse = false if trackers then trackers.register("xml.parse", function(v) trace_lparse = v end) end
+local trace_lprofile = false if trackers then trackers.register("xml.profile", function(v) trace_lpath = v trace_lparse = v trace_lprofile = v end) end
--[[ldx--
-<p>We've now arrived at an intersting part: accessing the tree using a subset
+<p>We've now arrived at an interesting 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]]--
-local lpathcalls = 0 -- statistics
-local lpathcached = 0 -- statistics
+local lpathcalls = 0 function xml.lpathcalls () return lpathcalls end
+local lpathcached = 0 function xml.lpathcached() return lpathcached end
-xml.functions = xml.functions or { }
-xml.expressions = xml.expressions or { }
+xml.functions = xml.functions or { } -- internal
+xml.expressions = xml.expressions or { } -- in expressions
+xml.finalizers = xml.finalizers or { } -- fast do-with ... (with return value other than collection)
+xml.specialhandler = xml.specialhandler or { }
local functions = xml.functions
local expressions = xml.expressions
+local finalizers = xml.finalizers
-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",
-}
-
--- a rather dumb lpeg
+finalizers.xml = finalizers.xml or { }
+finalizers.tex = finalizers.tex or { }
-local P, S, R, C, V, Cc = lpeg.P, lpeg.S, lpeg.R, lpeg.C, lpeg.V, lpeg.Cc
+local function fallback (t, name)
+ local fn = finalizers[name]
+ if fn then
+ t[name] = fn
+ else
+ logs.report("xml","unknown sub finalizer '%s'",tostring(name))
+ fn = function() end
+ end
+ return fn
+end
--- instead of using functions we just parse a few names which saves a call
--- later on
+setmetatable(finalizers.xml, { __index = fallback })
+setmetatable(finalizers.tex, { __index = fallback })
-local lp_position = P("position()") / "ps"
-local lp_index = P("index()") / "id"
-local lp_text = P("text()") / "tx"
-local lp_name = P("name()") / "(ns~='' and ns..':'..tg)" -- "((rt.ns~='' and rt.ns..':'..rt.tg) or '')"
-local lp_tag = P("tag()") / "tg" -- (rt.tg or '')
-local lp_ns = P("ns()") / "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 '')")
+xml.defaultprotocol = "xml"
-local lp_lua_function = C(R("az","AZ","--","__")^1 * (P(".") * R("az","AZ","--","__")^1)^1) * P("(") / function(t) -- todo: better . handling
- return t .. "("
-end
+-- as xsl does not follow xpath completely here we will also
+-- be more liberal especially with regards to the use of | and
+-- the rootpath:
+--
+-- test : all 'test' under current
+-- /test : 'test' relative to current
+-- a|b|c : set of names
+-- (a|b|c) : idem
+-- ! : not
+--
+-- after all, we're not doing transformations but filtering. in
+-- addition we provide filter functions (last bit)
+--
+-- todo: optimizer
+--
+-- .. : parent
+-- * : all kids
+-- / : anchor here
+-- // : /**/
+-- ** : all in between
+--
+-- so far we had (more practical as we don't transform)
+--
+-- {/test} : kids 'test' under current node
+-- {test} : any kid with tag 'test'
+-- {//test} : same as above
-local lp_function = C(R("az","AZ","--","__")^1) * P("(") / function(t) -- todo: better . handling
- if expressions[t] then
- return "expressions." .. t .. "("
- else
- return "expressions.error("
- end
-end
+-- evaluator (needs to be redone, for the moment copied)
-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) -- lpeg.P{"("*C(((1-S("()"))+V(1))^0)*")"}
+-- todo: apply_axis(list,notable) and collection vs single
--- if we use a dedicated namespace then we don't need to pass rt and k
+local apply_axis = { }
-local lp_special = (C(P("name")+P("text")+P("tag"))) * value / function(t,s)
- if expressions[t] then
- if s then
- return "expressions." .. t .. "(r,k," .. s ..")"
- else
- return "expressions." .. t .. "(r,k)"
+apply_axis['root'] = function(list)
+ local collected = { }
+ for l=1,#list do
+ local ll = list[l]
+ local rt = ll
+ while ll do
+ ll = ll.__p__
+ if ll then
+ rt = ll
+ end
end
- else
- return "expressions.error(" .. t .. ")"
+ collected[#collected+1] = rt
end
+ return collected
end
-local converter = lpeg.Cs ( (
- lp_position +
- lp_index +
- lp_text + lp_name + -- fast one
- lp_special +
- lp_noequal + lp_doequal +
- lp_attribute +
- lp_lua_function +
- lp_function +
-1 )^1 )
-
--- expressions,root,rootdt,k,e,edt,ns,tg,idx,hsh[tg] or 1
+apply_axis['self'] = function(list)
+--~ local collected = { }
+--~ for l=1,#list do
+--~ collected[#collected+1] = list[l]
+--~ end
+--~ return collected
+ return list
+end
-local template = [[
- return function(expressions,r,d,k,e,dt,ns,tg,id,ps)
- local at, tx = e.at or { }, dt[1] or ""
- return %s
+apply_axis['child'] = function(list)
+ local collected = { }
+ for l=1,#list do
+ local ll = list[l]
+ local dt = ll.dt
+ local en = 0
+ for k=1,#dt do
+ local dk = dt[k]
+ if dk.tg then
+ collected[#collected+1] = dk
+ dk.ni = k -- refresh
+ en = en + 1
+ dk.ei = en
+ end
+ end
+ ll.en = en
end
-]]
-
-local function make_expression(str)
- str = converter:match(str)
- return str, loadstring(format(template,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 = 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 + -- brrr, not here !
- 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 +
- many + any +
- crap + empty
-)
-
-local grammar = P { "startup",
- startup = (initial + documentroot + subtreeroot + roottag + docroottag + subroottag)^0 * V("followup"),
- followup = ((slash + parenttag + childtag + selftag)^0 * selector)^1,
-}
+ return collected
+end
-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
- insert(map, 1, { 16 })
+local function collect(list,collected)
+ local dt = list.dt
+ if dt then
+ local en = 0
+ for k=1,#dt do
+ local dk = dt[k]
+ if dk.tg then
+ collected[#collected+1] = dk
+ dk.ni = k -- refresh
+ en = en + 1
+ dk.ei = en
+ collect(dk,collected)
end
- -- print(gsub(table.serialize(map),"[ \n]+"," "))
- return map
end
+ list.en = en
end
end
+apply_axis['descendant'] = function(list)
+ local collected = { }
+ for l=1,#list do
+ collect(list[l],collected)
+ end
+ return collected
+end
-local cache = { }
-
-function xml.lpath(pattern,trace)
- lpathcalls = lpathcalls + 1
- if type(pattern) == "string" then
- local result = cache[pattern]
- if result == nil then -- can be false which is valid -)
- result = compose(pattern)
- cache[pattern] = result
- lpathcached = lpathcached + 1
+local function collect(list,collected)
+ local dt = list.dt
+ if dt then
+ local en = 0
+ for k=1,#dt do
+ local dk = dt[k]
+ if dk.tg then
+ collected[#collected+1] = dk
+ dk.ni = k -- refresh
+ en = en + 1
+ dk.ei = en
+ collect(dk,collected)
+ end
end
- if trace or trace_lpath then
- xml.lshow(result)
+ list.en = en
+ end
+end
+apply_axis['descendant-or-self'] = function(list)
+ local collected = { }
+ for l=1,#list do
+ local ll = list[l]
+ if ll.special ~= true then -- catch double root
+ collected[#collected+1] = ll
end
- return result
- else
- return pattern
+ collect(ll,collected)
end
+ return collected
end
-function xml.cached_patterns()
- return cache
+apply_axis['ancestor'] = function(list)
+ local collected = { }
+ for l=1,#list do
+ local ll = list[l]
+ while ll do
+ ll = ll.__p__
+ if ll then
+ collected[#collected+1] = ll
+ end
+ end
+ end
+ return collected
end
--- we run out of locals (limited to 200)
---
--- local fallbackreport = (texio and texio.write) or io.write
-
-function xml.lshow(pattern,report)
--- report = report or fallbackreport
- report = report or (texio and texio.write) or io.write
- 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=1,#lp do
- local v = lp[k]
- 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]]))
+apply_axis['ancestor-or-self'] = function(list)
+ local collected = { }
+ for l=1,#list do
+ local ll = list[l]
+ collected[#collected+1] = ll
+ while ll do
+ ll = ll.__p__
+ if ll then
+ collected[#collected+1] = ll
end
end
end
+ return collected
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
- local report = (type(t[#t]) == "function" and t[#t]) or (texio and texio.write) or io.write
- 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")
+apply_axis['parent'] = function(list)
+ local collected = { }
+ for l=1,#list do
+ local pl = list[l].__p__
+ if pl then
+ collected[#collected+1] = pl
end
end
+ return collected
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]]--
-
-local functions = xml.functions
-local expressions = xml.expressions
-
-expressions.contains = string.find
-expressions.find = string.find
-expressions.upper = string.upper
-expressions.lower = string.lower
-expressions.number = tonumber
-expressions.boolean = toboolean
-
-expressions.oneof = function(s,...) -- slow
- local t = {...} for i=1,#t do if s == t[i] then return true end end return false
+apply_axis['attribute'] = function(list)
+ return { }
end
-expressions.error = function(str)
- xml.error_handler("unknown function in lpath expression",str or "?")
- return false
+apply_axis['namespace'] = function(list)
+ return { }
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
+apply_axis['following'] = function(list) -- incomplete
+--~ local collected = { }
+--~ for l=1,#list do
+--~ local ll = list[l]
+--~ local p = ll.__p__
+--~ local d = p.dt
+--~ for i=ll.ni+1,#d do
+--~ local di = d[i]
+--~ if type(di) == "table" then
+--~ collected[#collected+1] = di
+--~ break
+--~ end
+--~ end
+--~ end
+--~ return collected
+ return { }
+end
+
+apply_axis['preceding'] = function(list) -- incomplete
+--~ local collected = { }
+--~ for l=1,#list do
+--~ local ll = list[l]
+--~ local p = ll.__p__
+--~ local d = p.dt
+--~ for i=ll.ni-1,1,-1 do
+--~ local di = d[i]
+--~ if type(di) == "table" then
+--~ collected[#collected+1] = di
+--~ break
+--~ end
+--~ end
+--~ end
+--~ return collected
+ return { }
end
-functions.name = function(d,k,n) -- ns + tg
- local found = false
- n = n or 0
- if not k then
- -- not found
- elseif n == 0 then
- local dk = d[k]
- found = dk and (type(dk) == "table") and dk
- elseif n < 0 then
- for i=k-1,1,-1 do
- local di = d[i]
- if type(di) == "table" then
- if n == -1 then
- found = di
- break
- else
- n = n + 1
- end
- end
- end
- else
- for i=k+1,#d,1 do
+apply_axis['following-sibling'] = function(list)
+ local collected = { }
+ for l=1,#list do
+ local ll = list[l]
+ local p = ll.__p__
+ local d = p.dt
+ for i=ll.ni+1,#d do
local di = d[i]
if type(di) == "table" then
- if n == 1 then
- found = di
- break
- else
- n = n - 1
- end
+ collected[#collected+1] = di
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
+ return collected
end
-functions.tag = function(d,k,n) -- only tg
- local found = false
- n = n or 0
- if not k then
- -- not found
- elseif n == 0 then
- local dk = d[k]
- found = dk and (type(dk) == "table") and dk
- elseif n < 0 then
- for i=k-1,1,-1 do
+apply_axis['preceding-sibling'] = function(list)
+ local collected = { }
+ for l=1,#list do
+ local ll = list[l]
+ local p = ll.__p__
+ local d = p.dt
+ for i=1,ll.ni-1 do
local di = d[i]
if type(di) == "table" then
- if n == -1 then
- found = di
- break
- else
- n = n + 1
- end
+ collected[#collected+1] = di
end
end
- else
- for i=k+1,#d,1 do
+ end
+ return collected
+end
+
+apply_axis['reverse-sibling'] = function(list) -- reverse preceding
+ local collected = { }
+ for l=1,#list do
+ local ll = list[l]
+ local p = ll.__p__
+ local d = p.dt
+ for i=ll.ni-1,1,-1 do
local di = d[i]
if type(di) == "table" then
- if n == 1 then
- found = di
- break
- else
- n = n - 1
- end
+ collected[#collected+1] = di
end
end
end
- return (found and found.tg) or ""
+ return collected
end
-expressions.text = functions.text
-expressions.name = functions.name
-expressions.tag = functions.tag
+apply_axis['auto-descendant-or-self'] = apply_axis['descendant-or-self']
+apply_axis['auto-descendant'] = apply_axis['descendant']
+apply_axis['auto-child'] = apply_axis['child']
+apply_axis['auto-self'] = apply_axis['self']
+apply_axis['initial-child'] = apply_axis['child']
-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
+local function apply_nodes(list,directive,nodes)
+ -- todo: nodes[1] etc ... negated node name in set ... when needed
+ -- ... currently ignored
+ local maxn = #nodes
+ if maxn == 3 then --optimized loop
+ local nns, ntg = nodes[2], nodes[3]
+ if not nns and not ntg then -- wildcard
+ if directive then
+ return list
+ else
+ return { }
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
- local hsh = { } -- this will slooow down the lot
- 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
- -- we can optimize this for simple searches, but it probably does not pay off
- hsh[tg] = (hsh[tg] or 0) + 1
- 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
+ local collected, m, p = { }, 0, nil
+ if not nns then -- only check tag
+ for l=1,#list do
+ local ll = list[l]
+ local ltg = ll.tg
+ if ltg then
+ if directive then
+ if ntg == ltg then
+ local llp = ll.__p__ ; if llp ~= p then p, m = llp, 1 else m = m + 1 end
+ collected[#collected+1], ll.mi = ll, m
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](expressions,root,rootdt,k,e,edt,ns,tg,idx,hsh[tg] or 1)
- 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
+ elseif ntg ~= ltg then
+ local llp = ll.__p__ ; if llp ~= p then p, m = llp, 1 else m = m + 1 end
+ collected[#collected+1], ll.mi = ll, m
+ end
+ end
+ end
+ elseif not ntg then -- only check namespace
+ for l=1,#list do
+ local ll = list[l]
+ local lns = ll.rn or ll.ns
+ if lns then
+ if directive then
+ if lns == nns then
+ local llp = ll.__p__ ; if llp ~= p then p, m = llp, 1 else m = m + 1 end
+ collected[#collected+1], ll.mi = ll, m
end
+ elseif lns ~= nns then
+ local llp = ll.__p__ ; if llp ~= p then p, m = llp, 1 else m = m + 1 end
+ collected[#collected+1], ll.mi = ll, m
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
+ end
+ else -- check both
+ for l=1,#list do
+ local ll = list[l]
+ local ltg = ll.tg
+ if ltg then
+ local lns = ll.rn or ll.ns
+ local ok = ltg == ntg and lns == nns
+ if directive then
+ if ok then
+ local llp = ll.__p__ ; if llp ~= p then p, m = llp, 1 else m = m + 1 end
+ collected[#collected+1], ll.mi = ll, m
end
- break -- else loop
+ elseif not ok then
+ local llp = ll.__p__ ; if llp ~= p then p, m = llp, 1 else m = m + 1 end
+ collected[#collected+1], ll.mi = ll, m
end
end
end
end
+ return collected
end
+ else
+ local collected, m, p = { }, 0, nil
+ for l=1,#list do
+ local ll = list[l]
+ local ltg = ll.tg
+ if ltg then
+ local lns = ll.rn or ll.ns
+ local ok = false
+ for n=1,maxn,3 do
+ local nns, ntg = nodes[n+1], nodes[n+2]
+ ok = (not ntg or ltg == ntg) and (not nns or lns == nns)
+ if ok then
+ break
+ end
+ end
+ if directive then
+ if ok then
+ local llp = ll.__p__ ; if llp ~= p then p, m = llp, 1 else m = m + 1 end
+ collected[#collected+1], ll.mi = ll, m
+ end
+ elseif not ok then
+ local llp = ll.__p__ ; if llp ~= p then p, m = llp, 1 else m = m + 1 end
+ collected[#collected+1], ll.mi = ll, m
+ end
+ end
+ end
+ return collected
end
- return true
end
-xml.traverse = traverse
+local quit_expression = false
---[[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>
+local function apply_expression(list,expression,order)
+ local collected = { }
+ quit_expression = false
+ for l=1,#list do
+ local ll = list[l]
+ if expression(list,ll,l,order) then -- nasty, order alleen valid als n=1
+ collected[#collected+1] = ll
+ end
+ if quit_expression then
+ break
+ end
+ end
+ return collected
+end
+
+local P, V, C, Cs, Cc, Ct, R, S, Cg, Cb = lpeg.P, lpeg.V, lpeg.C, lpeg.Cs, lpeg.Cc, lpeg.Ct, lpeg.R, lpeg.S, lpeg.Cg, lpeg.Cb
+
+local spaces = S(" \n\r\t\f")^0
+local lp_space = S(" \n\r\t\f")
+local lp_any = P(1)
+local lp_noequal = P("!=") / "~=" + P("<=") + P(">=") + P("==")
+local lp_doequal = P("=") / "=="
+local lp_or = P("|") / " or "
+local lp_and = P("&") / " and "
+
+local lp_builtin = P (
+ P("firstindex") / "1" +
+ P("lastindex") / "(#ll.__p__.dt or 1)" +
+ P("firstelement") / "1" +
+ P("lastelement") / "(ll.__p__.en or 1)" +
+ P("first") / "1" +
+ P("last") / "#list" +
+ P("rootposition") / "order" +
+ P("position") / "l" + -- is element in finalizer
+ P("order") / "order" +
+ P("element") / "(ll.ei or 1)" +
+ P("index") / "(ll.ni or 1)" +
+ P("match") / "(ll.mi or 1)" +
+ P("text") / "(ll.dt[1] or '')" +
+ -- P("name") / "(ll.ns~='' and ll.ns..':'..ll.tg)" +
+ P("name") / "((ll.ns~='' and ll.ns..':'..ll.tg) or ll.tg)" +
+ P("tag") / "ll.tg" +
+ P("ns") / "ll.ns"
+ ) * ((spaces * P("(") * spaces * P(")"))/"")
+
+local lp_attribute = (P("@") + P("attribute::")) / "" * Cc("(ll.at and ll.at['") * R("az","AZ","--","__")^1 * Cc("'])")
+local lp_fastpos_p = ((P("+")^0 * R("09")^1 * P(-1)) / function(s) return "l==" .. s end)
+local lp_fastpos_n = ((P("-") * R("09")^1 * P(-1)) / function(s) return "(" .. s .. "<0 and (#list+".. s .. "==l))" end)
+local lp_fastpos = lp_fastpos_n + lp_fastpos_p
+local lp_reserved = C("and") + C("or") + C("not") + C("div") + C("mod") + C("true") + C("false")
+
+local lp_lua_function = C(R("az","AZ","__")^1 * (P(".") * R("az","AZ","__")^1)^1) * ("(") / function(t) -- todo: better . handling
+ return t .. "("
+end
-<typing>
-local r, d, k = xml.filter(root,"/a/b/c/position(4)"
-</typing>
---ldx]]--
+local lp_function = C(R("az","AZ","__")^1) * P("(") / function(t) -- todo: better . handling
+ if expressions[t] then
+ return "expr." .. t .. "("
+ else
+ return "expr.error("
+ end
+end
-local traverse, lpath, convert = xml.traverse, xml.lpath, xml.convert
+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) -- lpeg.P{"("*C(((1-S("()"))+V(1))^0)*")"}
-xml.filters = { }
+local lp_child = Cc("expr.child(ll,'") * R("az","AZ","--","__")^1 * Cc("')")
+local lp_number = S("+-") * R("09")^1
+local lp_string = Cc("'") * R("az","AZ","--","__")^1 * Cc("'")
+local lp_content = (P("'") * (1-P("'"))^0 * P("'") + P('"') * (1-P('"'))^0 * P('"'))
-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
+local cleaner
-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
+local lp_special = (C(P("name")+P("text")+P("tag")+P("count")+P("child"))) * value / function(t,s)
+ if expressions[t] then
+ s = s and s ~= "" and lpegmatch(cleaner,s)
+ if s and s ~= "" then
+ return "expr." .. t .. "(ll," .. s ..")"
else
- return ekat, rt, dt, dk
+ return "expr." .. t .. "(ll)"
end
else
- return { }, rt, dt, dk
+ return "expr.error(" .. t .. ")"
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
+local content =
+ lp_builtin +
+ lp_attribute +
+ lp_special +
+ lp_noequal + lp_doequal +
+ lp_or + lp_and +
+ lp_reserved +
+ lp_lua_function + lp_function +
+ lp_content + -- too fragile
+ lp_child +
+ lp_any
+
+local converter = Cs (
+ lp_fastpos + (P { lparent * (V(1))^0 * rparent + content } )^0
+)
-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
+cleaner = Cs ( (
+--~ lp_fastpos +
+ lp_reserved +
+ lp_number +
+ lp_string +
+1 )^1 )
-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
+--~ expr
-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
+local template_e = [[
+ local expr = xml.expressions
+ return function(list,ll,l,order)
+ return %s
+ 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
+local template_f_y = [[
+ local finalizer = xml.finalizers['%s']['%s']
+ return function(collection)
+ return finalizer(collection,%s)
+ 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
+local template_f_n = [[
+ return xml.finalizers['%s']['%s']
+]]
+
+--
+
+local register_self = { kind = "axis", axis = "self" } -- , apply = apply_axis["self"] }
+local register_parent = { kind = "axis", axis = "parent" } -- , apply = apply_axis["parent"] }
+local register_descendant = { kind = "axis", axis = "descendant" } -- , apply = apply_axis["descendant"] }
+local register_child = { kind = "axis", axis = "child" } -- , apply = apply_axis["child"] }
+local register_descendant_or_self = { kind = "axis", axis = "descendant-or-self" } -- , apply = apply_axis["descendant-or-self"] }
+local register_root = { kind = "axis", axis = "root" } -- , apply = apply_axis["root"] }
+local register_ancestor = { kind = "axis", axis = "ancestor" } -- , apply = apply_axis["ancestor"] }
+local register_ancestor_or_self = { kind = "axis", axis = "ancestor-or-self" } -- , apply = apply_axis["ancestor-or-self"] }
+local register_attribute = { kind = "axis", axis = "attribute" } -- , apply = apply_axis["attribute"] }
+local register_namespace = { kind = "axis", axis = "namespace" } -- , apply = apply_axis["namespace"] }
+local register_following = { kind = "axis", axis = "following" } -- , apply = apply_axis["following"] }
+local register_following_sibling = { kind = "axis", axis = "following-sibling" } -- , apply = apply_axis["following-sibling"] }
+local register_preceding = { kind = "axis", axis = "preceding" } -- , apply = apply_axis["preceding"] }
+local register_preceding_sibling = { kind = "axis", axis = "preceding-sibling" } -- , apply = apply_axis["preceding-sibling"] }
+local register_reverse_sibling = { kind = "axis", axis = "reverse-sibling" } -- , apply = apply_axis["reverse-sibling"] }
+
+local register_auto_descendant_or_self = { kind = "axis", axis = "auto-descendant-or-self" } -- , apply = apply_axis["auto-descendant-or-self"] }
+local register_auto_descendant = { kind = "axis", axis = "auto-descendant" } -- , apply = apply_axis["auto-descendant"] }
+local register_auto_self = { kind = "axis", axis = "auto-self" } -- , apply = apply_axis["auto-self"] }
+local register_auto_child = { kind = "axis", axis = "auto-child" } -- , apply = apply_axis["auto-child"] }
+
+local register_initial_child = { kind = "axis", axis = "initial-child" } -- , apply = apply_axis["initial-child"] }
+
+local register_all_nodes = { kind = "nodes", nodetest = true, nodes = { true, false, false } }
+
+local skip = { }
+
+local function errorrunner_e(str,cnv)
+ if not skip[str] then
+ logs.report("lpath","error in expression: %s => %s",str,cnv)
+ skip[str] = cnv or str
end
- return nil, nil, nil, nil
+ return false
+end
+local function errorrunner_f(str,arg)
+ logs.report("lpath","error in finalizer: %s(%s)",str,arg or "")
+ return false
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[gsub(arguments,"^([\"\'])(.*)%1$","%2")])) or ""
+local function register_nodes(nodetest,nodes)
+ return { kind = "nodes", nodetest = nodetest, nodes = nodes }
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
+local function register_expression(expression)
+ local converted = lpegmatch(converter,expression)
+ local runner = loadstring(format(template_e,converted))
+ runner = (runner and runner()) or function() errorrunner_e(expression,converted) end
+ return { kind = "expression", expression = expression, converted = converted, evaluator = runner }
+end
+
+local function register_finalizer(protocol,name,arguments)
+ local runner
+ if arguments and arguments ~= "" then
+ runner = loadstring(format(template_f_y,protocol or xml.defaultprotocol,name,arguments))
else
- return "", rt, dt, dk
+ runner = loadstring(format(template_f_n,protocol or xml.defaultprotocol,name))
end
+ runner = (runner and runner()) or function() errorrunner_f(name,arguments) end
+ return { kind = "finalizer", name = name, arguments = arguments, finalizer = runner }
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
+local expression = P { "ex",
+ ex = "[" * C((V("sq") + V("dq") + (1 - S("[]")) + V("ex"))^0) * "]",
+ sq = "'" * (1 - S("'"))^0 * "'",
+ dq = '"' * (1 - S('"'))^0 * '"',
+}
-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
+local arguments = P { "ar",
+ ar = "(" * Cs((V("sq") + V("dq") + V("nq") + P(1-P(")")))^0) * ")",
+ nq = ((1 - S("),'\""))^1) / function(s) return format("%q",s) end,
+ sq = P("'") * (1 - P("'"))^0 * P("'"),
+ dq = P('"') * (1 - P('"'))^0 * P('"'),
+}
+
+-- todo: better arg parser
+
+local function register_error(str)
+ return { kind = "error", error = format("unparsed: %s",str) }
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]]--
+-- there is a difference in * and /*/ and so we need to catch a few special cases
+
+local special_1 = P("*") * Cc(register_auto_descendant) * Cc(register_all_nodes) -- last one not needed
+local special_2 = P("/") * Cc(register_auto_self)
+local special_3 = P("") * Cc(register_auto_self)
+
+local parser = Ct { "patterns", -- can be made a bit faster by moving pattern outside
+
+ patterns = spaces * V("protocol") * spaces * (
+ ( V("special") * spaces * P(-1) ) +
+ ( V("initial") * spaces * V("step") * spaces * (P("/") * spaces * V("step") * spaces)^0 )
+ ),
+
+ protocol = Cg(V("letters"),"protocol") * P("://") + Cg(Cc(nil),"protocol"),
+
+ -- the / is needed for // as descendant or self is somewhat special
+ -- step = (V("shortcuts") + V("axis") * spaces * V("nodes")^0 + V("error")) * spaces * V("expressions")^0 * spaces * V("finalizer")^0,
+ step = ((V("shortcuts") + P("/") + V("axis")) * spaces * V("nodes")^0 + V("error")) * spaces * V("expressions")^0 * spaces * V("finalizer")^0,
+
+ axis = V("descendant") + V("child") + V("parent") + V("self") + V("root") + V("ancestor") +
+ V("descendant_or_self") + V("following_sibling") + V("following") +
+ V("reverse_sibling") + V("preceding_sibling") + V("preceding") + V("ancestor_or_self") +
+ #(1-P(-1)) * Cc(register_auto_child),
+
+ special = special_1 + special_2 + special_3,
--- not faster but hipper ... although ... i can't get rid of the trailing / in the path
+ initial = (P("/") * spaces * Cc(register_initial_child))^-1,
-local P, S, R, C, V, Cc = lpeg.P, lpeg.S, lpeg.R, lpeg.C, lpeg.V, lpeg.Cc
+ error = (P(1)^1) / register_error,
-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
+ shortcuts_a = V("s_descendant_or_self") + V("s_descendant") + V("s_child") + V("s_parent") + V("s_self") + V("s_root") + V("s_ancestor"),
-local parser = direct + action + attribute
+ shortcuts = V("shortcuts_a") * (spaces * "/" * spaces * V("shortcuts_a"))^0,
-local filters = xml.filters
-local attribute_filter = xml.filters.attributes
-local default_filter = xml.filters.default
+ s_descendant_or_self = (P("***/") + P("/")) * Cc(register_descendant_or_self), --- *** is a bonus
+ -- s_descendant_or_self = P("/") * Cc(register_descendant_or_self),
+ s_descendant = P("**") * Cc(register_descendant),
+ s_child = P("*") * #(1-P(":")) * Cc(register_child ),
+-- s_child = P("*") * #(P("/")+P(-1)) * Cc(register_child ),
+ s_parent = P("..") * Cc(register_parent ),
+ s_self = P("." ) * Cc(register_self ),
+ s_root = P("^^") * Cc(register_root ),
+ s_ancestor = P("^") * Cc(register_ancestor ),
--- todo: also hash, could be gc'd
+ descendant = P("descendant::") * Cc(register_descendant ),
+ child = P("child::") * Cc(register_child ),
+ parent = P("parent::") * Cc(register_parent ),
+ self = P("self::") * Cc(register_self ),
+ root = P('root::') * Cc(register_root ),
+ ancestor = P('ancestor::') * Cc(register_ancestor ),
+ descendant_or_self = P('descendant-or-self::') * Cc(register_descendant_or_self ),
+ ancestor_or_self = P('ancestor-or-self::') * Cc(register_ancestor_or_self ),
+ -- attribute = P('attribute::') * Cc(register_attribute ),
+ -- namespace = P('namespace::') * Cc(register_namespace ),
+ following = P('following::') * Cc(register_following ),
+ following_sibling = P('following-sibling::') * Cc(register_following_sibling ),
+ preceding = P('preceding::') * Cc(register_preceding ),
+ preceding_sibling = P('preceding-sibling::') * Cc(register_preceding_sibling ),
+ reverse_sibling = P('reverse-sibling::') * Cc(register_reverse_sibling ),
+
+ nodes = (V("nodefunction") * spaces * P("(") * V("nodeset") * P(")") + V("nodetest") * V("nodeset")) / register_nodes,
+
+ expressions = expression / register_expression,
+
+ letters = R("az")^1,
+ name = (1-lpeg.S("/[]()|:*!"))^1,
+ negate = P("!") * Cc(false),
+
+ nodefunction = V("negate") + P("not") * Cc(false) + Cc(true),
+ nodetest = V("negate") + Cc(true),
+ nodename = (V("negate") + Cc(true)) * spaces * ((V("wildnodename") * P(":") * V("wildnodename")) + (Cc(false) * V("wildnodename"))),
+ wildnodename = (C(V("name")) + P("*") * Cc(false)) * #(1-P("(")),
+ nodeset = spaces * Ct(V("nodename") * (spaces * P("|") * spaces * V("nodename"))^0) * spaces,
+
+ finalizer = (Cb("protocol") * P("/")^-1 * C(V("name")) * arguments * P(-1)) / register_finalizer,
+
+}
+
+local cache = { }
-function xml.filter(root,pattern)
- local kind, a, b, c = parser:match(pattern)
- 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)
+local function nodesettostring(set,nodetest)
+ local t = { }
+ for i=1,#set,3 do
+ local directive, ns, tg = set[i], set[i+1], set[i+2]
+ if not ns or ns == "" then ns = "*" end
+ if not tg or tg == "" then tg = "*" end
+ tg = (tg == "@rt@" and "[root]") or format("%s:%s",ns,tg)
+ t[#t+1] = (directive and tg) or format("not(%s)",tg)
+ end
+ if nodetest == false then
+ return format("not(%s)",concat(t,"|"))
else
- return default_filter(root,pattern)
+ return concat(t,"|")
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
+local function tagstostring(list)
+ if #list == 0 then
+ return "no elements"
+ else
+ local t = { }
+ for i=1, #list do
+ local li = list[i]
+ local ns, tg = li.ns, li.tg
+ if not ns or ns == "" then ns = "*" end
+ if not tg or tg == "" then tg = "*" end
+ t[#t+1] = (tg == "@rt@" and "[root]") or format("%s:%s",ns,tg)
+ end
+ return concat(t," ")
+ end
+end
---[[ldx--
-<p>The following functions collect elements and texts.</p>
---ldx]]--
+xml.nodesettostring = nodesettostring
--- still somewhat bugged
+local parse_pattern -- we have a harmless kind of circular reference
-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
+local function lshow(parsed)
+ if type(parsed) == "string" then
+ parsed = parse_pattern(parsed)
+ end
+ local s = table.serialize_functions -- ugly
+ table.serialize_functions = false -- ugly
+ logs.report("lpath","%s://%s => %s",parsed.protocol or xml.defaultprotocol,parsed.pattern,table.serialize(parsed,false))
+ table.serialize_functions = s -- ugly
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 ""
+xml.lshow = lshow
+
+local function add_comment(p,str)
+ local pc = p.comment
+ if not pc then
+ p.comment = { str }
+ else
+ pc[#pc+1] = str
+ end
+end
+
+parse_pattern = function (pattern) -- the gain of caching is rather minimal
+ lpathcalls = lpathcalls + 1
+ if type(pattern) == "table" then
+ return pattern
+ else
+ local parsed = cache[pattern]
+ if parsed then
+ lpathcached = lpathcached + 1
+ else
+ parsed = lpegmatch(parser,pattern)
+ if parsed then
+ parsed.pattern = pattern
+ local np = #parsed
+ if np == 0 then
+ parsed = { pattern = pattern, register_self, state = "parsing error" }
+ logs.report("lpath","parsing error in '%s'",pattern)
+ lshow(parsed)
else
- t[#t+1] = ""
+ -- we could have done this with a more complex parser but this
+ -- is cleaner
+ local pi = parsed[1]
+ if pi.axis == "auto-child" then
+ if false then
+ add_comment(parsed, "auto-child replaced by auto-descendant-or-self")
+ parsed[1] = register_auto_descendant_or_self
+ else
+ add_comment(parsed, "auto-child replaced by auto-descendant")
+ parsed[1] = register_auto_descendant
+ end
+ elseif pi.axis == "initial-child" and np > 1 and parsed[2].axis then
+ add_comment(parsed, "initial-child removed") -- we could also make it a auto-self
+ remove(parsed,1)
+ end
+ local np = #parsed -- can have changed
+ if np > 1 then
+ local pnp = parsed[np]
+ if pnp.kind == "nodes" and pnp.nodetest == true then
+ local nodes = pnp.nodes
+ if nodes[1] == true and nodes[2] == false and nodes[3] == false then
+ add_comment(parsed, "redundant final wildcard filter removed")
+ remove(parsed,np)
+ end
+ end
+ end
end
else
- t[#t+1] = tx or ""
+ parsed = { pattern = pattern }
+ end
+ cache[pattern] = parsed
+ if trace_lparse and not trace_lprofile then
+ lshow(parsed)
end
- else
- t[#t+1] = ""
end
- end)
- return t
+ return parsed
+ end
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
+-- we can move all calls inline and then merge the trace back
+-- technically we can combine axis and the next nodes which is
+-- what we did before but this a bit cleaner (but slower too)
+-- but interesting is that it's not that much faster when we
+-- go inline
+--
+-- beware: we need to return a collection even when we filter
+-- else the (simple) cache gets messed up
+
+-- caching found lookups saves not that much (max .1 sec on a 8 sec run)
+-- and it also messes up finalizers
+
+-- watch out: when there is a finalizer, it's always called as there
+-- can be cases that a finalizer returns (or does) something in case
+-- there is no match; an example of this is count()
+
+local profiled = { } xml.profiled = profiled
+
+local function profiled_apply(list,parsed,nofparsed,order)
+ local p = profiled[parsed.pattern]
+ if p then
+ p.tested = p.tested + 1
+ else
+ p = { tested = 1, matched = 0, finalized = 0 }
+ profiled[parsed.pattern] = p
+ end
+ local collected = list
+ for i=1,nofparsed do
+ local pi = parsed[i]
+ local kind = pi.kind
+ if kind == "axis" then
+ collected = apply_axis[pi.axis](collected)
+ elseif kind == "nodes" then
+ collected = apply_nodes(collected,pi.nodetest,pi.nodes)
+ elseif kind == "expression" then
+ collected = apply_expression(collected,pi.evaluator,order)
+ elseif kind == "finalizer" then
+ collected = pi.finalizer(collected)
+ p.matched = p.matched + 1
+ p.finalized = p.finalized + 1
+ return collected
+ end
+ if not collected or #collected == 0 then
+ local pn = i < nofparsed and parsed[nofparsed]
+ if pn and pn.kind == "finalizer" then
+ collected = pn.finalizer(collected)
+ p.finalized = p.finalized + 1
+ return collected
end
+ return nil
end
- end)
- return #t > 0 and {}
+ end
+ if collected then
+ p.matched = p.matched + 1
+ end
+ return collected
+end
+
+local function traced_apply(list,parsed,nofparsed,order)
+ if trace_lparse then
+ lshow(parsed)
+ end
+ logs.report("lpath", "collecting : %s",parsed.pattern)
+ logs.report("lpath", " root tags : %s",tagstostring(list))
+ logs.report("lpath", " order : %s",order or "unset")
+ local collected = list
+ for i=1,nofparsed do
+ local pi = parsed[i]
+ local kind = pi.kind
+ if kind == "axis" then
+ collected = apply_axis[pi.axis](collected)
+ logs.report("lpath", "% 10i : ax : %s",(collected and #collected) or 0,pi.axis)
+ elseif kind == "nodes" then
+ collected = apply_nodes(collected,pi.nodetest,pi.nodes)
+ logs.report("lpath", "% 10i : ns : %s",(collected and #collected) or 0,nodesettostring(pi.nodes,pi.nodetest))
+ elseif kind == "expression" then
+ collected = apply_expression(collected,pi.evaluator,order)
+ logs.report("lpath", "% 10i : ex : %s -> %s",(collected and #collected) or 0,pi.expression,pi.converted)
+ elseif kind == "finalizer" then
+ collected = pi.finalizer(collected)
+ logs.report("lpath", "% 10i : fi : %s : %s(%s)",(type(collected) == "table" and #collected) or 0,parsed.protocol or xml.defaultprotocol,pi.name,pi.arguments or "")
+ return collected
+ end
+ if not collected or #collected == 0 then
+ local pn = i < nofparsed and parsed[nofparsed]
+ if pn and pn.kind == "finalizer" then
+ collected = pn.finalizer(collected)
+ logs.report("lpath", "% 10i : fi : %s : %s(%s)",(type(collected) == "table" and #collected) or 0,parsed.protocol or xml.defaultprotocol,pn.name,pn.arguments or "")
+ return collected
+ end
+ return nil
+ end
+ end
+ return collected
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])
+local function normal_apply(list,parsed,nofparsed,order)
+ local collected = list
+ for i=1,nofparsed do
+ local pi = parsed[i]
+ local kind = pi.kind
+ if kind == "axis" then
+ local axis = pi.axis
+ if axis ~= "self" then
+ collected = apply_axis[axis](collected)
+ end
+ elseif kind == "nodes" then
+ collected = apply_nodes(collected,pi.nodetest,pi.nodes)
+ elseif kind == "expression" then
+ collected = apply_expression(collected,pi.evaluator,order)
+ elseif kind == "finalizer" then
+ return pi.finalizer(collected)
+ end
+ if not collected or #collected == 0 then
+ local pf = i < nofparsed and parsed[nofparsed].finalizer
+ if pf then
+ return pf(collected) -- can be anything
+ end
+ return nil
+ end
+ end
+ return collected
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
+local function parse_apply(list,pattern)
+ -- we avoid an extra call
+ local parsed = cache[pattern]
+ if parsed then
+ lpathcalls = lpathcalls + 1
+ lpathcached = lpathcached + 1
+ elseif type(pattern) == "table" then
+ lpathcalls = lpathcalls + 1
+ parsed = pattern
+ else
+ parsed = parse_pattern(pattern) or pattern
+ end
+ if not parsed then
+ return
+ end
+ local nofparsed = #parsed
+ if nofparsed == 0 then
+ return -- something is wrong
+ end
+ local one = list[1]
+ if not one then
+ return -- something is wrong
+ elseif not trace_lpath then
+ return normal_apply(list,parsed,nofparsed,one.mi)
+ elseif trace_lprofile then
+ return profiled_apply(list,parsed,nofparsed,one.mi)
+ else
+ return traced_apply(list,parsed,nofparsed,one.mi)
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
+-- internal (parsed)
-function xml.elements(root,pattern,reverse)
- return wrap(function() traverse(root, lpath(pattern), yield, reverse) end)
+expressions.child = function(e,pattern)
+ return parse_apply({ e },pattern) -- todo: cache
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)
+expressions.count = function(e,pattern)
+ local collected = parse_apply({ e },pattern) -- todo: cache
+ return (collected and #collected) or 0
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
+-- external
+
+expressions.oneof = function(s,...) -- slow
+ local t = {...} for i=1,#t do if s == t[i] then return true end end return false
+end
+expressions.error = function(str)
+ xml.error_handler("unknown function in lpath expression",tostring(str or "?"))
+ return false
+end
+expressions.undefined = function(s)
+ return s == nil
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)
+expressions.quit = function(s)
+ if s or s == nil then
+ quit_expression = true
+ end
+ return true
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)
+expressions.print = function(...)
+ print(...)
+ return true
end
---[[ldx--
-<p>We've now arrives at the functions that manipulate the tree.</p>
---ldx]]--
+expressions.contains = find
+expressions.find = find
+expressions.upper = upper
+expressions.lower = lower
+expressions.number = tonumber
+expressions.boolean = toboolean
-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
+-- user interface
+
+local function traverse(root,pattern,handle)
+ logs.report("xml","use 'xml.selection' instead for '%s'",pattern)
+ local collected = parse_apply({ root },pattern)
+ if collected then
+ for c=1,#collected do
+ local e = collected[c]
+ local r = e.__p__
+ handle(r,r.dt,e.ni)
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
- insert(d,k,element) -- untested
---~ elseif element.dt then
---~ for _,v in ipairs(element.dt) do -- i added
---~ insert(d,k,v)
---~ k = k + 1
---~ end
---~ end
- else
- local edt = element.dt
- if edt then
- for i=1,#edt do
- insert(d,k,edt[i])
- k = k + 1
- end
- end
- end
- end
+local function selection(root,pattern,handle)
+ local collected = parse_apply({ root },pattern)
+ if collected then
+ if handle then
+ for c=1,#collected do
+ handle(collected[c])
end
+ else
+ return collected
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
+xml.parse_parser = parser
+xml.parse_pattern = parse_pattern
+xml.parse_apply = parse_apply
+xml.traverse = traverse -- old method, r, d, k
+xml.selection = selection -- new method, simple handle
-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] = remove(m[2],m[3])
- end
- return deleted
+local lpath = parse_pattern
+
+xml.lpath = lpath
+
+function xml.cached_patterns()
+ return cache
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)
+-- generic function finalizer (independant namespace)
+
+local function dofunction(collected,fnc)
+ if collected then
+ local f = functions[fnc]
+ if f then
+ for c=1,#collected do
+ f(collected[c])
+ end
+ else
+ logs.report("xml","unknown function '%s'",fnc)
+ 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
+xml.finalizers.xml["function"] = dofunction
+xml.finalizers.tex["function"] = dofunction
+
+-- functions
+
+expressions.text = function(e,n)
+ local rdt = e.__p__.dt
+ return (rdt and rdt[n]) or ""
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 gmatch(attribute or "href","([^|]+)") do
- name = ek.at[a]
- if name then break end
+expressions.name = function(e,n) -- ns + tg
+ local found = false
+ n = tonumber(n) or 0
+ if n == 0 then
+ found = type(e) == "table" and e
+ elseif n < 0 then
+ local d, k = e.__p__.dt, e.ni
+ for i=k-1,1,-1 do
+ local di = d[i]
+ if type(di) == "table" then
+ if n == -1 then
+ found = di
+ break
+ else
+ n = n + 1
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)
+ else
+ local d, k = e.__p__.dt, e.ni
+ for i=k+1,#d,1 do
+ local di = d[i]
+ if type(di) == "table" then
+ if n == 1 then
+ found = di
+ break
+ else
+ n = n - 1
end
- xml.assign(d,k,xi)
end
end
end
- xml.each_element(xmldata, pattern, include)
+ 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
-function xml.strip_whitespace(root, pattern, nolines) -- strips all leading and trailing space !
- 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" then
-
- if str == "" then
- -- stripped
+expressions.tag = function(e,n) -- only tg
+ if not e then
+ return ""
+ else
+ local found = false
+ n = tonumber(n) or 0
+ if n == 0 then
+ found = (type(e) == "table") and e -- seems to fail
+ elseif n < 0 then
+ local d, k = e.__p__.dt, e.ni
+ for i=k-1,1,-1 do
+ local di = d[i]
+ if type(di) == "table" then
+ if n == -1 then
+ found = di
+ break
else
- if nolines then
- str = gsub(str,"[ \n\r\t]+"," ")
- end
- if str == "" then
- -- stripped
- else
- t[#t+1] = str
- end
+ n = n + 1
end
- else
- t[#t+1] = str
end
end
- d[k].dt = t
- end
- end)
-end
-
-local function rename_space(root, oldspace, newspace) -- fast variant
- local ndt = #root.dt
- 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
+ else
+ local d, k = e.__p__.dt, e.ni
+ for i=k+1,#d,1 do
+ local di = d[i]
+ if type(di) == "table" then
+ if n == 1 then
+ found = di
+ break
+ else
+ n = n - 1
+ end
end
end
- local edt = e.dt
- if edt then
- rename_space(edt, oldspace, newspace)
- end
end
+ return (found and found.tg) or ""
end
end
-xml.rename_space = rename_space
+--[[ldx--
+<p>This is the main filter function. It returns whatever is asked for.</p>
+--ldx]]--
-function xml.remap_tag(root, pattern, newtg)
- traverse(root, lpath(pattern), function(r,d,k)
- d[k].tg = newtg
- end)
+function xml.filter(root,pattern) -- no longer funny attribute handling here
+ return parse_apply({ root },pattern)
end
-function xml.remap_namespace(root, pattern, newns)
- traverse(root, lpath(pattern), function(r,d,k)
- d[k].ns = newns
- 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]) -- old method
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)
+for e in xml.collected(xml.load('text.xml'),"title") do
+ print(e) -- new one
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)
+</typing>
+--ldx]]--
+
+local wrap, yield = coroutine.wrap, coroutine.yield
+
+function xml.elements(root,pattern,reverse) -- r, d, k
+ local collected = parse_apply({ root },pattern)
+ if collected then
+ if reverse then
+ return wrap(function() for c=#collected,1,-1 do
+ local e = collected[c] local r = e.__p__ yield(r,r.dt,e.ni)
+ end end)
+ else
+ return wrap(function() for c=1,#collected do
+ local e = collected[c] local r = e.__p__ yield(r,r.dt,e.ni)
+ end end)
+ end
+ end
+ return wrap(function() 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
+function xml.collected(root,pattern,reverse) -- e
+ local collected = parse_apply({ root },pattern)
+ if collected then
+ if reverse then
+ return wrap(function() for c=#collected,1,-1 do yield(collected[c]) end end)
else
- found = true
+ return wrap(function() for c=1,#collected do yield(collected[c]) end end)
end
- return true
- end)
- return found
+ end
+ return wrap(function() end)
end
---[[ldx--
-<p>Here are a few synonyms.</p>
---ldx]]--
-xml.filters.position = xml.filters.index
+end -- of closure
-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
+do -- create closure to overcome 200 locals limit
-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
+if not modules then modules = { } end modules ['lxml-mis'] = {
+ 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"
+}
-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
+local concat = table.concat
+local type, next, tonumber, tostring, setmetatable, loadstring = type, next, tonumber, tostring, setmetatable, loadstring
+local format, gsub, match = string.format, string.gsub, string.match
+local lpegmatch = lpeg.match
--[[ldx--
-<p>The following helper functions best belong to the <t>lmxl-ini</t>
+<p>The following helper functions best belong to the <t>lxml-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)
+local function xmlgsub(t,old,new) -- will be replaced
local dt = t.dt
if dt then
for k=1,#dt do
@@ -5069,28 +6366,26 @@ function xml.gsub(t,old,new)
if type(v) == "string" then
dt[k] = gsub(v,old,new)
else
- xml.gsub(v,old,new)
+ xmlgsub(v,old,new)
end
end
end
end
+--~ xml.gsub = xmlgsub
+
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")
+ if d and k then
+ local dkm = d[k-1]
+ if dkm and type(dkm) == "string" then
+ local s = match(dkm,"\n(%s+)")
+ xmlgsub(dk,"\n"..rep(" ",#s),"\n")
+ end
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
+--~ xml.unescapes = { } for k,v in next, xml.escapes do xml.unescapes[v] = k end
--~ function xml.escaped (str) return (gsub(str,"(.)" , xml.escapes )) end
--~ function xml.unescaped(str) return (gsub(str,"(&.-;)", xml.unescapes)) end
@@ -5114,8 +6409,6 @@ 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)
@@ -5124,84 +6417,32 @@ local unescaped = Cs(normal * (special * normal)^0)
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
+xml.escaped_pattern = escaped
+xml.unescaped_pattern = unescaped
+xml.cleansed_pattern = cleansed
-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)
+function xml.escaped (str) return lpegmatch(escaped,str) end
+function xml.unescaped(str) return lpegmatch(unescaped,str) end
+function xml.cleansed (str) return lpegmatch(cleansed,str) end
+
+-- this might move
+
+function xml.fillin(root,pattern,str,check)
+ local e = xml.first(root,pattern)
+ if e then
+ local n = #e.dt
+ if not check or n == 0 or (n == 1 and e.dt[1] == "") then
+ e.dt = { str }
end
- else
- return ""
end
end
-function xml.statistics()
- return {
- lpathcalls = lpathcalls,
- lpathcached = lpathcached,
- }
-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.settrace("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)"))
-
end -- of closure
do -- create closure to overcome 200 locals limit
-if not modules then modules = { } end modules ['lxml-ent'] = {
+if not modules then modules = { } end modules ['lxml-aux'] = {
version = 1.001,
comment = "this module is the basis for the lxml-* ones",
author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
@@ -5209,457 +6450,836 @@ if not modules then modules = { } end modules ['lxml-ent'] = {
license = "see context related readme files"
}
-local type, next, tonumber, tostring, setmetatable, loadstring = type, next, tonumber, tostring, setmetatable, loadstring
-local format, gsub, find = string.format, string.gsub, string.find
-local utfchar = unicode.utf8.char
+-- not all functions here make sense anymore vbut we keep them for
+-- compatibility reasons
---[[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]]--
+local trace_manipulations = false trackers.register("lxml.manipulations", function(v) trace_manipulations = v end)
-xml.entities = xml.entities or { } -- xml.entity_handler == function
+local xmlparseapply, xmlconvert, xmlcopy, xmlname = xml.parse_apply, xml.convert, xml.copy, xml.name
+local xmlinheritedconvert = xml.inheritedconvert
-function xml.entity_handler(e)
- return format("[%s]",e)
-end
+local type = type
+local insert, remove = table.insert, table.remove
+local gmatch, gsub = string.gmatch, string.gsub
-local function toutf(s)
- return utfchar(tonumber(s,16))
+local function report(what,pattern,c,e)
+ logs.report("xml","%s element '%s' (root: '%s', position: %s, index: %s, pattern: %s)",what,xmlname(e),xmlname(e.__p__),c,e.ni,pattern)
end
-local 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 find(dk,"&#x.-;") then
- d[k] = gsub(dk,"&#x(.-);",toutf)
+local function withelements(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)
+ withelements(e,handle,depth+1)
+ end
end
- else
- utfize(dk)
end
end
end
-xml.utfize = utfize
+xml.withelements = withelements
-local function resolve(e) -- hex encoded always first, just to avoid mkii fallbacks
- if find(e,"^#x") then
- return utfchar(tonumber(e:sub(3),16))
- elseif find(e,"^#") then
- return utfchar(tonumber(e:sub(2)))
- else
- local ee = xml.entities[e] -- we cannot shortcut this one (is reloaded)
- if ee then
- return ee
- else
- local h = xml.entity_handler
- return (h and h(e)) or "&" .. e .. ";"
+function xml.withelement(e,n,handle) -- slow
+ if e and n ~= 0 and handle then
+ local edt = e.dt
+ if edt then
+ if n > 0 then
+ for i=1,#edt do
+ local ei = edt[i]
+ if type(ei) == "table" then
+ if n == 1 then
+ handle(ei)
+ return
+ else
+ n = n - 1
+ end
+ end
+ end
+ elseif n < 0 then
+ for i=#edt,1,-1 do
+ local ei = edt[i]
+ if type(ei) == "table" then
+ if n == -1 then
+ handle(ei)
+ return
+ else
+ n = n + 1
+ end
+ end
+ end
+ end
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 find(dk,"&.-;") then
- d[k] = gsub(dk,"&(.-);",resolve)
- end
- else
- resolve_entities(dk)
+xml.elements_only = xml.collected
+
+function xml.each_element(root,pattern,handle,reverse)
+ local collected = xmlparseapply({ root },pattern)
+ if collected then
+ if reverse then
+ for c=#collected,1,-1 do
+ handle(collected[c])
+ end
+ else
+ for c=1,#collected do
+ handle(collected[c])
end
end
+ return collected
end
end
-xml.resolve_entities = resolve_entities
+xml.process_elements = xml.each_element
-function xml.utfize_text(str)
- if find(str,"&#") then
- return (gsub(str,"&#x(.-);",toutf))
- else
- return str
+function xml.process_attributes(root,pattern,handle)
+ local collected = xmlparseapply({ root },pattern)
+ if collected and handle then
+ for c=1,#collected do
+ handle(collected[c].at)
+ end
end
+ return collected
end
-function xml.resolve_text_entities(str) -- maybe an lpeg. maybe resolve inline
- if find(str,"&") then
- return (gsub(str,"&(.-);",resolve))
- else
- return str
- end
+--[[ldx--
+<p>The following functions collect elements and texts.</p>
+--ldx]]--
+
+-- are these still needed -> lxml-cmp.lua
+
+function xml.collect_elements(root, pattern)
+ return xmlparseapply({ root },pattern)
end
-function xml.show_text_entities(str)
- if find(str,"&") then
- return (gsub(str,"&(.-);","[%1]"))
- else
- return str
+function xml.collect_texts(root, pattern, flatten) -- todo: variant with handle
+ local collected = xmlparseapply({ root },pattern)
+ if collected and flatten then
+ local xmltostring = xml.tostring
+ for c=1,#collected do
+ collected[c] = xmltostring(collected[c].dt)
+ end
end
+ return collected or { }
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 next, documententities do
- allentities[k] = v
+function xml.collect_tags(root, pattern, nonamespace)
+ local collected = xmlparseapply({ root },pattern)
+ if collected then
+ local t = { }
+ for c=1,#collected do
+ local e = collected[c]
+ local ns, tg = e.ns, e.tg
+ if nonamespace then
+ t[#t+1] = tg
+ elseif ns == "" then
+ t[#t+1] = tg
+ else
+ t[#t+1] = ns .. ":" .. tg
+ end
end
+ return t
end
end
+--[[ldx--
+<p>We've now arrived at the functions that manipulate the tree.</p>
+--ldx]]--
-end -- of closure
+local no_root = { no_root = true }
-do -- create closure to overcome 200 locals limit
+function xml.redo_ni(d)
+ for k=1,#d do
+ local dk = d[k]
+ if type(dk) == "table" then
+ dk.ni = k
+ end
+ end
+end
-if not modules then modules = { } end modules ['lxml-mis'] = {
- 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"
-}
+local function xmltoelement(whatever,root)
+ if not whatever then
+ return nil
+ end
+ local element
+ if type(whatever) == "string" then
+ element = xmlinheritedconvert(whatever,root)
+ else
+ element = whatever -- we assume a table
+ end
+ if element.error then
+ return whatever -- string
+ end
+ if element then
+ --~ if element.ri then
+ --~ element = element.dt[element.ri].dt
+ --~ else
+ --~ element = element.dt
+ --~ end
+ end
+ return element
+end
-local concat = table.concat
-local type, next, tonumber, tostring, setmetatable, loadstring = type, next, tonumber, tostring, setmetatable, loadstring
-local format, gsub = string.format, string.gsub
+xml.toelement = xmltoelement
---[[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]]--
+local function copiedelement(element,newparent)
+ if type(element) == "string" then
+ return element
+ else
+ element = xmlcopy(element).dt
+ if newparent and type(element) == "table" then
+ element.__p__ = newparent
+ end
+ return element
+ end
+end
-function xml.gsub(t,old,new)
- local dt = t.dt
- if dt then
- for k=1,#dt do
- local v = dt[k]
- if type(v) == "string" then
- dt[k] = gsub(v,old,new)
- else
- xml.gsub(v,old,new)
+function xml.delete_element(root,pattern)
+ local collected = xmlparseapply({ root },pattern)
+ if collected then
+ for c=1,#collected do
+ local e = collected[c]
+ local p = e.__p__
+ if p then
+ if trace_manipulations then
+ report('deleting',pattern,c,e)
+ end
+ local d = p.dt
+ remove(d,e.ni)
+ xml.redo_ni(d) -- can be made faster and inlined
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")
+function xml.replace_element(root,pattern,whatever)
+ local element = root and xmltoelement(whatever,root)
+ local collected = element and xmlparseapply({ root },pattern)
+ if collected then
+ for c=1,#collected do
+ local e = collected[c]
+ local p = e.__p__
+ if p then
+ if trace_manipulations then
+ report('replacing',pattern,c,e)
+ end
+ local d = p.dt
+ d[e.ni] = copiedelement(element,p)
+ xml.redo_ni(d) -- probably not needed
+ end
+ end
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)
+local function inject_element(root,pattern,whatever,prepend)
+ local element = root and xmltoelement(whatever,root)
+ local collected = element and xmlparseapply({ root },pattern)
+ if collected then
+ for c=1,#collected do
+ local e = collected[c]
+ local r = e.__p__
+ local d, k, rri = r.dt, e.ni, r.ri
+ local edt = (rri and d[rri].dt) or (d and d[k] and d[k].dt)
+ if edt then
+ local be, af
+ local cp = copiedelement(element,e)
+ if prepend then
+ be, af = cp, edt
+ else
+ be, af = edt, cp
+ end
+ for i=1,#af do
+ be[#be+1] = af[i]
+ end
+ if rri then
+ r.dt[rri].dt = be
+ else
+ d[k].dt = be
+ end
+ xml.redo_ni(d)
+ end
+ end
+ end
end
---~ xml.escapes = { ['&'] = '&amp;', ['<'] = '&lt;', ['>'] = '&gt;', ['"'] = '&quot;' }
---~ xml.unescapes = { } for k,v in pairs(xml.escapes) do xml.unescapes[v] = k end
+local function insert_element(root,pattern,whatever,before) -- todo: element als functie
+ local element = root and xmltoelement(whatever,root)
+ local collected = element and xmlparseapply({ root },pattern)
+ if collected then
+ for c=1,#collected do
+ local e = collected[c]
+ local r = e.__p__
+ local d, k = r.dt, e.ni
+ if not before then
+ k = k + 1
+ end
+ insert(d,k,copiedelement(element,r))
+ xml.redo_ni(d)
+ end
+ end
+end
---~ function xml.escaped (str) return (gsub(str,"(.)" , xml.escapes )) end
---~ function xml.unescaped(str) return (gsub(str,"(&.-;)", xml.unescapes)) end
---~ function xml.cleansed (str) return (gsub(str,"<.->" , '' )) end -- "%b<>"
+xml.insert_element = insert_element
+xml.insert_element_after = insert_element
+xml.insert_element_before = function(r,p,e) insert_element(r,p,e,true) end
+xml.inject_element = inject_element
+xml.inject_element_after = inject_element
+xml.inject_element_before = function(r,p,e) inject_element(r,p,e,true) end
-local P, S, R, C, V, Cc, Cs = lpeg.P, lpeg.S, lpeg.R, lpeg.C, lpeg.V, lpeg.Cc, lpeg.Cs
+local function include(xmldata,pattern,attribute,recursive,loaddata)
+ -- parse="text" (default: xml), encoding="" (todo)
+ -- attribute = attribute or 'href'
+ pattern = pattern or 'include'
+ loaddata = loaddata or io.loaddata
+ local collected = xmlparseapply({ xmldata },pattern)
+ if collected then
+ for c=1,#collected do
+ local ek = collected[c]
+ local name = nil
+ local ekdt = ek.dt
+ local ekat = ek.at
+ local epdt = ek.__p__.dt
+ if not attribute or attribute == "" then
+ name = (type(ekdt) == "table" and ekdt[1]) or ekdt -- ckeck, probably always tab or str
+ end
+ if not name then
+ for a in gmatch(attribute or "href","([^|]+)") do
+ name = ekat[a]
+ if name then break end
+ end
+ end
+ local data = (name and name ~= "" and loaddata(name)) or ""
+ if data == "" then
+ epdt[ek.ni] = "" -- xml.empty(d,k)
+ elseif ekat["parse"] == "text" then
+ -- for the moment hard coded
+ epdt[ek.ni] = xml.escaped(data) -- d[k] = xml.escaped(data)
+ else
+--~ local settings = xmldata.settings
+--~ settings.parent_root = xmldata -- to be tested
+--~ local xi = xmlconvert(data,settings)
+ local xi = xmlinheritedconvert(data,xmldata)
+ if not xi then
+ epdt[ek.ni] = "" -- xml.empty(d,k)
+ else
+ if recursive then
+ include(xi,pattern,attribute,recursive,loaddata)
+ end
+ epdt[ek.ni] = xml.body(xi) -- xml.assign(d,k,xi)
+ end
+ end
+ end
+ end
+end
--- 100 * 2500 * "oeps< oeps> oeps&" : gsub:lpeg|lpeg|lpeg
---
--- 1021:0335:0287:0247
+xml.include = include
--- 10 * 1000 * "oeps< oeps> oeps& asfjhalskfjh alskfjh alskfjh alskfjh ;al J;LSFDJ"
---
--- 1559:0257:0288:0190 (last one suggested by roberto)
+--~ local function manipulate(xmldata,pattern,manipulator) -- untested and might go away
+--~ local collected = xmlparseapply({ xmldata },pattern)
+--~ if collected then
+--~ local xmltostring = xml.tostring
+--~ for c=1,#collected do
+--~ local e = collected[c]
+--~ local data = manipulator(xmltostring(e))
+--~ if data == "" then
+--~ epdt[e.ni] = ""
+--~ else
+--~ local xi = xmlinheritedconvert(data,xmldata)
+--~ if not xi then
+--~ epdt[e.ni] = ""
+--~ else
+--~ epdt[e.ni] = xml.body(xi) -- xml.assign(d,k,xi)
+--~ end
+--~ end
+--~ end
+--~ end
+--~ end
--- 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)
+--~ xml.manipulate = manipulate
--- 100 * 1000 * "oeps&lt; oeps&gt; oeps&amp;" : gsub:lpeg == 0153:0280:0151:0080 (last one by roberto)
+function xml.strip_whitespace(root, pattern, nolines) -- strips all leading and trailing space !
+ local collected = xmlparseapply({ root },pattern)
+ if collected then
+ for i=1,#collected do
+ local e = collected[i]
+ local edt = e.dt
+ if edt then
+ local t = { }
+ for i=1,#edt do
+ local str = edt[i]
+ if type(str) == "string" then
+ if str == "" then
+ -- stripped
+ else
+ if nolines then
+ str = gsub(str,"[ \n\r\t]+"," ")
+ end
+ if str == "" then
+ -- stripped
+ else
+ t[#t+1] = str
+ end
+ end
+ else
+ --~ str.ni = i
+ t[#t+1] = str
+ end
+ end
+ e.dt = t
+ end
+ end
+ end
+end
--- 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)
+function xml.strip_whitespace(root, pattern, nolines, anywhere) -- strips all leading and trailing spacing
+ local collected = xmlparseapply({ root },pattern) -- beware, indices no longer are valid now
+ if collected then
+ for i=1,#collected do
+ local e = collected[i]
+ local edt = e.dt
+ if edt then
+ if anywhere then
+ local t = { }
+ for e=1,#edt do
+ local str = edt[e]
+ if type(str) ~= "string" then
+ t[#t+1] = str
+ elseif str ~= "" then
+ -- todo: lpeg for each case
+ if nolines then
+ str = gsub(str,"%s+"," ")
+ end
+ str = gsub(str,"^%s*(.-)%s*$","%1")
+ if str ~= "" then
+ t[#t+1] = str
+ end
+ end
+ end
+ e.dt = t
+ else
+ -- we can assume a regular sparse xml table with no successive strings
+ -- otherwise we should use a while loop
+ if #edt > 0 then
+ -- strip front
+ local str = edt[1]
+ if type(str) ~= "string" then
+ -- nothing
+ elseif str == "" then
+ remove(edt,1)
+ else
+ if nolines then
+ str = gsub(str,"%s+"," ")
+ end
+ str = gsub(str,"^%s+","")
+ if str == "" then
+ remove(edt,1)
+ else
+ edt[1] = str
+ end
+ end
+ end
+ if #edt > 1 then
+ -- strip end
+ local str = edt[#edt]
+ if type(str) ~= "string" then
+ -- nothing
+ elseif str == "" then
+ remove(edt)
+ else
+ if nolines then
+ str = gsub(str,"%s+"," ")
+ end
+ str = gsub(str,"%s+$","")
+ if str == "" then
+ remove(edt)
+ else
+ edt[#edt] = str
+ end
+ end
+ end
+ end
+ end
+ end
+ end
+end
--- 100 * 5000 * "oeps <oeps bla='oeps' foo='bar'> oeps </oeps> oeps " : gsub:lpeg == 623:501 msec (short tags, less difference)
+local function rename_space(root, oldspace, newspace) -- fast variant
+ local ndt = #root.dt
+ 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_space(edt, oldspace, newspace)
+ end
+ end
+ end
+end
-local cleansed = Cs(((P("<") * (1-P(">"))^0 * P(">"))/"" + 1)^0)
+xml.rename_space = rename_space
-xml.escaped_pattern = escaped
-xml.unescaped_pattern = unescaped
-xml.cleansed_pattern = cleansed
+function xml.remap_tag(root, pattern, newtg)
+ local collected = xmlparseapply({ root },pattern)
+ if collected then
+ for c=1,#collected do
+ collected[c].tg = newtg
+ end
+ end
+end
-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
+function xml.remap_namespace(root, pattern, newns)
+ local collected = xmlparseapply({ root },pattern)
+ if collected then
+ for c=1,#collected do
+ collected[c].ns = newns
+ end
+ 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)
+function xml.check_namespace(root, pattern, newns)
+ local collected = xmlparseapply({ root },pattern)
+ if collected then
+ for c=1,#collected do
+ local e = collected[c]
+ if (not e.rn or e.rn == "") and e.ns == "" then
+ e.rn = newns
+ end
end
- if lastseparator then
- return concat(result,separator or "",1,#result-1) .. (lastseparator or "") .. result[#result]
- else
- return concat(result,separator)
+ end
+end
+
+function xml.remap_name(root, pattern, newtg, newns, newrn)
+ local collected = xmlparseapply({ root },pattern)
+ if collected then
+ for c=1,#collected do
+ local e = collected[c]
+ e.tg, e.ns, e.rn = newtg, newns, newrn
end
- else
- return ""
end
end
+--[[ldx--
+<p>Here are a few synonyms.</p>
+--ldx]]--
+
+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
+
end -- of closure
do -- create closure to overcome 200 locals limit
-if not modules then modules = { } end modules ['trac-tra'] = {
+if not modules then modules = { } end modules ['lxml-xml'] = {
version = 1.001,
- comment = "companion to luat-lib.tex",
+ 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"
}
--- the <anonymous> tag is kind of generic and used for functions that are not
--- bound to a variable, like node.new, node.copy etc (contrary to for instance
--- node.has_attribute which is bound to a has_attribute local variable in mkiv)
+local finalizers = xml.finalizers.xml
+local xmlfilter = xml.filter -- we could inline this one for speed
+local xmltostring = xml.tostring
+local xmlserialize = xml.serialize
-debugger = debugger or { }
+local function first(collected) -- wrong ?
+ return collected and collected[1]
+end
-local counters = { }
-local names = { }
-local getinfo = debug.getinfo
-local format, find, lower, gmatch = string.format, string.find, string.lower, string.gmatch
+local function last(collected)
+ return collected and collected[#collected]
+end
--- one
+local function all(collected)
+ return collected
+end
-local function hook()
- local f = getinfo(2,"f").func
- local n = getinfo(2,"Sn")
--- if n.what == "C" and n.name then print (n.namewhat .. ': ' .. n.name) end
- if f then
- local cf = counters[f]
- if cf == nil then
- counters[f] = 1
- names[f] = n
- else
- counters[f] = cf + 1
+local function reverse(collected)
+ if collected then
+ local reversed = { }
+ for c=#collected,1,-1 do
+ reversed[#reversed+1] = collected[c]
end
+ return reversed
end
end
-local function getname(func)
- local n = names[func]
- if n then
- if n.what == "C" then
- return n.name or '<anonymous>'
- 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 format("%s : %s : %s", n.short_src or "unknown source", n.linedefined or "--", name)
- end
- else
- return "unknown"
+
+local function attribute(collected,name)
+ if collected and #collected > 0 then
+ local at = collected[1].at
+ return at and at[name]
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
- -- table.sort(counters)
- for func, count in pairs(counters) do
- if count > threshold then
- local name = getname(func)
- if not name:find("for generator") then
- printer(format("%8i %s", count, name))
- total = total + count
- end
- end
- grandtotal = grandtotal + count
- functions = functions + 1
- end
- printer(format("functions: %s, total: %s, grand total: %s, threshold: %s\n", functions, total, grandtotal, threshold))
+
+local function att(id,name)
+ local at = id.at
+ return at and at[name]
end
--- two
+local function count(collected)
+ return (collected and #collected) or 0
+end
---~ local function hook()
---~ local n = getinfo(2)
---~ if n.what=="C" and not n.name then
---~ local f = tostring(debug.traceback())
---~ local cf = counters[f]
---~ if cf == nil then
---~ counters[f] = 1
---~ names[f] = n
---~ else
---~ counters[f] = cf + 1
---~ end
---~ 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
---~ -- table.sort(counters)
---~ for func, count in pairs(counters) do
---~ if count > threshold then
---~ printer(format("%8i %s", count, func))
---~ total = total + count
---~ end
---~ grandtotal = grandtotal + count
---~ functions = functions + 1
---~ end
---~ printer(format("functions: %s, total: %s, grand total: %s, threshold: %s\n", functions, total, grandtotal, threshold))
---~ end
+local function position(collected,n)
+ if collected then
+ n = tonumber(n) or 0
+ if n < 0 then
+ return collected[#collected + n + 1]
+ elseif n > 0 then
+ return collected[n]
+ else
+ return collected[1].mi or 0
+ end
+ end
+end
--- rest
+local function match(collected)
+ return (collected and collected[1].mi) or 0 -- match
+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()
+local function index(collected)
+ if collected then
+ return collected[1].ni
end
end
-function debugger.enable()
- debug.sethook(hook,"c")
+local function attributes(collected,arguments)
+ if collected then
+ local at = collected[1].at
+ if arguments then
+ return at[arguments]
+ elseif next(at) then
+ return at -- all of them
+ end
+ end
end
-function debugger.disable()
- debug.sethook()
---~ counters[debug.getinfo(2,"f").func] = nil
+local function chainattribute(collected,arguments) -- todo: optional levels
+ if collected then
+ local e = collected[1]
+ while e do
+ local at = e.at
+ if at then
+ local a = at[arguments]
+ if a then
+ return a
+ end
+ else
+ break -- error
+ end
+ e = e.__p__
+ end
+ end
+ return ""
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
+local function raw(collected) -- hybrid
+ if collected then
+ local e = collected[1] or collected
+ return (e and xmlserialize(e)) or "" -- only first as we cannot concat function
else
- function debugger.tracing() return false end ; return false
+ return ""
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)
-
-trackers = trackers or { }
+local function text(collected) -- hybrid
+ if collected then
+ local e = collected[1] or collected
+ return (e and xmltostring(e.dt)) or ""
+ else
+ return ""
+ end
+end
-local data, done = { }, { }
+local function texts(collected)
+ if collected then
+ local t = { }
+ for c=1,#collected do
+ local e = collection[c]
+ if e and e.dt then
+ t[#t+1] = e.dt
+ end
+ end
+ return t
+ end
+end
-local function set(what,value)
- if type(what) == "string" then
- what = aux.settings_to_array(what)
+local function tag(collected,n)
+ if collected then
+ local c
+ if n == 0 or not n then
+ c = collected[1]
+ elseif n > 1 then
+ c = collected[n]
+ else
+ c = collected[#collected-n+1]
+ end
+ return c and c.tg
end
- for i=1,#what do
- local w = what[i]
- for d, f in next, data do
- if done[d] then
- -- prevent recursion due to wildcards
- elseif find(d,w) then
- done[d] = true
- for i=1,#f do
- f[i](value)
- end
+end
+
+local function name(collected,n)
+ if collected then
+ local c
+ if n == 0 or not n then
+ c = collected[1]
+ elseif n > 1 then
+ c = collected[n]
+ else
+ c = collected[#collected-n+1]
+ end
+ if c then
+ if c.ns == "" then
+ return c.tg
+ else
+ return c.ns .. ":" .. c.tg
end
end
end
end
-local function reset()
- for d, f in next, data do
- for i=1,#f do
- f[i](false)
+local function tags(collected,nonamespace)
+ if collected then
+ local t = { }
+ for c=1,#collected do
+ local e = collected[c]
+ local ns, tg = e.ns, e.tg
+ if nonamespace or ns == "" then
+ t[#t+1] = tg
+ else
+ t[#t+1] = ns .. ":" .. tg
+ end
end
+ return t
end
end
-function trackers.register(what,...)
- what = lower(what)
- local w = data[what]
- if not w then
- w = { }
- data[what] = w
- end
- for _, fnc in next, { ... } do
- local typ = type(fnc)
- if typ == "function" then
- w[#w+1] = fnc
- elseif typ == "string" then
- w[#w+1] = function(value) set(fnc,value,nesting) end
+local function empty(collected)
+ if collected then
+ for c=1,#collected do
+ local e = collected[c]
+ if e then
+ local edt = e.dt
+ if edt then
+ local n = #edt
+ if n == 1 then
+ local edk = edt[1]
+ local typ = type(edk)
+ if typ == "table" then
+ return false
+ elseif edk ~= "" then -- maybe an extra tester for spacing only
+ return false
+ end
+ elseif n > 1 then
+ return false
+ end
+ end
+ end
end
end
+ return true
end
-function trackers.enable(what)
- done = { }
- set(what,true)
+finalizers.first = first
+finalizers.last = last
+finalizers.all = all
+finalizers.reverse = reverse
+finalizers.elements = all
+finalizers.default = all
+finalizers.attribute = attribute
+finalizers.att = att
+finalizers.count = count
+finalizers.position = position
+finalizers.match = match
+finalizers.index = index
+finalizers.attributes = attributes
+finalizers.chainattribute = chainattribute
+finalizers.text = text
+finalizers.texts = texts
+finalizers.tag = tag
+finalizers.name = name
+finalizers.tags = tags
+finalizers.empty = empty
+
+-- shortcuts -- we could support xmlfilter(id,pattern,first)
+
+function xml.first(id,pattern)
+ return first(xmlfilter(id,pattern))
end
-function trackers.disable(what)
- done = { }
- if not what or what == "" then
- trackers.reset(what)
+function xml.last(id,pattern)
+ return last(xmlfilter(id,pattern))
+end
+
+function xml.count(id,pattern)
+ return count(xmlfilter(id,pattern))
+end
+
+function xml.attribute(id,pattern,a,default)
+ return attribute(xmlfilter(id,pattern),a,default)
+end
+
+function xml.raw(id,pattern)
+ if pattern then
+ return raw(xmlfilter(id,pattern))
else
- set(what,false)
+ return raw(id)
end
end
-function trackers.reset(what)
- done = { }
- reset()
+function xml.text(id,pattern)
+ if pattern then
+ -- return text(xmlfilter(id,pattern))
+ local collected = xmlfilter(id,pattern)
+ return (collected and xmltostring(collected[1].dt)) or ""
+ elseif id then
+ -- return text(id)
+ return xmltostring(id.dt) or ""
+ else
+ return ""
+ end
end
-function trackers.list() -- pattern
- local list = table.sortedkeys(data)
- local user, system = { }, { }
- for l=1,#list do
- local what = list[l]
- if find(what,"^%*") then
- system[#system+1] = what
- else
- user[#user+1] = what
- end
- end
- return user, system
+xml.content = text
+
+function xml.position(id,pattern,n) -- element
+ return position(xmlfilter(id,pattern),n)
+end
+
+function xml.match(id,pattern) -- number
+ return match(xmlfilter(id,pattern))
+end
+
+function xml.empty(id,pattern)
+ return empty(xmlfilter(id,pattern))
end
+xml.all = xml.filter
+xml.index = xml.position
+xml.found = xml.filter
+
end -- of closure
@@ -5667,7 +7287,7 @@ do -- create closure to overcome 200 locals limit
if not modules then modules = { } end modules ['luat-env'] = {
version = 1.001,
- comment = "companion to luat-lib.tex",
+ comment = "companion to luat-lib.mkiv",
author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
copyright = "PRAGMA ADE / ConTeXt Development Team",
license = "see context related readme files"
@@ -5679,10 +7299,10 @@ if not modules then modules = { } end modules ['luat-env'] = {
-- evolved before bytecode arrays were available and so a lot of
-- code has disappeared already.
-local trace_verbose = false trackers.register("resolvers.verbose", function(v) trace_verbose = v end)
-local trace_locating = false trackers.register("resolvers.locating", function(v) trace_locating = v trackers.enable("resolvers.verbose") end)
+local trace_locating = false trackers.register("resolvers.locating", function(v) trace_locating = v end)
-local format = string.format
+local format, sub, match, gsub, find = string.format, string.sub, string.match, string.gsub, string.find
+local unquote, quote = string.unquote, string.quote
-- precautions
@@ -5716,13 +7336,14 @@ if not environment.jobname then environ
function environment.initialize_arguments(arg)
local arguments, files = { }, { }
environment.arguments, environment.files, environment.sortedflags = arguments, files, nil
- for index, argument in pairs(arg) do
+ for index=1,#arg do
+ local argument = arg[index]
if index > 0 then
- local flag, value = argument:match("^%-+(.+)=(.-)$")
+ local flag, value = match(argument,"^%-+(.-)=(.-)$")
if flag then
- arguments[flag] = string.unquote(value or "")
+ arguments[flag] = unquote(value or "")
else
- flag = argument:match("^%-+(.+)")
+ flag = match(argument,"^%-+(.+)")
if flag then
arguments[flag] = true
else
@@ -5749,25 +7370,30 @@ function environment.argument(name,partial)
return arguments[name]
elseif partial then
if not sortedflags then
- sortedflags = { }
- for _,v in pairs(table.sortedkeys(arguments)) do
- sortedflags[#sortedflags+1] = "^" .. v
+ sortedflags = table.sortedkeys(arguments)
+ for k=1,#sortedflags do
+ sortedflags[k] = "^" .. sortedflags[k]
end
environment.sortedflags = sortedflags
end
-- example of potential clash: ^mode ^modefile
- for _,v in ipairs(sortedflags) do
- if name:find(v) then
- return arguments[v:sub(2,#v)]
+ for k=1,#sortedflags do
+ local v = sortedflags[k]
+ if find(name,v) then
+ return arguments[sub(v,2,#v)]
end
end
end
return nil
end
+environment.argument("x",true)
+
function environment.split_arguments(separator) -- rather special, cut-off before separator
local done, before, after = false, { }, { }
- for _,v in ipairs(environment.original_arguments) do
+ local original_arguments = environment.original_arguments
+ for k=1,#original_arguments do
+ local v = original_arguments[k]
if not done and v == separator then
done = true
elseif done then
@@ -5784,16 +7410,17 @@ function environment.reconstruct_commandline(arg,noquote)
if noquote and #arg == 1 then
local a = arg[1]
a = resolvers.resolve(a)
- a = a:unquote()
+ a = unquote(a)
return a
- elseif next(arg) then
+ elseif #arg > 0 then
local result = { }
- for _,a in ipairs(arg) do -- ipairs 1 .. #n
+ for i=1,#arg do
+ local a = arg[i]
a = resolvers.resolve(a)
- a = a:unquote()
- a = a:gsub('"','\\"') -- tricky
- if a:find(" ") then
- result[#result+1] = a:quote()
+ a = unquote(a)
+ a = gsub(a,'"','\\"') -- tricky
+ if find(a," ") then
+ result[#result+1] = quote(a)
else
result[#result+1] = a
end
@@ -5806,17 +7433,18 @@ end
if arg then
- -- new, reconstruct quoted snippets (maybe better just remnove the " then and add them later)
+ -- new, reconstruct quoted snippets (maybe better just remove the " then and add them later)
local newarg, instring = { }, false
- for index, argument in ipairs(arg) do
- if argument:find("^\"") then
- newarg[#newarg+1] = argument:gsub("^\"","")
- if not argument:find("\"$") then
+ for index=1,#arg do
+ local argument = arg[index]
+ if find(argument,"^\"") then
+ newarg[#newarg+1] = gsub(argument,"^\"","")
+ if not find(argument,"\"$") then
instring = true
end
- elseif argument:find("\"$") then
- newarg[#newarg] = newarg[#newarg] .. " " .. argument:gsub("\"$","")
+ elseif find(argument,"\"$") then
+ newarg[#newarg] = newarg[#newarg] .. " " .. gsub(argument,"\"$","")
instring = false
elseif instring then
newarg[#newarg] = newarg[#newarg] .. " " .. argument
@@ -5871,12 +7499,12 @@ function environment.luafilechunk(filename) -- used for loading lua bytecode in
filename = file.replacesuffix(filename, "lua")
local fullname = environment.luafile(filename)
if fullname and fullname ~= "" then
- if trace_verbose then
+ if trace_locating then
logs.report("fileio","loading file %s", fullname)
end
return environment.loadedluacode(fullname)
else
- if trace_verbose then
+ if trace_locating then
logs.report("fileio","unknown file %s", filename)
end
return nil
@@ -5896,7 +7524,7 @@ function environment.loadluafile(filename, version)
-- when not overloaded by explicit suffix we look for a luc file first
local fullname = (lucname and environment.luafile(lucname)) or ""
if fullname ~= "" then
- if trace_verbose then
+ if trace_locating then
logs.report("fileio","loading %s", fullname)
end
chunk = loadfile(fullname) -- this way we don't need a file exists check
@@ -5914,7 +7542,7 @@ function environment.loadluafile(filename, version)
if v == version then
return true
else
- if trace_verbose then
+ if trace_locating then
logs.report("fileio","version mismatch for %s: lua=%s, luc=%s", filename, v, version)
end
environment.loadluafile(filename)
@@ -5925,12 +7553,12 @@ function environment.loadluafile(filename, version)
end
fullname = (luaname and environment.luafile(luaname)) or ""
if fullname ~= "" then
- if trace_verbose then
+ if trace_locating then
logs.report("fileio","loading %s", fullname)
end
chunk = loadfile(fullname) -- this way we don't need a file exists check
if not chunk then
- if verbose then
+ if trace_locating then
logs.report("fileio","unknown file %s", filename)
end
else
@@ -5948,7 +7576,7 @@ do -- create closure to overcome 200 locals limit
if not modules then modules = { } end modules ['trac-inf'] = {
version = 1.001,
- comment = "companion to luat-lib.tex",
+ comment = "companion to trac-inf.mkiv",
author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
copyright = "PRAGMA ADE / ConTeXt Development Team",
license = "see context related readme files"
@@ -5973,6 +7601,14 @@ function statistics.hastimer(instance)
return instance and instance.starttime
end
+function statistics.resettiming(instance)
+ if not instance then
+ notimer = { timing = 0, loadtime = 0 }
+ else
+ instance.timing, instance.loadtime = 0, 0
+ end
+end
+
function statistics.starttiming(instance)
if not instance then
notimer = { }
@@ -5987,6 +7623,8 @@ function statistics.starttiming(instance)
if not instance.loadtime then
instance.loadtime = 0
end
+ else
+--~ logs.report("system","nested timing (%s)",tostring(instance))
end
instance.timing = it + 1
end
@@ -6032,6 +7670,12 @@ function statistics.elapsedindeed(instance)
return t > statistics.threshold
end
+function statistics.elapsedseconds(instance,rest) -- returns nil if 0 seconds
+ if statistics.elapsedindeed(instance) then
+ return format("%s seconds %s", statistics.elapsedtime(instance),rest or "")
+ end
+end
+
-- general function
function statistics.register(tag,fnc)
@@ -6110,14 +7754,32 @@ function statistics.timed(action,report)
report("total runtime: %s",statistics.elapsedtime(timer))
end
+-- where, not really the best spot for this:
+
+commands = commands or { }
+
+local timer
+
+function commands.resettimer()
+ statistics.resettiming(timer)
+ statistics.starttiming(timer)
+end
+
+function commands.elapsedtime()
+ statistics.stoptiming(timer)
+ tex.sprint(statistics.elapsedtime(timer))
+end
+
+commands.resettimer()
+
end -- of closure
do -- create closure to overcome 200 locals limit
-if not modules then modules = { } end modules ['luat-log'] = {
+if not modules then modules = { } end modules ['trac-log'] = {
version = 1.001,
- comment = "companion to luat-lib.tex",
+ comment = "companion to trac-log.mkiv",
author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
copyright = "PRAGMA ADE / ConTeXt Development Team",
license = "see context related readme files"
@@ -6125,7 +7787,11 @@ if not modules then modules = { } end modules ['luat-log'] = {
-- this is old code that needs an overhaul
-local write_nl, write, format = texio.write_nl or print, texio.write or io.write, string.format
+--~ io.stdout:setvbuf("no")
+--~ io.stderr:setvbuf("no")
+
+local write_nl, write = texio.write_nl or print, texio.write or io.write
+local format, gmatch = string.format, string.gmatch
local texcount = tex and tex.count
if texlua then
@@ -6206,25 +7872,48 @@ function logs.tex.line(fmt,...) -- new
end
end
+--~ function logs.tex.start_page_number()
+--~ local real, user, sub = texcount.realpageno, texcount.userpageno, texcount.subpageno
+--~ if real > 0 then
+--~ if user > 0 then
+--~ if sub > 0 then
+--~ write(format("[%s.%s.%s",real,user,sub))
+--~ else
+--~ write(format("[%s.%s",real,user))
+--~ end
+--~ else
+--~ write(format("[%s",real))
+--~ end
+--~ else
+--~ write("[-")
+--~ end
+--~ end
+
+--~ function logs.tex.stop_page_number()
+--~ write("]")
+--~ end
+
+local real, user, sub
+
function logs.tex.start_page_number()
- local real, user, sub = texcount.realpageno, texcount.userpageno, texcount.subpageno
+ real, user, sub = texcount.realpageno, texcount.userpageno, texcount.subpageno
+end
+
+function logs.tex.stop_page_number()
if real > 0 then
if user > 0 then
if sub > 0 then
- write(format("[%s.%s.%s",real,user,sub))
+ logs.report("pages", "flushing realpage %s, userpage %s, subpage %s",real,user,sub)
else
- write(format("[%s.%s",real,user))
+ logs.report("pages", "flushing realpage %s, userpage %s",real,user)
end
else
- write(format("[%s",real))
+ logs.report("pages", "flushing realpage %s",real)
end
else
- write("[-")
+ logs.report("pages", "flushing page")
end
-end
-
-function logs.tex.stop_page_number()
- write("]")
+ io.flush()
end
logs.tex.report_job_stat = statistics.show_job_stat
@@ -6324,7 +8013,7 @@ end
function logs.setprogram(_name_,_banner_,_verbose_)
name, banner = _name_, _banner_
if _verbose_ then
- trackers.enable("resolvers.verbose")
+ trackers.enable("resolvers.locating")
end
logs.set_method("tex")
logs.report = report -- also used in libraries
@@ -6337,9 +8026,9 @@ end
function logs.setverbose(what)
if what then
- trackers.enable("resolvers.verbose")
+ trackers.enable("resolvers.locating")
else
- trackers.disable("resolvers.verbose")
+ trackers.disable("resolvers.locating")
end
logs.verbose = what or false
end
@@ -6356,7 +8045,7 @@ logs.report = logs.tex.report
logs.simple = logs.tex.report
function logs.reportlines(str) -- todo: <lines></lines>
- for line in str:gmatch("(.-)[\n\r]") do
+ for line in gmatch(str,"(.-)[\n\r]") do
logs.report(line)
end
end
@@ -6367,8 +8056,12 @@ end
logs.simpleline = logs.reportline
-function logs.help(message,option)
+function logs.reportbanner() -- for scripts too
logs.report(banner)
+end
+
+function logs.help(message,option)
+ logs.reportbanner()
logs.reportline()
logs.reportlines(message)
local moreinfo = logs.moreinfo or ""
@@ -6400,6 +8093,11 @@ end
--~ logs.system(syslogname,"context","test","fonts","font %s recached due to newer version (%s)","blabla","123")
--~ end
+function logs.fatal(where,...)
+ logs.report(where,"fatal error: %s, aborting now",format(...))
+ os.exit()
+end
+
end -- of closure
@@ -6407,10 +8105,10 @@ do -- create closure to overcome 200 locals limit
if not modules then modules = { } end modules ['data-inp'] = {
version = 1.001,
+ comment = "companion to luat-lib.mkiv",
author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
copyright = "PRAGMA ADE / ConTeXt Development Team",
license = "see context related readme files",
- comment = "companion to luat-lib.tex",
}
-- After a few years using the code the large luat-inp.lua file
@@ -6422,7 +8120,7 @@ if not modules then modules = { } end modules ['data-inp'] = {
-- * some public auxiliary functions were made private
--
-- TODO: os.getenv -> os.env[]
--- TODO: instances.[hashes,cnffiles,configurations,522] -> ipairs (alles check, sneller)
+-- TODO: instances.[hashes,cnffiles,configurations,522]
-- TODO: check escaping in find etc, too much, too slow
-- This lib is multi-purpose and can be loaded again later on so that
@@ -6443,12 +8141,13 @@ if not modules then modules = { } end modules ['data-inp'] = {
local format, gsub, find, lower, upper, match, gmatch = string.format, string.gsub, string.find, string.lower, string.upper, string.match, string.gmatch
local concat, insert, sortedkeys = table.concat, table.insert, table.sortedkeys
local next, type = next, type
+local lpegmatch = lpeg.match
-local trace_locating, trace_detail, trace_verbose = false, false, false
+local trace_locating, trace_detail, trace_expansions = false, false, false
-trackers.register("resolvers.verbose", function(v) trace_verbose = v end)
-trackers.register("resolvers.locating", function(v) trace_locating = v trackers.enable("resolvers.verbose") end)
-trackers.register("resolvers.detail", function(v) trace_detail = v trackers.enable("resolvers.verbose,resolvers.detail") end)
+trackers.register("resolvers.locating", function(v) trace_locating = v end)
+trackers.register("resolvers.details", function(v) trace_detail = v end)
+trackers.register("resolvers.expansions", function(v) trace_expansions = v end) -- todo
if not resolvers then
resolvers = {
@@ -6472,7 +8171,7 @@ resolvers.generators.notfound = { nil }
resolvers.cacheversion = '1.0.1'
resolvers.cnfname = 'texmf.cnf'
resolvers.luaname = 'texmfcnf.lua'
-resolvers.homedir = os.env[os.platform == "windows" and 'USERPROFILE'] or os.env['HOME'] or '~'
+resolvers.homedir = os.env[os.type == "windows" and 'USERPROFILE'] or os.env['HOME'] or '~'
resolvers.cnfdefault = '{$SELFAUTODIR,$SELFAUTOPARENT}{,{/share,}/texmf{-local,.local,}/web2c}'
local dummy_path_expr = "^!*unset/*$"
@@ -6514,8 +8213,8 @@ suffixes['lua'] = { 'lua', 'luc', 'tma', 'tmc' }
alternatives['map files'] = 'map'
alternatives['enc files'] = 'enc'
-alternatives['cid files'] = 'cid'
-alternatives['fea files'] = 'fea'
+alternatives['cid maps'] = 'cid' -- great, why no cid files
+alternatives['font feature files'] = 'fea' -- and fea files here
alternatives['opentype fonts'] = 'otf'
alternatives['truetype fonts'] = 'ttf'
alternatives['truetype collections'] = 'ttc'
@@ -6531,6 +8230,11 @@ formats ['sfd'] = 'SFDFONTS'
suffixes ['sfd'] = { 'sfd' }
alternatives['subfont definition files'] = 'sfd'
+-- lib paths
+
+formats ['lib'] = 'CLUAINPUTS' -- new (needs checking)
+suffixes['lib'] = (os.libsuffix and { os.libsuffix }) or { 'dll', 'so' }
+
-- In practice we will work within one tds tree, but i want to keep
-- the option open to build tools that look at multiple trees, which is
-- why we keep the tree specific data in a table. We used to pass the
@@ -6653,8 +8357,10 @@ local function check_configuration() -- not yet ok, no time for debugging now
-- bad luck
end
fix("LUAINPUTS" , ".;$TEXINPUTS;$TEXMFSCRIPTS") -- no progname, hm
- fix("FONTFEATURES", ".;$TEXMF/fonts/fea//;$OPENTYPEFONTS;$TTFONTS;$T1FONTS;$AFMFONTS")
- fix("FONTCIDMAPS" , ".;$TEXMF/fonts/cid//;$OPENTYPEFONTS;$TTFONTS;$T1FONTS;$AFMFONTS")
+ -- this will go away some day
+ fix("FONTFEATURES", ".;$TEXMF/fonts/{data,fea}//;$OPENTYPEFONTS;$TTFONTS;$T1FONTS;$AFMFONTS")
+ fix("FONTCIDMAPS" , ".;$TEXMF/fonts/{data,cid}//;$OPENTYPEFONTS;$TTFONTS;$T1FONTS;$AFMFONTS")
+ --
fix("LUATEXLIBS" , ".;$TEXMF/luatex/lua//")
end
@@ -6669,7 +8375,7 @@ function resolvers.settrace(n) -- no longer number but: 'locating' or 'detail'
end
end
-resolvers.settrace(os.getenv("MTX.resolvers.TRACE") or os.getenv("MTX_INPUT_TRACE"))
+resolvers.settrace(os.getenv("MTX_INPUT_TRACE"))
function resolvers.osenv(key)
local ie = instance.environment
@@ -6757,37 +8463,43 @@ end
-- work that well; the parsing is ok, but dealing with the resulting
-- table is a pain because we need to work inside-out recursively
+local function do_first(a,b)
+ local t = { }
+ for s in gmatch(b,"[^,]+") do t[#t+1] = a .. s end
+ return "{" .. concat(t,",") .. "}"
+end
+
+local function do_second(a,b)
+ local t = { }
+ for s in gmatch(a,"[^,]+") do t[#t+1] = s .. b end
+ return "{" .. concat(t,",") .. "}"
+end
+
+local function do_both(a,b)
+ local t = { }
+ for sa in gmatch(a,"[^,]+") do
+ for sb in gmatch(b,"[^,]+") do
+ t[#t+1] = sa .. sb
+ end
+ end
+ return "{" .. concat(t,",") .. "}"
+end
+
+local function do_three(a,b,c)
+ return a .. b.. c
+end
+
local function splitpathexpr(str, t, validate)
-- no need for further optimization as it is only called a
- -- few times, we can use lpeg for the sub; we could move
- -- the local functions outside the body
+ -- few times, we can use lpeg for the sub
+ if trace_expansions then
+ logs.report("fileio","expanding variable '%s'",str)
+ end
t = t or { }
str = gsub(str,",}",",@}")
str = gsub(str,"{,","{@,")
-- str = "@" .. str .. "@"
local ok, done
- local function do_first(a,b)
- local t = { }
- for s in gmatch(b,"[^,]+") do t[#t+1] = a .. s end
- return "{" .. concat(t,",") .. "}"
- end
- local function do_second(a,b)
- local t = { }
- for s in gmatch(a,"[^,]+") do t[#t+1] = s .. b end
- return "{" .. concat(t,",") .. "}"
- end
- local function do_both(a,b)
- local t = { }
- for sa in gmatch(a,"[^,]+") do
- for sb in gmatch(b,"[^,]+") do
- t[#t+1] = sa .. sb
- end
- end
- return "{" .. concat(t,",") .. "}"
- end
- local function do_three(a,b,c)
- return a .. b.. c
- end
while true do
done = false
while true do
@@ -6818,6 +8530,11 @@ local function splitpathexpr(str, t, validate)
t[#t+1] = s
end
end
+ if trace_expansions then
+ for k=1,#t do
+ logs.report("fileio","% 4i: %s",k,t[k])
+ end
+ end
return t
end
@@ -6857,18 +8574,27 @@ end
-- also we now follow the stupid route: if not set then just assume *one*
-- cnf file under texmf (i.e. distribution)
-resolvers.ownpath = resolvers.ownpath or nil
-resolvers.ownbin = resolvers.ownbin or arg[-2] or arg[-1] or arg[0] or "luatex"
-resolvers.autoselfdir = true -- false may be handy for debugging
+local args = environment and environment.original_arguments or arg -- this needs a cleanup
+
+resolvers.ownbin = resolvers.ownbin or args[-2] or arg[-2] or args[-1] or arg[-1] or arg[0] or "luatex"
+resolvers.ownbin = gsub(resolvers.ownbin,"\\","/")
function resolvers.getownpath()
- if not resolvers.ownpath then
- if resolvers.autoselfdir and os.selfdir then
- resolvers.ownpath = os.selfdir
- else
- local binary = resolvers.ownbin
- if os.platform == "windows" then
- binary = file.replacesuffix(binary,"exe")
+ local ownpath = resolvers.ownpath or os.selfdir
+ if not ownpath or ownpath == "" or ownpath == "unset" then
+ ownpath = args[-1] or arg[-1]
+ ownpath = ownpath and file.dirname(gsub(ownpath,"\\","/"))
+ if not ownpath or ownpath == "" then
+ ownpath = args[-0] or arg[-0]
+ ownpath = ownpath and file.dirname(gsub(ownpath,"\\","/"))
+ end
+ local binary = resolvers.ownbin
+ if not ownpath or ownpath == "" then
+ ownpath = ownpath and file.dirname(binary)
+ end
+ if not ownpath or ownpath == "" then
+ if os.binsuffix ~= "" then
+ binary = file.replacesuffix(binary,os.binsuffix)
end
for p in gmatch(os.getenv("PATH"),"[^"..io.pathseparator.."]+") do
local b = file.join(p,binary)
@@ -6880,30 +8606,39 @@ function resolvers.getownpath()
local olddir = lfs.currentdir()
if lfs.chdir(p) then
local pp = lfs.currentdir()
- if trace_verbose and p ~= pp then
- logs.report("fileio","following symlink %s to %s",p,pp)
+ if trace_locating and p ~= pp then
+ logs.report("fileio","following symlink '%s' to '%s'",p,pp)
end
- resolvers.ownpath = pp
+ ownpath = pp
lfs.chdir(olddir)
else
- if trace_verbose then
- logs.report("fileio","unable to check path %s",p)
+ if trace_locating then
+ logs.report("fileio","unable to check path '%s'",p)
end
- resolvers.ownpath = p
+ ownpath = p
end
break
end
end
end
- if not resolvers.ownpath then resolvers.ownpath = '.' end
+ if not ownpath or ownpath == "" then
+ ownpath = "."
+ logs.report("fileio","forcing fallback ownpath .")
+ elseif trace_locating then
+ logs.report("fileio","using ownpath '%s'",ownpath)
+ end
+ end
+ resolvers.ownpath = ownpath
+ function resolvers.getownpath()
+ return resolvers.ownpath
end
- return resolvers.ownpath
+ return ownpath
end
local own_places = { "SELFAUTOLOC", "SELFAUTODIR", "SELFAUTOPARENT", "TEXMFCNF" }
local function identify_own()
- local ownpath = resolvers.getownpath() or lfs.currentdir()
+ local ownpath = resolvers.getownpath() or dir.current()
local ie = instance.environment
if ownpath then
if resolvers.env('SELFAUTOLOC') == "" then os.env['SELFAUTOLOC'] = file.collapse_path(ownpath) end
@@ -6916,10 +8651,10 @@ local function identify_own()
if resolvers.env('TEXMFCNF') == "" then os.env['TEXMFCNF'] = resolvers.cnfdefault end
if resolvers.env('TEXOS') == "" then os.env['TEXOS'] = resolvers.env('SELFAUTODIR') end
if resolvers.env('TEXROOT') == "" then os.env['TEXROOT'] = resolvers.env('SELFAUTOPARENT') end
- if trace_verbose then
+ if trace_locating then
for i=1,#own_places do
local v = own_places[i]
- logs.report("fileio","variable %s set to %s",v,resolvers.env(v) or "unknown")
+ logs.report("fileio","variable '%s' set to '%s'",v,resolvers.env(v) or "unknown")
end
end
identify_own = function() end
@@ -6951,10 +8686,8 @@ end
local function load_cnf_file(fname)
fname = resolvers.clean_path(fname)
local lname = file.replacesuffix(fname,'lua')
- local f = io.open(lname)
- if f then -- this will go
- f:close()
- local dname = file.dirname(fname)
+ if lfs.isfile(lname) then
+ local dname = file.dirname(fname) -- fname ?
if not instance.configuration[dname] then
resolvers.load_data(dname,'configuration',lname and file.basename(lname))
instance.order[#instance.order+1] = instance.configuration[dname]
@@ -6962,8 +8695,8 @@ local function load_cnf_file(fname)
else
f = io.open(fname)
if f then
- if trace_verbose then
- logs.report("fileio","loading %s", fname)
+ if trace_locating then
+ logs.report("fileio","loading configuration file %s", fname)
end
local line, data, n, k, v
local dname = file.dirname(fname)
@@ -6997,14 +8730,16 @@ local function load_cnf_file(fname)
end
end
f:close()
- elseif trace_verbose then
- logs.report("fileio","skipping %s", fname)
+ elseif trace_locating then
+ logs.report("fileio","skipping configuration file '%s'", fname)
end
end
end
local function collapse_cnf_data() -- potential optimization: pass start index (setup and configuration are shared)
- for _,c in ipairs(instance.order) do
+ local order = instance.order
+ for i=1,#order do
+ local c = order[i]
for k,v in next, c do
if not instance.variables[k] then
if instance.environment[k] then
@@ -7020,19 +8755,24 @@ end
function resolvers.load_cnf()
local function loadoldconfigdata()
- for _, fname in ipairs(instance.cnffiles) do
- load_cnf_file(fname)
+ local cnffiles = instance.cnffiles
+ for i=1,#cnffiles do
+ load_cnf_file(cnffiles[i])
end
end
-- instance.cnffiles contain complete names now !
+ -- we still use a funny mix of cnf and new but soon
+ -- we will switch to lua exclusively as we only use
+ -- the file to collect the tree roots
if #instance.cnffiles == 0 then
- if trace_verbose then
+ if trace_locating then
logs.report("fileio","no cnf files found (TEXMFCNF may not be set/known)")
end
else
- instance.rootpath = instance.cnffiles[1]
- for k,fname in ipairs(instance.cnffiles) do
- instance.cnffiles[k] = file.collapse_path(gsub(fname,"\\",'/'))
+ local cnffiles = instance.cnffiles
+ instance.rootpath = cnffiles[1]
+ for k=1,#cnffiles do
+ instance.cnffiles[k] = file.collapse_path(cnffiles[k])
end
for i=1,3 do
instance.rootpath = file.dirname(instance.rootpath)
@@ -7060,8 +8800,9 @@ function resolvers.load_lua()
-- yet harmless
else
instance.rootpath = instance.luafiles[1]
- for k,fname in ipairs(instance.luafiles) do
- instance.luafiles[k] = file.collapse_path(gsub(fname,"\\",'/'))
+ local luafiles = instance.luafiles
+ for k=1,#luafiles do
+ instance.luafiles[k] = file.collapse_path(luafiles[k])
end
for i=1,3 do
instance.rootpath = file.dirname(instance.rootpath)
@@ -7093,14 +8834,14 @@ end
function resolvers.append_hash(type,tag,name)
if trace_locating then
- logs.report("fileio","= hash append: %s",tag)
+ logs.report("fileio","hash '%s' appended",tag)
end
insert(instance.hashes, { ['type']=type, ['tag']=tag, ['name']=name } )
end
function resolvers.prepend_hash(type,tag,name)
if trace_locating then
- logs.report("fileio","= hash prepend: %s",tag)
+ logs.report("fileio","hash '%s' prepended",tag)
end
insert(instance.hashes, 1, { ['type']=type, ['tag']=tag, ['name']=name } )
end
@@ -7124,9 +8865,11 @@ end
-- locators
function resolvers.locatelists()
- for _, path in ipairs(resolvers.clean_path_list('TEXMF')) do
- if trace_verbose then
- logs.report("fileio","locating list of %s",path)
+ local texmfpaths = resolvers.clean_path_list('TEXMF')
+ for i=1,#texmfpaths do
+ local path = texmfpaths[i]
+ if trace_locating then
+ logs.report("fileio","locating list of '%s'",path)
end
resolvers.locatedatabase(file.collapse_path(path))
end
@@ -7139,11 +8882,11 @@ end
function resolvers.locators.tex(specification)
if specification and specification ~= '' and lfs.isdir(specification) then
if trace_locating then
- logs.report("fileio",'! tex locator found: %s',specification)
+ logs.report("fileio","tex locator '%s' found",specification)
end
resolvers.append_hash('file',specification,filename)
elseif trace_locating then
- logs.report("fileio",'? tex locator not found: %s',specification)
+ logs.report("fileio","tex locator '%s' not found",specification)
end
end
@@ -7157,7 +8900,9 @@ function resolvers.loadfiles()
instance.loaderror = false
instance.files = { }
if not instance.renewcache then
- for _, hash in ipairs(instance.hashes) do
+ local hashes = instance.hashes
+ for k=1,#hashes do
+ local hash = hashes[k]
resolvers.hashdatabase(hash.tag,hash.name)
if instance.loaderror then break end
end
@@ -7171,8 +8916,9 @@ end
-- generators:
function resolvers.loadlists()
- for _, hash in ipairs(instance.hashes) do
- resolvers.generatedatabase(hash.tag)
+ local hashes = instance.hashes
+ for i=1,#hashes do
+ resolvers.generatedatabase(hashes[i].tag)
end
end
@@ -7184,10 +8930,27 @@ end
local weird = lpeg.P(".")^1 + lpeg.anywhere(lpeg.S("~`!#$%^&*()={}[]:;\"\'||<>,?\n\r\t"))
+--~ local l_forbidden = lpeg.S("~`!#$%^&*()={}[]:;\"\'||\\/<>,?\n\r\t")
+--~ local l_confusing = lpeg.P(" ")
+--~ local l_character = lpeg.patterns.utf8
+--~ local l_dangerous = lpeg.P(".")
+
+--~ local l_normal = (l_character - l_forbidden - l_confusing - l_dangerous) * (l_character - l_forbidden - l_confusing^2)^0 * lpeg.P(-1)
+--~ ----- l_normal = l_normal * lpeg.Cc(true) + lpeg.Cc(false)
+
+--~ local function test(str)
+--~ print(str,lpeg.match(l_normal,str))
+--~ end
+--~ test("ヒラギノ明朝 Pro W3")
+--~ test("..ヒラギノ明朝 Pro W3")
+--~ test(":ヒラギノ明朝 Pro W3;")
+--~ test("ヒラギノ明朝 /Pro W3;")
+--~ test("ヒラギノ明朝 Pro W3")
+
function resolvers.generators.tex(specification)
local tag = specification
- if trace_verbose then
- logs.report("fileio","scanning path %s",specification)
+ if trace_locating then
+ logs.report("fileio","scanning path '%s'",specification)
end
instance.files[tag] = { }
local files = instance.files[tag]
@@ -7203,7 +8966,8 @@ function resolvers.generators.tex(specification)
full = spec
end
for name in directory(full) do
- if not weird:match(name) then
+ if not lpegmatch(weird,name) then
+ -- if lpegmatch(l_normal,name) then
local mode = attributes(full..name,'mode')
if mode == 'file' then
if path then
@@ -7236,7 +9000,7 @@ function resolvers.generators.tex(specification)
end
end
action()
- if trace_verbose then
+ if trace_locating then
logs.report("fileio","%s files found on %s directories with %s uppercase remappings",n,m,r)
end
end
@@ -7251,11 +9015,48 @@ end
-- we join them and split them after the expansion has taken place. This
-- is more convenient.
+--~ local checkedsplit = string.checkedsplit
+
+local cache = { }
+
+local splitter = lpeg.Ct(lpeg.splitat(lpeg.S(os.type == "windows" and ";" or ":;")))
+
+local function split_kpse_path(str) -- beware, this can be either a path or a {specification}
+ local found = cache[str]
+ if not found then
+ if str == "" then
+ found = { }
+ else
+ str = gsub(str,"\\","/")
+--~ local split = (find(str,";") and checkedsplit(str,";")) or checkedsplit(str,io.pathseparator)
+local split = lpegmatch(splitter,str)
+ found = { }
+ for i=1,#split do
+ local s = split[i]
+ if not find(s,"^{*unset}*") then
+ found[#found+1] = s
+ end
+ end
+ if trace_expansions then
+ logs.report("fileio","splitting path specification '%s'",str)
+ for k=1,#found do
+ logs.report("fileio","% 4i: %s",k,found[k])
+ end
+ end
+ cache[str] = found
+ end
+ end
+ return found
+end
+
+resolvers.split_kpse_path = split_kpse_path
+
function resolvers.splitconfig()
- for i,c in ipairs(instance) do
- for k,v in pairs(c) do
+ for i=1,#instance do
+ local c = instance[i]
+ for k,v in next, c do
if type(v) == 'string' then
- local t = file.split_path(v)
+ local t = split_kpse_path(v)
if #t > 1 then
c[k] = t
end
@@ -7265,21 +9066,25 @@ function resolvers.splitconfig()
end
function resolvers.joinconfig()
- for i,c in ipairs(instance.order) do
- for k,v in pairs(c) do -- ipairs?
+ local order = instance.order
+ for i=1,#order do
+ local c = order[i]
+ for k,v in next, c do -- indexed?
if type(v) == 'table' then
c[k] = file.join_path(v)
end
end
end
end
+
function resolvers.split_path(str)
if type(str) == 'table' then
return str
else
- return file.split_path(str)
+ return split_kpse_path(str)
end
end
+
function resolvers.join_path(str)
if type(str) == 'table' then
return file.join_path(str)
@@ -7291,8 +9096,9 @@ end
function resolvers.splitexpansions()
local ie = instance.expansions
for k,v in next, ie do
- local t, h = { }, { }
- for _,vv in ipairs(file.split_path(v)) do
+ local t, h, p = { }, { }, split_kpse_path(v)
+ for kk=1,#p do
+ local vv = p[kk]
if vv ~= "" and not h[vv] then
t[#t+1] = vv
h[vv] = true
@@ -7339,11 +9145,15 @@ function resolvers.serialize(files)
end
t[#t+1] = "return {"
if instance.sortdata then
- for _, k in pairs(sortedkeys(files)) do -- ipairs
+ local sortedfiles = sortedkeys(files)
+ for i=1,#sortedfiles do
+ local k = sortedfiles[i]
local fk = files[k]
if type(fk) == 'table' then
t[#t+1] = "\t['" .. k .. "']={"
- for _, kk in pairs(sortedkeys(fk)) do -- ipairs
+ local sortedfk = sortedkeys(fk)
+ for j=1,#sortedfk do
+ local kk = sortedfk[j]
t[#t+1] = dump(kk,fk[kk],"\t\t")
end
t[#t+1] = "\t},"
@@ -7368,12 +9178,18 @@ function resolvers.serialize(files)
return concat(t,"\n")
end
+local data_state = { }
+
+function resolvers.data_state()
+ return data_state or { }
+end
+
function resolvers.save_data(dataname, makename) -- untested without cache overload
for cachename, files in next, instance[dataname] do
local name = (makename or file.join)(cachename,dataname)
local luaname, lucname = name .. ".lua", name .. ".luc"
- if trace_verbose then
- logs.report("fileio","preparing %s for %s",dataname,cachename)
+ if trace_locating then
+ logs.report("fileio","preparing '%s' for '%s'",dataname,cachename)
end
for k, v in next, files do
if type(v) == "table" and #v == 1 then
@@ -7387,24 +9203,25 @@ function resolvers.save_data(dataname, makename) -- untested without cache overl
date = os.date("%Y-%m-%d"),
time = os.date("%H:%M:%S"),
content = files,
+ uuid = os.uuid(),
}
local ok = io.savedata(luaname,resolvers.serialize(data))
if ok then
- if trace_verbose then
- logs.report("fileio","%s saved in %s",dataname,luaname)
+ if trace_locating then
+ logs.report("fileio","'%s' saved in '%s'",dataname,luaname)
end
if utils.lua.compile(luaname,lucname,false,true) then -- no cleanup but strip
- if trace_verbose then
- logs.report("fileio","%s compiled to %s",dataname,lucname)
+ if trace_locating then
+ logs.report("fileio","'%s' compiled to '%s'",dataname,lucname)
end
else
- if trace_verbose then
- logs.report("fileio","compiling failed for %s, deleting file %s",dataname,lucname)
+ if trace_locating then
+ logs.report("fileio","compiling failed for '%s', deleting file '%s'",dataname,lucname)
end
os.remove(lucname)
end
- elseif trace_verbose then
- logs.report("fileio","unable to save %s in %s (access error)",dataname,luaname)
+ elseif trace_locating then
+ logs.report("fileio","unable to save '%s' in '%s' (access error)",dataname,luaname)
end
end
end
@@ -7416,19 +9233,20 @@ function resolvers.load_data(pathname,dataname,filename,makename) -- untested wi
if blob then
local data = blob()
if data and data.content and data.type == dataname and data.version == resolvers.cacheversion then
- if trace_verbose then
- logs.report("fileio","loading %s for %s from %s",dataname,pathname,filename)
+ data_state[#data_state+1] = data.uuid
+ if trace_locating then
+ logs.report("fileio","loading '%s' for '%s' from '%s'",dataname,pathname,filename)
end
instance[dataname][pathname] = data.content
else
- if trace_verbose then
- logs.report("fileio","skipping %s for %s from %s",dataname,pathname,filename)
+ if trace_locating then
+ logs.report("fileio","skipping '%s' for '%s' from '%s'",dataname,pathname,filename)
end
instance[dataname][pathname] = { }
instance.loaderror = true
end
- elseif trace_verbose then
- logs.report("fileio","skipping %s for %s from %s",dataname,pathname,filename)
+ elseif trace_locating then
+ logs.report("fileio","skipping '%s' for '%s' from '%s'",dataname,pathname,filename)
end
end
@@ -7447,15 +9265,17 @@ function resolvers.resetconfig()
end
function resolvers.loadnewconfig()
- for _, cnf in ipairs(instance.luafiles) do
+ local luafiles = instance.luafiles
+ for i=1,#luafiles do
+ local cnf = luafiles[i]
local pathname = file.dirname(cnf)
local filename = file.join(pathname,resolvers.luaname)
local blob = loadfile(filename)
if blob then
local data = blob()
if data then
- if trace_verbose then
- logs.report("fileio","loading configuration file %s",filename)
+ if trace_locating then
+ logs.report("fileio","loading configuration file '%s'",filename)
end
if true then
-- flatten to variable.progname
@@ -7476,14 +9296,14 @@ function resolvers.loadnewconfig()
instance['setup'][pathname] = data
end
else
- if trace_verbose then
- logs.report("fileio","skipping configuration file %s",filename)
+ if trace_locating then
+ logs.report("fileio","skipping configuration file '%s'",filename)
end
instance['setup'][pathname] = { }
instance.loaderror = true
end
- elseif trace_verbose then
- logs.report("fileio","skipping configuration file %s",filename)
+ elseif trace_locating then
+ logs.report("fileio","skipping configuration file '%s'",filename)
end
instance.order[#instance.order+1] = instance.setup[pathname]
if instance.loaderror then break end
@@ -7492,7 +9312,9 @@ end
function resolvers.loadoldconfig()
if not instance.renewcache then
- for _, cnf in ipairs(instance.cnffiles) do
+ local cnffiles = instance.cnffiles
+ for i=1,#cnffiles do
+ local cnf = cnffiles[i]
local dname = file.dirname(cnf)
resolvers.load_data(dname,'configuration')
instance.order[#instance.order+1] = instance.configuration[dname]
@@ -7682,7 +9504,7 @@ end
function resolvers.expanded_path_list(str)
if not str then
- return ep or { }
+ return ep or { } -- ep ?
elseif instance.savelists then
-- engine+progname hash
str = gsub(str,"%$","")
@@ -7700,9 +9522,9 @@ end
function resolvers.expanded_path_list_from_var(str) -- brrr
local tmp = resolvers.var_of_format_or_suffix(gsub(str,"%$",""))
if tmp ~= "" then
- return resolvers.expanded_path_list(str)
- else
return resolvers.expanded_path_list(tmp)
+ else
+ return resolvers.expanded_path_list(str)
end
end
@@ -7749,9 +9571,9 @@ function resolvers.isreadable.file(name)
local readable = lfs.isfile(name) -- brrr
if trace_detail then
if readable then
- logs.report("fileio","+ readable: %s",name)
+ logs.report("fileio","file '%s' is readable",name)
else
- logs.report("fileio","- readable: %s", name)
+ logs.report("fileio","file '%s' is not readable", name)
end
end
return readable
@@ -7767,7 +9589,7 @@ local function collect_files(names)
for k=1,#names do
local fname = names[k]
if trace_detail then
- logs.report("fileio","? blobpath asked: %s",fname)
+ logs.report("fileio","checking name '%s'",fname)
end
local bname = file.basename(fname)
local dname = file.dirname(fname)
@@ -7783,7 +9605,7 @@ local function collect_files(names)
local files = blobpath and instance.files[blobpath]
if files then
if trace_detail then
- logs.report("fileio",'? blobpath do: %s (%s)',blobpath,bname)
+ logs.report("fileio","deep checking '%s' (%s)",blobpath,bname)
end
local blobfile = files[bname]
if not blobfile then
@@ -7817,7 +9639,7 @@ local function collect_files(names)
end
end
elseif trace_locating then
- logs.report("fileio",'! blobpath no: %s (%s)',blobpath,bname)
+ logs.report("fileio","no match in '%s' (%s)",blobpath,bname)
end
end
end
@@ -7867,14 +9689,13 @@ end
local function collect_instance_files(filename,collected) -- todo : plugin (scanners, checkers etc)
local result = collected or { }
local stamp = nil
- filename = file.collapse_path(filename) -- elsewhere
- filename = file.collapse_path(gsub(filename,"\\","/")) -- elsewhere
+ filename = file.collapse_path(filename)
-- speed up / beware: format problem
if instance.remember then
stamp = filename .. "--" .. instance.engine .. "--" .. instance.progname .. "--" .. instance.format
if instance.found[stamp] then
if trace_locating then
- logs.report("fileio",'! remembered: %s',filename)
+ logs.report("fileio","remembering file '%s'",filename)
end
return instance.found[stamp]
end
@@ -7882,7 +9703,7 @@ local function collect_instance_files(filename,collected) -- todo : plugin (scan
if not dangerous[instance.format or "?"] then
if resolvers.isreadable.file(filename) then
if trace_detail then
- logs.report("fileio",'= found directly: %s',filename)
+ logs.report("fileio","file '%s' found directly",filename)
end
instance.found[stamp] = { filename }
return { filename }
@@ -7890,13 +9711,13 @@ local function collect_instance_files(filename,collected) -- todo : plugin (scan
end
if find(filename,'%*') then
if trace_locating then
- logs.report("fileio",'! wildcard: %s', filename)
+ logs.report("fileio","checking wildcard '%s'", filename)
end
result = resolvers.find_wildcard_files(filename)
elseif file.is_qualified_path(filename) then
if resolvers.isreadable.file(filename) then
if trace_locating then
- logs.report("fileio",'! qualified: %s', filename)
+ logs.report("fileio","qualified name '%s'", filename)
end
result = { filename }
else
@@ -7906,7 +9727,7 @@ local function collect_instance_files(filename,collected) -- todo : plugin (scan
forcedname = filename .. ".tex"
if resolvers.isreadable.file(forcedname) then
if trace_locating then
- logs.report("fileio",'! no suffix, forcing standard filetype: tex')
+ logs.report("fileio","no suffix, forcing standard filetype 'tex'")
end
result, ok = { forcedname }, true
end
@@ -7916,7 +9737,7 @@ local function collect_instance_files(filename,collected) -- todo : plugin (scan
forcedname = filename .. "." .. s
if resolvers.isreadable.file(forcedname) then
if trace_locating then
- logs.report("fileio",'! no suffix, forcing format filetype: %s', s)
+ logs.report("fileio","no suffix, forcing format filetype '%s'", s)
end
result, ok = { forcedname }, true
break
@@ -7928,7 +9749,7 @@ local function collect_instance_files(filename,collected) -- todo : plugin (scan
-- try to find in tree (no suffix manipulation), here we search for the
-- matching last part of the name
local basename = file.basename(filename)
- local pattern = (filename .. "$"):gsub("([%.%-])","%%%1")
+ local pattern = gsub(filename .. "$","([%.%-])","%%%1")
local savedformat = instance.format
local format = savedformat or ""
if format == "" then
@@ -7938,19 +9759,21 @@ local function collect_instance_files(filename,collected) -- todo : plugin (scan
instance.format = "othertextfiles" -- kind of everything, maybe texinput is better
end
--
- local resolved = collect_instance_files(basename)
- if #result == 0 then
- local lowered = lower(basename)
- if filename ~= lowered then
- resolved = collect_instance_files(lowered)
+ if basename ~= filename then
+ local resolved = collect_instance_files(basename)
+ if #result == 0 then
+ local lowered = lower(basename)
+ if filename ~= lowered then
+ resolved = collect_instance_files(lowered)
+ end
end
- end
- resolvers.format = savedformat
- --
- for r=1,#resolved do
- local rr = resolved[r]
- if rr:find(pattern) then
- result[#result+1], ok = rr, true
+ resolvers.format = savedformat
+ --
+ for r=1,#resolved do
+ local rr = resolved[r]
+ if find(rr,pattern) then
+ result[#result+1], ok = rr, true
+ end
end
end
-- a real wildcard:
@@ -7959,14 +9782,14 @@ local function collect_instance_files(filename,collected) -- todo : plugin (scan
-- local filelist = collect_files({basename})
-- for f=1,#filelist do
-- local ff = filelist[f][3] or ""
- -- if ff:find(pattern) then
+ -- if find(ff,pattern) then
-- result[#result+1], ok = ff, true
-- end
-- end
-- end
end
if not ok and trace_locating then
- logs.report("fileio",'? qualified: %s', filename)
+ logs.report("fileio","qualified name '%s'", filename)
end
end
else
@@ -7985,12 +9808,12 @@ local function collect_instance_files(filename,collected) -- todo : plugin (scan
wantedfiles[#wantedfiles+1] = forcedname
filetype = resolvers.format_of_suffix(forcedname)
if trace_locating then
- logs.report("fileio",'! forcing filetype: %s',filetype)
+ logs.report("fileio","forcing filetype '%s'",filetype)
end
else
filetype = resolvers.format_of_suffix(filename)
if trace_locating then
- logs.report("fileio",'! using suffix based filetype: %s',filetype)
+ logs.report("fileio","using suffix based filetype '%s'",filetype)
end
end
else
@@ -8002,7 +9825,7 @@ local function collect_instance_files(filename,collected) -- todo : plugin (scan
end
filetype = instance.format
if trace_locating then
- logs.report("fileio",'! using given filetype: %s',filetype)
+ logs.report("fileio","using given filetype '%s'",filetype)
end
end
local typespec = resolvers.variable_of_format(filetype)
@@ -8010,9 +9833,7 @@ local function collect_instance_files(filename,collected) -- todo : plugin (scan
if not pathlist or #pathlist == 0 then
-- no pathlist, access check only / todo == wildcard
if trace_detail then
- logs.report("fileio",'? filename: %s',filename)
- logs.report("fileio",'? filetype: %s',filetype or '?')
- logs.report("fileio",'? wanted files: %s',concat(wantedfiles," | "))
+ logs.report("fileio","checking filename '%s', filetype '%s', wanted files '%s'",filename, filetype or '?',concat(wantedfiles," | "))
end
for k=1,#wantedfiles do
local fname = wantedfiles[k]
@@ -8033,36 +9854,59 @@ local function collect_instance_files(filename,collected) -- todo : plugin (scan
else
-- list search
local filelist = collect_files(wantedfiles)
- local doscan, recurse
+ local dirlist = { }
+ if filelist then
+ for i=1,#filelist do
+ dirlist[i] = file.dirname(filelist[i][2]) .. "/"
+ end
+ end
if trace_detail then
- logs.report("fileio",'? filename: %s',filename)
+ logs.report("fileio","checking filename '%s'",filename)
end
-- a bit messy ... esp the doscan setting here
+ local doscan
for k=1,#pathlist do
local path = pathlist[k]
if find(path,"^!!") then doscan = false else doscan = true end
- if find(path,"//$") then recurse = true else recurse = false end
local pathname = gsub(path,"^!+", '')
done = false
-- using file list
- if filelist and not (done and not instance.allresults) and recurse then
- -- compare list entries with permitted pattern
- pathname = gsub(pathname,"([%-%.])","%%%1") -- this also influences
- pathname = gsub(pathname,"/+$", '/.*') -- later usage of pathname
- pathname = gsub(pathname,"//", '/.-/') -- not ok for /// but harmless
- local expr = "^" .. pathname
+ if filelist then
+ local expression
+ -- compare list entries with permitted pattern -- /xx /xx//
+ if not find(pathname,"/$") then
+ expression = pathname .. "/"
+ else
+ expression = pathname
+ end
+ expression = gsub(expression,"([%-%.])","%%%1") -- this also influences
+ expression = gsub(expression,"//+$", '/.*') -- later usage of pathname
+ expression = gsub(expression,"//", '/.-/') -- not ok for /// but harmless
+ expression = "^" .. expression .. "$"
+ if trace_detail then
+ logs.report("fileio","using pattern '%s' for path '%s'",expression,pathname)
+ end
for k=1,#filelist do
local fl = filelist[k]
local f = fl[2]
- if find(f,expr) then
- if trace_detail then
- logs.report("fileio",'= found in hash: %s',f)
- end
+ local d = dirlist[k]
+ if find(d,expression) then
--- todo, test for readable
result[#result+1] = fl[3]
resolvers.register_in_trees(f) -- for tracing used files
done = true
- if not instance.allresults then break end
+ if instance.allresults then
+ if trace_detail then
+ logs.report("fileio","match in hash for file '%s' on path '%s', continue scanning",f,d)
+ end
+ else
+ if trace_detail then
+ logs.report("fileio","match in hash for file '%s' on path '%s', quit scanning",f,d)
+ end
+ break
+ end
+ elseif trace_detail then
+ logs.report("fileio","no match in hash for file '%s' on path '%s'",f,d)
end
end
end
@@ -8078,7 +9922,7 @@ local function collect_instance_files(filename,collected) -- todo : plugin (scan
local fname = file.join(ppname,w)
if resolvers.isreadable.file(fname) then
if trace_detail then
- logs.report("fileio",'= found by scanning: %s',fname)
+ logs.report("fileio","found '%s' by scanning",fname)
end
result[#result+1] = fname
done = true
@@ -8141,7 +9985,7 @@ function resolvers.find_given_files(filename)
local hashes = instance.hashes
for k=1,#hashes do
local hash = hashes[k]
- local files = instance.files[hash.tag]
+ local files = instance.files[hash.tag] or { }
local blist = files[bname]
if not blist then
local rname = "remap:"..bname
@@ -8251,9 +10095,9 @@ function resolvers.load(option)
statistics.starttiming(instance)
resolvers.resetconfig()
resolvers.identify_cnf()
- resolvers.load_lua()
+ resolvers.load_lua() -- will become the new method
resolvers.expand_variables()
- resolvers.load_cnf()
+ resolvers.load_cnf() -- will be skipped when we have a lua file
resolvers.expand_variables()
if option ~= "nofiles" then
resolvers.load_hash()
@@ -8265,22 +10109,23 @@ end
function resolvers.for_files(command, files, filetype, mustexist)
if files and #files > 0 then
local function report(str)
- if trace_verbose then
+ if trace_locating then
logs.report("fileio",str) -- has already verbose
else
print(str)
end
end
- if trace_verbose then
- report('')
+ if trace_locating then
+ report('') -- ?
end
- for _, file in ipairs(files) do
+ for f=1,#files do
+ local file = files[f]
local result = command(file,filetype,mustexist)
if type(result) == 'string' then
report(result)
else
- for _,v in ipairs(result) do
- report(v)
+ for i=1,#result do
+ report(result[i]) -- could be unpack
end
end
end
@@ -8327,18 +10172,19 @@ end
function table.sequenced(t,sep) -- temp here
local s = { }
- for k, v in pairs(t) do -- pairs?
- s[#s+1] = k .. "=" .. v
+ for k, v in next, t do -- indexed?
+ s[#s+1] = k .. "=" .. tostring(v)
end
return concat(s, sep or " | ")
end
function resolvers.methodhandler(what, filename, filetype) -- ...
+ filename = file.collapse_path(filename)
local specification = (type(filename) == "string" and resolvers.splitmethod(filename)) or filename -- no or { }, let it bomb
local scheme = specification.scheme
if resolvers[what][scheme] then
if trace_locating then
- logs.report("fileio",'= handler: %s -> %s -> %s',specification.original,what,table.sequenced(specification))
+ logs.report("fileio","handler '%s' -> '%s' -> '%s'",specification.original,what,table.sequenced(specification))
end
return resolvers[what][scheme](filename,filetype) -- todo: specification
else
@@ -8358,8 +10204,9 @@ function resolvers.clean_path(str)
end
function resolvers.do_with_path(name,func)
- for _, v in pairs(resolvers.expanded_path_list(name)) do -- pairs?
- func("^"..resolvers.clean_path(v))
+ local pathlist = resolvers.expanded_path_list(name)
+ for i=1,#pathlist do
+ func("^"..resolvers.clean_path(pathlist[i]))
end
end
@@ -8368,7 +10215,9 @@ function resolvers.do_with_var(name,func)
end
function resolvers.with_files(pattern,handle)
- for _, hash in ipairs(instance.hashes) do
+ local hashes = instance.hashes
+ for i=1,#hashes do
+ local hash = hashes[i]
local blobpath = hash.tag
local blobtype = hash.type
if blobpath then
@@ -8383,7 +10232,7 @@ function resolvers.with_files(pattern,handle)
if type(v) == "string" then
handle(blobtype,blobpath,v,k)
else
- for _,vv in pairs(v) do -- ipairs?
+ for _,vv in next, v do -- indexed
handle(blobtype,blobpath,vv,k)
end
end
@@ -8395,7 +10244,7 @@ function resolvers.with_files(pattern,handle)
end
function resolvers.locate_format(name)
- local barename, fmtname = name:gsub("%.%a+$",""), ""
+ local barename, fmtname = gsub(name,"%.%a+$",""), ""
if resolvers.usecache then
local path = file.join(caches.setpath("formats")) -- maybe platform
fmtname = file.join(path,barename..".fmt") or ""
@@ -8443,7 +10292,7 @@ do -- create closure to overcome 200 locals limit
if not modules then modules = { } end modules ['data-tmp'] = {
version = 1.001,
- comment = "companion to luat-lib.tex",
+ comment = "companion to luat-lib.mkiv",
author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
copyright = "PRAGMA ADE / ConTeXt Development Team",
license = "see context related readme files"
@@ -8467,7 +10316,7 @@ luatools with a recache feature.</p>
local format, lower, gsub = string.format, string.lower, string.gsub
-local trace_cache = false trackers.register("resolvers.cache", function(v) trace_cache = v end)
+local trace_cache = false trackers.register("resolvers.cache", function(v) trace_cache = v end) -- not used yet
caches = caches or { }
@@ -8554,7 +10403,8 @@ function caches.setpath(...)
caches.path = '.'
end
caches.path = resolvers.clean_path(caches.path)
- if not table.is_empty({...}) then
+ local dirs = { ... }
+ if #dirs > 0 then
local pth = dir.mkdirs(caches.path,...)
return pth
end
@@ -8600,6 +10450,7 @@ function caches.savedata(filepath,filename,data,raw)
if raw then
reduce, simplify = false, false
end
+ data.cache_uuid = os.uuid()
if caches.direct then
file.savedata(tmaname, table.serialize(data,'return',false,true,false)) -- no hex
else
@@ -8625,7 +10476,7 @@ do -- create closure to overcome 200 locals limit
if not modules then modules = { } end modules ['data-res'] = {
version = 1.001,
- comment = "companion to luat-lib.tex",
+ comment = "companion to luat-lib.mkiv",
author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
copyright = "PRAGMA ADE / ConTeXt Development Team",
license = "see context related readme files"
@@ -8660,6 +10511,14 @@ prefixes.relative = function(str,n)
return resolvers.clean_path(str)
end
+prefixes.auto = function(str)
+ local fullname = prefixes.relative(str)
+ if not lfs.isfile(fullname) then
+ fullname = prefixes.locate(str)
+ end
+ return fullname
+end
+
prefixes.locate = function(str)
local fullname = resolvers.find_given_file(str) or ""
return resolvers.clean_path((fullname ~= "" and fullname) or str)
@@ -8683,6 +10542,16 @@ prefixes.full = prefixes.locate
prefixes.file = prefixes.filename
prefixes.path = prefixes.pathname
+function resolvers.allprefixes(separator)
+ local all = table.sortedkeys(prefixes)
+ if separator then
+ for i=1,#all do
+ all[i] = all[i] .. ":"
+ end
+ end
+ return all
+end
+
local function _resolve_(method,target)
if prefixes[method] then
return prefixes[method](target)
@@ -8693,7 +10562,8 @@ end
local function resolve(str)
if type(str) == "table" then
- for k, v in pairs(str) do -- ipairs
+ for k=1,#str do
+ local v = str[k]
str[k] = resolve(v) or v
end
elseif str and str ~= "" then
@@ -8706,7 +10576,7 @@ resolvers.resolve = resolve
if os.uname then
- for k, v in pairs(os.uname()) do
+ for k, v in next, os.uname() do
if not prefixes[k] then
prefixes[k] = function() return v end
end
@@ -8721,7 +10591,7 @@ do -- create closure to overcome 200 locals limit
if not modules then modules = { } end modules ['data-inp'] = {
version = 1.001,
- comment = "companion to luat-lib.tex",
+ comment = "companion to luat-lib.mkiv",
author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
copyright = "PRAGMA ADE / ConTeXt Development Team",
license = "see context related readme files"
@@ -8742,7 +10612,7 @@ do -- create closure to overcome 200 locals limit
if not modules then modules = { } end modules ['data-out'] = {
version = 1.001,
- comment = "companion to luat-lib.tex",
+ comment = "companion to luat-lib.mkiv",
author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
copyright = "PRAGMA ADE / ConTeXt Development Team",
license = "see context related readme files"
@@ -8758,7 +10628,7 @@ do -- create closure to overcome 200 locals limit
if not modules then modules = { } end modules ['data-con'] = {
version = 1.001,
- comment = "companion to luat-lib.tex",
+ comment = "companion to luat-lib.mkiv",
author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
copyright = "PRAGMA ADE / ConTeXt Development Team",
license = "see context related readme files"
@@ -8769,8 +10639,6 @@ local format, lower, gsub = string.format, string.lower, string.gsub
local trace_cache = false trackers.register("resolvers.cache", function(v) trace_cache = v end)
local trace_containers = false trackers.register("resolvers.containers", function(v) trace_containers = v end)
local trace_storage = false trackers.register("resolvers.storage", function(v) trace_storage = v end)
-local trace_verbose = false trackers.register("resolvers.verbose", function(v) trace_verbose = v end)
-local trace_locating = false trackers.register("resolvers.locating", function(v) trace_locating = v trackers.enable("resolvers.verbose") end)
--[[ldx--
<p>Once we found ourselves defining similar cache constructs
@@ -8834,7 +10702,7 @@ 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
+ return storage and storage.cache_version == container.version
else
return false
end
@@ -8886,16 +10754,15 @@ do -- create closure to overcome 200 locals limit
if not modules then modules = { } end modules ['data-use'] = {
version = 1.001,
- comment = "companion to luat-lib.tex",
+ comment = "companion to luat-lib.mkiv",
author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
copyright = "PRAGMA ADE / ConTeXt Development Team",
license = "see context related readme files"
}
-local format, lower, gsub = string.format, string.lower, string.gsub
+local format, lower, gsub, find = string.format, string.lower, string.gsub, string.find
-local trace_verbose = false trackers.register("resolvers.verbose", function(v) trace_verbose = v end)
-local trace_locating = false trackers.register("resolvers.locating", function(v) trace_locating = v trackers.enable("resolvers.verbose") end)
+local trace_locating = false trackers.register("resolvers.locating", function(v) trace_locating = v end)
-- since we want to use the cache instead of the tree, we will now
-- reimplement the saver.
@@ -8939,19 +10806,20 @@ resolvers.automounted = resolvers.automounted or { }
function resolvers.automount(usecache)
local mountpaths = resolvers.clean_path_list(resolvers.expansion('TEXMFMOUNT'))
- if table.is_empty(mountpaths) and usecache then
+ if (not mountpaths or #mountpaths == 0) and usecache then
mountpaths = { caches.setpath("mount") }
end
- if not table.is_empty(mountpaths) then
+ if mountpaths and #mountpaths > 0 then
statistics.starttiming(resolvers.instance)
- for k, root in pairs(mountpaths) do
+ for k=1,#mountpaths do
+ local root = mountpaths[k]
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
+ if find(line,"^[%%#%-]") then -- or %W
-- skip
- elseif line:find("^zip://") then
+ elseif find(line,"^zip://") then
if trace_locating then
logs.report("fileio","mounting %s",line)
end
@@ -8996,11 +10864,13 @@ function statistics.check_fmt_status(texname)
local luv = dofile(luvname)
if luv and luv.sourcefile then
local sourcehash = md5.hex(io.loaddata(resolvers.find_file(luv.sourcefile)) or "unknown")
- if luv.enginebanner and luv.enginebanner ~= enginebanner then
- return "engine mismatch"
+ local luvbanner = luv.enginebanner or "?"
+ if luvbanner ~= enginebanner then
+ return string.format("engine mismatch (luv:%s <> bin:%s)",luvbanner,enginebanner)
end
- if luv.sourcehash and luv.sourcehash ~= sourcehash then
- return "source mismatch"
+ local luvhash = luv.sourcehash or "?"
+ if luvhash ~= sourcehash then
+ return string.format("source mismatch (luv:%s <> bin:%s)",luvhash,sourcehash)
end
else
return "invalid status file"
@@ -9019,18 +10889,22 @@ do -- create closure to overcome 200 locals limit
if not modules then modules = { } end modules ['data-zip'] = {
version = 1.001,
- comment = "companion to luat-lib.tex",
+ comment = "companion to luat-lib.mkiv",
author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
copyright = "PRAGMA ADE / ConTeXt Development Team",
license = "see context related readme files"
}
-local format, find = string.format, string.find
+local format, find, match = string.format, string.find, string.match
+local unpack = unpack or table.unpack
-local trace_locating, trace_verbose = false, false
+local trace_locating = false trackers.register("resolvers.locating", function(v) trace_locating = v end)
-trackers.register("resolvers.verbose", function(v) trace_verbose = v end)
-trackers.register("resolvers.locating", function(v) trace_locating = v trace_verbose = v end)
+-- zip:///oeps.zip?name=bla/bla.tex
+-- zip:///oeps.zip?tree=tex/texmf-local
+-- zip:///texmf.zip?tree=/tex/texmf
+-- zip:///texmf.zip?tree=/tex/texmf-local
+-- zip:///texmf-mine.zip?tree=/tex/texmf-projects
zip = zip or { }
zip.archives = zip.archives or { }
@@ -9041,9 +10915,6 @@ local locators, hashers, concatinators = resolvers.locators, resolvers.hashers,
local archives = zip.archives
--- zip:///oeps.zip?name=bla/bla.tex
--- zip:///oeps.zip?tree=tex/texmf-local
-
local function validzip(str) -- todo: use url splitter
if not find(str,"^zip://") then
return "zip:///" .. str
@@ -9073,26 +10944,22 @@ function zip.closearchive(name)
end
end
--- zip:///texmf.zip?tree=/tex/texmf
--- zip:///texmf.zip?tree=/tex/texmf-local
--- zip:///texmf-mine.zip?tree=/tex/texmf-projects
-
function locators.zip(specification) -- where is this used? startup zips (untested)
specification = resolvers.splitmethod(specification)
local zipfile = specification.path
local zfile = zip.openarchive(name) -- tricky, could be in to be initialized tree
if trace_locating then
if zfile then
- logs.report("fileio",'! zip locator, found: %s',specification.original)
+ logs.report("fileio","zip locator, archive '%s' found",specification.original)
else
- logs.report("fileio",'? zip locator, not found: %s',specification.original)
+ logs.report("fileio","zip locator, archive '%s' not found",specification.original)
end
end
end
function hashers.zip(tag,name)
- if trace_verbose then
- logs.report("fileio","loading zip file %s as %s",name,tag)
+ if trace_locating then
+ logs.report("fileio","loading zip file '%s' as '%s'",name,tag)
end
resolvers.usezipfile(format("%s?tree=%s",tag,name))
end
@@ -9117,23 +10984,25 @@ function finders.zip(specification,filetype)
local zfile = zip.openarchive(specification.path)
if zfile then
if trace_locating then
- logs.report("fileio",'! zip finder, path: %s',specification.path)
+ logs.report("fileio","zip finder, archive '%s' found",specification.path)
end
local dfile = zfile:open(q.name)
if dfile then
dfile = zfile:close()
if trace_locating then
- logs.report("fileio",'+ zip finder, name: %s',q.name)
+ logs.report("fileio","zip finder, file '%s' found",q.name)
end
return specification.original
+ elseif trace_locating then
+ logs.report("fileio","zip finder, file '%s' not found",q.name)
end
elseif trace_locating then
- logs.report("fileio",'? zip finder, path %s',specification.path)
+ logs.report("fileio","zip finder, unknown archive '%s'",specification.path)
end
end
end
if trace_locating then
- logs.report("fileio",'- zip finder, name: %s',filename)
+ logs.report("fileio","zip finder, '%s' not found",filename)
end
return unpack(finders.notfound)
end
@@ -9146,20 +11015,25 @@ function openers.zip(specification)
local zfile = zip.openarchive(zipspecification.path)
if zfile then
if trace_locating then
- logs.report("fileio",'+ zip starter, path: %s',zipspecification.path)
+ logs.report("fileio","zip opener, archive '%s' opened",zipspecification.path)
end
local dfile = zfile:open(q.name)
if dfile then
logs.show_open(specification)
+ if trace_locating then
+ logs.report("fileio","zip opener, file '%s' found",q.name)
+ end
return openers.text_opener(specification,dfile,'zip')
+ elseif trace_locating then
+ logs.report("fileio","zip opener, file '%s' not found",q.name)
end
elseif trace_locating then
- logs.report("fileio",'- zip starter, path %s',zipspecification.path)
+ logs.report("fileio","zip opener, unknown archive '%s'",zipspecification.path)
end
end
end
if trace_locating then
- logs.report("fileio",'- zip opener, name: %s',filename)
+ logs.report("fileio","zip opener, '%s' not found",filename)
end
return unpack(openers.notfound)
end
@@ -9172,25 +11046,27 @@ function loaders.zip(specification)
local zfile = zip.openarchive(specification.path)
if zfile then
if trace_locating then
- logs.report("fileio",'+ zip starter, path: %s',specification.path)
+ logs.report("fileio","zip loader, archive '%s' opened",specification.path)
end
local dfile = zfile:open(q.name)
if dfile then
logs.show_load(filename)
if trace_locating then
- logs.report("fileio",'+ zip loader, name: %s',filename)
+ logs.report("fileio","zip loader, file '%s' loaded",filename)
end
local s = dfile:read("*all")
dfile:close()
return true, s, #s
+ elseif trace_locating then
+ logs.report("fileio","zip loader, file '%s' not found",q.name)
end
elseif trace_locating then
- logs.report("fileio",'- zip starter, path: %s',specification.path)
+ logs.report("fileio","zip loader, unknown archive '%s'",specification.path)
end
end
end
if trace_locating then
- logs.report("fileio",'- zip loader, name: %s',filename)
+ logs.report("fileio","zip loader, '%s' not found",filename)
end
return unpack(openers.notfound)
end
@@ -9200,21 +11076,15 @@ end
function resolvers.usezipfile(zipname)
zipname = validzip(zipname)
- if trace_locating then
- logs.report("fileio",'! zip use, file: %s',zipname)
- end
local specification = resolvers.splitmethod(zipname)
local zipfile = specification.path
if zipfile and not zip.registeredfiles[zipname] then
local tree = url.query(specification.query).tree or ""
- if trace_locating then
- logs.report("fileio",'! zip register, file: %s',zipname)
- end
local z = zip.openarchive(zipfile)
if z then
local instance = resolvers.instance
if trace_locating then
- logs.report("fileio","= zipfile, registering: %s",zipname)
+ logs.report("fileio","zip registering, registering archive '%s'",zipname)
end
statistics.starttiming(instance)
resolvers.prepend_hash('zip',zipname,zipfile)
@@ -9223,10 +11093,10 @@ function resolvers.usezipfile(zipname)
instance.files[zipname] = resolvers.register_zip_file(z,tree or "")
statistics.stoptiming(instance)
elseif trace_locating then
- logs.report("fileio","? zipfile, unknown: %s",zipname)
+ logs.report("fileio","zip registering, unknown archive '%s'",zipname)
end
elseif trace_locating then
- logs.report("fileio",'! zip register, no file: %s',zipname)
+ logs.report("fileio","zip registering, '%s' not found",zipname)
end
end
@@ -9238,11 +11108,11 @@ function resolvers.register_zip_file(z,tree)
filter = format("^%s/(.+)/(.-)$",tree)
end
if trace_locating then
- logs.report("fileio",'= zip filter: %s',filter)
+ logs.report("fileio","zip registering, using filter '%s'",filter)
end
local register, n = resolvers.register_file, 0
for i in z:files() do
- local path, name = i.filename:match(filter)
+ local path, name = match(i.filename,filter)
if path then
if name and name ~= '' then
register(files, name, path)
@@ -9255,7 +11125,7 @@ function resolvers.register_zip_file(z,tree)
n = n + 1
end
end
- logs.report("fileio",'= zip entries: %s',n)
+ logs.report("fileio","zip registering, %s files registered",n)
return files
end
@@ -9266,12 +11136,14 @@ do -- create closure to overcome 200 locals limit
if not modules then modules = { } end modules ['data-crl'] = {
version = 1.001,
- comment = "companion to luat-lib.tex",
+ comment = "companion to luat-lib.mkiv",
author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
copyright = "PRAGMA ADE / ConTeXt Development Team",
license = "see context related readme files"
}
+local gsub = string.gsub
+
curl = curl or { }
curl.cached = { }
@@ -9280,9 +11152,9 @@ curl.cachepath = caches.definepath("curl")
local finders, openers, loaders = resolvers.finders, resolvers.openers, resolvers.loaders
function curl.fetch(protocol, name)
- local cachename = curl.cachepath() .. "/" .. name:gsub("[^%a%d%.]+","-")
--- cachename = cachename:gsub("[\\/]", io.fileseparator)
- cachename = cachename:gsub("[\\]", "/") -- cleanup
+ local cachename = curl.cachepath() .. "/" .. gsub(name,"[^%a%d%.]+","-")
+-- cachename = gsub(cachename,"[\\/]", io.fileseparator)
+ cachename = gsub(cachename,"[\\]", "/") -- cleanup
if not curl.cached[name] then
if not io.exists(cachename) then
curl.cached[name] = cachename
@@ -9328,6 +11200,164 @@ end -- of closure
do -- create closure to overcome 200 locals limit
+if not modules then modules = { } end modules ['data-lua'] = {
+ version = 1.001,
+ comment = "companion to luat-lib.mkiv",
+ author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
+ copyright = "PRAGMA ADE / ConTeXt Development Team",
+ license = "see context related readme files"
+}
+
+-- some loading stuff ... we might move this one to slot 2 depending
+-- on the developments (the loaders must not trigger kpse); we could
+-- of course use a more extensive lib path spec
+
+local trace_locating = false trackers.register("resolvers.locating", function(v) trace_locating = v end)
+
+local gsub, insert = string.gsub, table.insert
+local unpack = unpack or table.unpack
+
+local libformats = { 'luatexlibs', 'tex', 'texmfscripts', 'othertextfiles' } -- 'luainputs'
+local clibformats = { 'lib' }
+
+local _path_, libpaths, _cpath_, clibpaths
+
+function package.libpaths()
+ if not _path_ or package.path ~= _path_ then
+ _path_ = package.path
+ libpaths = file.split_path(_path_,";")
+ end
+ return libpaths
+end
+
+function package.clibpaths()
+ if not _cpath_ or package.cpath ~= _cpath_ then
+ _cpath_ = package.cpath
+ clibpaths = file.split_path(_cpath_,";")
+ end
+ return clibpaths
+end
+
+local function thepath(...)
+ local t = { ... } t[#t+1] = "?.lua"
+ local path = file.join(unpack(t))
+ if trace_locating then
+ logs.report("fileio","! appending '%s' to 'package.path'",path)
+ end
+ return path
+end
+
+local p_libpaths, a_libpaths = { }, { }
+
+function package.append_libpath(...)
+ insert(a_libpath,thepath(...))
+end
+
+function package.prepend_libpath(...)
+ insert(p_libpaths,1,thepath(...))
+end
+
+-- beware, we need to return a loadfile result !
+
+local function loaded(libpaths,name,simple)
+ for i=1,#libpaths do -- package.path, might become option
+ local libpath = libpaths[i]
+ local resolved = gsub(libpath,"%?",simple)
+ if trace_locating then -- more detail
+ logs.report("fileio","! checking for '%s' on 'package.path': '%s' => '%s'",simple,libpath,resolved)
+ end
+ if resolvers.isreadable.file(resolved) then
+ if trace_locating then
+ logs.report("fileio","! lib '%s' located via 'package.path': '%s'",name,resolved)
+ end
+ return loadfile(resolved)
+ end
+ end
+end
+
+
+package.loaders[2] = function(name) -- was [#package.loaders+1]
+ if trace_locating then -- mode detail
+ logs.report("fileio","! locating '%s'",name)
+ end
+ for i=1,#libformats do
+ local format = libformats[i]
+ local resolved = resolvers.find_file(name,format) or ""
+ if trace_locating then -- mode detail
+ logs.report("fileio","! checking for '%s' using 'libformat path': '%s'",name,format)
+ end
+ if resolved ~= "" then
+ if trace_locating then
+ logs.report("fileio","! lib '%s' located via environment: '%s'",name,resolved)
+ end
+ return loadfile(resolved)
+ end
+ end
+ -- libpaths
+ local libpaths, clibpaths = package.libpaths(), package.clibpaths()
+ local simple = gsub(name,"%.lua$","")
+ local simple = gsub(simple,"%.","/")
+ local resolved = loaded(p_libpaths,name,simple) or loaded(libpaths,name,simple) or loaded(a_libpaths,name,simple)
+ if resolved then
+ return resolved
+ end
+ --
+ local libname = file.addsuffix(simple,os.libsuffix)
+ for i=1,#clibformats do
+ -- better have a dedicated loop
+ local format = clibformats[i]
+ local paths = resolvers.expanded_path_list_from_var(format)
+ for p=1,#paths do
+ local path = paths[p]
+ local resolved = file.join(path,libname)
+ if trace_locating then -- mode detail
+ logs.report("fileio","! checking for '%s' using 'clibformat path': '%s'",libname,path)
+ end
+ if resolvers.isreadable.file(resolved) then
+ if trace_locating then
+ logs.report("fileio","! lib '%s' located via 'clibformat': '%s'",libname,resolved)
+ end
+ return package.loadlib(resolved,name)
+ end
+ end
+ end
+ for i=1,#clibpaths do -- package.path, might become option
+ local libpath = clibpaths[i]
+ local resolved = gsub(libpath,"?",simple)
+ if trace_locating then -- more detail
+ logs.report("fileio","! checking for '%s' on 'package.cpath': '%s'",simple,libpath)
+ end
+ if resolvers.isreadable.file(resolved) then
+ if trace_locating then
+ logs.report("fileio","! lib '%s' located via 'package.cpath': '%s'",name,resolved)
+ end
+ return package.loadlib(resolved,name)
+ end
+ end
+ -- just in case the distribution is messed up
+ if trace_loading then -- more detail
+ logs.report("fileio","! checking for '%s' using 'luatexlibs': '%s'",name)
+ end
+ local resolved = resolvers.find_file(file.basename(name),'luatexlibs') or ""
+ if resolved ~= "" then
+ if trace_locating then
+ logs.report("fileio","! lib '%s' located by basename via environment: '%s'",name,resolved)
+ end
+ return loadfile(resolved)
+ end
+ if trace_locating then
+ logs.report("fileio",'? unable to locate lib: %s',name)
+ end
+-- return "unable to locate " .. name
+end
+
+resolvers.loadlualib = require
+
+
+end -- of closure
+
+do -- create closure to overcome 200 locals limit
+
if not modules then modules = { } end modules ['luat-kps'] = {
version = 1.001,
comment = "companion to luatools.lua",
@@ -9437,7 +11467,7 @@ do -- create closure to overcome 200 locals limit
if not modules then modules = { } end modules ['data-aux'] = {
version = 1.001,
- comment = "companion to luat-lib.tex",
+ comment = "companion to luat-lib.mkiv",
author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
copyright = "PRAGMA ADE / ConTeXt Development Team",
license = "see context related readme files"
@@ -9445,47 +11475,47 @@ if not modules then modules = { } end modules ['data-aux'] = {
local find = string.find
-local trace_verbose = false trackers.register("resolvers.verbose", function(v) trace_verbose = v end)
+local trace_locating = false trackers.register("resolvers.locating", function(v) trace_locating = v end)
function resolvers.update_script(oldname,newname) -- oldname -> own.name, not per se a suffix
local scriptpath = "scripts/context/lua"
newname = file.addsuffix(newname,"lua")
local oldscript = resolvers.clean_path(oldname)
- if trace_verbose then
+ if trace_locating then
logs.report("fileio","to be replaced old script %s", oldscript)
end
local newscripts = resolvers.find_files(newname) or { }
if #newscripts == 0 then
- if trace_verbose then
+ if trace_locating then
logs.report("fileio","unable to locate new script")
end
else
for i=1,#newscripts do
local newscript = resolvers.clean_path(newscripts[i])
- if trace_verbose then
+ if trace_locating then
logs.report("fileio","checking new script %s", newscript)
end
if oldscript == newscript then
- if trace_verbose then
+ if trace_locating then
logs.report("fileio","old and new script are the same")
end
elseif not find(newscript,scriptpath) then
- if trace_verbose then
+ if trace_locating then
logs.report("fileio","new script should come from %s",scriptpath)
end
elseif not (find(oldscript,file.removesuffix(newname).."$") or find(oldscript,newname.."$")) then
- if trace_verbose then
+ if trace_locating then
logs.report("fileio","invalid new script name")
end
else
local newdata = io.loaddata(newscript)
if newdata then
- if trace_verbose then
+ if trace_locating then
logs.report("fileio","old script content replaced by new content")
end
io.savedata(oldscript,newdata)
break
- elseif trace_verbose then
+ elseif trace_locating then
logs.report("fileio","unable to load new script")
end
end
@@ -9500,25 +11530,28 @@ do -- create closure to overcome 200 locals limit
if not modules then modules = { } end modules ['data-tmf'] = {
version = 1.001,
- comment = "companion to luat-lib.tex",
+ comment = "companion to luat-lib.mkiv",
author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
copyright = "PRAGMA ADE / ConTeXt Development Team",
license = "see context related readme files"
}
+local find, gsub, match = string.find, string.gsub, string.match
+local getenv, setenv = os.getenv, os.setenv
+
-- loads *.tmf files in minimal tree roots (to be optimized and documented)
function resolvers.check_environment(tree)
logs.simpleline()
- os.setenv('TMP', os.getenv('TMP') or os.getenv('TEMP') or os.getenv('TMPDIR') or os.getenv('HOME'))
- os.setenv('TEXOS', os.getenv('TEXOS') or ("texmf-" .. os.currentplatform()))
- os.setenv('TEXPATH', (tree or "tex"):gsub("\/+$",''))
- os.setenv('TEXMFOS', os.getenv('TEXPATH') .. "/" .. os.getenv('TEXOS'))
+ setenv('TMP', getenv('TMP') or getenv('TEMP') or getenv('TMPDIR') or getenv('HOME'))
+ setenv('TEXOS', getenv('TEXOS') or ("texmf-" .. os.platform))
+ setenv('TEXPATH', gsub(tree or "tex","\/+$",''))
+ setenv('TEXMFOS', getenv('TEXPATH') .. "/" .. getenv('TEXOS'))
logs.simpleline()
- logs.simple("preset : TEXPATH => %s", os.getenv('TEXPATH'))
- logs.simple("preset : TEXOS => %s", os.getenv('TEXOS'))
- logs.simple("preset : TEXMFOS => %s", os.getenv('TEXMFOS'))
- logs.simple("preset : TMP => %s", os.getenv('TMP'))
+ logs.simple("preset : TEXPATH => %s", getenv('TEXPATH'))
+ logs.simple("preset : TEXOS => %s", getenv('TEXOS'))
+ logs.simple("preset : TEXMFOS => %s", getenv('TEXMFOS'))
+ logs.simple("preset : TMP => %s", getenv('TMP'))
logs.simple('')
end
@@ -9526,27 +11559,27 @@ function resolvers.load_environment(name) -- todo: key=value as well as lua
local f = io.open(name)
if f then
for line in f:lines() do
- if line:find("^[%%%#]") then
+ if find(line,"^[%%%#]") then
-- skip comment
else
- local key, how, value = line:match("^(.-)%s*([<=>%?]+)%s*(.*)%s*$")
+ local key, how, value = match(line,"^(.-)%s*([<=>%?]+)%s*(.*)%s*$")
if how then
- value = value:gsub("%%(.-)%%", function(v) return os.getenv(v) or "" end)
+ value = gsub(value,"%%(.-)%%", function(v) return getenv(v) or "" end)
if how == "=" or how == "<<" then
- os.setenv(key,value)
+ setenv(key,value)
elseif how == "?" or how == "??" then
- os.setenv(key,os.getenv(key) or value)
+ setenv(key,getenv(key) or value)
elseif how == "<" or how == "+=" then
- if os.getenv(key) then
- os.setenv(key,os.getenv(key) .. io.fileseparator .. value)
+ if getenv(key) then
+ setenv(key,getenv(key) .. io.fileseparator .. value)
else
- os.setenv(key,value)
+ setenv(key,value)
end
elseif how == ">" or how == "=+" then
- if os.getenv(key) then
- os.setenv(key,value .. io.pathseparator .. os.getenv(key))
+ if getenv(key) then
+ setenv(key,value .. io.pathseparator .. getenv(key))
else
- os.setenv(key,value)
+ setenv(key,value)
end
end
end
@@ -9585,6 +11618,9 @@ if not modules then modules = { } end modules ['luat-sta'] = {
-- this code is used in the updater
+local gmatch, match = string.gmatch, string.match
+local type = type
+
states = states or { }
states.data = states.data or { }
states.hash = states.hash or { }
@@ -9613,13 +11649,17 @@ function states.set_by_tag(tag,key,value,default,persistent)
if d then
if type(d) == "table" then
local dkey, hkey = key, key
- local pre, post = key:match("(.+)%.([^%.]+)$")
+ local pre, post = match(key,"(.+)%.([^%.]+)$")
if pre and post then
- for k in pre:gmatch("[^%.]+") do
+ for k in gmatch(pre,"[^%.]+") do
local dk = d[k]
if not dk then
dk = { }
d[k] = dk
+ elseif type(dk) == "string" then
+ -- invalid table, unable to upgrade structure
+ -- hope for the best or delete the state file
+ break
end
d = dk
end
@@ -9647,7 +11687,7 @@ function states.get_by_tag(tag,key,default)
else
local d = states.data[tag]
if d then
- for k in key:gmatch("[^%.]+") do
+ for k in gmatch(key,"[^%.]+") do
local dk = d[k]
if dk then
d = dk
@@ -9782,6 +11822,7 @@ own.libs = { -- todo: check which ones are really needed
'l-os.lua',
'l-file.lua',
'l-md5.lua',
+ 'l-url.lua',
'l-dir.lua',
'l-boolean.lua',
'l-math.lua',
@@ -9790,11 +11831,13 @@ own.libs = { -- todo: check which ones are really needed
'l-utils.lua',
'l-aux.lua',
-- 'l-xml.lua',
+ 'trac-tra.lua',
'lxml-tab.lua',
- 'lxml-pth.lua',
- 'lxml-ent.lua',
+ 'lxml-lpt.lua',
+-- 'lxml-ent.lua',
'lxml-mis.lua',
- 'trac-tra.lua',
+ 'lxml-aux.lua',
+ 'lxml-xml.lua',
'luat-env.lua',
'trac-inf.lua',
'trac-log.lua',
@@ -9809,7 +11852,7 @@ own.libs = { -- todo: check which ones are really needed
-- 'data-bin.lua',
'data-zip.lua',
'data-crl.lua',
--- 'data-lua.lua',
+ 'data-lua.lua',
'data-kps.lua', -- so that we can replace kpsewhich
'data-aux.lua', -- updater
'data-tmf.lua', -- tree files
@@ -9827,7 +11870,8 @@ end
-- End of hack.
-own.name = (environment and environment.ownname) or arg[0] or 'luatools.lua'
+own.name = (environment and environment.ownname) or arg[0] or 'luatools.lua'
+
own.path = string.match(own.name,"^(.+)[\\/].-$") or "."
own.list = { '.' }
@@ -9865,18 +11909,25 @@ if not resolvers then
os.exit()
end
-logs.setprogram('MTXrun',"TDS Runner Tool 1.22",environment.arguments["verbose"] or false)
+logs.setprogram('MTXrun',"TDS Runner Tool 1.24",environment.arguments["verbose"] or false)
local instance = resolvers.reset()
+local trackspec = environment.argument("trackers") or environment.argument("track")
+
+if trackspec then
+ trackers.enable(trackspec)
+end
+
runners = runners or { } -- global
messages = messages or { }
messages.help = [[
---script run an mtx script (--noquotes)
---execute run a script or program (--noquotes)
+--script run an mtx script (lua prefered method) (--noquotes), no script gives list
+--execute run a script or program (texmfstart method) (--noquotes)
--resolve resolve prefixed arguments
--ctxlua run internally (using preloaded libs)
+--internal run script using built in libraries (same as --ctxlua)
--locate locate given filename
--autotree use texmf tree cf. env 'texmfstart_tree' or 'texmfstarttree'
@@ -9893,16 +11944,20 @@ messages.help = [[
--unix create unix (linux) stubs
--verbose give a bit more info
+--trackers=list enable given trackers
--engine=str target engine
--progname=str format or backend
--edit launch editor with found file
--launch (--all) launch files like manuals, assumes os support
---intern run script using built in libraries
+--timedrun run a script an time its run
+--autogenerate regenerate databases if needed (handy when used to run context in an editor)
+
+--usekpse use kpse as fallback (when no mkiv and cache installed, often slower)
+--forcekpse force using kpse (handy when no mkiv and cache installed but less functionality)
---usekpse use kpse as fallback (when no mkiv and cache installed, often slower)
---forcekpse force using kpse (handy when no mkiv and cache installed but less functionality)
+--prefixes show supported prefixes
]]
runners.applications = {
@@ -9918,20 +11973,17 @@ runners.suffixes = {
}
runners.registered = {
- texexec = { 'texexec.rb', true }, -- context mkii runner (only tool not to be luafied)
+ texexec = { 'texexec.rb', false }, -- context mkii runner (only tool not to be luafied)
texutil = { 'texutil.rb', true }, -- old perl based index sorter for mkii (old versions need it)
texfont = { 'texfont.pl', true }, -- perl script that makes mkii font metric files
texfind = { 'texfind.pl', false }, -- perltk based tex searching tool, mostly used at pragma
texshow = { 'texshow.pl', false }, -- perltk based context help system, will be luafied
- -- texwork = { \texwork.pl', false }, -- perltk based editing environment, only used at pragma
-
+ -- texwork = { 'texwork.pl', false }, -- perltk based editing environment, only used at pragma
makempy = { 'makempy.pl', true },
mptopdf = { 'mptopdf.pl', true },
pstopdf = { 'pstopdf.rb', true }, -- converts ps (and some more) images, does some cleaning (replaced)
-
-- examplex = { 'examplex.rb', false },
concheck = { 'concheck.rb', false },
-
runtools = { 'runtools.rb', true },
textools = { 'textools.rb', true },
tmftools = { 'tmftools.rb', true },
@@ -9943,7 +11995,6 @@ runners.registered = {
xmltools = { 'xmltools.rb', true },
-- luatools = { 'luatools.lua', true },
mtxtools = { 'mtxtools.rb', true },
-
pdftrimwhite = { 'pdftrimwhite.pl', false }
}
@@ -9952,6 +12003,13 @@ runners.launchers = {
unix = { }
}
+-- like runners.libpath("framework"): looks on script's subpath
+
+function runners.libpath(...)
+ package.prepend_libpath(file.dirname(environment.ownscript),...)
+ package.prepend_libpath(file.dirname(environment.ownname) ,...)
+end
+
function runners.prepare()
local checkname = environment.argument("ifchanged")
if checkname and checkname ~= "" then
@@ -9996,7 +12054,7 @@ function runners.prepare()
return "run"
end
-function runners.execute_script(fullname,internal)
+function runners.execute_script(fullname,internal,nosplit)
local noquote = environment.argument("noquotes")
if fullname and fullname ~= "" then
local state = runners.prepare()
@@ -10036,17 +12094,20 @@ function runners.execute_script(fullname,internal)
end
end
if result and result ~= "" then
- local before, after = environment.split_arguments(fullname) -- already done
- environment.arguments_before, environment.arguments_after = before, after
+ if not no_split then
+ local before, after = environment.split_arguments(fullname) -- already done
+ environment.arguments_before, environment.arguments_after = before, after
+ end
if internal then
- arg = { } for _,v in pairs(after) do arg[#arg+1] = v end
+ arg = { } for _,v in pairs(environment.arguments_after) do arg[#arg+1] = v end
+ environment.ownscript = result
dofile(result)
else
local binary = runners.applications[file.extname(result)]
if binary and binary ~= "" then
result = binary .. " " .. result
end
- local command = result .. " " .. environment.reconstruct_commandline(after,noquote)
+ local command = result .. " " .. environment.reconstruct_commandline(environment.arguments_after,noquote)
if logs.verbose then
logs.simpleline()
logs.simple("executing: %s",command)
@@ -10054,8 +12115,24 @@ function runners.execute_script(fullname,internal)
logs.simpleline()
io.flush()
end
- local code = os.exec(command) -- maybe spawn
- return code == 0
+ -- no os.exec because otherwise we get the wrong return value
+ local code = os.execute(command) -- maybe spawn
+ if code == 0 then
+ return true
+ else
+ if binary then
+ binary = file.addsuffix(binary,os.binsuffix)
+ for p in string.gmatch(os.getenv("PATH"),"[^"..io.pathseparator.."]+") do
+ if lfs.isfile(file.join(p,binary)) then
+ return false
+ end
+ end
+ logs.simpleline()
+ logs.simple("This script needs '%s' which seems not to be installed.",binary)
+ logs.simpleline()
+ end
+ return false
+ end
end
end
end
@@ -10088,7 +12165,7 @@ function runners.execute_program(fullname)
return false
end
--- the --usekpse flag will fallback on kpse
+-- the --usekpse flag will fallback on kpse (hm, we can better update mtx-stubs)
local windows_stub = '@echo off\013\010setlocal\013\010set ownpath=%%~dp0%%\013\010texlua "%%ownpath%%mtxrun.lua" --usekpse --execute %s %%*\013\010endlocal\013\010'
local unix_stub = '#!/bin/sh\010mtxrun --usekpse --execute %s \"$@\"\010'
@@ -10143,7 +12220,7 @@ function runners.locate_file(filename)
end
function runners.locate_platform()
- runners.report_location(os.currentplatform())
+ runners.report_location(os.platform)
end
function runners.report_location(result)
@@ -10176,7 +12253,8 @@ end
function runners.save_script_session(filename, list)
local t = { }
- for _, key in ipairs(list) do
+ for i=1,#list do
+ local key = list[i]
t[key] = environment.arguments[key]
end
io.savedata(filename,table.serialize(t,true))
@@ -10265,20 +12343,22 @@ function runners.find_mtx_script(filename)
if fullname and fullname ~= "" then
return fullname
end
+ -- mtx- prefix checking
+ local mtxprefix = (filename:find("^mtx%-") and "") or "mtx-"
-- context namespace, mtx-<filename>
- fullname = "mtx-" .. filename
+ fullname = mtxprefix .. filename
fullname = found(fullname) or resolvers.find_file(fullname)
if fullname and fullname ~= "" then
return fullname
end
-- context namespace, mtx-<filename>s
- fullname = "mtx-" .. basename .. "s" .. "." .. suffix
+ fullname = mtxprefix .. basename .. "s" .. "." .. suffix
fullname = found(fullname) or resolvers.find_file(fullname)
if fullname and fullname ~= "" then
return fullname
end
-- context namespace, mtx-<filename minus trailing s>
- fullname = "mtx-" .. basename:gsub("s$","") .. "." .. suffix
+ fullname = mtxprefix .. basename:gsub("s$","") .. "." .. suffix
fullname = found(fullname) or resolvers.find_file(fullname)
if fullname and fullname ~= "" then
return fullname
@@ -10288,9 +12368,17 @@ function runners.find_mtx_script(filename)
return fullname
end
-function runners.execute_ctx_script(filename,arguments)
+function runners.execute_ctx_script(filename)
+ local arguments = environment.arguments_after
local fullname = runners.find_mtx_script(filename) or ""
- -- retyr after generate but only if --autogenerate
+ if file.extname(fullname) == "cld" then
+ -- handy in editors where we force --autopdf
+ logs.simple("running cld script: %s",filename)
+ table.insert(arguments,1,fullname)
+ table.insert(arguments,"--autopdf")
+ fullname = runners.find_mtx_script("context") or ""
+ end
+ -- retry after generate but only if --autogenerate
if fullname == "" and environment.argument("autogenerate") then -- might become the default
instance.renewcache = true
logs.setverbose(true)
@@ -10319,32 +12407,51 @@ function runners.execute_ctx_script(filename,arguments)
if logs.verbose then
logs.simple("using script: %s\n",fullname)
end
+ environment.ownscript = fullname
dofile(fullname)
local savename = environment.arguments['save']
- if savename and runners.save_list and not table.is_empty(runners.save_list or { }) then
- if type(savename) ~= "string" then savename = file.basename(fullname) end
- savename = file.replacesuffix(savename,"cfg")
- runners.save_script_session(savename, runners.save_list)
+ if savename then
+ local save_list = runners.save_list
+ if save_list and next(save_list) then
+ if type(savename) ~= "string" then savename = file.basename(fullname) end
+ savename = file.replacesuffix(savename,"cfg")
+ runners.save_script_session(savename,save_list)
+ end
end
return true
end
else
- logs.setverbose(true)
- if filename == "" then
- logs.simple("unknown script, no name given")
+ -- logs.setverbose(true)
+ if filename == "" or filename == "help" then
local context = resolvers.find_file("mtx-context.lua")
+ logs.setverbose(true)
if context ~= "" then
local result = dir.glob((string.gsub(context,"mtx%-context","mtx-*"))) -- () needed
local valid = { }
- for _, scriptname in ipairs(result) do
- scriptname = string.match(scriptname,".*mtx%-([^%-]-)%.lua")
- if scriptname then
- valid[#valid+1] = scriptname
+ table.sort(result)
+ for i=1,#result do
+ local scriptname = result[i]
+ local scriptbase = string.match(scriptname,".*mtx%-([^%-]-)%.lua")
+ if scriptbase then
+ local data = io.loaddata(scriptname)
+ local banner, version = string.match(data,"[\n\r]logs%.extendbanner%s*%(%s*[\"\']([^\n\r]+)%s*(%d+%.%d+)")
+ if banner then
+ valid[#valid+1] = { scriptbase, version, banner }
+ end
end
end
if #valid > 0 then
- logs.simple("known scripts: %s",table.concat(valid,", "))
+ logs.reportbanner()
+ logs.reportline()
+ logs.simple("no script name given, known scripts:")
+ logs.simple()
+ for k=1,#valid do
+ local v = valid[k]
+ logs.simple("%-12s %4s %s",v[1],v[2],v[3])
+ end
end
+ else
+ logs.simple("no script name given")
end
else
filename = file.addsuffix(filename,"lua")
@@ -10358,6 +12465,12 @@ function runners.execute_ctx_script(filename,arguments)
end
end
+function runners.prefixes()
+ logs.reportbanner()
+ logs.reportline()
+ logs.simple(table.concat(resolvers.allprefixes(true)," "))
+end
+
function runners.timedrun(filename) -- just for me
if filename and filename ~= "" then
runners.timed(function() os.execute(filename) end)
@@ -10385,7 +12498,9 @@ instance.lsrmode = environment.argument("lsr") or false
-- maybe the unset has to go to this level
-if environment.argument("usekpse") or environment.argument("forcekpse") then
+local is_mkii_stub = runners.registered[file.removesuffix(file.basename(filename))]
+
+if environment.argument("usekpse") or environment.argument("forcekpse") or is_mkii_stub then
os.setenv("engine","")
os.setenv("progname","")
@@ -10420,7 +12535,7 @@ if environment.argument("usekpse") or environment.argument("forcekpse") then
return (kpse_initialized():show_path(name)) or ""
end
- elseif environment.argument("usekpse") then
+ elseif environment.argument("usekpse") or is_mkii_stub then
resolvers.load()
@@ -10449,7 +12564,6 @@ else
end
-
if environment.argument("selfmerge") then
-- embed used libraries
utils.merger.selfmerge(own.name,own.libs,own.list)
@@ -10462,9 +12576,14 @@ elseif environment.argument("selfupdate") then
elseif environment.argument("ctxlua") or environment.argument("internal") then
-- run a script by loading it (using libs)
ok = runners.execute_script(filename,true)
-elseif environment.argument("script") or environment.argument("s") then
+elseif environment.argument("script") or environment.argument("scripts") then
-- run a script by loading it (using libs), pass args
- ok = runners.execute_ctx_script(filename,after)
+ if is_mkii_stub then
+ -- execute mkii script
+ ok = runners.execute_script(filename,false,true)
+ else
+ ok = runners.execute_ctx_script(filename)
+ end
elseif environment.argument("execute") then
-- execute script
ok = runners.execute_script(filename)
@@ -10491,6 +12610,8 @@ elseif environment.argument("locate") then
elseif environment.argument("platform")then
-- locate platform
runners.locate_platform()
+elseif environment.argument("prefixes") then
+ runners.prefixes()
elseif environment.argument("timedrun") then
-- locate platform
runners.timedrun(filename)
@@ -10499,8 +12620,14 @@ elseif environment.argument("help") or filename=='help' or filename == "" then
-- execute script
elseif filename:find("^bin:") then
ok = runners.execute_program(filename)
+elseif is_mkii_stub then
+ -- execute mkii script
+ ok = runners.execute_script(filename,false,true)
else
- ok = runners.execute_script(filename)
+ ok = runners.execute_ctx_script(filename)
+ if not ok then
+ ok = runners.execute_script(filename)
+ end
end
if os.platform == "unix" then
diff --git a/Master/texmf-dist/scripts/context/stubs/unix/mtxtools b/Master/texmf-dist/scripts/context/stubs/unix/mtxtools
deleted file mode 100755
index 3803c1c6f4e..00000000000
--- a/Master/texmf-dist/scripts/context/stubs/unix/mtxtools
+++ /dev/null
@@ -1,2 +0,0 @@
-#!/bin/sh
-mtxrun --usekpse --execute mtxtools.rb "$@"
diff --git a/Master/texmf-dist/scripts/context/stubs/unix/mtxworks b/Master/texmf-dist/scripts/context/stubs/unix/mtxworks
deleted file mode 100644
index ef8f230c3a3..00000000000
--- a/Master/texmf-dist/scripts/context/stubs/unix/mtxworks
+++ /dev/null
@@ -1,2 +0,0 @@
-#!/bin/sh
-mtxrun --script texworks --start
diff --git a/Master/texmf-dist/scripts/context/stubs/unix/pdftools b/Master/texmf-dist/scripts/context/stubs/unix/pdftools
deleted file mode 100755
index da7bd64cf2a..00000000000
--- a/Master/texmf-dist/scripts/context/stubs/unix/pdftools
+++ /dev/null
@@ -1,2 +0,0 @@
-#!/bin/sh
-mtxrun --usekpse --execute pdftools.rb "$@"
diff --git a/Master/texmf-dist/scripts/context/stubs/unix/pstopdf b/Master/texmf-dist/scripts/context/stubs/unix/pstopdf
deleted file mode 100755
index 059812cceac..00000000000
--- a/Master/texmf-dist/scripts/context/stubs/unix/pstopdf
+++ /dev/null
@@ -1,2 +0,0 @@
-#!/bin/sh
-mtxrun --usekpse --execute pstopdf.rb "$@"
diff --git a/Master/texmf-dist/scripts/context/stubs/unix/rlxtools b/Master/texmf-dist/scripts/context/stubs/unix/rlxtools
deleted file mode 100755
index d01987b3c1f..00000000000
--- a/Master/texmf-dist/scripts/context/stubs/unix/rlxtools
+++ /dev/null
@@ -1,2 +0,0 @@
-#!/bin/sh
-mtxrun --usekpse --execute rlxtools.rb "$@"
diff --git a/Master/texmf-dist/scripts/context/stubs/unix/runtools b/Master/texmf-dist/scripts/context/stubs/unix/runtools
deleted file mode 100755
index e21c1a24405..00000000000
--- a/Master/texmf-dist/scripts/context/stubs/unix/runtools
+++ /dev/null
@@ -1,2 +0,0 @@
-#!/bin/sh
-mtxrun --usekpse --execute runtools.rb "$@"
diff --git a/Master/texmf-dist/scripts/context/stubs/unix/texexec b/Master/texmf-dist/scripts/context/stubs/unix/texexec
index 083e500c69c..cd5900ff84c 100755
--- a/Master/texmf-dist/scripts/context/stubs/unix/texexec
+++ b/Master/texmf-dist/scripts/context/stubs/unix/texexec
@@ -1,2 +1,2 @@
#!/bin/sh
-mtxrun --usekpse --execute texexec.rb "$@"
+mtxrun --usekpse --execute texexec "$@"
diff --git a/Master/texmf-dist/scripts/context/stubs/unix/texfont b/Master/texmf-dist/scripts/context/stubs/unix/texfont
deleted file mode 100755
index bc811a640af..00000000000
--- a/Master/texmf-dist/scripts/context/stubs/unix/texfont
+++ /dev/null
@@ -1,2 +0,0 @@
-#!/bin/sh
-mtxrun --usekpse --execute texfont.pl "$@"
diff --git a/Master/texmf-dist/scripts/context/stubs/unix/textools b/Master/texmf-dist/scripts/context/stubs/unix/textools
deleted file mode 100755
index 76087ca5729..00000000000
--- a/Master/texmf-dist/scripts/context/stubs/unix/textools
+++ /dev/null
@@ -1,2 +0,0 @@
-#!/bin/sh
-mtxrun --usekpse --execute textools.rb "$@"
diff --git a/Master/texmf-dist/scripts/context/stubs/unix/texutil b/Master/texmf-dist/scripts/context/stubs/unix/texutil
deleted file mode 100755
index f5d9b6f1d81..00000000000
--- a/Master/texmf-dist/scripts/context/stubs/unix/texutil
+++ /dev/null
@@ -1,2 +0,0 @@
-#!/bin/sh
-mtxrun --usekpse --execute texutil.rb "$@"
diff --git a/Master/texmf-dist/scripts/context/stubs/unix/tmftools b/Master/texmf-dist/scripts/context/stubs/unix/tmftools
deleted file mode 100755
index 48d32f0fd3a..00000000000
--- a/Master/texmf-dist/scripts/context/stubs/unix/tmftools
+++ /dev/null
@@ -1,2 +0,0 @@
-#!/bin/sh
-mtxrun --usekpse --execute tmftools.rb "$@"
diff --git a/Master/texmf-dist/scripts/context/stubs/unix/xmltools b/Master/texmf-dist/scripts/context/stubs/unix/xmltools
deleted file mode 100755
index a673d1e7a03..00000000000
--- a/Master/texmf-dist/scripts/context/stubs/unix/xmltools
+++ /dev/null
@@ -1,2 +0,0 @@
-#!/bin/sh
-mtxrun --usekpse --execute xmltools.rb "$@"
diff --git a/Master/texmf-dist/tex/context/base/anch-bar.mkiv b/Master/texmf-dist/tex/context/base/anch-bar.mkiv
index d08573c0f60..1013e76096f 100644
--- a/Master/texmf-dist/tex/context/base/anch-bar.mkiv
+++ b/Master/texmf-dist/tex/context/base/anch-bar.mkiv
@@ -56,7 +56,7 @@
\newcount\currentsidebar
\newdimen\sidebardistance
-\def\setupsidebars
+\unexpanded\def\setupsidebars
{\dodoubleargument\dosetupsidebars}
\def\dosetupsidebars[#1][#2]%
@@ -77,7 +77,7 @@
\c!rulecolor=red,
\c!distance=.5\bodyfontsize]
-\def\definesidebar
+\unexpanded\def\definesidebar
{\dodoubleempty\dodefinesidebar}
\def\dodefinesidebar[#1][#2]%
@@ -87,7 +87,7 @@
\getparameters
[\??br#1][#2]}
-\def\startsidebar
+\unexpanded\def\startsidebar
{\dosingleempty\dostartsidebar}
\def\dostartsidebar[#1]%
@@ -115,34 +115,19 @@
% \def\dostopsidebar#1%
% {\removelastspace\tpos{side:#1}\carryoverpar\egroup}
-\def\stopsidebar
+\unexpanded\def\stopsidebar
{\removelastspace\tpos{side:\the\currentsidebar}\carryoverpar\egroup}
\startMPpositionmethod{mpos:bar}
- \startMPpositiongraphic{mpos:bar}{linecolor,linewidth,distance}%
- StartPage ;
- path p ; p :=
- if \MPp\MPbself=\MPp\MPeself :
- (xpart ulcorner Field[Text][Text],\MPy\MPbself+\MPh\MPbself) --
- (xpart llcorner Field[Text][Text],\MPy\MPeself-\MPd\MPeself) ;
- elseif RealPageNumber=\MPp\MPbself :
- (xpart ulcorner Field[Text][Text],\MPy\MPbself+\MPh\MPbself) --
- (llcorner Field[Text][Text]) ;
- elseif RealPageNumber=\MPp\MPeself :
- (ulcorner Field[Text][Text]) --
- (xpart llcorner Field[Text][Text],\MPy\MPeself-\MPd\MPeself) ;
- else :
- (ulcorner Field[Text][Text]) --
- (llcorner Field[Text][Text]) ;
- fi ;
- p := p shifted (-llcorner Field[Text][Text]-(\MPvar{distance},0)) ;
- interim linecap := butt ;
- draw p
- withpen pencircle scaled \MPvar{linewidth}
- withcolor \MPvar{linecolor} ;
- StopPage ;
- \stopMPpositiongraphic
- \MPpositiongraphic{mpos:bar}{}%
+ \startMPpositiongraphic{mpos:bar}{linecolor,linewidth,distance}%
+ position_anchor_bar (
+ \MPp\MPbself, \MPp\MPeself,
+ \MPy\MPbself, \MPy\MPeself,
+ \MPh\MPbself, \MPd\MPeself,
+ \MPvar{distance}, \MPvar{linewidth}, \MPvar{linecolor}
+ ) ;
+ \stopMPpositiongraphic
+ \MPpositiongraphic{mpos:bar}{}%
\stopMPpositionmethod
%D We now reimplement the margin rules handler defined in
diff --git a/Master/texmf-dist/tex/context/base/anch-pgr.mkiv b/Master/texmf-dist/tex/context/base/anch-pgr.mkiv
index c558bb04fa8..248b9ca5e31 100644
--- a/Master/texmf-dist/tex/context/base/anch-pgr.mkiv
+++ b/Master/texmf-dist/tex/context/base/anch-pgr.mkiv
@@ -76,7 +76,7 @@
\fi
\fi\fi}
-\def\placepositionanchors % todo : depth pagebox
+\unexpanded\def\placepositionanchors % todo : depth pagebox
{\ifpositioning
\setbox\scratchbox\vbox to \textheight
{\simpletopskipcorrection
@@ -145,7 +145,7 @@
% obsolete and wrong anyway
%
-% \long\def\defineMPpositiongraphic#1%
+% \long\unexpanded\def\defineMPpositiongraphic#1%
% {\long\setvalue{\MPoverlayposprefix#1}}
%D The rest of the definitions concerning such overlays may
@@ -180,14 +180,14 @@
\vfill}%
\fi}
-\def\startpositionoverlay#1%
+\unexpanded\def\startpositionoverlay#1%
{\iftrialtypesetting % we don't want redundant entries in the list
\@EA\gobbleuntil\@EA\stoppositionoverlay
\else
\def\currentpositionoverlay{#1}%
\fi}
-\def\stoppositionoverlay
+\unexpanded\def\stoppositionoverlay
{\let\currentpositionoverlay\empty}
\def\resetpositionoverlay#1%
@@ -741,15 +741,15 @@
lineradius=\textbackgroundparameter\c!radius}}%
\stoppositionoverlay}
-\def\stoptextbackground
+\unexpanded\def\stoptextbackground
{\dodostoptextbackground
\carryoverpar\egroup}
-\def\starttextbackgroundmanual
+\unexpanded\def\starttextbackgroundmanual
{\dostartattributes{\??td\currenttextbackground}\c!style\c!color\empty
\fpos\currentparbackground\ignorespaces}
-\def\stoptextbackgroundmanual
+\unexpanded\def\stoptextbackgroundmanual
{\tpos\currentparbackground
\dostopattributes}
@@ -797,7 +797,7 @@
%
\dostartattributes{\??td\currenttextbackground}\c!style\c!color\empty
\nowhitespace
-\nobreak % new per 23/04/2006 (else potential break when whitespace)
+ \nobreak % new per 23/04/2006 (else potential break when whitespace)
\seteffectivehsize
\doinhibitblank % \blank[\v!disable]% new
\par}
@@ -816,7 +816,7 @@
\nobreak \vskip-\lineheight \nobreak
\nowhitespace
\egroup
-\bgroup \forgeteverypar % NOT REALLY NEEDED, SAVES HASH/MEM
+ \bgroup \forgeteverypar % NOT REALLY NEEDED, SAVES HASH/MEM
\nobreak \noindent \strut \hfill \kern\zeropoint
\doassignsomeskip\textbackgroundparameter\c!bottomoffset\to\textbackgroundskip
\ifgridsnapping % experimental, pascal (todo: topoffset in same way)
@@ -828,7 +828,7 @@
\else
\tpos\currentparbackground
\fi
-\egroup
+ \egroup
\endgraf % new
\textbackgroundparameter\c!after}
@@ -900,12 +900,13 @@
\else
\MPy#1-\MPy#2-\MPy\textanchor+\MPy\textanchor+\MPh\textanchor
\fi
- \fi}%
+ \fi
+ \relax}%
\edef\textparwidth
{\the\dimexpr
\ifcase\scratchcounter
% one page
- \dimexpr\MPx#2-\MPx#1%
+ \MPx#2-\MPx#1%
\else
% two or more pages / maybe also hang
\ifx#3\relax
@@ -913,7 +914,8 @@
\else
\MPw\MPparanchor-\MPl\MPparanchor-\MPr\MPparanchor
\fi
- \fi}}
+ \fi
+ \relax}}
\def\mintextparheight{4\lineheight}
@@ -935,7 +937,7 @@
\fi
\fi}
-\def\definetextbackground
+\unexpanded\def\definetextbackground
{\dodoubleempty\dodefinetextbackground}
\def\dodefinetextbackground[#1][#2]% parent and ..parameter
@@ -948,13 +950,13 @@
\c!leftoffset,\c!rightoffset,\c!topoffset,\c!bottomoffset]%
\getparameters[\??td#1][#2]%
\doifvalue{\??td#1\c!state}\v!start\checktextbackgrounds
- \unexpanded\setvalue{#1}%
+ \setuvalue{#1}%
{\groupedcommand{\starttextbackground[#1]}{\stoptextbackground}}%
\setvalue{\e!start#1}{\starttextbackground[#1]}%
\setvalue{\e!stop #1}{\stoptextbackground}%
\fi}
-\def\setuptextbackground
+\unexpanded\def\setuptextbackground
{\dodoubleargument\dosetuptextbackground}
\def\dosetuptextbackground[#1][#2]%
@@ -1029,6 +1031,8 @@
linecolor=blue,
linewidth=1pt]
+% these might become macros in mp-page
+
\startuseMPgraphic{mpos:common:ec}
path pa ; pair ca ; color lc ; numeric lw ;
lw := \MPvar{linewidth} ;
@@ -1632,7 +1636,7 @@
\copyposition{e:#1}{e:#2}%
\dosetpositionaction{b:#2}{\dopositionaction{b:#1}}}
-\def\definepositionframed
+\unexpanded\def\definepositionframed
{\dodoubleargument\dodefinepositionframed}
\def\dodefinepositionframed[#1][#2]%
diff --git a/Master/texmf-dist/tex/context/base/anch-pos.lua b/Master/texmf-dist/tex/context/base/anch-pos.lua
index b16fac05c9c..8066af4ceba 100644
--- a/Master/texmf-dist/tex/context/base/anch-pos.lua
+++ b/Master/texmf-dist/tex/context/base/anch-pos.lua
@@ -1,6 +1,6 @@
if not modules then modules = { } end modules ['anch-pos'] = {
version = 1.001,
- comment = "companion to anch-pos.tex",
+ comment = "companion to anch-pos.mkiv",
author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
copyright = "PRAGMA ADE / ConTeXt Development Team",
license = "see context related readme files"
@@ -12,7 +12,9 @@ can we store much more information in <l n='lua'/> but it's also
more efficient.</p>
--ldx]]--
-local texprint, concat, format = tex.print, table.concat, string.format
+local concat, format = table.concat, string.format
+local texprint, ctxcatcodes = tex.print, tex.ctxcatcodes
+local lpegmatch = lpeg.match
jobpositions = jobpositions or { }
jobpositions.collected = jobpositions.collected or { }
@@ -50,90 +52,115 @@ function jobpositions.doifelse(name)
commands.testcase(jobpositions.collected[name] or ptbs[name])
end
-function jobpositions.MPp(id) local jpi = pcol[id] or ptbs[id] texprint((jpi and jpi[1]) or '0' ) end
-function jobpositions.MPx(id) local jpi = pcol[id] or ptbs[id] texprint((jpi and jpi[2]) or '0pt') end
-function jobpositions.MPy(id) local jpi = pcol[id] or ptbs[id] texprint((jpi and jpi[3]) or '0pt') end
-function jobpositions.MPw(id) local jpi = pcol[id] or ptbs[id] texprint((jpi and jpi[4]) or '0pt') end
-function jobpositions.MPh(id) local jpi = pcol[id] or ptbs[id] texprint((jpi and jpi[5]) or '0pt') end
-function jobpositions.MPd(id) local jpi = pcol[id] or ptbs[id] texprint((jpi and jpi[6]) or '0pt') end
-
-
- function jobpositions.MPx(id)
- local jpi = pcol[id] or ptbs[id]
- local x = jpi and jpi[2]
- if x then
- texprint(format('\\the\\dimexpr %s-%s\\relax',x,dx))
- else
- texprint('0pt')
- end
+function jobpositions.MPp(id) local jpi = pcol[id] or ptbs[id] texprint(ctxcatcodes,(jpi and jpi[1]) or '0' ) end
+function jobpositions.MPx(id) local jpi = pcol[id] or ptbs[id] texprint(ctxcatcodes,(jpi and jpi[2]) or '0pt') end
+function jobpositions.MPy(id) local jpi = pcol[id] or ptbs[id] texprint(ctxcatcodes,(jpi and jpi[3]) or '0pt') end
+function jobpositions.MPw(id) local jpi = pcol[id] or ptbs[id] texprint(ctxcatcodes,(jpi and jpi[4]) or '0pt') end
+function jobpositions.MPh(id) local jpi = pcol[id] or ptbs[id] texprint(ctxcatcodes,(jpi and jpi[5]) or '0pt') end
+function jobpositions.MPd(id) local jpi = pcol[id] or ptbs[id] texprint(ctxcatcodes,(jpi and jpi[6]) or '0pt') end
+
+
+function jobpositions.MPx(id)
+ local jpi = pcol[id] or ptbs[id]
+ local x = jpi and jpi[2]
+ if x then
+ texprint(ctxcatcodes,format('\\the\\dimexpr%s-%s\\relax',x,dx)) -- no space after dimexpr !
+ else
+ texprint(ctxcatcodes,'0pt')
end
- function jobpositions.MPy(id)
- local jpi = pcol[id] or ptbs[id]
- local y = jpi and jpi[3]
- if y then
- texprint(format('\\the\\dimexpr %s-%s\\relax',y,dy))
- else
- texprint('0pt')
- end
+end
+
+function jobpositions.MPy(id)
+ local jpi = pcol[id] or ptbs[id]
+ local y = jpi and jpi[3]
+ if y then
+ texprint(ctxcatcodes,format('\\the\\dimexpr%s-%s\\relax',y,dy)) -- no space after dimexpr !
+ else
+ texprint(ctxcatcodes,'0pt')
end
+end
-- the following are only for MP so there we can leave out the pt
--- can be writes
+-- can be writes and no format needed any more
function jobpositions.MPxy(id)
local jpi = pcol[id] or ptbs[id]
if jpi then
- texprint(format('(%s-%s,%s-%s)',jpi[2],dx,jpi[3],dy))
+ texprint(ctxcatcodes,format('(%s-%s,%s-%s)',jpi[2],dx,jpi[3],dy))
+--~ texprint(ctxcatcodes,'(',jpi[2],'-',dx,',',jpi[3],'-',dy,')')
else
- texprint('(0,0)')
+ texprint(ctxcatcodes,'(0,0)')
end
end
+
function jobpositions.MPll(id)
local jpi = pcol[id] or ptbs[id]
if jpi then
- texprint(format('(%s-%s,%s-%s-%s)',jpi[2],dx,jpi[3],jpi[6],dy))
+ texprint(ctxcatcodes,format('(%s-%s,%s-%s-%s)',jpi[2],dx,jpi[3],jpi[6],dy))
+--~ texprint(ctxcatcodes,'(',jpi[2],'-',dx,',',jpi[3],'-',jpi[6],'-',dy,')')
else
- texprint('(0,0)')
+ texprint(ctxcatcodes,'(0,0)')
end
end
+
function jobpositions.MPlr(id)
local jpi = pcol[id] or ptbs[id]
if jpi then
- texprint(format('(%s+%s-%s,%s-%s-%s)',jpi[2],jpi[4],dx,jpi[3],jpi[6],dy))
+ texprint(ctxcatcodes,format('(%s+%s-%s,%s-%s-%s)',jpi[2],jpi[4],dx,jpi[3],jpi[6],dy))
+--~ texprint(ctxcatcodes,'(',jpi[2],'+',jpi[4],'-',dx,',',jpi[3],'-',jpi[6],'-',dy,')')
else
- texprint('(0,0)')
+ texprint(ctxcatcodes,'(0,0)')
end
end
+
function jobpositions.MPur(id)
local jpi = pcol[id] or ptbs[id]
if jpi then
- texprint(format('(%s+%s-%s,%s+%s-%s)',jpi[2],jpi[4],dx,jpi[3],jpi[5],dy))
+ texprint(ctxcatcodes,format('(%s+%s-%s,%s+%s-%s)',jpi[2],jpi[4],dx,jpi[3],jpi[5],dy))
+--~ texprint(ctxcatcodes,'(',jpi[2],'+',jpi[4],'-',dx,',',jpi[3],'+',jpi[5],'-',dy,')')
else
- texprint('(0,0)')
+ texprint(ctxcatcodes,'(0,0)')
end
end
+
function jobpositions.MPul(id)
local jpi = pcol[id] or ptbs[id]
if jpi then
- texprint(format('(%s-%s,%s+%s-%s)',jpi[2],dx,jpi[3],jpi[5],dy))
+ texprint(ctxcatcodes,format('(%s-%s,%s+%s-%s)',jpi[2],dx,jpi[3],jpi[5],dy))
+--~ texprint(ctxcatcodes,'(',jpi[2],'-',dx,',',jpi[3],'+',jpi[5],'-',dy,')')
else
- texprint('(0,0)')
+ texprint(ctxcatcodes,'(0,0)')
end
end
+
function jobpositions.MPpos(id)
local jpi = pcol[id] or ptbs[id]
if jpi then
- texprint(concat(jpi,',',1,6))
+ texprint(ctxcatcodes,concat(jpi,',',1,6))
else
- texprint('0,0,0,0,0,0')
+ texprint(ctxcatcodes,'0,0,0,0,0,0')
end
end
+
+local splitter = lpeg.Ct(lpeg.splitat(","))
+
function jobpositions.MPplus(id,n,default)
local jpi = pcol[id] or ptbs[id]
- texprint((jpi and jpi[6+n]) or default)
+ if not jpi then
+ texprint(ctxcatcodes,default)
+ else
+ local split = jpi[0]
+ if not split then
+ split = lpegmatch(splitter,jpi[7])
+ jpi[0] = split
+ end
+ texprint(ctxcatcodes,split[n] or default)
+ end
end
+
function jobpositions.MPrest(id,default)
local jpi = pcol[id] or ptbs[id]
- texprint((jpi and jpi[7] and concat(jpi,",",7,#jpi)) or default)
+ -- texprint(ctxcatcodes,(jpi and jpi[7] and concat(jpi,",",7,#jpi)) or default)
+ texprint(ctxcatcodes,(jpi and jpi[7]) or default)
end
diff --git a/Master/texmf-dist/tex/context/base/anch-pos.mkiv b/Master/texmf-dist/tex/context/base/anch-pos.mkiv
index 0ddda9af40f..e454747daf2 100644
--- a/Master/texmf-dist/tex/context/base/anch-pos.mkiv
+++ b/Master/texmf-dist/tex/context/base/anch-pos.mkiv
@@ -205,18 +205,18 @@
% \the\dimexpr\noexpand\lastsavedpositionx\ifnum\positionanchormode=\plusone-\MPx\pageanchor\fi\relax
% \the\dimexpr\noexpand\lastsavedpositiony\ifnum\positionanchormode=\plusone-\MPx\pageanchor\fi\relax
-\def\MPp #1{\ctxlua{jobpositions.MPp("#1")}}
-\def\MPx #1{\ctxlua{jobpositions.MPx("#1")}}
-\def\MPy #1{\ctxlua{jobpositions.MPy("#1")}}
-\def\MPw #1{\ctxlua{jobpositions.MPw("#1")}}
-\def\MPh #1{\ctxlua{jobpositions.MPh("#1")}}
-\def\MPd #1{\ctxlua{jobpositions.MPd("#1")}}
-\def\MPxy #1{\ctxlua{jobpositions.MPxy("#1")}}
-\def\MPll #1{\ctxlua{jobpositions.MPll("#1")}}
-\def\MPlr #1{\ctxlua{jobpositions.MPlr("#1")}}
-\def\MPur #1{\ctxlua{jobpositions.MPur("#1")}}
-\def\MPul #1{\ctxlua{jobpositions.MPul("#1")}}
-\def\MPpos #1{\ctxlua{jobpositions.MPpos("#1")}}
+\def\MPp #1{\ctxlua{jobpositions.MPp("#1")}}
+\def\MPx #1{\ctxlua{jobpositions.MPx("#1")}}
+\def\MPy #1{\ctxlua{jobpositions.MPy("#1")}}
+\def\MPw #1{\ctxlua{jobpositions.MPw("#1")}}
+\def\MPh #1{\ctxlua{jobpositions.MPh("#1")}}
+\def\MPd #1{\ctxlua{jobpositions.MPd("#1")}}
+\def\MPxy #1{\ctxlua{jobpositions.MPxy("#1")}}
+\def\MPll #1{\ctxlua{jobpositions.MPll("#1")}}
+\def\MPlr #1{\ctxlua{jobpositions.MPlr("#1")}}
+\def\MPur #1{\ctxlua{jobpositions.MPur("#1")}}
+\def\MPul #1{\ctxlua{jobpositions.MPul("#1")}}
+\def\MPpos#1{\ctxlua{jobpositions.MPpos("#1")}}
%D \macros
%D {MPplus, MPrest, MPv, MPvv}
diff --git a/Master/texmf-dist/tex/context/base/anch-snc.mkiv b/Master/texmf-dist/tex/context/base/anch-snc.mkiv
index 1f361011102..f976047c9b9 100644
--- a/Master/texmf-dist/tex/context/base/anch-snc.mkiv
+++ b/Master/texmf-dist/tex/context/base/anch-snc.mkiv
@@ -22,7 +22,7 @@
\ifx\s!preset \undefined \def\s!preset {preset} \fi
\ifx\s!syncpos\undefined \def\s!syncpos{syncpos} \fi
-\def\definesyncpositions[#1]%
+\unexpanded\def\definesyncpositions[#1]%
{\global\let\flushsyncpositions\doflushsyncpositions % only when used
\setcounter{\s!num:\s!syncpos:#1}{0}%
\doglobal\appendtoksonce\csname\s!reset :\s!syncpos:#1\endcsname\to\resetsyncpositions
diff --git a/Master/texmf-dist/tex/context/base/attr-ini.lua b/Master/texmf-dist/tex/context/base/attr-ini.lua
index 535488c35b1..81c2f4744ca 100644
--- a/Master/texmf-dist/tex/context/base/attr-ini.lua
+++ b/Master/texmf-dist/tex/context/base/attr-ini.lua
@@ -1,6 +1,6 @@
if not modules then modules = { } end modules ['attr-ini'] = {
version = 1.001,
- comment = "companion to attr-ini.tex",
+ comment = "companion to attr-ini.mkiv",
author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
copyright = "PRAGMA ADE / ConTeXt Development Team",
license = "see context related readme files"
@@ -15,8 +15,10 @@ local concat = table.concat
local texsprint = tex.sprint
local ctxcatcodes = tex.ctxcatcodes
+local unsetvalue = attributes.unsetvalue
--- todo: document this
+-- todo: document this but first reimplement this as it reflects the early
+-- days of luatex / mkiv and we have better ways now
-- nb: attributes: color etc is much slower than normal (marks + literals) but ...
-- nb. too many "0 g"s
@@ -60,7 +62,6 @@ colors.data = colors.data or { }
colors.values = colors.values or { }
colors.registered = colors.registered or { }
-colors.enabled = true
colors.weightgray = true
colors.attribute = attributes.private('color')
colors.selector = attributes.private('colormodel')
@@ -79,10 +80,13 @@ local templates = {
}
local models = {
- all = 1,
- gray = 2,
- rgb = 3,
- cmyk = 4,
+ [interfaces.variables.none] = unsetvalue,
+ black = unsetvalue,
+ bw = unsetvalue,
+ all = 1,
+ gray = 2,
+ rgb = 3,
+ cmyk = 4,
}
colors.model = "all"
@@ -94,8 +98,7 @@ local registered = colors.registered
local numbers = attributes.numbers
local list = attributes.list
-local min = math.min
-local max = math.max
+local min, max, floor = math.min, math.max, math.floor
local nodeinjections = backends.nodeinjections
local codeinjections = backends.codeinjections
@@ -121,10 +124,77 @@ local function cmyktogray(c,m,y,k)
return rgbtogray(cmyktorgb(c,m,y,k))
end
+-- http://en.wikipedia.org/wiki/HSI_color_space
+-- http://nl.wikipedia.org/wiki/HSV_(kleurruimte)
+
+
+local function hsvtorgb(h,s,v)
+ -- h = h % 360
+ local hd = h/60
+ local hf = floor(hd)
+ local hi = hf % 6
+ -- local f = hd - hi
+ local f = hd - hf
+ local p = v * (1 - s)
+ local q = v * (1 - f * s)
+ local t = v * (1 - (1 - f) * s)
+ if hi == 0 then
+ return v, t, p
+ elseif hi == 1 then
+ return q, v, p
+ elseif hi == 2 then
+ return p, v, t
+ elseif hi == 3 then
+ return p, q, v
+ elseif hi == 4 then
+ return t, p, v
+ elseif hi == 5 then
+ return v, p, q
+ else
+ print("error in hsv -> rgb",hi,h,s,v)
+ end
+end
+
+function rgbtohsv(r,g,b)
+ local offset, maximum, other_1, other_2
+ if r >= g and r >= b then
+ offset, maximum, other_1, other_2 = 0, r, g, b
+ elseif g >= r and g >= b then
+ offset, maximum, other_1, other_2 = 2, g, b, r
+ else
+ offset, maximum, other_1, other_2 = 4, b, r, g
+ end
+ if maximum == 0 then
+ return 0, 0, 0
+ end
+ local minimum = other_1 < other_2 and other_1 or other_2
+ if maximum == minimum then
+ return 0, 0, maximum
+ end
+ local delta = maximum - minimum
+ return (offset + (other_1-other_2)/delta)*60, delta/maximum, maximum
+end
+
+function graytorgb(s) -- unweighted
+ return 1-s, 1-s, 1-s
+end
+
+function hsvtogray(h,s,v)
+ return rgb_to_gray(hsv_to_rgb(h,s,v))
+end
+
+function grayto_hsv(s)
+ return 0, 0, s
+end
+
colors.rgbtocmyk = rgbtocmyk
colors.rgbtogray = rgbtogray
colors.cmyktorgb = cmyktorgb
colors.cmyktogray = cmyktogray
+colors.rgbtohsv = rgbtohsv
+colors.hsvtorgb = hsvtorgb
+colors.hsvtogray = hsvtogray
+colors.graytohsv = graytohsv
-- we can share some *data by using s, rgb and cmyk hashes, but
-- normally the amount of colors is not that large; storing the
@@ -192,16 +262,20 @@ local function reviver(data,n)
d = { gray, gray, gray, gray }
logs.report("attributes","unable to revive color %s",n or "?")
else
- local kind, gray, rgb, cmyk = v[1], graycolor(v[2]), rgbcolor(v[3],v[4],v[5]), cmykcolor(v[6],v[7],v[8],v[9])
+ local kind = v[1]
if kind == 2 then
+ local gray= graycolor(v[2])
d = { gray, gray, gray, gray }
elseif kind == 3 then
+ local gray, rgb, cmyk = graycolor(v[2]), rgbcolor(v[3],v[4],v[5]), cmykcolor(v[6],v[7],v[8],v[9])
d = { rgb, gray, rgb, cmyk }
elseif kind == 4 then
+ local gray, rgb, cmyk = graycolor(v[2]), rgbcolor(v[3],v[4],v[5]), cmykcolor(v[6],v[7],v[8],v[9])
d = { cmyk, gray, rgb, cmyk }
elseif kind == 5 then
local spot = spotcolor(v[10],v[11],v[12],v[13])
- d = { spot, gray, rgb, cmyk }
+ -- d = { spot, gray, rgb, cmyk }
+ d = { spot, spot, spot, spot }
end
end
data[n] = d
@@ -226,7 +300,7 @@ function colors.register(name, colorspace, ...) -- passing 9 vars is faster (but
local stamp = format(templates[colorspace],...)
local color = registered[stamp]
if not color then
- color = #values+1
+ color = #values + 1
values[color] = colors[colorspace](...)
registered[stamp] = color
-- colors.reviver(color)
@@ -250,13 +324,16 @@ shipouts.handle_color = nodes.install_attribute_handler {
resolver = function() return colors.main end,
}
+function colors.enable()
+ tasks.enableaction("shipouts","shipouts.handle_color")
+end
+
-- transparencies
transparencies = transparencies or { }
transparencies.registered = transparencies.registered or { }
transparencies.data = transparencies.data or { }
transparencies.values = transparencies.values or { }
-transparencies.enabled = false
transparencies.triggering = true
transparencies.attribute = attributes.private('transparency')
@@ -336,24 +413,27 @@ shipouts.handle_transparency = nodes.install_attribute_handler {
processor = states.process,
}
---- overprint / knockout
+function transparencies.enable()
+ tasks.enableaction("shipouts","shipouts.handle_transparency")
+end
+
+--- colorintents: overprint / knockout
-overprints = overprints or { }
-overprints.data = overprints.data or { }
-overprints.enabled = false
-overprints.attribute = attributes.private('overprint')
+colorintents = colorintents or { }
+colorintents.data = colorintents.data or { }
+colorintents.attribute = attributes.private('colorintent')
-overprints.registered = {
+colorintents.registered = {
overprint = 1,
knockout = 2,
}
-local data, registered = overprints.data, overprints.registered
+local data, registered = colorintents.data, colorintents.registered
-local function extender(overprints,key)
+local function extender(colorintents,key)
if key == "none" then
local d = data[2]
- overprints.none = d
+ colorintents.none = d
return d
end
end
@@ -370,26 +450,29 @@ local function reviver(data,n)
end
end
-setmetatable(overprints, { __index = extender })
-setmetatable(overprints.data, { __index = reviver })
+setmetatable(colorintents, { __index = extender })
+setmetatable(colorintents.data, { __index = reviver })
-function overprints.register(stamp)
+function colorintents.register(stamp)
return registered[stamp] or registered.overprint
end
-shipouts.handle_overprint = nodes.install_attribute_handler {
- name = "overprint",
- namespace = overprints,
+shipouts.handle_colorintent = nodes.install_attribute_handler {
+ name = "colorintent",
+ namespace = colorintents,
initializer = states.initialize,
finalizer = states.finalize,
processor = states.process,
}
+function colorintents.enable()
+ tasks.enableaction("shipouts","shipouts.handle_colorintent")
+end
+
--- negative / positive
negatives = negatives or { }
negatives.data = negatives.data or { }
-negatives.enabled = false
negatives.attribute = attributes.private("negative")
negatives.registered = {
@@ -434,13 +517,16 @@ shipouts.handle_negative = nodes.install_attribute_handler {
processor = states.process,
}
+function negatives.enable()
+ tasks.enableaction("shipouts","shipouts.handle_negative")
+end
+
-- effects -- can be optimized (todo: metatables)
effects = effects or { }
effects.data = effects.data or { }
effects.values = effects.values or { }
effects.registered = effects.registered or { }
-effects.enabled = false
effects.stamp = "%s:%s:%s"
effects.attribute = attributes.private("effect")
@@ -463,7 +549,7 @@ end
local function reviver(data,n)
local e = values[n] -- we could nil values[n] now but hardly needed
- local d = effect(v[1],v[2],v[3])
+ local d = effect(e[1],e[2],e[3])
data[n] = d
return d
end
@@ -490,6 +576,10 @@ shipouts.handle_effect = nodes.install_attribute_handler {
processor = states.process,
}
+function effects.enable()
+ tasks.enableaction("shipouts","shipouts.handle_effect")
+end
+
-- layers (ugly code, due to no grouping and such); currently we use exclusive layers
-- but when we need it stacked layers might show up too; the next function based
-- approach can be replaced by static (metatable driven) resolvers
@@ -499,7 +589,6 @@ viewerlayers.data = viewerlayers.data or { }
viewerlayers.registered = viewerlayers.registered or { }
viewerlayers.values = viewerlayers.values or { }
viewerlayers.listwise = viewerlayers.listwise or { }
-viewerlayers.enabled = false
viewerlayers.attribute = attributes.private("viewerlayer")
storage.register("viewerlayers/registered", viewerlayers.registered, "viewerlayers.registered")
@@ -553,3 +642,7 @@ shipouts.handle_viewerlayer = nodes.install_attribute_handler {
finalizer = states.finalize,
processor = states.stacked,
}
+
+function viewerlayers.enable()
+ tasks.enableaction("shipouts","shipouts.handle_viewerlayer")
+end
diff --git a/Master/texmf-dist/tex/context/base/attr-ini.mkiv b/Master/texmf-dist/tex/context/base/attr-ini.mkiv
index b90d4976b00..87d06c48a44 100644
--- a/Master/texmf-dist/tex/context/base/attr-ini.mkiv
+++ b/Master/texmf-dist/tex/context/base/attr-ini.mkiv
@@ -20,6 +20,21 @@
\registerctxluafile{attr-ini}{1.001}
+%D This might move:
+
+\def\pushattribute#1%
+ {\global\advance\csname\??ae:\string#1\endcsname\plusone
+ \global\expandafter\mathchardef\csname\??ae:\string#1:\number\csname\??ae:\string#1\endcsname\endcsname\attribute#1}
+
+\def\popattribute#1%
+ {\attribute#1\csname\??ae:\string#1:\number\csname\??ae:\string#1\endcsname\endcsname
+ \global\advance\csname\??ae:\string#1\endcsname\minusone}
+
+\def\installattributestack#1%
+ {\expandafter\newcount\csname\??ae:\string#1\endcsname}
+
+%D For the moment we put this here (later it will move to where it's used):
+
\definesystemattribute[state]
\definesystemattribute[skip]
\definesystemattribute[penalty]
@@ -27,14 +42,16 @@
\definesystemattribute[color] \chardef\colorattribute \dogetattributeid{color}
\definesystemattribute[transparency] \chardef\transparencyattribute \dogetattributeid{transparency}
\definesystemattribute[background] \chardef\backgroundattribute \dogetattributeid{background}
-\definesystemattribute[overprint]
-\definesystemattribute[negative]
-\definesystemattribute[effect]
+\definesystemattribute[colorintent] \chardef\colorintentattribute \dogetattributeid{colorintent}
+\definesystemattribute[negative] \chardef\negativeattribute \dogetattributeid{negative}
+\definesystemattribute[effect] \chardef\effectattribute \dogetattributeid{effect}
\definesystemattribute[viewerlayer] \chardef\viewerlayerattribute \dogetattributeid{viewerlayer}
\definesystemattribute[layoutcomponent] \chardef\layoutcomponentattribute\dogetattributeid{layoutcomponent}
\definesystemattribute[reference] \chardef\referenceattribute \dogetattributeid{reference}
\definesystemattribute[destination] \chardef\destinationattribute \dogetattributeid{destination}
\definesystemattribute[graphicvadjust] \chardef\graphicvadjustattribute \dogetattributeid{graphicvadjust}
+\definesystemattribute[ruled] \chardef\ruledattribute \dogetattributeid{ruled}
+\definesystemattribute[shifted] \chardef\shiftedattribute \dogetattributeid{shifted}
% \definesystemattribute[ignore]
%
@@ -53,14 +70,14 @@
\newcount\currentcolormodel
-\def\setcolormodel#1%
+\def\dosetcolormodel#1%
{\currentcolormodel\ctxlua{tex.print(colors.setmodel('#1'))}%
- \dosetattribute{colormodel}{\the\currentcolormodel}}
+ \attribute\colormodelattribute\currentcolormodel}
-\setcolormodel{all}
+\dosetcolormodel{all}
\appendtoks
- \setcolormodel{all}% redundant?
+ \dosetcolormodel{all}% redundant?
\to \everyjob
\def\registerrgbcolor #1#2#3#4{\ctxlua{colors.register('#1','rgb' ,#2,#3,#4)}}
@@ -70,12 +87,12 @@
% transparency
\def\registertransparency#1#2#3%
- {\setevalue{(ts:#1)}{\dosetattribute{transparency}{\ctxlua{tex.print(transparencies.register(#2,#3))}}}}
+ {\setevalue{(ts:#1)}{\attribute\transparencyattribute\ctxlua{tex.write(transparencies.register(#2,#3))} }}
\def\sometransparencyswitch#1{\csname(ts:#1)\endcsname}
\def\sometransparencyswitch
- {\ctxlua{transparencies.enabled=true}%
+ {\ctxlua{transparencies.enable()}%
\gdef\sometransparencyswitch##1{\csname(ts:##1)\endcsname}%
\sometransparencyswitch}
@@ -84,24 +101,28 @@
% overprint
-\def\registeroverprint#1#2%
- {\setevalue{(os:#1)}{\dosetattribute{overprint}{\ctxlua{tex.print(overprints.register('#2'))}}}}
+\def\registercolorintent#1#2%
+ {\setevalue{(os:#1)}{\attribute\colorintentattribute\ctxlua{tex.write(colorintents.register('#2'))} }}
-\def\dotriggeroverprint
- {\ctxlua{overprints.enabled=true}%
- \gdef\dotriggeroverprint##1{\csname(os:##1)\endcsname}%
- \dotriggeroverprint}
+\def\dotriggercolorintent
+ {\ctxlua{colorintents.enable()}%
+ \gdef\dotriggercolorintent##1{\csname(os:##1)\endcsname}%
+ \dotriggercolorintent}
-\registeroverprint{knockout} {knockout}
-\registeroverprint{overprint}{overprint}
+\registercolorintent{knockout} {knockout}
+\registercolorintent{overprint}{overprint}
+
+\installattributestack\colorintentattribute
+
+\setevalue{(os:#\v!none}{\attribute\colorintentattribute\attributeunsetvalue} % does this work out ok?
% negative
\def\registernegative#1#2%
- {\setevalue{(ns:#1)}{\dosetattribute{negative}{\ctxlua{tex.print(negatives.register('#2'))}}}}
+ {\setevalue{(ns:#1)}{\attribute\negativeattribute\ctxlua{tex.write(negatives.register('#2'))} }}
\def\dotriggernegative
- {\ctxlua{negatives.enabled=true}%
+ {\ctxlua{negatives.enable()}%
\gdef\dotriggernegative##1{\csname(ns:##1)\endcsname}%
\dotriggernegative}
@@ -112,10 +133,10 @@
\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))}}}}
+ {\attribute\effectattribute\ctxlua{tex.write(effects.register('#1',#2,\number\dimexpr#3\relax))} }}
\def\dotriggereffect
- {\ctxlua{effects.enabled=true}%
+ {\ctxlua{effects.enable()}%
\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}%
@@ -129,20 +150,15 @@
% viewerlayers (will probably change a bit)
-% \def\registerviewerlayer#1#2% global !
-% {\setxvalue{(vl:#1)}{\dosetattribute{viewerlayer}{\ctxlua{tex.print(viewerlayers.register('#2'))}}}}
-%
-% \setevalue{(vl:)}{\doresetattribute{viewerlayer}}
-%
% needs to work over stopitemize grouping etc
\def\registerviewerlayer#1#2% global !
- {\setxvalue{(vl:#1)}{\global\dosetattribute{viewerlayer}{\ctxlua{tex.print(viewerlayers.register('#2'))}}}}
+ {\setxvalue{(vl:#1)}{\global\attribute\viewerlayerattribute\ctxlua{tex.write(viewerlayers.register('#2'))} }}
-\setevalue{(vl:)}{\global\doresetattribute{viewerlayer}}
+\setevalue{(vl:)}{\global\attribute\viewerlayerattribute\attributeunsetvalue}
\def\dotriggerviewerlayer
- {\ctxlua{viewerlayers.enabled=true}%
+ {\ctxlua{viewerlayers.enable()}%
\gdef\dotriggerviewerlayer##1{\csname(vl:##1)\endcsname}%
\dotriggerviewerlayer}
diff --git a/Master/texmf-dist/tex/context/base/back-ini.lua b/Master/texmf-dist/tex/context/base/back-ini.lua
index bad6b0282d5..12a487dd4dc 100644
--- a/Master/texmf-dist/tex/context/base/back-ini.lua
+++ b/Master/texmf-dist/tex/context/base/back-ini.lua
@@ -1,6 +1,6 @@
if not modules then modules = { } end modules ['back-ini'] = {
version = 1.001,
- comment = "companion to back-ini.tex",
+ comment = "companion to back-ini.mkiv",
author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
copyright = "PRAGMA ADE / ConTeXt Development Team",
license = "see context related readme files"
@@ -46,6 +46,7 @@ backends.codeinjections = {
registeredsymbol = nothing,
registercomment = nothing,
+ embedfile = nothing,
attachfile = nothing,
adddocumentinfo = nothing,
setupidentity = nothing,
@@ -55,7 +56,6 @@ backends.codeinjections = {
addtransparencygroup = nothing,
typesetfield = nothing,
- finishfields = nothing,
doiffieldelse = nothing,
doiffieldgroupelse = nothing,
definefield = nothing,
diff --git a/Master/texmf-dist/tex/context/base/back-ini.mkiv b/Master/texmf-dist/tex/context/base/back-ini.mkiv
index 07e9147f259..b7bbdb56f01 100644
--- a/Master/texmf-dist/tex/context/base/back-ini.mkiv
+++ b/Master/texmf-dist/tex/context/base/back-ini.mkiv
@@ -163,6 +163,6 @@
\edef\jobsuffix{#1}%
\setsystemmode\jobsuffix}
-\def\setupoutput[#1]{} % will be command line switch
+\unexpanded\def\setupoutput[#1]{} % will be command line switch
\protect \endinput
diff --git a/Master/texmf-dist/tex/context/base/back-pdf.lua b/Master/texmf-dist/tex/context/base/back-pdf.lua
index 908801d8a95..54e22f1a2bd 100644
--- a/Master/texmf-dist/tex/context/base/back-pdf.lua
+++ b/Master/texmf-dist/tex/context/base/back-pdf.lua
@@ -1,6 +1,6 @@
if not modules then modules = { } end modules ['back-pdf'] = {
version = 1.001,
- comment = "companion to back-pdf.tex",
+ comment = "companion to back-pdf.mkiv",
author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
copyright = "PRAGMA ADE / ConTeXt Development Team",
license = "see context related readme files"
@@ -21,8 +21,7 @@ local concat = table.concat
local round = math.round
local utfcharacters, utfvalues = string.utfcharacters, string.utfvalues
local texsprint, texwrite = tex.sprint, tex.write
-
-ctxcatcodes = tex.ctxcatcodes
+local ctxcatcodes = tex.ctxcatcodes
local copy_node = node.copy
@@ -32,14 +31,18 @@ local registrations = backends.pdf.registrations
local pdfliteral, register = nodes.pdfliteral, nodes.register
-local pdfconstant = lpdf.constant
-local pdfdictionary = lpdf.dictionary
-local pdfarray = lpdf.array
-local pdfreference = lpdf.reference
-local pdfverbose = lpdf.verbose
+local pdfconstant = lpdf.constant
+local pdfstring = lpdf.string
+local pdfdictionary = lpdf.dictionary
+local pdfarray = lpdf.array
+local pdfreference = lpdf.reference
+local pdfverbose = lpdf.verbose
+local pdfflushobject = lpdf.flushobject
+local pdfreserveobject = lpdf.reserveobject
+local pdfannotation = nodes.pdfannotation
-local pdfreserveobj = pdf.reserveobj
-local pdfimmediateobj = pdf.immediateobj
+local pdfreserveobj = pdf.reserveobj
+local pdfimmediateobj = pdf.immediateobj
function nodeinjections.rgbcolor(r,g,b)
return register(pdfliteral(format("%s %s %s rg %s %s %s RG",r,g,b,r,g,b)))
@@ -55,7 +58,7 @@ end
function nodeinjections.spotcolor(n,f,d,p)
if type(p) == "string" then
- p = p:gsub(","," ") -- brr misuse of spot
+ p = gsub(p,","," ") -- brr misuse of spot
end
return register(pdfliteral(format("/%s cs /%s CS %s SCN %s scn",n,n,p,p)))
end
@@ -72,9 +75,9 @@ local effects = {
hidden = 3,
}
-function nodeinjections.effect(stretch,rulethickness,effect)
+function nodeinjections.effect(effect,stretch,rulethickness)
-- always, no zero test (removed)
- rulethickness = number.dimenfactors["bp"]*rulethickness
+ rulethickness = number.dimenfactors["bp"] * rulethickness
effect = effects[effect] or effects['normal']
return register(pdfliteral(format("%s Tc %s w %s Tr",stretch,rulethickness,effect))) -- watch order
end
@@ -131,7 +134,7 @@ function codeinjections.insertmovie(specification)
Movie = moviedict,
A = controldict,
}
- node.write(nodes.pdfannot(width,height,0,action()))
+ node.write(pdfannotation(width,height,0,action()))
end
function codeinjections.insertsound(specification)
@@ -151,7 +154,7 @@ function codeinjections.insertsound(specification)
Movie = sounddict,
A = controldict,
}
- node.write(nodes.pdfannot(0,0,0,action()))
+ node.write(pdfannotation(0,0,0,action()))
end
end
@@ -162,7 +165,7 @@ local pdf_indexed = pdfconstant("Indexed")
local pdf_device_n = pdfconstant("DeviceN")
local pdf_device_rgb = pdfconstant("DeviceRGB")
local pdf_device_cmyk = pdfconstant("DeviceCMYK")
-local pdf_device_gray = pdfconstant("Devicegray")
+local pdf_device_gray = pdfconstant("DeviceGray")
local pdf_extgstate = pdfconstant("ExtGState")
local pdf_rbg_range = pdfarray { 0, 1, 0, 1, 0, 1 }
@@ -303,6 +306,7 @@ local function indexcolorref(name) -- actually, names (parent) is the hash
end
function registrations.rgbspotcolor(name,noffractions,names,p,r,g,b)
+--~ print(name,noffractions,names,p,r,g,b)
if noffractions == 1 then
registersomespotcolor(name,noffractions,names,p,pdf_device_rgb,pdf_rbg_range,format(rgb_function,r,g,b))
else
diff --git a/Master/texmf-dist/tex/context/base/back-pdf.mkiv b/Master/texmf-dist/tex/context/base/back-pdf.mkiv
index 2d3ba85248b..a10afd5b901 100644
--- a/Master/texmf-dist/tex/context/base/back-pdf.mkiv
+++ b/Master/texmf-dist/tex/context/base/back-pdf.mkiv
@@ -29,7 +29,7 @@
\pdfpkresolution = 600
\pdfdecimaldigits = 10
\pdfinclusionerrorlevel = 0
-\pdfminorversion = 5
+\pdfminorversion = 6 % maybe even 7
%pdfuniqueresname = 1
%D This one can be consulted by users although the suffix is also
@@ -44,13 +44,13 @@
%D These are the only official methods to add stuff to the resources.
-\def\pdfbackendsetcatalog #1#2{\ctxlua{lpdf.addtocatalog ("#1",\!!bs#2\!!es)}} \newtoks\pdfcatalog
-\def\pdfbackendsetinfo #1#2{\ctxlua{lpdf.addtoinfo ("#1",\!!bs#2\!!es)}} \newtoks\pdfinfo
-\def\pdfbackendsetname #1#2{\ctxlua{lpdf.addtonames ("#1",\!!bs#2\!!es)}} \newtoks\pdfnames
+\def\pdfbackendsetcatalog #1#2{\ctxlua{lpdf.addtocatalog ("#1",\!!bs#2\!!es)}}
+\def\pdfbackendsetinfo #1#2{\ctxlua{lpdf.addtoinfo ("#1",\!!bs#2\!!es)}}
+\def\pdfbackendsetname #1#2{\ctxlua{lpdf.addtonames ("#1",\!!bs#2\!!es)}}
-\def\pdfbackendsetpageattribute #1#2{\ctxlua{lpdf.addtopageattributes ("#1",\!!bs#2\!!es)}} \newtoks\pdfpageresources
-\def\pdfbackendsetpagesattribute#1#2{\ctxlua{lpdf.addtopagesattributes("#1",\!!bs#2\!!es)}} \newtoks\pdfpageattr
-\def\pdfbackendsetpageresource #1#2{\ctxlua{lpdf.addtopageresources ("#1",\!!bs#2\!!es)}} \newtoks\pdfpagesattr
+\def\pdfbackendsetpageattribute #1#2{\ctxlua{lpdf.addtopageattributes ("#1",\!!bs#2\!!es)}}
+\def\pdfbackendsetpagesattribute#1#2{\ctxlua{lpdf.addtopagesattributes("#1",\!!bs#2\!!es)}}
+\def\pdfbackendsetpageresource #1#2{\ctxlua{lpdf.addtopageresources ("#1",\!!bs#2\!!es)}}
\def\pdfbackendsetextgstate #1#2{\ctxlua{lpdf.adddocumentextgstate ("#1",lpdf.verbose(\!!bs#2\!!es))}}
\def\pdfbackendsetcolorspace #1#2{\ctxlua{lpdf.adddocumentcolorspace("#1",lpdf.verbose(\!!bs#2\!!es))}}
@@ -59,27 +59,33 @@
\def\pdfbackendcurrentresources {\ctxlua{lpdf.collectedresources()}}
+%D Let's block these:
+
+\let\pdfcatalog \relax \newtoks\pdfcatalog
+\let\pdfinfo \relax \newtoks\pdfinfo
+\let\pdfnames \relax \newtoks\pdfnames
+\let\pdfpageresources\relax \newtoks\pdfpageresources
+\let\pdfpageattr \relax \newtoks\pdfpageattr
+\let\pdfpagesattr \relax \newtoks\pdfpagesattr
+
%D An example of usage is:
-\appendtoks % will change ...
- \pdfbackendsetinfo{ConTeXt.Version}{(\contextversion)}%
- \pdfbackendsetinfo{ConTeXt.Time} {(\number\normalyear.\twodigits\normalmonth.\twodigits\normalday\space \twodigits\currenthour:\twodigits\currentminute)}%
- \pdfbackendsetinfo{ConTeXt.Jobname}{(\jobname)}%
- \pdfbackendsetinfo{ConTeXt.Url} {(www.pragma-ade.com)}%
+\appendtoks
+ \pdfbackendsetinfo{ConTeXt.Version}{\contextversion}%
+ \pdfbackendsetinfo{ConTeXt.Time} {\number\normalyear.\twodigits\normalmonth.\twodigits\normalday\space \twodigits\currenthour:\twodigits\currentminute}%
+ \pdfbackendsetinfo{ConTeXt.Jobname}{\jobname}%
+ \pdfbackendsetinfo{ConTeXt.Url} {www.pragma-ade.com}%
\to \everylastbackendshipout
%D Unfortunately this is still needed (also for \METAPOST\ to
%D \PDF\ converter):
-\def\doresetmapfilelist
- {\global\let\doresetmapfilelist\relax
- \pdfmapfile{original-empty.map}}
-
-\def\doloadmapfile #1#2{\pdfmapfile{#1#2}}
-\def\doloadmapline #1#2{\pdfmapline{#1#2}}
-
-\appendtoksonce \loadallfontmapfiles \to \pdfbackendeveryxform
-\appendtoksonce \loadallfontmapfiles \to \pdfbackendeveryximage
+% \def\doresetmapfilelist
+% {\global\let\doresetmapfilelist\relax
+% \pdfmapfile{original-empty.map}}
+%
+% \appendtoksonce \loadallfontmapfiles \to \pdfbackendeveryxform
+% \appendtoksonce \loadallfontmapfiles \to \pdfbackendeveryximage
%D Transformations. Some day we will use primitives (once they're fixed).
@@ -101,7 +107,7 @@
\def\dostartmirroring{\pdfliteral{-1 0 0 1 0 0 cm}}
\def\dostopmirroring {\pdfliteral{-1 0 0 1 0 0 cm}}
-\def\dostartclipping#1#2#3% todo
+\def\dostartclipping#1#2#3% todo (still needed?)
{\PointsToBigPoints{#2}\width
\PointsToBigPoints{#3}\height
\grabMPclippath{#1}{1}\width\height{0 0 m \width\space 0 l \width \height l 0 \height l}%
@@ -115,7 +121,7 @@
\appendtoks \ctxlua{backends.codeinjections.finalizepage ()}\to \everybackendshipout % is immediate
\appendtoks \ctxlua{backends.codeinjections.finalizedocument()}\to \everylastbackendshipout % is immediate
-%D Temporary hack, will be removed or improved.
+%D Temporary hack, will be removed or improved or default.
\def\TransparencyHack{\ctxlua{backends.codeinjections.addtransparencygroup()}}
@@ -159,8 +165,11 @@
{\dogetobjectreferencepage{#1}{#2}#3%
\doPDFgetpagereference{\ifx#3\empty\realfolio\else#3\fi}#3}
+\let\lastpredefinedsymbol\empty % some day we can do more at the lua end
+
\def\predefinesymbol[#1]%
{\begingroup
+ \xdef\lastpredefinedsymbol{#1}%
\settightobject{SYM}{#1}\hbox{\symbol[#1]}% to be checked ... maybe only fitting
\dogetobjectreference{SYM}{#1}\lastref
\ctxlua{backends.codeinjections.registersymbol("#1",\lastref)}%
diff --git a/Master/texmf-dist/tex/context/base/back-u3d.mkiv b/Master/texmf-dist/tex/context/base/back-u3d.mkiv
new file mode 100644
index 00000000000..398159feb2c
--- /dev/null
+++ b/Master/texmf-dist/tex/context/base/back-u3d.mkiv
@@ -0,0 +1,156 @@
+%D \module
+%D [ file=back-u3d,
+%D version=2009.04.15,
+%D title=\CONTEXT\ Backend Macros,
+%D subtitle=U3D Experiment,
+%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.
+
+% This is only a placeholder that demonstrates the usage of u3d
+% resources. The user interface is rather messy an might be
+% improved. The files and setup is derived from an example by
+% Michael Vidiassov.
+
+\endinput
+
+\starttext
+
+\startluaparameterset [u3d:myset:controls:1]
+ view = {
+ name = 'default',
+ bg = {1,1,1},
+ mag = 100,
+ coo = {0,0,0},
+ c2c = {0,0,1},
+ rot = {40,0,60},
+ roo = 6,
+ lights = 'CAD'
+ },
+ js = 'cloudq.js'
+\stopluaparameterset
+
+\startluaparameterset [u3d:myset:controls:2]
+ views = {
+ {
+ name = 'AnglePositioning',
+ bg = {1,1,1},
+ azimuth = 45,
+ altitude = 45,
+ roo = 50,
+ aac = 2.5,
+ lights = 'Artwork'
+ },
+ {
+ name = 'RotationPositioning',
+ bg = {1,1,1},
+ rot = {0,45,45},
+ roo = 50,
+ aac = 2.5,
+ lights = 'Artwork'
+ },
+ {
+ name = 'VectorPositioning',
+ bg = {1,0,0},
+ c2c = {1,1,math.sqrt(2)},
+ roo = 50,
+ aac = 2.5,
+ lights = 'CAD'
+ },
+ {
+ name = 'PositionPositioning',
+ bg = {1,0,0},
+ pos = {1+25,1+25,1+50/math.sqrt(2)},
+ aac = 2.5,
+ lights = 'CAD'
+ },
+ {
+ name = 'ortho',
+ bg = {1,1,1},
+ mag = 300,
+ lights = 'CAD',
+ crossection = {}
+ }
+ },
+ view = {
+ name = 'default',
+ bg = {1,1,1},
+ c2c = {-1,-1,0},
+ roo = 50,
+ aac = 2.5,
+ roll = 45,
+ lights = 'CAD',
+ crossection = {
+ normal = {-1,-1,-1},
+ transparent = true
+ },
+ nodes = {
+ {
+ name = 'xlabel',
+ visible = false
+ },
+ {
+ name = 'ylabel',
+ opacity = 0.5
+ },
+ {
+ name = 'zlabel',
+ rendermode = 'Wireframe'
+ }
+ }
+ }
+\stopluaparameterset
+
+\useexternalfigure
+ [cloudq]
+ [cloudq.u3d]
+ [width=0.7\textwidth,
+ height=.7\textwidth,
+ display=u3d:myset:display:1,
+ controls=u3d:myset:controls:1]
+
+\useexternalfigure
+ [axes]
+ [axes.u3d]
+ [width=0.7\textwidth,
+ height=.7\textwidth,
+ controls=u3d:myset:controls:1]
+
+\startluaparameterset[u3d:myset:display:2]
+ toolbar = true,
+ preview = 'cloudq.png'
+\stopluaparameterset
+\startluaparameterset[u3d:myset:display:3]
+ toolbar = true,
+ tree = false,
+ preview = 'area.png'
+\stopluaparameterset
+\startluaparameterset[u3d:myset:display:4]
+ toolbar = true,
+ tree = false,
+ view = {
+ name = 'view',
+ bg = {0.1,0.1,0.1},
+ c2c = {-1,-1,0},
+ roo = 50,
+ aac = 2.5,
+ roll = 45,
+ lights = 'Red'
+ }
+\stopluaparameterset
+\startluaparameterset[u3d:myset:display:5]
+ toolbar = true,
+ tree = false,
+ view = 'ortho'
+\stopluaparameterset
+
+\placefigure[here]{none}{\externalfigure[cloudq][display=u3d:myset:display:2]}
+\placefigure[here]{none}{\externalfigure[axes] [display=u3d:myset:display:3]}
+\placefigure[here]{none}{\externalfigure[axes] [display=u3d:myset:display:4]}
+\placefigure[here]{none}{\externalfigure[axes] [display=u3d:myset:display:5,width=0.5\textwidth,height=.5\textwidth]}
+
+\stoptext
diff --git a/Master/texmf-dist/tex/context/base/bibl-bib.lua b/Master/texmf-dist/tex/context/base/bibl-bib.lua
index 028202ec22f..3c0dad2fa4e 100644
--- a/Master/texmf-dist/tex/context/base/bibl-bib.lua
+++ b/Master/texmf-dist/tex/context/base/bibl-bib.lua
@@ -12,8 +12,18 @@ bibtex files and converts them to xml so that the we access the content
in a convenient way. Actually handling the data takes place elsewhere.</p>
--ldx]]--
-local lower, format = string.lower, string.format
+local utf = unicode.utf8
+local lower, format, gsub, concat = string.lower, string.format, string.gsub, table.concat
local next = next
+local utfchar = utf.char
+local lpegmatch = lpeg.match
+local textoutf = characters and characters.tex.toutf
+local variables = interfaces and interfaces.variables
+
+local finalizers = xml.finalizers.tex
+local xmlfilter, xmltext = xml.filter, xml.text
+
+local trace_bibxml = false trackers.register("publications.bibxml", function(v) trace_bibtex = v end)
bibtex = bibtex or { }
@@ -21,10 +31,29 @@ bibtex.size = 0
bibtex.definitions = 0
bibtex.shortcuts = 0
+local defaultshortcuts = {
+ jan = "1",
+ feb = "2",
+ mar = "3",
+ apr = "4",
+ may = "5",
+ jun = "6",
+ jul = "7",
+ aug = "8",
+ sep = "9",
+ oct = "10",
+ nov = "11",
+ dec = "12",
+}
+
local shortcuts = { }
-local data = { }
+local data = { }
local entries
+-- Currently we expand shortcuts and for large ones (like the acknowledgements
+-- in tugboat.bib this is not that efficient. However, eventually strings get
+-- hashed again.
+
local function do_shortcut(tag,key,value)
bibtex.shortcuts = bibtex.shortcuts + 1
if lower(tag) == "@string" then
@@ -49,34 +78,33 @@ local function do_definition(tag,key,tab) -- maybe check entries here (saves mem
end
local function resolve(s)
- return shortcuts[s] or ""
-end
-
-local percent = lpeg.P("%")
-local start = lpeg.P("@")
-local comma = lpeg.P(",")
-local hash = lpeg.P("#")
-local escape = lpeg.P("\\")
-local single = lpeg.P("'")
-local double = lpeg.P('"')
-local left = lpeg.P('{')
-local right = lpeg.P('}')
+ return shortcuts[s] or defaultshortcuts[s] or s -- can be number
+end
+
+local P, R, S, C, Cc, Cs, Ct = lpeg.P, lpeg.R, lpeg.S, lpeg.C, lpeg.Cc, lpeg.Cs, lpeg.Ct
+
+local percent = P("%")
+local start = P("@")
+local comma = P(",")
+local hash = P("#")
+local escape = P("\\")
+local single = P("'")
+local double = P('"')
+local left = P('{')
+local right = P('}')
local both = left + right
-local lineending = lpeg.S("\n\r")
-local space = lpeg.S(" \t\n\r\f")
+local lineending = S("\n\r")
+local space = S(" \t\n\r\f")
local spacing = space^0
-local equal = lpeg.P("=")
+local equal = P("=")
local collapsed = (space^1)/ " "
local function add(a,b) if b then return a..b else return a end end
-local keyword = lpeg.C((lpeg.R("az","AZ","09") + lpeg.S("@_:-"))^1) -- lpeg.C((1-space)^1)
+local keyword = C((lpeg.R("az","AZ","09") + S("@_:-"))^1) -- lpeg.C((1-space)^1)
local s_quoted = ((escape*single) + collapsed + (1-single))^0
local d_quoted = ((escape*double) + collapsed + (1-double))^0
-local balanced = lpeg.P {
- [1] = ((escape * (left+right)) + (1 - (left+right)) + lpeg.V(2))^0,
- [2] = left * lpeg.V(1) * right
-}
+local balanced = lpeg.patterns.balanced
local s_value = (single/"") * s_quoted * (single/"")
local d_value = (double/"") * d_quoted * (double/"")
@@ -84,7 +112,7 @@ local b_value = (left /"") * balanced * (right /"")
local r_value = keyword/resolve
local somevalue = s_value + d_value + b_value + r_value
-local value = lpeg.Cs((somevalue * ((spacing * hash * spacing)/"" * somevalue)^0))
+local value = Cs((somevalue * ((spacing * hash * spacing)/"" * somevalue)^0))
local assignment = spacing * keyword * spacing * equal * spacing * value * spacing
local shortcut = keyword * spacing * left * spacing * (assignment * comma^0)^0 * spacing * right
@@ -101,14 +129,21 @@ function bibtex.convert(session,content)
data, shortcuts, entries = session.data, session.shortcuts, session.entries
-- session.size = session.size + #content
bibtex.size = bibtex.size + #content
- grammar:match(content or "")
+ session.size = session.size + #content
+ lpegmatch(grammar,content or "")
statistics.stoptiming(bibtex)
end
function bibtex.load(session,filename)
local filename = resolvers.find_file(filename,"bib")
if filename ~= "" then
- bibtex.convert(session,io.loaddata(filename) or "")
+ local data = io.loaddata(filename) or ""
+ if data == "" then
+ logs.report("publications","empty file '%s', no conversion to xml",filename)
+ elseif trace_bibxml then
+ logs.report("publications","converting file '%s' to xml",filename)
+ end
+ bibtex.convert(session,data)
end
end
@@ -119,37 +154,88 @@ function bibtex.new()
xml = xml.convert("<?xml version='1.0' standalone='yes'?>\n<bibtex></bibtex>"),
size = 0,
entries = nil,
+ loaded = false,
}
end
local escaped_pattern = xml.escaped_pattern
-function bibtex.toxml(session)
+local ihatethis = {
+ f = "\\f",
+ n = "\\n",
+ r = "\\r",
+ s = "\\s",
+ t = "\\t",
+ v = "\\v",
+ z = "\\z",
+}
+
+local command = P("\\")/"" * Cc("\\bibtexcommand{") * (R("az","AZ")^1) * Cc("}")
+local any = P(1)
+local done = P(-1)
+local one_l = P("{") / ""
+local one_r = P("}") / ""
+local two_l = P("{{") / ""
+local two_r = P("}}") / ""
+
+local filter = Cs(
+ two_l * (command + any - two_r - done)^0 * two_r * done +
+ one_l * (command + any - one_r - done)^0 * one_r * done +
+ (command + any )^0
+)
+
+function bibtex.toxml(session,options)
+ if session.loaded then
+ return
+ else
+ session.loaded = true
+ end
-- we can always speed this up if needed
-- format slows down things a bit but who cares
statistics.starttiming(bibtex)
local result = { }
+ local options = aux.settings_to_hash(options)
+ local convert = options.convert -- todo: interface
+ local strip = options.strip -- todo: interface
local entries = session.entries
result[#result+1] = format("<?xml version='1.0' standalone='yes'?>")
result[#result+1] = format("<bibtex>")
for id, categories in next, session.data do
- result[#result+1] = format(" <c n='%s'>",id)
+ id = lower(gsub(id,"^@",""))
for name, entry in next, categories do
if not entries or entries[name] then
- result[#result+1] = format(" <e n='%s'>",name)
+ result[#result+1] = format("<entry tag='%s' category='%s'>",lower(name),id)
for key, value in next, entry do
- value = escaped_pattern:match(value)
+ value = gsub(value,"\\(.)",ihatethis)
+ value = lpegmatch(escaped_pattern,value)
+
if value ~= "" then
- result[#result+1] = format(" <v n='%s'>%s</v>",key,value)
+ if convert then
+ value = textoutf(value,true)
+ end
+ if strip then
+ -- as there is no proper namespace in bibtex we need this
+ -- kind of hackery ... bibtex databases are quite unportable
+ value = lpegmatch(filter,value) or value
+ end
+ result[#result+1] = format(" <field name='%s'>%s</field>",key,value)
end
end
- result[#result+1] = format(" </e>")
+ result[#result+1] = format("</entry>")
end
end
- result[#result+1] = format(" </c>")
end
result[#result+1] = format("</bibtex>")
- session.xml = xml.convert(table.concat(result,"\n"))
+ result = concat(result,"\n")
+ -- alternatively we could use lxml.convert
+ session.xml = xml.convert(result, {
+ resolve_entities = true,
+ resolve_predefined_entities = true, -- in case we have escaped entities
+ -- unify_predefined_entities = true, -- &#038; -> &amp;
+ utfize_entities = true,
+ } )
+ session.data = nil
+ session.shortcuts = nil
statistics.stoptiming(bibtex)
end
@@ -204,30 +290,473 @@ end)
--~ print(table.serialize(session.shortcuts))
--~ print(xml.serialize(session.xml))
--- this will move:
+if not characters then dofile(resolvers.find_file("char-def.lua")) end
+
+local chardata = characters.data
+local concat = table.concat
+
+local P, Ct, lpegmatch = lpeg.P, lpeg.Ct, lpeg.match
+
+local space, comma = P(" "), P(",")
+
+local andsplitter = Ct(lpeg.splitat(space^1 * "and" * space^1))
+local commasplitter = Ct(lpeg.splitat(space^0 * comma * space^0))
+local spacesplitter = Ct(lpeg.splitat(space^1))
+local firstcharacter = lpeg.patterns.utf8byte
+
+function is_upper(str)
+ local first = lpegmatch(firstcharacter,str)
+ local okay = chardata[first]
+ return okay and okay.category == "lu"
+end
+
+local function splitauthors(str)
+ local authors = lpegmatch(andsplitter,str)
+ for i=1,#authors do
+ local firstnames, vons, surnames, initials, juniors, words
+ local author = authors[i]
+ local split = lpegmatch(commasplitter,author)
+ local n = #split
+ if n == 1 then
+ --~ First von Last
+ words = lpegmatch(spacesplitter,author)
+ firstnames, vons, surnames = { }, { }, { }
+ local i, n = 1, #words
+ while i <= n do
+ local w = words[i]
+ if is_upper(w) then
+ firstnames[#firstnames+1], i = w, i + 1
+ else
+ break
+ end
+ end
+ while i <= n do
+ local w = words[i]
+ if is_upper(w) then
+ break
+ else
+ vons[#vons+1], i = w, i + 1
+ end
+ end
+ while i <= n do
+ surnames[#surnames+1], i = words[i], i + 1
+ end
+ elseif n == 2 then
+ --~ von Last, First
+ words = lpegmatch(spacesplitter,split[2])
+ surnames = lpegmatch(spacesplitter,split[1])
+ firstnames, vons = { }, { }
+ local i, n = 1, #words
+ while i <= n do
+ local w = words[i]
+ if is_upper(w) then
+ firstnames[#firstnames+1], i = w, i + 1
+ else
+ break
+ end
+ end
+ while i <= n do
+ vons[#vons+1], i = words[i], i + 1
+ end
+ else
+ --~ von Last, Jr ,First
+ firstnames = lpegmatch(spacesplitter,split[1])
+ juniors = lpegmatch(spacesplitter,split[2])
+ surnames = lpegmatch(spacesplitter,split[3])
+ if n > 3 then
+ -- error
+ end
+ end
+ if #surnames == 0 then
+ surnames[1] = firstnames[#firstnames]
+ firstnames[#firstnames] = nil
+ end
+ if firstnames then
+ initials = { }
+ for i=1,#firstnames do
+ initials[i] = utfchar(lpegmatch(firstcharacter,firstnames[i]))
+ end
+ end
+ authors[i] = {
+ original = author,
+ firstnames = firstnames,
+ vons = vons,
+ surnames = surnames,
+ initials = initials,
+ juniors = juniors,
+ }
+ end
+ authors.original = str
+ return authors
+end
+
+local function the_initials(initials,symbol)
+ local t, symbol = { }, symbol or "."
+ for i=1,#initials do
+ t[i] = initials[i] .. symbol
+ end
+ return t
+end
+
+-- authors
+
+bibtex.authors = bibtex.authors or { }
+
+local authors = bibtex.authors
+
+local defaultsettings = {
+ firstnamesep = " ",
+ vonsep = " ",
+ surnamesep = " ",
+ juniorsep = " ",
+ surnamejuniorsep = ", ",
+ juniorjuniorsep = ", ",
+ surnamefirstnamesep = ", ",
+ surnameinitialsep = ", ",
+ namesep = ", ",
+ lastnamesep = " and ",
+ finalnamesep = " and ",
+}
+
+function authors.normal(author,settings)
+ local firstnames, vons, surnames, juniors = author.firstnames, author.vons, author.surnames, author.juniors
+ local result, settings = { }, settings or defaultsettings
+ if firstnames and #firstnames > 0 then
+ result[#result+1] = concat(firstnames," ")
+ result[#result+1] = settings.firstnamesep or defaultsettings.firstnamesep
+ end
+ if vons and #vons > 0 then
+ result[#result+1] = concat(vons," ")
+ result[#result+1] = settings.vonsep or defaultsettings.vonsep
+ end
+ if surnames then
+ result[#result+1] = concat(surnames," ")
+ end
+ if juniors and #juniors > 0 then
+ result[#result+1] = concat(juniors," ")
+ result[#result+1] = settings.surnamesep or defaultsettings.surnamesep
+ end
+ return concat(result)
+end
+
+function authors.normalshort(author,settings)
+ local firstnames, vons, surnames, juniors = author.firstnames, author.vons, author.surnames, author.juniors
+ local result, settings = { }, settings or defaultsettings
+ if firstnames and #firstnames > 0 then
+ result[#result+1] = concat(firstnames," ")
+ result[#result+1] = settings.firstnamesep or defaultsettings.firstnamesep
+ end
+ if vons and #vons > 0 then
+ result[#result+1] = concat(vons," ")
+ result[#result+1] = settings.vonsep or defaultsettings.vonsep
+ end
+ if surnames then
+ result[#result+1] = concat(surnames," ")
+ end
+ if juniors and #juniors > 0 then
+ result[#result+1] = concat(juniors," ")
+ result[#result+1] = settings.surnamejuniorsep or defaultsettings.surnamejuniorsep
+ end
+ return concat(result)
+end
+
+function authors.inverted(author,settings)
+ local firstnames, vons, surnames, juniors = author.firstnames, author.vons, author.surnames, author.juniors
+ local result, settings = { }, settings or defaultsettings
+ if vons and #vons > 0 then
+ result[#result+1] = concat(vons," ")
+ result[#result+1] = settings.vonsep or defaultsettings.vonsep
+ end
+ if surnames then
+ result[#result+1] = concat(surnames," ")
+ end
+ if juniors and #juniors > 0 then
+ result[#result+1] = settings.juniorjuniorsep or defaultsettings.juniorjuniorsep
+ result[#result+1] = concat(juniors," ")
+ end
+ if firstnames and #firstnames > 0 then
+ result[#result+1] = settings.surnamefirstnamesep or defaultsettings.surnamefirstnamesep
+ result[#result+1] = concat(firstnames," ")
+ end
+ return concat(result)
+end
+
+function authors.invertedshort(author,settings)
+ local vons, surnames, initials, juniors = author.vons, author.surnames, author.initials, author.juniors
+ local result, settings = { }, settings or defaultsettings
+ if vons and #vons > 0 then
+ result[#result+1] = concat(vons," ")
+ result[#result+1] = settings.vonsep or defaultsettings.vonsep
+ end
+ if surnames then
+ result[#result+1] = concat(surnames," ")
+ end
+ if juniors and #juniors > 0 then
+ result[#result+1] = settings.juniorjuniorsep or defaultsettings.juniorjuniorsep
+ result[#result+1] = concat(juniors," ")
+ end
+ if initials and #initials > 0 then
+ result[#result+1] = settings.surnameinitialsep or defaultsettings.surnameinitialsep
+ result[#result+1] = concat(the_initials(initials)," ")
+ end
+ return concat(result)
+end
+
+local lastconcatsize = 1
+
+local function bibtexconcat(t,settings)
+ local namesep = settings.namesep or defaultsettings.namesep or ", "
+ local lastnamesep = settings.lastnamesep or defaultsettings.lastnamesep or namesep
+ local finalnamesep = settings.finalnamesep or defaultsettings.finalnamesep or lastnamesep
+ local lastconcatsize = #t
+ if lastconcatsize > 2 then
+ local s = { }
+ for i=1,lastconcatsize-2 do
+ s[i] = t[i] .. namesep
+ end
+ s[lastconcatsize-1], s[lastconcatsize] = t[lastconcatsize-1] .. finalnamesep, t[lastconcatsize]
+ return concat(s)
+ elseif lastconcatsize > 1 then
+ return concat(t,lastnamesep)
+ elseif lastconcatsize > 0 then
+ return t[1]
+ else
+ return ""
+ end
+end
+
+function authors.concat(author,combiner,what,settings)
+ if type(combiner) == "string" then
+ combiner = authors[combiner or "normal"] or authors.normal
+ end
+ local split = splitauthors(author)
+ local setting = settings[what]
+ local etallimit, etaldisplay, etaltext = 1000, 1000, ""
+ if setting then
+ etallimit = settings.etallimit or 1000
+ etaldisplay = settings.etaldisplay or etallimit
+ etalltext = settings.etaltext or ""
+ end
+ local max = #split
+ if max > etallimit and etaldisplay < max then
+ max = etaldisplay
+ end
+ for i=1,max do
+ split[i] = combiner(split[i],settings)
+ end
+ local result = bibtexconcat(split,settings)
+ if max < #split then
+ return result
+ else
+ return result .. etaltext
+ end
+end
+
+function authors.short(author,year)
+ local result = { }
+ if author then
+ local authors = splitauthors(author)
+ for a=1,#authors do
+ local aa = authors[a]
+ local initials = aa.initials
+ for i=1,#initials do
+ result[#result+1] = initials[i]
+ end
+ local surnames = aa.surnames
+ for s=1,#surnames do
+ result[#result+1] = utfchar(lpegmatch(firstcharacter,surnames[s]))
+ end
+ end
+ end
+ if year then
+ result[#result+1] = year
+ end
+ return concat(result)
+end
+
+-- We can consider creating a hashtable key -> entry but I wonder if
+-- pays off.
+
+local function collectauthoryears(id,list)
+ list = aux.settings_to_hash(list)
+ id = lxml.get_id(id)
+ local found = { }
+ for e in xml.collected(id,"/bibtex/entry") do
+ if list[e.at.tag] then
+ local year = xmlfilter(e,"xml:///field[@name='year']/text()")
+ local author = xmlfilter(e,"xml:///field[@name='author']/text()")
+ if author and year then
+ local a = found[author]
+ if not a then
+ a = { }
+ found[author] = a
+ end
+ local y = a[year]
+ if not y then
+ y = { }
+ a[year] = y
+ end
+ y[#y+1] = e
+ end
+ end
+ end
+ -- found = { author = { year_1 = { e1, e2, e3 } } }
+ local done = { }
+ for author, years in next, found do
+ local yrs = { }
+ for year, entries in next, years do
+ if subyears then
+ -- -- add letters to all entries of an author and if so shouldn't
+ -- -- we tag all years of an author as soon as we do this?
+ -- if #entries > 1 then
+ -- for i=1,#years do
+ -- local entry = years[i]
+ -- -- years[i] = year .. string.char(i + string.byte("0") - 1)
+ -- end
+ -- end
+ else
+ yrs[#yrs+1] = year
+ end
+ end
+ done[author] = yrs
+ end
+ return done
+end
+
+local method, settings = "normal", { }
+
+function authors.setsettings(s)
+ settings = s or settings
+end
if commands then
+ local texsprint = tex and tex.sprint
+ local ctxcatcodes = tex and tex.ctxcatcodes
+
local sessions = { }
function commands.definebibtexsession(name)
sessions[name] = bibtex.new()
end
- function commands.preparebibtexsession(name)
- bibtex.toxml(sessions[name])
- lxml.register("bibtex:"..name,sessions[name].xml)
+
+ function commands.preparebibtexsession(name,xmlname,options)
+ bibtex.toxml(sessions[name],options)
+ lxml.register(xmlname,sessions[name].xml)
end
+
function commands.registerbibtexfile(name,filename)
bibtex.load(sessions[name],filename)
end
+
function commands.registerbibtexentry(name,entry)
local session = sessions[name]
local entries = session.entries
if not entries then
- session.entries = { [entry] = true }
+ session.entries = { [entry] = true } -- here we can keep more info
else
entries[entry] = true
end
end
+ -- commands.bibtexconcat = bibtexconcat
+
+ -- finalizers can be rather dumb as we have just text and no embedded xml
+
+ function finalizers.bibtexconcat(collected,method,what)
+ if collected then
+ local author = collected[1].dt[1] or ""
+ if author ~= "" then
+ texsprint(ctxcatcodes,authors.concat(author,method,what,settings))
+ end
+ end
+ end
+
+ function finalizers.bibtexshort(collected)
+ if collected then
+ local c = collected[1]
+ local year = xmlfilter(c,"xml://field[@name='year']/text()")
+ local author = xmlfilter(c,"xml://field[@name='author']/text()")
+ texsprint(ctxcatcodes,authors.short(author,year))
+ end
+ end
+
+ -- experiment:
+
+ --~ -- alternative approach: keep data at the tex end
+
+ --~ local function xbibtexconcat(t,sep,finalsep,lastsep)
+ --~ local n = #t
+ --~ if n > 0 then
+ --~ context(t[1])
+ --~ if n > 1 then
+ --~ if n > 2 then
+ --~ for i=2,n-1 do
+ --~ context.bibtexpublicationsparameter("sep")
+ --~ context(t[i])
+ --~ end
+ --~ context.bibtexpublicationsparameter("finalsep")
+ --~ else
+ --~ context.bibtexpublicationsparameter("lastsep")
+ --~ end
+ --~ context(t[n])
+ --~ end
+ --~ end
+ --~ end
+
+ -- todo : sort
+
+ -- todo: choose between bibtex or commands namespace
+
+ function bibtex.authorref(id,list)
+ local result = collectauthoryears(id,list,method,what)
+ for author, years in next, result do
+ texsprint(ctxcatcodes,authors.concat(author,method,what,settings))
+ end
+ end
+
+ function bibtex.authoryearref(id,list)
+ local result = collectauthoryears(id,list,method,what)
+ for author, years in next, result do
+ texsprint(ctxcatcodes,authors.concat(author,method,what,settings)," (",concat(years,", "),")")
+ end
+ end
+
+ function bibtex.authoryearsref(id,list)
+ local result = collectauthoryears(id,list,method,what)
+ for author, years in next, result do
+ texsprint(ctxcatcodes,"(",authors.concat(author,method,what,settings),", ",concat(years,", "),")")
+ end
+ end
+
+ function bibtex.singular_or_plural(singular,plural)
+ if lastconcatsize and lastconcatsize > 1 then
+ texsprint(ctxcatcodes,plural)
+ else
+ texsprint(ctxcatcodes,singular)
+ end
+ end
end
+
+
+--~ local function test(sample)
+--~ local authors = splitauthors(sample)
+--~ print(table.serialize(authors))
+--~ for i=1,#authors do
+--~ local author = authors[i]
+--~ print(normalauthor (author,settings))
+--~ print(normalshortauthor (author,settings))
+--~ print(invertedauthor (author,settings))
+--~ print(invertedshortauthor(author,settings))
+--~ end
+--~ print(concatauthors(sample,settings,normalauthor))
+--~ print(concatauthors(sample,settings,normalshortauthor))
+--~ print(concatauthors(sample,settings,invertedauthor))
+--~ print(concatauthors(sample,settings,invertedshortauthor))
+--~ end
+
+--~ local sample_a = "Hagen, Hans and Hoekwater, Taco Whoever T. Ex. and Henkel Hut, Hartmut Harald von der"
+--~ local sample_b = "Hans Hagen and Taco Whoever T. Ex. Hoekwater and Hartmut Harald von der Henkel Hut"
+
+--~ test(sample_a)
+--~ test(sample_b)
diff --git a/Master/texmf-dist/tex/context/base/bibl-bib.mkiv b/Master/texmf-dist/tex/context/base/bibl-bib.mkiv
index 51db67ed7da..10abe5cb8a7 100644
--- a/Master/texmf-dist/tex/context/base/bibl-bib.mkiv
+++ b/Master/texmf-dist/tex/context/base/bibl-bib.mkiv
@@ -11,19 +11,952 @@
%C therefore copyrighted by \PRAGMA. See mreadme.pdf for
%C details.
-\writestatus{loading}{ConTeXt Bibliography Support / BibTeX}
+\writestatus{loading}{ConTeXt Bibliography Support / Experimental BibTeX}
\registerctxluafile{bibl-bib}{1.001}
\unprotect
-\def\definebibtexsession [#1]{\ctxlua{commands.definebibtexsession("#1")}}
-\def\preparebibtexsession [#1]{\ctxlua{commands.preparebibtexsession("#1")}}
+% todo: et al limiters
+% todo: split: citationvariant and publicationvariant
+
+%D This interface is under development. As I don't use \BIBTEX\ myself I need
+%D some motivation to spend time on it, and an occasional question on the
+%D list can be a reason. A few examples. As \BIBTEX\ databases can be poluted
+%D by local commands, we need to catch:
+%D
+%D \startbuffer
+%D \defbibtexcommand\MF {MF}
+%D \defbibtexcommand\MP {MP}
+%D \defbibtexcommand\TUB {TUGboat}
+%D \defbibtexcommand\Mc {Mac}
+%D \defbibtexcommand\sltt{\tt}
+%D \defbibtexcommand\<#1>{\type{#1}}
+%D \defbibtexcommand\acro#1{#1}
+%D \stopbuffer
+%D
+%D \typebuffer
+%D
+%D Let's define a session and load a few databases. We convert to \UTF\ and
+%D strip commands.
+%D
+%D \startbuffer
+%D \definebibtexsession [somebibtex]
+%D \registerbibtexfile [somebibtex] [tugboat.bib]
+%D \registerbibtexfile [somebibtex] [komoedie.bib]
+%D \preparebibtexsession [somebibtex] [convert,strip]
+%D \stopbuffer
+%D
+%D \typebuffer
+%D
+%D This loads an mapping (work in progress):
+%D
+%D \startbuffer
+%D \def\currentbibtexformat{apa} \input bxml-\currentbibtexformat.mkiv
+%D \stopbuffer
+%D
+%D \typebuffer
+%D
+%D There are several ways to handle the \XML. It helps if you're a bit
+%D familiar with \XML\ processing in \MKIV.
+%D
+%D Here we regular setups. Three elements are mapped but only one
+%D is actually used and applied to root element \type {/bibtex}.
+%D
+%D \startbuffer
+%D \startxmlsetups bibtex
+%D \xmlregistereddocumentsetups{#1}{}
+%D \xmlsetsetup{#1}{bibtex|entry|field}{bibtex:*}
+%D \xmlmain{#1}
+%D \stopxmlsetups
+%D
+%D \startxmlsetups bibtex:bibtex
+%D \xmlfilter{#1}{
+%D /entry[@category='article']
+%D /field[@name='author' and (find(text(),'Hagen') or find(text(),'Hoekwater'))]
+%D /../command(bibtex:format)
+%D }
+%D \stopxmlsetups
+%D
+%D \applytobibtexsession[somebibtex][bibtex]
+%D \stopbuffer
+%D
+%D \typebuffer
+%D
+%D A simpler setup is given next. Here we just apply a setup to the root
+%D element directly:
+%D
+%D \startbuffer
+%D \startxmlsetups bibtex:list
+%D \xmlfilter{#1}{/bibtex/entry/command(bibtex:format)}
+%D \stopxmlsetups
+%D
+%D \applytobibtexsession[somebibtex][bibtex:list]
+%D \stopbuffer
+%D
+%D \typebuffer
+%D
+%D A slightly more complex expression:
+%D
+%D \startbuffer
+%D \startxmlsetups bibtex:filter
+%D \xmlfilter{#1}{
+%D /bibtex
+%D /entry[@category='article']
+%D /field[@name='author' and (find(text(),'Hagen') or find(text(),'Hoekwater'))]
+%D /../command(bibtex:format)
+%D }
+%D \stopxmlsetups
+%D
+%D \applytobibtexsession[somebibtex][bibtex:filter]
+%D \stopbuffer
+%D
+%D \typebuffer
+
+\newtoks \everydefinebibtexsession
+\newtoks \everypreparebibtexsession
+\newtoks \everysetupbibtexsession
+\setfalse \tracebibtexformat
+
+\unexpanded\def\definebibtexsession {\dosingleargument\dodefinebibtexsession}
+\def\preparebibtexsession {\dodoubleempty \dopreparebibtexsession}
+\unexpanded\def\setupbibtexsession {\dodoubleargument\dosetupbibtexsession}
+
+\def\dodefinebibtexsession [#1]{\edef\currentbibtexsession{#1}%
+ \ctxlua{commands.definebibtexsession("#1")}%
+ \the\everydefinebibtexsession}
+
+\def\dopreparebibtexsession[#1][#2]{\edef\currentbibtexsession{#1}%
+ \ctxlua{commands.preparebibtexsession("#1","bibtex:#1","#2")}%
+ \the\everypreparebibtexsession}
+
+\def\dosetupbibtexsession [#1][#2]{\edef\currentbibtexsession{#1}%
+ \getparameters[\??pb#1][#2]%
+ \the\everysetupbibtexsession}
+
\def\registerbibtexfile {\dodoubleargument\doregisterbibtexfile}
-\def\doregisterbibtexfile [#1][#2]{\ctxlua{commands.registerbibtexfile("#1","#2")}} % also the fast one
\def\registerbibtexentry {\dodoubleargument\doregisterbibtexentry}
-\def\doregisterbibtexentry [#1][#2]{\ctxlua{commands.registerbibtexentry("#1","#2")}} % also the fast one
\def\applytobibtexsession {\dodoubleargument\doapplytobibtexsession}
+
+\def\doregisterbibtexfile [#1][#2]{\ctxlua{commands.registerbibtexfile("#1","#2")}}
+\def\doregisterbibtexentry [#1][#2]{\ctxlua{commands.registerbibtexentry("#1","#2")}}
\def\doapplytobibtexsession[#1][#2]{\xmlprocessregistered{bibtex:#1}{#2}{#2}}
+\unexpanded\def\bibtexcommand#1%
+ {\ifcsname\??pb:c:#1\endcsname \else
+ \fakebibtexcommand{#1}%
+ \fi
+ \csname\??pb:c:#1\endcsname}
+
+\def\fakebibtexcommand#1%
+ {\ifcsname#1\endcsname
+ \writestatus{bibtex}{unknown command: #1, using built-in context variant}%
+ \setugvalue{\??pb:c:#1}{\dosomebibtexcommand{#1}}%
+ \else
+ \writestatus{bibtex}{unknown command: #1}%
+ \setugvalue{\??pb:c:#1}{\dofakebibtexcommand{#1}}%
+ \fi}
+
+\let\dosomebibtexcommand \getvalue
+\def\dofakebibtexcommand#1{{\tttf#1}}
+
+\def\defbibtexcommand#1%
+ {\setuvalue{\strippedcsname#1}}
+
+\def\bibxmldoifelse#1{\xmldoifelse\currentbibxmlnode{/field[@name='#1']}}
+\def\bibxmldoif #1{\xmldoif \currentbibxmlnode{/field[@name='#1']}}
+\def\bibxmldoifnot #1{\xmldoifnot \currentbibxmlnode{/field[@name='#1']}}
+\def\bibxmlflush #1{\xmlcontext \currentbibxmlnode{/field[@name='#1']}}
+\def\bibxmlsetup {\xmlsetup \currentbibxmlnode} % {#1}
+
+\def\currentbibtexformat{apa} % ho wto interface this, maybe split loading and key
+\def\currentbibxmlnode {unset}
+\def\currentbibxmltag {unset}
+
+\startxmlsetups bibtex
+ \xmlregistereddocumentsetups{#1}{}
+ \xmlsetsetup{#1}{bibtex|entry|field}{bibtex:*}
+ \xmlmain{#1}
+\stopxmlsetups
+
+\startxmlsetups bibtex:format
+ \bibtexpublicationsparameter\c!before\relax % prevents lookahead
+ \edef\currentbibxmlnode {#1}
+ \edef\currentbibxmltag {\xmlatt{#1}{tag}}
+ \edef\currentbibxmlcategory{\xmlatt{#1}{category}}
+ \ifconditional\tracebibtexformat
+ \tracedbibxmlintro\currentbibxmltag
+ \tracedbibxmlintro\currentbibxmlcategory
+ \fi
+ \ignorespaces
+ \xmlcommand{#1}{.}{bibtex:\currentbibtexformat:\currentbibxmlcategory}
+ \removeunwantedspaces
+ \bibtexpublicationsparameter\c!after\relax % prevents lookahead
+\stopxmlsetups
+
+\startxmlsetups bibtex:list
+ \xmlfilter{#1}{/bibtex/entry/command(bibtex:format)}
+\stopxmlsetups
+
+\startxmlsetups bibtex:bibtex
+ \xmlfilter{#1}{/entry/command(bibtex:format)}
+\stopxmlsetups
+
+% formatters
+
+\let\normalbibxmlflush\bibxmlflush
+
+\definecolor[bibtextracecolor:field] [darkred]
+\definecolor[bibtextracecolor:crossref][darkblue]
+\definecolor[bibtextracecolor:key] [darkgreen]
+
+\def\tracedbibxmlintro #1{{\tttf#1 -> }}
+\def\tracedbibxmlflush #1{\color[bibtextracecolor:field] {\tttf[#1]}}
+\def\tracedbibxmltexts #1{\color[bibtextracecolor:field] {\tttf<#1>}}
+\def\tracedbibxmlcrossref#1{\color[bibtextracecolor:crossref]{\tttf#1}}
+\def\tracedbibxmlkey #1{\color[bibtextracecolor:key] {\tttf#1}}
+
+\def\tracedbibxmltext
+ {\ifconditional\tracebibtexformat
+ \expandafter\tracedbibxmltexts % plural
+ \else
+ \expandafter\firstofoneargument
+ \fi}
+
+\def\bibxmlflush
+ {\ifconditional\tracebibtexformat
+ \expandafter\tracedbibxmlflush
+ \else
+ \expandafter\normalbibxmlflush
+ \fi}
+
+\startxmlsetups bibtex:format:crossref
+ \ifconditional\tracebibtexformat
+ \tracedbibxmlcrossref{\xmlfirst\currentbibxmlnode{/field[@name='crossref']/lower()}}
+ \else
+ \cite[\xmlfirst\currentbibxmlnode{/field[@name='crossref']/lower()}]
+ \fi
+\stopxmlsetups
+
+\startxmlsetups bibtex:format:key
+ \ifconditional\tracebibtexformat
+ \tracedbibxmlkey{\normalbibxmlflush{key}}
+ \else
+ \bibxmlflush{key}
+ \fi
+\stopxmlsetups
+
+\startxmlsetups bibtex:format:common:author
+ \ifconditional\tracebibtexformat
+ \bibxmlflush\currentbibtexvariant
+ \else
+ \xmlfilter{#1}{/field[@name='\currentbibtexvariant']/bibtexconcat('\currentbibtexvariant')}
+ \fi
+\stopxmlsetups
+
+\startxmlsetups bibtex:format:author
+ \begingroup
+ \def\currentbibtexvariant{author}
+ \xmlsetup{#1}{bibtex:format:common:author}
+ \endgroup
+\stopxmlsetups
+
+\startxmlsetups bibtex:format:artauthor
+ \begingroup
+ \def\currentbibtexvariant{artauthor}
+ \xmlsetup{#1}{bibtex:format:common:author}
+ \endgroup
+\stopxmlsetups
+
+\startxmlsetups bibtex:format:editor
+ \begingroup
+ \def\currentbibtexvariant{editor}
+ \xmlsetup{#1}{bibtex:format:common:author}
+ \endgroup
+\stopxmlsetups
+
+\startxmlsetups bibtex:format:doi
+% \bibdoifelse{\@@pb@doi}{#1\expanded{\bibgotoDOI{\@@pb@thekey}{\@@pb@doi}}#2}{#3}
+ *doi*
+\stopxmlsetups
+
+
+\startxmlsetups bibtex:format:doi
+% \bibdoifelse{\@@pb@biburl}{#1\expanded{\bibgotoURL{\@@pb@thekey}{\@@pb@biburl}}#2}{#3}
+ *url*
+\stopxmlsetups
+
+\startxmlsetups bibtex:format:month
+% {\bibdoifelse\@@pb@month
+% {#1\doifnumberelse\@@pb@month
+% {\doifconversiondefinedelse\@@pbmonthconversion
+% {\convertnumber\@@pbmonthconversion\@@pb@month}{\@@pb@month}}%
+% {\@@pb@month}#2}%
+% {#3}
+ *month*
+\stopxmlsetups
+
+% lists
+
+\def\bibtexlistprocessor
+ {\ctxlua{bibtex.hacks.add(structure.lists.uservalue("\currentlist",\currentlistindex,"bibref"),\currentlistindex)}}
+
+\appendtoks
+ \definelist[\currentbibtexsession]%
+ \setuplist[\currentbibtexsession][\c!state=\v!start,\c!width=]%
+ \installstructurelistprocessor{\currentbibtexsession:userdata}{\bibtexlistprocessor}%
+\to \everydefinebibtexsession
+
+% \def\installbibtexsorter#1#2%
+% {\setvalue{\??pb:\c!sort:#1}{#2}}
+
+% \installbibtexsorter\v!no {no}
+% \installbibtexsorter\v!author {au}
+% \installbibtexsorter\v!title {ti}
+% \installbibtexsorter\v!short {ab}
+% \installbibtexsorter\empty {no}
+% \installbibtexsorter\s!default{no}
+
+% \setupbibtex
+% [\c!sorttype=\v!cite,
+% \c!sort=no]
+
+% \long\unexpanded\def\startpublication#1\stoppublication
+% {\blank
+% todo
+% \blank}
+
+% \let\stoppublication\relax
+
+\unexpanded\def\bibtexspace {\removeunwantedspaces\space}
+\unexpanded\def\bibtexperiod {\removeunwantedspaces.\space}
+\unexpanded\def\bibtexcomma {\removeunwantedspaces,\space}
+\unexpanded\def\bibtexlparent {\removeunwantedspaces\space(}
+\unexpanded\def\bibtexrparent {\removeunwantedspaces)\space}
+\unexpanded\def\bibtexlbracket{\removeunwantedspaces\space[}
+\unexpanded\def\bibtexrbracket{\removeunwantedspaces]\space}
+
+% interfacing
+
+% todo : lang en language
+% todo : directions
+
+
+% variables
+
+\newcount\bibtexblock \bibtexblock\plusone
+
+\newtoks \everysetupbibtexpublications
+\newtoks \everysetupbibtexcitations
+\newcount\bibtexcounter
+
+\def\bibtexrefprefix{\number\bibtexblock:}
+
+\let\currentbibtexsession\s!default
+\let\currentbibtexvariant\s!default
+
+% parameters: session+variant variant session shared
+
+\def\bibtexpublicationsparameter#1%
+ {\csname
+ \ifcsname\??pb\currentbibtexsession:\currentbibtexvariant#1\endcsname
+ \??pb\currentbibtexsession:\currentbibtexvariant#1%
+ \else\ifcsname\??pb:\currentbibtexvariant#1\endcsname
+ \??pb:\currentbibtexvariant#1%
+ \else\ifcsname\??pb\currentbibtexsession#1\endcsname
+ \??pb\currentbibtexsession#1%
+ \else\ifcsname\??pb#1\endcsname
+ \??pb#1%
+ \else
+ \s!empty
+ \fi\fi\fi\fi
+ \endcsname}
+
+\def\bibtexcitationparameter#1%
+ {\csname
+ \ifcsname\??pv\currentbibtexsession:\currentbibtexvariant#1\endcsname
+ \??pv\currentbibtexsession:\currentbibtexvariant#1%
+ \else\ifcsname\??pv:\currentbibtexvariant#1\endcsname
+ \??pv:\currentbibtexvariant#1%
+ \else\ifcsname\??pv\currentbibtexsession#1\endcsname
+ \??pv\currentbibtexsession#1%
+ \else\ifcsname\??pv#1\endcsname
+ \??pv#1%
+ \else
+ \s!empty
+ \fi\fi\fi\fi
+ \endcsname}
+
+% setup commands
+
+\unexpanded\def\setupbibtexpublications
+ {\let\currentpublicationclass\??pb
+ \let\everysetupbibtexwhatever\everysetupbibtexpublications
+ \dodoubleargument\dosetupbibtexwhatever}
+
+\unexpanded\def\setupbibtexcitations
+ {\let\currentpublicationclass\??pv
+ \let\everysetupbibtexwhatever\everysetupbibtexcitations
+ \dodoubleargument\dosetupbibtexwhatever}
+
+\unexpanded\def\setupbibtexpublicationvariants
+ {\let\currentpublicationclass\??pb
+ \let\everysetupbibtexwhatever\everysetupbibtexpublications
+ \dotripleargument\dosetupbibtexwhatevervariant}
+
+\unexpanded\def\setupbibtexcitationvariants
+ {\let\currentpublicationclass\??pv
+ \let\everysetupbibtexwhatever\everysetupbibtexcitations
+ \dotripleargument\dosetupbibtexwhatevervariant}
+
+\def\dosetupbibtexwhatever[#1][#2]% [sessionlist] [setup]
+ {\ifsecondargument
+ % sessions setups
+ \def\dobtxcommand##1{\getparameters[\currentpublicationclass##1][#2]}%
+ \processcommalist[#1]\dobtxcommand
+ \else
+ % setups
+ \getparameters[\currentpublicationclass][#1]%
+ \the\everysetupbibtexwhatever
+ \fi}
+
+\def\dosetupbibtexwhatevervariant[#1][#2][#3]% [sessionlist] [variantlist] [setup]
+ {\ifthirdargument
+ % sessions variants setups
+ \def\dobtxcommand##1%
+ {\def\dodobtxcommand####1{\getparameters[\currentpublicationclass##1:####1][#3]}%
+ \processcommalist[#2]\dodobtxcommand}%
+ \processcommalist[#1]\docbtxommand
+ \else\ifsecondargument
+ % variants setups
+ \def\dobtxcommand##1{\getparameters[\currentpublicationclass:##1][#2]}%
+ \processcommalist[#1]\dobtxcommand
+ \else
+ % setups
+ \getparameters[\currentpublicationclass][#1]%
+ \the\everysetupbibtexwhatever
+ \fi\fi}
+
+% some initializations
+
+\setupbibtexcitationvariants
+ [author,authoryear,authoryears]
+ [\c!namesep={, }]
+
+% loading alternatives (apa etc)
+
+\def\doloadbibtexpublicationalternative
+ {\ifproductionrun
+ \edef\bibtexpublicationsalternative{\@@pbalternative}% parent
+ \ifx\bibtexpublicationsalternative\empty \else
+ \processcommacommand[\bibtexpublicationsalternative]\dodoloadbibtexpublicationalternative
+ \let\@@pbalternative\empty
+ \fi
+ \fi}
+
+\def\dodoloadbibtexpublicationalternative#1%
+ {\doonlyonce{#1}
+ {\readsysfile{bxml-#1.mkiv}
+ {\showmessage\m!publications{6}{bxml-#1}}
+ {\showmessage\m!publications{1}{bxml-#1}}}}
+
+\appendtoks
+ \doloadbibtexpublicationalternative
+\to \everysetupbibtexpublications
+
+\appendtoks
+ \doloadbibtexpublicationalternative
+\to \everyjob
+
+% whatever, should be key
+
+\def\bibtexleftnumber#1{#1\hfill~}
+
+% testing
+
+% \showmessage\m!publications{5}{#1 is unknown}\secondoftwoarguments}
+
+\let\doifbibreferencefoundelse\secondofthreearguments
+
+% lists
+
+\newtoks\everysetupbibtexlistplacement
+
+% this will change as we need it too often .. we will use context.thebibtexnamesep
+
+\appendtoks
+ \ctxlua {bibtex.authors.setsettings {
+ namesep = \!!bs\bibtexpublicationsparameter\c!namesep\!!es,
+ lastnamesep = \!!bs\bibtexpublicationsparameter\c!lastnamesep\!!es,
+ finalnamesep = \!!bs\bibtexpublicationsparameter\c!finalnamesep\!!es,
+ firstnamesep = \!!bs\bibtexpublicationsparameter\c!firstnamesep\!!es,
+ juniorsep = \!!bs\bibtexpublicationsparameter\c!juniorsep\!!es,
+ vonsep = \!!bs\bibtexpublicationsparameter\c!vonsep\!!es,
+ surnamesep = \!!bs\bibtexpublicationsparameter\c!surnamesep\!!es,
+ namesep = \!!bs\bibtexpublicationsparameter\c!namesep\!!es,
+ lastnamesep = \!!bs\bibtexpublicationsparameter\c!lastnamesep\!!es,
+ finalnamesep = \!!bs\bibtexpublicationsparameter\c!finalnamesep\!!es,
+ author = {
+ etallimit = \!!bs\bibtexpublicationsparameter\c!authoretallimit\!!es,
+ etaldisplay = \!!bs\bibtexpublicationsparameter\c!authoretaldisplay\!!es,
+ etaltext = \!!bs\bibtexpublicationsparameter\c!authoretaltext\!!es,
+ },
+ editor = {
+ etallimit = \!!bs\bibtexpublicationsparameter\c!editoretallimit\!!es,
+ etaldisplay = \!!bs\bibtexpublicationsparameter\c!editoretaldisplay\!!es,
+ etaltext = \!!bs\bibtexpublicationsparameter\c!editoretaltext\!!es,
+ },
+ artauthor = {
+ etallimit = \!!bs\bibtexpublicationsparameter\c!artauthoretallimit\!!es,
+ etaldisplay = \!!bs\bibtexpublicationsparameter\c!artauthoretaldisplay\!!es,
+ etaltext = \!!bs\bibtexpublicationsparameter\c!artauthoretaltext\!!es,
+ },
+ } }%
+\to \everysetupbibtexlistplacement
+
+\def\completebibtexpublications{\dodoubleempty\docompletebibtexpublications}
+\unexpanded\def\placebibtexpublications {\dodoubleempty\doplacebibtexpublications}
+
+\def\docompletebibtexpublications[#1][#2]% title might become obsolete, just headtext
+ {\begingroup
+ \edef\currentbibtexsession{#1}%
+ \let\currentlist\currentbibtexsession
+ \setuplist[\currentbibtexsession][\c!criterium=\v!previous,#2]
+ \doifelsenothing{\namedlistparameter\currentbibtexsession\c!title}
+ {\systemsuppliedchapter[\currentbibtexsession]{\headtext{\currentbibtexsession}}}
+ {\normalexpanded{\systemsuppliedchapter[\currentbibtexsession]{\namedlistparameter\currentbibtexsession\c!title}}}%
+ \dodoplacebibtexpublications}
+
+\def\doplacebibtexpublications[#1][#2]%
+ {\begingroup
+ \edef\currentbibtexsession{#1}%
+ \let\currentlist\currentbibtexsession
+ \setuplist[\currentbibtexsession][\c!criterium=\v!previous,#2]%
+ \dodoplacebibtexpublications}
+
+\def\dodoplacebibtexpublications
+ {\determinelistcharacteristics[\currentbibtexsession]%
+ \the\everysetupbibtexlistplacement
+ \forgetall
+ \typesetbibtexlist
+ \endgroup
+ \global\advance\bibtexblock\plusone}
+
+\setvalue{\??pb:\c!numbering:\v!short}#1% todo var s -> short tag
+ {\bibtexlistnumberbox{\bibtexpublicationsparameter\c!numbercommand{\bibtexgetshort\currentpublicationtag}}}
+
+\setvalue{\??pb:\c!numbering:\v!bib}#1% todo var n -> number
+ {\bibtexlistnumberbox{\bibtexpublicationsparameter\c!numbercommand{\bibtexgetnumber\currentpublicationtag}}}
+
+\setvalue{\??pb:\c!numbering:\s!unknown}#1%
+ {\bibtexlistnumberbox{\bibtexpublicationsparameter\c!numbercommand{#1}}}
+
+\def\@@pblimitednumber % name
+ {\csname\??pb:\c!numbering:%
+ \ifcsname\??pb:\c!numbering:\currentbibtexnumbering\endcsname
+ \currentbibtexnumbering
+ \else
+ \s!unknown
+ \fi
+ \endcsname}
+
+\appendtoks
+ \edef\currentbibtexnumbering{\bibtexpublicationsparameter\c!numbering}%
+ \ifx\currentbibtexnumbering\v!no
+ \setuplist[\currentbibtexsession][\c!numbercommand=,\c!symbol=\v!none,\c!textcommand=\outdented]%
+ \else
+ \setuplist[\currentbibtexsession][\c!numbercommand=\@@pblimitednumber]%
+ \fi
+\to \everysetupbibtexlistplacement
+
+\newdimen\bibtexnumberwidth
+
+\def\bibtexlistnumberbox{\hbox \ifcase\bibtexnumberwidth\else to \bibtexnumberwidth\fi}
+
+\appendtoks
+ \doifelse{\bibtexpublicationsparameter\c!autohang}\v!yes
+ {\ifx\currentbibtexnumbering\v!short
+ \setbox\scratchbox\hbox{\bibtexpublicationsparameter\c!numbercommand{\bibtexpublicationsparameter\c!samplesize}}%
+ \else
+ \setbox\scratchbox\hbox{\bibtexpublicationsparameter\c!numbercommand{\ctxlua{tex.write(structure.lists.size())}}}%
+ \fi
+ \bibtexnumberwidth\wd\scratchbox
+ \setuplist[\currentbibtexsession][\c!distance=\zeropoint]}
+ {\doifelsenothing{\bibtexpublicationsparameter\c!width}
+ {\bibtexnumberwidth\zeropoint}
+ {\bibtexnumberwidth\bibtexpublicationsparameter\c!width}}%
+ \setuplist[\currentbibtexsession][\c!width=\bibtexnumberwidth]%
+\to \everysetupbibtexlistplacement
+
+\appendtoks
+ \let\maybeyear\gobbleoneargument
+ \let\noopsort \gobbleoneargument
+\to \everysetupbibtexlistplacement
+
+\appendtoks
+ \doifelse{\bibtexpublicationsparameter\c!maybeyear}\v!off
+ {\let\maybeyear\gobbleoneargument}
+ {\let\maybeyear\firstofoneargument}%
+\to \everysetupbibtexlistplacement
+
+\appendtoks
+ \doifnot{\bibtexpublicationsparameter\c!option}\v!continue
+ {\global\bibtexcounter\zerocount}%
+\to \everysetupbibtexlistplacement
+
+\appendtoks
+ \edef\currentbibtexcriterium{\namedlistparameter\currentbibtexsession\c!criterium}%
+\to \everysetupbibtexlistplacement
+
+\def\typesetbibtexlist
+ {\dobeginoflist
+ \doif{\namedlistparameter\currentbibtexsession\c!criterium}\v!cite
+ {\setuplist[\currentbibtexsession][\c!criterium=\v!here]}%
+ \doifelse{\bibtexpublicationsparameter\c!method}\v!local
+ {\ctxlua{bibtex.hacks.reset(1)}}% function can take method
+ {\ctxlua{bibtex.hacks.reset(2)}}%
+ \placestructurelist
+ {\currentbibtexsession}
+ {\currentbibtexcriterium}
+ {\namedlistparameter\currentbibtexsession\c!number}%
+ \ctxlua{bibtex.hacks.flush("\bibtexpublicationsparameter\c!sorttype")}%
+ \doendoflist}
+
+\unexpanded\def\typesetbibtexpublication#1%
+ {\edef\currentbibtexsessiontag{#1}%
+ \ifx\currentbibtexsessiontag\empty
+ % can't really happen
+ \else\ifx\currentbibtexcriterium\v!all
+ \doplacepublicationindeed
+ \else
+ \ctxlua{bibtex.hacks.doifalreadyplaced("\currentbibtexsessiontag")}
+ \donothing
+ \dotypesetbibtexpublication
+ \fi\fi}
+
+\def\dotypesetbibtexpublication
+ {\doifbibreferencefoundelse\currentbibtexsessiontag
+ {\global\advance\bibtexcounter\plusone
+ \ctxlua{bibtex.hacks.registerplaced("\currentbibtexsessiontag")}%
+ \dodolistelement{\currentbibtexsession}{}{\number\bibtexcounter}{\thebibtexpublicationlistelement}{}{}}
+ {}} % invalid
+
+\def\thebibtexpublicationlistelement
+ {\strut
+ \expanded{\reference[\bibtexrefprefix\currentbibtexsessiontag]{\number\bibtexcounter}}%
+ \dotypesetabibtexpublication\currentbibtexsessiontag
+ \strut}
+
+\def\dotypesetabibtexpublication#1%
+ {\begingroup
+ \ignorespaces
+ \xmlfilter{bibtex:\currentbibtexsession}{/bibtex/entry[@tag='#1']/command(bibtex:format)}%
+ \removeunwantedspaces
+% \ignorespaces
+% \bibalternative{\bibgetvart{#1}}%
+% \removeunwantedspaces
+ \endgroup}
+
+\def\doprocessbibtexentry#1{\typesetbibtexpublication{#1}}
+
+% citations
+
+\unexpanded\def\bibtexcitation[#1]%
+ {\edef\currentbibtexsession{#1}%
+ \strictdoifnextoptionalelse\dobibtexcitation\dobibtexref}
+
+\def\dobibtexref#1%
+ {\dodobibtexcitation[#1][]}
+
+\def\dobibtexcitation[#1]%
+ {\strictdoifnextoptionalelse{\dodobibtexcitation[#1]}{\dodobibtexcitation[#1][]}}
+
+\def\dodobibtexcitation[#1][#2]%
+ {\dontleavehmode
+ \begingroup
+ \doifelsenothing{#2}\secondargumentfalse\secondargumenttrue
+ \ifsecondargument
+ \dowhateverbibtexcitation{#1}{#2}%
+ \else
+ \donumberedbibtexcitation{#1}%
+ \fi
+ \endgroup}
+
+\def\dowhatevercitation#1#2%
+ {\processcommalist[#2]\dobibtexcitationindeed
+ \setupinteraction[\c!style=]% use flag instead
+ \doifassignmentelse{#1}
+ {\getparameters[\??pb\??pb][\c!alternative=,\c!extras=,#1]%
+ \edef\currentbibtexvariant{\@@pb@@pbalternative}%
+ \ifx\currentbibtexvariant\empty
+ \edef\currentbibtexvariant{\bibtexpublicationparameter\c!refcommand}%
+ \fi
+ \ifx\@@pb@@pbextras\empty
+ \setupcite[\currentbibtexvariant][#1]%
+ \else
+ \edef\@@pb@@pbextras{{\@@pb@@pbextras\ifdefined\@@pb@@pbright\@@pb@@pbright\else\bibtexpublicationparameter\c!right\fi}}%
+ \expanded{\setupcite[\currentbibtexvariant][#1,\c!right=\@@pb@@pbextras]}%
+ \fi}%
+ {\def\currentbibtexvariant{#1}}%
+ \getvalue{bibtex\currentbibtexvariant ref}[#2]}
+
+\def\donumberedbibtexcitation#1%
+ {\processcommalist[#1]\dobibtexcitationindeed
+ \setupinteraction[\c!style=]%
+ \edef\currentbibtexvariant{\bibtexcitationparameter\c!refcommand}%
+ \getvalue{bibtex\currentbibtexvariant ref}[#1]}
+
+\def\dobibtexcitationindeed#1%
+ {\iftrialtypesetting \else
+ \expanded{\writedatatolist[\currentbibtexsession][bibref=#1]}%
+ \fi}
+
+\def\nobibtexcitation[#1]%
+ {\processcommalist[#1]\dobibtexcitationindeed}
+
+\def\bibtexnumref[#1]%
+ {\dontleavehmode
+ \begingroup
+ \bibtexcitationparameter\v!left
+ \penalty\!!tenthousand
+ \ctxlua{bibtex.hacks.resolve("","\number\bibtexblock","#1")}%
+ \bibtexcitationparameter\v!right
+ \endgroup}
+
+\def\dowithbibtexnumrefconnector#1#2%
+ {\ifnum#1>\plusone
+ \ifnum#2>\plusone
+ \ifnum#2=#1\relax
+ \bibtexpublicationsparameter\c!lastpubsep
+ \else
+ \bibtexpublicationsparameter\c!pubsep
+ \fi
+ \fi
+ \fi}
+
+\def\dowithbibtexnumref#1#2#3#4#5% n, i, prefix block ref
+ {\dowithbibtexnumrefconnector{#1}{#2}%
+ \def\bibtexrefprefix{#4:}%
+ \inbiblink[#5]}
+
+\def\dowithbibtexnumrefrange#1#2#3#4#5#6#7% n, i, prefix block ref
+ {\dowithbibtexnumrefconnector{#1}{#2}%
+ \def\bibtexrefprefix{#4:}%
+ \inbiblink[#5]%
+ \endash
+ \def\bibtexrefprefix{#6:}%
+ \inbiblink[#7]}
+
+\def\nobibtexnumref#1%
+ {[#1]}
+
+% hm
+
+% \def\@@pbinumbercommand{\executeifdefined{\??pb:\c!numbercommand:\@@pbnumbering}\firstofoneargument}
+
+% \letvalue{\??pb:\c!numbercommand:\v!yes }\firstofoneargument
+% \letvalue{\??pb:\c!numbercommand:\v!no }\gobbleoneargument
+% \setvalue{\??pb:\c!numbercommand:\v!short}{\bibtexgetshort\currentpublicationtag\gobbleoneargument}
+% \setvalue{\??pb:\c!numbercommand:\v!bib }{\bibtexgetnumber\currentpublicationtag\gobbleoneargument}
+
+% \def\bibalternative#1{\csname\??pv\@@currentalternative#1\endcsname}
+
+% basic setup
+
+% parent -> publicationlist
+%
+% \setuplist
+% [\currentbibtexsession]
+% [\c!samplesize={AA99},
+% \c!alternative=a,
+% \c!interaction=,
+% \c!pagenumber=\v!no,
+% #1,
+% \c!command=]
+
+% \setuppublicationlist
+% [\c!title=,
+% \c!command=\dospecialbibinsert,
+% \c!maybeyear=\v!on]
+
+\setupbibtexpublications
+ [\c!monthconversion=,
+ \c!alternative=apa,
+ \c!method=\v!global,
+ \c!refcommand=num,
+ \c!numbercommand=\bibtexleftnumber]
+
+\setupbibtexcitations % command ?
+ [\c!refcommand=num]
+
+% helpers
+
+\def\doifbibtexinteractionelse
+ {\iflocation
+ \edef\temp{\bibtexcitationparameter\c!interaction}%
+ \ifx\temp\v!stop
+ \@EA@EA@EA\secondoftwoarguments
+ \else
+ \@EA@EA@EA\firstoftwoarguments
+ \fi
+ \else
+ \@EA\secondoftwoarguments
+ \fi}
+
+% variants
+
+% todo: lastsep here
+
+\newconditional\firstbibtexrefsep
+
+\def\bibtexresetrefsep
+ {\settrue\firstbibtexrefsep}
+
+\def\bibtexinsertrefsep
+ {\ifconditional\firstbibtexrefsep
+ \setfalse\firstbibtexrefsep
+ \else
+ \bibtexcitationparameter\c!pubsep
+ \fi}
+
+\def\inbibtexlink#1#2%
+ {\doifreferencefoundelse{\bibtexrefprefix#1}
+ {\goto{#2}[\bibtexrefprefix#1]}
+ {!#1!\unknownreference{#1}}}
+
+\def\dobibtexgotolink#1#2%
+ {\doifreferencefoundelse{\bibtexrefprefix#1}
+ {\goto{#2}[\bibtexrefprefix#1]}
+ {!#1!\unknownreference{#1}}}
+
+\def\dobibattexlink#1#2%
+ {\doifreferencefoundelse{\bibtexrefprefix#1}
+ {\at{#2}[\bibtexrefprefix#1]}
+ {!#1!\unknownreference{#1}}}
+
+\def\dobibtexurllink#1#2%
+ {\expanded{\useURL[bibtex:url:#1][#2]}%
+ \doifbibtexinteractionelse
+ {\goto{\url[bibtex:url:#1]}[url(bibtex:url:#1)]}
+ {\url[bibtex:url:#1]}}
+
+% todo: style, color
+
+\unexpanded\def\bibtexdataref {\dodoubleargument\dobibtexdataref}
+\unexpanded\def\bibtextyperef {\dodoubleargument\dobibtextyperef}
+\unexpanded\def\bibtexkeyref {\dodoubleargument\dobibtexkeyref}
+\unexpanded\def\bibtexserialref {\dodoubleargument\dobibtexserialref}
+\unexpanded\def\bibtexurlref {\dodoubleargument\dobibtexurlref}
+\unexpanded\def\bibtexdoiref {\dodoubleargument\dobibtexdoiref}
+\unexpanded\def\bibtexpageref {\dodoubleargument\dobibtexpageref}
+\unexpanded\def\bibtexnoneref {\dodoubleargument\dobibtexnoneref}
+\unexpanded\def\bibtexshortref {\dodoubleargument\dobibtexshortref}
+\unexpanded\def\bibtexyearref {\dodoubleargument\dobibtexyearref}
+\unexpanded\def\bibtexauthorref {\dodoubleargument\dobibtexauthorref}
+\unexpanded\def\bibtexauthoryearref {\dodoubleargument\dobibtexauthoryearref}
+\unexpanded\def\bibtexauthoryearsref{\dodoubleargument\dobibtexauthoryearsref}
+
+\def\dobibtexdataref {\doprocessbibtexref\dodobibtexdataref {ref}} % [#1][#2]
+\def\dobibtextyperef {\doprocessbibtexref\dodobibtextyperef {type}} % [#1][#2]
+\def\dobibtexkeyref {\doprocessbibtexref\dodobibtexkeyref {key}} % [#1][#2]
+\def\dobibtexserialref {\doprocessbibtexref\dodobibtexserialref {serial}} % [#1][#2]
+\def\dobibtexurlref {\doprocessbibtexref\dodobibtexurlref {url}} % [#1][#2]
+\def\dobibtexdoiref {\doprocessbibtexref\dodobibtexdoiref {doi}} % [#1][#2]
+\def\dobibtexpageref {\doprocessbibtexref\dodobibtexpageref {page}} % [#1][#2]
+\def\dobibtexnoneref {\doprocessbibtexref\dodobibtexnoneref {none}} % [#1][#2]
+\def\dobibtexshortref {\doprocessbibtexref\dodobibtexshortref {short}} % [#1][#2]
+\def\dobibtexyearref {\doprocessbibtexref\dodobibtexyearref {year}} % [#1][#2]
+\def\dobibtexauthorref {\doprocessbibtexref\dodobibtexauthorref {author}} % [#1][#2]
+\def\dobibtexauthoryearref {\doprocessbibtexref\dodobibtexauthoryearref {authoryear}} % [#1][#2]
+\def\dobibtexauthoryearsref{\doprocessbibtexref\dodobibtexauthoryearsref{authoryears}} % [#1][#2]
+
+\def\doprocessbibtexref#1#2[#3][#4]%
+ {\edef\currentbibtexsession{#3}%
+ \edef\currentbibtexvariant{#2}%
+ \def\dodoprocessbibtexref##1%
+ {% test for existence
+ \edef\currentbibtextag{##1}%
+ \bibtexinsertrefsep
+ #1{##1}}%
+ \bibtexresetrefsep
+ \bibtexcitationparameter\v!left
+ \processcommalist[#4]\dodoprocessbibtexref\relax
+ \bibtexcitationparameter\v!right}
+
+\def\dodobibtexdataref#1%
+ {\dotypesetabibtexpublication{#1}}
+
+\def\dodobibtextyperef#1%
+ {\edef\bibtexrefcontent{\xmlfilter{bibtex:\currentbibtexsession}{/bibtex/entry[@tag='#1']/attribute('category')}}%
+ \bibtexrefcontent}
+
+\def\dodobibtexkeyref#1%
+ {\edef\bibtexrefcontent{\xmlfilter{bibtex:\currentbibtexsession}{/bibtex/entry[@tag='key']/context()}}%
+ \dobibtexgotolink{#1}{\bibtexrefcontent}}
+
+\def\dodobibtexserialref#1%
+ {\edef\bibtexrefcontent{\xmlfilter{bibtex:\currentbibtexsession}{/bibtex/entry[@tag='#1']/match()}}%
+ \dobibtexgotolink{#1}{\bibtexrefcontent}}
+
+\def\dodobibtexurlref#1%
+ {\edef\bibtexrefcontent{\xmlfilter{bibtex:\currentbibtexsession}{/bibtex/entry[@tag='#1']/field[@name='url']/context()}}%
+ \dobibtexurllink{#1}{\bibtexrefcontent}}
+
+\def\dodobibtexdoiref#1%
+ {\edef\bibtexrefcontent{\xmlfilter{bibtex:\currentbibtexsession}{/bibtex/entry[@tag='#1']/field[@name='doi']/context()}}%
+ \dobibtexurllink{#1}{http://dx.doi.org/\bibtexrefcontent}}
+
+\def\dodobibtexpageref#1%
+ {\dobibtexatlink{#1}{}} % second argument can become 'page'
+
+\def\dodobibtexnoneref#1%
+ {}
+
+\def\dodobibtexshortref#1%
+ {\edef\bibtexrefcontent{\xmlfilter{bibtex:\currentbibtexsession}{/bibtex/entry[@tag='#1']/bibtexshort()}}%
+ \dobibtexgotolink{#1}{\bibtexrefcontent}}
+
+\def\dodobibtexyearref#1%
+ {\edef\bibtexrefcontent{\xmlfilter{bibtex:\currentbibtexsession}{/bibtex/entry[@tag='#1']/field[@name='year']/context()}}%
+ \bibtexrefcontent}
+
+% \def\bibmaybeinteractive#1#2%
+% {\doifelsevalue{@@pv\@@currentalternative\c!compress}
+% {\ifbibinteractionelse{\gotobiblink{#2}[#1]}{#2}}
+% {#2}}
+
+% \def\bibauthornumref[#1]%
+% {\getcommalistsize[#1]%
+% \global\bibitemcounter\commalistsize
+% \bibresetrefsep
+% \processcommalist[#1]\dobibauthornumref }
+%
+% \def\dobibauthornumref#1%
+% {\bibinsertrefsep
+% \doifbibreferencefoundelse{#1}
+% {\begingroup
+% \bibgetvara{#1}%
+% \bibalternative\c!inbetween
+% \setuppublications[\c!refcommand=num]%
+% \cite[#1]%
+% \endgroup}
+% {\unknownreference{#1}}}
+
+% compress years
+% andtext namesep
+% otherstext authoretallimit
+
+% we will use context.* instead at the lua end because it saves us passing settings
+
+% \def\thebibtexpubsep {\bibtexpublicationsparameter\c!pubsep}
+% \def\thebibtexlastpubsep {\bibtexpublicationsparameter\c!lastpubsep}
+% \def\thebibtexfinalpubseparator{\bibtexpublicationsparameter\c!lastpubsep}
+
+\def\dodobibtexauthorref #1{\ctxlua{bibtex.authorref ("bibtex:\currentbibtexsession","#1","normal","author")}}
+\def\dodobibtexauthoryearref #1{\ctxlua{bibtex.authoryearref ("bibtex:\currentbibtexsession","#1","normal","author")}}
+\def\dodobibtexauthoryearsref#1{\ctxlua{bibtex.authoryearsref("bibtex:\currentbibtexsession","#1","normal","author")}}
+
+\unexpanded\def\bibtexsingularplural#1#2{\ctxlua{bibtex.singular_or_plural(\!!bs#1\!!es,\!!bs#2\!!es)}}
+
\protect \endinput
+
diff --git a/Master/texmf-dist/tex/context/base/bibl-tra.lua b/Master/texmf-dist/tex/context/base/bibl-tra.lua
new file mode 100644
index 00000000000..44223102859
--- /dev/null
+++ b/Master/texmf-dist/tex/context/base/bibl-tra.lua
@@ -0,0 +1,194 @@
+if not modules then modules = { } end modules ['bibl-bib'] = {
+ 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"
+}
+
+bibtex = bibtex or { }
+bibtex.hacks = bibtex.hacks or { }
+
+local match, gmatch, format, concat, sort = string.match, string.gmatch, string.format, table.concat, table.sort
+local texsprint, ctxcatcodes = tex.sprint, tex.ctxcatcodes
+local variables, constants = interfaces.variables, interfaces.constants
+
+local trace_bibtex = false trackers.register("publications.bibtex", function(v) trace_bibtex = v end)
+
+local hacks = bibtex.hacks
+
+local list, done, alldone, used, registered, ordered = { }, { }, { }, { }, { }, { }
+local mode = 0
+
+local template = string.striplong([[
+ \citation{*}
+ \bibstyle{cont-%s}
+ \bibdata{%s}
+]])
+
+function hacks.process(settings)
+ local style = settings.style or ""
+ local database = settings.database or ""
+ local jobname = tex.jobname
+ if database ~= "" then
+ interfaces.showmessage("publications",3)
+ io.savedata(file.addsuffix(jobname,"aux"),format(template,style,database))
+ if trace_bibtex then
+ logs.report("publications","processing bibtex file '%s'",jobname)
+ end
+ os.execute(format("bibtex %s",jobname))
+ -- purge 'm
+ end
+end
+
+function hacks.register(str)
+ if trace_bibtex then
+ logs.report("publications","registering bibtex entry '%s'",str)
+ end
+ registered[#registered+1] = str
+ ordered[str] = #registered
+end
+
+function hacks.reset(m)
+ mode, list, done = m, { }, { }
+end
+
+function hacks.add(str,listindex)
+ if not str or mode == 0 then
+ -- skip
+ elseif mode == 1 then
+ -- all locals but no duplicates
+ local sc = structure.sections.currentid()
+ if done[str] ~= sc then
+ done[str], alldone[str] = sc, true
+ list[#list+1] = { str, listindex }
+ end
+ elseif mode == 2 then
+ -- all locals but no preceding
+ local sc = structure.sections.currentid()
+ if not alldone[str] and done[str] ~= sc then
+ done[str], alldone[str] = sc, true
+ list[#list+1] = { str, listindex }
+ end
+ end
+end
+
+local function compare(a,b)
+ local aa, bb = a[1], b[1]
+ if aa and bb then
+ return ordered[aa] < ordered[bb]
+ else
+ return true
+ end
+end
+
+function hacks.flush(sortvariant)
+ if sortvariant == "" or sortvariant == variables.cite or sortvariant == "default" then
+ -- order is cite order i.e. same as list
+ else
+ sort(list,compare)
+ end
+ for i=1,#list do
+ context.doprocessbibtexentry(list[i][1])
+ end
+end
+
+function hacks.registerplaced(str)
+ used[str] = true
+end
+
+function hacks.doifalreadyplaced(str)
+ commands.testcase(used[str])
+end
+
+-- we ask for <n>:tag but when we can't find it we go back
+-- to look for previous definitions, and when not found again
+-- we look forward
+
+local function compare(a,b)
+ return a[3] < b[3]
+end
+
+function hacks.resolve(prefix,block,reference) -- maybe already feed it split
+ local subset = jobreferences.collected[prefix or ""] or jobreferences.collected[""]
+ if subset then
+ local result, done = { }, { }
+ block = tonumber(block)
+ for rest in gmatch(reference,"([^,%s]+)") do
+ local blk, tag, found = block, nil, nil
+ if block then
+ tag = blk .. ":" .. rest
+ found = subset[tag]
+ if not found then
+ for i=block-1,1,-1 do
+ tag = i .. ":" .. rest
+ found = subset[tag]
+ if found then
+ blk = i
+ break
+ end
+ end
+ end
+ end
+ if not found then
+ blk = "*"
+ tag = blk .. ":" .. rest
+ found = subset[tag]
+ end
+ if found then
+ local current = found.entries and found.entries.text
+ if current and not done[current] then
+ result[#result+1] = { blk, rest, current }
+ done[current] = true
+ end
+ end
+ end
+ -- todo: ranges so the interface will change
+ sort(result,compare)
+ local first, last, firsti, lasti, firstr, lastr
+ local collected = { }
+ for i=1,#result do
+ local r = result[i]
+ local current = r[3]
+ if not first then
+ first, last, firsti, lasti, firstr, lastr = current, current, i, i, r, r
+ elseif current == last + 1 then
+ last, lasti, lastr = current, i, r
+ else
+ if last > first + 1 then
+ collected[#collected+1] = { firstr[1], firstr[2], lastr[1], lastr[2] }
+ else
+ collected[#collected+1] = { firstr[1], firstr[2] }
+ if last > first then
+ collected[#collected+1] = { lastr[1], lastr[2] }
+ end
+ end
+ first, last, firsti, lasti, firstr, lastr = current, current, i, i, r, r
+ end
+ end
+ if first then
+ if last > first + 1 then
+ collected[#collected+1] = { firstr[1], firstr[2], lastr[1], lastr[2] }
+ else
+ collected[#collected+1] = { firstr[1], firstr[2] }
+ if last > first then
+ collected[#collected+1] = { lastr[1], lastr[2] }
+ end
+ end
+ end
+ if #collected > 0 then
+ for i=1,#collected do
+ local c = collected[i]
+ if c[3] then
+ context.dowithbibtexnumrefrange(#collected,i,prefix,c[1],c[2],c[3],c[4])
+ else
+ context.dowithbibtexnumref(#collected,i,prefix,c[1],c[2])
+ end
+ end
+ else
+ context.nobibtexnumref("error 1")
+ end
+ else
+ context.nobibtexnumref("error 2")
+ end
+end
diff --git a/Master/texmf-dist/tex/context/bib/t-bib.tex b/Master/texmf-dist/tex/context/base/bibl-tra.mkii
index 876bad8e2ab..087781db9b1 100644
--- a/Master/texmf-dist/tex/context/bib/t-bib.tex
+++ b/Master/texmf-dist/tex/context/base/bibl-tra.mkii
@@ -1,5 +1,5 @@
%D \module
-%D [ file=t-bib,
+%D [ file=bibl-tra,
%D version=2009.08.13,
%D title=\CONTEXT\ Publication Module,
%D subtitle=Publications,
@@ -9,6 +9,17 @@
%C
%C Donated to the public domain.
+%D This used to be module \type {t-bib} but due to the number of differences
+%D in handling structure between \MKII\ and \MKIV\ we now have \BIBTEX\ support
+%D in the kernel. The only patches concerns some namespace issues. Also,
+%D constants and variables are now predefined. When the \MKIV\ code is well
+%D tested I might backport a couple of adaptions to this \MKII\ variant.
+
+\writestatus{loading}{ConTeXt Bibliography Support / BibTeX}
+
+\definefilesynonym[bib][obsolete]
+
+% here starts t-bib.tex
%D The original was developed independantly by Taco Hoekwater while still working for Kluwer
%D Academic publishers (it still used the dutch interface then). Development continued after
@@ -138,6 +149,12 @@
%D \item Patch of unpublished in bibl-ams.tex from Xan (22/07/2009).
%D \item Modified \type{\bibdogetupsometextprefix} so it works for undefined
%D language labels, from Hans (13/08/2009).
+%D \item Removed some \MKIV\ hacks as well as some things that are in the
+%D core like variables, constants and messages (HH:22/08/2009).
+%D \item Added \type{bib} in front of \type {insert} macros and initialize
+%D then later on (HH:22/08/2009).
+%D \item Removed test for type {\currentlocationreference} plus associated
+%D code (HH:22/08/2009).
%D \stopitemize
%D
%D \subject{WISHLIST}
@@ -151,188 +168,53 @@
\unprotect
-%D start with a temp hack the file will still work with pre-Oct 2008
-%D versions of ConTeXt:
-
-
-\def\startinterface #1
- {\doifnot{#1}{all}{\doifnotinset\currentinterface{#1}{\gobbleuntil\stopinterface}}}
-
-\let\checksetvalue\gobbletwoarguments
-
-
-%\defineinterfacevariable {title} {title}
-%\defineinterfacevariable {short} {short}
-%\defineinterfacevariable {cite} {cite}
-%\defineinterfacevariable {bbl} {bbl}
-%\defineinterfacevariable {bib} {bib}
-%\defineinterfacevariable {author} {author}
-
-%D A few new shortcuts:
-
-\definesystemvariable {pv} % PublicationVariable
-\definesystemvariable {pb} % PuBlication
-
-\definemessageconstant {bib}
-\definefileconstant {bibextension} {bbl}
-
-%D Some user information messages.
-
-\startmessages all library: bib
- title: publications
- 1: file -- not found, unknown style ignored
- 2: file -- not found, waiting for bibtex
- 3: wrote a new auxiliary file \jobname.aux
- 4: loading database from --
- 5: warning: cite argument -- on \the\inputlineno
- 6: loading formatting style from --
-\stopmessages
-
-%D Some constants for the multi-lingual interface
-
-\startinterface all
- \setinterfaceconstant {database} {database}
- \setinterfaceconstant {artauthor} {artauthor}
- \setinterfaceconstant {editor} {editor}
- \setinterfaceconstant {authoretallimit} {authoretallimit}
- \setinterfaceconstant {artauthoretallimit} {artauthoretallimit}
- \setinterfaceconstant {editoretallimit} {editoretallimit}
- \setinterfaceconstant {authoretaldisplay} {authoretaldisplay}
- \setinterfaceconstant {artauthoretaldisplay} {artauthoretaldisplay}
- \setinterfaceconstant {editoretaldisplay} {editoretaldisplay}
- \setinterfaceconstant {authoretaltext} {authoretaltext}
- \setinterfaceconstant {artauthoretaltext} {artauthoretaltext}
- \setinterfaceconstant {editoretaltext} {editoretaltext}
- \setinterfaceconstant {otherstext} {otherstext}
- \setinterfaceconstant {andtext} {andtext}
- \setinterfaceconstant {totalnumber} {totalnumber}
- \setinterfaceconstant {firstnamesep} {firstnamesep}
- \setinterfaceconstant {vonsep} {vonsep}
- \setinterfaceconstant {juniorsep} {juniorsep}
- \setinterfaceconstant {surnamesep} {surnamesep}
- \setinterfaceconstant {lastnamesep} {lastnamesep}
- \setinterfaceconstant {finalnamesep} {finalnamesep}
- \setinterfaceconstant {namesep} {namesep}
- \setinterfaceconstant {pubsep} {pubsep}
- \setinterfaceconstant {lastpubsep} {lastpubsep}
- \setinterfaceconstant {refcommand} {refcommand}
- \setinterfaceconstant {samplesize} {samplesize}
-\stopinterface
-
-\startinterface dutch
- \setinterfacevariable {title} {titel}
- \setinterfacevariable {short} {kort}
- \setinterfacevariable {cite} {cite}
- \setinterfacevariable {bbl} {bbl}
- \setinterfacevariable {bib} {bib}
- \setinterfacevariable {author} {auteur}
-\stopinterface
-
-\startinterface english
- \setinterfacevariable {title} {title}
- \setinterfacevariable {short} {short}
- \setinterfacevariable {cite} {cite}
- \setinterfacevariable {bbl} {bbl}
- \setinterfacevariable {bib} {bib}
- \setinterfacevariable {author} {author}
-\stopinterface
-
-\startinterface german
- \setinterfacevariable {title} {titel}
- \setinterfacevariable {short} {kurz}
- \setinterfacevariable {cite} {cite}
- \setinterfacevariable {bbl} {bbl}
- \setinterfacevariable {bib} {bib}
- \setinterfacevariable {author} {autor}
-\stopinterface
-
-\startinterface czech
- \setinterfacevariable {title} {titul}
- \setinterfacevariable {short} {short}
- \setinterfacevariable {cite} {cite}
- \setinterfacevariable {bbl} {bbl}
- \setinterfacevariable {bib} {bib}
- \setinterfacevariable {author} {autor}
-\stopinterface
-
-\startinterface italian
- \setinterfacevariable {title} {titolo}
- \setinterfacevariable {short} {short}
- \setinterfacevariable {cite} {cite}
- \setinterfacevariable {bbl} {bbl}
- \setinterfacevariable {bib} {bib}
- \setinterfacevariable {author} {autore}
-\stopinterface
-
-\startinterface romanian
- \setinterfacevariable {title} {titlu}
- \setinterfacevariable {short} {short}
- \setinterfacevariable {cite} {cite}
- \setinterfacevariable {bbl} {bbl}
- \setinterfacevariable {bib} {bib}
- \setinterfacevariable {author} {autor}
-\stopinterface
-
-\startinterface french
- \setinterfacevariable {title} {titre}
- \setinterfacevariable {short} {short}
- \setinterfacevariable {cite} {cite}
- \setinterfacevariable {bbl} {bbl}
- \setinterfacevariable {bib} {bib}
- \setinterfacevariable {author} {auteur}
-\stopinterface
+%D Variables, constants and messages are removed as they are now in the
+%D multilingual interface modules.
\def\biblistname{pubs} % for compatibility
%D how to load the references. There is some new stuff here
%D to support Idris' (incorrect :-)) use of projects
-\let\preloadbiblist\relax
-
-\ifx\currentcomponent\v!text
- % single file
- \edef\temp{\the\everystarttext}%
- \ifx\temp\empty
- % post-starttext
- \def\preloadbiblist{\dousepublications\jobname }%
- \else
- % pre-starttext
- \appendtoks \dousepublications\jobname \to \everystarttext
- \fi
- %
-\else \ifx\currentcomponent\v!project
- % a project file, have to set up the partial products!
- \def\startproduct #1 %
- {\doateverystarttext
- \dousepublications{#1}%
- \donextlevel\v!product\currentproduct
- \doexecutefileonce\doexecutefileonce
- \donotexecutefile\doexecutefile#1\\}%
- %
-\else \ifx\currentcomponent\v!product
- % a product file
- \def\preloadbiblist{\dousepublications\jobname }%
- %
-\else
- % a component? not sure what to do
- \def\preloadbiblist{\dousepublications\jobname }%
- %
-\fi \fi \fi
+% \let\preloadbiblist\relax
+%
+% \ifx\currentcomponent\v!text
+% % single file
+% \edef\temp{\the\everystarttext}%
+% \ifx\temp\empty
+% % post-starttext
+% \def\preloadbiblist{\dousepublications\jobname }%
+% \else
+% % pre-starttext
+% \appendtoks \dousepublications\jobname \to \everystarttext
+% \fi
+% %
+% \else \ifx\currentcomponent\v!project
+% % a project file, have to set up the partial products!
+% \def\startproduct #1 %
+% {\doateverystarttext
+% \dousepublications{#1}%
+% \donextlevel\v!product\currentproduct
+% \doexecutefileonce\doexecutefileonce
+% \donotexecutefile\doexecutefile#1\\}%
+% %
+% \else \ifx\currentcomponent\v!product
+% % a product file
+% \def\preloadbiblist{\dousepublications\jobname }%
+% %
+% \else
+% % a component? not sure what to do
+% \def\preloadbiblist{\dousepublications\jobname }%
+% %
+% \fi \fi \fi
+
+\def\preloadbiblist
+ {\globallet\preloadbiblist\relax
+ \dousepublications\jobname}
\definelist[pubs]
\setuplist[pubs][\c!width=]
-
-%D The text string for the publication list header
-
-\setupheadtext[en][pubs=References]
-\setupheadtext[nl][pubs=Literatuur]
-\setupheadtext[de][pubs=Literatur]
-\setupheadtext[it][pubs=Bibliografia]
-\setupheadtext[sl][pubs=Literatura]
-\setupheadtext[fr][pubs=Bibliographie]
-\setupheadtext[ca][pubs=Referències]
-
%D \macros{bibdoif,bibdoifnot,bibdoifelse}
%D
%D Here are a few small helpers that are used a lot
@@ -363,7 +245,6 @@
\expandafter\firstofoneargument
\fi}
-
%D Bibtex settings separated out
%D No point in writing the aux file if there is no database...
@@ -372,7 +253,7 @@
\def\dosetupbibtex[#1]%
{\let\@@pbdatabase\empty
- \getparameters[\??pb][sort=\s!default,#1]%
+ \getparameters[\??pb][\c!sort=\s!default,#1]%
\expanded{\processaction[\@@pbsort]}
[ \v!no=>\def\bibstyle{cont-no},
\v!author=>\def\bibstyle{cont-au},
@@ -405,16 +286,14 @@
%D \stopitemize
\def\writeauxfile
- {\doifmode{*first}
+ {\doifmode{*\v!first}
{\openout \scratchwrite \jobname.aux
\write \scratchwrite {\string\citation{*}}%
\write \scratchwrite {\string\bibstyle{\bibstyle}}%
\write \scratchwrite {\string\bibdata{\@@pbdatabase}}%
\closeout\scratchwrite
- \showmessage\m!bib{3}{}%
- \doifmodeelse{*mkiv}
- {\ctxlua{os.execute('\@@pbbibtex\space\jobname')}}
- {\expanded{\installprogram{\@@pbbibtex\space\jobname}}}}}
+ \showmessage\m!publications{3}{}%
+ \expanded{\installprogram{\@@pbbibtex\space\jobname}}}}
%D \macros{ifsortbycite,iftypesetall,ifautohang,ifbibcitecompress}
%D
@@ -443,7 +322,6 @@
\def\bibleftnumber#1%
{#1\hfill~}
-
\def\dosetuppublications[#1]%
{\getparameters
[\??pb]
@@ -451,8 +329,8 @@
\doifsomething\@@pbalternative
{\readsysfile
{bibl-\@@pbalternative.tex}
- {\showmessage\m!bib{6}{bibl-\@@pbalternative}\let\@@pbalternative\empty}
- {\showmessage\m!bib{1}{bibl-\@@pbalternative}\let\@@pbalternative\empty}}%
+ {\showmessage\m!publications{6}{bibl-\@@pbalternative}\let\@@pbalternative\empty}
+ {\showmessage\m!publications{1}{bibl-\@@pbalternative}\let\@@pbalternative\empty}}%
\getparameters
[\??pb]
[#1]%
@@ -500,8 +378,8 @@
{\doonlyonce
{#1.\f!bibextension}
{\readfile{#1.\f!bibextension}
- {\showmessage\m!bib{4}{#1.\f!bibextension}}
- {\showmessage\m!bib{2}{#1.\f!bibextension}}}}
+ {\showmessage\m!publications{4}{#1.\f!bibextension}}
+ {\showmessage\m!publications{2}{#1.\f!bibextension}}}}
%D \macros{setuppublicationlist}
%D
@@ -555,16 +433,27 @@
%D \type{\title} becomes \type{\bib@title} when used within
%D a publication.
+\newtoks\initializebibdefinitions % we need to prevent clashes (HH)
+
+% \def\simplebibdef#1% hh: funny expansion ?
+% {\@EA\long\@EA\def\csname bib@#1\endcsname##1%
+% {\setvalue{\??pb @#1}{##1}%
+% \ignorespaces}%
+% \@EA\def\csname insert#1\endcsname##1##2##3%
+% {\@EA\bibdoifelse
+% \@EA{\csname @@pb@#1\endcsname}%
+% {##1\csname @@pb@#1\endcsname##2}%
+% {##3}%
+% }}
+
\def\simplebibdef#1% hh: funny expansion ?
{\@EA\long\@EA\def\csname bib@#1\endcsname##1%
- {\setvalue{\??pb @#1}{##1}%
- \ignorespaces}%
- \@EA\def\csname insert#1\endcsname##1##2##3%
- {\@EA\bibdoifelse
- \@EA{\csname @@pb@#1\endcsname}%
- {##1\csname @@pb@#1\endcsname##2}%
- {##3}%
- }}
+ {\setvalue{\??pb @#1}{##1}\ignorespaces}%
+ \expandafter \appendtoks
+ \expandafter\let\csname insert#1\expandafter\endcsname\csname bibinsert#1\endcsname
+ \to \initializebibdefinitions
+ \@EA\unexpanded\@EA\def\csname bibinsert#1\endcsname##1##2##3%
+ {\@EA\bibdoifelse\@EA{\csname\??pb @#1\endcsname}{##1\csname\??pb @#1\endcsname##2}{##3}}}
\def\bibcommandlist
{abstract, annotate, arttitle, assignee, bibnumber, bibtype, biburl, chapter, city,
@@ -573,28 +462,29 @@
note, notes, organization, pages, pubname, pubyear, revision, series, size, thekey,
title, volume, yearfiled}
-
\processcommacommand[\bibcommandlist]\simplebibdef
-\def\insertdoi#1#2#3%
+\def\bibinsertdoi#1#2#3%
{{\bibdoifelse{\@@pb@doi}%
{\edef\ascii{\@EA\detokenize\@EA{\@@pb@doi}}%
#1\expanded{\gotoDOI{\@@pb@thekey}{\ascii}}#2}{#3}}}
-\def\insertbiburl#1#2#3%
+\def\bibinsertbiburl#1#2#3%
{{\bibdoifelse{\@@pb@biburl}%
{\edef\ascii{\@EA\detokenize\@EA{\@@pb@biburl}}%
#1\expanded{\gotoURL{\@@pb@thekey}{\ascii}}#2}{#3}}}
-\def\insertmonth#1#2#3%
+\def\bibinsertmonth#1#2#3%
{\bibdoifelse{\@@pb@month}%
{#1\doifnumberelse{\@@pb@month}%
{\doifconversiondefinedelse\@@pbmonthconversion
{\convertnumber\@@pbmonthconversion{\@@pb@month}}{\@@pb@month}}%
{\@@pb@month}#2}{#3}}
-\let\inserturl \insertbiburl % for backward compat.
-\let\inserttype\insertbibtype % for backward compat.
+\appendtoks
+ \let\inserturl \bibinsertbiburl % for backward compat.
+ \let\inserttype\bibinsertbibtype % for backward compat.
+\to\initializebibdefinitions
\def\newbibfield[#1]%
{\simplebibdef{#1}%
@@ -611,11 +501,13 @@
\def\bib@crossref#1%
{\setvalue{\??pb @crossref}{#1}\ignorespaces}
-\def\insertcrossref#1#2#3%
+\def\bibinsertcrossref#1#2#3%
{\bibdoifelse{\@@pb@crossref}
{#1\@EA\cite\@EA[\@@pb@crossref]#2}
{#3}}
+\appendtoks\let\insertcrossref\bibinsertcrossref\to\initializebibdefinitions
+
%D \macros{complexbibdef,specialbibinsert}
%D
%D The commands \type{\artauthor}, \type{\author} and
@@ -653,11 +545,19 @@
\setevalue{\??pb @\currentype\csname \currentype @num\endcsname}%
{{\secondarg}{#2}{#3}{#1}{\firstarg}}\ignorespaces}%
+% \def\complexbibdef#1%
+% {\@EA\newcounter\csname #1@num\endcsname
+% \@EA\def\csname bib@#1\endcsname{\docomplexbibdef{#1}}%
+% \@EA\def\csname insert#1s\endcsname##1##2##3%
+% {\specialbibinsert{#1}{\csname #1@num\endcsname}{##1}{\unskip ##2}{##3}}}
+
\def\complexbibdef#1%
{\@EA\newcounter\csname #1@num\endcsname
\@EA\def\csname bib@#1\endcsname{\docomplexbibdef{#1}}%
- \@EA\def\csname insert#1s\endcsname##1##2##3%
- {\specialbibinsert{#1}{\csname #1@num\endcsname}{##1}{\unskip ##2}{##3}}}
+ \expandafter \appendtoks
+ \expandafter\let\csname insert#1s\expandafter\endcsname\csname bibinsert#1s\endcsname
+ \to \initializebibdefinitions
+ \@EA\def\csname bibinsert#1s\endcsname##1##2##3{\specialbibinsert{#1}{\csname #1@num\endcsname}{##1}{\unskip ##2}{##3}}}
\processcommalist[author,artauthor,editor]\complexbibdef
@@ -668,7 +568,6 @@
%D variable `auteur'. The old version is overruled `auteur' is
%D overruled by the systemconstant definition at the top of this file!
-
\newcount\etallimitcounter
\newcount\etaldisplaycounter
\newcount\todocounter
@@ -735,7 +634,6 @@
\fi}%
\processcommacommand[#3]\processauthoritem }
-
%D \macros{invertedauthor,normalauthor,invertedshortauthor,normalshortauthor}
%D
%D Just some commands that can be used in \type{\setuppublicationparameters}
@@ -865,8 +763,6 @@
\def\makepbkvalue#1{\def\@@pbk{#1}}
-%D
-
\newif\ifinpublist
% from Hans
@@ -905,49 +801,6 @@
\fi
\egroup}
-
-\unless\ifcsname currentlocationrefence\endcsname
-
-\let\currentlocationreference\empty
-
-\def\dogetreferenceelements#1#2#3#4#5%
- {\chardef\currentreferencetype=\ifx#1\relax0\else#1\fi\relax
- \ifnum\currentreferencetype<2
- \edef\currentpagereference{#2}%
- \let \currentdatareference\empty
- \edef\currentlocationreference{#2}%
- \ifx\currentpagereference \empty
- \let\currentfolioreference\folio
- \else
- \def \currentpagereference {\referencepagenumber[#2]}%
- \edef\currentfolioreference{\dosplitofffoliopart[#2]}%
- \fi
- \edef\currentrealreference{#3}%
- \settextreferences#4\end
- \ifnum0#5<\crossreferencenumber
- \forwardreferencetrue
- \else
- \forwardreferencefalse
- \fi
- \else
- \let \currentlocationreference\empty
- \edef\currentrealreference {#3}%
- \def \currentdatareference {#2}%
- \let \currentfolioreference\folio
- \settextreferences#4\end
- \forwardreferencefalse
- \fi
- \ifodd\currentreferencetype
- \realreferencepagefalse
- \else
- \docheckrealreferencepage\currentrealreference
- \ifrealreferencepage \else
- \docheckrealreferencepage\currentdatareference
- \fi
- \fi}
-
-\fi
-
\def\filllocalpublist%
{\doifdefinedelse{\alltoclevels}
{\let\dosetfilterlevel\patcheddosetfilterlevel
@@ -967,9 +820,9 @@
{\exitloop}}%
\let\localpublist\glocalpublist}
-%
\def\typesetpubslist
{\dobeginoflist
+% \the\initializebibdefinitions
\edef\askedlevel{\csname \??li pubs\c!criterium\endcsname}%
\ifx\askedlevel\v!all
\def\bibrefprefix{}%
@@ -997,9 +850,10 @@
\processcommacommand[\allrefs]\maybetypesetapublication
\fi
\fi
- \doendoflist }
+ \doendoflist}
\newif\ifinpublist
+
\def\maybetypesetapublication#1%
{\global\inpublistfalse
\def\test{#1}%
@@ -1058,15 +912,12 @@
\setuplist[pubs][\c!numbercommand=\@@pblimitednumber]%
\fi
\doifelsevalue
- {\??pv datamaybeyear}{\v!off}{\def\maybeyear##1{}}{\def\maybeyear##1{##1}}%
- \forgetall % bugfix 2005/03/18
-}
-
+ {\??pv data\c!maybeyear}{\v!off}{\def\maybeyear##1{}}{\def\maybeyear##1{##1}}%
+ \forgetall} % bugfix 2005/03/18
\def\outdented#1% move to supp-box ?
{\hskip -\hangindent #1}
-
%D The full list of publications
\def\completepublications
@@ -1131,26 +982,26 @@
\inpublisttrue
\typesetpubslist
\inpublistfalse
- \endgroup }
-
+ \endgroup}
%D \subsubject{What's in a publication}
-%D
\unexpanded\def\typesetapublication#1%
- {\doifsomething{#1}{\doglobal\increment\bibcounter
- \bgroup
- \makepbkvalue{#1}%
- \ifgridsnapping
- \snaptogrid\vbox{\dodolistelement{pubs}{}{\bibcounter}%
- {\expanded{\reference[\bibrefprefix#1]{\bibcounter}}%
- \strut \dotypesetapublication{#1}\strut }{}{}}%
- \else
- \dodolistelement{pubs}{}{\bibcounter}%
- {\expanded{\reference[\bibrefprefix#1]{\bibcounter}}%
+ {\doifsomething{#1}
+ {\doglobal\increment\bibcounter
+ \bgroup
+ \the\initializebibdefinitions
+ \makepbkvalue{#1}%
+ \ifgridsnapping
+ \snaptogrid\vbox{\dodolistelement{pubs}{}{\bibcounter}%
+ {\expanded{\reference[\bibrefprefix#1]{\bibcounter}}%
+ \strut \dotypesetapublication{#1}\strut }{}{}}%
+ \else
+ \dodolistelement{pubs}{}{\bibcounter}%
+ {\expanded{\reference[\bibrefprefix#1]{\bibcounter}}%
\strut \dotypesetapublication{#1}\strut }{}{}%
- \fi
- \egroup }}
+ \fi
+ \egroup}}
\def\dotypesetapublication#1%
{\bgroup
@@ -1164,12 +1015,11 @@
\ifcsname pbdt-#1\endcsname \bibalternative{\getvalue{pbdt-#1}}\fi
\egroup }
-
-%D An afterthought
+%D An afterthought:
\def\maybeyear#1{}
-%D An another
+%D An another:
\def\noopsort#1{}
@@ -1183,30 +1033,35 @@
\expanded{\language[\getvalue{\??pb @lang@#1}]}%
\fi \ignorespaces}
-
%D \subject{Citations}
-
+%D
%D \macros{cite,bibref}
%D
%D The indirection with \type{\dobibref} allows \LATEX\ style
%D \type{\cite} commands with a braced argument (these might appear
%D in included data from the \type{.bib} file).
+% \unexpanded\def\cite
+% {\doifnextcharelse{[}
+% {\dodocite}
+% {\dobibref}}
+% \def\dobibref#1%
+% {\docite[#1][]}
+% \def\dodocite[#1]%
+% {\startstrictinspectnextcharacter
+% \dodoubleempty\dododocite[#1]}
+% \def\dododocite[#1][#2]{%
+% \stopstrictinspectnextcharacter
+% \docite[#1][#2]}
+
\unexpanded\def\cite
- {\doifnextcharelse{[}
- {\dodocite}
- {\dobibref}}
+ {\strictdoifnextoptionalelse\dodocite\dobibref}
\def\dobibref#1%
{\docite[#1][]}
\def\dodocite[#1]%
- {\startstrictinspectnextcharacter
- \dodoubleempty\dododocite[#1]}
-
-\def\dododocite[#1][#2]{%
- \stopstrictinspectnextcharacter
- \docite[#1][#2]}
+ {\strictdoifnextoptionalelse{\docite[#1]}{\docite[#1][]}}
\def\docite[#1][#2]%
{\begingroup
@@ -1272,18 +1127,16 @@
\getparameters[\??pv\@@citedefault][#1]%
\fi }
-
%D Low-level stuff
\def\getcitedata#1[#2]#3[#4]#5to#6%
- {\bgroup
- \addthisref{#4}%
- \dofetchapublication{#4}%
- \doifdefinedelse{@@pb@bib#2}%
- {\xdef#6{\getvalue{@@pb@bib#2}}}%
- {\xdef#6{\getvalue{@@pb@#2}}}%
- \egroup }
-
+ {\bgroup
+ \addthisref{#4}%
+ \dofetchapublication{#4}%
+ \doifdefinedelse{@@pb@bib#2}%
+ {\xdef#6{\getvalue{@@pb@bib#2}}}%
+ {\xdef#6{\getvalue{@@pb@#2}}}%
+ \egroup}
\def\dofetchapublication#1%
{\makepbkvalue{#1}%
@@ -1308,7 +1161,6 @@
\expanded{\rawreference{}{cite-\jobname-\citationnumber}{#1}}%
\fi \fi }
-
%D \macros{numreferred,doifreferredelse,addthisref,publist}
%D
%D The interesting command here is \type{\addthisref}, which maintains
@@ -1336,10 +1188,12 @@
%D Some macros to fetch the information provided by
%D \type{\startpublication}.
-\def\doifbibreferencefoundelse#1#2#3%
- {\doifdefinedelse{pbdk-#1}
- {#2}
- {\showmessage\m!bib{5}{#1 is unknown}#3}}
+\def\doifbibreferencefoundelse#1%
+ {\preloadbiblist
+ \doifdefinedelse{pbdk-#1}
+ {\firstoftwoarguments}
+ {\showmessage\m!publications{5}{#1 is unknown}%
+ \secondoftwoarguments}}
%D \macros{ixbibauthoryear,thebibauthors,thebibyears}
%D
@@ -1421,7 +1275,6 @@
\handlemultiplebibauthors{\commalistsize}{#1}%
\fi }
-
\newcount\citescratchcounter
\def\handlemultiplebibauthors#1#2%
@@ -1439,7 +1292,6 @@
\fi }%
\processcommalist[#2]\bibprocessauthoritem }
-
\setupcite
[author,authoryear,authoryears]
[\c!namesep={, }]
@@ -1467,7 +1319,6 @@
{\robustdoifinsetelse{#1}#2\resetglobal
{\dodoglobal\xdef#2{\ifx#2\empty\else#2,\fi#1}}}
-
%D \macros{donormalbibauthoryear}
%D
%D Now we get to the macros that fill the two lists.
@@ -1562,7 +1413,6 @@
\edef\newcommalistelement{\myyear}%
\doglobal\replaceincommalist \thebibyears \wantednumber}
-
%D \macros{preparebibrefprefix}
%D
%D The reference list only writes bare references when the criterium
@@ -1786,7 +1636,6 @@
\doifbibreferencefoundelse{#1}{\expanded{\gotoDOI{#1}{\getvalue{pbdo-#1}}}}
{\unknownreference{#1}}}
-
\def\biburlref[#1]%
{\bibalternative\v!left
\firstreftrue\processcommalist[#1]\dobiburlref
@@ -1857,11 +1706,10 @@
\@EA\doglobal\@EA\addtocommalist\@EA{\reftypet}\therefs }%
{}\fi}%
\processcommacommand[\bibreflist]\setuplink
- \ifbibreffound \else \showmessage\m!bib{5}{#1 unknown}%
+ \ifbibreffound \else \showmessage\m!publications{5}{#1 unknown}%
\doglobal\addtocommalist{0}\therefs\fi
\egroup }
-
%D But at least the actual sorting code is simple (note that sorting
%D a list with exactly one entry fails to return anything, which
%D is why the \type{\ifx} is needed).
@@ -1920,10 +1768,11 @@
%D And some defaults are loaded from bibl-apa:
\setuppublications
- [\v!month\v!conversion=,\c!alternative=apa]
-
-\loadmarkfile{t-bib}
+ [\v!month\v!conversion=,
+ \c!alternative=apa]
-\preloadbiblist
+\appendtoks
+ \preloadbiblist
+\to \everystarttext
\protect \endinput
diff --git a/Master/texmf-dist/tex/context/base/bibl-tra.mkiv b/Master/texmf-dist/tex/context/base/bibl-tra.mkiv
new file mode 100644
index 00000000000..519af0c6f77
--- /dev/null
+++ b/Master/texmf-dist/tex/context/base/bibl-tra.mkiv
@@ -0,0 +1,1552 @@
+%D \module
+%D [ file=bibl-tra,
+%D version=2009.08.22,
+%D title=\CONTEXT\ Publication Module,
+%D subtitle=Publications,
+%D author=Taco Hoekwater,
+%D date=\currentdate,
+%D copyright=Public Domain]
+%C
+%C Donated to the public domain.
+
+%D This module has been adapted to \MKIV\ by Hans Hagen so if things go wrong,
+%D he is to blame. The changes concern references and lists but teh rendering
+%D itself is unchanged. Future versions might provide variants as we have plans
+%D for an upgrade.
+%D
+%D We use a still somewhat experimental extension to the list
+%D mechanism. Eventually the bibtex module will use the bibl loader
+%D and access the data by means of lpath expressions. In that case we
+%D don't need to process the bibliography but still need to track
+%D usage as done here.
+%D
+%D A bit ongoing: make more local macros prefixed with bib, i.e. the bib
+%D namespace is reserved.
+
+\writestatus{loading}{ConTeXt Bibliography Support / BibTeX}
+
+\definefilesynonym[bib][obsolete]
+
+\registerctxluafile{bibl-tra}{1.001}
+
+%D The original was developed independantly by Taco Hoekwater while still working for Kluwer
+%D Academic publishers (it still used the dutch interface then). Development continued after
+%D he left Kluwer, and in Januari 2005, the then already internationalized file was merged
+%D with the core distribution by Hans Hagen. The current version is once again by Taco.
+%D
+%D More documentation and additional resources can be found on the contextgarden:
+%D \hyphenatedurl{http://wiki.contextgarden.net//Bibliography}.
+
+%D \subject{DONE (dd/mm/yyyy)}
+%D
+%D \startitemize
+%D \item add author definition (and associated system variable) (26/05/2005)
+%D \item add finalnamesep support for Oxford comma (17/09/2005)
+%D \item add \type{\insert...} for: doi, eprint, howpublished (19/09/2005)
+%D \item allow a defaulted \type{\setupcite} (19/11/2005)
+%D \item renamed citation type 'number' to 'serial' (19/11/2005)
+%D \item better definition of \type{\inverted...author} (19/11/2005)
+%D \item don't reset [numbercommand] in \type {\setuppublication} by default (20/11/2005)
+%D \item don't disable other \type {\setuppublication} keys if alternative is present (20/11/2005)
+%D \item drop \type{\sanitizeaccents} (20/11/2005)
+%D \item added \type{\nocite} and \type{\cite[none]} (21/11/2005)
+%D \item added headtext for it (23/11/2005)
+%D \item make \type{\cite[url]} and \type{\cite[doi]} interactive (23/11/2005)
+%D \item make right-aligned labels in the list work even when autohang=no
+%D \item use 'et al.' instead of 'et.al.'. Pointed out by Peter M\"unster (30/12/2005)
+%D \item added headtext for cz (31/12/2005)
+%D \item Keep whitespace after \type{\cite} with single argument (31/12/2005)
+%D \item Fix broken \type{\cite{}} support (31/12/2005)
+%D \item Use \type{\readfile} inside \type{\usepublications} instead of \type{\readsysfile} (12/01/2006)
+%D \item Use \type{\currentbibyear} and \type{\currentbibauthor} instead of \type{\YR} and \type{\AU} (05/02/2006)
+%D \item Fix compressed version of authoryear style (05/02/2006)
+%D \item Rename the clashing data fields \type{\url} and \type{\type} to \type{\biburl} and \type{\bibtype} (05/02/2006)
+%D \item Added two french bibl files from Renaud Aubin (06/02/2006)
+%D \item Five new bib class and eight extra bib fields, for IEEEtran (07/02/2006)
+%D \item French keyword translation, provided by Renaud (08/02/2006)
+%D \item fix underscores in undefined keys (22/02/2006)
+%D \item Destroy interactivity in labels of the publication list (13/03/2006)
+%D \item fix multi-cite list compression (11/4/2006)
+%D \item fix \type{\getcitedata} (11/4/2006)
+%D \item magic for chapter bibs (18-25/4/2006)
+%D \item language setting (25/4/2006)
+%D \item use \type{\hyphenatedurl} for \type{\inserturl} (25/4/2006)
+%D \item Add \type{\docitation} to \type{\nocite}(26/4/2006)
+%D \item patents can have numbers, added to bst files (26/4/2006)
+%D \item \type{\docitation} needs a \type{\iftrialtypesetting} (27/4/2006)
+%D \item \type{\filllocalpublist}'s loop is bound by definedness, not resolvedness (27/4/2006)
+%D \item \type{\setuppublications[monthconversion=]} added (15/5/2006)
+%D \item use \type{\undefinedreference} instead of bare question marks (15/5/2006)
+%D \item add grouping around \type{\placepublications} commands (16/5/2006)
+%D \item fix a bug in \type{\cite{<item>}} (17/5/2006)
+%D \item support \type{\cite[authornum]} (18/5/2006)
+%D \item make \type{\cite} unexpandable (20/6/2006)
+%D \item allow hyperlinks in author\&year combo's
+%D (cite list compression has to be off) (20/6/2006)
+%D \item fix duplicate labels for per-chapter style (20/6/2006)
+%D \item allow \type{\setupcite[interaction=(start|stop)]}
+%D \item fix the item number in the publication list with 'numbering=yes' (22/6/2006)
+%D \item make the default criterium for \type{\placepublications} be \type{previous} (23/6/2006)
+%D \item fix \type{\normalauthor} and \type{\normalshortauthor} spacing (29/6/2006)
+%D \item do not typeset empty arguments to \type{\typesetapublication} (29/6/2006)
+%D \item add \type{symbol=none} to \type{\setuplist} in unnumbered
+%D mode to prevent typesetting of bare numbers (29/6/2006)
+%D \item remove two incorrect spaces from bibl-num.tex (1/7/2006)
+%D \item reset font styles within \type{\cite}, so that font switches
+%D in \type{left} stay in effect (12/7/2006)
+%D \item guard added against loading bbl files multiple times (13/7/2006)
+%D \item fix \type{\cite[num]} with compression is on. (14/7/2006)
+%D \item test \type{\iflocation} before deciding to use the
+%D interactive version of cite (18/7/2006)
+%D \item support \type{\setupcite[authoretallimit=1]} (18/7/2006)
+%D \item support use of \type{\cite} within titles and captions by
+%D saveguarding the list item extraction and reference placement
+%D code (19/7/2006)
+%D \item support \type{\setuppublicationlist[title=\chapter]} (4/8/2006)
+%D \item use the expansion of \type{\headtext{pubs}} (4/8/2006)
+%D \item hook added for repeated authors in publication list
+%D \type{\setuppublicationlist[artauthorcommand=\mythreeargscommand]}
+%D (4/8/2006)
+%D \item make the bracketed arguments of \type{\artauthor}, \type{\author}
+%D and \type{\editor} (bbl commands) optional (4/8/2006)
+%D \item the constants \type{sorttype}, \type{compress} and
+%D \type{autohang} have moved to the core (8/8/2006)
+%D \item bibtex is now registered as a program to be run by texexec (8/8/2006)
+%D \item fix a bug in \type{\setupcite[authoretallimit=1]} (9/8/2006)
+%D \item fix a bug inside citations that prevented lastpubsep from ever being
+%D used due to a volatile \type{\commalistsize} (25/8/2006).
+%D \item added the possibility of \type{\placepublications[option=continue]}
+%D (6/9/2006)
+%D \item Mojca translated Master's Thesis to Masterarbeit (bibl-apa-de.tex)
+%D (12/9/2006)
+%D \item Added \type{\setuppublicationlist[maybeyear=off]} by request from
+%D Thomas Schmitz (15/9/2006)
+%D \item Removed some spurious spaces pointed out by willi egger (19/9/2006)
+%D \item Add configuration of bibtex executable name (4/11/2006)
+%D \item Fix numbering=short and numbering=bib (spotted by Matthias W\"achter) (4/11/2006)
+%D \item third attempt to get a correct release (5/11/2006)
+%D \item fix a few missing dots in bibl-num.tex (7/12/2006)
+%D \item Patch for DOI's by Tobias Burnus (17/4/2007)
+%D \item Patch for \type{\insertbiburl} and \type{\insertdoi} for Tobias Burnus (18/4/2007)
+%D \item Added a missing \type{\relax} in \type{\dospecialbibinsert},
+%D that made the space before the {\it et al.} text disappear. (18/4/2007)
+%D \item Attempt to fix percent signs in bbl files. As a side-effect,
+%D this prohibits comments in \tex{startpublication} blocks! (17/4/2008)
+%D \item Patch from Matthias W\"achter that allows arbitrary .bst
+%D files to be used with \tex{setupbibtex} (25/9/2008)
+%D \item Extended for the new multilingual setups for the Oct 2008 current of ConTeXt (23/10/2008)
+%D \item Multilingual setups needed another fix (27/10/2008)
+%D \item Two fixes for bibl-apa by Michael Green (27/10/2008)
+%D \item Catalan translation of 'References' (10/11/2008)
+%D \item 'chapter' -> 'chapitre' in bibl-apa-fr (27/11/2008)
+%D \item Run bibtex via os.execute in mkiv modee (01/12/2008)
+%D \item Small correction in bibl-apa's placement of volume
+%D information in articles (05/01/2009)
+%D \item Handle multi-author (more than two) cases in \type{\cite}
+%D (02/03/2009)
+%D \item Suppress a syntax error in \type{cont-xp} mode. The output is
+%D probably not right, though (02/03/2009)
+%D \item Added a \tex{loadmarkfile} at the end, and two new files
+%D from Hans. The \type{t-bib.mkiv} is needed to make the module
+%D work with the new structure code (17/04/2009)
+%D \item Added a patch to \type{t-bib.mkiv} from Hans to make the
+%D cross referencing between multiple citations an
+%D bibliographies work (27/04/2009)
+%D \item Remove a superfluous \type{\unprotect} in t-bib.mkiv (11/05/2009).
+%D \item Patch of incollection in bibl-ams.tex from Xan (08/06/2009).
+%D \item Patch of unpublished in bibl-ams.tex from Xan (22/07/2009).
+%D \item Modified \type{\bibdogetupsometextprefix} so it works for undefined
+%D language labels, from Hans (13/08/2009).
+%D \item Adapt referencing and list insertion to \MKIV. Update some code
+%D to the latest \CONTEXT. Change some names in order to avoid conflicts
+%D with existing core names (like \type {\insertpages}).
+%D \item All constants, variables, message etc.\ are now in the core.
+%D \item Added key: \type {method} (when \type {global}, previous shown entries are
+%D not shown again, when \type {local} they are repeated).
+%D \stopitemize
+%D
+%D \subject{WISHLIST}
+%D
+%D \startitemize
+%D \item link back from publication list to citation
+%D \item export \type {\citation{<cited item>}}
+%D \item support mlbibtex
+%D \item don't load the whole lot, but filter entries instead
+%D \item 9 vs 10, 19 vs 20 ... prevent extra runs when only subtle changes in wd of reference
+%D \stopitemize
+
+\unprotect
+
+\def\biblistname{pubs} % for compatibility
+
+\definelist
+ [pubs]
+
+\setuplist
+ [pubs]
+ [\c!state=\v!start,
+ \c!width=]
+
+\installstructurelistprocessor{pubs:userdata}%
+ {\ctxlua{bibtex.hacks.add(structure.lists.uservalue("\currentlist",\currentlistindex,"bibref"),\currentlistindex)}}
+
+\newcount\bibtexblock \bibtexblock\plusone
+
+%D \macros{bibdoif,bibdoifnot,bibdoifelse}
+%D
+%D Here are a few small helpers that are used a lot in all the typesetting commands
+%D (\type{\bibinsert...}) we will encounter later.
+
+\long\def\bibdoifelse#1%
+ {\@EA\def\@EA\!!stringa\@EA{#1}%
+ \ifx\!!stringa\empty
+ \expandafter\secondoftwoarguments
+ \else
+ \expandafter\firstoftwoarguments
+ \fi}
+
+\long\def\bibdoifnot#1%
+ {\@EA\def\@EA\!!stringa\@EA{#1}%
+ \ifx\!!stringa\empty
+ \expandafter\firstofoneargument
+ \else
+ \expandafter\gobbleoneargument
+ \fi}
+
+\long\def\bibdoif#1%
+ {\@EA\def\@EA\!!stringa\@EA{#1}%
+ \ifx\!!stringa\empty
+ \expandafter\gobbleoneargument
+ \else
+ \expandafter\firstofoneargument
+ \fi}
+
+%D Unfortunately, \BIBTEX\ is not the best configurable program
+%D around. The names of the commands it parses as well as the \type{.aux}
+%D extension to the file name are both hardwired.
+%D
+%D This means \CONTEXT\ has to write a \LATEX-style auxiliary file, yuk!
+%D The good news is that it can be rather short. We'll just ask
+%D \BIBTEX\ to output the entire database(s) into the \type{bbl} file.
+%D
+%D The \type{\bibstyle} command controls how the \type{bbl} file will
+%D be sorted. The possibilities are:
+%D
+%D \startitemize[packed]
+%D \item by author (+year, title): cont-au.bst
+%D \item by title (+author, year): cont-ti.bst
+%D \item by short key as in abbrev.bst: cont-ab.bst
+%D \item not sorted at all: cont-no.bst
+%D \stopitemize
+
+\newtoks\everysetupbibtex
+
+\unexpanded\def\setupbibtex
+ {\dosingleempty\dosetupbibtex}
+
+\def\dosetupbibtex[#1]%
+ {\let\@@pbdatabase\empty
+ \getparameters[\??pb][#1]%
+ \the\everysetupbibtex}
+
+\def\installbibtexsorter#1#2%
+ {\setvalue{\??pb:\c!sort:#1}{#2}}
+
+\installbibtexsorter\v!no {no}
+\installbibtexsorter\v!author {au}
+\installbibtexsorter\v!title {ti}
+\installbibtexsorter\v!short {ab}
+\installbibtexsorter\empty {no}
+\installbibtexsorter\s!default{no}
+
+\def\thebibtexsorter{\executeifdefined{\??pb:\c!sort:\@@pbsort}\@@pbsort}
+
+\appendtoks
+ \ifx\@@pbdatabase\empty\else
+ \doifmode{*\v!first}{\ctxlua{bibtex.hacks.process { style="\thebibtexsorter", database="\@@pbdatabase" }}}%
+ \fi
+\to \everysetupbibtex
+
+\setupbibtex
+ [\c!sorttype=\v!cite,
+ \c!sort=no]
+
+%D \macros{iftypesetall,ifbibcitecompress}
+%D
+%D The module needs some new \type{\if} statements.
+
+\newtoks\everysetuppublications
+
+\unexpanded\def\setuppublications
+ {\dosingleargument\dosetuppublications}
+
+\def\dosetuppublications[#1]%
+ {\getparameters[\??pb][\c!alternative=,#1]%
+ \doifsomething\@@pbalternative
+ {\readsysfile{bibl-\@@pbalternative.tex}
+ {\showmessage\m!publications{6}{bibl-\@@pbalternative}}
+ {\showmessage\m!publications{1}{bibl-\@@pbalternative}}%
+ \let\@@pbalternative\empty}%
+ \let\setuppublicationlayout\normalsetuppublicationlayout % overloaded in bibl-num ... vadjust needs to be done with option
+ \getparameters[\??pb][#1]% as bibl-* can have set things back
+ \the\everysetuppublications
+ \ignorespaces}
+
+%D We can omit already shown references (\v!global) or use fresh
+%D lists each time (\v!local).
+
+\chardef\bibtexoncemode\plusone % 0=disable, 1=local, 2=global
+
+\appendtoks
+ \doifelse\@@pbmethod\v!local
+ {\chardef\bibtexoncemode\plusone}%
+ {\chardef\bibtexoncemode\plustwo}%
+\to \everysetuppublications
+
+%D Cite lists are compressed, if possible. This is set later on.
+
+\newif\ifbibcitecompress\bibcitecompresstrue
+
+% \appendtoks
+% \processaction
+% [\@@pbnumbering]
+% [ \v!yes=>\let\@@pbinumbercommand\firstofoneargument,
+% \v!no=>\let\@@pbinumbercommand\gobbleoneargument,
+% \v!short=>\def\@@pbinumbercommand##1{\bibgetvars\currentpublicationkey},
+% \v!bib=>\def\@@pbinumbercommand##1{\bibgetvarn\currentpublicationkey},
+% \s!unknown=>\let\@@pbinumbercommand\firstofoneargument]%
+% \to \everysetuppublications
+
+\def\@@pbinumbercommand{\executeifdefined{\??pb:\c!numbercommand:\@@pbnumbering}\firstofoneargument}
+
+\letvalue{\??pb:\c!numbercommand:\v!yes }\firstofoneargument
+\letvalue{\??pb:\c!numbercommand:\v!no }\gobbleoneargument
+\setvalue{\??pb:\c!numbercommand:\v!short}#1{\bibgetvars\currentpublicationkey}
+\setvalue{\??pb:\c!numbercommand:\v!bib }#1{\bibgetvarn\currentpublicationkey}
+
+% to be tested
+%
+% \setvalue{\??pb:\c!numbercommand:\v!short}{\bibgetvars\currentpublicationkey\firstofoneargument}
+% \setvalue{\??pb:\c!numbercommand:\v!bib }{\bibgetvarn\currentpublicationkey\firstofoneargument}
+
+\appendtoks
+ \processaction
+ [\@@pbrefcommand]
+ [\s!default=>\edef\@@citedefault{\@@pbrefcommand},
+ \s!unknown=>\edef\@@citedefault{\@@pbrefcommand}]%
+\to \everysetuppublications
+
+\def\bibleftnumber#1{#1\hfill~}
+
+%D \macros{usepublications}
+%D
+%D After discussing it with Thomas Schmitz it became clear that using external
+%D references makes no sense as one needs to refer to it in special ways and
+%D because similar numbers can be confusing. So, for the moment this is not
+%D supported in \MKIV. (So no: see reference [3-5,9] in "some other document")
+
+\def\usepublications[#1]%
+ {\processcommalist[#1]\dousepublications}
+
+% \def\dousepublications#1%
+% {\doonlyonce{#1.\f!bibextension}
+% {\readfile{#1.\f!bibextension}
+% {\showmessage\m!publications{4}{#1.\f!bibextension}}
+% {\showmessage\m!publications{2}{#1.\f!bibextension}}}}
+
+\def\dousepublications#1%
+ {\doonlyonce{#1.\f!bibextension}{\dodousepublications{#1}}}
+
+\def\dodousepublications#1%
+ {\let\@@savedpar\par
+ \let\par\ignorespaces
+ \ifhmode\kern\zeropoint\fi
+ \readfile{#1.\f!bibextension}
+ {\showmessage\m!publications{4}{#1.\f!bibextension}}
+ {\showmessage\m!publications{2}{#1.\f!bibextension}}%
+ \ifhmode\removeunwantedspaces\fi
+ \let\par\@@savedpar}
+
+%D \macros{setuppublicationlist}
+%D
+%D This will be the first command in (\BIBTEX-generated) \type{bbl}
+%D files. `samplesize' is a sample value (in case of \BIBTEX-generated
+%D files, this will be the longest `short' key). `totalnumber'
+%D is the total number of entries that will follow in this
+%D file.
+%D
+%D Both values are only needed for the label calculation
+%D if `autohang' is `true', so by default the command is
+%D not even needed, and therefore I saw no need to give
+%D it it's own system variable and it just re-uses \type{pb}.
+
+\def\publicationlistparameter#1{\csname\??pv:l:#1\endcsname}
+
+\unexpanded\def\setuppublicationlist
+ {\dosingleempty\dosetuppublicationlist}
+
+\def\dosetuppublicationlist[#1]%
+ {\getparameters[\??pv:l:][#1]%
+ \setuplist[pubs][\c!samplesize={AA99},\c!alternative=a,\c!interaction=,\c!pagenumber=\v!no,#1,\c!command=]}
+
+\unexpanded\def\setuppublicationlayout[#1]#2%
+ {\setvalue{\??pv:l:#1}{#2}}
+
+\let\normalsetuppublicationlayout\setuppublicationlayout
+
+\setuppublicationlist[\c!title=,\c!command=\dospecialbibinsert,\c!maybeyear=\v!on]
+
+%D \macros{bibalternative}
+%D
+%D A nice little shorthand that will be used so we don't have to
+%D key in the weird \type{\@@pv} parameter names all the time.
+
+\def\bibalternative#1%
+ {\csname\??pv\@@currentalternative#1\endcsname}
+
+%D \macros{simplebibdef,bibcommandlist}
+%D
+%D \type{\simplebibdef} defines \type{bib@#1}, which in turn will
+%D use one argument that is stored in \type{@@pb@#1}.
+%D
+%D \type{\simplebibdef} also defines \type{bibinsert#1}, which can be
+%D used in the argument of \type{\setuppublicationlayout} to fetch
+%D one of the \type{@@pb@} data entries. \type{bibinsert#1} then has
+%D three arguments: \type{#1} are commands to be executed before the
+%D data, \type{#2} are commands to be executed after the data, and
+%D \type{#3} are commands to be executed if the data is not found.
+%D
+%D \type{\bibcommandlist} is the list of commands that is affected
+%D by this approach. Later on, it will be used to do a series
+%D of assignments from \type{#1} to \type{bib@#1}: e.g
+%D \type{\title} becomes \type{\bib@title} when used within
+%D a publication.
+
+\newtoks\initializebibdefinitions % we need to prevent clashes
+
+\def\simplebibdef#1% hh: funny expansion ?
+ {\@EA\long\@EA\def\csname bib@#1\endcsname##1%
+ {\setvalue{\??pb @#1}{##1}\ignorespaces}%
+ \expandafter \appendtoks
+ \expandafter\let\csname insert#1\expandafter\endcsname\csname bibinsert#1\endcsname
+ \to \initializebibdefinitions
+ \@EA\unexpanded\@EA\def\csname bibinsert#1\endcsname##1##2##3%
+ {\@EA\bibdoifelse\@EA{\csname\??pb @#1\endcsname}{##1\csname\??pb @#1\endcsname##2}{##3}}}
+
+\def\bibcommandlist
+ {abstract, annotate, arttitle, assignee, bibnumber, bibtype, biburl, chapter, city,
+ comment, country, day, dayfiled, doi, edition, eprint, howpublished, isbn, issn,
+ issue, journal, keyword, keywords, lastchecked, month, monthfiled, names, nationality,
+ note, notes, organization, pages, pubname, pubyear, revision, series, size, thekey,
+ title, volume, yearfiled}
+
+\processcommacommand[\bibcommandlist]\simplebibdef
+
+% \def\bibinsertdoi#1#2#3%
+% {\begingroup
+% \bibdoifelse{\@@pb@doi}%
+% {\edef\ascii{\detokenize\expandafter{\@@pb@doi}}% probably not ok, to less expansion
+% #1\expanded{\bibgotoDOI{\@@pb@thekey}{\ascii}}#2}{#3}%
+% \endgroup}
+%
+% \def\bibinsertbiburl#1#2#3%
+% {\begingroup
+% \bibdoifelse{\@@pb@biburl}%
+% {\edef\ascii{\detokenize\expandafter{\@@pb@biburl}}% probably not ok, to less expansion
+% #1\expanded{\bibgotoURL{\@@pb@thekey}{\ascii}}#2}{#3}%
+% \endgroup}
+
+\def\bibinsertdoi#1#2#3% let's see how this fails
+ {\bibdoifelse{\@@pb@doi}{#1\expanded{\bibgotoDOI{\@@pb@thekey}{\@@pb@doi}}#2}{#3}}
+
+\def\bibinsertbiburl#1#2#3% let's see how this fails
+ {\bibdoifelse{\@@pb@biburl}{#1\expanded{\bibgotoURL{\@@pb@thekey}{\@@pb@biburl}}#2}{#3}}
+
+\def\bibinsertmonth#1#2#3%
+ {\bibdoifelse\@@pb@month
+ {#1\doifnumberelse\@@pb@month
+ {\doifconversiondefinedelse\@@pbmonthconversion
+ {\convertnumber\@@pbmonthconversion\@@pb@month}{\@@pb@month}}%
+ {\@@pb@month}#2}%
+ {#3}}
+
+\appendtoks
+ \let\inserturl \bibinsertbiburl % for backward compat.
+ \let\inserttype\bibinsertbibtype % for backward compat.
+\to\initializebibdefinitions
+
+\def\newbibfield[#1]%
+ {\simplebibdef{#1}%
+ \edef\bibcommandlist{\bibcommandlist,#1}}
+
+%D \macros{complexbibdef,specialbibinsert}
+%D
+%D The commands \type{\artauthor}, \type{\author} and
+%D \type{\editor} are more complex than the other commands.
+%D Their argument lists have this form:
+%D
+%D \type{\author[junior]{firstnames}[inits]{von}{surname}}
+%D
+%D (bracketed stuff is optional)
+%D
+%D And not only that, but there also might be more than one of each of
+%D these commands. This is why a special command is needed to insert
+%D them, as well as one extra counter for each command.
+
+% todo: instead of \getvalue{bla@num} in specs we should do
+% \bibentrynum{bla} so that we can create a better namespace
+
+%D All of these \type{\@EA}'s and \type{\csnames} make this code
+%D look far more complex than it really is. For example, the argument
+%D \type{author} defines the macro \type{\bib@author} to do two
+%D things: increment the counter \type{\author@num} (let's say to 2)
+%D and next store it's arguments in the macro \type{\@@pb@author2}.
+%D And it defines \type{\bibinsertauthors} to expand into
+%D \starttyping
+%D \specialbibinsert{author}{\author@num}{<before>}{<after>}{<not>}
+%D \stoptyping
+
+% \def\docomplexbibdef#1%
+% {\def\currentype{#1}%
+% \dosingleempty\dodocomplexbibdef}
+
+% \def\dodocomplexbibdef[#1]#2%
+% {\def\firstarg{#1}\def\secondarg{#2}%
+% \dosingleempty\dododocomplexbibdef}
+
+% \def\dododocomplexbibdef[#1]#2#3%
+% {\@EA\increment\csname\currentype @num\endcsname
+% \setevalue{\??pb @\currentype\csname \currentype @num\endcsname}%
+% {{\secondarg}{#2}{#3}{#1}{\firstarg}}\ignorespaces}
+
+\def\docomplexbibdef#1%
+ {\dodoubleempty\dodocomplexbibdef[#1]}
+
+\def\dodocomplexbibdef[#1][#2]#3%
+ {\doquadrupleempty\dododocomplexbibdef[#1][#2][#3]}
+
+\def\dododocomplexbibdef[#1][#2][#3][#4]#5#6%
+ {\@EA\increment\csname#1@num\endcsname % todo: bib in name
+ \setevalue{\??pb @#1\csname#1@num\endcsname}{{#3}{#5}{#6}{#4}{#2}}\ignorespaces}
+
+\def\complexbibdef#1%
+ {\@EA\newcounter\csname #1@num\endcsname
+ \@EA\def\csname bib@#1\endcsname{\docomplexbibdef{#1}}%
+ \expandafter \appendtoks
+ \expandafter\let\csname insert#1s\expandafter\endcsname\csname bibinsert#1s\endcsname
+ \to \initializebibdefinitions
+ \@EA\def\csname bibinsert#1s\endcsname##1##2##3{\specialbibinsert{#1}{\csname #1@num\endcsname}{##1}{\unskip ##2}{##3}}}
+
+\processcommalist[author,artauthor,editor]\complexbibdef
+
+%D Another level of indirection is needed to control the
+%D typesetting of all of these arguments.
+
+\newcount\etallimitcounter
+\newcount\etaldisplaycounter
+\newcount\todocounter
+
+\def\specialbibinsert#1#2#3#4#5%
+ {\bgroup
+ \ifnum#2>\zerocount
+ \etallimitcounter =0\bibalternative{#1etallimit}\relax
+ \etaldisplaycounter=0\bibalternative{#1etaldisplay}\relax
+ \ifnum #2>\etallimitcounter
+ \todocounter\etaldisplaycounter
+ % just in case ...
+ \ifnum\todocounter>\etallimitcounter
+ \todocounter\etallimitcounter
+ \fi
+ \else
+ \todocounter#2\relax
+ \fi
+ \ifnum\todocounter>\zerocount
+ % find the current author list
+ \let\templist\empty
+ \dorecurse{#2}
+ {\scratchtoks\@EA\@EA\@EA{\csname\??pb @#1\recurselevel\endcsname}%
+ \edef\templist{\ifx\templist\empty\else\templist,\fi\the\scratchtoks}}%
+ #3\publicationlistparameter\c!command{#1}{\todocounter}{\templist}#4\relax
+ \else
+ #5%
+ \fi
+ \else
+ #5%
+ \fi
+ \egroup}
+
+%D This macro does the hard work of inserting a list of people in the
+%D output, with proper regard of all the inbetween strings that can
+%D arise depending on length of the list of people.
+
+%D \#1 = type
+%D \#2 = number of items to be typeset
+%D \#3 = commacommand containing authors
+
+% \def\dospecialbibinsert#1#2#3%
+% {\getcommacommandsize[#3]%
+% \scratchcounter\zerocount
+% \def\processauthoritem##1%
+% {\advance\scratchcounter\plusone
+% \ifnum\numexpr\scratchcounter-\plusone\relax<#2\relax
+% \publicationlistparameter{#1}##1%
+% \ifnum\scratchcounter=#2\relax
+% \ifnum\etallimitcounter<\commalistsize\relax
+% \bibalternative{#1etaltext}%
+% \fi
+% \else\ifnum\numexpr\scratchcounter+\plusone\relax=#2\relax
+% \ifnum\commalistsize>\plustwo
+% \bibalternative\c!finalnamesep
+% \else
+% \bibalternative\c!lastnamesep
+% \fi
+% \else
+% \bibalternative\c!namesep
+% \fi\fi
+% \fi}%
+% \processcommacommand[#3]\processauthoritem}
+
+\def\doprocessauthoritem#1#2#3%
+ {\advance\scratchcounter\plusone
+ \ifnum\numexpr\scratchcounter-\plusone\relax<#2\relax
+ \publicationlistparameter{#1}#3%
+ \ifnum\scratchcounter=#2\relax
+ \ifnum\etallimitcounter<\commalistsize\relax
+ \bibalternative{#1etaltext}%
+ \fi
+ \else\ifnum\numexpr\scratchcounter+\plusone\relax=#2\relax
+ \ifnum\commalistsize>\plustwo
+ \bibalternative\c!finalnamesep
+ \else
+ \bibalternative\c!lastnamesep
+ \fi
+ \else
+ \bibalternative\c!namesep
+ \fi\fi
+ \fi}
+
+\def\dospecialbibinsert#1#2#3%
+ {\getcommacommandsize[#3]%
+ \scratchcounter\zerocount
+ \processcommacommand[#3]{\doprocessauthoritem{#1}{#2}}}
+
+%D \macros{invertedauthor,normalauthor,invertedshortauthor,normalshortauthor}
+%D
+%D Just some commands that can be used in \type{\setuppublicationparameters}
+%D If you want to write an extension to the styles, you might
+%D as well define some of these commands yourself.
+%D
+%D The argument list has been reordered here, and the meanings
+%D are:
+%D
+%D \startlines
+%D \type{#1} firstnames
+%D \type{#2} von
+%D \type{#3} surname
+%D \type{#4} inits
+%D \type{#5} junior
+%D \stoplines
+
+\def\normalauthor#1#2#3#4#5%
+ {\bibdoif{#1}{#1\bibalternative\c!firstnamesep}%
+ \bibdoif{#2}{#2\bibalternative\c!vonsep}%
+ #3%
+ \bibdoif{#5}{\bibalternative\c!surnamesep#5\unskip}}
+
+\def\normalshortauthor#1#2#3#4#5%
+ {\bibdoif{#4}{#4\bibalternative\c!firstnamesep}%
+ \bibdoif{#2}{#2\bibalternative\c!vonsep}%
+ #3%
+ \bibdoif{#5}{\bibalternative\c!surnamesep#5\unskip}}
+
+\def\invertedauthor#1#2#3#4#5%
+ {\bibdoif{#2}{#2\bibalternative\c!vonsep}%
+ #3%
+ \bibdoif{#5}{\bibalternative\c!juniorsep#5}%
+ \bibdoif{#1}{\bibalternative\c!surnamesep#1\unskip}}
+
+\def\invertedshortauthor#1#2#3#4#5%
+ {\bibdoif{#2}{#2\bibalternative\c!vonsep}%
+ #3%
+ \bibdoif{#5}{\bibalternative\c!juniorsep#5}%
+ \bibdoif{#4}{\bibalternative\c!surnamesep#4\unskip}}
+
+%D \macros{clearbibitem,clearbibitemtwo,bibitemdefs}
+%D
+%D These are used in \type{\typesetapublication} to do
+%D initializations and cleanups.
+
+\def\clearbibitem#1{\setvalue{\??pb @#1}{}}%
+
+% \def\clearbibitemtwo#1%
+% {\letvalue{#1@num}\!!zerocount
+% \doloop
+% {\doifdefinedelse{\??pb @#1\recurselevel}
+% {\letvalue{\??pb @#1\recurselevel}\empty} % why not undefined?
+% {\exitloop}}}
+
+% \def\clearbibitemtwo#1%
+% {\letvalue{#1@num}\!!zerocount
+% \doloop
+% {\ifcsname\??pb @#1\recurselevel\endcsname
+% \expandafter\let\csname\??pb @#1\recurselevel\undefined
+% \else
+% \exitloop
+% \fi}}
+
+\def\clearbibitemtwo#1% is this reset really needed? after all we reset the counter and we are local
+ {%\dofastrecurse\plusone{\csname#1@num\endcsname}\plusone{\expandafter\let\csname\??pb @#1\recurselevel\undefined}%
+ \letvalue{#1@num}\!!zerocount}
+
+\def\bibitemdefs#1%
+ {\@EA\let\csname#1\expandafter\endcsname\csname bib@#1\endcsname}
+
+\def\presetbibvariables % make a fast resetter (toks)
+ {\processcommacommand[\bibcommandlist,crossref]\clearbibitem
+ \processcommalist [artauthor,author,editor]\clearbibitemtwo
+ \processcommacommand[\bibcommandlist]\bibitemdefs
+ \processcommalist [artauthor,author,editor,crossref]\bibitemdefs}
+
+%D \macros{startpublication}
+%D
+%D We are coming to the end of this module, to the macros that
+%D do typesetting and read the \type{bbl} file.
+
+\newcount\bibtexcounter
+
+%D Just a \type{\dosingleempty} is the most friendly
+%D of doing this: there need not even be an argument
+%D to \type{\startpublication}. Of course, then there
+%D is no key either, and it had better be an
+%D article (otherwise the layout will be all screwed up).
+%D
+%D Only specifying the key in the argument is also
+%D legal. In storing this stuff into macros, some trickery with
+%D token registers is needed to fix the expansion problems. Even so,
+%D this appears to not always be 100\% safe, so people are
+%D urgently advised to use \ETEX\ instead of traditional \TEX.
+%D
+%D In \ETEX, all expansion problems are conveniently solved by
+%D the primitive \type{\protected}. To put that another way:
+%D
+%D It's not a bug in this module if it does not appear in \ETEX!
+%D
+%D Now prohibits comments, so % can be used for urls
+
+\unexpanded\def\startpublication
+ {\begingroup
+ \catcode`\%=\othercatcode
+ \dosingleempty\dostartpublication}
+
+\let\stoppublication\relax
+
+% this is rather memory hungry; some day i will rewrite this so that
+% we use the database instead
+
+%D \macros{doifbibreferencefoundelse}
+%D
+%D Some macros to fetch the information provided by
+%D \type{\startpublication}.
+
+% we can consider a faster variant in the bbl file; we can also consider
+% storing the keys in lua (and then do more in lua) and use calls to
+% fetch the variables
+
+% hm, we can store at the lua end ...
+
+\long\def\dostartpublication[#1]#2\stoppublication
+ {\doifassignmentelse{#1}%
+ {\getparameters[\??pb][k=\s!unknown,t=article,n=,s=,a=,y=,o=,u=,#1]}%
+ {\getparameters[\??pb][k=#1,t=article,n=,s=,a=,y=,o=,u=]}%
+ \ctxlua{bibtex.hacks.register("\@@pbk")}%
+ \setxvalue{pbd:\@@pbk}##1{\noexpand\ifcase##1\noexpand\or
+ \@@pbk\noexpand\or
+ \@@pba\noexpand\or
+ \@@pby\noexpand\or
+ \@@pbs\noexpand\or
+ \@@pbn\noexpand\or
+ \@@pbt\noexpand\or
+ \@@pbo\noexpand\or
+ \@@pbu\noexpand\or
+ \normalunexpanded{#2}\noexpand\fi}%
+ \endgroup
+ \ignorespaces}
+
+\def\bibgetvark#1{\csname pbd:#1\endcsname\plusone }
+\def\bibgetvara#1{\csname pbd:#1\endcsname\plustwo }
+\def\bibgetvary#1{\csname pbd:#1\endcsname\plusthree}
+\def\bibgetvars#1{\csname pbd:#1\endcsname\plusfour }
+\def\bibgetvarn#1{\csname pbd:#1\endcsname\plusfive }
+\def\bibgetvart#1{\csname pbd:#1\endcsname\plussix }
+\def\bibgetvaro#1{\csname pbd:#1\endcsname\plusseven}
+\def\bibgetvaru#1{\csname pbd:#1\endcsname\pluseight}
+\def\bibgetvard#1{\csname pbd:#1\endcsname\plusnine }
+
+\def\doifbibreferencefoundelse#1%
+ {\preloadbiblist
+ \doifdefinedelse{pbd:#1}
+ \firstoftwoarguments
+ {\showmessage\m!publications{5}{#1 is unknown}\secondoftwoarguments}}
+
+%D \macros{bib@crossref}
+%D
+%D \type{\crossref} is used in database files to point to another
+%D entry. Because of this special situation, it has to be defined
+%D separately. Since this command will not be seen until at
+%D \type{\placepublications}, it may force extra runs. The same is
+%D true for \type{\cite} commands inside of publications.
+
+% used in bib self
+
+\def\bib@crossref#1% called via \csname \endcsname
+ {\setvalue{\??pb @crossref}{#1}\ignorespaces}
+
+\def\bibinsertcrossref#1#2#3%
+ {\bibdoifelse\@@pb@crossref{#1\cite[\@@pb@crossref]#2}{#3}}
+
+\appendtoks\let\insertcrossref\bibinsertcrossref\to\initializebibdefinitions
+
+%D The next macro is needed because the number command of the
+%D publist sometimes needs to fetch something from the current
+%D item (like the 'short' key). For this, the ID of the current
+%D item is passed in the implict parameter \type{\currentpublicationkey}
+
+\def\doprocessbibtexentry#1{\typesetapublication{#1}}
+
+\def\typesetpubslist
+ {\dobeginoflist
+ % \the\initializebibdefinitions % COMMENTED
+ \edef\currentlist{pubs}%
+ \doif{\listparameter\c!criterium}\v!cite{\setuplist[pubs][\c!criterium=\v!here]}%
+ \ctxlua{bibtex.hacks.reset(\number\bibtexoncemode)}%
+ \placestructurelist{pubs}{\listparameter\c!criterium}{\listparameter\c!number}%
+ \ctxlua{bibtex.hacks.flush("\@@pbsorttype")}%
+ \doendoflist}
+
+\newif\ifinpublist
+
+\def\initializepubslist
+ {\def\currentlist{pubs}%
+ \edef\@@pbnumbering{\@@pbnumbering}%
+ \doifelse\@@pbautohang\v!yes
+ {\ifx\@@pbnumbering\v!short
+ \setbox\scratchbox\hbox{\@@pbnumbercommand{\listparameter\c!samplesize}}%
+ \else
+ \setbox\scratchbox\hbox{\@@pbnumbercommand{\ctxlua{tex.write(structure.lists.size())}}}%
+ \fi
+ \edef\publistnumberbox{\hbox to \the\wd\scratchbox}%
+ \expanded{\setuplist[pubs][\c!width=\the\wd\scratchbox,\c!distance=\zeropoint]}%
+ \ifx\@@pbnumbering\v!short
+ \def\@@pblimitednumber##1{\publistnumberbox{\@@pbnumbercommand{\bibgetvars\currentpublicationkey}}}%
+ \else\ifx\@@pbnumbering\v!bib
+ \def\@@pblimitednumber##1{\publistnumberbox{\@@pbnumbercommand{\bibgetvarn\currentpublicationkey}}}%
+ \else
+ \def\@@pblimitednumber##1{\publistnumberbox{\@@pbnumbercommand{##1}}}%
+ \fi\fi}
+ {\doifelsenothing{\listparameter\c!width}
+ {\let \publistnumberbox \hbox}
+ {\edef\publistnumberbox{\hbox to \listparameter\c!width}}%
+ \ifx\@@pbnumbering\v!short
+ \def\@@pblimitednumber##1{\publistnumberbox{\@@pbnumbercommand{\bibgetvars\currentpublicationkey}}}%
+ \else\ifx\@@pbnumbering\v!bib
+ \def\@@pblimitednumber##1{\publistnumberbox{\@@pbnumbercommand{\bibgetvarn\currentpublicationkey}}}%
+ \else
+ \def\@@pblimitednumber##1{\publistnumberbox{\@@pbnumbercommand{##1}}}%
+ \fi\fi}%
+ \ifx\@@pbnumbering\v!no
+ \setuplist[pubs][\c!numbercommand=,\c!symbol=\v!none,\c!textcommand=\outdented]%
+ \else
+ \setuplist[pubs][\c!numbercommand=\@@pblimitednumber]%
+ \fi
+ \doifelse{\publicationlistparameter\c!maybeyear}{\v!off}{\def\maybeyear##1{}}{\def\maybeyear##1{##1}}%
+ \forgetall}
+
+\def\outdented#1% move to supp-box ?
+ {\hskip-\hangindent#1\relax}
+
+%D The full list of publications
+
+\def\completepublications
+ {\dosingleempty\docompletepublications}
+
+\def\docompletepublications[#1]%
+ {\begingroup
+ \setuplist[pubs][\c!criterium=\v!previous,#1]
+ \doifelsenothing{\publicationlistparameter\c!title}
+ {\systemsuppliedchapter[pubs]{\headtext{pubs}}}
+ {\normalexpanded{\systemsuppliedchapter[pubs]{\publicationlistparameter\c!title}}}%
+ \dodoplacepublications}
+
+%D And the portion with the entries only.
+
+\def\bibrefprefix{\number\bibtexblock:}
+
+\unexpanded\def\placepublications
+ {\dosingleempty\doplacepublications}
+
+\def\doplacepublications[#1]%
+ {\begingroup
+ \setuplist[pubs][\c!criterium=\v!previous,#1]%
+ \dodoplacepublications}
+
+\def\dodoplacepublications
+ {\determinelistcharacteristics[pubs]%
+ \initializepubslist
+ \doifnot{\namedlistparameter{pubs}\c!option}\v!continue
+ {\global\bibtexcounter\zerocount}%
+ \inpublisttrue
+ \typesetpubslist
+ \inpublistfalse
+ \endgroup
+ \global\advance\bibtexblock\plusone}
+
+%D \subsubject{What's in a publication}
+
+\unexpanded\def\typesetapublication#1%
+ {\doifsomething{#1}
+ {\doifelse{\namedlistparameter{pubs}\c!criterium}\v!all
+ {\doplacepublicationindeed{#1}}%
+ {\ctxlua{bibtex.hacks.doifalreadyplaced("#1")}
+ {}
+ {\doplacepublicationindeed{#1}}}%
+ }}
+
+% for the moment we don't access the data directly but we will do that
+% later when we get away from storing the data and only deal with
+% references
+
+% we'll define proper handlers later
+
+\def\doplacepublicationindeed#1%
+ {\doifbibreferencefoundelse{#1}
+ {\global\advance\bibtexcounter\plusone
+ \def\currentpublicationkey{#1}%
+ \ctxlua{bibtex.hacks.registerplaced("#1")}%
+ \dodolistelement
+ {pubs}%
+ {}%
+ {\number\bibtexcounter}%
+ {\expanded{\reference[\bibrefprefix#1]{\number\bibtexcounter}}%
+ \strut\dotypesetapublication{#1}\strut}%
+ {}%
+ {}}
+ {}} % invalid
+
+\def\dotypesetapublication#1%
+ {\bgroup
+ \the\initializebibdefinitions % NEW
+ \def\@@currentalternative{:l:}%
+ \presetbibvariables
+ \let\biblanguage\empty
+ \ignorespaces
+ \bibgetvard{#1}%
+ \removeunwantedspaces
+ \ignorespaces
+ \bibalternative{\bibgetvart{#1}}%
+ \removeunwantedspaces
+ \egroup}
+
+%D An few afterthoughts:
+
+\let\maybeyear\gobbleoneargument
+\let\noopsort \gobbleoneargument
+
+%D This is the result of bibtex's `language' field.
+
+\def\setbiblanguage#1#2{\setvalue{\??pb\s!language#1}{#2}}
+
+\def\lang#1%
+ {\edef\biblanguage{#1}%
+ \ifcsname\??pb\s!language#1\endcsname
+ \language[\getvalue{\??pb\s!language#1}]%
+ \fi
+ \ignorespaces}
+
+%D \subject{Citations}
+
+%D \macros{cite,bibref}
+%D
+%D The indirection with \type{\dobibref} allows \LATEX\ style
+%D \type{\cite} commands with a braced argument (these might appear
+%D in included data from the \type{.bib} file).
+
+% \unexpanded\def\cite
+% {\doifnextoptionalelse\dodocite\dobibref}
+% \def\dobibref#1%
+% {\docite[#1][]}
+% \def\dodocite[#1]%
+% {\startstrictinspectnextcharacter
+% \dodoubleempty\dododocite[#1]}
+% \def\dododocite % [#1][#2]
+% {\stopstrictinspectnextcharacter
+% \docite}
+
+\unexpanded\def\cite
+ {\strictdoifnextoptionalelse\dodocite\dobibref}
+
+\def\dobibref#1%
+ {\docite[#1][]}
+
+\def\dodocite[#1]%
+ {\strictdoifnextoptionalelse{\docite[#1]}{\docite[#1][]}}
+
+\def\docite[#1][#2]%
+ {\begingroup
+ \doifelsenothing{#2}\secondargumentfalse\secondargumenttrue
+ \ifsecondargument
+ \dowhatevercite{#1}{#2}%
+ \else
+ \donumberedcite{#1}%
+ \fi
+ \endgroup}
+
+\def\dowhatevercite#1#2%
+ {\processcommalist[#2]\docitation
+ \setupinteraction[\c!style=]%
+ \doifassignmentelse
+ {#1}%
+ {\getparameters[LO][\c!alternative=,\c!extras=,#1]%
+ \edef\@@currentalternative{\LOalternative}%
+ \ifx\@@currentalternative\empty
+ \edef\@@currentalternative{\@@citedefault}%
+ \fi
+ \ifx\LOextras\empty
+ \setupcite[\@@currentalternative][#1]%
+ \else
+ \expandafter\ifx\csname LOright\endcsname \relax
+ \edef\LOextras{{\LOextras\bibalternative\c!right}}%
+ \else
+ \edef\LOextras{{\LOextras\LOright}}%
+ \fi
+ \expanded{\setupcite[\@@currentalternative][#1,\c!right=\LOextras]}%
+ \fi}%
+ {\def\@@currentalternative{#1}}%
+ \doifelsevalue{@@pv\@@currentalternative\c!compress}\v!no\bibcitecompressfalse\bibcitecompresstrue
+ \getvalue{bib\@@currentalternative ref}[#2]}
+
+\def\donumberedcite#1%
+ {\processcommalist[#1]\docitation
+ \setupinteraction[\c!style=]%
+ \edef\@@currentalternative{\@@citedefault}%
+ \doifelsevalue{@@pv\@@currentalternative\c!compress}\v!no\bibcitecompressfalse\bibcitecompresstrue
+ \getvalue{bib\@@citedefault ref}[#1]}
+
+%D \macros{nocite}
+
+\def\nocite[#1]%
+ {\processcommalist[#1]\docitation}
+
+%D \macros{setupcite}
+
+\unexpanded\def\setupcite{\dodoubleempty\dosetupcite}
+
+\def\dosetupcite[#1][#2]%
+ {\ifsecondargument
+ \def\dodosetupcite##1{\getparameters[\??pv##1][#2]}%
+ \processcommalist[#1]\dodosetupcite
+ \else % default case
+ \getparameters[\??pv\@@citedefault][#1]%
+ \fi}
+
+%D Low-level stuff
+
+\def\getcitedata#1[#2]#3[#4]#5to#6%
+ {\bgroup
+ \dofetchapublication{#4}%
+ \doifdefinedelse{\??pb @bib#2}%
+ {\xdef#6{\getvalue{\??pb @bib#2}}}%
+ {\xdef#6{\getvalue{\??pb @#2}}}%
+ \egroup}
+
+\def\dofetchapublication#1%
+ {\def\currentpublicationkey{#1}%
+ \presetbibvariables
+ \ignorespaces\bibgetvard{#1}}
+
+\def\docitation#1%
+ {\iftrialtypesetting \else
+ \expanded{\writedatatolist[pubs][bibref=#1]}%
+ \fi}
+
+\let\addthisref\gobbleoneargument % keep this for compatibility
+
+%D \macros{ixbibauthoryear,thebibauthors,thebibyears}
+%D
+%D If compression of \type{\cite}'s argument expansion is on,
+%D the macros that deal with authors and years call this internal
+%D command to do the actual typesetting.
+%D
+%D Two entries with same author but with different years may
+%D be condensed into ``Author (year1,year2)''. This is about the
+%D only optimization that makes sense for the (author,year)
+%D style of citations (years within one author have to be unique
+%D anyway so no need to test for that, and ``Author1, Author2 (year)''
+%D creates more confusion than it does good).
+%D
+%D In the code below,
+%D the macro \type{\thebibauthors} holds the names of the alternative
+%D author info fields for the current list. This is a commalist,
+%D and \type{\thebibyears} holds the (collection of) year(s) that go with
+%D this author (possibly as a nested commalist).
+%D
+%D There had better be an author for all cases, but there
+%D does not have to be year info always. \type{\thebibyears} is
+%D pre-initialized because this makes the insertion macros simpler.
+%D
+%D In `normal' \TeX, of course there are expansion problems again.
+
+\def\ixbibauthoryear#1#2#3#4%
+ {\bgroup
+ \gdef\ixlastcommand {#4}%
+ \gdef\ixsecondcommand{#3}%
+ \gdef\ixfirstcommand {#2}%
+ \glet\thebibauthors \empty
+ \glet\thebibyears \empty
+ \getcommalistsize[#1]%
+ \ifbibcitecompress
+ \dorecurse\commalistsize{\xdef\thebibyears{\thebibyears,}}%
+ \processcommalist[#1]\docompressbibauthoryear
+ \else
+ \processcommalist[#1]\donormalbibauthoryear
+ \fi
+ \egroup
+ \dobibauthoryear}
+
+%D \macros{dodobibauthoryear}
+%D
+%D This macro only has to make sure that the lists
+%D \type{\thebibauthors} and \type{\thebibyears} are printed.
+
+\def\dobibauthoryear
+ {\scratchcounter\zerocount
+ \getcommacommandsize[\thebibauthors]%
+ \edef\authorcount{\commalistsize}%
+ \@EA\processcommalist\@EA[\thebibauthors]\dodobibauthoryear}
+
+\def\dodobibauthoryear#1%
+ {\advance\scratchcounter\plusone
+ \edef\wantednumber{\the\scratchcounter}%
+ \getfromcommacommand[\thebibyears][\wantednumber]%
+ \@EA\def\@EA\currentbibyear\@EA{\commalistelement}%
+ \setcurrentbibauthor{#1}%
+ \ifnum\scratchcounter=\plusone
+ \ixfirstcommand
+ \else\ifnum \scratchcounter=\authorcount\relax
+ \ixlastcommand
+ \else
+ \ixsecondcommand
+ \fi\fi}
+
+\def\setcurrentbibauthor#1%
+ {\getcommacommandsize[#1]%
+ \ifcase\commalistsize
+ % anonymous?
+ \let\currentbibauthor\empty
+ \or
+ \def\currentbibauthor{#1}%
+ \or
+ \expanded{\docurrentbibauthor#1}%
+ \else
+ \handlemultiplebibauthors{\commalistsize}{#1}%
+ \fi}
+
+\newcount\citescratchcounter
+
+\def\handlemultiplebibauthors#1#2%
+ {\citescratchcounter\zerocount
+ \let\currentbibauthor\empty
+ \def\bibprocessauthoritem##1%
+ {\advance\citescratchcounter\plusone
+ \ifnum \citescratchcounter=#1\relax
+ \edef\currentbibauthor{\currentbibauthor##1}%
+ \else\ifnum\numexpr\citescratchcounter+\plusone\relax=#1\relax
+ \edef\currentbibauthor{\currentbibauthor##1\bibalternative{andtext}}%
+ \else
+ \edef\currentbibauthor{\currentbibauthor##1\bibalternative{namesep}}%
+ \fi\fi}%
+ \processcommalist[#2]\bibprocessauthoritem}
+
+\setupcite
+ [author,authoryear,authoryears]
+ [\c!namesep={, }]
+
+%D This discovery of authoretallimit is not the best one,
+%D but it will do for now.
+
+\def\docurrentbibauthor#1,#2%
+ {\doifemptyelse{#2}
+ {\def\currentbibauthor{#1\bibalternative{otherstext}}}
+ {\@EA\ifx\csname\??pv\@@currentalternative authoretallimit\endcsname\relax
+ \edef\currentbibauthor{#1\bibalternative{andtext}#2}%
+ \else
+ \edef\currentbibauthor{#1%
+ \ifcase0\bibalternative{authoretallimit}\relax\or
+ \bibalternative{otherstext}\else\bibalternative{andtext}#2\fi}%
+ \fi}}
+
+%D This is not the one Hans made for me, because I need a global
+%D edef, and the \type{\robustdoifinsetelse} doesn't listen to
+%D \type{\doglobal }
+
+\def\robustaddtocommalist#1#2% {item} \cs
+ {\robustdoifinsetelse{#1}#2\resetglobal
+ {\dodoglobal\xdef#2{\ifx#2\empty\else#2,\fi#1}}}
+
+%D \macros{donormalbibauthoryear}
+%D
+%D Now we get to the macros that fill the two lists.
+%D The `simple' one really is quite simple.
+
+\def\donormalbibauthoryear#1%
+ {\def\myauthor{Xxxxxxxxxx}%
+ \def\myyear{0000}%
+ \doifbibreferencefoundelse{#1}
+ {\def\myauthor{{\bibgetvara{#1}}}%
+ \def\myyear {\bibgetvary{#1}}}%
+ {}%
+ \@EA\doglobal\@EA\appendtocommalist\@EA{\myauthor}\thebibauthors
+ \@EA\doglobal\@EA\appendtocommalist\@EA{\myyear }\thebibyears}
+
+%D \macros{docompressbibauthoryear}
+%D
+%D So much for the easy parts. Nothing at all will be done if
+%D the reference is not found or the reference does not contain
+%D author data. No questions marks o.s.s. (to be fixed later)
+
+\def\docompressbibauthoryear#1%
+ {\def\myauthor{Xxxxxxxxxx}%
+ \def\myyear {0000}%
+ \doifbibreferencefoundelse{#1}
+ {\xdef\myauthor{\bibgetvara{#1}}%
+ \xdef\myyear {\bibgetvary{#1}}}
+ {}%
+ \ifx\myauthor\empty\else
+ \checkifmyauthoralreadyexists
+ \findmatchingyear
+ \fi}
+
+%D two temporary counters. One of these two can possibly be replaced
+%D by \type{\scratchcounter}.
+
+\newcount\bibitemcounter
+\newcount\bibitemwanted
+
+%D The first portion is simple enough: if this is the very first author
+%D it is quite straightforward to add it. \type{\bibitemcounter} and
+%D \type{\bibitemwanted} are needed later to insert the year
+%D information in the correct item of \type{\thebibyears}
+
+\def\checkifmyauthoralreadyexists
+ {\doifemptyelsevalue{thebibauthors}
+ {\global\bibitemwanted \plusone
+ \global\bibitemcounter\plusone
+ \xdef\thebibauthors{{\myauthor}}}
+ {% the next weirdness is because according to \getcommalistsize,
+ % the length of \type{[{{},{}}]} is 2.
+ \@EA\getcommalistsize\@EA[\thebibauthors,]%
+ \global\bibitemcounter\numexpr\commalistsize+\minusone\relax
+ \global\bibitemwanted \zerocount
+ \processcommacommand[\thebibauthors]\docomparemyauthor}}
+
+%D The outer \type{\ifnum} accomplishes the addition of
+%D a new author to \type{\thebibauthors}. The messing about with
+%D the two counters is again to make sure that \type{\thebibyears}
+%D will be updated correctly.If the author {\it was} found,
+%D the counters will stay at their present values and everything
+%D will be setup properly to insert the year info.
+
+\def\docomparemyauthor#1%
+ {\global\advance\bibitemwanted \plusone
+ \def\mytempc{#1}%
+ \ifx\mytempc\myauthor
+ \quitcommalist
+ \else\ifnum\bibitemwanted=\bibitemcounter\relax
+ \global\advance\bibitemwanted \plusone
+ \global\bibitemcounter\bibitemwanted\relax
+ \@EA\doglobal\@EA\robustaddtocommalist\@EA{{\myauthor}}\thebibauthors
+ \fi\fi}
+
+%D This macro should be clear now.
+
+\def\findmatchingyear
+ {\edef\wantednumber{\the\bibitemwanted}%
+ \getfromcommacommand[\thebibyears][\wantednumber]%
+ \ifx\commalistelement\empty
+ \edef\myyear{{\myyear}}%
+ \else
+ \edef\myyear{{\commalistelement,\myyear}}%
+ \fi
+ \edef\newcommalistelement{\myyear}%
+ \doglobal\replaceincommalist \thebibyears \wantednumber}
+
+%D \macros{gotobiblink,inbiblink,atbiblink}
+%D
+%D The final task is looping over that list until a match is found.
+
+\def\gotobiblink#1[#2]{\doifreferencefoundelse{\bibrefprefix#2}{\goto{#1}[\bibrefprefix#2]}{\unknownreference{#2}}}
+\def\atbiblink [#1]{\doifreferencefoundelse{\bibrefprefix#1}{\at [\bibrefprefix#1]}{\unknownreference{#1}}}
+\def\inbiblink [#1]{\doifreferencefoundelse{\bibrefprefix#1}{\expanded{\goto{\currentreferencetext}}[\bibrefprefix#1]}{\unknownreference{#1}}}
+
+%D \macros{bibauthoryearref,bibauthoryearsref,bibauthorref,bibyearref}
+%D
+%D Now that all the hard work has been done, these are simple.
+%D \type{\ixbibauthoryearref} stores the data in the macros
+%D \type{\currentbibauthor} and \type{\currentbibyear}.
+
+\def\ifbibinteractionelse
+ {\iflocation
+ \edef\test{\bibalternative\c!interaction}%
+ \ifx\test\v!stop
+ \@EA\@EA\@EA\secondoftwoarguments
+ \else
+ \@EA\@EA\@EA\firstoftwoarguments
+ \fi
+ \else
+ \@EA\secondoftwoarguments
+ \fi}
+
+\def\ifbibinteractionelse
+ {\iflocation
+ \doifelse{\bibalternative\c!interaction}\v!stop
+ {\@EA\secondoftwoarguments}
+ {\@EA\firstoftwoarguments}%
+ \else
+ \@EA\secondoftwoarguments
+ \fi}
+
+\def\bibmaybeinteractive#1#2%
+ {\ifbibcitecompress
+ #2%
+ \else
+ \ifbibinteractionelse{\gotobiblink{#2}[#1]}{#2}%
+ \fi}
+
+\def\bibauthoryearref[#1]%
+ {\ixbibauthoryear{#1}%
+ {\bibmaybeinteractive{#1}{{\currentbibauthor}\bibalternative\c!inbetween
+ \bibalternative\v!left{\currentbibyear}\bibalternative\v!right}}
+ {\bibalternative\c!pubsep
+ \bibmaybeinteractive{#1}{{\currentbibauthor}\bibalternative\c!inbetween
+ \bibalternative\v!left {\currentbibyear}\bibalternative\v!right}}
+ {\bibalternative\c!lastpubsep
+ \bibmaybeinteractive{#1}{{\currentbibauthor}\bibalternative\c!inbetween
+ \bibalternative\v!left {\currentbibyear}\bibalternative\v!right}}}
+
+\def\bibauthoryearsref[#1]%
+ {\bibalternative\v!left
+ \ixbibauthoryear{#1}
+ {\bibmaybeinteractive{#1}{{\currentbibauthor}\bibalternative\c!inbetween{\currentbibyear}}}
+ {\bibalternative\c!pubsep
+ \bibmaybeinteractive{#1}{{\currentbibauthor}\bibalternative\c!inbetween{\currentbibyear}}}
+ {\bibalternative\c!lastpubsep
+ \bibmaybeinteractive{#1}{{\currentbibauthor}\bibalternative\c!inbetween{\currentbibyear}}}%
+ \bibalternative\v!right}
+
+\def\bibauthorref[#1]%
+ {\bibalternative\v!left
+ \ixbibauthoryear{#1}%
+ {\bibmaybeinteractive{#1}{{\currentbibauthor}}}
+ {\bibalternative\c!pubsep \bibmaybeinteractive{#1}{{\currentbibauthor}}}
+ {\bibalternative\c!lastpubsep\bibmaybeinteractive{#1}{{\currentbibauthor}}}%
+ \bibalternative\v!right}
+
+\def\bibyearref[#1]%
+ {\bibalternative\v!left
+ \ixbibauthoryear{#1}%
+ {\bibmaybeinteractive{#1}{{\currentbibyear}}}
+ {\bibalternative\c!pubsep \bibmaybeinteractive{#1}{{\currentbibyear}}}
+ {\bibalternative\c!lastpubsep\bibmaybeinteractive{#1}{{\currentbibyear}}}%
+ \bibalternative\v!right}
+
+%D \macros{bibshortref,bibkeyref,bibpageref,bibtyperef,bibserialref}
+%D
+%D There is hardly any point in trying to compress these. The only
+%D thing that needs to be done is making sure that
+%D the separations are inserted correctly. And that is
+%D what \type{\bibinsertrefsep} does.
+
+\newconditional\firstbibrefsep
+
+\def\bibresetrefsep
+ {\settrue\firstbibrefsep}
+
+\def\bibinsertrefsep
+ {\ifconditional\firstbibrefsep
+ \setfalse\firstbibrefsep
+ \else
+ \bibalternative\c!pubsep
+ \fi}
+
+\def\bibshortref[#1]%
+ {\bibalternative\v!left
+ \bibresetrefsep\processcommalist[#1]\dobibshortref
+ \bibalternative\v!right}
+
+\def\dobibshortref#1%
+ {\bibinsertrefsep
+ \doifbibreferencefoundelse{#1}
+ {\gotobiblink{\bibgetvars{#1}}[#1]}
+ {\unknownreference{#1}}}
+
+\def\bibserialref[#1]%
+ {\bibalternative\v!left
+ \bibresetrefsep\processcommalist[#1]\dobibserialref
+ \bibalternative\v!right}
+
+\def\dobibserialref#1%
+ {\bibinsertrefsep
+ \doifbibreferencefoundelse{#1}
+ {\gotobiblink{\bibgetvarn{#1}}[#1]}
+ {\unknownreference{#1}}}
+
+\def\bibkeyref[#1]%
+ {\bibalternative\v!left
+ \bibresetrefsep\processcommalist[#1]\dobibkeyref
+ \bibalternative\v!right}
+
+\def\dobibkeyref#1%
+ {\bibinsertrefsep
+ \gotobiblink{#1}[#1]}
+
+\def\bibgotoDOI#1#2%
+ {\ifbibinteractionelse
+ {\useURL[bibfooDoi#1][#2]%
+ \useURL[bibfoo#1][http://dx.doi.org/#2]%
+ \goto{\url[bibfooDoi#1]}[url(bibfoo#1)]}
+ {\hyphenatedurl{#2}}}
+
+\def\bibdoiref[#1]%
+ {\bibalternative\v!left
+ \bibresetrefsep\processcommalist[#1]\dobibdoiref
+ \bibalternative\v!right}
+
+\def\dobibdoiref#1%
+ {\bibinsertrefsep
+ \doifbibreferencefoundelse{#1}
+ {\expanded{\bibgotoDOI{#1}{\bibgetvaro{#1}}}}
+ {\unknownreference{#1}}}
+
+\def\biburlref[#1]%
+ {\bibalternative\v!left
+ \bibresetrefsep\processcommalist[#1]\dobiburlref
+ \bibalternative\v!right}
+
+\def\bibgotoURL#1#2%
+ {\ifbibinteractionelse
+ {\useURL[bibfoo#1][#2]\goto{\url[bibfoo#1]}[url(bibfoo#1)]}
+ {\hyphenatedurl{#2}}}
+
+\def\dobiburlref#1%
+ {\bibinsertrefsep
+ \doifbibreferencefoundelse{#1}
+ {\expanded{\bibgotoURL{#1}{\bibgetvaru{#1}}}}
+ {\unknownreference{#1}}}
+
+\def\bibtyperef[#1]%
+ {\bibalternative\v!left
+ \bibresetrefsep\processcommalist[#1]\dobibtyperef
+ \bibalternative\v!right}
+
+\def\dobibtyperef#1%
+ {\bibinsertrefsep
+ \doifbibreferencefoundelse{#1}
+ {\gotobiblink{\bibgetvart{#1}}[#1]}
+ {\unknownreference{#1}}}
+
+\def\bibpageref[#1]%
+ {\bibalternative\v!left
+ \bibresetrefsep\processcommalist[#1]\dobibpageref
+ \bibalternative\v!right}
+
+\def\dobibpageref#1%
+ {\bibinsertrefsep
+ \ifbibinteractionelse
+ {\atbiblink[#1]}
+ {{\referencingfalse\at[#1]}}}
+
+\def\bibdataref[#1]%
+ {\bibalternative\v!left
+ \bibresetrefsep\processcommalist[#1]\dobibdata
+ \bibalternative\v!right}
+
+\def\dobibdata#1%
+ {\bibinsertrefsep
+ \doifbibreferencefoundelse{#1}
+ {\dotypesetapublication{#1}}
+ {\unknownreference{#1}}}
+
+\let\bibnoneref\nocite
+
+%D \macros{bibnumref}
+
+\def\bibnumref[#1]%
+ {\begingroup
+ \bibalternative\v!left
+ \penalty\!!tenthousand
+ \ctxlua{bibtex.hacks.resolve("","\number\bibtexblock","#1")}%
+ \bibalternative\v!right
+ \endgroup}
+
+\def\dowithbibtexnumrefconnector#1#2%
+ {\ifnum#1>\plusone
+ \ifnum#2>\plusone
+ \ifnum#2=#1\relax
+ \bibalternative{lastpubsep}%
+ \else
+ \bibalternative{pubsep}%
+ \fi
+ \fi
+ \fi}
+
+\def\dowithbibtexnumref#1#2#3#4#5% n, i, prefix block ref
+ {\dowithbibtexnumrefconnector{#1}{#2}%
+ \def\bibrefprefix{#4:}%
+ \inbiblink[#5]}
+
+\def\dowithbibtexnumrefrange#1#2#3#4#5#6#7% n, i, prefix block ref
+ {\dowithbibtexnumrefconnector{#1}{#2}%
+ \def\bibrefprefix{#4:}%
+ \inbiblink[#5]%
+ \endash
+ \def\bibrefprefix{#6:}%
+ \inbiblink[#7]}
+
+%D By request from Sanjoy. This makes it easier to implement
+%D \type{\citeasnoun}.
+
+\def\bibauthornumref[#1]%
+ {\getcommalistsize[#1]%
+ \global\bibitemcounter\commalistsize
+ \bibresetrefsep
+ \processcommalist[#1]\dobibauthornumref }
+
+\def\dobibauthornumref#1%
+ {\bibinsertrefsep
+ \doifbibreferencefoundelse{#1}
+ {\begingroup
+ \bibgetvara{#1}%
+ \bibalternative\c!inbetween
+ \setuppublications[\c!refcommand=num]%
+ \cite[#1]%
+ \endgroup}
+ {\unknownreference{#1}}}
+
+%D And some defaults are loaded from bibl-apa:
+
+\def\c!monthconversion{monthconversion} % todo
+
+\setuppublications
+ [\c!monthconversion=,
+ \c!alternative=apa,
+ \c!method=\v!global,
+ \c!refcommand=num,
+ \c!numbercommand=\bibleftnumber]
+
+\def\preloadbiblist
+ {\globallet\preloadbiblist\relax
+ \dousepublications\jobname}
+
+% \appendtoks \preloadbiblist \to \everysetuppublications
+% \appendtoks \preloadbiblist \to \everystarttext
+
+\protect \endinput
diff --git a/Master/texmf-dist/tex/context/base/bibl-tst.lua b/Master/texmf-dist/tex/context/base/bibl-tst.lua
index a1b85b0f78b..5ff8f45709f 100644
--- a/Master/texmf-dist/tex/context/base/bibl-tst.lua
+++ b/Master/texmf-dist/tex/context/base/bibl-tst.lua
@@ -11,8 +11,8 @@ bibtex.load(session,"texgraph.bib")
bibtex.load(session,"texjourn.bib")
bibtex.load(session,"texnique.bib")
bibtex.load(session,"tugboat.bib")
+print(bibtex.size,statistics.elapsedtime(bibtex))
bibtex.toxml(session)
-
print(bibtex.size,statistics.elapsedtime(bibtex))
--~ print(table.serialize(session.data))
diff --git a/Master/texmf-dist/tex/context/base/blob-ini.lua b/Master/texmf-dist/tex/context/base/blob-ini.lua
new file mode 100644
index 00000000000..0f7ccee26c5
--- /dev/null
+++ b/Master/texmf-dist/tex/context/base/blob-ini.lua
@@ -0,0 +1,165 @@
+if not modules then modules = { } end modules ['blob-ini'] = {
+ version = 1.001,
+ comment = "companion to blob-ini.mkiv",
+ author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
+ copyright = "PRAGMA ADE / ConTeXt Development Team",
+ license = "see context related readme files"
+}
+
+-- later we will consider an OO variant.
+
+-- This module is just a playground. Occasionally we need to typeset
+-- at the lua and and this is one method. In principle we can construct
+-- pages this way too which sometimes makes sense in dumb cases. Actually,
+-- if one only needs this, one does not really need tex, okay maybe the
+-- parbuilder but that one can be simplified as well then.
+
+-- set fonts, attributes
+-- rest already done in packers etc
+-- add local par whatsit (or wait till cleaned up)
+-- collapse or new pars
+-- interline spacing etc
+
+-- DON'T USE THESE FUNCTIONS AS THEY WILL CHANGE!
+
+local type = type
+
+local utfvalues = string.utfvalues
+local lpegmatch, lpegpatterns = lpeg.match, lpeg.patterns
+
+local fontdata = fonts.identifiers
+
+local new_glyph_node = nodes.glyph
+local new_glue_node = nodes.glyph
+
+local copy_node = node.copy
+local copy_node_list = node.copy_list
+local insert_node_after = node.insert_after
+local flush_node_list = node.flush_list
+local hpack_node_list = node.hpack
+local vpack_node_list = node.vpack
+local write_node = node.write
+
+local current_font = font.current
+
+blobs = blobs or { }
+
+local newline = lpegpatterns.newline
+local space = lpegpatterns.spacer
+local spacing = newline * space^0
+local content = (space^1)/" " + (1-spacing)
+
+local ctxtextcapture = lpeg.Ct ( (
+ space^0 * (
+ newline^2 * space^0 * lpeg.Cc("")
+ + newline * space^0 * lpeg.Cc(" ")
+ + lpeg.Cs(content^1)
+ )
+)^0)
+
+local function tonodes(str,fnt,attr) -- (str,template_glyph)
+ if not str or str == "" then
+ return
+ end
+ local head, tail, space, fnt, template = nil, nil, nil, nil, nil
+ if not fnt then
+ fnt = current_font()
+ elseif type(fnt) ~= "number" and fnt.id == "glyph" then
+ fnt, template = nil, fnt
+ -- else
+ -- already a number
+ end
+ for s in utfvalues(str) do
+ local n
+ if s == 32 then
+ if not space then
+ local parameters = fontdata[fnt].parameters
+ space = new_glue_node(parameters.space,parameters.space_stretch,parameters.space_shrink)
+ n = space
+ else
+ n = copy_node(space)
+ end
+ elseif template then
+ n = copy_node(template)
+ n.char = s
+ else
+ n = new_glyph_node(fnt,s)
+ end
+ if attr then -- normall false when template
+ n.attr = copy_node_list(attr)
+ end
+ if head then
+ insert_node_after(head,tail,n)
+ else
+ head = n
+ end
+ tail = n
+ end
+ return head, tail
+end
+
+blobs.tonodes = tonodes
+
+function blobs.new()
+ return {
+ list = { },
+ }
+end
+
+function blobs.append(t,str)
+ local kind = type(str)
+ local dummy = nil
+ if kind == "string" then
+ local pars = lpegmatch(ctxtextcapture,str)
+ local list = t.list
+ for p=1,#pars do
+ local str = pars[p]
+ if #str == 0 then
+ list[#list+1 ] = { head = nil, tail = nil }
+ else
+ local l = list[#list]
+ if not l then
+ l = { head = nil, tail = nil }
+ list[#list+1 ] = l
+ end
+ local head, tail = tonodes(str,nil,nil)
+ if head then
+ if l.head then
+ l.tail.next = head
+ head.prev = l.tail
+ l.tail = tail
+ else
+ l.head, l.tail = head, tail
+ end
+ end
+ end
+ end
+ end
+end
+
+function blobs.pack(t,how)
+ local list = t.list
+ for i=1,#list do
+ local pack = list[i].pack
+ if pack then
+ flush_node_list(node.pack)
+ end
+ if how == "vertical" then
+ -- we need to prepend a local par node
+ -- list[i].pack = node.vpack(list[i].head,"exactly")
+ logs.report("blobs","vpack not yet supported")
+ else
+ list[i].pack = hpack_node_list(list[i].head,"exactly")
+ end
+ end
+end
+
+function blobs.write(t)
+ local list = t.list
+ for i=1,#list do
+ local pack = list[i].pack
+ if pack then
+ write_node(pack)
+ end
+ end
+end
diff --git a/Master/texmf-dist/tex/context/base/blob-ini.mkiv b/Master/texmf-dist/tex/context/base/blob-ini.mkiv
new file mode 100644
index 00000000000..7f63ec73d91
--- /dev/null
+++ b/Master/texmf-dist/tex/context/base/blob-ini.mkiv
@@ -0,0 +1,34 @@
+%D \module
+%D [ file=blob-ini,
+%D version=2010.04.06,
+%D title=\CONTEXT\ \LUA\ Typesetting,
+%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}{ConTeXt Lua Typesetting / Initialization}
+
+%D This is a prelude to typesetting at the \LUA\ end. The code
+%D is already quite old but will only get nice when we are further
+%D down the road (close to version 1.00 of \LUATEX). Typesetting in
+%D pure \LUA\ sometimes makes sense.
+
+\registerctxluafile{blob-ini}{1.001}
+
+\endinput
+
+% \starttext
+%
+% \startluacode
+% local b = blobs.new()
+% blobs.append(b,"Hello world.\n Here we are.\n\n And Again!")
+% blobs.pack(b)
+% blobs.write(b)
+% \stopluacode
+%
+% \stoptext
diff --git a/Master/texmf-dist/tex/context/base/buff-ini.lua b/Master/texmf-dist/tex/context/base/buff-ini.lua
index f02963d6a06..6b1af8f96f3 100644
--- a/Master/texmf-dist/tex/context/base/buff-ini.lua
+++ b/Master/texmf-dist/tex/context/base/buff-ini.lua
@@ -1,6 +1,6 @@
if not modules then modules = { } end modules ['buff-ini'] = {
version = 1.001,
- comment = "companion to core-buf.tex",
+ comment = "companion to core-buf.mkiv",
author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
copyright = "PRAGMA ADE / ConTeXt Development Team",
license = "see context related readme files"
@@ -20,16 +20,24 @@ buffers.visualizers = { }
-- if needed we can make 'm local
+local trace_run = false trackers.register("buffers.run", function(v) trace_run = v end)
+local trace_visualize = false trackers.register("buffers.visualize", function(v) trace_visualize = v end)
+
local utf = unicode.utf8
local concat, texsprint, texprint, texwrite = table.concat, tex.sprint, tex.print, tex.write
local utfbyte, utffind, utfgsub = utf.byte, utf.find, utf.gsub
local type, next = type, next
-local byte, sub, find, char, gsub, rep, lower = string.byte, string.sub, string.find, string.char, string.gsub, string.rep, string.lower
+local huge = math.huge
+local byte, sub, find, char, gsub, rep, lower, format, gmatch, match = string.byte, string.sub, string.find, string.char, string.gsub, string.rep, string.lower, string.format, string.gmatch, string.match
local utfcharacters, utfvalues = string.utfcharacters, string.utfvalues
local ctxcatcodes = tex.ctxcatcodes
+local variables = interfaces.variables
+local lpegmatch = lpeg.match
+
+local data, flags, hooks, visualizers = buffers.data, buffers.flags, buffers.hooks, buffers.visualizers
-local data, commands, flags, hooks, visualizers = buffers.data, buffers.commands, buffers.flags, buffers.hooks, buffers.visualizers
+visualizers.defaultname = variables.typing
function buffers.raw(name)
return data[name] or { }
@@ -47,6 +55,7 @@ function buffers.append(name, str)
data[name] = (data[name] or "") .. str
end
+
buffers.flags.store_as_table = true
-- to be sorted out: crlf + \ ; slow now
@@ -65,11 +74,11 @@ function buffers.grab(name,begintag,endtag,bufferdata)
buffers.level = buffers.level - 1
else
if dn == "" then
- dn = bufferdata:sub(1,#bufferdata-1)
+ dn = sub(bufferdata,1,#bufferdata-1)
else
- dn = dn .. "\n" .. bufferdata:sub(1,#bufferdata-1)
+ dn = dn .. "\n" .. sub(bufferdata,1,#bufferdata-1)
end
- dn = dn:gsub("[\010\013]$","")
+ dn = gsub(dn,"[\010\013]$","")
if flags.store_as_table then
dn = dn:splitlines()
end
@@ -104,23 +113,25 @@ function buffers.verbatimbreak(n,m)
if flags.optimize_verbatim then
if n == 2 or n == m then
texsprint(no_break_command)
- else
+ elseif n > 1 then
texsprint(do_break_command)
end
end
end
-function buffers.strip(lines)
- local first, last = 1, #lines
+function buffers.strip(lines,first,last)
+ local first, last = first or 1, last or #lines
for i=first,last do
- if #lines[i] == 0 then
+ local li = lines[i]
+ if #li == 0 or find(li,"^%s*$") then
first = first + 1
else
break
end
end
for i=last,first,-1 do
- if #lines[i] == 0 then
+ local li = lines[i]
+ if #li == 0 or find(li,"^%s*$") then
last = last - 1
else
break
@@ -129,15 +140,62 @@ function buffers.strip(lines)
return first, last, last - first + 1
end
-function buffers.type(name)
+function buffers.range(lines,first,last,range) -- 1,3 1,+3 fromhere,tothere
+ local first, last = first or 1, last or #lines
+ local what = aux.settings_to_array(range)
+ local r_first, r_last = what[1], what[2]
+ local f, l = tonumber(r_first), tonumber(r_last)
+ if r_first then
+ if f then
+ if f > first then
+ first = f
+ end
+ else
+ for i=first,last do
+ if find(lines[i],r_first) then
+ first, strip = i + 1
+ break
+ end
+ end
+ end
+ end
+ if r_last then
+ if l then
+ if find(r_last,"^[%+]") then -- 1,+3
+ l = first + l
+ end
+ if l < last then
+ last = l
+ end
+ else
+ for i=first,last do
+ if find(lines[i],r_last) then
+ last = i - 1
+ break
+ end
+ end
+ end
+ end
+ return first, last
+end
+
+function buffers.type(name,realign,range)
local lines = data[name]
local action = buffers.typeline
if lines then
if type(lines) == "string" then
lines = lines:splitlines()
+ data[name] = lines
+ end
+ if realign then
+ lines = buffers.realign(lines,realign)
end
local line, n = 0, 0
local first, last, m = buffers.strip(lines)
+ if range then
+ first, last = buffers.range(lines,first,last,range)
+ first, last = buffers.strip(lines,first,last)
+ end
hooks.begin_of_display()
for i=first,last do
n, line = action(lines[i], n, m, line)
@@ -153,16 +211,34 @@ function buffers.loaddata(filename) -- this one might go away
if not str then
ok, str, n = resolvers.loaders.tex(file.addsuffix(filename,'tex'))
end
- return str or ""
end
-function buffers.typefile(name) -- still somewhat messy, since name can be be suffixless
+function buffers.loaddata(filename) -- this one might go away
+ local foundname = resolvers.findtexfile(filename) or ""
+ if foundname == "" then
+ foundname = resolvers.findtexfile(file.addsuffix(filename,'tex')) or ""
+ end
+ if foundname == "" then
+ return ""
+ else
+ return resolvers.loadtexfile(foundname)
+ end
+end
+
+function buffers.typefile(name,realign,range) -- still somewhat messy, since name can be be suffixless
local str = buffers.loaddata(name)
if str and str~= "" then
local lines = str:splitlines()
+ if realign then
+ lines = buffers.realign(lines,realign)
+ end
local line, n, action = 0, 0, buffers.typeline
local first, last, m = buffers.strip(lines)
hooks.begin_of_display()
+ if range then
+ first, last = buffers.range(lines,first,last,range)
+ first, last = buffers.strip(lines,first,last)
+ end
for i=first,last do
n, line = action(lines[i], n, m, line)
end
@@ -173,7 +249,7 @@ end
function buffers.typeline(str,n,m,line)
n = n + 1
buffers.verbatimbreak(n,m)
- if str:find("%S") then
+ if find(str,"%S") then
line = line + 1
hooks.begin_of_line(line)
hooks.flush_line(hooks.line(str))
@@ -187,28 +263,51 @@ function buffers.typeline(str,n,m,line)
return n, line
end
-function buffers.save(name,list,encapsulate)
- if not name or name == "" then
- name = tex.jobname
- end
- if list then
- -- ok
- else
+-- The optional prefix hack is there for the typesetbuffer feature and
+-- in mkii we needed that (this hidden feature is used in a manual).
+
+local function prepared(name,list) -- list is optional
+ if not list or list == "" then
list = name
- name = tex.jobname .. "-" .. name .. ".tmp"
end
- local content = buffers.collect(list)
+ if not name or name == "" then
+ name = tex.jobname .. "-" .. list .. ".tmp"
+ end
+ local content = buffers.collect(list,nil) or ""
if content == "" then
content = "empty buffer"
end
- if encapsulate then
- io.savedata(name, "\\starttext\n"..content.."\n\\stoptext\n")
- else
- io.savedata(name, content)
+ return name, content
+end
+
+local capsule = "\\starttext\n%s\n\\stoptext\n"
+local command = "context %s"
+
+function buffers.save(name,list,encapsulate) -- list is optional
+ local name, content = prepared(name,list)
+ io.savedata(name, (encapsulate and format(capsule,content)) or content)
+end
+
+function commands.savebuffer(list,name) -- name is optional
+ buffers.save(name,list)
+end
+
+function buffers.run(name,list,encapsulate)
+ local name, content = prepared(name,list)
+ local data = io.loaddata(name)
+ content = (encapsulate and format(capsule,content)) or content
+ if data ~= content then
+ if trace_run then
+ commands.writestatus("buffers","changes in '%s', processing forced",name)
+ end
+ io.savedata(name,content)
+ os.execute(format(command,name))
+ elseif trace_run then
+ commands.writestatus("buffers","no changes in '%s', not processed",name)
end
end
-local printer = (lpeg.linebyline/texprint)^0
+local printer = (lpeg.patterns.textline/texprint)^0
function buffers.get(name)
local b = buffers.data[name]
@@ -218,7 +317,7 @@ function buffers.get(name)
texprint(b[i])
end
else
- printer:match(b)
+ lpegmatch(printer,b)
end
end
end
@@ -240,21 +339,15 @@ buffers.content = content
function buffers.collect(names,separator) -- no print
-- maybe we should always store a buffer as table so
- -- that we can pass if directly
+ -- that we can pass it directly
+ if type(names) == "string" then
+ names = aux.settings_to_array(names)
+ end
local t = { }
- if type(names) == "table" then
- for i=1,#names do
- local c = content(names[i],separator)
- if c ~= "" then
- t[#t+1] = c
- end
- end
- else
- for name in names:gmatch("[^,%s]+") do
- local c = content(name,separator)
- if c ~= "" then
- t[#t+1] = c
- end
+ for i=1,#names do
+ local c = content(names[i],separator)
+ if c ~= "" then
+ t[#t+1] = c
end
end
return concat(t,separator or "\r") -- "\n" is safer due to comments and such
@@ -274,11 +367,12 @@ function buffers.inspect(name)
local b = data[name]
if b then
if type(b) == "table" then
- for _,v in ipairs(b) do
+ for k=1,#b do
+ local v = b[k]
if v == "" then
texsprint(ctxcatcodes,"[crlf]\\par ") -- space ?
else
- texsprint(ctxcatcodes,(gsub(b,"(.)",tobyte)),"\\par")
+ texsprint(ctxcatcodes,(gsub(v,"(.)",tobyte)),"\\par")
end
end
else
@@ -289,42 +383,90 @@ end
-- maybe just line(n,str) empty(n,str)
-visualizers.handlers = visualizers.handlers or { }
-visualizers.escapetoken = nil
-visualizers.tablength = 7
-visualizers.enabletab = true -- false
-visualizers.enableescape = false
-visualizers.obeyspace = true
+visualizers.tablength = 7
+visualizers.enabletab = true -- false
+visualizers.obeyspace = true
+
+function buffers.settablength(tablength)
+ visualizers.tablength = tablength and tonumber(tablength) or 7
+end
+
+visualizers.handlers = visualizers.handlers or { }
local handlers = visualizers.handlers
function buffers.newvisualizer(name)
+ name = lower(name)
local handler = { }
handlers[name] = handler
return handler
end
function buffers.getvisualizer(name)
- return handlers[name]
+ name = lower(name)
+ return handlers[name] or buffers.loadvisualizer(name)
end
-local default = buffers.newvisualizer("default")
+function buffers.loadvisualizer(name)
+ name = lower(name)
+ local hn = handlers[name]
+ if hn then
+ return hn
+ else
+ environment.loadluafile("pret-" .. name)
+ local hn = handlers[name]
+ if not hn then
+ -- hn = buffers.newvisualizer(name)
+ hn = handlers[visualizers.defaultname]
+ handlers[name] = hn
+ if trace_visualize then
+ logs.report("buffers","mapping '%s' visualizer onto '%s'",name,visualizers.defaultname)
+ end
+ elseif trace_visualize then
+ logs.report("buffers","loading '%s' visualizer",name)
+ end
+ return hn
+ end
+end
+
+-- was "default", should be set at tex end (todo)
+
+local default = buffers.newvisualizer(visualizers.defaultname)
+
+--~ print(variables.typing) os.exit()
+
+-- will become cleaner
local currentvisualizer, currenthandler
function buffers.setvisualizer(str)
currentvisualizer = lower(str)
currenthandler = handlers[currentvisualizer]
- if not currenthandler then
- currentvisualizer = 'default'
+ if currenthandler then
+ -- if trace_visualize then
+ -- logs.report("buffers","enabling specific '%s' visualizer",currentvisualizer)
+ -- end
+ else
+ currentvisualizer = visualizers.defaultname
currenthandler = handlers.default
+ -- if trace_visualize then
+ -- logs.report("buffers","enabling default visualizer '%s'",currentvisualizer)
+ -- end
end
if currenthandler.reset then
currenthandler.reset()
end
end
-buffers.setvisualizer("default")
+function buffers.resetvisualizer()
+ currentvisualizer = visualizers.defaultname
+ currenthandler = handlers.default
+ if currenthandler.reset then
+ currenthandler.reset()
+ end
+end
+
+buffers.setvisualizer(visualizers.defaultname)
function visualizers.reset()
end
@@ -351,10 +493,15 @@ function hooks.end_of_inline()
(currenthandler.end_of_inline or default.end_of_inline)()
end
-
function hooks.flush_line(str,nesting)
- str = gsub(str," *[\n\r]+ *"," ") ; -- semi colon needed
- (currenthandler.flush_line or default.flush_line)(str,nesting)
+ local fl = currenthandler.flush_line
+ if fl then
+ str = gsub(str," *[\n\r]+ *"," ") ; -- semi colon needed
+ fl(str,nesting)
+ else
+ -- gsub done later
+ default.flush_line(str,nesting)
+ end
end
function hooks.flush_inline(str,nesting)
@@ -419,11 +566,11 @@ function default.line(str)
end
function default.flush_line(str)
- str = str:gsub(" *[\n\r]+ *"," ")
+ str = gsub(str," *[\n\r]+ *"," ")
if visualizers.obeyspace then
for c in utfcharacters(str) do
if c == " " then
- texsprint(ctxcatcodes,"\\obs ")
+ texsprint(ctxcatcodes,"\\obs")
else
texwrite(c)
end
@@ -454,13 +601,14 @@ end
-- special one
-commands.nested = "\\switchslantedtype "
+buffers.commands.nested = "\\switchslantedtype "
-- todo : utf + faster, direct print and such. no \\char, vrb catcodes, see end
function visualizers.flush_nested(str, enable) -- no utf, kind of obsolete mess
- str = str:gsub(" *[\n\r]+ *"," ")
+ str = gsub(str," *[\n\r]+ *"," ")
local result, c, nested, i = "", "", 0, 1
+ local commands = buffers.commands -- otherwise wrong commands
while i < #str do -- slow
c = sub(str,i,i+1)
if c == "<<" then
@@ -481,7 +629,7 @@ function visualizers.flush_nested(str, enable) -- no utf, kind of obsolete mess
c = sub(str,i,i)
if c == " " then
result = result .. "\\obs "
- elseif c:find("%a") then
+ elseif find(c,"%a") then
result = result .. c
else
result = result .. "\\char" .. byte(c) .. " "
@@ -546,6 +694,106 @@ function buffers.flush_result(result,nested)
end
end
+-- new
+
+function buffers.realign(name,forced_n) -- no, auto, <number>
+ local n, d
+ if type(name) == "string" then
+ d = data[name]
+ if type(d) == "string" then
+ d = d:splitlines()
+ end
+ else
+ d = name -- already a buffer
+ end
+ forced_n = (forced_n == variables.auto and huge) or tonumber(forced_n)
+ if forced_n then
+ for i=1, #d do
+ local spaces = find(d[i],"%S")
+ if not spaces then
+ -- empty line
+ elseif not n then
+ n = spaces
+ elseif spaces == 0 then
+ n = 0
+ break
+ elseif n > spaces then
+ n = spaces
+ end
+ end
+ if n > 0 then
+ if n > forced_n then
+ n = forced_n
+ end
+ for i=1,#d do
+ d[i] = sub(d[i],n)
+ end
+ end
+ end
+ return d
+end
+
+-- escapes: buffers.set_escape("tex","/BTEX","/ETEX")
+
+local function flush_escaped_line(str,pattern,flushline)
+ while true do
+ local a, b, c = match(str,pattern)
+ if a and a ~= "" then
+ flushline(a)
+ end
+ if b and b ~= "" then
+ texsprint(ctxcatcodes,"{",b,"}")
+ end
+ if c then
+ if c == "" then
+ break
+ else
+ str = c
+ end
+ else
+ flushline(str)
+ break
+ end
+ end
+end
+
+function buffers.set_escape(name,pair)
+ if pair and pair ~= "" then
+ local visualizer = buffers.getvisualizer(name)
+ visualizer.normal_flush_line = visualizer.normal_flush_line or visualizer.flush_line
+ if pair == variables.no then
+ visualizer.flush_line = visualizer.normal_flush_line or visualizer.flush_line
+ if trace_visualize then
+ logs.report("buffers","resetting escape range for visualizer '%s'",name)
+ end
+ else
+ local start, stop
+ if pair == variables.yes then
+ start, stop = "/BTEX", "/ETEX"
+ else
+ pair = string.split(pair,",")
+ start, stop = string.esc(pair[1] or ""), string.esc(pair[2] or "")
+ end
+ if start ~= "" then
+ local pattern
+ if stop == "" then
+ pattern = "^(.-)" .. start .. "(.*)(.*)$"
+ else
+ pattern = "^(.-)" .. start .. "(.-)" .. stop .. "(.*)$"
+ end
+ function visualizer.flush_line(str)
+ flush_escaped_line(str,pattern,visualizer.normal_flush_line)
+ end
+ if trace_visualize then
+ logs.report("buffers","setting escape range for visualizer '%s' to %s -> %s",name,start,stop)
+ end
+ elseif trace_visualize then
+ logs.report("buffers","problematic escape specification '%s' for visualizer '%s'",pair,name)
+ end
+ end
+ end
+end
+
-- THIS WILL BECOME A FRAMEWORK: the problem with prety printing is that
-- we deal with snippets and therefore we need tolerant parsing
@@ -587,6 +835,4 @@ end
--~ str = [[test 123 test $oeps$]]
---~ pattern:match(str)
-
-
+--~ lpegmatch(pattern,str)
diff --git a/Master/texmf-dist/tex/context/base/buff-ini.mkii b/Master/texmf-dist/tex/context/base/buff-ini.mkii
index 0f0655ea126..fc147d09041 100644
--- a/Master/texmf-dist/tex/context/base/buff-ini.mkii
+++ b/Master/texmf-dist/tex/context/base/buff-ini.mkii
@@ -188,15 +188,15 @@
\letvalue{\??bu#1\c!number }\nofdefinedbuffers
\letvalue{\??bu#1\c!paragraph}\v!no
\setevalue{\e!start#1}{\noexpand\dostartbuffer[#1][def-\nofdefinedbuffers][\e!start#1][\e!stop#1]}%
- \setevalue{\e!get #1}{\noexpand\dogetbuffer [#1][def-\nofdefinedbuffers]}%
- \setevalue{\e!type #1}{\noexpand\dotypebuffer [#1][def-\nofdefinedbuffers]}%
+ \unexpanded\setevalue{\e!get #1}{\noexpand\dogetbuffer [#1][def-\nofdefinedbuffers]}%
+ \unexpanded\setevalue{\e!type #1}{\noexpand\dotypebuffer [#1][def-\nofdefinedbuffers]}%
\getparameters[\??bu#1][#2]%
\fi}
\def\definebuffer
{\dodoubleempty\dodefinebuffer}
-\def\getbuffer
+\unexpanded\def\getbuffer
{\dodoubleempty\dogetbuffer}
\def\dogetbuffer[#1][#2]%
@@ -213,7 +213,7 @@
\dobuffer{16}{#2}\dogetbufferasis
\getvalue{\??bu#1\c!after}}
-\def\typebuffer
+\unexpanded\def\typebuffer
{\dodoubleempty\dotypebuffer}
\def\dogetfilebuffer{\typefile{\TEXbufferfile{\currentbuffer}}}
diff --git a/Master/texmf-dist/tex/context/base/buff-ini.mkiv b/Master/texmf-dist/tex/context/base/buff-ini.mkiv
index 29ce4687de9..86b0fa3c530 100644
--- a/Master/texmf-dist/tex/context/base/buff-ini.mkiv
+++ b/Master/texmf-dist/tex/context/base/buff-ini.mkiv
@@ -51,11 +51,7 @@
% \stoptext
\ifdefined\doinitializeverbatim \else% temp hack
- \ifdefined\mkinitializeverbatim
- \let\doinitializeverbatim\mkinitializeverbatim
- \else
- \def\doinitializeverbatim{\tttf}
- \fi
+ \def\doinitializeverbatim{\tttf}
\fi
\unprotect
@@ -150,7 +146,7 @@
\ctxlua{buffers.set("\currentbuffer", \!!bs\detokenize{#2}\!!es)}%
\endgroup}
-\def\setupbuffer
+\unexpanded\def\setupbuffer
{\dodoubleempty\dosetupbuffer}
\def\dosetupbuffer[#1][#2]%
@@ -165,16 +161,19 @@
\doglobal\increment\nofdefinedbuffers
\letvalue{\??bu#1\c!number }\nofdefinedbuffers
\letvalue{\??bu#1\c!paragraph}\v!no
- \setevalue{\e!start#1}{\noexpand\dostartbuffer[#1][def-\nofdefinedbuffers][\e!start#1][\e!stop#1]}%
- \setevalue{\e!get #1}{\noexpand\dogetbuffer [#1][def-\nofdefinedbuffers]}%
- \setevalue{\e!type #1}{\noexpand\dotypebuffer [#1][def-\nofdefinedbuffers]}%
+ \setuevalue{\e!start#1}{\noexpand\dostartbuffer[#1][def-\nofdefinedbuffers][\e!start#1][\e!stop#1]}% maybe also relax stop
+ \setuevalue{\e!get #1}{\noexpand\dogetbuffer [#1][def-\nofdefinedbuffers]}%
+ \setuevalue{\e!type #1}{\noexpand\dotypebuffer [#1][def-\nofdefinedbuffers]}%
\getparameters[\??bu#1][#2]%
\fi}
-\def\definebuffer
+\unexpanded\def\definebuffer
{\dodoubleempty\dodefinebuffer}
+
+\def\thebuffernumber#1%
+ {\csname\??bu#1\c!number\endcsname}
-\def\getbuffer
+\unexpanded\def\getbuffer
{\dodoubleempty\dogetbuffer}
\def\dogetbuffer[#1][#2]%
@@ -191,18 +190,18 @@
\dobuffer{16}{#2}\dogetbufferasis
\getvalue{\??bu#1\c!after}}
-\def\typebuffer
+\unexpanded\def\typebuffer
{\dodoubleempty\dotypebuffer}
\def\doprocessbufferverbatim
{\doinitializeverbatim
- \ctxlua{buffers.type("\currentbuffer")}}
+ \ctxlua{buffers.type("\currentbuffer","\typingparameter\c!strip")}}
\def\doprocessbufferlinesverbatim#1#2#3%
{#2%
% todo, set up numbers
\doinitializeverbatim
- \ctxlua{buffers.type("\currentbuffer")}
+ \ctxlua{buffers.type("\currentbuffer","\typingparameter\c!strip")}
#3}
\def\doifelsebuffer#1%
@@ -276,20 +275,20 @@
\ifsecondargument
\dosetbufferoffset{#1}%
\doifelse{#2}\v!all
- {\def\startbufferparagraph{\normalbufferparagraph{#1}}}
- {\def\startbufferparagraph{\filterbufferparagraph{#1}{#2}}}%
- \def\stopbufferparagraph{\dostopbufferparagraph{#1}}%
+ {\unexpanded\def\startbufferparagraph{\normalbufferparagraph{#1}}}
+ {\unexpanded\def\startbufferparagraph{\filterbufferparagraph{#1}{#2}}}%
+ \unexpanded\def\stopbufferparagraph{\dostopbufferparagraph{#1}}%
\def\next{\getparagraphedbuffer[#1]}%
\else
\dosetbufferoffset\empty
- \def\startbufferparagraph{\filterbufferparagraph{}{#1}}%
- \def\stopbufferparagraph{\dostopbufferparagraph{}}%
+ \unexpanded\def\startbufferparagraph{\filterbufferparagraph{}{#1}}%
+ \unexpanded\def\stopbufferparagraph{\dostopbufferparagraph{}}%
\def\next{\getparagraphedbuffer[]}%
\fi
\else
\dosetbufferoffset\empty
- \def\startbufferparagraph{\normalbufferparagraph{}}%
- \def\stopbufferparagraph{\dostopbufferparagraph{}}%
+ \unexpanded\def\startbufferparagraph{\normalbufferparagraph{}}%
+ \unexpanded\def\stopbufferparagraph{\dostopbufferparagraph{}}%
\def\next{\getparagraphedbuffer[]}%
\fi
\next}
@@ -329,7 +328,7 @@
\def\fakebufferparagraph#1%
{\bgroup
- \def\stopbufferparagraph{\dostopbufferparagraph{#1}\egroup\egroup}%
+ \unexpanded\def\stopbufferparagraph{\dostopbufferparagraph{#1}\egroup\egroup}%
\setbox\scratchbox\vbox\bgroup\dostartbufferparagraph{#1}}
% definitions
@@ -342,8 +341,15 @@
\c!after=]
% only mkiv:
+%
+% \startbuffer[x]
+% x
+% \stopbuffer
+%
+% \savebuffer[x][temp.log]
+
+\unexpanded\def\savebuffer{\dodoubleempty\dosavebuffer}
-\def\savebuffer{\dosingleempty\dosavebuffer}
-\def\dosavebuffer[#1]{\ctxlua{buffers.save("#1")}}
+\def\dosavebuffer[#1][#2]{\ctxlua{commands.savebuffer("#1","#2")}}
\protect \endinput
diff --git a/Master/texmf-dist/tex/context/base/buff-ver.mkii b/Master/texmf-dist/tex/context/base/buff-ver.mkii
index 6b3817a7028..e7ad5474f37 100644
--- a/Master/texmf-dist/tex/context/base/buff-ver.mkii
+++ b/Master/texmf-dist/tex/context/base/buff-ver.mkii
@@ -144,7 +144,6 @@
\let\obeycharacters\setupprettytype
\let\obeytabs\ignoretabs}
-
\def\setupcommonverbatim
{\recatcodeuppercharactersfalse % obey regime / encoding
%
@@ -577,11 +576,13 @@
\veryraggedright}
\def\ignorehyphens
- {% \language\minusone % extra bonus, the \null should do the job too
+ {% \nohyphens % forgotten when no \par
+ \normallanguage\minusone % fails as the font redoes the language
\def\obeyedspace {\hskip\interwordspace\relax}% better than spaceskip
\def\controlspace{\hskip\zeropoint\hbox{\normalcontrolspace}\hskip\zeropoint\relax}%
\spaceskip.5em\relax}
+
\unexpanded\def\typ
{\bgroup
\let\@@tylines\v!hyphenated
@@ -634,6 +635,11 @@
\unexpanded\def\mat{\groupedcommand{\setgroupedtype\$}{\$}}
\unexpanded\def\dis{\groupedcommand{\setgroupedtype\$\$}{\$\$}}
+\let\normaltexttex\tex
+\let\normaltextarg\arg
+\let\normaltextmat\mat
+\let\normaltextdis\dis
+
%D \macros
%D {starttyping}
%D
diff --git a/Master/texmf-dist/tex/context/base/buff-ver.mkiv b/Master/texmf-dist/tex/context/base/buff-ver.mkiv
index 28e3e60d501..dacbdb7ac99 100644
--- a/Master/texmf-dist/tex/context/base/buff-ver.mkiv
+++ b/Master/texmf-dist/tex/context/base/buff-ver.mkiv
@@ -17,9 +17,9 @@
\unprotect
-\ifx\startlinenumbering\undefined \let\startlinenumbering\relax \fi
-\ifx\stoplinenumbering \undefined \let\stoplinenumbering\relax \fi
-\ifx\setuplinenumbering\undefined \def\setuplinenumbering[#1]{} \fi
+\ifdefined\startlinenumbering\else \let\startlinenumbering \relax \fi
+\ifdefined\stoplinenumbering \else \let\stoplinenumbering \relax \fi
+\ifdefined\setuplinenumbering\else \unexpanded\def\setuplinenumbering[#1]{} \fi
% D \macros
% D {iflinepar}
@@ -66,16 +66,17 @@
\uppercasestring#2\to\asciib
\setevalue{\??ty\??ty\asciia}{\asciib}}
-\def\setupprettiesintype#1%
+\unexpanded\def\setupprettiesintype#1%
{\uppercasestring#1\to\ascii
\edef\prettyidentifier{\executeifdefined{\??ty\??ty\ascii}{TEX}}%
\begingroup
% we can move this to lua
- \lowercasestring \f!prettyprefix\prettyidentifier\to\filename
- \doonlyonce\filename{\ctxloadluafile\filename\empty}%
+ % \lowercasestring \f!prettyprefix\prettyidentifier\to\filename
+ % \doonlyonce\filename{\ctxloadluafile\filename\empty}%
+ \ctxlua{buffers.loadvisualizer("\ascii")}%
\endgroup}
-\def\setupprettytype
+\unexpanded\def\setupprettytype
{\processingverbatimtrue % will move
\ctxlua{buffers.visualizers.reset()}}
@@ -84,7 +85,7 @@
\spaceskip\wd\scratchbox
\xspaceskip\spaceskip}
-\let\obeycharacters\relax
+\let\obeycharacters\relax % tab mess can go
\setvalue{\??tp:\c!lines:\v!yes }{\obeybreakpoints}
\setvalue{\??tp:\c!lines:\v!hyphenated}{\obeyhyphens}
@@ -93,59 +94,65 @@
%setvalue{\??tp:\c!empty:\v!all }{\obeyallemptylines}
\setvalue{\??tp:\c!option:\v!none }{\let\obeycharacters\relax}
-\setvalue{\??tp:\c!option:\v!color }{\setupprettiesintype{TEX}%
- \let\obeycharacters\setupprettytype
- \let\obeytabs\ignoretabs}
+\setvalue{\??tp:\c!option:\empty }{\let\obeycharacters\relax}
+\setvalue{\??tp:\c!option:\v!color }{\setupprettiesintype{\typingparameter\c!option}%
+ \let\obeycharacters\setupprettytype}
\setvalue{\??tp:\c!option:\v!normal }{\let\obeycharacters\setupgroupedtype}
-\setvalue{\??tp:\c!option:\v!commands }{\def\obeycharacters{\setupcommandsintype}%
- \let\obeytabs\ignoretabs}
-\setvalue{\??tp:\c!option:\v!slanted }{\let\obeycharacters\setupslantedtype
- \let\obeytabs\ignoretabs}
+\setvalue{\??tp:\c!option:\v!slanted }{\let\obeycharacters\setupslantedtype}
\setvalue{\??tp:\c!option:\s!unknown }{\setupprettiesintype{\typingparameter\c!option}%
- \let\obeycharacters\setupprettytype
- \let\obeytabs\ignoretabs}
+ \let\obeycharacters\setupprettytype}
+%setvalue{\??tp:\c!option:\v!commands }{\def\obeycharacters{\setupcommandsintype}}
\def\dosetverbatimfont
{\redoconvertfont\dosetfontattribute{\currenttypingclass\currenttyping}\c!style
\normalnoligatures\font}
-\def\setupcommonverbatim
+\unexpanded\def\setupcommonverbatim
{\let\prettyidentifier\s!default
%
-% \doifelse{\typingparameter\c!text}\v!yes
-% \naturaltextexttrue
-% \naturaltextextfalse
\def\prettyidentifierfont{\typingparameter\c!icommand}%
\def\prettyvariablefont {\typingparameter\c!vcommand}%
\def\prettynaturalfont {\typingparameter\c!ccommand}%
%
- \doif{\typingparameter\c!space}\v!on
- {\def\obeyspaces{\setcontrolspaces}}%
- \doif{\typingparameter\c!page }\v!no
- {\def\obeypages {\ignorepages}}%
- %
\ignorehyphens % default
\getvalue{\??tp:\c!lines:\typingparameter\c!lines}%
\getvalue{\??tp:\c!empty:\typingparameter\c!empty}%
\getvalue{\??tp:\c!option:\ifcsname\??tp:\c!option:\typingparameter\c!option\endcsname\typingparameter\c!option\else\s!unknown\fi}%
- \doifnumberelse{\typingparameter\c!tab}
- {\def\obeytabs{\setfixedtabskips{\typingparameter\c!tab}}}%
- \donothing
\setupverbatimcolor}
\newtoks \everyinitializeverbatim
-\def\doinitializeverbatim
+\def\ignorebeginofpretty [#1]{}
+\def\ignoreendofpretty {}
+
+\def\doverbatimbop{\bgroup\beginofpretty}
+\def\doverbatimeop{\endofpretty\egroup}
+\def\doverbatimsop{\endofpretty\egroup\bgroup\beginofpretty}
+
+\let\noverbatimbop\ignorebeginofpretty
+\let\noverbatimeop\ignoreendofpretty
+\let\noverbatimsop\ignorebeginofpretty
+
+\def\doinitializeverbatim % todo: combine all in one call is faster
{\ctxlua{buffers.visualizers.reset()}%
- \def\obs{\obeyedspace}%
+ \doifelse{\typingparameter\c!space}\v!on
+ {\let\obs\fastcontrolspace}%
+ {\let\obs\specialobeyedspace}%
+ \edef\askedverbatimtab{\typingparameter\c!tab}%
+ \doifelse\askedverbatimtab\v!no
+ {\ctxlua{buffers.settablength(1)}}
+ {\doifnumberelse{\askedverbatimtab}
+ {\ctxlua{buffers.settablength(\askedverbatimtab)}}
+ {\ctxlua{buffers.settablength()}}}%
\ctxlua{buffers.doifelsevisualizer("\prettyidentifier")}
{\ctxlua{buffers.setvisualizer("\prettyidentifier")}%
- \def\bop{\bgroup\beginofpretty}%
- \def\eop{\endofpretty\egroup}%
- \def\sop{\endofpretty\egroup\bgroup\beginofpretty}}%
- {\let\bop\donothing
- \let\eop\donothing
- \let\sop\donothing}%
+ \let\bop\doverbatimbop
+ \let\eop\doverbatimeop
+ \let\sop\doverbatimsop}%
+ {\ctxlua{buffers.setvisualizer("\v!typing")}% or resetdefaultvisualizer
+ \let\bop\noverbatimbop
+ \let\eop\noverbatimeop
+ \let\sop\noverbatimsop}%
\relax\the\everyinitializeverbatim\relax}
\appendtoks
@@ -163,14 +170,54 @@
% \typeTEX{\example---oeps}. this---ligates---again.
% \type {\example---oeps}. this---ligates---again.
-\def\setupcommandsintype % can also be \string\
- {\ctxlua{
- buffers.visualizers.enableescape = true
- buffers.visualizers.escapetoken = \!!bs\typingparameter\c!escape\!!es
- }%
- \setevalue{\typingparameter\c!escape}{\typingparameter\c!escape}}
+%D \startbuffer
+%D \setuptyping[TEX][escape=yes]
+%D
+%D \startTEX
+%D /BTEX\em sometex/ETEX
+%D /BTEX\em sometex/ETEX \after
+%D \before /BTEX\em sometex/ETEX
+%D \before /BTEX\em sometex/ETEX \after
+%D \before /BTEX\em sometex/ETEX \inbetween /BTEX\em sometex/ETEX \after
+%D \before \after
+%D \stopTEX
+%D \stopbuffer
+%D
+%D \typebuffer \start \getbuffer \stop
+%D
+%D \startbuffer
+%D \setuptyping[TEX][escape={[[,]]}]
+%D
+%D \startTEX
+%D [[\em sometex]]
+%D [[\em sometex]] \after
+%D \before [[\em sometex]]
+%D \before [[\em sometex]] \after
+%D \before [[\em sometex]] \inbetween [[\em sometex]] \after
+%D \before \after
+%D \stopTEX
+%D \stopbuffer
+%D
+%D \typebuffer \start \getbuffer \stop
+%D
+%D \startbuffer
+%D \setuptyping[TEX][escape=//]
+%D
+%D \startTEX
+%D //\em sometex
+%D \before //\em sometex
+%D \stopTEX
+%D
+%D \typebuffer \start \getbuffer \stop
+
+\unexpanded\def\setupcommandsintype
+ {\ctxlua{buffers.set_escape("\currenttyping",\!!bs\typingparameter\c!escape\!!es)}}
+
+\appendtoks
+ \setupcommandsintype
+\to \everyinitializeverbatim
-\def\setupslantedtype
+\unexpanded\def\setupslantedtype
{\slantedtypepermittedtrue}
\ifx\setupprettytype \undefined \let\setupprettytype \relax \fi
@@ -272,15 +319,6 @@
\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\dodotype
{\ifx\next\bgroup
\@EA\dodotypeA
@@ -362,19 +400,15 @@
\setupcommonverbatim
%\dosetverbatimfont
%\setverbatimspaceskip
- %\let\obeytabs \ignoretabs % probably not needed
- %\let\obeylines\ignorelines % probably not needed
- %\let\obeypages\ignorepages % probably not needed
%\setupcopyverbatim % not needed
- \setcatcodetable\vrbcatcodes
- }
+ \setcatcodetable\vrbcatcodes}
%D \macros
%D {setuptype}
%D
%D Some characteristics of \type{\type} can be set up by:
-\def\setuptype
+\unexpanded\def\setuptype
{\dodoubleempty\dosetuptype}
\def\dosetuptype[#1][#2]%
@@ -407,7 +441,7 @@
\veryraggedright}
\def\ignorehyphens
- {% \language\minusone % extra bonus, the \null should do the job too
+ {\language\minusone % extra bonus, the \null should do the job too
\let\obeyedspace \specialobeyedspace
\let\controlspace\specialcontrolspace
\spaceskip.5em\relax}
@@ -465,6 +499,19 @@
\unexpanded\def\mat{\groupedcommand{\setgroupedtype\$}{\$}}
\unexpanded\def\dis{\groupedcommand{\setgroupedtype\$\$}{\$\$}}
+\let\normaltexttex\tex
+\let\normaltextarg\arg
+\let\normaltextmat\mat
+\let\normaltextdis\dis
+
+\def\astype
+ {\groupedcommand\dorawtype\relax}
+
+\def\dorawtype
+ {\let\currenttypingclass\??ty
+ \normalverbatimcolor % \verbatimcolor
+ \dosetverbatimfont}
+
%D \macros
%D {starttyping}
%D
@@ -491,9 +538,9 @@
{\setxvalue{\currenttypingclass\currenttyping#1}{#2}}
\setvalue{\??tp:\c!blank:\v!standard}{\ctxparskip}
-\setvalue{\??tp:\c!blank:\v!small }{\blankokleinmaat}
-\setvalue{\??tp:\c!blank:\v!medium }{\blankomiddelmaat}
-\setvalue{\??tp:\c!blank:\v!big }{\blankogrootmaat}
+\setvalue{\??tp:\c!blank:\v!small }{\smallskipamount}
+\setvalue{\??tp:\c!blank:\v!medium }{\medskipamount}
+\setvalue{\??tp:\c!blank:\v!big }{\bigskipamount}
\setvalue{\??tp:\c!blank:\v!halfline}{.5\baselineskip}
\setvalue{\??tp:\c!blank:\v!line }{\baselineskip}
\setvalue{\??tp:\c!blank:\v!none }{\zeropoint}
@@ -519,9 +566,11 @@
\else
\doadaptleftskip{\typingparameter\c!margin}%
\fi
+ % no symbolic blanks !
\edef\!!stringa{\executeifdefined{\??bo\typingparameter\c!blank}{\typingparameter\c!blank}}%
\scratchskip\executeifdefined{\??tp:\c!blank:\!!stringa}\!!stringa\relax
\ifgridsnapping
+ % this will be adapted
\ifdim\scratchskip=.5\baselineskip\relax
\edef\verbatimbaselineskip{\the\scratchskip}% new
\else
@@ -530,6 +579,7 @@
\else
\edef\verbatimbaselineskip{\the\scratchskip}%
\fi
+\doifsomething{\typingparameter\c!align}{\setupalign[\typingparameter\c!align]}%
\setupcommonverbatim}
%D The basic display verbatim commands are defined in an
@@ -582,22 +632,21 @@
\def\dotypefileverbatim
{\doinitializeverbatim
- \ctxlua{buffers.typefile("\readfilename")}}
+ \beginofverbatimlines
+ \ctxlua{buffers.typefile("\readfilename","\typingparameter\c!strip","\typingparameter\c!range")}%
+ \endofverbatimlines}
\def\dotypefilelinesverbatim#1#2%
- {#1%
- \doinitializeverbatim
- \ctxlua{buffers.typefile("\readfilename")}%
- #2}
+ {#1\dotypefileverbatim#2}
\unexpanded\def\dotypeblockverbatim#1#2%
- {\dowithbuffer{_typing_}{#1}{#2}
- {}
- {\doinitializeverbatim
- \beginofverbatimlines
- \ctxlua{buffers.type("_typing_")}%
- \endofverbatimlines
- \csname#2\endcsname}}
+ {\dowithbuffer{_typing_}{#1}{#2}
+ {}
+ {\doinitializeverbatim
+ \beginofverbatimlines
+ \ctxlua{buffers.type("_typing_","\typingparameter\c!strip","\typingparameter\c!range")}%
+ \endofverbatimlines
+ \csname#2\endcsname}}
\def\dododostarttyping[#1]%
{\typingparameter\c!before
@@ -612,8 +661,7 @@
{\stopverbatimcolor
\stoppacked % includes \egroup
\typingparameter\c!after
- \egroup
- \dochecknextindentation{\??tp#1}%
+ \normalexpanded{\egroup\checknextindentation[\typingparameter\c!indentnext]}%
\dorechecknextindentation}
%D Line numbering for files is combined with filtering, while
@@ -630,7 +678,7 @@
%D ...
%D \stopcode
%D
-%D \startcode[continue]
+%D \startcode[start=continue]
%D ...
%D ...
%D \stopcode
@@ -640,6 +688,27 @@
%D \stopcode
%D \stoptyping
+%D Ranges:
+%D
+%D \starttyping
+%D % label:start:one
+%D
+%D \def\MyMacro
+%D {just an example}
+%D
+%D % label:stop:one
+%D
+%D \starttext
+%D
+%D % \typefile[file][range={3,6}]{whatever.tex}
+%D
+%D % \typefile[file][range={3,+2}]{whatever.tex}
+%D
+%D \typefile[file][range={label:start:one,label:stop:one}]{whatever.tex}
+%D
+%D \stoptext
+%D \stoptyping
+
%D \macros
%D {setuptyping}
%D
@@ -655,7 +724,7 @@
\getparameters[\??tp][#1]%
\fi}
-\def\setuptyping
+\unexpanded\def\setuptyping
{\dodoubleempty\dosetuptyping}
%D \macros
@@ -664,11 +733,11 @@
%D Specific inline verbatim commands can be defined with the
%D following command.
-\def\definetype
+\unexpanded\def\definetype
{\dodoubleempty\dodefinetype}
\def\dodefinetype[#1][#2]%
- {\unexpanded\setvalue{#1}{\dotype{#1}}%
+ {\setuvalue{#1}{\dotype{#1}}%
\getparameters[\??ty#1][#2]}
%D \macros
@@ -688,7 +757,9 @@
%D
%D The definitions default to the standard typing values.
-\def\presettyping[#1][#2]%
+% TODO: parent etc !
+
+\def\presettyping[#1][#2]% brrr also use parent here
{\copyparameters[\??tp#1][\??tp][\c!color,\c!style]%
\getparameters [\??tp#1][#2]}
@@ -697,7 +768,7 @@
\setvalue{\e!stop #1}{\dostoptyping {#1}}%
\presettyping[#1][#2]}
-\def\definetyping
+\unexpanded\def\definetyping
{\dodoubleempty\dodefinetyping}
%D We can use some core color commands. These are faster than
@@ -705,7 +776,7 @@
%D line basis.
%D
%D \starttyping
-%D \def\setupverbatimcolor%
+%D \unexpanded\def\setupverbatimcolor%
%D {\edef\prettypalet{\prettyidentifier\typingparameter\c!palet}%
%D \def\beginofpretty[##1]{\startcolormode{\prettypalet:##1}}%
%D \def\endofpretty {\stopcolormode}}
@@ -720,10 +791,7 @@
\def\normalstopverbatimcolor {\stopcolor}
\def\normalverbatimcolor {\getvalue{\typingparameter\c!color}}% command !
-\def\ignorebeginofpretty [#1]{}
-\def\ignoreendofpretty {}
-
-\def\setupnormalprettyverbatim
+\unexpanded\def\setupnormalprettyverbatim
{\edef\prettypalet{\prettyidentifier\prettypalet}%
\let\beginofpretty \normalbeginofpretty
\let\endofpretty \normalendofpretty
@@ -731,7 +799,7 @@
\let\stopverbatimcolor \normalstopverbatimcolor
\let\verbatimcolor \normalverbatimcolor}
-\def\setupignoreprettyverbatim
+\unexpanded\def\setupignoreprettyverbatim
{\let\prettypalet \empty
\let\beginofpretty \ignorebeginofpretty
\let\endofpretty \ignoreendofpretty
@@ -739,7 +807,7 @@
\let\stopverbatimcolor \normalstopverbatimcolor
\let\verbatimcolor \normalverbatimcolor}
-\def\setupverbatimcolor
+\unexpanded\def\setupverbatimcolor
{\edef\prettypalet{\typingparameter\c!palet}%
\ifx\prettypalet\empty
\setupignoreprettyverbatim
@@ -799,33 +867,28 @@
\fi\fi}
\def\dosetuptypelinenumbering#1% fuzzy
- {\ifcsname\currenttypingclass\currenttyping\c!start\endcsname \else
- \setuptyping[\currenttyping][\c!start=1,\c!stop=,\c!step=1,\c!nlines=]%
- \fi
- \setuptyping[\currenttyping][#1]%
+ {%\ifcsname\currenttypingclass\currenttyping\c!start\endcsname \else
+ % \setuptyping[\currenttyping][\c!start=1,\c!stop=,\c!step=1,\c!continue=\v!no,\c!nlines=]%
+ %\fi
+ \doifassignmentelse{#1}{\setuptyping[\currenttyping][#1]}\donothing
\doifelse{\typingparameter\c!numbering}\v!file
{% kind of special: filters lines !
- \setuplinenumbering[\c!method=\v!file]%
+ \setuplinenumbering[\currenttyping][\c!method=\v!file]%
\donetrue}
{\doifelse{\typingparameter\c!numbering}\v!line
- {% \setuplinenumbering defaults start/step to 1/1, so we need
- \doifinsetelse\v!continue{#1,\typingparameter\c!start}
- {\scratchcounter0\typingparameter\c!n
- \setxtypingparameter\c!start{\ifnum\scratchcounter=0 1\else\number\scratchcounter\fi}}%
- {\doifnothing{\typingparameter\c!start}{\settypingparameter\c!start{1}}}%
- \doifnothing{\typingparameter\c!step}{\settypingparameter\c!step{1}}%
- \setuplinenumbering
- [\c!method=\v!type,
- \c!start=\typingparameter\c!start,
- \c!stop=\typingparameter\c!stop,
- \c!step=\typingparameter\c!step]%
+ {\doifinset\v!continue{#1}{\setuptyping[\currenttyping][\c!continue=\v!yes]}% fails: \settypingparameter\c!continue{\v!yes}
\donetrue}
{\donefalse}}%
\ifdone
- \ifx\startlinenumbering\undefined \let\startlinenumbering\relax \fi
- \ifx\stoplinenumbering \undefined \let\stoplinenumbering \relax \fi
- \def\beginofverbatimlines{\startlinenumbering}%
- \def\endofverbatimlines {\stoplinenumbering\setxtypingparameter\c!n{\number\linenumber}}%
+ \edef\beginofverbatimlines{\noexpand\startlinenumbering
+ [\currenttyping]%
+ [\c!continue=\typingparameter\c!continue,
+ \c!method=\v!type,
+ \c!start=\typingparameter\c!start,
+ \c!stop=\typingparameter\c!stop, % ?
+ \c!step=\typingparameter\c!step]%
+ }%
+ \def\endofverbatimlines{\stoplinenumbering}%
\fi}
\def\reporttypingerror#1% temp hack
@@ -880,7 +943,8 @@
{\doiflocfileelse{#1}
{\firstoftwoarguments}
{\doifinputfileelse{#1}
- {\def\readfilename{\pathplusfile\filepath{#1}}\firstoftwoarguments} % messy, looks wrong too
+% {\def\readfilename{\pathplusfile\filepath{#1}}\firstoftwoarguments} % messy, looks wrong too
+ {\def\readfilename{#1}\firstoftwoarguments} % messy, looks wrong too
{\secondoftwoarguments}}}
\def\dodotypefile[#1][#2]#3%
@@ -930,14 +994,16 @@
\c!evenmargin=\!!zeropoint,
\c!oddmargin=\!!zeropoint,
\c!blank=\v!line,
- \c!escape=/, % beware \string\ , should also be accepted
+ \c!escape=, % yes | no | START,STOP BTEX,ETEX
\c!numbering=\v!no,
\c!lines=,
+ \c!range=,
\c!empty=,
\c!start=1,
\c!stop=,
\c!step=1,
\c!continue=,
+ \c!strip=\v!no, % auto or number
\c!nlines=]
\definetyping[\v!typing]
diff --git a/Master/texmf-dist/tex/context/base/bxml-apa.mkiv b/Master/texmf-dist/tex/context/base/bxml-apa.mkiv
new file mode 100644
index 00000000000..5fc87e5efc6
--- /dev/null
+++ b/Master/texmf-dist/tex/context/base/bxml-apa.mkiv
@@ -0,0 +1,613 @@
+%D \module
+%D [ file=bxml-apa,
+%D version=2010.05.14, % based on bibl-apa.tex
+%D title=APA bibliography style,
+%D subtitle=Publications,
+%D author={Taco Hoekwater \& Hans Hagen},
+%D date=\currentdate,
+%D copyright={Hans Hagen \& Taco Hoekwater}]
+%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
+
+% helpers (todo)
+
+\let\maybeyear\firstofoneargument
+\let\etalchar \firstofoneargument
+
+\setupbibtexcitationvariants
+ [author,year]
+ [\c!andtext={ and },
+ \c!otherstext={ et al.},
+ \c!pubsep={, },
+ \c!lastpubsep={ and },
+ \c!compress=\v!no,
+ \c!inbetween={ },
+ \c!left={(},
+ \c!right={)}]
+
+\setupbibtexcitationvariants
+ [authoryear]
+ [\c!andtext={ and },
+ \c!otherstext={ et al.},
+ \c!pubsep={, },
+ \c!lastpubsep={ and },
+ \c!compress=\v!yes,
+ \c!inbetween={ },
+ \c!left={(},
+ \c!right={)}]
+
+\setupbibtexcitationvariants
+ [authoryears]
+ [\c!andtext={ and },
+ \c!otherstext={ et al.},
+ \c!pubsep={, },
+ \c!lastpubsep={ and },
+ \c!compress=\v!yes,
+ \c!inbetween={, },
+ \c!left={(},
+ \c!right={)}]
+
+\setupbibtexcitationvariants
+ [key,serial,authornum,page,short,type,doi,url]
+ [\c!andtext={ and },
+ \c!otherstext={ et al.},
+ \c!pubsep={, },
+ \c!lastpubsep={ and },
+ \c!compress=\v!no,
+ \c!inbetween={ },
+ \c!left={[},
+ \c!right={]}]
+
+\setupbibtexcitationvariants
+ [num]
+ [\c!andtext={ and },
+ \c!otherstext={ et al.},
+ \c!pubsep={, },
+ \c!lastpubsep={ and },
+ \c!compress=\v!yes,
+ \c!inbetween={--},
+ \c!left={[},
+ \c!right={]}]
+
+\setupbibtexpublications
+ [\c!sorttype=,
+ \c!criterium=,
+ \c!refcommand=authoryears,
+ \c!numbering=\v!no,
+ \c!autohang=\v!no]
+
+\setupbibtexpublications
+ [\c!width=2em, % 24pt,
+ \c!artauthor=invertedshort,
+ \c!editor=invertedshort,
+ \c!author=invertedshort,
+ \c!namesep={, },
+ \c!lastnamesep={ and },
+ \c!finalnamesep={ and },
+ \c!firstnamesep={, },
+ \c!juniorsep={ },
+ \c!vonsep={ },
+ \c!surnamesep={, },
+ \c!authoretallimit=5,
+ \c!editoretallimit=5,
+ \c!artauthoretallimit=5,
+ \c!authoretaldisplay=5,
+ \c!editoretaldisplay=5,
+ \c!artauthoretaldisplay=5,
+ \c!authoretaltext={ et al.},
+ \c!editoretaltext={ et al.},
+ \c!artauthoretaltext={ et al.}]
+
+% common
+
+\startxmlsetups bibtex:apa:common:wherefrom
+ \bibxmldoifelse {address} {
+ \getvariable{bibtex:temp}{left}
+ \bibxmldoifelse {country} {
+ \bibxmldoifelse {\getvariable{bibtex:temp}{label}} {
+ \bibxmlflush{address}\bibtexcomma\bibxmlflush{country}: \bibxmlflush{\getvariable{bibtex:temp}{label}}
+ } {
+ \bibxmlflush{address}\bibtexcomma\bibxmlflush{country}
+ }
+ } {
+ \bibxmldoifelse {\getvariable{bibtex:temp}{label}} {
+ \bibxmlflush{address}\bibtexcomma\bibxmlflush{\getvariable{bibtex:temp}{label}}
+ } {
+ \bibxmlflush{address}
+ }
+ }
+ \getvariable{bibtex:temp}{right}
+ } {
+ \bibxmldoifelse {country} {
+ \getvariable{bibtex:temp}{left}
+ \bibxmldoifelse {\getvariable{bibtex:temp}{label}} {
+ \bibxmlflush{country}: \bibxmlflush{\getvariable{bibtex:temp}{label}}
+ } {
+ \bibxmlflush{country}
+ }
+ \getvariable{bibtex:temp}{right}
+ } {
+ \bibxmldoifelse {\getvariable{bibtex:temp}{label}} {
+ \getvariable{bibtex:temp}{left}
+ \bibxmlflush{\getvariable{bibtex:temp}{label}}
+ \getvariable{bibtex:temp}{right}
+ } {
+ \getvariable{bibtex:temp}{otherwise}
+ }
+ }
+ }
+\stopxmlsetups
+
+\startxmlsetups bibtex:apa:common:publisher
+ \setvariables[bibtex:temp][label=publisher,left=,right=,otherwise=]\relax
+ \bibxmlsetup{bibtex:apa:common:wherefrom}
+\stopxmlsetups
+\startxmlsetups bibtex:apa:common:organization
+ \setvariables[bibtex:temp][label=organization,left=,right=,otherwise=]\relax
+ \bibxmlsetup{bibtex:apa:common:wherefrom}
+\stopxmlsetups
+\startxmlsetups bibtex:apa:common:school
+ \setvariables[bibtex:temp][label=school,left=,right=,otherwise=]\relax
+ \bibxmlsetup{bibtex:apa:common:wherefrom}
+\stopxmlsetups
+\startxmlsetups bibtex:apa:common:institution
+ \setvariables[bibtex:temp][label=institution,left=,right=,otherwise=]\relax
+ \bibxmlsetup{bibtex:apa:common:wherefrom}
+\stopxmlsetups
+
+\startxmlsetups bibtex:apa:common:school:subsentence
+ \setvariables[bibtex:temp][label=school,left=\bibtexcomma,right=\bibtexperiod,otherwise=\bibtexperiod]\relax
+ \bibxmlsetup{bibtex:apa:common:wherefrom}
+\stopxmlsetups
+\startxmlsetups bibtex:apa:common:institution:subsentence
+ \setvariables[bibtex:temp][label=institution,left=\bibtexcomma,right=\bibtexperiod,otherwise=\bibtexperiod]\relax
+ \bibxmlsetup{bibtex:apa:common:wherefrom}
+\stopxmlsetups
+\startxmlsetups bibtex:apa:common:publisher:sentence
+ \setvariables[bibtex:temp][label=publisher,left=\bibtexspace,right=\bibtexperiod,otherwise=]\relax
+ \bibxmlsetup{bibtex:apa:common:wherefrom}
+\stopxmlsetups
+\startxmlsetups bibtex:apa:common:organization:sentence
+ \setvariables[bibtex:temp][label=organization,left=\bibtexspace,right=\bibtexperiod,otherwise=]\relax
+ \bibxmlsetup{bibtex:apa:common:wherefrom}
+\stopxmlsetups
+
+\startxmlsetups bibtex:apa:common:title-and-series
+ \bibxmldoif {title} {
+ \bibxmlflush{title}
+ \bibxmldoif {series} {
+ \bibtexlparent\bibxmlflush{series}\bibtexrparent
+ }
+ \bibtexperiod
+ }
+\stopxmlsetups
+
+\startxmlsetups bibtex:apa:common:title-it-and-series
+ \bibxmldoif {title} {
+ \bgroup\it\bibxmlflush{title}\/\egroup
+ \bibxmldoif {series} {
+ \bibtexlparent\bibxmlflush{series}\bibtexrparent
+ }
+ \bibtexperiod
+ }
+\stopxmlsetups
+
+\disablemode[bibtex:apa:edited-book]
+
+\startxmlsetups bibtex:apa:common:author-and-year
+ \bibxmldoif {author} {
+ \bibxmlsetup{bibtex:format:author}
+ }
+ \bibxmldoif {year} {
+ \bibtexlparent\bibxmlflush{year}\bibtexrparent
+ }
+ \bibtexperiod
+\stopxmlsetups
+
+\startxmlsetups bibtex:apa:common:author-or-key-and-year
+ \bibxmldoifelse {author} {
+ \bibxmlsetup{bibtex:format:author}
+ } {
+ \bibxmldoif {key} {
+ \bibtexlbracket\bibxmlsetup{bibtex:format:key}\bibtexrbracket
+ }
+ }
+ \bibxmldoif {year} {
+ \bibtexlparent\bibxmlflush{year}\bibtexrparent
+ }
+ \bibtexperiod
+\stopxmlsetups
+
+\startxmlsetups bibtex:apa:common:author-editors-crossref-year
+ \bibxmldoif {author} {
+ \bibxmlsetup{bibtex:format:author}
+ } {
+ \bibxmldoifelse {editor} {
+ \enablemode[bibtex:apa:edited-book]
+ \xmlsetup{#1}{bibtex:format:editor}
+ \bibtexcomma\bibtexsingularplural{editor}{editors}
+ } {
+ % weird period
+ \bibxmldoif {crossref} {
+ \bibtexlbracket\bibxmlsetup{bibtex:format:crossref}\bibtexrbracket\bibtexperiod
+ }
+ }
+ }
+ \bibxmldoif {year} {
+ \bibtexlparent\bibxmlflush{year}\bibtexrparent
+ }
+ \bibtexperiod
+\stopxmlsetups
+
+\startxmlsetups bibtex:apa:common:editor-or-key-and-year
+ \bibxmldoifelse {editor} {
+ \enablemode[bibtex:apa:edited-book]
+ \xmlsetup{#1}{bibtex:format:editor}
+ \bibtexcomma\bibtexsingularplural{editor}{editors}
+ } {
+ \bibxmldoif {key} {
+ \bibtexlbracket\bibxmlsetup{bibtex:format:key}\bibtexrbracket
+ }
+ }
+ \bibtexspace
+ \bibxmldoif {year} {
+ \bibtexlparent\bibxmlflush{year}\bibtexrparent
+ }
+ \bibtexperiod
+\stopxmlsetups
+
+\startxmlsetups bibtex:apa:common:note
+ \bibxmldoif {note} {
+ \bibtexspace\bibxmlflush{note}\bibtexperiod
+ }
+\stopxmlsetups
+
+\startxmlsetups bibtex:apa:common:comment
+ \bibxmldoif {comment} {
+ \bibtexspace\bibxmlflush{comment}\bibtexperiod
+ }
+\stopxmlsetups
+
+\startxmlsetups bibtex:apa:common:pages:p
+ \bibxmldoif {pages} {
+ \bibtexspace\bibxmlflush{pages}\bibtexspace p\bibtexperiod
+ }
+\stopxmlsetups
+
+\startxmlsetups bibtex:apa:common:pages:pp
+ \bibxmldoif {pages} {
+ \bibtexspace\bibxmlflush{pages}\bibtexspace pp\bibtexperiod
+ }
+\stopxmlsetups
+
+\startxmlsetups bibtex:apa:common:pages:pages
+ \bibxmldoif {pages} {
+ \bibtexcomma pages~\bibxmlflush{pages}
+ }
+\stopxmlsetups
+
+\startxmlsetups bibtex:apa:common:edition:sentense
+ \bibxmldoif {edition} {
+ \bibtexspace\bibxmlflush{edition}\bibtexspace edition\bibtexperiod
+ }
+\stopxmlsetups
+
+% check ewhen the next is used (no period)
+
+% \startxmlsetups bibtex:apa:common:edition
+% \bibxmldoif {edition} {
+% \bibtexspace\bibxmlflush{edition}\bibtexspace edition
+% }
+% \stopxmlsetups
+
+% we can share more, todo
+
+% specific
+
+\startxmlsetups bibtex:apa:article
+ \bibxmlsetup{bibtex:apa:common:author-or-key-and-year}
+ \bibxmldoif {title} {
+ \bibxmlflush{title}\bibtexperiod
+ }
+ \bibxmldoifelse {journal} {
+ \bgroup\it\bibxmlflush{journal}\/\egroup
+ } {
+ \bibxmldoif {crossref} {
+ In\bibtexspace\bibxmlflush{crossref}
+ }
+ }
+ \bibxmldoifelse {volume} {
+ \bibtexcomma\bgroup\it\bibxmlflush{volume}\/\egroup
+ \bibxmldoif {issue} {
+ \bibtexlparent\bibxmlflush{issue}\bibtexlparent
+ }
+ \bibxmldoif {pages} {
+ \bibtexcomma\bibxmlflush{pages}
+ }
+ \bibtexperiod
+ } {
+ \bibxmlsetup{bibtex:apa:common:pages:pp}
+ }
+ \bibxmlsetup{bibtex:apa:common:note}
+ \bibxmlsetup{bibtex:apa:common:comment}
+\stopxmlsetups
+
+\startxmlsetups bibtex:apa:book
+ \bibxmlsetup{bibtex:apa:common:author-editors-crossref-year}
+ \bibxmldoif {title} {
+ \bgroup\it\bibxmlflush{title}\/\egroup
+ \doifmodeelse {bibtex:apa:edited-book} {
+ \bibxmldoifelse {volume} {
+ \bibtexspace Number\nonbreakablespace\bibxmlflush{volume}
+ \bibxmldoifelse {series} {
+ \bibtexspace in\nonbreakablespace\bibxmlflush{series}\bibtexperiod
+ } {
+ \bibxmldoifelse {crossref} {
+ \bibtexspace in\bibtexlbracket\bibxmlsetup{bibtex:format:crossref}\bibtexrbracket
+ } {
+ \bibtexperiod
+ }
+ }
+ } {
+ \bibxmldoif {series} {
+ \bibtexspace\bibxmlflush{series}
+ }
+ \bibtexperiod
+ }
+ } {
+ \bibxmldoifelse {crossref} {
+ \bibxmldoif {chapter} {
+ \bibtexcomma\bibxmlflush{chapter}
+ }
+ \bibxmlsetup{bibtex:apa:common:pages:pages}
+ \bibtexperiod
+ \bibxmldoif {volume} {
+ Volume\nonbreakablespace\bibxmlflush{volume}\bibtexspace of\nonbreakablespace
+ }
+ } {
+ \bibxmldoif {volume} {
+ \bibtexcomma volume\nonbreakablespace\bibxmlflush{volume}
+ \bibxmldoif {series} {
+ \bibtexspace of\nonbreakablespace\bgroup\it\bibxmlflush{series}\/\egroup
+ }
+ \bibxmldoif {chapter} {
+ \bibtexcomma\bibxmlflush{chapter}
+ }
+ \bibxmlsetup{bibtex:apa:common:pages:pages}
+ \bibtexperiod
+ }
+ }
+ }
+ }
+ \bibxmlsetup{bibtex:apa:common:edition:sentence}
+ \bibxmlsetup{bibtex:apa:common:publisher:sentence}
+ \bibxmlsetup{bibtex:apa:common:pages:p}% twice?
+ \bibxmlsetup{bibtex:apa:common:note}
+\stopxmlsetups
+
+\startxmlsetups bibtex:apa:inbook
+ \bibxmlsetup{bibtex:apa:common:author-editors-crossref-year}
+ \bibxmldoifelse {title} {
+ \bgroup\it\bibxmlflush{title}\/\egroup
+ } {
+ \doifmodeelse {bibtex:apa:edited-book} {
+ \bibxmldoifelse {volume} {
+ \bibtexspace number\nonbreakablespace\bibxmlflush{volume}
+ \bibxmldoifelse {series} {
+ \bibtexspace in\nonbreakablespace\bibxmlflush{series}\bibtexperiod
+ } {
+ \bibxmldoifelse {crossref} {
+ \bibtexspace in\bibtexlbracket\bibxmlsetup{bibtex:format:crossref}\bibtexrbracket
+ } {
+ \bibtexperiod
+ }
+ }
+ } {
+ \bibxmldoif {series} {
+ \bibtexspace\bibxmlflush{series}\bibtexperiod
+ }
+ }
+ } {
+ \bibxmldoifelse {crossref} {
+ \bibxmldoif {chapter} {
+ \bibtexcomma\bibxmlflush{chapter}
+ }
+ \bibxmlsetup{bibtex:apa:common:pages:pages}
+ \bibxmldoif {volume} {
+ Volume\nonbreakablespace\bibxmlflush{volume}\bibtexspace of\nonbreakablespace
+ }
+ \bibxmldoif {crossref} {
+ \bibtexlbracket\bibxmlsetup{bibtex:format:crossref}\bibtexrbracket
+ }
+ } {
+ \bibxmldoif {volume} {
+ \bibtexcomma volume\nonbreakablespace\bibxmlflush{volume}
+ \bibxmldoif {series} {
+ \bibtexspace of\nonbreakablespace\bgroup\it\bibxmlflush{series}\/\egroup
+ }
+ \bibxmldoif {chapter} {
+ \bibtexcomma\bibxmlflush{chapter}
+ }
+ \bibxmlsetup{bibtex:apa:common:pages:pages}
+ \bibtexperiod
+ }
+ }
+ }
+ }
+ \bibtexspace
+ \bibxmlsetup{bibtex:apa:common:edition:sentence}
+ \bibxmlsetup{bibtex:apa:common:publisher}
+ \bibxmlsetup{bibtex:apa:common:note}
+\stopxmlsetups
+
+\startxmlsetups bibtex:apa:booklet
+ \bibxmlsetup{bibtex:apa:common:author-or-key-and-year}
+ \bibxmlsetup{bibtex:apa:common:title-it-and-series}
+ \bibxmlsetup{bibtex:apa:common:edition:sentence}
+ \bibxmlsetup{bibtex:apa:common:publication:sentence}
+ \bibxmlsetup{bibtex:apa:common:pages:p}
+ \bibxmlsetup{bibtex:apa:common:note}
+\stopxmlsetups
+
+\startxmlsetups bibtex:apa:manual
+ \bibxmlsetup{bibtex:apa:common:author-or-key-and-year}
+ \bibxmlsetup{bibtex:apa:common:title-it-and-series}
+ \bibxmlsetup{bibtex:apa:common:edition:sentence}
+ \bibxmlsetup{bibtex:apa:common:organization:sentence}
+ \bibxmlsetup{bibtex:apa:common:pages:p}
+ \bibxmlsetup{bibtex:apa:common:note}
+\stopxmlsetups
+
+\startxmlsetups bibtex:apa:incollection
+ \bibxmlsetup{bibtex:apa:common:author-and-year}
+ \bibxmldoif {arttitle} {
+ \bibxmlflush{arttitle}\bibtexperiod
+ }
+ In\bibtexspace
+ \bibxmldoifelse {title} {
+ \bibxmlsetup{bibtex:format:editors}\bibtexcomma
+ \bgroup\it\bibxmlflush{title}\/\egroup
+ \bibxmldoif {series} {
+ \bibxmldoif {volume} {
+ \bibtexcomma number\bibtexspace\bibxmlflush{volume}\bibtexspace in
+ }
+ \bibtexspace\bibxmlflush{series}
+ }
+ \bibxmldoif {chapter} {
+ \bibtexcomma\bibxmlflush{chapter}\bibtexspace
+ }
+ \bibxmlsetup{bibtex:apa:common:pages:pages}
+ \bibxmldoif {edition} {
+ \bibtexspace\bibxmlflush{edition}\bibtexspace edition
+ }
+ \bibxmlsetup{bibtex:apa:common:publisher:sentence}
+ } {
+ \bibxmldoif {crossref} {
+ \bibtexlbracket\bibxmlsetup{bibtex:format:crossref}\bibtexrbracket
+ }
+ \bibxmldoif {chapter} {
+ \bibtexcomma\bibxmlflush{chapter}
+ }
+ \bibtexspace
+ \bibxmlsetup{bibtex:apa:common:pages:pages}
+ }
+ \bibxmlsetup{bibtex:apa:common:note}
+\stopxmlsetups
+
+\startxmlsetups bibtex:apa:inproceedings
+ \bibxmlsetup{bibtex:apa:common:author-and-year}
+ \bibxmldoif {arttitle} {
+ \bibxmlflush{arttitle}\bibtexperiod
+ }
+ In\bibtexspace
+ \bibxmldoifelse {title} {
+ \bibxmldoif {editors} {
+ \bibxmlflush{bibtex:apa:format:editors}
+ \bibtexcomma\bibtexsingularplural{editor}{editors}\bibtexcomma
+ }
+ \bgroup\it\bibxmlflush{title}\/\egroup
+ \bibxmldoif {series} {
+ \bibxmldoif {volume} {
+ \bibtexcomma number~\bibxmlflush{volume} in
+ }
+ \bibtexspace
+ \bibxmlflush{series}
+ }
+ \bibxmldoif {chapter} {
+ \bibtexcomma\bibxmlflush{chapter}\bibtexspace
+ }
+ \bibxmlsetup{bibtex:apa:common:pages:pages}
+ \bibtexperiod
+ \bibxmlsetup{bibtex:apa:common:organization:sentence}
+ } {
+ \bibxmldoif {crossref} {
+ \bibtexlbracket\bibxmlsetup{bibtex:format:crossref}\bibtexrbracket
+ }
+ \bibxmldoif {chapter} {
+ \bibtexcomma\bibxmlflush{chapter}\bibtexspace
+ }
+ \bibxmlsetup{bibtex:apa:common:pages:pages}
+ \bibtexperiod
+ }
+ \bibxmlsetup{bibtex:apa:common:note}
+\stopxmlsetups
+
+\startxmlsetups bibtex:apa:proceedings
+ \bibxmlsetup{bibtex:apa:common:editor-or-key-and-year}
+ \bibxmldoif {title} {
+ \bgroup\it\bibxmlflush{title}\/\egroup
+ \bibxmldoif {volume} {
+ \bibtexcomma number\bibtexspace\bibxmlflush{volume}\bibtexspace in\bibtexspace
+ }
+ \bibxmldoif {chapter} {
+ \bibtexcomma\bibxmlflush{chapter}\bibtexspace
+ }
+ \bibxmlsetup{bibtex:apa:common:pages:pages}
+ \bibtexperiod
+ \bibxmlsetup{bibtex:apa:common:organization:sentence}
+ }
+ \bibxmlsetup{bibtex:apa:common:note}
+\stopxmlsetups
+
+\startxmlsetups bibtex:apa:common:thesis
+ \bibxmlsetup{bibtex:apa:common:author-and-year}
+ \bibxmlsetup{bibtex:apa:common:title-it-and-series}
+ \bibxmldoifelse {type} {
+ \bibxmlflush{type}
+ } {
+ \getvariable{bibtex:temp}{label}
+ }
+ \bibxmlsetup{bibtex:apa:common:school:subsentence}
+ \bibxmlsetup{bibtex:apa:common:pages:p}
+ \bibxmlsetup{bibtex:apa:common:note}
+\stopxmlsetups
+
+\startxmlsetups bibtex:apa:mastersthesis
+ \setvariables[bibtex:temp][label=Master's thesis]
+ \bibxmlsetup{bibtex:apa:common:thesis}
+\stopxmlsetups
+
+\startxmlsetups bibtex:apa:phdthesis
+ \setvariables[bibtex:temp][label=PhD thesis]
+ \bibxmlsetup{bibtex:apa:common:thesis}
+\stopxmlsetups
+
+\startxmlsetups bibtex:apa:techreport
+ \bibxmlsetup{bibtex:apa:common:author-and-year}
+ \bibxmlsetup{bibtex:apa:common:title-and-series}
+ \bibxmldoifelse {type} {
+ \bibxmlflush{type}
+ \bibxmldoif {volume} {
+ \bibtexspace\bibxmlflush{volume}
+ }
+ } {
+ \bibtexspace Technical Report
+ }
+ \bibxmlsetup{bibtex:apa:common:institution:subsentence}
+ \bibxmlsetup{bibtex:apa:common:pages:p}
+ \bibxmlsetup{bibtex:apa:common:note}
+\stopxmlsetups
+
+\startxmlsetups bibtex:apa:misc
+ \bibxmlsetup{bibtex:apa:common:author-and-year}
+ \bibxmlsetup{bibtex:apa:common:title-and-series}
+ \bibxmlsetup{bibtex:apa:common:publisher:sentence}
+ \bibxmlsetup{bibtex:apa:common:pages:p}
+ \bibxmlsetup{bibtex:apa:common:note}
+\stopxmlsetups
+
+\startxmlsetups bibtex:apa:unpublished
+ \bibxmlsetup{bibtex:apa:common:author-and-year}
+ \bibxmlsetup{bibtex:apa:common:title-and-series}
+ \bibxmlsetup{bibtex:apa:common:pages:p}
+ \bibxmldoif {type} {
+ \bibtexlparent\bibxmlflush{type}\bibtexrparent
+ }
+ \bibxmlsetup{bibtex:apa:common:note}
+\stopxmlsetups
+
+\protect \endinput
diff --git a/Master/texmf-dist/tex/context/base/catc-ctx.tex b/Master/texmf-dist/tex/context/base/catc-ctx.tex
index 83e802e7773..21e7d013641 100644
--- a/Master/texmf-dist/tex/context/base/catc-ctx.tex
+++ b/Master/texmf-dist/tex/context/base/catc-ctx.tex
@@ -14,13 +14,13 @@
%D We prefer to define relevant catcode tables in this file instead
%D of everywhere around.
-\ifx\ctxcatcodes \undefined \newcatcodetable \ctxcatcodes \fi
-\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
-\ifx\typcatcodesa\undefined \newcatcodetable \typcatcodesa \fi % { }
-\ifx\typcatcodesb\undefined \newcatcodetable \typcatcodesb \fi % < >
+\ifdefined \ctxcatcodes \else \newcatcodetable \ctxcatcodes \fi
+\ifdefined \mthcatcodes \else \newcatcodetable \mthcatcodes \fi % math, not used, too tricky
+\ifdefined \xmlcatcodesn \else \newcatcodetable \xmlcatcodesn \fi % normal
+\ifdefined \xmlcatcodese \else \newcatcodetable \xmlcatcodese \fi % entitle
+\ifdefined \xmlcatcodesr \else \newcatcodetable \xmlcatcodesr \fi % reduce
+\ifdefined \typcatcodesa \else \newcatcodetable \typcatcodesa \fi % { }
+\ifdefined \typcatcodesb \else \newcatcodetable \typcatcodesb \fi % < >
\startcatcodetable \ctxcatcodes
\catcode`\^^I = 10
@@ -202,7 +202,7 @@
\catcodetable \ctxcatcodes
\let\defaultcatcodetable\ctxcatcodes
-\let\xmlcatcodes \xmlcatcodesn
+\let\xmlcatcodes \xmlcatcodesn % beware, in mkiv we use \notcatcodes
\endinput
diff --git a/Master/texmf-dist/tex/context/base/catc-def.tex b/Master/texmf-dist/tex/context/base/catc-def.tex
index 0346f6dae7a..e80cfe12539 100644
--- a/Master/texmf-dist/tex/context/base/catc-def.tex
+++ b/Master/texmf-dist/tex/context/base/catc-def.tex
@@ -13,12 +13,12 @@
%D The following catcode tables are rather \CONTEXT\ independent.
-\ifx\nilcatcodes \undefined \newcatcodetable \nilcatcodes \fi
-\ifx\texcatcodes \undefined \newcatcodetable \texcatcodes \fi
-\ifx\luacatcodes \undefined \newcatcodetable \luacatcodes \fi
-\ifx\notcatcodes \undefined \newcatcodetable \notcatcodes \fi
-\ifx\vrbcatcodes \undefined \newcatcodetable \vrbcatcodes \fi
-\ifx\prtcatcodes \undefined \newcatcodetable \prtcatcodes \fi
+\ifdefined\nilcatcodes \else \newcatcodetable \nilcatcodes \fi
+\ifdefined\texcatcodes \else \newcatcodetable \texcatcodes \fi
+\ifdefined\luacatcodes \else \newcatcodetable \luacatcodes \fi
+\ifdefined\notcatcodes \else \newcatcodetable \notcatcodes \fi
+\ifdefined\vrbcatcodes \else \newcatcodetable \vrbcatcodes \fi
+\ifdefined\prtcatcodes \else \newcatcodetable \prtcatcodes \fi
\startcatcodetable \nilcatcodes
\catcode`\^^I = 10 % ascii tab is a blank space
diff --git a/Master/texmf-dist/tex/context/base/catc-ini.lua b/Master/texmf-dist/tex/context/base/catc-ini.lua
index e1558b459a0..2749f403c9c 100644
--- a/Master/texmf-dist/tex/context/base/catc-ini.lua
+++ b/Master/texmf-dist/tex/context/base/catc-ini.lua
@@ -1,6 +1,6 @@
if not modules then modules = { } end modules ['catc-ini'] = {
version = 1.001,
- comment = "companion to catc-ini.tex",
+ comment = "companion to catc-ini.mkiv",
author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
copyright = "PRAGMA ADE / ConTeXt Development Team",
license = "see context related readme files"
@@ -17,7 +17,12 @@ storage.register("catcodes/names", catcodes.names, "catcodes.names")
function catcodes.register(name,number)
catcodes.numbers[name] = number
- catcodes.names[number] = name
+ local cnn = catcodes.names[number]
+ if cnn then
+ cnn[#cnn+1] = name
+ else
+ catcodes.names[number] = { name }
+ end
tex[name] = number
end
diff --git a/Master/texmf-dist/tex/context/base/catc-ini.mkiv b/Master/texmf-dist/tex/context/base/catc-ini.mkiv
index 668a55d3bdd..269330a1bbd 100644
--- a/Master/texmf-dist/tex/context/base/catc-ini.mkiv
+++ b/Master/texmf-dist/tex/context/base/catc-ini.mkiv
@@ -70,7 +70,7 @@
\catcode`\% \othercatcode
\catcode127 \othercatcode}
-\long\def\startcatcodetable#1#2\stopcatcodetable
+\long\normalprotected\def\startcatcodetable#1#2\stopcatcodetable
{\bgroup
\catcodetable\scratchcatcodes
\the\setdefaultcatcodes
@@ -80,7 +80,7 @@
\newcatcodetable\dummycatcodes
-\long\def\startextendcatcodetable#1#2\stopextendcatcodetable
+\long\normalprotected\def\startextendcatcodetable#1#2\stopextendcatcodetable
{\bgroup
\catcodetable#1\relax
\globaldefs\plusone
@@ -90,7 +90,7 @@
% ==
%
-% \long\def\startextendcatcodetable#1#2\stopextendcatcodetable
+% \long\normalprotected\def\startextendcatcodetable#1#2\stopextendcatcodetable
% {\bgroup
% \scratchcounter\the\catcodetable
% \catcodetable #1 #2
@@ -107,7 +107,9 @@
%D The next command can be defined in a cleaner way in the
%D Mk IV file but we want to have a fast one with a minimal
-%D chance for interference.
+%D chance for interference. Do we still need this complex
+%D mechanism? Future versions of \MKIV\ might only use
+%D active characters for very special cases.
\chardef\activehackcode=`\~
@@ -128,7 +130,7 @@
\def\letcatcodecommandc % only first time
{\expandafter\gdef\csname CCL:\number\cctcountera:\number\cctcounterb\expandafter\endcsname\expandafter
{\expandafter\let\csname CCC:\number\cctcountera:\number\cctcounterb\endcsname}%
- \reinstatecatcodecommanda
+ \reinstatecatcodecommandua % unexpanded
\csname CCL:\number\cctcountera:\number\cctcounterb\endcsname}
% expandable def
@@ -165,8 +167,8 @@
\def\uedcatcodecommandc % only first time
{\expandafter\gdef\csname CCU:\number\cctcountera:\number\cctcounterb\expandafter\endcsname
\expandafter##\expandafter1\expandafter
- {\expandafter\unexpanded\expandafter\def\csname CCC:\number\cctcountera:\number\cctcounterb\endcsname{##1}}%
- \reinstatecatcodecommanda
+ {\expandafter\normalprotected\expandafter\def\csname CCC:\number\cctcountera:\number\cctcounterb\endcsname{##1}}%
+ \reinstatecatcodecommandua % unexpanded
\csname CCU:\number\cctcountera:\number\cctcounterb\endcsname}
\def\reinstatecatcodecommand{\afterassignment\reinstatecatcodecommanda\cctcounterb}
@@ -178,6 +180,13 @@
\uppercase{\xdef~{\noexpand\catcodecommand{\number\cctcounterb}}}%
\egroup}
+\def\reinstatecatcodecommandua % can be used when a direct definition has been done
+ {\bgroup % and the selector has been lost
+ \uccode\activehackcode\cctcounterb
+ \catcode\uccode\activehackcode\activecatcode
+ \uppercase{\normalprotected\xdef~{\noexpand\catcodecommand{\number\cctcounterb}}}%
+ \egroup}
+
\chardef\defaultcatcodetable\zerocount
\def\catcodecommand#1%
@@ -270,5 +279,39 @@
% \tracecatcodetables
+%D Only in \MKIV\ (to be used when crossing pages with changed catcodes
+%D in the current vector):
+%D
+%D \starttyping
+%D \normalprotected\def\startcrap
+%D {\bgroup
+%D \pushcatcodes
+%D \whitespace
+%D \obeylines
+%D \activatespacehandler\v!yes
+%D \strut}
+%D
+%D \normalprotected\def\stopcrap
+%D {\popcatcodes
+%D \egroup}
+%D \stoptyping
+
+\newcount\catcodetablelevel
+
+\def\pushcatcodes
+ {\bgroup
+ \global\advance\catcodetablelevel\plusone
+ \ifcsname @@ccf:\number\catcodetablelevel\endcsname \else
+ \global\advance\cctdefcounter\plusone
+ \expandafter\global\expandafter\chardef\csname @@ccf:\number\catcodetablelevel\endcsname\cctdefcounter
+ \fi
+ \catcodetable\ctxcatcodes
+ \expandafter\savecatcodetable\csname @@ccf:\number\catcodetablelevel\endcsname
+ \egroup
+ \expandafter\catcodetable\csname @@ccf:\number\catcodetablelevel\endcsname}
+
+\def\popcatcodes
+ {\global\advance\catcodetablelevel\minusone}
+
\endinput
diff --git a/Master/texmf-dist/tex/context/base/char-act.mkiv b/Master/texmf-dist/tex/context/base/char-act.mkiv
index 34358784a2a..2dc7823f0bf 100644
--- a/Master/texmf-dist/tex/context/base/char-act.mkiv
+++ b/Master/texmf-dist/tex/context/base/char-act.mkiv
@@ -102,6 +102,19 @@
\prettynaturalfont{\scantextokens\expandafter{\ascii}\ifhmode\unskip\fi}%
\egroup}
+%D What-a-mess:
+
+% \def\normalspacecodes
+% {\catcode`\^^I = 10
+% \catcode`\^^M = 5
+% \catcode`\^^L = 5
+% \catcode`\ = 10
+% \catcode`\^^Z = 9 }
+
+% \appendtoks
+% \normalspacecodes
+% \to \everybeforeoutput
+
\endinput \protect
% obsolete (old hack for idris)
diff --git a/Master/texmf-dist/tex/context/base/char-cmp.lua b/Master/texmf-dist/tex/context/base/char-cmp.lua
index bd33604996a..c7deb79010f 100644
--- a/Master/texmf-dist/tex/context/base/char-cmp.lua
+++ b/Master/texmf-dist/tex/context/base/char-cmp.lua
@@ -1,12 +1,13 @@
if not modules then modules = { } end modules ['char-cmp'] = {
version = 1.001,
- comment = "companion to char-ini.tex",
+ comment = "companion to char-ini.mkiv",
author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
copyright = "PRAGMA ADE / ConTeXt Development Team",
license = "see context related readme files"
}
local utf = unicode.utf8
+local unpack = unpack or table.unpack
characters = characters or { }
characters.uncomposed = characters.uncomposed or { }
diff --git a/Master/texmf-dist/tex/context/base/char-def.lua b/Master/texmf-dist/tex/context/base/char-def.lua
index 665572ee81f..b7abee0fbf6 100644
--- a/Master/texmf-dist/tex/context/base/char-def.lua
+++ b/Master/texmf-dist/tex/context/base/char-def.lua
@@ -1,5 +1,6 @@
if not modules then modules = { } end modules ['char-def'] = {
version = 1.001,
+ comment = "companion to char-ini.mkiv",
author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
copyright = "PRAGMA ADE / ConTeXt Development Team",
license = "see context related readme files"
@@ -586,6 +587,7 @@ characters.data={
adobename="at",
category="po",
cjkwd="na",
+ contextname="textat",
description="COMMERCIAL AT",
direction="on",
linebreak="al",
@@ -885,7 +887,7 @@ characters.data={
direction="on",
linebreak="op",
mathclass="open",
- mathname="lbracket",
+ mathname="lbrack",
mirror=0x005D,
unicodeslot=0x005B,
},
@@ -909,7 +911,7 @@ characters.data={
direction="on",
linebreak="cl",
mathclass="close",
- mathname="rbracket",
+ mathname="rbrack",
mirror=0x005B,
unicodeslot=0x005D,
},
@@ -8710,6 +8712,8 @@ characters.data={
description="GREEK CAPITAL LETTER ALPHA",
direction="l",
lccode=0x03B1,
+ mathclass="variable",
+ mathname="Alpha",
linebreak="al",
unicodeslot=0x0391,
},
@@ -8721,6 +8725,8 @@ characters.data={
description="GREEK CAPITAL LETTER BETA",
direction="l",
lccode=0x03B2,
+ mathclass="variable",
+ mathname="Beta",
linebreak="al",
unicodeslot=0x0392,
},
@@ -8731,6 +8737,8 @@ characters.data={
contextname="greekGamma",
description="GREEK CAPITAL LETTER GAMMA",
direction="l",
+ mathclass="variable",
+ mathname="Gamma",
lccode=0x03B3,
linebreak="al",
unicodeslot=0x0393,
@@ -8741,6 +8749,8 @@ characters.data={
contextname="greekDelta",
description="GREEK CAPITAL LETTER DELTA",
direction="l",
+ mathclass="variable",
+ mathname="Delta",
lccode=0x03B4,
linebreak="al",
unicodeslot=0x0394,
@@ -8752,6 +8762,8 @@ characters.data={
contextname="greekEpsilon",
description="GREEK CAPITAL LETTER EPSILON",
direction="l",
+ mathclass="variable",
+ mathname="Epsilon",
lccode=0x03B5,
linebreak="al",
unicodeslot=0x0395,
@@ -8763,6 +8775,8 @@ characters.data={
contextname="greekZeta",
description="GREEK CAPITAL LETTER ZETA",
direction="l",
+ mathclass="variable",
+ mathname="Zeta",
lccode=0x03B6,
linebreak="al",
unicodeslot=0x0396,
@@ -8774,6 +8788,8 @@ characters.data={
contextname="greekEta",
description="GREEK CAPITAL LETTER ETA",
direction="l",
+ mathclass="variable",
+ mathname="Eta",
lccode=0x03B7,
linebreak="al",
unicodeslot=0x0397,
@@ -8785,6 +8801,8 @@ characters.data={
contextname="greekTheta",
description="GREEK CAPITAL LETTER THETA",
direction="l",
+ mathclass="variable",
+ mathname="Theta",
lccode=0x03B8,
linebreak="al",
unicodeslot=0x0398,
@@ -8796,6 +8814,8 @@ characters.data={
contextname="greekIota",
description="GREEK CAPITAL LETTER IOTA",
direction="l",
+ mathclass="variable",
+ mathname="Iota",
lccode=0x03B9,
linebreak="al",
unicodeslot=0x0399,
@@ -8807,6 +8827,8 @@ characters.data={
contextname="greekKappa",
description="GREEK CAPITAL LETTER KAPPA",
direction="l",
+ mathclass="variable",
+ mathname="Kappa",
lccode=0x03BA,
linebreak="al",
unicodeslot=0x039A,
@@ -8818,6 +8840,8 @@ characters.data={
contextname="greekLambda",
description="GREEK CAPITAL LETTER LAMDA",
direction="l",
+ mathclass="variable",
+ mathname="Lambda",
lccode=0x03BB,
linebreak="al",
unicodeslot=0x039B,
@@ -8829,6 +8853,8 @@ characters.data={
contextname="greekMu",
description="GREEK CAPITAL LETTER MU",
direction="l",
+ mathclass="variable",
+ mathname="Mu",
lccode=0x03BC,
linebreak="al",
unicodeslot=0x039C,
@@ -8840,6 +8866,8 @@ characters.data={
contextname="greekNu",
description="GREEK CAPITAL LETTER NU",
direction="l",
+ mathclass="variable",
+ mathname="Nu",
lccode=0x03BD,
linebreak="al",
unicodeslot=0x039D,
@@ -8851,6 +8879,8 @@ characters.data={
contextname="greekXi",
description="GREEK CAPITAL LETTER XI",
direction="l",
+ mathclass="variable",
+ mathname="Xi",
lccode=0x03BE,
linebreak="al",
unicodeslot=0x039E,
@@ -8862,6 +8892,8 @@ characters.data={
contextname="greekOmicron",
description="GREEK CAPITAL LETTER OMICRON",
direction="l",
+ mathclass="variable",
+ mathname="Omicron",
lccode=0x03BF,
linebreak="al",
unicodeslot=0x039F,
@@ -8873,6 +8905,8 @@ characters.data={
contextname="greekPi",
description="GREEK CAPITAL LETTER PI",
direction="l",
+ mathclass="variable",
+ mathname="Pi",
lccode=0x03C0,
linebreak="al",
unicodeslot=0x03A0,
@@ -8884,6 +8918,8 @@ characters.data={
contextname="greekRho",
description="GREEK CAPITAL LETTER RHO",
direction="l",
+ mathclass="variable",
+ mathname="Rho",
lccode=0x03C1,
linebreak="al",
unicodeslot=0x03A1,
@@ -8895,6 +8931,8 @@ characters.data={
contextname="greekSigma",
description="GREEK CAPITAL LETTER SIGMA",
direction="l",
+ mathclass="variable",
+ mathname="Sigma",
lccode=0x03C3,
linebreak="al",
unicodeslot=0x03A3,
@@ -8906,6 +8944,8 @@ characters.data={
contextname="greekTau",
description="GREEK CAPITAL LETTER TAU",
direction="l",
+ mathclass="variable",
+ mathname="Tau",
lccode=0x03C4,
linebreak="al",
unicodeslot=0x03A4,
@@ -8917,6 +8957,8 @@ characters.data={
contextname="greekUpsilon",
description="GREEK CAPITAL LETTER UPSILON",
direction="l",
+ mathclass="variable",
+ mathname="Upsilon",
lccode=0x03C5,
linebreak="al",
unicodeslot=0x03A5,
@@ -8928,6 +8970,8 @@ characters.data={
contextname="greekPhi",
description="GREEK CAPITAL LETTER PHI",
direction="l",
+ mathclass="variable",
+ mathname="Phi",
lccode=0x03C6,
linebreak="al",
unicodeslot=0x03A6,
@@ -8939,6 +8983,8 @@ characters.data={
contextname="greekChi",
description="GREEK CAPITAL LETTER CHI",
direction="l",
+ mathclass="variable",
+ mathname="Chi",
lccode=0x03C7,
linebreak="al",
unicodeslot=0x03A7,
@@ -8950,6 +8996,8 @@ characters.data={
contextname="greekPsi",
description="GREEK CAPITAL LETTER PSI",
direction="l",
+ mathclass="variable",
+ mathname="Psi",
lccode=0x03C8,
linebreak="al",
unicodeslot=0x03A8,
@@ -8960,6 +9008,8 @@ characters.data={
contextname="greekOmega",
description="GREEK CAPITAL LETTER OMEGA",
direction="l",
+ mathclass="variable",
+ mathname="Omega",
lccode=0x03C9,
linebreak="al",
unicodeslot=0x03A9,
@@ -9055,6 +9105,8 @@ characters.data={
description="GREEK SMALL LETTER ALPHA",
direction="l",
linebreak="al",
+ mathclass="variable",
+ mathname="alpha",
uccode=0x0391,
unicodeslot=0x03B1,
},
@@ -9066,6 +9118,8 @@ characters.data={
description="GREEK SMALL LETTER BETA",
direction="l",
linebreak="al",
+ mathclass="variable",
+ mathname="beta",
uccode=0x0392,
unicodeslot=0x03B2,
},
@@ -9077,6 +9131,8 @@ characters.data={
description="GREEK SMALL LETTER GAMMA",
direction="l",
linebreak="al",
+ mathclass="variable",
+ mathname="gamma",
uccode=0x0393,
unicodeslot=0x03B3,
},
@@ -9088,6 +9144,8 @@ characters.data={
description="GREEK SMALL LETTER DELTA",
direction="l",
linebreak="al",
+ mathclass="variable",
+ mathname="delta",
uccode=0x0394,
unicodeslot=0x03B4,
},
@@ -9099,6 +9157,8 @@ characters.data={
description="GREEK SMALL LETTER EPSILON",
direction="l",
linebreak="al",
+ mathclass="variable",
+ mathname="varepsilon",
uccode=0x0395,
unicodeslot=0x03B5,
},
@@ -9110,6 +9170,8 @@ characters.data={
description="GREEK SMALL LETTER ZETA",
direction="l",
linebreak="al",
+ mathclass="variable",
+ mathname="zeta",
uccode=0x0396,
unicodeslot=0x03B6,
},
@@ -9121,6 +9183,8 @@ characters.data={
description="GREEK SMALL LETTER ETA",
direction="l",
linebreak="al",
+ mathclass="variable",
+ mathname="eta",
uccode=0x0397,
unicodeslot=0x03B7,
},
@@ -9132,6 +9196,8 @@ characters.data={
description="GREEK SMALL LETTER THETA",
direction="l",
linebreak="al",
+ mathclass="variable",
+ mathname="theta",
uccode=0x0398,
unicodeslot=0x03B8,
},
@@ -9143,6 +9209,8 @@ characters.data={
description="GREEK SMALL LETTER IOTA",
direction="l",
linebreak="al",
+ mathclass="variable",
+ mathname="iota",
uccode=0x0399,
unicodeslot=0x03B9,
},
@@ -9154,6 +9222,8 @@ characters.data={
description="GREEK SMALL LETTER KAPPA",
direction="l",
linebreak="al",
+ mathclass="variable",
+ mathname="kappa",
uccode=0x039A,
unicodeslot=0x03BA,
},
@@ -9165,6 +9235,8 @@ characters.data={
description="GREEK SMALL LETTER LAMDA",
direction="l",
linebreak="al",
+ mathclass="variable",
+ mathname="lambda",
uccode=0x039B,
unicodeslot=0x03BB,
},
@@ -9175,6 +9247,8 @@ characters.data={
description="GREEK SMALL LETTER MU",
direction="l",
linebreak="al",
+ mathclass="variable",
+ mathname="mu",
uccode=0x039C,
unicodeslot=0x03BC,
},
@@ -9186,6 +9260,8 @@ characters.data={
description="GREEK SMALL LETTER NU",
direction="l",
linebreak="al",
+ mathclass="variable",
+ mathname="nu",
uccode=0x039D,
unicodeslot=0x03BD,
},
@@ -9197,6 +9273,8 @@ characters.data={
description="GREEK SMALL LETTER XI",
direction="l",
linebreak="al",
+ mathclass="variable",
+ mathname="xi",
uccode=0x039E,
unicodeslot=0x03BE,
},
@@ -9208,6 +9286,8 @@ characters.data={
description="GREEK SMALL LETTER OMICRON",
direction="l",
linebreak="al",
+ mathclass="variable",
+ mathname="omicron",
uccode=0x039F,
unicodeslot=0x03BF,
},
@@ -9219,6 +9299,8 @@ characters.data={
description="GREEK SMALL LETTER PI",
direction="l",
linebreak="al",
+ mathclass="variable",
+ mathname="pi",
uccode=0x03A0,
unicodeslot=0x03C0,
},
@@ -9230,6 +9312,8 @@ characters.data={
description="GREEK SMALL LETTER RHO",
direction="l",
linebreak="al",
+ mathclass="variable",
+ mathname="rho",
uccode=0x03A1,
unicodeslot=0x03C1,
},
@@ -9240,6 +9324,8 @@ characters.data={
description="GREEK SMALL LETTER FINAL SIGMA",
direction="l",
linebreak="al",
+ mathclass="variable",
+ mathname="varsigma",
uccode=0x03A3,
unicodeslot=0x03C2,
},
@@ -9251,6 +9337,8 @@ characters.data={
description="GREEK SMALL LETTER SIGMA",
direction="l",
linebreak="al",
+ mathclass="variable",
+ mathname="sigma",
uccode=0x03A3,
unicodeslot=0x03C3,
},
@@ -9262,6 +9350,8 @@ characters.data={
description="GREEK SMALL LETTER TAU",
direction="l",
linebreak="al",
+ mathclass="variable",
+ mathname="tau",
uccode=0x03A4,
unicodeslot=0x03C4,
},
@@ -9273,6 +9363,8 @@ characters.data={
description="GREEK SMALL LETTER UPSILON",
direction="l",
linebreak="al",
+ mathclass="variable",
+ mathname="upsilon",
uccode=0x03A5,
unicodeslot=0x03C5,
},
@@ -9284,6 +9376,8 @@ characters.data={
description="GREEK SMALL LETTER PHI",
direction="l",
linebreak="al",
+ mathclass="variable",
+ mathname="varphi",
uccode=0x03A6,
unicodeslot=0x03C6,
},
@@ -9295,6 +9389,8 @@ characters.data={
description="GREEK SMALL LETTER CHI",
direction="l",
linebreak="al",
+ mathclass="variable",
+ mathname="chi",
uccode=0x03A7,
unicodeslot=0x03C7,
},
@@ -9306,6 +9402,8 @@ characters.data={
description="GREEK SMALL LETTER PSI",
direction="l",
linebreak="al",
+ mathclass="variable",
+ mathname="psi",
uccode=0x03A8,
unicodeslot=0x03C8,
},
@@ -9317,6 +9415,8 @@ characters.data={
description="GREEK SMALL LETTER OMEGA",
direction="l",
linebreak="al",
+ mathclass="variable",
+ mathname="omega",
uccode=0x03A9,
unicodeslot=0x03C9,
},
@@ -9396,6 +9496,8 @@ characters.data={
description="GREEK THETA SYMBOL",
direction="l",
linebreak="al",
+ mathclass="variable",
+ mathname="varTheta",
specials={ "compat", 0x03B8 },
uccode=0x0398,
unicodeslot=0x03D1,
@@ -9433,6 +9535,8 @@ characters.data={
direction="l",
linebreak="al",
specials={ "compat", 0x03C6 },
+ mathclass="variable",
+ mathname="phi",
uccode=0x03A6,
unicodeslot=0x03D5,
},
@@ -9443,6 +9547,8 @@ characters.data={
description="GREEK PI SYMBOL",
direction="l",
linebreak="al",
+ mathclass="variable",
+ mathname="varpi",
specials={ "compat", 0x03C0 },
uccode=0x03A0,
unicodeslot=0x03D6,
@@ -9706,6 +9812,8 @@ characters.data={
description="GREEK LUNATE EPSILON SYMBOL",
direction="l",
linebreak="al",
+ mathclass="variable",
+ mathname="epsilon",
specials={ "compat", 0x03B5 },
uccode=0x0395,
unicodeslot=0x03F5,
@@ -13907,6 +14015,7 @@ characters.data={
category="cf",
description="ARABIC NUMBER SIGN",
direction="an",
+ visible="yes",
linebreak="al",
unicodeslot=0x0600,
},
@@ -13914,6 +14023,7 @@ characters.data={
category="cf",
description="ARABIC SIGN SANAH",
direction="an",
+ visible="yes",
linebreak="al",
unicodeslot=0x0601,
},
@@ -13921,6 +14031,7 @@ characters.data={
category="cf",
description="ARABIC FOOTNOTE MARKER",
direction="an",
+ visible="yes",
linebreak="al",
unicodeslot=0x0602,
},
@@ -13928,6 +14039,7 @@ characters.data={
category="cf",
description="ARABIC SIGN SAFHA",
direction="an",
+ visible="yes",
linebreak="al",
unicodeslot=0x0603,
},
@@ -15448,6 +15560,7 @@ characters.data={
category="cf",
description="ARABIC END OF AYAH",
direction="an",
+ visible="yes",
linebreak="al",
unicodeslot=0x06DD,
},
@@ -15797,6 +15910,7 @@ characters.data={
category="cf",
description="SYRIAC ABBREVIATION MARK",
direction="bn",
+ visible="yes",
linebreak="al",
unicodeslot=0x070F,
},
@@ -48736,6 +48850,7 @@ characters.data={
[0x200C]={
adobename="afii61664",
category="cf",
+ contextname="zwnj",
description="ZERO WIDTH NON-JOINER",
direction="bn",
linebreak="cm",
@@ -48744,6 +48859,7 @@ characters.data={
[0x200D]={
adobename="afii301",
category="cf",
+ contextname="zwj",
description="ZERO WIDTH JOINER",
direction="bn",
linebreak="cm",
@@ -49444,7 +49560,7 @@ characters.data={
[0x2061]={
category="cf",
comment="maybe: nulloperator",
- contextcommand="relax",
+ contextname="relax",
description="FUNCTION APPLICATION",
direction="bn",
linebreak="al",
@@ -50038,6 +50154,8 @@ characters.data={
description="COMBINING THREE DOTS ABOVE",
direction="nsm",
linebreak="cm",
+ mathclass="accent",
+ mathname="dddot",
unicodeslot=0x20DB,
},
[0x20DC]={
@@ -59877,6 +59995,8 @@ characters.data={
description="BLACK RIGHT-POINTING TRIANGLE",
direction="on",
linebreak="ai",
+ mathclass="bin",
+ mathname="blacktriangleright",
unicodeslot=0x25B6,
},
[0x25B7]={
@@ -59892,6 +60012,8 @@ characters.data={
description="BLACK RIGHT-POINTING SMALL TRIANGLE",
direction="on",
linebreak="al",
+ mathclass="bin",
+ mathname="blacktriangleleft",
unicodeslot=0x25B8,
},
[0x25B9]={
@@ -108416,6 +108538,7 @@ characters.data={
category="cf",
description="INTERLINEAR ANNOTATION ANCHOR",
direction="on",
+ visible="yes",
linebreak="cm",
unicodeslot=0xFFF9,
},
@@ -108423,6 +108546,7 @@ characters.data={
category="cf",
description="INTERLINEAR ANNOTATION SEPARATOR",
direction="on",
+ visible="yes",
linebreak="cm",
unicodeslot=0xFFFA,
},
@@ -108430,6 +108554,7 @@ characters.data={
category="cf",
description="INTERLINEAR ANNOTATION TERMINATOR",
direction="on",
+ visible="yes",
linebreak="cm",
unicodeslot=0xFFFB,
},
@@ -126093,6 +126218,7 @@ characters.data={
description="MATHEMATICAL ITALIC CAPITAL V",
direction="l",
linebreak="al",
+--mathclass="variable",
specials={ "font", 0x0056 },
unicodeslot=0x1D449,
},
@@ -131209,8 +131335,6 @@ characters.data={
description="MATHEMATICAL ITALIC CAPITAL ALPHA",
direction="l",
linebreak="al",
- mathclass="variable",
- mathname="Alpha",
specials={ "font", 0x0391 },
unicodeslot=0x1D6E2,
},
@@ -131219,8 +131343,6 @@ characters.data={
description="MATHEMATICAL ITALIC CAPITAL BETA",
direction="l",
linebreak="al",
- mathclass="variable",
- mathname="Beta",
specials={ "font", 0x0392 },
unicodeslot=0x1D6E3,
},
@@ -131229,8 +131351,6 @@ characters.data={
description="MATHEMATICAL ITALIC CAPITAL GAMMA",
direction="l",
linebreak="al",
- mathclass="variable",
- mathname="Gamma",
specials={ "font", 0x0393 },
unicodeslot=0x1D6E4,
},
@@ -131239,8 +131359,6 @@ characters.data={
description="MATHEMATICAL ITALIC CAPITAL DELTA",
direction="l",
linebreak="al",
- mathclass="variable",
- mathname="Delta",
specials={ "font", 0x0394 },
unicodeslot=0x1D6E5,
},
@@ -131249,8 +131367,6 @@ characters.data={
description="MATHEMATICAL ITALIC CAPITAL EPSILON",
direction="l",
linebreak="al",
- mathclass="variable",
- mathname="Epsilon",
specials={ "font", 0x0395 },
unicodeslot=0x1D6E6,
},
@@ -131259,8 +131375,6 @@ characters.data={
description="MATHEMATICAL ITALIC CAPITAL ZETA",
direction="l",
linebreak="al",
- mathclass="variable",
- mathname="Zeta",
specials={ "font", 0x0396 },
unicodeslot=0x1D6E7,
},
@@ -131269,8 +131383,6 @@ characters.data={
description="MATHEMATICAL ITALIC CAPITAL ETA",
direction="l",
linebreak="al",
- mathclass="variable",
- mathname="Eta",
specials={ "font", 0x0397 },
unicodeslot=0x1D6E8,
},
@@ -131279,8 +131391,6 @@ characters.data={
description="MATHEMATICAL ITALIC CAPITAL THETA",
direction="l",
linebreak="al",
- mathclass="variable",
- mathname="Theta",
specials={ "font", 0x0398 },
unicodeslot=0x1D6E9,
},
@@ -131289,8 +131399,6 @@ characters.data={
description="MATHEMATICAL ITALIC CAPITAL IOTA",
direction="l",
linebreak="al",
- mathclass="variable",
- mathname="Iota",
specials={ "font", 0x0399 },
unicodeslot=0x1D6EA,
},
@@ -131299,8 +131407,6 @@ characters.data={
description="MATHEMATICAL ITALIC CAPITAL KAPPA",
direction="l",
linebreak="al",
- mathclass="variable",
- mathname="Kappa",
specials={ "font", 0x039A },
unicodeslot=0x1D6EB,
},
@@ -131309,8 +131415,6 @@ characters.data={
description="MATHEMATICAL ITALIC CAPITAL LAMDA",
direction="l",
linebreak="al",
- mathclass="variable",
- mathname="Lambda",
specials={ "font", 0x039B },
unicodeslot=0x1D6EC,
},
@@ -131319,8 +131423,6 @@ characters.data={
description="MATHEMATICAL ITALIC CAPITAL MU",
direction="l",
linebreak="al",
- mathclass="variable",
- mathname="Mu",
specials={ "font", 0x039C },
unicodeslot=0x1D6ED,
},
@@ -131329,8 +131431,6 @@ characters.data={
description="MATHEMATICAL ITALIC CAPITAL NU",
direction="l",
linebreak="al",
- mathclass="variable",
- mathname="Nu",
specials={ "font", 0x039D },
unicodeslot=0x1D6EE,
},
@@ -131339,8 +131439,6 @@ characters.data={
description="MATHEMATICAL ITALIC CAPITAL XI",
direction="l",
linebreak="al",
- mathclass="variable",
- mathname="Xi",
specials={ "font", 0x039E },
unicodeslot=0x1D6EF,
},
@@ -131349,8 +131447,6 @@ characters.data={
description="MATHEMATICAL ITALIC CAPITAL OMICRON",
direction="l",
linebreak="al",
- mathclass="variable",
- mathname="Omicron",
specials={ "font", 0x039F },
unicodeslot=0x1D6F0,
},
@@ -131359,8 +131455,6 @@ characters.data={
description="MATHEMATICAL ITALIC CAPITAL PI",
direction="l",
linebreak="al",
- mathclass="variable",
- mathname="Pi",
specials={ "font", 0x03A0 },
unicodeslot=0x1D6F1,
},
@@ -131369,8 +131463,6 @@ characters.data={
description="MATHEMATICAL ITALIC CAPITAL RHO",
direction="l",
linebreak="al",
- mathclass="variable",
- mathname="Rho",
specials={ "font", 0x03A1 },
unicodeslot=0x1D6F2,
},
@@ -131379,8 +131471,6 @@ characters.data={
description="MATHEMATICAL ITALIC CAPITAL THETA SYMBOL",
direction="l",
linebreak="al",
- mathclass="variable",
- mathname="varTheta",
specials={ "font", 0x03F4 },
unicodeslot=0x1D6F3,
},
@@ -131389,8 +131479,6 @@ characters.data={
description="MATHEMATICAL ITALIC CAPITAL SIGMA",
direction="l",
linebreak="al",
- mathclass="variable",
- mathname="Sigma",
specials={ "font", 0x03A3 },
unicodeslot=0x1D6F4,
},
@@ -131399,8 +131487,6 @@ characters.data={
description="MATHEMATICAL ITALIC CAPITAL TAU",
direction="l",
linebreak="al",
- mathclass="variable",
- mathname="Tau",
specials={ "font", 0x03A4 },
unicodeslot=0x1D6F5,
},
@@ -131409,8 +131495,6 @@ characters.data={
description="MATHEMATICAL ITALIC CAPITAL UPSILON",
direction="l",
linebreak="al",
- mathclass="variable",
- mathname="Upsilon",
specials={ "font", 0x03A5 },
unicodeslot=0x1D6F6,
},
@@ -131419,8 +131503,6 @@ characters.data={
description="MATHEMATICAL ITALIC CAPITAL PHI",
direction="l",
linebreak="al",
- mathclass="variable",
- mathname="Phi",
specials={ "font", 0x03A6 },
unicodeslot=0x1D6F7,
},
@@ -131429,8 +131511,6 @@ characters.data={
description="MATHEMATICAL ITALIC CAPITAL CHI",
direction="l",
linebreak="al",
- mathclass="variable",
- mathname="Chi",
specials={ "font", 0x03A7 },
unicodeslot=0x1D6F8,
},
@@ -131439,8 +131519,6 @@ characters.data={
description="MATHEMATICAL ITALIC CAPITAL PSI",
direction="l",
linebreak="al",
- mathclass="variable",
- mathname="Psi",
specials={ "font", 0x03A8 },
unicodeslot=0x1D6F9,
},
@@ -131449,8 +131527,6 @@ characters.data={
description="MATHEMATICAL ITALIC CAPITAL OMEGA",
direction="l",
linebreak="al",
- mathclass="variable",
- mathname="Omega",
specials={ "font", 0x03A9 },
unicodeslot=0x1D6FA,
},
@@ -131469,8 +131545,6 @@ characters.data={
description="MATHEMATICAL ITALIC SMALL ALPHA",
direction="l",
linebreak="al",
- mathclass="default",
- mathname="alpha",
specials={ "font", 0x03B1 },
unicodeslot=0x1D6FC,
},
@@ -131479,8 +131553,6 @@ characters.data={
description="MATHEMATICAL ITALIC SMALL BETA",
direction="l",
linebreak="al",
- mathclass="default",
- mathname="beta",
specials={ "font", 0x03B2 },
unicodeslot=0x1D6FD,
},
@@ -131489,8 +131561,6 @@ characters.data={
description="MATHEMATICAL ITALIC SMALL GAMMA",
direction="l",
linebreak="al",
- mathclass="default",
- mathname="gamma",
specials={ "font", 0x03B3 },
unicodeslot=0x1D6FE,
},
@@ -131499,8 +131569,6 @@ characters.data={
description="MATHEMATICAL ITALIC SMALL DELTA",
direction="l",
linebreak="al",
- mathclass="default",
- mathname="delta",
specials={ "font", 0x03B4 },
unicodeslot=0x1D6FF,
},
@@ -131509,8 +131577,6 @@ characters.data={
description="MATHEMATICAL ITALIC SMALL EPSILON",
direction="l",
linebreak="al",
- mathclass="default",
- mathname="varepsilon",
specials={ "font", 0x03B5 },
unicodeslot=0x1D700,
},
@@ -131519,8 +131585,6 @@ characters.data={
description="MATHEMATICAL ITALIC SMALL ZETA",
direction="l",
linebreak="al",
- mathclass="default",
- mathname="zeta",
specials={ "font", 0x03B6 },
unicodeslot=0x1D701,
},
@@ -131529,8 +131593,6 @@ characters.data={
description="MATHEMATICAL ITALIC SMALL ETA",
direction="l",
linebreak="al",
- mathclass="default",
- mathname="eta",
specials={ "font", 0x03B7 },
unicodeslot=0x1D702,
},
@@ -131539,8 +131601,6 @@ characters.data={
description="MATHEMATICAL ITALIC SMALL THETA",
direction="l",
linebreak="al",
- mathclass="default",
- mathname="theta",
specials={ "font", 0x03B8 },
unicodeslot=0x1D703,
},
@@ -131549,8 +131609,6 @@ characters.data={
description="MATHEMATICAL ITALIC SMALL IOTA",
direction="l",
linebreak="al",
- mathclass="default",
- mathname="iota",
specials={ "font", 0x03B9 },
unicodeslot=0x1D704,
},
@@ -131559,8 +131617,6 @@ characters.data={
description="MATHEMATICAL ITALIC SMALL KAPPA",
direction="l",
linebreak="al",
- mathclass="default",
- mathname="kappa",
specials={ "font", 0x03BA },
unicodeslot=0x1D705,
},
@@ -131569,8 +131625,6 @@ characters.data={
description="MATHEMATICAL ITALIC SMALL LAMDA",
direction="l",
linebreak="al",
- mathclass="default",
- mathname="lambda",
specials={ "font", 0x03BB },
unicodeslot=0x1D706,
},
@@ -131579,8 +131633,6 @@ characters.data={
description="MATHEMATICAL ITALIC SMALL MU",
direction="l",
linebreak="al",
- mathclass="default",
- mathname="mu",
specials={ "font", 0x03BC },
unicodeslot=0x1D707,
},
@@ -131589,8 +131641,6 @@ characters.data={
description="MATHEMATICAL ITALIC SMALL NU",
direction="l",
linebreak="al",
- mathclass="default",
- mathname="nu",
specials={ "font", 0x03BD },
unicodeslot=0x1D708,
},
@@ -131599,8 +131649,6 @@ characters.data={
description="MATHEMATICAL ITALIC SMALL XI",
direction="l",
linebreak="al",
- mathclass="default",
- mathname="xi",
specials={ "font", 0x03BE },
unicodeslot=0x1D709,
},
@@ -131609,8 +131657,6 @@ characters.data={
description="MATHEMATICAL ITALIC SMALL OMICRON",
direction="l",
linebreak="al",
- mathclass="default",
- mathname="omicron",
specials={ "font", 0x03BF },
unicodeslot=0x1D70A,
},
@@ -131619,8 +131665,6 @@ characters.data={
description="MATHEMATICAL ITALIC SMALL PI",
direction="l",
linebreak="al",
- mathclass="default",
- mathname="pi",
specials={ "font", 0x03C0 },
unicodeslot=0x1D70B,
},
@@ -131629,8 +131673,6 @@ characters.data={
description="MATHEMATICAL ITALIC SMALL RHO",
direction="l",
linebreak="al",
- mathclass="default",
- mathname="rho",
specials={ "font", 0x03C1 },
unicodeslot=0x1D70C,
},
@@ -131639,8 +131681,6 @@ characters.data={
description="MATHEMATICAL ITALIC SMALL FINAL SIGMA",
direction="l",
linebreak="al",
- mathclass="default",
- mathname="varsigma",
specials={ "font", 0x03C2 },
unicodeslot=0x1D70D,
},
@@ -131649,8 +131689,6 @@ characters.data={
description="MATHEMATICAL ITALIC SMALL SIGMA",
direction="l",
linebreak="al",
- mathclass="default",
- mathname="sigma",
specials={ "font", 0x03C3 },
unicodeslot=0x1D70E,
},
@@ -131659,8 +131697,6 @@ characters.data={
description="MATHEMATICAL ITALIC SMALL TAU",
direction="l",
linebreak="al",
- mathclass="default",
- mathname="tau",
specials={ "font", 0x03C4 },
unicodeslot=0x1D70F,
},
@@ -131669,8 +131705,6 @@ characters.data={
description="MATHEMATICAL ITALIC SMALL UPSILON",
direction="l",
linebreak="al",
- mathclass="default",
- mathname="upsilon",
specials={ "font", 0x03C5 },
unicodeslot=0x1D710,
},
@@ -131679,8 +131713,6 @@ characters.data={
description="MATHEMATICAL ITALIC SMALL PHI",
direction="l",
linebreak="al",
- mathclass="default",
- mathname="varphi",
specials={ "font", 0x03C6 },
unicodeslot=0x1D711,
},
@@ -131689,8 +131721,6 @@ characters.data={
description="MATHEMATICAL ITALIC SMALL CHI",
direction="l",
linebreak="al",
- mathclass="default",
- mathname="chi",
specials={ "font", 0x03C7 },
unicodeslot=0x1D712,
},
@@ -131699,8 +131729,6 @@ characters.data={
description="MATHEMATICAL ITALIC SMALL PSI",
direction="l",
linebreak="al",
- mathclass="default",
- mathname="psi",
specials={ "font", 0x03C8 },
unicodeslot=0x1D713,
},
@@ -131709,8 +131737,6 @@ characters.data={
description="MATHEMATICAL ITALIC SMALL OMEGA",
direction="l",
linebreak="al",
- mathclass="default",
- mathname="omega",
specials={ "font", 0x03C9 },
unicodeslot=0x1D714,
},
@@ -131727,8 +131753,6 @@ characters.data={
description="MATHEMATICAL ITALIC EPSILON SYMBOL",
direction="l",
linebreak="al",
- mathclass="default",
- mathname="epsilon",
specials={ "font", 0x03F5 },
unicodeslot=0x1D716,
},
@@ -131757,8 +131781,6 @@ characters.data={
description="MATHEMATICAL ITALIC PHI SYMBOL",
direction="l",
linebreak="al",
- mathclass="default",
- mathname="phi",
specials={ "font", 0x03D5 },
unicodeslot=0x1D719,
},
@@ -131767,7 +131789,7 @@ characters.data={
description="MATHEMATICAL ITALIC RHO SYMBOL",
direction="l",
linebreak="al",
- mathclass="default",
+ mathclass="variable",
mathname="varrho",
specials={ "font", 0x03F1 },
unicodeslot=0x1D71A,
@@ -131777,8 +131799,6 @@ characters.data={
description="MATHEMATICAL ITALIC PI SYMBOL",
direction="l",
linebreak="al",
- mathclass="default",
- mathname="varpi",
specials={ "font", 0x03D6 },
unicodeslot=0x1D71B,
},
diff --git a/Master/texmf-dist/tex/context/base/char-enc.lua b/Master/texmf-dist/tex/context/base/char-enc.lua
index a4e5ac77d58..45f404ee985 100644
--- a/Master/texmf-dist/tex/context/base/char-enc.lua
+++ b/Master/texmf-dist/tex/context/base/char-enc.lua
@@ -1,6 +1,6 @@
if not modules then modules = { } end modules ['char-syn'] = {
version = 1.001,
- comment = "companion to char-ini.tex",
+ comment = "companion to char-ini.mkiv",
author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
copyright = "PRAGMA ADE / ConTeXt Development Team",
license = "see context related readme files"
diff --git a/Master/texmf-dist/tex/context/base/char-ini.lua b/Master/texmf-dist/tex/context/base/char-ini.lua
index ff42d91eeaa..5c4a40bad51 100644
--- a/Master/texmf-dist/tex/context/base/char-ini.lua
+++ b/Master/texmf-dist/tex/context/base/char-ini.lua
@@ -1,6 +1,6 @@
if not modules then modules = { } end modules ['char-ini'] = {
version = 1.001,
- comment = "companion to char-ini.tex",
+ comment = "companion to char-ini.mkiv",
author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
copyright = "PRAGMA ADE / ConTeXt Development Team",
license = "see context related readme files"
@@ -11,7 +11,7 @@ xml = xml or { }
local utf = unicode.utf8
-local utfchar, utfbyte = utf.char, utf.byte
+local utfchar, utfbyte, utfvalues = utf.char, utf.byte, string.utfvalues
local concat = table.concat
local next, tonumber = next, tonumber
local texsprint, texprint = tex.sprint, tex.print
@@ -422,6 +422,7 @@ function characters.define(tobelettered, tobeactivated) -- catcodetables
end
end
elseif is_command[category] then
+ -- this might change: contextcommand ipv contextname
-- texprint(format("{\\catcode %s=13\\unexpanded\\gdef %s{\\%s}}",u,utfchar(u),contextname))
texsprint("{\\catcode",u,"=13\\unexpanded\\gdef ",utfchar(u),"{\\"..contextname,"}}") -- no texprint
activated[#activated+1] = "\\c"..u.."\\a"
@@ -607,28 +608,91 @@ function characters.n_is_of_category(n,category) -- by name (string)
return cd and cd.category == category
end
--- xml support
-
-characters.active_offset = 0x10000
-
-xml.entities = xml.entities or { }
-
-storage.register("xml/entities",xml.entities,"xml.entities") -- this will move to lxml
+-- xml support (moved)
function characters.remapentity(chr,slot)
texsprint(format("{\\catcode%s=13\\xdef%s{\\string%s}}",slot,utfchar(slot),chr))
end
-function characters.setmkiventities()
- local entities = xml.entities
- entities.lt = "<"
- entities.amp = "&"
- entities.gt = ">"
+characters.active_offset = 0x10000 -- there will be remapped in that byte range
+
+-- xml.entities = xml.entities or { }
+--
+-- storage.register("xml/entities",xml.entities,"xml.entities") -- this will move to lxml
+--
+-- function characters.setmkiventities()
+-- local entities = xml.entities
+-- entities.lt = "<"
+-- entities.amp = "&"
+-- entities.gt = ">"
+-- end
+--
+-- function characters.setmkiientities()
+-- local entities = xml.entities
+-- entities.lt = utfchar(characters.active_offset + utfbyte("<"))
+-- entities.amp = utfchar(characters.active_offset + utfbyte("&"))
+-- entities.gt = utfchar(characters.active_offset + utfbyte(">"))
+-- end
+
+-- some day we will make a table
+
+function characters.lower(str)
+ local new = { }
+ for u in utfvalues(str) do
+ new[#new+1] = utfchar(data[u].lccode or u)
+ end
+ return concat(new)
end
-function characters.setmkiientities()
- local entities = xml.entities
- entities.lt = utfchar(characters.active_offset + utfbyte("<"))
- entities.amp = utfchar(characters.active_offset + utfbyte("&"))
- entities.gt = utfchar(characters.active_offset + utfbyte(">"))
+function characters.upper(str)
+ local new = { }
+ for u in utfvalues(str) do
+ new[#new+1] = utfchar(data[u].uccode or u)
+ end
+ return concat(new)
end
+
+-- -- some day we might go this route, but it does not really save that much
+-- -- so not now (we can generate a lot using mtx-unicode that operates on the
+-- -- database)
+--
+-- -- category cjkwd direction linebreak
+--
+-- -- adobename comment contextcommand contextname description fallback lccode
+-- -- mathclass mathfiller mathname mathspec mathstretch mathsymbol mirror
+-- -- range shcode specials uccode uccodes unicodeslot
+--
+-- local data = {
+-- ['one']={
+-- common = {
+-- category="cc",
+-- direction="bn",
+-- linebreak="cm",
+-- },
+-- vector = {
+-- [0x0000] = {
+-- description="NULL",
+-- group='one',
+-- unicodeslot=0x0000,
+-- },
+-- {
+-- description="START OF HEADING",
+-- group='one',
+-- unicodeslot=0x0001,
+-- },
+-- }
+-- }
+-- }
+--
+-- local chardata, groupdata = { }, { }
+--
+-- for group, gdata in next, data do
+-- local common, vector = { __index = gdata.common }, gdata.vector
+-- for character, cdata in next, vector do
+-- chardata[character] = cdata
+-- setmetatable(cdata,common)
+-- end
+-- groupdata[group] = gdata
+-- end
+
+--~ characters.data, characters.groups = chardata, groupdata
diff --git a/Master/texmf-dist/tex/context/base/char-ini.mkiv b/Master/texmf-dist/tex/context/base/char-ini.mkiv
index daa20e72867..0d5e16bb04b 100644
--- a/Master/texmf-dist/tex/context/base/char-ini.mkiv
+++ b/Master/texmf-dist/tex/context/base/char-ini.mkiv
@@ -17,6 +17,7 @@
\registerctxluafile{char-ini}{1.001}
\registerctxluafile{char-cmp}{1.001} % maybe we will load this someplace else
\registerctxluafile{char-map}{1.001} % maybe we will load this someplace else
+\registerctxluafile{char-tex}{1.001}
\unprotect
@@ -69,6 +70,7 @@
\number\xmlcatcodesr,
}
)
+ catcodes.register("xmlcatcodes",\number\xmlcatcodes)
}
\protect \endinput
diff --git a/Master/texmf-dist/tex/context/base/char-map.lua b/Master/texmf-dist/tex/context/base/char-map.lua
index 0d8422bc2d3..3f8cc3b3d3c 100644
--- a/Master/texmf-dist/tex/context/base/char-map.lua
+++ b/Master/texmf-dist/tex/context/base/char-map.lua
@@ -1,6 +1,6 @@
if not modules then modules = { } end modules ['char-map'] = {
version = 1.001,
- comment = "companion to char-ini.tex",
+ comment = "companion to char-ini.mkiv",
author = "Hans Hagen & Arthur Reutenauer",
copyright = "PRAGMA ADE / ConTeXt Development Team",
license = "see context related readme files"
diff --git a/Master/texmf-dist/tex/context/base/char-tex.lua b/Master/texmf-dist/tex/context/base/char-tex.lua
new file mode 100644
index 00000000000..ed9a244d781
--- /dev/null
+++ b/Master/texmf-dist/tex/context/base/char-tex.lua
@@ -0,0 +1,89 @@
+if not modules then modules = { } end modules ['char-tex'] = {
+ version = 1.001,
+ comment = "companion to char-ini.mkiv",
+ author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
+ copyright = "PRAGMA ADE / ConTeXt Development Team",
+ license = "see context related readme files"
+}
+
+characters = characters or { }
+characters.tex = characters.tex or { }
+
+local find = string.find
+
+local accent_map = {
+ ['~'] = "̃" , -- ̃ Ẽ
+ ['"'] = "̈" , -- ̈ Ë
+ ["`"] = "̀" , -- ̀ È
+ ["'"] = "́" , -- ́ É
+ ["^"] = "̂" , -- ̂ Ê
+ -- ̄ Ē
+ -- ̆ Ĕ
+ -- ̇ Ė
+ -- ̉ Ẻ
+ -- ̌ Ě
+ -- ̏ Ȅ
+ -- ̑ Ȇ
+ -- ̣ Ẹ
+ -- ̧ Ȩ
+ -- ̨ Ę
+ -- ̭ Ḙ
+ -- ̰ Ḛ
+}
+
+local accents = table.concat(table.keys(accent_map))
+
+local function remap_accents(a,c,braced)
+ local m = accent_map[a]
+ if m then
+ return c .. m
+ elseif braced then
+ return "\\" .. a .. "{" .. c .. "}"
+ else
+ return "\\" .. a .. c
+ end
+end
+
+local command_map = {
+ ["i"] = "ı"
+}
+
+local function remap_commands(c)
+ local m = command_map[c]
+ if m then
+ return m
+ else
+ return "\\" .. c
+ end
+end
+
+local P, C, R, S, Cs, Cc = lpeg.P, lpeg.C, lpeg.R, lpeg.S, lpeg.Cs, lpeg.Cc
+local U, lpegmatch = lpeg.patterns.utf8, lpeg.match
+
+local accents = (P('\\') * C(S(accents)) * (P("{") * C(U) * P("}" * Cc(true)) + C(U) * Cc(false))) / remap_accents
+local commands = (P('\\') * C(R("az","AZ")^1)) / remap_commands
+
+local convert_accents = Cs((accents + P(1))^0)
+local convert_commands = Cs((commands + P(1))^0)
+
+local no_l = P("{") / ""
+local no_r = P("}") / ""
+
+local convert_accents_strip = Cs((no_l * accents * no_r + accents + P(1))^0)
+local convert_commands_strip = Cs((no_l * commands * no_r + commands + P(1))^0)
+
+function characters.tex.toutf(str,strip)
+ if find(str,"\\") then -- we can start at teh found position
+ if strip then
+ str = lpegmatch(convert_commands_strip,str)
+ str = lpegmatch(convert_accents_strip,str)
+ else
+ str = lpegmatch(convert_commands,str)
+ str = lpegmatch(convert_accents,str)
+ end
+ end
+ return str
+end
+
+--~ print(characters.tex.toutf([[\"{e}]]),true)
+--~ print(characters.tex.toutf([[{\"{e}}]],true))
diff --git a/Master/texmf-dist/tex/context/base/char-utf.lua b/Master/texmf-dist/tex/context/base/char-utf.lua
index 7dd5d914f79..6dd85fdc87d 100644
--- a/Master/texmf-dist/tex/context/base/char-utf.lua
+++ b/Master/texmf-dist/tex/context/base/char-utf.lua
@@ -1,6 +1,6 @@
if not modules then modules = { } end modules ['char-utf'] = {
version = 1.001,
- comment = "companion to char-utf.tex",
+ comment = "companion to char-utf.mkiv",
author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
copyright = "PRAGMA ADE / ConTeXt Development Team",
license = "see context related readme files"
diff --git a/Master/texmf-dist/tex/context/base/char-utf.mkiv b/Master/texmf-dist/tex/context/base/char-utf.mkiv
index d21cd842cc2..16b4029d8cb 100644
--- a/Master/texmf-dist/tex/context/base/char-utf.mkiv
+++ b/Master/texmf-dist/tex/context/base/char-utf.mkiv
@@ -41,7 +41,7 @@
%D \definecomposedutf 318 108 126 % lcaron
%D \stoptyping
-\def\definecomposedutf#1 #2 #3 %
+\unexpanded\def\definecomposedutf#1 #2 #3 %
{\ctxlua{characters.filters.utf.add_grapheme("#1","#2","#3")}}
\protect
diff --git a/Master/texmf-dist/tex/context/base/chem-ini.lua b/Master/texmf-dist/tex/context/base/chem-ini.lua
index 27b73484008..90874909207 100644
--- a/Master/texmf-dist/tex/context/base/chem-ini.lua
+++ b/Master/texmf-dist/tex/context/base/chem-ini.lua
@@ -1,12 +1,13 @@
if not modules then modules = { } end modules ['chem-ini'] = {
version = 1.001,
- comment = "companion to chem-ini.tex",
+ comment = "companion to chem-ini.mkiv",
author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
copyright = "PRAGMA ADE / ConTeXt Development Team",
license = "see context related readme files"
}
local format, texsprint = string.format, tex.sprint
+local lpegmatch = lpeg.match
local trace_molecules = false trackers.register("chemistry.molecules", function(v) trace_molecules = v end)
@@ -60,15 +61,15 @@ local parser = lpeg.Cs((csname + lowhigh + highlow + low + high + sign + any
chemicals.moleculeparser = parser -- can be used to avoid functioncall
function chemicals.molecule(str)
- return parser:match(str)
+ return lpegmatch(parser,str)
end
function commands.molecule(str)
if trace_molecules then
- local rep = parser:match(str)
+ local rep = lpegmatch(parser,str)
logs.report("chemistry", "molecule %s => %s",str,rep)
texsprint(ctxcatcodes,rep)
else
- texsprint(ctxcatcodes,parser:match(str))
+ texsprint(ctxcatcodes,lpegmatch(parser,str))
end
end
diff --git a/Master/texmf-dist/tex/context/base/chem-ini.mkiv b/Master/texmf-dist/tex/context/base/chem-ini.mkiv
index da240dbace5..5184fe1a7a0 100644
--- a/Master/texmf-dist/tex/context/base/chem-ini.mkiv
+++ b/Master/texmf-dist/tex/context/base/chem-ini.mkiv
@@ -17,7 +17,7 @@
\unprotect
%D \macros
-%D {\molecule}
+%D {molecule}
%D
%D Quick and dirty:
%D
diff --git a/Master/texmf-dist/tex/context/base/chem-str.lua b/Master/texmf-dist/tex/context/base/chem-str.lua
index 8ab48fca2af..ad4cc6c1be4 100644
--- a/Master/texmf-dist/tex/context/base/chem-str.lua
+++ b/Master/texmf-dist/tex/context/base/chem-str.lua
@@ -1,6 +1,6 @@
if not modules then modules = { } end modules ['chem-str'] = {
version = 1.001,
- comment = "companion to chem-str.tex",
+ comment = "companion to chem-str.mkiv",
author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
copyright = "PRAGMA ADE / ConTeXt Development Team",
license = "see context related readme files"
@@ -17,6 +17,7 @@ local format, gmatch, match, lower, gsub = string.format, string.gmatch, string.
local concat, insert, remove = table.concat, table.insert, table.remove
local apply = structure.processors.apply
local texsprint, ctxcatcodes = tex.sprint, tex.ctxcatcodes
+local lpegmatch = lpeg.match
local variables = interfaces.variables
@@ -59,7 +60,7 @@ local one_keys = {
sb = "line", db = "line", tb = "line",
ep = "line", es = "line", ed = "line", et = "line",
sd = "line", ldd = "line", rdd = "line",
- hb = "line", bb = "line", oe = "line",
+ hb = "line", bb = "line", oe = "line", bd = "line", bw = "line",
z = "text", cz = "text", zt = "text", zn = "number",
zbt = "text", zbn = "number", ztt = "text", ztn = "number",
mov = "transform", sub = "transform", dir = "transform", off = "transform",
@@ -141,10 +142,11 @@ local syntax = {
local definitions = { }
function chemicals.undefine(name)
- definitions[name] = nil
+ definitions[lower(name)] = nil
end
function chemicals.define(name,spec,text)
+ name = lower(name)
local dn = definitions[name]
if not dn then dn = { } definitions[name] = dn end
dn[#dn+1] = {
@@ -154,7 +156,7 @@ function chemicals.define(name,spec,text)
end
local metacode, kind, keys, bonds, max, txt, textsize, rot, pstack
-local molecule = chemicals.molecule -- or use chemicals.moleculeparser:match(...)
+local molecule = chemicals.molecule -- or use lpegmatch(chemicals.moleculeparser,...)
local function fetch(txt)
local st = stack[txt]
@@ -197,12 +199,12 @@ local pattern =
lpeg.Cc(false) * lpeg.Cc(false) * lpeg.Cc(false) * text
)
---~ local n, operation, index, upto, set, text = pattern:match("RZ1357")
+--~ local n, operation, index, upto, set, text = lpegmatch(pattern,"RZ1357")
---~ print(pattern:match("RZ=x")) 1 RZ false false false x
---~ print(pattern:match("RZ1=x")) 1 RZ 1 false false x
---~ print(pattern:match("RZ1..3=x")) 1 RZ 1 3 false x
---~ print(pattern:match("RZ13=x")) 1 RZ false false table x
+--~ print(lpegmatch(pattern,"RZ=x")) 1 RZ false false false x
+--~ print(lpegmatch(pattern,"RZ1=x")) 1 RZ 1 false false x
+--~ print(lpegmatch(pattern,"RZ1..3=x")) 1 RZ 1 3 false x
+--~ print(lpegmatch(pattern,"RZ13=x")) 1 RZ false false table x
local function process(spec,text,n,rulethickness,rulecolor,offset)
insert(stack,{ spec=spec, text=text, n=n })
@@ -216,7 +218,7 @@ local function process(spec,text,n,rulethickness,rulecolor,offset)
process(di.spec,di.text,1,rulethickness,rulecolor)
end
else
- local rep, operation, special, index, upto, set, text = pattern:match(s)
+ local rep, operation, special, index, upto, set, text = lpegmatch(pattern,s)
if operation == "pb" then
insert(pstack,kind)
metacode[#metacode+1] = syntax.pb.direct
@@ -441,7 +443,7 @@ function chemicals.stop()
if trace_structure then
logs.report("chemical", "metapost code:\n%s", mpcode)
end
- metapost.graphic(chemicals.instance,chemicals.format,mpcode,"")
+ metapost.graphic(chemicals.instance,chemicals.format,mpcode)
metacode = nil
end
diff --git a/Master/texmf-dist/tex/context/base/chem-str.mkiv b/Master/texmf-dist/tex/context/base/chem-str.mkiv
index 29c6fe939bd..1e17218c875 100644
--- a/Master/texmf-dist/tex/context/base/chem-str.mkiv
+++ b/Master/texmf-dist/tex/context/base/chem-str.mkiv
@@ -49,7 +49,7 @@
\unprotect
-\def\setupchemical
+\unexpanded\def\setupchemical
{\dosingleempty\dosetupchemical}
\def\dosetupchemical
@@ -57,7 +57,7 @@
\let\setupchemicals\setupchemical
-\def\setupchemicalframed
+\unexpanded\def\setupchemicalframed
{\dosingleempty\dosetupchemicalframed}
\def\dosetupchemicalframed
@@ -65,7 +65,7 @@
\def\chemicalparameter#1{\csname\??cm#1\endcsname}
-\def\definechemical
+\unexpanded\def\definechemical
{\dosingleargument\dodefinechemical} % global
\def\dodefinechemical[#1]#2%
@@ -76,7 +76,7 @@
#2% flush
\stopnointerference}
-\def\definechemicalsymbol
+\unexpanded\def\definechemicalsymbol
{\dodoubleempty\dodefinechemicalsymbol}
\def\dodefinechemicalsymbol[#1][#2]%
@@ -100,6 +100,9 @@
\def\dochemicaltext#1% in ppchtex we had a more clever alignment
{\dosetchemicaltext\strut#1} % maybe also \setstrut
+\def\dochemicaltext#1%
+ {\mathematics{\dosetchemicaltext\strut\ifcase\currentxfontsize\or\scriptstyle\or\scriptscriptstyle\fi#1}}
+
\newconditional\indisplaychemical
\unexpanded\def\startchemical
@@ -437,7 +440,7 @@
\newif\ifinchemicalformula
-\def\startchemicalformula
+\unexpanded\def\startchemicalformula
{\mathortext\vcenter\vbox\bgroup
\forgetall
\inchemicalformulatrue
@@ -450,7 +453,7 @@
\setfalse\formulachemicalhastop
\setfalse\formulachemicalhasbot }
-\def\stopchemicalformula
+\unexpanded\def\stopchemicalformula
{\tabskip1em\relax
\nointerlineskip
\ifconditional\formulachemicalhastop
diff --git a/Master/texmf-dist/tex/context/base/colo-ext.mkii b/Master/texmf-dist/tex/context/base/colo-ext.mkii
index 06facd34ee2..473c010e028 100644
--- a/Master/texmf-dist/tex/context/base/colo-ext.mkii
+++ b/Master/texmf-dist/tex/context/base/colo-ext.mkii
@@ -42,12 +42,14 @@
%D handling. Here we deal with a per-document setting.
\setupcolors
- [\c!overprint=\v!no]
+ [\c!intent=\v!none]
\def\starttextoverprint
- {\doifelse\@@cloverprint\v!yes
- {\let\stoptextoverprint\dostopoverprint\dostartoverprint}
- {\let\stoptextoverprint\donothing}}
+ {\doifelse\@@clintent\v!overprint
+ {\glet\stoptextoverprint \dostopoverprint
+ \glet\starttextoverprint\dostartoverprint
+ \dostartoverprint}
+ {\glet\stoptextoverprint\donothing}}
\let\stoptextoverprint\donothing
diff --git a/Master/texmf-dist/tex/context/base/colo-ext.mkiv b/Master/texmf-dist/tex/context/base/colo-ext.mkiv
index 1c1f0d1afff..b17608f59c1 100644
--- a/Master/texmf-dist/tex/context/base/colo-ext.mkiv
+++ b/Master/texmf-dist/tex/context/base/colo-ext.mkiv
@@ -41,17 +41,63 @@
%D or independent. For the moment we only support independent overprint
%D handling. Here we deal with a per-document setting.
+\unexpanded\def\startcolorintent[#1]%
+ {\pushattribute\colorintentattribute
+ \dotriggercolorintent{#1}}
+
+\unexpanded\def\stopcolorintent
+ {\popattribute\colorintentattribute}
+
+\unexpanded\def\startoverprint{\startcolorintent[\v!overprint]}
+\unexpanded\def\stopoverprint {\stopcolorintent}
+
+\unexpanded\def\startknockout {\startcolorintent[\v!knockout ]}
+\unexpanded\def\stopknockout {\stopcolorintent}
+
+\let\starttextcolorintent\relax
+\let\stoptextcolorintent \relax
+
\setupcolors
[\c!overprint=\v!no]
-\def\starttextoverprint
- {\doifelse\@@cloverprint\v!yes
- {\let\stoptextoverprint\stopoverprintproperty\startoverprintproperty}
- {\let\stoptextoverprint\donothing}}
+\appendtoks
+ \dosettextcolorintent
+\to \everysetupcolors
+
+\def\dosettextcolorintent
+ {\doifnot\@@clintent\v!none
+ {\xdef\starttextcolorintent{\noexpand\dotriggercolorintent{\@@clintent}}%
+ \glet\dosettextcolorintent\relax
+ \dotriggercolorintent\@@clintent}}
+
+\appendtoks \starttextcolorintent \to \everystarttextproperties
+\appendtoks \stoptextcolorintent \to \everystoptextproperties
+
+\setupcolors[\c!intent=\v!none]
+
+% A goodie that replaces the startMPcolor hackery
+%
+% \definecolor[red-t] [r=1,t=0.5,a=1]
+% \definecolor[green-t][g=1,t=0.5,a=1]
+% \defineintermediatecolor[mycolora][0.5,red,green]
+% \defineintermediatecolor[mycolorb][0.5,red-t,green-t]
+% \starttext
+% test {\mycolora OEPS} test
+% test {\mycolorb OEPS} test
+% \stoptext
+
+\unexpanded\def\defineintermediatecolor
+ {\dotripleempty\dodefineintermediatecolor}
-\let\stoptextoverprint\donothing
+\def\dodefineintermediatecolor[#1][#2][#3]% \dotripleempty adds {} inside []
+ {\dododefineintermediatecolor[#1][#2][#3]}
-\appendtoks \starttextoverprint \to \everystarttextproperties
-\appendtoks \stoptextoverprint \to \everystoptextproperties
+\def\dododefineintermediatecolor[#1][#2,#3,#4][#5]%
+ {\ifconditional\collectcolorsinlist\collectcolorinlist{#1}\fi
+ \ctxlua{colors.defineintermediatecolor("#1","#2",
+ \thecolorattribute{#3},\thecolorattribute{#4},
+ \thetransparencyattribute{#3},\thetransparencyattribute{#4},
+ "#5",false,\iffreezecolors true\else false\fi)}% not global
+ \dodefinecolorcommand\setvalue{#1}}
\protect \endinput
diff --git a/Master/texmf-dist/tex/context/base/colo-hex.mkii b/Master/texmf-dist/tex/context/base/colo-hex.mkii
index 7cef6e8a2ad..db67f184102 100644
--- a/Master/texmf-dist/tex/context/base/colo-hex.mkii
+++ b/Master/texmf-dist/tex/context/base/colo-hex.mkii
@@ -11,8 +11,8 @@
%C therefore copyrighted by \PRAGMA. See mreadme.pdf for
%C details.
-\ifx\dodododefinecolor\undefined \else
- \endinput
+\ifdefined \hexcolorprefix
+ \expandafter \endinput
\fi
\writestatus{loading}{ConTeXt Color Macros / Hexadecimal}
diff --git a/Master/texmf-dist/tex/context/base/colo-hex.mkiv b/Master/texmf-dist/tex/context/base/colo-hex.mkiv
index dd8e039389b..f661b2445f1 100644
--- a/Master/texmf-dist/tex/context/base/colo-hex.mkiv
+++ b/Master/texmf-dist/tex/context/base/colo-hex.mkiv
@@ -23,4 +23,6 @@
% fill (point 0 of p -- point 3 of p -- point 2 of p --cycle) withcolor \MPcolor{hextestcolor} ; % top left part
% \stopMPpage
+\def\checkhexcolor[#1]{\doifcolorelse{#1}\donothing{\definecolor[#1][x=#1]}} % is this ok?
+
\endinput
diff --git a/Master/texmf-dist/tex/context/base/colo-ini.lua b/Master/texmf-dist/tex/context/base/colo-ini.lua
index a67df6a778e..342d6110dca 100644
--- a/Master/texmf-dist/tex/context/base/colo-ini.lua
+++ b/Master/texmf-dist/tex/context/base/colo-ini.lua
@@ -1,16 +1,19 @@
if not modules then modules = { } end modules ['colo-ini'] = {
version = 1.000,
- comment = "companion to colo-ini.tex",
+ comment = "companion to colo-ini.mkiv",
author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
copyright = "PRAGMA ADE / ConTeXt Development Team",
license = "see context related readme files"
}
+local type = type
local concat = table.concat
-local format, gmatch, gsub, lower, match = string.format, string.gmatch, string.gsub, string.lower, string.match
+local format, gmatch, gsub, lower, match, find = string.format, string.gmatch, string.gsub, string.lower, string.match, string.find
local texsprint = tex.sprint
local ctxcatcodes = tex.ctxcatcodes
+local trace_define = false trackers.register("colors.define",function(v) trace_define = v end)
+
local settings_to_hash_strict = aux.settings_to_hash_strict
colors = colors or { }
@@ -23,89 +26,93 @@ local a_transparency = attributes.private('transparency')
local a_colorspace = attributes.private('colormodel')
local a_background = attributes.private('background')
-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 = "\\localundefine{(ca:%s)}" ..
- "\\localundefine{(cs:%s)}"
-local r_g_c_template = "\\globalundefine{(ca:%s)}" ..
- "\\globalundefine{(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 = "\\localundefine{(ta:%s)}" ..
- "\\localundefine{(ts:%s)}"
-local r_g_t_template = "\\globalundefine{(ta:%s)}" ..
- "\\globalundefine{(ts:%s)}"
+local register_color = colors.register
+local attributes_list = attributes.list
local function definecolor(name, ca, global)
if ca and ca > 0 then
if global then
- texsprint(ctxcatcodes,format(a_g_c_template, name, ca, name, ca))
+ if trace_define then
+ commands.writestatus("color","define global color '%s' with attribute: %s",name,ca)
+ end
+ context.colordefagc(name,ca)
else
- texsprint(ctxcatcodes,format(a_l_c_template, name, ca, name, ca))
+ if trace_define then
+ commands.writestatus("color","define local color '%s' with attribute: %s",name,ca)
+ end
+ context.colordefalc(name,ca)
end
else
if global then
- texsprint(ctxcatcodes,format(r_g_c_template, name, name))
+ context.colordefrgc(name)
else
- texsprint(ctxcatcodes,format(r_l_c_template, name, name))
+ context.colordefrlc(name)
end
end
end
+
local function inheritcolor(name, ca, global)
if ca and ca ~= "" then
if global then
- texsprint(ctxcatcodes,format(f_g_c_template, name, ca, name, ca))
+ if trace_define then
+ commands.writestatus("color","inherit global color '%s' with attribute: %s",name,ca)
+ end
+ context.colordeffgc(name,ca)
else
- texsprint(ctxcatcodes,format(f_l_c_template, name, ca, name, ca))
+ if trace_define then
+ commands.writestatus("color","inherit local color '%s' with attribute: %s",name,ca)
+ end
+ context.colordefflc(name,ca)
end
else
if global then
- texsprint(ctxcatcodes,format(r_g_c_template, name, name))
+ context.colordefrgc(name)
else
- texsprint(ctxcatcodes,format(r_l_c_template, name, name))
+ context.colordefrlc(name)
end
end
end
+
local function definetransparent(name, ta, global)
if ta and ta > 0 then
if global then
- texsprint(ctxcatcodes,format(a_g_t_template, name, ta, name, ta))
+ if trace_define then
+ commands.writestatus("color","define global transparency '%s' with attribute: %s",name,ta)
+ end
+ context.colordefagt(name,ta)
else
- texsprint(ctxcatcodes,format(a_l_t_template, name, ta, name, ta))
+ if trace_define then
+ commands.writestatus("color","define local transparency '%s' with attribute: %s",name,ta)
+ end
+ context.colordefalt(name,ta)
end
else
if global then
- texsprint(ctxcatcodes,format(r_g_t_template, name, name))
+ context.colordefrgt(name)
else
- texsprint(ctxcatcodes,format(r_l_t_template, name, name))
+ context.colordefrlt(name)
end
end
end
+
local function inherittransparent(name, ta, global)
if ta and ta ~= "" then
if global then
- texsprint(ctxcatcodes,format(f_g_t_template, name, ta, name, ta))
+ if trace_define then
+ commands.writestatus("color","inherit global transparency '%s' with attribute: %s",name,ta)
+ end
+ context.colordeffgt(name,ta)
else
- texsprint(ctxcatcodes,format(f_l_t_template, name, ta, name, ta))
+ if trace_define then
+ commands.writestatus("color","inherit local transparency '%s' with attribute: %s",name,ta)
+ end
+ context.colordefflt(name,ta)
end
else
if global then
- texsprint(ctxcatcodes,format(r_g_t_template, name, name))
+ context.colordefrgt(name)
else
- texsprint(ctxcatcodes,format(r_l_t_template, name, name))
+ context.colordefrlt(name)
end
end
end
@@ -144,6 +151,9 @@ local function do_registerspotcolor(parent,name,parentnumber,e,f,d,p)
if v then
local kind = colors.default -- else problems with shading etc
if kind == 1 then kind = v[1] end
+ if e and e ~= "" then
+ registrations.spotcolorname(parent,e) -- before registration of the color
+ end
if kind == 2 then -- name noffractions names p's r g b
registrations.grayspotcolor(parent,f,d,p,v[2])
elseif kind == 3 then
@@ -151,9 +161,6 @@ local function do_registerspotcolor(parent,name,parentnumber,e,f,d,p)
elseif kind == 4 then
registrations.cmykspotcolor(parent,f,d,p,v[6],v[7],v[8],v[9])
end
- if e and e ~= "" then
- registrations.spotcolorname(parent,e)
- end
end
registered[parentnumber] = true
end
@@ -178,45 +185,64 @@ local function do_registermultitonecolor(parent,name,parentnumber,e,f,d,p) -- sa
end
function colors.definesimplegray(name,s)
- return colors.register(name,'gray',s) -- we still need to get rid of 'color'
+ return register_color(name,'gray',s) -- we still need to get rid of 'color'
end
function colors.defineprocesscolor(name,str,global,freeze) -- still inconsistent color vs transparent
- local r = match(str,"^#(.+)$") -- for old times sake (if we need to feed from xml or so)
- local t = (r and { h = r }) or settings_to_hash_strict(str)
- if t then
- if t.h then
- local r, g, b = match(t.h .. "000000","(..)(..)(..)") -- watch the 255
- definecolor(name, colors.register(name,'rgb',(tonumber(r,16) or 0)/255,(tonumber(g,16) or 0)/255,(tonumber(b,16) or 0)/255 ), global)
- elseif t.r or t.g or t.b then
- definecolor(name, colors.register(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
- definecolor(name, colors.register(name,'cmyk',tonumber(t.c) or 0, tonumber(t.m) or 0, tonumber(t.y) or 0, tonumber(t.k) or 0), global)
+ local x = match(str,"^#(.+)$") -- for old times sake (if we need to feed from xml or so)
+ if x then
+ local r, g, b = match(x .. "000000","(..)(..)(..)") -- watch the 255
+ definecolor(name, register_color(name,'rgb',(tonumber(r,16) or 0)/255,(tonumber(g,16) or 0)/255,(tonumber(b,16) or 0)/255), global)
+ else
+ local settings = settings_to_hash_strict(str)
+ if settings then
+ local r, g, b = settings.r, settings.g, settings.b
+ if r or g or b then
+ definecolor(name, register_color(name,'rgb', tonumber(r) or 0, tonumber(g) or 0, tonumber(b) or 0), global)
+ else
+ local c, m, y, k = settings.c, settings.m, settings.y, settings.k
+ if c or m or y or b then
+ definecolor(name, register_color(name,'cmyk',tonumber(c) or 0, tonumber(m) or 0, tonumber(y) or 0, tonumber(k) or 0), global)
+ else
+ local h, s, v = settings.h, settings.s, settings.v
+ if v then
+ r, g, b = colors.hsvtorgb(tonumber(h) or 0, tonumber(s) or 1, tonumber(v) or 1) -- maybe later native
+ definecolor(name, register_color(name,'rgb',r,g,b), global)
+ else
+ local x = settings.x or h
+ if x then
+ r, g, b = match(x .. "000000","(..)(..)(..)") -- watch the 255
+ definecolor(name, register_color(name,'rgb',(tonumber(r,16) or 0)/255,(tonumber(g,16) or 0)/255,(tonumber(b,16) or 0)/255), global)
+ else
+ definecolor(name, register_color(name,'gray',tonumber(s) or 0), global)
+ end
+ end
+ end
+ end
+ local a, t = settings.a, settings.t
+ if a and t then
+ definetransparent(name, transparencies.register(name,transparent[a] or tonumber(a) or 1,tonumber(t) or 1), global)
+ elseif colors.couple then
+ -- definetransparent(name, transparencies.register(nil, 1, 1), global) -- can be sped up
+ definetransparent(name, 0, global) -- can be sped up
+ end
+ elseif freeze then
+ local ca = attributes_list[a_color] [str]
+ local ta = attributes_list[a_transparency][str]
+ if ca then
+ definecolor(name, ca, global)
+ end
+ if ta then
+ definetransparent(name, ta, global)
+ end
else
- definecolor(name, colors.register(name,'gray',tonumber(t.s) or 0), global)
- end
- if t.a and t.t then
- definetransparent(name, transparencies.register(name,transparent[t.a] or tonumber(t.a) or 1,tonumber(t.t) or 1), global)
- elseif colors.couple then
- -- definetransparent(name, transparencies.register(nil, 1, 1), global) -- can be sped up
- definetransparent(name, 0, global) -- can be sped up
+ inheritcolor(name, str, global)
+ inherittransparent(name, str, global)
+ -- if global and str ~= "" then -- For Peter Rolf who wants access to the numbers in Lua. (Currently only global is supported.)
+ -- attributes_list[a_color] [name] = attributes_list[a_color] [str] or attributes.unsetvalue -- reset
+ -- attributes_list[a_transparency][name] = attributes_list[a_transparency][str] or attributes.unsetvalue
+ -- end
end
- elseif freeze then
- local ca = attributes.list[a_color] [str]
- local ta = attributes.list[a_transparency][str]
- if ca then
- definecolor(name, ca, global)
- end
- if ta then
- definetransparent(name, ta, global)
- end
- else
- inheritcolor(name, str, global)
- inherittransparent(name, str, global)
- -- if global and str ~= "" then -- For Peter Rolf who wants access to the numbers in Lua. (Currently only global is supported.)
- -- attributes.list[a_color] [name] = attributes.list[a_color] [str] or attributes.unsetvalue -- reset
- -- attributes.list[a_transparency][name] = attributes.list[a_transparency][str] or attributes.unsetvalue
- -- end
end
end
@@ -226,19 +252,20 @@ function colors.isblack(ca) -- maybe commands
end
function colors.definespotcolor(name,parent,str,global)
- if parent == "" or parent:find("=") then
+ if parent == "" or find(parent,"=") then
colors.registerspotcolor(name, parent)
elseif name ~= parent then
- local cp = attributes.list[a_color][parent]
+ local cp = attributes_list[a_color][parent]
if cp then
local t = settings_to_hash_strict(str)
if t then
- t.p = tonumber(t.p) or 1
- do_registerspotcolor(parent, name, cp, t.e, 1, "", t.p) -- p not really needed, only diagnostics
+ local tp = tonumber(t.p) or 1
+ do_registerspotcolor(parent, name, cp, t.e, 1, "", tp) -- p not really needed, only diagnostics
if name and name ~= "" then
- definecolor(name, colors.register(name,'spot', parent, 1, "", t.p), true)
- if t.a and t.t then
- definetransparent(name, transparencies.register(name,transparent[t.a] or tonumber(t.a) or 1,tonumber(t.t) or 1), global)
+ definecolor(name, register_color(name,'spot', parent, 1, "", tp), true)
+ local ta, tt = t.a, t.t
+ if ta and tt then
+ definetransparent(name, transparencies.register(name,transparent[ta] or tonumber(ta) or 1,tonumber(tt) or 1), global)
elseif colors.couple then
--~ definetransparent(name, transparencies.register(nil, 1, 1), global) -- can be sped up
definetransparent(name, 0, global) -- can be sped up
@@ -250,7 +277,7 @@ function colors.definespotcolor(name,parent,str,global)
end
function colors.registerspotcolor(parent, str)
- local cp = attributes.list[a_color][parent]
+ local cp = attributes_list[a_color][parent]
if cp then
local e = ""
if str then
@@ -275,11 +302,11 @@ function colors.definemultitonecolor(name,multispec,colorspec,selfspec)
dd, pp, nn = concat(dd,','), concat(pp,','), concat(nn,'_')
local parent = gsub(lower(nn),"[^%d%a%.]+","_")
colors.defineprocesscolor(parent,colorspec..","..selfspec,true,true)
- local cp = attributes.list[a_color][parent]
+ local cp = attributes_list[a_color][parent]
if cp then
do_registerspotcolor(parent, name, cp, "", nof, dd, pp)
do_registermultitonecolor(parent, name, cp, "", nof, dd, pp)
- definecolor(name, colors.register(name, 'spot', parent, nof, dd, pp), true)
+ definecolor(name, register_color(name, 'spot', parent, nof, dd, pp), true)
local t = settings_to_hash_strict(selfspec)
if t and t.a and t.t then
definetransparent(name, transparencies.register(name,transparent[t.a] or tonumber(t.a) or 1,tonumber(t.t) or 1), global)
@@ -350,7 +377,7 @@ function colors.formatgray(ca,separator)
return format("%0.3f",(cv and cv[2]) or 0)
end
-function colors.colorcomponents(ca)
+function colors.colorcomponents(ca) -- return list
local cv = colors.value(ca)
if cv then
local model = cv[1]
@@ -405,3 +432,49 @@ function colors.spotcolorvalue(ca,default)
end
return tostring(v)
end
+
+-- experiment (a bit of a hack, as we need to get the attribute number)
+
+local min = math.min
+
+-- a[b,c] -> b+a*(c-b)
+
+local function f(one,two,i,fraction)
+ local o, t = one[i], two[i]
+ local otf = o + fraction * (t - o)
+ if otf > 1 then
+ otf = 1
+ end
+ return otf
+end
+
+function colors.defineintermediatecolor(name,fraction,c_one,c_two,a_one,a_two,specs,global,freeze)
+ fraction = tonumber(fraction) or 1
+ local one, two = colors.value(c_one), colors.value(c_two)
+ if one and two then
+ local csone, cstwo = one[1], two[1]
+ if csone == cstwo then
+ -- actually we can set all 8 values at once here but this is cleaner as we avoid
+ -- problems with weighted gray conversions and work with original values
+ local ca
+ if csone == 2 then
+ ca = register_color(name,'gray',f(one,two,2,fraction))
+ elseif csone == 3 then
+ ca = register_color(name,'rgb',f(one,two,3,fraction),f(one,two,4,fraction),f(one,two,5,fraction))
+ elseif csone == 4 then
+ ca = register_color(name,'cmyk',f(one,two,6,fraction),f(one,two,7,fraction),f(one,two,8,fraction),f(one,two,9,fraction))
+ else
+ ca = register_color(name,'gray',f(one,two,2,fraction))
+ end
+ definecolor(name,ca,global,freeze)
+ end
+ end
+ local one, two = transparencies.value(a_one), transparencies.value(a_two)
+ local t = settings_to_hash_strict(specs)
+ local ta = tonumber((t and t.a) or (one and one[1]) or (two and two[1]))
+ local tt = tonumber((t and t.t) or (one and two and f(one,two,2,fraction)))
+ if ta and tt then
+--~ print(ta,tt)
+ definetransparent(name,transparencies.register(name,ta,tt),global)
+ end
+end
diff --git a/Master/texmf-dist/tex/context/base/colo-ini.mkiv b/Master/texmf-dist/tex/context/base/colo-ini.mkiv
index e7a84980578..1bceb5aa70a 100644
--- a/Master/texmf-dist/tex/context/base/colo-ini.mkiv
+++ b/Master/texmf-dist/tex/context/base/colo-ini.mkiv
@@ -59,6 +59,7 @@
\newif\ifSPOTsupported
\newif\ifpreferGRAY
\newif\ifGRAYprefered
+\newif\ifconvertGRAY \convertGRAYtrue
\newif\ifreduceCMYK
\newif\ifconverttoGRAY
\newif\ifweightGRAY \weightGRAYtrue
@@ -109,11 +110,11 @@
%D
%D \getbuffer \typebuffer
-\def\definecolor {\dodoubleargument\dodefinecolor}
-\def\defineglobalcolor {\dodoubleargument\dodefineglobalcolor}
-\def\definenamedcolor {\dodoubleargument\dodefinenamedcolor}
-\def\definespotcolor {\dotripleargument\dodefinespotcolor}
-\def\definemultitonecolor{\doquadrupleempty\dodefinemultitonecolor}
+\unexpanded\def\definecolor {\dodoubleargument\dodefinecolor}
+\unexpanded\def\defineglobalcolor {\dodoubleargument\dodefineglobalcolor}
+\unexpanded\def\definenamedcolor {\dodoubleargument\dodefinenamedcolor}
+\unexpanded\def\definespotcolor {\dotripleargument\dodefinespotcolor}
+\unexpanded\def\definemultitonecolor{\doquadrupleempty\dodefinemultitonecolor}
%D \macros
%D {startcolor,stopcolor,
@@ -143,15 +144,15 @@
\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}}{}}
+\unexpanded\def\graycolor [#1]{\groupedcommand{\dosetcolormodel{gray}\getvalue{#1}}{}}
\unexpanded\def\colored [#1]{\groupedcommand{\definecolor[@colored@][#1]\doactivatecolor{@colored@}}{}}
\unexpanded\def\fastcolored [#1]#2{\begingroup\dodefinefastcolor[@colored@][#1]\doactivatecolor{@colored@}#2\endgroup}
\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\startraster [#1]{\dosetrastercolor{#1}}
- \def\stopraster {}
+ \unexpanded\def\startcolorpage {\startcolor[\ifx\maintextcolor\empty\defaulttextcolor\else\maintextcolor\fi]}
+ \unexpanded\def\stopcolorpage {\stopcolor}
+ \unexpanded\def\startraster [#1]{\dosetrastercolor{#1}}
+ \unexpanded\def\stopraster {}
\def\raster [#1]{\groupedcommand{\dosetrastercolor{#1}}{}}
\def\faststartcolor [#1]{\doactivatecolor{#1}}
\def\faststopcolor {}
@@ -159,11 +160,30 @@
\let\grey\graycolor
+%D Stacking:
+
+% \colormodelattribute \colorattribute \transparencyattribute
+
+\newcount\currentcolornesting
+
+\unexpanded\def\pushcolor[#1]%
+ {\global\advance\currentcolornesting\plusone
+ \expandafter\edef\csname\??cl:s:\number\currentcolornesting\endcsname
+ {\attribute\colormodelattribute \the\attribute\colormodelattribute
+ \attribute\colorattribute \the\attribute\colorattribute
+ \attribute\transparencyattribute\the\attribute\transparencyattribute
+ \space}% stack
+ \doactivatecolor{#1}}
+
+\unexpanded\def\popcolor
+ {\csname\??cl:s:\number\currentcolornesting\endcsname
+ \global\advance\currentcolornesting\minusone}
+
%D \macros
%D {startcurrentcolor,stopcurrentcolor}
-\def\startcurrentcolor{\startcolor[\outercolorname]}
-\def\stopcurrentcolor {\stopcolor}
+\unexpanded\def\startcurrentcolor{\startcolor[\outercolorname]}
+\unexpanded\def\stopcurrentcolor {\stopcolor}
%D \macros
%D {setupcolor}
@@ -188,7 +208,7 @@
\let\colorstyle\empty
-\def\setupcolor
+\unexpanded\def\setupcolor
{\dosingleargument\dosetupcolor}
\def\dosetupcolor[#1]%
@@ -213,7 +233,7 @@
%D
%D This command numbers to names:
-\def\definetransparency
+\unexpanded\def\definetransparency
{\dodoubleargument\dodefinetransparency}
\unexpanded\def\setupcolors
@@ -221,6 +241,8 @@
\let\showcolormessage\gobblethreearguments
+\newtoks\everysetupcolors
+
\def\dosetupcolors[#1]% some no longer make sense in MkIV
{\getparameters[\??cl][#1]%
\doifelse\@@clspot\v!yes
@@ -248,9 +270,12 @@
{\ifMPspotcolors \showcolormessage\m!colors {9}{\v!mp\v!spot}\MPspotcolorsfalse \fi}
{\ifMPspotcolors \else\showcolormessage\m!colors{10}{\v!mp\v!spot}\MPspotcolorstrue \fi}%
\preferGRAYfalse
+ \convertGRAYtrue
\processaction
[\@@clconversion]
[ \v!yes=>\preferGRAYtrue,
+ \v!no=>\convertGRAYfalse,
+ \v!never=>\convertGRAYfalse,
\v!always=>\preferGRAYtrue\RGBsupportedfalse\CMYKsupportedfalse]%
\ifRGBsupported
\converttoGRAYfalse
@@ -273,7 +298,7 @@
{\incolorfalse\forcegrayMPcolorstrue}%
{\ifincolor\else\showcolormessage\m!colors1\colorstyle\fi\incolortrue\let\@@clstate\v!start}%
\dosetupcolormodel
- \initializemaintextcolor}
+ \the\everysetupcolors}
%D In this documentation we will not go into too much details
%D on palets. Curious users can find more information on this
@@ -340,7 +365,7 @@
%D This saves us some typing in for instance the modules that
%D deal with pretty verbatim typesetting.
-\def\definepalet
+\unexpanded\def\definepalet
{\dodoubleargument\dodefinepalet}
\def\dodefinepalet[#1][#2]%
@@ -383,7 +408,7 @@
\let\currentpalet\empty
-\def\setuppalet
+\unexpanded\def\setuppalet
{\dosingleempty\dosetuppalet}
\def\dosetuppalet[#1]%
@@ -447,7 +472,7 @@
%D defining each color separate, it also loads faster and takes
%D less bytes.
-\def\definecolorgroup
+\unexpanded\def\definecolorgroup
{\dotripleempty\dodefinecolorgroup}
\def\dododefinecolorgroupgray [#1][#2:#3]{\definecolor [#1:\the\colorcount][s=#2]}
@@ -689,32 +714,43 @@
\ifx\currentcolormodel\undefined \newcount\currentcolormodel \fi
-\def\setcolormodel#1%
- {\showcolormessage\m!colors1{#1}%
- \currentcolormodel\ctxlua{tex.print(colors.setmodel('#1',\ifweightGRAY true\else false\fi))}%
- \dosetattribute{colormodel}{\the\currentcolormodel}}
+% \def\setcolormodel#1%
+% {\showcolormessage\m!colors1{#1}%
+% \dosetcolormodel{#1}}
+
+\def\dosetcolormodel#1% no message
+ {\currentcolormodel\ctxlua{tex.print(colors.setmodel('#1',\ifweightGRAY true\else false\fi))}%
+ \attribute\colormodelattribute\currentcolormodel}
+
+\dosetcolormodel{all}
-\setcolormodel{all}
\def\dosetupcolormodel
{\ifincolor
\ifRGBsupported
\ifCMYKsupported
- \setcolormodel{all}%
+ \dosetcolormodel{all}%
\else
- \setcolormodel{rgb}%
+ \dosetcolormodel{rgb}%
\fi
\else
\ifCMYKsupported
- \setcolormodel{cmyk}%
+ \dosetcolormodel{cmyk}%
\else
- \setcolormodel{gray}%
+ \ifconvertGRAY
+ \dosetcolormodel{gray}%
+ \else
+ \dosetcolormodel{none}%
+ \fi
\fi
\fi
\else
- \setcolormodel{gray}%
- \fi
- }%\aftergroup\dosetupcolormodel}
+ \ifconvertGRAY
+ \dosetcolormodel{gray}%
+ \else
+ \dosetcolormodel{none}%
+ \fi
+ \fi}
\appendtoks
\dosetupcolormodel
@@ -749,7 +785,7 @@
\def\doactivatecolor
{\ifproductionrun
- \ctxlua{colors.enabled=true transparencies.enabled=true}% not that efficient but at least robust
+ \ctxlua{colors.enable() transparencies.enable()}% not that efficient but at least robust
\let\doactivatecolor\normaldoactivatecolor
\expandafter\doactivatecolor
\else
@@ -802,7 +838,7 @@
\ifx\@@rastervalue\empty
\let\@@rastervalue\@@rsscreen
\fi
- \dosetattribute\s!color{\ctxlua{tex.sprint(colors.definesimplegray("_raster_",\@@rastervalue))}}}
+ \attribute\colorattribute\ctxlua{tex.sprint(colors.definesimplegray("_raster_",\@@rastervalue))}\relax}
\def\dodefinefastcolor[#1][#2]% still not fast but ok
{\ctxlua{colors.defineprocesscolor("#1","#2",false,\iffreezecolors true\else false\fi)}%
@@ -874,19 +910,14 @@
\def\defaulttextcolor {black}
\def\@@themaintextcolor{themaintextcolor}
-\appendtoks\deactivatecolor\to\everybeforeoutput
-
-\def\startregistercolor[#1]% probably obsolete
- {\doifelsenothing{#1}
- {\let\stopregistercolor\relax}
- {\edef\stopregistercolor
- {\dosetattribute\s!color {\dogetattribute\s!color }%
- \dosetattribute\s!transparency{\dogetattribute\s!transparency}}%
- \doactivatecolor{#1}}}
+\appendtoks
+ \deactivatecolor
+ \ifx\maintextcolor\empty\else\doactivatecolor\maintextcolor\fi
+\to \everybeforeoutput
\def\registermaintextcolor{\ctxlua{colors.main = \thecolorattribute\maintextcolor}}
-\def\starttextcolor[#1]%
+\unexpanded\def\starttextcolor[#1]%
{\doifsomething{#1}
{\definecolor[\@@themaintextcolor][#1]%
\let\maintextcolor\@@themaintextcolor
@@ -904,6 +935,7 @@
\registermaintextcolor}
\appendtoks \initializemaintextcolor \to \everyjob
+\appendtoks \initializemaintextcolor \to \everysetupcolors
\def\dodefinepaletcolor#1#2#3%
{\doifassignmentelse{#3}% \definepalet[test][xx={y=.4}]
@@ -927,6 +959,23 @@
\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}
+%D Low level defs:
+
+\def\colordefalc#1#2{\setevalue{(ca:#1)}{#2}\setvalue {(cs:#1)}{\attribute\colorattribute #2 }}
+\def\colordefagc#1#2{\setxvalue{(ca:#1)}{#2}\setvalue {(cs:#1)}{\attribute\colorattribute #2 }}
+\def\colordefalt#1#2{\setevalue{(ta:#1)}{#2}\setvalue {(ts:#1)}{\attribute\transparencyattribute#2 }}
+\def\colordefagt#1#2{\setxvalue{(ta:#1)}{#2}\setgvalue{(ts:#1)}{\attribute\transparencyattribute#2 }}
+
+\def\colordefflc#1#2{\setvalue {(ca:#1)}{\doinheritca{#2}}\setvalue {(cs:#1)}{\doinheritcs{#2}}}
+\def\colordeffgc#1#2{\setgvalue{(ca:#1)}{\doinheritca{#2}}\setvalue {(cs:#1)}{\doinheritcs{#2}}}
+\def\colordefflt#1#2{\setvalue {(ta:#1)}{\doinheritta{#2}}\setvalue {(ts:#1)}{\doinheritts{#2}}}
+\def\colordeffgt#1#2{\setgvalue{(ta:#1)}{\doinheritta{#2}}\setgvalue{(ts:#1)}{\doinheritts{#2}}}
+
+\def\colordefrlc #1{\localundefine {(ca:#1)}\localundefine {(cs:#1)}}
+\def\colordefrgc #1{\globalundefine{(ca:#1)}\globalundefine{(cs:#1)}}
+\def\colordefrlt #1{\localundefine {(ta:#1)}\localundefine {(ts:#1)}}
+\def\colordefrgt #1{\globalundefine{(ta:#1)}\globalundefine{(ts:#1)}}
+
%D \macros
%D {colorvalue, grayvalue}
%D
diff --git a/Master/texmf-dist/tex/context/base/colo-new.mkii b/Master/texmf-dist/tex/context/base/colo-new.mkii
deleted file mode 100644
index 5413d7a1208..00000000000
--- a/Master/texmf-dist/tex/context/base/colo-new.mkii
+++ /dev/null
@@ -1,1857 +0,0 @@
-%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
deleted file mode 100644
index d054095fe97..00000000000
--- a/Master/texmf-dist/tex/context/base/colo-new.mkiv
+++ /dev/null
@@ -1,331 +0,0 @@
-%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
deleted file mode 100644
index 04b2ef716f7..00000000000
--- a/Master/texmf-dist/tex/context/base/colo-new.tex
+++ /dev/null
@@ -1,1051 +0,0 @@
-%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-x11.tex b/Master/texmf-dist/tex/context/base/colo-x11.tex
new file mode 100644
index 00000000000..45d3aac6248
--- /dev/null
+++ b/Master/texmf-dist/tex/context/base/colo-x11.tex
@@ -0,0 +1,677 @@
+%D \module
+%D [ file=colo-x11,
+%D version=2009.11.13,
+%D title=\CONTEXT\ Color Macros,
+%D subtitle=X11,
+%D author=Alan Braslau]
+%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 Standard X11 rgb colors (from \type {/usr/share/X11/rgb.txt}):
+
+\doifnotmode{mkiv} {
+ \input colo-hex.mkii
+}
+
+\definecolor [snow] [h=fffafa]
+\definecolor [ghostwhite] [h=f8f8ff]
+\definecolor [whitesmoke] [s=0.96]
+\definecolor [gainsboro] [s=0.86]
+\definecolor [floralwhite] [h=fffaf0]
+\definecolor [oldlace] [h=fdf5e6]
+\definecolor [linen] [h=faf0e6]
+\definecolor [antiquewhite] [h=faebd7]
+\definecolor [papayawhip] [h=ffefd5]
+\definecolor [blanchedalmond] [h=ffebcd]
+\definecolor [bisque] [h=ffe4c4]
+\definecolor [peachpuff] [h=ffdab9]
+\definecolor [navajowhite] [h=ffdead]
+\definecolor [moccasin] [h=ffe4b5]
+\definecolor [cornsilk] [h=fff8dc]
+\definecolor [ivory] [h=fffff0]
+\definecolor [lemonchiffon] [h=fffacd]
+\definecolor [seashell] [h=fff5ee]
+\definecolor [honeydew] [h=f0fff0]
+\definecolor [mintcream] [h=f5fffa]
+\definecolor [azure] [h=f0ffff]
+\definecolor [aliceblue] [h=f0f8ff]
+\definecolor [lavender] [h=e6e6fa]
+\definecolor [lavenderblush] [h=fff0f5]
+\definecolor [mistyrose] [h=ffe4e1]
+\definecolor [white] [s=1]
+\definecolor [black] [s=0]
+\definecolor [darkslategray] [h=2f4f4f]
+\definecolor [darkslategrey] [darkslategray]
+\definecolor [dimgray] [s=0.41]
+\definecolor [dimgrey] [dimgray]
+\definecolor [slategray] [h=708090]
+\definecolor [slategrey] [slategray]
+\definecolor [lightslategray] [h=778899]
+\definecolor [lightslategrey] [lightslategray]
+\definecolor [gray] [s=0.75]
+\definecolor [grey] [gray]
+\definecolor [lightgrey] [s=0.83]
+\definecolor [lightgray] [lightgrey]
+\definecolor [midnightblue] [h=191970]
+\definecolor [navy] [h=000080]
+\definecolor [navyblue] [navy]
+\definecolor [cornflowerblue] [h=6495ed]
+\definecolor [darkslateblue] [h=483d8b]
+\definecolor [slateblue] [h=6a5acd]
+\definecolor [mediumslateblue] [h=7b68ee]
+\definecolor [lightslateblue] [h=8470ff]
+\definecolor [mediumblue] [h=0000cd]
+\definecolor [royalblue] [h=4169e1]
+\definecolor [blue] [h=0000ff]
+\definecolor [dodgerblue] [h=1e90ff]
+\definecolor [deepskyblue] [h=00bfff]
+\definecolor [skyblue] [h=87ceeb]
+\definecolor [lightskyblue] [h=87cefa]
+\definecolor [steelblue] [h=4682b4]
+\definecolor [lightsteelblue] [h=b0c4de]
+\definecolor [lightblue] [h=add8e6]
+\definecolor [powderblue] [h=b0e0e6]
+\definecolor [paleturquoise] [h=afeeee]
+\definecolor [darkturquoise] [h=00ced1]
+\definecolor [mediumturquoise] [h=48d1cc]
+\definecolor [turquoise] [h=40e0d0]
+\definecolor [cyan] [h=00ffff]
+\definecolor [lightcyan] [h=e0ffff]
+\definecolor [cadetblue] [h=5f9ea0]
+\definecolor [mediumaquamarine] [h=66cdaa]
+\definecolor [aquamarine] [h=7fffd4]
+\definecolor [darkgreen] [h=006400]
+\definecolor [darkolivegreen] [h=556b2f]
+\definecolor [darkseagreen] [h=8fbc8f]
+\definecolor [seagreen] [h=2e8b57]
+\definecolor [mediumseagreen] [h=3cb371]
+\definecolor [lightseagreen] [h=20b2aa]
+\definecolor [palegreen] [h=98fb98]
+\definecolor [springgreen] [h=00ff7f]
+\definecolor [lawngreen] [h=7cfc00]
+\definecolor [green] [h=00ff00]
+\definecolor [chartreuse] [h=7fff00]
+\definecolor [mediumspringgreen] [h=00fa9a]
+\definecolor [greenyellow] [h=adff2f]
+\definecolor [limegreen] [h=32cd32]
+\definecolor [yellowgreen] [h=9acd32]
+\definecolor [forestgreen] [h=228b22]
+\definecolor [olivedrab] [h=6b8e23]
+\definecolor [darkkhaki] [h=bdb76b]
+\definecolor [khaki] [h=f0e68c]
+\definecolor [palegoldenrod] [h=eee8aa]
+\definecolor [lightgoldenrodyellow] [h=fafad2]
+\definecolor [lightyellow] [h=ffffe0]
+\definecolor [yellow] [h=ffff00]
+\definecolor [gold] [h=ffd700]
+\definecolor [lightgoldenrod] [h=eedd82]
+\definecolor [goldenrod] [h=daa520]
+\definecolor [darkgoldenrod] [h=b8860b]
+\definecolor [rosybrown] [h=bc8f8f]
+\definecolor [indianred] [h=cd5c5c]
+\definecolor [saddlebrown] [h=8b4513]
+\definecolor [sienna] [h=a0522d]
+\definecolor [peru] [h=cd853f]
+\definecolor [burlywood] [h=deb887]
+\definecolor [beige] [h=f5f5dc]
+\definecolor [wheat] [h=f5deb3]
+\definecolor [sandybrown] [h=f4a460]
+\definecolor [tan] [h=d2b48c]
+\definecolor [chocolate] [h=d2691e]
+\definecolor [firebrick] [h=b22222]
+\definecolor [brown] [h=a52a2a]
+\definecolor [darksalmon] [h=e9967a]
+\definecolor [salmon] [h=fa8072]
+\definecolor [lightsalmon] [h=ffa07a]
+\definecolor [orange] [h=ffa500]
+\definecolor [darkorange] [h=ff8c00]
+\definecolor [coral] [h=ff7f50]
+\definecolor [lightcoral] [h=f08080]
+\definecolor [tomato] [h=ff6347]
+\definecolor [orangered] [h=ff4500]
+\definecolor [red] [h=ff0000]
+\definecolor [hotpink] [h=ff69b4]
+\definecolor [deeppink] [h=ff1493]
+\definecolor [pink] [h=ffc0cb]
+\definecolor [lightpink] [h=ffb6c1]
+\definecolor [palevioletred] [h=db7093]
+\definecolor [maroon] [h=b03060]
+\definecolor [mediumvioletred] [h=c71585]
+\definecolor [violetred] [h=d02090]
+\definecolor [magenta] [h=ff00ff]
+\definecolor [violet] [h=ee82ee]
+\definecolor [plum] [h=dda0dd]
+\definecolor [orchid] [h=da70d6]
+\definecolor [mediumorchid] [h=ba55d3]
+\definecolor [darkorchid] [h=9932cc]
+\definecolor [darkviolet] [h=9400d3]
+\definecolor [blueviolet] [h=8a2be2]
+\definecolor [purple] [h=a020f0]
+\definecolor [mediumpurple] [h=9370db]
+\definecolor [thistle] [h=d8bfd8]
+\definecolor [snow1] [h=fffafa]
+\definecolor [snow2] [h=eee9e9]
+\definecolor [snow3] [h=cdc9c9]
+\definecolor [snow4] [h=8b8989]
+\definecolor [seashell1] [h=fff5ee]
+\definecolor [seashell2] [h=eee5de]
+\definecolor [seashell3] [h=cdc5bf]
+\definecolor [seashell4] [h=8b8682]
+\definecolor [antiquewhite1] [h=ffefdb]
+\definecolor [antiquewhite2] [h=eedfcc]
+\definecolor [antiquewhite3] [h=cdc0b0]
+\definecolor [antiquewhite4] [h=8b8378]
+\definecolor [bisque1] [h=ffe4c4]
+\definecolor [bisque2] [h=eed5b7]
+\definecolor [bisque3] [h=cdb79e]
+\definecolor [bisque4] [h=8b7d6b]
+\definecolor [peachpuff1] [h=ffdab9]
+\definecolor [peachpuff2] [h=eecbad]
+\definecolor [peachpuff3] [h=cdaf95]
+\definecolor [peachpuff4] [h=8b7765]
+\definecolor [navajowhite1] [h=ffdead]
+\definecolor [navajowhite2] [h=eecfa1]
+\definecolor [navajowhite3] [h=cdb38b]
+\definecolor [navajowhite4] [h=8b795e]
+\definecolor [lemonchiffon1] [h=fffacd]
+\definecolor [lemonchiffon2] [h=eee9bf]
+\definecolor [lemonchiffon3] [h=cdc9a5]
+\definecolor [lemonchiffon4] [h=8b8970]
+\definecolor [cornsilk1] [h=fff8dc]
+\definecolor [cornsilk2] [h=eee8cd]
+\definecolor [cornsilk3] [h=cdc8b1]
+\definecolor [cornsilk4] [h=8b8878]
+\definecolor [ivory1] [h=fffff0]
+\definecolor [ivory2] [h=eeeee0]
+\definecolor [ivory3] [h=cdcdc1]
+\definecolor [ivory4] [h=8b8b83]
+\definecolor [honeydew1] [h=f0fff0]
+\definecolor [honeydew2] [h=e0eee0]
+\definecolor [honeydew3] [h=c1cdc1]
+\definecolor [honeydew4] [h=838b83]
+\definecolor [lavenderblush1] [h=fff0f5]
+\definecolor [lavenderblush2] [h=eee0e5]
+\definecolor [lavenderblush3] [h=cdc1c5]
+\definecolor [lavenderblush4] [h=8b8386]
+\definecolor [mistyrose1] [h=ffe4e1]
+\definecolor [mistyrose2] [h=eed5d2]
+\definecolor [mistyrose3] [h=cdb7b5]
+\definecolor [mistyrose4] [h=8b7d7b]
+\definecolor [azure1] [h=f0ffff]
+\definecolor [azure2] [h=e0eeee]
+\definecolor [azure3] [h=c1cdcd]
+\definecolor [azure4] [h=838b8b]
+\definecolor [slateblue1] [h=836fff]
+\definecolor [slateblue2] [h=7a67ee]
+\definecolor [slateblue3] [h=6959cd]
+\definecolor [slateblue4] [h=473c8b]
+\definecolor [royalblue1] [h=4876ff]
+\definecolor [royalblue2] [h=436eee]
+\definecolor [royalblue3] [h=3a5fcd]
+\definecolor [royalblue4] [h=27408b]
+\definecolor [blue1] [h=0000ff]
+\definecolor [blue2] [h=0000ee]
+\definecolor [blue3] [h=0000cd]
+\definecolor [blue4] [h=00008b]
+\definecolor [dodgerblue1] [h=1e90ff]
+\definecolor [dodgerblue2] [h=1c86ee]
+\definecolor [dodgerblue3] [h=1874cd]
+\definecolor [dodgerblue4] [h=104e8b]
+\definecolor [steelblue1] [h=63b8ff]
+\definecolor [steelblue2] [h=5cacee]
+\definecolor [steelblue3] [h=4f94cd]
+\definecolor [steelblue4] [h=36648b]
+\definecolor [deepskyblue1] [h=00bfff]
+\definecolor [deepskyblue2] [h=00b2ee]
+\definecolor [deepskyblue3] [h=009acd]
+\definecolor [deepskyblue4] [h=00688b]
+\definecolor [skyblue1] [h=87ceff]
+\definecolor [skyblue2] [h=7ec0ee]
+\definecolor [skyblue3] [h=6ca6cd]
+\definecolor [skyblue4] [h=4a708b]
+\definecolor [lightskyblue1] [h=b0e2ff]
+\definecolor [lightskyblue2] [h=a4d3ee]
+\definecolor [lightskyblue3] [h=8db6cd]
+\definecolor [lightskyblue4] [h=607b8b]
+\definecolor [slategray1] [h=c6e2ff]
+\definecolor [slategray2] [h=b9d3ee]
+\definecolor [slategray3] [h=9fb6cd]
+\definecolor [slategray4] [h=6c7b8b]
+\definecolor [lightsteelblue1] [h=cae1ff]
+\definecolor [lightsteelblue2] [h=bcd2ee]
+\definecolor [lightsteelblue3] [h=a2b5cd]
+\definecolor [lightsteelblue4] [h=6e7b8b]
+\definecolor [lightblue1] [h=bfefff]
+\definecolor [lightblue2] [h=b2dfee]
+\definecolor [lightblue3] [h=9ac0cd]
+\definecolor [lightblue4] [h=68838b]
+\definecolor [lightcyan1] [h=e0ffff]
+\definecolor [lightcyan2] [h=d1eeee]
+\definecolor [lightcyan3] [h=b4cdcd]
+\definecolor [lightcyan4] [h=7a8b8b]
+\definecolor [paleturquoise1] [h=bbffff]
+\definecolor [paleturquoise2] [h=aeeeee]
+\definecolor [paleturquoise3] [h=96cdcd]
+\definecolor [paleturquoise4] [h=668b8b]
+\definecolor [cadetblue1] [h=98f5ff]
+\definecolor [cadetblue2] [h=8ee5ee]
+\definecolor [cadetblue3] [h=7ac5cd]
+\definecolor [cadetblue4] [h=53868b]
+\definecolor [turquoise1] [h=00f5ff]
+\definecolor [turquoise2] [h=00e5ee]
+\definecolor [turquoise3] [h=00c5cd]
+\definecolor [turquoise4] [h=00868b]
+\definecolor [cyan1] [h=00ffff]
+\definecolor [cyan2] [h=00eeee]
+\definecolor [cyan3] [h=00cdcd]
+\definecolor [cyan4] [h=008b8b]
+\definecolor [darkslategray1] [h=97ffff]
+\definecolor [darkslategray2] [h=8deeee]
+\definecolor [darkslategray3] [h=79cdcd]
+\definecolor [darkslategray4] [h=528b8b]
+\definecolor [aquamarine1] [h=7fffd4]
+\definecolor [aquamarine2] [h=76eec6]
+\definecolor [aquamarine3] [h=66cdaa]
+\definecolor [aquamarine4] [h=458b74]
+\definecolor [darkseagreen1] [h=c1ffc1]
+\definecolor [darkseagreen2] [h=b4eeb4]
+\definecolor [darkseagreen3] [h=9bcd9b]
+\definecolor [darkseagreen4] [h=698b69]
+\definecolor [seagreen1] [h=54ff9f]
+\definecolor [seagreen2] [h=4eee94]
+\definecolor [seagreen3] [h=43cd80]
+\definecolor [seagreen4] [h=2e8b57]
+\definecolor [palegreen1] [h=9aff9a]
+\definecolor [palegreen2] [h=90ee90]
+\definecolor [palegreen3] [h=7ccd7c]
+\definecolor [palegreen4] [h=548b54]
+\definecolor [springgreen1] [h=00ff7f]
+\definecolor [springgreen2] [h=00ee76]
+\definecolor [springgreen3] [h=00cd66]
+\definecolor [springgreen4] [h=008b45]
+\definecolor [green1] [h=00ff00]
+\definecolor [green2] [h=00ee00]
+\definecolor [green3] [h=00cd00]
+\definecolor [green4] [h=008b00]
+\definecolor [chartreuse1] [h=7fff00]
+\definecolor [chartreuse2] [h=76ee00]
+\definecolor [chartreuse3] [h=66cd00]
+\definecolor [chartreuse4] [h=458b00]
+\definecolor [olivedrab1] [h=c0ff3e]
+\definecolor [olivedrab2] [h=b3ee3a]
+\definecolor [olivedrab3] [h=9acd32]
+\definecolor [olivedrab4] [h=698b22]
+\definecolor [darkolivegreen1] [h=caff70]
+\definecolor [darkolivegreen2] [h=bcee68]
+\definecolor [darkolivegreen3] [h=a2cd5a]
+\definecolor [darkolivegreen4] [h=6e8b3d]
+\definecolor [khaki1] [h=fff68f]
+\definecolor [khaki2] [h=eee685]
+\definecolor [khaki3] [h=cdc673]
+\definecolor [khaki4] [h=8b864e]
+\definecolor [lightgoldenrod1] [h=ffec8b]
+\definecolor [lightgoldenrod2] [h=eedc82]
+\definecolor [lightgoldenrod3] [h=cdbe70]
+\definecolor [lightgoldenrod4] [h=8b814c]
+\definecolor [lightyellow1] [h=ffffe0]
+\definecolor [lightyellow2] [h=eeeed1]
+\definecolor [lightyellow3] [h=cdcdb4]
+\definecolor [lightyellow4] [h=8b8b7a]
+\definecolor [yellow1] [h=ffff00]
+\definecolor [yellow2] [h=eeee00]
+\definecolor [yellow3] [h=cdcd00]
+\definecolor [yellow4] [h=8b8b00]
+\definecolor [gold1] [h=ffd700]
+\definecolor [gold2] [h=eec900]
+\definecolor [gold3] [h=cdad00]
+\definecolor [gold4] [h=8b7500]
+\definecolor [goldenrod1] [h=ffc125]
+\definecolor [goldenrod2] [h=eeb422]
+\definecolor [goldenrod3] [h=cd9b1d]
+\definecolor [goldenrod4] [h=8b6914]
+\definecolor [darkgoldenrod1] [h=ffb90f]
+\definecolor [darkgoldenrod2] [h=eead0e]
+\definecolor [darkgoldenrod3] [h=cd950c]
+\definecolor [darkgoldenrod4] [h=8b6508]
+\definecolor [rosybrown1] [h=ffc1c1]
+\definecolor [rosybrown2] [h=eeb4b4]
+\definecolor [rosybrown3] [h=cd9b9b]
+\definecolor [rosybrown4] [h=8b6969]
+\definecolor [indianred1] [h=ff6a6a]
+\definecolor [indianred2] [h=ee6363]
+\definecolor [indianred3] [h=cd5555]
+\definecolor [indianred4] [h=8b3a3a]
+\definecolor [sienna1] [h=ff8247]
+\definecolor [sienna2] [h=ee7942]
+\definecolor [sienna3] [h=cd6839]
+\definecolor [sienna4] [h=8b4726]
+\definecolor [burlywood1] [h=ffd39b]
+\definecolor [burlywood2] [h=eec591]
+\definecolor [burlywood3] [h=cdaa7d]
+\definecolor [burlywood4] [h=8b7355]
+\definecolor [wheat1] [h=ffe7ba]
+\definecolor [wheat2] [h=eed8ae]
+\definecolor [wheat3] [h=cdba96]
+\definecolor [wheat4] [h=8b7e66]
+\definecolor [tan1] [h=ffa54f]
+\definecolor [tan2] [h=ee9a49]
+\definecolor [tan3] [h=cd853f]
+\definecolor [tan4] [h=8b5a2b]
+\definecolor [chocolate1] [h=ff7f24]
+\definecolor [chocolate2] [h=ee7621]
+\definecolor [chocolate3] [h=cd661d]
+\definecolor [chocolate4] [h=8b4513]
+\definecolor [firebrick1] [h=ff3030]
+\definecolor [firebrick2] [h=ee2c2c]
+\definecolor [firebrick3] [h=cd2626]
+\definecolor [firebrick4] [h=8b1a1a]
+\definecolor [brown1] [h=ff4040]
+\definecolor [brown2] [h=ee3b3b]
+\definecolor [brown3] [h=cd3333]
+\definecolor [brown4] [h=8b2323]
+\definecolor [salmon1] [h=ff8c69]
+\definecolor [salmon2] [h=ee8262]
+\definecolor [salmon3] [h=cd7054]
+\definecolor [salmon4] [h=8b4c39]
+\definecolor [lightsalmon1] [h=ffa07a]
+\definecolor [lightsalmon2] [h=ee9572]
+\definecolor [lightsalmon3] [h=cd8162]
+\definecolor [lightsalmon4] [h=8b5742]
+\definecolor [orange1] [h=ffa500]
+\definecolor [orange2] [h=ee9a00]
+\definecolor [orange3] [h=cd8500]
+\definecolor [orange4] [h=8b5a00]
+\definecolor [darkorange1] [h=ff7f00]
+\definecolor [darkorange2] [h=ee7600]
+\definecolor [darkorange3] [h=cd6600]
+\definecolor [darkorange4] [h=8b4500]
+\definecolor [coral1] [h=ff7256]
+\definecolor [coral2] [h=ee6a50]
+\definecolor [coral3] [h=cd5b45]
+\definecolor [coral4] [h=8b3e2f]
+\definecolor [tomato1] [h=ff6347]
+\definecolor [tomato2] [h=ee5c42]
+\definecolor [tomato3] [h=cd4f39]
+\definecolor [tomato4] [h=8b3626]
+\definecolor [orangered1] [h=ff4500]
+\definecolor [orangered2] [h=ee4000]
+\definecolor [orangered3] [h=cd3700]
+\definecolor [orangered4] [h=8b2500]
+\definecolor [red1] [h=ff0000]
+\definecolor [red2] [h=ee0000]
+\definecolor [red3] [h=cd0000]
+\definecolor [red4] [h=8b0000]
+\definecolor [debianred] [h=d70751]
+\definecolor [deeppink1] [h=ff1493]
+\definecolor [deeppink2] [h=ee1289]
+\definecolor [deeppink3] [h=cd1076]
+\definecolor [deeppink4] [h=8b0a50]
+\definecolor [hotpink1] [h=ff6eb4]
+\definecolor [hotpink2] [h=ee6aa7]
+\definecolor [hotpink3] [h=cd6090]
+\definecolor [hotpink4] [h=8b3a62]
+\definecolor [pink1] [h=ffb5c5]
+\definecolor [pink2] [h=eea9b8]
+\definecolor [pink3] [h=cd919e]
+\definecolor [pink4] [h=8b636c]
+\definecolor [lightpink1] [h=ffaeb9]
+\definecolor [lightpink2] [h=eea2ad]
+\definecolor [lightpink3] [h=cd8c95]
+\definecolor [lightpink4] [h=8b5f65]
+\definecolor [palevioletred1] [h=ff82ab]
+\definecolor [palevioletred2] [h=ee799f]
+\definecolor [palevioletred3] [h=cd6889]
+\definecolor [palevioletred4] [h=8b475d]
+\definecolor [maroon1] [h=ff34b3]
+\definecolor [maroon2] [h=ee30a7]
+\definecolor [maroon3] [h=cd2990]
+\definecolor [maroon4] [h=8b1c62]
+\definecolor [violetred1] [h=ff3e96]
+\definecolor [violetred2] [h=ee3a8c]
+\definecolor [violetred3] [h=cd3278]
+\definecolor [violetred4] [h=8b2252]
+\definecolor [magenta1] [h=ff00ff]
+\definecolor [magenta2] [h=ee00ee]
+\definecolor [magenta3] [h=cd00cd]
+\definecolor [magenta4] [h=8b008b]
+\definecolor [orchid1] [h=ff83fa]
+\definecolor [orchid2] [h=ee7ae9]
+\definecolor [orchid3] [h=cd69c9]
+\definecolor [orchid4] [h=8b4789]
+\definecolor [plum1] [h=ffbbff]
+\definecolor [plum2] [h=eeaeee]
+\definecolor [plum3] [h=cd96cd]
+\definecolor [plum4] [h=8b668b]
+\definecolor [mediumorchid1] [h=e066ff]
+\definecolor [mediumorchid2] [h=d15fee]
+\definecolor [mediumorchid3] [h=b452cd]
+\definecolor [mediumorchid4] [h=7a378b]
+\definecolor [darkorchid1] [h=bf3eff]
+\definecolor [darkorchid2] [h=b23aee]
+\definecolor [darkorchid3] [h=9a32cd]
+\definecolor [darkorchid4] [h=68228b]
+\definecolor [purple1] [h=9b30ff]
+\definecolor [purple2] [h=912cee]
+\definecolor [purple3] [h=7d26cd]
+\definecolor [purple4] [h=551a8b]
+\definecolor [mediumpurple1] [h=ab82ff]
+\definecolor [mediumpurple2] [h=9f79ee]
+\definecolor [mediumpurple3] [h=8968cd]
+\definecolor [mediumpurple4] [h=5d478b]
+\definecolor [thistle1] [h=ffe1ff]
+\definecolor [thistle2] [h=eed2ee]
+\definecolor [thistle3] [h=cdb5cd]
+\definecolor [thistle4] [h=8b7b8b]
+\definecolor [gray0] [s=0.00]
+\definecolor [grey0] [gray0]
+\definecolor [gray1] [s=0.01]
+\definecolor [grey1] [gray1]
+\definecolor [gray2] [s=0.02]
+\definecolor [grey2] [gray2]
+\definecolor [gray3] [s=0.03]
+\definecolor [grey3] [gray3]
+\definecolor [gray4] [s=0.04]
+\definecolor [grey4] [gray4]
+\definecolor [gray5] [s=0.05]
+\definecolor [grey5] [gray5]
+\definecolor [gray6] [s=0.06]
+\definecolor [grey6] [gray6]
+\definecolor [gray7] [s=0.07]
+\definecolor [grey7] [gray7]
+\definecolor [gray8] [s=0.08]
+\definecolor [grey8] [gray8]
+\definecolor [gray9] [s=0.09]
+\definecolor [grey9] [gray9]
+\definecolor [gray10] [s=0.10]
+\definecolor [grey10] [gray10]
+\definecolor [gray11] [s=0.11]
+\definecolor [grey11] [gray11]
+\definecolor [gray12] [s=0.12]
+\definecolor [grey12] [gray12]
+\definecolor [gray13] [s=0.13]
+\definecolor [grey13] [gray13]
+\definecolor [gray14] [s=0.14]
+\definecolor [grey14] [gray14]
+\definecolor [gray15] [s=0.15]
+\definecolor [grey15] [gray15]
+\definecolor [gray16] [s=0.16]
+\definecolor [grey16] [gray16]
+\definecolor [gray17] [s=0.17]
+\definecolor [grey17] [gray17]
+\definecolor [gray18] [s=0.18]
+\definecolor [grey18] [gray18]
+\definecolor [gray19] [s=0.19]
+\definecolor [grey19] [gray19]
+\definecolor [gray20] [s=0.20]
+\definecolor [grey20] [gray20]
+\definecolor [gray21] [s=0.21]
+\definecolor [grey21] [gray21]
+\definecolor [gray22] [s=0.22]
+\definecolor [grey22] [gray22]
+\definecolor [gray23] [s=0.23]
+\definecolor [grey23] [gray23]
+\definecolor [gray24] [s=0.24]
+\definecolor [grey24] [gray24]
+\definecolor [gray25] [s=0.25]
+\definecolor [grey25] [gray25]
+\definecolor [gray26] [s=0.26]
+\definecolor [grey26] [gray26]
+\definecolor [gray27] [s=0.27]
+\definecolor [grey27] [gray27]
+\definecolor [gray28] [s=0.28]
+\definecolor [grey28] [gray28]
+\definecolor [gray29] [s=0.29]
+\definecolor [grey29] [gray29]
+\definecolor [gray30] [s=0.30]
+\definecolor [grey30] [gray30]
+\definecolor [gray31] [s=0.31]
+\definecolor [grey31] [gray31]
+\definecolor [gray32] [s=0.32]
+\definecolor [grey32] [gray32]
+\definecolor [gray33] [s=0.33]
+\definecolor [grey33] [gray33]
+\definecolor [gray34] [s=0.34]
+\definecolor [grey34] [gray34]
+\definecolor [gray35] [s=0.35]
+\definecolor [grey35] [gray35]
+\definecolor [gray36] [s=0.36]
+\definecolor [grey36] [gray36]
+\definecolor [gray37] [s=0.37]
+\definecolor [grey37] [gray37]
+\definecolor [gray38] [s=0.38]
+\definecolor [grey38] [gray38]
+\definecolor [gray39] [s=0.39]
+\definecolor [grey39] [gray39]
+\definecolor [gray40] [s=0.40]
+\definecolor [grey40] [gray40]
+\definecolor [gray41] [s=0.41]
+\definecolor [grey41] [gray41]
+\definecolor [gray42] [s=0.42]
+\definecolor [grey42] [gray42]
+\definecolor [gray43] [s=0.43]
+\definecolor [grey43] [gray43]
+\definecolor [gray44] [s=0.44]
+\definecolor [grey44] [gray44]
+\definecolor [gray45] [s=0.45]
+\definecolor [grey45] [gray45]
+\definecolor [gray46] [s=0.46]
+\definecolor [grey46] [gray46]
+\definecolor [gray47] [s=0.47]
+\definecolor [grey47] [gray47]
+\definecolor [gray48] [s=0.48]
+\definecolor [grey48] [gray48]
+\definecolor [gray49] [s=0.49]
+\definecolor [grey49] [gray49]
+\definecolor [gray50] [s=0.50]
+\definecolor [grey50] [gray50]
+\definecolor [gray51] [s=0.51]
+\definecolor [grey51] [gray51]
+\definecolor [gray52] [s=0.52]
+\definecolor [grey52] [gray52]
+\definecolor [gray53] [s=0.53]
+\definecolor [grey53] [gray53]
+\definecolor [gray54] [s=0.54]
+\definecolor [grey54] [gray54]
+\definecolor [gray55] [s=0.55]
+\definecolor [grey55] [gray55]
+\definecolor [gray56] [s=0.56]
+\definecolor [grey56] [gray56]
+\definecolor [gray57] [s=0.57]
+\definecolor [grey57] [gray57]
+\definecolor [gray58] [s=0.58]
+\definecolor [grey58] [gray58]
+\definecolor [gray59] [s=0.59]
+\definecolor [grey59] [gray59]
+\definecolor [gray60] [s=0.60]
+\definecolor [grey60] [gray60]
+\definecolor [gray61] [s=0.61]
+\definecolor [grey61] [gray61]
+\definecolor [gray62] [s=0.62]
+\definecolor [grey62] [gray62]
+\definecolor [gray63] [s=0.63]
+\definecolor [grey63] [gray63]
+\definecolor [gray64] [s=0.64]
+\definecolor [grey64] [gray64]
+\definecolor [gray65] [s=0.65]
+\definecolor [grey65] [gray65]
+\definecolor [gray66] [s=0.66]
+\definecolor [grey66] [gray66]
+\definecolor [gray67] [s=0.67]
+\definecolor [grey67] [gray67]
+\definecolor [gray68] [s=0.68]
+\definecolor [grey68] [gray68]
+\definecolor [gray69] [s=0.69]
+\definecolor [grey69] [gray69]
+\definecolor [gray70] [s=0.70]
+\definecolor [grey70] [gray70]
+\definecolor [gray71] [s=0.71]
+\definecolor [grey71] [gray71]
+\definecolor [gray72] [s=0.72]
+\definecolor [grey72] [gray72]
+\definecolor [gray73] [s=0.73]
+\definecolor [grey73] [gray73]
+\definecolor [gray74] [s=0.74]
+\definecolor [grey74] [gray74]
+\definecolor [gray75] [s=0.75]
+\definecolor [grey75] [gray75]
+\definecolor [gray76] [s=0.76]
+\definecolor [grey76] [gray76]
+\definecolor [gray77] [s=0.77]
+\definecolor [grey77] [gray77]
+\definecolor [gray78] [s=0.78]
+\definecolor [grey78] [gray78]
+\definecolor [gray79] [s=0.79]
+\definecolor [grey79] [gray79]
+\definecolor [gray80] [s=0.80]
+\definecolor [grey80] [gray80]
+\definecolor [gray81] [s=0.81]
+\definecolor [grey81] [gray81]
+\definecolor [gray82] [s=0.82]
+\definecolor [grey82] [gray82]
+\definecolor [gray83] [s=0.83]
+\definecolor [grey83] [gray83]
+\definecolor [gray84] [s=0.84]
+\definecolor [grey84] [gray84]
+\definecolor [gray85] [s=0.85]
+\definecolor [grey85] [gray85]
+\definecolor [gray86] [s=0.86]
+\definecolor [grey86] [gray86]
+\definecolor [gray87] [s=0.87]
+\definecolor [grey87] [gray87]
+\definecolor [gray88] [s=0.88]
+\definecolor [grey88] [gray88]
+\definecolor [gray89] [s=0.89]
+\definecolor [grey89] [gray89]
+\definecolor [gray90] [s=0.90]
+\definecolor [grey90] [gray90]
+\definecolor [gray91] [s=0.91]
+\definecolor [grey91] [gray91]
+\definecolor [gray92] [s=0.92]
+\definecolor [grey92] [gray92]
+\definecolor [gray93] [s=0.93]
+\definecolor [grey93] [gray93]
+\definecolor [gray94] [s=0.94]
+\definecolor [grey94] [gray94]
+\definecolor [gray95] [s=0.95]
+\definecolor [grey95] [gray95]
+\definecolor [gray96] [s=0.96]
+\definecolor [grey96] [gray96]
+\definecolor [gray97] [s=0.97]
+\definecolor [grey97] [gray97]
+\definecolor [gray98] [s=0.98]
+\definecolor [grey98] [gray98]
+\definecolor [gray99] [s=0.99]
+\definecolor [grey99] [gray99]
+\definecolor [gray100] [s=1.00]
+\definecolor [grey100] [gray100]
+\definecolor [darkgrey] [s=0.66]
+\definecolor [darkgray] [darkgrey]
+\definecolor [darkblue] [h=00008b]
+\definecolor [darkcyan] [h=008b8b]
+\definecolor [darkmagenta] [h=8b008b]
+\definecolor [darkred] [h=8b0000]
+\definecolor [lightgreen] [h=90ee90]
+
+\endinput
diff --git a/Master/texmf-dist/tex/context/base/cont-cz.tex b/Master/texmf-dist/tex/context/base/cont-cz.tex
deleted file mode 100644
index b86b21e869a..00000000000
--- a/Master/texmf-dist/tex/context/base/cont-cz.tex
+++ /dev/null
@@ -1,35 +0,0 @@
-%D \module
-%D [ file=cont-cz,
-%D version=1998.12.02,
-%D title=\CONTEXT,
-%D subtitle=\CONTEXT\ Czech Format Generation,
-%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.
-
-\catcode`\{=1 \catcode`\}=2 \def\defaultinterface{czech}
-
-\input context.tex
-
-\unprotect
-
-\setupcurrentlanguage[\s!cz]
-
-\loaduserspecifications
-
-\installlanguage [\s!en] [\c!state=\v!start]
-\installlanguage [\s!de] [\c!state=\v!start]
-\installlanguage [\s!sk] [\c!state=\v!start]
-\installlanguage [\s!cz] [\c!state=\v!start]
-
-% \setupbodyfont [cmr,ams,rm,12pt]
-%
-% \setupencoding[default=ec] \usetypescript[modern][\defaultencoding] \setupbodyfont[modern,rm,12pt]
-
-\setupencoding[default=ec] \usetypescript[fallback][\defaultencoding] \setupbodyfont[rm,12pt]
-
-\protect \errorstopmode \dump \endinput
diff --git a/Master/texmf-dist/tex/context/base/cont-fil.tex b/Master/texmf-dist/tex/context/base/cont-fil.tex
index 28b6b6f55b8..b295872ca0c 100644
--- a/Master/texmf-dist/tex/context/base/cont-fil.tex
+++ b/Master/texmf-dist/tex/context/base/cont-fil.tex
@@ -20,7 +20,8 @@
\definefilesynonym [eenheid] [units]
\definefilesynonym [einheit] [units]
-\definefilesynonym [pstricks] [pstric]
+\definefilesynonym [pstric] [pstricks]
+\definefilesynonym [pstrick] [pstricks]
\definefilesynonym [finance] [financ]
diff --git a/Master/texmf-dist/tex/context/base/cont-log.tex b/Master/texmf-dist/tex/context/base/cont-log.tex
index a22c1d2c4e2..9bfec299992 100644
--- a/Master/texmf-dist/tex/context/base/cont-log.tex
+++ b/Master/texmf-dist/tex/context/base/cont-log.tex
@@ -89,7 +89,7 @@
\kern-.11em\TeX}
\def\AMSswitch#1%
- {$\fam2\ifdim\bodyfontsize>1.1em\scriptstyle\fi#1$}
+ {$\cal\ifdim\bodyfontsize>1.1em\scriptstyle\fi#1$}
\unexpanded\def\AmSTeX
{\AMSswitch A%
@@ -210,6 +210,7 @@
\unexpanded\def\TABLE {\TaBlE}
\unexpanded\def\AMSTEX {\AmSTeX}
\unexpanded\def\LAMSTEX {\LamSTeX}
+\unexpanded\def\INRSTEX {inrs\TeX}
%D And this is how they show up: \TeX, \MetaFont, \MetaPost,
%D \PiCTeX, \TaBlE, \ConTeXt, \PPCHTeX, \AmSTeX, \LaTeX,
@@ -286,14 +287,15 @@
\fi
-\let\ETEX \eTeX
-\let\PDFTEX \pdfTeX
-\let\PDFETEX \pdfeTeX
-\let\LUATEX \luaTeX
-\let\XETEX \XeTeX
+\let\ETEX \eTeX
+\let\PDFTEX \pdfTeX
+\let\PDFETEX\pdfeTeX
+\let\LUATEX \luaTeX
+\let\LuaTeX \luaTeX
+\let\XETEX \XeTeX
-\def\MkApproved
- {\rotate
+\unexpanded\def\MkApproved
+ {\dontleavehmode\rotate
[\c!rotation={\ifnum\texengine=\luatexengine\ctxlua{tex.write(45-45*\the\luatexversion/100)}\else0\fi},
\c!align=\v!middle,
\c!foregroundstyle=\v!type,
@@ -306,4 +308,52 @@
\c!rulethickness=2pt]
{Mk\ifnum\texengine=\luatexengine IV\else II\fi\\approved}}
+
+% \unexpanded\def\luaTeX
+% {\dontleavehmode\begingroup
+% Lua%
+% \setbox0\hbox{oT}%
+% \setbox2\hbox{o\kern0ptT}%
+% \ifdim\wd0=\wd2
+% \setbox0\hbox dir TRT{To}%
+% \setbox2\hbox{T\kern0pto}%
+% \hskip\dimexpr\wd0-\wd2\relax
+% \fi
+% \TeX
+% \endgroup}
+%
+% a further iteration from the list, patched again
+
+% \ifx\fontalternative\c!it -\else
+% \ifx\fontalternative\c!sl -\else
+% \ifx\fontalternative\c!bi -\else
+% \ifx\fontalternative\c!bs -\fi\fi\fi\fi
+
+\def\LuaTeX
+ {\dontleavehmode
+ \begingroup
+ Lua%
+ % hope for kerning, try aT
+ \setbox0\hbox{aT}%
+ \setbox2\hbox{a\kern\zeropoint T}%
+ \ifdim\wd0=\wd2 % kerns can go two ways
+ % no aT kerning, try oT as a is not symmetrical
+ \setbox0\hbox{oT}%
+ \setbox2\hbox{o\kern\zeropoint T}%
+ \ifdim\wd0=\wd2 % kerns can go two ways
+ % no aT and oT kerning, try To
+ \setbox0\hbox{To}%
+ \setbox2\hbox{T\kern\zeropoint o}%
+ % maybe we need to compensate for the angle (sl/it/bs/bi)
+ \fi
+ \ifdim\wd0=\wd2\else
+ \kern\dimexpr\wd0-\wd2\relax
+ \fi
+ \fi
+ \TeX
+ \endgroup}
+
+\let\luaTeX \LuaTeX
+\let\LUATEX \LuaTeX
+
\protect \endinput
diff --git a/Master/texmf-dist/tex/context/base/cont-new.mkii b/Master/texmf-dist/tex/context/base/cont-new.mkii
index 8b5bed657a5..2defba6d787 100644
--- a/Master/texmf-dist/tex/context/base/cont-new.mkii
+++ b/Master/texmf-dist/tex/context/base/cont-new.mkii
@@ -16,4 +16,7 @@
\long\def\startluacode#1\stopluacode{}
\long\def\ctxlua #1{}
+\def\enabletrackers [#1]{}
+\def\disabletrackers[#1]{}
+
\endinput
diff --git a/Master/texmf-dist/tex/context/base/cont-new.mkiv b/Master/texmf-dist/tex/context/base/cont-new.mkiv
index 35b716ed46f..6269e5a6160 100644
--- a/Master/texmf-dist/tex/context/base/cont-new.mkiv
+++ b/Master/texmf-dist/tex/context/base/cont-new.mkiv
@@ -11,25 +11,15 @@
%C therefore copyrighted by \PRAGMA. See mreadme.pdf for
%C details.
-% 2009-07-15 / vista sp 2 / 2.2G duo dell M90 precision:
-%
-% \dorecurse{10000}{test \page} % 300 pps
-% \dorecurse {2000}{test \page} % 260 pps
-% \dorecurse {300}{test \page} % 135 pps
-
-% \ctxlua { fonts.define.method = 2 } % normally 3
-
-\enablemode[mkiv] \setsystemmode{mkiv}
-
% potential new defaults:
%
% \setbreakpoints[compound]
\unprotect
-% % % % % % needs testing but saves runtime
+\ctxlua{logs.report = commands.report} % this will become default
-\let\checknotes\relax % probably not needed, checking already done
+\def\immediatemessage#1{\ctxlua{commands.writestatus("message","#1")}}
% we need to figure this out (to be discussed)
@@ -43,106 +33,8 @@
\unexpanded\def\textplus
{\char"002B } % plus
-% \def\registerviewerlayer#1#2% global !
-% {\setxvalue{(vl:#1)}{\global\dosetattribute{viewerlayer}{\ctxlua{tex.print(viewerlayers.register('#2'))}}}}
-
-% \setevalue{(vl:)}{\global\doresetattribute{viewerlayer}}
-
-\let\\=\crlf % till we fixed all styles
-
-% \def\pagedir{\expandafter\gobblethreearguments}
-% \def\bodydir{\expandafter\gobblethreearguments}
-
-%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())}}
-% \writestatus\m!lua{used cache path - \ctxlua{tex.print(caches.path)}}
-
-\startluacode
- statistics.register("result saved in file", function()
- return string.format( "%s.%s", "\outputfilename", (tex.pdfoutput>0 and "pdf") or "dvi")
- end)
-\stopluacode
-
-%D For the moment we report some statistics. Later this will become an option,
-%D but for now we need this information.
-
-\def\nomkivstatistics{\ctxlua{statistics.enable = false}} % for taco
-
-\def\resettimer {\ctxlua{environment.starttime = os.clock()}}
-\def\elapsedtime {\ctxlua{tex.sprint(os.clock()-environment.starttime)}}
-\let\elapsedseconds \elapsedtime
+% till we fixed all styles
-% we will have a bunch of extra tracers (--dumphash --dumpdelta)
-
-\def\tracersdumphash {\ctxlua{tracers.register_dump_hash(false)}}
-\def\tracersdumpdelta{\ctxlua{tracers.register_dump_hash(true)}}
-
-\resettimer
-
-%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 \pdfbackendeveryximage
-% \appendtoksonce \loadallXfontmapfiles \to \pdfbackendeveryxform
-% \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
-% resolvers.output_files = { }
-% callback.register('find_write_file', function(id,name)
-% resolvers.output_files[name] = file.join(".","tmp","\jobname",name)
-% texio.write_nl("REDIRECTING OUTPUT "..name.. " TO " .. resolvers.output_files[name])
-% return resolvers.output_files[name]
-% end)
-% callback.register('find_read_file', function(id,name)
-% local sname = string.gsub(name,"^\letterpercent./","")
-% if resolvers.output_files[sname] then
-% return resolvers.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
-% resolvers.output_files[name] = n
-% texio.write_nl("REDIRECTING INPUT "..sname.. " TO " .. n)
-% f:close()
-% return n
-% else
-% return resolvers.findtexfile(name)
-% end
-% else
-% return resolvers.findtexfile(name)
-% end
-% end)
-% }
-
-\definestartstop[randomized][\c!before=\dosetattribute{case}{8},\c!after=]
+\let\\=\crlf
\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 161d4c9182e..9c4fdba18f9 100644
--- a/Master/texmf-dist/tex/context/base/cont-new.tex
+++ b/Master/texmf-dist/tex/context/base/cont-new.tex
@@ -11,7 +11,7 @@
%C therefore copyrighted by \PRAGMA. See mreadme.pdf for
%C details.
-\newcontextversion{2009.08.19 17:10}
+\newcontextversion{2010.05.24 13:05}
%D This file is loaded at runtime, thereby providing an
%D excellent place for hacks, patches, extensions and new
diff --git a/Master/texmf-dist/tex/context/base/cont-uk.tex b/Master/texmf-dist/tex/context/base/cont-uk.tex
deleted file mode 100644
index d900217e1dc..00000000000
--- a/Master/texmf-dist/tex/context/base/cont-uk.tex
+++ /dev/null
@@ -1,38 +0,0 @@
-%D \module
-%D [ file=cont-uk,
-%D version=1997.08.19,
-%D title=\CONTEXT,
-%D subtitle=\CONTEXT\ English Format Generation,
-%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.
-
-\catcode`\{=1 \catcode`\}=2 \def\defaultinterface{english}
-
-\input context.tex
-
-\unprotect
-
-\setupcurrentlanguage[\s!uk]
-
-\loaduserspecifications
-
-\installlanguage [\s!en] [\c!state=\v!start]
-\installlanguage [\s!uk] [\c!state=\v!start]
-\installlanguage [\s!de] [\c!state=\v!start]
-\installlanguage [\s!fr] [\c!state=\v!start]
-\installlanguage [\s!es] [\c!state=\v!start]
-\installlanguage [\s!nl] [\c!state=\v!start]
-\installlanguage [\s!it] [\c!state=\v!start]
-
-% \setupbodyfont [cmr,ams,rm,12pt]
-%
-% \setupencoding[default=ec] \usetypescript[modern][\defaultencoding] \setupbodyfont[modern,rm,12pt]
-
-\setupencoding[default=ec] \usetypescript[fallback][\defaultencoding] \setupbodyfont[rm,12pt]
-
-\protect \errorstopmode \dump \endinput
diff --git a/Master/texmf-dist/tex/context/base/context-base.lmx b/Master/texmf-dist/tex/context/base/context-base.lmx
index 5c96b497953..fd27927bf82 100644
--- a/Master/texmf-dist/tex/context/base/context-base.lmx
+++ b/Master/texmf-dist/tex/context/base/context-base.lmx
@@ -14,25 +14,63 @@
<head>
<title><?lua pv('title') ?></title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
+ <?lua if (v('refreshtime') and (tonumber(v('refreshtime')) or 0) > 0) and v('refreshurl') then ?>
+ <meta http-equiv='refresh' content="<?lua pv('refreshtime') ?>; <?lua pv('refreshurl') ?>"/>
+ <?lua end ?>
<style type="text/css">
<?lmx-include context.css ?>
</style>
+ <?lua if v('styles') then for k, v in ipairs(v('styles')) do ?>
+ <link rel="StyleSheet" href="<?lua p(v) ?>" type="text/css" />
+ <?lua end end ?>
</head>
+ <?lua if v('action') then ?>
+ <form action="<?lua pv(action) ?>" enctype="multi-part/form-data" method="post">
+ <?lua end ?>
<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">
- <?lua pv('lefttext') ?>
- </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">
- <?lua pv('righttext') ?>
- </div></div></div></div></div></div></div>
- <div id="main"><div id='main-settings'>
- <div class='title'><?lua pv('maintext') ?></div>
- </div></div>
- <div id="bottom"><div id="bottom-one"><div id="bottom-two">
- <?lua pv('bottomtext') ?>
- </div></div></div>
+ <div id="top">
+ <div id="top-one">
+ <div id="top-two">
+ <?lua pv('title') ?>
+ </div>
+ </div>
+ </div>
+ <div id="bottom">
+ <div id="bottom-one">
+ <div id="bottom-two">
+ <?lua pv('bottomtext') ?>
+ </div>
+ </div>
+ </div>
+ <div id="left">
+ <div id="left-one">
+ <div id="left-two">
+ <?lua pv('lefttext') ?>
+ </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">
+ <?lua pv('righttext') ?>
+ </div>
+ </div>
+ </div>
+ </div>
+ </div>
+ </div>
+ </div>
+ <div id="main">
+ <div id='main-settings'>
+ <?lua pv('maintext') ?>
+ </div>
+ </div>
</body>
+ <?lua if v('action') then ?>
+ </form>
+ <?lua end ?>
</html>
diff --git a/Master/texmf-dist/tex/context/base/context-characters.lmx b/Master/texmf-dist/tex/context/base/context-characters.lmx
index b2ddee64e83..f018e412ba9 100644
--- a/Master/texmf-dist/tex/context/base/context-characters.lmx
+++ b/Master/texmf-dist/tex/context/base/context-characters.lmx
@@ -12,7 +12,7 @@
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
<head>
- <script language="JavaScript">
+ <script type='text/javascript'>
<!--
window.focus();
-->
diff --git a/Master/texmf-dist/tex/context/base/context-debug.lmx b/Master/texmf-dist/tex/context/base/context-debug.lmx
index 8ca2573a9fa..51b18c83729 100644
--- a/Master/texmf-dist/tex/context/base/context-debug.lmx
+++ b/Master/texmf-dist/tex/context/base/context-debug.lmx
@@ -12,7 +12,7 @@
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
<head>
- <script language="JavaScript">
+ <script type='text/javascript'>
<!--
window.focus();
-->
diff --git a/Master/texmf-dist/tex/context/base/context-error.lmx b/Master/texmf-dist/tex/context/base/context-error.lmx
index 015d74c9f0f..b82b552f88f 100644
--- a/Master/texmf-dist/tex/context/base/context-error.lmx
+++ b/Master/texmf-dist/tex/context/base/context-error.lmx
@@ -12,7 +12,7 @@
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
<head>
- <script language="JavaScript">
+ <script type='text/javascript'>
<!--
window.focus();
-->
diff --git a/Master/texmf-dist/tex/context/base/context-fonttest.lmx b/Master/texmf-dist/tex/context/base/context-fonttest.lmx
index b90af179db2..fddb8196b38 100644
--- a/Master/texmf-dist/tex/context/base/context-fonttest.lmx
+++ b/Master/texmf-dist/tex/context/base/context-fonttest.lmx
@@ -12,7 +12,7 @@
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
<head>
- <script type="text/javascript">
+ <script type='text/javascript'>
<!--
window.focus() ;
<?lua pv('javascripts')?> ;
diff --git a/Master/texmf-dist/tex/context/base/context-help.lmx b/Master/texmf-dist/tex/context/base/context-help.lmx
index 3c663b0acc3..5401fb65db0 100644
--- a/Master/texmf-dist/tex/context/base/context-help.lmx
+++ b/Master/texmf-dist/tex/context/base/context-help.lmx
@@ -12,7 +12,7 @@
<html>
<head>
- <script language="JavaScript">
+ <script type='text/javascript'>
<!--
window.focus();
-->
diff --git a/Master/texmf-dist/tex/context/base/context-timing.lmx b/Master/texmf-dist/tex/context/base/context-timing.lmx
index eea9db822ef..57b5879bad8 100644
--- a/Master/texmf-dist/tex/context/base/context-timing.lmx
+++ b/Master/texmf-dist/tex/context/base/context-timing.lmx
@@ -16,7 +16,7 @@
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
<head>
- <script language="JavaScript">
+ <script type='text/javascript'>
<!--
window.focus();
-->
diff --git a/Master/texmf-dist/tex/context/base/context.mkii b/Master/texmf-dist/tex/context/base/context.mkii
index 4f8f1616350..4be60cbfcbc 100644
--- a/Master/texmf-dist/tex/context/base/context.mkii
+++ b/Master/texmf-dist/tex/context/base/context.mkii
@@ -34,6 +34,7 @@
\loadmarkfile{syst-ext}
\loadmarkfile{syst-new}
\loadmarkfile{syst-con}
+\loadcorefile{syst-ltx}
\loadmarkfile{thrd-trg} % based on: David Carlisle
\loadmarkfile{syst-fnt}
@@ -81,7 +82,7 @@
\loadmarkfile{supp-ran}
\loadmarkfile{supp-mps}
\loadmarkfile{supp-tpi}
-\loadcorefile{supp-mat}
+\loadmarkfile{supp-mat}
\loadcorefile{supp-ali}
\loadcorefile{supp-num}
@@ -181,8 +182,9 @@
%D macros' that are seen by the users. The order of loading
%D is important, due to dependancies.
-\loadmarkfile{core-spa}
-\loadmarkfile{core-grd}
+\loadmarkfile{spac-gen}
+\loadmarkfile{spac-grd}
+
\loadmarkfile{strc-mar}
\loadmarkfile{anch-pos}
@@ -192,6 +194,7 @@
\loadmarkfile{pack-rul}
\loadmarkfile{trac-vis}
\loadmarkfile{strc-num}
+\loadmarkfile{tabl-com}
\loadmarkfile{tabl-pln}
\loadmarkfile{tabl-tab}
\loadmarkfile{tabl-tsp}
@@ -274,7 +277,7 @@
\loadmarkfile{enco-pfr}
\loadmarkfile{type-ini}
-\loadcorefile{type-def}
+\loadmarkfile{type-set}
%D Properties. Don't ask.
@@ -333,6 +336,10 @@
\loadcorefile{lang-spa}
+%D Bibliographies:
+
+\loadmarkfile{bibl-tra}
+
%D Only the basic XML parser and remapper are part of the core.
%D These macros are loaded last since they overload and|/|or
%D extend previously defined ones.
diff --git a/Master/texmf-dist/tex/context/base/context.mkiv b/Master/texmf-dist/tex/context/base/context.mkiv
index 03f26c8f000..33fa3a901ac 100644
--- a/Master/texmf-dist/tex/context/base/context.mkiv
+++ b/Master/texmf-dist/tex/context/base/context.mkiv
@@ -20,14 +20,18 @@
\loadcorefile{syst-ini}
-\ifnum\luatexversion<43
- \writestatus{!!!!}{Your luatex binary is way too old, you need at least version 0.42.}
+\ifnum\luatexversion<60 % also change message
+ \writestatus{!!!!}{Your luatex binary is too old, you need at least version 0.60!}
\expandafter\end
\fi
+\newtoks\contextversiontoks \contextversiontoks\expandafter{\contextversion} % at the lua end
+
\loadcorefile{norm-ctx}
\loadcorefile{syst-pln}
+\newif\ifCONTEXT \CONTEXTtrue % will disappear
+
\loadmarkfile{luat-cod}
\loadmarkfile{luat-bas}
\loadmarkfile{luat-lib}
@@ -38,11 +42,13 @@
\loadcorefile{catc-ctx}
\loadcorefile{catc-sym}
-\newif\ifCONTEXT \CONTEXTtrue % will disappear
+% From here on we have \unexpanded being \normalprotected, as we
+% already had \unexpanded long before etex came around.
\loadmarkfile{syst-aux}
\loadmarkfile{syst-lua}
\loadmarkfile{syst-con}
+\loadcorefile{syst-ltx}
\loadmarkfile{syst-fnt}
\loadmarkfile{syst-str}
@@ -68,12 +74,15 @@
\loadmarkfile{node-ini}
\loadmarkfile{node-fin}
+\loadmarkfile{node-mig}
\loadmarkfile{node-par}
+%loadmarkfile{node-pag}
\loadmarkfile{core-var}
\loadmarkfile{back-ini}
\loadmarkfile{lpdf-ini} % some day back-ini will load this
+\loadmarkfile{lpdf-pdx} % might be merged into lpdf-ini
\loadmarkfile{back-pdf} % some day back-ini will load this
\loadmarkfile{attr-ini}
@@ -84,13 +93,15 @@
\loadmarkfile{trac-lmx}
\loadmarkfile{trac-deb}
+\loadmarkfile{blob-ini} % not to be used, we only use a helper
+
\loadcorefile{supp-box}
\loadcorefile{supp-vis}
\loadcorefile{supp-fun}
\loadmarkfile{supp-ran}
-\loadcorefile{supp-mat}
+\loadmarkfile{supp-mat}
\loadcorefile{supp-ali}
\loadcorefile{supp-num}
@@ -109,6 +120,7 @@
\loadmarkfile{lang-ini}
\loadmarkfile{lang-lab}
+\loadmarkfile{lang-wrd}
\loadmarkfile{unic-ini}
@@ -148,6 +160,7 @@
\loadmarkfile{pack-rul}
\loadmarkfile{lxml-ini}
+\loadmarkfile{lxml-sor}
\loadmarkfile{strc-ini}
\loadmarkfile{strc-doc}
@@ -164,10 +177,14 @@
\loadmarkfile{strc-ref}
\loadmarkfile{strc-reg}
-\loadmarkfile{bibl-bib}
-
-\loadmarkfile{core-spa}
-\loadmarkfile{core-grd}
+\loadmarkfile{spac-hor}
+\loadmarkfile{spac-ver}
+\loadmarkfile{spac-ali}
+\loadmarkfile{spac-pag}
+\loadmarkfile{spac-fnt}
+\loadmarkfile{spac-par}
+\loadmarkfile{spac-def}
+\loadmarkfile{spac-grd}
\loadmarkfile{anch-pos}
@@ -181,6 +198,7 @@
\loadmarkfile{core-sys}
\loadmarkfile{page-ini}
+\loadmarkfile{page-flt}
\loadmarkfile{page-bck}
\loadmarkfile{page-not}
\loadmarkfile{page-one}
@@ -215,6 +233,7 @@
\loadmarkfile{scrn-bar}
\loadmarkfile{strc-bkm} % bookmarks
+\loadmarkfile{tabl-com}
\loadmarkfile{tabl-pln}
\loadcorefile{thrd-tab}
\loadmarkfile{tabl-tab}
@@ -235,15 +254,18 @@
\loadmarkfile{font-tra}
\loadmarkfile{font-uni}
\loadmarkfile{font-col}
+\loadmarkfile{font-gds}
\loadmarkfile{typo-spa}
\loadmarkfile{typo-krn}
\loadmarkfile{typo-mir}
\loadmarkfile{typo-brk}
\loadmarkfile{typo-cap}
+\loadmarkfile{typo-dig}
+\loadmarkfile{typo-rep}
\loadmarkfile{type-ini}
-\loadcorefile{type-def}
+\loadmarkfile{type-set}
\loadmarkfile{scrp-ini}
@@ -283,6 +305,7 @@
\loadmarkfile{math-del}
\loadmarkfile{math-inl}
\loadmarkfile{math-dis}
+\loadmarkfile{math-lan}
\loadmarkfile{strc-mat}
@@ -290,6 +313,7 @@
\loadmarkfile{chem-str}
\loadmarkfile{core-fnt}
+\loadmarkfile{node-rul}
\loadmarkfile{strc-not}
\loadmarkfile{strc-lnt}
@@ -305,14 +329,14 @@
\loadmarkfile{page-app}
\loadmarkfile{meta-fig}
+\loadmarkfile{node-bck} % overloads anch-pgr (experimental and undocumented)
+
\loadcorefile{lang-spa}
-\loadcorefile{xtag-ini} % might go away
-\loadcorefile{xtag-ext} % might go away
-\loadcorefile{xtag-exp} % will go away
-\loadcorefile{xtag-pre} % has old encoding code
-\loadcorefile{xtag-xsd} % will go away (stub anyway)
-\loadcorefile{xtag-rng} % will go away (stub anyway)
+\loadmarkfile{bibl-bib}
+\loadmarkfile{bibl-tra}
+
+\loadmarkfile{x-xtag} % at some point this will not be preloaded
\loadcorefile{meta-xml}
diff --git a/Master/texmf-dist/tex/context/base/context.tex b/Master/texmf-dist/tex/context/base/context.tex
index 5f9615230f0..47489658ea6 100644
--- a/Master/texmf-dist/tex/context/base/context.tex
+++ b/Master/texmf-dist/tex/context/base/context.tex
@@ -20,7 +20,7 @@
%D your styles an modules.
\edef\contextformat {\jobname}
-\edef\contextversion{2009.08.19 17:10}
+\edef\contextversion{2010.05.24 13:05}
%D For those who want to use this:
diff --git a/Master/texmf-dist/tex/context/base/core-bar.tex b/Master/texmf-dist/tex/context/base/core-bar.tex
deleted file mode 100644
index 9b7acf17f34..00000000000
--- a/Master/texmf-dist/tex/context/base/core-bar.tex
+++ /dev/null
@@ -1,194 +0,0 @@
-%D \module
-%D [ file=core-bar,
-%D version=2003.03.16,
-%D title=\CONTEXT\ Core Macros,
-%D subtitle=Margin Bars and alike,
-%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 Plus Macros / Margin Bars etc}
-
-\unprotect
-
-%D We will implement a sidebar mechanism using the
-%D functionality from \type {core-pos}.
-%D
-%D \starttyping
-%D \definesidebar[whow][rulecolor=green,distance=]
-%D
-%D \input tufte \par
-%D \startsidebar
-%D \input tufte \par
-%D \input tufte \par
-%D \startsidebar[whow]
-%D \input tufte \par
-%D \input tufte \par
-%D \input tufte
-%D \stopsidebar \par
-%D \input tufte \par
-%D \input tufte
-%D \stopsidebar \par
-%D \input tufte \par
-%D \input tufte \par
-%D \startsidebar
-%D \input tufte \par
-%D \input tufte \par
-%D \input tufte \par
-%D \input tufte \par
-%D \input tufte
-%D \stopsidebar \par
-%D \input tufte \par
-%D \input tufte \par
-%D \startsidebar
-%D \input tufte
-%D \input tufte
-%D \input tufte
-%D \input tufte
-%D \input tufte
-%D \stopsidebar
-%D \stoptyping
-
-\newcount\currentsidebar
-\newdimen\sidebardistance
-
-\def\setupsidebars
- {\dodoubleargument\dosetupsidebars}
-
-\def\dosetupsidebars[#1][#2]%
- {\ifsecondargument
- \getparameters[\??br#1][#2]%
- \else
- \getparameters[\??br][#1]%
- \fi}
-
-% \setupMPvariables
-% [mpos:bar]
-% [linecolor=red,
-% linewidth=2pt,
-% distance=5pt]
-
-\setupsidebars
- [\c!rulethickness=2pt,
- \c!rulecolor=red,
- \c!distance=.5\bodyfontsize]
-
-\def\definesidebar
- {\dodoubleempty\dodefinesidebar}
-
-\def\dodefinesidebar[#1][#2]%
- {\copyparameters
- [\??br#1][\??br]
- [\c!rulethickness,\c!rulecolor,\c!distance]%
- \getparameters
- [\??br#1][#2]}
-
-\def\startsidebar
- {\dosingleempty\dostartsidebar}
-
-\def\dostartsidebar[#1]%
- {\bgroup
- \dontleavehmode
- \checktextbackgrounds
- \global\advance\currentsidebar\plusone
- \doifelsenothing{#1}
- {\advance\sidebardistance\@@brdistance}
- {\doifelsevaluenothing{\??br#1\c!distance}
- {\advance\sidebardistance\@@brdistance}
- {\sidebardistance\getvalue{\??br#1\c!distance}}}%
- \startpositionoverlay{text-1}%
- \expanded{\setMPpositiongraphicrange
- {b:side:\the\currentsidebar}%
- {e:side:\the\currentsidebar}%
- {mpos:bar}%
- {self=side:\the\currentsidebar,
- linewidth=\getvalue{\??br#1\c!rulethickness},
- linecolor=\getvalue{\??br#1\c!rulecolor},
- distance=\the\sidebardistance}}%
- \stoppositionoverlay
- \bpos{side:\the\currentsidebar}\ignorespaces}
-
-% \def\dostopsidebar#1%
-% {\removelastspace\tpos{side:#1}\carryoverpar\egroup}
-
-\def\stopsidebar
- {\removelastspace\tpos{side:\the\currentsidebar}\carryoverpar\egroup}
-
-\startMPpositionmethod{mpos:bar}
- \startMPpositiongraphic{mpos:bar}{linecolor,linewidth,distance}%
- StartPage ;
- path p ; p :=
- if \MPp\MPbself=\MPp\MPeself :
- (xpart ulcorner Field[Text][Text],\MPy\MPbself+\MPh\MPbself) --
- (xpart llcorner Field[Text][Text],\MPy\MPeself-\MPd\MPeself) ;
- elseif RealPageNumber=\MPp\MPbself :
- (xpart ulcorner Field[Text][Text],\MPy\MPbself+\MPh\MPbself) --
- (llcorner Field[Text][Text]) ;
- elseif RealPageNumber=\MPp\MPeself :
- (ulcorner Field[Text][Text]) --
- (xpart llcorner Field[Text][Text],\MPy\MPeself-\MPd\MPeself) ;
- else :
- (ulcorner Field[Text][Text]) --
- (llcorner Field[Text][Text]) ;
- fi ;
- p := p shifted (-llcorner Field[Text][Text]-(\MPvar{distance},0)) ;
- interim linecap := butt ;
- draw p
- withpen pencircle scaled \MPvar{linewidth}
- withcolor \MPvar{linecolor} ;
- StopPage ;
- \stopMPpositiongraphic
- \MPpositiongraphic{mpos:bar}{}%
-\stopMPpositionmethod
-
-%D We now reimplement the margin rules handler defined in
-%D \type {core-rul}:
-%D
-%D \setupmarginrules[level=5]
-%D
-%D \startmarginrule[1]
-%D First we set the level at~5. Next we typeset this first
-%D paragraph as a level~1 one. As expected no rule show up.
-%D \stopmarginrule
-%D
-%D \startmarginrule[5]
-%D The second paragraph is a level~5 one. As we can see here,
-%D the marginal rule gets a width according to its level.
-%D \stopmarginrule
-%D
-%D \startmarginrule[8]
-%D It will of course be no surprise that this third paragraph
-%D has a even thicker margin rule. This behavior can be
-%D overruled by specifying the width explictly.
-%D \stopmarginrule
-
-\definesidebar
- [\v!margin]
- [\c!rulecolor=\s!black,
- \c!rulethickness=\@@karulethickness,
- \c!distance=\dimexpr\leftmargindistance-\@@karulethickness/2\relax]
-
-\definecomplexorsimple\startmarginrule
-
-\def\simplestartmarginrule
- {\complexstartmarginrule[1]}
-
-\def\complexstartmarginrule[#1]%
- {\bgroup
- \ifnum#1<\@@kalevel\relax
- \let\stopmarginrule\egroup
- \else
- \def\@@kadefaultwidth{#1}%
- \let\stopmarginrule\dostopmarginrule
- \@EA\startsidebar\@EA[\@EA\v!margin\@EA]%
- \fi}
-
-\def\dostopmarginrule
- {\stopsidebar
- \egroup}
-
-\protect \endinput
diff --git a/Master/texmf-dist/tex/context/base/core-blk.tex b/Master/texmf-dist/tex/context/base/core-blk.tex
deleted file mode 100644
index 8de1099e6e8..00000000000
--- a/Master/texmf-dist/tex/context/base/core-blk.tex
+++ /dev/null
@@ -1,676 +0,0 @@
-%D \module
-%D [ file=core-blk, % split off core-buf.tex
-%D version=2000.01.05,
-%D title=\CONTEXT\ Core Macros,
-%D subtitle=Blockmoves,
-%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.
-
-% investigate etex's \readline and \scantokens
-
-\writestatus{loading}{Context Core Macros / Blockmoves}
-
-\startmessages dutch library: textblocks
- title: tekstblokken
- 1: nieuwe versie, tweede run nodig
- 2: wegschrijven blokken naar --
- 3: inlezen blokken uit --
- 4: er is een tweede run nodig
- 5: -- niet verborgen
- 6: -- verborgen en verwerkt
- 7: -- verborgen
- 8: -- gehandhaafd
- 9: -- niet gehandhaafd
- 10: -- geladen en verwerkt
- 11: -- geladen en geplaatst
- 12: -- overgeslagen
-\stopmessages
-
-\startmessages english library: textblocks
- title: textblocks
- 1: new version, second pass needed
- 2: writing blocks to --
- 3: reading blocks from --
- 4: second pass needed
- 5: -- not hidden
- 6: -- hidden and processed
- 7: -- hidden
- 8: -- typeset
- 9: -- not typeset
- 10: -- loaded and processed
- 11: -- loaded and typeset
- 12: -- skipped
-\stopmessages
-
-\startmessages german library: textblocks
- title: textblock
- 1: neue Version, zweiter Durchlauf benoetigt
- 2: schreibe Bloecke zu --
- 3: lese Bloecke von --
- 4: zweiter Durchlauf benoetigt
- 5: -- nicht verborgen
- 6: -- verborgen und verarbeitet
- 7: -- verborgen
- 8: -- gesetzt
- 9: -- nicht gesetzt
- 10: -- geladen und verarbeitet
- 11: -- geladen und gesetzt
- 12: -- ausgelassen
-\stopmessages
-
-\startmessages czech library: textblocks
- title: textovyblok
- 1: nova verze, je treba druhy beh
- 2: zapisuji bloky do --
- 3: ctu bloky z --
- 4: je treba druhy beh
- 5: -- neni skryto
- 6: -- skryto a zpracovano
- 7: -- skryto
- 8: -- vysazeno
- 9: -- nevysazeno
- 10: -- nacteno a zpracovano
- 11: -- nacteno a vysazeno
- 12: -- preskoceno
-\stopmessages
-
-\startmessages italian library: textblocks
- title: blocchi di testo
- 1: nuova versione, seconda passata necessaria
- 2: scrittura dei blocchi su --
- 3: lettura dei blocchi da --
- 4: seconda passata necessaria
- 5: -- non nascosto
- 6: -- nascosto ed elaborato
- 7: -- nascosto
- 8: -- composto
- 9: -- non composto
- 10: -- caricato ed elaborato
- 11: -- caricato e composto
- 12: -- saltato
-\stopmessages
-
-\startmessages norwegian library: textblocks
- title: tekstblokker
- 1: ny versjon, andre gjennomkjøring nødvendig
- 2: skriver blokker til --
- 3: leser blokker fra --
- 4: andre gjennomkjøring nødvendig
- 5: -- ikke skjult
- 6: -- skjult og behandlet
- 7: -- skjult
- 8: -- tegnsatt
- 9: -- ikke tegnsatt
- 10: -- lest inn og behandlet
- 11: -- lest inn og tegnsatt
- 12: -- utelatt
-\stopmessages
-
-\startmessages romanian library: textblocks
- title: blocuri de text
- 1: o noua versiune, este nevoie de inca o trecere
- 2: se scriu blocurile in --
- 3: se citesc blocurile din --
- 4: este nevoie de inca o trecere
- 5: -- nu este ascuns
- 6: -- ascuns si procesat
- 7: -- ascuns
- 8: -- cules
- 9: -- nu este cules
- 10: -- incarcat si procesat
- 11: -- incarcat si cules
- 12: -- sarit peste
-\stopmessages
-
-\startmessages french library: textblocks
- title: blocs de texte
- 1: nouvelle version, une seconde passe est nécessaire
- 2: ecriture des blocs vers --
- 3: lecture des blocs en provenance de --
- 4: seconde passe nécessaire
- 5: -- non caché
- 6: -- caché et traité
- 7: -- caché
- 8: -- composé
- 9: -- non composé
- 10: -- chargé et traité
- 11: -- chargé et composé
- 12: -- sauté
-\stopmessages
-
-\unprotect
-
-\def\blockversion {1996.03.10}
-
-\def\@@blockerrormessage
- {\showmessage\m!textblocks1\empty
- \global\let\@@blockerrormessage\relax}
-
-\def\thisisblockversion#1%
- {\doifnot\blockversion{#1}{\@@blockerrormessage\endinput}}
-
-\def\stopcopyingblocks
- {\ifcopyingblocks
- \immediate\closeout\outblocks
- \copyblockfile
- \global\copyingblocksfalse
- \fi}
-
-\def\dodosetblockcounters[#1]#2%
- {\expanded{\setvalue{\??se\s!old#2}{\@@filterheadpart[#1]}}%
- \doifnot{#2}\lastsection
- {\expanded{\dodosetblockcounters[\@@filtertailpart[#1]]}%
- {\getvalue{\??se#2\c!after}}}} % ????
-
-\def\dosetblockcounters[#1]%
- {\ifblockpermitted
- \expanded{\dodosetblockcounters[\@@filtersecondpart[#1]]}\firstsection
- \expanded{\setsectiontype[\@@filterfirstpart[#1]]}%
- \def\@@sectionvalue##1{\getvalue{\??se\s!old##1}}%
- \let\@@sectionconversion\secondoftwoarguments
- \fi}
-
-\let\blockstatus\empty
-
-\def\setblockcounters
- {\ifx\blockstatus\empty \else
- \@EA\dosetblockcounters\@EA[\blockstatus]%
- \fi}
-
-\def\getblockstatus#1%
- {\dosetfilterlevel{\@@bscriterium}\empty
- \expanded{\doifblklevelelse[#1\sectionseparator\sectionseparator0]}
- {\global\blockpermittedtrue}
- {\global\blockpermittedfalse}%
- \def\blockstatus{#1}}
-
-\def\setupblockparameters
- {\dodoubleargument\dosetupblockparameters}
-
-\def\dosetupblockparameters[#1][#2]%
- {\getparameters[\??tb#1][#2]}
-
-\def\blockparameter#1#2%
- {\@EA\csname\ifcsname\??tb#1#2\endcsname\??tb#1#2\else\s!empty\fi\endcsname}
-
-\ifx\outblocks\undefined \newwrite\outblocks \fi
-\ifx\inpblocks\undefined \newread \inpblocks \fi
-\ifx\tmpblocks\undefined \newwrite\tmpblocks \fi
-\ifx\blockbox \undefined \newbox \blockbox \fi
-
-\newif\ifcopyingblocks
-\newif\ifblockpermitted
-\newif\iftmpblockstarted
-\newif\ifoldinbijlagen
-\newif\ifdoingblocks
-
-\newcount\blocklevel
-
-\def\setblocklevel#1% sign
- {\global\advance\blocklevel #11
- \ifcase\blocklevel\doingblocksfalse\else\doingblockstrue\fi}
-
-\def\opentmpblock
- {\immediate\openout\tmpblocks\TEXbufferfile{\f!utilityfilename\the\blocklevel}}
-
-\def\closetmpblock
- {\immediate\write\tmpblocks{}% een lege regel is handig voor \par commando's
- \immediate\closeout\tmpblocks}
-
-\def\writetmpblock#1%
- {\iftmpblockstarted
- \immediate\write\tmpblocks{#1}%
- \else
- \doifsomething{#1}
- {\tmpblockstartedtrue
- \immediate\write\tmpblocks{\string#1}}%
- \fi}
-
-\def\startcopyingblocks
- {\global\copyingblocksfalse}
-
-\def\checkcopyingblocks
- {\ifcopyingblocks
- \else
- \immediate\openout\outblocks\f!utilityfilename.\f!blockextension%
- \immediate\write\outblocks{\string\thisisblockversion{\blockversion}}%
- \immediate\write\outblocks{\string\thisissectionseparator{\sectionseparator}}%
- \global\copyingblockstrue
- \fi}
-
-\def\stopcopyingblocks
- {\ifcopyingblocks
- \immediate\closeout\outblocks
- \copyblockfile
- \global\copyingblocksfalse
- \fi}
-
-\def\nomoreblocks
- {\stopcopyingblocks}
-
-\def\copyblockfile
- {\ifcopyingblocks
- \begingroup
- \showmessage\m!textblocks2{\jobname.\f!blockextension}%
- \openlocin\inpblocks{\f!utilityfilename.\f!blockextension}%
- \immediate\openout\outblocks\jobname.\f!blockextension
- \setupcopyblock
- \catcode`\^^M=\@@ignore\relax
- \def\copynextline
- {\read\inpblocks to \!!stringa
- \immediate\write\outblocks{\!!stringa}%
- \ifeof\inpblocks\else\expandafter\copynextline\fi}%
- \copynextline
- \immediate\closein\inpblocks
- \immediate\closeout\outblocks
- \immediate\openout\tmpblocks\f!utilityfilename.\f!blockextension
- \immediate\closeout\tmpblocks
- \endgroup
- \fi}
-
-\def\loadallblocks#1%
- {\beginrestorecatcodes
- \catcode`\^^M=\@@endofline\relax
- \readjobfile{#1.\f!blockextension}
- {\showmessage\m!textblocks3{#1.\f!blockextension}}
- {\showmessage\m!textblocks4\empty}%
- \endrestorecatcodes}
-
-\def\setupcopyblock
- {\setcatcodetable\vrbcatcodes
- \obeylines}
-
-\def\writeoutblocks
- {\immediate\write\outblocks}
-
-\long\def\processnextblocklineAB#1% #2#3%
- {\defconvertedargument\next{#1 }%
- \doifinstringelse\endofblockA\next
- \firstoftwoarguments
- {\doifinstringelse\endofblockB\next
- \firstoftwoarguments\secondoftwoarguments}}
-
-\bgroup
-\obeylines
-\long\gdef\copyblocklineAB#1
- {\processnextblocklineAB{#1}\closeblock{\writeoutblocks{#1}\writetmpblock{#1}\copyblocklineAB}}
-\long\gdef\skipblocklineAB#1
- {\processnextblocklineAB{#1}\closeblock\skipblocklineAB}
-\egroup
-
-\long\def\processnextblockline#1% #2#3%
- {\defconvertedargument\next{#1 }%
- \ifx\next\emptybufferline
- \expandafter\secondoftwoarguments% #3%
- \else
- \emptybufferlinefalse
- \doifinstringelse\endofblock\next
- {\expandafter\firstoftwoarguments }% #2}
- {\expandafter\secondoftwoarguments}% #3}%
- \fi}
-
-\bgroup
-\obeylines
-\long\gdef\copyblockline#1
- {\processnextblockline{#1}\closeblock{\writeoutblocks{#1}\writetmpblock{#1}\copyblockline}}
-\long\gdef\skipblockline#1
- {\processnextblockline{#1}\closeblock\skipblockline}
-\egroup
-
-\def\skipblock#1%
- {\checkcopyingblocks
- \defconvertedcommand\endofblock{\string\thiswasblock{#1}}% command expands once !
- \let\openblock\begingroup
- \let\closeblock\endgroup
- \openblock
- \setupcopyblock
- \skipblockline}
-
-\let\doafterblock \gobbletwoarguments
-\let\dobeforeblock\gobbletwoarguments
-
-\def\thisisblock#1%
- {\executeifdefined{\s!thisisblock#1}{\skipblock{#1}}}
-
-\def\thiswasblock#1%
- {\getvalue{\s!thiswasblock#1}}
-
-\def\saveblock#1#2%
- {\checkcopyingblocks
- \obeylines
- \@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
- \begingroup
- \makesectionformat
- \immediate\write\outblocks{}%
- \immediate\write\outblocks{\string\thisisblock{#1}{\sectionformat}[#2]}}%
- \def\closeblock
- {\immediate\write\outblocks{}% handig voor \par commando's
- \immediate\write\outblocks{\string\thiswasblock{#1}}%
- \endgroup
- \closetmpblock
- \doafterblock{#1}{#2}%
- \egroup}%
- \openblock
- \setupcopyblock
- \copyblocklineAB}
-
-\def\copyblock
- {\let\opentmpblock\empty
- \let\closetmpblock\empty
- \let\writetmpblock\gobbleoneargument
- \saveblock}
-
-\def\loadoneblock
- {\edef\blockfilename{\TEXbufferfile{\f!utilityfilename\the\blocklevel}}%
- \setblocklevel+%
- \readjobfile\blockfilename\donothing\donothing
- \setblocklevel-}%
-
-\def\dodefineblock[#1]%
- {\bypassblock[#1]%
- \keepblocks[#1]%
- \setupblock
- [#1]
- [\c!before=\blank,
- \c!after=\blank,
- \c!inner=,
- \c!style=,
- \c!file=\jobname]}
-
-% \def\defineblock
-% {\dosingleargumentwithset\dodefineblock}
-
-\def\defineblock
- {\dosingleargument\dodefineblock}
-
-\def\dosetupblock[#1][#2]%
- {\getparameters[\??tb#1][#2]}
-
-\def\setupblock
- {\dodoubleargumentwithset\dosetupblock}
-
-\def\bypassblock[#1]%
- {\setvalue{\s!thisisblock#1}##1[##2]{\skipblock{#1}}}
-
-\def\dohideblock[#1][#2][#3]%
- {\doifassignmentelse{#3}
- {\dodohideblock[#1][#2][][#3]}
- {\dodohideblock[#1][#2][#3][]}}
-
-\def\dodohideblock[#1][#2][#3][#4]%
- {\doifelsenothing{#2}
- {\global\blockpermittedfalse
- \edef\blocktitle{#1}}
- {\doifelsenothing{#3}
- {\global\blockpermittedtrue
- \edef\blocktitle{#1}}
- {\doifcommonelse{#2}{#3}
- {\global\blockpermittedfalse
- \edef\blocktitle{#1:#2}}
- {\global\blockpermittedtrue
- \edef\blocktitle{#1:#3}}}}%
- \ifblockpermitted
- \showwarning\m!textblocks5\blocktitle
- \def\next
- {\def\dobeforeblock####1####2%
- {\begingroup}%
- \def\doafterblock####1####2%
- {\endgroup
- \doexecuteloadedblock{#1}{#4}}%
- \saveblock{#1}{#3#4}}%
- \else
- \doifinsetelse{+}{#3}
- {\showwarning\m!textblocks6\blocktitle
- \def\next
- {\def\dobeforeblock####1####2%
- {\begingroup
- \visiblefalse}%
- \def\doafterblock####1####2%
- {{\setbox0\vbox
- {\catcode`\^^M=\@@endofline\relax
- \loadoneblock
- \par}}%
- \endgroup}%
- \saveblock{#1}{#3#4}}}%
- {\showwarning\m!textblocks7\blocktitle
- \def\next
- {\def\dobeforeblock####1####2%
- {\begingroup
- \globaldefs\minusone}%
- \def\doafterblock####1####2%
- {\endgroup}%
- \copyblock{#1}{#3#4}}}%
- \fi
- \next}
-
-\def\dohideblocks[#1][#2]%
- {\def\docommand##1%
- {\setvalue{\e!begin##1}%
- {\bgroup\obeylines\dotripleempty\dohideblock[##1][#2]}}%
- \processcommalist[#1]\docommand}
-
-\def\hideblocks
- {\dodoubleempty\dohideblocks}
-
-\def\doexecuteloadedblock#1#2%
- {\blockpermittedtrue % ?
- \bgroup % before \c!before (think of: \c!before=\startitemize)
- \dosetupblockparameters[#1][#2]% voor 'voor'?
- \getvalue{\??tb#1\c!before}%
- \dostartattributes{\??tb#1}\c!style\c!color\empty
- \visibletrue
- \catcode`\^^M=\@@endofline\relax
- \getvalue{\??tb#1\c!inner}%
- \ignorespaces
- \loadoneblock
- % \par moved
- \dostopattributes
- \getvalue{\??tb#1\c!after}%
- \par
- \egroup}
-
-\def\dokeepblock[#1][#2][#3]%
- {\doifassignmentelse{#3}
- {\dodokeepblock[#1][#2][][#3]}
- {\dodokeepblock[#1][#2][#3][]}}
-
-\def\dodokeepblock[#1][#2][#3][#4]%
- {\doifelsenothing{#2}
- {\global\blockpermittedtrue
- \edef\blocktitle{#1}}
- {\doifcommonelse{#2}{#3}
- {\global\blockpermittedtrue
- \edef\blocktitle{#1:#2}}
- {\doifinsetelse\v!all{#2}
- {\doifelsenothing{#3}
- {\global\blockpermittedtrue
- \edef\blocktitle{#1}}
- {\global\blockpermittedfalse
- \edef\blocktitle{#1:#3}}}
- {\global\blockpermittedfalse
- \doifelsenothing{#3}
- {\edef\blocktitle{#1}}
- {\edef\blocktitle{#1:#3}}}}}%
- \ifblockpermitted
- \showwarning\m!textblocks8\blocktitle
- \def\dobeforeblock##1##2%
- {\begingroup}%
- \def\doafterblock##1##2%
- {\endgroup
- \doexecuteloadedblock{#1}{#4}}%
- \else
- \showwarning\m!textblocks9\blocktitle
- \fi
- \saveblock{#1}{#3#4}}
-
-\def\dokeepblocks[#1][#2]%
- {\def\docommand##1%
- {\setvalue{\e!begin##1}%
- {\bgroup\obeylines\dotripleempty\dokeepblock[##1][#2]}}%
- \processcommalist[#1]\docommand}
-
-\def\keepblocks
- {\dodoubleempty\dokeepblocks}
-
-\newconditional\processblockstatus
-\newconditional\dummyblockstatus
-\newconditional\blockassignmentstatus
-
-\def\dodouseblock#1#2#3#4%
- {\getblockstatus{#2}%
- \ifblockpermitted
- \setfalse\dummyblockstatus
- \doifassignmentelse{#3}
- {\settrue \blockassignmentstatus}
- {\setfalse\blockassignmentstatus}%
- \doifelsenothing{#4}
- {\edef\blocktitle{#1}}
- {\ifconditional\blockassignmentstatus
- \edef\blocktitle{#1}%
- \else
- \doifnotcommon{#3}{#4}
- {\ifconditional\processblockstatus
- \settrue\dummyblockstatus
- \else
- \global\blockpermittedfalse
- \fi}%
- \edef\blocktitle{#1:#3}%
- \fi}%
- \else
- \edef\blocktitle{#1}%
- \fi
- \ifblockpermitted
- \setblocklevel+%
- \ifconditional\blockassignmentstatus \else
- \doifinset{-}{#3}{\settrue\dummyblockstatus}%
- \fi
- \ifconditional\dummyblockstatus
- \showwarning\m!textblocks{10}\blocktitle
- \setvalue{\s!thiswasblock#1}%
- {\removeunwantedspaces
- \par
- \egroup
- \setblocklevel-}%
- \def\next
- {\setbox0\vbox\bgroup
- \ifconditional\blockassignmentstatus
- \dosetupblockparameters[#1][#3]%
- \fi}%
- \else
- \showwarning\m!textblocks{11}\blocktitle
- \setvalue{\s!thiswasblock#1}%
- {\removeunwantedspaces
- % \par moved
- \dostopattributes
- \getvalue{\??tb#1\c!after}%
- \par
- \egroup
- \setblocklevel-}%
- \def\next
- {\bgroup
- \ifconditional\blockassignmentstatus
- \dosetupblockparameters[#1][#3]%
- \fi
- \getvalue{\??tb#1\c!before}%
- \dostartattributes{\??tb#1}\c!style\c!color\empty
- \visibletrue
- \getvalue{\??tb#1\c!inner}%
- \ignorespaces}%
- \fi
- \else
- \def\next
- {\showwarning\m!textblocks{12}\blocktitle
- \skipblock{#1}}%
- \fi
- \next}
-
-\def\douseblock[#1][#2]%
- {\setvalue{\s!thisisblock#1}##1[##2]{\dodouseblock{#1}{##1}{##2}{#2}}}
-
-\def\dodouseblocks[#1][#2]%
- {\def\docommand##1%
- {\douseblock[##1][#2]}%
- \processcommalist[#1]\docommand
- \dogetcommalistelement1\from#1\to\commalistelement
- \doifdefined{\??tb\commalistelement\c!file}
- {\loadallblocks{\getvalue{\??tb\commalistelement\c!file}}}%
- \endgroup}
-
-\def\douseblocks
- {\begingroup
- \doassign[\??bs][\c!criterium=\v!all]%
- \dodoubleempty\dodouseblocks}
-
-\def\useblocks
- {\setfalse\processblockstatus\douseblocks}
-
-\def\processblocks
- {\settrue \processblockstatus\douseblocks}
-
-\def\doselectblocks[#1][#2][#3]%
- {\begingroup
- \doifelsenothing{#3}
- {\getparameters[\??bs][\c!criterium=\v!all,#2]%
- \dodouseblocks[#1][]}
- {\getparameters[\??bs][\c!criterium=\v!all,#3]%
- \dodouseblocks[#1][#2]}}%
-
-\def\selectblocks
- {\dotripleempty\doselectblocks}
-
-\def\beginblock[#1]% % we also check \endblock[..]
- {\getvalue{\e!begin#1}}
-
-\def\forceblocks[#1]%
- {\def\docommand##1%
- {\setvalue{\e!begin##1}%
- {\setblocklevel+\bgroup
- \dodoubleempty\doforceblock[##1]}%
- \setvalue{\e!end##1}%
- {\dostopattributes
- \getvalue{\??tb##1\c!after}%
- \egroup\setblocklevel-}}%
- \processcommalist[#1]\docommand}
-
-\def\doforceblock[#1][#2]%
- {\doifassignmentelse{#2}
- {\settrue \blockassignmentstatus}
- {\setfalse\blockassignmentstatus}%
- \ifconditional\blockassignmentstatus
- \dosetupblockparameters[#1][#2]%
- \fi
- \getvalue{\??tb#1\c!before}%
- \dostartattributes{\??tb#1}\c!style\c!color\empty
- \getvalue{\??tb#1\c!inner}%
- \ignorespaces}
-
-\def\bypassblocks[#1]%
- {\def\docommand##1%
- {\setvalue{\e!begin##1}%
- {\setblocklevel+\bgroup
- \obeylines % here, since we look ahead
- \dodoubleempty\dobypassblock[##1]}%}%
- \setvalue{\e!end##1}%
- {}}%
- \processcommalist[#1]\docommand}
-
-\def\dobypassblock[#1][#2]%
- {\def\closeblock
- {\egroup\setblocklevel-}%
- \checkcopyingblocks
- \obeylines
- \@EA\defconvertedcommand\@EA\endofblockA\@EA{\@EA\string\csname\e!end#1\endcsname}%
- \defconvertedcommand\endofblockB{\string\endblock[#1]} % MULTI LINGUAL MAKEN
- \setupcopyblock
- \skipblocklineAB}
-
-\protect \endinput
diff --git a/Master/texmf-dist/tex/context/base/core-box.tex b/Master/texmf-dist/tex/context/base/core-box.tex
deleted file mode 100644
index dd84fbc1abf..00000000000
--- a/Master/texmf-dist/tex/context/base/core-box.tex
+++ /dev/null
@@ -1,953 +0,0 @@
-%D \module
-%D [ file=core-box,
-%D version=2002.04.12,
-%D title=\CONTEXT\ Core Macros,
-%D subtitle=Boxes,
-%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 / Boxes}
-
-%D This module contains all kind of macros for moving content
-%D around. Many macros here come from other modules, but
-%D depencies made it more clear to isolate them.
-
-% \placeornament
-
-\unprotect
-
-% \definelayer[\v!tekst-2][\c!positie=\v!ja]
-% \definelayer[\v!tekst-1][\c!positie=\v!ja]
-% \definelayer[\v!tekst+1][\c!positie=\v!ja]
-% \definelayer[\v!tekst+2][\c!positie=\v!ja]
-
-% we need to set the size, else we get dimensions depending
-% on the content, which in itsel fis ok, but can lead to loops
-% due to rounding errors (happened in demo-obv)
-
-\definelayer[\v!text-2][\c!position=\v!yes,\c!width=\overlaywidth,\c!height=\overlayheight]
-\definelayer[\v!text-1][\c!position=\v!yes,\c!width=\overlaywidth,\c!height=\overlayheight]
-\definelayer[\v!text+1][\c!position=\v!yes,\c!width=\overlaywidth,\c!height=\overlayheight]
-\definelayer[\v!text+2][\c!position=\v!yes,\c!width=\overlaywidth,\c!height=\overlayheight]
-
-\def\internaltextoverlay#1% will become more generic and installable
- {\startoverlay % i.e. probably an overlay by itself
- {\positionoverlay{\v!text#1}} % see later
- {\composedlayer {\v!text#1}}
- \stopoverlay}
-
-%\def\internaltextoverlay#1%
-% {\hbox to \zeropoint{\positionoverlay{\v!tekst#1}\hss}%
-% \composedlayer{\v!tekst#1}}
-
-% todo: share info, so that tuo will be smaller
-
-\defineoverlay[\v!text-2][\internaltextoverlay{-2}]
-\defineoverlay[\v!text-1][\internaltextoverlay{-1}]
-\defineoverlay[\v!text+1][\internaltextoverlay{+1}]
-\defineoverlay[\v!text+2][\internaltextoverlay{+2}]
-
-% to be documented
-
-\definelayer[anchor]
-
-\def\anchor
- {\dosingleargument\doanchor}
-
-\def\doanchor[#1]%
- {\ifundefined{\??an#1}\@EA\dodoanchor\else\@EA\nonoanchor\fi[#1]}
-
-\def\nonoanchor[#1]%
- {\getvalue{\??an#1}}
-
-\def\dodoanchor[#1]%
- {\dotripleempty\dododoanchor[#1]}
-
-\def\dododoanchor
- {\ifthirdargument
- \expandafter\dodoanchorT
- \else
- \expandafter\dodoanchorS
- \fi}
-
-\def\dodoanchorS[#1][#2][#3]%
- {\dodoanchorT[#1][#2][#2]}
-
-\def\dodoanchorT[#1][#2][#3]%
- {\dowithnextbox
- {\bgroup
- \checktextbackgrounds
- \setbox\scratchbox\null
- \wd\scratchbox\nextboxwd
- \ht\scratchbox\nextboxht
- \dp\scratchbox\nextboxdp
- \setlayer
- [anchor]
- [\c!width=\wd\scratchbox,
- \c!height=\ht\scratchbox,
- \c!offset=\!!zeropoint,
- #2,#3]
- {\setlayer[#1]{\flushnextbox}}%
- \framed
- [#2,
- \c!background=anchor,
- \c!offset=\v!overlay,
- \c!frame=\v!off,
- #3]
- {\box\scratchbox}%
- \egroup}%
- \vbox}
-
-\def\defineanchor
- {\doquadrupleempty\dodefineanchor}
-
-\def\dodefineanchor[#1][#2][#3][#4]%
- {\setvalue{\??an#1}{\dodefinedanchor[#2][#3][#4]}}
-
-\def\dodefinedanchor[#1][#2][#3]%
- {\def\docommand[##1][##2]%
- {\ifsecondargument
- \def\next{\dodoanchorT[#1][#2,##1][#3,##2]}%
- \else\iffirstargument
- \def\next{\dodoanchorT[#1][#2,##1][#2,##1]}%
- \else
- \def\next{\dodoanchorT[#1][#2][#3]}%
- \fi\fi
- \next}%
- \dodoubleempty\docommand}
-
-\def\@@collectorbox{@@collectorbox}
-
-\def\definecollector
- {\dodoubleargument\dodefinecollector}
-
-\def\dodefinecollector[#1][#2]%
- {\ifundefined{\@@collectorbox#1}%
- \expandafter\newbox\csname\@@collectorbox#1\endcsname
- \fi
- \resetcollector[#1]%
- \setupcollector
- [#1]
- [\c!state=\v!start,
- \c!x=\!!zeropoint,\c!y=\!!zeropoint,
- \c!offset=\!!zeropoint,\c!rotation=, % geen 0 !
- \c!hoffset=\!!zeropoint,\c!voffset=\!!zeropoint,
- \c!location=rb,\c!corner=,#2]}
-
-\def\setupcollector
- {\dodoubleargument\dosetupcollector}
-
-\def\dosetupcollector[#1][#2]%
- {\def\docommand##1{\getparameters[\??cb##1][#2]}%
- \processcommalist[#1]\docommand}
-
-\def\setcollector
- {\dodoubleargument\dosetcollector}
-
-\def\dosetcollector[#1][#2]%
- {\bgroup
- \forgetall
- \dontcomplain
- \dowithnextbox
- {\ifundefined{\@@collectorbox#1}%
- \writestatus{collector}{unknown layer #1}%
- \else
- \dodosetcollector[#1][#2]%
- \fi
- \egroup}
- \hbox}
-
-\def\collectorparameter#1{\csname\??cb\currentcollector#1\endcsname}
-
-\def\dodosetcollector[#1][#2]% todo: keep reference point
- {\def\currentcollector{#1}%
- \mathchardef\collectorbox\csname\@@collectorbox#1\endcsname
- \getparameters[\??cb#1][#2]%
- \@@layerxsiz\wd\collectorbox
- \@@layerysiz\ht\collectorbox
- \doifvaluesomething{\??cb#1\c!rotation}
- {\setbox\nextbox\hbox
- {\rotate
- [\c!location=\v!high,
- \c!rotation=\collectorparameter\c!rotation]
- {\flushnextbox}}}%
- \advance\@@layerysiz\dp\collectorbox
- \@@layerxpos\collectorparameter\c!x
- \advance\@@layerxpos\collectorparameter\c!hoffset
- \@@layerypos\collectorparameter\c!y
- \advance\@@layerypos\collectorparameter\c!voffset
- \doifelse\v!middle{\collectorparameter\c!corner}
- {\ifdim\@@layerxsiz>\zeropoint
- \advance\@@layerxpos.5\@@layerxsiz
- \fi
- \ifdim\@@layerysiz>\zeropoint
- \advance\@@layerypos.5\@@layerysiz
- \fi}%
- {\ExpandBothAfter\doifinset\v!bottom{\collectorparameter\c!corner}
- {\ifdim\@@layerysiz>\zeropoint
- \advance\@@layerypos-\@@layerysiz
- \@@layerypos-\@@layerypos
- \fi}%
- \ExpandBothAfter\doifinset\v!right{\collectorparameter\c!corner}
- {\ifdim\@@layerxsiz>\zeropoint
- \advance\@@layerxpos-\@@layerxsiz
- \@@layerxpos-\@@layerxpos
- \fi}}%
- \setbox\nextbox\hbox
- {\alignedbox[\collectorparameter\c!location]\vbox{\flushnextbox}}%
- \boxmaxdepth\zeropoint % really needed, nice example
- \global\advance\boxhdisplacement\@@layerxpos
- \ifdim\boxhdisplacement<\zeropoint
- \global\setbox\collectorbox\hbox
- {\hskip-\boxhdisplacement
- \box\collectorbox}%
- \fi
- \global\advance\boxvdisplacement\@@layerypos
- \ifdim\boxvdisplacement<\zeropoint
- \global\setbox\collectorbox\hbox
- {\lower-\boxvdisplacement
- \box\collectorbox}%
- \fi
- \@@layerxsiz\wd\collectorbox
- \@@layerysiz\ht\collectorbox
- \advance\@@layerysiz\dp\collectorbox
- \global\setbox\collectorbox\hbox
- {\box\collectorbox
- \hskip-\@@layerxsiz
- \hskip\@@layerxpos\relax
- \ifdim\boxhdisplacement<\zeropoint
- \hskip-\boxhdisplacement
- \fi
- \lower\@@layerypos\hbox
- {\ifdim\boxvdisplacement<\zeropoint
- \lower-\boxvdisplacement\flushnextbox
- \else
- \flushnextbox
- \fi}}%
- % combine height and depth into depth only (later flushed as height)
- \global\setbox\collectorbox\hbox
- {\lower\ht\collectorbox\box\collectorbox}%
- % just to be sure
- \ifdim\wd\collectorbox<\@@layerxsiz
- \global\wd\collectorbox\@@layerxsiz
- \fi}
-
-\def\flushcollector[#1]%
- {\ifundefined{\@@collectorbox#1}%
- \writestatus{collector}{unknown collector #1}%
- \else
- \doifnotvalue{\??cb#1\c!state}\v!stop
- {\vbox
- {\hbox
- {\doifelsevalue{\??cb#1\c!state}\v!repeat
- {\let\next\copy}{\let\next\box}%
- \raise\dp\csname\@@collectorbox#1\endcsname
- \next\csname\@@collectorbox#1\endcsname}}}%
- \fi}
-
-\def\composedcollector#1{\flushcollector[#1]}
-
-\def\resetcollector[#1]%
- {\ifundefined{\@@collectorbox#1}\else
- \global\setbox\csname\@@collectorbox#1\endcsname\emptybox
- \fi}
-
-\def\adaptcollector
- {\dodoubleargument\doadaptcollector}
-
-\def\doadaptcollector[#1][#2]%
- {\bgroup
- \def\currentcollector{#1}%
- \mathchardef\collectorbox\csname\@@collectorbox#1\endcsname
- \getparameters
- [\??cb#1][\c!voffset=\zeropoint,\c!hoffset=\zeropoint,#2]%
- \scratchdimen\wd\collectorbox
- \advance\scratchdimen\collectorparameter\c!hoffset
- \global\wd\collectorbox\scratchdimen
- \scratchdimen\ht\collectorbox
- \advance\scratchdimen\collectorparameter\c!voffset
- \global\ht\collectorbox\scratchdimen
- \egroup}
-
-
-%\definecollector[test]
-%\setcollector[test]
-% [location=rb]
-% {\externalfigure[koe][frame=on,width=3cm]}
-%\setcollector[test]
-% [corner={right,bottom},location={left,top}]
-% {\framed{gans}}
-%\composedcollector{test}
-
-\definecollector
- [caption]
-
-\def\collectedtext
- {\dodoubleempty\docollectedtext}
-
-\def\docollectedtext[#1][#2]#3%
- {\bgroup
- \dowithnextbox
- {\setcollector
- [caption]
- {\flushnextbox}%
- \setcollector
- [caption][#1]
- {\getparameters[\??du][#2]%
- \dosetfontattribute\??du\c!style\setupinterlinespace
- \framed % watch the special setting of kader/overlay
- [\c!frame=\v!overlay,#2]
- {\doattributes\??du\c!style\c!color{#3}}}%
- \composedcollector{caption}%
- \egroup}%
- \hbox}
-
-% \collectedtext
-% [corner={right,bottom},location={left,top}]
-% [background=color,backgroundcolor=white,offset=0pt]
-% {gans}
-% {\externalfigure[koe][width=3cm]}
-%
-% \collectedtext
-% [rotation=90,corner={right,bottom},location={right,top}]
-% [frame=on,offset=0pt]
-% {gans}
-% {\externalfigure[koe][width=3cm]}
-%
-% \collectedtext
-% [rotation=90,corner={left,bottom},location={left,top}]
-% [frame=on,offset=0pt]
-% {gans}
-% {\externalfigure[koe][width=3cm]}
-
-\definelayer
- [caption]
-
-\def\layeredtext
- {\dodoubleempty\dolayeredtext}
-
-\def\dolayeredtext[#1][#2]#3%
- {\bgroup
- \dowithnextbox
- {\!!widtha \nextboxwd
- \!!heighta\nextboxht
- \bgroup % preserve \nextbox
- \setuplayer
- [caption]
- [\c!width=\!!widtha,\c!height=\!!heighta]%
- \setlayer
- [caption]
- [#1]
- {\getparameters[\??du][#2]%
- \dosetfontattribute\??du\c!style\setupinterlinespace
- \framed
- [\c!frame=\v!overlay,,#2]
- {\doattributes\??du\c!style\c!color{#3}}}%
- \egroup
- \framed
- [\c!offset=\v!overlay,
- \c!frame=\v!off,
- \c!background={\v!foreground,caption},
- \c!width=\!!widtha,
- \c!height=\!!heighta]
- {\flushnextbox}%
- \egroup}%
- \hbox}
-
-% \layeredtext
-% [corner={right,bottom},location={left,top}]
-% [background=color,backgroundcolor=white,offset=0pt]
-% {gans}
-% {\externalfigure[koe][width=3cm]}
-%
-% \layeredtext
-% [rotation=90,corner={right,bottom},location={right,top}]
-% [frame=on,offset=0pt]
-% {gans}
-% {\externalfigure[koe][width=3cm]}
-%
-% \layeredtext
-% [rotation=90,corner={left,bottom},location={left,top}]
-% [frame=on,offset=0pt]
-% {gans}
-% {\externalfigure[koe][width=3cm]}
-
-\def\ornamenttext
- {\dodoubleempty\doornamenttext}
-
-\def\doornamenttext[#1][#2]%
- {\bgroup
- \doifassignmentelse{#1}
- {\getparameters[\s!dummy][\c!alternative=\v!a,#1]%
- \doifelse\dummyalternative\v!a
- {\egroup\collectedtext}%
- {\egroup\layeredtext }%
- [#1][#2]}%
- {\egroup\getvalue{#1}}}
-
-\def\defineornament
- {\dotripleempty\dodefineornament}
-
-\def\dodefineornament[#1][#2][#3]%
- {\setvalue{#1}{\doornamenttext[#2][#3]}}
-
-% \defineornament
-% [affiliation]
-% [rotation=90,corner={right,bottom},location={right,top},
-% hoffset=-.25ex]
-% [frame=on,background=color,backgroundcolor=red,offset=0pt]
-%
-% \ruledhbox{\affiliation{gans}{\externalfigure[koe][width=3cm]}}
-%
-% \defineornament
-% [affiliation]
-% [rotation=90,corner={right,bottom},location={right,top},
-% hoffset=-.25ex,alternative=b]
-% [frame=on,background=color,backgroundcolor=red,offset=0pt]
-%
-% \ruledhbox{\affiliation{gans}{\externalfigure[koe][width=3cm]}}
-%
-% \defineornament
-% [affiliation]
-% [rotation=90,corner={right,bottom},location={left,top},
-% hoffset=.25ex,voffset=.25ex,alternative=a]
-% [background=color,style=\ss\tfxx,backgroundcolor=white,offset=0pt]
-%
-% \affiliation{photo}{\externalfigure[molen][width=3cm]}
-%
-% \defineornament
-% [affiliation]
-% [rotation=90,corner={right,bottom},location={left,top},
-% hoffset=.25ex,voffset=.25ex,alternative=b]
-% [background=color,style=\ss\tfxx,backgroundcolor=white,offset=0pt]
-%
-% \affiliation{drawing}{\externalfigure[hakker][width=3cm]}
-
-% pas op: aanpassen aan nieuwe layer hoek ankers en columnset
-
-\newcount\nofbleeds % per pag
-
-\def\setupbleeding
- {\dodoubleempty\getparameters[\??bg]}
-
-\setupbleeding
- [\c!location=l,
- \c!stretch=\v!yes,
- \c!width=3cm,
- \c!height=3cm,
- \c!offset=2mm,
- \c!page=\v!no,
- \c!voffset=\@@bgoffset,
- \c!hoffset=\@@bgoffset]
-
-\def\bleed
- {\dosingleempty\dobleed}
-
-
-\def\bleedwidth {\the\hsize}%
-\def\bleedheight{\the\vsize}%
-
-\def\dobleed[#1]#2%
- {\hbox\bgroup
- \xdef\bleedwidth {\the\hsize}%
- \xdef\bleedheight{\the\vsize}%
- \global\advance\nofbleeds\plusone
- \getparameters[\??bg][#1]%
- \!!doneafalse % left
- \!!donebfalse % right
- \!!donecfalse % top
- \!!donedfalse % bottom
- % replace this part ! todo: default location
- \processaction
- [\@@bglocation]
- [ t=>\!!donectrue\let\@@bghoffset\!!zeropoint,
- b=>\!!donedtrue\let\@@bghoffset\!!zeropoint,
- l=>\!!doneatrue\let\@@bgvoffset\!!zeropoint,
- r=>\!!donebtrue\let\@@bgvoffset\!!zeropoint,
- bl=>\!!doneatrue\!!donedtrue,
- lb=>\!!doneatrue\!!donedtrue,
- br=>\!!donebtrue\!!donedtrue,
- rb=>\!!donebtrue\!!donedtrue,
- tl=>\!!doneatrue\!!donectrue,
- lt=>\!!doneatrue\!!donectrue,
- tr=>\!!donebtrue\!!donectrue,
- rt=>\!!donebtrue\!!donectrue]%
- \doifelse\@@bgstretch\v!yes\donetrue\donefalse
- \scratchdimen\@@bgwidth
- \ifdone
- \if!!donea
- \advance\scratchdimen\MPx{\??bg:\number\nofbleeds}%
- \else\if!!doneb
- \scratchdimen\paperwidth
- \advance\scratchdimen-\MPx{\??bg:\number\nofbleeds}%
- \fi\fi
- \fi
- \advance\scratchdimen\@@bghoffset
- \xdef\bleedwidth{\the\scratchdimen}%
- \scratchdimen\@@bgheight
- \ifdone
- \if!!donec
- \scratchdimen\paperheight
- \advance\scratchdimen-\MPy{\??bg:\number\nofbleeds}%
- \else\if!!doned
- \advance\scratchdimen\MPy{\??bg:\number\nofbleeds}%
- \fi\fi
- \fi
- \advance\scratchdimen\@@bgvoffset
- \xdef\bleedheight{\the\scratchdimen}%
- \hsize\bleedwidth
- \vsize\bleedheight
- \setbox\scratchbox\hbox{#2}%
- \doif\@@bgpage\v!yes
- {\setbox\scratchbox\topskippedbox{\box\scratchbox}}%
- \setbox\scratchbox\hbox to \@@bgwidth
- {\if!!donea\hss\fi\box\scratchbox\if!!doneb\hss\fi}%
- \if!!doned
- \setbox\scratchbox\hbox
- {\lower\bleedheight\hbox{\raise\@@bgheight\box\scratchbox}}%
- \fi
- \wd\scratchbox\@@bgwidth
- \ht\scratchbox\@@bgheight
- \dp\scratchbox\zeropoint
- \ifdone
- \hpos{\??bg:\number\nofbleeds}{\box\scratchbox}%
- \else
- \box\scratchbox
- \fi
- \egroup}
-
-\setupbleeding[\c!stretch=\v!yes]
-
-\defineexternalfigure[bleed][\c!width=\bleedwidth,\c!height=\bleedheight]
-
-% \placefigure[left]{none}
-% {\bleed[width=5cm,height=3cm,location=lt]{\externalfigure[koe][bleed]}}
-%
-% \input tufte
-%
-% \placefigure[left]{none}
-% {\bleed[width=5cm,height=3cm,location=l]{\externalfigure[koe][bleed]}}
-%
-% \input tufte
-%
-% \placefigure[right]{none}
-% {\bleed[width=5cm,height=3cm,location=r]{\externalfigure[koe][bleed]}}
-%
-% \input tufte
-%
-% \placesomefloat[right]{none}
-% {\bleed[width=5cm,height=3cm,location=rb]{\externalfigure[koe][bleed]}}
-%
-% \input tufte
-%
-% \placefigure
-% [top,none]
-% {} % no caption
-% {\bleed
-% [hoffset=-\backspace,
-% voffset=3mm,
-% width=0cm,
-% height=6\lineheight,
-% page=yes, % correct for topskip
-% location=lt]
-% {\externalfigure[koe][bleed][frame=on]}}
-
-% \setlayerframed[layer id][layer settings][framed setting]{data}
-% \setlayerframed[layer id][combined settings]{data}
-
-\def\setlayerframed
- {\dotripleempty\dosetlayerframed}
-
-\def\dosetlayerframed
- {\ifthirdargument
- \expandafter\dosetlayerframedT
- \else
- \expandafter\dosetlayerframedS
- \fi}
-
-\def\dosetlayerframedT[#1][#2][#3]%
- {\dowithnextbox{\setlayer[#1][#2]{\flushnextbox}}%
- \hbox\framed[#3]}
-
-\def\dosetlayerframedS[#1][#2][#3]%
- {\dowithnextbox
- {\setlayer
- [#1]
- [\c!width=\nextboxwd,\c!height=\nextboxht,
- \c!offset=\!!zeropoint,#2]
- {\flushnextbox}}%
- \hbox\framed[\c!location=\v!normal,#2]}
-
-\def\setlayertext
- {\dotripleempty\dosetlayertext}
-
-\def\dosetlayertext[#1][#2][#3]%
- {\bgroup
- \getparameters
- [\??lx]
- [\c!align=,
- \c!width=\hsize,
- \c!color=,
- \c!style=,
- #3]%
- \dowithnextboxcontent
- {\forgetall
- \hsize\@@lxwidth
- \expanded{\setupalign[\@@lxalign]}%
- \dosetfontattribute\??lx\c!style}
- {\setlayer[#1][#2]{\strut\color[\@@lxcolor]{\flushnextbox}}%
- \egroup}%
- \vtop}
-
-% \setupbackgrounds
-% [page]
-% [background=pagefigures]
-%
-% \definelayer
-% [pagefigures]
-% [x=-2mm,
-% y=-2mm,
-% width=\paperwidth,
-% height=\paperheight]
-%
-% \definelayerpreset [lefttop] [corner={left,top},location={right,bottom}]
-% \definelayerpreset [righttop] [corner={right,top},location={left,bottom}]
-% \definelayerpreset [leftbottom] [corner={left,bottom},location={right,top}]
-% \definelayerpreset [rightbottom] [corner={right,bottom},location={left,top}]
-% \definelayerpreset [middle] [corner=middle,location=middle]
-%
-% \setlayer[pagefigures][preset=lefttop]
-% \setlayer[pagefigures][preset=righttop]
-% \setlayer[pagefigures][preset=leftbottom]
-% \setlayer[pagefigures][preset=rightbottom]
-
-\definelayerpreset
- [\v!left\v!top]
- [\c!corner={\v!left,\v!top},\c!location={\v!right,\v!bottom}]
-
-\definelayerpreset
- [\v!right\v!top]
- [\c!corner={\v!right,\v!top},\c!location={\v!left,\v!bottom}]
-
-\definelayerpreset
- [\v!left\v!bottom]
- [\c!corner={\v!left,\v!bottom},\c!location={\v!right,\v!top}]
-
-\definelayerpreset
- [\v!right\v!bottom]
- [\c!corner={\v!right,\v!bottom},\c!location={\v!left,\v!top}]
-
-\definelayerpreset
- [\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!bottom]
-% [\c!location=\v!top,\c!hoffset=.5\layerwidth,\c!voffset=\layerheight]
-
-% \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!top]
- [\c!location=\v!bottom,\c!corner=\v!top,\c!dx=.5\layerwidth]
-
-\definelayerpreset
- [\v!middle\v!bottom]
- [\c!location=\v!top,\c!corner=\v!bottom,\c!dx=.5\layerwidth]
-
-\definelayerpreset
- [\v!middle\v!left]
- [\c!location=\v!right,\c!corner=\v!left,\c!dy=.5\layerheight]
-
-\definelayerpreset
- [\v!middle\v!right]
- [\c!location=\v!left,\c!corner=\v!right,\c!dy=.5\layerheight]
-
-\def\alignedbox
- {\dodoubleempty\doalignedbox[]}
-
-% \def\doalignedbox[#1][#2]%
-% {\bgroup
-% %\let\iftraceboxplacement\iftracelayers % ugly
-% \dowithnextbox
-% {\let\next\middlebox
-% \processaction
-% [#2]
-% [ t=>\let\next\topbox , b=>\let\next\bottombox ,
-% l=>\let\next\leftbox , r=>\let\next\rightbox ,
-% bl=>\let\next\bottomleftbox,br=>\let\next\bottomrightbox,
-% tl=>\let\next\topleftbox ,tr=>\let\next\toprightbox ,
-% lt=>\let\next\lefttopbox ,lb=>\let\next\leftbottombox ,
-% rt=>\let\next\righttopbox ,rb=>\let\next\rightbottombox]%
-% \next{\flushnextbox}%
-% \egroup}#1}
-
-\def\doalignedbox[#1][#2]%
- {\bgroup
- %\let\iftraceboxplacement\iftracelayers % ugly
- \dowithnextbox
- {\serializecommalist[#2]%
- \executeifdefined{\??ab\??ab\serializedcommalist}\middlebox{\flushnextbox}%
- \egroup}#1}
-
-\setvalue{\??ab\??ab }{\middlebox}
-\setvalue{\??ab\??ab\v!middle }{\middlebox}
-\setvalue{\??ab\??ab\v!left }{\leftbox }
-\setvalue{\??ab\??ab\v!right }{\rightbox }
-\setvalue{\??ab\??ab\v!bottom }{\bottombox}
-\setvalue{\??ab\??ab\v!top }{\topbox }
-
-\setvalue{\??ab\??ab\v!middle\v!middle}{\middlebox}
-\setvalue{\??ab\??ab\v!left \v!top }{\lefttopbox}
-\setvalue{\??ab\??ab\v!left \v!bottom}{\leftbottombox}
-\setvalue{\??ab\??ab\v!right \v!top }{\righttopbox}
-\setvalue{\??ab\??ab\v!right \v!bottom}{\rightbottombox}
-\setvalue{\??ab\??ab\v!top \v!left }{\topleftbox}
-\setvalue{\??ab\??ab\v!bottom\v!left }{\bottomleftbox}
-\setvalue{\??ab\??ab\v!top \v!right }{\toprightbox}
-\setvalue{\??ab\??ab\v!bottom\v!right }{\bottomrightbox}
-
-\setvalue{\??ab\??ab c}{\middlebox}
-\setvalue{\??ab\??ab l}{\leftbox}
-\setvalue{\??ab\??ab r}{\rightbox}
-\setvalue{\??ab\??ab b}{\bottombox}
-\setvalue{\??ab\??ab t}{\topbox}
-
-\setvalue{\??ab\??ab lt}{\lefttopbox}
-\setvalue{\??ab\??ab lb}{\leftbottombox}
-\setvalue{\??ab\??ab rt}{\righttopbox}
-\setvalue{\??ab\??ab rb}{\rightbottombox}
-\setvalue{\??ab\??ab tl}{\topleftbox}
-\setvalue{\??ab\??ab bl}{\bottomleftbox}
-\setvalue{\??ab\??ab tr}{\toprightbox}
-\setvalue{\??ab\??ab br}{\bottomrightbox}
-
-\setvalue{\??ab\??ab m}{\middlebox}
-
-% The next ones were desparately needed by Vit Zyka (see
-% \type {supp-box} for definitions).
-
-\setvalue{\??ab\??ab g}{\baselinemiddlebox}
-\setvalue{\??ab\??ab gl}{\baselineleftbox}
-\setvalue{\??ab\??ab gc}{\baselinemiddlebox}
-\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!middle}{\baselinemiddlebox}
-\setvalue{\??ab\??ab \v!line\v!right }{\baselinerightbox}
-
-\def\offsetbox
- {\dodoubleempty\dooffsetbox[]}
-
-% left/right/top/bottomoffset -> dimensions change
-% x/y | method=fixed -> dimensions don't change
-
-\def\dooffsetbox[#1][#2]%
- {\bgroup
- \dowithnextbox
- {\getparameters[\??ox]
- [\c!x=\zeropoint,
- \c!y=\zeropoint,
- \c!width=\nextboxwd,
- \c!height=\nextboxht,
- \c!depth=\nextboxdp,
- \c!location=,
- \c!leftoffset=\zeropoint,
- \c!rightoffset=\zeropoint,
- \c!topoffset=\zeropoint,
- \c!bottomoffset=\zeropoint,
- \c!method=,
- #2]%
- \donefalse
- \ifdim\@@oxleftoffset =\zeropoint\else\donetrue\fi
- \ifdim\@@oxrightoffset=\zeropoint\else\donetrue\fi
- \ifdim\@@oxtopoffset =\zeropoint\else\donetrue\fi
- \ifdim\@@oxbottomoffset =\zeropoint\else\donetrue\fi
- \ifdone
- \doif\@@oxmethod\v!fixed % new
- {\ifdim\@@oxleftoffset=\zeropoint
- \ifdim\@@oxrightoffset=\zeropoint \else
- \scratchdimen-\@@oxrightoffset
- \edef\@@oxx{\the\scratchdimen}%
- \let\@@oxrightoffset\zeropoint
- \fi
- \else
- \let\@@oxx\@@oxleftoffset
- \let\@@oxleftoffset\zeropoint
- \fi
- \ifdim\@@oxtopoffset=\zeropoint
- \ifdim\@@oxbottomoffset=\zeropoint \else
- \scratchdimen-\@@oxbottomoffset
- \edef\@@oxy{\the\scratchdimen}%
- \let\@@oxbottomoffset\zeropoint
- \fi
- \else
- \let\@@oxy\@@oxtopoffset
- \let\@@oxtopoffset\zeropoint
- \fi
- \donefalse}%
- \fi
- \ifdone
- \setbox\nextbox\vbox
- {\forgetall\offinterlineskip
- \vskip\@@oxtopoffset
- \hbox
- {\hskip\@@oxleftoffset
- \flushnextbox
- \hskip\@@oxrightoffset}%
- \vskip\@@oxbottomoffset}%
- \scratchdimen\nextboxht
- \advance\scratchdimen\nextboxdp
- \nextboxht\scratchdimen
- \nextboxdp\zeropoint
- \fi
- \freezedimenmacro\@@oxwidth
- \freezedimenmacro\@@oxheight
- \freezedimenmacro\@@oxdepth
- \setbox\nextbox\hbox
- {\hskip\@@oxx\lower\@@oxy\hbox
- {\doifelsenothing\@@oxlocation
- {\flushnextbox}
- {\alignedbox[\@@oxlocation]\hbox{\flushnextbox}}}}%
- \nextboxwd\@@oxwidth
- \nextboxht\@@oxheight
- \nextboxdp\@@oxdepth
- \flushnextbox
- \egroup}#1}
-
-% \useMPlibrary[pre] \setupbackgrounds[page][background=pagegrid]
-%
-% \placefigure[left,none]{}{\offset[leftoffset=1cm]{\externalfigure[koe][breedte=3cm]}}
-% \input tufte
-% \placefigure[left,none]{}{\offset[rightoffset=1cm]{\externalfigure[koe][breedte=3cm]}}
-% \input tufte
-% \placefigure[left,none]{}{\offset[topoffset=1cm]{\externalfigure[koe][breedte=3cm]}}
-% \input tufte
-% \placefigure[left,none]{}{\offset[bottomoffset=1cm]{\externalfigure[koe][breedte=3cm]}}
-% \input tufte
-
-\def\offset {\dodoubleempty\dooffsetbox [\hbox]} % yes or no
-\def\aligned{\dosingleempty\doalignedbox[\hbox]} % yes or no
-
-%\ruledhbox{\offsetbox[x=-1cm,y=-1cm,location=c]
-% {\framed[width=4cm,height=4cm]{x}}}
-
-\def\dotabbed#1#2#3#4%
- {\dontleavehmode
- \bgroup
- \setbox\scratchbox\hbox{#3}%
- \hbox to \wd\scratchbox{#1#4#2}%
- \egroup}
-
-\def\ltabbed{\dotabbed\relax\hss}
-\def\rtabbed{\dotabbed\hss \relax}
-\def\ctabbed{\dotabbed\hss \hss} \let\mtabbed\ctabbed
-
-% \ltabbed{\romeins{3}}{\romeins{1}} test \endgraf
-% \ltabbed{\romeins{3}}{\romeins{2}} test \endgraf
-% \ltabbed{\romeins{3}}{\romeins{3}} test \endgraf
-%
-% \rtabbed{\romeins{3}}{\romeins{1}} test \endgraf
-% \rtabbed{\romeins{3}}{\romeins{2}} test \endgraf
-% \rtabbed{\romeins{3}}{\romeins{3}} test \endgraf
-%
-% \ctabbed{\romeins{3}}{\romeins{1}} test \endgraf
-% \ctabbed{\romeins{3}}{\romeins{2}} test \endgraf
-% \ctabbed{\romeins{3}}{\romeins{3}} test \endgraf
-
-% alternative, if done, then other name
-%
-% \def\dotabbed#1#2#3#4%
-% {\dontleavehmode
-% \bgroup
-% \scratchdimen\zeropoint
-% \def\docommand##1%
-% {\setbox\scratchbox\hbox{##1}%
-% \ifdim\wd\scratchbox>\scratchdimen
-% \scratchdimen\wd\scratchbox
-% \fi}%
-% \processcommalist[#3]\docommand
-% \hbox to \scratchdimen{#1#4#2}%
-% \egroup}
-%
-% \def\ltabbed{\dotabbed\relax\hss}
-% \def\rtabbed{\dotabbed\hss \relax}
-% \def\ctabbed{\dotabbed\hss \hss} \let\mtabbed\ctabbed
-%
-% \ltabbed{\romeins{10},\romeins{2000},\romeins{15}}{\romeins{10}} test \endgraf
-% \ltabbed{\romeins{10},\romeins{2000},\romeins{15}}{\romeins{15}} test \endgraf
-% \ltabbed{\romeins{10},\romeins{2000},\romeins{15}}{\romeins{2000}} test \endgraf
-%
-% \rtabbed{\romeins{10},\romeins{2000},\romeins{15}}{\romeins{10}} test \endgraf
-% \rtabbed{\romeins{10},\romeins{2000},\romeins{15}}{\romeins{15}} test \endgraf
-% \rtabbed{\romeins{10},\romeins{2000},\romeins{15}}{\romeins{2000}} test \endgraf
-%
-% \ctabbed{\romeins{10},\romeins{2000},\romeins{15}}{\romeins{10}} test \endgraf
-% \ctabbed{\romeins{10},\romeins{2000},\romeins{15}}{\romeins{15}} test \endgraf
-% \ctabbed{\romeins{10},\romeins{2000},\romeins{15}}{\romeins{2000}} test \endgraf
-
-% to be documented
-
-\def\phantombox[#1]%
- {\hbox\bgroup
- \getparameters
- [\??ol]
- [\c!width=\zeropoint,%
- \c!height=\zeropoint,%
- \c!depth=\zeropoint,#1]%
- \setbox\scratchbox\null
- \wd\scratchbox\@@olwidth
- \ht\scratchbox\@@olheight
- \dp\scratchbox\@@oldepth
- \box\scratchbox
- \egroup}
-
-% \backgroundimage{1}{\hsize}{\vsize}{\externalfigure[cow][\c!width=3cm]}
-
-\def\backgroundimage#1#2#3% repeat hsize vsize
- {\bgroup
- \dowithnextbox
- {\ifcase#1\relax
- % just one
- \else
- \scratchdimen#2\divide\scratchdimen\nextboxwd\count0\scratchdimen\advance\count0\plusone
- \scratchdimen#3\divide\scratchdimen\nextboxht\count2\scratchdimen\advance\count2\plusone
- % to be considered, probably methods
- \ifcase#1\or % x and y
- \setbox\nextbox\hbox{\dorecurse{\count0}{\copy\nextbox}}%
- \setbox\nextbox\vbox{\dorecurse{\count2}{\copy\nextbox\endgraf}}%
- \or % x
- \setbox\nextbox\hbox{\dorecurse{\count0}{\copy\nextbox}}%
- \or % y
- \setbox\nextbox\vbox{\dorecurse{\count2}{\copy\nextbox\endgraf}}%
- \fi
- \fi
- \ifdim\nextboxwd>#2\relax
- \setbox\nextbox\hbox to #2{\hss\flushnextbox\hss}%
- \setbox\scratchbox\hbox{\expanded{\clip[\c!width=#2,\c!height=\the\nextboxht]{\box\scratchbox}}}%
- \fi
- \ifdim\nextboxht>#3\relax
- \setbox\nextbox\vbox to #3{\vss\flushnextbox\vss}%
- \setbox\nextbox\hbox{\expanded{\clip[\c!width=\the\nextboxwd,\c!height=#3]{\flushnextbox}}}%
- \fi
- \flushnextbox
- \egroup}%
- \hbox}
-
-\protect \endinput
diff --git a/Master/texmf-dist/tex/context/base/core-con.lua b/Master/texmf-dist/tex/context/base/core-con.lua
index e13f68456b4..dca1c7d10cc 100644
--- a/Master/texmf-dist/tex/context/base/core-con.lua
+++ b/Master/texmf-dist/tex/context/base/core-con.lua
@@ -1,6 +1,6 @@
-if not modules then modules = { } end modules ['char-con'] = {
+if not modules then modules = { } end modules ['core-con'] = {
version = 1.001,
- comment = "companion to core-con.tex",
+ comment = "companion to core-con.mkiv",
author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
copyright = "PRAGMA ADE / ConTeXt Development Team",
license = "see context related readme files"
@@ -16,7 +16,7 @@ slower but look nicer this way.</p>
local utf = unicode.utf8
-local floor, mod, date, time, concat = math.floor, math.mod, os.date, os.time, table.concat
+local floor, date, time, concat = math.floor, os.date, os.time, table.concat
local lower, format, rep = string.lower, string.format, string.rep
local texsprint, utfchar = tex.sprint, utf.char
local tonumber, tostring = tonumber, tostring
@@ -147,42 +147,64 @@ converters.chr = chr
converters.chrs = chrs
converters.maxchrs = maxchrs
-local function do_alphabetic(n,max,chr)
- if n > max then
- do_alphabetic(floor((n-1)/max),max,chr)
- n = (n-1)%max+1
- end
- characters.flush(chr(n))
-end
-
--~ more efficient but needs testing
--~
--~ local escapes = utffilters.private.escapes
--~
---~ local function do_alphabetic(n,max,chr)
+--~ local function do_alphabetic(n,mapping,chr)
+--~ local max = #mapping
--~ if n > max then
--~ do_alphabetic(floor((n-1)/max),max,chr)
--~ n = (n-1)%max+1
--~ end
---~ n = chr(n)
+--~ n = chr(n,mapping)
--~ texsprint(ctxcatcodes,escapes[n] or utfchar(n))
--~ end
--~ local lccodes, uccodes = characters.lccode, characters.uccode
-local function lowercased(n) return characters.lccode(code[n] or fallback) end
-local function uppercased(n) return characters.uccode(code[n] or fallback) end
+--~ local function do_alphabetic(n,mapping,chr)
+--~ local max = #mapping
+--~ if n > max then
+--~ do_alphabetic(floor((n-1)/max),mapping,chr)
+--~ n = (n-1)%max+1
+--~ end
+--~ characters.flush(chr(n,mapping))
+--~ end
+--~
+--~ local function lowercased(n,mapping) return characters.lccode(mapping[n] or fallback) end
+--~ local function uppercased(n,mapping) return characters.uccode(mapping[n] or fallback) end
+--~
+--~ function converters.alphabetic(n,code)
+--~ do_alphabetic(n,counters[code] or counters['**'],lowercased) -- lccode catches wrong tables
+--~ end
+--~
+--~ function converters.Alphabetic(n,code)
+--~ do_alphabetic(n,counters[code] or counters['**'],uppercased)
+--~ end
+
+--
+
+local function do_alphabetic(n,mapping,mapper)
+ local chr = mapper(mapping[n] or fallback)
+ local max = #mapping
+ if n > max then
+ do_alphabetic(floor((n-1)/max),mapping,mapper)
+ n = (n-1)%max+1
+ end
+ characters.flush(chr)
+end
function converters.alphabetic(n,code)
- local code = counters[code] or counters['**']
- do_alphabetic(n,#code,lowercased) -- lccode catches wrong tables
+ do_alphabetic(n,counters[code] or counters['**'],characters.lccode)
end
function converters.Alphabetic(n,code)
- local code = counters[code] or counters['**']
- do_alphabetic(n,#code,uppercased)
+ do_alphabetic(n,counters[code] or counters['**'],characters.uccode)
end
+--
+
function converters.character (n) chr (n,96) end
function converters.Character (n) chr (n,64) end
function converters.characters(n) chrs(n,96) end
@@ -274,10 +296,10 @@ function converters.toabjad(n,what)
return medium[n]
else
local a, b, c, d
- a, n = floor(n/1000), mod(n,1000)
- b, n = floor(n/ 100), mod(n, 100)
- c, n = floor(n/ 10), mod(n, 10)
- d, n = floor(n/ 1), mod(n, 1)
+ a, n = floor(n/1000), n % 1000 -- mod(n,1000)
+ b, n = floor(n/ 100), n % 100 -- mod(n, 100)
+ c, n = floor(n/ 10), n % 10 -- mod(n, 10)
+ d, n = floor(n/ 1), n % 1 -- mod(n, 1)
return (large[4][a] or "") .. (large[3][b] or "") .. (large[2][c] or "") .. (large[1][d] or "")
end
end
@@ -287,7 +309,7 @@ function converters.abjadnodotnumerals(n) return texsprint(converters.toabjad(n,
local vector = {
normal = {
- [0] = "○",
+ [0] = "〇",
[1] = "一",
[2] = "二",
[3] = "三",
@@ -321,7 +343,7 @@ local vector = {
[100000000] = "亿",
},
all = {
- [0] = "○",
+ [0] = "〇",
[1] = "一",
[2] = "二",
[3] = "三",
@@ -341,7 +363,63 @@ local vector = {
}
}
+--~ function tochinese(n,name) -- normal, caps, all
+--~ local result = { }
+--~ local vector = vector[name] or vector.normal
+--~ while true do
+--~ if n == 0 then
+--~ break
+--~ elseif n >= 100000000 then
+--~ local m = floor(n/100000000)
+--~ if m > 1 then result[#result+1] = tochinese(m) end
+--~ result[#result+1] = vector[100000000]
+--~ n = n % 100000000
+--~ elseif n >= 10000000 then
+--~ result[#result+1] = tochinese(floor(n/10000))
+--~ result[#result+1] = vector[10000]
+--~ n = n % 10000
+--~ elseif n >= 1000000 then
+--~ result[#result+1] = tochinese(floor(n/10000))
+--~ result[#result+1] = vector[10000]
+--~ n = n % 10000
+--~ elseif n >= 100000 then
+--~ result[#result+1] = tochinese(floor(n/10000))
+--~ result[#result+1] = vector[10000]
+--~ n = n % 10000
+--~ elseif n >= 10000 then
+--~ local m = floor(n/10000)
+--~ if m > 1 then result[#result+1] = vector[m] end
+--~ result[#result+1] = vector[10000]
+--~ n = n % 10000
+--~ elseif n >= 1000 then
+--~ local m = floor(n/1000)
+--~ if m > 1 then result[#result+1] = vector[m] end
+--~ result[#result+1] = vector[1000]
+--~ n = n % 1000
+--~ elseif n >= 100 then
+--~ local m = floor(n/100)
+--~ if m > 1 then result[#result+1] = vector[m] end
+--~ result[#result+1] = vector[100]
+--~ n = n % 100
+--~ elseif n >= 10 then
+--~ local m = floor(n/10)
+--~ if vector[m*10] then
+--~ result[#result+1] = vector[m*10]
+--~ else
+--~ result[#result+1] = vector[m]
+--~ result[#result+1] = vector[10]
+--~ end
+--~ n = n % 10
+--~ else
+--~ result[#result+1] = vector[n]
+--~ break
+--~ end
+--~ end
+--~ return concat(result)
+--~ end
+
function tochinese(n,name) -- normal, caps, all
+ -- improved version by Li Yanrui
local result = { }
local vector = vector[name] or vector.normal
while true do
@@ -349,39 +427,56 @@ function tochinese(n,name) -- normal, caps, all
break
elseif n >= 100000000 then
local m = floor(n/100000000)
- if m > 1 then result[#result+1] = tochinese(m) end
+ result[#result+1] = tochinese(m,name)
result[#result+1] = vector[100000000]
+ local z = n - m * 100000000
+ if z > 0 and z < 10000000 then result[#result+1] = vector[0] end
n = n % 100000000
elseif n >= 10000000 then
- result[#result+1] = tochinese(floor(n/10000))
+ local m = floor(n/10000)
+ result[#result+1] = tochinese(m,name)
result[#result+1] = vector[10000]
+ local z = n - m * 10000
+ if z > 0 and z < 1000 then result[#result+1] = vector[0] end
n = n % 10000
elseif n >= 1000000 then
- result[#result+1] = tochinese(floor(n/10000))
+ local m = floor(n/10000)
+ result[#result+1] = tochinese(m,name)
result[#result+1] = vector[10000]
+ local z = n - m * 10000
+ if z > 0 and z < 1000 then result[#result+1] = vector[0] end
n = n % 10000
elseif n >= 100000 then
- result[#result+1] = tochinese(floor(n/10000))
+ local m = floor(n/10000)
+ result[#result+1] = tochinese(m,name)
result[#result+1] = vector[10000]
+ local z = n - m * 10000
+ if z > 0 and z < 1000 then result[#result+1] = vector[0] end
n = n % 10000
- elseif n >= 10000 then
+ elseif n >= 10000 then
local m = floor(n/10000)
- if m > 1 then result[#result+1] = vector[m] end
+ result[#result+1] = vector[m]
result[#result+1] = vector[10000]
+ local z = n - m * 10000
+ if z > 0 and z < 1000 then result[#result+1] = vector[0] end
n = n % 10000
- elseif n >= 1000 then
+ elseif n >= 1000 then
local m = floor(n/1000)
- if m > 1 then result[#result+1] = vector[m] end
+ result[#result+1] = vector[m]
result[#result+1] = vector[1000]
+ local z = n - m * 1000
+ if z > 0 and z < 100 then result[#result+1] = vector[0] end
n = n % 1000
- elseif n >= 100 then
+ elseif n >= 100 then
local m = floor(n/100)
- if m > 1 then result[#result+1] = vector[m] end
+ result[#result+1] = vector[m]
result[#result+1] = vector[100]
+ local z = n - m * 100
+ if z > 0 and z < 10 then result[#result+1] = vector[0] end
n = n % 100
- elseif n >= 10 then
+ elseif n >= 10 then
local m = floor(n/10)
- if vector[m*10] then
+ if m > 1 and vector[m*10] then
result[#result+1] = vector[m*10]
else
result[#result+1] = vector[m]
@@ -393,10 +488,15 @@ function tochinese(n,name) -- normal, caps, all
break
end
end
+ if (result[1] == vector[1] and result[2] == vector[10]) then
+ result[1] = ""
+ end
return concat(result)
end
---~ for k, v in ipairs { 1,10,15,25,35,45,11,100,111,1111,10000,11111,100000,111111,1111111,11111111,111111111,100000000,1111111111,11111111111,111111111111,1111111111111 } do
+--~ local t = { 1,10,15,25,35,45,11,100,111,1111,10000,11111,100000,111111,1111111,11111111,111111111,100000000,1111111111,11111111111,111111111111,1111111111111 }
+--~ for k=1,#t do
+--~ local v = t[k]
--~ print(v,tochinese(v),tochinese(v,"all"),tochinese(v,"cap"))
--~ end
diff --git a/Master/texmf-dist/tex/context/base/core-con.mkiv b/Master/texmf-dist/tex/context/base/core-con.mkiv
index b9dc0b44980..2d2e5d5d78e 100644
--- a/Master/texmf-dist/tex/context/base/core-con.mkiv
+++ b/Master/texmf-dist/tex/context/base/core-con.mkiv
@@ -596,10 +596,10 @@
% \setvalue{\??cv#1}##1{\csname\??cv#1##1\endcsname}}
% {\setvalue{\??cv#1}{#2}}}
%
-% \def\defineconversion%
+% \unexpanded\def\defineconversion%
% {\dodoubleargument\dodefineconversion}
-\def\defineconversion
+\unexpanded\def\defineconversion
{\dotripleempty\dodefineconversion}
\def\dodefineconversion[#1][#2][#3]%
diff --git a/Master/texmf-dist/tex/context/base/core-ctx.lua b/Master/texmf-dist/tex/context/base/core-ctx.lua
index eb9003bf1fb..1dad7c2d73a 100644
--- a/Master/texmf-dist/tex/context/base/core-ctx.lua
+++ b/Master/texmf-dist/tex/context/base/core-ctx.lua
@@ -1,6 +1,6 @@
-if not modules then modules = { } end modules ['supp-fil'] = {
+if not modules then modules = { } end modules ['core-ctx'] = {
version = 1.001,
- comment = "companion to supp-fil.tex",
+ comment = "companion to core-ctx.mkiv",
author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
copyright = "PRAGMA ADE / ConTeXt Development Team",
license = "see context related readme files"
@@ -18,20 +18,19 @@ function commands.loadctxpreplist()
local x = xml.load(ctlname)
if x then
islocal = xml.found(x,"ctx:preplist[@local=='yes']")
- if trace_prepfiles then
+--~ if trace_prepfiles then
if islocal then
commands.writestatus("systems","loading ctx log file (local)") -- todo: m!systems
else
commands.writestatus("systems","loading ctx log file (specified)") -- todo: m!systems
end
- end
- for r, d, k in xml.elements(x,"ctx:prepfile") do
- local dk = d[k]
- local name = xml.content(dk)
+--~ end
+ for e in xml.collected(x,"ctx:prepfile") do
+ local name = xml.text(e)
if islocal then
name = file.basename(name)
end
- local done = dk.at['done'] or 'no'
+ local done = e.at['done'] or 'no'
if trace_prepfiles then
commands.writestatus("systems","registering %s -> %s",done)
end
@@ -73,16 +72,16 @@ end
local processfile = commands.processfile
local doifinputfileelse = commands.doifinputfileelse
-function commands.processfile(name,depth)
- local prepname = found and resolve(name)
+function commands.processfile(name,maxreadlevel) -- overloaded
+ local prepname = resolve(name)
if prepname then
return processfile(prepname,0)
end
- return processfile(name,depth)
+ return processfile(name,maxreadlevel)
end
function commands.doifinputfileelse(name,depth)
- local prepname = found and resolve(name)
+ local prepname = resolve(name)
if prepname then
return doifinputfileelse(prepname,0)
end
@@ -90,5 +89,5 @@ function commands.doifinputfileelse(name,depth)
end
function commands.preparedfile(name)
- return (found and resolve(name)) or name
+ return resolve(name) or name
end
diff --git a/Master/texmf-dist/tex/context/base/core-ctx.mkiv b/Master/texmf-dist/tex/context/base/core-ctx.mkiv
index c401b09f0b9..9bf4569520b 100644
--- a/Master/texmf-dist/tex/context/base/core-ctx.mkiv
+++ b/Master/texmf-dist/tex/context/base/core-ctx.mkiv
@@ -21,6 +21,8 @@
\def\loadctxpreplist{\ctxlua{commands.loadctxpreplist()}\global\let\loadctxpreplist\relax}
-\appendtoks\loadctxpreplist\to\everystarttext % will become: \prependtoks\loadctxpreplist\to\everyjob
+% \prependtoks\loadctxpreplist\to\everyjob
+
+\appendtoks\loadctxpreplist\to\everystarttext
\protect \endinput
diff --git a/Master/texmf-dist/tex/context/base/core-def.mkii b/Master/texmf-dist/tex/context/base/core-def.mkii
index e51cd96d360..840f853a763 100644
--- a/Master/texmf-dist/tex/context/base/core-def.mkii
+++ b/Master/texmf-dist/tex/context/base/core-def.mkii
@@ -74,6 +74,13 @@
% \appendtoks\everyjob\expandafter{\the\everyjob\checkpreprocessor}\to\everydump
+% temporary here:
+
+% \in \at \about \from \over
+
+\unexpanded\def\arg{\mathortext\normalmatharg\normaltextarg}
+
+% brrr
% normally one does not want this to happen nested, maybe there
% is more; non public vars btw, will become conditionals
@@ -81,4 +88,18 @@
\ifx\writetolistfalse \undefined \else \appendtoks \writetolistfalse \to \everybeforeutilityread \fi
\ifx\notesenabledfalse \undefined \else \appendtoks \notesenabledfalse \to \everybeforeutilityread \fi
+\def\synctexwarning
+ {\ifdefined\synctex \ifnum\synctex=\zerocount \else
+ \writeline
+ \writestatus\m!systems{BEWARE: syntex functionality is enabled!}%
+ \writeline
+ \globallet\synctexwarning\relax
+ \fi \fi}
+
+\prependtoks \synctexwarning \to \everyjob
+\prependtoks \synctexwarning \to \everystarttext
+\appendtoks \synctexwarning \to \everystoptext
+
+% last minute hacks
+
\protect \endinput
diff --git a/Master/texmf-dist/tex/context/base/core-def.mkiv b/Master/texmf-dist/tex/context/base/core-def.mkiv
index 583eb5870d0..59451a9141e 100644
--- a/Master/texmf-dist/tex/context/base/core-def.mkiv
+++ b/Master/texmf-dist/tex/context/base/core-def.mkiv
@@ -28,7 +28,6 @@
\appendtoks \showcontextbanner \to \everyjob
\appendtoks \initializenewlinechar \to \everyjob
-\appendtoks \checksystemcommandmode \to \everyjob
\appendtoks \calculatecurrenttime \to \everyjob
\appendtoks \loadsystemfiles \to \everyjob
\appendtoks \loadoptionfile \to \everyjob % can load files !
@@ -36,14 +35,10 @@
\appendtoks \settopskip \to \everyjob
\appendtoks \preloadlanguages \to \everyjob
\appendtoks \preloadspecials \to \everyjob
-\appendtoks \splitjobfilename \to \everyjob
-\appendtoks \checknotes \to \everyjob % depends on bodyfont
\appendtoks \initializeMPgraphics \to \everyjob % after loading system files
-\appendtoks \reportsystemcommandmode \to \everyjob
\appendtoks \initializemainlanguage \to \everyjob
-\appendtoks \MPLIBregister \to \everyjob
+%appendtoks \MPLIBregister \to \everyjob
\appendtoks \xmlinitialize \to \everyjob
-\appendtoks \settrue\trackfilenames \to \everyjob
\appendtoks \newbackgroundfalse \to \everyjob % global
\appendtoks \initializepagecounters \to \everyjob
\appendtoks \directsetup{*runtime:options} \to \everyjob % we could erase them afterwards % order can change
@@ -52,15 +47,17 @@
%appendtoks \page[\v!last] \page \to \everybye % moved to core-job, we need to do this cleaner
\appendtoks \ifarrangingpages\poparrangedpages\fi \to \everybye
-\appendtoks \registerfileinfo[end]\jobname \to \everybye
+%appendtoks \registerfileinfo[end]\jobfilename \to \everybye
-\appendtoks \MPLIBallocate{1000} \to \everydump
+%appendtoks \MPLIBallocate{1000} \to \everydump
\prependtoks \resetallattributes \to \everybeforeoutput
\appendtoks \the\everybackendshipout \to \everyshipout
\prependtoks \the\everylastbackendshipout \to \everylastshipout
+\prependtoks \lefttoright \to \everybeforeoutput
+
% temporary here:
\ifdefined\in \let\normalmathin \in \unexpanded\def\in {\mathortext\normalmathin \dospecialin } \else \let\in \dospecialin \fi
@@ -69,4 +66,29 @@
\ifdefined\from \let\normalmathfrom \from \unexpanded\def\from {\mathortext\normalmathfrom \dospecialfrom } \else \let\from \dospecialfrom \fi
\ifdefined\over \let\normalmathover \over \unexpanded\def\over {\mathortext\normalmathover \dospecialabout} \else \let\over \dospecialabout \fi
+\unexpanded\def\arg{\mathortext\normalmatharg\normaltextarg}
+
+% brrr
+
+\appendtoks
+ \synchronizegloballinespecs
+ \synchronizelocallinespecs
+\to \everysetupbodyfont
+
+\appendtoks
+ \synchronizelocallinespecs
+\to \everyswitchtobodyfont
+
+\def\synctexwarning
+ {\ifdefined\synctex \ifnum\synctex=\zerocount \else
+ \writeline
+ \writestatus\m!systems{BEWARE: synctex functionality is enabled!}%
+ \writeline
+ \globallet\synctexwarning\relax
+ \fi \fi}
+
+\prependtoks \synctexwarning \to \everyjob
+\prependtoks \synctexwarning \to \everystarttext
+\appendtoks \synctexwarning \to \everystoptext
+
\protect \endinput
diff --git a/Master/texmf-dist/tex/context/base/core-env.mkiv b/Master/texmf-dist/tex/context/base/core-env.mkiv
index c979872687c..d927ff3ad50 100644
--- a/Master/texmf-dist/tex/context/base/core-env.mkiv
+++ b/Master/texmf-dist/tex/context/base/core-env.mkiv
@@ -108,11 +108,11 @@
% simple ones
-\def\doifmodeelse{\unprotect\dodoifmodeelse}
-\def\doifmode {\unprotect\dodoifmode}
-\def\doifnotmode {\unprotect\dodoifnotmode}
-\def\startmode {\unprotect\dostartmode}
-\def\startnotmode{\unprotect\dostartnotmode}
+\unexpanded\def\doifmodeelse{\unprotect\dodoifmodeelse}
+\unexpanded\def\doifmode {\unprotect\dodoifmode}
+\unexpanded\def\doifnotmode {\unprotect\dodoifnotmode}
+\unexpanded\def\startmode {\unprotect\dostartmode}
+\unexpanded\def\startnotmode{\unprotect\dostartnotmode}
\def\dodoifmodeelse
{\docheckformode\firstoftwoarguments\secondoftwoarguments}
@@ -123,23 +123,23 @@
\def\dodoifnotmode
{\docheckformode\gobbleoneargument\firstofoneargument}
-\long\def\dostartmode[#1]%
+\long\unexpanded\def\dostartmode[#1]%
{\docheckformode\donothing\dostopmode{#1}}
\long\def\dostartnotmode[#1]%
{\docheckformode\dostopnotmode\donothing{#1}}
-\let\stopmode \donothing
-\let\stopnotmode\donothing
+\unexpanded\def\stopmode {} % no relax
+\unexpanded\def\stopnotmode{} % no relax
\long\def\dostopmode #1\stopmode {}
\long\def\dostopnotmode#1\stopnotmode{}
-\def\doifallmodeselse{\unprotect\dodoifallmodeselse}
-\def\doifallmodes {\unprotect\dodoifallmodes}
-\def\doifnotallmodes {\unprotect\dodoifnotallmodes}
-\def\startallmodes {\unprotect\dostartallmodes}
-\def\startnotallmodes{\unprotect\dostartnotallmodes}
+\unexpanded\def\doifallmodeselse{\unprotect\dodoifallmodeselse}
+\unexpanded\def\doifallmodes {\unprotect\dodoifallmodes}
+\unexpanded\def\doifnotallmodes {\unprotect\dodoifnotallmodes}
+\unexpanded\def\startallmodes {\unprotect\dostartallmodes}
+\unexpanded\def\startnotallmodes{\unprotect\dostartnotallmodes}
\def\dodoifallmodeselse
{\docheckforallmodes\firstoftwoarguments\secondoftwoarguments}
@@ -156,27 +156,31 @@
\long\def\dostartnotallmodes[#1]%
{\docheckforallmodes\dostopnotallmodes\donothing{#1}}
-\let\stopallmodes \donothing
-\let\stopnotallmodes\donothing
+\unexpanded\def\stopallmodes {} % no relax
+\unexpanded\def\stopnotallmodes{} % no relax
\long\def\dostopallmodes #1\stopallmodes {}
\long\def\dostopnotallmodes#1\stopnotallmodes{}
+%D Lets now set a mode:
+
+\enablemode[mkiv] \setsystemmode{mkiv}
+
%D Setups:
-\let\startsetups\relax % to please dep checker
-\let\stopsetups \relax % to please dep checker
+\unexpanded\def\startsetups{} % to please dep checker
+\unexpanded\def\stopsetups {} % to please dep checker
\expanded
{\long\def\@EA\noexpand\csname\e!start\v!setups\endcsname
{\begingroup\noexpand\doifnextoptionalelse
- {\noexpand\startsetupsA\@EA\noexpand\csname\e!stop\v!setups\endcsname}
- {\noexpand\startsetupsB\@EA\noexpand\csname\e!stop\v!setups\endcsname}}}
+ {\noexpand\dostartsetupsA\@EA\noexpand\csname\e!stop\v!setups\endcsname}
+ {\noexpand\dostartsetupsB\@EA\noexpand\csname\e!stop\v!setups\endcsname}}}
\letvalue{\e!stop\v!setups}\relax
-\unexpanded \def\setups{\doifnextbgroupelse\dosetupsA\dosetupsB} % {..} or [..]
-\unexpanded \def\setup {\doifnextbgroupelse\dosetups \dosetupsC} % {..} or [..]
+\unexpanded\def\setups{\doifnextbgroupelse\dosetupsA\dosetupsB} % {..} or [..]
+\unexpanded\def\setup {\doifnextbgroupelse\dosetups \dosetupsC} % {..} or [..]
\def\dosetupsA #1{\processcommacommand[#1]\dosetups} % {..}
\def\dosetupsB[#1]{\processcommacommand[#1]\dosetups} % [..]
@@ -193,8 +197,20 @@
\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}
+% the next one is meant for \c!setups situations, hence the check for
+% a shortcut
+
+\def\doprocesslocalsetups#1%
+ {\edef\tobeprocessedsetups{#1}%
+ \ifx\tobeprocessedsetups\empty\else
+ \dodoprocesslocalsetups
+ \fi}
+
+\def\dodoprocesslocalsetups
+ {\@EA\processcommalist\@EA[\tobeprocessedsetups]\dosetups}
+
+\edef\setupwithargument#1% saves a few expansions
+ {\noexpand\csname\??su:\noexpand\ifcsname\??su:#1\endcsname#1\noexpand\else\letterpercent\noexpand\fi\endcsname}
\let\directsetup\dosetups
@@ -203,27 +219,27 @@
\chardef\setupseolmode\plusone
-\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
+\unexpanded\def\startsetups {\xxstartsetups\plusone \stopsetups } \let\stopsetups \relax
+\unexpanded\def\startlocalsetups{\xxstartsetups\plusone \stoplocalsetups} \let\stoplocalsetups\relax
+\unexpanded\def\startrawsetups {\xxstartsetups\zerocount\stoprawsetups } \let\stoprawsetups \relax
+\unexpanded\def\startxmlsetups {\xxstartsetups\plustwo \stopxmlsetups } \let\stopxmlsetups \relax
\def\xxstartsetups#1#2%
- {\begingroup\let\setupseolmode#1\doifnextoptionalelse{\startsetupsA#2}{\startsetupsB#2}}
+ {\begingroup\let\setupseolmode#1\doifnextoptionalelse{\dostartsetupsA#2}{\dostartsetupsB#2}}
-\def\startsetupsA#1% [ ] delimited
+\def\dostartsetupsA#1% [ ] delimited
{\ifcase\setupseolmode\or\catcode`\^^M\@@ignore\or\catcode`\^^M\@@ignore\catcode`\|\@@other\fi
\dotripleempty\dostartsetups[#1]}
-\def\startsetupsB#1#2 % space delimited
+\def\dostartsetupsB#1#2 % space delimited
{\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}} % [..] [..]
-\def\startsetupsD[#1][#2][#3]{\dodostartsetups#1\empty{#2}} % [..]
+\def\dostartsetupsC[#1][#2][#3]{\dodostartsetups#1{#2}{#3}} % [..] [..]
+\def\dostartsetupsD[#1][#2][#3]{\dodostartsetups#1\empty{#2}} % [..]
\def\dostartsetups
- {\ifthirdargument\@EA\startsetupsC\else\@EA\startsetupsD\fi}
+ {\ifthirdargument\@EA\dostartsetupsC\else\@EA\dostartsetupsD\fi}
\long\def\dodostartsetups#1#2#3%
{\long\def\dododostartsetups##1#1%
@@ -243,90 +259,6 @@
\dodoglobal\letbeundefined{\??su:#1}%
\fi}
-%D \defineshortcut [style=type]
-%D \defineshortcut [b] [style=bold]
-%D \defineshortcut [e] [style=\em]
-%D \defineshortcut [t] [style=type]
-%D \defineshortcut [c] [style=cap]
-%D \defineshortcut [k] [style=cap]
-%D \defineshortcut [u] [style=type,command=\hyphenatedurl]
-%D
-%D \startlines
-%D test <ziezo> test
-%D test test <t:ziezo>
-%D test test <b:ziezo>
-%D test test <w:ziezo>
-%D zus<>zo zus<:>zo zus<::>zo
-%D test test <t:ziezo> dat (ziezo)
-%D test test <t::ziezo> dat (:ziezo)
-%D test test <t:ziezo:> dat (ziezo:)
-%D test test <t:zi:ezo:> dat (zi:ezo:)
-%D well, <u:http://www.pragma-ade.nl> looks fuzzy
-%D $10<20$
-%D \stoplines
-%D
-%D \defineshortcut [<>] [i] [style=\it]
-%D \defineshortcut [()] [b] [style=\bf]
-%D \defineshortcut [++] [s] [style=\sl]
-%D \defineshortcut [//] [u] [style=\underbars]
-%D \defineshortcut [--] [a] [style=\overstrike]
-%D
-%D \startlines
-%D it seems <i:to work> well
-%D it seems (b:to work) well
-%D it seems +s:to work+ well
-%D it seems /u:to work/ well
-%D it seems -a:to work- well
-%D \stoplines
-
-\def\defineshortcut
- {\dotripleargument\dodefineshortcut}
-
-\def\dodefineshortcut[#1][#2][#3]%
- {\ifthirdargument
- \doifelsenothing{#1}
- {\dododefineshortcut[<>][#2][#3]}
- {\dododefineshortcut[#1][#2][#3]}%
- \else\ifsecondargument
- \dododefineshortcut[<>][#1][#2]%
- \else
- \dododefineshortcut[<>][][#1]%
- \fi\fi}
-
-\def\dododefineshortcut[#1#2][#3][#4]% #1 is the trigger, #2 the delimiter/tag
- {\doifundefined{\??te\??te\string#2}{\letvalue{\??te\??te\string#2}=#1}%
- \defineactivecharacter #1 {\@EA\doshortcut\string#2} % we need to deactivate in math
- \getparameters
- [\??te\string#2#3]
- [\c!commands=,\c!command=,\c!style=,\c!color=,#4]}
-
-\def\doshortcut#1%
- {\ifmmode
- \getvalue{\??te\??te#1}%
- \else
- \bgroup
- \catcode`#1=\@@other
- \def\dodoshortcut##1#1%
- {\def\shorttag{\??te#1}%
- \def\shortcut{##1}%
- \dododoshortcut##1:\end}%
- \@EA\dodoshortcut
- \fi}
-
-\def\dododoshortcut#1:#2\end
- {\doifelsenothing{#2}
- {\doifundefinedelse{\shorttag\c!commands}
- {\shortcut}
- {\@EA\dodododoshortcut\@EA\shorttag\@EA:\shortcut:\end}}
- {\doifundefinedelse{\shorttag#1\c!commands}
- {\shortcut}
- {\dodododoshortcut\shorttag#1:#2\end}}%
- \egroup}
-
-\def\dodododoshortcut#1:#2:\end
- {\getvalue{#1\c!commands}%
- \doattributes{#1}\c!style\c!color{\getvalue{#1\c!command}{#2}}}
-
%D \macros
%D {setvariables,getvariable,getvariabledefault}
%D
@@ -426,7 +358,7 @@
\def\getvariabledefault#1#2% #3% can be command, so no ifcsname here
{\executeifdefined{\??vars:#1:#2}}% {#3}
-% \def\setupenv{\dodoubleargument\rawgetparameters[\??en]}
+% \unexpanded\def\setupenv{\dodoubleargument\rawgetparameters[\??en]}
%
% \def\doifenvelse#1{\doifdefinedelse{\??en#1}} % speed up
% \def\doifenv #1{\doifdefined {\??en#1}} % speed up
@@ -446,7 +378,7 @@
\def\s!environment{environment}
-\def\setupenv {\dotripleargument\dosetvariables[\getrawparameters][\s!environment]}
+\unexpanded\def\setupenv {\dotripleargument\dosetvariables[\getrawparameters][\s!environment]}
\def\doifenvelse{\doifelsevariable \s!environment}
\def\doifenv {\doifvariable \s!environment}
\def\doifnotenv {\doifnotvariable \s!environment}
diff --git a/Master/texmf-dist/tex/context/base/core-fil.mkiv b/Master/texmf-dist/tex/context/base/core-fil.mkiv
index 14154fca43d..daef176d2b0 100644
--- a/Master/texmf-dist/tex/context/base/core-fil.mkiv
+++ b/Master/texmf-dist/tex/context/base/core-fil.mkiv
@@ -43,7 +43,7 @@
% will be redone in mkiv
-\def\definefilesynonym
+\unexpanded\def\definefilesynonym
{\dodoubleempty\dodefinefilesynonym}
\def\dodefinefilesynonym[#1][#2]%
@@ -55,7 +55,7 @@
%D \macros
%D {definefilefallback}
-\def\definefilefallback
+\unexpanded\def\definefilefallback
{\dodoubleargument\dodefinefilefallback}
\def\dodefinefilefallback[#1][#2]%
@@ -114,44 +114,8 @@
%D their dedicated manuals. We use \type {\next} so that we
%D can \type {\end} in modules.
-\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}
- {\readsysfile{\shortfilename.\mksuffix} % new
- {\showmessage\m!systems5{#2 (\mksuffix)}\settrue\moduleisloaded}
- \donothing}%
- \stopreadingfile}}%
- \fi
- \next}
-
\def\dodousemodules#1#2%
- {\setfalse\moduleisloaded
- \doifelsenothing{#1}
- {\dododousemodules\f!moduleprefix {#2}%
- \dododousemodules\f!privateprefix{#2}%
- \dododousemodules\f!styleprefix {#2}%
- \dododousemodules\f!xstyleprefix {#2}%
- \dododousemodules\f!thirdprefix {#2}%
- \dododousemodules\empty {#2}}% new, fall back on raw name
- {\dododousemodules{#1-}{#2}}%
- \ifconditional\moduleisloaded\else
- \showmessage\m!systems6{#2}%
- \appendtoks\showmessage\m!systems6{#2}\to\everynotabene
- \fi}
+ {\ctxlua{support.usemodules("#1","#2","\truefilename{#2}")}}
\def\usemodules
{\dotripleempty\dousemodules}
@@ -182,7 +146,7 @@
\let\currentmoduleparameters\empty
\let\currentmodule \s!unknown
-\def\startmodule
+\unexpanded\def\startmodule
{\doifnextoptionalelse\dostartmodule\nostartmodule}
\def\nostartmodule #1 %
@@ -193,11 +157,11 @@
\pushmacro\currentmoduleparameters
\def\currentmodule{#1}}
-\def\stopmodule
+\unexpanded\def\stopmodule
{\popmacro\currentmoduleparameters
\popmacro\currentmodule}
-\def\setupmodule
+\unexpanded\def\setupmodule
{\dodoubleempty\dosetupmodule}
\def\dosetupmodule[#1][#2]%
@@ -214,6 +178,9 @@
\def\moduleparameter #1#2{\executeifdefined{\??md:#1:#2}\s!empty}
\def\currentmoduleparameter#1{\executeifdefined{\??md:\currentmodule:#1}\s!empty}
+\def\useluamodule [#1]{\ctxlua{dofile(resolvers.findctxfile("#1"))}}
+\def\luaenvironment #1 {\ctxlua{dofile(resolvers.findctxfile("#1"))}}
+
% \usemodule[newmml]
% \usemodule[newmml][a=b]
% \usemodule[x][newmml]
@@ -235,7 +202,7 @@
\let\stopmoduletestsection\donothing
-\def\startmoduletestsection
+\unexpanded\def\startmoduletestsection
{\bgroup
\setupmodule % we need to make sure that the vars are set
\doifelse{\currentmoduleparameter\v!test}\v!yes
@@ -306,7 +273,7 @@
\def\documentresources{\@@erurl}
-\def\setupexternalresources
+\unexpanded\def\setupexternalresources
{\dodoubleargument\getparameters[\??er]}
\setupexternalresources
diff --git a/Master/texmf-dist/tex/context/base/core-fnt.mkiv b/Master/texmf-dist/tex/context/base/core-fnt.mkiv
index e6573985835..a7c84a5a093 100644
--- a/Master/texmf-dist/tex/context/base/core-fnt.mkiv
+++ b/Master/texmf-dist/tex/context/base/core-fnt.mkiv
@@ -123,8 +123,7 @@
\def\textskip
{\scratchdimen\stretchedspaceamount
\hskip\stretchedspacefactor\scratchdimen}%
- \@EA\processtokens\@EA\relax\@EA\textkern\@EA\relax\@EA
- \textskip\@EA{\textstring}%
+ \@EA\processtokens\@EA\relax\@EA\textkern\@EA\relax\@EA\textskip\@EA{\textstring}%
\fi
\egroup}
@@ -152,173 +151,6 @@
\fi}
%D \macros
-%D {underbar,underbars,
-%D overbar,overbars,
-%D overstrike,overstrikes,
-%D setupunderbar}
-%D
-%D In the rare case that we need undelined words, for instance
-%D because all font alternatives are already in use, one can
-%D use \type{\underbar} and \type{\overstrike} and their plural
-%D forms.
-%D
-%D \startbuffer
-%D \underbars{drawing \underbar{bars} under words is a typewriter leftover}
-%D \overstrikes{striking words makes them \overstrike{unreadable} but
-%D sometimes even \overbar{top lines} come into view.}
-%D \stopbuffer
-%D
-%D \typebuffer
-%D
-%D \startvoorbeeld
-%D \startlines
-%D \getbuffer
-%D \stoplines
-%D \stopvoorbeeld
-%D
-%D The next macros are derived from the \PLAIN\ \TEX\ one, but
-%D also supports nesting. The \type{$} keeps us in horizontal
-%D mode and at the same time applies grouping.
-%D
-%D \showsetup{underbar}
-%D \showsetup{underbars}
-%D \showsetup{overbar}
-%D \showsetup{overbars}
-%D \showsetup{overstrike}
-%D \showsetup{overstrikes}
-%D
-%D Although underlining is ill advised, we permit some
-%D alternatives, that can be set up by:
-%D
-%D \showsetup{setupunderbar}
-%D
-%D The alternatives show up as
-%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.
-
-\newcount\underbarlevel
-
-\def\underbarmethoda#1#2#3% RULE
- {\hbox to #1{\vrule\!!width#1\!!height#2\!!depth#3}}
-
-\def\underbarmethodb#1#2#3% DASH
- {\hbox to #1
- {\hskip-.25em
- \xleaders
- \hbox{\hskip.25em\vrule\!!width.25em\!!height#2\!!depth#3}
- \hfil}}
-
-\def\underbarmethodc#1#2#3% PERIOD
- {\hbox to #1
- {\dimen4=#3
- \advance\dimen4 .2ex
- \hskip-.25em
- \xleaders
- \hbox{\hskip.25em\lower\dimen4\hbox{.}}
- \hfil}}
-
-\def\dododounderbar#1#2#3%
- {\startmathmode
- \setbox0\hbox{#3}%
- \setbox2\hbox{\color[\@@onrulecolor]{\getvalue{underbarmethod\@@onalternative}{\wd0}{#1}{#2}}}%
- \wd0\zeropoint
- \ht2\ht0
- \dp2\dp0
- \box0\box2
- \stopmathmode}
-
-\unexpanded\def\dodounderbar#1%
- {\bgroup
- \dimen0=\underbarlevel\dimexpr\@@onbottomoffset\relax
- \ifdone \else
- \advance\dimen0 -\strutht
- \fi
- \dimen2\dimexpr\dimen0+\@@onrulethickness\relax
- \dododounderbar{-\dimen0}{\dimen2}{#1}%
- \egroup}
-
-\def\betweenunderbarwords
- {\bgroup
- \setbox0\hbox{\dodounderbar{\hskip\interwordspace}}%
- \nobreak
- \hskip\zeropoint\!!minus\interwordshrink
- \discretionary{}{}{\box0}%
- \egroup}
-
-\def\betweenunderbarspaces
- {\hskip\currentspaceskip}
-
-\unexpanded\def\underbar
- {\bgroup
- \advance\underbarlevel\plusone
- \donetrue
- \dounderbar\betweenunderbarwords}
-
-\unexpanded\def\dounderbar#1%
- {\let\betweenisolatedwords#1%
- \dosingleempty\redounderbar}
-
-\unexpanded\def\redounderbar[#1]#2%
- {\iffirstargument\setupunderbar[#1]\fi
- \processisolatedwords{#2}\dodounderbar
- \egroup}
-
-\unexpanded\def\underbars
- {\bgroup
- \advance\underbarlevel\plusone
- \donetrue
- \dounderbar\betweenunderbarspaces}
-
-\unexpanded\def\overbar
- {\bgroup
- \advance\underbarlevel\minusone
- \donefalse
- \dounderbar\betweenunderbarwords}
-
-\unexpanded\def\overbars
- {\bgroup
- \advance\underbarlevel\minusone
- \donefalse
- \dounderbar\betweenunderbarspaces}
-
-\def\dooverstrike#1%
- {\bgroup
- \dimen0=\@@ontopoffset
- \dimen2=\dimexpr\dimen0+\@@onrulethickness\relax
- \dododounderbar{\dimen2}{-\dimen0}{#1}%
- \egroup}
-
-\def\betweenoverstrikewords
- {\bgroup
- \setbox0\hbox{\dooverstrike{\hskip\interwordspace}}%
- \nobreak
- \hskip\zeropoint\!!minus\interwordshrink
- \discretionary{}{}{\box0}%
- \egroup}
-
-\unexpanded\def\overstrike#1%
- {\bgroup
- \let\betweenisolatedwords\betweenoverstrikewords
- \processisolatedwords{#1}\dooverstrike
- \egroup}
-
-\unexpanded\def\overstrikes#1%
- {\bgroup
- \processisolatedwords{#1}\dooverstrike
- \egroup}
-
-\def\underbarparameter#1{\csname\??on#1\csname}
-
-\def\setupunderbar
- {\dodoubleargument\getparameters[\??on]}
-
-%D \macros
%D {shiftedword, shiftedwords}
%D
%D Used as \type {\shiftedwords {10pt} {some text}} this macro will
@@ -436,7 +268,7 @@
% to do: more fine tuning
-\def\setupinitial
+\unexpanded\def\setupinitial
{\dodoubleempty\getparameters[\??dc]}
\definefontsynonym[Initial][Regular] % prefered initial identifier
@@ -452,19 +284,10 @@
\def\AutoDroppedCapsCommand{\NiceDroppedCaps\@@dccommand\@@dcfont\@@dcdistance\@@dcn}%
-\def\placeinitial
+\unexpanded\def\placeinitial
{\doifelse\@@dclocation\v!margin{\chardef\DropMode\plusone}{\chardef\DropMode\zerocount}%
\doif \@@dcstate\v!start{\ifcase\@@dcn\else\AutoDroppedCaps\fi}}
\let\checkinitial\CheckDroppedCaps
-%D This module has only a few setups:
-
-\setupunderbar
- [\c!alternative=a,
- \c!rulethickness=\linewidth,
- \c!bottomoffset=1.5pt,
- \c!topoffset=2.5pt,
- \c!rulecolor=]
-
\protect \endinput
diff --git a/Master/texmf-dist/tex/context/base/core-grd.mkiv b/Master/texmf-dist/tex/context/base/core-grd.mkiv
deleted file mode 100644
index d6cc93735cb..00000000000
--- a/Master/texmf-dist/tex/context/base/core-grd.mkiv
+++ /dev/null
@@ -1,1074 +0,0 @@
-%D \module
-%D [ file=core-grd,
-%D version=1998.03.10,
-%D title=\CONTEXT\ Core Macros,
-%D subtitle=Grid Snapping (Experimental),
-%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 / Grid Snapping}
-
-\unprotect
-
-%D Moved from supp-box:
-
-%D \macros
-%D {startbaselinecorrection,baselinecorrection,
-%D showbaselinecorrection,offbaselinecorrection}
-%D
-%D Spacing around ruled boxes can get pretty messed up. The
-%D next macro tries as good as possible to fix this.
-%D
-%D \startbuffer[1]
-%D \startbaselinecorrection
-%D \ruledhbox{Rule Brittanica}
-%D \stopbaselinecorrection
-%D \stopbuffer
-%D
-%D \typebuffer[1]
-%D
-%D The macros put some white space around the box:
-%D
-%D \getbuffer[1]
-%D
-%D A simple alternative is \type {\baselinecorrection}, which
-%D only looks at the previous line.
-%D
-%D \startbuffer[2]
-%D \baselinecorrection
-%D \ruledhbox{Rule Brittanica}
-%D \baselinecorrection
-%D \stopbuffer
-%D
-%D \typebuffer[2]
-%D
-%D This time the last preceding line gets a correction,%
-%D dependant on the depth.
-%D
-%D \getbuffer[2]
-%D
-%D One can make the correction visible by saying \type
-%D {\showbaselinecorrection}. Part of the correction is
-%D calculated from the dimensions of a~(. One can disble the
-%D correction by calling \type {\offbaselinecorrection}.
-%D
-%D When visualize the first example looks like:
-%D
-%D {\showbaselinecorrection\getbuffer[1]}
-%D
-%D and the second one comes out as:
-%D
-%D {\showbaselinecorrection\getbuffer[2]}
-
-% \definecolor[GridLineColor][red]
-% \definecolor[GridTextColor][blue]
-
-\let\thetopbaselinecorrection \!!zeropoint
-\let\thebotbaselinecorrection \!!zeropoint
-\let\thenegtopbaselinecorrection\!!zeropoint
-\let\thenegbotbaselinecorrection\!!zeropoint
-
-\definepalet
- [grid]
- [ one=red,
- two=green,
- three=blue,
- four=gray]
-
-\def\setbaselinecorrections
- {\setbox0\hbox{\setstrut\strut}%
- \setbox2\hbox{(}%
- \dimen0\ht0\advance\dimen0 -\ht2
- \ifdim\dimen0<\zeropoint\dimen0\zeropoint\fi
- \dimen2\dp0\advance\dimen2 -\dp2
- \ifdim\dimen2<\zeropoint\dimen2\zeropoint\fi
- \edef\thetopbaselinecorrection {\the\dimen0}\dimen0-\dimen0
- \edef\thebotbaselinecorrection {\the\dimen2}\dimen2-\dimen2
- \edef\thenegtopbaselinecorrection{\the\dimen0}%
- \edef\thenegbotbaselinecorrection{\the\dimen2}}
-
-\def\dotopbaselinecorrection {\kern\thetopbaselinecorrection}
-\def\dobotbaselinecorrection {\kern\thebotbaselinecorrection}
-\def\donegtopbaselinecorrection{\kern\thenegtopbaselinecorrection}
-\def\donegbotbaselinecorrection{\kern\thenegbotbaselinecorrection}
-
-\def\showbaselinecorrection
- {\def\dobaselinecorrection % visualization is not watertight!
- {\bgroup
-\ifdim\prevdepth>\zeropoint\kern-\prevdepth\fi
- \setbox0\null
- \wd0\hsize
- \dp0\strutdp
- \nointerlineskip
- \forgetall
- \ruledvbox{\box0}%
- \egroup
- \prevdepth\strutdp}%
- \def\dotopbaselinecorrection
- {\hrule\!!height\thetopbaselinecorrection}%
- \def\dobotbaselinecorrection
- {\hrule\!!height\thebotbaselinecorrection}}
-
-\def\dobaselinecorrection
- {\ifdim\prevdepth>\zeropoint\kern-\prevdepth\fi
- \kern\strutdp
- \prevdepth\strutdp}
-
-% \def\baselinecorrection
-% {\endgraf
-% \ifvmode
-% \ifdim\prevdepth<\maxdimen
-% \ifdim\prevdepth<\zeropoint \else
-% \ifdim\prevdepth<\strutdp
-% \dobaselinecorrection
-% \fi
-% \fi
-% \fi
-% \fi}
-
-\def\baselinecorrection
- {\endgraf
- \ifvmode
- \ifdim\prevdepth<\maxdimen
- \ifdim\prevdepth<\zeropoint \else
- \ifdim\prevdepth<\strutdepth \relax
- \pushlastnode
- \dobaselinecorrection
- \poplastnode
- \fi
- \fi
- \fi
- \fi}
-
-\def\pagebaselinecorrection
- {\ifdim\pagegoal<\maxdimen
- \ifdim\pagetotal>\lineheight % or \topskip
- \scratchdimen\pagetotal
- \advance\scratchdimen\lineheight
- \ifdim\scratchdimen<\pagegoal
- \baselinecorrection
- \fi
- \fi
- \fi}
-
-% Beware, keep this one as it is, see for instance module
-% 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
- {\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}
-
-%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}
-%D
-%D The actual top and bottom corrections are implemented as:
-
-% \def\topbaselinecorrection
-% {\ifvmode \ifdim\pagegoal<\maxdimen
-% \bgroup
-% \setbaselinecorrections
-% \whitespace
-% \nointerlineskip
-% \dotopbaselinecorrection
-% \egroup
-% \fi \fi}
-
-
-\def\topbaselinecorrection
- {\ifvmode \ifdim\pagegoal<\maxdimen
- \forcedtopbaselinecorrection
- \fi \fi}
-
-\def\forcedtopbaselinecorrection
- {\ifvmode
- \bgroup
- \setbaselinecorrections
- \whitespace
- \nointerlineskip
- \dotopbaselinecorrection
- \egroup
- \fi}
-
-\def\botbaselinecorrection
- {\ifvmode
- \bgroup
- \setbaselinecorrections
- \dobotbaselinecorrection
- \allowbreak % new, otherwise problems when many in a row
- \prevdepth\strutdp
- \egroup
- \fi}
-
-\let\forcedbotbaselinecorrection\botbaselinecorrection
-
-%D Still very experimental and therefore undocumented.
-
-\newif\ifgridsnapping % UNDER DEVELOPMENT, USE WITH CARE
-\newif\ifforcepresnap \forcepresnaptrue % false in mixed single/double
-\newif\ifstrutsnapping \strutsnappingtrue % sometimes handy to be false
-
-\def\positiveextrasnap {\gdef\extrasnapsign{+}}
-\def\negativeextrasnap {\gdef\extrasnapsign{-}}
-
-\def\extrasnapreset {\global\chardef\@@extrasnap0
- \positiveextrasnap}
-\def\extrasnapbefore {\global\chardef\@@extrasnap1 }
-\def\extrasnaparound {\global\chardef\@@extrasnap2 }
-\def\extrasnapafter {\global\chardef\@@extrasnap3 }
-
-\def\enablepresnapcorrection {\global\chardef\@@presnap\zerocount}
-\def\disablepresnapcorrection {\global\chardef\@@presnap\plusone}
-
-\extrasnapreset \enablepresnapcorrection
-
-\newif\iftracegridsnapping
-\newif\ifshowgridboxes
-\newif\ifshowfuzzyskips
-
-\let\showgridboxes\showgridboxestrue
-
-\def\showgridsnapping
- {\tracegridsnappingtrue
- \showgridboxestrue}
-
-\chardef\@@alignsnap =0
-\chardef\@@alignsnapbox =0
-\chardef\@@alignsnapmethod=0
-
-\let\presnapskip \!!zeropoint \def\presnap {-}
-\let\postsnapskip\!!zeropoint \let\postsnap\presnap
-
-\newcount\currentgridsnap
-
-\def\tracedsnapping
- {\iftracegridsnapping
- \llap
- {\setlayoutcomponentattribute\v!grid\v!test
- \hbox \layoutcomponentboxattribute
- {\infofont
- \global\advance\currentgridsnap\plusone
- \color[grid:three]
- {\vl\presnapskip
- \vl\presnap
- \vl\postsnap
- \ifcase\@@alignsnapbox\relax\vl\ifcase\@@extrasnap00\or\extrasnapsign0\or\extrasnapsign\extrasnapsign\or0\extrasnapsign\fi\fi
- \vl\the\currentgridsnap\vl}}}%
- \fi}
-
-\def\snaptogrid% [#1]#2 -> #2 == \hbox|\vbox
- {\dosingleempty\dosnaptogrid}
-
-% \def\dosnaptogrid[#1]%
-% {\ifgridsnapping
-% \iffirstargument\doifsomething{#1}{\verplaatsopgrid[#1]}\fi
-% \expandafter\dodosnaptogrid
-% \fi}
-
-% \def\dosnaptogrid[#1]%
-% {\resetlastlinewidth % maybe in more places, otherwise spacing gets messed up
-% \ifgridsnapping
-% \iffirstargument\doifsomething{#1}{\moveongrid[#1]}\fi
-% \expandafter\dodosnaptogrid
-% \fi}
-
-\def\dosnaptogrid[#1]%
- {\resetlastlinewidth % maybe in more places, otherwise spacing gets messed up
- \doifinsetelse\v!force{#1}%
- {\moveongrid[#1]%
- \dodosnaptogrid}
- {\ifgridsnapping
- \doifsomething{#1}{\moveongrid[#1]}%
- \expandafter\dodosnaptogrid
- \fi}}
-
-% \def\forcedpresnapcorrection % test this on 'details'
-% {\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
-% \allowbreak\verticalstrut\nobreak\vskip-\struttotal
-% %\ifdim\pagetotal>\topskip \else
-% % eigenlijk signal
-% %\writestatus{grid}{removing dummy at top of page}%
-% %\bgroup
-% %\output{\setbox\scratchbox\box255}%
-% %\penalty\outputpenalty
-% %\egroup
-% %\fi
-% \fi}
-
-\def\forcedpresnapcorrection % test this on 'details'
- {\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 % 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}%
- %\bgroup
- %\output{\setbox\scratchbox\box255}%
- %\penalty\outputpenalty
- %\egroup
- %\fi
- \fi}
-
-\def\setgridtracebox#1[#2]% % maybe reverse the order
- {\setbox\nextbox#1%
- {\hbox
- {\hbox to \zeropoint
- {\setlayoutcomponentattribute\v!grid\v!test
- \color[grid:#2]{\ruledhbox \layoutcomponentboxattribute {\fakebox\nextbox}}%
- \hss}%
- \flushnextbox}}}
-
-\newif\ifboxedsnapping \boxedsnappingtrue
-
-\chardef\depthsnapmethod \plusone % downward compatible, minus one line
-\chardef\heightsnapmethod\plusone % downward compatible, minus one line
-
-\def\dodosnaptogrid
- {\dowithnextbox
- {\bgroup
- \ifcase\@@alignsnapmethod \or
- % we're dealing with text with a possible big depth/height
- \chardef\depthsnapmethod \plustwo
- \chardef\heightsnapmethod\plustwo
- \fi
- \ifdim\nextboxht<\textheight % handle special case (like page fig)
- \ifcase\@@alignsnapbox\relax
- \ifcase\@@alignsnap\else % 1=top 2=high 3=middle 4=low
- \ifshowgridboxes
- \setgridtracebox\hbox[two]%
- \fi
- %\getnoflines{\nextboxht}%
- \getnoflines\nextboxht
- \setbox\nextbox\vbox to \noflines\lineheight
- {\ifnum\@@alignsnap=1 \kern\lineheight\kern-\topskip\fi
- \ifnum\@@alignsnap>2 \vfill\fi
- \flushnextbox
- \ifnum\@@alignsnap<4 \vfill\fi}%
- \fi
- \ifshowgridboxes
- \setgridtracebox\hbox[three]%
- \fi
- \forgetall
- \par
- \ifvbox\nextbox
- \setbox\nextbox\hbox{\flushnextbox}% don't ask
- \fi
- \scratchskip\lastskip
- \edef\presnapskip{\the\lastskip}%
- % mixing single/double columns sometimes goes wrong,
- % check 'som' document
- \ifinsidecolumns
- \forcepresnaptrue
- \fi
- \forcedpresnapcorrection
- \ifdim\nextboxht>\strutht
- \scratchdimen\nextboxht
- \ifcase\@@presnap\relax
- \ifdim\scratchskip>\zeropoint\relax
- \scratchcounter\scratchskip
- \advance\scratchcounter -\openlineheight
- \ifnum\scratchcounter<0
- \scratchcounter-\scratchcounter
- \fi
- \ifnum\scratchcounter<10 % \lastkip is about \openlineheight
- \advance\scratchdimen -\openstrutdepth
- \edef\presnapskip{*\presnapskip}%
- \else\ifdim\scratchskip>\openlineheight
- %<\openlineheight \else
- \advance\scratchdimen -\openstrutdepth
- \edef\presnapskip{*\presnapskip}%
- \fi\fi
- \fi
- \fi
- % \getnoflines\scratchdimen % maybe raw ?
- % \advance\noflines -1
- \ifcase\heightsnapmethod
- % raw
- \or
- \advance\scratchdimen-\lineheight % tight (default)
- \or
- \advance\scratchdimen-\strutheight % fit (text)
- \or
- \advance\scratchdimen-\strutheight % tolerant
- \advance\scratchdimen-\roundingeps
- \fi
- \getnoflines\scratchdimen
- \ifnum\noflines>0
- \scratchdimen\noflines\lineheight
- \else
- \scratchdimen\zeropoint
- \fi
- \else
- \scratchdimen\zeropoint
- \fi
- \ifnum\@@extrasnap=1 \advance\scratchdimen \extrasnapsign \lineheight \fi
- \ifnum\@@extrasnap=2 \advance\scratchdimen \extrasnapsign.5\lineheight \fi
- \edef\presnap{\the\scratchdimen}%
- \ifstrutsnapping
- \ifboxedsnapping
- \getrawnoflines\scratchdimen
- \advance\scratchdimen-\noflines\lineheight
- \vskip\scratchdimen % disappears at top of page
- \dorecurse\noflines{\verticalstrut\nobreak}%
- \else \ifdim\scratchdimen=\zeropoint
- % nothing to skip
- \else % disappears at top of page
- \vskip\scratchdimen
- \fi \fi
- \fi
- \ifdim\nextboxdp>\strutdp
- % \getnoflines\nextboxdp
- % \advance\noflines \minusone
- \scratchdimen\nextboxdp\relax
- \ifcase\depthsnapmethod
- % raw
- \or
- \advance\scratchdimen-\lineheight % tight (default)
- \or
- \advance\scratchdimen-\strutdepth % fit (text)
- \or
- \advance\scratchdimen-\strutdepth % tolerant
- \advance\scratchdimen-\roundingeps
- \fi
- \getnoflines\scratchdimen
- \ifnum\noflines>0
- \scratchdimen\noflines\lineheight
- \else
- \scratchdimen\zeropoint
- \fi
- \else
- \scratchdimen\zeropoint
- \fi
- \ifnum\@@extrasnap=2 \advance\scratchdimen \extrasnapsign.5\lineheight \fi
- \ifnum\@@extrasnap=3 \advance\scratchdimen \extrasnapsign \lineheight \fi
- \edef\postsnap{\the\scratchdimen}%
- \ifstrutsnapping
- \nextboxht\strutht
- \nextboxdp\strutdp
- \else
- \scratchdimen\presnap
- \advance\scratchdimen \strutht
- \nextboxht\scratchdimen
- \scratchdimen\postsnap
- \advance\scratchdimen \strutdp
- \nextboxdp\scratchdimen
- \fi
- \hbox{\tracedsnapping\flushnextbox}%
- \ifstrutsnapping
- \ifdim\scratchdimen=\zeropoint\else\vskip\scratchdimen\fi
- \fi
- \else
- \scratchdimen\nextboxht\relax
- \ifcase\@@alignsnapbox
- % can't happen here
- \or
- \getrawnoflines\scratchdimen
- \else
- \getnoflines \scratchdimen
- \fi
- \scratchdimen\noflines\lineheight\relax
- \advance\scratchdimen-\strutdepth
- % spoils the whole game (fit/broad/line)
- % \ifnum\pagetotal>\zeropoint \else % disable this as option
- % \advance\scratchdimen-\strutheight
- % \advance\scratchdimen+\topskip
- % \fi
- \dimen0=\scratchdimen
- \dimen2=\strutdepth
- \ifshowgridboxes
- \setgridtracebox\hbox[two]%
- \fi
- \nextboxdp\strutdp
- \dimen4=\nextboxht
- \dimen6=\nextboxdp
- \iftracegridsnapping
- \setbox\scratchbox\hbox
- {\scratchdimen\@@alignsnapamount\relax
- \ifdim\scratchdimen<\zeropoint
- \tracedgridamount\zeropoint{-\scratchdimen}%
- \else
- \tracedgridamount\scratchdimen\zeropoint
- \fi}%
- \smashbox\scratchbox
- \setbox\nextbox\hbox{\box\scratchbox\flushnextbox}%
- \fi
- \setbox\nextbox\hbox
- {\scratchdimen\@@alignsnapamount\relax
- \ifcase\@@alignsnapdepth\or
- % don't change this ever !
- \ifdim\dimen0<\lineheight
- % otherwise it is ok, but ending up inside
- % the next paragraph is seldom what we want,
- % so we move one line up
- \advance\scratchdimen-\lineheight
- \advance\scratchdimen\strutheight
- \else
- % otherwise we can move down to the
- % baseline
- \advance\scratchdimen\dimen6 % == \strutdepth
- \fi
- \fi
- \lower\scratchdimen\flushnextbox}%
- \nextboxht\dimen4
- \nextboxdp\dimen6
- \ifnum\@@alignsnap<4 % 4 = regel
- \setbox\nextbox\vbox to \scratchdimen
- {\forgetall
- \ifnum\@@alignsnap>2 \vfill\fi % 3 4
- \flushnextbox
- \nointerlineskip % \offinterlineskip
- \ifnum\@@alignsnap<4 \vfill\fi % 2 3
- \kern\zeropoint}%
- \fi
- \ifshowgridboxes
- \setgridtracebox\vbox[three]%
- \fi
- \scratchdimen\@@alignsnapamount
- \edef\presnapskip{\the\scratchdimen}%
- \ifnum\@@alignsnap>2 \def\presnap {+}\fi
- \ifnum\@@alignsnap<4 \def\postsnap{+}\fi
- \setbox\nextbox\hbox{\tracedsnapping\flushnextbox}%
- \par
- \nextboxht\dimen0
- \nextboxdp\dimen2
- \forcedpresnapcorrection
- \nointerlineskip
- \flushnextbox
- \fi
- \else
- \setbox\nextbox\vbox to \textheight
- {\ifdim\nextboxdp=\zeropoint
- \hbox{\lower\strutdepth\flushnextbox}
- \else % this branch is yet untested
- \vss
- \hbox{\lower\nextboxdp\flushnextbox}
- \vskip-\strutdepth
- \fi}%
- \nextboxdp\strutdepth
- \flushnextbox
- \fi
- \extrasnapreset
- \enablepresnapcorrection
- \global\chardef\@@alignsnap\zerocount
- \global\chardef\@@alignsnapbox\zerocount
- \egroup}}
-
-\def\tracedgridamount#1#2%
- {\startcolor[grid:four]%
- \setlayoutcomponentattribute\v!grid\v!test
- \hbox \layoutcomponentboxattribute{\vrule\!!width\nextboxwd\!!height#1\!!depth#2}%
- \stopcolor}
-
-\def\snaptomathgrid % probably not working ok, also kind of obsolete
- {\ifgridsnapping
- \dowithnextbox
- {\blank[\v!line]\snaptogrid\vbox{\flushnextbox}\blank[\v!line]}
- \vbox\bgroup
- \forgetdisplayskips
- \@EA\let\@EA\next
- \fi}
-
-\def\topsnaptogrid
- {\ifgridsnapping
- \dowithnextbox
- {\scratchdimen\nextboxht
- \advance\scratchdimen -\strutht
- \advance\scratchdimen \topskip
- \nextboxht\scratchdimen
- \nextboxdp\zeropoint
- \flushnextbox
- \kern\lineheight
- \kern-\topskip
- \nointerlineskip}
- \hbox
- \fi}
-
-% \def\centertogrid % meant for special situations
-% {\ifgridsnapping
-% \dowithnextboxcontent
-% {\ignorespaces}
-% {\bgroup
-% \par
-% \scratchdimen\nextboxht
-% \advance\scratchdimen \nextboxdp
-% \getnoflines\scratchdimen
-% \setbox\nextbox\vbox to \noflines\lineheight
-% {\forgetall
-% \vskip\zeropoint \!!plus \nextboxht
-% \copy\nextbox
-% \kern.5\strutdp % VOORLOPIGE WAARDE
-% \vskip\zeropoint \!!plus \nextboxdp}%
-% \noindent\snaptogrid\vbox{\flushnextbox}%
-% \egroup}
-% \vbox % was \hbox
-% \fi}
-
-% The next implementation is sub-optimal
-%
-% \def\centertogrid % usage: see ie pascal / stepcharts
-% {\snaptogrid[\v!midden,.5\strutdp]\vbox}
-
-\def\centertogrid % meant for special situations
- {\ifgridsnapping
- \dowithnextboxcontent
- {\ignorespaces}
- {\bgroup
- \par
- \scratchdimen\nextboxht
- \advance\scratchdimen \nextboxdp
- \getnoflines\scratchdimen
- \setbox\nextbox\vbox to \noflines\lineheight
- {\forgetall
- \vss
- \topbaselinecorrection
- \copy\nextbox
- \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
- \fi}
-
-% testbed for \centertogrid
-%
-% \strut Bruggetje
-% \startlinecorrection
-% \startcombination
-% {\framed{test}} {} {\framed{test}} {}
-% \stopcombination
-% \stoplinecorrection
-% \strut Bruggetje
-% \startlinecorrection
-% \startcombination[2*2]
-% {\framed{test}} {} {\framed{test}} {}
-% {\framed{test}} {} {\framed{test}} {}
-% \stopcombination
-% \stoplinecorrection
-% \strut Bruggetje
-% \startlinecorrection[blank]
-% \startcombination
-% {\framed{test}} {} {\framed{test}} {}
-% \stopcombination
-% \stoplinecorrection
-% \strut Bruggetje
-% \startlinecorrection[blank]
-% \startcombination[2*2]
-% {\framed{test}} {} {\framed{test}} {}
-% {\framed{test}} {} {\framed{test}} {}
-% \stopcombination
-% \stoplinecorrection
-% \strut Bruggetje
-% \startlinecorrection
-% \startcombination
-% {\framed[lines=1]{test}} {} {\framed[lines=1]{test}} {}
-% \stopcombination
-% \stoplinecorrection
-% \strut Bruggetje
-% \startlinecorrection
-% \startcombination[2*2]
-% {\framed[lines=1]{test}} {} {\framed[lines=1]{test}} {}
-% {\framed[lines=1]{test}} {} {\framed[lines=1]{test}} {}
-% \stopcombination
-% \stoplinecorrection
-% \strut Bruggetje
-% \startlinecorrection[blank]
-% \startcombination
-% {\framed[lines=1]{test}} {} {\framed[lines=1]{test}} {}
-% \stopcombination
-% \stoplinecorrection
-% \strut Bruggetje
-% \startlinecorrection[blank]
-% \startcombination[2*2]
-% {\framed[lines=1]{test}} {} {\framed[lines=1]{test}} {}
-% {\framed[lines=1]{test}} {} {\framed[lines=1]{test}} {}
-% \stopcombination
-% \stoplinecorrection
-
-\ifx\startbaselinecorrection\undefined \wait \fi % change order
-
-\let\normalstartbaselinecorrection=\startbaselinecorrection
-
-\def\startbaselinecorrection
- {\ifgridsnapping
- \centertogrid\bgroup
- \let\stopbaselinecorrection\egroup
- \else
- \normalstartbaselinecorrection
- \fi}
-
-\chardef\gridboxlinenomode\plusone
-\chardef\gridboxlinemode \plusone % 0:nothing 1:all 2:lines 3:frame
-
-\def\gridboxvbox {\ifcase\gridboxlinemode\vbox\or\ruledvbox\or\vbox\or\ruledvbox\else\ruledvbox\fi}
-\def\gridboxwidth{\ifcase\gridboxlinemode0\or.5\or.5\or0\else.5\fi\testrulewidth}
-
-\def\setgridbox#1#2#3%
- {\setbox#1\gridboxvbox to #3 % given size
- {\forgetall
- \resetteststrut
- \offinterlineskip
- \hsize#2%
- \baselinerulefalse
- \gridboxvbox % calculated size
- {\getrawnoflines{#3}% \getnoflines{#3}%
- \vskip\topskip
- \vskip-\strutht
- \scratchdimen#2\advance\scratchdimen \lineheight
- \dorecurse\noflines
- {\strut
- \hskip-.5\lineheight
- \ifcase\gridboxlinenomode\or
- \rlap
- {\hskip.2\bodyfontsize\hskip\scratchdimen
- \infofont\hbox to 1em{\hss\recurselevel}}%
- \or
- \llap
- {\infofont\hbox to 1em{\hss\recurselevel}%
- \hskip.2\bodyfontsize}%
- \fi
- \vrule
- \!!height \gridboxwidth
- \!!depth \gridboxwidth
- \!!width \scratchdimen
- \par}}
- \vfill}}
-
-%D Some intervention macros:
-
-\def\gridwarning#1{\message{[beware of #1 extra snap]}}
-
-\global\let\@@alignsnapamount\!!zeropoint
-\global\chardef\@@alignsnapdepth0
-
-\def\@@unknowngriddisplacement
- {\global\chardef\@@alignsnapbox\plusthree
- \global\let\@@alignsnapamount\commalistelement}
-
-\def\domoveongrid[#1]%
- {\ifgridsnapping\doifsomething{#1}{\dodomoveongrid[#1]}\fi}
-
-\def\dodomoveongrid[#1]% some day : speed up
- {\global\chardef\@@alignsnap\zerocount
- \global\chardef\@@alignsnapbox\zerocount
- \global\chardef\@@alignsnapdepth\zerocount
- \global\chardef\@@alignsnapmethod\zerocount
- \global\let\@@alignsnapamount\!!zeropoint
- \donefalse
- \expanded{\processallactionsinset[#1]}
- [\v!standard=>,
- \v!normal=>, % to be sure
- \v!yes=>, % to be sure
- \v!top=>\gridwarning+\positiveextrasnap\extrasnapbefore,
- \v!bottom=>\gridwarning+\positiveextrasnap\extrasnapafter,
- \v!both=>\positiveextrasnap\extrasnaparound,
- -\v!top=>\gridwarning-\negativeextrasnap\extrasnapbefore,
- -\v!bottom=>\gridwarning-\negativeextrasnap\extrasnapafter,
- -\v!both=>\negativeextrasnap\extrasnaparound,
- \v!text=>\global\chardef\@@alignsnapmethod\plusone, % accurate calculations
- \v!page=>\global\chardef\@@alignsnap\plusone, % topskip
- \v!high=>\global\chardef\@@alignsnap\plustwo,
- \v!middle=>\global\chardef\@@alignsnap\plusthree,
- \v!low=>\global\chardef\@@alignsnap\plusfour,
- \v!fit=>\global\chardef\@@alignsnapbox\plusone, % new
- \v!broad=>\global\chardef\@@alignsnapbox\plustwo, % new
- \v!depth=>\global\chardef\@@alignsnapdepth\plusone, % new
- \v!line=>\global\chardef\@@alignsnapbox\plusthree
-% \global\chardef\@@alignsnapdepth\plusone
- \global\chardef\@@alignsnap\plusfour,
- \v!reset=>\positiveextrasnap\extrasnapreset,
- \v!none=>\global\chardef\@@alignsnap\zerocount
- \global\chardef\@@alignsnapbox\zerocount,
- \v!force=>, % turns on grid snapping even when not on
- \s!default=>,
- \s!unknown=>\@@unknowngriddisplacement]}
-
-\def\moveongrid
- {\dosingleempty\domoveongrid}
-
-\def\doplaceongrid[#1]%
- {\domoveongrid[#1]\snaptogrid\vbox}
-
-\def\placeongrid
- {\dosingleempty\doplaceongrid}
-
-%D Snapping is rather robust as long as we use whole lines.
-%D Half lines of white space can however be handled when they
-%D come in pairs. The corrections needed when crossing page
-%D boundaries in the middle of such a pair, are handled by
-%D macros that are (named) sort of fuzzy. This fuzzy mechanism
-%D was written as an extension to the grid typesetting needed
-%D for typesetting (part of) the \MAPS.
-%D
-%D \starttyping
-%D \setuptyping
-%D [before={\blank[halfline]},
-%D after={\blank[halfline]}]
-%D \stoptyping
-
-\newif \iffuzzyvskip
-\newif \iffuzzysnapdone
-\newif \iffuzzysnapping
-\newif \iffuzzysnapped
-\chardef \fuzzysnappedleft=0 % ==1 when fuzzybegin still open
-\newpersistentmark\fuzzymark % (!)
-\newcount \fuzzymarker
-\newbox \fuzzysnapbox
-\newbox \fuzzysnapsplit
-
-\def\dosyncfuzzyvskip
- {\ifvmode\ifdim\lastskip<\lineheight\ifdim\lastskip>\zeropoint
- \bgroup % - added 28/2/2003: check this, there was no -
- \endgraf\forgetall\verticalstrut\nobreak\vskip-\struttotal
- \egroup
- \fi\fi\fi}
-
-\def\fuzzyvskip#1%
- {\iffuzzysnapdone
- \dosyncfuzzyvskip % NEWER
- \endfuzzysnapping
- \vskip#1\relax
- \global\fuzzysnapdonefalse
- \else
- \vskip#1\relax
- \beginfuzzysnapping
- \global\fuzzysnapdonetrue
- \fi}
-
-\def\setfuzzymark#1#2#3% #1/#2 => error recovery
- {\ifgridsnapping
- \global\fuzzysnappingtrue
- \global\advance\fuzzymarker \ifodd\fuzzymarker#1\else#2\fi
- \nobreak
- \ifshowfuzzyskips
- \hbox{\color[grid:three]
- {\llap{\infofont#3\vl\the\fuzzymarker}\nobreak
- \vrule\!!width\hsize\!!height.1\lineheight}}
- \nobreak
- \fi
- %[\the\fuzzymarker]
- %\expandafter\fuzzymark\expandafter{\the\fuzzymarker}%
- \expandafter\rawsetmark\expandafter\fuzzymark\expandafter{\the\fuzzymarker}%
- \nobreak
- \fi}
-
-\def\beginfuzzysnapping{\setfuzzymark21\v!start} % odd
-\def\endfuzzysnapping {\setfuzzymark12\v!stop } % even
-
-\def\removelastfuzzyvskip
- {\ifgridsnapping
- \iffuzzysnapping
- \ifdim\lastskip<\openlineheight
- \else
- \removelastskip
- \fi
- \else
- \removelastskip
- \fi
- \else
- \removelastskip
- \fi}
-
-\def\docheckfuzzysnap#1%
- {\bgroup
- \dontcomplain
- \setbox\fuzzysnapbox\copy#1\relax
- \setbox\fuzzysnapsplit\vsplit\fuzzysnapbox to 1\lineheight
- \let\topfuzzymark\empty % indeed here ... no real mark
- \getsplitmarks\fuzzymark
-% \ifcase0\topfuzzymark
- \ifcase0\rawgetsplittopmark\fuzzymark
- \global\chardef\fuzzysnappedleft\zerocount
- \global\fuzzysnappedfalse
-% \else\ifodd\topfuzzymark
- \else\ifodd\rawgetsplittopmark\fuzzymark
- \global\chardef\fuzzysnappedleft\plusone
- \global\fuzzysnappedtrue
- \else
- \global\chardef\fuzzysnappedleft=2
- \global\fuzzysnappedtrue
- \fi\fi
- \iffuzzysnapped \else
- \doloop
- {\ifvoid\fuzzysnapbox
- \exitloop
- \else
- \setbox\fuzzysnapsplit=\vsplit\fuzzysnapbox to \lineheight
- %\let\topfuzzymark=\empty % ... but not here
- \getsplitmarks\fuzzymark
-% \ifcase0\topfuzzymark
- \ifcase0\rawgetsplittopmark\fuzzymark
- % continue
-% \else\ifodd\topfuzzymark
- \else\ifodd\rawgetsplittopmark\fuzzymark
- \exitloop
- \else
- \global\chardef\fuzzysnappedleft\plusone
- \global\fuzzysnappedtrue
- \exitloop
- \fi\fi
- \fi}%
- \fi
- \egroup}
-
-\def\getfuzzysnapcorrection#1%
- {\global\let\presnapcorrection \relax
- \global\let\postsnapcorrection\relax
- \ifgridsnapping\iffuzzysnapping
- \docheckfuzzysnap{#1}%
- \iffuzzysnapped
- \iftracegridsnapping
- \gdef\presnapcorrection
- {\color[grid:four]{\hrule\!!height.5\openlineheight\!!width\hsize}}%
- \else
- \gdef\presnapcorrection{\kern.5\openlineheight}%
- \fi
- \gdef\postsnapcorrection{\kern-.5\openlineheight}% get the height ok
- \fi
- \fi\fi}
-
-\def\fuzzysnappedbox#1#2% \box<n> \unvbox<n>
- {\getfuzzysnapcorrection{#2}%
- \presnapcorrection
- #1#2%
- \postsnapcorrection}
-
-\def\adaptfuzzypagegoal
- {\ifgridsnapping\iffuzzysnapping\ifcase\fuzzysnappedleft\or % see dopagecontents
- \scratchdimen\pagegoal
- \advance\scratchdimen -.5\openlineheight
- \global\pagegoal\scratchdimen
- \global\advance\vsize -.5\openlineheight
- \global\chardef\fuzzysnappedleft0
- \fi\fi\fi}
-
-%D New, experimental, used in caption snapping:
-%D
-%D \starttyping
-%D \startcolumnset
-%D
-%D \setupcaption[figure][style=\tfx\setupinterlinespace,inbetween=,grid=top]
-%D
-%D \placefigure [lrtb] {\dorecurse{5}{green gras}}
-%D {\externalfigure[dummy][width=\textwidth,height=3cm,grid=height]}
-%D \placefigure [lrtb] {\dorecurse{15}{green gras}}
-%D {\externalfigure[dummy][width=\textwidth,height=3cm,grid=height]}
-%D
-%D \setupcaption[figure][style=\tfx\setupinterlinespace,inbetween=,grid=bottom]
-%D
-%D \placefigure [rltb] {\dorecurse{5}{green gras}}
-%D {\externalfigure[dummy][width=\textwidth,height=3cm,grid=height]}
-%D \placefigure [rltb] {\dorecurse{15}{green gras}}
-%D {\externalfigure[dummy][width=\textwidth,height=3cm,grid=height]}
-%D
-%D \input thuan
-%D
-%D \stopcolumnset
-%D \stoptyping
-
-\def\moveboxontogrid#1#2#3% box method firstlineht % experimental ! ! !
- {\doifsomething{#2}
- {\getnoflines{\ht#1}% no depth taken into account, depth preserved
- \scratchdimen\noflines\lineheight
- \advance\scratchdimen-\strutdp
- \bgroup
- \advance\scratchdimen-\onepoint % be a bit tolerant
- \ifdim\scratchdimen>\ht#1\relax
- \egroup
- \doif{#2}\v!top {\setbox#1\vbox to \scratchdimen{\vskip-#3\vskip\strutht\box#1\vfill}}%
- \doif{#2}\v!bottom{\setbox#1\vbox to \scratchdimen{\vfill\box#1\removedepth}}%
- \dp#1\strutdp
- \else
- \egroup
- \ht#1\scratchdimen
- \dp#1\strutdp
- \fi}}
-
-%D New:
-
-\let\checkgridsnapping\relax
-
-\protect \endinput
diff --git a/Master/texmf-dist/tex/context/base/core-ini.mkiv b/Master/texmf-dist/tex/context/base/core-ini.mkiv
index a01abdd1117..d6a72bb2614 100644
--- a/Master/texmf-dist/tex/context/base/core-ini.mkiv
+++ b/Master/texmf-dist/tex/context/base/core-ini.mkiv
@@ -53,7 +53,7 @@
\appendtoks \removeunwantedspaces \to \everyendofpar
%appendtoks \strut \to \everyendofpar % option ?
\appendtoks \flushsyncresets \to \everyendofpar
-\appendtoks \setlastlinewidth \to \everyendofpar % must happen before endgraf
+%appendtoks \setlastlinewidth \to \everyendofpar % gone, will be done in lua
\appendtoks \endgraf \to \everyendofpar
% Todo: verbatim, xml, tex, move code to here
diff --git a/Master/texmf-dist/tex/context/base/core-job.lua b/Master/texmf-dist/tex/context/base/core-job.lua
index fb4f76de15c..d557818bb35 100644
--- a/Master/texmf-dist/tex/context/base/core-job.lua
+++ b/Master/texmf-dist/tex/context/base/core-job.lua
@@ -1,30 +1,35 @@
if not modules then modules = { } end modules ['core-job'] = {
version = 1.001,
- comment = "companion to core-job.tex",
+ comment = "companion to core-job.mkiv",
author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
copyright = "PRAGMA ADE / ConTeXt Development Team",
license = "see context related readme files"
}
-local texsprint, texprint, format, find, gmatch = tex.sprint, tex.print, string.format, string.find, string.gmatch
-
-local ctxcatcodes = tex.ctxcatcodes
-local texcatcodes = tex.texcatcodes
+local texsprint, texprint, texwrite = tex.sprint, tex.print, tex.write
+local ctxcatcodes, texcatcodes = tex.ctxcatcodes, tex.texcatcodes
+local lower, format, find, gmatch, gsub, match = string.lower, string.format, string.find, string.gmatch, string.gsub, string.match
+local concat = table.concat
-- main code
-function resolvers.findctxfile(name,maxreadlevel)
- local function exists(n)
+resolvers.maxreadlevel = 3
+
+directives.register("resolvers.maxreadlevel", function(v) resolvers.maxreadlevel = tonumber(v) or resolvers.maxreadlevel end)
+
+local function exists(n)
+ if io.exists(n) then
+ return n
+ else
+ n = file.addsuffix(n,'tex')
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
+ return nil
+end
+
+function resolvers.findctxfile(name,maxreadlevel)
if file.is_qualified_path(name) then
return name
else
@@ -34,7 +39,7 @@ function resolvers.findctxfile(name,maxreadlevel)
if found then
return found
else
- for i=1,maxreadlevel or 0 do
+ for i=1,maxreadlevel or resolvers.maxreadlevel or 0 do
n = "../" .. n
found = exists(n)
if found then
@@ -46,6 +51,10 @@ function resolvers.findctxfile(name,maxreadlevel)
end
end
+function commands.maxreadlevel()
+ texwrite(resolvers.maxreadlevel)
+end
+
function commands.processfile(name,maxreadlevel)
name = resolvers.findctxfile(name,maxreadlevel)
if name ~= "" then
@@ -63,12 +72,12 @@ end
function commands.usepath(paths,maxreadlevel)
resolvers.register_extra_path(paths)
- texsprint(texcatcodes,table.concat(resolvers.instance.extra_paths or {}, ""))
+ texsprint(texcatcodes,concat(resolvers.instance.extra_paths or {}, ""))
end
function commands.usesubpath(subpaths,maxreadlevel)
resolvers.register_extra_path(nil,subpaths)
- texsprint(texcatcodes,table.concat(resolvers.instance.extra_paths or {}, ""))
+ texsprint(texcatcodes,concat(resolvers.instance.extra_paths or {}, ""))
end
function commands.usezipfile(name,tree)
@@ -89,16 +98,15 @@ end
local function convertexamodes(str)
local x = 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
+ for e in xml.collected(x,"exa:variable") do
+ local label = e.at and e.at.label
if label and label ~= "" then
- local data = xml.content(dk) or ""
- local mode = label:match("^mode:(.+)$")
+ local data = xml.text(e)
+ local mode = match(label,"^mode:(.+)$")
if mode then
texsprint(ctxcatcodes,format("\\enablemode[%s:%s]",mode,data))
end
- texsprint(ctxcatcodes,format("\\setvariable{exa:variables}{%s}{%s}",label,data:gsub("([{}])","\\%1")))
+ texsprint(ctxcatcodes,format("\\setvariable{exa:variables}{%s}{%s}",label,gsub(data,"([{}])","\\%1")))
end
end
end
diff --git a/Master/texmf-dist/tex/context/base/core-job.mkii b/Master/texmf-dist/tex/context/base/core-job.mkii
index a8a753e0db2..5c280c15b14 100644
--- a/Master/texmf-dist/tex/context/base/core-job.mkii
+++ b/Master/texmf-dist/tex/context/base/core-job.mkii
@@ -203,6 +203,11 @@
\expandafter\finalend
\fi}
+\def\forcequitjob#1%
+ {\writestatus\m!systems{forcing quit: #1}%
+ \batchmode
+ \dorecurse\textlevel\stoptext
+ \normalend}
\let\autostoptext\relax
diff --git a/Master/texmf-dist/tex/context/base/core-job.mkiv b/Master/texmf-dist/tex/context/base/core-job.mkiv
index 7231ac383c1..de328c92bca 100644
--- a/Master/texmf-dist/tex/context/base/core-job.mkiv
+++ b/Master/texmf-dist/tex/context/base/core-job.mkiv
@@ -51,9 +51,9 @@
\def\processlocalfile#1#2%
{#1{#2}\donothing{\readfile{#2}\donothing\donothing}}
-\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\processfile #1{\ctxlua{commands.processfile("#1")}}
+\def\doifinputfileelse #1{\ctxlua{commands.doifinputfileelse("#1")}}
+\def\locatefilepath #1{\edef\locatedfilepath{\ctxlua{commands.locatefilepath("#1")}}}
\def\usepath [#1]{\edef\allinputpaths{\ctxlua{commands.usepath("#1")}}}
\def\usesubpath [#1]{\edef\allinputpaths{\ctxlua{commands.usesubpath("#1")}}}
\def\usezipfile {\dodoubleempty\dousezipfile}
@@ -114,24 +114,34 @@
{\the\everystarttext
\global\everystarttext\emptytoks}
-\def\starttext
+\unexpanded\def\starttext
{\doateverystarttext
\ifcase\textlevel
- \registerfileinfo[begin]\jobname
+ \registerfileinfo[begin]\jobfilename
\fi
\global\advance\textlevel\plusone}
-\def\stoptext
+\unexpanded\def\stoptext
{\global\advance\textlevel\minusone
\ifnum\textlevel>\zerocount \else
- \page[\v!last]\page % new, moved from everybye to here; flushes headers, colors etc etc etc
+ \flushfinallayoutpage % optional
+ \page % anyway
\the\everystoptext
%\the\everybye %
%\the\everygoodbye % == \end (new)
%\expandafter\normalend %
+\ifcase\textlevel
+ \registerfileinfo[end]\jobfilename
+\fi
\expandafter\finalend
\fi}
+\def\forcequitjob#1%
+ {\writestatus\m!systems{forcing quit: #1}%
+ \batchmode
+ \dorecurse\textlevel{\stoptext}
+ \normalend}
+
\let\autostoptext\relax
\def\autostarttext
@@ -181,7 +191,7 @@
\def\environment #1 % at outermost level only (load only once)
{\pushmacro\startenvironment
\pushmacro\stopenvironment
- \def\startenvironment ##1 {}%
+ \unexpanded\def\startenvironment ##1 {}%
\let\stopenvironment\relax
\startreadingfile
\doexecutefileonce{#1}
@@ -232,24 +242,24 @@
\expandafter\endinput
\fi}
-\def\startproject #1 %
+\unexpanded\def\startproject #1 %
{\donextlevel\v!project\currentproject
\donotexecutefile\doexecutefileonce
\doexecutefileonce\doexecutefile#1\\}
-\def\startproduct #1 %
+\unexpanded\def\startproduct #1 %
{\doateverystarttext
\donextlevel\v!product\currentproduct
\doexecutefileonce\doexecutefileonce
\donotexecutefile\doexecutefile#1\\}
-\def\startcomponent #1 %
+\unexpanded\def\startcomponent #1 %
{\doateverystarttext
\donextlevel\v!component\currentcomponent
\doexecutefileonce\doexecutefileonce
\donotexecutefile\doexecutefile#1\\}
-\def\startenvironment #1 %
+\unexpanded\def\startenvironment #1 %
{\donextlevel\v!environment\currentenvironment
\donotexecutefile\doexecutefileonce
\donotexecutefile\donotexecutefile#1\\}
@@ -259,10 +269,10 @@
% 2: \startmode[*product] product \stopmode \endgraf
% \stopproject
-\def\stopproject {\doprevlevel}
-\def\stopproduct {\doprevlevel}
-\def\stopcomponent {\doprevlevel}
-\def\stopenvironment{\doprevlevel}
+\unexpanded\def\stopproject {\doprevlevel}
+\unexpanded\def\stopproduct {\doprevlevel}
+\unexpanded\def\stopcomponent {\doprevlevel}
+\unexpanded\def\stopenvironment{\doprevlevel}
% more or less replaced by modes
@@ -295,21 +305,5 @@
% \appendtoks \flushnotes \to \everydisplay
% \appendtoks \adjustsidefloatdisplaylines \to \everydisplay
-
-\chardef\systemcommandmode\zerocount % 0=unknown 1=disabled 2=enabled
-
-\def\checksystemcommandmode
- {\ifx\pdfshellescape\undefined \else
- \chardef\systemcommandmode \ifcase\pdfshellescape \plusone \else \plustwo \fi
- \fi
- \global\let\checksystemcommandmode\relax}
-
-\def\reportsystemcommandmode
- {\ifcase\systemcommandmode
- \or
- \writestatus\m!systems{system commands are disabled}%
- \or
- \writestatus\m!systems{system commands are enabled}%
- \fi}
\protect \endinput
diff --git a/Master/texmf-dist/tex/context/base/core-mis.mkiv b/Master/texmf-dist/tex/context/base/core-mis.mkiv
index 65cf273c620..e2bd28bd511 100644
--- a/Master/texmf-dist/tex/context/base/core-mis.mkiv
+++ b/Master/texmf-dist/tex/context/base/core-mis.mkiv
@@ -169,7 +169,7 @@
\noindent\hbox{\box0\hskip-\wd2\box2}%
\dostopitems}
-\def\setupitems
+\unexpanded\def\setupitems
{\dosingleargument\dosetupitems}
\def\complexitems[#1]%
@@ -217,10 +217,10 @@
#2]%
\setvalue{\e!place#1}{\doplacement[\??pl#1]}}
-\def\defineplacement
+\unexpanded\def\defineplacement
{\dodoubleempty\dodefineplacement}
-\def\setupplacement
+\unexpanded\def\setupplacement
{\dodoubleempty\dosetupplacement}
\def\dosetupplacement[#1]%
@@ -334,7 +334,7 @@
\c!color=\paragraphparameter\c!color]}%
\setupparagraphs[\currentparagraph][1][\c!distance=\zeropoint]}
-\def\defineparagraphs
+\unexpanded\def\defineparagraphs
{\dodoubleargument\dodefineparagraphs}
\def\dosetupparagraphs[#1][#2][#3]%
@@ -352,7 +352,7 @@
\getparameters[\??al][#1]%
\fi}
-\def\setupparagraphs
+\unexpanded\def\setupparagraphs
{\dotripleempty\dosetupparagraphs}
\setupparagraphs
@@ -502,7 +502,7 @@
\c!before=\@@tabefore,
\c!after=\@@taafter]}
-\def\setuptab
+\unexpanded\def\setuptab
{\dosingleargument\dosetuptab}
\setuptab
@@ -618,12 +618,12 @@
%
% obsolete:
-\def\setuphyphenmark
+\unexpanded\def\setuphyphenmark
{\dodoubleargument\getparameters[\??kp]}
-\def\setuphyphenmark[#1]% sign=normal|wide
+\unexpanded\def\setuphyphenmark[#1]% sign=normal|wide
{\dodoubleargument\getparameters[\??kp][#1]%
- \doifinsetelse\@@kpsign {\v!normal}
+ \doifelse\@@kpsign {\v!normal}% was inset?
{\let\textmodehyphen\normalhyphen \let\textmodehyphendiscretionary\normalhyphendiscretionary}
{\let\textmodehyphen\composedhyphen\let\textmodehyphendiscretionary\composedhyphendiscretionary}}
@@ -642,14 +642,14 @@
\def\normalhyphendiscretionary
{\discretionary
- {\hbox{\directsymbol\empty\c!lefthyphen}}
{\hbox{\directsymbol\empty\c!righthyphen}}
+ {\hbox{\directsymbol\empty\c!lefthyphen}}
{\hbox{\directsymbol\empty\c!hyphen}}}
\def\composedhyphendiscretionary
{\discretionary
- {\hbox{\directsymbol\empty\c!leftcompoundhyphen}}
{\hbox{\directsymbol\empty\c!rightcompoundhyphen}}
+ {\hbox{\directsymbol\empty\c!leftcompoundhyphen}}
{\hbox{\directsymbol\empty\c!compoundhyphen}}}
\let\textmodehyphen \composedhyphen
@@ -739,8 +739,8 @@
%D \typebuffer
%D \getbuffer
-\def\startsubsentence{\beginofsubsentence \prewordbreak\beginofsubsentencespacing}
-\def\stopsubsentence {\endofsubsentencespacing\prewordbreak\endofsubsentence}
+\unexpanded\def\startsubsentence{\beginofsubsentence \prewordbreak\beginofsubsentencespacing}
+\unexpanded\def\stopsubsentence {\endofsubsentencespacing\prewordbreak\endofsubsentence}
%D \defineXMLenvironment [subsentence]
%D {|<|}
@@ -819,7 +819,7 @@
\def\doinitializetextlevel#1%
{\ifcsname\??ci:#1:\c!level\endcsname
- \newcount\csname\??ci:#1:\c!level\endcsname\zerocount
+ \csname\??ci:#1:\c!level\endcsname\zerocount
\else
\expandafter\newcount\csname\??ci:#1:\c!level\endcsname
\fi}
@@ -829,7 +829,7 @@
{\executeifdefined{\??ci\currentdelimitedtext#1}%
{\executeifdefined{\??ci#1}\empty}}}
-\def\definedelimitedtext
+\unexpanded\def\definedelimitedtext
{\dodoubleempty\dodefinedelimitedtext}
\def\dodefinedelimitedtext[#1][#2]%
@@ -859,11 +859,11 @@
\c!leftmargin,\c!rightmargin,\c!indentnext,
\c!before,\c!after,\c!left,\c!right]}}%
\doifsomething{#1}
- {\unexpanded\setvalue{#1}{\delimitedtext[#1]}%
+ {\setuvalue{#1}{\delimitedtext[#1]}%
\setvalue{\e!start#1}{\startdelimitedtext[#1]}%
\setvalue{\e!stop #1}{\stopdelimitedtext}}}
-\def\setupdelimitedtext
+\unexpanded\def\setupdelimitedtext
{\dotripleargument\dosetupdelimitedtext}
\def\dosetupdelimitedtext[#1][#2][#3]% #2 = optional level
@@ -882,7 +882,7 @@
\let\dohandlerepeatdelimitedtext\relax
-\def\startdelimitedtext[#1]%
+\unexpanded\def\startdelimitedtext[#1]%
{\bgroup
\pushdelimitedtext{#1}%
\doifelse{\delimitedtextparameter\c!method}\s!font
@@ -895,6 +895,39 @@
\doifinsetelse{\delimitedtextparameter\c!location}{\v!paragraph,\v!margin}%
{\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}% 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]}%
+% \dochecknextindentation{\??ci\currentdelimitedtext}% AM: here
+% \dorechecknextindentation}% AM: This was missing!
+
\def\dostartdelimitedtextpar[#1]%
{\let\dostopdelimitedtext\dostopdelimitedtextpar
\doifsomething{\delimitedtextparameter\c!spacebefore}
@@ -912,6 +945,9 @@
{\startnarrower[#1]\let\dodostopdelimitedtextpar\stopnarrower}%
% so far
% \dochecknextindentation{\??ci\currentdelimitedtext}% AM: not here
+ \pushmacro\checkindentation
+ \doifsomething{\delimitedtextparameter\c!indenting} % WS
+ {\setupindenting[\delimitedtextparameter\c!indenting]}%
\dostartattributes{\??ci\currentdelimitedtext}\c!style\c!color\empty
\leftdelimitedtextmark
\ignorespaces}
@@ -921,6 +957,7 @@
\removelastskip
\rightdelimitedtextmark
\dostopattributes
+ \popmacro\checkindentation
\dodostopdelimitedtextpar
\delimitedtextparameter\c!after
\doifsomething{\delimitedtextparameter\c!spaceafter}
@@ -939,7 +976,7 @@
\dohandlerightdelimitedtext\c!right
\dostopattributes}
-\def\stopdelimitedtext
+\unexpanded\def\stopdelimitedtext
{\dostopdelimitedtext
\popdelimitedtext
\egroup}
@@ -963,8 +1000,8 @@
% shortcuts
-\def\startdelimited{\startdelimitedtext}
-\def\stopdelimited {\stopdelimitedtext} % no let, dynamically assigned
+\unexpanded\def\startdelimited{\startdelimitedtext}
+\unexpanded\def\stopdelimited {\stopdelimitedtext} % no let, dynamically assigned
\def\delimited {\delimitedtext}
\def\leftdelimitedtextmark
@@ -1160,8 +1197,8 @@
% [\c!indentnext=\v!no,
% \c!spacebefore=\v!nowhite]
-\def\setupquotation{\setupdelimitedtext[\v!quotation]}
-\def\setupquote {\setupdelimitedtext[\v!quote]}
+\unexpanded\def\setupquotation{\setupdelimitedtext[\v!quotation]}
+\unexpanded\def\setupquote {\setupdelimitedtext[\v!quote]}
% seldom used, move from kernel to run time module
@@ -1320,7 +1357,7 @@
%
% \definesystemvariable{ri}
%
-% \def\setuprows
+% \unexpanded\def\setuprows
% {\dodoubleargument\getparameters[\??ri]}
%
% \definecomplexorsimpleempty\startrows
@@ -1343,7 +1380,7 @@
% \bgroup
% \row}
%
-% \def\stoprows
+% \unexpanded\def\stoprows
% {\do@@ribottom
% \egroup
% \egroup}
@@ -1556,7 +1593,7 @@
\newbox\firstpairedbox
\newbox\secondpairedbox
-\def\definepairedbox
+\unexpanded\def\definepairedbox
{\dodoubleempty\dodefinepairedbox}
\def\dodefinepairedbox[#1][#2]%
@@ -1580,13 +1617,13 @@
\setvalue{\e!setup#1\e!endsetup}{\setuppairedbox[#1]}%
\setvalue{\e!place#1}{\placepairedbox[#1]}}
-\def\setuppairedbox
+\unexpanded\def\setuppairedbox
{\dodoubleempty\dosetuppairedbox}
\def\dosetuppairedbox[#1]%
{\getparameters[\??ld#1]}
-\def\placepairedbox
+\unexpanded\def\placepairedbox
{\bgroup\dodoubleempty\doplacepairedbox}
\def\doplacepairedbox[#1][#2]% watch the hsize/vsize tricks
@@ -1736,10 +1773,12 @@
% todo: \startcombination \startcomb \stopcomb ...
+% needs to be mkiv'd
+
\newcount\horcombination % counter
\newcount\totcombination
-\def\definecombination
+\unexpanded\def\definecombination
{\dodoubleempty\dodefinecombination}
\def\dodefinecombination[#1][#2]%
@@ -1751,7 +1790,7 @@
\getparameters
[\??co#1][#2]}
-\def\setupcombinations
+\unexpanded\def\setupcombinations
{\dodoubleempty\dosetupcombinations}
\def\dosetupcombinations[#1][#2]%
@@ -1764,7 +1803,7 @@
\def\combinationparameter#1%
{\csname\??co\currentcombination#1\endcsname}%
-\def\startcombination
+\unexpanded\def\startcombination
{\bgroup % so we can grab a group
\dodoubleempty\dostartcombination}
@@ -1882,20 +1921,20 @@
% formally ok:
%
-% \def\stopcombination
+% \unexpanded\def\stopcombination
% {\egroup
% \egroup}
%
% more robust:
%
-% \def\stopcombination
+% \unexpanded\def\stopcombination
% {{}{}{}{}{}{}{}{}% catches (at most 4) missing entries
% \egroup
% \egroup}
%
% even better:
-\def\stopcombination
+\unexpanded\def\stopcombination
{{\scratchtoks{{}{}{}}\dorecurse\totcombination{\appendtoks{}{}{}{}\to\scratchtoks}\expandafter}\the\scratchtoks
\egroup
\egroup}
@@ -1966,7 +2005,7 @@
%D
%D \typebuffer \getbuffer
-\def\startfloatcombination
+\unexpanded\def\startfloatcombination
{\dodoubleempty\dostartfloatcombination}
\def\dostartfloatcombination[#1][#2]%
@@ -1974,7 +2013,7 @@
%\insidecolumnstrue % trick, forces no centering, todo: proper switch/feature
\chardef\postcenterfloatmethod\zerocount
\forcelocalfloats
- \def\stopfloatcombination
+ \unexpanded\def\stopfloatcombination
{\scratchtoks\emptytoks
\dorecurse\noflocalfloats
{\appendetoks{\noexpand\getlocalfloat{\recurselevel}}{}\to\scratchtoks}%
@@ -1982,7 +2021,7 @@
\resetlocalfloats
\egroup}}
-\def\placerelativetoeachother#1#2%
+\unexpanded\def\placerelativetoeachother#1#2%
{\bgroup
\dowithnextbox
{\bgroup
@@ -1995,8 +2034,8 @@
\hbox}
\hbox}
-\def\placeontopofeachother{\placerelativetoeachother\halign\hss}
-\def\placesidebyside {\placerelativetoeachother\valign\vss}
+\unexpanded\def\placeontopofeachother{\placerelativetoeachother\halign\hss}
+\unexpanded\def\placesidebyside {\placerelativetoeachother\valign\vss}
%D A couple of examples, demonstrating how the depth is
%D taken care of:
@@ -2217,7 +2256,7 @@
\presetlocalframed[\??ro]
-\def\setuprotate
+\unexpanded\def\setuprotate
{\dodoubleargument\getparameters[\??ro]}
\setuprotate
@@ -2255,7 +2294,7 @@
\def\??fr{@@fr}
-\def\setuphorizontaldivision
+\unexpanded\def\setuphorizontaldivision
{\dodoubleargument\getparameters[\??fr]}
\def\horizontaldivision
diff --git a/Master/texmf-dist/tex/context/base/core-spa.lua b/Master/texmf-dist/tex/context/base/core-spa.lua
deleted file mode 100644
index ab08755cc66..00000000000
--- a/Master/texmf-dist/tex/context/base/core-spa.lua
+++ /dev/null
@@ -1,720 +0,0 @@
-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"
-}
-
--- this code dates from the beginning and is kind of experimental; it
--- will be optimized and improved soon
-
-local next, type = next, type
-local format, gmatch, concat = string.format, string.gmatch, table.concat
-local texsprint, texlists = tex.sprint, tex.lists
-
-local ctxcatcodes = tex.ctxcatcodes
-
--- vertical space handler
-
-local trace_vbox_vspacing = false trackers.register("nodes.vbox_vspacing", function(v) trace_vbox_vspacing = v end)
-local trace_page_vspacing = false trackers.register("nodes.page_vspacing", function(v) trace_page_vspacing = v end)
-local trace_collect_vspacing = false trackers.register("nodes.collect_vspacing", function(v) trace_collect_vspacing = v end)
-local trace_vspacing = false trackers.register("nodes.vspacing", function(v) trace_vspacing = v end)
-
-local skip_category = attributes.private('skip-category')
-local skip_penalty = attributes.private('skip-penalty')
-local skip_order = attributes.private('skip-order')
-local snap_category = attributes.private('snap-category')
-local display_math = attributes.private('display-math')
-
-local has_attribute = node.has_attribute
-local unset_attribute = node.unset_attribute
-local set_attribute = node.set_attribute
-local find_node_tail = node.tail
-local free_node = node.free
-local copy_node = node.copy
-local traverse_nodes = node.traverse
-local insert_node_before = node.insert_before
-local insert_node_after = node.insert_after
-local remove_node = nodes.remove
-local make_penalty_node = nodes.penalty
-local count_nodes = nodes.count
-local node_ids_to_string = nodes.ids_to_string
-local hpack_node = node.hpack
-
-local glyph = node.id("glyph")
-local penalty = node.id("penalty")
-local kern = node.id("kern")
-local glue = node.id('glue')
-local hlist = node.id('hlist')
-local vlist = node.id('vlist')
-local adjust = node.id('adjust')
-
-vspacing = vspacing or { }
-
-vspacing.categories = {
- [0] = 'discard',
- [1] = 'largest',
- [2] = 'force' ,
- [3] = 'penalty',
- [4] = 'add' ,
- [5] = 'disable',
- [6] = 'nowhite',
- [7] = 'goback',
-}
-
-local categories = vspacing.categories
-
-function vspacing.tocategories(str)
- local t = { }
- for s in gmatch(str,"[^, ]") do
- local n = tonumber(s)
- if n then
- t[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({ [categories[str]] = true })
- end
-end
-
-vspacing.data = vspacing.data or { }
-vspacing.data.map = vspacing.data.map or { }
-vspacing.data.skip = vspacing.data.skip or { }
-
-storage.register("vspacing/data/map", vspacing.data.map, "vspacing.data.map")
-storage.register("vspacing/data/skip", vspacing.data.skip, "vspacing.data.skip")
-
-do -- todo: interface.variables
-
- local function logger(c,s)
- logs.report("vspacing",s)
- texsprint(c,s)
- end
-
- vspacing.fixed = false
-
- local map = vspacing.data.map
- local skip = vspacing.data.skip
-
- local multiplier = lpeg.C(lpeg.S("+-")^0 * lpeg.R("09")^1) * lpeg.P("*")
- local category = lpeg.P(":") * lpeg.C(lpeg.P(1)^1)
- local keyword = lpeg.C((1-category)^1)
- local splitter = (multiplier + lpeg.Cc(1)) * keyword * (category + lpeg.Cc(false))
-
- local function analyse(str,oldcategory,texsprint)
- for s in gmatch(str,"([^ ,]+)") do
- local amount, keyword, detail = splitter:match(s)
- if keyword then
- local mk = map[keyword]
- if mk then
- category = analyse(mk,category,texsprint)
- elseif keyword == "fixed" then
- texsprint(ctxcatcodes,"\\fixedblankskip")
- elseif keyword == "flexible" then
- texsprint(ctxcatcodes,"\\flexibleblankskip")
- elseif keyword == "category" then
- local category = tonumber(detail)
- if category then
- texsprint(ctxcatcodes,format("\\setblankcategory{%s}",category))
- if category ~= oldcategory then
- texsprint(ctxcatcodes,"\\flushblankhandling")
- oldcategory = category
- end
- end
- elseif keyword == "order" and detail then
- local order = tonumber(detail)
- if order then
- texsprint(ctxcatcodes,format("\\setblankorder{%s}",order))
- end
- elseif keyword == "penalty" and detail then
- local penalty = tonumber(detail)
- if penalty then
- texsprint(ctxcatcodes,format("\\setblankpenalty{%s}",penalty))
- texsprint(ctxcatcodes,"\\flushblankhandling")
- end
- else
- amount = tonumber(amount) or 1
- local sk = skip[keyword]
- if sk then
- texsprint(ctxcatcodes,format("\\addblankskip{%s}{%s}{%s}",amount,sk[1],sk[2] or sk[1]))
- else -- no check
- texsprint(ctxcatcodes,format("\\addblankskip{%s}{%s}{%s}",amount,keyword,keyword))
- end
- end
- else
- logs.report("vspacing","unknown directive: %s",s)
- end
- end
- return category
- end
-
- function vspacing.analyse(str)
- local texsprint = (trace_vspacing and logger) or texsprint
- texsprint(ctxcatcodes,"\\startblankhandling")
- analyse(str,1,texsprint)
- texsprint(ctxcatcodes,"\\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
-
-local trace_list, tracing_info, before, after = { }, false, "", ""
-
-local function glue_to_string(glue)
- local spec = glue.spec
- if spec then
- local t = { }
- t[#t+1] = aux.strip_zeros(number.topoints(spec.width))
- if spec.stretch_order and spec.stretch_order ~= 0 then
- t[#t+1] = format("plus -%sfi%s",spec.stretch/65536,string.rep("l",math.abs(spec.stretch_order)-1))
- elseif spec.stretch and spec.stretch ~= 0 then
- t[#t+1] = format("plus %s",aux.strip_zeros(number.topoints(spec.stretch)))
- end
- if spec.shrink_order and spec.shrink_order ~= 0 then
- t[#t+1] = format("minus -%sfi%s",spec.shrink/65536,string.rep("l",math.abs(spec.shrink_order)-1))
- elseif spec.shrink and spec.shrink ~= 0 then
- t[#t+1] = format("minus %s",aux.strip_zeros(number.topoints(spec.shrink)))
- end
- return concat(t," ")
- else
- return "[0pt]"
- end
-end
-
-local function nodes_to_string(head)
- local current, t = head, { }
- while current do
- local id = current.id
- local ty = node.type(id)
- if id == penalty then
- t[#t+1] = format("%s:%s",ty,current.penalty)
- elseif id == glue then
- if current.spec then
- t[#t+1] = format("%s:%s",ty,aux.strip_zeros(number.topoints(current.spec.width)))
- else
- t[#t+1] = format("%s:[0pt]",ty)
- end
- elseif id == kern then
- t[#t+1] = format("%s:%s",ty,aux.strip_zeros(number.topoints(current.kern)))
- else
- t[#t+1] = ty
- end
- current = current.next
- end
- return concat(t," + ")
-end
-
-local function reset_tracing(head)
- trace_list, tracing_info, before, after = { }, false, nodes_to_string(head), ""
-end
-
-local function trace_skip(str,sc,so,sp,data)
- trace_list[#trace_list+1] = { "skip", format("%s | %s | category %s | order %s | penalty %s", str, glue_to_string(data), sc or "-", so or "-", sp or "-") }
- tracing_info = true
-end
-
-local function trace_natural(str,data)
- trace_list[#trace_list+1] = { "skip", format("%s | %s", str, glue_to_string(data)) }
- tracing_info = true
-end
-
-local function trace_info(message, where, what)
- trace_list[#trace_list+1] = { "info", format("%s: %s/%s",message,where,what) }
-end
-
-local function trace_node(what)
- local nt = node.type(what.id)
- local tl = trace_list[#trace_list]
- if tl[1] == "node" then
- trace_list[#trace_list] = { "node", tl[2] .. " + " .. nt }
- else
- trace_list[#trace_list+1] = { "node", nt }
- end
-end
-
-local function trace_done(str,data)
- if data.id == penalty then
- trace_list[#trace_list+1] = { "penalty", format("%s | %s", str, data.penalty) }
- else
- trace_list[#trace_list+1] = { "glue", format("%s | %s", str, glue_to_string(data)) }
- end
- tracing_info = true
-end
-
-local function show_tracing(head)
- if tracing_info then
- after = nodes_to_string(head)
- for i=1,#trace_list do
- local tag, text = unpack(trace_list[i])
- if tag == "info" then
- logs.report("collapse",text)
- else
- logs.report("collapse"," %s: %s",tag,text)
- end
- end
- logs.report("collapse","before: %s",before)
- logs.report("collapse","after : %s",after)
- end
-end
-
--- 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",
-}
-
-local free_glue_node = free_node
-local free_glue_spec = free_node
-local discard, largest, force, penalty, add, disable, nowhite, goback = 0, 1, 2, 3, 4, 5, 6, 7
-
-local function collapser(head,where,what,trace) -- maybe also pass tail
- if trace then
- reset_tracing(head)
- trace_info("start analyzing",where,what)
- end
- local current = head
- local glue_order, glue_data = 0, nil
- local penalty_order, penalty_data, natural_penalty = 0, nil, nil
- local parskip, ignore_parskip, ignore_following, ignore_whitespace = nil, false, false, false
- 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) -- has no default, no unset (yet)
- local so = has_attribute(current,skip_order ) or 1 -- has 1 default, no unset (yet)
- local sp = has_attribute(current,skip_penalty ) -- has no degault, no unset (yet)
- if not sc then
- if glue_data then
- if trace then trace_done("flush",glue_data) end
- head, current = nodes.before(head,current,glue_data)
- if trace then trace_natural("natural",current) end
- else
- -- not look back across head
- local previous = current.prev
- if previous and previous.id == glue and previous.subtype == 0 then
- local ps = previous.spec
- if ps then
- local cs = current.spec
- if cs and ps.stretch_order == 0 and ps.shrink_order == 0 and cs.stretch_order == 0 and cs.shrink_order == 0 then
- local pw, pp, pm = ps.width, ps.stretch, ps.shrink
- local cw, cp, cm = cs.width, cs.stretch, cs.shrink
- ps.width, ps.stretch, ps.shrink = pw + cw, pp + cp, pm + cm
- if trace then trace_natural("removed",current) end
- head, current = remove_node(head, current, true)
- current = previous
- if trace then trace_natural("collapsed",current) end
- else
- if trace then trace_natural("filler",current) end
- end
- else
- if trace then trace_natural("natural (no prev spec)",current) end
- end
- else
- if trace then trace_natural("natural (no prev)",current) end
- end
- end
- glue_order, glue_data = 0, nil
- if current then
- current = current.next
- end
- else
- if sc == disable then
- ignore_following = true
- if trace then trace_skip("disable",sc,so,sp,current) end
- head, current = remove_node(head, current, true)
- elseif sc == nowhite then
- ignore_whitespace = true
- head, current = remove_node(head, current, true)
- elseif sc == discard then
- if trace then trace_skip("discard",sc,so,sp,current) end
- head, current = remove_node(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 = remove_node(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 = remove_node(head, current)
- elseif glue_order < so then
- if trace then trace_skip("force",sc,so,sp,current) end
- glue_order = so
- free_glue_node(glue_data)
- head, current, glue_data = remove_node(head, current)
- elseif glue_order == so then
- -- is now exclusive, maybe support goback as combi, else why a set
- if sc == largest then
- local cs, gs = current.spec, glue_data.spec
- local cw = (cs and cs.width) or 0
- local gw = (gs and gs.width) or 0
- if cw > gw then
- if trace then trace_skip('largest',sc,so,sp,current) end
- free_glue_node(glue_data) -- also free spec
- head, current, glue_data = remove_node(head, current)
- else
- if trace then trace_skip('remove smallest',sc,so,sp,current) end
- head, current = remove_node(head, current, true)
- end
- elseif sc == goback then
- if trace then trace_skip('goback',sc,so,sp,current) end
- free_glue_node(glue_data) -- also free spec
- head, current, glue_data = remove_node(head, current)
- elseif sc == force then
- -- todo: inject kern
- if trace then trace_skip('force',sc,so,sp,current) end
- free_glue_node(glue_data) -- also free spec
- head, current, glue_data = remove_node(head, current)
- elseif sc == penalty then
- if trace then trace_skip('penalty',sc,so,sp,current) end
- free_glue_node(glue_data) -- also free spec
- glue_data = nil
- head, current = remove_node(head, current, true)
- elseif sc == 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
- -- toto: order
- head, current = remove_node(head, current, true)
- else
- if trace then trace_skip("unknown",sc,so,sp,current) end
- head, current = remove_node(head, current, true)
- end
- else
- if trace then trace_skip("unknown",sc,so,sp,current) end
- head, current = remove_node(head, current, true)
- end
- end
- end
- elseif id == penalty then
- --~ natural_penalty = current.penalty
- --~ if trace then trace_done("removed penalty",current) end
- --~ head, current = remove_node(head, current, true)
- current = current.next
- elseif 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
- if trace then trace_natural("removed baselineskip",current) end
- head, current = remove_node(head, current, true)
- -- else
- -- current = current.next
- -- end
- else
- if trace then trace_natural("keep baselineskip",current) end
- current = current.next
- end
- elseif id == glue and current.subtype == 3 then
- -- parskip always comes later
- if ignore_whitespace then
- if trace then trace_natural("ignored parskip",current) end
- head, current = remove_node(head,current,true)
- elseif glue_data then
- local ps, gs = current.spec, glue_data.spec
- if ps and gs and ps.width > gs.width then
- -- free_glue_spec(glue_data.spec) -- result in double free
- glue_data.spec = copy_node(ps)
- if trace then trace_natural("taking parskip",current) end
- else
- if trace then trace_natural("removed parskip",current) end
- end
- head, current = remove_node(head, current,true)
- else
- if trace then trace_natural("honored parskip",current) end
- head, current, glue_data = remove_node(head, current)
- end
- --~ if trace then trace_natural("removed parskip",current) end
- --~ current.spec = nil
- --~ current = current.next
- else
--- reversed
- if penalty_data then
- local p = make_penalty_node(penalty_data)
- if trace then trace_done("flushed",p) end
- head, current = insert_node_before(head,current,p)
- penalty_data = nil
- end
- if glue_data then
- if trace then trace_done("flushed",glue_data) end
- head, current = insert_node_before(head,current,glue_data)
- glue_order, glue_data = 0, nil
- end
- if trace then trace_node(current) 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]
- -- is math.ceil really needed?
- 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
- end
- if trace then trace_info("stop analyzing",where,what) end
- --~ if natural_penalty and (not penalty_data or natural_penalty > penalty_data) then
- --~ penalty_data = natural_penalty
- --~ end
- if trace and (glue_data or penalty_data) then
- trace_info("start flushing",where,what)
- end
- local tail
- if penalty_data then
- tail = find_node_tail(head)
- local p = make_penalty_node(penalty_data)
- if trace then trace_done("result",p) end
- head, tail = insert_node_after(head,tail,p)
- end
- if glue_data then
- if not tail then tail = find_node_tail(head) end
- if trace then trace_done("result",glue_data) end
- head, tail = insert_node_after(head,tail,glue_data)
- end
- if trace then
- if glue_data or penalty_data then
- trace_info("stop flushing",where,what)
- end
- show_tracing(head)
- end
- return head, true
-end
-
--- alignment after_output end box new_graf vmode_par hmode_par insert penalty before_display after_display
--- \par -> vmode_par
---
--- status.best_page_break
--- tex.lists.best_page_break
--- tex.lists.best_size (natural size to best_page_break)
--- tex.lists.least_page_cost (badness of best_page_break)
--- tex.lists.page_head
--- tex.lists.contrib_head
-
-local stackhead, stacktail, stackhack = nil, nil, false
-
-local function report(message,lst)
- logs.report("vspacing",message,count_nodes(lst,true),node_ids_to_string(lst))
-end
-
-function nodes.handle_page_spacing(where)
- local newhead = texlists.contrib_head
- if newhead then
- statistics.starttiming(vspacing)
- local newtail = find_node_tail(newhead)
- local flush = false
- for n in traverse_nodes(newhead) do -- we could just look for glue nodes
- local id = n.id
- if id == glue then
- if n.subtype == 0 then
- if has_attribute(n,skip_category) then
- stackhack = true
- else
- flush = true
- end
- else
- -- tricky
- end
- else
- flush = true
- end
- end
- if flush then
- if stackhead then
- if trace_collect_vspacing then report("appending %s nodes to stack (final): %s",newhead) end
- stacktail.next = newhead
- newhead.prev = stacktail
- newhead = stackhead
- stackhead, stacktail = nil, nil
- end
- if stackhack then
- stackhack = false
- if trace_collect_vspacing then report("processing %s nodes: %s",newhead) end
- texlists.contrib_head = collapser(newhead,"page",where,trace_page_vspacing)
- else
- if trace_collect_vspacing then report("flushing %s nodes: %s",newhead) end
- texlists.contrib_head = newhead
- end
- else
- if stackhead then
- if trace_collect_vspacing then report("appending %s nodes to stack (intermediate): %s",newhead) end
- stacktail.next = newhead
- newhead.prev = stacktail
- else
- if trace_collect_vspacing then report("storing %s nodes in stack (initial): %s",newhead) end
- stackhead = newhead
- end
- stacktail = newtail
- texlists.contrib_head = nil
- end
- statistics.stoptiming(vspacing)
- end
-end
-
-local ignore = table.tohash {
- "split_keep",
- "split_off",
- -- "vbox",
-}
-
-function nodes.handle_vbox_spacing(head,where)
- if head and not ignore[where] and head.next then
- statistics.starttiming(vspacing)
- head = collapser(head,"vbox",where,trace_vbox_vspacing)
- statistics.stoptiming(vspacing)
- end
- return head
-end
-
-statistics.register("v-node processing time", function()
- if statistics.elapsedindeed(vspacing) then
- return format("%s seconds", statistics.elapsedtime(vspacing))
- end
-end)
-
--- these are experimental callback definitions that definitely will
--- be moved elsewhere as part of a chain of vnode handling
-
-function vspacing.enable()
---~ callback.register('vpack_filter', nodes.handle_vbox_spacing)
- callback.register('buildpage_filter', nodes.handle_page_spacing)
-end
-
-function vspacing.disable()
- callback.register('vpack_filter', nil)
- callback.register('buildpage_filter', nil)
-end
-
--- we will split this module hence the locals
-
-local attribute = attributes.private('graphicvadjust')
-
-local hlist = node.id('hlist')
-local vlist = node.id('vlist')
-
-local remove_node = nodes.remove
-local hpack_node = node.hpack
-local has_attribute = node.has_attribute
-
-function nodes.repackage_graphicvadjust(head,groupcode) -- we can make an actionchain for mvl only
- if groupcode == "" then -- mvl only
- local h, p, done = head, nil, false
- while h do
- local id = h.id
- if id == hlist or id == vlist then
- local a = has_attribute(h,attribute)
- if a then
- if p then
- local n
- head, h, n = remove_node(head,h)
- local pl = p.list
- if n.width ~= 0 then
- n = hpack_node(n,0,'exactly')
- end
- if pl then
- pl.prev = n
- n.next = pl
- end
- p.list = n
- done = true
- else
- -- can't happen
- end
- else
- p = h
- h = h.next
- end
- else
- h = h.next
- end
- end
- return head, done
- else
- return head, false
- end
-end
-
---~ tasks.appendaction("finalizers", "lists", "nodes.repackage_graphicvadjust")
diff --git a/Master/texmf-dist/tex/context/base/core-spa.mkiv b/Master/texmf-dist/tex/context/base/core-spa.mkiv
deleted file mode 100644
index 5d7836f5b04..00000000000
--- a/Master/texmf-dist/tex/context/base/core-spa.mkiv
+++ /dev/null
@@ -1,4277 +0,0 @@
-%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 / Spacing}
-
-% to be sorted out: dependencies, order of initialization / also some dutch code here
-% more documentation in the mkii file
-
-\unprotect
-
-% some will move to core-var
-
-\newif \ifgridsnapping
-\newif \iffuzzyvskip
-\let \fuzzyvskip \gobbleoneargument
-\let \removelastfuzzyvskip \relax
-
-\let \startbaselinecorrection \relax
-\let \stopbaselinecorrection \relax
-\let \baselinecorrection \relax
-\let \offbaselinecorrection \relax
-
-\appendtoks \spacing\plusone \to \everybodyfont
-\appendtoks \presetnormallineheight \to \everybodyfont
-\appendtoks \setnormalbaselines \to \everybodyfont % check if redundant
-\appendtoks \setstrut \to \everybodyfont % check if redundant
-\appendtoks \settopskip \to \everybodyfont
-\appendtoks \setmaxdepth \to \everybodyfont
-\appendtoks \simplesetupindenting \to \everybodyfont
-\appendtoks \simplesetupblank \to \everybodyfont
-\appendtoks \simplesetupwhitespace \to \everybodyfont
-%appendtoks \checknotes \to \everybodyfont % not
-\appendtoks \simplesetupspacing \to \everybodyfont % nieuw
-\appendtoks \setrelativeinterlinespace \to \everybodyfont
-
-\appendtoks \updateraggedskips \to \everyfontswitch % under test
-\prependtoks \let\par\endgraf \to \everypagebody % see \fillinline
-\appendtoks \simplesetupspacing \to \everydefinedfont
-
-% if you want to hyphenate the first word of a paragraph ... \appendtoks\hskip0pt\to\everypar
-
-\def\stelfactorenin
- {\simplesetupwhitespace
- \simplesetupblank
- \settopskip
- \setmaxdepth}
-
-\def\softbreak
- {\relax\ifhmode\hskip\parfillskip\break\fi}
-
-\let\poplastnode\relax
-
-\def\pushlastnode
- {\ifdim\lastskip=\zeropoint
- \ifnum\lastpenalty=\zerocount
- \ifnum\lastkern=\zerocount
- \let\poplastnode\relax
- \else
- \edef\poplastnode{\kern\the\lastkern\relax}\kern-\lastkern % untested
- \fi
- \else
- \edef\poplastnode{\penalty\the\lastpenalty\relax}\nobreak % untested
- \fi
- \else
- \edef\poplastnode{\vskip\the\lastskip\relax}\vskip-\lastskip % \removelastskip
- \fi}
-
-%D The dreadful sequence \type {\bgroup} \unknown\
-%D \type {\carryoverpar} \unknown\ \type {\egroup} is needed
-%D when for instance sidefloats are used in combination with
-%D something that starts with a group. This is because
-%D otherwise the indentation as set (by the output routine)
-%D inside the group are forgotten afterwards. (I must
-%D not forget its existence).
-
-\global\let\carriedoverpar\relax
-
-\def\carryoverpar#1%
- {\normalexpanded % \scratchtoks{#1}%
- {\noexpand#1% \the\scratchtoks
- \hangindent\the\hangindent
- \hangafter \the\hangafter
- \parskip \the\parskip
- \leftskip \the\leftskip
- \rightskip \the\rightskip}}
-
-%D A quick way to determine left|/|middle|/|right states
-%D (experimental).
-
-\setvalue{\??as\v!left }{0}
-\setvalue{\??as\v!middle}{1}
-\setvalue{\??as\v!right }{2}
-
-\def\setalignmentswitch#1%
- {\chardef\alignmentswitch0\csname\??as#1\endcsname\relax}
-
-%D There are two ways to influence the interline spacing. The
-%D most general and often most consistent way is using
-%D
-%D \showsetup{setupinterlinespace}
-%D
-%D For instance
-%D
-%D \starttyping
-%D \setupinterlinespace[line=2.8ex]
-%D \stoptyping
-%D
-%D This setting adapts itself to the bodyfontsize, while for
-%D instance saying
-%D
-%D \starttyping
-%D \setupinterlinespace[line=12pt]
-%D \stoptyping
-%D
-%D sets things fixed for all sizes, which is definitely not
-%D what we want. Therefore one can also say:
-%D
-%D \starttyping
-%D \definebodyfontenvironment[9pt][interlinespace=11pt]
-%D \stoptyping
-%D
-%D One can still use \type{\setupinterlinespace} (without
-%D arguments) to set the interline space according to the
-%D current font, e.g. a \type{\bfa}.
-
-\newif\iflocalinterlinespace
-
-% font-ini
-
-\ifx\bodyfontinterlinespecs\undefined
-
- \let\bodyfontinterlinespecs\empty
- \let\bodyfontinterlinespace\empty
-
-\fi
-
-\def\presetnormallineheight
- {\edef\normallineheight{\@@itline}%
-% done elsewhere : \spacing\!!plusone % new per 10/08/2004, else problems in otr / !! needed
- \iflocalinterlinespace \else
- \doifdefined\bodyfontinterlinespecs
- {\doifsomething\bodyfontinterlinespace
- {\edef\normallineheight{\bodyfontinterlinespace}}}%
- \fi}
-
-\def\setupspecifiedinterlinespace[#1]%
- {\getparameters[\??it][#1]%
- \scratchdimen0\@@itheight\points
- \advance\scratchdimen 0\@@itdepth\points
- \ifdim\scratchdimen>\onepoint
- \showmessage\m!layouts{10}{\@@itheight,\@@itdepth}%
- \let\@@itheight\strutheightfactor
- \let\@@itdepth \strutdepthfactor
- \else
- \let\strutheightfactor\@@itheight
- \let\strutdepthfactor \@@itdepth
- \fi
- \let\minimumstrutheight \@@itminheight
- \let\minimumstrutdepth \@@itmindepth
- \let\minimumlinedistance\@@itdistance
- \let\normallineheight \@@itline % let ! ! ! ! ! ivm ex
- \doifelse\@@ittop\v!height % new, topskip does more bad than good
- {\let\topskipfactor \@@itheight}
- {\let\topskipfactor \@@ittop }%
- \let\maxdepthfactor \@@itbottom
- \let\baselinegluefactor \@@itstretch
- \setfontparameters % redundant, can be \setstrut, test first
- \updateraggedskips} % yes indeed
-
-\let\currentrelativeinterlinespace\empty
-
-\def\setuprelativeinterlinespace[#1]%
- {\processallactionsinset
- [#1]
- [ \v!on=>\oninterlineskip,
- \v!off=>\offinterlineskip,
- \v!reset=>\let\currentrelativeinterlinespace\empty
- \let\setrelativeinterlinespace\relax
- \setfontparameters,
- \v!auto=>\let\setrelativeinterlinespace\dosetrelativeinterlinespace,
- \s!unknown=>\assignvalue\commalistelement\currentrelativeinterlinespace{1.00}{1.25}{1.50}%
- \spacing\currentrelativeinterlinespace]}
-
-\def\dosetrelativeinterlinespace
- {\ifx\currentrelativeinterlinespace\empty\else
- \spacing\currentrelativeinterlinespace
- \fi}
-
-\let\setrelativeinterlinespace\relax
-
-% \appendtoks \setrelativeinterlinespace \to \everybodyfont
-
-\def\complexsetupinterlinespace[#1]% \commalistelement ipv #1
- {\doifassignmentelse{#1}\setupspecifiedinterlinespace\setuprelativeinterlinespace[#1]}
-
-\def\setuplocalinterlinespace[#1]%
- {\localinterlinespacetrue
- \setupinterlinespace[#1]%
- \localinterlinespacefalse}
-
-\def\simplesetupinterlinespace
- {\localinterlinespacetrue
- \setfontparameters
- \updateraggedskips % funny one here
- \localinterlinespacefalse}
-
-\definecomplexorsimple\setupinterlinespace
-
-% In earlier versions \type{\bigskipamount} was
-% \type{\ht\strutbox} and the stretch was plus or minus
-% \type{.4\dp\strutbox}. Don't ask me why. The most recent
-% implementation is based on a user supplied distance, which
-% is by default \type{.75\normalskipamount} where
-% \type{\normalskipamount} equals the current baseline
-% distance.
-
-% \lineskiplimit = -\maxdimen -> freezes baselineskip
-
-% can be conditionals
-
-\newif\ifblanknowhite \blanknowhitefalse
-\newif\ifblankindeed \blankindeedfalse
-\newif\ifblankreset \blankresetfalse
-\newif\ifblankdisable \blankdisablefalse
-\newif\ifblankflexible \blankflexibletrue
-\newif\ifblankouter
-\newif\ifblankforce
-\newif\ifblankgoback
-
-\newskip\blankskip \blankskip=\bigskipamount
-\newskip\blankskipamount
-
-\def\skipfactor {.75}
-\def\skipgluefactor{.25}
-
-\def\normalskipamount
- {\openlineheight
- \ifgridsnapping \else \ifblankflexible
- \!!plus \skipgluefactor\openlineheight
- \!!minus\skipgluefactor\openlineheight
- \fi \fi
- \relax}
-
-\def\linedistance {\normalskipamount}
-\def\appliedblankskip{\skipfactor\linedistance}
-\def\lastblankskip {\blankskip}
-\def\currentblank {\v!big}
-\def\oldprevdepth {\prevdepth}
-\def\newprevdepth {-1001pt}
-\def\mindimen {1sp} % was: 0.00002pt
-
-\newif\iflocalblankfixed
-\newif\iflocalblankflexible
-
-\def\geenblanko{\removelastskip} % will become obsolete
-
-%%%% pas op, wordt ook in core-pos gebruikt
-
-\def\doassignsomeskip#1\to#2% ook nog \v!halfline+fuzzysnap
- {\doifelse{#1}\v!line
- {#2\openlineheight}
- {\ifgridsnapping
- \assigndimension{#1}{#2}{.25\openlineheight}{.5\openlineheight}\openlineheight
- \else
- \assigndimension{#1}{#2}\smallskipamount\medskipamount\bigskipamount
- \fi}%
- \relax}
-
-% \relax is really needed, else we may loose stretch due to lookahead; somehow
-% this bug was introduced a while ago but somehow went unnoticed; fixed 2/7/2008
-
-\def\addblankskip#1#2#3{\global\advance\blankskip#1\ifgridsnapping#3\else#2\fi\relax}
-
-\def\defineblankmethod[#1]#2{\setvalue{\??bo\??bo#1}{#2}}
-
-\defineblankmethod [\v!big] {\addblankskip+\bigskipamount \openlineheight}
-\defineblankmethod [-\v!big] {\addblankskip-\bigskipamount \openlineheight}
-\defineblankmethod [\v!medium] {\addblankskip+\medskipamount {.5\openlineheight}}
-\defineblankmethod [-\v!medium] {\addblankskip-\medskipamount {.5\openlineheight}}
-\defineblankmethod [\v!small] {\addblankskip+\smallskipamount{.25\openlineheight}}
-\defineblankmethod [-\v!small] {\addblankskip-\smallskipamount{.25\openlineheight}}
-\defineblankmethod [\v!white] {\addblankskip+\parskip \openlineheight}
-\defineblankmethod [-\v!white] {\addblankskip-\parskip \openlineheight}
-\defineblankmethod [\v!line] {\addblankskip+\openlineheight \openlineheight}
-\defineblankmethod [-\v!line] {\addblankskip-\openlineheight \openlineheight}
-
-\defineblankmethod [\v!formula] {\global\advance\blankskip\medskipamount}
-\defineblankmethod [\v!nowhite] {\global\blanknowhitetrue}
-\defineblankmethod [\v!disable] {\global\blankdisabletrue}
-\defineblankmethod [\v!force] {\global\blankforcetrue}
-\defineblankmethod [\v!outer] {\ifvmode\ifinner\blankoutertrue\fi\fi}
-\defineblankmethod [\v!reset] {\global\blankresettrue}
-\defineblankmethod [\v!flexible] {\global\localblankflexibletrue}
-\defineblankmethod [\v!fixed] {\global\localblankfixedtrue}
-\defineblankmethod [\v!back] {\global\blankgobacktrue} % {\geenblanko}
-\defineblankmethod [\v!halfline] {\ifgridsnapping\global\fuzzyvskiptrue\fi
- \global\advance\blankskip .5\lineheight}
-\defineblankmethod [\v!none] {\global\blankresettrue}
-\defineblankmethod [\v!joinedup] {\ifvmode\nointerlineskip\fi}
-\defineblankmethod[\v!synchronize] {\verticalstrut\vskip-2\lineheight\verticalstrut}
-
-% \vtop{\blank[synchronize]\blank[line]test}
-
-\defineblankmethod [\v!always] {\redowhitespace} % experimental
-
-% happens often, so we speed this up:
-%
-% \defineblankmethod [2*\v!line] {\addblankskip+{2\openlineheight}{2\openlineheight}}
-% \defineblankmethod [2*\v!big] {\addblankskip+{2\bigskipamount }{2\openlineheight}}
-%
-% no, with 2\whatever we loose the stretch and shrink! Taco's alternative:
-
-\defineblankmethod
- [2*\v!line]
- {\addblankskip+\openlineheight\openlineheight
- \addblankskip+\openlineheight\openlineheight}
-
-\defineblankmethod
- [2*\v!big]
- {\addblankskip+\bigskipamount\openlineheight
- \addblankskip+\bigskipamount\openlineheight}
-
-\def\doblank#1%
- {\edefconvertedargument\ascii{#1}%
- \ifx\ascii\empty\else
- \ifcsname\??bo\??bo\ascii\endcsname % internal def
- \csname\??bo\??bo\ascii\endcsname
- \else\ifcsname\??bo\ascii\endcsname % user def / slow
- \@EA\rawprocesscommalist\@EA[\csname\??bo\ascii\endcsname]\doblank\relax
- \else
- \dorepeatwithcommand[#1]\redoblank
- \fi\fi
- \fi
- \relax}
-
-\def\redoblank#1%
- {\edefconvertedargument\ascii{#1}%
- \ifx\ascii\empty\else
- \ifcsname\??bo\??bo\ascii\endcsname % internal def
- \csname\??bo\??bo\ascii\endcsname
- \else\ifcsname\??bo\ascii\endcsname % user def / slow
- \@EA\rawprocesscommalist\@EA[\csname\??bo\ascii\endcsname]\doblank\relax
- \else
- \global\advance\blankskip#1\relax
- \fi\fi
- \fi
- \relax}
-
-\unexpanded\def\blank % the \relax is definitely needed due to the many \if's
- {\relax\complexorsimple\doblank}
-
-\def\complexdoblank
- {\flushnotes
- \ifmmode
- \@EA\nocomplexdoblank
- \else
- \ifopelkaar
- \ifinpagebody
- \@EA\@EAEAEA\@EA\docomplexdoblank
- \else
- \@EA\@EAEAEA\@EA\nocomplexdoblank
- \fi
- \else
- \@EAEAEA\docomplexdoblank
- \fi
- \fi}
-
-\def\nocomplexdoblank[#1]%
- {% evt blokkeerfalse
- \ifmmode\else\par\fi}
-
-% Overloaded in cont-new!
-
-\newsignal\noblanksignal
-
-% problem: we cannot look back in the mvl so we need 3 kinds of signals
-
-\def\noblankpsignal{1010101}
-
-\def\inhibitgridblank % was doinhibitblank
- {\ifvmode\else\endgraf\fi
- \ifvmode
- \ifnum\lastpenalty<10000
- \kern-\noblanksignal % new
- \kern \noblanksignal
- \else
- \penalty\noblankpsignal
- \fi
- \fi}
-
-\def\inhibittextblank % was inhibitblank
- {\endgraf
- \ifvmode
- \prevdepth\newprevdepth
- \fi}
-
-% new macro
-%
-% \def\inhibitblank % need some work
-% {\endgraf
-% \ifvmode
-% \ifgridsnapping
-% \inhibitgridblank
-% \else
-% % this one spoils the grid
-% \inhibittextblank
-% \fi
-% \fi}
-
-\def\doinhibitblank{\inhibitgridblank}
-\def\inhibitblank {\inhibittextblank}
-
-% will become obsolete
-
-\ifx\undefined\savedlastskip \newskip \savedlastskip \fi
-\ifx\undefined\savedlastpenalty \newcount\savedlastpenalty \fi
-
-% beware, prevdepth can have funny values (e.g. mvl value when in box)
-
-\def\docomplexdoblank[#1]% pas op \relax's zijn nodig ivm volgende \if
- {\global\blankresetfalse
- \global\blankdisablefalse
- \global\blanknowhitefalse
- \global\localblankflexiblefalse
- \global\localblankfixedfalse
- \global\blankforcefalse
- \global\blankgobackfalse
- \blankouterfalse
- \global\blankskip\zeropoint
-%
-\edefconvertedargument\ascii{#1}% todo fast check for simple
-\ifcsname\??bo\??bo\ascii\endcsname % internal def
- \csname\??bo\??bo\ascii\endcsname
-\else\ifcsname\??bo\ascii\endcsname % user def / slow
- \@EA\rawprocesscommalist\@EA[\csname\??bo\ascii\endcsname]\doblank\relax
-\else
- \rawprocesscommacommand[#1]\doblank
-\fi\fi
-%
- \relax % to be sure
- \ifdim\blankskip=\zeropoint\relax
- \iflocalblankflexible
- \doglobal\advance\blankskip \currentblank
- \else\iflocalblankfixed
- \doglobal\advance\blankskip \currentblank
- \fi\fi
- \fi
- \relax % to be sure
- \ifblankouter
- % do nothing
- \else
- \par
- \ifvmode
- \ifblankgoback
- \ifdim\lastskip>\zeropoint \vskip-\lastskip \fi
- \savedlastskip\zeropoint
- \else\ifdim\lastskip>\zeropoint
- \savedlastskip\lastskip
- \else % todo: lastnode, dan namelijk geen skip !
- \savedlastskip\zeropoint
- \fi\fi
- \ifblankforce
- % dit gaat mis in pos fonts
- % \ifdim\prevdepth>\zeropoint\else ...
- % -1000pt signals top of page or column (\ejectcolumn)
- \bgroup\forgeteverypar\verticalstrut\egroup\kern-\struttotal
- \savedlastskip\zeropoint
- \fi
- \savedlastpenalty\lastpenalty % hm, now it gets lost
- \ifblankdisable
- \global\blankindeedfalse % keep this, i.e. disable current too
- \ifgridsnapping
- \ifdim\prevdepth<\zeropoint
- % brrr
- \else
- % dirty trick: smaller blanks are ignored after a
- % larger one, so 10 lines is probably safe; we need
- % to make sure that we honor penalties; here comes the
- % trick (cross our fingers that this works well in
- % multi columns; maybe an ifinner test is needed
- % \scratchcounter\lastpenalty
- % \vskip-10\lineheight
- % \ifnum\scratchcounter=\zerocount \else \penalty\lastpenalty \fi
- % \vskip 10\lineheight
- % alas, this leads to overfull pages, so we try this:
- \inhibitgridblank
- \fi
- \else
- \ifdim\prevdepth<\zeropoint
- % brrr
- \else
- % ensure at least a proper prevdepth, this should be
- % an option
- \vskip-\prevdepth
- \vskip\strutdepth
- \prevdepth\strutdepth
- \fi
- % the old crappy piece of code
- \edef\oldprevdepth{\the\prevdepth}%
- \prevdepth\newprevdepth % == \inhibittextblank
- \fi
- \else
- \global\blankindeedtrue
- \fi
- \ifblankreset
- \global\blankindeedtrue
- \ifgridsnapping
- % let's play safe and not fool around with the depth, if
- % only because it took a lot of effort to sort out the grid
- % stuff in the first place
- \else
- \ifdim\prevdepth=\newprevdepth
- \prevdepth\oldprevdepth
- \fi
- \fi
- \fi
- \ifblankindeed
- \ifdim1\savedlastskip<1\blankskip\relax
- % else when \blank[2*groot] + \blank[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 \mindimen\relax % = skip
- % test this on 2* + 3* and parskip groot
- \ifblanknowhite
- \global\advance\blankskip -\parskip
- \else
- \ifdim\savedlastskip=\parskip
- \else % force this due to previous comment
- \ifdim\parskip>\zeropoint\relax
- \ifdim\blankskip<\parskip\relax
- \global\blankskip\zeropoint
- \else
- \global\advance\blankskip -\parskip
- \fi
- \fi
- \fi
- \fi
- \ifblankflexible \else
- \blankskip1\blankskip
- \fi
- \iflocalblankfixed
- \blankskip1\blankskip
- \fi
- \iflocalblankflexible
- \blankskip1\blankskip
- \!!plus \skipgluefactor\blankskip
- \!!minus\skipgluefactor\blankskip
- \fi
- \ifdim\lastkern=\noblanksignal\relax % controlled and grid
- \global\blankindeedfalse
- \else\ifnum\savedlastpenalty=\noblankpsignal\relax % controlled and grid
- \global\blankindeedfalse
- \else\ifgridsnapping\else\ifdim\prevdepth=\newprevdepth
- \global\blankindeedfalse
- \fi\fi\fi\fi
- \ifblankindeed
- \iffuzzyvskip
- \removelastfuzzyvskip
- \fuzzyvskip\blankskip\relax
- \else
- \relax\ifdim\savedlastskip=\zeropoint\else
- \vskip-\savedlastskip
- \fi
- \vskip\blankskip\relax
- \fi
- \fi
- \else
- \iffuzzyvskip
- \removelastfuzzyvskip
- \fuzzyvskip\blankskip\relax
- \else
- % new, test this on pascal
- \ifdim\blankskip<\zeropoint
- \relax\ifdim\savedlastskip=\zeropoint\else
- \advance\blankskip-\savedlastskip
- \vskip-\savedlastskip
- \fi
- \ifdim\blankskip>\zeropoint
- \vskip\blankskip
- \else
- \vskip\zeropoint
- \fi
- \else
- % also new
- \ifdim\blankskip=\zeropoint
- \ifblanknowhite
- \nowhitespace
- \fi
- \fi
- \fi
- \fi
- \fi
- \fi
- \fi
- \fi
- \global\fuzzyvskipfalse
- \presetindentation}
-
-%D For a long time we had:
-%D
-%D \starttyping
-%D \def\simpledoblank%
-%D {\doifelse{\currentwhitespace}{\v!geen}
-%D {\blank[\currentblank]}
-%D {\blank[\currentwhitespace]}}
-%D \stoptyping
-%D
-%D But Berend de Boer wanted more control, so now we have:
-
-\def\simpledoblank % ...
- {\doifelse\currentwhitespace\v!none
- {\blank[\currentblank]}
- {\blank[\s!default]}}
-
-%D Another useful definition would be:
-%D
-%D \starttyping
-%D \defineblank
-%D [\s!default]
-%D [\v!groot]
-%D \stoptyping
-
-\def\dosetupblank#1% amount are an plain inheritance
- {\bigskipamount#1\relax
- \ifblankflexible \else
- \bigskipamount1\bigskipamount
- \fi
- \medskipamount \bigskipamount \divide\medskipamount \plustwo
- \smallskipamount\bigskipamount \divide\smallskipamount\plusfour}%
-
-\def\complexsetupblank[#1]% more \let's -> this also wil become installable
- {\ifgridsnapping
- \blankflexiblefalse
- \else
- \normalexpanded{\noexpand\processallactionsinset[#1]}
- [ \v!flexible=>\blankflexibletrue,
- \v!fixed=>\blankflexiblefalse]%
- \fi
- \normalexpanded{\noexpand\processallactionsinset[#1]}
- [ \v!flexible=>\dosetupblank\appliedblankskip,
- \v!fixed=>\dosetupblank\appliedblankskip,
- \v!line=>\edef\appliedblankskip{\linedistance}%
- \dosetupblank\appliedblankskip,
- \v!halfline=>\scratchskip.5\linedistance
- \edef\appliedblankskip{\the\scratchskip}%
- \dosetupblank\appliedblankskip,
- \v!big=>\ifgridsnapping
- \edef\appliedblankskip{\linedistance}%
- \dosetupblank\appliedblankskip
- \fi
- \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,
- \s!default=>\dosetupblank\appliedblankskip,
- \s!unknown=>\let\appliedblankskip\commalistelement
- \dosetupblank\appliedblankskip]%
- \simplesetupwhitespace}
-
-% \definecomplexorsimpleempty\setupblank
-%
-% speed gain: 60 sec -> 30 sec
-
-\definecomplexorsimple\setupblank
-
-\def\simplesetupblank % == snelle \setupblank[\s!default]
- {\ifgridsnapping
- \blankflexiblefalse
- \fi
- \dosetupblank\appliedblankskip
- % \let\deblanko\v!big
- \simplesetupwhitespace}
-
-\def\restorestandardblank% \v!standard
- {\edef\appliedblankskip{\skipfactor\linedistance}%
- \dosetupblank\appliedblankskip
- }%\let\deblanko\v!big}
-
-\def\dodefineblank[#1][#2]% why #1 commalist?
- {\def\docommand##1{\setvalue{\??bo##1}{#2}}%
- \processcommalist[#1]\docommand}
-
-\def\defineblank
- {\dodoubleargument\dodefineblank}
-
-% \def\savecurrentblank
-% {\edef\restorecurrentblank
-% {\bigskipamount\the\bigskipamount
-% \medskipamount\the\medskipamount
-% \smallskipamount\the\smallskipamount
-% \noexpand\def\noexpand\currentblank{\currentblank}%
-% \ifblankflexible
-% \noexpand\blankflexibletrue
-% \else
-% \noexpand\blankflexiblefalse
-% \fi}}
-
-\def\savecurrentblank {\edef\savedcurrentblank{\currentblank}}
-\def\restorecurrentblank{\edef\currentblank{\savedcurrentblank}}
-
-\def\savedcurrentblank{\currentblank}
-
-%D Now.
-
-\defineblank [\s!default] [\v!white]
-\defineblank [\v!height] [\strutheight]
-\defineblank [\v!depth] [\strutdepth]
-
-\let\currentindentation\empty % amount/keyword
-% \let\normalindentation \empty % used for reinstating normal indentation
-\let\currentindenting \empty % method
-
-\newdimen\ctxparindent
-
-\newif\ifindentfirstparagraph % \indentfirstparagraphtrue
-
-\chardef\indentingtoggle\zerocount
-
-%D After a blank or comparable situation (left side floats) we
-%D need to check if the next paragraph has to be indented.
-
-\def\presetindentation
- {\doifoutervmode{\ifindentfirstparagraph\else\noindentation\fi}}
-
-%D This sets up the (normally) global indentation behavior as well
-%D as the amounts.
-
-\definecomplexorsimple\setupindenting
-
-\indentfirstparagraphtrue
-\parindent\ctxparindent
-\chardef\indentingtoggle\zerocount
-
-% we need a better everypar model: for each option a switch, which we
-% set to false with \forgetall and can enable when needed (context 4);
-% that way we can control the order of execution of options
-
-\def\checkeverypar % currently a hack
- {\ifzeropt\parindent\else
- \doifsometokselse\everypar\donothing{\appendtoks\checkindentation\to\everypar}%
- \fi}
-
-\def\complexsetupindenting[#1]%
- {\edef\currentindenting{#1}%
- \doifsomething\currentindenting % handy when a parameter is passed
- {% not here: \indentfirstparagraphtrue
- % not here: \parindent\ctxparindent
- % not here: \chardef\indentingtoggle\zerocount
- % we use commacommand in order to catch #1 being a command (expanded parameter)
- \processcommacommand[\currentindenting]\docomplexsetupindentingA % catch small, medium, etc
- \processcommacommand[\currentindenting]\docomplexsetupindentingB % catch rest
- \checkeverypar % only when non-empty #1
- \ifindentfirstparagraph\else\noindentation\fi % added
- \toggleindentation}}
-
-\def\docomplexsetupindentingA#1%
- {\edefconvertedargument\!!stringa{#1}% can this be doen differently now?
- \ifcsname\??in:\!!stringa\endcsname \else
- \edef\currentindentation{#1}%
- \let\normalindentation\currentindentation
- \simplesetupindenting
- \fi}
-
-\def\docomplexsetupindentingB#1%
- {\edefconvertedargument\!!stringa{#1}% catch #1=\somedimen
- \executeifdefined{\??in:\!!stringa}\donothing}
-
-\def\simplesetupindenting % empty case, a it strange, needed this way?
- {\assigndimension\currentindentation\ctxparindent{1em}{1.5em}{2em}}
-
-\def\indenting % kind of obsolete
- {\dosingleargument\complexsetupindenting}
-
-% use \noindentation to suppress next indentation
-
-\def\defineindentingmethod[#1]#2%
- {\setvalue{\??in:#1}{#2}}
-
-\defineindentingmethod [\v!no] {\parindent\zeropoint}% was: \ctxparindent\noindent}
-\defineindentingmethod [\v!not] {\parindent\zeropoint}% was: \ctxparindent\noindent}
-
-\defineindentingmethod [\v!first] {\indentfirstparagraphtrue}
-\defineindentingmethod [\v!next] {\indentfirstparagraphfalse}
-
-\defineindentingmethod [\v!yes] {\parindent\ctxparindent\relax} % no \indent !
-\defineindentingmethod [\v!always] {\parindent\ctxparindent\relax} % no \indent !
-
-\defineindentingmethod [\v!never] {\parindent\zeropoint\relax % no \indent !
- \chardef\indentingtoggle\zerocount}
-
-\defineindentingmethod [\v!odd] {\chardef\indentingtoggle\plusone}
-\defineindentingmethod [\v!even] {\chardef\indentingtoggle\plustwo}
-
-\defineindentingmethod [\v!normal] {\ifx\normalindentation\empty\else
- \let\currentindentation\normalindentation
- \simplesetupindenting
- \fi}
-
-\defineindentingmethod [\v!reset] {\indentfirstparagraphtrue
- \parindent\zeropoint
- \chardef\indentingtoggle\zerocount}
-
-\def\noindenting{\indenting[\v!no, \v!next ]}
-\def\doindenting{\indenting[\v!yes,\v!first]}
-
-%D This one sets up the local indentation behaviour (i.e. either or not
-%D a next paragraph will be indented).
-
-\def\dochecknextindentation#1% internal one
- {\checknextindentation[\csname#1\c!indentnext\endcsname]}
-
-\setvalue{\??in->\s!empty}{}
-\setvalue{\??in->\v!yes }{\doindentation}
-\setvalue{\??in->\v!no }{\noindentation}
-\setvalue{\??in->\v!auto }{\autoindentation}
-
-\def\checknextindentation[#1]%
- {\csname\??in->\ifcsname\??in->#1\endcsname#1\else\s!empty\fi\endcsname}
-
-%D Here come the handlers.
-
-\newif\ifindentation \indentationtrue % documenteren, naar buiten
-
-\let\checkindentation\relax
-
-\ifx\autoindentation\undefined \let\autoindentation\relax \fi % hook
-
-\def\doindentation
- {\gdef\checkindentation{\global\indentationtrue}}
-
-\def\noindentation % made global
- {\ifinpagebody \else
- \global\indentationfalse
- \gdef\checkindentation
- {\donoindentation
- \gdef\checkindentation{\global\indentationtrue}}%
- \fi}
-
-\def\nonoindentation % bv bij floats
- {\ifinpagebody \else
- \global\indentationtrue
- \gdef\checkindentation{\global\indentationtrue}%
- \fi}
-
-\def\donoindentation
- {\ifdim\parindent=\zeropoint \else
- \bgroup \setbox\scratchbox\lastbox \egroup
- \fi}
-
-\def\indentation
- {\ifvmode \ifdim\parindent=\zeropoint \else
- % was : \hskip\parindent
- % can be: \indent
- % but we test:
- \noindent\hskip\parindent
- \fi \fi}
-
-\def\toggleindentation
- {\ifcase\indentingtoggle
- % nothing
- \or
- \notoggleindentation
- \or
- \dotoggleindentation
- \fi}
-
-\def\dokillindentation
- {\gdef\checkindentation{\global\indentationfalse\donoindentation}}
-
-\def\dotoggleindentation
- {\gdef\checkindentation{\global\indentationfalse\notoggleindentation\donoindentation}}
-
-\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
-%
-% \def\setlasthvmode
-% {\global\chardef\savedhvmode\ifhmode\plusone\else\ifvmode\plustwo\else\zerocount\fi\fi}
-%
-% \def\resetlasthvmode
-% {\global\chardef\savedhvmode\zerocount}
-%
-% \chardef\savedhvmode\zerocount
-
-% This is a user requested hack (using the auto-hook).
-
-\chardef\recheckindentationmode\zerocount
-
-\def\dontrechecknextindentation
- {\global\chardef\recheckindentationmode\zerocount}
-
-\def\dorechecknextindentation
- {\ifcase\recheckindentationmode
- % nothing
- \or
- \dontrechecknextindentation
- \expandafter\doautoindentation
- \fi}
-
-\def\doautoindentation
- {\doifnextcharelse\par\donothing\noindentation}
-
-\def\autoindentation
- {\global\chardef\recheckindentationmode\plusone}
-
-%D An example of usage:
-%D
-%D \starttyping
-%D \setupindenting[small,yes]
-%D
-%D \setupitemize [indentnext=auto]
-%D \setuptyping [indentnext=auto]
-%D \setupformulas[indentnext=auto]
-%D
-%D \input tufte
-%D
-%D \startitemize
-%D \item itemize
-%D \stopitemize
-%D \input tufte
-%D
-%D \startitemize
-%D \item itemize
-%D \stopitemize
-%D
-%D \input tufte
-%D
-%D \startitemize
-%D \item itemize
-%D \stopitemize
-%D
-%D \page
-%D
-%D \input tufte
-%D
-%D \starttyping
-%D verbatim
-%D \stoptyping
-%D \input tufte
-%D
-%D \starttyping
-%D verbatim
-%D \stoptyping
-%D
-%D \input tufte
-%D
-%D \starttyping
-%D verbatim
-%D \stoptyping
-%D
-%D \page
-%D
-%D \input tufte
-%D
-%D \startformula
-%D a = b
-%D \stopformula
-%D \input tufte
-%D
-%D \startformula
-%D a = b
-%D \stopformula
-%D
-%D \input tufte
-%D
-%D \startformula
-%D a = b
-%D \stopformula
-
-
-%D \macros
-%D {frenchspacing,nonfrenchspacing}
-%D
-%D Smehow \type{\frenchspacing} can lead to hyphenation between
-%D dashes so we now have \type {\newfrenchspacing} (moved from
-%D \type {syst-chr}).
-
-%D Hm ... todo:
-
-\sfcode`\)=0
-\sfcode`\'=0
-\sfcode`\]=0
-
-\def\setfrenchspacing#1%
- {\sfcode`\.#1 \sfcode`\,#1\relax
- \sfcode`\?#1 \sfcode`\!#1\relax
- \sfcode`\:#1 \sfcode`\;#1\relax}
-
-\def\frenchspacing
- {\setfrenchspacing{1000}}
-
-\def\resetfrenchspacing
- {\sfcode`\.3000 \sfcode`\,1250
- \sfcode`\?3000 \sfcode`\!3000
- \sfcode`\:2000 \sfcode`\;1500 }
-
-\def\frenchspacing {\setfrenchspacing{1000}}
-\def\newfrenchspacing{\setfrenchspacing{1050}}
-\def\nonfrenchspacing{\resetfrenchspacing}
-
-\def\definespacingmethod[#1]#2{\setvalue{\??sg\??sg#1}{#2}}
-
-\definespacingmethod[\v!packed]{\newfrenchspacing}
-\definespacingmethod[\v!broad ]{\nonfrenchspacing}
-
-\def\complexsetupspacing[#1]%
- {\executeifdefined{\??sg\??sg#1}\relax
- \updateraggedskips}
-
-\def\simplesetupspacing
- {\updateraggedskips}
-
-\definecomplexorsimple\setupspacing
-
-% \dorecurse{100}{\recurselevel\spacefactor 800 \space} \par
-% \dorecurse{100}{\recurselevel\spacefactor1200 \space} \par
-% \dorecurse{100}{\recurselevel\spacefactor 800 \normalspaceprimitive} \par
-% \dorecurse{100}{\recurselevel\spacefactor1200 \normalspaceprimitive} \par
-
-% When we don't add the % here, we effectively get \<endlinechar> and
-% since we have by default \def\^^M{\ } we get into a loop.
-
-\let\normalspaceprimitive=\ % space-comment is really needed
-
-% hm ...
-
-\unexpanded\def\ {\mathortext\normalspaceprimitive\space} % no \dontleavehmode\space (else no frenchspacing)
-
-% Because I strip spaces at the end of lines (in the editor) we need a bit of
-% a trick to define slash+newline, so \<space> and \<newline> are the same
-
-\ctxlua{tex.sprint(tex.ctxcatcodes,"\string\\unexpanded\string\\def\string\\\string\n{\string\\ }")}
-
-\unexpanded\def\nonbreakablespace{\penalty\plustenthousand\mathortext\ \space} % no space in math
-
-\letcatcodecommand \ctxcatcodes `\~ \nonbreakablespace % overloaded later
-
-\def\space { }
-\def\removelastspace{\ifhmode\unskip\fi}
-\def\nospace {\removelastspace\ignorespaces}
-
-% in tables we need:
-%
-% \def\fixedspace {\hskip.5em\relax}
-%
-% but, since not all fonts have .5em digits:
-
-\unexpanded\def\fixedspace
- {\setbox\scratchbox\normalhbox{\mathortext{0}{0}}%
- \hskip\wd\scratchbox\relax}
-
-\def\fixedspaces
- {\letcatcodecommand \ctxcatcodes `\~ \fixedspace}
-
-\appendtoks\let~\space\to\simplifiedcommands
-
-% \def\removeunwantedspaces
-% {\ifhmode % we also need to unskip 0pt skips
-% \unskip\unskip\unskip\unskip\unskip
-% \unskip\unskip\unskip\unskip\unskip
-% \fi}
-
-\unexpanded\def\removeunwantedspaces
- {\ifhmode
- \expandafter \doremoveunwantedspace
- \fi}
-
-\def\doremoveunwantedspace
- {\ifnum\lastnodetype=\@@gluenode
- \unskip \expandafter\doremoveunwantedspace
- \fi}
-
-% \startbuffer
-% \startlines \tt \fixedspaces
-% 0~1~~2~~~3~~~~4~~~~~5
-% 0~~~~~~~~~~~~~~~~~~~5
-% $0~1~~2~~~3~~~~4~~~~~5$
-% $0~~~~~~~~~~~~~~~~~~~5$
-% \stoplines
-%
-% \starttabulate[|~|]
-% \NC 0~1~~2~~~3~~~~4~~~~~5 \NC \NR \NC 0~~~~~~~~~~~~~~~~~~~5 \NC \NR
-% \NC $0~1~~2~~~3~~~~4~~~~~5$ \NC \NR \NC $0~~~~~~~~~~~~~~~~~~~5$ \NC \NR
-% \stoptabulate
-%
-% \starttable[||]
-% \NC 0~1~~2~~~3~~~~4~~~~~5 \NC \AR \NC 0~~~~~~~~~~~~~~~~~~~5 \NC \AR
-% \NC $0~1~~2~~~3~~~~4~~~~~5$ \NC \AR \NC $0~~~~~~~~~~~~~~~~~~~5$ \NC \AR
-% \stoptable
-% \stopbuffer
-%
-% \setupbodyfont[cmr] \getbuffer
-% \setupbodyfont[lbr] \getbuffer
-
-\def\packed
- {\nointerlineskip}
-
-\def\godown[#1]%
- {\relax
- \ifhmode\endgraf\fi
- \ifvmode\nointerlineskip\vskip#1\relax\fi}
-
-%D A couple of plain macros:
-
-\ifx\thinspace\undefined
-
- \def\thinspace {\kern .16667em }
- \def\negthinspace{\kern-.16667em }
- \def\enspace {\kern .5em }
-
- \def\thinspace {\kern .16667\emwidth}
- \def\negthinspace{\kern-.16667\emwidth}
- \def\enspace {\kern .5\emwidth}
-
-\fi
-
-\ifx\quad\undefined
-
- \def\enskip{\hskip.5em\relax}
- \def\quad {\hskip 1em\relax}
- \def\qquad {\hskip 2em\relax}
-
- \def\enskip{\hskip.5\emwidth}
- \def\quad {\hskip \emwidth}
- \def\qquad {\hskip 2\emwidth}
-
-\fi
-
-\let\emspace\quad
-
-\ifx\smallskip\undefined
-
- \def\smallskip{\vskip\smallskipamount}
- \def\medskip {\vskip\medskipamount}
- \def\bigskip {\vskip\bigskipamount}
-
-\fi
-
-\ifx\allowbreak\undefined
-
- \def\break {\penalty\ifhmode-\plustenthousand\else\ejectpenalty\fi}
- \def\nobreak {\penalty \plustenthousand}
- \def\allowbreak{\penalty \zeropoint}
- \def\filbreak {\par\vfil\penalty-200\vfilneg}
- \def\goodbreak {\par\penalty-500 }
-
-\fi
-
-%D Made slightly more readable:
-
-\ifx\vglue\undefined
-
- \def\vglue {\afterassignment\dovglue\scratchskip=}
- \def\hglue {\afterassignment\dohglue\scratchskip=}
- \def\topglue{\nointerlineskip\vglue-\topskip\vglue}
-
- \def\dovglue
- {\par
- \scratchdimen\prevdepth
- \hrule\!!height\zeropoint
- \nobreak\vskip\scratchskip
- \prevdepth\scratchdimen}
-
- \def\dohglue
- {\dontleavehmode % \leavevmode
- \scratchcounter\spacefactor
- \vrule\!!width\zeropoint
- \nobreak\hskip\scratchskip
- \spacefactor\scratchcounter}
-
-\fi
-
-\ifx\eject\undefined
-
- \def\eject{\par\break}
-
-\fi
-
-\ifx\supereject\undefined
-
- \def\supereject{\par\penalty\superpenalty}
-
-\fi
-
-\ifx\dosupereject\undefined
-
- \def\dosupereject
- {\ifnum\insertpenalties>\zerocount % something is being held over
- \line{}
- \kern-\topskip
- \nobreak
- \vfill\supereject
- \fi}
-
-\fi
-
-%D We adapt plain's \type {\removelastskip} a bit:
-
-\ifx\removelastskip\undefined
-
- \def\removelastskip
- {\ifvmode \ifdim\lastskip=\zeropoint \else
- \vskip-\lastskip
- \fi \fi}
-
-\fi
-
-\ifx\smallbreak\undefined
-
-\def\smallbreak
- {\par
- \ifdim\lastskip<\smallskipamount
- \removelastskip
- \penalty-50
- \smallskip
- \fi}
-
-\def\medbreak
- {\par
- \ifdim\lastskip<\medskipamount
- \removelastskip
- \penalty-100
- \medskip
- \fi}
-
-\def\bigbreak
- {\par
- \ifdim\lastskip<\bigskipamount
- \removelastskip
- \penalty-200
- \bigskip
- \fi}
-
-\fi
-
-\newskip\ctxparskip \ctxparskip\zeropoint
-
-\newconditional \flexiblewhitespace \settrue\flexiblewhitespace
-
-\def\blankokleinmaat {\smallskipamount}
-\def\blankomiddelmaat {\medskipamount}
-\def\blankogrootmaat {\bigskipamount}
-\def\currentwhitespace {\zeropoint}
-
-\definecomplexorsimple\setupwhitespace
-
-\def\simplesetupwhitespace
- {\doifnot\currentwhitespace\v!none\dosetupwhitespace}
-
-\def\complexsetupwhitespace[#1]%
- {\edef\nextcurrentwhitespace{#1}%
- \ifx\nextcurrentwhitespace\empty
- \simplesetupwhitespace
- \else
- \let\currentwhitespace\nextcurrentwhitespace
- \dosetupwhitespace
- \fi}
-
-\def\dosetupwhitespace % quick test for no list
- {\ifcsname\??ws\??ws\currentwhitespace\endcsname
- \csname\??ws\??ws\currentwhitespace\endcsname
- \else
- \expandafter\processcommalist\expandafter[\currentwhitespace]\dowhitespacemethod % can be raw
- \fi\relax
- \ifgridsnapping
- \setfalse\flexiblewhitespace
- \ifdim\ctxparskip>\zeropoint
- \ctxparskip
- \ifcase\baselinegridmode
- \baselineskip % normal ! ! ! ! !!
- \or
- \ifdim\scratchdimen=\baselineskip % maybe range
- \baselineskip % normal ! ! ! ! !!
- \else
- \numexpr\ctxparskip/\dimexpr.5\lineheight\relax\relax\dimexpr.5\lineheight\relax
- \fi
- \else
- \baselineskip % normal ! ! ! ! !!
- \fi
- \fi
- \else
- \ifconditional\flexiblewhitespace \else \ctxparskip1\ctxparskip \fi
- \fi
- \parskip\ctxparskip}
-
-\chardef\baselinegridmode=0 % option in layout / 1=permit_half_lines
-
-\def\dodosetupwhitespace
- {\ifgridsnapping
- \setfalse\flexiblewhitespace
- \ctxparskip1\ctxparskip
- \ifdim\ctxparskip>\zeropoint
- \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
- \ifconditional\flexiblewhitespace \else \ctxparskip1\ctxparskip \fi
- \fi
- \parskip\ctxparskip}
-
-\definesystemvariable {ws} % whitespace
-
-\def\definewhitespacemethod[#1]#2{\setvalue{\??ws\??ws#1}{#2}}
-
-\definewhitespacemethod [\v!fix] {}
-\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 \bigskipamount}
-\definewhitespacemethod [\v!medium] {\ctxparskip \medskipamount}
-\definewhitespacemethod [\v!small] {\ctxparskip \smallskipamount}
-
-\definewhitespacemethod [\s!default] {\simplesetupwhitespace} % {\stelwitruimteopnieuwin}
-
-% \def\dowhitespacemethod#1%
-% {\executeifdefined{\??ws\??ws#1}{\ctxparskip#1}\relax}
-
-\def\dowhitespacemethod#1%
- {\ifcsname\??ws\??ws#1\endcsname\csname\??ws\??ws#1\endcsname\else\ctxparskip#1\fi\relax}
-
-\def\nowhitespace
- {\ifdim\parskip>\zeropoint\relax
- \ifdim\lastskip=-\parskip
- \else
- \vskip-\parskip
- \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}%
-% \ifconditional\flexiblewhitespace
-% \noexpand\settrue\flexiblewhitespace
-% \else
-% \noexpand\setfalse\flexiblewhitespace
-% \fi}}
-
-\def\savecurrentwhitespace {\edef\savedcurrentwhitespace{\currentwhitespace}}
-\def\restorecurrentwhitespace{\edef\currentwhitespace{\savedcurrentwhitespace}}
-
-\def\savedcurrentwhitespace{\currentwhitespace}
-
-% deze variant is nodig binnen \startopelkaar
-% steeds testen:
-%
-% \hoofdstuk{..}
-% \plaatslijst[..]
-% \hoofdstuk{..}
-% \input tufte
-%
-% met/zonder witruimte
-
-\def\whitespace
- {\par
- \ifdim\parskip>\zeropoint\relax
- %\ifdim\lastskip>\parskip \else
- % \removelastskip interferes with blanko blokkeer en klein
- \vskip\parskip
- %\fi
- \fi}
-
-\def\nonoblanko[#1]%
- {\par}
-
-\def\noblanko
- {\dosingleempty\nonoblanko}
-
-% I'm not sure if the restore is still needed. Anyway, when we do
-% restore, we get a parskip someplace in the output that will push
-% the content off page (\vbox to pageheight{skip smashed-box}) so
-% we have now disabled this hack. If it is introduced again it needs
-% to be more controlled. Test case:
-%
-% \setupwhitespace[big]
-% \starttext
-% \startcolumns[n=2]\dorecurse{200}{test\crlf}\stopcolumns
-% \stoptext
-%
-% \def\saveouterspacing
-% {\savecurrentblank
-% \savecurrentwhitespace
-% \def\restoreouterspacing
-% {\restorecurrentblank
-% \restorecurrentwhitespace}}
-%
-% \let\restoreouterspacing\relax
-% \let\saveouterspacing \relax % mult-ini: i will look into it when needed
-%
-% let's test this (restore before we restore the global bodyfont):
-
-\def\saveouterspacing
- {\savecurrentblank
- \savecurrentwhitespace}
-
-\def\restoreouterspacing
- {\restorecurrentblank
- \restorecurrentwhitespace}
-
-% De onderstaande macro handelt ook de situatie dat er geen
-% tekst tussen \start ... \stop is geplaatst. Daartoe wordt de
-% laatste skip over de lege tekst heen gehaald. Dit komt goed
-% van pas bij het plaatsen van (mogelijk lege) lijsten.
-
-\newif\ifopelkaar
-
-\newsignal \noparskipsignal % \def\noparskipsignal {0.00001pt}
-\def\lastdoneparskip {0pt}
-
-\def\startpacked
- {\dosingleempty\dostartpacked}
-
-\def\dostartpacked[#1]% nesting afvangen
- {\par
- \ifvmode
- \edef\lastdoneparskip {\the\lastskip}%
- \edef\lastdoneprevdepth{\the\prevdepth}% zeer recent toegevoegd
- \ifdim\prevdepth=-\thousandpoint % toegevoegd omdat binnen
- \else % een vbox een extra skip
- \whitespace % ongewenst is; dit kan
- \baselinecorrection %% zie in \placeregister[n=1]
- \vskip\noparskipsignal % waarschijnlijk ook in
- \fi % blanko blokkeer
- \bgroup
- \doifelse{#1}\v!blank
- \opelkaarfalse
- \opelkaartrue
- \blank[\v!disable] % dit is nog niet ok, gaat fout
- \setupwhitespace[\v!none] % bovenin vtop (dwz, baseline)
- \fi}
-
-\def\stoppacked
- {\par
- \ifvmode
- \egroup
- \ifdim\lastskip=\noparskipsignal\relax
- \removelastskip
- \nowhitespace
- \vskip-\lastdoneparskip
- \vskip+\lastdoneparskip
- \prevdepth-\lastdoneprevdepth % zeer recent toegevoegd
- \fi
- \fi}
-
-\def\startunpacked
- {\blank
- \leavevmode
- \bgroup}
-
-\def\stopunpacked
- {\egroup
- \blank}
-
-% De onderstaande macro's moeten nog eens nader worden uitgewerkt.
-% Ze spelen een rol bij de spatiering rond omkaderde teksten
-% en/of boxen zonder diepte.
-
-\def\toonregelcorrectie{\showbaselinecorrection}
-\def\regelcorrectie {\baselinecorrection}
-
-% \prevdepth crosses pageboundaries!
-%
-% todo: a version that works ok inside a box
-
-\let\doaroundlinecorrection\relax
-
-\def\startlinecorrection
- {\dodoubleempty\dostartlinecorrection}
-
-\def\dostartlinecorrection[#1][#2]% #2 gobbles spaces
- {\bgroup
- \processaction
- [#1]
- [ \v!blank=>\let\doaroundlinecorrection\blank,
- \s!default=>\let\doaroundlinecorrection\relax,
- \s!unknown=>{\def\doaroundlinecorrection{\blank[#1]}}]%
- \doaroundlinecorrection
- \startbaselinecorrection
- \offbaselinecorrection
- \ignorespaces}
-
-\def\stoplinecorrection
- {\stopbaselinecorrection
- \doaroundlinecorrection
- \egroup}
-
-\def\correctwhitespace
- {\dowithnextbox
- {\startbaselinecorrection
- \flushnextbox
- \stopbaselinecorrection}%
- \vbox}
-
-\def\verticalstrut {\normalvbox{\hsize\zeropoint\forgetall\strut}}
-\def\horizontalstrut{\normalhbox {\strut}}
-
-% Hieronder volgen enkele instellingen en macro's ten behoeve
-% van de interlinie en \strut. De waarden 2.8, 0.07, 0.72 en
-% 0.28 zijn ooit eens ontleend aan INRS-TEX en moeten wellicht
-% nog eens instelbaar worden.
-%
-% \lineheight : de hoogte van een regel
-% \spacing{getal} : instellen interlinie
-% \normalbaselines : instellen regelafstend
-%
-% \setstrut : instellen \strut
-% \setnostrut : resetten \strut, \endstrut, \begstrut
-%
-% \setteststrut : instellen zichtbare struts
-% \resetteststrut : instellen onzichtbare struts
-%
-% \setfontparameters : instellen na fontset
-%
-% De hoogte van een regel (\lineheight) is gelijk aan de
-% som van de hoogte (\ht) en diepte (\dp) van \strutbox.
-%
-% \strut : denkbeeldig blokje met hoogte en diepte
-%
-% Een \hbox kan als deze aan het begin van een regel staat
-% een breedte \hsize krijgen. Dit is soms te voorkomen met het
-% commando \leavevmode. Binnen een \vbox geeft dit echter
-% niet altijd het gewenste resultaat, vandaar het commando
-%
-% \leaveoutervmode
-
-% Pas op: niet zomaar \topskip en \baselineskip aanpassen
-% en zeker niet \widowpenalty. Dit kan ernstige gevolgen
-% hebben voor kolommen.
-%
-% Enige glue kan op zich geen kwaad, echter als blanko=vast,
-% dan moet ook de rek 0 zijn. Binnen kolommen is rek ook
-% niet bepaald mooi. Een hele kleine waarde (0.025) voldoet,
-% omdat een positieve glue eindeloos rekbaar is.
-
-\newdimen\strutdimen
-\newdimen\lineheight
-\newdimen\openlineheight
-\newdimen\openstrutheight
-\newdimen\openstrutdepth
-\newdimen\topskipgap
-\newdimen\struttotal
-
-\def\strutheightfactor {.72}
-\def\strutdepthfactor {.28}
-
-\def\baselinefactor {2.8}
-\def\baselinegluefactor {0}
-
-\def\minimumstrutheight {0pt}
-\def\minimumstrutdepth {0pt}
-
-\def\normallineheight {\baselinefactor ex}
-\def\minimumlinedistance {\lineskip}
-
-\def\strutheight {0pt}
-\def\strutdepth {0pt}
-\def\strutwidth {0pt}
-
-\let\spacingfactor \plusone
-
-\def\topskipfactor {1.0}
-\def\maxdepthfactor {0.5}
-
-\def\systemtopskipfactor {\topskipfactor}
-\def\systemmaxdepthfactor {\maxdepthfactor}
-
-% De onderstaande definitie wordt in de font-module overruled
-
-\ifdefined\globalbodyfontsize\else
- \newdimen\globalbodyfontsize
- \globalbodyfontsize=12pt
-\fi
-
-\ifx\normalizedbodyfontsize\undefined
- \def\normalizedbodyfontsize{12pt}
-\fi
-
-% door een \dimen. Dit is geen probleem omdat (1) de default
-% korpsgrootte 12pt is en (2) de fonts nog niet geladen zijn
-% en de instellingen bij het laden nogmaals plaatsvinden.
-
-\def\topskipcorrection
- {\simpletopskipcorrection
- \vskip-\struttotal
- \verticalstrut}
-
-\def\simpletopskipcorrection
- {\ifdim\topskip>\openstrutheight
- % == \vskip\topskipgap
- \vskip\topskip
- \vskip-\openstrutheight
- \fi}
-
-\def\settopskip % the extra test is needed for the lbr family
- {\topskip\systemtopskipfactor\globalbodyfontsize
- \ifgridsnapping \else
- \ifr@ggedbottom\!!plus5\globalbodyfontsize\fi
- \fi
- \relax % the skip
- \topskipgap\topskip
- \advance\topskipgap -\openstrutheight\relax
-\ifdim\minimumstrutheight>\zeropoint
- \ifdim\topskip<\minimumstrutheight
- \topskip\minimumstrutheight\relax
- \fi
-\else
- \ifdim\topskip<\strutheightfactor\openlineheight
- \topskip\strutheightfactor\openlineheight\relax
- \fi
-\fi}
-
-\def\setmaxdepth
- {\maxdepth\systemmaxdepthfactor\globalbodyfontsize}
-
-\def\normalbaselines
- {\baselineskip \normalbaselineskip
- \lineskip \normallineskip
- \lineskiplimit\normallineskiplimit}
-
-\def\setnormalbaselines
- {\ifdim\normallineheight>\zeropoint
- \lineheight\normallineheight
- \fi
- \openlineheight\spacingfactor\lineheight
- \openstrutheight \ifdim\minimumstrutheight>\zeropoint
- \minimumstrutheight % new
- \else
- \strutheightfactor\openlineheight
- \fi
- \openstrutdepth \ifdim\minimumstrutdepth>\zeropoint
- \minimumstrutdepth % new
- \else
- \strutdepthfactor \openlineheight
- \fi
- \ifdim\dimexpr\minimumstrutdepth+\minimumstrutheight\relax>\zeropoint
- \openlineheight\dimexpr\openstrutheight+\openstrutdepth\relax % new
- \fi
- \normalbaselineskip\openlineheight
- \ifgridsnapping\else
- \!!plus \baselinegluefactor\openlineheight
- \!!minus\baselinegluefactor\openlineheight
- \fi
- \normallineskip\minimumlinedistance\relax % \onepoint\relax
- \normallineskiplimit\zeropoint\relax
- \normalbaselines
- \dosetupgridsnapping}
-
-\def\spacing#1%
- {\ifgridsnapping
- %\ifdim#1\points=\onepoint\else\showmessage\m!layouts{11}{\withoutpt\the\dimexpr#1\points\relax}\fi
- \let\spacingfactor\plusone
- \else
- \edef\spacingfactor{#1}%
- \fi
- \edef\systemtopskipfactor {\withoutpt\the\dimexpr#1\dimexpr\topskipfactor \points}%
- \edef\systemmaxdepthfactor{\withoutpt\the\dimexpr#1\dimexpr\maxdepthfactor\points}%
- \setnormalbaselines
- \setstrut}
-
-%D Sometimes one needs to freeze the interlinespacing
-%D
-%D \starttyping
-%D \rm \saveinterlinespace .... {\ss \restoreinterlinespace .... \endgraf}
-%D \stoptyping
-
-\let\restoreinterlinespace\relax
-
-\def\saveinterlinespace
- {\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\dimexpr\normallineheight}%
- \noexpand\normalbaselines}}
-
-% plain definition:
-%
-% \def\strut{\relax\ifmmode\copy\strutbox\else\unhcopy\strutbox\fi}
-%
-% could be:
-%
-% \def\strut{\relax\ifmmode\copy\else\unhcopy\fi\strutbox}
-
-\ifx\strutbox\undefined
-
- \newbox\strutbox
-
- \setbox\strutbox\normalhbox{\vrule height8.5pt depth3.5pt width\zeropoint}
-
- \def\strut{\relax\ifmmode\copy\else\unhcopy\fi\strutbox}
-
-\fi
-
-\let\normalstrut\strut
-
-% The double \hbox construction enables us to \backtrack
-% boxes.
-
-\let\strutht\undefined \newdimen\strutht
-\let\strutdp\undefined \newdimen\strutdp
-
-\unexpanded\def\setstrut
- {\ifgridsnapping
- \setstrutgridyes
- \else
- \setstrutgridnop
- \fi}
-
-\unexpanded\def\setstrutgridyes
- {\strutht\spacingfactor\dimexpr
- \ifdim\minimumstrutheight>\zeropoint
- \minimumstrutheight
- \else
- \strutheightfactor\dimexpr\normallineheight
- \fi
- \strutdp\dimexpr
- \ifdim\minimumstrutdepth>\zeropoint
- \minimumstrutdepth
- \else
- \normallineheight-\strutht
- \fi
- \dosetstrut}
-
-\unexpanded\def\setstrutgridnop
- {\strutht\spacingfactor\dimexpr
- \ifdim\minimumstrutheight>\zeropoint
- \minimumstrutheight
- \else
- \strutheightfactor\dimexpr\normallineheight
- \fi
- \strutdp\spacingfactor\dimexpr
- \ifdim\minimumstrutdepth>\zeropoint
- \minimumstrutdepth
- \else
- \strutdepthfactor\dimexpr\normallineheight
- \fi
- \dosetstrut}
-
-\unexpanded\def\setcharstrut#1%
- {\setbox\strutbox\normalhbox{#1}%
- \strutht\ht\strutbox
- \strutdp\dp\strutbox
- \dosetstrut}
-
-\unexpanded\def\setfontstrut
- {\setcharstrut{(gplQT}}
-
-\unexpanded\def\setcapstrut% could be M, but Q has descender
- {\setcharstrut{Q}}
-
-%D Handy for math (used in mathml):
-
-\def\charhtstrut
- {\begingroup
- \setcharstrut{GJY}%
- \vrule\!!width\zeropoint\!!depth\zeropoint\!!height\strutht
- \endgroup}
-
-\def\chardpstrut
- {\begingroup
- \setcharstrut{gjy}%
- \vrule\!!width\zeropoint\!!depth\strutdp\!!height\zeropoint
- \endgroup}
-
-% 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
- \edef\strutheight{\the\strutht}%
- \edef\strutdepth {\the\strutdp}%
- \ifdim\strutwidth=\zeropoint
- \dosetstruthide
- \else
- \dosetstrutvide
- \fi
- \struttotal\dimexpr\strutht+\strutdp\relax}
-
-\def\dosetstruthide
- {\setbox\strutbox\normalhbox
- {\vrule
- \!!width \zeropoint
- \!!height\strutht
- \!!depth \strutdp}}
-
-\def\dosetstrutvide
- {\setbox\strutbox\normalhbox
- {\normalhbox to \zeropoint
- {% \hss % new, will be option
- \vrule
- \!!width \strutwidth
- \!!height\strutht
- \!!depth \strutdp
- \hss}}}
-
-%D The dimen \type {\struttotal} holds the exact size of the
-%D strut; occasionally a one scaled point difference can show
-%D up with the lineheight.
-
-% experiment
-
-\newbox\emptystrutbox \setbox\emptystrutbox\hbox{}
-
-\def\dosetstruthide
- {\setbox\strutbox\copy\emptystrutbox
- \ht\strutbox\strutht
- \dp\strutbox\strutdp}
-
-\def\strut{\relax\dontleavehmode\copy\strutbox} % still callbacks for \hbox{\strut}
-
-
-\let\normalstrut\strut
-
-%D Sometimes a capstrut comes in handy
-%D
-%D \starttabulate[|Tl|l|l|]
-%D \NC yes \NC normal strut \NC {\showstruts\setupstrut[yes]\strut} \NC \NR
-%D \NC no \NC no strut \NC {\showstruts\setupstrut[no]\strut} \NC \NR
-%D \NC kap \NC a capital strut (i.e. Q) \NC {\showstruts\setupstrut[cap]\strut} \NC \NR
-%D \NC A B \unknown \NC a character strut (e.g. A) \NC {\showstruts\setupstrut[A]\strut} \NC \NR
-%D \NC \NC a normal strut \NC {\showstruts\setupstrut\strut} \NC \NR
-%D \stoptabulate
-
-\def\setupstrut
- {\dosingleempty\dosetupstrut}
-
-\def\dosetupstrut[#1]% yet undocumented, todo: fontstrut
- {\processaction
- [#1]
- [ \v!yes=>\setstrut,
- \v!auto=>\setautostrut,
- \v!no=>\setnostrut,
- \v!cap=>\setcapstrut,
- \v!fit=>\setfontstrut,
- \v!line=>\setstrut,
- \s!default=>\setstrut,
- \s!unknown=>\setcharstrut\commalistelement]}
-
-\def\setteststrut
- {\def\strutwidth{.8pt}%
- \setstrut}
-
-\def\autostrutfactor{1.1}
-
-\def\setautostrut
- {\begingroup
- \setbox\scratchbox\copy\strutbox
- \setstrut
- \ifdim\strutht>\autostrutfactor\ht\scratchbox
- \endgroup \setstrut
- \else\ifdim\strutdp>\autostrutfactor\dp\scratchbox
- \endgroup \setstrut
- \else
- \endgroup
- \fi\fi}
-
-% when enabled, sigstruts will remove themselves if nothing
-% goes inbetween
-
-\newsignal\strutsignal \setfalse\sigstruts
-
-\def\begstrut
- {\relax\ifcase\strutht\else
- \ifconditional\sigstruts
- \noindent\horizontalstrut
- \normalpenalty\plustenthousand
- \normalhskip-\strutsignal
- \normalhskip\strutsignal
- \else
- \strut
- \normalpenalty\plustenthousand
- \normalhskip\zeropoint
- \fi
- \expandafter \ignorespaces
- \fi}
-
-\def\endstrut
- {\relax\ifhmode\ifcase\strutht\else
- \ifconditional\sigstruts
- \ifdim\lastskip=\strutsignal
- \unskip\unskip\unpenalty\setbox\scratchbox\lastbox
- \else
- \normalpenalty\plustenthousand
- \normalhskip\zeropoint
- \strut
- \fi
- \else
- \removeunwantedspaces
- \normalpenalty\plustenthousand
- \normalhskip\zeropoint
- \strut
- \fi
- \fi\fi}
-
-\newbox\nostrutbox \setbox\nostrutbox\normalhbox{} % {\normalhbox{}}
-
-\def\setnostrut
- {\setbox\strutbox\copy\nostrutbox
- \let\strut\empty
- \let\endstrut\empty
- \let\begstrut\empty
- \let\crlfplaceholder\empty}
-
-% unsave:
-%
-% \def\pseudostrut
-% {\bgroup
-% \setnostrut
-% \normalstrut
-% \egroup}
-%
-% try:
-%
-% \startchemie
-% \chemie[ONE,Z0,SB15,MOV1,SB15,Z0][C,C]
-% \stopchemie
-%
-% so:
-
-\def\pseudostrut
- {\noindent} % better: \dontleavehmode
-
-\let\pseudobegstrut\pseudostrut
-
-\let\pseudoendstrut\removeunwantedspaces
-
-\def\resetteststrut
- {\let\strutwidth\zeropoint
- \setstrut}
-
-\ifx\setfontparameters\undefined
- % problems ! ! ! !
- \def\setfontparameters{\the\everybodyfont}
-\fi
-
-%D Handy:
-
-\def\baselinedistance{\the\lineheight}
-
-%D We need \type{\normaloffinterlineskip} because the new
-%D definition contains an assignment, and |<|don't ask me
-%D why|>| this assignment gives troubles in for instance the
-%D visual debugger.
-
-%D The plain ones:
-
-\def\offinterlineskip
- {\baselineskip-\thousandpoint
- \lineskip\zeropoint
- \lineskiplimit\maxdimen}
-
-\def\nointerlineskip
- {\prevdepth-\thousandpoint}
-
-\let\normaloffinterlineskip=\offinterlineskip % knuth's original
-
-%D My own one:
-
-\def\dopushinterlineskip
- {\edef\oninterlineskip
- {\baselineskip\the\baselineskip
- \lineskip\the\lineskip
- \lineskiplimit\the\lineskiplimit
- \let\noexpand\offinterlineskip\noexpand\normaloffinterlineskip}}
-
-\def\nopushinterlineskip
- {\let\oninterlineskip\setnormalbaselines}
-
-\def\offinterlineskip
- {\ifdim\baselineskip>\zeropoint
- \dopushinterlineskip
- \else
- \nopushinterlineskip
- \fi
- \normaloffinterlineskip}
-
-\let\oninterlineskip=\relax
-
-\def\leaveoutervmode
- {\ifvmode\ifinner\else
- \leavevmode
- \fi\fi}
-
-% We stellen enkele penalties anders in dan Plain TEX:
-
-% oud
-%
-% \widowpenalty=\defaultwidowpenalty\relax
-% \clubpenalty =\defaultclubpenalty \relax
-
-\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+\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\relax}{#2}\fi}
-
-%D \macros
-%D {keeplinestogether}
-%D
-%D Dirty hack, needed in margin content that can run of a page.
-
-% just before margintexts ... will eventually be done differently in mkiv using
-% attributes
-
-\newcount\nofkeeplinestogether
-\let\restoreinterlinepenalty\relax
-
-\def\dorestoreinterlinepenalty
- {\global\let\restoreinterlinepenalty\relax
- \global\resetpenalties\interlinepenalties
- \global\nofkeeplinestogether\zerocount}
-
-\def\keeplinestogether#1%
- {\ifnum#1>\nofkeeplinestogether
- \global\nofkeeplinestogether#1%
- \global\setpenalties\interlinepenalties\nofkeeplinestogether\plustenthousand
- \global\let\restoreinterlinepenalty\dorestoreinterlinepenalty
- \fi}
-
-\newif\ifgridsnapping % to be sure
-
-\def\defaultwidowpenalty {2000} % was: 1000
-\def\defaultclubpenalty {2000} % was: 800
-\def\defaultdisplaywidowpenalty {50}
-\def\defaultbrokenpenalty {100}
-
-\def\defaultgridwidowpenalty {0}
-\def\defaultgridclubpenalty {0}
-\def\defaultgriddisplaywidowpenalty {0}
-\def\defaultgridbrokenpenalty {0}
-
-\def\nopenalties
- {\widowpenalty \zerocount
- \clubpenalty \zerocount
- \brokenpenalty \zerocount
- \doublehyphendemerits\zerocount
- \finalhyphendemerits \zerocount
- \adjdemerits \zerocount}
-
-\def\setdefaultpenalties
- {\directsetup{\systemsetupsprefix\s!default}}
-
-\startsetups [\systemsetupsprefix\s!reset]
- \resetpenalties\widowpenalties
- \resetpenalties\clubpenalties
- \resetpenalties\interlinepenalties
-\stopsetups
-
-% we use \directsetup because it's faster and we know there is no csl
-
-\startsetups [\systemsetupsprefix\s!default]
-
- \directsetup{\systemsetupsprefix\s!reset}
-
- \widowpenalty \defaultwidowpenalty
- \clubpenalty \defaultclubpenalty
- \displaywidowpenalty\defaultdisplaywidowpenalty
- \brokenpenalty \defaultbrokenpenalty
-
-\stopsetups
-
-\startsetups [\v!grid] [\systemsetupsprefix\s!default]
-
- \directsetup{\systemsetupsprefix\s!reset}
-
- \widowpenalty \defaultgridwidowpenalty
- \clubpenalty \defaultgridclubpenalty
- \displaywidowpenalty\defaultgriddisplaywidowpenalty
- \brokenpenalty \defaultgridbrokenpenalty
-
-\stopsetups
-
-% as an illustration:
-
-\startsetups [\systemsetupsprefix\v!strict]
-
- \directsetup{\systemsetupsprefix\s!reset}
-
- \setpenalties\widowpenalties2\maxdimen
- \setpenalties\clubpenalties 2\maxdimen
- \brokenpenalty \maxdimen
-
-\stopsetups
-
-\setdefaultpenalties % will happen later in \setuplayout
-
-% Suggested by GB (not the name -):
-
-\def\rapfillskip{.5\hsize plus .092\hsize minus .5\hsize} % D.A.'s value
-
-% Bovendien definieren we enkele extra \fill's:
-
-\def\hfilll{\hskip\zeropoint\!!plus1filll\relax}
-\def\vfilll{\vskip\zeropoint\!!plus1filll\relax}
-
-% De onderstaande hulpmacro's moeten nog eens instelbaar worden
-% gemaakt.
-
-\def\tfskipsize{1em\relax}
-\def\tfkernsize{1ex\relax}
-
-\def\tfskip{\dotfskip\tfskipsize}
-\def\tfkern{\dotfkern\tfkernsize}
-
-\def\dotfskip#1{{\tf\hskip#1}}
-\def\dotfkern#1{{\tf\kern #1}}
-
-% needs a proper \definenarrower or installnarrower
-
-\newskip\ctxleftskip
-\newskip\ctxrightskip
-\newskip\ctxmidskip
-
-\def\dosinglenarrower#1%
- {\processaction
- [#1]
- [ \v!left=>\global\advance\ctxleftskip \@@slleft,
- \v!middle=>\global\advance\ctxmidskip \@@slmiddle,
- \v!right=>\global\advance\ctxrightskip \@@slright,
- \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
- {\dorepeatwithcommand[#1]\dosinglenarrower}
-
-\def\complexstartnarrower[#1]%
- {\@@slbefore % was hard coded \par
- \bgroup
- \global\ctxleftskip \zeropoint
- \global\ctxrightskip\zeropoint
- \global\ctxmidskip \zeropoint
- \processcommalistwithparameters[#1]\donarrower
- \advance\leftskip \ctxleftskip
- \advance\rightskip \ctxrightskip
- \advance\leftskip \ctxmidskip
- \advance\rightskip \ctxmidskip
- \seteffectivehsize}
-
-% todo: definenarrower
-
-\def\simplestartnarrower
- {\startnarrower[\v!middle]}
-
-\definecomplexorsimple\startnarrower
-
-\def\stopnarrower
- {\@@slafter % was hard coded \par / needed, else skips forgotten
- \egroup}
-
-\def\setupnarrower
- {\dodoubleargument\getparameters[\??sl]}
-
-\newdimen\@@effectivehsize \def\effectivehsize {\hsize}
-\newdimen\@@effectiveleftskip \def\effectiveleftskip {\leftskip}
-\newdimen\@@effectiverightskip \def\effectiverightskip{\rightskip}
-
-\def\seteffectivehsize
- {\setlocalhsize
- \@@effectivehsize \localhsize
- \@@effectiveleftskip \leftskip
- \@@effectiverightskip \rightskip
- \let\effectivehsize \@@effectivehsize
- \let\effectiveleftskip \@@effectiveleftskip
- \let\effectiverightskip\@@effectiverightskip}
-
-% We will not use bodydir and pagedir so we disable them. That way we get
-% normal hyperlink support.
-
-\let\@@bodydir\normalbodydir
-\let\@@pagedir\normalpagedir
-
-\unexpanded\def\bodydir{\afterassignment\do@@bodydir\@@bodydir} \let\normalbodydir\bodydir
-\unexpanded\def\pagedir{\afterassignment\do@@pagedir\@@pagedir} \let\normalpagedir\pagedir
-
-\def\do@@bodydir{\@@bodydir TLT\relax}
-\def\do@@pagedir{\@@pagedir TLT\relax}
-
-% This will become a more advanced layout controller soon:
-
-\unexpanded\def\lefttoright{\textdir TLT\pardir TLT\relax}
-\unexpanded\def\righttoleft{\textdir TRT\pardir TRT\relax}
-
-\def\dodefinehbox[#1][#2]%
- {\setvalue{hbox#1}##1%
- {\hbox to #2{\begstrut##1\endstrut\hss}}}
-
-\def\definehbox
- {\dodoubleargument\dodefinehbox}
-
-\def\iobox#1#2#3#% here #3# is not really needed
- {\vbox\bgroup % we want to return a vbox like the others
- \hbox\bgroup% we need to pack the signal with the box
- \signalrightpage
- \dowithnextboxcontent
- {\let\\=\endgraf\forgetall\doifrightpageelse#1#2}
- {\box\nextbox\egroup\egroup}
- \vbox#3}
-
-\def\obox{\iobox\raggedleft \raggedright} % outerbox
-\def\ibox{\iobox\raggedright\raggedleft} % innerbox
-
-\def\dosetraggedvbox#1%
- {\let\raggedbox\vbox
- \processfirstactioninset
- [#1]
- [ \v!left=>\let\raggedbox\lbox,
- \v!right=>\let\raggedbox\rbox,
- \v!middle=>\let\raggedbox\cbox,
- \v!inner=>\let\raggedbox\ibox,
- \v!outer=>\let\raggedbox\obox,
- \v!flushleft=>\let\raggedbox\rbox,
- \v!flushright=>\let\raggedbox\lbox,
- \v!center=>\let\raggedbox\cbox,
- \v!no=>\def\raggedbox{\vbox\bgroup\raggedright\let\next=}]}
-
-\def\dosetraggedhbox#1%
- {\let\raggedbox\hbox
- \processaction % slow
- [#1]
- [ \v!left=>\def\raggedbox{\doalignedline\v!left },
- \v!right=>\def\raggedbox{\doalignedline\v!right },
- \v!middle=>\def\raggedbox{\doalignedline\v!middle},
- \v!inner=>\def\raggedbox{\doalignedline\v!inner },
- \v!outer=>\def\raggedbox{\doalignedline\v!outer },
- \v!flushleft=>\def\raggedbox{\doalignedline\v!right },
- \v!flushright=>\def\raggedbox{\doalignedline\v!left },
- \v!center=>\def\raggedbox{\doalignedline\v!middle}]}
-
-\def\dosetraggedcommand#1%
- {\normalexpanded{\noexpand\dodosetraggedcommand{#1}}}
-
-\newtoks\everyraggedcommand
-
-\def\raggedcommand{\the\everyraggedcommand}
-
-\def\dodosetraggedcommand#1% beware: #1=empty is ignored, keep that!
- {\everyraggedcommand \emptytoks
- \let\raggedtopcommand \empty
- \let\raggedbottomcommand\empty
- \chardef\raggedoneliner\zerocount
- \doifsomething{#1}
- {\doifinsetelse\v!broad{#1}\!!doneatrue\!!doneafalse
- \doifinsetelse\v!wide {#1}\!!donebtrue\!!donebfalse
- \!!donectrue
- \rawprocesscommalist[#1]\dododosetraggedcommand}}
-
-\def\dododosetraggedcommand#1%
- {\executeifdefined{\@@ragged@@command\string#1}\relax}
-
-\def\@@ragged@@command{@@raggedcommand}
-
-\setvalue{\@@ragged@@command\v!hanging }{\appendtoks\enableprotruding \to\everyraggedcommand}
-\setvalue{\@@ragged@@command\v!nothanging }{\appendtoks\disableprotruding \to\everyraggedcommand}
-\setvalue{\@@ragged@@command\v!hz }{\appendtoks\enableadjusting \to\everyraggedcommand}
-\setvalue{\@@ragged@@command\v!nohz }{\appendtoks\disableadjusting \to\everyraggedcommand}
-\setvalue{\@@ragged@@command\v!spacing }{\appendtoks\enablespacehandling
- \enablekernhandling \to\everyraggedcommand}
-\setvalue{\@@ragged@@command\v!nospacing }{\appendtoks\disablespacehandling
- \disablekernhandling \to\everyraggedcommand}
-\setvalue{\@@ragged@@command\v!hyphenated }{\appendtoks\dohyphens \to\everyraggedcommand}
-\setvalue{\@@ragged@@command\v!nothyphenated}{\appendtoks\nohyphens \to\everyraggedcommand}
-
-\setvalue{\@@ragged@@command\v!tolerant }{\appendtoks\tolerance3000\relax \to\everyraggedcommand}
-\setvalue{\@@ragged@@command\v!verytolerant}{\appendtoks\tolerance4500\relax \to\everyraggedcommand}
-\setvalue{\@@ragged@@command\v!stretch }{\appendtoks\emergencystretch\bodyfontsize\to\everyraggedcommand}
-
-\setvalue{\@@ragged@@command\v!left}%
- {\if!!donea \appendtoks\veryraggedleft\to\everyraggedcommand
- \else \appendtoks\raggedleft \to\everyraggedcommand
- \fi
- \!!donecfalse}
-
-\setvalue{\@@ragged@@command\v!right}%
- {\if!!donea \appendtoks\veryraggedright\to\everyraggedcommand
- \else \appendtoks\raggedright \to\everyraggedcommand
- \fi
- \!!donecfalse}
-
-\setvalue{\@@ragged@@command\v!middle}%
- {\if!!donec
- \if!!doneb \appendtoks\raggedwidecenter\to\everyraggedcommand
- \else\if!!donea \appendtoks\veryraggedcenter\to\everyraggedcommand
- \else \appendtoks\raggedcenter \to\everyraggedcommand
- \fi\fi
- \!!donecfalse
- \else
- \let\raggedbottomcommand\vfilll % bonus, pretty strong
- \let\raggedtopcommand \vfilll % used with \framed for
- \fi} % instance in tables
-
-\setvalue{\@@ragged@@command\v!flushleft }{\getvalue{\@@ragged@@command\v!right }}
-\setvalue{\@@ragged@@command\v!flushright}{\getvalue{\@@ragged@@command\v!left }}
-\setvalue{\@@ragged@@command\v!center }{\getvalue{\@@ragged@@command\v!middle}}
-
-\setvalue{\@@ragged@@command\v!high}%
- {\let\raggedbottomcommand\vfilll} % and since we lack a
-
-\setvalue{\@@ragged@@command\v!low}%
- {\let\raggedtopcommand\vfilll} % proper keyword, but
-
-\setvalue{\@@ragged@@command\v!lohi}%
- {\let\raggedbottomcommand\vfilll % we do support the
- \let\raggedtopcommand\vfilll} % ugly laho (lohi)
-
-\setvalue{\@@ragged@@command\v!no}%
- {\appendtoks\raggedright\to\everyraggedcommand}
-
-\setvalue{\@@ragged@@command\v!yes}%
- {\appendtoks\notragged\to\everyraggedcommand}
-
-\setvalue{\@@ragged@@command\v!normal}%
- {\appendtoks\notragged\to\everyraggedcommand}
-
-\setvalue{\@@ragged@@command\v!inner}% not yet perfect
- {\signalrightpage % may interfere
- \doifrightpageelse
- {\getvalue{\@@ragged@@command\v!right}}
- {\getvalue{\@@ragged@@command\v!left}}}
-
-\setvalue{\@@ragged@@command\v!outer}% not yet perfect
- {\signalrightpage % may interfere
- \doifrightpageelse
- {\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}
-
-\setvalue{\@@ragged@@command\v!lefttoright}{\appendtoks\lefttoright\to\everyraggedcommand}
-\setvalue{\@@ragged@@command\v!righttoleft}{\appendtoks\righttoleft\to\everyraggedcommand}
-\setvalue{\@@ragged@@command l2r}{\appendtoks\lefttoright\to\everyraggedcommand}
-\setvalue{\@@ragged@@command r2l}{\appendtoks\righttoleft\to\everyraggedcommand}
-
-% compare:
-%
-% \framed[width=4cm,align=no] {\hfil xxx}
-% \framed[width=4cm,align=disable]{\hfil xxx}
-
-\setvalue{\@@ragged@@command\v!disable}% for one liners
- {\appendtoks\raggedright\parfillskip\zeropoint\to\everyraggedcommand}
-
-\chardef\raggedoneliner\zerocount
-
-\setvalue{\@@ragged@@command\v!line}%
- {\chardef\raggedoneliner\plusone}
-
-% Nog doen:
-%
-% \goodbreak -> \allowbreak en \dosomebreak{..} in koppen
-%
-% bij koppen zowieso: \blanko[reset]
-
-% Nog in commando verwerken:
-%
-% \voorkeur la \blanko
-%
-% Om ongewenste witruimte te voorkomen kan met \dosomebreak{\break}
-% een \penalty voor witruimte worden geplaatst.
-
-\def\removelastskip % a redefinition of plain
- {\ifvmode\ifdim\lastskip=\zeropoint\else\vskip-\lastskip\fi\fi}
-
-\def\doifoutervmode#1%
- {\ifvmode\ifinner\else#1\fi\fi}
-
-\ifx\dosomebreak\undefined % defined in mkiv
-
- \def\dosomebreak#1%
- {\doifoutervmode
- {\scratchskip\lastskip
- \removelastskip
- %\leavevmode\type{#1}%
- #1\relax
- \ifdim\scratchskip=\zeropoint % else interference with footnotes
- \else
- \vskip\scratchskip
- \fi}}
-
-\fi
-
-\def\forgeteverypar
- {\everypar{\the\neverypar}}
-
-\def\forgetparindent
- {\forgeteverypar
- \indentfirstparagraphtrue % recently added
- \let\currentindentation\v!none
- \ctxparindent\zeropoint
- \parindent\zeropoint\relax}
-
-\def\forgetparskip
- {\let\currentwhitespace\v!none
- \ctxparskip\zeropoint
- \parskip\zeropoint\relax}
-
-\def\forgetbothskips
- {\tolerance1500
- \leftskip\zeropoint
- \rightskip\zeropoint\relax}
-
-\def\forgetspacing
- {\emergencystretch\zeropoint}
-
-\newif\ifforgotten % rather good signal for inner
-
-\appendtoks \forgottentrue \to \everyforgetall
-\appendtoks \forgetragged \to \everyforgetall
-\appendtoks \forgetparskip \to \everyforgetall
-\appendtoks \forgetparindent \to \everyforgetall
-\appendtoks \forgetbothskips \to \everyforgetall
-\appendtoks \forgetspacing \to \everyforgetall % i.v.m. funny spacing in pagebody
-\appendtoks \spacing\plusone \to \everyforgetall % new per 10/08/2004, else problems in otr / !! needed
-\appendtoks \everypar\emptytoks \to \everyforgetall % indeed!
-
-\def\localvbox#1#%
- {\vbox#1\bgroup
- \forgetparskip
- \setlocalhsize
- \hsize\localhsize
- \forgetparindent
- \forgetbothskips
- \forgeteverypar
- \let\next=}
-
-\let\dostopattributes\relax % in case these commands end up in an edef
-
-% \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
-% \expandafter\doconvertfont
-% \else
-% \expandafter\gobbleoneargument
-% \fi{\csname#1#2\endcsname}}
-
-\newconditional \parbasedattributes
-
-\def\finishparbasedattributes
- {\ifconditional\parbasedattributes
- \setfalse\parbasedattributes
- \par
- \fi}
-
-\def\dostopparbasedattributes
- {\settrue\parbasedattributes
- \dostopattributes}
-
-\unexpanded\def\@@dostopattributes
- {\stopcolor
- \finishparbasedattributes
- \endgroup}
-
-\unexpanded\def\@@nostopattributes
- {\finishparbasedattributes
- \endgroup}
-
-\unexpanded\def\doattributes#1#2#3#4%
- {\dostartattributes{#1}{#2}{#3}{#4}\dostopattributes}
-
-% An even faster \ETEX\ version:
-
-\unexpanded\def\dostartattributes#1#2#3%
- {\begingroup % geen \bgroup, anders in mathmode lege \hbox
- \ifincolor
- \ifcsname#1#3\endcsname
- \let\dostopattributes\@@dostopattributes
- \faststartcolor[\csname#1#3\endcsname]%
- \else
- \let\dostopattributes\@@nostopattributes
- \fi
- \else
- \let\dostopattributes\@@nostopattributes
- \fi
- \ifcsname#1#2\endcsname
- % \@EAEAEA\doconvertfont\@EA\@EA\csname#1#2\endcsname
- \@EA\doconvertfont\csname#1#2\@EA\endcsname
- \fi}
-
-\unexpanded\def\@@dostopattributes
- {\faststopcolor
- \finishparbasedattributes
- \endgroup}
-
-\unexpanded\def\@@nostopattributes
- {\finishparbasedattributes
- \endgroup}
-
-%D Bonus macro, see core-sec.tex
-
-\unexpanded\def\dosetfontattribute#1#2%
- {\ifcsname#1#2\endcsname
- \@EA\doconvertfont\csname#1#2\@EA\endcsname
- \fi\empty}
-
-%D Since this happens a lot, and sometimes large arguments
-%D are passed in \type {#4}, we just copy some code:
-
-\unexpanded\def\doattributes#1#2#3#4%
- {\begingroup % geen \bgroup, anders in mathmode lege \hbox
- \ifincolor
- \ifcsname#1#3\endcsname
- \let\dostopattributes\@@dostopattributes
- \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}
-
-% Kan vaker worden toegepast en moet bovendien sneller!
-
-\newskip\leftskipadaption
-\newskip\rightskipadaption
-
-\def\doadaptleftskip#1%
- {\dosetleftskipadaption{#1}%
- \advance\leftskip \leftskipadaption}
-
-\def\doadaptrightskip#1%
- {\dosetrightskipadaption{#1}%
- \advance\rightskip \rightskipadaption}
-
-\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
-\letvalue{@lsa@\empty }\zeropoint
-\setvalue{@rsa@\v!standard}{\@@slright}
-\setvalue{@rsa@\v!yes }{\@@slright}
-\letvalue{@rsa@\v!no }\zeropoint
-\letvalue{@rsa@\empty }\zeropoint
-
-\def\dosetleftskipadaption#1%
- {\edefconvertedargument\ascii{@lsa@#1}%
- \leftskipadaption
- \ifcsname\ascii\endcsname
- \csname\ascii\endcsname
- \else
- #1%
- \fi
- \relax}
-
-\def\dosetrightskipadaption#1%
- {\edefconvertedargument\ascii{@rsa@#1}%
- \rightskipadaption
- \ifcsname\ascii\endcsname
- \csname\ascii\endcsname
- \else
- #1%
- \fi
- \relax}
-
-\newcount \noftrackedpagestates
-\newif \ifpagestatemismatch
-\newcount \realpagestateno
-\chardef \frozenpagestate \zerocount
-
-\def\dotrackpagestate#1#2%
- {\ifdoublesided \ifinpagebody \else
- \doforcedtrackpagestate{#1}{#2}%
- \fi \fi}
-
-\def\doforcedtrackpagestate#1#2%
- {\ifcase\frozenpagestate
- \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
- \realpagestateno\realfolio
- \ifinpagebody
- \ifdoublesided
- \ifodd\realpageno\relax
- \twopassdatafoundtrue \else \twopassdatafoundfalse
- \fi
- \else
- \twopassdatafoundtrue
- \fi
- \else\ifdoublesided
- \findtwopassdata{#1}{\number#2}%
- \iftwopassdatafound
- \realpagestateno\twopassdata\relax
- \ifnum\twopassdata=\realpageno \else
- \pagestatemismatchtrue
- \fi
- \ifodd\twopassdata\relax
- \twopassdatafoundtrue \else \twopassdatafoundfalse
- \fi
- \else
- \ifodd\realpageno\relax
- \twopassdatafoundtrue \else \twopassdatafoundfalse
- \fi
- \fi
- \else
- \twopassdatafoundtrue
- \fi\fi
- \else
- \ifodd\realpagestateno\relax
- \twopassdatafoundtrue \else \twopassdatafoundfalse
- \fi
- \fi
- \iftwopassdatafound
- \@EA\firstoftwoarguments
- \else
- \@EA\secondoftwoarguments
- \fi}
-
-\def\doifforcedrightpagestateelse#1#2%
- {\ifcase\frozenpagestate
- \pagestatemismatchfalse
- \realpagestateno\realfolio
- \findtwopassdata{#1}{\number#2}%
- \iftwopassdatafound
- \realpagestateno\twopassdata\relax
- \ifnum\twopassdata=\realpageno \else
- \pagestatemismatchtrue
- \fi
- \ifodd\twopassdata\relax
- \twopassdatafoundtrue \else \twopassdatafoundfalse
- \fi
- \else
- \ifodd\realpageno\relax
- \twopassdatafoundtrue \else \twopassdatafoundfalse
- \fi
- \fi
- \else
- \ifodd\realpagestateno\relax
- \twopassdatafoundtrue \else \twopassdatafoundfalse
- \fi
- \fi
- \iftwopassdatafound
- \@EA\firstoftwoarguments
- \else
- \@EA\secondoftwoarguments
- \fi}
-
-\def\freezepagestate {\chardef\frozenpagestate\plusone }
-\def\defrostpagestate{\chardef\frozenpagestate\zerocount}
-
-% we can make more of these on top, but how to deal with mixed frozen states
-
-\definetwopasslist\s!paragraph \newcount \nofraggedparagraphs
-
-\def\signalrightpage {\dotrackpagestate \s!paragraph\nofraggedparagraphs}
-\def\doifrightpageelse{\doifrightpagestateelse\s!paragraph\nofraggedparagraphs}
-
-\newcount\pagesignallevel
-
-\def\startsignalrightpage % one may do a \postsignalrightplace
- {\advance\pagesignallevel\plusone
- \presignalrightpage
- \let\signalrightpage\relax
- \let\presignalrightpage\relax
- \let\startsignalrightpage\relax
- \doifrightpageelse\donothing\donothing
- \freezepagestate}
-
-\def\stopsignalrightpage
- {\ifcase\pagesignallevel\or\postsignalrightpage\fi
- \advance\pagesignallevel\minusone}
-
-\def\setraggedparagraphmode
- {\signalrightpage\doifrightpageelse} % move it there
-
-\ifx\swapmargins\undefined \let\swapmargins\undefined \fi % todo
-
-\def\doifswappedrightpageelse#1#2% alleen in box construction !
- {\doifrightpageelse
- {#1}
- {\scratchcounter\realpageno
- \realpageno\realpagestateno\relax
- \swapmargins
- \realpageno\scratchcounter
- #2}}
-
-\newbox\signaledrightpage % this way we can avoid interference, i.e. postpone placement
-
-\def\presignalrightpage {\global\setbox\signaledrightpage\hbox{\signalrightpage}}
-\def\postsignalrightpage{\ifvoid\signaledrightpage\else\box\signaledrightpage\fi}
-
-% The next feature is is used in:
-%
-% \definenumber[test][way=bypage]
-%
-% \def\Test
-% {\incrementnumber[test]\rawnumber[test]/%
-% \incrementnumber[test]\rawnumber[test]/%
-% \incrementnumber[test]\rawnumber[test]\space
-% \checkpagechange{oeps}\changedpage{oeps}\space
-% \ifpagechanged TRUE\else FALSE\fi}
-%
-% \Test\page \Test\par \Test\page \Test\par \Test\page \Test\page
-%
-% (adapted from cont-new.tex:)
-
-\newif\ifpagechanged \let\lastchangedpage\empty
-
-\def\docheckpagestatechange#1#2#3%
- {\pagechangedfalse
- \doforcedtrackpagestate{#2}{#3}%
- \findtwopassdata{#2}{\number#3}%
- \iftwopassdatafound
- \ifnum\twopassdata>0\getvalue{#2:p:#1}\relax
- \pagechangedtrue
- \fi
- \fi
- \ifpagechanged
- \letgvalue{#2:p:#1}\twopassdata
- \globallet\lastchangedpage\twopassdata
- \else
- \globallet\lastchangedpage\realfolio
- \fi}
-
-\def\changedpagestate#1#2%
- {\executeifdefined{#2:p:#1}{0}}
-
-\def\checkpagechange#1{\docheckpagestatechange{#1}\s!paragraph\nofraggedparagraphs}
-\def\changedpage #1{\changedpagestate{#1}\s!paragraph}
-
-% saved struts
-
-\ifx\savedstrutbox\undefined \newbox\savedstrutbox \fi
-
-\def\savestrut {\setbox\savedstrutbox\copy\strutbox}
-\def\savedstrut{\copy \savedstrutbox}
-
-\chardef\bottomraggedness=0 % 0=ragged 1=normal/align 2=baseline
-
-\def\bottomalignlimit{3\lineheight}
-
-\newif\ifn@rmalbottom
-\newif\ifr@ggedbottom
-\newif\ifb@selinebottom
-
-\def\normalbottom
- {% \topskip 10pt
- \r@ggedbottomfalse}
-
-\def\raggedbottom
- {\chardef\bottomraggedness\zerocount
- \n@rmalbottomfalse
- \r@ggedbottomtrue
- \b@selinebottomfalse
- \settopskip}
-
-\def\alignbottom
- {\chardef\bottomraggedness\plusone
- \n@rmalbottomtrue
- \r@ggedbottomfalse
- \b@selinebottomfalse
- \settopskip}
-
-\def\baselinebottom
- {\chardef\bottomraggedness\plustwo
- \n@rmalbottomfalse
- \r@ggedbottomfalse
- \b@selinebottomtrue
- \settopskip}
-
-\let\normalbottom=\alignbottom % downward compatible
-
-% new code, not in use yet
-
-% for future chinese typo-module:
-%
-% % \let\raggedleft\veryraggedleft
-% % \let\raggedleft\veryraggedright
-%
-% \startbuffer
-% 中中中中中中中中中中中中中中中中中中中中中中中中中%
-% 中中中中中中中中中中中中中中中中中中中中中中中中中%
-% 中中中中中中中中中中中中中中中中中中中中中中中中中%
-% 中中中中中中中中中中中中中中中中中中中中中中中中中%
-% \stopbuffer
-%
-% \framedtext
-% [align={broad,flushright},width=90mm]
-% {\getbuffer}
-%
-% \framedtext
-% [align={broad,flushleft},width=90mm]
-% {\getbuffer}
-%
-% \framedtext
-% [align=middle,width=90mm]
-% {\getbuffer}
-%
-% using just flushleft is not okay here due to the fact that
-% leftskip has less stretch than the inter character spacing
-
-\registerctxluafile{core-spa}{1.001}
-
-\definesystemattribute[kern-chars]
-\definesystemattribute[skip-category] \chardef\skipcategoryattribute \dogetattributeid{skip-category}
-\definesystemattribute[skip-penalty] \chardef\skippenaltyattribute \dogetattributeid{skip-penalty}
-\definesystemattribute[skip-order] \chardef\skiporderattribute \dogetattributeid{skip-order}
-\definesystemattribute[snap-category]
-\definesystemattribute[display-math]
-
-% \start \dosetstretch{.25em} \setuptolerance[tolerant,stretch] \input tufte \endgraf \stop
-% \start \dosetstretch{.5em} effe flink doorfietsen \stop
-
-\def\dosetupgridsnapping % calls too often, only needed in gridsnapping
- {\ctxlua{nodes.setsnapvalue(1,\number\openstrutheight,\number\openstrutdepth)}}
-
-\def\doenablegridsnapping
- {\dosetattribute{snap-category}{1}%
- \topskip\strutht
- \offinterlineskip}
-
-\def\dodisablegridsnapping
- {\doresetattribute{snap-category}%
- % reset topskip
- \oninterlineskip}
-
-% 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 back
-%
-% 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
-
-\newtoks\everybeforeblankhandling
-\newtoks\everyafterblankhandling
-
-\appendtoks
- \blankskip\zeropoint
- \attribute\skipcategoryattribute\plusone
- \attribute\skippenaltyattribute \attributeunsetvalue
- \attribute\skiporderattribute \attributeunsetvalue
- \ifblankflexible
- \setfalse\blankisfixed
- \else
- \settrue\blankisfixed
- \fi
-\to \everybeforeblankhandling
-
-\appendtoks
- \ifconditional\blankisfixed
- \blankskip1\blankskip
- \else
- \blankskip1\blankskip\!!plus\skipgluefactor\blankskip\!!minus\skipgluefactor\blankskip
- \fi
-\to \everyafterblankhandling
-
-\def\setblankcategory#1{\attribute\skipcategoryattribute#1\relax}
-\def\setblankorder #1{\attribute\skiporderattribute #1\relax}
-\def\setblankpenalty #1{\attribute\skippenaltyattribute #1\relax}
-\def\addblankskip#1#2#3{\advance\blankskip#1\dimexpr\ifgridsnapping#3\else#2\fi\relax\relax}
-\def\fixedblankskip {\settrue \blankisfixed} % \blankskip1\blankskip}
-\def\flexibleblankskip {\setfalse\blankisfixed} % \blankskip1\blankskip\!!plus\skipgluefactor\blankskip\!!minus\skipgluefactor\blankskip}
-
-\def\startblankhandling
- {\begingroup
- \the\everybeforeblankhandling}
-
-\def\stopblankhandling
- {\the\everyafterblankhandling
- \vskip\blankskip
- \endgroup}
-
-\def\flushblankhandling
- {\the\everyafterblankhandling
- \vskip\blankskip
- \the\everybeforeblankhandling}
-
-% % % %
-
-\def\definevspacingamount
- {\dotripleempty\dodefinevspacingamount}
-
-\def\dodefinevspacingamount[#1][#2][#3]%
- {\ctxlua{vspacing.setskip("#1",\!!bs\detokenize{#2}\!!es,\!!bs\detokenize{#3}\!!es)}}
-
-\def\definevspacing
- {\dodoubleempty\dodefinevspacing}
-
-\def\dodefinevspacing[#1][#2]%
- {\ctxlua{vspacing.setmap("#1","#2")}}
-
-\unexpanded\def\vspacing
- {\dosingleempty\dovspacing}
-
-\def\dovspacing[#1]%
- {\ctxlua{vspacing.analyse("\iffirstargument#1\else default\fi")}}
-
-% category:4 is default
-
-\definevspacingamount[\v!big] [\bigskipamount] [\openlineheight]
-\definevspacingamount[\v!medium] [\medskipamount] [0.50\openlineheight]
-\definevspacingamount[\v!small] [\smallskipamount] [0.25\openlineheight]
-\definevspacingamount[\v!line] [\openlineheight] [\openlineheight]
-\definevspacingamount[\v!halfline][0.50\openlineheight][0.50\openlineheight]
-\definevspacingamount[\v!formula] [\medskipamount] [0.50\openlineheight]
-\definevspacingamount[\v!white] [\parskip] [\openlineheight]
-
-\definevspacing[\s!default] [\v!big]
-\definevspacing[\v!samepage][penalty:10000]
-\definevspacing[\v!max] [category:1]
-\definevspacing[\v!force] [category:2]
-\definevspacing[\v!disable] [category:5]
-\definevspacing[\v!nowhite] [category:6]
-\definevspacing[\v!back] [category:7]
-\definevspacing[\v!always] [category:0]
-\definevspacing[\v!weak] [order:0]
-\definevspacing[\v!strong] [order:100]
-
-\defineblankmethod[\v!samepage]{\writestatus\m!systems{ignoring blank method '\v!samepage'}}
-\defineblankmethod[\v!max] {\writestatus\m!systems{ignoring blank method '\v!max'}}
-\defineblankmethod[\v!weak] {\writestatus\m!systems{ignoring blank method '\v!weak'}}
-\defineblankmethod[\v!strong] {\writestatus\m!systems{ignoring blank method '\v!strong'}}
-
-% \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]
-
-% some temporary hacks
-
-\setfalse\vspacingenabled
-
-% ! ! ! ! ! later, now each newline does a \par and call to the callback
-
-\newtoks\everyenablevspacing
-\newtoks\everydisablevspacing
-
-\def\enablevspacing {\the\everyenablevspacing}
-\def\disablevspacing{\the\everydisablevspacing}
-
-\appendtoks
- \writestatus\m!systems{! ! enabling vspacing ! !}%
- \settrue\vspacingenabled
- \ctxlua{vspacing.enable()}%
-\to \everyenablevspacing
-
-\appendtoks
- \writestatus\m!systems{! ! disabling vspacing ! !}%
- \setfalse\vspacingenabled
- \ctxlua{vspacing.disable()}%
-\to \everydisablevspacing
-
-\let\originalblank \blank % we use \original for non-primitives
-\let\originalvspacing\vspacing
-
-\let\setupvspacing\setupblank % for the moment
-
-% so, the new one will be
-%
-% \chardef\bottomraggedness=0 % 0=ragged 1=normal/align 2=baseline
-%
-% \def\bottomalignlimit{3\lineheight} % will be settable
-%
-% \def\raggedbottom {\chardef\bottomraggedness=0 \settopskip}
-% \def\alignbottom {\chardef\bottomraggedness=1 \settopskip}
-% \def\baselinebottom{\chardef\bottomraggedness=2 \settopskip}
-%
-% \let\normalbottom =\alignbottom
-
-% \hyphenpenalty = ( 2.5 * \hsize ) / \raggedness
-% \tolerance >= 1500 % was 200
-% \raggedness = 2 .. 6\bodyfontsize
-
-\chardef\raggedstatus=0 % normal left center right
-
-\def\leftraggedness {2\bodyfontsize}
-\def\rightraggedness {2\bodyfontsize}
-\def\middleraggedness {6\bodyfontsize}
-
-\def\middleraggedness {.5\hsize} % was: 6\bodyfontsize, fails on: \placefigure{x $x=x$ x}{}
-
-% oeps, hsize can be 0pt in which case we get a strange division
-
-\def\middleraggedness {\ifdim\hsize=\zeropoint6\bodyfontsize\else.5\hsize\fi} % was: 6\bodyfontsize, fails on: \placefigure{x $x=x$ x}{}
-
-%D More hyphenation control, will be combined with align
-%D setup.
-
-\def\nohyphens
- {\ifx\dohyphens\relax
- \edef\dohyphens
- {\hyphenpenalty\the\hyphenpenalty
- \exhyphenpenalty\the\exhyphenpenalty\relax}%
- \fi
- \hyphenpenalty\plustenthousand
- \exhyphenpenalty\plustenthousand}
-
-\let\dohyphens\relax
-
-%D To prevent unwanted side effects, we also have to check
-%D for hyphens here:
-
-\newskip\@@raggedskipa
-\newskip\@@raggedskipb
-
-\def\setraggedness#1%
- {\ifnum\tolerance<1500\relax % small values have
- \tolerance1500\relax % unwanted side effects
- \fi
- \ifx\dohyphens\relax
- % this code will be reconsidered / kind of fuzzy (and old)
- \@@raggedskipa 2.5\hsize
- \@@raggedskipb #1\relax
- \divide\@@raggedskipa \@@raggedskipb
- \hyphenpenalty\@@raggedskipa
- \fi}
-
-\let\updateraggedskips\relax
-
-\def\setraggedskips#1#2#3#4#5#6#7% never change this name
- {\def\updateraggedskips{\dosetraggedskips{#1}{#2}{#3}{#4}{#5}{#6}{#7}}%
- \updateraggedskips}
-
-\def\dosetraggedskips#1#2#3#4#5#6#7%
- {\chardef \raggedstatus#1\relax
- \leftskip 1\leftskip \!!plus#2\relax % zie: Tex By Topic 8.1.3
- \rightskip 1\rightskip\!!plus#3\relax % zie: Tex By Topic 8.1.3
- \spaceskip #4\relax
- \xspaceskip #5\relax
- \parfillskip\zeropoint\!!plus#6\relax
- \parindent #7\relax}
-
-% \def\notragged%
-% {\setraggedskips{0}{0em}{0em}{0em}{0em}{1fil}{\parindent}}
-
-% older (context) names:
-
-\let\spaceamount \interwordspace
-\let\emspaceamount\emwidth
-
-% tracing:
-
-\def\doshowpardata#1%
- {\ifx#1\relax\else
- \hbox{\string#1: \the#1}\endgraf
- \expandafter\doshowpardata
- \fi}
-
-\def\showpardata
- {\edef\thepardata
- {\hbox{font: \fontname\font}\endgraf
- \doshowpardata
- \interwordspace \interwordstretch \interwordshrink \emwidth \exheight \extraspace
- \hsize \vsize
- \leftskip \rightskip
- \spaceskip \xspaceskip
- \parindent \parfillskip
- \hyphenpenalty \exhyphenpenalty
- \displaywidowpenalty \widowpenalty \clubpenalty \brokenpenalty
- \doublehyphendemerits \finalhyphendemerits \adjdemerits
- \relax}%
- \begingroup
- \dontshowcomposition
- \inleftmargin{\vsmash
- {\switchtobodyfont[7pt,tt]%
- \framed[\c!align=\v!right]{\thepardata}}}%
- \endgroup}
-
-\def\startshowpardata
- {\begingroup
- \showcomposition
- \showstruts\tracepositionstrue \tracingparagraphs\maxdimen
- \appendtoksonce\showpardata\let\showpardata\relax\to\everypar}
-
-\def\stopshowpardata
- {\endgraf
- \endgroup}
-
-% \defineXMLenvironment[showpardata] \startshowpardata \stopshowpardata
-% \defineXMLsingular [showpardata] \showpardata
-
-% defaults
-
-\def\raggedfillamount {1fil}
-\def\raggedhalffillamount{.5fil}
-\def\raggedspaceamount {\interwordspace} % {.3333em}
-\def\raggedxspaceamount {.5em}
-
-\def\notragged
- {\chardef\raggedstatus\zerocount
- \leftskip 1\leftskip
- \rightskip 1\rightskip
- \spaceskip \zeropoint
- \xspaceskip \zeropoint
- \parfillskip\zeropoint\!!plus\raggedfillamount\relax
- \let\updateraggedskips\relax} % new
-
-\let\forgetragged\notragged
-
-\def\raggedleft
- {\setraggedness\leftraggedness
- \setraggedskips1\leftraggedness\zeropoint\raggedspaceamount
- \raggedxspaceamount\zeropoint\zeropoint}
-
-\def\raggedcenter
- {\setraggedness\middleraggedness
- \setraggedskips2\middleraggedness\middleraggedness\raggedspaceamount
- \raggedxspaceamount\zeropoint\zeropoint}
-
-%D We used to have:
-%D
-%D \starttyping
-%D \def\raggedright
-%D {\setraggedness\rightraggedness
-%D \setraggedskips{3}{0em}{\rightraggedness}{.3333em}{.5em}{0em}{\parindent}}
-%D \stoptyping
-%D
-%D However, the next alternative, suggested by Taco, is better.
-
-\def\raggedright
- {\setraggedness\rightraggedness
- \setraggedskips3\zeropoint\rightraggedness\raggedspaceamount
- \raggedxspaceamount\raggedfillamount\parindent}
-
-\def\veryraggedleft
- {\setraggedskips1\raggedfillamount\zeropoint\raggedspaceamount
- \raggedxspaceamount\zeropoint\zeropoint}
-
-%D When we want the last line to have a natural width:
-%D
-%D \starttyping
-%D \def\veryraggedleft%
-%D {\setraggedskips{1}{1fil}{0em}{.3333em}{.5em}{0em}{-1fil}}
-%D \stoptyping
-%D
-%D but this one is not accepted by the macros.
-
-\def\veryraggedcenter
- {\setraggedskips2\raggedfillamount\raggedfillamount\raggedspaceamount
- \raggedxspaceamount\zeropoint\zeropoint}
-
-\def\veryraggedright
- {\setraggedskips3\zeropoint\raggedfillamount\raggedspaceamount
- \raggedxspaceamount\zeropoint\parindent}
-
-\def\ttraggedright
- {\tttf
- \setraggedskips3\zeropoint\rightraggedness
- \zeropoint\zeropoint\zeropoint\parindent} % \ctxparindent
-
-%D A bonus one:
-
-\def\raggedwidecenter
- {\setraggedness\middleraggedness
- \setraggedskips2\raggedhalffillamount\raggedhalffillamount
- \raggedspaceamount\raggedxspaceamount\zeropoint\zeropoint}
-
-\newif\if@@asragged \@@asraggedtrue % old method
-
-% todo
-%
-% \setuplayout[grid=yes,lines=44] \showgrid
-% \starttext
-% test \vfill test \endgraf \strut \endgraf \vskip-\lineheight \removedepth \pagina test
-% \stoptext
-
-% \setupalign[reset,new,right,old]
-
-\def\@@align@@rl{\if!!donea\veryraggedleft \else\raggedleft \fi}
-\def\@@align@@rr{\if!!donea\veryraggedright \else\raggedright \fi}
-\def\@@align@@rc{\if!!donea\veryraggedcenter\else\raggedcenter\fi}
-
-\setvalue{@@ngila@@\v!broad }{\!!doneatrue}
-\setvalue{@@ngila@@\v!wide }{\!!donebtrue}
-
-\def\installalign#1#2{\setvalue{@@align@@#1}{#2}} % can be used for overloads
-
-\installalign \v!new {\@@asraggedfalse}
-\installalign \v!old {\@@asraggedtrue}
-\installalign \empty {}
-
-\installalign \v!line {\baselinebottom}
-\installalign \v!bottom {\raggedbottom}
-\installalign \v!height {\normalbottom}
-\installalign \v!width {\notragged}
-\installalign \v!normal {\notragged}
-\installalign \v!yes {\notragged}
-\installalign \v!no {\raggedright}
-\installalign \v!inner {\if@@asragged \setraggedparagraphmode\@@align@@rl\@@align@@rr \else
- \setraggedparagraphmode\@@align@@rr\@@align@@rl \fi}
-\installalign \v!outer {\if@@asragged \setraggedparagraphmode\@@align@@rr\@@align@@rl \else
- \setraggedparagraphmode\@@align@@rl\@@align@@rr \fi}
-\installalign \v!left {\if@@asragged\@@align@@rl\else\@@align@@rr\fi}
-\installalign \v!right {\if@@asragged\@@align@@rr\else\@@align@@rl\fi}
-\installalign \v!middle {\if!!doneb\raggedwidecenter\else\@@align@@rc\fi}
-\installalign \v!flushleft {\if!!donea\veryraggedright \else\raggedright\fi}
-\installalign \v!flushright {\if!!donea\veryraggedleft \else\raggedleft \fi}
-\installalign \v!flushouter {\setraggedparagraphmode\raggedleft\raggedright}
-\installalign \v!flushinner {\setraggedparagraphmode\raggedright\raggedleft}
-\installalign \v!center {\if!!doneb\raggedwidecenter\else\@@align@@rc\fi}
-\installalign \v!hanging {\enableprotruding}
-\installalign \v!nothanging {\disableprotruding}
-\installalign \v!hz {\enableadjusting}
-\installalign \v!nohz {\disableadjusting}
-\installalign \v!spacing {\enablespacehandling \enablekernhandling}
-\installalign \v!nospacing {\disablespacehandling\disablekernhandling}
-\installalign \v!hyphenated {\dohyphens}
-\installalign \v!nothyphenated {\nohyphens}
-\installalign \v!new {\@@asraggedfalse} % so new will give you consistency
-\installalign \v!reset {\notragged\normalbottom}
-
-\installalign \v!tolerant {\tolerance3000 \relax}
-\installalign \v!verytolerant {\tolerance4500 \relax}
-\installalign \v!stretch {\emergencystretch\bodyfontsize}
-
-\installalign \v!grid {\doenablegridsnapping } % only mkiv
-\installalign \v!nogrid {\dodisablegridsnapping} % only mkiv
-
-\installalign \v!righttoleft {\lefttoright}
-\installalign \v!lefttoright {\righttoleft}
-\installalign {l2r} {\lefttoright}
-\installalign {r2l} {\righttoleft}
-
-\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}
-
-\def\setupalign
- {\dosingleargument\dosetupalign}
-
-\def\dosetupalign[#1]% can be made faster by checking for defined #1
- {\!!doneafalse
- \!!donebfalse
- \processcommacommand[#1]\dodosetupngila
- \processcommacommand[#1]\dodosetupalign}
-
-% \setupalign[flushleft] \input ward \par % lijnlinks
-% \setupalign[right] \input ward \par
-
-% \setupalign[flushright] \input ward \par % lijnrechts
-% \setupalign[left] \input ward \par
-
-% \setupalign[middle] \input ward \par % centreer
-% \setupalign[center] \input ward \par
-
-\def\startalignment
- {\bgroup
- \setupalign}
-
-\def\stopalignment
- {\par
- \egroup}
-
-\chardef\alignstrutmode=1
-
-% see later for the real definition, which in the simple case is:
-
-\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
- {\noindentation % was \noindent
- \dontleavehmode % added in marrakesch at TUG 2006\begingroup
- \begingroup
- \setlocalhsize % new
- \def\\{\egroup\par\doalignline{#1}{#2}\bgroup}%
- \dowithnextbox
- {\hbox to \localhsize
- {\ifcase\alignstrutmode\or\strut\fi
- \the\everyleftofalignedline
- #1\unhbox\nextbox#2\relax
- \the\everyrightofalignedline}%
- \endgroup}
- \hbox}
-
-% plain commands
-
-\ifx\undefined\line \def\line {\hbox to\hsize} \fi
-\ifx\undefined\leftline \def\leftline #1{\line{#1\hss}} \fi
-\ifx\undefined\rightline \def\rightline #1{\line{\hss#1}} \fi
-\ifx\undefined\centerline \def\centerline#1{\line{\hss#1\hss}} \fi
-
-% directe commando's
-
-\def\leftaligned {\doalignline \relax \hss }
-\def\midaligned {\doalignline \hss \hss }
-\def\rightaligned{\doalignline \hss \relax}
-
-\let\centeraligned\midaligned
-
-\def\regelbegrensd#1{\limitatetext{#1}{\hsize}{\unknown}} % to be translated
-
-% indirecte commando's
-
-\letvalue{\s!do\v!line\v!left }\leftaligned
-\letvalue{\s!do\v!line\v!right }\rightaligned
-\letvalue{\s!do\v!line\v!middle }\midaligned
-\letvalue{\s!do\v!line\v!flushleft }\rightaligned
-\letvalue{\s!do\v!line\v!flushright}\leftaligned
-\letvalue{\s!do\v!line\v!center }\midaligned
-
-\def\doalignedline#1{\csname\s!do\v!line#1\endcsname}
-
-%D Experimental:
-
-\def\doxalignline#1#2#3#4#5#6%
- {\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 moved up
- \hbox to \localhsize
- {#1\hskip\ifdone#2\else#3\fi#4%
- \hbox to \localhsize
- {\the\everyleftofalignedline
- \ifcase\alignstrutmode\or\strut\fi
- \ifdone#5\unhbox\nextbox#6\else#6\unhbox\nextbox#5\fi
- \the\everyrightofalignedline}%
- \hss}%
- \endgroup}
- \hbox}
-
-\def\doxcheckline
- {\signalrightpage\doifrightpageelse\donetrue\donefalse}
-
-\setvalue{\s!do\v!line\v!inner }{\doxalignline\doxcheckline++\zeropoint \relax\hss }
-\setvalue{\s!do\v!line\v!outer }{\doxalignline\doxcheckline++\zeropoint \hss \relax}
-\setvalue{\s!do\v!line\v!innermargin}{\doxalignline\doxcheckline-+\innermargintotal\relax\hss }
-\setvalue{\s!do\v!line\v!outermargin}{\doxalignline\doxcheckline+-\outermargintotal\hss \relax}
-\setvalue{\s!do\v!line\v!inneredge }{\doxalignline\doxcheckline-+\inneredgetotal \relax\hss }
-\setvalue{\s!do\v!line\v!outeredge }{\doxalignline\doxcheckline+-\outeredgetotal \hss \relax}
-\setvalue{\s!do\v!line\v!backspace }{\doxalignline\doxcheckline-+\backspace \relax\hss }
-\setvalue{\s!do\v!line\v!cutspace }{\doxalignline\doxcheckline+-\cutspace \hss \relax}
-
-\setvalue{\s!do\v!line\v!leftmargin }{\doxalignline\donefalse --\leftmargintotal \hss \relax}
-\setvalue{\s!do\v!line\v!rightmargin}{\doxalignline\donefalse ++\rightmargintotal\relax\hss }
-\setvalue{\s!do\v!line\v!leftedge }{\doxalignline\donefalse --\leftedgetotal \hss \relax}
-\setvalue{\s!do\v!line\v!rightedge }{\doxalignline\donefalse ++\rightedgetotal \relax\hss }
-
-% ! ! ! beware, redefining \doalignline gives the wrong results ! ! !
-%
-% \def\doalignline{\doxalignline\donefalse++\zeropoint}
-
-%D Better:
-
-\def\doalignedline#1{\csname\s!do\v!line#1\endcsname}
-
-\def\alignedline#1#2% setting default
- {\csname\s!do\v!line\ifcsname\s!do\v!line#1\endcsname#1\else#2\fi\endcsname}
-
-%D ...
-
-\def\dosetuptolerance[#1]%
- {\doifinsetelse\v!vertical{#1}%
- {\normalexpanded{\noexpand\processallactionsinset[#1]}
- [ \v!verystrict=>\def\bottomtolerance{},
- \v!strict=>\def\bottomtolerance{.050},
- \v!tolerant=>\def\bottomtolerance{.075},
- \v!verytolerant=>\def\bottomtolerance{.100}]}%
- {\normalexpanded{\noexpand\processallactionsinset[#1]}
- [ \v!stretch=>\emergencystretch\bodyfontsize,
- \v!space=>\spaceskip.5em\!!plus.25em\!!minus.25em\relax,
- \v!verystrict=>\tolerance 200,
- \v!strict=>\tolerance1500,
- \v!tolerant=>\tolerance3000,
- \v!verytolerant=>\tolerance4500]}}
-
-\def\setuptolerance
- {\dosingleargument\dosetuptolerance}
-
-% \def\woordrechts
-% {\groupedcommand{\hfill\hbox}{\parfillskip\zeropoint}}
-
-% beware: \wordright{whatever\kern-\rightskip} should work!
-% so, no funny boxing here
-
-\def\dowordright[#1]%
- {% don't change
- \groupedcommand
- {\removeunwantedspaces
- \hfill
- \allowbreak % changed back from \hskip\zeropoint
- \strut
- \hfill
- \quad % decent spacing
- \hbox}
- {\doifelse{#1}\v!right{\kern-\rightskip}{\doifsomething{#1}{\kern-#1}}%
- \parfillskip\zeropoint
- %\finalhyphendemerits\zerocount % yes or no
- \par}}
-
-\def\wordright
- {\dosingleempty\dowordright}
-
-% \dorecurse{5}{something } \wordright{--someone} \endgraf
-% \dorecurse{6}{something } \wordright{--someone} \endgraf
-% \dorecurse{7}{something } \wordright{--someone} \endgraf
-%
-% \dorecurse{5}{something } \wordright{--someone else entirely} \endgraf
-% \dorecurse{6}{something } \wordright{--someone else entirely} \endgraf
-% \dorecurse{7}{something } \wordright{--someone else entirely} \endgraf
-%
-% \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
-%D The pushing and popping is done by:
-
-\newbox\indentationboxA
-\newbox\indentationboxB
-
-\def\pushindentation
- {\bgroup
- \ifhmode
- \unskip
- \setbox\indentationboxA\lastbox % get \strut if present
- \unskip
- \setbox\indentationboxB\lastbox % get \indent generated box
- \unskip
- \else
- \hskip\zeropoint % switch to horizontal mode
- \unskip
- \setbox\indentationboxA\lastbox % get \indent generated box
- \setbox\indentationboxB\emptybox
- \fi}
-
-\def\popindentation
- {\box\indentationboxB\box\indentationboxA % put back the boxes
- \egroup}
-
-%D The only complication lays in \type{\strut}. In \PLAIN\
-%D \TEX\ a \type{\strut} is defined as:
-%D
-%D \starttyping
-%D \def\strut%
-%D {\relax\ifmmode\copy\strutbox\else\unhcopy\strutbox\fi}
-%D \stoptyping
-%D
-%D But what is a \type{\strut}? Normally it's a rule of width
-%D zero, but when made visual, it's a rule and a negative skip.
-%D The mechanism for putting things in the margins described
-%D here cannot handle this situation very well. One
-%D characteristic of \type{\strut} is that the \type{\unhcopy}
-%D results in entering horizontal mode, which in return leads
-%D to some indentation.
-%D
-%D To serve our purpose a bit better, the macro \type{\strut}
-%D can be redefined as:
-%D
-%D \starttyping
-%D \def\strut
-%D {\relax\ifmmode\else\hskip0pt\fi\copy\strutbox}
-%D \stoptyping
-%D
-%D Or more compatible:
-%D
-%D \starttyping
-%D \def\strut
-%D {\relax\ifmmode
-%D \copy\strutbox
-%D \else
-%D \bgroup\setbox\strutbox=\normalhbox{\box\strutbox}\unhcopy\strutbox\egroup
-%D \fi}
-%D \stoptyping
-%D
-%D In \CONTEXT\ however we save some processing time by putting
-%D an extra \type{\hbox} around the \type{\strutbox}.
-
-% moved from page-lin.tex to here (due to visualization added
-% in august 2003)
-%
-% \unexpanded \def\crlf
-% {\ifhmode\unskip\else\strut\fi\ifcase\raggedstatus\hfil\fi\break}
-
-\unexpanded \def\crlf
- {\ifhmode
- \unskip
- \prewordbreak\crlfplaceholder
- \ifcase\raggedstatus\hfil\or\or\or\hfil\fi
- \break
- \else
- \crlfplaceholder
- \endgraf
- \fi}
-
-\def\crlfplaceholder
- {\strut}
-
-\def\settestcrlf
- {\def\crlfplaceholder
- {\hbox to \zeropoint
- {\strut{\infofont\kern.25em}\lohi{\infofont CR}{\infofont LF}\hss}}}
-
-%D \starttyping
-%D % \setuplayout[gridgrid=yes] \showgrid
-%D
-%D \startbuffer
-%D test 1\crlf
-%D test 2\crlf
-%D
-%D \crlf test 3
-%D
-%D test 4\crlf
-%D test 5
-%D
-%D \crlf
-%D \crlf
-%D \crlf
-%D test 6
-%D \stopbuffer
-%D
-%D \hbox
-%D {\hsize5em
-%D \ruledvtop{\getbuffer}\enspace
-%D \ruledvtop{\showstruts\getbuffer}\enspace
-%D \hsize15em \setuptyping[before=,after=]%
-%D \ruledvtop{\typebuffer}}
-%D \stoptyping
-
-\def\justonespace
- {\removelastspace\space} % \removeunwantedspaces\space
-
-\def\ignorecrlf
- {\let\crlf\justonespace\let\\\crlf}
-
-\def\showstruts
- {\setteststrut
- \settestcrlf}
-
-\def\definehspace
- {\dotripleempty\dodefinehspace}
-
-\def\dodefinehspace[#1][#2][#3]% #1 = optional namespace
- {\ifthirdargument
- \setvalue{\??hs#1:#2}{#3}%
- \else
- \setvalue{\??hs:#1}{#2}%
- \fi}
-
-\unexpanded\def\hspace
- {\dodoubleempty\dohspace}
-
-\def\dohspace[#1][#2]%
- {\ifsecondargument
- \dodohspace[#1][#2]%
- \else\iffirstargument
- \hspace[][#1]%
- \else
- \hspace[][\s!default]%
- \fi\fi}
-
-\def\dodohspace[#1][#2]%
- {\ifhmode
- \removeunwantedspaces
- \hskip\hspaceamount{#1}{#2}%
- \expandafter\ignorespaces
- \fi}
-
-\def\hspaceamount#1#2%
- {\executeifdefined{\??hs#1:#2}{\executeifdefined{\??hs:#2}\zeropoint}}
-
-\definehspace [\v!small] [.25\emspaceamount]
-\definehspace [\v!medium] [.5\emspaceamount]
-\definehspace [\v!big] [1\emspaceamount]
-\definehspace [\v!normal] [1\spaceamount]
-\definehspace [\v!default] [\spaceamount]
-
-%D Taken from Taco's math module (cq. \AMS\ macros), but
-%D adapted to \type {\hspace}:
-
-\unexpanded\def\textormathspace #1#2#3{\ifmmode\mskip#1#2\else\kern #1\hspaceamount\empty{#3}\fi\relax}
-\unexpanded\def\breakabletextormathspace#1#2#3{\ifmmode\mskip#1#2\else\hskip#1\hspaceamount\empty{#3}\fi\relax}
-
-\newmuskip\hairmuskip \hairmuskip=.15mu
-
-\unexpanded\def\hairspace {\textormathspace+\hairmuskip{.5}}
-\unexpanded\def\thinspace {\textormathspace+\thinmuskip 1}
-\unexpanded\def\medspace {\textormathspace+\medmuskip 2}
-\unexpanded\def\thickspace {\textormathspace+\thickmuskip3}
-\unexpanded\def\neghairspace {\textormathspace-\thinmuskip{.5}}
-\unexpanded\def\negthinspace {\textormathspace-\thinmuskip 1}
-\unexpanded\def\negmedspace {\textormathspace-\medmuskip 2}
-\unexpanded\def\negthickspace{\textormathspace-\thickmuskip3}
-
-% needed for unicode:
-
-\unexpanded\def\breakablethinspace {\breakabletextormathspace+\thinmuskip 1}
-
-\unexpanded\def\twoperemspace {\hskip\dimexpr\emwidth/2\relax} % == \enspace
-\unexpanded\def\threeperemspace {\hskip\dimexpr\emwidth/3\relax}
-\unexpanded\def\fourperemspace {\hskip\dimexpr\emwidth/4\relax}
-\unexpanded\def\fiveperemspace {\hskip\dimexpr\emwidth/5\relax} % goodie
-\unexpanded\def\sixperemspace {\hskip\dimexpr\emwidth/6\relax}
-\unexpanded\def\figurespace {\begingroup\setbox\scratchbox\hbox{0}\hskip\wd\scratchbox\endgroup} % there is a command for this
-\unexpanded\def\punctuationspace {\begingroup\setbox\scratchbox\hbox{.}\hskip\wd\scratchbox\endgroup}
-\unexpanded\def\ideographicspace {\hskip\dimexpr\emwidth/1\relax}
-\unexpanded\def\ideographichalffillspace{\hskip\dimexpr\emwidth/2\relax}
-%unexpanded\def\nobreakspace {\penalty\plustenthousand\space}
-\unexpanded\def\nobreakspace {\penalty\plustenthousand\kern\interwordspace}
-\unexpanded\def\narrownobreakspace {\penalty\plustenthousand\thinspace}
-%unexpanded\def\zerowidthnobreakspace {\penalty\plustenthousand\hskip\zeropoint}
-\unexpanded\def\zerowidthnobreakspace {\penalty\plustenthousand\kern\zeropoint}
-\unexpanded\def\zerowidthspace {\hskip\zeropoint}
-
-\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
-
-% this will become an alternative bunch of \blank settings
-%
-% \startlines
-% \scratchskip=.23pt plus 10pt minus 4pt \relax \number\scratchskip \space \the\scratchskip
-% \setsimplifiedskip\scratchskip1 \number\scratchskip \space \the\scratchskip
-% \setsimplifiedskip\scratchskip2 \number\scratchskip \space \the\scratchskip
-% \getsimplifiedskip\scratchskip\scratchcounter \number\scratchcounter
-% \stoplines
-%
-% \hrule width10cm \endgraf
-% \discardedskip{10pt}
-% \retainedskip {4pt}
-% \discardedskip {5pt}
-% \hrule width10cm \endgraf
-% \blockedskip{0pt}
-% \discardedskip{10pt}
-% \retainedskip {4pt}
-% \discardedskip {5pt}
-% \hrule width10cm \endgraf
-% \frozenskip {4cm}
-% \hrule width10cm \endgraf
-% \vskip10pt
-% \hrule width10cm \endgraf
-
-\newskip\simplifiedskip
-\newskip\simplifiedcounter
-
-\chardef\@@discardedskip1
-\chardef\@@retainedskip 2
-\chardef\@@forcedskip 3
-\chardef\@@blockedskip 4
-\chardef\@@frozenskip 5 % after heads, no break
-
-\def\setsimplifiedskip#1#2%
- {#1\dimexpr(10\dimexpr(#1/10)) plus \gluestretch#1 minus \glueshrink#1\relax
- \advance#1\numexpr(#2)sp\relax}
-
-\def\getsimplifiedskip#1#2%
- {\simplifiedskip#1\relax
- \ifzeropt\simplifiedskip % \ifdim\simplifiedskip=\zeropoint
- #2\zerocount
- \else
- \simplifiedcounter\dimexpr10\dimexpr#1/10\relax\relax
- \advance\simplifiedskip-\simplifiedcounter
- #2\number\simplifiedskip\relax
- \fi}
-
-\def\conditionalskip#1#2%
- {\scratchskip#1\relax
- \setsimplifiedskip\scratchskip#2\relax
- \vskip\scratchskip\relax}
-
-\def\defrostskip
- {\scratchskip\lastskip\penalty50000\normalvskip-\scratchskip\penalty50000\relax}
-
-\def\frozenskip#1%
- {\endgraf
- \ifvmode
- \getsimplifiedskip\lastskip\scratchcounter
- \ifdim\lastskip>#1\else
- \defrostskip
- \conditionalskip{#1}\@@frozenskip
- \fi
- \fi}
-
-\def\discardedskip#1%
- {\endgraf
- \ifvmode
- \getsimplifiedskip\lastskip\scratchcounter
- \ifcase\scratchcounter
- \conditionalskip{#1}\@@discardedskip
- \or % discard
- \ifdim\lastskip>#1\else
- \normalvskip-\lastskip
- \conditionalskip{#1}\@@discardedskip
- \fi
- \or % retain
- \ifdim\lastskip>#1\else
- \normalvskip-\lastskip
- \conditionalskip{#1}\@@discardedskip
- \fi
- \or % forced
- \conditionalskip{#1}\@@discardedskip
- \or % ignored
- \or % frozen
- \ifdim\lastskip>#1\else
- \defrostskip
- \conditionalskip{#1}\@@frozenskip
- \fi
- \else\ifdim#1=\zeropoint\else
- \vskip#1\relax
- \fi\fi
- \fi}
-
-\def\retainedskip#1%
- {\endgraf
- \ifvmode
- \getsimplifiedskip\lastskip\scratchcounter
- \ifcase\scratchcounter
- \conditionalskip{#1}\@@retainedskip
- \or % discard
- \normalvskip-\lastskip
- \conditionalskip{#1}\@@retainedskip
- \or % retain
- \ifdim\lastskip>#1\else
- \normalvskip-\lastskip
- \conditionalskip{#1}\@@retainedskip
- \fi
- \or % forced
- \conditionalskip{#1}\@@retainedskip
- \or % ignored
- \or % frozen
- \ifdim\lastskip>#1\else
- \defrostskip
- \conditionalskip{#1}\@@frozenskip
- \fi
- \else\ifdim#1=\zeropoint\else
- \vskip#1\relax
- \fi\fi
- \fi}
-
-\def\forcedskip#1%
- {\endgraf
- \ifvmode
- \conditionalskip{#1}\@@forcedskip
- \fi}
-
-\def\blockedskip#1%
- {\endgraf
- \ifvmode
- \getsimplifiedskip\lastskip\scratchcounter
- \ifcase\scratchcounter
- \conditionalskip{#1}\@@blockedskip
- \or % discard
- \conditionalskip{#1}\@@blockedskip
- \or % retain
- \conditionalskip{#1}\@@blockedskip
- \or % forced
- \conditionalskip{#1}\@@blockedskip
- \or % ignored
- \or % frozen
- \ifdim\lastskip>#1\else
- \defrostskip
- \conditionalskip{#1}\@@frozenskip
- \fi
- \else\ifdim#1=\zeropoint\else
- \vskip#1\relax
- \fi\fi
- \fi}
-
-% beware, changing this will break some code (like pos/backgrounds)
-
-\newtoks\everyfirstparagraphintro
-\newtoks\everynextparagraphintro
-\newtoks\@@everyparagraphtoks
-
-\chardef\everyparagraphintro\zerocount
-
-\def\setupparagraphintro
- {\dodoubleempty\dosetupparagraphintro}
-
-\def\dosetupparagraphintro[#1][#2]%
- {\processallactionsinset
- [#1]
- [ \v!reset=>\global\chardef\everyparagraphintro\zerocount
- \global\everyfirstparagraphintro\emptytoks
- \global\everynextparagraphintro \emptytoks,
- \v!first=>\global\chardef\everyparagraphintro\plusone
- \doglobal\appendtoks#2\to\everyfirstparagraphintro,
- \v!next=>\ifcase\everyparagraphintro\global\chardef\everyparagraphintro\plusone\fi
- \doglobal\appendtoks#2\to\everynextparagraphintro,
- \v!each=>\ifcase\everyparagraphintro\global\chardef\everyparagraphintro\plustwo\fi
- \doglobal\appendtoks#2\to\everyfirstparagraphintro
- \doglobal\appendtoks#2\to\everynextparagraphintro]}
-
-%D We can say:
-%D
-%D \starttyping
-%D \setupparagraphintro[first][\index{Knuth}]
-%D \stoptyping
-%D
-%D Maybe more convenient is:
-%D
-%D \starttyping
-%D \flushatparagraph{\index{Zapf}}
-%D \stoptyping
-
-\def\flushatparagraph#1%
- {\global\chardef\everyparagraphintro\plusone
- \global\appendtoks{#1}\to\everyfirstparagraphintro
- \global\let\insertparagraphintro\doinsertparagraphintro}
-
-\def\doinsertparagraphintro % can be merged with the next
- {\ifcase\everyparagraphintro\else\@EA\dodoinsertparagraphintro\fi}
-
-\def\dodoinsertparagraphintro
- {\begingroup
- \everypar\emptytoks
- \ifcase\everyparagraphintro\relax
- % no data
- \@@everyparagraphtoks\emptytoks
- \or
- % first data
- \global\chardef\everyparagraphintro\plustwo
- \@@everyparagraphtoks\everyfirstparagraphintro
- \global\everyfirstparagraphintro\emptytoks
- \or
- % next data
- \@@everyparagraphtoks\everynextparagraphintro
- \fi
- \the\@@everyparagraphtoks
- \global\let\insertparagraphintro\relax
- \endgroup}
-
-\let\insertparagraphintro\relax
-
-%D \starttyping
-%D \setupparagraphintro[first][\hbox to 3.5em{\tt FIRST \hss}]
-%D \setupparagraphintro[first][\hbox to 3.5em{\tt TSRIF \hss}]
-%D \setupparagraphintro[next] [\hbox to 3.5em{\tt NEXT \hss}]
-%D \setupparagraphintro[next] [\hbox to 3.5em{\tt TXEN \hss}]
-%D \setupparagraphintro[each] [\hbox to 3.0em{\tt EACH \hss}]
-%D \setupparagraphintro[each] [\hbox to 3.0em{\tt HCEA \hss}]
-%D
-%D some paragraph \par
-%D some paragraph \par
-%D some paragraph \par
-%D
-%D \definelabel[parnumber]
-%D
-%D \setupparagraphintro[reset,each][\inleft{\slxx\parnumber}]
-%D
-%D some paragraph \par
-%D some paragraph \par
-%D some paragraph \par
-%D \stoptyping
-
-%D \macros
-%D {flushatnextpar}
-%D
-%D This macro collects data that will be flushed at the next paragraph.
-%D By using this macro you can avoid interfering nodes (writes, etc).
-
-\newbox\postponednodedata
-\let\flushpostponednodedata\relax
-
-\def\flushatnextpar
- {\bgroup
- \global\let\flushpostponednodedata\doflushpostponednodedata
- \dowithnextbox{\global\setbox\postponednodedata\hbox{\box\postponednodedata\box\nextbox}\egroup}\hbox}
-
-\def\doflushpostponednodedata
- {\ifvoid\postponednodedata\else
- \hbox{\smashedbox\postponednodedata}%
- \fi
- \global\let\flushpostponednodedata\relax}
-
-% Very nasty but needed for margin stuff inside colored
-% paragraphs.
-
-\let\normalvadjust\vadjust
-
-% \def\graphicvadjust % bad, those low level color calls here
-% {\dowithnextboxcontent
-% {\forgetall}
-% {\normalvadjust
-% {\unvbox\nextbox
-% % corrects for one line paragraphs
-% \nointerlineskip
-% \kern-\struttotal
-% \nointerlineskip
-% \verticalstrut}}%
-% \vbox}
-
-\def\graphicvadjust % nasty bidi handling
- {\dowithnextboxcontent
- {\forgetall}
- {\vadjust{\vbox attr \graphicvadjustattribute \plusone
- {\unvbox\nextbox
- % corrects for one line paragraphs
- \nointerlineskip
- \kern-\struttotal
- \nointerlineskip
- \verticalstrut}}}%
- \vbox}
-
-%D This works only in a properly strutted line, and is meant
-%D for deeply burried operations, like in heads.
-
-\def\fakedvadjust
- {\dowithnextbox
- {\setbox\nextbox\hbox{\llap{\lower\strutdepth\box\nextbox}}%
- \smashedbox\nextbox}%
- \vtop}
-
-\def\flexiblespaceamount#1#2#3%
- {#1\interwordspace
- \!!plus#2\interwordstretch
- \!!minus#3\interwordshrink}
-
-\def\fixedspaceamount#1%
- {#1\interwordspace}
-
-%D This is a dangerous feature because it makes the \TEX\ source
-%D less portable, i.e. any parser now needs to apply exactly the
-%D same algorithm when it wants to interpret the source. We
-%D strongly recommend not to mention this feature in manuals! It's
-%D provided for users who are hooked to such a mechanism.
-%D
-%D \starttyping
-%D \setupsorting[logo][next=\autoinsertnextspace] \logo[TEX]{\TeX}
-%D
-%D bla bla \TEX bla bla \TEX (bla) bla (\TEX)
-%D \stoptyping
-
-\def\autoinsertnextspace{\futurelet\nexttoken\doautoinsertnextspace}
-
-\def\doautoinsertnextspace % slightly extended version of a user supplied macro
- {\ifx\nexttoken \bgroup\else \ifx\nexttoken\begingroup\else
- \ifx\nexttoken \egroup\else \ifx\nexttoken \endgroup\else
- \ifx\nexttoken \/\else \ifx\nexttoken /\else \ifx\nexttoken ~\else
- \ifx\nexttoken \ \else \ifx\nexttoken \blankspace\else \ifx\nexttoken \space\else
- \ifx\nexttoken .\else \ifx\nexttoken ,\else
- \ifx\nexttoken !\else \ifx\nexttoken ?\else
- \ifx\nexttoken :\else \ifx\nexttoken ;\else
- \ifx\nexttoken '\else \ifx\nexttoken "\else
- \ifx\nexttoken )\else \ifx\nexttoken -\else \ifx\nexttoken |\else
- \ifx\nexttoken \%\else \ifx\nexttoken \&\else
- \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
- \doifnot\@@rgoption\v!packed{\global\let\afterfirstobeyedline\relax}}}%
- \def\obeyedline
- {\par
- \futurelet\next\dobetweenthelines}%
- \activatespacehandler\@@rgspace
- \GotoPar}
-
-\def\stoplines
- {\endgroup
- \popmacro\checkindentation
- \@@rgafter}
-
-\def\dobetweenthelines
- {\doifmeaningelse\next\obeyedline
- {\@@rginbetween}
- {\afterfirstobeyedline}}
-
-\setuplines
- [\c!option=,
- \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}
-
-\setupwhitespace
- [\v!none]
-
-% still old-fashioned
-
-\indenting
- [\v!never]
-
-\setupindenting
- [\v!none]
-
-\setupblank
- [\v!standard,
- \v!big]
-
-\defineblank[\v!default] [\currentblank]
-\defineblank[\v!before] [\v!default]
-\defineblank[\v!inbetween][\v!default]
-\defineblank[\v!after] [\v!before]
-
-\setupinterlinespace
- [\c!minheight=0pt, % only special purpose
- \c!mindepth=0pt, % only special purpose
- \c!height=.72,
- \c!depth=.28,
- \c!top=1.0,
- \c!bottom=0.4,
- \c!distance=1pt,
- \c!line=2.8ex,
- \c!stretch=0]
-
-\setupnarrower
- [\c!before=\endgraf,
- \c!after=\endgraf,
- \c!left=1.5em,
- \c!right=1.5em,
- \c!middle=1.5em]
-
-\setuptolerance
- [\v!horizontal,\v!verystrict]
-
-\setuptolerance
- [\v!vertical,\v!strict]
-
-\setupalign
- [\v!bottom,
- \v!width]
-
-\setupspacing
- [\v!packed]
-
-\protect \endinput
-
-\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
-}
diff --git a/Master/texmf-dist/tex/context/base/core-sys.lua b/Master/texmf-dist/tex/context/base/core-sys.lua
new file mode 100644
index 00000000000..c5aa89d98e5
--- /dev/null
+++ b/Master/texmf-dist/tex/context/base/core-sys.lua
@@ -0,0 +1,22 @@
+if not modules then modules = { } end modules ['core-sys'] = {
+ version = 1.001,
+ comment = "companion to core-sys.mkiv",
+ author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
+ copyright = "PRAGMA ADE / ConTeXt Development Team",
+ license = "see context related readme files"
+}
+
+local lower, extname, basename, removesuffix = string.lower, file.extname, file.basename, file.removesuffix
+
+function commands.updatefilenames(inputfilename,outputfilename)
+ environment.inputfilename = inputfilename or ""
+ environment.outputfilename = outputfilename or ""
+ environment.jobfilename = inputfilename or tex.jobname or ""
+ environment.jobfilesuffix = lower(extname(environment.jobfilename))
+ environment.inputfilebarename = removesuffix(basename(inputfilename))
+ environment.inputfilesuffix = lower(extname(inputfilename))
+end
+
+statistics.register("result saved in file", function()
+ return string.format( "%s.%s", environment.outputfilename, (tex.pdfoutput>0 and "pdf") or "dvi")
+end)
diff --git a/Master/texmf-dist/tex/context/base/core-sys.mkiv b/Master/texmf-dist/tex/context/base/core-sys.mkiv
index f30c8a958cb..649e5e65c9b 100644
--- a/Master/texmf-dist/tex/context/base/core-sys.mkiv
+++ b/Master/texmf-dist/tex/context/base/core-sys.mkiv
@@ -15,6 +15,8 @@
\writestatus{loading}{ConTeXt Core Macros / System}
+\registerctxluafile{core-sys}{1.001}
+
\unprotect
%D Version checking:
@@ -36,29 +38,61 @@
%newlinechar=10 \def\outputnewlinechar{\rawcharacter{10}}
\newlinechar=10 \edef\outputnewlinechar{^^J}
-% in case formats are shared:
+\edef\operatingsystem {\ctxlua{tex.write(os.platform)}}
+
+\def\jobfilename {\ctxlua{tex.sprint(tex.texcatcodes,environment.jobfilename or "")}}
+\def\jobfilesuffix {\ctxlua{tex.sprint(tex.texcatcodes,environment.jobfilesuffix or "")}}
+\def\inputfilebarename{\ctxlua{tex.sprint(tex.texcatcodes,environment.inputfilebarename or "")}}
+\def\inputfilesuffix {\ctxlua{tex.sprint(tex.texcatcodes,environment.inputfilesuffix or "")}}
+\def\inputfilename {\ctxlua{tex.sprint(tex.texcatcodes,environment.inputfilename or "")}}
+\def\outputfilename {\ctxlua{tex.sprint(tex.texcatcodes,environment.outputfilename or "")}}
\def\initializenewlinechar
{\bgroup\newlinechar=10\xdef\outputnewlinechar{^^J}\egroup}
-%D Job names.
-
-\def\outputfilename {\@@svfile}
-\def\inputfilename {\@@svinputfile}
-\def\operatingsystem{\@@svtype}
+\newtoks \everysetupsystem
-\let\jobfilename \jobname
-\let\jobfilesuffix\c!tex
+\unexpanded\def\setupsystem
+ {\dosingleargument\dosetupsystem}
-\def\splitjobfilename % todo: mkiv
- {\resetsystemmode{suffix-\jobfilesuffix}%
- \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: \defconvertedcommand\jobfilename\jobfilename
- \doifnothing\jobfilesuffix{\let\jobfilesuffix\c!tex}%
- \setsystemmode{suffix-\jobfilesuffix}}
+\def\dosetupsystem[#1]%
+ {\getparameters[\??sv][#1]%
+ \the\everysetupsystem}
+
+\appendtoks
+ \edef\outputresolution{\@@svresolution}%
+\to \everysetupsystem
+
+\appendtoks
+ \ifcase\@@svn
+ % % 0 : unknown
+ \or
+ \setsystemmode\v!first % 1 : first run
+ \or
+ % % 2 : successive run
+ \or
+ \setsystemmode\v!first % 3 : first and only run
+ \or
+ \setsystemmode\v!last % 4 : (extra) last run
+ \fi
+\to \everysetupsystem
+
+\appendtoks
+ \edef\outputfilename{\@@svfile}%
+ \edef\inputfilename {\@@svinputfile}%
+\to \everysetupsystem
+
+\let\@@jobsuffix\s!unknown
+
+\appendtoks
+ \resetsystemmode{suffix-\@@jobsuffix}%
+ \edef\@@jobsuffix{\jobsuffix}%
+ \setsystemmode{suffix-\@@jobsuffix}%
+\to \everysetupsystem
+
+\appendtoks
+ \ctxlua {commands.updatefilenames("\inputfilename","\outputfilename")}%
+\to \everysetupsystem
% Some mechanisms (see x-res-01) use either \jobfilename or
% \jobfilename.somesuffix, in which case we need to use the
@@ -72,41 +106,23 @@
{\let\jobfullname\empty}
{\doif\jobfilesuffix\c!tex{\edef\jobfullname{\jobfilename.#1}}}}
-% ...
-
-\def\dosetupsystem[#1]%
- {\getparameters[\??sv][#1]%
- \setuprandomize[\@@svrandom]%
- \beforesplitstring\@@svresolution\at dpi\to\@@svresolution
- \let\outputresolution\@@svresolution
- \ifcase\@@svn
- % % 0 : unknown
- \or
- \setsystemmode\v!first % 1 : first run
- \or
- % % 2 : successive run
- \or
- \setsystemmode\v!first % 3 : first and only run
- \or
- \setsystemmode\v!last % 4 : (extra) last run
- \fi
-% \processaction
-% [\@@svtype]
-% %[ mswin=>\edef\@@svline{\rawcharacter{13}\rawcharacter{10}}, % crlf
-% [ mswin=>\edef\@@svline{\rawcharacter{13}}, % cr % crlf
-% darwin=>\edef\@@svline{\rawcharacter{13}}, % cr
-% \s!unknown=>\edef\@@svline{\rawcharacter{10}}]% % lf
- \splitjobfilename}
-
-% \edef\@@svline{\rawcharacter{10}} % unix is the most critical/sensitive system
-
\let\systemendofline\outputnewlinechar % will become obsolete
-\def\setupsystem
- {\dosingleargument\dosetupsystem}
-
\def\systemparameter#1{\executeifdefined{\??sv#1}\empty}
+%D There are a couple of system states avaiable:
+%D
+%D \starttabulate [|T|T|]
+%D \NC \type{\jobname} \NC \jobname \NC \NR
+%D \NC \type{\jobfilename} \NC \jobfilename \NC \NR
+%D \NC \type{\jobfilesuffix} \NC \jobfilesuffix \NC \NR
+%D \NC \type{\inputfilename} \NC \inputfilename \NC \NR
+%D \NC \type{\inputfilebarename} \NC \inputfilebarename \NC \NR
+%D \NC \type{\inputfilesuffix} \NC \inputfilesuffix \NC \NR
+%D \NC \type{\outputfilename} \NC \outputfilename \NC \NR
+%D \NC \type{\operatingsystem} \NC \operatingsystem \NC \NR
+%D \stoptabulate
+
%D The system modes set by the setup command can be used in
%D situations like:
%D
@@ -120,7 +136,7 @@
%D \stoptext
%D \stoptyping
-\def\setuprandomize[#1]%
+\unexpanded\def\setuprandomize[#1]%
{\doifsomething{#1}
{\bgroup
% tex's time is in minutes
@@ -134,14 +150,14 @@
\s!default=>\getnewrandomseed\scratchcounter,
\s!unknown=>\scratchcounter#1]%
\expanded{\setrandomseed{\the\scratchcounter}}%
-% \writestatus\m!systems{randomseed: \the\scratchcounter}%
+ % \writestatus\m!systems{randomseed: \the\scratchcounter}%
\egroup}}
\setupsystem
[\c!directory=,
\c!n=0, % 0:unknown 1: one run 2: first 3: successive 4: final run
- \c!resolution=600dpi,
- \c!random=,
+ \c!resolution=600,% in dpi, no unit in mkiv
+ %c!random=, % obsolete here
\c!file=\jobname,
\c!inputfile=\outputfilename,
\c!type=unix, % windows is normally less sensitive to handle
@@ -164,10 +180,10 @@
{\globaldefs\getvalue{@gd@\the\globaldefs}\relax}
{\globaldefs\zerocount}}
-\def\startlocal {\dostartglobaldefs>-}
-\def\stoplocal {\dostopglobaldefs}
-\def\startglobal {\dostartglobaldefs<+}
-\def\stopglobal {\dostopglobaldefs}
+\unexpanded\def\startlocal {\dostartglobaldefs>-}
+\unexpanded\def\stoplocal {\dostopglobaldefs}
+\unexpanded\def\startglobal {\dostartglobaldefs<+}
+\unexpanded\def\stopglobal {\dostopglobaldefs}
\def\complexstart[#1]{\bgroup\getvalue{\e!start#1}}
\def\complexstop [#1]{\getvalue{\e!stop #1}\egroup}
@@ -187,7 +203,7 @@
\c!commands=,
\c!style=,
#2]%
- \unexpanded\setvalue{#1}%
+ \setuvalue{#1}%
{\groupedcommand
{\getvalue{\??be#1\c!commands}%
\dostartattributes{\??be#1}\c!style\c!color}
@@ -207,14 +223,14 @@
{\def\docommand##1{\dododefinestartstop[##1][#2]}%
\processcommalist[#1]\docommand}
-\def\definestartstop
+\unexpanded\def\definestartstop
{\dodoubleargument\dodefinestartstop}
\def\dosetupstartstop[#1][#2]%
{\def\docommand##1{\getparameters[\??be##1][#2]}%
\processcommalist[#1]\docommand}
-\def\setupstartstop
+\unexpanded\def\setupstartstop
{\dodoubleargument\dosetupstartstop}
% \docommand kan niet worden gebruikt omdat deze macro
@@ -227,10 +243,10 @@
% \def\executeprotected#1%
% {\csname\??pc\string#1\endcsname}
%
-% \def\defineprotected#1#2%
+% \unexpanded\def\defineprotected#1#2%
% {\expandafter\def\csname\??pc\string#2\endcsname}
%
-% \def\defineunprotected#1%
+% \unexpanded\def\defineunprotected#1%
% {\def#1}
%
% \def\doprotected%
@@ -334,7 +350,7 @@
% end
% \stopluacode
%
-% \def\define#1#{\ctxlua{commands.define([[\detokenize{#1}]])}}
+% \unexpanded\def\define#1#{\ctxlua{commands.define([[\detokenize{#1}]])}}
%
% \starttext
% \define[2]\whatevera{#1+#2}
@@ -413,13 +429,4 @@
\def\defreducedargument {\dodefreducedargument\edef}
\def\gdefreducedargument{\dodefreducedargument\xdef}
-\startruntimeluacode
- \ctxlua {
- environment.inputfilename = "\inputfilename"
- environment.outputfilename = "\outputfilename"
- environment.jobfilename = "\jobfilename"
- environment.jobfilesuffix = "\jobfilesuffix"
- }
-\stopruntimeluacode
-
\protect \endinput
diff --git a/Master/texmf-dist/tex/context/base/core-two.lua b/Master/texmf-dist/tex/context/base/core-two.lua
index 50c356f7be6..24a3191a775 100644
--- a/Master/texmf-dist/tex/context/base/core-two.lua
+++ b/Master/texmf-dist/tex/context/base/core-two.lua
@@ -1,6 +1,6 @@
if not modules then modules = { } end modules ['core-two'] = {
version = 1.001,
- comment = "companion to core-two.tex",
+ comment = "companion to core-two.mkiv",
author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
copyright = "PRAGMA ADE / ConTeXt Development Team",
license = "see context related readme files"
@@ -124,12 +124,14 @@ end
function jobpasses.getdata(id,index,default)
local jti = collected[id]
- texprint((jit and jti[index]) or default)
+ local value = jit and jti[index]
+ texprint((value ~= "" and value) or default or "")
end
function jobpasses.getfield(id,index,tag,default)
local jti = collected[id]
jti = jti and jti[index]
- texprint((jti and jti[tag]) or default)
+ local value = jti and jti[tag]
+ texprint((value ~= "" and value) or default or "")
end
diff --git a/Master/texmf-dist/tex/context/base/core-two.mkiv b/Master/texmf-dist/tex/context/base/core-two.mkiv
index 98d396d080a..2cc9412afba 100644
--- a/Master/texmf-dist/tex/context/base/core-two.mkiv
+++ b/Master/texmf-dist/tex/context/base/core-two.mkiv
@@ -91,7 +91,7 @@
% todo: move the edef to lua
-\def\definetwopasslist #1{\ctxlua{jobpasses.define('#1')}}
+\unexpanded\def\definetwopasslist #1{\ctxlua{jobpasses.define('#1')}}
\def\gettwopassdata #1{\edef\twopassdata{\ctxlua{jobpasses.get("#1")}}\testtwopassdata}
\def\checktwopassdata #1{\edef\twopassdata{\ctxlua{jobpasses.check("#1")}}\testtwopassdata}
\def\findtwopassdata #1#2{\edef\twopassdata{\ctxlua{jobpasses.find("#1","#2")}}\testtwopassdata}
diff --git a/Master/texmf-dist/tex/context/base/core-uti.lua b/Master/texmf-dist/tex/context/base/core-uti.lua
index 98e60be2e66..01fd8522b10 100644
--- a/Master/texmf-dist/tex/context/base/core-uti.lua
+++ b/Master/texmf-dist/tex/context/base/core-uti.lua
@@ -1,6 +1,6 @@
if not modules then modules = { } end modules ['core-uti'] = {
version = 1.001,
- comment = "companion to core-uti.tex",
+ comment = "companion to core-uti.mkiv",
author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
copyright = "PRAGMA ADE / ConTeXt Development Team",
license = "see context related readme files"
@@ -17,8 +17,9 @@ 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]]--
-local sort, concat, format = table.sort, table.concat, string.format
+local sort, concat, format, match = table.sort, table.concat, string.format, string.match
local next, type, tostring = next, type, tostring
+local texsprint, ctxcatcodes = tex.sprint, tex.ctxcatcodes
if not jobs then jobs = { } end
if not job then jobs['main'] = { } end job = jobs['main']
@@ -39,8 +40,6 @@ end
job.comment(format("version: %1.2f",jobs.version))
-job._save_, job._load_ = { }, { }
-
function job.initialize(loadname,savename)
job.load(loadname)
main.register_stop_actions(function()
@@ -59,11 +58,10 @@ end
jobvariables = jobvariables or { }
jobvariables.collected = jobvariables.collected or { }
jobvariables.tobesaved = jobvariables.tobesaved or { }
-
jobvariables.checksums = jobvariables.checksums or { }
-if not jobvariables.checksums.old then jobvariables.checksums.old = md5.HEX("old") end
-if not jobvariables.checksums.new then jobvariables.checksums.new = md5.HEX("new") end
+if not jobvariables.checksums.old then jobvariables.checksums.old = md5.HEX("old") end -- used in experiment
+if not jobvariables.checksums.new then jobvariables.checksums.new = md5.HEX("new") end -- used in experiment
job.register('jobvariables.checksums', jobvariables.checksums)
@@ -71,11 +69,13 @@ local function initializer()
local r = jobvariables.collected.randomseed
if not r then
r = math.random()
+ math.setrandomseedi(r,"initialize")
+ else
+ math.setrandomseedi(r,"previous run")
end
- math.randomseed(r)
jobvariables.tobesaved.randomseed = r
for cs, value in next, jobvariables.collected do
- tex.sprint(format("\\xdef\\%s{%s}",cs,value))
+ texsprint(ctxcatcodes,format("\\xdef\\%s{%s}",cs,value))
end
end
@@ -185,7 +185,6 @@ function packer.strip(p)
p.hash = nil
end
-
local packlist = {
"numbers",
"metadata",
@@ -195,13 +194,16 @@ local packlist = {
"pagedata",
"directives",
"specification",
---~ "references",
+ "processors", -- might become key under directives or metadata
+-- "references", -- we need to rename of them as only one packs (not structure.lists.references)
}
local jobpacker = packer.new(packlist,1.01)
job.pack = true
+job._save_, job._load_ = { }, { } -- registers timing
+
function job.save(filename)
statistics.starttiming(job._save_)
local f = io.open(filename,'w')
@@ -235,7 +237,7 @@ function job.load(filename)
statistics.starttiming(job._load_)
local data = io.loaddata(filename)
if data and data ~= "" then
- local version = tonumber(data:match("^-- version: ([%d%.]+)"))
+ local version = tonumber(match(data,"^-- version: ([%d%.]+)"))
if version ~= jobs.version then
logs.report("job","version mismatch with jobfile: %s <> %s", version or "?", jobs.version)
else
@@ -246,7 +248,7 @@ function job.load(filename)
for l=1,#savelist do
local list = savelist[l]
local target, initializer = list[1], list[3]
- packer.unpack(aux.accesstable(target),job.packer,true)
+ packer.unpack(aux.accesstable(target),job.packer,true)
if type(initializer) == "function" then
initializer(aux.accesstable(target))
end
@@ -260,9 +262,7 @@ end
-- eventually this will end up in strc-ini
statistics.register("startup time", function()
- if statistics.elapsedindeed(ctx) then
- return format("%s seconds (including runtime option file processing)", statistics.elapsedtime(ctx))
- end
+ return statistics.elapsedseconds(ctx,"including runtime option file processing")
end)
statistics.register("jobdata time",function()
@@ -286,6 +286,7 @@ function statistics.formatruntime(runtime)
local pages = tex.count['realpageno'] - 1
if shipped > 0 or pages > 0 then
local persecond = shipped / runtime
+ if pages == 0 then pages = shipped end
return format("%s seconds, %i processed pages, %i shipped pages, %.3f pages/second",runtime,pages,shipped,persecond)
else
return format("%s seconds",runtime)
diff --git a/Master/texmf-dist/tex/context/base/core-uti.mkiv b/Master/texmf-dist/tex/context/base/core-uti.mkiv
index 29e6342be60..6b2dae2c9c9 100644
--- a/Master/texmf-dist/tex/context/base/core-uti.mkiv
+++ b/Master/texmf-dist/tex/context/base/core-uti.mkiv
@@ -42,6 +42,8 @@
}%
\to \everystarttext
+\def\notuccompression{\ctxlua{job.pack=false}}
+
% cleaner, for the moment
% \appendtoks
diff --git a/Master/texmf-dist/tex/context/base/core-var.mkiv b/Master/texmf-dist/tex/context/base/core-var.mkiv
index d6e02e392ff..62cc9fc5003 100644
--- a/Master/texmf-dist/tex/context/base/core-var.mkiv
+++ b/Master/texmf-dist/tex/context/base/core-var.mkiv
@@ -107,6 +107,9 @@
\newevery \everybodyfont \EveryBodyFont
\newevery \everyfontswitch \EveryFontSwitch
+\newtoks \everysetupbodyfont
+\newtoks \everyswitchtobodyfont
+
%D Math:
\newtoks \everybeforedisplayformula
@@ -132,8 +135,8 @@
\newtoks\everystarttextproperties
\newtoks\everystoptextproperties
-\def\starttextproperties{\the\everystarttextproperties}
-\def\stoptextproperties {\the\everystoptextproperties}
+\unexpanded\def\starttextproperties{\the\everystarttextproperties}
+\unexpanded\def\stoptextproperties {\the\everystoptextproperties}
%D \macros
%D {defineinputmode,setinputmode}
@@ -142,7 +145,7 @@
% not in mkiv
-\def\defineinputmode[#1]{\@EA\newtoks\csname every#1inputmode\endcsname}
+\unexpanded\def\defineinputmode[#1]{\@EA\newtoks\csname every#1inputmode\endcsname}
\def\setinputmode [#1]{\the\executeifdefined{every#1inputmode}\emptytoks}
\defineinputmode [TEX]
@@ -198,7 +201,7 @@
\appendtoks \boxedcontenttrue \to \everyboxedcontent
-\def\startboxedcontent{\bgroup\the\everyboxedcontent}
+\unexpanded\def\startboxedcontent{\bgroup\the\everyboxedcontent}
\let\stopboxedcontent \egroup
%D \macros
@@ -227,8 +230,8 @@
%D \stoptext
%D \stoptyping
-\def\defineselector{\dodoubleargument\dodefineselector}
-\def\setupselector {\dodoubleargument\dosetupselector}
+\unexpanded\def\defineselector{\dodoubleargument\dodefineselector}
+\unexpanded\def\setupselector {\dodoubleargument\dosetupselector}
\def\dodefineselector[#1][#2]{\getparameters[\??sx#1][\c!max=2,\c!n=1,#2]}
\def\dosetupselector [#1][#2]{\getparameters[\??sx#1][#2]}
diff --git a/Master/texmf-dist/tex/context/base/data-aux.lua b/Master/texmf-dist/tex/context/base/data-aux.lua
index 492cce6fdd2..26e1f551cb0 100644
--- a/Master/texmf-dist/tex/context/base/data-aux.lua
+++ b/Master/texmf-dist/tex/context/base/data-aux.lua
@@ -1,6 +1,6 @@
if not modules then modules = { } end modules ['data-aux'] = {
version = 1.001,
- comment = "companion to luat-lib.tex",
+ comment = "companion to luat-lib.mkiv",
author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
copyright = "PRAGMA ADE / ConTeXt Development Team",
license = "see context related readme files"
@@ -8,47 +8,47 @@ if not modules then modules = { } end modules ['data-aux'] = {
local find = string.find
-local trace_verbose = false trackers.register("resolvers.verbose", function(v) trace_verbose = v end)
+local trace_locating = false trackers.register("resolvers.locating", function(v) trace_locating = v end)
function resolvers.update_script(oldname,newname) -- oldname -> own.name, not per se a suffix
local scriptpath = "scripts/context/lua"
newname = file.addsuffix(newname,"lua")
local oldscript = resolvers.clean_path(oldname)
- if trace_verbose then
+ if trace_locating then
logs.report("fileio","to be replaced old script %s", oldscript)
end
local newscripts = resolvers.find_files(newname) or { }
if #newscripts == 0 then
- if trace_verbose then
+ if trace_locating then
logs.report("fileio","unable to locate new script")
end
else
for i=1,#newscripts do
local newscript = resolvers.clean_path(newscripts[i])
- if trace_verbose then
+ if trace_locating then
logs.report("fileio","checking new script %s", newscript)
end
if oldscript == newscript then
- if trace_verbose then
+ if trace_locating then
logs.report("fileio","old and new script are the same")
end
elseif not find(newscript,scriptpath) then
- if trace_verbose then
+ if trace_locating then
logs.report("fileio","new script should come from %s",scriptpath)
end
elseif not (find(oldscript,file.removesuffix(newname).."$") or find(oldscript,newname.."$")) then
- if trace_verbose then
+ if trace_locating then
logs.report("fileio","invalid new script name")
end
else
local newdata = io.loaddata(newscript)
if newdata then
- if trace_verbose then
+ if trace_locating then
logs.report("fileio","old script content replaced by new content")
end
io.savedata(oldscript,newdata)
break
- elseif trace_verbose then
+ elseif trace_locating then
logs.report("fileio","unable to load new script")
end
end
diff --git a/Master/texmf-dist/tex/context/base/data-bin.lua b/Master/texmf-dist/tex/context/base/data-bin.lua
index 5f342c33981..5e4397a549f 100644
--- a/Master/texmf-dist/tex/context/base/data-bin.lua
+++ b/Master/texmf-dist/tex/context/base/data-bin.lua
@@ -1,23 +1,24 @@
if not modules then modules = { } end modules ['data-bin'] = {
version = 1.001,
- comment = "companion to luat-lib.tex",
+ comment = "companion to luat-lib.mkiv",
author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
copyright = "PRAGMA ADE / ConTeXt Development Team",
license = "see context related readme files"
}
local finders, openers, loaders = resolvers.finders, resolvers.openers, resolvers.loaders
+local unpack = unpack or table.unpack
function resolvers.findbinfile(filename, filetype)
- return resolvers.methodhandler('finders',file.collapse_path(filename), filetype)
+ return resolvers.methodhandler('finders',filename, filetype)
end
function resolvers.openbinfile(filename)
- return resolvers.methodhandler('loaders',file.collapse_path(filename))
+ return resolvers.methodhandler('loaders',filename)
end
function resolvers.loadbinfile(filename, filetype)
- local fname = resolvers.findbinfile(file.collapse_path(filename), filetype)
+ local fname = resolvers.methodhandler('finders',filename, filetype)
if fname and fname ~= "" then
return resolvers.openbinfile(fname)
else
diff --git a/Master/texmf-dist/tex/context/base/data-con.lua b/Master/texmf-dist/tex/context/base/data-con.lua
index 02ee9eeddd9..fabe0baa1b7 100644
--- a/Master/texmf-dist/tex/context/base/data-con.lua
+++ b/Master/texmf-dist/tex/context/base/data-con.lua
@@ -1,6 +1,6 @@
if not modules then modules = { } end modules ['data-con'] = {
version = 1.001,
- comment = "companion to luat-lib.tex",
+ comment = "companion to luat-lib.mkiv",
author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
copyright = "PRAGMA ADE / ConTeXt Development Team",
license = "see context related readme files"
@@ -11,8 +11,6 @@ local format, lower, gsub = string.format, string.lower, string.gsub
local trace_cache = false trackers.register("resolvers.cache", function(v) trace_cache = v end)
local trace_containers = false trackers.register("resolvers.containers", function(v) trace_containers = v end)
local trace_storage = false trackers.register("resolvers.storage", function(v) trace_storage = v end)
-local trace_verbose = false trackers.register("resolvers.verbose", function(v) trace_verbose = v end)
-local trace_locating = false trackers.register("resolvers.locating", function(v) trace_locating = v trackers.enable("resolvers.verbose") end)
--[[ldx--
<p>Once we found ourselves defining similar cache constructs
@@ -76,7 +74,7 @@ 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
+ return storage and storage.cache_version == container.version
else
return false
end
diff --git a/Master/texmf-dist/tex/context/base/data-crl.lua b/Master/texmf-dist/tex/context/base/data-crl.lua
index 5cad241a689..55b1a8fad9d 100644
--- a/Master/texmf-dist/tex/context/base/data-crl.lua
+++ b/Master/texmf-dist/tex/context/base/data-crl.lua
@@ -1,11 +1,13 @@
if not modules then modules = { } end modules ['data-crl'] = {
version = 1.001,
- comment = "companion to luat-lib.tex",
+ comment = "companion to luat-lib.mkiv",
author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
copyright = "PRAGMA ADE / ConTeXt Development Team",
license = "see context related readme files"
}
+local gsub = string.gsub
+
curl = curl or { }
curl.cached = { }
@@ -14,9 +16,9 @@ curl.cachepath = caches.definepath("curl")
local finders, openers, loaders = resolvers.finders, resolvers.openers, resolvers.loaders
function curl.fetch(protocol, name)
- local cachename = curl.cachepath() .. "/" .. name:gsub("[^%a%d%.]+","-")
--- cachename = cachename:gsub("[\\/]", io.fileseparator)
- cachename = cachename:gsub("[\\]", "/") -- cleanup
+ local cachename = curl.cachepath() .. "/" .. gsub(name,"[^%a%d%.]+","-")
+-- cachename = gsub(cachename,"[\\/]", io.fileseparator)
+ cachename = gsub(cachename,"[\\]", "/") -- cleanup
if not curl.cached[name] then
if not io.exists(cachename) then
curl.cached[name] = cachename
diff --git a/Master/texmf-dist/tex/context/base/data-ctx.lua b/Master/texmf-dist/tex/context/base/data-ctx.lua
index 00d307b6d8b..89eb2742d68 100644
--- a/Master/texmf-dist/tex/context/base/data-ctx.lua
+++ b/Master/texmf-dist/tex/context/base/data-ctx.lua
@@ -1,6 +1,6 @@
if not modules then modules = { } end modules ['data-ctx'] = {
version = 1.001,
- comment = "companion to luat-lib.tex",
+ comment = "companion to luat-lib.mkiv",
author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
copyright = "PRAGMA ADE / ConTeXt Development Team",
license = "see context related readme files"
@@ -19,7 +19,9 @@ function resolvers.save_used_files_in_trees(filename,jobname)
f:write(format("\t<rl:name>%s</rl:name>\n",jobname))
end
f:write("\t<rl:files>\n")
- for _,v in ipairs(table.sortedkeys(found)) do
+ local sorted = table.sortedkeys(found)
+ for k=1,#sorted do
+ local v = sorted[k]
f:write(format("\t\t<rl:file n='%s'>%s</rl:file>\n",found[v],v))
end
f:write("\t</rl:files>\n")
diff --git a/Master/texmf-dist/tex/context/base/data-gen.lua b/Master/texmf-dist/tex/context/base/data-gen.lua
index 8537b052602..5a07558315b 100644
--- a/Master/texmf-dist/tex/context/base/data-gen.lua
+++ b/Master/texmf-dist/tex/context/base/data-gen.lua
@@ -1,6 +1,6 @@
if not modules then modules = { } end modules ['data-gen'] = {
version = 1.001,
- comment = "companion to luat-lib.tex",
+ comment = "companion to luat-lib.mkiv",
author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
copyright = "PRAGMA ADE / ConTeXt Development Team",
license = "see context related readme files"
diff --git a/Master/texmf-dist/tex/context/base/data-inp.lua b/Master/texmf-dist/tex/context/base/data-inp.lua
index 700e982c2d9..b7354e1aef3 100644
--- a/Master/texmf-dist/tex/context/base/data-inp.lua
+++ b/Master/texmf-dist/tex/context/base/data-inp.lua
@@ -1,6 +1,6 @@
if not modules then modules = { } end modules ['data-inp'] = {
version = 1.001,
- comment = "companion to luat-lib.tex",
+ comment = "companion to luat-lib.mkiv",
author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
copyright = "PRAGMA ADE / ConTeXt Development Team",
license = "see context related readme files"
diff --git a/Master/texmf-dist/tex/context/base/data-lst.lua b/Master/texmf-dist/tex/context/base/data-lst.lua
index 10d3ea479a8..82f6754867f 100644
--- a/Master/texmf-dist/tex/context/base/data-lst.lua
+++ b/Master/texmf-dist/tex/context/base/data-lst.lua
@@ -1,6 +1,6 @@
if not modules then modules = { } end modules ['data-lst'] = {
version = 1.001,
- comment = "companion to luat-lib.tex",
+ comment = "companion to luat-lib.mkiv",
author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
copyright = "PRAGMA ADE / ConTeXt Development Team",
license = "see context related readme files"
@@ -24,7 +24,9 @@ local function list(list,report)
local instance = resolvers.instance
local pat = upper(pattern or "","")
local report = report or texio.write_nl
- for _,key in pairs(table.sortedkeys(list)) do
+ local sorted = table.sortedkeys(list)
+ for i=1,#sorted do
+ local key = sorted[i]
if instance.pattern == "" or find(upper(key),pat) then
if instance.kpseonly then
if instance.kpsevars[key] then
@@ -43,11 +45,14 @@ function resolvers.listers.expansions() list(resolvers.instance.expansions) end
function resolvers.listers.configurations(report)
local report = report or texio.write_nl
local instance = resolvers.instance
- for _,key in ipairs(table.sortedkeys(instance.kpsevars)) do
+ local sorted = table.sortedkeys(instance.kpsevars)
+ for i=1,#sorted do
+ local key = sorted[i]
if not instance.pattern or (instance.pattern=="") or find(key,instance.pattern) then
report(format("%s\n",key))
- for i,c in ipairs(instance.order) do
- local str = c[key]
+ local order = instance.order
+ for i=1,#order do
+ local str = order[i][key]
if str then
report(format("\t%s\t%s",i,str))
end
diff --git a/Master/texmf-dist/tex/context/base/data-lua.lua b/Master/texmf-dist/tex/context/base/data-lua.lua
index 86231b3a3a9..988133fbecf 100644
--- a/Master/texmf-dist/tex/context/base/data-lua.lua
+++ b/Master/texmf-dist/tex/context/base/data-lua.lua
@@ -1,55 +1,152 @@
if not modules then modules = { } end modules ['data-lua'] = {
version = 1.001,
- comment = "companion to luat-lib.tex",
+ comment = "companion to luat-lib.mkiv",
author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
copyright = "PRAGMA ADE / ConTeXt Development Team",
license = "see context related readme files"
}
--- some loading stuff ... we might move this one to slot 1 depending
+-- some loading stuff ... we might move this one to slot 2 depending
-- on the developments (the loaders must not trigger kpse); we could
-- of course use a more extensive lib path spec
local trace_locating = false trackers.register("resolvers.locating", function(v) trace_locating = v end)
-local gsub = string.gsub
+local gsub, insert = string.gsub, table.insert
+local unpack = unpack or table.unpack
-local libformats = { 'luatexlibs', 'tex', 'texmfscripts', 'othertextfiles' }
-local libpaths = file.split_path(package.path)
+local libformats = { 'luatexlibs', 'tex', 'texmfscripts', 'othertextfiles' } -- 'luainputs'
+local clibformats = { 'lib' }
-package.loaders[#package.loaders+1] = function(name)
+local _path_, libpaths, _cpath_, clibpaths
+
+function package.libpaths()
+ if not _path_ or package.path ~= _path_ then
+ _path_ = package.path
+ libpaths = file.split_path(_path_,";")
+ end
+ return libpaths
+end
+
+function package.clibpaths()
+ if not _cpath_ or package.cpath ~= _cpath_ then
+ _cpath_ = package.cpath
+ clibpaths = file.split_path(_cpath_,";")
+ end
+ return clibpaths
+end
+
+local function thepath(...)
+ local t = { ... } t[#t+1] = "?.lua"
+ local path = file.join(unpack(t))
+ if trace_locating then
+ logs.report("fileio","! appending '%s' to 'package.path'",path)
+ end
+ return path
+end
+
+local p_libpaths, a_libpaths = { }, { }
+
+function package.append_libpath(...)
+ insert(a_libpath,thepath(...))
+end
+
+function package.prepend_libpath(...)
+ insert(p_libpaths,1,thepath(...))
+end
+
+-- beware, we need to return a loadfile result !
+
+local function loaded(libpaths,name,simple)
+ for i=1,#libpaths do -- package.path, might become option
+ local libpath = libpaths[i]
+ local resolved = gsub(libpath,"%?",simple)
+ if trace_locating then -- more detail
+ logs.report("fileio","! checking for '%s' on 'package.path': '%s' => '%s'",simple,libpath,resolved)
+ end
+ if resolvers.isreadable.file(resolved) then
+ if trace_locating then
+ logs.report("fileio","! lib '%s' located via 'package.path': '%s'",name,resolved)
+ end
+ return loadfile(resolved)
+ end
+ end
+end
+
+
+package.loaders[2] = function(name) -- was [#package.loaders+1]
+ if trace_locating then -- mode detail
+ logs.report("fileio","! locating '%s'",name)
+ end
for i=1,#libformats do
local format = libformats[i]
local resolved = resolvers.find_file(name,format) or ""
+ if trace_locating then -- mode detail
+ logs.report("fileio","! checking for '%s' using 'libformat path': '%s'",name,format)
+ end
if resolved ~= "" then
if trace_locating then
logs.report("fileio","! lib '%s' located via environment: '%s'",name,resolved)
end
- return function() return dofile(resolved) end
+ return loadfile(resolved)
end
end
- local simple = file.removesuffix(name)
- for i=1,#libpaths do
- local resolved = gsub(libpaths[i],"?",simple)
+ -- libpaths
+ local libpaths, clibpaths = package.libpaths(), package.clibpaths()
+ local simple = gsub(name,"%.lua$","")
+ local simple = gsub(simple,"%.","/")
+ local resolved = loaded(p_libpaths,name,simple) or loaded(libpaths,name,simple) or loaded(a_libpaths,name,simple)
+ if resolved then
+ return resolved
+ end
+ --
+ local libname = file.addsuffix(simple,os.libsuffix)
+ for i=1,#clibformats do
+ -- better have a dedicated loop
+ local format = clibformats[i]
+ local paths = resolvers.expanded_path_list_from_var(format)
+ for p=1,#paths do
+ local path = paths[p]
+ local resolved = file.join(path,libname)
+ if trace_locating then -- mode detail
+ logs.report("fileio","! checking for '%s' using 'clibformat path': '%s'",libname,path)
+ end
+ if resolvers.isreadable.file(resolved) then
+ if trace_locating then
+ logs.report("fileio","! lib '%s' located via 'clibformat': '%s'",libname,resolved)
+ end
+ return package.loadlib(resolved,name)
+ end
+ end
+ end
+ for i=1,#clibpaths do -- package.path, might become option
+ local libpath = clibpaths[i]
+ local resolved = gsub(libpath,"?",simple)
+ if trace_locating then -- more detail
+ logs.report("fileio","! checking for '%s' on 'package.cpath': '%s'",simple,libpath)
+ end
if resolvers.isreadable.file(resolved) then
if trace_locating then
- logs.report("fileio","! lib '%s' located via 'package.path': '%s'",name,resolved)
+ logs.report("fileio","! lib '%s' located via 'package.cpath': '%s'",name,resolved)
end
- return function() return dofile(resolved) end
+ return package.loadlib(resolved,name)
end
end
-- just in case the distribution is messed up
+ if trace_loading then -- more detail
+ logs.report("fileio","! checking for '%s' using 'luatexlibs': '%s'",name)
+ end
local resolved = resolvers.find_file(file.basename(name),'luatexlibs') or ""
if resolved ~= "" then
if trace_locating then
logs.report("fileio","! lib '%s' located by basename via environment: '%s'",name,resolved)
end
- return function() return dofile(resolved) end
+ return loadfile(resolved)
end
if trace_locating then
logs.report("fileio",'? unable to locate lib: %s',name)
end
- return "unable to locate " .. name
+-- return "unable to locate " .. name
end
resolvers.loadlualib = require
diff --git a/Master/texmf-dist/tex/context/base/data-out.lua b/Master/texmf-dist/tex/context/base/data-out.lua
index b774e25fcf8..f73ff9bdcf7 100644
--- a/Master/texmf-dist/tex/context/base/data-out.lua
+++ b/Master/texmf-dist/tex/context/base/data-out.lua
@@ -1,6 +1,6 @@
if not modules then modules = { } end modules ['data-out'] = {
version = 1.001,
- comment = "companion to luat-lib.tex",
+ comment = "companion to luat-lib.mkiv",
author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
copyright = "PRAGMA ADE / ConTeXt Development Team",
license = "see context related readme files"
diff --git a/Master/texmf-dist/tex/context/base/data-pre.lua b/Master/texmf-dist/tex/context/base/data-pre.lua
index deee9ebf46f..9348f6cd39c 100644
--- a/Master/texmf-dist/tex/context/base/data-pre.lua
+++ b/Master/texmf-dist/tex/context/base/data-pre.lua
@@ -1,6 +1,6 @@
if not modules then modules = { } end modules ['data-res'] = {
version = 1.001,
- comment = "companion to luat-lib.tex",
+ comment = "companion to luat-lib.mkiv",
author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
copyright = "PRAGMA ADE / ConTeXt Development Team",
license = "see context related readme files"
@@ -35,6 +35,14 @@ prefixes.relative = function(str,n)
return resolvers.clean_path(str)
end
+prefixes.auto = function(str)
+ local fullname = prefixes.relative(str)
+ if not lfs.isfile(fullname) then
+ fullname = prefixes.locate(str)
+ end
+ return fullname
+end
+
prefixes.locate = function(str)
local fullname = resolvers.find_given_file(str) or ""
return resolvers.clean_path((fullname ~= "" and fullname) or str)
@@ -58,6 +66,16 @@ prefixes.full = prefixes.locate
prefixes.file = prefixes.filename
prefixes.path = prefixes.pathname
+function resolvers.allprefixes(separator)
+ local all = table.sortedkeys(prefixes)
+ if separator then
+ for i=1,#all do
+ all[i] = all[i] .. ":"
+ end
+ end
+ return all
+end
+
local function _resolve_(method,target)
if prefixes[method] then
return prefixes[method](target)
@@ -68,7 +86,8 @@ end
local function resolve(str)
if type(str) == "table" then
- for k, v in pairs(str) do -- ipairs
+ for k=1,#str do
+ local v = str[k]
str[k] = resolve(v) or v
end
elseif str and str ~= "" then
@@ -81,7 +100,7 @@ resolvers.resolve = resolve
if os.uname then
- for k, v in pairs(os.uname()) do
+ for k, v in next, os.uname() do
if not prefixes[k] then
prefixes[k] = function() return v end
end
diff --git a/Master/texmf-dist/tex/context/base/data-res.lua b/Master/texmf-dist/tex/context/base/data-res.lua
index 39e4aa208fc..ecef1418860 100644
--- a/Master/texmf-dist/tex/context/base/data-res.lua
+++ b/Master/texmf-dist/tex/context/base/data-res.lua
@@ -1,9 +1,9 @@
if not modules then modules = { } end modules ['data-inp'] = {
version = 1.001,
+ comment = "companion to luat-lib.mkiv",
author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
copyright = "PRAGMA ADE / ConTeXt Development Team",
license = "see context related readme files",
- comment = "companion to luat-lib.tex",
}
-- After a few years using the code the large luat-inp.lua file
@@ -15,7 +15,7 @@ if not modules then modules = { } end modules ['data-inp'] = {
-- * some public auxiliary functions were made private
--
-- TODO: os.getenv -> os.env[]
--- TODO: instances.[hashes,cnffiles,configurations,522] -> ipairs (alles check, sneller)
+-- TODO: instances.[hashes,cnffiles,configurations,522]
-- TODO: check escaping in find etc, too much, too slow
-- This lib is multi-purpose and can be loaded again later on so that
@@ -36,12 +36,13 @@ if not modules then modules = { } end modules ['data-inp'] = {
local format, gsub, find, lower, upper, match, gmatch = string.format, string.gsub, string.find, string.lower, string.upper, string.match, string.gmatch
local concat, insert, sortedkeys = table.concat, table.insert, table.sortedkeys
local next, type = next, type
+local lpegmatch = lpeg.match
-local trace_locating, trace_detail, trace_verbose = false, false, false
+local trace_locating, trace_detail, trace_expansions = false, false, false
-trackers.register("resolvers.verbose", function(v) trace_verbose = v end)
-trackers.register("resolvers.locating", function(v) trace_locating = v trackers.enable("resolvers.verbose") end)
-trackers.register("resolvers.detail", function(v) trace_detail = v trackers.enable("resolvers.verbose,resolvers.detail") end)
+trackers.register("resolvers.locating", function(v) trace_locating = v end)
+trackers.register("resolvers.details", function(v) trace_detail = v end)
+trackers.register("resolvers.expansions", function(v) trace_expansions = v end) -- todo
if not resolvers then
resolvers = {
@@ -65,7 +66,7 @@ resolvers.generators.notfound = { nil }
resolvers.cacheversion = '1.0.1'
resolvers.cnfname = 'texmf.cnf'
resolvers.luaname = 'texmfcnf.lua'
-resolvers.homedir = os.env[os.platform == "windows" and 'USERPROFILE'] or os.env['HOME'] or '~'
+resolvers.homedir = os.env[os.type == "windows" and 'USERPROFILE'] or os.env['HOME'] or '~'
resolvers.cnfdefault = '{$SELFAUTODIR,$SELFAUTOPARENT}{,{/share,}/texmf{-local,.local,}/web2c}'
local dummy_path_expr = "^!*unset/*$"
@@ -107,8 +108,8 @@ suffixes['lua'] = { 'lua', 'luc', 'tma', 'tmc' }
alternatives['map files'] = 'map'
alternatives['enc files'] = 'enc'
-alternatives['cid files'] = 'cid'
-alternatives['fea files'] = 'fea'
+alternatives['cid maps'] = 'cid' -- great, why no cid files
+alternatives['font feature files'] = 'fea' -- and fea files here
alternatives['opentype fonts'] = 'otf'
alternatives['truetype fonts'] = 'ttf'
alternatives['truetype collections'] = 'ttc'
@@ -124,6 +125,11 @@ formats ['sfd'] = 'SFDFONTS'
suffixes ['sfd'] = { 'sfd' }
alternatives['subfont definition files'] = 'sfd'
+-- lib paths
+
+formats ['lib'] = 'CLUAINPUTS' -- new (needs checking)
+suffixes['lib'] = (os.libsuffix and { os.libsuffix }) or { 'dll', 'so' }
+
-- In practice we will work within one tds tree, but i want to keep
-- the option open to build tools that look at multiple trees, which is
-- why we keep the tree specific data in a table. We used to pass the
@@ -246,8 +252,10 @@ local function check_configuration() -- not yet ok, no time for debugging now
-- bad luck
end
fix("LUAINPUTS" , ".;$TEXINPUTS;$TEXMFSCRIPTS") -- no progname, hm
- fix("FONTFEATURES", ".;$TEXMF/fonts/fea//;$OPENTYPEFONTS;$TTFONTS;$T1FONTS;$AFMFONTS")
- fix("FONTCIDMAPS" , ".;$TEXMF/fonts/cid//;$OPENTYPEFONTS;$TTFONTS;$T1FONTS;$AFMFONTS")
+ -- this will go away some day
+ fix("FONTFEATURES", ".;$TEXMF/fonts/{data,fea}//;$OPENTYPEFONTS;$TTFONTS;$T1FONTS;$AFMFONTS")
+ fix("FONTCIDMAPS" , ".;$TEXMF/fonts/{data,cid}//;$OPENTYPEFONTS;$TTFONTS;$T1FONTS;$AFMFONTS")
+ --
fix("LUATEXLIBS" , ".;$TEXMF/luatex/lua//")
end
@@ -262,7 +270,7 @@ function resolvers.settrace(n) -- no longer number but: 'locating' or 'detail'
end
end
-resolvers.settrace(os.getenv("MTX.resolvers.TRACE") or os.getenv("MTX_INPUT_TRACE"))
+resolvers.settrace(os.getenv("MTX_INPUT_TRACE"))
function resolvers.osenv(key)
local ie = instance.environment
@@ -350,37 +358,43 @@ end
-- work that well; the parsing is ok, but dealing with the resulting
-- table is a pain because we need to work inside-out recursively
+local function do_first(a,b)
+ local t = { }
+ for s in gmatch(b,"[^,]+") do t[#t+1] = a .. s end
+ return "{" .. concat(t,",") .. "}"
+end
+
+local function do_second(a,b)
+ local t = { }
+ for s in gmatch(a,"[^,]+") do t[#t+1] = s .. b end
+ return "{" .. concat(t,",") .. "}"
+end
+
+local function do_both(a,b)
+ local t = { }
+ for sa in gmatch(a,"[^,]+") do
+ for sb in gmatch(b,"[^,]+") do
+ t[#t+1] = sa .. sb
+ end
+ end
+ return "{" .. concat(t,",") .. "}"
+end
+
+local function do_three(a,b,c)
+ return a .. b.. c
+end
+
local function splitpathexpr(str, t, validate)
-- no need for further optimization as it is only called a
- -- few times, we can use lpeg for the sub; we could move
- -- the local functions outside the body
+ -- few times, we can use lpeg for the sub
+ if trace_expansions then
+ logs.report("fileio","expanding variable '%s'",str)
+ end
t = t or { }
str = gsub(str,",}",",@}")
str = gsub(str,"{,","{@,")
-- str = "@" .. str .. "@"
local ok, done
- local function do_first(a,b)
- local t = { }
- for s in gmatch(b,"[^,]+") do t[#t+1] = a .. s end
- return "{" .. concat(t,",") .. "}"
- end
- local function do_second(a,b)
- local t = { }
- for s in gmatch(a,"[^,]+") do t[#t+1] = s .. b end
- return "{" .. concat(t,",") .. "}"
- end
- local function do_both(a,b)
- local t = { }
- for sa in gmatch(a,"[^,]+") do
- for sb in gmatch(b,"[^,]+") do
- t[#t+1] = sa .. sb
- end
- end
- return "{" .. concat(t,",") .. "}"
- end
- local function do_three(a,b,c)
- return a .. b.. c
- end
while true do
done = false
while true do
@@ -411,6 +425,11 @@ local function splitpathexpr(str, t, validate)
t[#t+1] = s
end
end
+ if trace_expansions then
+ for k=1,#t do
+ logs.report("fileio","% 4i: %s",k,t[k])
+ end
+ end
return t
end
@@ -450,18 +469,27 @@ end
-- also we now follow the stupid route: if not set then just assume *one*
-- cnf file under texmf (i.e. distribution)
-resolvers.ownpath = resolvers.ownpath or nil
-resolvers.ownbin = resolvers.ownbin or arg[-2] or arg[-1] or arg[0] or "luatex"
-resolvers.autoselfdir = true -- false may be handy for debugging
+local args = environment and environment.original_arguments or arg -- this needs a cleanup
+
+resolvers.ownbin = resolvers.ownbin or args[-2] or arg[-2] or args[-1] or arg[-1] or arg[0] or "luatex"
+resolvers.ownbin = gsub(resolvers.ownbin,"\\","/")
function resolvers.getownpath()
- if not resolvers.ownpath then
- if resolvers.autoselfdir and os.selfdir then
- resolvers.ownpath = os.selfdir
- else
- local binary = resolvers.ownbin
- if os.platform == "windows" then
- binary = file.replacesuffix(binary,"exe")
+ local ownpath = resolvers.ownpath or os.selfdir
+ if not ownpath or ownpath == "" or ownpath == "unset" then
+ ownpath = args[-1] or arg[-1]
+ ownpath = ownpath and file.dirname(gsub(ownpath,"\\","/"))
+ if not ownpath or ownpath == "" then
+ ownpath = args[-0] or arg[-0]
+ ownpath = ownpath and file.dirname(gsub(ownpath,"\\","/"))
+ end
+ local binary = resolvers.ownbin
+ if not ownpath or ownpath == "" then
+ ownpath = ownpath and file.dirname(binary)
+ end
+ if not ownpath or ownpath == "" then
+ if os.binsuffix ~= "" then
+ binary = file.replacesuffix(binary,os.binsuffix)
end
for p in gmatch(os.getenv("PATH"),"[^"..io.pathseparator.."]+") do
local b = file.join(p,binary)
@@ -473,30 +501,39 @@ function resolvers.getownpath()
local olddir = lfs.currentdir()
if lfs.chdir(p) then
local pp = lfs.currentdir()
- if trace_verbose and p ~= pp then
- logs.report("fileio","following symlink %s to %s",p,pp)
+ if trace_locating and p ~= pp then
+ logs.report("fileio","following symlink '%s' to '%s'",p,pp)
end
- resolvers.ownpath = pp
+ ownpath = pp
lfs.chdir(olddir)
else
- if trace_verbose then
- logs.report("fileio","unable to check path %s",p)
+ if trace_locating then
+ logs.report("fileio","unable to check path '%s'",p)
end
- resolvers.ownpath = p
+ ownpath = p
end
break
end
end
end
- if not resolvers.ownpath then resolvers.ownpath = '.' end
+ if not ownpath or ownpath == "" then
+ ownpath = "."
+ logs.report("fileio","forcing fallback ownpath .")
+ elseif trace_locating then
+ logs.report("fileio","using ownpath '%s'",ownpath)
+ end
end
- return resolvers.ownpath
+ resolvers.ownpath = ownpath
+ function resolvers.getownpath()
+ return resolvers.ownpath
+ end
+ return ownpath
end
local own_places = { "SELFAUTOLOC", "SELFAUTODIR", "SELFAUTOPARENT", "TEXMFCNF" }
local function identify_own()
- local ownpath = resolvers.getownpath() or lfs.currentdir()
+ local ownpath = resolvers.getownpath() or dir.current()
local ie = instance.environment
if ownpath then
if resolvers.env('SELFAUTOLOC') == "" then os.env['SELFAUTOLOC'] = file.collapse_path(ownpath) end
@@ -509,10 +546,10 @@ local function identify_own()
if resolvers.env('TEXMFCNF') == "" then os.env['TEXMFCNF'] = resolvers.cnfdefault end
if resolvers.env('TEXOS') == "" then os.env['TEXOS'] = resolvers.env('SELFAUTODIR') end
if resolvers.env('TEXROOT') == "" then os.env['TEXROOT'] = resolvers.env('SELFAUTOPARENT') end
- if trace_verbose then
+ if trace_locating then
for i=1,#own_places do
local v = own_places[i]
- logs.report("fileio","variable %s set to %s",v,resolvers.env(v) or "unknown")
+ logs.report("fileio","variable '%s' set to '%s'",v,resolvers.env(v) or "unknown")
end
end
identify_own = function() end
@@ -544,10 +581,8 @@ end
local function load_cnf_file(fname)
fname = resolvers.clean_path(fname)
local lname = file.replacesuffix(fname,'lua')
- local f = io.open(lname)
- if f then -- this will go
- f:close()
- local dname = file.dirname(fname)
+ if lfs.isfile(lname) then
+ local dname = file.dirname(fname) -- fname ?
if not instance.configuration[dname] then
resolvers.load_data(dname,'configuration',lname and file.basename(lname))
instance.order[#instance.order+1] = instance.configuration[dname]
@@ -555,8 +590,8 @@ local function load_cnf_file(fname)
else
f = io.open(fname)
if f then
- if trace_verbose then
- logs.report("fileio","loading %s", fname)
+ if trace_locating then
+ logs.report("fileio","loading configuration file %s", fname)
end
local line, data, n, k, v
local dname = file.dirname(fname)
@@ -590,14 +625,16 @@ local function load_cnf_file(fname)
end
end
f:close()
- elseif trace_verbose then
- logs.report("fileio","skipping %s", fname)
+ elseif trace_locating then
+ logs.report("fileio","skipping configuration file '%s'", fname)
end
end
end
local function collapse_cnf_data() -- potential optimization: pass start index (setup and configuration are shared)
- for _,c in ipairs(instance.order) do
+ local order = instance.order
+ for i=1,#order do
+ local c = order[i]
for k,v in next, c do
if not instance.variables[k] then
if instance.environment[k] then
@@ -613,19 +650,24 @@ end
function resolvers.load_cnf()
local function loadoldconfigdata()
- for _, fname in ipairs(instance.cnffiles) do
- load_cnf_file(fname)
+ local cnffiles = instance.cnffiles
+ for i=1,#cnffiles do
+ load_cnf_file(cnffiles[i])
end
end
-- instance.cnffiles contain complete names now !
+ -- we still use a funny mix of cnf and new but soon
+ -- we will switch to lua exclusively as we only use
+ -- the file to collect the tree roots
if #instance.cnffiles == 0 then
- if trace_verbose then
+ if trace_locating then
logs.report("fileio","no cnf files found (TEXMFCNF may not be set/known)")
end
else
- instance.rootpath = instance.cnffiles[1]
- for k,fname in ipairs(instance.cnffiles) do
- instance.cnffiles[k] = file.collapse_path(gsub(fname,"\\",'/'))
+ local cnffiles = instance.cnffiles
+ instance.rootpath = cnffiles[1]
+ for k=1,#cnffiles do
+ instance.cnffiles[k] = file.collapse_path(cnffiles[k])
end
for i=1,3 do
instance.rootpath = file.dirname(instance.rootpath)
@@ -653,8 +695,9 @@ function resolvers.load_lua()
-- yet harmless
else
instance.rootpath = instance.luafiles[1]
- for k,fname in ipairs(instance.luafiles) do
- instance.luafiles[k] = file.collapse_path(gsub(fname,"\\",'/'))
+ local luafiles = instance.luafiles
+ for k=1,#luafiles do
+ instance.luafiles[k] = file.collapse_path(luafiles[k])
end
for i=1,3 do
instance.rootpath = file.dirname(instance.rootpath)
@@ -686,14 +729,14 @@ end
function resolvers.append_hash(type,tag,name)
if trace_locating then
- logs.report("fileio","= hash append: %s",tag)
+ logs.report("fileio","hash '%s' appended",tag)
end
insert(instance.hashes, { ['type']=type, ['tag']=tag, ['name']=name } )
end
function resolvers.prepend_hash(type,tag,name)
if trace_locating then
- logs.report("fileio","= hash prepend: %s",tag)
+ logs.report("fileio","hash '%s' prepended",tag)
end
insert(instance.hashes, 1, { ['type']=type, ['tag']=tag, ['name']=name } )
end
@@ -717,9 +760,11 @@ end
-- locators
function resolvers.locatelists()
- for _, path in ipairs(resolvers.clean_path_list('TEXMF')) do
- if trace_verbose then
- logs.report("fileio","locating list of %s",path)
+ local texmfpaths = resolvers.clean_path_list('TEXMF')
+ for i=1,#texmfpaths do
+ local path = texmfpaths[i]
+ if trace_locating then
+ logs.report("fileio","locating list of '%s'",path)
end
resolvers.locatedatabase(file.collapse_path(path))
end
@@ -732,11 +777,11 @@ end
function resolvers.locators.tex(specification)
if specification and specification ~= '' and lfs.isdir(specification) then
if trace_locating then
- logs.report("fileio",'! tex locator found: %s',specification)
+ logs.report("fileio","tex locator '%s' found",specification)
end
resolvers.append_hash('file',specification,filename)
elseif trace_locating then
- logs.report("fileio",'? tex locator not found: %s',specification)
+ logs.report("fileio","tex locator '%s' not found",specification)
end
end
@@ -750,7 +795,9 @@ function resolvers.loadfiles()
instance.loaderror = false
instance.files = { }
if not instance.renewcache then
- for _, hash in ipairs(instance.hashes) do
+ local hashes = instance.hashes
+ for k=1,#hashes do
+ local hash = hashes[k]
resolvers.hashdatabase(hash.tag,hash.name)
if instance.loaderror then break end
end
@@ -764,8 +811,9 @@ end
-- generators:
function resolvers.loadlists()
- for _, hash in ipairs(instance.hashes) do
- resolvers.generatedatabase(hash.tag)
+ local hashes = instance.hashes
+ for i=1,#hashes do
+ resolvers.generatedatabase(hashes[i].tag)
end
end
@@ -777,10 +825,27 @@ end
local weird = lpeg.P(".")^1 + lpeg.anywhere(lpeg.S("~`!#$%^&*()={}[]:;\"\'||<>,?\n\r\t"))
+--~ local l_forbidden = lpeg.S("~`!#$%^&*()={}[]:;\"\'||\\/<>,?\n\r\t")
+--~ local l_confusing = lpeg.P(" ")
+--~ local l_character = lpeg.patterns.utf8
+--~ local l_dangerous = lpeg.P(".")
+
+--~ local l_normal = (l_character - l_forbidden - l_confusing - l_dangerous) * (l_character - l_forbidden - l_confusing^2)^0 * lpeg.P(-1)
+--~ ----- l_normal = l_normal * lpeg.Cc(true) + lpeg.Cc(false)
+
+--~ local function test(str)
+--~ print(str,lpeg.match(l_normal,str))
+--~ end
+--~ test("ヒラギノ明朝 Pro W3")
+--~ test("..ヒラギノ明朝 Pro W3")
+--~ test(":ヒラギノ明朝 Pro W3;")
+--~ test("ヒラギノ明朝 /Pro W3;")
+--~ test("ヒラギノ明朝 Pro W3")
+
function resolvers.generators.tex(specification)
local tag = specification
- if trace_verbose then
- logs.report("fileio","scanning path %s",specification)
+ if trace_locating then
+ logs.report("fileio","scanning path '%s'",specification)
end
instance.files[tag] = { }
local files = instance.files[tag]
@@ -796,7 +861,8 @@ function resolvers.generators.tex(specification)
full = spec
end
for name in directory(full) do
- if not weird:match(name) then
+ if not lpegmatch(weird,name) then
+ -- if lpegmatch(l_normal,name) then
local mode = attributes(full..name,'mode')
if mode == 'file' then
if path then
@@ -829,7 +895,7 @@ function resolvers.generators.tex(specification)
end
end
action()
- if trace_verbose then
+ if trace_locating then
logs.report("fileio","%s files found on %s directories with %s uppercase remappings",n,m,r)
end
end
@@ -844,11 +910,48 @@ end
-- we join them and split them after the expansion has taken place. This
-- is more convenient.
+--~ local checkedsplit = string.checkedsplit
+
+local cache = { }
+
+local splitter = lpeg.Ct(lpeg.splitat(lpeg.S(os.type == "windows" and ";" or ":;")))
+
+local function split_kpse_path(str) -- beware, this can be either a path or a {specification}
+ local found = cache[str]
+ if not found then
+ if str == "" then
+ found = { }
+ else
+ str = gsub(str,"\\","/")
+--~ local split = (find(str,";") and checkedsplit(str,";")) or checkedsplit(str,io.pathseparator)
+local split = lpegmatch(splitter,str)
+ found = { }
+ for i=1,#split do
+ local s = split[i]
+ if not find(s,"^{*unset}*") then
+ found[#found+1] = s
+ end
+ end
+ if trace_expansions then
+ logs.report("fileio","splitting path specification '%s'",str)
+ for k=1,#found do
+ logs.report("fileio","% 4i: %s",k,found[k])
+ end
+ end
+ cache[str] = found
+ end
+ end
+ return found
+end
+
+resolvers.split_kpse_path = split_kpse_path
+
function resolvers.splitconfig()
- for i,c in ipairs(instance) do
- for k,v in pairs(c) do
+ for i=1,#instance do
+ local c = instance[i]
+ for k,v in next, c do
if type(v) == 'string' then
- local t = file.split_path(v)
+ local t = split_kpse_path(v)
if #t > 1 then
c[k] = t
end
@@ -858,21 +961,25 @@ function resolvers.splitconfig()
end
function resolvers.joinconfig()
- for i,c in ipairs(instance.order) do
- for k,v in pairs(c) do -- ipairs?
+ local order = instance.order
+ for i=1,#order do
+ local c = order[i]
+ for k,v in next, c do -- indexed?
if type(v) == 'table' then
c[k] = file.join_path(v)
end
end
end
end
+
function resolvers.split_path(str)
if type(str) == 'table' then
return str
else
- return file.split_path(str)
+ return split_kpse_path(str)
end
end
+
function resolvers.join_path(str)
if type(str) == 'table' then
return file.join_path(str)
@@ -884,8 +991,9 @@ end
function resolvers.splitexpansions()
local ie = instance.expansions
for k,v in next, ie do
- local t, h = { }, { }
- for _,vv in ipairs(file.split_path(v)) do
+ local t, h, p = { }, { }, split_kpse_path(v)
+ for kk=1,#p do
+ local vv = p[kk]
if vv ~= "" and not h[vv] then
t[#t+1] = vv
h[vv] = true
@@ -932,11 +1040,15 @@ function resolvers.serialize(files)
end
t[#t+1] = "return {"
if instance.sortdata then
- for _, k in pairs(sortedkeys(files)) do -- ipairs
+ local sortedfiles = sortedkeys(files)
+ for i=1,#sortedfiles do
+ local k = sortedfiles[i]
local fk = files[k]
if type(fk) == 'table' then
t[#t+1] = "\t['" .. k .. "']={"
- for _, kk in pairs(sortedkeys(fk)) do -- ipairs
+ local sortedfk = sortedkeys(fk)
+ for j=1,#sortedfk do
+ local kk = sortedfk[j]
t[#t+1] = dump(kk,fk[kk],"\t\t")
end
t[#t+1] = "\t},"
@@ -961,12 +1073,18 @@ function resolvers.serialize(files)
return concat(t,"\n")
end
+local data_state = { }
+
+function resolvers.data_state()
+ return data_state or { }
+end
+
function resolvers.save_data(dataname, makename) -- untested without cache overload
for cachename, files in next, instance[dataname] do
local name = (makename or file.join)(cachename,dataname)
local luaname, lucname = name .. ".lua", name .. ".luc"
- if trace_verbose then
- logs.report("fileio","preparing %s for %s",dataname,cachename)
+ if trace_locating then
+ logs.report("fileio","preparing '%s' for '%s'",dataname,cachename)
end
for k, v in next, files do
if type(v) == "table" and #v == 1 then
@@ -980,24 +1098,25 @@ function resolvers.save_data(dataname, makename) -- untested without cache overl
date = os.date("%Y-%m-%d"),
time = os.date("%H:%M:%S"),
content = files,
+ uuid = os.uuid(),
}
local ok = io.savedata(luaname,resolvers.serialize(data))
if ok then
- if trace_verbose then
- logs.report("fileio","%s saved in %s",dataname,luaname)
+ if trace_locating then
+ logs.report("fileio","'%s' saved in '%s'",dataname,luaname)
end
if utils.lua.compile(luaname,lucname,false,true) then -- no cleanup but strip
- if trace_verbose then
- logs.report("fileio","%s compiled to %s",dataname,lucname)
+ if trace_locating then
+ logs.report("fileio","'%s' compiled to '%s'",dataname,lucname)
end
else
- if trace_verbose then
- logs.report("fileio","compiling failed for %s, deleting file %s",dataname,lucname)
+ if trace_locating then
+ logs.report("fileio","compiling failed for '%s', deleting file '%s'",dataname,lucname)
end
os.remove(lucname)
end
- elseif trace_verbose then
- logs.report("fileio","unable to save %s in %s (access error)",dataname,luaname)
+ elseif trace_locating then
+ logs.report("fileio","unable to save '%s' in '%s' (access error)",dataname,luaname)
end
end
end
@@ -1009,19 +1128,20 @@ function resolvers.load_data(pathname,dataname,filename,makename) -- untested wi
if blob then
local data = blob()
if data and data.content and data.type == dataname and data.version == resolvers.cacheversion then
- if trace_verbose then
- logs.report("fileio","loading %s for %s from %s",dataname,pathname,filename)
+ data_state[#data_state+1] = data.uuid
+ if trace_locating then
+ logs.report("fileio","loading '%s' for '%s' from '%s'",dataname,pathname,filename)
end
instance[dataname][pathname] = data.content
else
- if trace_verbose then
- logs.report("fileio","skipping %s for %s from %s",dataname,pathname,filename)
+ if trace_locating then
+ logs.report("fileio","skipping '%s' for '%s' from '%s'",dataname,pathname,filename)
end
instance[dataname][pathname] = { }
instance.loaderror = true
end
- elseif trace_verbose then
- logs.report("fileio","skipping %s for %s from %s",dataname,pathname,filename)
+ elseif trace_locating then
+ logs.report("fileio","skipping '%s' for '%s' from '%s'",dataname,pathname,filename)
end
end
@@ -1040,15 +1160,17 @@ function resolvers.resetconfig()
end
function resolvers.loadnewconfig()
- for _, cnf in ipairs(instance.luafiles) do
+ local luafiles = instance.luafiles
+ for i=1,#luafiles do
+ local cnf = luafiles[i]
local pathname = file.dirname(cnf)
local filename = file.join(pathname,resolvers.luaname)
local blob = loadfile(filename)
if blob then
local data = blob()
if data then
- if trace_verbose then
- logs.report("fileio","loading configuration file %s",filename)
+ if trace_locating then
+ logs.report("fileio","loading configuration file '%s'",filename)
end
if true then
-- flatten to variable.progname
@@ -1069,14 +1191,14 @@ function resolvers.loadnewconfig()
instance['setup'][pathname] = data
end
else
- if trace_verbose then
- logs.report("fileio","skipping configuration file %s",filename)
+ if trace_locating then
+ logs.report("fileio","skipping configuration file '%s'",filename)
end
instance['setup'][pathname] = { }
instance.loaderror = true
end
- elseif trace_verbose then
- logs.report("fileio","skipping configuration file %s",filename)
+ elseif trace_locating then
+ logs.report("fileio","skipping configuration file '%s'",filename)
end
instance.order[#instance.order+1] = instance.setup[pathname]
if instance.loaderror then break end
@@ -1085,7 +1207,9 @@ end
function resolvers.loadoldconfig()
if not instance.renewcache then
- for _, cnf in ipairs(instance.cnffiles) do
+ local cnffiles = instance.cnffiles
+ for i=1,#cnffiles do
+ local cnf = cnffiles[i]
local dname = file.dirname(cnf)
resolvers.load_data(dname,'configuration')
instance.order[#instance.order+1] = instance.configuration[dname]
@@ -1275,7 +1399,7 @@ end
function resolvers.expanded_path_list(str)
if not str then
- return ep or { }
+ return ep or { } -- ep ?
elseif instance.savelists then
-- engine+progname hash
str = gsub(str,"%$","")
@@ -1293,9 +1417,9 @@ end
function resolvers.expanded_path_list_from_var(str) -- brrr
local tmp = resolvers.var_of_format_or_suffix(gsub(str,"%$",""))
if tmp ~= "" then
- return resolvers.expanded_path_list(str)
- else
return resolvers.expanded_path_list(tmp)
+ else
+ return resolvers.expanded_path_list(str)
end
end
@@ -1342,9 +1466,9 @@ function resolvers.isreadable.file(name)
local readable = lfs.isfile(name) -- brrr
if trace_detail then
if readable then
- logs.report("fileio","+ readable: %s",name)
+ logs.report("fileio","file '%s' is readable",name)
else
- logs.report("fileio","- readable: %s", name)
+ logs.report("fileio","file '%s' is not readable", name)
end
end
return readable
@@ -1360,7 +1484,7 @@ local function collect_files(names)
for k=1,#names do
local fname = names[k]
if trace_detail then
- logs.report("fileio","? blobpath asked: %s",fname)
+ logs.report("fileio","checking name '%s'",fname)
end
local bname = file.basename(fname)
local dname = file.dirname(fname)
@@ -1376,7 +1500,7 @@ local function collect_files(names)
local files = blobpath and instance.files[blobpath]
if files then
if trace_detail then
- logs.report("fileio",'? blobpath do: %s (%s)',blobpath,bname)
+ logs.report("fileio","deep checking '%s' (%s)",blobpath,bname)
end
local blobfile = files[bname]
if not blobfile then
@@ -1410,7 +1534,7 @@ local function collect_files(names)
end
end
elseif trace_locating then
- logs.report("fileio",'! blobpath no: %s (%s)',blobpath,bname)
+ logs.report("fileio","no match in '%s' (%s)",blobpath,bname)
end
end
end
@@ -1460,14 +1584,13 @@ end
local function collect_instance_files(filename,collected) -- todo : plugin (scanners, checkers etc)
local result = collected or { }
local stamp = nil
- filename = file.collapse_path(filename) -- elsewhere
- filename = file.collapse_path(gsub(filename,"\\","/")) -- elsewhere
+ filename = file.collapse_path(filename)
-- speed up / beware: format problem
if instance.remember then
stamp = filename .. "--" .. instance.engine .. "--" .. instance.progname .. "--" .. instance.format
if instance.found[stamp] then
if trace_locating then
- logs.report("fileio",'! remembered: %s',filename)
+ logs.report("fileio","remembering file '%s'",filename)
end
return instance.found[stamp]
end
@@ -1475,7 +1598,7 @@ local function collect_instance_files(filename,collected) -- todo : plugin (scan
if not dangerous[instance.format or "?"] then
if resolvers.isreadable.file(filename) then
if trace_detail then
- logs.report("fileio",'= found directly: %s',filename)
+ logs.report("fileio","file '%s' found directly",filename)
end
instance.found[stamp] = { filename }
return { filename }
@@ -1483,13 +1606,13 @@ local function collect_instance_files(filename,collected) -- todo : plugin (scan
end
if find(filename,'%*') then
if trace_locating then
- logs.report("fileio",'! wildcard: %s', filename)
+ logs.report("fileio","checking wildcard '%s'", filename)
end
result = resolvers.find_wildcard_files(filename)
elseif file.is_qualified_path(filename) then
if resolvers.isreadable.file(filename) then
if trace_locating then
- logs.report("fileio",'! qualified: %s', filename)
+ logs.report("fileio","qualified name '%s'", filename)
end
result = { filename }
else
@@ -1499,7 +1622,7 @@ local function collect_instance_files(filename,collected) -- todo : plugin (scan
forcedname = filename .. ".tex"
if resolvers.isreadable.file(forcedname) then
if trace_locating then
- logs.report("fileio",'! no suffix, forcing standard filetype: tex')
+ logs.report("fileio","no suffix, forcing standard filetype 'tex'")
end
result, ok = { forcedname }, true
end
@@ -1509,7 +1632,7 @@ local function collect_instance_files(filename,collected) -- todo : plugin (scan
forcedname = filename .. "." .. s
if resolvers.isreadable.file(forcedname) then
if trace_locating then
- logs.report("fileio",'! no suffix, forcing format filetype: %s', s)
+ logs.report("fileio","no suffix, forcing format filetype '%s'", s)
end
result, ok = { forcedname }, true
break
@@ -1521,7 +1644,7 @@ local function collect_instance_files(filename,collected) -- todo : plugin (scan
-- try to find in tree (no suffix manipulation), here we search for the
-- matching last part of the name
local basename = file.basename(filename)
- local pattern = (filename .. "$"):gsub("([%.%-])","%%%1")
+ local pattern = gsub(filename .. "$","([%.%-])","%%%1")
local savedformat = instance.format
local format = savedformat or ""
if format == "" then
@@ -1531,19 +1654,21 @@ local function collect_instance_files(filename,collected) -- todo : plugin (scan
instance.format = "othertextfiles" -- kind of everything, maybe texinput is better
end
--
- local resolved = collect_instance_files(basename)
- if #result == 0 then
- local lowered = lower(basename)
- if filename ~= lowered then
- resolved = collect_instance_files(lowered)
+ if basename ~= filename then
+ local resolved = collect_instance_files(basename)
+ if #result == 0 then
+ local lowered = lower(basename)
+ if filename ~= lowered then
+ resolved = collect_instance_files(lowered)
+ end
end
- end
- resolvers.format = savedformat
- --
- for r=1,#resolved do
- local rr = resolved[r]
- if rr:find(pattern) then
- result[#result+1], ok = rr, true
+ resolvers.format = savedformat
+ --
+ for r=1,#resolved do
+ local rr = resolved[r]
+ if find(rr,pattern) then
+ result[#result+1], ok = rr, true
+ end
end
end
-- a real wildcard:
@@ -1552,14 +1677,14 @@ local function collect_instance_files(filename,collected) -- todo : plugin (scan
-- local filelist = collect_files({basename})
-- for f=1,#filelist do
-- local ff = filelist[f][3] or ""
- -- if ff:find(pattern) then
+ -- if find(ff,pattern) then
-- result[#result+1], ok = ff, true
-- end
-- end
-- end
end
if not ok and trace_locating then
- logs.report("fileio",'? qualified: %s', filename)
+ logs.report("fileio","qualified name '%s'", filename)
end
end
else
@@ -1578,12 +1703,12 @@ local function collect_instance_files(filename,collected) -- todo : plugin (scan
wantedfiles[#wantedfiles+1] = forcedname
filetype = resolvers.format_of_suffix(forcedname)
if trace_locating then
- logs.report("fileio",'! forcing filetype: %s',filetype)
+ logs.report("fileio","forcing filetype '%s'",filetype)
end
else
filetype = resolvers.format_of_suffix(filename)
if trace_locating then
- logs.report("fileio",'! using suffix based filetype: %s',filetype)
+ logs.report("fileio","using suffix based filetype '%s'",filetype)
end
end
else
@@ -1595,7 +1720,7 @@ local function collect_instance_files(filename,collected) -- todo : plugin (scan
end
filetype = instance.format
if trace_locating then
- logs.report("fileio",'! using given filetype: %s',filetype)
+ logs.report("fileio","using given filetype '%s'",filetype)
end
end
local typespec = resolvers.variable_of_format(filetype)
@@ -1603,9 +1728,7 @@ local function collect_instance_files(filename,collected) -- todo : plugin (scan
if not pathlist or #pathlist == 0 then
-- no pathlist, access check only / todo == wildcard
if trace_detail then
- logs.report("fileio",'? filename: %s',filename)
- logs.report("fileio",'? filetype: %s',filetype or '?')
- logs.report("fileio",'? wanted files: %s',concat(wantedfiles," | "))
+ logs.report("fileio","checking filename '%s', filetype '%s', wanted files '%s'",filename, filetype or '?',concat(wantedfiles," | "))
end
for k=1,#wantedfiles do
local fname = wantedfiles[k]
@@ -1626,36 +1749,59 @@ local function collect_instance_files(filename,collected) -- todo : plugin (scan
else
-- list search
local filelist = collect_files(wantedfiles)
- local doscan, recurse
+ local dirlist = { }
+ if filelist then
+ for i=1,#filelist do
+ dirlist[i] = file.dirname(filelist[i][2]) .. "/"
+ end
+ end
if trace_detail then
- logs.report("fileio",'? filename: %s',filename)
+ logs.report("fileio","checking filename '%s'",filename)
end
-- a bit messy ... esp the doscan setting here
+ local doscan
for k=1,#pathlist do
local path = pathlist[k]
if find(path,"^!!") then doscan = false else doscan = true end
- if find(path,"//$") then recurse = true else recurse = false end
local pathname = gsub(path,"^!+", '')
done = false
-- using file list
- if filelist and not (done and not instance.allresults) and recurse then
- -- compare list entries with permitted pattern
- pathname = gsub(pathname,"([%-%.])","%%%1") -- this also influences
- pathname = gsub(pathname,"/+$", '/.*') -- later usage of pathname
- pathname = gsub(pathname,"//", '/.-/') -- not ok for /// but harmless
- local expr = "^" .. pathname
+ if filelist then
+ local expression
+ -- compare list entries with permitted pattern -- /xx /xx//
+ if not find(pathname,"/$") then
+ expression = pathname .. "/"
+ else
+ expression = pathname
+ end
+ expression = gsub(expression,"([%-%.])","%%%1") -- this also influences
+ expression = gsub(expression,"//+$", '/.*') -- later usage of pathname
+ expression = gsub(expression,"//", '/.-/') -- not ok for /// but harmless
+ expression = "^" .. expression .. "$"
+ if trace_detail then
+ logs.report("fileio","using pattern '%s' for path '%s'",expression,pathname)
+ end
for k=1,#filelist do
local fl = filelist[k]
local f = fl[2]
- if find(f,expr) then
- if trace_detail then
- logs.report("fileio",'= found in hash: %s',f)
- end
+ local d = dirlist[k]
+ if find(d,expression) then
--- todo, test for readable
result[#result+1] = fl[3]
resolvers.register_in_trees(f) -- for tracing used files
done = true
- if not instance.allresults then break end
+ if instance.allresults then
+ if trace_detail then
+ logs.report("fileio","match in hash for file '%s' on path '%s', continue scanning",f,d)
+ end
+ else
+ if trace_detail then
+ logs.report("fileio","match in hash for file '%s' on path '%s', quit scanning",f,d)
+ end
+ break
+ end
+ elseif trace_detail then
+ logs.report("fileio","no match in hash for file '%s' on path '%s'",f,d)
end
end
end
@@ -1671,7 +1817,7 @@ local function collect_instance_files(filename,collected) -- todo : plugin (scan
local fname = file.join(ppname,w)
if resolvers.isreadable.file(fname) then
if trace_detail then
- logs.report("fileio",'= found by scanning: %s',fname)
+ logs.report("fileio","found '%s' by scanning",fname)
end
result[#result+1] = fname
done = true
@@ -1734,7 +1880,7 @@ function resolvers.find_given_files(filename)
local hashes = instance.hashes
for k=1,#hashes do
local hash = hashes[k]
- local files = instance.files[hash.tag]
+ local files = instance.files[hash.tag] or { }
local blist = files[bname]
if not blist then
local rname = "remap:"..bname
@@ -1844,9 +1990,9 @@ function resolvers.load(option)
statistics.starttiming(instance)
resolvers.resetconfig()
resolvers.identify_cnf()
- resolvers.load_lua()
+ resolvers.load_lua() -- will become the new method
resolvers.expand_variables()
- resolvers.load_cnf()
+ resolvers.load_cnf() -- will be skipped when we have a lua file
resolvers.expand_variables()
if option ~= "nofiles" then
resolvers.load_hash()
@@ -1858,22 +2004,23 @@ end
function resolvers.for_files(command, files, filetype, mustexist)
if files and #files > 0 then
local function report(str)
- if trace_verbose then
+ if trace_locating then
logs.report("fileio",str) -- has already verbose
else
print(str)
end
end
- if trace_verbose then
- report('')
+ if trace_locating then
+ report('') -- ?
end
- for _, file in ipairs(files) do
+ for f=1,#files do
+ local file = files[f]
local result = command(file,filetype,mustexist)
if type(result) == 'string' then
report(result)
else
- for _,v in ipairs(result) do
- report(v)
+ for i=1,#result do
+ report(result[i]) -- could be unpack
end
end
end
@@ -1920,18 +2067,19 @@ end
function table.sequenced(t,sep) -- temp here
local s = { }
- for k, v in pairs(t) do -- pairs?
- s[#s+1] = k .. "=" .. v
+ for k, v in next, t do -- indexed?
+ s[#s+1] = k .. "=" .. tostring(v)
end
return concat(s, sep or " | ")
end
function resolvers.methodhandler(what, filename, filetype) -- ...
+ filename = file.collapse_path(filename)
local specification = (type(filename) == "string" and resolvers.splitmethod(filename)) or filename -- no or { }, let it bomb
local scheme = specification.scheme
if resolvers[what][scheme] then
if trace_locating then
- logs.report("fileio",'= handler: %s -> %s -> %s',specification.original,what,table.sequenced(specification))
+ logs.report("fileio","handler '%s' -> '%s' -> '%s'",specification.original,what,table.sequenced(specification))
end
return resolvers[what][scheme](filename,filetype) -- todo: specification
else
@@ -1951,8 +2099,9 @@ function resolvers.clean_path(str)
end
function resolvers.do_with_path(name,func)
- for _, v in pairs(resolvers.expanded_path_list(name)) do -- pairs?
- func("^"..resolvers.clean_path(v))
+ local pathlist = resolvers.expanded_path_list(name)
+ for i=1,#pathlist do
+ func("^"..resolvers.clean_path(pathlist[i]))
end
end
@@ -1961,7 +2110,9 @@ function resolvers.do_with_var(name,func)
end
function resolvers.with_files(pattern,handle)
- for _, hash in ipairs(instance.hashes) do
+ local hashes = instance.hashes
+ for i=1,#hashes do
+ local hash = hashes[i]
local blobpath = hash.tag
local blobtype = hash.type
if blobpath then
@@ -1976,7 +2127,7 @@ function resolvers.with_files(pattern,handle)
if type(v) == "string" then
handle(blobtype,blobpath,v,k)
else
- for _,vv in pairs(v) do -- ipairs?
+ for _,vv in next, v do -- indexed
handle(blobtype,blobpath,vv,k)
end
end
@@ -1988,7 +2139,7 @@ function resolvers.with_files(pattern,handle)
end
function resolvers.locate_format(name)
- local barename, fmtname = name:gsub("%.%a+$",""), ""
+ local barename, fmtname = gsub(name,"%.%a+$",""), ""
if resolvers.usecache then
local path = file.join(caches.setpath("formats")) -- maybe platform
fmtname = file.join(path,barename..".fmt") or ""
diff --git a/Master/texmf-dist/tex/context/base/data-sch.lua b/Master/texmf-dist/tex/context/base/data-sch.lua
new file mode 100644
index 00000000000..e68b6cd01b9
--- /dev/null
+++ b/Master/texmf-dist/tex/context/base/data-sch.lua
@@ -0,0 +1,142 @@
+if not modules then modules = { } end modules ['data-sch'] = {
+ version = 1.001,
+ comment = "companion to luat-lib.mkiv",
+ author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
+ copyright = "PRAGMA ADE / ConTeXt Development Team",
+ license = "see context related readme files"
+}
+
+local http = require("socket.http")
+local ltn12 = require("ltn12")
+
+local gsub, concat, format = string.gsub, table.concat, string.format
+
+local trace_schemes = false trackers.register("resolvers.schemes",function(v) trace_schemes = v end)
+
+schemes = schemes or { }
+
+schemes.cached = { }
+schemes.cachepath = caches.definepath("schemes")
+schemes.threshold = 24 * 60 * 60
+
+directives.register("schemes.threshold", function(v) schemes.threshold = tonumber(v) or schemes.threshold end)
+
+local cached, loaded, reused = schemes.cached, { }, { }
+
+local finders, openers, loaders = resolvers.finders, resolvers.openers, resolvers.loaders
+
+function schemes.curl(name,cachename)
+ local command = "curl --silent --create-dirs --output " .. cachename .. " " .. name -- no protocol .. "://"
+ os.spawn(command)
+end
+
+function schemes.fetch(protocol,name,handler)
+ local cachename = schemes.cachepath() .. "/" .. gsub(name,"[^%a%d%.]+","-")
+ cachename = gsub(cachename,"[\\]", "/") -- cleanup
+ if not cached[name] then
+ statistics.starttiming(schemes)
+ if not io.exists(cachename) or (os.difftime(os.time(),lfs.attributes(cachename).modification) > schemes.threshold) then
+ cached[name] = cachename
+ if handler then
+ if trace_schemes then
+ logs.report("schemes","fetching '%s', protocol '%s', method 'built-in'",name,protocol)
+ end
+ io.flush()
+ handler(protocol,name,cachename)
+ else
+ if trace_schemes then
+ logs.report("schemes","fetching '%s', protocol '%s', method 'curl'",name,protocol)
+ end
+ io.flush()
+ schemes.curl(name,cachename)
+ end
+ end
+ if io.exists(cachename) then
+ cached[name] = cachename
+ if trace_schemes then
+ logs.report("schemes","using cached '%s', protocol '%s', cachename '%s'",name,protocol,cachename)
+ end
+ else
+ cached[name] = ""
+ if trace_schemes then
+ logs.report("schemes","using missing '%s', protocol '%s'",name,protocol)
+ end
+ end
+ loaded[protocol] = loaded[protocol] + 1
+ statistics.stoptiming(schemes)
+ else
+ if trace_schemes then
+ logs.report("schemes","reusing '%s', protocol '%s'",name,protocol)
+ end
+ reused[protocol] = reused[protocol] + 1
+ end
+ return cached[name]
+end
+
+function finders.schemes(protocol,filename,handler)
+ local foundname = schemes.fetch(protocol,filename,handler)
+ return finders.generic(protocol,foundname,filetype)
+end
+
+function openers.schemes(protocol,filename)
+ return openers.generic(protocol,filename)
+end
+
+function loaders.schemes(protocol,filename)
+ return loaders.generic(protocol,filename)
+end
+
+-- could be metatable
+
+function schemes.install(protocol,handler)
+ loaded [protocol] = 0
+ reused [protocol] = 0
+ finders[protocol] = function (filename,filetype) return finders.schemes(protocol,filename,handler) end
+ openers[protocol] = function (filename) return openers.schemes(protocol,filename) end
+ loaders[protocol] = function (filename) return loaders.schemes(protocol,filename) end
+end
+
+local function http_handler(protocol,name,cachename)
+ local tempname = cachename .. ".tmp"
+ local f = io.open(tempname,"wb")
+ local status, message = http.request {
+ url = name,
+ sink = ltn12.sink.file(f)
+ }
+ if not status then
+ os.remove(tempname)
+ else
+ os.remove(cachename)
+ os.rename(tempname,cachename)
+ end
+end
+
+schemes.install('http',http_handler)
+schemes.install('https')
+schemes.install('ftp')
+
+statistics.register("scheme handling time", function()
+ local l, r = { }, { }
+ for k, v in table.sortedhash(loaded) do
+ if v > 0 then
+ l[#l+1] = k .. ":" .. v
+ end
+ end
+ for k, v in table.sortedhash(reused) do
+ if v > 0 then
+ r[#r+1] = k .. ":" .. v
+ end
+ end
+ local n = #l + #r
+ if n > 0 then
+ l = (#l > 0 and concat(l)) or "none"
+ r = (#r > 0 and concat(r)) or "none"
+ return format("%s seconds, %s processed, threshold %s seconds, loaded: %s, reused: %s",
+ statistics.elapsedtime(schemes), n, schemes.threshold, l, r)
+ else
+ return nil
+ end
+end)
+
+--~ trace_schemes = true
+--~ print(schemes.fetch("http","http://www.pragma-ade.com/show-man.pdf",http_handler))
diff --git a/Master/texmf-dist/tex/context/base/data-tex.lua b/Master/texmf-dist/tex/context/base/data-tex.lua
index 16b6b125f4a..c9fa3625a66 100644
--- a/Master/texmf-dist/tex/context/base/data-tex.lua
+++ b/Master/texmf-dist/tex/context/base/data-tex.lua
@@ -1,6 +1,6 @@
if not modules then modules = { } end modules ['data-tex'] = {
version = 1.001,
- comment = "companion to luat-lib.tex",
+ comment = "companion to luat-lib.mkiv",
author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
copyright = "PRAGMA ADE / ConTeXt Development Team",
license = "see context related readme files"
@@ -9,6 +9,7 @@ if not modules then modules = { } end modules ['data-tex'] = {
-- special functions that deal with io
local format, lower = string.format, string.lower
+local unpack = unpack or table.unpack
local trace_locating = false trackers.register("resolvers.locating", function(v) trace_locating = v end)
@@ -21,18 +22,19 @@ function finders.generic(tag,filename,filetype)
local foundname = resolvers.find_file(filename,filetype)
if foundname and foundname ~= "" then
if trace_locating then
- logs.report("fileio",'+ finder: %s, file: %s', tag,filename)
+ logs.report("fileio","%s finder: file '%s' found",tag,filename)
end
return foundname
else
if trace_locating then
- logs.report("fileio",'- finder: %s, file: %s', tag,filename)
+ logs.report("fileio","%s finder: unknown file '%s'",tag,filename)
end
return unpack(finders.notfound)
end
end
---~ local getlines = lpeg.Ct(lpeg.linebyline)
+--~ local lpegmatch = lpeg.match
+--~ local getlines = lpeg.Ct(lpeg.patterns.textline)
local input_translator, utf_translator, user_translator = nil, nil, nil
@@ -47,7 +49,7 @@ function openers.text_opener(filename,file_handle,tag)
local t = { }
if u > 0 then
if trace_locating then
- logs.report("fileio",'+ opener: %s (%s), file: %s',tag,unicode.utfname[u],filename)
+ logs.report("fileio","%s opener, file '%s' opened using method '%s'",tag,filename,unicode.utfname[u])
end
local l
if u > 2 then
@@ -64,7 +66,7 @@ function openers.text_opener(filename,file_handle,tag)
noflines = #l,
close = function()
if trace_locating then
- logs.report("fileio",'= closer: %s (%s), file: %s',tag,unicode.utfname[u],filename)
+ logs.report("fileio","%s closer, file '%s' closed",tag,filename)
end
logs.show_close(filename)
t = nil
@@ -99,10 +101,10 @@ function openers.text_opener(filename,file_handle,tag)
}
else
if trace_locating then
- logs.report("fileio",'+ opener: %s, file: %s',tag,filename)
+ logs.report("fileio","%s opener, file '%s' opened",tag,filename)
end
-- todo: file;name -> freeze / eerste regel scannen -> freeze
- --~ local data = getlines:match(file_handle:read("*a"))
+ --~ local data = lpegmatch(getlines,file_handle:read("*a"))
--~ local n = 0
t = {
reader = function() -- self
@@ -129,12 +131,12 @@ function openers.text_opener(filename,file_handle,tag)
end,
close = function()
if trace_locating then
- logs.report("fileio",'= closer: %s, file: %s',tag,filename)
+ logs.report("fileio","%s closer, file '%s' closed",tag,filename)
end
logs.show_close(filename)
file_handle:close()
t = nil
-collectgarbage("step")
+ collectgarbage("step") -- saves some memory
end,
handle = function()
return file_handle
@@ -152,12 +154,15 @@ function openers.generic(tag,filename)
if filename and filename ~= "" then
local f = io.open(filename,"r")
if f then
- logs.show_open(filename)
+ logs.show_open(filename) -- todo
+ if trace_locating then
+ logs.report("fileio","%s opener, file '%s' opened",tag,filename)
+ end
return openers.text_opener(filename,f,tag)
end
end
if trace_locating then
- logs.report("fileio",'- opener: %s, file: %s',tag,filename)
+ logs.report("fileio","%s opener, file '%s' not found",tag,filename)
end
return unpack(openers.notfound)
end
@@ -168,7 +173,7 @@ function loaders.generic(tag,filename)
if f then
logs.show_load(filename)
if trace_locating then
- logs.report("fileio",'+ loader: %s, file: %s',tag,filename)
+ logs.report("fileio","%s loader, file '%s' loaded",tag,filename)
end
local s = f:read("*a")
if garbagecollector and garbagecollector.check then garbagecollector.check(#s) end
@@ -179,7 +184,7 @@ function loaders.generic(tag,filename)
end
end
if trace_locating then
- logs.report("fileio",'- loader: %s, file: %s',tag,filename)
+ logs.report("fileio","%s loader, file '%s' not found",tag,filename)
end
return unpack(loaders.notfound)
end
@@ -197,11 +202,11 @@ function loaders.tex(filename)
end
function resolvers.findtexfile(filename, filetype)
- return resolvers.methodhandler('finders',file.collapse_path(filename), filetype)
+ return resolvers.methodhandler('finders',filename, filetype)
end
function resolvers.opentexfile(filename)
- return resolvers.methodhandler('openers',file.collapse_path(filename))
+ return resolvers.methodhandler('openers',filename)
end
function resolvers.openfile(filename)
diff --git a/Master/texmf-dist/tex/context/base/data-tmf.lua b/Master/texmf-dist/tex/context/base/data-tmf.lua
index 302841a65a6..7421eacfc6e 100644
--- a/Master/texmf-dist/tex/context/base/data-tmf.lua
+++ b/Master/texmf-dist/tex/context/base/data-tmf.lua
@@ -1,24 +1,27 @@
if not modules then modules = { } end modules ['data-tmf'] = {
version = 1.001,
- comment = "companion to luat-lib.tex",
+ comment = "companion to luat-lib.mkiv",
author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
copyright = "PRAGMA ADE / ConTeXt Development Team",
license = "see context related readme files"
}
+local find, gsub, match = string.find, string.gsub, string.match
+local getenv, setenv = os.getenv, os.setenv
+
-- loads *.tmf files in minimal tree roots (to be optimized and documented)
function resolvers.check_environment(tree)
logs.simpleline()
- os.setenv('TMP', os.getenv('TMP') or os.getenv('TEMP') or os.getenv('TMPDIR') or os.getenv('HOME'))
- os.setenv('TEXOS', os.getenv('TEXOS') or ("texmf-" .. os.currentplatform()))
- os.setenv('TEXPATH', (tree or "tex"):gsub("\/+$",''))
- os.setenv('TEXMFOS', os.getenv('TEXPATH') .. "/" .. os.getenv('TEXOS'))
+ setenv('TMP', getenv('TMP') or getenv('TEMP') or getenv('TMPDIR') or getenv('HOME'))
+ setenv('TEXOS', getenv('TEXOS') or ("texmf-" .. os.platform))
+ setenv('TEXPATH', gsub(tree or "tex","\/+$",''))
+ setenv('TEXMFOS', getenv('TEXPATH') .. "/" .. getenv('TEXOS'))
logs.simpleline()
- logs.simple("preset : TEXPATH => %s", os.getenv('TEXPATH'))
- logs.simple("preset : TEXOS => %s", os.getenv('TEXOS'))
- logs.simple("preset : TEXMFOS => %s", os.getenv('TEXMFOS'))
- logs.simple("preset : TMP => %s", os.getenv('TMP'))
+ logs.simple("preset : TEXPATH => %s", getenv('TEXPATH'))
+ logs.simple("preset : TEXOS => %s", getenv('TEXOS'))
+ logs.simple("preset : TEXMFOS => %s", getenv('TEXMFOS'))
+ logs.simple("preset : TMP => %s", getenv('TMP'))
logs.simple('')
end
@@ -26,27 +29,27 @@ function resolvers.load_environment(name) -- todo: key=value as well as lua
local f = io.open(name)
if f then
for line in f:lines() do
- if line:find("^[%%%#]") then
+ if find(line,"^[%%%#]") then
-- skip comment
else
- local key, how, value = line:match("^(.-)%s*([<=>%?]+)%s*(.*)%s*$")
+ local key, how, value = match(line,"^(.-)%s*([<=>%?]+)%s*(.*)%s*$")
if how then
- value = value:gsub("%%(.-)%%", function(v) return os.getenv(v) or "" end)
+ value = gsub(value,"%%(.-)%%", function(v) return getenv(v) or "" end)
if how == "=" or how == "<<" then
- os.setenv(key,value)
+ setenv(key,value)
elseif how == "?" or how == "??" then
- os.setenv(key,os.getenv(key) or value)
+ setenv(key,getenv(key) or value)
elseif how == "<" or how == "+=" then
- if os.getenv(key) then
- os.setenv(key,os.getenv(key) .. io.fileseparator .. value)
+ if getenv(key) then
+ setenv(key,getenv(key) .. io.fileseparator .. value)
else
- os.setenv(key,value)
+ setenv(key,value)
end
elseif how == ">" or how == "=+" then
- if os.getenv(key) then
- os.setenv(key,value .. io.pathseparator .. os.getenv(key))
+ if getenv(key) then
+ setenv(key,value .. io.pathseparator .. getenv(key))
else
- os.setenv(key,value)
+ setenv(key,value)
end
end
end
diff --git a/Master/texmf-dist/tex/context/base/data-tmp.lua b/Master/texmf-dist/tex/context/base/data-tmp.lua
index 72875dcb714..25f5b975c79 100644
--- a/Master/texmf-dist/tex/context/base/data-tmp.lua
+++ b/Master/texmf-dist/tex/context/base/data-tmp.lua
@@ -1,6 +1,6 @@
if not modules then modules = { } end modules ['data-tmp'] = {
version = 1.001,
- comment = "companion to luat-lib.tex",
+ comment = "companion to luat-lib.mkiv",
author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
copyright = "PRAGMA ADE / ConTeXt Development Team",
license = "see context related readme files"
@@ -24,7 +24,7 @@ luatools with a recache feature.</p>
local format, lower, gsub = string.format, string.lower, string.gsub
-local trace_cache = false trackers.register("resolvers.cache", function(v) trace_cache = v end)
+local trace_cache = false trackers.register("resolvers.cache", function(v) trace_cache = v end) -- not used yet
caches = caches or { }
@@ -111,7 +111,8 @@ function caches.setpath(...)
caches.path = '.'
end
caches.path = resolvers.clean_path(caches.path)
- if not table.is_empty({...}) then
+ local dirs = { ... }
+ if #dirs > 0 then
local pth = dir.mkdirs(caches.path,...)
return pth
end
@@ -157,6 +158,7 @@ function caches.savedata(filepath,filename,data,raw)
if raw then
reduce, simplify = false, false
end
+ data.cache_uuid = os.uuid()
if caches.direct then
file.savedata(tmaname, table.serialize(data,'return',false,true,false)) -- no hex
else
diff --git a/Master/texmf-dist/tex/context/base/data-tre.lua b/Master/texmf-dist/tex/context/base/data-tre.lua
index 9cac73b8ec7..d5ca258e47b 100644
--- a/Master/texmf-dist/tex/context/base/data-tre.lua
+++ b/Master/texmf-dist/tex/context/base/data-tre.lua
@@ -1,6 +1,6 @@
if not modules then modules = { } end modules ['data-tre'] = {
version = 1.001,
- comment = "companion to luat-lib.tex",
+ comment = "companion to luat-lib.mkiv",
author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
copyright = "PRAGMA ADE / ConTeXt Development Team",
license = "see context related readme files"
@@ -8,6 +8,9 @@ if not modules then modules = { } end modules ['data-tre'] = {
-- \input tree://oeps1/**/oeps.tex
+local find, gsub = string.find, string.gsub
+local unpack = unpack or table.unpack
+
local finders, openers, loaders = resolvers.finders, resolvers.openers, resolvers.loaders
local done, found = { }, { }
@@ -25,9 +28,10 @@ function finders.tree(specification,filetype)
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
+ local pattern = "/" .. gsub(name,"([%.%-%+])", "%%%1") .. "$"
+ for k=1,#hash do
+ local v = hash[k]
+ if find(v,pattern) then
found[specification] = v
return v
end
diff --git a/Master/texmf-dist/tex/context/base/data-use.lua b/Master/texmf-dist/tex/context/base/data-use.lua
index 609ffd88f90..5ecd7805f41 100644
--- a/Master/texmf-dist/tex/context/base/data-use.lua
+++ b/Master/texmf-dist/tex/context/base/data-use.lua
@@ -1,15 +1,14 @@
if not modules then modules = { } end modules ['data-use'] = {
version = 1.001,
- comment = "companion to luat-lib.tex",
+ comment = "companion to luat-lib.mkiv",
author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
copyright = "PRAGMA ADE / ConTeXt Development Team",
license = "see context related readme files"
}
-local format, lower, gsub = string.format, string.lower, string.gsub
+local format, lower, gsub, find = string.format, string.lower, string.gsub, string.find
-local trace_verbose = false trackers.register("resolvers.verbose", function(v) trace_verbose = v end)
-local trace_locating = false trackers.register("resolvers.locating", function(v) trace_locating = v trackers.enable("resolvers.verbose") end)
+local trace_locating = false trackers.register("resolvers.locating", function(v) trace_locating = v end)
-- since we want to use the cache instead of the tree, we will now
-- reimplement the saver.
@@ -53,19 +52,20 @@ resolvers.automounted = resolvers.automounted or { }
function resolvers.automount(usecache)
local mountpaths = resolvers.clean_path_list(resolvers.expansion('TEXMFMOUNT'))
- if table.is_empty(mountpaths) and usecache then
+ if (not mountpaths or #mountpaths == 0) and usecache then
mountpaths = { caches.setpath("mount") }
end
- if not table.is_empty(mountpaths) then
+ if mountpaths and #mountpaths > 0 then
statistics.starttiming(resolvers.instance)
- for k, root in pairs(mountpaths) do
+ for k=1,#mountpaths do
+ local root = mountpaths[k]
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
+ if find(line,"^[%%#%-]") then -- or %W
-- skip
- elseif line:find("^zip://") then
+ elseif find(line,"^zip://") then
if trace_locating then
logs.report("fileio","mounting %s",line)
end
@@ -110,11 +110,13 @@ function statistics.check_fmt_status(texname)
local luv = dofile(luvname)
if luv and luv.sourcefile then
local sourcehash = md5.hex(io.loaddata(resolvers.find_file(luv.sourcefile)) or "unknown")
- if luv.enginebanner and luv.enginebanner ~= enginebanner then
- return "engine mismatch"
+ local luvbanner = luv.enginebanner or "?"
+ if luvbanner ~= enginebanner then
+ return string.format("engine mismatch (luv:%s <> bin:%s)",luvbanner,enginebanner)
end
- if luv.sourcehash and luv.sourcehash ~= sourcehash then
- return "source mismatch"
+ local luvhash = luv.sourcehash or "?"
+ if luvhash ~= sourcehash then
+ return string.format("source mismatch (luv:%s <> bin:%s)",luvhash,sourcehash)
end
else
return "invalid status file"
diff --git a/Master/texmf-dist/tex/context/base/data-zip.lua b/Master/texmf-dist/tex/context/base/data-zip.lua
index dcb6b170a33..aa3740a83d1 100644
--- a/Master/texmf-dist/tex/context/base/data-zip.lua
+++ b/Master/texmf-dist/tex/context/base/data-zip.lua
@@ -1,17 +1,21 @@
if not modules then modules = { } end modules ['data-zip'] = {
version = 1.001,
- comment = "companion to luat-lib.tex",
+ comment = "companion to luat-lib.mkiv",
author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
copyright = "PRAGMA ADE / ConTeXt Development Team",
license = "see context related readme files"
}
-local format, find = string.format, string.find
+local format, find, match = string.format, string.find, string.match
+local unpack = unpack or table.unpack
-local trace_locating, trace_verbose = false, false
+local trace_locating = false trackers.register("resolvers.locating", function(v) trace_locating = v end)
-trackers.register("resolvers.verbose", function(v) trace_verbose = v end)
-trackers.register("resolvers.locating", function(v) trace_locating = v trace_verbose = v end)
+-- zip:///oeps.zip?name=bla/bla.tex
+-- zip:///oeps.zip?tree=tex/texmf-local
+-- zip:///texmf.zip?tree=/tex/texmf
+-- zip:///texmf.zip?tree=/tex/texmf-local
+-- zip:///texmf-mine.zip?tree=/tex/texmf-projects
zip = zip or { }
zip.archives = zip.archives or { }
@@ -22,9 +26,6 @@ local locators, hashers, concatinators = resolvers.locators, resolvers.hashers,
local archives = zip.archives
--- zip:///oeps.zip?name=bla/bla.tex
--- zip:///oeps.zip?tree=tex/texmf-local
-
local function validzip(str) -- todo: use url splitter
if not find(str,"^zip://") then
return "zip:///" .. str
@@ -54,26 +55,22 @@ function zip.closearchive(name)
end
end
--- zip:///texmf.zip?tree=/tex/texmf
--- zip:///texmf.zip?tree=/tex/texmf-local
--- zip:///texmf-mine.zip?tree=/tex/texmf-projects
-
function locators.zip(specification) -- where is this used? startup zips (untested)
specification = resolvers.splitmethod(specification)
local zipfile = specification.path
local zfile = zip.openarchive(name) -- tricky, could be in to be initialized tree
if trace_locating then
if zfile then
- logs.report("fileio",'! zip locator, found: %s',specification.original)
+ logs.report("fileio","zip locator, archive '%s' found",specification.original)
else
- logs.report("fileio",'? zip locator, not found: %s',specification.original)
+ logs.report("fileio","zip locator, archive '%s' not found",specification.original)
end
end
end
function hashers.zip(tag,name)
- if trace_verbose then
- logs.report("fileio","loading zip file %s as %s",name,tag)
+ if trace_locating then
+ logs.report("fileio","loading zip file '%s' as '%s'",name,tag)
end
resolvers.usezipfile(format("%s?tree=%s",tag,name))
end
@@ -98,23 +95,25 @@ function finders.zip(specification,filetype)
local zfile = zip.openarchive(specification.path)
if zfile then
if trace_locating then
- logs.report("fileio",'! zip finder, path: %s',specification.path)
+ logs.report("fileio","zip finder, archive '%s' found",specification.path)
end
local dfile = zfile:open(q.name)
if dfile then
dfile = zfile:close()
if trace_locating then
- logs.report("fileio",'+ zip finder, name: %s',q.name)
+ logs.report("fileio","zip finder, file '%s' found",q.name)
end
return specification.original
+ elseif trace_locating then
+ logs.report("fileio","zip finder, file '%s' not found",q.name)
end
elseif trace_locating then
- logs.report("fileio",'? zip finder, path %s',specification.path)
+ logs.report("fileio","zip finder, unknown archive '%s'",specification.path)
end
end
end
if trace_locating then
- logs.report("fileio",'- zip finder, name: %s',filename)
+ logs.report("fileio","zip finder, '%s' not found",filename)
end
return unpack(finders.notfound)
end
@@ -127,20 +126,25 @@ function openers.zip(specification)
local zfile = zip.openarchive(zipspecification.path)
if zfile then
if trace_locating then
- logs.report("fileio",'+ zip starter, path: %s',zipspecification.path)
+ logs.report("fileio","zip opener, archive '%s' opened",zipspecification.path)
end
local dfile = zfile:open(q.name)
if dfile then
logs.show_open(specification)
+ if trace_locating then
+ logs.report("fileio","zip opener, file '%s' found",q.name)
+ end
return openers.text_opener(specification,dfile,'zip')
+ elseif trace_locating then
+ logs.report("fileio","zip opener, file '%s' not found",q.name)
end
elseif trace_locating then
- logs.report("fileio",'- zip starter, path %s',zipspecification.path)
+ logs.report("fileio","zip opener, unknown archive '%s'",zipspecification.path)
end
end
end
if trace_locating then
- logs.report("fileio",'- zip opener, name: %s',filename)
+ logs.report("fileio","zip opener, '%s' not found",filename)
end
return unpack(openers.notfound)
end
@@ -153,25 +157,27 @@ function loaders.zip(specification)
local zfile = zip.openarchive(specification.path)
if zfile then
if trace_locating then
- logs.report("fileio",'+ zip starter, path: %s',specification.path)
+ logs.report("fileio","zip loader, archive '%s' opened",specification.path)
end
local dfile = zfile:open(q.name)
if dfile then
logs.show_load(filename)
if trace_locating then
- logs.report("fileio",'+ zip loader, name: %s',filename)
+ logs.report("fileio","zip loader, file '%s' loaded",filename)
end
local s = dfile:read("*all")
dfile:close()
return true, s, #s
+ elseif trace_locating then
+ logs.report("fileio","zip loader, file '%s' not found",q.name)
end
elseif trace_locating then
- logs.report("fileio",'- zip starter, path: %s',specification.path)
+ logs.report("fileio","zip loader, unknown archive '%s'",specification.path)
end
end
end
if trace_locating then
- logs.report("fileio",'- zip loader, name: %s',filename)
+ logs.report("fileio","zip loader, '%s' not found",filename)
end
return unpack(openers.notfound)
end
@@ -181,21 +187,15 @@ end
function resolvers.usezipfile(zipname)
zipname = validzip(zipname)
- if trace_locating then
- logs.report("fileio",'! zip use, file: %s',zipname)
- end
local specification = resolvers.splitmethod(zipname)
local zipfile = specification.path
if zipfile and not zip.registeredfiles[zipname] then
local tree = url.query(specification.query).tree or ""
- if trace_locating then
- logs.report("fileio",'! zip register, file: %s',zipname)
- end
local z = zip.openarchive(zipfile)
if z then
local instance = resolvers.instance
if trace_locating then
- logs.report("fileio","= zipfile, registering: %s",zipname)
+ logs.report("fileio","zip registering, registering archive '%s'",zipname)
end
statistics.starttiming(instance)
resolvers.prepend_hash('zip',zipname,zipfile)
@@ -204,10 +204,10 @@ function resolvers.usezipfile(zipname)
instance.files[zipname] = resolvers.register_zip_file(z,tree or "")
statistics.stoptiming(instance)
elseif trace_locating then
- logs.report("fileio","? zipfile, unknown: %s",zipname)
+ logs.report("fileio","zip registering, unknown archive '%s'",zipname)
end
elseif trace_locating then
- logs.report("fileio",'! zip register, no file: %s',zipname)
+ logs.report("fileio","zip registering, '%s' not found",zipname)
end
end
@@ -219,11 +219,11 @@ function resolvers.register_zip_file(z,tree)
filter = format("^%s/(.+)/(.-)$",tree)
end
if trace_locating then
- logs.report("fileio",'= zip filter: %s',filter)
+ logs.report("fileio","zip registering, using filter '%s'",filter)
end
local register, n = resolvers.register_file, 0
for i in z:files() do
- local path, name = i.filename:match(filter)
+ local path, name = match(i.filename,filter)
if path then
if name and name ~= '' then
register(files, name, path)
@@ -236,6 +236,6 @@ function resolvers.register_zip_file(z,tree)
n = n + 1
end
end
- logs.report("fileio",'= zip entries: %s',n)
+ logs.report("fileio","zip registering, %s files registered",n)
return files
end
diff --git a/Master/texmf-dist/tex/context/base/enco-def.mkii b/Master/texmf-dist/tex/context/base/enco-def.mkii
index b6d66bb6c2c..4d8e280cb70 100644
--- a/Master/texmf-dist/tex/context/base/enco-def.mkii
+++ b/Master/texmf-dist/tex/context/base/enco-def.mkii
@@ -41,6 +41,8 @@
\definecharacter textring 23
\definecharacter texttilde 126
+\definecharacter textat 64 % for mojca
+
\definecharacter textbottomcomma {\hbox{\lower.35ex\hbox{\tx,}}} % for mojca
\definecharacter dotlessi {\char"10 }
diff --git a/Master/texmf-dist/tex/context/base/enco-ffr.mkii b/Master/texmf-dist/tex/context/base/enco-ffr.mkii
index c321153e8f0..093cc6500b8 100644
--- a/Master/texmf-dist/tex/context/base/enco-ffr.mkii
+++ b/Master/texmf-dist/tex/context/base/enco-ffr.mkii
@@ -41,6 +41,10 @@
\defineactivecharacter ? {\mathortext{?}{\directdiscretionary{?}}}
\stoplanguagespecifics
+\appendtoks % maybe everywhere
+ \chardef\activecharactermode\zerocount
+\to\everyMPgraphic
+
% maybe tricky due to possible name clashes:
%
% \def\ieme {\highordinalstr{e}}
diff --git a/Master/texmf-dist/tex/context/base/enco-ini.mkii b/Master/texmf-dist/tex/context/base/enco-ini.mkii
index 1ac491e62fe..33825f94d43 100644
--- a/Master/texmf-dist/tex/context/base/enco-ini.mkii
+++ b/Master/texmf-dist/tex/context/base/enco-ini.mkii
@@ -1129,7 +1129,7 @@
\ifnum\texengine=\xetexengine
\setupencoding[\s!default=\s!default]
\else
- \useencoding[ans,il2,ec,tbo,pdf,pol,qx,t5,cyr,agr] % pol and il2 will go away, not needed in mkiv, uc removed
+ \useencoding[ans,il2,ec,tbo,pdf,pol,qx,t5,l7x,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]
\fi
diff --git a/Master/texmf-dist/tex/context/base/enco-ini.mkiv b/Master/texmf-dist/tex/context/base/enco-ini.mkiv
index 112c5596a8a..da1892faf2a 100644
--- a/Master/texmf-dist/tex/context/base/enco-ini.mkiv
+++ b/Master/texmf-dist/tex/context/base/enco-ini.mkiv
@@ -40,9 +40,9 @@
%D around, just in case they are used in styles (and in for instance
%D symb and xtag files).
-\def\startencoding [#1]{} % used in symb
+\unexpanded\def\startencoding [#1]{} % used in symb
\let\stopencoding \relax
-\def\setupencoding [#1]{}
+\unexpanded\def\setupencoding [#1]{}
\def\enablemapping [#1]{}
\def\enableencoding[#1]{}
@@ -61,20 +61,20 @@
%D \macros
%D {defineaccent, definecharacter, definecommand}
-\def\defineaccent#1 #2 #3 %
+\unexpanded\def\defineaccent#1 #2 #3 %
{\setevalue{\string#1}{\noexpand\dohandleaccent{\string#1}}%
\setvalue{\??ac\string#1\string#2}{#3}}
\def\dohandleaccent#1#2%
- {\csname\??ac\string#1\string#2\endcsname}
+ {\csname\??ac\string#1\string#2\empty\endcsname}
-\def\definecharacter#1 #2 %
+\unexpanded\def\definecharacter#1 #2 %
{\doifnumberelse{\string#2}
{\setevalue{\string#1}{\utfchar{#2}}} % or {\expandafter\chardef\csname#1\endcsname#2\relax}
- {\unexpanded\setvalue {\string#1}{#2}}}
+ {\setuvalue {\string#1}{#2}}}
-\def\definecommand#1 #2 %
- {\unexpanded\setvalue{\string#1}{#2}}
+\unexpanded\def\definecommand#1 #2 %
+ {\setuvalue{\string#1}{#2}}
%D \macros
%D {everyuppercase, EveryUppercase,
@@ -123,11 +123,13 @@
\vbox to .2ex{\box0\vss}\hidewidth
\crcr}}}
-\def\buildtextmacron {\bottomaccent{.25ex}{0}{15}{\textmacron}}
-\def\buildtextbottomdot {\bottomaccent{.25ex}{0}{5}{\textbottomdot}}
-\def\buildtextcedilla {\bottomaccent{0ex}{0}{5}{\textcedilla}}
-\def\buildtextogonek {\bottomaccent{-.1ex}{.5}{0}{\textogonek}}
-\def\buildtextbottomcomma{\bottomaccent{.15ex}{0}{5}{\tx,}}
+\unexpanded\def\buildtextmacron {\bottomaccent{.25ex}{0}{15}{\textmacron}}
+\unexpanded\def\buildtextbottomdot {\bottomaccent{.25ex}{0}{5}{\textbottomdot}}
+\unexpanded\def\buildtextcedilla {\bottomaccent{0ex}{0}{5}{\textcedilla}}
+\unexpanded\def\buildtextogonek {\bottomaccent{-.1ex}{.5}{0}{\textogonek}}
+\unexpanded\def\buildtextbottomcomma{\bottomaccent{.15ex}{0}{5}{\tx,}}
+
+\let\d\buildtextbottomdot
\unexpanded\def\topaccent#1#2#3#4#5% down right slantcorrection accent char
{\dontleavehmode
@@ -143,7 +145,7 @@
\def\buildtextgrave{\topaccent{0pt}{0}{15}{\textgrave}} % e.g.
-\def\definemathaccent#1 #2%
+\unexpanded\def\definemathaccent#1 #2%
{\setvalue{#1}{\mathaccent#2 }}
%D Math (will move):
@@ -322,37 +324,65 @@
\unexpanded\def\schwa {\hbox{\rotate[\c!rotation=180,\c!location=\v!high]{\hbox{e}}}}
\unexpanded\def\schwagrave {\buildtextgrave\schwa}
-\unexpanded\def\normalcontrolspace{\getglyph{ComputerModernMono}{\char32}}
-\unexpanded\def\textvisiblespace {\fakecontrolspace}
-\unexpanded\def\fakecontrolspace {\let\normalcontrolspace\fakedcontrolspace}
-
-% helpers
-
-\def\fakepercent
- {\mathematics{^{\scriptscriptstyle0}\kern-.25em/\kern-.2em_{\scriptscriptstyle0}}}
-
-\def\fakeperthousand
- {\mathematics{^{\scriptscriptstyle0}\kern-.25em/\kern-.2em_{\scriptscriptstyle00}}}
-
-\def\fakepermine
- {\dontleavehmode
- \bgroup
- \setbox\scratchbox\hbox
- {\mathematics{+}}%
- \hbox to \wd\scratchbox
- {\hss\mathematics{^{\scriptscriptstyle-}\kern-.4em/\kern-.3em_{\scriptscriptstyle-}}\hss}%
- \egroup}
-
-\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\!!height -2\scratchdimen\!!depth3\scratchdimen
- \vrule \!!width\scratchdimen \!!height5.5\scratchdimen\!!depth3\scratchdimen
- \kern\scratchdimen}}
+\chardef\textcontrolspace"2423
+
+\unexpanded\def\fallbackcontrolspace
+ %{\getglyph{ComputerModernMono}\textcontrolspace}
+ {\getglyph{LMTypewriter10-Regular}\textcontrolspace}
+
+\unexpanded\def\normalcontrolspace
+ {\iffontchar\font\textcontrolspace
+ \textcontrolspace
+ \else
+ \fallbackcontrolspace
+ \fi}
+
+\let\textvisiblespace\normalcontrolspace
+
+\unexpanded\def\fastcontrolspace % no glyph resolving after first (use grouped)
+ {\dofastcontrolspace}
+
+\def\dofastcontrolspace
+ {\iffontchar\font\textcontrolspace
+ \nofastfallbackcontrolspace
+ \else
+ \dofastfallbackcontrolspace
+ \fi
+ \dofastcontrolspace}
+
+\newbox\controlspacebox
+
+\def\nofastfallbackcontrolspace
+ {\let\dofastcontrolspace\textcontrolspace}
+
+\def\dofastfallbackcontrolspace
+ {\setbox\controlspacebox\hbox{\space}%
+ \setbox\controlspacebox\hbox to \wd\controlspacebox{\hss\fallbackcontrolspace\hss}%
+ \let\dofastcontrolspace\flushcontrolspacebox}
+
+\def\flushcontrolspacebox
+ {\copy\controlspacebox}
+
+% a few defaults (\<whatever>{}), we really need the verbose \empty as it will be
+% stringified
+
+\defineaccent ^ {\empty} {\textcircumflex}
+\defineaccent ` {\empty} {\textgrave}
+\defineaccent ~ {\empty} {\texttilde}
+\defineaccent " {\empty} {\textdiaeresis}
+\defineaccent ' {\empty} {\textacute}
+\defineaccent . {\empty} {\textdotaccent}
+\defineaccent = {\empty} {\textmacron}
+\defineaccent c {\empty} {\textcedilla}
+\defineaccent H {\empty} {\texthungarumlaut}
+\defineaccent k {\empty} {\textogonek}
+\defineaccent r {\empty} {\textring}
+\defineaccent u {\empty} {\textbreve}
+\defineaccent v {\empty} {\textcaron}
% from enco-acc:
+%
+% we should to this at the lua end and share code ..
\defineaccent ^ A {\Acircumflex} \defineaccent ^ a {\acircumflex}
\defineaccent ^ C {\Ccircumflex} \defineaccent ^ c {\ccircumflex}
@@ -469,15 +499,27 @@
%D A smaller and bolder variant, more like the math and monospaced ones.
+% \def\fakeunderscore
+% {\dontleavehmode\hbox % was \leavevmode
+% {\setbox\scratchbox\hbox{(}%
+% \scratchdimen.2\dp\scratchbox
+% \setbox\scratchbox\hbox{\space}%
+% \vrule
+% \!!depth \scratchdimen
+% \!!width \wd\scratchbox
+% \!!height\zeropoint}}
+
+% \startTEXpage
+% \ruledhbox{\strut$1\fakeunderscore^{1\fakeunderscore}$}
+% \ruledhbox{\strut$1\xfakeunderscore^{1\xfakeunderscore}$}
+% \stopTEXpage
+
\def\fakeunderscore
- {\leavevmode\hbox
- {\setbox\scratchbox\hbox{(}%
- \scratchdimen.2\dp\scratchbox
- \setbox\scratchbox\hbox{\space}%
- \vrule
- \!!depth \scratchdimen
- \!!width \wd\scratchbox
- \!!height\zeropoint}}
+ {\relax\ifmmode
+ \vrule\!!depth .12\fontexheight\mathstylefont\normalmathstyle\!!width \fontinterwordspace\mathstylefont\normalmathstyle\!!height\zeropoint\relax
+ \else
+ \dontleavehmode\hbox{\vrule\!!depth .12\fontexheight\font\!!width \fontinterwordspace\font\!!height\zeropoint}%
+ \fi}
\def\fakeunderscores{\let\_\fakeunderscore}
\def\textunderscores{\let\_\textunderscore}
diff --git a/Master/texmf-dist/tex/context/base/enco-l7x.mkii b/Master/texmf-dist/tex/context/base/enco-l7x.mkii
new file mode 100644
index 00000000000..8f355317b56
--- /dev/null
+++ b/Master/texmf-dist/tex/context/base/enco-l7x.mkii
@@ -0,0 +1,236 @@
+%D \module
+%D [ file=enco-l7x,
+%D version=2010.01.22,
+%D title=\CONTEXT\ Encoding Macros,
+%D subtitle=\LATEX\ L7x Encoding,
+%D author={Hans Hagen \& Mojca Miklavec},
+%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 Encoding vector to support Latvian and Lithuanian. The first
+%D part is taken from EC encoding, the rest has not been tested
+%D extensively.
+
+\startmapping[l7x]
+
+\definecaseswap 25 `I % dotless i (TODO - probably wrong; maybe use \defineuppercasecom)
+\definecaseswap 156 140 % oeligature
+\definecaseswap 184 168 % ostroke
+\definecaseswap 186 170 % rcommaaccent
+\definecaseswap 191 175 % aeligature
+\definecaseself 223 % ssharp (this is wrong, but no better way)
+
+\definecasemaps 192 to 222 lc +32 uc 0
+\definecasemaps 224 to 254 lc 0 uc -32
+\resetcaserange 215 to 215 % textmultiply
+\resetcaserange 247 to 247 % textdiv
+
+\stopmapping
+
+\startencoding[l7x]
+
+\definecharacter textgrave 0
+\definecharacter textacute 1
+\definecharacter textcircumflex 2
+\definecharacter texttilde 3
+\definecharacter textdiaeresis 4
+\definecharacter texthungarumlaut 5
+\definecharacter textring 6
+\definecharacter textcaron 7
+\definecharacter textbreve 8
+\definecharacter textmacron 9
+\definecharacter textdotaccent 10
+\definecharacter textcedilla 11
+\definecharacter textogonek 12
+\definecharacter quotesinglebase 13
+\definecharacter guilsingleleft 14
+\definecharacter guilsingleright 15
+\definecharacter quotedblleft 16
+\definecharacter quotedblright 17
+\definecharacter quotedblbase 18
+\definecharacter leftguillemot 19
+\definecharacter rightguillemot 20
+\definecharacter endash 21
+\definecharacter emdash 22
+%definecharacter compoundwordmark 23
+%definecharacter perthousand 24
+\definecharacter dotlessi 25 % or when missing: {j}
+\definecharacter dotlessj 26
+% ff 27
+% fi 28
+% fl 29
+% ffi 30
+% ffl 31
+%definecharacter textvisiblespace 32
+% exclam ! 33
+\definecharacter quotedbl 34
+% numbersign # 35
+% dollar $ 36
+\definecharacter percent 37
+% ampersand & 38
+%definecharacter quotesingle 39 % fake 'm TODO:enco-def!!!!
+\definecharacter quoteright 39
+% parenleft ( 40
+% parenright ) 41
+% asterisk * 42
+% plus + 43
+% comma , 44
+\definecharacter softhyphen 45
+% period . 46
+% slash / 47
+% 0-9 48-57
+% colon : 58
+% semicolon ; 59
+% less < 60
+% equal = 61
+% greater > 62
+% question ? 63
+% at @ 64
+% A-Z 65-90
+% bracketleft [ 91
+\definecharacter textbackslash 92
+% bracketright ] 93
+\definecharacter textasciicircum 94
+\definecharacter textunderscore 95
+\definecharacter quoteleft 96
+% a-z 97-122
+\definecharacter textbraceleft 123
+\definecharacter textbraceright 125
+\definecharacter textasciitilde 126
+% .notdef 127
+\definecharacter texteuro 128
+% .notdef 129
+\definecharacter quotesinglebase 130
+\definecharacter textflorin 131 \definecharacter fhook 131
+\definecharacter quotedblbase 132
+\definecharacter textellipsis 133
+\definecharacter textdag 134
+\definecharacter textddag 135
+% .notdef 136
+\definecharacter perthousand 137
+% .notdef 138
+\definecharacter guilsingleleft 139
+\definecharacter OEligature 140 % TODO: also \OE???
+\definecharacter textdiaeresis 141
+\definecharacter textcaron 142
+\definecharacter textcedilla 143
+% .notdef 144
+\definecharacter quoteleft 145
+\definecharacter quoteright 146
+\definecharacter quotedblleft 147
+\definecharacter quotedblright 148
+\definecharacter textbullet 149
+\definecharacter endash 150
+\definecharacter emdash 151
+% .notdef 152
+\definecharacter trademark 153
+% .notdef 154
+\definecharacter guilsingleright 155
+\definecharacter oeligature 156
+\definecharacter textmacron 157
+\definecharacter textogonek 158
+% .notdef 159
+%definecharacter space 160 % TODO!!!
+\definecharacter quotedblright 161
+\definecharacter textcent 162
+\definecharacter textsterling 163
+\definecharacter textcurrency 164
+\definecharacter quotedblbase 165
+\definecharacter textbrokenbar 166
+\definecharacter sectionmark 167
+\definecharacter Ostroke 168
+\definecharacter copyright 169
+\definecharacter Rcommaaccent 170
+\definecharacter leftguillemot 171
+\definecharacter textlognot 172
+%definecharacter softhyphen 173 % -> 45 (TODO!!!)
+\definecharacter registered 174
+\definecharacter AEligature 175
+\definecharacter textdegree 176
+\definecharacter textpm 177
+\definecharacter twosuperior 178
+\definecharacter threesuperior 179
+\definecharacter quotedblleft 180
+\definecharacter textmu 181
+\definecharacter paragraphmark 182
+\definecharacter periodcentered 183
+\definecharacter ostroke 184
+\definecharacter onesuperior 185
+\definecharacter rcommaaccent 186
+\definecharacter rightguillemot 187
+\definecharacter onequarter 188
+\definecharacter onehalf 189
+\definecharacter threequarter 190
+\definecharacter aeligature 191
+\definecharacter Aogonek 192
+\definecharacter Iogonek 193
+\definecharacter Amacron 194
+\definecharacter Cacute 195
+\definecharacter Adiaeresis 196
+\definecharacter Aring 197
+\definecharacter Eogonek 198
+\definecharacter Emacron 199
+\definecharacter Ccaron 200
+\definecharacter Eacute 201
+\definecharacter Zacute 202
+\definecharacter Edotaccent 203
+\definecharacter Gcommaaccent 204
+\definecharacter Kcommaaccent 205
+\definecharacter Imacron 206
+\definecharacter Lcommaaccent 207
+\definecharacter Scaron 208
+\definecharacter Nacute 209
+\definecharacter Ncommaaccent 210
+\definecharacter Oacute 211
+\definecharacter Omacron 212
+\definecharacter Otilde 213
+\definecharacter Odiaeresis 214
+\definecharacter textmultiply 215
+\definecharacter Uogonek 216
+\definecharacter Lstroke 217
+\definecharacter Sacute 218
+\definecharacter Umacron 219
+\definecharacter Udiaeresis 220
+\definecharacter Zdotaccent 221
+\definecharacter Zcaron 222
+\definecharacter ssharp 223
+\definecharacter aogonek 224
+\definecharacter iogonek 225
+\definecharacter amacron 226
+\definecharacter cacute 227
+\definecharacter adiaeresis 228
+\definecharacter aring 229
+\definecharacter eogonek 230
+\definecharacter emacron 231
+\definecharacter ccaron 232
+\definecharacter eacute 233
+\definecharacter zacute 234
+\definecharacter edotaccent 235
+\definecharacter gcommaaccent 236
+\definecharacter kcommaaccent 237
+\definecharacter imacron 238
+\definecharacter lcommaaccent 239
+\definecharacter scaron 240
+\definecharacter nacute 241
+\definecharacter ncommaaccent 242
+\definecharacter oacute 243
+\definecharacter omacron 244
+\definecharacter otilde 245
+\definecharacter odiaeresis 246
+\definecharacter textdiv 247
+\definecharacter uogonek 248
+\definecharacter lstroke 249
+\definecharacter sacute 250
+\definecharacter umacron 251
+\definecharacter udiaeresis 252
+\definecharacter zdotaccent 253
+\definecharacter zcaron 254
+\definecharacter quoteright 255
+
+\stopencoding
+
+\endinput
diff --git a/Master/texmf-dist/tex/context/base/font-afm.lua b/Master/texmf-dist/tex/context/base/font-afm.lua
index 81b47a2698c..87dec59c6e6 100644
--- a/Master/texmf-dist/tex/context/base/font-afm.lua
+++ b/Master/texmf-dist/tex/context/base/font-afm.lua
@@ -1,6 +1,6 @@
if not modules then modules = { } end modules ['font-afm'] = {
version = 1.001,
- comment = "companion to font-ini.tex",
+ comment = "companion to font-ini.mkiv",
author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
copyright = "PRAGMA ADE / ConTeXt Development Team",
license = "see context related readme files"
@@ -21,7 +21,9 @@ local trace_features = false trackers.register("afm.features", function(v) trac
local trace_indexing = false trackers.register("afm.indexing", function(v) trace_indexing = v end)
local trace_loading = false trackers.register("afm.loading", function(v) trace_loading = v end)
-local format, match, gmatch, lower = string.format, string.match, string.gmatch, string.lower
+local format, match, gmatch, lower, gsub = string.format, string.match, string.gmatch, string.lower, string.gsub
+local lpegmatch = lpeg.match
+local abs = math.abs
fonts = fonts or { }
fonts.afm = fonts.afm or { }
@@ -29,7 +31,7 @@ fonts.afm = fonts.afm or { }
local afm = fonts.afm
local tfm = fonts.tfm
-afm.version = 1.400 -- incrementing this number one up will force a re-cache
+afm.version = 1.402 -- incrementing this number one up will force a re-cache
afm.syncspace = true -- when true, nicer stretch values
afm.enhance_data = true -- best leave this set to true
afm.features = { }
@@ -88,7 +90,7 @@ local pattern = ( c * s^1 * (
local function scan_comment(str)
fd = { }
- pattern:match(str)
+ lpegmatch(pattern,str)
return fd
end
@@ -219,21 +221,21 @@ function afm.read_afm(filename)
filename = file.removesuffix(file.basename(filename))
}
}
- afmblob = afmblob:gsub("StartCharMetrics(.-)EndCharMetrics", function(charmetrics)
+ afmblob = gsub(afmblob,"StartCharMetrics(.-)EndCharMetrics", function(charmetrics)
if trace_loading then
logs.report("load afm","loading char metrics")
end
get_charmetrics(data,charmetrics,vector)
return ""
end)
- afmblob = afmblob:gsub("StartKernPairs(.-)EndKernPairs", function(kernpairs)
+ afmblob = gsub(afmblob,"StartKernPairs(.-)EndKernPairs", function(kernpairs)
if trace_loading 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)
+ afmblob = gsub(afmblob,"StartFontMetrics%s+([%d%.]+)(.-)EndFontMetrics", function(version,fontmetrics)
if trace_loading then
logs.report("load afm","loading variables")
end
@@ -281,6 +283,8 @@ function afm.load(filename)
logs.report("load afm", "add extra kerns")
afm.add_kerns(data) -- faster this way
end
+ logs.report("load afm", "add tounicode data")
+ fonts.map.add_to_unicode(data,filename)
data.size = size
data.verbose = fonts.verbose
logs.report("load afm","saving: %s in cache",name)
@@ -453,6 +457,9 @@ function afm.add_dimensions(data) -- we need to normalize afm to otf i.e. indexe
end
end
+fonts.formats.afm = "type1"
+fonts.formats.pfb = "type1"
+
function afm.copy_to_tfm(data)
if data then
local glyphs = data.glyphs
@@ -460,74 +467,48 @@ function afm.copy_to_tfm(data)
local metadata, luatex = data.metadata, data.luatex
local unicodes, indices = luatex.unicodes, luatex.indices
local characters, parameters, descriptions = { }, { }, { }
- local tfm = {
- characters = characters,
- parameters = parameters,
- descriptions = descriptions,
- indices = indices,
- unicodes = unicodes,
- luatex = luatex,
- }
+ -- todo : merge into tfm
for u, i in next, indices do
local d = glyphs[i]
characters[u] = { }
descriptions[u] = d
end
- tfm.encodingbytes = metadata.encodingbytes or 2
- tfm.fullname = metadata.fullname
- tfm.filename = metadata.filename
- tfm.name = tfm.fullname
- tfm.psname = tfm.fullname
- tfm.type = "real"
- tfm.units = 1000
- tfm.stretch = stretch -- nil
- tfm.slant = slant -- nil
- tfm.direction = 0
- tfm.boundarychar_label = 0
- tfm.boundarychar = 65536
- --~ tfm.false_boundarychar = 65536 -- produces invalid tfm in luatex
- tfm.designsize = (metadata.designsize or 10)*65536
- local spaceunits = 500
- tfm.spacer = "500 units"
+ local filename = fonts.tfm.checked_filename(luatex) -- was metadata.filename
+ local fontname = metadata.fontname or metadata.fullname
+ local fullname = metadata.fullname or metadata.fontname
+ local endash, emdash, space, spaceunits = unicodes['space'], unicodes['emdash'], "space", 500
-- same as otf
- local endash, emdash = unicodes['space'], unicodes['emdash']
if metadata.isfixedpitch then
if descriptions[endash] then
- spaceunits, tfm.spacer = descriptions[endash].width, "space"
+ spaceunits, spacer = descriptions[endash].width, "space"
end
if not spaceunits and descriptions[emdash] then
- spaceunits, tfm.spacer = descriptions[emdash].width, "emdash"
+ spaceunits, spacer = descriptions[emdash].width, "emdash"
end
if not spaceunits and metadata.charwidth then
- spaceunits, tfm.spacer = metadata.charwidth, "charwidth"
+ spaceunits, spacer = metadata.charwidth, "charwidth"
end
else
if descriptions[endash] then
- spaceunits, tfm.spacer = descriptions[endash].width, "space"
+ spaceunits, spacer = descriptions[endash].width, "space"
end
- -- if not spaceunits and descriptions[emdash] then
- -- spaceunits, tfm.spacer = descriptions[emdash].width/2, "emdash/2"
- -- end
if not spaceunits and metadata.charwidth then
- spaceunits, tfm.spacer = metadata.charwidth, "charwidth"
+ spaceunits, spacer = metadata.charwidth, "charwidth"
end
end
- --
spaceunits = tonumber(spaceunits)
+ if spaceunits < 200 then
+ -- todo: warning
+ end
+ --
parameters.slant = 0
parameters.space = spaceunits
parameters.space_stretch = 500
parameters.space_shrink = 333
parameters.x_height = 400
parameters.quad = 1000
- if spaceunits < 200 then
- -- todo: warning
- end
- tfm.ascender = math.abs(metadata.ascender or 0)
- tfm.descender = math.abs(metadata.descender or 0)
local italicangle = data.metadata.italicangle
if italicangle then
- tfm.italicangle = italicangle
parameters.slant = parameters.slant - math.round(math.tan(italicangle*math.pi/180))
end
if metadata.isfixedpitch then
@@ -557,8 +538,34 @@ function afm.copy_to_tfm(data)
parameters[k] = v
end
end
+ --
if next(characters) then
- return tfm
+ return {
+ characters = characters,
+ parameters = parameters,
+ descriptions = descriptions,
+ indices = indices,
+ unicodes = unicodes,
+ luatex = luatex,
+ encodingbytes = 2,
+ filename = filename,
+ fontname = fontname,
+ fullname = fullname,
+ psname = fullname, -- in otf: tfm.fontname or tfm.fullname
+ name = filename or fullname or fontname,
+ format = fonts.fontformat(filename,"type1"),
+ type = 'real',
+ units = 1000,
+ direction = 0,
+ boundarychar_label = 0,
+ boundarychar = 65536,
+ --~ false_boundarychar = 65536, -- produces invalid tfm in luatex
+ designsize = (metadata.designsize or 10)*65536,
+ spacer = spacer,
+ ascender = abs(metadata.ascender or 0),
+ descender = abs(metadata.descender or 0),
+ italicangle = italicangle,
+ }
end
end
end
@@ -581,7 +588,7 @@ function afm.set_features(tfmdata)
local shared = tfmdata.shared
local afmdata = shared.afmdata
local features = shared.features
- if not table.is_empty(features) then
+ if features and next(features) then
local mode = tfmdata.mode or fonts.mode
local initializers = fonts.initializers
local fi = initializers[mode]
@@ -670,10 +677,10 @@ function afm.afm_to_tfm(specification)
local tfmdata = containers.read(tfm.cache(), cache_id) -- cache with features applied
if not tfmdata then
local afmdata = afm.load(afmname)
- if not table.is_empty(afmdata) then
+ if afmdata and next(afmdata) then
afm.add_dimensions(afmdata)
tfmdata = afm.copy_to_tfm(afmdata)
- if not table.is_empty(tfmdata) then
+ if tfmdata and next(tfmdata) then
tfmdata.shared = tfmdata.shared or { }
tfmdata.unique = tfmdata.unique or { }
tfmdata.shared.afmdata = afmdata
@@ -711,21 +718,19 @@ function tfm.read_from_afm(specification)
local tfmtable = afm.afm_to_tfm(specification)
if tfmtable then
tfmtable.name = specification.name
- tfmtable = tfm.scale(tfmtable, specification.size)
+ tfmtable = tfm.scale(tfmtable, specification.size, specification.relativeid)
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 = resolvers.findbinfile(filename,"") or filename
- tfmtable.fullname = afmdata.metadata.fontname or afmdata.metadata.fullname
- tfmtable.format = 'type1'
- tfmtable.name = afmdata.luatex.filename or tfmtable.fullname
- end
+--~ local filename = afmdata and afmdata.luatex and afmdata.luatex.filename
+--~ if filename then
+--~ tfmtable.encodingbytes = 2
+--~ tfmtable.filename = resolvers.findbinfile(filename,"") or filename
+--~ tfmtable.fontname = afmdata.metadata.fontname or afmdata.metadata.fullname
+--~ tfmtable.fullname = afmdata.metadata.fullname or afmdata.metadata.fontname
+--~ tfmtable.format = 'type1'
+--~ tfmtable.name = afmdata.luatex.filename or tfmtable.fullname
+--~ end
if fonts.dontembed[filename] then
- tfmtable.file = nil
+ tfmtable.file = nil -- or filename ?
end
fonts.logger.save(tfmtable,'afm',specification)
end
diff --git a/Master/texmf-dist/tex/context/base/font-agl.lua b/Master/texmf-dist/tex/context/base/font-agl.lua
new file mode 100644
index 00000000000..8a087b12381
--- /dev/null
+++ b/Master/texmf-dist/tex/context/base/font-agl.lua
@@ -0,0 +1,3695 @@
+if not modules then modules = { } end modules ['font-map'] = {
+ version = 1.001,
+ comment = "companion to font-ini.mkiv",
+ author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
+ copyright = "derived from http://www.adobe.com/devnet/opentype/archives/glyphlist.txt",
+ comment = "Adobe Glyph List, version 2.0, September 20, 2002",
+}
+
+fonts = fonts or { }
+fonts.map = fonts.map or { }
+
+fonts.map.unicode_to_agl = {
+ "controlSTX",
+ "controlSOT",
+ "controlETX",
+ "controlEOT",
+ "controlENQ",
+ "controlACK",
+ "controlBEL",
+ "controlBS",
+ "controlHT",
+ "controlLF",
+ "controlVT",
+ "controlFF",
+ "controlCR",
+ "controlSO",
+ "controlSI",
+ "controlDLE",
+ "controlDC1",
+ "controlDC2",
+ "controlDC3",
+ "controlDC4",
+ "controlNAK",
+ "controlSYN",
+ "controlETB",
+ "controlCAN",
+ "controlEM",
+ "controlSUB",
+ "controlESC",
+ "controlFS",
+ "controlGS",
+ "controlRS",
+ "controlUS",
+ "spacehackarabic",
+ "exclam",
+ "quotedbl",
+ "numbersign",
+ "dollar",
+ "percent",
+ "ampersand",
+ "quotesingle",
+ "parenleft",
+ "parenright",
+ "asterisk",
+ "plus",
+ "comma",
+ "hyphen",
+ "period",
+ "slash",
+ "zero",
+ "one",
+ "two",
+ "three",
+ "four",
+ "five",
+ "six",
+ "seven",
+ "eight",
+ "nine",
+ "colon",
+ "semicolon",
+ "less",
+ "equal",
+ "greater",
+ "question",
+ "at",
+ "A",
+ "B",
+ "C",
+ "D",
+ "E",
+ "F",
+ "G",
+ "H",
+ "I",
+ "J",
+ "K",
+ "L",
+ "M",
+ "N",
+ "O",
+ "P",
+ "Q",
+ "R",
+ "S",
+ "T",
+ "U",
+ "V",
+ "W",
+ "X",
+ "Y",
+ "Z",
+ "bracketleft",
+ "backslash",
+ "bracketright",
+ "asciicircum",
+ "underscore",
+ "grave",
+ "a",
+ "b",
+ "c",
+ "d",
+ "e",
+ "f",
+ "g",
+ "h",
+ "i",
+ "j",
+ "k",
+ "l",
+ "m",
+ "n",
+ "o",
+ "p",
+ "q",
+ "r",
+ "s",
+ "t",
+ "u",
+ "v",
+ "w",
+ "x",
+ "y",
+ "z",
+ "braceleft",
+ "verticalbar",
+ "braceright",
+ "asciitilde",
+ "controlDEL",
+ [0x00A0] = "nonbreakingspace",
+ [0x00A1] = "exclamdown",
+ [0x00A2] = "cent",
+ [0x00A3] = "sterling",
+ [0x00A4] = "currency",
+ [0x00A5] = "yen",
+ [0x00A6] = "brokenbar",
+ [0x00A7] = "section",
+ [0x00A8] = "dieresis",
+ [0x00A9] = "copyright",
+ [0x00AA] = "ordfeminine",
+ [0x00AB] = "guillemotleft",
+ [0x00AC] = "logicalnot",
+ [0x00AD] = "softhyphen",
+ [0x00AE] = "registered",
+ [0x00AF] = "overscore",
+ [0x00B0] = "degree",
+ [0x00B1] = "plusminus",
+ [0x00B2] = "twosuperior",
+ [0x00B3] = "threesuperior",
+ [0x00B4] = "acute",
+ [0x00B5] = "mu1",
+ [0x00B6] = "paragraph",
+ [0x00B7] = "periodcentered",
+ [0x00B8] = "cedilla",
+ [0x00B9] = "onesuperior",
+ [0x00BA] = "ordmasculine",
+ [0x00BB] = "guillemotright",
+ [0x00BC] = "onequarter",
+ [0x00BD] = "onehalf",
+ [0x00BE] = "threequarters",
+ [0x00BF] = "questiondown",
+ [0x00C0] = "Agrave",
+ [0x00C1] = "Aacute",
+ [0x00C2] = "Acircumflex",
+ [0x00C3] = "Atilde",
+ [0x00C4] = "Adieresis",
+ [0x00C5] = "Aring",
+ [0x00C6] = "AE",
+ [0x00C7] = "Ccedilla",
+ [0x00C8] = "Egrave",
+ [0x00C9] = "Eacute",
+ [0x00CA] = "Ecircumflex",
+ [0x00CB] = "Edieresis",
+ [0x00CC] = "Igrave",
+ [0x00CD] = "Iacute",
+ [0x00CE] = "Icircumflex",
+ [0x00CF] = "Idieresis",
+ [0x00D0] = "Eth",
+ [0x00D1] = "Ntilde",
+ [0x00D2] = "Ograve",
+ [0x00D3] = "Oacute",
+ [0x00D4] = "Ocircumflex",
+ [0x00D5] = "Otilde",
+ [0x00D6] = "Odieresis",
+ [0x00D7] = "multiply",
+ [0x00D8] = "Oslash",
+ [0x00D9] = "Ugrave",
+ [0x00DA] = "Uacute",
+ [0x00DB] = "Ucircumflex",
+ [0x00DC] = "Udieresis",
+ [0x00DD] = "Yacute",
+ [0x00DE] = "Thorn",
+ [0x00DF] = "germandbls",
+ [0x00E0] = "agrave",
+ [0x00E1] = "aacute",
+ [0x00E2] = "acircumflex",
+ [0x00E3] = "atilde",
+ [0x00E4] = "adieresis",
+ [0x00E5] = "aring",
+ [0x00E6] = "ae",
+ [0x00E7] = "ccedilla",
+ [0x00E8] = "egrave",
+ [0x00E9] = "eacute",
+ [0x00EA] = "ecircumflex",
+ [0x00EB] = "edieresis",
+ [0x00EC] = "igrave",
+ [0x00ED] = "iacute",
+ [0x00EE] = "icircumflex",
+ [0x00EF] = "idieresis",
+ [0x00F0] = "eth",
+ [0x00F1] = "ntilde",
+ [0x00F2] = "ograve",
+ [0x00F3] = "oacute",
+ [0x00F4] = "ocircumflex",
+ [0x00F5] = "otilde",
+ [0x00F6] = "odieresis",
+ [0x00F7] = "divide",
+ [0x00F8] = "oslash",
+ [0x00F9] = "ugrave",
+ [0x00FA] = "uacute",
+ [0x00FB] = "ucircumflex",
+ [0x00FC] = "udieresis",
+ [0x00FD] = "yacute",
+ [0x00FE] = "thorn",
+ [0x00FF] = "ydieresis",
+ [0x0100] = "Amacron",
+ [0x0101] = "amacron",
+ [0x0102] = "Abreve",
+ [0x0103] = "abreve",
+ [0x0104] = "Aogonek",
+ [0x0105] = "aogonek",
+ [0x0106] = "Cacute",
+ [0x0107] = "cacute",
+ [0x0108] = "Ccircumflex",
+ [0x0109] = "ccircumflex",
+ [0x010A] = "Cdotaccent",
+ [0x010B] = "cdotaccent",
+ [0x010C] = "Ccaron",
+ [0x010D] = "ccaron",
+ [0x010E] = "Dcaron",
+ [0x010F] = "dcaron",
+ [0x0110] = "Dslash",
+ [0x0111] = "dmacron",
+ [0x0112] = "Emacron",
+ [0x0113] = "emacron",
+ [0x0114] = "Ebreve",
+ [0x0115] = "ebreve",
+ [0x0116] = "Edotaccent",
+ [0x0117] = "edotaccent",
+ [0x0118] = "Eogonek",
+ [0x0119] = "eogonek",
+ [0x011A] = "Ecaron",
+ [0x011B] = "ecaron",
+ [0x011C] = "Gcircumflex",
+ [0x011D] = "gcircumflex",
+ [0x011E] = "Gbreve",
+ [0x011F] = "gbreve",
+ [0x0120] = "Gdotaccent",
+ [0x0121] = "gdotaccent",
+ [0x0122] = "Gcommaaccent",
+ [0x0123] = "gcommaaccent",
+ [0x0124] = "Hcircumflex",
+ [0x0125] = "hcircumflex",
+ [0x0126] = "Hbar",
+ [0x0127] = "hbar",
+ [0x0128] = "Itilde",
+ [0x0129] = "itilde",
+ [0x012A] = "Imacron",
+ [0x012B] = "imacron",
+ [0x012C] = "Ibreve",
+ [0x012D] = "ibreve",
+ [0x012E] = "Iogonek",
+ [0x012F] = "iogonek",
+ [0x0130] = "Idotaccent",
+ [0x0131] = "dotlessi",
+ [0x0132] = "IJ",
+ [0x0133] = "ij",
+ [0x0134] = "Jcircumflex",
+ [0x0135] = "jcircumflex",
+ [0x0136] = "Kcommaaccent",
+ [0x0137] = "kcommaaccent",
+ [0x0138] = "kgreenlandic",
+ [0x0139] = "Lacute",
+ [0x013A] = "lacute",
+ [0x013B] = "Lcommaaccent",
+ [0x013C] = "lcommaaccent",
+ [0x013D] = "Lcaron",
+ [0x013E] = "lcaron",
+ [0x013F] = "Ldotaccent",
+ [0x0140] = "ldotaccent",
+ [0x0141] = "Lslash",
+ [0x0142] = "lslash",
+ [0x0143] = "Nacute",
+ [0x0144] = "nacute",
+ [0x0145] = "Ncommaaccent",
+ [0x0146] = "ncommaaccent",
+ [0x0147] = "Ncaron",
+ [0x0148] = "ncaron",
+ [0x0149] = "quoterightn",
+ [0x014A] = "Eng",
+ [0x014B] = "eng",
+ [0x014C] = "Omacron",
+ [0x014D] = "omacron",
+ [0x014E] = "Obreve",
+ [0x014F] = "obreve",
+ [0x0150] = "Ohungarumlaut",
+ [0x0151] = "ohungarumlaut",
+ [0x0152] = "OE",
+ [0x0153] = "oe",
+ [0x0154] = "Racute",
+ [0x0155] = "racute",
+ [0x0156] = "Rcommaaccent",
+ [0x0157] = "rcommaaccent",
+ [0x0158] = "Rcaron",
+ [0x0159] = "rcaron",
+ [0x015A] = "Sacute",
+ [0x015B] = "sacute",
+ [0x015C] = "Scircumflex",
+ [0x015D] = "scircumflex",
+ [0x015E] = "Scedilla",
+ [0x015F] = "scedilla",
+ [0x0160] = "Scaron",
+ [0x0161] = "scaron",
+ [0x0162] = "Tcommaaccent",
+ [0x0163] = "tcommaaccent",
+ [0x0164] = "Tcaron",
+ [0x0165] = "tcaron",
+ [0x0166] = "Tbar",
+ [0x0167] = "tbar",
+ [0x0168] = "Utilde",
+ [0x0169] = "utilde",
+ [0x016A] = "Umacron",
+ [0x016B] = "umacron",
+ [0x016C] = "Ubreve",
+ [0x016D] = "ubreve",
+ [0x016E] = "Uring",
+ [0x016F] = "uring",
+ [0x0170] = "Uhungarumlaut",
+ [0x0171] = "uhungarumlaut",
+ [0x0172] = "Uogonek",
+ [0x0173] = "uogonek",
+ [0x0174] = "Wcircumflex",
+ [0x0175] = "wcircumflex",
+ [0x0176] = "Ycircumflex",
+ [0x0177] = "ycircumflex",
+ [0x0178] = "Ydieresis",
+ [0x0179] = "Zacute",
+ [0x017A] = "zacute",
+ [0x017B] = "Zdotaccent",
+ [0x017C] = "zdotaccent",
+ [0x017D] = "Zcaron",
+ [0x017E] = "zcaron",
+ [0x017F] = "slong",
+ [0x0180] = "bstroke",
+ [0x0181] = "Bhook",
+ [0x0182] = "Btopbar",
+ [0x0183] = "btopbar",
+ [0x0184] = "Tonesix",
+ [0x0185] = "tonesix",
+ [0x0186] = "Oopen",
+ [0x0187] = "Chook",
+ [0x0188] = "chook",
+ [0x0189] = "Dafrican",
+ [0x018A] = "Dhook",
+ [0x018B] = "Dtopbar",
+ [0x018C] = "dtopbar",
+ [0x018D] = "deltaturned",
+ [0x018E] = "Ereversed",
+ [0x018F] = "Schwa",
+ [0x0190] = "Eopen",
+ [0x0191] = "Fhook",
+ [0x0192] = "florin",
+ [0x0193] = "Ghook",
+ [0x0194] = "Gammaafrican",
+ [0x0195] = "hv",
+ [0x0196] = "Iotaafrican",
+ [0x0197] = "Istroke",
+ [0x0198] = "Khook",
+ [0x0199] = "khook",
+ [0x019A] = "lbar",
+ [0x019B] = "lambdastroke",
+ [0x019C] = "Mturned",
+ [0x019D] = "Nhookleft",
+ [0x019E] = "nlegrightlong",
+ [0x019F] = "Ocenteredtilde",
+ [0x01A0] = "Ohorn",
+ [0x01A1] = "ohorn",
+ [0x01A2] = "Oi",
+ [0x01A3] = "oi",
+ [0x01A4] = "Phook",
+ [0x01A5] = "phook",
+ [0x01A6] = "yr",
+ [0x01A7] = "Tonetwo",
+ [0x01A8] = "tonetwo",
+ [0x01A9] = "Esh",
+ [0x01AA] = "eshreversedloop",
+ [0x01AB] = "tpalatalhook",
+ [0x01AC] = "Thook",
+ [0x01AD] = "thook",
+ [0x01AE] = "Tretroflexhook",
+ [0x01AF] = "Uhorn",
+ [0x01B0] = "uhorn",
+ [0x01B1] = "Upsilonafrican",
+ [0x01B2] = "Vhook",
+ [0x01B3] = "Yhook",
+ [0x01B4] = "yhook",
+ [0x01B5] = "Zstroke",
+ [0x01B6] = "zstroke",
+ [0x01B7] = "Ezh",
+ [0x01B8] = "Ezhreversed",
+ [0x01B9] = "ezhreversed",
+ [0x01BA] = "ezhtail",
+ [0x01BB] = "twostroke",
+ [0x01BC] = "Tonefive",
+ [0x01BD] = "tonefive",
+ [0x01BE] = "glottalinvertedstroke",
+ [0x01BF] = "wynn",
+ [0x01C0] = "clickdental",
+ [0x01C1] = "clicklateral",
+ [0x01C2] = "clickalveolar",
+ [0x01C3] = "clickretroflex",
+ [0x01C4] = "DZcaron",
+ [0x01C5] = "Dzcaron",
+ [0x01C6] = "dzcaron",
+ [0x01C7] = "LJ",
+ [0x01C8] = "Lj",
+ [0x01C9] = "lj",
+ [0x01CA] = "NJ",
+ [0x01CB] = "Nj",
+ [0x01CC] = "nj",
+ [0x01CD] = "Acaron",
+ [0x01CE] = "acaron",
+ [0x01CF] = "Icaron",
+ [0x01D0] = "icaron",
+ [0x01D1] = "Ocaron",
+ [0x01D2] = "ocaron",
+ [0x01D3] = "Ucaron",
+ [0x01D4] = "ucaron",
+ [0x01D5] = "Udieresismacron",
+ [0x01D6] = "udieresismacron",
+ [0x01D7] = "Udieresisacute",
+ [0x01D8] = "udieresisacute",
+ [0x01D9] = "Udieresiscaron",
+ [0x01DA] = "udieresiscaron",
+ [0x01DB] = "Udieresisgrave",
+ [0x01DC] = "udieresisgrave",
+ [0x01DD] = "eturned",
+ [0x01DE] = "Adieresismacron",
+ [0x01DF] = "adieresismacron",
+ [0x01E0] = "Adotmacron",
+ [0x01E1] = "adotmacron",
+ [0x01E2] = "AEmacron",
+ [0x01E3] = "aemacron",
+ [0x01E4] = "Gstroke",
+ [0x01E5] = "gstroke",
+ [0x01E6] = "Gcaron",
+ [0x01E7] = "gcaron",
+ [0x01E8] = "Kcaron",
+ [0x01E9] = "kcaron",
+ [0x01EA] = "Oogonek",
+ [0x01EB] = "oogonek",
+ [0x01EC] = "Oogonekmacron",
+ [0x01ED] = "oogonekmacron",
+ [0x01EE] = "Ezhcaron",
+ [0x01EF] = "ezhcaron",
+ [0x01F0] = "jcaron",
+ [0x01F1] = "DZ",
+ [0x01F2] = "Dz",
+ [0x01F3] = "dz",
+ [0x01F4] = "Gacute",
+ [0x01F5] = "gacute",
+ [0x01FA] = "Aringacute",
+ [0x01FB] = "aringacute",
+ [0x01FC] = "AEacute",
+ [0x01FD] = "aeacute",
+ [0x01FE] = "Ostrokeacute",
+ [0x01FF] = "ostrokeacute",
+ [0x0200] = "Adblgrave",
+ [0x0201] = "adblgrave",
+ [0x0202] = "Ainvertedbreve",
+ [0x0203] = "ainvertedbreve",
+ [0x0204] = "Edblgrave",
+ [0x0205] = "edblgrave",
+ [0x0206] = "Einvertedbreve",
+ [0x0207] = "einvertedbreve",
+ [0x0208] = "Idblgrave",
+ [0x0209] = "idblgrave",
+ [0x020A] = "Iinvertedbreve",
+ [0x020B] = "iinvertedbreve",
+ [0x020C] = "Odblgrave",
+ [0x020D] = "odblgrave",
+ [0x020E] = "Oinvertedbreve",
+ [0x020F] = "oinvertedbreve",
+ [0x0210] = "Rdblgrave",
+ [0x0211] = "rdblgrave",
+ [0x0212] = "Rinvertedbreve",
+ [0x0213] = "rinvertedbreve",
+ [0x0214] = "Udblgrave",
+ [0x0215] = "udblgrave",
+ [0x0216] = "Uinvertedbreve",
+ [0x0217] = "uinvertedbreve",
+ [0x0218] = "Scommaaccent",
+ [0x0219] = "scommaaccent",
+ [0x0250] = "aturned",
+ [0x0251] = "ascript",
+ [0x0252] = "ascriptturned",
+ [0x0253] = "bhook",
+ [0x0254] = "oopen",
+ [0x0255] = "ccurl",
+ [0x0256] = "dtail",
+ [0x0257] = "dhook",
+ [0x0258] = "ereversed",
+ [0x0259] = "schwa",
+ [0x025A] = "schwahook",
+ [0x025B] = "eopen",
+ [0x025C] = "eopenreversed",
+ [0x025D] = "eopenreversedhook",
+ [0x025E] = "eopenreversedclosed",
+ [0x025F] = "jdotlessstroke",
+ [0x0260] = "ghook",
+ [0x0261] = "gscript",
+ [0x0263] = "gammalatinsmall",
+ [0x0264] = "ramshorn",
+ [0x0265] = "hturned",
+ [0x0266] = "hhook",
+ [0x0267] = "henghook",
+ [0x0268] = "istroke",
+ [0x0269] = "iotalatin",
+ [0x026B] = "lmiddletilde",
+ [0x026C] = "lbelt",
+ [0x026D] = "lhookretroflex",
+ [0x026E] = "lezh",
+ [0x026F] = "mturned",
+ [0x0270] = "mlonglegturned",
+ [0x0271] = "mhook",
+ [0x0272] = "nhookleft",
+ [0x0273] = "nhookretroflex",
+ [0x0275] = "obarred",
+ [0x0277] = "omegalatinclosed",
+ [0x0278] = "philatin",
+ [0x0279] = "rturned",
+ [0x027A] = "rlonglegturned",
+ [0x027B] = "rhookturned",
+ [0x027C] = "rlongleg",
+ [0x027D] = "rhook",
+ [0x027E] = "rfishhook",
+ [0x027F] = "rfishhookreversed",
+ [0x0281] = "Rsmallinverted",
+ [0x0282] = "shook",
+ [0x0283] = "esh",
+ [0x0284] = "dotlessjstrokehook",
+ [0x0285] = "eshsquatreversed",
+ [0x0286] = "eshcurl",
+ [0x0287] = "tturned",
+ [0x0288] = "tretroflexhook",
+ [0x0289] = "ubar",
+ [0x028A] = "upsilonlatin",
+ [0x028B] = "vhook",
+ [0x028C] = "vturned",
+ [0x028D] = "wturned",
+ [0x028E] = "yturned",
+ [0x0290] = "zretroflexhook",
+ [0x0291] = "zcurl",
+ [0x0292] = "ezh",
+ [0x0293] = "ezhcurl",
+ [0x0294] = "glottalstop",
+ [0x0295] = "glottalstopreversed",
+ [0x0296] = "glottalstopinverted",
+ [0x0297] = "cstretched",
+ [0x0298] = "bilabialclick",
+ [0x029A] = "eopenclosed",
+ [0x029B] = "Gsmallhook",
+ [0x029D] = "jcrossedtail",
+ [0x029E] = "kturned",
+ [0x02A0] = "qhook",
+ [0x02A1] = "glottalstopstroke",
+ [0x02A2] = "glottalstopstrokereversed",
+ [0x02A3] = "dzaltone",
+ [0x02A4] = "dezh",
+ [0x02A5] = "dzcurl",
+ [0x02A6] = "ts",
+ [0x02A7] = "tesh",
+ [0x02A8] = "tccurl",
+ [0x02B0] = "hsuperior",
+ [0x02B1] = "hhooksuperior",
+ [0x02B2] = "jsuperior",
+ [0x02B4] = "rturnedsuperior",
+ [0x02B5] = "rhookturnedsuperior",
+ [0x02B6] = "Rsmallinvertedsuperior",
+ [0x02B7] = "wsuperior",
+ [0x02B8] = "ysuperior",
+ [0x02B9] = "primemod",
+ [0x02BA] = "dblprimemod",
+ [0x02BB] = "commaturnedmod",
+ [0x02BC] = "apostrophemod",
+ [0x02BD] = "commareversedmod",
+ [0x02BE] = "ringhalfright",
+ [0x02BF] = "ringhalfleft",
+ [0x02C0] = "glottalstopmod",
+ [0x02C1] = "glottalstopreversedmod",
+ [0x02C2] = "arrowheadleftmod",
+ [0x02C3] = "arrowheadrightmod",
+ [0x02C4] = "arrowheadupmod",
+ [0x02C5] = "arrowheaddownmod",
+ [0x02C6] = "circumflex",
+ [0x02C7] = "caron",
+ [0x02C8] = "verticallinemod",
+ [0x02C9] = "firsttonechinese",
+ [0x02CA] = "secondtonechinese",
+ [0x02CB] = "fourthtonechinese",
+ [0x02CC] = "verticallinelowmod",
+ [0x02CD] = "macronlowmod",
+ [0x02CE] = "gravelowmod",
+ [0x02CF] = "acutelowmod",
+ [0x02D0] = "colontriangularmod",
+ [0x02D1] = "colontriangularhalfmod",
+ [0x02D2] = "ringhalfrightcentered",
+ [0x02D3] = "ringhalfleftcentered",
+ [0x02D4] = "uptackmod",
+ [0x02D5] = "downtackmod",
+ [0x02D6] = "plusmod",
+ [0x02D7] = "minusmod",
+ [0x02D8] = "breve",
+ [0x02D9] = "dotaccent",
+ [0x02DA] = "ring",
+ [0x02DB] = "ogonek",
+ [0x02DC] = "tilde",
+ [0x02DD] = "hungarumlaut",
+ [0x02DE] = "rhotichookmod",
+ [0x02E0] = "gammasuperior",
+ [0x02E3] = "xsuperior",
+ [0x02E4] = "glottalstopreversedsuperior",
+ [0x02E5] = "tonebarextrahighmod",
+ [0x02E6] = "tonebarhighmod",
+ [0x02E7] = "tonebarmidmod",
+ [0x02E8] = "tonebarlowmod",
+ [0x02E9] = "tonebarextralowmod",
+ [0x0300] = "gravecomb",
+ [0x0301] = "acutecomb",
+ [0x0302] = "circumflexcmb",
+ [0x0303] = "tildecomb",
+ [0x0304] = "macroncmb",
+ [0x0305] = "overlinecmb",
+ [0x0306] = "brevecmb",
+ [0x0307] = "dotaccentcmb",
+ [0x0308] = "dieresiscmb",
+ [0x0309] = "hookcmb",
+ [0x030A] = "ringcmb",
+ [0x030B] = "hungarumlautcmb",
+ [0x030C] = "caroncmb",
+ [0x030D] = "verticallineabovecmb",
+ [0x030E] = "dblverticallineabovecmb",
+ [0x030F] = "dblgravecmb",
+ [0x0310] = "candrabinducmb",
+ [0x0311] = "breveinvertedcmb",
+ [0x0312] = "commaturnedabovecmb",
+ [0x0313] = "commaabovecmb",
+ [0x0314] = "commareversedabovecmb",
+ [0x0315] = "commaaboverightcmb",
+ [0x0316] = "gravebelowcmb",
+ [0x0317] = "acutebelowcmb",
+ [0x0318] = "lefttackbelowcmb",
+ [0x0319] = "righttackbelowcmb",
+ [0x031A] = "leftangleabovecmb",
+ [0x031B] = "horncmb",
+ [0x031C] = "ringhalfleftbelowcmb",
+ [0x031D] = "uptackbelowcmb",
+ [0x031E] = "downtackbelowcmb",
+ [0x031F] = "plusbelowcmb",
+ [0x0320] = "minusbelowcmb",
+ [0x0321] = "hookpalatalizedbelowcmb",
+ [0x0322] = "hookretroflexbelowcmb",
+ [0x0323] = "dotbelowcomb",
+ [0x0324] = "dieresisbelowcmb",
+ [0x0325] = "ringbelowcmb",
+ [0x0327] = "cedillacmb",
+ [0x0328] = "ogonekcmb",
+ [0x0329] = "verticallinebelowcmb",
+ [0x032A] = "bridgebelowcmb",
+ [0x032B] = "dblarchinvertedbelowcmb",
+ [0x032C] = "caronbelowcmb",
+ [0x032D] = "circumflexbelowcmb",
+ [0x032E] = "brevebelowcmb",
+ [0x032F] = "breveinvertedbelowcmb",
+ [0x0330] = "tildebelowcmb",
+ [0x0331] = "macronbelowcmb",
+ [0x0332] = "lowlinecmb",
+ [0x0333] = "dbllowlinecmb",
+ [0x0334] = "tildeoverlaycmb",
+ [0x0335] = "strokeshortoverlaycmb",
+ [0x0336] = "strokelongoverlaycmb",
+ [0x0337] = "solidusshortoverlaycmb",
+ [0x0338] = "soliduslongoverlaycmb",
+ [0x0339] = "ringhalfrightbelowcmb",
+ [0x033A] = "bridgeinvertedbelowcmb",
+ [0x033B] = "squarebelowcmb",
+ [0x033C] = "seagullbelowcmb",
+ [0x033D] = "xabovecmb",
+ [0x033E] = "tildeverticalcmb",
+ [0x033F] = "dbloverlinecmb",
+ [0x0340] = "gravetonecmb",
+ [0x0341] = "acutetonecmb",
+ [0x0342] = "perispomenigreekcmb",
+ [0x0343] = "koroniscmb",
+ [0x0344] = "dialytikatonoscmb",
+ [0x0345] = "ypogegrammenigreekcmb",
+ [0x0360] = "tildedoublecmb",
+ [0x0361] = "breveinverteddoublecmb",
+ [0x0374] = "numeralsigngreek",
+ [0x0375] = "numeralsignlowergreek",
+ [0x037A] = "ypogegrammeni",
+ [0x037E] = "questiongreek",
+ [0x0384] = "tonos",
+ [0x0385] = "dieresistonos",
+ [0x0386] = "Alphatonos",
+ [0x0387] = "anoteleia",
+ [0x0388] = "Epsilontonos",
+ [0x0389] = "Etatonos",
+ [0x038A] = "Iotatonos",
+ [0x038C] = "Omicrontonos",
+ [0x038E] = "Upsilontonos",
+ [0x038F] = "Omegatonos",
+ [0x0390] = "iotadieresistonos",
+ [0x0391] = "Alpha",
+ [0x0392] = "Beta",
+ [0x0393] = "Gamma",
+ [0x0394] = "Deltagreek",
+ [0x0395] = "Epsilon",
+ [0x0396] = "Zeta",
+ [0x0397] = "Eta",
+ [0x0398] = "Theta",
+ [0x0399] = "Iota",
+ [0x039A] = "Kappa",
+ [0x039B] = "Lambda",
+ [0x039C] = "Mu",
+ [0x039D] = "Nu",
+ [0x039E] = "Xi",
+ [0x039F] = "Omicron",
+ [0x03A0] = "Pi",
+ [0x03A1] = "Rho",
+ [0x03A3] = "Sigma",
+ [0x03A4] = "Tau",
+ [0x03A5] = "Upsilon",
+ [0x03A6] = "Phi",
+ [0x03A7] = "Chi",
+ [0x03A8] = "Psi",
+ [0x03A9] = "Omegagreek",
+ [0x03AA] = "Iotadieresis",
+ [0x03AB] = "Upsilondieresis",
+ [0x03AC] = "alphatonos",
+ [0x03AD] = "epsilontonos",
+ [0x03AE] = "etatonos",
+ [0x03AF] = "iotatonos",
+ [0x03B0] = "upsilondieresistonos",
+ [0x03B1] = "alpha",
+ [0x03B2] = "beta",
+ [0x03B3] = "gamma",
+ [0x03B4] = "delta",
+ [0x03B5] = "epsilon",
+ [0x03B6] = "zeta",
+ [0x03B7] = "eta",
+ [0x03B8] = "theta",
+ [0x03B9] = "iota",
+ [0x03BA] = "kappa",
+ [0x03BB] = "lambda",
+ [0x03BC] = "mugreek",
+ [0x03BD] = "nu",
+ [0x03BE] = "xi",
+ [0x03BF] = "omicron",
+ [0x03C0] = "pi",
+ [0x03C1] = "rho",
+ [0x03C2] = "sigmafinal",
+ [0x03C3] = "sigma",
+ [0x03C4] = "tau",
+ [0x03C5] = "upsilon",
+ [0x03C6] = "phi",
+ [0x03C7] = "chi",
+ [0x03C8] = "psi",
+ [0x03C9] = "omega",
+ [0x03CA] = "iotadieresis",
+ [0x03CB] = "upsilondieresis",
+ [0x03CC] = "omicrontonos",
+ [0x03CD] = "upsilontonos",
+ [0x03CE] = "omegatonos",
+ [0x03D0] = "betasymbolgreek",
+ [0x03D1] = "thetasymbolgreek",
+ [0x03D2] = "Upsilonhooksymbol",
+ [0x03D3] = "Upsilonacutehooksymbolgreek",
+ [0x03D4] = "Upsilondieresishooksymbolgreek",
+ [0x03D5] = "phisymbolgreek",
+ [0x03D6] = "pisymbolgreek",
+ [0x03DA] = "Stigmagreek",
+ [0x03DC] = "Digammagreek",
+ [0x03DE] = "Koppagreek",
+ [0x03E0] = "Sampigreek",
+ [0x03E2] = "Sheicoptic",
+ [0x03E3] = "sheicoptic",
+ [0x03E4] = "Feicoptic",
+ [0x03E5] = "feicoptic",
+ [0x03E6] = "Kheicoptic",
+ [0x03E7] = "kheicoptic",
+ [0x03E8] = "Horicoptic",
+ [0x03E9] = "horicoptic",
+ [0x03EA] = "Gangiacoptic",
+ [0x03EB] = "gangiacoptic",
+ [0x03EC] = "Shimacoptic",
+ [0x03ED] = "shimacoptic",
+ [0x03EE] = "Deicoptic",
+ [0x03EF] = "deicoptic",
+ [0x03F0] = "kappasymbolgreek",
+ [0x03F1] = "rhosymbolgreek",
+ [0x03F2] = "sigmalunatesymbolgreek",
+ [0x03F3] = "yotgreek",
+ [0x0401] = "afii10023",
+ [0x0402] = "afii10051",
+ [0x0403] = "afii10052",
+ [0x0404] = "afii10053",
+ [0x0405] = "afii10054",
+ [0x0406] = "afii10055",
+ [0x0407] = "afii10056",
+ [0x0408] = "afii10057",
+ [0x0409] = "afii10058",
+ [0x040A] = "afii10059",
+ [0x040B] = "afii10060",
+ [0x040C] = "afii10061",
+ [0x040E] = "afii10062",
+ [0x040F] = "afii10145",
+ [0x0410] = "afii10017",
+ [0x0411] = "afii10018",
+ [0x0412] = "afii10019",
+ [0x0413] = "afii10020",
+ [0x0414] = "afii10021",
+ [0x0415] = "afii10022",
+ [0x0416] = "afii10024",
+ [0x0417] = "afii10025",
+ [0x0418] = "afii10026",
+ [0x0419] = "afii10027",
+ [0x041A] = "afii10028",
+ [0x041B] = "afii10029",
+ [0x041C] = "afii10030",
+ [0x041D] = "afii10031",
+ [0x041E] = "afii10032",
+ [0x041F] = "afii10033",
+ [0x0420] = "afii10034",
+ [0x0421] = "afii10035",
+ [0x0422] = "afii10036",
+ [0x0423] = "afii10037",
+ [0x0424] = "afii10038",
+ [0x0425] = "afii10039",
+ [0x0426] = "afii10040",
+ [0x0427] = "afii10041",
+ [0x0428] = "afii10042",
+ [0x0429] = "afii10043",
+ [0x042A] = "afii10044",
+ [0x042B] = "afii10045",
+ [0x042C] = "afii10046",
+ [0x042D] = "afii10047",
+ [0x042E] = "afii10048",
+ [0x042F] = "afii10049",
+ [0x0430] = "afii10065",
+ [0x0431] = "becyrillic",
+ [0x0432] = "vecyrillic",
+ [0x0433] = "gecyrillic",
+ [0x0434] = "decyrillic",
+ [0x0435] = "iecyrillic",
+ [0x0436] = "zhecyrillic",
+ [0x0437] = "zecyrillic",
+ [0x0438] = "iicyrillic",
+ [0x0439] = "iishortcyrillic",
+ [0x043A] = "kacyrillic",
+ [0x043B] = "elcyrillic",
+ [0x043C] = "emcyrillic",
+ [0x043D] = "encyrillic",
+ [0x043E] = "ocyrillic",
+ [0x043F] = "pecyrillic",
+ [0x0440] = "ercyrillic",
+ [0x0441] = "escyrillic",
+ [0x0442] = "tecyrillic",
+ [0x0443] = "ucyrillic",
+ [0x0444] = "efcyrillic",
+ [0x0445] = "khacyrillic",
+ [0x0446] = "tsecyrillic",
+ [0x0447] = "checyrillic",
+ [0x0448] = "shacyrillic",
+ [0x0449] = "shchacyrillic",
+ [0x044A] = "hardsigncyrillic",
+ [0x044B] = "yericyrillic",
+ [0x044C] = "softsigncyrillic",
+ [0x044D] = "ereversedcyrillic",
+ [0x044E] = "iucyrillic",
+ [0x044F] = "iacyrillic",
+ [0x0451] = "iocyrillic",
+ [0x0452] = "djecyrillic",
+ [0x0453] = "gjecyrillic",
+ [0x0454] = "ecyrillic",
+ [0x0455] = "dzecyrillic",
+ [0x0456] = "icyrillic",
+ [0x0457] = "yicyrillic",
+ [0x0458] = "jecyrillic",
+ [0x0459] = "ljecyrillic",
+ [0x045A] = "njecyrillic",
+ [0x045B] = "tshecyrillic",
+ [0x045C] = "kjecyrillic",
+ [0x045E] = "ushortcyrillic",
+ [0x045F] = "dzhecyrillic",
+ [0x0460] = "Omegacyrillic",
+ [0x0461] = "omegacyrillic",
+ [0x0462] = "afii10146",
+ [0x0463] = "yatcyrillic",
+ [0x0464] = "Eiotifiedcyrillic",
+ [0x0465] = "eiotifiedcyrillic",
+ [0x0466] = "Yuslittlecyrillic",
+ [0x0467] = "yuslittlecyrillic",
+ [0x0468] = "Yuslittleiotifiedcyrillic",
+ [0x0469] = "yuslittleiotifiedcyrillic",
+ [0x046A] = "Yusbigcyrillic",
+ [0x046B] = "yusbigcyrillic",
+ [0x046C] = "Yusbigiotifiedcyrillic",
+ [0x046D] = "yusbigiotifiedcyrillic",
+ [0x046E] = "Ksicyrillic",
+ [0x046F] = "ksicyrillic",
+ [0x0470] = "Psicyrillic",
+ [0x0471] = "psicyrillic",
+ [0x0472] = "afii10147",
+ [0x0473] = "fitacyrillic",
+ [0x0474] = "afii10148",
+ [0x0475] = "izhitsacyrillic",
+ [0x0476] = "Izhitsadblgravecyrillic",
+ [0x0477] = "izhitsadblgravecyrillic",
+ [0x0478] = "Ukcyrillic",
+ [0x0479] = "ukcyrillic",
+ [0x047A] = "Omegaroundcyrillic",
+ [0x047B] = "omegaroundcyrillic",
+ [0x047C] = "Omegatitlocyrillic",
+ [0x047D] = "omegatitlocyrillic",
+ [0x047E] = "Otcyrillic",
+ [0x047F] = "otcyrillic",
+ [0x0480] = "Koppacyrillic",
+ [0x0481] = "koppacyrillic",
+ [0x0482] = "thousandcyrillic",
+ [0x0483] = "titlocyrilliccmb",
+ [0x0484] = "palatalizationcyrilliccmb",
+ [0x0485] = "dasiapneumatacyrilliccmb",
+ [0x0486] = "psilipneumatacyrilliccmb",
+ [0x0490] = "afii10050",
+ [0x0491] = "gheupturncyrillic",
+ [0x0492] = "Ghestrokecyrillic",
+ [0x0493] = "ghestrokecyrillic",
+ [0x0494] = "Ghemiddlehookcyrillic",
+ [0x0495] = "ghemiddlehookcyrillic",
+ [0x0496] = "Zhedescendercyrillic",
+ [0x0497] = "zhedescendercyrillic",
+ [0x0498] = "Zedescendercyrillic",
+ [0x0499] = "zedescendercyrillic",
+ [0x049A] = "Kadescendercyrillic",
+ [0x049B] = "kadescendercyrillic",
+ [0x049C] = "Kaverticalstrokecyrillic",
+ [0x049D] = "kaverticalstrokecyrillic",
+ [0x049E] = "Kastrokecyrillic",
+ [0x049F] = "kastrokecyrillic",
+ [0x04A0] = "Kabashkircyrillic",
+ [0x04A1] = "kabashkircyrillic",
+ [0x04A2] = "Endescendercyrillic",
+ [0x04A3] = "endescendercyrillic",
+ [0x04A4] = "Enghecyrillic",
+ [0x04A5] = "enghecyrillic",
+ [0x04A6] = "Pemiddlehookcyrillic",
+ [0x04A7] = "pemiddlehookcyrillic",
+ [0x04A8] = "Haabkhasiancyrillic",
+ [0x04A9] = "haabkhasiancyrillic",
+ [0x04AA] = "Esdescendercyrillic",
+ [0x04AB] = "esdescendercyrillic",
+ [0x04AC] = "Tedescendercyrillic",
+ [0x04AD] = "tedescendercyrillic",
+ [0x04AE] = "Ustraightcyrillic",
+ [0x04AF] = "ustraightcyrillic",
+ [0x04B0] = "Ustraightstrokecyrillic",
+ [0x04B1] = "ustraightstrokecyrillic",
+ [0x04B2] = "Hadescendercyrillic",
+ [0x04B3] = "hadescendercyrillic",
+ [0x04B4] = "Tetsecyrillic",
+ [0x04B5] = "tetsecyrillic",
+ [0x04B6] = "Chedescendercyrillic",
+ [0x04B7] = "chedescendercyrillic",
+ [0x04B8] = "Cheverticalstrokecyrillic",
+ [0x04B9] = "cheverticalstrokecyrillic",
+ [0x04BA] = "Shhacyrillic",
+ [0x04BB] = "shhacyrillic",
+ [0x04BC] = "Cheabkhasiancyrillic",
+ [0x04BD] = "cheabkhasiancyrillic",
+ [0x04BE] = "Chedescenderabkhasiancyrillic",
+ [0x04BF] = "chedescenderabkhasiancyrillic",
+ [0x04C0] = "palochkacyrillic",
+ [0x04C1] = "Zhebrevecyrillic",
+ [0x04C2] = "zhebrevecyrillic",
+ [0x04C3] = "Kahookcyrillic",
+ [0x04C4] = "kahookcyrillic",
+ [0x04C7] = "Enhookcyrillic",
+ [0x04C8] = "enhookcyrillic",
+ [0x04CB] = "Chekhakassiancyrillic",
+ [0x04CC] = "chekhakassiancyrillic",
+ [0x04D0] = "Abrevecyrillic",
+ [0x04D1] = "abrevecyrillic",
+ [0x04D2] = "Adieresiscyrillic",
+ [0x04D3] = "adieresiscyrillic",
+ [0x04D4] = "Aiecyrillic",
+ [0x04D5] = "aiecyrillic",
+ [0x04D6] = "Iebrevecyrillic",
+ [0x04D7] = "iebrevecyrillic",
+ [0x04D8] = "Schwacyrillic",
+ [0x04D9] = "schwacyrillic",
+ [0x04DA] = "Schwadieresiscyrillic",
+ [0x04DB] = "schwadieresiscyrillic",
+ [0x04DC] = "Zhedieresiscyrillic",
+ [0x04DD] = "zhedieresiscyrillic",
+ [0x04DE] = "Zedieresiscyrillic",
+ [0x04DF] = "zedieresiscyrillic",
+ [0x04E0] = "Dzeabkhasiancyrillic",
+ [0x04E1] = "dzeabkhasiancyrillic",
+ [0x04E2] = "Imacroncyrillic",
+ [0x04E3] = "imacroncyrillic",
+ [0x04E4] = "Idieresiscyrillic",
+ [0x04E5] = "idieresiscyrillic",
+ [0x04E6] = "Odieresiscyrillic",
+ [0x04E7] = "odieresiscyrillic",
+ [0x04E8] = "Obarredcyrillic",
+ [0x04E9] = "obarredcyrillic",
+ [0x04EA] = "Obarreddieresiscyrillic",
+ [0x04EB] = "obarreddieresiscyrillic",
+ [0x04EE] = "Umacroncyrillic",
+ [0x04EF] = "umacroncyrillic",
+ [0x04F0] = "Udieresiscyrillic",
+ [0x04F1] = "udieresiscyrillic",
+ [0x04F2] = "Uhungarumlautcyrillic",
+ [0x04F3] = "uhungarumlautcyrillic",
+ [0x04F4] = "Chedieresiscyrillic",
+ [0x04F5] = "chedieresiscyrillic",
+ [0x04F8] = "Yerudieresiscyrillic",
+ [0x04F9] = "yerudieresiscyrillic",
+ [0x0531] = "Aybarmenian",
+ [0x0532] = "Benarmenian",
+ [0x0533] = "Gimarmenian",
+ [0x0534] = "Daarmenian",
+ [0x0535] = "Echarmenian",
+ [0x0536] = "Zaarmenian",
+ [0x0537] = "Eharmenian",
+ [0x0538] = "Etarmenian",
+ [0x0539] = "Toarmenian",
+ [0x053A] = "Zhearmenian",
+ [0x053B] = "Iniarmenian",
+ [0x053C] = "Liwnarmenian",
+ [0x053D] = "Xeharmenian",
+ [0x053E] = "Caarmenian",
+ [0x053F] = "Kenarmenian",
+ [0x0540] = "Hoarmenian",
+ [0x0541] = "Jaarmenian",
+ [0x0542] = "Ghadarmenian",
+ [0x0543] = "Cheharmenian",
+ [0x0544] = "Menarmenian",
+ [0x0545] = "Yiarmenian",
+ [0x0546] = "Nowarmenian",
+ [0x0547] = "Shaarmenian",
+ [0x0548] = "Voarmenian",
+ [0x0549] = "Chaarmenian",
+ [0x054A] = "Peharmenian",
+ [0x054B] = "Jheharmenian",
+ [0x054C] = "Raarmenian",
+ [0x054D] = "Seharmenian",
+ [0x054E] = "Vewarmenian",
+ [0x054F] = "Tiwnarmenian",
+ [0x0550] = "Reharmenian",
+ [0x0551] = "Coarmenian",
+ [0x0552] = "Yiwnarmenian",
+ [0x0553] = "Piwrarmenian",
+ [0x0554] = "Keharmenian",
+ [0x0555] = "Oharmenian",
+ [0x0556] = "Feharmenian",
+ [0x0559] = "ringhalfleftarmenian",
+ [0x055A] = "apostrophearmenian",
+ [0x055B] = "emphasismarkarmenian",
+ [0x055C] = "exclamarmenian",
+ [0x055D] = "commaarmenian",
+ [0x055E] = "questionarmenian",
+ [0x055F] = "abbreviationmarkarmenian",
+ [0x0561] = "aybarmenian",
+ [0x0562] = "benarmenian",
+ [0x0563] = "gimarmenian",
+ [0x0564] = "daarmenian",
+ [0x0565] = "echarmenian",
+ [0x0566] = "zaarmenian",
+ [0x0567] = "eharmenian",
+ [0x0568] = "etarmenian",
+ [0x0569] = "toarmenian",
+ [0x056A] = "zhearmenian",
+ [0x056B] = "iniarmenian",
+ [0x056C] = "liwnarmenian",
+ [0x056D] = "xeharmenian",
+ [0x056E] = "caarmenian",
+ [0x056F] = "kenarmenian",
+ [0x0570] = "hoarmenian",
+ [0x0571] = "jaarmenian",
+ [0x0572] = "ghadarmenian",
+ [0x0573] = "cheharmenian",
+ [0x0574] = "menarmenian",
+ [0x0575] = "yiarmenian",
+ [0x0576] = "nowarmenian",
+ [0x0577] = "shaarmenian",
+ [0x0578] = "voarmenian",
+ [0x0579] = "chaarmenian",
+ [0x057A] = "peharmenian",
+ [0x057B] = "jheharmenian",
+ [0x057C] = "raarmenian",
+ [0x057D] = "seharmenian",
+ [0x057E] = "vewarmenian",
+ [0x057F] = "tiwnarmenian",
+ [0x0580] = "reharmenian",
+ [0x0581] = "coarmenian",
+ [0x0582] = "yiwnarmenian",
+ [0x0583] = "piwrarmenian",
+ [0x0584] = "keharmenian",
+ [0x0585] = "oharmenian",
+ [0x0586] = "feharmenian",
+ [0x0587] = "echyiwnarmenian",
+ [0x0589] = "periodarmenian",
+ [0x0591] = "etnahtalefthebrew",
+ [0x0592] = "segoltahebrew",
+ [0x0593] = "shalshelethebrew",
+ [0x0594] = "zaqefqatanhebrew",
+ [0x0595] = "zaqefgadolhebrew",
+ [0x0596] = "tipehalefthebrew",
+ [0x0597] = "reviamugrashhebrew",
+ [0x0598] = "zarqahebrew",
+ [0x0599] = "pashtahebrew",
+ [0x059A] = "yetivhebrew",
+ [0x059B] = "tevirlefthebrew",
+ [0x059C] = "gereshaccenthebrew",
+ [0x059D] = "gereshmuqdamhebrew",
+ [0x059E] = "gershayimaccenthebrew",
+ [0x059F] = "qarneyparahebrew",
+ [0x05A0] = "telishagedolahebrew",
+ [0x05A1] = "pazerhebrew",
+ [0x05A3] = "munahlefthebrew",
+ [0x05A4] = "mahapakhlefthebrew",
+ [0x05A5] = "merkhalefthebrew",
+ [0x05A6] = "merkhakefulalefthebrew",
+ [0x05A7] = "dargalefthebrew",
+ [0x05A8] = "qadmahebrew",
+ [0x05A9] = "telishaqetanahebrew",
+ [0x05AA] = "yerahbenyomolefthebrew",
+ [0x05AB] = "olehebrew",
+ [0x05AC] = "iluyhebrew",
+ [0x05AD] = "dehihebrew",
+ [0x05AE] = "zinorhebrew",
+ [0x05AF] = "masoracirclehebrew",
+ [0x05B0] = "shevawidehebrew",
+ [0x05B1] = "hatafsegolwidehebrew",
+ [0x05B2] = "hatafpatahwidehebrew",
+ [0x05B3] = "hatafqamatswidehebrew",
+ [0x05B4] = "hiriqwidehebrew",
+ [0x05B5] = "tserewidehebrew",
+ [0x05B6] = "segolwidehebrew",
+ [0x05B7] = "patahwidehebrew",
+ [0x05B8] = "qamatswidehebrew",
+ [0x05B9] = "holamwidehebrew",
+ [0x05BB] = "qubutswidehebrew",
+ [0x05BC] = "dageshhebrew",
+ [0x05BD] = "siluqlefthebrew",
+ [0x05BE] = "maqafhebrew",
+ [0x05BF] = "rafehebrew",
+ [0x05C0] = "paseqhebrew",
+ [0x05C1] = "shindothebrew",
+ [0x05C2] = "sindothebrew",
+ [0x05C3] = "sofpasuqhebrew",
+ [0x05C4] = "upperdothebrew",
+ [0x05D0] = "alefhebrew",
+ [0x05D1] = "bethebrew",
+ [0x05D2] = "gimelhebrew",
+ [0x05D3] = "dalettserehebrew",
+ [0x05D4] = "hehebrew",
+ [0x05D5] = "vavhebrew",
+ [0x05D6] = "zayinhebrew",
+ [0x05D7] = "hethebrew",
+ [0x05D8] = "tethebrew",
+ [0x05D9] = "yodhebrew",
+ [0x05DA] = "finalkafshevahebrew",
+ [0x05DB] = "kafhebrew",
+ [0x05DC] = "lamedholamhebrew",
+ [0x05DD] = "finalmemhebrew",
+ [0x05DE] = "memhebrew",
+ [0x05DF] = "finalnunhebrew",
+ [0x05E0] = "nunhebrew",
+ [0x05E1] = "samekhhebrew",
+ [0x05E2] = "ayinhebrew",
+ [0x05E3] = "finalpehebrew",
+ [0x05E4] = "pehebrew",
+ [0x05E5] = "finaltsadihebrew",
+ [0x05E6] = "tsadihebrew",
+ [0x05E7] = "qoftserehebrew",
+ [0x05E8] = "reshtserehebrew",
+ [0x05E9] = "shinhebrew",
+ [0x05EA] = "tavhebrew",
+ [0x05F0] = "vavvavhebrew",
+ [0x05F1] = "vavyodhebrew",
+ [0x05F2] = "yodyodhebrew",
+ [0x05F3] = "gereshhebrew",
+ [0x05F4] = "gershayimhebrew",
+ [0x060C] = "commaarabic",
+ [0x061B] = "semicolonarabic",
+ [0x061F] = "questionarabic",
+ [0x0621] = "hamzasukunarabic",
+ [0x0622] = "alefmaddaabovearabic",
+ [0x0623] = "alefhamzaabovearabic",
+ [0x0624] = "wawhamzaabovearabic",
+ [0x0625] = "alefhamzabelowarabic",
+ [0x0626] = "yehhamzaabovearabic",
+ [0x0627] = "alefarabic",
+ [0x0628] = "beharabic",
+ [0x0629] = "tehmarbutaarabic",
+ [0x062A] = "teharabic",
+ [0x062B] = "theharabic",
+ [0x062C] = "jeemarabic",
+ [0x062D] = "haharabic",
+ [0x062E] = "khaharabic",
+ [0x062F] = "dalarabic",
+ [0x0630] = "thalarabic",
+ [0x0631] = "rehyehaleflamarabic",
+ [0x0632] = "zainarabic",
+ [0x0633] = "seenarabic",
+ [0x0634] = "sheenarabic",
+ [0x0635] = "sadarabic",
+ [0x0636] = "dadarabic",
+ [0x0637] = "taharabic",
+ [0x0638] = "zaharabic",
+ [0x0639] = "ainarabic",
+ [0x063A] = "ghainarabic",
+ [0x0640] = "tatweelarabic",
+ [0x0641] = "feharabic",
+ [0x0642] = "qafarabic",
+ [0x0643] = "kafarabic",
+ [0x0644] = "lamarabic",
+ [0x0645] = "meemarabic",
+ [0x0646] = "noonarabic",
+ [0x0647] = "heharabic",
+ [0x0648] = "wawarabic",
+ [0x0649] = "alefmaksuraarabic",
+ [0x064A] = "yeharabic",
+ [0x064B] = "fathatanarabic",
+ [0x064C] = "dammatanarabic",
+ [0x064D] = "kasratanarabic",
+ [0x064E] = "fathalowarabic",
+ [0x064F] = "dammalowarabic",
+ [0x0650] = "kasraarabic",
+ [0x0651] = "shaddafathatanarabic",
+ [0x0652] = "sukunarabic",
+ [0x0660] = "zerohackarabic",
+ [0x0661] = "onehackarabic",
+ [0x0662] = "twohackarabic",
+ [0x0663] = "threehackarabic",
+ [0x0664] = "fourhackarabic",
+ [0x0665] = "fivehackarabic",
+ [0x0666] = "sixhackarabic",
+ [0x0667] = "sevenhackarabic",
+ [0x0668] = "eighthackarabic",
+ [0x0669] = "ninehackarabic",
+ [0x066A] = "percentarabic",
+ [0x066B] = "decimalseparatorpersian",
+ [0x066C] = "thousandsseparatorpersian",
+ [0x066D] = "asteriskarabic",
+ [0x0679] = "tteharabic",
+ [0x067E] = "peharabic",
+ [0x0686] = "tcheharabic",
+ [0x0688] = "ddalarabic",
+ [0x0691] = "rreharabic",
+ [0x0698] = "jeharabic",
+ [0x06A4] = "veharabic",
+ [0x06AF] = "gafarabic",
+ [0x06BA] = "noonghunnaarabic",
+ [0x06C1] = "hehaltonearabic",
+ [0x06D1] = "yehthreedotsbelowarabic",
+ [0x06D2] = "yehbarreearabic",
+ [0x06D5] = "afii57534",
+ [0x06F0] = "zeropersian",
+ [0x06F1] = "onepersian",
+ [0x06F2] = "twopersian",
+ [0x06F3] = "threepersian",
+ [0x06F4] = "fourpersian",
+ [0x06F5] = "fivepersian",
+ [0x06F6] = "sixpersian",
+ [0x06F7] = "sevenpersian",
+ [0x06F8] = "eightpersian",
+ [0x06F9] = "ninepersian",
+ [0x0901] = "candrabindudeva",
+ [0x0902] = "anusvaradeva",
+ [0x0903] = "visargadeva",
+ [0x0905] = "adeva",
+ [0x0906] = "aadeva",
+ [0x0907] = "ideva",
+ [0x0908] = "iideva",
+ [0x0909] = "udeva",
+ [0x090A] = "uudeva",
+ [0x090B] = "rvocalicdeva",
+ [0x090C] = "lvocalicdeva",
+ [0x090D] = "ecandradeva",
+ [0x090E] = "eshortdeva",
+ [0x090F] = "edeva",
+ [0x0910] = "aideva",
+ [0x0911] = "ocandradeva",
+ [0x0912] = "oshortdeva",
+ [0x0913] = "odeva",
+ [0x0914] = "audeva",
+ [0x0915] = "kadeva",
+ [0x0916] = "khadeva",
+ [0x0917] = "gadeva",
+ [0x0918] = "ghadeva",
+ [0x0919] = "ngadeva",
+ [0x091A] = "cadeva",
+ [0x091B] = "chadeva",
+ [0x091C] = "jadeva",
+ [0x091D] = "jhadeva",
+ [0x091E] = "nyadeva",
+ [0x091F] = "ttadeva",
+ [0x0920] = "tthadeva",
+ [0x0921] = "ddadeva",
+ [0x0922] = "ddhadeva",
+ [0x0923] = "nnadeva",
+ [0x0924] = "tadeva",
+ [0x0925] = "thadeva",
+ [0x0926] = "dadeva",
+ [0x0927] = "dhadeva",
+ [0x0928] = "nadeva",
+ [0x0929] = "nnnadeva",
+ [0x092A] = "padeva",
+ [0x092B] = "phadeva",
+ [0x092C] = "badeva",
+ [0x092D] = "bhadeva",
+ [0x092E] = "madeva",
+ [0x092F] = "yadeva",
+ [0x0930] = "radeva",
+ [0x0931] = "rradeva",
+ [0x0932] = "ladeva",
+ [0x0933] = "lladeva",
+ [0x0934] = "llladeva",
+ [0x0935] = "vadeva",
+ [0x0936] = "shadeva",
+ [0x0937] = "ssadeva",
+ [0x0938] = "sadeva",
+ [0x0939] = "hadeva",
+ [0x093C] = "nuktadeva",
+ [0x093D] = "avagrahadeva",
+ [0x093E] = "aavowelsigndeva",
+ [0x093F] = "ivowelsigndeva",
+ [0x0940] = "iivowelsigndeva",
+ [0x0941] = "uvowelsigndeva",
+ [0x0942] = "uuvowelsigndeva",
+ [0x0943] = "rvocalicvowelsigndeva",
+ [0x0944] = "rrvocalicvowelsigndeva",
+ [0x0945] = "ecandravowelsigndeva",
+ [0x0946] = "eshortvowelsigndeva",
+ [0x0947] = "evowelsigndeva",
+ [0x0948] = "aivowelsigndeva",
+ [0x0949] = "ocandravowelsigndeva",
+ [0x094A] = "oshortvowelsigndeva",
+ [0x094B] = "ovowelsigndeva",
+ [0x094C] = "auvowelsigndeva",
+ [0x094D] = "viramadeva",
+ [0x0950] = "omdeva",
+ [0x0951] = "udattadeva",
+ [0x0952] = "anudattadeva",
+ [0x0953] = "gravedeva",
+ [0x0954] = "acutedeva",
+ [0x0958] = "qadeva",
+ [0x0959] = "khhadeva",
+ [0x095A] = "ghhadeva",
+ [0x095B] = "zadeva",
+ [0x095C] = "dddhadeva",
+ [0x095D] = "rhadeva",
+ [0x095E] = "fadeva",
+ [0x095F] = "yyadeva",
+ [0x0960] = "rrvocalicdeva",
+ [0x0961] = "llvocalicdeva",
+ [0x0962] = "lvocalicvowelsigndeva",
+ [0x0963] = "llvocalicvowelsigndeva",
+ [0x0964] = "danda",
+ [0x0965] = "dbldanda",
+ [0x0966] = "zerodeva",
+ [0x0967] = "onedeva",
+ [0x0968] = "twodeva",
+ [0x0969] = "threedeva",
+ [0x096A] = "fourdeva",
+ [0x096B] = "fivedeva",
+ [0x096C] = "sixdeva",
+ [0x096D] = "sevendeva",
+ [0x096E] = "eightdeva",
+ [0x096F] = "ninedeva",
+ [0x0970] = "abbreviationsigndeva",
+ [0x0981] = "candrabindubengali",
+ [0x0982] = "anusvarabengali",
+ [0x0983] = "visargabengali",
+ [0x0985] = "abengali",
+ [0x0986] = "aabengali",
+ [0x0987] = "ibengali",
+ [0x0988] = "iibengali",
+ [0x0989] = "ubengali",
+ [0x098A] = "uubengali",
+ [0x098B] = "rvocalicbengali",
+ [0x098C] = "lvocalicbengali",
+ [0x098F] = "ebengali",
+ [0x0990] = "aibengali",
+ [0x0993] = "obengali",
+ [0x0994] = "aubengali",
+ [0x0995] = "kabengali",
+ [0x0996] = "khabengali",
+ [0x0997] = "gabengali",
+ [0x0998] = "ghabengali",
+ [0x0999] = "ngabengali",
+ [0x099A] = "cabengali",
+ [0x099B] = "chabengali",
+ [0x099C] = "jabengali",
+ [0x099D] = "jhabengali",
+ [0x099E] = "nyabengali",
+ [0x099F] = "ttabengali",
+ [0x09A0] = "tthabengali",
+ [0x09A1] = "ddabengali",
+ [0x09A2] = "ddhabengali",
+ [0x09A3] = "nnabengali",
+ [0x09A4] = "tabengali",
+ [0x09A5] = "thabengali",
+ [0x09A6] = "dabengali",
+ [0x09A7] = "dhabengali",
+ [0x09A8] = "nabengali",
+ [0x09AA] = "pabengali",
+ [0x09AB] = "phabengali",
+ [0x09AC] = "babengali",
+ [0x09AD] = "bhabengali",
+ [0x09AE] = "mabengali",
+ [0x09AF] = "yabengali",
+ [0x09B0] = "rabengali",
+ [0x09B2] = "labengali",
+ [0x09B6] = "shabengali",
+ [0x09B7] = "ssabengali",
+ [0x09B8] = "sabengali",
+ [0x09B9] = "habengali",
+ [0x09BC] = "nuktabengali",
+ [0x09BE] = "aavowelsignbengali",
+ [0x09BF] = "ivowelsignbengali",
+ [0x09C0] = "iivowelsignbengali",
+ [0x09C1] = "uvowelsignbengali",
+ [0x09C2] = "uuvowelsignbengali",
+ [0x09C3] = "rvocalicvowelsignbengali",
+ [0x09C4] = "rrvocalicvowelsignbengali",
+ [0x09C7] = "evowelsignbengali",
+ [0x09C8] = "aivowelsignbengali",
+ [0x09CB] = "ovowelsignbengali",
+ [0x09CC] = "auvowelsignbengali",
+ [0x09CD] = "viramabengali",
+ [0x09D7] = "aulengthmarkbengali",
+ [0x09DC] = "rrabengali",
+ [0x09DD] = "rhabengali",
+ [0x09DF] = "yyabengali",
+ [0x09E0] = "rrvocalicbengali",
+ [0x09E1] = "llvocalicbengali",
+ [0x09E2] = "lvocalicvowelsignbengali",
+ [0x09E3] = "llvocalicvowelsignbengali",
+ [0x09E6] = "zerobengali",
+ [0x09E7] = "onebengali",
+ [0x09E8] = "twobengali",
+ [0x09E9] = "threebengali",
+ [0x09EA] = "fourbengali",
+ [0x09EB] = "fivebengali",
+ [0x09EC] = "sixbengali",
+ [0x09ED] = "sevenbengali",
+ [0x09EE] = "eightbengali",
+ [0x09EF] = "ninebengali",
+ [0x09F0] = "ramiddlediagonalbengali",
+ [0x09F1] = "ralowerdiagonalbengali",
+ [0x09F2] = "rupeemarkbengali",
+ [0x09F3] = "rupeesignbengali",
+ [0x09F4] = "onenumeratorbengali",
+ [0x09F5] = "twonumeratorbengali",
+ [0x09F6] = "threenumeratorbengali",
+ [0x09F7] = "fournumeratorbengali",
+ [0x09F8] = "denominatorminusonenumeratorbengali",
+ [0x09F9] = "sixteencurrencydenominatorbengali",
+ [0x09FA] = "issharbengali",
+ [0x0A02] = "bindigurmukhi",
+ [0x0A05] = "agurmukhi",
+ [0x0A06] = "aagurmukhi",
+ [0x0A07] = "igurmukhi",
+ [0x0A08] = "iigurmukhi",
+ [0x0A09] = "ugurmukhi",
+ [0x0A0A] = "uugurmukhi",
+ [0x0A0F] = "eegurmukhi",
+ [0x0A10] = "aigurmukhi",
+ [0x0A13] = "oogurmukhi",
+ [0x0A14] = "augurmukhi",
+ [0x0A15] = "kagurmukhi",
+ [0x0A16] = "khagurmukhi",
+ [0x0A17] = "gagurmukhi",
+ [0x0A18] = "ghagurmukhi",
+ [0x0A19] = "ngagurmukhi",
+ [0x0A1A] = "cagurmukhi",
+ [0x0A1B] = "chagurmukhi",
+ [0x0A1C] = "jagurmukhi",
+ [0x0A1D] = "jhagurmukhi",
+ [0x0A1E] = "nyagurmukhi",
+ [0x0A1F] = "ttagurmukhi",
+ [0x0A20] = "tthagurmukhi",
+ [0x0A21] = "ddagurmukhi",
+ [0x0A22] = "ddhagurmukhi",
+ [0x0A23] = "nnagurmukhi",
+ [0x0A24] = "tagurmukhi",
+ [0x0A25] = "thagurmukhi",
+ [0x0A26] = "dagurmukhi",
+ [0x0A27] = "dhagurmukhi",
+ [0x0A28] = "nagurmukhi",
+ [0x0A2A] = "pagurmukhi",
+ [0x0A2B] = "phagurmukhi",
+ [0x0A2C] = "bagurmukhi",
+ [0x0A2D] = "bhagurmukhi",
+ [0x0A2E] = "magurmukhi",
+ [0x0A2F] = "yagurmukhi",
+ [0x0A30] = "ragurmukhi",
+ [0x0A32] = "lagurmukhi",
+ [0x0A35] = "vagurmukhi",
+ [0x0A36] = "shagurmukhi",
+ [0x0A38] = "sagurmukhi",
+ [0x0A39] = "hagurmukhi",
+ [0x0A3C] = "nuktagurmukhi",
+ [0x0A3E] = "aamatragurmukhi",
+ [0x0A3F] = "imatragurmukhi",
+ [0x0A40] = "iimatragurmukhi",
+ [0x0A41] = "umatragurmukhi",
+ [0x0A42] = "uumatragurmukhi",
+ [0x0A47] = "eematragurmukhi",
+ [0x0A48] = "aimatragurmukhi",
+ [0x0A4B] = "oomatragurmukhi",
+ [0x0A4C] = "aumatragurmukhi",
+ [0x0A4D] = "halantgurmukhi",
+ [0x0A59] = "khhagurmukhi",
+ [0x0A5A] = "ghhagurmukhi",
+ [0x0A5B] = "zagurmukhi",
+ [0x0A5C] = "rragurmukhi",
+ [0x0A5E] = "fagurmukhi",
+ [0x0A66] = "zerogurmukhi",
+ [0x0A67] = "onegurmukhi",
+ [0x0A68] = "twogurmukhi",
+ [0x0A69] = "threegurmukhi",
+ [0x0A6A] = "fourgurmukhi",
+ [0x0A6B] = "fivegurmukhi",
+ [0x0A6C] = "sixgurmukhi",
+ [0x0A6D] = "sevengurmukhi",
+ [0x0A6E] = "eightgurmukhi",
+ [0x0A6F] = "ninegurmukhi",
+ [0x0A70] = "tippigurmukhi",
+ [0x0A71] = "addakgurmukhi",
+ [0x0A72] = "irigurmukhi",
+ [0x0A73] = "uragurmukhi",
+ [0x0A74] = "ekonkargurmukhi",
+ [0x0A81] = "candrabindugujarati",
+ [0x0A82] = "anusvaragujarati",
+ [0x0A83] = "visargagujarati",
+ [0x0A85] = "agujarati",
+ [0x0A86] = "aagujarati",
+ [0x0A87] = "igujarati",
+ [0x0A88] = "iigujarati",
+ [0x0A89] = "ugujarati",
+ [0x0A8A] = "uugujarati",
+ [0x0A8B] = "rvocalicgujarati",
+ [0x0A8D] = "ecandragujarati",
+ [0x0A8F] = "egujarati",
+ [0x0A90] = "aigujarati",
+ [0x0A91] = "ocandragujarati",
+ [0x0A93] = "ogujarati",
+ [0x0A94] = "augujarati",
+ [0x0A95] = "kagujarati",
+ [0x0A96] = "khagujarati",
+ [0x0A97] = "gagujarati",
+ [0x0A98] = "ghagujarati",
+ [0x0A99] = "ngagujarati",
+ [0x0A9A] = "cagujarati",
+ [0x0A9B] = "chagujarati",
+ [0x0A9C] = "jagujarati",
+ [0x0A9D] = "jhagujarati",
+ [0x0A9E] = "nyagujarati",
+ [0x0A9F] = "ttagujarati",
+ [0x0AA0] = "tthagujarati",
+ [0x0AA1] = "ddagujarati",
+ [0x0AA2] = "ddhagujarati",
+ [0x0AA3] = "nnagujarati",
+ [0x0AA4] = "tagujarati",
+ [0x0AA5] = "thagujarati",
+ [0x0AA6] = "dagujarati",
+ [0x0AA7] = "dhagujarati",
+ [0x0AA8] = "nagujarati",
+ [0x0AAA] = "pagujarati",
+ [0x0AAB] = "phagujarati",
+ [0x0AAC] = "bagujarati",
+ [0x0AAD] = "bhagujarati",
+ [0x0AAE] = "magujarati",
+ [0x0AAF] = "yagujarati",
+ [0x0AB0] = "ragujarati",
+ [0x0AB2] = "lagujarati",
+ [0x0AB3] = "llagujarati",
+ [0x0AB5] = "vagujarati",
+ [0x0AB6] = "shagujarati",
+ [0x0AB7] = "ssagujarati",
+ [0x0AB8] = "sagujarati",
+ [0x0AB9] = "hagujarati",
+ [0x0ABC] = "nuktagujarati",
+ [0x0ABE] = "aavowelsigngujarati",
+ [0x0ABF] = "ivowelsigngujarati",
+ [0x0AC0] = "iivowelsigngujarati",
+ [0x0AC1] = "uvowelsigngujarati",
+ [0x0AC2] = "uuvowelsigngujarati",
+ [0x0AC3] = "rvocalicvowelsigngujarati",
+ [0x0AC4] = "rrvocalicvowelsigngujarati",
+ [0x0AC5] = "ecandravowelsigngujarati",
+ [0x0AC7] = "evowelsigngujarati",
+ [0x0AC8] = "aivowelsigngujarati",
+ [0x0AC9] = "ocandravowelsigngujarati",
+ [0x0ACB] = "ovowelsigngujarati",
+ [0x0ACC] = "auvowelsigngujarati",
+ [0x0ACD] = "viramagujarati",
+ [0x0AD0] = "omgujarati",
+ [0x0AE0] = "rrvocalicgujarati",
+ [0x0AE6] = "zerogujarati",
+ [0x0AE7] = "onegujarati",
+ [0x0AE8] = "twogujarati",
+ [0x0AE9] = "threegujarati",
+ [0x0AEA] = "fourgujarati",
+ [0x0AEB] = "fivegujarati",
+ [0x0AEC] = "sixgujarati",
+ [0x0AED] = "sevengujarati",
+ [0x0AEE] = "eightgujarati",
+ [0x0AEF] = "ninegujarati",
+ [0x0E01] = "kokaithai",
+ [0x0E02] = "khokhaithai",
+ [0x0E03] = "khokhuatthai",
+ [0x0E04] = "khokhwaithai",
+ [0x0E05] = "khokhonthai",
+ [0x0E06] = "khorakhangthai",
+ [0x0E07] = "ngonguthai",
+ [0x0E08] = "chochanthai",
+ [0x0E09] = "chochingthai",
+ [0x0E0A] = "chochangthai",
+ [0x0E0B] = "sosothai",
+ [0x0E0C] = "chochoethai",
+ [0x0E0D] = "yoyingthai",
+ [0x0E0E] = "dochadathai",
+ [0x0E0F] = "topatakthai",
+ [0x0E10] = "thothanthai",
+ [0x0E11] = "thonangmonthothai",
+ [0x0E12] = "thophuthaothai",
+ [0x0E13] = "nonenthai",
+ [0x0E14] = "dodekthai",
+ [0x0E15] = "totaothai",
+ [0x0E16] = "thothungthai",
+ [0x0E17] = "thothahanthai",
+ [0x0E18] = "thothongthai",
+ [0x0E19] = "nonuthai",
+ [0x0E1A] = "bobaimaithai",
+ [0x0E1B] = "poplathai",
+ [0x0E1C] = "phophungthai",
+ [0x0E1D] = "fofathai",
+ [0x0E1E] = "phophanthai",
+ [0x0E1F] = "fofanthai",
+ [0x0E20] = "phosamphaothai",
+ [0x0E21] = "momathai",
+ [0x0E22] = "yoyakthai",
+ [0x0E23] = "roruathai",
+ [0x0E24] = "ruthai",
+ [0x0E25] = "lolingthai",
+ [0x0E26] = "luthai",
+ [0x0E27] = "wowaenthai",
+ [0x0E28] = "sosalathai",
+ [0x0E29] = "sorusithai",
+ [0x0E2A] = "sosuathai",
+ [0x0E2B] = "hohipthai",
+ [0x0E2C] = "lochulathai",
+ [0x0E2D] = "oangthai",
+ [0x0E2E] = "honokhukthai",
+ [0x0E2F] = "paiyannoithai",
+ [0x0E30] = "saraathai",
+ [0x0E31] = "maihanakatthai",
+ [0x0E32] = "saraaathai",
+ [0x0E33] = "saraamthai",
+ [0x0E34] = "saraithai",
+ [0x0E35] = "saraiithai",
+ [0x0E36] = "sarauethai",
+ [0x0E37] = "saraueethai",
+ [0x0E38] = "sarauthai",
+ [0x0E39] = "sarauuthai",
+ [0x0E3A] = "phinthuthai",
+ [0x0E3F] = "bahtthai",
+ [0x0E40] = "saraethai",
+ [0x0E41] = "saraaethai",
+ [0x0E42] = "saraothai",
+ [0x0E43] = "saraaimaimuanthai",
+ [0x0E44] = "saraaimaimalaithai",
+ [0x0E45] = "lakkhangyaothai",
+ [0x0E46] = "maiyamokthai",
+ [0x0E47] = "maitaikhuthai",
+ [0x0E48] = "maiekthai",
+ [0x0E49] = "maithothai",
+ [0x0E4A] = "maitrithai",
+ [0x0E4B] = "maichattawathai",
+ [0x0E4C] = "thanthakhatthai",
+ [0x0E4D] = "nikhahitthai",
+ [0x0E4E] = "yamakkanthai",
+ [0x0E4F] = "fongmanthai",
+ [0x0E50] = "zerothai",
+ [0x0E51] = "onethai",
+ [0x0E52] = "twothai",
+ [0x0E53] = "threethai",
+ [0x0E54] = "fourthai",
+ [0x0E55] = "fivethai",
+ [0x0E56] = "sixthai",
+ [0x0E57] = "seventhai",
+ [0x0E58] = "eightthai",
+ [0x0E59] = "ninethai",
+ [0x0E5A] = "angkhankhuthai",
+ [0x0E5B] = "khomutthai",
+ [0x1E00] = "Aringbelow",
+ [0x1E01] = "aringbelow",
+ [0x1E02] = "Bdotaccent",
+ [0x1E03] = "bdotaccent",
+ [0x1E04] = "Bdotbelow",
+ [0x1E05] = "bdotbelow",
+ [0x1E06] = "Blinebelow",
+ [0x1E07] = "blinebelow",
+ [0x1E08] = "Ccedillaacute",
+ [0x1E09] = "ccedillaacute",
+ [0x1E0A] = "Ddotaccent",
+ [0x1E0B] = "ddotaccent",
+ [0x1E0C] = "Ddotbelow",
+ [0x1E0D] = "ddotbelow",
+ [0x1E0E] = "Dlinebelow",
+ [0x1E0F] = "dlinebelow",
+ [0x1E10] = "Dcedilla",
+ [0x1E11] = "dcedilla",
+ [0x1E12] = "Dcircumflexbelow",
+ [0x1E13] = "dcircumflexbelow",
+ [0x1E14] = "Emacrongrave",
+ [0x1E15] = "emacrongrave",
+ [0x1E16] = "Emacronacute",
+ [0x1E17] = "emacronacute",
+ [0x1E18] = "Ecircumflexbelow",
+ [0x1E19] = "ecircumflexbelow",
+ [0x1E1A] = "Etildebelow",
+ [0x1E1B] = "etildebelow",
+ [0x1E1C] = "Ecedillabreve",
+ [0x1E1D] = "ecedillabreve",
+ [0x1E1E] = "Fdotaccent",
+ [0x1E1F] = "fdotaccent",
+ [0x1E20] = "Gmacron",
+ [0x1E21] = "gmacron",
+ [0x1E22] = "Hdotaccent",
+ [0x1E23] = "hdotaccent",
+ [0x1E24] = "Hdotbelow",
+ [0x1E25] = "hdotbelow",
+ [0x1E26] = "Hdieresis",
+ [0x1E27] = "hdieresis",
+ [0x1E28] = "Hcedilla",
+ [0x1E29] = "hcedilla",
+ [0x1E2A] = "Hbrevebelow",
+ [0x1E2B] = "hbrevebelow",
+ [0x1E2C] = "Itildebelow",
+ [0x1E2D] = "itildebelow",
+ [0x1E2E] = "Idieresisacute",
+ [0x1E2F] = "idieresisacute",
+ [0x1E30] = "Kacute",
+ [0x1E31] = "kacute",
+ [0x1E32] = "Kdotbelow",
+ [0x1E33] = "kdotbelow",
+ [0x1E34] = "Klinebelow",
+ [0x1E35] = "klinebelow",
+ [0x1E36] = "Ldotbelow",
+ [0x1E37] = "ldotbelow",
+ [0x1E38] = "Ldotbelowmacron",
+ [0x1E39] = "ldotbelowmacron",
+ [0x1E3A] = "Llinebelow",
+ [0x1E3B] = "llinebelow",
+ [0x1E3C] = "Lcircumflexbelow",
+ [0x1E3D] = "lcircumflexbelow",
+ [0x1E3E] = "Macute",
+ [0x1E3F] = "macute",
+ [0x1E40] = "Mdotaccent",
+ [0x1E41] = "mdotaccent",
+ [0x1E42] = "Mdotbelow",
+ [0x1E43] = "mdotbelow",
+ [0x1E44] = "Ndotaccent",
+ [0x1E45] = "ndotaccent",
+ [0x1E46] = "Ndotbelow",
+ [0x1E47] = "ndotbelow",
+ [0x1E48] = "Nlinebelow",
+ [0x1E49] = "nlinebelow",
+ [0x1E4A] = "Ncircumflexbelow",
+ [0x1E4B] = "ncircumflexbelow",
+ [0x1E4C] = "Otildeacute",
+ [0x1E4D] = "otildeacute",
+ [0x1E4E] = "Otildedieresis",
+ [0x1E4F] = "otildedieresis",
+ [0x1E50] = "Omacrongrave",
+ [0x1E51] = "omacrongrave",
+ [0x1E52] = "Omacronacute",
+ [0x1E53] = "omacronacute",
+ [0x1E54] = "Pacute",
+ [0x1E55] = "pacute",
+ [0x1E56] = "Pdotaccent",
+ [0x1E57] = "pdotaccent",
+ [0x1E58] = "Rdotaccent",
+ [0x1E59] = "rdotaccent",
+ [0x1E5A] = "Rdotbelow",
+ [0x1E5B] = "rdotbelow",
+ [0x1E5C] = "Rdotbelowmacron",
+ [0x1E5D] = "rdotbelowmacron",
+ [0x1E5E] = "Rlinebelow",
+ [0x1E5F] = "rlinebelow",
+ [0x1E60] = "Sdotaccent",
+ [0x1E61] = "sdotaccent",
+ [0x1E62] = "Sdotbelow",
+ [0x1E63] = "sdotbelow",
+ [0x1E64] = "Sacutedotaccent",
+ [0x1E65] = "sacutedotaccent",
+ [0x1E66] = "Scarondotaccent",
+ [0x1E67] = "scarondotaccent",
+ [0x1E68] = "Sdotbelowdotaccent",
+ [0x1E69] = "sdotbelowdotaccent",
+ [0x1E6A] = "Tdotaccent",
+ [0x1E6B] = "tdotaccent",
+ [0x1E6C] = "Tdotbelow",
+ [0x1E6D] = "tdotbelow",
+ [0x1E6E] = "Tlinebelow",
+ [0x1E6F] = "tlinebelow",
+ [0x1E70] = "Tcircumflexbelow",
+ [0x1E71] = "tcircumflexbelow",
+ [0x1E72] = "Udieresisbelow",
+ [0x1E73] = "udieresisbelow",
+ [0x1E74] = "Utildebelow",
+ [0x1E75] = "utildebelow",
+ [0x1E76] = "Ucircumflexbelow",
+ [0x1E77] = "ucircumflexbelow",
+ [0x1E78] = "Utildeacute",
+ [0x1E79] = "utildeacute",
+ [0x1E7A] = "Umacrondieresis",
+ [0x1E7B] = "umacrondieresis",
+ [0x1E7C] = "Vtilde",
+ [0x1E7D] = "vtilde",
+ [0x1E7E] = "Vdotbelow",
+ [0x1E7F] = "vdotbelow",
+ [0x1E80] = "Wgrave",
+ [0x1E81] = "wgrave",
+ [0x1E82] = "Wacute",
+ [0x1E83] = "wacute",
+ [0x1E84] = "Wdieresis",
+ [0x1E85] = "wdieresis",
+ [0x1E86] = "Wdotaccent",
+ [0x1E87] = "wdotaccent",
+ [0x1E88] = "Wdotbelow",
+ [0x1E89] = "wdotbelow",
+ [0x1E8A] = "Xdotaccent",
+ [0x1E8B] = "xdotaccent",
+ [0x1E8C] = "Xdieresis",
+ [0x1E8D] = "xdieresis",
+ [0x1E8E] = "Ydotaccent",
+ [0x1E8F] = "ydotaccent",
+ [0x1E90] = "Zcircumflex",
+ [0x1E91] = "zcircumflex",
+ [0x1E92] = "Zdotbelow",
+ [0x1E93] = "zdotbelow",
+ [0x1E94] = "Zlinebelow",
+ [0x1E95] = "zlinebelow",
+ [0x1E96] = "hlinebelow",
+ [0x1E97] = "tdieresis",
+ [0x1E98] = "wring",
+ [0x1E99] = "yring",
+ [0x1E9A] = "arighthalfring",
+ [0x1E9B] = "slongdotaccent",
+ [0x1EA0] = "Adotbelow",
+ [0x1EA1] = "adotbelow",
+ [0x1EA2] = "Ahookabove",
+ [0x1EA3] = "ahookabove",
+ [0x1EA4] = "Acircumflexacute",
+ [0x1EA5] = "acircumflexacute",
+ [0x1EA6] = "Acircumflexgrave",
+ [0x1EA7] = "acircumflexgrave",
+ [0x1EA8] = "Acircumflexhookabove",
+ [0x1EA9] = "acircumflexhookabove",
+ [0x1EAA] = "Acircumflextilde",
+ [0x1EAB] = "acircumflextilde",
+ [0x1EAC] = "Acircumflexdotbelow",
+ [0x1EAD] = "acircumflexdotbelow",
+ [0x1EAE] = "Abreveacute",
+ [0x1EAF] = "abreveacute",
+ [0x1EB0] = "Abrevegrave",
+ [0x1EB1] = "abrevegrave",
+ [0x1EB2] = "Abrevehookabove",
+ [0x1EB3] = "abrevehookabove",
+ [0x1EB4] = "Abrevetilde",
+ [0x1EB5] = "abrevetilde",
+ [0x1EB6] = "Abrevedotbelow",
+ [0x1EB7] = "abrevedotbelow",
+ [0x1EB8] = "Edotbelow",
+ [0x1EB9] = "edotbelow",
+ [0x1EBA] = "Ehookabove",
+ [0x1EBB] = "ehookabove",
+ [0x1EBC] = "Etilde",
+ [0x1EBD] = "etilde",
+ [0x1EBE] = "Ecircumflexacute",
+ [0x1EBF] = "ecircumflexacute",
+ [0x1EC0] = "Ecircumflexgrave",
+ [0x1EC1] = "ecircumflexgrave",
+ [0x1EC2] = "Ecircumflexhookabove",
+ [0x1EC3] = "ecircumflexhookabove",
+ [0x1EC4] = "Ecircumflextilde",
+ [0x1EC5] = "ecircumflextilde",
+ [0x1EC6] = "Ecircumflexdotbelow",
+ [0x1EC7] = "ecircumflexdotbelow",
+ [0x1EC8] = "Ihookabove",
+ [0x1EC9] = "ihookabove",
+ [0x1ECA] = "Idotbelow",
+ [0x1ECB] = "idotbelow",
+ [0x1ECC] = "Odotbelow",
+ [0x1ECD] = "odotbelow",
+ [0x1ECE] = "Ohookabove",
+ [0x1ECF] = "ohookabove",
+ [0x1ED0] = "Ocircumflexacute",
+ [0x1ED1] = "ocircumflexacute",
+ [0x1ED2] = "Ocircumflexgrave",
+ [0x1ED3] = "ocircumflexgrave",
+ [0x1ED4] = "Ocircumflexhookabove",
+ [0x1ED5] = "ocircumflexhookabove",
+ [0x1ED6] = "Ocircumflextilde",
+ [0x1ED7] = "ocircumflextilde",
+ [0x1ED8] = "Ocircumflexdotbelow",
+ [0x1ED9] = "ocircumflexdotbelow",
+ [0x1EDA] = "Ohornacute",
+ [0x1EDB] = "ohornacute",
+ [0x1EDC] = "Ohorngrave",
+ [0x1EDD] = "ohorngrave",
+ [0x1EDE] = "Ohornhookabove",
+ [0x1EDF] = "ohornhookabove",
+ [0x1EE0] = "Ohorntilde",
+ [0x1EE1] = "ohorntilde",
+ [0x1EE2] = "Ohorndotbelow",
+ [0x1EE3] = "ohorndotbelow",
+ [0x1EE4] = "Udotbelow",
+ [0x1EE5] = "udotbelow",
+ [0x1EE6] = "Uhookabove",
+ [0x1EE7] = "uhookabove",
+ [0x1EE8] = "Uhornacute",
+ [0x1EE9] = "uhornacute",
+ [0x1EEA] = "Uhorngrave",
+ [0x1EEB] = "uhorngrave",
+ [0x1EEC] = "Uhornhookabove",
+ [0x1EED] = "uhornhookabove",
+ [0x1EEE] = "Uhorntilde",
+ [0x1EEF] = "uhorntilde",
+ [0x1EF0] = "Uhorndotbelow",
+ [0x1EF1] = "uhorndotbelow",
+ [0x1EF2] = "Ygrave",
+ [0x1EF3] = "ygrave",
+ [0x1EF4] = "Ydotbelow",
+ [0x1EF5] = "ydotbelow",
+ [0x1EF6] = "Yhookabove",
+ [0x1EF7] = "yhookabove",
+ [0x1EF8] = "Ytilde",
+ [0x1EF9] = "ytilde",
+ [0x2002] = "enspace",
+ [0x200B] = "zerowidthspace",
+ [0x200C] = "zerowidthnonjoiner",
+ [0x200D] = "afii301",
+ [0x200E] = "afii299",
+ [0x200F] = "afii300",
+ [0x2010] = "hyphentwo",
+ [0x2012] = "figuredash",
+ [0x2013] = "endash",
+ [0x2014] = "emdash",
+ [0x2015] = "horizontalbar",
+ [0x2016] = "dblverticalbar",
+ [0x2017] = "underscoredbl",
+ [0x2018] = "quoteleft",
+ [0x2019] = "quoteright",
+ [0x201A] = "quotesinglbase",
+ [0x201B] = "quotereversed",
+ [0x201C] = "quotedblleft",
+ [0x201D] = "quotedblright",
+ [0x201E] = "quotedblbase",
+ [0x2020] = "dagger",
+ [0x2021] = "daggerdbl",
+ [0x2022] = "bullet",
+ [0x2024] = "onedotenleader",
+ [0x2025] = "twodotleader",
+ [0x2026] = "ellipsis",
+ [0x202C] = "afii61573",
+ [0x202D] = "afii61574",
+ [0x202E] = "afii61575",
+ [0x2030] = "perthousand",
+ [0x2032] = "minute",
+ [0x2033] = "second",
+ [0x2035] = "primereversed",
+ [0x2039] = "guilsinglleft",
+ [0x203A] = "guilsinglright",
+ [0x203B] = "referencemark",
+ [0x203C] = "exclamdbl",
+ [0x203E] = "overline",
+ [0x2042] = "asterism",
+ [0x2044] = "fraction",
+ [0x2070] = "zerosuperior",
+ [0x2074] = "foursuperior",
+ [0x2075] = "fivesuperior",
+ [0x2076] = "sixsuperior",
+ [0x2077] = "sevensuperior",
+ [0x2078] = "eightsuperior",
+ [0x2079] = "ninesuperior",
+ [0x207A] = "plussuperior",
+ [0x207C] = "equalsuperior",
+ [0x207D] = "parenleftsuperior",
+ [0x207E] = "parenrightsuperior",
+ [0x207F] = "nsuperior",
+ [0x2080] = "zeroinferior",
+ [0x2081] = "oneinferior",
+ [0x2082] = "twoinferior",
+ [0x2083] = "threeinferior",
+ [0x2084] = "fourinferior",
+ [0x2085] = "fiveinferior",
+ [0x2086] = "sixinferior",
+ [0x2087] = "seveninferior",
+ [0x2088] = "eightinferior",
+ [0x2089] = "nineinferior",
+ [0x208D] = "parenleftinferior",
+ [0x208E] = "parenrightinferior",
+ [0x20A1] = "colonsign",
+ [0x20A2] = "cruzeiro",
+ [0x20A3] = "franc",
+ [0x20A4] = "lira",
+ [0x20A7] = "peseta",
+ [0x20A9] = "won",
+ [0x20AA] = "sheqelhebrew",
+ [0x20AB] = "dong",
+ [0x20AC] = "euro",
+ [0x2103] = "centigrade",
+ [0x2105] = "careof",
+ [0x2109] = "fahrenheit",
+ [0x2111] = "Ifraktur",
+ [0x2113] = "lsquare",
+ [0x2116] = "numero",
+ [0x2118] = "weierstrass",
+ [0x211C] = "Rfraktur",
+ [0x211E] = "prescription",
+ [0x2121] = "telephone",
+ [0x2122] = "trademark",
+ [0x2126] = "Omega",
+ [0x212B] = "angstrom",
+ [0x212E] = "estimated",
+ [0x2135] = "aleph",
+ [0x2153] = "onethird",
+ [0x2154] = "twothirds",
+ [0x215B] = "oneeighth",
+ [0x215C] = "threeeighths",
+ [0x215D] = "fiveeighths",
+ [0x215E] = "seveneighths",
+ [0x2160] = "Oneroman",
+ [0x2161] = "Tworoman",
+ [0x2162] = "Threeroman",
+ [0x2163] = "Fourroman",
+ [0x2164] = "Fiveroman",
+ [0x2165] = "Sixroman",
+ [0x2166] = "Sevenroman",
+ [0x2167] = "Eightroman",
+ [0x2168] = "Nineroman",
+ [0x2169] = "Tenroman",
+ [0x216A] = "Elevenroman",
+ [0x216B] = "Twelveroman",
+ [0x2170] = "oneroman",
+ [0x2171] = "tworoman",
+ [0x2172] = "threeroman",
+ [0x2173] = "fourroman",
+ [0x2174] = "fiveroman",
+ [0x2175] = "sixroman",
+ [0x2176] = "sevenroman",
+ [0x2177] = "eightroman",
+ [0x2178] = "nineroman",
+ [0x2179] = "tenroman",
+ [0x217A] = "elevenroman",
+ [0x217B] = "twelveroman",
+ [0x2190] = "arrowleft",
+ [0x2191] = "arrowup",
+ [0x2192] = "arrowright",
+ [0x2193] = "arrowdown",
+ [0x2194] = "arrowboth",
+ [0x2195] = "arrowupdn",
+ [0x2196] = "arrowupleft",
+ [0x2197] = "arrowupright",
+ [0x2198] = "arrowdownright",
+ [0x2199] = "arrowdownleft",
+ [0x21A8] = "arrowupdownbase",
+ [0x21B5] = "carriagereturn",
+ [0x21BC] = "harpoonleftbarbup",
+ [0x21C0] = "harpoonrightbarbup",
+ [0x21C4] = "arrowrightoverleft",
+ [0x21C5] = "arrowupleftofdown",
+ [0x21C6] = "arrowleftoverright",
+ [0x21CD] = "arrowleftdblstroke",
+ [0x21CF] = "arrowrightdblstroke",
+ [0x21D0] = "arrowleftdbl",
+ [0x21D1] = "arrowdblup",
+ [0x21D2] = "dblarrowright",
+ [0x21D3] = "arrowdbldown",
+ [0x21D4] = "dblarrowleft",
+ [0x21DE] = "pageup",
+ [0x21DF] = "pagedown",
+ [0x21E0] = "arrowdashleft",
+ [0x21E1] = "arrowdashup",
+ [0x21E2] = "arrowdashright",
+ [0x21E3] = "arrowdashdown",
+ [0x21E4] = "arrowtableft",
+ [0x21E5] = "arrowtabright",
+ [0x21E6] = "arrowleftwhite",
+ [0x21E7] = "arrowupwhite",
+ [0x21E8] = "arrowrightwhite",
+ [0x21E9] = "arrowdownwhite",
+ [0x21EA] = "capslock",
+ [0x2200] = "universal",
+ [0x2202] = "partialdiff",
+ [0x2203] = "thereexists",
+ [0x2205] = "emptyset",
+ [0x2206] = "increment",
+ [0x2207] = "nabla",
+ [0x2208] = "element",
+ [0x2209] = "notelementof",
+ [0x220B] = "suchthat",
+ [0x220C] = "notcontains",
+ [0x220F] = "product",
+ [0x2211] = "summation",
+ [0x2212] = "minus",
+ [0x2213] = "minusplus",
+ [0x2215] = "divisionslash",
+ [0x2217] = "asteriskmath",
+ [0x2219] = "bulletoperator",
+ [0x221A] = "radical",
+ [0x221D] = "proportional",
+ [0x221E] = "infinity",
+ [0x221F] = "rightangle",
+ [0x2220] = "angle",
+ [0x2223] = "divides",
+ [0x2225] = "parallel",
+ [0x2226] = "notparallel",
+ [0x2227] = "logicaland",
+ [0x2228] = "logicalor",
+ [0x2229] = "intersection",
+ [0x222A] = "union",
+ [0x222B] = "integral",
+ [0x222C] = "dblintegral",
+ [0x222E] = "contourintegral",
+ [0x2234] = "therefore",
+ [0x2235] = "because",
+ [0x2236] = "ratio",
+ [0x2237] = "proportion",
+ [0x223C] = "tildeoperator",
+ [0x223D] = "reversedtilde",
+ [0x2243] = "asymptoticallyequal",
+ [0x2245] = "congruent",
+ [0x2248] = "approxequal",
+ [0x224C] = "allequal",
+ [0x2250] = "approaches",
+ [0x2251] = "geometricallyequal",
+ [0x2252] = "approxequalorimage",
+ [0x2253] = "imageorapproximatelyequal",
+ [0x2260] = "notequal",
+ [0x2261] = "equivalence",
+ [0x2262] = "notidentical",
+ [0x2264] = "lessequal",
+ [0x2265] = "greaterequal",
+ [0x2266] = "lessoverequal",
+ [0x2267] = "greateroverequal",
+ [0x226A] = "muchless",
+ [0x226B] = "muchgreater",
+ [0x226E] = "notless",
+ [0x226F] = "notgreater",
+ [0x2270] = "notlessnorequal",
+ [0x2271] = "notgreaternorequal",
+ [0x2272] = "lessorequivalent",
+ [0x2273] = "greaterorequivalent",
+ [0x2276] = "lessorgreater",
+ [0x2277] = "greaterorless",
+ [0x2279] = "notgreaternorless",
+ [0x227A] = "precedes",
+ [0x227B] = "succeeds",
+ [0x2280] = "notprecedes",
+ [0x2281] = "notsucceeds",
+ [0x2282] = "subset",
+ [0x2283] = "superset",
+ [0x2284] = "notsubset",
+ [0x2285] = "notsuperset",
+ [0x2286] = "subsetorequal",
+ [0x2287] = "supersetorequal",
+ [0x228A] = "subsetnotequal",
+ [0x228B] = "supersetnotequal",
+ [0x2295] = "pluscircle",
+ [0x2296] = "minuscircle",
+ [0x2297] = "timescircle",
+ [0x2299] = "circleot",
+ [0x22A3] = "tackleft",
+ [0x22A4] = "tackdown",
+ [0x22A5] = "perpendicular",
+ [0x22BF] = "righttriangle",
+ [0x22C5] = "dotmath",
+ [0x22CE] = "curlyor",
+ [0x22CF] = "curlyand",
+ [0x22DA] = "lessequalorgreater",
+ [0x22DB] = "greaterequalorless",
+ [0x22EE] = "ellipsisvertical",
+ [0x2302] = "house",
+ [0x2303] = "control",
+ [0x2305] = "projective",
+ [0x2310] = "revlogicalnot",
+ [0x2312] = "arc",
+ [0x2318] = "propellor",
+ [0x2320] = "integraltp",
+ [0x2321] = "integralbt",
+ [0x2325] = "option",
+ [0x2326] = "deleteright",
+ [0x2327] = "clear",
+ [0x2329] = "angleleft",
+ [0x232A] = "angleright",
+ [0x232B] = "deleteleft",
+ [0x2423] = "blank",
+ [0x2460] = "onecircle",
+ [0x2461] = "twocircle",
+ [0x2462] = "threecircle",
+ [0x2463] = "fourcircle",
+ [0x2464] = "fivecircle",
+ [0x2465] = "sixcircle",
+ [0x2466] = "sevencircle",
+ [0x2467] = "eightcircle",
+ [0x2468] = "ninecircle",
+ [0x2469] = "tencircle",
+ [0x246A] = "elevencircle",
+ [0x246B] = "twelvecircle",
+ [0x246C] = "thirteencircle",
+ [0x246D] = "fourteencircle",
+ [0x246E] = "fifteencircle",
+ [0x246F] = "sixteencircle",
+ [0x2470] = "seventeencircle",
+ [0x2471] = "eighteencircle",
+ [0x2472] = "nineteencircle",
+ [0x2473] = "twentycircle",
+ [0x2474] = "oneparen",
+ [0x2475] = "twoparen",
+ [0x2476] = "threeparen",
+ [0x2477] = "fourparen",
+ [0x2478] = "fiveparen",
+ [0x2479] = "sixparen",
+ [0x247A] = "sevenparen",
+ [0x247B] = "eightparen",
+ [0x247C] = "nineparen",
+ [0x247D] = "tenparen",
+ [0x247E] = "elevenparen",
+ [0x247F] = "twelveparen",
+ [0x2480] = "thirteenparen",
+ [0x2481] = "fourteenparen",
+ [0x2482] = "fifteenparen",
+ [0x2483] = "sixteenparen",
+ [0x2484] = "seventeenparen",
+ [0x2485] = "eighteenparen",
+ [0x2486] = "nineteenparen",
+ [0x2487] = "twentyparen",
+ [0x2488] = "oneperiod",
+ [0x2489] = "twoperiod",
+ [0x248A] = "threeperiod",
+ [0x248B] = "fourperiod",
+ [0x248C] = "fiveperiod",
+ [0x248D] = "sixperiod",
+ [0x248E] = "sevenperiod",
+ [0x248F] = "eightperiod",
+ [0x2490] = "nineperiod",
+ [0x2491] = "tenperiod",
+ [0x2492] = "elevenperiod",
+ [0x2493] = "twelveperiod",
+ [0x2494] = "thirteenperiod",
+ [0x2495] = "fourteenperiod",
+ [0x2496] = "fifteenperiod",
+ [0x2497] = "sixteenperiod",
+ [0x2498] = "seventeenperiod",
+ [0x2499] = "eighteenperiod",
+ [0x249A] = "nineteenperiod",
+ [0x249B] = "twentyperiod",
+ [0x249C] = "aparen",
+ [0x249D] = "bparen",
+ [0x249E] = "cparen",
+ [0x249F] = "dparen",
+ [0x24A0] = "eparen",
+ [0x24A1] = "fparen",
+ [0x24A2] = "gparen",
+ [0x24A3] = "hparen",
+ [0x24A4] = "iparen",
+ [0x24A5] = "jparen",
+ [0x24A6] = "kparen",
+ [0x24A7] = "lparen",
+ [0x24A8] = "mparen",
+ [0x24A9] = "nparen",
+ [0x24AA] = "oparen",
+ [0x24AB] = "pparen",
+ [0x24AC] = "qparen",
+ [0x24AD] = "rparen",
+ [0x24AE] = "sparen",
+ [0x24AF] = "tparen",
+ [0x24B0] = "uparen",
+ [0x24B1] = "vparen",
+ [0x24B2] = "wparen",
+ [0x24B3] = "xparen",
+ [0x24B4] = "yparen",
+ [0x24B5] = "zparen",
+ [0x24B6] = "Acircle",
+ [0x24B7] = "Bcircle",
+ [0x24B8] = "Ccircle",
+ [0x24B9] = "Dcircle",
+ [0x24BA] = "Ecircle",
+ [0x24BB] = "Fcircle",
+ [0x24BC] = "Gcircle",
+ [0x24BD] = "Hcircle",
+ [0x24BE] = "Icircle",
+ [0x24BF] = "Jcircle",
+ [0x24C0] = "Kcircle",
+ [0x24C1] = "Lcircle",
+ [0x24C2] = "Mcircle",
+ [0x24C3] = "Ncircle",
+ [0x24C4] = "Ocircle",
+ [0x24C5] = "Pcircle",
+ [0x24C6] = "Qcircle",
+ [0x24C7] = "Rcircle",
+ [0x24C8] = "Scircle",
+ [0x24C9] = "Tcircle",
+ [0x24CA] = "Ucircle",
+ [0x24CB] = "Vcircle",
+ [0x24CC] = "Wcircle",
+ [0x24CD] = "Xcircle",
+ [0x24CE] = "Ycircle",
+ [0x24CF] = "Zcircle",
+ [0x24D0] = "acircle",
+ [0x24D1] = "bcircle",
+ [0x24D2] = "ccircle",
+ [0x24D3] = "dcircle",
+ [0x24D4] = "ecircle",
+ [0x24D5] = "fcircle",
+ [0x24D6] = "gcircle",
+ [0x24D7] = "hcircle",
+ [0x24D8] = "icircle",
+ [0x24D9] = "jcircle",
+ [0x24DA] = "kcircle",
+ [0x24DB] = "lcircle",
+ [0x24DC] = "mcircle",
+ [0x24DD] = "ncircle",
+ [0x24DE] = "ocircle",
+ [0x24DF] = "pcircle",
+ [0x24E0] = "qcircle",
+ [0x24E1] = "rcircle",
+ [0x24E2] = "scircle",
+ [0x24E3] = "tcircle",
+ [0x24E4] = "ucircle",
+ [0x24E5] = "vcircle",
+ [0x24E6] = "wcircle",
+ [0x24E7] = "xcircle",
+ [0x24E8] = "ycircle",
+ [0x24E9] = "zcircle",
+ [0x2500] = "SF100000",
+ [0x2502] = "SF110000",
+ [0x250C] = "SF010000",
+ [0x2510] = "SF030000",
+ [0x2514] = "SF020000",
+ [0x2518] = "SF040000",
+ [0x251C] = "SF080000",
+ [0x2524] = "SF090000",
+ [0x252C] = "SF060000",
+ [0x2534] = "SF070000",
+ [0x253C] = "SF050000",
+ [0x2550] = "SF430000",
+ [0x2551] = "SF240000",
+ [0x2552] = "SF510000",
+ [0x2553] = "SF520000",
+ [0x2554] = "SF390000",
+ [0x2555] = "SF220000",
+ [0x2556] = "SF210000",
+ [0x2557] = "SF250000",
+ [0x2558] = "SF500000",
+ [0x2559] = "SF490000",
+ [0x255A] = "SF380000",
+ [0x255B] = "SF280000",
+ [0x255C] = "SF270000",
+ [0x255D] = "SF260000",
+ [0x255E] = "SF360000",
+ [0x255F] = "SF370000",
+ [0x2560] = "SF420000",
+ [0x2561] = "SF190000",
+ [0x2562] = "SF200000",
+ [0x2563] = "SF230000",
+ [0x2564] = "SF470000",
+ [0x2565] = "SF480000",
+ [0x2566] = "SF410000",
+ [0x2567] = "SF450000",
+ [0x2568] = "SF460000",
+ [0x2569] = "SF400000",
+ [0x256A] = "SF540000",
+ [0x256B] = "SF530000",
+ [0x256C] = "SF440000",
+ [0x2580] = "upblock",
+ [0x2584] = "dnblock",
+ [0x2588] = "block",
+ [0x258C] = "lfblock",
+ [0x2590] = "rtblock",
+ [0x2591] = "shadelight",
+ [0x2592] = "shademedium",
+ [0x2593] = "shadedark",
+ [0x25A0] = "filledbox",
+ [0x25A1] = "whitesquare",
+ [0x25A3] = "squarewhitewithsmallblack",
+ [0x25A4] = "squarehorizontalfill",
+ [0x25A5] = "squareverticalfill",
+ [0x25A6] = "squareorthogonalcrosshatchfill",
+ [0x25A7] = "squareupperlefttolowerrightfill",
+ [0x25A8] = "squareupperrighttolowerleftfill",
+ [0x25A9] = "squarediagonalcrosshatchfill",
+ [0x25AA] = "blacksmallsquare",
+ [0x25AB] = "whitesmallsquare",
+ [0x25AC] = "filledrect",
+ [0x25B2] = "triagup",
+ [0x25B3] = "whiteuppointingtriangle",
+ [0x25B4] = "blackuppointingsmalltriangle",
+ [0x25B5] = "whiteuppointingsmalltriangle",
+ [0x25B6] = "blackrightpointingtriangle",
+ [0x25B7] = "whiterightpointingtriangle",
+ [0x25B9] = "whiterightpointingsmalltriangle",
+ [0x25BA] = "triagrt",
+ [0x25BC] = "triagdn",
+ [0x25BD] = "whitedownpointingtriangle",
+ [0x25BF] = "whitedownpointingsmalltriangle",
+ [0x25C0] = "blackleftpointingtriangle",
+ [0x25C1] = "whiteleftpointingtriangle",
+ [0x25C3] = "whiteleftpointingsmalltriangle",
+ [0x25C4] = "triaglf",
+ [0x25C6] = "blackdiamond",
+ [0x25C7] = "whitediamond",
+ [0x25C8] = "whitediamondcontainingblacksmalldiamond",
+ [0x25C9] = "fisheye",
+ [0x25CA] = "lozenge",
+ [0x25CB] = "whitecircle",
+ [0x25CC] = "dottedcircle",
+ [0x25CE] = "bullseye",
+ [0x25CF] = "blackcircle",
+ [0x25D0] = "circlewithlefthalfblack",
+ [0x25D1] = "circlewithrighthalfblack",
+ [0x25D8] = "invbullet",
+ [0x25D9] = "whitecircleinverse",
+ [0x25E2] = "blacklowerrighttriangle",
+ [0x25E3] = "blacklowerlefttriangle",
+ [0x25E4] = "blackupperlefttriangle",
+ [0x25E5] = "blackupperrighttriangle",
+ [0x25E6] = "whitebullet",
+ [0x25EF] = "largecircle",
+ [0x2605] = "blackstar",
+ [0x2606] = "whitestar",
+ [0x260E] = "telephoneblack",
+ [0x260F] = "whitetelephone",
+ [0x261C] = "pointingindexleftwhite",
+ [0x261D] = "pointingindexupwhite",
+ [0x261E] = "pointingindexrightwhite",
+ [0x261F] = "pointingindexdownwhite",
+ [0x262F] = "yinyang",
+ [0x263A] = "whitesmilingface",
+ [0x263B] = "invsmileface",
+ [0x263C] = "sun",
+ [0x2640] = "venus",
+ [0x2641] = "earth",
+ [0x2642] = "mars",
+ [0x2660] = "spadesuitblack",
+ [0x2661] = "heartsuitwhite",
+ [0x2662] = "diamondsuitwhite",
+ [0x2663] = "clubsuitblack",
+ [0x2664] = "spadesuitwhite",
+ [0x2665] = "heartsuitblack",
+ [0x2666] = "diamond",
+ [0x2667] = "clubsuitwhite",
+ [0x2668] = "hotsprings",
+ [0x2669] = "quarternote",
+ [0x266A] = "musicalnote",
+ [0x266B] = "musicalnotedbl",
+ [0x266C] = "beamedsixteenthnotes",
+ [0x266D] = "musicflatsign",
+ [0x266F] = "musicsharpsign",
+ [0x2713] = "checkmark",
+ [0x278A] = "onecircleinversesansserif",
+ [0x278B] = "twocircleinversesansserif",
+ [0x278C] = "threecircleinversesansserif",
+ [0x278D] = "fourcircleinversesansserif",
+ [0x278E] = "fivecircleinversesansserif",
+ [0x278F] = "sixcircleinversesansserif",
+ [0x2790] = "sevencircleinversesansserif",
+ [0x2791] = "eightcircleinversesansserif",
+ [0x2792] = "ninecircleinversesansserif",
+ [0x279E] = "arrowrightheavy",
+ [0x3000] = "ideographicspace",
+ [0x3001] = "ideographiccomma",
+ [0x3002] = "ideographicperiod",
+ [0x3003] = "dittomark",
+ [0x3004] = "jis",
+ [0x3005] = "ideographiciterationmark",
+ [0x3006] = "ideographicclose",
+ [0x3007] = "ideographiczero",
+ [0x3008] = "anglebracketleft",
+ [0x3009] = "anglebracketright",
+ [0x300A] = "dblanglebracketleft",
+ [0x300B] = "dblanglebracketright",
+ [0x300C] = "cornerbracketleft",
+ [0x300D] = "cornerbracketright",
+ [0x300E] = "whitecornerbracketleft",
+ [0x300F] = "whitecornerbracketright",
+ [0x3010] = "blacklenticularbracketleft",
+ [0x3011] = "blacklenticularbracketright",
+ [0x3012] = "postalmark",
+ [0x3013] = "getamark",
+ [0x3014] = "tortoiseshellbracketleft",
+ [0x3015] = "tortoiseshellbracketright",
+ [0x3016] = "whitelenticularbracketleft",
+ [0x3017] = "whitelenticularbracketright",
+ [0x3018] = "whitetortoiseshellbracketleft",
+ [0x3019] = "whitetortoiseshellbracketright",
+ [0x301C] = "wavedash",
+ [0x301D] = "quotedblprimereversed",
+ [0x301E] = "quotedblprime",
+ [0x3020] = "postalmarkface",
+ [0x3021] = "onehangzhou",
+ [0x3022] = "twohangzhou",
+ [0x3023] = "threehangzhou",
+ [0x3024] = "fourhangzhou",
+ [0x3025] = "fivehangzhou",
+ [0x3026] = "sixhangzhou",
+ [0x3027] = "sevenhangzhou",
+ [0x3028] = "eighthangzhou",
+ [0x3029] = "ninehangzhou",
+ [0x3036] = "circlepostalmark",
+ [0x3041] = "asmallhiragana",
+ [0x3042] = "ahiragana",
+ [0x3043] = "ismallhiragana",
+ [0x3044] = "ihiragana",
+ [0x3045] = "usmallhiragana",
+ [0x3046] = "uhiragana",
+ [0x3047] = "esmallhiragana",
+ [0x3048] = "ehiragana",
+ [0x3049] = "osmallhiragana",
+ [0x304A] = "ohiragana",
+ [0x304B] = "kahiragana",
+ [0x304C] = "gahiragana",
+ [0x304D] = "kihiragana",
+ [0x304E] = "gihiragana",
+ [0x304F] = "kuhiragana",
+ [0x3050] = "guhiragana",
+ [0x3051] = "kehiragana",
+ [0x3052] = "gehiragana",
+ [0x3053] = "kohiragana",
+ [0x3054] = "gohiragana",
+ [0x3055] = "sahiragana",
+ [0x3056] = "zahiragana",
+ [0x3057] = "sihiragana",
+ [0x3058] = "zihiragana",
+ [0x3059] = "suhiragana",
+ [0x305A] = "zuhiragana",
+ [0x305B] = "sehiragana",
+ [0x305C] = "zehiragana",
+ [0x305D] = "sohiragana",
+ [0x305E] = "zohiragana",
+ [0x305F] = "tahiragana",
+ [0x3060] = "dahiragana",
+ [0x3061] = "tihiragana",
+ [0x3062] = "dihiragana",
+ [0x3063] = "tusmallhiragana",
+ [0x3064] = "tuhiragana",
+ [0x3065] = "duhiragana",
+ [0x3066] = "tehiragana",
+ [0x3067] = "dehiragana",
+ [0x3068] = "tohiragana",
+ [0x3069] = "dohiragana",
+ [0x306A] = "nahiragana",
+ [0x306B] = "nihiragana",
+ [0x306C] = "nuhiragana",
+ [0x306D] = "nehiragana",
+ [0x306E] = "nohiragana",
+ [0x306F] = "hahiragana",
+ [0x3070] = "bahiragana",
+ [0x3071] = "pahiragana",
+ [0x3072] = "hihiragana",
+ [0x3073] = "bihiragana",
+ [0x3074] = "pihiragana",
+ [0x3075] = "huhiragana",
+ [0x3076] = "buhiragana",
+ [0x3077] = "puhiragana",
+ [0x3078] = "hehiragana",
+ [0x3079] = "behiragana",
+ [0x307A] = "pehiragana",
+ [0x307B] = "hohiragana",
+ [0x307C] = "bohiragana",
+ [0x307D] = "pohiragana",
+ [0x307E] = "mahiragana",
+ [0x307F] = "mihiragana",
+ [0x3080] = "muhiragana",
+ [0x3081] = "mehiragana",
+ [0x3082] = "mohiragana",
+ [0x3083] = "yasmallhiragana",
+ [0x3084] = "yahiragana",
+ [0x3085] = "yusmallhiragana",
+ [0x3086] = "yuhiragana",
+ [0x3087] = "yosmallhiragana",
+ [0x3088] = "yohiragana",
+ [0x3089] = "rahiragana",
+ [0x308A] = "rihiragana",
+ [0x308B] = "ruhiragana",
+ [0x308C] = "rehiragana",
+ [0x308D] = "rohiragana",
+ [0x308E] = "wasmallhiragana",
+ [0x308F] = "wahiragana",
+ [0x3090] = "wihiragana",
+ [0x3091] = "wehiragana",
+ [0x3092] = "wohiragana",
+ [0x3093] = "nhiragana",
+ [0x3094] = "vuhiragana",
+ [0x309B] = "voicedmarkkana",
+ [0x309C] = "semivoicedmarkkana",
+ [0x309D] = "iterationhiragana",
+ [0x309E] = "voicediterationhiragana",
+ [0x30A1] = "asmallkatakana",
+ [0x30A2] = "akatakana",
+ [0x30A3] = "ismallkatakana",
+ [0x30A4] = "ikatakana",
+ [0x30A5] = "usmallkatakana",
+ [0x30A6] = "ukatakana",
+ [0x30A7] = "esmallkatakana",
+ [0x30A8] = "ekatakana",
+ [0x30A9] = "osmallkatakana",
+ [0x30AA] = "okatakana",
+ [0x30AB] = "kakatakana",
+ [0x30AC] = "gakatakana",
+ [0x30AD] = "kikatakana",
+ [0x30AE] = "gikatakana",
+ [0x30AF] = "kukatakana",
+ [0x30B0] = "gukatakana",
+ [0x30B1] = "kekatakana",
+ [0x30B2] = "gekatakana",
+ [0x30B3] = "kokatakana",
+ [0x30B4] = "gokatakana",
+ [0x30B5] = "sakatakana",
+ [0x30B6] = "zakatakana",
+ [0x30B7] = "sikatakana",
+ [0x30B8] = "zikatakana",
+ [0x30B9] = "sukatakana",
+ [0x30BA] = "zukatakana",
+ [0x30BB] = "sekatakana",
+ [0x30BC] = "zekatakana",
+ [0x30BD] = "sokatakana",
+ [0x30BE] = "zokatakana",
+ [0x30BF] = "takatakana",
+ [0x30C0] = "dakatakana",
+ [0x30C1] = "tikatakana",
+ [0x30C2] = "dikatakana",
+ [0x30C3] = "tusmallkatakana",
+ [0x30C4] = "tukatakana",
+ [0x30C5] = "dukatakana",
+ [0x30C6] = "tekatakana",
+ [0x30C7] = "dekatakana",
+ [0x30C8] = "tokatakana",
+ [0x30C9] = "dokatakana",
+ [0x30CA] = "nakatakana",
+ [0x30CB] = "nikatakana",
+ [0x30CC] = "nukatakana",
+ [0x30CD] = "nekatakana",
+ [0x30CE] = "nokatakana",
+ [0x30CF] = "hakatakana",
+ [0x30D0] = "bakatakana",
+ [0x30D1] = "pakatakana",
+ [0x30D2] = "hikatakana",
+ [0x30D3] = "bikatakana",
+ [0x30D4] = "pikatakana",
+ [0x30D5] = "hukatakana",
+ [0x30D6] = "bukatakana",
+ [0x30D7] = "pukatakana",
+ [0x30D8] = "hekatakana",
+ [0x30D9] = "bekatakana",
+ [0x30DA] = "pekatakana",
+ [0x30DB] = "hokatakana",
+ [0x30DC] = "bokatakana",
+ [0x30DD] = "pokatakana",
+ [0x30DE] = "makatakana",
+ [0x30DF] = "mikatakana",
+ [0x30E0] = "mukatakana",
+ [0x30E1] = "mekatakana",
+ [0x30E2] = "mokatakana",
+ [0x30E3] = "yasmallkatakana",
+ [0x30E4] = "yakatakana",
+ [0x30E5] = "yusmallkatakana",
+ [0x30E6] = "yukatakana",
+ [0x30E7] = "yosmallkatakana",
+ [0x30E8] = "yokatakana",
+ [0x30E9] = "rakatakana",
+ [0x30EA] = "rikatakana",
+ [0x30EB] = "rukatakana",
+ [0x30EC] = "rekatakana",
+ [0x30ED] = "rokatakana",
+ [0x30EE] = "wasmallkatakana",
+ [0x30EF] = "wakatakana",
+ [0x30F0] = "wikatakana",
+ [0x30F1] = "wekatakana",
+ [0x30F2] = "wokatakana",
+ [0x30F3] = "nkatakana",
+ [0x30F4] = "vukatakana",
+ [0x30F5] = "kasmallkatakana",
+ [0x30F6] = "kesmallkatakana",
+ [0x30F7] = "vakatakana",
+ [0x30F8] = "vikatakana",
+ [0x30F9] = "vekatakana",
+ [0x30FA] = "vokatakana",
+ [0x30FB] = "dotkatakana",
+ [0x30FC] = "prolongedkana",
+ [0x30FD] = "iterationkatakana",
+ [0x30FE] = "voicediterationkatakana",
+ [0x3105] = "bbopomofo",
+ [0x3106] = "pbopomofo",
+ [0x3107] = "mbopomofo",
+ [0x3108] = "fbopomofo",
+ [0x3109] = "dbopomofo",
+ [0x310A] = "tbopomofo",
+ [0x310B] = "nbopomofo",
+ [0x310C] = "lbopomofo",
+ [0x310D] = "gbopomofo",
+ [0x310E] = "kbopomofo",
+ [0x310F] = "hbopomofo",
+ [0x3110] = "jbopomofo",
+ [0x3111] = "qbopomofo",
+ [0x3112] = "xbopomofo",
+ [0x3113] = "zhbopomofo",
+ [0x3114] = "chbopomofo",
+ [0x3115] = "shbopomofo",
+ [0x3116] = "rbopomofo",
+ [0x3117] = "zbopomofo",
+ [0x3118] = "cbopomofo",
+ [0x3119] = "sbopomofo",
+ [0x311A] = "abopomofo",
+ [0x311B] = "obopomofo",
+ [0x311C] = "ebopomofo",
+ [0x311D] = "ehbopomofo",
+ [0x311E] = "aibopomofo",
+ [0x311F] = "eibopomofo",
+ [0x3120] = "aubopomofo",
+ [0x3121] = "oubopomofo",
+ [0x3122] = "anbopomofo",
+ [0x3123] = "enbopomofo",
+ [0x3124] = "angbopomofo",
+ [0x3125] = "engbopomofo",
+ [0x3126] = "erbopomofo",
+ [0x3127] = "ibopomofo",
+ [0x3128] = "ubopomofo",
+ [0x3129] = "iubopomofo",
+ [0x3131] = "kiyeokkorean",
+ [0x3132] = "ssangkiyeokkorean",
+ [0x3133] = "kiyeoksioskorean",
+ [0x3134] = "nieunkorean",
+ [0x3135] = "nieuncieuckorean",
+ [0x3136] = "nieunhieuhkorean",
+ [0x3137] = "tikeutkorean",
+ [0x3138] = "ssangtikeutkorean",
+ [0x3139] = "rieulkorean",
+ [0x313A] = "rieulkiyeokkorean",
+ [0x313B] = "rieulmieumkorean",
+ [0x313C] = "rieulpieupkorean",
+ [0x313D] = "rieulsioskorean",
+ [0x313E] = "rieulthieuthkorean",
+ [0x313F] = "rieulphieuphkorean",
+ [0x3140] = "rieulhieuhkorean",
+ [0x3141] = "mieumkorean",
+ [0x3142] = "pieupkorean",
+ [0x3143] = "ssangpieupkorean",
+ [0x3144] = "pieupsioskorean",
+ [0x3145] = "sioskorean",
+ [0x3146] = "ssangsioskorean",
+ [0x3147] = "ieungkorean",
+ [0x3148] = "cieuckorean",
+ [0x3149] = "ssangcieuckorean",
+ [0x314A] = "chieuchkorean",
+ [0x314B] = "khieukhkorean",
+ [0x314C] = "thieuthkorean",
+ [0x314D] = "phieuphkorean",
+ [0x314E] = "hieuhkorean",
+ [0x314F] = "akorean",
+ [0x3150] = "aekorean",
+ [0x3151] = "yakorean",
+ [0x3152] = "yaekorean",
+ [0x3153] = "eokorean",
+ [0x3154] = "ekorean",
+ [0x3155] = "yeokorean",
+ [0x3156] = "yekorean",
+ [0x3157] = "okorean",
+ [0x3158] = "wakorean",
+ [0x3159] = "waekorean",
+ [0x315A] = "oekorean",
+ [0x315B] = "yokorean",
+ [0x315C] = "ukorean",
+ [0x315D] = "weokorean",
+ [0x315E] = "wekorean",
+ [0x315F] = "wikorean",
+ [0x3160] = "yukorean",
+ [0x3161] = "eukorean",
+ [0x3162] = "yikorean",
+ [0x3163] = "ikorean",
+ [0x3164] = "hangulfiller",
+ [0x3165] = "ssangnieunkorean",
+ [0x3166] = "nieuntikeutkorean",
+ [0x3167] = "nieunsioskorean",
+ [0x3168] = "nieunpansioskorean",
+ [0x3169] = "rieulkiyeoksioskorean",
+ [0x316A] = "rieultikeutkorean",
+ [0x316B] = "rieulpieupsioskorean",
+ [0x316C] = "rieulpansioskorean",
+ [0x316D] = "rieulyeorinhieuhkorean",
+ [0x316E] = "mieumpieupkorean",
+ [0x316F] = "mieumsioskorean",
+ [0x3170] = "mieumpansioskorean",
+ [0x3171] = "kapyeounmieumkorean",
+ [0x3172] = "pieupkiyeokkorean",
+ [0x3173] = "pieuptikeutkorean",
+ [0x3174] = "pieupsioskiyeokkorean",
+ [0x3175] = "pieupsiostikeutkorean",
+ [0x3176] = "pieupcieuckorean",
+ [0x3177] = "pieupthieuthkorean",
+ [0x3178] = "kapyeounpieupkorean",
+ [0x3179] = "kapyeounssangpieupkorean",
+ [0x317A] = "sioskiyeokkorean",
+ [0x317B] = "siosnieunkorean",
+ [0x317C] = "siostikeutkorean",
+ [0x317D] = "siospieupkorean",
+ [0x317E] = "sioscieuckorean",
+ [0x317F] = "pansioskorean",
+ [0x3180] = "ssangieungkorean",
+ [0x3181] = "yesieungkorean",
+ [0x3182] = "yesieungsioskorean",
+ [0x3183] = "yesieungpansioskorean",
+ [0x3184] = "kapyeounphieuphkorean",
+ [0x3185] = "ssanghieuhkorean",
+ [0x3186] = "yeorinhieuhkorean",
+ [0x3187] = "yoyakorean",
+ [0x3188] = "yoyaekorean",
+ [0x3189] = "yoikorean",
+ [0x318A] = "yuyeokorean",
+ [0x318B] = "yuyekorean",
+ [0x318C] = "yuikorean",
+ [0x318D] = "araeakorean",
+ [0x318E] = "araeaekorean",
+ [0x3200] = "kiyeokparenkorean",
+ [0x3201] = "nieunparenkorean",
+ [0x3202] = "tikeutparenkorean",
+ [0x3203] = "rieulparenkorean",
+ [0x3204] = "mieumparenkorean",
+ [0x3205] = "pieupparenkorean",
+ [0x3206] = "siosparenkorean",
+ [0x3207] = "ieungparenkorean",
+ [0x3208] = "cieucparenkorean",
+ [0x3209] = "chieuchparenkorean",
+ [0x320A] = "khieukhparenkorean",
+ [0x320B] = "thieuthparenkorean",
+ [0x320C] = "phieuphparenkorean",
+ [0x320D] = "hieuhparenkorean",
+ [0x320E] = "kiyeokaparenkorean",
+ [0x320F] = "nieunaparenkorean",
+ [0x3210] = "tikeutaparenkorean",
+ [0x3211] = "rieulaparenkorean",
+ [0x3212] = "mieumaparenkorean",
+ [0x3213] = "pieupaparenkorean",
+ [0x3214] = "siosaparenkorean",
+ [0x3215] = "ieungaparenkorean",
+ [0x3216] = "cieucaparenkorean",
+ [0x3217] = "chieuchaparenkorean",
+ [0x3218] = "khieukhaparenkorean",
+ [0x3219] = "thieuthaparenkorean",
+ [0x321A] = "phieuphaparenkorean",
+ [0x321B] = "hieuhaparenkorean",
+ [0x321C] = "cieucuparenkorean",
+ [0x3220] = "oneideographicparen",
+ [0x3221] = "twoideographicparen",
+ [0x3222] = "threeideographicparen",
+ [0x3223] = "fourideographicparen",
+ [0x3224] = "fiveideographicparen",
+ [0x3225] = "sixideographicparen",
+ [0x3226] = "sevenideographicparen",
+ [0x3227] = "eightideographicparen",
+ [0x3228] = "nineideographicparen",
+ [0x3229] = "tenideographicparen",
+ [0x322A] = "ideographicmoonparen",
+ [0x322B] = "ideographicfireparen",
+ [0x322C] = "ideographicwaterparen",
+ [0x322D] = "ideographicwoodparen",
+ [0x322E] = "ideographicmetalparen",
+ [0x322F] = "ideographicearthparen",
+ [0x3230] = "ideographicsunparen",
+ [0x3231] = "ideographicstockparen",
+ [0x3232] = "ideographichaveparen",
+ [0x3233] = "ideographicsocietyparen",
+ [0x3234] = "ideographicnameparen",
+ [0x3235] = "ideographicspecialparen",
+ [0x3236] = "ideographicfinancialparen",
+ [0x3237] = "ideographiccongratulationparen",
+ [0x3238] = "ideographiclaborparen",
+ [0x3239] = "ideographicrepresentparen",
+ [0x323A] = "ideographiccallparen",
+ [0x323B] = "ideographicstudyparen",
+ [0x323C] = "ideographicsuperviseparen",
+ [0x323D] = "ideographicenterpriseparen",
+ [0x323E] = "ideographicresourceparen",
+ [0x323F] = "ideographicallianceparen",
+ [0x3240] = "ideographicfestivalparen",
+ [0x3242] = "ideographicselfparen",
+ [0x3243] = "ideographicreachparen",
+ [0x3260] = "kiyeokcirclekorean",
+ [0x3261] = "nieuncirclekorean",
+ [0x3262] = "tikeutcirclekorean",
+ [0x3263] = "rieulcirclekorean",
+ [0x3264] = "mieumcirclekorean",
+ [0x3265] = "pieupcirclekorean",
+ [0x3266] = "sioscirclekorean",
+ [0x3267] = "ieungcirclekorean",
+ [0x3268] = "cieuccirclekorean",
+ [0x3269] = "chieuchcirclekorean",
+ [0x326A] = "khieukhcirclekorean",
+ [0x326B] = "thieuthcirclekorean",
+ [0x326C] = "phieuphcirclekorean",
+ [0x326D] = "hieuhcirclekorean",
+ [0x326E] = "kiyeokacirclekorean",
+ [0x326F] = "nieunacirclekorean",
+ [0x3270] = "tikeutacirclekorean",
+ [0x3271] = "rieulacirclekorean",
+ [0x3272] = "mieumacirclekorean",
+ [0x3273] = "pieupacirclekorean",
+ [0x3274] = "siosacirclekorean",
+ [0x3275] = "ieungacirclekorean",
+ [0x3276] = "cieucacirclekorean",
+ [0x3277] = "chieuchacirclekorean",
+ [0x3278] = "khieukhacirclekorean",
+ [0x3279] = "thieuthacirclekorean",
+ [0x327A] = "phieuphacirclekorean",
+ [0x327B] = "hieuhacirclekorean",
+ [0x327F] = "koreanstandardsymbol",
+ [0x328A] = "ideographmooncircle",
+ [0x328B] = "ideographfirecircle",
+ [0x328C] = "ideographwatercircle",
+ [0x328D] = "ideographwoodcircle",
+ [0x328E] = "ideographmetalcircle",
+ [0x328F] = "ideographearthcircle",
+ [0x3290] = "ideographsuncircle",
+ [0x3294] = "ideographnamecircle",
+ [0x3296] = "ideographicfinancialcircle",
+ [0x3298] = "ideographiclaborcircle",
+ [0x3299] = "ideographicsecretcircle",
+ [0x329D] = "ideographicexcellentcircle",
+ [0x329E] = "ideographicprintcircle",
+ [0x32A3] = "ideographiccorrectcircle",
+ [0x32A4] = "ideographichighcircle",
+ [0x32A5] = "ideographiccentrecircle",
+ [0x32A6] = "ideographiclowcircle",
+ [0x32A7] = "ideographicleftcircle",
+ [0x32A8] = "ideographicrightcircle",
+ [0x32A9] = "ideographicmedicinecircle",
+ [0x3300] = "apaatosquare",
+ [0x3303] = "aarusquare",
+ [0x3305] = "intisquare",
+ [0x330D] = "karoriisquare",
+ [0x3314] = "kirosquare",
+ [0x3315] = "kiroguramusquare",
+ [0x3316] = "kiromeetorusquare",
+ [0x3318] = "guramusquare",
+ [0x331E] = "kooposquare",
+ [0x3322] = "sentisquare",
+ [0x3323] = "sentosquare",
+ [0x3326] = "dorusquare",
+ [0x3327] = "tonsquare",
+ [0x332A] = "haitusquare",
+ [0x332B] = "paasentosquare",
+ [0x3331] = "birusquare",
+ [0x3333] = "huiitosquare",
+ [0x3336] = "hekutaarusquare",
+ [0x3339] = "herutusquare",
+ [0x333B] = "peezisquare",
+ [0x3342] = "hoonsquare",
+ [0x3347] = "mansyonsquare",
+ [0x3349] = "mirisquare",
+ [0x334A] = "miribaarusquare",
+ [0x334D] = "meetorusquare",
+ [0x334E] = "yaadosquare",
+ [0x3351] = "rittorusquare",
+ [0x3357] = "wattosquare",
+ [0x337B] = "heiseierasquare",
+ [0x337C] = "syouwaerasquare",
+ [0x337D] = "taisyouerasquare",
+ [0x337E] = "meizierasquare",
+ [0x337F] = "corporationsquare",
+ [0x3380] = "paampssquare",
+ [0x3381] = "nasquare",
+ [0x3382] = "muasquare",
+ [0x3383] = "masquare",
+ [0x3384] = "kasquare",
+ [0x3385] = "KBsquare",
+ [0x3386] = "MBsquare",
+ [0x3387] = "GBsquare",
+ [0x3388] = "calsquare",
+ [0x3389] = "kcalsquare",
+ [0x338A] = "pfsquare",
+ [0x338B] = "nfsquare",
+ [0x338C] = "mufsquare",
+ [0x338D] = "mugsquare",
+ [0x338E] = "squaremg",
+ [0x338F] = "squarekg",
+ [0x3390] = "Hzsquare",
+ [0x3391] = "khzsquare",
+ [0x3392] = "mhzsquare",
+ [0x3393] = "ghzsquare",
+ [0x3394] = "thzsquare",
+ [0x3395] = "mulsquare",
+ [0x3396] = "mlsquare",
+ [0x3397] = "dlsquare",
+ [0x3398] = "klsquare",
+ [0x3399] = "fmsquare",
+ [0x339A] = "nmsquare",
+ [0x339B] = "mumsquare",
+ [0x339C] = "squaremm",
+ [0x339D] = "squarecm",
+ [0x339E] = "squarekm",
+ [0x339F] = "mmsquaredsquare",
+ [0x33A0] = "cmsquaredsquare",
+ [0x33A1] = "squaremsquared",
+ [0x33A2] = "kmsquaredsquare",
+ [0x33A3] = "mmcubedsquare",
+ [0x33A4] = "cmcubedsquare",
+ [0x33A5] = "mcubedsquare",
+ [0x33A6] = "kmcubedsquare",
+ [0x33A7] = "moverssquare",
+ [0x33A8] = "moverssquaredsquare",
+ [0x33A9] = "pasquare",
+ [0x33AA] = "kpasquare",
+ [0x33AB] = "mpasquare",
+ [0x33AC] = "gpasquare",
+ [0x33AD] = "radsquare",
+ [0x33AE] = "radoverssquare",
+ [0x33AF] = "radoverssquaredsquare",
+ [0x33B0] = "pssquare",
+ [0x33B1] = "nssquare",
+ [0x33B2] = "mussquare",
+ [0x33B3] = "mssquare",
+ [0x33B4] = "pvsquare",
+ [0x33B5] = "nvsquare",
+ [0x33B6] = "muvsquare",
+ [0x33B7] = "mvsquare",
+ [0x33B8] = "kvsquare",
+ [0x33B9] = "mvmegasquare",
+ [0x33BA] = "pwsquare",
+ [0x33BB] = "nwsquare",
+ [0x33BC] = "muwsquare",
+ [0x33BD] = "mwsquare",
+ [0x33BE] = "kwsquare",
+ [0x33BF] = "mwmegasquare",
+ [0x33C0] = "kohmsquare",
+ [0x33C1] = "mohmsquare",
+ [0x33C2] = "amsquare",
+ [0x33C3] = "bqsquare",
+ [0x33C4] = "squarecc",
+ [0x33C5] = "cdsquare",
+ [0x33C6] = "coverkgsquare",
+ [0x33C7] = "cosquare",
+ [0x33C8] = "dbsquare",
+ [0x33C9] = "gysquare",
+ [0x33CA] = "hasquare",
+ [0x33CB] = "HPsquare",
+ [0x33CD] = "KKsquare",
+ [0x33CE] = "squarekmcapital",
+ [0x33CF] = "ktsquare",
+ [0x33D0] = "lmsquare",
+ [0x33D1] = "squareln",
+ [0x33D2] = "squarelog",
+ [0x33D3] = "lxsquare",
+ [0x33D4] = "mbsquare",
+ [0x33D5] = "squaremil",
+ [0x33D6] = "molsquare",
+ [0x33D8] = "pmsquare",
+ [0x33DB] = "srsquare",
+ [0x33DC] = "svsquare",
+ [0x33DD] = "wbsquare",
+ [0x5344] = "twentyhangzhou",
+ [0xF6BE] = "dotlessj",
+ [0xF6BF] = "LL",
+ [0xF6C0] = "ll",
+ [0xF6C3] = "commaaccent",
+ [0xF6C4] = "afii10063",
+ [0xF6C5] = "afii10064",
+ [0xF6C6] = "afii10192",
+ [0xF6C7] = "afii10831",
+ [0xF6C8] = "afii10832",
+ [0xF6C9] = "Acute",
+ [0xF6CA] = "Caron",
+ [0xF6CB] = "Dieresis",
+ [0xF6CC] = "DieresisAcute",
+ [0xF6CD] = "DieresisGrave",
+ [0xF6CE] = "Grave",
+ [0xF6CF] = "Hungarumlaut",
+ [0xF6D0] = "Macron",
+ [0xF6D1] = "cyrBreve",
+ [0xF6D2] = "cyrFlex",
+ [0xF6D3] = "dblGrave",
+ [0xF6D4] = "cyrbreve",
+ [0xF6D5] = "cyrflex",
+ [0xF6D6] = "dblgrave",
+ [0xF6D7] = "dieresisacute",
+ [0xF6D8] = "dieresisgrave",
+ [0xF6D9] = "copyrightserif",
+ [0xF6DA] = "registerserif",
+ [0xF6DB] = "trademarkserif",
+ [0xF6DC] = "onefitted",
+ [0xF6DD] = "rupiah",
+ [0xF6DE] = "threequartersemdash",
+ [0xF6DF] = "centinferior",
+ [0xF6E0] = "centsuperior",
+ [0xF6E1] = "commainferior",
+ [0xF6E2] = "commasuperior",
+ [0xF6E3] = "dollarinferior",
+ [0xF6E4] = "dollarsuperior",
+ [0xF6E5] = "hypheninferior",
+ [0xF6E6] = "hyphensuperior",
+ [0xF6E7] = "periodinferior",
+ [0xF6E8] = "periodsuperior",
+ [0xF6E9] = "asuperior",
+ [0xF6EA] = "bsuperior",
+ [0xF6EB] = "dsuperior",
+ [0xF6EC] = "esuperior",
+ [0xF6ED] = "isuperior",
+ [0xF6EE] = "lsuperior",
+ [0xF6EF] = "msuperior",
+ [0xF6F0] = "osuperior",
+ [0xF6F1] = "rsuperior",
+ [0xF6F2] = "ssuperior",
+ [0xF6F3] = "tsuperior",
+ [0xF6F4] = "Brevesmall",
+ [0xF6F5] = "Caronsmall",
+ [0xF6F6] = "Circumflexsmall",
+ [0xF6F7] = "Dotaccentsmall",
+ [0xF6F8] = "Hungarumlautsmall",
+ [0xF6F9] = "Lslashsmall",
+ [0xF6FA] = "OEsmall",
+ [0xF6FB] = "Ogoneksmall",
+ [0xF6FC] = "Ringsmall",
+ [0xF6FD] = "Scaronsmall",
+ [0xF6FE] = "Tildesmall",
+ [0xF6FF] = "Zcaronsmall",
+ [0xF721] = "exclamsmall",
+ [0xF724] = "dollaroldstyle",
+ [0xF726] = "ampersandsmall",
+ [0xF730] = "zerooldstyle",
+ [0xF731] = "oneoldstyle",
+ [0xF732] = "twooldstyle",
+ [0xF733] = "threeoldstyle",
+ [0xF734] = "fouroldstyle",
+ [0xF735] = "fiveoldstyle",
+ [0xF736] = "sixoldstyle",
+ [0xF737] = "sevenoldstyle",
+ [0xF738] = "eightoldstyle",
+ [0xF739] = "nineoldstyle",
+ [0xF73F] = "questionsmall",
+ [0xF760] = "Gravesmall",
+ [0xF761] = "Asmall",
+ [0xF762] = "Bsmall",
+ [0xF763] = "Csmall",
+ [0xF764] = "Dsmall",
+ [0xF765] = "Esmall",
+ [0xF766] = "Fsmall",
+ [0xF767] = "Gsmall",
+ [0xF768] = "Hsmall",
+ [0xF769] = "Ismall",
+ [0xF76A] = "Jsmall",
+ [0xF76B] = "Ksmall",
+ [0xF76C] = "Lsmall",
+ [0xF76D] = "Msmall",
+ [0xF76E] = "Nsmall",
+ [0xF76F] = "Osmall",
+ [0xF770] = "Psmall",
+ [0xF771] = "Qsmall",
+ [0xF772] = "Rsmall",
+ [0xF773] = "Ssmall",
+ [0xF774] = "Tsmall",
+ [0xF775] = "Usmall",
+ [0xF776] = "Vsmall",
+ [0xF777] = "Wsmall",
+ [0xF778] = "Xsmall",
+ [0xF779] = "Ysmall",
+ [0xF77A] = "Zsmall",
+ [0xF7A1] = "exclamdownsmall",
+ [0xF7A2] = "centoldstyle",
+ [0xF7A8] = "Dieresissmall",
+ [0xF7AF] = "Macronsmall",
+ [0xF7B4] = "Acutesmall",
+ [0xF7B8] = "Cedillasmall",
+ [0xF7BF] = "questiondownsmall",
+ [0xF7E0] = "Agravesmall",
+ [0xF7E1] = "Aacutesmall",
+ [0xF7E2] = "Acircumflexsmall",
+ [0xF7E3] = "Atildesmall",
+ [0xF7E4] = "Adieresissmall",
+ [0xF7E5] = "Aringsmall",
+ [0xF7E6] = "AEsmall",
+ [0xF7E7] = "Ccedillasmall",
+ [0xF7E8] = "Egravesmall",
+ [0xF7E9] = "Eacutesmall",
+ [0xF7EA] = "Ecircumflexsmall",
+ [0xF7EB] = "Edieresissmall",
+ [0xF7EC] = "Igravesmall",
+ [0xF7ED] = "Iacutesmall",
+ [0xF7EE] = "Icircumflexsmall",
+ [0xF7EF] = "Idieresissmall",
+ [0xF7F0] = "Ethsmall",
+ [0xF7F1] = "Ntildesmall",
+ [0xF7F2] = "Ogravesmall",
+ [0xF7F3] = "Oacutesmall",
+ [0xF7F4] = "Ocircumflexsmall",
+ [0xF7F5] = "Otildesmall",
+ [0xF7F6] = "Odieresissmall",
+ [0xF7F8] = "Oslashsmall",
+ [0xF7F9] = "Ugravesmall",
+ [0xF7FA] = "Uacutesmall",
+ [0xF7FB] = "Ucircumflexsmall",
+ [0xF7FC] = "Udieresissmall",
+ [0xF7FD] = "Yacutesmall",
+ [0xF7FE] = "Thornsmall",
+ [0xF7FF] = "Ydieresissmall",
+ [0xF884] = "maihanakatleftthai",
+ [0xF885] = "saraileftthai",
+ [0xF886] = "saraiileftthai",
+ [0xF887] = "saraueleftthai",
+ [0xF888] = "saraueeleftthai",
+ [0xF889] = "maitaikhuleftthai",
+ [0xF88A] = "maiekupperleftthai",
+ [0xF88B] = "maieklowrightthai",
+ [0xF88C] = "maieklowleftthai",
+ [0xF88D] = "maithoupperleftthai",
+ [0xF88E] = "maitholowrightthai",
+ [0xF88F] = "maitholowleftthai",
+ [0xF890] = "maitriupperleftthai",
+ [0xF891] = "maitrilowrightthai",
+ [0xF892] = "maitrilowleftthai",
+ [0xF893] = "maichattawaupperleftthai",
+ [0xF894] = "maichattawalowrightthai",
+ [0xF895] = "maichattawalowleftthai",
+ [0xF896] = "thanthakhatupperleftthai",
+ [0xF897] = "thanthakhatlowrightthai",
+ [0xF898] = "thanthakhatlowleftthai",
+ [0xF899] = "nikhahitleftthai",
+ [0xF8E5] = "radicalex",
+ [0xF8E6] = "arrowvertex",
+ [0xF8E7] = "arrowhorizex",
+ [0xF8E8] = "registersans",
+ [0xF8E9] = "copyrightsans",
+ [0xF8EA] = "trademarksans",
+ [0xF8EB] = "parenlefttp",
+ [0xF8EC] = "parenleftex",
+ [0xF8ED] = "parenleftbt",
+ [0xF8EE] = "bracketlefttp",
+ [0xF8EF] = "bracketleftex",
+ [0xF8F0] = "bracketleftbt",
+ [0xF8F1] = "bracelefttp",
+ [0xF8F2] = "braceleftmid",
+ [0xF8F3] = "braceleftbt",
+ [0xF8F4] = "braceex",
+ [0xF8F5] = "integralex",
+ [0xF8F6] = "parenrighttp",
+ [0xF8F7] = "parenrightex",
+ [0xF8F8] = "parenrightbt",
+ [0xF8F9] = "bracketrighttp",
+ [0xF8FA] = "bracketrightex",
+ [0xF8FB] = "bracketrightbt",
+ [0xF8FC] = "bracerighttp",
+ [0xF8FD] = "bracerightmid",
+ [0xF8FE] = "bracerightbt",
+ [0xF8FF] = "apple",
+ [0xFB00] = "ff",
+ [0xFB01] = "fi",
+ [0xFB02] = "fl",
+ [0xFB03] = "ffi",
+ [0xFB04] = "ffl",
+ [0xFB1F] = "yodyodpatahhebrew",
+ [0xFB20] = "ayinaltonehebrew",
+ [0xFB2A] = "shinshindothebrew",
+ [0xFB2B] = "shinsindothebrew",
+ [0xFB2C] = "shindageshshindothebrew",
+ [0xFB2D] = "shindageshsindothebrew",
+ [0xFB2E] = "alefpatahhebrew",
+ [0xFB2F] = "alefqamatshebrew",
+ [0xFB30] = "alefdageshhebrew",
+ [0xFB31] = "betdageshhebrew",
+ [0xFB32] = "gimeldageshhebrew",
+ [0xFB33] = "daletdageshhebrew",
+ [0xFB34] = "hedageshhebrew",
+ [0xFB35] = "vavdageshhebrew",
+ [0xFB36] = "zayindageshhebrew",
+ [0xFB38] = "tetdageshhebrew",
+ [0xFB39] = "yoddageshhebrew",
+ [0xFB3A] = "finalkafdageshhebrew",
+ [0xFB3B] = "kafdageshhebrew",
+ [0xFB3C] = "lameddageshhebrew",
+ [0xFB3E] = "memdageshhebrew",
+ [0xFB40] = "nundageshhebrew",
+ [0xFB41] = "samekhdageshhebrew",
+ [0xFB43] = "pefinaldageshhebrew",
+ [0xFB44] = "pedageshhebrew",
+ [0xFB46] = "tsadidageshhebrew",
+ [0xFB47] = "qofdageshhebrew",
+ [0xFB48] = "reshdageshhebrew",
+ [0xFB49] = "shindageshhebrew",
+ [0xFB4A] = "tavdageshhebrew",
+ [0xFB4B] = "vavholamhebrew",
+ [0xFB4C] = "betrafehebrew",
+ [0xFB4D] = "kafrafehebrew",
+ [0xFB4E] = "perafehebrew",
+ [0xFB4F] = "aleflamedhebrew",
+ [0xFB57] = "pehfinalarabic",
+ [0xFB58] = "pehinitialarabic",
+ [0xFB59] = "pehmedialarabic",
+ [0xFB67] = "ttehfinalarabic",
+ [0xFB68] = "ttehinitialarabic",
+ [0xFB69] = "ttehmedialarabic",
+ [0xFB6B] = "vehfinalarabic",
+ [0xFB6C] = "vehinitialarabic",
+ [0xFB6D] = "vehmedialarabic",
+ [0xFB7B] = "tchehfinalarabic",
+ [0xFB7C] = "tchehmeeminitialarabic",
+ [0xFB7D] = "tchehmedialarabic",
+ [0xFB89] = "ddalfinalarabic",
+ [0xFB8B] = "jehfinalarabic",
+ [0xFB8D] = "rrehfinalarabic",
+ [0xFB93] = "gaffinalarabic",
+ [0xFB94] = "gafinitialarabic",
+ [0xFB95] = "gafmedialarabic",
+ [0xFB9F] = "noonghunnafinalarabic",
+ [0xFBA4] = "hehhamzaaboveisolatedarabic",
+ [0xFBA5] = "hehhamzaabovefinalarabic",
+ [0xFBA7] = "hehfinalaltonearabic",
+ [0xFBA8] = "hehinitialaltonearabic",
+ [0xFBA9] = "hehmedialaltonearabic",
+ [0xFBAF] = "yehbarreefinalarabic",
+ [0xFC08] = "behmeemisolatedarabic",
+ [0xFC0B] = "tehjeemisolatedarabic",
+ [0xFC0C] = "tehhahisolatedarabic",
+ [0xFC0E] = "tehmeemisolatedarabic",
+ [0xFC48] = "meemmeemisolatedarabic",
+ [0xFC4B] = "noonjeemisolatedarabic",
+ [0xFC4E] = "noonmeemisolatedarabic",
+ [0xFC58] = "yehmeemisolatedarabic",
+ [0xFC5E] = "shaddadammatanarabic",
+ [0xFC5F] = "shaddakasratanarabic",
+ [0xFC60] = "shaddafathaarabic",
+ [0xFC61] = "shaddadammaarabic",
+ [0xFC62] = "shaddakasraarabic",
+ [0xFC6D] = "behnoonfinalarabic",
+ [0xFC73] = "tehnoonfinalarabic",
+ [0xFC8D] = "noonnoonfinalarabic",
+ [0xFC94] = "yehnoonfinalarabic",
+ [0xFC9F] = "behmeeminitialarabic",
+ [0xFCA1] = "tehjeeminitialarabic",
+ [0xFCA2] = "tehhahinitialarabic",
+ [0xFCA4] = "tehmeeminitialarabic",
+ [0xFCC9] = "lamjeeminitialarabic",
+ [0xFCCA] = "lamhahinitialarabic",
+ [0xFCCB] = "lamkhahinitialarabic",
+ [0xFCCC] = "lammeeminitialarabic",
+ [0xFCD1] = "meemmeeminitialarabic",
+ [0xFCD2] = "noonjeeminitialarabic",
+ [0xFCD5] = "noonmeeminitialarabic",
+ [0xFCDD] = "yehmeeminitialarabic",
+ [0xFD3E] = "parenleftaltonearabic",
+ [0xFD3F] = "parenrightaltonearabic",
+ [0xFD88] = "lammeemhahinitialarabic",
+ [0xFDF2] = "lamlamhehisolatedarabic",
+ [0xFDFA] = "sallallahoualayhewasallamarabic",
+ [0xFE30] = "twodotleadervertical",
+ [0xFE31] = "emdashvertical",
+ [0xFE32] = "endashvertical",
+ [0xFE33] = "underscorevertical",
+ [0xFE34] = "wavyunderscorevertical",
+ [0xFE35] = "parenleftvertical",
+ [0xFE36] = "parenrightvertical",
+ [0xFE37] = "braceleftvertical",
+ [0xFE38] = "bracerightvertical",
+ [0xFE39] = "tortoiseshellbracketleftvertical",
+ [0xFE3A] = "tortoiseshellbracketrightvertical",
+ [0xFE3B] = "blacklenticularbracketleftvertical",
+ [0xFE3C] = "blacklenticularbracketrightvertical",
+ [0xFE3D] = "dblanglebracketleftvertical",
+ [0xFE3E] = "dblanglebracketrightvertical",
+ [0xFE3F] = "anglebracketleftvertical",
+ [0xFE40] = "anglebracketrightvertical",
+ [0xFE41] = "cornerbracketleftvertical",
+ [0xFE42] = "cornerbracketrightvertical",
+ [0xFE43] = "whitecornerbracketleftvertical",
+ [0xFE44] = "whitecornerbracketrightvertical",
+ [0xFE49] = "overlinedashed",
+ [0xFE4A] = "overlinecenterline",
+ [0xFE4B] = "overlinewavy",
+ [0xFE4C] = "overlinedblwavy",
+ [0xFE4D] = "lowlinedashed",
+ [0xFE4E] = "lowlinecenterline",
+ [0xFE4F] = "underscorewavy",
+ [0xFE50] = "commasmall",
+ [0xFE52] = "periodsmall",
+ [0xFE54] = "semicolonsmall",
+ [0xFE55] = "colonsmall",
+ [0xFE59] = "parenleftsmall",
+ [0xFE5A] = "parenrightsmall",
+ [0xFE5B] = "braceleftsmall",
+ [0xFE5C] = "bracerightsmall",
+ [0xFE5D] = "tortoiseshellbracketleftsmall",
+ [0xFE5E] = "tortoiseshellbracketrightsmall",
+ [0xFE5F] = "numbersignsmall",
+ [0xFE61] = "asterisksmall",
+ [0xFE62] = "plussmall",
+ [0xFE63] = "hyphensmall",
+ [0xFE64] = "lesssmall",
+ [0xFE65] = "greatersmall",
+ [0xFE66] = "equalsmall",
+ [0xFE69] = "dollarsmall",
+ [0xFE6A] = "percentsmall",
+ [0xFE6B] = "atsmall",
+ [0xFE82] = "alefmaddaabovefinalarabic",
+ [0xFE84] = "alefhamzaabovefinalarabic",
+ [0xFE86] = "wawhamzaabovefinalarabic",
+ [0xFE88] = "alefhamzabelowfinalarabic",
+ [0xFE8A] = "yehhamzaabovefinalarabic",
+ [0xFE8B] = "yehhamzaaboveinitialarabic",
+ [0xFE8C] = "yehhamzaabovemedialarabic",
+ [0xFE8E] = "aleffinalarabic",
+ [0xFE90] = "behfinalarabic",
+ [0xFE91] = "behinitialarabic",
+ [0xFE92] = "behmedialarabic",
+ [0xFE94] = "tehmarbutafinalarabic",
+ [0xFE96] = "tehfinalarabic",
+ [0xFE97] = "tehinitialarabic",
+ [0xFE98] = "tehmedialarabic",
+ [0xFE9A] = "thehfinalarabic",
+ [0xFE9B] = "thehinitialarabic",
+ [0xFE9C] = "thehmedialarabic",
+ [0xFE9E] = "jeemfinalarabic",
+ [0xFE9F] = "jeeminitialarabic",
+ [0xFEA0] = "jeemmedialarabic",
+ [0xFEA2] = "hahfinalarabic",
+ [0xFEA3] = "hahinitialarabic",
+ [0xFEA4] = "hahmedialarabic",
+ [0xFEA6] = "khahfinalarabic",
+ [0xFEA7] = "khahinitialarabic",
+ [0xFEA8] = "khahmedialarabic",
+ [0xFEAA] = "dalfinalarabic",
+ [0xFEAC] = "thalfinalarabic",
+ [0xFEAE] = "rehfinalarabic",
+ [0xFEB0] = "zainfinalarabic",
+ [0xFEB2] = "seenfinalarabic",
+ [0xFEB3] = "seeninitialarabic",
+ [0xFEB4] = "seenmedialarabic",
+ [0xFEB6] = "sheenfinalarabic",
+ [0xFEB7] = "sheeninitialarabic",
+ [0xFEB8] = "sheenmedialarabic",
+ [0xFEBA] = "sadfinalarabic",
+ [0xFEBB] = "sadinitialarabic",
+ [0xFEBC] = "sadmedialarabic",
+ [0xFEBE] = "dadfinalarabic",
+ [0xFEBF] = "dadinitialarabic",
+ [0xFEC0] = "dadmedialarabic",
+ [0xFEC2] = "tahfinalarabic",
+ [0xFEC3] = "tahinitialarabic",
+ [0xFEC4] = "tahmedialarabic",
+ [0xFEC6] = "zahfinalarabic",
+ [0xFEC7] = "zahinitialarabic",
+ [0xFEC8] = "zahmedialarabic",
+ [0xFECA] = "ainfinalarabic",
+ [0xFECB] = "aininitialarabic",
+ [0xFECC] = "ainmedialarabic",
+ [0xFECE] = "ghainfinalarabic",
+ [0xFECF] = "ghaininitialarabic",
+ [0xFED0] = "ghainmedialarabic",
+ [0xFED2] = "fehfinalarabic",
+ [0xFED3] = "fehinitialarabic",
+ [0xFED4] = "fehmedialarabic",
+ [0xFED6] = "qaffinalarabic",
+ [0xFED7] = "qafinitialarabic",
+ [0xFED8] = "qafmedialarabic",
+ [0xFEDA] = "kaffinalarabic",
+ [0xFEDB] = "kafinitialarabic",
+ [0xFEDC] = "kafmedialarabic",
+ [0xFEDE] = "lamfinalarabic",
+ [0xFEDF] = "lammeemkhahinitialarabic",
+ [0xFEE0] = "lammedialarabic",
+ [0xFEE2] = "meemfinalarabic",
+ [0xFEE3] = "meeminitialarabic",
+ [0xFEE4] = "meemmedialarabic",
+ [0xFEE6] = "noonfinalarabic",
+ [0xFEE7] = "nooninitialarabic",
+ [0xFEE8] = "noonmedialarabic",
+ [0xFEEA] = "hehfinalarabic",
+ [0xFEEB] = "hehinitialarabic",
+ [0xFEEC] = "hehmedialarabic",
+ [0xFEEE] = "wawfinalarabic",
+ [0xFEF0] = "alefmaksurafinalarabic",
+ [0xFEF2] = "yehfinalarabic",
+ [0xFEF3] = "yehinitialarabic",
+ [0xFEF4] = "yehmedialarabic",
+ [0xFEF5] = "lamalefmaddaaboveisolatedarabic",
+ [0xFEF6] = "lamalefmaddaabovefinalarabic",
+ [0xFEF7] = "lamalefhamzaaboveisolatedarabic",
+ [0xFEF8] = "lamalefhamzaabovefinalarabic",
+ [0xFEF9] = "lamalefhamzabelowisolatedarabic",
+ [0xFEFA] = "lamalefhamzabelowfinalarabic",
+ [0xFEFB] = "lamalefisolatedarabic",
+ [0xFEFC] = "lamaleffinalarabic",
+ [0xFEFF] = "zerowidthjoiner",
+ [0xFF01] = "exclammonospace",
+ [0xFF02] = "quotedblmonospace",
+ [0xFF03] = "numbersignmonospace",
+ [0xFF04] = "dollarmonospace",
+ [0xFF05] = "percentmonospace",
+ [0xFF06] = "ampersandmonospace",
+ [0xFF07] = "quotesinglemonospace",
+ [0xFF08] = "parenleftmonospace",
+ [0xFF09] = "parenrightmonospace",
+ [0xFF0A] = "asteriskmonospace",
+ [0xFF0B] = "plusmonospace",
+ [0xFF0C] = "commamonospace",
+ [0xFF0D] = "hyphenmonospace",
+ [0xFF0E] = "periodmonospace",
+ [0xFF0F] = "slashmonospace",
+ [0xFF10] = "zeromonospace",
+ [0xFF11] = "onemonospace",
+ [0xFF12] = "twomonospace",
+ [0xFF13] = "threemonospace",
+ [0xFF14] = "fourmonospace",
+ [0xFF15] = "fivemonospace",
+ [0xFF16] = "sixmonospace",
+ [0xFF17] = "sevenmonospace",
+ [0xFF18] = "eightmonospace",
+ [0xFF19] = "ninemonospace",
+ [0xFF1A] = "colonmonospace",
+ [0xFF1B] = "semicolonmonospace",
+ [0xFF1C] = "lessmonospace",
+ [0xFF1D] = "equalmonospace",
+ [0xFF1E] = "greatermonospace",
+ [0xFF1F] = "questionmonospace",
+ [0xFF20] = "atmonospace",
+ [0xFF21] = "Amonospace",
+ [0xFF22] = "Bmonospace",
+ [0xFF23] = "Cmonospace",
+ [0xFF24] = "Dmonospace",
+ [0xFF25] = "Emonospace",
+ [0xFF26] = "Fmonospace",
+ [0xFF27] = "Gmonospace",
+ [0xFF28] = "Hmonospace",
+ [0xFF29] = "Imonospace",
+ [0xFF2A] = "Jmonospace",
+ [0xFF2B] = "Kmonospace",
+ [0xFF2C] = "Lmonospace",
+ [0xFF2D] = "Mmonospace",
+ [0xFF2E] = "Nmonospace",
+ [0xFF2F] = "Omonospace",
+ [0xFF30] = "Pmonospace",
+ [0xFF31] = "Qmonospace",
+ [0xFF32] = "Rmonospace",
+ [0xFF33] = "Smonospace",
+ [0xFF34] = "Tmonospace",
+ [0xFF35] = "Umonospace",
+ [0xFF36] = "Vmonospace",
+ [0xFF37] = "Wmonospace",
+ [0xFF38] = "Xmonospace",
+ [0xFF39] = "Ymonospace",
+ [0xFF3A] = "Zmonospace",
+ [0xFF3B] = "bracketleftmonospace",
+ [0xFF3C] = "backslashmonospace",
+ [0xFF3D] = "bracketrightmonospace",
+ [0xFF3E] = "asciicircummonospace",
+ [0xFF3F] = "underscoremonospace",
+ [0xFF40] = "gravemonospace",
+ [0xFF41] = "amonospace",
+ [0xFF42] = "bmonospace",
+ [0xFF43] = "cmonospace",
+ [0xFF44] = "dmonospace",
+ [0xFF45] = "emonospace",
+ [0xFF46] = "fmonospace",
+ [0xFF47] = "gmonospace",
+ [0xFF48] = "hmonospace",
+ [0xFF49] = "imonospace",
+ [0xFF4A] = "jmonospace",
+ [0xFF4B] = "kmonospace",
+ [0xFF4C] = "lmonospace",
+ [0xFF4D] = "mmonospace",
+ [0xFF4E] = "nmonospace",
+ [0xFF4F] = "omonospace",
+ [0xFF50] = "pmonospace",
+ [0xFF51] = "qmonospace",
+ [0xFF52] = "rmonospace",
+ [0xFF53] = "smonospace",
+ [0xFF54] = "tmonospace",
+ [0xFF55] = "umonospace",
+ [0xFF56] = "vmonospace",
+ [0xFF57] = "wmonospace",
+ [0xFF58] = "xmonospace",
+ [0xFF59] = "ymonospace",
+ [0xFF5A] = "zmonospace",
+ [0xFF5B] = "braceleftmonospace",
+ [0xFF5C] = "barmonospace",
+ [0xFF5D] = "bracerightmonospace",
+ [0xFF5E] = "asciitildemonospace",
+ [0xFF61] = "periodhalfwidth",
+ [0xFF62] = "cornerbracketlefthalfwidth",
+ [0xFF63] = "cornerbracketrighthalfwidth",
+ [0xFF64] = "ideographiccommaleft",
+ [0xFF65] = "middledotkatakanahalfwidth",
+ [0xFF66] = "wokatakanahalfwidth",
+ [0xFF67] = "asmallkatakanahalfwidth",
+ [0xFF68] = "ismallkatakanahalfwidth",
+ [0xFF69] = "usmallkatakanahalfwidth",
+ [0xFF6A] = "esmallkatakanahalfwidth",
+ [0xFF6B] = "osmallkatakanahalfwidth",
+ [0xFF6C] = "yasmallkatakanahalfwidth",
+ [0xFF6D] = "yusmallkatakanahalfwidth",
+ [0xFF6E] = "yosmallkatakanahalfwidth",
+ [0xFF6F] = "tusmallkatakanahalfwidth",
+ [0xFF70] = "katahiraprolongmarkhalfwidth",
+ [0xFF71] = "akatakanahalfwidth",
+ [0xFF72] = "ikatakanahalfwidth",
+ [0xFF73] = "ukatakanahalfwidth",
+ [0xFF74] = "ekatakanahalfwidth",
+ [0xFF75] = "okatakanahalfwidth",
+ [0xFF76] = "kakatakanahalfwidth",
+ [0xFF77] = "kikatakanahalfwidth",
+ [0xFF78] = "kukatakanahalfwidth",
+ [0xFF79] = "kekatakanahalfwidth",
+ [0xFF7A] = "kokatakanahalfwidth",
+ [0xFF7B] = "sakatakanahalfwidth",
+ [0xFF7C] = "sikatakanahalfwidth",
+ [0xFF7D] = "sukatakanahalfwidth",
+ [0xFF7E] = "sekatakanahalfwidth",
+ [0xFF7F] = "sokatakanahalfwidth",
+ [0xFF80] = "takatakanahalfwidth",
+ [0xFF81] = "tikatakanahalfwidth",
+ [0xFF82] = "tukatakanahalfwidth",
+ [0xFF83] = "tekatakanahalfwidth",
+ [0xFF84] = "tokatakanahalfwidth",
+ [0xFF85] = "nakatakanahalfwidth",
+ [0xFF86] = "nikatakanahalfwidth",
+ [0xFF87] = "nukatakanahalfwidth",
+ [0xFF88] = "nekatakanahalfwidth",
+ [0xFF89] = "nokatakanahalfwidth",
+ [0xFF8A] = "hakatakanahalfwidth",
+ [0xFF8B] = "hikatakanahalfwidth",
+ [0xFF8C] = "hukatakanahalfwidth",
+ [0xFF8D] = "hekatakanahalfwidth",
+ [0xFF8E] = "hokatakanahalfwidth",
+ [0xFF8F] = "makatakanahalfwidth",
+ [0xFF90] = "mikatakanahalfwidth",
+ [0xFF91] = "mukatakanahalfwidth",
+ [0xFF92] = "mekatakanahalfwidth",
+ [0xFF93] = "mokatakanahalfwidth",
+ [0xFF94] = "yakatakanahalfwidth",
+ [0xFF95] = "yukatakanahalfwidth",
+ [0xFF96] = "yokatakanahalfwidth",
+ [0xFF97] = "rakatakanahalfwidth",
+ [0xFF98] = "rikatakanahalfwidth",
+ [0xFF99] = "rukatakanahalfwidth",
+ [0xFF9A] = "rekatakanahalfwidth",
+ [0xFF9B] = "rokatakanahalfwidth",
+ [0xFF9C] = "wakatakanahalfwidth",
+ [0xFF9D] = "nkatakanahalfwidth",
+ [0xFF9E] = "voicedmarkkanahalfwidth",
+ [0xFF9F] = "semivoicedmarkkanahalfwidth",
+ [0xFFE0] = "centmonospace",
+ [0xFFE1] = "sterlingmonospace",
+ [0xFFE3] = "macronmonospace",
+ [0xFFE5] = "yenmonospace",
+ [0xFFE6] = "wonmonospace",
+}
+
+fonts.map.agl_to_unicode = table.swapped(fonts.map.unicode_to_agl)
diff --git a/Master/texmf-dist/tex/context/base/font-chk.lua b/Master/texmf-dist/tex/context/base/font-chk.lua
index 382f671d8a8..32fdf88940a 100644
--- a/Master/texmf-dist/tex/context/base/font-chk.lua
+++ b/Master/texmf-dist/tex/context/base/font-chk.lua
@@ -1,6 +1,6 @@
if not modules then modules = { } end modules ['font-chk'] = {
version = 1.001,
- comment = "companion to font-ini.tex",
+ comment = "companion to font-ini.mkiv",
author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
copyright = "PRAGMA ADE / ConTeXt Development Team",
license = "see context related readme files"
@@ -74,3 +74,17 @@ function checkers.missing(head)
end
return head, false
end
+
+trackers.register("fonts.missing", function(v)
+ tasks.enableaction("processors", "fonts.checkers.missing") -- always on then
+ checkers.enabled = v
+end)
+
+function checkers.enable(delete)
+ tasks.enableaction("processors", "fonts.checkers.missing") -- always on then
+ if delete ~= nil then
+ checkers.delete = delete
+ end
+ checkers.enabled = true
+end
+
diff --git a/Master/texmf-dist/tex/context/base/font-cid.lua b/Master/texmf-dist/tex/context/base/font-cid.lua
index 13e9cce8949..d1c727af2d9 100644
--- a/Master/texmf-dist/tex/context/base/font-cid.lua
+++ b/Master/texmf-dist/tex/context/base/font-cid.lua
@@ -6,8 +6,9 @@ if not modules then modules = { } end modules ['font-cid'] = {
license = "see context related readme files"
}
-local format, match = string.format, string.match
+local format, match, lower = string.format, string.match, string.lower
local tonumber = tonumber
+local lpegmatch = lpeg.match
local trace_loading = false trackers.register("otf.loading", function(v) trace_loading = v end)
@@ -61,7 +62,7 @@ function fonts.cid.load(filename)
local data = io.loaddata(filename)
if data then
unicodes, names = { }, { }
- grammar:match(data)
+ lpegmatch(grammar,data)
local supplement, registry, ordering = match(filename,"^(.-)%-(.-)%-()%.(.-)$")
return {
supplement = supplement,
@@ -78,9 +79,11 @@ end
local template = "%s-%s-%s.cidmap"
+
local function locate(registry,ordering,supplement)
- local filename = string.lower(format(template,registry,ordering,supplement))
- local cidmap = fonts.cid.map[filename]
+ local filename = format(template,registry,ordering,supplement)
+ local hashname = lower(filename)
+ local cidmap = fonts.cid.map[hashname]
if not cidmap then
if trace_loading then
logs.report("load otf","checking cidmap, registry: %s, ordering: %s, supplement: %s, filename: %s",registry,ordering,supplement,filename)
@@ -92,7 +95,7 @@ local function locate(registry,ordering,supplement)
if trace_loading then
logs.report("load otf","using cidmap file %s",filename)
end
- fonts.cid.map[filename] = cidmap
+ fonts.cid.map[hashname] = cidmap
cidmap.usedname = file.basename(filename)
return cidmap
end
diff --git a/Master/texmf-dist/tex/context/base/font-col.lua b/Master/texmf-dist/tex/context/base/font-col.lua
index f2ee3f1ae4b..d313357a2e0 100644
--- a/Master/texmf-dist/tex/context/base/font-col.lua
+++ b/Master/texmf-dist/tex/context/base/font-col.lua
@@ -1,6 +1,6 @@
if not modules then modules = { } end modules ['font-col'] = {
version = 1.001,
- comment = "companion to font-ini.tex",
+ comment = "companion to font-ini.mkiv",
author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
copyright = "PRAGMA ADE / ConTeXt Development Team",
license = "see context related readme files"
@@ -10,6 +10,7 @@ if not modules then modules = { } end modules ['font-col'] = {
local format, gmatch, texsprint, type = string.format, string.gmatch, tex.sprint, type
local traverse_id, first_character = node.traverse_id, node.first_character
+local lpegmatch = lpeg.match
local ctxcatcodes = tex.ctxcatcodes
@@ -166,7 +167,7 @@ function collections.prepare(name)
local f = d[i]
local name = f.font
local scale = f.rscale or 1
- if okay:match(name) then
+ if lpegmatch(okay,name) then
texsprint(ctxcatcodes,format("\\doclonefonta{%s}{%s}",name,scale)) -- define with unique specs
else
texsprint(ctxcatcodes,format("\\doclonefontb{%s}{%s}",name,scale)) -- define with inherited specs
diff --git a/Master/texmf-dist/tex/context/base/font-col.mkiv b/Master/texmf-dist/tex/context/base/font-col.mkiv
index 22a67ac8eab..181b985f68e 100644
--- a/Master/texmf-dist/tex/context/base/font-col.mkiv
+++ b/Master/texmf-dist/tex/context/base/font-col.mkiv
@@ -12,6 +12,8 @@
%C details.
% ! EXPERIMENTAL ! code will be made more nice
+%
+% actually we can now do more at the lua end
% todo: missing only, force always, multiple fallbacks with test, scale
%
@@ -27,7 +29,7 @@
\unprotect
-\def\definefontfallback
+\unexpanded\def\definefontfallback
{\doquadrupleempty\dodefinefontfallback}
\def\dodefinefontfallback[#1][#2][#3][#4]%
diff --git a/Master/texmf-dist/tex/context/base/font-ctx.lua b/Master/texmf-dist/tex/context/base/font-ctx.lua
index 2f51c5229bc..76e9f095a48 100644
--- a/Master/texmf-dist/tex/context/base/font-ctx.lua
+++ b/Master/texmf-dist/tex/context/base/font-ctx.lua
@@ -1,14 +1,19 @@
if not modules then modules = { } end modules ['font-ctx'] = {
version = 1.001,
- comment = "companion to font-ini.tex",
+ comment = "companion to font-ini.mkiv",
author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
copyright = "PRAGMA ADE / ConTeXt Development Team",
license = "see context related readme files"
}
-local texsprint, count = tex.sprint, tex.count
-local format, concat, gmatch, match, find, lower = string.format, table.concat, string.gmatch, string.match, string.find, string.lower
-local tostring, next = tostring, next
+-- needs a cleanup: merge of replace, lang/script etc
+
+local texsprint, count, texsetcount = tex.sprint, tex.count, tex.setcount
+local format, concat, gmatch, match, find, lower, gsub, byte = string.format, table.concat, string.gmatch, string.match, string.find, string.lower, string.gsub, string.byte
+
+local tostring, next, type = tostring, next, type
+local lpegmatch = lpeg.match
+local round = math.round
local ctxcatcodes = tex.ctxcatcodes
@@ -16,7 +21,7 @@ local trace_defining = false trackers.register("fonts.defining", function(v) tr
local tfm = fonts.tfm
local define = fonts.define
-local fontdata = fonts.ids
+local fontdata = fonts.identifiers
local specify = define.specify
specify.context_setups = specify.context_setups or { }
@@ -46,7 +51,7 @@ name*context specification
function specify.predefined(specification)
local detail = specification.detail
if detail ~= "" then
- -- detail = detail:gsub("["..define.splitsymbols.."].*$","") -- get rid of *whatever specs and such
+ -- detail = gsub(detail,"["..define.splitsymbols.."].*$","") -- get rid of *whatever specs and such
if define.methods[detail] then -- since these may be appended at the
specification.features.vtf = { preset = detail } -- tex end by default
end
@@ -66,22 +71,25 @@ local settings_to_hash = aux.settings_to_hash
local default_features = fonts.otf.features.default
local function preset_context(name,parent,features) -- currently otf only
+ if features == "" and find(parent,"=") then
+ features = parent
+ parent = ""
+ end
if features == "" then
- if find(parent,"=") then
- features = parent
- parent = ""
- end
+ features = { }
+ elseif type(features) == "string" then
+ features = normalize_meanings(settings_to_hash(features))
+ else
+ features = normalize_meanings(features)
end
- local number = (setups[name] and setups[name].number) or 0
- local t = (features == "" and { }) or normalize_meanings(settings_to_hash(features))
-- todo: synonyms, and not otf bound
if parent ~= "" then
for p in gmatch(parent,"[^, ]+") do
local s = setups[p]
if s then
for k,v in next, s do
- if t[k] == nil then
- t[k] = v
+ if features[k] == nil then
+ features[k] = v
end
end
end
@@ -91,25 +99,26 @@ local function preset_context(name,parent,features) -- currently otf only
-- we need to preset them (we hash the features and adding a default
-- setting during initialization may result in a different hash)
for k,v in next, triggers do
- if type(t[v]) == "nil" then
+ if features[v] == nil then -- not false !
local vv = default_features[v]
- if vv then t[v] = vv end
+ if vv then features[v] = vv end
end
end
-- sparse 'm so that we get a better hash and less test (experimental
-- optimization)
- local tt = { } -- maybe avoid tt
- for k,v in next, t do
- if v then tt[k] = v end
+ local t = { } -- can we avoid t ?
+ for k,v in next, features do
+ if v then t[k] = v end
end
-- needed for dynamic features
+ local number = (setups[name] and setups[name].number) or 0
if number == 0 then
number = #numbers + 1
numbers[number] = name
end
- tt.number = number
- setups[name] = tt
- return number
+ t.number = number
+ setups[name] = t
+ return number, t
end
local function context_number(name) -- will be replaced
@@ -267,13 +276,16 @@ local P, C, Cc = lpeg.P, lpeg.C, lpeg.Cc
local space = P(" ")
local spaces = space^0
-local value = C((1-space)^1)
+local leftparent = (P"(")
+local rightparent = (P")")
+local value = C((leftparent * (1-rightparent)^0 * rightparent + (1-space))^1)
+local dimension = C((space/"" + P(1))^1)
local rest = C(P(1)^0)
local scale_none = Cc(0)
-local scale_at = P("at") * Cc(1) * spaces * value
-local scale_sa = P("sa") * Cc(2) * spaces * value
-local scale_mo = P("mo") * Cc(3) * spaces * value
-local scale_scaled = P("scaled") * Cc(4) * spaces * value
+local scale_at = P("at") * Cc(1) * spaces * dimension -- value
+local scale_sa = P("sa") * Cc(2) * spaces * dimension -- value
+local scale_mo = P("mo") * Cc(3) * spaces * dimension -- value
+local scale_scaled = P("scaled") * Cc(4) * spaces * dimension -- value
local sizepattern = spaces * (scale_at + scale_sa + scale_mo + scale_scaled + scale_none)
local splitpattern = spaces * value * spaces * rest
@@ -287,7 +299,7 @@ local get_specification = define.get_specification
function define.command_1(str)
statistics.starttiming(fonts)
- local fullname, size = splitpattern:match(str)
+ local fullname, size = lpegmatch(splitpattern,str)
local lookup, name, sub, method, detail = get_specification(fullname)
if not name then
logs.report("define font","strange definition '%s'",str)
@@ -295,40 +307,50 @@ function define.command_1(str)
elseif name == "unknown" then
texsprint(ctxcatcodes,"\\fcglet\\somefontname\\defaultfontfile")
else
- texsprint(ctxcatcodes,format("\\fcxdef\\somefontname{%s}",name))
+ texsprint(ctxcatcodes,"\\fcxdef\\somefontname{",name,"}")
end
-- we can also use a count for the size
if size and size ~= "" then
- local mode, size = sizepattern:match(size)
+ local mode, size = lpegmatch(sizepattern,size)
if size and mode then
count.scaledfontmode = mode
- texsprint(ctxcatcodes,format("\\def\\somefontsize{%s}",size))
+ texsprint(ctxcatcodes,"\\def\\somefontsize{",size,"}")
else
count.scaledfontmode = 0
- texsprint(ctxcatcodes,format("\\let\\somefontsize\\empty",size))
+ texsprint(ctxcatcodes,"\\let\\somefontsize\\empty")
end
elseif true then
-- so we don't need to check in tex
count.scaledfontmode = 2
---~ texsprint(ctxcatcodes,format("\\def\\somefontsize{*}",size))
- texsprint(ctxcatcodes,format("\\let\\somefontsize\\empty",size))
+ texsprint(ctxcatcodes,"\\let\\somefontsize\\empty")
else
count.scaledfontmode = 0
- texsprint(ctxcatcodes,format("\\let\\somefontsize\\empty",size))
+ texsprint(ctxcatcodes,"\\let\\somefontsize\\empty")
end
specification = define.makespecification(str,lookup,name,sub,method,detail,size)
end
local n = 0
-function define.command_2(global,cs,str,size,classfeatures,fontfeatures,classfallbacks,fontfallbacks,mathsize,textsize)
+-- we can also move rscale to here (more consistent)
+
+function define.command_2(global,cs,str,size,classfeatures,fontfeatures,classfallbacks,fontfallbacks,mathsize,textsize,relativeid)
+ if trace_defining then
+ logs.report("define font","memory usage before: %s",statistics.memused())
+ end
-- name is now resolved and size is scaled cf sa/mo
local lookup, name, sub, method, detail = get_specification(str or "")
-- asome settings can be overloaded
- if lookup and lookup ~= "" then specification.lookup = lookup end
+ if lookup and lookup ~= "" then
+ specification.lookup = lookup
+ end
+ if relativeid and relativeid ~= "" then -- experimental hook
+ local id = tonumber(relativeid) or 0
+ specification.relativeid = id > 0 and id
+ end
specification.name = name
specification.size = size
- specification.sub = sub
+ specification.sub = (sub and sub ~= "" and sub) or specification.sub
specification.mathsize = mathsize
specification.textsize = textsize
if detail and detail ~= "" then
@@ -340,9 +362,6 @@ function define.command_2(global,cs,str,size,classfeatures,fontfeatures,classfal
elseif classfeatures and classfeatures ~= "" then
specification.method, specification.detail = "*", classfeatures
end
- if trace_defining then
- logs.report("define font","memory usage before: %s",statistics.memused())
- end
if fontfallbacks and fontfallbacks ~= "" then
specification.fallbacks = fontfallbacks
elseif classfallbacks and classfallbacks ~= "" then
@@ -351,6 +370,7 @@ function define.command_2(global,cs,str,size,classfeatures,fontfeatures,classfal
local tfmdata = define.read(specification,size) -- id not yet known
if not tfmdata then
logs.report("define font","unable to define %s as \\%s",name,cs)
+ texsetcount("global","lastfontid",-1)
elseif type(tfmdata) == "number" then
if trace_defining then
logs.report("define font","reusing %s with id %s as \\%s (features: %s/%s, fallbacks: %s/%s)",name,tfmdata,cs,classfeatures,fontfeatures,classfallbacks,fontfallbacks)
@@ -358,6 +378,7 @@ function define.command_2(global,cs,str,size,classfeatures,fontfeatures,classfal
tex.definefont(global,cs,tfmdata)
-- resolved (when designsize is used):
texsprint(ctxcatcodes,format("\\def\\somefontsize{%isp}",fontdata[tfmdata].size))
+ texsetcount("global","lastfontid",tfmdata)
else
-- local t = os.clock(t)
local id = font.define(tfmdata)
@@ -374,6 +395,7 @@ function define.command_2(global,cs,str,size,classfeatures,fontfeatures,classfal
--~ if specification.fallbacks then
--~ fonts.collections.prepare(specification.fallbacks)
--~ end
+ texsetcount("global","lastfontid",id)
end
if trace_defining then
logs.report("define font","memory usage after: %s",statistics.memused())
@@ -381,6 +403,28 @@ function define.command_2(global,cs,str,size,classfeatures,fontfeatures,classfal
statistics.stoptiming(fonts)
end
+local enable_auto_r_scale = false
+
+experiments.register("fonts.autorscale", function(v)
+ enable_auto_r_scale = v
+end)
+
+local calculate_scale = fonts.tfm.calculate_scale
+
+function fonts.tfm.calculate_scale(tfmtable, scaledpoints, relativeid)
+ local scaledpoints, delta, units = calculate_scale(tfmtable, scaledpoints, relativeid)
+ if enable_auto_r_scale and relativeid then -- for the moment this is rather context specific
+ local relativedata = fontdata[relativeid]
+ local id_x_height = relativedata and relativedata.parameters and relativedata.parameters.x_height
+ local tf_x_height = id_x_height and tfmtable.parameters and tfmtable.parameters.x_height * delta
+ if tf_x_height then
+ scaledpoints = (id_x_height/tf_x_height) * scaledpoints
+ delta = scaledpoints/units
+ end
+ end
+ return scaledpoints, delta, units
+end
+
--~ table.insert(readers.sequence,1,'vtf')
--~ function readers.vtf(specification)
@@ -390,3 +434,191 @@ end
--~ return nil
--~ end
--~ end
+
+-- we need a place for this .. outside the generic scope
+
+local dimenfactors = number.dimenfactors
+
+function fonts.dimenfactor(unit,tfmdata)
+ if unit == "ex" then
+ return (tfmdata and tfmdata.parameters.x_height) or 655360
+ elseif unit == "em" then
+ return (tfmdata and tfmdata.parameters.em_height) or 655360
+ else
+ return dimenfactors[unit] or unit
+ end
+end
+
+function fonts.cleanname(name)
+ texsprint(ctxcatcodes,fonts.names.cleanname(name))
+end
+
+local p, f = 1, "%0.1fpt" -- normally this value is changed only once
+
+local stripper = lpeg.patterns.strip_zeros
+
+function fonts.nbfs(amount,precision)
+ if precision ~= p then
+ p = precision
+ f = "%0." .. p .. "fpt"
+ end
+ texsprint(ctxcatcodes,lpegmatch(stripper,format(f,amount/65536)))
+end
+
+-- for the moment here, this will become a chain of extras that is
+-- hooked into the ctx registration (or scaler or ...)
+
+function fonts.set_digit_width(font)
+ local tfmtable = fontdata[font]
+ local parameters = tfmtable.parameters
+ local width = parameters.digitwidth
+ if not width then
+ width = round(parameters.quad/2) -- maybe tex.scale
+ local characters = tfmtable.characters
+ for i=48,57 do
+ local wd = round(characters[i].width)
+ if wd > width then
+ width = wd
+ end
+ end
+ parameters.digitwidth = width
+ end
+ return width
+end
+
+fonts.get_digit_width = fonts.set_digit_width
+
+-- soon to be obsolete:
+
+local loaded = { -- prevent loading (happens in cont-sys files)
+ ["original-base.map" ] = true,
+ ["original-ams-base.map" ] = true,
+ ["original-ams-euler.map"] = true,
+ ["original-public-lm.map"] = true,
+}
+
+function fonts.map.loadfile(name)
+ name = file.addsuffix(name,"map")
+ if not loaded[name] then
+ pdf.mapfile(name)
+ loaded[name] = true
+ end
+end
+
+local loaded = { -- prevent double loading
+}
+
+function fonts.map.loadline(how,line)
+ if line then
+ how = how .. " " .. line
+ elseif how == "" then
+ how = "= " .. line
+ end
+ if not loaded[how] then
+ pdf.mapline(how)
+ loaded[how] = true
+ end
+end
+
+function fonts.map.reset()
+ pdf.mapfile("")
+end
+
+fonts.map.reset() -- resets the default file
+
+-- we need an 'do after the banner hook'
+
+-- pdf.mapfile("mkiv-base.map") -- loads the default file
+
+local nounicode = byte("?")
+
+local function name_to_slot(name) -- maybe some day rawdata
+ local tfmdata = fonts.ids[font.current()]
+ local shared = tfmdata and tfmdata.shared
+ local fntdata = shared and shared.otfdata or shared.afmdata
+ if fntdata then
+ local unicode = fntdata.luatex.unicodes[name]
+ if not unicode then
+ return nounicode
+ elseif type(unicode) == "number" then
+ return unicode
+ else -- multiple unicodes
+ return unicode[1]
+ end
+ end
+ return nounicode
+end
+
+fonts.name_to_slot = name_to_slot
+
+function fonts.char(n) -- todo: afm en tfm
+ if type(n) == "string" then
+ n = name_to_slot(n)
+ end
+ if type(n) == "number" then
+ texsprint(ctxcatcodes,format("\\char%s ",n))
+ end
+end
+
+-- moved from ini:
+
+fonts.color = { } -- dummy in ini
+
+local attribute = attributes.private('color')
+local mapping = (attributes and attributes.list[attribute]) or { }
+
+local set_attribute = node.set_attribute
+local unset_attribute = node.unset_attribute
+
+function fonts.color.set(n,c)
+ local mc = mapping[c]
+ if not mc then
+ unset_attribute(n,attribute)
+ else
+ set_attribute(n,attribute,mc)
+ end
+end
+
+function fonts.color.reset(n)
+ unset_attribute(n,attribute)
+end
+
+-- this will become obsolete:
+
+fonts.otf.name_to_slot = name_to_slot
+fonts.afm.name_to_slot = name_to_slot
+
+fonts.otf.char = fonts.char
+fonts.afm.char = fonts.char
+
+-- this will change ...
+
+function fonts.show_char_data(n)
+ local tfmdata = fonts.ids[font.current()]
+ if tfmdata then
+ if type(n) == "string" then
+ n = utf.byte(n)
+ end
+ local chr = tfmdata.characters[n]
+ if chr then
+ write_nl(format("%s @ %s => U%04X => %s => ",tfmdata.fullname,tfmdata.size,n,utf.char(n)) .. serialize(chr,false))
+ end
+ end
+end
+
+function fonts.show_font_parameters()
+ local tfmdata = fonts.ids[font.current()]
+ if tfmdata then
+ local parameters, mathconstants = tfmdata.parameters, tfmdata.MathConstants
+ local hasparameters, hasmathconstants = parameters and next(parameters), mathconstants and next(mathconstants)
+ if hasparameters then
+ write_nl(format("%s @ %s => parameters => ",tfmdata.fullname,tfmdata.size) .. serialize(parameters,false))
+ end
+ if hasmathconstants then
+ write_nl(format("%s @ %s => math constants => ",tfmdata.fullname,tfmdata.size) .. serialize(mathconstants,false))
+ end
+ if not hasparameters and not hasmathconstants then
+ write_nl(format("%s @ %s => no parameters and/or mathconstants",tfmdata.fullname,tfmdata.size))
+ end
+ end
+end
diff --git a/Master/texmf-dist/tex/context/base/font-def.lua b/Master/texmf-dist/tex/context/base/font-def.lua
index 28afe670b55..c3b10162ce6 100644
--- a/Master/texmf-dist/tex/context/base/font-def.lua
+++ b/Master/texmf-dist/tex/context/base/font-def.lua
@@ -1,6 +1,6 @@
if not modules then modules = { } end modules ['font-def'] = {
version = 1.001,
- comment = "companion to font-ini.tex",
+ comment = "companion to font-ini.mkiv",
author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
copyright = "PRAGMA ADE / ConTeXt Development Team",
license = "see context related readme files"
@@ -8,8 +8,10 @@ if not modules then modules = { } end modules ['font-def'] = {
local format, concat, gmatch, match, find, lower = string.format, table.concat, string.gmatch, string.match, string.find, string.lower
local tostring, next = tostring, next
+local lpegmatch = lpeg.match
-local trace_defining = false trackers.register("fonts.defining", function(v) trace_defining = v end)
+local trace_defining = false trackers .register("fonts.defining", function(v) trace_defining = v end)
+local directive_embedall = false directives.register("fonts.embedall", function(v) directive_embedall = v end)
trackers.register("fonts.loading", "fonts.defining", "otf.loading", "afm.loading", "tfm.loading")
trackers.register("fonts.all", "fonts.*", "otf.*", "afm.*", "tfm.*")
@@ -77,22 +79,37 @@ and prepares a table that will move along as we proceed.</p>
local splitter, specifiers = nil, ""
+local P, C, S, Cc = lpeg.P, lpeg.C, lpeg.S, lpeg.Cc
+
+local left = P("(")
+local right = P(")")
+local colon = P(":")
+local space = P(" ")
+
+define.defaultlookup = "file"
+
+local prefixpattern = P(false)
+
function define.add_specifier(symbol)
specifiers = specifiers .. symbol
- local left = lpeg.P("(")
- local right = lpeg.P(")")
- local colon = lpeg.P(":")
- local method = lpeg.S(specifiers)
- local lookup = lpeg.C(lpeg.P("file")+lpeg.P("name")) * colon -- hard test, else problems with : method
- local sub = left * lpeg.C(lpeg.P(1-left-right-method)^1) * right
---~ local specification = lpeg.C(method) * lpeg.C(lpeg.P(1-method)^1)
- local specification = lpeg.C(method) * lpeg.C(lpeg.P(1)^1)
- local name = lpeg.C((1-sub-specification)^1)
- splitter = lpeg.P((lookup + lpeg.Cc("")) * name * (sub + lpeg.Cc("")) * (specification + lpeg.Cc("")))
+ local method = S(specifiers)
+ local lookup = C(prefixpattern) * colon
+ local sub = left * C(P(1-left-right-method)^1) * right
+ local specification = C(method) * C(P(1)^1)
+ local name = C((1-sub-specification)^1)
+ splitter = P((lookup + Cc("")) * name * (sub + Cc("")) * (specification + Cc("")))
end
+function define.add_lookup(str,default)
+ prefixpattern = prefixpattern + P(str)
+end
+
+define.add_lookup("file")
+define.add_lookup("name")
+define.add_lookup("spec")
+
function define.get_specification(str)
- return splitter:match(str)
+ return lpegmatch(splitter,str)
end
function define.register_split(symbol,action)
@@ -111,8 +128,8 @@ function define.makespecification(specification, lookup, name, sub, method, deta
--~ lookup = specification.lookup -- can come from xetex [] syntax
--~ specification.lookup = nil
--~ end
- if lookup ~= 'name' then -- for the moment only two lookups, maybe some day also system:
- lookup = 'file'
+ if not lookup or lookup == "" then
+ lookup = define.defaultlookup
end
local t = {
lookup = lookup, -- forced type
@@ -132,7 +149,7 @@ end
function define.analyze(specification, size)
-- can be optimized with locals
local lookup, name, sub, method, detail = define.get_specification(specification or "")
- return define.makespecification(specification,lookup, name, sub, method, detail, size)
+ return define.makespecification(specification, lookup, name, sub, method, detail, size)
end
--[[ldx--
@@ -214,17 +231,44 @@ end
<p>We can resolve the filename using the next function:</p>
--ldx]]--
+define.resolvers = resolvers
+
+function define.resolvers.file(specification)
+ specification.forced = file.extname(specification.name)
+ specification.name = file.removesuffix(specification.name)
+end
+
+function define.resolvers.name(specification)
+ local resolve = fonts.names.resolve
+ if resolve 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
+ else
+ define.resolvers.file(specification)
+ end
+end
+
+function define.resolvers.spec(specification)
+ local resolvespec = fonts.names.resolvespec
+ if resolvespec then
+ specification.resolved, specification.sub = fonts.names.resolvespec(specification.name,specification.sub)
+ if specification.resolved then
+ specification.forced = file.extname(specification.resolved)
+ specification.name = file.removesuffix(specification.resolved)
+ end
+ else
+ define.resolvers.name(specification)
+ end
+end
+
function define.resolve(specification)
if not specification.resolved or specification.resolved == "" then -- resolved itself not per se in mapping hash
- 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)
+ local r = define.resolvers[specification.lookup]
+ if r then
+ r(specification)
end
end
if specification.forced == "" then
@@ -232,7 +276,6 @@ function define.resolve(specification)
else
specification.forced = specification.forced
end
---~ specification.hash = specification.name .. ' @ ' .. tfm.hash_features(specification)
specification.hash = lower(specification.name .. ' @ ' .. tfm.hash_features(specification))
if specification.sub and specification.sub ~= "" then
specification.hash = specification.sub .. ' @ ' .. specification.hash
@@ -271,7 +314,7 @@ function tfm.read(specification)
local reader = sequence[s]
if readers[reader] then -- not really needed
if trace_defining then
- logs.report("define font","trying (sequence driven) type %s for %s with file %s",reader,specification.name,specification.filename or "unknown")
+ logs.report("define font","trying (reader sequence driven) type %s for %s with file %s",reader,specification.name,specification.filename or "unknown")
end
tfmtable = readers[reader](specification)
if tfmtable then
@@ -283,7 +326,9 @@ function tfm.read(specification)
end
end
if tfmtable then
- if tfmtable.filename and fonts.dontembed[tfmtable.filename] then
+ if directive_embedall then
+ tfmtable.embedding = "full"
+ elseif tfmtable.filename and fonts.dontembed[tfmtable.filename] then
tfmtable.embedding = "no"
else
tfmtable.embedding = "subset"
@@ -406,16 +451,22 @@ function readers.afm(specification,method)
return tfmtable
end
-local function check_otf(specification,suffix,what)
- local fullname, tfmtable = resolvers.findbinfile(specification.name,suffix) or "", nil
+-- maybe some day a set of names
+
+local function check_otf(forced,specification,suffix,what)
+ local name = specification.name
+ if forced then
+ name = file.addsuffix(name,suffix)
+ end
+ local fullname, tfmtable = resolvers.findbinfile(name,suffix) or "", nil -- one shot
if fullname == "" then
- local fb = fonts.names.old_to_new[specification.name]
+ local fb = fonts.names.old_to_new[name]
if fb then
fullname = resolvers.findbinfile(fb,suffix) or ""
end
end
if fullname == "" then
- local fb = fonts.names.new_to_old[specification.name]
+ local fb = fonts.names.new_to_old[name]
if fb then
fullname = resolvers.findbinfile(fb,suffix) or ""
end
@@ -430,13 +481,11 @@ end
function readers.opentype(specification,suffix,what)
local forced = specification.forced or ""
if forced == "otf" then
- return check_otf(specification,forced,"opentype")
- elseif forced == "ttf" then
- return check_otf(specification,forced,"truetype")
- elseif forced == "ttf" then
- return check_otf(specification,forced,"truetype")
+ return check_otf(true,specification,forced,"opentype")
+ elseif forced == "ttf" or forced == "ttc" or forced == "dfont" then
+ return check_otf(true,specification,forced,"truetype")
else
- return check_otf(specification,suffix,what)
+ return check_otf(false,specification,suffix,what)
end
end
@@ -452,14 +501,14 @@ a helper function.</p>
function define.check(features,defaults) -- nb adapts features !
local done = false
- if table.is_empty(features) then
- features, done = table.fastcopy(defaults), true
- else
+ if features and next(features) then
for k,v in next, defaults do
if features[k] == nil then
features[k], done = v, true
end
end
+ else
+ features, done = table.fastcopy(defaults), true
end
return features, done -- done signals a change
end
@@ -485,7 +534,10 @@ function define.register(fontdata,id)
if trace_defining then
logs.report("define font","loading at 2 id %s, hash: %s",id or "?",hash or "?")
end
- fonts.ids[id] = fontdata
+ fonts.identifiers[id] = fontdata
+ fonts.characters [id] = fontdata.characters
+ fonts.quads [id] = fontdata.parameters.quad
+ -- todo: extra functions, e.g. setdigitwidth etc in list
tfm.internalized[hash] = id
end
end
@@ -595,5 +647,5 @@ end
<p>We overload both the <l n='tfm'/> and <l n='vf'/> readers.</p>
--ldx]]--
-callback.register('define_font' , define.read)
-callback.register('find_vf_file', vf.find ) -- not that relevant any more
+callbacks.register('define_font' , define.read, "definition of fonts (tfmtable preparation)")
+callbacks.register('find_vf_file', vf.find , "locating virtual fonts, insofar needed") -- not that relevant any more
diff --git a/Master/texmf-dist/tex/context/base/font-dum.lua b/Master/texmf-dist/tex/context/base/font-dum.lua
index ef267a42c14..0a9bcd301d5 100644
--- a/Master/texmf-dist/tex/context/base/font-dum.lua
+++ b/Master/texmf-dist/tex/context/base/font-dum.lua
@@ -10,8 +10,9 @@ fonts = fonts or { }
-- general
-fonts.otf.pack = false
-fonts.tfm.resolve_vf = false -- no sure about this
+fonts.otf.pack = false -- only makes sense in context
+fonts.tfm.resolve_vf = false -- no sure about this
+fonts.tfm.fontname_mode = "specification" -- somehow latex needs this
-- readers
@@ -39,52 +40,56 @@ function fonts.logger.save()
end
-- names
+--
+-- Watch out, the version number is the same as the one used in
+-- the mtx-fonts.lua function scripts.fonts.names as we use a
+-- simplified font database in the plain solution and by using
+-- a different number we're less dependent on context.
fonts.names = fonts.names or { }
+fonts.names.version = 1.001 -- not the same as in context
fonts.names.basename = "luatex-fonts-names.lua"
fonts.names.new_to_old = { }
fonts.names.old_to_new = { }
local data, loaded = nil, false
+local fileformats = { "lua", "tex", "other text files" }
+
function fonts.names.resolve(name,sub)
if not loaded then
local basename = fonts.names.basename
if basename and basename ~= "" then
- for _, format in ipairs { "lua", "tex", "other text files" } do
+ for i=1,#fileformats do
+ local format = fileformats[i]
local foundname = resolvers.find_file(basename,format) or ""
if foundname ~= "" then
data = dofile(foundname)
- if data then
- local d = { }
- for k, v in pairs(data.mapping) do
- local t = v[1]
- if t == "ttf" or t == "otf" or t == "ttc" or t == "dfont" then
- d[k] = v
- end
- end
- data.mapping = d
- end
break
end
end
end
loaded = true
end
- if type(data) == "table" and data.version == 1.08 then
+ if type(data) == "table" and data.version == fonts.names.version then
local condensed = string.gsub(string.lower(name),"[^%a%d]","")
- local found = data.mapping and data.mapping[condensed]
+ local found = data.mappings and data.mappings[condensed]
if found then
- local filename, is_sub = found[3], found[4]
- if is_sub then is_sub = found[2] end
- return filename, is_sub
+ local fontname, filename, subfont = found[1], found[2], found[3]
+ if subfont then
+ return filename, fontname
+ else
+ return filename, false
+ end
else
return name, false -- fallback to filename
end
end
end
+fonts.names.resolvespec = fonts.names.resolve -- only supported in mkiv
+
-- For the moment we put this (adapted) pseudo feature here.
table.insert(fonts.triggers,"itlc")
@@ -112,5 +117,185 @@ end
fonts.initializers.base.otf.itlc = itlc
fonts.initializers.node.otf.itlc = itlc
+-- slant and extend
+
+function fonts.initializers.common.slant(tfmdata,value)
+ value = tonumber(value)
+ if not value then
+ value = 0
+ elseif value > 1 then
+ value = 1
+ elseif value < -1 then
+ value = -1
+ end
+ tfmdata.slant_factor = value
+end
+
+function fonts.initializers.common.extend(tfmdata,value)
+ value = tonumber(value)
+ if not value then
+ value = 0
+ elseif value > 10 then
+ value = 10
+ elseif value < -10 then
+ value = -10
+ end
+ tfmdata.extend_factor = value
+end
+
+table.insert(fonts.triggers,"slant")
+table.insert(fonts.triggers,"extend")
+
+fonts.initializers.base.otf.slant = fonts.initializers.common.slant
+fonts.initializers.node.otf.slant = fonts.initializers.common.slant
+fonts.initializers.base.otf.extend = fonts.initializers.common.extend
+fonts.initializers.node.otf.extend = fonts.initializers.common.extend
+
+-- expansion and protrusion
+
+fonts.protrusions = fonts.protrusions or { }
+fonts.protrusions.setups = fonts.protrusions.setups or { }
+
+local setups = fonts.protrusions.setups
+
+function fonts.initializers.common.protrusion(tfmdata,value)
+ if value then
+ local setup = setups[value]
+ if setup then
+ local factor, left, right = setup.factor or 1, setup.left or 1, setup.right or 1
+ local emwidth = tfmdata.parameters.quad
+ tfmdata.auto_protrude = true
+ for i, chr in next, tfmdata.characters do
+ local v, pl, pr = setup[i], nil, nil
+ if v then
+ pl, pr = v[1], v[2]
+ end
+ if pl and pl ~= 0 then chr.left_protruding = left *pl*factor end
+ if pr and pr ~= 0 then chr.right_protruding = right*pr*factor end
+ end
+ end
+ end
+end
+
+fonts.expansions = fonts.expansions or { }
+fonts.expansions.setups = fonts.expansions.setups or { }
+
+local setups = fonts.expansions.setups
+
+function fonts.initializers.common.expansion(tfmdata,value)
+ if value then
+ local setup = setups[value]
+ if setup then
+ local stretch, shrink, step, factor = setup.stretch or 0, setup.shrink or 0, setup.step or 0, setup.factor or 1
+ tfmdata.stretch, tfmdata.shrink, tfmdata.step, tfmdata.auto_expand = stretch * 10, shrink * 10, step * 10, true
+ for i, chr in next, tfmdata.characters do
+ local v = setup[i]
+ if v and v ~= 0 then
+ chr.expansion_factor = v*factor
+ else -- can be option
+ chr.expansion_factor = factor
+ end
+ end
+ end
+ end
+end
+
+table.insert(fonts.manipulators,"protrusion")
+table.insert(fonts.manipulators,"expansion")
+
+fonts.initializers.base.otf.protrusion = fonts.initializers.common.protrusion
+fonts.initializers.node.otf.protrusion = fonts.initializers.common.protrusion
+fonts.initializers.base.otf.expansion = fonts.initializers.common.expansion
+fonts.initializers.node.otf.expansion = fonts.initializers.common.expansion
+
+-- left over
+
function fonts.register_message()
end
+
+-- example vectors
+
+local byte = string.byte
+
+fonts.expansions.setups['default'] = {
+
+ stretch = 2, shrink = 2, step = .5, factor = 1,
+
+ [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,
+}
+
+fonts.protrusions.setups['default'] = {
+
+ factor = 1, left = 1, right = 1,
+
+ [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
+ [0x3001] = { 0, 1 }, -- ideographic comma 、
+ [0x3002] = { 0, 1 }, -- ideographic full stop 。
+ [0x060C] = { 0, 1 }, -- arabic comma ،
+ [0x061B] = { 0, 1 }, -- arabic semicolon ؛
+ [0x06D4] = { 0, 1 }, -- arabic full stop ۔
+
+}
+
+-- normalizer
+
+fonts.otf.meanings = fonts.otf.meanings or { }
+
+fonts.otf.meanings.normalize = fonts.otf.meanings.normalize or function(t)
+ if t.rand then
+ t.rand = "random"
+ end
+end
+
+-- bonus
+
+function fonts.otf.name_to_slot(name)
+ local tfmdata = fonts.ids[font.current()]
+ if tfmdata and tfmdata.shared then
+ local otfdata = tfmdata.shared.otfdata
+ local unicode = otfdata.luatex.unicodes[name]
+ return unicode and (type(unicode) == "number" and unicode or unicode[1])
+ end
+end
+
+function fonts.otf.char(n)
+ if type(n) == "string" then
+ n = fonts.otf.name_to_slot(n)
+ end
+ if type(n) == "number" then
+ tex.sprint("\\char" .. n)
+ end
+end
+
+-- another one:
+
+fonts.strippables = table.tohash {
+ 0x000AD, 0x017B4, 0x017B5, 0x0200B, 0x0200C, 0x0200D, 0x0200E, 0x0200F, 0x0202A, 0x0202B,
+ 0x0202C, 0x0202D, 0x0202E, 0x02060, 0x02061, 0x02062, 0x02063, 0x0206A, 0x0206B, 0x0206C,
+ 0x0206D, 0x0206E, 0x0206F, 0x0FEFF, 0x1D173, 0x1D174, 0x1D175, 0x1D176, 0x1D177, 0x1D178,
+ 0x1D179, 0x1D17A, 0xE0001, 0xE0020, 0xE0021, 0xE0022, 0xE0023, 0xE0024, 0xE0025, 0xE0026,
+ 0xE0027, 0xE0028, 0xE0029, 0xE002A, 0xE002B, 0xE002C, 0xE002D, 0xE002E, 0xE002F, 0xE0030,
+ 0xE0031, 0xE0032, 0xE0033, 0xE0034, 0xE0035, 0xE0036, 0xE0037, 0xE0038, 0xE0039, 0xE003A,
+ 0xE003B, 0xE003C, 0xE003D, 0xE003E, 0xE003F, 0xE0040, 0xE0041, 0xE0042, 0xE0043, 0xE0044,
+ 0xE0045, 0xE0046, 0xE0047, 0xE0048, 0xE0049, 0xE004A, 0xE004B, 0xE004C, 0xE004D, 0xE004E,
+ 0xE004F, 0xE0050, 0xE0051, 0xE0052, 0xE0053, 0xE0054, 0xE0055, 0xE0056, 0xE0057, 0xE0058,
+ 0xE0059, 0xE005A, 0xE005B, 0xE005C, 0xE005D, 0xE005E, 0xE005F, 0xE0060, 0xE0061, 0xE0062,
+ 0xE0063, 0xE0064, 0xE0065, 0xE0066, 0xE0067, 0xE0068, 0xE0069, 0xE006A, 0xE006B, 0xE006C,
+ 0xE006D, 0xE006E, 0xE006F, 0xE0070, 0xE0071, 0xE0072, 0xE0073, 0xE0074, 0xE0075, 0xE0076,
+ 0xE0077, 0xE0078, 0xE0079, 0xE007A, 0xE007B, 0xE007C, 0xE007D, 0xE007E, 0xE007F,
+}
+
diff --git a/Master/texmf-dist/tex/context/base/font-enc.lua b/Master/texmf-dist/tex/context/base/font-enc.lua
index faeae3a1084..874f7c3f4ed 100644
--- a/Master/texmf-dist/tex/context/base/font-enc.lua
+++ b/Master/texmf-dist/tex/context/base/font-enc.lua
@@ -1,6 +1,6 @@
if not modules then modules = { } end modules ['font-enc'] = {
version = 1.001,
- comment = "companion to font-ini.tex",
+ comment = "companion to font-ini.mkiv",
author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
copyright = "PRAGMA ADE / ConTeXt Development Team",
license = "see context related readme files"
@@ -17,7 +17,7 @@ fonts.enc = fonts.enc or { }
fonts.enc.version = 1.03
fonts.enc.cache = containers.define("fonts", "enc", fonts.enc.version, true)
-fonts.enc.known = {
+fonts.enc.known = { -- sort of obsolete
texnansi = true,
ec = true,
qx = true,
diff --git a/Master/texmf-dist/tex/context/base/font-enh.lua b/Master/texmf-dist/tex/context/base/font-enh.lua
new file mode 100644
index 00000000000..fc70c04c566
--- /dev/null
+++ b/Master/texmf-dist/tex/context/base/font-enh.lua
@@ -0,0 +1,201 @@
+if not modules then modules = { } end modules ['font-enh'] = {
+ version = 1.001,
+ comment = "companion to font-ini.mkiv",
+ author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
+ copyright = "PRAGMA ADE / ConTeXt Development Team",
+ license = "see context related readme files"
+}
+
+local next, match = next, string.match
+
+local trace_defining = false trackers.register("fonts.defining", function(v) trace_defining = v end)
+
+-- tfmdata has also fast access to indices and unicodes
+-- to be checked: otf -> tfm -> tfmscaled
+--
+-- watch out: no negative depths and negative eights permitted in regular fonts
+
+--[[ldx--
+<p>Here we only implement a few helper functions.</p>
+--ldx]]--
+
+local tfm = fonts.tfm
+
+--[[ldx--
+<p>The next function encapsulates the standard <l n='tfm'/> loader as
+supplied by <l n='luatex'/>.</p>
+--ldx]]--
+
+-- 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
+
+-- tfm features, experimental
+
+tfm.features = tfm.features or { }
+tfm.features.list = tfm.features.list or { }
+tfm.features.default = tfm.features.default or { }
+
+function tfm.enhance(tfmdata,specification)
+ -- we don't really share tfm data because we always reload
+ -- but this is more in sycn with afm and such
+ local features = (specification.features and specification.features.normal ) or { }
+ tfmdata.shared = tfmdata.shared or { }
+ tfmdata.shared.features = features
+ -- tfmdata.shared.tfmdata = tfmdata -- circular
+ tfmdata.filename = specification.name
+ if not features.encoding then
+ local name, size = specification.name, specification.size
+ local encoding, filename = match(name,"^(.-)%-(.*)$") -- context: encoding-name.*
+ if filename and encoding and fonts.enc.known[encoding] then
+ features.encoding = encoding
+ end
+ end
+ tfm.set_features(tfmdata)
+end
+
+function tfm.set_features(tfmdata)
+ -- todo: no local functions
+ local shared = tfmdata.shared
+-- local tfmdata = shared.tfmdata
+ local features = shared.features
+ if features and next(features) then
+ local mode = tfmdata.mode or fonts.mode
+ local fi = fonts.initializers[mode]
+ if fi and fi.tfm then
+ 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 fi.tfm[f] then -- brr
+ if tfm.trace_features then
+ logs.report("define font","initializing feature %s to %s for mode %s for font %s",f,tostring(value),mode or 'unknown',tfmdata.name or 'unknown')
+ end
+ fi.tfm[f](tfmdata,value)
+ mode = tfmdata.mode or fonts.mode
+ fi = fonts.initializers[mode]
+ end
+ end
+ end
+ end
+ initialize(fonts.triggers)
+ initialize(tfm.features.list)
+ initialize(fonts.manipulators)
+ end
+ local fm = fonts.methods[mode]
+ if fm and fm.tfm then
+ local function register(list) -- node manipulations
+ if list then
+ for i=1,#list do
+ local f = list[i]
+ if features[f] and fm.tfm[f] then -- brr
+ if not shared.processors then -- maybe also predefine
+ shared.processors = { fm.tfm[f] }
+ else
+ shared.processors[#shared.processors+1] = fm.tfm[f]
+ end
+ end
+ end
+ end
+ end
+ register(tfm.features.list)
+ end
+ end
+end
+
+function tfm.features.register(name,default)
+ tfm.features.list[#tfm.features.list+1] = name
+ tfm.features.default[name] = default
+end
+
+function tfm.reencode(tfmdata,encoding)
+ if encoding and fonts.enc.known[encoding] then
+ local data = fonts.enc.load(encoding)
+ if data then
+ local characters, original, vector = tfmdata.characters, { }, data.vector
+ tfmdata.encoding = encoding -- not needed
+ for k, v in next, characters do
+ v.name, v.index, original[k] = vector[k], k, v
+ end
+ for k,v in next, data.unicodes do
+ if k ~= v then
+ if trace_defining then
+ logs.report("define font","reencoding U+%04X to U+%04X",k,v)
+ end
+ characters[k] = original[v]
+ end
+ end
+ end
+ end
+end
+
+tfm.features.register('reencode')
+
+fonts.initializers.base.tfm.reencode = tfm.reencode
+fonts.initializers.node.tfm.reencode = tfm.reencode
+
+fonts.enc = fonts.enc or { }
+fonts.enc.remappings = fonts.enc.remappings or { }
+
+function tfm.remap(tfmdata,remapping)
+ local vector = remapping and fonts.enc.remappings[remapping]
+ if vector then
+ local characters, original = tfmdata.characters, { }
+ for k, v in next, characters do
+ original[k], characters[k] = v, nil
+ end
+ for k,v in next, vector do
+ if k ~= v then
+ if trace_defining then
+ logs.report("define font","remapping U+%04X to U+%04X",k,v)
+ end
+ local c = original[k]
+ characters[v] = c
+ c.index = k
+ end
+ end
+ tfmdata.encodingbytes = 2
+ tfmdata.format = 'type1'
+ end
+end
+
+tfm.features.register('remap')
+
+fonts.initializers.base.tfm.remap = tfm.remap
+fonts.initializers.node.tfm.remap = tfm.remap
+
+--~ obsolete
+--~
+--~ function tfm.enhance(tfmdata,specification)
+--~ local name, size = specification.name, specification.size
+--~ local encoding, filename = match(name,"^(.-)%-(.*)$") -- 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
+--~ local original = { }
+--~ for k, v in next, characters do
+--~ v.name = vector[k]
+--~ v.index = k
+--~ original[k] = v
+--~ end
+--~ for k,v in next, data.unicodes do
+--~ if k ~= v then
+--~ if trace_defining then
+--~ logs.report("define font","mapping %s onto %s",k,v)
+--~ end
+--~ characters[k] = original[v]
+--~ end
+--~ end
+--~ end
+--~ end
+--~ end
diff --git a/Master/texmf-dist/tex/context/base/font-ext.lua b/Master/texmf-dist/tex/context/base/font-ext.lua
index 17c302c5325..05bdaf2fc3a 100644
--- a/Master/texmf-dist/tex/context/base/font-ext.lua
+++ b/Master/texmf-dist/tex/context/base/font-ext.lua
@@ -1,12 +1,20 @@
if not modules then modules = { } end modules ['font-ext'] = {
version = 1.001,
- comment = "companion to font-ini.tex and hand-ini.tex",
+ comment = "companion to font-ini.mkiv and hand-ini.mkiv",
author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
copyright = "PRAGMA ADE / ConTeXt Development Team",
license = "see context related readme files"
}
+local utf = unicode.utf8
local next, type, byte = next, type, string.byte
+local gmatch, concat = string.gmatch, table.concat
+local utfchar = utf.char
+
+local trace_protrusion = false trackers.register("fonts.protrusion", function(v) trace_protrusion = v end)
+local trace_expansion = false trackers.register("fonts.expansion", function(v) trace_expansion = v end)
+
+commands = commands or { }
--[[ldx--
<p>When we implement functions that deal with features, most of them
@@ -16,9 +24,11 @@ of neutral.</p>
fonts.triggers = fonts.triggers or { }
fonts.initializers = fonts.initializers or { }
+fonts.methods = fonts.methods or { }
fonts.initializers.common = fonts.initializers.common or { }
local initializers = fonts.initializers
+local methods = fonts.methods
--[[ldx--
<p>This feature will remove inter-digit kerns.</p>
@@ -81,116 +91,22 @@ function initializers.common.lineheight(tfmdata,value)
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]]--
+-- -- -- -- -- --
+-- shared
+-- -- -- -- -- --
---~ 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 initializers.common.encoding(tfmdata,value)
---~ if value then
---~ local afmdata = tfmdata.shared.afmdata
---~ if afmdata then
---~ local encodingfile = value .. '.enc'
---~ local encoding = fonts.enc.load(encodingfile)
---~ if encoding then
---~ local vector = encoding.vector
---~ 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 and type(oldchr) == "number" and type(newchr) == "number" then
---~ -- logs.report("encoding","%s (%s) -> %s (%s)",p,oldchr or -1,name,newchr or -1)
---~ characters[oldchr] = characters[newchr]
---~ end
---~ end
---~ return p
---~ end
---~ for _, name in next, 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
---~ end
---~
---~ -- when needed we can provide this as features in e.g. afm files
---~
---~ function initializers.common.remap(tfmdata,value,pattern) -- will go away
---~ if value then
---~ local afmdata = tfmdata.shared.afmdata
---~ if afmdata then
---~ local characters = tfmdata.characters
---~ local descriptions = tfmdata.descriptions
---~ local unicodes = afmdata.luatex.unicodes
---~ local done = false
---~ for u, _ in next, characters do
---~ local name = descriptions[u].name
---~ if name then
---~ local p = pattern:match(name)
---~ if p then
---~ local oldchr, newchr = unicodes[p], unicodes[name]
---~ if oldchr and newchr and type(oldchr) == "number" and type(newchr) == "number" then
---~ characters[oldchr] = characters[newchr]
---~ end
---~ end
---~ end
---~ end
---~ end
---~ end
---~ end
---~
---~ function initializers.common.oldstyle(tfmdata,value)
---~ initializers.common.remap(tfmdata,value,oldstyle)
---~ end
---~ function initializers.common.smallcaps(tfmdata,value)
---~ initializers.common.remap(tfmdata,value,smallcaps)
---~ end
---~
---~ function initializers.common.fakecaps(tfmdata,value)
---~ if value then
---~ -- todo: scale down
---~ local afmdata = tfmdata.shared.afmdata
---~ if afmdata then
---~ local characters = tfmdata.characters
---~ local descriptions = tfmdata.descriptions
---~ local unicodes = afmdata.luatex.unicodes
---~ for u, _ in next, characters do
---~ local name = descriptions[u].name
---~ if name then
---~ local p = lower(name)
---~ if p then
---~ local oldchr, newchr = unicodes[p], unicodes[name]
---~ if oldchr and newchr and type(oldchr) == "number" and type(newchr) == "number" then
---~ characters[oldchr] = characters[newchr]
---~ end
---~ end
---~ end
---~ end
---~ end
---~ end
---~ end
---~
---~ end
---~
---~ function initializers.common.install(format,feature) -- 'afm','lineheight'
---~ initializers.base[format][feature] = initializers.common[feature]
---~ initializers.node[format][feature] = initializers.common[feature]
---~ end
+local function get_class_and_vector(tfmdata,value,where) -- "expansions"
+ local g_where = tfmdata.goodies and tfmdata.goodies[where]
+ local f_where = fonts[where]
+ local g_classes = g_where and g_where.classes
+ local class = g_where and g_where[value] or f_where.classes[value]
+ if class then
+ local class_vector = class.vector
+ local g_vectors = g_where and g_where.vectors
+ local vector = g_vectors and g_vectors[class_vector] or f_where.vectors[class_vector]
+ return class, vector
+ end
+end
-- -- -- -- -- --
-- expansion (hz)
@@ -228,21 +144,37 @@ vectors['default'] = {
[byte('2')] = 0.7, [byte('3')] = 0.7, [byte('6')] = 0.7, [byte('8')] = 0.7, [byte('9')] = 0.7,
}
+vectors['quality'] = vectors['default'] -- metatable ?
+
+--~ function table.locator(...)
+--~ local k = { ... }
+--~ return function(t)
+--~ for i=1,#k do
+--~ t = t[k[i]]
+--~ if not k then
+--~ return false
+--~ end
+--~ end
+--~ return t
+--~ end
+--~ end
+
+--~ local locate = table.locator { "goodies", "expansions" }
+
function initializers.common.expansion(tfmdata,value)
if value then
- local class = classes[value]
+ local class, vector = get_class_and_vector(tfmdata,value,"expansions")
if class then
- local vector = 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
+ local stretch, shrink, step, factor = class.stretch or 0, class.shrink or 0, class.step or 0, class.factor or 1
+ if trace_expansion then
+ logs.report("fonts","set expansion class %s, vector: %s, factor: %s, stretch: %s, shrink: %s, step: %s",value,class_vector,factor,stretch,shrink,step)
+ end
+ tfmdata.stretch, tfmdata.shrink, tfmdata.step, tfmdata.auto_expand = stretch * 10, shrink * 10, step * 10, true
+ local data = characters and characters.data
for i, chr in next, tfmdata.characters do
local v = vector[i]
- if not v then
+ if data and not v then -- we could move the data test outside (needed for plain)
local d = data[i]
if d then
local s = d.shcode
@@ -261,7 +193,11 @@ function initializers.common.expansion(tfmdata,value)
chr.expansion_factor = factor
end
end
+ elseif trace_expansion then
+ logs.report("fonts","unknown expansion vector '%s' in class '%s",class_vector,value)
end
+ elseif trace_expansion then
+ logs.report("fonts","unknown expansion class '%s'",value)
end
end
end
@@ -274,6 +210,8 @@ initializers.node.otf.expansion = initializers.common.expansion
initializers.base.afm.expansion = initializers.common.expansion
initializers.node.afm.expansion = initializers.common.expansion
+fonts.goodies.register("expansions", function(...) return fonts.goodies.report("expansions", trace_expansion, ...) end)
+
-- -- -- -- -- --
-- protrusion
-- -- -- -- -- --
@@ -288,7 +226,7 @@ local vectors = fonts.protrusions.vectors
-- the values need to be revisioned
-classes.preset = { factor = 1 }
+classes.preset = { factor = 1, left = 1, right = 1 }
function commands.setupfontprotrusion(class,settings)
aux.getparameters(classes,class,'preset',settings)
@@ -392,41 +330,156 @@ vectors['quality'] = table.merge( {},
vectors['alpha']
)
+-- As this is experimental code, users should not depend on it. The
+-- implications are still discussed on the ConTeXt Dev List and we're
+-- not sure yet what exactly the spec is (the next code is tested with
+-- a gyre font patched by / fea file made by Khaled Hosny). The double
+-- trick should not be needed it proper hanging punctuation is used in
+-- which case values < 1 can be used.
+--
+-- preferred (in context, usine vectors):
+--
+-- \definefontfeature[whatever][default][mode=node,protrusion=quality]
+--
+-- using lfbd and rtbd, with possibibility to enable only one side :
+--
+-- \definefontfeature[whocares][default][mode=node,protrusion=yes, opbd=yes,script=latn]
+-- \definefontfeature[whocares][default][mode=node,protrusion=right,opbd=yes,script=latn]
+--
+-- idem, using multiplier
+--
+-- \definefontfeature[whocares][default][mode=node,protrusion=2,opbd=yes,script=latn]
+-- \definefontfeature[whocares][default][mode=node,protrusion=double,opbd=yes,script=latn]
+--
+-- idem, using named feature file (less frozen):
+--
+-- \definefontfeature[whocares][default][mode=node,protrusion=2,opbd=yes,script=latn,featurefile=texgyrepagella-regularxx.fea]
+
+classes['double'] = { -- for testing opbd
+ factor = 2, left = 1, right = 1,
+}
+
+local function map_opbd_onto_protrusion(tfmdata,value,opbd)
+ local characters, descriptions = tfmdata.characters, tfmdata.descriptions
+ local otfdata = tfmdata.shared.otfdata
+ local singles = otfdata.shared.featuredata.gpos_single
+ local script, language = tfmdata.script, tfmdata.language
+ local done, factor, left, right = false, 1, 1, 1
+ local class = classes[value]
+ if class then
+ factor = class.factor or 1
+ left = class.left or 1
+ right = class.right or 1
+ else
+ factor = tonumber(value) or 1
+ end
+ if opbd ~= "right" then
+ local validlookups, lookuplist = fonts.otf.collect_lookups(otfdata,"lfbd",script,language)
+ if validlookups then
+ for i=1,#lookuplist do
+ local lookup = lookuplist[i]
+ local data = singles[lookup]
+ if data then
+ if trace_protrusion then
+ logs.report("fonts","set left protrusion using lfbd lookup '%s'",lookup)
+ end
+ for k, v in next, data do
+ -- local p = - v[3] / descriptions[k].width-- or 1 ~= 0 too but the same
+ local p = - (v[1] / 1000) * factor * left
+ characters[k].left_protruding = p
+ if trace_protrusion then
+ logs.report("opbd","lfbd -> %s -> 0x%05X (%s) -> %0.03f (%s)",lookup,k,utfchar(k),p,concat(v," "))
+ end
+ end
+ done = true
+ end
+ end
+ end
+ end
+ if opbd ~= "left" then
+ local validlookups, lookuplist = fonts.otf.collect_lookups(otfdata,"rtbd",script,language)
+ if validlookups then
+ for i=1,#lookuplist do
+ local lookup = lookuplist[i]
+ local data = singles[lookup]
+ if data then
+ if trace_protrusion then
+ logs.report("fonts","set right protrusion using rtbd lookup '%s'",lookup)
+ end
+ for k, v in next, data do
+ -- local p = v[3] / descriptions[k].width -- or 3
+ local p = (v[1] / 1000) * factor * right
+ characters[k].right_protruding = p
+ if trace_protrusion then
+ logs.report("opbd","rtbd -> %s -> 0x%05X (%s) -> %0.03f (%s)",lookup,k,utfchar(k),p,concat(v," "))
+ end
+ end
+ end
+ done = true
+ end
+ end
+ end
+ tfmdata.auto_protrude = done
+end
+
+-- The opbd test is just there because it was discussed on the
+-- context development list. However, the mentioned fxlbi.otf font
+-- only has some kerns for digits. So, consider this feature not
+-- supported till we have a proper test font.
+
function initializers.common.protrusion(tfmdata,value)
if value then
- local class = classes[value]
- if class then
- local vector = vectors[class.vector]
- if vector then
- local factor = class.factor or 1
- local data = characters.data
- local emwidth = tfmdata.parameters.quad
- tfmdata.auto_protrude = true
- for i, chr in next, 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]
+ local opbd = tfmdata.shared.features.opbd
+ if opbd then
+ -- possible values: left right both yes no (experimental)
+ map_opbd_onto_protrusion(tfmdata,value,opbd)
+ else
+ local class, vector = get_class_and_vector(tfmdata,value,"protrusions")
+ if class then
+ if vector then
+ local factor = class.factor or 1
+ local left = class.left or 1
+ local right = class.right or 1
+ if trace_protrusion then
+ logs.report("fonts","set protrusion class %s, vector: %s, factor: %s, left: %s, right: %s",value,class_vector,factor,left,right)
+ end
+ local data = characters.data
+ local emwidth = tfmdata.parameters.quad
+ tfmdata.auto_protrude = true
+ for i, chr in next, 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 = left *pl*factor
+ end
+ if pr and pr ~= 0 then
+ chr.right_protruding = right*pr*factor
+ 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
+ elseif trace_protrusion then
+ logs.report("fonts","unknown protrusion vector '%s' in class '%s",class_vector,value)
end
+ elseif trace_protrusion then
+ logs.report("fonts","unknown protrusion class '%s'",value)
end
end
end
@@ -440,6 +493,10 @@ initializers.node.otf.protrusion = initializers.common.protrusion
initializers.base.afm.protrusion = initializers.common.protrusion
initializers.node.afm.protrusion = initializers.common.protrusion
+fonts.goodies.register("protrusions", function(...) return fonts.goodies.report("protrusions", trace_protrusion, ...) end)
+
+-- -- --
+
function initializers.common.nostackmath(tfmdata,value)
tfmdata.ignore_stack_math = value
end
@@ -477,3 +534,90 @@ initializers.node.otf.itlc = initializers.common.itlc
initializers.base.afm.itlc = initializers.common.itlc
initializers.node.afm.itlc = initializers.common.itlc
+
+-- slanting
+
+table.insert(fonts.triggers,"slant")
+
+function initializers.common.slant(tfmdata,value)
+ value = tonumber(value)
+ if not value then
+ value = 0
+ elseif value > 1 then
+ value = 1
+ elseif value < -1 then
+ value = -1
+ end
+ tfmdata.slant_factor = value
+end
+
+initializers.base.otf.slant = initializers.common.slant
+initializers.node.otf.slant = initializers.common.slant
+
+initializers.base.afm.slant = initializers.common.slant
+initializers.node.afm.slant = initializers.common.slant
+
+table.insert(fonts.triggers,"extend")
+
+function initializers.common.extend(tfmdata,value)
+ value = tonumber(value)
+ if not value then
+ value = 0
+ elseif value > 10 then
+ value = 10
+ elseif value < -10 then
+ value = -10
+ end
+ tfmdata.extend_factor = value
+end
+
+initializers.base.otf.extend = initializers.common.extend
+initializers.node.otf.extend = initializers.common.extend
+
+initializers.base.afm.extend = initializers.common.extend
+initializers.node.afm.extend = initializers.common.extend
+
+-- historic stuff, move from font-ota
+
+local delete_node = nodes.delete
+local glyph = node.id("glyph")
+local fontdata = fonts.ids
+
+fonts.strippables = fonts.strippables or { -- just a placeholder
+ [0x200C] = true, -- zwnj
+ [0x200D] = true, -- zwj
+}
+
+local strippables = fonts.strippables
+
+local function processformatters(head,font)
+ local how = fontdata[font].shared.features.formatters
+ if how == nil or how == "strip" then -- nil when forced
+ local current, done = head, false
+ while current do
+ if current.id == glyph and current.subtype<256 and current.font == font then
+ local char = current.char
+ if strippables[char] then
+ head, current = delete_node(head,current)
+ done = true
+ else
+ current = current.next
+ end
+ else
+ current = current.next
+ end
+ end
+ return head, done
+ else
+ return head, false
+ end
+end
+
+methods.node.otf.formatters = processformatters
+methods.base.otf.formatters = processformatters
+
+fonts.otf.tables.features['formatters'] = 'Hide Formatting Characters'
+
+fonts.otf.features.register("formatters")
+
+table.insert(fonts.manipulators,"formatters") -- at end
diff --git a/Master/texmf-dist/tex/context/base/font-fbk.lua b/Master/texmf-dist/tex/context/base/font-fbk.lua
index 6c4f78a3c54..1ad1cc781a8 100644
--- a/Master/texmf-dist/tex/context/base/font-fbk.lua
+++ b/Master/texmf-dist/tex/context/base/font-fbk.lua
@@ -1,6 +1,6 @@
if not modules then modules = { } end modules ['font-fbk'] = {
version = 1.001,
- comment = "companion to font-ini.tex",
+ comment = "companion to font-ini.mkiv",
author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
copyright = "PRAGMA ADE / ConTeXt Development Team",
license = "see context related readme files"
diff --git a/Master/texmf-dist/tex/context/base/font-gds.lua b/Master/texmf-dist/tex/context/base/font-gds.lua
new file mode 100644
index 00000000000..e3db8c816f8
--- /dev/null
+++ b/Master/texmf-dist/tex/context/base/font-gds.lua
@@ -0,0 +1,294 @@
+if not modules then modules = { } end modules ['font-gds'] = {
+ version = 1.000,
+ comment = "companion to font-gds.mkiv",
+ author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
+ copyright = "PRAGMA ADE / ConTeXt Development Team",
+ license = "see context related readme files"
+}
+
+local type, next = type, next
+local gmatch = string.gmatch
+
+local trace_goodies = false trackers.register("fonts.goodies", function(v) trace_goodies = v end)
+
+-- goodies=name,colorscheme=,featureset=
+--
+-- goodies=auto
+
+-- goodies
+
+fonts.goodies = fonts.goodies or { }
+fonts.goodies.data = fonts.goodies.data or { }
+fonts.goodies.list = fonts.goodies.list or { }
+
+local data = fonts.goodies.data
+local list = fonts.goodies.list
+
+function fonts.goodies.report(what,trace,goodies)
+ if trace_goodies or trace then
+ local whatever = goodies[what]
+ if whatever then
+ logs.report("fonts", "goodie '%s' found in '%s'",what,goodies.name)
+ end
+ end
+end
+
+local function getgoodies(filename) -- maybe a merge is better
+ local goodies = data[filename] -- we assume no suffix is given
+ if goodies ~= nil then
+ -- found or tagged unfound
+ elseif type(filename) == "string" then
+ local fullname = resolvers.find_file(file.addsuffix(filename,"lfg")) or "" -- prefered suffix
+ if fullname == "" then
+ fullname = resolvers.find_file(file.addsuffix(filename,"lua")) or "" -- fallback suffix
+ end
+ if fullname == "" then
+ logs.report("fonts", "goodie file '%s.lfg' is not found",filename)
+ data[filename] = false -- signal for not found
+ else
+ goodies = dofile(fullname) or false
+ if not goodies then
+ logs.report("fonts", "goodie file '%s' is invalid",fullname)
+ return nil
+ elseif trace_goodies then
+ logs.report("fonts", "goodie file '%s' is loaded",fullname)
+ end
+ goodies.name = goodies.name or "no name"
+ for name, fnc in next, list do
+ fnc(goodies)
+ end
+ goodies.initialized = true
+ data[filename] = goodies
+ end
+ end
+ return goodies
+end
+
+function fonts.goodies.register(name,fnc)
+ list[name] = fnc
+end
+
+fonts.goodies.get = getgoodies
+
+-- register goodies file
+
+local preset_context = fonts.define.specify.preset_context
+
+function fonts.initializers.common.goodies(tfmdata,value)
+ local goodies = tfmdata.goodies or { } -- future versions might store goodies in the cached instance
+ for filename in gmatch(value,"[^, ]+") do
+ -- we need to check for duplicates
+ local ok = getgoodies(filename)
+ if ok then
+ goodies[#goodies+1] = ok
+ end
+ end
+ tfmdata.goodies = goodies -- shared ?
+end
+
+-- featuresets
+
+local function flattened(t,tt)
+ -- first set value dominates
+ local tt = tt or { }
+ for i=1,#t do
+ local ti = t[i]
+ if type(ti) == "table" then
+ flattened(ti,tt)
+ elseif tt[ti] == nil then
+ tt[ti] = true
+ end
+ end
+ for k, v in next, t do
+ if type(k) ~= "number" then
+ if type(v) == "table" then
+ flattened(v,tt)
+ elseif tt[k] == nil then
+ tt[k] = v
+ end
+ end
+ end
+ return tt
+end
+
+fonts.flattened_features = flattened
+
+function fonts.goodies.prepare_features(goodies,name,set)
+ if set then
+ local ff = fonts.flattened_features(set)
+ local fullname = goodies.name .. "::" .. name
+ local n, s = preset_context(fullname,"",ff)
+ goodies.featuresets[name] = s -- set
+ if trace_goodies then
+ logs.report("fonts", "feature set '%s' gets number %s and name '%s'",name,n,fullname)
+ end
+ return n
+ end
+end
+
+local function initialize(goodies,tfmdata)
+ local featuresets = goodies.featuresets
+ local goodiesname = goodies.name
+ if featuresets then
+ if trace_goodies then
+ logs.report("fonts", "checking featuresets in '%s'",goodies.name)
+ end
+ for name, set in next, featuresets do
+ fonts.goodies.prepare_features(goodies,name,set)
+ end
+ end
+end
+
+fonts.goodies.register("featureset",initialize)
+
+function fonts.initializers.common.featureset(tfmdata,set)
+ local goodies = tfmdata.goodies -- shared ?
+ if goodies then
+ local features = tfmdata.shared.features
+ local what
+ for i=1,#goodies do
+ -- last one counts
+ local g = goodies[i]
+ what = (g.featuresets and g.featuresets[set]) or what
+ end
+ if what then
+ for feature, value in next, what do
+ if features[feature] == nil then
+ features[feature] = value
+ end
+ end
+ tfmdata.mode = features.mode or tfmdata.mode
+ end
+ end
+end
+
+-- colorschemes
+
+fonts.goodies.colorschemes = fonts.goodies.colorschemes or { }
+fonts.goodies.colorschemes.data = fonts.goodies.colorschemes.data or { }
+
+local colorschemes = fonts.goodies.colorschemes
+
+function fonts.initializers.common.colorscheme(tfmdata,scheme)
+ if type(scheme) == "string" then
+ local goodies = tfmdata.goodies
+ -- todo : check for already defined in shared
+ if goodies then
+ local what
+ for i=1,#goodies do
+ -- last one counts
+ local g = goodies[i]
+ what = (g.colorschemes and g.colorschemes[scheme]) or what
+ end
+ if what then
+ -- this is font bound but we can share them if needed
+ -- just as we could hash the conversions (per font)
+ local hash, reverse = tfmdata.luatex.unicodes, { }
+ for i=1,#what do
+ local w = what[i]
+ for j=1,#w do
+ local name = w[j]
+ local unicode = hash[name]
+ if unicode then
+ reverse[unicode] = i
+ end
+ end
+ end
+ tfmdata.colorscheme = reverse
+ return
+ end
+ end
+ end
+ tfmdata.colorscheme = false
+end
+
+local fontdata = fonts.ids
+local fcs = fonts.color.set
+local has_attribute = node.has_attribute
+local traverse_id = node.traverse_id
+local a_colorscheme = attributes.private('colorscheme')
+local glyph = node.id("glyph")
+
+function fonts.goodies.colorschemes.coloring(head)
+ local lastfont, lastscheme
+ for n in traverse_id(glyph,head) do
+ local a = has_attribute(n,a_colorscheme)
+ if a then
+ local f = n.font
+ if f ~= lastfont then
+ lastscheme, lastfont = fontdata[f].colorscheme, f
+ end
+ if lastscheme then
+ local sc = lastscheme[n.char]
+ if sc then
+ fcs(n,"colorscheme:"..a..":"..sc) -- slow
+ end
+ end
+ end
+ end
+end
+
+function fonts.goodies.colorschemes.enable()
+ tasks.appendaction("processors","fonts","fonts.goodies.colorschemes.coloring")
+ function fonts.goodies.colorschemes.enable() end
+end
+
+-- installation (collected to keep the overview)
+
+fonts.otf.tables.features['goodies'] = 'Goodies on top of built in features'
+fonts.otf.tables.features['featurset'] = 'Goodie Feature Set'
+fonts.otf.tables.features['colorscheme'] = 'Goodie Color Scheme'
+
+fonts.otf.features.register('goodies')
+fonts.otf.features.register('featureset')
+fonts.otf.features.register('colorscheme')
+
+table.insert(fonts.triggers, 1, "goodies")
+table.insert(fonts.triggers, 2, "featureset") -- insert after
+table.insert(fonts.triggers, "colorscheme")
+
+fonts.initializers.base.otf.goodies = fonts.initializers.common.goodies
+fonts.initializers.node.otf.goodies = fonts.initializers.common.goodies
+
+fonts.initializers.base.otf.featureset = fonts.initializers.common.featureset
+fonts.initializers.node.otf.featureset = fonts.initializers.common.featureset
+
+fonts.initializers.base.otf.colorscheme = fonts.initializers.common.colorscheme
+fonts.initializers.node.otf.colorscheme = fonts.initializers.common.colorscheme
+
+-- experiment, we have to load the definitions immediately as they precede
+-- the definition so they need to be initialized in the typescript
+
+local function initialize(goodies)
+ local mathgoodies = goodies.mathematics
+ local virtuals = mathgoodies and mathgoodies.virtuals
+ local mapfiles = mathgoodies and mathgoodies.mapfiles
+ local maplines = mathgoodies and mathgoodies.maplines
+ if virtuals then
+ for name, specification in next, virtuals do
+ mathematics.make_font(name,specification)
+ end
+ end
+ if mapfiles then
+ for i=1,#mapfiles do
+ fonts.map.loadfile(mapfiles[i]) -- todo: backend function
+ end
+ end
+ if maplines then
+ for i=1,#maplines do
+ fonts.map.loadline(maplines[i]) -- todo: backend function
+ end
+ end
+end
+
+fonts.goodies.register("mathematics", initialize)
+
+-- The following file (husayni.lfg) is the experimental setup that we used
+-- for Idris font. For the moment we don't store this in the cache and quite
+-- probably these files sit in one of the paths:
+--
+-- tex/context/fonts/goodies
+-- tex/fonts/goodies/context
+-- tex/fonts/data/foundry/collection
+--
+-- see lfg files in distribution
diff --git a/Master/texmf-dist/tex/context/base/font-gds.mkiv b/Master/texmf-dist/tex/context/base/font-gds.mkiv
new file mode 100644
index 00000000000..e36116283e0
--- /dev/null
+++ b/Master/texmf-dist/tex/context/base/font-gds.mkiv
@@ -0,0 +1,83 @@
+%D \module
+%D [ file=font-gds,
+%D version=2009.10.14,
+%D title=\CONTEXT\ Font Support,
+%D subtitle=Colorschemes,
+%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}{ConTeXt Font Support / Colorschemes}
+
+% \registerctxluafile{font-gds}{1.001}
+
+\unprotect
+
+\def\loadfontgoodies[#1]%
+ {\ctxlua{fonts.goodies.get("#1")}}
+
+
+% this will become colorgroups and move to font-col or so
+
+\definecolor[colorscheme:1:1][s=.75]
+\definecolor[colorscheme:1:2][r=.75]
+\definecolor[colorscheme:1:3][g=.75]
+\definecolor[colorscheme:1:4][b=.75]
+\definecolor[colorscheme:1:5][c=.75]
+\definecolor[colorscheme:1:6][m=.75]
+\definecolor[colorscheme:1:7][y=.75]
+
+\definecolor[colorscheme:2:7][s=.75]
+\definecolor[colorscheme:2:6][r=.75]
+\definecolor[colorscheme:2:5][g=.75]
+\definecolor[colorscheme:2:4][b=.75]
+\definecolor[colorscheme:2:3][c=.75]
+\definecolor[colorscheme:2:2][m=.75]
+\definecolor[colorscheme:2:1][y=.75]
+
+\definesystemattribute[colorscheme] \chardef\colorschemeattribute \dogetattributeid{colorscheme}
+
+\def\setfontcolorscheme
+ {\ctxlua{fonts.goodies.colorschemes.enable()}%
+ \xdef\setfontcolorscheme[##1]{\attribute\colorschemeattribute##1\relax}%
+ \setfontcolorscheme}
+
+\edef\resetfontcolorscheme{\attribute\colorschemeattribute\attributeunsetvalue}
+
+\protect \endinput
+
+% \definefontfeature[husayni-colored][goodies=husayni,colorscheme=default,featureset=default]
+%
+% \definedfont[husayni*husayni-colored at 36pt]
+%
+% \starttext \pardir TRT \textdir TRT
+%
+% \setfontcolorscheme[1]
+%
+% اَلْحَمْ‍دُ لِلّٰهِ حَمْدَ مُعْتَرِفٍ بِحَمْدِهٖ، مُغْتَرِفٌ مِنْ بِحَارِ
+% مَجْدِهٖ، بِلِسَانِ ٱلثَّنَاۤءِ شَاكِرًا، وَلِحُسْنِ اٰلاۤئِهٖ نَاشِرًا؛
+% اَلَّذِيْ خَلَقَ ٱلْمَوْتَ وَٱلْحَيٰوةَ، وَٱلْخَيْرَ وَٱلشَّرَّ،
+% وَٱلنَّفْعَ وَٱلضَّرَّ، وَٱلسُّكُوْنَ وَٱلْحَرَكَةَ، وَٱلْأَرْوَاحَ
+% وَٱلْأَجْسَامَ، وَٱلذِّكْرَ وَٱلنِّسْيَانَ.
+%
+% \setfontcolorscheme[2]
+%
+% اَلْحَمْ‍دُ لِلّٰهِ حَمْدَ مُعْتَرِفٍ بِحَمْدِهٖ، مُغْتَرِفٌ مِنْ بِحَارِ
+% مَجْدِهٖ، بِلِسَانِ ٱلثَّنَاۤءِ شَاكِرًا، وَلِحُسْنِ اٰلاۤئِهٖ نَاشِرًا؛
+% اَلَّذِيْ خَلَقَ ٱلْمَوْتَ وَٱلْحَيٰوةَ، وَٱلْخَيْرَ وَٱلشَّرَّ،
+% وَٱلنَّفْعَ وَٱلضَّرَّ، وَٱلسُّكُوْنَ وَٱلْحَرَكَةَ، وَٱلْأَرْوَاحَ
+% وَٱلْأَجْسَامَ، وَٱلذِّكْرَ وَٱلنِّسْيَانَ.
+%
+% \resetfontcolorscheme
+%
+% اَلْحَمْ‍دُ لِلّٰهِ حَمْدَ مُعْتَرِفٍ بِحَمْدِهٖ، مُغْتَرِفٌ مِنْ بِحَارِ
+% مَجْدِهٖ، بِلِسَانِ ٱلثَّنَاۤءِ شَاكِرًا، وَلِحُسْنِ اٰلاۤئِهٖ نَاشِرًا؛
+% اَلَّذِيْ خَلَقَ ٱلْمَوْتَ وَٱلْحَيٰوةَ، وَٱلْخَيْرَ وَٱلشَّرَّ،
+% وَٱلنَّفْعَ وَٱلضَّرَّ، وَٱلسُّكُوْنَ وَٱلْحَرَكَةَ، وَٱلْأَرْوَاحَ
+% وَٱلْأَجْسَامَ، وَٱلذِّكْرَ وَٱلنِّسْيَانَ.
+%
+% \stoptext
diff --git a/Master/texmf-dist/tex/context/base/font-ini.lua b/Master/texmf-dist/tex/context/base/font-ini.lua
index 4005726a59a..e4514978175 100644
--- a/Master/texmf-dist/tex/context/base/font-ini.lua
+++ b/Master/texmf-dist/tex/context/base/font-ini.lua
@@ -1,6 +1,6 @@
if not modules then modules = { } end modules ['font-ini'] = {
version = 1.001,
- comment = "companion to font-ini.tex",
+ comment = "companion to font-ini.mkiv",
author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
copyright = "PRAGMA ADE / ConTeXt Development Team",
license = "see context related readme files"
@@ -11,6 +11,8 @@ if not modules then modules = { } end modules ['font-ini'] = {
--ldx]]--
local utf = unicode.utf8
+local format, serialize = string.format, table.serialize
+local write_nl = texio.write_nl
if not fontloader then fontloader = fontforge end
@@ -20,7 +22,11 @@ fontloader.totable = fontloader.to_table
-- fix comes last
fonts = fonts or { }
-fonts.ids = fonts.ids or { } -- aka fontdata
+
+fonts.ids = fonts.ids or { } fonts.identifiers = fonts.ids -- aka fontdata
+fonts.chr = fonts.chr or { } fonts.characters = fonts.chr -- aka chardata
+fonts.qua = fonts.qua or { } fonts.quads = fonts.qua -- aka quaddata
+
fonts.tfm = fonts.tfm or { }
fonts.mode = 'base'
@@ -30,8 +36,11 @@ fonts.verbose = false -- more verbose cache tables
fonts.ids[0] = { -- nullfont
characters = { },
descriptions = { },
+ name = "nullfont",
}
+fonts.chr[0] = { }
+
fonts.methods = fonts.methods or {
base = { tfm = { }, afm = { }, otf = { }, vtf = { }, fix = { } },
node = { tfm = { }, afm = { }, otf = { }, vtf = { }, fix = { } },
@@ -61,37 +70,26 @@ fonts.define.specify.synonyms = fonts.define.specify.synonyms or { }
-- tracing
-fonts.color = fonts.color or { }
+if not fonts.color then
-local attribute = attributes.private('color')
-local mapping = (attributes and attributes.list[attribute]) or { }
+ fonts.color = {
+ set = function() end,
+ reset = function() end,
+ }
-local set_attribute = node.set_attribute
-local unset_attribute = node.unset_attribute
-
-function fonts.color.set(n,c)
- local mc = mapping[c]
- if not mc then
- unset_attribute(n,attribute)
- else
- set_attribute(n,attribute,mc)
- end
-end
-function fonts.color.reset(n)
- unset_attribute(n,attribute)
end
--- this will change ...
-
-function fonts.show_char_data(n)
- local tfmdata = fonts.ids[font.current()]
- if tfmdata then
- if type(n) == "string" then
- n = utf.byte(n)
- end
- local chr = tfmdata.characters[n]
- if chr then
- texio.write_nl(table.serialize(chr,string.format("U_%04X",n)))
- end
+-- format identification
+
+fonts.formats = { }
+
+function fonts.fontformat(filename,default)
+ local extname = file.extname(filename)
+ local format = fonts.formats[extname]
+ if format then
+ return format
+ else
+ logs.report("fonts define","unable to detemine font format for '%s'",filename)
+ return default
end
end
diff --git a/Master/texmf-dist/tex/context/base/font-ini.mkii b/Master/texmf-dist/tex/context/base/font-ini.mkii
index f614a07cd09..89fbb5d0720 100644
--- a/Master/texmf-dist/tex/context/base/font-ini.mkii
+++ b/Master/texmf-dist/tex/context/base/font-ini.mkii
@@ -3163,12 +3163,14 @@
\def\definefontfeature
{\dotripleargument\dodefinefontfeature}
+\def\dododefinefontfeature#1%
+ {\edef\!!stringa{\ifx\!!stringa\empty\else\!!stringa,\fi\executeifdefined{\??fa#1}\empty}}
+
\def\dodefinefontfeature[#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
+ \processcommalist[#2]\dododefinefontfeature
\setevalue{\??fa#1}{\ifx\!!stringa\empty\else\!!stringa,\fi#3}}}
\definefontfeature
@@ -3185,11 +3187,15 @@
\definefontfeature % no calt
[arabic]
- [mode=node,language=dflt,script=arab,
+ [language=dflt,script=arab,
init=yes,medi=yes,fina=yes,isol=yes,
liga=yes,dlig=yes,rlig=yes,clig=yes,
mark=yes,mkmk=yes,kern=yes,curs=yes]
+\definefontfeature
+ [none]
+ [features=no]
+
%D The next auxilliary macro is an alternative to \type
%D {\fontname}.
@@ -3242,11 +3248,11 @@
%
% newer
-\def\os {\mathortext{\fam\purefamily {oldstyle}}{\symbolicfont {OldStyle}}}
-\def\frak{\mathortext{\fam\purefamily {fraktur}}{\symbolicfont {Fraktur}}}
-\def\goth{\mathortext{\fam\purefamily {gothic}}{\symbolicfont {Gothic}}}
-\def\cal {\mathortext{\fam\purefamily{calligraphic}}{\symbolicfont{Calligraphic}}}
-\def\bbd {\mathortext{\fam\purefamily {blackboard}}{\symbolicfont {Blackboard}}}
+\unexpanded\def\os {\mathortext{\fam\purefamily {oldstyle}}{\symbolicfont {OldStyle}}}
+\unexpanded\def\frak{\mathortext{\fam\purefamily {fraktur}}{\symbolicfont {Fraktur}}}
+\unexpanded\def\goth{\mathortext{\fam\purefamily {gothic}}{\symbolicfont {Gothic}}}
+\unexpanded\def\cal {\mathortext{\fam\purefamily{calligraphic}}{\symbolicfont{Calligraphic}}}
+\unexpanded\def\bbd {\mathortext{\fam\purefamily {blackboard}}{\symbolicfont {Blackboard}}}
\definefontsynonym [OldStyle] [Serif]
\definefontsynonym [Fraktur] [Serif]
@@ -3262,10 +3268,10 @@
\ifx\mathtext\undefined \let\mathtext\hbox \fi
-\def\fraktur #1{\mathortext\domathtext\donothing{\frak#1}}
-\def\gothic #1{\mathortext\domathtext\donothing{\goth#1}}
-\def\calligraphic#1{\mathortext\domathtext\donothing{\cal #1}}
-\def\blackboard #1{\mathortext\domathtext\donothing{\bbd#1}}
+\unexpanded\def\fraktur #1{\mathortext\domathtext\donothing{\frak#1}}
+\unexpanded\def\gothic #1{\mathortext\domathtext\donothing{\goth#1}}
+\unexpanded\def\calligraphic#1{\mathortext\domathtext\donothing{\cal #1}}
+\unexpanded\def\blackboard #1{\mathortext\domathtext\donothing{\bbd#1}}
%D Torture test:
%D
diff --git a/Master/texmf-dist/tex/context/base/font-ini.mkiv b/Master/texmf-dist/tex/context/base/font-ini.mkiv
index c39bdb8b79c..c7d515cca36 100644
--- a/Master/texmf-dist/tex/context/base/font-ini.mkiv
+++ b/Master/texmf-dist/tex/context/base/font-ini.mkiv
@@ -12,6 +12,8 @@
%C therefore copyrighted by \PRAGMA. See mreadme.pdf for
%C details.
+% runtime commands will move to modules
+
% simplification ... we no longer deal with specific mmtfa specifications
% todo: always fontclass, then less testing
@@ -59,6 +61,7 @@
\registerctxluafile{font-syn}{1.001}
\registerctxluafile{font-log}{1.001}
\registerctxluafile{font-tfm}{1.001}
+\registerctxluafile{font-enh}{1.001}
\registerctxluafile{font-afm}{1.001}
\registerctxluafile{font-cid}{1.001} % cid maps
\registerctxluafile{font-ott}{1.001} % otf tables
@@ -75,9 +78,11 @@
\registerctxluafile{font-ctx}{1.001}
\registerctxluafile{font-xtx}{1.001}
\registerctxluafile{font-fbk}{1.001}
+\registerctxluafile{font-gds}{1.001}
\registerctxluafile{font-ext}{1.001}
\registerctxluafile{font-pat}{1.001}
\registerctxluafile{font-chk}{1.001}
+\registerctxluafile{font-agl}{1.001}
\unprotect
@@ -166,7 +171,7 @@
\unexpanded\def\startfont
{\bgroup\definedfont}
-\def\stopfont
+\unexpanded\def\stopfont
{\egroup}
\def\doiffontcharelse#1#2%
@@ -480,7 +485,7 @@
\let\currentmathsize\empty
-\def\mathsizesuffix{\ifcase0\currentmathsize\or\mathtextsuffix\or\mathscriptscriptsuffix\or\mathscriptsuffix\fi}
+\def\mathsizesuffix{\ifcase0\currentmathsize\or\mathtextsuffix\or\mathscriptsuffix\or\mathscriptscriptsuffix\fi}
\def\dodosetmathfamily#1#2%
{\ifcsname\fontclass \fontbody\c!mm\fontfamily\fontsize\currentmathsize\endcsname \autofontsizefalse
@@ -531,6 +536,21 @@
\appendtoks
\ifcase\boldmathmode\or\dosetmathfamily\mbfam\c!mb\fi
\to \mathstrategies
+
+% \chardef\msfam\plustwo % math symbol
+%
+% \def\c!ms{ms}
+%
+% \unexpanded\def\ms{\ifmmode\fam\plustwo\else\setcurrentfontalternative\c!ms\fi}
+%
+% \chardef\symbolmathmode\zerocount
+%
+% \def\enablesymbolmath {\chardef\symbolmathmode\plusone }
+% \def\disablesymbolmath{\chardef\symbolmathmode\zerocount}
+%
+% \appendtoks
+% \ifcase\symbolmathmode\or\dosetmathfamily\msfam\c!ms\fi
+% \to \mathstrategies
%D All used styles, like rm, ss and tt, are saved in a comma
%D separated list. Appart from practical limitations one can
@@ -561,14 +581,38 @@
%D We could instead have used dirty grouping tricks, but this
%D one works too.
+% \enableexperiments[fonts.autorscale]
+%
+% \starttypescript[mscore]
+% \definetypeface [mscore] [rm] [serif] [mscoretimes] [default]
+% \definetypeface [mscore] [ss] [sans] [mscorearial] [default] [rscale=auto] % 0.860]
+% \definetypeface [mscore] [tt] [mono] [mscorecourier] [default] [rscale=auto] % 1.065]
+% \definetypeface [mscore] [mm] [math] [times] [default] [rscale=auto] % 1.020]
+% \stoptypescript
+%
+% \starttext
+% \setupbodyfont[mscore,12pt]
+% \startTEXpage
+% test \ss test \tt test
+% \stopTEXpage
+% \stoptext
+
\let\defaultrelativefontsize \plusone
\let\localrelativefontsize \plusone
\def\localabsolutefontsize {\fontbody}
\let\relativefontsize \defaultrelativefontsize
-\def\saverelativefontsize#1#2% #1=rm|ss|.. #2=waarde
- {\setxvalue{\fontclass#1\s!rscale}{#2}}
+% \def\saverelativefontsize#1#2% #1=rm|ss|.. #2=waarde
+% {\setxvalue{\fontclass#1\s!rscale}{#2}}
+
+\def\checkrelativefontid
+ {\ifcsname\??tf\fontclass\s!rname\endcsname
+ \@EA\let\@EA\relativefontid\csname\??tf\fontclass\s!rname\endcsname
+ \else
+ \@EA\xdef\csname\??tf\fontclass\s!rname\endcsname{\the\lastfontid}%
+ \let\relativefontid\empty
+ \fi}
\def\checkrelativefontsize#1%
{\edef\relativefontsize
@@ -578,29 +622,13 @@
\csname\defaultfontclass#1\s!rscale\endcsname
\else
\defaultrelativefontsize
- \fi\fi}}
-
-% \letvalue{\s!default\s!rscale}\defaultrelativefontsize
-%
-% \def\checkrelativefontsize#1%
-% {\edef\relativefontsize
-% {\csname
-% \ifcsname\fontclass#1\s!rscale\endcsname
-% \fontclass#1%
-% \else\ifcsname\defaultfontclass#1\s!rscale\endcsname
-% \defaultfontclass#1%
-% \else
-% \s!default
-% \fi\fi
-% \s!rscale\endcsname}}
-
-%D We also save:
-
-\def\savemathtextstyle#1% #1=rm|ss|..
- {\doifsomething{#1}{\setxvalue{\fontclass\c!mm\s!text}{#1}}}
-
-\def\currentmathtextstyle % we default to empty !
- {\executeifdefined{\fontclass\c!mm\s!text}\empty}
+ \fi\fi}%
+ \ifx\relativefontsize\v!auto
+ \let\relativefontsize\plusone
+ \checkrelativefontid
+ \else
+ \let\relativefontid\minusone
+ \fi}
%D Scaling macros:
%D
@@ -645,7 +673,8 @@
\newcount\scaledfontmode
\newdimen\scaledfontsize
-\newtoks\everydefinefont
+\newtoks \everydefinefont
+\newcount\lastfontid
\def\currentfontbodysize
{\ifcsname\??ft\s!default\somefontsize\endcsname
@@ -654,6 +683,8 @@
\somefontsize
\fi}
+\let\relativefontid\empty
+
\def\lowleveldefinefont#1#2% #2 = cs
{%
\ctxlua{fonts.define.command_1("\luaescapestring{#1}")}% the escapestring catches at \somedimen
@@ -697,15 +728,16 @@
"\@@fontclassfallbacks",
"\@@fontfallbacks",
0\currentmathsize,
- \number\dimexpr\textface\relax
+ \number\dimexpr\textface\relax,
+ "\relativefontid" % experiment
)}%
\edef\somefontspec{at \somefontsize}% we need the resolved designsize (for fallbacks)
\expandafter\let\expandafter\lastrawfontcall\csname#2\endcsname
\the\everydefinefont}
\def\updatefontclassparameters
- {\edef\@@fontclassfeatures {\ifcsname\fontclass\s!features \endcsname\csname\fontclass\s!features \endcsname\fi}%
- \edef\@@fontclassfallbacks{\ifcsname\fontclass\s!fallbacks\endcsname\csname\fontclass\s!fallbacks\endcsname\fi}}
+ {\edef\@@fontclassfeatures {\ifcsname\fontclass\fontstyle\s!features \endcsname\csname\fontclass\fontstyle\s!features \endcsname\fi}%
+ \edef\@@fontclassfallbacks{\ifcsname\fontclass\fontstyle\s!fallbacks\endcsname\csname\fontclass\fontstyle\s!fallbacks\endcsname\fi}}
% resolve
@@ -762,6 +794,12 @@
\let\fontfile\s!unknown
+% \definefontfeature[slanted] [default][slant=.25]
+% \definefontfeature[stretched][default][stretch=2]
+%
+% \start \definedfont[SerifBold*slanted at 20pt] \ruledhbox{Test!} \stop
+% \start \definedfont[SerifBold*stretched at 20pt] \ruledhbox{Test!} \stop
+
% \definefontfeature[default] [liga=yes,texligatures=yes,texquotes=yes]
% \definefontfeature[default-caps][liga=yes,texligatures=yes,texquotes=yes,smcp=yes,script=latn]
%
@@ -878,7 +916,7 @@
% We could use an indirect method ... store in 'array' and refer to
% slot.
-\def\definefontsynonym[#1]#2[#3]%
+\unexpanded\def\definefontsynonym[#1]#2[#3]%
{\edef\@@fontname{#1}%
\edef\@@fontfile{#3}%
\ifx\fontclass\empty
@@ -945,19 +983,11 @@
\let\definefontfile\definefontsynonym % dedicated to Taco Hoekwater
-\def\setupfontsynonym
+\unexpanded\def\setupfontsynonym
{\dodoubleempty\dosetupfontsynonym}
-\def\dosetupfontsynonym[#1][#2]%
- {\edef\@@fontdata{#2}%
- \ifx\@@fontdata\empty \else
- \edef\@@fontfile{#1}%
- \ifx\fontclass\empty
- \getfontparameters
- \else
- \getglobalfontparameters
- \fi
- \fi}
+\def\dosetupfontsynonym[#1][#2]% not yet supported, will do when needed
+ {}
\def\truefontname#1%
{\@EA\dotruefontname#1*\empty*\relax}
@@ -1026,7 +1056,7 @@
%
% \setupbodyfont[palatino]
-\def\startfontclass
+\unexpanded\def\startfontclass
{\dosingleempty\dostartfontclass}
\def\dostartfontclass[#1]%
@@ -1035,7 +1065,7 @@
{\let\fontclass\empty}
{\doifsomething{#1}{\def\fontclass{#1}}}}
-\def\stopfontclass
+\unexpanded\def\stopfontclass
{\popmacro\fontclass}
%D \macros
@@ -1065,14 +1095,14 @@
%D
%D The implementation looks as follows:
-\def\definefont
+\unexpanded\def\definefont
{\dotripleempty\dodefinefont}
\def\dodefinefont[#1][#2][#3]% [name][spec][1.6 | line=10pt | setup_id]
{\ifthirdargument
- \unexpanded\setvalue{#1}{\redodefinefont{#1}{#2}{#3}}%
+ \setuvalue{#1}{\redodefinefont{#1}{#2}{#3}}%
\else
- \unexpanded\setvalue{#1}{\dododefinefont{#1}{#2}}%
+ \setuvalue{#1}{\dododefinefont{#1}{#2}}%
\fi}
\def\redodefinefont#1#2#3%
@@ -1082,7 +1112,7 @@
{\setuplocalinterlinespace[#3]%
\setupspacing}} % needed ?
-\def\definefrozenfont
+\unexpanded\def\definefrozenfont
{\dotripleempty\dodefinefrozenfont}
\def\dodefinefrozenfont[#1][#2][#3]%
@@ -1109,7 +1139,6 @@
\let\localrelativefontsize\defaultrelativefontsize
\let\localabsolutefontsize\fontbody
\lowleveldefinefont{#2}\rawfontidentifier
-% \let\localrelativefontsize\defaultrelativefontsize % not needed
\csname\rawfontidentifier\endcsname
\autofontsizefalse
\setfontcharacteristics
@@ -1122,7 +1151,6 @@
\def\localrelativefontsize{#1}%
\def\localabsolutefontsize{#2}%
\lowleveldefinefont{#4}\newfontidentifier
-% \let\localrelativefontsize\defaultrelativefontsize % not needed
\fi
\csname\newfontidentifier\endcsname
\autofontsizefalse
@@ -1198,11 +1226,11 @@
\processcommacommand[\fontalternativelist]\dodocommand}%
\processcommacommand[\fontsizelist]\docommand}
-\def\definefontsize[#1]% sneller met toks
+\unexpanded\def\definefontsize[#1]% sneller met toks
{\addtocommalist{#1}\fontsizelist
\checkfontnamecombinations}
-\def\definefontalternative[#1]%
+\unexpanded\def\definefontalternative[#1]%
{\addtocommalist{#1}\fontalternativelist
\checkfontnamecombinations}
@@ -1292,7 +1320,11 @@
%D have a similar meaning, and therefore can lead to an
%D unwanted loop, we temporary redefine \type{\c!text}. For
%D the moment this in only place that some trickery is needed
-%D to fool the multilingual interface.
+%D to fool the multilingual interface. However, long ago
+%D we decided to stick to \s!text in definitions as it closely
+%D relates to the math model where text, script and scriptscript
+%D are used untranslated. Also, we are now english at the low
+%D level so it cannot go wrong anymore.
%D
%D When instead of a size the keyword \type{unknown} is
%D passed, fractions (relations) are used instead of fixed
@@ -1320,7 +1352,7 @@
\let\k!text \k!savedtext
\fi}
-\def\definebodyfontenvironment
+\unexpanded\def\definebodyfontenvironment
{\dotripleempty\dodefinebodyfontenvironment}
\def\dodefinebodyfontenvironment[#1][#2][#3]% class size settings
@@ -1348,12 +1380,9 @@
% we test for em as we assume it to be set
\else
\def\docommand##1%
-% fails: \def\checkbodyfontenvironment[#1]{! #1 ! \definebodyfontenvironment[\fontclass][#1][]} \setupbodyfont[8.5pt]
-% {\normalizebodyfontsize\csname\??ft\s!default##1\endcsname\dimexpr#1\relax\to\tempbodyfontsize
-% \letvalue{\??ft#2#1##1}\tempbodyfontsize}%
- {\scratchdimen\csname\??ft\s!default##1\endcsname\dimexpr#1\relax
- \normalizebodyfontsize\scratchdimen\to\tempbodyfontsize
- \letvalue{\??ft#2#1##1}\tempbodyfontsize}%
+ {\scratchdimen\csname\??ft\s!default##1\endcsname\dimexpr#1\relax
+ \normalizebodyfontsize\scratchdimen\to\tempbodyfontsize
+ \letvalue{\??ft#2#1##1}\tempbodyfontsize}%
\processcommacommand[\fontrelativesizelist]\docommand
\copyparameters
[\??ft#2#1][\??ft\s!default]
@@ -1369,7 +1398,10 @@
\else
% prevent loop (hence \empty)
\letvalue{\@size@#1}\empty
+ \pushmacro\fontclass % new per 26102009
+ \edef\fontclass{#2}% % new per 26102009
\defineunknownfont{#1}%
+ \popmacro\fontclass % new per 26102009
\fi\fi
% so far
\setvalue{\@size@#1}{\docompletefontswitch[#1]}}
@@ -1406,7 +1438,7 @@
% this one already catches both define/setup
-\def\setupbodyfontenvironment{\definebodyfontenvironment}
+\let\setupbodyfontenvironment\definebodyfontenvironment
%D Just a couple of interface macros:
@@ -1499,7 +1531,7 @@
%D user definitions like \type{\tfw} or \type{\bfq} for real
%D large alternatives.
-\def\definebodyfont
+\unexpanded\def\definebodyfont
{\doquadrupleempty\redefinebodyfont}
\def\redefinebodyfont[#1][#2][#3][#4]%
@@ -1580,30 +1612,30 @@
\def\dodefinebodyfontnopxx#1#2[#3#4#5=#6]% style body def
{\ifcsname#1#3#4#5\endcsname\else\checkbodyfont{#1}{#3#4}{#5}\fi% not \definefontsize[#5]
\@EA\let\csname*#2#1#3#4#5*\endcsname\undefined
- \normalprotected\@EA\edef\csname#2#1#3#4#5\endcsname{\noexpand\xxdododefinefont{\number\relativefontsize}{#2}{#2#1#3#4#5}{\normalunexpanded{#6}}}}
+ \unexpanded\@EA\edef\csname#2#1#3#4#5\endcsname{\noexpand\xxdododefinefont{\number\relativefontsize}{#2}{#2#1#3#4#5}{\normalunexpanded{#6}}}}
\def\dodefinebodyfontyesxx#1#2[#3#4#5=#6]% style body def
{\ifcsname#1#3#4#5\endcsname\else\checkbodyfont{#1}{#3#4}{#5}\fi% not \definefontsize[#5]
\fcglobal\@EA\let\csname*\fontclass#2#1#3#4#5*\endcsname\undefined
- \normalprotected\@EA\fcxdef\csname\fontclass#2#1#3#4#5\endcsname{\noexpand\xxdododefinefont{\number\relativefontsize}{#2}{#2#1#3#4#5}{\normalunexpanded{#6}}}}
+ \unexpanded\@EA\fcxdef\csname\fontclass#2#1#3#4#5\endcsname{\noexpand\xxdododefinefont{\number\relativefontsize}{#2}{#2#1#3#4#5}{\normalunexpanded{#6}}}}
\def\dodefinebodyfontnopmm#1#2[#3#4#5=#6]% style body def
{\ifcsname#1#3#4#5\endcsname\else\checkbodyfont{#1}{#3#4}{#5}\fi% not \definefontsize[#5]
\@EA\let\csname*#2#1#3#4#51*\endcsname\undefined
\@EA\let\csname*#2#1#3#4#52*\endcsname\undefined
\@EA\let\csname*#2#1#3#4#53*\endcsname\undefined
- \normalprotected\@EA\edef\csname#2#1#3#4#51\endcsname{\noexpand\xxdododefinefont{\number\relativefontsize}{#2}{#2#1#3#4#51}{\normalunexpanded{#6}}}%
- \normalprotected\@EA\edef\csname#2#1#3#4#52\endcsname{\noexpand\xxdododefinefont{\number\relativefontsize}{#2}{#2#1#3#4#52}{\normalunexpanded{#6}}}%
- \normalprotected\@EA\edef\csname#2#1#3#4#53\endcsname{\noexpand\xxdododefinefont{\number\relativefontsize}{#2}{#2#1#3#4#53}{\normalunexpanded{#6}}}}
+ \unexpanded\@EA\edef\csname#2#1#3#4#51\endcsname{\noexpand\xxdododefinefont{\number\relativefontsize}{#2}{#2#1#3#4#51}{\normalunexpanded{#6}}}%
+ \unexpanded\@EA\edef\csname#2#1#3#4#52\endcsname{\noexpand\xxdododefinefont{\number\relativefontsize}{#2}{#2#1#3#4#52}{\normalunexpanded{#6}}}%
+ \unexpanded\@EA\edef\csname#2#1#3#4#53\endcsname{\noexpand\xxdododefinefont{\number\relativefontsize}{#2}{#2#1#3#4#53}{\normalunexpanded{#6}}}}
\def\dodefinebodyfontyesmm#1#2[#3#4#5=#6]% style body def
{\ifcsname#1#3#4#5\endcsname\else\checkbodyfont{#1}{#3#4}{#5}\fi% not \definefontsize[#5]
\fcglobal\@EA\let\csname*\fontclass#2#1#3#4#51*\endcsname\undefined
\fcglobal\@EA\let\csname*\fontclass#2#1#3#4#52*\endcsname\undefined
\fcglobal\@EA\let\csname*\fontclass#2#1#3#4#53*\endcsname\undefined
- \normalprotected\@EA\fcxdef\csname\fontclass#2#1#3#4#51\endcsname{\noexpand\xxdododefinefont{\number\relativefontsize}{#2}{#2#1#3#4#51}{\normalunexpanded{#6}}}%
- \normalprotected\@EA\fcxdef\csname\fontclass#2#1#3#4#52\endcsname{\noexpand\xxdododefinefont{\number\relativefontsize}{#2}{#2#1#3#4#52}{\normalunexpanded{#6}}}%
- \normalprotected\@EA\fcxdef\csname\fontclass#2#1#3#4#53\endcsname{\noexpand\xxdododefinefont{\number\relativefontsize}{#2}{#2#1#3#4#53}{\normalunexpanded{#6}}}}
+ \unexpanded\@EA\fcxdef\csname\fontclass#2#1#3#4#51\endcsname{\noexpand\xxdododefinefont{\number\relativefontsize}{#2}{#2#1#3#4#51}{\normalunexpanded{#6}}}%
+ \unexpanded\@EA\fcxdef\csname\fontclass#2#1#3#4#52\endcsname{\noexpand\xxdododefinefont{\number\relativefontsize}{#2}{#2#1#3#4#52}{\normalunexpanded{#6}}}%
+ \unexpanded\@EA\fcxdef\csname\fontclass#2#1#3#4#53\endcsname{\noexpand\xxdododefinefont{\number\relativefontsize}{#2}{#2#1#3#4#53}{\normalunexpanded{#6}}}}
\def\checkbodyfont#1% tests for ttsl mmbf
{\edef\c!!mm{#1}%
@@ -1618,21 +1650,21 @@
\def\checkmathbodyfont#1#2#3% style alt size / gdef % #3 can be empty
{%\message{!m #1 #2 #3!}%
% #1 #2 #3 = signal
- %unexpanded\setgvalue {#2}{\setcurrentfontalternative {#2}}% \mr \mb
- \unexpanded\setgvalue {#1}{\setcurrentfontstyle {#1}}}% \mm
+ %setugvalue {#2}{\setcurrentfontalternative {#2}}% \mr \mb
+ \setugvalue {#1}{\setcurrentfontstyle {#1}}}% \mm
\def\checktextbodyfont#1#2#3% style alt size / gdef % #3 can be empty
{%\message{!t #1 #2 #3!}%
- \unexpanded\setgvalue {#1#3}{\setcurrentfontstylesize {#1}{#3}}% \rma
- \unexpanded\setgvalue {#2#3}{\setcurrentfontalternativesize {#2}{#3}}% \sla
- \unexpanded\setgvalue {#1#2#3}{\setcurrentfontstylealternativesize{#1}{#2}{#3}}% \rmsla
- \unexpanded\setgvalue {#1}{\setcurrentfontstyle {#1}}% \rm
- \unexpanded\setgvalue {#2}{\setcurrentfontalternative {#2}}% \sl
- \unexpanded\setgvalue {#1\c!x}{\setcurrentfontxstylealternative {#1}}% \rmx
- \unexpanded\setgvalue{#1\c!xx}{\setcurrentfontxxstylealternative {#1}}% \rmxx
- \unexpanded\setgvalue {#2\c!x}{\setcurrentfontxalternative {#2}}% \slx
- \unexpanded\setgvalue{#2\c!xx}{\setcurrentfontxxalternative {#2}}% \slxx
- \unexpanded\setgvalue {#1#2}{\setcurrentfontstylealternative {#1}{#2}}}% \rmsl
+ \setugvalue {#1#3}{\setcurrentfontstylesize {#1}{#3}}% \rma
+ \setugvalue {#2#3}{\setcurrentfontalternativesize {#2}{#3}}% \sla
+ \setugvalue {#1#2#3}{\setcurrentfontstylealternativesize{#1}{#2}{#3}}% \rmsla
+ \setugvalue {#1}{\setcurrentfontstyle {#1}}% \rm
+ \setugvalue {#2}{\setcurrentfontalternative {#2}}% \sl
+ \setugvalue {#1\c!x}{\setcurrentfontxstylealternative {#1}}% \rmx
+ \setugvalue{#1\c!xx}{\setcurrentfontxxstylealternative {#1}}% \rmxx
+ \setugvalue {#2\c!x}{\setcurrentfontxalternative {#2}}% \slx
+ \setugvalue{#2\c!xx}{\setcurrentfontxxalternative {#2}}% \slxx
+ \setugvalue {#1#2}{\setcurrentfontstylealternative {#1}{#2}}}% \rmsl
\def\dodefinedefaultbodyfont[#1][#2][#3]% sizes styles identifier
{\def\dododefinedefaultbodyfont##1%
@@ -1673,7 +1705,7 @@
\defineunknownfont{\csname\??ft#1#2\endcsname}%
\fi}
-\def\defineunknownfont#1%
+\unexpanded\def\defineunknownfont#1%
{\let\c!savedtext\c!text
\let\c!text\s!text
\donefalse
@@ -1685,7 +1717,7 @@
[\fontstylelist]
{\dodefineunknownbodyfont{#1}}%
\ifdone
- \donefalse
+ \donefalse
\setvalue{\@size@#1}{\docompletefontswitch[#1]}%
\ifdefiningunknownfont \else
\definingunknownfonttrue
@@ -1702,23 +1734,6 @@
%D Fonts are not loaded yet! This means that at format
%D generation time, no font files are preloaded.
-%D A previous implementation used:
-%D
-%D \starttyping
-%D \type {\setvalue{name}{\donottest...}}
-%D \stoptyping
-%D
-%D instead of the more memory hungry:
-%D
-%D \starttyping
-%D \unexpanded\setvalue{name}{...}
-%D \stoptyping
-%D
-%D The first alternative saves about 500 hash entries (about
-%D 2.5\% of the total number of entries used. The second
-%D alternative is currently used, because that one can more
-%D easily be made \ETEX\ aware.
-
%D \macros
%D {everybodyfont,Everybodyfont,everyglobalbodyfont}
%D
@@ -1762,15 +1777,6 @@
\newdimen\bodyfontsize \bodyfontsize=\globalbodyfontsize
%D \macros
-%D {outputresolution}
-%D
-%D Sometimes (to be honest: not in this module) we need to
-%D take the system resolution into account. Therefore we also
-%D define a macro:
-
-\def\outputresolution {600}
-
-%D \macros
%D {bodyfontfactor,bodyfontpoints}
%D
%D For multiplication purposes we keep an auxiliary counter
@@ -1787,34 +1793,24 @@
\chardef\fontdigits=2 % was 1
-\def\normalizebodyfontsize#1\to#2%
- {\@EA\@EA\@EA\donormalizedbodyfontsize\@EA\WITHOUTPT\the\dimexpr#1+\ifcase\fontdigits.5\or.05\or.005\fi\points\relax000\to#2}
-
-\def\donormalizedbodyfontsize#1.#2#3#4#5\to#6% \points ?
- {\edef#6% not \ifcase#2\else due to \relax adding
- {#1%
- \ifcase\fontdigits
- \or \ifcase#2 \else .#2\fi % 1
- \or \ifcase#2#3 \else .#2\ifcase#3 \else #3\fi\fi % 2
- \else \ifcase#2#3#4 \else .#2\ifcase#4 \ifcase#3 \else#3\fi \else#3#4\fi\fi % 3
- \fi
- \s!pt}}
-
-% not faster, just less tracing
-%
-% \def\setfontdigits#1%
-% {\chardef\fontdigits\ifnum#1>\plusthree\plusthree\else#1\fi\relax
-% \@EA\let\@EA\normalizedbfs\csname normalizedbfs\number\fontdigits\endcsname}
-%
% \def\normalizebodyfontsize#1\to#2%
-% {\@EA\@EA\@EA\normalizedbfs\@EA\WITHOUTPT\the\dimexpr#1+\ifcase\fontdigits.5\or.05\or.005\fi\points\relax000\to#2}
-%
-% \setvalue{normalizedbfs0}#1.#2\to #3{\edef#3{#1\s!pt}}
-% \setvalue{normalizedbfs1}#1.#2#3\to #4{\edef#4{#1\ifcase#2 \else.#2\fi\s!pt}}
-% \setvalue{normalizedbfs2}#1.#2#3#4\to #5{\edef#5{#1\ifcase#2#3 \else.#2\ifcase#3 \else#3\fi\fi\s!pt}}
-% \setvalue{normalizedbfs3}#1.#2#3#4#5\to#6{\edef#6{#1\ifcase#2#3#4 \else.#2\ifcase#4 \ifcase#3 \else#3\fi\else#3#4\fi\fi\s!pt}}
+% {\@EA\@EA\@EA\donormalizedbodyfontsize\@EA\WITHOUTPT\the\dimexpr#1+\ifcase\fontdigits.5\or.05\or.005\fi\points\relax000\to#2}
%
-% \setfontdigits2
+% \def\donormalizedbodyfontsize#1.#2#3#4#5\to#6% \points ?
+% {\edef#6% not \ifcase#2\else due to \relax adding
+% {#1%
+% \ifcase\fontdigits
+% \or \ifcase#2 \else .#2\fi % 1
+% \or \ifcase#2#3 \else .#2\ifcase#3 \else #3\fi\fi % 2
+% \else \ifcase#2#3#4 \else .#2\ifcase#4 \ifcase#3 \else#3\fi \else#3#4\fi\fi % 3
+% \fi
+% \s!pt}}
+
+\def\normalizebodyfontsize#1\to#2%
+ {\edef#2{\ctxlua{fonts.nbfs(\number\dimexpr#1\relax,\number\fontdigits)}}}
+
+\def\thenormalizedbodyfontsize#1%
+ {\ctxlua{fonts.nbfs(\number\dimexpr#1\relax,\number\fontdigits)}}
\normalizebodyfontsize\bodyfontsize\to\normalizedglobalbodyfontsize
\normalizebodyfontsize\bodyfontsize\to\normalizedlocalbodyfontsize
@@ -2069,9 +2065,57 @@
\def\registerfontclass#1%
{\letgvalue{\@fontclass@#1}\v!yes} % global ?
+\edef\@no@fontclass@{\@fontclass@:?:}
+
\def\setcurrentfontclass#1%
{\ifcsname\@fontclass@#1\endcsname
\edef\fontclass{#1}%
+ \else\ifcsname\@no@fontclass@#1\endcsname
+ % already tried
+ \else\ifcase\currentgrouplevel
+ \trycurrentfontclass{#1}%
+ \fi\fi\fi}
+
+\def\savefontclassparameters#1#2#3#4% #1=rm|ss|.. rscale features fallbacks
+ {\setxvalue{\fontclass#1\s!rscale }{#2}%
+ \setxvalue{\fontclass#1\s!features }{#3}%
+ \setxvalue{\fontclass#1\s!fallbacks}{#4}}
+
+\settrue\autotypescripts
+
+% \def\trycurrentfontclass#1%
+% {\ifconditional\autotypescripts
+% \usetypescript[#1]%
+% \ifcsname\@fontclass@#1\endcsname
+% \edef\fontclass{#1}%
+% \else
+% \letvalue{\@no@fontclass@#1}\empty
+% \fi
+% \else
+% \letvalue{\@no@fontclass@#1}\empty
+% \fi}
+
+\def\trycurrentfontclass#1%
+ {\ifconditional\autotypescripts
+ % try to load typescript #1
+ \usetypescript[#1]%
+ \ifcsname\@fontclass@#1\endcsname
+ \edef\fontclass{#1}%
+ \else
+ % try to load type-#1.mkiv
+ \usetypescriptfile[\f!typeprefix#1]%
+ % try to load typescript #1
+ \usetypescript[#1]%
+ \ifcsname\@fontclass@#1\endcsname
+ \edef\fontclass{#1}%
+ \else
+ % todo: message
+ \letvalue{\@no@fontclass@#1}\empty
+ \fi
+ \fi
+ \else
+ % todo: message
+ \letvalue{\@no@fontclass@#1}\empty
\fi}
\let\defaultfontstyle \c!rm
@@ -2211,48 +2255,6 @@
\let\fontstrategy\relax
-% \def\synchronizefont
-% {\tryingfonttrue
-% \ifx\fontclass\empty\else
-% \global\let\fontstrategy\dofontclassstrategy
-% \the\fontstrategies \relax % \relax still needed ?
-% \fi
-% \iftryingfont
-% \global\let\fontstrategy\dofontstrategy
-% \the\fontstrategies \relax % \relax still needed ?
-% \fi
-% \autofontsizefalse
-% \ifskipfontcharacteristics
-% \setfontcharacteristics
-% \the\everyfontswitch
-% \fi}
-
-% \def\dofontstrategy#1#2#3#4#5%
-% {\ifcsname#2#3#4#5\endcsname
-% #1\csname#2#3#4#5\endcsname \tryingfontfalse
-% \fi}
-
-% \def\dofontclassstrategy#1#2#3#4#5%
-% {\ifcsname\fontclass#2#3#4#5\endcsname
-% #1\csname\fontclass#2#3#4#5\endcsname \tryingfontfalse
-% \fi}
-
-% \def\synchronizefont % we can have dups i.e. no need to let fontstrategy
-% {\tryingfonttrue
-% \ifx\fontclass\empty\else
-% \global\let\fontstrategy\dofontclassstrategy
-% \applyfontstrategies
-% \fi
-% \iftryingfont
-% \global\let\fontstrategy\dofontstrategy
-% \applyfontstrategies
-% \fi
-% \autofontsizefalse
-% \ifskipfontcharacteristics
-% \setfontcharacteristics
-% \the\everyfontswitch
-% \fi}
-
\def\synchronizefont % we can have dups i.e. no need to let fontstrategy
{\tryingfonttrue
\ifx\fontclass\empty
@@ -2266,69 +2268,6 @@
\the\everyfontswitch
\fi}
-% \appendtoks \iftryingfont \fontstrategy \autofontsizefalse % --- --- --- --- % pt tt bf a
-% \fontbody \fontstyle \fontalternative \fontsize
-% \fi \to \fontstrategies
-%
-% \appendtoks \iftryingfont \fontstrategy \autofontsizetrue % --- --- --- def % pt tt bf
-% \fontbody \fontstyle \fontalternative \defaultfontsize
-% \fi \to \fontstrategies
-%
-% \appendtoks \iftryingfont \fontstrategy \autofontsizetrue % --- --- def --- % pt tt tf a
-% \fontbody \fontstyle \defaultfontalternative \fontsize
-% \fi \to \fontstrategies
-%
-% \appendtoks \iftryingfont \fontstrategy \autofontsizetrue % --- --- def def % pt tt tf
-% \fontbody \fontstyle \defaultfontalternative \defaultfontsize
-% \fi \to \fontstrategies
-%
-% \appendtoks \iftryingfont \fontstrategy \autofontsizefalse % --- def def def % pt rm tf
-% \fontbody \defaultfontstyle \defaultfontalternative \defaultfontsize
-% \fi \to \fontstrategies
-%
-% \appendtoks \iftryingfont \fontstrategy \autofontsizetrue % def def def def % rm tf
-% \defaultfontbody \defaultfontstyle \defaultfontalternative \defaultfontsize
-% \fi \to \fontstrategies
-
-% \def\fontstrategiesa % --- --- --- --- % pt tt bf a
-% {\fontstrategy \autofontsizefalse \fontbody \fontstyle \fontalternative \fontsize
-% \iftryingfont \fontstrategiesb \fi}
-% \def\fontstrategiesb % --- --- --- def % pt tt bf
-% {\fontstrategy \autofontsizetrue \fontbody \fontstyle \fontalternative \defaultfontsize
-% \iftryingfont \fontstrategiesc \fi}
-% \def\fontstrategiesc % --- --- def --- % pt tt tf a
-% {\fontstrategy \autofontsizetrue \fontbody \fontstyle \defaultfontalternative \fontsize
-% \iftryingfont \fontstrategiesd \fi}
-% \def\fontstrategiesd % --- --- def def % pt tt tf
-% {\fontstrategy \autofontsizetrue \fontbody \fontstyle \defaultfontalternative \defaultfontsize
-% \iftryingfont \fontstrategiese \fi}
-% \def\fontstrategiese % --- def def def % pt rm tf
-% {\fontstrategy \autofontsizefalse \fontbody \defaultfontstyle \defaultfontalternative \defaultfontsize
-% \iftryingfont \fontstrategiesf \fi}
-% \def\fontstrategiesf % def def def def % rm tf
-% {\fontstrategy \autofontsizetrue \defaultfontbody \defaultfontstyle \defaultfontalternative \defaultfontsize}
-
-% \fontstrategies {\fontstrategiesa}
-% \let\applyfontstrategies\fontstrategiesa
-
-% \def\fontclassstrategiesa % --- --- --- --- % pt tt bf a
-% {\dofontclassstrategy \autofontsizefalse \fontbody \fontstyle \fontalternative \fontsize
-% \iftryingfont \fontclassstrategiesb \fi}
-% \def\fontclassstrategiesb % --- --- --- def % pt tt bf
-% {\dofontclassstrategy \autofontsizetrue \fontbody \fontstyle \fontalternative \defaultfontsize
-% \iftryingfont \fontclassstrategiesc \fi}
-% \def\fontclassstrategiesc % --- --- def --- % pt tt tf a
-% {\dofontclassstrategy \autofontsizetrue \fontbody \fontstyle \defaultfontalternative \fontsize
-% \iftryingfont \fontclassstrategiesd \fi}
-% \def\fontclassstrategiesd % --- --- def def % pt tt tf
-% {\dofontclassstrategy \autofontsizetrue \fontbody \fontstyle \defaultfontalternative \defaultfontsize
-% \iftryingfont \fontclassstrategiese \fi}
-% \def\fontclassstrategiese % --- def def def % pt rm tf
-% {\dofontclassstrategy \autofontsizefalse \fontbody \defaultfontstyle \defaultfontalternative \defaultfontsize
-% \iftryingfont \fontclassstrategiesf \fi}
-% \def\fontclassstrategiesf % def def def def % rm tf
-% {\dofontclassstrategy \autofontsizetrue \defaultfontbody \defaultfontstyle \defaultfontalternative \defaultfontsize}
-
\def\fontclassstrategiesa % --- --- --- --- % pt tt bf a
{\ifcsname\fontclass\fontbody \fontstyle \fontalternative \fontsize\endcsname
\autofontsizefalse
@@ -2379,24 +2318,6 @@
% no class
-% \def\fontstrategiesa % --- --- --- --- % pt tt bf a
-% {\dofontstrategy \autofontsizefalse \fontbody \fontstyle \fontalternative \fontsize
-% \iftryingfont \fontstrategiesb \fi}
-% \def\fontstrategiesb % --- --- --- def % pt tt bf
-% {\dofontstrategy \autofontsizetrue \fontbody \fontstyle \fontalternative \defaultfontsize
-% \iftryingfont \fontstrategiesc \fi}
-% \def\fontstrategiesc % --- --- def --- % pt tt tf a
-% {\dofontstrategy \autofontsizetrue \fontbody \fontstyle \defaultfontalternative \fontsize
-% \iftryingfont \fontstrategiesd \fi}
-% \def\fontstrategiesd % --- --- def def % pt tt tf
-% {\dofontstrategy \autofontsizetrue \fontbody \fontstyle \defaultfontalternative \defaultfontsize
-% \iftryingfont \fontstrategiese \fi}
-% \def\fontstrategiese % --- def def def % pt rm tf
-% {\dofontstrategy \autofontsizefalse \fontbody \defaultfontstyle \defaultfontalternative \defaultfontsize
-% \iftryingfont \fontstrategiesf \fi}
-% \def\fontstrategiesf % def def def def % rm tf
-% {\dofontstrategy \autofontsizetrue \defaultfontbody \defaultfontstyle \defaultfontalternative \defaultfontsize}
-
\def\fontstrategiesa % --- --- --- --- % pt tt bf a
{\ifcsname\fontbody \fontstyle \fontalternative \fontsize\endcsname
\autofontsizefalse
@@ -2562,7 +2483,7 @@
\setvalue{\@style@##1}{\csname#2\endcsname}}%
\processcommalist[#1]\docommand}
-\def\definefontstyle
+\unexpanded\def\definefontstyle
{\dodoubleargument\dodefinefontstyle}
\def\setfontstyle#1#2% #1:name (roman, romaan) #2:style (rm)
@@ -2570,29 +2491,6 @@
\checkfontnamecombinations
\setcurrentfontstyle\normalizedbodyfontsize}
-%D The previous macros show that it's is not always
-%D neccessary to define the whole bunch of fonts, take for
-%D instance the sequence:
-%D
-%D \starttyping
-%D \setupbodyfont
-%D [ams]
-%D
-%D \definebodyfont [24pt] [mm]
-%D [ma=msam10 at 24pt,
-%D mb=msbm10 at 24pt]
-%D
-%D \switchtobodyfont
-%D [24pt]
-%D
-%D This is a 24pt $\blacktriangleleft$
-%D \stoptyping
-%D
-%D Here we didn't define the 24 point bodyfont environment, so
-%D it's defined automatically. Of course one can always use the
-%D \TEX\ primitive \type{\font} to switch to whatever font
-%D needed.
-
%D When asking for a complete font switch, for instance from 10
%D to 12~points, the next macro does the job. First we
%D normalize the size, next we define the current range of
@@ -2623,7 +2521,7 @@
%D and/or options defined in files, for example:
%D
%D \starttyping
-%D \setupbodyfont[cmr,ams,12pt,roman]
+%D \setupbodyfont[modern,12pt,roman]
%D \stoptyping
%D
%D This command affects the document as a whole: text, headers
@@ -2644,6 +2542,9 @@
\ifx\saveinterlinespace \undefined \let\saveinterlinespace \relax \fi
\ifx\restoreinterlinespace\undefined \let\restoreinterlinespace\relax \fi
+% \newtoks \everysetupbodyfont
+% \newtoks \everyswitchtobodyfont
+
\chardef\bodyfontsetstate=0
\definecomplexorsimple\setupbodyfont
@@ -2662,7 +2563,8 @@
\the\everybodyfont
\the\everyglobalbodyfont
\saveinterlinespace
- \fi}}
+ \fi
+ \the\everysetupbodyfont}}
\unexpanded\def\switchtobodyfont[#1]%
{\doifsomething{#1}
@@ -2671,7 +2573,8 @@
\else
\dosetfont0{#1}%
\fi
- \the\everybodyfont}} % indeed needed in case nothing is executed
+ \the\everybodyfont
+ \the\everyswitchtobodyfont}}
%D The following alternative is meant for math||to||text
%D switching and will be optimized.
@@ -2709,27 +2612,32 @@
%D Experimental:
-\def\definefontfeature
+\unexpanded\def\definefontfeature
{\dotripleargument\dodefinefontfeature}
\def\dodefinefontfeature[#1][#2][#3]%
- {\global\expandafter\chardef\csname\??fq=#1\endcsname
- \ctxlua{tex.write(fonts.define.specify.preset_context("#1","#2","#3"))}\relax}
+ {\global\expandafter\chardef\csname\??fq=#1\endcsname % beware () needed as we get two values returned
+ \ctxlua{tex.write((fonts.define.specify.preset_context("#1","#2","#3")))}\relax}
\definefontfeature
[default]
- [%mode=node,%
+ [%mode=node,
liga=yes,kern=yes,tlig=yes,trep=yes] % texligatures=yes,texquotes=yes
\definefontfeature
[smallcaps]
- [%mode=node,%
- liga=yes,kern=yes,tlig=yes,trep=yes,smcp=yes] % texligatures=yes,texquotes=yes
+ [%mode=node,liga=yes,
+ smcp=yes,kern=yes,tlig=yes,trep=yes] % texligatures=yes,texquotes=yes
\definefontfeature
[oldstyle]
- [%mode=node,%
- liga=yes,kern=yes,tlig=yes,trep=yes,onum=yes] % texligatures=yes,texquotes=yes
+ [%mode=node,
+ onum=yes,liga=yes,kern=yes,tlig=yes,trep=yes] % texligatures=yes,texquotes=yes
+
+\definefontfeature % == default unless redefined
+ [ligatures]
+ [%mode=node,
+ liga=yes,kern=yes,tlig=yes,trep=yes]
\definefontfeature % can be used for type1 fonts
[complete]
@@ -2744,7 +2652,7 @@
\definefontfeature
[none]
- [mode=none,features=off]
+ [mode=none,features=no]
\definefontfeature
[virtualmath]
@@ -2764,11 +2672,12 @@
% \definefontfeature[mathscript] [math-script]
% \definefontfeature[mathscriptscript] [math-scriptscript]
-%D Also new:
+%D Also new, handy for manuals:
-% handy for manuals
+\unexpanded\def\fontchar#1{\ctxlua{fonts.char("#1")}}
-\def\otfchar#1{\ctxlua{fonts.otf.char("#1")}}
+\let\otfchar\fontchar % will disappear, for compatibility only
+\let\afmchar\fontchar % will disappear, for compatibility only
%D: We cannot yet inherit because no colors are predefined.
@@ -2818,10 +2727,10 @@
\def\setfontfeature #1{\edef\currentfeature{#1}\attribute\zerocount\featureattribute{#1}\relax}
\def\resetfontfeature#1{\let\currentfeature\empty\attribute\zerocount\zerocount} % initial value
-\def\addfontfeaturetoset #1{\ctxlua{fonts.withset("#1", 1)}}
-\def\subtractfontfeaturefromset #1{\ctxlua{fonts.withset("#1",-1)}}
-\def\addfontfeaturetofont #1{\ctxlua{fonts.withfnt("#1", 2)}}
-\def\subtractfontfeaturefromfont#1{\ctxlua{fonts.withfnt("#1",-2)}}
+\def\addfontfeaturetoset #1{\ctxlua{fonts.withset("#1", 1)}} % merge
+\def\subtractfontfeaturefromset #1{\ctxlua{fonts.withset("#1",-1)}} % merge
+\def\addfontfeaturetofont #1{\ctxlua{fonts.withfnt("#1", 2)}} % overload
+\def\subtractfontfeaturefromfont#1{\ctxlua{fonts.withfnt("#1",-2)}} % overload
\let\setff\setfontfeature
\let\addfs\addfontfeaturetoset
@@ -2832,13 +2741,7 @@
%D The next auxilliary macro is an alternative to \type
%D {\fontname}.
-% \def\purefontname#1{\expandafter\splitoffpurefontname\fontname#1 \\}
-%
-% extra level is needed:
-
-\def\purefontname#1{\@EA\splitoffpurefontname\@EA{\@EA{\@EA\unstringed\fontname#1}} \\}
-
-\def\splitoffpurefontname#1 #2\\{#1}
+\def\purefontname#1{\ctxlua{file.basename("\fontname#1"}} % will be function using id
%D \macros
%D {switchstyleonly}
@@ -2872,9 +2775,9 @@
[mode=node,onum=yes]
% \def\sc{\setfontfeature{smallcaps}}
-\def\os{\setfontfeature{just-os}}
+\unexpanded\def\os{\setfontfeature{just-os}}
-%D Code for swithcing to fraktur and script has also been
+%D Code for switching to fraktur and script has also been
%D changed. We now have an alphabet switcher.
\ifx\mathtext\undefined \let\mathtext\hbox \fi
@@ -2897,7 +2800,7 @@
{\def\docommand##1{\setvalue{##1}{\switchtobodyfont[#2]}}%
\processcommalist[#1]\docommand}
-\def\definebodyfontswitch
+\unexpanded\def\definebodyfontswitch
{\dodoubleargument\dodefinebodyfontswitch}
%D \macros
@@ -2955,6 +2858,8 @@
\chardef\currentxfontsize\zerocount
\redoconvertfont
\tf
+ \the\everybodyfont % indeed needed
+ \the\everyglobalbodyfont % indeed needed
\saveinterlinespace}
\def\restoreglobalbodyfont % ook style etc
@@ -3036,15 +2941,15 @@
\def\dodefinealternativestyle[#1][#2][#3]%
{\def\docommand##1%
- {\ifcsname##1\endcsname\else\setvalue{##1}{\groupedcommand{#2}{}}\fi
+ {\ifcsname##1\endcsname\else\setuvalue{##1}{\groupedcommand{#2}{}}\fi
\setvalue{\@letter@ ##1}{#2}%
\setvalue{\@noletter@##1}{#3}}%
\processcommalist[#1]\docommand}
-\def\definealternativestyle
+\unexpanded\def\definealternativestyle
{\dotripleempty\dodefinealternativestyle}
-\def\definestyle{\definealternativestyle}
+\unexpanded\def\definestyle{\definealternativestyle}
%D Maybe too geneneric, but probably ok is the following. (Maybe one
%D day we will use a dedicated grouped command for styles.)
@@ -3169,19 +3074,6 @@
%D or even better:
-% \def\doemphasistypeface#1#2% slow
-% {\doifelsevalue{\??ft\fontclass\normalizedbodyfontsize\c!em}\v!slanted
-% {#1}%
-% {\doifelsevalue{\??ft\fontclass\normalizedbodyfontsize\c!em}\v!italic
-% {#2}%
-% {\doifelsevaluenothing{\??ft\fontclass\normalizedbodyfontsize\c!em}
-% {\doifelsevalue{\??ft\normalizedbodyfontsize\c!em}\v!slanted
-% {#1}%
-% {\doifelsevalue{\??ft\normalizedbodyfontsize\c!em}\v!italic
-% {#2}%
-% {\getvalue{\??ft\normalizedbodyfontsize\c!em}}}}
-% {\getvalue{\??ft\fontclass\normalizedbodyfontsize\c!em}}}}}
-
\def\doemphasistypeface#1#2%
{\edef\emphasizedtypeface{\csname\??ft\fontclass\normalizedbodyfontsize\c!em\endcsname}%
\ifx\emphasizedtypeface\v!slanted
@@ -3248,7 +3140,7 @@
%D takes care of \type {\em \bf ...} sitiations.
\def\setemphasisboldface
- {\let\normalbf\bf
+ {\let\savedemphasisboldface\bf
\let\setemphasisboldface\relax
\unexpanded\def\bf
{%\relax
@@ -3258,9 +3150,9 @@
\else\ifx\fontalternative\c!sl
\bs
\else
- \normalbf
+ \savedemphasisboldface
\fi\fi
- \let\bf\normalbf}}
+ \let\bf\savedemphasisboldface}}
%D Donald's (adapted) macros take the next character into
%D account when placing italic correction. As a bonus we also
@@ -3274,18 +3166,6 @@
\expandafter\emphasislook
\fi}
-% \def\emphasislook
-% {\begingroup
-% \beginrobusttest
-% \futurelet\next\emphasistest}
-
-% \def\emphasistest
-% {\normalifcat\noexpand\next,%
-% \endrobusttest\expandafter\doemphasiscorrection
-% \normalelse
-% \endrobusttest\expandafter\dododoemphasiscorrection
-% \normalfi}
-
\def\emphasislook
{\begingroup
\futurelet\next\emphasistest}
@@ -3377,7 +3257,7 @@
%D some typing:
\def\setfont% geen \dosetfont mogelijk
- {\def\next{\nextfont\setupinterlinespace}%
+ {\def\next{\nextfont\setupinterlinespace}% hm, we need to use \setuplocalinterlinespace
\afterassignment\next\font\nextfont=}
%D One can call this macro as:
@@ -3404,7 +3284,7 @@
%D The implementation is rather straightforward in using
%D \type{\halign}.
-\fetchruntimecommand \showbodyfont {\f!fontprefix\s!run.mkii}
+\fetchruntimecommand \showbodyfont {\f!fontprefix\s!run.mkiv}
%D \macros
%D {showfontstrip, testminimalbaseline, showminimalbaseline}
@@ -3415,9 +3295,9 @@
%D
%D \showfontstrip \blank \showminimalbaseline
-\fetchruntimecommand \showfontstrip {\f!fontprefix\s!run.mkii}
-\fetchruntimecommand \testminimalbaseline {\f!fontprefix\s!run.mkii}
-\fetchruntimecommand \showminimalbaseline {\f!fontprefix\s!run.mkii}
+\fetchruntimecommand \showfontstrip {\f!fontprefix\s!run.mkiv}
+\fetchruntimecommand \testminimalbaseline {\f!fontprefix\s!run.mkiv}
+\fetchruntimecommand \showminimalbaseline {\f!fontprefix\s!run.mkiv}
%D \macros
%D {showkerning}
@@ -3426,7 +3306,7 @@
%D
%D \showkerning{Can you guess what kerning is?}
-\fetchruntimecommand \showkerning {\f!fontprefix\s!run.mkii}
+\fetchruntimecommand \showkerning {\f!fontprefix\s!run.mkiv}
%D \macros
%D {showbodyfontenvironment}
@@ -3439,7 +3319,7 @@
%D
%D \showsetup{showbodyfontenvironment}
-\fetchruntimecommand \showbodyfontenvironment {\f!fontprefix\s!run.mkii}
+\fetchruntimecommand \showbodyfontenvironment {\f!fontprefix\s!run.mkiv}
%D \macros
%D {showfont,showfontstyle,showligatures}
@@ -3455,11 +3335,11 @@
% to be internationalized
-\fetchruntimecommand \showfont {\f!fontprefix\s!run.mkii}
-\fetchruntimecommand \showfontstyle {\f!fontprefix\s!run.mkii}
-\fetchruntimecommand \showligature {\f!fontprefix\s!run.mkii}
-\fetchruntimecommand \showligatures {\f!fontprefix\s!run.mkii}
-\fetchruntimecommand \showcharratio {\f!fontprefix\s!run.mkii}
+\fetchruntimecommand \showfont {\f!fontprefix\s!run.mkiv}
+\fetchruntimecommand \showfontstyle {\f!fontprefix\s!run.mkiv}
+\fetchruntimecommand \showligature {\f!fontprefix\s!run.mkiv}
+\fetchruntimecommand \showligatures {\f!fontprefix\s!run.mkiv}
+\fetchruntimecommand \showcharratio {\f!fontprefix\s!run.mkiv}
%D \macros
%D {getglyph, symbolicfont}
@@ -3863,56 +3743,23 @@
%D \macros
%D {definefontvariant,fontvariant,variant}
%D
-%D A slightly adapted version of Adam Lindsays variant patches:
-%D
-%D \starttyping
-%D \usetypescriptfile[type-psc] \loadmapfile[texnansi-public-fpl]
-%D \usetypescript[palatino][texnansi] \setupbodyfont[palatino]
-%D
-%D \definefontvariant [Serif][osf] [OsF]
-%D
-%D \startlines
-%D {\sc abcdefgHIJKlmnop}
-%D 123{\Var[osf]456}789
-%D {\Var[osf] 123{\Var[reset]456}789}
-%D {\it 123{\Var[osf]456}789
-%D {\Var[osf]123{\Var[reset]456}789}}
-%D {\tfb\bf 123{\Var[osf]456}789
-%D {\Var[osf] 123{\Var[reset]456}789}}
-%D {\sc 123{\Var[osf]456}789
-%D {\Var[osf] 123{\Var[reset]456}789}}
-%D \stoplines
-%D \stoptyping
-
-\def\definefontvariant
- {\dotripleargument\dodefinefontvariant}
+%D This command is obsolete in \MKIV\ as we have features. It might
+%D come back using the local features handlers.
-\def\dodefinefontvariant[#1][#2][#3]%
- {\setvalue{\??fv#1#2}{#3}}
+\unexpanded\def\definefontvariant{\dotripleargument\dodefinefontvariant}
-\def\fontvariant#1#2{\executeifdefined{\??fv#1#2}\empty}
+\def\dodefinefontvariant[#1][#2][#3]{}
+\def\variant [#1]{}
-\def\dosetscaledfont
- {\checkrelativefontsize\fontstyle
- \scaledfontsize\currentfontscale\bodyfontsize
- \scaledfontsize\relativefontsize\scaledfontsize}
-
-\unexpanded\def\variant[#1]% slow
- {\dosetscaledfont
- \normalexpanded{\noexpand\definedfont[\fontstringA\fontstylesuffix\fontvariant\fontstringA{#1} at \the\dimexpr\scaledfontsize\relax]}%
- \ignoreimplicitspaces}
-
-\ifx\Var\undefined \let\Var\variant \fi
+\ifdefined\Var\else \let\Var\variant \fi
%D By default we load the Computer Modern Roman fonts (but
%D not yet at this moment) and activate the 12pt roman
%D bodyfont. Sans serif and teletype are also available and
-%D can be called for by \type{\ss} and \type{\tt}.
-
-% \setupbodyfont [unk, rm]
-% \setupbodyfont [rm]
-
-%D Also needed is:
+%D can be called for by \type{\ss} and \type{\tt}. Loading
+%D takes place elsewhere.
+%D
+%D For tracing purposes we define:
\definefont[tinyfont][Mono at 1ex]
@@ -3922,19 +3769,19 @@
%
% \setupfonts[check=...]
-\def\checkcharactersinfont {\ctxlua{fonts.checkers.enabled=true}}
-\def\removemissingcharacters{\ctxlua{fonts.checkers.enabled=true fonts.checkers.delete=true}}
+\def\checkcharactersinfont {\ctxlua{fonts.checkers.enable()}}
+\def\removemissingcharacters{\ctxlua{fonts.checkers.enable(true)}}
%D New commands (not yet interfaced):
\def\style[#1]% for inline usage, like \color
{\groupedcommand{\ifcsname#1\endcsname\csname#1\endcsname\else\definedfont[#1]\fi}{}}
-\def\startstyle[#1]%
+\unexpanded\def\startstyle[#1]%
{\begingroup
\ifcsname#1\endcsname\csname#1\endcsname\else\definedfont[#1]\fi}
-\def\stopstyle
+\unexpanded\def\stopstyle
{\endgroup}
%D Still experimental (might even go away).
@@ -3949,21 +3796,19 @@
% {\bf test \mine test \sl test \mine test \bs oeps \mine oeps {\tt test \mine \bf test}}
-\definesystemvariable{sx}
-
-\def\definestylecollection
+\unexpanded\def\definestylecollection
{\dosingleargument\dodefinestylecollection}
\def\dodefinestylecollection[#1]%
{\iffirstargument
- \unexpanded\setvalue{#1}{\styleinstance[#1]}%
+ \setuvalue{#1}{\styleinstance[#1]}%
\def\docommand##1%
{\def\dodocommand####1{\letbeundefined{\??sx##1:####1:\commalistelement}}%
\processcommacommand[\fontalternativelist,\s!default]\dodocommand}%
\processcommacommand[\fontstylelist,\s!default]\docommand
\fi}
-\def\definestyleinstance
+\unexpanded\def\definestyleinstance
{\doquadrupleargument\dodefinestyleinstance}
\def\dodefinestyleinstance[#1][#2][#3][#4]% [name] [rm|ss|tt|..] [sl|bf|...] [whatever]
@@ -4000,6 +3845,36 @@
% \fi\fi\fi\fi
% \endcsname}
+%D goodies:
+
+\def\showchardata#1{\ctxlua{fonts.show_char_data("#1")}}
+\def\showfontdata {\ctxlua{fonts.show_font_parameters()}}
+
+%D some low level helpers
+%D
+%D \starttyping
+%D \def\TestLookup#1%
+%D {\dolookupfontbyspec{#1}
+%D pattern: #1, found: \dolookupnoffound
+%D \blank
+%D \dorecurse {\dolookupnoffound} {%
+%D \recurselevel:~\dolookupgetkeyofindex{fontname}{\recurselevel}\quad
+%D }%
+%D \blank}
+%D
+%D \TestLookup{familyname=helveticaneue}
+%D \TestLookup{familyname=helveticaneue,weight=bold}
+%D \TestLookup{familyname=helveticaneue,weight=bold,style=italic}
+%D \stoptyping
+
+% we can also move the lookups to the fonts.namespace (of commands)
+
+\def\dolookupfontbyspec #1{\ctxlua{fonts.names.lookup("#1")}}
+\def\dolookupnoffound {\ctxlua{tex.write(fonts.names.noflookups())}}
+\def\dolookupgetkeyofindex#1#2{\ctxlua{tex.write(fonts.names.getlookupkey("#1",#2))}}
+\def\dolookupgetkey #1{\ctxlua{tex.write(fonts.names.getlookupkey("#1"))}}
+\def\cleanfontname #1{\ctxlua{fonts.cleanname("#1")}}
+
\protect \endinput
% \startluacode
diff --git a/Master/texmf-dist/tex/context/base/font-log.lua b/Master/texmf-dist/tex/context/base/font-log.lua
index af0b2552fb4..97cb4ff7c1a 100644
--- a/Master/texmf-dist/tex/context/base/font-log.lua
+++ b/Master/texmf-dist/tex/context/base/font-log.lua
@@ -1,6 +1,6 @@
if not modules then modules = { } end modules ['font-log'] = {
version = 1.001,
- comment = "companion to font-ini.tex",
+ comment = "companion to font-ini.mkiv",
author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
copyright = "PRAGMA ADE / ConTeXt Development Team",
license = "see context related readme files"
@@ -34,7 +34,7 @@ end
function fonts.logger.report(complete)
local t = { }
- for name, used in table.sortedpairs(fonts.used) do
+ for name, used in table.sortedhash(fonts.used) do
if complete then
t[#t+1] = used .. "->" .. file.basename(name)
else
diff --git a/Master/texmf-dist/tex/context/base/font-map.lua b/Master/texmf-dist/tex/context/base/font-map.lua
index c597d48552b..299508764a1 100644
--- a/Master/texmf-dist/tex/context/base/font-map.lua
+++ b/Master/texmf-dist/tex/context/base/font-map.lua
@@ -1,16 +1,20 @@
if not modules then modules = { } end modules ['font-map'] = {
version = 1.001,
- comment = "companion to font-ini.tex",
+ comment = "companion to font-ini.mkiv",
author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
copyright = "PRAGMA ADE / ConTeXt Development Team",
license = "see context related readme files"
}
-local match, format, find, concat = string.match, string.format, string.find, table.concat
+local utf = unicode.utf8
+local match, format, find, concat, gsub, lower = string.match, string.format, string.find, table.concat, string.gsub, string.lower
+local lpegmatch = lpeg.match
+local utfbyte = utf.byte
-local trace_loading = false trackers.register("otf.loading", function(v) trace_loading = v end)
+local trace_loading = false trackers.register("otf.loading", function(v) trace_loading = v end)
+local trace_unimapping = false trackers.register("otf.unimapping", function(v) trace_unimapping = v end)
-local ctxcatcodes = tex.ctxcatcodes
+local ctxcatcodes = tex and tex.ctxcatcodes
--[[ldx--
<p>Eventually this code will disappear because map files are kind
@@ -18,116 +22,10 @@ of obsolete. Some code may move to runtime or auxiliary modules.</p>
<p>The name to unciode related code will stay of course.</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("=",format('%s %s "%g SlantFont" <%s <%s',e.name,fullname,e.slant,e.encoding,e.fontfile))
- else
- return fonts.map.line.pdfmapline("=",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("=",format('%s %s "%g ExtendFont" <%s <%s',e.name,fullname,e.stretch,e.encoding,e.fontfile))
- else
- return fonts.map.line.pdfmapline("=",format('%s %s "%g ExtendFont" <%s',e.name,fullname,e.stretch,e.fontfile))
- end
- else
- if e.encoding then
- return fonts.map.line.pdfmapline("=",format('%s %s <%s <%s',e.name,fullname,e.encoding,e.fontfile))
- else
- return fonts.map.line.pdfmapline("=",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(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 gmatch(data,"(.-)[\n\t]") do
- if find(line,"^[%#%%%s]") then
- -- print(line)
- else
- local stretch, slant, name, fullname, fontfile, encoding
- line = line:gsub('"(.+)"', function(s)
- stretch = find(s,'"([^"]+) ExtendFont"')
- slant = find(s,'"([^"]+) SlantFont"')
- return ""
- end)
- if not name then
- -- name fullname encoding fontfile
- name, fullname, encoding, fontfile = match(line,"^(%S+)%s+(%S*)[%s<]+(%S*)[%s<]+(%S*)%s*$")
- end
- if not name then
- -- name fullname (flag) fontfile encoding
- name, fullname, fontfile, encoding = match(line,"^(%S+)%s+(%S*)[%d%s<]+(%S*)[%s<]+(%S*)%s*$")
- end
- if not name then
- -- name fontfile
- name, fontfile = match(line,"^(%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
+fonts = fonts or { }
+fonts.map = fonts.map or { }
-function fonts.map.load_lum_table(filename)
+local function load_lum_table(filename) -- will move to font goodies
local lumname = file.replacesuffix(file.basename(filename),"lum")
local lumfile = resolvers.find_file(lumname,"map") or ""
if lumfile ~= "" and lfs.isfile(lumfile) then
@@ -141,17 +39,19 @@ end
local hex = lpeg.R("AF","09")
local hexfour = (hex*hex*hex*hex) / function(s) return tonumber(s,16) end
-local dec = (lpeg.R("09")^1) / tonumber
+local hexsix = (hex^1) / function(s) return tonumber(s,16) end
+local dec = (lpeg.R("09")^1) / tonumber
local period = lpeg.P(".")
local unicode = lpeg.P("uni") * (hexfour * (period + lpeg.P(-1)) * lpeg.Cc(false) + lpeg.Ct(hexfour^1) * lpeg.Cc(true))
+local ucode = lpeg.P("u") * (hexsix * (period + lpeg.P(-1)) * lpeg.Cc(false) + lpeg.Ct(hexsix ^1) * lpeg.Cc(true))
local index = lpeg.P("index") * dec * lpeg.Cc(false)
-local parser = unicode + index
+local parser = unicode + ucode + index
local parsers = { }
-function fonts.map.make_name_parser(str)
+local function make_name_parser(str)
if not str or str == "" then
return parser
else
@@ -165,17 +65,20 @@ function fonts.map.make_name_parser(str)
end
--~ local parser = fonts.map.make_name_parser("Japan1")
+--~ local parser = fonts.map.make_name_parser()
--~ local function test(str)
---~ local b, a = parser:match(str)
+--~ local b, a = lpegmatch(parser,str)
--~ print((a and table.serialize(b)) or b)
--~ end
+--~ test("a.sc")
+--~ test("a")
--~ test("uni1234")
--~ test("uni1234.xx")
--~ test("uni12349876")
--~ test("index1234")
--~ test("Japan1.123")
-function fonts.map.tounicode16(unicode)
+local function tounicode16(unicode)
if unicode < 0x10000 then
return format("%04X",unicode)
else
@@ -183,7 +86,7 @@ function fonts.map.tounicode16(unicode)
end
end
-function fonts.map.tounicode16sequence(unicodes)
+local function tounicode16sequence(unicodes)
local t = { }
for l=1,#unicodes do
local unicode = unicodes[l]
@@ -216,3 +119,252 @@ end
--~ return s
--~ end
+fonts.map.load_lum_table = load_lum_table
+fonts.map.make_name_parser = make_name_parser
+fonts.map.tounicode16 = tounicode16
+fonts.map.tounicode16sequence = tounicode16sequence
+
+local separator = lpeg.S("_.")
+local other = lpeg.C((1 - separator)^1)
+local ligsplitter = lpeg.Ct(other * (separator * other)^0)
+
+--~ print(table.serialize(lpegmatch(ligsplitter,"this")))
+--~ print(table.serialize(lpegmatch(ligsplitter,"this.that")))
+--~ print(table.serialize(lpegmatch(ligsplitter,"japan1.123")))
+--~ print(table.serialize(lpegmatch(ligsplitter,"such_so_more")))
+--~ print(table.serialize(lpegmatch(ligsplitter,"such_so_more.that")))
+
+fonts.map.add_to_unicode = function(data,filename)
+ local unicodes = data.luatex and data.luatex.unicodes
+ if not unicodes then
+ return
+ end
+ -- we need to move this code
+ unicodes['space'] = unicodes['space'] or 32
+ unicodes['hyphen'] = unicodes['hyphen'] or 45
+ unicodes['zwj'] = unicodes['zwj'] or 0x200D
+ unicodes['zwnj'] = unicodes['zwnj'] or 0x200C
+ -- the tounicode mapping is sparse and only needed for alternatives
+ local tounicode, originals, ns, nl, private, unknown = { }, { }, 0, 0, fonts.private, format("%04X",utfbyte("?"))
+ data.luatex.tounicode, data.luatex.originals = tounicode, originals
+ local lumunic, uparser, oparser
+ if false then -- will become an option
+ lumunic = load_lum_table(filename)
+ lumunic = lumunic and lumunic.tounicode
+ end
+ local cidinfo, cidnames, cidcodes = data.cidinfo
+ local usedmap = cidinfo and cidinfo.usedname
+ usedmap = usedmap and lower(usedmap)
+ usedmap = usedmap and fonts.cid.map[usedmap]
+ if usedmap then
+ oparser = usedmap and make_name_parser(cidinfo.ordering)
+ cidnames = usedmap.names
+ cidcodes = usedmap.unicodes
+ end
+ uparser = make_name_parser()
+ local aglmap = fonts.map and fonts.map.agl_to_unicode
+ for index, glyph in next, data.glyphs do
+ local name, unic = glyph.name, glyph.unicode or -1 -- play safe
+ if unic == -1 or unic >= private or (unic >= 0xE000 and unic <= 0xF8FF) or unic == 0xFFFE or unic == 0xFFFF then
+ local unicode = (lumunic and lumunic[name]) or (aglmap and aglmap[name])
+ if unicode then
+ originals[index], tounicode[index], ns = unicode, tounicode16(unicode), ns + 1
+ end
+ -- cidmap heuristics, beware, there is no guarantee for a match unless
+ -- the chain resolves
+ if (not unicode) and usedmap then
+ local foundindex = lpegmatch(oparser,name)
+ if foundindex then
+ unicode = cidcodes[foundindex] -- name to number
+ if unicode then
+ originals[index], tounicode[index], ns = unicode, tounicode16(unicode), ns + 1
+ else
+ local reference = cidnames[foundindex] -- number to name
+ if reference then
+ local foundindex = lpegmatch(oparser,reference)
+ if foundindex then
+ unicode = cidcodes[foundindex]
+ if unicode then
+ originals[index], tounicode[index], ns = unicode, tounicode16(unicode), ns + 1
+ end
+ end
+ if not unicode then
+ local foundcodes, multiple = lpegmatch(uparser,reference)
+ if foundcodes then
+ if multiple then
+ originals[index], tounicode[index], nl, unicode = foundcodes, tounicode16sequence(foundcodes), nl + 1, true
+ else
+ originals[index], tounicode[index], ns, unicode = foundcodes, tounicode16(foundcodes), ns + 1, foundcodes
+ end
+ end
+ end
+ end
+ end
+ end
+ end
+ -- a.whatever or a_b_c.whatever or a_b_c (no numbers)
+ if not unicode then
+ local split = lpegmatch(ligsplitter,name)
+ local nplit = (split and #split) or 0
+ if nplit == 0 then
+ -- skip
+ elseif nplit == 1 then
+ local base = split[1]
+ unicode = unicodes[base] or (aglmap and aglmap[base])
+ if unicode then
+ if type(unicode) == "table" then
+ unicode = unicode[1]
+ end
+ originals[index], tounicode[index], ns = unicode, tounicode16(unicode), ns + 1
+ end
+ else
+ local t = { }
+ for l=1,nplit do
+ local base = split[l]
+ local u = unicodes[base] or (aglmap and aglmap[base])
+ if not u then
+ break
+ elseif type(u) == "table" then
+ t[#t+1] = u[1]
+ else
+ t[#t+1] = u
+ end
+ end
+ if #t > 0 then -- done then
+ originals[index], tounicode[index], nl, unicode = t, tounicode16sequence(t), nl + 1, true
+ end
+ end
+ end
+ -- last resort
+ if not unicode then
+ local foundcodes, multiple = lpegmatch(uparser,name)
+ if foundcodes then
+ if multiple then
+ originals[index], tounicode[index], nl, unicode = foundcodes, tounicode16sequence(foundcodes), nl + 1, true
+ else
+ originals[index], tounicode[index], ns, unicode = foundcodes, tounicode16(foundcodes), ns + 1, foundcodes
+ end
+ end
+ end
+ if not unicode then
+ originals[index], tounicode[index] = 0xFFFD, "FFFD"
+ end
+ end
+ end
+ if trace_unimapping then
+ for index, glyph in table.sortedhash(data.glyphs) do
+ local toun, name, unic = tounicode[index], glyph.name, glyph.unicode or -1 -- play safe
+ if toun then
+ logs.report("load otf","internal: 0x%05X, name: %s, unicode: 0x%05X, tounicode: %s",index,name,unic,toun)
+ else
+ logs.report("load otf","internal: 0x%05X, name: %s, unicode: 0x%05X",index,name,unic)
+ end
+ end
+ end
+ if trace_loading and (ns > 0 or nl > 0) then
+ logs.report("load otf","enhance: %s tounicode entries added (%s ligatures)",nl+ns, ns)
+ end
+end
+
+-- the following is sort of obsolete
+--
+-- fonts.map.data = fonts.map.data or { }
+-- fonts.map.encodings = fonts.map.encodings or { }
+-- fonts.map.loaded = fonts.map.loaded or { }
+-- fonts.map.line = fonts.map.line or { }
+--
+-- function fonts.map.line.pdftex(e)
+-- if e.name and e.fontfile then
+-- local fullname = e.fullname or ""
+-- if e.slant and e.slant ~= 0 then
+-- if e.encoding then
+-- pdf.mapline(format('= %s %s "%g SlantFont" <%s <%s',e.name,fullname,e.slant,e.encoding,e.fontfile)))
+-- else
+-- pdf.mapline(format('= %s %s "%g SlantFont" <%s',e.name,fullname,e.slant,e.fontfile)))
+-- end
+-- elseif e.extend and e.extend ~= 1 and e.extend ~= 0 then
+-- if e.encoding then
+-- pdf.mapline(format('= %s %s "%g ExtendFont" <%s <%s',e.name,fullname,e.extend,e.encoding,e.fontfile)))
+-- else
+-- pdf.mapline(format('= %s %s "%g ExtendFont" <%s',e.name,fullname,e.extend,e.fontfile)))
+-- end
+-- else
+-- if e.encoding then
+-- pdf.mapline(format('= %s %s <%s <%s',e.name,fullname,e.encoding,e.fontfile)))
+-- else
+-- pdf.mapline(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 next, fonts.map.data do
+-- 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 gmatch(data,"(.-)[\n\t]") do
+-- if find(line,"^[%#%%%s]") then
+-- -- print(line)
+-- else
+-- local extend, slant, name, fullname, fontfile, encoding
+-- line = gsub(line,'"(.+)"', function(s)
+-- extend = find(s,'"([^"]+) ExtendFont"')
+-- slant = find(s,'"([^"]+) SlantFont"')
+-- return ""
+-- end)
+-- if not name then
+-- -- name fullname encoding fontfile
+-- name, fullname, encoding, fontfile = match(line,"^(%S+)%s+(%S*)[%s<]+(%S*)[%s<]+(%S*)%s*$")
+-- end
+-- if not name then
+-- -- name fullname (flag) fontfile encoding
+-- name, fullname, fontfile, encoding = match(line,"^(%S+)%s+(%S*)[%d%s<]+(%S*)[%s<]+(%S*)%s*$")
+-- end
+-- if not name then
+-- -- name fontfile
+-- name, fontfile = match(line,"^(%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),
+-- extend = tonumber(extend)
+-- }
+-- 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-mis.lua b/Master/texmf-dist/tex/context/base/font-mis.lua
index cc20b97119a..80a56332aca 100644
--- a/Master/texmf-dist/tex/context/base/font-mis.lua
+++ b/Master/texmf-dist/tex/context/base/font-mis.lua
@@ -6,12 +6,12 @@ if not modules then modules = { } end modules ['font-mis'] = {
license = "see context related readme files"
}
-local next, pairs, ipairs = next, pairs, ipairs
+local next = next
local lower, strip = string.lower, string.strip
fonts.otf = fonts.otf or { }
-fonts.otf.version = fonts.otf.version or 2.628
+fonts.otf.version = fonts.otf.version or 2.650
fonts.otf.pack = true
fonts.otf.cache = containers.define("fonts", "otf", fonts.otf.version, true)
@@ -33,9 +33,11 @@ function fonts.otf.loadcached(filename,format,sub)
end
end
+local featuregroups = { "gsub", "gpos" }
+
function fonts.get_features(name,t,script,language)
local t = lower(t or (name and file.extname(name)) or "")
- if t == "otf" or t == "ttf" or t == "ttc" then
+ if t == "otf" or t == "ttf" or t == "ttc" or t == "dfont" then
local filename = resolvers.find_file(name,t) or ""
if filename ~= "" then
local data = fonts.otf.loadcached(filename)
@@ -47,20 +49,28 @@ function fonts.get_features(name,t,script,language)
local data = fontloader.to_table(ff)
fontloader.close(ff)
local features = { }
- for k, what in pairs { "gsub", "gpos" } do
+ for k=1,#featuregroups do
+ local what = featuregroups[k]
local dw = data[what]
if dw then
local f = { }
features[what] = f
- for _, d in ipairs(dw) do
- if d.features then
- for _, df in ipairs(d.features) do
+ for i=1,#dw do
+ local d = dw[i]
+ local dfeatures = d.features
+ if dfeatures then
+ for i=1,#dfeatures do
+ local df = dfeatures[i]
local tag = strip(lower(df.tag))
local ft = f[tag] if not ft then ft = {} f[tag] = ft end
- for _, ds in ipairs(df.scripts) do
+ local dfscripts = df.scripts
+ for i=1,#dfscripts do
+ local ds = dfscripts[i]
local scri = strip(lower(ds.script))
local fts = ft[scri] if not fts then fts = {} ft[scri] = fts end
- for _, lang in ipairs(ds.langs) do
+ local dslangs = ds.langs
+ for i=1,#dslangs do
+ local lang = dslangs[i]
lang = strip(lower(lang))
if scri == script then
if lang == language then
diff --git a/Master/texmf-dist/tex/context/base/font-ota.lua b/Master/texmf-dist/tex/context/base/font-ota.lua
index 72e7414c8af..0b61e17d1e0 100644
--- a/Master/texmf-dist/tex/context/base/font-ota.lua
+++ b/Master/texmf-dist/tex/context/base/font-ota.lua
@@ -35,10 +35,6 @@ local penalty = node.id('penalty')
local set_attribute = node.set_attribute
local has_attribute = node.has_attribute
local traverse_id = node.traverse_id
-local delete_node = nodes.delete
-local replace_node = nodes.replace
-local insert_node_after = node.insert_after
-local insert_node_before = node.insert_before
local traverse_node_list = node.traverse
local fontdata = fonts.ids
@@ -54,7 +50,6 @@ local a_to_language = otf.a_to_language
-- font related value, but then we also need dynamic features which is
-- somewhat slower; and .. we need a chain of them
-
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]
@@ -131,7 +126,8 @@ local isol_fina = {
[0x06D3] = true, [0x06D5] = true, [0x06EE] = true, [0x06EF] = true,
[0x0759] = true, [0x075A] = true, [0x075B] = true, [0x076B] = true,
[0x076C] = true, [0x0771] = true, [0x0773] = true, [0x0774] = true,
- [0x0778] = true, [0x0779] = true,
+ [0x0778] = true, [0x0779] = true, [0xFEF5] = true, [0xFEF7] = true,
+ [0xFEF9] = true, [0xFEFB] = true,
}
local isol_fina_medi_init = {
@@ -192,8 +188,6 @@ function fonts.analyzers.methods.nocolor(head,font,attr)
return head, true
end
-otf.remove_joiners = false -- true -- for idris who want it as option
-
local function finish(first,last)
if last then
if first == last then
@@ -239,22 +233,10 @@ function fonts.analyzers.methods.arab(head,font,attr) -- maybe make a special ve
local tfmdata = fontdata[font]
local marks = tfmdata.marks
local first, last, current, done = nil, nil, head, false
- local joiners, nonjoiners
- local removejoiners = tfmdata.remove_joiners -- or otf.remove_joiners
- if removejoiners then
- joiners, nonjoiners = { }, { }
- end
while current do
if current.id == glyph and current.subtype<256 and current.font == font and not has_attribute(current,state) then
done = true
local char = current.char
- if removejoiners then
- if char == zwj then
- joiners[#joiners+1] = current
- elseif char == zwnj then
- nonjoiners[#nonjoiners+1] = current
- end
- end
if marks[char] then
set_attribute(current,state,5) -- mark
if trace_analyzing then fcs(current,"font:mark") end
@@ -300,21 +282,5 @@ function fonts.analyzers.methods.arab(head,font,attr) -- maybe make a special ve
current = current.next
end
first, last = finish(first,last)
- if removejoiners then
- for i=1,#joiners do
- head = delete_node(head,joiners[i])
- end
- for i=1,#nonjoiners do
- head = replace_node(head,nonjoiners[i],nodes.glue(0)) -- or maybe a kern
- end
- end
return head, done
end
-
-table.insert(fonts.manipulators,"joiners")
-
-function fonts.initializers.node.otf.joiners(tfmdata,value)
- if value == "strip" then
- tfmdata.remove_joiners = true
- end
-end
diff --git a/Master/texmf-dist/tex/context/base/font-otb.lua b/Master/texmf-dist/tex/context/base/font-otb.lua
index a4606d31951..a3d347737c8 100644
--- a/Master/texmf-dist/tex/context/base/font-otb.lua
+++ b/Master/texmf-dist/tex/context/base/font-otb.lua
@@ -1,6 +1,6 @@
if not modules then modules = { } end modules ['font-otb'] = {
version = 1.001,
- comment = "companion to font-ini.tex",
+ comment = "companion to font-ini.mkiv",
author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
copyright = "PRAGMA ADE / ConTeXt Development Team",
license = "see context related readme files"
@@ -9,6 +9,7 @@ if not modules then modules = { } end modules ['font-otb'] = {
local concat = table.concat
local format, gmatch, gsub, find, match, lower, strip = string.format, string.gmatch, string.gsub, string.find, string.match, string.lower, string.strip
local type, next, tonumber, tostring = type, next, tonumber, tostring
+local lpegmatch = lpeg.match
local otf = fonts.otf
local tfm = fonts.tfm
@@ -69,7 +70,7 @@ local function resolve_ligatures(tfmdata,ligatures,kind)
for k,v in next, ligatures do
local lig = v[1]
if not done[lig] then
- local ligs = split_at_space:match(lig)
+ local ligs = lpegmatch(split_at_space,lig)
if #ligs == 2 then
local uc = v[2]
local c, f, s = characters[uc], ligs[1], ligs[2]
@@ -133,43 +134,12 @@ local function resolve_ligatures(tfmdata,ligatures,kind)
end
end
-local function collect_lookups(otfdata,kind,script,language)
- -- maybe store this in the font
- local sequences = otfdata.luatex.sequences
- if sequences then
- local featuremap, featurelist = { }, { }
- for s=1,#sequences do
- local sequence = sequences[s]
- local features = sequence.features
- features = features and features[kind]
- features = features and (features[script] or features[default] or features[wildcard])
- features = features and (features[language] or features[default] or features[wildcard])
- if features then
- local subtables = sequence.subtables
- if subtables then
- for s=1,#subtables do
- local ss = subtables[s]
- if not featuremap[s] then
- featuremap[ss] = true
- featurelist[#featurelist+1] = ss
- end
- end
- end
- end
- end
- if #featurelist > 0 then
- return featuremap, featurelist
- end
- end
- return nil, nil
-end
-
local splitter = lpeg.splitat(" ")
function prepare_base_substitutions(tfmdata,kind,value) -- we can share some code with the node features
if value then
local otfdata = tfmdata.shared.otfdata
- local validlookups, lookuplist = collect_lookups(otfdata,kind,tfmdata.script,tfmdata.language)
+ local validlookups, lookuplist = otf.collect_lookups(otfdata,kind,tfmdata.script,tfmdata.language)
if validlookups then
local ligatures = { }
local unicodes = tfmdata.unicodes -- names to unicodes
@@ -177,9 +147,84 @@ function prepare_base_substitutions(tfmdata,kind,value) -- we can share some cod
local characters = tfmdata.characters
local descriptions = tfmdata.descriptions
local changed = tfmdata.changed
+ --
+ local actions = {
+ substitution = function(p,lookup,k,glyph,unicode)
+ local pv = p[2] -- p.variant
+ if pv then
+ local upv = unicodes[pv]
+ if upv then
+ if type(upv) == "table" then
+ upv = upv[1]
+ end
+ if characters[upv] then
+ if trace_baseinit and trace_singles then
+ logs.report("define otf","%s: base substitution %s => %s",cref(kind,lookup),gref(descriptions,k),gref(descriptions,upv))
+ end
+ changed[k] = upv
+ end
+ end
+ end
+ end,
+ alternate = function(p,lookup,k,glyph,unicode)
+ local pc = p[2] -- p.components
+ if pc then
+ -- a bit optimized ugliness
+ if value == 1 then
+ pc = lpegmatch(splitter,pc)
+ elseif value == 2 then
+ local a, b = lpegmatch(splitter,pc)
+ pc = b or a
+ else
+ pc = { lpegmatch(splitter,pc) }
+ pc = pc[value] or pc[#pc]
+ end
+ if pc then
+ local upc = unicodes[pc]
+ if upc then
+ if type(upc) == "table" then
+ upc = upc[1]
+ end
+ if characters[upc] then
+ if trace_baseinit and trace_alternatives then
+ logs.report("define otf","%s: base alternate %s %s => %s",cref(kind,lookup),tostring(value),gref(descriptions,k),gref(descriptions,upc))
+ end
+ changed[k] = upc
+ end
+ end
+ end
+ end
+ end,
+ ligature = function(p,lookup,k,glyph,unicode)
+ local pc = p[2]
+ if pc then
+ if trace_baseinit and trace_ligatures then
+ local upc = { lpegmatch(splitter,pc) }
+ for i=1,#upc do upc[i] = unicodes[upc[i]] end
+ -- we assume that it's no table
+ logs.report("define otf","%s: base ligature %s => %s",cref(kind,lookup),gref(descriptions,upc),gref(descriptions,k))
+ end
+ ligatures[#ligatures+1] = { pc, k }
+ end
+ end,
+ }
+ --
for k,c in next, characters do
local glyph = descriptions[k]
- local lookups = glyph.lookups
+ local lookups = glyph.slookups
+ if lookups then
+ for l=1,#lookuplist do
+ local lookup = lookuplist[l]
+ local p = lookups[lookup]
+ if p then
+ local a = actions[p[1]]
+ if a then
+ a(p,lookup,k,glyph,unicode)
+ end
+ end
+ end
+ end
+ local lookups = glyph.mlookups
if lookups then
for l=1,#lookuplist do
local lookup = lookuplist[l]
@@ -187,62 +232,9 @@ function prepare_base_substitutions(tfmdata,kind,value) -- we can share some cod
if ps 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 then
- if type(upv) == "table" then
- upv = upv[1]
- end
- if characters[upv] then
- if trace_baseinit and trace_singles then
- logs.report("define otf","%s: base substitution %s => %s",cref(kind,lookup),gref(descriptions,k),gref(descriptions,upv))
- end
- changed[k] = upv
- end
- end
- end
- elseif t == 'alternate' then
- local pc = p[2] -- p.components
- if pc then
- -- a bit optimized ugliness
- if value == 1 then
- pc = splitter:match(pc)
- elseif value == 2 then
- local a, b = splitter:match(pc)
- pc = b or a
- else
- pc = { splitter:match(pc) }
- pc = pc[value] or pc[#pc]
- end
- if pc then
- local upc = unicodes[pc]
- if upc then
- if type(upc) == "table" then
- upc = upc[1]
- end
- if characters[upc] then
- if trace_baseinit and trace_alternatives then
- logs.report("define otf","%s: base alternate %s => %s",cref(kind,lookup),gref(descriptions,k),gref(descriptions,upc))
- end
- changed[k] = upc
- end
- end
- end
- end
- elseif t == 'ligature' and not changed[k] then
- local pc = p[2]
- if pc then
- if trace_baseinit and trace_ligatures then
- local upc = { splitter:match(pc) }
- for i=1,#upc do upc[i] = unicodes[upc[i]] end
- -- we assume that it's no table
- logs.report("define otf","%s: base ligature %s => %s",cref(kind,lookup),gref(descriptions,upc),gref(descriptions,k))
- end
- ligatures[#ligatures+1] = { pc, k }
- end
+ local a = actions[p[1]]
+ if a then
+ a(p,lookup,k,glyph,unicode)
end
end
end
@@ -259,37 +251,46 @@ end
local function prepare_base_kerns(tfmdata,kind,value) -- todo what kind of kerns, currently all
if value then
local otfdata = tfmdata.shared.otfdata
- local validlookups, lookuplist = collect_lookups(otfdata,kind,tfmdata.script,tfmdata.language)
+ local validlookups, lookuplist = otf.collect_lookups(otfdata,kind,tfmdata.script,tfmdata.language)
if validlookups then
local unicodes = tfmdata.unicodes -- names to unicodes
local indices = tfmdata.indices
local characters = tfmdata.characters
local descriptions = tfmdata.descriptions
+ local sharedkerns = { }
for u, chr in next, characters do
local d = descriptions[u]
if d then
- local dk = d.mykerns
+ local dk = d.mykerns -- shared
if dk then
- local t, done = chr.kerns or { }, false
- for l=1,#lookuplist do
- local lookup = lookuplist[l]
- local kerns = dk[lookup]
- if kerns then
- for k, v in next, kerns do
- if v ~= 0 and not t[k] then -- maybe no 0 test here
- t[k], done = v, true
- if trace_baseinit and trace_kerns then
- logs.report("define otf","%s: base kern %s + %s => %s",cref(kind,lookup),gref(descriptions,u),gref(descriptions,k),v)
+ local s = sharedkerns[dk]
+ if s == false then
+ -- skip
+ elseif s then
+ chr.kerns = s
+ else
+ local t, done = chr.kerns or { }, false
+ for l=1,#lookuplist do
+ local lookup = lookuplist[l]
+ local kerns = dk[lookup]
+ if kerns then
+ for k, v in next, kerns do
+ if v ~= 0 and not t[k] then -- maybe no 0 test here
+ t[k], done = v, true
+ if trace_baseinit and trace_kerns then
+ logs.report("define otf","%s: base kern %s + %s => %s",cref(kind,lookup),gref(descriptions,u),gref(descriptions,k),v)
+ end
end
end
end
end
+ if done then
+ sharedkerns[dk] = t
+ chr.kerns = t -- no empty assignments
+ else
+ sharedkerns[dk] = false
+ end
end
- if done then
- chr.kerns = t -- no empty assignments
- end
- -- elseif d.kerns then
- -- logs.report("define otf","%s: invalid mykerns for %s",cref(kind),gref(descriptions,u))
end
end
end
@@ -304,12 +305,13 @@ end
-- to do complete mixed runs and not run featurewise (as we did before).
local supported_gsub = {
- 'liga','dlig','rlig','hlig',
- 'pnum','onum','tnum','lnum',
+ 'liga', 'dlig', 'rlig', 'hlig',
+ 'pnum', 'onum', 'tnum', 'lnum',
'zero',
- 'smcp','cpsp','c2sc','ornm','aalt',
- 'hwid','fwid',
- 'ssty', -- math
+ 'smcp', 'cpsp', 'c2sc', 'ornm', 'aalt',
+ 'hwid', 'fwid',
+ 'ssty', 'rtlm', -- math
+-- 'tlig', 'trep',
}
local supported_gpos = {
diff --git a/Master/texmf-dist/tex/context/base/font-otc.lua b/Master/texmf-dist/tex/context/base/font-otc.lua
index f75da39cdab..357d347b18c 100644
--- a/Master/texmf-dist/tex/context/base/font-otc.lua
+++ b/Master/texmf-dist/tex/context/base/font-otc.lua
@@ -9,8 +9,6 @@ if not modules then modules = { } end modules ['font-otc'] = {
local format, insert = string.format, table.insert
local type, next = type, next
-local ctxcatcodes = tex.ctxcatcodes
-
-- we assume that the other otf stuff is loaded already
local trace_loading = false trackers.register("otf.loading", function(v) trace_loading = v end)
@@ -21,6 +19,8 @@ local tfm = fonts.tfm
-- instead of "script = "DFLT", langs = { 'dflt' }" we now use wildcards (we used to
-- have always); some day we can write a "force always when true" trick for other
-- features as well
+--
+-- we could have a tnum variant as well
local extra_lists = {
tlig = {
@@ -211,28 +211,3 @@ 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
-
--- bonus function
-
-function otf.name_to_slot(name) -- todo: afm en tfm
- local tfmdata = fonts.ids[font.current()]
- if tfmdata and tfmdata.shared then
- local otfdata = tfmdata.shared.otfdata
- local unicode = otfdata.luatex.unicodes[name]
- if type(unicode) == "number" then
- return unicode
- else
- return unicode[1]
- end
- end
- return nil
-end
-
-function otf.char(n) -- todo: afm en tfm
- if type(n) == "string" then
- n = otf.name_to_slot(n)
- end
- if n then
- tex.sprint(ctxcatcodes,format("\\char%s ",n))
- end
-end
diff --git a/Master/texmf-dist/tex/context/base/font-otd.lua b/Master/texmf-dist/tex/context/base/font-otd.lua
index 78a82814654..41e8853316c 100644
--- a/Master/texmf-dist/tex/context/base/font-otd.lua
+++ b/Master/texmf-dist/tex/context/base/font-otd.lua
@@ -1,6 +1,6 @@
if not modules then modules = { } end modules ['font-otd'] = {
version = 1.001,
- comment = "companion to font-ini.tex",
+ comment = "companion to font-ini.mkiv",
author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
copyright = "PRAGMA ADE / ConTeXt Development Team",
license = "see context related readme files"
diff --git a/Master/texmf-dist/tex/context/base/font-otf.lua b/Master/texmf-dist/tex/context/base/font-otf.lua
index e8867c53d37..9cecf21f055 100644
--- a/Master/texmf-dist/tex/context/base/font-otf.lua
+++ b/Master/texmf-dist/tex/context/base/font-otf.lua
@@ -1,6 +1,6 @@
if not modules then modules = { } end modules ['font-otf'] = {
version = 1.001,
- comment = "companion to font-ini.tex",
+ comment = "companion to font-ini.mkiv",
author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
copyright = "PRAGMA ADE / ConTeXt Development Team",
license = "see context related readme files"
@@ -11,6 +11,8 @@ local utf = unicode.utf8
local concat, getn, utfbyte = table.concat, table.getn, utf.byte
local format, gmatch, gsub, find, match, lower, strip = string.format, string.gmatch, string.gsub, string.find, string.match, string.lower, string.strip
local type, next, tonumber, tostring = type, next, tonumber, tostring
+local abs = math.abs
+local lpegmatch = lpeg.match
local trace_private = false trackers.register("otf.private", function(v) trace_private = v end)
local trace_loading = false trackers.register("otf.loading", function(v) trace_loading = v end)
@@ -18,13 +20,10 @@ local trace_features = false trackers.register("otf.features", function(v
local trace_dynamics = false trackers.register("otf.dynamics", function(v) trace_dynamics = v end)
local trace_sequences = false trackers.register("otf.sequences", function(v) trace_sequences = v end)
local trace_math = false trackers.register("otf.math", function(v) trace_math = v end)
-local trace_unimapping = false trackers.register("otf.unimapping", function(v) trace_unimapping = v end)
+local trace_defining = false trackers.register("fonts.defining", function(v) trace_defining = v end)
--~ trackers.enable("otf.loading")
-local zwnj = 0x200C
-local zwj = 0x200D
-
--[[ldx--
<p>The fontforge table has organized lookups in a certain way. A first implementation
of this code was organized featurewise: information related to features was
@@ -82,13 +81,16 @@ otf.features.default = otf.features.default or { }
otf.enhancers = otf.enhancers or { }
otf.glists = { "gsub", "gpos" }
-otf.version = 2.628 -- beware: also sync font-mis.lua
+otf.version = 2.650 -- beware: also sync font-mis.lua
otf.pack = true -- beware: also sync font-mis.lua
otf.syncspace = true
otf.notdef = false
otf.cache = containers.define("fonts", "otf", otf.version, true)
otf.cleanup_aat = false -- only context
+local wildcard = "*"
+local default = "dflt"
+
--[[ldx--
<p>We start with a lot of tables and related functions.</p>
--ldx]]--
@@ -104,6 +106,7 @@ otf.tables.global_fields = table.tohash {
"names",
"unicodes",
"names",
+--~ "math",
"anchor_classes",
"kern_classes",
"gpos",
@@ -176,7 +179,7 @@ otf.tables.valid_fields = {
local function load_featurefile(ff,featurefile)
if featurefile then
- featurefile = resolvers.find_file(file.addsuffix(featurefile,'fea')) -- "FONTFEATURES"
+ featurefile = resolvers.find_file(file.addsuffix(featurefile,'fea'),'fea')
if featurefile and featurefile ~= "" then
if trace_loading then
logs.report("load otf", "featurefile: %s", featurefile)
@@ -190,7 +193,7 @@ function otf.enhance(name,data,filename,verbose)
local enhancer = otf.enhancers[name]
if enhancer then
if (verbose ~= nil and verbose) or trace_loading then
- logs.report("load otf","enhance: %s",name)
+ logs.report("load otf","enhance: %s (%s)",name,filename)
end
enhancer(data,filename)
end
@@ -202,8 +205,10 @@ local enhancers = {
"patch bugs",
"merge cid fonts", "prepare unicode", "cleanup ttf tables", "compact glyphs", "reverse coverage",
"cleanup aat", "enrich with features", "add some missing characters",
+ "reorganize mark classes",
"reorganize kerns", -- moved here
"flatten glyph lookups", "flatten anchor tables", "flatten feature tables",
+ "simplify glyph lookups", -- some saving
"prepare luatex tables",
"analyse features", "rehash features",
"analyse anchors", "analyse marks", "analyse unicodes", "analyse subtables",
@@ -211,6 +216,7 @@ local enhancers = {
"share widths",
"strip not needed data",
"migrate metadata",
+ "check math parameters",
}
function otf.load(filename,format,sub,featurefile)
@@ -227,7 +233,7 @@ function otf.load(filename,format,sub,featurefile)
local data = containers.read(otf.cache(), hash)
local size = lfs.attributes(filename,"size") or 0
if not data or data.verbose ~= fonts.verbose or data.size ~= size then
- logs.report("load otf","loading: %s",filename)
+ logs.report("load otf","loading: %s (hash: %s)",filename,hash)
local ff, messages
if sub then
ff, messages = fontloader.open(filename,sub)
@@ -235,9 +241,15 @@ function otf.load(filename,format,sub,featurefile)
ff, messages = fontloader.open(filename)
end
if trace_loading and messages and #messages > 0 then
- for m=1,#messages do
- logs.report("load otf","warning: %s",messages[m])
+ if type(messages) == "string" then
+ logs.report("load otf","warning: %s",messages)
+ else
+ for m=1,#messages do
+ logs.report("load otf","warning: %s",tostring(messages[m]))
+ end
end
+ else
+ logs.report("load otf","font loaded okay")
end
if ff then
load_featurefile(ff,featurefile)
@@ -248,6 +260,7 @@ function otf.load(filename,format,sub,featurefile)
logs.report("load otf","enhancing ...")
for e=1,#enhancers do
otf.enhance(enhancers[e],data,filename)
+ io.flush() -- we want instant messages
end
if otf.pack and not fonts.verbose then
otf.enhance("pack",data,filename)
@@ -267,6 +280,9 @@ function otf.load(filename,format,sub,featurefile)
end
end
if data then
+ if trace_defining then
+ logs.report("define font","loading from cache: %s",hash)
+ end
otf.enhance("unpack",data,filename,false) -- no message here
otf.add_dimensions(data)
if trace_sequences then
@@ -354,6 +370,29 @@ end
-- todo: normalize, design_size => designsize
+otf.enhancers["reorganize mark classes"] = function(data,filename)
+ if data.mark_classes then
+ local unicodes = data.luatex.unicodes
+ local reverse = { }
+ for name, class in next, data.mark_classes do
+ local t = { }
+ for s in gmatch(class,"[^ ]+") do
+ local us = unicodes[s]
+ if type(us) == "table" then
+ for u=1,#us do
+ t[us[u]] = true
+ end
+ else
+ t[us] = true
+ end
+ end
+ reverse[name] = t
+ end
+ data.luatex.markclasses = reverse
+ data.mark_classes = nil
+ end
+end
+
otf.enhancers["prepare luatex tables"] = function(data,filename)
data.luatex = data.luatex or { }
local luatex = data.luatex
@@ -465,140 +504,7 @@ otf.enhancers["analyse marks"] = function(data,filename)
end
end
-local separator = lpeg.S("_.")
-local other = lpeg.C((1 - separator)^1)
-local ligsplitter = lpeg.Ct(other * (separator * other)^0)
-
---~ print(table.serialize(ligsplitter:match("this")))
---~ print(table.serialize(ligsplitter:match("this.that")))
---~ print(table.serialize(ligsplitter:match("japan1.123")))
---~ print(table.serialize(ligsplitter:match("such_so_more")))
---~ print(table.serialize(ligsplitter:match("such_so_more.that")))
-
-otf.enhancers["analyse unicodes"] = function(data,filename)
- local tounicode16, tounicode16sequence = fonts.map.tounicode16, fonts.map.tounicode16sequence
- local unicodes = data.luatex.unicodes
- -- we need to move this code
- unicodes['space'] = unicodes['space'] or 32 -- handly later on
- unicodes['hyphen'] = unicodes['hyphen'] or 45 -- handly later on
- unicodes['zwj'] = unicodes['zwj'] or zwj -- handly later on
- unicodes['zwnj'] = unicodes['zwnj'] or zwnj -- handly later on
- -- the tounicode mapping is sparse and only needed for alternatives
- local tounicode, originals, ns, nl, private, unknown = { }, { }, 0, 0, fonts.private, format("%04X",utfbyte("?"))
- data.luatex.tounicode, data.luatex.originals = tounicode, originals
- local lumunic, uparser, oparser
- if false then -- will become an option
- lumunic = fonts.map.load_lum_table(filename)
- lumunic = lumunic and lumunic.tounicode
- end
- local cidinfo, cidnames, cidcodes = data.cidinfo
- local usedmap = cidinfo and cidinfo.usedname
- usedmap = usedmap and fonts.cid.map[usedmap]
- if usedmap then
- oparser = usedmap and fonts.map.make_name_parser(cidinfo.ordering)
- cidnames = usedmap.names
- cidcodes = usedmap.unicodes
- end
- uparser = fonts.map.make_name_parser()
- for index, glyph in next, data.glyphs do
- local name, unic = glyph.name, glyph.unicode or -1 -- play safe
- if unic == -1 or unic >= private or (unic >= 0xE000 and unic <= 0xF8FF) or unic == 0xFFFE or unic == 0xFFFF then
- local unicode = lumunic and lumunic[name]
- if unicode then
- originals[index], tounicode[index], ns = unicode, tounicode16(unicode), ns + 1
- end
- -- cidmap heuristics, beware, there is no guarantee for a match unless
- -- the chain resolves
- if not unicode and usedmap then
- local foundindex = oparser:match(name)
- if foundindex then
- unicode = cidcodes[foundindex] -- name to number
- if not unicode then
- local reference = cidnames[foundindex] -- number to name
- if reference then
- local foundindex = oparser:match(reference)
- if foundindex then
- unicode = cidcodes[foundindex]
- if unicode then
- originals[index], tounicode[index], ns = unicode, tounicode16(unicode), ns + 1
- end
- end
- if not unicode then
- local foundcodes, multiple = uparser:match(reference)
- if foundcodes then
- if multiple then
- originals[index], tounicode[index], nl, unicode = foundcodes, tounicode16sequence(foundcodes), nl + 1, true
- else
- originals[index], tounicode[index], ns, unicode = foundcodes, tounicode16(foundcodes), ns + 1, foundcodes
- end
- end
- end
- end
- end
- end
- end
- -- a.whatever or a_b_c.whatever or a_b_c (no numbers)
- if not unicode then
- local split = ligsplitter:match(name)
- local nplit = (split and #split) or 0
- if nplit == 0 then
- -- skip
- elseif nplit == 1 then
- unicode = unicodes[split[1]]
- if unicode then
- if type(unicode) == "table" then
- unicode = unicode[1]
- end
- originals[index], tounicode[index], ns = unicode, tounicode16(unicode), ns + 1
- end
- else
- local done = true
- for l=1,nplit do
- local u = unicodes[split[l]]
- if not u then
- done = false
- break
- elseif type(u) == "table" then
- split[l] = u[1]
- else
- split[l] = u
- end
- end
- if done then
- originals[index], tounicode[index], nl, unicode = split, tounicode16sequence(split), nl + 1, true
- end
- end
- end
- -- last resort
- if not unicode then
- local foundcodes, multiple = uparser:match(name)
- if foundcodes then
- if multiple then
- originals[index], tounicode[index], nl, unicode = foundcodes, tounicode16sequence(foundcodes), nl + 1, true
- else
- originals[index], tounicode[index], ns, unicode = foundcodes, tounicode16(foundcodes), ns + 1, foundcodes
- end
- end
- end
- if not unicode then
- originals[index], tounicode[index] = 0xFFFD, "FFFD"
- end
- end
- end
- if trace_unimapping then
- for index, glyph in table.sortedpairs(data.glyphs) do
- local toun, name, unic = tounicode[index], glyph.name, glyph.unicode or -1 -- play safe
- if toun then
- logs.report("load otf","internal: 0x%05X, name: %s, unicode: 0x%05X, tounicode: %s",index,name,unic,toun)
- else
- logs.report("load otf","internal: 0x%05X, name: %s, unicode: 0x%05X",index,name,unic)
- end
- end
- end
- if trace_loading and (ns > 0 or nl > 0) then
- logs.report("load otf","enhance: %s tounicode entries added (%s ligatures)",nl+ns, ns)
- end
-end
+otf.enhancers["analyse unicodes"] = fonts.map.add_to_unicode
otf.enhancers["analyse subtables"] = function(data,filename)
data.luatex = data.luatex or { }
@@ -658,8 +564,11 @@ otf.enhancers["analyse subtables"] = function(data,filename)
(flags.ignorecombiningmarks and "mark") or false,
(flags.ignoreligatures and "ligature") or false,
(flags.ignorebaseglyphs and "base") or false,
- flags.r2l or false
+ flags.r2l or false,
}
+ if flags.mark_class then
+ gk.markclass = luatex.markclasses[flags.mark_class]
+ end
end
end
end
@@ -668,7 +577,10 @@ end
otf.enhancers["merge cid fonts"] = function(data,filename)
-- we can also move the names to data.luatex.names which might
-- save us some more memory (at the cost of harder tracing)
- if data.subfonts and table.is_empty(data.glyphs) then
+ if data.subfonts then
+ if data.glyphs and next(data.glyphs) then
+ logs.report("load otf","replacing existing glyph table due to subfonts")
+ end
local cidinfo = data.cidinfo
local verbose = fonts.verbose
if cidinfo.registry then
@@ -756,7 +668,7 @@ otf.enhancers["prepare unicode"] = function(data,filename)
end
end
end
- -- beware: the indeces table is used to initialize the tfm table
+ -- beware: the indices table is used to initialize the tfm table
for unicode, index in next, mapmap do
if not internals[index] then
local name = glyphs[index].name
@@ -952,6 +864,129 @@ end
-- kern: ttf has a table with kerns
+--~ otf.enhancers["reorganize kerns"] = function(data,filename)
+--~ local glyphs, mapmap, unicodes = data.glyphs, data.luatex.indices, data.luatex.unicodes
+--~ local mkdone = false
+--~ for index, glyph in next, data.glyphs do
+--~ if glyph.kerns then
+--~ local mykerns = { }
+--~ for k,v in next, 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 not uvc then
+--~ if trace_loading then
+--~ logs.report("load otf","problems with unicode %s of kern %s at glyph %s",vc,k,index)
+--~ end
+--~ else
+--~ if type(vl) ~= "table" then
+--~ vl = { vl }
+--~ end
+--~ for l=1,#vl do
+--~ local vll = vl[l]
+--~ local mkl = mykerns[vll]
+--~ if not mkl then
+--~ mkl = { }
+--~ mykerns[vll] = mkl
+--~ end
+--~ if type(uvc) == "table" then
+--~ for u=1,#uvc do
+--~ mkl[uvc[u]] = vo
+--~ end
+--~ else
+--~ mkl[uvc] = vo
+--~ end
+--~ end
+--~ end
+--~ end
+--~ end
+--~ glyph.mykerns = mykerns
+--~ glyph.kerns = nil -- saves space and time
+--~ mkdone = true
+--~ end
+--~ end
+--~ if trace_loading and mkdone then
+--~ logs.report("load otf", "replacing 'kerns' tables by 'mykerns' tables")
+--~ end
+--~ if data.kerns then
+--~ if trace_loading then
+--~ logs.report("load otf", "removing global 'kern' table")
+--~ end
+--~ data.kerns = nil
+--~ end
+--~ local dgpos = data.gpos
+--~ if dgpos then
+--~ for gp=1,#dgpos do
+--~ local gpos = dgpos[gp]
+--~ local subtables = gpos.subtables
+--~ if subtables then
+--~ for s=1,#subtables do
+--~ local subtable = subtables[s]
+--~ local kernclass = subtable.kernclass -- name is inconsistent with anchor_classes
+--~ if kernclass then -- the next one is quite slow
+--~ for k=1,#kernclass do
+--~ local kcl = kernclass[k]
+--~ local firsts, seconds, offsets, lookups = kcl.firsts, kcl.seconds, kcl.offsets, kcl.lookup -- singular
+--~ if type(lookups) ~= "table" then
+--~ lookups = { lookups }
+--~ end
+--~ for l=1,#lookups do
+--~ local lookup = lookups[l]
+--~ -- weird, as maxfirst and maxseconds can have holes
+--~ local maxfirsts, maxseconds = getn(firsts), getn(seconds)
+--~ if trace_loading then
+--~ logs.report("load otf", "adding kernclass %s with %s times %s pairs",lookup, maxfirsts, maxseconds)
+--~ end
+--~ for fk, fv in next, firsts do
+--~ for first in gmatch(fv,"[^ ]+") do
+--~ local first_unicode = unicodes[first]
+--~ if type(first_unicode) == "number" then
+--~ first_unicode = { first_unicode }
+--~ end
+--~ for f=1,#first_unicode do
+--~ local glyph = glyphs[mapmap[first_unicode[f]]]
+--~ if glyph then
+--~ 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 next, seconds do
+--~ local offset = offsets[(fk-1) * maxseconds + sk]
+--~ --~ local offset = offsets[sk] -- (fk-1) * maxseconds + sk]
+--~ for second in gmatch(sv,"[^ ]+") do
+--~ local second_unicode = unicodes[second]
+--~ if type(second_unicode) == "number" then
+--~ lookupkerns[second_unicode] = offset
+--~ else
+--~ for s=1,#second_unicode do
+--~ lookupkerns[second_unicode[s]] = offset
+--~ end
+--~ end
+--~ end
+--~ end
+--~ elseif trace_loading then
+--~ logs.report("load otf", "no glyph data for U+%04X", first_unicode[f])
+--~ end
+--~ 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
+
otf.enhancers["reorganize kerns"] = function(data,filename)
local glyphs, mapmap, unicodes = data.glyphs, data.luatex.indices, data.luatex.unicodes
local mkdone = false
@@ -1004,6 +1039,9 @@ otf.enhancers["reorganize kerns"] = function(data,filename)
end
local dgpos = data.gpos
if dgpos then
+ local separator = lpeg.P(" ")
+ local other = ((1 - separator)^0) / unicodes
+ local splitter = lpeg.Ct(other * (separator * other)^0)
for gp=1,#dgpos do
local gpos = dgpos[gp]
local subtables = gpos.subtables
@@ -1011,54 +1049,75 @@ otf.enhancers["reorganize kerns"] = function(data,filename)
for s=1,#subtables do
local subtable = subtables[s]
local kernclass = subtable.kernclass -- name is inconsistent with anchor_classes
- if kernclass then
+ if kernclass then -- the next one is quite slow
for k=1,#kernclass do
local kcl = kernclass[k]
local firsts, seconds, offsets, lookups = kcl.firsts, kcl.seconds, kcl.offsets, kcl.lookup -- singular
if type(lookups) ~= "table" then
lookups = { lookups }
end
+ local split = { }
for l=1,#lookups do
local lookup = lookups[l]
+ -- weird, as maxfirst and maxseconds can have holes, first seems to be indexed, seconds starts at 2
local maxfirsts, maxseconds = getn(firsts), getn(seconds)
+ for _, s in next, firsts do
+ split[s] = split[s] or lpegmatch(splitter,s)
+ end
+ for _, s in next, seconds do
+ split[s] = split[s] or lpegmatch(splitter,s)
+ end
if trace_loading then
logs.report("load otf", "adding kernclass %s with %s times %s pairs",lookup, maxfirsts, maxseconds)
end
- for fk, fv in next, firsts do
- for first in gmatch(fv,"[^ ]+") do
- local first_unicode = unicodes[first]
- if type(first_unicode) == "number" then
- first_unicode = { first_unicode }
+ local function do_it(fk,first_unicode)
+ local glyph = glyphs[mapmap[first_unicode]]
+ if glyph then
+ local mykerns = glyph.mykerns
+ if not mykerns then
+ mykerns = { } -- unicode indexed !
+ glyph.mykerns = mykerns
end
- for f=1,#first_unicode do
- local glyph = glyphs[mapmap[first_unicode[f]]]
- if glyph then
- 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 next, seconds do
- local offset = offsets[(fk-1) * maxseconds + sk]
- --~ local offset = offsets[sk] -- (fk-1) * maxseconds + sk]
- for second in gmatch(sv,"[^ ]+") do
- local second_unicode = unicodes[second]
- if type(second_unicode) == "number" then
- lookupkerns[second_unicode] = offset
- else
- for s=1,#second_unicode do
- lookupkerns[second_unicode[s]] = offset
- end
+ local lookupkerns = mykerns[lookup]
+ if not lookupkerns then
+ lookupkerns = { }
+ mykerns[lookup] = lookupkerns
+ end
+ local baseoffset = (fk-1) * maxseconds
+ for sk=2,maxseconds do
+ local sv = seconds[sk]
+ local offset = offsets[baseoffset + sk]
+ --~ local offset = offsets[sk] -- (fk-1) * maxseconds + sk]
+ local splt = split[sv]
+ if splt then
+ for i=1,#splt do
+ local second_unicode = splt[i]
+ if tonumber(second_unicode) then
+ lookupkerns[second_unicode] = offset
+ else
+ for s=1,#second_unicode do
+ lookupkerns[second_unicode[s]] = offset
end
end
end
- elseif trace_loading then
- logs.report("load otf", "no glyph data for U+%04X", first_unicode[f])
+ end
+ end
+ elseif trace_loading then
+ logs.report("load otf", "no glyph data for U+%04X", first_unicode)
+ end
+ end
+ for fk=1,#firsts do
+ local fv = firsts[fk]
+ local splt = split[fv]
+ if splt then
+ for i=1,#splt do
+ local first_unicode = splt[i]
+ if tonumber(first_unicode) then
+ do_it(fk,first_unicode)
+ else
+ for f=1,#first_unicode do
+ do_it(fk,first_unicode[f])
+ end
end
end
end
@@ -1132,10 +1191,31 @@ otf.enhancers["migrate metadata"] = function(data,filename)
metadata.charwidth = pfminfo and pfminfo.avgwidth
end
+local private_math_parameters = {
+ "FractionDelimiterSize",
+ "FractionDelimiterDisplayStyleSize",
+}
+
+otf.enhancers["check math parameters"] = function(data,filename)
+ local mathdata = data.metadata.math
+ if mathdata then
+ for m=1,#private_math_parameters do
+ local pmp = private_math_parameters[m]
+ if not mathdata[pmp] then
+ if trace_loading then
+ logs.report("load otf", "setting math parameter '%s' to 0", pmp)
+ end
+ mathdata[pmp] = 0
+ end
+ end
+ end
+end
+
otf.enhancers["flatten glyph lookups"] = function(data,filename)
for k, v in next, data.glyphs do
- if v.lookups then
- for kk, vv in next, v.lookups do
+ local lookups = v.lookups
+ if lookups then
+ for kk, vv in next, lookups do
for kkk=1,#vv do
local vvv = vv[kkk]
local s = vvv.specification
@@ -1185,6 +1265,31 @@ otf.enhancers["flatten glyph lookups"] = function(data,filename)
end
end
+otf.enhancers["simplify glyph lookups"] = function(data,filename)
+ for k, v in next, data.glyphs do
+ local lookups = v.lookups
+ if lookups then
+ local slookups, mlookups
+ for kk, vv in next, lookups do
+ if #vv == 1 then
+ if not slookups then
+ slookups = { }
+ v.slookups = slookups
+ end
+ slookups[kk] = vv[1]
+ else
+ if not mlookups then
+ mlookups = { }
+ v.mlookups = mlookups
+ end
+ mlookups[kk] = vv
+ end
+ end
+ v.lookups = nil
+ end
+ end
+end
+
otf.enhancers["flatten anchor tables"] = function(data,filename)
for k, v in next, data.glyphs do
if v.anchors then
@@ -1252,10 +1357,12 @@ function otf.features.register(name,default)
otf.features.default[name] = default
end
+-- for context this will become a task handler
+
function otf.set_features(tfmdata,features)
local processes = { }
- if not table.is_empty(features) then
- local lists = {
+ if features and next(features) then
+ local lists = { -- why local
fonts.triggers,
fonts.processors,
fonts.manipulators,
@@ -1292,7 +1399,7 @@ function otf.set_features(tfmdata,features)
end
end
end
- local fm = fonts.methods[mode]
+ local fm = fonts.methods[mode] -- todo: zonder node/mode otf/...
if fm then
local fmotf = fm.otf
if fmotf then
@@ -1329,14 +1436,14 @@ function otf.otf_to_tfm(specification)
--~ print(cache_id)
if not tfmdata then
local otfdata = otf.load(filename,format,sub,features and features.featurefile)
- if not table.is_empty(otfdata) then
+ if otfdata and next(otfdata) then
otfdata.shared = otfdata.shared or {
featuredata = { },
anchorhash = { },
initialized = false,
}
tfmdata = otf.copy_to_tfm(otfdata,cache_id)
- if not table.is_empty(tfmdata) then
+ if tfmdata and next(tfmdata) then
tfmdata.unique = tfmdata.unique or { }
tfmdata.shared = tfmdata.shared or { } -- combine
local shared = tfmdata.shared
@@ -1389,6 +1496,11 @@ end
-- we cannot share descriptions as virtual fonts might extend them (ok, we could
-- use a cache with a hash
+fonts.formats.dfont = "truetype"
+fonts.formats.ttc = "truetype"
+fonts.formats.ttf = "truetype"
+fonts.formats.otf = "opentype"
+
function otf.copy_to_tfm(data,cache_id) -- we can save a copy when we reorder the tma to unicode (nasty due to one->many)
if data then
local glyphs, pfminfo, metadata = data.glyphs or { }, data.pfminfo or { }, data.metadata or { }
@@ -1396,14 +1508,11 @@ function otf.copy_to_tfm(data,cache_id) -- we can save a copy when we reorder th
local unicodes = luatex.unicodes -- names to unicodes
local indices = luatex.indices
local characters, parameters, math_parameters, descriptions = { }, { }, { }, { }
- local tfm = {
- characters = characters,
- parameters = parameters,
- math_parameters = math_parameters,
- descriptions = descriptions,
- indices = indices,
- unicodes = unicodes,
- }
+ local designsize = metadata.designsize or metadata.design_size or 100
+ if designsize == 0 then
+ designsize = 100
+ end
+ local spaceunits = 500
-- indices maps from unicodes to indices
for u, i in next, indices do
characters[u] = { } -- we need this because for instance we add protruding info and loop over characters
@@ -1425,7 +1534,7 @@ function otf.copy_to_tfm(data,cache_id) -- we can save a copy when we reorder th
local variants = m.horiz_variants
if variants then
local c = char
- for n in variants:gmatch("[^ ]+") do
+ for n in gmatch(variants,"[^ ]+") do
local un = unicodes[n]
if un and u ~= un then
c.next = un
@@ -1437,7 +1546,7 @@ function otf.copy_to_tfm(data,cache_id) -- we can save a copy when we reorder th
local variants = m.vert_variants
if variants then
local c = char
- for n in variants:gmatch("[^ ]+") do
+ for n in gmatch(variants,"[^ ]+") do
local un = unicodes[n]
if un and u ~= un then
c.next = un
@@ -1445,6 +1554,7 @@ function otf.copy_to_tfm(data,cache_id) -- we can save a copy when we reorder th
end
end
c.vert_variants = m.vert_parts
+ c.vert_italic_correction = m.vert_italic_correction
end
end
local kerns = m.kerns
@@ -1455,64 +1565,49 @@ function otf.copy_to_tfm(data,cache_id) -- we can save a copy when we reorder th
end
end
-- end math
- local designsize = metadata.designsize or metadata.design_size or 100
- if designsize == 0 then
- designsize = 100
- end
- local spaceunits = 500
- tfm.units = metadata.units_per_em or 1000
- -- we need a runtime lookup because of running from cdrom or zip, brrr
- tfm.filename = resolvers.findbinfile(luatex.filename,"") or luatex.filename
- tfm.fullname = metadata.fontname or metadata.fullname
- tfm.psname = tfm.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"
- local endash, emdash = 0x20, 0x2014 -- unicodes['space'], unicodes['emdash']
+ local endash, emdash, space = 0x20, 0x2014, "space" -- unicodes['space'], unicodes['emdash']
if metadata.isfixedpitch then
if descriptions[endash] then
- spaceunits, tfm.spacer = descriptions[endash].width, "space"
+ spaceunits, spacer = descriptions[endash].width, "space"
end
if not spaceunits and descriptions[emdash] then
- spaceunits, tfm.spacer = descriptions[emdash].width, "emdash"
+ spaceunits, spacer = descriptions[emdash].width, "emdash"
end
if not spaceunits and metadata.charwidth then
- spaceunits, tfm.spacer = metadata.charwidth, "charwidth"
+ spaceunits, spacer = metadata.charwidth, "charwidth"
end
else
if descriptions[endash] then
- spaceunits, tfm.spacer = descriptions[endash].width, "space"
+ spaceunits, spacer = descriptions[endash].width, "space"
end
if not spaceunits and descriptions[emdash] then
- spaceunits, tfm.spacer = descriptions[emdash].width/2, "emdash/2"
+ spaceunits, spacer = descriptions[emdash].width/2, "emdash/2"
end
if not spaceunits and metadata.charwidth then
- spaceunits, tfm.spacer = metadata.charwidth, "charwidth"
+ spaceunits, spacer = metadata.charwidth, "charwidth"
end
end
spaceunits = tonumber(spaceunits) or tfm.units/2 -- 500 -- brrr
+ -- we need a runtime lookup because of running from cdrom or zip, brrr (shouldn't we use the basename then?)
+ local filename = fonts.tfm.checked_filename(luatex)
+ local fontname = metadata.fontname
+ local fullname = metadata.fullname or fontname
+ local cidinfo = data.cidinfo
+ local units = metadata.units_per_em or 1000
+ --
+ cidinfo.registry = cidinfo and cidinfo.registry or "" -- weird here, fix upstream
+ --
parameters.slant = 0
- parameters.space = spaceunits -- 3.333 (cmr10)
- parameters.space_stretch = tfm.units/2 -- 500 -- 1.666 (cmr10)
- parameters.space_shrink = 1*tfm.units/3 -- 333 -- 1.111 (cmr10)
- parameters.x_height = 2*tfm.units/5 -- 400
- parameters.quad = tfm.units -- 1000
- if spaceunits < 2*tfm.units/5 then
+ parameters.space = spaceunits -- 3.333 (cmr10)
+ parameters.space_stretch = units/2 -- 500 -- 1.666 (cmr10)
+ parameters.space_shrink = 1*units/3 -- 333 -- 1.111 (cmr10)
+ parameters.x_height = 2*units/5 -- 400
+ parameters.quad = units -- 1000
+ if spaceunits < 2*units/5 then
-- todo: warning
end
local italicangle = metadata.italicangle
- tfm.ascender = math.abs(metadata.ascent or 0)
- tfm.descender = math.abs(metadata.descent or 0)
if italicangle then -- maybe also in afm _
- tfm.italicangle = italicangle
parameters.slant = parameters.slant - math.round(math.tan(italicangle*math.pi/180))
end
if metadata.isfixedpitch then
@@ -1534,8 +1629,34 @@ function otf.copy_to_tfm(data,cache_id) -- we can save a copy when we reorder th
end
end
end
- -- [6]
- return tfm
+ --
+ return {
+ characters = characters,
+ parameters = parameters,
+ math_parameters = math_parameters,
+ descriptions = descriptions,
+ indices = indices,
+ unicodes = unicodes,
+ type = "real",
+ direction = 0,
+ boundarychar_label = 0,
+ boundarychar = 65536,
+ designsize = (designsize/10)*65536,
+ spacer = "500 units",
+ encodingbytes = 2,
+ filename = filename,
+ fontname = fontname,
+ fullname = fullname,
+ psname = fontname or fullname,
+ name = filename or fullname,
+ units = units,
+ format = fonts.fontformat(filename,"opentype"),
+ cidinfo = cidinfo,
+ ascender = abs(metadata.ascent or 0),
+ descender = abs(metadata.descent or 0),
+ spacer = spacer,
+ italicangle = italicangle,
+ }
else
return nil
end
@@ -1552,6 +1673,7 @@ function tfm.read_from_open_type(specification)
local s = specification.size
local m = otfdata.metadata.math
if m then
+ -- this will move to a function
local f = specification.features
if f then
local f = f.normal
@@ -1579,28 +1701,52 @@ function tfm.read_from_open_type(specification)
end
end
end
- tfmtable = tfm.scale(tfmtable,s)
- -- here we resolve the name; file can be relocated, so this info is not in the cache
- 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 = resolvers.findbinfile(filename,"") or filename
- tfmtable.fullname = tfmtable.fullname or otfdata.metadata.fontname or otfdata.metadata.fullname
- local order = otfdata and otfdata.metadata.order2
- if order == 0 then
- tfmtable.format = 'opentype'
- elseif order == 1 then
- tfmtable.format = 'truetype'
- else
- tfmtable.format = specification.format
+ tfmtable = tfm.scale(tfmtable,s,specification.relativeid)
+ if tfm.fontname_mode == "specification" then
+ -- not to be used in context !
+ local specname = specification.specification
+ if specname then
+ tfmtable.name = specname
+ if trace_defining then
+ logs.report("define font","overloaded fontname: '%s'",specname)
+ end
end
- tfmtable.name = tfmtable.filename or tfmtable.fullname
end
fonts.logger.save(tfmtable,file.extname(specification.filename),specification)
end
--~ print(tfmtable.fullname)
return tfmtable
end
+
+-- helpers
+
+function otf.collect_lookups(otfdata,kind,script,language)
+ -- maybe store this in the font
+ local sequences = otfdata.luatex.sequences
+ if sequences then
+ local featuremap, featurelist = { }, { }
+ for s=1,#sequences do
+ local sequence = sequences[s]
+ local features = sequence.features
+ features = features and features[kind]
+ features = features and (features[script] or features[default] or features[wildcard])
+ features = features and (features[language] or features[default] or features[wildcard])
+ if features then
+ local subtables = sequence.subtables
+ if subtables then
+ for s=1,#subtables do
+ local ss = subtables[s]
+ if not featuremap[s] then
+ featuremap[ss] = true
+ featurelist[#featurelist+1] = ss
+ end
+ end
+ end
+ end
+ end
+ if #featurelist > 0 then
+ return featuremap, featurelist
+ end
+ end
+ return nil, nil
+end
diff --git a/Master/texmf-dist/tex/context/base/font-oti.lua b/Master/texmf-dist/tex/context/base/font-oti.lua
index cbac6d36a84..4cb27062623 100644
--- a/Master/texmf-dist/tex/context/base/font-oti.lua
+++ b/Master/texmf-dist/tex/context/base/font-oti.lua
@@ -1,6 +1,6 @@
if not modules then modules = { } end modules ['font-oti'] = {
version = 1.001,
- comment = "companion to font-ini.tex",
+ comment = "companion to font-ini.mkiv",
author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
copyright = "PRAGMA ADE / ConTeXt Development Team",
license = "see context related readme files"
diff --git a/Master/texmf-dist/tex/context/base/font-otn.lua b/Master/texmf-dist/tex/context/base/font-otn.lua
index 3c11b84f1b4..d4f89adc6ec 100644
--- a/Master/texmf-dist/tex/context/base/font-otn.lua
+++ b/Master/texmf-dist/tex/context/base/font-otn.lua
@@ -1,6 +1,6 @@
if not modules then modules = { } end modules ['font-otn'] = {
version = 1.001,
- comment = "companion to font-ini.tex",
+ comment = "companion to font-ini.mkiv",
author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
copyright = "PRAGMA ADE / ConTeXt Development Team",
license = "see context related readme files"
@@ -10,6 +10,11 @@ if not modules then modules = { } end modules ['font-otn'] = {
-- much functionality could only be implemented thanks to the husayni font
-- of Idris Samawi Hamid to who we dedicate this module.
+-- I'm in the process of cleaning up the code (which happens in another
+-- file) so don't rely on things staying the same.
+
+-- some day when we can jit this, we can use more functions
+
-- we can use more lpegs when lpeg is extended with function args and so
-- resolving to unicode does not gain much
@@ -115,9 +120,10 @@ results in different tables.</p>
-- remark: the 'not implemented yet' variants will be done when we have fonts that use them
-- remark: we need to check what to do with discretionaries
-local concat = table.concat
+local concat, insert, remove = table.concat, table.insert, table.remove
local format, gmatch, gsub, find, match, lower, strip = string.format, string.gmatch, string.gsub, string.find, string.match, string.lower, string.strip
local type, next, tonumber, tostring = type, next, tonumber, tostring
+local lpegmatch = lpeg.match
local otf = fonts.otf
local tfm = fonts.tfm
@@ -136,6 +142,8 @@ local trace_bugs = false trackers.register("otf.bugs", function
local trace_details = false trackers.register("otf.details", function(v) trace_details = v end)
local trace_applied = false trackers.register("otf.applied", function(v) trace_applied = v end)
local trace_steps = false trackers.register("otf.steps", function(v) trace_steps = v end)
+local trace_skips = false trackers.register("otf.skips", function(v) trace_skips = v end)
+local trace_directions = false trackers.register("otf.directions", function(v) trace_directions = v end)
trackers.register("otf.verbose_chain", function(v) otf.setcontextchain(v and "verbose") end)
trackers.register("otf.normal_chain", function(v) otf.setcontextchain(v and "normal") end)
@@ -159,7 +167,7 @@ local zwj = 0x200D
local wildcard = "*"
local default = "dflt"
-local split_at_space = lpeg.Ct(lpeg.splitat(" ")) -- no trailing or multiple spaces anyway
+local split_at_space = lpeg.splitters[" "] or lpeg.Ct(lpeg.splitat(" ")) -- no trailing or multiple spaces anyway
local glyph = node.id('glyph')
local glue = node.id('glue')
@@ -301,16 +309,30 @@ end
local function toligature(kind,lookupname,start,stop,char,markflag,discfound) -- brr head
if start ~= stop then
+--~ if discfound then
+--~ local lignode = copy_node(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
if discfound then
+ -- print("start->stop",nodes.tosequence(start,stop))
local lignode = copy_node(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
+ lignode.font, lignode.char, lignode.subtype = start.font, char, 2
+ local next, prev = stop.next, start.prev
+ stop.next = nil
+ lignode = node.do_ligature_n(start, stop, lignode)
+ prev.next = lignode
+ if next then
+ next.prev = lignode
end
+ lignode.next, lignode.prev = next, prev
+ start = lignode
+ -- print("start->end",nodes.tosequence(start))
else -- start is the ligature
local deletemarks = markflag ~= "mark"
local n = copy_node(start)
@@ -385,16 +407,19 @@ local function alternative_glyph(start,alternatives,kind,chainname,chainlookupna
value, choice = format("first, choice %s",1), alternatives[1]
elseif value == "last" then
value, choice = format("last, choice %s",n), alternatives[n]
- elseif type(value) ~= "number" then
- value, choice = "default, choice 1", alternatives[1]
- elseif value > n then
- value, choice = format("no %s variants, taking %s",value,n), alternatives[n]
- elseif value == 0 then
- value, choice = format("choice %s (no change)",value), start.char
- elseif value < 1 then
- value, choice = format("no %s variants, taking %s",value,1), alternatives[1]
else
- value, choice = format("choice %s",value), alternatives[value]
+ value = tonumber(value)
+ if type(value) ~= "number" then
+ value, choice = "default, choice 1", alternatives[1]
+ elseif value > n then
+ value, choice = format("no %s variants, taking %s",value,n), alternatives[n]
+ elseif value == 0 then
+ value, choice = format("choice %s (no change)",value), start.char
+ elseif value < 1 then
+ value, choice = format("no %s variants, taking %s",value,1), alternatives[1]
+ else
+ value, choice = format("choice %s",value), alternatives[value]
+ end
end
if not choice then
logwarning("%s: no variant %s for %s",cref(kind,chainname,chainlookupname,lookupname),value,gref(start.char))
@@ -436,7 +461,8 @@ end
function handlers.gsub_ligature(start,kind,lookupname,ligature,sequence) --or maybe pass lookup ref
local s, stop, discfound = start.next, nil, false
- if marks[start.char] then
+ local startchar = start.char
+ if marks[startchar] then
while s do
local id = s.id
if id == glyph and s.subtype<256 then
@@ -459,7 +485,7 @@ function handlers.gsub_ligature(start,kind,lookupname,ligature,sequence) --or ma
end
if stop and ligature[2] then
if trace_ligatures then
- local startchar, stopchar = start.char, stop.char
+ local stopchar = stop.char
start = markstoligature(kind,lookupname,start,stop,ligature[2])
logprocess("%s: replacing %s upto %s by ligature %s",pref(kind,lookupname),gref(startchar),gref(stopchar),gref(start.char))
else
@@ -498,7 +524,7 @@ function handlers.gsub_ligature(start,kind,lookupname,ligature,sequence) --or ma
end
if stop and ligature[2] then
if trace_ligatures then
- local startchar, stopchar = start.char, stop.char
+ local stopchar = stop.char
start = toligature(kind,lookupname,start,stop,ligature[2],skipmark,discfound)
logprocess("%s: replacing %s upto %s by ligature %s",pref(kind,lookupname),gref(startchar),gref(stopchar),gref(start.char))
else
@@ -724,7 +750,7 @@ function handlers.gpos_cursive(start,kind,lookupname,exitanchors,sequence) -- to
if exit then
local dx, dy, bound = set_cursive(start,nxt,tfmdata.factor,rlmode,exit,entry,characters[startchar],characters[nextchar])
if trace_cursive then
- logprocess("%s: moving %s to %s cursive (%s,%s) using anchor %s and bound %s",pref(kind,lookupname),gref(startchar),gref(nextchar),dx,dy,anchor,bound)
+ logprocess("%s: moving %s to %s cursive (%s,%s) using anchor %s and bound %s in rlmode %s",pref(kind,lookupname),gref(startchar),gref(nextchar),dx,dy,anchor,bound,rlmode)
end
done = true
break
@@ -752,9 +778,9 @@ end
function handlers.gpos_single(start,kind,lookupname,kerns,sequence)
local startchar = start.char
- local dx, dy = set_pair(start,tfmdata.factor,rlmode,kerns,characters[startchar])
+ local dx, dy, w, h = set_pair(start,tfmdata.factor,rlmode,sequence.flags[4],kerns,characters[startchar])
if trace_kerns then
- logprocess("%s: shifting single %s by (%s,%s)",pref(kind,lookupname),gref(startchar),dx,dy)
+ logprocess("%s: shifting single %s by (%s,%s) and correction (%s,%s)",pref(kind,lookupname),gref(startchar),dx,dy,w,h)
end
return start, false
end
@@ -783,14 +809,14 @@ local krn = kerns[nextchar]
local a, b = krn[3], krn[4]
if a and #a > 0 then
local startchar = start.char
- local x, y, w, h = set_pair(start,factor,rlmode,a,characters[startchar])
+ local x, y, w, h = set_pair(start,factor,rlmode,sequence.flags[4],a,characters[startchar])
if trace_kerns then
logprocess("%s: shifting first of pair %s and %s by (%s,%s) and correction (%s,%s)",pref(kind,lookupname),gref(startchar),gref(nextchar),x,y,w,h)
end
end
if b and #b > 0 then
local startchar = start.char
- local x, y, w, h = set_pair(snext,factor,rlmode,b,characters[nextchar])
+ local x, y, w, h = set_pair(snext,factor,rlmode,sequence.flags[4],b,characters[nextchar])
if trace_kerns then
logprocess("%s: shifting second of pair %s and %s by (%s,%s) and correction (%s,%s)",pref(kind,lookupname),gref(startchar),gref(nextchar),x,y,w,h)
end
@@ -1376,7 +1402,7 @@ function chainprocs.gpos_cursive(start,stop,kind,chainname,currentcontext,cache,
if exit then
local dx, dy, bound = set_cursive(start,nxt,tfmdata.factor,rlmode,exit,entry,characters[startchar],characters[nextchar])
if trace_cursive then
- logprocess("%s: moving %s to %s cursive (%s,%s) using anchor %s and bound %s",pref(kind,lookupname),gref(startchar),gref(nextchar),dx,dy,anchor,bound)
+ logprocess("%s: moving %s to %s cursive (%s,%s) using anchor %s and bound %s in rlmode %s",pref(kind,lookupname),gref(startchar),gref(nextchar),dx,dy,anchor,bound,rlmode)
end
done = true
break
@@ -1404,7 +1430,7 @@ function chainprocs.gpos_cursive(start,stop,kind,chainname,currentcontext,cache,
return start, false
end
-function chainprocs.gpos_single(start,stop,kind,chainname,currentcontext,cache,currentlookup,chainlookupname)
+function chainprocs.gpos_single(start,stop,kind,chainname,currentcontext,cache,currentlookup,chainlookupname,chainindex,sequence)
-- untested
local startchar = start.char
local subtables = currentlookup.subtables
@@ -1413,9 +1439,9 @@ function chainprocs.gpos_single(start,stop,kind,chainname,currentcontext,cache,c
if kerns then
kerns = kerns[startchar]
if kerns then
- local dx, dy = set_pair(start,tfmdata.factor,rlmode,kerns,characters[startchar])
+ local dx, dy, w, h = set_pair(start,tfmdata.factor,rlmode,sequence.flags[4],kerns,characters[startchar])
if trace_kerns then
- logprocess("%s: shifting single %s by (%s,%s)",cref(kind,chainname,chainlookupname),gref(startchar),dx,dy)
+ logprocess("%s: shifting single %s by (%s,%s) and correction (%s,%s)",cref(kind,chainname,chainlookupname),gref(startchar),dx,dy,w,h)
end
end
end
@@ -1424,7 +1450,7 @@ end
-- when machines become faster i will make a shared function
-function chainprocs.gpos_pair(start,stop,kind,chainname,currentcontext,cache,currentlookup,chainlookupname)
+function chainprocs.gpos_pair(start,stop,kind,chainname,currentcontext,cache,currentlookup,chainlookupname,chainindex,sequence)
-- logwarning("%s: gpos_pair not yet supported",cref(kind,chainname,chainlookupname))
local snext = start.next
if snext then
@@ -1439,12 +1465,11 @@ function chainprocs.gpos_pair(start,stop,kind,chainname,currentcontext,cache,cur
local factor = tfmdata.factor
while snext and snext.id == glyph and snext.subtype<256 and snext.font == currentfont do
local nextchar = snext.char
-local krn = kerns[nextchar]
+ local krn = kerns[nextchar]
if not krn and marks[nextchar] then
prev = snext
snext = snext.next
else
---~ local krn = kerns[nextchar]
if not krn then
-- skip
elseif type(krn) == "table" then
@@ -1452,14 +1477,14 @@ local krn = kerns[nextchar]
local a, b = krn[3], krn[4]
if a and #a > 0 then
local startchar = start.char
- local x, y, w, h = set_pair(start,factor,rlmode,a,characters[startchar])
+ local x, y, w, h = set_pair(start,factor,rlmode,sequence.flags[4],a,characters[startchar])
if trace_kerns then
logprocess("%s: shifting first of pair %s and %s by (%s,%s) and correction (%s,%s)",cref(kind,chainname,chainlookupname),gref(startchar),gref(nextchar),x,y,w,h)
end
end
if b and #b > 0 then
local startchar = start.char
- local x, y, w, h = set_pair(snext,factor,rlmode,b,characters[nextchar])
+ local x, y, w, h = set_pair(snext,factor,rlmode,sequence.flags[4],b,characters[nextchar])
if trace_kerns then
logprocess("%s: shifting second of pair %s and %s by (%s,%s) and correction (%s,%s)",cref(kind,chainname,chainlookupname),gref(startchar),gref(nextchar),x,y,w,h)
end
@@ -1503,19 +1528,30 @@ end
-- we don't need to pass the currentcontext, saves a bit
-- make a slow variant then can be activated but with more tracing
+local function show_skip(kind,chainname,char,ck,class)
+ if ck[9] then
+ logwarning("%s: skipping char %s (%s) in rule %s, lookuptype %s (%s=>%s)",cref(kind,chainname),gref(char),class,ck[1],ck[2],ck[9],ck[10])
+ else
+ logwarning("%s: skipping char %s (%s) in rule %s, lookuptype %s",cref(kind,chainname),gref(char),class,ck[1],ck[2])
+ end
+end
+
local function normal_handle_contextchain(start,kind,chainname,contexts,sequence,cache)
-- local rule, lookuptype, sequence, f, l, lookups = ck[1], ck[2] ,ck[3], ck[4], ck[5], ck[6]
local flags, done = sequence.flags, false
local skipmark, skipligature, skipbase = flags[1], flags[2], flags[3]
local someskip = skipmark or skipligature or skipbase -- could be stored in flags for a fast test (hm, flags could be false !)
+ local markclass = sequence.markclass -- todo, first we need a proper test
+ local skipped = false
for k=1,#contexts do
local match, current, last = true, start, start
local ck = contexts[k]
- local sequence = ck[3]
- local s = #sequence
+ local seq = ck[3]
+ local s = #seq
+ -- f..l = mid string
if s == 1 then
-- never happens
- match = current.id == glyph and current.subtype<256 and current.font == currentfont and sequence[1][current.char]
+ match = current.id == glyph and current.subtype<256 and current.font == currentfont and seq[1][current.char]
else
-- todo: better space check (maybe check for glue)
local f, l = ck[4], ck[5]
@@ -1529,7 +1565,7 @@ local function normal_handle_contextchain(start,kind,chainname,contexts,sequence
-- we cannot optimize for n=2 because there can be disc nodes
-- if not someskip and n == l then
-- -- n=2 and no skips then faster loop
- -- match = last and last.id == glyph and last.subtype<256 and last.font == currentfont and sequence[n][last.char]
+ -- match = last and last.id == glyph and last.subtype<256 and last.font == currentfont and seq[n][last.char]
-- else
while n <= l do
if last then
@@ -1540,11 +1576,13 @@ local function normal_handle_contextchain(start,kind,chainname,contexts,sequence
local ccd = descriptions[char]
if ccd then
local class = ccd.class
- if class == skipmark or class == skipligature or class == skipbase then
---~ if someskip and class == skipmark or class == skipligature or class == skipbase then
- -- skip 'm
+ if class == skipmark or class == skipligature or class == skipbase or (markclass and class == "mark" and not markclass[char]) then
+ skipped = true
+ if trace_skips then
+ show_skip(kind,chainname,char,ck,class)
+ end
last = last.next
- elseif sequence[n][char] then
+ elseif seq[n][char] then
if n < l then
last = last.next
end
@@ -1570,6 +1608,7 @@ local function normal_handle_contextchain(start,kind,chainname,contexts,sequence
-- end
end
if match and f > 1 then
+ -- before
local prev = start.prev
if prev then
local n = f-1
@@ -1582,10 +1621,12 @@ local function normal_handle_contextchain(start,kind,chainname,contexts,sequence
local ccd = descriptions[char]
if ccd then
local class = ccd.class
- if class == skipmark or class == skipligature or class == skipbase then
---~ if someskip and class == skipmark or class == skipligature or class == skipbase then
- -- skip 'm
- elseif sequence[n][char] then
+ if class == skipmark or class == skipligature or class == skipbase or (markclass and class == "mark" and not markclass[char]) then
+ skipped = true
+ if trace_skips then
+ show_skip(kind,chainname,char,ck,class)
+ end
+ elseif seq[n][char] then
n = n -1
else
match = false break
@@ -1598,32 +1639,33 @@ local function normal_handle_contextchain(start,kind,chainname,contexts,sequence
end
elseif id == disc then
-- skip 'm
- elseif sequence[n][32] then
+ elseif seq[n][32] then
n = n -1
else
match = false break
end
prev = prev.prev
- elseif sequence[n][32] then
+ elseif seq[n][32] then
n = n -1
else
match = false break
end
end
elseif f == 2 then
- match = sequence[1][32]
+ match = seq[1][32]
else
for n=f-1,1 do
- if not sequence[n][32] then
+ if not seq[n][32] then
match = false break
end
end
end
end
if match and s > l then
+ -- after
local current = last.next
if current then
- -- removed optimiziation for s-l == 1, we have to deal with marks anyway
+ -- removed optimization for s-l == 1, we have to deal with marks anyway
local n = l + 1
while n <= s do
if current then
@@ -1634,10 +1676,12 @@ local function normal_handle_contextchain(start,kind,chainname,contexts,sequence
local ccd = descriptions[char]
if ccd then
local class = ccd.class
- if class == skipmark or class == skipligature or class == skipbase then
---~ if someskip and class == skipmark or class == skipligature or class == skipbase then
- -- skip 'm
- elseif sequence[n][char] then
+ if class == skipmark or class == skipligature or class == skipbase or (markclass and class == "mark" and not markclass[char]) then
+ skipped = true
+ if trace_skips then
+ show_skip(kind,chainname,char,ck,class)
+ end
+ elseif seq[n][char] then
n = n + 1
else
match = false break
@@ -1650,23 +1694,23 @@ local function normal_handle_contextchain(start,kind,chainname,contexts,sequence
end
elseif id == disc then
-- skip 'm
- elseif sequence[n][32] then -- brrr
+ elseif seq[n][32] then -- brrr
n = n + 1
else
match = false break
end
current = current.next
- elseif sequence[n][32] then
+ elseif seq[n][32] then
n = n + 1
else
match = false break
end
end
elseif s-l == 1 then
- match = sequence[s][32]
+ match = seq[s][32]
else
for n=l+1,s do
- if not sequence[n][32] then
+ if not seq[n][32] then
match = false break
end
end
@@ -1676,7 +1720,7 @@ local function normal_handle_contextchain(start,kind,chainname,contexts,sequence
if match then
-- ck == currentcontext
if trace_contexts then
- local rule, lookuptype, sequence, f, l = ck[1], ck[2] ,ck[3], ck[4], ck[5]
+ local rule, lookuptype, f, l = ck[1], ck[2], ck[4], ck[5]
local char = start.char
if ck[9] then
logwarning("%s: rule %s matches at char %s for (%s,%s,%s) chars, lookuptype %s (%s=>%s)",cref(kind,chainname),rule,gref(char),f-1,l-f+1,s-l,lookuptype,ck[9],ck[10])
@@ -1693,39 +1737,79 @@ local function normal_handle_contextchain(start,kind,chainname,contexts,sequence
local chainlookup = lookuptable[chainlookupname]
local cp = chainprocs[chainlookup.type]
if cp then
- start, done = cp(start,last,kind,chainname,ck,cache,chainlookup,chainlookupname)
+ start, done = cp(start,last,kind,chainname,ck,cache,chainlookup,chainlookupname,nil,sequence)
else
logprocess("%s: %s is not yet supported",cref(kind,chainname,chainlookupname),chainlookup.type)
end
else
-- actually this needs a more complex treatment for which we will use chainmores
+--~ local i = 1
+--~ repeat
+--~ local chainlookupname = chainlookups[i]
+--~ local chainlookup = lookuptable[chainlookupname]
+--~ local cp = chainmores[chainlookup.type]
+--~ if cp then
+--~ local ok, n
+--~ start, ok, n = cp(start,last,kind,chainname,ck,cache,chainlookup,chainlookupname,i,sequence)
+--~ -- messy since last can be changed !
+--~ if ok then
+--~ done = true
+--~ start = start.next
+--~ if n then
+--~ -- skip next one(s) if ligature
+--~ i = i + n - 1
+--~ end
+--~ end
+--~ else
+--~ logprocess("%s: multiple subchains for %s are not yet supported",cref(kind,chainname,chainlookupname),chainlookup.type)
+--~ end
+--~ i = i + 1
+--~ until i > nofchainlookups
+
local i = 1
repeat
+if skipped then
+ while true do
+ local char = start.char
+ local ccd = descriptions[char]
+ if ccd then
+ local class = ccd.class
+ if class == skipmark or class == skipligature or class == skipbase or (markclass and class == "mark" and not markclass[char]) then
+ start = start.next
+ else
+ break
+ end
+ else
+ break
+ end
+ end
+end
local chainlookupname = chainlookups[i]
local chainlookup = lookuptable[chainlookupname]
local cp = chainmores[chainlookup.type]
if cp then
local ok, n
- start, ok, n = cp(start,last,kind,chainname,ck,cache,chainlookup,chainlookupname,i)
+ start, ok, n = cp(start,last,kind,chainname,ck,cache,chainlookup,chainlookupname,i,sequence)
-- messy since last can be changed !
if ok then
done = true
- start = start.next
- if n then
- -- skip next one(s) if ligature
- i = i + n - 1
- end
+ -- skip next one(s) if ligature
+ i = i + (n or 1)
+ else
+ i = i + 1
end
else
logprocess("%s: multiple subchains for %s are not yet supported",cref(kind,chainname,chainlookupname),chainlookup.type)
+ i = i + 1
end
- i = i + 1
+ start = start.next
until i > nofchainlookups
+
end
else
local replacements = ck[7]
if replacements then
- start, done = chainprocs.reversesub(start,last,kind,chainname,ck,cache,replacements)
+ start, done = chainprocs.reversesub(start,last,kind,chainname,ck,cache,replacements) -- sequence
else
done = true -- can be meant to be skipped
if trace_contexts then
@@ -1797,6 +1881,8 @@ end
local resolved = { } -- we only resolve a font,script,language pair once
+-- todo: pass all these 'locals' in a table
+
function fonts.methods.node.otf.features(head,font,attr)
if trace_steps then
checkstep(head)
@@ -1840,6 +1926,7 @@ function fonts.methods.node.otf.features(head,font,attr)
local ra = rl [attr] if ra == nil then ra = { } rl [attr] = ra end -- attr can be false
-- sequences always > 1 so no need for optimization
for s=1,#sequences do
+ local pardir, txtdir = 0, { }
local success = false
local sequence = sequences[s]
local r = ra[s] -- cache
@@ -1865,12 +1952,10 @@ function fonts.methods.node.otf.features(head,font,attr)
-- only first attribute match check, so we assume simple fina's
-- default can become a font feature itself
if l[language] then
---~ valid, what = true, language
valid, what = s_e or a_e, language
-- elseif l[default] then
-- valid, what = true, default
elseif l[wildcard] then
---~ valid, what = true, wildcard
valid, what = s_e or a_e, wildcard
end
if valid then
@@ -1905,12 +1990,12 @@ function fonts.methods.node.otf.features(head,font,attr)
local handler = handlers[typ]
local thecache = featuredata[typ] or { }
-- we need to get rid of this slide !
- start = find_node_tail(head) -- slow (we can store tail because there's always a skip at the end): todo
+ local start = find_node_tail(head) -- slow (we can store tail because there's always a skip at the end): todo
while start do
local id = start.id
if id == glyph then
---~ if start.subtype<256 and start.font == font and (not attr or has_attribute(start,0,attr)) then
- if start.subtype<256 and start.font == font and has_attribute(start,0,attr) then
+ if start.subtype<256 and start.font == font and (not attr or has_attribute(start,0,attr)) then
+--~ if start.subtype<256 and start.font == font and has_attribute(start,0,attr) then
for i=1,#subtables do
local lookupname = subtables[i]
local lookupcache = thecache[lookupname]
@@ -1938,8 +2023,8 @@ function fonts.methods.node.otf.features(head,font,attr)
local handler = handlers[typ]
local ns = #subtables
local thecache = featuredata[typ] or { }
- start = head -- local ?
- rlmode = 0
+ local start = head -- local ?
+ rlmode = 0 -- to be checked ?
if ns == 1 then
local lookupname = subtables[1]
local lookupcache = thecache[lookupname]
@@ -1949,8 +2034,8 @@ function fonts.methods.node.otf.features(head,font,attr)
while start do
local id = start.id
if id == glyph then
---~ if start.font == font and start.subtype<256 and (not attr or has_attribute(start,0,attr)) and (not attribute or has_attribute(start,state,attribute)) then
- if start.font == font and start.subtype<256 and has_attribute(start,0,attr) and (not attribute or has_attribute(start,state,attribute)) then
+--~ if start.font == font and start.subtype<256 and has_attribute(start,0,attr) and (not attribute or has_attribute(start,state,attribute)) then
+ if start.font == font and start.subtype<256 and (not attr or has_attribute(start,0,attr)) and (not attribute or has_attribute(start,state,attribute)) then
local lookupmatch = lookupcache[start.char]
if lookupmatch then
-- sequence kan weg
@@ -1983,21 +2068,35 @@ function fonts.methods.node.otf.features(head,font,attr)
local subtype = start.subtype
if subtype == 7 then
local dir = start.dir
- if dir == "+TRT" then
+ if dir == "+TRT" or dir == "+TLT" then
+ insert(txtdir,dir)
+ elseif dir == "-TRT" or dir == "-TLT" then
+ remove(txtdir)
+ end
+ local d = txtdir[#txtdir]
+ if d == "+TRT" then
rlmode = -1
- elseif dir == "+TLT" then
+ elseif d == "+TLT" then
rlmode = 1
else
- rlmode = 0
+ rlmode = pardir
+ end
+ if trace_directions then
+ logs.report("fonts","directions after textdir %s: pardir=%s, txtdir=%s:%s, rlmode=%s",dir,pardir,#txtdir,txtdir[#txtdir] or "unset",rlmode)
end
elseif subtype == 6 then
local dir = start.dir
if dir == "TRT" then
- rlmode = -1
+ pardir = -1
elseif dir == "TLT" then
- rlmode = 1
+ pardir = 1
else
- rlmode = 0
+ pardir = 0
+ end
+ rlmode = pardir
+ --~ txtdir = { }
+ if trace_directions then
+ logs.report("fonts","directions after pardir %s: pardir=%s, txtdir=%s:%s, rlmode=%s",dir,pardir,#txtdir,txtdir[#txtdir] or "unset",rlmode)
end
end
start = start.next
@@ -2005,14 +2104,13 @@ function fonts.methods.node.otf.features(head,font,attr)
start = start.next
end
end
-
end
else
while start do
local id = start.id
if id == glyph then
---~ if start.subtype<256 and start.font == font and (not attr or has_attribute(start,0,attr)) and (not attribute or has_attribute(start,state,attribute)) then
- if start.subtype<256 and start.font == font and has_attribute(start,0,attr) and (not attribute or has_attribute(start,state,attribute)) then
+ if start.subtype<256 and start.font == font and (not attr or has_attribute(start,0,attr)) and (not attribute or has_attribute(start,state,attribute)) then
+--~ if start.subtype<256 and start.font == font and has_attribute(start,0,attr) and (not attribute or has_attribute(start,state,attribute)) then
for i=1,ns do
local lookupname = subtables[i]
local lookupcache = thecache[lookupname]
@@ -2052,23 +2150,38 @@ function fonts.methods.node.otf.features(head,font,attr)
-- end
elseif id == whatsit then
local subtype = start.subtype
+ local subtype = start.subtype
if subtype == 7 then
local dir = start.dir
- if dir == "+TRT" then
+ if dir == "+TRT" or dir == "+TLT" then
+ insert(txtdir,dir)
+ elseif dir == "-TRT" or dir == "-TLT" then
+ remove(txtdir)
+ end
+ local d = txtdir[#txtdir]
+ if d == "+TRT" then
rlmode = -1
- elseif dir == "+TLT" then
+ elseif d == "+TLT" then
rlmode = 1
else
- rlmode = 0
+ rlmode = pardir
+ end
+ if trace_directions then
+ logs.report("fonts","directions after textdir %s: pardir=%s, txtdir=%s:%s, rlmode=%s",dir,pardir,#txtdir,txtdir[#txtdir] or "unset",rlmode)
end
elseif subtype == 6 then
local dir = start.dir
if dir == "TRT" then
- rlmode = -1
+ pardir = -1
elseif dir == "TLT" then
- rlmode = 1
+ pardir = 1
else
- rlmode = 0
+ pardir = 0
+ end
+ rlmode = pardir
+ --~ txtdir = { }
+ if trace_directions then
+ logs.report("fonts","directions after pardir %s: pardir=%s, txtdir=%s:%s, rlmode=%s",dir,pardir,#txtdir,txtdir[#txtdir] or "unset",rlmode)
end
end
start = start.next
@@ -2096,11 +2209,11 @@ otf.features.prepare = { }
-- document)
local function split(replacement,original,cache,unicodes)
- -- we can cache this too, but not the same
+ -- we can cache this too, but not the same (although unicode is a unique enough hash)
local o, t, n = { }, { }, 0
for s in gmatch(original,"[^ ]+") do
local us = unicodes[s]
- if type(us) == "number" then
+ if type(us) == "number" then -- tonumber(us)
o[#o+1] = us
else
o[#o+1] = us[1]
@@ -2109,7 +2222,7 @@ local function split(replacement,original,cache,unicodes)
for s in gmatch(replacement,"[^ ]+") do
n = n + 1
local us = unicodes[s]
- if type(us) == "number" then
+ if type(us) == "number" then -- tonumber(us)
t[o[n]] = us
else
t[o[n]] = us[1]
@@ -2166,142 +2279,153 @@ local function prepare_lookups(tfmdata)
-- we can change the otf table after loading but then we need to adapt base mode
-- as well (no big deal)
--
- for unicode, glyph in next, descriptions do
- local lookups = glyph.lookups
- if lookups then
- for lookup, whatever in next, lookups do
- for i=1,#whatever do -- normaly one
- local p = whatever[i]
- local what = p[1]
- if what == 'substitution' then
- local old, new = unicode, unicodes[p[2]]
- if type(new) == "table" then
- new = new[1]
- end
- local s = single[lookup]
- if not s then s = { } single[lookup] = s end
- s[old] = new
---~ if trace_lookups then
---~ logs.report("define otf","lookup %s: substitution %s => %s",lookup,old,new)
---~ end
- break
- elseif what == 'multiple' then
- local old, new = unicode, { }
- local m = multiple[lookup]
- if not m then m = { } multiple[lookup] = m end
- m[old] = new
- for pc in gmatch(p[2],"[^ ]+") do
- local upc = unicodes[pc]
- if type(upc) == "number" then
- new[#new+1] = upc
- else
- new[#new+1] = upc[1]
- end
- end
---~ if trace_lookups then
---~ logs.report("define otf","lookup %s: multiple %s => %s",lookup,old,concat(new," "))
---~ end
+ local action = {
+ substitution = function(p,lookup,k,glyph,unicode)
+ local old, new = unicode, unicodes[p[2]]
+ if type(new) == "table" then
+ new = new[1]
+ end
+ local s = single[lookup]
+ if not s then s = { } single[lookup] = s end
+ s[old] = new
+ --~ if trace_lookups then
+ --~ logs.report("define otf","lookup %s: substitution %s => %s",lookup,old,new)
+ --~ end
+ end,
+ multiple = function (p,lookup,k,glyph,unicode)
+ local old, new = unicode, { }
+ local m = multiple[lookup]
+ if not m then m = { } multiple[lookup] = m end
+ m[old] = new
+ for pc in gmatch(p[2],"[^ ]+") do
+ local upc = unicodes[pc]
+ if type(upc) == "number" then
+ new[#new+1] = upc
+ else
+ new[#new+1] = upc[1]
+ end
+ end
+ --~ if trace_lookups then
+ --~ logs.report("define otf","lookup %s: multiple %s => %s",lookup,old,concat(new," "))
+ --~ end
+ end,
+ alternate = function(p,lookup,k,glyph,unicode)
+ local old, new = unicode, { }
+ local a = alternate[lookup]
+ if not a then a = { } alternate[lookup] = a end
+ a[old] = new
+ for pc in gmatch(p[2],"[^ ]+") do
+ local upc = unicodes[pc]
+ if type(upc) == "number" then
+ new[#new+1] = upc
+ else
+ new[#new+1] = upc[1]
+ end
+ end
+ --~ if trace_lookups then
+ --~ logs.report("define otf","lookup %s: alternate %s => %s",lookup,old,concat(new,"|"))
+ --~ end
+ end,
+ ligature = function (p,lookup,k,glyph,unicode)
+ --~ if trace_lookups then
+ --~ logs.report("define otf","lookup %s: ligature %s => %s",lookup,p[2],glyph.name)
+ --~ end
+ local first = true
+ local t = ligature[lookup]
+ if not t then t = { } ligature[lookup] = t end
+ for s in gmatch(p[2],"[^ ]+") do
+ if first then
+ local u = unicodes[s]
+ if not u then
+ logs.report("define otf","lookup %s: ligature %s => %s ignored due to invalid unicode",lookup,p[2],glyph.name)
break
- elseif what == 'alternate' then
- local old, new = unicode, { }
- local a = alternate[lookup]
- if not a then a = { } alternate[lookup] = a end
- a[old] = new
- for pc in gmatch(p[2],"[^ ]+") do
- local upc = unicodes[pc]
- if type(upc) == "number" then
- new[#new+1] = upc
- else
- new[#new+1] = upc[1]
- end
+ elseif type(u) == "number" then
+ if not t[u] then
+ t[u] = { { } }
end
---~ if trace_lookups then
---~ logs.report("define otf","lookup %s: alternate %s => %s",lookup,old,concat(new,"|"))
---~ end
- break
- elseif what == "ligature" then
---~ if trace_lookups then
---~ logs.report("define otf","lookup %s: ligature %s => %s",lookup,p[2],glyph.name)
---~ end
- local first = true
- local t = ligature[lookup]
- if not t then t = { } ligature[lookup] = t end
- for s in gmatch(p[2],"[^ ]+") do
- if first then
- local u = unicodes[s]
- if not u then
- logs.report("define otf","lookup %s: ligature %s => %s ignored due to invalid unicode",lookup,p[2],glyph.name)
- break
- elseif type(u) == "number" then
- if not t[u] then
- t[u] = { { } }
- end
- t = t[u]
- else
- local tt = t
- local tu
- for i=1,#u do
- local u = u[i]
- if i==1 then
- if not t[u] then
- t[u] = { { } }
- end
- tu = t[u]
- t = tu
- else
- if not t[u] then
- tt[u] = tu
- end
- end
- end
+ t = t[u]
+ else
+ local tt = t
+ local tu
+ for i=1,#u do
+ local u = u[i]
+ if i==1 then
+ if not t[u] then
+ t[u] = { { } }
end
- first = false
+ tu = t[u]
+ t = tu
else
- s = unicodes[s]
- local t1 = t[1]
- if not t1[s] then
- t1[s] = { { } }
+ if not t[u] then
+ tt[u] = tu
end
- t = t1[s]
end
end
- t[2] = unicode
- elseif what == 'position' then
- -- not used
- local s = position[lookup]
- if not s then s = { } position[lookup] = s end
- s[unicode] = p[2] -- direct pointer to kern spec
- elseif what == 'pair' then
- local s = pair[lookup]
- if not s then s = { } pair[lookup] = s end
- local others = s[unicode]
- if not others then others = { } s[unicode] = others end
- -- todo: fast check for space
- local two = p[2]
- local upc = unicodes[two]
- if not upc then
- for pc in gmatch(two,"[^ ]+") do
- local upc = unicodes[pc]
- if type(upc) == "number" then
- others[upc] = p -- direct pointer to main table
- else
- for i=1,#upc do
- others[upc[i]] = p -- direct pointer to main table
- end
- end
- end
- elseif type(upc) == "number" then
- others[upc] = p -- direct pointer to main table
- else
- for i=1,#upc do
- others[upc[i]] = p -- direct pointer to main table
- end
+ end
+ first = false
+ else
+ s = unicodes[s]
+ local t1 = t[1]
+ if not t1[s] then
+ t1[s] = { { } }
+ end
+ t = t1[s]
+ end
+ end
+ t[2] = unicode
+ end,
+ position = function(p,lookup,k,glyph,unicode)
+ -- not used
+ local s = position[lookup]
+ if not s then s = { } position[lookup] = s end
+ s[unicode] = p[2] -- direct pointer to kern spec
+ end,
+ pair = function(p,lookup,k,glyph,unicode)
+ local s = pair[lookup]
+ if not s then s = { } pair[lookup] = s end
+ local others = s[unicode]
+ if not others then others = { } s[unicode] = others end
+ -- todo: fast check for space
+ local two = p[2]
+ local upc = unicodes[two]
+ if not upc then
+ for pc in gmatch(two,"[^ ]+") do
+ local upc = unicodes[pc]
+ if type(upc) == "number" then
+ others[upc] = p -- direct pointer to main table
+ else
+ for i=1,#upc do
+ others[upc[i]] = p -- direct pointer to main table
end
---~ if trace_lookups then
---~ logs.report("define otf","lookup %s: pair for U+%04X",lookup,unicode)
---~ end
end
end
+ elseif type(upc) == "number" then
+ others[upc] = p -- direct pointer to main table
+ else
+ for i=1,#upc do
+ others[upc[i]] = p -- direct pointer to main table
+ end
+ end
+ --~ if trace_lookups then
+ --~ logs.report("define otf","lookup %s: pair for U+%04X",lookup,unicode)
+ --~ end
+ end,
+ }
+ --
+ for unicode, glyph in next, descriptions do
+ local lookups = glyph.slookups
+ if lookups then
+ for lookup, p in next, lookups do
+ action[p[1]](p,lookup,k,glyph,unicode)
+ end
+ end
+ local lookups = glyph.mlookups
+ if lookups then
+ for lookup, whatever in next, lookups do
+ for i=1,#whatever do -- normaly one
+ local p = whatever[i]
+ action[p[1]](p,lookup,k,glyph,unicode)
+ end
end
end
local list = glyph.mykerns
@@ -2310,9 +2434,9 @@ local function prepare_lookups(tfmdata)
local k = kerns[lookup]
if not k then k = { } kerns[lookup] = k end
k[unicode] = krn -- ref to glyph, saves lookup
---~ if trace_lookups then
---~ logs.report("define otf","lookup %s: kern for U+%04X",lookup,unicode)
---~ end
+ --~ if trace_lookups then
+ --~ logs.report("define otf","lookup %s: kern for U+%04X",lookup,unicode)
+ --~ end
end
end
local oanchor = glyph.anchors
@@ -2326,9 +2450,9 @@ local function prepare_lookups(tfmdata)
local f = mark[lookup]
if not f then f = { } mark[lookup] = f end
f[unicode] = anchors -- ref to glyph, saves lookup
---~ if trace_lookups then
---~ logs.report("define otf","lookup %s: mark anchor %s for U+%04X",lookup,name,unicode)
---~ end
+ --~ if trace_lookups then
+ --~ logs.report("define otf","lookup %s: mark anchor %s for U+%04X",lookup,name,unicode)
+ --~ end
end
end
end
@@ -2340,9 +2464,9 @@ local function prepare_lookups(tfmdata)
local f = cursive[lookup]
if not f then f = { } cursive[lookup] = f end
f[unicode] = anchors -- ref to glyph, saves lookup
---~ if trace_lookups then
---~ logs.report("define otf","lookup %s: exit anchor %s for U+%04X",lookup,name,unicode)
---~ end
+ --~ if trace_lookups then
+ --~ logs.report("define otf","lookup %s: exit anchor %s for U+%04X",lookup,name,unicode)
+ --~ end
end
end
end
@@ -2456,6 +2580,46 @@ function prepare_contextchains(tfmdata)
end
end
end
+ elseif fmt == "glyphs" then
+ if lookuptype ~= "chainsub" and lookuptype ~= "chainpos" then
+ logs.report("otf process","unsupported coverage %s for %s",lookuptype,lookupname)
+ else
+ local contexts = contextchain[lookupname]
+ if not contexts then
+ contexts = { }
+ contextchain[lookupname] = contexts
+ end
+ local t = { }
+ for nofrules=1,#rules do
+ -- nearly the same as coverage so we could as well rename it
+ local rule = rules[nofrules]
+ local glyphs = rule.glyphs
+ if glyphs and glyphs.names then
+ local fore, back, names, sequence = glyphs.fore, glyphs.back, glyphs.names, { }
+ if fore and fore ~= "" then
+ fore = lpegmatch(split_at_space,fore)
+ uncover(fore,sequence,cache,unicodes)
+ end
+ local start = #sequence + 1
+ names = lpegmatch(split_at_space,names)
+ uncover(names,sequence,cache,unicodes)
+ local stop = #sequence
+ if back and back ~= "" then
+ back = lpegmatch(split_at_space,back)
+ uncover(back,sequence,cache,unicodes)
+ end
+ if sequence[1] then
+ t[#t+1] = { nofrules, lookuptype, sequence, start, stop, rule.lookups }
+ for unic, _ in next, sequence[start] do
+ local cu = contexts[unic]
+ if not cu then
+ contexts[unic] = t
+ end
+ end
+ end
+ end
+ end
+ end
end
end
end
diff --git a/Master/texmf-dist/tex/context/base/font-otp.lua b/Master/texmf-dist/tex/context/base/font-otp.lua
index 3cdc8073720..a80c515ad6e 100644
--- a/Master/texmf-dist/tex/context/base/font-otp.lua
+++ b/Master/texmf-dist/tex/context/base/font-otp.lua
@@ -8,7 +8,8 @@ if not modules then modules = { } end modules ['font-otp'] = {
-- todo: pack math (but not that much to share)
-local next = next
+local next, type, tostring = next, type, tostring
+local sort, concat = table.sort, table.concat
local trace_loading = false trackers.register("otf.loading", function(v) trace_loading = v end)
@@ -19,6 +20,19 @@ fonts.otf.glists = fonts.otf.glists or { "gsub", "gpos" }
local criterium, threshold, tabstr = 1, 0, table.serialize
+local function tabstr(t) -- hashed from core-uti / experiment
+ local s = { }
+ for k, v in next, t do
+ if type(v) == "table" then
+ s[#s+1] = k.."={"..tabstr(v).."}"
+ else
+ s[#s+1] = k.."="..tostring(v)
+ end
+ end
+ sort(s)
+ return concat(s,",")
+end
+
function fonts.otf.enhancers.pack(data)
if data then
local h, t, c = { }, { }, { }
@@ -98,7 +112,13 @@ function fonts.otf.enhancers.pack(data)
local pack = (pass == 1 and pack_1) or pack_2
for k, v in next, data.glyphs do
v.boundingbox = pack(v.boundingbox)
- local l = v.lookups
+ local l = v.slookups
+ if l then
+ for k,v in next, l do
+ l[k] = pack(v)
+ end
+ end
+ local l = v.mlookups
if l then
for k,v in next, l do
for kk=1,#v do
@@ -156,15 +176,21 @@ function fonts.otf.enhancers.pack(data)
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)
+ local cc = c.before if cc then c.before = pack(cc) end
+ local cc = c.after if cc then c.after = pack(cc) end
+ local cc = c.current if cc then c.current = pack(cc) end
end
local c = vv.reversecoverage
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)
+ local cc = c.before if cc then c.before = pack(cc) end
+ local cc = c.after if cc then c.after = pack(cc) end
+ local cc = c.current if cc then c.current = pack(cc) end
+ end
+ -- no need to pack vv.glyphs
+ local c = vv.glyphs
+ if c then
+ if c.fore == "" then c.fore = nil end
+ if c.back == "" then c.back = nil end
end
end
end
@@ -250,7 +276,7 @@ function fonts.otf.enhancers.pack(data)
if a then
v.anchors = pack(a)
end
- local l = v.lookups
+ local l = v.mlookups
if l then
for k,v in next, l do
for kk=1,#v do
@@ -277,54 +303,101 @@ function fonts.otf.enhancers.unpack(data)
if data then
local t = data.tables
if t then
+ local unpacked = { }
for k, v in next, data.glyphs do
local tv = t[v.boundingbox] if tv then v.boundingbox = tv end
- local l = v.lookups
+ local l = v.slookups
+ if l then
+ for k,v in next, l do
+ local tv = t[v] if tv then l[k] = tv end
+ end
+ end
+ local l = v.mlookups
if l then
for k,v in next, l do
for i=1,#v do
- local tv = t[v[i]] if tv then v[i] = tv end
local vi = v[i]
- local what = vi[1]
- if what == "pair" then
- local tv = t[vi[3]] if tv then vi[3] = tv end
- local tv = t[vi[4]] if tv then vi[4] = tv end
- elseif what == "position" then
- local tv = t[vi[2]] if tv then vi[2] = tv end
+ local tv = t[vi]
+ if tv then
+ v[i] = tv
+ if unpacked[tv] then
+ vi = false
+ else
+ unpacked[tv], vi = true, tv
+ end
+ end
+ if vi then
+ local what = vi[1]
+ if what == "pair" then
+ local tv = t[vi[3]] if tv then vi[3] = tv end
+ local tv = t[vi[4]] if tv then vi[4] = tv end
+ elseif what == "position" then
+ local tv = t[vi[2]] if tv then vi[2] = tv end
+ end
end
end
end
end
local m = v.mykerns
if m then
- local tv = t[m] if tv then m = tv v.mykerns = m end -- secondary optimization
- for k,v in next, m do
- local tv = t[v] if tv then m[k] = tv end
+ local tm = t[m]
+ if tm then
+ v.mykerns = tm
+ if unpacked[tm] then
+ m = false
+ else
+ unpacked[tm], m = true, tm
+ end
+ end
+ if m then
+ for k,v in next, m do
+ local tv = t[v] if tv then m[k] = tv end
+ end
end
end
local m = v.math
if m then
local mk = m.kerns
if mk then
- local tv = t[mk] if tv then mk = tv m.kerns = mk end -- secondary optimization
- for k,v in next, mk do
- local tv = t[v] if tv then mk[k] = tv end
+ local tm = t[mk]
+ if tm then
+ m.kerns = tm
+ if unpacked[tm] then
+ mk = false
+ else
+ unpacked[tm], mk = true, tm
+ end
+ end
+ if mk then
+ for k,v in next, mk do
+ local tv = t[v] if tv then mk[k] = tv end
+ end
end
end
end
local a = v.anchors
if a then
- local tv = t[a] if tv then a = tv v.anchors = a end -- secondary optimization
- for k,v in next, a do
- if k == "baselig" then
- for kk, vv in next, v do
- for kkk=1,#vv do
- local tv = t[vv[kkk]] if tv then vv[kkk] = tv end
- end
- end
+ local ta = t[a]
+ if ta then
+ v.anchors = ta
+ if not unpacked[ta] then
+ unpacked[ta], a = true, ta
else
- for kk, vv in next, v do
- local tv = t[vv] if tv then v[kk] = tv end
+ a = false
+ end
+ end
+ if a then
+ for k,v in next, a do
+ if k == "baselig" then
+ for kk, vv in next, v do
+ for kkk=1,#vv do
+ local tv = t[vv[kkk]] if tv then vv[kkk] = tv end
+ end
+ end
+ else
+ for kk, vv in next, v do
+ local tv = t[vv] if tv then v[kk] = tv end
+ end
end
end
end
@@ -351,6 +424,7 @@ function fonts.otf.enhancers.unpack(data)
cc = c.after if cc then local tv = t[cc] if tv then c.after = tv end end
cc = c.current if cc then local tv = t[cc] if tv then c.current = tv end end
end
+ -- no need to unpack vv.glyphs
end
end
end
@@ -382,9 +456,19 @@ function fonts.otf.enhancers.unpack(data)
end
local features = fdata.features
if features then
- local tv = t[features] if tv then fdata.features = tv features = tv end -- secondary pack
- for script, sdata in next, features do
- local tv = t[sdata] if tv then features[script] = tv end
+ local tv = t[features]
+ if tv then
+ fdata.features = tv
+ if not unpacked[tv] then
+ unpacked[tv], features = true, tv
+ else
+ features = false
+ end
+ end
+ if features then
+ for script, sdata in next, features do
+ local tv = t[sdata] if tv then features[script] = tv end
+ end
end
end
end
diff --git a/Master/texmf-dist/tex/context/base/font-ott.lua b/Master/texmf-dist/tex/context/base/font-ott.lua
index 47c2e0e9fe0..2be1bf06c00 100644
--- a/Master/texmf-dist/tex/context/base/font-ott.lua
+++ b/Master/texmf-dist/tex/context/base/font-ott.lua
@@ -87,7 +87,7 @@ otf.tables.scripts = {
['ugar'] = 'Ugaritic Cuneiform',
['xpeo'] = 'Old Persian Cuneiform',
['xsux'] = 'Sumero-Akkadian Cuneiform',
- ['yi' ] = 'Yi'
+ ['yi' ] = 'Yi',
}
otf.tables.languages = {
@@ -569,6 +569,7 @@ otf.tables.features = {
['rphf'] = 'Reph Form',
['rtbd'] = 'Right Bounds',
['rtla'] = 'Right-To-Left Alternates',
+ ['rtlm'] = 'Right To Left Math', -- math
['ruby'] = 'Ruby Notation Forms',
['salt'] = 'Stylistic Alternates',
['sinf'] = 'Scientific Inferiors',
@@ -671,16 +672,24 @@ local to_scripts = otf.tables.to_scripts
local to_languages = otf.tables.to_languages
local to_features = otf.tables.to_features
-for k, v in pairs(to_features) do
+for k, v in next, to_features do
local stripped = gsub(k,"%-"," ")
to_features[stripped] = v
local stripped = gsub(k,"[^a-zA-Z0-9]","")
to_features[stripped] = v
end
-for k, v in pairs(to_features) do
+for k, v in next, to_features do
to_features[lower(k)] = v
end
+otf.meanings.checkers = {
+ rand = function(v)
+ return v and "random"
+ end
+}
+
+local checkers = otf.meanings.checkers
+
function otf.meanings.normalize(features)
local h = { }
for k,v in next, features do
@@ -709,7 +718,9 @@ function otf.meanings.normalize(features)
v = b
end
end
- h[to_features[k] or k] = v
+ k = to_features[k] or k
+ local c = checkers[k]
+ h[k] = c and c(v) or v
end
end
return h
diff --git a/Master/texmf-dist/tex/context/base/font-pat.lua b/Master/texmf-dist/tex/context/base/font-pat.lua
index ae91700a90e..6aba4d47e3d 100644
--- a/Master/texmf-dist/tex/context/base/font-pat.lua
+++ b/Master/texmf-dist/tex/context/base/font-pat.lua
@@ -1,15 +1,17 @@
if not modules then modules = { } end modules ['font-pat'] = {
version = 1.001,
- comment = "companion to font-ini.tex",
+ comment = "companion to font-ini.mkiv",
author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
copyright = "PRAGMA ADE / ConTeXt Development Team",
license = "see context related readme files"
}
-local match, lower = string.match, string.lower
+local match, lower, find = string.match, string.lower, string.find
local trace_loading = false trackers.register("otf.loading", function(v) trace_loading = v end)
+-- this will become a per font patch file
+--
-- older versions of latin modern didn't have the designsize set
-- so for them we get it from the name
@@ -92,3 +94,33 @@ local function patch(data,filename)
end
patches["palatino.*arabic"] = patch
+
+local function patch_domh(data,filename,threshold)
+ local m = data.math
+ if m then
+ local d = m.DisplayOperatorMinHeight or 0
+ if d < threshold then
+ if trace_loading then
+ logs.report("load otf","patching DisplayOperatorMinHeight(%s -> %s)",d,threshold)
+ end
+ m.DisplayOperatorMinHeight = threshold
+ end
+ end
+ if tex.luatexversion < 48 then
+ for _, g in next, data.glyphs do
+ local name = g.name
+ if find(name,"^integral$") or find(name,"^integral%.vsize") then
+ local width, italic = g.width or 0, g.italic_correction or 0
+ local newwidth = width - italic
+ if trace_loading then
+ logs.report("load otf","patching width of %s: %s (width) - %s (italic) = %s",name,width,italic,newwidth)
+ end
+ g.width = newwidth
+ end
+ end
+ end
+end
+
+patches["cambria"] = function(data,filename) patch_domh(data,filename,2800) end
+patches["cambmath"] = function(data,filename) patch_domh(data,filename,2800) end
+patches["asana"] = function(data,filename) patch_domh(data,filename,1350) end
diff --git a/Master/texmf-dist/tex/context/base/font-run.mkiv b/Master/texmf-dist/tex/context/base/font-run.mkiv
index 4cc098e2ce1..aad6bebe88e 100644
--- a/Master/texmf-dist/tex/context/base/font-run.mkiv
+++ b/Master/texmf-dist/tex/context/base/font-run.mkiv
@@ -108,10 +108,32 @@
\gdef\doshowfont[#1][#2]%
{\bgroup
- \boxrulewidth=.1pt
- \setupcolors[\c!state=\v!local]%
\iffirstargument
\definefont[\s!dummy][#1]\dummy
+ \fi
+ \doifelsenothing{#2}
+ {\dodoshowfont{#1}{0}}
+ {\doifelse{#2}\v!all
+ {\dostepwiserecurse{0}{255}{1}
+ {\donefalse
+ \let\charplane\recurselevel
+ \dostepwiserecurse{0}{255}{1}
+ {\iffontchar\font\numexpr\charplane*256+\recurselevel\relax
+ \donetrue
+ \exitloop
+ \fi}%
+ \ifdone
+ \dodoshowfont{#1}\charplane
+ \fi}}
+ {\processcommalist[#2]{\dodoshowfont{#1}}}}%
+ \egroup}
+
+\gdef\dodoshowfont#1#2%
+ {\bgroup
+ \edef\charplane{\number#2}%
+ \boxrulewidth=.1pt
+ \iffirstargument
+% \definefont[\s!dummy][#1]\dummy
\else\ifdim2.5em>.05\hsize \tx
\ifdim2.5em>.05\hsize \txx
\fi\fi\fi
@@ -131,7 +153,7 @@
\@EA\scratchcounter\string"\hexnumber\row\hexnumber\col\relax
\edef\rowcol{\the\scratchcounter}%
\iffontchar\font\scratchcounter
- \setbox\scratchbox\ruledhbox{\black\char\scratchcounter}%
+ \setbox\scratchbox\ruledhbox{\black\char\numexpr\charplane*256+\scratchcounter\relax}%
\ifdim\wd\scratchbox>\zeropoint
\donetrue \else \donefalse
\fi
@@ -159,11 +181,8 @@
{\ifdone
\hsize2.4em
\blue
- \edef\theshowfontspecs
- {\ifnum\hyphenchar\font=\rowcol hyph\else
- \ifnum\skewchar \font=\rowcol skew\fi\fi}%
- \tinyfont % after \edef, else wrong font analyzed
- \doifnot\v!unknown{#2}{{\red\theshowfontspecs}}\hfill\number\rowcol
+ \tinyfont
+ \hfill\number\rowcol
\vfill
\octnumber\rowcol\hfill\lchexnumbers\rowcol
\par
@@ -177,14 +196,7 @@
% 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
- \do\currentencoding{encoding: {\noexpand\black\currentencoding\noexpand\quad}}%
- \do\currentmapping {mapping: {\noexpand\black\currentmapping \noexpand\quad}}%
- \do\fonthandling {handling: {\noexpand\black\fonthandling }}}}%
+ \edef\theshowfontspecs{name: {\noexpand\black\fontname\font}\quad plane: \charplane\enspace"\hexnumber\charplane}%
\tf % also sets em
\hbox to 40em{\blue\hfill\tinyfont\setstrut\strut\theshowfontspecs}
\egroup
@@ -227,7 +239,6 @@
\@@onlyenglish\showligatures
\else
\bgroup
- \setupcolors[\c!state=\v!local]%
\def\show##1{\hbox{\red\ruledhbox{\black##1}}}%
\definefont[\s!dummy][#1]\dummy
\starttabulate[|*{9}{c|}]
diff --git a/Master/texmf-dist/tex/context/base/font-syn.lua b/Master/texmf-dist/tex/context/base/font-syn.lua
index 828808ec59d..5ad92e0022d 100644
--- a/Master/texmf-dist/tex/context/base/font-syn.lua
+++ b/Master/texmf-dist/tex/context/base/font-syn.lua
@@ -1,15 +1,24 @@
if not modules then modules = { } end modules ['font-syn'] = {
version = 1.001,
- comment = "companion to font-ini.tex",
+ comment = "companion to font-ini.mkiv",
author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
copyright = "PRAGMA ADE / ConTeXt Development Team",
license = "see context related readme files"
}
-local next = next
+-- todo: subs in lookups requests
+
+local utf = unicode.utf8
+local next, tonumber = next, tonumber
local gsub, lower, match, find, lower, upper = string.gsub, string.lower, string.match, string.find, string.lower, string.upper
+local find, gmatch = string.find, string.gmatch
+local concat, sort, format = table.concat, table.sort, string.format
+local lpegmatch = lpeg.match
+local utfgsub, utflower = utf.gsub, utf.lower
+local unpack = unpack or table.unpack
-local trace_names = false trackers.register("fonts.names", function(v) trace_names = v end)
+local trace_names = false trackers.register("fonts.names", function(v) trace_names = v end)
+local trace_warnings = false trackers.register("fonts.warnings", function(v) trace_warnings = v end)
--[[ldx--
<p>This module implements a name to filename resolver. Names are resolved
@@ -29,7 +38,7 @@ fonts.names.data = fonts.names.data or { }
local names = fonts.names
local filters = fonts.names.filters
-names.version = 1.08 -- when adapting this, also changed font-dum.lua
+names.version = 1.103
names.basename = "names"
names.saved = false
names.loaded = false
@@ -39,6 +48,103 @@ names.autoreload = toboolean(os.env['MTX.FONTS.AUTOLOAD'] or os.env['MTX_FONTS_A
names.cache = containers.define("fonts","data",names.version,true)
--[[ldx--
+<p>A few helpers.</p>
+--ldx]]--
+
+local P, C, Cc, Cs, Carg = lpeg.P, lpeg.C, lpeg.Cc, lpeg.Cs, lpeg.Carg
+
+-- what to do with 'thin'
+
+local weights = Cs ( -- not extra
+ P("demibold")
+ + P("semibold")
+ + P("mediumbold")
+ + P("ultrabold")
+ + P("extrabold")
+ + P("ultralight")
+ + P("bold")
+ + P("demi")
+ + P("semi")
+ + P("light")
+ + P("medium")
+ + P("heavy")
+ + P("ultra")
+ + P("black")
+ + P("bol") -- / "bold"
+ + P("regular") / "normal"
+)
+
+local styles = Cs (
+ P("reverseoblique") / "reverseitalic"
+ + P("regular") / "normal"
+ + P("italic")
+ + P("oblique") / "italic"
+ + P("slanted")
+ + P("roman") / "normal"
+ + P("ital") / "italic"
+ + P("ita") / "italic"
+)
+
+local widths = Cs(
+ P("condensed")
+ + P("thin")
+ + P("expanded")
+ + P("cond") / "condensed"
+ + P("normal")
+ + P("book") / "normal"
+)
+
+local variants = Cs( -- fax casual
+ P("smallcaps")
+ + P("oldstyle")
+ + P("caps") / "smallcaps"
+)
+
+local any = P(1)
+
+local analysed_table
+
+local analyser = Cs (
+ (
+ weights / function(s) analysed_table[1] = s return "" end
+ + styles / function(s) analysed_table[2] = s return "" end
+ + widths / function(s) analysed_table[3] = s return "" end
+ + variants / function(s) analysed_table[4] = s return "" end
+ + any
+ )^0
+)
+
+local splitter = lpeg.splitat("-")
+
+function names.splitspec(askedname)
+ local name, weight, style, width, variant = lpegmatch(splitter,askedname)
+ weight = weight and lpegmatch(weights, weight) or weight
+ style = style and lpegmatch(styles, style) or style
+ width = width and lpegmatch(widths, width) or width
+ variant = variant and lpegmatch(variants,variant) or variant
+ if trace_names then
+ logs.report("fonts","requested name '%s' split in name '%s', weight '%s', style '%s', width '%s' and variant '%s'",
+ askedname,name or '',weight or '',style or '',width or '',variant or '')
+ end
+ if not weight or not weight or not width or not variant then
+ weight, style, width, variant = weight or "normal", style or "normal", width or "normal", variant or "normal"
+ if trace_names then
+ logs.report("fonts","request '%s' normalized to '%s-%s-%s-%s-%s'",
+ askedname,name,weight,style,width,variant)
+ end
+ end
+ return name or askedname, weight, style, width, variant
+end
+
+local function analysespec(somename)
+ if somename then
+ analysed_table = { }
+ local name = lpegmatch(analyser,somename)
+ return name, analysed_table[1], analysed_table[2], analysed_table[3], analysed_table[4]
+ end
+end
+
+--[[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]]--
@@ -48,6 +154,20 @@ filters.ttf = fontloader.info
filters.ttc = fontloader.info
filters.dfont = fontloader.info
+function fontloader.fullinfo(...)
+ local ff = fontloader.open(...)
+ if ff then
+ local d = ff and fontloader.to_table(ff)
+ d.glyphs, d.subfonts, d.gpos, d.gsub, d.lookups = nil, nil, nil, nil, nil
+ fontloader.close(ff)
+ return d
+ else
+ return nil, "error in loading font"
+ end
+end
+
+filters.otf = fontloader.fullinfo
+
function filters.afm(name)
-- we could parse the afm file as well, and then report an error but
-- it's not worth the trouble
@@ -87,14 +207,7 @@ for combination with the weight of a font.</p>
filters.list = {
"otf", "ttf", "ttc", "dfont", "afm",
-}
-
-filters.fixes = {
- { "reg$", "regular", },
- { "ita$", "italic", },
- { "ital$", "italic", },
- { "cond$", "condensed", },
- { "book$", "", },
+--~ "ttc", "otf", "ttf", "dfont", "afm",
}
names.xml_configuration_file = "fonts.conf" -- a bit weird format, bonus feature
@@ -132,7 +245,7 @@ function names.getpaths(trace)
end
end
if name ~= "" and lfs.isfile(name) then
- if trace then
+ if trace_names then
logs.report("fontnames","loading fontconfig file: %s",name)
end
local xmldata = xml.load(name)
@@ -145,17 +258,17 @@ function names.getpaths(trace)
end
end
if lfs.isfile(incname) then
- if trace then
+ if trace_names then
logs.report("fontnames","merging included fontconfig file: %s",incname)
end
return io.loaddata(incname)
- elseif trace then
+ elseif trace_names then
logs.report("fontnames","ignoring included fontconfig file: %s",incname)
end
end)
-- end of untested mess
local fontdirs = xml.collect_texts(xmldata,"dir",true)
- if trace then
+ if trace_names then
logs.report("fontnames","%s dirs found in fontconfig",#fontdirs)
end
collect(fontdirs)
@@ -168,55 +281,332 @@ function names.getpaths(trace)
return result
end
-function names.cleanname(name)
+local function cleanname(name)
return (gsub(lower(name),"[^%a%d]",""))
+ -- once we can load files with utf names, we can play with the following:
+ -- return (utfgsub(utfgsub(lower(str),"[^%a%A%d]",""),"%s",""))
end
-function names.identify(verbose) -- lsr is for kpse
- names.data = {
- version = names.version,
- mapping = { },
- -- sorted = { },
- fallback_mapping = { },
- -- fallback_sorted = { },
+names.cleanname = cleanname
+
+local function check_names(result)
+ local names = result.names
+ if names then
+ for i=1,#names do
+ local name = names[i]
+ if name.lang == "English (US)" then
+ return name.names
+ end
+ end
+ end
+end
+
+local function walk_tree(pathlist,suffix,identify)
+ if pathlist then
+ for i=1,#pathlist do
+ local path = pathlist[i]
+ path = resolvers.clean_path(path .. "/")
+ path = gsub(path,"/+","/")
+ local pattern = path .. "**." .. suffix -- ** forces recurse
+ logs.report("fontnames", "globbing path %s",pattern)
+ local t = dir.glob(pattern)
+ sort(t,sorter)
+ for j=1,#t do
+ local completename = t[j]
+ identify(completename,file.basename(completename),suffix,completename)
+ end
+ end
+ end
+end
+
+local function check_name(data,result,filename,suffix,subfont)
+ -- shortcuts
+ local specifications = data.specifications
+ local families = data.families
+ -- prepare
+ local names = check_names(result)
+ -- fetch
+ local familyname = (names and names.preffamilyname) or result.familyname
+ local fullname = (names and names.fullname) or result.fullname
+ local fontname = result.fontname
+ local subfamily = (names and names.subfamily)
+ local modifiers = (names and names.prefmodifiers)
+ local weight = (names and names.weight) or result.weight
+ local italicangle = tonumber(result.italicangle)
+ local subfont = subfont or nil
+ local rawname = fullname or fontname or familyname
+ -- normalize
+ familyname = familyname and cleanname(familyname)
+ fullname = fullname and cleanname(fullname)
+ fontname = fontname and cleanname(fontname)
+ subfamily = subfamily and cleanname(subfamily)
+ modifiers = modifiers and cleanname(modifiers)
+ weight = weight and cleanname(weight)
+ italicangle = (italicangle == 0) and nil
+ -- analyse
+ local a_name, a_weight, a_style, a_width, a_variant = analysespec(fullname or fontname or familyname)
+ -- check
+ local width = a_width
+ local variant = a_variant
+ local style = modifiers and gsub(modifiers,"[^%a]","")
+ if not style and italicangle then
+ style = "italic"
+ end
+ if not variant or variant == "" then
+ variant = "normal"
+ end
+ if not weight or weight == "" then
+ weight = a_weight
+ end
+ if not style or style == "" then
+ style = a_style
+ end
+ if not familyname then
+ familyname = a_name
+ end
+ fontname = fontname or fullname or familyname or file.basename(filename)
+ fullname = fullname or fontname
+ familyname = familyname or fontname
+ specifications[#specifications + 1] = {
+ filename = filename,
+ format = lower(suffix),
+ subfont = subfont,
+ rawname = rawname,
+ familyname = familyname,
+ fullname = fullname,
+ fontname = fontname,
+ subfamily = subfamily,
+ modifiers = modifiers,
+ weight = weight,
+ style = style,
+ width = width,
+ variant = variant,
+ minsize = result.design_range_bottom or 0,
+ maxsize = result.design_range_top or 0,
+ designsize = result.design_size or 0,
}
- local done, mapping, fallback_mapping, nofread, nofok = { }, names.data.mapping, names.data.fallback_mapping, 0, 0
- local cleanname = names.cleanname
- local function check(result, filename, suffix, is_sub)
- local fontname = result.fullname
- if fontname then
- local n = cleanname(result.fullname)
- if not mapping[n] then
- mapping[n], nofok = { lower(suffix), fontname, filename, is_sub }, nofok + 1
+end
+
+local function cleanupkeywords()
+ local data = names.data
+ local specifications = names.data.specifications
+ if specifications then
+ local weights, styles, widths, variants = { }, { }, { }, { }
+ for i=1,#specifications do
+ local s = specifications[i]
+ -- fix (sofar styles are taken from the name, and widths from the specification)
+ local _, b_weight, b_style, b_width, b_variant = analysespec(s.weight)
+ local _, c_weight, c_style, c_width, c_variant = analysespec(s.style)
+ local _, d_weight, d_style, d_width, d_variant = analysespec(s.width)
+ local _, e_weight, e_style, e_width, e_variant = analysespec(s.variant)
+ local _, f_weight, f_style, f_width, f_variant = analysespec(s.fullname or "")
+ local weight = b_weight or c_weight or d_weight or e_weight or f_weight or "normal"
+ local style = b_style or c_style or d_style or e_style or f_style or "normal"
+ local width = b_width or c_width or d_width or e_width or f_width or "normal"
+ local variant = b_variant or c_variant or d_variant or e_variant or f_variant or "normal"
+ if not weight or weight == "" then weight = "normal" end
+ if not style or style == "" then style = "normal" end
+ if not width or width == "" then width = "normal" end
+ if not variant or variant == "" then variant = "normal" end
+ weights [weight ] = (weights [weight ] or 0) + 1
+ styles [style ] = (styles [style ] or 0) + 1
+ widths [width ] = (widths [width ] or 0) + 1
+ variants[variant] = (variants[variant] or 0) + 1
+ if weight ~= s.weight then
+ s.fontweight = s.weight
+ end
+ s.weight, s.style, s.width, s.variant = weight, style, width, variant
+ end
+ local stats = data.statistics
+ stats.used_weights, stats.used_styles, stats.used_widths, stats.used_variants = weights, styles, widths, variants
+ end
+end
+
+local function collectstatistics()
+ local data = names.data
+ local specifications = data.specifications
+ if specifications then
+ local weights, styles, widths, variants = { }, { }, { }, { }
+ for i=1,#specifications do
+ local s = specifications[i]
+ local weight, style, width, variant = s.weight, s.style, s.width, s.variant
+ if weight then weights [weight ] = (weights [weight ] or 0) + 1 end
+ if style then styles [style ] = (styles [style ] or 0) + 1 end
+ if width then widths [width ] = (widths [width ] or 0) + 1 end
+ if variant then variants[variant] = (variants[variant] or 0) + 1 end
+ end
+ local stats = data.statistics
+ stats.weights, stats.styles, stats.widths, stats.variants, stats.fonts = weights, styles, widths, variants, #specifications
+ end
+end
+
+local function collecthashes()
+ local data = names.data
+ local mappings = data.mappings
+ local fallbacks = data.fallbacks
+ local specifications = data.specifications
+ local nofmappings, noffallbacks = 0, 0
+ if specifications then
+ -- maybe multiple passes
+ for index=1,#specifications do
+ local s = specifications[index]
+ local format, fullname, fontname, familyname, weight, subfamily = s.format, s.fullname, s.fontname, s.familyname, s.weight, s.subfamily
+ local mf, ff = mappings[format], fallbacks[format]
+ if fullname and not mf[fullname] then
+ mf[fullname], nofmappings = index, nofmappings + 1
+ end
+ if fontname and not mf[fontname] then
+ mf[fontname], nofmappings = index, nofmappings + 1
+ end
+ if familyname and weight then
+ local madename = familyname .. weight
+ if not mf[madename] and not ff[madename] then
+ ff[madename], noffallbacks = index, noffallbacks + 1
+ end
+ end
+ if familyname and subfamily then
+ local extraname = familyname .. subfamily
+ if not mf[extraname] and not ff[extraname] then
+ ff[extraname], noffallbacks = index, noffallbacks + 1
+ end
+ end
+ if familyname then
+ if not mf[familyname] and not ff[familyname] then
+ ff[familyname], noffallbacks = index, noffallbacks + 1
+ end
+ end
+ end
+ end
+ return nofmappings, noffallbacks
+end
+
+local function collectfamilies()
+ local data = names.data
+ local specifications = data.specifications
+ local families = data.families
+ for index=1,#specifications do
+ local familyname = specifications[index].familyname
+ local family = families[familyname]
+ if not family then
+ families[familyname] = { index }
+ else
+ family[#family+1] = index
+ end
+ end
+end
+
+local function checkduplicate(where) -- fails on "Romantik" but that's a border case anyway
+ local data = names.data
+ local mapping = data[where]
+ local specifications, loaded = data.specifications, { }
+ if specifications and mapping then
+ for _, m in next, mapping do
+ for k, v in next, m do
+ local s = specifications[v]
+ local hash = format("%s-%s-%s-%s-%s",s.familyname,s.weight or "*",s.style or "*",s.width or "*",s.variant or "*")
+ local h = loaded[hash]
+ if h then
+ local ok = true
+ local fn = s.filename
+ for i=1,#h do
+ local hn = s.filename
+ if h[i] == fn then
+ ok = false
+ break
+ end
+ end
+ if ok then
+ h[#h+1] = fn
+ end
+ else
+ loaded[hash] = { s.filename }
+ end
+ end
+ end
+ end
+ local n = 0
+ for k, v in table.sortedhash(loaded) do
+ local nv = #v
+ if nv > 1 then
+ if trace_warnings then
+ logs.report("fontnames", "double lookup: %s => %s",k,concat(v," | "))
+ end
+ n = n + nv
+ end
+ end
+ logs.report("fontnames", "%s double lookups in %s",n,where)
+end
+
+local function checkduplicates()
+ checkduplicate("mappings")
+ checkduplicate("fallbacks")
+end
+
+local sorter = function(a,b)
+ return a > b -- to be checked
+end
+
+local function sorthashes()
+ local data, list = names.data, filters.list
+ local mappings, fallbacks, sorted_mappings, sorted_fallbacks = data.mappings, data.fallbacks, { }, { }
+ data.sorted_mappings, data.sorted_fallbacks = sorted_mappings, sorted_fallbacks
+ for i=1,#list do
+ local l = list[i]
+ sorted_mappings[l], sorted_fallbacks[l] = table.keys(mappings[l]), table.keys(fallbacks[l])
+ sort(sorted_mappings[l],sorter)
+ sort(sorted_fallbacks[l],sorter)
+ end
+ data.sorted_families = table.keys(data.families)
+ sort(data.sorted_families,sorter)
+end
+
+local function unpackreferences()
+ local data = names.data
+ local specifications = data.specifications
+ if specifications then
+ for k, v in next, data.families do
+ for i=1,#v do
+ v[i] = specifications[v[i]]
end
end
- if result.fontname then
- fontname = fontname or result.fontname
- local n = cleanname(result.fontname)
- if not mapping[n] then
- mapping[n], nofok = { lower(suffix), fontname, filename, is_sub }, nofok + 1
+ local mappings = data.mappings
+ if mappings then
+ for _, m in next, mappings do
+ for k, v in next, m do
+ m[k] = specifications[v]
+ end
end
end
- if result.familyname and result.weight and result.italicangle == 0 then
- local madename = result.familyname .. " " .. result.weight
- fontname = fontname or madename
- local n = cleanname(fontname)
- if not mapping[n] and not fallback_mapping[n] then
- fallback_mapping[n], nofok = { lower(suffix), fontname, filename, is_sub }, nofok + 1
+ local fallbacks = data.fallbacks
+ if fallbacks then
+ for _, f in next, fallbacks do
+ for k, v in next, f do
+ f[k] = specifications[v]
+ end
end
end
end
- local trace = verbose or trace_names
- local skip_paths = filters.paths
- local skip_names = filters.names
+end
+
+local function analysefiles()
+ local data = names.data
+ local done, totalnofread, totalnofskipped = { }, 0, 0
+ local skip_paths, skip_names = filters.paths, filters.names
local function identify(completename,name,suffix,storedname)
- if not done[name] and io.exists(completename) then
+ local basename = file.basename(completename)
+ local basepath = file.dirname(completename)
+ if done[name] then
+ -- already done (avoid otf afm clash)
+ elseif not io.exists(completename) then
+ -- weird error
+ elseif not file.is_qualified_path(completename) and resolvers.find_file(completename,suffix) == "" then
+ -- not locateble by backend anyway
+ else
nofread = nofread + 1
if #skip_paths > 0 then
- local path = file.dirname(completename)
for i=1,#skip_paths do
- if find(path,skip_paths[i]) then
- if trace then
+ if find(basepath,skip_paths[i]) then
+ if trace_names then
logs.report("fontnames","rejecting path of %s font %s",suffix,completename)
logs.push()
end
@@ -225,11 +615,10 @@ function names.identify(verbose) -- lsr is for kpse
end
end
if #skip_names > 0 then
- local base = file.basename(completename)
for i=1,#skip_paths do
- if find(base,skip_names[i]) then
+ if find(basename,skip_names[i]) then
done[name] = true
- if trace then
+ if trace_names then
logs.report("fontnames","rejecting name of %s font %s",suffix,completename)
logs.push()
end
@@ -242,55 +631,52 @@ function names.identify(verbose) -- lsr is for kpse
logs.push()
end
local result, message = filters[lower(suffix)](completename)
- if trace then
+ if trace_names then
logs.pop()
end
if result then
if not result[1] then
- check(result,storedname,suffix,false) -- was name
+ local ok = check_name(data,result,storedname,suffix)
+ if not ok then
+ nofskipped = nofskipped + 1
+ end
else
for r=1,#result do
- check(result[r],storedname,suffix,true) -- was name
+ local ok = check_name(data,result[r],storedname,suffix,r-1) -- subfonts start at zero
+ if not ok then
+ nofskipped = nofskipped + 1
+ end
end
end
- if message and message ~= "" then
+ if trace_warnings and message and message ~= "" then
logs.report("fontnames","warning when identifying %s font %s: %s",suffix,completename,message)
end
- else
+ elseif trace_warnings then
logs.report("fontnames","error when identifying %s font %s: %s",suffix,completename,message or "unknown")
end
done[name] = true
end
end
- local totalread, totalok = 0, 0
local function traverse(what, method)
- for n, suffix in ipairs(filters.list) do
- nofread, nofok = 0, 0
+ local list = filters.list
+ for n=1,#list do
+ local suffix = list[n]
local t = os.gettimeofday() -- use elapser
+ nofread, nofskipped = 0, 0
suffix = lower(suffix)
logs.report("fontnames", "identifying %s font files with suffix %s",what,suffix)
method(suffix)
suffix = upper(suffix)
logs.report("fontnames", "identifying %s font files with suffix %s",what,suffix)
method(suffix)
- logs.report("fontnames", "%s %s files identified, %s hash entries added, runtime %0.3f seconds",nofread,what,nofok,os.gettimeofday()-t)
- totalread, totalok = totalread + nofread, totalok + nofok
- end
- end
- local function walk_tree(pathlist,suffix)
- if pathlist then
- for _, path in ipairs(pathlist) do
- path = resolvers.clean_path(path .. "/")
- path = gsub(path,"/+","/")
- local pattern = path .. "**." .. suffix -- ** forces recurse
- logs.report("fontnames", "globbing path %s",pattern)
- local t = dir.glob(pattern)
- for _, completename in pairs(t) do -- ipairs
- identify(completename,file.basename(completename),suffix,completename)
- end
- end
+ totalnofread, totalnofskipped = totalnofread + nofread, totalnofskipped + nofskipped
+ local elapsed = os.gettimeofday() - t
+ logs.report("fontnames", "%s %s files identified, %s hash entries added, runtime %0.3f seconds",nofread,what,nofread-nofskipped,elapsed)
end
end
+ if not trace_warnings then
+ logs.report("fontnames", "warnings are disabled (tracker 'fonts.warnings')")
+ end
traverse("tree", function(suffix) -- TEXTREE only
resolvers.with_files(".*%." .. suffix .. "$", function(method,root,path,name)
if method == "file" then
@@ -304,39 +690,67 @@ function names.identify(verbose) -- lsr is for kpse
-- using the vars is to clumsy so we just stick to a full scan instead
traverse("lsr", function(suffix) -- all trees
local pathlist = resolvers.split_path(resolvers.show_path("ls-R") or "")
- walk_tree(pathlist,suffix)
+ walk_tree(pathlist,suffix,identify)
end)
else
traverse("system", function(suffix) -- OSFONTDIR cum suis
- walk_tree(names.getpaths(trace),suffix)
+ walk_tree(names.getpaths(trace),suffix,identify)
end)
end
- local t = { }
- for _, f in ipairs(filters.fixes) do
- local expression, replacement = f[1], f[2]
- for k,v in next, mapping do
- local fix, pos = gsub(k,expression,replacement)
- if pos > 0 and not mapping[fix] then
- t[fix] = v
+ data.statistics.readfiles, data.statistics.skippedfiles = totalnofread, totalnofskipped
+end
+
+local function rejectclashes() -- just to be sure, so no explicit afm will be found then
+ local specifications, used, okay = names.data.specifications, { }, { }
+ for i=1,#specifications do
+ local s = specifications[i]
+ local f = s.fontname
+ if f then
+ local fnd, fnm = used[f], s.filename
+ if fnd then
+ if trace_warnings then
+ logs.report("fontnames", "fontname '%s' clashes, rejecting '%s' in favor of '%s'",f,fnm,fnd)
+ end
+ else
+ used[f], okay[#okay+1] = fnm, s
end
+ else
+ okay[#okay+1] = s
end
end
- local n = 0
- for k,v in next, t do
- mapping[k] = v
- n = n + 1
+ local d = #specifications - #okay
+ if d > 0 then
+ logs.report("fontnames", "%s files rejected due to clashes",d)
end
- local rejected = 0
- for k, v in next, mapping do
- local kind, filename = v[1], v[3]
- if not file.is_qualified_path(filename) and resolvers.find_file(filename,kind) == "" then
- mapping[k] = nil
- rejected = rejected + 1
- end
- end
- if n > 0 then
- logs.report("fontnames", "%s files read, %s normal and %s extra entries added, %s rejected, %s valid",totalread,totalok,n,rejected,totalok+n-rejected)
+ names.data.specifications = okay
+end
+
+local function resetdata()
+ local mappings, fallbacks = { }, { }
+ for _, k in next, filters.list do
+ mappings[k], fallbacks[k] = { }, { }
end
+ names.data = {
+ version = names.version,
+ mappings = mappings,
+ fallbacks = fallbacks,
+ specifications = { },
+ families = { },
+ statistics = { },
+ data_state = resolvers.data_state(),
+ }
+end
+
+function names.identify()
+ resetdata()
+ analysefiles()
+ rejectclashes()
+ collectfamilies()
+ collectstatistics()
+ cleanupkeywords()
+ collecthashes()
+ checkduplicates()
+ -- sorthashes() -- will be resorted when saved
end
function names.is_permitted(name)
@@ -359,49 +773,85 @@ function names.load(reload,verbose)
logs.report("font table", "unable to access database cache")
end
names.saved = true
- else
- names.data = names.read_data(names.basename)
- if not names.saved then
- if table.is_empty(names.data) or table.is_empty(names.data.mapping) then
- names.load(true)
- end
- names.saved = true
+ end
+ local data = names.read_data(names.basename)
+ names.data = data
+ if not names.saved then
+ if not data or not next(data) or not data.specifications or not next(data.specifications) then
+ names.load(true)
end
+ names.saved = true
end
- local data = names.data
- if data then
- data.sorted = table.sortedkeys(data.mapping or { }) or { }
- data.fallback_sorted = table.sortedkeys(data.fallback_mapping or { }) or { }
- else
+ if not data then
logs.report("font table", "accessing the data table failed")
+ else
+ unpackreferences()
+ sorthashes()
end
names.loaded = true
end
end
-function names.list(pattern,reload)
+local function list_them(mapping,sorted,pattern,t,all)
+ if mapping[pattern] then
+ t[pattern] = mapping[pattern]
+ else
+ for k=1,#sorted do
+ local v = sorted[k]
+ if not t[v] and find(v,pattern) then
+ t[v] = mapping[v]
+ if not all then
+ return
+ end
+ end
+ end
+ end
+end
+
+function names.list(pattern,reload,all) -- here?
names.load(reload)
if names.loaded then
local t = { }
- local function list_them(mapping,sorted)
- if mapping[pattern] then
- t[pattern] = mapping[pattern]
- else
- for k,v in ipairs(sorted) do
- if find(v,pattern) then
- t[v] = mapping[v]
- end
+ local data = names.data
+ if data then
+ local list = filters.list
+ local mappings, sorted_mappings = data.mappings, data.sorted_mappings
+ local fallbacks, sorted_fallbacks = data.fallbacks, data.sorted_fallbacks
+ for i=1,#list do
+ local format = list[i]
+ list_them(mappings[format],sorted_mappings[format],pattern,t,all)
+ if next(t) and not all then
+ return t
+ end
+ list_them(fallbacks[format],sorted_fallbacks[format],pattern,t,all)
+ if next(t) and not all then
+ return t
end
end
end
+ return t
+ end
+end
+
+local reloaded = false
+
+local function is_reloaded()
+ if not reloaded then
local data = names.data
- if data then
- list_them(data.mapping,data.sorted)
- list_them(data.fallback_mapping,data.fallback_sorted)
+ if names.autoreload then
+ local c_status = table.serialize(resolvers.data_state())
+ local f_status = table.serialize(data.data_state)
+ if c_status == f_status then
+ -- logs.report("fonts","font database matches configuration and file hashes")
+ return
+ else
+ logs.report("fonts","font database does not match configuration and file hashes")
+ end
end
- return t
- else
- return nil
+ names.loaded = false
+ reloaded = true
+ io.flush()
+ names.load(true)
end
end
@@ -411,74 +861,449 @@ here is for testing purposes only (it deals with names prefixed by an
encoding name).</p>
--ldx]]--
-local function found_indeed(mapping,sorted,name)
- local mn = mapping[name]
- if mn then
- return mn[2], mn[3], mn[4]
+local function fuzzy(mapping,sorted,name,sub)
+ local condensed = gsub(name,"[^%a%d]","")
+ for k=1,#sorted do
+ local v = sorted[k]
+ if find(v,condensed) then
+ return mapping[v], v
+ end
end
- if names.be_clever then -- this will become obsolete
- local encoding, tag = match(name,"^(.-)[%-%:](.+)$")
- local mt = mapping[tag]
- if tag and fonts.enc.is_known(encoding) and mt then
- return mt[1], encoding .. "-" .. mt[3], mt[4]
+end
+
+-- we could cache a lookup .. maybe some day ... (only when auto loaded!)
+
+local function foundname(name,sub) -- sub is not used currently
+ local data = names.data
+ local mappings, sorted_mappings = data.mappings, data.sorted_mappings
+ local fallbacks, sorted_fallbacks = data.fallbacks, data.sorted_fallbacks
+ local list = filters.list
+ -- dilemma: we lookup in the order otf ttf ttc ... afm but now an otf fallback
+ -- can come after an afm match ... well, one should provide nice names anyway
+ -- and having two lists is not an option
+ for i=1,#list do
+ local l = list[i]
+ local found = mappings[l][name]
+ if found then
+ if trace_names then
+ logs.report("fonts","resolved via direct name match: '%s'",name)
+ end
+ return found
end
end
- -- name, type, file
- for k,v in next, mapping do
- if find(k,name) then
- return v[2], v[3], v[4]
+ for i=1,#list do
+ local l = list[i]
+ local found, fname = fuzzy(mappings[l],sorted_mappings[l],name,sub)
+ if found then
+ if trace_names then
+ logs.report("fonts","resolved via fuzzy name match: '%s' => '%s'",name,fname)
+ end
+ return found
end
end
- local condensed = gsub(name,"[^%a%d]","")
- local mc = mapping[condensed]
- if mc then
- return mc[2], mc[3], mc[4]
+ for i=1,#list do
+ local l = list[i]
+ local found = fallbacks[l][name]
+ if found then
+ if trace_names then
+ logs.report("fonts","resolved via direct fallback match: '%s'",name)
+ end
+ return found
+ end
end
- for k=1,#sorted do
- local v = sorted[k]
- if find(v,condensed) then
- v = mapping[v]
- return v[2], v[3], v[4]
+ for i=1,#list do
+ local l = list[i]
+ local found, fname = fuzzy(sorted_mappings[l],sorted_fallbacks[l],name,sub)
+ if found then
+ if trace_names then
+ logs.report("fonts","resolved via fuzzy fallback match: '%s' => '%s'",name,fname)
+ end
+ return found
end
end
- return nil, nil, nil
end
-local function found(name)
- if name and name ~= "" and names.data then
- name = names.cleanname(name)
- local data = names.data
- local fontname, filename, is_sub = found_indeed(data.mapping, data.sorted, name)
- if not fontname or not filename then
- fontname, filename, is_sub = found_indeed(data.fallback_mapping, data.fallback_sorted, name)
+function names.resolvedspecification(askedname,sub)
+ if askedname and askedname ~= "" and names.enabled then
+ askedname = cleanname(askedname)
+ names.load()
+ local found = foundname(askedname,sub)
+ if not found and is_reloaded() then
+ found = foundname(askedname,sub)
+ end
+ return found
+ end
+end
+
+function names.resolve(askedname,sub)
+ local found = names.resolvedspecification(askedname,sub)
+ if found then
+ return found.filename, found.subfont and found.rawname
+ end
+end
+
+-- specified search
+
+local function s_collect_weight_style_width_variant(found,done,all,weight,style,width,variant,family)
+ if family then
+ for i=1,#family do
+ local f = family[i]
+ if f and weight == f.weight and style == f.style and width == f.width and variant == f.variant then
+ found[#found+1], done[f] = f, true
+ if not all then return end
+ end
+ end
+ end
+end
+local function m_collect_weight_style_width_variant(found,done,all,weight,style,width,variant,families,sorted,strictname)
+ for i=1,#sorted do
+ local k = sorted[i]
+ local family = families[k]
+ for i=1,#family do
+ local f = family[i]
+ if not done[f] and weight == f.weight and style == f.style and width == f.width and variant == f.variant and find(f.fontname,strictname) then
+ found[#found+1], done[f] = f, true
+ if not all then return end
+ end
+ end
+ end
+end
+
+local function s_collect_weight_style_width(found,done,all,weight,style,width,family)
+ if family then
+ for i=1,#family do
+ local f = family[i]
+ if f and weight == f.weight and style == f.style and width == f.width then
+ found[#found+1], done[f] = f, true
+ if not all then return end
+ end
+ end
+ end
+end
+local function m_collect_weight_style_width(found,done,all,weight,style,width,families,sorted,strictname)
+ for i=1,#sorted do
+ local k = sorted[i]
+ local family = families[k]
+ for i=1,#family do
+ local f = family[i]
+ if not done[f] and weight == f.weight and style == f.style and width == f.width and find(f.fontname,strictname) then
+ found[#found+1], done[f] = f, true
+ if not all then return end
+ end
+ end
+ end
+end
+
+local function s_collect_weight_style(found,done,all,weight,style,family)
+ if family then
+ for i=1,#family do local f = family[i]
+ if f and weight == f.weight and style == f.style then
+ found[#found+1], done[f] = f, true
+ if not all then return end
+ end
+ end
+ end
+end
+local function m_collect_weight_style(found,done,all,weight,style,families,sorted,strictname)
+ for i=1,#sorted do
+ local k = sorted[i]
+ local family = families[k]
+ for i=1,#family do
+ local f = family[i]
+ if not done[f] and weight == f.weight and style == f.style and find(f.fontname,strictname) then
+ found[#found+1], done[f] = f, true
+ if not all then return end
+ end
+ end
+ end
+end
+
+local function s_collect_style_width(found,done,all,style,width,family)
+ if family then
+ for i=1,#family do local f = family[i]
+ if f and style == f.style and width == f.width then
+ found[#found+1], done[f] = f, true
+ if not all then return end
+ end
+ end
+ end
+end
+local function m_collect_style_width(found,done,all,style,width,families,sorted,strictname)
+ for i=1,#sorted do
+ local k = sorted[i]
+ local family = families[k]
+ for i=1,#family do
+ local f = family[i]
+ if not done[f] and style == f.style and width == f.width and find(f.fontname,strictname) then
+ found[#found+1], done[f] = f, true
+ if not all then return end
+ end
+ end
+ end
+end
+
+local function s_collect_weight(found,done,all,weight,family)
+ if family then
+ for i=1,#family do local f = family[i]
+ if f and weight == f.weight then
+ found[#found+1], done[f] = f, true
+ if not all then return end
+ end
+ end
+ end
+end
+local function m_collect_weight(found,done,all,weight,families,sorted,strictname)
+ for i=1,#sorted do
+ local k = sorted[i]
+ local family = families[k]
+ for i=1,#family do
+ local f = family[i]
+ if not done[f] and weight == f.weight and find(f.fontname,strictname) then
+ found[#found+1], done[f] = f, true
+ if not all then return end
+ end
+ end
+ end
+end
+
+local function s_collect_style(found,done,all,style,family)
+ if family then
+ for i=1,#family do local f = family[i]
+ if f and style == f.style then
+ found[#found+1], done[f] = f, true
+ if not all then return end
+ end
+ end
+ end
+end
+local function m_collect_style(found,done,all,style,families,sorted,strictname)
+ for i=1,#sorted do
+ local k = sorted[i]
+ local family = families[k]
+ for i=1,#family do
+ local f = family[i]
+ if not done[f] and style == f.style and find(f.fontname,strictname) then
+ found[#found+1], done[f] = f, true
+ if not all then return end
+ end
+ end
+ end
+end
+
+local function s_collect_width(found,done,all,width,family)
+ if family then
+ for i=1,#family do local f = family[i]
+ if f and width == f.width then
+ found[#found+1], done[f] = f, true
+ if not all then return end
+ end
+ end
+ end
+end
+local function m_collect_width(found,done,all,width,families,sorted,strictname)
+ for i=1,#sorted do
+ local k = sorted[i]
+ local family = families[k]
+ for i=1,#family do
+ local f = family[i]
+ if not done[f] and width == f.width and find(f.fontname,strictname) then
+ found[#found+1], done[f] = f, true
+ if not all then return end
+ end
+ end
+ end
+end
+
+local function s_collect(found,done,all,family)
+ if family then
+ for i=1,#family do local f = family[i]
+ if f then
+ found[#found+1], done[f] = f, true
+ if not all then return end
+ end
end
- return fontname, filename, is_sub
+ end
+end
+local function m_collect(found,done,all,families,sorted,strictname)
+ for i=1,#sorted do
+ local k = sorted[i]
+ local family = families[k]
+ for i=1,#family do
+ local f = family[i]
+ if not done[f] and find(f.fontname,strictname) then
+ found[#found+1], done[f] = f, true
+ if not all then return end
+ end
+ end
+ end
+end
+
+local function collect(stage,found,done,name,weight,style,width,variant,all)
+ local data = names.data
+ local families, sorted = data.families, data.sorted_families
+ strictname = "^".. name -- to be checked
+ local family = families[name]
+ if trace_names then
+ logs.report("fonts","resolving name '%s', weight '%s', style '%s', width '%s', variant '%s'",
+ name or "?",tostring(weight),tostring(style),tostring(width),tostring(variant))
+ end
+ --~ print(name,table.serialize(family))
+ if weight and weight ~= "" then
+ if style and style ~= "" then
+ if width and width ~= "" then
+ if variant and variant ~= "" then
+ if trace_names then
+ logs.report("fonts","resolving stage %s, name '%s', weight '%s', style '%s', width '%s', variant '%s'",stage,name,weight,style,width,variant)
+ end
+ s_collect_weight_style_width_variant(found,done,all,weight,style,width,variant,family)
+ m_collect_weight_style_width_variant(found,done,all,weight,style,width,variant,families,sorted,strictname)
+ else
+ if trace_names then
+ logs.report("fonts","resolving stage %s, name '%s', weight '%s', style '%s', width '%s'",stage,name,weight,style,width)
+ end
+ s_collect_weight_style_width(found,done,all,weight,style,width,family)
+ m_collect_weight_style_width(found,done,all,weight,style,width,families,sorted,strictname)
+ end
+ else
+ if trace_names then
+ logs.report("fonts","resolving stage %s, name '%s', weight '%s', style '%s'",stage,name,weight,style)
+ end
+ s_collect_weight_style(found,done,all,weight,style,family)
+ m_collect_weight_style(found,done,all,weight,style,families,sorted,strictname)
+ end
+ else
+ if trace_names then
+ logs.report("fonts","resolving stage %s, name '%s', weight '%s'",stage,name,weight)
+ end
+ s_collect_weight(found,done,all,weight,family)
+ m_collect_weight(found,done,all,weight,families,sorted,strictname)
+ end
+ elseif style and style ~= "" then
+ if width and width ~= "" then
+ if trace_names then
+ logs.report("fonts","resolving stage %s, name '%s', style '%s', width '%s'",stage,name,style,width)
+ end
+ s_collect_style_width(found,done,all,style,width,family)
+ m_collect_style_width(found,done,all,style,width,families,sorted,strictname)
+ else
+ if trace_names then
+ logs.report("fonts","resolving stage %s, name '%s', style '%s'",stage,name,style)
+ end
+ s_collect_style(found,done,all,style,family)
+ m_collect_style(found,done,all,style,families,sorted,strictname)
+ end
+ elseif width and width ~= "" then
+ if trace_names then
+ logs.report("fonts","resolving stage %s, name '%s', width '%s'",stage,name,width)
+ end
+ s_collect_width(found,done,all,width,family)
+ m_collect_width(found,done,all,width,families,sorted,strictname)
else
- return nil, nil, nil
+ if trace_names then
+ logs.report("fonts","resolving stage %s, name '%s'",stage,name)
+ end
+ s_collect(found,done,all,family)
+ m_collect(found,done,all,families,sorted,strictname)
end
end
-local reloaded = false
+function heuristic(name,weight,style,width,variant,all) -- todo: fallbacks
+ local found, done = { }, { }
+--~ print(name,weight,style,width,variant)
+ weight, style, width, variant = weight or "normal", style or "normal", width or "normal", variant or "normal"
+ name = cleanname(name)
+ collect(1,found,done,name,weight,style,width,variant,all)
+ -- still needed ?
+ if #found == 0 and variant ~= "normal" then -- not weight
+ variant = "normal"
+ collect(4,found,done,name,weight,style,width,variant,all)
+ end
+ if #found == 0 and width ~= "normal" then
+ width = "normal"
+ collect(2,found,done,name,weight,style,width,variant,all)
+ end
+ if #found == 0 and weight ~= "normal" then -- not style
+ weight = "normal"
+ collect(3,found,done,name,weight,style,width,variant,all)
+ end
+ if #found == 0 and style ~= "normal" then -- not weight
+ style = "normal"
+ collect(4,found,done,name,weight,style,width,variant,all)
+ end
+ --
+ local nf = #found
+ if trace_names then
+ if nf then
+ local t = { }
+ for i=1,nf do
+ t[#t+1] = format("'%s'",found[i].fontname)
+ end
+ logs.report("fonts","name '%s' resolved to %s instances: %s",name,nf,concat(t," "))
+ else
+ logs.report("fonts","name '%s' unresolved",name)
+ end
+ end
+ if all then
+ return nf > 0 and found
+ else
+ return found[1]
+ end
+end
-function names.specification(askedname, sub)
+function names.specification(askedname,weight,style,width,variant,reload,all)
if askedname and askedname ~= "" and names.enabled then
- askedname = lower(askedname)
- names.load()
- local name, filename, is_sub = found(askedname)
- if not filename and not reloaded and names.autoreload then
- names.loaded = false
- reloaded = true
- io.flush()
- names.load(true)
- name, filename, is_sub = found(askedname)
+ askedname = lower(askedname) -- or cleanname
+ names.load(reload)
+ local found = heuristic(askedname,weight,style,width,variant,all)
+ if not found and is_reloaded() then
+ found = heuristic(askedname,weight,style,width,variant,all)
+ if not filename then
+ found = foundname(askedname) -- old method
+ end
+ end
+ return found
+ end
+end
+
+function names.collect(askedname,weight,style,width,variant,reload,all)
+ if askedname and askedname ~= "" and names.enabled then
+ askedname = lower(askedname) -- or cleanname
+ names.load(reload)
+ local list = heuristic(askedname,weight,style,width,variant,true)
+ if not list or #list == 0 and is_reloaded() then
+ list = heuristic(askedname,weight,style,width,variant,true)
end
- return name, filename, is_sub
+ return list
end
end
-function names.resolve(askedname, sub)
- local name, filename, is_sub = names.specification(askedname, sub)
- return filename, (is_sub and name) or sub
+function names.collectspec(askedname,reload,all)
+ local name, weight, style, width, variant = names.splitspec(askedname)
+ return names.collect(name,weight,style,width,variant,reload,all)
+end
+
+function names.resolvespec(askedname,sub)
+ local found = names.specification(names.splitspec(askedname))
+ if found then
+ return found.filename, found.subfont and found.rawname
+ end
+end
+
+function names.collectfiles(askedname,reload) -- no all
+ if askedname and askedname ~= "" and names.enabled then
+ askedname = lower(askedname) -- or cleanname
+ names.load(reload)
+ local list = { }
+ local basename = file.basename
+ local specifications = names.data.specifications
+ for i=1,#specifications do
+ local s = specifications[i]
+ if find(lower(basename(s.filename)),askedname) then
+ list[#list+1] = s
+ end
+ end
+ return list
+ end
end
--[[ldx--
@@ -530,16 +1355,100 @@ names.new_to_old = {
names.old_to_new = table.swapped(names.new_to_old)
function names.exists(name)
- local fna, found = names.autoreload, false
- names.autoreload = false
- for k,v in ipairs(filters.list) do
+ local found = false
+ local list = filters.list
+ for k=1,#list do
+ local v = list[k]
found = (resolvers.find_file(name,v) or "") ~= ""
if found then
- break
+ return found
+ end
+ end
+ return ((resolvers.find_file(name,"tfm") or "") ~= "") or ((names.resolve(name) or "") ~= "")
+end
+
+-- for i=1,fonts.names.lookup(pattern) do
+-- texio.write_nl(fonts.names.getkey("filename",i))
+-- end
+
+local lastlookups, lastpattern = { }, ""
+
+function names.lookup(pattern,name,reload) -- todo: find
+ if lastpattern ~= pattern then
+ names.load(reload)
+ local specifications = names.data.specifications
+ local families = names.data.families
+ local lookups = specifications
+ if name then
+ lookups = families[name]
+ elseif not find(pattern,"=") then
+ lookups = families[pattern]
+ end
+ if trace_names then
+ logs.report("fonts","starting with %s lookups for '%s'",#lookups,pattern)
+ end
+ if lookups then
+ for key, value in gmatch(pattern,"([^=,]+)=([^=,]+)") do
+ local t = { }
+ for i=1,#lookups do
+ local s = lookups[i]
+ if s[key] == value then
+ t[#t+1] = lookups[i]
+ end
+ end
+ if trace_names then
+ logs.report("fonts","%s matches for key '%s' with value '%s'",#t,key,value)
+ end
+ lookups = t
+ end
end
+ lastpattern = pattern
+ lastlookups = lookups or { }
+ end
+ return #lastlookups
+end
+
+function names.getlookupkey(key,n)
+ local l = lastlookups[n or 1]
+ return (l and l[key]) or ""
+end
+
+function names.noflookups()
+ return #lastlookups
+end
+
+function names.getlookups(pattern,name,reload)
+ if pattern then
+ names.lookup(pattern,name,reload)
end
- found = found or (resolvers.find_file(name,"tfm") or "") ~= ""
- found = found or (names.resolve(name) or "") ~= ""
- names.autoreload = fna
- return found
+ return lastlookups
+end
+
+function table.formatcolumns(result)
+ if result and #result > 0 then
+ local widths = { }
+ local first = result[1]
+ local n = #first
+ for i=1,n do
+ widths[i] = 0
+ end
+ for i=1,#result do
+ local r = result[i]
+ for j=1,n do
+ local w = #r[j]
+ if w > widths[j] then
+ widths[j] = w
+ end
+ end
+ end
+ for i=1,n do
+ widths[i] = "%-" .. widths[i] .. "s"
+ end
+ local template = concat(widths," ")
+ for i=1,#result do
+ local str = format(template,unpack(result[i]))
+ result[i] = string.strip(str)
+ end
+ end
+ return result
end
diff --git a/Master/texmf-dist/tex/context/base/font-tfm.lua b/Master/texmf-dist/tex/context/base/font-tfm.lua
index b2015723e36..31ae2cae1c2 100644
--- a/Master/texmf-dist/tex/context/base/font-tfm.lua
+++ b/Master/texmf-dist/tex/context/base/font-tfm.lua
@@ -1,6 +1,6 @@
if not modules then modules = { } end modules ['font-tfm'] = {
version = 1.001,
- comment = "companion to font-ini.tex",
+ comment = "companion to font-ini.mkiv",
author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
copyright = "PRAGMA ADE / ConTeXt Development Team",
license = "see context related readme files"
@@ -36,6 +36,7 @@ fonts.initializers = fonts.initializers or { }
fonts.initializers.common = fonts.initializers.common or { }
local fontdata = fonts.ids
+local disc = node.id('disc')
local glyph = node.id('glyph')
local set_attribute = node.set_attribute
@@ -47,33 +48,9 @@ supplied by <l n='luatex'/>.</p>
tfm.resolve_vf = true -- false
tfm.share_base_kerns = false -- true (.5 sec slower on mk but brings down mem from 410M to 310M, beware: then script/lang share too)
tfm.mathactions = { }
+tfm.fontname_mode = "fullpath"
-function tfm.enhance(tfmdata,specification)
- local name, size = specification.name, specification.size
- local encoding, filename = match(name,"^(.-)%-(.*)$") -- 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
- local original = { }
- for k, v in next, characters do
- v.name = vector[k]
- v.index = k
- original[k] = v
- end
- for k,v in next, data.unicodes do
- if k ~= v then
- if trace_defining then
- logs.report("define font","mapping %s onto %s",k,v)
- end
- characters[k] = original[v]
- end
- end
- end
- end
-end
+tfm.enhance = tfm.enhance or function() end
function tfm.read_from_tfm(specification)
local fname, tfmdata = specification.filename or "", nil
@@ -186,36 +163,36 @@ fonts.trace_scaling = false
-- basekerns are scaled and will be hashed by table id
-- sharedkerns are unscaled and are be hashed by concatenated indexes
-function tfm.check_base_kerns(tfmdata)
- if tfm.share_base_kerns then
- local sharedkerns = tfmdata.sharedkerns
- if sharedkerns then
- local basekerns = { }
- tfmdata.basekerns = basekerns
- return sharedkerns, basekerns
- end
- end
- return nil, nil
-end
+--~ function tfm.check_base_kerns(tfmdata)
+--~ if tfm.share_base_kerns then
+--~ local sharedkerns = tfmdata.sharedkerns
+--~ if sharedkerns then
+--~ local basekerns = { }
+--~ tfmdata.basekerns = basekerns
+--~ return sharedkerns, basekerns
+--~ end
+--~ end
+--~ return nil, nil
+--~ end
-function tfm.prepare_base_kerns(tfmdata)
- if tfm.share_base_kerns and not tfmdata.sharedkerns then
- local sharedkerns = { }
- tfmdata.sharedkerns = sharedkerns
- for u, chr in next, tfmdata.characters do
- local kerns = chr.kerns
- if kerns then
- local hash = concat(sortedkeys(kerns), " ")
- local base = sharedkerns[hash]
- if not base then
- sharedkerns[hash] = kerns
- else
- chr.kerns = base
- end
- end
- end
- end
-end
+--~ function tfm.prepare_base_kerns(tfmdata)
+--~ if tfm.share_base_kerns and not tfmdata.sharedkerns then
+--~ local sharedkerns = { }
+--~ tfmdata.sharedkerns = sharedkerns
+--~ for u, chr in next, tfmdata.characters do
+--~ local kerns = chr.kerns
+--~ if kerns then
+--~ local hash = concat(sortedkeys(kerns), " ")
+--~ local base = sharedkerns[hash]
+--~ if not base then
+--~ sharedkerns[hash] = kerns
+--~ else
+--~ chr.kerns = base
+--~ end
+--~ end
+--~ end
+--~ end
+--~ end
-- we can have cache scaled characters when we are in node mode and don't have
-- protruding and expansion: hash == fullname @ size @ protruding @ expansion
@@ -228,13 +205,21 @@ local charactercache = { }
-- a virtual font has italic correction make sure to set the
-- has_italic flag. Some more flags will be added in the future.
-function tfm.do_scale(tfmtable, scaledpoints)
- tfm.prepare_base_kerns(tfmtable) -- optimalization
+function tfm.calculate_scale(tfmtable, scaledpoints, relativeid)
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 = { }
+ local units = tfmtable.units or 1000
+ local delta = scaledpoints/units -- brr, some open type fonts have 2048
+ return scaledpoints, delta, units
+end
+
+function tfm.do_scale(tfmtable, scaledpoints, relativeid)
+ -- tfm.prepare_base_kerns(tfmtable) -- optimalization
+ local t = { } -- the new table
+ local scaledpoints, delta, units = tfm.calculate_scale(tfmtable, scaledpoints, relativeid)
+ t.units_per_em = units or 1000
+ local hdelta, vdelta = delta, delta
-- unicoded unique descriptions shared cidinfo characters changed parameters indices
for k,v in next, tfmtable do
if type(v) == "table" then
@@ -243,6 +228,19 @@ function tfm.do_scale(tfmtable, scaledpoints)
t[k] = v
end
end
+ local extend_factor = tfmtable.extend_factor or 0
+ if extend_factor ~= 0 and extend_factor ~= 1 then
+ hdelta = hdelta * extend_factor
+ t.extend = extend_factor * 1000
+ else
+ t.extend = 1000
+ end
+ local slant_factor = tfmtable.slant_factor or 0
+ if slant_factor ~= 0 then
+ t.slant = slant_factor * 1000
+ else
+ t.slant = 0
+ end
-- status
local isvirtual = tfmtable.type == "virtual" or tfmtable.virtualized
local hasmath = (tfmtable.math_parameters ~= nil and next(tfmtable.math_parameters) ~= nil) or (tfmtable.MathConstants ~= nil and next(tfmtable.MathConstants) ~= nil)
@@ -258,6 +256,9 @@ function tfm.do_scale(tfmtable, scaledpoints)
t.unicodes = tfmtable.unicodes
t.indices = tfmtable.indices
t.marks = tfmtable.marks
+t.goodies = tfmtable.goodies
+t.colorscheme = tfmtable.colorscheme
+--~ t.embedding = tfmtable.embedding
t.descriptions = descriptions
if tfmtable.fonts then
t.fonts = table.fastcopy(tfmtable.fonts) -- hm also at the end
@@ -267,18 +268,18 @@ function tfm.do_scale(tfmtable, scaledpoints)
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
+ tp.space = (tfmp.space or tfmp[2] or 0)*hdelta
+ tp.space_stretch = (tfmp.space_stretch or tfmp[3] or 0)*hdelta
+ tp.space_shrink = (tfmp.space_shrink or tfmp[4] or 0)*hdelta
+ tp.x_height = (tfmp.x_height or tfmp[5] or 0)*vdelta
+ tp.quad = (tfmp.quad or tfmp[6] or 0)*hdelta
+ tp.extra_space = (tfmp.extra_space or tfmp[7] or 0)*hdelta
local protrusionfactor = (tp.quad ~= 0 and 1000/tp.quad) or 0
local tc = t.characters
local characters = tfmtable.characters
local nameneeded = not tfmtable.shared.otfdata --hack
local changed = tfmtable.changed or { } -- for base mode
- local ischanged = not table.is_empty(changed)
+ local ischanged = changed and next(changed)
local indices = tfmtable.indices
local luatex = tfmtable.luatex
local tounicode = luatex and luatex.tounicode
@@ -286,14 +287,15 @@ function tfm.do_scale(tfmtable, scaledpoints)
local defaultheight = luatex and luatex.defaultheight or 0
local defaultdepth = luatex and luatex.defaultdepth or 0
-- experimental, sharing kerns (unscaled and scaled) saves memory
- local sharedkerns, basekerns = tfm.check_base_kerns(tfmtable)
+ -- local sharedkerns, basekerns = tfm.check_base_kerns(tfmtable)
-- loop over descriptions (afm and otf have descriptions, tfm not)
-- there is no need (yet) to assign a value to chr.tonunicode
- local scaledwidth = defaultwidth * delta
- local scaledheight = defaultheight * delta
- local scaleddepth = defaultdepth * delta
+ local scaledwidth = defaultwidth * hdelta
+ local scaledheight = defaultheight * vdelta
+ local scaleddepth = defaultdepth * vdelta
local stackmath = tfmtable.ignore_stack_math ~= true
-local private = fonts.private
+ local private = fonts.private
+ local sharedkerns = { }
for k,v in next, characters do
local chr, description, index
if ischanged then
@@ -314,9 +316,9 @@ local private = fonts.private
local width = description.width
local height = description.height
local depth = description.depth
- if width then width = delta*width else width = scaledwidth end
- if height then height = delta*height else height = scaledheight end
- -- if depth then depth = delta*depth else depth = scaleddepth end
+ if width then width = hdelta*width else width = scaledwidth end
+ if height then height = vdelta*height else height = scaledheight end
+ -- if depth then depth = vdelta*depth else depth = scaleddepth end
if depth and depth ~= 0 then
depth = delta*depth
if nameneeded then
@@ -362,6 +364,7 @@ local private = fonts.private
end
end
if hasquality then
+ -- we could move these calculations elsewhere (saves calculations)
local ve = v.expansion_factor
if ve then
chr.expansion_factor = ve*1000 -- expansionfactor, hm, can happen elsewhere
@@ -379,7 +382,7 @@ local private = fonts.private
if hasitalic then
local vi = description.italic or v.italic
if vi and vi ~= 0 then
- chr.italic = vi*delta
+ chr.italic = vi*hdelta
end
end
-- to be tested
@@ -395,14 +398,19 @@ local private = fonts.private
for i=1,#vv do
local vvi = vv[i]
t[i] = {
- ["start"] = (vvi["start"] or 0)*delta,
- ["end"] = (vvi["end"] or 0)*delta,
- ["advance"] = (vvi["advance"] or 0)*delta,
+ ["start"] = (vvi["start"] or 0)*vdelta,
+ ["end"] = (vvi["end"] or 0)*vdelta,
+ ["advance"] = (vvi["advance"] or 0)*vdelta,
["extender"] = vvi["extender"],
["glyph"] = vvi["glyph"],
}
end
chr.vert_variants = t
+ --~ local ic = v.vert_italic_correction
+ --~ if ic then
+ --~ chr.italic = ic * hdelta
+ --~ print(format("0x%05X -> %s",k,chr.italic))
+ --~ end
else
local hv = v.horiz_variants
if hv then
@@ -410,9 +418,9 @@ local private = fonts.private
for i=1,#hv do
local hvi = hv[i]
t[i] = {
- ["start"] = (hvi["start"] or 0)*delta,
- ["end"] = (hvi["end"] or 0)*delta,
- ["advance"] = (hvi["advance"] or 0)*delta,
+ ["start"] = (hvi["start"] or 0)*hdelta,
+ ["end"] = (hvi["end"] or 0)*hdelta,
+ ["advance"] = (hvi["advance"] or 0)*hdelta,
["extender"] = hvi["extender"],
["glyph"] = hvi["glyph"],
}
@@ -423,31 +431,23 @@ local private = fonts.private
end
local vt = description.top_accent
if vt then
- chr.top_accent = delta*vt
+ chr.top_accent = vdelta*vt
end
if stackmath then
local mk = v.mathkerns
if mk then
local kerns = { }
- -- for k, v in next, mk do
- -- local kk = { }
- -- for i=1,#v do
- -- local vi = v[i]
- -- kk[i] = { height = delta*vi.height, kern = delta*vi.kern }
- -- end
- -- kerns[k] = kk
- -- end
local v = mk.top_right if v then local k = { } for i=1,#v do local vi = v[i]
- k[i] = { height = delta*vi.height, kern = delta*vi.kern }
+ k[i] = { height = vdelta*vi.height, kern = vdelta*vi.kern }
end kerns.top_right = k end
local v = mk.top_left if v then local k = { } for i=1,#v do local vi = v[i]
- k[i] = { height = delta*vi.height, kern = delta*vi.kern }
+ k[i] = { height = vdelta*vi.height, kern = vdelta*vi.kern }
end kerns.top_left = k end
local v = mk.bottom_left if v then local k = { } for i=1,#v do local vi = v[i]
- k[i] = { height = delta*vi.height, kern = delta*vi.kern }
+ k[i] = { height = vdelta*vi.height, kern = vdelta*vi.kern }
end kerns.bottom_left = k end
local v = mk.bottom_right if v then local k = { } for i=1,#v do local vi = v[i]
- k[i] = { height = delta*vi.height, kern = delta*vi.kern }
+ k[i] = { height = vdelta*vi.height, kern = vdelta*vi.kern }
end kerns.bottom_right = k end
chr.mathkern = kerns -- singular
end
@@ -456,19 +456,26 @@ local private = fonts.private
if not nodemode then
local vk = v.kerns
if vk then
- if sharedkerns then
- local base = basekerns[vk] -- hashed by table id, not content
- if not base then
- base = {}
- for k,v in next, vk do base[k] = v*delta end
- basekerns[vk] = base
- end
- chr.kerns = base
- else
- local tt = {}
- for k,v in next, vk do tt[k] = v*delta end
- chr.kerns = tt
+ --~ if sharedkerns then
+ --~ local base = basekerns[vk] -- hashed by table id, not content
+ --~ if not base then
+ --~ base = {}
+ --~ for k,v in next, vk do base[k] = v*hdelta end
+ --~ basekerns[vk] = base
+ --~ end
+ --~ chr.kerns = base
+ --~ else
+ --~ local tt = {}
+ --~ for k,v in next, vk do tt[k] = v*hdelta end
+ --~ chr.kerns = tt
+ --~ end
+ local s = sharedkerns[vk]
+ if not s then
+ s = { }
+ for k,v in next, vk do s[k] = v*hdelta end
+ sharedkerns[vk] = s
end
+ chr.kerns = s
end
local vl = v.ligatures
if vl then
@@ -487,6 +494,8 @@ local private = fonts.private
local vc = v.commands
if vc then
-- we assume non scaled commands here
+ -- tricky .. we need to scale pseudo math glyphs too
+ -- which is why we deal with rules too
local ok = false
for i=1,#vc do
local key = vc[i][1]
@@ -500,8 +509,12 @@ local private = fonts.private
for i=1,#vc do
local ivc = vc[i]
local key = ivc[1]
- if key == "right" or key == "down" then
- tt[#tt+1] = { key, ivc[2]*delta }
+ if key == "right" then
+ tt[#tt+1] = { key, ivc[2]*hdelta }
+ elseif key == "down" then
+ tt[#tt+1] = { key, ivc[2]*vdelta }
+ elseif key == "rule" then
+ tt[#tt+1] = { key, ivc[2]*vdelta, ivc[3]*hdelta }
else -- not comment
tt[#tt+1] = ivc -- shared since in cache and untouched
end
@@ -517,6 +530,8 @@ local private = fonts.private
-- t.encodingbytes, t.filename, t.fullname, t.name: elsewhere
t.size = scaledpoints
t.factor = delta
+ t.hfactor = hdelta
+ t.vfactor = vdelta
if t.fonts then
t.fonts = table.fastcopy(t.fonts) -- maybe we virtualize more afterwards
end
@@ -524,20 +539,20 @@ local private = fonts.private
-- mathematics.extras.copy(t) -- can be done elsewhere if needed
local ma = tfm.mathactions
for i=1,#ma do
- ma[i](t,tfmtable,delta)
+ ma[i](t,tfmtable,delta,hdelta,vdelta) -- what delta?
end
end
-- needed for \high cum suis
local tpx = tp.x_height
-if hasmath then
- if not tp[13] then tp[13] = .86*tpx end -- mathsupdisplay
- if not tp[14] then tp[14] = .86*tpx end -- mathsupnormal
- if not tp[15] then tp[15] = .86*tpx end -- mathsupcramped
- if not tp[16] then tp[16] = .48*tpx end -- mathsubnormal
- if not tp[17] then tp[17] = .48*tpx end -- mathsubcombined
- if not tp[22] then tp[22] = 0 end -- mathaxisheight
- if t.MathConstants then t.MathConstants.AccentBaseHeight = nil end -- safeguard
-end
+ if hasmath then
+ if not tp[13] then tp[13] = .86*tpx end -- mathsupdisplay
+ if not tp[14] then tp[14] = .86*tpx end -- mathsupnormal
+ if not tp[15] then tp[15] = .86*tpx end -- mathsupcramped
+ if not tp[16] then tp[16] = .48*tpx end -- mathsubnormal
+ if not tp[17] then tp[17] = .48*tpx end -- mathsubcombined
+ if not tp[22] then tp[22] = 0 end -- mathaxisheight
+ if t.MathConstants then t.MathConstants.AccentBaseHeight = nil end -- safeguard
+ end
t.tounicode = 1
t.cidinfo = tfmtable.cidinfo
-- we have t.name=metricfile and t.fullname=RealName and t.filename=diskfilename
@@ -545,18 +560,23 @@ end
-- can have multiple subfonts
if hasmath then
if trace_defining then
- logs.report("define font","math enabled for: %s %s %s",t.name or "noname",t.fullname or "nofullname",t.filename or "nofilename")
+ logs.report("define font","math enabled for: name '%s', fullname: '%s', filename: '%s'",t.name or "noname",t.fullname or "nofullname",t.filename or "nofilename")
end
else
if trace_defining then
- logs.report("define font","math disabled for: %s %s %s",t.name or "noname",t.fullname or "nofullname",t.filename or "nofilename")
+ logs.report("define font","math disabled for: name '%s', fullname: '%s', filename: '%s'",t.name or "noname",t.fullname or "nofullname",t.filename or "nofilename")
end
t.nomath, t.MathConstants = true, nil
end
- -- fullname is used in the subsetting
if not t.psname then
- t.psname = t.fullname -- else bad luck
+ -- name used in pdf file as well as for selecting subfont in ttc/dfont
+ t.psname = t.fontname or (t.fullname and fonts.names.cleanname(t.fullname))
+ end
+ if trace_defining then
+ logs.report("define font","used for accesing subfont: '%s'",t.psname or "nopsname")
+ logs.report("define font","used for subsetting: '%s'",t.fontname or "nofontname")
end
+--~ print(t.fontname,table.serialize(t.MathConstants))
return t, delta
end
@@ -576,21 +596,19 @@ local lastfont = nil
--
-- flushing the kern and ligature tables from memory saves a lot (only
-- base mode) but it complicates vf building where the new characters
--- demand this data
-
---~ for id, f in pairs(fonts.ids) do -- or font.fonts
---~ local ffi = font.fonts[id]
---~ f.characters = ffi.characters
---~ f.kerns = ffi.kerns
---~ f.ligatures = ffi.ligatures
---~ end
+-- demand this data .. solution: functions that access them
function tfm.cleanup_table(tfmdata) -- we need a cleanup callback, now we miss the last one
if tfm.auto_cleanup then -- ok, we can hook this into everyshipout or so ... todo
if tfmdata.type == 'virtual' or tfmdata.virtualized then
for k, v in next, tfmdata.characters do
- if v.commands then v.commands = nil end
+ if v.commands then v.commands = nil end
+ -- if v.kerns then v.kerns = nil end
end
+ else
+ -- for k, v in next, tfmdata.characters do
+ -- if v.kerns then v.kerns = nil end
+ -- end
end
end
end
@@ -598,8 +616,8 @@ end
function tfm.cleanup(tfmdata) -- we need a cleanup callback, now we miss the last one
end
-function tfm.scale(tfmtable, scaledpoints)
- local t, factor = tfm.do_scale(tfmtable, scaledpoints)
+function tfm.scale(tfmtable, scaledpoints, relativeid)
+ local t, factor = tfm.do_scale(tfmtable, scaledpoints, relativeid)
t.factor = factor
t.ascender = factor*(tfmtable.ascender or 0)
t.descender = factor*(tfmtable.descender or 0)
@@ -633,7 +651,8 @@ function fonts.analyzers.aux.setstate(head,font)
local descriptions = tfmdata.descriptions
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 id = current.id
+ if id == glyph and current.font == font then
local d = descriptions[current.char]
if d then
if d.class == "mark" then
@@ -654,6 +673,10 @@ function fonts.analyzers.aux.setstate(head,font)
end
first, last, n = nil, nil, 0
end
+ elseif id == disc then
+ -- always in the middle
+ set_attribute(current,state,2) -- midi
+ last = current
else -- finish
if first and first == last then
set_attribute(last,state,4) -- isol
@@ -681,155 +704,33 @@ function tfm.replacements(tfm,value)
-- 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
-
--- tfm features, experimental
-
-tfm.features = tfm.features or { }
-tfm.features.list = tfm.features.list or { }
-tfm.features.default = tfm.features.default or { }
-
-function tfm.enhance(tfmdata,specification)
- -- we don't really share tfm data because we always reload
- -- but this is more in sycn with afm and such
- local features = (specification.features and specification.features.normal ) or { }
- tfmdata.shared = tfmdata.shared or { }
- tfmdata.shared.features = features
- -- tfmdata.shared.tfmdata = tfmdata -- circular
- tfmdata.filename = specification.name
- if not features.encoding then
- local name, size = specification.name, specification.size
- local encoding, filename = match(name,"^(.-)%-(.*)$") -- context: encoding-name.*
- if filename and encoding and fonts.enc.known[encoding] then
- features.encoding = encoding
- end
- end
- tfm.set_features(tfmdata)
-end
-
-function tfm.set_features(tfmdata)
- -- todo: no local functions
- local shared = tfmdata.shared
--- local tfmdata = shared.tfmdata
- local features = shared.features
- if not table.is_empty(features) then
- local mode = tfmdata.mode or fonts.mode
- local fi = fonts.initializers[mode]
- if fi and fi.tfm then
- 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 fi.tfm[f] then -- brr
- if tfm.trace_features then
- logs.report("define font","initializing feature %s to %s for mode %s for font %s",f,tostring(value),mode or 'unknown',tfmdata.name or 'unknown')
- end
- fi.tfm[f](tfmdata,value)
- mode = tfmdata.mode or fonts.mode
- fi = fonts.initializers[mode]
- end
- end
- end
- end
- initialize(fonts.triggers)
- initialize(tfm.features.list)
- initialize(fonts.manipulators)
- end
- local fm = fonts.methods[mode]
- if fm and fm.tfm then
- local function register(list) -- node manipulations
- if list then
- for i=1,#list do
- local f = list[i]
- if features[f] and fm.tfm[f] then -- brr
- if not shared.processors then -- maybe also predefine
- shared.processors = { fm.tfm[f] }
- else
- shared.processors[#shared.processors+1] = fm.tfm[f]
- end
- end
- end
- end
- end
- register(tfm.features.list)
- end
- end
-end
-
-function tfm.features.register(name,default)
- tfm.features.list[#tfm.features.list+1] = name
- tfm.features.default[name] = default
-end
-
-function tfm.reencode(tfmdata,encoding)
- if encoding and fonts.enc.known[encoding] then
- local data = fonts.enc.load(encoding)
- if data then
- local characters, original, vector = tfmdata.characters, { }, data.vector
- tfmdata.encoding = encoding -- not needed
- for k, v in next, characters do
- v.name, v.index, original[k] = vector[k], k, v
- end
- for k,v in next, data.unicodes do
- if k ~= v then
- if trace_defining then
- logs.report("define font","reencoding U+%04X to U+%04X",k,v)
- end
- characters[k] = original[v]
- end
- end
- end
- end
-end
-
-tfm.features.register('reencode')
-
-fonts.initializers.base.tfm.reencode = tfm.reencode
-fonts.initializers.node.tfm.reencode = tfm.reencode
-
-fonts.enc = fonts.enc or { }
-fonts.enc.remappings = fonts.enc.remappings or { }
-
-function tfm.remap(tfmdata,remapping)
- local vector = remapping and fonts.enc.remappings[remapping]
- if vector then
- local characters, original = tfmdata.characters, { }
- for k, v in next, characters do
- original[k], characters[k] = v, nil
- end
- for k,v in next, vector do
- if k ~= v then
- if trace_defining then
- logs.report("define font","remapping U+%04X to U+%04X",k,v)
+-- checking
+
+function tfm.checked_filename(metadata,whatever)
+ local foundfilename = metadata.foundfilename
+ if not foundfilename then
+ local askedfilename = metadata.filename or ""
+ if askedfilename ~= "" then
+ foundfilename = resolvers.findbinfile(askedfilename,"") or ""
+ if foundfilename == "" then
+ logs.report("fonts","source file '%s' is not found",askedfilename)
+ foundfilename = resolvers.findbinfile(file.basename(askedfilename),"") or ""
+ if foundfilename ~= "" then
+ logs.report("fonts","using source file '%s' (cache mismatch)",foundfilename)
end
- local c = original[k]
- characters[v] = c
- c.index = k
end
+ elseif whatever then
+ logs.report("fonts","no source file for '%s'",whatever)
+ foundfilename = ""
end
- tfmdata.encodingbytes = 2
- tfmdata.format = 'type1'
+ metadata.foundfilename = foundfilename
+ -- logs.report("fonts","using source file '%s'",foundfilename)
end
+ return foundfilename
end
-tfm.features.register('remap')
-
-fonts.initializers.base.tfm.remap = tfm.remap
-fonts.initializers.node.tfm.remap = tfm.remap
-
-- status info
statistics.register("fonts load time", function()
- if statistics.elapsedindeed(fonts) then
- return format("%s seconds",statistics.elapsedtime(fonts))
- end
+ return statistics.elapsedseconds(fonts)
end)
diff --git a/Master/texmf-dist/tex/context/base/font-tra.mkiv b/Master/texmf-dist/tex/context/base/font-tra.mkiv
index c45e1394d83..e47c8c49d48 100644
--- a/Master/texmf-dist/tex/context/base/font-tra.mkiv
+++ b/Master/texmf-dist/tex/context/base/font-tra.mkiv
@@ -27,8 +27,8 @@
\newbox\otfcollector
-\def\startotfcollecting{\ctxlua{nodes.tracers.steppers.start()}}
-\def\stopotfcollecting {\ctxlua{nodes.tracers.steppers.stop()}}
+\unexpanded\def\startotfcollecting{\ctxlua{nodes.tracers.steppers.start()}}
+\unexpanded\def\stopotfcollecting {\ctxlua{nodes.tracers.steppers.stop()}}
\def\resetotfcollecting{\ctxlua{nodes.tracers.steppers.reset()}}
% Rather experimental:
@@ -88,12 +88,12 @@
\stoplinecorrection
\blank}}
-\def\startotfsample
+\unexpanded\def\startotfsample
{\enabletrackers[*otf.sample]% beware, kind of global
\startotfcollecting
\begingroup}
-\def\stopotfsample
+\unexpanded\def\stopotfsample
{\endgroup
\stopotfcollecting
\disabletrackers[*otf.sample]% beware, kind of global: otf.sample
diff --git a/Master/texmf-dist/tex/context/base/font-vf.lua b/Master/texmf-dist/tex/context/base/font-vf.lua
index c103555a3be..4f99c47b94b 100644
--- a/Master/texmf-dist/tex/context/base/font-vf.lua
+++ b/Master/texmf-dist/tex/context/base/font-vf.lua
@@ -1,6 +1,6 @@
if not modules then modules = { } end modules ['font-vf'] = {
version = 1.001,
- comment = "companion to font-ini.tex",
+ comment = "companion to font-ini.mkiv",
author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
copyright = "PRAGMA ADE / ConTeXt Development Team",
license = "see context related readme files"
diff --git a/Master/texmf-dist/tex/context/base/font-xtx.lua b/Master/texmf-dist/tex/context/base/font-xtx.lua
index 7b3f1ec8196..eac75dd2901 100644
--- a/Master/texmf-dist/tex/context/base/font-xtx.lua
+++ b/Master/texmf-dist/tex/context/base/font-xtx.lua
@@ -1,6 +1,6 @@
if not modules then modules = { } end modules ['font-xtx'] = {
version = 1.001,
- comment = "companion to font-ini.tex",
+ comment = "companion to font-ini.mkiv",
author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
copyright = "PRAGMA ADE / ConTeXt Development Team",
license = "see context related readme files"
@@ -9,6 +9,7 @@ if not modules then modules = { } end modules ['font-xtx'] = {
local texsprint, count = tex.sprint, tex.count
local format, concat, gmatch, match, find, lower = string.format, table.concat, string.gmatch, string.match, string.find, string.lower
local tostring, next = tostring, next
+local lpegmatch = lpeg.match
local trace_defining = false trackers.register("fonts.defining", function(v) trace_defining = v end)
@@ -71,12 +72,15 @@ local function istrue (s) list[s] = 'yes' end
local function isfalse(s) list[s] = 'no' end
local function iskey (k,v) list[k] = v end
+local function istrue (s) list[s] = true end
+local function isfalse(s) list[s] = false end
+
local spaces = lpeg.P(" ")^0
local namespec = (1-lpeg.S("/:("))^0 -- was: (1-lpeg.S("/: ("))^0
local crapspec = spaces * lpeg.P("/") * (((1-lpeg.P(":"))^0)/iscrap) * spaces
local filename = (lpeg.P("file:")/isfile * (namespec/thename)) + (lpeg.P("[") * lpeg.P(true)/isname * (((1-lpeg.P("]"))^0)/thename) * lpeg.P("]"))
local fontname = (lpeg.P("name:")/isname * (namespec/thename)) + lpeg.P(true)/issome * (namespec/thename)
-local sometext = (lpeg.R("az") + lpeg.R("AZ") + lpeg.R("09"))^1
+local sometext = (lpeg.R("az","AZ","09") + lpeg.S("+-."))^1
local truevalue = lpeg.P("+") * spaces * (sometext/istrue)
local falsevalue = lpeg.P("-") * spaces * (sometext/isfalse)
local keyvalue = (lpeg.C(sometext) * spaces * lpeg.P("=") * spaces * lpeg.C(sometext))/iskey
@@ -86,15 +90,17 @@ local option = spaces * (keyvalue + falsevalue + truevalue + somevalue) * sp
local options = lpeg.P(":") * spaces * (lpeg.P(";")^0 * option)^0
local pattern = (filename + fontname) * subvalue^0 * crapspec^0 * options^0
+local normalize_meanings = fonts.otf.meanings.normalize
+
function fonts.define.specify.colonized(specification) -- xetex mode
list = { }
- pattern:match(specification.specification)
- for k, v in next, list do
- list[k] = v:is_boolean()
- if type(list[a]) == "nil" then
- list[k] = v
- end
- end
+ lpegmatch(pattern,specification.specification)
+--~ for k, v in next, list do
+--~ list[k] = v:is_boolean()
+--~ if type(list[a]) == "nil" then
+--~ list[k] = v
+--~ end
+--~ end
list.crap = nil -- style not supported, maybe some day
if list.name then
specification.name = list.name
@@ -108,7 +114,8 @@ function fonts.define.specify.colonized(specification) -- xetex mode
specification.sub = list.sub
list.sub = nil
end
- specification.features.normal = list
+-- specification.features.normal = list
+ specification.features.normal = normalize_meanings(list)
return specification
end
diff --git a/Master/texmf-dist/tex/context/base/font-xtx.mkii b/Master/texmf-dist/tex/context/base/font-xtx.mkii
index 5f4b85879af..d6086b44e64 100644
--- a/Master/texmf-dist/tex/context/base/font-xtx.mkii
+++ b/Master/texmf-dist/tex/context/base/font-xtx.mkii
@@ -98,11 +98,14 @@
\fi
\fi\fi\fi}
+\newconditional\enabledfontfeatures
+
\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
+ {\settrue\enabledfontfeatures
+ \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
@@ -121,33 +124,49 @@
\processcommacommand[\checkedfontfeatures]\doconvertfontfeatures % raw
\ifx\convertedfontfeatures\empty
\let\checkedfontfeatures\empty
- \else
+ \else\ifconditional\enabledfontfeatures
\edef\checkedfontfeatures{:\convertedfontfeatures}%
- \fi
+ \else
+ \let\checkedfontfeatures\empty
+ \fi\fi
\fi
\fi
\docheckfontfilenameprefix#1:\empty:\empty\relax
\doshowcheckedfontfeatures}
+\edef\@@fontfeaturesareno {features\v!no}
+\edef\@@fontfeaturesareoff{features\v!off}
+
\def\dodoconvertfontfeatures#1=#2#3=#4\relax
{\ifx#2\empty
% invalid feature
\else\ifcsname @xtx@#1@#2#3\endcsname
- \expandafter\ifx\csname @xtx@#1@#2#3\endcsname\empty\else
- \edef\convertedfontfeatures{\convertedfontfeatures\csname @xtx@#1@#2#3\endcsname;}%
- \fi
+ \expandafter\ifx\csname @xtx@#1@#2#3\endcsname\empty\else
+ \edef\convertedfontfeatures{\convertedfontfeatures\csname @xtx@#1@#2#3\endcsname;}%
+ \fi
\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;}%
+ \edef\!!stringc{#1#2#3}%
+ \ifx\!!stringc\@@fontfeaturesareoff
+ \setfalse\enabledfontfeatures
+ \else\ifx\!!stringc\@@fontfeaturesareno
+ \setfalse\enabledfontfeatures
+ \else
+ \edef\convertedfontfeatures
+ {\convertedfontfeatures
+ \ifx\!!stringb\v!yes
+ +\!!stringa
+ \else\ifx\!!stringb\v!on
+ +\!!stringa
+ \else\ifx\!!stringb\v!no
+ -\!!stringa
+ \else\ifx\!!stringb\v!off
+ -\!!stringa
+ \else
+ \!!stringa=\!!stringb
+ \fi\fi\fi\fi;}%
+ \fi\fi
\fi\fi}
\def\doconvertfontfeatures#1%
diff --git a/Master/texmf-dist/tex/context/base/grph-fig.mkiv b/Master/texmf-dist/tex/context/base/grph-fig.mkiv
index 415a2aa7623..e10dc0a32c6 100644
--- a/Master/texmf-dist/tex/context/base/grph-fig.mkiv
+++ b/Master/texmf-dist/tex/context/base/grph-fig.mkiv
@@ -15,7 +15,7 @@
\unprotect
-\def\setupexternalfigures
+\unexpanded\def\setupexternalfigures
{\dosingleempty\dosetupexternalfigures}
\def\dosetupexternalfigures[#1]%
@@ -87,7 +87,7 @@
%
% \defineexternalfigure[name][settings]
-\def\defineexternalfigure
+\unexpanded\def\defineexternalfigure
{\dodoubleargument\dodefineexternalfigure}
\def\dodefineexternalfigure[#1][#2]%
@@ -130,19 +130,99 @@
\def\useexternalfigure
{\doquadrupleempty\douseexternalfigure}
+% \def\douseexternalfigure[#1][#2][#3][#4]%
+% {\doifelsenothing{#1}
+% {\doifsomething{#2}
+% {\doifassignmentelse{#3}
+% {\setvalue{\??ef\??ef#2}{\doplaceexternalfigure[#2][#2][#3][#4]}}
+% {\setvalue{\??ef\??ef#2}{\doplaceexternalfigure[#2][#2][][#4]}}}}
+% {\doifelsenothing{#2}
+% {\doifassignmentelse{#3}
+% {\setvalue{\??ef\??ef#1}{\doplaceexternalfigure[#1][#1][][#3]}}
+% {\setvalue{\??ef\??ef#1}{\doplaceexternalfigure[#1][#1][#3][#4]}}}
+% {\doifassignmentelse{#3}
+% {\setvalue{\??ef\??ef#1}{\doplaceexternalfigure[#1][#2][][#3]}}
+% {\setvalue{\??ef\??ef#1}{\doplaceexternalfigure[#1][#2][#3][#4]}}}}}
+
\def\douseexternalfigure[#1][#2][#3][#4]%
{\doifelsenothing{#1}
{\doifsomething{#2}
{\doifassignmentelse{#3}
- {\setvalue{\??ef\??ef#2}{\doplaceexternalfigure[#2][#2][#3][#4]}}
- {\setvalue{\??ef\??ef#2}{\doplaceexternalfigure[#2][#2][][#4]}}}}
+ {\dodouseexternalfigure{#2}{#2}{#3}{#4}}
+ {\dodouseexternalfigure{#2}{#2}{}{#4}}}}
{\doifelsenothing{#2}
{\doifassignmentelse{#3}
- {\setvalue{\??ef\??ef#1}{\doplaceexternalfigure[#1][#1][][#3]}}
- {\setvalue{\??ef\??ef#1}{\doplaceexternalfigure[#1][#1][#3][#4]}}}
+ {\dodouseexternalfigure{#1}{#1}{}{#3}}
+ {\dodouseexternalfigure{#1}{#1}{#3}{#4}}}
{\doifassignmentelse{#3}
- {\setvalue{\??ef\??ef#1}{\doplaceexternalfigure[#1][#2][][#3]}}
- {\setvalue{\??ef\??ef#1}{\doplaceexternalfigure[#1][#2][#3][#4]}}}}}
+ {\dodouseexternalfigure{#1}{#2}{}{#3}}
+ {\dodouseexternalfigure{#1}{#2}{#3}{#4}}}}}
+
+\def\dodouseexternalfigure#1#2#3#4%
+ {\setvalue{\??ef\??ef#1}{\doplaceexternalfigure[#1][#2][#3][#4]}%
+ \doanalyseexternalfigurecollection[#2][#4]}
+
+\newconditional\inexternalfigurecollection
+\newdimen\xexternalfigurecollectionminwidth
+\newdimen\xexternalfigurecollectionmaxwidth
+\newdimen\xexternalfigurecollectionminheight
+\newdimen\xexternalfigurecollectionmaxheight
+
+\def\doanalyseexternalfigurecollection[#1][#2]%
+ {\ifconditional\inexternalfigurecollection
+ \setfalse\inexternalfigurecollection
+ \getfiguredimensions[#1][#2]%
+ \settrue\inexternalfigurecollection
+ \scratchdimen\naturalfigurewidth
+ \ifdim\scratchdimen>\xexternalfigurecollectionmaxwidth \xexternalfigurecollectionmaxwidth \scratchdimen \fi
+ \ifdim\scratchdimen<\xexternalfigurecollectionminwidth \xexternalfigurecollectionminwidth \scratchdimen \fi
+ \scratchdimen\naturalfigureheight
+ \ifdim\scratchdimen>\xexternalfigurecollectionmaxheight \xexternalfigurecollectionmaxheight\scratchdimen \fi
+ \ifdim\scratchdimen<\xexternalfigurecollectionminheight \xexternalfigurecollectionminheight\scratchdimen \fi
+ \fi}
+
+\unexpanded\def\startexternalfigurecollection[#1]%
+ {\begingroup
+ \def\currentexternalfigurecollection{#1}%
+ \settrue\inexternalfigurecollection
+ \xexternalfigurecollectionminwidth \maxdimen
+ \xexternalfigurecollectionmaxwidth \zeropoint
+ \xexternalfigurecollectionminheight\maxdimen
+ \xexternalfigurecollectionmaxheight\zeropoint}
+
+\unexpanded\def\stopexternalfigurecollection
+ {\setxvalue{\??ef:c:\currentexternalfigurecollection:\c!minwidth }{\the\xexternalfigurecollectionminwidth }%
+ \setxvalue{\??ef:c:\currentexternalfigurecollection:\c!maxwidth }{\the\xexternalfigurecollectionmaxwidth }%
+ \setxvalue{\??ef:c:\currentexternalfigurecollection:\c!minheight}{\the\xexternalfigurecollectionminheight}%
+ \setxvalue{\??ef:c:\currentexternalfigurecollection:\c!maxheight}{\the\xexternalfigurecollectionmaxheight}%
+ \endgroup}
+
+\def\externalfigurecollectionparameter#1#2%
+ {\csname\ifcsname\??ef:c:#1:#2\endcsname\??ef:c:#1:#2\else\s!empty\fi\endcsname}
+
+\def\externalfigurecollectionminwidth #1{\externalfigurecollectionparameter{#1}\c!minwidth }
+\def\externalfigurecollectionmaxwidth #1{\externalfigurecollectionparameter{#1}\c!maxwidth }
+\def\externalfigurecollectionminheight#1{\externalfigurecollectionparameter{#1}\c!minheight}
+\def\externalfigurecollectionmaxheight#1{\externalfigurecollectionparameter{#1}\c!maxheight}
+
+\let\efcparameter\externalfigurecollectionparameter
+\let\efcminwidth \externalfigurecollectionminwidth
+\let\efcmaxwidth \externalfigurecollectionmaxwidth
+\let\efcminheight\externalfigurecollectionminheight
+\let\efcmaxheight\externalfigurecollectionmaxheight
+
+% \startexternalfigurecollection[name]
+% \useexternalfigure[cow] [cow.pdf]
+% \useexternalfigure[mill][mill.png]
+% \stopexternalfigurecollection
+% \starttext
+% \bTABLE
+% \bTR
+% \bTD \externalfigure[cow] [height=\externalfigurecollectionmaxheight{name}] \eTD
+% \bTD \externalfigure[mill][height=\externalfigurecollectionmaxheight{name}] \eTD
+% \eTR
+% \eTABLE
+% \stoptext
\def\dosetefparameters#1#2#3% parent_id use_settings current_settings
{\doifelsenothing{#1} % inherit from parent
@@ -173,7 +253,7 @@
\long\def\resourcecomment#1%
{\long\gdef\currentresourcecomment{#1}}
-\long\def\startresourcecomment#1\stopresourcecomment
+\long\unexpanded\def\startresourcecomment#1\stopresourcecomment
{\long\gdef\currentresourcecomment{#1}}
\let\currentresourcecomment\empty
@@ -290,7 +370,7 @@
{\hskip2em\box\colorbarbox}%
\global\wd\colorbarbox\zeropoint}
-\def\placestartfigure[#1][#2][#3]#4\placestopfigure[#5]%
+\unexpanded\def\placestartfigure[#1][#2][#3]#4\placestopfigure[#5]%
{\hbox
{\setbox0\hbox
{\useexternalfigure[\s!dummy][#2][#3,#5]%
@@ -402,11 +482,13 @@
\long\def\dostartfigure#1%
{\dotripleargument\dodostartfigure#1\stopfigure}
-\def\startfigure
+\unexpanded\def\startfigure
{\grabuntil{\e!stop\v!figure}\dostartfigure}
%D NEW: used in styledesign manual
+% beware in mkiv we don't have the typeset- prefix
+%
% \setbuffer[typeset-b]\endbuffer
% \setbuffer[typeset-a]\endbuffer
%
@@ -431,32 +513,64 @@
\dodotypesetbuffer[\jobname][]
\fi\fi}
-\def\dodotypesetbuffer[#1][#2]% beware: this will mix up the mp graphics
+% \def\dodotypesetbuffer[#1][#2]%
+% {\bgroup
+% \global\advance\noftypesetbuffers\plusone
+% \edef\bufferfilename{\jobname-buffer-\the\noftypesetbuffers}%
+% \doifmode{*\v!first}
+% {\ctxlua{buffers.save("\bufferfilename.tmp","#1",true)}%
+% \executesystemcommand{context \bufferfilename.tmp}}%
+% \externalfigure[\bufferfilename.pdf][#2]%
+% \egroup}
+
+\def\dodotypesetbuffer[#1][#2]%
{\bgroup
\global\advance\noftypesetbuffers\plusone
\edef\bufferfilename{\jobname-buffer-\the\noftypesetbuffers}%
- \ctxlua{buffers.save("\bufferfilename.tmp","#1",true)}%
- \executesystemcommand{context \bufferfilename.tmp}%
+ \ctxlua{buffers.run("\bufferfilename.tmp","#1",true)}%
\externalfigure[\bufferfilename.pdf][#2]%
\egroup}
+
+\def\dodotypesetbufferindeed#1%
+ {}
% for me only (manuals and such)
+%
+% \definetypesetting [name] [options] [settings-a]
+%
+% \typesetfile [name] [file] [settings-b]
+% \typesetfile [file] [options] [settings-b]
+% \typesetfile [file] [settings-b]
+% \typesetfile [file]
+%
+% \enabletrackers[files.run]
+% \starttext
+% \typesetfile[oepsoeps.tex][width=10cm,frame=on]
+% \stoptext
\definesystemvariable{tz}
-\def\definetypesetting{\dotripleempty\dodefinetypesetting}
+\unexpanded\def\definetypesetting{\dotripleempty\dodefinetypesetting}
\def\typesetfile {\dotripleempty\dotypesetfile}
-\def\dodefinetypesetting[#1][#2][#3]%
- {\doifsomething{#1}{\setvalue{\??tz#1}{\dodotypesetfile{#2}{#3}}}}
+\unexpanded\def\definetypesetting{\dotripleempty\dodefinetypesetting}
+\def\typesetfile {\dotripleempty\dotypesetfile}
-\def\dotypesetfile[#1][#2][#3]%
- {\executeifdefined{\??tz#1}\gobbletwoarguments{#2}{#3}}
+\def\dodefinetypesetting[#1][#2][#3]% <name> options settings-a
+ {\doifsomething{#1}{\setvalue{\??tz#1}{\dodotypesetfile{#2}{#3}}}}
-\def\dodotypesetfile#1#2#3#4% args settings file settings
- {\doifmode{*\v!first}{\executesystemcommand{texmfstart texexec.pl --batch --pdf #1 #3}}%
- \doglobal\beforesplitstring#3\at.\to\typesetfilename
- \externalfigure[\typesetfilename.pdf][#2,#4]}
+\def\dotypesetfile[#1][#2][#3]% <name> filename settings-b | filename options settings
+ {\ifcsname\??tz#1\endcsname
+ \csname\??tz#1\endcsname{#2}{#3}%
+ \else\ifthirdargument % filename options settings
+ \dodotypesetfile{#2}{#3}{#1}{}%
+ \else\ifsecondargument % filename settings
+ \dodotypesetfile{}{#2}{#1}{}%
+ \fi\fi\fi}
+
+\def\dodotypesetfile#1#2#3#4% options settings-a filename settings-b
+ {\edef\typesetfilename{\ctxlua{tex.write(jobfiles.run("#3","#1"))}}%
+ \expanded{\externalfigure[\typesetfilename]}[#2,#4]}
\setupexternalfigures
[\c!option=,
diff --git a/Master/texmf-dist/tex/context/base/grph-fil.lua b/Master/texmf-dist/tex/context/base/grph-fil.lua
new file mode 100644
index 00000000000..2e32c7a6066
--- /dev/null
+++ b/Master/texmf-dist/tex/context/base/grph-fil.lua
@@ -0,0 +1,42 @@
+if not modules then modules = { } end modules ['grph-fil'] = {
+ version = 1.001,
+ comment = "companion to grph-fig.mkiv",
+ author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
+ copyright = "PRAGMA ADE / ConTeXt Development Team",
+ license = "see context related readme files"
+}
+
+local format, concat = string.format, table.concat
+
+local trace_run = false trackers.register("files.run",function(v) trace_run = v end)
+
+local command = "context %s"
+
+jobfiles = jobfiles or { }
+jobfiles.collected = jobfiles.collected or { }
+jobfiles.tobesaved = jobfiles.tobesaved or { }
+
+local tobesaved, collected = jobfiles.tobesaved, jobfiles.collected
+
+local function initializer()
+ tobesaved, collected = jobfiles.tobesaved, jobfiles.collected
+end
+
+job.register('jobfiles.collected', jobfiles.tobesaved, initializer)
+
+jobfiles.forcerun = false
+
+function jobfiles.run(name,...)
+ local oldchecksum = collected[name]
+ local newchecksum = file.checksum(name)
+ if jobfiles.forcerun or not oldchecksum or oldchecksum ~= newchecksum then
+ if trace_run then
+ commands.writestatus("buffers","changes in '%s', processing forced",name)
+ end
+ os.execute(format(command,concat({ name, ... }," ")))
+ elseif trace_run then
+ commands.writestatus("buffers","no changes in '%s', not processed",name)
+ end
+ tobesaved[name] = newchecksum
+ return file.replacesuffix(name,"pdf")
+end
diff --git a/Master/texmf-dist/tex/context/base/grph-inc.lua b/Master/texmf-dist/tex/context/base/grph-inc.lua
index 3dfcee739ff..508240a3bc4 100644
--- a/Master/texmf-dist/tex/context/base/grph-inc.lua
+++ b/Master/texmf-dist/tex/context/base/grph-inc.lua
@@ -1,6 +1,6 @@
if not modules then modules = { } end modules ['grph-inc'] = {
version = 1.001,
- comment = "companion to grph-inc.tex",
+ comment = "companion to grph-inc.mkiv",
author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
copyright = "PRAGMA ADE / ConTeXt Development Team",
license = "see context related readme files"
@@ -12,6 +12,8 @@ if not modules then modules = { } end modules ['grph-inc'] = {
-- dimensions
-- consult rlx
+-- figures.boxnumber can go as we now can use names
+
--[[
The ConTeXt figure inclusion mechanisms are among the oldest code
in ConTeXt and evolve dinto a complex whole. One reason is that we
@@ -33,12 +35,20 @@ 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.
]]--
-local texsprint, format, lower, find, match = tex.sprint, string.format, string.lower, string.find, string.match
+local format, lower, find, match, gsub, gmatch = string.format, string.lower, string.find, string.match, string.gsub, string.gmatch
+local texsprint, texbox = tex.sprint, tex.box
+local contains = table.contains
+local concat = table.concat
+local todimen = string.todimen
local ctxcatcodes = tex.ctxcatcodes
local variables = interfaces.variables
-local trace_figures = false trackers.register("figures.locating",function(v) trace_figures = v end)
+local trace_figures = false trackers.register("figures.locating", function(v) trace_figures = v end)
+local trace_bases = false trackers.register("figures.bases", function(v) trace_bases = v end)
+local trace_programs = false trackers.register("figures.programs", function(v) trace_programs = v end)
+local trace_conversion = false trackers.register("figures.conversion", function(v) trace_conversion = v end)
+local trace_inclusion = false trackers.register("figures.inclusion", function(v) trace_inclusion = v end)
--- some extra img functions ---
@@ -69,7 +79,7 @@ local validtypes = table.tohash(img.types())
function img.check_size(size)
if size then
- size = size:gsub("box","")
+ size = gsub(size,"box","")
return (validsizes[size] and size) or "crop"
else
return "crop"
@@ -78,13 +88,13 @@ 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 = 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.boxnumber or 0
figures.defaultsearch = true
figures.defaultwidth = 0
figures.defaultheight = 0
@@ -104,7 +114,7 @@ figures.cachepaths = {
figures.paths = table.copy(figures.localpaths)
figures.order = {
- "pdf", "mps", "jpg", "png", "jbig", "svg", "eps", "mov", "buffer", "tex"
+ "pdf", "mps", "jpg", "png", "jbig", "svg", "eps", "gif", "mov", "buffer", "tex",
}
figures.formats = {
@@ -115,6 +125,7 @@ figures.formats = {
["jbig"] = { list = { "jbig", "jbig2", "jb2" } },
["svg"] = { list = { "svg", "svgz" } },
["eps"] = { list = { "eps", "ai" } },
+ ["gif"] = { list = { "gif" } },
["mov"] = { list = { "mov", "avi" } },
["buffer"] = { list = { "tmp", "buffer", "buf" } },
["tex"] = { list = { "tex" } },
@@ -122,19 +133,21 @@ figures.formats = {
function figures.setlookups()
figures.suffixes, figures.patterns = { }, { }
- for _, format in pairs(figures.order) do
+ for _, format in next, 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
+ local list = data.list
+ if list then
+ for i=1,#list do
+ fs[list[i]] = 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
+ local patterns = data.patterns
+ if patterns then
+ for i=1,#patterns do
+ fp[#fp+1] = { patterns[i], format } -- array
end
end
end
@@ -149,12 +162,12 @@ local function register(tag,target,what)
figures.formats[target] = data
end
local d = data[tag] -- list or pattern
- if d and not table.contains(d,what) then
+ if d and not contains(d,what) then
d[#d+1] = what -- suffix or patternspec
else
data[tag] = { what }
end
- if not table.contains(figures.order,target) then
+ if not contains(figures.order,target) then
figures.order[#figures.order+1] = target
end
figures.setlookups()
@@ -182,35 +195,24 @@ function figures.setpaths(locationset,pathlist)
last_locationset = locationset
end
if h[iv["global"]] then
- for s in pathlist:gmatch("([^, ]+)") do
- if not table.contains(t,s) then
+ -- for s in gmatch(pathlist,",* *([^,]+)") do
+ local list = aux.settings_to_array(pathlist)
+ for i=1,#list do
+ local s = list[i]
+ if not contains(t,s) then
t[#t+1] = s
end
end
end
figures.paths, last_pathlist = t, pathlist
if trace_figures then
- logs.report("figures","locations: %s",last_locationset)
- logs.report("figures","path list: %s",table.concat(figures.paths))
+ commands.writestatus("figures","locations: %s",last_locationset)
+ commands.writestatus("figures","path list: %s",concat(figures.paths, " "))
end
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.hash or tostring(data.status.private) -- the <img object>
-- return data.status.fullname .. "+".. (data.status.page or data.request.page or 1) -- img is still not perfect
@@ -262,13 +264,16 @@ do
end
function figures.push(request)
- statistics.starttiming(figures)
+ local ncs = #callstack + 1
+ if ncs == 1 then
+ statistics.starttiming(figures)
+ end
local figuredata = figures.new()
if request then
local iv = interfaces.variables
- -- request.width/height are strings and are only used when no natural dimensions
- -- can be determined; at some point the handlers might set them to numbers instead
---~ local w, h = tonumber(request.width), tonumber(request.height)
+ -- request.width/height are strings and are only used when no natural dimensions
+ -- can be determined; at some point the handlers might set them to numbers instead
+ -- 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] == variables.yes
@@ -277,21 +282,25 @@ do
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
+ -- 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
+ callstack[ncs] = figuredata
return figuredata
end
function figures.pop()
- figuredata = callstack[#callstack]
- callstack[#callstack] = nil
- statistics.stoptiming(figures)
+ local ncs = #callstack
+ figuredata = callstack[ncs]
+ callstack[ncs] = nil
+ if ncs == 1 then
+ statistics.stoptiming(figures)
+ end
end
-- maybe move texsprint to tex
function figures.get(category,tag,default)
- local value = figuredata[category][tag]
+ local value = figuredata[category]
+ value = value and value[tag]
if not value or value == "" or value == true then
return default or ""
else
@@ -307,19 +316,48 @@ do
end
+local defaultformat = "pdf"
+local defaultprefix = "m_k_v_i_"
+
local function register(askedname,specification)
if specification then
local format = specification.format
if format then
- local converter = figures.converters[format]
+ local conversion = specification.conversion
+ if conversion == "" then
+ conversion = nil
+ end
+ local newformat = conversion
+ if not newformat or newformat == "" then
+ newformat = defaultformat
+ end
+ local converter = (newformat ~= format) and figures.converters[format]
+ if trace_conversion then
+ logs.report("figures","checking conversion of '%s': old format '%s', new format '%s', conversion '%s'",
+ askedname,format,newformat,conversion or "default")
+ end
+ if converter then
+ if converter[newformat] then
+ converter = converter[newformat]
+ else
+ newformat = defaultformat
+ if converter[newformat] then
+ converter = converter[newformat]
+ else
+ newformat = defaultformat
+ end
+ end
+ end
if converter then
local oldname = specification.fullname
- local newformat = "pdf" -- todo, other target than pdf
local newpath = file.dirname(oldname)
- local newbase = file.replacesuffix(file.basename(oldname),newformat)
+ local oldbase = file.basename(oldname)
+ local newbase = file.replacesuffix(oldbase,newformat)
local fc = specification.cache or figures.cachepaths.path
if fc and fc ~= "" and fc ~= "." then
newpath = fc
+ else
+ newbase = defaultprefix .. newbase
end
local subpath = specification.subpath or figures.cachepaths.subpath
if subpath and subpath ~= "" and subpath ~= "." then
@@ -331,10 +369,19 @@ local function register(askedname,specification)
end
local newname = file.join(newpath,newbase)
dir.makedirs(newpath)
+ oldname = file.collapse_path(oldname)
+ newname = file.collapse_path(newname)
local oldtime = lfs.attributes(oldname,'modification') or 0
local newtime = lfs.attributes(newname,'modification') or 0
if oldtime > newtime then
+ if trace_conversion then
+ logs.report("figures","converting '%s' from '%s' to '%s'",askedname,format,newformat)
+ end
converter(oldname,newname)
+ else
+ if trace_conversion then
+ logs.report("figures","no need to convert '%s' from '%s' to '%s'",askedname,format,newformat)
+ end
end
if io.exists(newname) then
specification.foundname = oldname
@@ -353,15 +400,15 @@ local function register(askedname,specification)
if not found then
specification.found = false
if trace_figures then
- logs.report("figures","format not supported: %s",format)
+ commands.writestatus("figures","format not supported: %s",format)
end
else
specification.found = true
if trace_figures then
if validtypes[format] then
- logs.report("figures","format natively supported by backend: %s",format)
+ commands.writestatus("figures","format natively supported by backend: %s",format)
else
- logs.report("figures","format supported by output file format: %s",format)
+ commands.writestatus("figures","format supported by output file format: %s",format)
end
end
end
@@ -369,24 +416,42 @@ local function register(askedname,specification)
specification = { }
end
specification.foundname = specification.foundname or specification.fullname
- figures.found[askedname] = specification
+ figures.found[askedname .. "->" .. (specification.conversion or "default")] = specification
return specification
end
+local resolve_too = true -- urls
+
local function locate(request) -- name, format, cache
local askedname = resolvers.clean_path(request.name)
- if figures.found[askedname] then
- return figures.found[askedname]
+ local foundname = figures.found[askedname .. "->" .. (request.conversion or "default")]
+ if foundname then
+ return foundname
+ end
+ -- protocol check
+ local hashed = url.hashed(askedname)
+ if hashed and hashed.scheme ~= "file" then
+ local foundname = resolvers.findbinfile(askedname)
+ if foundname then
+ askedname = foundname
+ end
end
- local askedpath= file.dirname(askedname)
+ -- we could use the hashed data instead
+ local askedpath= file.is_rootbased_path(askedname)
local askedbase = file.basename(askedname)
local askedformat = (request.format ~= "" and request.format ~= "unknown" and request.format) or file.extname(askedname) or ""
local askedcache = request.cache
+ local askedconversion = request.conversion
if askedformat ~= "" then
+ if trace_figures then
+ commands.writestatus("figures","strategy: forced format")
+ end
askedformat = lower(askedformat)
local format = figures.suffixes[askedformat]
if not format then
- for _, pattern in ipairs(figures.patterns) do
+ local figurepatterns = figures.patterns
+ for i=1,#figurepatterns do
+ local pattern = figurepatterns[i]
if find(askedformat,pattern[1]) then
format = pattern[2]
break
@@ -394,7 +459,7 @@ local function locate(request) -- name, format, cache
end
end
if format then
- local foundname = figures.exists(askedname,format) -- not askedformat
+ local foundname = figures.exists(askedname,format,resolve_too) -- not askedformat
if foundname then
return register(askedname, {
askedname = askedname,
@@ -402,29 +467,36 @@ local function locate(request) -- name, format, cache
format = format,
cache = askedcache,
foundname = foundname,
+ conversion = askedconversion,
})
end
end
- if askedpath ~= "" then
+ if askedpath then
-- path and type given, todo: strip pieces of path
- if figures.exists(askedname,askedformat) then
+ if figures.exists(askedname,askedformat,resolve_too) then
return register(askedname, {
askedname = askedname,
fullname = askedname,
format = askedformat,
cache = askedcache,
+ conversion = askedconversion,
})
end
else
-- type given
- for _, path in ipairs(figures.paths) do
+ local figurepaths = figures.paths
+ for i=1,#figurepaths do
+ local path = figurepaths[i]
local check = path .. "/" .. askedname
- if figures.exists(check,askedformat) then
+ -- we pass 'true' as it can be an url as well, as the type
+ -- is given we don't waste much time
+ if figures.exists(check,askedformat,resolve_too) then
return register(check, {
askedname = askedname,
fullname = check,
format = askedformat,
cache = askedcache,
+ conversion = askedconversion,
})
end
end
@@ -436,56 +508,88 @@ local function locate(request) -- name, format, cache
fullname = check,
format = askedformat,
cache = askedcache,
+ conversion = askedconversion,
})
end
end
end
- elseif askedpath ~= "" then
- for _, format in ipairs(figures.order) do
+ elseif askedpath then
+ if trace_figures then
+ commands.writestatus("figures","strategy: rootbased path")
+ end
+ local figureorder = figures.order
+ for i=1,#figureorder do
+ local format = figureorder[i]
local list = figures.formats[format].list or { format }
- for _, suffix in ipairs(list) do
+ for j=1,#list do
+ local suffix = list[j]
local check = file.addsuffix(askedname,suffix)
- if figures.exists(check,format) then
+ if figures.exists(check,format,resolve_too) then
return register(askedname, {
askedname = askedname,
fullname = check,
format = format,
cache = askedcache,
+ conversion = askedconversion,
})
end
end
end
else
if figures.prefer_quality then
- for _, format in ipairs(figures.order) do
+ if trace_figures then
+ commands.writestatus("figures","strategy: unknown format, prefer quality")
+ end
+ local figurepaths = figures.paths
+ local figureorder = figures.order
+ for j=1,#figureorder do
+ local format = figureorder[j]
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
+ for k=1,#list do
+ local suffix = list[k]
+ -- local name = file.replacesuffix(askedbase,suffix)
+ local name = file.replacesuffix(askedname,suffix)
+ for i=1,#figurepaths do
+ local path = figurepaths[i]
local check = path .. "/" .. name
- if figures.exists(check,format) then
+ local isfile = url.hashed(check).scheme == "file"
+ if not isfile then
+ if trace_figures then
+ commands.writestatus("figures","warning: skipping path %s",path)
+ end
+ elseif figures.exists(check,format,true) then
return register(askedname, {
askedname = askedname,
fullname = check,
format = format,
cache = askedcache,
+ conversion = askedconversion,
})
end
end
end
end
else -- 'location'
- for _, path in ipairs(figures.paths) do
- for _, format in ipairs(figures.order) do
+ if trace_figures then
+ commands.writestatus("figures","strategy: unknown format, prefer path")
+ end
+ local figurepaths = figures.paths
+ local figureorder = figures.order
+ for i=1,#figurepaths do
+ local path = figurepaths[i]
+ for j=1,#figureorder do
+ local format = figureorder[j]
local list = figures.formats[format].list or { format }
- for _, suffix in ipairs(list) do
+ for k=1,#list do
+ local suffix = list[k]
local check = path .. "/" .. file.replacesuffix(askedbase,suffix)
- if figures.exists(check,format) then
+ if figures.exists(check,format,resolve_too) then
return register(askedname, {
askedname = askedname,
fullname = check,
format = format,
cache = askedcache,
+ conversion = askedconversion,
})
end
end
@@ -493,9 +597,15 @@ local function locate(request) -- name, format, cache
end
end
if figures.defaultsearch then
- for _, format in ipairs(figures.order) do
+ if trace_figures then
+ commands.writestatus("figures","strategy: default tex path")
+ end
+ local figureorder = figures.order
+ for j=1,#figureorder do
+ local format = figureorder[j]
local list = figures.formats[format].list or { format }
- for _, suffix in ipairs(list) do
+ for k=1,#list do
+ local suffix = list[k]
local check = resolvers.find_file(file.replacesuffix(askedname,suffix))
if check and check ~= "" then
return register(askedname, {
@@ -503,6 +613,7 @@ local function locate(request) -- name, format, cache
fullname = check,
format = format,
cache = askedcache,
+ conversion = askedconversion,
})
end
end
@@ -519,6 +630,7 @@ figures.checkers = figures.checkers or { }
figures.includers = figures.includers or { }
figures.converters = figures.converters or { }
figures.identifiers = figures.identifiers or { }
+figures.programs = figures.programs or { }
figures.identifiers.list = {
figures.identifiers.default
@@ -541,7 +653,9 @@ end
function figures.identify(data)
data = data or figures.current()
- for _, identifier in ipairs(figures.identifiers.list) do
+ local list = figures.identifiers.list
+ for i=1,#list do
+ local identifier = list[i]
data = identifier(data)
if data.status.status > 0 then
break
@@ -549,8 +663,8 @@ function figures.identify(data)
end
return data
end
-function figures.exists(askedname,format)
- return (figures.existers[format] or figures.existers.generic)(askedname)
+function figures.exists(askedname,format,resolve)
+ return (figures.existers[format] or figures.existers.generic)(askedname,resolve)
end
function figures.check(data)
data = data or figures.current()
@@ -569,38 +683,47 @@ 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)
+--~ print(table.serialize(figures.current()))
+ local dr, du, ds, nr = data.request, data.used, data.status, figures.boxnumber
+ local box = texbox[nr]
+ ds.width = box.width
+ ds.height = box.height
+ ds.xscale = ds.width /(du.width or 1)
ds.yscale = ds.height/(du.height or 1)
+--~ print(table.serialize(figures.current()))
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)
- texsprint(ctxcatcodes,"\\emptyfoundexternalfigure")
+function figures.dummy(data)
+ data = data or figures.current()
+ local dr, du, ds, nr = data.request, data.used, data.status, figures.boxnumber
+ local box = node.hpack(node.new("hlist")) -- we need to set the dir (luatex 0.60 buglet)
+ du.width = du.width or figures.defaultwidth
+ du.height = du.height or figures.defaultheight
+ du.depth = du.depth or figures.defaultdepth
+ -- box.dir = "TLT"
+ box.width = du.width
+ box.height = du.height
+ box.depth = du.depth
+ texbox[nr] = box -- hm, should be global (to be checked for consistency)
end
-- -- -- generic -- -- --
-function figures.existers.generic(askedname)
---~ local result = io.exists(askedname)
---~ result = (result==true and askedname) or result
---~ local result = resolvers.find_file(askedname) or ""
- local result = resolvers.findbinfile(askedname) or ""
- if result == "" then result = false end
+function figures.existers.generic(askedname,resolve)
+ -- not findbinfile
+ local result
+ if lfs.isfile(askedname) then
+ result = askedname
+ elseif resolve then
+ result = resolvers.findbinfile(askedname) or ""
+ if result == "" then result = false end
+ end
if trace_figures then
if result then
- logs.report("figures","found: %s -> %s",askedname,result)
+ commands.writestatus("figures","found: %s -> %s",askedname,result)
else
- logs.report("figures","not found: %s",askedname)
+ commands.writestatus("figures","not found: %s",askedname)
end
end
return result
@@ -608,7 +731,11 @@ end
function figures.checkers.generic(data)
local dr, du, ds = data.request, data.used, data.status
local name, page, size, color = du.fullname or "unknown generic", du.page or dr.page, dr.size or "crop", dr.color or "natural"
- local hash = name .. "->" .. page .. "->" .. size .. "->" .. color
+ local conversion = dr.conversion
+ if not conversion or conversion == "" then
+ conversion = "unknown"
+ end
+ local hash = name .. "->" .. page .. "->" .. size .. "->" .. color .. "->" .. conversion
local figure = figures.loaded[hash]
if figure == nil then
figure = img.new { filename = name, page = page, pagebox = dr.size }
@@ -617,6 +744,13 @@ function figures.checkers.generic(data)
local f, d = backends.codeinjections.setfigurealternative(data,figure)
figure, data = f or figure, d or data
figures.loaded[hash] = figure
+ if trace_conversion then
+ logs.report("figures","new graphic, hash: %s",hash)
+ end
+ else
+ if trace_conversion then
+ logs.report("figures","existing graphic, hash: %s",hash)
+ end
end
if figure then
du.width = figure.width
@@ -643,9 +777,11 @@ function figures.includers.generic(data)
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)
+ local nr = figures.boxnumber
+ -- it looks like we have a leak in attributes here .. todo
+ local box = node.hpack(img.node(figure)) -- img.node(figure) not longer valid
+ box.width, box.height, box.depth = figure.width, figure.height, 0 -- new, hm, tricky, we need to do that in tex (yet)
+ texbox[nr] = box
ds.objectnumber = figure.objnum
texsprint(ctxcatcodes,"\\relocateexternalfigure")
end
@@ -678,22 +814,29 @@ end
function figures.checkers.mov(data)
local dr, du, ds = data.request, data.used, data.status
- dr.width = (dr.width or figures.defaultwidth):todimen()
- dr.height = (dr.height or figures.defaultheight):todimen()
- du.width = dr.width
- du.height = dr.height
- du.foundname = du.fullname
- local code = backends.codeinjections.insertmovie {
- width = du.width or dr.width,
- height = du.height or dr.height,
- factor = number.dimenfactors.bp,
- ["repeat"] = dr["repeat"],
- controls = dr.controls,
- preview = dr.preview,
- label = dr.label,
- foundname = du.foundname,
- }
- texsprint(ctxcatcodes,format("\\startfoundexternalfigure{%ssp}{%ssp}%s\\stopfoundexternalfigure",du.width,du.height,code))
+ local width = todimen(dr.width or figures.defaultwidth)
+ local height = todimen(dr.height or figures.defaultheight)
+ local foundname = du.fullname
+ dr.width, dr.height = width, height
+ du.width, du.height, du.foundname = width, height, foundname
+ if trace_inclusion then
+ logs.report("figures","including movie '%s': width %s, height %s",foundname,width,height)
+ end
+ -- we need to push the node.write in between ... we could make a shared helper for this
+ context.startfoundexternalfigure(width .. "sp",height .. "sp")
+ context(function()
+ backends.codeinjections.insertmovie {
+ width = width,
+ height = height,
+ factor = number.dimenfactors.bp,
+ ["repeat"] = dr["repeat"],
+ controls = dr.controls,
+ preview = dr.preview,
+ label = dr.label,
+ foundname = foundname,
+ }
+ end)
+ context.stopfoundexternalfigure()
return data
end
@@ -750,27 +893,100 @@ function figures.checkers.tex(data)
end
figures.includers.tex = figures.includers.nongeneric
--- -- -- eps -- -- --
+-- -- -- converters -- -- --
+
+local function makeoptions(program)
+ local to = type(options)
+ return (to == "table" and concat(options," ")) or (to == "string" and options) or ""
+end
-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 = format("mtxrun bin:pstopdf --outputpath=%s %s",outputpath,oldname)
+local function runprogram(...)
+ local command = format(...)
+ if trace_conversion or trace_programs then
+ logs.report("figures","running %s",command)
+ end
os.spawn(command)
end
-figures.converters.svg = figures.converters.eps
+-- -- -- eps -- -- --
+
+local epsconverter = { }
+figures.converters.eps = epsconverter
+
+figures.programs.gs = {
+ options = {
+ "-dAutoRotatePages=/None",
+ "-dPDFSETTINGS=/prepress",
+ "-dEPSCrop",
+ },
+ command = (os.type == "windows" and "gswin32") or "gs"
+}
+
+function epsconverter.pdf(oldname,newname)
+ local gs = figures.programs.gs
+ runprogram (
+ '%s -q -sDEVICE=pdfwrite -dNOPAUSE -dNOCACHE -dBATCH %s -sOutputFile="%s" "%s" -c quit',
+ gs.command, makeoptions(gs.options), newname, oldname
+ )
+end
+
+epsconverter.default = epsconverter.pdf
+
+-- -- -- svg -- -- --
--- -- -- lowres -- -- --
+local svgconverter = { }
+figures.converters.svg = svgconverter
+figures.converters.svgz = svgconverter
---~ function figures.converters.pdf(oldname,newname)
---~ local outputpath = file.dirname(newname)
---~ local outputbase = file.basename(newname)
---~ local command = format("mtxrun bin:pstopdf --method=4 --outputpath=%s %s",outputpath,oldname)
---~ os.spawn(command)
---~ end
+-- inkscape on windows only works with complete paths
+
+figures.programs.inkscape = {
+ options = {
+ "--export-dpi=600"
+ },
+ command = "inkscape"
+}
+
+function svgconverter.pdf(oldname,newname)
+ local inkscape = figures.programs.inkscape
+ runprogram (
+ '%s "%s" --export-pdf="%s" %s',
+ inkscape.command, oldname, newname, makeoptions(inkscape.options)
+ )
+end
+
+function svgconverter.png(oldname,newname)
+ local inkscape = figures.programs.inkscape
+ runprogram (
+ '%s "%s" --export-png="%s" %s',
+ inkscape.command, oldname, newname, makeoptions(inkscape.options)
+ )
+end
+
+svgconverter.default = svgconverter.pdf
+
+-- -- -- gif -- -- --
+
+local gifconverter = { }
+figures.converters.gif = gifconverter
+
+figures.programs.convert = {
+ command = "convert" -- imagemagick
+}
+
+function gifconverter.pdf(oldname,newname)
+ local convert = figures.programs.convert
+ runprogram (
+ "convert %s %s",
+ convert.command, makeoptions(convert.options), oldname, newname
+ )
+end
+
+gifconverter.default = gifconverter.pdf
+
+-- todo: lowres
+
+-- -- -- bases -- -- --
figures.bases = { }
figures.bases.list = { } -- index => { basename, fullname, xmlroot }
@@ -782,10 +998,7 @@ local bases = figures.bases
function bases.use(basename)
if basename == "reset" then
- bases.list = { }
- bases.used = { }
- bases.found = { }
- bases.enabled = false
+ bases.list, bases.used, bases.found, bases.enabled = { }, { }, { }, false
else
basename = file.addsuffix(basename,"xml")
if not bases.used[basename] then
@@ -796,11 +1009,17 @@ function bases.use(basename)
bases.enabled = true
xml.registerns("rlx","http://www.pragma-ade.com/schemas/rlx") -- we should be able to do this per xml file
end
+ if trace_bases then
+ commands.writestatus("figures","registering base '%s'",basename)
+ end
end
end
end
function bases.find(basename,askedlabel)
+ if trace_bases then
+ commands.writestatus("figures","checking for '%s' in base '%s'",askedlabel,basename)
+ end
basename = file.addsuffix(basename,"xml")
local t = bases.found[askedlabel]
if t == nil then
@@ -808,30 +1027,41 @@ function bases.find(basename,askedlabel)
local page = 0
if base[2] == nil then
-- no yet located
- for _, path in ipairs(figures.paths) do
+ local figurepaths = figures.paths
+ for i=1,#figurepaths do
+ local path = figurepaths[i]
local xmlfile = path .. "/" .. basename
if io.exists(xmlfile) then
base[2] = xmlfile
base[3] = xml.load(xmlfile)
+ if trace_bases then
+ commands.writestatus("figures","base '%s' loaded",xmlfile)
+ end
break
end
end
end
t = false
if base[2] and base[3] then -- rlx:library
- for e, d, k in xml.elements(base[3],"/(*:library|figurelibrary)/*:figure/*:label") do
+ for e in xml.collected(base[3],"/(*:library|figurelibrary)/*:figure/*:label") do
page = page + 1
- if xml.content(d[k]) == askedlabel then
+ if xml.text(e) == askedlabel then
t = {
base = file.replacesuffix(base[2],"pdf"),
format = "pdf",
- name = xml.filters.text(e,"*:file"),
+ name = xml.text(e,"../*:file"), -- to be checked
page = page,
}
bases.found[askedlabel] = t
+ if trace_bases then
+ commands.writestatus("figures","figure '%s' found in base '%s'",askedlabel,base[2])
+ end
return t
end
end
+ if trace_bases and not t then
+ commands.writestatus("figures","figure '%s' not found in base '%s'",askedlabel,base[2])
+ end
end
end
return t
@@ -840,7 +1070,9 @@ end
-- we can access sequential or by name
function bases.locate(askedlabel)
- for _, entry in ipairs(bases.list) do
+ local list = bases.list
+ for i=1,#list do
+ local entry = list[i]
local t = bases.find(entry[1],askedlabel)
if t then
return t
diff --git a/Master/texmf-dist/tex/context/base/grph-inc.mkii b/Master/texmf-dist/tex/context/base/grph-inc.mkii
index dde7ab2e60f..1bd7544d8bc 100644
--- a/Master/texmf-dist/tex/context/base/grph-inc.mkii
+++ b/Master/texmf-dist/tex/context/base/grph-inc.mkii
@@ -476,7 +476,10 @@
\fi}
\def\externalfigurestamp % needs \edef'd macros!
- {\wantedfigurename
+ {\ifx\wantedfigurepath\empty\else
+ -\wantedfigurepath
+ \fi
+ \wantedfigurename
\ifx\wantedfiguretype\empty\else
\ifx\wantedfiguretype\s!unknown\else
-\wantedfiguretype
diff --git a/Master/texmf-dist/tex/context/base/grph-inc.mkiv b/Master/texmf-dist/tex/context/base/grph-inc.mkiv
index c8c0e36b74b..16ee1097a2f 100644
--- a/Master/texmf-dist/tex/context/base/grph-inc.mkiv
+++ b/Master/texmf-dist/tex/context/base/grph-inc.mkiv
@@ -20,21 +20,20 @@
%D - a few more obscure things
\registerctxluafile{grph-inc}{1.001}
+\registerctxluafile{grph-fil}{1.001}
\registerctxluafile{grph-u3d}{1.001} % this will change
+\registerctxluafile{grph-swf}{1.001} % this will change
\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
-\let\traceexternalfigures \traceexternalfigurestrue
-
\def\resetfigurevariables {\the\everyexternalfigureresets}
\def\checkfigurevariables {\the\everyexternalfigurechecks}
@@ -55,7 +54,7 @@
%D \definegraphictypesynonym[jbg] [jb2]
%D \stoptyping
-\def\definegraphictypesynonym
+\unexpanded\def\definegraphictypesynonym
{\dodoubleargument\dodefinegraphictypesynonym}
\def\dodefinegraphictypesynonym[#1][#2]%
@@ -65,7 +64,7 @@
%D macro picks up the list.
\def\setfigurepathlist
- {\ctxlua{figures.setpaths("\@@exlocation","\@@exdirectory")}}
+ {\ctxlua{figures.setpaths("\@@exlocation",\!!bs\@@exdirectory\!!es)}}
%D Variables:
@@ -86,14 +85,13 @@
\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\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
@@ -105,7 +103,7 @@
\let\figurescaleyscale \figureyscale
\appendtoks
- \ctxlua {
+ \ctxlua { % figures.defaultwidth .. why not dimen
figures.setpaths("\@@exlocation","\@@exdirectory") ;
figures.defaultwidth = \number\dimexpr\defaultfigurewidth \relax ;
figures.defaultheight = \number\dimexpr\defaultfigureheight\relax ;
@@ -214,6 +212,10 @@
\newconditional\testexternalfigureonly
+% \enabletrackers[figures.conversion]
+% \externalfigure[demo.svg]
+% \externalfigure[demo.svg][conversion=png]
+
\def\calculateexternalfigure[#1][#2][#3][#4][#5][#6]% \cmd label filename parent_id preset current
{\dontcomplain
\restorecatcodes
@@ -237,6 +239,7 @@
controls="\@@efcontrols",
preview="\@@efpreview",
display="\@@efdisplay",
+ conversion="\@@efconversion",
color="\internalspotcolorparent\@@efcolor", % hack is needed
["repeat"]="\@@efrepeat",
width="\@@efwidth", % can be crap
@@ -244,6 +247,12 @@
} }%
\ctxlua{figures.identify()}%
\ifconditional\testexternalfigureonly
+ \ifcase\figurestatus \else
+ \ctxlua{figures.check()}%
+ \ctxlua{figures.dummy()}%
+ \ctxlua{figures.scale()}%
+ \ctxlua{figures.done()}%
+ \fi
\signalexternalfigure
\else
\ifcase\figurestatus
@@ -277,10 +286,10 @@
\global\setsystemmode \v!figure % todo, also: \v!resource
\fi}
-\def\startfoundexternalfigure#1#2%
+\unexpanded\def\startfoundexternalfigure#1#2% ht wd
{\global\setbox\foundexternalfigure\vbox to #2\bgroup\vss\hbox to #1\bgroup}
-\def\stopfoundexternalfigure
+\unexpanded\def\stopfoundexternalfigure
{\hss\egroup\egroup}
\def\emptyfoundexternalfigure
diff --git a/Master/texmf-dist/tex/context/base/grph-swf.lua b/Master/texmf-dist/tex/context/base/grph-swf.lua
new file mode 100644
index 00000000000..e55454b52b5
--- /dev/null
+++ b/Master/texmf-dist/tex/context/base/grph-swf.lua
@@ -0,0 +1,43 @@
+if not modules then modules = { } end modules ['grph-swf'] = {
+ version = 1.001,
+ comment = "companion to grph-inc.mkiv",
+ author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
+ copyright = "PRAGMA ADE / ConTeXt Development Team",
+ license = "see context related readme files"
+}
+
+local format = string.format
+
+local texsprint = tex.sprint
+local ctxcatcodes = tex.ctxcatcodes
+local pdfannotation = nodes.pdfannotation
+
+function figures.checkers.swf(data)
+ local dr, du, ds = data.request, data.used, data.status
+ local width = (dr.width or figures.defaultwidth):todimen()
+ local height = (dr.height or figures.defaultheight):todimen()
+ local foundname = du.fullname
+ dr.width, dr.height = width, height
+ du.width, du.height, du.foundname = width, height, foundname
+ texsprint(ctxcatcodes,format("\\startfoundexternalfigure{%ssp}{%ssp}",width,height))
+ local annot, preview, ref = backends.pdf.helpers.insertswf {
+ foundname = foundname,
+ width = width,
+ height = height,
+ -- factor = number.dimenfactors.bp,
+ -- display = dr.display,
+ -- controls = dr.controls,
+ -- label = dr.label,
+ }
+ -- node.write(pdfannotation(width,-height,0,annot()))
+ texsprint(ctxcatcodes,format("\\pdfannot width %ssp height %ssp {%s}",width,height,annot())) -- brrrr
+--~ if ref then -- wrong ! a direct ref should work
+--~ texsprint(ctxcatcodes,format("\\smash{\\pdfrefximage%s\\relax}",ref)) -- brrrr
+--~ end
+ texsprint(ctxcatcodes,"\\stopfoundexternalfigure")
+ return data
+end
+
+figures.includers.swf = figures.includers.nongeneric
+
+figures.registersuffix("swf","swf")
diff --git a/Master/texmf-dist/tex/context/base/grph-trf.mkii b/Master/texmf-dist/tex/context/base/grph-trf.mkii
index 798a9b0b470..3e32395b480 100644
--- a/Master/texmf-dist/tex/context/base/grph-trf.mkii
+++ b/Master/texmf-dist/tex/context/base/grph-trf.mkii
@@ -262,6 +262,7 @@
\else\ifdim\scaleboxdimy>\scaleboxvsize
\global\scaleboxdimx\zeropoint \global\scaleboxdimy\scaleboxvsize
\fi\fi
+ \setscaleboxbydimension
\fi}
\def\setscaleboxbyscale
@@ -380,7 +381,8 @@
\scratchdimen\scaleboxoutervsize % \textheight
\fi
\fi\fi\fi}
- {\scaleboxoutervsize\scaleparameter\c!maxheight}%
+ {\scratchdimen\scaleparameter\c!maxheight
+ \scaleboxoutervsize\scratchdimen}%
\doifelsenothing{\scaleparameter\c!height}
{\scaleboxvsize\scratchdimen}
{\scaleboxvsize\scaleparameter\c!height}%
diff --git a/Master/texmf-dist/tex/context/base/grph-trf.mkiv b/Master/texmf-dist/tex/context/base/grph-trf.mkiv
index 798a9b0b470..9924a68e8e3 100644
--- a/Master/texmf-dist/tex/context/base/grph-trf.mkiv
+++ b/Master/texmf-dist/tex/context/base/grph-trf.mkiv
@@ -14,6 +14,8 @@
%D It may be that some functionality got lost. If it concerns
%D defined features, let me know and it will be sorted out.
+%D We will move the calculations to lua.
+
\writestatus{loading}{ConTeXt Graphic Macros / Transformations}
\unprotect
@@ -113,6 +115,7 @@
\global\let\finalscaleboxxfactor\!!hundred
\global\let\finalscaleboxyfactor\!!hundred
\ifdim\nextboxht>\zeropoint \ifdim\nextboxwd>\zeropoint
+ % hm, still useful? better in lua anyway
\edef\scaleboxstampa % slow way [can be combined]
{\scaleparameter\c!scale \scaleparameter\c!xscale \scaleparameter\c!yscale
\scaleparameter\c!factor\scaleparameter\c!wfactor\scaleparameter\c!hfactor
@@ -126,10 +129,10 @@
\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
+% \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
@@ -200,7 +203,6 @@
\xdef\finalscaleboxxscale {\withoutpt\the\dimexpr\scax\points/\plushundred\relax}%
\xdef\finalscaleboxyscale {\withoutpt\the\dimexpr\scay\points/\plushundred\relax}}
-
\setvalue{\??xy:\c!grid:\v!yes }{\getnoflines \fighei\setevalue{\currentscaletag\c!height}{\the\noflines\lineheight}}
\setvalue{\??xy:\c!grid:\v!height }{\getrawnoflines\fighei\setevalue{\currentscaletag\c!height}{\the\dimexpr\noflines\lineheight+\strutdepth\relax}}
\setvalue{\??xy:\c!grid:\v!depth }{\getrawnoflines\fighei\setevalue{\currentscaletag\c!height}{\the\dimexpr\noflines\lineheight-\strutdepth\relax}}
@@ -262,6 +264,7 @@
\else\ifdim\scaleboxdimy>\scaleboxvsize
\global\scaleboxdimx\zeropoint \global\scaleboxdimy\scaleboxvsize
\fi\fi
+ \setscaleboxbydimension
\fi}
\def\setscaleboxbyscale
@@ -371,8 +374,7 @@
\else % hm, there should be an option to force this
\ifdim\pagegoal<\maxdimen
\ifdim\pagetotal<\pagegoal
- \scratchdimen\pagegoal
- \advance\scratchdimen -\pagetotal
+ \scratchdimen\dimexpr\pagegoal-\pagetotal\relax
\else
\scratchdimen\scaleboxoutervsize % \textheight
\fi
@@ -380,7 +382,8 @@
\scratchdimen\scaleboxoutervsize % \textheight
\fi
\fi\fi\fi}
- {\scaleboxoutervsize\scaleparameter\c!maxheight}%
+ {\scratchdimen\scaleparameter\c!maxheight
+ \scaleboxoutervsize\scratchdimen}%
\doifelsenothing{\scaleparameter\c!height}
{\scaleboxvsize\scratchdimen}
{\scaleboxvsize\scaleparameter\c!height}%
@@ -455,7 +458,7 @@
%D
%D \showsetup{setupclipping}
-\def\setupclipping
+\unexpanded\def\setupclipping
{\dodoubleargument\getparameters[\??cp]}
\def\clip
diff --git a/Master/texmf-dist/tex/context/base/grph-u3d.lua b/Master/texmf-dist/tex/context/base/grph-u3d.lua
index e5944691c00..f3bf1763115 100644
--- a/Master/texmf-dist/tex/context/base/grph-u3d.lua
+++ b/Master/texmf-dist/tex/context/base/grph-u3d.lua
@@ -1,6 +1,6 @@
if not modules then modules = { } end modules ['grph-u3d'] = {
version = 1.001,
- comment = "companion to grph-inc.tex",
+ comment = "companion to grph-inc.mkiv",
author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
copyright = "PRAGMA ADE / ConTeXt Development Team",
license = "see context related readme files"
@@ -8,34 +8,38 @@ if not modules then modules = { } end modules ['grph-u3d'] = {
-- see lpdf-u3d.lua for comment
-local format = string.format
+local trace_inclusion = false trackers.register("figures.inclusion", function(v) trace_inclusion = v end)
-local texsprint = tex.sprint
-local ctxcatcodes = tex.ctxcatcodes
+local pdfannotation = nodes.pdfannotation
+local todimen = string.todimen
+
+-- maybe todo: backends.codeinjections.insertu3d
function figures.checkers.u3d(data)
local dr, du, ds = data.request, data.used, data.status
- local width = (dr.width or figures.defaultwidth):todimen()
- local height = (dr.height or figures.defaultheight):todimen()
+ local width = todimen(dr.width or figures.defaultwidth)
+ local height = todimen(dr.height or figures.defaultheight)
local foundname = du.fullname
dr.width, dr.height = width, height
du.width, du.height, du.foundname = width, height, foundname
- texsprint(ctxcatcodes,format("\\startfoundexternalfigure{%ssp}{%ssp}",width,height))
- local annot, preview, ref = backends.pdf.helpers.insert3d {
- foundname = foundname,
- width = width,
- height = height,
- factor = number.dimenfactors.bp,
- display = dr.display,
- controls = dr.controls,
- label = dr.label,
- }
- -- node.write(nodes.pdfannot(width,-height,0,annot()))
- texsprint(ctxcatcodes,format("\\pdfannot width %ssp height %ssp {%s}",width,height,annot())) -- brrrr
---~ if ref then -- wrong ! a direct ref should work
---~ texsprint(ctxcatcodes,format("\\smash{\\pdfrefximage%s\\relax}",ref)) -- brrrr
---~ end
- texsprint(ctxcatcodes,"\\stopfoundexternalfigure")
+ if trace_inclusion then
+ logs.report("figures","including u3d '%s': width %s, height %s",foundname,width,height)
+ end
+ context.startfoundexternalfigure(width .. "sp",height .. "sp")
+ context(function()
+ local annotation, preview, ref = backends.pdf.helpers.insert3d {
+ foundname = foundname,
+ width = width,
+ height = height,
+ factor = number.dimenfactors.bp,
+ display = dr.display,
+ controls = dr.controls,
+ label = dr.label,
+ }
+--~ print(annotation, preview, ref)
+ node.write(pdfannotation(width,height,0,annotation()))
+ end)
+ context.stopfoundexternalfigure()
return data
end
diff --git a/Master/texmf-dist/tex/context/base/hand-ini.mkiv b/Master/texmf-dist/tex/context/base/hand-ini.mkiv
index 41e9db415fb..0285b10cbb1 100644
--- a/Master/texmf-dist/tex/context/base/hand-ini.mkiv
+++ b/Master/texmf-dist/tex/context/base/hand-ini.mkiv
@@ -17,12 +17,36 @@
% \definefontfeature[demo][default][mode=node,expansion=quality]
% \definefontfeature[demo][default][mode=node,protrusion=pure]
+% experimental setup:
+%
+% \showframe \setupalign[hanging] \enabletrackers[fonts.protrusion]
+%
+% \definefontfeature[default] [default][mode=node,script=latn]
+% %definefontfeature[whatever][default][mode=node,lfbd=yes,rtbd=yes,script=latn]
+% \definefontfeature[whatever][default][mode=node,protrusion=quality]
+% \definefontfeature[whocares][default][mode=node,protrusion=yes,opbd=yes,script=latn] % left|right|yes
+%
+% \definedfont[fxlbi.otf*default] \input tufte 0123456789 \par \dorecurse{15}{1 2 3 4 5 6 7 8 9 0 } \par
+% \definedfont[fxlbi.otf*whatever] \input tufte 0123456789 \par \dorecurse{15}{1 2 3 4 5 6 7 8 9 0 } \par
+% \definedfont[fxlbi.otf*whocares] \input tufte 0123456789 \par \dorecurse{15}{1 2 3 4 5 6 7 8 9 0 } \par
+%
+% %definefontfeature[whocares][default][mode=node,protrusion=2,opbd=yes,script=latn,featurefile=texgyrepagella-regularxx.fea]
+% \definefontfeature[whocares][default][mode=node,protrusion=2,opbd=yes,script=latn]
+%
+% \definedfont[texgyrepagella-regularxx.otf*whocares] \input tufte
+
\unprotect
%D New stuff.
-\def\setupfontexpansion [#1][#2]{\ctxlua{commands.setupfontexpansion ("#1","#2")}}
-\def\setupfontprotrusion[#1][#2]{\ctxlua{commands.setupfontprotrusion("#1","#2")}}
+\unexpanded\def\setupfontexpansion {\dodoubleargument\dosetupfontexpansion }
+\unexpanded\def\setupfontprotrusion{\dodoubleargument\dosetupfontprotrusion}
+
+\def\dosetupfontexpansion [#1][#2]{\ctxlua{commands.setupfontexpansion ("#1","#2")}}
+\def\dosetupfontprotrusion[#1][#2]{\ctxlua{commands.setupfontprotrusion("#1","#2")}}
+
+% \setupfontprotrusion[quality-upright][vector=quality]
+% \setupfontprotrusion[quality-slanted][vector=quality,right=1.5]
%D Old stuff.
@@ -36,9 +60,9 @@
\appendtoks \disableadjusting \to \everyforgetall % Here or not here?
\appendtoks \disableprotruding \to \everyforgetall % Here or not here?
-\def\startfonthandling #1{\fonthandlingerror\fonthandlingerror\gobbleuntil\stopfonthandling} % can't happen
-\def\definefonthandling {\dotripleempty\dodefinefonthandling}
-\def\setupfonthandling {\dodoubleempty\dosetupfonthandling }
+\unexpanded\def\startfonthandling #1{\fonthandlingerror\fonthandlingerror\gobbleuntil\stopfonthandling} % can't happen
+\unexpanded\def\definefonthandling {\dotripleempty\dodefinefonthandling}
+\unexpanded\def\setupfonthandling {\dodoubleempty\dosetupfonthandling }
\def\dodefinefonthandling[#1][#2][#3]{\fonthandlingerror}
\def\dosetupfonthandling [#1][#2]{\fonthandlingerror}
\def\usehandling [#1]{\fonthandlingerror}
diff --git a/Master/texmf-dist/tex/context/base/java-ini.lua b/Master/texmf-dist/tex/context/base/java-ini.lua
index 161a1657e90..f64a8a18fb0 100644
--- a/Master/texmf-dist/tex/context/base/java-ini.lua
+++ b/Master/texmf-dist/tex/context/base/java-ini.lua
@@ -1,12 +1,13 @@
if not modules then modules = { } end modules ['java-ini'] = {
version = 1.001,
- comment = "companion to java-ini.tex",
+ comment = "companion to java-ini.mkiv",
author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
copyright = "PRAGMA ADE / ConTeXt Development Team",
license = "see context related readme files"
}
local format = string.format
+local lpegmatch = lpeg.match
javascripts = javascripts or { }
javascripts.codes = javascripts.codes or { }
@@ -42,18 +43,18 @@ local parsepreamble = name * ((used * name) + lpeg.Cc("")) * spaces * script
local parsefunctions = (fname + any)^0
function javascripts.storecode(str)
- local name, uses, script = parsecode:match(str)
+ local name, uses, script = lpegmatch(parsecode,str)
if name and name ~= "" then
javascripts.codes[name] = { uses, script }
end
end
function javascripts.storepreamble(str) -- now later
- local name, used, script = parsepreamble:match(str)
+ local name, used, script = lpegmatch(parsepreamble,str)
if name and name ~= "" then
preambles[#preambles+1] = { name, used, script }
preambled[name] = #preambles
- parsefunctions:match(script)
+ lpegmatch(parsefunctions,script)
end
end
@@ -61,7 +62,7 @@ function javascripts.setpreamble(name,script) -- now later
if name and name ~= "" then
preambles[#preambles+1] = { name, "now", script }
preambled[name] = #preambles
- parsefunctions:match(script)
+ lpegmatch(parsefunctions,script)
end
end
@@ -73,7 +74,7 @@ function javascripts.addtopreamble(name,script) -- now later
else
preambles[#preambles+1] = { name, "now", script }
preambled[name] = #preambles
- parsefunctions:match(script)
+ lpegmatch(parsefunctions,script)
end
end
end
diff --git a/Master/texmf-dist/tex/context/base/l-aux.lua b/Master/texmf-dist/tex/context/base/l-aux.lua
index 0e5babeeb26..97063e3bca9 100644
--- a/Master/texmf-dist/tex/context/base/l-aux.lua
+++ b/Master/texmf-dist/tex/context/base/l-aux.lua
@@ -1,15 +1,27 @@
if not modules then modules = { } end modules ['l-aux'] = {
version = 1.001,
- comment = "companion to luat-lib.tex",
+ comment = "companion to luat-lib.mkiv",
author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
copyright = "PRAGMA ADE / ConTeXt Development Team",
license = "see context related readme files"
}
+-- for inline, no store split : for s in string.gmatch(str,",* *([^,]+)") do .. end
+
aux = aux or { }
local concat, format, gmatch = table.concat, string.format, string.gmatch
local tostring, type = tostring, type
+local lpegmatch = lpeg.match
+
+local P, R, V = lpeg.P, lpeg.R, lpeg.V
+
+local escape, left, right = P("\\"), P('{'), P('}')
+
+lpeg.patterns.balanced = P {
+ [1] = ((escape * (left+right)) + (1 - (left+right)) + V(2))^0,
+ [2] = left * V(1) * right
+}
local space = lpeg.P(' ')
local equal = lpeg.P("=")
@@ -17,7 +29,7 @@ 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 nested = lpeg.P { lbrace * (nobrace + lpeg.V(1))^0 * rbrace }
local spaces = space^0
local value = lpeg.P(lbrace * lpeg.C((nobrace + nested)^0) * rbrace) + lpeg.C((nested + (1-comma))^0)
@@ -55,13 +67,13 @@ function aux.make_settings_to_hash_pattern(set,how)
end
end
-function aux.settings_to_hash(str)
+function aux.settings_to_hash(str,existing)
if str and str ~= "" then
- hash = { }
+ hash = existing or { }
if moretolerant then
- pattern_b_s:match(str)
+ lpegmatch(pattern_b_s,str)
else
- pattern_a_s:match(str)
+ lpegmatch(pattern_a_s,str)
end
return hash
else
@@ -69,39 +81,41 @@ function aux.settings_to_hash(str)
end
end
-function aux.settings_to_hash_tolerant(str)
+function aux.settings_to_hash_tolerant(str,existing)
if str and str ~= "" then
- hash = { }
- pattern_b_s:match(str)
+ hash = existing or { }
+ lpegmatch(pattern_b_s,str)
return hash
else
return { }
end
end
-function aux.settings_to_hash_strict(str)
+function aux.settings_to_hash_strict(str,existing)
if str and str ~= "" then
- hash = { }
- pattern_c_s:match(str)
+ hash = existing or { }
+ lpegmatch(pattern_c_s,str)
return next(hash) and hash
else
return nil
end
end
-local seperator = comma * space^0
+local separator = 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)
+local pattern = lpeg.Ct(value*(separator*value)^0)
-- "aap, {noot}, mies" : outer {} removes, leading spaces ignored
aux.settings_to_array_pattern = pattern
+-- we could use a weak table as cache
+
function aux.settings_to_array(str)
if not str or str == "" then
return { }
else
- return pattern:match(str)
+ return lpegmatch(pattern,str)
end
end
@@ -110,10 +124,10 @@ local function set(t,v)
end
local value = lpeg.P(lpeg.Carg(1)*value) / set
-local pattern = value*(seperator*value)^0 * lpeg.Carg(1)
+local pattern = value*(separator*value)^0 * lpeg.Carg(1)
function aux.add_settings_to_array(t,str)
- return pattern:match(str, nil, t)
+ return lpegmatch(pattern,str,nil,t)
end
function aux.hash_to_string(h,separator,yes,no,strict,omit)
@@ -161,6 +175,13 @@ function aux.settings_to_set(str,t)
return t
end
+local value = lbrace * lpeg.C((nobrace + nested)^0) * rbrace
+local pattern = lpeg.Ct((space + value)^0)
+
+function aux.arguments_to_table(str)
+ return lpegmatch(pattern,str)
+end
+
-- temporary here
function aux.getparameters(self,class,parentclass,settings)
@@ -169,36 +190,31 @@ function aux.getparameters(self,class,parentclass,settings)
sc = table.clone(self[parent])
self[class] = sc
end
- aux.add_settings_to_array(sc, settings)
+ aux.settings_to_hash(settings,sc)
end
-- temporary here
-local digit = lpeg.R("09")
-local period = lpeg.P(".")
-local zero = lpeg.P("0")
-
---~ local finish = lpeg.P(-1)
---~ local nodigit = (1-digit) + finish
---~ local case_1 = (period * zero^1 * #nodigit)/"" -- .000
---~ local case_2 = (period * (1-(zero^0/"") * #nodigit)^1 * (zero^0/"") * nodigit) -- .010 .10 .100100
-
+local digit = lpeg.R("09")
+local period = lpeg.P(".")
+local zero = lpeg.P("0")
local trailingzeros = zero^0 * -digit -- suggested by Roberto R
-local case_1 = period * trailingzeros / ""
-local case_2 = period * (digit - trailingzeros)^1 * (trailingzeros / "")
-
-local number = digit^1 * (case_1 + case_2)
-local stripper = lpeg.Cs((number + 1)^0)
+local case_1 = period * trailingzeros / ""
+local case_2 = period * (digit - trailingzeros)^1 * (trailingzeros / "")
+local number = digit^1 * (case_1 + case_2)
+local stripper = lpeg.Cs((number + 1)^0)
--~ local sample = "bla 11.00 bla 11 bla 0.1100 bla 1.00100 bla 0.00 bla 0.001 bla 1.1100 bla 0.100100100 bla 0.00100100100"
--~ collectgarbage("collect")
--~ str = string.rep(sample,10000)
--~ local ts = os.clock()
---~ stripper:match(str)
---~ print(#str, os.clock()-ts, stripper:match(sample))
+--~ lpegmatch(stripper,str)
+--~ print(#str, os.clock()-ts, lpegmatch(stripper,sample))
+
+lpeg.patterns.strip_zeros = stripper
function aux.strip_zeros(str)
- return stripper:match(str)
+ return lpegmatch(stripper,str)
end
function aux.definetable(target) -- defines undefined tables
@@ -221,3 +237,25 @@ function aux.accesstable(target)
end
return t
end
+
+--~ function string.commaseparated(str)
+--~ return gmatch(str,"([^,%s]+)")
+--~ end
+
+-- as we use this a lot ...
+
+--~ function aux.cachefunction(action,weak)
+--~ local cache = { }
+--~ if weak then
+--~ setmetatable(cache, { __mode = "kv" } )
+--~ end
+--~ local function reminder(str)
+--~ local found = cache[str]
+--~ if not found then
+--~ found = action(str)
+--~ cache[str] = found
+--~ end
+--~ return found
+--~ end
+--~ return reminder, cache
+--~ end
diff --git a/Master/texmf-dist/tex/context/base/l-boolean.lua b/Master/texmf-dist/tex/context/base/l-boolean.lua
index c8c919edaf2..be7ec7d5705 100644
--- a/Master/texmf-dist/tex/context/base/l-boolean.lua
+++ b/Master/texmf-dist/tex/context/base/l-boolean.lua
@@ -1,6 +1,6 @@
if not modules then modules = { } end modules ['l-boolean'] = {
version = 1.001,
- comment = "companion to luat-lib.tex",
+ comment = "companion to luat-lib.mkiv",
author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
copyright = "PRAGMA ADE / ConTeXt Development Team",
license = "see context related readme files"
diff --git a/Master/texmf-dist/tex/context/base/l-dimen.lua b/Master/texmf-dist/tex/context/base/l-dimen.lua
index 32becb2768e..da5ab143e58 100644
--- a/Master/texmf-dist/tex/context/base/l-dimen.lua
+++ b/Master/texmf-dist/tex/context/base/l-dimen.lua
@@ -15,14 +15,20 @@ done by using the conversion factors collected in the following
table.</p>
--ldx]]--
-local format, type = string.format, type
+local format, match, gsub, type, setmetatable = string.format, string.match, string.gsub, type, setmetatable
+local P, S, R, Cc, lpegmatch = lpeg.P, lpeg.S, lpeg.R, lpeg.Cc, lpeg.match
+
+number = number or { }
+
+number.tonumberf = function(n) return match(format("%.20f",n),"(.-0?)0*$") end -- one zero too much but alas
+number.tonumberg = function(n) return format("%.20g",n) end
local dimenfactors = {
["pt"] = 1/65536,
["in"] = ( 100/ 7227)/65536,
["cm"] = ( 254/ 7227)/65536,
- ["mm"] = ( 254/72270)/65536,
- ["sp"] = 1,
+ ["mm"] = ( 2540/ 7227)/65536,
+ ["sp"] = 1, -- 65536 sp in 1pt
["bp"] = ( 7200/ 7227)/65536,
["pc"] = ( 1/ 12)/65536,
["dd"] = ( 1157/ 1238)/65536,
@@ -31,17 +37,62 @@ local dimenfactors = {
["nc"] = ( 5080/65043)/65536
}
+--~ print(table.serialize(dimenfactors))
+--~
+--~ %.99g:
+--~
+--~ t={
+--~ ["bp"]=1.5201782378580324e-005,
+--~ ["cc"]=1.1883696112892098e-006,
+--~ ["cm"]=5.3628510057769479e-007,
+--~ ["dd"]=1.4260435335470516e-005,
+--~ ["em"]=0.000152587890625,
+--~ ["ex"]=6.103515625e-005,
+--~ ["in"]=2.1113586636917117e-007,
+--~ ["mm"]=5.3628510057769473e-008,
+--~ ["nc"]=1.1917446679504327e-006,
+--~ ["nd"]=1.4300936015405194e-005,
+--~ ["pc"]=1.2715657552083333e-006,
+--~ ["pt"]=1.52587890625e-005,
+--~ ["sp"]=1,
+--~ }
+--~
+--~ patched %s and tonumber
+--~
+--~ t={
+--~ ["bp"]=0.00001520178238,
+--~ ["cc"]=0.00000118836961,
+--~ ["cm"]=0.0000005362851,
+--~ ["dd"]=0.00001426043534,
+--~ ["em"]=0.00015258789063,
+--~ ["ex"]=0.00006103515625,
+--~ ["in"]=0.00000021113587,
+--~ ["mm"]=0.00000005362851,
+--~ ["nc"]=0.00000119174467,
+--~ ["nd"]=0.00001430093602,
+--~ ["pc"]=0.00000127156576,
+--~ ["pt"]=0.00001525878906,
+--~ ["sp"]=1,
+--~ }
+
--[[ldx--
<p>A conversion function that takes a number, unit (string) and optional
format (string) is implemented using this table.</p>
--ldx]]--
+-- was:
+
local function todimen(n,unit,fmt)
if type(n) == 'string' then
return n
else
unit = unit or 'pt'
- return format(fmt or "%.5f%s",n*dimenfactors[unit],unit)
+ return format(fmt or "%s%s",n*dimenfactors[unit],unit)
+ -- if fmt then
+ -- return format(fmt,n*dimenfactors[unit],unit)
+ -- else
+ -- return match(format("%.20f",n*dimenfactors[unit]),"(.-0?)0*$") .. unit
+ -- end
end
end
@@ -49,8 +100,7 @@ end
<p>We collect a bunch of converters in the <type>number</type> namespace.</p>
--ldx]]--
-number = number or { }
-
+number.maxdimen = 1073741823
number.todimen = todimen
number.dimenfactors = dimenfactors
@@ -75,10 +125,12 @@ a number and optionally a unit. When no unit is given a constant
capture takes place.</p>
--ldx]]--
-local amount = (lpeg.S("+-")^0 * lpeg.R("09")^0 * lpeg.P(".")^0 * lpeg.R("09")^0) + lpeg.Cc("0")
-local unit = lpeg.R("az")^1
+local amount = (S("+-")^0 * R("09")^0 * P(".")^0 * R("09")^0) + Cc("0")
+local unit = R("az")^1
-local pattern = amount/tonumber * (unit^1/dimenfactors + lpeg.Cc(1)) -- tonumber is new
+local dimenpair = amount/tonumber * (unit^1/dimenfactors + Cc(1)) -- tonumber is new
+
+lpeg.patterns.dimenpair = dimenpair
--[[ldx--
<p>We use a metatable to intercept errors. When no key is found in
@@ -89,30 +141,37 @@ alternative index function.</p>
local mt = { } setmetatable(dimenfactors,mt)
mt.__index = function(t,s)
- error("wrong dimension: " .. s)
- return 1
+ -- error("wrong dimension: " .. (s or "?")) -- better a message
+ return false
end
function string:todimen()
if type(self) == "number" then
return self
else
- local value, unit = pattern:match(self)
- print(value,unit)
+ local value, unit = lpegmatch(dimenpair,self)
return value/unit
end
end
+local amount = S("+-")^0 * R("09")^0 * S(".,")^0 * R("09")^0
+local unit = P("pt") + P("cm") + P("mm") + P("sp") + P("bp") + P("in") +
+ P("pc") + P("dd") + P("cc") + P("nd") + P("nc")
+
+local validdimen = amount * unit
+
+lpeg.patterns.validdimen = pattern
+
--[[ldx--
<p>This converter accepts calls like:</p>
<typing>
-string.todimen("10"))
-string.todimen(".10"))
-string.todimen("10.0"))
-string.todimen("10.0pt"))
-string.todimen("10pt"))
-string.todimen("10.0pt"))
+string.todimen("10")
+string.todimen(".10")
+string.todimen("10.0")
+string.todimen("10.0pt")
+string.todimen("10pt")
+string.todimen("10.0pt")
</typing>
<p>And of course the often more efficient:</p>
@@ -145,7 +204,7 @@ function dimen(a)
if a then
local ta= type(a)
if ta == "string" then
- local value, unit = pattern:match(a)
+ local value, unit = lpegmatch(pattern,a)
if type(unit) == "function" then
k = value/unit()
else
@@ -262,7 +321,7 @@ is loaded, the relevant tables that hold the functions needed may not
yet be available.</p>
--ldx]]--
-function dimensions.texify()
+function dimensions.texify() -- todo: %
local fti, fc = fonts and fonts.ids and fonts.ids, font and font.current
if fti and fc then
dimenfactors["ex"] = function() return fti[fc()].ex_height end
@@ -312,7 +371,7 @@ function dimen(a)
if k then
a = k
else
- local value, unit = pattern:match(a)
+ local value, unit = lpegmatch(dimenpair,a)
if type(unit) == "function" then
k = value/unit()
else
@@ -336,7 +395,7 @@ function string:todimen()
else
local k = known[self]
if not k then
- local value, unit = pattern:match(self)
+ local value, unit = lpegmatch(dimenpair,self)
if value and unit then
k = value/unit
else
@@ -349,6 +408,10 @@ function string:todimen()
end
end
+function number.toscaled(d)
+ return format("0.5f",d/2^16)
+end
+
--[[ldx--
<p>In a similar fashion we can define a glue datatype. In that case we
probably use a hash instead of a one-element table.</p>
diff --git a/Master/texmf-dist/tex/context/base/l-dir.lua b/Master/texmf-dist/tex/context/base/l-dir.lua
index 5a726303f0c..2643f538b94 100644
--- a/Master/texmf-dist/tex/context/base/l-dir.lua
+++ b/Master/texmf-dist/tex/context/base/l-dir.lua
@@ -1,16 +1,25 @@
if not modules then modules = { } end modules ['l-dir'] = {
version = 1.001,
- comment = "companion to luat-lib.tex",
+ comment = "companion to luat-lib.mkiv",
author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
copyright = "PRAGMA ADE / ConTeXt Development Team",
license = "see context related readme files"
}
+-- dir.expand_name will be merged with cleanpath and collapsepath
+
local type = type
-local find, gmatch = string.find, string.gmatch
+local find, gmatch, match, gsub = string.find, string.gmatch, string.match, string.gsub
+local lpegmatch = lpeg.match
dir = dir or { }
+-- handy
+
+function dir.current()
+ return (gsub(lfs.currentdir(),"\\","/"))
+end
+
-- optimizing for no string.find (*) does not save time
local attributes = lfs.attributes
@@ -41,6 +50,35 @@ end
dir.glob_pattern = glob_pattern
+local function collect_pattern(path,patt,recurse,result)
+ local ok, scanner
+ result = result or { }
+ 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 find(path,"/$") then path = path .. '/' end
+ for name in scanner do
+ local full = path .. name
+ local attr = attributes(full)
+ local mode = attr.mode
+ if mode == 'file' then
+ if find(full,patt) then
+ result[name] = attr
+ end
+ elseif recurse and (mode == "directory") and (name ~= '.') and (name ~= "..") then
+ attr.list = collect_pattern(full,patt,recurse)
+ result[name] = attr
+ end
+ end
+ end
+ return result
+end
+
+dir.collect_pattern = collect_pattern
+
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 {
@@ -60,29 +98,48 @@ local filter = Cs ( (
)^0 )
local function glob(str,t)
- if type(str) == "table" then
- local t = t or { }
- for s=1,#str do
- glob(str[s],t)
+ if type(t) == "function" then
+ if type(str) == "table" then
+ for s=1,#str do
+ glob(str[s],t)
+ end
+ elseif lfs.isfile(str) then
+ t(str)
+ else
+ local split = lpegmatch(pattern,str)
+ if split then
+ local root, path, base = split[1], split[2], split[3]
+ local recurse = find(base,"%*%*")
+ local start = root .. path
+ local result = lpegmatch(filter,start .. base)
+ glob_pattern(start,result,recurse,t)
+ end
end
- return t
- elseif lfs.isfile(str) then
- local t = t or { }
- t[#t+1] = str
- return t
else
- local split = pattern:match(str)
- if split then
+ if type(str) == "table" then
+ local t = t or { }
+ for s=1,#str do
+ glob(str[s],t)
+ end
+ return t
+ elseif lfs.isfile(str) 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 = find(base,"%*%*")
- local start = root .. path
- local result = filter:match(start .. base)
- glob_pattern(start,result,recurse,action)
+ t[#t+1] = str
return t
else
- return { }
+ local split = lpegmatch(pattern,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 = find(base,"%*%*")
+ local start = root .. path
+ local result = lpegmatch(filter,start .. base)
+ glob_pattern(start,result,recurse,action)
+ return t
+ else
+ return { }
+ end
end
end
end
@@ -144,11 +201,12 @@ end
local make_indeed = true -- false
-if string.find(os.getenv("PATH"),";") then
+if string.find(os.getenv("PATH"),";") then -- os.type == "windows"
function dir.mkdirs(...)
- local str, pth = "", ""
- for _, s in ipairs({...}) do
+ local str, pth, t = "", "", { ... }
+ for i=1,#t do
+ local s = t[i]
if s ~= "" then
if str ~= "" then
str = str .. "/" .. s
@@ -159,13 +217,13 @@ if string.find(os.getenv("PATH"),";") then
end
local first, middle, last
local drive = false
- first, middle, last = str:match("^(//)(//*)(.*)$")
+ first, middle, last = match(str,"^(//)(//*)(.*)$")
if first then
-- empty network path == local path
else
- first, last = str:match("^(//)/*(.-)$")
+ first, last = match(str,"^(//)/*(.-)$")
if first then
- middle, last = str:match("([^/]+)/+(.-)$")
+ middle, last = match(str,"([^/]+)/+(.-)$")
if middle then
pth = "//" .. middle
else
@@ -173,11 +231,11 @@ if string.find(os.getenv("PATH"),";") then
last = ""
end
else
- first, middle, last = str:match("^([a-zA-Z]:)(/*)(.-)$")
+ first, middle, last = match(str,"^([a-zA-Z]:)(/*)(.-)$")
if first then
pth, drive = first .. middle, true
else
- middle, last = str:match("^(/*)(.-)$")
+ middle, last = match(str,"^(/*)(.-)$")
if not middle then
last = str
end
@@ -211,34 +269,31 @@ if string.find(os.getenv("PATH"),";") then
--~ print(dir.mkdirs("///a/b/c"))
--~ print(dir.mkdirs("a/bbb//ccc/"))
- function dir.expand_name(str)
- local first, nothing, last = str:match("^(//)(//*)(.*)$")
+ function dir.expand_name(str) -- will be merged with cleanpath and collapsepath
+ local first, nothing, last = match(str,"^(//)(//*)(.*)$")
if first then
- first = lfs.currentdir() .. "/"
- first = first:gsub("\\","/")
+ first = dir.current() .. "/"
end
if not first then
- first, last = str:match("^(//)/*(.*)$")
+ first, last = match(str,"^(//)/*(.*)$")
end
if not first then
- first, last = str:match("^([a-zA-Z]:)(.*)$")
+ first, last = match(str,"^([a-zA-Z]:)(.*)$")
if first and not find(last,"^/") then
local d = lfs.currentdir()
if lfs.chdir(first) then
- first = lfs.currentdir()
- first = first:gsub("\\","/")
+ first = dir.current()
end
lfs.chdir(d)
end
end
if not first then
- first, last = lfs.currentdir(), str
- first = first:gsub("\\","/")
+ first, last = dir.current(), str
end
- last = last:gsub("//","/")
- last = last:gsub("/%./","/")
- last = last:gsub("^/*","")
- first = first:gsub("/*$","")
+ last = gsub(last,"//","/")
+ last = gsub(last,"/%./","/")
+ last = gsub(last,"^/*","")
+ first = gsub(first,"/*$","")
if last == "" then
return first
else
@@ -249,8 +304,9 @@ if string.find(os.getenv("PATH"),";") then
else
function dir.mkdirs(...)
- local str, pth = "", ""
- for _, s in ipairs({...}) do
+ local str, pth, t = "", "", { ... }
+ for i=1,#t do
+ local s = t[i]
if s ~= "" then
if str ~= "" then
str = str .. "/" .. s
@@ -259,7 +315,7 @@ else
end
end
end
- str = str:gsub("/+","/")
+ str = gsub(str,"/+","/")
if find(str,"^/") then
pth = "/"
for s in gmatch(str,"[^/]+") do
@@ -293,12 +349,12 @@ else
--~ print(dir.mkdirs("///a/b/c"))
--~ print(dir.mkdirs("a/bbb//ccc/"))
- function dir.expand_name(str)
+ function dir.expand_name(str) -- will be merged with cleanpath and collapsepath
if not find(str,"^/") then
str = lfs.currentdir() .. "/" .. str
end
- str = str:gsub("//","/")
- str = str:gsub("/%./","/")
+ str = gsub(str,"//","/")
+ str = gsub(str,"/%./","/")
return str
end
diff --git a/Master/texmf-dist/tex/context/base/l-file.lua b/Master/texmf-dist/tex/context/base/l-file.lua
index 0782ac67634..2bfc0709007 100644
--- a/Master/texmf-dist/tex/context/base/l-file.lua
+++ b/Master/texmf-dist/tex/context/base/l-file.lua
@@ -1,6 +1,6 @@
if not modules then modules = { } end modules ['l-file'] = {
version = 1.001,
- comment = "companion to luat-lib.tex",
+ comment = "companion to luat-lib.mkiv",
author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
copyright = "PRAGMA ADE / ConTeXt Development Team",
license = "see context related readme files"
@@ -11,14 +11,17 @@ if not modules then modules = { } end modules ['l-file'] = {
file = file or { }
local concat = table.concat
-local find, gmatch, match, gsub = string.find, string.gmatch, string.match, string.gsub
+local find, gmatch, match, gsub, sub, char = string.find, string.gmatch, string.match, string.gsub, string.sub, string.char
+local lpegmatch = lpeg.match
function file.removesuffix(filename)
return (gsub(filename,"%.[%a%d]+$",""))
end
function file.addsuffix(filename, suffix)
- if not find(filename,"%.[%a%d]+$") then
+ if not suffix or suffix == "" then
+ return filename
+ elseif not find(filename,"%.[%a%d]+$") then
return filename .. "." .. suffix
else
return filename
@@ -41,20 +44,39 @@ function file.nameonly(name)
return (gsub(match(name,"^.+[/\\](.-)$") or name,"%..*$",""))
end
-function file.extname(name)
- return match(name,"^.+%.([^/\\]-)$") or ""
+function file.extname(name,default)
+ return match(name,"^.+%.([^/\\]-)$") or default or ""
end
file.suffix = file.extname
---~ 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 = concat({...},"/")
+--~ pth = gsub(pth,"\\","/")
+--~ local a, b = match(pth,"^(.*://)(.*)$")
+--~ if a and b then
+--~ return a .. gsub(b,"//+","/")
+--~ end
+--~ a, b = match(pth,"^(//)(.*)$")
+--~ if a and b then
+--~ return a .. gsub(b,"//+","/")
+--~ end
+--~ return (gsub(pth,"//+","/"))
+--~ end
+
+local trick_1 = char(1)
+local trick_2 = "^" .. trick_1 .. "/+"
function file.join(...)
- local pth = concat({...},"/")
+ local lst = { ... }
+ local a, b = lst[1], lst[2]
+ if a == "" then
+ lst[1] = trick_1
+ elseif b and find(a,"^/+$") and find(b,"^/") then
+ lst[1] = ""
+ lst[2] = gsub(b,"^/+","")
+ end
+ local pth = concat(lst,"/")
pth = gsub(pth,"\\","/")
local a, b = match(pth,"^(.*://)(.*)$")
if a and b then
@@ -64,17 +86,28 @@ function file.join(...)
if a and b then
return a .. gsub(b,"//+","/")
end
+ pth = gsub(pth,trick_2,"")
return (gsub(pth,"//+","/"))
end
+--~ print(file.join("//","/y"))
+--~ print(file.join("/","/y"))
+--~ print(file.join("","/y"))
+--~ print(file.join("/x/","/y"))
+--~ 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.iswritable(name)
local a = lfs.attributes(name) or lfs.attributes(file.dirname(name,"."))
- return a and a.permissions:sub(2,2) == "w"
+ return a and sub(a.permissions,2,2) == "w"
end
function file.isreadable(name)
local a = lfs.attributes(name)
- return a and a.permissions:sub(1,1) == "r"
+ return a and sub(a.permissions,1,1) == "r"
end
file.is_readable = file.isreadable
@@ -82,36 +115,50 @@ file.is_writable = file.iswritable
-- todo: lpeg
-function file.split_path(str)
- local t = { }
- str = gsub(str,"\\", "/")
- str = gsub(str,"(%a):([;/])", "%1\001%2")
- for name in gmatch(str,"([^;:]+)") do
- if name ~= "" then
- t[#t+1] = gsub(name,"\001",":")
- end
- end
- return t
+--~ function file.split_path(str)
+--~ local t = { }
+--~ str = gsub(str,"\\", "/")
+--~ str = gsub(str,"(%a):([;/])", "%1\001%2")
+--~ for name in gmatch(str,"([^;:]+)") do
+--~ if name ~= "" then
+--~ t[#t+1] = gsub(name,"\001",":")
+--~ end
+--~ end
+--~ return t
+--~ end
+
+local checkedsplit = string.checkedsplit
+
+function file.split_path(str,separator)
+ str = gsub(str,"\\","/")
+ return checkedsplit(str,separator or io.pathseparator)
end
function file.join_path(tab)
return concat(tab,io.pathseparator) -- can have trailing //
end
+-- we can hash them weakly
+
function file.collapse_path(str)
- str = gsub(str,"/%./","/")
- local n, m = 1, 1
- while n > 0 or m > 0 do
- str, n = gsub(str,"[^/%.]+/%.%.$","")
- str, m = gsub(str,"[^/%.]+/%.%./","")
+ str = gsub(str,"\\","/")
+ if find(str,"/") then
+ str = gsub(str,"^%./",(gsub(lfs.currentdir(),"\\","/")) .. "/") -- ./xx in qualified
+ str = gsub(str,"/%./","/")
+ local n, m = 1, 1
+ while n > 0 or m > 0 do
+ str, n = gsub(str,"[^/%.]+/%.%.$","")
+ str, m = gsub(str,"[^/%.]+/%.%./","")
+ end
+ str = gsub(str,"([^/])/$","%1")
+ -- str = gsub(str,"^%./","") -- ./xx in qualified
+ str = gsub(str,"/%.$","")
end
- str = gsub(str,"([^/])/$","%1")
- str = gsub(str,"^%./","")
- str = gsub(str,"/%.$","")
if str == "" then str = "." end
return str
end
+--~ print(file.collapse_path("/a"))
--~ print(file.collapse_path("a/./b/.."))
--~ print(file.collapse_path("a/aa/../b/bb"))
--~ print(file.collapse_path("a/../.."))
@@ -141,27 +188,27 @@ end
--~ local pattern = (noslashes^0 * slashes)^0 * (noperiod^1 * period)^1 * lpeg.C(noperiod^1) * -1
--~ function file.extname(name)
---~ return pattern:match(name) or ""
+--~ return lpegmatch(pattern,name) or ""
--~ end
--~ local pattern = lpeg.Cs(((period * noperiod^1 * -1)/"" + 1)^1)
--~ function file.removesuffix(name)
---~ return pattern:match(name)
+--~ return lpegmatch(pattern,name)
--~ end
--~ local pattern = (noslashes^0 * slashes)^1 * lpeg.C(noslashes^1) * -1
--~ function file.basename(name)
---~ return pattern:match(name) or name
+--~ return lpegmatch(pattern,name) or name
--~ end
--~ local pattern = (noslashes^0 * slashes)^1 * lpeg.Cp() * noslashes^1 * -1
--~ function file.dirname(name)
---~ local p = pattern:match(name)
+--~ local p = lpegmatch(pattern,name)
--~ if p then
---~ return name:sub(1,p-2)
+--~ return sub(name,1,p-2)
--~ else
--~ return ""
--~ end
@@ -170,7 +217,7 @@ end
--~ local pattern = (noslashes^0 * slashes)^0 * (noperiod^1 * period)^1 * lpeg.Cp() * noperiod^1 * -1
--~ function file.addsuffix(name, suffix)
---~ local p = pattern:match(name)
+--~ local p = lpegmatch(pattern,name)
--~ if p then
--~ return name
--~ else
@@ -181,9 +228,9 @@ end
--~ local pattern = (noslashes^0 * slashes)^0 * (noperiod^1 * period)^1 * lpeg.Cp() * noperiod^1 * -1
--~ function file.replacesuffix(name,suffix)
---~ local p = pattern:match(name)
+--~ local p = lpegmatch(pattern,name)
--~ if p then
---~ return name:sub(1,p-2) .. "." .. suffix
+--~ return sub(name,1,p-2) .. "." .. suffix
--~ else
--~ return name .. "." .. suffix
--~ end
@@ -192,11 +239,11 @@ end
--~ local pattern = (noslashes^0 * slashes)^0 * lpeg.Cp() * ((noperiod^1 * period)^1 * lpeg.Cp() + lpeg.P(true)) * noperiod^1 * -1
--~ function file.nameonly(name)
---~ local a, b = pattern:match(name)
+--~ local a, b = lpegmatch(pattern,name)
--~ if b then
---~ return name:sub(a,b-2)
+--~ return sub(name,a,b-2)
--~ elseif a then
---~ return name:sub(a)
+--~ return sub(name,a)
--~ else
--~ return name
--~ end
@@ -230,11 +277,11 @@ local rootbased = lpeg.P("/") + letter*lpeg.P(":")
-- ./name ../name /name c: :// name/name
function file.is_qualified_path(filename)
- return qualified:match(filename)
+ return lpegmatch(qualified,filename) ~= nil
end
function file.is_rootbased_path(filename)
- return rootbased:match(filename)
+ return lpegmatch(rootbased,filename) ~= nil
end
local slash = lpeg.S("\\/")
@@ -247,12 +294,21 @@ local base = lpeg.C((1-suffix)^0)
local pattern = (drive + lpeg.Cc("")) * (path + lpeg.Cc("")) * (base + lpeg.Cc("")) * (suffix + lpeg.Cc(""))
function file.splitname(str) -- returns drive, path, base, suffix
- return pattern:match(str)
+ return lpegmatch(pattern,str)
end
--- function test(t) for k, v in pairs(t) do print(v, "=>", file.splitname(v)) end end
+-- function test(t) for k, v in next, t do print(v, "=>", file.splitname(v)) end end
--
-- test { "c:", "c:/aa", "c:/aa/bb", "c:/aa/bb/cc", "c:/aa/bb/cc.dd", "c:/aa/bb/cc.dd.ee" }
-- test { "c:", "c:aa", "c:aa/bb", "c:aa/bb/cc", "c:aa/bb/cc.dd", "c:aa/bb/cc.dd.ee" }
-- test { "/aa", "/aa/bb", "/aa/bb/cc", "/aa/bb/cc.dd", "/aa/bb/cc.dd.ee" }
-- test { "aa", "aa/bb", "aa/bb/cc", "aa/bb/cc.dd", "aa/bb/cc.dd.ee" }
+
+--~ -- todo:
+--~
+--~ if os.type == "windows" then
+--~ local currentdir = lfs.currentdir
+--~ function lfs.currentdir()
+--~ return (gsub(currentdir(),"\\","/"))
+--~ end
+--~ end
diff --git a/Master/texmf-dist/tex/context/base/l-io.lua b/Master/texmf-dist/tex/context/base/l-io.lua
index bcdf8791e3e..66e279309fb 100644
--- a/Master/texmf-dist/tex/context/base/l-io.lua
+++ b/Master/texmf-dist/tex/context/base/l-io.lua
@@ -1,12 +1,12 @@
if not modules then modules = { } end modules ['l-io'] = {
version = 1.001,
- comment = "companion to luat-lib.tex",
+ comment = "companion to luat-lib.mkiv",
author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
copyright = "PRAGMA ADE / ConTeXt Development Team",
license = "see context related readme files"
}
-local byte = string.byte
+local byte, find, gsub = string.byte, string.find, string.gsub
if string.find(os.getenv("PATH"),";") then
io.fileseparator, io.pathseparator = "\\", ";"
@@ -35,7 +35,7 @@ function io.savedata(filename,data,joiner)
elseif type(data) == "function" then
data(f)
else
- f:write(data)
+ f:write(data or "")
end
f:close()
return true
@@ -164,20 +164,21 @@ function io.ask(question,default,options)
end
io.write(string.format(" "))
local answer = io.read()
- answer = answer:gsub("^%s*(.*)%s*$","%1")
+ answer = gsub(answer,"^%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
+ for k=1,#options do
+ if options[k] == answer then
return answer
end
end
local pattern = "^" .. answer
- for _,v in pairs(options) do
- if v:find(pattern) then
+ for k=1,#options do
+ local v = options[k]
+ if find(v,pattern) then
return v
end
end
diff --git a/Master/texmf-dist/tex/context/base/l-lpeg.lua b/Master/texmf-dist/tex/context/base/l-lpeg.lua
index 88b445717f6..b107a8e6432 100644
--- a/Master/texmf-dist/tex/context/base/l-lpeg.lua
+++ b/Master/texmf-dist/tex/context/base/l-lpeg.lua
@@ -1,57 +1,63 @@
if not modules then modules = { } end modules ['l-lpeg'] = {
version = 1.001,
- comment = "companion to luat-lib.tex",
+ comment = "companion to luat-lib.mkiv",
author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
copyright = "PRAGMA ADE / ConTeXt Development Team",
license = "see context related readme files"
}
-local P, S, Ct, C, Cs, Cc = lpeg.P, lpeg.S, lpeg.Ct, lpeg.C, lpeg.Cs, lpeg.Cc
-
---~ 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 = { }
+local lpeg = require("lpeg")
+
+lpeg.patterns = lpeg.patterns or { } -- so that we can share
+local patterns = lpeg.patterns
+
+local P, R, S, Ct, C, Cs, Cc, V = lpeg.P, lpeg.R, lpeg.S, lpeg.Ct, lpeg.C, lpeg.Cs, lpeg.Cc, lpeg.V
+local match = lpeg.match
+
+local digit, sign = R('09'), S('+-')
+local cr, lf, crlf = P("\r"), P("\n"), P("\r\n")
+local utf8byte = R("\128\191")
+
+patterns.utf8byte = utf8byte
+patterns.utf8one = R("\000\127")
+patterns.utf8two = R("\194\223") * utf8byte
+patterns.utf8three = R("\224\239") * utf8byte * utf8byte
+patterns.utf8four = R("\240\244") * utf8byte * utf8byte * utf8byte
+
+patterns.digit = digit
+patterns.sign = sign
+patterns.cardinal = sign^0 * digit^1
+patterns.integer = sign^0 * digit^1
+patterns.float = sign^0 * digit^0 * P('.') * digit^1
+patterns.number = patterns.float + patterns.integer
+patterns.oct = P("0") * R("07")^1
+patterns.octal = patterns.oct
+patterns.HEX = P("0x") * R("09","AF")^1
+patterns.hex = P("0x") * R("09","af")^1
+patterns.hexadecimal = P("0x") * R("09","AF","af")^1
+patterns.lowercase = R("az")
+patterns.uppercase = R("AZ")
+patterns.letter = patterns.lowercase + patterns.uppercase
+patterns.space = S(" ")
+patterns.eol = S("\n\r")
+patterns.spacer = S(" \t\f\v") -- + string.char(0xc2, 0xa0) if we want utf (cf mail roberto)
+patterns.newline = crlf + cr + lf
+patterns.nonspace = 1 - patterns.space
+patterns.nonspacer = 1 - patterns.spacer
+patterns.whitespace = patterns.eol + patterns.spacer
+patterns.nonwhitespace = 1 - patterns.whitespace
+patterns.utf8 = patterns.utf8one + patterns.utf8two + patterns.utf8three + patterns.utf8four
+patterns.utfbom = P('\000\000\254\255') + P('\255\254\000\000') + P('\255\254') + P('\254\255') + P('\239\187\191')
function lpeg.anywhere(pattern) --slightly adapted from website
- return P { P(pattern) + 1 * lpeg.V(1) }
-end
-
-function lpeg.startswith(pattern) --slightly adapted
- return P(pattern)
+ return P { P(pattern) + 1 * V(1) } -- why so complex?
end
function lpeg.splitter(pattern, action)
return (((1-P(pattern))^1)/action+1)^0
end
--- variant:
-
---~ local parser = lpeg.Ct(lpeg.splitat(newline))
-
-local crlf = P("\r\n")
-local cr = P("\r")
-local lf = P("\n")
-local space = S(" \t\f\v") -- + string.char(0xc2, 0xa0) if we want utf (cf mail roberto)
-local newline = crlf + cr + lf
-local spacing = space^0 * newline
-
+local spacing = patterns.spacer^0 * patterns.newline -- sort of strip
local empty = spacing * Cc("")
local nonempty = Cs((1-spacing)^1) * spacing^-1
local content = (empty + nonempty)^1
@@ -59,15 +65,15 @@ local content = (empty + nonempty)^1
local capture = Ct(content^0)
function string:splitlines()
- return capture:match(self)
+ return match(capture,self)
end
-lpeg.linebyline = content -- better make a sublibrary
+patterns.textline = content
---~ local p = lpeg.splitat("->",false) print(p:match("oeps->what->more")) -- oeps what more
---~ local p = lpeg.splitat("->",true) print(p:match("oeps->what->more")) -- oeps what->more
---~ local p = lpeg.splitat("->",false) print(p:match("oeps")) -- oeps
---~ local p = lpeg.splitat("->",true) print(p:match("oeps")) -- oeps
+--~ local p = lpeg.splitat("->",false) print(match(p,"oeps->what->more")) -- oeps what more
+--~ local p = lpeg.splitat("->",true) print(match(p,"oeps->what->more")) -- oeps what->more
+--~ local p = lpeg.splitat("->",false) print(match(p,"oeps")) -- oeps
+--~ local p = lpeg.splitat("->",true) print(match(p,"oeps")) -- oeps
local splitters_s, splitters_m = { }, { }
@@ -77,7 +83,7 @@ local function splitat(separator,single)
separator = P(separator)
if single then
local other, any = C((1 - separator)^0), P(1)
- splitter = other * (separator * C(any^0) + "")
+ splitter = other * (separator * C(any^0) + "") -- ?
splitters_s[separator] = splitter
else
local other = C((1 - separator)^0)
@@ -92,11 +98,68 @@ lpeg.splitat = splitat
local cache = { }
+function lpeg.split(separator,str)
+ local c = cache[separator]
+ if not c then
+ c = Ct(splitat(separator))
+ cache[separator] = c
+ end
+ return match(c,str)
+end
+
function string:split(separator)
local c = cache[separator]
if not c then
c = Ct(splitat(separator))
cache[separator] = c
end
- return c:match(self)
+ return match(c,self)
+end
+
+lpeg.splitters = cache
+
+local cache = { }
+
+function lpeg.checkedsplit(separator,str)
+ local c = cache[separator]
+ if not c then
+ separator = P(separator)
+ local other = C((1 - separator)^0)
+ c = Ct(separator^0 * other * (separator^1 * other)^0)
+ cache[separator] = c
+ end
+ return match(c,str)
end
+
+function string:checkedsplit(separator)
+ local c = cache[separator]
+ if not c then
+ separator = P(separator)
+ local other = C((1 - separator)^0)
+ c = Ct(separator^0 * other * (separator^1 * other)^0)
+ cache[separator] = c
+ end
+ return match(c,self)
+end
+
+--~ function lpeg.append(list,pp)
+--~ local p = pp
+--~ for l=1,#list do
+--~ if p then
+--~ p = p + P(list[l])
+--~ else
+--~ p = P(list[l])
+--~ end
+--~ end
+--~ return p
+--~ end
+
+--~ from roberto's site:
+
+local f1 = string.byte
+
+local function f2(s) local c1, c2 = f1(s,1,2) return c1 * 64 + c2 - 12416 end
+local function f3(s) local c1, c2, c3 = f1(s,1,3) return (c1 * 64 + c2) * 64 + c3 - 925824 end
+local function f4(s) local c1, c2, c3, c4 = f1(s,1,4) return ((c1 * 64 + c2) * 64 + c3) * 64 + c4 - 63447168 end
+
+patterns.utf8byte = patterns.utf8one/f1 + patterns.utf8two/f2 + patterns.utf8three/f3 + patterns.utf8four/f4
diff --git a/Master/texmf-dist/tex/context/base/l-math.lua b/Master/texmf-dist/tex/context/base/l-math.lua
index bfb3d506b0c..fc8db472142 100644
--- a/Master/texmf-dist/tex/context/base/l-math.lua
+++ b/Master/texmf-dist/tex/context/base/l-math.lua
@@ -1,6 +1,6 @@
if not modules then modules = { } end modules ['l-math'] = {
version = 1.001,
- comment = "companion to luat-lib.tex",
+ comment = "companion to luat-lib.mkiv",
author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
copyright = "PRAGMA ADE / ConTeXt Development Team",
license = "see context related readme files"
diff --git a/Master/texmf-dist/tex/context/base/l-md5.lua b/Master/texmf-dist/tex/context/base/l-md5.lua
index 8640ad54e22..27955ef9b9e 100644
--- a/Master/texmf-dist/tex/context/base/l-md5.lua
+++ b/Master/texmf-dist/tex/context/base/l-md5.lua
@@ -57,7 +57,7 @@ end
function file.loadchecksum(name)
if md5 then
local data = io.loaddata(name .. ".md5")
- return data and data:gsub("%s","")
+ return data and (gsub(data,"%s",""))
end
return nil
end
diff --git a/Master/texmf-dist/tex/context/base/l-number.lua b/Master/texmf-dist/tex/context/base/l-number.lua
index 18d488a1aaf..a1249f0556a 100644
--- a/Master/texmf-dist/tex/context/base/l-number.lua
+++ b/Master/texmf-dist/tex/context/base/l-number.lua
@@ -1,19 +1,21 @@
if not modules then modules = { } end modules ['l-number'] = {
version = 1.001,
- comment = "companion to luat-lib.tex",
+ comment = "companion to luat-lib.mkiv",
author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
copyright = "PRAGMA ADE / ConTeXt Development Team",
license = "see context related readme files"
}
-local format = string.format
+local tostring = tostring
+local format, floor, insert, match = string.format, math.floor, table.insert, string.match
+local lpegmatch = lpeg.match
number = number or { }
-- a,b,c,d,e,f = number.toset(100101)
function number.toset(n)
- return (tostring(n)):match("(.?)(.?)(.?)(.?)(.?)(.?)(.?)(.?)")
+ return match(tostring(n),"(.?)(.?)(.?)(.?)(.?)(.?)(.?)(.?)")
end
function number.toevenhex(n)
@@ -39,7 +41,18 @@ end
local one = lpeg.C(1-lpeg.S(''))^1
function number.toset(n)
- return one:match(tostring(n))
+ return lpegmatch(one,tostring(n))
end
-
+function number.bits(n,zero)
+ local t, i = { }, (zero and 0) or 1
+ while n > 0 do
+ local m = n % 2
+ if m > 0 then
+ insert(t,1,i)
+ end
+ n = floor(n/2)
+ i = i + 1
+ end
+ return t
+end
diff --git a/Master/texmf-dist/tex/context/base/l-os.lua b/Master/texmf-dist/tex/context/base/l-os.lua
index 47b47fa4f60..fba2cd31770 100644
--- a/Master/texmf-dist/tex/context/base/l-os.lua
+++ b/Master/texmf-dist/tex/context/base/l-os.lua
@@ -1,45 +1,62 @@
if not modules then modules = { } end modules ['l-os'] = {
version = 1.001,
- comment = "companion to luat-lub.tex",
+ comment = "companion to luat-lib.mkiv",
author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
copyright = "PRAGMA ADE / ConTeXt Development Team",
license = "see context related readme files"
}
-local find = string.find
+-- maybe build io.flush in os.execute
+
+local find, format, gsub = string.find, string.format, string.gsub
+local random, ceil = math.random, math.ceil
+
+local execute, spawn, exec, ioflush = os.execute, os.spawn or os.execute, os.exec or os.execute, io.flush
+
+function os.execute(...) ioflush() return execute(...) end
+function os.spawn (...) ioflush() return spawn (...) end
+function os.exec (...) ioflush() return exec (...) end
function os.resultof(command)
- return io.popen(command,"r"):read("*all")
+ ioflush() -- else messed up logging
+ local handle = io.popen(command,"r")
+ if not handle then
+ -- print("unknown command '".. command .. "' in os.resultof")
+ return ""
+ else
+ return handle:read("*all") or ""
+ end
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)
+--~ os.type : windows | unix (new, we already guessed os.platform)
+--~ os.name : windows | msdos | linux | macosx | solaris | .. | generic (new)
+--~ os.platform : extended os.name with architecture
if not io.fileseparator then
if find(os.getenv("PATH"),";") then
- io.fileseparator, io.pathseparator, os.platform = "\\", ";", os.type or "windows"
+ io.fileseparator, io.pathseparator, os.type = "\\", ";", os.type or "mswin"
else
- io.fileseparator, io.pathseparator, os.platform = "/" , ":", os.type or "unix"
+ io.fileseparator, io.pathseparator, os.type = "/" , ":", os.type or "unix"
end
end
-os.platform = os.platform or os.type or (io.pathseparator == ";" and "windows") or "unix"
+os.type = os.type or (io.pathseparator == ";" and "windows") or "unix"
+os.name = os.name or (os.type == "windows" and "mswin" ) or "linux"
+
+if os.type == "windows" then
+ os.libsuffix, os.binsuffix = 'dll', 'exe'
+else
+ os.libsuffix, os.binsuffix = 'so', ''
+end
function os.launch(str)
- if os.platform == "windows" then
+ if os.type == "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
@@ -69,62 +86,216 @@ end
--~ print(os.date("%H:%M:%S",os.gettimeofday()))
--~ print(os.date("%H:%M:%S",os.time()))
-os.arch = os.arch or function()
- local a = os.resultof("uname -m") or "linux"
- os.arch = function()
- return a
+-- no need for function anymore as we have more clever code and helpers now
+-- this metatable trickery might as well disappear
+
+os.resolvers = os.resolvers or { }
+
+local resolvers = os.resolvers
+
+local osmt = getmetatable(os) or { __index = function(t,k) t[k] = "unset" return "unset" end } -- maybe nil
+local osix = osmt.__index
+
+osmt.__index = function(t,k)
+ return (resolvers[k] or osix)(t,k)
+end
+
+setmetatable(os,osmt)
+
+if not os.setenv then
+
+ -- we still store them but they won't be seen in
+ -- child processes although we might pass them some day
+ -- using command concatination
+
+ local env, getenv = { }, os.getenv
+
+ function os.setenv(k,v)
+ env[k] = v
+ end
+
+ function os.getenv(k)
+ return env[k] or getenv(k)
end
- return a
+
end
-local platform
-
-function os.currentplatform(name,default)
- if not platform then
- local name = os.name or os.platform or name -- os.name is built in, os.platform is mine
- if not name then
- platform = default or "linux"
- elseif name == "windows" or name == "mswin" or name == "win32" or name == "msdos" then
- if os.getenv("PROCESSOR_ARCHITECTURE") == "AMD64" then
- platform = "mswin-64"
- else
- platform = "mswin"
- end
+-- we can use HOSTTYPE on some platforms
+
+local name, platform = os.name or "linux", os.getenv("MTX_PLATFORM") or ""
+
+local function guess()
+ local architecture = os.resultof("uname -m") or ""
+ if architecture ~= "" then
+ return architecture
+ end
+ architecture = os.getenv("HOSTTYPE") or ""
+ if architecture ~= "" then
+ return architecture
+ end
+ return os.resultof("echo $HOSTTYPE") or ""
+end
+
+if platform ~= "" then
+
+ os.platform = platform
+
+elseif os.type == "windows" then
+
+ -- we could set the variable directly, no function needed here
+
+ function os.resolvers.platform(t,k)
+ local platform, architecture = "", os.getenv("PROCESSOR_ARCHITECTURE") or ""
+ if find(architecture,"AMD64") then
+ platform = "mswin-64"
+ else
+ platform = "mswin"
+ end
+ os.setenv("MTX_PLATFORM",platform)
+ os.platform = platform
+ return platform
+ end
+
+elseif name == "linux" then
+
+ function os.resolvers.platform(t,k)
+ -- we sometims have HOSTTYPE set so let's check that first
+ local platform, architecture = "", os.getenv("HOSTTYPE") or os.resultof("uname -m") or ""
+ if find(architecture,"x86_64") then
+ platform = "linux-64"
+ elseif find(architecture,"ppc") then
+ platform = "linux-ppc"
+ else
+ platform = "linux"
+ end
+ os.setenv("MTX_PLATFORM",platform)
+ os.platform = platform
+ return platform
+ end
+
+elseif name == "macosx" then
+
+ --[[
+ Identifying the architecture of OSX is quite a mess and this
+ is the best we can come up with. For some reason $HOSTTYPE is
+ a kind of pseudo environment variable, not known to the current
+ environment. And yes, uname cannot be trusted either, so there
+ is a change that you end up with a 32 bit run on a 64 bit system.
+ Also, some proper 64 bit intel macs are too cheap (low-end) and
+ therefore not permitted to run the 64 bit kernel.
+ ]]--
+
+ function os.resolvers.platform(t,k)
+ -- local platform, architecture = "", os.getenv("HOSTTYPE") or ""
+ -- if architecture == "" then
+ -- architecture = os.resultof("echo $HOSTTYPE") or ""
+ -- end
+ local platform, architecture = "", os.resultof("echo $HOSTTYPE") or ""
+ if architecture == "" then
+ -- print("\nI have no clue what kind of OSX you're running so let's assume an 32 bit intel.\n")
+ platform = "osx-intel"
+ elseif find(architecture,"i386") then
+ platform = "osx-intel"
+ elseif find(architecture,"x86_64") then
+ platform = "osx-64"
+ else
+ platform = "osx-ppc"
+ end
+ os.setenv("MTX_PLATFORM",platform)
+ os.platform = platform
+ return platform
+ end
+
+elseif name == "sunos" then
+
+ function os.resolvers.platform(t,k)
+ local platform, architecture = "", os.resultof("uname -m") or ""
+ if find(architecture,"sparc") then
+ platform = "solaris-sparc"
+ else -- if architecture == 'i86pc'
+ platform = "solaris-intel"
+ end
+ os.setenv("MTX_PLATFORM",platform)
+ os.platform = platform
+ return platform
+ end
+
+elseif name == "freebsd" then
+
+ function os.resolvers.platform(t,k)
+ local platform, architecture = "", os.resultof("uname -m") or ""
+ if find(architecture,"amd64") then
+ platform = "freebsd-amd64"
+ else
+ platform = "freebsd"
+ end
+ os.setenv("MTX_PLATFORM",platform)
+ os.platform = platform
+ return platform
+ end
+
+elseif name == "kfreebsd" then
+
+ function os.resolvers.platform(t,k)
+ -- we sometims have HOSTTYPE set so let's check that first
+ local platform, architecture = "", os.getenv("HOSTTYPE") or os.resultof("uname -m") or ""
+ if find(architecture,"x86_64") then
+ platform = "kfreebsd-64"
else
- local architecture = os.arch()
- if name == "linux" then
- if find(architecture,"x86_64") then
- platform = "linux-64"
- elseif find(architecture,"ppc") then
- platform = "linux-ppc"
- else
- platform = "linux"
- end
- elseif name == "macosx" then
- if find(architecture,"i386") then
- platform = "osx-intel"
- else
- platform = "osx-ppc"
- end
- elseif name == "sunos" then
- if find(architecture,"sparc") then
- platform = "solaris-sparc"
- else -- if architecture == 'i86pc'
- platform = "solaris-intel"
- end
- elseif name == "freebsd" then
- if find(architecture,"amd64") then
- platform = "freebsd-amd64"
- else
- platform = "freebsd"
- end
- else
- platform = default or name
- end
+ platform = "kfreebsd-i386"
end
- function os.currentplatform()
- return platform
+ os.setenv("MTX_PLATFORM",platform)
+ os.platform = platform
+ return platform
+ end
+
+else
+
+ -- platform = "linux"
+ -- os.setenv("MTX_PLATFORM",platform)
+ -- os.platform = platform
+
+ function os.resolvers.platform(t,k)
+ local platform = "linux"
+ os.setenv("MTX_PLATFORM",platform)
+ os.platform = platform
+ return platform
+ end
+
+end
+
+-- beware, we set the randomseed
+
+-- from wikipedia: Version 4 UUIDs use a scheme relying only on random numbers. This algorithm sets the
+-- version number as well as two reserved bits. All other bits are set using a random or pseudorandom
+-- data source. Version 4 UUIDs have the form xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx with hexadecimal
+-- digits x and hexadecimal digits 8, 9, A, or B for y. e.g. f47ac10b-58cc-4372-a567-0e02b2c3d479.
+--
+-- as we don't call this function too often there is not so much risk on repetition
+
+local t = { 8, 9, "a", "b" }
+
+function os.uuid()
+ return format("%04x%04x-4%03x-%s%03x-%04x-%04x%04x%04x",
+ random(0xFFFF),random(0xFFFF),
+ random(0x0FFF),
+ t[ceil(random(4))] or 8,random(0x0FFF),
+ random(0xFFFF),
+ random(0xFFFF),random(0xFFFF),random(0xFFFF)
+ )
+end
+
+local d
+
+function os.timezone(delta)
+ d = d or tonumber(tonumber(os.date("%H")-os.date("!%H")))
+ if delta then
+ if d > 0 then
+ return format("+%02i:00",d)
+ else
+ return format("-%02i:00",-d)
end
+ else
+ return 1
end
- return platform
end
diff --git a/Master/texmf-dist/tex/context/base/l-pdfview.lua b/Master/texmf-dist/tex/context/base/l-pdfview.lua
new file mode 100644
index 00000000000..627477ee823
--- /dev/null
+++ b/Master/texmf-dist/tex/context/base/l-pdfview.lua
@@ -0,0 +1,95 @@
+if not modules then modules = { } end modules ['l-pdfview'] = {
+ version = 1.001,
+ comment = "companion to mtx-context.lua",
+ author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
+ copyright = "PRAGMA ADE / ConTeXt Development Team",
+ license = "see context related readme files"
+}
+
+local format, getenv = string.format, os.getenv
+
+pdfview = pdfview or { }
+
+local opencalls = {
+ ['default'] = "pdfopen --file", -- "pdfopen --back --file"
+ ['xpdf'] = "xpdfopen",
+}
+
+local closecalls= {
+ ['default'] = "pdfclose --file",
+ ['xpdf'] = nil,
+}
+
+local allcalls = {
+ ['default'] = "pdfclose --all",
+ ['xpdf'] = nil,
+}
+
+if os.type == "windows" then
+ opencalls['okular'] = 'start "test" "c:/program files/kde/bin/okular.exe" --unique' -- todo: get focus
+else
+ opencalls['okular'] = 'okular --unique'
+end
+
+pdfview.METHOD = "MTX_PDFVIEW_METHOD"
+pdfview.method = getenv(pdfview.METHOD) or 'default'
+pdfview.method = (opencalls[pdfview.method] and pdfview.method) or 'default'
+
+function pdfview.methods()
+ return table.concat(table.sortedkeys(opencalls), " ")
+end
+
+function pdfview.status()
+ return format("pdfview methods: %s, current method: %s, MTX_PDFVIEW_METHOD=%s",pdfview.methods(),pdfview.method,getenv(pdfview.METHOD) or "<unset>")
+end
+
+local openedfiles = { }
+
+local function fullname(name)
+ return file.addsuffix(name,"pdf")
+end
+
+function pdfview.open(...)
+ local opencall = opencalls[pdfview.method]
+ if opencall then
+ local t = { ... }
+ for i=1,#t do
+ local name = fullname(t[i])
+ if io.exists(name) then
+ os.execute(format('%s "%s" 2>&1', opencall, name))
+ openedfiles[name] = true
+ end
+ end
+ end
+end
+
+function pdfview.close(...)
+ local closecall = closecalls[pdfview.method]
+ if closecall then
+ local t = { ... }
+ for i=1,#t do
+ local name = fullname(t[i])
+ if openedfiles[name] then
+ os.execute(format('%s "%s" 2>&1', closecall, name))
+ openedfiles[name] = nil
+ else
+ pdfview.closeall()
+ break
+ end
+ end
+ end
+end
+
+function pdfview.closeall()
+ local allcall = allcalls[pdfview.method]
+ if allcall then
+ os.execute(format('%s 2>&1', allcall))
+ end
+ openedfiles = { }
+end
+
+--~ pdfview.open("t:/document/show-exa.pdf")
+--~ os.sleep(3)
+--~ pdfview.close("t:/document/show-exa.pdf")
+
+return pdfview
diff --git a/Master/texmf-dist/tex/context/base/l-set.lua b/Master/texmf-dist/tex/context/base/l-set.lua
index 7fc67b24b34..f844d0b4004 100644
--- a/Master/texmf-dist/tex/context/base/l-set.lua
+++ b/Master/texmf-dist/tex/context/base/l-set.lua
@@ -1,6 +1,6 @@
if not modules then modules = { } end modules ['l-set'] = {
version = 1.001,
- comment = "companion to luat-lib.tex",
+ comment = "companion to luat-lib.mkiv",
author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
copyright = "PRAGMA ADE / ConTeXt Development Team",
license = "see context related readme files"
diff --git a/Master/texmf-dist/tex/context/base/l-string.lua b/Master/texmf-dist/tex/context/base/l-string.lua
index f46d6df24a0..9856d521249 100644
--- a/Master/texmf-dist/tex/context/base/l-string.lua
+++ b/Master/texmf-dist/tex/context/base/l-string.lua
@@ -1,12 +1,15 @@
if not modules then modules = { } end modules ['l-string'] = {
version = 1.001,
- comment = "companion to luat-lib.tex",
+ comment = "companion to luat-lib.mkiv",
author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
copyright = "PRAGMA ADE / ConTeXt Development Team",
license = "see context related readme files"
}
-local sub, gsub, find, match, gmatch, format, char, byte, rep = string.sub, string.gsub, string.find, string.match, string.gmatch, string.format, string.char, string.byte, string.rep
+local sub, gsub, find, match, gmatch, format, char, byte, rep, lower = string.sub, string.gsub, string.find, string.match, string.gmatch, string.format, string.char, string.byte, string.rep, string.lower
+local lpegmatch = lpeg.match
+
+-- some functions may disappear as they are not used anywhere
if not string.split then
@@ -46,8 +49,16 @@ function string:unquote()
return (gsub(self,"^([\"\'])(.*)%1$","%2"))
end
+--~ function string:unquote()
+--~ if find(self,"^[\'\"]") then
+--~ return sub(self,2,-2)
+--~ else
+--~ return self
+--~ end
+--~ end
+
function string:quote() -- we could use format("%q")
- return '"' .. self:unquote() .. '"'
+ return format("%q",self)
end
function string:count(pattern) -- variant 3
@@ -67,12 +78,23 @@ function string:limit(n,sentinel)
end
end
-function string:strip()
- return (gsub(self,"^%s*(.-)%s*$", "%1"))
+--~ function string:strip() -- the .- is quite efficient
+--~ -- return match(self,"^%s*(.-)%s*$") or ""
+--~ -- return match(self,'^%s*(.*%S)') or '' -- posted on lua list
+--~ return find(s,'^%s*$') and '' or match(s,'^%s*(.*%S)')
+--~ end
+
+do -- roberto's variant:
+ local space = lpeg.S(" \t\v\n")
+ local nospace = 1 - space
+ local stripper = space^0 * lpeg.C((space^0 * nospace^1)^0)
+ function string.strip(str)
+ return lpegmatch(stripper,str) or ""
+ end
end
function string:is_empty()
- return not find(find,"%S")
+ return not find(self,"%S")
end
function string:enhance(pattern,action)
@@ -106,14 +128,14 @@ if not string.characters then
local function nextchar(str, index)
index = index + 1
- return (index <= #str) and index or nil, str:sub(index,index)
+ return (index <= #str) and index or nil, sub(str,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, byte(str:sub(index,index))
+ return (index <= #str) and index or nil, byte(sub(str,index,index))
end
function string:bytes()
return nextbyte, self, 0
@@ -126,7 +148,7 @@ end
function string:rpadd(n,chr)
local m = n-#self
if m > 0 then
- return self .. self.rep(chr or " ",m)
+ return self .. rep(chr or " ",m)
else
return self
end
@@ -135,7 +157,7 @@ end
function string:lpadd(n,chr)
local m = n-#self
if m > 0 then
- return self.rep(chr or " ",m) .. self
+ return rep(chr or " ",m) .. self
else
return self
end
@@ -183,6 +205,17 @@ function string:pattesc()
return (gsub(self,".",patterns_escapes))
end
+local simple_escapes = {
+ ["-"] = "%-",
+ ["."] = "%.",
+ ["?"] = ".",
+ ["*"] = ".*",
+}
+
+function string:simpleesc()
+ return (gsub(self,".",simple_escapes))
+end
+
function string:tohash()
local t = { }
for s in gmatch(self,"([^, ]+)") do -- lpeg
@@ -194,10 +227,10 @@ end
local pattern = lpeg.Ct(lpeg.C(1)^0)
function string:totable()
- return pattern:match(self)
+ return lpegmatch(pattern,self)
end
---~ for _, str in ipairs {
+--~ local t = {
--~ "1234567123456712345671234567",
--~ "a\tb\tc",
--~ "aa\tbb\tcc",
@@ -205,7 +238,10 @@ end
--~ "aaaa\tbbbb\tcccc",
--~ "aaaaa\tbbbbb\tccccc",
--~ "aaaaaa\tbbbbbb\tcccccc",
---~ } do print(string.tabtospace(str)) end
+--~ }
+--~ for k,v do
+--~ print(string.tabtospace(t[k]))
+--~ end
function string.tabtospace(str,tab)
-- we don't handle embedded newlines
@@ -213,7 +249,7 @@ function string.tabtospace(str,tab)
local s = find(str,"\t")
if s then
if not tab then tab = 7 end -- only when found
- local d = tab-(s-1)%tab
+ local d = tab-(s-1) % tab
if d > 0 then
str = gsub(str,"\t",rep(" ",d),1)
else
@@ -231,3 +267,22 @@ function string:compactlong() -- strips newlines and leading spaces
self = gsub(self,"^ *","")
return self
end
+
+function string:striplong() -- strips newlines and leading spaces
+ self = gsub(self,"^%s*","")
+ self = gsub(self,"[\n\r]+ *","\n")
+ return self
+end
+
+function string:topattern(lowercase,strict)
+ if lowercase then
+ self = lower(self)
+ end
+ self = gsub(self,".",simple_escapes)
+ if self == "" then
+ self = ".*"
+ elseif strict then
+ self = "^" .. self .. "$"
+ end
+ return self
+end
diff --git a/Master/texmf-dist/tex/context/base/l-table.lua b/Master/texmf-dist/tex/context/base/l-table.lua
index 90cb068e23e..ee395d0f140 100644
--- a/Master/texmf-dist/tex/context/base/l-table.lua
+++ b/Master/texmf-dist/tex/context/base/l-table.lua
@@ -1,6 +1,6 @@
if not modules then modules = { } end modules ['l-table'] = {
version = 1.001,
- comment = "companion to luat-lib.tex",
+ comment = "companion to luat-lib.mkiv",
author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
copyright = "PRAGMA ADE / ConTeXt Development Team",
license = "see context related readme files"
@@ -9,9 +9,58 @@ if not modules then modules = { } end modules ['l-table'] = {
table.join = table.concat
local concat, sort, insert, remove = table.concat, table.sort, table.insert, table.remove
-local format, find, gsub, lower, dump = string.format, string.find, string.gsub, string.lower, string.dump
+local format, find, gsub, lower, dump, match = string.format, string.find, string.gsub, string.lower, string.dump, string.match
local getmetatable, setmetatable = getmetatable, setmetatable
-local type, next, tostring, ipairs = type, next, tostring, ipairs
+local type, next, tostring, tonumber, ipairs = type, next, tostring, tonumber, ipairs
+
+-- Starting with version 5.2 Lua no longer provide ipairs, which makes
+-- sense. As we already used the for loop and # in most places the
+-- impact on ConTeXt was not that large; the remaining ipairs already
+-- have been replaced. In a similar fashio we also hardly used pairs.
+--
+-- Just in case, we provide the fallbacks as discussed in Programming
+-- in Lua (http://www.lua.org/pil/7.3.html):
+
+if not ipairs then
+
+ -- for k, v in ipairs(t) do ... end
+ -- for k=1,#t do local v = t[k] ... end
+
+ local function iterate(a,i)
+ i = i + 1
+ local v = a[i]
+ if v ~= nil then
+ return i, v --, nil
+ end
+ end
+
+ function ipairs(a)
+ return iterate, a, 0
+ end
+
+end
+
+if not pairs then
+
+ -- for k, v in pairs(t) do ... end
+ -- for k, v in next, t do ... end
+
+ function pairs(t)
+ return next, t -- , nil
+ end
+
+end
+
+-- Also, unpack has been moved to the table table, and for compatiility
+-- reasons we provide both now.
+
+if not table.unpack then
+ table.unpack = _G.unpack
+elseif not unpack then
+ _G.unpack = table.unpack
+end
+
+-- extra functions, some might go (when not used)
function table.strip(tab)
local lst = { }
@@ -26,6 +75,14 @@ function table.strip(tab)
return lst
end
+function table.keys(t)
+ local k = { }
+ for key, _ in next, t do
+ k[#k+1] = key
+ end
+ return k
+end
+
local function compare(a,b)
return (tostring(a) < tostring(b))
end
@@ -69,7 +126,7 @@ end
table.sortedkeys = sortedkeys
table.sortedhashkeys = sortedhashkeys
-function table.sortedpairs(t)
+function table.sortedhash(t)
local s = sortedhashkeys(t) -- maybe just sortedkeys
local n = 0
local function kv(s)
@@ -80,6 +137,8 @@ function table.sortedpairs(t)
return kv, s
end
+table.sortedpairs = table.sortedhash
+
function table.append(t, list)
for _,v in next, list do
insert(t,v)
@@ -188,7 +247,7 @@ end
table.fastcopy = fastcopy
table.copy = copy
--- rougly: copy-loop : unpack : sub == 0.9 : 0.4 : 0.45 (so in critical apps, use unpack)
+-- roughly: 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) }
@@ -202,18 +261,18 @@ end
-- slower than #t on indexed tables (#t only returns the size of the numerically indexed slice)
-function table.is_empty(t)
+function table.is_empty(t) -- obolete, use inline code instead
return not t or not next(t)
end
-function table.one_entry(t)
+function table.one_entry(t) -- obolete, use inline code instead
local n = next(t)
return n and not next(t,n)
end
-function table.starts_at(t)
- return ipairs(t,1)(t,0)
-end
+--~ function table.starts_at(t) -- obsolete, not nice anyway
+--~ return ipairs(t,1)(t,0)
+--~ end
function table.tohash(t,value)
local h = { }
@@ -291,6 +350,8 @@ end
--
-- local propername = lpeg.P(lpeg.R("AZ","az","__") * lpeg.R("09","AZ","az", "__")^0 * lpeg.P(-1) )
+-- problem: there no good number_to_string converter with the best resolution
+
local function do_serialize(root,name,depth,level,indexed)
if level > 0 then
depth = depth .. " "
@@ -313,8 +374,9 @@ local function do_serialize(root,name,depth,level,indexed)
handle(format("%s{",depth))
end
end
+ -- we could check for k (index) being number (cardinal)
if root and next(root) then
- local first, last = nil, 0 -- #root cannot be trusted here
+ local first, last = nil, 0 -- #root cannot be trusted here (will be ok in 5.2 when ipairs is gone)
if compact then
-- NOT: for k=1,#root do (we need to quit at nil)
for k,v in ipairs(root) do -- can we use next?
@@ -335,10 +397,10 @@ local function do_serialize(root,name,depth,level,indexed)
if hexify then
handle(format("%s 0x%04X,",depth,v))
else
- handle(format("%s %s,",depth,v))
+ handle(format("%s %s,",depth,v)) -- %.99g
end
elseif t == "string" then
- if reduce and (find(v,"^[%-%+]?[%d]-%.?[%d+]$") == 1) then
+ if reduce and tonumber(v) then
handle(format("%s %s,",depth,v))
else
handle(format("%s %q,",depth,v))
@@ -375,29 +437,29 @@ local function do_serialize(root,name,depth,level,indexed)
--~ if hexify then
--~ handle(format("%s %s=0x%04X,",depth,key(k),v))
--~ else
- --~ handle(format("%s %s=%s,",depth,key(k),v))
+ --~ handle(format("%s %s=%s,",depth,key(k),v)) -- %.99g
--~ end
if type(k) == "number" then -- or find(k,"^%d+$") then
if hexify then
handle(format("%s [0x%04X]=0x%04X,",depth,k,v))
else
- handle(format("%s [%s]=%s,",depth,k,v))
+ handle(format("%s [%s]=%s,",depth,k,v)) -- %.99g
end
elseif noquotes and not reserved[k] and find(k,"^%a[%w%_]*$") then
if hexify then
handle(format("%s %s=0x%04X,",depth,k,v))
else
- handle(format("%s %s=%s,",depth,k,v))
+ handle(format("%s %s=%s,",depth,k,v)) -- %.99g
end
else
if hexify then
handle(format("%s [%q]=0x%04X,",depth,k,v))
else
- handle(format("%s [%q]=%s,",depth,k,v))
+ handle(format("%s [%q]=%s,",depth,k,v)) -- %.99g
end
end
elseif t == "string" then
- if reduce and (find(v,"^[%-%+]?[%d]-%.?[%d+]$") == 1) then
+ if reduce and tonumber(v) then
--~ handle(format("%s %s=%s,",depth,key(k),v))
if type(k) == "number" then -- or find(k,"^%d+$") then
if hexify then
@@ -606,7 +668,7 @@ function table.tofile(filename,root,name,reduce,noquotes,hexify)
end
end
-local function flatten(t,f,complete)
+local function flatten(t,f,complete) -- is this used? meybe a variant with next, ...
for i=1,#t do
local v = t[i]
if type(v) == "table" then
@@ -635,6 +697,24 @@ end
table.flatten_one_level = table.unnest
+-- a better one:
+
+local function flattened(t,f)
+ if not f then
+ f = { }
+ end
+ for k, v in next, t do
+ if type(v) == "table" then
+ flattened(v,f)
+ else
+ f[k] = v
+ end
+ end
+ return f
+end
+
+table.flattened = flattened
+
-- the next three may disappear
function table.remove_value(t,value) -- todo: n
@@ -770,7 +850,7 @@ function table.clone(t,p) -- t is optional or nil or table
elseif not t then
t = { }
end
- setmetatable(t, { __index = function(_,key) return p[key] end })
+ setmetatable(t, { __index = function(_,key) return p[key] end }) -- why not __index = p ?
return t
end
@@ -798,18 +878,33 @@ function table.reverse(t)
return tt
end
---~ function table.keys(t)
---~ local k = { }
---~ for k,_ in next, t do
---~ k[#k+1] = k
---~ end
---~ return k
---~ end
+function table.insert_before_value(t,value,extra)
+ for i=1,#t do
+ if t[i] == extra then
+ remove(t,i)
+ end
+ end
+ for i=1,#t do
+ if t[i] == value then
+ insert(t,i,extra)
+ return
+ end
+ end
+ insert(t,1,extra)
+end
+
+function table.insert_after_value(t,value,extra)
+ for i=1,#t do
+ if t[i] == extra then
+ remove(t,i)
+ end
+ end
+ for i=1,#t do
+ if t[i] == value then
+ insert(t,i+1,extra)
+ return
+ end
+ end
+ insert(t,#t+1,extra)
+end
---~ function table.keys_as_string(t)
---~ local k = { }
---~ for k,_ in next, t do
---~ k[#k+1] = k
---~ end
---~ return concat(k,"")
---~ end
diff --git a/Master/texmf-dist/tex/context/base/l-unicode.lua b/Master/texmf-dist/tex/context/base/l-unicode.lua
index 124a1e24038..0c5a60142ae 100644
--- a/Master/texmf-dist/tex/context/base/l-unicode.lua
+++ b/Master/texmf-dist/tex/context/base/l-unicode.lua
@@ -1,18 +1,39 @@
if not modules then modules = { } end modules ['l-unicode'] = {
version = 1.001,
- comment = "companion to luat-lib.tex",
+ comment = "companion to luat-lib.mkiv",
author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
copyright = "PRAGMA ADE / ConTeXt Development Team",
license = "see context related readme files"
}
+if not unicode then
+
+ unicode = { utf8 = { } }
+
+ local floor, char = math.floor, string.char
+
+ function unicode.utf8.utfchar(n)
+ if n < 0x80 then
+ return char(n)
+ elseif n < 0x800 then
+ return char(0xC0 + floor(n/0x40)) .. char(0x80 + (n % 0x40))
+ elseif n < 0x10000 then
+ return char(0xE0 + floor(n/0x1000)) .. char(0x80 + (floor(n/0x40) % 0x40)) .. char(0x80 + (n % 0x40))
+ elseif n < 0x40000 then
+ return char(0xF0 + floor(n/0x40000)) .. char(0x80 + floor(n/0x1000)) .. char(0x80 + (floor(n/0x40) % 0x40)) .. char(0x80 + (n % 0x40))
+ else -- wrong:
+ -- return char(0xF1 + floor(n/0x1000000)) .. char(0x80 + floor(n/0x40000)) .. char(0x80 + floor(n/0x1000)) .. char(0x80 + (floor(n/0x40) % 0x40)) .. char(0x80 + (n % 0x40))
+ return "?"
+ end
+ end
+
+end
+
utf = utf or unicode.utf8
local concat, utfchar, utfgsub = table.concat, utf.char, utf.gsub
local char, byte, find, bytepairs = string.char, string.byte, string.find, string.bytepairs
-unicode = unicode or { }
-
-- 0 EF BB BF UTF-8
-- 1 FF FE UTF-16-little-endian
-- 2 FE FF UTF-16-big-endian
@@ -27,14 +48,20 @@ unicode.utfname = {
[4] = 'utf-32-be'
}
-function unicode.utftype(f) -- \000 fails !
+-- \000 fails in <= 5.0 but is valid in >=5.1 where %z is depricated
+
+function unicode.utftype(f)
local str = f:read(4)
if not str then
f:seek('set')
return 0
- elseif find(str,"^%z%z\254\255") then
+ -- elseif find(str,"^%z%z\254\255") then -- depricated
+ -- elseif find(str,"^\000\000\254\255") then -- not permitted and bugged
+ elseif find(str,"\000\000\254\255",1,true) then -- seems to work okay (TH)
return 4
- elseif find(str,"^\255\254%z%z") then
+ -- elseif find(str,"^\255\254%z%z") then -- depricated
+ -- elseif find(str,"^\255\254\000\000") then -- not permitted and bugged
+ elseif find(str,"\255\254\000\000",1,true) then -- seems to work okay (TH)
return 3
elseif find(str,"^\254\255") then
f:seek('set',2)
diff --git a/Master/texmf-dist/tex/context/base/l-url.lua b/Master/texmf-dist/tex/context/base/l-url.lua
index 097c944677b..e3e6f81302c 100644
--- a/Master/texmf-dist/tex/context/base/l-url.lua
+++ b/Master/texmf-dist/tex/context/base/l-url.lua
@@ -1,13 +1,14 @@
if not modules then modules = { } end modules ['l-url'] = {
version = 1.001,
- comment = "companion to luat-lib.tex",
+ comment = "companion to luat-lib.mkiv",
author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
copyright = "PRAGMA ADE / ConTeXt Development Team",
license = "see context related readme files"
}
-local char, gmatch = string.char, string.gmatch
+local char, gmatch, gsub = string.char, string.gmatch, string.gsub
local tonumber, type = tonumber, type
+local lpegmatch = lpeg.match
-- from the spec (on the web):
--
@@ -31,7 +32,9 @@ local hexdigit = lpeg.R("09","AF","af")
local plus = lpeg.P("+")
local escaped = (plus / " ") + (percent * lpeg.C(hexdigit * hexdigit) / tochar)
-local scheme = lpeg.Cs((escaped+(1-colon-slash-qmark-hash))^0) * colon + lpeg.Cc("")
+-- we assume schemes with more than 1 character (in order to avoid problems with windows disks)
+
+local scheme = lpeg.Cs((escaped+(1-colon-slash-qmark-hash))^2) * 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("")
@@ -39,25 +42,51 @@ local fragment = hash * lpeg.Cs((escaped+(1- endofstring))^0
local parser = lpeg.Ct(scheme * authority * path * query * fragment)
+-- todo: reconsider Ct as we can as well have five return values (saves a table)
+-- so we can have two parsers, one with and one without
+
function url.split(str)
- return (type(str) == "string" and parser:match(str)) or str
+ return (type(str) == "string" and lpegmatch(parser,str)) or str
end
+-- todo: cache them
+
function url.hashed(str)
local s = url.split(str)
+ local somescheme = s[1] ~= ""
return {
- scheme = (s[1] ~= "" and s[1]) or "file",
+ scheme = (somescheme and s[1]) or "file",
authority = s[2],
- path = s[3],
- query = s[4],
- fragment = s[5],
- original = str
+ path = s[3],
+ query = s[4],
+ fragment = s[5],
+ original = str,
+ noscheme = not somescheme,
}
end
+function url.hasscheme(str)
+ return url.split(str)[1] ~= ""
+end
+
+function url.addscheme(str,scheme)
+ return (url.hasscheme(str) and str) or ((scheme or "file:///") .. str)
+end
+
+function url.construct(hash)
+ local fullurl = hash.sheme .. "://".. hash.authority .. hash.path
+ if hash.query then
+ fullurl = fullurl .. "?".. hash.query
+ end
+ if hash.fragment then
+ fullurl = fullurl .. "?".. hash.fragment
+ end
+ return fullurl
+end
+
function url.filename(filename)
local t = url.hashed(filename)
- return (t.scheme == "file" and t.path:gsub("^/([a-zA-Z])([:|])/)","%1:")) or filename
+ return (t.scheme == "file" and (gsub(t.path,"^/([a-zA-Z])([:|])/)","%1:"))) or filename
end
function url.query(str)
diff --git a/Master/texmf-dist/tex/context/base/l-utils.lua b/Master/texmf-dist/tex/context/base/l-utils.lua
index 8d531711fb4..ebc27b8cfcd 100644
--- a/Master/texmf-dist/tex/context/base/l-utils.lua
+++ b/Master/texmf-dist/tex/context/base/l-utils.lua
@@ -1,6 +1,6 @@
if not modules then modules = { } end modules ['l-utils'] = {
version = 1.001,
- comment = "companion to luat-lib.tex",
+ comment = "companion to luat-lib.mkiv",
author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
copyright = "PRAGMA ADE / ConTeXt Development Team",
license = "see context related readme files"
@@ -8,6 +8,10 @@ if not modules then modules = { } end modules ['l-utils'] = {
-- hm, quite unreadable
+local gsub = string.gsub
+local concat = table.concat
+local type, next = type, next
+
if not utils then utils = { } end
if not utils.merger then utils.merger = { } end
if not utils.lua then utils.lua = { } end
@@ -45,7 +49,7 @@ function utils.merger._self_load_(name)
end
if data and utils.merger.strip_comment then
-- saves some 20K
- data = data:gsub("%-%-~[^\n\r]*[\r\n]", "")
+ data = gsub(data,"%-%-~[^\n\r]*[\r\n]", "")
end
return data or ""
end
@@ -63,7 +67,7 @@ end
function utils.merger._self_swap_(data,code)
if data ~= "" then
- return (data:gsub(utils.merger.pattern, function(s)
+ return (gsub(data,utils.merger.pattern, function(s)
return "\n\n" .. "-- "..utils.merger.m_begin .. "\n" .. code .. "\n" .. "-- "..utils.merger.m_end .. "\n\n"
end, 1))
else
@@ -73,8 +77,8 @@ end
--~ stripper:
--~
---~ data = string.gsub(data,"%-%-~[^\n]*\n","")
---~ data = string.gsub(data,"\n\n+","\n")
+--~ data = gsub(data,"%-%-~[^\n]*\n","")
+--~ data = gsub(data,"\n\n+","\n")
function utils.merger._self_libs_(libs,list)
local result, f, frozen = { }, nil, false
@@ -82,9 +86,10 @@ function utils.merger._self_libs_(libs,list)
if type(libs) == 'string' then libs = { libs } end
if type(list) == 'string' then list = { list } end
local foundpath = nil
- for _, lib in ipairs(libs) do
- for _, pth in ipairs(list) do
- pth = string.gsub(pth,"\\","/") -- file.clean_path
+ for i=1,#libs do
+ local lib = libs[i]
+ for j=1,#list do
+ local pth = gsub(list[j],"\\","/") -- file.clean_path
utils.report("checking library path %s",pth)
local name = pth .. "/" .. lib
if lfs.isfile(name) then
@@ -96,7 +101,8 @@ function utils.merger._self_libs_(libs,list)
if foundpath then
utils.report("using library path %s",foundpath)
local right, wrong = { }, { }
- for _, lib in ipairs(libs) do
+ for i=1,#libs do
+ local lib = libs[i]
local fullname = foundpath .. "/" .. lib
if lfs.isfile(fullname) then
-- right[#right+1] = lib
@@ -110,15 +116,15 @@ function utils.merger._self_libs_(libs,list)
end
end
if #right > 0 then
- utils.report("merged libraries: %s",table.concat(right," "))
+ utils.report("merged libraries: %s",concat(right," "))
end
if #wrong > 0 then
- utils.report("skipped libraries: %s",table.concat(wrong," "))
+ utils.report("skipped libraries: %s",concat(wrong," "))
end
else
utils.report("no valid library path found")
end
- return table.concat(result, "\n\n")
+ return concat(result, "\n\n")
end
function utils.merger.selfcreate(libs,list,target)
diff --git a/Master/texmf-dist/tex/context/base/l-xml.lua b/Master/texmf-dist/tex/context/base/l-xml.lua
index 8b8a6ce4433..14e97337b25 100644
--- a/Master/texmf-dist/tex/context/base/l-xml.lua
+++ b/Master/texmf-dist/tex/context/base/l-xml.lua
@@ -1,2441 +1,23 @@
if not modules then modules = { } end modules ['l-xml'] = {
version = 1.001,
- comment = "this module is the basis for the lxml-* ones",
+ comment = "this module is replaced by 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)
+-- We asume that the helper modules l-*.lua are loaded
+-- already. But anyway if you use mtxrun to run your script
+-- all is taken care of.
--- some code may move to l-xmlext
--- some day we will really compile the lpaths (just construct functions)
--- todo: some things per xml file, like namespace remapping
-
---[[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 { }
-
-local concat, remove, insert = table.concat, table.remove, table.insert
-local type, next, tonumber, tostring, setmetatable, loadstring = type, next, tonumber, tostring, setmetatable, loadstring
-local format, lower, gmatch, gsub, find = string.format, string.lower, string.gmatch, string.gsub, string.find
-
---[[ldx--
-<p>This module can be used stand alone but also inside <l n='mkiv'/> in
-which case it hooks into the tracker code. Therefore we provide a few
-functions that set the tracers.</p>
---ldx]]--
-
-local trace_lpath, trace_remap = false, false
-
-if trackers then
- trackers.register("xml.lpath", function(v) trace_lpath = v end)
- trackers.register("xml.remap", function(v) trace_remap = v end)
-end
-
-function xml.settrace(str,value)
- if str == "lpath" then
- trace_lpath = value or false
- elseif str == "remap" then
- trace_remap = value or false
- end
-end
-
---[[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(lower(pattern))) / 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(lower(url))
- 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(lower(url)) 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 nsremap, resolvens = 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 cleanup and #value > 0 then
- value = cleanup(value) -- new
- end
- 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
-dt[0] = top
- if toclose.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)
- if at.xmlns then
- remove(xmlns)
- end
- at = { }
- 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: " .. gsub(txt,"([ \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)
-
- local 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 logs.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
-
- local 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
- local etg, edt = e.tg, e.dt
- local spc = specialconverter and specialconverter[etg]
- if spc then
- 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 next, eat do
- ats[#ats+1] = format('%s=%q',k,attributeconverter(v))
- end
- else
- for k,v in next, eat do
- ats[#ats+1] = format('%s=%q',k,v)
- end
- end
- end
- if ern and trace_remap and ern ~= ens then
- 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
- local ei = edt[i]
- if type(ei) == "string" then
- if textconverter then
- handle(textconverter(ei))
- else
- handle(ei)
- end
- else
- serialize(ei,handle,textconverter,attributeconverter,specialconverter,nocommands)
- end
- 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
- local ei = e[i]
- if type(ei) == "string" then
- if textconverter then
- handle(textconverter(ei))
- else
- handle(ei)
- end
- else
- serialize(ei,handle,textconverter,attributeconverter,specialconverter,nocommands)
- end
- 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=1,#dt do
- local v = dt[k]
- 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
- insert(dt, 1, { special=true, ns="", tg="@pi@", dt = { "xml version='1.0' standalone='yes'"} } )
- 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 ""
+if not trackers then
+ require('trac-tra')
end
-function xml.isempty(root, pattern)
- if pattern == "" or pattern == "*" then
- pattern = nil
- end
- if pattern then
- -- todo
- return false
- else
- return not root or not root.dt or #root.dt == 0 or root.dt == ""
- end
+if not xml then
+ require('lxml-tab')
+ require('lxml-lpt')
+ require('lxml-mis')
+ require('lxml-aux')
+ require('lxml-xml')
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]]--
-
-local lpathcalls = 0 -- statisctics
-local lpathcached = 0 -- statisctics
-
-do
-
- xml.functions = xml.functions or { }
- xml.expressions = xml.expressions or { }
-
- local functions = xml.functions
- local expressions = xml.expressions
-
- 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",
- }
-
- -- a rather dumb lpeg
-
- local P, S, R, C, V, Cc = lpeg.P, lpeg.S, lpeg.R, lpeg.C, lpeg.V, lpeg.Cc
-
- -- instead of using functions we just parse a few names which saves a call
- -- later on
-
- local lp_position = P("position()") / "ps"
- local lp_index = P("index()") / "id"
- local lp_text = P("text()") / "tx"
- local lp_name = P("name()") / "(ns~='' and ns..':'..tg)" -- "((rt.ns~='' and rt.ns..':'..rt.tg) or '')"
- local lp_tag = P("tag()") / "tg" -- (rt.tg or '')
- local lp_ns = P("ns()") / "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_lua_function = C(R("az","AZ","--","__")^1 * (P(".") * R("az","AZ","--","__")^1)^1) * P("(") / function(t) -- todo: better . handling
- return t .. "("
- end
-
- local lp_function = C(R("az","AZ","--","__")^1) * P("(") / function(t) -- todo: better . handling
- if expressions[t] then
- return "expressions." .. t .. "("
- else
- return "expressions.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) -- lpeg.P{"("*C(((1-S("()"))+V(1))^0)*")"}
-
- -- if we use a dedicated namespace then we don't need to pass rt and k
-
- local lp_special = (C(P("name")+P("text")+P("tag"))) * value / function(t,s)
- if expressions[t] then
- if s then
- return "expressions." .. t .. "(r,k," .. s ..")"
- else
- return "expressions." .. t .. "(r,k)"
- end
- else
- return "expressions.error(" .. t .. ")"
- end
- end
-
- local converter = lpeg.Cs ( (
- lp_position +
- lp_index +
- lp_text + lp_name + -- fast one
- lp_special +
- lp_noequal + lp_doequal +
- lp_attribute +
- lp_lua_function +
- lp_function +
- 1 )^1 )
-
- -- expressions,root,rootdt,k,e,edt,ns,tg,idx,hsh[tg] or 1
-
- local template = [[
- return function(expressions,r,d,k,e,dt,ns,tg,id,ps)
- local at, tx = e.at or { }, dt[1] or ""
- return %s
- end
- ]]
-
- local function make_expression(str)
- str = converter:match(str)
- return str, loadstring(format(template,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 = 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 + -- brrr, not here !
- 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 +
- many + any +
- 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
- insert(map, 1, { 16 })
- end
- -- print(gsub(table.serialize(map),"[ \n]+"," "))
- return map
- end
- end
- end
-
- local cache = { }
-
- function xml.lpath(pattern,trace)
- lpathcalls = lpathcalls + 1
- if type(pattern) == "string" then
- local result = cache[pattern]
- if result == nil then -- can be false which is valid -)
- result = compose(pattern)
- cache[pattern] = result
- lpathcached = lpathcached + 1
- end
- if trace or trace_lpath then
- xml.lshow(result)
- end
- return result
- else
- return pattern
- end
- end
-
- function xml.cached_patterns()
- return cache
- end
-
--- we run out of locals (limited to 200)
---
--- local fallbackreport = (texio and texio.write) or io.write
-
- function xml.lshow(pattern,report)
--- report = report or fallbackreport
- report = report or (texio and texio.write) or io.write
- 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=1,#lp do
- local v = lp[k]
- 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
- local report = (type(t[#t]) == "function" and t[#t]) or (texio and texio.write) or io.write
- 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
- local expressions = xml.expressions
-
- expressions.contains = string.find
- expressions.find = string.find
- expressions.upper = string.upper
- expressions.lower = string.lower
- expressions.number = tonumber
- expressions.boolean = toboolean
-
- expressions.oneof = function(s,...) -- slow
- local t = {...} for i=1,#t do if s == t[i] then return true end end return false
- end
-
- expressions.error = function(str)
- xml.error_handler("unknown function in lpath expression",str or "?")
- 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(d,k,n) -- ns + tg
- local found = false
- n = n or 0
- if not k then
- -- not found
- elseif n == 0 then
- local dk = d[k]
- found = dk and (type(dk) == "table") and dk
- elseif n < 0 then
- for i=k-1,1,-1 do
- local di = d[i]
- if type(di) == "table" then
- if n == -1 then
- found = di
- break
- else
- n = n + 1
- end
- end
- end
- else
- for i=k+1,#d,1 do
- local di = d[i]
- if type(di) == "table" then
- if n == 1 then
- found = di
- 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
-
- functions.tag = function(d,k,n) -- only tg
- local found = false
- n = n or 0
- if not k then
- -- not found
- elseif n == 0 then
- local dk = d[k]
- found = dk and (type(dk) == "table") and dk
- elseif n < 0 then
- for i=k-1,1,-1 do
- local di = d[i]
- if type(di) == "table" then
- if n == -1 then
- found = di
- break
- else
- n = n + 1
- end
- end
- end
- else
- for i=k+1,#d,1 do
- local di = d[i]
- if type(di) == "table" then
- if n == 1 then
- found = di
- break
- else
- n = n - 1
- end
- end
- end
- end
- return (found and found.tg) or ""
- end
-
- expressions.text = functions.text
- expressions.name = functions.name
- expressions.tag = functions.tag
-
- 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
- local hsh = { } -- this will slooow down the lot
- 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
- -- we can optimize this for simple searches, but it probably does not pay off
- hsh[tg] = (hsh[tg] or 0) + 1
- 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](expressions,root,rootdt,k,e,edt,ns,tg,idx,hsh[tg] or 1)
- 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[gsub(arguments,"^([\"\'])(.*)%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 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
- insert(d,k,element) -- untested
---~ elseif element.dt then
---~ for _,v in ipairs(element.dt) do -- i added
---~ insert(d,k,v)
---~ k = k + 1
---~ end
---~ end
- else
- local edt = element.dt
- if edt then
- for i=1,#edt do
- insert(d,k,edt[i])
- k = k + 1
- end
- 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 gmatch(attribute or "href","([^|]+)") 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, nolines) -- strips all leading and trailing space !
- 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" then
-
- if str == "" then
- -- stripped
- else
- if nolines then
- str = gsub(str,"[ \n\r\t]+"," ")
- end
- if str == "" then
- -- stripped
- else
- t[#t+1] = str
- end
- end
- else
- t[#t+1] = str
- end
- end
- d[k].dt = t
- end
- end)
- end
-
- local function rename_space(root, oldspace, newspace) -- fast variant
- local ndt = #root.dt
- 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_space(edt, oldspace, newspace)
- end
- end
- end
- end
-
- xml.rename_space = rename_space
-
- 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)
- local dt = t.dt
- if dt then
- for k=1,#dt do
- local v = dt[k]
- if type(v) == "string" then
- dt[k] = gsub(v,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 (gsub(str,"(.)" , xml.escapes )) end
---~ function xml.unescaped(str) return (gsub(str,"(&.-;)", xml.unescapes)) end
---~ function xml.cleansed (str) return (gsub(str,"<.->" , '' )) 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)
-
- xml.escaped_pattern = escaped
- xml.unescaped_pattern = unescaped
- xml.cleansed_pattern = cleansed
-
- 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.entity_handler == function
-
- function xml.entity_handler(e)
- return format("[%s]",e)
- end
-
- local char = unicode.utf8.char
-
- local function toutf(s)
- return char(tonumber(s,16))
- end
-
- local 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 find(dk,"&#x.-;") then
- d[k] = gsub(dk,"&#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 find(e,"^#x") then
- return char(tonumber(e:sub(3),16))
- elseif find(e,"^#") then
- return char(tonumber(e:sub(2)))
- else
- local ee = xml.entities[e] -- we cannot shortcut this one (is reloaded)
- if ee then
- return ee
- else
- local h = xml.entity_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 find(dk,"&.-;") then
- d[k] = gsub(dk,"&(.-);",resolve)
- end
- else
- resolve_entities(dk)
- end
- end
- end
- end
-
- xml.resolve_entities = resolve_entities
-
- function xml.utfize_text(str)
- if find(str,"&#") then
- return (gsub(str,"&#x(.-);",toutf))
- else
- return str
- end
- end
-
- function xml.resolve_text_entities(str) -- maybe an lpeg. maybe resolve inline
- if find(str,"&") then
- return (gsub(str,"&(.-);",resolve))
- else
- return str
- end
- end
-
- function xml.show_text_entities(str)
- if find(str,"&") then
- return (gsub(str,"&(.-);","[%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 next, documententities do
- allentities[k] = v
- end
- end
- end
-
-end end
-
-function xml.statistics()
- return {
- lpathcalls = lpathcalls,
- lpathcached = lpathcached,
- }
-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.settrace("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-alt.tex b/Master/texmf-dist/tex/context/base/lang-alt.tex
index e45748eadab..f65acbda3ba 100644
--- a/Master/texmf-dist/tex/context/base/lang-alt.tex
+++ b/Master/texmf-dist/tex/context/base/lang-alt.tex
@@ -23,6 +23,8 @@
% Azeri/Azerbaijani, Chuvash, Turkish, Turkmen
% Kazakh, Kazar, Kireghiz, Noghay, Talar
% Buryat, Kalmuck, Khalkha
+%
+% Turkmen translation by Nazar Annagurban <nazartm at gmail.com> 18. March 2010
\unprotect
@@ -38,54 +40,113 @@
\c!leftquotation=\upperleftdoublesixquote,
\c!rightquotation=\upperrightdoubleninequote,
\c!date={\v!year,\ ,\v!month,\ ,\v!day}]
+
+\installlanguage
+ [\s!tk]
+ [\c!spacing=\v!broad,
+ \c!leftsentence=---,
+ \c!rightsentence=---,
+ \c!leftsubsentence=---,
+ \c!rightsubsentence=---,
+ \c!leftquote=\upperleftsinglesixquote,
+ \c!rightquote=\upperrightsingleninequote,
+ \c!leftquotation=\upperleftdoublesixquote,
+ \c!rightquotation=\upperrightdoubleninequote,
+ \c!date={\v!year,\ ,\v!month,\ ,\v!day}
+ \s!patterns=\s!tk,
+ \s!lefthyphenmin=1,
+ \s!righthyphenmin=2]
\installlanguage [turkish] [\s!tr]
+\installlanguage [turkmen] [\s!tk]
\setupheadtext [\s!tr] [\v!content=Fihrist]
+\setupheadtext [\s!tk] [\v!content=Mazmuny]
\setupheadtext [\s!tr] [\v!tables=Tablolar]
+\setupheadtext [\s!tk] [\v!tables=Tablisalar]
\setupheadtext [\s!tr] [\v!figures=\Scedilla ekiller]
+\setupheadtext [\s!tk] [\v!figures=Suratlar]
\setupheadtext [\s!tr] [\v!graphics=Grafikler]
+\setupheadtext [\s!tk] [\v!graphics=Grafikler]
\setupheadtext [\s!tr] [\v!intermezzi=...]
+\setupheadtext [\s!tk] [\v!intermezzi=Arakesmeler]
\setupheadtext [\s!tr] [\v!index=\Idotaccent ndex]
+\setupheadtext [\s!tk] [\v!index=Indeks]
\setupheadtext [\s!tr] [\v!abbreviations=K\dotlessi saltmalar]
+\setupheadtext [\s!tk] [\v!abbreviations=Gysgaltmalar]
\setupheadtext [\s!tr] [\v!logos=Logolar]
+\setupheadtext [\s!tk] [\v!logos=Logolar]
\setupheadtext [\s!tr] [\v!units=Birimler]
+\setupheadtext [\s!tk] [\v!units=Birlikler]
\setuplabeltext [\s!tr] [\v!table=Tablo ]
+\setuplabeltext [\s!tk] [\v!table=Tablisa]
\setuplabeltext [\s!tr] [\v!figure=\Scedilla ekil ]
+\setuplabeltext [\s!tk] [\v!figure=Surat]
\setuplabeltext [\s!tr] [\v!intermezzo=... ]
-\setuplabeltext [\s!tr] [\v!graphic=Grafik ]
+\setuplabeltext [\s!tk] [\v!intermezzo=Arakesme]
+\setuplabeltext [\s!tr] [\v!graphic=Grafik]
+\setuplabeltext [\s!tk] [\v!graphic=Grafik]
\setuplabeltext [\s!tr] [\v!chapter=]
+\setuplabeltext [\s!tk] [\v!chapter=Bap]
\setuplabeltext [\s!tr] [\v!section=]
+\setuplabeltext [\s!tk] [\v!section=]
\setuplabeltext [\s!tr] [\v!subsection=]
+\setuplabeltext [\s!tk] [\v!subsection=]
\setuplabeltext [\s!tr] [\v!subsubsection=]
\setuplabeltext [\s!tr] [\v!subsubsubsection=]
+\setuplabeltext [\s!tk] [\v!subsubsubsection=]
\setuplabeltext [\s!tr] [\v!appendix=]
+\setuplabeltext [\s!tk] [\v!appendix=Go\scedilla ma\ccedilla a]
\setuplabeltext [\s!tr] [\v!part=Cilt ]
+\setuplabeltext [\s!tk] [\v!part=B\odiaeresis l\udiaeresis m]
\setuplabeltext [\s!tr] [\v!line=sat\dotlessi r ]
+\setuplabeltext [\s!tk] [\v!line=setir]
\setuplabeltext [\s!tr] [\v!lines=sat\dotlessi rlar ]
+\setuplabeltext [\s!tk] [\v!lines=setirler]
-\setuplabeltext [\s!tr] [\v!january=ocak]
+\setuplabeltext [\s!tk] [\v!january=\yacute anwar]
+\setuplabeltext [\s!tk] [\v!february=fewral]
+\setuplabeltext [\s!tk] [\v!march=mart]
+\setuplabeltext [\s!tk] [\v!april=aprel]
+\setuplabeltext [\s!tk] [\v!may=ma\yacute]
+\setuplabeltext [\s!tk] [\v!june=i\yacute un]
+\setuplabeltext [\s!tk] [\v!july=i\yacute ul]
+\setuplabeltext [\s!tk] [\v!august=awgust]
+\setuplabeltext [\s!tk] [\v!september=sent\yacute abr]
+\setuplabeltext [\s!tk] [\v!october=okt\yacute abr]
+\setuplabeltext [\s!tk] [\v!november=no\yacute abr]
+\setuplabeltext [\s!tk] [\v!december=dekabr]
+
+\setuplabeltext [\s!tr] [\v!january=ocak]
\setuplabeltext [\s!tr] [\v!february=\Scedilla ubat]
-\setuplabeltext [\s!tr] [\v!march=mart]
-\setuplabeltext [\s!tr] [\v!april=nisan]
-\setuplabeltext [\s!tr] [\v!may=may\dotlessi s]
-\setuplabeltext [\s!tr] [\v!june=haziran]
-\setuplabeltext [\s!tr] [\v!july=temmuz]
-\setuplabeltext [\s!tr] [\v!august=a\gbreve ustos]
-\setuplabeltext [\s!tr] [\v!september=eyl\udiaeresis l]
-\setuplabeltext [\s!tr] [\v!october=ekim]
+\setuplabeltext [\s!tr] [\v!march=mart]
+\setuplabeltext [\s!tr] [\v!april=nisan]
+\setuplabeltext [\s!tr] [\v!may=may\dotlessi s]
+\setuplabeltext [\s!tr] [\v!june=haziran]
+\setuplabeltext [\s!tr] [\v!july=temmuz]
+\setuplabeltext [\s!tr] [\v!august=a\gbreve ustos]
+\setuplabeltext [\s!tr] [\v!september=eyl\udiaeresis l]
+\setuplabeltext [\s!tr] [\v!october=ekim]
\setuplabeltext [\s!tr] [\v!november=kas\dotlessi m]
\setuplabeltext [\s!tr] [\v!december=aral\dotlessi k]
-\setuplabeltext [\s!tr] [\v!sunday=pazar]
-\setuplabeltext [\s!tr] [\v!monday=pazartesi]
-\setuplabeltext [\s!tr] [\v!tuesday=sal\dotlessi]
-\setuplabeltext [\s!tr] [\v!wednesday=\ccedilla ar\scedilla amba]
+\setuplabeltext [\s!tr] [\v!sunday=pazar]
+\setuplabeltext [\s!tr] [\v!monday=pazartesi]
+\setuplabeltext [\s!tr] [\v!tuesday=sal\dotlessi]
+\setuplabeltext [\s!tr] [\v!wednesday=\ccedilla ar\scedilla amba]
\setuplabeltext [\s!tr] [\v!thursday=per\scedilla embe]
-\setuplabeltext [\s!tr] [\v!friday=cuma]
+\setuplabeltext [\s!tr] [\v!friday=cuma]
\setuplabeltext [\s!tr] [\v!saturday=cumartesi]
+\setuplabeltext [\s!tk] [\v!sunday=dyn\ccedilla\ g\udiaeresis n]
+\setuplabeltext [\s!tk] [\v!monday=birinji g\udiaeresis n]
+\setuplabeltext [\s!tk] [\v!tuesday=ikinji g\udiaeresis n]
+\setuplabeltext [\s!tk] [\v!wednesday=\udiaeresis\ccedilla\udiaeresis nji]
+\setuplabeltext [\s!tk] [\v!thursday=d\odiaeresis rd\udiaeresis nji g\udiaeresis n]
+\setuplabeltext [\s!tk] [\v!friday=b\adiaeresis\scedilla inji g\udiaeresis n]
+\setuplabeltext [\s!tk] [\v!saturday=altynjy g\udiaeresis n]
+
%D \ShowAllLanguageValues [\s!tr] [turkish] {Turkish} {delight} % turks fruit
\protect \endinput
diff --git a/Master/texmf-dist/tex/context/base/lang-bal.tex b/Master/texmf-dist/tex/context/base/lang-bal.tex
index 9b0528a27bb..394e9d93c1f 100644
--- a/Master/texmf-dist/tex/context/base/lang-bal.tex
+++ b/Master/texmf-dist/tex/context/base/lang-bal.tex
@@ -1,9 +1,9 @@
%D \module
-%D [ file=lang--bal,
-%D version=1997.09.03,
+%D [ file=lang-bal,
+%D version=2010.01.21,
%D title=\CONTEXT\ Language Macros,
%D subtitle=Baltic Languages,
-%D author=Hans Hagen / Tobias Burnus,
+%D author=Marius Aleknevičius,
%D date=\currentdate,
%D copyright={PRAGMA / Hans Hagen \& Ton Otten}]
%C
@@ -14,13 +14,105 @@
\writestatus{loading}{ConTeXt Language Macros / Baltic Languages}
%D The framework of this module is set up by Hans Hagen while
-%D many of the first translations were done by Tobias. Later
-%D on, corrections were made by users. If you have suggestions,
-%D or feel that your name missing here, don't hesitate to send
-%D us an email.
+%D all the translations were done by Marius Aleknevičius. If
+%D you have suggestions, don't hesitate to send us an email.
-% Lettish/Latvian, Lithuanian
+%D This file is in \UTF\ encoding and is meant for \MKIV.
+
+% Lettish/Latvian, Lietuvių/Lithuanian
\unprotect
+\installlanguage
+ [\s!lt]
+ [\c!spacing=\v!packed,
+ \c!leftsentence=---,
+ \c!rightsentence=---,
+ \c!leftsubsentence=---,
+ \c!rightsubsentence=---,
+ \c!leftquote=\lowerleftdoubleninequote,
+ \c!rightquote=\upperrightdoublesixquote,
+ \c!leftquotation=\lowerleftdoubleninequote,
+ \c!rightquotation=\upperrightdoublesixquote,
+ \c!date={\v!year,~m.,\ ,\v!month,\ ,\v!day,~d.},
+ \s!patterns=\s!lt,
+ \s!encoding=l7x,
+ \s!mapping=l7x,
+ \s!lefthyphenmin=2,
+ \s!righthyphenmin=2]
+
+\installlanguage [lithuanian] [\s!lt]
+
+\setupheadtext [\s!lt] [\v!content=Turinys]
+\setupheadtext [\s!lt] [\v!tables=Lentelės]
+\setupheadtext [\s!lt] [\v!figures=Iliustracijos]
+\setupheadtext [\s!lt] [\v!graphics=Graphics] % TODO what is the difference between the "graphics" and the "figures"?
+\setupheadtext [\s!lt] [\v!intermezzi=Intermezzos] % TODO what is the "intermezzi"?
+\setupheadtext [\s!lt] [\v!index=Rodyklė]
+\setupheadtext [\s!lt] [\v!abbreviations=Santrumpos]
+\setupheadtext [\s!lt] [\v!logos=Logos] % TODO where it is used?
+\setupheadtext [\s!lt] [\v!units=Units] % TODO where it is used?
+\setupheadtext [\s!lt] [pubs=Literatūra]
+
+\setuplabeltext [\s!lt] [\v!table={, lentelė.}]
+\setuplabeltext [\s!lt] [\v!figure={, pav.}]
+\setuplabeltext [\s!lt] [\v!intermezzo=Intermezzo ] % TODO
+\setuplabeltext [\s!lt] [\v!graphic=Graphic ] % TODO
+
+%\startlanguagespecifics[\s!lt]
+% \setupheads[\c!sectionstopper=.] %TODO how do I set dots after section numbers?
+%\stoplanguagespecifics
+
+\setuplabeltext [\s!lt] [\v!chapter=] % Chapter
+\setuplabeltext [\s!lt] [\v!section=]
+\setuplabeltext [\s!lt] [\v!subsection=]
+\setuplabeltext [\s!lt] [\v!subsubsection=]
+\setuplabeltext [\s!lt] [\v!subsubsubsection=]
+\setuplabeltext [\s!lt] [\v!appendix=] % Appendix
+\setuplabeltext [\s!lt] [\v!part={, dalis}]
+\setuplabeltext [\s!lt] [\v!line=line ] % TODO where it is used?
+\setuplabeltext [\s!lt] [\v!lines=lines ] % TODO where it is used?
+
+\setuplabeltext [\s!lt] [\v!january=sausio]
+\setuplabeltext [\s!lt] [\v!february=vasario]
+\setuplabeltext [\s!lt] [\v!march=kovo]
+\setuplabeltext [\s!lt] [\v!april=balandžio]
+\setuplabeltext [\s!lt] [\v!may=gegužės]
+\setuplabeltext [\s!lt] [\v!june=birželio]
+\setuplabeltext [\s!lt] [\v!july=liepos]
+\setuplabeltext [\s!lt] [\v!august=rugpjūčio]
+\setuplabeltext [\s!lt] [\v!september=rugsėjo]
+\setuplabeltext [\s!lt] [\v!october=spalio]
+\setuplabeltext [\s!lt] [\v!november=lapkričio]
+\setuplabeltext [\s!lt] [\v!december=gruodžio]
+
+\setuplabeltext [\s!lt] [\v!sunday=sekmadienis]
+\setuplabeltext [\s!lt] [\v!monday=pirmadienis]
+\setuplabeltext [\s!lt] [\v!tuesday=antradienis]
+\setuplabeltext [\s!lt] [\v!wednesday=trečiadienis]
+\setuplabeltext [\s!lt] [\v!thursday=ketvirtadienis]
+\setuplabeltext [\s!lt] [\v!friday=penktadienis]
+\setuplabeltext [\s!lt] [\v!saturday=šeštadienis]
+
+\setuplabeltext [\s!lt] [\v!page=puslapis ] % TODO how to test?
+\setuplabeltext [\s!lt] [\v!atpage=puslapyje ] % TODO how to test?
+\setuplabeltext [\s!lt] [\v!hencefore=kaip parodyta aukščiau] % TODO how to test?
+\setuplabeltext [\s!lt] [\v!hereafter=kaip parodyta žemiau] % TODO how to test?
+\setuplabeltext [\s!lt] [\v!see=žiūrėti ] % TODO how to test?
+
+\setuplabeltext [\s!lt] [\v!january :\s!mnem=jan] % I think, there is no abbreviated versions of months in lithuanian
+\setuplabeltext [\s!lt] [\v!february :\s!mnem=feb]
+\setuplabeltext [\s!lt] [\v!march :\s!mnem=mar]
+\setuplabeltext [\s!lt] [\v!april :\s!mnem=apr]
+\setuplabeltext [\s!lt] [\v!may :\s!mnem=may]
+\setuplabeltext [\s!lt] [\v!june :\s!mnem=jun]
+\setuplabeltext [\s!lt] [\v!july :\s!mnem=jul]
+\setuplabeltext [\s!lt] [\v!august :\s!mnem=aug]
+\setuplabeltext [\s!lt] [\v!september:\s!mnem=sep]
+\setuplabeltext [\s!lt] [\v!october :\s!mnem=oct]
+\setuplabeltext [\s!lt] [\v!november :\s!mnem=nov]
+\setuplabeltext [\s!lt] [\v!december :\s!mnem=dec]
+
+%D \ShowAllLanguageValues [\s!lt] [lithuanian] {Lithuanian} {doll} % What does this mean? Do I need it?
+
\protect \endinput
diff --git a/Master/texmf-dist/tex/context/base/lang-cjk.mkiv b/Master/texmf-dist/tex/context/base/lang-cjk.mkiv
index 138f6d2632a..5f736d4a165 100644
--- a/Master/texmf-dist/tex/context/base/lang-cjk.mkiv
+++ b/Master/texmf-dist/tex/context/base/lang-cjk.mkiv
@@ -133,13 +133,13 @@
\setuplabeltext [\s!ja] [\v!november=11]
\setuplabeltext [\s!ja] [\v!december=12]
-\setuplabeltext [\s!ja] [\v!sunday=月曜日]
-\setuplabeltext [\s!ja] [\v!monday=火曜日]
-\setuplabeltext [\s!ja] [\v!tuesday=水曜日]
-\setuplabeltext [\s!ja] [\v!wednesday=木曜日]
-\setuplabeltext [\s!ja] [\v!thursday=金曜日]
-\setuplabeltext [\s!ja] [\v!friday=土曜日]
-\setuplabeltext [\s!ja] [\v!saturday=日曜日]
+\setuplabeltext [\s!ja] [\v!monday=月曜日]
+\setuplabeltext [\s!ja] [\v!tuesday=火曜日]
+\setuplabeltext [\s!ja] [\v!wednesday=水曜日]
+\setuplabeltext [\s!ja] [\v!thursday=木曜日]
+\setuplabeltext [\s!ja] [\v!friday=金曜日]
+\setuplabeltext [\s!ja] [\v!saturday=土曜日]
+\setuplabeltext [\s!ja] [\v!sunday=日曜日]
%D Korean
diff --git a/Master/texmf-dist/tex/context/base/lang-ger.tex b/Master/texmf-dist/tex/context/base/lang-ger.tex
index b9717ce9af6..1ffbb33e68c 100644
--- a/Master/texmf-dist/tex/context/base/lang-ger.tex
+++ b/Master/texmf-dist/tex/context/base/lang-ger.tex
@@ -315,6 +315,15 @@
\setupheadtext [\s!nb] [\v!units=Enheter]
\setupheadtext [\s!nn] [\v!units=Einingar]
+\setupheadtext [\s!en] [pubs=References]
+\setupheadtext [\s!nl] [pubs=Literatuur]
+\setupheadtext [\s!de] [pubs=Literatur]
+%setupheadtext [\s!da] [pubs=?]
+%setupheadtext [\s!sv] [pubs=?]
+%setupheadtext [\s!af] [pubs=?]
+%setupheadtext [\s!nb] [pubs=?]
+%setupheadtext [\s!nn] [pubs=?]
+
\setuplabeltext [\s!en] [\v!table=Table ]
\setuplabeltext [\s!nl] [\v!table=Tabel ]
\setuplabeltext [\s!de] [\v!table=Tabelle ]
diff --git a/Master/texmf-dist/tex/context/base/lang-ini.lua b/Master/texmf-dist/tex/context/base/lang-ini.lua
index e188ad36cc9..239e5390c55 100644
--- a/Master/texmf-dist/tex/context/base/lang-ini.lua
+++ b/Master/texmf-dist/tex/context/base/lang-ini.lua
@@ -1,6 +1,6 @@
if not modules then modules = { } end modules ['lang-ini'] = {
version = 1.001,
- comment = "companion to lang-ini.tex",
+ comment = "companion to lang-ini.mkiv",
author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
copyright = "PRAGMA ADE / ConTeXt Development Team",
license = "see context related readme files"
@@ -9,11 +9,12 @@ if not modules then modules = { } end modules ['lang-ini'] = {
-- needs a cleanup (share locals)
local utf = unicode.utf8
-
-local find, lower, format, utfchar = string.find, string.lower, string.format, utf.char
+local utfbyte = utf.byte
+local format = string.format
local concat = table.concat
+local lpegmatch = lpeg.match
-if lang.use_new then lang.use_new(true) end
+local trace_patterns = false trackers.register("languages.patterns", function(v) trace_patterns = v end)
languages = languages or {}
languages.version = 1.009
@@ -31,18 +32,13 @@ local langdata = languages.hyphenation.data
--~ string =lang:hyphenation()
--~ lang:clear_hyphenation()
-
-- we can consider hiding data (faster access too)
---~ local function filter(filename,what)
---~ local data = io.loaddata(resolvers.find_file(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
+--
+-- the following lpeg can probably be improved (it was one of the first I made)
local leftbrace = lpeg.P("{")
local rightbrace = lpeg.P("}")
@@ -56,10 +52,10 @@ local command = lpeg.P("\\patterns")
local parser = (1-command)^0 * command * content
local function filterpatterns(filename)
- if find(filename,"%.rpl") then
+ if file.extname(filename) == "rpl" then
return io.loaddata(resolvers.find_file(filename)) or ""
else
- return parser:match(io.loaddata(resolvers.find_file(filename)) or "")
+ return lpegmatch(parser,io.loaddata(resolvers.find_file(filename)) or "")
end
end
@@ -67,10 +63,10 @@ local command = lpeg.P("\\hyphenation")
local parser = (1-command)^0 * command * content
local function filterexceptions(filename)
- if find(filename,"%.rhl") then
+ if file.extname(filename) == "rhl" then
return io.loaddata(resolvers.find_file(filename)) or ""
else
- return parser:match(io.loaddata(resolvers.find_file(filename)) or {}) -- "" ?
+ return lpegmatch(parser,io.loaddata(resolvers.find_file(filename)) or {}) -- "" ?
end
end
@@ -95,14 +91,22 @@ function languages.hyphenation.number(tag)
return (d and d:id()) or 0
end
+lang.exceptions = lang.hyphenation
+
local function loadthem(tag, filename, filter, target)
statistics.starttiming(languages)
local data = record(tag)
- filename = (filename and filename ~= "" and resolvers.find_file(filename)) or ""
- local ok = filename ~= ""
+ local fullname = (filename and filename ~= "" and resolvers.find_file(filename)) or ""
+ local ok = fullname ~= ""
if ok then
- lang[target](data,filterpatterns(filename))
+ if trace_patterns then
+ logs.report("languages","filtering %s for language '%s' from '%s'",target,tag,fullname)
+ end
+ lang[target](data,filterpatterns(fullname))
else
+ if trace_patterns then
+ logs.report("languages","no %s for language '%s' in '%s'",target,tag,filename or "?")
+ end
lang[target](data,"")
end
langdata[tag] = data
@@ -115,7 +119,7 @@ function languages.hyphenation.loadpatterns(tag, patterns)
end
function languages.hyphenation.loadexceptions(tag, exceptions)
- return loadthem(tag, patterns, filterexceptions, "hyphenation")
+ return loadthem(tag, patterns, filterexceptions, "exceptions")
end
function languages.hyphenation.exceptions(tag, ...)
@@ -142,12 +146,24 @@ function languages.hyphenation.n()
return table.count(langdata)
end
+languages.registered = languages.registered or { }
+languages.associated = languages.associated or { }
+languages.numbers = languages.numbers or { }
+
+storage.register("languages/registered",languages.registered,"languages.registered")
+storage.register("languages/associated",languages.associated,"languages.associated")
+
+local numbers = languages.numbers
+local registered = languages.registered
+local associated = languages.associated
+
-- we can speed this one up with locals if needed
local function tolang(what)
local kind = type(what)
if kind == "number" then
- return langdata[languages.numbers[what]]
+ local w = what >= 0 and what <= 0x7FFF and numbers[what]
+ return (w and langdata[w]) or 0
elseif kind == "string" then
return langdata[what]
else
@@ -155,6 +171,20 @@ local function tolang(what)
end
end
+function languages.setup(what,settings)
+ what = languages.tolang(what or tex.language)
+ local lefthyphen = settings.lefthyphen
+ local righthyphen = settings.righthyphen
+ lefthyphen = lefthyphen ~= "" and lefthyphen or nil
+ righthyphen = righthyphen ~= "" and righthyphen or nil
+ lefthyphen = lefthyphen and utfbyte(lefthyphen) or 0
+ righthyphen = righthyphen and utfbyte(righthyphen) or 0
+ lang.posthyphenchar(what,lefthyphen)
+ lang.prehyphenchar (what,righthyphen)
+ lang.postexhyphenchar(what,lefthyphen)
+ lang.preexhyphenchar (what,righthyphen)
+end
+
function languages.prehyphenchar(what)
return lang.prehyphenchar(tolang(what))
end
@@ -164,16 +194,9 @@ end
languages.tolang = tolang
-languages.registered = languages.registered or { }
-languages.associated = languages.associated or { }
-languages.numbers = languages.numbers or { }
-
-storage.register("languages/registered",languages.registered,"languages.registered")
-storage.register("languages/associated",languages.associated,"languages.associated")
-
function languages.register(tag,parent,patterns,exceptions)
parent = parent or tag
- languages.registered[tag] = {
+ registered[tag] = {
parent = parent,
patterns = patterns or format("lang-%s.pat",parent),
exceptions = exceptions or format("lang-%s.hyp",parent),
@@ -183,14 +206,14 @@ function languages.register(tag,parent,patterns,exceptions)
end
function languages.associate(tag,script,language)
- languages.associated[tag] = { script, language }
+ associated[tag] = { script, language }
end
function languages.association(tag)
if type(tag) == "number" then
- tag = languages.numbers[tag]
+ tag = numbers[tag]
end
- local lat = tag and languages.associated[tag]
+ local lat = tag and associated[tag]
if lat then
return lat[1], lat[2]
else
@@ -199,7 +222,7 @@ function languages.association(tag)
end
function languages.loadable(tag)
- local l = languages.registered[tag]
+ local l = registered[tag]
if l and l.patterns and resolvers.find_file(patterns) then
return true
else
@@ -213,8 +236,8 @@ 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
+ local l = registered[tag]
+ if l and l ~= "" then
if not l.loaded then
local tag = l.parent
local number = languages.hyphenation.number(tag)
@@ -225,9 +248,12 @@ function languages.enable(tags)
l.number = languages.hyphenation.define(tag)
languages.hyphenation.loadpatterns(tag,l.patterns)
languages.hyphenation.loadexceptions(tag,l.exceptions)
- languages.numbers[l.number] = tag
+ numbers[l.number] = tag
end
l.loaded = true
+ if trace_patterns then
+ logs.report("languages","assigning number %s",l.number)
+ end
end
if l.number > 0 then
return l.number
@@ -261,9 +287,11 @@ 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]
+ local result = { }
+ local sorted = table.sortedkeys(registered)
+ for i=1,#sorted do
+ local tag = sorted[i]
+ local l = registered[tag]
if l.loaded then
local p = (l.patterns and "pat") or '-'
local e = (l.exceptions and "exc") or '-'
@@ -273,179 +301,6 @@ function languages.logger.report()
return (#result > 0 and 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 = resolvers.find_file(filename,'other text file') or ""
- if filename ~= "" then
- statistics.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
- statistics.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[lower(str)])
- 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 chardata = characters.data
-
- local function mark_words(head,found) -- can be optimized
- 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
- local components = current.components
- if components then
- start = start or current
- n = n + 1
- for g in bynode(components) do
- str = str .. utfchar(g.char)
- end
- else
- local code = current.char
- if chardata[code].uccode or chardata[code].lccode then
- start = start or current
- n = n + 1
- str = str .. utfchar(code)
- elseif start then
- action()
- end
- end
- elseif id == disc then
- if n > 0 then n = n + 1 end
- -- 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
-
- local lw = languages.words
-
- languages.words.methods[1] = function(head, attribute, yes, nop)
- local set = node.set_attribute
- local unset = node.unset_attribute
- local right, wrong = false, false
- if yes then right = function(n) set(n,attribute,yes) end end
- if nop then wrong = function(n) set(n,attribute,nop) 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 < lw.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 color = attributes.private('color')
-
- function languages.words.check(head)
- if lw.enable and head.next then
- 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[chars.plugins+1] = {
---~ name = "language",
---~ namespace = languagehacks,
---~ processor = languagehacks.process
---~ }
-
-- must happen at the tex end
languages.associate('en','latn','eng')
@@ -462,7 +317,5 @@ statistics.register("loaded patterns", function()
end)
statistics.register("language load time", function()
- if statistics.elapsedindeed(languages) then
- return format("%s seconds, n=%s", statistics.elapsedtime(languages), languages.hyphenation.n())
- end
+ return statistics.elapsedseconds(languages, format(", n=%s",languages.hyphenation.n()))
end)
diff --git a/Master/texmf-dist/tex/context/base/lang-ini.mkii b/Master/texmf-dist/tex/context/base/lang-ini.mkii
index a55748a78fb..91ac5984767 100644
--- a/Master/texmf-dist/tex/context/base/lang-ini.mkii
+++ b/Master/texmf-dist/tex/context/base/lang-ini.mkii
@@ -397,33 +397,39 @@
% \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}%
-\edef\synchronizepatterns{\noexpand\dosetnormallanguage{\languageparameter\s!patterns}}%
- \donefalse
- \synchronizepatterns
- \ifdone\else
- \def\synchronizepatterns{\dosetnormallanguage\currentlanguage}%
+ \ifnum\normallanguage<\zerocount
+ % we've blocked hyphenation (e.g. verbatim)
+ \else
+ \edef\synchronizepatterns{\noexpand\dosetnormallanguage{\languageparameter\s!patterns}}%
+ \donefalse
\synchronizepatterns
\ifdone\else
- \ifx\currentdefaultlanguage\empty\else
-% \@EA\def\@EA\synchronizepatterns\@EA{\@EA\dosetnormallanguage
-% \csname\??la\currentdefaultlanguage\s!patterns\endcsname}%
-\edef\synchronizepatterns{\noexpand\dosetnormallanguage{\specificlanguageparameter\currentdefaultlanguage\s!patterns}}%
- \synchronizepatterns
- \ifdone\else
- \dosetnormallanguage\currentdefaultlanguage
+ \def\synchronizepatterns{\dosetnormallanguage\currentlanguage}%
+ \synchronizepatterns
+ \ifdone\else
+ \ifx\currentdefaultlanguage\empty\else
+ \edef\synchronizepatterns{\noexpand\dosetnormallanguage{\specificlanguageparameter\currentdefaultlanguage\s!patterns}}%
\synchronizepatterns
+ \ifdone\else
+ \dosetnormallanguage\currentdefaultlanguage
+ \synchronizepatterns
+ \fi
\fi
\fi
\fi
\fi}
+\normallanguage\zerocount
+
\def\dosetnormallanguage#1% #1 == \cs (no longer)
- {\dodosetnormallanguage{:\currentencoding:\currentmapping:}{#1}{%
- \dodosetnormallanguage{:\currentencoding:\s!default :}{#1}{%
- \dodosetnormallanguage{:\s!default :\currentmapping:}{#1}{%
- \dodosetnormallanguage{:\s!default :\s!default :}{#1}\empty}}}}
+ {\ifnum\normallanguage<\zerocount
+ % we've blocked hyphenation (e.g. verbatim)
+ \else
+ \dodosetnormallanguage{:\currentencoding:\currentmapping:}{#1}{%
+ \dodosetnormallanguage{:\currentencoding:\s!default :}{#1}{%
+ \dodosetnormallanguage{:\s!default :\currentmapping:}{#1}{%
+ \dodosetnormallanguage{:\s!default :\s!default :}{#1}\empty}}}%
+ \fi}
\def\dodosetnormallanguage#1#2%
{\ifcsname\??la\??la#1#2\endcsname
diff --git a/Master/texmf-dist/tex/context/base/lang-ini.mkiv b/Master/texmf-dist/tex/context/base/lang-ini.mkiv
index f88281a609f..45bb71b85d9 100644
--- a/Master/texmf-dist/tex/context/base/lang-ini.mkiv
+++ b/Master/texmf-dist/tex/context/base/lang-ini.mkiv
@@ -73,7 +73,7 @@
\let\currentlanguage \empty
\let\currentmainlanguage\empty
-\def\setupcurrentlanguage[#1]{\setcurrentlanguage\currentmainlanguage{#1}}
+\unexpanded\def\setupcurrentlanguage[#1]{\setcurrentlanguage\currentmainlanguage{#1}}
\def\setcurrentlanguage#1#2% sets modes: **id (currentmain) *id (current)
{\edef\xaskedlanguage{#1}% otherwise clash with \askedlanguage
@@ -199,7 +199,7 @@
%D
%D Beware, this command can only be used when a language is installed.
-\unprotected \def\setuplanguage
+\unexpanded\def\setuplanguage
{\dodoubleempty\dosetuplanguage}
\def\dosetuplanguage[#1][#2]% handy patch for testing
@@ -241,8 +241,8 @@
\setuplanguage
[\s!default]
[\c!compoundhyphen=\compoundhyphen,
- \c!leftcompoundhyphen=\compoundhyphen,
- \c!rightcompoundhyphen=]
+ \c!rightcompoundhyphen=\compoundhyphen,
+ \c!leftcompoundhyphen=]
%D The values \type {leftsentence} and \type
%D {rightsentence} can be (and are) used to implement
@@ -303,7 +303,7 @@
\def\dosetnormallanguage#1#2% current default
{\edef\askedlanguagepatterns{\specificlanguageparameter{#1}\s!patterns}%
- \normallanguage=\ctxlua{tex.sprint(languages.enable({"\askedlanguagepatterns","#1","\askedlanguagepatterns","#2"}))}%
+ \normallanguage=\ctxlua{tex.sprint(languages.enable({"\askedlanguagepatterns","#1","#2"}))}%
\ifproductionrun
\setxvalue{\??la\??la#1#2}{\number\normallanguage}%
\fi}
@@ -317,11 +317,13 @@
\newtoks \everylanguage
-\def\sethyphenationvariables
- {\lefthyphenmin 0\languageparameter\s!lefthyphenmin \relax
- \righthyphenmin0\languageparameter\s!righthyphenmin\relax
- \lefthyphenmin \numexpr\lefthyphenmin +\hyphenminoffset\relax
- \righthyphenmin\numexpr\righthyphenmin+\hyphenminoffset\relax}
+\def\sethyphenationvariables % as we can have cloning we need to set it each time, unless we move all to lua
+ {\ctxlua{languages.setup(tex.language, {
+ lefthyphen = "\languageparameter\c!lefthyphen",
+ righthyphen = "\languageparameter\c!righthyphen",
+ } )}%
+ \lefthyphenmin \numexpr0\languageparameter\s!lefthyphenmin +\hyphenminoffset\relax
+ \righthyphenmin\numexpr0\languageparameter\s!righthyphenmin+\hyphenminoffset\relax}
\def\docomplexlanguage% assumes that \currentlanguage is set
{\edef\currentdefaultlanguage{\defaultlanguage\currentlanguage}%
@@ -332,6 +334,11 @@
% will be definable and move to core-spa !
\doifelse{\languageparameter\c!spacing}\v!broad\nonfrenchspacing\frenchspacing}
+% \mainlanguage[nl] \setuplanguage[nl][lefthyphen=,righthyphen=?]
+%
+% \dorecurse{100}{dit is toch wel een heel\normalhyphendiscretionary lang\normalhyphendiscretionary woord \recurselevel\ }
+% \dorecurse{100}{dit is toch wel een heellangwoord \recurselevel\ }
+
% The following may be a solution for the fact that one cannot
% change catcodes of characters like : and ; inside an environment.
@@ -546,33 +553,6 @@
\let\preloadallpatterns\relax % just for old times sake
\let\preloadlanguages \relax % just for old times sake
-%D This might bexcome a seperate file:
-
-% mkiv only -- todo: internationalize command names
-
-% \loadspellchecklist[en][words-en.txt]
-% \loadspellchecklist[us][words-en.txt]
-% \loadspellchecklist[nl][words-nl.txt]
-% \setupspellchecking[state=start]
-
-\def\loadspellchecklist
- {\dodoubleempty\doloadspellchecklist}
-
-\def\doloadspellchecklist[#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
\exhyphenchar=45 % to permit breaking at explicit hyphens
diff --git a/Master/texmf-dist/tex/context/base/lang-ita.tex b/Master/texmf-dist/tex/context/base/lang-ita.tex
index c714be7758a..03efb0614fe 100644
--- a/Master/texmf-dist/tex/context/base/lang-ita.tex
+++ b/Master/texmf-dist/tex/context/base/lang-ita.tex
@@ -186,8 +186,8 @@
\setupheadtext [\s!ro] [\v!graphics=Grafice]
\setupheadtext [\s!fr] [\v!intermezzi=Interm\`edes]
-\setupheadtext [\s!es] [\v!intermezzi=intermedios]
-\setupheadtext [\s!ca] [\v!intermezzi=intermedis]
+\setupheadtext [\s!es] [\v!intermezzi=Intermedios]
+\setupheadtext [\s!ca] [\v!intermezzi=Intermedis]
\setupheadtext [\s!it] [\v!intermezzi=Intermezzi]
\setupheadtext [\s!la] [\v!intermezzi=Intermissa]
\setupheadtext [\s!pt] [\v!intermezzi=Interm\'edios]
@@ -202,7 +202,7 @@
\setupheadtext [\s!ro] [\v!index=Index]
\setupheadtext [\s!fr] [\v!abbreviations=Abr\'eviations]
-\setupheadtext [\s!es] [\v!abbreviations=Abreviaciones]
+\setupheadtext [\s!es] [\v!abbreviations=Abreviaturas]
\setupheadtext [\s!ca] [\v!abbreviations=Abreviacions]
\setupheadtext [\s!it] [\v!abbreviations=Abbreviazioni]
\setupheadtext [\s!la] [\v!abbreviations=Notae]
@@ -225,6 +225,14 @@
\setupheadtext [\s!pt] [\v!units=Unidades]
\setupheadtext [\s!ro] [\v!units=Unit\u{a}\c{t}i]
+\setupheadtext [\s!fr] [pubs=Bibliographie]
+\setupheadtext [\s!es] [pubs=Bibliograf\'\ia]
+\setupheadtext [\s!ca] [pubs=Referències]
+\setupheadtext [\s!it] [pubs=Bibliografia]
+%setupheadtext [\s!la] [pubs=?]
+%setupheadtext [\s!pt] [pubs=?]
+%setupheadtext [\s!ro] [pubs=?]
+
\setuplabeltext [\s!fr] [\v!table=Tableau ]
\setuplabeltext [\s!es] [\v!table=Tabla ]
\setuplabeltext [\s!ca] [\v!table=Taula ]
@@ -242,7 +250,7 @@
\setuplabeltext [\s!ro] [\v!figure=Figura ]
\setuplabeltext [\s!fr] [\v!intermezzo=Interm\`ede ]
-\setuplabeltext [\s!es] [\v!intermezzo=intermedio ]
+\setuplabeltext [\s!es] [\v!intermezzo=Intermedio ]
\setuplabeltext [\s!ca] [\v!intermezzo=Intermedi ]
\setuplabeltext [\s!it] [\v!intermezzo=Intermezzo ]
\setuplabeltext [\s!la] [\v!intermezzo=Intermissum ]
@@ -257,49 +265,49 @@
\setuplabeltext [\s!pt] [\v!graphic=Gr\'afico ]
\setuplabeltext [\s!ro] [\v!graphic=Graficul ]
-\setuplabeltext [\s!fr] [\v!chapter=]
-\setuplabeltext [\s!es] [\v!chapter=Cap\'\itulo]
-\setuplabeltext [\s!ca] [\v!chapter=Cap\'\itol]
+\setuplabeltext [\s!fr] [\v!chapter=] % Chapitre
+\setuplabeltext [\s!es] [\v!chapter=] % Cap\'\i tulo
+\setuplabeltext [\s!ca] [\v!chapter=] % Cap\'\i tol
\setuplabeltext [\s!it] [\v!chapter=]
\setuplabeltext [\s!la] [\v!chapter=]
\setuplabeltext [\s!pt] [\v!chapter=]
\setuplabeltext [\s!ro] [\v!chapter=]
-\setuplabeltext [\s!fr] [\v!section=]
-\setuplabeltext [\s!es] [\v!section=Secci\'on]
-\setuplabeltext [\s!ca] [\v!section=Secci\'o]
+\setuplabeltext [\s!fr] [\v!section=] % Section
+\setuplabeltext [\s!es] [\v!section=] % Secci\'on
+\setuplabeltext [\s!ca] [\v!section=] % Secci\'o
\setuplabeltext [\s!it] [\v!section=]
\setuplabeltext [\s!la] [\v!section=]
\setuplabeltext [\s!pt] [\v!section=]
\setuplabeltext [\s!ro] [\v!section=]
-\setuplabeltext [\s!fr] [\v!subsection=]
-\setuplabeltext [\s!es] [\v!subsection=Subsecci\'on]
-\setuplabeltext [\s!ca] [\v!subsection=Subsecci\'o]
+\setuplabeltext [\s!fr] [\v!subsection=] % Soussection
+\setuplabeltext [\s!es] [\v!subsection=] % Subsecci\'on
+\setuplabeltext [\s!ca] [\v!subsection=] % Subsecci\'o
\setuplabeltext [\s!it] [\v!subsection=]
\setuplabeltext [\s!la] [\v!subsection=]
\setuplabeltext [\s!pt] [\v!subsection=]
\setuplabeltext [\s!ro] [\v!subsection=]
-\setuplabeltext [\s!fr] [\v!subsubsection=]
-\setuplabeltext [\s!es] [\v!subsubsection=Subsubsecci\'on]
-\setuplabeltext [\s!ca] [\v!subsubsection=Subsubsecci\'o]
+\setuplabeltext [\s!fr] [\v!subsubsection=] % Soussoussection
+\setuplabeltext [\s!es] [\v!subsubsection=] % Subsubsecci\'on
+\setuplabeltext [\s!ca] [\v!subsubsection=] % Subsubsecci\'o
\setuplabeltext [\s!it] [\v!subsubsection=]
\setuplabeltext [\s!la] [\v!subsubsection=]
\setuplabeltext [\s!pt] [\v!subsubsection=]
\setuplabeltext [\s!ro] [\v!subsubsection=]
-\setuplabeltext [\s!fr] [\v!subsubsubsection=]
-\setuplabeltext [\s!es] [\v!subsubsubsection=Subsubsubsecci\'on]
-\setuplabeltext [\s!ca] [\v!subsubsubsection=Subsubsubsecci\'o]
+\setuplabeltext [\s!fr] [\v!subsubsubsection=] % Soussoussoussection
+\setuplabeltext [\s!es] [\v!subsubsubsection=] % Subsubsubsecci\'on
+\setuplabeltext [\s!ca] [\v!subsubsubsection=] % Subsubsubsecci\'o
\setuplabeltext [\s!it] [\v!subsubsubsection=]
\setuplabeltext [\s!la] [\v!subsubsubsection=]
\setuplabeltext [\s!pt] [\v!subsubsubsection=]
\setuplabeltext [\s!ro] [\v!subsubsubsection=]
-\setuplabeltext [\s!fr] [\v!appendix=]
-\setuplabeltext [\s!es] [\v!appendix=Ap\'endice]
-\setuplabeltext [\s!ca] [\v!appendix=Ap\`endix]
+\setuplabeltext [\s!fr] [\v!appendix=] % Annexe
+\setuplabeltext [\s!es] [\v!appendix=] % Ap\'endice
+\setuplabeltext [\s!ca] [\v!appendix=] % Ap\`endix
\setuplabeltext [\s!it] [\v!appendix=]
\setuplabeltext [\s!la] [\v!appendix=]
\setuplabeltext [\s!pt] [\v!appendix=]
diff --git a/Master/texmf-dist/tex/context/base/lang-lab.mkiv b/Master/texmf-dist/tex/context/base/lang-lab.mkiv
index 61884ab50bd..42f2db8ff45 100644
--- a/Master/texmf-dist/tex/context/base/lang-lab.mkiv
+++ b/Master/texmf-dist/tex/context/base/lang-lab.mkiv
@@ -46,8 +46,9 @@
\let\currenttextprefixtag \s!unknown
\let\currenttextprefixclass\s!unknown
-\def\setupheadtext {\setfalse\protecttextprefixes\let\currenttextprefixclass\??mh\dodoubleempty\dosetupsometextprefix}
-\def\setuplabeltext{\setfalse\protecttextprefixes\let\currenttextprefixclass\??ml\dodoubleempty\dosetupsometextprefix}
+\unexpanded\def\setupheadtext {\setfalse\protecttextprefixes\let\currenttextprefixclass\??mh\dodoubleempty\dosetupsometextprefix}
+\unexpanded\def\setuplabeltext {\setfalse\protecttextprefixes\let\currenttextprefixclass\??ml\dodoubleempty\dosetupsometextprefix}
+\unexpanded\def\setupmathlabeltext{\setfalse\protecttextprefixes\let\currenttextprefixclass\??mm\dodoubleempty\dosetupsometextprefix}
\def\dosetupsometextprefix[#1][#2]%
{\ifsecondargument
@@ -124,15 +125,17 @@
%D
%D The latter one has an upcased alternative \type{\LABELTEXT}.
-\def\labellanguage{\reallanguagetag{\defaultlanguage\currentmainlanguage}}
-\def\headlanguage {\reallanguagetag{\defaultlanguage\currentmainlanguage}}
+\def\labellanguage {\reallanguagetag{\defaultlanguage\currentmainlanguage}}
+\def\headlanguage {\reallanguagetag{\defaultlanguage\currentmainlanguage}}
+\def\mathlabellanguage{\reallanguagetag{\defaultlanguage\currentmainlanguage}}
\appendtoks \let\labellanguage\currentlanguage \to \everycurrentdate
\def\dummytextprefix{\empty\empty}
-\def\dogetupsomelabeltext{\dodogetupsomelabeltext\labellanguage} % second argument is textlabel
-\def\dogetupsomeheadtext {\dodogetupsomeheadtext \headlanguage } % second argument is headlabel
+\def\dogetupsomelabeltext {\dodogetupsomelabeltext \labellanguage } % second argument is textlabel
+\def\dogetupsomeheadtext {\dodogetupsomeheadtext \headlanguage } % second argument is headlabel
+\def\dogetupsomemathlabeltext{\dodogetupsomemathlabeltext\mathlabellanguage } % second argument is headlabel
\def\dodogetupsomelabeltext#1#2%
{\ifcsname\??ml#1#2\endcsname
@@ -160,28 +163,45 @@
\let\thetextprefix\dummytextprefix
\fi\fi\fi\fi}
+\def\dodogetupsomemathlabeltext#1#2%
+ {\ifcsname\??mm#1#2\endcsname
+ \expandafter\let\expandafter\thetextprefix\csname\??mm#1#2\endcsname
+ \else\ifcsname\??la\mathlabellanguage\s!default\endcsname
+ \expandafter\dodogetupsomemathlabeltext\csname\??la\mathlabellanguage\s!default\endcsname{#2}%
+ \else\ifcsname\??mm#2\endcsname
+ \expandafter\let\expandafter\thetextprefix\csname\??mm#2\endcsname
+ \else\ifcsname\??mm\s!en#2\endcsname
+ \expandafter\let\expandafter\thetextprefix\csname\??mm\s!en#2\endcsname
+ \else
+ \let\thetextprefix\dummytextprefix
+ \fi\fi\fi\fi}
+
% The WORD variants are a bit inefficient when #1/#2 are empty but they are
% seldom used (one can better set the style).
-\let\flushleftlabeltext \firstoftwoarguments
-\let\flushrightlabeltext\secondoftwoarguments
-
-\def\flushleftlabelWORD #1#2{\WORD{#1}}
-\def\flushrightlabelWORD#1#2{\WORD{#2}}
-
-\def\flushbothlabeltexts#1#2#3{#1#3#2}
-\def\flushbothlabelTEXTS#1#2#3{\WORD{#1}#3\WORD{#2}}
-
-\unexpanded\def\headtext #1{\dogetupsomeheadtext {#1}\expandafter\flushleftlabeltext \thetextprefix}
-\unexpanded\def\leftlabeltext #1{\dogetupsomelabeltext{#1}\expandafter\flushleftlabeltext \thetextprefix}
-\unexpanded\def\rightlabeltext#1{\dogetupsomelabeltext{#1}\expandafter\flushrightlabeltext\thetextprefix}
-\unexpanded\def\LEFTLABELTEXT #1{\dogetupsomelabeltext{#1}\expandafter\flushleftlabelWORD \thetextprefix}
-\unexpanded\def\RIGHTLABELTEXT#1{\dogetupsomelabeltext{#1}\expandafter\flushrightlabelWORD\thetextprefix}
-\unexpanded\def\labeltexts #1{\dogetupsomelabeltext{#1}\expandafter\flushbothlabeltexts\thetextprefix} % #2
-\unexpanded\def\LABELTEXTS #1{\dogetupsomelabeltext{#1}\expandafter\flushbothlabelTEXTS\thetextprefix} % #2
-
-\let\labeltext\leftlabeltext
-\let\LABELTEXT\LEFTLABELTEXT
+\let\flushleftlabeltext \firstoftwoarguments
+\let\flushrightlabeltext \secondoftwoarguments
+\let\flushleftmathlabeltext \firstoftwoarguments
+\let\flushrightmathlabeltext\secondoftwoarguments
+
+\def\flushleftlabelWORD #1#2{\WORD{#1}}
+\def\flushrightlabelWORD #1#2{\WORD{#2}}
+\def\flushbothlabeltexts #1#2#3{#1#3#2}
+\def\flushbothlabelTEXTS #1#2#3{\WORD{#1}#3\WORD{#2}}
+
+\unexpanded\def\headtext #1{\dogetupsomeheadtext {#1}\expandafter\flushleftlabeltext \thetextprefix}
+\unexpanded\def\leftlabeltext #1{\dogetupsomelabeltext {#1}\expandafter\flushleftlabeltext \thetextprefix}
+\unexpanded\def\rightlabeltext #1{\dogetupsomelabeltext {#1}\expandafter\flushrightmathlabeltext\thetextprefix}
+\unexpanded\def\LEFTLABELTEXT #1{\dogetupsomelabeltext {#1}\expandafter\flushleftlabelWORD \thetextprefix}
+\unexpanded\def\RIGHTLABELTEXT #1{\dogetupsomelabeltext {#1}\expandafter\flushrightlabelWORD \thetextprefix}
+\unexpanded\def\labeltexts #1{\dogetupsomelabeltext {#1}\expandafter\flushbothlabeltexts \thetextprefix} % #2
+\unexpanded\def\LABELTEXTS #1{\dogetupsomelabeltext {#1}\expandafter\flushbothlabelTEXTS \thetextprefix} % #2
+\unexpanded\def\leftmathlabeltext #1{\dogetupsomemathlabeltext{#1}\expandafter\flushleftmathlabeltext \thetextprefix}
+\unexpanded\def\rightmathlabeltext#1{\dogetupsomemathlabeltext{#1}\expandafter\flushrightlabeltext \thetextprefix}
+
+\let\labeltext \leftlabeltext
+\let\LABELTEXT \LEFTLABELTEXT
+\let\mathlabeltext\leftmathlabeltext
\ifx\simplifiedcommands\undefined \newtoks\simplifiedcommands \fi
@@ -194,6 +214,7 @@
\let \LABELTEXT \firstofoneargument
\let \LEFTLABELTEXT \firstofoneargument
\let \RIGHTLABELTEXT \firstofoneargument
+ \let \mathlabeltext \firstofoneargument
\to \simplifiedcommands
%D \macros
@@ -203,8 +224,9 @@
%D head and label texts without replacing predefined ones.
%D These are internal macros.
-\def\presetheadtext {\settrue\protecttextprefixes\let\currenttextprefixclass\??mh\dodoubleempty\dosetupsometextprefix}
-\def\presetlabeltext{\settrue\protecttextprefixes\let\currenttextprefixclass\??ml\dodoubleempty\dosetupsometextprefix}
+\def\presetheadtext {\settrue\protecttextprefixes\let\currenttextprefixclass\??mh\dodoubleempty\dosetupsometextprefix}
+\def\presetlabeltext {\settrue\protecttextprefixes\let\currenttextprefixclass\??ml\dodoubleempty\dosetupsometextprefix}
+\def\presetmathlabeltext{\settrue\protecttextprefixes\let\currenttextprefixclass\??mm\dodoubleempty\dosetupsometextprefix}
%D \macros
%D {translate}
diff --git a/Master/texmf-dist/tex/context/base/lang-mis.mkiv b/Master/texmf-dist/tex/context/base/lang-mis.mkiv
index eb7bb1a04dc..0df45877b0d 100644
--- a/Master/texmf-dist/tex/context/base/lang-mis.mkiv
+++ b/Master/texmf-dist/tex/context/base/lang-mis.mkiv
@@ -363,7 +363,7 @@
\unexpanded\def\doindirectdiscretionary#1%
{\prewordbreak\discretionary{\hbox{#1}}{}{\hbox{#1}}\allowbreak\postwordbreak}
-\def\definetextmodediscretionary #1
+\unexpanded\def\definetextmodediscretionary #1
{\setvalue{\@tmd@action@\detokenize{#1}}}
% \start \hsize 1mm
@@ -377,6 +377,12 @@
% test|^|test
% \stop
+% x\discretionary{1}{2}{3}xxxxxxx
+% xxxxxxx\discretionary{1}{2}{3}x
+%
+% xxx3xxx
+% xxx1<newline>2xxx
+
\def\hyphenliketextmodediscretionary#1#2%
{\ifconditional\spaceafterdiscretionary
\prewordbreak\hbox{#1}\relax
diff --git a/Master/texmf-dist/tex/context/base/lang-sla.tex b/Master/texmf-dist/tex/context/base/lang-sla.tex
index cd3c75b61c5..2c645af5a6f 100644
--- a/Master/texmf-dist/tex/context/base/lang-sla.tex
+++ b/Master/texmf-dist/tex/context/base/lang-sla.tex
@@ -82,7 +82,7 @@
\installlanguage
[\s!cs]
- [\c!spacing=\v!packed,
+ [\c!spacing=\v!packed,
\c!leftsentence=\thickglue--\thickglue\penalty-20\relax, % hh, \relax added
\c!rightsentence=\thickglue--\thickglue\penalty-20\relax,
\c!leftsubsentence=~---~\penalty-20\relax,
@@ -193,19 +193,19 @@
\setupheadtext [\s!sl] [\v!content=Kazalo]
\setupheadtext [\s!pl] [\v!tables=Tabele]
-\setupheadtext [\s!cs] [\v!tables=Tabulek]
+\setupheadtext [\s!cs] [\v!tables=Tabulky]
\setupheadtext [\s!sk] [\v!tables=Tabuliek]
\setupheadtext [\s!hr] [\v!tables=Tablice]
\setupheadtext [\s!sl] [\v!tables=Tabele]
\setupheadtext [\s!pl] [\v!figures=Ilustracje]
-\setupheadtext [\s!cs] [\v!figures=Obr\aacute zk\uring]
+\setupheadtext [\s!cs] [\v!figures=Obr\aacute zky]
\setupheadtext [\s!sk] [\v!figures=Obr\aacute zkov]
\setupheadtext [\s!hr] [\v!figures=Slike]
\setupheadtext [\s!sl] [\v!figures=Slike]
\setupheadtext [\s!pl] [\v!graphics=Grafika]
-\setupheadtext [\s!cs] [\v!graphics=Graf]
+\setupheadtext [\s!cs] [\v!graphics=Grafy]
\setupheadtext [\s!sk] [\v!graphics=Graf]
\setupheadtext [\s!hr] [\v!graphics=Slike]
\setupheadtext [\s!sl] [\v!graphics=Slike]
@@ -240,6 +240,12 @@
\setupheadtext [\s!hr] [\v!units=Jednostki]
\setupheadtext [\s!sl] [\v!units=Enote]
+%setupheadtext [\s!pl] [pubs=?]
+\setupheadtext [\s!cs] [pubs=Literatura]
+%setupheadtext [\s!sk] [pubs=?]
+%setupheadtext [\s!hr] [pubs=?]
+\setupheadtext [\s!sl] [pubs=Literatura]
+
\setuplabeltext [\s!pl] [\v!table=Tabela ]
\setuplabeltext [\s!cs] [\v!table=Tabulka ]
\setuplabeltext [\s!sk] [\v!table=Tabu\lcaron ka ]
diff --git a/Master/texmf-dist/tex/context/base/lang-url.lua b/Master/texmf-dist/tex/context/base/lang-url.lua
index 3d93a046a21..b0a71ec679e 100644
--- a/Master/texmf-dist/tex/context/base/lang-url.lua
+++ b/Master/texmf-dist/tex/context/base/lang-url.lua
@@ -1,6 +1,6 @@
if not modules then modules = { } end modules ['lang-url'] = {
version = 1.001,
- comment = "companion to lang-url.tex",
+ comment = "companion to lang-url.mkiv",
author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
copyright = "PRAGMA ADE / ConTeXt Development Team",
license = "see context related readme files"
@@ -11,7 +11,7 @@ local utf = unicode.utf8
local utfcharacters, utfvalues = string.utfcharacters, string.utfvalues
local utfbyte, utfgsub = utf.byte, utf.gsub
-local ctxcatcodes = tex.ctxcatcodes
+local ctxcatcodes, texsprint = tex.ctxcatcodes, tex.sprint
commands = commands or { }
@@ -22,80 +22,80 @@ 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
+commands.hyphenatedurl = commands.hyphenatedurl or { }
+
+local hyphenatedurl = commands.hyphenatedurl
+
+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
+}
- function commands.hyphenatedurl.convert(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)
- str = utfgsub(str,"(.)",function(s)
- n = n + 1
+hyphenatedurl.lefthyphenmin = 2
+hyphenatedurl.righthyphenmin = 3
+hyphenatedurl.discretionary = nil
+
+local chars = hyphenatedurl.characters
+
+function hyphenatedurl.action(str, left, right, disc)
+ local n = 0
+ local b = math.max( left or hyphenatedurl.lefthyphenmin, 2)
+ local e = math.min(#str-(right or hyphenatedurl.righthyphenmin)+2,#str)
+ local d = disc or hyphenatedurl.discretionary
+ for s in utfcharacters(str) do
+ n = n + 1
+ if s == d then
+ texsprint(ctxcatcodes,"\\d{",utfbyte(s),"}")
+ else
local c = chars[s]
if not c or n<=b or n>=e then
- return "\\n{" .. utfbyte(s) .. "}"
+ texsprint(ctxcatcodes,"\\n{",utfbyte(s),"}")
elseif c == 1 then
- return "\\b{" .. utfbyte(s) .. "}"
+ texsprint(ctxcatcodes,"\\b{",utfbyte(s),"}")
elseif c == 2 then
- return "\\a{" .. utfbyte(s) .. "}"
+ texsprint(ctxcatcodes,"\\a{",utfbyte(s),"}")
end
- end )
- return str
- end
- function commands.hyphenatedurl.action(str, left, right)
- tex.sprint(ctxcatcodes,commands.hyphenatedurl.convert(str, left, right))
- end
-
- -- todo, no interface in mkiv yet
-
- function commands.hyphenatedurl.setcharacters(str,value) -- 1, 2 == before, after
- for s in utfcharacters(str) do
- chars[s] = value or 1
end
end
+end
- -- commands.hyphenatedurl.setcharacters("')]}",2)
+-- todo, no interface in mkiv yet
+function hyphenatedurl.setcharacters(str,value) -- 1, 2 == before, after
+ for s in utfcharacters(str) do
+ chars[s] = value or 1
+ end
end
+
+-- .hyphenatedurl.setcharacters("')]}",2)
diff --git a/Master/texmf-dist/tex/context/base/lang-url.mkiv b/Master/texmf-dist/tex/context/base/lang-url.mkiv
index 392a0285b10..0f6b23d0552 100644
--- a/Master/texmf-dist/tex/context/base/lang-url.mkiv
+++ b/Master/texmf-dist/tex/context/base/lang-url.mkiv
@@ -62,10 +62,13 @@
\def\dohyphenatedurlafter #1{\char#1\discretionary{}{\hyphenatedurlseparator}{}}%
\def\dohyphenatedurlbefore#1{\discretionary{\hyphenatedurlseparator}{}{}\char#1\relax}%
\def\dohyphenatedurlnormal#1{\char#1\relax}%
+\def\dohyphenatedurldisc #1{\discretionary{}{}{}}
-\def\sethyphenatedurlnormal#1{\ctxlua{commands.hyphenatedurl.setcharacters(\!!bs#1\!!es,0)}}
-\def\sethyphenatedurlbefore#1{\ctxlua{commands.hyphenatedurl.setcharacters(\!!bs#1\!!es,1)}}
-\def\sethyphenatedurlafter #1{\ctxlua{commands.hyphenatedurl.setcharacters(\!!bs#1\!!es,2)}}
+\def\sethyphenatedurlnormal #1{\ctxlua{commands.hyphenatedurl.setcharacters(\!!bs#1\!!es,0)}}
+\def\sethyphenatedurlbefore #1{\ctxlua{commands.hyphenatedurl.setcharacters(\!!bs#1\!!es,1)}}
+\def\sethyphenatedurlafter #1{\ctxlua{commands.hyphenatedurl.setcharacters(\!!bs#1\!!es,2)}}
+
+\def\hyphenatedurldiscretionary{}
% \sethyphenatedurlafter{ABCDEF}
@@ -79,10 +82,12 @@
\let\n\dohyphenatedurlnormal
\let\b\dohyphenatedurlbefore
\let\a\dohyphenatedurlafter
+ \let\d\dohyphenatedurldisc
\normalexpanded{\noexpand\ctxlua{commands.hyphenatedurl.action(
\!!bs\noexpand\detokenize{#1}\!!es,
\number\hyphenatedurllefthyphenmin,
- \number\hyphenatedurlrighthyphenmin
+ \number\hyphenatedurlrighthyphenmin,
+ "\hyphenatedurldiscretionary"
)}}%
\endgroup}
diff --git a/Master/texmf-dist/tex/context/base/lang-wrd.lua b/Master/texmf-dist/tex/context/base/lang-wrd.lua
new file mode 100644
index 00000000000..095e44443d9
--- /dev/null
+++ b/Master/texmf-dist/tex/context/base/lang-wrd.lua
@@ -0,0 +1,225 @@
+if not modules then modules = { } end modules ['lang-ini'] = {
+ version = 1.001,
+ comment = "companion to lang-ini.mkiv",
+ author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
+ copyright = "PRAGMA ADE / ConTeXt Development Team",
+ license = "see context related readme files"
+}
+
+local utf = unicode.utf8
+local lower, utfchar = string.lower, utf.char
+local lpegmatch = lpeg.match
+
+languages.words = languages.words or { }
+
+local words = languages.words
+
+words.data = words.data or { }
+words.enables = false
+words.threshold = 4
+
+local set_attribute = node.set_attribute
+local unset_attribute = node.unset_attribute
+local traverse_nodes = node.traverse
+local node_id = node.id
+local wordsdata = words.data
+local chardata = characters.data
+
+local glyph_node = node_id('glyph')
+local disc_node = node_id('disc')
+local kern_node = node_id('kern')
+
+words.colors = {
+ ["known"] = "green",
+ ["unknown"] = "red",
+}
+
+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)
+
+local loaded = { } -- we share lists
+
+function words.load(tag,filename)
+ local fullname = resolvers.find_file(filename,'other text file') or ""
+ if fullname ~= "" then
+ statistics.starttiming(languages)
+ local list = loaded[fullname]
+ if not list then
+ list = wordsdata[tag] or { }
+ local parser = (spacing + word/function(s) list[s] = true end)^0
+ lpegmatch(parser,io.loaddata(fullname) or "")
+ loaded[fullname] = list
+ end
+ wordsdata[tag] = list
+ statistics.stoptiming(languages)
+ else
+ logs.report("languages","missing words file '%s'",filename)
+ end
+end
+
+function words.found(id, str)
+ local tag = languages.numbers[id]
+ if tag then
+ local data = wordsdata[tag]
+ return data and (data[str] or data[lower(str)])
+ else
+ return false
+ end
+end
+
+-- The following code is an adaption of experimental code for
+-- hyphenating and spell checking.
+
+local function mark_words(head,whenfound) -- can be optimized
+ local current, start, str, language, n = head, nil, "", nil, 0
+ local function action()
+ if #str > 0 then
+ local f = whenfound(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_node 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
+ local components = current.components
+ if components then
+ start = start or current
+ n = n + 1
+ for g in traverse_nodes(components) do
+ str = str .. utfchar(g.char)
+ end
+ else
+ local code = current.char
+ if chardata[code].uccode or chardata[code].lccode then
+ start = start or current
+ n = n + 1
+ str = str .. utfchar(code)
+ elseif start then
+ action()
+ end
+ end
+ elseif id == disc_node then
+ if n > 0 then
+ n = n + 1
+ end
+ elseif id == kern_node 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
+
+words.methods = { }
+words.method = 1
+
+local methods = words.methods
+
+methods[1] = function(head, attribute, yes, nop)
+ local right, wrong = false, false
+ if yes then right = function(n) set_attribute(n,attribute,yes) end end
+ if nop then wrong = function(n) set_attribute(n,attribute,nop) end end
+ for n in traverse_nodes(head) do
+ unset_attribute(n,attribute) -- hm, not that selective (reset color)
+ end
+ local found, done = words.found, false
+ mark_words(head, function(language,str)
+ if #str < 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 list, dump = { }, false -- todo: per language
+
+local lower = characters.lower
+
+methods[2] = function(head, attribute)
+ dump = true
+ mark_words(head, function(language,str)
+ if #str >= words.threshold then
+ str = lower(str)
+ list[str] = (list[str] or 0) + 1
+ end
+ end)
+ return head, true
+end
+
+words.used = list
+
+function words.dump_used_words(name)
+ if dump then
+ logs.report("languages","saving list of used words in '%s'",name)
+ io.savedata(name,table.serialize(list))
+ end
+end
+
+local color = attributes.private('color')
+
+function words.check(head)
+ if words.enabled and head.next then
+ local colors = words.colors
+ local alc = attributes.list[color]
+ return methods[words.method](head, color, alc[colors.known], alc[colors.unknown])
+ else
+ return head, false
+ end
+end
+
+function words.enable(method)
+ tasks.enableaction("processors","languages.words.check")
+ words.method = method or words.method or 1
+ words.enabled = true
+end
+
+function words.disable()
+ words.enabled = false
+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[chars.plugins+1] = {
+--~ name = "language",
+--~ namespace = languagehacks,
+--~ processor = languagehacks.process
+--~ }
diff --git a/Master/texmf-dist/tex/context/base/lang-wrd.mkiv b/Master/texmf-dist/tex/context/base/lang-wrd.mkiv
new file mode 100644
index 00000000000..b6fc6a9d30f
--- /dev/null
+++ b/Master/texmf-dist/tex/context/base/lang-wrd.mkiv
@@ -0,0 +1,54 @@
+%D \module
+%D [ file=lang-wrd,
+%D version=2006.XX.XX,
+%D title=\CONTEXT\ Language Macros,
+%D subtitle=Checking,
+%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 Experimental.
+
+\writestatus{loading}{ConTeXt Language Macros / Checking}
+
+\registerctxluafile{lang-wrd}{1.001}
+
+\unprotect
+
+% \loadspellchecklist[en][words-en.txt]
+% \loadspellchecklist[us][words-en.txt]
+% \loadspellchecklist[nl][words-nl.txt]
+% \setupspellchecking[state=start,method=1]
+%
+% \setupspellchecking[state=start,method=2]
+% ...
+% \typefile{\jobname.words}
+
+\def\loadspellchecklist
+ {\dodoubleempty\doloadspellchecklist}
+
+\def\doloadspellchecklist[#1][#2]%
+ {\ctxlua{languages.words.load("#1","#2")}}
+
+\unexpanded\def\setupspellchecking
+ {\dosingleargument\dosetupspellchecking}
+
+\unexpanded\def\setupspellchecking[#1]% todo colors
+ {\getparameters[\??wl][#1]%
+ \doifelse\@@wlstate\v!start
+ {\ctxlua{languages.words.enable(\@@wlmethod)}}
+ {\ctxlua{languages.words.disable()}}}
+
+\setupspellchecking
+ [\c!state=\v!stop,
+ \c!method=1]
+
+\appendtoks
+ \ctxlua{languages.words.dump_used_words("\jobname.words")}%
+\to \everybye
+
+\protect \endinput
diff --git a/Master/texmf-dist/tex/context/base/lpdf-ano.lua b/Master/texmf-dist/tex/context/base/lpdf-ano.lua
index 87014365b39..e9e67e16319 100644
--- a/Master/texmf-dist/tex/context/base/lpdf-ano.lua
+++ b/Master/texmf-dist/tex/context/base/lpdf-ano.lua
@@ -1,6 +1,6 @@
if not modules then modules = { } end modules ['lpdf-ano'] = {
version = 1.001,
- comment = "companion to lpdf-ini.tex",
+ comment = "companion to lpdf-ini.mkiv",
author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
copyright = "PRAGMA ADE / ConTeXt Development Team",
license = "see context related readme files"
@@ -31,18 +31,17 @@ local specials = jobreferences.specials
local handlers = jobreferences.handlers
local executers = jobreferences.executers
-local pdfdictionary = lpdf.dictionary
-local pdfarray = lpdf.array
-local pdfreference = lpdf.reference
-local pdfunicode = lpdf.unicode
-local pdfconstant = lpdf.constant
+local pdfdictionary = lpdf.dictionary
+local pdfarray = lpdf.array
+local pdfreference = lpdf.reference
+local pdfunicode = lpdf.unicode
+local pdfconstant = lpdf.constant
+local pdfflushobject = lpdf.flushobject
+local pdfreserveobject = lpdf.reserveobject
+local pdfannotation = nodes.pdfannotation
+local pdfdestination = nodes.pdfdestination
-local pdfreserveobj = pdf.reserveobj
-local pdfimmediateobj = pdf.immediateobj
-local pdfpageref = tex.pdfpageref
-
-local pdfannot = nodes.pdfannot
-local pdfdest = nodes.pdfdest
+local pdfpagereference = tex.pdfpageref
local pdf_uri = pdfconstant("URI")
local pdf_gotor = pdfconstant("GoToR")
@@ -60,10 +59,10 @@ local function pagedest(n)
local pd = cache[n]
if not pd then
local a = pdfarray {
- pdfreference(pdfpageref(n)),
+ pdfreference(pdfpagereference(n)),
pdfconstant("Fit")
}
- pd = pdfreference(pdfimmediateobj(tostring(a)))
+ pd = pdfreference(pdfflushobject(a))
cache[n] = pd
end
return pd
@@ -71,6 +70,8 @@ end
lpdf.pagedest = pagedest
+local defaultdestination = pdfarray { 0, pdfconstant("Fit") }
+
local function link(url,filename,destination,page,actions)
if filename and filename ~= "" then
if file.basename(filename) == tex.jobname then
@@ -93,9 +94,9 @@ local function link(url,filename,destination,page,actions)
}
elseif filename and filename ~= "" then
return pdfdictionary {
- S = pdf_gotor,
+ S = pdf_gotor, -- can also be pdf_launch
F = filename,
- D = destination and destination ~= "" and destination,
+ D = (destination and destination ~= "" and destination), -- or defaultdestination,
NewWindow = (actions.newwindow and true) or nil,
}
elseif destination and destination ~= "" then
@@ -221,7 +222,7 @@ end
-- }
-- local cm = cache[main]
-- if not cm then
--- cm = "/A ".. tostring(pdfreference(pdfimmediateobj(tostring(main))))
+-- cm = "/A ".. tostring(pdfreference(pdfflushobject(main))
-- cache[main] = cm
-- end
-- return cm
@@ -236,7 +237,7 @@ function nodeinjections.reference(width,height,depth,prerolled)
if trace_references then
logs.report("references","w=%s, h=%s, d=%s, a=%s",width,height,depth,prerolled)
end
- return pdfannot(width,height,depth,prerolled)
+ return pdfannotation(width,height,depth,prerolled)
end
end
@@ -247,7 +248,7 @@ function nodeinjections.destination(width,height,depth,name,view)
if trace_destinations then
logs.report("destinations","w=%s, h=%s, d=%s, n=%s, v=%s",width,height,depth,name,view or "no view")
end
- return pdfdest(width,height,depth,name,view)
+ return pdfdestination(width,height,depth,name,view)
end
-- runners and specials
@@ -266,23 +267,27 @@ runners["inner"] = function(var,actions)
end
runners["inner with arguments"] = function(var,actions)
+ logs.report("references","todo: inner with arguments")
return false
end
runners["outer"] = function(var,actions)
- return link(nil,var.o,nil,nil,actions) -- var.o ?
+ local file, url = jobreferences.checkedfileorurl(var.outer,var.outer)
+ return link(url,file,var.arguments,nil,actions)
end
runners["outer with inner"] = function(var,actions)
- -- todo: resolve url/file name
- return link(nil,var.f,var.inner,var.r,actions)
+ local file = jobreferences.checkedfile(var.f)
+ return link(nil,file,var.inner,var.r,actions)
end
runners["special outer with operation"] = function(var,actions)
- return false
+ local handler = specials[var.special]
+ return handler and handler(var,actions)
end
runners["special outer"] = function(var,actions)
+ logs.report("references","todo: special outer")
return false
end
@@ -292,25 +297,29 @@ runners["special"] = function(var,actions)
end
runners["outer with inner with arguments"] = function(var,actions)
+ logs.report("references","todo: outer with inner with arguments")
return false
end
runners["outer with special and operation and arguments"] = function(var,actions)
+ logs.report("references","todo: outer with special and operation and arguments")
return false
end
runners["outer with special"] = function(var,actions)
+ logs.report("references","todo: outer with special")
return false
end
runners["outer with special and operation"] = function(var,actions)
+ logs.report("references","todo: outer with special and operation")
return false
end
runners["special operation"] = runners["special"]
runners["special operation with arguments"] = runners["special"]
-function specials.internal(var,actions)
+function specials.internal(var,actions) -- better resolve in strc-ref
local i = tonumber(var.operation)
local v = jobreferences.internals[i]
if not v then
@@ -326,49 +335,56 @@ end
specials.i = specials.internal
-function specials.page(var,actions)
- local p = jobreferences.pages[var.operation]
- if type(p) == "function" then
- p = p()
+function specials.page(var,actions) -- better resolve in strc-ref
+ local file = var.f
+ if file then
+ file = jobreferences.checkedfile(file)
+ return link(nil,file,nil,p or var.operation,actions)
+ else
+ local p = jobreferences.pages[var.operation]
+ if type(p) == "function" then
+ p = p()
+ end
+ return link(nil,nil,nil,p or var.operation,actions)
end
- return link(nil,nil,nil,p or var.operation,actions)
end
-function specials.url(var,actions)
- local url = var.operation
- if url then
- local u = jobreferences.urls[url]
- if u then
- local u, f = u[1], u[2]
- if f and f ~= "" then
- url = u .. "/" .. f
- else
- url = u
- end
+-- todo, do this in references namespace ordered instead (this is an experiment)
+
+local splitter = lpeg.splitat(":")
+
+function specials.order(var,actions) -- jobreferences.specials !
+ local operation = var.operation
+ if operation then
+ local kind, name, n = lpegmatch(splitter,operation)
+ local order = lists.ordered[kind]
+ order = order and order[name]
+ local v = order[tonumber(n)]
+ local r = v and v.references.realpage
+ if r then
+ var.operation = r -- brrr, but test anyway
+ return specials.page(var,actions)
end
end
+end
+
+function specials.url(var,actions)
+ local url = jobreferences.checkedurl(var.operation)
return link(url,nil,var.arguments,nil,actions)
end
function specials.file(var,actions)
- local file = var.operation
- if file then
- local f = jobreferences.files[file]
- if f then
- file = f[1] or file
- end
- end
+ local file = jobreferences.checkedfile(var.operation)
return link(nil,file,var.arguments,nil,actions)
end
+function specials.fileorurl(var,actions)
+ local file, url = jobreferences.checkedfileorurl(var.operation,var.operation)
+ return link(url,file,var.arguments,nil,actions)
+end
+
function specials.program(var,content)
- local program = var.operation
- if program then
- local p = jobreferences.programs[program]
- if p then
- program = p[1]
- end
- end
+ local program = jobreferences.checkedprogram(var.operation)
return lpdf.launch(program,var.arguments)
end
@@ -512,13 +528,13 @@ local function build(levels,start,parent,method)
local level, title, reference, open = li[1], li[2], li[3], li[4]
if level == startlevel then
if trace_bookmarks then
- logs.report("bookmark","%3i %s%s %s",realpage,rep(" ",level-1),(open and "+") or "-",title)
+ logs.report("bookmark","%3i %s%s %s",reference.realpage,rep(" ",level-1),(open and "+") or "-",title)
end
local prev = child
- child = pdfreserveobj()
+ child = pdfreserveobject()
if entry then
entry.Next = child and pdfreference(child)
- pdfimmediateobj(prev,tostring(entry))
+ pdfflushobject(prev,entry)
end
entry = pdfdictionary {
Title = pdfunicode(title),
@@ -536,7 +552,7 @@ local function build(levels,start,parent,method)
n = n + 1
i = i + 1
elseif level < startlevel then
- pdfimmediateobj(child,tostring(entry))
+ pdfflushobject(child,entry)
return i, n, first, last
elseif i < #levels and level > startlevel then
i, m, f, l = build(levels,i,pdfreference(child),method)
@@ -551,16 +567,16 @@ local function build(levels,start,parent,method)
if m > 0 then
entry.First, entry.Last = pdfreference(f), pdfreference(l)
end
- pdfimmediateobj(child,tostring(entry))
+ pdfflushobject(child,entry)
return i, n, first, last
end
end
- pdfimmediateobj(child,tostring(entry))
+ pdfflushobject(child,entry)
return nil, n, first, last
end
function codeinjections.addbookmarks(levels,method)
- local parent = pdfreserveobj()
+ local parent = pdfreserveobject()
local _, m, first, last = build(levels,1,pdfreference(parent),method or "internal")
local dict = pdfdictionary {
Type = pdfconstant("Outlines"),
@@ -568,6 +584,6 @@ function codeinjections.addbookmarks(levels,method)
Last = pdfreference(last),
Count = m,
}
- pdfimmediateobj(parent,tostring(dict))
+ pdfflushobject(parent,dict)
lpdf.addtocatalog("Outlines",lpdf.reference(parent))
end
diff --git a/Master/texmf-dist/tex/context/base/lpdf-col.lua b/Master/texmf-dist/tex/context/base/lpdf-col.lua
index 0e4f6e49588..18aa848ffea 100644
--- a/Master/texmf-dist/tex/context/base/lpdf-col.lua
+++ b/Master/texmf-dist/tex/context/base/lpdf-col.lua
@@ -1,6 +1,6 @@
if not modules then modules = { } end modules ['lpdf-mis'] = {
version = 1.001,
- comment = "companion to back-pdf.tex",
+ comment = "companion to lpdf-ini.mkiv",
author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
copyright = "PRAGMA ADE / ConTeXt Development Team",
license = "see context related readme files"
diff --git a/Master/texmf-dist/tex/context/base/lpdf-fld.lua b/Master/texmf-dist/tex/context/base/lpdf-fld.lua
index 6bdfdd36c38..c034aec6c91 100644
--- a/Master/texmf-dist/tex/context/base/lpdf-fld.lua
+++ b/Master/texmf-dist/tex/context/base/lpdf-fld.lua
@@ -1,6 +1,6 @@
if not modules then modules = { } end modules ['lpdf-fld'] = {
version = 1.001,
- comment = "companion to lpdf-ini.tex",
+ comment = "companion to lpdf-ini.mkiv",
author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
copyright = "PRAGMA ADE / ConTeXt Development Team",
license = "see context related readme files"
@@ -11,6 +11,9 @@ if not modules then modules = { } end modules ['lpdf-fld'] = {
-- some optimizations removed (will come bakc if needed)
local gmatch, lower, format = string.gmatch, string.lower, string.format
+local lpegmatch = lpeg.match
+
+local trace_fields = false trackers.register("widgets.fields", function(v) trace_fields = v end)
local texsprint, ctxcatcodes = tex.sprint, tex.ctxcatcodes
@@ -22,17 +25,17 @@ local registrations = backends.pdf.registrations
local registeredsymbol = codeinjections.registeredsymbol
-local pdfstream = lpdf.stream
-local pdfdictionary = lpdf.dictionary
-local pdfarray = lpdf.array
-local pdfreference = lpdf.reference
-local pdfunicode = lpdf.unicode
-local pdfstring = lpdf.string
-local pdfconstant = lpdf.constant
-local pdftoeight = lpdf.toeight
-
-local pdfimmediateobj = pdf.immediateobj
-local pdfreserveobj = pdf.reserveobj
+local pdfstream = lpdf.stream
+local pdfdictionary = lpdf.dictionary
+local pdfarray = lpdf.array
+local pdfreference = lpdf.reference
+local pdfunicode = lpdf.unicode
+local pdfstring = lpdf.string
+local pdfconstant = lpdf.constant
+local pdftoeight = lpdf.toeight
+local pdfflushobject = lpdf.flushobject
+local pdfreserveobject = lpdf.reserveobject
+local pdfannotation = nodes.pdfannotation
local submitoutputformat = 0 -- 0=unknown 1=HTML 2=FDF 3=XML => not yet used, needs to be checked
@@ -141,30 +144,53 @@ end
-- fonts and color
local fontnames = {
- rmtf = "Times-Roman", rmbf = "Times-Bold",
- rmit = "Times-Italic", rmsl = "Times-Italic",
- rmbi = "Times-BoldItalic", rmbs = "Times-BoldItalic",
- sstf = "Helvetica", ssbf = "Helvetica-Bold",
- ssit = "Helvetica-Oblique", sssl = "Helvetica-Oblique",
- ssbi = "Helvetica-BoldOblique", ssbs = "Helvetica-BoldOblique",
- tttf = "Courier", ttbf = "Courier-Bold",
- ttit = "Courier-Oblique", ttsl = "Courier-Oblique",
- ttbi = "Courier-BoldOblique", ttbs = "Courier-BoldOblique",
+ rm = {
+ tf = "Times-Roman",
+ bf = "Times-Bold",
+ it = "Times-Italic",
+ sl = "Times-Italic",
+ bi = "Times-BoldItalic",
+ bs = "Times-BoldItalic",
+ },
+ ss = {
+ tf = "Helvetica",
+ bf = "Helvetica-Bold",
+ it = "Helvetica-Oblique",
+ sl = "Helvetica-Oblique",
+ bi = "Helvetica-BoldOblique",
+ bs = "Helvetica-BoldOblique",
+ },
+ tt = {
+ tf = "Courier",
+ bf = "Courier-Bold",
+ it = "Courier-Oblique",
+ sl = "Courier-Oblique",
+ bi = "Courier-BoldOblique",
+ bs = "Courier-BoldOblique",
+ }
}
local usedfonts = { }
local function fieldsurrounding(specification)
- local tag = (specification.fontstyle or "tt") .. (specification.fontalternative or "tf")
- if not fontnames[tag] then
- tag = "tttf"
- end
- local size = specification.fontsize
+ local size = specification.fontsize or "12pt"
+ local style = specification.fontstyle or "rm"
+ local alternative = specification.fontalternative or "tf"
+ local s = fontnames[style]
+ if not s then
+ style, s = "rm", fontnames.rm
+ end
+ local a = s[alternative]
+ if not a then
+ alternative, a = "tf", s.tf
+ end
+ local tag = style .. alternative
+ size = string.todimen(size)
local stream = pdfstream {
pdfconstant(tag),
- format("%s Tf",(size and (number.dimenfactors.bp * size)) or 12),
+ format("%0.4f Tf",(size and (number.dimenfactors.bp * size)) or 12),
}
- usedfonts[tag] = true
+ usedfonts[tag] = a -- the name
-- add color to stream: 0 g
-- move up with "x.y Ts"
return tostring(stream)
@@ -173,14 +199,14 @@ end
local function registerfonts()
if next(usedfonts) then
local d = pdfdictionary()
- for tag, _ in next, usedfonts do
+ for tag, name in next, usedfonts do
local f = pdfdictionary {
Type = pdfconstant("Font"),
Subtype = pdfconstant("Type1"), -- todo
Name = pdfconstant(tag),
- BaseFont = pdfconstant(fontnames[tag]),
+ BaseFont = pdfconstant(name),
}
- d[tag] = pdfreference(pdfimmediateobj(tostring(f)))
+ d[tag] = pdfreference(pdfflushobject(f))
end
return d
end
@@ -201,7 +227,7 @@ end
local function fieldappearances(specification)
-- todo: caching
local values = specification.values
- local default = specification.default
+ local default = specification.default -- todo
if not values then
-- error
return
@@ -221,9 +247,9 @@ local function fieldappearances(specification)
return lpdf.sharedobj(tostring(appearance))
end
-local function fieldstates(specification,forceyes)
+local function fieldstates(specification,forceyes,values,default)
-- we don't use Opt here (too messy for radio buttons)
- local values, default = specification.values, specification.default
+ local values, default = values or specification.values, default or specification.default
if not values then
-- error
return
@@ -235,12 +261,12 @@ local function fieldstates(specification,forceyes)
else
yes, off = v[1], v[2]
end
- local yesshown, yesvalue = splitter:match(yes)
+ local yesshown, yesvalue = lpegmatch(splitter,yes)
if not (yesshown and yesvalue) then
yesshown = yes, yes
end
yes = aux.settings_to_array(yesshown)
- local offshown, offvalue = splitter:match(off)
+ local offshown, offvalue = lpegmatch(splitter,off)
if not (offshown and offvalue) then
offshown = off, off
end
@@ -265,7 +291,11 @@ local function fieldstates(specification,forceyes)
if not offvalue then
offvalue = offn
end
- forceyes = forceyes and "On" -- spec likes Yes more but we've used On for ages now
+ if forceyes == true then
+ forceyes = forceyes and "On" -- spec likes Yes more but we've used On for ages now
+ else
+ -- false or string
+ end
if default == yesn then
default = pdfconstant(forceyes or yesn)
else
@@ -287,7 +317,7 @@ local function fieldoptions(specification)
local v = aux.settings_to_array(values)
for i=1,#v do
local vi = v[i]
- local shown, value = splitter:match(vi)
+ local shown, value = lpegmatch(splitter,vi)
if shown and value then
v[i] = pdfarray { pdfunicode(value), shown }
else
@@ -298,7 +328,7 @@ local function fieldoptions(specification)
end
end
-local function radiodefault(parent,field)
+local function radiodefault(parent,field,forceyes)
local default, values = parent.default, parent.values
if not default or default == "" then
values = aux.settings_to_array(values)
@@ -308,9 +338,9 @@ local function radiodefault(parent,field)
local fieldvalues = aux.settings_to_array(field.values)
local yes, off = fieldvalues[1], fieldvalues[2] or fieldvalues[1]
if not default then
- return pdfconstant(yes)
+ return pdfconstant((forceyes and "On") or yes)
elseif default == name then
- return pdfconstant(default)
+ return pdfconstant((forceyes and "On") or default)
else
return pdfconstant("Off")
end
@@ -325,7 +355,7 @@ end
-- defining
-local fields, radios, fieldsets, calculationset = { }, { }, { }, nil
+local fields, radios, clones, fieldsets, calculationset = { }, { }, { }, { }, nil
function codeinjections.definefieldset(tag,list)
fieldsets[tag] = list
@@ -358,8 +388,12 @@ end
local function predefinesymbols(specification)
local values = specification.values
if values then
- local a, b = splitter:match(values)
- codeinjections.presetsymbollist(a or values)
+ local symbols = aux.settings_to_array(values)
+ for i=1,#symbols do
+ local symbol = symbols[i]
+ local a, b = lpegmatch(splitter,symbol)
+ codeinjections.presetsymbol(a or symbol)
+ end
end
end
@@ -369,11 +403,11 @@ function codeinjections.getdefaultfieldvalue(name)
local values = f.values
local default = f.default
if not default or default == "" then
- local a, b = splitter:match(values)
- values = a or values
- for name in gmatch(list,"[^, ]+") do
- default = name
- break
+ local symbols = aux.settings_to_array(values)
+ local symbol = symbols[1]
+ if symbol then
+ local a, b = lpegmatch(splitter,symbol) -- splits at =>
+ default = a or symbol
end
end
if default then
@@ -382,14 +416,15 @@ function codeinjections.getdefaultfieldvalue(name)
end
end
-
function codeinjections.definefield(specification)
local n = specification.name
local f = fields[n]
if not f then
local kind = specification.kind
if not kind then
- -- name and kind are mandate
+ if trace_fields then
+ logs.report("fields","invalid definition of '%s': unknown type",n)
+ end
elseif kind == "radio" then
local values = specification.values
if values and values ~= "" then
@@ -398,8 +433,11 @@ function codeinjections.definefield(specification)
radios[values[v]] = { parent = n }
end
fields[n] = specification
- else
- -- invalid radio specification
+ if trace_fields then
+ logs.report("fields","defining '%s' as radio",n or "?")
+ end
+ elseif trace_fields then
+ logs.report("fields","invalid definition of radio '%s': missing values",n)
end
elseif kind == "sub" then
-- not in main field list !
@@ -409,38 +447,77 @@ function codeinjections.definefield(specification)
for key, value in next, specification do
radio[key] = value
end
+ if trace_fields then
+ local p = radios[n] and radios[n].parent
+ logs.report("fields","defining '%s' as sub of radio '%s'",n or "?",p or "?")
+ end
+ elseif trace_fields then
+ logs.report("fields","invalid definition of radio sub '%s': no parent",n)
end
predefinesymbols(specification)
+ elseif kind == "text" or kind == "line" then
+ fields[n] = specification
+ if trace_fields then
+ logs.report("fields","defining '%s' as %s",n,kind)
+ end
+ if specification.values ~= "" and specification.default == "" then
+ specification.default, specification.values = specification.values, nil
+ end
else
fields[n] = specification
+ if trace_fields then
+ logs.report("fields","defining '%s' as %s",n,kind)
+ end
predefinesymbols(specification)
end
- else
- -- already done
+ elseif trace_fields then
+ logs.report("fields","invalid definition of '%s': already defined",n)
end
end
function codeinjections.clonefield(specification)
- local p = specification.parent
- local c = specification.children
+ local p, c, v = specification.parent, specification.children, specification.variant
if not p or not c then
- -- parent and children are mandate
+ if trace_fields then
+ logs.report("fields","invalid clone: children: '%s', parent '%s', variant: '%s'",p or "?",c or "?", v or "?")
+ end
else
for n in gmatch(c,"[^, ]+") do
- local f = fields[n]
- if f and not f.done then
- -- already done
+ local f, r, c, x = fields[n], radios[n], clones[n], fields[p]
+ if f or r or c then
+ if trace_fields then
+ logs.report("fields","already cloned: child: '%s', parent '%s', variant: '%s'",p or "?",n or "?", v or "?")
+ end
+ elseif x then
+ if trace_fields then
+ logs.report("fields","invalid clone: child: '%s', variant: '%s', no parent",n or "?", v or "?")
+ end
else
- fields[n] = specification
+ if trace_fields then
+ logs.report("fields","cloning: child: '%s', parent '%s', variant: '%s'",p or "?",n or "?", v or "?")
+ end
+ clones[n] = specification
+ predefinesymbols(specification)
end
end
end
end
function codeinjections.getfieldgroup(name)
- local f = fields[name]
- if f and f.group then
- texsprint(ctxcatcodes,f.group)
+ local f = fields[name] or radios[name] or clones[name]
+ local g = f and f.group
+ if not g or g == "" then
+ local v, p, k = f.variant, f.parent, f.kind
+ if v == "clone" or v == "copy" then
+ f = fields[p] or radios[p]
+ g = f and f.group
+ elseif k == "sub" then
+ f = fields[p]
+ g = f and f.group
+ end
+ end
+ if g then
+ texsprint(ctxcatcodes,g)
end
end
@@ -480,33 +557,35 @@ end
local collected = pdfarray()
-function codeinjections.finishfields()
+local function finishfields()
for name, field in next, fields do
local kids = field.kids
if kids then
- pdfimmediateobj(field.kobj,tostring(kids))
+ pdfflushobject(field.kobj,kids)
end
local pobj = field.pobj
end
for name, field in next, radios do
local kids = field.kids
if kids then
- pdfimmediateobj(field.kobj,tostring(kids))
+ pdfflushobject(field.kobj,kids)
end
end
if #collected > 0 then
+ usedfonts.tttf = fontnames.tt.tf
local acroform = pdfdictionary {
NeedAppearances = true,
- Fields = pdfreference(pdfimmediateobj(tostring(collected))),
+ Fields = pdfreference(pdfflushobject(collected)),
DR = pdfdictionary { Font = registerfonts() },
CO = fieldsetlist(calculationset),
DA = "/tttf 12 Tf 0 g",
}
- lpdf.addtocatalog("AcroForm",pdfreference(pdfimmediateobj(tostring(acroform))))
+ lpdf.addtocatalog("AcroForm",pdfreference(pdfflushobject(acroform)))
end
- lpdf.finishfields = function() end
end
+lpdf.registerdocumentfinalizer(finishfields)
+
local pdf_widget = pdfconstant("Widget")
local pdf_tx = pdfconstant("Tx")
local pdf_ch = pdfconstant("Ch")
@@ -520,51 +599,64 @@ local pdf_no_rect = pdfarray { 0, 0, 0, 0 }
local methods = { }
function codeinjections.typesetfield(name,specification)
- local field = fields[name] or radios[name]
+ local field = fields[name] or radios[name] or clones[name]
if not field then
- tex.write("error: " .. name)
+ logs.report("fields", "unknown child '%s'",name)
-- unknown field
return
end
+ local variant, parent = field.variant, field.parent
+ if variant == "copy" or variant == "clone" then -- only in clones
+ field = fields[parent] or radios[parent]
+ end
local method = methods[field.kind]
if method then
- method(name,specification)
+ method(name,specification,variant)
+ else
+ logs.report("fields", "unknown method '%s' for child '%s'",field.kind,name)
end
end
-- can be optional multipass optimization (share objects)
local function save_parent(field,specification,d)
- local kn = pdfreserveobj()
+ local kn = pdfreserveobject()
d.Kids = pdfreference(kn)
field.kobj = kn
field.kids = pdfarray()
- local pn = pdfimmediateobj(tostring(d))
+ local pn = pdfflushobject(d)
field.pobj = pn
collected[#collected+1] = pdfreference(pn)
end
local function save_kid(field,specification,d)
- local kn = pdfreserveobj()
+ local kn = pdfreserveobject()
field.kids[#field.kids+1] = pdfreference(kn)
- node.write(nodes.pdfannot(specification.width,specification.height,0,d(),kn))
+ node.write(pdfannotation(specification.width,specification.height,0,d(),kn))
end
-function methods.line(name,specification,extras)
+function methods.line(name,specification,variant,extras)
local field = fields[name]
+ if variant == "copy" or variant == "clone" then
+ logs.report("fields","todo: clones of text fields")
+ end
local kind = field.kind
if not field.pobj then
+ if trace_fields then
+ logs.report("fields","using parent text '%s'",name)
+ end
if extras then
enhance(specification,extras)
end
- local text = pdfunicode(specification.default)
+ local text = pdfunicode(field.default)
local d = pdfdictionary {
Subtype = pdf_widget,
T = pdfunicode(specification.title),
F = fieldplus(specification),
Ff = fieldflag(specification),
OC = fieldlayer(specification),
- MK = fieldsurrounding(specification),
+ MK = fieldsurrounding(specification), -- needed ?
+ DA = fieldsurrounding(specification),
AA = fieldactions(specification),
FT = pdf_tx,
Q = fieldalignment(specification),
@@ -576,6 +668,9 @@ function methods.line(name,specification,extras)
field.specification = specification
end
specification = field.specification or { } -- todo: radio spec
+ if trace_fields then
+ logs.report("fields","using child text '%s'",name)
+ end
local d = pdfdictionary {
Subtype = pdf_widget,
Parent = pdfreference(field.pobj),
@@ -583,21 +678,28 @@ function methods.line(name,specification,extras)
DA = fieldattributes(specification),
OC = fieldlayer(specification),
MK = fieldsurrounding(specification),
+ DA = fieldsurrounding(specification),
AA = fieldactions(specification),
- Q = fieldalignment(specification)
+ Q = fieldalignment(specification),
}
save_kid(field,specification,d)
end
-function methods.text(name,specification)
- methods.line(name,specification,"MultiLine")
+function methods.text(name,specification,variant)
+ methods.line(name,specification,variant,"MultiLine")
end
-function methods.choice(name,specification,extras)
+function methods.choice(name,specification,variant,extras)
local field = fields[name]
+ if variant == "copy" or variant == "clone" then
+ logs.report("fields","todo: clones of choice fields")
+ end
local kind = field.kind
local d
if not field.pobj then
+ if trace_fields then
+ logs.report("fields","using parent choice '%s'",name)
+ end
if extras then
enhance(specification,extras)
end
@@ -615,6 +717,9 @@ function methods.choice(name,specification,extras)
field.specification = specification
end
specification = field.specification or { }
+ if trace_fields then
+ logs.report("fields","using child choice '%s'",name)
+ end
local d = pdfdictionary {
Subtype = pdf_widget,
Parent = pdfreference(field.pobj),
@@ -626,23 +731,29 @@ function methods.choice(name,specification,extras)
save_kid(field,specification,d)
end
-function methods.popup(name,specification)
- methods.choice(name,specification,"PopUp")
+function methods.popup(name,specification,variant)
+ methods.choice(name,specification,variant,"PopUp")
end
-function methods.combo(name,specification)
- methods.choice(name,specification,"PopUp,Edit")
+function methods.combo(name,specification,variant)
+ methods.choice(name,specification,variant,"PopUp,Edit")
end
-- Probably no default appearance needed for first kid and no javascripts for the
-- parent ... I will look into it when I have to make a complex document.
-function methods.check(name,specification)
+function methods.check(name,specification,variant)
-- no /Opt because (1) it's messy - see pdf spec, (2) it discouples kids and
-- contrary to radio there is no way to associate then
local field = fields[name]
+ if variant == "copy" or variant == "clone" then
+ logs.report("fields","todo: clones of check fields")
+ end
local kind = field.kind
local appearance, default = fieldstates(field,true)
if not field.pobj then
+ if trace_fields then
+ logs.report("fields","using parent check '%s'",name)
+ end
local d = pdfdictionary {
Subtype = pdf_widget,
T = pdfunicode(specification.title),
@@ -661,6 +772,9 @@ function methods.check(name,specification)
field.specification = specification
end
specification = field.specification or { } -- todo: radio spec
+ if trace_fields then
+ logs.report("fields","using child check '%s'",name)
+ end
local d = pdfdictionary {
Subtype = pdf_widget,
Parent = pdfreference(field.pobj),
@@ -677,10 +791,16 @@ function methods.check(name,specification)
save_kid(field,specification,d)
end
-function methods.push(name,specification)
+function methods.push(name,specification,variant)
local field = fields[name]
+ if variant == "copy" or variant == "clone" then
+ logs.report("fields","todo: clones of push fields")
+ end
local kind = field.kind
if not field.pobj then
+ if trace_fields then
+ logs.report("fields","using parent push '%s'",name)
+ end
enhance(specification,"PushButton")
local d = pdfdictionary {
Subtype = pdf_widget,
@@ -697,6 +817,9 @@ function methods.push(name,specification)
field.specification = specification
end
specification = field.specification or { } -- todo: radio spec
+ if trace_fields then
+ logs.report("fields","using child push '%s'",name)
+ end
local d = pdfdictionary {
Subtype = pdf_widget,
Parent = pdfreference(field.pobj),
@@ -710,18 +833,29 @@ function methods.push(name,specification)
save_kid(field,specification,d)
end
-function methods.sub(name,specification)
- local field = radios[name]
- if not field then
- return
+function methods.sub(name,specification,variant)
+ local field = radios[name] or fields[name] or clones[name] -- fields in case of a clone, maybe use dedicated clones
+ local values
+ if variant == "copy" or variant == "clone" then
+ name = field.parent
+ values = field.values -- clone only, copy has nil so same as parent
+ field = radios[name]
+ else
+ values = field.values
end
local parent = fields[field.parent]
if not parent then
return
end
+ local appearance = fieldstates(field,name,values) -- we need to force the 'On' name
+ local default = radiodefault(parent,field)
if not parent.pobj then
+ if trace_fields then
+ logs.report("fields","using parent '%s' of radio '%s' with values '%s' and default '%s'",parent.name,name,parent.values or "?",parent.default or "?")
+ end
local specification = parent.specification or { }
- enhance(specification,"Radio,RadiosInUnison")
+ -- enhance(specification,"Radio,RadiosInUnison")
+ enhance(specification,"RadiosInUnison") -- maybe also PushButton as acrobat does
local d = pdfdictionary {
T = parent.name,
FT = pdf_btn,
@@ -729,11 +863,13 @@ function methods.sub(name,specification)
F = fieldplus(specification),
Ff = fieldflag(specification),
H = pdf_n,
+ V = default,
}
save_parent(parent,specification,d)
end
- local appearance = fieldstates(field)
- local default = radiodefault(parent,field)
+ if trace_fields then
+ logs.report("fields","using child radio '%s' with values '%s'",name,values or "?")
+ end
local d = pdfdictionary {
Subtype = pdf_widget,
Parent = pdfreference(parent.pobj),
@@ -741,8 +877,6 @@ function methods.sub(name,specification)
DA = fieldattributes(specification),
OC = fieldlayer(specification),
AA = fieldactions(specification),
- DV = default,
- V = default,
AS = default,
AP = appearance,
H = pdf_n,
diff --git a/Master/texmf-dist/tex/context/base/lpdf-grp.lua b/Master/texmf-dist/tex/context/base/lpdf-grp.lua
index 119d25ee45f..ad01e4d4f5a 100644
--- a/Master/texmf-dist/tex/context/base/lpdf-grp.lua
+++ b/Master/texmf-dist/tex/context/base/lpdf-grp.lua
@@ -1,6 +1,6 @@
if not modules then modules = { } end modules ['lpdf-grp'] = {
version = 1.001,
- comment = "companion to lpdf-ini.tex",
+ comment = "companion to lpdf-ini.mkiv",
author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
copyright = "PRAGMA ADE / ConTeXt Development Team",
license = "see context related readme files"
@@ -12,13 +12,11 @@ local nodeinjections = backends.pdf.nodeinjections
local codeinjections = backends.pdf.codeinjections
local registrations = backends.pdf.registrations
-local pdfdictionary = lpdf.dictionary
-local pdfarray = lpdf.array
-local pdfconstant = lpdf.constant
-local pdfreference = lpdf.reference
-
-local pdfreserveobj = pdf.reserveobj
-local pdfimmediateobj = pdf.immediateobj
+local pdfdictionary = lpdf.dictionary
+local pdfarray = lpdf.array
+local pdfconstant = lpdf.constant
+local pdfreference = lpdf.reference
+local pdfflushobject = lpdf.flushobject
local function shade(stype,name,domain,color_a,color_b,n,colorspace,coordinates)
local f = pdfdictionary {
@@ -31,11 +29,11 @@ local function shade(stype,name,domain,color_a,color_b,n,colorspace,coordinates)
local s = pdfdictionary {
ShadingType = stype,
ColorSpace = pdfconstant(colorspace),
- Function = pdfreference(pdfimmediateobj(tostring(f))),
+ Function = pdfreference(pdfflushobject(f)),
Coords = pdfarray(coordinates),
Extend = pdfarray { true, true },
}
- lpdf.adddocumentshade(name,pdfreference(pdfimmediateobj(tostring(s))))
+ lpdf.adddocumentshade(name,pdfreference(pdfflushobject(s)))
end
function lpdf.circularshade(name,domain,color_a,color_b,n,colorspace,coordinates)
diff --git a/Master/texmf-dist/tex/context/base/lpdf-ini.lua b/Master/texmf-dist/tex/context/base/lpdf-ini.lua
index 3335c623756..e0ffd40521b 100644
--- a/Master/texmf-dist/tex/context/base/lpdf-ini.lua
+++ b/Master/texmf-dist/tex/context/base/lpdf-ini.lua
@@ -1,20 +1,25 @@
-if not modules then modules = { } end modules ['back-pdf'] = {
+if not modules then modules = { } end modules ['lpdf-ini'] = {
version = 1.001,
- comment = "companion to lpdf-ini.tex",
+ comment = "companion to lpdf-ini.mkiv",
author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
copyright = "PRAGMA ADE / ConTeXt Development Team",
license = "see context related readme files"
}
--- This code is very experimental !
-
local setmetatable, getmetatable, type, next, tostring, tonumber, rawset = setmetatable, getmetatable, type, next, tostring, tonumber, rawset
-local char, byte, format, gsub, concat = string.char, string.byte, string.format, string.gsub, table.concat
+local char, byte, format, gsub, concat, match, sub, gmatch = string.char, string.byte, string.format, string.gsub, table.concat, string.match, string.sub, string.gmatch
local utfvalues = string.utfvalues
-local texwrite = tex.write
+local texwrite, texset, texsprint, ctxcatcodes = tex.write, tex.set, tex.sprint, tex.ctxcatcodes
local sind, cosd = math.sind, math.cosd
+local lpegmatch = lpeg.match
+
+local pdfreserveobj = pdf and pdf.reserveobj or function() return 1 end -- for testing
+local pdfimmediateobj = pdf and pdf.immediateobj or function() return 2 end -- for testing
local trace_finalizers = false trackers.register("backend.finalizers", function(v) trace_finalizers = v end)
+local trace_resources = false trackers.register("backend.resources", function(v) trace_resources = v end)
+local trace_objects = false trackers.register("backend.objects", function(v) trace_objects = v end)
+local trace_detail = false trackers.register("backend.detail", function(v) trace_detail = v end)
lpdf = lpdf or { }
@@ -39,42 +44,41 @@ lpdf.tosixteen = tosixteen
-- lpeg is some 5 times faster than gsub (in test) on escaping
-local escapes = {
- ["\\"] = "\\\\",
- ["/"] = "\\/", ["#"] = "\\#",
- ["<"] = "\\<", [">"] = "\\>",
- ["["] = "\\[", ["]"] = "\\]",
- ["("] = "\\(", [")"] = "\\)",
-}
+-- local escapes = {
+-- ["\\"] = "\\\\",
+-- ["/"] = "\\/", ["#"] = "\\#",
+-- ["<"] = "\\<", [">"] = "\\>",
+-- ["["] = "\\[", ["]"] = "\\]",
+-- ["("] = "\\(", [")"] = "\\)",
+-- }
+--
+-- local escaped = lpeg.Cs(lpeg.Cc("(") * (lpeg.S("\\/#<>[]()")/escapes + lpeg.P(1))^0 * lpeg.Cc(")"))
+--
+-- local function toeight(str)
+-- if not str or str == "" then
+-- return "()"
+-- else
+-- return lpegmatch(escaped,str)
+-- end
+-- end
+--
+-- -- no need for escaping .. just use unicode instead
-local escaped = lpeg.Cs(lpeg.Cc("(") * (lpeg.S("\\/#<>[]()")/escapes + lpeg.P(1))^0 * lpeg.Cc(")"))
+-- \0 \t \n \r \f <space> ( ) [ ] { } / %
local function toeight(str)
- -- if not str or str == "" then
- -- return "()"
- -- else
- -- return escaped:match(str)
- -- end
- --
- -- no need for escaping .. just use unicode instead
return "(" .. str .. ")"
end
lpdf.toeight = toeight
-local escapes = "-"
-
-local escaped = lpeg.Cs(lpeg.Cc("(") * (lpeg.S("\\/#<>[]()")/escapes + lpeg.P(1))^0 * lpeg.Cc(")"))
-
-local function cleaned(str)
- if not str or str == "" then
- return "()"
- else
- return escaped:match(str)
- end
-end
-
-lpdf.cleaned = cleaned
+--~ local escaped = lpeg.Cs((lpeg.S("\0\t\n\r\f ()[]{}/%")/"#" + lpeg.P(1))^0)
+--~
+--~ local function cleaned(str)
+--~ return (str and str ~= "" and lpegmatch(escaped,str)) or ""
+--~ end
+--~
+--~ lpdf.cleaned = cleaned -- not public yet
local function merge_t(a,b)
local t = { }
@@ -140,7 +144,8 @@ tostring_a = function(t,contentonly,key)
r[#r+1] = tosixteen(v)
elseif tv == "table" then
local mv = getmetatable(v)
- if mv and mv.__lpdftype then
+ local mt = mv and mv.__lpdftype
+ if mt then
r[#r+1] = tostring(v)
elseif v[1] then
r[#r+1] = tostring_a(v)
@@ -170,7 +175,15 @@ local tostring_z = function() return "null" end
local tostring_t = function() return "true" end
local tostring_f = function() return "false" end
local tostring_r = function(t) return t[1] .. " 0 R" end
-local tostring_v = function(t) return concat(t[1],"") end
+
+local tostring_v = function(t)
+ local s = t[1]
+ if type(s) == "table" then
+ return concat(s,"")
+ else
+ return s
+ end
+end
local function value_x(t) return t end -- the call is experimental
local function value_s(t,key) return t[1] end -- the call is experimental
@@ -180,8 +193,8 @@ local function value_c(t) return sub(t[1],2) end -- the call is e
local function value_d(t) return tostring_d(t,true,key) end -- the call is experimental
local function value_a(t) return tostring_a(t,true,key) end -- the call is experimental
local function value_z() return nil end -- the call is experimental
-local function value_t() return true end -- the call is experimental
-local function value_b() return false end -- the call is experimental
+local function value_t(t) return t.value or true end -- the call is experimental
+local function value_f(t) return t.value or false end -- the call is experimental
local function value_r() return t[1] end -- the call is experimental
local function value_v() return t[1] end -- the call is experimental
@@ -200,7 +213,7 @@ local mt_f = { __lpdftype = "false", __tostring = tostring_f, __call = valu
local mt_r = { __lpdftype = "reference", __tostring = tostring_r, __call = value_r }
local mt_v = { __lpdftype = "verbose", __tostring = tostring_v, __call = value_v }
-function lpdf.stream(t)
+local function pdfstream(t) -- we need to add attrbutes
if t then
for i=1,#t do
t[i] = tostring(t[i])
@@ -209,29 +222,29 @@ function lpdf.stream(t)
return setmetatable(t or { },mt_x)
end
-function lpdf.dictionary(t)
+local function pdfdictionary(t)
return setmetatable(t or { },mt_d)
end
-function lpdf.array(t)
- if type(t) == "string"then
+local function pdfarray(t)
+ if type(t) == "string" then
return setmetatable({ t },mt_a)
else
return setmetatable(t or { },mt_a)
end
end
-function lpdf.string(str,default)
+local function pdfstring(str,default)
return setmetatable({ str or default or "" },mt_s)
end
-function lpdf.unicode(str,default)
+local function pdfunicode(str,default)
return setmetatable({ str or default or "" },mt_u)
end
local cache = { } -- can be weak
-function lpdf.number(n,default) -- 0-10
+local function pdfnumber(n,default) -- 0-10
n = n or default
local c = cache[n]
if not c then
@@ -241,15 +254,24 @@ function lpdf.number(n,default) -- 0-10
return c
end
-for i=-1,9 do cache[i] = lpdf.number(i) end
+for i=-1,9 do cache[i] = pdfnumber(i) end
local cache = { } -- can be weak
-function lpdf.constant(str,default)
+local forbidden, replacements = "\0\t\n\r\f ()[]{}/%%#\\", { } -- table faster than function
+
+for s in gmatch(forbidden,".") do
+ replacements[s] = format("#%02x",byte(s))
+end
+
+local escaped = lpeg.Cs(lpeg.Cc("/") * (lpeg.S(forbidden)/replacements + lpeg.P(1))^0)
+
+local function pdfconstant(str,default)
str = str or default or ""
local c = cache[str]
if not c then
- c = setmetatable({ "/" .. str },mt_c)
+ -- c = setmetatable({ "/" .. str },mt_c)
+ c = setmetatable({ lpegmatch(escaped,str) },mt_c)
cache[str] = c
end
return c
@@ -259,30 +281,114 @@ local p_null = { } setmetatable(p_null, mt_z)
local p_true = { } setmetatable(p_true, mt_t)
local p_false = { } setmetatable(p_false,mt_f)
-function lpdf.null()
+local function pdfnull()
return p_null
end
-function lpdf.boolean(b,default)
- if ((type(b) == boolean) and b) or default then
- return p_true
+--~ print(pdfboolean(false),pdfboolean(false,false),pdfboolean(false,true))
+--~ print(pdfboolean(true),pdfboolean(true,false),pdfboolean(true,true))
+--~ print(pdfboolean(nil,true),pdfboolean(nil,false))
+
+local function pdfboolean(b,default)
+ if type(b) == "boolean" then
+ return b and p_true or p_false
else
- return p_false
+ return default and p_true or p_false
end
end
-function lpdf.reference(r)
+local function pdfreference(r)
return setmetatable({ r or 0 },mt_r)
end
-function lpdf.verbose(t) -- maybe check for type
+local function pdfverbose(t) -- maybe check for type
return setmetatable({ t or "" },mt_v)
end
+lpdf.stream = pdfstream
+lpdf.dictionary = pdfdictionary
+lpdf.array = pdfarray
+lpdf.string = pdfstring
+lpdf.unicode = pdfunicode
+lpdf.number = pdfnumber
+lpdf.constant = pdfconstant
+lpdf.null = pdfnull
+lpdf.boolean = pdfboolean
+lpdf.reference = pdfreference
+lpdf.verbose = pdfverbose
+
+-- n = pdf.obj(n, str)
+-- n = pdf.obj(n, "file", filename)
+-- n = pdf.obj(n, "stream", streamtext, attrtext)
+-- n = pdf.obj(n, "streamfile", filename, attrtext)
+
+-- we only use immediate objects
+
+-- todo: tracing
+
+local names, cache = { }, { }
+
+function lpdf.reserveobject(name)
+ local r = pdfreserveobj()
+ if name then
+ names[name] = r
+ if trace_objects then
+ logs.report("backends", "reserving object number %s under name '%s'",r,name)
+ end
+ elseif trace_objects then
+ logs.report("backends", "reserving object number %s",r)
+ end
+ return r
+end
+
+--~ local pdfreserveobject = lpdf.reserveobject
+
+function lpdf.flushobject(name,data)
+ if data then
+ name = names[name] or name
+ if name then
+ if trace_objects then
+ if trace_detail then
+ logs.report("backends", "flushing object data to reserved object with name '%s' -> %s",name,tostring(data))
+ else
+ logs.report("backends", "flushing object data to reserved object with name '%s'",name)
+ end
+ end
+ return pdfimmediateobj(name,tostring(data))
+ else
+ if trace_objects then
+ if trace_detail then
+ logs.report("backends", "flushing object data to reserved object with number %s -> %s",name,tostring(data))
+ else
+ logs.report("backends", "flushing object data to reserved object with number %s",name)
+ end
+ end
+ return pdfimmediateobj(tostring(data))
+ end
+ else
+ if trace_objects and trace_detail then
+ logs.report("backends", "flushing object data -> %s",tostring(name))
+ end
+ return pdfimmediateobj(tostring(name))
+ end
+end
+
+function lpdf.sharedobj(content)
+ local r = cache[content]
+ if not r then
+ r = pdfreference(pdfimmediateobj(content))
+ cache[content] = r
+ end
+ return r
+end
+
--~ local d = lpdf.dictionary()
---~ local e = lpdf.dictionary { ["e"] = "abc" }
+--~ local e = lpdf.dictionary { ["e"] = "abc", x = lpdf.dictionary { ["f"] = "ABC" } }
--~ local f = lpdf.dictionary { ["f"] = "ABC" }
---~ local a = lpdf.array()
+--~ local a = lpdf.array { lpdf.array { lpdf.string("xxx") } }
+
+--~ print(a)
+--~ os.exit()
--~ d["test"] = lpdf.string ("test")
--~ d["more"] = "more"
@@ -296,11 +402,19 @@ end
--~ d.what = a
---~ print(d)
+--~ print(e)
--~ local d = lpdf.dictionary()
--~ d["abcd"] = { 1, 2, 3, "test" }
--~ print(d)
+--~ print(d())
+
+--~ local d = lpdf.array()
+--~ d[#d+1] = 1
+--~ d[#d+1] = 2
+--~ d[#d+1] = 3
+--~ d[#d+1] = "test"
+--~ print(d)
--~ local d = lpdf.array()
--~ d[#d+1] = { 1, 2, 3, "test" }
@@ -310,91 +424,14 @@ end
--~ d[#d+1] = { a=1, b=2, c=3, d="test" }
--~ print(d)
---~ local s = lpdf.boolean(false)
+--~ local s = lpdf.constant("xx")
+--~ print(s) -- fails somehow
--~ print(s()) -- fails somehow
-function lpdf.checkedkey(t,key,kind)
- local pn = t[key]
- if pn then
- local tn = type(pn)
- if tn == kind then
- if kind == "string" then
- return pn ~= "" and pn
- elseif kind == "table" then
- return next(pn) and pn
- else
- return pn
- end
- elseif tn == "string" and kind == "number" then
- return tonumber(pn)
- end
- end
-end
-
-function lpdf.checkedvalue(value,kind) -- code not shared
- if value then
- local tv = type(value)
- if tv == kind then
- if kind == "string" then
- return value ~= "" and value
- elseif kind == "table" then
- return next(value) and value
- else
- return value
- end
- elseif tv == "string" and kind == "number" then
- return tonumber(value)
- end
- end
-end
-
-function lpdf.limited(n,min,max,default)
- if not n then
- return default
- else
- n = tonumber(n)
- if not n then
- return default
- elseif n > max then
- return max
- elseif n < min then
- return min
- else
- return n
- end
- end
-end
-
--- there will be more of this
-
-local pdfreference = lpdf.reference
-local pdfdictionary = lpdf.dictionary
-local pdfreserveobj = pdf.reserveobj
-local pdfimmediateobj = pdf.immediateobj
-
-local texset, texsprint, ctxcatcodes = tex.set, tex.sprint, tex.ctxcatcodes
-
-local pdfobjcache = { }
-
-function lpdf.sharedobj(content)
- local r = pdfobjcache[content]
- if not r then
- r = pdfreference(pdfimmediateobj(content))
- pdfobjcache[content] = r
- end
- return r
-end
-
--- saves definitions later on
-
-backends = backends or { }
-backends.pdf = backends.pdf or {
- comment = "backend for directly generating pdf output",
- nodeinjections = { },
- codeinjections = { },
- registrations = { },
- helpers = { },
-}
+--~ local s = lpdf.boolean(false)
+--~ s.value = true
+--~ print(s)
+--~ print(s())
-- three priority levels, default=2
@@ -409,9 +446,12 @@ local function resetpageproperties()
end
local function setpageproperties()
- texset("global", "pdfpageresources", pageresources ())
- texset("global", "pdfpageattr", pageattributes ())
- texset("global", "pdfpagesattr", pagesattributes())
+--~ texset("global", "pdfpageresources", pageresources ())
+--~ texset("global", "pdfpageattr", pageattributes ())
+--~ texset("global", "pdfpagesattr", pagesattributes())
+ pdf.pageresources = pageresources ()
+ pdf.pageattributes = pageattributes ()
+ pdf.pagesattributes = pagesattributes()
end
function lpdf.addtopageresources (k,v) pageresources [k] = v end
@@ -458,16 +498,39 @@ end
function lpdf.finalizedocument()
if not environment.initex then
run(documentfinalizers,"document")
+ function lpdf.finalizedocument()
+ logs.report("backend","serious error: the document is finalized multiple times")
+ function lpdf.finalizedocument() end
+ end
end
end
-local c_template = "\\normalpdfcatalog{/%s %s}"
-local i_template = "\\normalpdfinfo{/%s %s}"
-local n_template = "\\normalpdfnames{/%s %s}"
+-- some minimal tracing, handy for checking the order
-function lpdf.addtocatalog(k,v) if not environment.initex then texsprint(ctxcatcodes,format(c_template,k,tostring(v))) end end
-function lpdf.addtoinfo (k,v) if not environment.initex then texsprint(ctxcatcodes,format(i_template,k,tostring(v))) end end
-function lpdf.addtonames (k,v) if not environment.initex then texsprint(ctxcatcodes,format(n_template,k,tostring(v))) end end
+local function trace_set(what,key)
+ if trace_resources then
+ logs.report("backend", "setting key '%s' in '%s'",key,what)
+ end
+end
+local function trace_flush(what)
+ if trace_resources then
+ logs.report("backend", "flushing '%s'",what)
+ end
+end
+
+lpdf.protectresources = true
+
+local catalog, info, names = pdfdictionary(), pdfdictionary(), pdfdictionary()
+
+local function flushcatalog() if not environment.initex then trace_flush("catalog") pdf.catalog = catalog() end end
+local function flushinfo () if not environment.initex then trace_flush("info") pdf.info = info () end end
+local function flushnames () if not environment.initex then trace_flush("names") pdf.names = names () end end
+
+function lpdf.addtocatalog(k,v) if not (lpdf.protectresources and catalog[k]) then trace_set("catalog",k) catalog[k] = v end end
+function lpdf.addtoinfo (k,v) if not (lpdf.protectresources and info [k]) then trace_set("info", k) info [k] = v end end
+function lpdf.addtonames (k,v) if not (lpdf.protectresources and names [k]) then trace_set("names", k) names [k] = v end end
+
+local dummy = pdfreserveobj() -- else bug in hvmd due so some internal luatex conflict
local r_extgstates, d_extgstates = pdfreserveobj(), pdfdictionary() local p_extgstates = pdfreference(r_extgstates)
local r_colorspaces, d_colorspaces = pdfreserveobj(), pdfdictionary() local p_colorspaces = pdfreference(r_colorspaces)
@@ -479,10 +542,10 @@ local function checkcolorspaces() if next(d_colorspaces) then lpdf.addtopagereso
local function checkpatterns () if next(d_patterns ) then lpdf.addtopageresources("Pattern", p_patterns ) end end
local function checkshades () if next(d_shades ) then lpdf.addtopageresources("Shading", p_shades ) end end
-local function flushextgstates () if next(d_extgstates ) then pdfimmediateobj(r_extgstates, tostring(d_extgstates )) end end
-local function flushcolorspaces() if next(d_colorspaces) then pdfimmediateobj(r_colorspaces,tostring(d_colorspaces)) end end
-local function flushpatterns () if next(d_patterns ) then pdfimmediateobj(r_patterns, tostring(d_patterns )) end end
-local function flushshades () if next(d_shades ) then pdfimmediateobj(r_shades, tostring(d_shades )) end end
+local function flushextgstates () if next(d_extgstates ) then trace_flush("extgstates") pdfimmediateobj(r_extgstates, tostring(d_extgstates )) end end
+local function flushcolorspaces() if next(d_colorspaces) then trace_flush("colorspaces") pdfimmediateobj(r_colorspaces,tostring(d_colorspaces)) end end
+local function flushpatterns () if next(d_patterns ) then trace_flush("patterns") pdfimmediateobj(r_patterns, tostring(d_patterns )) end end
+local function flushshades () if next(d_shades ) then trace_flush("shades") pdfimmediateobj(r_shades, tostring(d_shades )) end end
local collected = pdfdictionary {
ExtGState = p_extgstates,
@@ -505,15 +568,103 @@ lpdf.registerdocumentfinalizer(flushcolorspaces,3)
lpdf.registerdocumentfinalizer(flushpatterns,3)
lpdf.registerdocumentfinalizer(flushshades,3)
+lpdf.registerdocumentfinalizer(flushcatalog,3)
+lpdf.registerdocumentfinalizer(flushinfo,3)
+lpdf.registerdocumentfinalizer(flushnames,3)
+
lpdf.registerpagefinalizer(checkextgstates,3)
lpdf.registerpagefinalizer(checkcolorspaces,3)
lpdf.registerpagefinalizer(checkpatterns,3)
lpdf.registerpagefinalizer(checkshades,3)
---
+-- in strc-bkm: lpdf.registerdocumentfinalizer(function() structure.bookmarks.place() end,1)
function lpdf.rotationcm(a)
local s, c = sind(a), cosd(a)
texwrite(format("%s %s %s %s 0 0 cm",c,s,-s,c))
end
+-- ! -> universaltime
+
+local timestamp = os.date("%Y-%m-%dT%X") .. os.timezone(true)
+
+function lpdf.timestamp()
+ return timestamp
+end
+
+function lpdf.pdftimestamp(str)
+ local Y, M, D, h, m, s, Zs, Zh, Zm = match(str,"^(%d%d%d%d)%-(%d%d)%-(%d%d)T(%d%d):(%d%d):(%d%d)([%+%-])(%d%d):(%d%d)$")
+ return Y and format("D:%s%s%s%s%s%s%s%s'%s'",Y,M,D,h,m,s,Zs,Zh,Zm)
+end
+
+function lpdf.id()
+ return format("%s.%s",tex.jobname,timestamp)
+end
+
+function lpdf.checkedkey(t,key,kind)
+ local pn = t[key]
+ if pn then
+ local tn = type(pn)
+ if tn == kind then
+ if kind == "string" then
+ return pn ~= "" and pn
+ elseif kind == "table" then
+ return next(pn) and pn
+ else
+ return pn
+ end
+ elseif tn == "string" and kind == "number" then
+ return tonumber(pn)
+ end
+ end
+end
+
+function lpdf.checkedvalue(value,kind) -- code not shared
+ if value then
+ local tv = type(value)
+ if tv == kind then
+ if kind == "string" then
+ return value ~= "" and value
+ elseif kind == "table" then
+ return next(value) and value
+ else
+ return value
+ end
+ elseif tv == "string" and kind == "number" then
+ return tonumber(value)
+ end
+ end
+end
+
+function lpdf.limited(n,min,max,default)
+ if not n then
+ return default
+ else
+ n = tonumber(n)
+ if not n then
+ return default
+ elseif n > max then
+ return max
+ elseif n < min then
+ return min
+ else
+ return n
+ end
+ end
+end
+
+-- lpdf.addtoinfo("ConTeXt.Version", tex.contextversiontoks)
+-- lpdf.addtoinfo("ConTeXt.Time", os.date("%Y.%m.%d %H:%M")) -- :%S
+-- lpdf.addtoinfo("ConTeXt.Jobname", tex.jobname)
+-- lpdf.addtoinfo("ConTeXt.Url", "www.pragma-ade.com")
+
+-- saves definitions later on
+
+backends = backends or { }
+backends.pdf = backends.pdf or {
+ comment = "backend for directly generating pdf output",
+ nodeinjections = { },
+ codeinjections = { },
+ registrations = { },
+ helpers = { },
+}
diff --git a/Master/texmf-dist/tex/context/base/lpdf-ini.mkiv b/Master/texmf-dist/tex/context/base/lpdf-ini.mkiv
index 771ed3c5817..7c7dce3efb3 100644
--- a/Master/texmf-dist/tex/context/base/lpdf-ini.mkiv
+++ b/Master/texmf-dist/tex/context/base/lpdf-ini.mkiv
@@ -14,6 +14,7 @@
\writestatus{loading}{ConTeXt Backend Macros / PDF}
\registerctxluafile{lpdf-ini}{1.001}
+\registerctxluafile{lpdf-xmp}{1.001}
\registerctxluafile{lpdf-nod}{1.001}
%registerctxluafile{lpdf-col}{1.001} % will be loaded later
\registerctxluafile{lpdf-mis}{1.001}
@@ -23,7 +24,7 @@
\registerctxluafile{lpdf-wid}{1.001}
\registerctxluafile{lpdf-fld}{1.001}
\registerctxluafile{lpdf-u3d}{1.001}
-
+\registerctxluafile{lpdf-swf}{1.001}
\unprotect
@@ -37,7 +38,8 @@
%D
%D For drawing ovals we use quite raw \PDF\ code. The next
%D implementation does not differ that much from the one
-%D implemented in the \POSTSCRIPT\ driver.
+%D implemented in the \POSTSCRIPT\ driver. This code is
+%D somewhat obsolete as we now have metapost embedded.
\def\doPDFovalcalc#1#2#3%
{\PointsToBigPoints{\dimexpr#1+#2\relax}#3}
@@ -257,4 +259,13 @@
\wd\scratchbox#1\ht\scratchbox#2\dp\scratchbox#3\box\scratchbox
\egroup}
+\unexpanded\def\pdfactualtext#1#2%
+ {\pdfliteral direct{/Span <</ActualText \ctxlua{tex.write(lpdf.tosixteen("#2"))} >> BDC}%
+ #1%
+ \pdfliteral direct{EMC}}
+
+% \starttext
+% text \pdfactualtext{Meier}{Müller} text
+% \stoptext
+
\protect \endinput
diff --git a/Master/texmf-dist/tex/context/base/lpdf-mis.lua b/Master/texmf-dist/tex/context/base/lpdf-mis.lua
index 142b3257403..a68c7b4873d 100644
--- a/Master/texmf-dist/tex/context/base/lpdf-mis.lua
+++ b/Master/texmf-dist/tex/context/base/lpdf-mis.lua
@@ -1,6 +1,6 @@
if not modules then modules = { } end modules ['lpdf-mis'] = {
version = 1.001,
- comment = "companion to back-pdf.tex",
+ comment = "companion to lpdf-ini.mkiv",
author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
copyright = "PRAGMA ADE / ConTeXt Development Team",
license = "see context related readme files"
@@ -28,24 +28,21 @@ local copy_node = node.copy
local pdfliteral, register = nodes.pdfliteral, nodes.register
-local pdfdictionary = lpdf.dictionary
-local pdfarray = lpdf.array
-local pdfboolean = lpdf.boolean
-local pdfconstant = lpdf.constant
-local pdfreference = lpdf.reference
-local pdfunicode = lpdf.unicode
-local pdfstring = lpdf.string
+local pdfdictionary = lpdf.dictionary
+local pdfarray = lpdf.array
+local pdfboolean = lpdf.boolean
+local pdfconstant = lpdf.constant
+local pdfreference = lpdf.reference
+local pdfunicode = lpdf.unicode
+local pdfverbose = lpdf.verbose
+local pdfstring = lpdf.string
+local pdfflushobject = lpdf.flushobject
-local pdfreserveobj = pdf.reserveobj
local pdfimmediateobj = pdf.immediateobj
local tobasepoints = number.tobasepoints
-
local variables = interfaces.variables
-lpdf.addtoinfo ("Trapped", pdfboolean(false))
-lpdf.addtocatalog("Version", pdfconstant(format("1.%s",tex.pdfminorversion)))
-
--
local positive = register(pdfliteral("/GSpositive gs"))
@@ -63,8 +60,8 @@ local function initializenegative()
}
local negative = pdfdictionary { Type = g, TR = pdfreference(pdf.immediateobj("stream","1 exch sub",d())) }
local positive = pdfdictionary { Type = g, TR = pdfconstant("Identity") }
- lpdf.adddocumentextgstate("GSnegative", pdfreference(pdfimmediateobj(tostring(negative))))
- lpdf.adddocumentextgstate("GSPositive", pdfreference(pdfimmediateobj(tostring(positive))))
+ lpdf.adddocumentextgstate("GSnegative", pdfreference(pdfflushobject(negative)))
+ lpdf.adddocumentextgstate("GSPositive", pdfreference(pdfflushobject(positive)))
initializenegative = nil
end
@@ -72,8 +69,8 @@ local function initializeoverprint()
local g = pdfconstant("ExtGState")
local knockout = pdfdictionary { Type = g, OP = false, OPM = 0 }
local overprint = pdfdictionary { Type = g, OP = true, OPM = 1 }
- lpdf.adddocumentextgstate("GSknockout", pdfreference(pdfimmediateobj(tostring(knockout ))))
- lpdf.adddocumentextgstate("GSoverprint", pdfreference(pdfimmediateobj(tostring(overprint))))
+ lpdf.adddocumentextgstate("GSknockout", pdfreference(pdfflushobject(knockout)))
+ lpdf.adddocumentextgstate("GSoverprint", pdfreference(pdfflushobject(overprint)))
initializeoverprint = nil
end
@@ -147,26 +144,40 @@ lpdf.registerdocumentfinalizer(flushdocumentactions)
--- info
function codeinjections.setupidentity(specification)
- local title = specification.title or "" if title ~= "" then
- lpdf.addtoinfo("Title", pdfunicode(title))
+ local title = specification.title or ""
+ if title ~= "" then
+ lpdf.addtoinfo("Title", pdfunicode(title), title)
end
- local subject = specification.subject or "" if subject ~= "" then
- lpdf.addtoinfo("Subject", pdfunicode(subject))
+ local subject = specification.subject or ""
+ if subject ~= "" then
+ lpdf.addtoinfo("Subject", pdfunicode(subject), subject)
end
- local author = specification.author or "" if author ~= "" then
- lpdf.addtoinfo("Author", pdfunicode(author))
+ local author = specification.author or ""
+ if author ~= "" then
+ lpdf.addtoinfo("Author", pdfunicode(author), author) -- '/Author' in /Info, 'Creator' in XMP
end
- local creator = specification.creator or "" if creator ~= "" then
- lpdf.addtoinfo("Creator", pdfunicode(creator))
+ local creator = specification.creator or ""
+ if creator ~= "" then
+ lpdf.addtoinfo("Creator", pdfunicode(creator), creator) -- '/Creator' in /Info, 'CreatorTool' in XMP
end
- local date = specification.date or "" if date ~= "" then
- lpdf.addtoinfo("ModDate", pdfstring(date))
+ lpdf.addtoinfo("CreationDate", pdfstring(lpdf.pdftimestamp(lpdf.timestamp())))
+ local date = specification.date or ""
+ local pdfdate = lpdf.pdftimestamp(date)
+ if pdfdate then
+ lpdf.addtoinfo("ModDate", pdfstring(pdfdate), date)
+ else
+ -- users should enter the date in 2010-01-19T23:27:50+01:00 format
+ -- and if not provided that way we use the creation time instead
+ date = lpdf.timestamp()
+ lpdf.addtoinfo("ModDate", pdfstring(lpdf.pdftimestamp(date)), date)
end
- local keywords = specification.keywords or "" if keywords ~= "" then
+ local keywords = specification.keywords or ""
+ if keywords ~= "" then
keywords = string.gsub(keywords, "[%s,]+", " ")
- lpdf.addtoinfo("Keywords",pdfunicode(keywords))
+ lpdf.addtoinfo("Keywords",pdfunicode(keywords), keywords)
end
- lpdf.addtoinfo("ID", pdfstring(format("%s.%s",tex.jobname,os.date("%Y%m%d.%H%M")))) -- needed for pdf/x
+ local id = lpdf.id()
+ lpdf.addtoinfo("ID", pdfstring(id), id) -- needed for pdf/x
end
local function flushjavascripts()
@@ -181,9 +192,9 @@ local function flushjavascripts()
JS = pdfreference(pdfimmediateobj("stream",script)),
}
a[#a+1] = pdfstring(name)
- a[#a+1] = pdfreference(pdfimmediateobj(tostring(j)))
+ a[#a+1] = pdfreference(pdfflushobject(j))
end
- lpdf.addtonames("JavaScript",pdfreference(pdfimmediateobj(tostring(pdfdictionary{ Names = a }))))
+ lpdf.addtonames("JavaScript",pdfreference(pdfflushobject(pdfdictionary{ Names = a })))
end
end
@@ -226,38 +237,50 @@ end
local function documentspecification()
local spec = pagespecs[pagespec] or pagespecs[variables.default]
- local mode, layout, fit = spec[1], spec[2], spec[3]
- if layout == variables.auto then
- if doublesided then
- spec = pagespecs.doublesided
- mode, layout, fit = spec[1], spec[2], spec[3]
- else
- layout = false
+ if spec then
+ local mode, layout, fit = spec[1], spec[2], spec[3]
+ if layout == variables.auto then
+ if doublesided then
+ spec = pagespecs[variables.doublesided] -- to be checked voor interfaces
+ if spec then
+ mode, layout, fit = spec[1], spec[2], spec[3]
+ end
+ else
+ layout = false
+ end
end
- end
- mode = mode and pdfconstant(mode)
- layout = layout and pdfconstant(layout)
- fit = fit and pdfdictionary { FitWindow = true }
- if layout then
- lpdf.addtocatalog("PageLayout",layout)
- end
- if mode then
- lpdf.addtocatalog("PageMode",mode)
- end
- if fit then
- lpdf.addtocatalog("ViewerPreferences",fit)
+ mode = mode and pdfconstant(mode)
+ layout = layout and pdfconstant(layout)
+ fit = fit and pdfdictionary { FitWindow = true }
+ if layout then
+ lpdf.addtocatalog("PageLayout",layout)
+ end
+ if mode then
+ lpdf.addtocatalog("PageMode",mode)
+ end
+ if fit then
+ lpdf.addtocatalog("ViewerPreferences",fit)
+ end
+ lpdf.addtoinfo ("Trapped", pdfconstant("False")) -- '/Trapped' in /Info, 'Trapped' in XMP
+ lpdf.addtocatalog("Version", pdfconstant(format("1.%s",tex.pdfminorversion)))
end
end
+-- temp hack: the mediabox is not under our control and has a precision of 4 digits
+
local factor = number.dimenfactors.bp
+local function boxvalue(n) -- we could share them
+ return pdfverbose(format("%0.4f",factor * n))
+end
+
local function pagespecification()
local pageheight = tex.pdfpageheight
local box = pdfarray { -- can be cached
- factor * (leftoffset),
- factor * (pageheight-topoffset-height),
- factor * (width-leftoffset),
- factor * (pageheight-topoffset),
+ boxvalue(leftoffset),
+ boxvalue(pageheight-topoffset-height),
+ boxvalue(width-leftoffset),
+ boxvalue(pageheight-topoffset),
}
lpdf.addtopageattributes("CropBox",box) -- mandate for rendering
lpdf.addtopageattributes("TrimBox",box) -- mandate for pdf/x
diff --git a/Master/texmf-dist/tex/context/base/lpdf-nod.lua b/Master/texmf-dist/tex/context/base/lpdf-nod.lua
index f40039b9461..0ae9001232a 100644
--- a/Master/texmf-dist/tex/context/base/lpdf-nod.lua
+++ b/Master/texmf-dist/tex/context/base/lpdf-nod.lua
@@ -1,6 +1,6 @@
if not modules then modules = { } end modules ['lpdf-nod'] = {
version = 1.001,
- comment = "companion to lpdf-ini.tex",
+ comment = "companion to lpdf-ini.mkiv",
author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
copyright = "PRAGMA ADE / ConTeXt Development Team",
license = "see context related readme files"
@@ -20,7 +20,7 @@ local views = { -- beware, we do support the pdf keys but this is *not* official
fith = 2, [variables.width] = 2,
fitv = 3, [variables.height] = 3,
fitb = 4,
- fitbh = 5, [variables.minheight] = 5,
+ fitbh = 5, [variables.minwidth] = 5,
fitbv = 6, [variables.minheight] = 6,
fitr = 7,
}
@@ -31,7 +31,7 @@ function nodes.pdfliteral(str)
return t
end
-function nodes.pdfannot(w,h,d,data,n)
+function nodes.pdfannotation(w,h,d,data,n)
local t = copy_node(pdfannot)
if w and w ~= 0 then t.width = w end
if h and h ~= 0 then t.height = h end
@@ -41,7 +41,7 @@ function nodes.pdfannot(w,h,d,data,n)
return t
end
-function nodes.pdfdest(w,h,d,name,view,n)
+function nodes.pdfdestination(w,h,d,name,view,n)
local t = copy_node(pdfdest)
if w and w ~= 0 then t.width = w end
if h and h ~= 0 then t.height = h end
diff --git a/Master/texmf-dist/tex/context/base/lpdf-pdx.lua b/Master/texmf-dist/tex/context/base/lpdf-pdx.lua
new file mode 100644
index 00000000000..0a440c1e665
--- /dev/null
+++ b/Master/texmf-dist/tex/context/base/lpdf-pdx.lua
@@ -0,0 +1,139 @@
+if not modules then modules = { } end modules ['lpdf-pdx'] = {
+ version = 1.001,
+ comment = "companion to lpdf-ini.mkiv",
+ author = "Peter Rold and Hans Hagen",
+ copyright = "PRAGMA ADE / ConTeXt Development Team",
+ license = "see context related readme files",
+}
+
+local codeinjections = backends.codeinjections -- normally it is registered
+local variables = interfaces.variables
+
+local pdfdictionary = lpdf.dictionary
+local pdfarray = lpdf.array
+local pdfconstant = lpdf.constant
+local pdfreference = lpdf.reference
+local pdfflushobject = lpdf.flushobject
+local pdfstring = lpdf.string
+local pdfverbose = lpdf.verbose
+
+local lower, gmatch = string.lower, string.gmatch
+
+local channels = {
+ gray = 1,
+ grey = 1,
+ rgb = 3,
+ cmyk = 4,
+}
+
+local prefixes = {
+ gray = "DefaultGray",
+ grey = "DefaultGray",
+ rgb = "DefaultRGB",
+ cmyk = "DefaultCMYK",
+}
+
+local profiles = { }
+local defaults = { }
+local intents = pdfarray()
+local lastprofile = nil
+
+function codeinjections.useinternalICCprofile(colorspace,filename)
+ local name = lower(file.basename(filename))
+ local profile = profiles[name]
+ if not profile then
+ local colorspace = lower(colorspace)
+ local filename = resolvers.findctxfile(filename) or ""
+ local channel = channels[colorspace]
+ if channel and filename ~= "" then
+ local a = pdfdictionary { N = channel }
+ profile = pdf.obj {
+ compresslevel = 0,
+ immediate = true,
+ type = "stream",
+ file = filename,
+ attr = a(),
+ }
+ profiles[name] = profile
+ end
+ end
+ lastprofile = profile
+ return profile
+end
+
+function codeinjections.useexternalICCprofile(colorspace,name,urls,checksum,version)
+ local profile = profiles[name]
+ if not profile then
+ local u = pdfarray()
+ for url in gmatch(urls,"([^, ]+)") do
+ u[#u+1] = pdfdictionary {
+ FS = pdfconstant("URL"),
+ F = pdfstring(url),
+ }
+ end
+ local d = pdfdictionary {
+ ProfileName = name, -- not file name!
+ ProfileCS = colorspace,
+ URLs = u, -- array containing at least one URL
+ CheckSum = pdfverbose { "<", checksum, ">" }, -- 16byte MD5 hash
+ ICCVersion = pdfverbose { "<", version, ">" }, -- bytes 8..11 from the header of the ICC profile, as a hex string
+ }
+ local n = pdfflushobject(d)
+ profiles[name] = n
+ lastprofile = n
+ return n
+ end
+end
+
+local function embedprofile(colorspace,filename)
+ local colorspace = lower(colorspace)
+ local n = codeinjections.useinternaliccprofile(colorspace,filename)
+ if n then
+ local a = pdfarray {
+ pdfconstant("ICCBased"),
+ pdfreference(n),
+ }
+ lpdf.adddocumentcolorspace(prefixes[colorspace],pdfreference(pdfflushobject(a))) -- part of page /Resources
+ defaults[lower(colorspace)] = filename
+ end
+end
+
+
+function codeinjections.useICCdefaultprofile(colorspace,filename)
+ defaults[lower(colorspace)] = filename
+end
+
+local function flushembeddedprofiles()
+ for colorspace, filename in next, defaults do
+ embedprofile(colorspace,filename)
+ end
+end
+
+function codeinjections.usePDFXoutputintent(id,name,reference,outputcondition,info)
+ local d = {
+ Type = pdfconstant("OutputIntent"),
+ S = pdfconstant("GTS_PDFX"),
+ OutputConditionIdentifier = id,
+ RegistryName = name,
+ OutputCondition = outputcondition,
+ Info = info,
+ }
+ local icc = lastprofile
+ if reference == variables.yes then
+ d["DestOutputProfileRef"] = pdfreference(icc)
+ else
+ d["DestOutputProfile"] = pdfreference(icc)
+ end
+ -- intents[#intents+1] = pdfdictionary(d)
+ intents[#intents+1] = pdfreference(pdfflushobject(pdfdictionary(d))) -- nicer as separate object
+end
+
+local function flushoutputintents()
+ if #intents > 0 then
+ lpdf.addtocatalog("OutputIntents",pdfreference(pdfflushobject(intents)))
+ end
+end
+
+
+lpdf.registerdocumentfinalizer(flushoutputintents,1)
+lpdf.registerdocumentfinalizer(flushembeddedprofiles,1)
diff --git a/Master/texmf-dist/tex/context/base/lpdf-pdx.mkiv b/Master/texmf-dist/tex/context/base/lpdf-pdx.mkiv
new file mode 100644
index 00000000000..ffb7f526976
--- /dev/null
+++ b/Master/texmf-dist/tex/context/base/lpdf-pdx.mkiv
@@ -0,0 +1,71 @@
+%D \module
+%D [ file=lpdf-pdx,
+%D version=2010.02.11,
+%D title=\CONTEXT\ Backend Macros,
+%D subtitle=PDF-X,
+%D author=Peter Rolf \& Hans Hagen,
+%D date=\currentdate,
+%D copyright=\PRAGMA] % and peter
+%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 Backend Macros / PDF-X}
+
+\unprotect
+
+% declare default color space
+% all device based entries of the same CS are mapped to the defined ICCprofile then;
+% i.e. /DeviceRGB --> /ICCBased RGB profile
+% TODO: allow multiple default profiles (one per CS)
+%
+% external ICC profile dictionary (PDF/X-4p and PDF/X-5p)
+%
+% - ProfileName (not file name!)
+% - URLs (array containing at least one URL); the keyword FSA is wrong!
+% - CheckSum (16byte MD5 hash)
+% - ProfileCS (GRAY,RGB,CMYK)
+% - ICCVersion (bytes 8..11 from the header of the ICC profile, as a hex string)
+
+\registerctxluafile{lpdf-pdx} {}
+
+% \def\embedICCprofile#1#2% colorspace, name
+% {\ctxlua{backends.codeinjections.addiccprofile("#1","#2")}}
+
+\def\douseinternalICCprofile[#1]%
+ {\getparameters[\??ic][colorspace=,filename=,#1]%
+ \ctxlua{backends.codeinjections.useinternalICCprofile(
+ "\@@iccolorspace","\@@icfilename")}}
+
+% create a dictionary for an external ICC profile (PDF/X-4p and PDF/X-5pg only)
+% the referenced ICC profile is not embedded
+
+\def\douseexternalICCprofile[#1]%
+ {\getparameters[\??ic][colorspace=,name=,url=,checksum=,version=,#1]%
+ \ctxlua{backends.codeinjections.useexternalICCprofile(
+ "\@@iccolorspace","\@@icname","\@@icurl","\@@icchecksum","\@@icversion")}}
+
+% use an ICC profile as default colorspace for all device dependend colors;
+% all device based entries of the same CS are mapped to the defined ICCprofile then;
+% i.e. /DeviceRGB --> /ICCBased RGB profile always embed the profile!
+
+\def\douseICCdefaultprofile[#1]%
+ {\getparameters[\??ic][colorspace=,filename=,#1]%
+ \ctxlua{backends.codeinjections.useICCdefaultprofile(
+ "\@@iccolorspace","\@@icfilename")}}
+
+% embedding rules for output intent profile differ for the PDF/X versions
+
+\def\dousePDFXoutputintent[#1]%
+ {\getparameters[\??ic][reference=\v!yes,outputcondition=,info=,id=,name=,#1]%
+ \ctxlua{backends.codeinjections.usePDFXoutputintent(
+ "\@@icid","\@@icname","\@@icreference","\@@icoutputcondition","\@@icinfo")}}
+
+\def\useinternalICCprofile{\dosingleempty\douseinternalICCprofile}
+\def\useexternalICCprofile{\dosingleempty\douseexternalICCprofile}
+\def\useICCdefaultprofile {\dosingleempty\douseICCdefaultprofile }
+\def\usePDFXoutputintent {\dosingleempty\dousePDFXoutputintent }
+
+\protect \endinput
+
diff --git a/Master/texmf-dist/tex/context/base/lpdf-ren.lua b/Master/texmf-dist/tex/context/base/lpdf-ren.lua
index 746db7efd1a..e6bbd67fe2e 100644
--- a/Master/texmf-dist/tex/context/base/lpdf-ren.lua
+++ b/Master/texmf-dist/tex/context/base/lpdf-ren.lua
@@ -1,6 +1,6 @@
if not modules then modules = { } end modules ['lpdf-ren'] = {
version = 1.001,
- comment = "companion to lpdf-ini.tex",
+ comment = "companion to lpdf-ini.mkiv",
author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
copyright = "PRAGMA ADE / ConTeXt Development Team",
license = "see context related readme files"
@@ -29,13 +29,11 @@ local executers = jobreferences.executers
local variables = interfaces.variables
-local pdfconstant = lpdf.constant
-local pdfdictionary = lpdf.dictionary
-local pdfarray = lpdf.array
-local pdfreference = lpdf.reference
-
-local pdfreserveobj = pdf.reserveobj
-local pdfimmediateobj = pdf.immediateobj
+local pdfconstant = lpdf.constant
+local pdfdictionary = lpdf.dictionary
+local pdfarray = lpdf.array
+local pdfreference = lpdf.reference
+local pdfflushobject = lpdf.flushobject
local pdf_ocg = pdfconstant("OCG")
local pdf_ocmd = pdfconstant("OCMD")
@@ -66,13 +64,13 @@ function codeinjections.defineviewerlayer(specification)
Intent = ((specification.kind > 0) and pdf_design) or nil, -- disable layer hiding by user
Usage = ((specification.printable == variables.no) and lpdf_usage) or nil , -- printable or not
}
- local nr = pdfreference(pdfimmediateobj(tostring(n)))
+ local nr = pdfreference(pdfflushobject(n))
pdfln[tag] = nr -- was n
local d = pdfdictionary {
Type = pdf_ocmd,
OCGs = pdfarray { nr },
}
- local dr = pdfreference(pdfimmediateobj(tostring(d)))
+ local dr = pdfreference(pdfflushobject(d))
pdfld[tag] = dr
textlayers[#textlayers+1] = nr
if specification.visible == variables.start then
diff --git a/Master/texmf-dist/tex/context/base/lpdf-swf.lua b/Master/texmf-dist/tex/context/base/lpdf-swf.lua
new file mode 100644
index 00000000000..9fe0cd09fc8
--- /dev/null
+++ b/Master/texmf-dist/tex/context/base/lpdf-swf.lua
@@ -0,0 +1,109 @@
+if not modules then modules = { } end modules ['lpdf-swf'] = {
+ version = 1.001,
+ comment = "companion to lpdf-ini.mkiv",
+ author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
+ copyright = "PRAGMA ADE / ConTeXt Development Team",
+ license = "see context related readme files"
+}
+
+-- The following code is based on tests by Luigi Scarso. His prototype
+-- was using tex code. This is the official implementation.
+
+local format = string.format
+
+local pdfconstant = lpdf.constant
+local pdfboolean = lpdf.boolean
+local pdfstring = lpdf.string
+local pdfunicode = lpdf.unicode
+local pdfdictionary = lpdf.dictionary
+local pdfarray = lpdf.array
+local pdfnull = lpdf.null
+local pdfreference = lpdf.reference
+
+function backends.pdf.helpers.insertswf(spec)
+
+ local width, height, filename = spec.width, spec.height, spec.foundname
+
+ local eref = backends.codeinjections.embedfile(filename)
+
+ local flash = pdfdictionary {
+ Subtype = pdfconstant("Flash"),
+ Instances = pdfarray {
+ pdfdictionary {
+ Asset = eref,
+ Params = pdfdictionary {
+ Binding = pdfconstant("Foreground")
+ }
+ },
+ },
+ }
+
+ local fref = pdfreference(pdf.immediateobj(tostring(flash)))
+
+ local configuration = pdfdictionary {
+ Configurations = pdfarray { fref },
+ Assets = pdfdictionary {
+ Names = pdfarray {
+ pdfstring(filename),
+ eref,
+ }
+ },
+ }
+
+ local cref = pdfreference(pdf.immediateobj(tostring(configuration)))
+
+ local activation = pdfdictionary {
+ Activation = pdfdictionary {
+ Type = pdfconstant("RichMediaActivation"),
+ Condition = pdfconstant("PO"),
+ Configuration = fref,
+ Animation = pdfdictionary {
+ Subtype = pdfconstant("Linear"),
+ Speed = 1,
+ Playcount = 1,
+ },
+ Deactivation = pdfdictionary {
+ Type = pdfconstant("RichMediaDeactivation"),
+ Condition = pdfconstant("XD"),
+ },
+ Presentation = pdfdictionary {
+ PassContextClick = false,
+ Style = pdfconstant("Embedded"),
+ Toolbar = false,
+ NavigationPane = false,
+ Transparent = true,
+ Window = pdfdictionary {
+ Type = pdfconstant("RichMediaWindow"),
+ Width = pdfdictionary {
+ Default = 100,
+ Min = 100,
+ Max = 100,
+ },
+ Height = pdfdictionary {
+ Default = 100,
+ Min = 100,
+ Max = 100,
+ },
+ Position = pdfdictionary {
+ Type = pdfconstant("RichMediaPosition"),
+ HAlign = pdfconstant("Near"),
+ VAlign = pdfconstant("Near"),
+ HOffset = 0,
+ VOffset = 0,
+ }
+ }
+ }
+ }
+ }
+
+ local aref = pdfreference(pdf.immediateobj(tostring(activation)))
+
+ local annotation = pdfdictionary {
+ Subtype = pdfconstant("RichMedia"),
+ RichMediaContent = cref,
+ RichMediaSettings = aref,
+ }
+
+ return annotation, nil, nil
+
+end
diff --git a/Master/texmf-dist/tex/context/base/lpdf-u3d.lua b/Master/texmf-dist/tex/context/base/lpdf-u3d.lua
index 5f7a770b160..f7a62c6c904 100644
--- a/Master/texmf-dist/tex/context/base/lpdf-u3d.lua
+++ b/Master/texmf-dist/tex/context/base/lpdf-u3d.lua
@@ -1,6 +1,6 @@
if not modules then modules = { } end modules ['lpdf-u3d'] = {
version = 1.001,
- comment = "companion to lpdf-ini.tex",
+ comment = "companion to lpdf-ini.mkiv",
author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
copyright = "PRAGMA ADE / ConTeXt Development Team",
license = "see context related readme files"
@@ -13,19 +13,22 @@ if not modules then modules = { } end modules ['lpdf-u3d'] = {
-- an overhaul. There are some messy leftovers that will be
-- removed in future versions.
-local format = string.format
+local format, find = string.format, string.find
local cos, sin, sqrt, pi, atan2, abs = math.cos, math.sin, math.sqrt, math.pi, math.atan2, math.abs
-local pdfconstant = lpdf.constant
-local pdfboolean = lpdf.boolean
-local pdfunicode = lpdf.unicode
-local pdfdictionary = lpdf.dictionary
-local pdfarray = lpdf.array
-local pdfnull = lpdf.null
-local pdfreference = lpdf.reference
+local pdfconstant = lpdf.constant
+local pdfboolean = lpdf.boolean
+local pdfnumber = lpdf.number
+local pdfunicode = lpdf.unicode
+local pdfdictionary = lpdf.dictionary
+local pdfarray = lpdf.array
+local pdfnull = lpdf.null
+local pdfreference = lpdf.reference
-local checkedkey = lpdf.checkedkey
-local limited = lpdf.limited
+local pdfimmediateobj = pdf.immediateobj
+
+local checkedkey = lpdf.checkedkey
+local limited = lpdf.limited
local schemes = table.tohash {
"Artwork", "None", "White", "Day", "Night", "Hard",
@@ -62,13 +65,14 @@ end
local function make3dview(view)
- local name = viewname
- local name = pdfunicode((view.name ~= "" and name) or "unknown view")
+ local name = view.name
+ local name = pdfunicode(name ~= "" and name or "unknown view")
local viewdict = pdfdictionary {
- Type = pdfconstant("3DView"),
- XN = name,
- IN = name,
+ Type = pdfconstant("3DView"),
+ XN = name,
+ IN = name,
+ NR = true,
}
local bg = checkedkey(view,"bg","table")
@@ -312,25 +316,21 @@ local function make3dview(view)
local node = checkedkey(nodes,i,"table")
if node then
local position = checkedkey(node,"position","table")
- position = position and #position == 12 and pdfarray(position)
- if position then
- nodelist[#nodelist+1] = pdfdictionary {
- Type = pdfconstant("3DNode"),
- N = node.name or ("node_" .. i), -- pdfunicode ?
- V = node.visible or true,
- O = node.opacity or 0,
- RM = pdfdictionary {
- Type = pdfconstant("3DRenderMode"),
- Subtype = pdfconstant(node.rendermode or "Solid"),
- },
- M = position,
- }
- end
+ nodelist[#nodelist+1] = pdfdictionary {
+ Type = pdfconstant("3DNode"),
+ N = node.name or ("node_" .. i), -- pdfunicode ?
+ M = position and #position == 12 and pdfarray(position),
+ V = node.visible or true,
+ O = node.opacity or 0,
+ RM = pdfdictionary {
+ Type = pdfconstant("3DRenderMode"),
+ Subtype = pdfconstant(node.rendermode or "Solid"),
+ },
+ }
end
end
- viewdict.NR = true
viewdict.NA = nodelist
- end
+ end
return viewdict
@@ -349,14 +349,24 @@ function backends.pdf.helpers.insert3d(spec) -- width, height, factor, display,
local activationdict = pdfdictionary {
TB = pdfboolean(param.toolbar,true),
- NP = pdfboolean(param.tree,true),
+ NP = pdfboolean(param.tree,false),
}
local stream = streams[label]
if not stream then
+
+ local subtype, subdata = "U3D", io.loaddata(foundname) or ""
+ if find(subdata,"^PRC") then
+ subtype = "PRC"
+ elseif find(subdata,"^U3D") then
+ subtype = "U3D"
+ elseif file.extname(foundname) == "prc" then
+ subtype = "PRC"
+ end
+
local attr = pdfdictionary {
Type = pdfconstant("3D"),
- Subtype = pdfconstant("U3D"),
+ Subtype = pdfconstant(subtype),
}
local streamviews = checkedkey(streamparam, "views", "table")
if streamviews then
@@ -378,12 +388,12 @@ function backends.pdf.helpers.insert3d(spec) -- width, height, factor, display,
if js then
local jsref = stored_js[js]
if not jsref then
- jsref = pdf.immediateobj("streamfile",js)
+ jsref = pdfimmediateobj("streamfile",js)
stored_js[js] = jsref
end
attr.OnInstantiate = pdfreference(jsref)
end
- stored_3d[label] = pdf.immediateobj("streamfile",foundname,attr())
+ stored_3d[label] = pdfimmediateobj("streamfile",foundname,attr())
stream = 1
else
stream = stream + 1
@@ -412,13 +422,50 @@ function backends.pdf.helpers.insert3d(spec) -- width, height, factor, display,
local tag = format("%s:%s:%s",label,stream,preview)
local ref = stored_pr[tag]
if not ref then
- -- weird, has to be a /Form and not an /Image so we need a wrap = true key
- -- local figure = img.immediatewrite { filename = preview, width = width, height = height }
- local figure = img.immediatewrite { stream = ".5 .75 .75 rg 0 0 20 10 re f", bbox = {0,0,20,10 } }
+ local figure = img.immediatewrite {
+ filename = preview,
+ width = width,
+ height = height
+ }
+ -- local figure = img.immediatewrite {
+ -- stream = ".5 .75 .75 rg 0 0 20 10 re f",
+ -- bbox = { 0, 0, 20, 10 }
+ -- }
ref = figure.objnum
stored_pr[tag] = ref
end
- annot.AP = ref and pdfdictionary { N = pdfreference(ref) }
+ if ref then
+ local zero, one = pdfnumber(0), pdfnumber(1) -- not really needed
+ local pw = pdfdictionary {
+ Type = pdfconstant("XObject"),
+ Subtype = pdfconstant("Form"),
+ FormType = one,
+ BBox = pdfarray { zero, zero, pdfnumber(factor*width), pdfnumber(factor*height) },
+ Matrix = pdfarray { one, zero, zero, one, zero, zero },
+ Resources = pdfdictionary {
+ XObject = pdfdictionary {
+ IM = pdfreference(ref)
+ }
+ },
+ ExtGState = pdfdictionary {
+ GS = pdfdictionary {
+ Type = pdfconstant("ExtGState"),
+ CA = one,
+ ca = one,
+ }
+ },
+ ProcSet = pdfarray { pdfconstant("PDF"), pdfconstant("ImageC") },
+ }
+ local pwd = pdfimmediateobj(
+ "stream",
+ format("q /GS gs %s 0 0 %s 0 0 cm /IM Do Q",
+ factor*width,factor*height),
+ pw()
+ )
+ annot.AP = pdfdictionary {
+ N = pdfreference(pwd)
+ }
+ end
return annot, figure, ref
else
activationdict.A = pdfconstant("PV")
diff --git a/Master/texmf-dist/tex/context/base/lpdf-wid.lua b/Master/texmf-dist/tex/context/base/lpdf-wid.lua
index c87192b3acd..40a81e7d4d9 100644
--- a/Master/texmf-dist/tex/context/base/lpdf-wid.lua
+++ b/Master/texmf-dist/tex/context/base/lpdf-wid.lua
@@ -1,6 +1,6 @@
if not modules then modules = { } end modules ['lpdf-wid'] = {
version = 1.001,
- comment = "companion to lpdf-ini.tex",
+ comment = "companion to lpdf-ini.mkiv",
author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
copyright = "PRAGMA ADE / ConTeXt Development Team",
license = "see context related readme files"
@@ -16,16 +16,23 @@ local registrations = backends.pdf.registrations
local executers = jobreferences.executers
local variables = interfaces.variables
-local pdfconstant = lpdf.constant
-local pdfdictionary = lpdf.dictionary
-local pdfarray = lpdf.array
-local pdfreference = lpdf.reference
-local pdfunicode = lpdf.unicode
-local pdfcolorspec = lpdf.colorspec
+local pdfconstant = lpdf.constant
+local pdfdictionary = lpdf.dictionary
+local pdfarray = lpdf.array
+local pdfreference = lpdf.reference
+local pdfunicode = lpdf.unicode
+local pdfstring = lpdf.string
+local pdfcolorspec = lpdf.colorspec
+local pdfflushobject = lpdf.flushobject
+local pdfreserveobject = lpdf.reserveobject
local pdfreserveobj = pdf.reserveobj
local pdfimmediateobj = pdf.immediateobj
+local pdfannotation = nodes.pdfannotation
+
+local hpack_node, write_node = node.hpack, node.write
+
-- symbols
local presets = { } -- xforms
@@ -38,12 +45,16 @@ function codeinjections.registeredsymbol(name)
return presets[name]
end
+function codeinjections.presetsymbol(symbol)
+ if not presets[symbol] then
+ texsprint(ctxcatcodes,format("\\predefinesymbol[%s]",symbol))
+ end
+end
+
function codeinjections.presetsymbollist(list)
if list then
- for s in gmatch(list,"[^, ]+") do
- if not presets[s] then
- texsprint(ctxcatcodes,format("\\predefinesymbol[%s]",s))
- end
+ for symbol in gmatch(list,"[^, ]+") do
+ codeinjections.presetsymbol(symbol)
end
end
end
@@ -117,17 +128,17 @@ function codeinjections.registercomment(specification)
}
-- watch the nice feed back to tex hack
if usepopupcomments then
- local nd = pdfreserveobj()
- local nc = pdfreserveobj()
+ local nd = pdfreserveobject()
+ local nc = pdfreserveobject()
local c = pdfdictionary {
Subtype = pdfconstant("Popup"),
Parent = pdfreference(nd),
}
d.Popup = pdfreference(nc)
- texbox["commentboxone"] = node.hpack(nodes.pdfannot(0,0,0,d(),nd))
- texbox["commentboxtwo"] = node.hpack(nodes.pdfannot(specification.width,specification.height,0,c(),nc))
+ texbox["commentboxone"] = hpack_node(pdfannotation(0,0,0,d(),nd)) -- current dir
+ texbox["commentboxtwo"] = hpack_node(pdfannotation(specification.width,specification.height,0,c(),nc)) -- current dir
else
- texbox["commentboxone"] = node.hpack(nodes.pdfannot(0,0,0,d()))
+ texbox["commentboxone"] = hpack_node(pdfannotation(0,0,0,d())) -- current dir
texbox["commentboxtwo"] = nil
end
end
@@ -136,6 +147,32 @@ end
local nofattachments, attachments, filestreams = 0, { }, { }
+function codeinjections.embedfile(filename)
+ local r = filestreams[filename]
+ if r == false then
+ return nil
+ elseif r then
+ return r
+ elseif not lfs.isfile(filename) then
+ interfaces.showmessage("interactions",5,filename)
+ filestreams[filename] = false
+ return nil
+ else
+ local basename = file.basename(filename)
+ local a = pdfdictionary { Type = pdfconstant("EmbeddedFile") }
+ local f = pdfimmediateobj("streamfile",filename,a())
+ local d = pdfdictionary {
+ Type = pdfconstant("Filespec"),
+ F = pdfstring(newname or basename),
+ UF = pdfstring(newname or basename),
+ EF = pdfdictionary { F = pdfreference(f) },
+ }
+ local r = pdfreference(pdfflushobject(d))
+ filestreams[filename] = r
+ return r
+ end
+end
+
function codeinjections.attachfile(specification)
local attachment = interactions.attachment(specification.label)
if not attachment then
@@ -156,20 +193,8 @@ function codeinjections.attachfile(specification)
if newname == "" then newname = filename end
local aref = attachments[label]
if not aref then
- if not lfs.isfile(filename) then
- interfaces.showmessage("interactions",5,filename)
- return -- todo: message
- else
- local f = pdf.immediateobj("streamfile",filename)
- filestreams[filename] = f
- local d = pdfdictionary {
- Type = pdfconstant("Filespec"),
- F = newname,
- EF = pdfdictionary { F = pdfreference(d) },
- }
- aref = pdfreference(pdfimmediateobj(tostring(d)))
- attachments[label] = aref
- end
+ aref = codeinjections.embedfile(filename,newname)
+ attachments[label] = aref
end
local name, appearance = analyzesymbol(specification.symbol)
local d = pdfdictionary {
@@ -181,10 +206,12 @@ function codeinjections.attachfile(specification)
OC = analyzelayer(specification.layer),
C = pdfcolorspec(specification.colormodel,specification.colorvalue),
}
+ -- as soon as we can ask for the dimensions of an xform we can
+ -- use them here
local width = specification.width or 0
local height = specification.height or 0
local depth = specification.depth or 0
- node.write(nodes.pdfannot(width,height,depth,d()))
+ write_node(pdfannotation(width,height,depth,d()))
end
function codeinjections.attachmentid(filename)
@@ -241,7 +268,7 @@ local function insertrenderingwindow(label,width,height,specification)
AA = actions,
}
local r = pdfreserveobj("annot")
- node.write(nodes.pdfannot(width,height,0,d(),r)) -- save ref
+ write_node(pdfannotation(width,height,0,d(),r)) -- save ref
return pdfreference(r)
end
@@ -268,7 +295,7 @@ local function insertrendering(specification)
}
}
}
- mf[label] = pdfreference(pdfimmediateobj(tostring(d)))
+ mf[label] = pdfreference(pdfflushobject(d))
if not ms[label] then
mu[label] = insertrenderingwindow(label,0,0,specification.options)
end
@@ -288,7 +315,7 @@ local function insertrenderingobject(specification)
D = pdfreference(unknown), -- not label but objectname, hm
}
}
- mf[label] = pdfreference(pdfimmediateobj(tostring(d)))
+ mf[label] = pdfreference(pdfflushobject(d))
if ms[label] then
insertrenderingwindow(label,0,0,specification)
end
diff --git a/Master/texmf-dist/tex/context/base/lpdf-xmp.lua b/Master/texmf-dist/tex/context/base/lpdf-xmp.lua
new file mode 100644
index 00000000000..c8e7b2b5733
--- /dev/null
+++ b/Master/texmf-dist/tex/context/base/lpdf-xmp.lua
@@ -0,0 +1,165 @@
+if not modules then modules = { } end modules ['lpdf-xmp'] = {
+ version = 1.001,
+ comment = "companion to lpdf-ini.mkiv",
+ author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
+ copyright = "PRAGMA ADE / ConTeXt Development Team",
+ license = "see context related readme files",
+ comment = "with help from Peter Rolf",
+}
+
+local format, random, char, gsub, concat = string.format, math.random, string.char, string.gsub, table.concat
+local xmlfillin = xml.fillin
+
+local trace_xmp = false trackers.register("backend.xmp", function(v) trace_xmp = v end)
+
+local pdfdictionary = lpdf.dictionary
+local pdfconstant = lpdf.constant
+
+-- i wonder why this begin end is empty / w (no time now to look into it)
+
+local xpacket = [[
+<?xpacket begin="" id="%s"?>
+
+%s
+
+<?xpacket end="w"?>]]
+
+local mapping = {
+ -- user defined keys (pdfx:)
+ ["ConTeXt.Jobname"] = "rdf:Description/pdfx:ConTeXt.Jobname",
+ ["ConTeXt.Time"] = "rdf:Description/pdfx:ConTeXt.Time",
+ ["ConTeXt.Url"] = "rdf:Description/pdfx:ConTeXt.Url",
+ ["ConTeXt.Version"] = "rdf:Description/pdfx:ConTeXt.Version",
+ ["ID"] = "rdf:Description/pdfx:ID",
+ ["PTEX.Fullbanner"] = "rdf:Description/pdfx:PTEX.Fullbanner",
+ -- Adobe PDF schema
+ ["Keywords"] = "rdf:Description/pdf:Keywords",
+ ["Producer"] = "rdf:Description/pdf:Producer",
+ -- ["Trapped"] = "rdf:Description/pdf:Trapped", -- '/False' in /Info, but 'False' in XMP
+ -- Dublin Core schema
+ ["Author"] = "rdf:Description/dc:creator/rdf:Seq/rdf:li",
+ ["Format"] = "rdf:Description/dc:format", -- optional, but nice to have
+ ["Subject"] = "rdf:Description/dc:description",
+ ["Title"] = "rdf:Description/dc:title/rdf:Alt/rdf:li",
+ -- XMP Basic schema
+ ["CreateDate"] = "rdf:Description/xmp:CreateDate",
+ ["Creator"] = "rdf:Description/xmp:CreatorTool",
+ ["MetadataDate"] = "rdf:Description/xmp:MetadataDate",
+ ["ModifyDate"] = "rdf:Description/xmp:ModifyDate",
+ -- XMP Media Management schema
+ ["DocumentID"] = "rdf:Description/xmpMM:DocumentID",
+ ["InstanceID"] = "rdf:Description/xmpMM:InstanceID",
+ ["RenditionClass"] = "rdf:Description/xmpMM:RenditionClass", -- PDF/X-4
+ ["VersionID"] = "rdf:Description/xmpMM:VersionID", -- PDF/X-4
+ -- additional entries
+ -- PDF/X
+ ["GTS_PDFXVersion"] = "rdf:Description/pdfxid:GTS_PDFXVersion",
+ -- optional entries
+ -- all what is visible in the 'document properties --> additional metadata' window
+ -- XMP Rights Management schema (optional)
+ ["Marked"] = "rdf:Description/xmpRights:Marked",
+ -- ["Owner"] = "rdf:Description/xmpRights:Owner/rdf:Bag/rdf:li", -- maybe useful (not visible)
+ -- ["UsageTerms"] = "rdf:Description/xmpRights:UsageTerms", -- maybe useful (not visible)
+ ["WebStatement"] = "rdf:Description/xmpRights:WebStatement",
+ -- Photoshop PDF schema (optional)
+ ["AuthorsPosition"] = "rdf:Description/photoshop:AuthorsPosition",
+ ["Copyright"] = "rdf:Description/photoshop:Copyright",
+ ["CaptionWriter"] = "rdf:Description/photoshop:CaptionWriter",
+}
+
+-- maybe some day we will load the xmp file at runtime
+
+local xmp, xmpfile, xmpname = nil, nil, "lpdf-xmp.xml"
+
+function lpdf.setxmpfile(name)
+ xmpfile = resolvers.findctxfile(name) or ""
+ if xmpfile == "" then
+ xmpfile = nil
+ end
+end
+
+local function valid_xmp()
+ if not xmp then
+ local xmpfile = xmpfile or resolvers.find_file(xmpname) or ""
+ local xmpdata = (xmpfile ~= "" and io.loaddata(xmpfile)) or ""
+ xmp = xml.convert(xmpdata)
+ end
+ return xmp
+end
+
+function lpdf.addxmpinfo(tag,value,check)
+ local pattern = mapping[tag]
+ if pattern then
+ xmlfillin(xmp or valid_xmp(),pattern,value,check)
+ end
+end
+
+-- redefined
+
+local addtoinfo = lpdf.addtoinfo
+local addxmpinfo = lpdf.addxmpinfo
+
+function lpdf.addtoinfo(tag,pdfvalue,strvalue)
+ addtoinfo(tag,pdfvalue)
+ addxmpinfo(tag,strvalue or gsub(tostring(pdfvalue),"^%((.*)%)$","%1")) -- hack
+end
+
+-- for the do-it-yourselvers
+
+function lpdf.insertxmpinfo(pattern,whatever,prepend)
+ xml.insert(xmp or valid_xmp(),pattern,whatever,prepend)
+end
+
+function lpdf.injectxmpinfo(pattern,whatever,prepend)
+ xml.inject(xmp or valid_xmp(),pattern,whatever,prepend)
+end
+
+-- flushing
+
+local t = { } for i=1,24 do t[i] = random() end
+
+local function flushxmpinfo()
+
+ commands.freezerandomseed(os.clock()) -- hack
+
+ local t = { } for i=1,24 do t[i] = char(96 + random(26)) end
+ local packetid = concat(t)
+ local time = lpdf.timestamp()
+ addxmpinfo("Producer",format("LuaTeX-%0.2f.%s",tex.luatexversion/100,tex.luatexrevision))
+ addxmpinfo("DocumentID",format("uuid:%s",os.uuid()))
+ addxmpinfo("InstanceID",format("uuid:%s",os.uuid()))
+ addxmpinfo("CreatorTool","LuaTeX + ConTeXt MkIV")
+ addxmpinfo("CreateDate",time)
+ addxmpinfo("ModifyDate",time)
+ addxmpinfo("MetadataDate",time)
+ addxmpinfo("PTEX.Fullbanner", tex.pdftexbanner)
+ local blob = xml.tostring(xml.first(xmp or valid_xmp(),"/x:xmpmeta"))
+ local md = pdfdictionary {
+ Subtype = pdfconstant("XML"),
+ Type = pdfconstant("Metadata"),
+ }
+ if trace_xmp then
+ commands.writestatus("system","xmp data flushed (see log file)")
+ texio.write_nl("log","")
+ texio.write("log","\n% ",(gsub(blob,"[\r\n]","\n%% ")),"\n")
+ end
+ blob = format(xpacket,packetid,blob)
+ if tex.pdfcompresslevel > 0 then
+ blob = gsub(blob,">%s+<","><")
+ end
+ local r = pdf.obj {
+ immediate = true,
+ compresslevel = 0,
+ type = "stream",
+ string = blob,
+ attr = md(),
+ }
+ lpdf.addtocatalog("Metadata",lpdf.reference(r))
+
+ commands.defrostrandomseed() -- hack
+
+end
+
+-- his will be enabled when we can inhibit compression for a stream at the lua end
+
+lpdf.registerdocumentfinalizer(flushxmpinfo,1)
diff --git a/Master/texmf-dist/tex/context/base/lpdf-xmp.xml b/Master/texmf-dist/tex/context/base/lpdf-xmp.xml
new file mode 100644
index 00000000000..2947211bd8e
--- /dev/null
+++ b/Master/texmf-dist/tex/context/base/lpdf-xmp.xml
@@ -0,0 +1,43 @@
+<?xml version="1.0"?>
+
+<x:xmpmeta xmlns:x="adobe:ns:meta/" x:xmptk="Adobe XMP Core 4.2.1-c043 52.372728, 2009/01/18-15:08:04">
+ <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
+ <rdf:Description rdf:about="" xmlns:dc="http://purl.org/dc/elements/1.1/">
+ <dc:format>application/pdf</dc:format>
+ <dc:creator>
+ <rdf:Seq>
+ <rdf:li/>
+ </rdf:Seq>
+ </dc:creator>
+ <dc:description/>
+ <dc:title>
+ <rdf:Alt>
+ <rdf:li xml:lang="x-default"/>
+ </rdf:Alt>
+ </dc:title>
+ </rdf:Description>
+ <rdf:Description rdf:about="" xmlns:pdfx="http://ns.adobe.com/pdfx/1.3/">
+ <pdfx:ConTeXt.Jobname/>
+ <pdfx:ConTeXt.Time/>
+ <pdfx:ConTeXt.Url/>
+ <pdfx:ConTeXt.Version/>
+ <pdfx:ID/>
+ <pdfx:PTEX.Fullbanner/>
+ </rdf:Description>
+ <rdf:Description rdf:about="" xmlns:xmp="http://ns.adobe.com/xap/1.0/">
+ <xmp:CreateDate/>
+ <xmp:CreatorTool/>
+ <xmp:ModifyDate/>
+ <xmp:MetadataDate/>
+ </rdf:Description>
+ <rdf:Description rdf:about="" xmlns:pdf="http://ns.adobe.com/pdf/1.3/">
+ <pdf:Keywords/>
+ <pdf:Producer/>
+ <pdf:Trapped>False</pdf:Trapped>
+ </rdf:Description>
+ <rdf:Description rdf:about="" xmlns:xmpMM="http://ns.adobe.com/xap/1.0/mm/">
+ <xmpMM:DocumentID/>
+ <xmpMM:InstanceID/>
+ </rdf:Description>
+ </rdf:RDF>
+</x:xmpmeta>
diff --git a/Master/texmf-dist/tex/context/base/luat-cbk.lua b/Master/texmf-dist/tex/context/base/luat-cbk.lua
index d8b508c13d6..3cb63ad6ec5 100644
--- a/Master/texmf-dist/tex/context/base/luat-cbk.lua
+++ b/Master/texmf-dist/tex/context/base/luat-cbk.lua
@@ -1,11 +1,15 @@
if not modules then modules = { } end modules ['luat-cbk'] = {
version = 1.001,
- comment = "companion to luat-lib.tex",
+ comment = "companion to luat-lib.mkiv",
author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
copyright = "PRAGMA ADE / ConTeXt Development Team",
license = "see context related readme files"
}
+local insert, remove, find = table.insert, table.remove, string.find
+local collectgarbage, type, next = collectgarbage, type, next
+local round = math.round
+
local trace_checking = false trackers.register("memory.checking", function(v) trace_checking = v end)
--[[ldx--
@@ -14,8 +18,7 @@ your own code into the <l n='tex'/> engine. Here we implement a few handy
auxiliary functions.</p>
--ldx]]--
-callbacks = { }
-callbacks.stack = { }
+callbacks = callbacks or { }
--[[ldx--
<p>When you (temporarily) want to install a callback function, and after a
@@ -23,20 +26,124 @@ while wants to revert to the original one, you can use the following two
functions.</p>
--ldx]]--
+local trace_callbacks = false trackers.register("system.callbacks", function(v) trace_callbacks = v end)
+
+local register_callback, find_callback = callback.register, callback.find
+local frozen, stack = { }, { }
+
+callback.original_register_callback = register_callback
+
+local function frozen_message(what,name)
+ logs.report("callbacks","not %s frozen '%s' (%s)",what,name,frozen[name])
+end
+
+local function frozen_callback(name)
+ return nil, format("callback '%s' is frozen (%s)",name,frozen[name])
+end
+
+local function state(name)
+ local f = find_callback(name)
+ if f == false then
+ return "disabled"
+ elseif f then
+ return "enabled"
+ else
+ return "undefined"
+ end
+end
+
+function callbacks.report()
+ local list = callback.list()
+ for name, func in table.sortedhash(list) do
+ local str = frozen[name]
+ if str then
+ logs.report("callbacks","%s: %s -> %s",state(name),name,str)
+ else
+ logs.report("callbacks","%s: %s",state(name),name)
+ end
+ end
+end
+
+function callbacks.table()
+ local NC, NR, verbatim = context.NC, context.NR, context.type
+ context.starttabulate { "|l|l|p|" }
+ for name, func in table.sortedhash(callback.list()) do
+ NC() verbatim(name) NC() verbatim(state(name)) NC() context(frozen[name] or "") NC() NR()
+ end
+ context.stoptabulate()
+end
+
+function callbacks.freeze(name,freeze)
+ freeze = type(freeze) == "string" and freeze
+--~ print(name)
+ if find(name,"%*") then
+ local pattern = name -- string.simpleesc(name)
+ local list = callback.list()
+ for name, func in next, list do
+ if find(name,pattern) then
+ frozen[name] = freeze or frozen[name] or "frozen"
+ end
+ end
+ else
+ frozen[name] = freeze or frozen[name] or "frozen"
+ end
+end
+
+function callbacks.register(name,func,freeze)
+ if frozen[name] then
+ if trace_callbacks then
+ frozen_message("registering",name)
+ end
+ return frozen_callback(name)
+ elseif freeze then
+ frozen[name] = (type(freeze) == "string" and freeze) or "registered"
+ end
+ return register_callback(name,func)
+end
+
+function callback.register(name,func) -- original
+ if not frozen[name] then
+ return register_callback(name,func)
+ elseif trace_callbacks then
+ frozen_message("registering",name)
+ end
+ return frozen_callback(name)
+end
+
function callbacks.push(name, func)
- if not callbacks.stack[name] then
- callbacks.stack[name] = { }
+ if not frozen[name] then
+ local sn = stack[name]
+ if not sn then
+ sn = { }
+ stack[name] = sn
+ end
+ insert(sn,find_callback(name))
+ register_callback(name, func)
+ elseif trace_callbacks then
+ frozen_message("pushing",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)
+ if not frozen[name] then
+ local sn = stack[name]
+ if not sn or #sn == 0 then
+ -- some error
+ register_callback(name, nil) -- ! really needed
+ else
+ -- this fails: register_callback(name, remove(stack[name]))
+ local func = remove(sn)
+ register_callback(name, func)
+ end
+ end
end
+--~ -- somehow crashes later on
+--~
+--~ callbacks.freeze("find_.*_file","finding file")
+--~ callbacks.freeze("read_.*_file","reading file")
+--~ callbacks.freeze("open_.*_file","opening file")
+
--[[ldx--
<p>The simple case is to remove the callback:</p>
@@ -128,7 +235,6 @@ function garbagecollector.check(size,criterium)
criterium = criterium or garbagecollector.criterium
if not size or (criterium and criterium > 0 and size > criterium) then
if trace_checking then
- local round = math.round or math.floor
local b = collectgarbage("count")
collectgarbage("collect")
local a = collectgarbage("count")
diff --git a/Master/texmf-dist/tex/context/base/luat-cnf.lua b/Master/texmf-dist/tex/context/base/luat-cnf.lua
index 4cfc7278e91..e45aceb79f4 100644
--- a/Master/texmf-dist/tex/context/base/luat-cnf.lua
+++ b/Master/texmf-dist/tex/context/base/luat-cnf.lua
@@ -1,12 +1,12 @@
if not modules then modules = { } end modules ['luat-cnf'] = {
version = 1.001,
- comment = "companion to luat-lib.tex",
+ comment = "companion to luat-lib.mkiv",
author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
copyright = "PRAGMA ADE / ConTeXt Development Team",
license = "see context related readme files"
}
-local format, concat = string.format, table.concat
+local format, concat, find = string.format, table.concat, string.find
luatex = luatex or { }
@@ -26,7 +26,7 @@ function luatex.variables()
local t, x = { }, nil
for _,v in next, luatex.variablenames do
x = resolvers.var_value(v)
- if x and x:find("^%d+$") then
+ if x and find(x,"^%d+$") then
t[v] = tonumber(x)
end
end
@@ -43,18 +43,18 @@ end
local stub = [[
-- checking
-storage = storage or {}
-luatex = luatex or {}
-
--- as soon as possible
-
-luatex.starttime = os.gettimeofday()
+storage = storage or { }
+luatex = luatex or { }
-- we provide our own file handling
texconfig.kpse_init = false
texconfig.shell_escape = 't'
+-- as soon as possible
+
+luatex.starttime = os.gettimeofday()
+
-- this will happen after the format is loaded
function texconfig.init()
diff --git a/Master/texmf-dist/tex/context/base/luat-cod.mkiv b/Master/texmf-dist/tex/context/base/luat-cod.mkiv
index 001cc2aa9c6..d3b37d0e145 100644
--- a/Master/texmf-dist/tex/context/base/luat-cod.mkiv
+++ b/Master/texmf-dist/tex/context/base/luat-cod.mkiv
@@ -146,7 +146,7 @@
{\ctxlua{environment.loadluafile("#1")}}
{\ctxlua{environment.loadluafile("#1",#2)}}}
-\def\registerctxluafile#1#2% name version
+\def\registerctxluafile#1#2% name version (modules and core code)
{\ifproductionrun
\ctxloadluafile{#1}{#2}%
\else
diff --git a/Master/texmf-dist/tex/context/base/luat-dum.lua b/Master/texmf-dist/tex/context/base/luat-dum.lua
index 699a0feefa6..4530c2ef34e 100644
--- a/Master/texmf-dist/tex/context/base/luat-dum.lua
+++ b/Master/texmf-dist/tex/context/base/luat-dum.lua
@@ -13,11 +13,21 @@ statistics = {
starttiming = dummyfunction,
stoptiming = dummyfunction,
}
+directives = {
+ register = dummyfunction,
+ enable = dummyfunction,
+ disable = dummyfunction,
+}
trackers = {
register = dummyfunction,
enable = dummyfunction,
disable = dummyfunction,
}
+experiments = {
+ register = dummyfunction,
+ enable = dummyfunction,
+ disable = dummyfunction,
+}
storage = {
register = dummyfunction,
shared = { },
@@ -32,6 +42,9 @@ tasks = {
appendaction = dummyfunction,
prependaction = dummyfunction,
}
+callbacks = {
+ register = function(n,f) return callback.register(n,f) end,
+}
-- we need to cheat a bit here
@@ -44,13 +57,14 @@ local remapper = {
ttf = "truetype fonts",
ttc = "truetype fonts",
dfont = "truetype dictionary",
- cid = "other text files", -- will become "cid files"
+ cid = "cid maps",
+ fea = "font feature files",
}
function resolvers.find_file(name,kind)
name = string.gsub(name,"\\","\/")
kind = string.lower(kind)
- return kpse.find_file(name,(kind and kind ~= "" and (remapper[kind] or kind)) or "tex")
+ return kpse.find_file(name,(kind and kind ~= "" and (remapper[kind] or kind)) or file.extname(name,"tex"))
end
function resolvers.findbinfile(name,kind)
@@ -59,3 +73,54 @@ function resolvers.findbinfile(name,kind)
end
return resolvers.find_file(name,(kind and remapper[kind]) or kind)
end
+
+-- Caches ... I will make a real stupid version some day when I'm in the
+-- mood. After all, the generic code does not need the more advanced
+-- ConTeXt features. Cached data is not shared between ConTeXt and other
+-- usage as I don't want any dependency at all. Also, ConTeXt might have
+-- different needs and tricks added.
+
+caches = { }
+
+--~ containers.usecache = true
+
+function caches.setpath(category,subcategory)
+ local root = kpse.var_value("TEXMFCACHE") or ""
+ if root == "" then
+ root = kpse.var_value("VARTEXMF") or ""
+ end
+ if root ~= "" then
+ root = file.join(root,category)
+ lfs.mkdir(root)
+ root = file.join(root,subcategory)
+ lfs.mkdir(root)
+ return lfs.isdir(root) and root
+ end
+end
+
+local function makefullname(path,name)
+ if path and path ~= "" then
+ name = "temp-" and name -- clash prevention
+ return file.addsuffix(file.join(path,name),"lua")
+ end
+end
+
+function caches.iswritable(path,name)
+ local fullname = makefullname(path,name)
+ return fullname and file.iswritable(fullname)
+end
+
+function caches.loaddata(path,name)
+ local fullname = makefullname(path,name)
+ if fullname then
+ local data = loadfile(fullname)
+ return data and data()
+ end
+end
+
+function caches.savedata(path,name,data)
+ local fullname = makefullname(path,name)
+ if fullname then
+ table.tofile(fullname,data,'return',false,true,false)
+ end
+end
diff --git a/Master/texmf-dist/tex/context/base/luat-env.lua b/Master/texmf-dist/tex/context/base/luat-env.lua
index 9c05b249ca1..0e21fca31e9 100644
--- a/Master/texmf-dist/tex/context/base/luat-env.lua
+++ b/Master/texmf-dist/tex/context/base/luat-env.lua
@@ -1,6 +1,6 @@
if not modules then modules = { } end modules ['luat-env'] = {
version = 1.001,
- comment = "companion to luat-lib.tex",
+ comment = "companion to luat-lib.mkiv",
author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
copyright = "PRAGMA ADE / ConTeXt Development Team",
license = "see context related readme files"
@@ -12,10 +12,10 @@ if not modules then modules = { } end modules ['luat-env'] = {
-- evolved before bytecode arrays were available and so a lot of
-- code has disappeared already.
-local trace_verbose = false trackers.register("resolvers.verbose", function(v) trace_verbose = v end)
-local trace_locating = false trackers.register("resolvers.locating", function(v) trace_locating = v trackers.enable("resolvers.verbose") end)
+local trace_locating = false trackers.register("resolvers.locating", function(v) trace_locating = v end)
-local format = string.format
+local format, sub, match, gsub, find = string.format, string.sub, string.match, string.gsub, string.find
+local unquote, quote = string.unquote, string.quote
-- precautions
@@ -49,13 +49,14 @@ if not environment.jobname then environ
function environment.initialize_arguments(arg)
local arguments, files = { }, { }
environment.arguments, environment.files, environment.sortedflags = arguments, files, nil
- for index, argument in pairs(arg) do
+ for index=1,#arg do
+ local argument = arg[index]
if index > 0 then
- local flag, value = argument:match("^%-+(.+)=(.-)$")
+ local flag, value = match(argument,"^%-+(.-)=(.-)$")
if flag then
- arguments[flag] = string.unquote(value or "")
+ arguments[flag] = unquote(value or "")
else
- flag = argument:match("^%-+(.+)")
+ flag = match(argument,"^%-+(.+)")
if flag then
arguments[flag] = true
else
@@ -82,25 +83,30 @@ function environment.argument(name,partial)
return arguments[name]
elseif partial then
if not sortedflags then
- sortedflags = { }
- for _,v in pairs(table.sortedkeys(arguments)) do
- sortedflags[#sortedflags+1] = "^" .. v
+ sortedflags = table.sortedkeys(arguments)
+ for k=1,#sortedflags do
+ sortedflags[k] = "^" .. sortedflags[k]
end
environment.sortedflags = sortedflags
end
-- example of potential clash: ^mode ^modefile
- for _,v in ipairs(sortedflags) do
- if name:find(v) then
- return arguments[v:sub(2,#v)]
+ for k=1,#sortedflags do
+ local v = sortedflags[k]
+ if find(name,v) then
+ return arguments[sub(v,2,#v)]
end
end
end
return nil
end
+environment.argument("x",true)
+
function environment.split_arguments(separator) -- rather special, cut-off before separator
local done, before, after = false, { }, { }
- for _,v in ipairs(environment.original_arguments) do
+ local original_arguments = environment.original_arguments
+ for k=1,#original_arguments do
+ local v = original_arguments[k]
if not done and v == separator then
done = true
elseif done then
@@ -117,16 +123,17 @@ function environment.reconstruct_commandline(arg,noquote)
if noquote and #arg == 1 then
local a = arg[1]
a = resolvers.resolve(a)
- a = a:unquote()
+ a = unquote(a)
return a
- elseif next(arg) then
+ elseif #arg > 0 then
local result = { }
- for _,a in ipairs(arg) do -- ipairs 1 .. #n
+ for i=1,#arg do
+ local a = arg[i]
a = resolvers.resolve(a)
- a = a:unquote()
- a = a:gsub('"','\\"') -- tricky
- if a:find(" ") then
- result[#result+1] = a:quote()
+ a = unquote(a)
+ a = gsub(a,'"','\\"') -- tricky
+ if find(a," ") then
+ result[#result+1] = quote(a)
else
result[#result+1] = a
end
@@ -139,17 +146,18 @@ end
if arg then
- -- new, reconstruct quoted snippets (maybe better just remnove the " then and add them later)
+ -- new, reconstruct quoted snippets (maybe better just remove the " then and add them later)
local newarg, instring = { }, false
- for index, argument in ipairs(arg) do
- if argument:find("^\"") then
- newarg[#newarg+1] = argument:gsub("^\"","")
- if not argument:find("\"$") then
+ for index=1,#arg do
+ local argument = arg[index]
+ if find(argument,"^\"") then
+ newarg[#newarg+1] = gsub(argument,"^\"","")
+ if not find(argument,"\"$") then
instring = true
end
- elseif argument:find("\"$") then
- newarg[#newarg] = newarg[#newarg] .. " " .. argument:gsub("\"$","")
+ elseif find(argument,"\"$") then
+ newarg[#newarg] = newarg[#newarg] .. " " .. gsub(argument,"\"$","")
instring = false
elseif instring then
newarg[#newarg] = newarg[#newarg] .. " " .. argument
@@ -204,12 +212,12 @@ function environment.luafilechunk(filename) -- used for loading lua bytecode in
filename = file.replacesuffix(filename, "lua")
local fullname = environment.luafile(filename)
if fullname and fullname ~= "" then
- if trace_verbose then
+ if trace_locating then
logs.report("fileio","loading file %s", fullname)
end
return environment.loadedluacode(fullname)
else
- if trace_verbose then
+ if trace_locating then
logs.report("fileio","unknown file %s", filename)
end
return nil
@@ -229,7 +237,7 @@ function environment.loadluafile(filename, version)
-- when not overloaded by explicit suffix we look for a luc file first
local fullname = (lucname and environment.luafile(lucname)) or ""
if fullname ~= "" then
- if trace_verbose then
+ if trace_locating then
logs.report("fileio","loading %s", fullname)
end
chunk = loadfile(fullname) -- this way we don't need a file exists check
@@ -247,7 +255,7 @@ function environment.loadluafile(filename, version)
if v == version then
return true
else
- if trace_verbose then
+ if trace_locating then
logs.report("fileio","version mismatch for %s: lua=%s, luc=%s", filename, v, version)
end
environment.loadluafile(filename)
@@ -258,12 +266,12 @@ function environment.loadluafile(filename, version)
end
fullname = (luaname and environment.luafile(luaname)) or ""
if fullname ~= "" then
- if trace_verbose then
+ if trace_locating then
logs.report("fileio","loading %s", fullname)
end
chunk = loadfile(fullname) -- this way we don't need a file exists check
if not chunk then
- if verbose then
+ if trace_locating then
logs.report("fileio","unknown file %s", filename)
end
else
diff --git a/Master/texmf-dist/tex/context/base/luat-exe.lua b/Master/texmf-dist/tex/context/base/luat-exe.lua
index fd93ad3829b..ca3b751623b 100644
--- a/Master/texmf-dist/tex/context/base/luat-exe.lua
+++ b/Master/texmf-dist/tex/context/base/luat-exe.lua
@@ -1,11 +1,14 @@
if not modules then modules = { } end modules ['luat-exe'] = {
version = 1.001,
- comment = "companion to luat-lib.tex",
+ comment = "companion to luat-lib.mkiv",
author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
copyright = "PRAGMA ADE / ConTeXt Development Team",
license = "see context related readme files"
}
+local match, find = string.match, string.find
+local concat = table.concat
+
if not executer then executer = { } end
executer.permitted = { }
@@ -13,7 +16,9 @@ executer.execute = os.execute
function executer.register(...)
local ep = executer.permitted
- for k,v in pairs({...}) do
+ local t = { ... }
+ for k=1,#t do
+ local v = t[k]
ep[#ep+1] = (v == "*" and ".*") or v
end
end
@@ -24,18 +29,20 @@ function executer.finalize() -- todo: os.exec, todo: report ipv print
local t, name, arguments = {...}, "", ""
if #t == 1 then
if type(t[1]) == 'table' then
- name, arguments = t[1], table.concat(t," ",2,#t)
+ name, arguments = t[1], concat(t," ",2,#t)
else
- name, arguments = t[1]:match("^(.-)%s+(.+)$")
+ name, arguments = 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)
+ name, arguments = t[1], concat(t," ",2,#t)
end
- for _,v in pairs(executer.permitted) do
- if name:find(v) then
+ local permitted = executer.permitted
+ for k=1,#permitted do
+ local v = permitted[k]
+ if find(name,v) then
execute(name .. " " .. arguments)
-- print("executed: " .. name .. " " .. arguments)
else
diff --git a/Master/texmf-dist/tex/context/base/luat-fio.lua b/Master/texmf-dist/tex/context/base/luat-fio.lua
index d8a9a27bf75..0d1bd18087b 100644
--- a/Master/texmf-dist/tex/context/base/luat-fio.lua
+++ b/Master/texmf-dist/tex/context/base/luat-fio.lua
@@ -1,6 +1,6 @@
if not modules then modules = { } end modules ['luat-fio'] = {
version = 1.001,
- comment = "companion to luat-lib.tex",
+ comment = "companion to luat-lib.mkiv",
author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
copyright = "PRAGMA ADE / ConTeXt Development Team",
license = "see context related readme files"
@@ -42,7 +42,7 @@ if not resolvers.instance then
callback.register('find_map_file' , function(name) return resolvers.findbinfile(name,"map") end)
callback.register('find_ocp_file' , function(name) return resolvers.findbinfile(name,"ocp") end)
callback.register('find_opentype_file' , function(name) return resolvers.findbinfile(name,"otf") end)
- callback.register('find_output_file' , function(name) return name end)
+ callback.register('find_output_file' , function(name) return name end)
callback.register('find_pk_file' , function(name) return resolvers.findbinfile(name,"pk") end)
callback.register('find_sfd_file' , function(name) return resolvers.findbinfile(name,"sfd") end)
callback.register('find_truetype_file' , function(name) return resolvers.findbinfile(name,"ttf") end)
@@ -57,7 +57,7 @@ if not resolvers.instance then
callback.register('read_map_file' , function(file) return resolvers.loadbinfile(file,"map") end)
callback.register('read_ocp_file' , function(file) return resolvers.loadbinfile(file,"ocp") end)
-- output
- callback.register('read_pk_file' , function(file) return resolvers.loadbinfile(file,"pk") end)
+ callback.register('read_pk_file' , function(file) return resolvers.loadbinfile(file,"pk") end) -- 600dpi/manfnt.720pk
callback.register('read_sfd_file' , function(file) return resolvers.loadbinfile(file,"sfd") end)
callback.register('read_vf_file' , function(file) return resolvers.loadbinfile(file,"vf" ) end)
diff --git a/Master/texmf-dist/tex/context/base/luat-ini.lua b/Master/texmf-dist/tex/context/base/luat-ini.lua
index 34b59d7e8d5..e6a715c07fa 100644
--- a/Master/texmf-dist/tex/context/base/luat-ini.lua
+++ b/Master/texmf-dist/tex/context/base/luat-ini.lua
@@ -1,6 +1,6 @@
if not modules then modules = { } end modules ['luat-ini'] = {
version = 1.001,
- comment = "companion to luat-lib.tex",
+ comment = "companion to luat-lib.mkiv",
author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
copyright = "PRAGMA ADE / ConTeXt Development Team",
license = "see context related readme files"
@@ -44,8 +44,10 @@ just a lightweight suggestive system, not a watertight
one.</p>
--ldx]]--
+local debug = require "debug"
+
local string, table, lpeg, math, io, system = string, table, lpeg, math, io, system
-local next, setfenv = next, setfenv
+local next, setfenv = next, setfenv or debug.setfenv
local format = string.format
local global = _G
@@ -78,6 +80,10 @@ local protected = {
userdata, thirddata, moduledata = nil, nil, nil
+if not setfenv then
+ texio.write_nl("warning: we need to fix setfenv by using 'load in' or '_ENV'")
+end
+
function protect(name)
if name == "isolateddata" then
local t = { }
@@ -125,6 +131,8 @@ end
storage.register("lua/numbers", lua.numbers, "lua.numbers")
storage.register("lua/messages", lua.messages, "lua.messages")
+--~ local arguments, files = document.arguments, document.files -- set later
+
function document.setargument(key,value)
document.arguments[key] = value
end
@@ -145,6 +153,10 @@ function document.getargument(key,default)
tex.sprint(tex.ctxcatcodes,v or default or "")
end
+function document.setfilename(i,name)
+ document.files[tonumber(i)] = name
+end
+
function document.getfilename(i)
tex.sprint(tex.ctxcatcodes,document.files[i] or "")
end
diff --git a/Master/texmf-dist/tex/context/base/luat-ini.mkiv b/Master/texmf-dist/tex/context/base/luat-ini.mkiv
index 84214ea731b..c9d88bf4fcf 100644
--- a/Master/texmf-dist/tex/context/base/luat-ini.mkiv
+++ b/Master/texmf-dist/tex/context/base/luat-ini.mkiv
@@ -44,8 +44,8 @@
\long\def\dodostartluacode#1\stopluacode
{\normalexpanded{\endgroup\noexpand\directlua\zerocount{#1}}}
-\def\startlua {\dostartlua } % tex catcodes
-\def\startluacode{\dostartluacode} % lua catcodes
+\unexpanded\def\startlua {\dostartlua } % tex catcodes
+\unexpanded\def\startluacode{\dostartluacode} % lua catcodes
%D Some delayed definitions:
@@ -134,7 +134,7 @@
\obeyluatokens
\csname dodostartnamed#1\v!code\endcsname}
-\def\definenamedlua[#1]#2[#3]% no optional arg handling here yet
+\unexpanded\def\definenamedlua[#1]#2[#3]% no optional arg handling here yet
{\scratchcounter\ctxlua{lua.registername("#1","#3")}%
\normalexpanded{\long\edef\csname dodostartnamed#1\v!code\endcsname##1\csname\e!stop#1\v!code\endcsname}%
{\endgroup\noexpand\directlua\the\scratchcounter{protect("#1\s!data")##1}}%
@@ -190,12 +190,16 @@
\def\setdocumentfilename #1#2{\ctxlua{document.setfilename(#1,"#2")}}
\def\setdocumentargument #1#2{\ctxlua{document.setargument("#1","#2")}}
-\def\setdefaultdocumentargument#1#2{\ctxlua{document.getargument("#1","#2")}}
-\def\getdocumentfilename #1{\ctxlua{document.getfilename(#1)}}
-\def\getdocumentargument #1{\ctxlua{document.getargument(#1)}}
+\def\setdocumentargumentdefault#1#2{\ctxlua{document.setdefaultargument("#1","#2")}}
+\def\getdocumentfilename #1{\ctxlua{document.getfilename("#1")}}
+\def\getdocumentargument #1{\ctxlua{document.getargument("#1")}}
+\def\getdocumentargumentdefault#1#2{\ctxlua{document.getargument("#1","#2")}}
\def\doifdocumentargumentelse #1{\doifsomethingelse{\getdocumentargument{#1}}}
\def\doifdocumentargument #1{\doifsomething {\getdocumentargument{#1}}}
\def\doifnotdocumentargument #1{\doifnothing {\getdocumentargument{#1}}}
+\def\doifdocumentfilenameelse #1{\doifsomethingelse{\getdocumentfilename{#1}}}
+\def\doifdocumentfilename #1{\doifsomething {\getdocumentfilename{#1}}}
+\def\doifnotdocumentfilename #1{\doifnothing {\getdocumentfilename{#1}}}
\let\doifelsedocumentargument\doifdocumentargumentelse
@@ -205,7 +209,7 @@
%D Experimental:
-\def\startluaparameterset[#1]%
+\unexpanded\def\startluaparameterset[#1]%
{\begingroup
\obeylualines
\obeyluatokens
diff --git a/Master/texmf-dist/tex/context/base/luat-iop.lua b/Master/texmf-dist/tex/context/base/luat-iop.lua
index 883ec43cedb..e5722d2bd7f 100644
--- a/Master/texmf-dist/tex/context/base/luat-iop.lua
+++ b/Master/texmf-dist/tex/context/base/luat-iop.lua
@@ -1,6 +1,6 @@
if not modules then modules = { } end modules ['luat-iop'] = {
version = 1.001,
- comment = "companion to luat-lib.tex",
+ comment = "companion to luat-lib.mkiv",
author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
copyright = "PRAGMA ADE / ConTeXt Development Team",
license = "see context related readme files"
@@ -11,65 +11,61 @@ if not modules then modules = { } end modules ['luat-iop'] = {
-- we can feed back specific patterns and paths into the next
-- mechanism
-if not io.inp then io.inp = { } end
-if not io.out then io.out = { } end
+local lower, find, sub = string.lower, string.find, string.sub
-io.inp.blocked = { }
-io.out.blocked = { }
-io.inp.permitted = { }
-io.out.permitted = { }
-io.inp.modes = { } -- functions
-io.out.modes = { } -- functions
+local ioinp = io.inp if not ioinp then ioinp = { } io.inp = ioinp end
+local ioout = io.out if not ioout then ioout = { } io.out = ioout end
-io.blocked_openers = { } -- *.open(name,method)
+ioinp.modes, ioout.modes = { }, { } -- functions
-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
+local inp_blocked, inp_permitted = { }, { }
+local out_blocked, out_permitted = { }, { }
-function io.register_opener(func) table.insert(io.blocked_openers, func) end
+local function i_inhibit(name) inp_blocked [#inp_blocked +1] = name end
+local function o_inhibit(name) out_blocked [#out_blocked +1] = name end
+local function i_permit (name) inp_permitted[#inp_permitted+1] = name end
+local function o_permit (name) out_permitted[#out_permitted+1] = name 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
+ioinp.inhibit, ioinp.permit = i_inhibit, o_permit
+ioout.inhibit, ioout.permit = o_inhibit, o_permit
+
+local blocked_openers = { } -- *.open(name,method)
+
+function io.register_opener(func)
+ blocked_openers[#blocked_openers+1] = func
+end
+
+local function checked(name,blocked,permitted)
+ local n = lower(name)
+ for _,b in next, blocked do
+ if find(n,b) then
+ for _,p in next, permitted do
+ if find(n,p) then
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 false
+ end
+ end
+ return true
+end
+
+function io.finalize_openers(func)
+ if #out_blocked > 0 or #inp_blocked > 0 then
+ local open = func -- why not directly?
+ return function(name,method)
+ if method and find(method,'[wa]') then
+ if #out_blocked > 0 and not checked(name,out_blocked,out_permitted) then
+ -- print("writing to " .. name .. " is not permitted")
+ return nil
+ end
+ else
+ if #inp_blocked > 0 and not checked(name,inp_blocked,inp_permitted) then
+ -- print("reading from " .. name .. " is not permitted")
+ return nil
end
- return open(name,method)
end
+ return open(name,method)
end
else
return func
@@ -91,21 +87,13 @@ end
--~ 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
+local inpout = { 'inp', 'out' }
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)]
+ local first = sub(i,1,1)
+ for k=1,#inpout do
+ local iov = io[inpout[k]]
+ local f = iov[i] or iov[first]
if f then f() end
end
io.open = io.finalize_openers(io.open)
@@ -113,43 +101,46 @@ end
-- restricted
-function io.inp.modes.restricted()
- io.inp.inhibit('^%.[%a]')
+function ioinp.modes.restricted()
+ i_inhibit('^%.[%a]')
end
-function io.out.modes.restricted()
- io.out.inhibit('^%.[%a]')
+
+function ioout.modes.restricted()
+ o_inhibit('^%.[%a]')
end
-- paranoid
-function io.inp.modes.paranoid()
- io.inp.inhibit('.*')
- io.inp.inhibit('%.%.')
- io.inp.permit('^%./')
- io.inp.permit('[^/]')
- resolvers.do_with_path('TEXMF',io.inp.permit)
+function ioinp.modes.paranoid()
+ i_inhibit('.*')
+ i_inhibit('%.%.')
+ i_permit('^%./')
+ i_permit('[^/]')
+ resolvers.do_with_path('TEXMF',i_permit)
end
-function io.out.modes.paranoid()
- io.out.inhibit('.*')
- resolvers.do_with_path('TEXMFOUTPUT',io.out.permit)
+
+function ioout.modes.paranoid()
+ o_inhibit('.*')
+ resolvers.do_with_path('TEXMFOUTPUT',o_permit)
end
-- handy
-function io.inp.modes.handy()
- io.inp.inhibit('%.%.')
- if os.platform == 'linux' then
- io.inp.inhibit('^/etc')
+function ioinp.modes.handy()
+ i_inhibit('%.%.')
+ if os.type == 'windows' then
+ i_inhibit('/windows/')
+ i_inhibit('/winnt/')
else
- io.inp.inhibit('/windows/')
- io.inp.inhibit('/winnt/')
+ i_inhibit('^/etc')
end
end
-function io.out.modes.handy()
- io.out.inhibit('.*')
- io.out.permit('%./')
- io.out.permit('^%./')
- io.out.permit('[^/]')
+
+function ioout.modes.handy()
+ o_inhibit('.*')
+ o_permit('%./')
+ o_permit('^%./')
+ o_permit('[^/]')
end
--~ io.set_opener_modes('p','p')
diff --git a/Master/texmf-dist/tex/context/base/luat-lib.mkiv b/Master/texmf-dist/tex/context/base/luat-lib.mkiv
index f8f71dd0a92..91ddec0aa62 100644
--- a/Master/texmf-dist/tex/context/base/luat-lib.mkiv
+++ b/Master/texmf-dist/tex/context/base/luat-lib.mkiv
@@ -27,7 +27,8 @@
\registerctxluafile{data-tex} {1.001}
\registerctxluafile{data-bin} {1.001}
\registerctxluafile{data-zip} {1.001}
-\registerctxluafile{data-crl} {1.001}
+%registerctxluafile{data-crl} {1.001}
+\registerctxluafile{data-sch} {1.001}
\registerctxluafile{data-tre} {1.001}
\registerctxluafile{data-lua} {1.001}
\registerctxluafile{data-ctx} {1.001}
@@ -42,7 +43,11 @@
\registerctxluafile{luat-ini} {1.001}
\registerctxluafile{luat-env} {1.001}
-\registerctxluafile{l-xml} {1.001} % we need to load lxml-tab earlier so this will change !
+\registerctxluafile{lxml-tab} {1.001}
+\registerctxluafile{lxml-lpt} {1.001}
+\registerctxluafile{lxml-xml} {1.001}
+\registerctxluafile{lxml-aux} {1.001}
+\registerctxluafile{lxml-mis} {1.001}
\startruntimeluacode
\edef\asciia{\ctxlua{tex.sprint(logs.mode)}}
diff --git a/Master/texmf-dist/tex/context/base/luat-lua.lua b/Master/texmf-dist/tex/context/base/luat-lua.lua
index 61be6e9d69e..b964bf8e80d 100644
--- a/Master/texmf-dist/tex/context/base/luat-lua.lua
+++ b/Master/texmf-dist/tex/context/base/luat-lua.lua
@@ -1,6 +1,6 @@
if not modules then modules = { } end modules ['luat-lua'] = {
version = 1.001,
- comment = "companion to luat-lib.tex",
+ comment = "companion to luat-lib.mkiv",
author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
copyright = "PRAGMA ADE / ConTeXt Development Team",
license = "see context related readme files"
@@ -38,5 +38,6 @@ end end
--~ 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])
+--~ local box = tex.box[0]
+--~ lua.flush(box.width,box.height,box.depth)
--~ end
diff --git a/Master/texmf-dist/tex/context/base/luat-run.lua b/Master/texmf-dist/tex/context/base/luat-run.lua
index 09fce32c1a1..b64a99fc6b8 100644
--- a/Master/texmf-dist/tex/context/base/luat-run.lua
+++ b/Master/texmf-dist/tex/context/base/luat-run.lua
@@ -1,6 +1,6 @@
if not modules then modules = { } end modules ['luat-run'] = {
version = 1.001,
- comment = "companion to luat-lib.tex",
+ comment = "companion to luat-lib.mkiv",
author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
copyright = "PRAGMA ADE / ConTeXt Development Team",
license = "see context related readme files"
@@ -61,9 +61,14 @@ end
-- this can be done later
-callback.register('start_run', main.start)
-callback.register('stop_run' , main.stop)
-callback.register('report_output_pages', main.report_output_pages)
-callback.register('report_output_log' , main.report_output_log)
-callback.register('start_page_number' , main.start_shipout_page)
-callback.register('stop_page_number' , main.stop_shipout_page)
+callbacks.register('start_run', main.start, "actions performed at the beginning of a run")
+callbacks.register('stop_run', main.stop, "actions performed at the end of a run")
+
+callbacks.register('report_output_pages', main.report_output_pages, "actions performed when reporting pages")
+callbacks.register('report_output_log', main.report_output_log, "actions performed when reporting log file")
+
+callbacks.register('start_page_number', main.start_shipout_page, "actions performed at the beginning of a shipout")
+callbacks.register('stop_page_number', main.stop_shipout_page, "actions performed at the end of a shipout")
+
+callbacks.register('process_input_buffer', false, "actions performed when reading data")
+callbacks.register('process_output_buffer', false, "actions performed when writing data")
diff --git a/Master/texmf-dist/tex/context/base/luat-sta.lua b/Master/texmf-dist/tex/context/base/luat-sta.lua
index 12fa18219bb..a81b0c206fc 100644
--- a/Master/texmf-dist/tex/context/base/luat-sta.lua
+++ b/Master/texmf-dist/tex/context/base/luat-sta.lua
@@ -7,6 +7,9 @@ if not modules then modules = { } end modules ['luat-sta'] = {
-- this code is used in the updater
+local gmatch, match = string.gmatch, string.match
+local type = type
+
states = states or { }
states.data = states.data or { }
states.hash = states.hash or { }
@@ -35,13 +38,17 @@ function states.set_by_tag(tag,key,value,default,persistent)
if d then
if type(d) == "table" then
local dkey, hkey = key, key
- local pre, post = key:match("(.+)%.([^%.]+)$")
+ local pre, post = match(key,"(.+)%.([^%.]+)$")
if pre and post then
- for k in pre:gmatch("[^%.]+") do
+ for k in gmatch(pre,"[^%.]+") do
local dk = d[k]
if not dk then
dk = { }
d[k] = dk
+ elseif type(dk) == "string" then
+ -- invalid table, unable to upgrade structure
+ -- hope for the best or delete the state file
+ break
end
d = dk
end
@@ -69,7 +76,7 @@ function states.get_by_tag(tag,key,default)
else
local d = states.data[tag]
if d then
- for k in key:gmatch("[^%.]+") do
+ for k in gmatch(key,"[^%.]+") do
local dk = d[k]
if dk then
d = dk
diff --git a/Master/texmf-dist/tex/context/base/luat-sto.lua b/Master/texmf-dist/tex/context/base/luat-sto.lua
index 6fea9151495..08da735db31 100644
--- a/Master/texmf-dist/tex/context/base/luat-sto.lua
+++ b/Master/texmf-dist/tex/context/base/luat-sto.lua
@@ -1,6 +1,6 @@
if not modules then modules = { } end modules ['luat-sto'] = {
version = 1.001,
- comment = "companion to luat-lib.tex",
+ comment = "companion to luat-lib.mkiv",
author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
copyright = "PRAGMA ADE / ConTeXt Development Team",
license = "see context related readme files"
@@ -109,20 +109,20 @@ end
function statistics.report_storage(whereto)
whereto = whereto or "term and log"
write_nl(whereto," ","stored tables:"," ")
- for k,v in table.sortedpairs(storage.data) do
+ for k,v in table.sortedhash(storage.data) do
write_nl(whereto,format("%03i %s",k,v[1]))
end
write_nl(whereto," ","stored modules:"," ")
- for k,v in table.sortedpairs(lua.bytedata) do
+ for k,v in table.sortedhash(lua.bytedata) do
write_nl(whereto,format("%03i %s %s",k,v[2],v[1]))
end
write_nl(whereto," ","stored attributes:"," ")
- for k,v in table.sortedpairs(attributes.names) do
+ for k,v in table.sortedhash(attributes.names) do
write_nl(whereto,format("%03i %s",k,v))
end
write_nl(whereto," ","stored catcodetables:"," ")
- for k,v in table.sortedpairs(catcodes.names) do
- write_nl(whereto,format("%03i %s",k,v))
+ for k,v in table.sortedhash(catcodes.names) do
+ write_nl(whereto,format("%03i %s",k,table.concat(v," ")))
end
write_nl(whereto," ")
end
diff --git a/Master/texmf-dist/tex/context/base/lxml-aux.lua b/Master/texmf-dist/tex/context/base/lxml-aux.lua
new file mode 100644
index 00000000000..00f7919098f
--- /dev/null
+++ b/Master/texmf-dist/tex/context/base/lxml-aux.lua
@@ -0,0 +1,543 @@
+if not modules then modules = { } end modules ['lxml-aux'] = {
+ 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"
+}
+
+-- not all functions here make sense anymore vbut we keep them for
+-- compatibility reasons
+
+local trace_manipulations = false trackers.register("lxml.manipulations", function(v) trace_manipulations = v end)
+
+local xmlparseapply, xmlconvert, xmlcopy, xmlname = xml.parse_apply, xml.convert, xml.copy, xml.name
+local xmlinheritedconvert = xml.inheritedconvert
+
+local type = type
+local insert, remove = table.insert, table.remove
+local gmatch, gsub = string.gmatch, string.gsub
+
+local function report(what,pattern,c,e)
+ logs.report("xml","%s element '%s' (root: '%s', position: %s, index: %s, pattern: %s)",what,xmlname(e),xmlname(e.__p__),c,e.ni,pattern)
+end
+
+local function withelements(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)
+ withelements(e,handle,depth+1)
+ end
+ end
+ end
+ end
+end
+
+xml.withelements = withelements
+
+function xml.withelement(e,n,handle) -- slow
+ if e and n ~= 0 and handle then
+ local edt = e.dt
+ if edt then
+ if n > 0 then
+ for i=1,#edt do
+ local ei = edt[i]
+ if type(ei) == "table" then
+ if n == 1 then
+ handle(ei)
+ return
+ else
+ n = n - 1
+ end
+ end
+ end
+ elseif n < 0 then
+ for i=#edt,1,-1 do
+ local ei = edt[i]
+ if type(ei) == "table" then
+ if n == -1 then
+ handle(ei)
+ return
+ else
+ n = n + 1
+ end
+ end
+ end
+ end
+ end
+ end
+end
+
+xml.elements_only = xml.collected
+
+function xml.each_element(root,pattern,handle,reverse)
+ local collected = xmlparseapply({ root },pattern)
+ if collected then
+ if reverse then
+ for c=#collected,1,-1 do
+ handle(collected[c])
+ end
+ else
+ for c=1,#collected do
+ handle(collected[c])
+ end
+ end
+ return collected
+ end
+end
+
+xml.process_elements = xml.each_element
+
+function xml.process_attributes(root,pattern,handle)
+ local collected = xmlparseapply({ root },pattern)
+ if collected and handle then
+ for c=1,#collected do
+ handle(collected[c].at)
+ end
+ end
+ return collected
+end
+
+--[[ldx--
+<p>The following functions collect elements and texts.</p>
+--ldx]]--
+
+-- are these still needed -> lxml-cmp.lua
+
+function xml.collect_elements(root, pattern)
+ return xmlparseapply({ root },pattern)
+end
+
+function xml.collect_texts(root, pattern, flatten) -- todo: variant with handle
+ local collected = xmlparseapply({ root },pattern)
+ if collected and flatten then
+ local xmltostring = xml.tostring
+ for c=1,#collected do
+ collected[c] = xmltostring(collected[c].dt)
+ end
+ end
+ return collected or { }
+end
+
+function xml.collect_tags(root, pattern, nonamespace)
+ local collected = xmlparseapply({ root },pattern)
+ if collected then
+ local t = { }
+ for c=1,#collected do
+ local e = collected[c]
+ local ns, tg = e.ns, e.tg
+ if nonamespace then
+ t[#t+1] = tg
+ elseif ns == "" then
+ t[#t+1] = tg
+ else
+ t[#t+1] = ns .. ":" .. tg
+ end
+ end
+ return t
+ end
+end
+
+--[[ldx--
+<p>We've now arrived at the functions that manipulate the tree.</p>
+--ldx]]--
+
+local no_root = { no_root = true }
+
+function xml.redo_ni(d)
+ for k=1,#d do
+ local dk = d[k]
+ if type(dk) == "table" then
+ dk.ni = k
+ end
+ end
+end
+
+local function xmltoelement(whatever,root)
+ if not whatever then
+ return nil
+ end
+ local element
+ if type(whatever) == "string" then
+ element = xmlinheritedconvert(whatever,root)
+ else
+ element = whatever -- we assume a table
+ end
+ if element.error then
+ return whatever -- string
+ end
+ if element then
+ --~ if element.ri then
+ --~ element = element.dt[element.ri].dt
+ --~ else
+ --~ element = element.dt
+ --~ end
+ end
+ return element
+end
+
+xml.toelement = xmltoelement
+
+local function copiedelement(element,newparent)
+ if type(element) == "string" then
+ return element
+ else
+ element = xmlcopy(element).dt
+ if newparent and type(element) == "table" then
+ element.__p__ = newparent
+ end
+ return element
+ end
+end
+
+function xml.delete_element(root,pattern)
+ local collected = xmlparseapply({ root },pattern)
+ if collected then
+ for c=1,#collected do
+ local e = collected[c]
+ local p = e.__p__
+ if p then
+ if trace_manipulations then
+ report('deleting',pattern,c,e)
+ end
+ local d = p.dt
+ remove(d,e.ni)
+ xml.redo_ni(d) -- can be made faster and inlined
+ end
+ end
+ end
+end
+
+function xml.replace_element(root,pattern,whatever)
+ local element = root and xmltoelement(whatever,root)
+ local collected = element and xmlparseapply({ root },pattern)
+ if collected then
+ for c=1,#collected do
+ local e = collected[c]
+ local p = e.__p__
+ if p then
+ if trace_manipulations then
+ report('replacing',pattern,c,e)
+ end
+ local d = p.dt
+ d[e.ni] = copiedelement(element,p)
+ xml.redo_ni(d) -- probably not needed
+ end
+ end
+ end
+end
+
+local function inject_element(root,pattern,whatever,prepend)
+ local element = root and xmltoelement(whatever,root)
+ local collected = element and xmlparseapply({ root },pattern)
+ if collected then
+ for c=1,#collected do
+ local e = collected[c]
+ local r = e.__p__
+ local d, k, rri = r.dt, e.ni, r.ri
+ local edt = (rri and d[rri].dt) or (d and d[k] and d[k].dt)
+ if edt then
+ local be, af
+ local cp = copiedelement(element,e)
+ if prepend then
+ be, af = cp, edt
+ else
+ be, af = edt, cp
+ end
+ for i=1,#af do
+ be[#be+1] = af[i]
+ end
+ if rri then
+ r.dt[rri].dt = be
+ else
+ d[k].dt = be
+ end
+ xml.redo_ni(d)
+ end
+ end
+ end
+end
+
+local function insert_element(root,pattern,whatever,before) -- todo: element als functie
+ local element = root and xmltoelement(whatever,root)
+ local collected = element and xmlparseapply({ root },pattern)
+ if collected then
+ for c=1,#collected do
+ local e = collected[c]
+ local r = e.__p__
+ local d, k = r.dt, e.ni
+ if not before then
+ k = k + 1
+ end
+ insert(d,k,copiedelement(element,r))
+ xml.redo_ni(d)
+ end
+ end
+end
+
+xml.insert_element = insert_element
+xml.insert_element_after = insert_element
+xml.insert_element_before = function(r,p,e) insert_element(r,p,e,true) end
+xml.inject_element = inject_element
+xml.inject_element_after = inject_element
+xml.inject_element_before = function(r,p,e) inject_element(r,p,e,true) end
+
+local function include(xmldata,pattern,attribute,recursive,loaddata)
+ -- parse="text" (default: xml), encoding="" (todo)
+ -- attribute = attribute or 'href'
+ pattern = pattern or 'include'
+ loaddata = loaddata or io.loaddata
+ local collected = xmlparseapply({ xmldata },pattern)
+ if collected then
+ for c=1,#collected do
+ local ek = collected[c]
+ local name = nil
+ local ekdt = ek.dt
+ local ekat = ek.at
+ local epdt = ek.__p__.dt
+ if not attribute or attribute == "" then
+ name = (type(ekdt) == "table" and ekdt[1]) or ekdt -- ckeck, probably always tab or str
+ end
+ if not name then
+ for a in gmatch(attribute or "href","([^|]+)") do
+ name = ekat[a]
+ if name then break end
+ end
+ end
+ local data = (name and name ~= "" and loaddata(name)) or ""
+ if data == "" then
+ epdt[ek.ni] = "" -- xml.empty(d,k)
+ elseif ekat["parse"] == "text" then
+ -- for the moment hard coded
+ epdt[ek.ni] = xml.escaped(data) -- d[k] = xml.escaped(data)
+ else
+--~ local settings = xmldata.settings
+--~ settings.parent_root = xmldata -- to be tested
+--~ local xi = xmlconvert(data,settings)
+ local xi = xmlinheritedconvert(data,xmldata)
+ if not xi then
+ epdt[ek.ni] = "" -- xml.empty(d,k)
+ else
+ if recursive then
+ include(xi,pattern,attribute,recursive,loaddata)
+ end
+ epdt[ek.ni] = xml.body(xi) -- xml.assign(d,k,xi)
+ end
+ end
+ end
+ end
+end
+
+xml.include = include
+
+--~ local function manipulate(xmldata,pattern,manipulator) -- untested and might go away
+--~ local collected = xmlparseapply({ xmldata },pattern)
+--~ if collected then
+--~ local xmltostring = xml.tostring
+--~ for c=1,#collected do
+--~ local e = collected[c]
+--~ local data = manipulator(xmltostring(e))
+--~ if data == "" then
+--~ epdt[e.ni] = ""
+--~ else
+--~ local xi = xmlinheritedconvert(data,xmldata)
+--~ if not xi then
+--~ epdt[e.ni] = ""
+--~ else
+--~ epdt[e.ni] = xml.body(xi) -- xml.assign(d,k,xi)
+--~ end
+--~ end
+--~ end
+--~ end
+--~ end
+
+--~ xml.manipulate = manipulate
+
+function xml.strip_whitespace(root, pattern, nolines) -- strips all leading and trailing space !
+ local collected = xmlparseapply({ root },pattern)
+ if collected then
+ for i=1,#collected do
+ local e = collected[i]
+ local edt = e.dt
+ if edt then
+ local t = { }
+ for i=1,#edt do
+ local str = edt[i]
+ if type(str) == "string" then
+ if str == "" then
+ -- stripped
+ else
+ if nolines then
+ str = gsub(str,"[ \n\r\t]+"," ")
+ end
+ if str == "" then
+ -- stripped
+ else
+ t[#t+1] = str
+ end
+ end
+ else
+ --~ str.ni = i
+ t[#t+1] = str
+ end
+ end
+ e.dt = t
+ end
+ end
+ end
+end
+
+function xml.strip_whitespace(root, pattern, nolines, anywhere) -- strips all leading and trailing spacing
+ local collected = xmlparseapply({ root },pattern) -- beware, indices no longer are valid now
+ if collected then
+ for i=1,#collected do
+ local e = collected[i]
+ local edt = e.dt
+ if edt then
+ if anywhere then
+ local t = { }
+ for e=1,#edt do
+ local str = edt[e]
+ if type(str) ~= "string" then
+ t[#t+1] = str
+ elseif str ~= "" then
+ -- todo: lpeg for each case
+ if nolines then
+ str = gsub(str,"%s+"," ")
+ end
+ str = gsub(str,"^%s*(.-)%s*$","%1")
+ if str ~= "" then
+ t[#t+1] = str
+ end
+ end
+ end
+ e.dt = t
+ else
+ -- we can assume a regular sparse xml table with no successive strings
+ -- otherwise we should use a while loop
+ if #edt > 0 then
+ -- strip front
+ local str = edt[1]
+ if type(str) ~= "string" then
+ -- nothing
+ elseif str == "" then
+ remove(edt,1)
+ else
+ if nolines then
+ str = gsub(str,"%s+"," ")
+ end
+ str = gsub(str,"^%s+","")
+ if str == "" then
+ remove(edt,1)
+ else
+ edt[1] = str
+ end
+ end
+ end
+ if #edt > 1 then
+ -- strip end
+ local str = edt[#edt]
+ if type(str) ~= "string" then
+ -- nothing
+ elseif str == "" then
+ remove(edt)
+ else
+ if nolines then
+ str = gsub(str,"%s+"," ")
+ end
+ str = gsub(str,"%s+$","")
+ if str == "" then
+ remove(edt)
+ else
+ edt[#edt] = str
+ end
+ end
+ end
+ end
+ end
+ end
+ end
+end
+
+local function rename_space(root, oldspace, newspace) -- fast variant
+ local ndt = #root.dt
+ 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_space(edt, oldspace, newspace)
+ end
+ end
+ end
+end
+
+xml.rename_space = rename_space
+
+function xml.remap_tag(root, pattern, newtg)
+ local collected = xmlparseapply({ root },pattern)
+ if collected then
+ for c=1,#collected do
+ collected[c].tg = newtg
+ end
+ end
+end
+
+function xml.remap_namespace(root, pattern, newns)
+ local collected = xmlparseapply({ root },pattern)
+ if collected then
+ for c=1,#collected do
+ collected[c].ns = newns
+ end
+ end
+end
+
+function xml.check_namespace(root, pattern, newns)
+ local collected = xmlparseapply({ root },pattern)
+ if collected then
+ for c=1,#collected do
+ local e = collected[c]
+ if (not e.rn or e.rn == "") and e.ns == "" then
+ e.rn = newns
+ end
+ end
+ end
+end
+
+function xml.remap_name(root, pattern, newtg, newns, newrn)
+ local collected = xmlparseapply({ root },pattern)
+ if collected then
+ for c=1,#collected do
+ local e = collected[c]
+ e.tg, e.ns, e.rn = newtg, newns, newrn
+ end
+ end
+end
+
+--[[ldx--
+<p>Here are a few synonyms.</p>
+--ldx]]--
+
+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
diff --git a/Master/texmf-dist/tex/context/base/lxml-ctx.lua b/Master/texmf-dist/tex/context/base/lxml-ctx.lua
new file mode 100644
index 00000000000..765754953e9
--- /dev/null
+++ b/Master/texmf-dist/tex/context/base/lxml-ctx.lua
@@ -0,0 +1,131 @@
+if not modules then modules = { } end modules ['lxml-ctx'] = {
+ version = 1.001,
+ comment = "companion to lxml-ini.mkiv",
+ author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
+ copyright = "PRAGMA ADE / ConTeXt Development Team",
+ license = "see context related readme files"
+}
+
+-- is this still used?
+
+xml.ctx = { }
+xml.ctx.enhancers = { }
+
+-- hashen
+
+function xml.ctx.enhancers.compound(root,lpath,before,tokens,after) -- todo lpeg
+ local before = before or "[%a%d][%a%d][%a%d]"
+ local tokens = tokens or "[%/%-]"
+ local after = after or "[%a%d][%a%d][%a%d]"
+ local pattern = "(" .. before .. ")(" .. tokens .. ")(" .. after .. ")"
+ local action = function(a,b,c)
+ return a .. "<compound token=" .. string.format("%q",b) .. "/>" .. c
+ end
+ xml.enhance(root,lpath,pattern,action) -- still present?
+end
+
+local loaded = { }
+
+local nodesettostring = xml.nodesettostring
+
+-- maybe use detokenize instead of \type
+
+function xml.ctx.tshow(specification)
+ local pattern = specification.pattern
+ local xmlroot = specification.xmlroot
+ local attribute = specification.attribute
+ if context then
+ local xmlpattern = pattern
+ if not string.find(xmlpattern,"^[%a]+://") then
+ xmlpattern = "xml://" .. pattern
+ end
+ parsed = xml.parse_pattern(xmlpattern)
+ titlecommand = specification.title or "type"
+ if parsed.state then
+ context[titlecommand]("pattern: " .. pattern .. " (".. parsed.state .. ")")
+ else
+ context[titlecommand]("pattern: " .. pattern)
+ end
+ context.starttabulate({ "|Tr|Tl|Tp|" } )
+ if specification.warning then
+ local comment = parsed.comment
+ if comment then
+ for k=1,#comment do
+ context.NC()
+ context("!")
+ context.NC()
+ context.rlap(comment[k])
+ context.NR()
+ end
+ context.TB()
+ end
+ end
+ for p=1,#parsed do
+ local pp = parsed[p]
+ local kind = pp.kind
+ context.NC()
+ context(p)
+ context.NC()
+ context(kind)
+ context.NC()
+ if kind == "axis" then
+ context(pp.axis)
+ elseif kind == "nodes" then
+ context(nodesettostring(pp.nodes,pp.nodetest))
+ elseif kind == "expression" then
+--~ context("%s => %s",pp.expression,pp.converted)
+ context(pp.expression)
+ elseif kind == "finalizer" then
+ context("%s(%s)",pp.name,pp.arguments)
+ elseif kind == "error" and pp.error then
+ context(pp.error)
+ end
+ context.NC()
+ context.NR()
+ end
+ context.stoptabulate()
+ if xmlroot and xmlroot ~= "" then
+ if not loaded[xmlroot] then
+ loaded[xmlroot] = { xml.convert(buffers.content(xmlroot) or "") }
+ end
+ local collected = xml.parse_apply(loaded[xmlroot],xmlpattern)
+ if collected then
+ local tc = type(collected)
+ if not tc then
+ -- skip
+ else
+ context.blank()
+ context.type("result : ")
+ if tc == "string" then
+ context.type(collected)
+ elseif tc == "table" then
+ if collected.tg then
+ collected = { collected }
+ end
+ for c=1,#collected do
+ local cc = collected[c]
+ if attribute and attribute ~= "" then
+ local ccat = cc.at
+ local a = ccat and ccat[attribute]
+ if a and a ~= "" then
+ context.type(a)
+ context.type(">")
+ end
+ end
+ local ccns = cc.ns
+ if ccns == "" then
+ context.type(cc.tg)
+ else
+ context.type(ccns .. ":" .. cc.tg)
+ end
+ context.space()
+ end
+ else
+ context.type(tostring(tc))
+ end
+ context.blank()
+ end
+ end
+ end
+ end
+end
diff --git a/Master/texmf-dist/tex/context/base/lxml-ctx.mkiv b/Master/texmf-dist/tex/context/base/lxml-ctx.mkiv
new file mode 100644
index 00000000000..73d082d0d51
--- /dev/null
+++ b/Master/texmf-dist/tex/context/base/lxml-ctx.mkiv
@@ -0,0 +1,64 @@
+%D \module
+%D [ file=lxml-ini,
+%D version=2007.08.17,
+%D title=\CONTEXT\ \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.
+
+%D Experimental. This might change! Also, it might become a module
+%D instead if core code.
+
+\writestatus{loading}{ConTeXt XML Support / Goodies}
+
+\registerctxluafile{lxml-ctx}{1.001}
+
+\unprotect
+
+% the letterbar is a messy hack and is needed for the tabulate
+
+\settrue \xmllshowbuffer
+\setfalse\xmllshowtitle
+\settrue \xmllshowwarning
+
+\definehead[lshowtitle][subsubsubsubsubject]
+\setuphead[lshowtitle][style=\tta]
+
+% \unexpanded\def\setuplxmlshow[#1]%
+% {\dodoubleargument\getparameters[\??xl]}
+
+\def\xmllshow#1%
+ {\begingroup
+ \let|=\letterbar
+ \ctxlua{xml.ctx.tshow {
+ pattern = \!!bs#1\!!es,
+ \ifconditional\xmllshowtitle
+ title = "lshowtitle",
+ \fi
+ \ifconditional\xmllshowwarning
+ warning = true,
+ \fi
+ } }%
+ \endgroup}
+
+\def\xmllshowbuffer#1#2#3%
+ {\begingroup
+ \let|=\letterbar
+ \ctxlua{xml.ctx.tshow {
+ pattern = \!!bs#2\!!es,
+ \ifconditional\xmllshowbuffer
+ xmlroot = "#1",
+ attribute = "#3",
+ \fi
+ \ifconditional\xmllshowwarning
+ warning = true,
+ \fi
+ } }%
+ \endgroup}
+
+\protect
diff --git a/Master/texmf-dist/tex/context/base/lxml-dir.lua b/Master/texmf-dist/tex/context/base/lxml-dir.lua
new file mode 100644
index 00000000000..617ce3e20e2
--- /dev/null
+++ b/Master/texmf-dist/tex/context/base/lxml-dir.lua
@@ -0,0 +1,112 @@
+if not modules then modules = { } end modules ['lxml-dir'] = {
+ 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"
+}
+
+local format, gsub = string.format, string.gsub
+local get_id = lxml.id
+local texsprint, ctxcatcodes = tex.sprint, tex.ctxcatcodes
+local xmlparseapply = xml.parse_apply
+
+--~ <?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 = lxml.directives or { }
+
+local directives = lxml.directives
+
+local data = {
+ setup = { },
+ before = { },
+ after = { }
+}
+
+local function load_setup(filename)
+ local fullname = resolvers.findtexfile(filename) or ""
+ if fullname ~= "" then
+ filename = fullname
+ end
+ local collection = xmlparseapply({ get_id(xml.load(filename)) },"directive")
+ if collection then
+ local valid = 0
+ for i=1,#collection do
+ local at = collection[i].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
+ valid = valid + 1
+ end
+ end
+ commands.writestatus("lxml","%s directives found in '%s', %s valid",#collection,filename,valid)
+ else
+ commands.writestatus("lxml","no directives found in '%s'",filename)
+ end
+end
+
+local function handle_setup(category,root,attribute,element)
+ root = get_id(root)
+ 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(ctxcatcodes,"\\directsetup{",setup,"}")
+ else
+ setup = data[format("%s::%s::*",element,attribute)]
+ if setup then
+ setup = setup[category]
+ end
+ if setup then
+ texsprint(ctxcatcodes,"\\directsetup{",gsub(setup,'%*',value),"}")
+ end
+ end
+ end
+ end
+end
+
+directives.load = load_setup
+directives.handle = handle_setup
+
+function directives.setup(root,attribute,element)
+ handle_setup('setup',root,attribute,element)
+end
+function directives.before(root,attribute,element)
+ handle_setup('before',root,attribute,element)
+end
+function directives.after(root,attribute,element)
+ handle_setup('after',root,attribute,element)
+end
diff --git a/Master/texmf-dist/tex/context/base/lxml-ent.lua b/Master/texmf-dist/tex/context/base/lxml-ent.lua
index c91d12706bb..19361193745 100644
--- a/Master/texmf-dist/tex/context/base/lxml-ent.lua
+++ b/Master/texmf-dist/tex/context/base/lxml-ent.lua
@@ -6,110 +6,64 @@ if not modules then modules = { } end modules ['lxml-ent'] = {
license = "see context related readme files"
}
-local type, next, tonumber, tostring, setmetatable, loadstring = type, next, tonumber, tostring, setmetatable, loadstring
-local format, gsub, find = string.format, string.gsub, string.find
-local utfchar = unicode.utf8.char
+local type, next, tonumber = type, next, tonumber
+local texsprint, ctxcatcodes = tex.sprint, tex.ctxcatcodes
+local utf = unicode.utf8
+local byte, format = string.byte, string.format
+local utfupper, utfchar = utf.upper, utf.char
+local lpegmatch = lpeg.match
--[[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>
+
+<p>We do things different now but it's still somewhat experimental</p>
--ldx]]--
+local trace_entities = false trackers.register("xml.entities", function(v) trace_entities = v end)
+
xml.entities = xml.entities or { } -- xml.entity_handler == function
-function xml.entity_handler(e)
- return format("[%s]",e)
-end
+storage.register("xml/entities",xml.entities,"xml.entities") -- this will move to lxml
-local function toutf(s)
- return utfchar(tonumber(s,16))
-end
+local entities = xml.entities -- this is a shared hash
-local 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 find(dk,"&#x.-;") then
- d[k] = gsub(dk,"&#x(.-);",toutf)
- end
- else
- utfize(dk)
- end
- end
-end
+xml.unknown_any_entity_format = nil -- has to be per xml
-xml.utfize = utfize
+local parsedentity = xml.parsedentitylpeg
-local function resolve(e) -- hex encoded always first, just to avoid mkii fallbacks
- if find(e,"^#x") then
- return utfchar(tonumber(e:sub(3),16))
- elseif find(e,"^#") then
- return utfchar(tonumber(e:sub(2)))
- else
- local ee = xml.entities[e] -- we cannot shortcut this one (is reloaded)
- if ee then
- return ee
- else
- local h = xml.entity_handler
- return (h and h(e)) or "&" .. e .. ";"
- end
+function xml.register_entity(key,value)
+ entities[key] = value
+ if trace_entities then
+ logs.report("xml","registering entity '%s' as: %s",key,value)
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 find(dk,"&.-;") then
- d[k] = gsub(dk,"&(.-);",resolve)
- end
- else
- resolve_entities(dk)
- end
+function xml.resolved_entity(str)
+ local e = entities[str]
+ if e then
+ local te = type(e)
+ if te == "function" then
+ e(str)
+ elseif e then
+ texsprint(ctxcatcodes,e)
end
- end
-end
-
-xml.resolve_entities = resolve_entities
-
-function xml.utfize_text(str)
- if find(str,"&#") then
- return (gsub(str,"&#x(.-);",toutf))
else
- return str
- end
-end
-
-function xml.resolve_text_entities(str) -- maybe an lpeg. maybe resolve inline
- if find(str,"&") then
- return (gsub(str,"&(.-);",resolve))
- else
- return str
- end
-end
-
-function xml.show_text_entities(str)
- if find(str,"&") then
- return (gsub(str,"&(.-);","[%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 next, documententities do
- allentities[k] = v
+ -- resolve hex and dec, todo: escape # & etc for ctxcatcodes
+ -- normally this is already solved while loading the file
+ local chr, err = lpegmatch(parsedentity,str)
+ if chr then
+ texsprint(ctxcatcodes,chr)
+ elseif err then
+ texsprint(ctxcatcodes,err)
+ else
+ texsprint(ctxcatcodes,"\\xmle{",str,"}{",utfupper(str),"}") -- we need to use our own upper
end
end
end
+
+entities.amp = function() tex.write("&") end
+entities.lt = function() tex.write("<") end
+entities.gt = function() tex.write(">") end
diff --git a/Master/texmf-dist/tex/context/base/lxml-inf.lua b/Master/texmf-dist/tex/context/base/lxml-inf.lua
new file mode 100644
index 00000000000..629c869eca9
--- /dev/null
+++ b/Master/texmf-dist/tex/context/base/lxml-inf.lua
@@ -0,0 +1,53 @@
+if not modules then modules = { } end modules ['lxml-inf'] = {
+ 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"
+}
+
+-- This file will be loaded runtime by x-pending.tex.
+
+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 = 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
+
+local function get_command_status(id)
+ status, stack = {}, {}
+ if id then
+ xmlwithelements(get_id(id),get)
+ return status
+ else
+ local t = { }
+ for id, _ in next, loaded do
+ t[id] = get_command_status(id)
+ end
+ return t
+ end
+end
+
+lxml.get_command_status = get_command_status
diff --git a/Master/texmf-dist/tex/context/base/lxml-ini.lua b/Master/texmf-dist/tex/context/base/lxml-ini.lua
deleted file mode 100644
index 0c40a4bafb9..00000000000
--- a/Master/texmf-dist/tex/context/base/lxml-ini.lua
+++ /dev/null
@@ -1,1138 +0,0 @@
-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"
-}
-
-local utf = unicode.utf8
-
-local texsprint, texprint, utfchar = tex.sprint or print, tex.print or print, utf.char
-local format, concat, insert, remove = string.format, table.concat, table.insert, table.remove
-local type, next, tonumber = type, next, tonumber
-
-local ctxcatcodes = tex.ctxcatcodes
-local texcatcodes = tex.texcatcodes
-local vrbcatcodes = tex.vrbcatcodes
-
-local trace_setups = false trackers.register("lxml.setups", function(v) trace_setups = v end)
-local trace_loading = false trackers.register("lxml.loading", function(v) trace_loading = v end)
-
--- for the moment here
-
-function table.insert_before_value(t,value,extra)
- for i=1,#t do
- if t[i] == extra then
- remove(t,i)
- end
- end
- for i=1,#t do
- if t[i] == value then
- insert(t,i,extra)
- return
- end
- end
- insert(t,1,extra)
-end
-
-function table.insert_after_value(t,value,extra)
- for i=1,#t do
- if t[i] == extra then
- remove(t,i)
- end
- end
- for i=1,#t do
- if t[i] == value then
- insert(t,i+1,extra)
- return
- end
- end
- insert(t,#t+1,extra)
-end
-
--- todo: speed up: remember last index/match combination
-
-local traverse, lpath = xml.traverse, xml.lpath
-
-local xmlfilter, xmlfirst, xmllast, xmlall = xml.filter, xml.first, xml.last, xml.all
-local xmlcollect, xmlcontent, xmlcollect_texts, xmlcollect_tags, xmlcollect_elements = xml.collect, xml.content, xml.collect_texts, xml.collect_tags, xml.collect_elements
-local xmlattribute, xmlindex = xml.filters.attribute, xml.filters.index
-local xmlelements = xml.elements
-
-document = document or { }
-document.xml = document.xml or { }
-
--- todo: loaded and myself per document so that we can garbage collect buffers
-
-lxml = lxml or { }
-lxml.loaded = { }
-lxml.myself = { }
-lxml.n = 0
-
-local loaded = lxml.loaded
-local myself = lxml.myself
-local stack = lxml.stack
-
-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 = 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 capture = (
- space^0 * newline^2 * lpeg.Cc("") / texprint +
- space^0 * newline * space^0 * lpeg.Cc(" ") / texsprint +
- content / texsprint
- )^0
-
- local forceraw, rawroot = false, nil
-
- function lxml.startraw()
- forceraw = true
- end
- function lxml.stopraw()
- forceraw = false
- end
- function lxml.rawroot()
- return rawroot
- end
- function lxml.rawpath(rootid)
- if rawroot and type(rawroot) == "table" then
- local text, path, rp
- if not rawroot.dt then
- text, path, rp = "text", "", rawroot[0]
- else
- path, rp = "tree", "", rawroot.__p__
- end
- while rp do
- local rptg = rp.tg
- if rptg then
- path = rptg .. "/" .. path
- end
- rp = rp.__p__
- end
- return { rootid, "/" .. path, text }
- end
- end
-
- local function sprint(root)
- if not root then
- --~ rawroot = false
- -- quit
- else
- local tr = type(root)
- if tr == "string" then -- can also be result of lpath
- --~ rawroot = false
- capture:match(root)
- elseif tr == "table" then
- rawroot = forceraw and root
- serialize(root,sprint,nil,nil,specialhandler,forceraw)
- 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
---~ rawroot = false
- -- quit
- elseif type(root) == 'string' then
---~ rawroot = false
- capture:match(root)
- else
- local rootdt = root.dt
- rawroot = forceraw and root
- if rootdt then -- the main one
- serialize(rootdt,sprint,nil,nil,specialhandler,forceraw)
- else -- probably dt
- serialize(root,sprint,nil,nil,specialhandler,forceraw)
- end
- 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
---~ rawroot = false
- -- quit
- elseif type(root) == 'string' then
---~ rawroot = false
- capture:match(root)
- elseif next(root) then -- tr == 'table'
- rawroot = forceraw and root
- serialize(root,lines,forceraw)
- 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(texcatcodes,linecommand,"{}") end +
- verbose / function(s) texsprint(vrbcatcodes,s) end +
- space / function( ) texsprint(texcatcodes,spacecommand,"{}") end
- )^0
-
- local function toverbatim(str)
- if beforecommand then texsprint(texcatcodes,beforecommand,"{}") end
- capture:match(str)
- if aftercommand then texsprint(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
-
- -- local capture = (space^0*newline)^0 * capture * (space+newline)^0 * -1
-
- local function toverbatim(str)
- if beforecommand then texsprint(texcatcodes,beforecommand,"{}") end
- -- todo: add this to capture
- str = str:gsub("^[ \t]+[\n\r]+","")
- str = str:gsub("[ \t\n\r]+$","")
- capture:match(str)
- if aftercommand then texsprint(texcatcodes,aftercommand,"{}") end
- end
-
- function lxml.verbatim(id,before,after)
- local root = get_id(id)
- if root then
- if before then texsprint(ctxcatcodes,format("%s[%s]",before,root.tg)) end
- -- serialize(root.dt,toverbatim,nil,nil,nil,true) -- was root
- local t = { }
- serialize(root.dt,function(s) t[#t+1] = s end,nil,nil,nil,true) -- was root
- toverbatim(table.concat(t,""))
- if after then texsprint(ctxcatcodes,after) end
- 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)
- if str then
- local a, b, c, d = parser:match(str)
- if d then
- texsprint(ctxcatcodes,format("\\xmlcontextdirective{%s}{%s}{%s}{%s}",a,b,c,d))
- end
- end
- end
-
- -- print(contextdirective("context-mathml-directive function reduction yes "))
- -- print(contextdirective("context-mathml-directive function "))
-
- function lxml.main(id)
- serialize(get_id(id),sprint,nil,nil,specialhandler) -- the real root (@rt@)
- end
-
- specialhandler['@dt@'] = function()
- -- nothing
- end
-
-end
-
-local xmlsprint = xml.sprint
-local xmltprint = xml.tprint
-
--- redefine xml load
-
-xml.originalload = xml.originalload or xml.load
-
-local starttiming, stoptiming = statistics.starttiming, statistics.stoptiming
-
-function xml.load(filename)
- lxml.n = lxml.n + 1
- starttiming(xml)
- local xmldata = xml.convert((filename and resolvers.loadtexfile(filename)) or "")
- stoptiming(xml)
- return xmldata
-end
-
-function lxml.load(id,filename)
- lxml.n = lxml.n + 1
- filename = commands.preparedfile(filename)
- if trace_loading then
- commands.writestatus("lxml","loading file: %s",filename)
- end
- loaded[id] = xml.load(filename)
- return loaded[id], filename
-end
-
-function lxml.register(id,xmltable)
- lxml.n = lxml.n + 1
- loaded[id] = xmltable
- return xmltable
-end
-
-function lxml.include(id,pattern,attribute,recurse)
- starttiming(xml)
- xml.include(get_id(id),pattern,attribute,recurse,function(filename)
- if filename then
- filename = commands.preparedfile(filename)
- if trace_loading then
- commands.writestatus("lxml","including file: %s",filename)
- end
- return resolvers.loadtexfile(filename) or ""
- else
- return ""
- end
- end)
- stoptiming(xml)
-end
-
-function lxml.utfize(id)
- xml.utfize(get_id(id))
-end
-
-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))
- traverse(get_id(id), lpath(pattern), function(r,d,k)
- -- to be checked for root::
- if d then
- xmlsprint(d[k])
- else -- new, maybe wrong
---~ xmlsprint(r)
- end
- return false
- end)
-end
-
-function lxml.nonspace(id,pattern) -- slow, todo loop
- xmltprint(xmlcollect(get_id(id),pattern,true))
-end
-
---~ function lxml.content(id)
---~ xmlsprint(xmlcontent(get_id(id)) or "")
---~ end
-
-function lxml.strip(id,pattern,nolines)
- xml.strip(get_id(id),pattern,nolines)
-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
- xml.serialize(c.dt,texsprint,nil,nil,nil,true)
- end
-end
-
-function lxml.snippet(id,i)
- local e = get_id(id)
- if e then
- local edt = e.dt
- if edt then
- xmlsprint(edt[i])
- end
- end
-end
-
-function xml.element(e,n)
- if e then
- local edt = e.dt
- if edt then
- if n > 0 then
- for i=1,#edt do
- local ei = edt[i]
- if type(ei) == "table" then
- if n == 1 then
- xmlsprint(ei)
- return
- else
- n = n - 1
- end
- end
- end
- elseif n < 0 then
- for i=#edt,1,-1 do
- local ei = edt[i]
- if type(ei) == "table" then
- if n == -1 then
- xmlsprint(ei)
- return
- else
- n = n + 1
- end
- end
- end
- end
- end
- end
-end
-
-function lxml.element(id,n)
- xml.element(get_id(id),n)
-end
-
-function lxml.stripped(id,pattern,nolines)
- local str = xmlcontent(get_id(id),pattern) or ""
- str = str:gsub("^%s*(.-)%s*$","%1")
- if nolines then
- str = str:gsub("%s+"," ")
- end
- xmlsprint(str)
-end
-
-function lxml.flush(id)
- id = get_id(id)
- local dt = id and id.dt
- if dt then
- xmlsprint(dt)
- end
-end
-
---~ function lxml.strip(id,flush)
---~ local dt = get_id(id).dt
---~ local str = dt[1]
---~ if type(str) == "string" then
---~ dt[1] = str:gsub("^ *","")
---~ end
---~ str = dt[#dt]
---~ if type(str) == "string" then
---~ dt[#dt] = str:gsub(" *$","")
---~ end
---~ if flush then
---~ xmlsprint(dt)
---~ end
---~ 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.nofelements(id)
- local e = get_id(id)
- local edt = e.dt
- if edt and type(edt) == "table" then
- local n = 0
- for i=1,#edt do
- if type(edt[i]) == "table" then
- n = n + 1
- end
- end
- texsprint(n)
- else
- texsprint(0)
- end
-end
-function lxml.name(id) -- or remapped name? -> lxml.info, combine
- local r = get_id(id)
- local ns = r.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 = xmlcollect_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(ctxcatcodes,lastseparator)
- elseif separator ~= "" then
- texsprint(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(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
-
-function lxml.setsetup(id,pattern,setup)
- 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
- if tg then -- to be sure
- local command = (ns == "" and tg) or (ns .. ":" .. tg)
- if setup == "-" then
- dtdk.command = false
- if trace then
- logs.report("lxml","lpath matched -> %s -> skipped", command)
- end
- elseif setup == "+" then
- dtdk.command = true
- if trace_setups then
- logs.report("lxml","lpath matched -> %s -> text", command)
- end
- else
- dtdk.command = command
- if trace_setups then
- logs.report("lxml","lpath matched -> %s -> %s", command, command)
- end
- 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_setups then
- if ns == "" then
- logs.report("lxml","lpath matched -> %s -> skipped", tg)
- else
- logs.report("lxml","lpath matched -> %s:%s -> skipped", ns, tg)
- end
- end
- elseif b == "+" then
- dtdk.command = true
- if trace_setups then
- if ns == "" then
- logs.report("lxml","lpath matched -> %s -> text", tg)
- else
- logs.report("lxml","lpath matched -> %s:%s -> text", ns, tg)
- end
- end
- else
- dtdk.command = a .. tg
- if trace_setups then
- if ns == "" then
- logs.report("lxml","lpath matched -> %s -> %s", tg, dtdk.command)
- else
- logs.report("lxml","lpath matched -> %s:%s -> %s", ns, tg, dtdk.command)
- end
- end
- end
- end
- else
- if trace_setups then
- logs.report("lxml","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_setups then
- local ns, tg = dtdk.rn or dtdk.ns, dtdk.tg
- if ns == "" then
- logs.report("lxml","lpath matched -> %s -> %s", tg, setup)
- else
- logs.report("lxml","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] = xmlcollect_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
-
-
-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 -- probably a bug
- local n = #myself + 1
- myself[n] = m
- texsprint(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
-
-local function dofunction(root,pattern,fnc)
- traverse(root, lpath(pattern), xml.functions[fnc]) -- r, d, t
-end
-
-xml.filters["function"] = dofunction
-
---~ <?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)
- local fullname = resolvers.find_file(filename) or ""
- if fullname ~= "" then
- filename = fullname
- 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(ctxcatcodes,format("\\directsetup{%s}",setup))
- else
- setup = data[format("%s::%s::*",element,attribute)]
- if setup then
- setup = setup[category]
- end
- if setup then
- texsprint(ctxcatcodes,format("\\directsetup{%s}",setup:gsub('%*',value)))
- 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
- starttiming(xml)
- loaded[id] = xml.convert(buffers.collect(name or id,"\n"))
- stoptiming(xml)
- return loaded[id], name or id
-end
-
-function lxml.loaddata(id,str)
- starttiming(xml)
- loaded[id] = xml.convert(str or "")
- stoptiming(xml)
- return loaded[id], id
-end
-
-function lxml.loadregistered(id)
- return loaded[id], id
-end
-
--- for the moment here:
-
-lxml.set_verbatim("\\xmlcdatabefore", "\\xmlcdataafter", "\\xmlcdataobeyedline", "\\xmlcdataobeyedspace")
-lxml.set_cdata()
-
-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 = utfchar(d)
- logs.report("lxml","entity: %s / %s / %s / n=%s",h,d,u,traced[v])
- else
- logs.report("lxml","entity: %s / n=%s",v,traced[v])
- end
- end
-end
-
-local error_entity_handler = function(s) return format("[%s]",s) end
-local element_entity_handler = function(s) return format("<ctx:e n='%s'/>",s) end
-
-function lxml.set_mkii_entityhandler()
- xml.entity_handler = error_entity_handler
- xml.set_text_cleanup()
-end
-function lxml.set_mkiv_entityhandler()
- xml.entity_handler = element_entity_handler
- xml.set_text_cleanup(xml.resolve_text_entities)
-end
-function lxml.reset_entityhandler()
- xml.entity_handler = error_entity_handler
- xml.set_text_cleanup()
-end
-
-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(loaded) do
- t[id] = lxml.get_command_status(id)
- end
- return t
- end
-end
-
-local setups = { }
-
-function lxml.installsetup(what,document,setup,where)
- document = document or "*"
- local sd = setups[document]
- if not sd then sd = { } setups[document] = sd end
- for k=1,#sd do
- if sd[k] == setup then sd[k] = nil break end
- end
- if what == 1 then
- if trace_loading then
- commands.writestatus("lxml","prepending setup %s for %s",setup,document)
- end
- insert(sd,1,setup)
- elseif what == 2 then
- if trace_loading then
- commands.writestatus("lxml","appending setup %s for %s",setup,document)
- end
- insert(sd,setup)
- elseif what == 3 then
- if trace_loading then
- commands.writestatus("lxml","inserting setup %s for %s before %s",setup,document,where)
- end
- table.insert_before_value(sd,setup,where)
- elseif what == 4 then
- if trace_loading then
- commands.writestatus("lxml","inserting setup %s for %s after %s",setup,document,where)
- end
- table.insert_after_value(sd,setup,where)
- end
-end
-
-function lxml.flushsetups(...)
- local done = { }
- for _, document in ipairs({...}) do
- local sd = setups[document]
- if sd then
- for k=1,#sd do
- local v= sd[k]
- if not done[v] then
- if trace_loading then
- commands.writestatus("lxml","applying setup %02i = %s to %s",k,v,document)
- end
- texsprint(ctxcatcodes,format("\\directsetup{%s}",v))
- done[v] = true
- end
- end
- elseif trace_loading then
- commands.writestatus("lxml","no setups for %s",document)
- end
- end
-end
-
-function lxml.resetsetups(document)
- if trace_loading then
- commands.writestatus("lxml","resetting all setups for %s",document)
- end
- setups[document] = { }
-end
-
-function lxml.removesetup(document,setup)
- local s = setups[document]
- if s then
- for i=1,#s do
- if s[i] == setup then
- if trace_loading then
- commands.writestatus("lxml","removing setup %s for %s",setup,document)
- end
- remove(t,i)
- break
- end
- end
- end
-end
-
-local found, isempty = xml.found, xml.isempty
-
-function lxml.doif (id,pattern) commands.doif (found(get_id(id),pattern,false)) end
-function lxml.doifnot (id,pattern) commands.doifnot (found(get_id(id),pattern,false)) end
-function lxml.doifelse (id,pattern) commands.doifelse(found(get_id(id),pattern,false)) end
-
--- todo: if no second arg or second arg == "" then quick test
-
-function lxml.doiftext (id,pattern) commands.doif (found (get_id(id),pattern,true)) end
-function lxml.doifnottext (id,pattern) commands.doifnot (found (get_id(id),pattern,true)) end
-function lxml.doifelsetext (id,pattern) commands.doifelse(found (get_id(id),pattern,true)) end
-
--- special case: "*" and "" -> self else lpath lookup
-
-function lxml.doifelseempty(id,pattern) commands.doifelse(isempty(get_id(id),pattern ~= "" and pattern ~= nil)) end -- not yet done, pattern
-
--- status info
-
-statistics.register("xml load time", function()
- local n = lxml.n
- if n > 0 then
- local stats = xml.statistics()
- return format("%s seconds, lpath calls: %s, cached calls: %s", statistics.elapsedtime(xml), stats.lpathcalls, stats.lpathcached)
- else
- return nil
- end
-end)
-
-statistics.register("lxml load time", function()
- local n = #lxml.self
- if n > 0 then
- return format("%s seconds preparation, backreferences: %i", statistics.elapsedtime(lxml),n)
- else
- return nil
- end
-end)
diff --git a/Master/texmf-dist/tex/context/base/lxml-ini.mkiv b/Master/texmf-dist/tex/context/base/lxml-ini.mkiv
index 34a14f9d9f5..0f04d048808 100644
--- a/Master/texmf-dist/tex/context/base/lxml-ini.mkiv
+++ b/Master/texmf-dist/tex/context/base/lxml-ini.mkiv
@@ -11,36 +11,47 @@
%C therefore copyrighted by \PRAGMA. See mreadme.pdf for
%C details.
+%D Todo: auto apply setups (manage at lua end)
+
\writestatus{loading}{ConTeXt XML Support / Initialization}
-\registerctxluafile{lxml-tab}{1.001}
-\registerctxluafile{lxml-pth}{1.001}
-\registerctxluafile{lxml-ent}{1.001}
-\registerctxluafile{lxml-mis}{1.001}
-\registerctxluafile{lxml-ini}{1.001}
+%registerctxluafile{lxml-tab}{1.001} % loader
+%registerctxluafile{lxml-lpt}{1.001} % parser
+%registerctxluafile{lxml-xml}{1.001} % xml finalizers
+%registerctxluafile{lxml-aux}{1.001} % extras using parser
+%registerctxluafile{lxml-mis}{1.001} % extras independent of parser
+\registerctxluafile{lxml-ent}{1.001} % entity hacks
+\registerctxluafile{lxml-tex}{1.001} % tex finalizers
+\registerctxluafile{lxml-dir}{1.001} % ctx hacks
\unprotect
+\def\c!entities{entities} % to be internationalized
+
\def\xmlmain #1{\ctxlua{lxml.main("#1")}}
+\def\xmlmatch #1{\ctxlua{lxml.match("#1")}}
\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\xmlatt #1#2{\ctxlua{lxml.att("#1","#2")}}
+\def\xmlattdef #1#2#3{\ctxlua{lxml.att("#1","#2","#3")}}
+\def\xmlchainatt #1#2{\ctxlua{lxml.chainattribute("#1","/","#2")}}
+\def\xmlchainattdef #1#2#3{\ctxlua{lxml.chainattribute("#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\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\xmlcount #1#2{\ctxlua{lxml.count("#1","#2")}}
-\def\xmldelete #1#2{\ctxlua{xml.delete(lxml.id("#1"),"#2")}}
+\def\xmldelete #1#2{\ctxlua{lxml.delete("#1","#2")}}
\def\xmldirectives #1{\ctxlua{lxml.directives.setup("#1")}}
\def\xmldirectivesbefore #1{\ctxlua{lxml.directives.before("#1")}}
\def\xmldirectivesafter #1{\ctxlua{lxml.directives.after("#1")}}
\def\xmlfilter #1#2{\ctxlua{lxml.filter("#1",\!!bs#2\!!es)}}
+\def\xmlfilterlist #1#2{\ctxlua{lxml.filterlist("#1",\!!bs#2\!!es)}}
+\def\xmlfunction #1#2{\ctxlua{lxml["function"]("#1",\!!bs#2\!!es)}}
\def\xmlfirst #1#2{\ctxlua{lxml.first("#1","#2")}}
\def\xmlflush #1{\ctxlua{lxml.flush("#1")}}
-% \def\xmlcontent #1{\ctxlua{lxml.content("#1")}}
-% \def\xmlstrip #1{\ctxlua{lxml.strip("#1")}}
-% \def\xmlflushstripped #1{\ctxlua{lxml.strip("#1",true)}}
+%def\xmlcontent #1{\ctxlua{lxml.content("#1")}}
+%def\xmlflushstripped #1{\ctxlua{lxml.strip("#1",true)}}
\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)}}
@@ -48,18 +59,14 @@
\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\xmlloadregistered #1#2{\ctxlua{lxml.loadregistered("#1")}}
-\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\xmlcontext #1#2{\ctxlua{lxml.context("#1","#2")}}
+\def\xmlflushcontext #1{\ctxlua{lxml.context("#1")}}
\def\xmlsnippet #1#2{\ctxlua{lxml.snippet("#1",#2)}}
\def\xmlelement #1#2{\ctxlua{lxml.element("#1",#2)}}
-\def\xmlnofelements #1{\ctxlua{lxml.nofelements("#1")}}
\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
@@ -67,17 +74,23 @@
\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\xmlstripnolines #1#2{\ctxlua{lxml.strip("#1","#2",true)}}
+\def\xmlstripanywhere #1#2{\ctxlua{lxml.strip("#1","#2",true,true)}}
+\def\xmlstripped #1#2{\ctxlua{lxml.stripped("#1","#2")}}
\def\xmlstrippednolines #1#2{\ctxlua{lxml.stripped("#1","#2",true)}}
\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\xmldisplayverbatim #1{\ctxlua{lxml.displayverbatim("#1")}}
\def\xmlinlineverbatim #1{\ctxlua{lxml.inlineverbatim("#1")}}
+\def\xmlload #1#2{\ctxlua{lxml.load("#1","#2","\@@xmentities","\@@xmcompress")}}
+\def\xmlloadbuffer #1#2{\ctxlua{lxml.loadbuffer("#1","#2","\@@xmentities","\@@xmcompress")}}
+\def\xmlloaddata #1#2{\ctxlua{lxml.loaddata("#1",\!!bs#2\!!es,"\@@xmentities","\@@xmcompress")}}
+\def\xmlloadregistered #1#2{\ctxlua{lxml.loadregistered("#1","\@@xmentities","\@@xmcompress")}}
+\def\xmlloaddirectives #1{\ctxlua{lxml.directives.load("any:///#1")}}
+\def\xmlpos #1{\ctxlua{lxml.pos("#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 ))}}
@@ -88,17 +101,15 @@
% todo: \xmldoifelseattribute
-\def\xmldoif #1#2{\ctxlua{lxml.doif("#1","#2")}}
-\def\xmldoifnot #1#2{\ctxlua{lxml.doifnot("#1","#2")}}
-\def\xmldoifelse #1#2{\ctxlua{lxml.doifelse("#1","#2")}}
-\def\xmldoiftext #1#2{\ctxlua{lxml.doiftext("#1","#2")}}
-\def\xmldoifnottext #1#2{\ctxlua{lxml.doifnottext("#1","#2")}}
-\def\xmldoifelsetext #1#2{\ctxlua{lxml.doifelsetext("#1","#2")}}
-\def\xmldoifelseempty #1#2{\ctxlua{lxml.doifelseempty("#1","#2")}} % #2, "*" or "" == self not yet implemented
-\def\xmldoifelseselfempty #1{\ctxlua{lxml.doifelseempty("#1")}}
+\def\xmldoif #1#2{\ctxlua{lxml.doif (\!!bs#1\!!es,\!!bs#2\!!es)}}
+\def\xmldoifnot #1#2{\ctxlua{lxml.doifnot (\!!bs#1\!!es,\!!bs#2\!!es)}}
+\def\xmldoifelse #1#2{\ctxlua{lxml.doifelse (\!!bs#1\!!es,\!!bs#2\!!es)}}
+\def\xmldoiftext #1#2{\ctxlua{lxml.doiftext (\!!bs#1\!!es,\!!bs#2\!!es)}}
+\def\xmldoifnottext #1#2{\ctxlua{lxml.doifnottext (\!!bs#1\!!es,\!!bs#2\!!es)}}
+\def\xmldoifelsetext #1#2{\ctxlua{lxml.doifelsetext(\!!bs#1\!!es,\!!bs#2\!!es)}}
-\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}
+%def\xmldoifelseempty #1#2{\ctxlua{lxml.doifelseempty("#1","#2")}} % #2, "*" or "" == self not yet implemented
+%def\xmldoifelseselfempty #1{\ctxlua{lxml.doifelseempty("#1")}}
% \startxmlsetups xml:include
% \xmlinclude{main}{include}{filename|href}
@@ -106,15 +117,17 @@
%
% \xmlprependsetup{xml:include}
-\let\xmlgrab\xmlsetsetup
+\let\xmlgrab\xmlsetsetup % obsolete
+\let\xmlself\s!unknown % obsolete
+
+\def\xmlsetup#1#2{\setupwithargument{#2}{#1}}
-\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; maybe self becomes obsolete
- \setupwithargument{#2}{#1}}
+\let\xmls\xmlsetup
+\let\xmlw\setupwithargument
\newtoks \registeredxmlsetups
-% todo: 1:xml:whatever alwas before 3:xml:something
+% todo: 1:xml:whatever always before 3:xml:something
\def\xmlprependsetup #1{\ctxlua{lxml.installsetup(1,"*","#1")}}
\def\xmlappendsetup #1{\ctxlua{lxml.installsetup(2,"*","#1")}}
@@ -129,7 +142,7 @@
\def\xmlremovesetup #1{\ctxlua{lxml.removesetup("*","#1")}}
\def\xmlremovedocumentsetup #1#2{\ctxlua{lxml.removesetup("#1","#2")}}
-\def\xmlflushdocumentsetups #1{\ctxlua{lxml.flushsetups("*","#1")}}
+\def\xmlflushdocumentsetups #1#2{\ctxlua{lxml.flushsetups("#1","*","#2")}} % #1 == id where to apply * and #2
\def\xmlresetdocumentsetups #1{\ctxlua{lxml.resetsetups("#1")}}
\let\xmlregistersetup \xmlappendsetup
@@ -143,58 +156,59 @@
\xmldefaulttotext\xmldocument % after include
\xmlstoptiming}
-\def\xmlregistereddocumentsetups#1%
+\def\xmlregistereddocumentsetups#1#2% id setups
{\xmlstarttiming
% todo: test for duplicates !
- \xmlflushdocumentsetups{#1}%
+ \xmlflushdocumentsetups{#1}{#2}%
\xmldefaulttotext{#1}% after include
\xmlstoptiming}
\def\xmlstarttiming{\ctxlua{statistics.starttiming(lxml)}}
\def\xmlstoptiming {\ctxlua{statistics.stoptiming (lxml)}}
-\def\doxmlprocess#1#2#3#4%
+\def\doxmlprocess#1#2#3#4#5% flag \loader id name what initializersetup
{\begingroup
- \edef\xmldocument{#2}% #2 can be \xmldocument and set as such
- #1{#2}{#3}%
- \ifcase\xmlprocessingmode
- \enableXML
- \else
- \setcatcodetable\notcatcodes
- \fi
- \doifelsenothing{#4}
- {\directsetup{xml:process}}
- {\directsetup{#4}}%
+ \edef\xmldocument{#3}% #2 can be \xmldocument and set as such
+ %xmlpushdocument{#3}%
+ #2{#3}{#4}%
+ \setcatcodetable\notcatcodes
+ \doifelsenothing{#5}
+ {\xmlsetup{#3}{xml:process}}
+ {\xmlsetup{#3}{#5}}%
+ %xmlpopdocument
\endgroup}
-\def\xmlprocessfile {\doxmlprocess\xmlload}
-\def\xmlprocessdata {\doxmlprocess\xmlloaddata}
-\def\xmlprocessbuffer {\doxmlprocess\xmlloadbuffer}
-\def\xmlprocessregistered{\doxmlprocess\xmlloadregistered}
+\def\xmlprocessfile {\doxmlprocess\plusone \xmlload}
+\def\xmlprocessdata {\doxmlprocess\zerocount\xmlloaddata}
+\def\xmlprocessbuffer {\doxmlprocess\zerocount\xmlloadbuffer}
+\def\xmlprocessregistered{\doxmlprocess\zerocount\xmlloadregistered}
\let\xmlprocess \xmlprocessfile
+\startxmlsetups xml:flush
+ \xmlflush{#1}
+\stopxmlsetups
+
+\startxmlsetups xml:process
+ \xmlregistereddocumentsetups{#1}{#1}
+ \xmlmain{#1}
+\stopxmlsetups
+
+\def\xmlloadonly#1#2#3%
+ {\xmlload{#1}{#2}%
+ \xmlregistereddocumentsetups{#1}{#3}}
+
% beware: \xmlmain takes the real root, so also processing
% instructions preceding the root element; well, in some
% sense that is the root
-\startsetups xml:process
- \xmlregistereddocumentsetups\xmldocument
- \xmlmain\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}%
+ \xmlall{#1}{#2}%
\else
- \dorecurse \scratchcounter {
- \ifnum\recurselevel>\plusone#3\fi
- \xmlidx{#1}{#2}{\recurselevel}
- }
+ \dorecurse \scratchcounter
+ {\ifnum\recurselevel>\plusone#3\fi
+ \xmlidx{#1}{#2}\recurselevel}%
\fi}
\def\xmlcdataobeyedline {\obeyedline}
@@ -208,10 +222,10 @@
% \xmlsetfunction{main}{verbatim}{lxml.displayverbatim}
% \xmlsetfunction{main}{verb} {lxml.inlineverbatim}
-% \def\startxmldisplayverbatim[#1]{}
-% \def\stopxmldisplayverbatim {}
-% \def\startxmlinlineverbatim [#1]{}
-% \def\stopxmlinlineverbatim {}
+% \unexpanded\def\startxmldisplayverbatim[#1]{}
+% \unexpanded\def\stopxmldisplayverbatim {}
+% \unexpanded\def\startxmlinlineverbatim [#1]{}
+% \unexpanded\def\stopxmlinlineverbatim {}
% we use an xml: namespace so one has to define a suitable verbatim, say
%
@@ -219,35 +233,35 @@
%
% this is experimental!
-\def\startxmldisplayverbatim[#1]%
+\unexpanded\def\startxmldisplayverbatim[#1]%
{\startpacked % \begingroup
\let\currenttypingclass\??tp
\edef\currenttyping{xml:#1}%
- \def\stopxmldisplayverbatim
+ \unexpanded\def\stopxmldisplayverbatim
{\endofverbatimlines
\stoppacked} % \endgroup
- \mkinitializeverbatim
+ \doinitializeverbatim
\beginofverbatimlines}
-\def\startxmlinlineverbatim[#1]%
+\unexpanded\def\startxmlinlineverbatim[#1]%
{\begingroup
\let\currenttypingclass\??ty
\edef\currenttyping{xml:#1}%
\let\stopxmldisplayverbatim\endgroup
- \mkinitializeverbatim}
+ \doinitializeverbatim}
% will move but is developed for xml
\newtoks \collectingtoks
-\def\startcollect#1\stopcollect
+\unexpanded\def\startcollect#1\stopcollect
{\collectingtoks\@EA{\the\collectingtoks#1}}
-\def\startexpandedcollect#1\stopexpandedcollect
- {\expanded{\collectingtoks{\the\collectingtoks#1}}}
+\unexpanded\def\startexpandedcollect#1\stopexpandedcollect
+ {\normalexpanded{\collectingtoks{\the\collectingtoks#1}}}
-\def\startcollecting{\collectingtoks\emptytoks}
-\def\stopcollecting {\the\collectingtoks}
+\unexpanded\def\startcollecting{\collectingtoks\emptytoks}
+\unexpanded\def\stopcollecting {\the\collectingtoks}
\def\inlinemessage #1{\dontleavehmode{\tttf#1}}
\def\displaymessage#1{\blank\inlinemessage{#1}\blank}
@@ -263,98 +277,43 @@
% setting up xml:
%
-% \setupxml[\c!method=mkii] % mixed mkiv and mkii
-% \setupxml[\c!method=mkiv,\c!default=] % mkiv only
-% \setupxml[\c!method=mkiv,\c!default=\v!none] % mkiv only, undefined -> hidden
-% \setupxml[\c!method=mkiv,\c!default=\v!text] % mkiv only, undefined -> text
+% \setupxml[\c!default=] % mkiv only == text
+% \setupxml[\c!default=\v!none] % mkiv only, undefined -> hidden
+% \setupxml[\c!default=\v!text] % mkiv only, undefined -> text
% \def\xmlctxdirective#1#2#3{\doif{#1}{clue}{\doif{#2}{page}}{\page[#3]}}
-\chardef\xmlprocessingmode=0 % 0=mixed, 1=mkivonly, 2=mkivonly-default-text, 3=mkivonly-default-none
-
-% \setupxml[method=mkiv,strip=yes,entities=yes,default=text]
+\chardef\xmlprocessingmode=0 % 0=unset, 1=text, 2=hidden
\newtoks\everysetupxml
-\def\setupxml[#1]{\getparameters[\??xm][#1]\the\everysetupxml}
-
-\def\c!entities{entities} % to be internationalized
-\def\s!mkiv {mkiv}
-\def\s!mkii {mkii}
-
-% entities
-
-\newif\ifautoXMLentities
-
-\def\xmlkeepentities{\ctxlua{lxml.reset_entityhandler()}}
-\def\xmlmkiientities{\ctxlua{lxml.set_mkii_entityhandler()}\autoXMLentitiestrue}
-\def\xmlmkiventities{\ctxlua{lxml.set_mkiv_entityhandler()}}
-
-\let\xmlresolveentities\xmlmkiventities % will become \xmlmkiventities
+\unexpanded\def\setupxml[#1]{\getparameters[\??xm][#1]\the\everysetupxml}
-\letvalue{\??xm:1:\s!mkii }\zerocount
-\letvalue{\??xm:1:\s!mkiv }\plusone
-\letvalue{\??xm:2:\v!none }\plusone
-\letvalue{\??xm:2:\v!text }\plustwo
-\letvalue{\??xm:2:\v!hidden}\plusthree
+\letvalue{\??xm:\s!default:\v!normal}\zerocount
+\letvalue{\??xm:\s!default:\v!none }\zerocount
+\letvalue{\??xm:\s!default:\v!text }\plusone
+\letvalue{\??xm:\s!default:\v!hidden}\plustwo
-\letvalue{\??xm:ii:\v!yes }\xmlresolveentities
-\letvalue{\??xm:ii:\v!no }\xmlkeepentities
-\letvalue{\??xm:ii:\s!mkii}\xmlmkiientities
-\letvalue{\??xm:ii:\s!mkiv}\xmlmkiventities
-
-\letvalue{\??xm:iv:\v!yes }\xmlresolveentities
-\letvalue{\??xm:iv:\v!no }\xmlkeepentities
-\letvalue{\??xm:iv:\s!mkii}\xmlmkiventities
-\letvalue{\??xm:iv:\s!mkiv}\xmlmkiventities
+\def\xmldefaulttotext#1%
+ {\ifcase\xmlprocessingmode
+ % unset
+ \or
+ \ctxlua{lxml.set_command_to_text("#1")}% 1
+ \or
+ \ctxlua{lxml.set_command_to_none("#1")}% 2
+ \else
+ % unset
+ \fi}
\appendtoks
- \chardef\xmlprocessingmode\executeifdefined{\??xm:1:\@@xmmethod}\zerocount
- \ifcase\xmlprocessingmode
- % mkii, permits both methods
- \executeifdefined{\??xm:ii:\@@xmentities}\xmlkeepentities
- \or
- % mkiv, mkiv exclusively
- \chardef\xmlprocessingmode\executeifdefined{\??xm:2:\@@xmdefault}\plusone
- \executeifdefined{\??xm:iv:\@@xmentities}\xmlresolveentities
- \else
- % unset
- \fi
- \ifcase\xmlprocessingmode
- \ctxlua{characters.setmkiientities()}%
- \else
- \ctxlua{characters.setmkiventities()}%
- \fi
- \doifelse\@@xmcompress\v!yes % this key may change, maybe compress=yes|no
- {\ctxlua{xml.strip_cm_and_dt=true}}
- {\ctxlua{xml.strip_cm_and_dt=false}}%
+ \chardef\xmlprocessingmode\executeifdefined{\??xm:\s!default:\@@xmdefault}\plusone
\to \everysetupxml
\def\xmlinitialize{\the\everysetupxml}
-\newcount\charactersactiveoffset \charactersactiveoffset="10000
-
-\startextendcatcodetable\ctxcatcodes
- \catcode\numexpr\charactersactiveoffset+`<\relax=13
- \catcode\numexpr\charactersactiveoffset+`&\relax=13
- \catcode\numexpr\charactersactiveoffset+`>\relax=13
-\stopextendcatcodetable
-\startextendcatcodetable\xmlcatcodes
- \catcode\numexpr\charactersactiveoffset+`<\relax=13
- \catcode\numexpr\charactersactiveoffset+`&\relax=13
- \catcode\numexpr\charactersactiveoffset+`>\relax=13
-\stopextendcatcodetable
-
-\ctxlua { % entities are remembered in the format
- characters.remapentity("<",characters.active_offset + utf.byte("<"))
- characters.remapentity("&",characters.active_offset + utf.byte("&"))
- characters.remapentity(">",characters.active_offset + utf.byte(">"))
-}
-
\setupxml
- [\c!method=mkii, % mixed mode
- \c!default=\v!hidden, % ignore elements that are not defined
+ [\c!default=, % flush all
\c!compress=\v!no, % strip comment
\c!entities=\v!yes] % replace entities
@@ -376,33 +335,80 @@
%
% mkii: [\processXMLbuffer]\quad mkiv: [\xmlprocessbuffer{main}{}{}]
-% some mkii commands, but mkiv-ified
-
-\def\xmlmapvalue#1#2#3{\setvalue{\??xm:v:#1:#2}{#3}} % keep #3 to grab spaces
-\def\xmlvalue #1#2#3{\executeifdefined{\??xm:v:#1:#2}{#3}}
+\def\xmlmapvalue #1#2#3{\setvalue{\??xm:v:#1:#2}{#3}} % keep #3 to grab spaces
+\def\xmlvalue #1#2#3{\executeifdefined{\??xm:v:#1:#2}{#3}}
+%def\xmlvalue #1#2{\ifcsname\??xm:v:#1:#2\endcsname\csname\??xm:v:#1:#2\expandafter\expandafter\gobbleoneargument\expandafter\endcsname\else\expandafter\firstofoneargument\fi}
+\def\xmldoifelsevalue #1#2{\ifcsname\??xm:v:#1:#2\endcsname\expandafter\firstoftwoarguments\else\expandafter\secondoftwoarguments\fi}
\let\xmlmapval\xmlmapvalue
\let\xmlval \xmlvalue
-% brrrr, give this at the top of a style that needs to stub mkiv loading
+%D Experimental:
+
+\def\xmlgetindex #1{\ctxlua{lxml.getindex("\xmldocument","#1")}}
+\def\xmlrawindex #1{\ctxlua{lxml.rawindex("#1")}}
+\def\xmlwithindex #1#2{\ctxlua{lxml.withindex("\xmldocument","#1","#2")}}
+\def\xmlreference #1#2{\string\xmlwithindex{#1}{#2}}
+
+%D Entities:
+
+\chardef\xmlautoentities=1 % 0=off, 1=upper, 2=upper,lower
+
+\let\isolatedentity\firstofoneargument
+
+\def\xmlsetentity#1#2{\ctxlua{xml.register_entity('#1',\!!bs\detokenize{#2}\!!es)}}
+\def\xmltexentity#1#2{\ctxlua{xml.register_entity('#1',\!!bs\detokenize{\isolatedentity{#2}}\!!es)}}
-\def\remapXMLtoMKIV
- {\ifx\xmldocument\undefined\def\xmldocument{main}\fi
- \def\processXMLfile ##1{\xmlprocessfile \xmldocument{##1}{}}%
- \def\processXMLfilegrouped ##1{\xmlprocessfile \xmldocument{##1}{}}% maybe still grouped?
- \def\processXMLbuffer {\dosingleempty\doprocessXMLbuffer}%
- \def\doprocessXMLbuffer [##1]{\xmlprocessbuffer\xmldocument{##1}{}}%
- \def\XMLdata ##1{\xmlprocessdata \xmldocument{##1}{}}%
- \def\startXMLdata##1\stopXMLdata{\xmlprocessdata \xmldocument{##1}{}}}
+% \xmlsetentity{tex}{\TEX{}} % {} needed
-\let\normalprocessXMLfilegrouped\processXMLfilegrouped
+\unexpanded\def\xmle
+ {\ifcase\xmlautoentities
+ \expandafter\xmle@none
+ \or
+ \expandafter\xmle@upper
+ \or
+ \expandafter\xmle@upperlower
+ \else
+ \expandafter\xmle@none
+ \fi}
+
+\def\xmle@none#1#2% safe
+ {#1}
-\def\processXMLfileMKIV % one-shot, will become obsolete, personal hack
- {\dosingleempty\doprocessXMLfileMKIV}
+\def\xmle@upper#1#2% can be abbreviation
+ {\ifcsname#2\endcsname
+ \csname#2\expandafter\endcsname
+ \else
+ #1%
+ \fi}
-\def\doprocessXMLfileMKIV[#1]%
- {\def\processXMLfilegrouped##1%
- {\let\processXMLfilegrouped\normalprocessXMLfilegrouped
- \doifelsenothing{#1}{\xmlprocess{main}{##1}{}}{\xmlprocess{#1}{##1}{}}}}
+\def\xmle@upperlower#1#2% can be anything, so unsafe
+ {\ifcsname#2\endcsname
+ \csname#2\expandafter\endcsname
+ \else\ifcsname#1\endcsname
+ \csname#1\expandafter\expandafter\expandafter\endcsname
+ \else
+ #1%
+ \fi\fi}
\protect \endinput
+
+% \newcount\charactersactiveoffset \charactersactiveoffset="10000
+%
+% \startextendcatcodetable\ctxcatcodes
+% \catcode\numexpr\charactersactiveoffset+`<\relax=13
+% \catcode\numexpr\charactersactiveoffset+`&\relax=13
+% \catcode\numexpr\charactersactiveoffset+`>\relax=13
+% \stopextendcatcodetable
+%
+% \startextendcatcodetable\xmlcatcodes % not needed
+% \catcode\numexpr\charactersactiveoffset+`<\relax=13
+% \catcode\numexpr\charactersactiveoffset+`&\relax=13
+% \catcode\numexpr\charactersactiveoffset+`>\relax=13
+% \stopextendcatcodetable
+%
+% \ctxlua { % entities are remembered in the format
+% characters.remapentity("<",characters.active_offset + utf.byte("<"))
+% characters.remapentity("&",characters.active_offset + utf.byte("&"))
+% characters.remapentity(">",characters.active_offset + utf.byte(">"))
+% }
diff --git a/Master/texmf-dist/tex/context/base/lxml-lpt.lua b/Master/texmf-dist/tex/context/base/lxml-lpt.lua
new file mode 100644
index 00000000000..bddbe48685c
--- /dev/null
+++ b/Master/texmf-dist/tex/context/base/lxml-lpt.lua
@@ -0,0 +1,1259 @@
+if not modules then modules = { } end modules ['lxml-pth'] = {
+ 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"
+}
+
+-- e.ni is only valid after a filter run
+
+local concat, remove, insert = table.concat, table.remove, table.insert
+local type, next, tonumber, tostring, setmetatable, loadstring = type, next, tonumber, tostring, setmetatable, loadstring
+local format, upper, lower, gmatch, gsub, find, rep = string.format, string.upper, string.lower, string.gmatch, string.gsub, string.find, string.rep
+local lpegmatch = lpeg.match
+
+-- beware, this is not xpath ... e.g. position is different (currently) and
+-- we have reverse-sibling as reversed preceding sibling
+
+--[[ldx--
+<p>This module can be used stand alone but also inside <l n='mkiv'/> in
+which case it hooks into the tracker code. Therefore we provide a few
+functions that set the tracers. Here we overload a previously defined
+function.</p>
+<p>If I can get in the mood I will make a variant that is XSLT compliant
+but I wonder if it makes sense.</P>
+--ldx]]--
+
+--[[ldx--
+<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>
+--ldx]]--
+
+local trace_lpath = false if trackers then trackers.register("xml.path", function(v) trace_lpath = v end) end
+local trace_lparse = false if trackers then trackers.register("xml.parse", function(v) trace_lparse = v end) end
+local trace_lprofile = false if trackers then trackers.register("xml.profile", function(v) trace_lpath = v trace_lparse = v trace_lprofile = v end) end
+
+--[[ldx--
+<p>We've now arrived at an interesting 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]]--
+
+local lpathcalls = 0 function xml.lpathcalls () return lpathcalls end
+local lpathcached = 0 function xml.lpathcached() return lpathcached end
+
+xml.functions = xml.functions or { } -- internal
+xml.expressions = xml.expressions or { } -- in expressions
+xml.finalizers = xml.finalizers or { } -- fast do-with ... (with return value other than collection)
+xml.specialhandler = xml.specialhandler or { }
+
+local functions = xml.functions
+local expressions = xml.expressions
+local finalizers = xml.finalizers
+
+finalizers.xml = finalizers.xml or { }
+finalizers.tex = finalizers.tex or { }
+
+local function fallback (t, name)
+ local fn = finalizers[name]
+ if fn then
+ t[name] = fn
+ else
+ logs.report("xml","unknown sub finalizer '%s'",tostring(name))
+ fn = function() end
+ end
+ return fn
+end
+
+setmetatable(finalizers.xml, { __index = fallback })
+setmetatable(finalizers.tex, { __index = fallback })
+
+xml.defaultprotocol = "xml"
+
+-- as xsl does not follow xpath completely here we will also
+-- be more liberal especially with regards to the use of | and
+-- the rootpath:
+--
+-- test : all 'test' under current
+-- /test : 'test' relative to current
+-- a|b|c : set of names
+-- (a|b|c) : idem
+-- ! : not
+--
+-- after all, we're not doing transformations but filtering. in
+-- addition we provide filter functions (last bit)
+--
+-- todo: optimizer
+--
+-- .. : parent
+-- * : all kids
+-- / : anchor here
+-- // : /**/
+-- ** : all in between
+--
+-- so far we had (more practical as we don't transform)
+--
+-- {/test} : kids 'test' under current node
+-- {test} : any kid with tag 'test'
+-- {//test} : same as above
+
+-- evaluator (needs to be redone, for the moment copied)
+
+-- todo: apply_axis(list,notable) and collection vs single
+
+local apply_axis = { }
+
+apply_axis['root'] = function(list)
+ local collected = { }
+ for l=1,#list do
+ local ll = list[l]
+ local rt = ll
+ while ll do
+ ll = ll.__p__
+ if ll then
+ rt = ll
+ end
+ end
+ collected[#collected+1] = rt
+ end
+ return collected
+end
+
+apply_axis['self'] = function(list)
+--~ local collected = { }
+--~ for l=1,#list do
+--~ collected[#collected+1] = list[l]
+--~ end
+--~ return collected
+ return list
+end
+
+apply_axis['child'] = function(list)
+ local collected = { }
+ for l=1,#list do
+ local ll = list[l]
+ local dt = ll.dt
+ local en = 0
+ for k=1,#dt do
+ local dk = dt[k]
+ if dk.tg then
+ collected[#collected+1] = dk
+ dk.ni = k -- refresh
+ en = en + 1
+ dk.ei = en
+ end
+ end
+ ll.en = en
+ end
+ return collected
+end
+
+local function collect(list,collected)
+ local dt = list.dt
+ if dt then
+ local en = 0
+ for k=1,#dt do
+ local dk = dt[k]
+ if dk.tg then
+ collected[#collected+1] = dk
+ dk.ni = k -- refresh
+ en = en + 1
+ dk.ei = en
+ collect(dk,collected)
+ end
+ end
+ list.en = en
+ end
+end
+apply_axis['descendant'] = function(list)
+ local collected = { }
+ for l=1,#list do
+ collect(list[l],collected)
+ end
+ return collected
+end
+
+local function collect(list,collected)
+ local dt = list.dt
+ if dt then
+ local en = 0
+ for k=1,#dt do
+ local dk = dt[k]
+ if dk.tg then
+ collected[#collected+1] = dk
+ dk.ni = k -- refresh
+ en = en + 1
+ dk.ei = en
+ collect(dk,collected)
+ end
+ end
+ list.en = en
+ end
+end
+apply_axis['descendant-or-self'] = function(list)
+ local collected = { }
+ for l=1,#list do
+ local ll = list[l]
+ if ll.special ~= true then -- catch double root
+ collected[#collected+1] = ll
+ end
+ collect(ll,collected)
+ end
+ return collected
+end
+
+apply_axis['ancestor'] = function(list)
+ local collected = { }
+ for l=1,#list do
+ local ll = list[l]
+ while ll do
+ ll = ll.__p__
+ if ll then
+ collected[#collected+1] = ll
+ end
+ end
+ end
+ return collected
+end
+
+apply_axis['ancestor-or-self'] = function(list)
+ local collected = { }
+ for l=1,#list do
+ local ll = list[l]
+ collected[#collected+1] = ll
+ while ll do
+ ll = ll.__p__
+ if ll then
+ collected[#collected+1] = ll
+ end
+ end
+ end
+ return collected
+end
+
+apply_axis['parent'] = function(list)
+ local collected = { }
+ for l=1,#list do
+ local pl = list[l].__p__
+ if pl then
+ collected[#collected+1] = pl
+ end
+ end
+ return collected
+end
+
+apply_axis['attribute'] = function(list)
+ return { }
+end
+
+apply_axis['namespace'] = function(list)
+ return { }
+end
+
+apply_axis['following'] = function(list) -- incomplete
+--~ local collected = { }
+--~ for l=1,#list do
+--~ local ll = list[l]
+--~ local p = ll.__p__
+--~ local d = p.dt
+--~ for i=ll.ni+1,#d do
+--~ local di = d[i]
+--~ if type(di) == "table" then
+--~ collected[#collected+1] = di
+--~ break
+--~ end
+--~ end
+--~ end
+--~ return collected
+ return { }
+end
+
+apply_axis['preceding'] = function(list) -- incomplete
+--~ local collected = { }
+--~ for l=1,#list do
+--~ local ll = list[l]
+--~ local p = ll.__p__
+--~ local d = p.dt
+--~ for i=ll.ni-1,1,-1 do
+--~ local di = d[i]
+--~ if type(di) == "table" then
+--~ collected[#collected+1] = di
+--~ break
+--~ end
+--~ end
+--~ end
+--~ return collected
+ return { }
+end
+
+apply_axis['following-sibling'] = function(list)
+ local collected = { }
+ for l=1,#list do
+ local ll = list[l]
+ local p = ll.__p__
+ local d = p.dt
+ for i=ll.ni+1,#d do
+ local di = d[i]
+ if type(di) == "table" then
+ collected[#collected+1] = di
+ end
+ end
+ end
+ return collected
+end
+
+apply_axis['preceding-sibling'] = function(list)
+ local collected = { }
+ for l=1,#list do
+ local ll = list[l]
+ local p = ll.__p__
+ local d = p.dt
+ for i=1,ll.ni-1 do
+ local di = d[i]
+ if type(di) == "table" then
+ collected[#collected+1] = di
+ end
+ end
+ end
+ return collected
+end
+
+apply_axis['reverse-sibling'] = function(list) -- reverse preceding
+ local collected = { }
+ for l=1,#list do
+ local ll = list[l]
+ local p = ll.__p__
+ local d = p.dt
+ for i=ll.ni-1,1,-1 do
+ local di = d[i]
+ if type(di) == "table" then
+ collected[#collected+1] = di
+ end
+ end
+ end
+ return collected
+end
+
+apply_axis['auto-descendant-or-self'] = apply_axis['descendant-or-self']
+apply_axis['auto-descendant'] = apply_axis['descendant']
+apply_axis['auto-child'] = apply_axis['child']
+apply_axis['auto-self'] = apply_axis['self']
+apply_axis['initial-child'] = apply_axis['child']
+
+local function apply_nodes(list,directive,nodes)
+ -- todo: nodes[1] etc ... negated node name in set ... when needed
+ -- ... currently ignored
+ local maxn = #nodes
+ if maxn == 3 then --optimized loop
+ local nns, ntg = nodes[2], nodes[3]
+ if not nns and not ntg then -- wildcard
+ if directive then
+ return list
+ else
+ return { }
+ end
+ else
+ local collected, m, p = { }, 0, nil
+ if not nns then -- only check tag
+ for l=1,#list do
+ local ll = list[l]
+ local ltg = ll.tg
+ if ltg then
+ if directive then
+ if ntg == ltg then
+ local llp = ll.__p__ ; if llp ~= p then p, m = llp, 1 else m = m + 1 end
+ collected[#collected+1], ll.mi = ll, m
+ end
+ elseif ntg ~= ltg then
+ local llp = ll.__p__ ; if llp ~= p then p, m = llp, 1 else m = m + 1 end
+ collected[#collected+1], ll.mi = ll, m
+ end
+ end
+ end
+ elseif not ntg then -- only check namespace
+ for l=1,#list do
+ local ll = list[l]
+ local lns = ll.rn or ll.ns
+ if lns then
+ if directive then
+ if lns == nns then
+ local llp = ll.__p__ ; if llp ~= p then p, m = llp, 1 else m = m + 1 end
+ collected[#collected+1], ll.mi = ll, m
+ end
+ elseif lns ~= nns then
+ local llp = ll.__p__ ; if llp ~= p then p, m = llp, 1 else m = m + 1 end
+ collected[#collected+1], ll.mi = ll, m
+ end
+ end
+ end
+ else -- check both
+ for l=1,#list do
+ local ll = list[l]
+ local ltg = ll.tg
+ if ltg then
+ local lns = ll.rn or ll.ns
+ local ok = ltg == ntg and lns == nns
+ if directive then
+ if ok then
+ local llp = ll.__p__ ; if llp ~= p then p, m = llp, 1 else m = m + 1 end
+ collected[#collected+1], ll.mi = ll, m
+ end
+ elseif not ok then
+ local llp = ll.__p__ ; if llp ~= p then p, m = llp, 1 else m = m + 1 end
+ collected[#collected+1], ll.mi = ll, m
+ end
+ end
+ end
+ end
+ return collected
+ end
+ else
+ local collected, m, p = { }, 0, nil
+ for l=1,#list do
+ local ll = list[l]
+ local ltg = ll.tg
+ if ltg then
+ local lns = ll.rn or ll.ns
+ local ok = false
+ for n=1,maxn,3 do
+ local nns, ntg = nodes[n+1], nodes[n+2]
+ ok = (not ntg or ltg == ntg) and (not nns or lns == nns)
+ if ok then
+ break
+ end
+ end
+ if directive then
+ if ok then
+ local llp = ll.__p__ ; if llp ~= p then p, m = llp, 1 else m = m + 1 end
+ collected[#collected+1], ll.mi = ll, m
+ end
+ elseif not ok then
+ local llp = ll.__p__ ; if llp ~= p then p, m = llp, 1 else m = m + 1 end
+ collected[#collected+1], ll.mi = ll, m
+ end
+ end
+ end
+ return collected
+ end
+end
+
+local quit_expression = false
+
+local function apply_expression(list,expression,order)
+ local collected = { }
+ quit_expression = false
+ for l=1,#list do
+ local ll = list[l]
+ if expression(list,ll,l,order) then -- nasty, order alleen valid als n=1
+ collected[#collected+1] = ll
+ end
+ if quit_expression then
+ break
+ end
+ end
+ return collected
+end
+
+local P, V, C, Cs, Cc, Ct, R, S, Cg, Cb = lpeg.P, lpeg.V, lpeg.C, lpeg.Cs, lpeg.Cc, lpeg.Ct, lpeg.R, lpeg.S, lpeg.Cg, lpeg.Cb
+
+local spaces = S(" \n\r\t\f")^0
+local lp_space = S(" \n\r\t\f")
+local lp_any = P(1)
+local lp_noequal = P("!=") / "~=" + P("<=") + P(">=") + P("==")
+local lp_doequal = P("=") / "=="
+local lp_or = P("|") / " or "
+local lp_and = P("&") / " and "
+
+local lp_builtin = P (
+ P("firstindex") / "1" +
+ P("lastindex") / "(#ll.__p__.dt or 1)" +
+ P("firstelement") / "1" +
+ P("lastelement") / "(ll.__p__.en or 1)" +
+ P("first") / "1" +
+ P("last") / "#list" +
+ P("rootposition") / "order" +
+ P("position") / "l" + -- is element in finalizer
+ P("order") / "order" +
+ P("element") / "(ll.ei or 1)" +
+ P("index") / "(ll.ni or 1)" +
+ P("match") / "(ll.mi or 1)" +
+ P("text") / "(ll.dt[1] or '')" +
+ -- P("name") / "(ll.ns~='' and ll.ns..':'..ll.tg)" +
+ P("name") / "((ll.ns~='' and ll.ns..':'..ll.tg) or ll.tg)" +
+ P("tag") / "ll.tg" +
+ P("ns") / "ll.ns"
+ ) * ((spaces * P("(") * spaces * P(")"))/"")
+
+local lp_attribute = (P("@") + P("attribute::")) / "" * Cc("(ll.at and ll.at['") * R("az","AZ","--","__")^1 * Cc("'])")
+local lp_fastpos_p = ((P("+")^0 * R("09")^1 * P(-1)) / function(s) return "l==" .. s end)
+local lp_fastpos_n = ((P("-") * R("09")^1 * P(-1)) / function(s) return "(" .. s .. "<0 and (#list+".. s .. "==l))" end)
+local lp_fastpos = lp_fastpos_n + lp_fastpos_p
+local lp_reserved = C("and") + C("or") + C("not") + C("div") + C("mod") + C("true") + C("false")
+
+local lp_lua_function = C(R("az","AZ","__")^1 * (P(".") * R("az","AZ","__")^1)^1) * ("(") / function(t) -- todo: better . handling
+ return t .. "("
+end
+
+local lp_function = C(R("az","AZ","__")^1) * P("(") / function(t) -- todo: better . handling
+ if expressions[t] then
+ return "expr." .. t .. "("
+ else
+ return "expr.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) -- lpeg.P{"("*C(((1-S("()"))+V(1))^0)*")"}
+
+local lp_child = Cc("expr.child(ll,'") * R("az","AZ","--","__")^1 * Cc("')")
+local lp_number = S("+-") * R("09")^1
+local lp_string = Cc("'") * R("az","AZ","--","__")^1 * Cc("'")
+local lp_content = (P("'") * (1-P("'"))^0 * P("'") + P('"') * (1-P('"'))^0 * P('"'))
+
+local cleaner
+
+local lp_special = (C(P("name")+P("text")+P("tag")+P("count")+P("child"))) * value / function(t,s)
+ if expressions[t] then
+ s = s and s ~= "" and lpegmatch(cleaner,s)
+ if s and s ~= "" then
+ return "expr." .. t .. "(ll," .. s ..")"
+ else
+ return "expr." .. t .. "(ll)"
+ end
+ else
+ return "expr.error(" .. t .. ")"
+ end
+end
+
+local content =
+ lp_builtin +
+ lp_attribute +
+ lp_special +
+ lp_noequal + lp_doequal +
+ lp_or + lp_and +
+ lp_reserved +
+ lp_lua_function + lp_function +
+ lp_content + -- too fragile
+ lp_child +
+ lp_any
+
+local converter = Cs (
+ lp_fastpos + (P { lparent * (V(1))^0 * rparent + content } )^0
+)
+
+cleaner = Cs ( (
+--~ lp_fastpos +
+ lp_reserved +
+ lp_number +
+ lp_string +
+1 )^1 )
+
+
+--~ expr
+
+local template_e = [[
+ local expr = xml.expressions
+ return function(list,ll,l,order)
+ return %s
+ end
+]]
+
+local template_f_y = [[
+ local finalizer = xml.finalizers['%s']['%s']
+ return function(collection)
+ return finalizer(collection,%s)
+ end
+]]
+
+local template_f_n = [[
+ return xml.finalizers['%s']['%s']
+]]
+
+--
+
+local register_self = { kind = "axis", axis = "self" } -- , apply = apply_axis["self"] }
+local register_parent = { kind = "axis", axis = "parent" } -- , apply = apply_axis["parent"] }
+local register_descendant = { kind = "axis", axis = "descendant" } -- , apply = apply_axis["descendant"] }
+local register_child = { kind = "axis", axis = "child" } -- , apply = apply_axis["child"] }
+local register_descendant_or_self = { kind = "axis", axis = "descendant-or-self" } -- , apply = apply_axis["descendant-or-self"] }
+local register_root = { kind = "axis", axis = "root" } -- , apply = apply_axis["root"] }
+local register_ancestor = { kind = "axis", axis = "ancestor" } -- , apply = apply_axis["ancestor"] }
+local register_ancestor_or_self = { kind = "axis", axis = "ancestor-or-self" } -- , apply = apply_axis["ancestor-or-self"] }
+local register_attribute = { kind = "axis", axis = "attribute" } -- , apply = apply_axis["attribute"] }
+local register_namespace = { kind = "axis", axis = "namespace" } -- , apply = apply_axis["namespace"] }
+local register_following = { kind = "axis", axis = "following" } -- , apply = apply_axis["following"] }
+local register_following_sibling = { kind = "axis", axis = "following-sibling" } -- , apply = apply_axis["following-sibling"] }
+local register_preceding = { kind = "axis", axis = "preceding" } -- , apply = apply_axis["preceding"] }
+local register_preceding_sibling = { kind = "axis", axis = "preceding-sibling" } -- , apply = apply_axis["preceding-sibling"] }
+local register_reverse_sibling = { kind = "axis", axis = "reverse-sibling" } -- , apply = apply_axis["reverse-sibling"] }
+
+local register_auto_descendant_or_self = { kind = "axis", axis = "auto-descendant-or-self" } -- , apply = apply_axis["auto-descendant-or-self"] }
+local register_auto_descendant = { kind = "axis", axis = "auto-descendant" } -- , apply = apply_axis["auto-descendant"] }
+local register_auto_self = { kind = "axis", axis = "auto-self" } -- , apply = apply_axis["auto-self"] }
+local register_auto_child = { kind = "axis", axis = "auto-child" } -- , apply = apply_axis["auto-child"] }
+
+local register_initial_child = { kind = "axis", axis = "initial-child" } -- , apply = apply_axis["initial-child"] }
+
+local register_all_nodes = { kind = "nodes", nodetest = true, nodes = { true, false, false } }
+
+local skip = { }
+
+local function errorrunner_e(str,cnv)
+ if not skip[str] then
+ logs.report("lpath","error in expression: %s => %s",str,cnv)
+ skip[str] = cnv or str
+ end
+ return false
+end
+local function errorrunner_f(str,arg)
+ logs.report("lpath","error in finalizer: %s(%s)",str,arg or "")
+ return false
+end
+
+local function register_nodes(nodetest,nodes)
+ return { kind = "nodes", nodetest = nodetest, nodes = nodes }
+end
+
+local function register_expression(expression)
+ local converted = lpegmatch(converter,expression)
+ local runner = loadstring(format(template_e,converted))
+ runner = (runner and runner()) or function() errorrunner_e(expression,converted) end
+ return { kind = "expression", expression = expression, converted = converted, evaluator = runner }
+end
+
+local function register_finalizer(protocol,name,arguments)
+ local runner
+ if arguments and arguments ~= "" then
+ runner = loadstring(format(template_f_y,protocol or xml.defaultprotocol,name,arguments))
+ else
+ runner = loadstring(format(template_f_n,protocol or xml.defaultprotocol,name))
+ end
+ runner = (runner and runner()) or function() errorrunner_f(name,arguments) end
+ return { kind = "finalizer", name = name, arguments = arguments, finalizer = runner }
+end
+
+local expression = P { "ex",
+ ex = "[" * C((V("sq") + V("dq") + (1 - S("[]")) + V("ex"))^0) * "]",
+ sq = "'" * (1 - S("'"))^0 * "'",
+ dq = '"' * (1 - S('"'))^0 * '"',
+}
+
+local arguments = P { "ar",
+ ar = "(" * Cs((V("sq") + V("dq") + V("nq") + P(1-P(")")))^0) * ")",
+ nq = ((1 - S("),'\""))^1) / function(s) return format("%q",s) end,
+ sq = P("'") * (1 - P("'"))^0 * P("'"),
+ dq = P('"') * (1 - P('"'))^0 * P('"'),
+}
+
+-- todo: better arg parser
+
+local function register_error(str)
+ return { kind = "error", error = format("unparsed: %s",str) }
+end
+
+-- there is a difference in * and /*/ and so we need to catch a few special cases
+
+local special_1 = P("*") * Cc(register_auto_descendant) * Cc(register_all_nodes) -- last one not needed
+local special_2 = P("/") * Cc(register_auto_self)
+local special_3 = P("") * Cc(register_auto_self)
+
+local parser = Ct { "patterns", -- can be made a bit faster by moving pattern outside
+
+ patterns = spaces * V("protocol") * spaces * (
+ ( V("special") * spaces * P(-1) ) +
+ ( V("initial") * spaces * V("step") * spaces * (P("/") * spaces * V("step") * spaces)^0 )
+ ),
+
+ protocol = Cg(V("letters"),"protocol") * P("://") + Cg(Cc(nil),"protocol"),
+
+ -- the / is needed for // as descendant or self is somewhat special
+ -- step = (V("shortcuts") + V("axis") * spaces * V("nodes")^0 + V("error")) * spaces * V("expressions")^0 * spaces * V("finalizer")^0,
+ step = ((V("shortcuts") + P("/") + V("axis")) * spaces * V("nodes")^0 + V("error")) * spaces * V("expressions")^0 * spaces * V("finalizer")^0,
+
+ axis = V("descendant") + V("child") + V("parent") + V("self") + V("root") + V("ancestor") +
+ V("descendant_or_self") + V("following_sibling") + V("following") +
+ V("reverse_sibling") + V("preceding_sibling") + V("preceding") + V("ancestor_or_self") +
+ #(1-P(-1)) * Cc(register_auto_child),
+
+ special = special_1 + special_2 + special_3,
+
+ initial = (P("/") * spaces * Cc(register_initial_child))^-1,
+
+ error = (P(1)^1) / register_error,
+
+ shortcuts_a = V("s_descendant_or_self") + V("s_descendant") + V("s_child") + V("s_parent") + V("s_self") + V("s_root") + V("s_ancestor"),
+
+ shortcuts = V("shortcuts_a") * (spaces * "/" * spaces * V("shortcuts_a"))^0,
+
+ s_descendant_or_self = (P("***/") + P("/")) * Cc(register_descendant_or_self), --- *** is a bonus
+ -- s_descendant_or_self = P("/") * Cc(register_descendant_or_self),
+ s_descendant = P("**") * Cc(register_descendant),
+ s_child = P("*") * #(1-P(":")) * Cc(register_child ),
+-- s_child = P("*") * #(P("/")+P(-1)) * Cc(register_child ),
+ s_parent = P("..") * Cc(register_parent ),
+ s_self = P("." ) * Cc(register_self ),
+ s_root = P("^^") * Cc(register_root ),
+ s_ancestor = P("^") * Cc(register_ancestor ),
+
+ descendant = P("descendant::") * Cc(register_descendant ),
+ child = P("child::") * Cc(register_child ),
+ parent = P("parent::") * Cc(register_parent ),
+ self = P("self::") * Cc(register_self ),
+ root = P('root::') * Cc(register_root ),
+ ancestor = P('ancestor::') * Cc(register_ancestor ),
+ descendant_or_self = P('descendant-or-self::') * Cc(register_descendant_or_self ),
+ ancestor_or_self = P('ancestor-or-self::') * Cc(register_ancestor_or_self ),
+ -- attribute = P('attribute::') * Cc(register_attribute ),
+ -- namespace = P('namespace::') * Cc(register_namespace ),
+ following = P('following::') * Cc(register_following ),
+ following_sibling = P('following-sibling::') * Cc(register_following_sibling ),
+ preceding = P('preceding::') * Cc(register_preceding ),
+ preceding_sibling = P('preceding-sibling::') * Cc(register_preceding_sibling ),
+ reverse_sibling = P('reverse-sibling::') * Cc(register_reverse_sibling ),
+
+ nodes = (V("nodefunction") * spaces * P("(") * V("nodeset") * P(")") + V("nodetest") * V("nodeset")) / register_nodes,
+
+ expressions = expression / register_expression,
+
+ letters = R("az")^1,
+ name = (1-lpeg.S("/[]()|:*!"))^1,
+ negate = P("!") * Cc(false),
+
+ nodefunction = V("negate") + P("not") * Cc(false) + Cc(true),
+ nodetest = V("negate") + Cc(true),
+ nodename = (V("negate") + Cc(true)) * spaces * ((V("wildnodename") * P(":") * V("wildnodename")) + (Cc(false) * V("wildnodename"))),
+ wildnodename = (C(V("name")) + P("*") * Cc(false)) * #(1-P("(")),
+ nodeset = spaces * Ct(V("nodename") * (spaces * P("|") * spaces * V("nodename"))^0) * spaces,
+
+ finalizer = (Cb("protocol") * P("/")^-1 * C(V("name")) * arguments * P(-1)) / register_finalizer,
+
+}
+
+local cache = { }
+
+local function nodesettostring(set,nodetest)
+ local t = { }
+ for i=1,#set,3 do
+ local directive, ns, tg = set[i], set[i+1], set[i+2]
+ if not ns or ns == "" then ns = "*" end
+ if not tg or tg == "" then tg = "*" end
+ tg = (tg == "@rt@" and "[root]") or format("%s:%s",ns,tg)
+ t[#t+1] = (directive and tg) or format("not(%s)",tg)
+ end
+ if nodetest == false then
+ return format("not(%s)",concat(t,"|"))
+ else
+ return concat(t,"|")
+ end
+end
+
+local function tagstostring(list)
+ if #list == 0 then
+ return "no elements"
+ else
+ local t = { }
+ for i=1, #list do
+ local li = list[i]
+ local ns, tg = li.ns, li.tg
+ if not ns or ns == "" then ns = "*" end
+ if not tg or tg == "" then tg = "*" end
+ t[#t+1] = (tg == "@rt@" and "[root]") or format("%s:%s",ns,tg)
+ end
+ return concat(t," ")
+ end
+end
+
+xml.nodesettostring = nodesettostring
+
+local parse_pattern -- we have a harmless kind of circular reference
+
+local function lshow(parsed)
+ if type(parsed) == "string" then
+ parsed = parse_pattern(parsed)
+ end
+ local s = table.serialize_functions -- ugly
+ table.serialize_functions = false -- ugly
+ logs.report("lpath","%s://%s => %s",parsed.protocol or xml.defaultprotocol,parsed.pattern,table.serialize(parsed,false))
+ table.serialize_functions = s -- ugly
+end
+
+xml.lshow = lshow
+
+local function add_comment(p,str)
+ local pc = p.comment
+ if not pc then
+ p.comment = { str }
+ else
+ pc[#pc+1] = str
+ end
+end
+
+parse_pattern = function (pattern) -- the gain of caching is rather minimal
+ lpathcalls = lpathcalls + 1
+ if type(pattern) == "table" then
+ return pattern
+ else
+ local parsed = cache[pattern]
+ if parsed then
+ lpathcached = lpathcached + 1
+ else
+ parsed = lpegmatch(parser,pattern)
+ if parsed then
+ parsed.pattern = pattern
+ local np = #parsed
+ if np == 0 then
+ parsed = { pattern = pattern, register_self, state = "parsing error" }
+ logs.report("lpath","parsing error in '%s'",pattern)
+ lshow(parsed)
+ else
+ -- we could have done this with a more complex parser but this
+ -- is cleaner
+ local pi = parsed[1]
+ if pi.axis == "auto-child" then
+ if false then
+ add_comment(parsed, "auto-child replaced by auto-descendant-or-self")
+ parsed[1] = register_auto_descendant_or_self
+ else
+ add_comment(parsed, "auto-child replaced by auto-descendant")
+ parsed[1] = register_auto_descendant
+ end
+ elseif pi.axis == "initial-child" and np > 1 and parsed[2].axis then
+ add_comment(parsed, "initial-child removed") -- we could also make it a auto-self
+ remove(parsed,1)
+ end
+ local np = #parsed -- can have changed
+ if np > 1 then
+ local pnp = parsed[np]
+ if pnp.kind == "nodes" and pnp.nodetest == true then
+ local nodes = pnp.nodes
+ if nodes[1] == true and nodes[2] == false and nodes[3] == false then
+ add_comment(parsed, "redundant final wildcard filter removed")
+ remove(parsed,np)
+ end
+ end
+ end
+ end
+ else
+ parsed = { pattern = pattern }
+ end
+ cache[pattern] = parsed
+ if trace_lparse and not trace_lprofile then
+ lshow(parsed)
+ end
+ end
+ return parsed
+ end
+end
+
+-- we can move all calls inline and then merge the trace back
+-- technically we can combine axis and the next nodes which is
+-- what we did before but this a bit cleaner (but slower too)
+-- but interesting is that it's not that much faster when we
+-- go inline
+--
+-- beware: we need to return a collection even when we filter
+-- else the (simple) cache gets messed up
+
+-- caching found lookups saves not that much (max .1 sec on a 8 sec run)
+-- and it also messes up finalizers
+
+-- watch out: when there is a finalizer, it's always called as there
+-- can be cases that a finalizer returns (or does) something in case
+-- there is no match; an example of this is count()
+
+local profiled = { } xml.profiled = profiled
+
+local function profiled_apply(list,parsed,nofparsed,order)
+ local p = profiled[parsed.pattern]
+ if p then
+ p.tested = p.tested + 1
+ else
+ p = { tested = 1, matched = 0, finalized = 0 }
+ profiled[parsed.pattern] = p
+ end
+ local collected = list
+ for i=1,nofparsed do
+ local pi = parsed[i]
+ local kind = pi.kind
+ if kind == "axis" then
+ collected = apply_axis[pi.axis](collected)
+ elseif kind == "nodes" then
+ collected = apply_nodes(collected,pi.nodetest,pi.nodes)
+ elseif kind == "expression" then
+ collected = apply_expression(collected,pi.evaluator,order)
+ elseif kind == "finalizer" then
+ collected = pi.finalizer(collected)
+ p.matched = p.matched + 1
+ p.finalized = p.finalized + 1
+ return collected
+ end
+ if not collected or #collected == 0 then
+ local pn = i < nofparsed and parsed[nofparsed]
+ if pn and pn.kind == "finalizer" then
+ collected = pn.finalizer(collected)
+ p.finalized = p.finalized + 1
+ return collected
+ end
+ return nil
+ end
+ end
+ if collected then
+ p.matched = p.matched + 1
+ end
+ return collected
+end
+
+local function traced_apply(list,parsed,nofparsed,order)
+ if trace_lparse then
+ lshow(parsed)
+ end
+ logs.report("lpath", "collecting : %s",parsed.pattern)
+ logs.report("lpath", " root tags : %s",tagstostring(list))
+ logs.report("lpath", " order : %s",order or "unset")
+ local collected = list
+ for i=1,nofparsed do
+ local pi = parsed[i]
+ local kind = pi.kind
+ if kind == "axis" then
+ collected = apply_axis[pi.axis](collected)
+ logs.report("lpath", "% 10i : ax : %s",(collected and #collected) or 0,pi.axis)
+ elseif kind == "nodes" then
+ collected = apply_nodes(collected,pi.nodetest,pi.nodes)
+ logs.report("lpath", "% 10i : ns : %s",(collected and #collected) or 0,nodesettostring(pi.nodes,pi.nodetest))
+ elseif kind == "expression" then
+ collected = apply_expression(collected,pi.evaluator,order)
+ logs.report("lpath", "% 10i : ex : %s -> %s",(collected and #collected) or 0,pi.expression,pi.converted)
+ elseif kind == "finalizer" then
+ collected = pi.finalizer(collected)
+ logs.report("lpath", "% 10i : fi : %s : %s(%s)",(type(collected) == "table" and #collected) or 0,parsed.protocol or xml.defaultprotocol,pi.name,pi.arguments or "")
+ return collected
+ end
+ if not collected or #collected == 0 then
+ local pn = i < nofparsed and parsed[nofparsed]
+ if pn and pn.kind == "finalizer" then
+ collected = pn.finalizer(collected)
+ logs.report("lpath", "% 10i : fi : %s : %s(%s)",(type(collected) == "table" and #collected) or 0,parsed.protocol or xml.defaultprotocol,pn.name,pn.arguments or "")
+ return collected
+ end
+ return nil
+ end
+ end
+ return collected
+end
+
+local function normal_apply(list,parsed,nofparsed,order)
+ local collected = list
+ for i=1,nofparsed do
+ local pi = parsed[i]
+ local kind = pi.kind
+ if kind == "axis" then
+ local axis = pi.axis
+ if axis ~= "self" then
+ collected = apply_axis[axis](collected)
+ end
+ elseif kind == "nodes" then
+ collected = apply_nodes(collected,pi.nodetest,pi.nodes)
+ elseif kind == "expression" then
+ collected = apply_expression(collected,pi.evaluator,order)
+ elseif kind == "finalizer" then
+ return pi.finalizer(collected)
+ end
+ if not collected or #collected == 0 then
+ local pf = i < nofparsed and parsed[nofparsed].finalizer
+ if pf then
+ return pf(collected) -- can be anything
+ end
+ return nil
+ end
+ end
+ return collected
+end
+
+local function parse_apply(list,pattern)
+ -- we avoid an extra call
+ local parsed = cache[pattern]
+ if parsed then
+ lpathcalls = lpathcalls + 1
+ lpathcached = lpathcached + 1
+ elseif type(pattern) == "table" then
+ lpathcalls = lpathcalls + 1
+ parsed = pattern
+ else
+ parsed = parse_pattern(pattern) or pattern
+ end
+ if not parsed then
+ return
+ end
+ local nofparsed = #parsed
+ if nofparsed == 0 then
+ return -- something is wrong
+ end
+ local one = list[1]
+ if not one then
+ return -- something is wrong
+ elseif not trace_lpath then
+ return normal_apply(list,parsed,nofparsed,one.mi)
+ elseif trace_lprofile then
+ return profiled_apply(list,parsed,nofparsed,one.mi)
+ else
+ return traced_apply(list,parsed,nofparsed,one.mi)
+ end
+end
+
+-- internal (parsed)
+
+expressions.child = function(e,pattern)
+ return parse_apply({ e },pattern) -- todo: cache
+end
+expressions.count = function(e,pattern)
+ local collected = parse_apply({ e },pattern) -- todo: cache
+ return (collected and #collected) or 0
+end
+
+-- external
+
+expressions.oneof = function(s,...) -- slow
+ local t = {...} for i=1,#t do if s == t[i] then return true end end return false
+end
+expressions.error = function(str)
+ xml.error_handler("unknown function in lpath expression",tostring(str or "?"))
+ return false
+end
+expressions.undefined = function(s)
+ return s == nil
+end
+
+expressions.quit = function(s)
+ if s or s == nil then
+ quit_expression = true
+ end
+ return true
+end
+
+expressions.print = function(...)
+ print(...)
+ return true
+end
+
+expressions.contains = find
+expressions.find = find
+expressions.upper = upper
+expressions.lower = lower
+expressions.number = tonumber
+expressions.boolean = toboolean
+
+-- user interface
+
+local function traverse(root,pattern,handle)
+ logs.report("xml","use 'xml.selection' instead for '%s'",pattern)
+ local collected = parse_apply({ root },pattern)
+ if collected then
+ for c=1,#collected do
+ local e = collected[c]
+ local r = e.__p__
+ handle(r,r.dt,e.ni)
+ end
+ end
+end
+
+local function selection(root,pattern,handle)
+ local collected = parse_apply({ root },pattern)
+ if collected then
+ if handle then
+ for c=1,#collected do
+ handle(collected[c])
+ end
+ else
+ return collected
+ end
+ end
+end
+
+xml.parse_parser = parser
+xml.parse_pattern = parse_pattern
+xml.parse_apply = parse_apply
+xml.traverse = traverse -- old method, r, d, k
+xml.selection = selection -- new method, simple handle
+
+local lpath = parse_pattern
+
+xml.lpath = lpath
+
+function xml.cached_patterns()
+ return cache
+end
+
+-- generic function finalizer (independant namespace)
+
+local function dofunction(collected,fnc)
+ if collected then
+ local f = functions[fnc]
+ if f then
+ for c=1,#collected do
+ f(collected[c])
+ end
+ else
+ logs.report("xml","unknown function '%s'",fnc)
+ end
+ end
+end
+
+xml.finalizers.xml["function"] = dofunction
+xml.finalizers.tex["function"] = dofunction
+
+-- functions
+
+expressions.text = function(e,n)
+ local rdt = e.__p__.dt
+ return (rdt and rdt[n]) or ""
+end
+
+expressions.name = function(e,n) -- ns + tg
+ local found = false
+ n = tonumber(n) or 0
+ if n == 0 then
+ found = type(e) == "table" and e
+ elseif n < 0 then
+ local d, k = e.__p__.dt, e.ni
+ for i=k-1,1,-1 do
+ local di = d[i]
+ if type(di) == "table" then
+ if n == -1 then
+ found = di
+ break
+ else
+ n = n + 1
+ end
+ end
+ end
+ else
+ local d, k = e.__p__.dt, e.ni
+ for i=k+1,#d,1 do
+ local di = d[i]
+ if type(di) == "table" then
+ if n == 1 then
+ found = di
+ 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
+
+expressions.tag = function(e,n) -- only tg
+ if not e then
+ return ""
+ else
+ local found = false
+ n = tonumber(n) or 0
+ if n == 0 then
+ found = (type(e) == "table") and e -- seems to fail
+ elseif n < 0 then
+ local d, k = e.__p__.dt, e.ni
+ for i=k-1,1,-1 do
+ local di = d[i]
+ if type(di) == "table" then
+ if n == -1 then
+ found = di
+ break
+ else
+ n = n + 1
+ end
+ end
+ end
+ else
+ local d, k = e.__p__.dt, e.ni
+ for i=k+1,#d,1 do
+ local di = d[i]
+ if type(di) == "table" then
+ if n == 1 then
+ found = di
+ break
+ else
+ n = n - 1
+ end
+ end
+ end
+ end
+ return (found and found.tg) or ""
+ end
+end
+
+--[[ldx--
+<p>This is the main filter function. It returns whatever is asked for.</p>
+--ldx]]--
+
+function xml.filter(root,pattern) -- no longer funny attribute handling here
+ return parse_apply({ root },pattern)
+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]) -- old method
+end
+for e in xml.collected(xml.load('text.xml'),"title") do
+ print(e) -- new one
+end
+</typing>
+--ldx]]--
+
+local wrap, yield = coroutine.wrap, coroutine.yield
+
+function xml.elements(root,pattern,reverse) -- r, d, k
+ local collected = parse_apply({ root },pattern)
+ if collected then
+ if reverse then
+ return wrap(function() for c=#collected,1,-1 do
+ local e = collected[c] local r = e.__p__ yield(r,r.dt,e.ni)
+ end end)
+ else
+ return wrap(function() for c=1,#collected do
+ local e = collected[c] local r = e.__p__ yield(r,r.dt,e.ni)
+ end end)
+ end
+ end
+ return wrap(function() end)
+end
+
+function xml.collected(root,pattern,reverse) -- e
+ local collected = parse_apply({ root },pattern)
+ if collected then
+ if reverse then
+ return wrap(function() for c=#collected,1,-1 do yield(collected[c]) end end)
+ else
+ return wrap(function() for c=1,#collected do yield(collected[c]) end end)
+ end
+ end
+ return wrap(function() end)
+end
diff --git a/Master/texmf-dist/tex/context/base/lxml-mis.lua b/Master/texmf-dist/tex/context/base/lxml-mis.lua
index a117b1af92a..9fd4270af4a 100644
--- a/Master/texmf-dist/tex/context/base/lxml-mis.lua
+++ b/Master/texmf-dist/tex/context/base/lxml-mis.lua
@@ -8,17 +8,18 @@ if not modules then modules = { } end modules ['lxml-mis'] = {
local concat = table.concat
local type, next, tonumber, tostring, setmetatable, loadstring = type, next, tonumber, tostring, setmetatable, loadstring
-local format, gsub = string.format, string.gsub
+local format, gsub, match = string.format, string.gsub, string.match
+local lpegmatch = lpeg.match
--[[ldx--
-<p>The following helper functions best belong to the <t>lmxl-ini</t>
+<p>The following helper functions best belong to the <t>lxml-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)
+local function xmlgsub(t,old,new) -- will be replaced
local dt = t.dt
if dt then
for k=1,#dt do
@@ -26,28 +27,26 @@ function xml.gsub(t,old,new)
if type(v) == "string" then
dt[k] = gsub(v,old,new)
else
- xml.gsub(v,old,new)
+ xmlgsub(v,old,new)
end
end
end
end
+--~ xml.gsub = xmlgsub
+
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")
+ if d and k then
+ local dkm = d[k-1]
+ if dkm and type(dkm) == "string" then
+ local s = match(dkm,"\n(%s+)")
+ xmlgsub(dk,"\n"..rep(" ",#s),"\n")
+ end
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
+--~ xml.unescapes = { } for k,v in next, xml.escapes do xml.unescapes[v] = k end
--~ function xml.escaped (str) return (gsub(str,"(.)" , xml.escapes )) end
--~ function xml.unescaped(str) return (gsub(str,"(&.-;)", xml.unescapes)) end
@@ -71,8 +70,6 @@ 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)
@@ -85,22 +82,18 @@ xml.escaped_pattern = escaped
xml.unescaped_pattern = unescaped
xml.cleansed_pattern = cleansed
-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
+function xml.escaped (str) return lpegmatch(escaped,str) end
+function xml.unescaped(str) return lpegmatch(unescaped,str) end
+function xml.cleansed (str) return lpegmatch(cleansed,str) 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)
+-- this might move
+
+function xml.fillin(root,pattern,str,check)
+ local e = xml.first(root,pattern)
+ if e then
+ local n = #e.dt
+ if not check or n == 0 or (n == 1 and e.dt[1] == "") then
+ e.dt = { str }
end
- else
- return ""
end
end
diff --git a/Master/texmf-dist/tex/context/base/lxml-pth.lua b/Master/texmf-dist/tex/context/base/lxml-pth.lua
deleted file mode 100644
index b1afc8d6423..00000000000
--- a/Master/texmf-dist/tex/context/base/lxml-pth.lua
+++ /dev/null
@@ -1,1555 +0,0 @@
-if not modules then modules = { } end modules ['lxml-pth'] = {
- 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"
-}
-
-local concat, remove, insert = table.concat, table.remove, table.insert
-local type, next, tonumber, tostring, setmetatable, loadstring = type, next, tonumber, tostring, setmetatable, loadstring
-local format, lower, gmatch, gsub, find = string.format, string.lower, string.gmatch, string.gsub, string.find
-
---[[ldx--
-<p>This module can be used stand alone but also inside <l n='mkiv'/> in
-which case it hooks into the tracker code. Therefore we provide a few
-functions that set the tracers. Here we overload a previously defined
-function.</p>
---ldx]]--
-
-local trace_lpath = false
-
-if trackers then
- trackers.register("xml.lpath", function(v) trace_lpath = v end)
-end
-
-local settrace = xml.settrace -- lxml-tab
-
-function xml.settrace(str,value)
- if str == "lpath" then
- trace_lpath = value or false
- else
- settrace(str,value) -- lxml-tab
- 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]]--
-
-local lpathcalls = 0 -- statistics
-local lpathcached = 0 -- statistics
-
-xml.functions = xml.functions or { }
-xml.expressions = xml.expressions or { }
-
-local functions = xml.functions
-local expressions = xml.expressions
-
-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",
-}
-
--- a rather dumb lpeg
-
-local P, S, R, C, V, Cc = lpeg.P, lpeg.S, lpeg.R, lpeg.C, lpeg.V, lpeg.Cc
-
--- instead of using functions we just parse a few names which saves a call
--- later on
-
-local lp_position = P("position()") / "ps"
-local lp_index = P("index()") / "id"
-local lp_text = P("text()") / "tx"
-local lp_name = P("name()") / "(ns~='' and ns..':'..tg)" -- "((rt.ns~='' and rt.ns..':'..rt.tg) or '')"
-local lp_tag = P("tag()") / "tg" -- (rt.tg or '')
-local lp_ns = P("ns()") / "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_lua_function = C(R("az","AZ","--","__")^1 * (P(".") * R("az","AZ","--","__")^1)^1) * P("(") / function(t) -- todo: better . handling
- return t .. "("
-end
-
-local lp_function = C(R("az","AZ","--","__")^1) * P("(") / function(t) -- todo: better . handling
- if expressions[t] then
- return "expressions." .. t .. "("
- else
- return "expressions.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) -- lpeg.P{"("*C(((1-S("()"))+V(1))^0)*")"}
-
--- if we use a dedicated namespace then we don't need to pass rt and k
-
-local lp_special = (C(P("name")+P("text")+P("tag"))) * value / function(t,s)
- if expressions[t] then
- if s then
- return "expressions." .. t .. "(r,k," .. s ..")"
- else
- return "expressions." .. t .. "(r,k)"
- end
- else
- return "expressions.error(" .. t .. ")"
- end
-end
-
-local converter = lpeg.Cs ( (
- lp_position +
- lp_index +
- lp_text + lp_name + -- fast one
- lp_special +
- lp_noequal + lp_doequal +
- lp_attribute +
- lp_lua_function +
- lp_function +
-1 )^1 )
-
--- expressions,root,rootdt,k,e,edt,ns,tg,idx,hsh[tg] or 1
-
-local template = [[
- return function(expressions,r,d,k,e,dt,ns,tg,id,ps)
- local at, tx = e.at or { }, dt[1] or ""
- return %s
- end
-]]
-
-local function make_expression(str)
- str = converter:match(str)
- return str, loadstring(format(template,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 = 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 + -- brrr, not here !
- 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 +
- many + any +
- 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
- insert(map, 1, { 16 })
- end
- -- print(gsub(table.serialize(map),"[ \n]+"," "))
- return map
- end
- end
-end
-
-local cache = { }
-
-function xml.lpath(pattern,trace)
- lpathcalls = lpathcalls + 1
- if type(pattern) == "string" then
- local result = cache[pattern]
- if result == nil then -- can be false which is valid -)
- result = compose(pattern)
- cache[pattern] = result
- lpathcached = lpathcached + 1
- end
- if trace or trace_lpath then
- xml.lshow(result)
- end
- return result
- else
- return pattern
- end
-end
-
-function xml.cached_patterns()
- return cache
-end
-
--- we run out of locals (limited to 200)
---
--- local fallbackreport = (texio and texio.write) or io.write
-
-function xml.lshow(pattern,report)
--- report = report or fallbackreport
- report = report or (texio and texio.write) or io.write
- 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=1,#lp do
- local v = lp[k]
- 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
- local report = (type(t[#t]) == "function" and t[#t]) or (texio and texio.write) or io.write
- 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
-
---[[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]]--
-
-local functions = xml.functions
-local expressions = xml.expressions
-
-expressions.contains = string.find
-expressions.find = string.find
-expressions.upper = string.upper
-expressions.lower = string.lower
-expressions.number = tonumber
-expressions.boolean = toboolean
-
-expressions.oneof = function(s,...) -- slow
- local t = {...} for i=1,#t do if s == t[i] then return true end end return false
-end
-
-expressions.error = function(str)
- xml.error_handler("unknown function in lpath expression",str or "?")
- 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(d,k,n) -- ns + tg
- local found = false
- n = n or 0
- if not k then
- -- not found
- elseif n == 0 then
- local dk = d[k]
- found = dk and (type(dk) == "table") and dk
- elseif n < 0 then
- for i=k-1,1,-1 do
- local di = d[i]
- if type(di) == "table" then
- if n == -1 then
- found = di
- break
- else
- n = n + 1
- end
- end
- end
- else
- for i=k+1,#d,1 do
- local di = d[i]
- if type(di) == "table" then
- if n == 1 then
- found = di
- 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
-
-functions.tag = function(d,k,n) -- only tg
- local found = false
- n = n or 0
- if not k then
- -- not found
- elseif n == 0 then
- local dk = d[k]
- found = dk and (type(dk) == "table") and dk
- elseif n < 0 then
- for i=k-1,1,-1 do
- local di = d[i]
- if type(di) == "table" then
- if n == -1 then
- found = di
- break
- else
- n = n + 1
- end
- end
- end
- else
- for i=k+1,#d,1 do
- local di = d[i]
- if type(di) == "table" then
- if n == 1 then
- found = di
- break
- else
- n = n - 1
- end
- end
- end
- end
- return (found and found.tg) or ""
-end
-
-expressions.text = functions.text
-expressions.name = functions.name
-expressions.tag = functions.tag
-
-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
- local hsh = { } -- this will slooow down the lot
- 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
- -- we can optimize this for simple searches, but it probably does not pay off
- hsh[tg] = (hsh[tg] or 0) + 1
- 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](expressions,root,rootdt,k,e,edt,ns,tg,idx,hsh[tg] or 1)
- 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
-
---[[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]]--
-
-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[gsub(arguments,"^([\"\'])(.*)%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 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
- insert(d,k,element) -- untested
---~ elseif element.dt then
---~ for _,v in ipairs(element.dt) do -- i added
---~ insert(d,k,v)
---~ k = k + 1
---~ end
---~ end
- else
- local edt = element.dt
- if edt then
- for i=1,#edt do
- insert(d,k,edt[i])
- k = k + 1
- end
- 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] = 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 gmatch(attribute or "href","([^|]+)") 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, nolines) -- strips all leading and trailing space !
- 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" then
-
- if str == "" then
- -- stripped
- else
- if nolines then
- str = gsub(str,"[ \n\r\t]+"," ")
- end
- if str == "" then
- -- stripped
- else
- t[#t+1] = str
- end
- end
- else
- t[#t+1] = str
- end
- end
- d[k].dt = t
- end
- end)
-end
-
-local function rename_space(root, oldspace, newspace) -- fast variant
- local ndt = #root.dt
- 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_space(edt, oldspace, newspace)
- end
- end
- end
-end
-
-xml.rename_space = rename_space
-
-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
-
---[[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)
- local dt = t.dt
- if dt then
- for k=1,#dt do
- local v = dt[k]
- if type(v) == "string" then
- dt[k] = gsub(v,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 (gsub(str,"(.)" , xml.escapes )) end
---~ function xml.unescaped(str) return (gsub(str,"(&.-;)", xml.unescapes)) end
---~ function xml.cleansed (str) return (gsub(str,"<.->" , '' )) end -- "%b<>"
-
-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
-
-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
-
-function xml.statistics()
- return {
- lpathcalls = lpathcalls,
- lpathcached = lpathcached,
- }
-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.settrace("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/lxml-sor.lua b/Master/texmf-dist/tex/context/base/lxml-sor.lua
new file mode 100644
index 00000000000..e220bfad616
--- /dev/null
+++ b/Master/texmf-dist/tex/context/base/lxml-sor.lua
@@ -0,0 +1,158 @@
+if not modules then modules = { } end modules ['lxml-sor'] = {
+ version = 1.001,
+ comment = "companion to lxml-sor.mkiv",
+ author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
+ copyright = "PRAGMA ADE / ConTeXt Development Team",
+ license = "see context related readme files"
+}
+
+local format, concat = string.format, table.concat
+local lpegmatch = lpeg.match
+local texsprint, ctxcatcodes = tex.sprint, tex.ctxcatcodes
+
+lxml.sorters = lxml.sorters or { }
+
+if not lxml.splitid then
+ local splitter = lpeg.C((1-lpeg.P(":"))^1) * lpeg.P("::") * lpeg.C(lpeg.P(1)^1)
+ function lxml.splitid(id)
+ local d, i = lpegmatch(splitter,id)
+ if d then
+ return d, i
+ else
+ return "", id
+ end
+ end
+end
+
+local lists = { }
+
+function lxml.sorters.reset(name)
+ lists[name] = {
+ sorted = false,
+ entries = { },
+ reverse = { },
+ results = { },
+ }
+end
+
+function lxml.sorters.add(name,n,key)
+ local list = lists[name]
+ if list.sorted then
+ -- reverse is messed up, we could regenerate it and go on
+ else
+ local entries = list and list.entries
+ if entries then
+ local reverse = list.reverse
+ local e = reverse[n]
+ if e then
+ local keys = entries[e][2]
+ keys[#keys+1] = key
+ else
+ entries[#entries+1] = { n, { key } }
+ reverse[n] = #entries
+ end
+ end
+ end
+end
+
+function lxml.sorters.show(name)
+ local list = lists[name]
+ local entries = list and list.entries
+ local NC, NR, bold = context.NC, context.NR, context.bold -- somehow bold is not working
+ if entries then
+ local maxn = 1
+ for i=1,#entries do
+ if #entries[i][2] > maxn then maxn = #entries[i][2] end
+ end
+ context.starttabulate { "|Tr|Tr|" .. string.rep("Tlp|",maxn) }
+ NC() bold("n")
+ NC() bold("id")
+ if maxn > 1 then
+ for i=1,maxn do
+ NC() bold("entry " .. i)
+ end
+ else
+ NC() bold("entry")
+ end
+ NC() NR()
+ context.HL()
+ for i=1,#entries do
+ local entry = entries[i]
+ local document, node = lxml.splitid(entry[1])
+ NC() context(i)
+ NC() context(node)
+ local e = entry[2]
+ for i=1,#e do
+ NC() context.detokenize(e[i])
+ end
+ NC() NR()
+ end
+ context.stoptabulate()
+ end
+end
+
+lxml.sorters.compare = sorters.comparers.basic -- (a,b)
+
+function lxml.sorters.sort(name)
+ local list = lists[name]
+ local entries = list and list.entries
+ if entries then
+ -- filtering
+ local results = { }
+ list.results = results
+ for i=1,#entries do
+ local entry = entries[i]
+ results[i] = {
+ entry = entry[1],
+ key = concat(entry[2], " "),
+ }
+ end
+ -- preparation
+ local strip = sorters.strip
+ local splitter = sorters.splitters.utf
+ local firstofsplit = sorters.firstofsplit
+ for i=1, #results do
+ local r = results[i]
+ r.split = splitter(strip(r.key))
+ end
+ -- sorting
+ sorters.sort(results,lxml.sorters.compare)
+ -- finalizing
+ list.nofsorted = #results
+ local split = { }
+ for k=1,#results do -- rather generic so maybe we need a function
+ local v = results[k]
+ local entry, tag = firstofsplit(v)
+ local s = split[entry] -- keeps track of change
+ if not s then
+ s = { tag = tag, data = { } }
+ split[entry] = s
+ end
+ s.data[#s.data+1] = v
+ end
+ list.results = split
+ -- done
+ list.sorted = true
+ end
+end
+
+function lxml.sorters.flush(name,setup)
+ local list = lists[name]
+ local results = list and list.results
+ local xmlw = context.xmlw
+ if results and next(results) then
+ for key, result in next, results do
+ local tag, data = result.tag, result.data
+ for d=1,#data do
+ xmlw(setup,data[d].entry)
+ end
+ end
+ else
+ local entries = list and list.entries
+ if entries then
+ for i=1,#entries do
+ xmlw(setup,entries[i][1])
+ end
+ end
+ end
+end
diff --git a/Master/texmf-dist/tex/context/base/lxml-sor.mkiv b/Master/texmf-dist/tex/context/base/lxml-sor.mkiv
new file mode 100644
index 00000000000..14425967bd9
--- /dev/null
+++ b/Master/texmf-dist/tex/context/base/lxml-sor.mkiv
@@ -0,0 +1,94 @@
+%D \module
+%D [ file=lxml-sor,
+%D version=2009.08.24,
+%D title=\CONTEXT\ \XML\ Support,
+%D subtitle=Sorting,
+%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 VERY EXPERIMENTAL!
+
+\writestatus{loading}{ConTeXt XML Support / Sorting}
+
+\registerctxluafile{lxml-sor}{1.001}
+
+\unprotect
+
+\def\xmlresetsorter #1{\ctxlua{lxml.sorters.reset("#1")}}
+\def\xmladdsortentry#1#2#3{\ctxlua{lxml.sorters.add("#1","#2",\!!bs#3\!!es)}}
+\def\xmlshowsorter #1{\ctxlua{lxml.sorters.show("#1")}}
+\def\xmlflushsorter #1#2{\ctxlua{lxml.sorters.flush("#1","#2")}}
+\def\xmlsortentries #1{\ctxlua{lxml.sorters.sort("#1")}}
+
+\protect \endinput
+
+\startbuffer[test]
+<demo>
+ <entry>
+ <category>one</category>
+ <key>alpha</key>
+ <content>alpha indeed</content>
+ </entry>
+ <entry>
+ <category>one</category>
+ <key>gamma</key>
+ <content>gamma indeed</content>
+ </entry>
+ <entry>
+ <category>one</category>
+ <key>beta</key>
+ <content>beta indeed</content>
+ </entry>
+ <entry>
+ <category>two</category>
+ <key>alpha</key>
+ <content>alpha again</content>
+ </entry>
+ <entry>
+ <category>two</category>
+ <key>gamma</key>
+ <content>gamma again</content>
+ </entry>
+ <entry>
+ <category>two</category>
+ <key>beta</key>
+ <content>beta again</content>
+ </entry>
+</demo>
+\stopbuffer
+
+\startxmlsetups xml:mysetups
+ \xmlsetsetup{\xmldocument}{demo|entry|content}{xml:*}
+\stopxmlsetups
+
+\xmlregistersetup{xml:mysetups}
+
+\startxmlsetups xml:demo
+ \xmlresetsorter{demo}
+ \xmlfilter{#1}{entry/command(xml:entry:getkeys)}
+ \blank sortkeys: \blank\xmlshowsorter{demo}\blank
+ \xmlsortentries{demo}
+ \xmlflushsorter{demo}{xml:entry:flush}
+\stopxmlsetups
+
+\startxmlsetups xml:entry:getkeys
+ \xmladdsortentry{demo}{#1}{\xmltext{#1}{category}}
+ \xmladdsortentry{demo}{#1}{\xmltext{#1}{key|entry}}
+\stopxmlsetups
+
+\startxmlsetups xml:entry:flush
+ \xmltext{#1}{content}\par
+\stopxmlsetups
+
+\startxmlsetups xml:entry
+ \xmltext{#1}{content}\par
+\stopxmlsetups
+
+\starttext
+ \xmlprocessbuffer{main}{test}{}
+\stoptext
diff --git a/Master/texmf-dist/tex/context/base/lxml-tab.lua b/Master/texmf-dist/tex/context/base/lxml-tab.lua
index 77c28f8d3b7..23cd1cf0471 100644
--- a/Master/texmf-dist/tex/context/base/lxml-tab.lua
+++ b/Master/texmf-dist/tex/context/base/lxml-tab.lua
@@ -6,6 +6,12 @@ if not modules then modules = { } end modules ['lxml-tab'] = {
license = "see context related readme files"
}
+-- this module needs a cleanup: check latest lpeg, passing args, (sub)grammar, etc etc
+-- stripping spaces from e.g. cont-en.xml saves .2 sec runtime so it's not worth the
+-- trouble
+
+local trace_entities = false trackers.register("xml.entities", function(v) trace_entities = v end)
+
--[[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
@@ -13,18 +19,6 @@ parent access; a first version used different trickery but was less optimized to
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>
@@ -35,26 +29,11 @@ xml = xml or { }
--~ local xml = xml
local concat, remove, insert = table.concat, table.remove, table.insert
-local type, next, setmetatable = type, next, setmetatable
-local format, lower, find = string.format, string.lower, string.find
-
---[[ldx--
-<p>This module can be used stand alone but also inside <l n='mkiv'/> in
-which case it hooks into the tracker code. Therefore we provide a few
-functions that set the tracers.</p>
---ldx]]--
-
-local trace_remap = false
-
-if trackers then
- trackers.register("xml.remap", function(v) trace_remap = v end)
-end
-
-function xml.settrace(str,value)
- if str == "remap" then
- trace_remap = value or false
- end
-end
+local type, next, setmetatable, getmetatable, tonumber = type, next, setmetatable, getmetatable, tonumber
+local format, lower, find, match, gsub = string.format, string.lower, string.find, string.match, string.gsub
+local utfchar = unicode.utf8.char
+local lpegmatch = lpeg.match
+local P, S, R, C, V, C, Cs = lpeg.P, lpeg.S, lpeg.R, lpeg.C, lpeg.V, lpeg.C, lpeg.Cs
--[[ldx--
<p>First a hack to enable namespace resolving. A namespace is characterized by
@@ -66,7 +45,7 @@ much cleaner.</p>
xml.xmlns = xml.xmlns or { }
-local check = lpeg.P(false)
+local check = P(false)
local parse = check
--[[ldx--
@@ -79,8 +58,8 @@ xml.registerns("mml","mathml")
--ldx]]--
function xml.registerns(namespace, pattern) -- pattern can be an lpeg
- check = check + lpeg.C(lpeg.P(lower(pattern))) / namespace
- parse = lpeg.P { lpeg.P(check) + 1 * lpeg.V(1) }
+ check = check + C(P(lower(pattern))) / namespace
+ parse = P { P(check) + 1 * V(1) }
end
--[[ldx--
@@ -94,7 +73,7 @@ xml.checkns("m","http://www.w3.org/mathml")
--ldx]]--
function xml.checkns(namespace,url)
- local ns = parse:match(lower(url))
+ local ns = lpegmatch(parse,lower(url))
if ns and namespace ~= ns then
xml.xmlns[namespace] = ns
end
@@ -112,7 +91,7 @@ This returns <t>mml</t>.
--ldx]]--
function xml.resolvens(url)
- return parse:match(lower(url)) or ""
+ return lpegmatch(parse,lower(url)) or ""
end
--[[ldx--
@@ -151,27 +130,36 @@ local x = xml.convert(somestring)
<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
+<p>Valid entities are:</p>
+
+<typing>
+<!ENTITY xxxx SYSTEM "yyyy" NDATA zzzz>
+<!ENTITY xxxx PUBLIC "yyyy" >
+<!ENTITY xxxx "yyyy" >
+</typing>
+--ldx]]--
-- not just one big nested table capture (lpeg overflow)
local nsremap, resolvens = xml.xmlns, xml.resolvens
-local stack, top, dt, at, xmlns, errorstr, entities = {}, {}, {}, {}, {}, nil, {}
+local stack, top, dt, at, xmlns, errorstr, entities = { }, { }, { }, { }, { }, nil, { }
+local strip, cleanup, utfize, resolve, resolve_predefined, unify_predefined = false, false, false, false, false, false
+local dcache, hcache, acache = { }, { }, { }
-local mt = { __tostring = xml.text }
+local mt = { }
-function xml.check_error(top,toclose)
- return ""
+function initialize_mt(root)
+ mt = { __index = root } -- will be redefined later
end
-local strip = false
-local cleanup = false
+function xml.setproperty(root,k,v)
+ getmetatable(root).__index[k] = v
+end
-function xml.set_text_cleanup(fnc)
- cleanup = fnc
+function xml.check_error(top,toclose)
+ return ""
end
local function add_attribute(namespace,tag,value)
@@ -181,12 +169,31 @@ local function add_attribute(namespace,tag,value)
if tag == "xmlns" then
xmlns[#xmlns+1] = resolvens(value)
at[tag] = value
+ elseif namespace == "" then
+ at[tag] = value
elseif namespace == "xmlns" then
xml.checkns(tag,value)
at["xmlns:" .. tag] = value
else
- at[tag] = value
+ -- for the moment this way:
+ at[namespace .. ":" .. tag] = value
+ 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)
+ if at.xmlns then
+ remove(xmlns)
+ end
+ at = { }
end
local function add_begin(spacing, namespace, tag)
@@ -214,28 +221,12 @@ local function add_end(spacing, namespace, tag)
end
dt = top.dt
dt[#dt+1] = toclose
- dt[0] = top
+ -- dt[0] = top -- nasty circular reference when serializing table
if toclose.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)
- if at.xmlns then
- remove(xmlns)
- end
- at = { }
-end
-
local function add_text(text)
if cleanup and #text > 0 then
dt[#dt+1] = cleanup(text)
@@ -251,7 +242,7 @@ local function add_special(what, spacing, text)
if strip and (what == "@cm@" or what == "@dt@") then
-- forget it
else
- dt[#dt+1] = { special=true, ns="", tg=what, dt={text} }
+ dt[#dt+1] = { special=true, ns="", tg=what, dt={ text } }
end
end
@@ -259,7 +250,199 @@ local function set_message(txt)
errorstr = "garbage at the end of the file: " .. gsub(txt,"([ \n\r\t]*)","")
end
-local P, S, R, C, V = lpeg.P, lpeg.S, lpeg.R, lpeg.C, lpeg.V
+local reported_attribute_errors = { }
+
+local function attribute_value_error(str)
+ if not reported_attribute_errors[str] then
+ logs.report("xml","invalid attribute value: %q",str)
+ reported_attribute_errors[str] = true
+ at._error_ = str
+ end
+ return str
+end
+local function attribute_specification_error(str)
+ if not reported_attribute_errors[str] then
+ logs.report("xml","invalid attribute specification: %q",str)
+ reported_attribute_errors[str] = true
+ at._error_ = str
+ end
+ return str
+end
+
+function xml.unknown_dec_entity_format(str) return (str == "" and "&error;") or format("&%s;",str) end
+function xml.unknown_hex_entity_format(str) return format("&#x%s;",str) end
+function xml.unknown_any_entity_format(str) return format("&#x%s;",str) end
+
+local function fromhex(s)
+ local n = tonumber(s,16)
+ if n then
+ return utfchar(n)
+ else
+ return format("h:%s",s), true
+ end
+end
+
+local function fromdec(s)
+ local n = tonumber(s)
+ if n then
+ return utfchar(n)
+ else
+ return format("d:%s",s), true
+ end
+end
+
+-- one level expansion (simple case), no checking done
+
+local rest = (1-P(";"))^0
+local many = P(1)^0
+
+local parsedentity =
+ P("&") * (P("#x")*(rest/fromhex) + P("#")*(rest/fromdec)) * P(";") * P(-1) +
+ (P("#x")*(many/fromhex) + P("#")*(many/fromdec))
+
+-- parsing in the xml file
+
+local predefined_unified = {
+ [38] = "&amp;",
+ [42] = "&quot;",
+ [47] = "&apos;",
+ [74] = "&lt;",
+ [76] = "&gr;",
+}
+
+local predefined_simplified = {
+ [38] = "&", amp = "&",
+ [42] = '"', quot = '"',
+ [47] = "'", apos = "'",
+ [74] = "<", lt = "<",
+ [76] = ">", gt = ">",
+}
+
+local function handle_hex_entity(str)
+ local h = hcache[str]
+ if not h then
+ local n = tonumber(str,16)
+ h = unify_predefined and predefined_unified[n]
+ if h then
+ if trace_entities then
+ logs.report("xml","utfize, converting hex entity &#x%s; into %s",str,h)
+ end
+ elseif utfize then
+ h = (n and utfchar(n)) or xml.unknown_hex_entity_format(str) or ""
+ if not n then
+ logs.report("xml","utfize, ignoring hex entity &#x%s;",str)
+ elseif trace_entities then
+ logs.report("xml","utfize, converting hex entity &#x%s; into %s",str,h)
+ end
+ else
+ if trace_entities then
+ logs.report("xml","found entity &#x%s;",str)
+ end
+ h = "&#x" .. str .. ";"
+ end
+ hcache[str] = h
+ end
+ return h
+end
+
+local function handle_dec_entity(str)
+ local d = dcache[str]
+ if not d then
+ local n = tonumber(str)
+ d = unify_predefined and predefined_unified[n]
+ if d then
+ if trace_entities then
+ logs.report("xml","utfize, converting dec entity &#%s; into %s",str,d)
+ end
+ elseif utfize then
+ d = (n and utfchar(n)) or xml.unknown_dec_entity_format(str) or ""
+ if not n then
+ logs.report("xml","utfize, ignoring dec entity &#%s;",str)
+ elseif trace_entities then
+ logs.report("xml","utfize, converting dec entity &#%s; into %s",str,h)
+ end
+ else
+ if trace_entities then
+ logs.report("xml","found entity &#%s;",str)
+ end
+ d = "&#" .. str .. ";"
+ end
+ dcache[str] = d
+ end
+ return d
+end
+
+xml.parsedentitylpeg = parsedentity
+
+local function handle_any_entity(str)
+ if resolve then
+ local a = acache[str] -- per instance ! todo
+ if not a then
+ a = resolve_predefined and predefined_simplified[str]
+ if a then
+ -- one of the predefined
+ elseif type(resolve) == "function" then
+ a = resolve(str) or entities[str]
+ else
+ a = entities[str]
+ end
+ if a then
+ if trace_entities then
+ logs.report("xml","resolved entity &%s; -> %s (internal)",str,a)
+ end
+ a = lpegmatch(parsedentity,a) or a
+ else
+ if xml.unknown_any_entity_format then
+ a = xml.unknown_any_entity_format(str) or ""
+ end
+ if a then
+ if trace_entities then
+ logs.report("xml","resolved entity &%s; -> %s (external)",str,a)
+ end
+ else
+ if trace_entities then
+ logs.report("xml","keeping entity &%s;",str)
+ end
+ if str == "" then
+ a = "&error;"
+ else
+ a = "&" .. str .. ";"
+ end
+ end
+ end
+ acache[str] = a
+ elseif trace_entities then
+ if not acache[str] then
+ logs.report("xml","converting entity &%s; into %s",str,a)
+ acache[str] = a
+ end
+ end
+ return a
+ else
+ local a = acache[str]
+ if not a then
+ if trace_entities then
+ logs.report("xml","found entity &%s;",str)
+ end
+ a = resolve_predefined and predefined_simplified[str]
+ if a then
+ -- one of the predefined
+ acache[str] = a
+ elseif str == "" then
+ a = "&error;"
+ acache[str] = a
+ else
+ a = "&" .. str .. ";"
+ acache[str] = a
+ end
+ end
+ return a
+ end
+end
+
+local function handle_end_entity(chr)
+ logs.report("xml","error in entity, %q found instead of ';'",chr)
+end
local space = S(' \r\n\t')
local open = P('<')
@@ -269,24 +452,50 @@ local dquote = S('"')
local equal = P('=')
local slash = P('/')
local colon = P(':')
+local semicolon = P(';')
+local ampersand = 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 = lpeg.patterns.utfbom -- no capture
+local spacing = C(space^0)
-local utfbom = P('\000\000\254\255') + P('\255\254\000\000') +
- P('\255\254') + P('\254\255') + P('\239\187\191') -- no capture
+----- entitycontent = (1-open-semicolon)^0
+local anyentitycontent = (1-open-semicolon-space-close)^0
+local hexentitycontent = R("AF","af","09")^0
+local decentitycontent = R("09")^0
+local parsedentity = P("#")/"" * (
+ P("x")/"" * (hexentitycontent/handle_hex_entity) +
+ (decentitycontent/handle_dec_entity)
+ ) + (anyentitycontent/handle_any_entity)
+local entity = ampersand/"" * parsedentity * ( (semicolon/"") + #(P(1)/handle_end_entity))
+
+local text_unparsed = C((1-open)^1)
+local text_parsed = Cs(((1-open-ampersand)^1 + entity)^1)
-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
+----- value = (squote * C((1 - squote)^0) * squote) + (dquote * C((1 - dquote)^0) * dquote) -- ampersand and < also invalid in value
+local value = (squote * Cs((entity + (1 - squote))^0) * squote) + (dquote * Cs((entity + (1 - dquote))^0) * dquote) -- ampersand and < also invalid in value
+
+local endofattributes = slash * close + close -- recovery of flacky html
+local whatever = space * name * optionalspace * equal
+local wrongvalue = C(P(1-whatever-close)^1 + P(1-close)^1) / attribute_value_error
+----- wrongvalue = C(P(1-whatever-endofattributes)^1 + P(1-endofattributes)^1) / attribute_value_error
+----- wrongvalue = C(P(1-space-endofattributes)^1) / attribute_value_error
+local wrongvalue = Cs(P(entity + (1-space-endofattributes))^1) / attribute_value_error
+
+local attributevalue = value + wrongvalue
+
+local attribute = (somespace * name * optionalspace * equal * optionalspace * attributevalue) / add_attribute
+----- attributes = (attribute)^0
-local text = justtext / add_text
+local attributes = (attribute + somespace^-1 * (((1-endofattributes)^1)/attribute_specification_error))^0
+
+local parsedtext = text_parsed / add_text
+local unparsedtext = text_unparsed / 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
@@ -304,19 +513,27 @@ local someinstruction = C((1 - endinstruction)^0)
local somecomment = C((1 - endcomment )^0)
local somecdata = C((1 - endcdata )^0)
-local function entity(k,v) entities[k] = v end
+local function normalentity(k,v ) entities[k] = v end
+local function systementity(k,v,n) entities[k] = v end
+local function publicentity(k,v,n) 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 doctypename = C((1-somespace-close)^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 normalentitytype = (doctypename * somespace * value)/normalentity
+local publicentitytype = (doctypename * somespace * P("PUBLIC") * somespace * value)/publicentity
+local systementitytype = (doctypename * somespace * P("SYSTEM") * somespace * value * somespace * P("NDATA") * somespace * doctypename)/systementity
+local entitydoctype = optionalspace * P("<!ENTITY") * somespace * (systementitytype + publicentitytype + normalentitytype) * optionalspace * close
+
+local doctypeset = beginset * optionalspace * P(elementdoctype + entitydoctype + space)^0 * optionalspace * endset
+local definitiondoctype= doctypename * somespace * doctypeset
+local publicdoctype = doctypename * somespace * P("PUBLIC") * somespace * value * somespace * value * somespace * doctypeset
+local systemdoctype = doctypename * somespace * P("SYSTEM") * somespace * value * somespace * doctypeset
+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
@@ -326,60 +543,116 @@ local doctype = (spacing * begindoctype * somedoctype * enddoct
-- 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 instruction = (Cc("@pi@") * spacing * begininstruction * someinstruction * endinstruction) / add_special
+-- local comment = (Cc("@cm@") * spacing * begincomment * somecomment * endcomment ) / add_special
+-- local cdata = (Cc("@cd@") * spacing * begincdata * somecdata * endcdata ) / add_special
+-- local doctype = (Cc("@dt@") * spacing * begindoctype * somedoctype * enddoctype ) / add_special
-local trailer = space^0 * (justtext/set_message)^0
+local trailer = space^0 * (text_unparsed/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",
+local grammar_parsed_text = 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,
+ children = parsedtext + V("parent") + emptyelement + comment + cdata + instruction,
}
--- todo: xml.new + properties like entities and strip and such (store in root)
+local grammar_unparsed_text = P { "preamble",
+ preamble = utfbom^0 * instruction^0 * (doctype + comment + instruction)^0 * V("parent") * trailer,
+ parent = beginelement * V("children")^0 * endelement,
+ children = unparsedtext + V("parent") + emptyelement + comment + cdata + instruction,
+}
-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 {}
+-- maybe we will add settinsg to result as well
+
+local function xmlconvert(data, settings)
+ settings = settings or { } -- no_root strip_cm_and_dt given_entities parent_root error_handler
+ strip = settings.strip_cm_and_dt
+ utfize = settings.utfize_entities
+ resolve = settings.resolve_entities
+ resolve_predefined = settings.resolve_predefined_entities -- in case we have escaped entities
+ unify_predefined = settings.unify_predefined_entities -- &#038; -> &amp;
+ cleanup = settings.text_cleanup
+ stack, top, at, xmlns, errorstr, result, entities = { }, { }, { }, { }, nil, nil, settings.entities or { }
+ acache, hcache, dcache = { }, { }, { } -- not stored
+ reported_attribute_errors = { }
+ if settings.parent_root then
+ mt = getmetatable(settings.parent_root)
+ else
+ initialize_mt(top)
+ end
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"
+ elseif utfize or resolve then
+ if lpegmatch(grammar_parsed_text,data) then
+ errorstr = ""
+ else
+ errorstr = "invalid xml file - parsed text"
+ end
+ elseif type(data) == "string" then
+ if lpegmatch(grammar_unparsed_text,data) then
+ errorstr = ""
+ else
+ errorstr = "invalid xml file - unparsed text"
+ end
else
- errorstr = ""
+ errorstr = "invalid xml file - no text at all"
end
if errorstr and errorstr ~= "" then
- result = { dt = { { ns = "", tg = "error", dt = { errorstr }, at={}, er = true } }, error = true }
+ result = { dt = { { ns = "", tg = "error", dt = { errorstr }, at={ }, er = true } } }
setmetatable(stack, mt)
- if xml.error_handler then xml.error_handler("load",errorstr) end
+ local error_handler = settings.error_handler
+ if error_handler == false then
+ -- no error message
+ else
+ error_handler = error_handler or xml.error_handler
+ if error_handler then
+ xml.error_handler("load",errorstr)
+ end
+ end
else
result = stack[1]
end
- if not no_root then
- result = { special = true, ns = "", tg = '@rt@', dt = result.dt, at={}, entities = entities }
+ if not settings.no_root then
+ result = { special = true, ns = "", tg = '@rt@', dt = result.dt, at={ }, entities = entities, settings = settings }
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
+v.__p__ = result -- new, experiment, else we cannot go back to settings, we need to test this !
break
end
end
end
+ if errorstr and errorstr ~= "" then
+ result.error = true
+ end
return result
end
+xml.convert = xmlconvert
+
+function xml.inheritedconvert(data,xmldata)
+ local settings = xmldata.settings
+ settings.parent_root = xmldata -- to be tested
+ -- settings.no_root = true
+ local xc = xmlconvert(data,settings)
+ -- xc.settings = nil
+ -- xc.entities = nil
+ -- xc.special = nil
+ -- xc.ri = nil
+ -- print(xc.tg)
+ return xc
+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>
@@ -390,7 +663,7 @@ function xml.is_valid(root)
end
function xml.package(tag,attributes,data)
- local ns, tg = tag:match("^(.-):?([^:]+)$")
+ local ns, tg = match(tag,"^(.-):?([^:]+)$")
local t = { ns = ns, tg = tg, dt = data or "", at = attributes or {} }
setmetatable(t, mt)
return t
@@ -408,21 +681,19 @@ the whole file first. The function accepts a string representing
a filename or a file handle.</p>
--ldx]]--
-function xml.load(filename)
+function xml.load(filename,settings)
+ local data = ""
if type(filename) == "string" then
+ -- local data = io.loaddata(filename) - -todo: check type in io.loaddata
local f = io.open(filename,'r')
if f then
- local root = xml.convert(f:read("*all"))
+ data = 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("")
+ data = filename:read("*all")
end
+ return xmlconvert(data,settings)
end
--[[ldx--
@@ -430,9 +701,11 @@ end
valid trees, which is what the next function does.</p>
--ldx]]--
+local no_root = { no_root = true }
+
function xml.toxml(data)
if type(data) == "string" then
- local root = { xml.convert(data,true) }
+ local root = { xmlconvert(data,no_root) }
return (#root > 1 and root) or root[1]
else
return data
@@ -452,7 +725,7 @@ local function copy(old,tables)
if not tables[old] then
tables[old] = new
end
- for k,v in pairs(old) do
+ for k,v in next, old do
new[k] = (type(v) == "table" and (tables[v] or copy(v, tables))) or v
end
local mt = getmetatable(old)
@@ -477,217 +750,304 @@ alternative.</p>
-- 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
- local etg, edt = e.tg, e.dt
- local spc = specialconverter and specialconverter[etg]
- if spc then
- 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
+function xml.checkbom(root) -- can be made faster
+ if root.ri then
+ local dt, found = root.dt, false
+ for k=1,#dt do
+ local v = dt[k]
+ if type(v) == "table" and v.special and v.tg == "@pi@" and find(v.dt[1],"xml.*version=") then
+ found = true
+ break
end
end
+ if not found then
+ insert(dt, 1, { special=true, ns="", tg="@pi@", dt = { "xml version='1.0' standalone='yes'"} } )
+ insert(dt, 2, "\n" )
+ 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)
+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]]--
+
+-- new experimental reorganized serialize
+
+local function verbose_element(e,handlers)
+ local handle = handlers.handle
+ local serialize = handlers.serialize
+ local ens, etg, eat, edt, ern = e.ns, e.tg, e.at, e.dt, e.rn
+ local ats = eat and next(eat) and { }
+ if ats then
+ for k,v in next, eat do
+ ats[#ats+1] = format('%s=%q',k,v)
+ end
+ end
+ if ern and trace_remap and ern ~= ens then
+ ens = ern
+ end
+ if ens ~= "" then
+ if edt and #edt > 0 then
+ if ats then
+ handle("<",ens,":",etg," ",concat(ats," "),">")
+ else
+ handle("<",ens,":",etg,">")
+ end
+ for i=1,#edt do
+ local e = edt[i]
+ if type(e) == "string" then
+ handle(e)
else
- -- no need to handle any further
+ serialize(e,handlers)
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
+ handle("</",ens,":",etg,">")
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 next, eat do
- ats[#ats+1] = format('%s=%q',k,attributeconverter(v))
- end
- else
- for k,v in next, eat do
- ats[#ats+1] = format('%s=%q',k,v)
- end
- end
+ handle("<",ens,":",etg," ",concat(ats," "),"/>")
+ else
+ handle("<",ens,":",etg,"/>")
end
- if ern and trace_remap and ern ~= ens then
- ens = ern
+ end
+ else
+ if edt and #edt > 0 then
+ if ats then
+ handle("<",etg," ",concat(ats," "),">")
+ else
+ handle("<",etg,">")
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 .. ">")
+ for i=1,#edt do
+ local ei = edt[i]
+ if type(ei) == "string" then
+ handle(ei)
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
+ serialize(ei,handlers)
end
+ end
+ handle("</",etg,">")
+ else
+ if ats then
+ handle("<",etg," ",concat(ats," "),"/>")
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
- local ei = edt[i]
- if type(ei) == "string" then
- if textconverter then
- handle(textconverter(ei))
- else
- handle(ei)
- end
- else
- serialize(ei,handle,textconverter,attributeconverter,specialconverter,nocommands)
- end
- 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
+ handle("<",etg,"/>")
end
end
- elseif type(e) == "string" then
- if textconverter then
- handle(textconverter(e))
+ end
+end
+
+local function verbose_pi(e,handlers)
+ handlers.handle("<?",e.dt[1],"?>")
+end
+
+local function verbose_comment(e,handlers)
+ handlers.handle("<!--",e.dt[1],"-->")
+end
+
+local function verbose_cdata(e,handlers)
+ handlers.handle("<![CDATA[", e.dt[1],"]]>")
+end
+
+local function verbose_doctype(e,handlers)
+ handlers.handle("<!DOCTYPE ",e.dt[1],">")
+end
+
+local function verbose_root(e,handlers)
+ handlers.serialize(e.dt,handlers)
+end
+
+local function verbose_text(e,handlers)
+ handlers.handle(e)
+end
+
+local function verbose_document(e,handlers)
+ local serialize = handlers.serialize
+ local functions = handlers.functions
+ for i=1,#e do
+ local ei = e[i]
+ if type(ei) == "string" then
+ functions["@tx@"](ei,handlers)
else
- handle(e)
+ serialize(ei,handlers)
end
- else
- for i=1,#e do
- local ei = e[i]
- if type(ei) == "string" then
- if textconverter then
- handle(textconverter(ei))
- else
- handle(ei)
- end
- else
- serialize(ei,handle,textconverter,attributeconverter,specialconverter,nocommands)
- end
+ end
+end
+
+local function serialize(e,handlers,...)
+ local initialize = handlers.initialize
+ local finalize = handlers.finalize
+ local functions = handlers.functions
+ if initialize then
+ local state = initialize(...)
+ if not state == true then
+ return state
end
end
+ local etg = e.tg
+ if etg then
+ (functions[etg] or functions["@el@"])(e,handlers)
+ -- elseif type(e) == "string" then
+ -- functions["@tx@"](e,handlers)
+ else
+ functions["@dc@"](e,handlers)
+ end
+ if finalize then
+ return finalize()
+ end
end
-xml.serialize = serialize
+local function xserialize(e,handlers)
+ local functions = handlers.functions
+ local etg = e.tg
+ if etg then
+ (functions[etg] or functions["@el@"])(e,handlers)
+ -- elseif type(e) == "string" then
+ -- functions["@tx@"](e,handlers)
+ else
+ functions["@dc@"](e,handlers)
+ end
+end
-function xml.checkbom(root) -- can be made faster
- if root.ri then
- local dt, found = root.dt, false
- for k=1,#dt do
- local v = dt[k]
- if type(v) == "table" and v.special and v.tg == "@pi" and find(v.dt,"xml.*version=") then
- found = true
- break
+local handlers = { }
+
+local function newhandlers(settings)
+ local t = table.copy(handlers.verbose or { }) -- merge
+ if settings then
+ for k,v in next, settings do
+ if type(v) == "table" then
+ tk = t[k] if not tk then tk = { } t[k] = tk end
+ for kk,vv in next, v do
+ tk[kk] = vv
+ end
+ else
+ t[k] = v
end
end
- if not found then
- insert(dt, 1, { special=true, ns="", tg="@pi@", dt = { "xml version='1.0' standalone='yes'"} } )
- insert(dt, 2, "\n" )
+ if settings.name then
+ handlers[settings.name] = t
end
end
+ return t
+end
+
+local nofunction = function() end
+
+function xml.sethandlersfunction(handler,name,fnc)
+ handler.functions[name] = fnc or nofunction
+end
+
+function xml.gethandlersfunction(handler,name)
+ return handler.functions[name]
+end
+
+function xml.gethandlers(name)
+ return handlers[name]
end
+newhandlers {
+ name = "verbose",
+ initialize = false, -- faster than nil and mt lookup
+ finalize = false, -- faster than nil and mt lookup
+ serialize = xserialize,
+ handle = print,
+ functions = {
+ ["@dc@"] = verbose_document,
+ ["@dt@"] = verbose_doctype,
+ ["@rt@"] = verbose_root,
+ ["@el@"] = verbose_element,
+ ["@pi@"] = verbose_pi,
+ ["@cm@"] = verbose_comment,
+ ["@cd@"] = verbose_cdata,
+ ["@tx@"] = verbose_text,
+ }
+}
+
--[[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>
+<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>Beware, these were timing with the old routine but measurements will not be that
+much different I guess.</p>
--ldx]]--
-function xml.tostring(root) -- 25% overhead due to collecting
+-- maybe this will move to lxml-xml
+
+local result
+
+local xmlfilehandler = newhandlers {
+ name = "file",
+ initialize = function(name) result = io.open(name,"wb") return result end,
+ finalize = function() result:close() return true end,
+ handle = function(...) result:write(...) end,
+}
+
+-- no checking on writeability here but not faster either
+--
+-- local xmlfilehandler = newhandlers {
+-- initialize = function(name) io.output(name,"wb") return true end,
+-- finalize = function() io.close() return true end,
+-- handle = io.write,
+-- }
+
+
+function xml.save(root,name)
+ serialize(root,xmlfilehandler,name)
+end
+
+local result
+
+local xmlstringhandler = newhandlers {
+ name = "string",
+ initialize = function() result = { } return result end,
+ finalize = function() return concat(result) end,
+ handle = function(...) result[#result+1] = concat { ... } end
+}
+
+local function xmltostring(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) -- brrr, slow (direct printing is faster)
- return concat(result,"")
+ else -- if next(root) then -- next is faster than type (and >0 test)
+ return serialize(root,xmlstringhandler) or ""
end
end
return ""
end
+local function xmltext(root) -- inline
+ return (root and xmltostring(root)) or ""
+end
+
+function initialize_mt(root)
+ mt = { __tostring = xmltext, __index = root }
+end
+
+xml.defaulthandlers = handlers
+xml.newhandlers = newhandlers
+xml.serialize = serialize
+xml.tostring = xmltostring
+
--[[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)
+local function xmlstring(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)
+ xmlstring(edt[i],handle)
end
end
else
@@ -695,54 +1055,52 @@ function xml.string(e,handle)
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>
+xml.string = xmlstring
-<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--
+<p>A few helpers:</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()
+--~ xmlsetproperty(root,"settings",settings)
+
+function xml.settings(e)
+ while e do
+ local s = e.settings
+ if s then
+ return s
+ else
+ e = e.__p__
+ end
end
+ return nil
end
---[[ldx--
-<p>A few helpers:</p>
---ldx]]--
-
-function xml.body(root)
- return (root.ri and root.dt[root.ri]) or root
+function xml.root(e)
+ local r = e
+ while e do
+ e = e.__p__
+ if e then
+ r = e
+ end
+ end
+ return r
end
-function xml.text(root)
- return (root and xml.tostring(root)) or ""
+function xml.parent(root)
+ return root.__p__
end
-function xml.content(root) -- bugged
- return (root and root.dt and xml.tostring(root.dt)) or ""
+function xml.body(root)
+ return (root.ri and root.dt[root.ri]) or root -- not ok yet
end
-function xml.isempty(root, pattern)
- if pattern == "" or pattern == "*" then
- pattern = nil
- end
- if pattern then
- -- todo
- return false
+function xml.name(root)
+ if not root then
+ return ""
+ elseif root.ns == "" then
+ return root.tg
else
- return not root or not root.dt or #root.dt == 0 or root.dt == ""
+ return root.ns .. ":" .. root.tg
end
end
@@ -750,18 +1108,15 @@ end
<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 ""
+function xml.erase(dt,k)
+ if dt then
+ if k then
+ dt[k] = ""
+ else for k=1,#dt do
+ dt[1] = { "" }
+ end end
end
end
@@ -781,3 +1136,39 @@ function xml.assign(dt,k,root)
return xml.body(root)
end
end
+
+-- the following helpers may move
+
+--[[ldx--
+<p>The next helper assigns a tree (or string). Usage:</p>
+<typing>
+xml.tocdata(e)
+xml.tocdata(e,"error")
+</typing>
+--ldx]]--
+
+function xml.tocdata(e,wrapper)
+ local whatever = xmltostring(e.dt)
+ if wrapper then
+ whatever = format("<%s>%s</%s>",wrapper,whatever,wrapper)
+ end
+ local t = { special = true, ns = "", tg = "@cd@", at = {}, rn = "", dt = { whatever }, __p__ = e }
+ setmetatable(t,getmetatable(e))
+ e.dt = { t }
+end
+
+function xml.makestandalone(root)
+ if root.ri then
+ local dt = root.dt
+ for k=1,#dt do
+ local v = dt[k]
+ if type(v) == "table" and v.special and v.tg == "@pi@" then
+ local txt = v.dt[1]
+ if find(txt,"xml.*version=") then
+ v.dt[1] = txt .. " standalone='yes'"
+ break
+ end
+ end
+ end
+ end
+end
diff --git a/Master/texmf-dist/tex/context/base/lxml-tex.lua b/Master/texmf-dist/tex/context/base/lxml-tex.lua
new file mode 100644
index 00000000000..aaa90217fec
--- /dev/null
+++ b/Master/texmf-dist/tex/context/base/lxml-tex.lua
@@ -0,0 +1,1410 @@
+if not modules then modules = { } end modules ['lxml-tst'] = {
+ version = 1.001,
+ comment = "companion to lxml-ini.mkiv",
+ author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
+ copyright = "PRAGMA ADE / ConTeXt Development Team",
+ license = "see context related readme files"
+}
+
+local utf = unicode.utf8
+
+local utfchar = utf.char
+local concat, insert, remove, gsub, find = table.concat, table.insert, table.remove
+local format, sub, gsub, find, gmatch, match = string.format, string.sub, string.gsub, string.find, string.gmatch, string.match
+local type, next, tonumber, tostring = type, next, tonumber, tostring
+local lpegmatch = lpeg.match
+local P, S, C, Cc = lpeg.P, lpeg.S, lpeg.C, lpeg.Cc
+
+if not tex and not tex.sprint then
+ tex = {
+ sprint = function(catcodes,...) texio.write(table.concat{...}) end,
+ print = function(catcodes,...) texio.write(table.concat{...}) end,
+ write = function( ...) texio.write(table.concat{...}) end,
+ }
+ commands = {
+ writestatus = logs.report
+ }
+ resolvers.loadbinfile = function(filename) return true, io.loaddata(filename) end
+end
+
+local texsprint, texprint, texwrite = tex.sprint, tex.print, tex.write
+local texcatcodes, ctxcatcodes, vrbcatcodes, notcatcodes = tex.texcatcodes, tex.ctxcatcodes, tex.vrbcatcodes, tex.notcatcodes
+
+local xmlelements, xmlcollected, xmlsetproperty = xml.elements, xml.collected, xml.setproperty
+local xmlparseapply, xmlwithelements = xml.parse_apply, xml.withelements
+local xmlserialize, xmlcollect, xmltext, xmltostring = xml.serialize, xml.collect, xml.text, xml.tostring
+
+local variables = (interfaces and interfaces.variables) or { }
+
+local starttiming, stoptiming = statistics.starttiming, statistics.stoptiming
+
+local trace_setups = false trackers.register("lxml.setups", function(v) trace_setups = v end)
+local trace_loading = false trackers.register("lxml.loading", function(v) trace_loading = v end)
+local trace_access = false trackers.register("lxml.access", function(v) trace_access = v end)
+local trace_comments = false trackers.register("lxml.comments", function(v) trace_comments = v end)
+
+lxml = lxml or { }
+lxml.loaded = lxml.loaded or { }
+
+local loaded = lxml.loaded
+
+-- print(contextdirective("context-mathml-directive function reduction yes "))
+-- print(contextdirective("context-mathml-directive function "))
+
+xml.defaultprotocol = "tex"
+
+local finalizers = xml.finalizers
+
+finalizers.xml = finalizers.xml or { }
+finalizers.tex = finalizers.tex or { }
+
+-- this might look inefficient but it's actually rather efficient
+-- because we avoid tokenization of leading spaces and xml can be
+-- rather verbose (indented)
+
+local newline = lpeg.patterns.newline
+local space = lpeg.patterns.spacer
+local ampersand = P("&")
+local semicolon = P(";")
+local spacing = newline * space^0
+local content = C((1-spacing-ampersand)^1)
+local verbose = C((1-(space+newline))^1)
+local entity = ampersand * C((1-semicolon)^1) * semicolon
+
+local xmltextcapture = (
+ space^0 * newline^2 * Cc("") / texprint + -- better ^-2 ?
+ space^0 * newline * space^0 * Cc(" ") / texsprint +
+ content / function(str) return texsprint(notcatcodes,str) end + -- was just texsprint, current catcodes regime is notcatcodes
+ entity / xml.resolved_entity
+)^0
+
+local ctxtextcapture = (
+ space^0 * newline^2 * Cc("") / texprint + -- better ^-2 ?
+ space^0 * newline * space^0 * Cc(" ") / texsprint +
+ content / function(str) return texsprint(ctxcatcodes,str) end + -- was just texsprint, current catcodes regime is notcatcodes
+ entity / xml.resolved_entity
+)^0
+
+local forceraw, rawroot = false, nil
+
+function lxml.startraw()
+ forceraw = true
+end
+
+function lxml.stopraw()
+ forceraw = false
+end
+
+function lxml.rawroot()
+ return rawroot
+end
+
+--~ function lxml.rawpath(rootid)
+--~ if rawroot and type(rawroot) == "table" then
+--~ local text, path, rp
+--~ if not rawroot.dt then
+--~ text, path, rp = "text", "", rawroot[0]
+--~ else
+--~ path, rp = "tree", "", rawroot.__p__
+--~ end
+--~ while rp do
+--~ local rptg = rp.tg
+--~ if rptg then
+--~ path = rptg .. "/" .. path
+--~ end
+--~ rp = rp.__p__
+--~ end
+--~ return { rootid, "/" .. path, text }
+--~ end
+--~ end
+
+-- cdata
+
+local linecommand = "\\obeyedline"
+local spacecommand = "\\obeyedspace" -- "\\strut\\obeyedspace"
+local beforecommand = ""
+local aftercommand = ""
+
+local xmlverbosecapture = (
+ newline / function( ) texsprint(texcatcodes,linecommand,"{}") end +
+ verbose / function(s) texsprint(vrbcatcodes,s) end +
+ space / function( ) texsprint(texcatcodes,spacecommand,"{}") end
+)^0
+
+local function toverbatim(str)
+ if beforecommand then texsprint(texcatcodes,beforecommand,"{}") end
+ lpegmatch(xmlverbosecapture,str)
+ if aftercommand then texsprint(texcatcodes,aftercommand,"{}") end
+end
+
+function lxml.set_verbatim(before,after,obeyedline,obeyedspace)
+ beforecommand, aftercommand, linecommand, spacecommand = before, after, obeyedline, obeyedspace
+end
+
+local obeycdata = true
+
+function lxml.set_cdata()
+ obeycdata = true
+end
+
+function lxml.reset_cdata()
+ obeycdata = false
+end
+
+-- cdata and verbatim
+
+lxml.set_verbatim("\\xmlcdatabefore", "\\xmlcdataafter", "\\xmlcdataobeyedline", "\\xmlcdataobeyedspace")
+
+-- local capture = (space^0*newline)^0 * capture * (space+newline)^0 * -1
+
+function lxml.toverbatim(str)
+ if beforecommand then texsprint(texcatcodes,beforecommand,"{}") end
+ -- todo: add this to capture
+ str = gsub(str,"^[ \t]+[\n\r]+","")
+ str = gsub(str,"[ \t\n\r]+$","")
+ lpegmatch(xmlverbosecapture,str)
+ if aftercommand then texsprint(texcatcodes,aftercommand,"{}") end
+end
+
+-- storage
+
+function lxml.store(id,root,filename)
+ loaded[id] = root
+ xmlsetproperty(root,"name",id)
+ if filename then
+ xmlsetproperty(root,"filename",filename)
+ end
+end
+
+local splitter = lpeg.splitat("::")
+
+lxml.idsplitter = splitter
+
+function lxml.splitid(id)
+ local d, i = lpegmatch(splitter,id)
+ if d then
+ return d, i
+ else
+ return "", id
+ end
+end
+
+local function get_id(id, qualified)
+ if id then
+ local lid = loaded[id]
+ if lid then
+ return lid
+ elseif type(id) == "table" then
+ return id
+ else
+ local d, i = lpegmatch(splitter,id)
+ if d then
+ local ld = loaded[d]
+ if ld then
+ local ldi = ld.index
+ if ldi then
+ local root = ldi[tonumber(i)]
+ if root then
+ if qualified then -- we need this else two args that confuse others
+ return root, d
+ else
+ return root
+ end
+ elseif trace_access then
+ logs.report("lxml","'%s' has no index entry '%s'",d,i)
+ end
+ elseif trace_access then
+ logs.report("lxml","'%s' has no index",d)
+ end
+ elseif trace_access then
+ logs.report("lxml","'%s' is not loaded",d)
+ end
+ elseif trace_access then
+ logs.report("lxml","'%s' is not loaded",i)
+ end
+ end
+ elseif trace_access then
+ logs.report("lxml","invalid id (nil)")
+ end
+end
+
+lxml.id = get_id
+lxml.get_id = get_id
+
+function lxml.root(id)
+ return loaded[id]
+end
+
+-- index
+
+local nofindices = 0
+
+local function addindex(name,check_sum,force)
+ local root = get_id(name)
+ if root and (not root.index or force) then -- weird, only called once
+ local n, index, maxindex, check = 0, root.index or { }, root.maxindex or 0, root.check or { }
+ local function nest(root)
+ local dt = root.dt
+ if not root.ix then
+ maxindex = maxindex + 1
+ root.ix = maxindex
+ check[maxindex] = root.tg -- still needed ?
+ index[maxindex] = root
+ n = n + 1
+ end
+ if dt then
+ for k=1,#dt do
+ local dk = dt[k]
+ if type(dk) == "table" then
+ nest(dk)
+ end
+ end
+ end
+ end
+ nest(root)
+ nofindices = nofindices + n
+ --
+ if type(name) ~= "string" then
+ name = "unknown"
+ end
+ root.index = index
+ root.maxindex = maxindex
+ if trace_access then
+ logs.report("lxml","%s indexed, %s nodes",tostring(name),maxindex)
+ end
+ end
+end
+
+lxml.addindex = addindex
+
+-- another cache
+
+local function lxmlparseapply(id,pattern) -- better inline, saves call
+ return xmlparseapply({ get_id(id) }, pattern)
+end
+
+lxml.filter = lxmlparseapply
+
+function lxml.filterlist(list,pattern)
+ for s in gmatch(list,"[^, ]+") do -- we could cache a table
+ lxmlparseapply(s,pattern)
+ end
+end
+
+lxml["function"] = function(id,name)
+ local f = xml.functions[name]
+ return f and f(get_id(id))
+end
+
+-- rather new, indexed storage (backward refs), maybe i will merge this
+
+function lxml.checkindex(name)
+ local root = get_id(name)
+ return (root and root.index) or 0
+end
+
+function lxml.withindex(name,n,command) -- will change as name is always there now
+ local i, p = lpegmatch(splitter,n)
+ if p then
+ texsprint(ctxcatcodes,"\\xmlw{",command,"}{",n,"}")
+ else
+ texsprint(ctxcatcodes,"\\xmlw{",command,"}{",name,"::",n,"}")
+ end
+end
+
+function lxml.getindex(name,n) -- will change as name is always there now
+ local i, p = lpegmatch(splitter,n)
+ if p then
+ texsprint(ctxcatcodes,n)
+ else
+ texsprint(ctxcatcodes,name,"::",n)
+ end
+end
+
+-- loading (to be redone, no overload)
+
+xml.originalload = xml.originalload or xml.load
+
+local noffiles, nofconverted = 0, 0
+
+function xml.load(filename,settings)
+ noffiles, nofconverted = noffiles + 1, nofconverted + 1
+ starttiming(xml)
+ local ok, data = resolvers.loadbinfile(filename)
+ local xmltable = xml.convert((ok and data) or "",settings)
+ stoptiming(xml)
+ return xmltable
+end
+
+local entities = xml.entities
+
+local function entityconverter(id,str)
+ return entities[str] and "&"..str..";" -- feed back into tex end later
+end
+
+function lxml.convert(id,data,entities,compress)
+ local settings = {
+ unify_predefined_entities = true,
+ }
+ if compress and compress == variables.yes then
+ settings.strip_cm_and_dt = true
+ end
+ if entities and entities == variables.yes then
+ settings.utfize_entities = true
+ settings.resolve_entities = function (str) return entityconverter(id,str) end
+ end
+ return xml.convert(data,settings)
+end
+
+function lxml.load(id,filename,compress,entities)
+ filename = commands.preparedfile(filename)
+ if trace_loading then
+ commands.writestatus("lxml","loading file '%s' as '%s'",filename,id)
+ end
+ noffiles, nofconverted = noffiles + 1, nofconverted + 1
+ -- local xmltable = xml.load(filename)
+ local ok, data = resolvers.loadbinfile(filename)
+ local xmltable = lxml.convert(id,(ok and data) or "",compress,entities)
+ lxml.store(id,xmltable,filename)
+ return xmltable, filename
+end
+
+function lxml.register(id,xmltable,filename)
+ lxml.store(id,xmltable,filename)
+ return xmltable
+end
+
+function lxml.include(id,pattern,attribute,recurse)
+ starttiming(xml)
+ local root = get_id(id)
+ xml.include(root,pattern,attribute,recurse,function(filename)
+ if filename then
+ filename = commands.preparedfile(filename)
+ if file.dirname(filename) == "" and root.filename then
+ local dn = file.dirname(root.filename)
+ if dn ~= "" then
+ filename = file.join(dn,filename)
+ end
+ end
+ if trace_loading then
+ commands.writestatus("lxml","including file: %s",filename)
+ end
+ noffiles, nofconverted = noffiles + 1, nofconverted + 1
+ return resolvers.loadtexfile(filename) or ""
+ else
+ return ""
+ end
+ end)
+ stoptiming(xml)
+end
+
+function xml.getbuffer(name,compress,entities) -- we need to make sure that commands are processed
+ if not name or name == "" then
+ name = tex.jobname
+ end
+ nofconverted = nofconverted + 1
+ xmltostring(lxml.convert(name,concat(buffers.data[name] or {},""),compress,entities))
+end
+
+function lxml.loadbuffer(id,name,compress,entities)
+ if not name or name == "" then
+ name = tex.jobname
+ end
+ starttiming(xml)
+ nofconverted = nofconverted + 1
+ local xmltable = lxml.convert(id,buffers.collect(name or id,"\n"),compress,entities)
+ lxml.store(id,xmltable)
+ stoptiming(xml)
+ return xmltable, name or id
+end
+
+function lxml.loaddata(id,str,compress,entities)
+ starttiming(xml)
+ nofconverted = nofconverted + 1
+ local xmltable = lxml.convert(id,str or "",compress,entities)
+ lxml.store(id,xmltable)
+ stoptiming(xml)
+ return xmltable, id
+end
+
+function lxml.loadregistered(id)
+ return loaded[id], id
+end
+
+-- e.command:
+--
+-- string : setup
+-- true : text (no <self></self>)
+-- false : ignore
+-- function : call
+
+local function tex_doctype(e,handlers)
+ -- ignore
+end
+
+local function tex_comment(e,handlers)
+ if trace_comments then
+ logs.report("lxml","comment: %s",e.dt[1])
+ end
+end
+
+local default_element_handler = xml.gethandlers("verbose").functions["@el@"]
+
+local function tex_element(e,handlers)
+ local command = e.command
+ if command == nil then
+ default_element_handler(e,handlers)
+ elseif command == true then
+ -- text (no <self></self>) / so, no mkii fallback then
+ handlers.serialize(e.dt,handlers)
+ elseif command == false then
+ -- ignore
+ else
+ local tc = type(command)
+ if tc == "string" then
+ local rootname, ix = e.name, e.ix
+ if rootname then
+ if not ix then
+ addindex(rootname,false,true)
+ ix = e.ix
+ end
+ texsprint(ctxcatcodes,"\\xmlw{",command,"}{",rootname,"::",ix,"}")
+ else
+ logs.report("lxml", "fatal error: no index for '%s'",command)
+ texsprint(ctxcatcodes,"\\xmlw{",command,"}{",ix or 0,"}")
+ end
+ elseif tc == "function" then
+ command(e)
+ end
+ end
+end
+
+local pihandlers = { } xml.pihandlers = pihandlers
+
+local kind = P("context-") * C((1-P("-"))^1) * P("-directive")
+local space = S(" \n\r")
+local spaces = space^0
+local class = C((1-space)^0)
+local key = class
+local value = C(P(1-(space * -1))^0)
+
+local parser = kind * spaces * class * spaces * key * spaces * value
+
+pihandlers[#pihandlers+1] = function(str)
+-- local kind, class, key, value = lpegmatch(parser,str)
+ if str then
+ local a, b, c, d = lpegmatch(parser,str)
+ if d then
+ texsprint(ctxcatcodes,"\\xmlcontextdirective{",a",}{",b,"}{",c,"}{",d,"}")
+ end
+ end
+end
+
+local function tex_pi(e,handlers)
+ local str = e.dt[1]
+ for i=1,#pihandlers do
+ pihandlers[i](str)
+ end
+end
+
+local function tex_cdata(e,handlers)
+ if obeycdata then
+ toverbatim(e.dt[1])
+ end
+end
+
+local function tex_text(e)
+ lpegmatch(xmltextcapture,e)
+end
+
+local function ctx_text(e)
+ lpegmatch(ctxtextcapture,e)
+end
+
+local function tex_handle(...)
+-- logs.report("lxml", "error while flushing: %s", concat { ... })
+ texsprint(...) -- notcatcodes is active anyway
+end
+
+local xmltexhandler = xml.newhandlers {
+ name = "tex",
+ handle = tex_handle,
+ functions = {
+ -- ["@dc@"] = tex_document,
+ ["@dt@"] = tex_doctype,
+ -- ["@rt@"] = tex_root,
+ ["@el@"] = tex_element,
+ ["@pi@"] = tex_pi,
+ ["@cm@"] = tex_comment,
+ ["@cd@"] = tex_cdata,
+ ["@tx@"] = tex_text,
+ }
+}
+
+lxml.xmltexhandler = xmltexhandler
+
+function lxml.serialize(root)
+ xmlserialize(root,xmltexhandler)
+end
+
+function lxml.setaction(id,pattern,action)
+ local collected = lxmlparseapply(id,pattern)
+ if collected then
+ for c=1,#collected do
+ collected[c].command = action
+ end
+ end
+end
+
+local function sprint(root)
+ if root then
+ local tr = type(root)
+ if tr == "string" then -- can also be result of lpath
+ -- rawroot = false
+ lpegmatch(xmltextcapture,root)
+ elseif tr == "table" then
+ if forceraw then
+ rawroot = root
+ texwrite(xmltostring(root))
+ else
+ xmlserialize(root,xmltexhandler)
+ end
+ end
+ end
+end
+
+local function tprint(root) -- we can move sprint inline
+ local tr = type(root)
+ if tr == "table" then
+ local n = #root
+ if n == 0 then
+ -- skip
+ else
+ for i=1,n do
+ sprint(root[i])
+ end
+ end
+ elseif tr == "string" then
+ lpegmatch(xmltextcapture,root)
+ end
+end
+
+local function cprint(root) -- content
+ if not root then
+ -- rawroot = false
+ -- quit
+ elseif type(root) == 'string' then
+ -- rawroot = false
+ lpegmatch(xmltextcapture,root)
+ else
+ local rootdt = root.dt
+ if forceraw then
+ rawroot = root
+ texwrite(xmltostring(rootdt or root))
+ else
+ xmlserialize(rootdt or root,xmltexhandler)
+ end
+ end
+end
+
+xml.sprint = sprint local xmlsprint = sprint -- redo these names
+xml.tprint = tprint local xmltprint = tprint
+xml.cprint = cprint local xmlcprint = cprint
+
+-- now we can flush
+
+function lxml.main(id)
+ xmlserialize(get_id(id),xmltexhandler) -- the real root (@rt@)
+end
+
+--~ -- lines (untested)
+--~
+--~ local buffer = { }
+--~
+--~ local xmllinescapture = (
+--~ newline^2 / function() buffer[#buffer+1] = "" end +
+--~ newline / function() buffer[#buffer] = buffer[#buffer] .. " " end +
+--~ content / function(s) buffer[#buffer] = buffer[#buffer] .. s end
+--~ )^0
+--~
+--~ local xmllineshandler = table.copy(xmltexhandler)
+--~
+--~ xmllineshandler.handle = function(...) lpegmatch(xmllinescapture,concat{ ... }) end
+--~
+--~ function lines(root)
+--~ if not root then
+--~ -- rawroot = false
+--~ -- quit
+--~ elseif type(root) == 'string' then
+--~ -- rawroot = false
+--~ lpegmatch(xmllinescapture,root)
+--~ elseif next(root) then -- tr == 'table'
+--~ xmlserialize(root,xmllineshandler)
+--~ end
+--~ end
+--~
+--~ function xml.lines(root) -- used at all?
+--~ buffer = { "" }
+--~ lines(root)
+--~ return result
+--~ end
+
+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
+
+-- setups
+
+local setups = { }
+
+function lxml.set_command_to_text(id)
+ xmlwithelements(get_id(id),to_text)
+end
+
+function lxml.set_command_to_none(id)
+ xmlwithelements(get_id(id),to_none)
+end
+
+function lxml.installsetup(what,document,setup,where)
+ document = document or "*"
+ local sd = setups[document]
+ if not sd then sd = { } setups[document] = sd end
+ for k=1,#sd do
+ if sd[k] == setup then sd[k] = nil break end
+ end
+ if what == 1 then
+ if trace_loading then
+ commands.writestatus("lxml","prepending setup %s for %s",setup,document)
+ end
+ insert(sd,1,setup)
+ elseif what == 2 then
+ if trace_loading then
+ commands.writestatus("lxml","appending setup %s for %s",setup,document)
+ end
+ insert(sd,setup)
+ elseif what == 3 then
+ if trace_loading then
+ commands.writestatus("lxml","inserting setup %s for %s before %s",setup,document,where)
+ end
+ table.insert_before_value(sd,setup,where)
+ elseif what == 4 then
+ if trace_loading then
+ commands.writestatus("lxml","inserting setup %s for %s after %s",setup,document,where)
+ end
+ table.insert_after_value(sd,setup,where)
+ end
+end
+
+function lxml.flushsetups(id,...)
+ local done, list = { }, { ... }
+ for i=1,#list do
+ local document = list[i]
+ local sd = setups[document]
+ if sd then
+ for k=1,#sd do
+ local v= sd[k]
+ if not done[v] then
+ if trace_loading then
+ commands.writestatus("lxml","applying setup %02i = %s to %s",k,v,document)
+ end
+ texsprint(ctxcatcodes,"\\xmlsetup{",id,"}{",v,"}")
+ done[v] = true
+ end
+ end
+ elseif trace_loading then
+ commands.writestatus("lxml","no setups for %s",document)
+ end
+ end
+end
+
+function lxml.resetsetups(document)
+ if trace_loading then
+ commands.writestatus("lxml","resetting all setups for %s",document)
+ end
+ setups[document] = { }
+end
+
+function lxml.removesetup(document,setup)
+ local s = setups[document]
+ if s then
+ for i=1,#s do
+ if s[i] == setup then
+ if trace_loading then
+ commands.writestatus("lxml","removing setup %s for %s",setup,document)
+ end
+ remove(t,i)
+ break
+ end
+ end
+ end
+end
+
+function lxml.setsetup(id,pattern,setup)
+ if not setup or setup == "" or setup == "*" or setup == "-" or setup == "+" then
+ local collected = lxmlparseapply(id,pattern)
+ if collected then
+ if trace_setups then
+ for c=1, #collected do
+ local e = collected[c]
+ local ix = e.ix or 0
+ if setup == "-" then
+ e.command = false
+ logs.report("lxml","lpath matched (a) %5i: %s = %s -> skipped",c,ix,setup)
+ elseif setup == "+" then
+ e.command = true
+ logs.report("lxml","lpath matched (b) %5i: %s = %s -> text",c,ix,setup)
+ else
+ local tg = e.tg
+ if tg then -- to be sure
+ e.command = tg
+ local ns = e.rn or e.ns
+ if ns == "" then
+ logs.report("lxml","lpath matched (c) %5i: %s = %s -> %s",c,ix,tg,tg)
+ else
+ logs.report("lxml","lpath matched (d) %5i: %s = %s:%s -> %s",c,ix,ns,tg,tg)
+ end
+ end
+ end
+ end
+ else
+ for c=1, #collected do
+ local e = collected[c]
+ if setup == "-" then
+ e.command = false
+ elseif setup == "+" then
+ e.command = true
+ else
+ e.command = e.tg
+ end
+ end
+ end
+ elseif trace_setups then
+ logs.report("lxml","no lpath matches for %s",pattern)
+ end
+ else
+ local a, b = match(setup,"^(.+:)([%*%-])$")
+ if a and b then
+ local collected = lxmlparseapply(id,pattern)
+ if collected then
+ if trace_setups then
+ for c=1, #collected do
+ local e = collected[c]
+ local ns, tg, ix = e.rn or e.ns, e.tg, e.ix or 0
+ if b == "-" then
+ e.command = false
+ if ns == "" then
+ logs.report("lxml","lpath matched (e) %5i: %s = %s -> skipped",c,ix,tg)
+ else
+ logs.report("lxml","lpath matched (f) %5i: %s = %s:%s -> skipped",c,ix,ns,tg)
+ end
+ elseif b == "+" then
+ e.command = true
+ if ns == "" then
+ logs.report("lxml","lpath matched (g) %5i: %s = %s -> text",c,ix,tg)
+ else
+ logs.report("lxml","lpath matched (h) %5i: %s = %s:%s -> text",c,ix,ns,tg)
+ end
+ else
+ e.command = a .. tg
+ if ns == "" then
+ logs.report("lxml","lpath matched (i) %5i: %s = %s -> %s",c,ix,tg,e.command)
+ else
+ logs.report("lxml","lpath matched (j) %5i: %s = %s:%s -> %s",c,ix,ns,tg,e.command)
+ end
+ end
+ end
+ else
+ for c=1, #collected do
+ local e = collected[c]
+ if b == "-" then
+ e.command = false
+ elseif b == "+" then
+ e.command = true
+ else
+ e.command = a .. e.tg
+ end
+ end
+ end
+ elseif trace_setups then
+ logs.report("lxml","no lpath matches for %s",pattern)
+ end
+ else
+ local collected = lxmlparseapply(id,pattern)
+ if collected then
+ if trace_setups then
+ for c=1, #collected do
+ local e = collected[c]
+ e.command = setup
+ local ns, tg, ix = e.rn or e.ns, e.tg, e.ix or 0
+ if ns == "" then
+ logs.report("lxml","lpath matched (k) %5i: %s = %s -> %s",c,ix,tg,setup)
+ else
+ logs.report("lxml","lpath matched (l) %5i: %s = %s:%s -> %s",c,ix,ns,tg,setup)
+ end
+ end
+ else
+ for c=1, #collected do
+ collected[c].command = setup
+ end
+ end
+ elseif trace_setups then
+ logs.report("lxml","no lpath matches for %s",pattern)
+ end
+ end
+ end
+end
+
+-- finalizers
+
+local finalizers = xml.finalizers.tex
+
+local function first(collected)
+ if collected then
+ xmlsprint(collected[1])
+ end
+end
+
+local function last(collected)
+ if collected then
+ xmlsprint(collected[#collected])
+ end
+end
+
+local function all(collected)
+ if collected then
+ for c=1,#collected do
+ xmlsprint(collected[c])
+ end
+ end
+end
+
+local function reverse(collected)
+ if collected then
+ for c=#collected,1,-1 do
+ xmlsprint(collected[c])
+ end
+ end
+end
+
+local function count(collected)
+ texwrite((collected and #collected) or 0)
+end
+
+local function position(collected,n)
+ -- todo: if not n then == match
+ if collected then
+ n = tonumber(n) or 0
+ if n < 0 then
+ n = #collected + n + 1
+ end
+ if n > 0 then
+ xmlsprint(collected[n])
+ end
+ end
+end
+
+local function match(collected) -- is match in preceding collected, never change, see bibxml
+ texwrite((collected and collected[1].mi) or 0)
+end
+
+local function index(collected,n)
+ if collected then
+ n = tonumber(n) or 0
+ if n < 0 then
+ n = #collected + n + 1
+ end
+ if n > 0 then
+ texwrite(collected[n].ni or 0)
+ end
+ end
+end
+
+local function command(collected,cmd)
+ if collected then
+ for c=1,#collected do
+ local e = collected[c]
+ local ix = e.ix
+ if not ix then
+ lxml.addindex(e.name,false,true)
+ ix = e.ix
+ end
+ texsprint(ctxcatcodes,"\\xmlw{",cmd,"}{",e.name,"::",ix,"}")
+ end
+ end
+end
+
+local function attribute(collected,a,default)
+ if collected and #collected > 0 then
+ local at = collected[1].at
+ local str = (at and at[a]) or default
+ if str and str ~= "" then
+ texsprint(notcatcodes,str)
+ end
+ elseif default then
+ texsprint(notcatcodes,default)
+ end
+end
+
+local function chainattribute(collected,arguments) -- todo: optional levels
+ if collected then
+ local e = collected[1]
+ while e do
+ local at = e.at
+ if at then
+ local a = at[arguments]
+ if a then
+ texsprint(notcatcodes,a)
+ end
+ else
+ break -- error
+ end
+ e = e.__p__
+ end
+ end
+end
+
+local function text(collected)
+ if collected then
+ local nc = #collected
+ if nc == 1 then -- hardly any gain so this will go
+ cprint(collected[1])
+ else for c=1,nc do
+ cprint(collected[c])
+ end end
+ end
+end
+
+local function ctxtext(collected)
+ if collected then
+ for c=1,#collected do
+ texsprint(ctxcatcodes,collected[1].dt)
+ end
+ end
+end
+
+local lowerchars, upperchars = characters.lower, characters.upper
+
+local function lower(collected)
+ if collected then
+ for c=1,#collected do
+ texsprint(ctxcatcodes,lowerchars(collected[1].dt[1]))
+ end
+ end
+end
+
+local function upper(collected)
+ if collected then
+ for c=1,#collected do
+ texsprint(ctxcatcodes,upperchars(collected[1].dt[1]))
+ end
+ end
+end
+
+local function number(collected)
+ if collected then
+ local n = 0
+ for c=1,#collected do
+ n = n + tonumber(collected[c].dt[1] or 0)
+ end
+ texwrite(n)
+ end
+end
+
+local function concatrange(collected,start,stop,separator,lastseparator,textonly) -- test this on mml
+ if collected then
+ local nofcollected = #collected
+ local separator = separator or ""
+ local lastseparator = lastseparator or separator or ""
+ start, stop = (start == "" and 1) or tonumber(start) or 1, (stop == "" and nofcollected) or tonumber(stop) or nofcollected
+ if stop < 0 then stop = nofcollected + stop end -- -1 == last-1
+ for i=start,stop do
+ if textonly then
+ xmlcprint(collected[i])
+ else
+ xmlsprint(collected[i])
+ end
+ if i == nofcollected then
+ -- nothing
+ elseif i == nofcollected-1 and lastseparator ~= "" then
+ texsprint(ctxcatcodes,lastseparator)
+ elseif separator ~= "" then
+ texsprint(ctxcatcodes,separator)
+ end
+ end
+ end
+end
+
+local function concat(collected,separator,lastseparator,textonly) -- test this on mml
+ concatrange(collected,false,false,separator,lastseparator,textonly)
+end
+
+finalizers.first = first
+finalizers.last = last
+finalizers.all = all
+finalizers.reverse = reverse
+finalizers.count = count
+finalizers.command = command
+finalizers.attribute = attribute
+finalizers.text = text
+finalizers.lower = lower
+finalizers.upper = upper
+finalizers.ctxtext = ctxtext
+finalizers.context = ctxtext
+finalizers.position = position
+finalizers.match = match
+finalizers.index = index
+finalizers.concat = concat
+finalizers.concatrange = concatrange
+finalizers.chainattribute = chainattribute
+finalizers.default = all -- !!
+
+local concat = table.concat
+
+function finalizers.tag(collected)
+ if collected then
+ local c
+ if n == 0 or not n then
+ c = collected[1]
+ elseif n > 1 then
+ c = collected[n]
+ else
+ c = collected[#collected-n+1]
+ end
+ if c then
+ texsprint(c.tg)
+ end
+ end
+end
+
+function finalizers.name(collected)
+ if collected then
+ local c
+ if n == 0 or not n then
+ c = collected[1]
+ elseif n > 1 then
+ c = collected[n]
+ else
+ c = collected[#collected-n+1]
+ end
+ if c then
+ if c.ns == "" then
+ texsprint(c.tg)
+ else
+ texsprint(c.ns,":",c.tg)
+ end
+ end
+ end
+end
+
+function finalizers.tags(collected,nonamespace)
+ if collected then
+ for c=1,#collected do
+ local e = collected[c]
+ local ns, tg = e.ns, e.tg
+ if nonamespace or ns == "" then
+ texsprint(tg)
+ else
+ texsprint(ns,":",tg)
+ end
+ end
+ end
+end
+
+--
+
+local function verbatim(id,before,after)
+ local root = get_id(id)
+ if root then
+ if before then texsprint(ctxcatcodes,before,"[",root.tg or "?","]") end
+ lxml.toverbatim(xmltostring(root.dt))
+ if after then texsprint(ctxcatcodes,after) end
+ end
+end
+function lxml.inlineverbatim(id)
+ verbatim(id,"\\startxmlinlineverbatim","\\stopxmlinlineverbatim")
+end
+function lxml.displayverbatim(id)
+ verbatim(id,"\\startxmldisplayverbatim","\\stopxmldisplayverbatim")
+end
+
+lxml.verbatim = verbatim
+
+-- helpers
+
+function lxml.first(id,pattern)
+ local collected = lxmlparseapply(id,pattern)
+ if collected then
+ first(collected)
+ end
+end
+
+function lxml.last(id,pattern)
+ local collected = lxmlparseapply(id,pattern)
+ if collected then
+ last(collected)
+ end
+end
+
+function lxml.all(id,pattern)
+ local collected = lxmlparseapply(id,pattern)
+ if collected then
+ all(collected)
+ end
+end
+
+function lxml.count(id,pattern)
+ -- always needs to produce a result so no test here
+ count(lxmlparseapply(id,pattern))
+end
+
+function lxml.attribute(id,pattern,a,default)
+ local collected = lxmlparseapply(id,pattern)
+ if collected then
+ attribute(collected,a,default)
+ end
+end
+
+function lxml.raw(id,pattern) -- the content, untouched by commands
+ local collected = (pattern and lxmlparseapply(id,pattern)) or get_id(id)
+ if collected then
+ texsprint(xmltostring(collected[1].dt))
+ end
+end
+
+function lxml.context(id,pattern) -- the content, untouched by commands
+ if not pattern then
+ local collected = get_id(id)
+ -- texsprint(ctxcatcodes,collected.dt[1])
+ ctx_text(collected.dt[1])
+ else
+ local collected = lxmlparseapply(id,pattern) or get_id(id)
+ if collected and #collected > 0 then
+ texsprint(ctxcatcodes,collected[1].dt)
+ end
+ end
+end
+
+function lxml.text(id,pattern)
+ local collected = (pattern and lxmlparseapply(id,pattern)) or get_id(id)
+ if collected then
+ text(collected)
+ end
+end
+
+lxml.content = text
+
+function lxml.position(id,pattern,n)
+ local collected = lxmlparseapply(id,pattern)
+ if collected then
+ position(collected,n)
+ end
+end
+
+function lxml.chainattribute(id,pattern,a,default)
+ local collected = lxmlparseapply(id,pattern)
+ if collected then
+ chainattribute(collected,a,default)
+ end
+end
+
+function lxml.concatrange(id,pattern,start,stop,separator,lastseparator,textonly) -- test this on mml
+ concatrange(lxmlparseapply(id,pattern),start,stop,separator,lastseparator,textonly)
+end
+
+function lxml.concat(id,pattern,separator,lastseparator,textonly)
+ concatrange(lxmlparseapply(id,pattern),false,false,separator,lastseparator,textonly)
+end
+
+function lxml.element(id,n)
+ position(lxmlparseapply(id,"/*"),n)
+end
+
+lxml.index = lxml.position
+
+function lxml.pos(id)
+ local root = get_id(id)
+ texwrite((root and root.ni) or 0)
+end
+
+function lxml.att(id,a,default)
+ local root = get_id(id)
+ if root then
+ local at = root.at
+ local str = (at and at[a]) or default
+ if str and str ~= "" then
+ texsprint(notcatcodes,str)
+ end
+ elseif default then
+ texsprint(notcatcodes,default)
+ end
+end
+
+function lxml.name(id) -- or remapped name? -> lxml.info, combine
+ local r = get_id(id)
+ local ns = r.rn or r.ns or ""
+ if ns ~= "" then
+ texsprint(ns,":",r.tg)
+ else
+ texsprint(r.tg)
+ end
+end
+
+function lxml.match(id) -- or remapped name? -> lxml.info, combine
+ texsprint(get_id(id).mi or 0)
+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.flush(id)
+ id = get_id(id)
+ local dt = id and id.dt
+ if dt then
+ xmlsprint(dt)
+ end
+end
+
+function lxml.snippet(id,i)
+ local e = get_id(id)
+ if e then
+ local edt = e.dt
+ if edt then
+ xmlsprint(edt[i])
+ end
+ end
+end
+
+function lxml.direct(id)
+ xmlsprint(get_id(id))
+end
+
+function lxml.command(id,pattern,cmd)
+ local i, p = get_id(id,true)
+ local collected = lxmlparseapply(i,pattern)
+ if collected then
+ local rootname = p or i.name
+ for c=1,#collected do
+ local e = collected[c]
+ local ix = e.ix
+ if not ix then
+ addindex(rootname,false,true)
+ ix = e.ix
+ end
+ texsprint(ctxcatcodes,"\\xmlw{",cmd,"}{",rootname,"::",ix,"}")
+ end
+ end
+end
+
+-- loops
+
+function lxml.collected(id,pattern,reverse)
+ return xmlcollected(get_id(id),pattern,reverse)
+end
+
+function lxml.elements(id,pattern,reverse)
+ return xmlelements(get_id(id),pattern,reverse)
+end
+
+-- obscure ones
+
+lxml.info = lxml.name
+
+-- testers
+
+local found, empty = xml.found, xml.empty
+
+local doif, doifnot, doifelse = commands.doif, commands.doifnot, commands.doifelse
+
+function lxml.doif (id,pattern) doif (found(get_id(id),pattern)) end
+function lxml.doifnot (id,pattern) doifnot (found(get_id(id),pattern)) end
+function lxml.doifelse (id,pattern) doifelse(found(get_id(id),pattern)) end
+function lxml.doiftext (id,pattern) doif (not empty(get_id(id),pattern)) end
+function lxml.doifnottext (id,pattern) doifnot (not empty(get_id(id),pattern)) end
+function lxml.doifelsetext (id,pattern) doifelse(not empty(get_id(id),pattern)) end
+
+-- special case: "*" and "" -> self else lpath lookup
+
+--~ function lxml.doifelseempty(id,pattern) doifelse(isempty(get_id(id),pattern ~= "" and pattern ~= nil)) end -- not yet done, pattern
+
+-- status info
+
+statistics.register("xml load time", function()
+ if noffiles > 0 or nofconverted > 0 then
+ return format("%s seconds, %s files, %s converted", statistics.elapsedtime(xml), noffiles, nofconverted)
+ else
+ return nil
+ end
+end)
+
+statistics.register("lxml preparation time", function()
+ local calls, cached = xml.lpathcalls(), xml.lpathcached()
+ if calls > 0 or cached > 0 then
+ return format("%s seconds, %s nodes, %s lpath calls, %s cached calls",
+ statistics.elapsedtime(lxml), nofindices, calls, cached)
+ else
+ return nil
+ end
+end)
+
+statistics.register("lxml lpath profile", function()
+ local p = xml.profiled
+ if p and next(p) then
+ local s = table.sortedkeys(p)
+ local tested, matched, finalized = 0, 0, 0
+ texio.write_nl("log","\nbegin of lxml profile\n")
+ texio.write_nl("log","\n tested matched finalized pattern\n\n")
+ for i=1,#s do
+ local pattern = s[i]
+ local pp = p[pattern]
+ local t, m, f = pp.tested, pp.matched, pp.finalized
+ tested, matched, finalized = tested + t, matched + m, finalized + f
+ texio.write_nl("log",format("%9i %9i %9i %s",t,m,f,pattern))
+ end
+ texio.write_nl("log","\nend of lxml profile\n")
+ return format("%s patterns, %s tested, %s matched, %s finalized (see log for details)",#s,tested,matched,finalized)
+ else
+ return nil
+ end
+end)
+
+-- misc
+
+function lxml.nonspace(id,pattern) -- slow, todo loop
+ xmltprint(xmlcollect(get_id(id),pattern,true))
+end
+
+function lxml.strip(id,pattern,nolines,anywhere)
+ xml.strip(get_id(id),pattern,nolines,anywhere)
+end
+
+function lxml.stripped(id,pattern,nolines)
+ local str = xmltext(get_id(id),pattern) or ""
+ str = gsub(str,"^%s*(.-)%s*$","%1")
+ if nolines then
+ str = gsub(str,"%s+"," ")
+ end
+ xmlsprint(str)
+end
+
+function lxml.delete(id,pattern)
+ xml.delete(get_id(id),pattern)
+end
diff --git a/Master/texmf-dist/tex/context/base/lxml-xml.lua b/Master/texmf-dist/tex/context/base/lxml-xml.lua
new file mode 100644
index 00000000000..f791ec0f83f
--- /dev/null
+++ b/Master/texmf-dist/tex/context/base/lxml-xml.lua
@@ -0,0 +1,288 @@
+if not modules then modules = { } end modules ['lxml-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"
+}
+
+local finalizers = xml.finalizers.xml
+local xmlfilter = xml.filter -- we could inline this one for speed
+local xmltostring = xml.tostring
+local xmlserialize = xml.serialize
+
+local function first(collected) -- wrong ?
+ return collected and collected[1]
+end
+
+local function last(collected)
+ return collected and collected[#collected]
+end
+
+local function all(collected)
+ return collected
+end
+
+local function reverse(collected)
+ if collected then
+ local reversed = { }
+ for c=#collected,1,-1 do
+ reversed[#reversed+1] = collected[c]
+ end
+ return reversed
+ end
+end
+
+local function attribute(collected,name)
+ if collected and #collected > 0 then
+ local at = collected[1].at
+ return at and at[name]
+ end
+end
+
+local function att(id,name)
+ local at = id.at
+ return at and at[name]
+end
+
+local function count(collected)
+ return (collected and #collected) or 0
+end
+
+local function position(collected,n)
+ if collected then
+ n = tonumber(n) or 0
+ if n < 0 then
+ return collected[#collected + n + 1]
+ elseif n > 0 then
+ return collected[n]
+ else
+ return collected[1].mi or 0
+ end
+ end
+end
+
+local function match(collected)
+ return (collected and collected[1].mi) or 0 -- match
+end
+
+local function index(collected)
+ if collected then
+ return collected[1].ni
+ end
+end
+
+local function attributes(collected,arguments)
+ if collected then
+ local at = collected[1].at
+ if arguments then
+ return at[arguments]
+ elseif next(at) then
+ return at -- all of them
+ end
+ end
+end
+
+local function chainattribute(collected,arguments) -- todo: optional levels
+ if collected then
+ local e = collected[1]
+ while e do
+ local at = e.at
+ if at then
+ local a = at[arguments]
+ if a then
+ return a
+ end
+ else
+ break -- error
+ end
+ e = e.__p__
+ end
+ end
+ return ""
+end
+
+local function raw(collected) -- hybrid
+ if collected then
+ local e = collected[1] or collected
+ return (e and xmlserialize(e)) or "" -- only first as we cannot concat function
+ else
+ return ""
+ end
+end
+
+local function text(collected) -- hybrid
+ if collected then
+ local e = collected[1] or collected
+ return (e and xmltostring(e.dt)) or ""
+ else
+ return ""
+ end
+end
+
+local function texts(collected)
+ if collected then
+ local t = { }
+ for c=1,#collected do
+ local e = collection[c]
+ if e and e.dt then
+ t[#t+1] = e.dt
+ end
+ end
+ return t
+ end
+end
+
+local function tag(collected,n)
+ if collected then
+ local c
+ if n == 0 or not n then
+ c = collected[1]
+ elseif n > 1 then
+ c = collected[n]
+ else
+ c = collected[#collected-n+1]
+ end
+ return c and c.tg
+ end
+end
+
+local function name(collected,n)
+ if collected then
+ local c
+ if n == 0 or not n then
+ c = collected[1]
+ elseif n > 1 then
+ c = collected[n]
+ else
+ c = collected[#collected-n+1]
+ end
+ if c then
+ if c.ns == "" then
+ return c.tg
+ else
+ return c.ns .. ":" .. c.tg
+ end
+ end
+ end
+end
+
+local function tags(collected,nonamespace)
+ if collected then
+ local t = { }
+ for c=1,#collected do
+ local e = collected[c]
+ local ns, tg = e.ns, e.tg
+ if nonamespace or ns == "" then
+ t[#t+1] = tg
+ else
+ t[#t+1] = ns .. ":" .. tg
+ end
+ end
+ return t
+ end
+end
+
+local function empty(collected)
+ if collected then
+ for c=1,#collected do
+ local e = collected[c]
+ if e then
+ local edt = e.dt
+ if edt then
+ local n = #edt
+ if n == 1 then
+ local edk = edt[1]
+ local typ = type(edk)
+ if typ == "table" then
+ return false
+ elseif edk ~= "" then -- maybe an extra tester for spacing only
+ return false
+ end
+ elseif n > 1 then
+ return false
+ end
+ end
+ end
+ end
+ end
+ return true
+end
+
+finalizers.first = first
+finalizers.last = last
+finalizers.all = all
+finalizers.reverse = reverse
+finalizers.elements = all
+finalizers.default = all
+finalizers.attribute = attribute
+finalizers.att = att
+finalizers.count = count
+finalizers.position = position
+finalizers.match = match
+finalizers.index = index
+finalizers.attributes = attributes
+finalizers.chainattribute = chainattribute
+finalizers.text = text
+finalizers.texts = texts
+finalizers.tag = tag
+finalizers.name = name
+finalizers.tags = tags
+finalizers.empty = empty
+
+-- shortcuts -- we could support xmlfilter(id,pattern,first)
+
+function xml.first(id,pattern)
+ return first(xmlfilter(id,pattern))
+end
+
+function xml.last(id,pattern)
+ return last(xmlfilter(id,pattern))
+end
+
+function xml.count(id,pattern)
+ return count(xmlfilter(id,pattern))
+end
+
+function xml.attribute(id,pattern,a,default)
+ return attribute(xmlfilter(id,pattern),a,default)
+end
+
+function xml.raw(id,pattern)
+ if pattern then
+ return raw(xmlfilter(id,pattern))
+ else
+ return raw(id)
+ end
+end
+
+function xml.text(id,pattern)
+ if pattern then
+ -- return text(xmlfilter(id,pattern))
+ local collected = xmlfilter(id,pattern)
+ return (collected and xmltostring(collected[1].dt)) or ""
+ elseif id then
+ -- return text(id)
+ return xmltostring(id.dt) or ""
+ else
+ return ""
+ end
+end
+
+xml.content = text
+
+function xml.position(id,pattern,n) -- element
+ return position(xmlfilter(id,pattern),n)
+end
+
+function xml.match(id,pattern) -- number
+ return match(xmlfilter(id,pattern))
+end
+
+function xml.empty(id,pattern)
+ return empty(xmlfilter(id,pattern))
+end
+
+xml.all = xml.filter
+xml.index = xml.position
+xml.found = xml.filter
diff --git a/Master/texmf-dist/tex/context/base/m-barcodes.mkiv b/Master/texmf-dist/tex/context/base/m-barcodes.mkiv
new file mode 100644
index 00000000000..b0eae148558
--- /dev/null
+++ b/Master/texmf-dist/tex/context/base/m-barcodes.mkiv
@@ -0,0 +1,122 @@
+%D \module
+%D [ file=m-pstricks,
+%D version=2010.03.14,
+%D title=\CONTEXT\ Extra Modules,
+%D subtitle=Barcodes,
+%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.
+
+% \startTEXpage
+% \startPSTRICKS
+% \pspicture(-4mm,-1mm)(38mm,26mm)
+% \psbarcode{9781860742712}{includetext guardwhitespace}{ean13}%
+% \endpspicture
+% \stopPSTRICKS
+% \stopTEXpage
+
+% 978-94-90688-01-1
+%
+% 978 = ean isbn identifier (979 also)
+% 94 = country code
+% 90688 = publisher code
+% 01 = title 1
+% 1 = checksum
+
+\usemodule[pstricks]
+
+\usePSTRICKSmodule[pst-barcode]
+
+\definefont[barcodefont][file:ocrb10]
+% \definefont[barcodefont][file:texgyreheros-regular]
+
+\startluacode
+plugins.barcodes = { }
+
+local function split(code)
+ local t = { string.byte(code,1,#code) }
+ if #t >= 12 then
+ local s = 0
+ for i=1,11,2 do
+ s = s + (t[i]-48)
+ end
+ for i=2,12,2 do
+ s = s + 3 * (t[i]-48)
+ end
+ local m = s % 10
+ local c = (m > 0 and (10 - m)) or 0
+ return t, s, m, c
+ end
+end
+
+function plugins.barcodes.isbn_1(original)
+ local code = string.gsub(original,"%-","")
+ local t, s, m, c = split(code)
+ if t then
+ if #t == 13 then
+ local e = ((c == t[13] - 48) and "correct") or "wrong"
+ logs.report("isbn code","code=%s, sum=%s, checksum=%s, modulo=%s, status=%s",original,s,m,c,e)
+ else
+ logs.report("isbn code","code=%s, sum=%s, checksum=%s, modulo=%s",original,s,m,c)
+ code= code .. c
+ end
+ end
+ tex.sprint(code)
+end
+
+function plugins.barcodes.isbn_2(original)
+ local code = string.gsub(original,"%-","")
+ local t, s, m, c = split(code)
+ if t and #t == 12 then
+ original = original .. "-" .. c
+ end
+ tex.sprint(original)
+end
+\stopluacode
+
+\startsetups barcode:isbn
+ \scale
+ [width=5cm]
+ {
+ \vbox {
+ \hbox {
+ \hskip3.7mm
+ \scale[width=34mm]{\barcodefont ISBN \ctxlua{plugins.barcodes.isbn_2("\getvariable{barcode}{code}")}}
+ }
+ \par
+ \normalexpanded { \noexpand \setPSTRICKS {
+ \noexpand \pspicture(-4mm,-1mm)(38mm,26mm)
+ \noexpand \psbarcode {
+ \ctxlua{plugins.barcodes.isbn_1("\getvariable{barcode}{code}")}
+ } {
+ includetext guardwhitespace
+ } {
+ ean13
+ }
+ \noexpand \endpspicture
+ }
+ \noexpand \processPSTRICKS }
+ }
+ }
+\stopsetups
+
+\def\barcode[#1]%
+ {\bgroup
+ \setvariables[barcode][type=isbn,#1]%
+ \directsetup{barcode:\getvariable{barcode}{type}}%
+ \egroup}
+
+% \usemodule[barcodes]
+%
+% \starttext
+% \startTEXpage
+% \barcode[type=isbn,code=978-94-90688-01-1]
+% \stopTEXpage
+% \stoptext
+
+\endinput
+
diff --git a/Master/texmf-dist/tex/context/base/m-chart.mkii b/Master/texmf-dist/tex/context/base/m-chart.mkii
new file mode 100644
index 00000000000..2554fa2d4b7
--- /dev/null
+++ b/Master/texmf-dist/tex/context/base/m-chart.mkii
@@ -0,0 +1,48 @@
+%D \module
+%D [ file=m-chart,
+%D version=1998.10.10,
+%D title=\CONTEXT\ Modules,
+%D subtitle=Flow Charts,
+%D author={Hans Hagen \& Ton Otten},
+%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 The \XML\ interface:
+
+\unprotect
+
+\startXMLdefinitions flowchart
+
+\defineXMLargument [flowchartdefinition]
+ {\defineFLOWchart[\XMLpar{flowchartdefinition}{identifier}{unknown}]}
+
+\defineXMLpickup [flowcell]
+ {\startFLOWcell
+ \defineXMLargument[name]{\unspaceafter\name}%
+ \defineXMLargument[shape]{\unspaceafter\shape}%
+ \defineXMLnestedargument[text]{\text}}
+ {\stopFLOWcell}
+
+\defineXMLenvironment [location] % global unspace/store
+ {\bgroup\defineXMLpush[x]\defineXMLpush[y]}
+ {\XMLunspace{x}\XMLunspace{y}%
+ \expanded{\egroup\noexpand\location{\XMLpop{x},\XMLpop{y}}}}
+
+\defineXMLenvironment [connection]
+ {\bgroup\defineXMLpush[type]\defineXMLpush[name]}%
+ {\XMLunspace{type}\XMLunspace{name}%
+ \expanded{\egroup\noexpand\connection[\XMLpop{type}]{\XMLpop{name}}}}
+
+\defineXMLsingular [flowchart]
+ {\expanded{\FLOWchart[\XMLpar{flowchart}{identifier}{unknown}]}}
+
+\defineXMLdirective [flowchart] [shapes] \setupFLOWshapes
+\defineXMLdirective [flowchart] [lines] \setupFLOWlines
+
+\stopXMLdefinitions
+
+\protect \endinput
diff --git a/Master/texmf-dist/tex/context/base/m-chart.mkiv b/Master/texmf-dist/tex/context/base/m-chart.mkiv
new file mode 100644
index 00000000000..4c008a5eef3
--- /dev/null
+++ b/Master/texmf-dist/tex/context/base/m-chart.mkiv
@@ -0,0 +1,20 @@
+%D \module
+%D [ file=m-chart,
+%D version=1998.10.10,
+%D title=\CONTEXT\ Modules,
+%D subtitle=Flow Charts,
+%D author={Hans Hagen \& Ton Otten},
+%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 The \XML\ interface:
+
+\unprotect
+
+\writestatus\m!systems{The chart mkiv xml interface is not yet defined!}
+
+\protect \endinput
diff --git a/Master/texmf-dist/tex/context/base/m-chart.tex b/Master/texmf-dist/tex/context/base/m-chart.tex
index c8928f2d5ee..5ccf4c2ad2b 100644
--- a/Master/texmf-dist/tex/context/base/m-chart.tex
+++ b/Master/texmf-dist/tex/context/base/m-chart.tex
@@ -15,8 +15,8 @@
% todo: make mkiv variant
% todo: use dimexpr/numspr
-% will be redone with layers and dimexpr ro even better, by just using
-% textext
+% will be redone with layers and dimexpr or even better, by just using
+% textext .. a nice example of old code
%D This is an experimental module. Pieces of code will be moved
%D to other modules. More features are possible but will be
@@ -1280,36 +1280,6 @@
% \def\processFLOWbuffer#1{\getvalue{\FLOWbufferprefix#1}}
% \def\typeFLOWbuffer #1{[Sorry, no verbatim chart #1 available.]}
-%D The XML interface [will be mode protected or separate x-chart file]
-
-\startXMLdefinitions flowchart
-
-\defineXMLargument [flowchartdefinition]
- {\defineFLOWchart[\XMLpar{flowchartdefinition}{identifier}{unknown}]}
-
-\defineXMLpickup [flowcell]
- {\startFLOWcell
- \defineXMLargument[name]{\unspaceafter\name}%
- \defineXMLargument[shape]{\unspaceafter\shape}%
- \defineXMLnestedargument[text]{\text}}
- {\stopFLOWcell}
-
-\defineXMLenvironment [location] % global unspace/store
- {\bgroup\defineXMLpush[x]\defineXMLpush[y]}
- {\XMLunspace{x}\XMLunspace{y}%
- \expanded{\egroup\noexpand\location{\XMLpop{x},\XMLpop{y}}}}
-
-\defineXMLenvironment [connection]
- {\bgroup\defineXMLpush[type]\defineXMLpush[name]}%
- {\XMLunspace{type}\XMLunspace{name}%
- \expanded{\egroup\noexpand\connection[\XMLpop{type}]{\XMLpop{name}}}}
-
-\defineXMLsingular [flowchart]
- {\expanded{\FLOWchart[\XMLpar{flowchart}{identifier}{unknown}]}}
-
-\defineXMLdirective [flowchart] [shapes] \setupFLOWshapes
-\defineXMLdirective [flowchart] [lines] \setupFLOWlines
-
-\stopXMLdefinitions
+\loadmarkfile{m-chart}
\protect \endinput
diff --git a/Master/texmf-dist/tex/context/base/m-chemic.mkiv b/Master/texmf-dist/tex/context/base/m-chemic.mkiv
index 4cc1e3bd898..bd4cb093e4d 100644
--- a/Master/texmf-dist/tex/context/base/m-chemic.mkiv
+++ b/Master/texmf-dist/tex/context/base/m-chemic.mkiv
@@ -12,8 +12,9 @@
%C therefore copyrighted by \PRAGMA. See mreadme.pdf for
%C details.
-\usemodule[pictex] % we will get rid of this
+\writestatus{ppchtex}{not loaded as support for chemistry in now built in}
-\input ppchtex.mkiv \relax
+% \usemodule[pictex] % we will get rid of this
+% \input ppchtex.mkiv \relax
\endinput
diff --git a/Master/texmf-dist/tex/context/base/m-database.tex b/Master/texmf-dist/tex/context/base/m-database.tex
index c4fba132a24..3bb050f142a 100644
--- a/Master/texmf-dist/tex/context/base/m-database.tex
+++ b/Master/texmf-dist/tex/context/base/m-database.tex
@@ -85,34 +85,20 @@
\appendseparatedlistcontent{#1}%
\appendseparatedlistparameter\c!right}
+% a version more robust with regard to {a a} b c d situations:
-% % % so far
-
-% \def\dodefineprocessseplist#1#2% separator \docommand
-% {\def\dodoprocessseplist##1##2#1%
-% {\ifx\relax##1%
-% \expandafter\nodoprocessseplist
-% \else\ifx##1#1%
-% #2{}%
-% #2{##2}%
-% \expandafter\expandafter\expandafter\dodoprocessseplist
-% \else
-% #2{##1##2}%
-% \expandafter\expandafter\expandafter\dodoprocessseplist
-% \fi\fi}%
-% \def\doprocessseplist##1\relax
-% {\dodoprocessseplist##1#1\relax#1\relax\relax\end}}
-%
-% a version more robust with regard to {a a} b c d situations
+\edef\detokenizedrelax{\detokenize{\relax}}
-\def\edef@relax{\relax}
+\edef\processseplistseparator{\detokenize{,}}%
\def\dodefineprocessseplist#1#2% separator \docommand
- {\def\dodoprocessseplist##1##2#1%
- {\edef\!!stringa{##1}%
- \ifx\edef@relax\!!stringa
+ {\edef\processseplistseparator{\detokenize{#1}}%
+ \def\dodoprocessseplist##1##2#1%
+ {\edef\!!stringa{\detokenize{##1}}%
+ \ifx\detokenizedrelax\!!stringa
\expandafter\nodoprocessseplist
- \else\ifx\!!stringa#1%
+ % \else\ifx\!!stringa#1%
+ \else\ifx\!!stringa\processseplistseparator
#2{}%
#2{##2}%
\expandafter\expandafter\expandafter\dodoprocessseplist
@@ -404,4 +390,32 @@ a,b,c
d,e,f
\stopseparatedlist
+\defineseparatedlist[CSV]
+ [separator=comma,
+ before=\bTABLE, after=\eTABLE,
+ first=\bTR, last=\eTR,
+ left=\bTD, right=\eTD]
+
+\startCSV
+a,b,c,č
+d,e,f,š
+\stopCSV
+
+\enableregime[utf]
+
+\defineseparatedlist[X][separator=X,left=(,right=),first=\endgraf,last=\endgraf]
+\defineseparatedlist[Y][separator=Y,left=(,right=),first=\endgraf,last=\endgraf]
+
+\startX
+aXb
+Xc
+čXš
+\stopX
+
+\startY
+aYb
+Yc
+čYš
+\stopY
+
\stoptext
diff --git a/Master/texmf-dist/tex/context/base/m-directives.tex b/Master/texmf-dist/tex/context/base/m-directives.tex
new file mode 100644
index 00000000000..c958f6cad51
--- /dev/null
+++ b/Master/texmf-dist/tex/context/base/m-directives.tex
@@ -0,0 +1,5 @@
+\doifnotmode{mkiv} {\endinput}
+
+\starttext
+ \showdirectives
+\stoptext
diff --git a/Master/texmf-dist/tex/context/base/m-graph.mkiv b/Master/texmf-dist/tex/context/base/m-graph.mkiv
index 39a1271d765..c9223488480 100644
--- a/Master/texmf-dist/tex/context/base/m-graph.mkiv
+++ b/Master/texmf-dist/tex/context/base/m-graph.mkiv
@@ -17,7 +17,7 @@
\startluacode
local function strip(s)
- return "\times10^{"..(s:gsub("%+*0*","")).."}"
+ return "\\times10^{"..(s:gsub("%+*0*","")).."}"
end
function metapost.format_n(fmt,str)
fmt = fmt:gsub("@","%%")
diff --git a/Master/texmf-dist/tex/context/base/m-narrowtt.tex b/Master/texmf-dist/tex/context/base/m-narrowtt.tex
index 6c14c97c529..2e11b99ad19 100644
--- a/Master/texmf-dist/tex/context/base/m-narrowtt.tex
+++ b/Master/texmf-dist/tex/context/base/m-narrowtt.tex
@@ -31,7 +31,7 @@
\definetypeface
[narrowtt] [tt]
- [mono] [modern-cond] [default] [encoding=\defaultencoding]
+ [mono] [modern-condensed] [default] [encoding=\defaultencoding]
\definetyping[n\v!typing] \setuptyping[n\v!typing][style=\narrowtt]
\definetype [n\v!type] \setuptype [n\v!type] [style=\narrowtt]
diff --git a/Master/texmf-dist/tex/context/base/m-obsolete.tex b/Master/texmf-dist/tex/context/base/m-obsolete.tex
new file mode 100644
index 00000000000..a97002cf64c
--- /dev/null
+++ b/Master/texmf-dist/tex/context/base/m-obsolete.tex
@@ -0,0 +1,5 @@
+\unprotect
+
+\writestatus\m!systems{skipping obsolete module}
+
+\protect \endinput
diff --git a/Master/texmf-dist/tex/context/base/m-pstricks.lua b/Master/texmf-dist/tex/context/base/m-pstricks.lua
new file mode 100644
index 00000000000..35cae93f65f
--- /dev/null
+++ b/Master/texmf-dist/tex/context/base/m-pstricks.lua
@@ -0,0 +1,73 @@
+if not modules then modules = { } end modules ['m-pstricks'] = {
+ version = 1.001,
+ comment = "companion to m-pstricks.mkiv",
+ author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
+ copyright = "PRAGMA ADE / ConTeXt Development Team",
+ license = "see context related readme files"
+}
+
+-- The following will be done when I need ps tricks figures
+-- in large quantities:
+--
+-- + hash graphics and only process them once
+-- + save md5 checksums in tuc file
+--
+-- It's no big deal but has a low priority.
+
+local format, lower, concat, gmatch = string.format, string.lower, table.concat, string.gmatch
+local variables = interfaces.variables
+
+plugins = plugins or { }
+plugins.pstricks = plugins.pstricks or { }
+
+local template = [[
+\starttext
+ \pushcatcodetable
+ \setcatcodetable\texcatcodes
+ \usemodule[pstric]
+ %s
+ \popcatcodetable
+ \startTEXpage
+ \hbox\bgroup
+ \ignorespaces
+ %s
+ \removeunwantedspaces
+ \egroup
+ \obeydepth %% temp hack as we need to figure this out
+ \stopTEXpage
+\stoptext
+]]
+
+local modules = { }
+local graphics = 0
+
+function plugins.pstricks.usemodule(names)
+ for name in gmatch(names,"([^%s,]+)") do
+ modules[#modules+1] = format([[\readfile{%s}{}{}]],name)
+ end
+end
+
+function plugins.pstricks.process(n)
+ graphics = graphics + 1
+ local name = string.format("%s-pstricks-%04i",tex.jobname,graphics)
+ local data = buffers.collect("def-"..n)
+ local tmpfile = name .. ".tmp"
+ local epsfile = name .. ".ps"
+ local pdffile = name .. ".pdf"
+ local modules = concat(modules,"\n")
+ os.remove(epsfile)
+ os.remove(pdffile)
+ io.savedata(tmpfile,format(template,modules,data))
+ os.execute(format("mtxrun --script texexec %s --once --dvips",tmpfile))
+ if lfs.isfile(epsfile) then
+ os.execute(format("ps2pdf %s %s",epsfile,pdffile))
+ -- todo: direct call but not now
+ if lfs.isfile(pdffile) then
+ context.externalfigure( { pdffile }, { object = variables.no } )
+ else
+ logs.report("plugins","pstricks run failed, no pdf file")
+ end
+ else
+ logs.report("plugins","pstricks run failed, no ps file")
+ end
+end
diff --git a/Master/texmf-dist/tex/context/base/m-pstric.tex b/Master/texmf-dist/tex/context/base/m-pstricks.mkii
index ac018fe074e..3ada9e07ec7 100644
--- a/Master/texmf-dist/tex/context/base/m-pstric.tex
+++ b/Master/texmf-dist/tex/context/base/m-pstricks.mkii
@@ -11,8 +11,15 @@
%C therefore copyrighted by \PRAGMA. See mreadme.pdf for
%C details.
+% pstricks is not supported in context mkii (it's no problem doing that
+% but as we also need to support latex it would become quite messy so for
+% context we use metapost and for latex pstricks)
+
%M \usemodule[pstric]
+\letvalue{@unused}\plussixteen
+\letvalue{alloc@}\gobblefivearguments
+
\chardef\oldbarcode\the\catcode`\| \catcode`\|=12
\def\loadpstrickscolors#1%
@@ -41,6 +48,12 @@
\catcode`\|=\oldbarcode
+\def\loadpstricksmodule[#1]%
+ {\chardef\oldbarcode\the\catcode`\|
+ \catcode`\|=12
+ \readfile{#1}{}{}%
+ \catcode`\|=\oldbarcode}
+
%D The next piece of code is for John Culleton who suggested to
%D handle \PSTRICKS\ in a similar fashion as \METAPOST, i.e.\
%D using a child process. For the moment there is no support
@@ -108,6 +121,7 @@
\long\def\dostartPSTRICKS[#1]#2\stopPSTRICKS
{\doifelse{\jobsuffix}{dvi} % will some day move to app as switch
{\hbox{#2}}
- {\startTEXapplication[#1]{\usemodule[pstric]}#2\stopTEXapplication}}
+% {\startTEXapplication[#1]{\usemodule[pstric]}#2\stopTEXapplication}}
+ {\startTEXapplication[#1]{}#2\stopTEXapplication}}
\protect \endinput
diff --git a/Master/texmf-dist/tex/context/base/m-pstricks.mkiv b/Master/texmf-dist/tex/context/base/m-pstricks.mkiv
new file mode 100644
index 00000000000..c800ec19935
--- /dev/null
+++ b/Master/texmf-dist/tex/context/base/m-pstricks.mkiv
@@ -0,0 +1,66 @@
+%D \module
+%D [ file=m-pstricks,
+%D version=2010.03.14,
+%D title=\CONTEXT\ Extra Modules,
+%D subtitle=\PSTRICKS\ Connections,
+%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.
+
+\ctxloadluafile{m-pstricks}{}
+
+%D \startbuffer
+%D \usePSTRICKSmodule[pst-barcode]
+%D
+%D \startPSTRICKS
+%D \pspicture(-4mm,-1mm)(38mm,26mm)
+%D \psbarcode{9781860742712}{includetext guardwhitespace}{ean13}%
+%D \endpspicture
+%D \stopPSTRICKS
+%D \stopbuffer
+%D
+%D \typebuffer \startlinecorrection \getbuffer \stoplinecorrection
+
+\unprotect
+
+% best we can make a special colors module
+%
+% \let\@unused\plussixteen
+% \let\alloc@ \gobblefivearguments
+%
+% \def\loadpstrickscolors#1%
+% {\pushmacro\dodefinecolor
+% \pushmacro\dodefinepalet
+% \pushmacro\dodefinecolorgroup
+% \def\dodefinecolor[##1][##2]%
+% {\doifassignmentelse{##2}
+% {\getparameters[pstricks][r=0,g=0,b=0,##2]%
+% \expanded{\newrgbcolor{##1}{{\pstricksr} {\pstricksg} {\pstricksb}}}}%
+% {}}%
+% \def\dodefinepalet [##1][##2]{}%
+% \def\dodefinecolorgroup[##1][##2][##3]{}%
+% \writestatus{pstricks}{loading colors from #1}%
+% \input #1 \relax
+% \popmacro\dodefinecolorgroup
+% \popmacro\dodefinepalet
+% \popmacro\dodefinecolor}
+%
+% \input multido \relax
+% \input pstricks \relax
+% \input pst-plot \relax
+%
+% \loadpstrickscolors{colo-rgb}
+
+\definebuffer[PSTRICKS]
+
+\unexpanded\def\processPSTRICKS {\ctxlua{plugins.pstricks.process(\thebuffernumber{PSTRICKS})}}
+\unexpanded\def\usePSTRICKSmodule[#1]{\ctxlua{plugins.pstricks.usemodule("#1")}}
+\unexpanded\def\setPSTRICKS #1{\setbuffer[def-\thebuffernumber{PSTRICKS}]#1\endbuffer}
+
+\let\stopPSTRICKS\processPSTRICKS
+
+\protect \endinput
diff --git a/Master/texmf-dist/tex/context/base/type-one.tex b/Master/texmf-dist/tex/context/base/m-pstricks.tex
index bd18eb2810f..28bc9f30f2f 100644
--- a/Master/texmf-dist/tex/context/base/type-one.tex
+++ b/Master/texmf-dist/tex/context/base/m-pstricks.tex
@@ -1,8 +1,8 @@
%D \module
-%D [ file=type-one,
-%D version=2007.07.30,
-%D title=\CONTEXT\ Typescript Macros,
-%D subtitle=Type One Definitions,
+%D [ file=m-pstricks,
+%D version=1997.01.15,
+%D title=\CONTEXT\ Extra Modules,
+%D subtitle=\PSTRICKS\ Connections,
%D author=Hans Hagen,
%D date=\currentdate,
%D copyright={PRAGMA / Hans Hagen \& Ton Otten}]
@@ -11,6 +11,6 @@
%C therefore copyrighted by \PRAGMA. See mreadme.pdf for
%C details.
-\loadmarkfile{type-one}
+\loadmarkfile{m-pstricks}
\endinput
diff --git a/Master/texmf-dist/tex/context/base/m-punk.mkiv b/Master/texmf-dist/tex/context/base/m-punk.mkiv
new file mode 100644
index 00000000000..65bf0397419
--- /dev/null
+++ b/Master/texmf-dist/tex/context/base/m-punk.mkiv
@@ -0,0 +1,243 @@
+%D \module
+%D [ file=m-punk,
+%D version=2008.04.15,
+%D title=\CONTEXT\ Modules,
+%D subtitle=Punk 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.
+
+\ifx\luaversion\undefined \endinput \fi
+
+% At some point the font generation code will move into the
+% ConTeXt MkIV kernel.
+
+\startluacode
+do
+ local concat = table.concat
+ local chardata = characters.data
+ local fontdata = fonts.ids
+
+ fonts.mp = fonts.mp or { }
+
+ fonts.mp.version = fonts.mp.version or 1.11
+ fonts.mp.inline = true
+ fonts.mp.cache = containers.define("fonts", "mp", fonts.mp.version, true)
+
+ metapost.characters = metapost.characters or { }
+
+-- todo: use table share as in otf
+
+ local characters, descriptions = { }, { }
+ local factor, l, n, w, h, d, total, variants = 100, { }, 0, 0, 0, 0, 0, 0, true
+
+ -- A next version of mplib will provide the tfm font information which
+ -- gives better glyph dimensions, plus additional kerning information.
+
+ local flusher = {
+ startfigure = function(chrnum,llx,lly,urx,ury)
+ l, n = { }, chrnum
+ w, h, d = urx - llx, ury, -lly
+ total = total + 1
+ inline = fonts.mp.inline
+ end,
+ flushfigure = function(t)
+ for i=1, #t do
+ l[#l+1] = t[i]
+ end
+ end,
+ stopfigure = function()
+ local cd = chardata[n]
+ if inline then
+ descriptions[n] = {
+ -- unicode = n,
+ name = cd and cd.adobename,
+ width = w*100,
+ height = h*100,
+ depth = d*100,
+ boundingbox = { 0, -d, w, h },
+ }
+ characters[n] = {
+ commands = { -- todo: xforms, should happen in backend
+ { "special", "pdf: " .. concat(l," ") },
+ }
+ }
+ else
+ descriptions[n] = {
+ -- unicode = n,
+ name = cd and cd.adobename,
+ width = w*100,
+ height = h*100,
+ depth = d*100,
+ boundingbox = { 0, -d, w, h },
+ }
+ characters[n] = {
+ commands = {
+ { "image", { stream = concat(l," "), bbox = { 0, -d*65536, w*65536, h*65536 } } },
+ }
+ }
+ end
+ end
+ }
+
+ metapost.characters.instances = metapost.characters.instances or 10
+
+ function metapost.characters.process(mpxformat, name, instances, scalefactor)
+ statistics.starttiming(metapost.characters)
+ scalefactor = scalefactor or 1
+ instances = instances or metapost.characters.instances or 10
+ local fontname = file.removesuffix(file.basename(name))
+ local hash = file.robustname(string.format("%s %05i %03i", fontname, scalefactor*1000, instances))
+ local lists = containers.read(fonts.mp.cache(), hash)
+ if not lists then
+ statistics.starttiming(flusher)
+ -- we can use a format per font
+ local data = io.loaddata(resolvers.find_file(name))
+ metapost.reset(mpxformat)
+ metapost.set_outer_color(2) -- no outer color and no reset either
+ lists = { }
+ for i=1,instances do
+ list = { }
+ characters, descriptions = { }, { }
+ metapost.process(
+ mpxformat,
+ {
+ "randomseed := " .. i*10 .. ";",
+ "scale_factor := " .. scalefactor .. " ;",
+ data
+ },
+ false,
+ flusher
+ )
+ lists[i] = {
+ designsize = 655360,
+ name = string.format("%s-%03i",hash,i),
+ parameters = {
+ slant = 0,
+ space = 333 * scalefactor,
+ space_stretch = 166.5 * scalefactor,
+ space_shrink = 111 * scalefactor,
+ x_height = 431 * scalefactor,
+ quad =1000 * scalefactor,
+ extra_space = 0
+ },
+ ["type"] = "virtual",
+ characters = characters,
+ descriptions = descriptions,
+ -- embedding = "subset",
+ -- mkiv:
+ spacer = "space",
+ unit = 1000,
+ shared = { },
+ unique = { },
+ }
+ end
+ metapost.reset(mpxformat) -- saves memory
+ lists = containers.write(fonts.mp.cache(), hash, lists)
+ statistics.stoptiming(flusher)
+ end
+ variants = variants + #lists
+ statistics.stoptiming(metapost.characters)
+ return lists
+ end
+
+ function fonts.vf.aux.combine.commands.metafont(g,v)
+ local size = g.specification.size
+ local data = metapost.characters.process(v[2],v[3],v[4],size/655360)
+ local list, t = { }, { }
+ for d=1,#data do
+ t = data[d]
+ t = fonts.tfm.scale(t, -1000)
+ local id = font.nextid()
+ t.fonts = { { id = id } }
+ fontdata[id] = t
+ fonts.vf.aux.compose_characters(t)
+ list[d] = font.define(t)
+ end
+ for k=1,#t do
+ g[k] = t[k] -- kind of replace, when not present, make nil
+ end
+ g.virtualized = true
+ g.variants = list
+ end
+
+ fonts.define.methods.install( "punk", {
+ { "metafont", "mfplain", "punkfont.mp", 10 },
+ } )
+
+ cases.actions[99] = function(current)
+ local used = fontdata[current.font].variants
+ if used then
+ local f = math.random(1,#used)
+ current.font = used[f]
+ return current, true
+ else
+ return current, false
+ end
+ end
+
+ metapost.characters.flusher = flusher
+
+ statistics.register("metapost font generation", function()
+ local time = statistics.elapsedtime(flusher)
+ if total > 0 then
+ return string.format("%i glyphs, %.3f seconds runtime, %i glyphs/second", total, time, total/time)
+ else
+ return string.format("%i glyphs, %.3f seconds runtime", total, time)
+ end
+ end)
+
+ statistics.register("metapost font loading",function()
+ local time = statistics.elapsedtime(metapost.characters)
+ if variants > 0 then
+ return string.format("%.3f seconds, %i instances, %0.3f instances/second", time, variants, variants/time)
+ else
+ return string.format("%.3f seconds, %i instances", time, variants)
+ end
+ end)
+
+end
+\stopluacode
+
+\unexpanded\def\EnableRandomPunk {\setcharactercasing[99]}
+\unexpanded\def\RandomPunk {\groupedcommand\EnableRandomPunk\donothing}
+\unexpanded\def\StartRandomPunk {\begingroup\EnableRandomPunk}
+\unexpanded\def\StopRandomPunk {\endgroup}
+
+\starttypescript [serif] [punk] [default]
+ \setups[font:fallback:serif] % no style variants yet
+ \definefontsynonym [Serif] [demo@punk]
+\stoptypescript
+
+\starttypescript [punk]
+ \definetypeface [punk] [rm] [serif] [punk] [default]
+\stoptypescript
+
+\definefontfeature[punknova][mode=node,script=latn,rand=yes,kern=yes,liga=yes,tlig=yes]
+
+\starttypescript [serif] [punknova]
+ \setups[font:fallback:serif] % no style variants yet, actually it's a sans
+ \definefontsynonym [Serif] [file:punknova] [features=punknova]
+\stoptypescript
+
+\starttypescript [punknova]
+ \definetypeface [punknova] [rm] [serif] [punknova] [default]
+\stoptypescript
+
+\endinput
+
+\usetypescript[punk]
+
+\setupbodyfont[punk,14pt]
+
+\starttext
+ \definedfont[demo@punk at 10pt]hello world\par
+ \definedfont[demo@punk at 12pt]hello world\par
+ \definedfont[demo@punk at 16pt]hello world\par
+ \definedfont[demo@punk at 20pt]hello world\par
+\stoptext
+
diff --git a/Master/texmf-dist/tex/context/base/m-punk.tex b/Master/texmf-dist/tex/context/base/m-punk.tex
index 3b1baa75b77..fe7ec85ccdb 100644
--- a/Master/texmf-dist/tex/context/base/m-punk.tex
+++ b/Master/texmf-dist/tex/context/base/m-punk.tex
@@ -1,232 +1,3 @@
-%D \module
-%D [ file=m-punk,
-%D version=2008.04.15,
-%D title=\CONTEXT\ Modules,
-%D subtitle=Punk 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.
-
-\ifx\luaversion\undefined \endinput \fi
-
-% At some point the font generation code will move into the
-% ConTeXt MkIV kernel.
-
-\startluacode
-do
- local concat = table.concat
- local chardata = characters.data
- local fontdata = fonts.ids
-
- fonts.mp = fonts.mp or { }
-
- fonts.mp.version = fonts.mp.version or 1.11
- fonts.mp.inline = true
- fonts.mp.cache = containers.define("fonts", "mp", fonts.mp.version, true)
-
- metapost.characters = metapost.characters or { }
-
--- todo: use table share as in otf
-
- local characters, descriptions = { }, { }
- local factor, l, n, w, h, d, total, variants = 100, { }, 0, 0, 0, 0, 0, 0, true
-
- -- A next version of mplib will provide the tfm font information which
- -- gives better glyph dimensions, plus additional kerning information.
-
- local flusher = {
- startfigure = function(chrnum,llx,lly,urx,ury)
- l, n = { }, chrnum
- w, h, d = urx - llx, ury, -lly
- total = total + 1
- inline = fonts.mp.inline
- end,
- flushfigure = function(t)
- for i=1, #t do
- l[#l+1] = t[i]
- end
- end,
- stopfigure = function()
- local cd = chardata[n]
- if inline then
- descriptions[n] = {
- -- unicode = n,
- name = cd and cd.adobename,
- width = w*100,
- height = h*100,
- depth = d*100,
- boundingbox = { 0, -d, w, h },
- }
- characters[n] = {
- commands = { -- todo: xforms, should happen in backend
- { "special", "pdf: " .. concat(l," ") },
- }
- }
- else
- descriptions[n] = {
- -- unicode = n,
- name = cd and cd.adobename,
- width = w*100,
- height = h*100,
- depth = d*100,
- boundingbox = { 0, -d, w, h },
- }
- characters[n] = {
- commands = {
- { "image", { stream = concat(l," "), bbox = { 0, -d*65536, w*65536, h*65536 } } },
- }
- }
- end
- end
- }
-
- metapost.characters.instances = metapost.characters.instances or 10
-
- function metapost.characters.process(mpxformat, name, instances, scalefactor)
- statistics.starttiming(metapost.characters)
- scalefactor = scalefactor or 1
- instances = instances or metapost.characters.instances or 10
- local fontname = file.removesuffix(file.basename(name))
- local hash = file.robustname(string.format("%s %05i %03i", fontname, scalefactor*1000, instances))
- local lists = containers.read(fonts.mp.cache(), hash)
- if not lists then
- statistics.starttiming(flusher)
- -- we can use a format per font
- local data = io.loaddata(resolvers.find_file(name))
- metapost.reset(mpxformat)
- metapost.set_outer_color(2) -- no outer color and no reset either
- lists = { }
- for i=1,instances do
- list = { }
- characters, descriptions = { }, { }
- metapost.process(
- mpxformat,
- {
- "randomseed := " .. i*10 .. ";",
- "scale_factor := " .. scalefactor .. " ;",
- data
- },
- false,
- flusher
- )
- lists[i] = {
- designsize = 655360,
- name = string.format("%s-%03i",hash,i),
- parameters = {
- slant = 0,
- space = 333 * scalefactor,
- space_stretch = 166.5 * scalefactor,
- space_shrink = 111 * scalefactor,
- x_height = 431 * scalefactor,
- quad =1000 * scalefactor,
- extra_space = 0
- },
- ["type"] = "virtual",
- characters = characters,
- descriptions = descriptions,
- -- embedding = "subset",
- -- mkiv:
- spacer = "space",
- unit = 1000,
- shared = { },
- unique = { },
- }
- end
- metapost.reset(mpxformat) -- saves memory
- lists = containers.write(fonts.mp.cache(), hash, lists)
- statistics.stoptiming(flusher)
- end
- variants = variants + #lists
- statistics.stoptiming(metapost.characters)
- return lists
- end
-
- function fonts.vf.aux.combine.commands.metafont(g,v)
- local size = g.specification.size
- local data = metapost.characters.process(v[2],v[3],v[4],size/655360)
- local list, t = { }, { }
- for d=1,#data do
- t = data[d]
- t = fonts.tfm.scale(t, -1000)
- local id = font.nextid()
- t.fonts = { { id = id } }
- fontdata[id] = t
- fonts.vf.aux.compose_characters(t)
- list[d] = font.define(t)
- end
- for k, v in pairs(t) do
- g[k] = v -- kind of replace, when not present, make nil
- end
- g.virtualized = true
- g.variants = list
- end
-
- fonts.define.methods.install( "punk", {
- { "metafont", "mfplain", "punkfont.mp", 10 },
- } )
-
- cases.actions[99] = function(current)
- local used = fontdata[current.font].variants
- if used then
- local f = math.random(1,#used)
- current.font = used[f]
- return current, true
- else
- return current, false
- end
- end
-
- metapost.characters.flusher = flusher
-
- statistics.register("metapost font generation", function()
- local time = statistics.elapsedtime(flusher)
- if total > 0 then
- return string.format("%i glyphs, %.3f seconds runtime, %i glyphs/second", total, time, total/time)
- else
- return string.format("%i glyphs, %.3f seconds runtime", total, time)
- end
- end)
-
- statistics.register("metapost font loading",function()
- local time = statistics.elapsedtime(metapost.characters)
- if variants > 0 then
- return string.format("%.3f seconds, %i instances, %0.3f instances/second", time, variants, variants/time)
- else
- return string.format("%.3f seconds, %i instances", time, variants)
- end
- end)
-
-end
-\stopluacode
-
-\unexpanded\def\EnableRandomPunk {\setcharactercasing[99]}
-\unexpanded\def\RandomPunk {\groupedcommand\EnableRandomPunk\donothing}
-\unexpanded\def\StartRandomPunk {\begingroup\EnableRandomPunk}
-\unexpanded\def\StopRandomPunk {\endgroup}
-
-\starttypescript [serif] [punk] [default]
- \setups[font:fallback:serif] % no style variants yet
- \definefontsynonym [Serif] [demo@punk]
-\stoptypescript
-
-\starttypescript [punk]
- \definetypeface [punk] [rm] [serif] [punk] [default]
-\stoptypescript
-
-\endinput
-
-\usetypescript[punk]
-
-\setupbodyfont[punk,14pt]
-
-\starttext
- \definedfont[demo@punk at 10pt]hello world\par
- \definedfont[demo@punk at 12pt]hello world\par
- \definedfont[demo@punk at 16pt]hello world\par
- \definedfont[demo@punk at 20pt]hello world\par
-\stoptext
+% this file will disasppear but we need it as it is still in tex live
+\loadmarkfile{m-punk}
diff --git a/Master/texmf-dist/tex/context/base/m-steps.mkii b/Master/texmf-dist/tex/context/base/m-steps.mkii
new file mode 100644
index 00000000000..3e1f86312de
--- /dev/null
+++ b/Master/texmf-dist/tex/context/base/m-steps.mkii
@@ -0,0 +1,83 @@
+%D \module
+%D [ file=m-steps,
+%D version=2001.05.28,
+%D title=\CONTEXT\ Modules,
+%D subtitle=Step Charts \& Tables,
+%D author=Hans Hagen,
+%D date=\currentdate,
+%D copyright={PRAGMA ADE / 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 The \XML\ interface:
+
+\unprotect
+
+\defineXMLdirective [stepchart] [charts] \setupSTEPcharts
+\defineXMLdirective [stepchart] [cells] \setupSTEPcells
+\defineXMLdirective [stepchart] [texts] \setupSTEPtexts
+\defineXMLdirective [stepchart] [lines] \setupSTEPlines
+
+\defineXMLdirective [steptable] [tables] \setupSTEPtables
+\defineXMLdirective [steptable] [cells] \setupSTEPcells
+\defineXMLdirective [steptable] [texts] \setupSTEPtexts
+\defineXMLdirective [steptable] [lines] \setupSTEPlines
+
+\defineXMLpickup[stepchart][@@STPC]
+ {\bgroup
+ \defineXMLpush[top]%
+ \defineXMLpush[bot]%
+ \defineXMLenvironment[lines][@@STEL]
+ {\expanded{\startlines[\theXMLarguments{@@STEL}]}}
+ {\stoplines}%
+ \defineXMLenvironment[cells][@@STEC]
+ {\XMLerase{top}\XMLerase{bot}}
+ {\expanded{\cells[\theXMLarguments{@@STEC}]{\XMLpop{top}}{\XMLpop{bot}}}}%
+ \defineXMLenvironment[texts][@@STET]
+ {\XMLerase{top}\XMLerase{bot}}
+ {\expanded{\texts[\theXMLarguments{@@STET}]{\XMLpop{top}}{\XMLpop{bot}}}}%
+ \defineXMLenvironmentpush[cell][@@STEC]
+ {\XMLerase{cell}}
+ {\expanded{\cell [\theXMLarguments{@@STEC}]{\XMLpop{cell}}}}%
+ \defineXMLenvironmentpush [text] [@@STET]
+ {\XMLerase{text}}
+ {\expanded{\text [\theXMLarguments{@@STET}]{\XMLpop{text}}}}%
+ \expanded{\startSTEPchart[\theXMLarguments{@@STPC}]}}
+ {\stopSTEPchart
+ \egroup}
+
+\defineXMLpickup[steptable][@@STPT]
+ {\bgroup
+ \defineXMLenvironment[lines][@@STEL]
+ {\expanded{\startlines[\theXMLarguments{@@STEL}]}}
+ {\stoplines}%
+ \defineXMLargument[cell][@@STEC]
+ {\expanded{\cell[\theXMLarguments{@@STEC}]}}%
+ \defineXMLargument[text][@@STET]
+ {\expanded{\text[\theXMLarguments{@@STET}]}}%
+ \defineXMLargument[prep]
+ {\prep}%
+ \expanded{\startSTEPtable[\theXMLarguments{@@STPT}]}}
+ {\stopSTEPtable
+ \egroup}
+
+\defineXMLpickup[stepaligntable][@@STPT]
+ {\bgroup
+ \defineXMLenvironment[lines][@@STEL]
+ {\expanded{\setupSTEPlines[\theXMLarguments{@@STEL}]}}
+ {}%
+ \defineXMLpush[c1]\defineXMLpush[c2]\defineXMLpush[c3]%
+ \defineXMLenvironment[cells][@@STEC]
+ {\XMLerase{c1}\XMLerase{c1}\XMLerase{c3}}
+ {\expanded{\cells[\theXMLarguments{@@STEC}]{\XMLpop{c1}}{\XMLpop{c2}}{\XMLpop{c3}}}}%
+ \defineXMLargument[text][@@STET]
+ {\expanded{\text[\theXMLarguments{@@STET}]}}%
+ \defineXMLargument[prep]
+ {\prep}%
+ \expanded{\startSTEPaligntable[\theXMLarguments{@@STPT}]}}
+ {\stopSTEPaligntable
+ \egroup}
+
+\protect \endinput
diff --git a/Master/texmf-dist/tex/context/base/m-steps.mkiv b/Master/texmf-dist/tex/context/base/m-steps.mkiv
new file mode 100644
index 00000000000..9bb56c53228
--- /dev/null
+++ b/Master/texmf-dist/tex/context/base/m-steps.mkiv
@@ -0,0 +1,20 @@
+%D \module
+%D [ file=m-steps,
+%D version=2001.05.28,
+%D title=\CONTEXT\ Modules,
+%D subtitle=Step Charts \& Tables,
+%D author=Hans Hagen,
+%D date=\currentdate,
+%D copyright={PRAGMA ADE / 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 The \XML\ interface:
+
+\unprotect
+
+\writestatus\m!systems{The steps mkiv xml interface is not yet defined!}
+
+\protect \endinput
diff --git a/Master/texmf-dist/tex/context/base/m-steps.tex b/Master/texmf-dist/tex/context/base/m-steps.tex
index 1e2f5d97d62..1f6a374033c 100644
--- a/Master/texmf-dist/tex/context/base/m-steps.tex
+++ b/Master/texmf-dist/tex/context/base/m-steps.tex
@@ -116,18 +116,6 @@
%D ...
-\defineXMLdirective [stepchart] [charts] \setupSTEPcharts
-\defineXMLdirective [stepchart] [cells] \setupSTEPcells
-\defineXMLdirective [stepchart] [texts] \setupSTEPtexts
-\defineXMLdirective [stepchart] [lines] \setupSTEPlines
-
-\defineXMLdirective [steptable] [tables] \setupSTEPtables
-\defineXMLdirective [steptable] [cells] \setupSTEPcells
-\defineXMLdirective [steptable] [texts] \setupSTEPtexts
-\defineXMLdirective [steptable] [lines] \setupSTEPlines
-
-%D ...
-
\presetlocalframed[\@@STPF]
\def\@@stepcell#1%
@@ -664,31 +652,6 @@
\@@STELalternative, get_step_chart_bot_line(#1,#2),
\@@STELrulethickness, \MPcolor{\@@STELcolor} ) )}
-%D \XML\ coupling.
-
-\defineXMLpickup[stepchart][@@STPC]
- {\bgroup
- \defineXMLpush[top]%
- \defineXMLpush[bot]%
- \defineXMLenvironment[lines][@@STEL]
- {\expanded{\startlines[\theXMLarguments{@@STEL}]}}
- {\stoplines}%
- \defineXMLenvironment[cells][@@STEC]
- {\XMLerase{top}\XMLerase{bot}}
- {\expanded{\cells[\theXMLarguments{@@STEC}]{\XMLpop{top}}{\XMLpop{bot}}}}%
- \defineXMLenvironment[texts][@@STET]
- {\XMLerase{top}\XMLerase{bot}}
- {\expanded{\texts[\theXMLarguments{@@STET}]{\XMLpop{top}}{\XMLpop{bot}}}}%
- \defineXMLenvironmentpush[cell][@@STEC]
- {\XMLerase{cell}}
- {\expanded{\cell [\theXMLarguments{@@STEC}]{\XMLpop{cell}}}}%
- \defineXMLenvironmentpush [text] [@@STET]
- {\XMLerase{text}}
- {\expanded{\text [\theXMLarguments{@@STET}]{\XMLpop{text}}}}%
- \expanded{\startSTEPchart[\theXMLarguments{@@STPC}]}}
- {\stopSTEPchart
- \egroup}
-
%D Step tables are the vertical counterpart of stepcharts.
\newcounter\currentsteptable
@@ -846,38 +809,6 @@
\@@STELalternative, get_step_table_line(\cellcounter),
\@@STELrulethickness, \MPcolor{\@@STELcolor} ) )}
-\defineXMLpickup[steptable][@@STPT]
- {\bgroup
- \defineXMLenvironment[lines][@@STEL]
- {\expanded{\startlines[\theXMLarguments{@@STEL}]}}
- {\stoplines}%
- \defineXMLargument[cell][@@STEC]
- {\expanded{\cell[\theXMLarguments{@@STEC}]}}%
- \defineXMLargument[text][@@STET]
- {\expanded{\text[\theXMLarguments{@@STET}]}}%
- \defineXMLargument[prep]
- {\prep}%
- \expanded{\startSTEPtable[\theXMLarguments{@@STPT}]}}
- {\stopSTEPtable
- \egroup}
-
-\defineXMLpickup[stepaligntable][@@STPT]
- {\bgroup
- \defineXMLenvironment[lines][@@STEL]
- {\expanded{\setupSTEPlines[\theXMLarguments{@@STEL}]}}
- {}%
- \defineXMLpush[c1]\defineXMLpush[c2]\defineXMLpush[c3]%
- \defineXMLenvironment[cells][@@STEC]
- {\XMLerase{c1}\XMLerase{c1}\XMLerase{c3}}
- {\expanded{\cells[\theXMLarguments{@@STEC}]{\XMLpop{c1}}{\XMLpop{c2}}{\XMLpop{c3}}}}%
- \defineXMLargument[text][@@STET]
- {\expanded{\text[\theXMLarguments{@@STET}]}}%
- \defineXMLargument[prep]
- {\prep}%
- \expanded{\startSTEPaligntable[\theXMLarguments{@@STPT}]}}
- {\stopSTEPaligntable
- \egroup}
-
\protect \endinput
% A simple paragraph-flow test:
diff --git a/Master/texmf-dist/tex/context/base/m-timing.tex b/Master/texmf-dist/tex/context/base/m-timing.tex
index f6b0348c808..f02a900871b 100644
--- a/Master/texmf-dist/tex/context/base/m-timing.tex
+++ b/Master/texmf-dist/tex/context/base/m-timing.tex
@@ -36,7 +36,7 @@
\ctxloadluafile{trac-tim}{}
\startluacode
-local progress = goodies.progress
+local progress = plugins.progress
function progress.show(filename,parameters,nodes,other)
for n, name in pairs(parameters or progress.parameters(filename)) do
@@ -51,16 +51,16 @@ end
% \everyfirstshipout
\startnotmode[no-timing]
- \appendtoks\ctxlua{goodies.progress.store()}\to\everystarttext
- \appendtoks\ctxlua{goodies.progress.store()}\to\everyshipout
- \ctxlua{main.register_stop_actions(function() goodies.progress.save() end)}
+ \appendtoks\ctxlua{plugins.progress.store()}\to\everystarttext
+ \appendtoks\ctxlua{plugins.progress.store()}\to\everyshipout
+ \ctxlua{main.register_stop_actions(function() plugins.progress.save() end)}
\stopnotmode
\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(goodies.progress.path("#1","#2"))} ;
+ p := \ctxlua{tex.sprint(plugins.progress.path("#1","#2"))} ;
% p := p shifted -llcorner p ;
if bbwidth(p) > 1 :
h := 100 ; w := 2 * h ;
@@ -71,7 +71,7 @@ end
draw b withcolor \MPcolor{usage:frame} ;
draw p withcolor \MPcolor{usage:line} ;
if ("#3" <> "") and ("#3" <> "#2") :
- q := \ctxlua{tex.sprint(goodies.progress.path("#1","#3"))} ;
+ q := \ctxlua{tex.sprint(plugins.progress.path("#1","#3"))} ;
% q := q shifted -llcorner q ;
if bbwidth(q) > 1 :
q := q xstretched w ;
@@ -87,16 +87,16 @@ end
\startlinecorrection
\box\scratchbox \endgraf
\hbox to \scratchdimen{\tttf\strut\detokenize{#2}\hss
- min:\ctxlua{tex.sprint(goodies.progress.bot("#1","\detokenize{#2}"))}, %
- max:\ctxlua{tex.sprint(goodies.progress.top("#1","\detokenize{#2}"))}, %
- pages:\ctxlua{tex.sprint(goodies.progress.pages("#1"))}%
+ min:\ctxlua{tex.sprint(plugins.progress.bot("#1","\detokenize{#2}"))}, %
+ max:\ctxlua{tex.sprint(plugins.progress.top("#1","\detokenize{#2}"))}, %
+ pages:\ctxlua{tex.sprint(plugins.progress.pages("#1"))}%
}%
\stoplinecorrection
\fi}
-\def\LoadUsage #1{\ctxlua{goodies.progress.convert("#1")}}
-\def\ShowUsage #1{\ctxlua{goodies.progress.show("#1",nil,nil,"elapsed_time")}}
-\def\ShowMemoryUsage#1{\ctxlua{goodies.progress.show("#1",nil,{}, "elapsed_time")}}
-\def\ShowNodeUsage #1{\ctxlua{goodies.progress.show("#1",{},nil, "elapsed_time")}}
+\def\LoadUsage #1{\ctxlua{plugins.progress.convert("#1")}}
+\def\ShowUsage #1{\ctxlua{plugins.progress.show("#1",nil,nil,"elapsed_time")}}
+\def\ShowMemoryUsage#1{\ctxlua{plugins.progress.show("#1",nil,{}, "elapsed_time")}}
+\def\ShowNodeUsage #1{\ctxlua{plugins.progress.show("#1",{},nil, "elapsed_time")}}
\endinput
diff --git a/Master/texmf-dist/tex/context/base/m-track.tex b/Master/texmf-dist/tex/context/base/m-trackers.tex
index cfcbbabffbe..cfcbbabffbe 100644
--- a/Master/texmf-dist/tex/context/base/m-track.tex
+++ b/Master/texmf-dist/tex/context/base/m-trackers.tex
diff --git a/Master/texmf-dist/tex/context/base/m-translate.tex b/Master/texmf-dist/tex/context/base/m-translate.tex
index a9601bdd587..9c550eca705 100644
--- a/Master/texmf-dist/tex/context/base/m-translate.tex
+++ b/Master/texmf-dist/tex/context/base/m-translate.tex
@@ -44,14 +44,14 @@
end
function translators.reset(s)
- resolvers.filters.user_translator = nil
+ resolvers.install_text_filter("user",nil)
list, compiled = nil, nil
end
function translators.enable(s)
- resolvers.filters.user_translator = translators.translate
+ resolvers.install_text_filter("user",translators.translate)
end
function translators.disable(s)
- resolvers.filters.user_translator = nil
+ resolvers.install_text_filter("user",nil)
end
\stopluacode
diff --git a/Master/texmf-dist/tex/context/base/math-ali.mkiv b/Master/texmf-dist/tex/context/base/math-ali.mkiv
index f98eb11dfed..31f71219a44 100644
--- a/Master/texmf-dist/tex/context/base/math-ali.mkiv
+++ b/Master/texmf-dist/tex/context/base/math-ali.mkiv
@@ -19,7 +19,7 @@
%D \MKIV\ code is not gathered in files with the same name.
%D \macros
-%D {\definemathalignment, setupmathalignment, startmathalignment}
+%D {definemathalignment, setupmathalignment, startmathalignment}
%D
%D Modules may provide additional alignment features. The following
%D mechanisms are provided by the core.
@@ -153,7 +153,7 @@
%D Here we implement the user interface part.
-\def\setupmathalignment
+\unexpanded\def\setupmathalignment
{\dodoubleempty\dosetupmathalignment}
\def\dosetupmathalignment[#1][#2]%
@@ -240,7 +240,7 @@
{\finishalignno
\popmacro\doalignNC}
-\def\definemathalignment
+\unexpanded\def\definemathalignment
{\dodoubleempty\dodefinemathalignment}
\def\dodefinemathalignment[#1]% [#2]%
@@ -440,7 +440,7 @@
%D
%D Another wish \unknown
-\def\setupmathcases
+\unexpanded\def\setupmathcases
{\dodoubleempty\dosetupmathcases}
\def\dosetupmathcases[#1][#2]%
@@ -500,7 +500,7 @@
\mathcasesparameter\c!right
\endgroup}
-\def\definemathcases
+\unexpanded\def\definemathcases
{\dodoubleempty\dodefinemathcases}
\def\dodefinemathcases[#1]% [#2]%
@@ -556,7 +556,7 @@
%D
%D Yet another one \unknown
-\def\setupmathmatrix
+\unexpanded\def\setupmathmatrix
{\dodoubleempty\dosetupmathmatrix}
\def\dosetupmathmatrix[#1][#2]%
@@ -606,18 +606,18 @@
\buildmathmatrix
\halign \@EA \bgroup\the\scratchtoks \crcr}
-\def\definemathmatrix
+\unexpanded\def\definemathmatrix
{\dodoubleempty\dodefinemathmatrix}
\def\dodefinemathmatrix[#1]% [#2]%
- {\setvalue{\e!start#1}{\dodoubleempty\dostartmathmatrix[#1]}%
- \setvalue{\e!stop #1}{\dostopmathmatrix}%
+ {\setuvalue{\e!start#1}{\dodoubleempty\dostartmathmatrix[#1]}%
+ \setuvalue{\e!stop #1}{\dostopmathmatrix}%
\setupmathmatrix[#1]}% [#2]
\definemathmatrix[matrix]
\definemathmatrix[\v!mathmatrix]
-\def\dodomatrixNC
+\unexpanded\def\dodomatrixNC
{\gdef\domatrixNC{\endmath&}}
\def\installmathmatrixhandler#1#2%
@@ -806,11 +806,11 @@
%D
%D Just a handy keystroke safer:
-\def\startmatrices
+\unexpanded\def\startmatrices
{\begingroup
\setupmathmatrix}
-\def\stopmatrices
+\unexpanded\def\stopmatrices
{\endgroup}
%D \startbuffer
@@ -849,7 +849,7 @@
%D \stopformula
%D \stopbuffer
%D
-%D \typebuffer \getbuffer
+%D \typebuffer % does not run well: \getbuffer
%D \macros
%D {startintertext}
@@ -858,7 +858,7 @@
%D
%D {\em example code}
-\def\startintertext#1\stopintertext
+\unexpanded\def\startintertext#1\stopintertext
{\noalign{\dointertext{#1}}}
\def\intertext#1%
@@ -888,7 +888,7 @@
% %D \stopformula
% %D \stoptyping
-% \def\startsubstack
+% \unexpanded\def\startsubstack
% {\begingroup
% \null
% \vcenter\bgroup
@@ -905,7 +905,7 @@
% \everycr\emptytoks
% \halign\bgroup\hfil$\scriptstyle\mathstrut##$\hfil\crcr}
-% \def\stopsubstack
+% \unexpanded\def\stopsubstack
% {\crcr
% \egroup
% \popmacro\domatrixNC
@@ -940,9 +940,11 @@
%D \text{ and }
%D \sum_{\scriptstyle a \atop \scriptstyle}
%D \stopformula
+%D \stopbuffer
+%D
%D \typebuffer which gives \getbuffer
-\def\startsubstack
+\unexpanded\def\startsubstack
{\begingroup
\vcenter\bgroup
\baselineskip\mathstacktotal
@@ -960,7 +962,7 @@
\everycr\emptytoks
\halign\bgroup\hfil$\scriptstyle##$\hfil\crcr}
-\def\stopsubstack
+\unexpanded\def\stopsubstack
{\crcr
\egroup
\egroup
@@ -1042,6 +1044,241 @@
{\preparebinrel{#2}%
\currentbinrel{\mathop{\kern\zeropoint#2}\limits_{#1}}}
+%D The following code comes from \type {math-str.mkiv}.
+
+%D Here we implement a basic math alignment mechanism. Numbers
+%D are also handled. The macros \type {\startinnermath} and
+%D \type {\stopinnermath} can be overloaded in specialized
+%D modules.
+
+\unexpanded\def\startinnermath
+ {\getvalue{\e!start\??fm\formulaparameter\c!align}}
+
+\unexpanded\def\stopinnermath
+ {\getvalue{\e!stop \??fm\formulaparameter\c!align}}
+
+\def\mathinnerstrut
+ {\doif{\formulaparameter\c!strut}\v!yes\strut}
+
+\long\unexpanded\def\defineinnermathhandler#1#2#3%
+ {\setvalue{\e!start\??fm#1}{#2}%
+ \setvalue{\e!stop \??fm#1}{#3}}
+
+\newif\iftracemath
+
+\def\mathhbox
+ {\iftracemath\ruledhbox\else\hbox\fi}
+
+\chardef\mathraggedstatus=0 % normal left center right
+\chardef\mathnumberstatus=0 % nothing normal shift_right
+\let\mathnumbercorrection\!!zeropoint
+
+\unexpanded\def\startmathbox#1%
+ {\hsize\displaywidth
+ \global\chardef\mathnumberstatus\plusone
+ \chardef\mathraggedstatus#1\relax
+ \let\mathnumbercorrection\!!zeropoint
+ \global\let\@eqno \empty \def\eqno {\gdef\@eqno }%
+ \global\let\@leqno\empty \def\leqno{\gdef\@leqno}%
+ % added
+ \let\normalreqno\eqno
+ \let\normalleqno\leqno
+ % added
+ \doplaceformulanumber
+ \setbox\scratchbox\mathhbox to \displaywidth\bgroup
+ \mathinnerstrut
+ $%
+ \displaystyle
+ \ifcase\mathraggedstatus\or\hfill\or\hfill\fi}
+
+\def\llappedmathno
+ {\ifcase\mathraggedstatus\or
+ \@eqno
+ \or
+ \llap{\@eqno}%
+ \or
+ \llap{\@eqno}%
+ \fi}
+
+\def\rlappedmathno
+ {\ifcase\mathraggedstatus\or
+ \rlap{\@leqno}%
+ \or
+ \rlap{\@leqno}%
+ \or
+ \@leqno
+ \fi}
+
+\unexpanded\def\stopmathbox
+ {$%
+ \ifcase\mathraggedstatus\or\or\hfill\or\hfill\fi
+ \egroup
+ \setbox0\hbox{\unhcopy\scratchbox}%
+ \scratchdimen\wd0
+ \ifdim\scratchdimen>\displaywidth
+ \donetrue
+ \else
+ \donefalse
+ \fi
+ \hbox to \displaywidth\bgroup
+ \ifcase\mathnumberstatus
+ \box\scratchbox
+ \or
+ \ifx\@leqno\empty
+ \ifx\@eqno\empty
+ \box\scratchbox
+ \else
+ \ifdone
+ \vbox{\box\scratchbox\hbox to \displaywidth{\hss\llappedmathno}}%
+ \else
+ \hss\box\scratchbox\llappedmathno % hss makes room for number
+ \fi
+ \fi
+ \else
+ \ifdone
+ \vbox{\hbox to \displaywidth{\rlappedmathno\hss}\box\scratchbox}%
+ \else
+ \rlappedmathno\box\scratchbox\hss % hss makes room for number
+ \fi
+ \fi
+ \or
+ \hskip\mathnumbercorrection
+ \box\scratchbox
+ \hss
+ \else
+ \box\scratchbox
+ \fi
+ \egroup}
+
+\defineinnermathhandler\v!left {\startmathbox\plusone }{\stopmathbox}
+\defineinnermathhandler\v!middle {\startmathbox\plustwo }{\stopmathbox}
+\defineinnermathhandler\v!right {\startmathbox\plusthree}{\stopmathbox}
+\defineinnermathhandler\v!flushleft {\startmathbox\plusthree}{\stopmathbox}
+\defineinnermathhandler\v!center {\startmathbox\plustwo }{\stopmathbox}
+\defineinnermathhandler\v!flushright{\startmathbox\plusone }{\stopmathbox}
+
+%D [The examples below are in english and don't process in the
+%D documentation style, which will be english some day.]
+%D
+%D Normally a formula is centered, but in case you want to
+%D align it left or right, you can set up formulas to behave
+%D that way. Normally a formula will adapt is left indentation
+%D to the environment:
+%D
+%D \startbuffer
+%D \fakewords{20}{40}\epar
+%D \startitemize
+%D \item \fakewords{20}{40}\epar
+%D \placeformula \startformula \fakeformula \stopformula
+%D \item \fakewords{20}{40}\epar
+%D \stopitemize
+%D \fakewords{20}{40}\epar
+%D \stopbuffer
+%D
+%D % \getbuffer
+%D
+%D In the next examples we explicitly align formulas to the
+%D left (\type {\raggedleft}), center and right (\type
+%D {\raggedright}):
+%D
+%D \startbuffer
+%D \setupformulas[align=left]
+%D \startformula\fakeformula\stopformula
+%D \setupformulas[align=middle]
+%D \startformula\fakeformula\stopformula
+%D \setupformulas[align=right]
+%D \startformula\fakeformula\stopformula
+%D \stopbuffer
+%D
+%D \typebuffer
+%D
+%D Or in print:
+%D
+%D % {\getbuffer}
+%D
+%D With formula numbers these formulas look as follows:
+%D
+%D \startbuffer
+%D \setupformulas[align=left]
+%D \placeformula \startformula\fakeformula\stopformula
+%D \setupformulas[align=middle]
+%D \placeformula \startformula\fakeformula\stopformula
+%D \setupformulas[align=right]
+%D \placeformula \startformula\fakeformula\stopformula
+%D \stopbuffer
+%D
+%D % {\getbuffer}
+%D
+%D This was keyed in as:
+%D
+%D \typebuffer
+%D
+%D When tracing is turned on (\type {\tracemathtrue}) you can
+%D visualize the bounding box of the formula,
+%D
+%D % {\tracemathtrue\getbuffer}
+%D
+%D As you can see, the dimensions are the natural ones, but if
+%D needed you can force a normalized line:
+%D
+%D \startbuffer
+%D \setupformulas[strut=yes]
+%D \placeformula \startformula \fakeformula \stopformula
+%D \stopbuffer
+%D
+%D \typebuffer
+%D
+%D This time we get a more spacy result.
+%D
+%D % {\tracemathtrue\getbuffer}
+%D
+%D We will now show a couple of more settings and combinations
+%D of settings. In centered formulas, the number takes no space
+%D
+%D \startbuffer
+%D \setupformulas[align=middle]
+%D \startformula \fakeformula \stopformula
+%D \placeformula \startformula \fakeformula \stopformula
+%D \stopbuffer
+%D
+%D \typebuffer % {\tracemathtrue\getbuffer}
+%D
+%D You can influence the placement of the whole box with the
+%D parameters \type {leftmargin} and \type {rightmargin}.
+%D
+%D \startbuffer
+%D \setupformulas[align=right,leftmargin=3em]
+%D \startformula \fakeformula \stopformula
+%D \placeformula \startformula \fakeformula \stopformula
+%D
+%D \setupformulas[align=left,rightmargin=1em]
+%D \startformula \fakeformula \stopformula
+%D \placeformula \startformula \fakeformula \stopformula
+%D \stopbuffer
+%D
+%D \typebuffer % {\tracemathtrue\getbuffer}
+%D
+%D You can also inherit the margin from the environment.
+%D
+%D \startbuffer
+%D \setupformulas[align=right,margin=standard]
+%D \startformula \fakeformula \stopformula
+%D \placeformula \startformula \fakeformula \stopformula
+%D \stopbuffer
+%D
+%D \typebuffer % {\tracemathtrue\getbuffer}
+%D
+%D The distance between the formula and the number is only
+%D applied when the formula is left or right aligned.
+%D
+%D \startbuffer
+%D \setupformulas[align=left,distance=2em]
+%D \startformula \fakeformula \stopformula
+%D \placeformula \startformula \fakeformula \stopformula
+%D \stopbuffer
+%D
+%D \typebuffer % {\tracemathtrue\getbuffer}
+
\protect \endinput
% \placeformula \startformula[-] \startmatrix
diff --git a/Master/texmf-dist/tex/context/base/math-arr.mkiv b/Master/texmf-dist/tex/context/base/math-arr.mkiv
index 5c6cfc29445..389112b1694 100644
--- a/Master/texmf-dist/tex/context/base/math-arr.mkiv
+++ b/Master/texmf-dist/tex/context/base/math-arr.mkiv
@@ -202,7 +202,7 @@
%D \NC \tex{xrightleftharpoons } \NC \xrightleftharpoons [big] \NC \NR
%D \stoptable}
-\def\definematharrow
+\unexpanded\def\definematharrow
{\doquadrupleargument\dodefinematharrow}
\def\dodefinematharrow[#1][#2][#3][#4]% name type[none|both] template command
@@ -217,13 +217,13 @@
\def\redefinebotharrow#1#2#3% real dirty, this overload!
{\doifdefined{#1}
{\pushmacro\dohandlemtharrow
- \def\dohandlemtharrow[##1][##2]{\setvalue{#1}{\dohandlemtharrow[#2][##2]}}%
+ \def\dohandlemtharrow[##1][##2]{\setuvalue{#1}{\dohandlemtharrow[#2][##2]}}%
% == \def\dohandlemtharrow[##1][##2]{\dodefinebotharrow{#1}{#2}{##2}}%
\getvalue{#1}%
\popmacro\dohandlemtharrow}}
\def\dodefinebotharrow#1#2#3%
- {\setvalue{#1}{\dohandlemtharrow[#2][#3]}}
+ {\setuvalue{#1}{\dohandlemtharrow[#2][#3]}}
\def\dohandlemtharrow
{\dotripleempty\doxmtharrow}
@@ -281,34 +281,34 @@
%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}}
+\unexpanded\def\specrightarrowfill {\defaultmtharrowfill \relbar \relbar \rightarrow}
+\unexpanded\def\specleftarrowfill {\defaultmtharrowfill \leftarrow \relbar \relbar}
+
+\unexpanded\def\rightarrowfill {\specrightarrowfill \textstyle}
+\unexpanded\def\leftarrowfill {\specleftarrowfill \textstyle}
+
+\unexpanded\def\equalfill {\defaultmtharrowfill \Relbar \Relbar \Relbar}
+\unexpanded\def\Rightarrowfill {\defaultmtharrowfill \Relbar \Relbar \Rightarrow}
+\unexpanded\def\Leftarrowfill {\defaultmtharrowfill \Leftarrow \Relbar \Relbar}
+\unexpanded\def\Leftrightarrowfill {\defaultmtharrowfill \Leftarrow \Relbar \Rightarrow}
+\unexpanded\def\leftrightarrowfill {\defaultmtharrowfill \leftarrow \relbar \rightarrow}
+\unexpanded\def\mapstofill {\defaultmtharrowfill{\mapstochar\relbar} \relbar \rightarrow}
+\unexpanded\def\twoheadrightarrowfill{\defaultmtharrowfill \relbar \relbar \twoheadrightarrow}
+\unexpanded\def\twoheadleftarrowfill {\defaultmtharrowfill \twoheadleftarrow \relbar \relbar}
+\unexpanded\def\rightharpoondownfill {\defaultmtharrowfill \relbar \relbar \rightharpoondown}
+\unexpanded\def\rightharpoonupfill {\defaultmtharrowfill \relbar \relbar \rightharpoonup}
+\unexpanded\def\leftharpoondownfill {\defaultmtharrowfill \leftharpoondown \relbar \relbar}
+\unexpanded\def\leftharpoonupfill {\defaultmtharrowfill \leftharpoonup \relbar \relbar}
+\unexpanded\def\hookleftfill {\defaultmtharrowfill \leftarrow \relbar{\relbar\joinrel\rhook}}
+\unexpanded\def\hookrightfill {\defaultmtharrowfill{\lhook\joinrel\relbar}\relbar \rightarrow}
+\unexpanded\def\relfill {\defaultmtharrowfill \relbar \relbar \relbar}
+
+\unexpanded\def\triplerelbar {\mathrel\equiv}
+\unexpanded\def\triplerelfill{\defaultmtharrowfill\triplerelbar\triplerelbar\triplerelbar}
+
+\unexpanded\def\singlebond{{\xrel}} % or \def\singlebond{{\xrel[2]}}
+\unexpanded\def\doublebond{{\xequal}}
+\unexpanded\def\triplebond{{\xtriplerel}}
%D Now we define most commonly used arrows. These include arrows
%D defined in \filename{amsmath.sty}, \filename{extarrows.sty},
@@ -358,14 +358,14 @@
%D These macros for define math-overarrows are adapted from
%D \filename{amsmath.sty}
-\def\definemathoverarrow
+\unexpanded\def\definemathoverarrow
{\dotripleargument\dodefinemathoverarrow}
\def\dodefinemathoverarrow[#1][#2][#3]%
{\ifthirdargument
- \setvalue{#1}{\dohandlemathoverarrow[#2][#3]}%
+ \setuvalue{#1}{\dohandlemathoverarrow[#2][#3]}%
\else
- \setvalue{#1}{\dohandlemathoverarrow[\zeropoint][#2]}%
+ \setuvalue{#1}{\dohandlemathoverarrow[\zeropoint][#2]}%
\fi}
\def\dohandlemathoverarrow[#1][#2]%
@@ -383,16 +383,16 @@
%D Now the under arrows
-\def\definemathunderarrow
+\unexpanded\def\definemathunderarrow
{\dotripleargument\dodefinemathunderarrow}
%D For underarrows the default kern is 0.3ex
\def\dodefinemathunderarrow[#1][#2][#3]%
{\ifthirdargument
- \setvalue{#1}{\dohandlemathunderarrow[#2][#3]}%
+ \setuvalue{#1}{\dohandlemathunderarrow[#2][#3]}%
\else
- \setvalue{#1}{\dohandlemathunderarrow[0.3ex][#2]}%
+ \setuvalue{#1}{\dohandlemathunderarrow[0.3ex][#2]}%
\fi}
\def\dohandlemathunderarrow[#1][#2]%
diff --git a/Master/texmf-dist/tex/context/base/math-def.mkiv b/Master/texmf-dist/tex/context/base/math-def.mkiv
index ad5e40672f2..50c9902dde8 100644
--- a/Master/texmf-dist/tex/context/base/math-def.mkiv
+++ b/Master/texmf-dist/tex/context/base/math-def.mkiv
@@ -39,9 +39,9 @@
\doifelse{\mathematicsparameter\v!autopunctuation}\v!yes\enablemathpunctuation\disablemathpunctuation
\to \everysetupmathematics
-\appendtoks
- \ifconditional\automathpunctuation\dosetattribute{mathpunc}\plusone\fi
-\to \everymathematics
+% \appendtoks
+% \ifconditional\automathpunctuation\attribute\mathpunctuationattribute\plusone\fi
+% \to \everymathematics
\setupmathematics[\v!autopunctuation=\v!yes]
@@ -59,43 +59,43 @@
% The \mfunction macro is an alternative for \hbox with a
% controlable font switch.
-\definemathcommand [arccos] [nolop] {\mfunction{arccos}}
-\definemathcommand [arcsin] [nolop] {\mfunction{arcsin}}
-\definemathcommand [arctan] [nolop] {\mfunction{arctan}}
-\definemathcommand [arg] [nolop] {\mfunction{arg}}
-\definemathcommand [cosh] [nolop] {\mfunction{cosh}}
-\definemathcommand [cos] [nolop] {\mfunction{cos}}
-\definemathcommand [coth] [nolop] {\mfunction{coth}}
-\definemathcommand [cot] [nolop] {\mfunction{cot}}
-\definemathcommand [csc] [nolop] {\mfunction{csc}}
-\definemathcommand [deg] [nolop] {\mfunction{deg}}
-\definemathcommand [det] [limop] {\mfunction{det}}
-\definemathcommand [dim] [nolop] {\mfunction{dim}}
-\definemathcommand [exp] [nolop] {\mfunction{exp}}
-\definemathcommand [gcd] [limop] {\mfunction{gcd}}
-\definemathcommand [hom] [nolop] {\mfunction{hom}}
-\definemathcommand [inf] [limop] {\mfunction{inf}}
-\definemathcommand [injlim] [limop] {\mfunction{inj\,lim}}
-\definemathcommand [ker] [nolop] {\mfunction{ker}}
-\definemathcommand [lg] [nolop] {\mfunction{lg}}
-\definemathcommand [liminf] [limop] {\mfunction{lim\,inf}}
-\definemathcommand [limsup] [limop] {\mfunction{lim\,sup}}
-\definemathcommand [lim] [limop] {\mfunction{lim}}
-\definemathcommand [ln] [nolop] {\mfunction{ln}}
-\definemathcommand [log] [nolop] {\mfunction{log}}
-\definemathcommand [median] [limop] {\mfunction{median}}
-\definemathcommand [max] [limop] {\mfunction{max}}
-\definemathcommand [min] [limop] {\mfunction{min}}
-\definemathcommand [mod] [limop] {\mfunction{mod}}
-\definemathcommand [div] [limop] {\mfunction{div}}
-\definemathcommand [projlim] [limop] {\mfunction{proj\,lim}}
-\definemathcommand [Pr] [limop] {\mfunction{Pr}}
-\definemathcommand [sec] [nolop] {\mfunction{sec}}
-\definemathcommand [sinh] [nolop] {\mfunction{sinh}}
-\definemathcommand [sin] [nolop] {\mfunction{sin}}
-\definemathcommand [sup] [limop] {\mfunction{sup}}
-\definemathcommand [tanh] [nolop] {\mfunction{tanh}}
-\definemathcommand [tan] [nolop] {\mfunction{tan}}
+\definemathcommand [arccos] [nolop] {\mfunctionlabeltext{arccos}}
+\definemathcommand [arcsin] [nolop] {\mfunctionlabeltext{arcsin}}
+\definemathcommand [arctan] [nolop] {\mfunctionlabeltext{arctan}}
+\definemathcommand [arg] [nolop] {\mfunctionlabeltext{arg}}
+\definemathcommand [cosh] [nolop] {\mfunctionlabeltext{cosh}}
+\definemathcommand [cos] [nolop] {\mfunctionlabeltext{cos}}
+\definemathcommand [coth] [nolop] {\mfunctionlabeltext{coth}}
+\definemathcommand [cot] [nolop] {\mfunctionlabeltext{cot}}
+\definemathcommand [csc] [nolop] {\mfunctionlabeltext{csc}}
+\definemathcommand [deg] [nolop] {\mfunctionlabeltext{deg}}
+\definemathcommand [det] [limop] {\mfunctionlabeltext{det}}
+\definemathcommand [dim] [nolop] {\mfunctionlabeltext{dim}}
+\definemathcommand [exp] [nolop] {\mfunctionlabeltext{exp}}
+\definemathcommand [gcd] [limop] {\mfunctionlabeltext{gcd}}
+\definemathcommand [hom] [nolop] {\mfunctionlabeltext{hom}}
+\definemathcommand [inf] [limop] {\mfunctionlabeltext{inf}}
+\definemathcommand [injlim] [limop] {\mfunctionlabeltext{injlim}}
+\definemathcommand [ker] [nolop] {\mfunctionlabeltext{ker}}
+\definemathcommand [lg] [nolop] {\mfunctionlabeltext{lg}}
+\definemathcommand [liminf] [limop] {\mfunctionlabeltext{liminf}}
+\definemathcommand [limsup] [limop] {\mfunctionlabeltext{limsup}}
+\definemathcommand [lim] [limop] {\mfunctionlabeltext{lim}}
+\definemathcommand [ln] [nolop] {\mfunctionlabeltext{ln}}
+\definemathcommand [log] [nolop] {\mfunctionlabeltext{log}}
+\definemathcommand [median] [limop] {\mfunctionlabeltext{median}}
+\definemathcommand [max] [limop] {\mfunctionlabeltext{max}}
+\definemathcommand [min] [limop] {\mfunctionlabeltext{min}}
+\definemathcommand [mod] [limop] {\mfunctionlabeltext{mod}}
+%definemathcommand [div] [limop] {\mfunctionlabeltext{div}} % overloads \div symbol
+\definemathcommand [projlim] [limop] {\mfunctionlabeltext{projlim}}
+\definemathcommand [Pr] [limop] {\mfunctionlabeltext{Pr}}
+\definemathcommand [sec] [nolop] {\mfunctionlabeltext{sec}}
+\definemathcommand [sinh] [nolop] {\mfunctionlabeltext{sinh}}
+\definemathcommand [sin] [nolop] {\mfunctionlabeltext{sin}}
+\definemathcommand [sup] [limop] {\mfunctionlabeltext{sup}}
+\definemathcommand [tanh] [nolop] {\mfunctionlabeltext{tanh}}
+\definemathcommand [tan] [nolop] {\mfunctionlabeltext{tan}}
\definemathcommand [integers] {{\mathblackboard Z}}
\definemathcommand [reals] {{\mathblackboard R}}
@@ -104,14 +104,46 @@
\definemathcommand [complexes] {{\mathblackboard C}}
\definemathcommand [primes] {{\mathblackboard P}}
-% using attributes
+\let\normalmatharg\arg % todo: maybe automatically
-\def\choosemathbig#1#2{\dosetattribute{mathsize}{#1}\left#2\right.\doresetattribute{mathsize}}
+% using attributes
-\definemathcommand [big] {\choosemathbig\plusone }
-\definemathcommand [Big] {\choosemathbig\plustwo }
-\definemathcommand [bigg] {\choosemathbig\plusthree}
-\definemathcommand [Bigg] {\choosemathbig\plusfour }
+\chardef\bigmathdelimitermethod\plusone
+
+\def\plainbigdelimiters % traditional method
+ {\chardef\bigmathdelimitermethod\plustwo}
+
+\def\doplainbigmath#1#2%
+ {{\hbox{$%
+ \nulldelimiterspace\zeropoint\relax
+ \mathsurround\zeropoint
+ $}}}
+
+\def\doleftbigmath #1{\ifx#1\relax\else\left#1\expandafter\doleftbigmath \fi}
+\def\dorightbigmath#1{\ifx#1\relax\else\right.\expandafter\dorightbigmath\fi}
+
+\def\choosemathbig#1#2% so we accent \big{||} as well
+ {{\hbox{$%
+ \ifcase\bigmathdelimitermethod
+ \doleftbigmath#2\relax
+ \dorightbigmath#2\relax
+ \or
+ \attribute\mathsizeattribute#1\relax
+ \doleftbigmath#2\relax
+ \dorightbigmath#2\relax
+ \else
+ \doleftbigmath#2\relax
+ \vbox\!!to\getvalue{\??mm:b:\number#1}\bodyfontsize{}%
+ \dorightbigmath#2\relax
+ \fi
+ \nulldelimiterspace\zeropoint\relax
+ \mathsurround\zeropoint
+ $}}}
+
+\definemathcommand [big] {\choosemathbig\plusone } \setvalue{\??mm:b:1}{0.85}
+\definemathcommand [Big] {\choosemathbig\plustwo } \setvalue{\??mm:b:2}{1.15}
+\definemathcommand [bigg] {\choosemathbig\plusthree} \setvalue{\??mm:b:3}{1.45}
+\definemathcommand [Bigg] {\choosemathbig\plusfour } \setvalue{\??mm:b:4}{1.75}
\definemathcommand [bigl] [open] [one] {\big}
\definemathcommand [bigm] [rel] [one] {\big}
@@ -324,6 +356,10 @@
\unexpanded\def\underrightarrow{\mathopwithlimits\normalunderrightarrow}
\unexpanded\def\overrightarrow {\mathopwithlimits\normaloverrightarrow }
+\let\normalsurd\surd
+
+\unexpanded\def\surd{\normalsurd{}}
+
% todo mathclass=punctuation ord
% \Umathcode"02C="6 "0 "02C
diff --git a/Master/texmf-dist/tex/context/base/math-dim.lua b/Master/texmf-dist/tex/context/base/math-dim.lua
index a536f03098e..62d805126f8 100644
--- a/Master/texmf-dist/tex/context/base/math-dim.lua
+++ b/Master/texmf-dist/tex/context/base/math-dim.lua
@@ -1,6 +1,6 @@
if not modules then modules = { } end modules ['math-dim'] = {
version = 1.001,
- comment = "companion to math-ini.tex",
+ comment = "companion to math-ini.mkiv",
author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
copyright = "PRAGMA ADE / ConTeXt Development Team",
license = "see context related readme files"
@@ -21,9 +21,9 @@ local defaults = {
['default']={ "AccentBaseHeight", "x_height" },
},
['fraction_del_size']={
- ['default']={ "0", "delim2" },
- ['cramped_display_style']={ "0", "delim1" },
- ['display_style']={ "0", "delim1" },
+ ['default']={ "FractionDelimiterSize", "delim2" },
+ ['cramped_display_style']={ "FractionDelimiterDisplayStyleSize", "delim1" },
+ ['display_style']={ "FractionDelimiterDisplayStyleSize", "delim1" },
},
['fraction_denom_down']={
['default']={ "FractionDenominatorShiftDown", "denom2" },
@@ -118,7 +118,7 @@ local defaults = {
['default']={ "SubscriptBaselineDropMin", "sub_drop" },
},
['sub_sup_shift_down']={
- ['default']={ "SubscriptShiftDown", "sub2" },
+ ['default']={ "SubscriptShiftDown", "sub2" }, -- todo
},
['sub_top_max']={
['default']={ "SubscriptTopMax", "abs(math_x_height*4)/5" },
@@ -204,12 +204,12 @@ end
-- local mt = { } setmetatable(defaults,mt)
--
-- mt.__index = function(t,s)
--- texio.write_nl("GETTING " .. s)
-- return t.default or t.text_style or 0
-- end
function mathematics.dimensions(dimens)
if dimens.SpaceAfterScript then
+ dimens.SubscriptShiftDownWithSuperscript = dimens.SubscriptShiftDown * 1.5
return { }, table.fastcopy(dimens)
elseif dimens.AxisHeight or dimens.axis_height then
local t = { }
@@ -249,6 +249,7 @@ function mathematics.dimensions(dimens)
end
t[variable] = tt
end
+--~ logs.report("warning", "version 0.47 is needed for proper delimited math")
local d = {
AxisHeight = t . axis . text_style,
AccentBaseHeight = t . accent_base_height . text_style,
@@ -261,6 +262,8 @@ function mathematics.dimensions(dimens)
FractionNumeratorGapMin = t . fraction_num_vgap . text_style,
FractionNumeratorShiftUp = t . fraction_num_up . text_style,
FractionRuleThickness = t . fraction_rule . text_style,
+ FractionDelimiterSize = t . fraction_del_size . text_style,
+ FractionDelimiterDisplayStyleSize = t . fraction_del_size . display_style,
LowerLimitBaselineDropMin = t . limit_below_bgap . text_style,
LowerLimitGapMin = t . limit_below_vgap . text_style,
OverbarExtraAscender = t . overbar_kern . text_style,
@@ -282,6 +285,7 @@ function mathematics.dimensions(dimens)
StackTopShiftUp = t . stack_num_up . text_style,
SubscriptBaselineDropMin = t . sub_shift_drop . text_style,
SubscriptShiftDown = t . sub_shift_down . text_style,
+ SubscriptShiftDownWithSuperscript = t . sub_sup_shift_down . text_style,
SubscriptTopMax = t . sub_top_max . text_style,
SubSuperscriptGapMin = t . subsup_vgap . text_style,
SuperscriptBaselineDropMax = t . sup_shift_drop . text_style,
@@ -301,7 +305,6 @@ function mathematics.dimensions(dimens)
StretchStackBottomShiftDown = t . under_delimiter_bgap . text_style,
}
d.AccentBaseHeight = 0
- -- texio.write_nl(table.serialize(d))
return t, d -- this might change
else
return { }, { }
diff --git a/Master/texmf-dist/tex/context/base/math-ent.lua b/Master/texmf-dist/tex/context/base/math-ent.lua
index d1e1865a44f..e5e5b98f004 100644
--- a/Master/texmf-dist/tex/context/base/math-ent.lua
+++ b/Master/texmf-dist/tex/context/base/math-ent.lua
@@ -1,6 +1,6 @@
if not modules then modules = { } end modules ['math-ent'] = {
version = 1.001,
- comment = "companion to math-ini.tex",
+ comment = "companion to math-ini.mkiv",
author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
copyright = "derived from the mathml 2.0 specification",
}
diff --git a/Master/texmf-dist/tex/context/base/math-ext.lua b/Master/texmf-dist/tex/context/base/math-ext.lua
index 52dce02554c..673103677e0 100644
--- a/Master/texmf-dist/tex/context/base/math-ext.lua
+++ b/Master/texmf-dist/tex/context/base/math-ext.lua
@@ -1,6 +1,6 @@
if not modules then modules = { } end modules ['math-ext'] = {
version = 1.001,
- comment = "companion to math-ini.tex",
+ comment = "companion to math-ini.mkiv",
author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
copyright = "PRAGMA ADE / ConTeXt Development Team",
license = "see context related readme files"
@@ -100,19 +100,31 @@ mathematics.extras.add(0xFE303, {
-- 0xFE321 -- 0xFE340 for missing characters
--- mathematics.extras.add(0xFE321, {
--- category="sm",
--- description="SHORT BAR",
--- -- direction="on",
--- -- linebreak="nu",
--- mathclass="relation",
--- mathname="mapstochar",
--- unicodeslot=0xFE321,
--- } )
-
-
+mathematics.extras.add(0xFE321, {
+ category="sm",
+ description="MATHEMATICAL SHORT BAR",
+-- direction="on",
+-- linebreak="nu",
+ mathclass="relation",
+ mathname="mapstochar",
+ unicodeslot=0xFE321,
+} )
+mathematics.extras.add(0xFE322, {
+ category="sm",
+ description="MATHEMATICAL LEFT HOOK",
+ mathclass="relation",
+ mathname="lhook",
+ unicodeslot=0xFE322,
+} )
+mathematics.extras.add(0xFE323, {
+ category="sm",
+ description="MATHEMATICAL RIGHT HOOK",
+ mathclass="relation",
+ mathname="rhook",
+ unicodeslot=0xFE323,
+} )
--~ mathematics.extras.add(0xFE304, {
--~ category="sm",
@@ -140,4 +152,3 @@ mathematics.extras.add(0xFE303, {
--~ \Umathchardef\bracerd="0 "1 "FF07B
--~ \Umathchardef\bracelu="0 "1 "FF07C
--~ \Umathchardef\braceru="0 "1 "FF07D
-
diff --git a/Master/texmf-dist/tex/context/base/math-for.mkiv b/Master/texmf-dist/tex/context/base/math-for.mkiv
index 87aeaa4e05f..e33276d5385 100644
--- a/Master/texmf-dist/tex/context/base/math-for.mkiv
+++ b/Master/texmf-dist/tex/context/base/math-for.mkiv
@@ -37,21 +37,27 @@
\ifx\fontattributehash \empty\else\dosetfontattribute \fontattributehash #1\fi
\ifx\colorattributehash\empty\else\dosetcolorattribute\colorattributehash#2\fi}
+\def\getformulaparameters{\getparameters[\??fm]}
+
%D \macros
%D {setupformulas}
\newtoks \everysetupformulas
-\def\setupformulas
+\unexpanded\def\setupformulas
{\dodoubleempty\dosetupformulas}
\def\dosetupformulas[#1][#2]%
{\ifsecondargument
+ \edef\currentformula{#1}%
\getparameters[\??fm#1][#2]%
\else
+% \let\currentformula\v!formula % hm
+ \let\currentformula\empty
\getparameters[\??fm][#1]%
\fi
- \the\everysetupformulas}
+ \the\everysetupformulas
+ \let\currentformula\empty}
%D Not yet cleanup up:
@@ -63,7 +69,7 @@
\newtoks \everysetuptextformulas
-\def\setuptextformulas
+\unexpanded\def\setuptextformulas
{\dosingleempty\dosetuptextformulas}
\def\dosetuptextformulas[#1]%
diff --git a/Master/texmf-dist/tex/context/base/math-ini.lua b/Master/texmf-dist/tex/context/base/math-ini.lua
index 5a688941013..63d7cad3852 100644
--- a/Master/texmf-dist/tex/context/base/math-ini.lua
+++ b/Master/texmf-dist/tex/context/base/math-ini.lua
@@ -1,6 +1,6 @@
if not modules then modules = { } end modules ['math-ext'] = {
version = 1.001,
- comment = "companion to math-ini.tex",
+ comment = "companion to math-ini.mkiv",
author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
copyright = "PRAGMA ADE / ConTeXt Development Team",
license = "see context related readme files"
@@ -68,6 +68,7 @@ classes.variable = classes.alphabetic
classes.number = classes.alphabetic
-- there will be proper functions soon (and we will move this code in-line)
+-- no need for " in class and family (saves space)
local function delcode(target,family,slot)
return format('\\Udelcode%s="%X "%X ',target,family,slot)
@@ -273,7 +274,7 @@ mathematics.entities = mathematics.entities or { }
function mathematics.register_xml_entities()
local entities = xml.entities
- for name, unicode in pairs(mathematics.entities) do
+ for name, unicode in next, mathematics.entities do
if not entities[name] then
entities[name] = utfchar(unicode)
end
@@ -286,13 +287,24 @@ function mathematics.big(tfmdata,unicode,n)
local t = tfmdata.characters
local c = t[unicode]
if c then
- local next = c.next
- while next do
- if n <= 1 then
- return next
- else
- n = n - 1
- next = t[next].next
+ local vv = c.vert_variants or c.next and t[c.next].vert_variants
+ if vv then
+ local vvn = vv[n]
+ return vvn and vvn.glyph or vv[#vv].glyph or unicode
+ else
+ local next = c.next
+ while next do
+ if n <= 1 then
+ return next
+ else
+ n = n - 1
+ local tn = t[next].next
+ if tn then
+ next = tn
+ else
+ return next
+ end
+ end
end
end
end
@@ -301,16 +313,24 @@ end
-- plugins
-function mathematics.scaleparameters(t,tfmtable,delta)
+local hvars = table.tohash {
+ --~ "RadicalKernBeforeDegree",
+ --~ "RadicalKernAfterDegree",
+}
+
+function mathematics.scaleparameters(t,tfmtable,delta,hdelta,vdelta)
local math_parameters = tfmtable.math_parameters
if math_parameters and next(math_parameters) then
delta = delta or 1
+ hdelta, vdelta = hdelta or delta, vdelta or delta
local _, mp = mathematics.dimensions(math_parameters)
for name, value in next, mp do
- if name ~= "RadicalDegreeBottomRaisePercent" then
- mp[name] = delta*value
- else
+ if name == "RadicalDegreeBottomRaisePercent" then
mp[name] = value
+ elseif hvars[name] then
+ mp[name] = hdelta * value
+ else
+ mp[name] = vdelta * value
end
end
t.MathConstants = mp
diff --git a/Master/texmf-dist/tex/context/base/math-ini.mkii b/Master/texmf-dist/tex/context/base/math-ini.mkii
index 6713987f7f9..f9dd859c412 100644
--- a/Master/texmf-dist/tex/context/base/math-ini.mkii
+++ b/Master/texmf-dist/tex/context/base/math-ini.mkii
@@ -451,7 +451,10 @@
\newtoks\everymathpunctuation
\def\enablemathpunctuation % can be called inside math, so after \everymathematics
- {\the\everymathpunctuation
+ {\relax
+ \ifmmode
+ \the\everymathpunctuation
+ \fi
\appendtoksonce
\the\everymathpunctuation
\to\everymathematics}
diff --git a/Master/texmf-dist/tex/context/base/math-ini.mkiv b/Master/texmf-dist/tex/context/base/math-ini.mkiv
index cb5a6344019..828a6eccbf4 100644
--- a/Master/texmf-dist/tex/context/base/math-ini.mkiv
+++ b/Master/texmf-dist/tex/context/base/math-ini.mkiv
@@ -29,6 +29,11 @@
\ifx\v!compact\undefined \def\v!compact{compact} \fi
+%D New:
+
+\let\startimath\Ustartmath \let\stopimath \Ustopmath
+\let\startdmath\Ustartdisplaymath \let\stopdmath \Ustopmath
+
%D We move these definitions into the format:
% test [[\char948 \ctxlua{tex.sprint(utf.char(948))}]]
@@ -42,19 +47,23 @@
\registerctxluafile{math-map}{1.001}
\registerctxluafile{math-noa}{1.001}
-\definesystemattribute[mathalph]
-\definesystemattribute[mathsize]
-\definesystemattribute[mathpunc]
+\definesystemattribute[mathalphabet] \chardef\mathalphabetattribute \dogetattributeid{mathalphabet}
+\definesystemattribute[mathsize] \chardef\mathsizeattribute \dogetattributeid{mathsize}
+\definesystemattribute[mathpunctuation] \chardef\mathpunctuationattribute \dogetattributeid{mathpunctuation}
+\definesystemattribute[mathgreek] \chardef\mathgreekattribute \dogetattributeid{mathgreek}
% todo: only in mmode
-% \def\setmathattribute#1#2{\dosetattribute{mathalph}{\ctxlua{tex.sprint(mathematics.sync_a_both (\number\dogetattribute{mathalph},"#1","#2"))}}}
-% \def\setmathalphabet #1{\dosetattribute{mathalph}{\ctxlua{tex.sprint(mathematics.sync_a_name (\number\dogetattribute{mathalph},"#1"))}}}
-% \def\setmathstyle #1{\dosetattribute{mathalph}{\ctxlua{tex.sprint(mathematics.sync_a_style(\number\dogetattribute{mathalph},"#1"))}}}
+\unexpanded\def\mathgreekupright{\attribute\mathgreekattribute11 }
+\unexpanded\def\mathgreekitalic {\attribute\mathgreekattribute22 }
+\unexpanded\def\mathgreekdefault{\attribute\mathgreekattribute\attributeunsetvalue}
+
+\let\mathgreeknormal\mathgreekupright
+\let\mathgreeknone \mathgreekdefault
-\def\setmathattribute#1#2{\ctxlua{mathematics.sync_a_both ("#1","#2")}}
-\def\setmathalphabet #1{\ctxlua{mathematics.sync_a_name ("#1")}}
-\def\setmathstyle #1{\ctxlua{mathematics.sync_a_style("#1")}}
+\def\setmathattribute#1#2{\ifmmode\ctxlua{mathematics.sync_a_both ("#1","#2")}\fi}
+\def\setmathalphabet #1{\ifmmode\ctxlua{mathematics.sync_a_name ("#1")}\fi}
+\def\setmathstyle #1{\ifmmode\ctxlua{mathematics.sync_a_style("#1")}\fi}
\unexpanded\def\mr {\setmathattribute{regular}{tf}}
@@ -90,32 +99,44 @@
\unexpanded\def\fraktur {\ifmmode\expandafter\mathfraktur \fi}
\unexpanded\def\gothic {\ifmmode\expandafter\mathfraktur \fi}
-\unexpanded\def\mathcal #1{{\setmathalphabet{script}#1}} % for AMS compatibility
-\unexpanded\def\mathfrak#1{{\setmathalphabet{fraktur}#1}} % for AMS compatibility
-\unexpanded\def\mathbb #1{{\setmathalphabet{blackboard}#1}} % for AMS compatibility
+\unexpanded\def\mathcal #1{{\mathscript #1}} % for AMS compatibility
+\unexpanded\def\mathfrak#1{{\mathfraktur #1}} % for AMS compatibility
+\unexpanded\def\mathbb #1{{\mathblackboard#1}} % for AMS compatibility
\let\normalmr\mr
+% \prependtoks
+% \let\mr\normalmr
+% \let\rm\mathrm \let\ss\mathss \let\tt\mathtt
+% \let\tf\mathtf \let\bf\mathbf \let\it\mathit \let\sl\mathsl \let\bi\mathbi \let\bs\mathbs
+% \let\frak\mathfraktur \let\cal\mathscript \let\bbd\mathblackboard
+% \mathdefault
+% \to \everymathematics
+
+\let\normaltf\tf \unexpanded\def\tf{\ifmmode\mathtf\else\normaltf\fi}
+\let\normalbf\bf \unexpanded\def\bf{\ifmmode\mathbf\else\normalbf\fi}
+\let\normalit\it \unexpanded\def\it{\ifmmode\mathit\else\normalit\fi}
+\let\normalsl\sl \unexpanded\def\sl{\ifmmode\mathsl\else\normalsl\fi}
+\let\normalbi\bi \unexpanded\def\bi{\ifmmode\mathbi\else\normalbi\fi}
+\let\normalbs\bs \unexpanded\def\bs{\ifmmode\mathbs\else\normalbs\fi}
+
+\let\normalrm\rm \unexpanded\def\rm{\ifmmode\mathrm\else\normalrm\fi}
+\let\normalss\ss \unexpanded\def\ss{\ifmmode\mathss\else\normalss\fi}
+\let\normaltt\tt \unexpanded\def\tt{\ifmmode\mathtt\else\normaltt\fi}
+ \unexpanded\def\mr{\ifmmode \normalmr\fi}
+
\prependtoks
- \let\mr\normalmr
- \let\rm\mathrm \let\ss\mathss \let\tt\mathtt
- \let\tf\mathtf \let\bf\mathbf \let\it\mathit \let\sl\mathsl \let\bi\mathbi \let\bs\mathbs
- \let\frak\mathfraktur \let\cal\mathscript \let\bbd\mathblackboard
+% \let\mr\normalmr
+% \let\rm\mathrm \let\ss\mathss \let\tt\mathtt
+% \let\tf\mathtf \let\bf\mathbf \let\it\mathit \let\sl\mathsl \let\bi\mathbi \let\bs\mathbs
+% \let\frak\mathfraktur \let\cal\mathscript \let\bbd\mathblackboard
\mathdefault
\to \everymathematics
%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
+%D To be done.
\let\mathboldsymbol\relax % yet unsupported, will be
@@ -145,7 +166,7 @@
\def\@@mathlimopcomm #1{\mathop{#1}} %no \limits
\def\@@mathnolopcomm #1{\mathop{#1}\nolimits}
-\def\@@mathboxcomm #1{\dontleavehmode\hbox{$\mathsurround\zeropoint#1$}}
+\def\@@mathboxcomm #1{\dontleavehmode\hbox\Ustartmath\mathsurround\zeropoint#1\Ustopmath}
\def\@@mathchoicecomm#1{[todo #1]}
\chardef\mathordcode = 0 \let\mathordcomm \mathord
@@ -181,48 +202,30 @@
% $\mathopnolimits{\kern\zeropoint d}x$
% \stoplines
-\newif\iftracemathcollection
-
% this will be sorted out:
\let\mathcharacter \getvalue
\let\textcharacter \getvalue
-\def\definefamilysynonym {\dotripleempty\dodefinefamilysynonym}
+\unexpanded\def\definefamilysynonym {\dotripleempty\dodefinefamilysynonym}
\def\dodefinefamilysynonym [#1][#2][#3]{}
-\def\definemathsymbol {\dosixtupleempty\dodefinemathsymbol}
+\unexpanded\def\definemathsymbol {\dosixtupleempty\dodefinemathsymbol}
\def\dodefinemathsymbol [#1][#2][#3][#4][#5][#6]{}
-\def\definemathcharacter {\dosixtupleempty\dodefinemathcharacter}
-\def\redefinemathcharacter {\dosixtupleempty\dodefinemathcharacter}
+\unexpanded\def\definemathcharacter {\dosixtupleempty\dodefinemathcharacter}
\def\dodefinemathcharacter [#1][#2][#3][#4][#5][#6]{}
-\def\startmathcollection [#1]{}
-\def\setmathcollection #1{}
-\def\stopmathcollection {}
-\def\startrawmathcollection {}
-\def\stoprawmathcollection {}
-\def\setmathtoks {}
-\let\currentmathcollection \s!default
-\let\nomathcollection \s!default
-\let\mathcollection \s!default
-\def\enablemathcollection [#1]{}
-\def\usemathcollection {\dodoubleempty\dousemathcollection}
-\def\dousemathcollection [#1][#2]{}
-\let\mathclass \nomathcollection
-\let\autoenablemathcollection\relax
-\def\resetmathcollection [#1]{}
-
-\def\definemathcommand
+
+\unexpanded\def\definemathcommand
{\dotripleempty\dodefinemathcommand}
\def\dodefinemathcommand[#1][#2][#3]#4% command class args meaning
{\ifthirdargument
\processaction
[#3]
- [one=>\unexpanded\setvalue{#1}##1{\puremathcomm{#2}{#4{##1}}},
- two=>\unexpanded\setvalue{#1}##1##2{\puremathcomm{#2}{#4{##1}{##2}}}]%
+ [one=>\setuvalue{#1}##1{\puremathcomm{#2}{#4{##1}}},
+ two=>\setuvalue{#1}##1##2{\puremathcomm{#2}{#4{##1}{##2}}}]%
\else\ifsecondargument
- \unexpanded\setvalue{#1}{\puremathcomm{#2}{#4}}%
+ \setuvalue{#1}{\puremathcomm{#2}{#4}}%
\else
- \unexpanded\setvalue{#1}{\puremathcomm{nothing}{#4}}%
+ \setuvalue{#1}{\puremathcomm{nothing}{#4}}%
\fi\fi}
%D Moved from font-ini.mkiv:
@@ -258,7 +261,10 @@
%D needed for sin, cos etc
-\def\mfunction#1{{\mr#1}}
+\let\mathfunction\firstofoneargument
+
+\def\mfunction #1{{\mr#1}}
+\def\mfunctionlabeltext#1{{\mr\mathlabeltext{#1}}}
% \def\mlimitsfunction #1{\mathlimopcomm{{\mr#1}}
% \def\mnolimitsfunction#1{\mathnolopcomm{{\mr#1}}
@@ -268,11 +274,16 @@
\def\currentmscaledstyle{rm} % will be plugged into the typeface text=ss option
-\def\setmathfunctionstyle#1% rm ss tt
+\unexpanded\def\do@mathopnolimits #1{\mathop{\mscaledtext{#1}}\nolimits}
+\unexpanded\def\do@mfunction #1{\mscaledtext{#1}}
+\unexpanded\def\do@mfunctionlabeltext#1{\mscaledtext{\mathlabeltext{#1}}}
+
+\def\setmathfunctionstyle#1% rm ss tt (can be made faster if needed)
{\doifsomething{#1}
{\def\currentmscaledstyle{#1}%
- \def\mathopnolimits##1{\mathop{\mscaledtext{##1}}\nolimits}%
- \def\mfunction##1{\mscaledtext{##1}}}}
+ \let\mathopnolimits \do@mathopnolimits
+ \let\mfunction \do@mfunction
+ \let\mfunctionlabeltext\do@mfunctionlabeltext}}
\def\mscaledtext#1%
{\mathchoice
@@ -291,9 +302,11 @@
%D
%D This hooks into the math handler with:
-\appendtoks
- \setmathfunctionstyle\currentmathtextstyle
-\to \everybodyfont
+% no longer supported this way, has to be done with \setupmathematics
+%
+% \appendtoks
+% \setmathfunctionstyle\currentmathtextstyle
+% \to \everybodyfont
%D Usage:
%D
@@ -337,15 +350,18 @@
\ifdefined\normalsuber\else \def\normalsuber{_} \fi
\ifdefined\normalsuper\else \def\normalsuper{^} \fi
+\ifdefined\normalaltab\else \def\normalaltab{&} \fi
\bgroup
\catcode`_=\active
\catcode`^=\active
+ \catcode`&=\active
\global \everynonknuthmode {\appendtoks
\let_\normalsuber
\let^\normalsuper
+ \let&\normalaltab
\to \everymathematics}
\egroup
@@ -353,19 +369,23 @@
\appendtoks
\mathcode`_="8000
\mathcode`^="8000
+ \mathcode`&="8000
\catcode`_=\@@other
\catcode`^=\@@other
+ \catcode`&=\@@other
\to \everynonknuthmode
\appendtoks
\catcode`_=\@@subscript
\catcode`^=\@@superscript
+ \catcode`&=\@@alignment
\to \everydonknuthmode
\appendtoks
\startextendcatcodetable\ctxcatcodes
\catcode`_=\@@other
\catcode`^=\@@other
+ \catcode`&=\@@other
\stopextendcatcodetable
\to \everynonknuthmode
@@ -373,6 +393,7 @@
\startextendcatcodetable\ctxcatcodes
\catcode`_=\@@subscript
\catcode`^=\@@superscript
+ \catcode`&=\@@alignment
\stopextendcatcodetable
\to \everydonknuthmode
@@ -387,14 +408,14 @@
\mathcode`\_="8000 % \_
%D \macros
-%D {\setupmathematics}
+%D {setupmathematics}
%D
%D Configuration for integrals. (If needed we can speed this up and make it
%D installable; no processaction is needed then).
\newtoks\everysetupmathematics
-\def\setupmathematics
+\unexpanded\def\setupmathematics
{\dosingleargument\dosetupmathematics}
\def\dosetupmathematics[#1]%
@@ -414,6 +435,37 @@
\setupmathematics
[\v!compact=no]
+%D Delayed: greek.
+%D
+%D \starttyping
+%D \usetypescript[cambria]\setupbodyfont[cambria]
+%D \startTEXpage
+%D $\alpha \mathgreekupright \alpha \mathgreekitalic \alpha$
+%D \stopTEXpage
+%D \stoptyping
+
+% [lc uc] normal (upright) = 2, italic = 3, none = 0/1
+
+\setevalue{\??mo:greek:\v!normal :\v!normal}{\attribute\mathgreekattribute22 }
+\setevalue{\??mo:greek:\v!normal :\v!italic}{\attribute\mathgreekattribute23 }
+\setevalue{\??mo:greek:\v!normal :\v!none }{\attribute\mathgreekattribute21 }
+
+\setevalue{\??mo:greek:\v!italic :\v!normal}{\attribute\mathgreekattribute32 }
+\setevalue{\??mo:greek:\v!italic :\v!italic}{\attribute\mathgreekattribute33 }
+\setevalue{\??mo:greek:\v!italic :\v!none }{\attribute\mathgreekattribute31 }
+
+\setevalue{\??mo:greek:\v!none :\v!normal}{\attribute\mathgreekattribute12 }
+\setevalue{\??mo:greek:\v!none :\v!italic}{\attribute\mathgreekattribute13 }
+\setevalue{\??mo:greek:\v!none :\v!none }{\attribute\mathgreekattribute\attributeunsetvalue}
+
+\appendtoks
+ \csname\??mo:greek:\@@molcgreek:\@@moucgreek\endcsname
+\to \everymathematics
+
+\setupmathematics
+ [lcgreek=\v!italic,
+ ucgreek=\v!normal] % was: none
+
%D \macros
%D {enablemathpunctuation,disablemathpunctuation}
%D
@@ -437,7 +489,7 @@
\to \everysetupmathematics
\appendtoks
- \ifconditional\automathpunctuation\dosetattribute{mathpunc}\plusone\fi
+ \ifconditional\automathpunctuation\attribute\mathpunctuationattribute\plusone\fi
\to \everymathematics
\setupmathematics
@@ -515,6 +567,19 @@
\crampedscriptscriptstyle \fi % 6 -> 7
#1}}
+\def\mathstylefont#1% #1 is number (\normalmathstyle)
+ {\ifcase#1\relax
+ \textfont \or
+ \textfont \or
+ \textfont \or
+ \textfont \or
+ \scriptfont \or
+ \scriptfont \or
+ \scriptscriptfont \or
+ \scriptscriptfont \else
+ \textfont
+ \fi\zerocount}
+
%D Something similar can be used in the (re|)|definition
%D of \type {\text}. This version is a variation on the one
%D in the math module (see \type{m-math} and|/|or \type
@@ -534,6 +599,12 @@
%{\hbox{\everymath{#1}\switchtobodyfont [#2]#3}} % 15 sec
{\hbox{\everymath{#1}\setcurrentfontbody{#2}#3}} % 3 sec (no math)
+%D Safeguard against redefinitions:
+
+\appendtoks
+ \let\_\normalunderscore % is textunderscore or fakeunderscore
+\to \everymathematics
+
%D Because we may overload \type {\text} in other (structuring)
%D macros, we say:
@@ -581,4 +652,6 @@
\ifx\text\undefined \let\text\hbox \fi
+\def\mathoptext#1{\mathop{\text{#1}}}
+
\protect \endinput
diff --git a/Master/texmf-dist/tex/context/base/math-inl.mkiv b/Master/texmf-dist/tex/context/base/math-inl.mkiv
index 93168b885ff..89de0242b09 100644
--- a/Master/texmf-dist/tex/context/base/math-inl.mkiv
+++ b/Master/texmf-dist/tex/context/base/math-inl.mkiv
@@ -15,339 +15,12 @@
\unprotect
-%D \macros
-%D {...}
-%D
-%D New and experimental: snapping big inline math!
+% Obsolete, as we do snapping differently now.
-\newconditional\halfcrazymathlines % \settrue\halfcrazymathlines
-\newconditional\crazymathsnapping % \settrue\crazymathsnapping
-
-\appendtoks
- \doifelse\@@mtgrid\v!yes \settrue\setfalse\crazymathsnapping
- \doifelse\@@mtstep\v!halfline\settrue\setfalse\halfcrazymathlines
-\to \everysetuptextformulas
-
-\setuptextformulas
- [\c!grid=\v!yes,
- \c!step=\v!line]
-
-\newcount\crazymathhack
-
-\let\lastcrazymathline \!!zeropoint
-\let\lastcrazymathpage \!!zerocount
-\let\lastcrazymathprelines \!!zerocount
-\let\lastcrazymathpostlines\!!zerocount
-
-\def\crazymathtag{amh:\the\crazymathhack}
-\def\crazytexttag{\v!text:\lastcrazymathpage}
-
-\def\crazymathindent{\hskip\MPx\crazymathtag\hskip-\MPx\crazytexttag}
-
-\def\flushcrazymathbox
- {\nextboxht\strutheight
- \nextboxdp\strutdepth
- \hbox{\iftracegridsnapping\ruledhbox\fi{\flushnextbox}}}
-
-\def\snappedinlineformula
- {\dosingleempty\dosnappedinlineformula}
-
-%D \starttabulate[|Tl|l|]
-%D \NC - \NC half lines \NC \NR
-%D \NC + \NC full lines \NC \NR
-%D \NC = \NC force \NC \NR
-%D \NC < \NC force, minus pre \NC \NR
-%D \NC > \NC force, minus post \NC \NR
-%D \stoptabulate
-
-\def\inlinemathmargin{1pt}
-
-\settrue\autocrazymathsnapping
-
-% FROM NOW ON, CHANGES AS OPTIONS
-
-% TODO: SKYLINE (PREV LINE POS SCAN)
-
-% we can rewrite this in lua but maybe we don't need it
-% any more when we have proper snapping anyway
-
-\def\dosnappedinlineformula[#1]#2%
- {\ifvmode\dontleavehmode\fi % tricky
- \strut % prevents funny space at line break
- \begingroup % interesting: \bgroup can make \vadjust disappear
- \ifconditional\crazymathsnapping
- \ifgridsnapping
- \checktextbackgrounds % we need pos tracking, to be made less redundant
- \donetrue
- \else
- \donefalse
- \fi
- \else
- \donefalse
- \fi
- \!!doneafalse % forced or not auto
- \!!donebfalse % too heigh
- \!!donecfalse % too low
- \!!donedfalse % less before
- \!!doneefalse % less after
- \ifdone
- \setbox\nextbox\hbox{$#2$}%
- \iftracegridsnapping
- \setbox\nextbox\ruledhbox
- {\backgroundline[gray]{\showstruts\strut\flushnextbox}}%
- \fi
- \def\docommand##1%
- {\doif{##1}-{\settrue \halfcrazymathlines}%
- \doif{##1}+{\setfalse\halfcrazymathlines}%
- \doif{##1}={\!!doneatrue}%
- \doif{##1}<{\!!donedtrue}%
- \doif{##1}>{\!!doneetrue}}%
- \processcommalist[#1]\docommand
- \if!!doneb
- \if!!donec \else
- \setfalse\halfcrazymathlines
- \fi
- \else
- \if!!donec
- \setfalse\halfcrazymathlines
- \fi
- \fi
- \donefalse
- \if!!donea
- \donetrue
- \scratchdimen \nextboxht
- \advance\scratchdimen .5\lineheight
- \nextboxht\scratchdimen
- \scratchdimen \nextboxdp
- \advance\scratchdimen .5\lineheight
- \nextboxdp\scratchdimen
- \else\ifdim\nextboxht>\strutht
- \donetrue
- \else\ifdim\nextboxdp>\strutdp
- \donetrue
- \fi\fi\fi
- \ifconditional\autocrazymathsnapping \else \if!!donea \else
- % don't compensate, just snap to strut
- \donefalse
- % signal for next else, snap line to strut
- \!!doneatrue
- \fi \fi
- \fi
- \ifdone
- % analyze height
- \scratchdimen\inlinemathmargin
- \advance\scratchdimen \strutht
- \ifdim\nextboxht<\scratchdimen \else \!!donebtrue \fi
- % analyze depth
- \scratchdimen\inlinemathmargin
- \advance\scratchdimen \strutdp
- \ifdim\nextboxdp<\scratchdimen \else \!!donectrue \fi
- % analyzed or forced
- \ifdone
- \global\advance\crazymathhack\plusone
- \donefalse
- \ifnum\MPp\crazymathtag=\lastcrazymathpage\relax
- \ifdim\MPy\crazymathtag=\lastcrazymathline\relax
- \donetrue
- \fi
- \fi
- \ifnum\MPp\crazymathtag=\zerocount \donefalse \fi
- \ifdim\MPy\crazymathtag=\zeropoint \donefalse \fi
- \ifdone
- % same page and same line
- \else
- \global\let\lastcrazymathprelines \!!zerocount
- \global\let\lastcrazymathpostlines\!!zerocount
- \xdef\lastcrazymathpage{\MPp\crazymathtag}%
- \xdef\lastcrazymathline{\MPy\crazymathtag}%
- \fi
- \if!!doneb
- % \getrawnoflines\nextboxht
- \scratchdimen\nextboxht
- \advance\scratchdimen-\strutht
- \getnoflines\scratchdimen
- \if!!doned \advance\noflines\minusone \fi
- \scratchcounter\noflines
- \advance\noflines-\lastcrazymathprelines\relax
- \ifnum\noflines>\zerocount
- \xdef\lastcrazymathprelines{\the\scratchcounter}%
- \scratchdimen\noflines\lineheight
- \ifconditional\halfcrazymathlines
- \advance\scratchdimen-.5\lineheight
- \fi
- \advance\scratchdimen-\strutdepth
- \setbox\scratchbox\null
- \wd\scratchbox2\bodyfontsize
- \ht\scratchbox\scratchdimen
- \dp\scratchbox\strutdepth
- %%% top correction code (see below)
- \normalvadjust pre
- {%\allowbreak % sometimes breaks spacing
- \forgetall
- \crazymathindent
- \iftracegridsnapping
- \setbox\scratchbox\hbox{\green\ruledhbox{\box\scratchbox}}%
- \fi
- \box\scratchbox
- \endgraf
- \nobreak}%
- \else\ifnum\scratchcounter>\zerocount
- \normalvadjust pre
- {\nobreak}%
- \fi\fi
- \fi
- \if!!donec
- % \getrawnoflines\nextboxdp
- \scratchdimen\nextboxdp
- \advance\scratchdimen-\strutdp
- \getnoflines\scratchdimen
- \if!!donee \advance\noflines\minusone \fi
- \scratchcounter\noflines
- \advance\noflines-\lastcrazymathpostlines\relax
- \ifnum\noflines>\zerocount
- \donetrue
- \else\ifnum\lastcrazymathpostlines=\zerocount
- \donetrue
- \else
- \donefalse
- \fi\fi
- \else
- \donefalse
- \fi
- \ifdone
- \xdef\lastcrazymathpostlines{\the\scratchcounter}%
- \ifnum\lastcrazymathpostlines=\zerocount
- \global\let\lastcrazymathpostlines\!!plusone
- \fi
- \hbox{\setposition\crazymathtag\flushcrazymathbox}%
- \scratchdimen\noflines\lineheight
- \advance\scratchdimen-\lineheight
- \advance\scratchdimen+\strutheight
- \ifdim\scratchdimen>\zeropoint \else
- \scratchdimen\strutheight % todo : test for half lines
- \fi
- \ifconditional\halfcrazymathlines
- \advance\scratchdimen-.5\lineheight
- \fi
- \setbox\scratchbox\null
- \wd\scratchbox2\bodyfontsize
- \ht\scratchbox\scratchdimen
- \dp\scratchbox\strutdepth
- \normalvadjust
- {\forgetall
- \crazymathindent
- \iftracegridsnapping
- \setbox\scratchbox\hbox{\blue\ruledhbox{\box\scratchbox}}%
- \fi
- \box\scratchbox
- \endgraf
- % precaution: else we stick below the text bottom
- \ifconditional\halfcrazymathlines
- \allowbreak
- \else
- \vskip-\lineheight
- \vskip \lineheight
- \fi}%
- \else
- \hbox{\setposition\crazymathtag\flushcrazymathbox}%
- \fi
- \else
- \flushcrazymathbox
- \fi
- \else\if!!donea
- \flushcrazymathbox
- \else
- \mathematics{#2}%
- \fi\fi
- \endgroup}
-
-\let\tform\mathematics
-\let\gform\snappedinlineformula
-
-% test set:
-%
-% \startbuffer
-% Crazy math \gform {1+x} or \gform {\dorecurse {100} {1+} 1 =
-% 101} and even gore crazy \gform {2^{2^2}_{1_1}}
-% again\dorecurse {20} { and again} \gform {\sqrt {\frac
-% {x^{5^5}} {\frac {1} {2}}}} even gore\dorecurse {50} { and
-% gore} \tform {\dorecurse {12} {\gform {\sqrt {\frac
-% {x^{5^5}} {3}}}+\gform {\sqrt {\frac {x^{5^5}} {\frac {1}
-% {2}}}}+}x=10}\dorecurse{20} { super crazy math}: \tform
-% {\dorecurse {30} {\gform {\sqrt {\frac {x^{5^5}} {3}}}+
-% \gform {\sqrt {\frac {x^{5^5}} {\frac {1} {2}}}}+ }x = 10},
-% and we're\dorecurse {20} { done}!
-% \stopbuffer
-%
-% \setupcolors[state=start] \setuppapersize[S6][S6]
-%
-% \showgrid \tracegridsnappingtrue \showstruts
-%
-% \starttext
-% \setuplayout[grid=yes,lines=15]\getbuffer \page
-% \setuplayout[grid=yes,lines=16]\getbuffer \page
-% \setuplayout[grid=yes,lines=17]\getbuffer \page
-% \setuplayout[grid=yes,lines=18]\getbuffer \page
-% \setuplayout[grid=yes,lines=19]\getbuffer \page
-% \stoptext
-%
-% test
-%
-% \startregels
-% \gform[<]{35 \cdot p^{\frac{3}{4}} = 70}
-% \gform{12{,}4 \cdot d^3 = 200}
-% \gform{a \cdot x^b}.
-% \gform{12x^6 \cdot \negative 3x^4}
-% \gform{\frac{12x^6}{\negative 3x^4}}
-% \gform{(4x^2)^3}
-% \gform{4x \sqrt{x} \cdot 3x^2}
-% \gform{\frac{2x^4}{4x \sqrt{x}}}
-% \gform{y = a \cdot x^b}.
-% \gform{y_1 = \frac{15x^2}{x}}
-% \gform{y_2 = x \cdot \sqrt{x}}
-% \gform{y_3 = \frac{6x^3}{x^2}}
-% \gform[<]{y_4 = \left(2x^2\right)^{\frac{1}{2}}}
-% \gform{y_1 = \frac{4x^5}{x^2}}
-% \gform{y_2 = 4 \cdot \sqrt{x}}
-% \gform{y_3 = 4x^3}
-% \gform{y_4 = \frac{100x}{\sqrt{x}}}
-% \gform[<]{y_5 = 4 \cdot x^{\frac{1}{2}}}
-% \gform{y_6 = \frac{1}{2} x \cdot 4x^2}
-% \gform{y_7 = 2 \cdot x^3}
-% \gform{y_8 = 100 \cdot x^{\frac{1}{2}}}
-% \gform{4x^8 \cdot 8x^3}
-% \gform{\frac{4x^8}{8x^3}}
-% \gform{\left(\negative3x^4\right)^3}
-% \gform{x^3 \sqrt{x} \cdot 3x^2}
-% \gform{\frac{6x^3}{x^2 \sqrt{x}}}
-% \gform{\frac{6}{2x^4}}
-% \gform{\frac{1}{3x^6}}
-% \gform{\frac{12x^8}{4x^{10}}}
-% \gform{\frac{4}{\sqrt{x}}}
-% \gform{\frac{1}{2x \sqrt{x}}}
-% \gform{\frac{2{,}25}{p} = 0{,}35}
-% \gform{4{,}50 + \frac{300}{k} = 4{,}70}
-% \gform{\frac{1200}{k+12} - 42 = 6}
-% \stopregels
-
-%D \macros
-%D {enableautomath}
-%D
-%D The next one can be dangerous, but handy in controlled
-%D situations.
-
-\bgroup \catcode`\$=\active
-
-\gdef\enableautomath
- {\catcode`\$=\active
- \def$##1${\snappedinlineformula{##1}}}
-
-% \gdef\enableautomath
-% {\catcode`\$=\active
-% \def${\doifnextcharelse$\doautodmath\doautoimath}%
-% \def\doautoimath##1${\snappedinlineformula{##1}}%
-% \def\doautodmath$##1$${\startformula##1\stopformula}}
-
-\egroup
+\def\snappedinlineformula {\dosingleempty\dosnappedinlineformula}
+\def\dosnappedinlineformula[#1]#2{\mathematics{#2}}
+\let\tform \mathematics
+\let\gform \snappedinlineformula
+\let\enableautomath \relax
\protect \endinput
diff --git a/Master/texmf-dist/tex/context/base/math-int.mkiv b/Master/texmf-dist/tex/context/base/math-int.mkiv
index 8ac2d477613..2af471b5cb4 100644
--- a/Master/texmf-dist/tex/context/base/math-int.mkiv
+++ b/Master/texmf-dist/tex/context/base/math-int.mkiv
@@ -57,11 +57,14 @@
\definemathcommand [iiint] {\repeatintegral\plustwo }
\definemathcommand [iiiint] {\repeatintegral\plusthree}
+%def\integralrepeatsymbol{\intop}
+\def\integralrepeatsymbol{{\int}}
+
\def\repeatintegral#1%
{\scratchtoks\emptytoks
\let\dointlimits\donothing
\let\dodointlimits\intlimits
- \dorecurse{#1}{\appendtoks \intop \dointkern \to \scratchtoks}
+ \dorecurse{#1}{\appendtoks \integralrepeatsymbol \dointkern \to \scratchtoks}
\appendtoks \intop \dointlimits \dodointlimits \to \scratchtoks
\edef\dodorepeatintegral{\the\scratchtoks}%
\futurelet\next\dorepeatintegral}
diff --git a/Master/texmf-dist/tex/context/base/math-lan.mkiv b/Master/texmf-dist/tex/context/base/math-lan.mkiv
new file mode 100644
index 00000000000..1d313257885
--- /dev/null
+++ b/Master/texmf-dist/tex/context/base/math-lan.mkiv
@@ -0,0 +1,67 @@
+%D \module
+%D [ file=math-lan,
+%D version=2009.03.10,
+%D title=\CONTEXT\ Math Macros,
+%D subtitle=Language 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}{ConTeXt Math Macros / Language Support}
+
+\unprotect
+
+\setupmathlabeltext [\s!en] [arccos=arccos]
+\setupmathlabeltext [\s!en] [arcsin=arcsin]
+\setupmathlabeltext [\s!en] [arctan=arctan]
+\setupmathlabeltext [\s!en] [arg=arg]
+\setupmathlabeltext [\s!en] [cosh=cosh]
+\setupmathlabeltext [\s!en] [cos=cos]
+\setupmathlabeltext [\s!en] [coth=coth]
+\setupmathlabeltext [\s!en] [cot=cot]
+\setupmathlabeltext [\s!en] [csc=csc]
+\setupmathlabeltext [\s!en] [deg=deg]
+\setupmathlabeltext [\s!en] [det=det]
+\setupmathlabeltext [\s!en] [dim=dim]
+\setupmathlabeltext [\s!en] [exp=exp]
+\setupmathlabeltext [\s!en] [gcd=gcd]
+\setupmathlabeltext [\s!en] [hom=hom]
+\setupmathlabeltext [\s!en] [inf=inf]
+\setupmathlabeltext [\s!en] [injlim=inj\,lim]
+\setupmathlabeltext [\s!en] [ker=ker]
+\setupmathlabeltext [\s!en] [lg=lg]
+\setupmathlabeltext [\s!en] [liminf=lim\,inf]
+\setupmathlabeltext [\s!en] [limsup=lim\,sup]
+\setupmathlabeltext [\s!en] [lim=lim]
+\setupmathlabeltext [\s!en] [ln=ln]
+\setupmathlabeltext [\s!en] [log=log]
+\setupmathlabeltext [\s!en] [median=median]
+\setupmathlabeltext [\s!en] [max=max]
+\setupmathlabeltext [\s!en] [min=min]
+\setupmathlabeltext [\s!en] [mod=mod]
+\setupmathlabeltext [\s!en] [projlim=proj\,lim]
+\setupmathlabeltext [\s!en] [Pr=Pr]
+\setupmathlabeltext [\s!en] [sec=sec]
+\setupmathlabeltext [\s!en] [sinh=sinh]
+\setupmathlabeltext [\s!en] [sin=sin]
+\setupmathlabeltext [\s!en] [sup=sup]
+\setupmathlabeltext [\s!en] [tanh=tanh]
+\setupmathlabeltext [\s!en] [tan=tan]
+
+\setupmathlabeltext [\s!pl] [tg=tg]
+\setupmathlabeltext [\s!pl] [cot=ctg]
+\setupmathlabeltext [\s!pl] [ctg=ctg]
+\setupmathlabeltext [\s!pl] [arcsin=arc\,sin]
+\setupmathlabeltext [\s!pl] [arccos=arc\,cos]
+\setupmathlabeltext [\s!pl] [arctan=arc\,tg]
+\setupmathlabeltext [\s!pl] [arctg=arc\,tg]
+\setupmathlabeltext [\s!pl] [arcctg=arc\,ctg]
+
+\setupmathlabeltext [\s!nl] [gcd=ggd]
+\setupmathlabeltext [\s!nl] [lcm=kgv]
+
+\protect \endinput
diff --git a/Master/texmf-dist/tex/context/base/math-lbr.mkii b/Master/texmf-dist/tex/context/base/math-lbr.mkii
index 7ac7c3affd4..cf69eec1fbf 100644
--- a/Master/texmf-dist/tex/context/base/math-lbr.mkii
+++ b/Master/texmf-dist/tex/context/base/math-lbr.mkii
@@ -13,12 +13,12 @@
\unprotect
-\definefamilysynonym [lbr] [calligrapahy] [sy]
-\definefamilysynonym [lbr] [oldstyle] [mi]
+\definefamilysynonym [lbr] [calligraphy] [sy]
+\definefamilysynonym [lbr] [oldstyle] [mi]
-\definefamilysynonym [lbr] [blackboard] [ma]
-\definefamilysynonym [lbr] [ucgreek] [mb]
-\definefamilysynonym [lbr] [vargreek] [mi]
+\definefamilysynonym [lbr] [blackboard] [ma]
+\definefamilysynonym [lbr] [ucgreek] [mb]
+\definefamilysynonym [lbr] [vargreek] [mi]
\startmathcollection[lbr]
@@ -376,21 +376,52 @@
% we define the whole lot, although only a few differ (esp dot)
-\startmathcollection[lbr]
+% \startmathcollection[lbr]
+%
+% \definemathsymbol [acute] [accent] [tf] ["13] % mr -> tf
+% \definemathsymbol [grave] [accent] [tf] ["12] % mr -> tf
+% \definemathsymbol [ddot] [accent] [tf] ["7F] % mr -> tf
+% \definemathsymbol [tilde] [accent] [tf] ["7E] % mr -> tf
+% \definemathsymbol [bar] [accent] [tf] ["16] % mr -> tf
+% \definemathsymbol [breve] [accent] [tf] ["15] % mr -> tf
+% \definemathsymbol [check] [accent] [tf] ["14] % mr -> tf
+% \definemathsymbol [hat] [accent] [tf] ["5E] % mr -> tf
+% \definemathsymbol [vec] [accent] [mi] ["7E] % [ord]
+% \definemathsymbol [dot] [accent] [tf] ["05] % mr -> tf, 5F -> 05
+% \definemathsymbol [widetilde] [accent] [ex] ["65] % [ord]
+% \definemathsymbol [widehat] [accent] [ex] ["62] % [ord]
+%
+% \stopmathcollection
-\definemathsymbol [acute] [accent] [tf] ["13] % mr -> tf
-\definemathsymbol [grave] [accent] [tf] ["12] % mr -> tf
-\definemathsymbol [ddot] [accent] [tf] ["7F] % mr -> tf
-\definemathsymbol [tilde] [accent] [tf] ["7E] % mr -> tf
-\definemathsymbol [bar] [accent] [tf] ["16] % mr -> tf
-\definemathsymbol [breve] [accent] [tf] ["15] % mr -> tf
-\definemathsymbol [check] [accent] [tf] ["14] % mr -> tf
-\definemathsymbol [hat] [accent] [tf] ["5E] % mr -> tf
-\definemathsymbol [vec] [accent] [mi] ["7E] % [ord]
-\definemathsymbol [dot] [accent] [tf] ["05] % mr -> tf, 5F -> 05
-\definemathsymbol [widetilde] [accent] [ex] ["65] % [ord]
-\definemathsymbol [widehat] [accent] [ex] ["62] % [ord]
+\startmathcollection[lbr:texnansi]
+ \definemathsymbol [acute] [accent] [tf] ["13]
+ \definemathsymbol [grave] [accent] [tf] ["12]
+ \definemathsymbol [ddot] [accent] [tf] ["7F]
+ %definemathsymbol [ddot] [accent] [tf] ["A8] % both is OK
+ \definemathsymbol [tilde] [accent] [tf] ["7E]
+ %definemathsymbol [tilde] [accent] [tf] ["98] % both is OK
+ \definemathsymbol [bar] [accent] [tf] ["16]
+ \definemathsymbol [breve] [accent] [tf] ["15]
+ \definemathsymbol [check] [accent] [tf] ["14]
+ \definemathsymbol [hat] [accent] [tf] ["5E]
+ %definemathsymbol [hat] [accent] [tf] ["88] % both is OK
+ \definemathsymbol [dot] [accent] [tf] ["05]
+ % Why is mathring not defined??
+ \definemathsymbol [mathring] [accent] [tf] ["17]
+\stopmathcollection
+\startmathcollection[lbr:ec]
+ \definemathsymbol [acute] [accent] [tf] ["01]
+ \definemathsymbol [grave] [accent] [tf] ["00]
+ \definemathsymbol [ddot] [accent] [tf] ["04]
+ \definemathsymbol [tilde] [accent] [tf] ["03]
+ \definemathsymbol [bar] [accent] [tf] ["09]
+ \definemathsymbol [breve] [accent] [tf] ["08]
+ \definemathsymbol [check] [accent] [tf] ["07]
+ \definemathsymbol [hat] [accent] [tf] ["02]
+ \definemathsymbol [dot] [accent] [tf] ["0A]
+ % Why is mathring not defined??
+ \definemathsymbol [mathring] [accent] [tf] ["06]
\stopmathcollection
\def\LBRroot#1#2%
diff --git a/Master/texmf-dist/tex/context/base/math-map.lua b/Master/texmf-dist/tex/context/base/math-map.lua
index 0229790c2fb..2d34dc1c37b 100644
--- a/Master/texmf-dist/tex/context/base/math-map.lua
+++ b/Master/texmf-dist/tex/context/base/math-map.lua
@@ -1,6 +1,6 @@
if not modules then modules = { } end modules ['math-map'] = {
version = 1.001,
- comment = "companion to math-ini.tex",
+ comment = "companion to math-ini.mkiv",
author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
copyright = "PRAGMA ADE / ConTeXt Development Team",
license = "see context related readme files"
@@ -20,6 +20,11 @@ if not modules then modules = { } end modules ['math-map'] = {
-- maybe: script/scriptscript dynamic,
local type, next = type, next
+local floor = math.floor
+
+local texattribute = tex.attribute
+
+local trace_greek = false trackers.register("math.greek", function(v) trace_greek = v end)
mathematics = mathematics or { }
@@ -33,19 +38,24 @@ mathematics.alphabets = {
digits = 0x00030,
ucletters = 0x00041,
lcletters = 0x00061,
- symbols = {
- [0x0391]=0x0391, [0x0392]=0x0392, [0x0393]=0x0393, [0x0394]=0x0394, [0x0395]=0x0395,
- [0x0396]=0x0396, [0x0397]=0x0397, [0x0398]=0x0398, [0x0399]=0x0399, [0x039A]=0x039A,
- [0x039B]=0x039B, [0x039C]=0x039C, [0x039D]=0x039D, [0x039E]=0x039E, [0x039F]=0x039F,
- [0x03A0]=0x03A0, [0x03A1]=0x03A1, [0x03A3]=0x03A3, [0x03A4]=0x03A4, [0x03A5]=0x03A5,
- [0x03A6]=0x03A6, [0x03A7]=0x03A7, [0x03A8]=0x03A8, [0x03A9]=0x03A9, [0x03B1]=0x03B1,
- [0x03B2]=0x03B2, [0x03B3]=0x03B3, [0x03B4]=0x03B4, [0x03B5]=0x03B5, [0x03B6]=0x03B6,
- [0x03B7]=0x03B7, [0x03B8]=0x03B8, [0x03B9]=0x03B9, [0x03BA]=0x03BA, [0x03BB]=0x03BB,
- [0x03BC]=0x03BC, [0x03BD]=0x03BD, [0x03BE]=0x03BE, [0x03BF]=0x03BF, [0x03C0]=0x03C0,
- [0x03C1]=0x03C1, [0x03C2]=0x03C2, [0x03C3]=0x03C3, [0x03C4]=0x03C4, [0x03C5]=0x03C5,
- [0x03C6]=0x03C6, [0x03C7]=0x03C7, [0x03C8]=0x03C8, [0x03C9]=0x03C9, [0x03D1]=0x03D1,
- [0x03D5]=0x03D5, [0x03D6]=0x03D6, [0x03F0]=0x03F0, [0x03F1]=0x03F1, [0x03F4]=0x03F4,
- [0x03F5]=0x03F5, [0x2202]=0x2202, [0x2207]=0x2207,
+ ucgreek = {
+ [0x0391]=0x0391, [0x0392]=0x0392, [0x0393]=0x0393, [0x0394]=0x0394, [0x0395]=0x0395,
+ [0x0396]=0x0396, [0x0397]=0x0397, [0x0398]=0x0398, [0x0399]=0x0399, [0x039A]=0x039A,
+ [0x039B]=0x039B, [0x039C]=0x039C, [0x039D]=0x039D, [0x039E]=0x039E, [0x039F]=0x039F,
+ [0x03A0]=0x03A0, [0x03A1]=0x03A1, [0x03A3]=0x03A3, [0x03A4]=0x03A4, [0x03A5]=0x03A5,
+ [0x03A6]=0x03A6, [0x03A7]=0x03A7, [0x03A8]=0x03A8, [0x03A9]=0x03A9,
+ },
+ lcgreek = {
+ [0x03B1]=0x03B1, [0x03B2]=0x03B2, [0x03B3]=0x03B3, [0x03B4]=0x03B4, [0x03B5]=0x03B5,
+ [0x03B6]=0x03B6, [0x03B7]=0x03B7, [0x03B8]=0x03B8, [0x03B9]=0x03B9, [0x03BA]=0x03BA,
+ [0x03BB]=0x03BB, [0x03BC]=0x03BC, [0x03BD]=0x03BD, [0x03BE]=0x03BE, [0x03BF]=0x03BF,
+ [0x03C0]=0x03C0, [0x03C1]=0x03C1, [0x03C2]=0x03C2, [0x03C3]=0x03C3, [0x03C4]=0x03C4,
+ [0x03C5]=0x03C5, [0x03C6]=0x03C6, [0x03C7]=0x03C7, [0x03C8]=0x03C8, [0x03C9]=0x03C9,
+ [0x03D1]=0x03D1, [0x03D5]=0x03D5, [0x03D6]=0x03D6, [0x03F0]=0x03F0, [0x03F1]=0x03F1,
+ [0x03F4]=0x03F4, [0x03F5]=0x03F5,
+ },
+ symbols = {
+ [0x2202]=0x2202, [0x2207]=0x2207,
},
},
it = {
@@ -58,56 +68,71 @@ mathematics.alphabets = {
[0x00075]=0x1D462, [0x00076]=0x1D463, [0x00077]=0x1D464, [0x00078]=0x1D465, [0x00079]=0x1D466,
[0x0007A]=0x1D467,
},
- symbols = {
+ ucgreek = {
[0x0391]=0x1D6E2, [0x0392]=0x1D6E3, [0x0393]=0x1D6E4, [0x0394]=0x1D6E5, [0x0395]=0x1D6E6,
[0x0396]=0x1D6E7, [0x0397]=0x1D6E8, [0x0398]=0x1D6E9, [0x0399]=0x1D6EA, [0x039A]=0x1D6EB,
[0x039B]=0x1D6EC, [0x039C]=0x1D6ED, [0x039D]=0x1D6EE, [0x039E]=0x1D6EF, [0x039F]=0x1D6F0,
[0x03A0]=0x1D6F1, [0x03A1]=0x1D6F2, [0x03A3]=0x1D6F4, [0x03A4]=0x1D6F5, [0x03A5]=0x1D6F6,
- [0x03A6]=0x1D6F7, [0x03A7]=0x1D6F8, [0x03A8]=0x1D6F9, [0x03A9]=0x1D6FA, [0x03B1]=0x1D6FC,
- [0x03B2]=0x1D6FD, [0x03B3]=0x1D6FE, [0x03B4]=0x1D6FF, [0x03B5]=0x1D700, [0x03B6]=0x1D701,
- [0x03B7]=0x1D702, [0x03B8]=0x1D703, [0x03B9]=0x1D704, [0x03BA]=0x1D705, [0x03BB]=0x1D706,
- [0x03BC]=0x1D707, [0x03BD]=0x1D708, [0x03BE]=0x1D709, [0x03BF]=0x1D70A, [0x03C0]=0x1D70B,
- [0x03C1]=0x1D70C, [0x03C2]=0x1D70D, [0x03C3]=0x1D70E, [0x03C4]=0x1D70F, [0x03C5]=0x1D710,
- [0x03C6]=0x1D711, [0x03C7]=0x1D712, [0x03C8]=0x1D713, [0x03C9]=0x1D714, [0x03D1]=0x1D717,
- [0x03D5]=0x1D719, [0x03D6]=0x1D71B, [0x03F0]=0x1D718, [0x03F1]=0x1D71A, [0x03F4]=0x1D6F3,
- [0x03F5]=0x1D716, [0x2202]=0x1D715, [0x2207]=0x1D6FB,
+ [0x03A6]=0x1D6F7, [0x03A7]=0x1D6F8, [0x03A8]=0x1D6F9, [0x03A9]=0x1D6FA,
+ },
+ lcgreek = {
+ [0x03B1]=0x1D6FC, [0x03B2]=0x1D6FD, [0x03B3]=0x1D6FE, [0x03B4]=0x1D6FF, [0x03B5]=0x1D700,
+ [0x03B6]=0x1D701, [0x03B7]=0x1D702, [0x03B8]=0x1D703, [0x03B9]=0x1D704, [0x03BA]=0x1D705,
+ [0x03BB]=0x1D706, [0x03BC]=0x1D707, [0x03BD]=0x1D708, [0x03BE]=0x1D709, [0x03BF]=0x1D70A,
+ [0x03C0]=0x1D70B, [0x03C1]=0x1D70C, [0x03C2]=0x1D70D, [0x03C3]=0x1D70E, [0x03C4]=0x1D70F,
+ [0x03C5]=0x1D710, [0x03C6]=0x1D711, [0x03C7]=0x1D712, [0x03C8]=0x1D713, [0x03C9]=0x1D714,
+ [0x03D1]=0x1D717, [0x03D5]=0x1D719, [0x03D6]=0x1D71B, [0x03F0]=0x1D718, [0x03F1]=0x1D71A,
+ [0x03F4]=0x1D6F3, [0x03F5]=0x1D716,
+ },
+ symbols = {
+ [0x2202]=0x1D715, [0x2207]=0x1D6FB,
},
},
bf= {
digits = 0x1D7CE,
ucletters = 0x1D400,
lcletters = 0x1D41A,
- symbols = {
+ ucgreek = {
[0x0391]=0x1D6A8, [0x0392]=0x1D6A9, [0x0393]=0x1D6AA, [0x0394]=0x1D6AB, [0x0395]=0x1D6AC,
[0x0396]=0x1D6AD, [0x0397]=0x1D6AE, [0x0398]=0x1D6AF, [0x0399]=0x1D6B0, [0x039A]=0x1D6B1,
[0x039B]=0x1D6B2, [0x039C]=0x1D6B3, [0x039D]=0x1D6B4, [0x039E]=0x1D6B5, [0x039F]=0x1D6B6,
[0x03A0]=0x1D6B7, [0x03A1]=0x1D6B8, [0x03A3]=0x1D6BA, [0x03A4]=0x1D6BB, [0x03A5]=0x1D6BC,
- [0x03A6]=0x1D6BD, [0x03A7]=0x1D6BE, [0x03A8]=0x1D6BF, [0x03A9]=0x1D6C0, [0x03B1]=0x1D6C2,
- [0x03B2]=0x1D6C3, [0x03B3]=0x1D6C4, [0x03B4]=0x1D6C5, [0x03B5]=0x1D6C6, [0x03B6]=0x1D6C7,
- [0x03B7]=0x1D6C8, [0x03B8]=0x1D6C9, [0x03B9]=0x1D6CA, [0x03BA]=0x1D6CB, [0x03BB]=0x1D6CC,
- [0x03BC]=0x1D6CD, [0x03BD]=0x1D6CE, [0x03BE]=0x1D6CF, [0x03BF]=0x1D6D0, [0x03C0]=0x1D6D1,
- [0x03C1]=0x1D6D2, [0x03C2]=0x1D6D3, [0x03C3]=0x1D6D4, [0x03C4]=0x1D6D5, [0x03C5]=0x1D6D6,
- [0x03C6]=0x1D6D7, [0x03C7]=0x1D6D8, [0x03C8]=0x1D6D9, [0x03C9]=0x1D6DA, [0x03D1]=0x1D6DD,
- [0x03D5]=0x1D6DF, [0x03D6]=0x1D6E1, [0x03F0]=0x1D6DE, [0x03F1]=0x1D6E0, [0x03F4]=0x1D6B9,
- [0x03F5]=0x1D6DC, [0x2202]=0x1D6DB, [0x2207]=0x1D6C1,
+ [0x03A6]=0x1D6BD, [0x03A7]=0x1D6BE, [0x03A8]=0x1D6BF, [0x03A9]=0x1D6C0,
+ },
+ lcgreek = {
+ [0x03B1]=0x1D6C2, [0x03B2]=0x1D6C3, [0x03B3]=0x1D6C4, [0x03B4]=0x1D6C5, [0x03B5]=0x1D6C6,
+ [0x03B6]=0x1D6C7, [0x03B7]=0x1D6C8, [0x03B8]=0x1D6C9, [0x03B9]=0x1D6CA, [0x03BA]=0x1D6CB,
+ [0x03BB]=0x1D6CC, [0x03BC]=0x1D6CD, [0x03BD]=0x1D6CE, [0x03BE]=0x1D6CF, [0x03BF]=0x1D6D0,
+ [0x03C0]=0x1D6D1, [0x03C1]=0x1D6D2, [0x03C2]=0x1D6D3, [0x03C3]=0x1D6D4, [0x03C4]=0x1D6D5,
+ [0x03C5]=0x1D6D6, [0x03C6]=0x1D6D7, [0x03C7]=0x1D6D8, [0x03C8]=0x1D6D9, [0x03C9]=0x1D6DA,
+ [0x03D1]=0x1D6DD, [0x03D5]=0x1D6DF, [0x03D6]=0x1D6E1, [0x03F0]=0x1D6DE, [0x03F1]=0x1D6E0,
+ [0x03F4]=0x1D6B9, [0x03F5]=0x1D6DC,
+ },
+ symbols = {
+ [0x2202]=0x1D6DB, [0x2207]=0x1D6C1,
},
},
bi = {
ucletters = 0x1D468,
lcletters = 0x1D482,
- symbols = {
+ ucgreek = {
[0x0391]=0x1D71C, [0x0392]=0x1D71D, [0x0393]=0x1D71E, [0x0394]=0x1D71F, [0x0395]=0x1D720,
[0x0396]=0x1D721, [0x0397]=0x1D722, [0x0398]=0x1D723, [0x0399]=0x1D724, [0x039A]=0x1D725,
[0x039B]=0x1D726, [0x039C]=0x1D727, [0x039D]=0x1D728, [0x039E]=0x1D729, [0x039F]=0x1D72A,
[0x03A0]=0x1D72B, [0x03A1]=0x1D72C, [0x03A3]=0x1D72E, [0x03A4]=0x1D72F, [0x03A5]=0x1D730,
- [0x03A6]=0x1D731, [0x03A7]=0x1D732, [0x03A8]=0x1D733, [0x03A9]=0x1D734, [0x03B1]=0x1D736,
- [0x03B2]=0x1D737, [0x03B3]=0x1D738, [0x03B4]=0x1D739, [0x03B5]=0x1D73A, [0x03B6]=0x1D73B,
- [0x03B7]=0x1D73C, [0x03B8]=0x1D73D, [0x03B9]=0x1D73E, [0x03BA]=0x1D73F, [0x03BB]=0x1D740,
- [0x03BC]=0x1D741, [0x03BD]=0x1D742, [0x03BE]=0x1D743, [0x03BF]=0x1D744, [0x03C0]=0x1D745,
- [0x03C1]=0x1D746, [0x03C2]=0x1D747, [0x03C3]=0x1D748, [0x03C4]=0x1D749, [0x03C5]=0x1D74A,
- [0x03C6]=0x1D74B, [0x03C7]=0x1D74C, [0x03C8]=0x1D74D, [0x03C9]=0x1D74E, [0x03D1]=0x1D751,
- [0x03D5]=0x1D753, [0x03D6]=0x1D755, [0x03F0]=0x1D752, [0x03F1]=0x1D754, [0x03F4]=0x1D72D,
- [0x03F5]=0x1D750, [0x2202]=0x1D74F, [0x2207]=0x1D735,
+ [0x03A6]=0x1D731, [0x03A7]=0x1D732, [0x03A8]=0x1D733, [0x03A9]=0x1D734,
+ },
+ lcgreek = {
+ [0x03B1]=0x1D736, [0x03B2]=0x1D737, [0x03B3]=0x1D738, [0x03B4]=0x1D739, [0x03B5]=0x1D73A,
+ [0x03B6]=0x1D73B, [0x03B7]=0x1D73C, [0x03B8]=0x1D73D, [0x03B9]=0x1D73E, [0x03BA]=0x1D73F,
+ [0x03BB]=0x1D740, [0x03BC]=0x1D741, [0x03BD]=0x1D742, [0x03BE]=0x1D743, [0x03BF]=0x1D744,
+ [0x03C0]=0x1D745, [0x03C1]=0x1D746, [0x03C2]=0x1D747, [0x03C3]=0x1D748, [0x03C4]=0x1D749,
+ [0x03C5]=0x1D74A, [0x03C6]=0x1D74B, [0x03C7]=0x1D74C, [0x03C8]=0x1D74D, [0x03C9]=0x1D74E,
+ [0x03D1]=0x1D751, [0x03D5]=0x1D753, [0x03D6]=0x1D755, [0x03F0]=0x1D752, [0x03F1]=0x1D754,
+ [0x03F4]=0x1D72D, [0x03F5]=0x1D750,
+ },
+ symbols = {
+ [0x2202]=0x1D74F, [0x2207]=0x1D735,
},
},
},
@@ -125,37 +150,47 @@ mathematics.alphabets = {
digits = 0x1D7EC,
ucletters = 0x1D5D4,
lcletters = 0x1D5EE,
- symbols = {
+ ucgreek = {
[0x0391]=0x1D756, [0x0392]=0x1D757, [0x0393]=0x1D758, [0x0394]=0x1D759, [0x0395]=0x1D75A,
[0x0396]=0x1D75B, [0x0397]=0x1D75C, [0x0398]=0x1D75D, [0x0399]=0x1D75E, [0x039A]=0x1D75F,
[0x039B]=0x1D760, [0x039C]=0x1D761, [0x039D]=0x1D762, [0x039E]=0x1D763, [0x039F]=0x1D764,
[0x03A0]=0x1D765, [0x03A1]=0x1D766, [0x03A3]=0x1D768, [0x03A4]=0x1D769, [0x03A5]=0x1D76A,
- [0x03A6]=0x1D76B, [0x03A7]=0x1D76C, [0x03A8]=0x1D76D, [0x03A9]=0x1D76E, [0x03B1]=0x1D770,
- [0x03B2]=0x1D771, [0x03B3]=0x1D772, [0x03B4]=0x1D773, [0x03B5]=0x1D774, [0x03B6]=0x1D775,
- [0x03B7]=0x1D776, [0x03B8]=0x1D777, [0x03B9]=0x1D778, [0x03BA]=0x1D779, [0x03BB]=0x1D77A,
- [0x03BC]=0x1D77B, [0x03BD]=0x1D77C, [0x03BE]=0x1D77D, [0x03BF]=0x1D77E, [0x03C0]=0x1D77F,
- [0x03C1]=0x1D780, [0x03C2]=0x1D781, [0x03C3]=0x1D782, [0x03C4]=0x1D783, [0x03C5]=0x1D784,
- [0x03C6]=0x1D785, [0x03C7]=0x1D786, [0x03C8]=0x1D787, [0x03C9]=0x1D788, [0x03D1]=0x1D78B,
- [0x03D5]=0x1D78D, [0x03D6]=0x1D78F, [0x03F0]=0x1D78C, [0x03F1]=0x1D78E, [0x03F4]=0x1D767,
- [0x03F5]=0x1D78A, [0x2202]=0x1D789, [0x2207]=0x1D76F,
+ [0x03A6]=0x1D76B, [0x03A7]=0x1D76C, [0x03A8]=0x1D76D, [0x03A9]=0x1D76E,
+ },
+ lcgreek = {
+ [0x03B1]=0x1D770, [0x03B2]=0x1D771, [0x03B3]=0x1D772, [0x03B4]=0x1D773, [0x03B5]=0x1D774,
+ [0x03B6]=0x1D775, [0x03B7]=0x1D776, [0x03B8]=0x1D777, [0x03B9]=0x1D778, [0x03BA]=0x1D779,
+ [0x03BB]=0x1D77A, [0x03BC]=0x1D77B, [0x03BD]=0x1D77C, [0x03BE]=0x1D77D, [0x03BF]=0x1D77E,
+ [0x03C0]=0x1D77F, [0x03C1]=0x1D780, [0x03C2]=0x1D781, [0x03C3]=0x1D782, [0x03C4]=0x1D783,
+ [0x03C5]=0x1D784, [0x03C6]=0x1D785, [0x03C7]=0x1D786, [0x03C8]=0x1D787, [0x03C9]=0x1D788,
+ [0x03D1]=0x1D78B, [0x03D5]=0x1D78D, [0x03D6]=0x1D78F, [0x03F0]=0x1D78C, [0x03F1]=0x1D78E,
+ [0x03F4]=0x1D767, [0x03F5]=0x1D78A,
+ },
+ symbols = {
+ [0x2202]=0x1D789, [0x2207]=0x1D76F,
},
},
bi = {
ucletters = 0x1D63C,
lcletters = 0x1D656,
- symbols = {
+ ucgreek = {
[0x0391]=0x1D790, [0x0392]=0x1D791, [0x0393]=0x1D792, [0x0394]=0x1D793, [0x0395]=0x1D794,
[0x0396]=0x1D795, [0x0397]=0x1D796, [0x0398]=0x1D797, [0x0399]=0x1D798, [0x039A]=0x1D799,
[0x039B]=0x1D79A, [0x039C]=0x1D79B, [0x039D]=0x1D79C, [0x039E]=0x1D79D, [0x039F]=0x1D79E,
[0x03A0]=0x1D79F, [0x03A1]=0x1D7A0, [0x03A3]=0x1D7A2, [0x03A4]=0x1D7A3, [0x03A5]=0x1D7A4,
- [0x03A6]=0x1D7A5, [0x03A7]=0x1D7A6, [0x03A8]=0x1D7A7, [0x03A9]=0x1D7A8, [0x03B1]=0x1D7AA,
- [0x03B2]=0x1D7AB, [0x03B3]=0x1D7AC, [0x03B4]=0x1D7AD, [0x03B5]=0x1D7AE, [0x03B6]=0x1D7AF,
- [0x03B7]=0x1D7B0, [0x03B8]=0x1D7B1, [0x03B9]=0x1D7B2, [0x03BA]=0x1D7B3, [0x03BB]=0x1D7B4,
- [0x03BC]=0x1D7B5, [0x03BD]=0x1D7B6, [0x03BE]=0x1D7B7, [0x03BF]=0x1D7B8, [0x03C0]=0x1D7B9,
- [0x03C1]=0x1D7BA, [0x03C2]=0x1D7BB, [0x03C3]=0x1D7BC, [0x03C4]=0x1D7BD, [0x03C5]=0x1D7BE,
- [0x03C6]=0x1D7BF, [0x03C7]=0x1D7C0, [0x03C8]=0x1D7C1, [0x03C9]=0x1D7C2, [0x03D1]=0x1D7C5,
- [0x03D5]=0x1D7C7, [0x03D6]=0x1D7C9, [0x03F0]=0x1D7C6, [0x03F1]=0x1D7C8, [0x03F4]=0x1D7A1,
- [0x03F5]=0x1D7C4, [0x2202]=0x1D7C3, [0x2207]=0x1D7A9,
+ [0x03A6]=0x1D7A5, [0x03A7]=0x1D7A6, [0x03A8]=0x1D7A7, [0x03A9]=0x1D7A8,
+ },
+ lcgreek = {
+ [0x03B1]=0x1D7AA, [0x03B2]=0x1D7AB, [0x03B3]=0x1D7AC, [0x03B4]=0x1D7AD, [0x03B5]=0x1D7AE,
+ [0x03B6]=0x1D7AF, [0x03B7]=0x1D7B0, [0x03B8]=0x1D7B1, [0x03B9]=0x1D7B2, [0x03BA]=0x1D7B3,
+ [0x03BB]=0x1D7B4, [0x03BC]=0x1D7B5, [0x03BD]=0x1D7B6, [0x03BE]=0x1D7B7, [0x03BF]=0x1D7B8,
+ [0x03C0]=0x1D7B9, [0x03C1]=0x1D7BA, [0x03C2]=0x1D7BB, [0x03C3]=0x1D7BC, [0x03C4]=0x1D7BD,
+ [0x03C5]=0x1D7BE, [0x03C6]=0x1D7BF, [0x03C7]=0x1D7C0, [0x03C8]=0x1D7C1, [0x03C9]=0x1D7C2,
+ [0x03D1]=0x1D7C5, [0x03D5]=0x1D7C7, [0x03D6]=0x1D7C9, [0x03F0]=0x1D7C6, [0x03F1]=0x1D7C8,
+ [0x03F4]=0x1D7A1, [0x03F5]=0x1D7C4,
+ },
+ symbols = {
+ [0x2202]=0x1D7C3, [0x2207]=0x1D7A9,
},
},
},
@@ -178,6 +213,15 @@ mathematics.alphabets = {
[0x0005A]=0x02124,
},
lcletters = 0x1D552,
+ lcgreek = { -- gamma pi
+ [0x03B3]=0x0213C, [0x03C0]=0x0213D,
+ },
+ ucgreek = { -- Gamma pi
+ [0x0393]=0x0213E, [0x03A0]=0x0213F,
+ },
+ symbols = { -- sum
+ [0x2211]=0x02140,
+ },
},
},
fraktur = { -- ok
@@ -224,16 +268,16 @@ mathematics.alphabets = {
}
local alphabets = mathematics.alphabets
-local attribs = { }
+local mathremap = { }
for alphabet, styles in next, alphabets do
for style, data in next, styles do
-- let's keep the long names (for tracing)
- local n = #attribs+1
+ local n = #mathremap + 1
data.attribute = n
data.alphabet = alphabet
data.style = style
- attribs[n] = data
+ mathremap[n] = data
end
end
@@ -244,33 +288,50 @@ alphabets.regular.it.digits = alphabets.regular.tf.digits
alphabets.regular.bi.digits = alphabets.regular.bf.digits
alphabets.sansserif.tf.symbols = alphabets.regular.tf.symbols
+alphabets.sansserif.tf.lcgreek = alphabets.regular.tf.lcgreek
+alphabets.sansserif.tf.ucgreek = alphabets.regular.tf.ucgreek
alphabets.sansserif.tf.digits = alphabets.regular.tf.digits
alphabets.sansserif.it.symbols = alphabets.regular.tf.symbols
+alphabets.sansserif.it.lcgreek = alphabets.regular.tf.lcgreek
+alphabets.sansserif.it.ucgreek = alphabets.regular.tf.ucgreek
alphabets.sansserif.bi.digits = alphabets.regular.bf.digits
alphabets.monospaced.tf.symbols = alphabets.sansserif.tf.symbols
+alphabets.monospaced.tf.lcgreek = alphabets.sansserif.tf.lcgreek
+alphabets.monospaced.tf.ucgreek = alphabets.sansserif.tf.ucgreek
alphabets.monospaced.it = alphabets.sansserif.tf
alphabets.monospaced.bf = alphabets.sansserif.tf
alphabets.monospaced.bi = alphabets.sansserif.bf
-alphabets.blackboard.tf.symbols = alphabets.regular.tf.symbols
+alphabets.blackboard.tf.symbols = table.merge(alphabets.regular.tf.symbols, alphabets.blackboard.tf.symbols)
+alphabets.blackboard.tf.lcgreek = table.merge(alphabets.regular.tf.lcgreek, alphabets.blackboard.tf.lcgreek)
+alphabets.blackboard.tf.ucgreek = table.merge(alphabets.regular.tf.ucgreek, alphabets.blackboard.tf.ucgreek)
+
alphabets.blackboard.it = alphabets.blackboard.tf
alphabets.blackboard.bf = alphabets.blackboard.tf
alphabets.blackboard.bi = alphabets.blackboard.bf
alphabets.fraktur.tf.digits = alphabets.regular.tf.digits
alphabets.fraktur.tf.symbols = alphabets.regular.tf.symbols
+alphabets.fraktur.tf.lcgreek = alphabets.regular.tf.lcgreek
+alphabets.fraktur.tf.ucgreek = alphabets.regular.tf.ucgreek
alphabets.fraktur.bf.digits = alphabets.regular.bf.digits
alphabets.fraktur.bf.symbols = alphabets.regular.bf.symbols
+alphabets.fraktur.bf.lcgreek = alphabets.regular.bf.lcgreek
+alphabets.fraktur.bf.ucgreek = alphabets.regular.bf.ucgreek
alphabets.fraktur.it = alphabets.fraktur.tf
alphabets.fraktur.bi = alphabets.fraktur.bf
-alphabets.script.tf.digits = alphabets.regular.tf.digits
-alphabets.script.tf.symbols = alphabets.regular.tf.symbols
-alphabets.script.bf.digits = alphabets.regular.bf.digits
-alphabets.script.bf.symbols = alphabets.regular.bf.symbols
-alphabets.script.it = alphabets.script.tf
-alphabets.script.bi = alphabets.script.bf
+alphabets.script.tf.digits = alphabets.regular.tf.digits
+alphabets.script.tf.symbols = alphabets.regular.tf.symbols
+alphabets.script.tf.lcgreek = alphabets.regular.tf.lcgreek
+alphabets.script.tf.ucgreek = alphabets.regular.tf.ucgreek
+alphabets.script.bf.digits = alphabets.regular.bf.digits
+alphabets.script.bf.symbols = alphabets.regular.bf.symbols
+alphabets.script.bf.lcgreek = alphabets.regular.bf.lcgreek
+alphabets.script.bf.ucgreek = alphabets.regular.bf.ucgreek
+alphabets.script.it = alphabets.script.tf
+alphabets.script.bi = alphabets.script.bf
alphabets.tt = alphabets.monospaced
alphabets.ss = alphabets.sansserif
@@ -284,70 +345,80 @@ alphabets.type = alphabets.monospaced
alphabets.teletype = alphabets.monospaced
function mathematics.to_a_style(attribute)
- local r = attribs[attribute]
+ local r = mathremap[attribute]
return r and r.style or "tf"
end
function mathematics.to_a_name(attribute)
- local r = attribs[attribute]
+ local r = mathremap[attribute]
return r and r.alphabet or "regular"
end
-- of course we could do some div/mod trickery instead
---~ function mathematics.sync_a_both(attribute,alphabet,style)
---~ local data = alphabets[alphabet or "regular"] or alphabets.regular
---~ data = data[style or "tf"] or data.tf
---~ return data and data.attribute or attribute
---~ end
-
---~ function mathematics.sync_a_style(attribute,style)
---~ local r = attribs[attribute]
---~ local alphabet = r and r.alphabet or "regular"
---~ local data = alphabets[alphabet][style]
---~ return data and data.attribute or attribute
---~ end
-
---~ function mathematics.sync_a_name(attribute,alphabet)
---~ local r = attribs[attribute]
---~ local style = r and r.style or "tf"
---~ local data = alphabets[alphabet][style]
---~ return data and data.attribute or attribute
---~ end
-
-local mathalph = attributes.private("mathalph")
-
-local texattribute = tex.attribute
+local mathalphabet = attributes.private("mathalphabet")
function mathematics.sync_a_both(alphabet,style)
local data = alphabets[alphabet or "regular"] or alphabets.regular
data = data[style or "tf"] or data.tf
- texattribute[mathalph] = data and data.attribute or texattribute[mathalph]
+ texattribute[mathalphabet] = data and data.attribute or texattribute[mathalphabet]
end
function mathematics.sync_a_style(style)
- local r = attribs[attribute]
+--~ local r = mathremap[mathalphabet]
+ local r = mathremap[texattribute[mathalphabet]]
local alphabet = r and r.alphabet or "regular"
local data = alphabets[alphabet][style]
- texattribute[mathalph] = data and data.attribute or texattribute[mathalph]
+ texattribute[mathalphabet] = data and data.attribute or texattribute[mathalphabet]
end
function mathematics.sync_a_name(alphabet)
- local r = attribs[attribute]
+--~ local r = mathremap[mathalphabet]
+ local r = mathremap[texattribute[mathalphabet]]
local style = r and r.style or "tf"
local data = alphabets[alphabet][style]
- texattribute[mathalph] = data and data.attribute or texattribute[mathalph]
+ texattribute[mathalphabet] = data and data.attribute or texattribute[mathalphabet]
end
-local issymbol = mathematics.alphabets.regular.tf.symbols
+local issymbol = mathematics.alphabets.regular.tf.symbols
+local islcgreek = mathematics.alphabets.regular.tf.lcgreek
+local isucgreek = mathematics.alphabets.regular.tf.ucgreek
+
+local remapping = {
+ [1] = { what = "unchanged" }, -- upright
+ [2] = { what = "upright", it = "tf", bi = "bf" }, -- upright
+ [3] = { what = "italic", tf = "it", bf = "bi" }, -- italic
+}
-function mathematics.remap_alphabets(attribute,char)
- -- we could use a map[attribute][char] => newchar but first we have
- -- to finish the table
- local offset = attribs[attribute]
- if offset then
+function mathematics.remap_alphabets(char,mathalphabet,mathgreek)
+ if mathgreek > 0 then
+ local lc, uc = floor(mathgreek/10), mathgreek % 10 -- 2 == upright 3 == italic
+ if lc > 1 or uc > 1 then
+ local islc, isuc = islcgreek[char] and lc, isucgreek[char] and uc
+ if islc or isuc then
+ local r = mathremap[mathalphabet] -- what if 0
+ local alphabet = r and r.alphabet or "regular"
+ local style = r and r.style or "tf"
+ if trace_greek then
+ logs.report("math","before: char: %05X, alphabet: %s %s, lcgreek: %s, ucgreek: %s",char,alphabet,style,remapping[lc].what,remapping[uc].what)
+ end
+ local s = remapping[islc or isuc][style]
+ if s then
+ local data = alphabets[alphabet][s]
+ mathalphabet, style = data and data.attribute or mathalphabet, s
+ end
+ if trace_greek then
+ logs.report("math","after : char: %05X, alphabet: %s %s, lcgreek: %s, ucgreek: %s",char,alphabet,style,remapping[lc].what,remapping[uc].what)
+ end
+ end
+ end
+ end
+ if mathalphabet > 0 then
local newchar
- if char >= 0x030 and char <= 0x039 then
+ local offset = mathremap[mathalphabet]
+ if not offset then
+ -- nothing to remap
+ elseif char >= 0x030 and char <= 0x039 then
local o = offset.digits
newchar = (type(o) == "table" and (o[char] or char)) or (char - 0x030 + o)
elseif char >= 0x041 and char <= 0x05A then
@@ -356,6 +427,10 @@ function mathematics.remap_alphabets(attribute,char)
elseif char >= 0x061 and char <= 0x07A then
local o = offset.lcletters
newchar = (type(o) == "table" and (o[char] or char)) or (char - 0x061 + o)
+ elseif islcgreek[char] then
+ newchar = offset.lcgreek[char]
+ elseif isucgreek[char] then
+ newchar = offset.ucgreek[char]
elseif issymbol[char] then
newchar = offset.symbols[char]
end
diff --git a/Master/texmf-dist/tex/context/base/math-noa.lua b/Master/texmf-dist/tex/context/base/math-noa.lua
index db1a5b63896..02bbe0a6299 100644
--- a/Master/texmf-dist/tex/context/base/math-noa.lua
+++ b/Master/texmf-dist/tex/context/base/math-noa.lua
@@ -1,6 +1,6 @@
if not modules then modules = { } end modules ['math-noa'] = {
version = 1.001,
- comment = "companion to math-ini.tex",
+ comment = "companion to math-ini.mkiv",
author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
copyright = "PRAGMA ADE / ConTeXt Development Team",
license = "see context related readme files"
@@ -16,7 +16,7 @@ local set_attribute = node.set_attribute
local has_attribute = node.has_attribute
local mlist_to_hlist = node.mlist_to_hlist
local font_of_family = node.family_font
-local fontdata = fonts.ids
+local fontdata = fonts.identifiers
local format, rep = string.format, string.rep
local utfchar, utfbyte = utf.char, utf.byte
@@ -89,7 +89,7 @@ local function process(start,what,n)
if n then n = n + 1 else n = 0 end
while start do
if trace_processing then
- texio.write_nl(format("%s%s",rep(" ",n or 0),tostring(start)))
+ logs.report("math","%s%s",rep(" ",n or 0),tostring(start))
end
local id = start.id
local proc = what[id]
@@ -140,7 +140,8 @@ noads.process = process
-- character remapping
-local attribute = attributes.private("mathalph")
+local mathalphabet = attributes.private("mathalphabet")
+local mathgreek = attributes.private("mathgreek")
noads.processors.relocate = { }
@@ -151,14 +152,47 @@ end
local remap_alphabets = mathematics.remap_alphabets
local fcs = fonts.color.set
+-- we can have a global famdata == fonts.famdata and chrdata == fonts.chrdata
+
+--~ This does not work out well, as there are no fallbacks. Ok, we could
+--~ define a poor mans simplify mechanism.
+--~
+--~ local function checked(pointer)
+--~ local char = pointer.char
+--~ local fam = pointer.fam
+--~ local id = font_of_family(fam)
+--~ local tfmdata = fontdata[id]
+--~ local tc = tfmdata and tfmdata.characters
+--~ if not tc[char] then
+--~ local specials = characters.data[char].specials
+--~ if specials and (specials[1] == "char" or specials[1] == "font") then
+--~ newchar = specials[#specials]
+--~ if trace_remapping then
+--~ report_remap("fallback",id,char,newchar)
+--~ end
+--~ if trace_analyzing then
+--~ fcs(pointer,"font:isol")
+--~ end
+--~ pointer.char = newchar
+--~ return true
+--~ end
+--~ end
+--~ end
+
noads.processors.relocate[math_char] = function(pointer)
- local a = has_attribute(pointer,attribute)
- if a and a > 0 then
- local fam = pointer.fam
- set_attribute(pointer,attribute,0)
+ local g = has_attribute(pointer,mathgreek) or 0
+ local a = has_attribute(pointer,mathalphabet) or 0
+ if a > 0 or g > 0 then
+ if a > 0 then
+ set_attribute(pointer,mathgreek,0)
+ end
+ if g > 0 then
+ set_attribute(pointer,mathalphabet,0)
+ end
local char = pointer.char
- local newchar = remap_alphabets(a,char)
+ local newchar = remap_alphabets(char,a,g)
if newchar then
+ local fam = pointer.fam
local id = font_of_family(fam)
local tfmdata = fontdata[id]
if tfmdata and tfmdata.characters[newchar] then -- we could probably speed this up
@@ -169,11 +203,15 @@ noads.processors.relocate[math_char] = function(pointer)
fcs(pointer,"font:isol")
end
pointer.char = newchar
- return
+ return true
elseif trace_remapping then
report_remap("char",id,char,newchar," fails")
end
+ else
+ -- return checked(pointer)
end
+ else
+ -- return checked(pointer)
end
if trace_analyzing then
fcs(pointer,"font:medi")
@@ -207,15 +245,15 @@ end
-- todo: just replace the character by an ord noad
-- and remove the right delimiter as well
-local attribute = attributes.private("mathsize")
+local mathsize = attributes.private("mathsize")
noads.processors.resize = { }
noads.processors.resize[math_fence] = function(pointer)
if pointer.subtype == 1 then -- left
- local a = has_attribute(pointer,attribute)
+ local a = has_attribute(pointer,mathsize)
if a and a > 0 then
- set_attribute(pointer,attribute,0)
+ set_attribute(pointer,mathsize,0)
local d = pointer.delim
local df = d.small_fam
local id = font_of_family(df)
@@ -234,7 +272,7 @@ end
-- respacing
-local attribute = attributes.private("mathpunc")
+local mathpunctuation = attributes.private("mathpunctuation")
noads.processors.respace = { }
@@ -244,9 +282,9 @@ local chardata = characters.data
noads.processors.respace[math_noad] = function(pointer)
if pointer.subtype == noad_ord then
- local a = has_attribute(pointer,attribute)
+ local a = has_attribute(pointer,mathpunctuation)
if a and a > 0 then
- set_attribute(pointer,attribute,0)
+ set_attribute(pointer,mathpunctuation,0)
local current_nucleus = pointer.nucleus
if current_nucleus.id == math_char then
local current_char = current_nucleus.char
@@ -304,8 +342,10 @@ end
tasks.new (
"math",
{
+ "before",
"normalizers",
"builders",
+ "after",
}
)
@@ -320,12 +360,10 @@ function nodes.processors.mlist_to_hlist(head,style,penalties)
return head, done
end
-callback.register('mlist_to_hlist',nodes.processors.mlist_to_hlist)
+callbacks.register('mlist_to_hlist',nodes.processors.mlist_to_hlist,"preprocessing math list")
-- tracing
statistics.register("math processing time", function()
- if statistics.elapsedindeed(noads) then
- return format("%s seconds", statistics.elapsedtime(noads))
- end
+ return statistics.elapsedseconds(noads)
end)
diff --git a/Master/texmf-dist/tex/context/base/math-pln.mkiv b/Master/texmf-dist/tex/context/base/math-pln.mkiv
index 40d73b2280e..ab584f10a32 100644
--- a/Master/texmf-dist/tex/context/base/math-pln.mkiv
+++ b/Master/texmf-dist/tex/context/base/math-pln.mkiv
@@ -269,7 +269,7 @@
&\kern-\displaywidth\rlap{$\@lign##$}\tabskip\displaywidth\crcr
#1\crcr}}
-% temporary here
+% temporary here (weird code)
% \startcatcodetable \mthcatcodes
% \setcatcodetable\ctxcatcodes
diff --git a/Master/texmf-dist/tex/context/base/math-run.mkii b/Master/texmf-dist/tex/context/base/math-run.mkii
index afe5b18b47f..6bc4bf4d5d1 100644
--- a/Master/texmf-dist/tex/context/base/math-run.mkii
+++ b/Master/texmf-dist/tex/context/base/math-run.mkii
@@ -44,29 +44,37 @@
\ifdim\wd2>\dimen2 \dimen2=\wd2 \fi}
\def\dodefinemathcharacter[##1][##2][##3][##4][##5][##6]{}
\def\dodefinemathcommand [##1][##2][##3]##4{}
- \readsysfile{\f!mathprefix tex}\donothing\donothing
- \readsysfile{\f!mathprefix ams}\donothing\donothing
- \edef\encwidth{\the\dimen0}
- \dimen0=\hsize
- \advance\dimen0 2em
- \advance\dimen2 2em
- \ifcase\showmathmodern\or\advance\dimen2 4em\fi
- \divide \dimen0 by \dimen2 \advance\dimen0 1sp
- \edef\enccols{\number\dimen0}
- \startcolumns[\c!n=\enccols,\c!distance=2em]
- \def\dodefinemathsymbol[##1][##2][##3][##4][##5][##6]%
- {%\localcolortrue
- %\color
- % [math \purefamilyhex{##3}]
- {\hbox
- {\ifcase\showmathmodern\or
- \hbox to \encwidth{\modern\let\mathcollection\nomathcollection\mathematics{\getvalue{##1}{}{}{}}\hss}%
- \fi
- \hbox to \encwidth{\mathematics{\getvalue{##1}{}{}{}}\hss}%
- \hbox to 1em{\tttf\purefamilyhex{##3}\hss}##1}\par}}
- \readsysfile{\f!mathprefix tex}\donothing\donothing
- \readsysfile{\f!mathprefix ams}\donothing\donothing
- \stopcolumns
+ \readsysfile{\f!mathprefix tex.mkii}\!!doneatrue\!!doneafalse
+ \readsysfile{\f!mathprefix ams.mkii}\!!donebtrue\!!donebfalse
+ \if!!donea
+ \if!!doneb
+ \edef\encwidth{\the\dimen0}
+ \dimen0=\hsize
+ \advance\dimen0 2em
+ \advance\dimen2 2em
+ \ifcase\showmathmodern\or\advance\dimen2 4em\fi
+ \divide \dimen0 by \dimen2 \advance\dimen0 1sp
+ \edef\enccols{\number\dimen0}
+ \startcolumns[\c!n=\enccols,\c!distance=2em]
+ \def\dodefinemathsymbol[##1][##2][##3][##4][##5][##6]%
+ {%\localcolortrue
+ %\color
+ % [math \purefamilyhex{##3}]
+ {\hbox
+ {\ifcase\showmathmodern\or
+ \hbox to \encwidth{\modern\let\mathcollection\nomathcollection\mathematics{\getvalue{##1}{}{}{}}\hss}%
+ \fi
+ \hbox to \encwidth{\mathematics{\getvalue{##1}{}{}{}}\hss}%
+ \hbox to 1em{\tttf\purefamilyhex{##3}\hss}##1}\par}}
+ \readsysfile{\f!mathprefix tex.mkii}\donothing\donothing
+ \readsysfile{\f!mathprefix ams.mkii}\donothing\donothing
+ \stopcolumns
+ \else
+ \par \tttf no chars in \f!mathprefix ams\par
+ \fi
+ \else
+ \par \tttf no chars in \f!mathprefix tex\par
+ \fi
\stoptextrule
\egroup}
diff --git a/Master/texmf-dist/tex/context/base/math-scr.mkiv b/Master/texmf-dist/tex/context/base/math-scr.mkiv
index 43355679f45..eb1db4714e3 100644
--- a/Master/texmf-dist/tex/context/base/math-scr.mkiv
+++ b/Master/texmf-dist/tex/context/base/math-scr.mkiv
@@ -22,108 +22,28 @@
%D subscript mode. We want however a bit more control than
%D normally provided, and therefore provide \type {\super}
%D and \type{sub}.
+%D
+%D The grid snapping has been removed.
\global\let\normalsuper=^
\global\let\normalsuber=_
-\newcount\supersubmode
-
-\newevery\everysupersub \EverySuperSub
+\ifdefined\supersubmode \else \newcount\supersubmode \fi
+\ifdefined\newevery \else \everysupersub \EverySuperSub \fi
\appendtoks \advance\supersubmode \plusone \to \everysupersub
-\appendtoks
- \gridsupsubstyle
-\to \everysupersub
-
-\appendtoks
- \doifelse\@@mtsize\v!small
- {\let\gridsupsubstyle \scriptscriptstyle
- \let\gridsupsubbodyfont \setsmallbodyfont}%
- {\let\gridsupsubstyle \scriptstyle
- \let\gridsupsubbodyfont \relax}%
-\to \everysetuptextformulas
-
\setuptextformulas
[\c!size=\v!normal]
-\def\dogridsupsub#1#2%
- {\begingroup
- \setbox\nextbox\iftracegridsnapping\ruledhbox\else\hbox\fi
- {\gridsupsubbodyfont
- $\strut^{\the\everysupersub#1}_{\the\everysupersub#2}$}%
- \nextboxht\strutheight
- \nextboxdp\strutdepth
- \flushnextbox
- \endgroup}
-
-\def\gridsupsub
- {\ifconditional\crazymathsnapping
- \ifgridsnapping
- \@EAEAEA\dogridsupsub
- \else
- \@EAEAEA\normalsupsub
- \fi
- \else
- \@EA\normalsupsub
- \fi}
-
\def\normalsupsub#1#2%
{^{\the\everysupersub#1}_{\the\everysupersub#2}}
-\appendtoks
- \let\gridsupsubstyle \relax
- \let\gridsupsubbodyfont\relax
- \let\gridsupsub \normalsupsub
-\to \everydisplay
-
\def\super#1{^{\the\everysupersub#1}}
\def\suber#1{_{\the\everysupersub#1}}
\def\supsub#1#2{\super{#1}\suber{#2}}
\def\subsup#1#2{\suber{#1}\super{#2}}
-%\def\super#1{\gridsupsub{#1}{}} %
-%\def\suber#1{\gridsupsub{}{#1}} %
-%
-%\def\supsub#1#2{\gridsupsub{#1}{#2}}
-%\def\subsup#1#2{\gridsupsub{#2}{#1}}
-
-\def\gridsuper#1{\gridsupsub{#1}{}}
-\def\gridsuber#1{\gridsupsub{}{#1}}
-
-% \let\sup\super % math char
-% \let\sub\suber
-
-% test set:
-%
-% \startbuffer
-% \sform{x\frac{1}{2}}
-% \sform{x\sup{\frac{1}{2}} + x\sup{2} + 2}
-% \sform{x\supsub{\frac{1}{2}}{\frac{1}{2}} + x\sup{2} + 2}
-% \stopbuffer
-%
-% \typebuffer
-%
-% \startlines
-% \getbuffer
-% \stoplines
-%
-% \startbuffer
-% $x\frac{1}{2}$
-% $x\sup{\frac{1}{2}} + x^2 + 2$
-% $x\supsub{\frac{1}{2}}{\frac{1}{2}} + x^2 + 2$
-% \stopbuffer
-%
-% \typebuffer
-%
-% \start
-% \enablesupersub
-% \enableautomath
-% \startlines
-% \getbuffer
-% \stoplines
-% \stop
-
%D \macros
%D {enablesupersub,enablesimplesupersub}
%D
diff --git a/Master/texmf-dist/tex/context/base/math-tex.mkii b/Master/texmf-dist/tex/context/base/math-tex.mkii
index c833db9561a..8f34a190e22 100644
--- a/Master/texmf-dist/tex/context/base/math-tex.mkii
+++ b/Master/texmf-dist/tex/context/base/math-tex.mkii
@@ -180,6 +180,8 @@
\stopmathcollection
+\let\normalmatharg\arg % todo: maybe automatically
+
\startmathcollection[default]
\definemathcommand [integers] {\mfunction{Z}}
diff --git a/Master/texmf-dist/tex/context/base/math-vfu.lua b/Master/texmf-dist/tex/context/base/math-vfu.lua
index fb5113be45b..5023e6b4d65 100644
--- a/Master/texmf-dist/tex/context/base/math-vfu.lua
+++ b/Master/texmf-dist/tex/context/base/math-vfu.lua
@@ -1,13 +1,14 @@
if not modules then modules = { } end modules ['math-vfu'] = {
version = 1.001,
- comment = "companion to math-ini.tex",
+ comment = "companion to math-ini.mkiv",
author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
copyright = "PRAGMA ADE / ConTeXt Development Team",
license = "see context related readme files"
}
-- All these math vectors .. thanks to Aditya and Mojca they become
--- better and better.
+-- better and better. If you have problems with math fonts or miss
+-- characters report it to the ConTeXt mailing list.
local type, next = type, next
@@ -23,8 +24,7 @@ fonts.vf.math.optional = false
local push, pop, back = { "push" }, { "pop" }, { "slot", 1, 0x2215 }
-local function negate(main,unicode,basecode)
- local characters = main.characters
+local function negate(main,characters,id,size,unicode,basecode)
if not characters[unicode] then
local basechar = characters[basecode]
if basechar then
@@ -53,8 +53,7 @@ end
--~ \Umathchardef\bracelu="0 "1 "FF07C
--~ \Umathchardef\braceru="0 "1 "FF07D
-local function brace(main,unicode,first,rule,left,right,rule,last)
- local characters = main.characters
+local function brace(main,characters,id,size,unicode,first,rule,left,right,rule,last)
if not characters[unicode] then
characters[unicode] = {
horiz_variants = {
@@ -69,24 +68,25 @@ local function brace(main,unicode,first,rule,left,right,rule,last)
end
end
-local function arrow(main,unicode,arrow,minus,isleft)
- if isleft then
- t = {
- { extender = 0, glyph = arrow },
- { extender = 1, glyph = minus },
- }
- else
- t = {
- { extender = 0, glyph = minus },
- { extender = 1, glyph = arrow },
- }
+local function arrow(main,characters,id,size,unicode,arrow,minus,isleft)
+ if characters[unicode] then
+ if isleft then
+ t = {
+ { extender = 0, glyph = arrow },
+ { extender = 1, glyph = minus },
+ }
+ else
+ t = {
+ { extender = 0, glyph = minus },
+ { extender = 1, glyph = arrow },
+ }
+ end
+ --~ main.characters[unicode] = { horiz_variants = t }
+ characters[unicode].horiz_variants = t
end
---~ main.characters[unicode] = { horiz_variants = t }
- main.characters[unicode].horiz_variants = t
end
-local function parent(main,unicode,first,rule,last)
- local characters = main.characters
+local function parent(main,characters,id,size,unicode,first,rule,last)
if not characters[unicode] then
characters[unicode] = {
horiz_variants = {
@@ -100,13 +100,13 @@ end
local push, pop, step = { "push" }, { "pop" }, 0.2 -- 0.1 is nicer but gives larger files
-local function make(main,id,size,n,m)
- local characters = main.characters
- local xu = main.parameters.x_height + 0.3*size
- local xd = 0.3*size
- local old, upslot, dnslot, uprule, dnrule = 0xFF000+n, 0xFF100+n, 0xFF200+n, 0xFF300+m, 0xFF400+m
+local function make(main,characters,id,size,n,m)
+ local old = 0xFF000+n
local c = characters[old]
if c then
+ local upslot, dnslot, uprule, dnrule = 0xFF100+n, 0xFF200+n, 0xFF300+m, 0xFF400+m
+ local xu = main.parameters.x_height + 0.3*size
+ local xd = 0.3*size
local w, h, d = c.width, c.height, c.depth
local thickness = h - d
local rulewidth = step*size -- we could use an overlap
@@ -127,120 +127,167 @@ local function make(main,id,size,n,m)
end
end
-local function minus(main,id,size,unicode)
- local characters = main.characters
- local mu = size/18
+local function minus(main,characters,id,size,unicode)
local minus = characters[0x002D]
- local width = minus.width - 5*mu
- characters[unicode] = {
- width = width, height = minus.height, depth = minus.depth,
- commands = { push, { "right", -3*mu }, { "slot", id, 0x002D }, pop }
- }
+ if minus then
+ local mu = size/18
+ local width = minus.width - 5*mu
+ characters[unicode] = {
+ width = width, height = minus.height, depth = minus.depth,
+ commands = { push, { "right", -3*mu }, { "slot", id, 0x002D }, pop }
+ }
+ end
end
-local function dots(main,id,size,unicode)
- local characters = main.characters
+local function dots(main,characters,id,size,unicode)
local c = characters[0x002E]
- local w, h, d = c.width, c.height, c.depth
- local mu = size/18
- local right3mu = { "right", 3*mu }
- local right1mu = { "right", 1*mu }
- local up1size = { "down", -.1*size }
- local up4size = { "down", -.4*size }
- local up7size = { "down", -.7*size }
- local right2muw = { "right", 2*mu + w }
- local slot = { "slot", id, 0x002E }
- if unicode == 0x22EF then
- local c = characters[0x022C5]
- if c then
- local w, h, d = c.width, c.height, c.depth
- local slot = { "slot", id, 0x022C5 }
+ if c then
+ local w, h, d = c.width, c.height, c.depth
+ local mu = size/18
+ local right3mu = { "right", 3*mu }
+ local right1mu = { "right", 1*mu }
+ local up1size = { "down", -.1*size }
+ local up4size = { "down", -.4*size }
+ local up7size = { "down", -.7*size }
+ local right2muw = { "right", 2*mu + w }
+ local slot = { "slot", id, 0x002E }
+ if unicode == 0x22EF then
+ local c = characters[0x022C5]
+ if c then
+ local w, h, d = c.width, c.height, c.depth
+ local slot = { "slot", id, 0x022C5 }
+ characters[unicode] = {
+ width = 3*w + 2*3*mu, height = h, depth = d,
+ commands = { push, slot, right3mu, slot, right3mu, slot, pop }
+ }
+ end
+ elseif unicode == 0x22EE then
+ -- weird height !
+ characters[unicode] = {
+ width = w, height = h+(1.4)*size, depth = 0,
+ commands = { push, push, slot, pop, up4size, push, slot, pop, up4size, slot, pop }
+ }
+ elseif unicode == 0x22F1 then
+ characters[unicode] = {
+ width = 3*w + 6*size/18, height = 1.5*size, depth = 0,
+ commands = {
+ push,
+ right1mu,
+ push, up7size, slot, pop,
+ right2muw,
+ push, up4size, slot, pop,
+ right2muw,
+ push, up1size, slot, pop,
+ right1mu,
+ pop
+ }
+ }
+ elseif unicode == 0x22F0 then
+ characters[unicode] = {
+ width = 3*w + 6*size/18, height = 1.5*size, depth = 0,
+ commands = {
+ push,
+ right1mu,
+ push, up1size, slot, pop,
+ right2muw,
+ push, up4size, slot, pop,
+ right2muw,
+ push, up7size, slot, pop,
+ right1mu,
+ pop
+ }
+ }
+ else
characters[unicode] = {
width = 3*w + 2*3*mu, height = h, depth = d,
commands = { push, slot, right3mu, slot, right3mu, slot, pop }
}
end
- elseif unicode == 0x22EE then
- -- weird height !
- characters[unicode] = {
- width = w, height = h+(1.4)*size, depth = 0,
- commands = { push, push, slot, pop, up4size, push, slot, pop, up4size, slot, pop }
- }
- elseif unicode == 0x22F1 then
- characters[unicode] = {
- width = 3*w + 6*size/18, height = 1.5*size, depth = 0,
- commands = {
- push,
- right1mu,
- push, up7size, slot, pop,
- right2muw,
- push, up4size, slot, pop,
- right2muw,
- push, up1size, slot, pop,
- right1mu,
- pop
- }
- }
- elseif unicode == 0x22F0 then
+ end
+end
+
+local function vertbar(main,characters,id,size,parent,scale,unicode)
+ local cp = characters[parent]
+ if cp then
+ local sc = scale * size
+ local pc = { "slot", id, parent }
characters[unicode] = {
- width = 3*w + 6*size/18, height = 1.5*size, depth = 0,
+ width = cp.width,
+ height = cp.height + sc,
+ depth = cp.depth + sc,
commands = {
- push,
- right1mu,
- push, up1size, slot, pop,
- right2muw,
- push, up4size, slot, pop,
- right2muw,
- push, up7size, slot, pop,
- right1mu,
- pop
- }
- }
- else
- characters[unicode] = {
- width = 3*w + 2*3*mu, height = h, depth = d,
- commands = { push, slot, right3mu, slot, right3mu, slot, pop }
+ push, { "down", -sc }, pc, pop,
+ push, { "down", sc }, pc, pop,
+ pc,
+ },
+ next = cp.next -- can be extensible
}
+ cp.next = unicode
end
end
function fonts.vf.math.alas(main,id,size)
+ local characters = main.characters
for i=0x7A,0x7D do
- make(main,id,size,i,1)
+ make(main,characters,id,size,i,1)
end
- brace (main,0x23DE,0xFF17A,0xFF301,0xFF17D,0xFF17C,0xFF301,0xFF17B)
- brace (main,0x23DF,0xFF27C,0xFF401,0xFF27B,0xFF27A,0xFF401,0xFF27D)
- parent(main,0x23DC,0xFF17A,0xFF301,0xFF17B)
- parent(main,0x23DD,0xFF27C,0xFF401,0xFF27D)
- negate(main,0x2260,0x003D)
- dots(main,id,size,0x2026) -- ldots
- dots(main,id,size,0x22EE) -- vdots
- dots(main,id,size,0x22EF) -- cdots
- dots(main,id,size,0x22F1) -- ddots
- dots(main,id,size,0x22F0) -- udots
- minus(main,id,size,0xFF501)
- arrow(main,0x2190,0xFE190,0xFF501,true) -- left
- arrow(main,0x2192,0xFE192,0xFF501,false) -- right
+ brace (main,characters,id,size,0x23DE,0xFF17A,0xFF301,0xFF17D,0xFF17C,0xFF301,0xFF17B)
+ brace (main,characters,id,size,0x23DF,0xFF27C,0xFF401,0xFF27B,0xFF27A,0xFF401,0xFF27D)
+ parent (main,characters,id,size,0x23DC,0xFF17A,0xFF301,0xFF17B)
+ parent (main,characters,id,size,0x23DD,0xFF27C,0xFF401,0xFF27D)
+ negate (main,characters,id,size,0x2260,0x003D)
+ dots (main,characters,id,size,0x2026) -- ldots
+ dots (main,characters,id,size,0x22EE) -- vdots
+ dots (main,characters,id,size,0x22EF) -- cdots
+ dots (main,characters,id,size,0x22F1) -- ddots
+ dots (main,characters,id,size,0x22F0) -- udots
+ minus (main,characters,id,size,0xFF501)
+ arrow (main,characters,id,size,0x2190,0xFE190,0xFF501,true) -- left
+ arrow (main,characters,id,size,0x2192,0xFE192,0xFF501,false) -- right
+ vertbar(main,characters,id,size,0x0007C,0.10,0xFF601) -- big : 0.85 bodyfontsize
+ vertbar(main,characters,id,size,0xFF601,0.30,0xFF602) -- Big : 1.15 bodyfontsize
+ vertbar(main,characters,id,size,0xFF602,0.30,0xFF603) -- bigg : 1.45 bodyfontsize
+ vertbar(main,characters,id,size,0xFF603,0.30,0xFF604) -- Bigg : 1.75 bodyfontsize
+ vertbar(main,characters,id,size,0x02225,0.10,0xFF605)
+ vertbar(main,characters,id,size,0xFF605,0.30,0xFF606)
+ vertbar(main,characters,id,size,0xFF606,0.30,0xFF607)
+ vertbar(main,characters,id,size,0xFF607,0.30,0xFF608)
end
-local reverse -- index -> unicode
+local unique = 0 -- testcase: \startTEXpage \math{!\text{-}\text{-}\text{-}} \stopTEXpage
-function fonts.basecopy(tfmtable)
+function fonts.basecopy(tfmtable,name)
+ local characters, parameters, fullname = tfmtable.characters, tfmtable.parameters, tfmtable.fullname
local t, c, p = { }, { }, { }
for k, v in next, tfmtable do
t[k] = v
end
- for k, v in next, tfmtable.characters do
- c[k] = v
+ if characters then
+ for k, v in next, characters do
+ c[k] = v
+ end
+ t.characters = c
+ else
+ logs.report("math virtual","font %s has no characters",name)
+ end
+ if parameters then
+ for k, v in next, parameters do
+ p[k] = v
+ end
+ t.parameters = p
+ else
+ logs.report("math virtual","font %s has no parameters",name)
end
- for k, v in next, tfmtable.parameters do
- p[k] = v
+ -- tricky ... what if fullname does not exist
+ if fullname then
+ unique = unique + 1
+ t.fullname = fullname .. "-" .. unique
end
- t.characters, t.parameters = c, p
return t
end
local reported = { }
+local reverse -- index -> unicode
function fonts.vf.math.define(specification,set)
if not reverse then
@@ -257,7 +304,6 @@ function fonts.vf.math.define(specification,set)
local size = specification.size -- given size
local fnt, lst, main = { }, { }, nil
local start = (trace_virtual or trace_timings) and os.clock()
---~ texio.write_nl("defining font " .. name .. " " .. size)
local okset, n = { }, 0
for s=1,#set do
local ss = set[s]
@@ -285,10 +331,14 @@ function fonts.vf.math.define(specification,set)
end
end
-- beware, fnt[1] is already passed to tex (we need to make a simple copy then .. todo)
- main = fonts.basecopy(fnt[1])
+ main = fonts.basecopy(fnt[1],name)
main.name, main.fonts, main.virtualized, main.math_parameters = name, lst, true, { }
local characters, descriptions = main.characters, main.descriptions
- main.parameters.x_height = main.parameters.x_height or 0
+ local mp = main.parameters
+ if mp then
+ mp.x_height = mp.x_height or 0
+ end
+ local already_reported = false
for s=1,n do
local ss, fs = okset[s], fnt[s]
if not fs then
@@ -297,34 +347,38 @@ function fonts.vf.math.define(specification,set)
-- skip, redundant
else
local mm, fp = main.math_parameters, fs.parameters
- if ss.extension then
- mm.math_x_height = fp.x_height or 0 -- math_x_height height of x
- mm.default_rule_thickness = fp[ 8] or 0 -- default_rule_thickness thickness of \over bars
- mm.big_op_spacing1 = fp[ 9] or 0 -- big_op_spacing1 minimum clearance above a displayed op
- mm.big_op_spacing2 = fp[10] or 0 -- big_op_spacing2 minimum clearance below a displayed op
- mm.big_op_spacing3 = fp[11] or 0 -- big_op_spacing3 minimum baselineskip above displayed op
- mm.big_op_spacing4 = fp[12] or 0 -- big_op_spacing4 minimum baselineskip below displayed op
- mm.big_op_spacing5 = fp[13] or 0 -- big_op_spacing5 padding above and below displayed limits
- -- logs.report("math virtual","loading and virtualizing font %s at size %s, setting ex parameters",name,size)
- elseif ss.parameters then
- main.parameters.x_height = fp.x_height or main.parameters.x_height
- mm.x_height = mm.x_height or fp.x_height or 0 -- x_height height of x
- mm.num1 = fp[ 8] or 0 -- num1 numerator shift-up in display styles
- mm.num2 = fp[ 9] or 0 -- num2 numerator shift-up in non-display, non-\atop
- mm.num3 = fp[10] or 0 -- num3 numerator shift-up in non-display \atop
- mm.denom1 = fp[11] or 0 -- denom1 denominator shift-down in display styles
- mm.denom2 = fp[12] or 0 -- denom2 denominator shift-down in non-display styles
- mm.sup1 = fp[13] or 0 -- sup1 superscript shift-up in uncramped display style
- mm.sup2 = fp[14] or 0 -- sup2 superscript shift-up in uncramped non-display
- mm.sup3 = fp[15] or 0 -- sup3 superscript shift-up in cramped styles
- mm.sub1 = fp[16] or 0 -- sub1 subscript shift-down if superscript is absent
- mm.sub2 = fp[17] or 0 -- sub2 subscript shift-down if superscript is present
- mm.sup_drop = fp[18] or 0 -- sup_drop superscript baseline below top of large box
- mm.sub_drop = fp[19] or 0 -- sub_drop subscript baseline below bottom of large box
- mm.delim1 = fp[20] or 0 -- delim1 size of \atopwithdelims delimiters in display styles
- mm.delim2 = fp[21] or 0 -- delim2 size of \atopwithdelims delimiters in non-displays
- mm.axis_height = fp[22] or 0 -- axis_height height of fraction lines above the baseline
- -- logs.report("math virtual","loading and virtualizing font %s at size %s, setting sy parameters",name,size)
+ if mm and fp and mp then
+ if ss.extension then
+ mm.math_x_height = fp.x_height or 0 -- math_x_height height of x
+ mm.default_rule_thickness = fp[ 8] or 0 -- default_rule_thickness thickness of \over bars
+ mm.big_op_spacing1 = fp[ 9] or 0 -- big_op_spacing1 minimum clearance above a displayed op
+ mm.big_op_spacing2 = fp[10] or 0 -- big_op_spacing2 minimum clearance below a displayed op
+ mm.big_op_spacing3 = fp[11] or 0 -- big_op_spacing3 minimum baselineskip above displayed op
+ mm.big_op_spacing4 = fp[12] or 0 -- big_op_spacing4 minimum baselineskip below displayed op
+ mm.big_op_spacing5 = fp[13] or 0 -- big_op_spacing5 padding above and below displayed limits
+ -- logs.report("math virtual","loading and virtualizing font %s at size %s, setting ex parameters",name,size)
+ elseif ss.parameters then
+ mp.x_height = fp.x_height or mp.x_height
+ mm.x_height = mm.x_height or fp.x_height or 0 -- x_height height of x
+ mm.num1 = fp[ 8] or 0 -- num1 numerator shift-up in display styles
+ mm.num2 = fp[ 9] or 0 -- num2 numerator shift-up in non-display, non-\atop
+ mm.num3 = fp[10] or 0 -- num3 numerator shift-up in non-display \atop
+ mm.denom1 = fp[11] or 0 -- denom1 denominator shift-down in display styles
+ mm.denom2 = fp[12] or 0 -- denom2 denominator shift-down in non-display styles
+ mm.sup1 = fp[13] or 0 -- sup1 superscript shift-up in uncramped display style
+ mm.sup2 = fp[14] or 0 -- sup2 superscript shift-up in uncramped non-display
+ mm.sup3 = fp[15] or 0 -- sup3 superscript shift-up in cramped styles
+ mm.sub1 = fp[16] or 0 -- sub1 subscript shift-down if superscript is absent
+ mm.sub2 = fp[17] or 0 -- sub2 subscript shift-down if superscript is present
+ mm.sup_drop = fp[18] or 0 -- sup_drop superscript baseline below top of large box
+ mm.sub_drop = fp[19] or 0 -- sub_drop subscript baseline below bottom of large box
+ mm.delim1 = fp[20] or 0 -- delim1 size of \atopwithdelims delimiters in display styles
+ mm.delim2 = fp[21] or 0 -- delim2 size of \atopwithdelims delimiters in non-displays
+ mm.axis_height = fp[22] or 0 -- axis_height height of fraction lines above the baseline
+ -- logs.report("math virtual","loading and virtualizing font %s at size %s, setting sy parameters",name,size)
+ end
+ else
+ logs.report("math virtual","font %s, no parameters set",name)
end
local vectorname = ss.vector
if vectorname then
@@ -337,14 +391,19 @@ function fonts.vf.math.define(specification,set)
for unicode, index in next, vector do
local fci = fc[index]
if not fci then
- local fontname = fs.name
+ local fontname = fs.name or "unknown"
local rf = reported[fontname]
if not rf then rf = { } reported[fontname] = rf end
local rv = rf[vectorname]
if not rv then rv = { } rf[vectorname] = rv end
local ru = rv[unicode]
if not ru then
- logs.report("math virtual", "unicode point U+%05X has no index %04X in vector %s for font %s",unicode,index,vectorname,fontname)
+ if trace_virtual then
+ logs.report("math virtual", "unicode point U+%05X has no index %04X in vector %s for font %s",unicode,index,vectorname,fontname)
+ elseif not already_reported then
+ logs.report("math virtual", "the mapping is incomplete for '%s' at %s",name,number.topoints(size))
+ already_reported = true
+ end
rv[unicode] = true
end
else
@@ -466,35 +525,44 @@ function fonts.vf.math.define(specification,set)
--~ end
else
local fci = fc[index]
- local ref = si[index]
- if not ref then
- ref = { { 'slot', s, index } }
- si[index] = ref
- end
- local kerns = fci.kerns
- if kerns then
- local krn = { }
- for k=1,#kerns do
- krn[offset + k] = kerns[k]
- end
- characters[unicode] = {
- width = fci.width,
- height = fci.height,
- depth = fci.depth,
- italic = fci.italic,
- commands = ref,
- kerns = krn,
- next = offset + index,
- }
+ if not fci then
+--~ characters[unicode] = {
+--~ width = 0,
+--~ height = 0,
+--~ depth = 0,
+--~ index = 0,
+--~ }
else
- characters[unicode] = {
- width = fci.width,
- height = fci.height,
- depth = fci.depth,
- italic = fci.italic,
- commands = ref,
- next = offset + index,
- }
+ local ref = si[index]
+ if not ref then
+ ref = { { 'slot', s, index } }
+ si[index] = ref
+ end
+ local kerns = fci.kerns
+ if kerns then
+ local krn = { }
+ for k=1,#kerns do
+ krn[offset + k] = kerns[k]
+ end
+ characters[unicode] = {
+ width = fci.width,
+ height = fci.height,
+ depth = fci.depth,
+ italic = fci.italic,
+ commands = ref,
+ kerns = krn,
+ next = offset + index,
+ }
+ else
+ characters[unicode] = {
+ width = fci.width,
+ height = fci.height,
+ depth = fci.depth,
+ italic = fci.italic,
+ commands = ref,
+ next = offset + index,
+ }
+ end
end
end
end
@@ -505,14 +573,18 @@ function fonts.vf.math.define(specification,set)
end
end
lst[#lst+1] = { id = font.nextid(), size = size }
- fonts.vf.math.alas(main,#lst,size)
+ if mp then -- weak catch
+ fonts.vf.math.alas(main,#lst,size)
+ end
if trace_virtual or trace_timings then
logs.report("math virtual","loading and virtualizing font %s at size %s took %0.3f seconds",name,size,os.clock()-start)
end
main.has_italic = true
main.type = "virtual" -- not needed
mathematics.scaleparameters(main,main,1)
-main.nomath = false
+ main.nomath = false
+--~ print(table.serialize(characters[0x222B]))
+--~ print(main.fontname,table.serialize(main.MathConstants))
return main
end
@@ -643,6 +715,10 @@ fonts.enc.math["tex-mr"] = {
-- [0x000A8] = 0x7F, -- [math]ddot
}
+fonts.enc.math["tex-mr-missing"] = {
+ [0x02236] = 0x3A, -- colon
+}
+
fonts.enc.math["tex-mi"] = {
[0x1D6E4] = 0x00, -- Gamma
[0x1D6E5] = 0x01, -- Delta
@@ -688,10 +764,10 @@ fonts.enc.math["tex-mi"] = {
[0x1D711] = 0x27, -- varphi (the other way around)
[0x021BC] = 0x28, -- leftharpoonup
[0x021BD] = 0x29, -- leftharpoondown
- [0x021C0] = 0x2A, -- righttharpoonup
+ [0x021C0] = 0x2A, -- rightharpoonup
[0x021C1] = 0x2B, -- rightharpoondown
- -- 0x2C, -- lhook (hook for combining arrows)
- -- 0x2D, -- rhook (hook for combining arrows)
+ [0xFE322] = 0x2C, -- lhook (hook for combining arrows)
+ [0xFE323] = 0x2D, -- rhook (hook for combining arrows)
[0x022B3] = 0x2E, -- triangleright (TODO: which one is right?)
[0x022B2] = 0x2F, -- triangleleft (TODO: which one is right?)
-- [0x00041] = 0x30, -- 0
@@ -712,84 +788,90 @@ fonts.enc.math["tex-mi"] = {
[0x0003E] = 0x3E, -- >
[0x022C6] = 0x3F, -- star
[0x02202] = 0x40, -- partial
--- [0x00041] = 0x41, -- A
+--
+ [0x0266D] = 0x5B, -- flat
+ [0x0266E] = 0x5C, -- natural
+ [0x0266F] = 0x5D, -- sharp
+ [0x02323] = 0x5E, -- smile
+ [0x02322] = 0x5F, -- frown
+ [0x02113] = 0x60, -- ell
+--
+ [0x1D6A4] = 0x7B, -- imath (TODO: also 0131)
+ [0x1D6A5] = 0x7C, -- jmath (TODO: also 0237)
+ [0x02118] = 0x7D, -- wp
+ [0x020D7] = 0x7E, -- vec (TODO: not sure)
+-- 0x7F, -- (no idea what that could be)
+}
+
+
+fonts.enc.math["tex-it"] = {
+-- [0x1D434] = 0x41, -- A
[0x1D6E2] = 0x41, -- Alpha
--- [0x00042] = 0x42, -- B
+-- [0x1D435] = 0x42, -- B
[0x1D6E3] = 0x42, -- Beta
--- [0x00043] = 0x43, -- C
--- [0x00044] = 0x44, -- D
--- [0x00045] = 0x45, -- E
+-- [0x1D436] = 0x43, -- C
+-- [0x1D437] = 0x44, -- D
+-- [0x1D438] = 0x45, -- E
[0x1D6E6] = 0x45, -- Epsilon
--- [0x00046] = 0x46, -- F
--- [0x00047] = 0x47, -- G
--- [0x00048] = 0x48, -- H
+-- [0x1D439] = 0x46, -- F
+-- [0x1D43A] = 0x47, -- G
+-- [0x1D43B] = 0x48, -- H
[0x1D6E8] = 0x48, -- Eta
--- [0x00049] = 0x49, -- I
+-- [0x1D43C] = 0x49, -- I
[0x1D6EA] = 0x49, -- Iota
--- [0x0004A] = 0x4A, -- J
--- [0x0004B] = 0x4B, -- K
+-- [0x1D43D] = 0x4A, -- J
+-- [0x1D43E] = 0x4B, -- K
[0x1D6EB] = 0x4B, -- Kappa
--- [0x0004C] = 0x4C, -- L
--- [0x0004D] = 0x4D, -- M
+-- [0x1D43F] = 0x4C, -- L
+-- [0x1D440] = 0x4D, -- M
[0x1D6ED] = 0x4D, -- Mu
--- [0x0004E] = 0x4E, -- N
+-- [0x1D441] = 0x4E, -- N
[0x1D6EE] = 0x4E, -- Nu
--- [0x0004F] = 0x4F, -- O
+-- [0x1D442] = 0x4F, -- O
[0x1D6F0] = 0x4F, -- Omicron
--- [0x00050] = 0x50, -- P
+-- [0x1D443] = 0x50, -- P
[0x1D6F2] = 0x50, -- Rho
--- [0x00051] = 0x51, -- Q
--- [0x00052] = 0x52, -- R
--- [0x00053] = 0x53, -- S
--- [0x00054] = 0x54, -- T
+-- [0x1D444] = 0x51, -- Q
+-- [0x1D445] = 0x52, -- R
+-- [0x1D446] = 0x53, -- S
+-- [0x1D447] = 0x54, -- T
[0x1D6F5] = 0x54, -- Tau
--- [0x00055] = 0x55, -- U
--- [0x00056] = 0x56, -- V
--- [0x00057] = 0x57, -- W
--- [0x00058] = 0x58, -- X
+-- [0x1D448] = 0x55, -- U
+-- [0x1D449] = 0x56, -- V
+-- [0x1D44A] = 0x57, -- W
+-- [0x1D44B] = 0x58, -- X
[0x1D6F8] = 0x58, -- Chi
--- [0x00059] = 0x59, -- Y
--- [0x0005A] = 0x5A, -- Z
- [0x1D6E7] = 0x5A, -- Zeta
- [0x0266D] = 0x5B, -- flat
- [0x0266E] = 0x5C, -- natural
- [0x0266F] = 0x5D, -- sharp
- [0x02323] = 0x5E, -- smile
- [0x02322] = 0x5F, -- frown
- [0x02113] = 0x60, -- ell
--- [0x00061] = 0x61, -- a
--- [0x00062] = 0x62, -- b
--- [0x00063] = 0x63, -- c
--- [0x00064] = 0x64, -- d
--- [0x00065] = 0x65, -- e
--- [0x00066] = 0x66, -- f
--- [0x00067] = 0x67, -- g
--- [0x00068] = 0x68, -- h
- [0x0210E] = 0x68, -- plant constant
--- [0x00069] = 0x69, -- i
--- [0x0006A] = 0x6A, -- j
--- [0x0006B] = 0x6B, -- k
--- [0x0006C] = 0x6C, -- l
--- [0x0006D] = 0x6D, -- m
--- [0x0006E] = 0x6E, -- n
--- [0x0006F] = 0x6F, -- o
+-- [0x1D44C] = 0x59, -- Y
+-- [0x1D44D] = 0x5A, -- Z
+--
+-- [0x1D44E] = 0x61, -- a
+-- [0x1D44F] = 0x62, -- b
+-- [0x1D450] = 0x63, -- c
+-- [0x1D451] = 0x64, -- d
+-- [0x1D452] = 0x65, -- e
+-- [0x1D453] = 0x66, -- f
+-- [0x1D454] = 0x67, -- g
+-- [0x1D455] = 0x68, -- h
+ [0x0210E] = 0x68, -- Planck constant (h)
+-- [0x1D456] = 0x69, -- i
+-- [0x1D457] = 0x6A, -- j
+-- [0x1D458] = 0x6B, -- k
+-- [0x1D459] = 0x6C, -- l
+-- [0x1D45A] = 0x6D, -- m
+-- [0x1D45B] = 0x6E, -- n
+-- [0x1D45C] = 0x6F, -- o
[0x1D70A] = 0x6F, -- omicron
--- [0x00070] = 0x70, -- p
--- [0x00071] = 0x71, -- q
--- [0x00072] = 0x72, -- r
--- [0x00073] = 0x73, -- s
--- [0x00074] = 0x74, -- t
--- [0x00075] = 0x75, -- u
--- [0x00076] = 0x76, -- v
--- [0x00077] = 0x77, -- w
--- [0x00078] = 0x78, -- x
--- [0x00079] = 0x79, -- y
--- [0x0007A] = 0x7A, -- z
- [0x1D6A4] = 0x7B, -- imath (TODO: also 0131)
- [0x1D6A5] = 0x7C, -- jmath (TODO: also 0237)
- [0x02118] = 0x7D, -- wp
- [0x020D7] = 0x7E, -- vec (TODO: not sure)
--- 0x7F, -- (no idea what that could be)
+-- [0x1D45D] = 0x70, -- p
+-- [0x1D45E] = 0x71, -- q
+-- [0x1D45F] = 0x72, -- r
+-- [0x1D460] = 0x73, -- s
+-- [0x1D461] = 0x74, -- t
+-- [0x1D462] = 0x75, -- u
+-- [0x1D463] = 0x76, -- v
+-- [0x1D464] = 0x77, -- w
+-- [0x1D465] = 0x78, -- x
+-- [0x1D466] = 0x79, -- y
+-- [0x1D467] = 0x7A, -- z
}
fonts.enc.math["tex-ss"] = { }
@@ -1279,12 +1361,12 @@ fonts.enc.math["tex-fraktur"] = {
-- now that all other vectors are defined ...
-fonts.vf.math.set_letters(fonts.enc.math, "tex-mi", 0x1D434, 0x1D44E)
-fonts.vf.math.set_letters(fonts.enc.math, "tex-ss", 0x1D5A0, 0x1D5BA)
-fonts.vf.math.set_letters(fonts.enc.math, "tex-tt", 0x1D670, 0x1D68A)
-fonts.vf.math.set_letters(fonts.enc.math, "tex-bf", 0x1D400, 0x1D41A)
-fonts.vf.math.set_letters(fonts.enc.math, "tex-bi", 0x1D468, 0x1D482)
-fonts.vf.math.set_letters(fonts.enc.math, "tex-fraktur", 0x1D504, 0x1D51E)
+fonts.vf.math.set_letters(fonts.enc.math, "tex-it", 0x1D434, 0x1D44E)
+fonts.vf.math.set_letters(fonts.enc.math, "tex-ss", 0x1D5A0, 0x1D5BA)
+fonts.vf.math.set_letters(fonts.enc.math, "tex-tt", 0x1D670, 0x1D68A)
+fonts.vf.math.set_letters(fonts.enc.math, "tex-bf", 0x1D400, 0x1D41A)
+fonts.vf.math.set_letters(fonts.enc.math, "tex-bi", 0x1D468, 0x1D482)
+fonts.vf.math.set_letters(fonts.enc.math, "tex-fraktur", 0x1D504, 0x1D51E)
fonts.vf.math.set_letters(fonts.enc.math, "tex-fraktur-bold", 0x1D56C, 0x1D586)
fonts.vf.math.set_digits (fonts.enc.math, "tex-ss", 0x1D7E2)
@@ -1294,308 +1376,4 @@ fonts.vf.math.set_digits (fonts.enc.math, "tex-bf", 0x1D7CE)
-- fonts.vf.math.set_digits (fonts.enc.math, "tex-bi", 0x1D7CE)
-- todo: add ss, tt, bf etc vectors
--- we can make ss tt etc an option
-
--- rm-lmr5 : LMMathRoman5-Regular
--- rm-lmbx5 : LMMathRoman5-Bold ]
--- lmbsy5 : LMMathSymbols5-BoldItalic
--- lmsy5 : LMMathSymbols5-Italic
--- lmmi5 : LMMathItalic5-Italic
--- lmmib5 : LMMathItalic5-BoldItalic
-
-mathematics.make_font ( "lmroman5-math", {
- { name = "lmroman5-regular.otf", features = "virtualmath", main = true },
- -- { name = "rm-lmr5.tfm", vector = "tex-mr" } ,
- { name = "lmmi5.tfm", vector = "tex-mi", skewchar=0x7F },
- { name = "lmsy5.tfm", vector = "tex-sy", skewchar=0x30, parameters = true } ,
- { name = "lmex10.tfm", vector = "tex-ex", extension = true } ,
- { name = "msam5.tfm", vector = "tex-ma" },
- { name = "msbm5.tfm", vector = "tex-mb" },
- -- { name = "rm-lmbx5.tfm", vector = "tex-bf" } ,
- { name = "lmroman5-bold", vector = "tex-bf" } ,
- { name = "lmmib5.tfm", vector = "tex-bi", skewchar=0x7F } ,
- { name = "lmsans8-regular.otf", vector = "tex-ss", optional=true },
- { name = "lmmono8-regular.otf", vector = "tex-tt", optional=true },
- { name = "eufm5.tfm", vector = "tex-fraktur", optional=true },
-} )
-
--- rm-lmr6 : LMMathRoman6-Regular
--- rm-lmbx6 : LMMathRoman6-Bold
--- lmsy6 : LMMathSymbols6-Italic
--- lmmi6 : LMMathItalic6-Italic
-
-mathematics.make_font ( "lmroman6-math", {
- { name = "lmroman6-regular.otf", features = "virtualmath", main = true },
- -- { name = "rm-lmr6.tfm", vector = "tex-mr" } ,
- { name = "lmmi6.tfm", vector = "tex-mi", skewchar=0x7F },
- { name = "lmsy6.tfm", vector = "tex-sy", skewchar=0x30, parameters = true } ,
- { name = "lmex10.tfm", vector = "tex-ex", extension = true } ,
- { name = "msam5.tfm", vector = "tex-ma" },
- { name = "msbm5.tfm", vector = "tex-mb" },
- -- { name = "rm-lmbx6.tfm", vector = "tex-bf" } ,
- { name = "lmroman6-bold.otf", vector = "tex-bf" } ,
- { name = "lmmib5.tfm", vector = "tex-bi", skewchar=0x7F } ,
- { name = "lmsans8-regular.otf", vector = "tex-ss", optional=true },
- { name = "lmmono8-regular.otf", vector = "tex-tt", optional=true },
- { name = "eufm5.tfm", vector = "tex-fraktur", optional=true },
- { name = "eufb5.tfm", vector = "tex-fraktur-bold", optional=true },
-} )
-
--- rm-lmr7 : LMMathRoman7-Regular
--- rm-lmbx7 : LMMathRoman7-Bold
--- lmbsy7 : LMMathSymbols7-BoldItalic
--- lmsy7 : LMMathSymbols7-Italic
--- lmmi7 : LMMathItalic7-Italic
--- lmmib7 : LMMathItalic7-BoldItalic
-
-mathematics.make_font ( "lmroman7-math", {
- { name = "lmroman7-regular.otf", features = "virtualmath", main = true },
- -- { name = "rm-lmr7.tfm", vector = "tex-mr" } ,
- { name = "lmmi7.tfm", vector = "tex-mi", skewchar=0x7F },
- { name = "lmsy7.tfm", vector = "tex-sy", skewchar=0x30, parameters = true } ,
- { name = "lmex10.tfm", vector = "tex-ex", extension = true } ,
- { name = "msam7.tfm", vector = "tex-ma" },
- { name = "msbm7.tfm", vector = "tex-mb" },
- -- { name = "rm-lmbx7.tfm", vector = "tex-bf" } ,
- { name = "lmroman7-bold.otf", vector = "tex-bf" } ,
- { name = "lmmib7.tfm", vector = "tex-bi", skewchar=0x7F } ,
- { name = "lmsans8-regular.otf", vector = "tex-ss", optional=true },
- { name = "lmmono8-regular.otf", vector = "tex-tt", optional=true },
- { name = "eufm7.tfm", vector = "tex-fraktur", optional=true },
- { name = "eufb7.tfm", vector = "tex-fraktur-bold", optional=true },
-} )
-
--- rm-lmr8 : LMMathRoman8-Regular
--- rm-lmbx8 : LMMathRoman8-Bold
--- lmsy8 : LMMathSymbols8-Italic
--- lmmi8 : LMMathItalic8-Italic
-
-mathematics.make_font ( "lmroman8-math", {
- { name = "lmroman8-regular.otf", features = "virtualmath", main = true },
- -- { name = "rm-lmr8.tfm", vector = "tex-mr" } ,
- { name = "lmmi8.tfm", vector = "tex-mi", skewchar=0x7F },
- { name = "lmsy8.tfm", vector = "tex-sy", skewchar=0x30, parameters = true } ,
- { name = "lmex10.tfm", vector = "tex-ex", extension = true } ,
- { name = "msam7.tfm", vector = "tex-ma" },
- { name = "msbm7.tfm", vector = "tex-mb" },
- -- { name = "rm-lmbx8.tfm", vector = "tex-bf" } ,
- { name = "lmroman8-bold.otf", vector = "tex-bf" } ,
- { name = "lmmib7.tfm", vector = "tex-bi", skewchar=0x7F } ,
- { name = "lmsans8-regular.otf", vector = "tex-ss", optional=true },
- { name = "lmmono8-regular.otf", vector = "tex-tt", optional=true },
- { name = "eufm7.tfm", vector = "tex-fraktur", optional=true },
- { name = "eufb7.tfm", vector = "tex-fraktur-bold", optional=true },
-} )
-
--- rm-lmr9 : LMMathRoman9-Regular
--- rm-lmbx9 : LMMathRoman9-Bold
--- lmsy9 : LMMathSymbols9-Italic
--- lmmi9 : LMMathItalic9-Italic
-
-mathematics.make_font ( "lmroman9-math", {
- { name = "lmroman9-regular.otf", features = "virtualmath", main = true },
- -- { name = "rm-lmr9.tfm", vector = "tex-mr" } ,
- { name = "lmmi9.tfm", vector = "tex-mi", skewchar=0x7F },
- { name = "lmsy9.tfm", vector = "tex-sy", skewchar=0x30, parameters = true } ,
- { name = "lmex10.tfm", vector = "tex-ex", extension = true } ,
- { name = "msam10.tfm", vector = "tex-ma" },
- { name = "msbm10.tfm", vector = "tex-mb" },
- -- { name = "rm-lmbx9.tfm", vector = "tex-bf" } ,
- { name = "lmroman9-bold.otf", vector = "tex-bf" } ,
- { name = "lmmib10.tfm", vector = "tex-bi", skewchar=0x7F } ,
- { name = "lmsans9-regular.otf", vector = "tex-ss", optional=true },
- { name = "lmmono9-regular.otf", vector = "tex-tt", optional=true },
- { name = "eufm10.tfm", vector = "tex-fraktur", optional=true },
- { name = "eufb10.tfm", vector = "tex-fraktur-bold", optional=true },
-} )
-
--- rm-lmr10 : LMMathRoman10-Regular
--- rm-lmbx10 : LMMathRoman10-Bold
--- lmbsy10 : LMMathSymbols10-BoldItalic
--- lmsy10 : LMMathSymbols10-Italic
--- lmex10 : LMMathExtension10-Regular
--- lmmi10 : LMMathItalic10-Italic
--- lmmib10 : LMMathItalic10-BoldItalic
-
-mathematics.make_font ( "lmroman10-math", {
- { name = "lmroman10-regular.otf", features = "virtualmath", main = true },
- -- { name = "rm-lmr10.tfm", vector = "tex-mr" } ,
- { name = "lmmi10.tfm", vector = "tex-mi", skewchar=0x7F },
- { name = "lmsy10.tfm", vector = "tex-sy", skewchar=0x30, parameters = true } ,
- { name = "lmex10.tfm", vector = "tex-ex", extension = true } ,
- { name = "msam10.tfm", vector = "tex-ma" },
- { name = "msbm10.tfm", vector = "tex-mb" },
- -- { name = "rm-lmbx10.tfm", vector = "tex-bf" } ,
- { name = "lmroman10-bold.otf", vector = "tex-bf" } ,
- { name = "lmmib10.tfm", vector = "tex-bi", skewchar=0x7F } ,
- { name = "lmsans10-regular.otf", vector = "tex-ss", optional=true },
- { name = "lmmono10-regular.otf", vector = "tex-tt", optional=true },
- { name = "eufm10.tfm", vector = "tex-fraktur", optional=true },
- { name = "eufb10.tfm", vector = "tex-fraktur-bold", optional=true },
-} )
-
-mathematics.make_font ( "lmroman10-boldmath", {
- { name = "lmroman10-bold.otf", features = "virtualmath", main = true },
- -- { name = "rm-lmr10.tfm", vector = "tex-mr" } ,
- { name = "lmmib10.tfm", vector = "tex-mi", skewchar=0x7F },
- { name = "lmbsy10.tfm", vector = "tex-sy", skewchar=0x30, parameters = true } ,
- { name = "lmex10.tfm", vector = "tex-ex", extension = true } ,
--- copied from roman:
- { name = "msam10.tfm", vector = "tex-ma" },
- { name = "msbm10.tfm", vector = "tex-mb" },
- -- { name = "rm-lmbx10.tfm", vector = "tex-bf" } ,
- { name = "lmroman10-bold.otf", vector = "tex-bf" } ,
- { name = "lmmib10.tfm", vector = "tex-bi", skewchar=0x7F } ,
- { name = "lmsans10-regular.otf", vector = "tex-ss", optional=true },
- { name = "lmmono10-regular.otf", vector = "tex-tt", optional=true },
- { name = "eufm10.tfm", vector = "tex-fraktur", optional=true },
- { name = "eufb10.tfm", vector = "tex-fraktur-bold", optional=true },
-} )
-
--- rm-lmr12 : LMMathRoman12-Regular
--- rm-lmbx12 : LMMathRoman12-Bold
--- lmmi12 : LMMathItalic12-Italic
-
-mathematics.make_font ( "lmroman12-math", {
- { name = "lmroman12-regular.otf", features = "virtualmath", main = true },
- -- { name = "rm-lmr12.tfm", vector = "tex-mr" } ,
- { name = "lmmi12.tfm", vector = "tex-mi", skewchar=0x7F },
- { name = "lmsy10.tfm", vector = "tex-sy", skewchar=0x30, parameters = true } ,
- { name = "lmex10.tfm", vector = "tex-ex", extension = true } ,
- { name = "msam10.tfm", vector = "tex-ma" },
- { name = "msbm10.tfm", vector = "tex-mb" },
- -- { name = "rm-lmbx12.tfm", vector = "tex-bf" } ,
- { name = "lmroman12-bold.otf", vector = "tex-bf" } ,
- { name = "lmmib10.tfm", vector = "tex-bi", skewchar=0x7F } ,
- { name = "lmsans12-regular.otf", vector = "tex-ss", optional=true },
- { name = "lmmono12-regular.otf", vector = "tex-tt", optional=true },
- { name = "eufm10.tfm", vector = "tex-fraktur", optional=true },
- { name = "eufb10.tfm", vector = "tex-fraktur-bold", optional=true },
-} )
-
--- rm-lmr17 : LMMathRoman17-Regular
-
-mathematics.make_font ( "lmroman17-math", {
- { name = "lmroman17-regular.otf", features = "virtualmath", main = true },
- -- { name = "rm-lmr12.tfm", vector = "tex-mr" } ,
- { name = "lmmi12.tfm", vector = "tex-mi", skewchar=0x7F },
- { name = "lmsy10.tfm", vector = "tex-sy", skewchar=0x30, parameters = true } ,
- { name = "lmex10.tfm", vector = "tex-ex", extension = true } ,
- { name = "msam10.tfm", vector = "tex-ma" },
- { name = "msbm10.tfm", vector = "tex-mb" },
- -- { name = "rm-lmbx12.tfm", vector = "tex-bf" } ,
- { name = "lmroman12-bold.otf", vector = "tex-bf" } ,
- { name = "lmmib10.tfm", vector = "tex-bi", skewchar=0x7F } ,
- { name = "lmsans17-regular.otf", vector = "tex-ss", optional=true },
- { name = "lmmono17-regular.otf", vector = "tex-tt", optional=true },
- { name = "eufm10.tfm", vector = "tex-fraktur", optional=true },
- { name = "eufb10.tfm", vector = "tex-fraktur-bold", optional=true },
-} )
-
--- pxr/txr messes up the accents
-
-mathematics.make_font ( "px-math", {
- { name = "texgyrepagella-regular.otf", features = "virtualmath", main = true },
- { name = "rpxr.tfm", vector = "tex-mr" } ,
- { name = "rpxmi.tfm", vector = "tex-mi", skewchar=0x7F },
- { name = "pxsy.tfm", vector = "tex-sy", skewchar=0x30, parameters = true } ,
- { name = "pxex.tfm", vector = "tex-ex", extension = true } ,
- { name = "pxsya.tfm", vector = "tex-ma" },
- { name = "pxsyb.tfm", vector = "tex-mb" },
-} )
-
-mathematics.make_font ( "tx-math", {
- { name = "texgyretermes-regular.otf", features = "virtualmath", main = true },
- { name = "rtxr.tfm", vector = "tex-mr" } ,
- { name = "rtxmi.tfm", vector = "tex-mi", skewchar=0x7F },
- { name = "txsy.tfm", vector = "tex-sy", skewchar=0x30, parameters = true } ,
- { name = "txex.tfm", vector = "tex-ex", extension = true } ,
- { name = "txsya.tfm", vector = "tex-ma" },
- { name = "txsyb.tfm", vector = "tex-mb" },
-} )
-
-mathematics.make_font ( "iwona-math", {
- { name = "file:Iwona-Regular", features = "virtualmath", main = true },
- { name = "mi-iwonari.tfm", vector = "tex-mi", skewchar=0x7F },
- { name = "sy-iwonarz.tfm", vector = "tex-sy", skewchar=0x30, parameters = true } ,
- { name = "ex-iwonar.tfm", vector = "tex-ex", extension = true } ,
- { name = "msam10.tfm", vector = "tex-ma" },
- { name = "msbm10.tfm", vector = "tex-mb" },
-} )
-
-mathematics.make_font ( "iwona-light-math", {
- { name = "file:IwonaLight-Regular", features = "virtualmath", main = true },
- { name = "mi-iwonali.tfm", vector = "tex-mi", skewchar=0x7F },
- { name = "sy-iwonalz.tfm", vector = "tex-sy", skewchar=0x30, parameters = true } ,
- { name = "ex-iwonal.tfm", vector = "tex-ex", extension = true } ,
- { name = "msam10.tfm", vector = "tex-ma" },
- { name = "msbm10.tfm", vector = "tex-mb" },
-} )
-
-mathematics.make_font ( "iwona-medium-math", {
- { name = "file:IwonaMedium-Regular", features = "virtualmath", main = true },
- { name = "mi-iwonami.tfm", vector = "tex-mi", skewchar=0x7F },
- { name = "sy-iwonamz.tfm", vector = "tex-sy", skewchar=0x30, parameters = true } ,
- { name = "ex-iwonam.tfm", vector = "tex-ex", extension = true } ,
- { name = "msam10.tfm", vector = "tex-ma" },
- { name = "msbm10.tfm", vector = "tex-mb" },
-} )
-
-mathematics.make_font ( "iwona-heavy-math", {
- { name = "file:IwonaHeavy-Regular", features = "virtualmath", main = true },
- { name = "mi-iwonahi.tfm", vector = "tex-mi", skewchar=0x7F },
- { name = "sy-iwonahz.tfm", vector = "tex-sy", skewchar=0x30, parameters = true } ,
- { name = "ex-iwonah.tfm", vector = "tex-ex", extension = true } ,
- { name = "msam10.tfm", vector = "tex-ma" },
- { name = "msbm10.tfm", vector = "tex-mb" },
-} )
-
--- not ok, we need adapted vectors !
-
-mathematics.make_font ( "mathtimes-math", {
- { name = "file:texgyretermes-regular.otf", features = "virtualmath", main = true },
- { name = "mtmiz.tfm", vector = "tex-mi", skewchar=0x7F },
- { name = "mtsyn.tfm", vector = "tex-sy", skewchar=0x30, parameters = true },
- { name = "mtex.tfm", vector = "tex-ex", extension = true },
- { name = "msam10.tfm", vector = "tex-ma" },
- { name = "msbm10.tfm", vector = "tex-mb" },
-} )
-
-mathematics.make_font ( "lucida-math", {
- { name = "lbr.afm", features = "virtualmath", main = true },
- { name = "hlcrim.tfm", vector = "tex-mi", skewchar=0x7F },
- { name = "hlcry.tfm", vector = "tex-sy", skewchar=0x30, parameters = true },
- { name = "hlcrv.tfm", vector = "tex-ex", extension = true },
- { name = "hlcra.tfm", vector = "tex-ma" },
- { name = "hlcrm.tfm", vector = "tex-mb" },
-} )
-
-mathematics.make_font ( "charter-math", {
- { name = "file:bchr8a", features = "virtualmath", main = true },
--- { name = "md-chr7m.tfm", vector = "tex-mr" },
- { name = "md-chri7m.tfm", vector = "tex-mi", skewchar=0x7F },
- { name = "md-chr7y.tfm", vector = "tex-sy", skewchar=0x30, parameters = true },
- { name = "md-chr7v.tfm", vector = "tex-ex", extension = true },
- { name = "msam10.tfm", vector = "tex-ma" },
- { name = "msbm10.tfm", vector = "tex-mb" },
-} )
-
-mathematics.make_font ( "garamond-math", {
- { name = "file:ugmr8y", features = "virtualmath", main = true },
--- { name = "md-gmr7m.tfm", vector = "tex-mr" },
- { name = "md-gmri7m.tfm", vector = "tex-mi", skewchar=0x7F },
- { name = "md-gmr7y.tfm", vector = "tex-sy", skewchar=0x30, parameters = true },
- { name = "md-gmr7v.tfm", vector = "tex-ex", extension = true },
- { name = "msam10.tfm", vector = "tex-ma" },
- { name = "msbm10.tfm", vector = "tex-mb" },
-} )
-
-mathematics.make_font ( "utopia-math", {
- { name = "file:putr8y", features = "virtualmath", main = true },
--- { name = "md-utr7m.tfm", vector = "tex-mr" },
- { name = "md-utri7m.tfm", vector = "tex-mi", skewchar=0x7F },
- { name = "md-utr7y.tfm", vector = "tex-sy", skewchar=0x30, parameters = true },
- { name = "md-utr7v.tfm", vector = "tex-ex", extension = true },
- { name = "msam10.tfm", vector = "tex-ma" },
- { name = "msbm10.tfm", vector = "tex-mb" },
-} )
+-- todo: we can make ss tt etc an option
diff --git a/Master/texmf-dist/tex/context/base/meta-dum.tex b/Master/texmf-dist/tex/context/base/meta-dum.tex
index 1d03fb16d2d..bc19f3c5fa8 100644
--- a/Master/texmf-dist/tex/context/base/meta-dum.tex
+++ b/Master/texmf-dist/tex/context/base/meta-dum.tex
@@ -70,6 +70,8 @@
[\c!reduction=0,
\c!text=\v!yes]
+\let\normalexternalfigurereplacement\externalfigurereplacement
+
\def\externalfigurereplacement#1#2#3%
{\getpaletsize[placeholder]%
\ifx\figurereplacementcycle\relax
diff --git a/Master/texmf-dist/tex/context/base/meta-fig.mkiv b/Master/texmf-dist/tex/context/base/meta-fig.mkiv
index b3abc9d9edc..4738316da69 100644
--- a/Master/texmf-dist/tex/context/base/meta-fig.mkiv
+++ b/Master/texmf-dist/tex/context/base/meta-fig.mkiv
@@ -43,7 +43,7 @@
\presetlocalframed[\??mg]
-\def\setupMPpage
+\unexpanded\def\setupMPpage
{\dodoubleargument\getparameters[\??mg]}
\def\startMPpage
diff --git a/Master/texmf-dist/tex/context/base/meta-fun.lua b/Master/texmf-dist/tex/context/base/meta-fun.lua
index 84d4afb195a..fef2aa12b87 100644
--- a/Master/texmf-dist/tex/context/base/meta-fun.lua
+++ b/Master/texmf-dist/tex/context/base/meta-fun.lua
@@ -1,6 +1,6 @@
if not modules then modules = { } end modules ['meta-fun'] = {
version = 1.001,
- comment = "companion to meta-fun.tex",
+ comment = "companion to meta-fun.mkiv",
author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
copyright = "PRAGMA ADE / ConTeXt Development Team",
license = "see context related readme files",
diff --git a/Master/texmf-dist/tex/context/base/meta-ini.mkii b/Master/texmf-dist/tex/context/base/meta-ini.mkii
index f9d09704940..e7c6d218e1f 100644
--- a/Master/texmf-dist/tex/context/base/meta-ini.mkii
+++ b/Master/texmf-dist/tex/context/base/meta-ini.mkii
@@ -717,6 +717,14 @@
\disablecompoundcharacters
\to\everyMPgraphic
+% New, experimental (if complaints than only in enco-ffr.mkii), well
+% Mojca complained that it does not work with utf-8 and textext, see
+% ** in meta-tex.
+
+\appendtoks
+ \chardef\activecharactermode\zerocount
+\to\everyMPgraphic
+
\appendtoks
\expanded{\definecolor[currentcolor][\currentcolorname]}%
\to \everyMPgraphic
diff --git a/Master/texmf-dist/tex/context/base/meta-ini.mkiv b/Master/texmf-dist/tex/context/base/meta-ini.mkiv
index ff4d48c1db2..61acbca32c7 100644
--- a/Master/texmf-dist/tex/context/base/meta-ini.mkiv
+++ b/Master/texmf-dist/tex/context/base/meta-ini.mkiv
@@ -87,7 +87,7 @@
\def\MPinstancetoks{\csname\@@MPF::\currentMPgraphicinstance\endcsname}
-\def\defineMPinstance
+\unexpanded\def\defineMPinstance
{\dodoubleargument\dodefineMPinstance}
\def\dodefineMPinstance[#1][#2]%
@@ -111,7 +111,12 @@
\else
\edef\currentMPgraphicinstance{#1}%
\fi
- \edef\currentMPgraphicformat{\csname\@@MPF\currentMPgraphicinstance\s!format\endcsname}}
+ \edef\currentMPgraphicformat
+ {\ifcsname\@@MPF\currentMPgraphicinstance\s!format\endcsname
+ \csname\@@MPF\currentMPgraphicinstance\s!format\endcsname
+ \else
+ \defaultMPgraphicinstance
+ \fi}}
\def\currentMPgraphicinstance{\defaultMPgraphicinstance}
\def\currentMPgraphicformat {\currentMPgraphicinstance}
@@ -133,9 +138,14 @@
\def\MPaskedfigure{false}
-\long\def\processMPgraphic#1% todo: extensions and inclusions outside beginfig
- {\begingroup % needed?
-\forgetall
+\def\currentMPinitializations
+ {\ifconditional\includeMPinitializations\the\MPinitializations;\fi\theMPrandomseed;}
+
+\def\currentMPpreamble
+ {\ifconditional\includeMPextensions\the\MPextensions;\the\MPuserinclusions;\fi\the\MPinstancetoks;}
+
+\def\dostartcurrentMPgraphic
+ {\begingroup
\enableincludeMPgraphics
\the\everyMPgraphic
\presetMPdefinitions
@@ -146,18 +156,28 @@
{\setfalse\includeMPextensions}%
\doifelsevalue{\@@MPF\currentMPgraphicinstance\s!initializations}\v!yes
{\settrue \includeMPinitializations}%
- {\setfalse\includeMPinitializations}%
+ {\setfalse\includeMPinitializations}}
+
+\def\dostopcurrentMPgraphic
+ {\global\MPinstancetoks\emptytoks
+ \global\settrue\METAFUNinitialized % becomes obsolete
+ \endgroup}
+
+\unexpanded\long\def\processMPgraphic#1% todo: extensions and inclusions outside beginfig
+ {\dostartcurrentMPgraphic
+ \forgetall
\setbox\MPgraphicbox\hbox\bgroup
- \normalexpanded{\noexpand\ctxlua{metapost.graphic("\currentMPgraphicinstance", "\currentMPgraphicformat",
- \!!bs\ifconditional\includeMPinitializations\the\MPinitializations;\fi\theMPrandomseed;#1;\!!es,
- \!!bs\ifconditional\includeMPextensions\the\MPextensions;\the\MPuserinclusions;\fi\the\MPinstancetoks;\!!es,
- \MPaskedfigure
+ \normalexpanded{\noexpand\ctxlua{metapost.graphic(
+ "\currentMPgraphicinstance",
+ "\currentMPgraphicformat",
+ \!!bs#1\!!es,
+ \!!bs\currentMPinitializations\!!es,
+ \!!bs\currentMPpreamble\!!es,
+ \MPaskedfigure
)}}%
\egroup
- \global\MPinstancetoks\emptytoks
- \global\settrue\METAFUNinitialized % becomes obsolete
\placeMPgraphic
- \endgroup}
+ \dostopcurrentMPgraphic}
\newif\ifsetMPrandomseed \setMPrandomseedtrue % false by default
@@ -230,7 +250,7 @@
\def\getMPdrawing
{\ifMPdrawingdone
- \expandafter\processMPgraphic\expandafter{\MPdrawingdata}%
+ \expandafter\processMPgraphic\expandafter{\MPdrawingdata}% is this expansion still needed?
\fi}
\def\startMPdrawing
@@ -247,19 +267,26 @@
\let\stopMPdrawing\relax
-\long\def\startMPclip#1#2\stopMPclip
- {\long\setgvalue{MPC:#1}{\ctxlua{metapost.getclippath(\!!bs#2\!!es)}}}
-
\let\stopMPclip\relax
+\long\def\startMPclip#1#2\stopMPclip % todo: store at the lua end or just store less
+ {\long\setgvalue{MPC:#1}{#2}}
+
\def\grabMPclippath#1#2#3#4#5% #5 is alternative
{\begingroup
\edef\width {#3\space}\let\overlaywidth \width
\edef\height{#4\space}\let\overlayheight\height
\ifcsname MPC:#1\endcsname
- \xdef\MPclippath{\getvalue{MPC:#1}}%
+ \dostartcurrentMPgraphic
+ \xdef\MPclippath{\normalexpanded{\noexpand\ctxlua{metapost.theclippath(
+ "\currentMPgraphicinstance",
+ "\currentMPgraphicformat",
+ \!!bs\getvalue{MPC:#1}\!!es,
+ \!!bs\currentMPinitializations\!!es,
+ \!!bs\currentMPpreamble\!!es
+ )}}}%
+ \dostopcurrentMPgraphic
\ifx\MPclippath\empty\xdef\MPclippath{#5}\fi
- \setxvalue{MPC:#1}{\MPclippath}%
\else
\xdef\MPclippath{#5}%
\fi
@@ -325,7 +352,7 @@
\def\@@meta{meta:}
-\def\setupMPvariables
+\unexpanded\def\setupMPvariables
{\dodoubleempty\dosetupMPvariables}
\def\dosetupMPvariables[#1][#2]%
@@ -421,7 +448,7 @@
\let\MPshiftdrawingtrue \ignoreMPboxdepth
\let\MPshiftdrawingfalse\normalMPboxdepth
-\def\placeMPgraphic
+\unexpanded\def\placeMPgraphic
{\ifcase\MPboxmode
\or % 1
\doobeyMPboxdepth
@@ -435,15 +462,14 @@
\xdef\MPlly{#3}% ugly as well
\xdef\MPurx{#4}%
\xdef\MPury{#5}%
- \getobject{MP}{#1}}
+ \hbox{\forcecolorhack\getobject{MP}{#1}}} % else no proper color intent
\long\def\handleuniqueMPgraphic#1#2#3%
{\begingroup
\def\@@meta{#1:}%
\extendMPoverlaystamp{#2}% incl prepare
\ifcsname\@@MPG\overlaystamp:#1\endcsname\else
- \enableincludeMPgraphics
-% \forgetall
+ \enableincludeMPgraphics % redundant
\global\advance\MPobjectcounter\plusone
\setobject{MP}{\number\MPobjectcounter}\hbox{\processMPgraphic{#3}}% was vbox, graphic must end up as hbox
\setxvalue{\@@MPG\overlaystamp:#1}{\noexpand\reuseMPbox{\number\MPobjectcounter}{\MPllx}{\MPlly}{\MPurx}{\MPury}}%
@@ -451,7 +477,7 @@
\getvalue{\@@MPG\overlaystamp:#1}%
\endgroup}
-\long\def\startuniqueMPgraphic
+\long\unexpanded\def\startuniqueMPgraphic
{\dodoublegroupempty\dostartuniqueMPgraphic}
\long\def\dostartuniqueMPgraphic#1#2#3\stopuniqueMPgraphic%
@@ -470,20 +496,19 @@
\long\def\handleuseMPgraphic#1#2#3%
{\begingroup
-% \forgetall % check this
\def\@@meta{#1:}%
\prepareMPvariables{#2}%
- \enableincludeMPgraphics
+ \enableincludeMPgraphics % redundant
\processMPgraphic{#3}%
\endgroup}
-\long\def\startuseMPgraphic
+\long\unexpanded\def\startuseMPgraphic
{\dodoublegroupempty\dostartuseMPgraphic}
\long\def\dostartuseMPgraphic#1#2#3\stopuseMPgraphic
{\long\setgvalue{\@@MPG#1}{\handleuseMPgraphic{#1}{#2}{#3}}}
-\long\def\startusableMPgraphic % redundant but handy
+\long\unexpanded\def\startusableMPgraphic % redundant but handy
{\dodoublegroupempty\dostartusableMPgraphic}
\long\def\dostartusableMPgraphic#1#2#3\stopusableMPgraphic
@@ -496,14 +521,14 @@
{\begingroup
\def\@@meta{#1:}%
\prepareMPvariables{#2}%
- \enableincludeMPgraphics
+ \enableincludeMPgraphics % redundant
\global\advance\MPobjectcounter\plusone
\setobject{MP}{\number\MPobjectcounter}\hbox{\processMPgraphic{#3}}% was vbox, graphic must end up as hbox
\setxvalue{\@@MPG#1}{\noexpand\reuseMPbox{\number\MPobjectcounter}{\MPllx}{\MPlly}{\MPurx}{\MPury}}%
\getvalue{\@@MPG#1}%
\endgroup}
-\long\def\startreusableMPgraphic
+\long\unexpanded\def\startreusableMPgraphic
{\dodoublegroupempty\dostartreusableMPgraphic}
\long\def\dostartreusableMPgraphic#1#2#3\stopreusableMPgraphic
@@ -542,7 +567,7 @@
\def\overlaypagestamp
{\MPpageprefix\overlaywidth:\overlayheight:\overlaydepth:\MPcolor\overlaycolor:\MPcolor\overlaylinecolor}
-\long\def\startuniqueMPpagegraphic
+\long\unexpanded\def\startuniqueMPpagegraphic
{\dodoublegroupempty\dostartuniqueMPpagegraphic}
\long\def\dostartuniqueMPpagegraphic#1#2#3\stopuniqueMPpagegraphic
@@ -774,7 +799,7 @@
{\iffirstargument
\startuseMPgraphic{#1}#2\stopuseMPgraphic
\else
- \startuseMPgraphic{mprun}#1\stopuseMPgraphic
+ \startuseMPgraphic{mprun}#2\stopuseMPgraphic
\fi}
% for old time sake
@@ -1057,37 +1082,13 @@
%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\unexpanded\def\startMPcolor#1\stopMPcolor
+ {\writestatus \m!metapost % eventually this placeholder will go away
+ {\string\startMPcolor...\stopMPcolor\space is obsolete,\space
+ use \string\defineintermediatecolor\space instead}}
-\long\def\dostartMPcolor[#1][#2]#3\stopMPcolor % slow but sometimes handy
- {\startnointerference
- \def\handleMPgraycolor{\normalexpanded{\noexpand\defineglobalcolor[#1][s=\!MPgMPa1,#2]}}%
- \def\handleMPrgbcolor {\normalexpanded{\noexpand\defineglobalcolor[#1][r=\!MPgMPa1,g=\!MPgMPa2,b=\!MPgMPa3,#2]}}%
- \def\handleMPcmykcolor{\normalexpanded{\noexpand\defineglobalcolor[#1][c=\!MPgMPa1,m=\!MPgMPa2,y=\!MPgMPa3,k=\!MPgMPa4,#2]}}%
- \processMPgraphic{#3}%
- \stopnointerference}
+\let\stopMPcolor\relax
%D New:
@@ -1171,10 +1172,10 @@
\reuseMPgraphic{\@@MPG#1@S@}%
\fi}
-\def\startstaticMPfigure#1#2\stopstaticMPfigure
+\unexpanded\def\startstaticMPfigure#1#2\stopstaticMPfigure
{\startreusableMPgraphic{\@@MPG#1@S@}#2\stopreusableMPgraphic}
-\long\def\startstaticMPgraphic
+\long\unexpanded\def\startstaticMPgraphic
{\dodoublegroupempty\dostartstaticMPgraphic}
\long\def\dostartstaticMPgraphic#1#2#3\stopstaticMPgraphic
@@ -1247,13 +1248,13 @@
\stopMPinitializations
%D \macros
-%D {\setupMPgraphics}
+%D {setupMPgraphics}
%D
%D Here is a generic setup command:
\newtoks \everysetupMPgraphics
-\def\setupMPgraphics[#1]%
+\unexpanded\def\setupMPgraphics[#1]%
{\getparameters[\??mp][#1]%
\the\everysetupMPgraphics}
diff --git a/Master/texmf-dist/tex/context/base/meta-pdf.lua b/Master/texmf-dist/tex/context/base/meta-pdf.lua
index 056d1052f24..23f8d4de05d 100644
--- a/Master/texmf-dist/tex/context/base/meta-pdf.lua
+++ b/Master/texmf-dist/tex/context/base/meta-pdf.lua
@@ -1,6 +1,6 @@
if not modules then modules = { } end modules ['meta-pdf'] = {
version = 1.001,
- comment = "companion to meta-pdf.tex",
+ comment = "companion to meta-pdf.mkiv",
author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
copyright = "PRAGMA ADE / ConTeXt Development Team",
license = "see context related readme files"
@@ -10,10 +10,10 @@ if not modules then modules = { } end modules ['meta-pdf'] = {
-- meta-pdh.lua but since we no longer want to overload functione we use
-- more locals now. This module keeps changing as it is also a testbed.
-local concat, format, gsub, find = table.concat, string.format, string.gsub, string.find
-local byte, round = string.byte, math.round
-local texsprint = tex.sprint
-local ctxcatcodes = tex.ctxcatcodes
+local concat, format, gsub, find, byte, gmatch, match = table.concat, string.format, string.gsub, string.find, string.byte, string.gmatch, string.match
+local lpegmatch = lpeg.match
+local round = math.round
+local texsprint, ctxcatcodes = tex.sprint, tex.ctxcatcodes
local pdfrgbcode = lpdf.rgbcode
local pdfcmykcode = lpdf.cmykcode
@@ -47,8 +47,8 @@ resetall()
-- todo: collect and flush packed using pdfliteral node injection but we're
-- in no hurry as this kind of conversion does not happen that often in mkiv
-local function pdfcode(str)
- texsprint(ctxcatcodes,"\\pdfliteral{" .. str .. "}")
+local function pdfcode(str) -- could be a node.write instead
+ texsprint(ctxcatcodes,"\\pdfliteral{",str,"}")
end
local function texcode(str)
@@ -390,7 +390,7 @@ local text = lpegCc("{") * (
local package = lpegCs(spec + text^0)
function mps.fshow(str,font,scale) -- lpeg parser
- mps.textext(font,scale,package:match(str))
+ mps.textext(font,scale,lpegmatch(package,str))
end
local cnumber = lpegC(number)
@@ -510,9 +510,9 @@ local captures_new = ( space + verbose + procset + preamble )^0
local function parse(m_data)
if find(m_data,"%%%%BeginResource: procset mpost") then
- captures_new:match(m_data)
+ lpegmatch(captures_new,m_data)
else
- captures_old:match(m_data)
+ lpegmatch(captures_old,m_data)
end
end
diff --git a/Master/texmf-dist/tex/context/base/meta-pdh.lua b/Master/texmf-dist/tex/context/base/meta-pdh.lua
index ef15c6a1145..05cdfc176d0 100644
--- a/Master/texmf-dist/tex/context/base/meta-pdh.lua
+++ b/Master/texmf-dist/tex/context/base/meta-pdh.lua
@@ -1,6 +1,6 @@
if not modules then modules = { } end modules ['meta-pdf'] = {
version = 1.001,
- comment = "companion to meta-pdf.tex",
+ comment = "companion to meta-pdf.mkiv",
author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
copyright = "PRAGMA ADE / ConTeXt Development Team",
license = "see context related readme files"
@@ -22,10 +22,10 @@ if not modules then modules = { } end modules ['meta-pdf'] = {
-- only needed for mp output on disk
-local concat, format = table.concat, string.format
-
-local texsprint = tex.sprint
-local ctxcatcodes = tex.ctxcatcodes
+local concat, format, find, gsub, gmatch = table.concat, string.format, string.find, string.gsub, string.gmatch
+local texsprint, ctxcatcodes = tex.sprint, tex.ctxcatcodes
+local tostring, tonumber, select = tostring, tonumber, select
+local lpegmatch = lpeg.match
mptopdf = { }
mptopdf.parsers = { }
@@ -70,65 +70,65 @@ mptopdf.descapes = {
}
function mptopdf.descape(str)
- str = str:gsub("\\(%d%d%d)",function(n)
+ str = gsub(str,"\\(%d%d%d)",function(n)
return "\\char" .. tonumber(n,8) .. " "
end)
- return str:gsub("\\([%(%)\\])",mptopdf.descapes)
+ return gsub(str,"\\([%(%)\\])",mptopdf.descapes)
end
function mptopdf.steps.descape(str)
- str = str:gsub("\\(%d%d%d)",function(n)
+ str = gsub(str,"\\(%d%d%d)",function(n)
return "\\\\char" .. tonumber(n,8) .. " "
end)
- return str:gsub("\\([%(%)\\])",mptopdf.descapes)
+ return gsub(str,"\\([%(%)\\])",mptopdf.descapes)
end
function mptopdf.steps.strip() -- .3 per expr
- mptopdf.data = mptopdf.data:gsub("^(.-)%%+Page:.-%c+(.*)%s+%a+%s+%%+EOF.*$", function(preamble, graphic)
+ mptopdf.data = gsub(mptopdf.data,"^(.-)%%+Page:.-%c+(.*)%s+%a+%s+%%+EOF.*$", function(preamble, graphic)
local bbox = "0 0 0 0"
- for b in preamble:gmatch("%%%%%a+oundingBox: +(.-)%c+") do
+ for b in gmatch(preamble,"%%%%%a+oundingBox: +(.-)%c+") do
bbox = b
end
- local name, version = preamble:gmatch("%%%%Creator: +(.-) +(.-) ")
+ local name, version = gmatch(preamble,"%%%%Creator: +(.-) +(.-) ")
mptopdf.version = tostring(version or "0")
- if preamble:find("/hlw{0 dtransform") then
+ if find(preamble,"/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+", "")
+ mptopdf.data = gsub(mptopdf.data,"%%%%MetaPostSpecials: +(.-)%c+", "%1 specials\n", 1)
+ mptopdf.data = gsub(mptopdf.data,"%%%%MetaPostSpecial: +(.-)%c+", "%1 special\n")
+ mptopdf.data = gsub(mptopdf.data,"%%.-%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)
+ mptopdf.data = gsub(mptopdf.data,"gsave%s+fill%s+grestore%s+stroke", "both")
+ mptopdf.data = gsub(mptopdf.data,"([%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)
+ mptopdf.data = gsub(mptopdf.data,"([%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.data = gsub(mptopdf.data,"%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+"," ")
+ mptopdf.data = gsub(mptopdf.data,"%[%s*(.-)%s*%]", function(str)
+ return gsub(str,"%s+"," ")
end)
local t
- mptopdf.data = mptopdf.data:gsub("%s*([^%a]-)%s*(%a+)", function(args,cmd)
+ mptopdf.data = gsub(mptopdf.data,"%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"
+ return "mps." .. cmd .. "(" .. gsub(args," +",",") .. ")\n"
end
end)
end
@@ -166,7 +166,7 @@ function mptopdf.flushconcat()
end
function mptopdf.flushpath(cmd)
- -- faster: no local function and ipairs
+ -- faster: no local function and loop
if #mptopdf.stack.path > 0 then
local path = { }
if mptopdf.stack.concat then
@@ -445,7 +445,7 @@ do -- assumes \let\c\char
local package = lpeg.Cs(spec + text^0)
function mps.fshow(str,font,scale) -- lpeg parser
- mps.textext(font,scale,package:match(str))
+ mps.textext(font,scale,lpegmatch(package,str))
end
end
@@ -579,10 +579,10 @@ do
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)
+ if find(mptopdf.data,"%%%%BeginResource: procset mpost") then
+ lpegmatch(captures_new,mptopdf.data)
else
- captures_old:match(mptopdf.data)
+ lpegmatch(captures_old,mptopdf.data)
end
end
diff --git a/Master/texmf-dist/tex/context/base/meta-pdh.mkiv b/Master/texmf-dist/tex/context/base/meta-pdh.mkiv
index 0736598cf35..7cdd1471f67 100644
--- a/Master/texmf-dist/tex/context/base/meta-pdh.mkiv
+++ b/Master/texmf-dist/tex/context/base/meta-pdh.mkiv
@@ -277,7 +277,7 @@
%
% \def\MPspecial{\@@MPSK\@@MPSK\gMPs\nofMParguments}
%
-% \def\defineMPspecial#1#2%
+% \unexpanded\def\defineMPspecial#1#2%
% {\setvalue{\@@MPSK\@@MPSK#1}{#2}}
%D Special number~1 is dedicated to \CMYK\ support. If you
diff --git a/Master/texmf-dist/tex/context/base/meta-tex.mkii b/Master/texmf-dist/tex/context/base/meta-tex.mkii
index bf733d55019..190a694d9b1 100644
--- a/Master/texmf-dist/tex/context/base/meta-tex.mkii
+++ b/Master/texmf-dist/tex/context/base/meta-tex.mkii
@@ -103,12 +103,13 @@
\long\def\doTeXtext[#1]#2#3%
{\begingroup
+ \setnormalcatcodes
+ \chardef\activecharactermode\plusone % compensates ** in meta-ini.mkii
+ \endlinechar\minusone
+ \everyeof\emptytoks
+ %\def\ascii{#3}\scantokens\expandafter{\ascii}}%
\setbox\nextbox\hbox
- {\setnormalcatcodes
- \endlinechar\minusone
- \everyeof\emptytoks
- %\def\ascii{#3}\scantokens\expandafter{\ascii}}%
- \ifcase\TeXtextcolormode
+ {\ifcase\TeXtextcolormode
\scantokens{\executeifdefined{textext@@#1}\firstofoneargument{#3}}%
\else
\localcolortrue
diff --git a/Master/texmf-dist/tex/context/base/meta-tex.mkiv b/Master/texmf-dist/tex/context/base/meta-tex.mkiv
index ab4f93daed5..e35f9538567 100644
--- a/Master/texmf-dist/tex/context/base/meta-tex.mkiv
+++ b/Master/texmf-dist/tex/context/base/meta-tex.mkiv
@@ -47,7 +47,7 @@
% draw \sometxt[framed]{black} rotated 45 ;
% \stopMPcode
-\def\definetextext[#1]#2{\setvalue{@@st@@[#1]}{#2}\setvalue{@@st@@[#1] }{#2}} % we don't grab spaces after [#1]
+\unexpanded\def\definetextext[#1]#2{\setvalue{@@st@@[#1]}{#2}\setvalue{@@st@@[#1] }{#2}} % we don't grab spaces after [#1]
\long\def\sometxt#1#{\dosometxt{#1}} % grab optional [args]
diff --git a/Master/texmf-dist/tex/context/base/meta-txt.tex b/Master/texmf-dist/tex/context/base/meta-txt.tex
index 18b6d206994..474253a4052 100644
--- a/Master/texmf-dist/tex/context/base/meta-txt.tex
+++ b/Master/texmf-dist/tex/context/base/meta-txt.tex
@@ -24,8 +24,7 @@
% textext ipv btex ... etex
-\ifx\undefined\MPtoks \newtoks\MPtoks \fi
-\ifx\undefined\MPnox \newbox \MPbox \fi
+% we need a proper prefix here
\unprotect
@@ -37,15 +36,18 @@
% \def\newchar#1{\chardef#1=0 }
-\newdimen\parwidth
-\newdimen\parheight
-\newdimen\parvoffset
-\newdimen\parhoffset
-\newcount\parlines
-\newtoks \partoks
-\newbox \shapetextbox
-\newif \ifparseries
-\chardef \parfirst=0
+\ifdefined\MPtoks \else \newtoks\MPtoks \fi
+\ifdefined\MPbox \else \newbox \MPbox \fi
+
+\ifdefined\parwidth \else \newdimen\parwidth \fi
+\ifdefined\parheight \else \newdimen\parheight \fi
+\ifdefined\parvoffset \else \newdimen\parvoffset \fi
+\ifdefined\parhoffset \else \newdimen\parhoffset \fi
+\ifdefined\parlines \else \newcount\parlines \fi
+\ifdefined\partoks \else \newtoks \partoks \fi
+\ifdefined\shapetextbox \else \newbox \shapetextbox \fi
+ \newif \ifparseries
+\ifdefined\parfirst \else \chardef \parfirst=0 \fi
\def\startshapetext[#1]%
{\global\newcounter\currentshapetext
diff --git a/Master/texmf-dist/tex/context/base/metatex.tex b/Master/texmf-dist/tex/context/base/metatex.tex
index df674c11ac0..e90af709c0b 100644
--- a/Master/texmf-dist/tex/context/base/metatex.tex
+++ b/Master/texmf-dist/tex/context/base/metatex.tex
@@ -11,6 +11,10 @@
%C therefore copyrighted by \PRAGMA. See mreadme.pdf for
%C details.
+%D We can experiment here with runtime loading, id est no longer
+%D use a format. However, we still need a stub then but it could
+%D as well be luatools (mtxrun) itself then.
+
%D This format is just a minimal layer on top of the \LUATEX\
%D engine and will not provide high level functionality. It can
%D be used as basis for dedicated (specialized) macro packages.
@@ -35,9 +39,18 @@
\ifx\normalinput\undefined \let\normalinput\input \fi
-\def\loadcorefile#1{\normalinput#1\relax}
+\def\loadcorefile#1{\normalinput#1.tex \relax}
+\def\loadmarkfile#1{\normalinput#1.mkiv\relax}
+
+\loadcorefile{syst-ini}
+
+\ifnum\luatexversion<60 % also change message
+ \writestatus{!!!!}{Your luatex binary is too old, you need at least version 0.60!}
+ \expandafter\end
+\fi
+
+\newtoks\metatexversiontoks \metatexversiontoks\expandafter{\metatexversion} % at the lua end
-\loadcorefile{syst-ini} % some basic commands and allocations that are expected down the line
\loadcorefile{syst-pln} % plain tex initializations of internal registers (no further code)
\loadmarkfile{luat-cod} %
@@ -46,11 +59,11 @@
% needs stripping:
-\loadcorefile{catc-ini.mkiv} % catcode table management
-\loadcorefile{catc-act.tex} % active character definition mechanisms
-\loadcorefile{catc-def.tex} % some generic catcode tables
-\loadcorefile{catc-ctx.tex} % a couple of context specific tables but expected by later modules
-\loadcorefile{catc-sym.tex} % some definitions related to \letter<tokens>
+\loadmarkfile{catc-ini} % catcode table management
+\loadcorefile{catc-act} % active character definition mechanisms
+\loadcorefile{catc-def} % some generic catcode tables
+\loadcorefile{catc-ctx} % a couple of context specific tables but expected by later modules
+\loadcorefile{catc-sym} % some definitions related to \letter<tokens>
% helpers, maybe less
diff --git a/Master/texmf-dist/tex/context/base/mlib-ctx.lua b/Master/texmf-dist/tex/context/base/mlib-ctx.lua
index 821b702c601..cc5682e6fdc 100644
--- a/Master/texmf-dist/tex/context/base/mlib-ctx.lua
+++ b/Master/texmf-dist/tex/context/base/mlib-ctx.lua
@@ -1,6 +1,6 @@
if not modules then modules = { } end modules ['mlib-ctx'] = {
version = 1.001,
- comment = "companion to mlib-ctx.tex",
+ comment = "companion to mlib-ctx.mkiv",
author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
copyright = "PRAGMA ADE / ConTeXt Development Team",
license = "see context related readme files",
@@ -11,12 +11,32 @@ if not modules then modules = { } end modules ['mlib-ctx'] = {
local format, join = string.format, table.concat
local sprint = tex.sprint
+local starttiming, stoptiming = statistics.starttiming, statistics.stoptiming
+
metapost = metapost or {}
metapost.defaultformat = "metafun"
-function metapost.graphic(instance,mpsformat,str,preamble,askedfig)
+function metapost.graphic(instance,mpsformat,str,initializations,preamble,askedfig)
local mpx = metapost.format(instance,mpsformat or metapost.defaultformat)
- metapost.graphic_base_pass(mpx,str,preamble,askedfig)
+ metapost.graphic_base_pass(mpx,str,initializations,preamble,askedfig)
+end
+
+function metapost.getclippath(instance,mpsformat,data,initializations,preamble)
+ local mpx = metapost.format(instance,mpsformat or metapost.defaultformat)
+ if mpx and data then
+ starttiming(metapost)
+ starttiming(metapost.exectime)
+ local result = mpx:execute(format("%s;beginfig(1);%s;%s;endfig;",preamble or "",initializations or "",data))
+ stoptiming(metapost.exectime)
+ if result.status > 0 then
+ logs.report("metafun", "%s: %s", result.status, result.error or result.term or result.log)
+ result = nil
+ else
+ result = metapost.filterclippath(result)
+ end
+ stoptiming(metapost)
+ return result
+ end
end
function metapost.filterclippath(result)
@@ -26,16 +46,25 @@ function metapost.filterclippath(result)
local figure = figures[1]
local objects = figure:objects()
if objects then
+ local lastclippath
for o=1,#objects do
local object = objects[o]
if object.type == "start_clip" then
- return join(metapost.flushnormalpath(object.path,{ }),"\n")
+ lastclippath = object.path
end
end
+ return lastclippath
end
end
end
- return ""
+end
+
+function metapost.theclippath(...)
+ local result = metapost.getclippath(...)
+ if result then -- we could just print the table
+ result = join(metapost.flushnormalpath(result),"\n")
+ sprint(result)
+ end
end
statistics.register("metapost processing time", function()
diff --git a/Master/texmf-dist/tex/context/base/mlib-pdf.lua b/Master/texmf-dist/tex/context/base/mlib-pdf.lua
index 38b61b0ba97..352070408c1 100644
--- a/Master/texmf-dist/tex/context/base/mlib-pdf.lua
+++ b/Master/texmf-dist/tex/context/base/mlib-pdf.lua
@@ -1,12 +1,12 @@
if not modules then modules = { } end modules ['mlib-pdf'] = {
version = 1.001,
- comment = "companion to mlib-ctx.tex",
+ comment = "companion to mlib-ctx.mkiv",
author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
copyright = "PRAGMA ADE / ConTeXt Development Team",
license = "see context related readme files",
}
-local format, concat = string.format, table.concat
+local format, concat, gsub = string.format, table.concat, string.gsub
local texsprint = tex.sprint
local abs, sqrt, round = math.abs, math.sqrt, math.round
@@ -119,7 +119,7 @@ function metapost.flushers.pdf.flushfigure(pdfliterals) -- table
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)
+ text = gsub(text,".","\\hbox{%1}") -- kerning happens in metapost (i have to check if this is true for mplib)
texsprint(ctxcatcodes,format("\\MPLIBtextext{%s}{%s}{%s}{%s}{%s}",font,size,text,0,-number.dimenfactors.bp*depth))
end
@@ -155,6 +155,7 @@ local function curved(ith,pth)
end
local function flushnormalpath(path, t, open)
+ t = t or { }
local pth, ith
for i=1,#path do
pth = path[i]
@@ -183,6 +184,7 @@ local function flushnormalpath(path, t, open)
end
local function flushconcatpath(path, t, open)
+ t = t or { }
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
diff --git a/Master/texmf-dist/tex/context/base/mlib-pps.lua b/Master/texmf-dist/tex/context/base/mlib-pps.lua
index cf4fe69bedf..8b36660d350 100644
--- a/Master/texmf-dist/tex/context/base/mlib-pps.lua
+++ b/Master/texmf-dist/tex/context/base/mlib-pps.lua
@@ -1,6 +1,6 @@
if not modules then modules = { } end modules ['mlib-pps'] = { -- prescript, postscripts and specials
version = 1.001,
- comment = "companion to mlib-ctx.tex",
+ comment = "companion to mlib-ctx.mkiv",
author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
copyright = "PRAGMA ADE / ConTeXt Development Team",
license = "see context related readme files",
@@ -8,10 +8,15 @@ if not modules then modules = { } end modules ['mlib-pps'] = { -- prescript, pos
-- current limitation: if we have textext as well as a special color then due to
-- prescript/postscript overload we can have problems
+--
+-- todo: report max textexts
local format, gmatch, concat, round, match = string.format, string.gmatch, table.concat, math.round, string.match
local sprint = tex.sprint
local tonumber, type = tonumber, type
+local lpegmatch = lpeg.match
+local texbox = tex.box
+local copy_list = node.copy_list
local starttiming, stoptiming = statistics.starttiming, statistics.stoptiming
@@ -119,7 +124,7 @@ function metapost.specials.register(str) -- only colors
logs.report("mplib","problematic special: %s", str or "?")
end
end
---~ if str:match("^%%%%MetaPostOption: multipass") then
+--~ if match(str,"^%%%%MetaPostOption: multipass") then
--~ metapost.multipass = true
--~ end
end
@@ -203,11 +208,11 @@ local colorsplitter = lpeg.Ct(lpeg.splitter(":",tonumber))
-- This is also an example of a simple plugin.
--~ function metapost.specials.cc(specification,object,result)
---~ object.color = specificationsplitter:match(specification)
+--~ object.color = lpegmatch(specificationsplitter,specification)
--~ return object, nil, nil, nil
--~ end
--~ function metapost.specials.cc(specification,object,result)
---~ local c = specificationsplitter:match(specification)
+--~ local c = lpegmatch(specificationsplitter,specification)
--~ 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
@@ -276,10 +281,10 @@ function metapost.specials.cs(specification,object,result,flusher) -- spot color
nofshades = nofshades + 1
flusher.flushfigure(result)
result = { }
- local t = specificationsplitter:match(specification)
+ local t = lpegmatch(specificationsplitter,specification)
-- we need a way to move/scale
- local ca = colorsplitter:match(t[4])
- local cb = colorsplitter:match(t[8])
+ local ca = lpegmatch(colorsplitter,t[4])
+ local cb = lpegmatch(colorsplitter,t[8])
if round(ca[1]*10000) == 123 then ca = metapost.colorspec(ca) end
if round(cb[1]*10000) == 123 then cb = metapost.colorspec(cb) end
local name = format("MplSh%s",nofshades)
@@ -348,10 +353,10 @@ function metapost.specials.ls(specification,object,result,flusher)
nofshades = nofshades + 1
flusher.flushfigure(result)
result = { }
- local t = specificationsplitter:match(specification)
+ local t = lpegmatch(specificationsplitter,specification)
-- we need a way to move/scale
- local ca = colorsplitter:match(t[4])
- local cb = colorsplitter:match(t[7])
+ local ca = lpegmatch(colorsplitter,t[4])
+ local cb = lpegmatch(colorsplitter,t[7])
if round(ca[1]*10000) == 123 then ca = metapost.colorspec(ca) end
if round(cb[1]*10000) == 123 then cb = metapost.colorspec(cb) end
local name = format("MpSh%s",nofshades)
@@ -417,36 +422,61 @@ end
-- no need for a before here
-local current_format, current_graphic
+local current_format, current_graphic, current_initializations
-metapost.first_box = metapost.first_box or 1000
-metapost.last_box = metapost.last_box or 1100
-metapost.textext_current = metapost.first_box
+-- metapost.first_box = metapost.first_box or 1000
+-- metapost.last_box = metapost.last_box or 1100
+--~ metapost.textext_current = metapost.first_box
metapost.multipass = false
-function metapost.free_boxes()
- local tb = tex.box
- for i = metapost.first_box,metapost.last_box do
- local b = tb[i]
- if b then
- tb[i] = nil -- no node.flush_list(b) needed, else double free error
- else
- break
+local textexts = { }
+
+function metapost.free_boxes() -- todo: mp direct list ipv box
+ -- for i = metapost.first_box,metapost.last_box do
+ -- local b = texbox[i]
+ -- if b then
+ -- texbox[i] = nil -- no node.flush_list(b) needed, else double free error
+ -- else
+ -- break
+ -- end
+ -- end
+ for n, box in next, textexts do
+ local tn = textexts[n]
+ if tn then
+ -- somehow not flushed (used)
+ textexts[n] = nil
end
end
+ textexts = { }
+end
+
+function metapost.settext(box,slot)
+ textexts[slot] = copy_list(texbox[box])
+ texbox[box] = nil
+ -- this will become
+ -- textexts[slot] = texbox[box]
+ -- unsetbox(box)
+end
+
+function metapost.gettext(box,slot)
+ texbox[box] = copy_list(textexts[slot])
+-- textexts[slot] = nil -- no, pictures can be placed several times
end
function metapost.specials.tf(specification,object)
--~ print("setting", metapost.textext_current)
local n, str = match(specification,"^(%d+):(.+)$")
if n and str then
- if metapost.textext_current < metapost.last_box then
- metapost.textext_current = metapost.first_box + n - 1
- end
+ n = tonumber(n)
+ -- if metapost.textext_current < metapost.last_box then
+ -- metapost.textext_current = metapost.first_box + n - 1
+ -- end
if trace_textexts then
- logs.report("metapost","first pass: order %s, box %s",n,metapost.textext_current)
+ -- logs.report("metapost","first pass: order %s, box %s",n,metapost.textext_current)
+ logs.report("metapost","first pass: order %s",n)
end
- sprint(ctxcatcodes,format("\\MPLIBsettext{%s}{%s}",metapost.textext_current,str))
+ -- sprint(ctxcatcodes,format("\\MPLIBsettext{%s}{%s}",metapost.textext_current,str))
+ sprint(ctxcatcodes,format("\\MPLIBsettext{%s}{%s}",n,str))
metapost.multipass = true
end
return { }, nil, nil, nil
@@ -456,8 +486,10 @@ function metapost.specials.ts(specification,object,result,flusher)
-- print("getting", metapost.textext_current)
local n, str = match(specification,"^(%d+):(.+)$")
if n and str then
+ n = tonumber(n)
if trace_textexts then
- logs.report("metapost","second pass: order %s, box %s",n,metapost.textext_current)
+ -- logs.report("metapost","second pass: order %s, box %s",n,metapost.textext_current)
+ logs.report("metapost","second pass: order %s",n)
end
local op = object.path
local first, second, fourth = op[1], op[2], op[4]
@@ -469,17 +501,24 @@ function metapost.specials.ts(specification,object,result,flusher)
if not trace_textexts then
object.path = nil
end
- local before = function() -- no need for function
+ local before = function() -- no need for before function (just do it directly)
--~ flusher.flushfigure(result)
--~ sprint(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
+ -- if metapost.textext_current < metapost.last_box then
+ -- metapost.textext_current = metapost.first_box + n - 1
+ -- end
+ -- local b = metapost.textext_current
+ -- local box = texbox[b]
+ local box = textexts[n]
+ if box then
+ -- sprint(ctxcatcodes,format("\\MPLIBgettextscaled{%s}{%s}{%s}",b,metapost.sxsy(box.width,box.height,box.depth)))
+ sprint(ctxcatcodes,format("\\MPLIBgettextscaled{%s}{%s}{%s}",n,metapost.sxsy(box.width,box.height,box.depth)))
+ else
+ -- error
end
- local b = metapost.textext_current
- sprint(ctxcatcodes,format("\\MPLIBgettextscaled{%s}{%s}{%s}",b, metapost.sxsy(tex.wd[b],tex.ht[b],tex.dp[b])))
result = { "Q" }
return object, result
end
@@ -646,7 +685,7 @@ do
local function convert(str)
found = true
- return "textext(\"" .. str .. "\")"
+ return "rawtextext(\"" .. str .. "\")" -- centered
end
local function ditto(str)
return "\" & ditto & \""
@@ -658,20 +697,33 @@ do
forced = true
end
+ local texmess = (dquote/ditto + (1 - etex))^0
+
+ local function ignore(s)
+ logs.report("mplib","ignoring verbatim tex: %s",s)
+ return ""
+ end
+
local parser = P {
- [1] = Cs((V(2)/register + V(3)/convert + V(4)/force + 1)^0),
+ [1] = Cs((V(2)/register + V(4)/ignore + V(3)/convert + V(5)/force + 1)^0),
[2] = ttex + gtex,
- [3] = (btex + vtex) * spacing * Cs((dquote/ditto + (1 - etex))^0) * etex,
- [4] = multipass, -- experimental, only for testing
+ [3] = btex * spacing * Cs(texmess) * etex,
+ [4] = vtex * spacing * Cs(texmess) * etex,
+ [5] = multipass, -- experimental, only for testing
}
-- 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)
+ local parser = Cs((
+ (ttex + gtex)/register
+ + (btex * spacing * Cs(texmess) * etex)/convert
+ + (vtex * spacing * Cs(texmess) * etex)/ignore
+ + 1
+ )^0)
function metapost.check_texts(str)
found, forced = false, false
- return parser:match(str), found, forced
+ return lpegmatch(parser,str), found, forced
end
end
@@ -689,19 +741,29 @@ function metapost.sxsy(wd,ht,dp) -- helper for text
return (wd ~= 0 and factor/wd) or 0, (hd ~= 0 and factor/hd) or 0
end
+local no_trial_run = "_trial_run_ := false ;"
+local do_trial_run = "if unknown _trial_run_ : boolean _trial_run_ fi ; _trial_run_ := true ;"
+local text_data_template = "_tt_w_[%i]:=%f;_tt_h_[%i]:=%f;_tt_d_[%i]:=%f;"
+local do_begin_fig = "; beginfig(1); "
+local do_end_fig = "; endfig ;"
+local do_safeguard = ";"
+
function metapost.text_texts_data()
local t, n = { }, 0
- for i = metapost.first_box, metapost.last_box do
- n = n + 1
+--~ for i = metapost.first_box, metapost.last_box do
+--~ n = n + 1
+--~ local box = texbox[i]
+ for n, box in next, textexts do
if trace_textexts then
logs.report("metapost","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)
+ if box then
+ t[#t+1] = format(text_data_template,n,box.width/factor,n,box.height/factor,n,box.depth/factor)
else
break
end
end
+--~ print(table.serialize(t))
return t
end
@@ -711,31 +773,33 @@ metapost.intermediate.needed = false
metapost.method = 1 -- 1:dumb 2:clever
-function metapost.graphic_base_pass(mpsformat,str,preamble,askedfig)
+function metapost.graphic_base_pass(mpsformat,str,initializations,preamble,askedfig)
local nofig = (askedfig and "") or false
local done_1, done_2, forced_1, forced_2
str, done_1, forced_1 = metapost.check_texts(str)
- if preamble then
- preamble, done_2, forced_2 = metapost.check_texts(preamble)
- else
+ if not preamble or preamble == "" then
preamble, done_2, forced_2 = "", false, false
+ else
+ preamble, done_2, forced_2 = metapost.check_texts(preamble)
end
- metapost.textext_current = metapost.first_box
+ -- metapost.textext_current = metapost.first_box
metapost.intermediate.needed = false
metapost.multipass = false -- no needed here
- current_format, current_graphic = mpsformat, str
+ current_format, current_graphic, current_initializations = mpsformat, str, initializations or ""
if metapost.method == 1 or (metapost.method == 2 and (done_1 or done_2)) then
-- first true means: trialrun, second true means: avoid extra run if no multipass
local flushed = metapost.process(mpsformat, {
preamble,
- nofig or "beginfig(1); ",
- "if unknown _trial_run_ : boolean _trial_run_ fi ; _trial_run_ := true ;",
- str,
- nofig or "endfig ;"
+ nofig or do_begin_fig,
+ do_trial_run,
+ current_initializations,
+ do_safeguard,
+ current_graphic,
+ nofig or do_end_fig
-- }, true, nil, true )
}, true, nil, not (forced_1 or forced_2), false, askedfig)
if metapost.intermediate.needed then
- for _, action in pairs(metapost.intermediate.actions) do
+ for _, action in next, metapost.intermediate.actions do
action()
end
end
@@ -746,11 +810,13 @@ function metapost.graphic_base_pass(mpsformat,str,preamble,askedfig)
end
else
metapost.process(mpsformat, {
- preamble or "",
- nofig or "beginfig(1); ",
- "_trial_run_ := false ;",
- str,
- nofig or "endfig ;"
+ preamble,
+ nofig or do_begin_fig,
+ no_trial_run,
+ current_initializations,
+ do_safeguard,
+ current_graphic,
+ nofig or do_end_fig
}, false, nil, false, false, askedfig )
end
-- here we could free the textext boxes
@@ -759,34 +825,18 @@ end
function metapost.graphic_extra_pass(askedfig)
local nofig = (askedfig and "") or false
- metapost.textext_current = metapost.first_box
+ -- metapost.textext_current = metapost.first_box
metapost.process(current_format, {
- nofig or "beginfig(1); ",
- "_trial_run_ := false ;",
+ nofig or do_begin_fig,
+ no_trial_run,
concat(metapost.text_texts_data()," ;\n"),
+ current_initializations,
+ do_safeguard,
current_graphic,
- nofig or "endfig ;"
+ nofig or do_end_fig
}, false, nil, false, true, askedfig )
end
-function metapost.getclippath(data)
- local mpx = metapost.format("metafun")
- if mpx and data then
- starttiming(metapost)
- starttiming(metapost.exectime)
- local result = mpx:execute(format("beginfig(1);%s;endfig;",data))
- 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
- stoptiming(metapost)
- sprint(result)
- end
-end
-
metapost.tex = metapost.tex or { }
do -- only used in graphictexts
diff --git a/Master/texmf-dist/tex/context/base/mlib-pps.mkiv b/Master/texmf-dist/tex/context/base/mlib-pps.mkiv
index 83880994b0e..0a78a87040e 100644
--- a/Master/texmf-dist/tex/context/base/mlib-pps.mkiv
+++ b/Master/texmf-dist/tex/context/base/mlib-pps.mkiv
@@ -15,8 +15,24 @@
\registerctxluafile{mlib-pps}{1.001}
+%D Todo: catch nested graphics like external figures with dummies.
+
+% \newtoks\everyMPLIBtext % not yet used
+
+% \appendtoks
+% \let\handleuseMPgraphic \thirdofthreearguments
+% \let\handlereusableMPgraphic\thirdofthreearguments
+% \to \everyMPLIBtext
+
% this will move !
+% Instead of preallocated boxes we now use a table of lists so that we
+% have no limitation. Typically an example of a next version solution
+% due to \LUATEX\ evolving.
+
+\newbox \MPtextbox
+\newtoks\everyMPLIBsettext
+
\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)}%
@@ -25,23 +41,30 @@
\pdfliteral direct{Q}}
\def\MPLIBsettext#1% #2%
- {\global\setbox#1\hbox}% {#2}}
-
-\def\MPLIBfreetext#1%
- {\global\setbox#1\emptybox}
+ {\dowithnextbox{\ctxlua{metapost.settext(\number\nextbox,#1)}}\hbox}
\def\MPLIBgettextscaled#1#2#3% why a copy
- {\vbox to \zeropoint{\vss\hbox to \zeropoint{\black\scale[sx=#2,sy=#3]{\raise\dp#1\copy#1}\hss}}}
-
-\def\MPLIBallocate#1%
- {\newbox\MPLIBfirst
- \dorecurse{\numexpr#1-1\relax}{\let\MPLIBlast\relax\newbox\MPLIBlast}%
- \MPLIBregister}
-
-\def\MPLIBregister % after allocate!
- {\ctxlua{metapost.first_box, metapost.last_box = \number\MPLIBfirst, \number\MPLIBlast}}
+ {\ctxlua{metapost.gettext(\number\MPtextbox,#1)}%
+ \vbox to \zeropoint{\vss\hbox to \zeropoint{\black\scale[sx=#2,sy=#3]{\raise\dp\MPtextbox\box\MPtextbox}\hss}}}
\def\MPLIBgraphictext#1%
{\startTEXpage[\c!scale=10000]#1\stopTEXpage}
\protect \endinput
+
+% \def\MPLIBsettext#1% #2% we could as well store in hlists at the lua end i.e. just one box
+% {\global\setbox#1\hbox}
+%
+% \def\MPLIBfreetext#1%
+% {\global\setbox#1\emptybox}
+%
+% \def\MPLIBgettextscaled#1#2#3% why a copy
+% {\vbox to \zeropoint{\vss\hbox to \zeropoint{\black\scale[sx=#2,sy=#3]{\raise\dp#1\copy#1}\hss}}}
+%
+% \def\MPLIBallocate#1%
+% {\newbox\MPLIBfirst
+% \dorecurse{\numexpr#1-1\relax}{\let\MPLIBlast\relax\newbox\MPLIBlast}%
+% \MPLIBregister}
+%
+% \def\MPLIBregister % after allocate!
+% {\ctxlua{metapost.first_box, metapost.last_box = \number\MPLIBfirst, \number\MPLIBlast}}
diff --git a/Master/texmf-dist/tex/context/base/mlib-run.lua b/Master/texmf-dist/tex/context/base/mlib-run.lua
index 7351c332fb4..f352e1db161 100644
--- a/Master/texmf-dist/tex/context/base/mlib-run.lua
+++ b/Master/texmf-dist/tex/context/base/mlib-run.lua
@@ -1,6 +1,6 @@
if not modules then modules = { } end modules ['mlib-run'] = {
version = 1.001,
- comment = "companion to mlib-ctx.tex",
+ comment = "companion to mlib-ctx.mkiv",
author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
copyright = "PRAGMA ADE / ConTeXt Development Team",
license = "see context related readme files",
@@ -31,11 +31,10 @@ nears zero.</p>
local trace_graphics = false trackers.register("metapost.graphics", function(v) trace_graphics = v end)
-local format = string.format
+local format, gsub, match = string.format, string.gsub, string.match
local starttiming, stoptiming = statistics.starttiming, statistics.stoptiming
-
metapost = metapost or { }
metapost.showlog = false
@@ -59,7 +58,7 @@ metapost.finder = finder
metapost.parameters = {
hash_size = 100000,
- main_memory = 2000000,
+ main_memory = 4000000,
max_in_open = 50,
param_size = 100000,
}
@@ -164,8 +163,8 @@ function metapost.checkformat(mpsinput, mpsformat, dirname)
if not result.log then
metapost.reporterror(result)
else
- local version = result.log:match(">> *(.-)[\n\r]") or "unknown"
- version = version:gsub("[\'\"]","")
+ local version = match(result.log,">> *(.-)[\n\r]") or "unknown"
+ version = gsub(version,"[\'\"]","")
if version ~= the_version then
commands.writestatus("mplib","version mismatch: %s <> %s", version or "unknown", the_version)
else
@@ -209,7 +208,7 @@ function metapost.reset(mpx)
mpxformats[mpx] = nil
end
else
- for name, instance in pairs(mpxformats) do
+ for name, instance in next, mpxformats do
if instance == mpx then
mpx:finish()
mpxformats[name] = nil
@@ -348,7 +347,8 @@ function metapost.directrun(formatname,filename,outputformat,astable,mpdata)
if astable then
local result = { }
logs.simple("storing %s figures in table",#sorted)
- for k, v in ipairs(sorted) do
+ for k=1,#sorted do
+ local v = sorted[k]
if outputformat == "mps" then
result[v] = figures[v]:postscript()
else
@@ -358,7 +358,8 @@ function metapost.directrun(formatname,filename,outputformat,astable,mpdata)
return result
else
local basename = file.removesuffix(file.basename(filename))
- for k, v in ipairs(sorted) do
+ for k=1,#sorted do
+ local v = sorted[k]
local output
if outputformat == "mps" then
output = figures[v]:postscript()
diff --git a/Master/texmf-dist/tex/context/base/mtx-context-arrange.tex b/Master/texmf-dist/tex/context/base/mtx-context-arrange.tex
index 9d0bb901bee..73431567d34 100644
--- a/Master/texmf-dist/tex/context/base/mtx-context-arrange.tex
+++ b/Master/texmf-dist/tex/context/base/mtx-context-arrange.tex
@@ -89,11 +89,15 @@
if document.arguments.sort then
table.sort(document.files)
end
- local emptypages = document.arguments.addempty or ""
- local textwidth = document.arguments.textwidth or "0cm"
+ local emptypages = document.arguments.addempty or ""
+ local textwidth = document.arguments.textwidth or "0cm"
for _, filename in ipairs(document.files) do
if not string.find(filename,"^mtx%-context%-") then
- fprint("\\insertpages[%s][%s][width=%s]",filename,emptypages,textwidth)
+ context.insertpages (
+ { filename },
+ { emptypages },
+ { width = textwidth }
+ )
end
end
else
@@ -103,3 +107,5 @@
\stoptext
+
+
diff --git a/Master/texmf-dist/tex/context/base/mtx-context-combine.tex b/Master/texmf-dist/tex/context/base/mtx-context-combine.tex
index 991e974aed8..8a861ab833b 100644
--- a/Master/texmf-dist/tex/context/base/mtx-context-combine.tex
+++ b/Master/texmf-dist/tex/context/base/mtx-context-combine.tex
@@ -1,5 +1,3 @@
-% engine=luatex
-
%D \module
%D [ file=mtx-context-combine,
%D version=2009.03.21,
@@ -19,17 +17,19 @@
%
% usage: context --extra=combine [options] list-of-files
%
-% --sort : sort filenames first
-% --paperoffset=dimension : left-top-offset
-% --nobanner : no footer etc
-% --combination : h*v or hxv
-% --paperformat : paper*print or paperxprint
-% --nobanner : no footerlines
-% --bannerheight : height of banner
-% --bannerstring : height of bannerstring
+% --sort : sort filenames first
+% --paperoffset=dimension : left-top-offset
+% --nobanner : no footer etc
+% --combination : h*v or hxv
+% --paperformat=spec : paper*print or paperxprint
+% --nobanner : no footerlines
+% --bannerheight=dimension : height of banner
+% --bannerstring=dimension : height of bannerstring
%
% end help
+\input mtx-context-common.tex
+
\doifdocumentargumentelse {paperoffset} {
\setuplayout
@@ -50,45 +50,16 @@
width=middle,
height=middle]
-\startluacode
- local combination = document.arguments['combination'] or '2*2'
- local nx, ny = string.match(combination,"^(%d+)%s*[%*x]%s*(%d+)$")
- if not nx then
- nx, ny = 2, 2
- elseif not ny then
- nx = tonumber(combination) or 2
- ny = nx
- else
- nx = tonumber(nx) or 2
- ny = tonumber(ny) or nx or 2
- end
- document.setargument("nx",nx)
- document.setargument("ny",ny)
-\stopluacode
-
-\startluacode
- local paperformat = document.arguments['paperformat'] or 'A4*A4'
- paperformat = string.upper(paperformat)
- local f, t = string.match(paperformat,"^(.-)%s*[%*xX]%s*(.-)$")
- if not f then
- f, t = "A4", "A4"
- elseif not t then
- t = f
- end
- document.setargument("from",f)
- document.setargument("to",t)
-\stopluacode
-
\setuppapersize
- [\getdocumentargument{from}]
- [\getdocumentargument{to}]
+ [\getdocumentargument{paperformat_paper}]
+ [\getdocumentargument{paperformat_print}]
\doifnotdocumentargument {bannerheight} {
\setuplayout
[footer=1cm]
}
-\doifdocumentargumentelse {nobanner} {yes} {
+\doifelse {\getdocumentargument{nobanner}} {yes} {
\setuplayout
[footer=0cm]
\setupbackgrounds
@@ -112,7 +83,6 @@
\startluacode
local format = string.format
- local fprint = function(...) tex.sprint(tex.ctxcatcodes,format(...)) end
if #document.files > 0 then
if document.arguments["sort"] then
@@ -120,25 +90,25 @@
end
local dobanner = not document.arguments["nobanner"]
local bannerheight = document.arguments["bannerheight"]
- local nx = document.arguments.nx or 2
- local ny = document.arguments.ny or 2
+ local nx = document.arguments.combination_nx or 2
+ local ny = document.arguments.combination_ny or 2
for _, filename in ipairs(document.files) do
if not string.find(filename,"^mtx%-context%-") then
-- could be a macro
local bannerstring = format("\\tttf\\detokenize{%s}\\quad\\quad\\currentdate\\quad\\quad\\pagenumber",file.basename(filename))
if dobanner then
if bannerheight then
- fprint("\\setuptexttexts[{\\setlayerframed[page][preset=middlebottom][frame=off,height=%s]{%s}}]",bannerheight,bannerstring)
+ context("\\setuptexttexts[{\\setlayerframed[page][preset=middlebottom][frame=off,height=%s]{%s}}]",bannerheight,bannerstring)
else
- fprint("\\setupfootertexts[{%s}]",bannerstring)
+ context("\\setupfootertexts[{%s}]",bannerstring)
end
end
- fprint("\\combinepages[%s][nx=%s,ny=%s]",filename,nx,ny)
- fprint("\\page")
+ context("\\combinepages[%s][nx=%s,ny=%s]",filename,nx,ny)
+ context("\\page")
end
end
else
- fprint("no files given")
+ context("no files given")
end
\stopluacode
diff --git a/Master/texmf-dist/tex/context/base/mtx-context-common.tex b/Master/texmf-dist/tex/context/base/mtx-context-common.tex
new file mode 100644
index 00000000000..8327dd28d59
--- /dev/null
+++ b/Master/texmf-dist/tex/context/base/mtx-context-common.tex
@@ -0,0 +1,43 @@
+%D \module
+%D [ file=mtx-context-common,
+%D version=2009.03.21,
+%D title=\CONTEXT\ Extra Trickry,
+%D subtitle=Common Stuff,
+%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.
+
+\startluacode
+ local combination = document.arguments['combination'] or '2*2'
+ local nx, ny = string.match(combination,"^(%d+)%s*[%*x]%s*(%d+)$")
+ if not nx then
+ nx, ny = 2, 2
+ elseif not ny then
+ nx = tonumber(combination) or 2
+ ny = nx
+ else
+ nx = tonumber(nx) or 2
+ ny = tonumber(ny) or nx or 2
+ end
+ document.setargument("combination_nx",nx)
+ document.setargument("combination_ny",ny)
+\stopluacode
+
+\startluacode
+ local paperformat = document.arguments['paperformat'] or 'A4*A4'
+ paperformat = string.upper(paperformat)
+ local f, t = string.match(paperformat,"^(.-)%s*[%*xX]%s*(.-)$")
+ if not f then
+ f, t = "A4", "A4"
+ elseif not t then
+ t = f
+ end
+ document.setargument("paperformat_paper",f)
+ document.setargument("paperformat_print",t)
+\stopluacode
+
+\endinput
diff --git a/Master/texmf-dist/tex/context/base/mtx-context-ideas.tex b/Master/texmf-dist/tex/context/base/mtx-context-ideas.tex
index f1ef1d35ff7..24d11a5b5c7 100644
--- a/Master/texmf-dist/tex/context/base/mtx-context-ideas.tex
+++ b/Master/texmf-dist/tex/context/base/mtx-context-ideas.tex
@@ -1,5 +1,3 @@
-% engine=luatex
-
%D \module
%D [ file=mtx-context-ideas,
%D version=2009.03.21,
diff --git a/Master/texmf-dist/tex/context/base/mtx-context-listing.tex b/Master/texmf-dist/tex/context/base/mtx-context-listing.tex
index 5c978fc6a33..d0dbcbba09b 100644
--- a/Master/texmf-dist/tex/context/base/mtx-context-listing.tex
+++ b/Master/texmf-dist/tex/context/base/mtx-context-listing.tex
@@ -1,5 +1,3 @@
-% engine=luatex
-
%D \module
%D [ file=mtx-context-listing,
%D version=2008.11.10, % about that time i started playing with this
@@ -23,53 +21,79 @@
% --topspace=dimension : distance above first line
% --backspace=dimension : distance before left margin
% --pretty : pretty print comform suffix (temporarily disabled)
+% --bodyfont=list : additional bodyfont settings
+% --paperformat=spec : paper*print or paperxprint
%
% end help
+\input mtx-context-common.tex
+
\setupbodyfont
- [11pt,tt]
+ [11pt,tt,\getdocumentargument{bodyfont}]
+
+\setuptyping
+ [lines=yes]
\setuplayout
[header=0cm,
footer=1.5cm,
+ topspace=\getdocumentargumentdefault{topspace}{1.5cm},
+ backspace=\getdocumentargumentdefault{backspace}{1.5cm},
width=middle,
height=middle]
-% todo: use \arguments{topspace}
+\setuppapersize
+ [\getdocumentargument{paperformat_paper}]
+ [\getdocumentargument{paperformat_print}]
-\startluacode
- local topspace = document.arguments["topspace"] or 0
- if dimen(topspace) > dimen(0) then
- tex.sprint(string.format("\\setuplayout[topspace=%s]",dimen(topspace)))
- end
- local backspace = document.arguments["backspace"] or 0
- if dimen(topspace) > dimen(0) then
- tex.sprint(string.format("\\setuplayout[backspace=%s]",dimen(backspace)))
- end
-\stopluacode
-
-\setuptyping
- [lines=yes]
-
-\setuptyping
- [option=color]
+% \startluacode
+% -- syntax check
+% local topspace = dimen(document.arguments.topspace or 0)
+% local backspace = dimen(document.arguments.backspace or 0)
+% local zeropoint = dimen(0)
+% if topspace > zeropoint then
+% context.setuplayout { topspace = tostring(topspace) }
+% end
+% if backspace > zeropoint then
+% context.setuplayout { backspace = tostring(backspace) }
+% end
+% \stopluacode
\starttext
\startluacode
+ local types = {
+ mkiv = "tex",
+ mkii = "tex",
+ cld = "lua",
+ lfg = "lua",
+ }
+
if #document.files > 0 then
- if document.arguments["sort"] then
+ if document.arguments.sort then
table.sort(document.files)
end
for _, filename in ipairs(document.files) do
if not string.find(filename,"^mtx%-context%-") then
- tex.sprint("\\page\n")
- tex.sprint(string.format("\\setupfootertexts[\\detokenize{%s}][\\pagenumber]\n",file.basename(filename)))
- tex.sprint(string.format("\\typefile{%s}",filename))
+ local pretty = document.arguments.pretty
+ if pretty == true then
+ pretty = file.extname(filename) or ""
+ elseif pretty == false then
+ pretty = ""
+ else
+ -- forced
+ end
+ context.page()
+ context.setupfootertexts( -- return true: we need to keep this entry
+ { function() context.detokenize(file.basename(filename)) return true end },
+ { function() context.pagenumber() return true end }
+ )
+ context.setuptyping { option = types[pretty] or pretty }
+ context.typefile(filename)
end
end
else
- tex.sprint(tex.ctxcatcodes,"no files given")
+ context("no files given")
end
\stopluacode
diff --git a/Master/texmf-dist/tex/context/base/mtx-context-timing.tex b/Master/texmf-dist/tex/context/base/mtx-context-timing.tex
index 51e6427f6f1..b788d4b6379 100644
--- a/Master/texmf-dist/tex/context/base/mtx-context-timing.tex
+++ b/Master/texmf-dist/tex/context/base/mtx-context-timing.tex
@@ -1,5 +1,3 @@
-% engine=luatex
-
%D \module
%D [ file=mtx-context-timing,
%D version=2009.03.21,
diff --git a/Master/texmf-dist/tex/context/base/mult-chk.lua b/Master/texmf-dist/tex/context/base/mult-chk.lua
index 2c1ab3c78aa..bdbd1dd22f9 100644
--- a/Master/texmf-dist/tex/context/base/mult-chk.lua
+++ b/Master/texmf-dist/tex/context/base/mult-chk.lua
@@ -1,15 +1,15 @@
if not modules then modules = { } end modules ['mult-chk'] = {
version = 1.001,
- comment = "companion to mult-chk.tex",
+ comment = "companion to mult-chk.mkiv",
author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
copyright = "PRAGMA ADE / ConTeXt Development Team",
license = "see context related readme files"
}
local format = string.format
+local lpegmatch = lpeg.match
local type = type
-local texsprint = tex.sprint
-local ctxcatcodes = tex.ctxcatcodes
+local texsprint, ctxcatcodes = tex.sprint, tex.ctxcatcodes
interfaces = interfaces or { }
@@ -59,7 +59,7 @@ function commands.getcheckedparameters(k,p,s)
if s and s ~= "" then
prefix, kind = p, k
keys = k and k ~= "" and interfaces.syntax[k].keys
- pattern:match(s)
+ lpegmatch(pattern,s)
end
end
diff --git a/Master/texmf-dist/tex/context/base/mult-cld.lua b/Master/texmf-dist/tex/context/base/mult-cld.lua
index c9e922afec0..81038b68b51 100644
--- a/Master/texmf-dist/tex/context/base/mult-cld.lua
+++ b/Master/texmf-dist/tex/context/base/mult-cld.lua
@@ -1,6 +1,6 @@
if not modules then modules = { } end modules ['mult-cld'] = {
version = 1.001,
- comment = "companion to mult-cld.tex",
+ comment = "companion to mult-cld.mkiv",
author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
copyright = "PRAGMA ADE / ConTeXt Development Team",
license = "see context related readme files"
@@ -13,91 +13,127 @@ if not modules then modules = { } end modules ['mult-cld'] = {
-- code. It can also be handy when generating documents from databases or
-- when constructing large tables or so.
--
--- Todo: optional checking against interface!
+-- Todo: optional checking against interface
+-- Todo: coroutine trickery
context = context or { }
local format, concat = string.format, table.concat
local next, type = next, type
-local texsprint, texiowrite = tex.sprint, texio.write
+local texsprint, texiowrite, ctxcatcodes = tex.sprint, texio.write, tex.ctxcatcodes
-local flush = texsprint
-local cache
+local flush = texsprint or function(cct,...) print(table.concat{...}) end
-local function cached_flush(c,...)
- local tt = { ... }
- for i=1,#tt do
- cache[#cache+1] = tt[i]
+local _stack_, _n_ = { }, 0
+
+local function _store_(ti)
+ _n_ = _n_ + 1
+ _stack_[_n_] = ti
+ return _n_
+end
+
+local function _flush_(n)
+ if not _stack_[n]() then
+ _stack_[n] = nil
+ else
+ -- keep, beware, that way the stack can grow
end
end
+context._stack_ = _stack_
+context._store_ = _store_
+context._flush_ = _flush_
+
+function tex.fprint(...) -- goodie
+ texsprint(ctxcatcodes,format(...))
+end
+
+function context.trace(intercept)
+ local normalflush = flush
+ flush = function(c,...)
+ logs.report("context",concat({...}))
+ if not intercept then
+ normalflush(c,...)
+ end
+ end
+ context.trace = function() end
+end
+
+trackers.register("context.flush", function(v) if v then context.trace() end end)
+trackers.register("context.intercept", function(v) if v then context.trace(true) end end)
+
local function writer(k,...)
- flush(ctxcatcodes,k)
- local t = { ... }
- if next(t) then
- for i=1,#t do
- local ti = t[i]
- local typ, force = type(ti), nil
- while typ == "function" do
- local saved_flush = flush
- cache = { }
- flush = cached_flush
- ti, force = ti()
- if force then
- typ = false -- force special cases
- elseif typ == "nil" then
- typ = "string"
- ti = concat(cache)
- elseif typ == "string" then
- ti = concat(cache)
- end
- flush = saved_flush
- end
- if ti == nil then
- -- next
- elseif typ == "string" or typ == "number" then
- flush(ctxcatcodes,"{",ti,"}")
- elseif typ == "table" then
- flush(ctxcatcodes,"[")
- local c = concat(ti,",")
- if c ~= "" then
- flush(ctxcatcodes,c)
- else
- local done = false
- for k, v in next, ti do
- if done then
- flush(ctxcatcodes,",",k,'=',v)
- else
- flush(ctxcatcodes,k,'=',v)
- done = true
+ if k then
+ flush(ctxcatcodes,k)
+ local t = { ... }
+ local nt = #t
+ if nt > 0 then
+ for i=1,nt do
+ local ti = t[i]
+ local typ = type(ti)
+ if ti == nil then
+ -- next
+ elseif typ == "function" then
+ flush(ctxcatcodes,"{\\mkivflush{" .. _store_(ti) .. "}}")
+ elseif typ == "string" or typ == "number" then
+ flush(ctxcatcodes,"{",ti,"}")
+ elseif typ == "table" then
+ local tn = #ti
+ if tn > 0 then
+ for j=1,tn do
+ local tj = ti[j]
+ if type(tj) == "function" then
+ ti[j] = "\\mkivflush{" .. _store_(tj) .. "}"
+ end
end
+ flush(ctxcatcodes,"[",concat(ti,","),"]")
+ else
+ flush(ctxcatcodes,"[")
+ local done = false
+ for k, v in next, ti do
+ if done then
+ flush(ctxcatcodes,",",k,'=',v)
+ else
+ flush(ctxcatcodes,k,'=',v)
+ done = true
+ end
+ end
+ flush(ctxcatcodes,"]")
end
- end
- flush(ctxcatcodes,"]")
- -- elseif typ == "boolean" then
- -- flush(ctxcatcodes,"\n")
- elseif ti == true then
- flush(ctxcatcodes,"\n")
- elseif typ == false then
- if force == "direct" then
+ -- elseif typ == "boolean" then
+ -- flush(ctxcatcodes,"\n")
+ elseif ti == true then
+ flush(ctxcatcodes,"\n")
+ elseif typ == false then
+ -- if force == "direct" then
flush(ctxcatcodes,tostring(ti))
+ -- end
+ elseif typ == "thread" then
+ logs.report("interfaces","coroutines not supported as we cannot yeild across boundaries")
+ else
+ logs.report("interfaces","error: %s gets a weird argument %s",k,tostring(ti))
end
- else
- logs.report("interfaces","error: %s gets a weird argument %s",k,tostring(ti))
end
end
end
end
+-- -- --
+
local function indexer(t,k)
- local f = function(...) return writer("\\"..k.." ",...) end -- building the cs here saves time
+ local c = "\\" .. k .. " "
+ local f = function(...) return writer(c,...) end
t[k] = f
return f
end
-local function caller(t,f,...)
- if f then
- flush(ctxcatcodes,format(f,...))
+local function caller(t,f,a,...)
+ if a then
+ flush(ctxcatcodes,format(f,a,...))
+ elseif type(f) == "function" then
+ flush(ctxcatcodes,"{\\mkivflush{" .. _store_(f) .. "}}")
+ elseif f then
+ flush(ctxcatcodes,f)
else
flush(ctxcatcodes,"\n")
end
@@ -113,16 +149,18 @@ function context.runfile(filename)
filename = resolvers.findtexfile(filename) or ""
if filename ~= "" then
local ok = dofile(filename)
- if ok then
+ if type(ok) == "function" then
if trace_cld then
- commands.writestatus("cld","begin of file '%s'",filename)
+ commands.writestatus("cld","begin of file '%s' (function call)",filename)
end
ok()
if trace_cld then
- commands.writestatus("cld","end of file '%s'",filename)
+ commands.writestatus("cld","end of file '%s' (function call)",filename)
end
+ elseif ok then
+ commands.writestatus("cld","file '%s' is processed and returns true",filename)
else
- commands.writestatus("cld","invalid file '%s'",filename)
+ commands.writestatus("cld","file '%s' is processed and returns nothing",filename)
end
else
commands.writestatus("cld","unknown file '%s'",filename)
@@ -149,7 +187,7 @@ end)
function context.enabletrackers (str) trackers.enable (str) end
function context.disabletrackers(str) trackers.disable(str) end
--- see demo-lud.lud for an example
+-- see demo-cld.cld for an example
-- context.starttext(true)
-- context.chapter({ "label" }, "title", true)
diff --git a/Master/texmf-dist/tex/context/base/mult-cld.mkiv b/Master/texmf-dist/tex/context/base/mult-cld.mkiv
index 05092865895..1c5ebd34af3 100644
--- a/Master/texmf-dist/tex/context/base/mult-cld.mkiv
+++ b/Master/texmf-dist/tex/context/base/mult-cld.mkiv
@@ -16,5 +16,14 @@
\writestatus{loading}{ConTeXt Multilingual Macros / Lua}
\registerctxluafile{mult-cld}{1.001}
+\registerctxluafile{mult-clm}{1.001}
-\endinput
+\unprotect
+
+\def\defmkivstart#1{\unexpanded\expandafter\def\csname\e!start#1\endcsname}
+\def\defmkivstop #1{\unexpanded\def\csname\e!stop #1\endcsname}
+\def\defmkiv #1{\unexpanded\def\csname #1\endcsname}
+
+\def\mkivflush #1{\ctxlua{context._flush_(#1)}}
+
+\protect \endinput
diff --git a/Master/texmf-dist/tex/context/base/mult-clm.lua b/Master/texmf-dist/tex/context/base/mult-clm.lua
new file mode 100644
index 00000000000..8838ea532d5
--- /dev/null
+++ b/Master/texmf-dist/tex/context/base/mult-clm.lua
@@ -0,0 +1,184 @@
+if not modules then modules = { } end modules ['mult-clm'] = {
+ version = 1.001,
+ comment = "companion to mult-clm.mkiv",
+ author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
+ copyright = "PRAGMA ADE / ConTeXt Development Team",
+ license = "see context related readme files"
+}
+
+-- another experiment
+-- todo: multilingual
+
+local texsprint, ctxcatcodes, vrbcatcodes = tex.sprint, tex.ctxcatcodes, tex.vrbcatcodes
+local format, insert, remove, concat = string.format, table.insert, table.remove, table.concat
+local unpack = unpack or table.unpack
+
+local trace_define = false trackers.register("context.define", function(v) trace_define = v end)
+
+mkiv = mkiv or { }
+
+mkiv.h, mkiv.a = aux.settings_to_hash, aux.settings_to_array
+
+local starters, stoppers, macros, stack = { }, { }, { }, { }
+
+local checkers = {
+ "\\dosingleempty",
+ "\\dodoubleempty",
+ "\\dotripleempty",
+ "\\doquadrupleempty",
+ "\\doquintupleempty",
+ "\\dosixtupleempty",
+}
+
+function mkiv.m(name,...)
+ macros[name](...)
+end
+
+function mkiv.b(name,...)
+ local sn = stack[name]
+ insert(sn,{...})
+ starters[name](...)
+end
+
+function mkiv.e(name)
+ local sn = stack[name]
+ local sv = remove(sn)
+ if sv then
+ stoppers[name](unpack(sv))
+ else
+ -- nesting error
+ end
+end
+
+mkiv.n = tonumber
+
+function mkiv.define(name,specification) -- name is optional
+ if type(name) == "table" then
+ specification = name
+ name = specification.name
+ end
+ if name and specification then
+ local arguments = specification.arguments
+ local na = (arguments and #arguments) or 0
+ local environment = specification.environment
+ if na == 0 then
+ if environment then
+ texsprint(ctxcatcodes,"\\defmkstart{",name,"}{\\ctxlua{mkiv.b('",name,"')}}")
+ texsprint(ctxcatcodes,"\\defmkstop{", name,"}{\\ctxlua{mkiv.b('",name,"')}}")
+ else
+ texsprint(ctxcatcodes,"\\defmkiv{", name,"}{\\ctxlua{mkiv.m('",name,"')}}")
+ end
+ else
+ stack[name] = { }
+ local opt, done = 0, false
+ local mkivdo = "\\mkivdo" .. name
+ texsprint(ctxcatcodes,"\\def",mkivdo)
+ for i=1,na do
+ local a = arguments[i]
+ local kind = a[1]
+ if kind == "option" then
+ texsprint(ctxcatcodes,"[#",i,"]")
+ if not done then
+ opt = opt + 1
+ end
+ else
+ done = true -- no more optional checking after this
+ texsprint(ctxcatcodes,"#",i)
+ end
+ end
+ if environment then
+ texsprint(ctxcatcodes,"{\\ctxlua{mkiv.b('",name,"'")
+ else
+ texsprint(ctxcatcodes,"{\\ctxlua{mkiv.m('",name,"'")
+ end
+ for i=1,na do
+ local a = arguments[i]
+ local kind = a[2]
+ if kind == "list" then
+ texsprint(ctxcatcodes,",mkiv.a([[#",i,"]])")
+ elseif kind == "hash" then
+ texsprint(ctxcatcodes,",mkiv.h([[#",i,"]])")
+ elseif kind == "number" then
+ texsprint(ctxcatcodes,",mkiv.n([[#",i,"]])")
+ else
+ texsprint(ctxcatcodes,",[[#",i,"]]")
+ end
+ end
+ texsprint(ctxcatcodes,")}}")
+ if environment then
+ texsprint(ctxcatcodes,"\\defmkivstop{" ,name,"}{\\ctxlua{mkiv.e('",name,"')}}")
+ texsprint(ctxcatcodes,"\\defmkivstart{",name,"}{",checkers[opt],mkivdo,"}")
+ else
+ texsprint(ctxcatcodes,"\\defmkiv{", name,"}{",checkers[opt],mkivdo,"}")
+ end
+ end
+ if environment then
+ starters[name] = specification.starter
+ stoppers[name] = specification.stopper
+ else
+ macros[name] = specification.macro
+ end
+ end
+end
+
+function mkiv.tolist(t)
+ local r = { }
+ for i=1,#t do
+ r[i] = t[i]
+ end
+ for k,v in table.sortedhash(t) do
+ if type(k) ~= "number" then
+ r[#r+1] = k .. "=" .. v
+ end
+ end
+ return concat(r,", ")
+end
+
+--~ \startluacode
+--~ function test(opt_1, opt_2, arg_1)
+--~ context.startnarrower()
+--~ context("options 1: %s",mkiv.tolist(opt_1))
+--~ context.par()
+--~ context("options 2: %s",mkiv.tolist(opt_2))
+--~ context.par()
+--~ context("argument 1: %s",arg_1)
+--~ context.stopnarrower()
+--~ end
+
+--~ mkiv.define {
+--~ name = "test",
+--~ arguments = {
+--~ { "option", "list" },
+--~ { "option", "hash" },
+--~ { "content", "string" },
+--~ },
+--~ macro = test,
+--~ }
+--~ \stopluacode
+
+--~ test: \test[1][a=3]{whatever}
+
+--~ \startluacode
+--~ local function startmore(opt_1)
+--~ context.startnarrower()
+--~ context("start more, options: %s",mkiv.tolist(opt_1))
+--~ context.startnarrower()
+--~ end
+
+--~ local function stopmore(opt_1)
+--~ context.stopnarrower()
+--~ context("stop more, options: %s",mkiv.tolist(opt_1))
+--~ context.stopnarrower()
+--~ end
+
+--~ mkiv.define ( "more", {
+--~ environment = true,
+--~ arguments = {
+--~ { "option", "list" },
+--~ },
+--~ starter = startmore,
+--~ stopper = stopmore,
+--~ } )
+--~ \stopluacode
+
+--~ more: \startmore[1] one \startmore[2] two \stopmore one \stopmore
diff --git a/Master/texmf-dist/tex/context/base/mult-de.tex b/Master/texmf-dist/tex/context/base/mult-de.tex
index 3213fa7de93..f6f4f3bf9d1 100644
--- a/Master/texmf-dist/tex/context/base/mult-de.tex
+++ b/Master/texmf-dist/tex/context/base/mult-de.tex
@@ -75,6 +75,7 @@
\setinterfacevariable{atmargin}{amrand}
\setinterfacevariable{atpage}{aufseite}
\setinterfacevariable{august}{August}
+\setinterfacevariable{author}{autor}
\setinterfacevariable{auto}{auto}
\setinterfacevariable{autointro}{autointro}
\setinterfacevariable{back}{zurueck}
@@ -83,7 +84,10 @@
\setinterfacevariable{backpart}{epilog}
\setinterfacevariable{backspace}{rumpfspatium}
\setinterfacevariable{backward}{rueckwaerts}
+\setinterfacevariable{bbl}{bbl}
\setinterfacevariable{before}{vor}
+\setinterfacevariable{begin}{begin}
+\setinterfacevariable{bib}{bib}
\setinterfacevariable{big}{gross}
\setinterfacevariable{bigbodyfont}{bigbodyfont}
\setinterfacevariable{bigpreference}{grosszuegig}
@@ -108,6 +112,7 @@
\setinterfacevariable{chapter}{kapitel}
\setinterfacevariable{character}{buchstabe}
\setinterfacevariable{characters}{buchstaben}
+\setinterfacevariable{cite}{cite}
\setinterfacevariable{color}{farbe}
\setinterfacevariable{column}{column}
\setinterfacevariable{columns}{spalten}
@@ -133,9 +138,11 @@
\setinterfacevariable{display}{bildschirm}
\setinterfacevariable{dot}{punkt}
\setinterfacevariable{doublesided}{doppelseitig}
+\setinterfacevariable{down}{down}
\setinterfacevariable{each}{jede}
\setinterfacevariable{edge}{kante}
\setinterfacevariable{empty}{leer}
+\setinterfacevariable{end}{end}
\setinterfacevariable{endnote}{endnote}
\setinterfacevariable{enumeration}{nummerierung}
\setinterfacevariable{environment}{umgebung}
@@ -265,11 +272,15 @@
\setinterfacevariable{mathcases}{mathcases}
\setinterfacevariable{mathmatrix}{mathmatrix}
\setinterfacevariable{max}{max}
+\setinterfacevariable{maxdepth}{maxdepth}
+\setinterfacevariable{maxheight}{maxheight}
+\setinterfacevariable{maxwidth}{maxwidth}
\setinterfacevariable{may}{Mai}
\setinterfacevariable{mediaeval}{mittelalterlich}
\setinterfacevariable{medium}{mittel}
\setinterfacevariable{middle}{mittig}
\setinterfacevariable{min}{min}
+\setinterfacevariable{mindepth}{mindepth}
\setinterfacevariable{minheight}{minhoehe}
\setinterfacevariable{minwidth}{minbreite}
\setinterfacevariable{mirrored}{gespiegelt}
@@ -317,8 +328,12 @@
\setinterfacevariable{outer}{aussen}
\setinterfacevariable{outeredge}{outeredge}
\setinterfacevariable{outermargin}{outermargin}
+\setinterfacevariable{overbar}{ueberstrichen}
+\setinterfacevariable{overbars}{ueberstreichen}
\setinterfacevariable{overlay}{overlay}
\setinterfacevariable{overprint}{overprint}
+\setinterfacevariable{overstrike}{durchgestrichen}
+\setinterfacevariable{overstrikes}{durchstreichen}
\setinterfacevariable{packed}{gepackt}
\setinterfacevariable{page}{seite}
\setinterfacevariable{pagecomment}{pagecomment}
@@ -386,6 +401,7 @@
\setinterfacevariable{serried}{kleinerabstand}
\setinterfacevariable{setups}{impostazioni}
\setinterfacevariable{sheet}{sheet}
+\setinterfacevariable{short}{kurz}
\setinterfacevariable{singlesided}{einzelseitig}
\setinterfacevariable{slanted}{geneigt}
\setinterfacevariable{slantedbold}{geneigtfett}
@@ -410,6 +426,7 @@
\setinterfacevariable{spot}{spot}
\setinterfacevariable{standard}{standard}
\setinterfacevariable{start}{start}
+\setinterfacevariable{starter}{starter}
\setinterfacevariable{sticker}{sticker}
\setinterfacevariable{stop}{stop}
\setinterfacevariable{stopper}{trenner}
@@ -471,10 +488,13 @@
\setinterfacevariable{type}{tippen}
\setinterfacevariable{typing}{tippen}
\setinterfacevariable{unavailable}{nichtverfuegbar}
+\setinterfacevariable{underbar}{unterstrichen}
+\setinterfacevariable{underbars}{unterstreichen}
\setinterfacevariable{unit}{einheit}
\setinterfacevariable{units}{einheiten}
\setinterfacevariable{unknown}{unbekannt}
\setinterfacevariable{unpacked}{ungepackt}
+\setinterfacevariable{up}{up}
\setinterfacevariable{url}{url}
\setinterfacevariable{used}{verwende}
\setinterfacevariable{value}{wert}
@@ -502,12 +522,21 @@
\setinterfaceconstant{align}{ausrichtung}
\setinterfaceconstant{aligncharacter}{aligncharacter}
\setinterfaceconstant{alignmentcharacter}{alignmentcharacter}
+\setinterfaceconstant{alignsymbol}{alignsymbol}
\setinterfaceconstant{aligntitle}{titelausrichten}
\setinterfaceconstant{alternative}{alternative}
+\setinterfaceconstant{andtext}{andtext}
\setinterfaceconstant{apa}{apa}
\setinterfaceconstant{arrow}{pfeil}
+\setinterfaceconstant{artauthor}{artauthor}
+\setinterfaceconstant{artauthoretaldisplay}{artauthoretaldisplay}
+\setinterfaceconstant{artauthoretallimit}{artauthoretallimit}
+\setinterfaceconstant{artauthoretaltext}{artauthoretaltext}
\setinterfaceconstant{at}{bei}
\setinterfaceconstant{author}{autor}
+\setinterfaceconstant{authoretaldisplay}{authoretaldisplay}
+\setinterfaceconstant{authoretallimit}{authoretallimit}
+\setinterfaceconstant{authoretaltext}{authoretaltext}
\setinterfaceconstant{auto}{auto}
\setinterfaceconstant{autofile}{autofile}
\setinterfaceconstant{autofocus}{autofocus}
@@ -576,6 +605,7 @@
\setinterfaceconstant{cutspace}{cutspace}
\setinterfaceconstant{dash}{strich}
\setinterfaceconstant{dat}{dat}
+\setinterfaceconstant{database}{database}
\setinterfaceconstant{date}{datum}
\setinterfaceconstant{deepnumbercommand}{deepnumbercommand}
\setinterfaceconstant{deeptextcommand}{deeptextcommand}
@@ -594,12 +624,17 @@
\setinterfaceconstant{dy}{dy}
\setinterfaceconstant{edge}{kante}
\setinterfaceconstant{edgedistance}{kantenabstand}
+\setinterfaceconstant{editor}{editor}
+\setinterfaceconstant{editoretaldisplay}{editoretaldisplay}
+\setinterfaceconstant{editoretallimit}{editoretallimit}
+\setinterfaceconstant{editoretaltext}{editoretaltext}
\setinterfaceconstant{empty}{leer}
\setinterfaceconstant{equalheight}{equalheight}
\setinterfaceconstant{equalwidth}{equalwidth}
\setinterfaceconstant{escape}{escape}
\setinterfaceconstant{evenmargin}{geraderand}
\setinterfaceconstant{expansion}{expansion}
+\setinterfaceconstant{export}{export}
\setinterfaceconstant{extras}{extras}
\setinterfaceconstant{factor}{faktor}
\setinterfaceconstant{fallback}{fallback}
@@ -610,6 +645,8 @@
\setinterfaceconstant{fieldoffset}{feldoffset}
\setinterfaceconstant{file}{datei}
\setinterfaceconstant{filtercommand}{filtercommand}
+\setinterfaceconstant{finalnamesep}{finalnamesep}
+\setinterfaceconstant{firstnamesep}{firstnamesep}
\setinterfaceconstant{focus}{focus}
\setinterfaceconstant{focusin}{focusin}
\setinterfaceconstant{focusout}{focusout}
@@ -631,6 +668,7 @@
\setinterfaceconstant{global}{global}
\setinterfaceconstant{grid}{gritter}
\setinterfaceconstant{hang}{haengend}
+\setinterfaceconstant{headalign}{headalign}
\setinterfaceconstant{headcolor}{kopffarbe}
\setinterfaceconstant{headcommand}{headcommand}
\setinterfaceconstant{headconversion}{headconversion}
@@ -658,14 +696,18 @@
\setinterfaceconstant{inner}{innen}
\setinterfaceconstant{innermargin}{innermargin}
\setinterfaceconstant{inputfile}{inputfile}
+\setinterfaceconstant{intent}{intent}
\setinterfaceconstant{interaction}{interaktion}
\setinterfaceconstant{interlinespace}{zeilenabstande}
\setinterfaceconstant{itemalign}{itemalign}
\setinterfaceconstant{items}{posten}
+\setinterfaceconstant{juniorsep}{juniorsep}
\setinterfaceconstant{ken}{ken}
\setinterfaceconstant{keyexpansion}{keyexpansion}
\setinterfaceconstant{keyword}{keyword}
\setinterfaceconstant{label}{label}
+\setinterfaceconstant{lastnamesep}{lastnamesep}
+\setinterfaceconstant{lastpubsep}{lastpubsep}
\setinterfaceconstant{left}{links}
\setinterfaceconstant{leftcolor}{linkerfarbe}
\setinterfaceconstant{leftcompoundhyphen}{leftcompoundhyphen}
@@ -705,8 +747,10 @@
\setinterfaceconstant{marking}{beschriftung}
\setinterfaceconstant{marstyle}{beschrstil}
\setinterfaceconstant{max}{max}
+\setinterfaceconstant{maxdepth}{maxdepth}
\setinterfaceconstant{maxheight}{maxhoehe}
\setinterfaceconstant{maxwidth}{maxbreite}
+\setinterfaceconstant{maybeyear}{maybeyear}
\setinterfaceconstant{menu}{menue}
\setinterfaceconstant{method}{methode}
\setinterfaceconstant{middle}{mittig}
@@ -717,8 +761,10 @@
\setinterfaceconstant{mindepth}{mindepth}
\setinterfaceconstant{minheight}{minhoehe}
\setinterfaceconstant{minwidth}{minbreite}
+\setinterfaceconstant{monthconversion}{monthconversion}
\setinterfaceconstant{n}{n}
\setinterfaceconstant{name}{name}
+\setinterfaceconstant{namesep}{namesep}
\setinterfaceconstant{nbottom}{nunten}
\setinterfaceconstant{nc}{nc}
\setinterfaceconstant{next}{folgende}
@@ -742,6 +788,7 @@
\setinterfaceconstant{numberseparator}{nummernseperator}
\setinterfaceconstant{numberseparatorset}{numberseparatorset}
\setinterfaceconstant{numberset}{numberset}
+\setinterfaceconstant{numberstarter}{numberstarter}
\setinterfaceconstant{numberstopper}{numberstopper}
\setinterfaceconstant{numberstyle}{nummernstil}
\setinterfaceconstant{numberwidth}{numberwidth}
@@ -754,7 +801,9 @@
\setinterfaceconstant{openaction}{oeffenaktion}
\setinterfaceconstant{openpageaction}{openpageaction}
\setinterfaceconstant{option}{option}
+\setinterfaceconstant{order}{order}
\setinterfaceconstant{orientation}{orientation}
+\setinterfaceconstant{otherstext}{otherstext}
\setinterfaceconstant{outermargin}{outermargin}
\setinterfaceconstant{overprint}{overprint}
\setinterfaceconstant{ownnumber}{eigenenummer}
@@ -772,10 +821,12 @@
\setinterfaceconstant{pageprefixsegments}{pageprefixsegments}
\setinterfaceconstant{pageprefixseparatorset}{pageprefixseparatorset}
\setinterfaceconstant{pageprefixset}{pageprefixset}
+\setinterfaceconstant{pageprefixstarter}{pageprefixstarter}
\setinterfaceconstant{pageprefixstopper}{pageprefixstopper}
\setinterfaceconstant{pagesegments}{pagesegments}
\setinterfaceconstant{pageseparatorset}{pageseparatorset}
\setinterfaceconstant{pageset}{pageset}
+\setinterfaceconstant{pagestarter}{pagestarter}
\setinterfaceconstant{pagestate}{pagestate}
\setinterfaceconstant{pagestopper}{pagestopper}
\setinterfaceconstant{pagestyle}{seitenstil}
@@ -793,16 +844,20 @@
\setinterfaceconstant{prefixsegments}{prefixsegments}
\setinterfaceconstant{prefixseparatorset}{prefixseparatorset}
\setinterfaceconstant{prefixset}{prefixset}
+\setinterfaceconstant{prefixstarter}{prefixstarter}
\setinterfaceconstant{prefixstopper}{prefixstopper}
\setinterfaceconstant{preset}{voreinstellung}
\setinterfaceconstant{preview}{vorschau}
\setinterfaceconstant{previous}{vorige}
\setinterfaceconstant{previousnumber}{vorigenummer}
\setinterfaceconstant{process}{process}
+\setinterfaceconstant{pubsep}{pubsep}
\setinterfaceconstant{radius}{radius}
\setinterfaceconstant{random}{zufaellig}
+\setinterfaceconstant{range}{range}
\setinterfaceconstant{reduction}{reduktion}
\setinterfaceconstant{ref}{ref}
+\setinterfaceconstant{refcommand}{refcommand}
\setinterfaceconstant{reference}{referenz}
\setinterfaceconstant{referenceprefix}{referenceprefix}
\setinterfaceconstant{referencing}{referieren}
@@ -836,6 +891,7 @@
\setinterfaceconstant{rulethickness}{liniendicke}
\setinterfaceconstant{samepage}{selbeseite}
\setinterfaceconstant{sample}{muster}
+\setinterfaceconstant{samplesize}{samplesize}
\setinterfaceconstant{saveinlist}{saveinlist}
\setinterfaceconstant{scale}{format}
\setinterfaceconstant{scope}{bereich}
@@ -848,6 +904,7 @@
\setinterfaceconstant{sectionsegments}{sectionsegments}
\setinterfaceconstant{sectionseparatorset}{sectionseparatorset}
\setinterfaceconstant{sectionset}{sectionset}
+\setinterfaceconstant{sectionstarter}{sectionstarter}
\setinterfaceconstant{sectionstopper}{sectionstopper}
\setinterfaceconstant{separator}{seperator}
\setinterfaceconstant{set}{set}
@@ -860,6 +917,7 @@
\setinterfaceconstant{sign}{zeichen}
\setinterfaceconstant{size}{groesse}
\setinterfaceconstant{small}{klein}
+\setinterfaceconstant{sort}{sort}
\setinterfaceconstant{sorttype}{sorttype}
\setinterfaceconstant{source}{quelle}
\setinterfaceconstant{space}{spatium}
@@ -874,16 +932,19 @@
\setinterfaceconstant{spot}{spot}
\setinterfaceconstant{stack}{stack}
\setinterfaceconstant{start}{start}
+\setinterfaceconstant{starter}{starter}
\setinterfaceconstant{state}{status}
\setinterfaceconstant{step}{schritt}
\setinterfaceconstant{stop}{stop}
\setinterfaceconstant{stopper}{abschnitttrenner}
\setinterfaceconstant{stretch}{strecken}
+\setinterfaceconstant{strip}{strip}
\setinterfaceconstant{strut}{strut}
\setinterfaceconstant{style}{stil}
\setinterfaceconstant{sub}{unter}
\setinterfaceconstant{subtitle}{untertitel}
\setinterfaceconstant{suffix}{suffix}
+\setinterfaceconstant{surnamesep}{surnamesep}
\setinterfaceconstant{sx}{sx}
\setinterfaceconstant{sy}{sy}
\setinterfaceconstant{symalign}{symausrichtung}
@@ -923,6 +984,7 @@
\setinterfaceconstant{topoffset}{obenoffset}
\setinterfaceconstant{topspace}{kopfspatium}
\setinterfaceconstant{topstate}{statusoben}
+\setinterfaceconstant{totalnumber}{totalnumber}
\setinterfaceconstant{type}{typ}
\setinterfaceconstant{unit}{einheit}
\setinterfaceconstant{unknownreference}{unbekantereferenz}
@@ -933,6 +995,7 @@
\setinterfaceconstant{veroffset}{kopfoffset}
\setinterfaceconstant{vfil}{vfil}
\setinterfaceconstant{voffset}{voffset}
+\setinterfaceconstant{vonsep}{vonsep}
\setinterfaceconstant{way}{art}
\setinterfaceconstant{wfactor}{bfaktor}
\setinterfaceconstant{white}{weiss}
@@ -1261,10 +1324,6 @@
\setinterfacecommand{outeredgewidth}{outeredgewidth}
\setinterfacecommand{outermargindistance}{outermargindistance}
\setinterfacecommand{outermarginwidth}{outermarginwidth}
-\setinterfacecommand{overbar}{ueberstrichen}
-\setinterfacecommand{overbars}{ueberstreichen}
-\setinterfacecommand{overstrike}{durchgestrichen}
-\setinterfacecommand{overstrikes}{durchstreichen}
\setinterfacecommand{packed}{kleinerdurchschuss}
\setinterfacecommand{page}{seite}
\setinterfacecommand{pagedepth}{pagedepth}
@@ -1599,8 +1658,6 @@
\setinterfacecommand{type}{tippen}
\setinterfacecommand{typebuffer}{tippepuffer}
\setinterfacecommand{typefile}{tippedatei}
-\setinterfacecommand{underbar}{unterstrichen}
-\setinterfacecommand{underbars}{unterstreichen}
\setinterfacecommand{unitmeaning}{bedeutung}
\setinterfacecommand{unknown}{unbekant}
\setinterfacecommand{useJSscripts}{verwendeJSscript}
diff --git a/Master/texmf-dist/tex/context/base/mult-def.lua b/Master/texmf-dist/tex/context/base/mult-def.lua
index 2fea7dfe7fd..ce5af2bba37 100644
--- a/Master/texmf-dist/tex/context/base/mult-def.lua
+++ b/Master/texmf-dist/tex/context/base/mult-def.lua
@@ -1,3 +1,11 @@
+if not modules then modules = { } end modules ['mult-def'] = {
+ version = 1.001,
+ comment = "companion to mult-ini.mkiv",
+ author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
+ copyright = "PRAGMA ADE / ConTeXt Development Team",
+ license = "see context related readme files"
+}
+
return {
["commands"]={
["CAPPED"]={
@@ -2821,46 +2829,6 @@ return {
["pe"]="عرض‌حاشیه‌خارجی",
["ro"]="outermarginwidth",
},
- ["overbar"]={
- ["cs"]="nadtrzeno",
- ["de"]="ueberstrichen",
- ["en"]="overbar",
- ["fr"]="overbar",
- ["it"]="sopralinea",
- ["nl"]="overstreep",
- ["pe"]="میله‌رو",
- ["ro"]="barasus",
- },
- ["overbars"]={
- ["cs"]="nadtrzeni",
- ["de"]="ueberstreichen",
- ["en"]="overbars",
- ["fr"]="overbars",
- ["it"]="sopralinee",
- ["nl"]="overstrepen",
- ["pe"]="میله‌ها‌رو",
- ["ro"]="supralinie",
- },
- ["overstrike"]={
- ["cs"]="preskrtnuto",
- ["de"]="durchgestrichen",
- ["en"]="overstrike",
- ["fr"]="surlignetout",
- ["it"]="sbarrato",
- ["nl"]="doorstreep",
- ["pe"]="خط‌زدن",
- ["ro"]="liniepeste",
- },
- ["overstrikes"]={
- ["cs"]="preskrtnuti",
- ["de"]="durchstreichen",
- ["en"]="overstrikes",
- ["fr"]="surligne",
- ["it"]="sbarrati",
- ["nl"]="doorstrepen",
- ["pe"]="خط‌زدنها",
- ["ro"]="liniipeste",
- },
["packed"]={
["cs"]="zhustene",
["de"]="kleinerdurchschuss",
@@ -6201,26 +6169,6 @@ return {
["pe"]="تایپ‌پرونده",
["ro"]="typefile",
},
- ["underbar"]={
- ["cs"]="podtrzeno",
- ["de"]="unterstrichen",
- ["en"]="underbar",
- ["fr"]="souslignetout",
- ["it"]="sottolinea",
- ["nl"]="onderstreep",
- ["pe"]="میله‌زیر",
- ["ro"]="sublinie",
- },
- ["underbars"]={
- ["cs"]="podtrzeni",
- ["de"]="unterstreichen",
- ["en"]="underbars",
- ["fr"]="sousligne",
- ["it"]="sottolinee",
- ["nl"]="onderstrepen",
- ["pe"]="میله‌‌های‌زیر",
- ["ro"]="sublinii",
- },
["unitmeaning"]={
["cs"]="vyznam",
["de"]="bedeutung",
@@ -6532,6 +6480,104 @@ return {
},
},
["constants"]={
+ ["strip"]={
+ ["en"]="strip",
+ },
+ ["order"]={
+ ["en"]="order",
+ },
+ ["headalign"]={
+ ["en"]="headalign",
+ ["nl"]="kopuitlijnen",
+ },
+ ["alignsymbol"]={
+ ["en"]="alignsymbol",
+ },
+ ["export"]={
+ ["en"]="export",
+ ["nl"]="exporteer",
+ },
+ ["database"]={
+ ["en"]="database",
+ },
+ ["artauthor"]={
+ ["en"]="artauthor",
+ },
+ ["editor"]={
+ ["en"]="editor",
+ },
+ ["authoretallimit"]={
+ ["en"]="authoretallimit",
+ },
+ ["artauthoretallimit"]={
+ ["en"]="artauthoretallimit",
+ },
+ ["editoretallimit"]={
+ ["en"]="editoretallimit",
+ },
+ ["authoretaldisplay"]={
+ ["en"]="authoretaldisplay",
+ },
+ ["artauthoretaldisplay"]={
+ ["en"]="artauthoretaldisplay",
+ },
+ ["editoretaldisplay"]={
+ ["en"]="editoretaldisplay",
+ },
+ ["authoretaltext"]={
+ ["en"]="authoretaltext",
+ },
+ ["artauthoretaltext"]={
+ ["en"]="artauthoretaltext",
+ },
+ ["editoretaltext"]={
+ ["en"]="editoretaltext",
+ },
+ ["otherstext"]={
+ ["en"]="otherstext",
+ },
+ ["andtext"]={
+ ["en"]="andtext",
+ },
+ ["totalnumber"]={
+ ["en"]="totalnumber",
+ },
+ ["firstnamesep"]={
+ ["en"]="firstnamesep",
+ },
+ ["vonsep"]={
+ ["en"]="vonsep",
+ },
+ ["juniorsep"]={
+ ["en"]="juniorsep",
+ },
+ ["surnamesep"]={
+ ["en"]="surnamesep",
+ },
+ ["lastnamesep"]={
+ ["en"]="lastnamesep",
+ },
+ ["finalnamesep"]={
+ ["en"]="finalnamesep",
+ },
+ ["namesep"]={
+ ["en"]="namesep",
+ },
+ ["pubsep"]={
+ ["en"]="pubsep",
+ },
+ ["lastpubsep"]={
+ ["en"]="lastpubsep",
+ },
+ ["refcommand"]={
+ ["en"]="refcommand",
+ },
+ ["samplesize"]={
+ ["en"]="samplesize",
+ },
+ ["maybeyear"]={
+ ["en"]="maybeyear",
+ },
["action"]={
["cs"]="akce",
["de"]="aktion",
@@ -7098,6 +7144,9 @@ return {
["pe"]="رنگ",
["ro"]="culoare",
},
+ ["intent"]={
+ ["en"]="intent",
+ },
["column"]={
["cs"]="sloupec",
["de"]="spalte",
@@ -8617,6 +8666,9 @@ return {
["pe"]="بیشترین‌ارتفاع",
["ro"]="inaltimemaxima",
},
+ ["maxdepth"]={
+ ["en"]="maxdepth",
+ },
["maxwidth"]={
["cs"]="maxsirka",
["de"]="maxbreite",
@@ -8727,6 +8779,10 @@ return {
["pe"]="کمترین‌عرض",
["ro"]="latimeminima",
},
+ ["monthconversion"]={
+ ["en"]="monthconversion",
+ ["nl"]="maandconversie",
+ },
["n"]={
["cs"]="n",
["de"]="n",
@@ -8931,6 +8987,9 @@ return {
["numberstopper"]={
["en"]="numberstopper",
},
+ ["numberstarter"]={
+ ["en"]="numberstarter",
+ },
["numberstyle"]={
["cs"]="stylcisla",
["de"]="nummernstil",
@@ -9161,6 +9220,9 @@ return {
["pageprefixstopper"]={
["en"]="pageprefixstopper",
},
+ ["pageprefixstarter"]={
+ ["en"]="pageprefixstarter",
+ },
["pagesegments"]={
["en"]="pagesegments",
},
@@ -9183,6 +9245,9 @@ return {
["pagestopper"]={
["en"]="pagestopper",
},
+ ["pagestarter"]={
+ ["en"]="pagestarter",
+ },
["pagestyle"]={
["cs"]="stylstranky",
["de"]="seitenstil",
@@ -9294,6 +9359,9 @@ return {
["prefixstopper"]={
["en"]="prefixstopper",
},
+ ["prefixstarter"]={
+ ["en"]="prefixstarter",
+ },
["preset"]={
["cs"]="prednastaveni",
["de"]="voreinstellung",
@@ -9364,6 +9432,10 @@ return {
["pe"]="تصادفی",
["ro"]="aleator",
},
+ ["range"]={
+ ["en"]="range",
+ ["nl"]="bereik",
+ },
["reduction"]={
["cs"]="redukce",
["de"]="reduktion",
@@ -9781,6 +9853,9 @@ return {
["sectionstopper"]={
["en"]="sectionstopper",
},
+ ["sectionstarter"]={
+ ["en"]="sectionstarter",
+ },
["separator"]={
["cs"]="oddelovac",
["de"]="seperator",
@@ -9891,6 +9966,9 @@ return {
["pe"]="کوچک",
["ro"]="mic",
},
+ ["sort"]={
+ ["en"]="sort",
+ },
["sorttype"]={
["cs"]="sorttype",
["de"]="sorttype",
@@ -10071,6 +10149,10 @@ return {
["pe"]="ایست",
["ro"]="stopper",
},
+ ["starter"]={
+ ["en"]="starter",
+ ["nl"]="opener",
+ },
["stretch"]={
["cs"]="natahnout",
["de"]="strecken",
@@ -11045,6 +11127,127 @@ return {
},
},
["variables"]={
+ ["end"]={
+ ["en"]="end",
+ ["nl"]="eind",
+ },
+ ["begin"]={
+ ["en"]="begin",
+ ["nl"]="begin",
+ },
+ ["down"]={
+ ["en"]="down",
+ ["nl"]="omlaag",
+ },
+ ["up"]={
+ ["en"]="up",
+ ["nl"]="omhoog",
+ },
+ ["underbar"]={
+ ["cs"]="podtrzeno",
+ ["de"]="unterstrichen",
+ ["en"]="underbar",
+ ["fr"]="souslignetout",
+ ["it"]="sottolinea",
+ ["nl"]="onderstreep",
+ ["pe"]="میله‌زیر",
+ ["ro"]="sublinie",
+ },
+ ["underbars"]={
+ ["cs"]="podtrzeni",
+ ["de"]="unterstreichen",
+ ["en"]="underbars",
+ ["fr"]="sousligne",
+ ["it"]="sottolinee",
+ ["nl"]="onderstrepen",
+ ["pe"]="میله‌‌های‌زیر",
+ ["ro"]="sublinii",
+ },
+ ["overbar"]={
+ ["cs"]="nadtrzeno",
+ ["de"]="ueberstrichen",
+ ["en"]="overbar",
+ ["fr"]="overbar",
+ ["it"]="sopralinea",
+ ["nl"]="overstreep",
+ ["pe"]="میله‌رو",
+ ["ro"]="barasus",
+ },
+ ["overbars"]={
+ ["cs"]="nadtrzeni",
+ ["de"]="ueberstreichen",
+ ["en"]="overbars",
+ ["fr"]="overbars",
+ ["it"]="sopralinee",
+ ["nl"]="overstrepen",
+ ["pe"]="میله‌ها‌رو",
+ ["ro"]="supralinie",
+ },
+ ["overstrike"]={
+ ["cs"]="preskrtnuto",
+ ["de"]="durchgestrichen",
+ ["en"]="overstrike",
+ ["fr"]="surlignetout",
+ ["it"]="sbarrato",
+ ["nl"]="doorstreep",
+ ["pe"]="خط‌زدن",
+ ["ro"]="liniepeste",
+ },
+ ["overstrikes"]={
+ ["cs"]="preskrtnuti",
+ ["de"]="durchstreichen",
+ ["en"]="overstrikes",
+ ["fr"]="surligne",
+ ["it"]="sbarrati",
+ ["nl"]="doorstrepen",
+ ["pe"]="خط‌زدنها",
+ ["ro"]="liniipeste",
+ },
+ ["maxheight"]={
+ ["en"]="maxheight",
+ },
+ ["maxdepth"]={
+ ["en"]="maxdepth",
+ },
+ ["maxwidth"]={
+ ["en"]="maxwidth",
+ },
+ ["minheight"]={
+ ["en"]="minheight",
+ },
+ ["mindepth"]={
+ ["en"]="mindepth",
+ },
+ ["minwidth"]={
+ ["en"]="minwidth",
+ },
+ ["short"]={
+ ["nl"]="kort",
+ ["en"]="short",
+ ["de"]="kurz",
+ ["cs"]="short",
+ ["it"]="short",
+ ["ro"]="short",
+ ["fr"]="short",
+ },
+ ["cite"]={
+ ["en"]="cite",
+ },
+ ["bbl"]={
+ ["en"]="bbl",
+ },
+ ["bib"]={
+ ["en"]="bib",
+ },
+ ["author"]={
+ ["nl"]="auteur",
+ ["en"]="author",
+ ["de"]="autor",
+ ["cs"]="autor",
+ ["it"]="autore",
+ ["ro"]="autor",
+ ["fr"]="auteur",
+ },
["Addition"]={
["cs"]="Pridavek",
["de"]="Zusatz",
@@ -15148,6 +15351,10 @@ return {
["pe"]="ایست",
["ro"]="stopper",
},
+ ["starter"]={
+ ["en"]="starter",
+ ["nl"]="opener",
+ },
["stretch"]={
["cs"]="natahnout",
["de"]="strecken",
@@ -15171,10 +15378,10 @@ return {
["strong"]={
["cs"]="strong",
["de"]="strong",
- ["en"]="sterk",
+ ["en"]="strong",
["fr"]="strong",
["it"]="strong",
- ["nl"]="strong",
+ ["nl"]="sterk",
["pe"]="محکم",
["ro"]="strong",
},
@@ -15841,10 +16048,10 @@ return {
["weak"]={
["cs"]="weak",
["de"]="weak",
- ["en"]="zwak",
+ ["en"]="weak",
["fr"]="weak",
["it"]="weak",
- ["nl"]="weak",
+ ["nl"]="zwak",
["pe"]="هفته",
["ro"]="weak",
},
diff --git a/Master/texmf-dist/tex/context/base/mult-en.tex b/Master/texmf-dist/tex/context/base/mult-en.tex
index 50997b1d8c5..20917a034ce 100644
--- a/Master/texmf-dist/tex/context/base/mult-en.tex
+++ b/Master/texmf-dist/tex/context/base/mult-en.tex
@@ -75,6 +75,7 @@
\setinterfacevariable{atmargin}{atmargin}
\setinterfacevariable{atpage}{atpage}
\setinterfacevariable{august}{August}
+\setinterfacevariable{author}{author}
\setinterfacevariable{auto}{auto}
\setinterfacevariable{autointro}{autointro}
\setinterfacevariable{back}{back}
@@ -83,7 +84,10 @@
\setinterfacevariable{backpart}{backpart}
\setinterfacevariable{backspace}{backspace}
\setinterfacevariable{backward}{backward}
+\setinterfacevariable{bbl}{bbl}
\setinterfacevariable{before}{before}
+\setinterfacevariable{begin}{begin}
+\setinterfacevariable{bib}{bib}
\setinterfacevariable{big}{big}
\setinterfacevariable{bigbodyfont}{bigbodyfont}
\setinterfacevariable{bigpreference}{bigpreference}
@@ -108,6 +112,7 @@
\setinterfacevariable{chapter}{chapter}
\setinterfacevariable{character}{character}
\setinterfacevariable{characters}{characters}
+\setinterfacevariable{cite}{cite}
\setinterfacevariable{color}{color}
\setinterfacevariable{column}{column}
\setinterfacevariable{columns}{columns}
@@ -133,9 +138,11 @@
\setinterfacevariable{display}{display}
\setinterfacevariable{dot}{dot}
\setinterfacevariable{doublesided}{doublesided}
+\setinterfacevariable{down}{down}
\setinterfacevariable{each}{each}
\setinterfacevariable{edge}{edge}
\setinterfacevariable{empty}{empty}
+\setinterfacevariable{end}{end}
\setinterfacevariable{endnote}{endnote}
\setinterfacevariable{enumeration}{enumeration}
\setinterfacevariable{environment}{environment}
@@ -265,11 +272,15 @@
\setinterfacevariable{mathcases}{mathcases}
\setinterfacevariable{mathmatrix}{mathmatrix}
\setinterfacevariable{max}{max}
+\setinterfacevariable{maxdepth}{maxdepth}
+\setinterfacevariable{maxheight}{maxheight}
+\setinterfacevariable{maxwidth}{maxwidth}
\setinterfacevariable{may}{May}
\setinterfacevariable{mediaeval}{mediaeval}
\setinterfacevariable{medium}{medium}
\setinterfacevariable{middle}{middle}
\setinterfacevariable{min}{min}
+\setinterfacevariable{mindepth}{mindepth}
\setinterfacevariable{minheight}{minheight}
\setinterfacevariable{minwidth}{minwidth}
\setinterfacevariable{mirrored}{mirrored}
@@ -317,8 +328,12 @@
\setinterfacevariable{outer}{outer}
\setinterfacevariable{outeredge}{outeredge}
\setinterfacevariable{outermargin}{outermargin}
+\setinterfacevariable{overbar}{overbar}
+\setinterfacevariable{overbars}{overbars}
\setinterfacevariable{overlay}{overlay}
\setinterfacevariable{overprint}{overprint}
+\setinterfacevariable{overstrike}{overstrike}
+\setinterfacevariable{overstrikes}{overstrikes}
\setinterfacevariable{packed}{packed}
\setinterfacevariable{page}{page}
\setinterfacevariable{pagecomment}{pagecomment}
@@ -386,6 +401,7 @@
\setinterfacevariable{serried}{serried}
\setinterfacevariable{setups}{setups}
\setinterfacevariable{sheet}{sheet}
+\setinterfacevariable{short}{short}
\setinterfacevariable{singlesided}{singlesided}
\setinterfacevariable{slanted}{slanted}
\setinterfacevariable{slantedbold}{slantedbold}
@@ -410,12 +426,13 @@
\setinterfacevariable{spot}{spot}
\setinterfacevariable{standard}{standard}
\setinterfacevariable{start}{start}
+\setinterfacevariable{starter}{starter}
\setinterfacevariable{sticker}{sticker}
\setinterfacevariable{stop}{stop}
\setinterfacevariable{stopper}{stopper}
\setinterfacevariable{stretch}{stretch}
\setinterfacevariable{strict}{strict}
-\setinterfacevariable{strong}{sterk}
+\setinterfacevariable{strong}{strong}
\setinterfacevariable{strut}{strut}
\setinterfacevariable{sub}{sub}
\setinterfacevariable{subbackward}{subbackward}
@@ -471,10 +488,13 @@
\setinterfacevariable{type}{type}
\setinterfacevariable{typing}{typing}
\setinterfacevariable{unavailable}{unavailable}
+\setinterfacevariable{underbar}{underbar}
+\setinterfacevariable{underbars}{underbars}
\setinterfacevariable{unit}{unit}
\setinterfacevariable{units}{units}
\setinterfacevariable{unknown}{unknown}
\setinterfacevariable{unpacked}{unpacked}
+\setinterfacevariable{up}{up}
\setinterfacevariable{url}{url}
\setinterfacevariable{used}{used}
\setinterfacevariable{value}{value}
@@ -482,7 +502,7 @@
\setinterfacevariable{very}{very}
\setinterfacevariable{verystrict}{verystrict}
\setinterfacevariable{verytolerant}{verytolerant}
-\setinterfacevariable{weak}{zwak}
+\setinterfacevariable{weak}{weak}
\setinterfacevariable{wednesday}{wednesday}
\setinterfacevariable{week}{week}
\setinterfacevariable{weekday}{weekday}
@@ -502,12 +522,21 @@
\setinterfaceconstant{align}{align}
\setinterfaceconstant{aligncharacter}{aligncharacter}
\setinterfaceconstant{alignmentcharacter}{alignmentcharacter}
+\setinterfaceconstant{alignsymbol}{alignsymbol}
\setinterfaceconstant{aligntitle}{aligntitle}
\setinterfaceconstant{alternative}{alternative}
+\setinterfaceconstant{andtext}{andtext}
\setinterfaceconstant{apa}{apa}
\setinterfaceconstant{arrow}{arrow}
+\setinterfaceconstant{artauthor}{artauthor}
+\setinterfaceconstant{artauthoretaldisplay}{artauthoretaldisplay}
+\setinterfaceconstant{artauthoretallimit}{artauthoretallimit}
+\setinterfaceconstant{artauthoretaltext}{artauthoretaltext}
\setinterfaceconstant{at}{at}
\setinterfaceconstant{author}{author}
+\setinterfaceconstant{authoretaldisplay}{authoretaldisplay}
+\setinterfaceconstant{authoretallimit}{authoretallimit}
+\setinterfaceconstant{authoretaltext}{authoretaltext}
\setinterfaceconstant{auto}{auto}
\setinterfaceconstant{autofile}{autofile}
\setinterfaceconstant{autofocus}{autofocus}
@@ -576,6 +605,7 @@
\setinterfaceconstant{cutspace}{cutspace}
\setinterfaceconstant{dash}{dash}
\setinterfaceconstant{dat}{dat}
+\setinterfaceconstant{database}{database}
\setinterfaceconstant{date}{date}
\setinterfaceconstant{deepnumbercommand}{deepnumbercommand}
\setinterfaceconstant{deeptextcommand}{deeptextcommand}
@@ -594,12 +624,17 @@
\setinterfaceconstant{dy}{dy}
\setinterfaceconstant{edge}{edge}
\setinterfaceconstant{edgedistance}{edgedistance}
+\setinterfaceconstant{editor}{editor}
+\setinterfaceconstant{editoretaldisplay}{editoretaldisplay}
+\setinterfaceconstant{editoretallimit}{editoretallimit}
+\setinterfaceconstant{editoretaltext}{editoretaltext}
\setinterfaceconstant{empty}{empty}
\setinterfaceconstant{equalheight}{equalheight}
\setinterfaceconstant{equalwidth}{equalwidth}
\setinterfaceconstant{escape}{escape}
\setinterfaceconstant{evenmargin}{evenmargin}
\setinterfaceconstant{expansion}{expansion}
+\setinterfaceconstant{export}{export}
\setinterfaceconstant{extras}{extras}
\setinterfaceconstant{factor}{factor}
\setinterfaceconstant{fallback}{fallback}
@@ -610,6 +645,8 @@
\setinterfaceconstant{fieldoffset}{fieldoffset}
\setinterfaceconstant{file}{file}
\setinterfaceconstant{filtercommand}{filtercommand}
+\setinterfaceconstant{finalnamesep}{finalnamesep}
+\setinterfaceconstant{firstnamesep}{firstnamesep}
\setinterfaceconstant{focus}{focus}
\setinterfaceconstant{focusin}{focusin}
\setinterfaceconstant{focusout}{focusout}
@@ -631,6 +668,7 @@
\setinterfaceconstant{global}{global}
\setinterfaceconstant{grid}{grid}
\setinterfaceconstant{hang}{hang}
+\setinterfaceconstant{headalign}{headalign}
\setinterfaceconstant{headcolor}{headcolor}
\setinterfaceconstant{headcommand}{headcommand}
\setinterfaceconstant{headconversion}{headconversion}
@@ -658,14 +696,18 @@
\setinterfaceconstant{inner}{inner}
\setinterfaceconstant{innermargin}{innermargin}
\setinterfaceconstant{inputfile}{inputfile}
+\setinterfaceconstant{intent}{intent}
\setinterfaceconstant{interaction}{interaction}
\setinterfaceconstant{interlinespace}{interlinespace}
\setinterfaceconstant{itemalign}{itemalign}
\setinterfaceconstant{items}{items}
+\setinterfaceconstant{juniorsep}{juniorsep}
\setinterfaceconstant{ken}{ken}
\setinterfaceconstant{keyexpansion}{keyexpansion}
\setinterfaceconstant{keyword}{keyword}
\setinterfaceconstant{label}{label}
+\setinterfaceconstant{lastnamesep}{lastnamesep}
+\setinterfaceconstant{lastpubsep}{lastpubsep}
\setinterfaceconstant{left}{left}
\setinterfaceconstant{leftcolor}{leftcolor}
\setinterfaceconstant{leftcompoundhyphen}{leftcompoundhyphen}
@@ -705,8 +747,10 @@
\setinterfaceconstant{marking}{marking}
\setinterfaceconstant{marstyle}{marstyle}
\setinterfaceconstant{max}{max}
+\setinterfaceconstant{maxdepth}{maxdepth}
\setinterfaceconstant{maxheight}{maxheight}
\setinterfaceconstant{maxwidth}{maxwidth}
+\setinterfaceconstant{maybeyear}{maybeyear}
\setinterfaceconstant{menu}{menu}
\setinterfaceconstant{method}{method}
\setinterfaceconstant{middle}{middle}
@@ -717,8 +761,10 @@
\setinterfaceconstant{mindepth}{mindepth}
\setinterfaceconstant{minheight}{minheight}
\setinterfaceconstant{minwidth}{minwidth}
+\setinterfaceconstant{monthconversion}{monthconversion}
\setinterfaceconstant{n}{n}
\setinterfaceconstant{name}{name}
+\setinterfaceconstant{namesep}{namesep}
\setinterfaceconstant{nbottom}{nbottom}
\setinterfaceconstant{nc}{nc}
\setinterfaceconstant{next}{next}
@@ -742,6 +788,7 @@
\setinterfaceconstant{numberseparator}{numberseparator}
\setinterfaceconstant{numberseparatorset}{numberseparatorset}
\setinterfaceconstant{numberset}{numberset}
+\setinterfaceconstant{numberstarter}{numberstarter}
\setinterfaceconstant{numberstopper}{numberstopper}
\setinterfaceconstant{numberstyle}{numberstyle}
\setinterfaceconstant{numberwidth}{numberwidth}
@@ -754,7 +801,9 @@
\setinterfaceconstant{openaction}{openaction}
\setinterfaceconstant{openpageaction}{openpageaction}
\setinterfaceconstant{option}{option}
+\setinterfaceconstant{order}{order}
\setinterfaceconstant{orientation}{orientation}
+\setinterfaceconstant{otherstext}{otherstext}
\setinterfaceconstant{outermargin}{outermargin}
\setinterfaceconstant{overprint}{overprint}
\setinterfaceconstant{ownnumber}{ownnumber}
@@ -772,10 +821,12 @@
\setinterfaceconstant{pageprefixsegments}{pageprefixsegments}
\setinterfaceconstant{pageprefixseparatorset}{pageprefixseparatorset}
\setinterfaceconstant{pageprefixset}{pageprefixset}
+\setinterfaceconstant{pageprefixstarter}{pageprefixstarter}
\setinterfaceconstant{pageprefixstopper}{pageprefixstopper}
\setinterfaceconstant{pagesegments}{pagesegments}
\setinterfaceconstant{pageseparatorset}{pageseparatorset}
\setinterfaceconstant{pageset}{pageset}
+\setinterfaceconstant{pagestarter}{pagestarter}
\setinterfaceconstant{pagestate}{pagestate}
\setinterfaceconstant{pagestopper}{pagestopper}
\setinterfaceconstant{pagestyle}{pagestyle}
@@ -793,16 +844,20 @@
\setinterfaceconstant{prefixsegments}{prefixsegments}
\setinterfaceconstant{prefixseparatorset}{prefixseparatorset}
\setinterfaceconstant{prefixset}{prefixset}
+\setinterfaceconstant{prefixstarter}{prefixstarter}
\setinterfaceconstant{prefixstopper}{prefixstopper}
\setinterfaceconstant{preset}{preset}
\setinterfaceconstant{preview}{preview}
\setinterfaceconstant{previous}{previous}
\setinterfaceconstant{previousnumber}{previousnumber}
\setinterfaceconstant{process}{process}
+\setinterfaceconstant{pubsep}{pubsep}
\setinterfaceconstant{radius}{radius}
\setinterfaceconstant{random}{random}
+\setinterfaceconstant{range}{range}
\setinterfaceconstant{reduction}{reduction}
\setinterfaceconstant{ref}{ref}
+\setinterfaceconstant{refcommand}{refcommand}
\setinterfaceconstant{reference}{reference}
\setinterfaceconstant{referenceprefix}{referenceprefix}
\setinterfaceconstant{referencing}{referencing}
@@ -836,6 +891,7 @@
\setinterfaceconstant{rulethickness}{rulethickness}
\setinterfaceconstant{samepage}{samepage}
\setinterfaceconstant{sample}{sample}
+\setinterfaceconstant{samplesize}{samplesize}
\setinterfaceconstant{saveinlist}{saveinlist}
\setinterfaceconstant{scale}{scale}
\setinterfaceconstant{scope}{scope}
@@ -848,6 +904,7 @@
\setinterfaceconstant{sectionsegments}{sectionsegments}
\setinterfaceconstant{sectionseparatorset}{sectionseparatorset}
\setinterfaceconstant{sectionset}{sectionset}
+\setinterfaceconstant{sectionstarter}{sectionstarter}
\setinterfaceconstant{sectionstopper}{sectionstopper}
\setinterfaceconstant{separator}{separator}
\setinterfaceconstant{set}{set}
@@ -860,6 +917,7 @@
\setinterfaceconstant{sign}{sign}
\setinterfaceconstant{size}{size}
\setinterfaceconstant{small}{small}
+\setinterfaceconstant{sort}{sort}
\setinterfaceconstant{sorttype}{sorttype}
\setinterfaceconstant{source}{source}
\setinterfaceconstant{space}{space}
@@ -874,16 +932,19 @@
\setinterfaceconstant{spot}{spot}
\setinterfaceconstant{stack}{stack}
\setinterfaceconstant{start}{start}
+\setinterfaceconstant{starter}{starter}
\setinterfaceconstant{state}{state}
\setinterfaceconstant{step}{step}
\setinterfaceconstant{stop}{stop}
\setinterfaceconstant{stopper}{stopper}
\setinterfaceconstant{stretch}{stretch}
+\setinterfaceconstant{strip}{strip}
\setinterfaceconstant{strut}{strut}
\setinterfaceconstant{style}{style}
\setinterfaceconstant{sub}{sub}
\setinterfaceconstant{subtitle}{subtitle}
\setinterfaceconstant{suffix}{suffix}
+\setinterfaceconstant{surnamesep}{surnamesep}
\setinterfaceconstant{sx}{sx}
\setinterfaceconstant{sy}{sy}
\setinterfaceconstant{symalign}{symalign}
@@ -923,6 +984,7 @@
\setinterfaceconstant{topoffset}{topoffset}
\setinterfaceconstant{topspace}{topspace}
\setinterfaceconstant{topstate}{topstate}
+\setinterfaceconstant{totalnumber}{totalnumber}
\setinterfaceconstant{type}{type}
\setinterfaceconstant{unit}{unit}
\setinterfaceconstant{unknownreference}{unknownreference}
@@ -933,6 +995,7 @@
\setinterfaceconstant{veroffset}{veroffset}
\setinterfaceconstant{vfil}{vfil}
\setinterfaceconstant{voffset}{voffset}
+\setinterfaceconstant{vonsep}{vonsep}
\setinterfaceconstant{way}{way}
\setinterfaceconstant{wfactor}{wfactor}
\setinterfaceconstant{white}{white}
@@ -1261,10 +1324,6 @@
\setinterfacecommand{outeredgewidth}{outeredgewidth}
\setinterfacecommand{outermargindistance}{outermargindistance}
\setinterfacecommand{outermarginwidth}{outermarginwidth}
-\setinterfacecommand{overbar}{overbar}
-\setinterfacecommand{overbars}{overbars}
-\setinterfacecommand{overstrike}{overstrike}
-\setinterfacecommand{overstrikes}{overstrikes}
\setinterfacecommand{packed}{packed}
\setinterfacecommand{page}{page}
\setinterfacecommand{pagedepth}{pagedepth}
@@ -1599,8 +1658,6 @@
\setinterfacecommand{type}{type}
\setinterfacecommand{typebuffer}{typebuffer}
\setinterfacecommand{typefile}{typefile}
-\setinterfacecommand{underbar}{underbar}
-\setinterfacecommand{underbars}{underbars}
\setinterfacecommand{unitmeaning}{unitmeaning}
\setinterfacecommand{unknown}{unknown}
\setinterfacecommand{useJSscripts}{useJSscripts}
diff --git a/Master/texmf-dist/tex/context/base/mult-fr.tex b/Master/texmf-dist/tex/context/base/mult-fr.tex
index 16f22ec7f62..5244565e983 100644
--- a/Master/texmf-dist/tex/context/base/mult-fr.tex
+++ b/Master/texmf-dist/tex/context/base/mult-fr.tex
@@ -75,6 +75,7 @@
\setinterfacevariable{atmargin}{alamarge}
\setinterfacevariable{atpage}{alapage}
\setinterfacevariable{august}{aout}
+\setinterfacevariable{author}{auteur}
\setinterfacevariable{auto}{auto}
\setinterfacevariable{autointro}{autointro}
\setinterfacevariable{back}{retour}
@@ -83,7 +84,10 @@
\setinterfacevariable{backpart}{postface}
\setinterfacevariable{backspace}{retourarriere}
\setinterfacevariable{backward}{retourarriere}
+\setinterfacevariable{bbl}{bbl}
\setinterfacevariable{before}{avant}
+\setinterfacevariable{begin}{begin}
+\setinterfacevariable{bib}{bib}
\setinterfacevariable{big}{grand}
\setinterfacevariable{bigbodyfont}{grandepolicecorp}
\setinterfacevariable{bigpreference}{grandepreference}
@@ -108,6 +112,7 @@
\setinterfacevariable{chapter}{chapitre}
\setinterfacevariable{character}{caractere}
\setinterfacevariable{characters}{caracteres}
+\setinterfacevariable{cite}{cite}
\setinterfacevariable{color}{couleur}
\setinterfacevariable{column}{colonne}
\setinterfacevariable{columns}{colonnes}
@@ -133,9 +138,11 @@
\setinterfacevariable{display}{affichage}
\setinterfacevariable{dot}{point}
\setinterfacevariable{doublesided}{rectoverso}
+\setinterfacevariable{down}{down}
\setinterfacevariable{each}{chaque}
\setinterfacevariable{edge}{bord}
\setinterfacevariable{empty}{vide}
+\setinterfacevariable{end}{end}
\setinterfacevariable{endnote}{notefin}
\setinterfacevariable{enumeration}{enumeration}
\setinterfacevariable{environment}{environement}
@@ -265,11 +272,15 @@
\setinterfacevariable{mathcases}{mathcases}
\setinterfacevariable{mathmatrix}{mathmatrix}
\setinterfacevariable{max}{max}
+\setinterfacevariable{maxdepth}{maxdepth}
+\setinterfacevariable{maxheight}{maxheight}
+\setinterfacevariable{maxwidth}{maxwidth}
\setinterfacevariable{may}{mai}
\setinterfacevariable{mediaeval}{medieval}
\setinterfacevariable{medium}{moyen}
\setinterfacevariable{middle}{milieu}
\setinterfacevariable{min}{min}
+\setinterfacevariable{mindepth}{mindepth}
\setinterfacevariable{minheight}{hauteurmin}
\setinterfacevariable{minwidth}{largeurmin}
\setinterfacevariable{mirrored}{reflete}
@@ -317,8 +328,12 @@
\setinterfacevariable{outer}{exterieur}
\setinterfacevariable{outeredge}{bordexterieur}
\setinterfacevariable{outermargin}{margeexterieure}
+\setinterfacevariable{overbar}{overbar}
+\setinterfacevariable{overbars}{overbars}
\setinterfacevariable{overlay}{revetement}
\setinterfacevariable{overprint}{overprint}
+\setinterfacevariable{overstrike}{surlignetout}
+\setinterfacevariable{overstrikes}{surligne}
\setinterfacevariable{packed}{groupe}
\setinterfacevariable{page}{page}
\setinterfacevariable{pagecomment}{commentairepage}
@@ -386,6 +401,7 @@
\setinterfacevariable{serried}{serried}
\setinterfacevariable{setups}{reglages}
\setinterfacevariable{sheet}{sheet}
+\setinterfacevariable{short}{short}
\setinterfacevariable{singlesided}{recto}
\setinterfacevariable{slanted}{incline}
\setinterfacevariable{slantedbold}{grasincline}
@@ -410,6 +426,7 @@
\setinterfacevariable{spot}{spot}
\setinterfacevariable{standard}{standard}
\setinterfacevariable{start}{demarre}
+\setinterfacevariable{starter}{starter}
\setinterfacevariable{sticker}{sticker}
\setinterfacevariable{stop}{stoppe}
\setinterfacevariable{stopper}{stopper}
@@ -471,10 +488,13 @@
\setinterfacevariable{type}{type}
\setinterfacevariable{typing}{typing}
\setinterfacevariable{unavailable}{indisponible}
+\setinterfacevariable{underbar}{souslignetout}
+\setinterfacevariable{underbars}{sousligne}
\setinterfacevariable{unit}{unite}
\setinterfacevariable{units}{unites}
\setinterfacevariable{unknown}{inconnu}
\setinterfacevariable{unpacked}{degroupe}
+\setinterfacevariable{up}{up}
\setinterfacevariable{url}{url}
\setinterfacevariable{used}{used}
\setinterfacevariable{value}{valeur}
@@ -502,12 +522,21 @@
\setinterfaceconstant{align}{alignement}
\setinterfaceconstant{aligncharacter}{caracterealigne}
\setinterfaceconstant{alignmentcharacter}{alignementcaractere}
+\setinterfaceconstant{alignsymbol}{alignsymbol}
\setinterfaceconstant{aligntitle}{alignementtitre}
\setinterfaceconstant{alternative}{alternative}
+\setinterfaceconstant{andtext}{andtext}
\setinterfaceconstant{apa}{apa}
\setinterfaceconstant{arrow}{fleche}
+\setinterfaceconstant{artauthor}{artauthor}
+\setinterfaceconstant{artauthoretaldisplay}{artauthoretaldisplay}
+\setinterfaceconstant{artauthoretallimit}{artauthoretallimit}
+\setinterfaceconstant{artauthoretaltext}{artauthoretaltext}
\setinterfaceconstant{at}{a}
\setinterfaceconstant{author}{auteur}
+\setinterfaceconstant{authoretaldisplay}{authoretaldisplay}
+\setinterfaceconstant{authoretallimit}{authoretallimit}
+\setinterfaceconstant{authoretaltext}{authoretaltext}
\setinterfaceconstant{auto}{auto}
\setinterfaceconstant{autofile}{autofile}
\setinterfaceconstant{autofocus}{autofocus}
@@ -576,6 +605,7 @@
\setinterfaceconstant{cutspace}{cutspace}
\setinterfaceconstant{dash}{pointille}
\setinterfaceconstant{dat}{dat}
+\setinterfaceconstant{database}{database}
\setinterfaceconstant{date}{date}
\setinterfaceconstant{deepnumbercommand}{deepnumbercommand}
\setinterfaceconstant{deeptextcommand}{deeptextcommand}
@@ -594,12 +624,17 @@
\setinterfaceconstant{dy}{dy}
\setinterfaceconstant{edge}{bord}
\setinterfaceconstant{edgedistance}{distancebord}
+\setinterfaceconstant{editor}{editor}
+\setinterfaceconstant{editoretaldisplay}{editoretaldisplay}
+\setinterfaceconstant{editoretallimit}{editoretallimit}
+\setinterfaceconstant{editoretaltext}{editoretaltext}
\setinterfaceconstant{empty}{vide}
\setinterfaceconstant{equalheight}{equalheight}
\setinterfaceconstant{equalwidth}{equalwidth}
\setinterfaceconstant{escape}{escape}
\setinterfaceconstant{evenmargin}{margepaire}
\setinterfaceconstant{expansion}{expansion}
+\setinterfaceconstant{export}{export}
\setinterfaceconstant{extras}{extras}
\setinterfaceconstant{factor}{facteur}
\setinterfaceconstant{fallback}{fallback}
@@ -610,6 +645,8 @@
\setinterfaceconstant{fieldoffset}{offsetchamp}
\setinterfaceconstant{file}{fichier}
\setinterfaceconstant{filtercommand}{filtercommand}
+\setinterfaceconstant{finalnamesep}{finalnamesep}
+\setinterfaceconstant{firstnamesep}{firstnamesep}
\setinterfaceconstant{focus}{focus}
\setinterfaceconstant{focusin}{focusin}
\setinterfaceconstant{focusout}{focusout}
@@ -631,6 +668,7 @@
\setinterfaceconstant{global}{global}
\setinterfaceconstant{grid}{grille}
\setinterfaceconstant{hang}{suspend}
+\setinterfaceconstant{headalign}{headalign}
\setinterfaceconstant{headcolor}{couleurtete}
\setinterfaceconstant{headcommand}{commandetete}
\setinterfaceconstant{headconversion}{conversiontete}
@@ -658,14 +696,18 @@
\setinterfaceconstant{inner}{interieur}
\setinterfaceconstant{innermargin}{margeinterieure}
\setinterfaceconstant{inputfile}{fichierentree}
+\setinterfaceconstant{intent}{intent}
\setinterfaceconstant{interaction}{interaction}
\setinterfaceconstant{interlinespace}{espaceinterligne}
\setinterfaceconstant{itemalign}{itemalign}
\setinterfaceconstant{items}{elements}
+\setinterfaceconstant{juniorsep}{juniorsep}
\setinterfaceconstant{ken}{ken}
\setinterfaceconstant{keyexpansion}{keyexpansion}
\setinterfaceconstant{keyword}{motcle}
\setinterfaceconstant{label}{etiquette}
+\setinterfaceconstant{lastnamesep}{lastnamesep}
+\setinterfaceconstant{lastpubsep}{lastpubsep}
\setinterfaceconstant{left}{gauche}
\setinterfaceconstant{leftcolor}{couleurgauche}
\setinterfaceconstant{leftcompoundhyphen}{leftcompoundhyphen}
@@ -705,8 +747,10 @@
\setinterfaceconstant{marking}{marquage}
\setinterfaceconstant{marstyle}{stylemarquage}
\setinterfaceconstant{max}{max}
+\setinterfaceconstant{maxdepth}{maxdepth}
\setinterfaceconstant{maxheight}{hauteurmax}
\setinterfaceconstant{maxwidth}{largeurmax}
+\setinterfaceconstant{maybeyear}{maybeyear}
\setinterfaceconstant{menu}{menu}
\setinterfaceconstant{method}{methode}
\setinterfaceconstant{middle}{milieu}
@@ -717,8 +761,10 @@
\setinterfaceconstant{mindepth}{profondeurmin}
\setinterfaceconstant{minheight}{hauteurmin}
\setinterfaceconstant{minwidth}{largeurmin}
+\setinterfaceconstant{monthconversion}{monthconversion}
\setinterfaceconstant{n}{n}
\setinterfaceconstant{name}{nom}
+\setinterfaceconstant{namesep}{namesep}
\setinterfaceconstant{nbottom}{ninf}
\setinterfaceconstant{nc}{nc}
\setinterfaceconstant{next}{suivant}
@@ -742,6 +788,7 @@
\setinterfaceconstant{numberseparator}{separateurnumbero}
\setinterfaceconstant{numberseparatorset}{numberseparatorset}
\setinterfaceconstant{numberset}{numberset}
+\setinterfaceconstant{numberstarter}{numberstarter}
\setinterfaceconstant{numberstopper}{numberstopper}
\setinterfaceconstant{numberstyle}{stylenumero}
\setinterfaceconstant{numberwidth}{numberwidth}
@@ -754,7 +801,9 @@
\setinterfaceconstant{openaction}{actionouverture}
\setinterfaceconstant{openpageaction}{actionouverturepage}
\setinterfaceconstant{option}{option}
+\setinterfaceconstant{order}{order}
\setinterfaceconstant{orientation}{orientation}
+\setinterfaceconstant{otherstext}{otherstext}
\setinterfaceconstant{outermargin}{margeexterieure}
\setinterfaceconstant{overprint}{overprint}
\setinterfaceconstant{ownnumber}{numeroproprio}
@@ -772,10 +821,12 @@
\setinterfaceconstant{pageprefixsegments}{pageprefixsegments}
\setinterfaceconstant{pageprefixseparatorset}{pageprefixseparatorset}
\setinterfaceconstant{pageprefixset}{pageprefixset}
+\setinterfaceconstant{pageprefixstarter}{pageprefixstarter}
\setinterfaceconstant{pageprefixstopper}{pageprefixstopper}
\setinterfaceconstant{pagesegments}{pagesegments}
\setinterfaceconstant{pageseparatorset}{pageseparatorset}
\setinterfaceconstant{pageset}{pageset}
+\setinterfaceconstant{pagestarter}{pagestarter}
\setinterfaceconstant{pagestate}{etatpage}
\setinterfaceconstant{pagestopper}{pagestopper}
\setinterfaceconstant{pagestyle}{stylepage}
@@ -793,16 +844,20 @@
\setinterfaceconstant{prefixsegments}{prefixsegments}
\setinterfaceconstant{prefixseparatorset}{prefixseparatorset}
\setinterfaceconstant{prefixset}{prefixset}
+\setinterfaceconstant{prefixstarter}{prefixstarter}
\setinterfaceconstant{prefixstopper}{prefixstopper}
\setinterfaceconstant{preset}{prereglage}
\setinterfaceconstant{preview}{previsualisation}
\setinterfaceconstant{previous}{precedent}
\setinterfaceconstant{previousnumber}{numeroprecedent}
\setinterfaceconstant{process}{process}
+\setinterfaceconstant{pubsep}{pubsep}
\setinterfaceconstant{radius}{rayon}
\setinterfaceconstant{random}{aleatoire}
+\setinterfaceconstant{range}{range}
\setinterfaceconstant{reduction}{reduction}
\setinterfaceconstant{ref}{ref}
+\setinterfaceconstant{refcommand}{refcommand}
\setinterfaceconstant{reference}{reference}
\setinterfaceconstant{referenceprefix}{referenceprefix}
\setinterfaceconstant{referencing}{referencing}
@@ -836,6 +891,7 @@
\setinterfaceconstant{rulethickness}{epaisseurligne}
\setinterfaceconstant{samepage}{memepage}
\setinterfaceconstant{sample}{echantillon}
+\setinterfaceconstant{samplesize}{samplesize}
\setinterfaceconstant{saveinlist}{saveinlist}
\setinterfaceconstant{scale}{echelle}
\setinterfaceconstant{scope}{scope}
@@ -848,6 +904,7 @@
\setinterfaceconstant{sectionsegments}{sectionsegments}
\setinterfaceconstant{sectionseparatorset}{sectionseparatorset}
\setinterfaceconstant{sectionset}{sectionset}
+\setinterfaceconstant{sectionstarter}{sectionstarter}
\setinterfaceconstant{sectionstopper}{sectionstopper}
\setinterfaceconstant{separator}{separateur}
\setinterfaceconstant{set}{set}
@@ -860,6 +917,7 @@
\setinterfaceconstant{sign}{signe}
\setinterfaceconstant{size}{dimension}
\setinterfaceconstant{small}{petit}
+\setinterfaceconstant{sort}{sort}
\setinterfaceconstant{sorttype}{sorttype}
\setinterfaceconstant{source}{origine}
\setinterfaceconstant{space}{espace}
@@ -874,16 +932,19 @@
\setinterfaceconstant{spot}{spot}
\setinterfaceconstant{stack}{stack}
\setinterfaceconstant{start}{demarre}
+\setinterfaceconstant{starter}{starter}
\setinterfaceconstant{state}{etat}
\setinterfaceconstant{step}{pas}
\setinterfaceconstant{stop}{stoppe}
\setinterfaceconstant{stopper}{taquet}
\setinterfaceconstant{stretch}{etire}
+\setinterfaceconstant{strip}{strip}
\setinterfaceconstant{strut}{strut}
\setinterfaceconstant{style}{style}
\setinterfaceconstant{sub}{sous}
\setinterfaceconstant{subtitle}{soustitre}
\setinterfaceconstant{suffix}{suffix}
+\setinterfaceconstant{surnamesep}{surnamesep}
\setinterfaceconstant{sx}{sx}
\setinterfaceconstant{sy}{sy}
\setinterfaceconstant{symalign}{symalignement}
@@ -923,6 +984,7 @@
\setinterfaceconstant{topoffset}{decalagesup}
\setinterfaceconstant{topspace}{espacesup}
\setinterfaceconstant{topstate}{etatsup}
+\setinterfaceconstant{totalnumber}{totalnumber}
\setinterfaceconstant{type}{type}
\setinterfaceconstant{unit}{unite}
\setinterfaceconstant{unknownreference}{referenceinconnue}
@@ -933,6 +995,7 @@
\setinterfaceconstant{veroffset}{veroffset}
\setinterfaceconstant{vfil}{vfil}
\setinterfaceconstant{voffset}{voffset}
+\setinterfaceconstant{vonsep}{vonsep}
\setinterfaceconstant{way}{mode}
\setinterfaceconstant{wfactor}{facteurlargeur}
\setinterfaceconstant{white}{blanc}
@@ -1261,10 +1324,6 @@
\setinterfacecommand{outeredgewidth}{outeredgewidth}
\setinterfacecommand{outermargindistance}{outermargindistance}
\setinterfacecommand{outermarginwidth}{outermarginwidth}
-\setinterfacecommand{overbar}{overbar}
-\setinterfacecommand{overbars}{overbars}
-\setinterfacecommand{overstrike}{surlignetout}
-\setinterfacecommand{overstrikes}{surligne}
\setinterfacecommand{packed}{groupe}
\setinterfacecommand{page}{page}
\setinterfacecommand{pagedepth}{pagedepth}
@@ -1599,8 +1658,6 @@
\setinterfacecommand{type}{dactylographier}
\setinterfacecommand{typebuffer}{tapebuffer}
\setinterfacecommand{typefile}{fichierdactylo}
-\setinterfacecommand{underbar}{souslignetout}
-\setinterfacecommand{underbars}{sousligne}
\setinterfacecommand{unitmeaning}{sensunite}
\setinterfacecommand{unknown}{inconnu}
\setinterfacecommand{useJSscripts}{utiliseJSscripts}
diff --git a/Master/texmf-dist/tex/context/base/mult-ini.lua b/Master/texmf-dist/tex/context/base/mult-ini.lua
index 06707adf87a..92a7bc62965 100644
--- a/Master/texmf-dist/tex/context/base/mult-ini.lua
+++ b/Master/texmf-dist/tex/context/base/mult-ini.lua
@@ -1,12 +1,14 @@
if not modules then modules = { } end modules ['mult-ini'] = {
version = 1.001,
- comment = "companion to mult-ini.tex",
+ comment = "companion to mult-ini.mkiv",
author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
copyright = "PRAGMA ADE / ConTeXt Development Team",
license = "see context related readme files"
}
local format, gmatch, gsub = string.format, string.gmatch, string.gsub
+local lpegmatch = lpeg.match
+local serialize = table.serialize
interfaces = interfaces or { }
interfaces.messages = interfaces.messages or { }
@@ -33,25 +35,30 @@ function interfaces.setmessage(category,tag,message)
m = { }
messages[category] = m
end
- m[tag] = message:gsub("%-%-","%%s")
+ m[tag] = gsub(message,"%-%-","%%s")
end
-function interfaces.getmessage(category,tag)
+function interfaces.getmessage(category,tag,default)
local m = messages[category]
- return (m and m[tag]) or "unknown message"
+ return (m and m[tag]) or default or "unknown message"
+end
+
+function interfaces.doifelsemessage(category,tag)
+ local m = messages[category]
+ return commands.testcase(m and m[tag])
end
local messagesplitter = lpeg.splitat(",")
function interfaces.makemessage(category,tag,arguments)
local m = messages[category]
- m = (m and m[tag] ) or format("unknown message, category '%s', tag '%s'",category,tag)
+ m = (m and (m[tag] or m[tostring(tag)])) or format("unknown message, category '%s', tag '%s'",category,tag)
if not m then
return m .. " " .. tag
elseif not arguments then
return m
else
- return format(m,messagesplitter:match(arguments))
+ return format(m,lpegmatch(messagesplitter,arguments))
end
end
@@ -68,3 +75,31 @@ end
function interfaces.setconstant(constant,given)
constants[given] = constant
end
+
+-- it's nicer to have numbers as reference than a hash
+
+interfaces.cachedsetups = interfaces.cachedsetups or { }
+interfaces.hashedsetups = interfaces.hashedsetups or { }
+
+storage.register("interfaces.cachedsetups", interfaces.cachedsetups, "interfaces.cachedsetups")
+storage.register("interfaces.hashedsetups", interfaces.hashedsetups, "interfaces.hashedsetups")
+
+local cachedsetups = interfaces.cachedsetups
+local hashedsetups = interfaces.hashedsetups
+
+function interfaces.cachesetup(t)
+ local hash = serialize(t)
+ local done = hashedsetups[hash]
+ if done then
+ return cachedsetups[done]
+ else
+ done = #cachedsetups + 1
+ cachedsetups[done] = t
+ hashedsetups[hash] = done
+ return t
+ end
+end
+
+function interfaces.is_command(str)
+ return (str and str ~= "" and token.csname_name(token.create(str)) ~= "") or false
+end
diff --git a/Master/texmf-dist/tex/context/base/mult-ini.mkiv b/Master/texmf-dist/tex/context/base/mult-ini.mkiv
index 5033a523336..e20548f9b5f 100644
--- a/Master/texmf-dist/tex/context/base/mult-ini.mkiv
+++ b/Master/texmf-dist/tex/context/base/mult-ini.mkiv
@@ -118,6 +118,11 @@
\def\!!fill {fill}
\def\!!to {to}
\def\!!spread{spread}
+
+%D Kind of special:
+
+\edef\!!TLT{\detokenize{TLT}}
+\edef\!!TRT{\detokenize{TRT}}
%D \macros
%D {defineinterfaceconstant,
@@ -157,9 +162,9 @@
%D \def\e!name{meaning}
%D \stoptyping
-\def\defineinterfaceconstant #1#2{\setvalue{\c!prefix!#1}{#2}}
-\def\defineinterfacevariable #1#2{\setvalue{\v!prefix!#1}{#2}}
-\def\defineinterfaceelement #1#2{\setvalue{\e!prefix!#1}{#2}}
+\unexpanded\def\defineinterfaceconstant #1#2{\setvalue{\c!prefix!#1}{#2}}
+\unexpanded\def\defineinterfacevariable #1#2{\setvalue{\v!prefix!#1}{#2}}
+\unexpanded\def\defineinterfaceelement #1#2{\setvalue{\e!prefix!#1}{#2}}
%D Next come some interface independant constants:
%D
@@ -168,12 +173,12 @@
%D \definefileconstant {name} {meaning}
%D \stoptyping
-\def\definereferenceconstant #1#2{\setvalue{\r!prefix!#1}{#2}}
-\def\definefileconstant #1#2{\setvalue{\f!prefix!#1}{#2}}
+\unexpanded\def\definereferenceconstant #1#2{\setvalue{\r!prefix!#1}{#2}}
+\unexpanded\def\definefileconstant #1#2{\setvalue{\f!prefix!#1}{#2}}
%D A new one:
-\def\definetypescriptconstant#1#2{\setvalue{\t!prefix!#1}{#2}}
+\unexpanded\def\definetypescriptconstant#1#2{\setvalue{\t!prefix!#1}{#2}}
%D And finaly we have the one argument, space saving constants
%D
@@ -182,8 +187,8 @@
%D \definemessageconstant {name}
%D \stoptyping
-\def\definesystemconstant #1{\setvalue{\s!prefix!#1}{#1}}
-\def\definemessageconstant #1{\setvalue{\m!prefix!#1}{#1}}
+\unexpanded\def\definesystemconstant #1{\setvalue{\s!prefix!#1}{#1}}
+\unexpanded\def\definemessageconstant #1{\setvalue{\m!prefix!#1}{#1}}
%D In a parameter driven system, some parameters are shared
%D by more system components. In \CONTEXT\ we can distinguish
@@ -194,7 +199,7 @@
%D \definesystemvariable {name}
%D \stoptyping
-\def\definesystemvariable#1{\setevalue{\??prefix#1}{\@@prefix#1}}
+\unexpanded\def\definesystemvariable#1{\setevalue{\??prefix#1}{\@@prefix#1}}
\definesystemvariable{ms}
@@ -262,7 +267,7 @@
%D \stopinterface
%D \stoptyping
-\def\startinterface #1
+\unexpanded\def\startinterface #1
{\doifnot{#1}{all}{\doifnotinset\currentinterface{#1}{\gobbleuntil\stopinterface}}}
\let\stopinterface\relax
@@ -353,7 +358,7 @@
%D which puts the message text asked for in \type
%D {\currentmessagetext}.
-\def\startmessages #1 library: #2 %
+\unexpanded\def\startmessages #1 library: #2 %
{\bgroup
\ifcsname\m!prefix!#2\endcsname\else\setgvalue{\m!prefix!#2}{#2}\fi
\catcode13=\active
@@ -370,10 +375,12 @@
{\ifcsname\m!prefix!#1\endcsname\else\setgvalue{\m!prefix!#1}{#1}\fi
\ctxlua{interfaces.setmessage("#1","#2",\!!bs#3\!!es)}}
-\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")}}
+\unexpanded\def\setmessagetext #1#2{\edef\currentmessagetext{\ctxlua{tex.sprint(tex.ctxcatcodes,interfaces.getmessage("#1","#2"))}}}
+\unexpanded\def\doifelsemessage #1#2{\ctxlua{interfaces.doifelsemessage("#1","#2")}}
+\unexpanded\def\getmessage #1#2{\ctxlua{tex.sprint(tex.ctxcatcodes,interfaces.getmessage("#1","#2"))}}
+\unexpanded\def\getmessagedefault#1#2#3{\ctxlua{tex.sprint(tex.ctxcatcodes,interfaces.getmessage("#1","#2","#3"))}}
+\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 \macros
%D {ifshowwarnings, ifshowmessages}
@@ -417,6 +424,12 @@
%D We already defined these auxiliary macros in the system
%D modules. Starting with this module however, we have to take
%D multi||linguality a bit more serious.
+%D
+%D The additional \type {\c!internal!n} prefixing is no longer
+%D needed as we now have separate interface files when dealing
+%D with setups (quick ref docs) and no longer reload the whole
+%D interface. (We no longer need the link back to the main
+%D internal interface.)
\def\doresetvalue#1#2%
{\dosetvalue{#1}{#2}{}}
@@ -664,7 +677,7 @@
%D system module. Let us define some simple setup command:
%D
%D \starttyping
-%D \def\setupbox[#1]%
+%D \unexpanded\def\setupbox[#1]%
%D {\getparameters[\??bx][#1]}
%D \stoptyping
%D
@@ -683,7 +696,7 @@
%D depending on the actual language. In dutch we just say:
%D
%D \starttyping
-%D \setupblock [width=3cm, height=1cm]
+%D \stelblokin [breedte=3cm,hoogte=1cm]
%D \stoptyping
%D
%D and get ourselves \type{\@@bxwidth} and \type{\@@bxheight}
@@ -732,7 +745,10 @@
%D \stopnarrower
%D Anno 2003 I've forgotten why the \type {\c!internal} is
-%D still in there; it's probably a left over from an experiment.
+%D still in there; it's probably a left over from the time that
+%D the user interface documents were not using a specification
+%D alongside a keyword specification but used a shared file in
+%D which case we need to go in both directions.
\let\c!internal!y \string
\def\c!internal!n {-}
@@ -757,7 +773,7 @@
%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%
+\unexpanded\def\defineinterfaceconstant#1#2%
{\setvalue{\c!prefix!#1}{#2}}
%D \macros
@@ -786,10 +802,10 @@
%D We just ignore these:
-\def\startvariables{\gobbleuntil\stopvariables}
-\def\startconstants{\gobbleuntil\stopconstants}
-\def\startelements {\gobbleuntil\stopelements}
-\def\startcommands {\gobbleuntil\stopcommands}
+\unexpanded\def\startvariables{\gobbleuntil\stopvariables}
+\unexpanded\def\startconstants{\gobbleuntil\stopconstants}
+\unexpanded\def\startelements {\gobbleuntil\stopelements}
+\unexpanded\def\startcommands {\gobbleuntil\stopcommands}
%D \macros
%D {interfaced}
diff --git a/Master/texmf-dist/tex/context/base/mult-it.tex b/Master/texmf-dist/tex/context/base/mult-it.tex
index 530a491527b..ce14800de04 100644
--- a/Master/texmf-dist/tex/context/base/mult-it.tex
+++ b/Master/texmf-dist/tex/context/base/mult-it.tex
@@ -75,6 +75,7 @@
\setinterfacevariable{atmargin}{almargine}
\setinterfacevariable{atpage}{apagina}
\setinterfacevariable{august}{agosto}
+\setinterfacevariable{author}{autore}
\setinterfacevariable{auto}{auto}
\setinterfacevariable{autointro}{autointro}
\setinterfacevariable{back}{dietro}
@@ -83,7 +84,10 @@
\setinterfacevariable{backpart}{postfazione}
\setinterfacevariable{backspace}{backspace}
\setinterfacevariable{backward}{indietro}
+\setinterfacevariable{bbl}{bbl}
\setinterfacevariable{before}{prima}
+\setinterfacevariable{begin}{begin}
+\setinterfacevariable{bib}{bib}
\setinterfacevariable{big}{grande}
\setinterfacevariable{bigbodyfont}{grossofontdeltesto}
\setinterfacevariable{bigpreference}{grandepreferenza}
@@ -108,6 +112,7 @@
\setinterfacevariable{chapter}{capitolo}
\setinterfacevariable{character}{lettera}
\setinterfacevariable{characters}{lettere}
+\setinterfacevariable{cite}{cite}
\setinterfacevariable{color}{colore}
\setinterfacevariable{column}{colonna}
\setinterfacevariable{columns}{colonne}
@@ -133,9 +138,11 @@
\setinterfacevariable{display}{schermo}
\setinterfacevariable{dot}{punto}
\setinterfacevariable{doublesided}{doppiafaccia}
+\setinterfacevariable{down}{down}
\setinterfacevariable{each}{ogni}
\setinterfacevariable{edge}{bordo}
\setinterfacevariable{empty}{vuoto}
+\setinterfacevariable{end}{end}
\setinterfacevariable{endnote}{endnote}
\setinterfacevariable{enumeration}{enumerazione}
\setinterfacevariable{environment}{ambiente}
@@ -265,11 +272,15 @@
\setinterfacevariable{mathcases}{mathcases}
\setinterfacevariable{mathmatrix}{mathmatrix}
\setinterfacevariable{max}{max}
+\setinterfacevariable{maxdepth}{maxdepth}
+\setinterfacevariable{maxheight}{maxheight}
+\setinterfacevariable{maxwidth}{maxwidth}
\setinterfacevariable{may}{maggio}
\setinterfacevariable{mediaeval}{medievale}
\setinterfacevariable{medium}{medio}
\setinterfacevariable{middle}{centro}
\setinterfacevariable{min}{min}
+\setinterfacevariable{mindepth}{mindepth}
\setinterfacevariable{minheight}{altezzamin}
\setinterfacevariable{minwidth}{ampiezzamin}
\setinterfacevariable{mirrored}{riflesso}
@@ -317,8 +328,12 @@
\setinterfacevariable{outer}{esterno}
\setinterfacevariable{outeredge}{bordoesterno}
\setinterfacevariable{outermargin}{margineesterno}
+\setinterfacevariable{overbar}{sopralinea}
+\setinterfacevariable{overbars}{sopralinee}
\setinterfacevariable{overlay}{sovrapponi}
\setinterfacevariable{overprint}{overprint}
+\setinterfacevariable{overstrike}{sbarrato}
+\setinterfacevariable{overstrikes}{sbarrati}
\setinterfacevariable{packed}{impaccato}
\setinterfacevariable{page}{pagina}
\setinterfacevariable{pagecomment}{commentopagina}
@@ -386,6 +401,7 @@
\setinterfacevariable{serried}{vicino}
\setinterfacevariable{setups}{nastaveni}
\setinterfacevariable{sheet}{sheet}
+\setinterfacevariable{short}{short}
\setinterfacevariable{singlesided}{facciasingola}
\setinterfacevariable{slanted}{inclinato}
\setinterfacevariable{slantedbold}{inclinatograssetto}
@@ -410,6 +426,7 @@
\setinterfacevariable{spot}{spot}
\setinterfacevariable{standard}{standard}
\setinterfacevariable{start}{inizia}
+\setinterfacevariable{starter}{starter}
\setinterfacevariable{sticker}{sticker}
\setinterfacevariable{stop}{termina}
\setinterfacevariable{stopper}{stopper}
@@ -471,10 +488,13 @@
\setinterfacevariable{type}{type}
\setinterfacevariable{typing}{typing}
\setinterfacevariable{unavailable}{nondisponibile}
+\setinterfacevariable{underbar}{sottolinea}
+\setinterfacevariable{underbars}{sottolinee}
\setinterfacevariable{unit}{unita}
\setinterfacevariable{units}{unita}
\setinterfacevariable{unknown}{ignoto}
\setinterfacevariable{unpacked}{unpacked}
+\setinterfacevariable{up}{up}
\setinterfacevariable{url}{url}
\setinterfacevariable{used}{usato}
\setinterfacevariable{value}{valore}
@@ -502,12 +522,21 @@
\setinterfaceconstant{align}{allinea}
\setinterfaceconstant{aligncharacter}{allineacarattere}
\setinterfaceconstant{alignmentcharacter}{carattereallineamento}
+\setinterfaceconstant{alignsymbol}{alignsymbol}
\setinterfaceconstant{aligntitle}{allineatitolo}
\setinterfaceconstant{alternative}{alternativa}
+\setinterfaceconstant{andtext}{andtext}
\setinterfaceconstant{apa}{apa}
\setinterfaceconstant{arrow}{freccia}
+\setinterfaceconstant{artauthor}{artauthor}
+\setinterfaceconstant{artauthoretaldisplay}{artauthoretaldisplay}
+\setinterfaceconstant{artauthoretallimit}{artauthoretallimit}
+\setinterfaceconstant{artauthoretaltext}{artauthoretaltext}
\setinterfaceconstant{at}{ad}
\setinterfaceconstant{author}{autore}
+\setinterfaceconstant{authoretaldisplay}{authoretaldisplay}
+\setinterfaceconstant{authoretallimit}{authoretallimit}
+\setinterfaceconstant{authoretaltext}{authoretaltext}
\setinterfaceconstant{auto}{auto}
\setinterfaceconstant{autofile}{autofile}
\setinterfaceconstant{autofocus}{autofocus}
@@ -576,6 +605,7 @@
\setinterfaceconstant{cutspace}{cutspace}
\setinterfaceconstant{dash}{dash}
\setinterfaceconstant{dat}{dat}
+\setinterfaceconstant{database}{database}
\setinterfaceconstant{date}{data}
\setinterfaceconstant{deepnumbercommand}{deepnumbercommand}
\setinterfaceconstant{deeptextcommand}{deeptextcommand}
@@ -594,12 +624,17 @@
\setinterfaceconstant{dy}{dy}
\setinterfaceconstant{edge}{bordo}
\setinterfaceconstant{edgedistance}{distanzabordo}
+\setinterfaceconstant{editor}{editor}
+\setinterfaceconstant{editoretaldisplay}{editoretaldisplay}
+\setinterfaceconstant{editoretallimit}{editoretallimit}
+\setinterfaceconstant{editoretaltext}{editoretaltext}
\setinterfaceconstant{empty}{vuoto}
\setinterfaceconstant{equalheight}{equalheight}
\setinterfaceconstant{equalwidth}{equalwidth}
\setinterfaceconstant{escape}{escape}
\setinterfaceconstant{evenmargin}{marginepari}
\setinterfaceconstant{expansion}{espansione}
+\setinterfaceconstant{export}{export}
\setinterfaceconstant{extras}{extras}
\setinterfaceconstant{factor}{fattore}
\setinterfaceconstant{fallback}{fallback}
@@ -610,6 +645,8 @@
\setinterfaceconstant{fieldoffset}{offsetcampo}
\setinterfaceconstant{file}{file}
\setinterfaceconstant{filtercommand}{filtercommand}
+\setinterfaceconstant{finalnamesep}{finalnamesep}
+\setinterfaceconstant{firstnamesep}{firstnamesep}
\setinterfaceconstant{focus}{focus}
\setinterfaceconstant{focusin}{focusin}
\setinterfaceconstant{focusout}{focusout}
@@ -631,6 +668,7 @@
\setinterfaceconstant{global}{globale}
\setinterfaceconstant{grid}{griglia}
\setinterfaceconstant{hang}{sospendi}
+\setinterfaceconstant{headalign}{headalign}
\setinterfaceconstant{headcolor}{coloretesta}
\setinterfaceconstant{headcommand}{headcommand}
\setinterfaceconstant{headconversion}{conversionetesta}
@@ -658,14 +696,18 @@
\setinterfaceconstant{inner}{interno}
\setinterfaceconstant{innermargin}{margineinterno}
\setinterfaceconstant{inputfile}{inputfile}
+\setinterfaceconstant{intent}{intent}
\setinterfaceconstant{interaction}{interazione}
\setinterfaceconstant{interlinespace}{interlinea}
\setinterfaceconstant{itemalign}{itemalign}
\setinterfaceconstant{items}{elementi}
+\setinterfaceconstant{juniorsep}{juniorsep}
\setinterfaceconstant{ken}{ken}
\setinterfaceconstant{keyexpansion}{keyexpansion}
\setinterfaceconstant{keyword}{parolachiave}
\setinterfaceconstant{label}{etichetta}
+\setinterfaceconstant{lastnamesep}{lastnamesep}
+\setinterfaceconstant{lastpubsep}{lastpubsep}
\setinterfaceconstant{left}{sinistra}
\setinterfaceconstant{leftcolor}{coloresinistra}
\setinterfaceconstant{leftcompoundhyphen}{leftcompoundhyphen}
@@ -705,8 +747,10 @@
\setinterfaceconstant{marking}{marcatura}
\setinterfaceconstant{marstyle}{stilemarcatura}
\setinterfaceconstant{max}{max}
+\setinterfaceconstant{maxdepth}{maxdepth}
\setinterfaceconstant{maxheight}{altezzamax}
\setinterfaceconstant{maxwidth}{ampiezzamax}
+\setinterfaceconstant{maybeyear}{maybeyear}
\setinterfaceconstant{menu}{menu}
\setinterfaceconstant{method}{metodo}
\setinterfaceconstant{middle}{centro}
@@ -717,8 +761,10 @@
\setinterfaceconstant{mindepth}{mindeoth}
\setinterfaceconstant{minheight}{altezzamin}
\setinterfaceconstant{minwidth}{ampiezzamin}
+\setinterfaceconstant{monthconversion}{monthconversion}
\setinterfaceconstant{n}{n}
\setinterfaceconstant{name}{nome}
+\setinterfaceconstant{namesep}{namesep}
\setinterfaceconstant{nbottom}{nfondo}
\setinterfaceconstant{nc}{nc}
\setinterfaceconstant{next}{successivo}
@@ -742,6 +788,7 @@
\setinterfaceconstant{numberseparator}{separatorenumero}
\setinterfaceconstant{numberseparatorset}{numberseparatorset}
\setinterfaceconstant{numberset}{numberset}
+\setinterfaceconstant{numberstarter}{numberstarter}
\setinterfaceconstant{numberstopper}{numberstopper}
\setinterfaceconstant{numberstyle}{stilenumero}
\setinterfaceconstant{numberwidth}{numberwidth}
@@ -754,7 +801,9 @@
\setinterfaceconstant{openaction}{azioneapri}
\setinterfaceconstant{openpageaction}{azioneapripagina}
\setinterfaceconstant{option}{opzione}
+\setinterfaceconstant{order}{order}
\setinterfaceconstant{orientation}{orientation}
+\setinterfaceconstant{otherstext}{otherstext}
\setinterfaceconstant{outermargin}{margineesterno}
\setinterfaceconstant{overprint}{overprint}
\setinterfaceconstant{ownnumber}{numeroproprio}
@@ -772,10 +821,12 @@
\setinterfaceconstant{pageprefixsegments}{pageprefixsegments}
\setinterfaceconstant{pageprefixseparatorset}{pageprefixseparatorset}
\setinterfaceconstant{pageprefixset}{pageprefixset}
+\setinterfaceconstant{pageprefixstarter}{pageprefixstarter}
\setinterfaceconstant{pageprefixstopper}{pageprefixstopper}
\setinterfaceconstant{pagesegments}{pagesegments}
\setinterfaceconstant{pageseparatorset}{pageseparatorset}
\setinterfaceconstant{pageset}{pageset}
+\setinterfaceconstant{pagestarter}{pagestarter}
\setinterfaceconstant{pagestate}{statopagina}
\setinterfaceconstant{pagestopper}{pagestopper}
\setinterfaceconstant{pagestyle}{stilepagina}
@@ -793,16 +844,20 @@
\setinterfaceconstant{prefixsegments}{prefixsegments}
\setinterfaceconstant{prefixseparatorset}{prefixseparatorset}
\setinterfaceconstant{prefixset}{prefixset}
+\setinterfaceconstant{prefixstarter}{prefixstarter}
\setinterfaceconstant{prefixstopper}{prefixstopper}
\setinterfaceconstant{preset}{preimpostato}
\setinterfaceconstant{preview}{anteprima}
\setinterfaceconstant{previous}{precedente}
\setinterfaceconstant{previousnumber}{numeroprecedente}
\setinterfaceconstant{process}{process}
+\setinterfaceconstant{pubsep}{pubsep}
\setinterfaceconstant{radius}{raggio}
\setinterfaceconstant{random}{casuale}
+\setinterfaceconstant{range}{range}
\setinterfaceconstant{reduction}{riduzione}
\setinterfaceconstant{ref}{ref}
+\setinterfaceconstant{refcommand}{refcommand}
\setinterfaceconstant{reference}{riferimento}
\setinterfaceconstant{referenceprefix}{referenceprefix}
\setinterfaceconstant{referencing}{referencing}
@@ -836,6 +891,7 @@
\setinterfaceconstant{rulethickness}{spessorelinea}
\setinterfaceconstant{samepage}{stessapagina}
\setinterfaceconstant{sample}{campione}
+\setinterfaceconstant{samplesize}{samplesize}
\setinterfaceconstant{saveinlist}{saveinlist}
\setinterfaceconstant{scale}{scala}
\setinterfaceconstant{scope}{scope}
@@ -848,6 +904,7 @@
\setinterfaceconstant{sectionsegments}{sectionsegments}
\setinterfaceconstant{sectionseparatorset}{sectionseparatorset}
\setinterfaceconstant{sectionset}{sectionset}
+\setinterfaceconstant{sectionstarter}{sectionstarter}
\setinterfaceconstant{sectionstopper}{sectionstopper}
\setinterfaceconstant{separator}{separatore}
\setinterfaceconstant{set}{set}
@@ -860,6 +917,7 @@
\setinterfaceconstant{sign}{segno}
\setinterfaceconstant{size}{dimensione}
\setinterfaceconstant{small}{piccolo}
+\setinterfaceconstant{sort}{sort}
\setinterfaceconstant{sorttype}{sorttype}
\setinterfaceconstant{source}{origine}
\setinterfaceconstant{space}{spazio}
@@ -874,16 +932,19 @@
\setinterfaceconstant{spot}{spot}
\setinterfaceconstant{stack}{stack}
\setinterfaceconstant{start}{inizia}
+\setinterfaceconstant{starter}{starter}
\setinterfaceconstant{state}{stato}
\setinterfaceconstant{step}{passo}
\setinterfaceconstant{stop}{termina}
\setinterfaceconstant{stopper}{stopper}
\setinterfaceconstant{stretch}{dilata}
+\setinterfaceconstant{strip}{strip}
\setinterfaceconstant{strut}{strut}
\setinterfaceconstant{style}{stile}
\setinterfaceconstant{sub}{sotto}
\setinterfaceconstant{subtitle}{sottotitolo}
\setinterfaceconstant{suffix}{suffix}
+\setinterfaceconstant{surnamesep}{surnamesep}
\setinterfaceconstant{sx}{sx}
\setinterfaceconstant{sy}{sy}
\setinterfaceconstant{symalign}{symallinea}
@@ -923,6 +984,7 @@
\setinterfaceconstant{topoffset}{offsetcima}
\setinterfaceconstant{topspace}{spaziocima}
\setinterfaceconstant{topstate}{statocima}
+\setinterfaceconstant{totalnumber}{totalnumber}
\setinterfaceconstant{type}{type}
\setinterfaceconstant{unit}{unita}
\setinterfaceconstant{unknownreference}{riferimentoingoto}
@@ -933,6 +995,7 @@
\setinterfaceconstant{veroffset}{veroffset}
\setinterfaceconstant{vfil}{vfil}
\setinterfaceconstant{voffset}{voffset}
+\setinterfaceconstant{vonsep}{vonsep}
\setinterfaceconstant{way}{modo}
\setinterfaceconstant{wfactor}{wfactor}
\setinterfaceconstant{white}{bianco}
@@ -1261,10 +1324,6 @@
\setinterfacecommand{outeredgewidth}{outeredgewidth}
\setinterfacecommand{outermargindistance}{outermargindistance}
\setinterfacecommand{outermarginwidth}{outermarginwidth}
-\setinterfacecommand{overbar}{sopralinea}
-\setinterfacecommand{overbars}{sopralinee}
-\setinterfacecommand{overstrike}{sbarrato}
-\setinterfacecommand{overstrikes}{sbarrati}
\setinterfacecommand{packed}{impaccato}
\setinterfacecommand{page}{pagina}
\setinterfacecommand{pagedepth}{pagedepth}
@@ -1599,8 +1658,6 @@
\setinterfacecommand{type}{type}
\setinterfacecommand{typebuffer}{typebuffer}
\setinterfacecommand{typefile}{typefile}
-\setinterfacecommand{underbar}{sottolinea}
-\setinterfacecommand{underbars}{sottolinee}
\setinterfacecommand{unitmeaning}{nomeunita}
\setinterfacecommand{unknown}{ignoto}
\setinterfacecommand{useJSscripts}{usaJSscripts}
diff --git a/Master/texmf-dist/tex/context/base/mult-mcs.tex b/Master/texmf-dist/tex/context/base/mult-mcs.tex
index bee7b777d10..98c392c9fc9 100644
--- a/Master/texmf-dist/tex/context/base/mult-mcs.tex
+++ b/Master/texmf-dist/tex/context/base/mult-mcs.tex
@@ -2,8 +2,11 @@
\setinterfacemessage{references}{3}{neznamy typ reference --}
\setinterfacemessage{references}{2}{duplicitni reference -- na strane --}
\setinterfacemessage{references}{4}{nedovolena reference --}
-\setinterfacemessage{references}{title}{reference}
\setinterfacemessage{references}{30}{neznamy objekt --}
+\setinterfacemessage{references}{25}{references from document '--' are not imported (export again)}
+\setinterfacemessage{references}{24}{references from document '--' are not exported}
+\setinterfacemessage{references}{title}{reference}
+\setinterfacemessage{references}{26}{references from document '--' are imported}
\setinterfacemessage{references}{31}{duplicitni object --}
\setinterfacemessage{references}{21}{dokument -- nacten}
\setinterfacemessage{references}{22}{dokument -- neni interaktivni}
@@ -66,6 +69,10 @@
\setinterfacemessage{interactions}{6}{attachment file -- does not exist}
\setinterfacemessage{interactions}{title}{interakce}
\setinterfacemessage{interactions}{21}{-- kod vlozen}
+\setinterfacemessage{regimes}{1}{kodovani --}
+\setinterfacemessage{regimes}{3}{nezname kodovani --}
+\setinterfacemessage{regimes}{2}{je nacteno kodovani --}
+\setinterfacemessage{regimes}{title}{kodovani}
\setinterfacemessage{structures}{1}{zacatek oddilu (sekce) --}
\setinterfacemessage{structures}{title}{struktury}
\setinterfacemessage{structures}{2}{konec oddilu (sekce) --}
@@ -80,15 +87,24 @@
\setinterfacemessage{linguals}{8}{specificke volby jazyka [--] bez mezer pripojeny}
\setinterfacemessage{linguals}{title}{jazyky}
\setinterfacemessage{linguals}{10}{vzory --nacteny}
-\setinterfacemessage{regimes}{1}{kodovani --}
-\setinterfacemessage{regimes}{3}{nezname kodovani --}
-\setinterfacemessage{regimes}{2}{je nacteno kodovani --}
-\setinterfacemessage{regimes}{title}{kodovani}
+\setinterfacemessage{verbatims}{1}{soubor -- neexistuje}
+\setinterfacemessage{verbatims}{title}{verbatim}
\setinterfacemessage{filters}{1}{filter -- is loaded}
\setinterfacemessage{filters}{title}{filter}
\setinterfacemessage{filters}{2}{unknown filter --}
-\setinterfacemessage{verbatims}{1}{soubor -- neexistuje}
-\setinterfacemessage{verbatims}{title}{verbatim}
+\setinterfacemessage{textblocks}{1}{nova verze, je treba druhy beh}
+\setinterfacemessage{textblocks}{3}{ctu bloky z --}
+\setinterfacemessage{textblocks}{2}{zapisuji bloky do --}
+\setinterfacemessage{textblocks}{5}{-- neni skryto}
+\setinterfacemessage{textblocks}{4}{je treba druhy beh}
+\setinterfacemessage{textblocks}{7}{-- skryto}
+\setinterfacemessage{textblocks}{6}{-- skryto a zpracovano}
+\setinterfacemessage{textblocks}{9}{-- nevysazeno}
+\setinterfacemessage{textblocks}{8}{-- vysazeno}
+\setinterfacemessage{textblocks}{title}{textovyblok}
+\setinterfacemessage{textblocks}{12}{-- preskoceno}
+\setinterfacemessage{textblocks}{11}{-- nacteno a vysazeno}
+\setinterfacemessage{textblocks}{10}{-- nacteno a zpracovano}
\setinterfacemessage{encodings}{1}{kodovani --}
\setinterfacemessage{encodings}{3}{nezname kodovani --}
\setinterfacemessage{encodings}{2}{je nacteno kodovani --}
@@ -107,21 +123,10 @@
\setinterfacemessage{columns}{12}{plovouci objekt je presunut do nasledujiciho sloupce / --}
\setinterfacemessage{columns}{11}{plovouci objekt je pro sloupec prilis siroky}
\setinterfacemessage{columns}{10}{zbyl (mene nez) 1 radek}
-\setinterfacemessage{textblocks}{1}{nova verze, je treba druhy beh}
-\setinterfacemessage{textblocks}{3}{ctu bloky z --}
-\setinterfacemessage{textblocks}{2}{zapisuji bloky do --}
-\setinterfacemessage{textblocks}{5}{-- neni skryto}
-\setinterfacemessage{textblocks}{4}{je treba druhy beh}
-\setinterfacemessage{textblocks}{7}{-- skryto}
-\setinterfacemessage{textblocks}{6}{-- skryto a zpracovano}
-\setinterfacemessage{textblocks}{9}{-- nevysazeno}
-\setinterfacemessage{textblocks}{8}{-- vysazeno}
-\setinterfacemessage{textblocks}{title}{textovyblok}
-\setinterfacemessage{textblocks}{12}{-- preskoceno}
-\setinterfacemessage{textblocks}{11}{-- nacteno a vysazeno}
-\setinterfacemessage{textblocks}{10}{-- nacteno a zpracovano}
\setinterfacemessage{symbols}{1}{nacita se soubor symbolu --}
\setinterfacemessage{symbols}{title}{symboly}
+\setinterfacemessage{files}{1}{synonymum souboru -- je jiz pouzito pro --}
+\setinterfacemessage{files}{title}{soubory}
\setinterfacemessage{versions}{1}{postradam @+}
\setinterfacemessage{versions}{3}{oznacene strany: --}
\setinterfacemessage{versions}{2}{oznacuji se strany}
@@ -134,9 +139,18 @@
\setinterfacemessage{specials}{7}{neznamy ovladac (driver) --}
\setinterfacemessage{specials}{6}{zanoreni neni dovoleno}
\setinterfacemessage{specials}{title}{speciality}
-\setinterfacemessage{javascript}{1}{nacita se soubor skriptu --}
-\setinterfacemessage{javascript}{title}{javascript}
-\setinterfacemessage{javascript}{2}{neznama preambule --}
+\setinterfacemessage{layouts}{1}{vyska textu prizpusobena s -- na strane --}
+\setinterfacemessage{layouts}{3}{-- krat text odlozen}
+\setinterfacemessage{layouts}{2}{-- krat odlozeny text umisten}
+\setinterfacemessage{layouts}{5}{okrajove bloky neaktivni}
+\setinterfacemessage{layouts}{4}{okrajove bloky aktivni}
+\setinterfacemessage{layouts}{7}{pocita se misto pro logo}
+\setinterfacemessage{layouts}{6}{sada stran -- zpracovana (velikost --)}
+\setinterfacemessage{layouts}{9}{aktualne ne vice nez -- urovne/urovni vyctu}
+\setinterfacemessage{layouts}{8}{pocita se pozadi}
+\setinterfacemessage{layouts}{title}{layout}
+\setinterfacemessage{layouts}{11}{svisla mezera -- neni povolena v pevnem radkovem rejstriku}
+\setinterfacemessage{layouts}{10}{-- a -- nedava dohromady 1.0}
\setinterfacemessage{fonts}{1}{kodovani --}
\setinterfacemessage{fonts}{3}{neznama varianta --}
\setinterfacemessage{fonts}{2}{varianta -- je nactena}
@@ -153,39 +167,22 @@
\setinterfacemessage{databases}{2}{local file --}
\setinterfacemessage{databases}{4}{unknown file --}
\setinterfacemessage{databases}{title}{databases}
-\setinterfacemessage{colors}{1}{system -- je globalne aktivovana}
-\setinterfacemessage{colors}{3}{-- neni definovana --}
-\setinterfacemessage{colors}{2}{system -- je lokalne activovana}
-\setinterfacemessage{colors}{5}{neznamy system --}
-\setinterfacemessage{colors}{4}{system -- je nacten}
-\setinterfacemessage{colors}{7}{palette -- neni k dispozici}
-\setinterfacemessage{colors}{6}{palette -- je k dispozici}
-\setinterfacemessage{colors}{9}{-- prostor barev neni podporovan}
-\setinterfacemessage{colors}{8}{specifikace -- v barve -- bude cerna}
-\setinterfacemessage{colors}{title}{barva}
-\setinterfacemessage{colors}{12}{-- is registered}
-\setinterfacemessage{colors}{11}{barva je prevedena na sed}
-\setinterfacemessage{colors}{10}{-- prostor barev je podporovan}
-\setinterfacemessage{layouts}{1}{vyska textu prizpusobena s -- na strane --}
-\setinterfacemessage{layouts}{3}{-- krat text odlozen}
-\setinterfacemessage{layouts}{2}{-- krat odlozeny text umisten}
-\setinterfacemessage{layouts}{5}{okrajove bloky neaktivni}
-\setinterfacemessage{layouts}{4}{okrajove bloky aktivni}
-\setinterfacemessage{layouts}{7}{pocita se misto pro logo}
-\setinterfacemessage{layouts}{6}{sada stran -- zpracovana (velikost --)}
-\setinterfacemessage{layouts}{9}{aktualne ne vice nez -- urovne/urovni vyctu}
-\setinterfacemessage{layouts}{8}{pocita se pozadi}
-\setinterfacemessage{layouts}{title}{layout}
-\setinterfacemessage{layouts}{11}{svisla mezera -- neni povolena v pevnem radkovem rejstriku}
-\setinterfacemessage{layouts}{10}{-- a -- nedava dohromady 1.0}
+\setinterfacemessage{publications}{1}{file -- not found, unknown style ignored}
+\setinterfacemessage{publications}{3}{wrote a new auxiliary file \jobname.aux}
+\setinterfacemessage{publications}{title}{publications}
+\setinterfacemessage{publications}{2}{file -- not found, waiting for bibtex}
+\setinterfacemessage{publications}{4}{loading database from --}
+\setinterfacemessage{publications}{5}{warning: cite argument -- on line \the\inputlineno}
+\setinterfacemessage{publications}{6}{loading formatting style from --}
+\setinterfacemessage{javascript}{1}{nacita se soubor skriptu --}
+\setinterfacemessage{javascript}{title}{javascript}
+\setinterfacemessage{javascript}{2}{neznama preambule --}
\setinterfacemessage{check}{1}{postradam '=' po '--' na radku --}
\setinterfacemessage{check}{3}{-- -- nahrazuje makro, uzijte VERZALKY!}
\setinterfacemessage{check}{2}{ocekavam -- argument(y) na radku --}
\setinterfacemessage{check}{title}{kontrola}
\setinterfacemessage{metapost}{1}{loading metapost library --}
\setinterfacemessage{metapost}{title}{metapost}
-\setinterfacemessage{files}{1}{synonymum souboru -- je jiz pouzito pro --}
-\setinterfacemessage{files}{title}{soubory}
\setinterfacemessage{figures}{1}{obraz -- nelze nalezt}
\setinterfacemessage{figures}{3}{dimensions of -- are determined externally}
\setinterfacemessage{figures}{2}{obraz -- nepritomen}
@@ -194,5 +191,18 @@
\setinterfacemessage{figures}{6}{dimenze obrazu -- spocteny programem rlxtools}
\setinterfacemessage{figures}{8}{obrazovy objekt -- je znovu pouzit}
\setinterfacemessage{figures}{title}{obrazy}
+\setinterfacemessage{colors}{1}{system -- je globalne aktivovana}
+\setinterfacemessage{colors}{3}{-- neni definovana --}
+\setinterfacemessage{colors}{2}{system -- je lokalne activovana}
+\setinterfacemessage{colors}{5}{neznamy system --}
+\setinterfacemessage{colors}{4}{system -- je nacten}
+\setinterfacemessage{colors}{7}{palette -- neni k dispozici}
+\setinterfacemessage{colors}{6}{palette -- je k dispozici}
+\setinterfacemessage{colors}{9}{-- prostor barev neni podporovan}
+\setinterfacemessage{colors}{8}{specifikace -- v barve -- bude cerna}
+\setinterfacemessage{colors}{title}{barva}
+\setinterfacemessage{colors}{12}{-- is registered}
+\setinterfacemessage{colors}{11}{barva je prevedena na sed}
+\setinterfacemessage{colors}{10}{-- prostor barev je podporovan}
%
\endinput \ No newline at end of file
diff --git a/Master/texmf-dist/tex/context/base/mult-mde.tex b/Master/texmf-dist/tex/context/base/mult-mde.tex
index a80ac4306e6..4da89ba333b 100644
--- a/Master/texmf-dist/tex/context/base/mult-mde.tex
+++ b/Master/texmf-dist/tex/context/base/mult-mde.tex
@@ -2,8 +2,11 @@
\setinterfacemessage{references}{3}{unbekannte Referenz Typ --}
\setinterfacemessage{references}{2}{doppelte Referenz -- auf Seite --}
\setinterfacemessage{references}{4}{illegale Referenz --}
-\setinterfacemessage{references}{title}{referenzen}
\setinterfacemessage{references}{30}{unbekanntes Object --}
+\setinterfacemessage{references}{25}{references from document '--' are not imported (export again)}
+\setinterfacemessage{references}{24}{references from document '--' are not exported}
+\setinterfacemessage{references}{title}{referenzen}
+\setinterfacemessage{references}{26}{references from document '--' are imported}
\setinterfacemessage{references}{31}{doppeltes Object --}
\setinterfacemessage{references}{21}{Dokument -- geladen}
\setinterfacemessage{references}{22}{Dokument -- ist nicht aktiv}
@@ -66,6 +69,10 @@
\setinterfacemessage{interactions}{6}{attachment file -- does not exist}
\setinterfacemessage{interactions}{title}{Interaktion}
\setinterfacemessage{interactions}{21}{-- Code eingefuegt}
+\setinterfacemessage{regimes}{1}{Kodierung --}
+\setinterfacemessage{regimes}{3}{Unbekannte Kodierung --}
+\setinterfacemessage{regimes}{2}{Kodierung -- ist geladen}
+\setinterfacemessage{regimes}{title}{Kodierung}
\setinterfacemessage{structures}{1}{Begin des Abschnittsblocks --}
\setinterfacemessage{structures}{title}{struktur}
\setinterfacemessage{structures}{2}{Ende des Abschnittsblocks --}
@@ -80,15 +87,24 @@
\setinterfacemessage{linguals}{8}{Sprachenspezifische Option [--] nahtlos hinzugefuegt}
\setinterfacemessage{linguals}{title}{Sprache}
\setinterfacemessage{linguals}{10}{Trennmuster --geladen}
-\setinterfacemessage{regimes}{1}{Kodierung --}
-\setinterfacemessage{regimes}{3}{Unbekannte Kodierung --}
-\setinterfacemessage{regimes}{2}{Kodierung -- ist geladen}
-\setinterfacemessage{regimes}{title}{Kodierung}
+\setinterfacemessage{verbatims}{1}{Datei -- existiert nicht}
+\setinterfacemessage{verbatims}{title}{verbatim}
\setinterfacemessage{filters}{1}{filter -- ist geladen}
\setinterfacemessage{filters}{title}{filter}
\setinterfacemessage{filters}{2}{unknown filter --}
-\setinterfacemessage{verbatims}{1}{Datei -- existiert nicht}
-\setinterfacemessage{verbatims}{title}{verbatim}
+\setinterfacemessage{textblocks}{1}{neue Version, zweiter Durchlauf benoetigt}
+\setinterfacemessage{textblocks}{3}{lese Bloecke von --}
+\setinterfacemessage{textblocks}{2}{schreibe Bloecke zu --}
+\setinterfacemessage{textblocks}{5}{-- nicht verborgen}
+\setinterfacemessage{textblocks}{4}{zweiter Durchlauf benoetigt}
+\setinterfacemessage{textblocks}{7}{-- verborgen}
+\setinterfacemessage{textblocks}{6}{-- verborgen und verarbeitet}
+\setinterfacemessage{textblocks}{9}{-- nicht gesetzt}
+\setinterfacemessage{textblocks}{8}{-- gesetzt}
+\setinterfacemessage{textblocks}{title}{textblock}
+\setinterfacemessage{textblocks}{12}{-- ausgelassen}
+\setinterfacemessage{textblocks}{11}{-- geladen und gesetzt}
+\setinterfacemessage{textblocks}{10}{-- geladen und verarbeitet}
\setinterfacemessage{encodings}{1}{Kodierung --}
\setinterfacemessage{encodings}{3}{Unbekannte Kodierung --}
\setinterfacemessage{encodings}{2}{Kodierung -- ist geladen}
@@ -107,21 +123,10 @@
\setinterfacemessage{columns}{12}{Gleitobjekt in naechste Zeile verschoben / --}
\setinterfacemessage{columns}{11}{Gleitobjekt zu breit fuer Spalte}
\setinterfacemessage{columns}{10}{(weniger als) 1 Zeile uebrig}
-\setinterfacemessage{textblocks}{1}{neue Version, zweiter Durchlauf benoetigt}
-\setinterfacemessage{textblocks}{3}{lese Bloecke von --}
-\setinterfacemessage{textblocks}{2}{schreibe Bloecke zu --}
-\setinterfacemessage{textblocks}{5}{-- nicht verborgen}
-\setinterfacemessage{textblocks}{4}{zweiter Durchlauf benoetigt}
-\setinterfacemessage{textblocks}{7}{-- verborgen}
-\setinterfacemessage{textblocks}{6}{-- verborgen und verarbeitet}
-\setinterfacemessage{textblocks}{9}{-- nicht gesetzt}
-\setinterfacemessage{textblocks}{8}{-- gesetzt}
-\setinterfacemessage{textblocks}{title}{textblock}
-\setinterfacemessage{textblocks}{12}{-- ausgelassen}
-\setinterfacemessage{textblocks}{11}{-- geladen und gesetzt}
-\setinterfacemessage{textblocks}{10}{-- geladen und verarbeitet}
\setinterfacemessage{symbols}{1}{Lade Symboldatei --}
\setinterfacemessage{symbols}{title}{Symbole}
+\setinterfacemessage{files}{1}{Dateisynonym -- wird bereits fuer -- benutzt}
+\setinterfacemessage{files}{title}{files}
\setinterfacemessage{versions}{1}{fehlendes @+}
\setinterfacemessage{versions}{3}{Ausgewaehlte Seiten: --}
\setinterfacemessage{versions}{2}{Erstelle Seiten}
@@ -134,9 +139,18 @@
\setinterfacemessage{specials}{7}{unbekante Driver --}
\setinterfacemessage{specials}{6}{Verschachtelung nicht erlaubt}
\setinterfacemessage{specials}{title}{spezielles}
-\setinterfacemessage{javascript}{1}{Lade Scriptdatei --}
-\setinterfacemessage{javascript}{title}{javascript}
-\setinterfacemessage{javascript}{2}{unbekannte Preamble --}
+\setinterfacemessage{layouts}{1}{Texthoehe angepasst mit -- auf Seite --}
+\setinterfacemessage{layouts}{3}{-- mal Text verschoben}
+\setinterfacemessage{layouts}{2}{-- mal verschobener Text plaziert}
+\setinterfacemessage{layouts}{5}{marginalbloecke inaktiv}
+\setinterfacemessage{layouts}{4}{marginalbloecke aktiv}
+\setinterfacemessage{layouts}{7}{berechne Platzbedarf des Logos}
+\setinterfacemessage{layouts}{6}{Unterseitenfolge -- verarbeitet (Groesse --)}
+\setinterfacemessage{layouts}{9}{z.Z. nicht mehr als -- Ebenen in Aufzaehlungen}
+\setinterfacemessage{layouts}{8}{berechne Hintergrund}
+\setinterfacemessage{layouts}{title}{Layout}
+\setinterfacemessage{layouts}{11}{Zwischenraum -- nicht im Grittermoduserlau}
+\setinterfacemessage{layouts}{10}{-- und -- ergeben zusammen nicht 1.0}
\setinterfacemessage{fonts}{1}{Kodierung --}
\setinterfacemessage{fonts}{3}{Unbekannte Variante --}
\setinterfacemessage{fonts}{2}{Variante -- ist geladen}
@@ -153,39 +167,22 @@
\setinterfacemessage{databases}{2}{lokale Datei --}
\setinterfacemessage{databases}{4}{unbekannte Datei --}
\setinterfacemessage{databases}{title}{Datenbank}
-\setinterfacemessage{colors}{1}{system -- ist global aktiviert}
-\setinterfacemessage{colors}{3}{-- ist undefiniert --}
-\setinterfacemessage{colors}{2}{system -- ist lokal aktiviert}
-\setinterfacemessage{colors}{5}{unbekanntes System --}
-\setinterfacemessage{colors}{4}{system -- ist geladen}
-\setinterfacemessage{colors}{7}{palette -- ist nicht verfuegbar}
-\setinterfacemessage{colors}{6}{palette -- ist verfuegbar}
-\setinterfacemessage{colors}{9}{-- Farbraum wird nicht unterstuetzt}
-\setinterfacemessage{colors}{8}{Spezifikation -- bei Farbe -- wird schwarz}
-\setinterfacemessage{colors}{title}{farbe}
-\setinterfacemessage{colors}{12}{-- is registered}
-\setinterfacemessage{colors}{11}{Farbe wird in Grau umgewandelt}
-\setinterfacemessage{colors}{10}{-- Farbraum wird unterstuetzt}
-\setinterfacemessage{layouts}{1}{Texthoehe angepasst mit -- auf Seite --}
-\setinterfacemessage{layouts}{3}{-- mal Text verschoben}
-\setinterfacemessage{layouts}{2}{-- mal verschobener Text plaziert}
-\setinterfacemessage{layouts}{5}{marginalbloecke inaktiv}
-\setinterfacemessage{layouts}{4}{marginalbloecke aktiv}
-\setinterfacemessage{layouts}{7}{berechne Platzbedarf des Logos}
-\setinterfacemessage{layouts}{6}{Unterseitenfolge -- verarbeitet (Groesse --)}
-\setinterfacemessage{layouts}{9}{z.Z. nicht mehr als -- Ebenen in Aufzaehlungen}
-\setinterfacemessage{layouts}{8}{berechne Hintergrund}
-\setinterfacemessage{layouts}{title}{Layout}
-\setinterfacemessage{layouts}{11}{Zwischenraum -- nicht im Grittermoduserlau}
-\setinterfacemessage{layouts}{10}{-- und -- ergeben zusammen nicht 1.0}
+\setinterfacemessage{publications}{1}{file -- not found, unknown style ignored}
+\setinterfacemessage{publications}{3}{wrote a new auxiliary file \jobname.aux}
+\setinterfacemessage{publications}{title}{publications}
+\setinterfacemessage{publications}{2}{file -- not found, waiting for bibtex}
+\setinterfacemessage{publications}{4}{loading database from --}
+\setinterfacemessage{publications}{5}{warning: cite argument -- on line \the\inputlineno}
+\setinterfacemessage{publications}{6}{loading formatting style from --}
+\setinterfacemessage{javascript}{1}{Lade Scriptdatei --}
+\setinterfacemessage{javascript}{title}{javascript}
+\setinterfacemessage{javascript}{2}{unbekannte Preamble --}
\setinterfacemessage{check}{1}{Fehlendes '=' nach '--' in Zeile --}
\setinterfacemessage{check}{3}{-- -- ersetzt ein Makro, verwende VERSALIEN!}
\setinterfacemessage{check}{2}{-- Argument(e) in Zeile -- erwartet}
\setinterfacemessage{check}{title}{check}
\setinterfacemessage{metapost}{1}{Lade metapost Bibliothek --}
\setinterfacemessage{metapost}{title}{metapost}
-\setinterfacemessage{files}{1}{Dateisynonym -- wird bereits fuer -- benutzt}
-\setinterfacemessage{files}{title}{files}
\setinterfacemessage{figures}{1}{Abbildung -- kann nicht gefunden werden}
\setinterfacemessage{figures}{3}{dimensions of -- are determined externally}
\setinterfacemessage{figures}{2}{Abbildung -- wird nicht erstellt}
@@ -194,5 +191,18 @@
\setinterfacemessage{figures}{6}{Dimensionen von -- ausgerechnet durch rlxtools}
\setinterfacemessage{figures}{8}{Abbildungobjekt -- wurde wiederverwandt}
\setinterfacemessage{figures}{title}{Abbildungen}
+\setinterfacemessage{colors}{1}{system -- ist global aktiviert}
+\setinterfacemessage{colors}{3}{-- ist undefiniert --}
+\setinterfacemessage{colors}{2}{system -- ist lokal aktiviert}
+\setinterfacemessage{colors}{5}{unbekanntes System --}
+\setinterfacemessage{colors}{4}{system -- ist geladen}
+\setinterfacemessage{colors}{7}{palette -- ist nicht verfuegbar}
+\setinterfacemessage{colors}{6}{palette -- ist verfuegbar}
+\setinterfacemessage{colors}{9}{-- Farbraum wird nicht unterstuetzt}
+\setinterfacemessage{colors}{8}{Spezifikation -- bei Farbe -- wird schwarz}
+\setinterfacemessage{colors}{title}{farbe}
+\setinterfacemessage{colors}{12}{-- is registered}
+\setinterfacemessage{colors}{11}{Farbe wird in Grau umgewandelt}
+\setinterfacemessage{colors}{10}{-- Farbraum wird unterstuetzt}
%
\endinput \ No newline at end of file
diff --git a/Master/texmf-dist/tex/context/base/mult-men.tex b/Master/texmf-dist/tex/context/base/mult-men.tex
index 8335d291143..4c1bc99420a 100644
--- a/Master/texmf-dist/tex/context/base/mult-men.tex
+++ b/Master/texmf-dist/tex/context/base/mult-men.tex
@@ -2,8 +2,11 @@
\setinterfacemessage{references}{3}{unknown reference type --}
\setinterfacemessage{references}{2}{duplicate reference -- on page --}
\setinterfacemessage{references}{4}{illegal reference --}
-\setinterfacemessage{references}{title}{references}
\setinterfacemessage{references}{30}{unknown object --}
+\setinterfacemessage{references}{25}{references from document '--' are not imported (export again)}
+\setinterfacemessage{references}{24}{references from document '--' are not exported}
+\setinterfacemessage{references}{title}{references}
+\setinterfacemessage{references}{26}{references from document '--' are imported}
\setinterfacemessage{references}{31}{duplicate object --}
\setinterfacemessage{references}{21}{document -- loaded}
\setinterfacemessage{references}{22}{document -- is not interactive}
@@ -66,6 +69,10 @@
\setinterfacemessage{interactions}{6}{attachment file -- does not exist}
\setinterfacemessage{interactions}{title}{interaction}
\setinterfacemessage{interactions}{21}{-- code inserted}
+\setinterfacemessage{regimes}{1}{regime --}
+\setinterfacemessage{regimes}{3}{unknown regime --}
+\setinterfacemessage{regimes}{2}{regime -- is loaded}
+\setinterfacemessage{regimes}{title}{regime}
\setinterfacemessage{structures}{1}{begin of sectionblock --}
\setinterfacemessage{structures}{title}{structure}
\setinterfacemessage{structures}{2}{end of sectionblock --}
@@ -80,15 +87,24 @@
\setinterfacemessage{linguals}{8}{language specific options [--] seamless appended}
\setinterfacemessage{linguals}{title}{language}
\setinterfacemessage{linguals}{10}{patterns --loaded}
-\setinterfacemessage{regimes}{1}{regime --}
-\setinterfacemessage{regimes}{3}{unknown regime --}
-\setinterfacemessage{regimes}{2}{regime -- is loaded}
-\setinterfacemessage{regimes}{title}{regime}
+\setinterfacemessage{verbatims}{1}{file -- does not exist}
+\setinterfacemessage{verbatims}{title}{verbatim}
\setinterfacemessage{filters}{1}{filter -- is loaded}
\setinterfacemessage{filters}{title}{filter}
\setinterfacemessage{filters}{2}{unknown filter --}
-\setinterfacemessage{verbatims}{1}{file -- does not exist}
-\setinterfacemessage{verbatims}{title}{verbatim}
+\setinterfacemessage{textblocks}{1}{new version, second pass needed}
+\setinterfacemessage{textblocks}{3}{reading blocks from --}
+\setinterfacemessage{textblocks}{2}{writing blocks to --}
+\setinterfacemessage{textblocks}{5}{-- not hidden}
+\setinterfacemessage{textblocks}{4}{second pass needed}
+\setinterfacemessage{textblocks}{7}{-- hidden}
+\setinterfacemessage{textblocks}{6}{-- hidden and processed}
+\setinterfacemessage{textblocks}{9}{-- not typeset}
+\setinterfacemessage{textblocks}{8}{-- typeset}
+\setinterfacemessage{textblocks}{title}{textblocks}
+\setinterfacemessage{textblocks}{12}{-- skipped}
+\setinterfacemessage{textblocks}{11}{-- loaded and typeset}
+\setinterfacemessage{textblocks}{10}{-- loaded and processed}
\setinterfacemessage{encodings}{1}{coding --}
\setinterfacemessage{encodings}{3}{unknown coding --}
\setinterfacemessage{encodings}{2}{coding -- is loaded}
@@ -107,21 +123,10 @@
\setinterfacemessage{columns}{12}{float moved to next column / --}
\setinterfacemessage{columns}{11}{float too wide for column}
\setinterfacemessage{columns}{10}{(less than) 1 line left}
-\setinterfacemessage{textblocks}{1}{new version, second pass needed}
-\setinterfacemessage{textblocks}{3}{reading blocks from --}
-\setinterfacemessage{textblocks}{2}{writing blocks to --}
-\setinterfacemessage{textblocks}{5}{-- not hidden}
-\setinterfacemessage{textblocks}{4}{second pass needed}
-\setinterfacemessage{textblocks}{7}{-- hidden}
-\setinterfacemessage{textblocks}{6}{-- hidden and processed}
-\setinterfacemessage{textblocks}{9}{-- not typeset}
-\setinterfacemessage{textblocks}{8}{-- typeset}
-\setinterfacemessage{textblocks}{title}{textblocks}
-\setinterfacemessage{textblocks}{12}{-- skipped}
-\setinterfacemessage{textblocks}{11}{-- loaded and typeset}
-\setinterfacemessage{textblocks}{10}{-- loaded and processed}
\setinterfacemessage{symbols}{1}{loading symbolset --}
\setinterfacemessage{symbols}{title}{symbols}
+\setinterfacemessage{files}{1}{file synonym -- is already used for --}
+\setinterfacemessage{files}{title}{files}
\setinterfacemessage{versions}{1}{missing @+}
\setinterfacemessage{versions}{3}{selected pages: --}
\setinterfacemessage{versions}{2}{marking pages}
@@ -134,9 +139,18 @@
\setinterfacemessage{specials}{7}{unknown driver --}
\setinterfacemessage{specials}{6}{nesting is not permitted}
\setinterfacemessage{specials}{title}{specials}
-\setinterfacemessage{javascript}{1}{loading script set --}
-\setinterfacemessage{javascript}{title}{javascript}
-\setinterfacemessage{javascript}{2}{unknown preamble --}
+\setinterfacemessage{layouts}{1}{textheight adapted with -- at page --}
+\setinterfacemessage{layouts}{3}{-- times text postponed}
+\setinterfacemessage{layouts}{2}{-- times postponed text placed}
+\setinterfacemessage{layouts}{5}{marginblocks inactive}
+\setinterfacemessage{layouts}{4}{marginblocks active}
+\setinterfacemessage{layouts}{7}{calculating logospace}
+\setinterfacemessage{layouts}{6}{subpage set -- processed (size --)}
+\setinterfacemessage{layouts}{9}{currently no more than -- levels in itemizations}
+\setinterfacemessage{layouts}{8}{calculating backgrounds}
+\setinterfacemessage{layouts}{title}{layout}
+\setinterfacemessage{layouts}{11}{spacing -- not permitted in gridmode}
+\setinterfacemessage{layouts}{10}{-- and -- don't add up to 1.0}
\setinterfacemessage{fonts}{1}{coding --}
\setinterfacemessage{fonts}{3}{unknown variant --}
\setinterfacemessage{fonts}{2}{variant -- is loaded}
@@ -153,39 +167,22 @@
\setinterfacemessage{databases}{2}{local file --}
\setinterfacemessage{databases}{4}{unknown file --}
\setinterfacemessage{databases}{title}{databases}
-\setinterfacemessage{colors}{1}{system -- is global activated}
-\setinterfacemessage{colors}{3}{-- is not defined --}
-\setinterfacemessage{colors}{2}{system -- is local activated}
-\setinterfacemessage{colors}{5}{unknown system --}
-\setinterfacemessage{colors}{4}{system -- is loaded}
-\setinterfacemessage{colors}{7}{palette -- is not available}
-\setinterfacemessage{colors}{6}{palette -- is available}
-\setinterfacemessage{colors}{9}{-- color space is not supported}
-\setinterfacemessage{colors}{8}{specification -- at color -- becomes black}
-\setinterfacemessage{colors}{title}{color}
-\setinterfacemessage{colors}{12}{-- is registered}
-\setinterfacemessage{colors}{11}{color is converted to gray}
-\setinterfacemessage{colors}{10}{-- color space is supported}
-\setinterfacemessage{layouts}{1}{textheight adapted with -- at page --}
-\setinterfacemessage{layouts}{3}{-- times text postponed}
-\setinterfacemessage{layouts}{2}{-- times postponed text placed}
-\setinterfacemessage{layouts}{5}{marginblocks inactive}
-\setinterfacemessage{layouts}{4}{marginblocks active}
-\setinterfacemessage{layouts}{7}{calculating logospace}
-\setinterfacemessage{layouts}{6}{subpage set -- processed (size --)}
-\setinterfacemessage{layouts}{9}{currently no more than -- levels in itemizations}
-\setinterfacemessage{layouts}{8}{calculating backgrounds}
-\setinterfacemessage{layouts}{title}{layout}
-\setinterfacemessage{layouts}{11}{spacing -- not permitted in gridmode}
-\setinterfacemessage{layouts}{10}{-- and -- don't add up to 1.0}
+\setinterfacemessage{publications}{1}{file -- not found, unknown style ignored}
+\setinterfacemessage{publications}{3}{wrote a new auxiliary file \jobname.aux}
+\setinterfacemessage{publications}{title}{publications}
+\setinterfacemessage{publications}{2}{file -- not found, waiting for bibtex}
+\setinterfacemessage{publications}{4}{loading database from --}
+\setinterfacemessage{publications}{5}{warning: cite argument -- on line \the\inputlineno}
+\setinterfacemessage{publications}{6}{loading formatting style from --}
+\setinterfacemessage{javascript}{1}{loading script set --}
+\setinterfacemessage{javascript}{title}{javascript}
+\setinterfacemessage{javascript}{2}{unknown preamble --}
\setinterfacemessage{check}{1}{missing or ungrouped '=' after '--' in line --}
\setinterfacemessage{check}{3}{-- -- replaces a macro, use CAPITALS!}
\setinterfacemessage{check}{2}{-- argument(s) expected in line --}
\setinterfacemessage{check}{title}{check}
\setinterfacemessage{metapost}{1}{loading metapost library --}
\setinterfacemessage{metapost}{title}{metapost}
-\setinterfacemessage{files}{1}{file synonym -- is already used for --}
-\setinterfacemessage{files}{title}{files}
\setinterfacemessage{figures}{1}{figure -- can not be found}
\setinterfacemessage{figures}{3}{dimensions of -- are determined externally}
\setinterfacemessage{figures}{2}{figure -- is not preset}
@@ -194,5 +191,18 @@
\setinterfacemessage{figures}{6}{dimensions of -- calculated by rlxtools}
\setinterfacemessage{figures}{8}{figureobject -- is reused}
\setinterfacemessage{figures}{title}{figures}
+\setinterfacemessage{colors}{1}{system -- is global activated}
+\setinterfacemessage{colors}{3}{-- is not defined --}
+\setinterfacemessage{colors}{2}{system -- is local activated}
+\setinterfacemessage{colors}{5}{unknown system --}
+\setinterfacemessage{colors}{4}{system -- is loaded}
+\setinterfacemessage{colors}{7}{palette -- is not available}
+\setinterfacemessage{colors}{6}{palette -- is available}
+\setinterfacemessage{colors}{9}{-- color space is not supported}
+\setinterfacemessage{colors}{8}{specification -- at color -- becomes black}
+\setinterfacemessage{colors}{title}{color}
+\setinterfacemessage{colors}{12}{-- is registered}
+\setinterfacemessage{colors}{11}{color is converted to gray}
+\setinterfacemessage{colors}{10}{-- color space is supported}
%
\endinput \ No newline at end of file
diff --git a/Master/texmf-dist/tex/context/base/mult-mes.lua b/Master/texmf-dist/tex/context/base/mult-mes.lua
index 6d177fd8fbb..5c812971136 100644
--- a/Master/texmf-dist/tex/context/base/mult-mes.lua
+++ b/Master/texmf-dist/tex/context/base/mult-mes.lua
@@ -1,4 +1,36 @@
+if not modules then modules = { } end modules ['mult-mes'] = {
+ version = 1.001,
+ comment = "companion to mult-ini.mkiv",
+ author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
+ copyright = "PRAGMA ADE / ConTeXt Development Team",
+ license = "see context related readme files"
+}
+
return {
+ ["publications"]={
+ ["files"]={ "bibl-tra.mkiv" },
+ ["title"]={
+ ["en"]="publications",
+ },
+ ["1"]={
+ ["en"]="file -- not found, unknown style ignored",
+ },
+ ["2"]={
+ ["en"]="file -- not found, waiting for bibtex",
+ },
+ ["3"]={
+ ["en"]="wrote a new auxiliary file \\jobname.aux",
+ },
+ ["4"]={
+ ["en"]="loading database from --",
+ },
+ ["5"]={
+ ["en"]="warning: cite argument -- on line \\the\\inputlineno",
+ },
+ ["6"]={
+ ["en"]="loading formatting style from --",
+ },
+ },
["check"]={
["1"]={
["cs"]="postradam '=' po '--' na radku --",
@@ -1282,6 +1314,15 @@ return {
["no"]="obskur referanse -- (Prefix=--)",
["ro"]="referinta obscura -- (prefix=--)",
},
+ ["24"]={
+ ["en"]="references from document '--' are not exported",
+ },
+ ["25"]={
+ ["en"]="references from document '--' are not imported (export again)",
+ },
+ ["26"]={
+ ["en"]="references from document '--' are imported",
+ },
["3"]={
["cs"]="neznamy typ reference --",
["de"]="unbekannte Referenz Typ --",
@@ -2002,4 +2043,4 @@ return {
["ro"]="versiuni",
},
},
-} \ No newline at end of file
+}
diff --git a/Master/texmf-dist/tex/context/base/mult-mfr.tex b/Master/texmf-dist/tex/context/base/mult-mfr.tex
index ecfd88ecc25..78e4f9f17ef 100644
--- a/Master/texmf-dist/tex/context/base/mult-mfr.tex
+++ b/Master/texmf-dist/tex/context/base/mult-mfr.tex
@@ -2,8 +2,11 @@
\setinterfacemessage{references}{3}{type -- de réference inconnu}
\setinterfacemessage{references}{2}{réference -- dupliquée à la page --}
\setinterfacemessage{references}{4}{réference -- inconnue}
-\setinterfacemessage{references}{title}{réferences}
\setinterfacemessage{references}{30}{objet -- inconnu}
+\setinterfacemessage{references}{25}{references from document '--' are not imported (export again)}
+\setinterfacemessage{references}{24}{references from document '--' are not exported}
+\setinterfacemessage{references}{title}{réferences}
+\setinterfacemessage{references}{26}{references from document '--' are imported}
\setinterfacemessage{references}{31}{objet -- dupliqué}
\setinterfacemessage{references}{21}{document -- chargé}
\setinterfacemessage{references}{22}{le document -- n'est pas interactif}
@@ -66,6 +69,10 @@
\setinterfacemessage{interactions}{6}{le fichier joint -- n'existe pas}
\setinterfacemessage{interactions}{title}{interaction}
\setinterfacemessage{interactions}{21}{-- code inseré}
+\setinterfacemessage{regimes}{1}{encodage --}
+\setinterfacemessage{regimes}{3}{encodage -- inconnu}
+\setinterfacemessage{regimes}{2}{l'encodage -- est chargé}
+\setinterfacemessage{regimes}{title}{encodage}
\setinterfacemessage{structures}{1}{début de blocsection --}
\setinterfacemessage{structures}{title}{structure}
\setinterfacemessage{structures}{2}{fin de blocsection --}
@@ -80,15 +87,24 @@
\setinterfacemessage{linguals}{8}{les options spécifiques de langue [--] sont ajoutés en douceur}
\setinterfacemessage{linguals}{title}{langue}
\setinterfacemessage{linguals}{10}{motifs -- chargés}
-\setinterfacemessage{regimes}{1}{encodage --}
-\setinterfacemessage{regimes}{3}{encodage -- inconnu}
-\setinterfacemessage{regimes}{2}{l'encodage -- est chargé}
-\setinterfacemessage{regimes}{title}{encodage}
+\setinterfacemessage{verbatims}{1}{le fichier -- n'existe pas}
+\setinterfacemessage{verbatims}{title}{verbatim}
\setinterfacemessage{filters}{1}{le filtre -- est chargé}
\setinterfacemessage{filters}{title}{filtre}
\setinterfacemessage{filters}{2}{filtre -- inconnu}
-\setinterfacemessage{verbatims}{1}{le fichier -- n'existe pas}
-\setinterfacemessage{verbatims}{title}{verbatim}
+\setinterfacemessage{textblocks}{1}{nouvelle version, une seconde passe est nécessaire}
+\setinterfacemessage{textblocks}{3}{lecture des blocs en provenance de --}
+\setinterfacemessage{textblocks}{2}{ecriture des blocs vers --}
+\setinterfacemessage{textblocks}{5}{-- non caché}
+\setinterfacemessage{textblocks}{4}{seconde passe nécessaire}
+\setinterfacemessage{textblocks}{7}{-- caché}
+\setinterfacemessage{textblocks}{6}{-- caché et traité}
+\setinterfacemessage{textblocks}{9}{-- non composé}
+\setinterfacemessage{textblocks}{8}{-- composé}
+\setinterfacemessage{textblocks}{title}{blocs de texte}
+\setinterfacemessage{textblocks}{12}{-- sauté}
+\setinterfacemessage{textblocks}{11}{-- chargé et composé}
+\setinterfacemessage{textblocks}{10}{-- chargé et traité}
\setinterfacemessage{encodings}{1}{encodage --}
\setinterfacemessage{encodings}{3}{encodage -- inconnu}
\setinterfacemessage{encodings}{2}{l'encodage -- est chargé}
@@ -107,21 +123,10 @@
\setinterfacemessage{columns}{12}{flottant déplacé à la colonne suivante / --}
\setinterfacemessage{columns}{11}{flottant mis à la largeur de la colonne}
\setinterfacemessage{columns}{10}{(moins de) 1 ligne restante}
-\setinterfacemessage{textblocks}{1}{nouvelle version, une seconde passe est nécessaire}
-\setinterfacemessage{textblocks}{3}{lecture des blocs en provenance de --}
-\setinterfacemessage{textblocks}{2}{ecriture des blocs vers --}
-\setinterfacemessage{textblocks}{5}{-- non caché}
-\setinterfacemessage{textblocks}{4}{seconde passe nécessaire}
-\setinterfacemessage{textblocks}{7}{-- caché}
-\setinterfacemessage{textblocks}{6}{-- caché et traité}
-\setinterfacemessage{textblocks}{9}{-- non composé}
-\setinterfacemessage{textblocks}{8}{-- composé}
-\setinterfacemessage{textblocks}{title}{blocs de texte}
-\setinterfacemessage{textblocks}{12}{-- sauté}
-\setinterfacemessage{textblocks}{11}{-- chargé et composé}
-\setinterfacemessage{textblocks}{10}{-- chargé et traité}
\setinterfacemessage{symbols}{1}{chargement du jeu de symbole --}
\setinterfacemessage{symbols}{title}{symboles}
+\setinterfacemessage{files}{1}{le synonyme de fichier -- est déjà utilisé pour --}
+\setinterfacemessage{files}{title}{fichiers}
\setinterfacemessage{versions}{1}{@+ manquant}
\setinterfacemessage{versions}{3}{pages sélectionnées : --}
\setinterfacemessage{versions}{2}{marquage des pages}
@@ -134,9 +139,18 @@
\setinterfacemessage{specials}{7}{pilote -- inconnu}
\setinterfacemessage{specials}{6}{l'imbrication n'est pas permise}
\setinterfacemessage{specials}{title}{specials}
-\setinterfacemessage{javascript}{1}{chargement du jeu de script --}
-\setinterfacemessage{javascript}{title}{javascript}
-\setinterfacemessage{javascript}{2}{préambule -- inconnu}
+\setinterfacemessage{layouts}{1}{hauteurtexte adaptée avec -- à la page --}
+\setinterfacemessage{layouts}{3}{-- times text postponed}
+\setinterfacemessage{layouts}{2}{-- times postponed text placed}
+\setinterfacemessage{layouts}{5}{blocsmarge inactifs}
+\setinterfacemessage{layouts}{4}{blocsmarge actifs}
+\setinterfacemessage{layouts}{7}{calcul de l'espace pour le logo}
+\setinterfacemessage{layouts}{6}{jeu de souspage -- traité (taille --)}
+\setinterfacemessage{layouts}{9}{pas plus de -- niveaux pour l'instant dans les élémentarisations}
+\setinterfacemessage{layouts}{8}{calcul des arrières-plans}
+\setinterfacemessage{layouts}{title}{calque}
+\setinterfacemessage{layouts}{11}{espacement -- non permis en modegrille}
+\setinterfacemessage{layouts}{10}{-- et -- ne sont pas ajoutés à 1.0}
\setinterfacemessage{fonts}{1}{encodage --}
\setinterfacemessage{fonts}{3}{variante -- inconnue}
\setinterfacemessage{fonts}{2}{la variante -- est chargée}
@@ -153,39 +167,22 @@
\setinterfacemessage{databases}{2}{fichier local --}
\setinterfacemessage{databases}{4}{fichier inconnu --}
\setinterfacemessage{databases}{title}{bases de données}
-\setinterfacemessage{colors}{1}{le système -- est globalement activé}
-\setinterfacemessage{colors}{3}{-- n'est pas défini --}
-\setinterfacemessage{colors}{2}{le système -- est localement activé}
-\setinterfacemessage{colors}{5}{système -- inconnu}
-\setinterfacemessage{colors}{4}{le système -- est chargé}
-\setinterfacemessage{colors}{7}{le palette -- n'est pas disponible}
-\setinterfacemessage{colors}{6}{la palette -- est disponible}
-\setinterfacemessage{colors}{9}{l'espace de couleur -- n'est pas supporté}
-\setinterfacemessage{colors}{8}{la spécification -- de la couleur -- devient noire}
-\setinterfacemessage{colors}{title}{couleurs}
-\setinterfacemessage{colors}{12}{-- est enregistré}
-\setinterfacemessage{colors}{11}{la couleur est convertie en niveau de gris}
-\setinterfacemessage{colors}{10}{-- l'espace de couleur est supporté}
-\setinterfacemessage{layouts}{1}{hauteurtexte adaptée avec -- à la page --}
-\setinterfacemessage{layouts}{3}{-- times text postponed}
-\setinterfacemessage{layouts}{2}{-- times postponed text placed}
-\setinterfacemessage{layouts}{5}{blocsmarge inactifs}
-\setinterfacemessage{layouts}{4}{blocsmarge actifs}
-\setinterfacemessage{layouts}{7}{calcul de l'espace pour le logo}
-\setinterfacemessage{layouts}{6}{jeu de souspage -- traité (taille --)}
-\setinterfacemessage{layouts}{9}{pas plus de -- niveaux pour l'instant dans les élémentarisations}
-\setinterfacemessage{layouts}{8}{calcul des arrières-plans}
-\setinterfacemessage{layouts}{title}{calque}
-\setinterfacemessage{layouts}{11}{espacement -- non permis en modegrille}
-\setinterfacemessage{layouts}{10}{-- et -- ne sont pas ajoutés à 1.0}
+\setinterfacemessage{publications}{1}{file -- not found, unknown style ignored}
+\setinterfacemessage{publications}{3}{wrote a new auxiliary file \jobname.aux}
+\setinterfacemessage{publications}{title}{publications}
+\setinterfacemessage{publications}{2}{file -- not found, waiting for bibtex}
+\setinterfacemessage{publications}{4}{loading database from --}
+\setinterfacemessage{publications}{5}{warning: cite argument -- on line \the\inputlineno}
+\setinterfacemessage{publications}{6}{loading formatting style from --}
+\setinterfacemessage{javascript}{1}{chargement du jeu de script --}
+\setinterfacemessage{javascript}{title}{javascript}
+\setinterfacemessage{javascript}{2}{préambule -- inconnu}
\setinterfacemessage{check}{1}{manquant ou dégroupé '=' après '--' à la ligne --}
\setinterfacemessage{check}{3}{-- -- remplace une macro, utilisez des MAJUSCULES !}
\setinterfacemessage{check}{2}{-- argument(s) attendu(s) à la ligne --}
\setinterfacemessage{check}{title}{vérification}
\setinterfacemessage{metapost}{1}{chargement de la bibliothèque metapost --}
\setinterfacemessage{metapost}{title}{metapost}
-\setinterfacemessage{files}{1}{le synonyme de fichier -- est déjà utilisé pour --}
-\setinterfacemessage{files}{title}{fichiers}
\setinterfacemessage{figures}{1}{la figure -- ne peut être trouvée}
\setinterfacemessage{figures}{3}{dimensions of -- are determined externally}
\setinterfacemessage{figures}{2}{la figure -- n'est pas pré-sélectionnée}
@@ -194,5 +191,18 @@
\setinterfacemessage{figures}{6}{les dimensions de -- calculées par rlxtools}
\setinterfacemessage{figures}{8}{figureobject -- est réutilisé}
\setinterfacemessage{figures}{title}{figures}
+\setinterfacemessage{colors}{1}{le système -- est globalement activé}
+\setinterfacemessage{colors}{3}{-- n'est pas défini --}
+\setinterfacemessage{colors}{2}{le système -- est localement activé}
+\setinterfacemessage{colors}{5}{système -- inconnu}
+\setinterfacemessage{colors}{4}{le système -- est chargé}
+\setinterfacemessage{colors}{7}{le palette -- n'est pas disponible}
+\setinterfacemessage{colors}{6}{la palette -- est disponible}
+\setinterfacemessage{colors}{9}{l'espace de couleur -- n'est pas supporté}
+\setinterfacemessage{colors}{8}{la spécification -- de la couleur -- devient noire}
+\setinterfacemessage{colors}{title}{couleurs}
+\setinterfacemessage{colors}{12}{-- est enregistré}
+\setinterfacemessage{colors}{11}{la couleur est convertie en niveau de gris}
+\setinterfacemessage{colors}{10}{-- l'espace de couleur est supporté}
%
\endinput \ No newline at end of file
diff --git a/Master/texmf-dist/tex/context/base/mult-mit.tex b/Master/texmf-dist/tex/context/base/mult-mit.tex
index 0efb03e90df..6d2a8f51608 100644
--- a/Master/texmf-dist/tex/context/base/mult-mit.tex
+++ b/Master/texmf-dist/tex/context/base/mult-mit.tex
@@ -2,8 +2,11 @@
\setinterfacemessage{references}{3}{riferimento di tipo sconosciuto --}
\setinterfacemessage{references}{2}{riferimento duplicato -- a pagina --}
\setinterfacemessage{references}{4}{riferimento illecito --}
-\setinterfacemessage{references}{title}{riferimenti}
\setinterfacemessage{references}{30}{oggetto sconosciuto --}
+\setinterfacemessage{references}{25}{references from document '--' are not imported (export again)}
+\setinterfacemessage{references}{24}{references from document '--' are not exported}
+\setinterfacemessage{references}{title}{riferimenti}
+\setinterfacemessage{references}{26}{references from document '--' are imported}
\setinterfacemessage{references}{31}{oggetto duplicato --}
\setinterfacemessage{references}{21}{documento -- caricato}
\setinterfacemessage{references}{22}{il documento -- non ø interattivo}
@@ -66,6 +69,10 @@
\setinterfacemessage{interactions}{6}{attachment file -- does not exist}
\setinterfacemessage{interactions}{title}{interazione}
\setinterfacemessage{interactions}{21}{codice -- inserito}
+\setinterfacemessage{regimes}{1}{codifica --}
+\setinterfacemessage{regimes}{3}{codifica sconosciuta --}
+\setinterfacemessage{regimes}{2}{codifica -- caricata}
+\setinterfacemessage{regimes}{title}{codifica}
\setinterfacemessage{structures}{1}{inizio del blocco (sezione) --}
\setinterfacemessage{structures}{title}{struttura}
\setinterfacemessage{structures}{2}{fine del blocco (sezione) --}
@@ -80,15 +87,24 @@
\setinterfacemessage{linguals}{8}{opzioni specifiche per la lingua [--] aggiunte trasparentemente}
\setinterfacemessage{linguals}{title}{lingua}
\setinterfacemessage{linguals}{10}{schemi -- caricati}
-\setinterfacemessage{regimes}{1}{codifica --}
-\setinterfacemessage{regimes}{3}{codifica sconosciuta --}
-\setinterfacemessage{regimes}{2}{codifica -- caricata}
-\setinterfacemessage{regimes}{title}{codifica}
+\setinterfacemessage{verbatims}{1}{il file -- non esiste}
+\setinterfacemessage{verbatims}{title}{verbatim}
\setinterfacemessage{filters}{1}{filtro -- caricato}
\setinterfacemessage{filters}{title}{filtri}
\setinterfacemessage{filters}{2}{filtro sconosciuto --}
-\setinterfacemessage{verbatims}{1}{il file -- non esiste}
-\setinterfacemessage{verbatims}{title}{verbatim}
+\setinterfacemessage{textblocks}{1}{nuova versione, seconda passata necessaria}
+\setinterfacemessage{textblocks}{3}{lettura dei blocchi da --}
+\setinterfacemessage{textblocks}{2}{scrittura dei blocchi su --}
+\setinterfacemessage{textblocks}{5}{-- non nascosto}
+\setinterfacemessage{textblocks}{4}{seconda passata necessaria}
+\setinterfacemessage{textblocks}{7}{-- nascosto}
+\setinterfacemessage{textblocks}{6}{-- nascosto ed elaborato}
+\setinterfacemessage{textblocks}{9}{-- non composto}
+\setinterfacemessage{textblocks}{8}{-- composto}
+\setinterfacemessage{textblocks}{title}{blocchi di testo}
+\setinterfacemessage{textblocks}{12}{-- saltato}
+\setinterfacemessage{textblocks}{11}{-- caricato e composto}
+\setinterfacemessage{textblocks}{10}{-- caricato ed elaborato}
\setinterfacemessage{encodings}{1}{codifica --}
\setinterfacemessage{encodings}{3}{codifica sconosciuta --}
\setinterfacemessage{encodings}{2}{codifica -- caricata}
@@ -107,21 +123,10 @@
\setinterfacemessage{columns}{12}{oggetto mobile spostata alla colonna successiva / --}
\setinterfacemessage{columns}{11}{oggetto mobile troppo ampio per la colonna}
\setinterfacemessage{columns}{10}{(meno di) una riga rimasta}
-\setinterfacemessage{textblocks}{1}{nuova versione, seconda passata necessaria}
-\setinterfacemessage{textblocks}{3}{lettura dei blocchi da --}
-\setinterfacemessage{textblocks}{2}{scrittura dei blocchi su --}
-\setinterfacemessage{textblocks}{5}{-- non nascosto}
-\setinterfacemessage{textblocks}{4}{seconda passata necessaria}
-\setinterfacemessage{textblocks}{7}{-- nascosto}
-\setinterfacemessage{textblocks}{6}{-- nascosto ed elaborato}
-\setinterfacemessage{textblocks}{9}{-- non composto}
-\setinterfacemessage{textblocks}{8}{-- composto}
-\setinterfacemessage{textblocks}{title}{blocchi di testo}
-\setinterfacemessage{textblocks}{12}{-- saltato}
-\setinterfacemessage{textblocks}{11}{-- caricato e composto}
-\setinterfacemessage{textblocks}{10}{-- caricato ed elaborato}
\setinterfacemessage{symbols}{1}{caricamento gruppo di simboli --}
\setinterfacemessage{symbols}{title}{simboli}
+\setinterfacemessage{files}{1}{sinonimo file -- già in uso per --}
+\setinterfacemessage{files}{title}{file}
\setinterfacemessage{versions}{1}{@+ mancante}
\setinterfacemessage{versions}{3}{pagine selezionate: --}
\setinterfacemessage{versions}{2}{marcatura pagine}
@@ -134,9 +139,18 @@
\setinterfacemessage{specials}{7}{driver sconosciuto --}
\setinterfacemessage{specials}{6}{annidamento non permesso}
\setinterfacemessage{specials}{title}{specialitø}
-\setinterfacemessage{javascript}{1}{caricamento dello script set --}
-\setinterfacemessage{javascript}{title}{javascript}
-\setinterfacemessage{javascript}{2}{preambolo sconosciuto --}
+\setinterfacemessage{layouts}{1}{altezza del testo adattata con -- a pagina --}
+\setinterfacemessage{layouts}{3}{testo posticipato -- volte}
+\setinterfacemessage{layouts}{2}{posizionato testo posticipato -- volte}
+\setinterfacemessage{layouts}{5}{blocchi in margine inattivi}
+\setinterfacemessage{layouts}{4}{blocchi in margine attivi}
+\setinterfacemessage{layouts}{7}{calcolo dello spazio per logo}
+\setinterfacemessage{layouts}{6}{gruppo di sottopagine -- elaborato (dimensione --)}
+\setinterfacemessage{layouts}{9}{attualmente non più di -- livelli di elencazione}
+\setinterfacemessage{layouts}{8}{calcolo dello sfondo}
+\setinterfacemessage{layouts}{title}{layout}
+\setinterfacemessage{layouts}{11}{spaziatura -- non permessa in modo griglia}
+\setinterfacemessage{layouts}{10}{-- e -- non sommano a 1.0}
\setinterfacemessage{fonts}{1}{codifica --}
\setinterfacemessage{fonts}{3}{variante sconosciuta --}
\setinterfacemessage{fonts}{2}{variante -- caricata}
@@ -153,39 +167,22 @@
\setinterfacemessage{databases}{2}{file locale --}
\setinterfacemessage{databases}{4}{file sconosciuto --}
\setinterfacemessage{databases}{title}{database}
-\setinterfacemessage{colors}{1}{sistema -- attivato globalmente}
-\setinterfacemessage{colors}{3}{-- non definito --}
-\setinterfacemessage{colors}{2}{sistema -- attivato localmente}
-\setinterfacemessage{colors}{5}{sistema -- sconosciuto}
-\setinterfacemessage{colors}{4}{sistema -- caricato}
-\setinterfacemessage{colors}{7}{tavolozza -- non disponibile}
-\setinterfacemessage{colors}{6}{tavolozza -- resa disponibile}
-\setinterfacemessage{colors}{9}{spazio dei colori -- non supportato}
-\setinterfacemessage{colors}{8}{specifica -- del colore -- convertita in nero}
-\setinterfacemessage{colors}{title}{colore}
-\setinterfacemessage{colors}{12}{-- is registered}
-\setinterfacemessage{colors}{11}{il colore ø convertito in grigio}
-\setinterfacemessage{colors}{10}{spazio dei colori -- supportato}
-\setinterfacemessage{layouts}{1}{altezza del testo adattata con -- a pagina --}
-\setinterfacemessage{layouts}{3}{testo posticipato -- volte}
-\setinterfacemessage{layouts}{2}{posizionato testo posticipato -- volte}
-\setinterfacemessage{layouts}{5}{blocchi in margine inattivi}
-\setinterfacemessage{layouts}{4}{blocchi in margine attivi}
-\setinterfacemessage{layouts}{7}{calcolo dello spazio per logo}
-\setinterfacemessage{layouts}{6}{gruppo di sottopagine -- elaborato (dimensione --)}
-\setinterfacemessage{layouts}{9}{attualmente non più di -- livelli di elencazione}
-\setinterfacemessage{layouts}{8}{calcolo dello sfondo}
-\setinterfacemessage{layouts}{title}{layout}
-\setinterfacemessage{layouts}{11}{spaziatura -- non permessa in modo griglia}
-\setinterfacemessage{layouts}{10}{-- e -- non sommano a 1.0}
+\setinterfacemessage{publications}{1}{file -- not found, unknown style ignored}
+\setinterfacemessage{publications}{3}{wrote a new auxiliary file \jobname.aux}
+\setinterfacemessage{publications}{title}{publications}
+\setinterfacemessage{publications}{2}{file -- not found, waiting for bibtex}
+\setinterfacemessage{publications}{4}{loading database from --}
+\setinterfacemessage{publications}{5}{warning: cite argument -- on line \the\inputlineno}
+\setinterfacemessage{publications}{6}{loading formatting style from --}
+\setinterfacemessage{javascript}{1}{caricamento dello script set --}
+\setinterfacemessage{javascript}{title}{javascript}
+\setinterfacemessage{javascript}{2}{preambolo sconosciuto --}
\setinterfacemessage{check}{1}{'=' mancante o non raggruppato dopo '--' alla riga --}
\setinterfacemessage{check}{3}{-- -- sostituisce una macro, usare le MAIUSCOLE!}
\setinterfacemessage{check}{2}{-- argomento/i attesi alla riga --}
\setinterfacemessage{check}{title}{controllo}
\setinterfacemessage{metapost}{1}{caricamento della libreria metapost --}
\setinterfacemessage{metapost}{title}{metapost}
-\setinterfacemessage{files}{1}{sinonimo file -- già in uso per --}
-\setinterfacemessage{files}{title}{file}
\setinterfacemessage{figures}{1}{figura -- non trovata}
\setinterfacemessage{figures}{3}{dimensions of -- are determined externally}
\setinterfacemessage{figures}{2}{la figura -- non è preimpostata}
@@ -194,5 +191,18 @@
\setinterfacemessage{figures}{6}{dimensioni di -- calcolate da rlxtools}
\setinterfacemessage{figures}{8}{oggetto-figura -- riutilizzato}
\setinterfacemessage{figures}{title}{figure}
+\setinterfacemessage{colors}{1}{sistema -- attivato globalmente}
+\setinterfacemessage{colors}{3}{-- non definito --}
+\setinterfacemessage{colors}{2}{sistema -- attivato localmente}
+\setinterfacemessage{colors}{5}{sistema -- sconosciuto}
+\setinterfacemessage{colors}{4}{sistema -- caricato}
+\setinterfacemessage{colors}{7}{tavolozza -- non disponibile}
+\setinterfacemessage{colors}{6}{tavolozza -- resa disponibile}
+\setinterfacemessage{colors}{9}{spazio dei colori -- non supportato}
+\setinterfacemessage{colors}{8}{specifica -- del colore -- convertita in nero}
+\setinterfacemessage{colors}{title}{colore}
+\setinterfacemessage{colors}{12}{-- is registered}
+\setinterfacemessage{colors}{11}{il colore ø convertito in grigio}
+\setinterfacemessage{colors}{10}{spazio dei colori -- supportato}
%
\endinput \ No newline at end of file
diff --git a/Master/texmf-dist/tex/context/base/mult-mnl.tex b/Master/texmf-dist/tex/context/base/mult-mnl.tex
index 5c52f7affa1..b8204a40b0c 100644
--- a/Master/texmf-dist/tex/context/base/mult-mnl.tex
+++ b/Master/texmf-dist/tex/context/base/mult-mnl.tex
@@ -2,8 +2,11 @@
\setinterfacemessage{references}{3}{type verwijzing -- onbekend}
\setinterfacemessage{references}{2}{dubbele verwijzing -- op pagina --}
\setinterfacemessage{references}{4}{verboden verwijzing --}
-\setinterfacemessage{references}{title}{verwijzingen}
\setinterfacemessage{references}{30}{onbekend object --}
+\setinterfacemessage{references}{25}{references from document '--' are not imported (export again)}
+\setinterfacemessage{references}{24}{references from document '--' are not exported}
+\setinterfacemessage{references}{title}{verwijzingen}
+\setinterfacemessage{references}{26}{references from document '--' are imported}
\setinterfacemessage{references}{31}{dubbel object --}
\setinterfacemessage{references}{21}{document -- geladen}
\setinterfacemessage{references}{22}{document -- is niet interactief}
@@ -66,6 +69,10 @@
\setinterfacemessage{interactions}{6}{attachment file -- bestaat niet}
\setinterfacemessage{interactions}{title}{interactie}
\setinterfacemessage{interactions}{21}{-- code tussengevoegd}
+\setinterfacemessage{regimes}{1}{regime --}
+\setinterfacemessage{regimes}{3}{onbekend regime --}
+\setinterfacemessage{regimes}{2}{regime -- wordt geladen}
+\setinterfacemessage{regimes}{title}{regime}
\setinterfacemessage{structures}{1}{begin van sectieblok --}
\setinterfacemessage{structures}{title}{structuur}
\setinterfacemessage{structures}{2}{eind van sectieblok --}
@@ -80,15 +87,24 @@
\setinterfacemessage{linguals}{8}{taal specifieke opties [--] naadloos toegevoegd}
\setinterfacemessage{linguals}{title}{taal}
\setinterfacemessage{linguals}{10}{patronen --geladen}
-\setinterfacemessage{regimes}{1}{regime --}
-\setinterfacemessage{regimes}{3}{onbekend regime --}
-\setinterfacemessage{regimes}{2}{regime -- wordt geladen}
-\setinterfacemessage{regimes}{title}{regime}
+\setinterfacemessage{verbatims}{1}{file -- bestaat niet}
+\setinterfacemessage{verbatims}{title}{typen}
\setinterfacemessage{filters}{1}{filter -- wordt geladen}
\setinterfacemessage{filters}{title}{filter}
\setinterfacemessage{filters}{2}{onbekend filter --}
-\setinterfacemessage{verbatims}{1}{file -- bestaat niet}
-\setinterfacemessage{verbatims}{title}{typen}
+\setinterfacemessage{textblocks}{1}{nieuwe versie, tweede run nodig}
+\setinterfacemessage{textblocks}{3}{inlezen blokken uit --}
+\setinterfacemessage{textblocks}{2}{wegschrijven blokken naar --}
+\setinterfacemessage{textblocks}{5}{-- niet verborgen}
+\setinterfacemessage{textblocks}{4}{er is een tweede run nodig}
+\setinterfacemessage{textblocks}{7}{-- verborgen}
+\setinterfacemessage{textblocks}{6}{-- verborgen en verwerkt}
+\setinterfacemessage{textblocks}{9}{-- niet gehandhaafd}
+\setinterfacemessage{textblocks}{8}{-- gehandhaafd}
+\setinterfacemessage{textblocks}{title}{tekstblokken}
+\setinterfacemessage{textblocks}{12}{-- overgeslagen}
+\setinterfacemessage{textblocks}{11}{-- geladen en geplaatst}
+\setinterfacemessage{textblocks}{10}{-- geladen en verwerkt}
\setinterfacemessage{encodings}{1}{codering --}
\setinterfacemessage{encodings}{3}{onbekende codering --}
\setinterfacemessage{encodings}{2}{codering -- wordt geladen}
@@ -107,21 +123,10 @@
\setinterfacemessage{columns}{12}{plaatsblok verplaatst naar volgende kolom / --}
\setinterfacemessage{columns}{11}{plaatsblok te breed voor kolom}
\setinterfacemessage{columns}{10}{(minder dan) 1 regel over}
-\setinterfacemessage{textblocks}{1}{nieuwe versie, tweede run nodig}
-\setinterfacemessage{textblocks}{3}{inlezen blokken uit --}
-\setinterfacemessage{textblocks}{2}{wegschrijven blokken naar --}
-\setinterfacemessage{textblocks}{5}{-- niet verborgen}
-\setinterfacemessage{textblocks}{4}{er is een tweede run nodig}
-\setinterfacemessage{textblocks}{7}{-- verborgen}
-\setinterfacemessage{textblocks}{6}{-- verborgen en verwerkt}
-\setinterfacemessage{textblocks}{9}{-- niet gehandhaafd}
-\setinterfacemessage{textblocks}{8}{-- gehandhaafd}
-\setinterfacemessage{textblocks}{title}{tekstblokken}
-\setinterfacemessage{textblocks}{12}{-- overgeslagen}
-\setinterfacemessage{textblocks}{11}{-- geladen en geplaatst}
-\setinterfacemessage{textblocks}{10}{-- geladen en verwerkt}
\setinterfacemessage{symbols}{1}{symboolset -- wordt geladen}
\setinterfacemessage{symbols}{title}{symbolen}
+\setinterfacemessage{files}{1}{file synoniem -- is al in gebruik voor --}
+\setinterfacemessage{files}{title}{files}
\setinterfacemessage{versions}{1}{er mankeert een @+}
\setinterfacemessage{versions}{3}{geselecteerde pagina's: --}
\setinterfacemessage{versions}{2}{markeren pagina's}
@@ -134,9 +139,18 @@
\setinterfacemessage{specials}{7}{onbekende driver --}
\setinterfacemessage{specials}{6}{nesting is niet toegestaan}
\setinterfacemessage{specials}{title}{specials}
-\setinterfacemessage{javascript}{1}{script set -- wordt geladen}
-\setinterfacemessage{javascript}{title}{javascript}
-\setinterfacemessage{javascript}{2}{onbekende preamble --}
+\setinterfacemessage{layouts}{1}{teksthoogte aangepast met -- op pagina --}
+\setinterfacemessage{layouts}{3}{-- maal tekst plaatsen uitstellen}
+\setinterfacemessage{layouts}{2}{-- maal uitgestelde tekst tussengevoegd}
+\setinterfacemessage{layouts}{5}{margeblokken inactief}
+\setinterfacemessage{layouts}{4}{margeblokken actief}
+\setinterfacemessage{layouts}{7}{beeldmerken berekenen}
+\setinterfacemessage{layouts}{6}{subpagina reeks -- verwerkt (aantal --)}
+\setinterfacemessage{layouts}{9}{momenteel maximaal -- niveaus in opsommingen}
+\setinterfacemessage{layouts}{8}{achtergronden berekenen}
+\setinterfacemessage{layouts}{title}{layout}
+\setinterfacemessage{layouts}{11}{interlinie -- niet toegestaan in gridmode}
+\setinterfacemessage{layouts}{10}{-- en -- tellen niet op tot 1.0}
\setinterfacemessage{fonts}{1}{codering --}
\setinterfacemessage{fonts}{3}{onbekende variant --}
\setinterfacemessage{fonts}{2}{variant -- wordt geladen}
@@ -153,39 +167,22 @@
\setinterfacemessage{databases}{2}{lokaal bestand --}
\setinterfacemessage{databases}{4}{onbekend bestand --}
\setinterfacemessage{databases}{title}{database}
-\setinterfacemessage{colors}{1}{systeem -- is globaal actief}
-\setinterfacemessage{colors}{3}{-- is niet gedefinieerd --}
-\setinterfacemessage{colors}{2}{systeem -- is lokaal actief}
-\setinterfacemessage{colors}{5}{onbekend systeem --}
-\setinterfacemessage{colors}{4}{systeem -- wordt geladen}
-\setinterfacemessage{colors}{7}{palet -- is niet beschikbaar}
-\setinterfacemessage{colors}{6}{palet -- is beschikbaar}
-\setinterfacemessage{colors}{9}{-- kleurruimte wordt niet ondersteund}
-\setinterfacemessage{colors}{8}{specificatie -- bij -- wordt zwart}
-\setinterfacemessage{colors}{title}{kleur}
-\setinterfacemessage{colors}{12}{-- is geregistreerd}
-\setinterfacemessage{colors}{11}{kleur wordt vertaald in grijs}
-\setinterfacemessage{colors}{10}{-- kleurruimte wordt ondersteund}
-\setinterfacemessage{layouts}{1}{teksthoogte aangepast met -- op pagina --}
-\setinterfacemessage{layouts}{3}{-- maal tekst plaatsen uitstellen}
-\setinterfacemessage{layouts}{2}{-- maal uitgestelde tekst tussengevoegd}
-\setinterfacemessage{layouts}{5}{margeblokken inactief}
-\setinterfacemessage{layouts}{4}{margeblokken actief}
-\setinterfacemessage{layouts}{7}{beeldmerken berekenen}
-\setinterfacemessage{layouts}{6}{subpagina reeks -- verwerkt (aantal --)}
-\setinterfacemessage{layouts}{9}{momenteel maximaal -- niveaus in opsommingen}
-\setinterfacemessage{layouts}{8}{achtergronden berekenen}
-\setinterfacemessage{layouts}{title}{layout}
-\setinterfacemessage{layouts}{11}{interlinie -- niet toegestaan in gridmode}
-\setinterfacemessage{layouts}{10}{-- en -- tellen niet op tot 1.0}
+\setinterfacemessage{publications}{1}{file -- not found, unknown style ignored}
+\setinterfacemessage{publications}{3}{wrote a new auxiliary file \jobname.aux}
+\setinterfacemessage{publications}{title}{publications}
+\setinterfacemessage{publications}{2}{file -- not found, waiting for bibtex}
+\setinterfacemessage{publications}{4}{loading database from --}
+\setinterfacemessage{publications}{5}{warning: cite argument -- on line \the\inputlineno}
+\setinterfacemessage{publications}{6}{loading formatting style from --}
+\setinterfacemessage{javascript}{1}{script set -- wordt geladen}
+\setinterfacemessage{javascript}{title}{javascript}
+\setinterfacemessage{javascript}{2}{onbekende preamble --}
\setinterfacemessage{check}{1}{'=' ontbreekt of zonder {} na '--' in regel --}
\setinterfacemessage{check}{3}{-- -- vervangt een macro, gebruik HOOFDLETTERS!}
\setinterfacemessage{check}{2}{-- argument(en) verwacht in regel --}
\setinterfacemessage{check}{title}{controle}
\setinterfacemessage{metapost}{1}{metapost bibliotheek -- wordt geladen}
\setinterfacemessage{metapost}{title}{metapost}
-\setinterfacemessage{files}{1}{file synoniem -- is al in gebruik voor --}
-\setinterfacemessage{files}{title}{files}
\setinterfacemessage{figures}{1}{figuur -- is niet te vinden}
\setinterfacemessage{figures}{3}{maten van -- worden extern vastgesteld}
\setinterfacemessage{figures}{2}{figuur -- wordt niet preset}
@@ -194,5 +191,18 @@
\setinterfacemessage{figures}{6}{maten van -- berekend door rlxtools}
\setinterfacemessage{figures}{8}{figuurobject -- wordt opnieuw gebruikt}
\setinterfacemessage{figures}{title}{figuren}
+\setinterfacemessage{colors}{1}{systeem -- is globaal actief}
+\setinterfacemessage{colors}{3}{-- is niet gedefinieerd --}
+\setinterfacemessage{colors}{2}{systeem -- is lokaal actief}
+\setinterfacemessage{colors}{5}{onbekend systeem --}
+\setinterfacemessage{colors}{4}{systeem -- wordt geladen}
+\setinterfacemessage{colors}{7}{palet -- is niet beschikbaar}
+\setinterfacemessage{colors}{6}{palet -- is beschikbaar}
+\setinterfacemessage{colors}{9}{-- kleurruimte wordt niet ondersteund}
+\setinterfacemessage{colors}{8}{specificatie -- bij -- wordt zwart}
+\setinterfacemessage{colors}{title}{kleur}
+\setinterfacemessage{colors}{12}{-- is geregistreerd}
+\setinterfacemessage{colors}{11}{kleur wordt vertaald in grijs}
+\setinterfacemessage{colors}{10}{-- kleurruimte wordt ondersteund}
%
\endinput \ No newline at end of file
diff --git a/Master/texmf-dist/tex/context/base/mult-mno.tex b/Master/texmf-dist/tex/context/base/mult-mno.tex
index 676c2cb2c71..ee6fd3273ec 100644
--- a/Master/texmf-dist/tex/context/base/mult-mno.tex
+++ b/Master/texmf-dist/tex/context/base/mult-mno.tex
@@ -2,8 +2,11 @@
\setinterfacemessage{references}{3}{ukjent referansetype --}
\setinterfacemessage{references}{2}{duplikat referanse -- pø side --}
\setinterfacemessage{references}{4}{ulovlig referanse --}
-\setinterfacemessage{references}{title}{referanser}
\setinterfacemessage{references}{30}{ukjent objekt --}
+\setinterfacemessage{references}{25}{references from document '--' are not imported (export again)}
+\setinterfacemessage{references}{24}{references from document '--' are not exported}
+\setinterfacemessage{references}{title}{referanser}
+\setinterfacemessage{references}{26}{references from document '--' are imported}
\setinterfacemessage{references}{31}{duplikat objekt --}
\setinterfacemessage{references}{21}{dokument -- er lest inn}
\setinterfacemessage{references}{22}{dokument -- er ikke interaktivt}
@@ -66,6 +69,10 @@
\setinterfacemessage{interactions}{6}{attachment file -- does not exist}
\setinterfacemessage{interactions}{title}{interaksjon}
\setinterfacemessage{interactions}{21}{-- kode satt inn / tilføyd}
+\setinterfacemessage{regimes}{1}{koding --}
+\setinterfacemessage{regimes}{3}{ukjent koding --}
+\setinterfacemessage{regimes}{2}{koding -- er lest inn}
+\setinterfacemessage{regimes}{title}{koding}
\setinterfacemessage{structures}{1}{starten av blokk -- (seksjon)}
\setinterfacemessage{structures}{title}{struktur}
\setinterfacemessage{structures}{2}{slutten av blokk -- (seksjon)}
@@ -80,15 +87,24 @@
\setinterfacemessage{linguals}{8}{spràk spesifikk opsjon [--] problemfritt tilføyd}
\setinterfacemessage{linguals}{title}{sprøk}
\setinterfacemessage{linguals}{10}{orddelingsmønster -- er lest inn}
-\setinterfacemessage{regimes}{1}{koding --}
-\setinterfacemessage{regimes}{3}{ukjent koding --}
-\setinterfacemessage{regimes}{2}{koding -- er lest inn}
-\setinterfacemessage{regimes}{title}{koding}
+\setinterfacemessage{verbatims}{1}{fil -- eksisterer ikke}
+\setinterfacemessage{verbatims}{title}{verbatim}
\setinterfacemessage{filters}{1}{filter -- is loaded}
\setinterfacemessage{filters}{title}{filter}
\setinterfacemessage{filters}{2}{unknown filter --}
-\setinterfacemessage{verbatims}{1}{fil -- eksisterer ikke}
-\setinterfacemessage{verbatims}{title}{verbatim}
+\setinterfacemessage{textblocks}{1}{ny versjon, andre gjennomkjøring nødvendig}
+\setinterfacemessage{textblocks}{3}{leser blokker fra --}
+\setinterfacemessage{textblocks}{2}{skriver blokker til --}
+\setinterfacemessage{textblocks}{5}{-- ikke skjult}
+\setinterfacemessage{textblocks}{4}{andre gjennomkjøring nødvendig}
+\setinterfacemessage{textblocks}{7}{-- skjult}
+\setinterfacemessage{textblocks}{6}{-- skjult og behandlet}
+\setinterfacemessage{textblocks}{9}{-- ikke tegnsatt}
+\setinterfacemessage{textblocks}{8}{-- tegnsatt}
+\setinterfacemessage{textblocks}{title}{tekstblokker}
+\setinterfacemessage{textblocks}{12}{-- utelatt}
+\setinterfacemessage{textblocks}{11}{-- lest inn og tegnsatt}
+\setinterfacemessage{textblocks}{10}{-- lest inn og behandlet}
\setinterfacemessage{encodings}{1}{koding --}
\setinterfacemessage{encodings}{3}{ukjent koding --}
\setinterfacemessage{encodings}{2}{koding -- er lest inn}
@@ -107,21 +123,10 @@
\setinterfacemessage{columns}{12}{flytblokk forskjøvet til neste kolonne / --}
\setinterfacemessage{columns}{11}{flytblokk for bredt for kolonna}
\setinterfacemessage{columns}{10}{(mindre enn) 1 linje igjen}
-\setinterfacemessage{textblocks}{1}{ny versjon, andre gjennomkjøring nødvendig}
-\setinterfacemessage{textblocks}{3}{leser blokker fra --}
-\setinterfacemessage{textblocks}{2}{skriver blokker til --}
-\setinterfacemessage{textblocks}{5}{-- ikke skjult}
-\setinterfacemessage{textblocks}{4}{andre gjennomkjøring nødvendig}
-\setinterfacemessage{textblocks}{7}{-- skjult}
-\setinterfacemessage{textblocks}{6}{-- skjult og behandlet}
-\setinterfacemessage{textblocks}{9}{-- ikke tegnsatt}
-\setinterfacemessage{textblocks}{8}{-- tegnsatt}
-\setinterfacemessage{textblocks}{title}{tekstblokker}
-\setinterfacemessage{textblocks}{12}{-- utelatt}
-\setinterfacemessage{textblocks}{11}{-- lest inn og tegnsatt}
-\setinterfacemessage{textblocks}{10}{-- lest inn og behandlet}
\setinterfacemessage{symbols}{1}{leser inn symbolsett --}
\setinterfacemessage{symbols}{title}{symboler}
+\setinterfacemessage{files}{1}{filesynonym -- er allerede brukt for --}
+\setinterfacemessage{files}{title}{filer}
\setinterfacemessage{versions}{1}{manglende @+}
\setinterfacemessage{versions}{3}{valgte sider: --}
\setinterfacemessage{versions}{2}{markerer sider}
@@ -134,9 +139,18 @@
\setinterfacemessage{specials}{7}{ukjent driver --}
\setinterfacemessage{specials}{6}{'nesting' er ikke tillatt}
\setinterfacemessage{specials}{title}{specials}
-\setinterfacemessage{javascript}{1}{leser inn scriptsett --}
-\setinterfacemessage{javascript}{title}{javascript}
-\setinterfacemessage{javascript}{2}{ukjent 'preamble' --}
+\setinterfacemessage{layouts}{1}{teksthøyde tilpasset med -- på side --}
+\setinterfacemessage{layouts}{3}{-- ganger tekst forskjøvet}
+\setinterfacemessage{layouts}{2}{-- ganger forskjøvet tekst plassert}
+\setinterfacemessage{layouts}{5}{margblokker inaktive}
+\setinterfacemessage{layouts}{4}{margblokker aktive}
+\setinterfacemessage{layouts}{7}{beregner plass for logo}
+\setinterfacemessage{layouts}{6}{delside sett -- behandlet (størrelse --)}
+\setinterfacemessage{layouts}{9}{for øyeblikket maksimalt -- nivåer i opplisting}
+\setinterfacemessage{layouts}{8}{beregner bakgrunn}
+\setinterfacemessage{layouts}{title}{layout}
+\setinterfacemessage{layouts}{11}{mellomrom -- ikke tillatt i gridmodus}
+\setinterfacemessage{layouts}{10}{-- og -- er ikke 1.0 til sammen}
\setinterfacemessage{fonts}{1}{koding --}
\setinterfacemessage{fonts}{3}{ukjent variant --}
\setinterfacemessage{fonts}{2}{variant -- er lest inn}
@@ -153,39 +167,22 @@
\setinterfacemessage{databases}{2}{lokal fil --}
\setinterfacemessage{databases}{4}{ukjent fil --}
\setinterfacemessage{databases}{title}{databaser}
-\setinterfacemessage{colors}{1}{system -- er aktivert globalt}
-\setinterfacemessage{colors}{3}{-- er udefinert --}
-\setinterfacemessage{colors}{2}{system -- er aktivert lokalt}
-\setinterfacemessage{colors}{5}{ukjent system --}
-\setinterfacemessage{colors}{4}{system -- er lest inn}
-\setinterfacemessage{colors}{7}{palett -- er ikke tilgjengelig}
-\setinterfacemessage{colors}{6}{palett -- er tilgjengelig}
-\setinterfacemessage{colors}{9}{-- fargerom er ikke støttet}
-\setinterfacemessage{colors}{8}{spesifikasjon -- for farge -- gir kun svart}
-\setinterfacemessage{colors}{title}{farge}
-\setinterfacemessage{colors}{12}{-- is registered}
-\setinterfacemessage{colors}{11}{fargen vil bli vist som grø}
-\setinterfacemessage{colors}{10}{-- fargerom er støttet}
-\setinterfacemessage{layouts}{1}{teksthøyde tilpasset med -- på side --}
-\setinterfacemessage{layouts}{3}{-- ganger tekst forskjøvet}
-\setinterfacemessage{layouts}{2}{-- ganger forskjøvet tekst plassert}
-\setinterfacemessage{layouts}{5}{margblokker inaktive}
-\setinterfacemessage{layouts}{4}{margblokker aktive}
-\setinterfacemessage{layouts}{7}{beregner plass for logo}
-\setinterfacemessage{layouts}{6}{delside sett -- behandlet (størrelse --)}
-\setinterfacemessage{layouts}{9}{for øyeblikket maksimalt -- nivåer i opplisting}
-\setinterfacemessage{layouts}{8}{beregner bakgrunn}
-\setinterfacemessage{layouts}{title}{layout}
-\setinterfacemessage{layouts}{11}{mellomrom -- ikke tillatt i gridmodus}
-\setinterfacemessage{layouts}{10}{-- og -- er ikke 1.0 til sammen}
+\setinterfacemessage{publications}{1}{file -- not found, unknown style ignored}
+\setinterfacemessage{publications}{3}{wrote a new auxiliary file \jobname.aux}
+\setinterfacemessage{publications}{title}{publications}
+\setinterfacemessage{publications}{2}{file -- not found, waiting for bibtex}
+\setinterfacemessage{publications}{4}{loading database from --}
+\setinterfacemessage{publications}{5}{warning: cite argument -- on line \the\inputlineno}
+\setinterfacemessage{publications}{6}{loading formatting style from --}
+\setinterfacemessage{javascript}{1}{leser inn scriptsett --}
+\setinterfacemessage{javascript}{title}{javascript}
+\setinterfacemessage{javascript}{2}{ukjent 'preamble' --}
\setinterfacemessage{check}{1}{manglende '=' etter '--' i linje --}
\setinterfacemessage{check}{3}{-- -- overskygger en makro, bruk STORE BOKSTAVER!}
\setinterfacemessage{check}{2}{-- argument forventet i linje --}
\setinterfacemessage{check}{title}{kontroll}
\setinterfacemessage{metapost}{1}{metapost bibliotek -- blir lest inn}
\setinterfacemessage{metapost}{title}{metapost}
-\setinterfacemessage{files}{1}{filesynonym -- er allerede brukt for --}
-\setinterfacemessage{files}{title}{filer}
\setinterfacemessage{figures}{1}{figure -- can not be found}
\setinterfacemessage{figures}{3}{dimensions of -- are determined externally}
\setinterfacemessage{figures}{2}{figure -- is not preset}
@@ -194,5 +191,18 @@
\setinterfacemessage{figures}{6}{dimensions of -- calculated by rlxtools}
\setinterfacemessage{figures}{8}{figureobject -- is reused}
\setinterfacemessage{figures}{title}{figures}
+\setinterfacemessage{colors}{1}{system -- er aktivert globalt}
+\setinterfacemessage{colors}{3}{-- er udefinert --}
+\setinterfacemessage{colors}{2}{system -- er aktivert lokalt}
+\setinterfacemessage{colors}{5}{ukjent system --}
+\setinterfacemessage{colors}{4}{system -- er lest inn}
+\setinterfacemessage{colors}{7}{palett -- er ikke tilgjengelig}
+\setinterfacemessage{colors}{6}{palett -- er tilgjengelig}
+\setinterfacemessage{colors}{9}{-- fargerom er ikke støttet}
+\setinterfacemessage{colors}{8}{spesifikasjon -- for farge -- gir kun svart}
+\setinterfacemessage{colors}{title}{farge}
+\setinterfacemessage{colors}{12}{-- is registered}
+\setinterfacemessage{colors}{11}{fargen vil bli vist som grø}
+\setinterfacemessage{colors}{10}{-- fargerom er støttet}
%
\endinput \ No newline at end of file
diff --git a/Master/texmf-dist/tex/context/base/mult-mpe.tex b/Master/texmf-dist/tex/context/base/mult-mpe.tex
index 8335d291143..4c1bc99420a 100644
--- a/Master/texmf-dist/tex/context/base/mult-mpe.tex
+++ b/Master/texmf-dist/tex/context/base/mult-mpe.tex
@@ -2,8 +2,11 @@
\setinterfacemessage{references}{3}{unknown reference type --}
\setinterfacemessage{references}{2}{duplicate reference -- on page --}
\setinterfacemessage{references}{4}{illegal reference --}
-\setinterfacemessage{references}{title}{references}
\setinterfacemessage{references}{30}{unknown object --}
+\setinterfacemessage{references}{25}{references from document '--' are not imported (export again)}
+\setinterfacemessage{references}{24}{references from document '--' are not exported}
+\setinterfacemessage{references}{title}{references}
+\setinterfacemessage{references}{26}{references from document '--' are imported}
\setinterfacemessage{references}{31}{duplicate object --}
\setinterfacemessage{references}{21}{document -- loaded}
\setinterfacemessage{references}{22}{document -- is not interactive}
@@ -66,6 +69,10 @@
\setinterfacemessage{interactions}{6}{attachment file -- does not exist}
\setinterfacemessage{interactions}{title}{interaction}
\setinterfacemessage{interactions}{21}{-- code inserted}
+\setinterfacemessage{regimes}{1}{regime --}
+\setinterfacemessage{regimes}{3}{unknown regime --}
+\setinterfacemessage{regimes}{2}{regime -- is loaded}
+\setinterfacemessage{regimes}{title}{regime}
\setinterfacemessage{structures}{1}{begin of sectionblock --}
\setinterfacemessage{structures}{title}{structure}
\setinterfacemessage{structures}{2}{end of sectionblock --}
@@ -80,15 +87,24 @@
\setinterfacemessage{linguals}{8}{language specific options [--] seamless appended}
\setinterfacemessage{linguals}{title}{language}
\setinterfacemessage{linguals}{10}{patterns --loaded}
-\setinterfacemessage{regimes}{1}{regime --}
-\setinterfacemessage{regimes}{3}{unknown regime --}
-\setinterfacemessage{regimes}{2}{regime -- is loaded}
-\setinterfacemessage{regimes}{title}{regime}
+\setinterfacemessage{verbatims}{1}{file -- does not exist}
+\setinterfacemessage{verbatims}{title}{verbatim}
\setinterfacemessage{filters}{1}{filter -- is loaded}
\setinterfacemessage{filters}{title}{filter}
\setinterfacemessage{filters}{2}{unknown filter --}
-\setinterfacemessage{verbatims}{1}{file -- does not exist}
-\setinterfacemessage{verbatims}{title}{verbatim}
+\setinterfacemessage{textblocks}{1}{new version, second pass needed}
+\setinterfacemessage{textblocks}{3}{reading blocks from --}
+\setinterfacemessage{textblocks}{2}{writing blocks to --}
+\setinterfacemessage{textblocks}{5}{-- not hidden}
+\setinterfacemessage{textblocks}{4}{second pass needed}
+\setinterfacemessage{textblocks}{7}{-- hidden}
+\setinterfacemessage{textblocks}{6}{-- hidden and processed}
+\setinterfacemessage{textblocks}{9}{-- not typeset}
+\setinterfacemessage{textblocks}{8}{-- typeset}
+\setinterfacemessage{textblocks}{title}{textblocks}
+\setinterfacemessage{textblocks}{12}{-- skipped}
+\setinterfacemessage{textblocks}{11}{-- loaded and typeset}
+\setinterfacemessage{textblocks}{10}{-- loaded and processed}
\setinterfacemessage{encodings}{1}{coding --}
\setinterfacemessage{encodings}{3}{unknown coding --}
\setinterfacemessage{encodings}{2}{coding -- is loaded}
@@ -107,21 +123,10 @@
\setinterfacemessage{columns}{12}{float moved to next column / --}
\setinterfacemessage{columns}{11}{float too wide for column}
\setinterfacemessage{columns}{10}{(less than) 1 line left}
-\setinterfacemessage{textblocks}{1}{new version, second pass needed}
-\setinterfacemessage{textblocks}{3}{reading blocks from --}
-\setinterfacemessage{textblocks}{2}{writing blocks to --}
-\setinterfacemessage{textblocks}{5}{-- not hidden}
-\setinterfacemessage{textblocks}{4}{second pass needed}
-\setinterfacemessage{textblocks}{7}{-- hidden}
-\setinterfacemessage{textblocks}{6}{-- hidden and processed}
-\setinterfacemessage{textblocks}{9}{-- not typeset}
-\setinterfacemessage{textblocks}{8}{-- typeset}
-\setinterfacemessage{textblocks}{title}{textblocks}
-\setinterfacemessage{textblocks}{12}{-- skipped}
-\setinterfacemessage{textblocks}{11}{-- loaded and typeset}
-\setinterfacemessage{textblocks}{10}{-- loaded and processed}
\setinterfacemessage{symbols}{1}{loading symbolset --}
\setinterfacemessage{symbols}{title}{symbols}
+\setinterfacemessage{files}{1}{file synonym -- is already used for --}
+\setinterfacemessage{files}{title}{files}
\setinterfacemessage{versions}{1}{missing @+}
\setinterfacemessage{versions}{3}{selected pages: --}
\setinterfacemessage{versions}{2}{marking pages}
@@ -134,9 +139,18 @@
\setinterfacemessage{specials}{7}{unknown driver --}
\setinterfacemessage{specials}{6}{nesting is not permitted}
\setinterfacemessage{specials}{title}{specials}
-\setinterfacemessage{javascript}{1}{loading script set --}
-\setinterfacemessage{javascript}{title}{javascript}
-\setinterfacemessage{javascript}{2}{unknown preamble --}
+\setinterfacemessage{layouts}{1}{textheight adapted with -- at page --}
+\setinterfacemessage{layouts}{3}{-- times text postponed}
+\setinterfacemessage{layouts}{2}{-- times postponed text placed}
+\setinterfacemessage{layouts}{5}{marginblocks inactive}
+\setinterfacemessage{layouts}{4}{marginblocks active}
+\setinterfacemessage{layouts}{7}{calculating logospace}
+\setinterfacemessage{layouts}{6}{subpage set -- processed (size --)}
+\setinterfacemessage{layouts}{9}{currently no more than -- levels in itemizations}
+\setinterfacemessage{layouts}{8}{calculating backgrounds}
+\setinterfacemessage{layouts}{title}{layout}
+\setinterfacemessage{layouts}{11}{spacing -- not permitted in gridmode}
+\setinterfacemessage{layouts}{10}{-- and -- don't add up to 1.0}
\setinterfacemessage{fonts}{1}{coding --}
\setinterfacemessage{fonts}{3}{unknown variant --}
\setinterfacemessage{fonts}{2}{variant -- is loaded}
@@ -153,39 +167,22 @@
\setinterfacemessage{databases}{2}{local file --}
\setinterfacemessage{databases}{4}{unknown file --}
\setinterfacemessage{databases}{title}{databases}
-\setinterfacemessage{colors}{1}{system -- is global activated}
-\setinterfacemessage{colors}{3}{-- is not defined --}
-\setinterfacemessage{colors}{2}{system -- is local activated}
-\setinterfacemessage{colors}{5}{unknown system --}
-\setinterfacemessage{colors}{4}{system -- is loaded}
-\setinterfacemessage{colors}{7}{palette -- is not available}
-\setinterfacemessage{colors}{6}{palette -- is available}
-\setinterfacemessage{colors}{9}{-- color space is not supported}
-\setinterfacemessage{colors}{8}{specification -- at color -- becomes black}
-\setinterfacemessage{colors}{title}{color}
-\setinterfacemessage{colors}{12}{-- is registered}
-\setinterfacemessage{colors}{11}{color is converted to gray}
-\setinterfacemessage{colors}{10}{-- color space is supported}
-\setinterfacemessage{layouts}{1}{textheight adapted with -- at page --}
-\setinterfacemessage{layouts}{3}{-- times text postponed}
-\setinterfacemessage{layouts}{2}{-- times postponed text placed}
-\setinterfacemessage{layouts}{5}{marginblocks inactive}
-\setinterfacemessage{layouts}{4}{marginblocks active}
-\setinterfacemessage{layouts}{7}{calculating logospace}
-\setinterfacemessage{layouts}{6}{subpage set -- processed (size --)}
-\setinterfacemessage{layouts}{9}{currently no more than -- levels in itemizations}
-\setinterfacemessage{layouts}{8}{calculating backgrounds}
-\setinterfacemessage{layouts}{title}{layout}
-\setinterfacemessage{layouts}{11}{spacing -- not permitted in gridmode}
-\setinterfacemessage{layouts}{10}{-- and -- don't add up to 1.0}
+\setinterfacemessage{publications}{1}{file -- not found, unknown style ignored}
+\setinterfacemessage{publications}{3}{wrote a new auxiliary file \jobname.aux}
+\setinterfacemessage{publications}{title}{publications}
+\setinterfacemessage{publications}{2}{file -- not found, waiting for bibtex}
+\setinterfacemessage{publications}{4}{loading database from --}
+\setinterfacemessage{publications}{5}{warning: cite argument -- on line \the\inputlineno}
+\setinterfacemessage{publications}{6}{loading formatting style from --}
+\setinterfacemessage{javascript}{1}{loading script set --}
+\setinterfacemessage{javascript}{title}{javascript}
+\setinterfacemessage{javascript}{2}{unknown preamble --}
\setinterfacemessage{check}{1}{missing or ungrouped '=' after '--' in line --}
\setinterfacemessage{check}{3}{-- -- replaces a macro, use CAPITALS!}
\setinterfacemessage{check}{2}{-- argument(s) expected in line --}
\setinterfacemessage{check}{title}{check}
\setinterfacemessage{metapost}{1}{loading metapost library --}
\setinterfacemessage{metapost}{title}{metapost}
-\setinterfacemessage{files}{1}{file synonym -- is already used for --}
-\setinterfacemessage{files}{title}{files}
\setinterfacemessage{figures}{1}{figure -- can not be found}
\setinterfacemessage{figures}{3}{dimensions of -- are determined externally}
\setinterfacemessage{figures}{2}{figure -- is not preset}
@@ -194,5 +191,18 @@
\setinterfacemessage{figures}{6}{dimensions of -- calculated by rlxtools}
\setinterfacemessage{figures}{8}{figureobject -- is reused}
\setinterfacemessage{figures}{title}{figures}
+\setinterfacemessage{colors}{1}{system -- is global activated}
+\setinterfacemessage{colors}{3}{-- is not defined --}
+\setinterfacemessage{colors}{2}{system -- is local activated}
+\setinterfacemessage{colors}{5}{unknown system --}
+\setinterfacemessage{colors}{4}{system -- is loaded}
+\setinterfacemessage{colors}{7}{palette -- is not available}
+\setinterfacemessage{colors}{6}{palette -- is available}
+\setinterfacemessage{colors}{9}{-- color space is not supported}
+\setinterfacemessage{colors}{8}{specification -- at color -- becomes black}
+\setinterfacemessage{colors}{title}{color}
+\setinterfacemessage{colors}{12}{-- is registered}
+\setinterfacemessage{colors}{11}{color is converted to gray}
+\setinterfacemessage{colors}{10}{-- color space is supported}
%
\endinput \ No newline at end of file
diff --git a/Master/texmf-dist/tex/context/base/mult-mro.tex b/Master/texmf-dist/tex/context/base/mult-mro.tex
index 3f52fbc70a4..da96a23a494 100644
--- a/Master/texmf-dist/tex/context/base/mult-mro.tex
+++ b/Master/texmf-dist/tex/context/base/mult-mro.tex
@@ -2,8 +2,11 @@
\setinterfacemessage{references}{3}{tip necunoscut de referinta --}
\setinterfacemessage{references}{2}{referinta duplicat -- la pagina --}
\setinterfacemessage{references}{4}{referinta eronata --}
-\setinterfacemessage{references}{title}{referinte}
\setinterfacemessage{references}{30}{obiect necunoscut --}
+\setinterfacemessage{references}{25}{references from document '--' are not imported (export again)}
+\setinterfacemessage{references}{24}{references from document '--' are not exported}
+\setinterfacemessage{references}{title}{referinte}
+\setinterfacemessage{references}{26}{references from document '--' are imported}
\setinterfacemessage{references}{31}{obiect duplicat --}
\setinterfacemessage{references}{21}{documentul -- este incarcat}
\setinterfacemessage{references}{22}{documentul -- nu este interactiv}
@@ -66,6 +69,10 @@
\setinterfacemessage{interactions}{6}{attachment file -- does not exist}
\setinterfacemessage{interactions}{title}{interactiuni}
\setinterfacemessage{interactions}{21}{-- cod inserat}
+\setinterfacemessage{regimes}{1}{codificarea --}
+\setinterfacemessage{regimes}{3}{codificarea -- este necunoscuta}
+\setinterfacemessage{regimes}{2}{codificarea -- este Encarcata}
+\setinterfacemessage{regimes}{title}{codificari}
\setinterfacemessage{structures}{1}{inceput de bloc sectiune --}
\setinterfacemessage{structures}{title}{structuri}
\setinterfacemessage{structures}{2}{sfarsit de bloc sectiune --}
@@ -80,15 +87,24 @@
\setinterfacemessage{linguals}{8}{optiunile specifice ale limbii [--] adaugate}
\setinterfacemessage{linguals}{title}{limbi}
\setinterfacemessage{linguals}{10}{sabloanele -- incarcate}
-\setinterfacemessage{regimes}{1}{codificarea --}
-\setinterfacemessage{regimes}{3}{codificarea -- este necunoscuta}
-\setinterfacemessage{regimes}{2}{codificarea -- este Encarcata}
-\setinterfacemessage{regimes}{title}{codificari}
+\setinterfacemessage{verbatims}{1}{fisierul -- nu exista}
+\setinterfacemessage{verbatims}{title}{verbatim}
\setinterfacemessage{filters}{1}{filter -- is loaded}
\setinterfacemessage{filters}{title}{filter}
\setinterfacemessage{filters}{2}{unknown filter --}
-\setinterfacemessage{verbatims}{1}{fisierul -- nu exista}
-\setinterfacemessage{verbatims}{title}{verbatim}
+\setinterfacemessage{textblocks}{1}{o noua versiune, este nevoie de inca o trecere}
+\setinterfacemessage{textblocks}{3}{se citesc blocurile din --}
+\setinterfacemessage{textblocks}{2}{se scriu blocurile in --}
+\setinterfacemessage{textblocks}{5}{-- nu este ascuns}
+\setinterfacemessage{textblocks}{4}{este nevoie de inca o trecere}
+\setinterfacemessage{textblocks}{7}{-- ascuns}
+\setinterfacemessage{textblocks}{6}{-- ascuns si procesat}
+\setinterfacemessage{textblocks}{9}{-- nu este cules}
+\setinterfacemessage{textblocks}{8}{-- cules}
+\setinterfacemessage{textblocks}{title}{blocuri de text}
+\setinterfacemessage{textblocks}{12}{-- sarit peste}
+\setinterfacemessage{textblocks}{11}{-- incarcat si cules}
+\setinterfacemessage{textblocks}{10}{-- incarcat si procesat}
\setinterfacemessage{encodings}{1}{codificarea --}
\setinterfacemessage{encodings}{3}{codificarea -- este necunoscuta}
\setinterfacemessage{encodings}{2}{codificarea -- este Encarcata}
@@ -107,21 +123,10 @@
\setinterfacemessage{columns}{12}{blocul este mutat pe urmatoarea coloana / --}
\setinterfacemessage{columns}{11}{blocul este prea lat pentru coloana}
\setinterfacemessage{columns}{10}{a mai ramas (mai putin de) 1 linie}
-\setinterfacemessage{textblocks}{1}{o noua versiune, este nevoie de inca o trecere}
-\setinterfacemessage{textblocks}{3}{se citesc blocurile din --}
-\setinterfacemessage{textblocks}{2}{se scriu blocurile in --}
-\setinterfacemessage{textblocks}{5}{-- nu este ascuns}
-\setinterfacemessage{textblocks}{4}{este nevoie de inca o trecere}
-\setinterfacemessage{textblocks}{7}{-- ascuns}
-\setinterfacemessage{textblocks}{6}{-- ascuns si procesat}
-\setinterfacemessage{textblocks}{9}{-- nu este cules}
-\setinterfacemessage{textblocks}{8}{-- cules}
-\setinterfacemessage{textblocks}{title}{blocuri de text}
-\setinterfacemessage{textblocks}{12}{-- sarit peste}
-\setinterfacemessage{textblocks}{11}{-- incarcat si cules}
-\setinterfacemessage{textblocks}{10}{-- incarcat si procesat}
\setinterfacemessage{symbols}{1}{se incarca setul de simboluri --}
\setinterfacemessage{symbols}{title}{simboluri}
+\setinterfacemessage{files}{1}{sinonimul fisierelor -- este folosit deja pentru --}
+\setinterfacemessage{files}{title}{fisiere}
\setinterfacemessage{versions}{1}{lipseste @+}
\setinterfacemessage{versions}{3}{pagini selectate: --}
\setinterfacemessage{versions}{2}{pagini marcate}
@@ -134,9 +139,18 @@
\setinterfacemessage{specials}{7}{driver necunoscut --}
\setinterfacemessage{specials}{6}{imbricarea nu este permisa}
\setinterfacemessage{specials}{title}{specials}
-\setinterfacemessage{javascript}{1}{se incarca scriptul --}
-\setinterfacemessage{javascript}{title}{javascript}
-\setinterfacemessage{javascript}{2}{preambul necunoscut --}
+\setinterfacemessage{layouts}{1}{textheight adaptat cu -- la pagina --}
+\setinterfacemessage{layouts}{3}{textul amanat de -- ori}
+\setinterfacemessage{layouts}{2}{textul amanat de -- ori a fost plasat}
+\setinterfacemessage{layouts}{5}{blocuri marginale inactive}
+\setinterfacemessage{layouts}{4}{blocuri marginale active}
+\setinterfacemessage{layouts}{7}{se calculeaza spatiul pentru logo}
+\setinterfacemessage{layouts}{6}{setul -- de subpagini procesat (dimensiunea --)}
+\setinterfacemessage{layouts}{9}{acum nu se supota mai mult de -- nivele de adancime la iteratii}
+\setinterfacemessage{layouts}{8}{se calculeaza fundalurile}
+\setinterfacemessage{layouts}{title}{aranjamente}
+\setinterfacemessage{layouts}{11}{spatierea -- nu este permisa in gridmode}
+\setinterfacemessage{layouts}{10}{-- si -- nu se adauga pana la 1.0}
\setinterfacemessage{fonts}{1}{codificarea --}
\setinterfacemessage{fonts}{3}{varianta necunoscuta --}
\setinterfacemessage{fonts}{2}{varianta -- este incarcata}
@@ -153,39 +167,22 @@
\setinterfacemessage{databases}{2}{fisier local --}
\setinterfacemessage{databases}{4}{fisier necunoscut --}
\setinterfacemessage{databases}{title}{baze de date}
-\setinterfacemessage{colors}{1}{sistem -- este activata global}
-\setinterfacemessage{colors}{3}{-- nu este definita --}
-\setinterfacemessage{colors}{2}{sistem -- este activata local}
-\setinterfacemessage{colors}{5}{sistem -- necunoscuta}
-\setinterfacemessage{colors}{4}{sistem -- este incarcata}
-\setinterfacemessage{colors}{7}{palette -- nu este disponibila}
-\setinterfacemessage{colors}{6}{paleta -- este disponibila}
-\setinterfacemessage{colors}{9}{spatiul de culoare -- nu este suportat}
-\setinterfacemessage{colors}{8}{specificatia -- la culoarea -- devine neagra}
-\setinterfacemessage{colors}{title}{culori}
-\setinterfacemessage{colors}{12}{-- is registered}
-\setinterfacemessage{colors}{11}{culoarea este convertita la gri}
-\setinterfacemessage{colors}{10}{spatiul de culoare -- este suportat}
-\setinterfacemessage{layouts}{1}{textheight adaptat cu -- la pagina --}
-\setinterfacemessage{layouts}{3}{textul amanat de -- ori}
-\setinterfacemessage{layouts}{2}{textul amanat de -- ori a fost plasat}
-\setinterfacemessage{layouts}{5}{blocuri marginale inactive}
-\setinterfacemessage{layouts}{4}{blocuri marginale active}
-\setinterfacemessage{layouts}{7}{se calculeaza spatiul pentru logo}
-\setinterfacemessage{layouts}{6}{setul -- de subpagini procesat (dimensiunea --)}
-\setinterfacemessage{layouts}{9}{acum nu se supota mai mult de -- nivele de adancime la iteratii}
-\setinterfacemessage{layouts}{8}{se calculeaza fundalurile}
-\setinterfacemessage{layouts}{title}{aranjamente}
-\setinterfacemessage{layouts}{11}{spatierea -- nu este permisa in gridmode}
-\setinterfacemessage{layouts}{10}{-- si -- nu se adauga pana la 1.0}
+\setinterfacemessage{publications}{1}{file -- not found, unknown style ignored}
+\setinterfacemessage{publications}{3}{wrote a new auxiliary file \jobname.aux}
+\setinterfacemessage{publications}{title}{publications}
+\setinterfacemessage{publications}{2}{file -- not found, waiting for bibtex}
+\setinterfacemessage{publications}{4}{loading database from --}
+\setinterfacemessage{publications}{5}{warning: cite argument -- on line \the\inputlineno}
+\setinterfacemessage{publications}{6}{loading formatting style from --}
+\setinterfacemessage{javascript}{1}{se incarca scriptul --}
+\setinterfacemessage{javascript}{title}{javascript}
+\setinterfacemessage{javascript}{2}{preambul necunoscut --}
\setinterfacemessage{check}{1}{lipseste '=' dupa '--' in linia --}
\setinterfacemessage{check}{3}{-- -- inlocuieste un macro, folositi MAJUSCULE!}
\setinterfacemessage{check}{2}{argumentul(ele) -- sunt asteptate in linia --}
\setinterfacemessage{check}{title}{verificari}
\setinterfacemessage{metapost}{1}{se incarca biblioteca metapost --}
\setinterfacemessage{metapost}{title}{metapost}
-\setinterfacemessage{files}{1}{sinonimul fisierelor -- este folosit deja pentru --}
-\setinterfacemessage{files}{title}{fisiere}
\setinterfacemessage{figures}{1}{figura -- nu poate fi gasita}
\setinterfacemessage{figures}{3}{dimensions of -- are determined externally}
\setinterfacemessage{figures}{2}{figura -- nu este presetata}
@@ -194,5 +191,18 @@
\setinterfacemessage{figures}{6}{dimensiunea figurii -- este calculata de rlxtools}
\setinterfacemessage{figures}{8}{obiectul figura -- este refolosit}
\setinterfacemessage{figures}{title}{figuri}
+\setinterfacemessage{colors}{1}{sistem -- este activata global}
+\setinterfacemessage{colors}{3}{-- nu este definita --}
+\setinterfacemessage{colors}{2}{sistem -- este activata local}
+\setinterfacemessage{colors}{5}{sistem -- necunoscuta}
+\setinterfacemessage{colors}{4}{sistem -- este incarcata}
+\setinterfacemessage{colors}{7}{palette -- nu este disponibila}
+\setinterfacemessage{colors}{6}{paleta -- este disponibila}
+\setinterfacemessage{colors}{9}{spatiul de culoare -- nu este suportat}
+\setinterfacemessage{colors}{8}{specificatia -- la culoarea -- devine neagra}
+\setinterfacemessage{colors}{title}{culori}
+\setinterfacemessage{colors}{12}{-- is registered}
+\setinterfacemessage{colors}{11}{culoarea este convertita la gri}
+\setinterfacemessage{colors}{10}{spatiul de culoare -- este suportat}
%
\endinput \ No newline at end of file
diff --git a/Master/texmf-dist/tex/context/base/mult-nl.tex b/Master/texmf-dist/tex/context/base/mult-nl.tex
index 492220961e2..074d5f3d5c0 100644
--- a/Master/texmf-dist/tex/context/base/mult-nl.tex
+++ b/Master/texmf-dist/tex/context/base/mult-nl.tex
@@ -75,6 +75,7 @@
\setinterfacevariable{atmargin}{opmarge}
\setinterfacevariable{atpage}{oppagina}
\setinterfacevariable{august}{augustus}
+\setinterfacevariable{author}{auteur}
\setinterfacevariable{auto}{auto}
\setinterfacevariable{autointro}{autointro}
\setinterfacevariable{back}{terug}
@@ -83,7 +84,10 @@
\setinterfacevariable{backpart}{uitleiding}
\setinterfacevariable{backspace}{rugwit}
\setinterfacevariable{backward}{achteruit}
+\setinterfacevariable{bbl}{bbl}
\setinterfacevariable{before}{voor}
+\setinterfacevariable{begin}{begin}
+\setinterfacevariable{bib}{bib}
\setinterfacevariable{big}{groot}
\setinterfacevariable{bigbodyfont}{grootkorps}
\setinterfacevariable{bigpreference}{grotevoorkeur}
@@ -108,6 +112,7 @@
\setinterfacevariable{chapter}{hoofdstuk}
\setinterfacevariable{character}{letter}
\setinterfacevariable{characters}{letters}
+\setinterfacevariable{cite}{cite}
\setinterfacevariable{color}{kleur}
\setinterfacevariable{column}{kolom}
\setinterfacevariable{columns}{kolommen}
@@ -133,9 +138,11 @@
\setinterfacevariable{display}{scherm}
\setinterfacevariable{dot}{punt}
\setinterfacevariable{doublesided}{dubbelzijdig}
+\setinterfacevariable{down}{omlaag}
\setinterfacevariable{each}{elk}
\setinterfacevariable{edge}{rand}
\setinterfacevariable{empty}{leeg}
+\setinterfacevariable{end}{eind}
\setinterfacevariable{endnote}{eindnoot}
\setinterfacevariable{enumeration}{doornummering}
\setinterfacevariable{environment}{omgeving}
@@ -265,11 +272,15 @@
\setinterfacevariable{mathcases}{mathcases}
\setinterfacevariable{mathmatrix}{wiskundematrix}
\setinterfacevariable{max}{max}
+\setinterfacevariable{maxdepth}{maxdepth}
+\setinterfacevariable{maxheight}{maxheight}
+\setinterfacevariable{maxwidth}{maxwidth}
\setinterfacevariable{may}{mei}
\setinterfacevariable{mediaeval}{mediaeval}
\setinterfacevariable{medium}{middel}
\setinterfacevariable{middle}{midden}
\setinterfacevariable{min}{min}
+\setinterfacevariable{mindepth}{mindepth}
\setinterfacevariable{minheight}{minhoogte}
\setinterfacevariable{minwidth}{minbreedte}
\setinterfacevariable{mirrored}{gespiegeld}
@@ -317,8 +328,12 @@
\setinterfacevariable{outer}{buiten}
\setinterfacevariable{outeredge}{buitenrand}
\setinterfacevariable{outermargin}{buitenmarge}
+\setinterfacevariable{overbar}{overstreep}
+\setinterfacevariable{overbars}{overstrepen}
\setinterfacevariable{overlay}{overlay}
\setinterfacevariable{overprint}{overprint}
+\setinterfacevariable{overstrike}{doorstreep}
+\setinterfacevariable{overstrikes}{doorstrepen}
\setinterfacevariable{packed}{opelkaar}
\setinterfacevariable{page}{pagina}
\setinterfacevariable{pagecomment}{paginacommentaar}
@@ -386,6 +401,7 @@
\setinterfacevariable{serried}{aanelkaar}
\setinterfacevariable{setups}{instellingen}
\setinterfacevariable{sheet}{sheet}
+\setinterfacevariable{short}{kort}
\setinterfacevariable{singlesided}{enkelzijdig}
\setinterfacevariable{slanted}{schuin}
\setinterfacevariable{slantedbold}{schuinvet}
@@ -410,12 +426,13 @@
\setinterfacevariable{spot}{spot}
\setinterfacevariable{standard}{standaard}
\setinterfacevariable{start}{start}
+\setinterfacevariable{starter}{opener}
\setinterfacevariable{sticker}{sticker}
\setinterfacevariable{stop}{stop}
\setinterfacevariable{stopper}{afsluiter}
\setinterfacevariable{stretch}{rek}
\setinterfacevariable{strict}{streng}
-\setinterfacevariable{strong}{strong}
+\setinterfacevariable{strong}{sterk}
\setinterfacevariable{strut}{strut}
\setinterfacevariable{sub}{sub}
\setinterfacevariable{subbackward}{subachteruit}
@@ -471,10 +488,13 @@
\setinterfacevariable{type}{type}
\setinterfacevariable{typing}{typen}
\setinterfacevariable{unavailable}{nietbeschikbaar}
+\setinterfacevariable{underbar}{onderstreep}
+\setinterfacevariable{underbars}{onderstrepen}
\setinterfacevariable{unit}{eenheid}
\setinterfacevariable{units}{eenheden}
\setinterfacevariable{unknown}{onbekend}
\setinterfacevariable{unpacked}{vanelkaar}
+\setinterfacevariable{up}{omhoog}
\setinterfacevariable{url}{url}
\setinterfacevariable{used}{gebruikt}
\setinterfacevariable{value}{waarde}
@@ -482,7 +502,7 @@
\setinterfacevariable{very}{zeer}
\setinterfacevariable{verystrict}{zeerstreng}
\setinterfacevariable{verytolerant}{zeersoepel}
-\setinterfacevariable{weak}{weak}
+\setinterfacevariable{weak}{zwak}
\setinterfacevariable{wednesday}{woensdag}
\setinterfacevariable{week}{week}
\setinterfacevariable{weekday}{weekdag}
@@ -502,12 +522,21 @@
\setinterfaceconstant{align}{uitlijnen}
\setinterfaceconstant{aligncharacter}{karakteruitlijnen}
\setinterfaceconstant{alignmentcharacter}{uitlijnkarakter}
+\setinterfaceconstant{alignsymbol}{alignsymbol}
\setinterfaceconstant{aligntitle}{titeluitlijnen}
\setinterfaceconstant{alternative}{variant}
+\setinterfaceconstant{andtext}{andtext}
\setinterfaceconstant{apa}{apa}
\setinterfaceconstant{arrow}{pijl}
+\setinterfaceconstant{artauthor}{artauthor}
+\setinterfaceconstant{artauthoretaldisplay}{artauthoretaldisplay}
+\setinterfaceconstant{artauthoretallimit}{artauthoretallimit}
+\setinterfaceconstant{artauthoretaltext}{artauthoretaltext}
\setinterfaceconstant{at}{op}
\setinterfaceconstant{author}{auteur}
+\setinterfaceconstant{authoretaldisplay}{authoretaldisplay}
+\setinterfaceconstant{authoretallimit}{authoretallimit}
+\setinterfaceconstant{authoretaltext}{authoretaltext}
\setinterfaceconstant{auto}{auto}
\setinterfaceconstant{autofile}{autofile}
\setinterfaceconstant{autofocus}{autofocus}
@@ -576,6 +605,7 @@
\setinterfaceconstant{cutspace}{snijwit}
\setinterfaceconstant{dash}{streep}
\setinterfaceconstant{dat}{dat}
+\setinterfaceconstant{database}{database}
\setinterfaceconstant{date}{datum}
\setinterfaceconstant{deepnumbercommand}{diepnummercommando}
\setinterfaceconstant{deeptextcommand}{dieptekstcommando}
@@ -594,12 +624,17 @@
\setinterfaceconstant{dy}{dy}
\setinterfaceconstant{edge}{rand}
\setinterfaceconstant{edgedistance}{randafstand}
+\setinterfaceconstant{editor}{editor}
+\setinterfaceconstant{editoretaldisplay}{editoretaldisplay}
+\setinterfaceconstant{editoretallimit}{editoretallimit}
+\setinterfaceconstant{editoretaltext}{editoretaltext}
\setinterfaceconstant{empty}{leeg}
\setinterfaceconstant{equalheight}{equalheight}
\setinterfaceconstant{equalwidth}{equalwidth}
\setinterfaceconstant{escape}{escape}
\setinterfaceconstant{evenmargin}{evenmarge}
\setinterfaceconstant{expansion}{expansie}
+\setinterfaceconstant{export}{exporteer}
\setinterfaceconstant{extras}{extras}
\setinterfaceconstant{factor}{factor}
\setinterfaceconstant{fallback}{terugval}
@@ -610,6 +645,8 @@
\setinterfaceconstant{fieldoffset}{veldoffset}
\setinterfaceconstant{file}{file}
\setinterfaceconstant{filtercommand}{filtercommand}
+\setinterfaceconstant{finalnamesep}{finalnamesep}
+\setinterfaceconstant{firstnamesep}{firstnamesep}
\setinterfaceconstant{focus}{focus}
\setinterfaceconstant{focusin}{focusin}
\setinterfaceconstant{focusout}{focusuit}
@@ -631,6 +668,7 @@
\setinterfaceconstant{global}{globaal}
\setinterfaceconstant{grid}{grid}
\setinterfaceconstant{hang}{hang}
+\setinterfaceconstant{headalign}{kopuitlijnen}
\setinterfaceconstant{headcolor}{kopkleur}
\setinterfaceconstant{headcommand}{kopcommando}
\setinterfaceconstant{headconversion}{kopconversie}
@@ -658,14 +696,18 @@
\setinterfaceconstant{inner}{binnen}
\setinterfaceconstant{innermargin}{binnenmarge}
\setinterfaceconstant{inputfile}{inputfile}
+\setinterfaceconstant{intent}{intent}
\setinterfaceconstant{interaction}{interactie}
\setinterfaceconstant{interlinespace}{interlinie}
\setinterfaceconstant{itemalign}{itemuitlijnen}
\setinterfaceconstant{items}{items}
+\setinterfaceconstant{juniorsep}{juniorsep}
\setinterfaceconstant{ken}{ken}
\setinterfaceconstant{keyexpansion}{sleutelexpansie}
\setinterfaceconstant{keyword}{trefwoord}
\setinterfaceconstant{label}{label}
+\setinterfaceconstant{lastnamesep}{lastnamesep}
+\setinterfaceconstant{lastpubsep}{lastpubsep}
\setinterfaceconstant{left}{links}
\setinterfaceconstant{leftcolor}{linkerkleur}
\setinterfaceconstant{leftcompoundhyphen}{linkerkoppelteken}
@@ -705,8 +747,10 @@
\setinterfaceconstant{marking}{markering}
\setinterfaceconstant{marstyle}{marletter}
\setinterfaceconstant{max}{max}
+\setinterfaceconstant{maxdepth}{maxdepth}
\setinterfaceconstant{maxheight}{maxhoogte}
\setinterfaceconstant{maxwidth}{maxbreedte}
+\setinterfaceconstant{maybeyear}{maybeyear}
\setinterfaceconstant{menu}{menu}
\setinterfaceconstant{method}{methode}
\setinterfaceconstant{middle}{midden}
@@ -717,8 +761,10 @@
\setinterfaceconstant{mindepth}{mindiepte}
\setinterfaceconstant{minheight}{minhoogte}
\setinterfaceconstant{minwidth}{minbreedte}
+\setinterfaceconstant{monthconversion}{maandconversie}
\setinterfaceconstant{n}{n}
\setinterfaceconstant{name}{naam}
+\setinterfaceconstant{namesep}{namesep}
\setinterfaceconstant{nbottom}{nonder}
\setinterfaceconstant{nc}{nc}
\setinterfaceconstant{next}{volgende}
@@ -742,6 +788,7 @@
\setinterfaceconstant{numberseparator}{nummerscheider}
\setinterfaceconstant{numberseparatorset}{numberseparatorset}
\setinterfaceconstant{numberset}{numberset}
+\setinterfaceconstant{numberstarter}{numberstarter}
\setinterfaceconstant{numberstopper}{numberstopper}
\setinterfaceconstant{numberstyle}{nummerletter}
\setinterfaceconstant{numberwidth}{nummerbreedte}
@@ -754,7 +801,9 @@
\setinterfaceconstant{openaction}{openactie}
\setinterfaceconstant{openpageaction}{openpaginaactie}
\setinterfaceconstant{option}{optie}
+\setinterfaceconstant{order}{order}
\setinterfaceconstant{orientation}{orientatie}
+\setinterfaceconstant{otherstext}{otherstext}
\setinterfaceconstant{outermargin}{buitenmarge}
\setinterfaceconstant{overprint}{overprint}
\setinterfaceconstant{ownnumber}{eigennummer}
@@ -772,10 +821,12 @@
\setinterfaceconstant{pageprefixsegments}{pageprefixsegments}
\setinterfaceconstant{pageprefixseparatorset}{pageprefixseparatorset}
\setinterfaceconstant{pageprefixset}{pageprefixset}
+\setinterfaceconstant{pageprefixstarter}{pageprefixstarter}
\setinterfaceconstant{pageprefixstopper}{pageprefixstopper}
\setinterfaceconstant{pagesegments}{pagesegments}
\setinterfaceconstant{pageseparatorset}{pageseparatorset}
\setinterfaceconstant{pageset}{pageset}
+\setinterfaceconstant{pagestarter}{pagestarter}
\setinterfaceconstant{pagestate}{paginastatus}
\setinterfaceconstant{pagestopper}{pagestopper}
\setinterfaceconstant{pagestyle}{paginaletter}
@@ -793,16 +844,20 @@
\setinterfaceconstant{prefixsegments}{prefixsegments}
\setinterfaceconstant{prefixseparatorset}{prefixseparatorset}
\setinterfaceconstant{prefixset}{prefixset}
+\setinterfaceconstant{prefixstarter}{prefixstarter}
\setinterfaceconstant{prefixstopper}{prefixstopper}
\setinterfaceconstant{preset}{preset}
\setinterfaceconstant{preview}{preview}
\setinterfaceconstant{previous}{vorige}
\setinterfaceconstant{previousnumber}{vorigenummer}
\setinterfaceconstant{process}{proces}
+\setinterfaceconstant{pubsep}{pubsep}
\setinterfaceconstant{radius}{straal}
\setinterfaceconstant{random}{willekeur}
+\setinterfaceconstant{range}{bereik}
\setinterfaceconstant{reduction}{reductie}
\setinterfaceconstant{ref}{ref}
+\setinterfaceconstant{refcommand}{refcommand}
\setinterfaceconstant{reference}{verwijzing}
\setinterfaceconstant{referenceprefix}{referenceprefix}
\setinterfaceconstant{referencing}{refereren}
@@ -836,6 +891,7 @@
\setinterfaceconstant{rulethickness}{lijndikte}
\setinterfaceconstant{samepage}{zelfdepagina}
\setinterfaceconstant{sample}{monster}
+\setinterfaceconstant{samplesize}{samplesize}
\setinterfaceconstant{saveinlist}{saveinlist}
\setinterfaceconstant{scale}{schaal}
\setinterfaceconstant{scope}{scope}
@@ -848,6 +904,7 @@
\setinterfaceconstant{sectionsegments}{sectionsegments}
\setinterfaceconstant{sectionseparatorset}{sectionseparatorset}
\setinterfaceconstant{sectionset}{sectionset}
+\setinterfaceconstant{sectionstarter}{sectionstarter}
\setinterfaceconstant{sectionstopper}{sectionstopper}
\setinterfaceconstant{separator}{scheider}
\setinterfaceconstant{set}{set}
@@ -860,6 +917,7 @@
\setinterfaceconstant{sign}{teken}
\setinterfaceconstant{size}{formaat}
\setinterfaceconstant{small}{klein}
+\setinterfaceconstant{sort}{sort}
\setinterfaceconstant{sorttype}{sortering}
\setinterfaceconstant{source}{bron}
\setinterfaceconstant{space}{spatie}
@@ -874,16 +932,19 @@
\setinterfaceconstant{spot}{spot}
\setinterfaceconstant{stack}{stapel}
\setinterfaceconstant{start}{start}
+\setinterfaceconstant{starter}{opener}
\setinterfaceconstant{state}{status}
\setinterfaceconstant{step}{stap}
\setinterfaceconstant{stop}{stop}
\setinterfaceconstant{stopper}{afsluiter}
\setinterfaceconstant{stretch}{rek}
+\setinterfaceconstant{strip}{strip}
\setinterfaceconstant{strut}{strut}
\setinterfaceconstant{style}{letter}
\setinterfaceconstant{sub}{sub}
\setinterfaceconstant{subtitle}{subtitel}
\setinterfaceconstant{suffix}{suffix}
+\setinterfaceconstant{surnamesep}{surnamesep}
\setinterfaceconstant{sx}{sx}
\setinterfaceconstant{sy}{sy}
\setinterfaceconstant{symalign}{symuitlijnen}
@@ -923,6 +984,7 @@
\setinterfaceconstant{topoffset}{bovenoffset}
\setinterfaceconstant{topspace}{kopwit}
\setinterfaceconstant{topstate}{bovenstatus}
+\setinterfaceconstant{totalnumber}{totalnumber}
\setinterfaceconstant{type}{type}
\setinterfaceconstant{unit}{eenheid}
\setinterfaceconstant{unknownreference}{onbekendeverwijzing}
@@ -933,6 +995,7 @@
\setinterfaceconstant{veroffset}{kopoffset}
\setinterfaceconstant{vfil}{vfil}
\setinterfaceconstant{voffset}{voffset}
+\setinterfaceconstant{vonsep}{vonsep}
\setinterfaceconstant{way}{wijze}
\setinterfaceconstant{wfactor}{bfactor}
\setinterfaceconstant{white}{wit}
@@ -1261,10 +1324,6 @@
\setinterfacecommand{outeredgewidth}{buitenrandbreedte}
\setinterfacecommand{outermargindistance}{buitenmargeafstand}
\setinterfacecommand{outermarginwidth}{buitenmargebreedte}
-\setinterfacecommand{overbar}{overstreep}
-\setinterfacecommand{overbars}{overstrepen}
-\setinterfacecommand{overstrike}{doorstreep}
-\setinterfacecommand{overstrikes}{doorstrepen}
\setinterfacecommand{packed}{opelkaar}
\setinterfacecommand{page}{pagina}
\setinterfacecommand{pagedepth}{paginadiepte}
@@ -1599,8 +1658,6 @@
\setinterfacecommand{type}{type}
\setinterfacecommand{typebuffer}{typebuffer}
\setinterfacecommand{typefile}{typefile}
-\setinterfacecommand{underbar}{onderstreep}
-\setinterfacecommand{underbars}{onderstrepen}
\setinterfacecommand{unitmeaning}{betekenis}
\setinterfacecommand{unknown}{onbekend}
\setinterfacecommand{useJSscripts}{gebruikJSscripts}
diff --git a/Master/texmf-dist/tex/context/base/mult-ro.tex b/Master/texmf-dist/tex/context/base/mult-ro.tex
index ece67fead09..738e49f7219 100644
--- a/Master/texmf-dist/tex/context/base/mult-ro.tex
+++ b/Master/texmf-dist/tex/context/base/mult-ro.tex
@@ -75,6 +75,7 @@
\setinterfacevariable{atmargin}{lamargine}
\setinterfacevariable{atpage}{lapagina}
\setinterfacevariable{august}{august}
+\setinterfacevariable{author}{autor}
\setinterfacevariable{auto}{auto}
\setinterfacevariable{autointro}{autointro}
\setinterfacevariable{back}{inapot}
@@ -83,7 +84,10 @@
\setinterfacevariable{backpart}{epilog}
\setinterfacevariable{backspace}{spatiuspate}
\setinterfacevariable{backward}{inapoi}
+\setinterfacevariable{bbl}{bbl}
\setinterfacevariable{before}{inainte}
+\setinterfacevariable{begin}{begin}
+\setinterfacevariable{bib}{bib}
\setinterfacevariable{big}{mare}
\setinterfacevariable{bigbodyfont}{bigbodyfont}
\setinterfacevariable{bigpreference}{preferintamare}
@@ -108,6 +112,7 @@
\setinterfacevariable{chapter}{capitol}
\setinterfacevariable{character}{caracter}
\setinterfacevariable{characters}{caractere}
+\setinterfacevariable{cite}{cite}
\setinterfacevariable{color}{culoare}
\setinterfacevariable{column}{coloana}
\setinterfacevariable{columns}{coloane}
@@ -133,9 +138,11 @@
\setinterfacevariable{display}{display}
\setinterfacevariable{dot}{punct}
\setinterfacevariable{doublesided}{douafete}
+\setinterfacevariable{down}{down}
\setinterfacevariable{each}{fiecare}
\setinterfacevariable{edge}{bordura}
\setinterfacevariable{empty}{gol}
+\setinterfacevariable{end}{end}
\setinterfacevariable{endnote}{endnote}
\setinterfacevariable{enumeration}{enumerare}
\setinterfacevariable{environment}{mediu}
@@ -265,11 +272,15 @@
\setinterfacevariable{mathcases}{mathcases}
\setinterfacevariable{mathmatrix}{mathmatrix}
\setinterfacevariable{max}{max}
+\setinterfacevariable{maxdepth}{maxdepth}
+\setinterfacevariable{maxheight}{maxheight}
+\setinterfacevariable{maxwidth}{maxwidth}
\setinterfacevariable{may}{mai}
\setinterfacevariable{mediaeval}{medieval}
\setinterfacevariable{medium}{mediu}
\setinterfacevariable{middle}{centru}
\setinterfacevariable{min}{min}
+\setinterfacevariable{mindepth}{mindepth}
\setinterfacevariable{minheight}{inaltimeminima}
\setinterfacevariable{minwidth}{latimeminima}
\setinterfacevariable{mirrored}{oglindit}
@@ -317,8 +328,12 @@
\setinterfacevariable{outer}{extern}
\setinterfacevariable{outeredge}{outeredge}
\setinterfacevariable{outermargin}{outermargin}
+\setinterfacevariable{overbar}{barasus}
+\setinterfacevariable{overbars}{supralinie}
\setinterfacevariable{overlay}{overlay}
\setinterfacevariable{overprint}{overprint}
+\setinterfacevariable{overstrike}{liniepeste}
+\setinterfacevariable{overstrikes}{liniipeste}
\setinterfacevariable{packed}{impachetat}
\setinterfacevariable{page}{pagina}
\setinterfacevariable{pagecomment}{comentariupagina}
@@ -386,6 +401,7 @@
\setinterfacevariable{serried}{serried}
\setinterfacevariable{setups}{setari}
\setinterfacevariable{sheet}{sheet}
+\setinterfacevariable{short}{short}
\setinterfacevariable{singlesided}{ofata}
\setinterfacevariable{slanted}{inclinat}
\setinterfacevariable{slantedbold}{inclinataldin}
@@ -410,6 +426,7 @@
\setinterfacevariable{spot}{spot}
\setinterfacevariable{standard}{standard}
\setinterfacevariable{start}{start}
+\setinterfacevariable{starter}{starter}
\setinterfacevariable{sticker}{sticker}
\setinterfacevariable{stop}{stop}
\setinterfacevariable{stopper}{stopper}
@@ -471,10 +488,13 @@
\setinterfacevariable{type}{type}
\setinterfacevariable{typing}{typing}
\setinterfacevariable{unavailable}{nedisponibil}
+\setinterfacevariable{underbar}{sublinie}
+\setinterfacevariable{underbars}{sublinii}
\setinterfacevariable{unit}{unitate}
\setinterfacevariable{units}{unitati}
\setinterfacevariable{unknown}{necunoscut}
\setinterfacevariable{unpacked}{despachetat}
+\setinterfacevariable{up}{up}
\setinterfacevariable{url}{url}
\setinterfacevariable{used}{folosit}
\setinterfacevariable{value}{valoare}
@@ -502,12 +522,21 @@
\setinterfaceconstant{align}{aliniere}
\setinterfaceconstant{aligncharacter}{aliniazacaracter}
\setinterfaceconstant{alignmentcharacter}{alierecaracter}
+\setinterfaceconstant{alignsymbol}{alignsymbol}
\setinterfaceconstant{aligntitle}{alinieretitlu}
\setinterfaceconstant{alternative}{alternativ}
+\setinterfaceconstant{andtext}{andtext}
\setinterfaceconstant{apa}{apa}
\setinterfaceconstant{arrow}{sageata}
+\setinterfaceconstant{artauthor}{artauthor}
+\setinterfaceconstant{artauthoretaldisplay}{artauthoretaldisplay}
+\setinterfaceconstant{artauthoretallimit}{artauthoretallimit}
+\setinterfaceconstant{artauthoretaltext}{artauthoretaltext}
\setinterfaceconstant{at}{la}
\setinterfaceconstant{author}{autor}
+\setinterfaceconstant{authoretaldisplay}{authoretaldisplay}
+\setinterfaceconstant{authoretallimit}{authoretallimit}
+\setinterfaceconstant{authoretaltext}{authoretaltext}
\setinterfaceconstant{auto}{auto}
\setinterfaceconstant{autofile}{autofile}
\setinterfaceconstant{autofocus}{autofocus}
@@ -576,6 +605,7 @@
\setinterfaceconstant{cutspace}{cutspace}
\setinterfaceconstant{dash}{dash}
\setinterfaceconstant{dat}{dat}
+\setinterfaceconstant{database}{database}
\setinterfaceconstant{date}{data}
\setinterfaceconstant{deepnumbercommand}{deepnumbercommand}
\setinterfaceconstant{deeptextcommand}{deeptextcommand}
@@ -594,12 +624,17 @@
\setinterfaceconstant{dy}{dy}
\setinterfaceconstant{edge}{bordura}
\setinterfaceconstant{edgedistance}{distantabordura}
+\setinterfaceconstant{editor}{editor}
+\setinterfaceconstant{editoretaldisplay}{editoretaldisplay}
+\setinterfaceconstant{editoretallimit}{editoretallimit}
+\setinterfaceconstant{editoretaltext}{editoretaltext}
\setinterfaceconstant{empty}{gol}
\setinterfaceconstant{equalheight}{equalheight}
\setinterfaceconstant{equalwidth}{equalwidth}
\setinterfaceconstant{escape}{escape}
\setinterfaceconstant{evenmargin}{marginepara}
\setinterfaceconstant{expansion}{expansiune}
+\setinterfaceconstant{export}{export}
\setinterfaceconstant{extras}{extras}
\setinterfaceconstant{factor}{factor}
\setinterfaceconstant{fallback}{fallback}
@@ -610,6 +645,8 @@
\setinterfaceconstant{fieldoffset}{offsetcamp}
\setinterfaceconstant{file}{fisier}
\setinterfaceconstant{filtercommand}{filtercommand}
+\setinterfaceconstant{finalnamesep}{finalnamesep}
+\setinterfaceconstant{firstnamesep}{firstnamesep}
\setinterfaceconstant{focus}{focus}
\setinterfaceconstant{focusin}{focusin}
\setinterfaceconstant{focusout}{focusout}
@@ -631,6 +668,7 @@
\setinterfaceconstant{global}{global}
\setinterfaceconstant{grid}{grid}
\setinterfaceconstant{hang}{suspenda}
+\setinterfaceconstant{headalign}{headalign}
\setinterfaceconstant{headcolor}{culoaretitlu}
\setinterfaceconstant{headcommand}{headcommand}
\setinterfaceconstant{headconversion}{conversietitlu}
@@ -658,14 +696,18 @@
\setinterfaceconstant{inner}{intern}
\setinterfaceconstant{innermargin}{innermargin}
\setinterfaceconstant{inputfile}{inputfile}
+\setinterfaceconstant{intent}{intent}
\setinterfaceconstant{interaction}{interactiune}
\setinterfaceconstant{interlinespace}{spatiereinterliniara}
\setinterfaceconstant{itemalign}{itemalign}
\setinterfaceconstant{items}{elemente}
+\setinterfaceconstant{juniorsep}{juniorsep}
\setinterfaceconstant{ken}{ken}
\setinterfaceconstant{keyexpansion}{keyexpansion}
\setinterfaceconstant{keyword}{keyword}
\setinterfaceconstant{label}{eticheta}
+\setinterfaceconstant{lastnamesep}{lastnamesep}
+\setinterfaceconstant{lastpubsep}{lastpubsep}
\setinterfaceconstant{left}{stanga}
\setinterfaceconstant{leftcolor}{culoarestanga}
\setinterfaceconstant{leftcompoundhyphen}{leftcompoundhyphen}
@@ -705,8 +747,10 @@
\setinterfaceconstant{marking}{marcaje}
\setinterfaceconstant{marstyle}{stilmarcaj}
\setinterfaceconstant{max}{max}
+\setinterfaceconstant{maxdepth}{maxdepth}
\setinterfaceconstant{maxheight}{inaltimemaxima}
\setinterfaceconstant{maxwidth}{latimemaxima}
+\setinterfaceconstant{maybeyear}{maybeyear}
\setinterfaceconstant{menu}{meniu}
\setinterfaceconstant{method}{metoda}
\setinterfaceconstant{middle}{mijloc}
@@ -717,8 +761,10 @@
\setinterfaceconstant{mindepth}{mindepth}
\setinterfaceconstant{minheight}{inaltimeminima}
\setinterfaceconstant{minwidth}{latimeminima}
+\setinterfaceconstant{monthconversion}{monthconversion}
\setinterfaceconstant{n}{n}
\setinterfaceconstant{name}{nume}
+\setinterfaceconstant{namesep}{namesep}
\setinterfaceconstant{nbottom}{njos}
\setinterfaceconstant{nc}{nc}
\setinterfaceconstant{next}{urmatorul}
@@ -742,6 +788,7 @@
\setinterfaceconstant{numberseparator}{separatornumar}
\setinterfaceconstant{numberseparatorset}{numberseparatorset}
\setinterfaceconstant{numberset}{numberset}
+\setinterfaceconstant{numberstarter}{numberstarter}
\setinterfaceconstant{numberstopper}{numberstopper}
\setinterfaceconstant{numberstyle}{stilnumar}
\setinterfaceconstant{numberwidth}{numberwidth}
@@ -754,7 +801,9 @@
\setinterfaceconstant{openaction}{actiunedeschidere}
\setinterfaceconstant{openpageaction}{actiunedeschiderepagina}
\setinterfaceconstant{option}{optiune}
+\setinterfaceconstant{order}{order}
\setinterfaceconstant{orientation}{orientation}
+\setinterfaceconstant{otherstext}{otherstext}
\setinterfaceconstant{outermargin}{outermargin}
\setinterfaceconstant{overprint}{overprint}
\setinterfaceconstant{ownnumber}{numarpropriu}
@@ -772,10 +821,12 @@
\setinterfaceconstant{pageprefixsegments}{pageprefixsegments}
\setinterfaceconstant{pageprefixseparatorset}{pageprefixseparatorset}
\setinterfaceconstant{pageprefixset}{pageprefixset}
+\setinterfaceconstant{pageprefixstarter}{pageprefixstarter}
\setinterfaceconstant{pageprefixstopper}{pageprefixstopper}
\setinterfaceconstant{pagesegments}{pagesegments}
\setinterfaceconstant{pageseparatorset}{pageseparatorset}
\setinterfaceconstant{pageset}{pageset}
+\setinterfaceconstant{pagestarter}{pagestarter}
\setinterfaceconstant{pagestate}{pagestate}
\setinterfaceconstant{pagestopper}{pagestopper}
\setinterfaceconstant{pagestyle}{stilpagina}
@@ -793,16 +844,20 @@
\setinterfaceconstant{prefixsegments}{prefixsegments}
\setinterfaceconstant{prefixseparatorset}{prefixseparatorset}
\setinterfaceconstant{prefixset}{prefixset}
+\setinterfaceconstant{prefixstarter}{prefixstarter}
\setinterfaceconstant{prefixstopper}{prefixstopper}
\setinterfaceconstant{preset}{preset}
\setinterfaceconstant{preview}{previzualizare}
\setinterfaceconstant{previous}{precendent}
\setinterfaceconstant{previousnumber}{numarprecedent}
\setinterfaceconstant{process}{process}
+\setinterfaceconstant{pubsep}{pubsep}
\setinterfaceconstant{radius}{raza}
\setinterfaceconstant{random}{aleator}
+\setinterfaceconstant{range}{range}
\setinterfaceconstant{reduction}{reducere}
\setinterfaceconstant{ref}{ref}
+\setinterfaceconstant{refcommand}{refcommand}
\setinterfaceconstant{reference}{referinta}
\setinterfaceconstant{referenceprefix}{referenceprefix}
\setinterfaceconstant{referencing}{referinta}
@@ -836,6 +891,7 @@
\setinterfaceconstant{rulethickness}{grosimerigla}
\setinterfaceconstant{samepage}{aceeasipagina}
\setinterfaceconstant{sample}{exemplu}
+\setinterfaceconstant{samplesize}{samplesize}
\setinterfaceconstant{saveinlist}{saveinlist}
\setinterfaceconstant{scale}{scala}
\setinterfaceconstant{scope}{scop}
@@ -848,6 +904,7 @@
\setinterfaceconstant{sectionsegments}{sectionsegments}
\setinterfaceconstant{sectionseparatorset}{sectionseparatorset}
\setinterfaceconstant{sectionset}{sectionset}
+\setinterfaceconstant{sectionstarter}{sectionstarter}
\setinterfaceconstant{sectionstopper}{sectionstopper}
\setinterfaceconstant{separator}{separator}
\setinterfaceconstant{set}{set}
@@ -860,6 +917,7 @@
\setinterfaceconstant{sign}{semn}
\setinterfaceconstant{size}{dimensiune}
\setinterfaceconstant{small}{mic}
+\setinterfaceconstant{sort}{sort}
\setinterfaceconstant{sorttype}{sorttype}
\setinterfaceconstant{source}{sursa}
\setinterfaceconstant{space}{spatiu}
@@ -874,16 +932,19 @@
\setinterfaceconstant{spot}{spot}
\setinterfaceconstant{stack}{stack}
\setinterfaceconstant{start}{start}
+\setinterfaceconstant{starter}{starter}
\setinterfaceconstant{state}{stare}
\setinterfaceconstant{step}{pas}
\setinterfaceconstant{stop}{stop}
\setinterfaceconstant{stopper}{stopper}
\setinterfaceconstant{stretch}{dilatat}
+\setinterfaceconstant{strip}{strip}
\setinterfaceconstant{strut}{strut}
\setinterfaceconstant{style}{stil}
\setinterfaceconstant{sub}{sub}
\setinterfaceconstant{subtitle}{subtitlu}
\setinterfaceconstant{suffix}{suffix}
+\setinterfaceconstant{surnamesep}{surnamesep}
\setinterfaceconstant{sx}{sx}
\setinterfaceconstant{sy}{sy}
\setinterfaceconstant{symalign}{symaliniere}
@@ -923,6 +984,7 @@
\setinterfaceconstant{topoffset}{offsetsus}
\setinterfaceconstant{topspace}{spatiusus}
\setinterfaceconstant{topstate}{staresus}
+\setinterfaceconstant{totalnumber}{totalnumber}
\setinterfaceconstant{type}{type}
\setinterfaceconstant{unit}{unitate}
\setinterfaceconstant{unknownreference}{referintanecunoscuta}
@@ -933,6 +995,7 @@
\setinterfaceconstant{veroffset}{veroffset}
\setinterfaceconstant{vfil}{vfil}
\setinterfaceconstant{voffset}{voffset}
+\setinterfaceconstant{vonsep}{vonsep}
\setinterfaceconstant{way}{mod}
\setinterfaceconstant{wfactor}{factorw}
\setinterfaceconstant{white}{alb}
@@ -1261,10 +1324,6 @@
\setinterfacecommand{outeredgewidth}{outeredgewidth}
\setinterfacecommand{outermargindistance}{outermargindistance}
\setinterfacecommand{outermarginwidth}{outermarginwidth}
-\setinterfacecommand{overbar}{barasus}
-\setinterfacecommand{overbars}{supralinie}
-\setinterfacecommand{overstrike}{liniepeste}
-\setinterfacecommand{overstrikes}{liniipeste}
\setinterfacecommand{packed}{impachetat}
\setinterfacecommand{page}{pagina}
\setinterfacecommand{pagedepth}{pagedepth}
@@ -1599,8 +1658,6 @@
\setinterfacecommand{type}{type}
\setinterfacecommand{typebuffer}{scriebuffer}
\setinterfacecommand{typefile}{typefile}
-\setinterfacecommand{underbar}{sublinie}
-\setinterfacecommand{underbars}{sublinii}
\setinterfacecommand{unitmeaning}{numeunitate}
\setinterfacecommand{unknown}{necunoscut}
\setinterfacecommand{useJSscripts}{folosestescriptJS}
diff --git a/Master/texmf-dist/tex/context/base/mult-sys.tex b/Master/texmf-dist/tex/context/base/mult-sys.tex
index 2fd74251c74..d48ce0a94e6 100644
--- a/Master/texmf-dist/tex/context/base/mult-sys.tex
+++ b/Master/texmf-dist/tex/context/base/mult-sys.tex
@@ -50,6 +50,7 @@
\definesystemconstant {hungarian} \definesystemconstant {hu}
\definesystemconstant {italian} \definesystemconstant {it}
\definesystemconstant {latin} \definesystemconstant {la}
+\definesystemconstant {lithuanian} \definesystemconstant {lt}
\definesystemconstant {bokmal} \definesystemconstant {nb} \definesystemconstant {norwegian} \definesystemconstant {no}
\definesystemconstant {nynorsk} \definesystemconstant {nn}
\definesystemconstant {polish} \definesystemconstant {pl}
@@ -63,6 +64,7 @@
\definesystemconstant {spanish} \definesystemconstant {es}
\definesystemconstant {swedish} \definesystemconstant {sv}
\definesystemconstant {turkish} \definesystemconstant {tr}
+\definesystemconstant {turkmen} \definesystemconstant {tk}
\definesystemconstant {gbenglish} \definesystemconstant {gb} \definesystemconstant {ukenglish} \definesystemconstant {uk}
\definesystemconstant {usenglish} \definesystemconstant {us}
\definesystemconstant {ukrainian} \definesystemconstant {ua}
@@ -81,15 +83,45 @@
\definesystemconstant {Slanted}
\definesystemconstant {Unicode}
-\definesystemconstant {Serif} \definesystemconstant {Regular}
-\definesystemconstant {Sans} \definesystemconstant {Support}
-\definesystemconstant {Mono} \definesystemconstant {Type}
+\definesystemconstant {Serif} \definesystemconstant {Regular}
+\definesystemconstant {Sans} \definesystemconstant {Support}
+\definesystemconstant {Mono} \definesystemconstant {Type}
+\definesystemconstant {Math}
+\definesystemconstant {Handwriting}
+\definesystemconstant {Calligraphy}
+\definesystemconstant {Casual}
+
+\definesystemconstant {SerifBold} \definesystemconstant {SansBold} \definesystemconstant {MonoBold}
+\definesystemconstant {SerifItalic} \definesystemconstant {SansItalic} \definesystemconstant {MonoItalic}
+\definesystemconstant {SerifBoldItalic} \definesystemconstant {SansBoldItalic} \definesystemconstant {MonoBoldItalic}
+\definesystemconstant {SerifSlanted} \definesystemconstant {SansSlanted} \definesystemconstant {MonoSlanted}
+\definesystemconstant {SerifBoldSlanted} \definesystemconstant {SansBoldSlanted} \definesystemconstant {MonoBoldSlanted}
+\definesystemconstant {SerifCaps} \definesystemconstant {SansCaps} \definesystemconstant {MonoCaps}
\definesystemconstant {Normal}
\definesystemconstant {Caps}
\definesystemconstant {mnem} % kind of generic short tag
+\definesystemconstant {file}
+\definesystemconstant {name}
+\definesystemconstant {spec}
+
+\definesystemconstant {serif}
+\definesystemconstant {sans}
+\definesystemconstant {mono}
+\definesystemconstant {math}
+\definesystemconstant {handwriting}
+\definesystemconstant {calligraphy}
+\definesystemconstant {casual}
+\definesystemconstant {fax}
+
+\definesystemconstant {fallback}
+
+\definesystemconstant {none}
+\definesystemconstant {default}
+\definesystemconstant {smallcaps}
+
%D As the name of their define command states, the next set of
%D constants is used in the message macro's.
@@ -119,6 +151,7 @@
\definemessageconstant {versions}
\definemessageconstant {metapost}
\definemessageconstant {chemicals}
+\definemessageconstant {publications}
%D Net come some \CONTEXT\ constants, used in the definition
%D of private commands:
@@ -157,6 +190,19 @@
\definesystemconstant {hasnumber}
\definesystemconstant {hastitle}
\definesystemconstant {hascaption}
+\definesystemconstant {haslevel}
+
+\definesystemconstant {mkiv}
+\definesystemconstant {mkii}
+\definesystemconstant {entities}
+
+\definesystemconstant {normal}
+\definesystemconstant {bold}
+\definesystemconstant {italic}
+\definesystemconstant {slanted}
+
+\definesystemconstant {default}
+\definesystemconstant {smallcaps}
%D A more experienced \TEX\ user will recognize the next four
%D constants. We need these because font-definitions are
@@ -180,6 +226,7 @@
\definesystemconstant {mapping}
\definesystemconstant {language}
\definesystemconstant {patterns}
+\definesystemconstant {rname}
\definesystemconstant {rscale}
\definesystemconstant {handling}
\definesystemconstant {features}
@@ -212,6 +259,12 @@
\definesystemconstant {sp}
\definesystemconstant {bp}
\definesystemconstant {in}
+\definesystemconstant {pc}
+\definesystemconstant {cm}
+\definesystemconstant {dd}
+\definesystemconstant {cc}
+\definesystemconstant {nd}
+\definesystemconstant {nc}
%D These constants are used for internal and utility
%D commands.
@@ -386,6 +439,7 @@
\definesystemvariable {ab} % AlignedBoxes
\definesystemvariable {ac} % ACcent
+\definesystemvariable {ae} % AttributEs
\definesystemvariable {ag} % AchterGrond
\definesystemvariable {al} % ALinea's
\definesystemvariable {am} % interActieMenu
@@ -450,6 +504,7 @@
\definesystemvariable {fl} % Floats
\definesystemvariable {fm} % ForMules
\definesystemvariable {fn} % subformulas
+\definesystemvariable {fo} % xml FO
\definesystemvariable {fp} % FilegroeP
\definesystemvariable {fq} % Features
\definesystemvariable {fr} % ForM
@@ -457,12 +512,15 @@
\definesystemvariable {ft} % FonTs
\definesystemvariable {fu} % FontSolution
\definesystemvariable {fv} % FontVariant
+\definesystemvariable {fw} % simpleFonts by Wolfgang
\definesystemvariable {fx} % FoXet
+\definesystemvariable {gr} % GRid
\definesystemvariable {ha} % HAng
\definesystemvariable {hs} % HSpace
\definesystemvariable {ht} % HiddenText
\definesystemvariable {ia} % Interactie
\definesystemvariable {ib} % InteractieBalk
+\definesystemvariable {ic} % ICc profiles
\definesystemvariable {id} % Index
\definesystemvariable {ig} % ItemGroup
\definesystemvariable {ih} % InHoudsopgave
@@ -508,12 +566,14 @@
\definesystemvariable {mh} % MultilingualHead
\definesystemvariable {mk} % MarKering
\definesystemvariable {ml} % MultilingualLabel
+\definesystemvariable {mm} % MultilingualMath
\definesystemvariable {mt} % inline MaTh
\definesystemvariable {mo} % Math Options
\definesystemvariable {mp} % MetaPost
\definesystemvariable {mx} % MatriX
\definesystemvariable {ng} % parbuilders
\definesystemvariable {nh} % new heads (structure)
+\definesystemvariable {nn} % structurenumbering
\definesystemvariable {nm} % Nummering
\definesystemvariable {np} % NaastPlaatsen
\definesystemvariable {nr} % Nummeren
@@ -530,7 +590,7 @@
\definesystemvariable {ov} % OVerlay
\definesystemvariable {ox} % OffsetBox
\definesystemvariable {pa} % PAlet
-\definesystemvariable {pb} % PuBlicatie
+\definesystemvariable {pb} % PuBlication
\definesystemvariable {pc} % PageComment
\definesystemvariable {pe} % PagEhandler
\definesystemvariable {pf} % ProFiel
@@ -544,6 +604,8 @@
\definesystemvariable {ps} % PoSitioneren
\definesystemvariable {pt} % PageshifT
\definesystemvariable {py} % PropertYs
+\definesystemvariable {pv} % PublicationVariable
+\definesystemvariable {ra} % RAise
\definesystemvariable {rd} % RenDering
\definesystemvariable {rf} % ReFereren
\definesystemvariable {rg} % ReGel
@@ -590,6 +652,7 @@
\definesystemvariable {tm} % TypesynonyM
\definesystemvariable {tp} % TyPen
\definesystemvariable {tx} % TeXtflow
+\definesystemvariable {to} % TOlerance
\definesystemvariable {tr} % TRacer
\definesystemvariable {ts} % TypeScript
\definesystemvariable {tt} % TabulaTe
@@ -598,12 +661,15 @@
\definesystemvariable {ui} % UItvoer
\definesystemvariable {ur} % URl
\definesystemvariable {up} % Utility Program
+\definesystemvariable {va} % VspAce
\definesystemvariable {ve} % VErsie
\definesystemvariable {vn} % VoetNoten
+\definesystemvariable {vs} % VSpacing
\definesystemvariable {vt} % VerTical
\definesystemvariable {wr} % WitRuimte
\definesystemvariable {wl} % WordList
\definesystemvariable {xf} % XML File
+\definesystemvariable {xl} % lxml (mkiv)
\definesystemvariable {xm} % xml (mkiv)
\definesystemvariable {xp} % XML Processing
\definesystemvariable {xy} % schaal
@@ -680,6 +746,7 @@
\definefileconstant {patternsextension} {pat}
\definefileconstant {hyphensextension} {hyp}
\definefileconstant {fontmapextension} {map}
+\definefileconstant {bibextension} {bbl}
%D These files are loaded at start||up. They may contain system
%D specific setups (or calls to other files), old macro's, to
diff --git a/Master/texmf-dist/tex/context/base/node-aux.lua b/Master/texmf-dist/tex/context/base/node-aux.lua
new file mode 100644
index 00000000000..9ed71fd728c
--- /dev/null
+++ b/Master/texmf-dist/tex/context/base/node-aux.lua
@@ -0,0 +1,145 @@
+if not modules then modules = { } end modules ['node-aux'] = {
+ version = 1.001,
+ comment = "companion to node-spl.mkiv",
+ author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
+ copyright = "PRAGMA ADE / ConTeXt Development Team",
+ license = "see context related readme files"
+}
+
+local gsub, format = string.gsub, string.format
+
+local free_node = node.free
+local hpack_nodes = node.hpack
+local node_fields = node.fields
+
+function nodes.repack_hlist(list,...)
+ local temp, b = hpack_nodes(list,...)
+ list = temp.list
+ temp.list = nil
+ free_node(temp)
+ return list, b
+end
+
+function nodes.merge(a,b)
+ if a and b then
+ local t = node.fields(a.id)
+ for i=3,#t do
+ local name = t[i]
+ a[name] = b[name]
+ end
+ end
+ return a, b
+end
+
+local fields, whatsitfields = { }, { }
+
+for k, v in next, node.types() do
+ if v == "whatsit" then
+ fields[k], fields[v] = { }, { }
+ for kk, vv in next, node.whatsits() do
+ local f = node_fields(k,kk)
+ whatsitfields[kk], whatsitfields[vv] = f, f
+ end
+ else
+ local f = node_fields(k)
+ fields[k], fields[v] = f, f
+ end
+end
+
+nodes.fields, nodes.whatsitfields = fields, whatsitfields
+
+function nodes.info(n)
+ local id = n.id
+ local tp = node.type(id)
+ local list = (tp == "whatsit" and whatsitfields[n.subtype]) or fields[id]
+ logs.report(format("%14s","type"),tp)
+ for k,v in next, list do
+ logs.report(format("%14s",v),gsub(gsub(tostring(n[v]),"%s+"," "),"node ",""))
+ end
+end
+
+-- history:
+--
+-- local function cp_skipable(a,id) -- skipable nodes at the margins during character protrusion
+-- return (
+-- id ~= glyph_node
+-- or id == ins_node
+-- or id == mark_node
+-- or id == adjust_node
+-- or id == penalty_node
+-- or (id == glue_node and a.spec.writable)
+-- or (id == disc_node and a.pre == nil and a.post == nil and a.replace == nil)
+-- or (id == math_node and a.surround == 0)
+-- or (id == kern_node and (a.kern == 0 or a.subtype == NORMAL))
+-- or (id == hlist_node and a.width == 0 and a.height == 0 and a.depth == 0 and a.list == nil)
+-- or (id == whatsit_node and a.subtype ~= pdf_refximage_node and a.subtype ~= pdf_refxform_node)
+-- )
+-- end
+--
+-- local function glyph_width(a)
+-- local ch = chardata[a.font][a.char]
+-- return (ch and ch.width) or 0
+-- end
+--
+-- local function glyph_total(a)
+-- local ch = chardata[a.font][a.char]
+-- return (ch and (ch.height+ch.depth)) or 0
+-- end
+--
+-- local function non_discardable(a) -- inline
+-- return a.id < math_node -- brrrr
+-- end
+--
+-- local function calculate_badness(t,s)
+-- if t == 0 then
+-- return 0
+-- elseif s <= 0 then
+-- return INF_BAD
+-- else
+-- local r
+-- if t <= 7230584 then
+-- r = t * 297 / s
+-- elseif s >= 1663497 then
+-- r = t / floor(s / 297)
+-- else
+-- r = t
+-- end
+-- r = floor(r)
+-- if r > 1290 then
+-- return INF_BAD
+-- else
+-- return floor((r * r * r + 0x20000) / 0x40000) -- 0400000 / 01000000
+-- end
+-- end
+-- end
+--
+-- left-overs
+--
+-- local function round_xn_over_d(x, n, d)
+-- local positive -- was x >= 0
+-- if x >= 0 then
+-- positive = true
+-- else
+-- x = -x
+-- positive = false
+-- end
+-- local t = floor(x % 0x8000) * n -- 0100000
+-- local f = floor(t / 0x8000) -- 0100000
+-- local u = floor(x / 0x8000) * n + f -- 0100000
+-- local v = floor(u % d) * 0x8000 + f -- 0100000
+-- if floor(u / d) >= 0x8000 then -- 0100000
+-- logs.error("parbuilder",'arith_error')
+-- else
+-- u = 0x8000 * floor(u / d) + floor(v / d) -- 0100000
+-- end
+-- v = floor(v % d)
+-- if 2*v >= d then
+-- u = u + 1
+-- end
+-- if positive then
+-- return u
+-- else
+-- return -u
+-- end
+-- end
+
diff --git a/Master/texmf-dist/tex/context/base/node-bck.lua b/Master/texmf-dist/tex/context/base/node-bck.lua
index 6a01294f84d..94fbac85fd4 100644
--- a/Master/texmf-dist/tex/context/base/node-bck.lua
+++ b/Master/texmf-dist/tex/context/base/node-bck.lua
@@ -1,11 +1,14 @@
if not modules then modules = { } end modules ['node-bck'] = {
version = 1.001,
- comment = "companion to node-bck.tex",
+ comment = "companion to node-bck.mkiv",
author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
copyright = "PRAGMA ADE / ConTeXt Development Team",
license = "see context related readme files"
}
+-- beware, this one takes quite some runtime, so we need a status flag
+-- maybe some page related state
+
local hlist = node.id("hlist")
local vlist = node.id("vlist")
diff --git a/Master/texmf-dist/tex/context/base/node-bck.mkiv b/Master/texmf-dist/tex/context/base/node-bck.mkiv
index 758e598e836..41a6da2cb48 100644
--- a/Master/texmf-dist/tex/context/base/node-bck.mkiv
+++ b/Master/texmf-dist/tex/context/base/node-bck.mkiv
@@ -84,14 +84,14 @@
\global\maxtabularcolorcolumn\tabulatecolumn
\fi
\setxvalue{\??tt:c:\the\tabulatecolumn}{#1}%
- \dosetattribute{background}\plusone
+ \attribute\backgroundattribute\plusone
\faststartcolor[#1]\strut\char0\faststopcolor
\endgroup}
\def\repeatsettabulatecolor
{\begingroup
\ifcsname\??tt:c:\the\tabulatecolumn\endcsname
- \dosetattribute{background}\plusone
+ \attribute\backgroundattribute\plusone
\faststartcolor[\csname\??tt:c:\the\tabulatecolumn\endcsname]\strut\char0\faststopcolor
\fi
\endgroup}
diff --git a/Master/texmf-dist/tex/context/base/node-dir.lua b/Master/texmf-dist/tex/context/base/node-dir.lua
new file mode 100644
index 00000000000..05e4835e507
--- /dev/null
+++ b/Master/texmf-dist/tex/context/base/node-dir.lua
@@ -0,0 +1,308 @@
+if not modules then modules = { } end modules ['node-mir'] = {
+ version = 1.001,
+ comment = "companion to node-ini.mkiv",
+ author = "Taco Hoekwater and Hans Hagen",
+ copyright = "PRAGMA ADE / ConTeXt Development Team",
+ license = "see context related readme files"
+}
+
+--[[
+<p>In the process of cleaning up the lua variant of the parbuilder
+we ran into a couple of functions (translated c macros) that were
+somewhat inefficient. More convenient is to use hashes although at
+the c-end still macros are used. In the process directions.h was
+adapted and now has the mappings as comments. This lua file is
+based on that file.
+]]--
+
+
+nodes = nodes or { }
+
+nodes.is_mirrored = {
+ -- TLT = false,
+ -- TRT = false,
+ -- LTL = false,
+ -- RTT = false,
+}
+
+nodes.is_rotated = {
+ -- TLT = false,
+ -- TRT = false,
+ -- LTL = false,
+ RTT = true, ["+RTT"] = true,
+}
+
+nodes.textdir_is_parallel = {
+ TLT = {
+ TLT = true, ["+TLT"] = true,
+ TRT = true, ["+TRT"] = true,
+ -- LTL = false,
+ -- RTT = false,
+ },
+ TRT= {
+ TLT = true, ["+TLT"] = true,
+ TRT = true, ["+TRT"] = true,
+ -- LTL = false,
+ -- RTT = false,
+ },
+ LTL = {
+ -- TLT = false,
+ -- TRT = false,
+ LTL = true, ["+LTL"] = true,
+ RTT = true, ["+RTT"] = true,
+ },
+ RTT = {
+ -- TLT = false,
+ -- TRT = false,
+ LTL = true, ["+LTL"] = true,
+ RTT = true, ["+RTT"] = true,
+ }
+}
+
+nodes.pardir_is_parallel = {
+ TLT = {
+ TLT = true, ["+TLT"] = true,
+ TRT = true, ["+TRT"] = true,
+ -- LTL = false,
+ -- RTT = false,
+ },
+ TRT = {
+ TLT = true, ["+TLT"] = true,
+ TRT = true, ["+TRT"] = true,
+ -- LTL = false,
+ -- RTT = false,
+ },
+ LTL = {
+ -- TLT = false,
+ -- TRT = false,
+ LTL = true, ["+LTL"] = true,
+ RTT = true, ["+RTT"] = true,
+ },
+ RTT = {
+ -- TLT = false,
+ -- TRT = false,
+ LTL = true, ["+LTL"] = true,
+ RTT = true, ["+RTT"] = true,
+ },
+}
+
+nodes.pardir_is_opposite = {
+ TLT = {
+ -- TLT = false,
+ -- TRT = false,
+ -- LTL = false,
+ -- RTT = false,
+ },
+ TRT = {
+ -- TLT = false,
+ -- TRT = false,
+ -- LTL = false,
+ -- RTT = false,
+ },
+ LTL = {
+ -- TLT = false,
+ -- TRT = false,
+ -- LTL = false,
+ RTT = true, ["+RTT"] = true,
+ },
+ RTT = {
+ -- TLT = false,
+ -- TRT = false,
+ LTL = true, ["+LTL"] = true,
+ -- RTT = false,
+ },
+}
+
+nodes.textdir_is_opposite = {
+ TLT = {
+ -- TLT = false,
+ TRT = true, ["+TRT"] = true,
+ -- LTL = false,
+ -- RTT = false,
+ },
+ TRT= {
+ TLT = true, ["+TLT"] = true,
+ -- TRT = false,
+ -- LTL = false,
+ -- RTT = false,
+ },
+ LTL = {
+ -- TLT = false,
+ -- TRT = false,
+ -- LTL = false,
+ -- RTT = false,
+ },
+ RTT = {
+ -- TLT = false,
+ -- TRT = false,
+ -- LTL = false,
+ -- RTT = false,
+ },
+}
+
+nodes.glyphdir_is_opposite = {
+ TLT = {
+ -- TLT = false,
+ -- TRT = false,
+ -- LTL = false,
+ -- RTT = false,
+ },
+ TRT= {
+ -- TLT = false,
+ -- TRT = false,
+ -- LTL = false,
+ -- RTT = false,
+ },
+ LTL = {
+ -- TLT = false,
+ -- TRT = false,
+ -- LTL = false,
+ -- RTT = false,
+ },
+ RTT = {
+ -- TLT = false,
+ -- TRT = false,
+ -- LTL = false,
+ -- RTT = false,
+ },
+}
+
+nodes.pardir_is_equal = {
+ TLT = {
+ TLT = true, ["+TLT"] = true,
+ TRT = true, ["+TRT"] = true,
+ -- LTL = false,
+ -- RTT = false,
+ },
+ TRT= {
+ TLT = true, ["+TLT"] = true,
+ TRT = true, ["+TRT"] = true,
+ -- LTL = false,
+ -- RTT = false,
+ },
+ LTL= {
+ -- TLT = false,
+ -- TRT = false,
+ LTL = true, ["+LTL"] = true,
+ -- RTT = false,
+ },
+ RTT= {
+ -- TLT = false,
+ -- TRT = false,
+ -- LTL = false,
+ RTT = true, ["+RTT"] = true,
+ },
+}
+
+nodes.textdir_is_equal = {
+ TLT = {
+ TLT = true, ["+TLT"] = true,
+ -- TRT = false,
+ -- LTL = false,
+ -- RTT = false,
+ },
+ TRT= {
+ -- TLT = false,
+ TRT = true, ["+TRT"] = true,
+ -- LTL = false,
+ -- RTT = false,
+ },
+ LTL = {
+ -- TLT = false,
+ -- TRT = false,
+ LTL = true, ["+LTL"] = true,
+ RTT = true, ["+RTT"] = true,
+ },
+ RTT = {
+ -- TLT = false,
+ -- TRT = false,
+ LTL = true, ["+LTL"] = true,
+ RTT = true, ["+RTT"] = true,
+ },
+}
+
+nodes.glyphdir_is_equal = {
+ TLT = {
+ TLT = true, ["+TLT"] = true,
+ TRT = true, ["+TRT"] = true,
+ -- LTL = false,
+ RTT = true, ["+RTT"] = true,
+ },
+ TRT= {
+ TLT = true, ["+TLT"] = true,
+ TRT = true, ["+TRT"] = true,
+ -- LTL = false,
+ RTT = true, ["+RTT"] = true,
+ },
+ LTL = {
+ -- TLT = false,
+ -- TRT = false,
+ LTL = true, ["+LTL"] = true,
+ -- RTT = false,
+ },
+ RTT = {
+ TLT = true, ["+TLT"] = true,
+ TRT = true, ["+TRT"] = true,
+ -- LTL = false,
+ RTT = true, ["+RTT"] = true,
+ },
+}
+
+nodes.partextdir_is_equal = {
+ TLT = {
+ -- TLT = false,
+ -- TRT = false,
+ LTL = true, ["+LTL"] = true,
+ RTT = true, ["+RTT"] = true,
+ },
+ TRT= {
+ -- TLT = false,
+ -- TRT = false,
+ LTL = true, ["+LTL"] = true,
+ RTT = true, ["+RTT"] = true,
+ },
+ LTL = {
+ TLT = true, ["+TLT"] = true,
+ -- TRT = false,
+ -- LTL = false,
+ -- RTT = false,
+ },
+ RTT = {
+ -- TLT = false,
+ TRT = true, ["+TRT"] = true,
+ -- LTL = false,
+ -- RTT = false,
+ },
+}
+
+nodes.textdir_is_is = {
+ TLT = true, ["+TLT"] = true,
+ -- TRT = false,
+ -- LTL = false,
+ -- RTT = false,
+}
+
+nodes.glyphdir_is_orthogonal = {
+ TLT = true, ["+TLT"] = true,
+ TRT = true, ["+TRT"] = true,
+ LTL = true, ["+LTL"] = true,
+ -- RTT = false
+}
+
+nodes.dir_is_pop = {
+ ["-TRT"] = true,
+ ["-TLT"] = true,
+ ["-LTL"] = true,
+ ["-RTT"] = true,
+}
+
+nodes.dir_negation = {
+ ["-TRT"] = "+TRT",
+ ["-TLT"] = "+TLT",
+ ["-LTL"] = "+LTL",
+ ["-RTT"] = "+RTT",
+ ["+TRT"] = "-TRT",
+ ["+TLT"] = "-TLT",
+ ["+LTL"] = "-LTL",
+ ["+RTT"] = "-RTT",
+}
diff --git a/Master/texmf-dist/tex/context/base/node-ext.lua b/Master/texmf-dist/tex/context/base/node-ext.lua
index b098829cd81..5c4eec8de11 100644
--- a/Master/texmf-dist/tex/context/base/node-ext.lua
+++ b/Master/texmf-dist/tex/context/base/node-ext.lua
@@ -1,6 +1,6 @@
if not modules then modules = { } end modules ['node-ext'] = {
version = 1.001,
- comment = "companion to node-ini.tex",
+ comment = "companion to node-ini.mkiv",
author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
copyright = "PRAGMA ADE / ConTeXt Development Team",
license = "see context related readme files"
diff --git a/Master/texmf-dist/tex/context/base/node-fin.lua b/Master/texmf-dist/tex/context/base/node-fin.lua
index e83a354f24c..c6e3be44815 100644
--- a/Master/texmf-dist/tex/context/base/node-fin.lua
+++ b/Master/texmf-dist/tex/context/base/node-fin.lua
@@ -1,6 +1,6 @@
if not modules then modules = { } end modules ['node-fin'] = {
version = 1.001,
- comment = "companion to node-fin.tex",
+ comment = "companion to node-fin.mkiv",
author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
copyright = "PRAGMA ADE / ConTeXt Development Team",
license = "see context related readme files"
@@ -75,7 +75,7 @@ end
local function process_attribute(head,plugin) -- head,attribute,enabled,initializer,resolver,processor,finalizer
local namespace = plugin.namespace
- if namespace.enabled then
+ if namespace.enabled ~= false then -- this test will go away
starttiming(attributes)
local done, used, ok = false, nil, false
local attribute = namespace.attribute or numbers[plugin.name] -- todo: plugin.attribute
@@ -438,7 +438,5 @@ states.stacked = stacked
-- -- --
statistics.register("attribute processing time", function()
- if statistics.elapsedindeed(attributes) then
- return format("%s seconds (front- and backend)",statistics.elapsedtime(attributes))
- end
+ return statistics.elapsedseconds(attributes,"front- and backend")
end)
diff --git a/Master/texmf-dist/tex/context/base/node-fin.mkiv b/Master/texmf-dist/tex/context/base/node-fin.mkiv
index 8c15eb57db2..ea9e83f16b5 100644
--- a/Master/texmf-dist/tex/context/base/node-fin.mkiv
+++ b/Master/texmf-dist/tex/context/base/node-fin.mkiv
@@ -20,20 +20,22 @@
\registerctxluafile{node-fin}{1.001} % we might generalize this one
-\definesystemattribute[trigger] % feature inheritance
+\definesystemattribute[trigger] \chardef\triggerattribute \dogetattributeid{trigger} % feature inheritance
\def\finalizeobjectbox #1{\ctxlua{nodes.process_page(tex.box[\number#1])}}
\def\finalizeshipoutbox#1{\ctxlua{nodes.process_page(tex.box[\number#1])}}
% tricky stuff:
+% THIS MIGHT BECOME OBSOLETE.
+
\newcount\attributeboxcount
-\edef\startinheritattributes{\dosetattribute {trigger}{1}}
-\edef\stopinheritattributes {\doresetattribute{trigger}}
+\edef\startinheritattributes{\attribute\triggerattribute\plusone}
+\edef\stopinheritattributes {\attribute\triggerattribute\attributeunsetvalue}
-\def\doattributedcopy {\afterassignment\dodoattributedcopy\attributeboxcount}
-\def\doattributedbox {\afterassignment\dodoattributedbox \attributeboxcount}
+\def\doattributedcopy{\afterassignment\dodoattributedcopy\attributeboxcount}
+\def\doattributedbox {\afterassignment\dodoattributedbox \attributeboxcount}
\def\dodoattributedcopy
{\startinheritattributes
diff --git a/Master/texmf-dist/tex/context/base/node-fnt.lua b/Master/texmf-dist/tex/context/base/node-fnt.lua
index 3ad9060c307..b0d073425cc 100644
--- a/Master/texmf-dist/tex/context/base/node-fnt.lua
+++ b/Master/texmf-dist/tex/context/base/node-fnt.lua
@@ -1,6 +1,6 @@
if not modules then modules = { } end modules ['node-fnt'] = {
version = 1.001,
- comment = "companion to font-ini.tex",
+ comment = "companion to font-ini.mkiv",
author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
copyright = "PRAGMA ADE / ConTeXt Development Team",
license = "see context related readme files"
@@ -45,13 +45,15 @@ if tex.attribute[0] < 0 then
end
+-- this will be redone and split in a generic one and a context one
+
function nodes.process_characters(head)
-- either next or not, but definitely no already processed list
starttiming(nodes)
local usedfonts, attrfonts, done = { }, { }, false
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)
+ local font, attr = n.font, has_attribute(n,0) -- zero attribute is reserved for fonts in context
if attr and attr > 0 then
if font ~= prevfont or attr ~= prevattr then
local used = attrfonts[font]
@@ -107,7 +109,7 @@ function nodes.process_characters(head)
head, done = h or head, done or d
if n > 1 then
for i=2,n do
- local h, d = processors[i](head,font,0) -- false)
+ local h, d = processors[i](head,font,false)
head, done = h or head, done or d
end
end
@@ -119,7 +121,7 @@ function nodes.process_characters(head)
head, done = h or head, done or d
if n > 1 then
for i=2,n do
- local h, d = processors[i](head,font,0) -- false)
+ local h, d = processors[i](head,font,false)
head, done = h or head, done or d
end
end
@@ -178,7 +180,6 @@ else do
-- X000 1100 = 12 = 0x1C = leftghost
-- X001 0100 = 20 = 0x14 = rightghost
-
function nodes.protect_glyphs(head)
local done = false
for g in traverse_id(glyph,head) do
diff --git a/Master/texmf-dist/tex/context/base/node-ini.lua b/Master/texmf-dist/tex/context/base/node-ini.lua
index 3ff73c62f16..36e240238e3 100644
--- a/Master/texmf-dist/tex/context/base/node-ini.lua
+++ b/Master/texmf-dist/tex/context/base/node-ini.lua
@@ -1,6 +1,6 @@
if not modules then modules = { } end modules ['node-ini'] = {
version = 1.001,
- comment = "companion to node-ini.tex",
+ comment = "companion to node-ini.mkiv",
author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
copyright = "PRAGMA ADE / ConTeXt Development Team",
license = "see context related readme files"
@@ -108,10 +108,12 @@ local penalty = node.id('penalty')
local kern = node.id('kern')
local whatsit = node.id('whatsit')
-local traverse_id = node.traverse_id
-local traverse = node.traverse
-local free_node = node.free
-local remove_node = node.remove
+local traverse_id = node.traverse_id
+local traverse = node.traverse
+local free_node = node.free
+local remove_node = node.remove
+local insert_node_before = node.insert_before
+local insert_node_after = node.insert_after
function nodes.remove(head, current, free_too)
local t = current
@@ -131,8 +133,8 @@ function nodes.delete(head,current)
return nodes.remove(head,current,true)
end
-nodes.before = node.insert_before
-nodes.after = node.insert_after
+nodes.before = insert_node_before
+nodes.after = insert_node_after
-- we need to test this, as it might be fixed now
@@ -172,21 +174,31 @@ function nodes.after(h,c,n)
return n, n
end
-function nodes.replace(head,current,new)
- if current and next then
- local p, n = current.prev, current.next
- new.prev, new.next = p, n
- if p then
- p.next = new
- else
+-- local h, c = nodes.replace(head,current,new)
+-- local c = nodes.replace(false,current,new)
+-- local c = nodes.replace(current,new)
+
+function nodes.replace(head,current,new) -- no head returned if false
+ if not new then
+ head, current, new = false, head, current
+ end
+ local prev, next = current.prev, current.next
+ if next then
+ new.next, next.prev = next, new
+ end
+ if prev then
+ new.prev, prev.next = prev, new
+ end
+ if head then
+ if head == current then
head = new
end
- if n then
- n.prev = new
- end
free_node(current)
+ return head, new
+ else
+ free_node(current)
+ return new
end
- return head, current
end
-- will move
@@ -212,7 +224,7 @@ end
nodes.count = count
--- new
+-- new, will move
function attributes.ofnode(n)
local a = n.attr
diff --git a/Master/texmf-dist/tex/context/base/node-ini.mkiv b/Master/texmf-dist/tex/context/base/node-ini.mkiv
index 210f21229b2..78725931666 100644
--- a/Master/texmf-dist/tex/context/base/node-ini.mkiv
+++ b/Master/texmf-dist/tex/context/base/node-ini.mkiv
@@ -18,6 +18,8 @@
\newcount\filterstate \filterstate\plusone
\registerctxluafile{node-ini}{1.001}
+\registerctxluafile{node-dir}{1.001}
+\registerctxluafile{node-aux}{1.001}
\registerctxluafile{node-tst}{1.001}
\registerctxluafile{node-tra}{1.001} % we might split it off (module)
\registerctxluafile{node-seq}{1.001} % we might generalize this one
@@ -29,12 +31,13 @@
\registerctxluafile{node-ser}{1.001}
\registerctxluafile{node-ext}{1.001}
\registerctxluafile{node-inj}{1.001} % we might split it off
+\registerctxluafile{node-typ}{1.001} % experimental
\newtoks \attributesresetlist
\ifdefined \v!global \else \def\v!global{global} \fi % for metatex
-\def\defineattribute
+\unexpanded\def\defineattribute
{\dodoubleempty\dodefineattribute}
\def\dodefineattribute[#1][#2]% alternatively we can let lua do the housekeeping
@@ -44,7 +47,7 @@
%\writestatus\m!systems{defining attribute #1 with number \number\lastallocatedattribute}%
\doifnotinset\v!global{#2}{\appendetoks\csname @attr@#1\endcsname\attributeunsetvalue\to\attributesresetlist}}
-\def\definesystemattribute
+\unexpanded\def\definesystemattribute
{\dodoubleempty\dodefinesystemattribute}
\def\dodefinesystemattribute[#1][#2]% alternatively we can let lua do the housekeeping
@@ -65,25 +68,6 @@
\def\resetallattributes{\the\attributesresetlist}
-% \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}
@@ -93,8 +77,8 @@
\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()}}
+\unexpanded\def\starttracingnodes[#1]{\ctxlua{nodes.tracers.characters.start("#1")}}
+\unexpanded\def\stoptracingnodes {\ctxlua{nodes.tracers.characters.stop()}}
% \starttext
% \starttracingnodes[characters]
diff --git a/Master/texmf-dist/tex/context/base/node-inj.lua b/Master/texmf-dist/tex/context/base/node-inj.lua
index dc676a412ed..9c4612a2299 100644
--- a/Master/texmf-dist/tex/context/base/node-inj.lua
+++ b/Master/texmf-dist/tex/context/base/node-inj.lua
@@ -1,6 +1,6 @@
if not modules then modules = { } end modules ['node-inj'] = {
version = 1.001,
- comment = "companion to node-ini.tex",
+ comment = "companion to node-ini.mkiv",
author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
copyright = "PRAGMA ADE / ConTeXt Development Team",
license = "see context related readme files"
@@ -10,7 +10,8 @@ if not modules then modules = { } end modules ['node-inj'] = {
-- This is very experimental (this will change when we have luatex > .50 and
-- a few pending thingies are available. Also, Idris needs to make a few more
--- test fonts.
+-- test fonts. Btw, future versions of luatex will have extended glyph properties
+-- that can be of help.
local next = next
@@ -50,6 +51,8 @@ local kerns = { }
-- explicitly i will provide an alternative; also, we can share
-- tables
+-- for the moment we pass the r2l key ... volt/arabtype tests
+
function nodes.set_cursive(start,nxt,factor,rlmode,exit,entry,tfmstart,tfmnext)
local dx, dy = factor*(exit[1]-entry[1]), factor*(exit[2]-entry[2])
local ws, wn = tfmstart.width, tfmnext.width
@@ -60,18 +63,19 @@ function nodes.set_cursive(start,nxt,factor,rlmode,exit,entry,tfmstart,tfmnext)
return dx, dy, bound
end
-function nodes.set_pair(current,factor,rlmode,spec,tfmchr)
+function nodes.set_pair(current,factor,rlmode,r2lflag,spec,tfmchr)
local x, y, w, h = factor*spec[1], factor*spec[2], factor*spec[3], factor*spec[4]
-- dy = y - h
if x ~= 0 or w ~= 0 or y ~= 0 or h ~= 0 then
local bound = has_attribute(current,kernpair)
if bound then
local kb = kerns[bound]
- kb[2], kb[3], kb[4], kb[5] = kb[2] + x, kb[3] + y, kb[4] + w, kb[5] + h
+ -- inefficient but singles have less, but weird anyway, needs checking
+ kb[2], kb[3], kb[4], kb[5] = (kb[2] or 0) + x, (kb[3] or 0) + y, (kb[4] or 0)+ w, (kb[5] or 0) + h
else
bound = #kerns + 1
set_attribute(current,kernpair,bound)
- kerns[bound] = { rlmode, x, y, w, h }
+ kerns[bound] = { rlmode, x, y, w, h, r2lflag, tfmchr.width }
end
return x, y, w, h, bound
end
@@ -171,6 +175,7 @@ end
function nodes.inject_kerns(head,where,keep)
local has_marks, has_cursives, has_kerns = next(marks), next(cursives), next(kerns)
if has_marks or has_cursives then
+--~ if has_marks or has_cursives or has_kerns then
if trace_injections then
nodes.trace_injection(head)
end
@@ -190,7 +195,7 @@ function nodes.inject_kerns(head,where,keep)
if k then
local kk = kerns[k]
if kk then
- local x, y, w, h = kk[2], kk[3], kk[4], kk[5]
+ local x, y, w, h = kk[2] or 0, kk[3] or 0, kk[4] or 0, kk[5] or 0
local dy = y - h
if dy ~= 0 then
ky[n] = dy
@@ -305,14 +310,15 @@ function nodes.inject_kerns(head,where,keep)
local d = mrks[index]
if d then
-- local rlmode = d[3] -- not used
- -- if rlmode and rlmode < 0 then
- -- n.xoffset = p.xoffset + d[1]
+ -- if rlmode and rlmode > 0 then
+ -- todo
-- else
- n.xoffset = p.xoffset - d[1]
---~ local k = wx[p]
---~ if k then
---~ wx[n] = k
---~ end
+ local k = wx[p]
+ if k then
+ n.xoffset = p.xoffset - d[1] - k[2]
+ else
+ n.xoffset = p.xoffset - d[1]
+ end
-- end
if mk[p] then
n.yoffset = p.yoffset + d[2]
@@ -334,23 +340,41 @@ function nodes.inject_kerns(head,where,keep)
if next(wx) then
for n, k in next, wx do
-- only w can be nil, can be sped up when w == nil
- local rl, x, w = k[1], k[2] or 0, k[4] or 0
+ local rl, x, w, r2l = k[1], k[2] or 0, k[4] or 0, k[6]
local wx = w - x
- if rl < 0 then
- if wx ~= 0 then
- insert_node_before(head,n,newkern(wx))
- end
- if x ~= 0 then
- insert_node_after (head,n,newkern(x))
- end
- else
- -- if wx ~= 0 then
- -- insert_node_after(head,n,newkern(wx))
- -- end
- if x ~= 0 then
- insert_node_before(head,n,newkern(x))
+--~ if rl < 0 then
+--~ if r2l then
+--~ if wx ~= 0 then
+--~ insert_node_before(head,n,newkern(wx))
+--~ end
+--~ if x ~= 0 then
+--~ insert_node_after (head,n,newkern(x))
+--~ end
+--~ else
+--~ if x ~= 0 then
+--~ insert_node_before(head,n,newkern(x))
+--~ end
+--~ if wx ~= 0 then
+--~ insert_node_after(head,n,newkern(wx))
+--~ end
+--~ end
+--~ else
+ if r2l then
+ if wx ~= 0 then
+ insert_node_before(head,n,newkern(wx))
+ end
+ if x ~= 0 then
+ insert_node_after (head,n,newkern(x))
+ end
+ else
+ if x ~= 0 then
+ insert_node_before(head,n,newkern(x))
+ end
+ if wx ~= 0 then
+ insert_node_after(head,n,newkern(wx))
+ end
end
- end
+--~ end
end
end
if next(cx) then
@@ -376,29 +400,54 @@ function nodes.inject_kerns(head,where,keep)
if trace_injections then
nodes.trace_injection(head)
end
- -- we assume done is true because there are kerns
for n in traverse_id(glyph,head) do
local k = has_attribute(n,kernpair)
if k then
local kk = kerns[k]
if kk then
- -- only w can be nil, can be sped up when w == nil
- local rl, x, y, w = kk[1], kk[2] or 0, kk[3] or 0, kk[4] or 0
- if y ~= 0 then
+ local rl, x, y, w = kk[1], kk[2] or 0, kk[3], kk[4]
+ if y and y ~= 0 then
n.yoffset = y -- todo: h ?
end
- local wx = w - x
- if rl < 0 then
- if wx ~= 0 then
- insert_node_before(head,n,newkern(wx))
- end
- if x ~= 0 then
- insert_node_after (head,n,newkern(x))
- end
+ if w then
+ -- copied from above
+ local r2l = kk[6]
+ local wx = w - x
+--~ if rl < 0 then
+--~ if r2l then
+--~ if x ~= 0 then
+--~ insert_node_before(head,n,newkern(x))
+--~ end
+--~ if wx ~= 0 then
+--~ insert_node_after(head,n,newkern(wx))
+--~ end
+--~ else
+--~ if wx ~= 0 then
+--~ insert_node_before(head,n,newkern(wx))
+--~ end
+--~ if x ~= 0 then
+--~ insert_node_after (head,n,newkern(x))
+--~ end
+--~ end
+--~ else
+ if r2l then
+ if wx ~= 0 then
+ insert_node_before(head,n,newkern(wx))
+ end
+ if x ~= 0 then
+ insert_node_after (head,n,newkern(x))
+ end
+ else
+ if x ~= 0 then
+ insert_node_before(head,n,newkern(x))
+ end
+ if wx ~= 0 then
+ insert_node_after(head,n,newkern(wx))
+ end
+ end
+--~ end
else
- -- if wx ~= 0 then
- -- insert_node_after(head,n,newkern(wx))
- -- end
+ -- simple (e.g. kernclass kerns)
if x ~= 0 then
insert_node_before(head,n,newkern(x))
end
diff --git a/Master/texmf-dist/tex/context/base/node-mig.lua b/Master/texmf-dist/tex/context/base/node-mig.lua
new file mode 100644
index 00000000000..f9f0ad23184
--- /dev/null
+++ b/Master/texmf-dist/tex/context/base/node-mig.lua
@@ -0,0 +1,120 @@
+if not modules then modules = { } end modules ['node-mig'] = {
+ version = 1.001,
+ comment = "companion to node-mig.mkiv",
+ author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
+ copyright = "PRAGMA ADE / ConTeXt Development Team",
+ license = "see context related readme files"
+}
+
+local format = string.format
+
+local hlist = node.id('hlist')
+local vlist = node.id('vlist')
+local insert = node.id('ins')
+local mark = node.id('mark')
+
+local has_attribute = node.has_attribute
+local set_attribute = node.set_attribute
+local remove_nodes = nodes.remove
+
+local migrated = attributes.private("migrated")
+
+local trace_migrations = false
+
+trackers.register("nodes.migrations", function(v) trace_migrations = v end)
+
+local migrate_inserts, migrate_marks
+
+local t_inserts, t_marks, t_sweeps = 0, 0, 0
+
+local function locate(head,first,last,ni,nm)
+ local current = head
+ while current do
+ local id = current.id
+ if id == vlist or id == hlist then
+ current.list, first, last, ni, nm = locate(current.list,first,last,ni,nm)
+ current= current.next
+ elseif migrate_inserts and id == insert then
+ local insert
+ head, current, insert = remove_nodes(head,current)
+ insert.next = nil
+ if first then
+ insert.prev, last.next = last, insert
+ else
+ insert.prev, first = nil, insert
+ end
+ last, ni = insert, ni + 1
+ elseif migrate_marks and id == mark then
+ local mark
+ head, current, mark = remove_nodes(head,current)
+ mark.next = nil
+ if first then
+ mark.prev, last.next = last, mark
+ else
+ mark.prev, first = nil, mark
+ end
+ last, nm = mark, nm + 1
+ else
+ current= current.next
+ end
+ end
+ return head, first, last, ni, nm
+end
+
+function nodes.migrate_outwards(head,where)
+ local done = false
+ if head then
+ local current = head
+ while current do
+ local id = current.id
+ if id == vlist or id == hlist and not has_attribute(current,migrated) then
+ set_attribute(current,migrated,1)
+ t_sweeps = t_sweeps + 1
+ local h = current.list
+ local first, last, ni, nm
+ while h do
+ local id = h.id
+ if id == vlist or id == hlist then
+ h, first, last, ni, nm = locate(h,first,last,0,0)
+ end
+ h = h.next
+ end
+ if first then
+ t_inserts, t_marks = t_inserts + ni, t_marks + nm
+ if trace_migrations and (ni > 0 or nm > 0) then
+ logs.report("nodes","sweep %s, %s inserts and %s marks migrated outwards",t_sweeps,ni,nm)
+ end
+ -- inserts after head
+ local n = current.next
+ if n then
+ last.next, n.prev = n, last
+ end
+ current.next, first.prev = first, current
+ done, current = true, last
+ end
+ end
+ current = current.next
+ end
+ return head, done
+ end
+end
+
+experiments.register("marks.migrate", function(v)
+ if v then
+ tasks.enableaction("mvlbuilders", "nodes.migrate_outwards")
+ end
+ migrate_marks = v
+end)
+
+experiments.register("inserts.migrate", function(v)
+ if v then
+ tasks.enableaction("mvlbuilders", "nodes.migrate_outwards")
+ end
+ migrate_inserts = v
+end)
+
+statistics.register("node migrations", function()
+ if trace_migrations and t_sweeps > 0 then
+ return format("%s sweeps, %s inserts moved, %s marks moved",t_sweeps,t_inserts,t_marks)
+ end
+end)
diff --git a/Master/texmf-dist/tex/context/base/node-mig.mkiv b/Master/texmf-dist/tex/context/base/node-mig.mkiv
new file mode 100644
index 00000000000..cd731b96f79
--- /dev/null
+++ b/Master/texmf-dist/tex/context/base/node-mig.mkiv
@@ -0,0 +1,60 @@
+%D \module
+%D [ file=node-mig,
+%D version=2010.01.19,
+%D title=\CONTEXT\ Node Macros,
+%D subtitle=Inserts,
+%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}{ConTeXt Node Support / Migrations}
+
+%D This is very experimental and although it is used in a
+%D real project it mostly serves a testbed for Taco and me so
+%D as prelude to extending the inserts mechanism.
+%D
+%D \starttyping
+%D \automigrateinserts
+%D
+%D \hbox{\vbox{x\footnote{1}x\footnote{2}x\footnote{3}x}}
+%D \vbox{x\footnote{4}x}
+%D \hbox{\vbox{x\footnote{5}x}}
+%D
+%D \hbox{x}
+%D \hbox{x\footnote{6}x}
+%D \hbox{x}
+%D
+%D \starttabulate
+%D \NC test \NC test \footnote{test} \input tufte \NC \NR
+%D \NC test \NC test \footnote{test} \input tufte \NC \NR
+%D \NC test \NC test \footnote{test} \input tufte \NC \NR
+%D \NC test \NC test \footnote{test} \input tufte \NC \NR
+%D \NC test \NC test \footnote{test} \input tufte \NC \NR
+%D \NC test \NC test \footnote{test} \input tufte \NC \NR
+%D \stoptabulate
+%D \stoptyping
+
+\unprotect
+
+\registerctxluafile{node-mig}{1.001}
+
+\newtoks \everyautomigratefootnotes
+\newtoks \everyautomigratemarks
+
+\def\automigrateinserts{\the\everyautomigratefootnotes}
+\def\automigratemarks {\the\everyautomigratemarks}
+
+\appendtoks
+ \let\postponenotes\relax
+ \enableexperiments[inserts.migrate]%
+\to \everyautomigratefootnotes
+
+\appendtoks
+ \enableexperiments[marks.migrate]%
+\to \everyautomigratemarks
+
+\protect
diff --git a/Master/texmf-dist/tex/context/base/node-pag.lua b/Master/texmf-dist/tex/context/base/node-pag.lua
new file mode 100644
index 00000000000..4bc53c6ddb6
--- /dev/null
+++ b/Master/texmf-dist/tex/context/base/node-pag.lua
@@ -0,0 +1,30 @@
+if not modules then modules = { } end modules ['node-pag'] = {
+ version = 1.001,
+ comment = "companion to node-pag.mkiv",
+ author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
+ copyright = "PRAGMA ADE / ConTeXt Development Team",
+ license = "see context related readme files"
+}
+
+-- this callback might disappear and come back in the same way
+-- as par builders
+
+pagebuilders = pagebuilders or { }
+
+local starttiming, stoptiming = statistics.starttiming, statistics.stoptiming
+
+local actions = tasks.actions("pagebuilders",5)
+
+local function processor(head,groupcode,size,packtype,maxdepth,direction)
+ starttiming(pagebuilders)
+ local _, done = actions(head,groupcode,size,packtype,maxdepth,direction)
+ stoptiming(pagebuilders)
+ return (done and head) or true
+-- return vpack(head)
+end
+
+--~ callbacks.register('pre_output_filter', processor, "preparing output box")
+
+--~ statistics.register("output preparation time", function()
+--~ return statistics.elapsedseconds(pagebuilders)
+--~ end)
diff --git a/Master/texmf-dist/tex/context/base/node-pag.mkiv b/Master/texmf-dist/tex/context/base/node-pag.mkiv
new file mode 100644
index 00000000000..487901ad043
--- /dev/null
+++ b/Master/texmf-dist/tex/context/base/node-pag.mkiv
@@ -0,0 +1,20 @@
+%D \module
+%D [ file=node-pag,
+%D version=2008.09.30,
+%D title=\CONTEXT\ Node Macros,
+%D subtitle=Page Building,
+%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 Node Macros / Page Building}
+
+\unprotect
+
+\registerctxluafile{node-pag}{1.001}
+
+\protect \endinput
diff --git a/Master/texmf-dist/tex/context/base/node-par.lua b/Master/texmf-dist/tex/context/base/node-par.lua
index f275a103559..7be7e7917ca 100644
--- a/Master/texmf-dist/tex/context/base/node-par.lua
+++ b/Master/texmf-dist/tex/context/base/node-par.lua
@@ -1,6 +1,6 @@
if not modules then modules = { } end modules ['node-par'] = {
version = 1.001,
- comment = "companion to node-par.lua",
+ comment = "companion to node-par.mkiv",
author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
copyright = "PRAGMA ADE / ConTeXt Development Team",
license = "see context related readme files"
@@ -9,35 +9,93 @@ if not modules then modules = { } end modules ['node-par'] = {
parbuilders = parbuilders or { }
parbuilders.constructors = parbuilders.constructors or { }
parbuilders.names = parbuilders.names or { }
+parbuilders.numbers = parbuilders.numbers or { }
parbuilders.attribute = attributes.numbers['parbuilder'] or 999
-storage.register("parbuilders.names", parbuilders.names, "parbuilders.names")
+storage.register("parbuilders.names", parbuilders.names, "parbuilders.names")
+storage.register("parbuilders.numbers", parbuilders.numbers, "parbuilders.numbers")
--- store parbuilders.names
+local constructors, names, numbers, p_attribute = parbuilders.constructors, parbuilders.names, parbuilders.numbers, parbuilders.attribute
-function parbuilders.register(name,attribute)
- parbuilders.names[attribute] = name
+local has_attribute = node.has_attribute
+local starttiming, stoptiming = statistics.starttiming, statistics.stoptiming
+
+local mainconstructor = nil -- not stored in format
+
+function parbuilders.register(name,number)
+ parbuilders.names[number] = name
+ parbuilders.numbers[name] = number
+end
+
+function parbuilders.setmain(name)
+ mainconstructor = numbers[name]
end
-function parbuilders.main(head,interupted_by_display)
- local attribute = node.has_attribute(head,parbuilders.attribute)
- if attribute then
- local constructor = parbuilders.names[attribute]
- if constructor then
- return parbuilders.constructors[constructor](head,interupted_by_display)
+-- return values:
+--
+-- true : tex will break itself
+-- false : idem but dangerous
+-- head : list of valid vmode nodes with last being hlist
+
+function parbuilders.constructor(head,followed_by_display)
+ if type(head) == "boolean" then
+ return head
+ else
+ local attribute = has_attribute(head,p_attribute) or mainconstructor
+ if attribute then
+ local constructor = names[attribute]
+ if constructor then
+ local handler = constructor and constructors[constructor]
+ if handler then
+ return handler(head,followed_by_display)
+ else
+ logs.report("parbuilders","handler '%s' is not defined",tostring(constructor))
+ return true -- let tex break
+ end
+ end
end
+ return true -- let tex break
end
- return false
end
-- just for testing
-function parbuilders.constructors.default(head,ibd)
- return false
+function parbuilders.constructors.default(head,followed_by_display)
+ return true -- let tex break
end
-- also for testing (no surrounding spacing done)
-function parbuilders.constructors.oneline(head,ibd)
+function parbuilders.constructors.oneline(head,followed_by_display)
return node.hpack(head)
end
+
+-- It makes no sense to have a sequence here as we already have
+-- pre and post hooks and only one parbuilder makes sense, so no:
+--
+-- local actions = tasks.actions("parbuilders",1)
+
+-- todo: enable one as main
+
+local actions = parbuilders.constructor
+local enabled = false
+
+function parbuilders.enable () enabled = true end
+function parbuilders.disable() enabled = false end
+
+local function processor(head,followed_by_display)
+ if enabled then
+ starttiming(parbuilders)
+ local head = actions(head,followed_by_display)
+ stoptiming(parbuilders)
+ return head
+ else
+ return true -- let tex do the work
+ end
+end
+
+callbacks.register('linebreak_filter', processor, "breaking paragraps into lines")
+
+statistics.register("linebreak processing time", function()
+ return statistics.elapsedseconds(parbuilders)
+end)
diff --git a/Master/texmf-dist/tex/context/base/node-par.mkiv b/Master/texmf-dist/tex/context/base/node-par.mkiv
index 7f7ca9977f8..cb53e643d7e 100644
--- a/Master/texmf-dist/tex/context/base/node-par.mkiv
+++ b/Master/texmf-dist/tex/context/base/node-par.mkiv
@@ -30,31 +30,49 @@
\registerctxluafile{node-par}{1.001}
-\definesystemattribute[parbuilder]
+\definesystemattribute[parbuilder] \chardef\parbuilderattribute \dogetattributeid{parbuilder}
+
+% todo auto-enable
+
+% management (enable/disable) is global and will move to lua
\newcount\nofparbuilders
-\def\defineparbuilder[#1]%
+\unexpanded\def\defineparbuilder[#1]%
{\global\advance\nofparbuilders\plusone
\ctxlua{parbuilders.register("#1",\number\nofparbuilders)}%
- \setxvalue{\??ng:#1}{\dosetattribute{parbuilder}{\number\nofparbuilders}}}
+ \setxvalue{\??ng:#1}{\attribute\parbuilderattribute\nofparbuilders}}
-\def\startparbuilder[#1]%
- {\edef\@@currentparbuilder{\number\dogetattribute{parbuilder}}%
+\unexpanded\def\startparbuilder[#1]%
+ {\edef\@@currentparbuilder{\number\attribute\parbuilderattribute}%
\globalpushmacro\@@currentparbuilder
- \getvalue{\??ng:#1}}
+ \getvalue{\??ng:#1}%
+ \checkparbuilders}
-\def\stopparbuilder
- {\globalpopmacro\@@currentparbuilder
- \dosetattribute{parbuilder}{\@@currentparbuilder}}
+\unexpanded\def\stopparbuilder
+ {\ifhmode\par\fi
+ \globalpopmacro\@@currentparbuilder
+ \attribute\parbuilderattribute\@@currentparbuilder\relax
+ \checkparbuilders}
+
+\def\setmainparbuilder[#1]%
+ {\ctxlua{parbuilders.setmain("#1")}}
% no high level interface, after all implementing a linebreaker is not something that
% the average user will do
\defineparbuilder[default] % just for testing
\defineparbuilder[oneline] % just for testing
+\defineparbuilder[basic] % just for testing
+
+\def\enableparbuilders {\ctxlua{parbuilders.enable ()}}
+\def\disableparbuilders{\ctxlua{parbuilders.disable()}}
-\def\enableparbuilders {\ctxlua{callback.register('linebreak_filter', parbuilders.main)}}
-\def\disableparbuilders{\ctxlua{callback.register('linebreak_filter', nil)}}
+\def\checkparbuilders % can be more efficient as we don't want to do this to often
+ {\ifcase\attribute\parbuilderattribute
+ \disableparbuilders
+ \else
+ \enableparbuilders
+ \fi}
\protect \endinput
diff --git a/Master/texmf-dist/tex/context/base/node-pro.lua b/Master/texmf-dist/tex/context/base/node-pro.lua
index acc3f1676f8..4f5b3dcbe9c 100644
--- a/Master/texmf-dist/tex/context/base/node-pro.lua
+++ b/Master/texmf-dist/tex/context/base/node-pro.lua
@@ -1,6 +1,6 @@
if not modules then modules = { } end modules ['node-pro'] = {
version = 1.001,
- comment = "companion to node-ini.tex",
+ comment = "companion to node-ini.mkiv",
author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
copyright = "PRAGMA ADE / ConTeXt Development Team",
license = "see context related readme files"
@@ -25,7 +25,7 @@ lists = lists or { }
chars = chars or { }
words = words or { } -- not used yet
-local actions = tasks.actions("processors",2) -- head, where, boolean
+local actions = tasks.actions("processors",4)
local n = 0
@@ -52,20 +52,20 @@ local function tracer(what,state,head,groupcode,before,after,show)
end
n = n + 1
if show then
- texio.write_nl(format("%s %s: %s, group: %s, nodes: %s -> %s, string: %s",what,n,state,groupcode,before,after,reconstruct(head)))
+ logs.report("nodes","%s %s: %s, group: %s, nodes: %s -> %s, string: %s",what,n,state,groupcode,before,after,reconstruct(head))
else
- texio.write_nl(format("%s %s: %s, group: %s, nodes: %s -> %s",what,n,state,groupcode,before,after))
+ logs.report("nodes","%s %s: %s, group: %s, nodes: %s -> %s",what,n,state,groupcode,before,after)
end
end
nodes.processors.enabled = true -- thsi will become a proper state (like trackers)
-function nodes.processors.pre_linebreak_filter(head,groupcode)
+function nodes.processors.pre_linebreak_filter(head,groupcode,size,packtype,direction)
local first, found = first_character(head)
if found then
if trace_callbacks then
local before = nodes.count(head,true)
- local head, done = actions(head,groupcode)
+ local head, done = actions(head,groupcode,size,packtype,direction)
local after = nodes.count(head,true)
if done then
tracer("pre_linebreak","changed",head,groupcode,before,after,true)
@@ -74,7 +74,7 @@ function nodes.processors.pre_linebreak_filter(head,groupcode)
end
return (done and head) or true
else
- local head, done = actions(head,groupcode)
+ local head, done = actions(head,groupcode,size,packtype,direction)
return (done and head) or true
end
elseif trace_callbacks then
@@ -84,12 +84,12 @@ function nodes.processors.pre_linebreak_filter(head,groupcode)
return true
end
-function nodes.processors.hpack_filter(head,groupcode)
+function nodes.processors.hpack_filter(head,groupcode,size,packtype,direction)
local first, found = first_character(head)
if found then
if trace_callbacks then
local before = nodes.count(head,true)
- local head, done = actions(head,groupcode)
+ local head, done = actions(head,groupcode,size,packtype,direction)
local after = nodes.count(head,true)
if done then
tracer("hpack","changed",head,groupcode,before,after,true)
@@ -98,7 +98,7 @@ function nodes.processors.hpack_filter(head,groupcode)
end
return (done and head) or true
else
- local head, done = actions(head,groupcode)
+ local head, done = actions(head,groupcode,size,packtype,direction)
return (done and head) or true
end
elseif trace_callbacks then
@@ -108,10 +108,10 @@ function nodes.processors.hpack_filter(head,groupcode)
return true
end
-callback.register('pre_linebreak_filter', nodes.processors.pre_linebreak_filter)
-callback.register('hpack_filter' , nodes.processors.hpack_filter)
+callbacks.register('pre_linebreak_filter', nodes.processors.pre_linebreak_filter,"all kind of horizontal manipulations (before par break)")
+callbacks.register('hpack_filter' , nodes.processors.hpack_filter,"all kind of horizontal manipulations")
-local actions = tasks.actions("finalizers",2) -- head, where, boolean
+local actions = tasks.actions("finalizers",1) -- head, where
-- beware, these are packaged boxes so no first_character test
-- maybe some day a hash with valid groupcodes
@@ -142,10 +142,8 @@ function nodes.processors.post_linebreak_filter(head,groupcode)
--~ return true
end
-callback.register('post_linebreak_filter', nodes.processors.post_linebreak_filter)
+callbacks.register('post_linebreak_filter', nodes.processors.post_linebreak_filter,"all kind of horizontal manipulations (after par break)")
statistics.register("h-node processing time", function()
- if statistics.elapsedindeed(nodes) then
- return format("%s seconds including kernel", statistics.elapsedtime(nodes))
- end
+ return statistics.elapsedseconds(nodes,"including kernel") -- hm, ok here?
end)
diff --git a/Master/texmf-dist/tex/context/base/node-ref.lua b/Master/texmf-dist/tex/context/base/node-ref.lua
index 04598082304..7128b1a6d20 100644
--- a/Master/texmf-dist/tex/context/base/node-ref.lua
+++ b/Master/texmf-dist/tex/context/base/node-ref.lua
@@ -1,6 +1,6 @@
if not modules then modules = { } end modules ['node-bck'] = {
version = 1.001,
- comment = "companion to node-bck.tex",
+ comment = "companion to node-bck.mkiv",
author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
copyright = "PRAGMA ADE / ConTeXt Development Team",
license = "see context related readme files"
@@ -67,6 +67,8 @@ local function dimensions(parent,start,stop)
end
end
+-- is pardir important at all?
+
local function inject_range(head,first,last,reference,make,stack,parent,pardir,txtdir)
local width, height, depth = dimensions(parent,first,last)
if pardir == "TRT" or txtdir == "+TRT" then
@@ -112,6 +114,9 @@ local function inject_list(id,current,reference,make,stack,pardir,txtdir)
if id == hlist then
-- can be either an explicit hbox or a line and there is no way
-- to recognize this; anyway only if ht/dp (then inline)
+ --
+ -- to be tested: 0=unknown, 1=linebreak, 2=hbox
+--~ if id.subtype == 1 then
local sr = stack[reference]
if first then
if sr and sr[2] then
@@ -122,10 +127,10 @@ local function inject_list(id,current,reference,make,stack,pardir,txtdir)
if prev and prev.id == glue and prev.subtype == 15 then
width = dimensions(current,first,prev.prev) -- maybe not current as we already take care of it
else
- if moveright and first.spec then
+ if moveright and first.writable then
width = width - first.spec.stretch*current.glue_set * current.glue_sign
end
- if last.spec then
+ if last.writable then
width = width - last.spec.stretch*current.glue_set * current.glue_sign
end
end
@@ -133,6 +138,10 @@ local function inject_list(id,current,reference,make,stack,pardir,txtdir)
else
-- also weird
end
+--~ else
+--~ print("!!!!!!!!!!!!!!!!!")
+ -- simple
+--~ end
else
-- ok
end
@@ -185,26 +194,27 @@ local function inject_areas(head,attribute,make,stack,done,skip,parent,pardir,tx
txtdir = current.dir
end
elseif id == hlist or id == vlist then
---~ if r and (not skip or r > skip) then
if not reference and r and (not skip or r > skip) then
inject_list(id,current,r,make,stack,pardir,txtdir)
---~ done[r] = true
end
-if r then done[r] = (done[r] or 0) + 1 end
+ if r then
+ done[r] = (done[r] or 0) + 1
+ end
local list = current.list
if list then
local _
current.list, _, pardir, txtdir = inject_areas(list,attribute,make,stack,done,r or skip or 0,current,pardir,txtdir)
end
-if r then done[r] = done[r] - 1 end
+ if r then
+ done[r] = done[r] - 1
+ end
elseif not r then
-- just go on, can be kerns
elseif not reference then
reference, first, last, firstdir = r, current, current, txtdir
elseif r == reference then
last = current
---~ elseif not done[reference] then
-elseif (done[reference] or 0) == 0 then
+ elseif (done[reference] or 0) == 0 then
if not skip or r > skip then
head, current = inject_range(head,first,last,reference,make,stack,parent,pardir,firstdir)
reference, first, last, firstdir = nil, nil, nil, nil
@@ -214,7 +224,6 @@ elseif (done[reference] or 0) == 0 then
end
current = current.next
end
---~ if reference and not done[reference] then
if reference and (done[reference] or 0) == 0 then
head = inject_range(head,first,last,reference,make,stack,parent,pardir,firstdir)
end
@@ -517,3 +526,8 @@ statistics.register("interactive elements", function()
return nil
end
end)
+
+function jobreferences.enable_interaction()
+ tasks.enableaction("shipouts","nodes.add_references")
+ tasks.enableaction("shipouts","nodes.add_destinations")
+end
diff --git a/Master/texmf-dist/tex/context/base/node-res.lua b/Master/texmf-dist/tex/context/base/node-res.lua
index 4f2cf5a0509..a8ea8745a72 100644
--- a/Master/texmf-dist/tex/context/base/node-res.lua
+++ b/Master/texmf-dist/tex/context/base/node-res.lua
@@ -1,13 +1,16 @@
if not modules then modules = { } end modules ['node-res'] = {
version = 1.001,
- comment = "companion to node-ini.tex",
+ comment = "companion to node-ini.mkiv",
author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
copyright = "PRAGMA ADE / ConTeXt Development Team",
license = "see context related readme files"
}
local gmatch, format = string.gmatch, string.format
-local copy_node, free_node, free_list, new_node = node.copy, node.free, node.flush_list, node.new
+local copy_node, free_node, free_list, new_node, node_type, node_id = node.copy, node.free, node.flush_list, node.new, node.type, node.id
+local tonumber, round = tonumber, math.round
+
+local glyph_node = node_id("glyph")
--[[ldx--
<p>The next function is not that much needed but in <l n='context'/> we use
@@ -16,18 +19,30 @@ for debugging <l n='luatex'/> node management.</p>
nodes = nodes or { }
+nodes.whatsits = { } -- table.swapped(node.whatsits())
+
local reserved = { }
+local whatsits = nodes.whatsits
-function nodes.register(n)
+for k, v in next, node.whatsits() do
+ whatsits[k], whatsits[v] = v, k -- two way
+end
+
+local function register_node(n)
reserved[#reserved+1] = n
return n
end
+nodes.register = register_node
+
function nodes.cleanup_reserved(nofboxes) -- todo
nodes.tracers.steppers.reset() -- todo: make a registration subsystem
local nr, nl = #reserved, 0
for i=1,nr do
- free_node(reserved[i])
+ local ri = reserved[i]
+ -- if not (ri.id == glue_spec and not ri.is_writable) then
+ free_node(reserved[i])
+ -- end
end
if nofboxes then
local tb = tex.box
@@ -51,15 +66,37 @@ function nodes.usage()
return t
end
-local disc = nodes.register(new_node("disc"))
-local kern = nodes.register(new_node("kern",1))
-local penalty = nodes.register(new_node("penalty"))
-local glue = nodes.register(new_node("glue"))
-local glue_spec = nodes.register(new_node("glue_spec"))
-local glyph = nodes.register(new_node("glyph",0))
-local textdir = nodes.register(new_node("whatsit",7))
-local rule = nodes.register(new_node("rule"))
-local latelua = nodes.register(new_node("whatsit",35))
+local disc = register_node(new_node("disc"))
+local kern = register_node(new_node("kern",1))
+local penalty = register_node(new_node("penalty"))
+local glue = register_node(new_node("glue")) -- glue.spec = nil
+local glue_spec = register_node(new_node("glue_spec"))
+local glyph = register_node(new_node("glyph",0))
+local textdir = register_node(new_node("whatsit",whatsits.dir)) -- 7 (6 is local par node)
+local rule = register_node(new_node("rule"))
+local latelua = register_node(new_node("whatsit",whatsits.late_lua)) -- 35
+local user_n = register_node(new_node("whatsit",whatsits.user_defined)) user_n.type = 100 -- 44
+local user_l = register_node(new_node("whatsit",whatsits.user_defined)) user_l.type = 110 -- 44
+local user_s = register_node(new_node("whatsit",whatsits.user_defined)) user_s.type = 115 -- 44
+local user_t = register_node(new_node("whatsit",whatsits.user_defined)) user_t.type = 116 -- 44
+local left_margin_kern = register_node(new_node("margin_kern",0))
+local right_margin_kern = register_node(new_node("margin_kern",1))
+local lineskip = register_node(new_node("glue",1))
+local baselineskip = register_node(new_node("glue",2))
+local leftskip = register_node(new_node("glue",8))
+local rightskip = register_node(new_node("glue",9))
+local temp = register_node(new_node("temp",0))
+
+function nodes.zeroglue(n)
+ local s = n.spec
+ return not writable or (
+ s.width == 0
+ and s.stretch == 0
+ and s.shrink == 0
+ and s.stretch_order == 0
+ and s.shrink_order == 0
+ )
+end
function nodes.glyph(fnt,chr)
local n = copy_node(glyph)
@@ -67,48 +104,195 @@ function nodes.glyph(fnt,chr)
if chr then n.char = chr end
return n
end
+
function nodes.penalty(p)
local n = copy_node(penalty)
n.penalty = p
return n
end
+
function nodes.kern(k)
local n = copy_node(kern)
n.kern = k
return n
end
-function nodes.glue(width,stretch,shrink)
- local n, s = copy_node(glue), copy_node(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_node(glue_spec)
s.width, s.stretch, s.shrink = width, stretch, shrink
return s
end
+
+local function someskip(skip,width,stretch,shrink)
+ local n = copy_node(skip)
+ if not width then
+ -- no spec
+ elseif tonumber(width) then
+ local s = copy_node(glue_spec)
+ s.width, s.stretch, s.shrink = width, stretch, shrink
+ n.spec = s
+ else
+ -- shared
+ n.spec = copy_node(width)
+ end
+ return n
+end
+
+function nodes.glue(width,stretch,shrink)
+ return someskip(glue,width,stretch,shrink)
+end
+function nodes.leftskip(width,stretch,shrink)
+ return someskip(leftskip,width,stretch,shrink)
+end
+function nodes.rightskip(width,stretch,shrink)
+ return someskip(rightskip,width,stretch,shrink)
+end
+function nodes.lineskip(width,stretch,shrink)
+ return someskip(lineskip,width,stretch,shrink)
+end
+function nodes.baselineskip(width,stretch,shrink)
+ return someskip(baselineskip,width,stretch,shrink)
+end
+
function nodes.disc()
return copy_node(disc)
end
+
function nodes.textdir(dir)
local t = copy_node(textdir)
t.dir = dir
return t
end
-function nodes.rule(w,h,d)
+
+function nodes.rule(width,height,depth,dir)
local n = copy_node(rule)
- if w then n.width = w end
- if h then n.height = h end
- if d then n.depth = d end
+ if width then n.width = width end
+ if height then n.height = height end
+ if depth then n.depth = depth end
+ if dir then n.dir = dir end
return n
end
+
function nodes.latelua(code)
local n = copy_node(latelua)
n.data = code
return n
end
+function nodes.leftmarginkern(glyph,width)
+ local n = copy_node(left_margin_kern)
+ if not glyph then
+ logs.fatal("nodes","invalid pointer to left margin glyph node")
+ elseif glyph.id ~= glyph_node then
+ logs.fatal("nodes","invalid node type %s for left margin glyph node",node_type(glyph))
+ else
+ n.glyph = glyph
+ end
+ if width then
+ n.width = width
+ end
+ return n
+end
+
+function nodes.rightmarginkern(glyph,width)
+ local n = copy_node(right_margin_kern)
+ if not glyph then
+ logs.fatal("nodes","invalid pointer to right margin glyph node")
+ elseif glyph.id ~= glyph_node then
+ logs.fatal("nodes","invalid node type %s for right margin glyph node",node_type(p))
+ else
+ n.glyph = glyph
+ end
+ if width then
+ n.width = width
+ end
+ return n
+end
+
+function nodes.temp()
+ return copy_node(temp)
+end
+--[[
+<p>At some point we ran into a problem that the glue specification
+of the zeropoint dimension was overwritten when adapting a glue spec
+node. This is a side effect of glue specs being shared. After a
+couple of hours tracing and debugging Taco and I came to the
+conclusion that it made no sense to complicate the spec allocator
+and settled on a writable flag. This all is a side effect of the
+fact that some glues use reserved memory slots (with the zeropoint
+glue being a noticeable one). So, next we wrap this into a function
+and hide it for the user. And yes, LuaTeX now gives a warning as
+well.</p>
+]]--
+
+if tex.luatexversion > 51 then
+
+ function nodes.writable_spec(n)
+ local spec = n.spec
+ if not spec then
+ spec = copy_node(glue_spec)
+ n.spec = spec
+ elseif not spec.writable then
+ spec = copy_node(spec)
+ n.spec = spec
+ end
+ return spec
+ end
+
+else
+
+ function nodes.writable_spec(n)
+ local spec = n.spec
+ if not spec then
+ spec = copy_node(glue_spec)
+ else
+ spec = copy_node(spec)
+ end
+ n.spec = spec
+ return spec
+ end
+
+end
+
+local cache = { }
+
+function nodes.usernumber(num)
+ local n = cache[num]
+ if n then
+ return copy_node(n)
+ else
+ local n = copy_node(user_n)
+ if num then n.value = num end
+ return n
+ end
+end
+
+function nodes.userlist(list)
+ local n = copy_node(user_l)
+ if list then n.value = list end
+ return n
+end
+
+local cache = { } -- we could use the same cache
+
+function nodes.userstring(str)
+ local n = cache[str]
+ if n then
+ return copy_node(n)
+ else
+ local n = copy_node(user_s)
+ n.type = 115
+ if str then n.value = str end
+ return n
+ end
+end
+
+function nodes.usertokens(tokens)
+ local n = copy_node(user_t)
+ if tokens then n.value = tokens end
+ return n
+end
+
statistics.register("cleaned up reserved nodes", function()
return format("%s nodes, %s lists of %s", nodes.cleanup_reserved(tex.count["lastallocatedbox"]))
end) -- \topofboxstack
diff --git a/Master/texmf-dist/tex/context/base/node-rul.lua b/Master/texmf-dist/tex/context/base/node-rul.lua
new file mode 100644
index 00000000000..9dd89bcdae3
--- /dev/null
+++ b/Master/texmf-dist/tex/context/base/node-rul.lua
@@ -0,0 +1,288 @@
+if not modules then modules = { } end modules ['node-rul'] = {
+ version = 1.001,
+ comment = "companion to node-rul.mkiv",
+ author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
+ copyright = "PRAGMA ADE / ConTeXt Development Team",
+ license = "see context related readme files"
+}
+
+-- this will go to an auxiliary module
+-- beware: rules now have a dir field
+
+local glyph = node.id("glyph")
+local disc = node.id("disc")
+local rule = node.id("rule")
+
+function nodes.strip_range(first,last) -- todo: dir
+ if first and last then -- just to be sure
+ local current = first
+ while current and current ~= last do
+ local id = current.id
+ if id == glyph or id == disc then
+ --~ if id == glyph or id == rule or id == disc then
+ first = current
+ break
+ else
+ current = current.next
+ end
+ end
+ local current = last
+ while current and current ~= first do
+ local id = current.id
+ --~ if id == glyph or id == rule or id == disc then
+ if id == glyph or id == disc then
+ last = current
+ break
+ else
+ current = current.prev
+ end
+ end
+ end
+ return first, last
+end
+
+-- todo: order and maybe other dimensions
+
+local trace_ruled = false trackers.register("nodes.ruled", function(v) trace_ruled = v end)
+
+local floor = math.floor
+local n_tostring, n_tosequence = nodes.ids_tostring, nodes.tosequence
+
+local a_ruled = attributes.private('ruled')
+local a_color = attributes.private('color')
+local a_transparency = attributes.private('transparency')
+local a_colorspace = attributes.private('colormodel')
+
+local glyph = node.id("glyph")
+local disc = node.id("disc")
+local glue = node.id("glue")
+local penalty = node.id("penalty")
+local kern = node.id("kern")
+local hlist = node.id("hlist")
+local vlist = node.id("vlist")
+local rule = node.id("rule")
+local whatsit = node.id("whatsit")
+
+local new_rule = nodes.rule
+local new_kern = nodes.kern
+local new_glue = nodes.glue
+
+local insert_before, insert_after, strip_range = node.insert_before, node.insert_after, nodes.strip_range
+local list_dimensions, has_attribute, set_attribute = node.dimensions, node.has_attribute, node.set_attribute
+local hpack_nodes = node.hpack
+local dimenfactor = fonts.dimenfactor
+local texwrite = tex.write
+
+local fontdata = fonts.ids
+local variables = interfaces.variables
+
+-- we can use this one elsewhere too
+--
+-- todo: functions: word, sentence
+--
+-- glyph rule unset whatsit glue margin_kern kern math disc
+
+local checkdir = true
+
+-- we assume {glyphruns} and no funny extra kerning, ok, maybe we need
+-- a dummy character as start and end; anyway we only collect glyphs
+
+local function process_words(attribute,data,flush,head,parent) -- we have hlistdir and local dir
+ local n = head
+ if n then
+ local f, l, a, d, i, level
+ local continue, done, strip = false, false, false
+ while n do
+ local id = n.id
+ if id == glyph or id == rule then
+ local aa = has_attribute(n,attribute)
+ if aa then
+ if aa == a then
+ if not f then -- ?
+ f = n
+ end
+ l = n
+ else
+ -- possible extensions: when in same class then keep spanning
+ if f then
+ head, done = flush(head,f,l,d,level,parent,strip), true
+ end
+ f, l, a = n, n, aa
+ level, i = floor(a/1000), a%1000
+ d = data[i]
+ continue = d.continue == variables.yes
+ end
+ else
+ if f then
+ head, done = flush(head,f,l,d,level,parent,strip), true
+ end
+ f, l, a = nil, nil, nil
+ end
+ elseif f and (id == disc or (id == kern and n.subtype == 0)) then
+ l = n
+ elseif id == hlist or id == vlist then
+ if f then
+ head, done = flush(head,f,l,d,level,parent,strip), true
+ f, l, a = nil, nil, nil
+ end
+ local list = n.list
+ if list then
+ n.list = process_words(attribute,data,flush,list,n)
+ end
+ elseif checkdir and id == whatsit and n.subtype == 7 then -- only changes in dir, we assume proper boundaries
+ if f and a then
+ l = n
+ end
+ elseif f then
+ if continue then
+ if id == penalty or id == kern then
+ l = n
+ elseif id == glue then
+ l = n
+ end
+ else
+ head, done = flush(head,f,l,d,level,parent,strip), true
+ f, l, a = nil, nil, nil
+ end
+ end
+ n = n.next
+ end
+ if f then
+ head, done = flush(head,f,l,d,level,parent,strip), true
+ end
+ return head, true -- todo: done
+ else
+ return head, false
+ end
+end
+
+nodes.process_words = process_words
+
+--
+
+nodes.rules = nodes.rules or { }
+nodes.rules.data = nodes.rules.data or { }
+
+storage.register("nodes/rules/data", nodes.rules.data, "nodes.rules.data")
+
+local data = nodes.rules.data
+
+function nodes.rules.define(settings)
+ data[#data+1] = settings
+ texwrite(#data)
+end
+
+local function flush_ruled(head,f,l,d,level,parent,strip) -- not that fast but acceptable for this purpose
+-- check for f and l
+ local r, m
+ if true then
+ f, l = strip_range(f,l)
+ end
+ local w = list_dimensions(parent.glue_set,parent.glue_sign,parent.glue_order,f,l.next)
+ local method, offset, continue, dy, rulethickness, unit, order, max, ma, ca, ta =
+ d.method, d.offset, d.continue, d.dy, d.rulethickness, d.unit, d.order, d.max, d.ma, d.ca, d.ta
+ local e = dimenfactor(unit,fontdata[f.font])
+ local colorspace = (ma > 0 and ma) or has_attribute(f,a_colorspace) or 1
+ local color = (ca > 0 and ca) or has_attribute(f,a_color)
+ local transparency = (ta > 0 and ta) or has_attribute(f,a_transparency)
+ local foreground = order == variables.foreground
+ rulethickness= rulethickness/2
+ if level > max then
+ level = max
+ end
+ if method == 0 then -- center
+ offset = 2*offset
+ m = (offset+(level-1)*dy+rulethickness)*e/2
+ else
+ m = 0
+ end
+ for i=1,level do
+ local ht = (offset+(i-1)*dy+rulethickness)*e - m
+ local dp = -(offset+(i-1)*dy-rulethickness)*e + m
+ local r = new_rule(w,ht,dp)
+ if color then
+ set_attribute(r,a_colorspace,colorspace)
+ set_attribute(r,a_color,color)
+ end
+ if transparency then
+ set_attribute(r,a_transparency,transparency)
+ end
+ local k = new_kern(-w)
+ if foreground then
+ insert_after(head,l,k)
+ insert_after(head,k,r)
+ l = r
+ else
+ head, _ = insert_before(head,f,r)
+ insert_after(head,r,k)
+ end
+ if trace_ruled then
+ logs.report("ruled", "level: %s, width: %i, height: %i, depth: %i, nodes: %s, text: %s",
+ level,w,ht,dp,n_tostring(f,l),n_tosequence(f,l,true))
+ -- level,r.width,r.height,r.depth,n_tostring(f,l),n_tosequence(f,l,true))
+ end
+ end
+ return head
+end
+
+local process = nodes.process_words
+
+nodes.rules.process = function(head) return process(a_ruled,data,flush_ruled,head) end
+
+function nodes.rules.enable()
+ tasks.enableaction("shipouts","nodes.rules.process")
+end
+
+-- elsewhere:
+--
+-- tasks.appendaction ("shipouts", "normalizers", "nodes.rules.process")
+-- tasks.disableaction("shipouts", "nodes.rules.process") -- only kick in when used
+
+local trace_shifted = false trackers.register("nodes.shifted", function(v) trace_shifted = v end)
+
+local a_shifted = attributes.private('shifted')
+
+nodes.shifts = nodes.shifts or { }
+nodes.shifts.data = nodes.shifts.data or { }
+
+storage.register("nodes/shifts/data", nodes.shifts.data, "nodes.shifts.data")
+
+local data = nodes.shifts.data
+
+function nodes.shifts.define(settings)
+ data[#data+1] = settings
+ texwrite(#data)
+end
+
+local function flush_shifted(head,first,last,data,level,parent,strip) -- not that fast but acceptable for this purpose
+ if true then
+ first, last = strip_range(first,last)
+ end
+ local prev, next = first.prev, last.next
+ first.prev, last.next = nil, nil
+ local width, height, depth = list_dimensions(parent.glue_set,parent.glue_sign,parent.glue_order,first,next)
+ local list = hpack_nodes(first,width,"exactly")
+ if first == head then
+ head = list
+ end
+ if prev then
+ prev.next, list.prev = list, prev
+ end
+ if next then
+ next.prev, list.next = list, next
+ end
+ local raise = data.dy * dimenfactor(data.unit,fontdata[first.font])
+ list.shift, list.height, list.depth = raise, height, depth
+ if trace_shifted then
+ logs.report("shifted", "width: %s, nodes: %s, text: %s",width,n_tostring(first,last),n_tosequence(first,last,true))
+ end
+ return head
+end
+
+local process = nodes.process_words
+
+nodes.shifts.process = function(head) return process(a_shifted,data,flush_shifted,head) end
+
+function nodes.shifts.enable()
+ tasks.enableaction("shipouts","nodes.shifts.process")
+end
diff --git a/Master/texmf-dist/tex/context/base/node-rul.mkiv b/Master/texmf-dist/tex/context/base/node-rul.mkiv
new file mode 100644
index 00000000000..1270eb81d7a
--- /dev/null
+++ b/Master/texmf-dist/tex/context/base/node-rul.mkiv
@@ -0,0 +1,343 @@
+%D \module
+%D [ file=node-rul,
+%D version=2009.11.03, % 1995.10.10,
+%D title=\CONTEXT\ Core Macros,
+%D subtitle=Bars,
+%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: ex and and em traveling with attribute
+
+\writestatus{loading}{ConTeXt Core Macros / Bars}
+
+%D The name of this file might change.
+
+%D \macros
+%D {underbar,underbars,
+%D overbar,overbars,
+%D overstrike,overstrikes,
+%D setupbar}
+%D
+%D In the rare case that we need undelined words, for instance
+%D because all font alternatives are already in use, one can
+%D use \type{\underbar} and \type{\overstrike} and their plural
+%D forms.
+%D
+%D \startbuffer
+%D \underbars{drawing \underbar{bars} under words is a typewriter leftover}
+%D \overstrikes{striking words makes them \overstrike{unreadable} but
+%D sometimes even \overbar{top lines} come into view.}
+%D \stopbuffer
+%D
+%D \typebuffer
+%D
+%D \startvoorbeeld
+%D \startlines
+%D \getbuffer
+%D \stoplines
+%D \stopvoorbeeld
+%D
+%D The next macros are derived from the \PLAIN\ \TEX\ one, but
+%D also supports nesting. The \type{$} keeps us in horizontal
+%D mode and at the same time applies grouping.
+%D
+%D \showsetup{underbar}
+%D \showsetup{underbars}
+%D \showsetup{overbar}
+%D \showsetup{overbars}
+%D \showsetup{overstrike}
+%D \showsetup{overstrikes}
+%D
+%D \showsetup{setupunderbar}
+
+\unprotect
+
+%definesystemattribute[ruled]
+%definesystemattribute[shifted]
+
+\registerctxluafile{node-rul}{1.001}
+
+\newtoks\checkalldefinedbars
+
+\def\barparameter #1{\csname\dobarparameter\currentbar#1\endcsname}
+\def\dobarparameter #1#2{\ifcsname\??on#1#2\endcsname\??on#1#2\else\expandafter\dobarparentparameter\csname\??on#1\s!parent\endcsname#2\fi}
+\def\dobarparentparameter#1#2{\ifx#1\relax\s!empty\else\dobarparameter#1#2\fi}
+
+\unexpanded\def\definebar
+ {\dotripleempty\dodefinebar}
+
+\def\dodefinebar[#1][#2][#3]%
+ {\ifthirdargument
+ \getparameters[\??on#1][\s!parent=#2,#3]%
+ \else
+ \getparameters[\??on#1][\s!parent=,#2]%
+ \fi
+ %
+ %\setvalue{\??on:#1}{0}%
+ %
+ \ifcsname\??on:#1:c\endcsname
+ \csname\??on:#1:c\endcsname\zerocount
+ \else
+ \expandafter\newcount\csname\??on:#1:c\endcsname
+ \fi
+ \normalexpanded{\checkalldefinedbars{\noexpand\doredefinebar{#1}\the\checkalldefinedbars}}%
+ \dodefinebarindeed{#1}%
+ \setuvalue{#1}{\doruled{#1}}}
+
+\def\dodefinebarindeed#1%
+ {\bgroup
+ \def\currentbar{#1}%
+ \doifsomethingelse{\barparameter\c!color}
+ {\donetrue\colored[\barparameter\c!color]}
+ {\donefalse}%
+ \normalexpanded
+ {\egroup
+ \scratchcounter\ctxlua{nodes.rules.define {
+ method = \barparameter\c!method,
+ offset = \barparameter\c!offset,
+ continue = "\barparameter\c!continue",
+ dy = \barparameter\c!dy,
+ rulethickness = \barparameter\c!rulethickness,
+ unit = "\barparameter\c!unit",
+ order = "\barparameter\c!order",
+ max = \barparameter\c!max,
+ ma = \ifdone\the\attribute\colormodelattribute \else0\fi,
+ ca = \ifdone\the\attribute\colorattribute \else0\fi,
+ ta = \ifdone\the\attribute\transparencyattribute\else0\fi
+ }}}%
+ \setevalue{\??on#1:a}{\the\scratchcounter}}
+
+\let\doredefinebar\dodefinebarindeed
+
+\def\doruled#1%
+ {\groupedcommand{\dodoruled{#1}}\relax}
+
+\def\dodoruled
+ {\ctxlua{nodes.rules.enable()}%
+ \glet\dodoruled\dodoruledindeed
+ \dodoruled}
+
+\def\dodoruledindeed#1%
+ {\advance\csname\??on:#1:c\endcsname\plusone
+ \scratchcounter\csname\??on:#1:c\endcsname
+ \attribute\ruledattribute\numexpr1000*\scratchcounter
+ +\csname\??on#1\ifcsname\??on#1:\number\scratchcounter\s!parent\endcsname:\number\scratchcounter\fi:a\endcsname}
+
+% ungrouped
+
+\unexpanded\def\startbar[#1]%
+ {\begingroup
+ \dodoruled{#1}}
+
+\unexpanded\def\stopbar
+ {\endgroup}
+
+\newcount\currentbarnesting % todo: same as colors
+
+\unexpanded\def\pushbar[#1]%
+ {\global\advance\currentbarnesting\plusone
+ \expandafter\edef\csname\??on:s:\number\currentbarnesting\endcsname
+ {\attribute\ruledattribute\the\attribute\ruledattribute}% stack
+ \dodoruled{#1}}
+
+\unexpanded\def\popbar
+ {\csname\??on:s:\number\currentbarnesting\endcsname
+ \global\advance\currentbarnesting\minusone}
+
+\unexpanded\def\setupbars
+ {\dodoubleempty\dosetupbars}
+
+\def\dosetupbars[#1][#2]% not that efficient
+ {\ifsecondargument
+ \getparameters[\??on#1][#2]%
+ \dodefinebarindeed{#1}%
+ \else
+ \getparameters[\??on][#1]%
+ \the\checkalldefinedbars
+ \fi}
+
+\setupbars
+ [\c!method=0, % new: 0=center nested, 1=stack nested
+ \c!continue=\v!no,
+ \c!offset=0, % upwards, replaces: topoffset bottomoffset
+ \c!dy=0,
+ \c!max=3,
+ \c!rulethickness=.1,
+ \c!order=\v!foreground,
+ \c!unit=ex, % so now we are relative
+ \c!color=] % replaces: rulecolor
+
+% \definebar[touchbar] [\c!method=0,\c!dy=-0.4,\c!offset=-0.0]
+% \definebar[touchbars] [touchbar] [\c!continue=\v!yes]
+
+\definebar[\v!overstrike] [\c!method=0,\c!dy= 0.4,\c!offset= 0.5,\c!continue=\v!yes]
+\definebar[\v!underbar] [\c!method=1,\c!dy=-0.4,\c!offset=-0.3,\c!continue=\v!yes]
+\definebar[\v!overbar] [\c!method=1,\c!dy= 0.4,\c!offset= 1.8,\c!continue=\v!yes]
+
+\definebar[\v!overstrikes] [\v!overstrike] [\c!continue=\v!no]
+\definebar[\v!underbars] [\v!underbar] [\c!continue=\v!no]
+\definebar[\v!overbars] [\v!overbar] [\c!continue=\v!no]
+
+% we want these always so ...
+
+\expandafter\let\expandafter\overstrike \csname\v!overstrike \endcsname
+\expandafter\let\expandafter\underbar \csname\v!underbar \endcsname
+\expandafter\let\expandafter\overbar \csname\v!overbar \endcsname
+\expandafter\let\expandafter\overstrikes\csname\v!overstrikes\endcsname
+\expandafter\let\expandafter\underbars \csname\v!underbars \endcsname
+\expandafter\let\expandafter\overbars \csname\v!overbars \endcsname
+
+\unexpanded\def\setupunderbar[#1]% too incompatible for the moment
+ {}
+
+%D This will move: (a bit duplicated)
+
+\newtoks\checkalldefinedshifts
+
+\def\shiftparameter #1{\csname\doshiftparameter\currentshift#1\endcsname}
+\def\shiftparameterhash#1{\doshiftparameterhash{\??ra\currentshift}#1}
+
+\def\doshiftparameter #1#2{\ifcsname\??ra#1#2\endcsname\??ra#1#2\else\expandafter\doshiftparentparameter\csname\??ra#1\s!parent\endcsname#2\fi}
+\def\doshiftparameterhash#1#2{\ifcsname#1#2\endcsname#1\else\expandafter\doshiftparentparameterhash\csname#1\s!parent\endcsname#2\fi}
+
+\def\doshiftparentparameter #1#2{\ifx#1\relax\s!empty\else\doshiftparameter #1#2\fi}
+\def\doshiftparentparameterhash#1#2{\ifx#1\relax \else\doshiftparameterhash#1#2\fi}
+
+\def\dosetshiftattributes#1#2% style color
+ {\edef\fontattributehash {\shiftparameterhash#1}%
+ \edef\colorattributehash{\shiftparameterhash#2}%
+ \ifx\fontattributehash \empty\else\dosetfontattribute \fontattributehash #1\fi
+ \ifx\colorattributehash\empty\else\dosetcolorattribute\colorattributehash#2\fi}
+
+\unexpanded\def\defineshift
+ {\dotripleempty\dodefineshift}
+
+\def\dodefineshift[#1][#2][#3]%
+ {\ifthirdargument
+ \getparameters[\??ra#1][\s!parent=#2,#3]%
+ \else
+ \getparameters[\??ra#1][\s!parent=,#2]%
+ \fi
+ %
+ %\setvalue{\??ra:#1}{0}%
+ %
+ \ifcsname\??ra:#1:c\endcsname
+ \csname\??ra:#1:c\endcsname\zerocount
+ \else
+ \expandafter\newcount\csname\??ra:#1:c\endcsname
+ \fi
+ \normalexpanded{\checkalldefinedshifts{\noexpand\doredefineshift{#1}\the\checkalldefinedshifts}}%
+ \dodefineshiftindeed{#1}%
+ \setuvalue{#1}{\doshifted{#1}}}
+
+\def\dodefineshiftindeed#1%
+ {\bgroup
+ \def\currentshift{#1}%
+ \normalexpanded
+ {\egroup
+ \scratchcounter\ctxlua{nodes.shifts.define {
+ method = \shiftparameter\c!method,
+ continue = "\shiftparameter\c!continue",
+ dy = \shiftparameter\c!dy,
+ unit = "\shiftparameter\c!unit",
+ }}}%
+ \setevalue{\??ra#1:a}{\the\scratchcounter}}
+
+\let\doredefineshift\dodefineshiftindeed
+
+\def\doshifted#1%
+ {\groupedcommand{\dodoshifted{#1}}\relax}
+
+\def\dodoshifted
+ {\ctxlua{nodes.shifts.enable()}%
+ \glet\dodoshifted\dodoshiftedindeed
+ \dodoshifted}
+
+% \def\dodoshiftedindeed#1%
+% {\def\currentshift{#1}%
+% \advance\csname\??ra:#1:c\endcsname\plusone
+% \scratchcounter\csname\??ra:#1:c\endcsname
+% \attribute\shiftedattribute\numexpr1000*\scratchcounter
+% +\csname\??ra#1\ifcsname\??ra#1:\number\scratchcounter\s!parent\endcsname:\number\scratchcounter\fi:a\endcsname
+% \setupalign[\shiftparameter\c!align]%
+% \dosetshiftattributes\c!style\c!color}
+
+\def\dostartisolation{\char0 }
+\def\dostopisolation {\char0 }
+\def\doisolator {\char0 }
+
+\def\doisolatedgroupedalign#1#2%
+ {\groupedcommand
+ {\begingroup\dostartisolation\begingroup#1}
+ {#2\endgroup\dostopisolation\endgroup}}
+
+\def\dosetupisolatedalign#1%
+ {\doisolator
+ \setupalign[#1]\relax}
+
+\def\dodoshiftedindeed#1%
+ {\def\currentshift{#1}%
+ \advance\csname\??ra:#1:c\endcsname\plusone
+ \scratchcounter\csname\??ra:#1:c\endcsname
+ \attribute\shiftedattribute\numexpr1000*\scratchcounter
+ +\csname\??ra#1\ifcsname\??ra#1:\number\scratchcounter\s!parent\endcsname:\number\scratchcounter\fi:a\endcsname
+ \dosetshiftattributes\c!style\c!color
+ \dosetupisolatedalign{\shiftparameter\c!align}}
+
+\def\doshifted#1%
+ {\doisolatedgroupedalign{\dodoshifted{#1}}{}}
+
+\unexpanded\def\startshift[#1]%
+ {\begingroup
+ \dodoshifted{#1}}
+
+\unexpanded\def\stopshift
+ {\endgroup}
+
+\unexpanded\def\setupshifts
+ {\dodoubleempty\dosetupshifts}
+
+\def\dosetupshifts[#1][#2]% not that efficient
+ {\ifsecondargument
+ \getparameters[\??ra#1][#2]%
+ \dodefineshiftindeed{#1}%
+ \else
+ \getparameters[\??ra][#1]%
+ \the\checkalldefinedshifts
+ \fi}
+
+\setupshifts
+ [\c!method=0,
+ \c!continue=\v!no,
+ \c!dy=0,
+ \c!unit=ex,
+ \c!align=,
+ \c!style=,
+ \c!color=]
+
+\def\v!shiftup {shiftup}
+\def\v!shiftdown{shiftdown}
+
+\defineshift [\v!shiftup] [\c!method=0,\c!dy=-1,\c!unit=ex,\c!continue=\v!yes,\c!style=\txx,\c!color=]
+\defineshift [\v!shiftdown] [\c!method=1,\c!dy=.3,\c!unit=ex,\c!continue=\v!yes,\c!style=\txx,\c!color=]
+
+% we want these always so ...
+
+\expandafter\let\expandafter\shiftup \csname\v!shiftup \endcsname
+\expandafter\let\expandafter\shiftdown \csname\v!shiftdown \endcsname
+
+\protect \endinput
+
+% obsolete:
+
+\setupunderbar
+ [\c!alternative=a,
+ \c!rulethickness=\linewidth,
+ \c!bottomoffset=1.5pt,
+ \c!topoffset=2.5pt,
+ \c!rulecolor=]
diff --git a/Master/texmf-dist/tex/context/base/node-seq.lua b/Master/texmf-dist/tex/context/base/node-seq.lua
index 43ca8a99bab..3a2cf5b6ef0 100644
--- a/Master/texmf-dist/tex/context/base/node-seq.lua
+++ b/Master/texmf-dist/tex/context/base/node-seq.lua
@@ -1,6 +1,6 @@
if not modules then modules = { } end modules ['node-seq'] = {
version = 1.001,
- comment = "companion to node-ini.tex",
+ comment = "companion to node-ini.mkiv",
author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
copyright = "PRAGMA ADE / ConTeXt Development Team",
license = "see context related readme files"
@@ -13,7 +13,10 @@ assume that namespaces for the functions are used, but for speed we
use locals to refer to them when compiling the chain.</p>
--ldx]]--
+-- todo: delayed: i.e. we register them in the right order already but delay usage
+
local format, gsub, concat, gmatch = string.format, string.gsub, table.concat, string.gmatch
+local type, loadstring = type, loadstring
sequencer = sequencer or { }
@@ -30,9 +33,11 @@ end
function sequencer.reset()
return {
- list = { },
+ list = { },
order = { },
- kind = { },
+ kind = { },
+ askip = { },
+ gskip = { },
}
end
@@ -68,6 +73,11 @@ function sequencer.appendaction(t,group,action,where,kind,force)
end
end
+function sequencer.enableaction (t,action) t.askip[action] = false end
+function sequencer.disableaction(t,action) t.askip[action] = true end
+function sequencer.enablegroup (t,group) t.gskip[group] = false end
+function sequencer.disablegroup (t,group) t.gskip[group] = true end
+
function sequencer.setkind(t,action,kind)
t.kind[action] = kind
end
@@ -85,7 +95,7 @@ function sequencer.compile(t,compiler,n)
elseif compiler then
t = compiler(t,n)
else
- t = sequencer.tostring(t,n)
+ t = sequencer.tostring(t)
end
return loadstring(t)()
end
@@ -100,16 +110,21 @@ return function(...)
%s
end]]
-function sequencer.tostring(t,n) -- n not done
- local list, order, kind, vars, calls = t.list, t.order, t.kind, { }, { }
+function sequencer.tostring(t)
+ local list, order, kind, gskip, askip = t.list, t.order, t.kind, t.gskip, t.askip
+ local vars, calls, args = { }, { }, nil
for i=1,#order do
local group = order[i]
- local actions = list[group]
- for i=1,#actions do
- local action = actions[i]
- local localized = localize(action)
- vars [#vars +1] = format("local %s = %s", localized, action)
- calls[#calls+1] = format(" %s(...) -- %s %i", localized, group, i)
+ if not gskip[group] then
+ local actions = list[group]
+ for i=1,#actions do
+ local action = actions[i]
+ if not askip[action] then
+ local localized = localize(action)
+ vars [#vars +1] = format("local %s = %s", localized, action)
+ calls[#calls+1] = format(" %s(...) -- %s %i", localized, group, i)
+ end
+ end
end
end
return format(template,concat(vars,"\n"),concat(calls,"\n"))
@@ -130,63 +145,42 @@ return function(head%s)
end]]
function sequencer.nodeprocessor(t,n)
- local list, order, kind, vars, calls, args = t.list, t.order, t.kind, { }, { }, nil
+ local list, order, kind, gskip, askip = t.list, t.order, t.kind, t.gskip, t.askip
+ local vars, calls, args = { }, { }, nil
if n == 0 then
args = ""
elseif n == 1 then
args = ",one"
elseif n == 2 then
args = ",one,two"
+ elseif n == 3 then
+ args = ",one,two,three"
+ elseif n == 4 then
+ args = ",one,two,three,four"
+ elseif n == 5 then
+ args = ",one,two,three,four,five"
else
args = ",..."
end
for i=1,#order do
local group = order[i]
- local actions = list[group]
- for i=1,#actions do
- local action = actions[i]
- local localized = localize(action)
- vars[#vars+1] = format("local %s = %s",localized,action)
- if kind[action] == "nohead" then
- calls[#calls+1] = format(" ok = %s(head%s) done = done or ok -- %s %i",localized,args,group,i)
- else
- calls[#calls+1] = format(" head, ok = %s(head%s) done = done or ok -- %s %i",localized,args,group,i)
+ if not gskip[group] then
+ local actions = list[group]
+ for i=1,#actions do
+ local action = actions[i]
+ if not askip[action] then
+ local localized = localize(action)
+ vars[#vars+1] = format("local %s = %s",localized,action)
+ if kind[action] == "nohead" then
+ calls[#calls+1] = format(" ok = %s(head%s) done = done or ok -- %s %i",localized,args,group,i)
+ else
+ calls[#calls+1] = format(" head, ok = %s(head%s) done = done or ok -- %s %i",localized,args,group,i)
+ end
+ end
end
end
end
local processor = format(template,concat(vars,"\n"),args,concat(calls,"\n"))
- -- print(processor)
+--~ print(processor)
return processor
end
-
---~ hans = {}
---~ taco = {}
-
---~ function hans.a(head,tail) print("a",head,tail) return head,tail,true end
---~ function hans.b(head,tail) print("b",head,tail) return head,tail,true end
---~ function hans.c(head,tail) print("c",head,tail) return head,tail,true end
---~ function hans.x(head,tail) print("x",head,tail) return head,tail,true end
---~ function taco.i(head,tail) print("i",head,tail) return head,tail,true end
---~ function taco.j(head,tail) print("j",head,tail) return head,tail,true end
-
---~ t = sequencer.reset()
-
---~ sequencer.appendgroup(t,"hans")
---~ sequencer.appendgroup(t,"taco")
---~ sequencer.prependaction(t,"hans","hans.a")
---~ sequencer.appendaction (t,"hans","hans.b")
---~ sequencer.appendaction (t,"hans","hans.x")
---~ sequencer.prependaction(t,"hans","hans.c","hans.b")
---~ sequencer.prependaction(t,"taco","taco.i")
---~ sequencer.prependaction(t,"taco","taco.j")
---~ sequencer.removeaction(t,"hans","hans.x")
-
---~ sequencer.setkind(t,"hans.b")
---~ sequencer.setkind(t,"taco.j","nohead")
-
---~ print(sequencer.tostring(t))
-
---~ s = sequencer.compile(t,sequencer.nodeprocessor)
-
---~ print(sequencer.nodeprocessor(t))
---~ print(s("head","tail"))
diff --git a/Master/texmf-dist/tex/context/base/node-ser.lua b/Master/texmf-dist/tex/context/base/node-ser.lua
index 65c071c0050..e632e92da04 100644
--- a/Master/texmf-dist/tex/context/base/node-ser.lua
+++ b/Master/texmf-dist/tex/context/base/node-ser.lua
@@ -1,6 +1,6 @@
if not modules then modules = { } end modules ['node-ser'] = {
version = 1.001,
- comment = "companion to node-ini.tex",
+ comment = "companion to node-ini.mkiv",
author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
copyright = "PRAGMA ADE / ConTeXt Development Team",
license = "see context related readme files"
@@ -196,6 +196,8 @@ local function serialize(root,name,handle,depth,m)
else
handle(format("%s %s=%q,",depth,key(k),v))
end
+ elseif t == "boolean" then
+ handle(format("%s %s=%q,",depth,key(k),tostring(v)))
elseif v then -- userdata or table
serialize(v,k,handle,depth,m+1)
end
diff --git a/Master/texmf-dist/tex/context/base/node-shp.lua b/Master/texmf-dist/tex/context/base/node-shp.lua
index 8cde38dc0a8..50b16efa581 100644
--- a/Master/texmf-dist/tex/context/base/node-shp.lua
+++ b/Master/texmf-dist/tex/context/base/node-shp.lua
@@ -1,6 +1,6 @@
if not modules then modules = { } end modules ['node-shp'] = {
version = 1.001,
- comment = "companion to node-ini.tex",
+ comment = "companion to node-ini.mkiv",
author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
copyright = "PRAGMA ADE / ConTeXt Development Team",
license = "see context related readme files"
@@ -20,7 +20,7 @@ local function cleanup_page(head) -- rough
local start = head
while start do
local id = start.id
- if id == disc or (id == glue and not start.spec) or (id == kern and start.kern == 0) or id == mark then
+ if id == disc or (id == glue and not start.writable) or (id == kern and start.kern == 0) or id == mark then
head, start, tmp = remove_node(head,start)
free_node(tmp)
elseif id == hlist or id == vlist then
diff --git a/Master/texmf-dist/tex/context/base/node-tex.lua b/Master/texmf-dist/tex/context/base/node-tex.lua
index 1995f4aa273..a6eef32693f 100644
--- a/Master/texmf-dist/tex/context/base/node-tex.lua
+++ b/Master/texmf-dist/tex/context/base/node-tex.lua
@@ -1,6 +1,6 @@
if not modules then modules = { } end modules ['node-tex'] = {
version = 1.001,
- comment = "companion to node-ini.tex",
+ comment = "companion to node-ini.mkiv",
author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
copyright = "PRAGMA ADE / ConTeXt Development Team",
license = "see context related readme files"
@@ -34,6 +34,6 @@ function kernel.kerning(head)
return head, done
end
-callback.register('hyphenate' , false)
-callback.register('ligaturing', false)
-callback.register('kerning' , false)
+callbacks.register('hyphenate' , false, "normal hyphenation routine, called elsewhere")
+callbacks.register('ligaturing', false, "normal ligaturing routine, called elsewhere")
+callbacks.register('kerning' , false, "normal kerning routine, called elsewhere")
diff --git a/Master/texmf-dist/tex/context/base/node-tra.lua b/Master/texmf-dist/tex/context/base/node-tra.lua
index aeaa6769e5e..5acd70baf2e 100644
--- a/Master/texmf-dist/tex/context/base/node-tra.lua
+++ b/Master/texmf-dist/tex/context/base/node-tra.lua
@@ -1,6 +1,6 @@
if not modules then modules = { } end modules ['node-tra'] = {
version = 1.001,
- comment = "companion to node-ini.tex",
+ comment = "companion to node-ini.mkiv",
author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
copyright = "PRAGMA ADE / ConTeXt Development Team",
license = "see context related readme files"
@@ -8,11 +8,11 @@ if not modules then modules = { } end modules ['node-tra'] = {
--[[ldx--
<p>This is rather experimental. We need more control and some of this
-might become a runtime module instead.</p>
+might become a runtime module instead. This module will be cleaned up!</p>
--ldx]]--
local utf = unicode.utf8
-local format, match, concat, utfchar = string.format, string.match, table.concat, utf.char
+local format, match, concat, rep, utfchar = string.format, string.match, table.concat, string.rep, utf.char
local ctxcatcodes = tex.ctxcatcodes
@@ -26,9 +26,12 @@ nodes.tracers.characters = nodes.tracers.characters or { }
nodes.tracers.steppers = nodes.tracers.steppers or { }
local glyph = node.id('glyph')
+local hlist = node.id('hlist')
+local vlist = node.id('vlist')
local disc = node.id('disc')
local glue = node.id('glue')
local kern = node.id('kern')
+local rule = node.id('rule')
local whatsit = node.id('whatsit')
local copy_node_list = node.copy_list
@@ -137,11 +140,12 @@ function nodes.tracers.characters.start()
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()
+ local variables = {
+ ['title'] = 'ConTeXt Character Processing Information',
+ ['color-background-one'] = lmx.get('color-background-yellow'),
+ ['color-background-two'] = lmx.get('color-background-purple'),
+ }
+ lmx.show('context-characters.lmx',variables)
nodes.process_characters = npc
tasks.restart("processors", "characters")
end
@@ -205,7 +209,7 @@ function nodes.tracers.steppers.features()
while f do
if f.id == glyph then
local tfmdata, t = fontdata[f.font], { }
- for feature, value in table.sortedpairs(tfmdata.shared.features) do
+ for feature, value in table.sortedhash(tfmdata.shared.features) do
if feature == "number" or feature == "features" then
-- private
elseif type(value) == "boolean" then
@@ -310,7 +314,7 @@ function nodes.show_list(head, message)
if message then
texio.write_nl(message)
end
- for n in traverse(head) do
+ for n in traverse_nodes(head) do
texio.write_nl(tostring(n))
end
end
@@ -330,7 +334,8 @@ function nodes.tosequence(start,stop,compact)
if start then
local t = { }
while start do
- if start.id == glyph then
+ local id = start.id
+ if id == glyph then
local c = start.char
if compact then
if start.components then
@@ -341,11 +346,19 @@ function nodes.tosequence(start,stop,compact)
else
t[#t+1] = format("U+%04X:%s",c,utfchar(c))
end
+ elseif id == whatsit and start.subtype == 6 or start.subtype == 7 then
+ t[#t+1] = "[" .. start.dir .. "]"
+ elseif id == rule then
+ if compact then
+ t[#t+1] = "|"
+ else
+ t[#t+1] = node_type(id)
+ end
else
if compact then
t[#t+1] = "[]"
else
- t[#t+1] = match(tostring(start),": (%S+)")
+ t[#t+1] = node_type(id)
end
end
if start == stop then
@@ -360,22 +373,22 @@ function nodes.tosequence(start,stop,compact)
return concat(t," ")
end
else
- return "<empty>"
+ return "[empty]"
end
end
function nodes.report(t,done)
if done then
if status.output_active then
- texio.write(format("<++ %s>",count(t)))
+ logs.report("nodes","output, changed, %s nodes",nodes.count(t))
else
- texio.write(format("<+ %s>",count(t)))
+ texio.write("nodes","normal, changed, %s nodes",nodes.count(t))
end
else
if status.output_active then
- texio.write(format("<-- %s>",count(t)))
+ logs.report("nodes","output, unchanged, %s nodes",nodes.count(t))
else
- texio.write(format("<- %s>",count(t)))
+ texio.write("nodes","normal, unchanged, %s nodes",nodes.count(t))
end
end
end
@@ -390,7 +403,7 @@ end
function nodes.ids_to_string(head,tail)
local t, last_id, last_n = { }, nil, 0
- for n in traverse_nodes(head,tail) do
+ for n in traverse_nodes(head,tail) do -- hm, does not stop at tail
local id = n.id
if not last_id then
last_id, last_n = id, 1
@@ -404,6 +417,9 @@ function nodes.ids_to_string(head,tail)
end
last_id, last_n = id, 1
end
+ if n == tail then
+ break
+ end
end
if not last_id then
t[#t+1] = "no nodes"
@@ -414,3 +430,45 @@ function nodes.ids_to_string(head,tail)
end
return concat(t," ")
end
+
+nodes.ids_tostring = nodes.ids_to_string
+
+local function show_simple_list(h,depth,n)
+ while h do
+ texio.write_nl(rep(" ",n) .. tostring(h))
+ if not depth or n < depth then
+ local id = h.id
+ if id == hlist or id == vlist then
+ show_simple_list(h.list,depth,n+1)
+ end
+ end
+ h = h.next
+ end
+end
+
+--~ \startluacode
+--~ callback.register('buildpage_filter',function() nodes.show_simple_list(tex.lists.contrib_head) end)
+--~ \stopluacode
+--~ \vbox{b\footnote{n}a}
+--~ \startluacode
+--~ callback.register('buildpage_filter',nil)
+--~ \stopluacode
+
+nodes.show_simple_list = function(h,depth) show_simple_list(h,depth,0) end
+
+function nodes.list_to_utf(h,joiner)
+ local joiner = (joiner ==true and utfchar(0x200C)) or joiner -- zwnj
+ local w = { }
+ while h do
+ if h.id == glyph then -- always true
+ w[#w+1] = utfchar(h.char)
+ if joiner then
+ w[#w+1] = joiner
+ end
+ else
+ w[#w+1] = "[-]"
+ end
+ h = h.next
+ end
+ return concat(w)
+end
diff --git a/Master/texmf-dist/tex/context/base/node-tsk.lua b/Master/texmf-dist/tex/context/base/node-tsk.lua
index d2ac57d6b97..206b4a2668c 100644
--- a/Master/texmf-dist/tex/context/base/node-tsk.lua
+++ b/Master/texmf-dist/tex/context/base/node-tsk.lua
@@ -1,15 +1,17 @@
if not modules then modules = { } end modules ['node-tsk'] = {
version = 1.001,
- comment = "companion to node-ini.tex",
+ comment = "companion to node-ini.mkiv",
author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
copyright = "PRAGMA ADE / ConTeXt Development Team",
license = "see context related readme files"
}
-local trace_tasks = false trackers.register("tasks", function(v) trace_tasks = v end)
+-- this might move to task-*
-tasks = tasks or { }
-tasks.data = tasks.data or { }
+local trace_tasks = false trackers.register("tasks.creation", function(v) trace_tasks = v end)
+
+tasks = tasks or { }
+tasks.data = tasks.data or { }
function tasks.new(name,list)
local tasklist = sequencer.reset()
@@ -19,13 +21,45 @@ function tasks.new(name,list)
end
end
-function tasks.restart(name,group)
+function tasks.restart(name)
local data = tasks.data[name]
if data then
data.runner = false
end
end
+function tasks.enableaction(name,action)
+ local data = tasks.data[name]
+ if data then
+ sequencer.enableaction(data.list,action)
+ data.runner = false
+ end
+end
+
+function tasks.disableaction(name,action)
+ local data = tasks.data[name]
+ if data then
+ sequencer.disableaction(data.list,action)
+ data.runner = false
+ end
+end
+
+function tasks.enablegroup(name,group)
+ local data = tasks.data[name]
+ if data then
+ sequencer.enablegroup(data.list,group)
+ data.runner = false
+ end
+end
+
+function tasks.disablegroup(name,group)
+ local data = tasks.data[name]
+ if data then
+ sequencer.disablegroup(data.list,group)
+ data.runner = false
+ end
+end
+
function tasks.appendaction(name,group,action,where,kind)
local data = tasks.data[name]
if data then
@@ -66,12 +100,14 @@ local created, total = 0, 0
statistics.register("node list callback tasks", function()
if total > 0 then
- return string.format("%s unique tasks, %s created, %s calls",table.count(tasks.data),created,total)
+ return string.format("%s unique task lists, %s instances (re)created, %s calls",table.count(tasks.data),created,total)
else
return nil
end
end)
+local compile, nodeprocessor = sequencer.compile, sequencer.nodeprocessor
+
function tasks.actions(name,n) -- we optimize for the number or arguments (no ...)
local data = tasks.data[name]
if data then
@@ -84,7 +120,7 @@ function tasks.actions(name,n) -- we optimize for the number or arguments (no ..
if trace_tasks then
logs.report("nodes","creating task runner '%s'",name)
end
- runner = sequencer.compile(data.list,sequencer.nodeprocessor,0)
+ runner = compile(data.list,nodeprocessor,0)
data.runner = runner
end
return runner(head)
@@ -96,9 +132,9 @@ function tasks.actions(name,n) -- we optimize for the number or arguments (no ..
if not runner then
created = created + 1
if trace_tasks then
- logs.report("nodes","creating task runner '%s'",name)
+ logs.report("nodes","creating task runner '%s' with 1 extra arguments",name)
end
- runner = sequencer.compile(data.list,sequencer.nodeprocessor,1)
+ runner = compile(data.list,nodeprocessor,1)
data.runner = runner
end
return runner(head,one)
@@ -110,13 +146,55 @@ function tasks.actions(name,n) -- we optimize for the number or arguments (no ..
if not runner then
created = created + 1
if trace_tasks then
- logs.report("nodes","creating task runner '%s'",name)
+ logs.report("nodes","creating task runner '%s' with 2 extra arguments",name)
end
- runner = sequencer.compile(data.list,sequencer.nodeprocessor,2)
+ runner = compile(data.list,nodeprocessor,2)
data.runner = runner
end
return runner(head,one,two)
end
+ elseif n == 3 then
+ return function(head,one,two,three)
+ total = total + 1 -- will go away
+ local runner = data.runner
+ if not runner then
+ created = created + 1
+ if trace_tasks then
+ logs.report("nodes","creating task runner '%s' with 3 extra arguments",name)
+ end
+ runner = compile(data.list,nodeprocessor,3)
+ data.runner = runner
+ end
+ return runner(head,one,two,three)
+ end
+ elseif n == 4 then
+ return function(head,one,two,three,four)
+ total = total + 1 -- will go away
+ local runner = data.runner
+ if not runner then
+ created = created + 1
+ if trace_tasks then
+ logs.report("nodes","creating task runner '%s' with 4 extra arguments",name)
+ end
+ runner = compile(data.list,nodeprocessor,4)
+ data.runner = runner
+ end
+ return runner(head,one,two,three,four)
+ end
+ elseif n == 5 then
+ return function(head,one,two,three,four,five)
+ total = total + 1 -- will go away
+ local runner = data.runner
+ if not runner then
+ created = created + 1
+ if trace_tasks then
+ logs.report("nodes","creating task runner '%s' with 5 extra arguments",name)
+ end
+ runner = compile(data.list,nodeprocessor,5)
+ data.runner = runner
+ end
+ return runner(head,one,two,three,four,five)
+ end
else
return function(head,...)
total = total + 1 -- will go away
@@ -124,9 +202,9 @@ function tasks.actions(name,n) -- we optimize for the number or arguments (no ..
if not runner then
created = created + 1
if trace_tasks then
- logs.report("nodes","creating task runner '%s'",name)
+ logs.report("nodes","creating task runner '%s' with n extra arguments",name)
end
- runner = sequencer.compile(data.list,sequencer.nodeprocessor,3)
+ runner = compile(data.list,nodeprocessor,"n")
data.runner = runner
end
return runner(head,...)
@@ -137,6 +215,33 @@ function tasks.actions(name,n) -- we optimize for the number or arguments (no ..
end
end
+function tasks.table(name) --maybe move this to task-deb.lua
+ local tsk = tasks.data[name]
+ local lst = tsk and tsk.list
+ local HL, NC, NR, bold, type = context.HL, context.NC, context.NR, context.bold, context.type
+ if lst then
+ local list, order = lst.list, lst.order
+ if list and order then
+ context.starttabulate { "|l|l|" }
+ NC() bold("category") NC() bold("function") NC() NR()
+ for i=1,#order do
+ HL()
+ local o = order[i]
+ local l = list[o]
+ if #l == 0 then
+ NC() type(o) NC() context("unset") NC() NR()
+ else
+ local done = false
+ for k, v in table.sortedhash(l) do
+ NC() if not done then type(o) done = true end NC() type(v) NC() NR()
+ end
+ end
+ end
+ context.stoptabulate()
+ end
+ end
+end
+
tasks.new (
"processors",
{
@@ -172,3 +277,39 @@ tasks.new (
"after", -- for users
}
)
+
+tasks.new (
+ "mvlbuilders",
+ {
+ "before", -- for users
+ "normalizers",
+ "after", -- for users
+ }
+)
+
+tasks.new (
+ "vboxbuilders",
+ {
+ "before", -- for users
+ "normalizers",
+ "after", -- for users
+ }
+)
+
+--~ tasks.new (
+--~ "parbuilders",
+--~ {
+--~ "before", -- for users
+--~ "lists",
+--~ "after", -- for users
+--~ }
+--~ )
+
+--~ tasks.new (
+--~ "pagebuilders",
+--~ {
+--~ "before", -- for users
+--~ "lists",
+--~ "after", -- for users
+--~ }
+--~ )
diff --git a/Master/texmf-dist/tex/context/base/node-tst.lua b/Master/texmf-dist/tex/context/base/node-tst.lua
index 4fb6b4bcaf5..d7ea96f26d9 100644
--- a/Master/texmf-dist/tex/context/base/node-tst.lua
+++ b/Master/texmf-dist/tex/context/base/node-tst.lua
@@ -1,6 +1,6 @@
if not modules then modules = { } end modules ['node-tst'] = {
version = 1.001,
- comment = "companion to node-ini.tex",
+ comment = "companion to node-ini.mkiv",
author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
copyright = "PRAGMA ADE / ConTeXt Development Team",
license = "see context related readme files"
@@ -17,12 +17,12 @@ local find_node_tail = node.tail or node.slide
local chardata = characters.data
-function nodes.leftskip(n)
+function nodes.the_left_margin(n) -- todo: three values
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
+ return n.spec.width
else
return 0
end
@@ -37,14 +37,14 @@ function nodes.leftskip(n)
return 0
end
-function nodes.rightskip(n)
+function nodes.the_right_margin(n)
if n then
n = find_node_tail(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
+ return n.spec.width
else
return 0
end
diff --git a/Master/texmf-dist/tex/context/base/node-typ.lua b/Master/texmf-dist/tex/context/base/node-typ.lua
new file mode 100644
index 00000000000..5ab6b6975f4
--- /dev/null
+++ b/Master/texmf-dist/tex/context/base/node-typ.lua
@@ -0,0 +1,53 @@
+if not modules then modules = { } end modules ['node-typ'] = {
+ version = 1.001,
+ comment = "companion to node-ini.mkiv",
+ author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
+ copyright = "PRAGMA ADE / ConTeXt Development Team",
+ license = "see context related readme files"
+}
+
+-- this will be replaced by blob-ini cum suis so typesetting will go away
+
+local utfvalues = string.utfvalues
+
+local newglyph = nodes.glyph
+local newglue = nodes.glue
+
+local hpack, vpack = node.hpack, node.vpack
+
+typesetting = typesetting or { }
+
+local function tonodes(str,fontid,spacing) -- don't use this
+ local head, prev = nil, nil
+ for s in utfvalues(str) do
+ local next
+ if spacing and s == 32 then
+ next = newglue(spacing or 64*1024*10)
+ else
+ next = newglyph(fontid or 1,s)
+ end
+ if not head then
+ head = next
+ else
+ prev.next = next
+ next.prev = prev
+ end
+ prev = next
+ end
+ return head
+end
+
+typesetting.tonodes = tonodes
+
+function typesetting.hpack(str,fontid,spacing)
+ return hpack(tonodes(str,fontid,spacing))
+end
+
+function typesetting.vpack(str,fontid,spacing)
+ -- vpack is just a hack, and a proper implentation is on the agenda
+ -- as it needs more info etc than currently available
+ return vpack(tonodes(str,fontid,spacing))
+end
+
+--~ node.write(typesetting.hpack("Hello World!"))
+--~ node.write(typesetting.hpack("Hello World!",1,100*1024*10))
diff --git a/Master/texmf-dist/tex/context/base/pack-box.mkii b/Master/texmf-dist/tex/context/base/pack-box.mkii
index 1be84055237..8adeedb91b5 100644
--- a/Master/texmf-dist/tex/context/base/pack-box.mkii
+++ b/Master/texmf-dist/tex/context/base/pack-box.mkii
@@ -751,7 +751,7 @@
\setvalue{\??ab\??ab \v!line\v!middle}{\baselinemiddlebox}
\setvalue{\??ab\??ab \v!line\v!right }{\baselinerightbox}
-\def\offsetbox
+\unexpanded\def\offsetbox
{\dodoubleempty\dooffsetbox[]}
% left/right/top/bottomoffset -> dimensions change
@@ -841,8 +841,8 @@
% \placefigure[left,none]{}{\offset[bottomoffset=1cm]{\externalfigure[koe][breedte=3cm]}}
% \input tufte
-\def\offset {\dodoubleempty\dooffsetbox [\hbox]} % yes or no
-\def\aligned{\dosingleempty\doalignedbox[\hbox]} % yes or no
+\unexpanded\def\offset {\dodoubleempty\dooffsetbox [\hbox]} % yes or no
+\unexpanded\def\aligned{\dosingleempty\doalignedbox[\hbox]} % yes or no
%\ruledhbox{\offsetbox[x=-1cm,y=-1cm,location=c]
% {\framed[width=4cm,height=4cm]{x}}}
@@ -854,9 +854,9 @@
\hbox to \wd\scratchbox{#1#4#2}%
\egroup}
-\def\ltabbed{\dotabbed\relax\hss}
-\def\rtabbed{\dotabbed\hss \relax}
-\def\ctabbed{\dotabbed\hss \hss} \let\mtabbed\ctabbed
+\unexpanded\def\ltabbed{\dotabbed\relax\hss}
+\unexpanded\def\rtabbed{\dotabbed\hss \relax}
+\unexpanded\def\ctabbed{\dotabbed\hss \hss} \let\mtabbed\ctabbed
% \ltabbed{\romeins{3}}{\romeins{1}} test \endgraf
% \ltabbed{\romeins{3}}{\romeins{2}} test \endgraf
@@ -903,7 +903,7 @@
% to be documented
-\def\phantombox[#1]%
+\unexpanded\def\phantombox[#1]%
{\hbox\bgroup
\getparameters
[\??ol]
@@ -919,7 +919,7 @@
% \backgroundimage{1}{\hsize}{\vsize}{\externalfigure[cow][\c!width=3cm]}
-\def\backgroundimage#1#2#3% repeat hsize vsize
+\unexpanded\def\backgroundimage#1#2#3% repeat hsize vsize
{\bgroup
\forgetall
\dowithnextbox
diff --git a/Master/texmf-dist/tex/context/base/pack-box.mkiv b/Master/texmf-dist/tex/context/base/pack-box.mkiv
index 2ab765d7d75..6cb492aa6df 100644
--- a/Master/texmf-dist/tex/context/base/pack-box.mkiv
+++ b/Master/texmf-dist/tex/context/base/pack-box.mkiv
@@ -103,7 +103,7 @@
\egroup}%
\vbox}
-\def\defineanchor
+\unexpanded\def\defineanchor
{\doquadrupleempty\dodefineanchor}
\def\dodefineanchor[#1][#2][#3][#4]%
@@ -123,7 +123,7 @@
\def\@@collectorbox{@@collectorbox}
-\def\definecollector
+\unexpanded\def\definecollector
{\dodoubleargument\dodefinecollector}
\def\dodefinecollector[#1][#2]%
@@ -139,7 +139,7 @@
\c!hoffset=\!!zeropoint,\c!voffset=\!!zeropoint,
\c!location=rb,\c!corner=,#2]}
-\def\setupcollector
+\unexpanded\def\setupcollector
{\dodoubleargument\dosetupcollector}
\def\dosetupcollector[#1][#2]%
@@ -388,7 +388,7 @@
[#1][#2]}%
{\egroup\getvalue{#1}}}
-\def\defineornament
+\unexpanded\def\defineornament
{\dotripleempty\dodefineornament}
\def\dodefineornament[#1][#2][#3]%
@@ -430,7 +430,7 @@
\newcount\nofbleeds % per pag
-\def\setupbleeding
+\unexpanded\def\setupbleeding
{\dodoubleempty\getparameters[\??bg]}
\setupbleeding
@@ -538,11 +538,6 @@
%
% \input tufte
%
-% \placesomefloat[right]{none}
-% {\bleed[width=5cm,height=3cm,location=rb]{\externalfigure[koe][bleed]}}
-%
-% \input tufte
-%
% \placefigure
% [top,none]
% {} % no caption
@@ -746,7 +741,7 @@
\setvalue{\??ab\??ab \v!line\v!middle}{\baselinemiddlebox}
\setvalue{\??ab\??ab \v!line\v!right }{\baselinerightbox}
-\def\offsetbox
+\unexpanded\def\offsetbox
{\dodoubleempty\dooffsetbox[]}
% left/right/top/bottomoffset -> dimensions change
@@ -836,8 +831,8 @@
% \placefigure[left,none]{}{\offset[bottomoffset=1cm]{\externalfigure[koe][breedte=3cm]}}
% \input tufte
-\def\offset {\dodoubleempty\dooffsetbox [\hbox]} % yes or no
-\def\aligned{\dosingleempty\doalignedbox[\hbox]} % yes or no
+\unexpanded\def\offset {\dodoubleempty\dooffsetbox [\hbox]} % yes or no
+\unexpanded\def\aligned{\dosingleempty\doalignedbox[\hbox]} % yes or no
%\ruledhbox{\offsetbox[x=-1cm,y=-1cm,location=c]
% {\framed[width=4cm,height=4cm]{x}}}
@@ -849,9 +844,9 @@
\hbox to \wd\scratchbox{#1#4#2}%
\egroup}
-\def\ltabbed{\dotabbed\relax\hss}
-\def\rtabbed{\dotabbed\hss \relax}
-\def\ctabbed{\dotabbed\hss \hss} \let\mtabbed\ctabbed
+\unexpanded\def\ltabbed{\dotabbed\relax\hss}
+\unexpanded\def\rtabbed{\dotabbed\hss \relax}
+\unexpanded\def\ctabbed{\dotabbed\hss \hss} \let\mtabbed\ctabbed
% \ltabbed{\romeins{3}}{\romeins{1}} test \endgraf
% \ltabbed{\romeins{3}}{\romeins{2}} test \endgraf
@@ -898,7 +893,7 @@
% to be documented
-\def\phantombox[#1]%
+\unexpanded\def\phantombox[#1]%
{\hbox\bgroup
\getparameters
[\??ol]
@@ -914,7 +909,7 @@
% \backgroundimage{1}{\hsize}{\vsize}{\externalfigure[cow][\c!width=3cm]}
-\def\backgroundimage#1#2#3% repeat hsize vsize
+\unexpanded\def\backgroundimage#1#2#3% repeat hsize vsize
{\bgroup
\forgetall
\dowithnextbox
diff --git a/Master/texmf-dist/tex/context/base/pack-lyr.mkiv b/Master/texmf-dist/tex/context/base/pack-lyr.mkiv
index 2e1bd2a11ea..0cb3ee24456 100644
--- a/Master/texmf-dist/tex/context/base/pack-lyr.mkiv
+++ b/Master/texmf-dist/tex/context/base/pack-lyr.mkiv
@@ -36,7 +36,7 @@
\ifx\undefined\defineoverlay \message{loaded to early} \wait \fi
-\def\defineoverlay
+\unexpanded\def\defineoverlay
{\dotripleempty\dodefineoverlay}
\def\dodefineoverlay[#1][#2][#3]% overlay [layer] content
@@ -67,7 +67,7 @@
% todo : links/rechts
-\def\definelayer
+\unexpanded\def\definelayer
{\dodoubleargument\dodefinelayer}
\def\dodefinelayer[#1][#2]% \zeropoint ipv \!!zeropoint
@@ -103,7 +103,7 @@
%D After a layer is defined, you can change its
%D characteristics.
-\def\setuplayer
+\unexpanded\def\setuplayer
{\dodoubleargument\dosetuplayer}
\def\dosetuplayer[#1][#2]%
@@ -214,7 +214,7 @@
\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
+\unexpanded\def\definelayerpreset
{\dodoubleargument\dodefinelayerpreset}
% \def\dodefinelayerpreset[#1][#2]%
@@ -649,13 +649,13 @@
% The next mechanism is obsolete and will be removed in \MKIV\ (or move to
% the compatibility module.
-% \newskip\xposition \newskip\yposition
-% \newskip\xdimension \newskip\ydimension
-% \newskip\xoffset \newskip\yoffset
+\newskip\xposition \newskip\yposition
+\newskip\xdimension \newskip\ydimension
+\newskip\xoffset \newskip\yoffset
% already defined \newbox\positionbox
-\def\startpositioning
+\unexpanded\def\startpositioning
{\bgroup
\xposition \zeropoint \yposition \zeropoint
\xdimension\zeropoint \ydimension\zeropoint
@@ -663,7 +663,7 @@
\hfuzz \paperwidth \vfuzz \paperheight
\setbox\positionbox\hbox\bgroup}
-\def\stoppositioning
+\unexpanded\def\stoppositioning
{\doifnot\@@psoffset\v!yes
{\global\xoffset\zeropoint
\global\yoffset\zeropoint}%
@@ -694,7 +694,7 @@
\c!xoffset=\!!zeropoint,%
\c!yoffset=\!!zeropoint]}
-\def\setuppositioning
+\unexpanded\def\setuppositioning
{\resetpositioning
\dodoubleargument\getparameters[\??ps]}
diff --git a/Master/texmf-dist/tex/context/base/pack-obj.lua b/Master/texmf-dist/tex/context/base/pack-obj.lua
index ce1c520ce65..0ee46fc99d1 100644
--- a/Master/texmf-dist/tex/context/base/pack-obj.lua
+++ b/Master/texmf-dist/tex/context/base/pack-obj.lua
@@ -1,6 +1,6 @@
if not modules then modules = { } end modules ['pack-obj'] = {
version = 1.001,
- comment = "companion to pack-obj.tex",
+ comment = "companion to pack-obj.mkiv",
author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
copyright = "PRAGMA ADE / ConTeXt Development Team",
license = "see context related readme files"
diff --git a/Master/texmf-dist/tex/context/base/pack-obj.mkiv b/Master/texmf-dist/tex/context/base/pack-obj.mkiv
index 14afef62387..81220e32437 100644
--- a/Master/texmf-dist/tex/context/base/pack-obj.mkiv
+++ b/Master/texmf-dist/tex/context/base/pack-obj.mkiv
@@ -292,7 +292,7 @@
{% \initializepaper
\forgetall
\dontshowcomposition
- \setbox\scratchbox\vbox
+ \setbox\scratchbox\vbox attr \viewerlayerattribute \attribute\viewerlayerattribute
{\doinsertobject{#1}{#2}}%
\setbox\scratchbox#3%
{\vbox to #5\scaledpoint
@@ -304,6 +304,7 @@
%\vss\box\scratchbox
\vss\hbox to #4\scaledpoint{\box\scratchbox\hss}% fix Chof
\fi\fi}}%
+% \forcecolorhack % needed in order to use layers etc
\box\scratchbox
\endgroup}
diff --git a/Master/texmf-dist/tex/context/base/pack-rul.lua b/Master/texmf-dist/tex/context/base/pack-rul.lua
index 6bbd3c856b4..378167c979a 100644
--- a/Master/texmf-dist/tex/context/base/pack-rul.lua
+++ b/Master/texmf-dist/tex/context/base/pack-rul.lua
@@ -1,6 +1,6 @@
if not modules then modules = { } end modules ['pack-rul'] = {
version = 1.001,
- comment = "companion to pack-rul.tex",
+ comment = "companion to pack-rul.mkiv",
author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
copyright = "PRAGMA ADE / ConTeXt Development Team",
license = "see context related readme files"
@@ -10,16 +10,16 @@ if not modules then modules = { } end modules ['pack-rul'] = {
<p>An explanation is given in the history document <t>mk</t>.</p>
--ldx]]--
-local texdimen, texcount, texbox, texwd = tex.dimen, tex.count, tex.box, tex.wd
+local texdimen, texcount, texbox = tex.dimen, tex.count, tex.box
local hpack, free, copy, traverse_id = node.hpack, node.free, node.copy_list, node.traverse_id
function commands.doreshapeframedbox(n)
- local noflines, lastlinelength = 0, 0
- if texwd[n] ~= 0 then
- local list = texbox[n].list
+ local noflines, lastlinelength, box = 0, 0, texbox[n]
+ if box.width ~= 0 then
+ local list = box.list
if list then
local width, done = 0, false
- for h in traverse_id('hlist',list) do
+ for h in traverse_id('hlist',list) do -- no dir etc needed
local l = h.list
if l then
done = true
@@ -37,14 +37,14 @@ function commands.doreshapeframedbox(n)
local l = h.list
if l then
-- if h.width ~= width then -- else no display math handling (uses shift)
- h.list = hpack(l,width,'exactly')
+ h.list = hpack(l,width,'exactly',h.dir)
h.shift = 0 -- needed for display math
h.width = width
-- end
end
end
end
- texwd[n] = width
+ box.width = width
end
end
end
diff --git a/Master/texmf-dist/tex/context/base/pack-rul.mkiv b/Master/texmf-dist/tex/context/base/pack-rul.mkiv
index 26fdaadeaf5..afacc2901b1 100644
--- a/Master/texmf-dist/tex/context/base/pack-rul.mkiv
+++ b/Master/texmf-dist/tex/context/base/pack-rul.mkiv
@@ -13,6 +13,8 @@
\writestatus{loading}{ConTeXt Packaging Macros / Ruled Content}
+%D redo framedtexts like framedcontent (parameter stuff)
+
%D After a few months testing this solution is now added
%D to the core. This introduces a possible incompatibility
%D between \MKII\ and \MKIV\ but for the better.
@@ -51,7 +53,7 @@
\def\dosetuplinewidth[#1]%
{\assigndimension{#1}\linewidth{.2\points}{.4\points}{.6\points}}
-\def\setuplinewidth
+\unexpanded\def\setuplinewidth
{\dosingleargument\dosetuplinewidth}
%D \macros
@@ -71,7 +73,7 @@
%D
%D \showsetup{setupscreens}
-\def\setupscreens
+\unexpanded\def\setupscreens
{\dodoubleargument\getparameters[\??rs]}
%D We will communicate through module specific variables, current
@@ -293,7 +295,7 @@
\appendtoks \oninterlineskip \to \everyoverlay
-\def\defineoverlay
+\unexpanded\def\defineoverlay
{\dodoubleargument\dodefineoverlay}
\def\dodefineoverlay[#1][#2]%
@@ -415,7 +417,7 @@
\setlayoutcomponentattribute\v!background\component
\fi
\let\foregroundbox\normalforegroundbox
- \hbox to \backgroundwidth \layoutcomponentboxattribute % width in case 'foreground' is used as overlay
+ \hbox \layoutcomponentboxattribute to \backgroundwidth % width in case 'foreground' is used as overlay
{\expandafter\dododobackgroundbox\framedbackground,\s!unknown,\relax % hm, messy .. look into it
\box\framebox\hss}}}
@@ -610,6 +612,8 @@
\def\inheritlocalframed[#1]#2[#3]{\letvalue{#1\s!parent}#3}
\def\copylocalframed [#1]#2[#3]{\setvalue{#1\s!parent}{#3}}
+\let\setuplocalframed\getparameters % obsolete
+
\presetlocalframed[\??ol]
\newcount\framednesting
@@ -620,7 +624,7 @@
\expandafter\let\csname\??ol:\the\framednesting\s!parent\endcsname\??ol
\dodoubleempty\startlocalframed[\??ol:\the\framednesting]}
-\def\setupframed
+\unexpanded\def\setupframed
{\dodoubleempty\dosetupframed}
\def\dosetupframed
@@ -766,24 +770,38 @@
%D Because it is used so often the he next macro is (and
%D looks) rather optimized.
+% \def\s!root{root} % maybe configurable
+
\let\postprocessframebox\relax
\let\@@framed\s!unknown
-\def\framedparameter #1{\csname\doframedparameter\@@framed#1\endcsname}
+% \def\framedparameter #1{\csname\doframedparameter\@@framed#1\endcsname}
+% \def\framedparameterhash#1{\doframedparameterhash \@@framed#1}
+%
+% \def\doframedparameter #1#2{\ifcsname#1#2\endcsname#1#2\else\expandafter\doframedparentparameter \csname#1\s!parent\endcsname#2\fi}
+% \def\doframedparameterhash#1#2{\ifcsname#1#2\endcsname #1\else\expandafter\doframedparentparameterhash\csname#1\s!parent\endcsname#2\fi}
+%
+% \def\doframedparentparameter #1#2{\ifx#1\relax\s!empty\else\doframedparameter #1#2\fi}
+% \def\doframedparentparameterhash#1#2{\ifx#1\relax \else\doframedparameterhash#1#2\fi}
+%
+% \def\doframedparentparameter#1#2{\ifx#1\relax\doframedrootparameter#2\else\doframedparameter#1#2\fi}
+% \def\doframedrootparameter #1{\ifcsname\??oi#1\endcsname\??oi#1\else\s!empty\fi}
+
+\def\framedparameter #1{\csname\doframedparameter\@@framed{#1}\endcsname}
\def\framedparameterhash#1{\doframedparameterhash \@@framed#1}
-\def\doframedparameter #1#2{\ifcsname#1#2\endcsname#1#2\else\expandafter\doframedparentparameter \csname#1\s!parent\endcsname#2\fi}
+\def\doframedparameter #1#2{\ifcsname#1#2\endcsname#1#2\else\expandafter\doframedparentparameter \csname#1\s!parent\endcsname{#2}\fi}
\def\doframedparameterhash#1#2{\ifcsname#1#2\endcsname #1\else\expandafter\doframedparentparameterhash\csname#1\s!parent\endcsname#2\fi}
-\def\doframedparentparameter #1#2{\ifx#1\relax\s!empty\else\doframedparameter #1#2\fi}
+\def\doframedparentparameter #1#2{\ifx#1\relax\s!empty\else\doframedparameter #1{#2}\fi}
\def\doframedparentparameterhash#1#2{\ifx#1\relax \else\doframedparameterhash#1#2\fi}
-% \def\s!root{root} % maybe configurable
-
-\def\doframedparentparameter#1#2{\ifx#1\relax\doframedrootparameter#2\else\doframedparameter#1#2\fi}
+\def\doframedparentparameter#1#2{\ifx#1\relax\doframedrootparameter#2\else\doframedparameter#1{#2}\fi}
\def\doframedrootparameter #1{\ifcsname\??oi#1\endcsname\??oi#1\else\s!empty\fi}
+\def\frameddimension#1{\the\dimexpr\framedparameter{#1}\relax}
+
\def\dosetframedattributes#1#2% style color
{\edef\fontattributehash {\framedparameterhash#1}%
\edef\colorattributehash{\framedparameterhash#2}%
@@ -866,7 +884,7 @@
% todo: protect local \framednames
-\def\startlocalframed[#1][#2]%
+\unexpanded\def\startlocalframed[#1][#2]%
{\bgroup
\inframedtrue
\edef\@@framed{#1}%
@@ -884,7 +902,7 @@
\framedparameter\c!extras
% to get the right spacing
\edef\fontattributehash{\framedparameterhash\c!foregroundstyle}%
- \ifx\fontattributehash\empty\else\dosetfontattribute \fontattributehash\c!foregroundstyle\fi
+ \ifx\fontattributehash\empty\else\dosetfontattribute\fontattributehash\c!foregroundstyle\fi
% beware, both the frame and background offset can be overruled
%
\edef\doframedsetups{\framedparameter\c!setups}%
@@ -1088,6 +1106,7 @@
\fi
\edef\framedwidth {\ifdim\!!framedwidth >\zeropoint\the\!!framedwidth \else\!!zeropoint\fi}% a new feature, visible for user
\edef\framedheight{\ifdim\!!framedheight>\zeropoint\the\!!framedheight\else\!!zeropoint\fi}% a new feature, visible for user
+ \edef\framedoffset{\the\dimexpr\ifboxhasoffset\localoffset\else\zeropoint\fi}%
\@@startframedorientation
\afterassignment\dodowithframebox
\setbox\framebox\next}
@@ -1134,7 +1153,7 @@
%D ...,bottom=\kern0pt,...
%D \stoptyping
-\def\stoplocalframed
+\unexpanded\def\stoplocalframed
{\dontshowcomposition
\@@stopframedorientation % hm, wrong place ! should rotate the result (after reshape)
\handleframedlocator\c!before\@@locallocation
@@ -1441,14 +1460,16 @@
\def\doinlinemframed[#1]#2%
{\begingroup
\mframedstyle\mathstyle\relax
- \inframed[#1]{$\triggermathstyle\mframedstyle#2$}%
+ \inframed[#1]{\Ustartmath\triggermathstyle\mframedstyle#2\Ustopmath}%
\endgroup}
+\def\funnymathstrut{\Ustartmath\triggermathstyle\mframedstyle\vphantom{(}\Ustopmath}
+
\def\dodisplaymframed[#1]#2%
{\begingroup
\mframedstyle\mathstyle\relax
- \def\normalstrut{$\triggermathstyle\mframedstyle\vphantom{(}$}%
- \framed[#1]{$\triggermathstyle\mframedstyle#2$}%
+ \let\normalstrut\funnymathstrut
+ \framed[#1]{\Ustartmath\triggermathstyle\mframedstyle#2\Ustopmath}%
\endgroup}
\def\mframed {\dosingleempty\dodisplaymframed}
@@ -1862,9 +1883,9 @@
%D framecolorkaderkleur=DemoBlue,
%D rulethickness=2pt]
%D \def\status%
-%D {backgroundoffset=\framedparameter\c!backgroundoffset\\
-%D frameoffset=\framedparameter\c!frameoffset\\
-%D depth=\framedparameter\c!depth}
+%D {backgroundoffset=\the\dimexpr\framedparameter\c!backgroundoffset\relax\\
+%D frameoffset=\the\dimexpr\framedparameter\c!frameoffset\relax\\
+%D depth=\the\dimexpr\framedparameter\c!depth\relax}
%D \dontleavehmode \ruledhbox{\framed[backgroundoffset=0pt,frameoffset=0pt]{\status}}
%D \vss
%D \dontleavehmode \ruledhbox{\framed[backgroundoffset=5pt,frameoffset=0pt]{\status}}
@@ -2048,7 +2069,7 @@
%D
%D \showsetup{setupblackrules}
-\def\setupblackrules
+\unexpanded\def\setupblackrules
{\dodoubleargument\getparameters[\??bj]}
%D \macros
@@ -2185,7 +2206,7 @@
%D
%D \showsetup{setupmarginrules}
-\def\setupmarginrules
+\unexpanded\def\setupmarginrules
{\dodoubleargument\getparameters[\??ka]}
%D \macros
@@ -2267,13 +2288,13 @@
%D \showsetup{vl}
%D \showsetup{hl}
-\def\complexvl[#1]%
+\def\dovlwdhtdp#1#2#3%
{\bgroup
- \!!dimena#1\strutht
- \!!dimenb#1\strutdp
+ \!!dimena#2\strutht
+ \!!dimenb#3\strutdp
\setbox\scratchbox\hbox
{\vrule
- \!!width \linewidth
+ \!!width #1\linewidth
\!!height\!!dimena
\!!depth \!!dimenb}%
\dp\scratchbox\strutdp
@@ -2281,6 +2302,9 @@
\box\scratchbox
\egroup}
+\def\complexvl[#1]%
+ {\dovlwdhtdp{1}{#1}{#1}}
+
\def\complexhl[#1]%
{\hbox
{\vrule
@@ -2412,7 +2436,7 @@
\def\dosetupthinrules[#1]%
{\getparameters[\??dl][#1]}
-\def\setupthinrules
+\unexpanded\def\setupthinrules
{\dosingleargument\dosetupthinrules}
\def\dothinrules[#1]%
@@ -2633,11 +2657,11 @@
\c!orientation=,
\c!indenting=,
#2]%
- \setvalue{\e!start#1}{\dostartframedtext[#1]}%
- \setvalue{\e!stop #1}{\dostopframedtext }%
- \setvalue {#1}{\doframedtext [#1]}}
+ \setuvalue{\e!start#1}{\dostartframedtext[#1]}%
+ \setuvalue{\e!stop #1}{\dostopframedtext }%
+ \setuvalue {#1}{\doframedtext [#1]}}
-\def\defineframedtext
+\unexpanded\def\defineframedtext
{\dodoubleempty\dodefineframedtext}
%D We define the general (and original) case by just saying:
@@ -2648,7 +2672,7 @@
%D because we have to handle an optional identifier (and
%D because these commands evolved out of a single case).
-\def\framedtextparameter#1#2%
+\def\framedtextparameter#1#2% todo: currentframedtext
{\csname\??kd#1#2\endcsname}
\def\dosetupframedtexts[#1][#2]%
@@ -2659,7 +2683,7 @@
\getparameters[\??kd\v!framedtext][#1]%
\fi}
-\def\setupframedtexts
+\unexpanded\def\setupframedtexts
{\dodoubleempty\dosetupframedtexts}
\def\dostartframedtext
@@ -2806,12 +2830,12 @@
%D
%D \showsetup{defineframed}
-\def\defineframed
+\unexpanded\def\defineframed
{\dodoubleempty\dodefineframed}
\def\dodefineframed[#1][#2]%
{\iffirstargument
- \setvalue{#1}{\dodoubleempty\doframed[#2]}%
+ \setuvalue{#1}{\dodoubleempty\doframed[#2]}%
\fi}
\def\doframed[#1][#2]%
@@ -2865,7 +2889,7 @@
%D The implementation looks a bit complicated due to the
%D optional arguments.
-\def\setuptextrules
+\unexpanded\def\setuptextrules
{\dodoubleargument\getparameters[\??tl]}
\def\complextextrule[#1]% if needed we can make it installable
@@ -2888,15 +2912,13 @@
\setbox\scratchbox\hbox to \hsize
{\dimen4\dimexpr .5ex+.5\linewidth\relax
\dimen6\dimexpr-.5ex+.5\linewidth\relax
- \doifnothing{#1}\firstargumentfalse
- \iffirstargument
- \doifelse\@@tllocation\v!inmargin
- {\llap{\doattributes\??tl\c!style\c!color{#1}\hskip\leftmargindistance}}
- {\color[\@@tlrulecolor]
- {\vrule\!!height\dimen4\!!depth\dimen6\!!width\@@tlwidth}%
- \hbox spread 2\dimexpr\@@tldistance\relax
- {\hss\doattributes\??tl\c!style\c!color{\strut#1}\hss}}%
- \fi
+ \doifsomething{#1}
+ {\doifelse\@@tllocation\v!inmargin
+ {\llap{\doattributes\??tl\c!style\c!color{#1}\hskip\leftmargindistance}}
+ {\color[\@@tlrulecolor]
+ {\vrule\!!height\dimen4\!!depth\dimen6\!!width\@@tlwidth}%
+ \hbox spread 2\dimexpr\@@tldistance\relax
+ {\hss\doattributes\??tl\c!style\c!color{\strut#1}\hss}}}%
\color[\@@tlrulecolor]
{\leaders\hrule\!!height\dimen4\!!depth\dimen6\hfill}}%
\ht\scratchbox\strutht
@@ -2961,14 +2983,14 @@
%D The grouped commands also supports bodyfont switching:
-\def\starttextrule#1%
+\unexpanded\def\starttextrule#1%
{\bgroup
\def\dounknowntextrule{\domiddletextrule}
\dotoptextrule{#1}
\bgroup
\doifsomething\@@tlbodyfont{\switchtobodyfont[\@@tlbodyfont]}}
-\def\stoptextrule
+\unexpanded\def\stoptextrule
{\par
\egroup
\dobottomtextrule\empty
@@ -2997,7 +3019,7 @@
%D \showsetup{fillinrules}
%D \showsetup{setupfillinrules}
-\def\setupfillinrules
+\unexpanded\def\setupfillinrules
{\dodoubleargument\getparameters[\??il]}
\definecomplexorsimpleempty\fillinrules
@@ -3080,7 +3102,7 @@
%D \showsetup{fillinline}
%D \showsetup{setupfillinlines}
-\def\setupfillinlines
+\unexpanded\def\setupfillinlines
{\dodoubleargument\getparameters[\??iv]}
\definecomplexorsimpleempty\fillinline
@@ -3160,7 +3182,7 @@
\let\stopbackground \relax
\let\background \relax}}
-\def\setupbackground
+\unexpanded\def\setupbackground
{\dosingleargument\dosetupbackground}
%D Actually typesetting the background is implemented rather
@@ -3312,50 +3334,128 @@
%D
%D \typebuffer
-\def\defineframedcontent
+% \unexpanded\def\defineframedcontent
+% {\dodoubleempty\dodefineframedcontent}
+%
+% \def\dodefineframedcontent[#1][#2]%
+% {\presetlocalframed[\??fc#1]%
+% \getparameters[\??fc#1]
+% [\c!leftoffset=\zeropoint,
+% \c!rightoffset=\getvalue{\??fc#1\c!leftoffset},
+% \c!topoffset=\zeropoint,
+% \c!bottomoffset=\getvalue{\??fc#1\c!topoffset},
+% \c!strut=\v!no,
+% \c!offset=\v!overlay,
+% \c!linecorrection=\v!no,
+% \c!left=,
+% \c!right=,
+% #2]}
+%
+% \unexpanded\def\setupframedcontent
+% {\dodoubleempty\dosetupframedcontent}
+%
+% \def\dosetupframedcontent[#1][#2]%
+% {\def\docommand##1{\getparameters[\??fc##1][#2]}%
+% \processcommacommand[#1]\docommand}
+%
+% \unexpanded\def\startframedcontent[#1]%
+% {\bgroup
+% \doifelse{#1}\v!off
+% {\let\stopframedcontent\egroup}
+% {\ifcsname\??fc#1\c!frame\endcsname
+% \dostartframedcontent{#1}%
+% \fi}}
+%
+% \def\dostartframedcontent#1%
+% {\unexpanded\def\stopframedcontent{\dostopframedcontent{#1}}%
+% \setbox\framebox\hbox\bgroup
+% \setlocalhsize
+% \hsize\localhsize
+% \advance\hsize\dimexpr-\getvalue{\??fc#1\c!leftoffset}-\getvalue{\??fc#1\c!rightoffset} \relax
+% \advance\vsize\dimexpr-\getvalue{\??fc#1\c!topoffset} -\getvalue{\??fc#1\c!bottomoffset}\relax
+% \hskip\getvalue{\??fc#1\c!leftoffset}%
+% \vbox\bgroup
+% \vskip\getvalue{\??fc#1\c!topoffset}%
+% \vbox\bgroup
+% \forgetall
+% \blank[\v!disable]}
+%
+% \def\dostopframedcontent#1%
+% {\removelastskip
+% \egroup
+% \vskip\getvalue{\??fc#1\c!bottomoffset}%
+% \egroup
+% \hskip\getvalue{\??fc#1\c!rightoffset}%
+% \egroup
+% \doifvalue{\??fc#1\c!width}\v!fit
+% {\letvalue{\??fc#1\c!width}\v!fixed}% no shapebox
+% \ifinsidefloat
+% \donefalse
+% \else
+% \doifelsevalue{\??fc#1\c!linecorrection}\v!yes\donetrue\donefalse
+% \fi
+% % plaats ?
+% \ifdone\startlinecorrection\fi
+% \getvalue{\??fc#1\c!left}% new
+% \localframed[\??fc#1]{\box\framebox}%
+% \getvalue{\??fc#1\c!right}% new
+% \ifdone\stoplinecorrection\fi
+% \egroup}
+
+\def\framedcontentparameter #1{\csname\doframedcontentparameter{\??fc\@@framedcontent}#1\endcsname}
+\def\doframedcontentparameter #1#2{\ifcsname#1#2\endcsname#1#2\else\expandafter\doframedcontentparentparameter\csname#1\s!parent\endcsname#2\fi}
+\def\doframedcontentparentparameter#1#2{\ifx#1\relax\s!empty\else\doframedcontentparameter#1#2\fi}
+
+\presetlocalframed[\??fc]
+
+\getparameters
+ [\??fc]
+ [\c!leftoffset=\zeropoint,
+ \c!rightoffset=\framedcontentparameter\c!leftoffset,
+ \c!topoffset=\zeropoint,
+ \c!bottomoffset=\framedcontentparameter\c!topoffset,
+ \c!strut=\v!no,
+ %\c!linecorrection=\v!no,
+ %\c!left=,
+ %\c!right=,
+ %\c!width=\v!fit,
+ \c!offset=\v!overlay]
+
+\def\letframedcontentparameter#1%
+ {\letvalue{\??fc\@@framedcontent#1}}
+
+\unexpanded\def\defineframedcontent
{\dodoubleempty\dodefineframedcontent}
\def\dodefineframedcontent[#1][#2]%
- {\presetlocalframed[\??fc#1]%
- \getparameters[\??fc#1]
- [\c!leftoffset=\zeropoint,
- \c!rightoffset=\getvalue{\??fc#1\c!leftoffset},
- \c!topoffset=\zeropoint,
- \c!bottomoffset=\getvalue{\??fc#1\c!topoffset},
- \c!strut=\v!no,
- \c!offset=\v!overlay,
- \c!linecorrection=\v!no,
- \c!left=,
- \c!right=,
- #2]}
+ {\getparameters[\??fc#1][\s!parent=\??fc,#2]}
-\let\setuplocalframed\getparameters
-
-\def\setupframedcontent
+\unexpanded\def\setupframedcontent
{\dodoubleempty\dosetupframedcontent}
\def\dosetupframedcontent[#1][#2]%
{\def\docommand##1{\getparameters[\??fc##1][#2]}%
\processcommacommand[#1]\docommand}
-\def\startframedcontent[#1]%
+\unexpanded\def\startframedcontent
+ {\dosingleempty\dostartframedcontent}
+
+\def\dostartframedcontent[#1]%
{\bgroup
- \doifelse{#1}\v!off
- {\let\stopframedcontent\egroup}
- {\ifcsname\??fc#1\c!frame\endcsname
- \dostartframedcontent{#1}%
- \fi}}
-
-\def\dostartframedcontent#1%
- {\def\stopframedcontent{\dostopframedcontent{#1}}%
+ \edef\@@framedcontent{#1}%
+ \let\stopframedcontent\egroup
+ \doifnot{#1}\v!off{\dodostartframedcontent{#1}}}
+
+\def\dodostartframedcontent#1%
+ {\unexpanded\def\stopframedcontent{\dostopframedcontent{#1}}%
\setbox\framebox\hbox\bgroup
\setlocalhsize
\hsize\localhsize
- \advance\hsize\dimexpr-\getvalue{\??fc#1\c!leftoffset}-\getvalue{\??fc#1\c!rightoffset} \relax
- \advance\vsize\dimexpr-\getvalue{\??fc#1\c!topoffset} -\getvalue{\??fc#1\c!bottomoffset}\relax
- \hskip\getvalue{\??fc#1\c!leftoffset}%
+ \advance\hsize\dimexpr-\framedcontentparameter\c!leftoffset-\framedcontentparameter\c!rightoffset \relax
+ \advance\vsize\dimexpr-\framedcontentparameter\c!topoffset -\framedcontentparameter\c!bottomoffset\relax
+ \hskip\framedcontentparameter\c!leftoffset
\vbox\bgroup
- \vskip\getvalue{\??fc#1\c!topoffset}%
+ \vskip\framedcontentparameter\c!topoffset
\vbox\bgroup
\forgetall
\blank[\v!disable]}
@@ -3363,22 +3463,22 @@
\def\dostopframedcontent#1%
{\removelastskip
\egroup
- \vskip\getvalue{\??fc#1\c!bottomoffset}%
+ \vskip\framedcontentparameter\c!bottomoffset
\egroup
- \hskip\getvalue{\??fc#1\c!rightoffset}%
+ \hskip\framedcontentparameter\c!rightoffset
\egroup
- \doifvalue{\??fc#1\c!width}\v!fit
- {\letvalue{\??fc#1\c!width}\v!fixed}% no shapebox
+ \doif{\framedcontentparameter\c!width}\v!fit
+ {\letframedcontentparameter\c!width\v!fixed}% no shapebox
\ifinsidefloat
\donefalse
\else
- \doifelsevalue{\??fc#1\c!linecorrection}\v!yes\donetrue\donefalse
+ \doifelse{\framedcontentparameter\c!linecorrection}\v!yes\donetrue\donefalse
\fi
% plaats ?
\ifdone\startlinecorrection\fi
- \getvalue{\??fc#1\c!left}% new
+ \framedcontentparameter\c!left % new
\localframed[\??fc#1]{\box\framebox}%
- \getvalue{\??fc#1\c!right}% new
+ \framedcontentparameter\c!right % new
\ifdone\stoplinecorrection\fi
\egroup}
@@ -3566,6 +3666,7 @@
\!!framedroffset\framedparameter\c!roffset
\!!framedtoffset\framedparameter\c!toffset
\!!framedboffset\framedparameter\c!boffset
+ \relax
\ifzeropt\!!framedloffset\else \advance\!!framedwidth -\!!framedloffset \boxhasextraoffsettrue \fi
\ifzeropt\!!framedroffset\else \advance\!!framedwidth -\!!framedroffset \boxhasextraoffsettrue \fi
\ifzeropt\!!framedtoffset\else \advance\!!framedheight-\!!framedtoffset \boxhasextraoffsettrue \fi
diff --git a/Master/texmf-dist/tex/context/base/page-app.mkiv b/Master/texmf-dist/tex/context/base/page-app.mkiv
index e5c149aa0c7..7dd71cf2ab8 100644
--- a/Master/texmf-dist/tex/context/base/page-app.mkiv
+++ b/Master/texmf-dist/tex/context/base/page-app.mkiv
@@ -96,16 +96,16 @@
\presetlocalframed[\??tg]
-\def\setupTEXpage
+\unexpanded\def\setupTEXpage
{\dodoubleargument\getparameters[\??tg]}
-\def\startTEXpage
+\unexpanded\def\startTEXpage
{\dosingleempty\dostartTEXpage}
\def\dostartTEXpage[#1]%
{\dostartfittingpage[\??tg][#1]\gobblespacetokens}
-\def\stopTEXpage
+\unexpanded\def\stopTEXpage
{\removelastspace
\dostopfittingpage}
@@ -127,14 +127,14 @@
%D
%D maybe I should support stream=yes in framed.
-\def\startTEXstream
+\unexpanded\def\startTEXstream
{\dosingleempty\dostartTEXstream}
\def\dostartTEXstream[#1]%
{\page
\defineoutputstream[tex]%
\enableoutputstream[tex]%
- \def\stopTEXstream
+ \unexpanded\def\stopTEXstream
{\disableoutputstream
\startTEXpage
\outputstreamunvbox[tex]%
@@ -203,7 +203,7 @@
%D \starttext \pagefigure[two.1] \stoptext
%D \stoptyping
-\def\startpagefigure
+\unexpanded\def\startpagefigure
{\dodoubleempty\dostartpagefigure}
\def\dostartpagefigure[#1][#2]%
@@ -212,7 +212,7 @@
\startTEXpage[\c!offset=\@@exoffset]%
\externalfigure[#1][#2]\ignorespaces} % so we can put some text below the graphic
-\def\stoppagefigure
+\unexpanded\def\stoppagefigure
{\stopTEXpage
\egroup}
diff --git a/Master/texmf-dist/tex/context/base/page-bck.mkiv b/Master/texmf-dist/tex/context/base/page-bck.mkiv
index fae091c6a01..93400943d50 100644
--- a/Master/texmf-dist/tex/context/base/page-bck.mkiv
+++ b/Master/texmf-dist/tex/context/base/page-bck.mkiv
@@ -164,7 +164,7 @@
% \def\addsomebackground#1#2#3#4% area box width height / zero test added
% {\ifsomebackgroundfound#1\ifdim#3>\zeropoint\ifdim#4>\zeropoint
% \ifcsname\??ma#1\c!setups\endcsname % to be done
-% \doifvaluesomething{\??ma#1\c!setups}{\setups[\csname\??ma#1\c!setups\endcsname]}% should not produce funny spaces !
+% \doprocesslocalsetups{\csname\??ma#1\c!setups\endcsname}% should not produce funny spaces !
% \fi
% \setbox#2\vbox\fastlocalframed % maybe \superfastlocalframed{tag}{w}{h}
% [\??ma#1]%
@@ -175,7 +175,7 @@
\def\addsomebackground#1#2#3#4% area box width height / zero test added
{\ifsomebackgroundfound#1\ifdim#3>\zeropoint\ifdim#4>\zeropoint
\ifcsname\??ma#1\c!setups\endcsname % to be done
- \doifvaluesomething{\??ma#1\c!setups}{\setups[\csname\??ma#1\c!setups\endcsname]}% should not produce funny spaces !
+ \doprocesslocalsetups{\csname\??ma#1\c!setups\endcsname}% should not produce funny spaces !
\fi
\localbackgroundframed{#1}{#2}{#3}{#4}%
\fi\fi\fi}
@@ -375,7 +375,7 @@
\ifdim#2>\zeropoint\relax
\ifdim#1>\zeropoint\relax
\ifcsname\??ma#3#4\c!setups\endcsname % to be done
- \doifvaluesomething{\??ma#3#4\c!setups}{\setups[\csname\??ma#3#4\c!setups\endcsname]}% should not produce funny spaces !
+ \doprocesslocalsetups{\csname\??ma#3#4\c!setups\endcsname}% should not produce funny spaces !
\fi
\fastlocalframed
[\??ma#3#4]%
@@ -407,7 +407,7 @@
%D Because the number of arguments runs from one to three,
%D we need to check for it.
-\def\setupbackgrounds
+\unexpanded\def\setupbackgrounds
{\dotripleempty\dosetupbackgrounds}
\def\dosetupbackgrounds[#1][#2][#3]%
diff --git a/Master/texmf-dist/tex/context/base/page-flt.lua b/Master/texmf-dist/tex/context/base/page-flt.lua
new file mode 100644
index 00000000000..74d1e4e8c04
--- /dev/null
+++ b/Master/texmf-dist/tex/context/base/page-flt.lua
@@ -0,0 +1,227 @@
+if not modules then modules = { } end modules ['page-flt'] = {
+ version = 1.001,
+ comment = "companion to page-flt.mkiv",
+ author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
+ copyright = "PRAGMA ADE / ConTeXt Development Team",
+ license = "see context related readme files"
+}
+
+local setdimen, setbox, setcount, texbox = tex.setdimen, tex.setbox, tex.setcount, tex.box
+local insert, remove = table.insert, table.remove
+local texwrite, texsprint, ctxcatcodes = tex.write, tex.sprint, tex.ctxcatcodes
+
+local copy_node_list = node.copy_list
+
+local trace_floats = false trackers.register("graphics.floats", function(v) trace_floats = v end) -- name might change
+
+-- we use floatbox, floatwidth, floatheight
+-- text page leftpage rightpage (todo: top, bottom, margin, order)
+
+floats = floats or { }
+
+local noffloats, last, default, pushed = 0, nil, "text", { }
+
+local function initialize()
+ return {
+ text = { },
+ page = { },
+ leftpage = { },
+ rightpage = { },
+ }
+end
+
+local stacks = initialize()
+
+-- list location
+
+function floats.stacked(which) -- floats.thenofstacked
+ return #stacks[which or default]
+end
+
+function floats.thestacked(which)
+ return texwrite(#stacks[which or default])
+end
+
+function floats.push()
+ insert(pushed,stacks)
+ stacks = initialize()
+ setcount("global","savednoffloats",0)
+end
+
+function floats.pop()
+ local popped = remove(pushed)
+ if popped then
+ for which, stack in next, stacks do
+ for i=1,#stack do
+ insert(popped[which],stack[i])
+ end
+ end
+ stacks = popped
+ setcount("global","savednoffloats",#stacks[default])
+ end
+end
+
+local function setdimensions(b)
+ local w, h, d = 0, 0, 0
+ if b then
+ w, h, d = b.width, b.height, b.depth
+ end
+ setdimen("global","floatwidth", w)
+ setdimen("global","floatheight", h+d)
+ return w, h, d
+end
+
+local function get(stack,n)
+ n = n or #stack
+ if n > 0 then
+ local t = stack[n]
+ if t then
+ return t, t.box, n
+ end
+ end
+end
+
+function floats.save(which,data)
+ which = which or default
+ local stack = stacks[which]
+ noffloats = noffloats + 1
+ local b = texbox.floatbox
+ local w, h, d = b.width, b.height, b.depth
+ local t = {
+ n = noffloats,
+ data = data or { },
+ box = copy_node_list(b),
+ }
+ texbox.floatbox = nil
+ insert(stack,t)
+ setcount("global","savednoffloats",#stacks[default])
+ if trace_floats then
+ logs.report("floats","saving %s float %s in slot %s (%i,%i,%i)",which,noffloats,#stack,w,h,d)
+ else
+ interfaces.showmessage("floatblocks",2,noffloats)
+ end
+end
+
+function floats.resave(which)
+ if last then
+ which = which or default
+ local stack = stacks[which]
+ local b = texbox.floatbox
+ local w, h, d = b.width, b.height, b.depth
+ last.box = copy_node_list(b)
+ texbox.floatbox = nil
+ insert(stack,1,last)
+ setcount("global","savednoffloats",#stacks[default])
+ if trace_floats then
+ logs.report("floats","resaving %s float %s in slot %s (%i,%i,%i)",which,noffloats,#stack,w,h,d)
+ else
+ interfaces.showmessage("floatblocks",2,noffloats)
+ end
+ else
+ logs.report("floats","unable to resave float")
+ end
+end
+
+function floats.flush(which,n)
+ which = which or default
+ local stack = stacks[which]
+ local t, b, n = get(stack,n or 1)
+ if t then
+ local w, h, d = setdimensions(b)
+ if trace_floats then
+ logs.report("floats","flushing %s float %s from slot %s (%i,%i,%i)",which,t.n,n,w,h,d)
+ else
+ interfaces.showmessage("floatblocks",3,t.n)
+ end
+ texbox.floatbox = b
+ last = remove(stack,n)
+ last.box = nil
+ setcount("global","savednoffloats",#stacks[default])
+ else
+ setdimensions()
+ end
+end
+
+function floats.thevar(name,default)
+ local value = last and last.data[name] or default
+ if value and value ~= "" then
+ texsprint(ctxcatcodes,value)
+ end
+end
+
+function floats.consult(which,n)
+ which = which or default
+ local stack = stacks[which]
+ local t, b, n = get(stack,n)
+ if t then
+ local w, h, d = setdimensions(b)
+ if trace_floats then
+ logs.report("floats","consulting %s float %s in slot %s (%i,%i,%i)",which,t.n,n,w,h,d)
+ end
+ return t, b, n
+ else
+ if trace_floats then
+ logs.report("floats","nothing to consult")
+ end
+ setdimensions()
+ end
+end
+
+function floats.collect(which,maxwidth,distance)
+ which = which or default
+ local stack = stacks[which]
+ local n, m = #stack, 0
+ for i=1,n do
+ local t, b, n = get(stack,i)
+ if t then
+ local w, h, d = setdimensions(b)
+ if w + distance < maxwidth then
+ m = m + 1
+ maxwidth = maxwidth - w - distance
+ else
+ break
+ end
+ else
+ break
+ end
+ end
+ if m == 0 then
+ m = 1
+ end
+ setcount("global","nofcollectedfloats",m)
+end
+
+function commands.doifsavedfloatelse(which)
+ local stack = stacks[which or default]
+ commands.doifelse(#stack>0)
+end
+
+function floats.thecheckedpagefloat(packed)
+ local result = ""
+ if structure.pages.is_odd() then
+ if #stacks.rightpage > 0 then
+ result = "rightpage"
+ elseif #stacks.page > 0 then
+ result = "page"
+ elseif #stacks.leftpage > 0 then
+ if packed then
+ result = "leftpage"
+ else
+ result = "empty"
+ end
+ end
+ else
+ if #stacks.leftpage > 0 then
+ result = "leftpage"
+ elseif #stacks.page > 0 then
+ result = "page"
+ elseif #stacks.rightpage > 0 then
+ if packed then
+ result = "rightpage"
+ else
+ result = "empty"
+ end
+ end
+ end
+ texsprint(ctxcatcodes,result)
+end
diff --git a/Master/texmf-dist/tex/context/base/page-flt.mkiv b/Master/texmf-dist/tex/context/base/page-flt.mkiv
new file mode 100644
index 00000000000..944626b8e9c
--- /dev/null
+++ b/Master/texmf-dist/tex/context/base/page-flt.mkiv
@@ -0,0 +1,233 @@
+%D \module
+%D [ file=page-flt,
+%D version=2010.04,08,
+%D title=\CONTEXT\ Page Macros,
+%D subtitle=Float 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.
+
+\writestatus{loading}{ConTeXt Page Macros / Float Management}
+
+%D This module has code that previously was in other modules. There is
+%D also float related code in \type {strc-flt.mkiv}.
+
+\registerctxluafile{page-flt}{1.001}
+
+\unprotect
+
+%D To be checked and removed
+
+%def\dosavefloatinfo {\showmessage\m!floatblocks2{\the\totalnoffloats}}
+\def\doinsertfloatinfo {\showmessage\m!floatblocks4{\the\totalnoffloats}}
+\def\dofloatflushedinfo{\showmessage\m!floatblocks3{\the\numexpr\totalnoffloats-\savednoffloats\relax}}
+
+%D Extra float registers.
+
+\newif\ifsomefloatwaiting \somefloatwaitingfalse
+\newif\ifroomforfloat \roomforfloattrue
+\newif\ifnofloatpermitted \nofloatpermittedfalse
+\newif\ifcenterfloatbox \centerfloatboxtrue
+\newif\iflocalcenterfloatbox \localcenterfloatboxfalse
+\newif\ifglobalcenterfloatbox \globalcenterfloatboxfalse
+\newif\ifflushingfloats \flushingfloatsfalse
+\newif\ifpackflushedfloats \packflushedfloatstrue % for the moment
+\newif\ifpackcolumnfloats \packcolumnfloatstrue
+
+\newcount\totalnoffloats
+\newcount\savednoffloats
+\newcount\noffloatinserts
+\newcount\nofcollectedfloats % communication channel
+
+\newbox \floatlist
+\newbox \savedfloatlist
+\newbox \floattext
+
+\newdimen\floatwidth
+\newdimen\floatheight
+\newdimen\floatdepth
+\newdimen\floattextwidth
+\newdimen\floattextheight
+
+\newbox \floatbox
+\newbox \savedfloatbox
+
+%D From now on we manage the float stack at the \LUA\ end instead of packing
+%D them in a box and splitting off stacked floats. It's not so much less code
+%D but it's cleaner this way. It also opens op some posibilities as we can now
+%D more conveniently cary additional information around.
+
+\newtoks \everyfloatscheck
+
+\appendtoks
+ \ifcase\savednoffloats
+ \global\somefloatwaitingfalse
+ \else
+ \global\somefloatwaitingtrue
+ \fi
+\to \everyfloatscheck
+
+\def\dofloatsflush#1#2%
+ {\ctxlua{floats.flush("#1",\number#2)}%
+ \the\everyfloatscheck}
+
+\def\dofloatssave#1%
+ {\ctxlua{floats.save("#1")}%
+ \the\everyfloatscheck}
+
+\def\dofloatsresave#1%
+ {\ctxlua{floats.resave("#1")}%
+ \the\everyfloatscheck}
+
+\def\dopushsavedfloats
+ {\ctxlua{floats.push()}%
+ \the\everyfloatscheck}
+
+\def\dopopsavedfloats
+ {\ctxlua{floats.pop()}%
+ \the\everyfloatscheck}
+
+\def\dofloatsgetinfo#1%
+ {\ctxlua{floats.consult("#1")}}
+
+\def\doifsavedfloatelse#1%
+ {\ctxlua{commands.doifsavedfloatelse("#1")}}
+
+\def\dofloatscollect#1#2#3%
+ {\ctxlua{floats.collect("#1",\number\dimexpr#2,\number\dimexpr#3)}}
+
+\def\dofloatsnofstacked#1%
+ {\ctxlua{floats.thestacked("#1")}}
+
+\def\dofloatsgetvariable#1%
+ {\ctxlua{floats.thevar("specification")}}
+
+\let\dopushcolumnfloats\dopushsavedfloats
+\let\dopopcolumnfloats \dopopsavedfloats
+
+\def\dofloatssavepagefloat#1#2%
+ {\ctxlua{floats.save("#1", { specification = "#2" })}}
+
+%D The following code is in transition as we don't want to break the
+%D current single column, multi column, and columnset mechanism.
+%D
+%D First we reimplement some helpers.
+
+\def\dogetfloat
+ {\ifsomefloatwaiting
+ \dofloatsflush{text}{1}%
+ \ifcenterfloatbox
+ \ifdim\wd\globalscratchbox<\hsize
+ \global\setbox\floatbox\hbox to \hsize{\hss\box\floatbox\hss}%
+ \else
+ % retain special alignments
+ \ifinsidecolumns
+ \ifdim\wd\floatbox>\makeupwidth
+ \global\wd\floatbox\makeupwidth
+ \fi
+ \fi
+ \fi
+ \fi
+ \else
+ \global\savednoffloats\zerocount
+ \global\setbox\floatbox\emptybox
+ \fi}
+
+\def\dosavefloat
+ {\dofloatssave{text}%
+ \nonoindentation} % brrr nonoindentation here
+
+\def\doresavefloat
+ {\dofloatsresave{text}}
+
+\def\doreversesavefloat
+ {\dofloatsresave{text}}
+
+\def\doflushsavedfloats % simplified \OTRONEdodoflushfloats
+ {\doloop
+ {\ifsomefloatwaiting
+ \docheckiffloatfits
+ \ifroomforfloat
+ \dogetfloat
+ \doplacefloatbox
+ \else
+ \exitloop
+ \fi
+ \else
+ \exitloop
+ \fi}}
+
+%D Page floats use different stacks.
+
+\newtoks \everybeforeflushedpagefloat
+
+\def\doflushsomepagefloat#1% future releases can do more clever things
+ {\dofloatsflush{#1}{1}%
+ \edef\floatspecification{\dofloatsgetvariable{specification}}%
+ \the\everybeforeflushedpagefloat
+ \vbox to \textheight
+ {\doifnotinset\v!high\floatspecification\vfill
+ \box\floatbox
+ \doifnotinset\v!low\floatspecification\vfill}%
+ \vfill\eject}
+
+% \def\doflushpagefloats
+% {\doifoddpageelse
+% {\ifnum\dofloatsnofstacked{rightpage}>\zerocount
+% \doflushsomepagefloat{rightpage}%
+% \else\ifnum\dofloatsnofstacked{page}>\zerocount
+% \doflushsomepagefloat{page}
+% \else\ifnum\dofloatsnofstacked{leftpage}>\zerocount
+% \null\vfill\eject
+% %\doflushsomepagefloat{leftpage}%
+% \fi\fi\fi}
+% {\ifnum\dofloatsnofstacked{leftpage}>\zerocount
+% \doflushsomepagefloat{leftpage}%
+% \else\ifnum\dofloatsnofstacked{page}>\zerocount
+% \doflushsomepagefloat{page}
+% \else\ifnum\dofloatsnofstacked{rightpage}>\zerocount
+% \null\vfill\eject
+% %\doflushsomepagefloat{rightpage}%
+% \fi\fi\fi}}
+
+\def\doflushpagefloats
+ {\edef\checkedpagefloat{\ctxlua{floats.thecheckedpagefloat()}}% (true) for packed
+ \ifx\checkedpagefloat\empty
+ % nothing
+ \else\ifx\checkedpagefloat\v!empty
+ \null\vfill\eject
+ \else
+ \doflushsomepagefloat\checkedpagefloat
+ \fi\fi}
+
+\def\uncenteredfloatbox
+ {\ifcenterfloatbox
+ \ifhbox\floatbox\relax % remove centering
+ \ifdim\wd\floatbox=\hsize
+ \ifhbox\floatbox
+ \setbox\scratchbox\hbox
+ {\unhbox\floatbox
+ \unskip\unskip
+ \global\setbox\globalscratchbox\lastbox}%
+ \box\globalscratchbox
+ \else
+ \box\floatbox
+ \fi
+ \else
+ \box\floatbox
+ \fi
+ \else
+ \box\floatbox
+ \fi
+ \else
+ \box\floatbox
+ \fi}
+
+\ifdefined\doflushfloats\else \let\doflushfloats\relax \fi
+\ifdefined\flushfloatbox\else \let\flushfloatbox\relax \fi
+
+\protect \endinput
diff --git a/Master/texmf-dist/tex/context/base/page-flw.mkiv b/Master/texmf-dist/tex/context/base/page-flw.mkiv
index 3eb867a78f4..81b4fedcbfd 100644
--- a/Master/texmf-dist/tex/context/base/page-flw.mkiv
+++ b/Master/texmf-dist/tex/context/base/page-flw.mkiv
@@ -18,7 +18,7 @@
\unprotect
-\def\definetextflow
+\unexpanded\def\definetextflow
{\dodoubleempty\dodefinetextflow}
\def\dodefinetextflow[#1][#2]% flow settings
@@ -47,7 +47,7 @@
\def\doiftextflow#1%
{\doiftextflowelse{#1}\firstofoneargument\gobbleoneargument}
-\def\starttextflow[#1]%
+\unexpanded\def\starttextflow[#1]%
{\doiftextflowcollectorelse{#1}
{\global\setbox\textflowcollector{#1}\vbox
\bgroup
@@ -55,7 +55,7 @@
\hsize\textflowparameter{#1}\c!width
\doifsomething{\textflowparameter{#1}\c!style}%
{\doconvertfont{\textflowparameter{#1}\c!style}}%
- \def\stoptextflow{\endgraf\egroup}}
+ \unexpanded\def\stoptextflow{\endgraf\egroup}}
{\let\stoptextflow\relax}}
\def\flushtextflow#1%
diff --git a/Master/texmf-dist/tex/context/base/page-imp.mkiv b/Master/texmf-dist/tex/context/base/page-imp.mkiv
index fd0482585f3..a0f32ef8611 100644
--- a/Master/texmf-dist/tex/context/base/page-imp.mkiv
+++ b/Master/texmf-dist/tex/context/base/page-imp.mkiv
@@ -108,7 +108,7 @@
\newtoks \collectedtextdata
-\long\def\starttextdata#1\stoptextdata
+\long\unexpanded\def\starttextdata#1\stoptextdata
{\doglobal\appendtoks#1\to\collectedtextdata}
\def\flushtextdata
@@ -248,7 +248,7 @@
\newconditional\arrangedbackgroundokay % more ifs -> conditionals
-\def\setuparranging[#1]%
+\unexpanded\def\setuparranging[#1]%
{\ifarrangingdisabled \else
\doifelse{#1}\v!disable
{\global\arrangingdisabledtrue}
@@ -387,6 +387,7 @@
\def\outputarrangedbox#1%
{\bgroup
+ \forgetall % somehow we're back and need to redo this
\gotonextarrangepage
\ifnum\arrangedrotationO\arrangedrotationE>\zerocount
\setbox#1\vbox
@@ -806,7 +807,7 @@
% #1=name #2=horizontal|vertical #3=shiftlist
-\def\definepageshift
+\unexpanded\def\definepageshift
{\dotripleargument\dodefinepageshift}
\def\dodefinepageshift[#1][#2][#3]%
@@ -847,7 +848,7 @@
\next
\fi}
-\def\setuppageshift
+\unexpanded\def\setuppageshift
{\dotripleempty\dosetuppageshift}
\def\dosetuppageshift[#1][#2][#3]% page|paper horizontal vertical
@@ -1145,7 +1146,7 @@
%D \stoppagecomment
%D \stoptyping
-\def\setuppagecomment
+\unexpanded\def\setuppagecomment
{\dosingleempty\dosetuppagecomment}
\def\dosetuppagecomment[#1]%
@@ -1180,7 +1181,7 @@
\def\@@pcprintpapersize{\printpapersize}
-\def\placepagecommentTB
+\unexpanded\def\placepagecommentTB
{\vbox to \printpaperheight
{%\forgetall
\hsize\printpaperwidth
@@ -1198,7 +1199,7 @@
\doifelse\@@pclocation\v!bottom\vss{\vskip\dimexpr\paperheight+\@@pcdistance\relax}%
\vskip\@@pcoffset}}
-\def\placepagecommentLR
+\unexpanded\def\placepagecommentLR
{\hbox to \printpaperwidth
{\hskip\@@pcoffset
\doifelse\@@pclocation\v!right{\hskip\paperwidth\hskip\@@pcdistance}\hss
diff --git a/Master/texmf-dist/tex/context/base/page-ini.mkii b/Master/texmf-dist/tex/context/base/page-ini.mkii
index 65bc27f538c..816b7d94497 100644
--- a/Master/texmf-dist/tex/context/base/page-ini.mkii
+++ b/Master/texmf-dist/tex/context/base/page-ini.mkii
@@ -1,4 +1,4 @@
-%D \module
+ %D \module
%D [ file=page-ini,
%D version=2000.10.20,
%D title=\CONTEXT\ Page Macros,
diff --git a/Master/texmf-dist/tex/context/base/page-ini.mkiv b/Master/texmf-dist/tex/context/base/page-ini.mkiv
index 6beba4492c5..07d3422829c 100644
--- a/Master/texmf-dist/tex/context/base/page-ini.mkiv
+++ b/Master/texmf-dist/tex/context/base/page-ini.mkiv
@@ -128,7 +128,7 @@
\ifx\dosetuplayout\undefined % overloaded in page-lay !
- \def\setuplayout{\dodoubleempty\getparameters[\??ly]}
+ \unexpanded\def\setuplayout{\dodoubleempty\getparameters[\??ly]}
\fi
@@ -187,13 +187,13 @@
{\appendtoks\dowithotrcommand#1\to\registeredotrcommands}
\def\dopresetotrcommand#1%
- {\expandafter\let\expandafter#1\csname\@@OTR
- \ifcsname\@@OTR\OTRidentifier\expandafter\gobbleoneargument\string#1\endcsname
- \OTRidentifier
- \else\ifcsname\@@OTR\OTRdefault\expandafter\gobbleoneargument\string#1\endcsname % fallback
- \OTRdefault
- \fi\fi
- \expandafter\gobbleoneargument\string#1\endcsname}
+ {\expandafter\let\expandafter#1\csname\@@OTR
+ \ifcsname\@@OTR\OTRidentifier\expandafter\gobbleoneargument\string#1\endcsname
+ \OTRidentifier
+ \else\ifcsname\@@OTR\OTRdefault\expandafter\gobbleoneargument\string#1\endcsname % fallback
+ \OTRdefault
+ \fi\fi
+ \expandafter\gobbleoneargument\string#1\endcsname}
\def\activateotr#1#2%
{\def\OTRidentifier{#1}%
@@ -222,17 +222,20 @@
\registerotrcommand\doflushfloats % \def\doflushfloats {\OTRcommand\doflushfloats}
\registerotrcommand\flushfloatbox % \def\flushfloatbox {\OTRcommand\flushfloatbox}
\registerotrcommand\docheckiffloatfits % \def\docheckiffloatfits {\OTRcommand\docheckiffloatfits}
-\registerotrcommand\someherefloat % \def\someherefloat {\OTRcommand\someherefloat}
-\registerotrcommand\somefixdfloat % \def\somefixdfloat {\OTRcommand\somefixdfloat}
-\registerotrcommand\somepagefloat % \def\somepagefloat {\OTRcommand\somepagefloat}
-\registerotrcommand\sometopsfloat % \def\sometopsfloat {\OTRcommand\sometopsfloat}
-\registerotrcommand\somebotsfloat % \def\somebotsfloat {\OTRcommand\somebotsfloat}
-\registerotrcommand\somesidefloat % \def\somesidefloat {\OTRcommand\somesidefloat}
\registerotrcommand\flushsavedfloats % \def\flushsavedfloats {\OTRcommand\flushsavedfloats}
\registerotrcommand\synchronizehsize % \def\synchronizehsize {\OTRcommand\synchronizehsize}
\registerotrcommand\gotonextpage % \def\gotonextpage {\OTRcommand\gotonextpage }
\registerotrcommand\gotonextpageX % \def\gotonextpageX {\OTRcommand\gotonextpageX} % will become obsolete
+% wrong, will be redone
+%
+% \registerotrcommand\someherefloat % \def\someherefloat {\OTRcommand\someherefloat}
+% \registerotrcommand\somefixdfloat % \def\somefixdfloat {\OTRcommand\somefixdfloat}
+% \registerotrcommand\somepagefloat % \def\somepagefloat {\OTRcommand\somepagefloat}
+% \registerotrcommand\sometopsfloat % \def\sometopsfloat {\OTRcommand\sometopsfloat}
+% \registerotrcommand\somebotsfloat % \def\somebotsfloat {\OTRcommand\somebotsfloat}
+% \registerotrcommand\somesidefloat % \def\somesidefloat {\OTRcommand\somesidefloat}
+
% beter een \installotr#1 met #1 = macro en auto test
\newif \iftraceotr
@@ -243,7 +246,7 @@
% When issuing two \par\penalty-\plustenthousand's, only the first
% triggers the otr; obscure feature or optimization?
-\def\outputcounter{-100010} % -10010
+\newcount\outputcounter \outputcounter=-100010 % -10010
\def\doinvokeoutput
{\iftraceotr
@@ -252,35 +255,50 @@
\expandafter\dodoinvokeoutput
\fi}
-\def\outputmessage#1#2#3%
- {\iftraceotr\writestatus\m!otr{#1 #2 \number#3}\fi}
+\def\doshowoutputmessage#1#2#3%
+ {\writestatus\m!otr{#1 #2 \number#3}}
\def\dodoinvokeoutput#1%
- {\outputmessage+{special}{#1}%
- \bgroup\par\penalty#1\relax\egroup
- \outputmessage-{special}{#1}}
+ {\bgroup\par\penalty#1\egroup}
\def\dodotracedoutput#1%
- {\outputmessage+{traced}{#1/\the\outputpenalty}%
+ {\doshowoutputmessage+{traced}{#1/\the\outputpenalty}%
\writestatus\m!otr{c:\number\mofcolumns,v:\the\vsize,g:\the\pagegoal,t:\the\pagetotal}%
\dodoinvokeoutput{#1}%
\writestatus\m!otr{c:\number\mofcolumns,v:\the\vsize,g:\the\pagegoal,t:\the\pagetotal}%
- \outputmessage-{traced}{#1/\the\outputpenalty}}
+ \doshowoutputmessage-{traced}{#1/\the\outputpenalty}}
\def\installoutput#1#2% \invoke \action
- {\decrement\outputcounter
- \edef#1{\noexpand\doinvokeoutput{\outputcounter}}%
- \setvalue{\@@OTR\outputcounter}{#2}}
+ {\global\advance\outputcounter\minusone
+ \edef#1{\noexpand\doinvokeoutput{\number\outputcounter}}%
+ \setvalue{\@@OTR\number\outputcounter}{#2}}
+
+\def\invoketracedoutputroutine
+ {\doshowoutputmessage+{trying}\outputpenalty
+ \ifcsname\@@OTR\the\outputpenalty\endcsname
+ \doshowoutputmessage+{special}\outputpenalty
+ \csname\@@OTR\the\outputpenalty\endcsname
+ \doshowoutputmessage-{special}\outputpenalty
+ \else
+ \doshowoutputmessage+{normal}\outputpenalty
+ \the\OTRcommand\output
+ \doshowoutputmessage-{normal}\outputpenalty
+ \fi
+ \doshowoutputmessage-{trying}\outputpenalty}
-\def\invokeoutputroutine
- {\outputmessage+{trying}\outputpenalty
- \executeifdefined{\@@OTR\the\outputpenalty}\dodonormaloutput
- \outputmessage-{trying}\outputpenalty}
+\def\invokenormaloutputroutine
+ {\ifcsname\@@OTR\the\outputpenalty\endcsname
+ \csname\@@OTR\the\outputpenalty\endcsname
+ \else
+ \the\OTRcommand\output
+ \fi}
-\def\dodonormaloutput
- {\outputmessage+{normal}\outputpenalty
- \the\OTRcommand\output
- \outputmessage-{normal}\outputpenalty}
+\def\invokeoutputroutine
+ {\iftraceotr
+ \expandafter\invoketracedoutputroutine
+ \else
+ \expandafter\invokenormaloutputroutine
+ \fi}
\mainoutput{\invokeoutputroutine} \output{\inotrtrue\the\mainoutput}
@@ -425,8 +443,6 @@
\newif\ifbalancingcolumns
\newif\ifcollectingcontent
\newif\ifcolumnoverflow
-\newif\iffinalflushingfloats
-\newif\ifpackflushedfloats \packflushedfloatstrue % for the moment
\newdimen\intercolumnwidth
\newdimen\localcolumnwidth
@@ -505,8 +521,7 @@
% but does not hurt either (we're still in the otr!)
\inpagebodytrue % needed for enabling \blank !
\flushsavedfloats % was \dosetbothinserts; only otr one !
- \setvsize % this is needed for interacting components, like floats and multicolumns
- \adaptfuzzypagegoal} % watch this hack!
+ \setvsize} % this is needed for interacting components, like floats and multicolumns
\def\dofinaloutput#1#2% \vbox: prevents spurious spaces in every..pagebody
{\forgetall
@@ -521,7 +536,6 @@
{\forgetall
\beforefinaloutput
\the\everybeforeshipout
- \setpagecounters
\message{[-\the\realpageno]}%
\setbox\scratchbox\hbox{\dopagebody#1#2}%
\deadcycles\zerocount
@@ -549,12 +563,13 @@
\fi#1#2%
\resetselectiepagina
\incrementpagenumber
+ \incrementsubpagenumber
\checkpagedimensions
\ifnum\outputpenalty>\superpenalty \else
\dosupereject
\fi
\doflushspread
- \dopostponeblock}
+ \doflushpostponedcontent}
\def\dooutput
{\finaloutput\unvbox\normalpagebox}
@@ -571,7 +586,7 @@
\space#1:\space\ascii\space
\!!doneatrue}}
-\def\placeversioninfo % nog engels maken
+\unexpanded\def\placeversioninfo % nog engels maken
{\ifcase\conceptmode
% 0 : nothing
\or
@@ -704,7 +719,48 @@
\v!frame=>\chardef\gridboxlinemode \plusthree,
\v!nonumber=>\chardef\gridboxlinenomode\zerocount,
\v!right=>\chardef\gridboxlinenomode\plusone,
- \v!left=>\chardef\gridboxlinenomode\plustwo]}
+ \v!left=>\chardef\gridboxlinenomode\plustwo,
+ \v!outer=>\chardef\gridboxlinenomode\plusthree]%
+ \ifcase\showgridstate
+ \let\addtextgridlayer\gobbleoneargument
+ \else % 1=bottom 2=top
+ \let\addtextgridlayer\doaddtextgridlayer
+ \fi}
+
+\definepalet
+ [layout]
+ [grid=red,
+ page=green]
+
+% if really needed for speed we can cache the grid
+
+\let\addtextgridlayer\gobbleoneargument
+
+\def\doaddtextgridlayer#1% to be checked for color and layer
+ {\startcolor[layout:grid]%
+ \setgridbox\scratchbox\makeupwidth\textheight % todo: check color
+ \global\setbox#1\hbox
+ {\ifcase\showgridstate\or\or\box#1\hskip-\makeupwidth\fi
+ \bgroup % color
+ \ifcase\layoutcolumns\else
+ \gray
+ \setlayoutcomponentattribute\v!grid\v!columns
+ \hbox \layoutcomponentboxattribute to \makeupwidth
+ {\dorecurse\layoutcolumns
+ {\hskip\layoutcolumnwidth
+ \ifnum\recurselevel<\layoutcolumns
+ \vrule
+ \!!height\ht\scratchbox
+ \!!depth\dp\scratchbox
+ \!!width\layoutcolumndistance
+ \fi}}%
+ \hskip-\makeupwidth
+ \fi
+ \setlayoutcomponentattribute\v!grid\v!lines
+ \hbox \layoutcomponentboxattribute{\box\scratchbox}%
+ \egroup
+ \ifcase\showgridstate\or\hskip-\makeupwidth\box#1\fi}%
+ \stopcolor}
\def\buildpagebox#1%
{\setbox#1\vbox to \paperheight
@@ -840,10 +896,10 @@
{%\getallmarks % now in following token register
\the\everybeforepagebody
\starttextproperties
- \setnextsubpageno % nog eens: als in pagina (tbv standaard opmaak)
+% \setnextsubpageno % nog eens: als in pagina (tbv standaard opmaak)
\dontshowboxes % dan hier blokkeren en verderop resetten
-% \shipoutfacingpage
- \checkmargeblokken
+% \shipoutfacingpage
+ \checkmarginblocks
\the\beforeeverypage
\normalexpanded{\global\beforepage\emptytoks\the\beforepage}% \scratchtoks\beforepage\global\beforepage\emptytoks\the\scratchtoks % was \flushtoks\beforepage
\inpagebodytrue\buildpagebody#1#2%
@@ -1009,7 +1065,13 @@
\executepagebreakhandler\v!yes
\fi
\ifnum\prevrealpageno<\realpageno
- \global\chardef\pageornamentstate\zerocount
+ % there must have been a reason why i added the ifcase
+ % but it fails on tests/mkiv/pages/ornaments-001.tex
+ % as WS found out so we have to wait till the next side
+ % effect shows up
+ % \ifcase\pageornamentstate\or
+ \global\chardef\pageornamentstate\zerocount
+ % \fi
\fi
\egroup}
@@ -1182,14 +1244,12 @@
% \definepagebreak[instance][forsure]
% \definepagebreak[forsure][yes,+4]
-\def\definepagebreak
+\unexpanded\def\definepagebreak
{\dodoubleargument\dodefinepagebreak}
\def\dodefinepagebreak[#1][#2]% non recursive, meant for simple mappings
{\setvalue{\??pe::#1}{#2}}
-% hier nog uti blokkeren
-
% don't change this / test case:
%
% \setupbackgrounds[state=repeat]
@@ -1201,7 +1261,7 @@
\long\def\installcolumnbreakhandler#1#2#3% #1=otr-id #2=tag
{\long\setvalue{\??cn:#1:#2}{#3}}
-\def\definecolumnbreak
+\unexpanded\def\definecolumnbreak
{\dodoubleargument\dodefinecolumnbreak}
\def\dodefinecolumnbreak[#1][#2]% non recursive, meant for simple mappings
@@ -1402,10 +1462,10 @@
\newbox\facingpage
-\def\setupoppositeplacing
+\unexpanded\def\setupoppositeplacing
{\dodoubleargument\getparameters[\??np]}
-\def\startopposite
+\unexpanded\def\startopposite
{\dowithnextboxcontent
{\hsize\makeupwidth}%
{\global\setbox\facingpage\vbox
@@ -1418,7 +1478,7 @@
\box\nextbox}}%
\vbox\bgroup}
-\def\stopopposite
+\unexpanded\def\stopopposite
{\egroup}
\def\finishfacingpage
diff --git a/Master/texmf-dist/tex/context/base/page-lay.mkiv b/Master/texmf-dist/tex/context/base/page-lay.mkiv
index 18972c3502e..28f9be594dc 100644
--- a/Master/texmf-dist/tex/context/base/page-lay.mkiv
+++ b/Master/texmf-dist/tex/context/base/page-lay.mkiv
@@ -202,10 +202,10 @@
%D
%D \showsetup{definepapersize}
-\def\definepapersize
+\unexpanded\def\definepapersize
{\dodoubleempty\dodefinepapersize}
-\def\definepapersize
+\unexpanded\def\definepapersize
{\dotripleempty\dodefinepapersize}
\def\dodefinepapersize[#1][#2][#3]%
@@ -275,7 +275,7 @@
\def\paperscale{1} \newif\ifnegateprintbox
-\def\setuppaper[#1]%
+\unexpanded\def\setuppaper[#1]%
{\getparameters[\??pp][\c!paper=,\c!page=,#1]%
\edef\@@ppxy{\the\numexpr\@@ppnx*\@@ppny\relax}%
\doifelsenothing\@@pppage
@@ -286,7 +286,7 @@
{\dodosetuppapersize[\@@pppage][\printpapersize]}
{\dodosetuppapersize[\@@pppage][\@@pppaper]}}}
-\def\setuppapersize
+\unexpanded\def\setuppapersize
{\dodoubleempty\dosetuppapersize}
\def\dosetuppapersize[#1][#2]%
@@ -424,7 +424,7 @@
% \def\checkforems[#1]%
% {\processcommalist[#1]\docheckforems}
-\ifx\setups\undefined \def\setups[#1]{\setdefaultpenalties} \fi
+\ifx\setups\undefined \unexpanded\def\setups[#1]{\setdefaultpenalties} \fi
% \newtoks \everybeforelayout \relax
% \newtoks \everyafterlayout \relax
@@ -434,6 +434,8 @@
{\expanded{\dododosetuppapersize[\layoutparameter\c!page][\layoutparameter\c!paper]}}%
\dorecalculatelayout}
+\ifdefined\docheckgridsnapping \else \let\docheckgridsnapping\relax \fi
+
\def\dorecalculatelayout
{%\the\everybeforelayout
\setups[\layoutparameter\c!preset]%
@@ -448,15 +450,11 @@
\global\backspace \layoutparameter\c!backspace
\global\topspace \layoutparameter\c!topspace
\setlayoutdimensions % the rest of the `dimensions'
- \doifelse\@@lygrid\v!yes\gridsnappingtrue\gridsnappingfalse
- \ifgridsnapping
- \setsystemmode\v!grid
- \else
- \resetsystemmode\v!grid
- \fi
- \setups[\layoutparameter\c!setups]% depends on gridsnapping !
+ \docheckgridsnapping
+ \doprocesslocalsetups{\layoutparameter\c!setups}% depends on gridsnapping !
\simplesetupwhitespace
\simplesetupblank
+ \setupinterlinespace[\v!reset]% \synchronizegloballinespecs
\global\cutspace\layoutparameter\c!cutspace
\relax
\doifelse{\layoutparameter\c!width}\v!middle
@@ -535,7 +533,6 @@
\calculatehsizes
\calculatevsizes
\calculatepseudocolumns
- \checkgridsnapping
\recalculatebackgrounds}
\def\calculatepseudocolumns
@@ -656,7 +653,7 @@
\v!doublesided=>\doublesidedprinttrue,
\v!singlesided=>\doublesidedprintfalse]}
-\def\definelayout
+\unexpanded\def\definelayout
{\dodoubleargument\dodefinelayout}
\def\dodefinelayout[#1][#2]%
@@ -685,7 +682,7 @@
\checkcurrentlayout % here ?
\presetcenterpagebox}
-\def\setuplayout
+\unexpanded\def\setuplayout
{\dodoubleempty\dosetuplayout}
\let\@@zaheight\!!zeropoint
@@ -718,7 +715,7 @@
\fi}
\def\adaptpagedimensionsindeed
- {\rawdoifinsetelse\realfolio\adaptedpages
+ {\rawdoifinset\realfolio\adaptedpages
{\removefromcommalist\realfolio\adaptedpages
\getvalue{\??za\realfolio}%
\letbeundefined{\??za\realfolio}}}
@@ -996,14 +993,12 @@
%D it is used in cross referencing. The next switch is set
%D when we start at an even page.
-\newif\ifshiftedrealpageno
-
-% We could use nested if here plu ssone \@EAEAEA's but but the
+% We could use nested if here plus some \@EAEAEA's but but the
% next variant has less expansion which is nicer in tracing.
-\def\doifoddpageelse {\ifshiftedrealpageno\expandafter\doifoddpageelseyes\else\expandafter\doifoddpageelsenop\fi}
-\def\doifoddpageelseyes{\ifodd\realpageno\expandafter\secondoftwoarguments\else\expandafter\firstoftwoarguments\fi}
-\def\doifoddpageelsenop{\ifodd\realpageno\expandafter\firstoftwoarguments\else\expandafter\secondoftwoarguments\fi}
+\def\doifoddpageelse {\ifodd\pagenoshift\expandafter\doifoddpageelseyes \else\expandafter\doifoddpageelsenop \fi}
+\def\doifoddpageelseyes{\ifodd\realpageno \expandafter\secondoftwoarguments\else\expandafter\firstoftwoarguments \fi}
+\def\doifoddpageelsenop{\ifodd\realpageno \expandafter\firstoftwoarguments \else\expandafter\secondoftwoarguments\fi}
\let\doifonevenpaginaelse\doifoddpageelse
@@ -1035,6 +1030,30 @@
\def\settexthoffset
{\texthoffset\doifbothsides\backspace\backspace{\dimexpr\paperwidth-\backspace-\makeupwidth\relax}}
+% The next hack is too tricky as we may shipout more pages:
+%
+% \def\freezepagestatechecks
+% {\the\everyfreezepagestatechecks}
+%
+% \newtoks \everyfreezepagestatechecks
+%
+% \appendtoks
+% \doifbothsides
+% {\let\doifbothsides\firstofthreearguments}%
+% {\let\doifbothsides\secondofthreearguments}%
+% {\let\doifbothsides\thirdofthreearguments}%
+% \rightorleftpageaction
+% {\let\rightorleftpageaction\firstoftwoarguments}%
+% {\let\rightorleftpageaction\secondoftwoarguments}%
+% \doifmarginswapelse
+% {\let\doifmarginswapelse\firstoftwoarguments}%
+% {\let\doifmarginswapelse\secondoftwoarguments}%
+% \to \everyfreezepagestatechecks
+%
+% \prependtoks
+% \freezepagestatechecks
+% \to \everybeforeshipout
+
\def\goleftonpage
{\hskip-\dimexpr\leftmargindistance+\leftmarginwidth+\leftedgedistance+\leftedgewidth\relax}
@@ -1106,11 +1125,11 @@
%D {\definelayout}, so this hack will disappear in future
%D versions.
-\def\startlocallayout
+\unexpanded\def\startlocallayout
{\globalpushmacro\restorepapersize
\globalpushmacro\currentlayout}
-\def\stoplocallayout
+\unexpanded\def\stoplocallayout
{\globalpopmacro\currentlayout
\globalpopmacro\restorepapersize
\restorepapersize
@@ -1167,7 +1186,7 @@
\c!leftedgedistance=\layoutparameter\c!edgedistance,
\c!leftmargin=\layoutparameter\c!margin,
\c!leftmargindistance=\layoutparameter\c!margindistance,
- \c!width=.71428571429\paperwidth, % 15.0cm
+ \c!width=.71428571429\paperwidth, % 15.0cm \dimexpr\
\c!rightmargindistance=\layoutparameter\c!margindistance,
\c!rightmargin=\layoutparameter\c!margin,
\c!rightedgedistance=\layoutparameter\c!edgedistance,
diff --git a/Master/texmf-dist/tex/context/base/page-lin.lua b/Master/texmf-dist/tex/context/base/page-lin.lua
index 0efb6314e93..1f2c9625116 100644
--- a/Master/texmf-dist/tex/context/base/page-lin.lua
+++ b/Master/texmf-dist/tex/context/base/page-lin.lua
@@ -8,14 +8,19 @@ if not modules then modules = { } end modules ['page-lin'] = {
-- experimental
+local trace_numbers = false trackers.register("lines.numbers", function(v) trace_numbers = v end)
+
local format = string.format
-local texsprint, texbox = tex.sprint, tex.box
+local texsprint, texwrite, texbox = tex.sprint, tex.write, tex.box
local ctxcatcodes = tex.ctxcatcodes
+local variables = interfaces.variables
+
+nodes = nodes or { }
+nodes.lines = nodes.lines or { }
+nodes.lines.data = nodes.lines.data or { } -- start step tag
-nodes = nodes or { }
-nodes.lines = nodes.lines or { }
-nodes.lines.data = nodes.lines.data or { } -- start step tag
+storage.register("lines/data", nodes.lines.data, "nodes.lines.data")
-- if there is demand for it, we can support multiple numbering streams
-- and use more than one attibute
@@ -30,27 +35,34 @@ 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 traverse = node.traverse
-local copy_node = node.copy
+local has_attribute = node.has_attribute
+local traverse_id = node.traverse_id
+local traverse = node.traverse
+local copy_node = node.copy
+local hpack_node = node.hpack
+local insert_node_after = node.insert_after
+local insert_node_before = node.insert_before
+
+local whatsit = node.id("whatsit")
local data = nodes.lines.data
+local last = #data
nodes.lines.scratchbox = nodes.lines.scratchbox or 0
-- cross referencing
function nodes.lines.number(n)
+ n = tonumber(n)
local cr = cross_references[n] or 0
cross_references[n] = nil
return cr
end
-local function resolve(n,m)
+local function resolve(n,m) -- we can now check the 'line' flag (todo)
while n do
local id = n.id
- if id == whatsit then
+ if id == whatsit then -- why whatsit
local a = has_attribute(n,line_reference)
if a then
cross_references[a] = m
@@ -62,33 +74,88 @@ local function resolve(n,m)
end
end
--- boxed variant
+function nodes.lines.finalize(t)
+ local getnumber = nodes.lines.number
+ for _,p in next, t do
+ for _,r in next, p do
+ if r.metadata.kind == "line" then
+ local e = r.entries
+ local u = r.userdata
+ e.linenumber = getnumber(e.text or 0) -- we can nil e.text
+ e.conversion = u and u.conversion
+ r.userdata = nil -- hack
+ end
+ end
+ end
+end
+
+local filters = jobreferences.filters
+local helpers = structure.helpers
+
+jobreferences.registerfinalizer(nodes.lines.finalize)
+
+filters.line = filters.line or { }
+
+function filters.line.default(data)
+-- helpers.title(data.entries.linenumber or "?",data.metadata)
+ texsprint(ctxcatcodes,format("\\convertnumber{%s}{%s}",data.entries.conversion or "numbers",data.entries.linenumber or "0"))
+end
+
+function filters.line.page(data,prefixspec,pagespec) -- redundant
+ helpers.prefixpage(data,prefixspec,pagespec)
+end
+
+function filters.line.linenumber(data) -- raw
+ texwrite(data.entries.linenumber or "0")
+end
+
+-- boxed variant, todo: use number mechanism
nodes.lines.boxed = { }
+-- todo: cache setups, and free id no longer used
+-- use interfaces.cachesetup(t)
+
function nodes.lines.boxed.register(configuration)
- data[#data+1] = configuration
- return #data
+ last = last + 1
+ data[last] = configuration
+ if trace_numbers then
+ logs.report("lines","registering setup %s",last)
+ end
+ return last
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
+ if trace_numbers then
+ logs.report("lines","updating setup %s",n)
+ end
+ for k,v in next, configuration do
+ d[k] = v
+ end
else
+ if trace_numbers then
+ logs.report("lines","registering setup %s (br)",n)
+ end
data[n] = configuration
end
return n
end
-local leftskip = nodes.leftskip
+local the_left_margin = nodes.the_left_margin
-local function check_number(n,a) -- move inline
+local function check_number(n,a,skip) -- move inline
local d = data[a]
if d then
- local s = d.start
+ local s = d.start or 1
current_list[#current_list+1] = { n, s }
- if d.start % d.step == 0 then
- texsprint(ctxcatcodes, format("\\makenumber{%s}{%s}{%s}{%s}{%s}\\endgraf", d.tag or "", s, n.shift, n.width, leftskip(n.list)))
+ if not skip and s % d.step == 0 then
+ local tag = d.tag or ""
+ texsprint(ctxcatcodes, format("\\makenumber{%s}{%s}{%s}{%s}{%s}{%s}\\endgraf",tag,s,n.shift,n.width,the_left_margin(n.list),n.dir))
+ if trace_numbers then
+ logs.report("numbers","making number %s for setup %s: %s (%s)",#current_list,a,s,d.continue or "no")
+ end
else
texsprint(ctxcatcodes, "\\skipnumber\\endgraf")
end
@@ -101,24 +168,30 @@ function nodes.lines.boxed.stage_one(n)
local head = texbox[n]
if head then
local list = head.list
- --~ while list.id == vlist and not list.next do
- --~ list = list.list
- --~ end
+ local last_a, skip = nil, false
for n in traverse_id(hlist,list) 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 last_a ~= a then
+ if data[a].method == variables.next then
+ skip = true
+ end
+ last_a = a
+ end
if has_attribute(n,display_math) then
if nodes.is_display_math(n) then
- check_number(n,a)
+ check_number(n,a,skip)
end
else
- if node.first_character(n.list) then
- check_number(n,a)
- end
+ -- the following test fails somehow (change in luatex?)
+ -- if node.first_character(n.list) then
+ check_number(n,a,skip)
+ -- end
end
+ skip = false
end
end
end
@@ -132,116 +205,11 @@ function nodes.lines.boxed.stage_two(n,m)
for l in traverse_id(hlist,texbox[m].list) do
t[#t+1] = copy_node(l)
end
- for j=1,#current_list do
- local l = current_list[j]
- local n, m = l[1], l[2]
- i = i + 1
- t[i].next = n.list
- n.list = t[i]
+ for i=1,#current_list do
+ local li = current_list[i]
+ local n, m, ti = li[1], li[2], t[i]
+ ti.next, n.list = n.list, ti
resolve(n,m)
end
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(tag)
- for i=1,#data do -- ??
- texsprint(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 and p < chunksize then
- local b = nodes.lines.scratchbox
- texsprint(ctxcatcodes, format("{\\forgetall\\global\\setbox%s=\\vbox{\\unvbox%s\\relax\\offinterlineskip", b, b))
- while p < chunksize do
- texsprint(ctxcatcodes, format("\\mkmaketextlinenumber{%s}{%s}\\endgraf",d.start,1))
- p = p + 1
- d.start = d.start + d.step
- end
- d.present = p
- texsprint(ctxcatcodes, "}}")
- end
- end
-
- function nodes.lines.flowed.prepare_b(i)
- local d = data[i]
- local b = nodes.lines.scratchbox
- local l = texbox[b]
- if l then
- l = l.list
- local n = d.numbers
- while l do
- if l.id == hlist then
- local m = copy_node(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
-
- 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
-
- function nodes.lines.flowed.apply(head)
- 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
diff --git a/Master/texmf-dist/tex/context/base/page-lin.mkiv b/Master/texmf-dist/tex/context/base/page-lin.mkiv
index c82d4d5206e..51f02763985 100644
--- a/Master/texmf-dist/tex/context/base/page-lin.mkiv
+++ b/Master/texmf-dist/tex/context/base/page-lin.mkiv
@@ -17,15 +17,17 @@
\unprotect
+% todo: save settings
+
% low level interface
\registerctxluafile{page-lin}{1.001}
-\definesystemattribute[line-number]
-\definesystemattribute[line-reference]
+\definesystemattribute[line-number] \chardef\linenumberattribute \dogetattributeid{line-number}
+\definesystemattribute[line-reference] \chardef\linereferenceattribute \dogetattributeid{line-reference}
-\appendtoksonce\doresetattribute{line-number}\to\everyforgetall
-\appendtoksonce\dosetattribute{display-math}{1}\to\everybeforedisplayformula
+\appendtoksonce \attribute\linenumberattribute \attributeunsetvalue \to \everyforgetall
+\appendtoksonce \attribute\displaymathattribute\plusone \to \everybeforedisplayformula
\newcount\linenumber
\newbox \linenumberscratchbox
@@ -34,34 +36,17 @@
\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
+% id nr shift width leftskip dir
-\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\mkskiplinenumber #1#2#3#4#6#5{}
+% \def\mkleftlinenumber #1#2#3#4#5#6{\hbox{\llap{#2\quad\hskip#3\scaledpoint}}}
+% \def\mkrightlinenumber#1#2#3#4#5#6{\hbox{\rlap{\hskip#4\scaledpoint\hskip#3\scaledpoint\quad#2}}}
-\def\makenumber#1#2{\hbox{\llap{#1\quad\hskip#2\scaledpoint}}\endgraf}%
+\let\makenumber\gobblesixarguments
\newconditional\boxcontentneedsprocessing
@@ -69,38 +54,54 @@
\def\mkdoprocessboxcontents #1{\mkaddtextlinenumbers{#1}\plusone \plusone}
\def\mkdoprocesscolumncontents#1{\mkaddtextlinenumbers{#1}\currentcolumn\nofcolumns}
-\def\mkcurrentstart{0}
-\def\mkcurrentstep {1}
+\def\mklinenumberparameters
+ {continue = "\linenumberparameter\c!continue",
+ start = \linenumberparameter\c!start,
+ step = \linenumberparameter\c!step,
+ method = "\linenumberparameter\c!method",
+ tag = "\currentlinenumbering"}
-\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\mklinenumberupdateparameters
+ {continue = "\linenumberparameter\c!continue"}
+
+\def\mkdefinetextlinenumbering
+ {\setxvalue{ln:c:\currentlinenumbering}{\number\ctxlua{tex.sprint(nodes.lines.boxed.register({\mklinenumberparameters}))}}}
-\def\mkstarttextlinenumbering#1#2%
+\def\mkupdatetextlinenumbering
+ {\ctxlua{nodes.lines.boxed.setup(\getvalue{ln:c:\currentlinenumbering},{\mklinenumberupdateparameters})}}
+
+\def\mkstarttextlinenumbering#1#2% always when assignment
{\globallet\mkprocesspagecontents \mkdoprocesspagecontents
\globallet\mkprocesscolumncontents\mkdoprocesscolumncontents
\global\settrue\boxcontentneedsprocessing % see core-rul.mkiv
+ \edef\currentlinenumbering{#1}%
\ifcase#2\relax
- % continue
+ \mkupdatetextlinenumbering % continue
\or
- \mkdefinetextlinenumbering{#1}% restart
+ \mkdefinetextlinenumbering % only when assignment
\fi
- \dosetattribute{line-number}{\getvalue{ln:c:#1}}}
+ \attribute\linenumberattribute\getvalue{ln:c:\currentlinenumbering}\relax}
-\def\mksetuptextlinenumbering#1%
- {\ctxlua{nodes.lines.boxed.setup(\getvalue{ln:c:#1},{start=\mkcurrentstart,step=\mkcurrentstep,tag="#1"})}}
+\def\mksetuptextlinenumbering
+ {\ifcsname ln:c:\currentlinenumbering\endcsname
+ \ctxlua{nodes.lines.boxed.setup(\getvalue{ln:c:\currentlinenumbering},{\mklinenumberparameters})}%
+ \fi}
\def\mkstoptextlinenumbering
- {\doresetattribute{line-number}}
+ {\attribute\linenumberattribute\attributeunsetvalue}
+
+% we could make this a bit more efficient by putting the end reference
+% in the same table as the start one but why make things complex ...
+
+\let\dofinishlinereference\dofinishfullreference
\def\mksomelinereference#1#2#3%
{\dontleavehmode\begingroup
\global\advance\linerefcounter\plusone
- \dosetattribute{line-reference}\linerefcounter
- % this will change and is troublesome anyway
- #3\textreference[#2]{\noexpand\ctxlua{tex.sprint(nodes.lines.number(\the\linerefcounter))}}%
+ \attribute\linereferenceattribute\linerefcounter
+ #3%
+ % for the moment we use a simple system i.e. no prefixes etc .. todo: store as number
+ \expanded{\dodosetreference{line}{#2}{conversion=\linenumberparameter\c!conversion}{\the\linerefcounter}}% kind labels userdata text
\endgroup}
\def\mkstartlinereference#1{\mksomelinereference{#1}{lr:b:#1}{}\ignorespaces}
@@ -117,7 +118,7 @@
\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\linenumberlocation = 1 % 0=middle, 1=left, 2=right, 3=inner, 4=outer, 5=text, 6=begin, 7=end
\chardef\linenumberalignment = 5 % 0=middle, 1=left, 2=right, 5=auto
\newevery \beforeeverylinenumbering \relax
@@ -127,14 +128,14 @@
\newdimen\linenumberwidth
\newdimen\linenumberdistance
-\def\definelinenumbering
+\unexpanded\def\definelinenumbering
{\dosingleempty\dodefinelinenumbering}
\def\dodefinelinenumbering[#1]%
- {\def\currentlinenumbering{#1}%
- \mkdefinetextlinenumbering\currentlinenumbering}
+ {\edef\currentlinenumbering{#1}%
+ \mkdefinetextlinenumbering}
-\def\setuplinenumbering
+\unexpanded\def\setuplinenumbering
{\dodoubleempty\dosetuplinenumbering}
\def\dosetuplinenumbering[#1][#2]%
@@ -145,7 +146,7 @@
\let\currentlinenumbering\empty
\getparameters[\??rn][#1]%
\fi
- \mksetuptextlinenumbering\currentlinenumbering}
+ \mksetuptextlinenumbering}
\def\linenumberparameter#1%
{\csname\??rn\ifcsname\??rn\currentlinenumbering#1\endcsname\currentlinenumbering\fi#1\endcsname}
@@ -153,13 +154,12 @@
\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!method=\v!first,
+ \c!continue=\v!no,
\c!location=\v!left,
\c!style=,
\c!color=,
@@ -170,15 +170,14 @@
\c!distance=\zeropoint,
\c!align=\v!auto]
-\def\startlinenumbering
+\definelinenumbering
+
+\unexpanded\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
@@ -191,6 +190,8 @@
\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:l:\v!begin \endcsname \plussix
+\expandafter\chardef\csname\??rn:l:\v!end \endcsname \plusseven
\expandafter\chardef\csname\??rn:a:\v!middle \endcsname \zerocount
\expandafter\chardef\csname\??rn:a:\v!right \endcsname \plusone
@@ -204,32 +205,37 @@
\chardef\linenumbermode\plusone
\ifsecondargument
\def\currentlinenumbering{#1}%
- \doifnumberelse{#2}% downward compatible
- {\setvalue{\??rn#1\c!start}{#2}}%
- {\doif{#2}\v!continue{\chardef\linenumbermode\zerocount}}%
+ \doifassignmentelse{#2}
+ {\getparameters[\??rn\currentlinenumbering][#2]}
+ {\doifnumberelse{#2}% downward compatible
+ {\setvalue{\??rn#1\c!start}{#2}}%
+ {\doif{#2}\v!continue
+ {\getparameters[\??rn\currentlinenumbering][\c!continue=\v!yes]%
+ \chardef\linenumbermode\zerocount}}}%
\else\iffirstargument
\doifnumberelse{#1}% downward compatible
{\let\currentlinenumbering\empty
\setvalue{\??rn\c!start}{#1}}%
{\doifelse{#1}\v!continue
{\let\currentlinenumbering\empty
+ \getparameters[\??rn\currentlinenumbering][\c!continue=\v!yes]%
\chardef\linenumbermode\zerocount}
{\def\currentlinenumbering{#1}}}%
\fi\fi
- \doifelse{\linenumberparameter\c!continue}\v!yes
+ \doif{\linenumberparameter\c!continue}\v!yes
{\chardef\linenumbermode\zerocount}%
\numberinglinestrue
\the\beforeeverylinenumbering
\mkstarttextlinenumbering\currentlinenumbering\linenumbermode}
-\def\stoplinenumbering
+\unexpanded\def\stoplinenumbering
{\mkstoptextlinenumbering
\the\aftereverylinenumbering
\endgroup}
% number placement
-\let\mkskiplinenumber \gobblefivearguments
+\let\mkskiplinenumber \gobblesixarguments
\def\mkdoinnerlinenumber{\doifoddpageelse\mkdoleftlinenumber\mkdorightlinenumber}
\def\mkdoouterlinenumber{\doifoddpageelse\mkdorightlinenumber\mkdoleftlinenumber}
@@ -245,6 +251,12 @@
\expandafter\mkdoinnerlinenumber
\or
\expandafter\mkdoouterlinenumber
+ \or
+ \expandafter\mkdotextlinenumber
+ \or
+ \expandafter\mkdobeginlinenumber
+ \or
+ \expandafter\mkdoendlinenumber
\fi}
\def\mkrightlinenumber
@@ -258,32 +270,72 @@
\expandafter\mkdoouterlinenumber
\or
\expandafter\mkdoinnerlinenumber
+ \or
+ \expandafter\mkdotextlinenumber
+ \or
+ \expandafter\mkdoendlinenumber
+ \or
+ \expandafter\mkdobeginlinenumber
\fi}
\def\mkaddtextlinenumbers#1#2#3% box col max
{\bgroup
+ \chardef\linenumberbox #1\relax
+ \chardef\linenumbercolumn #2\relax
+ \chardef\linenumberlastcolumn#3\relax
+ \fullrestoreglobalbodyfont
\def\skipnumber{\hbox{}}%
- \ifcase#3\relax
- \let\makenumber\mkskiplinenumber
+ \let\makenumber\maketextlinenumber
+ \mkprocesstextlinenumbers\linenumberbox
+ \egroup}
+
+\def\maketextlinenumber#1%
+ {\edef\currentlinenumbering{#1}%
+ \chardef\linenumberlocation \executeifdefined{\??rn:l:\linenumberparameter\c!location}\plusone % left
+ \chardef\linenumberalignment\executeifdefined{\??rn:a:\linenumberparameter\c!align }\plusfive % auto
+ \ifcase\linenumberlastcolumn\relax
+ \let\domakenumber\mkskiplinenumber
\or
- \let\makenumber\mkleftlinenumber
- \else\ifcase#2\relax
- \let\makenumber\mkskiplinenumber
+ % one column
+ \ifcase\linenumberlocation
+ \let\domakenumber\mkskiplinenumber
+ % hm
+ \or
+ \let\domakenumber\mkleftlinenumber
+ \or
+ \let\domakenumber\mkrightlinenumber
+ \or % inner
+ \let\domakenumber\mkdoinnerlinenumber
+ \or % outer
+ \let\domakenumber\mkdoouterlinenumber
+ \or % text
+ \let\domakenumber\mkdotextlinenumber
+ \or
+ \let\domakenumber\mkdobeginlinenumber
+ \or
+ \let\domakenumber\mkdoendlinenumber
+ \fi
+ \else\ifcase\linenumbercolumn\relax
+ \let\domakenumber\mkskiplinenumber
\or
- \let\makenumber\mkdoleftlinenumber
+ \let\domakenumber\mkleftlinenumber
\ifcase\linenumberlocation\or
\chardef\linenumberlocation\plusone
\or
\chardef\linenumberlocation\plustwo
- \or
+ \else
\chardef\linenumberlocation\plusone
\or
\chardef\linenumberlocation\plusone
\or
\chardef\linenumberlocation\plusone
+ \or
+ \chardef\linenumberlocation\plusone % todo
+ \or
+ \chardef\linenumberlocation\plusone % todo
\fi
\else
- \let\makenumber\mkdorightlinenumber
+ \let\domakenumber\mkrightlinenumber
\ifcase\linenumberlocation\or
\chardef\linenumberlocation\plustwo
\or
@@ -292,21 +344,52 @@
\chardef\linenumberlocation\plustwo
\or
\chardef\linenumberlocation\plustwo
+ \or
+ \chardef\linenumberlocation\plustwo % todo
+ \or
+ \chardef\linenumberlocation\plustwo % todo
\fi
\fi\fi
- \mkprocesstextlinenumbers{#1}%
- \egroup}
+ \domakenumber{#1}}
-\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\mkdotextlinenumber #1#2#3#4#5#6% beware, one needs so compensate for this in the width !
+ {\hbox{\dosomelinenumber{#1}{2}{#2}{#5}\hskip#3\scaledpoint}}
+
+\def\mkdotextlinenumber #1#2#3#4#5#6% beware, one needs so compensate for this in the width !
+ {\hbox{\dosomelinenumber{#1}{2}{#2}{#5}\hskip#3\scaledpoint}}
+
+\def\mkdoleftlinenumber #1#2#3#4#5#6%
+ {\naturalhbox to \zeropoint
+ {\ifcase\istltdir#6\else \hskip-#4\scaledpoint \fi
+ \llap{\dosomelinenumber{#1}{2}{#2}{#5}\kern#3\scaledpoint}}}
+
+\def\mkdorightlinenumber#1#2#3#4#5#6%
+ {\naturalhbox to \zeropoint
+ {\ifcase\istltdir#6\else \hskip-#4\scaledpoint \fi
+ \rlap{\hskip#4\scaledpoint\hskip#3\scaledpoint\dosomelinenumber{#1}{1}{#2}{#5}}}}
+
+\def\mkdobeginlinenumber #1#2#3#4#5#6%
+ {\ifcase\istltdir#6\relax
+ \chardef\linenumberlocation\plusone
+ \expandafter\mkdoleftlinenumber
+ \else
+ \chardef\linenumberlocation\plustwo
+ \expandafter\mkdorightlinenumber
+ \fi{#1}{#2}{#3}{#4}{#5}{#6}}
+
+\def\mkdoendlinenumber#1#2#3#4#5#6%
+ {\ifcase\istltdir#6\relax
+ \chardef\linenumberlocation\plustwo
+ \expandafter\mkdorightlinenumber
+ \else
+ \chardef\linenumberlocation\plusone
+ \expandafter\mkdoleftlinenumber
+ \fi{#1}{#2}{#3}{#4}{#5}{#6}}
\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
+ \def\linenumber{#3}% unsafe
\doifelse{\linenumberparameter\c!width}\v!margin
{\linenumberwidth\leftmarginwidth}
{\linenumberwidth\linenumberparameter\c!width}%
@@ -365,8 +448,8 @@
% referencing
\def\someline [#1]{\mkstartlinereference{#1}\mkstoplinereference{#1}}
-\def\startline[#1]{\mkstartlinereference{#1}}
-\def\stopline [#1]{\mkstoplinereference {#1}}
+\unexpanded\def\startline[#1]{\mkstartlinereference{#1}}
+\unexpanded\def\stopline [#1]{\mkstoplinereference {#1}}
\def\mkshowstartlinereference#1%
{\ifconditional\tracelinenumbering
@@ -386,11 +469,14 @@
% eventually we will do this in lua
+\def\currentreferencelinenumber{\ctxlua{jobreferences.filter("linenumber")}}
+
\def\doifelsesamelinereference#1#2#3%
{\doifreferencefoundelse{lr:b:#1}
- {\let\fline\currenttextreference
+ {\edef\fline{\currentreferencelinenumber}%
\doifreferencefoundelse{lr:e:#1}
- {\let\tline\currenttextreference
+ {\edef\tline{\currentreferencelinenumber}%
+ %[\fline,\tline]
\ifx\fline\tline#2\else#3\fi}
{\unknownreference{#1}#2}}
{\unknownreference{#1}#2}}
@@ -404,35 +490,9 @@
{\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}{#2}}
+\def\inlinerange[#1]%
+ {\doifelsesamelinereference{#1}
+ {\in[lr:b:#1]}
+ {\in[lr:b:#1]--\in[lr:e:#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
+\protect \endinput
diff --git a/Master/texmf-dist/tex/context/base/page-mak.mkiv b/Master/texmf-dist/tex/context/base/page-mak.mkiv
index 45a1f11674c..fd89a45ff77 100644
--- a/Master/texmf-dist/tex/context/base/page-mak.mkiv
+++ b/Master/texmf-dist/tex/context/base/page-mak.mkiv
@@ -34,7 +34,7 @@
%D \showsetup{setupmakeup}
%D \showsetup{startmakeup}
-\def\definemakeup
+\unexpanded\def\definemakeup
{\dodoubleargument\dodefinemakeup}
\def\dodefinemakeup[#1][#2]%
@@ -64,7 +64,7 @@
\setvalue{\e!start#1\e!makeup}{\startmakeup[#1]}%
\setvalue{\e!stop #1\e!makeup}{\stopmakeup}}
-\def\setupmakeup
+\unexpanded\def\setupmakeup
{\dodoubleargument\dosetupmakeup}
\def\dosetupmakeup[#1]%
@@ -84,7 +84,7 @@
\let\currentmakeup\empty
-\def\startmakeup
+\unexpanded\def\startmakeup
{\dodoubleempty\dostartmakeup}
\def\dostartmakeup[#1][#2]%
@@ -126,11 +126,11 @@
\setsystemmode\v!makeup
\setupmakeuplayout
\makeupparameter\c!commands % hm, what is this one doing here ?
- \startregistercolor[\makeupparameter\c!color]%
\forgetall % else indented flush
\global\setbox\makeupbox\vbox to \makeupparameter\c!height
\bgroup
- \setups[\makeupparameter\c!setups]%
+ \doifsomething{\makeupparameter\c!color}{\startcolor[\makeupparameter\c!color]}% can be made faster
+ \doprocesslocalsetups{\makeupparameter\c!setups}%
\hsize\makeupparameter\c!width
\doifsomething{\makeupparameter\c!align}
{\setupalign[\makeupparameter\c!align]}%
@@ -139,9 +139,9 @@
\def\dodostopmakeup
{\endgraf
\makeupparameter\c!bottom
+ \doifsomething{\makeupparameter\c!color}{\stopcolor}%
\egroup
\flushmarks % new, here, else empty pages
- \stopregistercolor
\doflushmakeup
\egroup
\calculatehsizes
@@ -198,7 +198,7 @@
%D by setting their associated status variables. The
%D connection between them is made by the following macro
-\def\setupmakeuplayout
+\unexpanded\def\setupmakeuplayout
{\setupfooter[\c!state=\makeupparameter\c!footerstate]%
\setupheader[\c!state=\makeupparameter\c!headerstate]%
\setuptext [\c!state=\makeupparameter\c!textstate]%
diff --git a/Master/texmf-dist/tex/context/base/page-mar.mkiv b/Master/texmf-dist/tex/context/base/page-mar.mkiv
index b85a99aa618..464b4f9bb09 100644
--- a/Master/texmf-dist/tex/context/base/page-mar.mkiv
+++ b/Master/texmf-dist/tex/context/base/page-mar.mkiv
@@ -46,7 +46,7 @@
%D therefore embed them in some macro's that (force and)
%D remove the indentation and restore it afterwards.
-\def\definemarginline
+\unexpanded\def\definemarginline
{\dodoubleargument\dodefinemarginline}
\def\dodefinemarginline[#1][#2]%
@@ -58,7 +58,7 @@
\c!hoffset=\leftmargindistance,
\c!command=,
#2]%
- \unexpanded\setvalue{#1}{\dohandlemarginline{#1}}}
+ \setuvalue{#1}{\dohandlemarginline{#1}}}
\def\marginlineparameter #1{\csname\??im\??im\currentmarginline#1\endcsname}
\def\marginlineexecuter #1#2{\executeifdefined{\??im\??im\currentmarginline#1}{#2}}
@@ -120,9 +120,6 @@
\definemarginline[atleftmargin] [\c!location=\v!left, \c!command=\lrlap,\c!width=\zeropoint,\c!distance=\zeropoint,\c!hoffset=\zeropoint]
\definemarginline[atrightmargin][\c!location=\v!right,\c!command=\rllap,\c!width=\zeropoint,\c!distance=\zeropoint,\c!hoffset=\zeropoint]
-\ifx\lrlap\undefined \def\lrlap#1{\llap{\rlap{#1}}} \fi
-\ifx\rllap\undefined \def\rllap#1{\rlap{\llap{#1}}} \fi
-
\def\lrlap#1{\llap{\rlap{#1}}}
\def\rllap#1{\rlap{\hskip\hsize\llap{#1}}}
@@ -196,7 +193,7 @@
\newcount\margincontentlevel
\newdimen\margincontentheight
-\def\setupinmargin
+\unexpanded\def\setupinmargin
{\dodoubleempty\dosetupinmargin}
\def\dosetupinmargin[#1][#2]%
@@ -439,7 +436,7 @@
\makemargintextblock\v!right\v!left{#2}%
\rlap{\placemargincontentseparator}}}
-\def\placemargincontentseparator
+\unexpanded\def\placemargincontentseparator
{\ifnum\margincontentlevel>\zerocount
\ifx\margincontentseparator\empty\else
\bgroup
@@ -502,7 +499,7 @@
{\dodoinmargin[#1][#2][#3][#4][#5]}
{\dodoinmargin[#1][#2][#3][][#4]}}
-\def\defineinmargin
+\unexpanded\def\defineinmargin
{\doquadrupleempty\dodefineinmargin}
\def\dodefineinmargin[#1][#2][#3][#4]%
@@ -764,7 +761,7 @@
\global\chardef\margintextcollected\zerocount
\global\collectedmargintexts\emptytoks}
-\def\placemargincontent
+\unexpanded\def\placemargincontent
{\ifcase\margintextcollected\else % was level check
\bgroup
\redoconvertfont % !!
@@ -775,7 +772,7 @@
% For old times sake (i use it in project styles) we provide
-\def\placemargintexts {\placemargincontent}
+\unexpanded\def\placemargintexts {\placemargincontent}
\def\resetmargetitels {\resetmargincontent}
\def\margewoordpositie{\margewoord} % obsolete, now no longer range
diff --git a/Master/texmf-dist/tex/context/base/page-mis.mkiv b/Master/texmf-dist/tex/context/base/page-mis.mkiv
index a620835e470..f7c3d529d1a 100644
--- a/Master/texmf-dist/tex/context/base/page-mis.mkiv
+++ b/Master/texmf-dist/tex/context/base/page-mis.mkiv
@@ -15,24 +15,24 @@
\unprotect
-\newif\ifmargeblokken
+\newif\ifmarginblocks
\def\dosetupmarginblocks[#1]%
{\getparameters[\??mb][#1]%
\doifelse\@@mbstate\v!start
{\showmessage\m!layouts4\empty
- \margeblokkentrue
+ \marginblockstrue
\let\somenextfloat\dosomenextfloat
\let\startmarginblock\dostartmarginblock
\let\stopmarginblock\dostopmarginblock}%
{\showmessage\m!layouts5\empty
- \margeblokkenfalse
+ \marginblocksfalse
\def\somenextfloat[##1]%
{\someelsefloat[##1,\v!here]}%
\let\startmarginblock\dontstartmargeblok
\let\stopmarginblock\dontstopmargeblok}}
-\def\setupmarginblocks
+\unexpanded\def\setupmarginblocks
{\dosingleargument\dosetupmarginblocks}
\newbox\marginbox
@@ -43,11 +43,11 @@
\unvcopy\marginbox
\ifvoid\marginbox\else\expandafter\@@mbinbetween\fi
\box\floatbox\filbreak}%
- \ifdim\ht\marginbox>\textheight
- \dosavefloatinfo
- \else
- \doinsertfloatinfo
- \fi}
+ \ifdim\ht\marginbox>\textheight
+ % \dosavefloatinfo
+ \else
+ \doinsertfloatinfo
+ \fi}
\newbox\preparedmarginbox
@@ -64,16 +64,16 @@
\@@mbbottom}%
\fi}
-\def\plaatsrechtermargeblok
+\unexpanded\def\placerightmarginblock
{\hskip\rightmarginwidth}
-\def\plaatslinkermargeblok
+\unexpanded\def\placeleftmarginblock
{\hskip\leftmarginwidth}
-\def\checkmargeblokken
- {\ifvoid\marginbox\else\docheckmargeblokken\fi}
+\def\checkmarginblocks
+ {\ifvoid\marginbox\else\docheckmarginblocks\fi}
-\def\docheckmargeblokken % erg inefficient
+\def\docheckmarginblocks % erg inefficient
{\setbox\preparedmarginbox\vbox
{\forgetall
\splittopskip\topskip
@@ -88,13 +88,13 @@
\setbox\preparedmarginbox\vbox
{\@@mbbefore\box\preparedmarginbox\@@mbafter}%
\def\rightmarginbox
- {\def\plaatsrechtermargeblok
+ {\unexpanded\def\placerightmarginblock
{\setbox\preparedmarginbox\hbox to \rightmarginwidth
{\@@mbleft\box\preparedmarginbox\@@mbright}%
\vsmashbox\preparedmarginbox
\box\preparedmarginbox}}%
\def\leftmarginbox
- {\def\plaatslinkermargeblok
+ {\unexpanded\def\placeleftmarginblock
{\setbox\preparedmarginbox\hbox to \leftmarginwidth
{\@@mbright\box\preparedmarginbox\@@mbleft}%
\vsmashbox\preparedmarginbox
@@ -134,7 +134,7 @@
\egroup
\@@mbafter}
-\newcounter\nofpostponedblocks
+\newcount\nofpostponedblocks
\newif\ifinpostponing
@@ -159,66 +159,39 @@
%
% \starttext \dorecurse{4}{\input tufte \page} \stoptext
-\newtoks \postponedpageblocks
-\newcounter\nofpostponedpageblocks
+\newtoks \postponedpageblocks
+\newcount \nofpostponedpageblocks
% \ifinpostponing: handhaven, want gebruikt in stijlen ! ! ! ! !
-\def\flushpagefloats
- {\doifoddpageelse
- {\ifvoid\collectedleftpagefloats
- \ifvoid\collectedrightpagefloats\else
- \unvbox\collectedrightpagefloats
- \page
- %\the\everytopofpage
- \fi
- \fi}
- {\ifvoid\collectedleftpagefloats\else
- \unvbox\collectedleftpagefloats
- \page
- %\the\everytopofpage
- \fi
- \ifvoid\collectedrightpagefloats\else
- \unvbox\collectedrightpagefloats
- \page
- %\the\everytopofpage
- \fi}%
- \ifvoid\collectedpagefloats\else
- % message
- \unvbox\collectedpagefloats
- \fi}
-
-% \def\flushrestfloats
-% {\doif{\floatsharedparameter\c!cache}\v!no\doflushfloats}
+\def\dodoflushpostponedblocks
+ {\bgroup % we need the font switch, else problems inside split verbatim
+ \setnormalcatcodes % postponing in verbatim
+ \restoreglobalbodyfont
+ \global\pagetotal\zeropoint
+ \global\inpostponingtrue
+ \the\postponedpageblocks
+ \dorecurse\nofpostponedblocks
+ {\getbuffer[pbuf-\recurselevel]}%
+ \doflushfloats % new but potential dangerous
+ \global\nofpostponedblocks\zerocount
+ \global\inpostponingfalse
+ \egroup}
-% \let\flushrestfloats\relax
+\def\doflushpostponedblocks
+ {\ifinpostponing \else
+ \ifcase\nofpostponedblocks \else \dodoflushpostponedblocks \fi
+ \ifcase\nofpostponedpageblocks \else \dodoflushpostponedblocks \fi
+ \fi}
-\def\dopostponeblock
- {\bgroup % new may 2004
- \setsystemmode\v!postponing % new may 2004
+\def\doflushpostponedcontent
+ {\bgroup
+ \setsystemmode\v!postponing
\the\everytopofpage
%\flushrestfloats
- \flushpagefloats
- \donefalse
- \ifinpostponing \else
- \ifcase\nofpostponedblocks \else \donetrue \fi
- \ifcase\nofpostponedpageblocks \else \donetrue \fi
- \fi
- \ifdone
- \bgroup % we need the color/font switch, else problems inside split verbatim
- \setnormalcatcodes % postponing in verbatim
- \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
- \doflushfloats % new but potential dangerous % suboptimal and needs a
- \doglobal\newcounter\nofpostponedblocks % proper analysis
- \global\inpostponingfalse
- \egroup
- \fi
- \egroup} % new may 2004
+ \doflushpagefloats
+ \doflushpostponedblocks
+ \egroup}
\def\getpostponedblock#1#2%
{\doif{#1}\realfolio{\getbuffer[rbuf-#2]}} % no \ifnum, avoid \fi
@@ -231,20 +204,20 @@
\doifnextoptionalelse{\egroup\nodostartpostponing}{\egroup\dodostartpostponing}}
\def\nodostartpostponing[#1]%
- {\doglobal\increment\nofpostponedpageblocks
+ {\global\advance\nofpostponedpageblocks\plusone % hm, never reset?
\bgroup % a little bit of misusing grouping
\doifinstring{+}{#1}\advance \realpageno#1\relax % ugly but efficient
\doglobal\appendetoks\noexpand\getpostponedblock
- {\realfolio}{\nofpostponedpageblocks}\to\postponedpageblocks
+ {\realfolio}{\number\nofpostponedpageblocks}\to\postponedpageblocks
\egroup
- \showmessage\m!layouts3\nofpostponedpageblocks
- \dostartbuffer[rbuf-\nofpostponedpageblocks]%
+ \showmessage\m!layouts3{\number\nofpostponedpageblocks}%
+ \dostartbuffer[rbuf-\number\nofpostponedpageblocks]%
[\e!start\v!postponing][\e!stop\v!postponing]}
\def\dodostartpostponing
- {\doglobal\increment\nofpostponedblocks
- \showmessage\m!layouts3\nofpostponedblocks
- \expanded{\dostartbuffer[pbuf-\nofpostponedblocks][\e!start\v!postponing][\e!stop\v!postponing]}}
+ {\global\advance\nofpostponedblocks\plusone
+ \showmessage\m!layouts3{\number\nofpostponedblocks}%
+ \expanded{\dostartbuffer[pbuf-\number\nofpostponedblocks][\e!start\v!postponing][\e!stop\v!postponing]}}
% Setups:
diff --git a/Master/texmf-dist/tex/context/base/page-mul.mkiv b/Master/texmf-dist/tex/context/base/page-mul.mkiv
index 789cfbe439c..88ec7a5e7be 100644
--- a/Master/texmf-dist/tex/context/base/page-mul.mkiv
+++ b/Master/texmf-dist/tex/context/base/page-mul.mkiv
@@ -424,18 +424,7 @@
%\setcolumntextheight\relax
\widowpenalty\zerocount % is gewoon beter
\clubpenalty \zerocount % zeker bij grids
- \ifsomefloatwaiting
- \showmessage\m!columns6{\the\savednoffloats}%
- \global\setbox\savedfloatlist\box\floatlist
- \xdef\restoresavedfloats
- {\global\savednoffloats\the\savednoffloats
- \global\setbox\floatlist\box\savedfloatlist
- \global\noexpand\somefloatwaitingtrue}%
- \global\savednoffloats\zerocount
- \global\somefloatwaitingfalse
- \else
- \global\let\restoresavedfloats\relax
- \fi
+ \dopushcolumnfloats
\dimen0\dimexpr\pagetotal+\parskip+\openlineheight\relax
\ifdim\dimen0<\pagegoal
\allowbreak
@@ -525,7 +514,7 @@
\synchronizeoutput % new may 2004 / we need to: \pagegoal\vsize
\checkendcolumnfootnotes
\dosomebreak\allowbreak
- \restoresavedfloats}
+ \dopopcolumnfloats}
%D Because some initializations happen three times, we
%D defined a macro for them. Erasing \type{\everypar} is
@@ -602,7 +591,7 @@
\setfalse\someprecolumncontent % will be set elsewhere
\else
\settrue\someprecolumncontent
-\mkprocessboxcontents\precolumnbox
+ \mkprocessboxcontents\precolumnbox
\fi
\forgetall
\setmulticolumnsout
@@ -920,6 +909,7 @@
{\lower\scratchdimen\vbox{\placenoteinserts}}%
\ht0=\openstrutheight % \strutht
\dp0=\openstrutdepth % \strutdp
+ \wd0=\zeropoint
\scratchdimen\ht\firstcolumnbox
\global\setbox\firstcolumnbox\vbox to \scratchdimen
{\box\firstcolumnbox
@@ -937,11 +927,12 @@
{\lower\scratchdimen\vbox{\placenoteinserts}}%
\ht0=\openstrutheight % \strutht
\dp0=\openstrutdepth % \strutdp
+ \wd0=\zeropoint
\scratchdimen\ht\lastcolumnbox
\global\setbox\lastcolumnbox\vbox to \scratchdimen
{\box\lastcolumnbox
\vskip-\scratchdimen
- box0}%
+ \box0}%
\fi
\egroup
\fi
@@ -1226,30 +1217,51 @@
%D When all those floats are flushed, we switch to the local
%D flushing routine.
-\def\setcolumnfloats
- {\xdef\globalsavednoffloats{\the\savednoffloats}%
- \ifnum\globalsavednoffloats>\zerocount
- \setglobalcolumnfloats
+\def\dopushcolumnfloats
+ {\ifsomefloatwaiting
+ \showmessage\m!columns6{\the\savednoffloats}%
+ \global\setbox\savedfloatlist\box\floatlist
+ \xdef\dopopcolumnfloats
+ {\global\savednoffloats\the\savednoffloats
+ \global\setbox\floatlist\box\savedfloatlist
+ \global\noexpand\somefloatwaitingtrue}%
+ \global\savednoffloats\zerocount
+ \global\somefloatwaitingfalse
\else
- \setlocalcolumnfloats
+ \global\let\dopopcolumnfloats\relax
\fi}
-\def\setglobalcolumnfloats
- {\everypar\emptytoks
- \let\flushcolumnfloat\relax
- %\let\doroomfloat\relax
- \let\docheckiffloatfits\relax
- \let\flushcolumnfloats\noflushcolumnfloats}
+\let\dopopcolumnfloats\relax
+
+% \def\setcolumnfloats % messy as it adapts everypar
+% {\xdef\globalsavednoffloats{\the\savednoffloats}%
+% \ifnum\globalsavednoffloats>\zerocount
+% \setglobalcolumnfloats % hm, we always push so this never happens
+% \else
+% \setlocalcolumnfloats
+% \fi}
+
+\def\setcolumnfloats % messy as it adapts everypar, we need to adapt this
+ {\setlocalcolumnfloats}
+
+\newconditional\onlylocalcolumnfloats % temp hack as we will redo floats (grid snapping is also messy now)
+
+\def\OTRMULdocheckiffloatfits{\ifconditional\onlylocalcolumnfloats\docolumnroomfloat \else\relax \fi}
+\def\OTRMULdosetbothinserts {\ifconditional\onlylocalcolumnfloats\relax \else\OTRONEdosetbothinserts\fi}
+\def\OTRMULdotopinsertions {\ifconditional\onlylocalcolumnfloats\relax \else\OTRONEdotopinsertions \fi}
+\def\OTRMULdoflushfloats {\ifconditional\onlylocalcolumnfloats\doflushcolumnfloats\else\OTRONEdoflushfloats \fi}
\def\setlocalcolumnfloats
- {\everypar{\flushnotes\flushcolumnfloat\flushmargincontents\checkindentation}%
+ {\settrue\onlylocalcolumnfloats
+ \everypar{\flushnotes\flushcolumnfloat\flushmargincontents\checkindentation}%
\let\flushcolumnfloat\doflushcolumnfloat
- %\let\doroomfloat\docolumnroomfloat
- \let\docheckiffloatfits\docolumnroomfloat
- \let\flushcolumnfloats\doflushcolumnfloats
- \let\doflushfloats\doflushcolumnfloats % new
- \let\dosetbothinserts\relax
- \let\dotopinsertions\relax}
+ \let\flushcolumnfloats\doflushcolumnfloats}
+
+\def\setglobalcolumnfloats
+ {\setfalse\onlylocalcolumnfloats
+ \everypar\emptytoks
+ \let\flushcolumnfloat\relax
+ \let\flushcolumnfloats\noflushcolumnfloats}
\def\noflushcolumnfloats
{\bgroup
@@ -1314,24 +1326,17 @@
\else
\bgroup
\getcolumnstatus\column\count255\total\dimen0\goal\dimen2\\%
- \advance\dimen0 2\openlineheight % nog nodig ?
- %\ifnum\count255=\nofcolumns
- % \getinsertionheight
- % %\message{\insertionheight}\wait
- % \advance\dimen0 \insertionheight
- %\fi
+ \dofloatsgetinfo{text}%
\setbox\scratchbox\vbox % tricky met objecten ?
{\blank[\@@bkspacebefore]
- \snaptogrid\vbox{\copy\floatbox}}%
- \advance\dimen0 \ht\scratchbox
- \advance\dimen0 .5\lineheight % needed because goal a bit higher
- %\message{column: \the\count255; total: \the\dimen0; goal: \the\dimen2}\wait
+ \snaptogrid\vbox{\vskip\floatheight}}% copy?
+ \advance\dimen0\dimexpr\ht\scratchbox+2\openlineheight+.5\lineheight\relax\relax % needed because goal a bit higher
\ifdim\dimen0>\dimen2
\global\roomforfloatfalse
\else
\global\roomforfloattrue
\fi
- \ifdim\wd\floatbox>\hsize
+ \ifdim\floatwidth>\hsize
\showmessage\m!columns{11}\empty
\global\roomforfloatfalse
\fi
@@ -1351,40 +1356,33 @@
\let\doflushcolumnfloat\relax
\getcolumnstatus\column\mofcolumns\total\dimen0\goal\dimen2\\%
\ifdim\dimen0>\zeropoint
- \dogetfloat
- \ifdim\wd\floatbox>\hsize
- \doresavefloat
+ \dofloatsgetinfo{text}%
+ \ifdim\floatwidth>\hsize
+ % dropped ?
\else
- %\setbox2=\vbox
- % {\blank[\@@bkspacebefore]
- % \snaptogrid\vbox{\copy\floatbox}%
- % \blank[\@@bkspaceafter]
- \setbox2=\vbox
+ \setbox2\vbox
{\blank[\@@bkspacebefore]
- \snaptogrid\vbox{\copy\floatbox}}%
+ \snaptogrid\vbox{\vskip\floatheight}}%
\advance\dimen0 \ht2
\ifdim\dimen0>\dimen2
\ifnum\mofcolumns<\nofcolumns
\advance\mofcolumns \plusone
-%% bug %% \edef\currenttopcolumnbox{\getvalue{\@@topcol\the\count255}}%
\ifdim\ht\currenttopcolumnbox=\zeropoint
+ \dofloatsflush{text}{1}%
\global\setbox\currenttopcolumnbox\vbox
- {\snaptogrid\vbox{\copy\floatbox}
+ {\snaptogrid\vbox{\box\floatbox}
\whitespace % nodig ?
\blank[\@@bkspaceafter]}%
- \dimen4=\ht\currenttopcolumnbox
- \advance\dimen4 \dp\currenttopcolumnbox
+ \dimen4=\htdp\currenttopcolumnbox
\global\advance\vsize -\dimen4
\advance\dimen4 -\pagegoal
\global\pagegoal-\dimen4
\showmessage\m!columns{12}a%
\else
\showmessage\m!columns{12}b%
- \doresavefloat
\fi
\else
\showmessage\m!columns{12}c%
- \doresavefloat
\fi
\else
\ifhmode{\setbox0\lastbox}\fi% waar is die er in geslopen
@@ -1394,6 +1392,7 @@
\blank[\@@bkspacebefore]
\nobreak
\fi
+ \dofloatsflush{text}{1}%
\flushfloatbox
\blank[\@@bkspaceafter]
\fi
@@ -1416,6 +1415,7 @@
%D When handling lots of (small) floats spacing can get worse
%D because of lining out the columns.
+
\def\doflushcolumnfloats
{\ifpostponecolumnfloats\else
\bgroup
@@ -1430,53 +1430,49 @@
\global\setbox\currenttopcolumnbox\vbox
{\snaptogrid\vbox
{\copy\currenttopcolumnbox
- \hbox{\vphantom{\copy\floatbox}}}
+ \hbox{\vphantom{\vskip\floatheight}}}% known from previous
\whitespace % nodig ?
\blank[\@@bkspaceafter]}%
\else
- \dogetfloat
- \ifdim\wd\floatbox>\finalcolumntextwidth % better somewhere else too
- \global\setbox\floatbox\hbox to \finalcolumntextwidth{\hss\box\floatbox\hss}%
- \fi % otherwise the graphic may disappear
- \ifdim\wd\floatbox>\hsize
- \dimen0\wd\floatbox
- \advance\dimen0 \intercolumnwidth
- \dimen2\hsize
- \advance\dimen2 \intercolumnwidth
- \advance\dimen0 .5pt % hm, why 1
- \advance\dimen2 .5pt % hm, why 2
+ \dofloatsgetinfo{text}%
+ \ifdim\floatwidth>\hsize
+ \dimen0\dimexpr\floatwidth+\intercolumnwidth+.5pt\relax
+ \dimen2\dimexpr\hsize +\intercolumnwidth+.5pt\relax
\divide\dimen0 \dimen2
\count0\dimen0
\advance\count0 \plusone
\ifnum\count0>\count2
- \doresavefloat
\count0\zerocount
\else
- \dimen0=\count0\hsize
- \advance\dimen0 \count0\intercolumnwidth
- \advance\dimen0 -\intercolumnwidth
+ \dimen0\dimexpr\count0\hsize+\count0\intercolumnwidth-\intercolumnwidth\relax
+ \dofloatsflush{text}{1}%
+ \ifdim\floatwidth>\finalcolumntextwidth % better somewhere else too
+ \global\setbox\floatbox\hbox to \finalcolumntextwidth{\hss\box\floatbox\hss}%
+ \fi % otherwise the graphic may disappear
\global\setbox\floatbox\hbox to \dimen0
- %{\hss\hbox{\copy\floatbox}\hss}%
{\processaction[\@@bklocation] % how easy to forget
- [ \v!left=>\copy\floatbox\hss,
- \v!right=>\hss\copy\floatbox,
- \s!default=>\hss\copy\floatbox\hss,
- \s!unknown=>\hss\copy\floatbox\hss]}%
+ [ \v!left=>\box\floatbox\hss,
+ \v!right=>\hss\box\floatbox,
+ \s!default=>\hss\box\floatbox\hss,
+ \s!unknown=>\hss\box\floatbox\hss]}%
\fi
\showmessage\m!columns{13}\empty
\else
- % \showmessage\m!columns{13}\empty
+ \dofloatsflush{text}{1}%
+ \ifdim\floatwidth>\finalcolumntextwidth % better somewhere else too
+ \global\setbox\floatbox\hbox to \finalcolumntextwidth{\hss\box\floatbox\hss}%
+ \fi % otherwise the graphic may disappear
+ % \showmessage\m!columns{13}\empty
\fi
\ifdim\ht\floatbox>\zeropoint\relax
\global\setbox\currenttopcolumnbox\vbox
{\snaptogrid\vbox
- {\copy\currenttopcolumnbox
- \copy\floatbox}
+ {\box\currenttopcolumnbox % was copy
+ \box\floatbox}
\whitespace % nodig ?
\blank[\@@bkspaceafter]}%
\fi
- \dimen6\ht\currenttopcolumnbox
- \advance\dimen6 \dp\currenttopcolumnbox
+ \dimen6\htdp\currenttopcolumnbox
\fi
\ifdim\dimen4<\ht\currenttopcolumnbox
\dimen4\ht\currenttopcolumnbox
@@ -1531,7 +1527,7 @@
%
% \stopcolumns
-\def\setupcolumns
+\unexpanded\def\setupcolumns
{\dosingleempty\dosetupcolumns}
\def\dosetupcolumns[#1]%
@@ -1624,7 +1620,7 @@
\ifdim\ctxparskip>\zeropoint\relax
\setupwhitespace[\@@klblank]%
\fi
- \def\stopcolumns
+ \unexpanded\def\stopcolumns
{\endmulticolumns
\global\insidecolumnsfalse
\endgroup
@@ -1648,7 +1644,7 @@
%D interwoven and therefore to be integrated when the multi
%D column modules are merged. (moved from cont-new.tex)
-\def\setupcolumnspan[#1]%
+\unexpanded\def\setupcolumnspan[#1]%
{\getparameters[\??ks][#1]}
\presetlocalframed
@@ -1708,10 +1704,10 @@
%\topskipcorrection % becomes an option !
\EveryPar{\begstrut\EveryPar{}}} % also !
-\def\startcolumnspan
+\unexpanded\def\startcolumnspan
{\dosingleempty\dostartcolumnspan}
-\def\stopcolumnspan
+\unexpanded\def\stopcolumnspan
{\egroup}
\setupcolumns
@@ -1732,7 +1728,7 @@
%D Undocumented and still under development.
-\def\startsimplecolumns
+\unexpanded\def\startsimplecolumns
{\dosingleempty\dostartsimplecolumns}
\def\dostartsimplecolumns[#1]%
@@ -1746,7 +1742,7 @@
\setbox\scratchbox\vbox\bgroup
\forgetall} % \blank[\v!disable]
-\def\stopsimplecolumns
+\unexpanded\def\stopsimplecolumns
{\removebottomthings
\egroup
\rigidcolumnbalance\scratchbox
diff --git a/Master/texmf-dist/tex/context/base/page-not.mkiv b/Master/texmf-dist/tex/context/base/page-not.mkiv
index 9628b9d5f29..95229f9d054 100644
--- a/Master/texmf-dist/tex/context/base/page-not.mkiv
+++ b/Master/texmf-dist/tex/context/base/page-not.mkiv
@@ -29,17 +29,15 @@
\flushnotes
\savenotecontent
\fi
- \savenotedata
- \checknotes}
+ \savenotedata}
\def\checkendcolumnfootnotes
- {\restorenotedata % maybe better just \checknotes
+ {\restorenotedata
\ifcase\clevernotes\else
\restorenotecontent
\fi}
-\def\checksinglecolumnfootnotes
- {\checknotes} % niet : \restorenotedata
+\let\checksinglecolumnfootnotes\relax
\newdimen\totalinsertionheight
@@ -58,8 +56,7 @@
\flushnotes
\savenotecontent
\fi
- \savenotedata
- \checknotes}
+ \savenotedata}
\def\checkendcolumnfootnotes
{\restorenotedata
diff --git a/Master/texmf-dist/tex/context/base/page-one.mkiv b/Master/texmf-dist/tex/context/base/page-one.mkiv
index 73f69d58253..bbd35181e7b 100644
--- a/Master/texmf-dist/tex/context/base/page-one.mkiv
+++ b/Master/texmf-dist/tex/context/base/page-one.mkiv
@@ -33,61 +33,6 @@
\def\OTRONEsethsize
{\global\hsize\textwidth}
-% keep (original one)
-%
-% \def\OTRONEsetvsize
-% {\ifdim\vsize=\teksthoogte \else
-% \bgroup
-% \scratchdimen-\vsize
-% \advance\scratchdimen \teksthoogte
-% \global\advance\vsize \scratchdimen
-% \relax \ifdim\pagegoal<\maxdimen
-% \advance\scratchdimen \pagegoal
-% \global\pagegoal\scratchdimen
-% \fi
-% \egroup
-% \fi}
-%
-% no (keep)
-%
-% \def\OTRONEsetvsize
-% {\ifdim\vsize=\teksthoogte \else
-% \bgroup
-% \scratchdimen-\vsize
-% \advance\scratchdimen \teksthoogte
-% \ifgridsnapping
-% \getrawnoflines\scratchdimen
-% \scratchdimen\noflines\openlineheight
-% \ifdim\scratchdimen>\noflinesheight % available afterwards
-% \advance\scratchdimen-\openlineheight
-% \fi
-% \ifdim\scratchdimen<\zeropoint
-% \scratchdimen\zeropoint
-% \fi
-% \fi
-% \global\advance\vsize \scratchdimen
-% \relax \ifdim\pagegoal<\maxdimen
-% \advance\scratchdimen \pagegoal
-% \global\pagegoal\scratchdimen
-% \fi
-% \egroup
-% \fi}
-
-% \def\OTRONEsetvsize
-% {\ifgridsnapping
-% \ifcase\layoutlines
-% \getrawnoflines\teksthoogte
-% \else
-% \noflines\layoutlines
-% \fi
-% \global\vsize\noflines\openlineheight
-% \else
-% \global\vsize\teksthoogte
-% \fi
-% \ifdim\pagegoal<\maxdimen
-% \global\pagegoal\vsize
-% \fi}
-
\newdimen\oldvsize
\def\OTRONEsetvsize
@@ -231,28 +176,6 @@
\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
@@ -362,17 +285,6 @@
\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
@@ -423,57 +335,35 @@
\def\OTRONEflushfloatbox % nog verder doorvoeren en meer info in marge
{\ifcenterfloatbox \ifdim\wd\floatbox<\hsize
- \setbox\floatbox\hbox to \hsize{\hss\box\floatbox\hss}%
+ \global\setbox\floatbox\hbox to \hsize{\hss\box\floatbox\hss}%
\fi \fi
- \snaptogrid\hbox{\iftestfloatbox\ruledhbox\fi{\copy\floatbox}}}
+ \snaptogrid\hbox{\iftestfloatbox\ruledhbox\fi{\box\floatbox}}} % was copy
\def\OTRONEdodoflushfloats % much in common with OTRSET
{\ifsomefloatwaiting
\ifpackflushedfloats
- \centerfloatboxfalse
- \dogetfloat
- \ifdim\wd\floatbox>\makeupwidth
- \global\setbox\floatbox\hbox to \makeupwidth{\hss\box\floatbox\hss}%
- \fi
+ \centerfloatboxfalse % not needed as we do call directly
+ \dofloatscollect{text}{\hsize}{1em}%
\OTRONEsetvsize
- \!!widtha\wd\floatbox
- \dofloatflushedinfo
- \doloop
- {\ifsomefloatwaiting
- \dosavefloatstatus
- \dogetfloat
- \advance\!!widtha 1em % variable
- \advance\!!widtha \wd\floatbox\relax
- \ifdim\!!widtha>\hsize
- \dorestorefloatstatus
- \global\somefloatwaitingtrue
- \exitloop
- \else
- \global\setbox\floatbox\hbox
- {\ifcase\columndirection % nog document wide
- \ifvoid\savedfloatbox\else
- \ifhbox\savedfloatbox\unhbox\else\box\fi\savedfloatbox\hfil
- \fi
- \ifhbox\floatbox\unhbox\else\box\fi\floatbox
- \else
- \ifhbox\floatbox\unhbox\else\box\fi\floatbox
- \ifvoid\savedfloatbox\else
- \hfil\ifhbox\savedfloatbox\unhbox\else\box\fi\savedfloatbox
- \fi
- \fi}%
- \dofloatflushedinfo
- \fi
- \else
- \exitloop
- \fi}%
\global\setbox\floatbox\hbox to \hsize
- {\hfil\ifhbox\floatbox\unhbox\else\box\fi\floatbox\hfil}%
+ {\hfil
+ \dorecurse\nofcollectedfloats
+ {\ifcase\columndirection % nog document wide
+ \dofloatsflush{text}{1}%
+ \else
+ \dofloatsflushn{text}{\the\numexpr\nofcollectedfloats-\recurselevel+1\relax}%
+ \fi
+ \ifdim\wd\floatbox>\makeupwidth % \hsize
+ \hbox to \makeupwidth{\hss\box\floatbox\hss}%
+ \else
+ \box\floatbox
+ \fi
+ \ifnum\recurselevel<\nofcollectedfloats
+ \hfil
+ \fi}%
+ \hfil}%
\else
- %\bgroup % \box\floatbox can be in use!? messy
\dogetfloat
- %\doplacefloatbox
- %\egroup
- \dofloatflushedinfo
\fi
% there is a chance that due to rounding errors, the float
% fits on a page where it was first rejected, in which case
@@ -494,8 +384,7 @@
\fi
% should be an option
\endgroup
- \dimen0\dimexpr\pagetotal+\ht\floatbox+\dp\floatbox+\floattopskip-\pageshrink\relax
- %\message{c:\the\mofcolumns,t:\the\pagetotal,g:\the\pagegoal}%\wait
+ \dimen0\dimexpr\pagetotal+\floatheight+\floattopskip-\pageshrink\relax
\dimen2\pagegoal
\relax % needed
\ifcase\textfloatmethod
@@ -601,20 +490,9 @@
\doifinset\v!tall{#1}\flushsidefloatsafterpar
\fi}
-\def\OTRONEdosomepagefloat#1[#2]%
- {%\checkwaitingfloats{#1}%
- \global\setbox#1\vbox
- {\unvbox#1%
- \vbox to \textheight
- {\doifnotinset\v!high{#2}\vfill
- \box\floatbox
- \doifnotinset\v!low{#2}\vfill}%
- \goodbreak}%
- \doinsertfloatinfo}
-
-\def\OTRONEsomepagefloat {\OTRONEdosomepagefloat\collectedpagefloats}
-\def\OTRONEsomeleftpagefloat {\OTRONEdosomepagefloat\collectedleftpagefloats}
-\def\OTRONEsomerightpagefloat{\OTRONEdosomepagefloat\collectedrightpagefloats}
+\def\OTRONEsomepagefloat [#1]{\dofloatssavepagefloat{page} {#1}}
+\def\OTRONEsomeleftpagefloat [#1]{\dofloatssavepagefloat{leftpage} {#1}}
+\def\OTRONEsomerightpagefloat[#1]{\dofloatssavepagefloat{rightpage}{#1}}
\def\OTRONEsometopsfloat[#1]%
{\ifdim\topinserted=\zeropoint
@@ -622,7 +500,7 @@
\else
\topofinsertfalse
\fi
- \global\advance\topinserted \ht\floatbox+\dp\floatbox+\floatbottomskip\relax
+ \global\advance\topinserted\dimexpr\ht\floatbox+\dp\floatbox+\floatbottomskip\relax
\insert\topins
{\forgetall
\iftopofinsert
diff --git a/Master/texmf-dist/tex/context/base/page-par.mkiv b/Master/texmf-dist/tex/context/base/page-par.mkiv
index a5dea2e635d..fb8631eec83 100644
--- a/Master/texmf-dist/tex/context/base/page-par.mkiv
+++ b/Master/texmf-dist/tex/context/base/page-par.mkiv
@@ -17,7 +17,7 @@
\newcount\internalparagraphnumber
-\def\setupparagraphnumbering
+\unexpanded\def\setupparagraphnumbering
{\dosingleempty\dosetupparagraphnumbering}
\def\dosetupparagraphnumbering[#1]%
diff --git a/Master/texmf-dist/tex/context/base/page-plg.mkiv b/Master/texmf-dist/tex/context/base/page-plg.mkiv
index bbee2eb57ba..7d7612153d7 100644
--- a/Master/texmf-dist/tex/context/base/page-plg.mkiv
+++ b/Master/texmf-dist/tex/context/base/page-plg.mkiv
@@ -186,10 +186,10 @@
\setvalue{\??ly\c!method:\v!leftpage }{\getvalue{\??ly\c!method:\v!page}}
\setvalue{\??ly\c!method:\v!rightpage}{\getvalue{\??ly\c!method:\v!page}}
-% \long\def\startpagelayout[#1]#2\stoppagelayout
+% \long\unexpanded\def\startpagelayout[#1]#2\stoppagelayout
% {\long\setvalue{\??ly\c!method:#1}{#2}}
-\long\def\startpagelayout
+\long\unexpanded\def\startpagelayout
{\bgroup\catcode`\^^M=\@@ignore\dostartpagelayout}
\long\def\dostartpagelayout[#1]#2\stoppagelayout
diff --git a/Master/texmf-dist/tex/context/base/page-set.mkii b/Master/texmf-dist/tex/context/base/page-set.mkii
index b8a0751795c..eb01799ae8d 100644
--- a/Master/texmf-dist/tex/context/base/page-set.mkii
+++ b/Master/texmf-dist/tex/context/base/page-set.mkii
@@ -545,26 +545,9 @@
%\gdef\localcolumnmaxcells{0}% here ?
\global\mofcolumns\nofcolumns} % otherwise problems in finaloutput
-% \def\OTRSETdofinaloutput
-% {\ifdim\ht\OTRfinalpagebox=\teksthoogte
-% % \bgroup \let\OTRSETsetvsize\relax % prevents useless search for gap
-% \ifcase\OTRSETbalancemethod
-% \finaloutput\box\OTRfinalpagebox
-% \else\ifdim\OTRSETbalht>\zeropoint
-% \global\setbox\OTRfinalpagebox \iftracecolumnset\ruledvbox\else\vbox\fi to \OTRSETbalht
-% {\box\OTRfinalpagebox}%
-% \global\dp\OTRfinalpagebox\strutdepth
-% \box\OTRfinalpagebox
-% \else
-% \finaloutput\box\OTRfinalpagebox
-% \fi \fi
-% \globallet\OTRSETbalht\zeropoint
-% % \egroup
-% \fi}
-
\def\OTRSETdofinaloutput
{\ifdim\ht\OTRfinalpagebox=\textheight
- \bgroup % \let\OTRSETsetvsize\relax % prevents useless search for gap
+ \bgroup % \let\OTRSETsetvsize\relax % prevents useless search for gap
\ifcase\OTRSETbalancemethod
\finaloutput\box\OTRfinalpagebox
\else\ifdim\OTRSETbalht>\zeropoint
@@ -585,7 +568,7 @@
\finaloutput\box\OTRfinalpagebox
\fi \fi
\globallet\OTRSETbalht\zeropoint
- \egroup
+ \egroup
\fi}
\definesystemvariable {mc}
@@ -1784,66 +1767,6 @@
\def\localcolumnmaxcells{0}
-% currently line represents real line, i.e. on the grid, and
-% not something noflines (also, watch out for switching from
-% 2-3 columns on one page with both sets balanced: the
-% second set does not see the first set
-
-% \def\OTRSETinitbalancing
-% {\ifcase\OTRSETbalancemethod\or
-% \let\savedcolumnmaxcells\columnmaxcells
-% \ifnum\realpageno=\balancingpageno\relax
-% \ifnum\mofcolumns=\plusone
-% \dorecurse\nofcolumns
-% {\!!counta\recurselevel\relax
-% \!!countb\getvalue{\??mc\OTRSETidentifier\number\!!counta\c!regels}\relax
-% \ifcase\!!countb
-% \!!countb\getvalue{\??mc\OTRSETidentifier\c!regels}\relax
-% \fi
-% \ifcase\!!countb
-% \!!countb \savedcolumnmaxcells\relax
-% \fi
-% % can be an option: absolute versus relative
-% \ifnum\OTRSETbalancemethod=\plusthree
-% \advance\!!countb\precolumnlines
-% \ifnum\!!countb>\localcolumnmaxcells\relax
-% \xdef\localcolumnmaxcells{\the\!!countb}%
-% \fi
-% \advance\!!countb \plusone
-% \dostepwiserecurse\!!countb\columnmaxcells\plusone
-% {\ifvoid\OTRSETgridcell\!!counta\recurselevel
-% \OTRSETsetgridcell\!!counta\recurselevel\copy\placeholderboxe
-% \fi}%
-% \else
-% \globallet\localcolumnmaxcells\columnmaxcells
-% \advance\!!countb-\columnmaxcells
-% \!!countb-\!!countb
-% \advance\!!countb \minusone
-% \ifnum\!!countb>\zerocount
-% \dostepwiserecurse\plusone\!!countb\plusone
-% {\ifvoid\OTRSETgridcell\!!counta\recurselevel
-% \OTRSETsetgridcell\!!counta\recurselevel\copy\placeholderboxe
-% \fi}%
-% \fi
-% \fi}%
-% \OTRSETsetvsize % ! ! !
-% \fi
-% \fi
-% \fi}
-%
-% \def\OTRSETpresetbalancing
-% {\doifvaluesomething{\??mc\OTRSETidentifier\c!regels}%
-% {\getcommacommandsize[\csname\??mc\OTRSETidentifier\c!regels\endcsname]%
-% \ifnum\commalistsize>\plusone
-% \scratchcounter\zerocount
-% \def\docommand##1%
-% {\advance\scratchcounter\plusone
-% \setvalue{\??mc\OTRSETidentifier\the\scratchcounter\c!regels}{##1}}%
-% \processcommacommand
-% [\csname\??mc\OTRSETidentifier\c!regels\endcsname]\docommand
-% \setvalue{\??mc\OTRSETidentifier\c!regels}{0}%
-% \fi}}
-
% don't loose empty 1page/1column with area (example **)
%
% \definecolumntextarea[title][x=1,y=4,nx=2,ny=7,state=start]
@@ -1859,32 +1782,6 @@
\def\setupcolumnsetarea {\setupcolumntextarea}
\def\setupcolumnsetareatext{\setupcolumntextareatext}
-% so this will be changed
-
-% \def\OTRSETnobalance
-% {\iflastcolumnfootnotes % testen ! optie
-% % inhibit flush of floats !
-% % todo: nothing if no footnotes, else empty page
-% \dostepwiserecurse\mofcolumns\nofcolumns\plusone
-% {\vskip-\struttotal\verticalstrut\vfill\eject}%
-% \else
-% \ifdim\pagetotal>\zeropoint % no, see example **
-% \ifnum\mofcolumns=\nofcolumns
-% \OTRSETflushfinalfootnotes
-% \else
-% % probably todo
-% \fi
-% \vfill
-% \eject
-% % brr, may result in empty page after nicely fit text
-% % or if left, then lost of first column only text
-% \ifnum\mofcolumns>1
-% \OTRSETdofinalflush
-% \OTRSETdofinaloutput
-% \fi
-% \fi
-% \fi}
-
\def\OTRSETnobalance
{\iflastcolumnfootnotes % testen ! optie
% inhibit flush of floats !
@@ -2037,31 +1934,12 @@
% test:
%
-% \definecolumnset[two] [n=2,balance=yes]
-% \definecolumnset[three][n=3,balance=yes]
-% \setupcolumnset [two] [1] [lines=10]
-% \setupcolumnset [two] [2] [lines=10]
-%
-% \startcolumnset[two] \dorecurse{14}{\input tufte \par} \stopcolumnset
-% \startcolumnset[three] \dorecurse{12}{\input tufte \par} \stopcolumnset
-%
-% with:
-%
-% \installoutput\OTRSETflushpreposttext
-% {%\ifvoid\normalpagebox
-% % \global\setbox\precolumnbox\vbox{}%
-% %\else
-% \global\setbox\precolumnbox\vbox
-% {\unvcopy\normalpagebox}%
-% \global\setbox\precolumnbox\vbox to \ht\precolumnbox
-% {\box\normalpagebox}%
-% %\fi
-% \global\dp\precolumnbox\strutdepth
-% \ifcarryoverfootnotes \else
-% \global\setbox\postcolumnbox\vbox{\placebottomnotes}%
-% \fi}
-
-% testcase : pascal demo-bbi, paragraaf/aanduiding koppen
+% \setupcolumnset [test-1] [balance=yes]
+% \setupcolumnset [test-2] [balance=yes]
+% \setupcolumnsetlines[test-1][1][1] [8]
+% \setupcolumnsetlines[test-1][1][2][10]
+% \startcolumnset [test-1] \dorecurse {1}{\input tufte \par} \stopcolumnset
+% \startcolumnset [test-2] \dorecurse {2}{\input ward \par} \stopcolumnset
\ifx\lastskipinotr\undefined \newskip\lastskipinotr \fi
@@ -2081,30 +1959,6 @@
\let\precolumnlines \!!zerocount
\let\postcolumnlines\!!zerocount
-% \def\OTRSEThandlepreposttext
-% {\ifdim\ht\precolumnbox>\zeropoint % new
-% \getnoflines{\ht\precolumnbox}%
-% \edef\precolumnlines{\the\noflines}%
-% \doOTRSETsetgridcells
-% {\copy\placeholderboxe}
-% \plusone\plusone\nofcolumns\noflines
-% {\box\precolumnbox}%
-% \else
-% \let\precolumnlines\!!zerocount
-% \fi
-% \ifdim\ht\postcolumnbox>\zeropoint % new, otherwise empty bottom line
-% \getnoflines{\ht\postcolumnbox}%
-% \edef\postcolumnlines{\the\noflines}%
-% \advance\columnfreecells -\noflines
-% \advance\columnfreecells \plusone
-% \doOTRSETsetgridcells
-% {\copy\placeholderboxe}
-% \plusone\columnfreecells\nofcolumns\noflines
-% {\box\postcolumnbox}%
-% \else
-% \let\postcolumnlines\!!zerocount
-% \fi}
-
\def\OTRSEThandlepreposttext
{\ifdim\ht\precolumnbox>\zeropoint % new
\getnoflines{\ht\precolumnbox}%
@@ -2423,6 +2277,7 @@
\v!right=>\doglobal\addtocommalist{#1}\columnrightareas]%
\getparameters[\??mt#1#2]
[\c!x=1,\c!y=1,\c!nx=1,\c!ny=1,\c!clipoffset=2\lineheight,
+ \c!leftoffset=\zeropoint,\c!rightoffset=\zeropoint,
\c!offset=\v!overlay,\c!strut=\v!no,\c!frame=\v!off,
\c!type=#2,\c!page=1,\c!state=\v!stop,#3]}}%
\else
@@ -2573,7 +2428,8 @@
%\c!bottomoffset=\columntextareaparameter\c!clipoffset,%
%\c!leftoffset=\columntextareaparameter\c!clipoffset,%
\c!offset=\columntextareaparameter\c!clipoffset,%
- \c!rightoffset=\zeropoint,%
+ \c!offset=\columntextareaparameter\c!clipoffset,%
+ \c!rightoffset=\columntextareaparameter\c!rightoffset,%
\c!width=\!!widthb,%
\c!height=\!!heighta]%
{\copy\scratchbox}%
@@ -2590,7 +2446,8 @@
%\c!bottomoffset=\columntextareaparameter\c!clipoffset,%
%\c!rightoffset=\columntextareaparameter\c!clipoffset,%
\c!offset=\columntextareaparameter\c!clipoffset,%
- \c!leftoffset=\zeropoint,%
+ \c!offset=\columntextareaparameter\c!clipoffset,%
+ \c!leftoffset=\columntextareaparameter\c!leftoffset,%
\c!width=\!!widtha,%
\c!height=\!!heighta,%
\c!hoffset=\!!widthb]%
@@ -2798,206 +2655,6 @@
% \startcolumnsetspan[two] \input tufte \stopcolumnsetspan
% \stopcolumnset
-% We need to set the \dimen globally since we are in the
-% OTR. Unfortunately this interferes with local settings,
-% although we may assume that they will not cross page
-% boundaries.
-
-\def\OTRSETcheckcontent
- {\bgroup
- \donefalse
- \def\OTRSETcheckcontent##1%
- {\setbox\scratchbox##1\recurselevel
- \setbox\scratchbox\vbox{\unvbox\scratchbox}%
- \ifdim\ht\scratchbox>\zeropoint\donetrue\fi}%
- \dorecurse{\nofcolumns}
- {\OTRSETcheckcontent\columngettextbox
- \OTRSETcheckcontent\columngetfootbox
- \OTRSETcheckcontent\columngettopbox
- \OTRSETcheckcontent\columngetbotbox}%
- \ifdone\egroup\donefalse\else\egroup\donetrue\fi}
-
-\def\OTRSETgetcolumntextheight#1% max - boven - top
- {\scratchdimen=\OTRSETgetparameter\c!maxhoogte#1%
- \advance\scratchdimen -\OTRSETgetparameter\c!bovenoffset#1%
- \advance\scratchdimen -\ht\columntopbox#1%
- \advance\scratchdimen -\getvalue{\??mc\number\mofcolumns-f}%
- \advance\scratchdimen -\ht\columnbotbox#1} % not used
-
-\def\OTRSETgetcolumnnaturalheight#1% max - boven - top
- {\setbox\scratchbox\vbox{\unvcopy\columntextbox#1}%
- \scratchdimen\ht\scratchbox
- \advance\scratchdimen \OTRSETgetparameter\c!bovenoffset#1%
- \advance\scratchdimen \ht\columntopbox#1%
- \advance\scratchdimen -\getvalue{\??mc\number\mofcolumns-f}%
- \advance\scratchdimen \ht\columnbotbox#1} % not used
-
-\def\OTRSETdobalance% splitten in met en zonder footnotes
- {\bgroup
- \maxdeadcycles=1000
- % collect content and notes
- \bgroup
- \OTRSEToutput
- {\global\setbox1\vbox{\unvbox\normalpagebox}%
- \global\setbox3\vbox{\unvbox\footins}}%
- \verticalstrut\vskip-\struttotal % makes footnotes flush
- \eject
- \global\collectingcontentfalse
- % check for footnotes only
- \ifdim\ht1<\topskip % real dirty
- \global\setbox1=\vbox{}
- % fix height of first line
- \ifdim\ht3>\!!zeropoint
- \global\setbox3\vbox
- {\setfootnotebodyfont
- \kern-\strutht
- \kern\topskip
- \unvbox3}
- \fi
- % prepare trial box
- \global\setbox5\vbox
- {\ifdim\ht1>\zeropoint
- \unvcopy1 \ifdim\ht3>\zeropoint \kern\skip\footins \fi
- \fi
- \ifdim\ht3>\zeropoint \unvcopy3 \fi}
- \egroup
- % erase old stuff
- \columnerasetextboxes
- \columnerasefootboxes
- % prepare floats
- \OTRSETdotopinsertions
- \OTRSETdobotinsertions % not used can be removed
- % calculate available space
- \!!heighta\zeropoint % available total height
- \dorecurse{\nofcolumns}
- {\OTRSETgetcolumntextheight\recurselevel
- \OTRSETcalculatelines\scratchdimen
- \advance\!!heighta \scratchdimen}
- % quick check
- \ifdim\ht5>\!!heighta
- % use normal routine
- \columnerasetextboxes
- \columnerasefootboxes
- % TEMP, TODO, FORCE NEXT PASS !
- \unvbox1
- \unvbox3
- \doglobal\addtocommalist{-\realfolio}\OTRSETbalancinglist
- \donefalse
- %\writestatus\m!columns{no balancing, text overflows height}%
- \else\ifdim\ht5>\zeropoint \relax
- % some text and/or notes
- \donetrue
- \else
- \donefalse
- \dorecurse\nofcolumns
- {\ifdim\ht\columntopbox\recurselevel>\zeropoint \donetrue \fi}%
- \ifdone
- % no text and notes, but figures
- \else
- % no text, no notes, no figures
- \doglobal\addtocommalist{-\realfolio}\OTRSETbalancinglist
- \writestatus\m!columns{no balancing, nothing to be placed}%
- \fi
- \fi\fi
- \ifdone
- \ifdim\ht5>\zeropoint \relax
- % balancing text and notes
- %\writestatus\m!columns{text may fit, balancing}%
- \newcounter\loopcounter
- \newcounter\balancinglines
- \doloop
- {\increment\loopcounter\relax
- % initialize
- \columnerasetextboxes
- \columnerasefootboxes
- \setbox0=\copy5
- \splittopskip\topskip
- % pre-split loop and quality calculation
- %\writestatus\m!columns{pass \loopcounter: correction -\balancinglines}
- \dorecurse\nofcolumns
- {\OTRSETgetcolumntextheight\recurselevel
- \OTRSETcalculatelines\scratchdimen
- \!!heightc\scratchdimen
- \ifnum\recurselevel<\nofcolumns
- \advance\!!heightc -\balancinglines\lineheight
- \fi
- \columnsettextbox\recurselevel\vsplit0 to \!!heightc}
- % just one method
- \OTRSETgetcolumnnaturalheight1 \dimen4\scratchdimen
- \OTRSETgetcolumnnaturalheight\nofcolumns \dimen6\scratchdimen
- %\writestatus\m!columns{first column: \the\dimen4}%
- %\writestatus\m!columns{last column: \the\dimen6}%
- \ifdim\dimen4=\dimen6
- \donetrue % perfect balance
- \else\ifdim\dimen4>\dimen6
- \donefalse % not yet good enough
- \increment\balancinglines % try again
- \edef\balancingcount{\the\!!counta}
- \else
- \donetrue % worse balance
- \ifnum\balancinglines>0 % take previous
- \decrement\balancinglines
- \fi
- \fi\fi
- % extra check
- % \ifdim\ht0>\zeropoint\relax \donefalse \fi
- % another check
- \ifdone
- %\writestatus\m!columns{balancing finished in pass \loopcounter}%
- \else \ifnum\loopcounter>100 \donetrue
- %\writestatus\m!columns{balancing aborted after pass \loopcounter}%
- \else
- %\writestatus\m!columns{balancing continued after pass \loopcounter}%
- \fi \fi
- % final balancing pass
- \ifdone
- \setbox0\copy1
- \setbox2\copy3
- \columnerasetextboxes
- \columnerasefootboxes
- \dorecurse\nofcolumns
- {\OTRSETgetcolumntextheight\recurselevel
- \OTRSETcalculatelines\scratchdimen
- \!!heightc\scratchdimen
- \ifnum\recurselevel<\nofcolumns
- \advance\!!heightc -\balancinglines\lineheight
- \fi
- % split off text
- \ifdim\ht0>\zeropoint
- \columnsettextbox\recurselevel\vsplit0 to \!!heightc
- \setbox4\vbox{\unvcopy\columntextbox\recurselevel}
- \advance\!!heightc -\ht4
- \ifdim\ht0>\zeropoint
- \columnsettextbox\recurselevel\box4
- \advance\!!heightc \skip\footins
- \fi
- \fi
- % split off footnotes
- \ifdim\ht0>\zeropoint\relax \else
- \ifdim\ht2>\zeropoint\relax
- \setbox4\vsplit2 to \!!heightc
- \setbox\footins=\vbox{\unvbox4} % ugly and dirty trick
- \ifdim\ht\columntextbox\recurselevel=\zeropoint\relax
- \columnsettextbox\recurselevel\hbox
- {\raise\strutdp\hbox % ugly but needed
- {\setfootnotebodyfont % both these moves
- \lower\strutdp\hbox{\placebottomnotes}}}
- \else
- \columnsetfootbox\recurselevel\hbox{\placebottomnotes}
- \fi
- \fi
- \fi}
- \exitloop
- \fi}
- \else
- % no reason to balance floats
- \fi
- \fi
- \doglobal\addtocommalist{\realfolio}\OTRSETbalancinglist
- \OTRSETdoflush
- \fi
- \egroup}
-
\protect \endinput
% extreme examples (1)
diff --git a/Master/texmf-dist/tex/context/base/page-set.mkiv b/Master/texmf-dist/tex/context/base/page-set.mkiv
index 8dc8a2fd9f0..cc6fbb5e6d9 100644
--- a/Master/texmf-dist/tex/context/base/page-set.mkiv
+++ b/Master/texmf-dist/tex/context/base/page-set.mkiv
@@ -268,8 +268,8 @@
\def\OTRSETerasegridcells#1#2#3#4%
{\doOTRSETsetgridcells{\emptybox}{#1}{#2}{#3}{#4}{\emptybox}}
-\def\setupcolumnsetlines{\doquintupleempty\dosetupcolumnsettrick[l]}
-\def\setupcolumnsetstart{\doquintupleempty\dosetupcolumnsettrick[s]}
+\unexpanded\def\setupcolumnsetlines{\doquintupleempty\dosetupcolumnsettrick[l]}
+\unexpanded\def\setupcolumnsetstart{\doquintupleempty\dosetupcolumnsettrick[s]}
\def\dosetupcolumnsettrick[#1][#2][#3][#4][#5]% tag id page col value
{% not needed, is already relative
@@ -423,7 +423,7 @@
\localcolumnwidth\OTRSETlocalwidth\mofcolumns
\offinterlineskip
\setbox\scratchbox\vbox to \!!heighta
- {\topskipcorrection % not needed
+ {%\topskipcorrection % not needed
\ifcase\OTRSETbalancemethod
% no
\or
@@ -541,23 +541,6 @@
%\gdef\localcolumnmaxcells{0}% here ?
\global\mofcolumns\nofcolumns} % otherwise problems in finaloutput
-% \def\OTRSETdofinaloutput
-% {\ifdim\ht\OTRfinalpagebox=\teksthoogte
-% % \bgroup \let\OTRSETsetvsize\relax % prevents useless search for gap
-% \ifcase\OTRSETbalancemethod
-% \finaloutput\box\OTRfinalpagebox
-% \else\ifdim\OTRSETbalht>\zeropoint
-% \global\setbox\OTRfinalpagebox \iftracecolumnset\ruledvbox\else\vbox\fi to \OTRSETbalht
-% {\box\OTRfinalpagebox}%
-% \global\dp\OTRfinalpagebox\strutdepth
-% \box\OTRfinalpagebox
-% \else
-% \finaloutput\box\OTRfinalpagebox
-% \fi \fi
-% \globallet\OTRSETbalht\zeropoint
-% % \egroup
-% \fi}
-
\def\OTRSETdofinaloutput
{\ifdim\ht\OTRfinalpagebox=\textheight
\bgroup % \let\OTRSETsetvsize\relax % prevents useless search for gap
@@ -923,36 +906,6 @@
\appendtoks
\OTRSETfillgapsbetweencells\mofcolumns\plusone
\to \OTRSETeverystartofcolumn
-
-%\def\OTRSETfreezeminimumgap#1%
-% {\OTRSETgetmaxfreecells{#1}{1}%
-% \ifnum\columnmaxfreecells>0
-% \!!countb=\columnfrmfreecells
-% \!!counta=\!!counta \advance\!!counta -\columnmaxfreecells
-% \dorecurse{\columnmaxcells}
-% {\ifnum\recurselevel<\!!counta\relax
-% \donetrue
-% \else\ifnum\recurselevel>\!!countb
-% \donetrue
-% \else
-% \donefalse
-% \fi\fi
-% \ifdone
-% \OTRSETdoifcellelse{#1}{\recurselevel}
-% {}{\OTRSETsetgridcell{#1}\recurselevel\copy\placeholderboxc}%
-% \fi}%
-% \fi}
-%
-%\def\OTRSETfillgaps#1#2#3% col from to
-% {\dostepwiserecurse{#2}{#3}{1}
-% {\OTRSETdoifcellelse{#1}{\recurselevel}
-% {}{\OTRSETsetgridcell{#1}\recurselevel\copy\placeholderboxc}}}
-%
-%\def\OTRSETfillbotgaps#1#2% col first
-% {\OTRSETfillgaps{#1}{#2}{\columnmaxcells}}
-%
-%\def\OTRSETfilltopgaps#1#2% col last
-% {\OTRSETfillgaps{#1}{1}{#2}}
\newif\ifspancolumnslots \spancolumnslotstrue
\newif\ifcheckcolumnspan \checkcolumnspantrue
@@ -1195,15 +1148,6 @@
\pofcolumns \pofcolumns +\currenthcell
\columnmaxcells\preferedrow-\currentvcell{#1}}
-% \def\OTRSETstoreincolumnslotHERE#1% fixed column
-% {\OTRSETprepareforcolumnslot2{#1}%
-% \OTRSETflushtextsofar
-% \getnoflines\pagetotal \advance\noflines\columnfirstcell
-% \OTRSETstoreincolumnslotindeed
-% \mofcolumns\mofcolumns+\currenthcell
-% \noflines\columnmaxcells+\currentvcell{#1}%
-% \OTRSETsetvsize}
-
\chardef\OTRSETforcefixedfloats=0
\def\OTRSETstoreincolumnslotHERE#1% fixed column
@@ -1354,15 +1298,6 @@
\def\OTRSETstoreincolumnslotUNKNOWN#1%
{\OTRSETprepareforcolumnslot2{#1}\copy#1} % {} ?
-% \def\OTRSETprepareforcolumnslot#1#2% 1=hoog 2=midden 3=laag
-% {\dp#2\zeropoint
-% \ifcase\columnslotspacing\else
-% \scratchdimen\columnslotspacing\lineheight
-% \ifnum#1=2 \scratchdimen2\scratchdimen \fi
-% \setbox#2\vbox spread \scratchdimen
-% {\ifnum#1>1\vss\fi\box#2\relax\ifnum#1<3\vss\fi}%
-% \fi}
-
\def\OTRSETprepareforcolumnslot#1#2% 1=hoog 2=midden 3=laag
{\dp#2\zeropoint
\ifcase\columnslotspacing\else
@@ -1394,13 +1329,15 @@
\global\setbox\floatbox\lastbox}%
\fi}
+% for the moment resave is still needed here
+
\def\OTRSETsavebox#1% clean up the skips
{\OTRSETunpreparebox{#1}%
- \dosavefloat}
+ \dofloatssave{text}}
\def\OTRSETresavebox#1% clean up the skips
{\OTRSETunpreparebox{#1}%
- \doresavefloat}
+ \dofloatsresave{text}}
\def\OTRSETflushfloatbox % nog verder doorvoeren en meer info in marge
{\iftestfloatbox\ruledhbox\fi{\box\floatbox}}
@@ -1410,10 +1347,11 @@
\def\OTRSETsavebox##1{\!!doneafalse}%
\doloop
{\ifsomefloatwaiting
-\OTRSETskipstart
- \dogetfloat
- \ifdim\wd\floatbox>\zeropoint
+ \OTRSETskipstart
+ \dofloatsgetinfo{text}%
+ \ifdim\floatwidth>\zeropoint
\!!doneatrue
+ \dofloatsflush{text}{1}%
\dp\floatbox\zeropoint
\OTRSETstoreincolumnslot{TBLR}\floatbox
\if!!donea
@@ -1525,7 +1463,7 @@
% vanaf hier:
-\def\definecolumnset
+\unexpanded\def\definecolumnset
{\dodoubleargument\dodefinecolumnset}
\def\dodefinecolumnset[#1][#2]%
@@ -1559,7 +1497,7 @@
\c!width=\getvalue{\??mc#1\c!width},
\c!distance=\getvalue{\??mc#1\c!distance}]}
-\def\setupcolumnset
+\unexpanded\def\setupcolumnset
{\dotripleargument\dosetupcolumnset}
\def\dosetupcolumnset[#1][#2][#3]%
@@ -1688,7 +1626,7 @@
\let\currentcolumnset\empty
\chardef\OTRSETfinish\zerocount
-\def\startcolumnset
+\unexpanded\def\startcolumnset
{\dodoubleempty\dostartcolumnset}
\def\dostartcolumnset[#1][#2]%
@@ -1724,7 +1662,6 @@
% \input knuth \endgraf \input knuth
% \stoptext
-
\def\OTRSETflushleftovers % new per 13/4/2006
{\OTRSETdoifcellelse{1}{1}
{\bgroup
@@ -1738,7 +1675,7 @@
\egroup}
{}}
-\def\stopcolumnset
+\unexpanded\def\stopcolumnset
{\relax
\ifnum\columnsetlevel=\plusone
\endgraf % needed, else wrong vsize in one par case
@@ -1785,61 +1722,6 @@
% 2-3 columns on one page with both sets balanced: the
% second set does not see the first set
-% \def\OTRSETinitbalancing
-% {\ifcase\OTRSETbalancemethod\or
-% \let\savedcolumnmaxcells\columnmaxcells
-% \ifnum\realpageno=\balancingpageno\relax
-% \ifnum\mofcolumns=\plusone
-% \dorecurse\nofcolumns
-% {\!!counta\recurselevel\relax
-% \!!countb\getvalue{\??mc\OTRSETidentifier\number\!!counta\c!regels}\relax
-% \ifcase\!!countb
-% \!!countb\getvalue{\??mc\OTRSETidentifier\c!regels}\relax
-% \fi
-% \ifcase\!!countb
-% \!!countb \savedcolumnmaxcells\relax
-% \fi
-% % can be an option: absolute versus relative
-% \ifnum\OTRSETbalancemethod=\plusthree
-% \advance\!!countb\precolumnlines
-% \ifnum\!!countb>\localcolumnmaxcells\relax
-% \xdef\localcolumnmaxcells{\the\!!countb}%
-% \fi
-% \advance\!!countb \plusone
-% \dostepwiserecurse\!!countb\columnmaxcells\plusone
-% {\ifvoid\OTRSETgridcell\!!counta\recurselevel
-% \OTRSETsetgridcell\!!counta\recurselevel\copy\placeholderboxe
-% \fi}%
-% \else
-% \globallet\localcolumnmaxcells\columnmaxcells
-% \advance\!!countb-\columnmaxcells
-% \!!countb-\!!countb
-% \advance\!!countb \minusone
-% \ifnum\!!countb>\zerocount
-% \dostepwiserecurse\plusone\!!countb\plusone
-% {\ifvoid\OTRSETgridcell\!!counta\recurselevel
-% \OTRSETsetgridcell\!!counta\recurselevel\copy\placeholderboxe
-% \fi}%
-% \fi
-% \fi}%
-% \OTRSETsetvsize % ! ! !
-% \fi
-% \fi
-% \fi}
-%
-% \def\OTRSETpresetbalancing
-% {\doifvaluesomething{\??mc\OTRSETidentifier\c!regels}%
-% {\getcommacommandsize[\csname\??mc\OTRSETidentifier\c!regels\endcsname]%
-% \ifnum\commalistsize>\plusone
-% \scratchcounter\zerocount
-% \def\docommand##1%
-% {\advance\scratchcounter\plusone
-% \setvalue{\??mc\OTRSETidentifier\the\scratchcounter\c!regels}{##1}}%
-% \processcommacommand
-% [\csname\??mc\OTRSETidentifier\c!regels\endcsname]\docommand
-% \setvalue{\??mc\OTRSETidentifier\c!regels}{0}%
-% \fi}}
-
% don't loose empty 1page/1column with area (example **)
%
% \definecolumntextarea[title][x=1,y=4,nx=2,ny=7,state=start]
@@ -1851,36 +1733,12 @@
% better:
-\def\definecolumnsetarea {\definecolumntextarea}
-\def\setupcolumnsetarea {\setupcolumntextarea}
-\def\setupcolumnsetareatext{\setupcolumntextareatext}
+\unexpanded\def\definecolumnsetarea {\definecolumntextarea}
+\unexpanded\def\setupcolumnsetarea {\setupcolumntextarea}
+\unexpanded\def\setupcolumnsetareatext{\setupcolumntextareatext}
% so this will be changed
-% \def\OTRSETnobalance
-% {\iflastcolumnfootnotes % testen ! optie
-% % inhibit flush of floats !
-% % todo: nothing if no footnotes, else empty page
-% \dostepwiserecurse\mofcolumns\nofcolumns\plusone
-% {\vskip-\struttotal\verticalstrut\vfill\eject}%
-% \else
-% \ifdim\pagetotal>\zeropoint % no, see example **
-% \ifnum\mofcolumns=\nofcolumns
-% \OTRSETflushfinalfootnotes
-% \else
-% % probably todo
-% \fi
-% \vfill
-% \eject
-% % brr, may result in empty page after nicely fit text
-% % or if left, then lost of first column only text
-% \ifnum\mofcolumns>1
-% \OTRSETdofinalflush
-% \OTRSETdofinaloutput
-% \fi
-% \fi
-% \fi}
-
\def\OTRSETnobalance
{\iflastcolumnfootnotes % testen ! optie
% inhibit flush of floats !
@@ -1937,17 +1795,6 @@
\OTRSETcheckstartcells
\OTRSETsetvsize}
-% \def\OTRSETcheckstartcells
-% {\dorecurse\nofcolumns
-% {\bgroup
-% \mofcolumns\recurselevel
-% \scratchcounter\currentcolumnstartcell % uses \mofcolumns, returns 1 or more
-% \advance\scratchcounter \minusone
-% \dorecurse\scratchcounter
-% {\OTRSETdoifcellelse\mofcolumns\recurselevel
-% \donothing{\OTRSETsetgridcell\mofcolumns\recurselevel\copy\placeholderboxe}}%
-% \egroup}}
-
\def\OTRSETcheckstartcells
{\dorecurse\nofcolumns
{\bgroup
@@ -1959,14 +1806,6 @@
\donothing{\OTRSETsetgridcell\mofcolumns\recurselevel\copy\placeholderboxe}}%
\egroup}}
-% \OTRSEToutput
-% {\dontcomplain % new, get rid of overfull message (to be sorted out)
-% \OTRSETnaturalflush
-% %\OTRSETstartnextpage
-% \OTRSETdoflushfloats % actually belongs in \flushsavedfloats (but goes wrong)
-% \OTRSETcheckfreelines
-% \OTRSETchecksidefloat}
-
\OTRSEToutput
{\dontcomplain % new, get rid of overfull message (to be sorted out)
\doloop
@@ -1997,67 +1836,16 @@
\v!top=>\chardef\OTRSETbalancemethod\plustwo,
\v!bottom=>\chardef\OTRSETbalancemethod\plusthree]}
-% keep 'm for a while
-%
-% \installoutput\OTRSETflushpreposttext
-% {\global\setbox\precolumnbox\vbox{\unvbox\normalpagebox}%
-% \ifcarryoverfootnotes \else
-% \global\setbox\postcolumnbox\vbox{\placebottomnotes}%
-% \fi}
-%
-% to be tested on 'boekinhoud' in 'pascal/demo-bbi'
-%
-% junk ! ! ! ! !
-%
-%\installoutput\OTRSETflushpreposttext
-% {\global\setbox\precolumnbox\vbox
-% {\unvbox\normalpagebox
-% \strut\vskip-2\lineheight\strut}% we want a proper depth
-% \ifcarryoverfootnotes \else
-% \global\setbox\postcolumnbox\vbox{\placebottomnotes}%
-% \fi}
-%
-% \starttext
-% \definecolumnset[two][n=2]
-% \startcolumnset[two] \dorecurse{4}{\input tufte } \stopcolumnset
-% \input tufte
-% \startcolumnset[two] \input tufte \stopcolumnset
-% \stoptext
-%
-% \installoutput\OTRSETflushpreposttext
-% {\global\setbox\precolumnbox\vbox{\unvbox\normalpagebox}%
-% \global\dp\precolumnbox\strutdepth
-% \ifcarryoverfootnotes \else
-% \global\setbox\postcolumnbox\vbox{\placebottomnotes}%
-% \fi}
-
% test:
%
-% \definecolumnset[two] [n=2,balance=yes]
-% \definecolumnset[three][n=3,balance=yes]
-% \setupcolumnset [two] [1] [lines=10]
-% \setupcolumnset [two] [2] [lines=10]
+% \definecolumnset[test-1] %[balance=yes]
+% \definecolumnset[test-2] %[balance=yes]
%
-% \startcolumnset[two] \dorecurse{14}{\input tufte \par} \stopcolumnset
-% \startcolumnset[three] \dorecurse{12}{\input tufte \par} \stopcolumnset
+% \setupcolumnsetlines[test-1][1][1] [4]
+% \setupcolumnsetlines[test-1][1][2][10]
%
-% with:
-%
-% \installoutput\OTRSETflushpreposttext
-% {%\ifvoid\normalpagebox
-% % \global\setbox\precolumnbox\vbox{}%
-% %\else
-% \global\setbox\precolumnbox\vbox
-% {\unvcopy\normalpagebox}%
-% \global\setbox\precolumnbox\vbox to \ht\precolumnbox
-% {\box\normalpagebox}%
-% %\fi
-% \global\dp\precolumnbox\strutdepth
-% \ifcarryoverfootnotes \else
-% \global\setbox\postcolumnbox\vbox{\placebottomnotes}%
-% \fi}
-
-% testcase : pascal demo-bbi, paragraaf/aanduiding koppen
+% \startcolumnset [test-1] \dorecurse {1}{\input tufte \par} \stopcolumnset
+% \startcolumnset [test-2] \dorecurse {2}{\input ward \par} \stopcolumnset
\ifx\lastskipinotr\undefined \newskip\lastskipinotr \fi
@@ -2077,30 +1865,6 @@
\let\precolumnlines \!!zerocount
\let\postcolumnlines\!!zerocount
-% \def\OTRSEThandlepreposttext
-% {\ifdim\ht\precolumnbox>\zeropoint % new
-% \getnoflines{\ht\precolumnbox}%
-% \edef\precolumnlines{\the\noflines}%
-% \doOTRSETsetgridcells
-% {\copy\placeholderboxe}
-% \plusone\plusone\nofcolumns\noflines
-% {\box\precolumnbox}%
-% \else
-% \let\precolumnlines\!!zerocount
-% \fi
-% \ifdim\ht\postcolumnbox>\zeropoint % new, otherwise empty bottom line
-% \getnoflines{\ht\postcolumnbox}%
-% \edef\postcolumnlines{\the\noflines}%
-% \advance\columnfreecells -\noflines
-% \advance\columnfreecells \plusone
-% \doOTRSETsetgridcells
-% {\copy\placeholderboxe}
-% \plusone\columnfreecells\nofcolumns\noflines
-% {\box\postcolumnbox}%
-% \else
-% \let\postcolumnlines\!!zerocount
-% \fi}
-
\def\OTRSEThandlepreposttext
{\ifdim\ht\precolumnbox>\zeropoint % new
\getnoflines{\ht\precolumnbox}%
@@ -2403,7 +2167,7 @@
% links rechts => odd, even, n, named
-\def\definecolumntextarea
+\unexpanded\def\definecolumntextarea
{\dotripleempty\dodefinecolumntextarea}
\def\dodefinecolumntextarea[#1][#2][#3]% y=0 is mogelijke en handig !
@@ -2422,13 +2186,14 @@
\v!right=>\doglobal\addtocommalist{#1}\columnrightareas]%
\getparameters[\??mt#1#2]
[\c!x=1,\c!y=1,\c!nx=1,\c!ny=1,\c!clipoffset=2\lineheight,
+ \c!leftoffset=\zeropoint,\c!rightoffset=\zeropoint,
\c!offset=\v!overlay,\c!strut=\v!no,\c!frame=\v!off,
\c!type=#2,\c!page=1,\c!state=\v!stop,#3]}}%
\else
\definecolumntextarea[#1][\v!next][#2]%
\fi}
-\def\setupcolumntextarea
+\unexpanded\def\setupcolumntextarea
{\dotripleempty\dosetupcolumntextarea}
\def\dosetupcolumntextarea[#1][#2][#3]%
@@ -2486,7 +2251,7 @@
{\getvalue{\??mt#1#2\c!nx}}{\getvalue{\??mt#1#2\c!ny}}
{\copy\placeholderboxd}}
-\def\placecolumntextareas
+\unexpanded\def\placecolumntextareas
{\ifodd\realpageno
\doplacecolumntextareas\columnrightareas\v!right
\else
@@ -2572,7 +2337,8 @@
%\c!bottomoffset=\columntextareaparameter\c!clipoffset,%
%\c!leftoffset=\columntextareaparameter\c!clipoffset,%
\c!offset=\columntextareaparameter\c!clipoffset,%
- \c!rightoffset=\zeropoint,%
+ \c!offset=\columntextareaparameter\c!clipoffset,%
+ \c!rightoffset=\columntextareaparameter\c!rightoffset,%
\c!width=\!!widthb,%
\c!height=\!!heighta]%
{\copy\scratchbox}%
@@ -2589,7 +2355,7 @@
%\c!bottomoffset=\columntextareaparameter\c!clipoffset,%
%\c!rightoffset=\columntextareaparameter\c!clipoffset,%
\c!offset=\columntextareaparameter\c!clipoffset,%
- \c!leftoffset=\zeropoint,%
+ \c!leftoffset=\columntextareaparameter\c!leftoffset,%
\c!width=\!!widtha,%
\c!height=\!!heighta,%
\c!hoffset=\!!widthb]%
@@ -2597,7 +2363,7 @@
\OTRSETsetgridcell\!!counta\!!countb\box0%
\fi}
-\def\setupcolumntextareatext
+\unexpanded\def\setupcolumntextareatext
{\dotripleempty\dosetupcolumntextareatext}
\long\def\dosetupcolumntextareatext[#1][#2][#3]%
@@ -2652,7 +2418,7 @@
{\!!counta#1\!!countb#2\docalculatecolumnsetspan
\edef\columnsetspanhsize{\the\!!widtha}}
-\def\definecolumnsetspan
+\unexpanded\def\definecolumnsetspan
{\dodoubleempty\dodefinecolumnsetspan}
\def\dodefinecolumnsetspan[#1][#2]%
@@ -2679,7 +2445,7 @@
\definecolumnsetspan[\s!default]
-\def\setupcolumnsetspan
+\unexpanded\def\setupcolumnsetspan
{\dodoubleempty\dosetupcolumnsetspan}
\def\dosetupcolumnsetspan[#1][#2]%
@@ -2689,7 +2455,7 @@
\setupcolumnsetspan[\s!default][#1]%
\fi}
-\def\startcolumnsetspan
+\unexpanded\def\startcolumnsetspan
{\dotripleempty\dostartcolumnsetspan}
%%%%%%%%%%%%%%%% TODO
@@ -2730,7 +2496,7 @@
\ifnum\columnsetlevel>\zerocount
\framedtextparameter{cs:#1}\c!before
\fi
- \def\stopcolumnsetspan{\dostopcolumnsetspan{#1}}}
+ \unexpanded\def\stopcolumnsetspan{\dostopcolumnsetspan{#1}}}
\def\dostopcolumnsetspan#1%
{\par
@@ -2797,206 +2563,6 @@
% \startcolumnsetspan[two] \input tufte \stopcolumnsetspan
% \stopcolumnset
-% We need to set the \dimen globally since we are in the
-% OTR. Unfortunately this interferes with local settings,
-% although we may assume that they will not cross page
-% boundaries.
-
-\def\OTRSETcheckcontent
- {\bgroup
- \donefalse
- \def\OTRSETcheckcontent##1%
- {\setbox\scratchbox##1\recurselevel
- \setbox\scratchbox\vbox{\unvbox\scratchbox}%
- \ifdim\ht\scratchbox>\zeropoint\donetrue\fi}%
- \dorecurse{\nofcolumns}
- {\OTRSETcheckcontent\columngettextbox
- \OTRSETcheckcontent\columngetfootbox
- \OTRSETcheckcontent\columngettopbox
- \OTRSETcheckcontent\columngetbotbox}%
- \ifdone\egroup\donefalse\else\egroup\donetrue\fi}
-
-\def\OTRSETgetcolumntextheight#1% max - boven - top
- {\scratchdimen=\OTRSETgetparameter\c!maxhoogte#1%
- \advance\scratchdimen -\OTRSETgetparameter\c!bovenoffset#1%
- \advance\scratchdimen -\ht\columntopbox#1%
- \advance\scratchdimen -\getvalue{\??mc\number\mofcolumns-f}%
- \advance\scratchdimen -\ht\columnbotbox#1} % not used
-
-\def\OTRSETgetcolumnnaturalheight#1% max - boven - top
- {\setbox\scratchbox\vbox{\unvcopy\columntextbox#1}%
- \scratchdimen\ht\scratchbox
- \advance\scratchdimen \OTRSETgetparameter\c!bovenoffset#1%
- \advance\scratchdimen \ht\columntopbox#1%
- \advance\scratchdimen -\getvalue{\??mc\number\mofcolumns-f}%
- \advance\scratchdimen \ht\columnbotbox#1} % not used
-
-\def\OTRSETdobalance% splitten in met en zonder footnotes
- {\bgroup
- \maxdeadcycles=1000
- % collect content and notes
- \bgroup
- \OTRSEToutput
- {\global\setbox1\vbox{\unvbox\normalpagebox}%
- \global\setbox3\vbox{\unvbox\footins}}%
- \verticalstrut\vskip-\struttotal % makes footnotes flush
- \eject
- \global\collectingcontentfalse
- % check for footnotes only
- \ifdim\ht1<\topskip % real dirty
- \global\setbox1=\vbox{}
- % fix height of first line
- \ifdim\ht3>\!!zeropoint
- \global\setbox3\vbox
- {\setfootnotebodyfont
- \kern-\strutht
- \kern\topskip
- \unvbox3}
- \fi
- % prepare trial box
- \global\setbox5\vbox
- {\ifdim\ht1>\zeropoint
- \unvcopy1 \ifdim\ht3>\zeropoint \kern\skip\footins \fi
- \fi
- \ifdim\ht3>\zeropoint \unvcopy3 \fi}
- \egroup
- % erase old stuff
- \columnerasetextboxes
- \columnerasefootboxes
- % prepare floats
- \OTRSETdotopinsertions
- \OTRSETdobotinsertions % not used can be removed
- % calculate available space
- \!!heighta\zeropoint % available total height
- \dorecurse{\nofcolumns}
- {\OTRSETgetcolumntextheight\recurselevel
- \OTRSETcalculatelines\scratchdimen
- \advance\!!heighta \scratchdimen}
- % quick check
- \ifdim\ht5>\!!heighta
- % use normal routine
- \columnerasetextboxes
- \columnerasefootboxes
- % TEMP, TODO, FORCE NEXT PASS !
- \unvbox1
- \unvbox3
- \doglobal\addtocommalist{-\realfolio}\OTRSETbalancinglist
- \donefalse
- %\writestatus\m!columns{no balancing, text overflows height}%
- \else\ifdim\ht5>\zeropoint \relax
- % some text and/or notes
- \donetrue
- \else
- \donefalse
- \dorecurse\nofcolumns
- {\ifdim\ht\columntopbox\recurselevel>\zeropoint \donetrue \fi}%
- \ifdone
- % no text and notes, but figures
- \else
- % no text, no notes, no figures
- \doglobal\addtocommalist{-\realfolio}\OTRSETbalancinglist
- \writestatus\m!columns{no balancing, nothing to be placed}%
- \fi
- \fi\fi
- \ifdone
- \ifdim\ht5>\zeropoint \relax
- % balancing text and notes
- %\writestatus\m!columns{text may fit, balancing}%
- \newcounter\loopcounter
- \newcounter\balancinglines
- \doloop
- {\increment\loopcounter\relax
- % initialize
- \columnerasetextboxes
- \columnerasefootboxes
- \setbox0=\copy5
- \splittopskip\topskip
- % pre-split loop and quality calculation
- %\writestatus\m!columns{pass \loopcounter: correction -\balancinglines}
- \dorecurse\nofcolumns
- {\OTRSETgetcolumntextheight\recurselevel
- \OTRSETcalculatelines\scratchdimen
- \!!heightc\scratchdimen
- \ifnum\recurselevel<\nofcolumns
- \advance\!!heightc -\balancinglines\lineheight
- \fi
- \columnsettextbox\recurselevel\vsplit0 to \!!heightc}
- % just one method
- \OTRSETgetcolumnnaturalheight1 \dimen4\scratchdimen
- \OTRSETgetcolumnnaturalheight\nofcolumns \dimen6\scratchdimen
- %\writestatus\m!columns{first column: \the\dimen4}%
- %\writestatus\m!columns{last column: \the\dimen6}%
- \ifdim\dimen4=\dimen6
- \donetrue % perfect balance
- \else\ifdim\dimen4>\dimen6
- \donefalse % not yet good enough
- \increment\balancinglines % try again
- \edef\balancingcount{\the\!!counta}
- \else
- \donetrue % worse balance
- \ifnum\balancinglines>0 % take previous
- \decrement\balancinglines
- \fi
- \fi\fi
- % extra check
- % \ifdim\ht0>\zeropoint\relax \donefalse \fi
- % another check
- \ifdone
- %\writestatus\m!columns{balancing finished in pass \loopcounter}%
- \else \ifnum\loopcounter>100 \donetrue
- %\writestatus\m!columns{balancing aborted after pass \loopcounter}%
- \else
- %\writestatus\m!columns{balancing continued after pass \loopcounter}%
- \fi \fi
- % final balancing pass
- \ifdone
- \setbox0\copy1
- \setbox2\copy3
- \columnerasetextboxes
- \columnerasefootboxes
- \dorecurse\nofcolumns
- {\OTRSETgetcolumntextheight\recurselevel
- \OTRSETcalculatelines\scratchdimen
- \!!heightc\scratchdimen
- \ifnum\recurselevel<\nofcolumns
- \advance\!!heightc -\balancinglines\lineheight
- \fi
- % split off text
- \ifdim\ht0>\zeropoint
- \columnsettextbox\recurselevel\vsplit0 to \!!heightc
- \setbox4\vbox{\unvcopy\columntextbox\recurselevel}
- \advance\!!heightc -\ht4
- \ifdim\ht0>\zeropoint
- \columnsettextbox\recurselevel\box4
- \advance\!!heightc \skip\footins
- \fi
- \fi
- % split off footnotes
- \ifdim\ht0>\zeropoint\relax \else
- \ifdim\ht2>\zeropoint\relax
- \setbox4\vsplit2 to \!!heightc
- \setbox\footins=\vbox{\unvbox4} % ugly and dirty trick
- \ifdim\ht\columntextbox\recurselevel=\zeropoint\relax
- \columnsettextbox\recurselevel\hbox
- {\raise\strutdp\hbox % ugly but needed
- {\setfootnotebodyfont % both these moves
- \lower\strutdp\hbox{\placebottomnotes}}}
- \else
- \columnsetfootbox\recurselevel\hbox{\placebottomnotes}
- \fi
- \fi
- \fi}
- \exitloop
- \fi}
- \else
- % no reason to balance floats
- \fi
- \fi
- \doglobal\addtocommalist{\realfolio}\OTRSETbalancinglist
- \OTRSETdoflush
- \fi
- \egroup}
-
\protect \endinput
% extreme examples (1)
diff --git a/Master/texmf-dist/tex/context/base/page-sid.mkiv b/Master/texmf-dist/tex/context/base/page-sid.mkiv
index ecfa195e688..c30204a4e68 100644
--- a/Master/texmf-dist/tex/context/base/page-sid.mkiv
+++ b/Master/texmf-dist/tex/context/base/page-sid.mkiv
@@ -150,39 +150,6 @@
\fi
\fi}
-% \def\setsidefloatskips
-% {\global\sidefloatrightskip\zeropoint
-% \global\sidefloatleftskip \zeropoint
-% \ifcase\sidefloattype
-% \or % backspace
-% \global \sidefloatleftskip \rightorleftpageaction \backspace \cutspace
-% \or % leftedge
-% \global \sidefloatleftskip \rightorleftpageaction \leftmargindistance\rightmargindistance
-% \global\advance\sidefloatleftskip \rightorleftpageaction \leftmarginwidth\rightmarginwidth
-% \global\advance\sidefloatleftskip \rightorleftpageaction \leftedgedistance\rightedgedistance
-% \or % leftmargin
-% \global \sidefloatleftskip \rightorleftpageaction \leftmargindistance\rightmargindistance
-% \or % leftside
-% \or % rightside
-% \or % rightmargin
-% \global \sidefloatrightskip\rightorleftpageaction \rightmargindistance\leftmargindistance
-% \or % rightedge
-% \global \sidefloatrightskip\rightorleftpageaction \rightmargindistance\leftmargindistance
-% \global\advance\sidefloatrightskip\rightorleftpageaction \rightmarginwidth\leftmarginwidth
-% \global\advance\sidefloatrightskip\rightorleftpageaction \rightedgedistance\leftedgedistance
-% \or % cutspace
-% \global \sidefloatrightskip\rightorleftpageaction \cutspace\backspace
-% \fi
-% \ifdim\sidefloatrightskip>\zeropoint
-% \doglobal\advance\sidefloatrightskip\rightskip
-% \fi
-% \ifdim\sidefloatleftskip>\zeropoint
-% \doglobal\advance\sidefloatleftskip\leftskip
-% \fi}
-
-
-% use \outermarginwidth etc here
-
\def\setsidefloatskips
{\global\sidefloatrightskip\zeropoint
\global\sidefloatleftskip \zeropoint
@@ -395,7 +362,7 @@
\ifdim\sidefloatwidth>\zeropoint % new, see prikkels
\noindent
\ifinner\else\vadjust{\penalty\minusone}\fi
- \hskip\sidefloatwidth
+ \hskip\sidefloatwidth\relax
%\else
% we have a margin or edge float
\fi
@@ -467,6 +434,30 @@
%
% keep this ^
+\def\repositionsidefloat#1%
+ {\global\setbox\floatbox\hbox % no \hskip, but \kern here
+ {\ifnum\sidefloattype=\plusfour
+ \hskip\sidefloatleftshift
+ \else\ifnum\sidefloattype=\plusone
+ \hskip\sidefloatleftshift
+ \fi\fi
+ \ifnum\sidefloattype>\plusfour
+ \hskip-\sidefloatextrashift
+ \else
+ \hskip\sidefloatshift
+ \fi
+ \vbox{#1\ifnum\sidefloatalign=\plusfour \removedepth\fi}%
+ \ifnum\sidefloattype>\plusfour
+ \kern\sidefloatshift
+ \else
+ \kern-\sidefloatextrashift
+ \fi
+ \ifnum\sidefloattype=8
+ \kern\sidefloatrightshift
+ \else\ifnum\sidefloattype=\plusfive
+ \kern\sidefloatrightshift
+ \fi\fi}}
+
\def\putsidefloat#1% grid (4) is rather experimental
{\par
\whitespace
@@ -490,28 +481,7 @@
\fi
\previoussidefloat
\stallsidefloat
- \global\setbox\floatbox\hbox % no \hskip, but \kern here
- {\ifnum\sidefloattype=\plusfour
- \hskip\sidefloatleftshift
- \else\ifnum\sidefloattype=\plusone
- \hskip\sidefloatleftshift
- \fi\fi
- \ifnum\sidefloattype>\plusfour
- \hskip-\sidefloatextrashift
- \else
- \hskip\sidefloatshift
- \fi
- \vbox{#1\ifnum\sidefloatalign=\plusfour \removedepth\fi}%
- \ifnum\sidefloattype>\plusfour
- \kern\sidefloatshift
- \else
- \kern-\sidefloatextrashift
- \fi
- \ifnum\sidefloattype=8
- \kern\sidefloatrightshift
- \else\ifnum\sidefloattype=\plusfive
- \kern\sidefloatrightshift
- \fi\fi}%
+ \repositionsidefloat{#1}%
\ifnum\sidefloatalign=\plusfour
\getnoflines{\ht\floatbox}%
\scratchdimen\noflines\lineheight
@@ -576,17 +546,6 @@
\fi
\setsidefloat}
-% \def\progresssidefloat
-% {\sidefloatprogress\sidefloatvsize
-% \iffloatflag
-% \advance\sidefloatprogress -\sidefloatpagetotal
-% \global\floatflagfalse
-% \else
-% \advance\sidefloatprogress -\pagetotal
-% \fi}
-%
-% more compact:
-
\def\progresssidefloat
{\sidefloatprogress\sidefloatvsize
\advance\sidefloatprogress-\iffloatflag\sidefloatpagetotal\global\floatflagfalse\else\pagetotal\fi}
@@ -676,6 +635,10 @@
\fi
\egroup
\par
+\ifgridsnapping
+ \getrawnoflines\sidefloatheight
+ \sidefloatheight=\noflines\lineheight
+\fi
\kern-\sidefloatheight
\penalty10001 % oeps, this will change
\normalbaselines
@@ -784,7 +747,7 @@
\def\doadjustsidefloatdisplaylines
{\par
- \vskip-\parskip
+ % not in mkiv: \vskip-\parskip
\noindent
\ignorespaces}
diff --git a/Master/texmf-dist/tex/context/base/page-spr.mkiv b/Master/texmf-dist/tex/context/base/page-spr.mkiv
index 4436ddcc2c4..75b91dff773 100644
--- a/Master/texmf-dist/tex/context/base/page-spr.mkiv
+++ b/Master/texmf-dist/tex/context/base/page-spr.mkiv
@@ -59,14 +59,14 @@
\null \page
\fi \fi }
-\def\startspread
+\unexpanded\def\startspread
{\bgroup
\ifdoublesided
\page[\v!left]%
%\setsystemmode{spread}%
\inspreadtrue
\expanded{\setuplayout[\c!textwidth=\the\dimexpr2\textwidth+2\backspace\relax]}%
- \def\startspread{\bgroup\let\stopspread\egroup}%
+ \unexpanded\def\startspread{\bgroup\let\stopspread\egroup}%
\let\stopspread\dostopspread
\else
\let\stopspread\egroup
diff --git a/Master/texmf-dist/tex/context/base/page-str.lua b/Master/texmf-dist/tex/context/base/page-str.lua
new file mode 100644
index 00000000000..c4d1957c3e8
--- /dev/null
+++ b/Master/texmf-dist/tex/context/base/page-str.lua
@@ -0,0 +1,221 @@
+if not modules then modules = { } end modules ['page-str'] = {
+ version = 1.001,
+ comment = "companion to page-str.mkiv",
+ author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
+ copyright = "PRAGMA ADE / ConTeXt Development Team",
+ license = "see context related readme files"
+}
+
+-- work in progresss .. unfinished
+
+local concat = table.concat
+
+local find_tail, write_node, free_node, copy_nodelist = node.slide, node.write, node.free, node.copy_list
+local vpack_nodelist, hpack_nodelist = node.vpack, node.hpack
+local texdimen, texbox = tex.dimen, tex.box
+
+local new_kern = nodes.kern
+local new_glyph = nodes.glyph
+
+local trace_collecting = false trackers.register("streams.collecting", function(v) trace_collecting = v end)
+local trace_flushing = false trackers.register("streams.flushing", function(v) trace_flushing = v end)
+
+streams = streams or { }
+
+local data, name, stack = { }, nil, { }
+
+function streams.enable(newname)
+ if newname == "default" then
+ name = nil
+ else
+ name = newname
+ end
+end
+
+function streams.disable()
+ name = stack[#stack]
+end
+
+function streams.start(newname)
+ table.insert(stack,name)
+ name = newname
+end
+
+function streams.stop(newname)
+ name = table.remove(stack)
+end
+
+function streams.collect(head,where)
+ if name and head and name ~= "default" then
+ local tail = node.slide(head)
+ local dana = data[name]
+ if not dana then
+ dana = { }
+ data[name] = dana
+ end
+ local last = dana[#dana]
+ if last then
+ local tail = find_tail(last)
+ tail.next, head.prev = head, tail
+ elseif last == false then
+ dana[#dana] = head
+ else
+ dana[1] = head
+ end
+ if trace_collecting then
+ logs.report("streams","appending snippet '%s' to slot %s",name,#dana)
+ end
+ return nil, true
+ else
+ return head, false
+ end
+end
+
+function streams.push(thename)
+ if not thename or thename == "" then
+ thename = name
+ end
+ if thename and thename ~= "" then
+ local dana = data[thename]
+ if dana then
+ dana[#dana+1] = false
+ if trace_collecting then
+ logs.report("streams","pushing snippet '%s'",thename)
+ end
+ end
+ end
+end
+
+function streams.flush(name,copy) -- problem: we need to migrate afterwards
+ local dana = data[name]
+ if dana then
+ local dn = #dana
+ if dn == 0 then
+ -- nothing to flush
+ elseif copy then
+ if trace_flushing then
+ logs.report("streams","flushing copies of %s slots of '%s'",dn,name)
+ end
+ for i=1,dn do
+ local di = dana[i]
+ if di then
+ write_node(copy_nodelist(di.list)) -- list, will be option
+ end
+ end
+ if copy then
+ data[name] = nil
+ end
+ else
+ if trace_flushing then
+ logs.report("streams","flushing %s slots of '%s'",dn,name)
+ end
+ for i=1,dn do
+ local di = dana[i]
+ if di then
+ write_node(di.list) -- list, will be option
+ di.list = nil
+ free_node(di)
+ end
+ end
+ end
+ end
+end
+
+function streams.synchronize(list) -- this is an experiment !
+ -- we don't optimize this as we want to trace in detail
+ list = aux.settings_to_array(list)
+ local max = 0
+ if trace_flushing then
+ logs.report("streams","synchronizing list: %s",concat(list," "))
+ end
+ for i=1,#list do
+ local dana = data[list[i]]
+ if dana then
+ local n = #dana
+ if n > max then
+ max = n
+ end
+ end
+ end
+ if trace_flushing then
+ logs.report("streams","maximum number of slots: %s",max)
+ end
+ for m=1,max do
+ local height, depth = 0, 0
+ for i=1,#list do
+ local name = list[i]
+ local dana = data[name]
+ local slot = dana[m]
+ if slot then
+ local vbox = vpack_nodelist(slot)
+ local ht, dp = vbox.height, vbox.depth
+ if ht > height then
+ height = ht
+ end
+ if dp > depth then
+ depth = dp
+ end
+ dana[m] = vbox
+ if trace_flushing then
+ logs.report("streams","slot %s of '%s' is packed to height %s and depth %s",m,name,ht,dp)
+ end
+ end
+ end
+ if trace_flushing then
+ logs.report("streams","slot %s has max height %s and max depth %s",m,height,depth)
+ end
+ local strutht, strutdp = texdimen.globalbodyfontstrutheight, texdimen.globalbodyfontstrutdepth
+ local struthtdp = strutht + strutdp
+ for i=1,#list do
+ local name = list[i]
+ local dana = data[name]
+ local vbox = dana[m]
+ if vbox then
+ local delta_height = height - vbox.height
+ local delta_depth = depth - vbox.depth
+ if delta_height > 0 or delta_depth > 0 then
+ if false then
+ -- actually we need to add glue and repack
+ vbox.height, vbox.depth = height, depth
+ if trace_flushing then
+ logs.report("streams","slot %s of '%s' with delta (%s,%s) is compensated",m,i,delta_height,delta_depth)
+ end
+ else
+ -- this is not yet ok as we also need to keep an eye on vertical spacing
+ -- so we might need to do some splitting or whatever
+ local tail = vbox.list and find_tail(vbox.list)
+ local n, delta = 0, delta_height -- for tracing
+ while delta > 0 do
+ -- we need to add some interline penalties
+ local line = copy_nodelist(tex.box.strutbox)
+ line.height, line.depth = strutht, strutdp
+ if tail then
+ tail.next, line.prev = line, tail
+ end
+ tail = line
+ n, delta = n +1, delta - struthtdp
+ end
+ dana[m] = vpack_nodelist(vbox.list)
+ vbox.list = nil
+ free_node(vbox)
+ if trace_flushing then
+ logs.report("streams","slot %s:%s with delta (%s,%s) is compensated by %s lines",m,i,delta_height,delta_depth,n)
+ end
+ end
+ end
+ else
+ -- make dummy
+ end
+ end
+ end
+end
+
+tasks.appendaction("mvlbuilders", "normalizers", "streams.collect")
+
+tasks.disableaction("mvlbuilders", "streams.collect")
+
+function streams.initialize()
+ tasks.enableaction ("mvlbuilders", "streams.collect")
+end
+
+-- todo: remove empty last { }'s
diff --git a/Master/texmf-dist/tex/context/base/page-str.mkiv b/Master/texmf-dist/tex/context/base/page-str.mkiv
index e4fd3979434..d73643cbe67 100644
--- a/Master/texmf-dist/tex/context/base/page-str.mkiv
+++ b/Master/texmf-dist/tex/context/base/page-str.mkiv
@@ -1,6 +1,6 @@
%D \module
%D [ file=page-str,
-%D version=2006.03.21,
+%D version=2010.03.13, % 2006.03.21,
%D title=\CONTEXT\ Page Macros,
%D subtitle=Page Streams,
%D author=Hans Hagen,
@@ -22,359 +22,123 @@
%D
%D These macros were written while listening to and watching the DVD
%D \quotation {Rush In Rio}.
+%D
+%D The reimplementation (or rather experimenting with the complete
+%D rewrite) was done while looping over \quotation {Wende Snijders
+%D No.9}.
+%D
+%D Remark: marknotes are gone, at least for a while.
-% not yet ok in mkiv ... marknotes .. will be completely redone
-
-\unprotect
-
-% taco, what is the best way to append a otr chunk (insert pagediscards?)
-
-\let\currentoutputstream\s!default
-
-\newtoks\defaultstreamoutput \defaultstreamoutput=\OTRONEoutput
-
-\newtoks\normalstreamoutput \normalstreamoutput={\saveoutputstream[\currentoutputstream]}
-
-\newcount\streampenalty \streampenalty=-101010101
+\writestatus{loading}{ConTeXt Page Macros / Page Streams}
-\ifx\multicolumnseject\undefined \else
- \let\normalmulticolumnseject\multicolumnseject
- \def\multicolumnseject{\ifinoutputstream\else\normalmulticolumnseject\fi}
-\fi
+\registerctxluafile{page-str}{1.001}
-\newif\ifinoutputstream
+\unprotect
+\let \currentoutputstream \empty
+\newif \ifinoutputstream
\newtoks \everyenableoutputstream
\appendtoks
- \flushsidefloats
+ \flushsidefloats
\to \everyenableoutputstream
+\def\initializeoutputstreams
+ {\ctxlua{streams.initialize()}%
+ \glet\initializeoutputstreams\relax}
+
\def\enableoutputstream[#1]%
- {\the\everyenableoutputstream
- \finishoutputstream
- \writestatus{otr}{switching to output stream #1}%
+ {\initializeoutputstreams
+ \the\everyenableoutputstream
\inoutputstreamtrue
- \xdef\currentoutputstream{#1}}
+ \xdef\currentoutputstream{#1}%
+ \ctxlua{streams.enable("#1")}}
\def\disableoutputstream
- {\finishoutputstream
- \writestatus{otr}{switching to default output stream}%
- \inoutputstreamfalse
- \global\let\currentoutputstream\s!default}
-
-\def\useoutputstream[#1]%
- {\writestatus{otr}{using output stream #1}%
- \xdef\currentoutputstream{#1}}
-
-\def\handlestreamoutput
- {\ifx\currentoutputstream\s!default % already expanded
- \ifnum\outputpenalty=\streampenalty
- \ifvoid\normalpagebox \else
- \unvbox\normalpagebox
- \fi
- \else
- \the\defaultstreamoutput
- \fi
- \else
- \the\normalstreamoutput
- \fi}
-
-\OTRONEoutput{\handlestreamoutput}
-
-\def\defineoutputstream[#1]%
- {\doifundefined{otrs:#1}{\expandafter\newbox\csname otrs:#1\endcsname}}
-
-\def\outputstreamtag#1%
- {\csname otrs:#1\endcsname}
-
-\def\finishoutputstream % todo: installoutput
- {\endgraf
- \penalty\streampenalty
- \endgraf}
-
-\def\saveoutputstream[#1]%
- {\writestatus{otr}{saving otr stream #1}%
- \ifvoid\normalpagebox
- \global\setbox\outputstreamtag{#1}\emptybox
- \else
- \global\setbox\outputstreamtag{#1}\vbox
- {\presetoutputstream
- \ifvoid\outputstreamtag{#1}\else\unvbox\outputstreamtag{#1}\fi
- \scratchdimen\dp\normalpagebox
- \unvbox\normalpagebox
- \vskip-\scratchdimen
- \kern\strutdepth}%
- \fi}
-
-% \def\presetoutputstream
-% {\pdffirstlineheight\strutheight
-% \pdflastlinedepth \strutdepth
-% \pdfeachlineheight \strutheight
-% \pdfeachlinedepth \strutdepth}
-
-\let\presetoutputstream\relax
-
-\def\outputstreamht [#1]{\ht\outputstreamtag{#1}}
-\def\outputstreamdp [#1]{\dp\outputstreamtag{#1}}
-\def\outputstreamwd [#1]{\wd\outputstreamtag{#1}}
-
-%def\outputstreambox [#1]{\ifvoid\outputstreamtag{#1}\else\box \outputstreamtag{#1}\fi}
-%def\outputstreamcopy[#1]{\ifvoid\outputstreamtag{#1}\else\copy\outputstreamtag{#1}\fi}
-
-\def\dowithoutputstreambox#1[#2]{\ifvoid\outputstreamtag{#2}\else#1\outputstreamtag{#2}\fi}
-
-\def\outputstreamcopy {\dowithoutputstreambox\copy }
-\def\outputstreambox {\dowithoutputstreambox\box }
-\def\outputstreamunvcopy{\dowithoutputstreambox\unvcopy}
-\def\outputstreamunvbox {\dowithoutputstreambox\unvbox }
-
-%D Footnotes don't go along with streams, simply because there is no
-%D way to re-split inserts. A dirty way out is to use marks and store
-%D notes that way.
+ {\inoutputstreamfalse
+ \global\let\currentoutputstream\s!default
+ \ctxlua{streams.disable()}}
-% not mkiv ready yet
-
-\def\definemarknote
- {\dodoubleempty\dodefinemarknote}
-
-\def\dodefinemarknote[#1][#2]%
- {\definemarking[mn:#1]%
- \setvalue{mn:#1:n}{0}%
- \getparameters
- [mn:#1]
- [\c!before=,
- \c!after=,
- \c!inbetween=\endgraf,
- \c!command=\firstofoneargument,
- #2]}
-
-\def\setmarknote[#1]#2%
- {\doglobal\incrementvalue{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
+\unexpanded\def\startoutputstream[#1]%
{\begingroup
-% \edef\firstmarknote{0\fetchmark[mn:#1][column:first]}%
-% \edef\lastmarknote {0\fetchmark[mn:#1][column:last]}%
-% \ifnum\firstmarknote<\lastmarknote\relax
-% \getvalue{mn:#1\c!before}%
-% \dostepwiserecurse\firstmarknote\lastmarknote\plusone
-% {\ifnum\recurselevel>\firstmarknote\relax
-% \ifnum\recurselevel<\lastmarknote\relax
-% \getvalue{mn:#1\c!inbetween}%
-% \fi
-% \fi
-% \getvalue{mn:#1\c!command}{\getvalue{mn:#1:t:\recurselevel}}}%
-% \getvalue{mn:#1\c!after}%
-% \fi
- \endgroup}
+ \initializeoutputstreams
+ \the\everyenableoutputstream
+ \inoutputstreamtrue
+ \xdef\currentoutputstream{#1}%
+ \ctxlua{streams.start("#1")}}
-\def\erasemarknotes[#1]%
- {\begingroup
- \edef\firstmarknote{0\fetchmark[mn:#1][column:first]}%
- \edef\lastmarknote {0\fetchmark[mn:#1][column:last]}%
- \dostepwiserecurse\firstmarknote\lastmarknote\plusone
- {\global\letvalue{mn:#1:t:\recurselevel}\empty}%
+\unexpanded\def\stopoutputstream
+ {\ctxlua{streams.stop()}%
\endgroup}
-%D The next section implements synchronization of (currently
-%D two) output streams. In due time we will implement both a
-%D vertical and horizontal system, as well as alternative
-%D splitters (firstpagevsize, succesivevsize etc).
-
-\def\synchronizeoutputstreams[#1]% [one,two] [left,right]
- {\bgroup
- \getfromcommalist[#1][\plusone]\let\firstoutputstream \commalistelement
- \getfromcommalist[#1][\plustwo]\let\secondoutputstream\commalistelement
- \forgeteverypar
- \def\roundingeps{50sp}%
- \getboxheight\dimen0\of\box\outputstreamtag\firstoutputstream
- \getboxheight\dimen2\of\box\outputstreamtag\secondoutputstream
- \scratchdimen\dimexpr\dimen0-\dimen2\relax
- \ifdim\scratchdimen<-\roundingeps\relax
- \scratchdimen-\scratchdimen
- \writestatus{sync}{compensating first stream: \the\scratchdimen/\number\scratchdimen}%
- \getroundednoflines\scratchdimen
- \global\setbox\outputstreamtag\firstoutputstream\vbox
- {\presetoutputstream
- \unvbox\outputstreamtag\firstoutputstream\dorecurse\noflines\crlf}%
- \else\ifdim\scratchdimen>\roundingeps\relax
- \writestatus{sync}{compensating second stream: \the\scratchdimen/\number\scratchdimen}%
- \getroundednoflines\scratchdimen
- \global\setbox\outputstreamtag\secondoutputstream\vbox
- {\presetoutputstream
- \unvbox\outputstreamtag\secondoutputstream\dorecurse\noflines\crlf}%
- \else
- \writestatus{sync}{no need to compensate streams: \the\scratchdimen/\number\scratchdimen}%
- \fi\fi
- \egroup}
-
-\def\nofoutputstreamsplitlines {\v!auto} % {40}
-\def\outputstreamsplittolerance {-5}
-
-\def\flushoutputstreampages[#1]%
- {\bgroup
- \getfromcommalist[#1][\plusone]\let\firstoutputstream \commalistelement
- \getfromcommalist[#1][\plustwo]\let\secondoutputstream\commalistelement
- \doloop
- {\flushoutputstreams[#1]%
- \ifvoid\outputstreamtag\firstoutputstream
- \ifvoid\outputstreamtag\secondoutputstream
- \exitloop
- \else
- \global\setbox\outputstreamtag\firstoutputstream\vbox{\strut}%
- \fi
- \else
- \ifvoid\outputstreamtag\secondoutputstream
- \global\setbox\outputstreamtag\secondoutputstream\vbox{\strut}%
- \else
- % okay
- \fi
- \fi}%
- \egroup}
-
-\def\flushoutputstreams[#1]%
- {\bgroup
- \getfromcommalist[#1][\plusone]\let\firstoutputstream \commalistelement
- \getfromcommalist[#1][\plustwo]\let\secondoutputstream\commalistelement
- \doif\nofoutputstreamsplitlines\v!auto
- {\getrawnoflines\textheight
- \edef\nofoutputstreamsplitlines{\the\noflines}}%
- \splittopskip\strutheight
- \scratchdimen\nofoutputstreamsplitlines\lineheight\relax
- \unless\iffalse
- \dimen0\scratchdimen
- \doloop
- {\setbox4\copy\outputstreamtag\firstoutputstream
- \setbox0\vsplit4 to \dimen0
- \setbox0\vbox
- {\directsetup{stream:\firstoutputstream:top}%
- \unvbox0
- \directsetup{stream:\firstoutputstream:bottom}}%
- \ifdim\ht0>\scratchdimen
- \advance\dimen0-\lineheight
- \else
- \exitloop
- \fi}%
- \scratchdimen\dimen0
- \dimen2\scratchdimen
- \doloop
- {\setbox6\copy\outputstreamtag\secondoutputstream
- \setbox2\vsplit6 to \dimen2
- \setbox2\vbox
- {\directsetup{stream:\secondoutputstream:top}%
- \unvbox0
- \directsetup{stream:\secondoutputstream:bottom}}%
- \ifdim\ht2>\scratchdimen
- \advance\dimen2-\lineheight
- \else
- \exitloop
- \fi}%
- \scratchdimen\dimen2
- \fi
- \setbox4\copy\outputstreamtag\firstoutputstream
- \setbox6\copy\outputstreamtag\secondoutputstream
- \scratchcounter\zerocount
- \doloop
- {\setbox0\vsplit4 to \scratchdimen
- \setbox0\vbox{\unvbox0}%
- \setbox2\vsplit6 to \scratchdimen
- \setbox2\vbox{\unvbox2}%
- \ifvoid4
- \exitloop
- \else\ifvoid6
- \exitloop
- \else
- \dimen8=\dimexpr\ht4-\ht6\relax
- \ifdim\dimen8<\zeropoint\dimen8=-\dimen8\relax\fi
- \advance\scratchcounter\plusone
- \ifdim\dimen8<.5\lineheight
- \exitloop
- \else\ifnum\outputstreamsplittolerance>\zeropoint
- \ifnum\scratchcounter>\outputstreamsplittolerance\relax
- \exitloop
- \else
- \advance\scratchdimen\lineheight
- \fi
- \else\ifnum\outputstreamsplittolerance<\zeropoint
- \ifnum-\scratchcounter<\outputstreamsplittolerance\relax
- \exitloop
- \else
- \advance\scratchdimen-\lineheight
- \fi
- \else\ifnum\outputstreamsplittolerance=\zeropoint
- \exitloop
- \fi\fi\fi\fi
- \fi\fi}%
- \setbox0\vsplit\outputstreamtag\firstoutputstream to \scratchdimen
- \setbox0\vbox to \textheight
- {\presetoutputstream
- \directsetup{stream:\firstoutputstream:top}%
- \unvbox0
- \vfill
- \directsetup{stream:\firstoutputstream:bottom}}%
- \setbox2\vsplit\outputstreamtag\secondoutputstream to \scratchdimen
- \setbox2\vbox to \textheight
- {\presetoutputstream
- \directsetup{stream:\secondoutputstream:top}%
- \unvbox2
- \vfill
- \directsetup{stream:\secondoutputstream:bottom}}%
- \directsetup{stream:\firstoutputstream:reset}%
- \directsetup{stream:\secondoutputstream:reset}%
- \page[even]
- \box0\vfill\page
- \box2\vfill\page
- \egroup}
-
- %D Although one can put floats in a stream, it sometimes makes sense
- %D to keep them apart and this is what local floats do.
-
- \def\setuplocalfloats
- {\getparameters[\??lf]}
-
- \setuplocalfloats
- [%before=\blank,
- %after=\blank,
- inbetween=\blank]
-
- \installfloathandler \v!local \somelocalfloat
-
- \initializeboxstack{localfloats}
-
- \newcounter\noflocalfloats
-
- \def\resetlocalfloats
- {\doglobal\newcounter\noflocalfloats
- \initializeboxstack{localfloats}}
-
- \def\somelocalfloat[#1]%
- {\doglobal\increment\noflocalfloats
- \savebox{localfloats}{\noflocalfloats}{\box\floatbox}}
-
- \def\getlocalfloats
- {\dorecurse\noflocalfloats
- {\ifnum\recurselevel=\plusone % 1\relax
- \getvalue{\??lf\c!before}%
- \else
- \getvalue{\??lf\c!inbetween}%
- \fi
- \dontleavehmode\hbox{\foundbox{localfloats}\recurselevel}%
- \ifnum\recurselevel=\noflocalfloats\relax
- \getvalue{\??lf\c!after}%
- \fi}}
-
- \def\flushlocalfloats
- {\getlocalfloats
- \resetlocalfloats}
-
- \def\getlocalfloat#1{\expanded{\foundbox{localfloats}{\number#1}}}
-
- \def\forcelocalfloats{\let\forcedfloatmethod\v!local}
-
-%D Because many arrangements are possible, we will implement
-%D some examples in a runtime loadable module \type {m-streams}.
+\def\flushoutputstream [#1]{\ctxlua{streams.flush("#1")}}
+\def\outputstreamcopy [#1]{\vbox{\ctxlua{streams.flush("#1",true)}}}
+\def\outputstreambox [#1]{\vbox{\ctxlua{streams.flush("#1")}}}
+\def\outputstreamunvcopy[#1]{\ctxlua{streams.flush("#1",true)}}
+\def\outputstreamunvbox [#1]{\ctxlua{streams.flush("#1")}}
+\def\synchronizestreams [#1]{\ctxlua{streams.synchronize("#1")}}
+\def\dopushoutputstream [#1]{\ctxlua{streams.push("#1")}}
+
+\def\pushoutputstream {\dosingleempty\dopushoutputstream}
+
+% \unexpanded\def\defineoutputstream[#1]%
+% {\doifundefined{otrs:#1}{\expandafter\newbox\csname otrs:#1\endcsname}}
+%
+% \def\useoutputstream[#1]%
+% {\writestatus{otr}{using output stream #1}%
+% \xdef\currentoutputstream{#1}}
+%
+% \directsetup{stream:\firstoutputstream:set}
+% \directsetup{stream:\firstoutputstream:top}
+% \directsetup{stream:\firstoutputstream:bottom}
+% \directsetup{stream:\firstoutputstream:reset}
+
+%D Obsolete in \MKIV:
+
+\unexpanded\def\definemarknote {\dodoubleempty\dodefinemarknote}
+\def\dodefinemarknote[#1][#2]{}
+\def\setmarknote [#1]{\gobbleoneargument}
+\def\flushmarknotes [#1]{}
+\def\erasemarknotes [#1]{}
\protect \endinput
+
+% \enabletrackers[streams.flushing]
+%
+% \setuplayout[grid=yes] \showgrid
+%
+% \starttext
+%
+% \input tufte
+%
+% \startoutputstream[nl]
+%
+% Wat doen we hier?
+%
+% \enableoutputstream[en]
+%
+% Are you sleeping, brother John?\footnote{xxx}
+%
+% \dorecurse{4}{x \footnote{note \recurselevel}\input tufte \par \pushoutputstream}
+%
+% \enableoutputstream[de]
+%
+% Bruder Jakob, schläfst du noch?\footnote{yyy}
+%
+% \dorecurse{4}{x \footnote{note \recurselevel}\input ward \par \pushoutputstream}
+%
+% \disableoutputstream
+%
+% \stopoutputstream
+%
+% Vader Jacob, slaap je nog?\footnote{zzz}
+%
+% \input tufte
+%
+% \synchronizestreams[en,de,nl]
+%
+% \page \flushoutputstream[en] \input knuth
+% \page \flushoutputstream[de] \input knuth
+% \page \flushoutputstream[nl] \input knuth
+%
+% \stoptext
diff --git a/Master/texmf-dist/tex/context/base/page-txt.mkiv b/Master/texmf-dist/tex/context/base/page-txt.mkiv
index f4e2d76f94c..bdc7c1bb6cd 100644
--- a/Master/texmf-dist/tex/context/base/page-txt.mkiv
+++ b/Master/texmf-dist/tex/context/base/page-txt.mkiv
@@ -64,7 +64,7 @@
%D \showsetup{setupfooter}
%D \showsetup{setupbottom}
-\def\setuplayouttext
+\unexpanded\def\setuplayouttext
{\dotripleempty\dosetuplayouttext}
\def\dosetuplayouttext[#1][#2][#3]% beware, non global
@@ -86,11 +86,11 @@
\fi
\fi}
-\def\setuptop {\dotripleempty\dosetuplayouttext[\v!top]}
-\def\setupheader {\dotripleempty\dosetuplayouttext[\v!header]}
-\def\setuptext {\dotripleempty\dosetuplayouttext[\v!text]}
-\def\setupfooter {\dotripleempty\dosetuplayouttext[\v!footer]}
-\def\setupbottom {\dotripleempty\dosetuplayouttext[\v!bottom]}
+\unexpanded\def\setuptop {\dotripleempty\dosetuplayouttext[\v!top]}
+\unexpanded\def\setupheader {\dotripleempty\dosetuplayouttext[\v!header]}
+\unexpanded\def\setuptext {\dotripleempty\dosetuplayouttext[\v!text]}
+\unexpanded\def\setupfooter {\dotripleempty\dosetuplayouttext[\v!footer]}
+\unexpanded\def\setupbottom {\dotripleempty\dosetuplayouttext[\v!bottom]}
%D \macros
%D {noheaderandfooterlines,notopandbottomlines}
@@ -125,11 +125,11 @@
%D \showsetup{setupfootertexts}
%D \showsetup{setupbottomtexts}
-\def\setuptoptexts {\dosixtupleempty\dosetuptexts[\v!top ]}
-\def\setupheadertexts {\dosixtupleempty\dosetuptexts[\v!header ]}
-\def\setuptexttexts {\dosixtupleempty\dosetuptexts[\v!text ]}
-\def\setupfootertexts {\dosixtupleempty\dosetuptexts[\v!footer ]}
-\def\setupbottomtexts {\dosixtupleempty\dosetuptexts[\v!bottom ]}
+\unexpanded\def\setuptoptexts {\dosixtupleempty\dosetuptexts[\v!top ]}
+\unexpanded\def\setupheadertexts {\dosixtupleempty\dosetuptexts[\v!header ]}
+\unexpanded\def\setuptexttexts {\dosixtupleempty\dosetuptexts[\v!text ]}
+\unexpanded\def\setupfootertexts {\dosixtupleempty\dosetuptexts[\v!footer ]}
+\unexpanded\def\setupbottomtexts {\dosixtupleempty\dosetuptexts[\v!bottom ]}
%D The left, right and center variables can also be set
%D directly using the previously discussed macros.
@@ -192,12 +192,12 @@
%D The next macro will be cleaned up and made less messy and
%D dependent.
-\def\placetextlinestrut#1%
+\unexpanded\def\placetextlinestrut#1%
{\doifvalue{#1\c!strut}\v!yes{\setstrut\strut}}
\def\dosingletexts#1#2#3#4#5#6%
{\bgroup
- \defconvertedargument\ascii{#6}% no longer \defconvertedargument
+ \defconvertedargument\ascii{#6}% no longer \defconvertedargument, this also does not permit \v!pagenumber (i.e. v!)
\ifx\ascii\empty\else
\dostartattributes{\??tk#1#2}#3#4\empty
\placetextlinestrut{\??tk#1}% here !
@@ -236,13 +236,26 @@
%D the \type {status} variable. This is handled by the next
%D couple of macros.
+% \def\settextlinestatus#1%
+% {\edef\textlinestatus{\csname\??tk#1\c!state\endcsname}}
+
\def\settextlinestatus#1%
- {\edef\textlinestatus{\csname\??tk#1\c!state\endcsname}}
+ {\ifcase0\csname\??tk#1\c!n\endcsname\relax
+ \edef\textlinestatus{\csname\??tk#1\c!state\endcsname}%
+ \else
+ \setxvalue{\??tk#1\c!n}{\the\numexpr\csname\??tk#1\c!n\endcsname-1}%
+ \let\textlinestatus\v!stop
+ \fi}
+
+\appendtoks
+ \doifinset\v!header\floatspecification{\setxvalue{\??tk\v!header\c!n}{1}}%
+ \doifinset\v!footer\floatspecification{\setxvalue{\??tk\v!footer\c!n}{1}}%
+\to \everybeforeflushedpagefloat
\def\resettextlinestatus#1% postpone
{\expandafter\gdef\csname\??tk#1\s!reset\endcsname{\global\expandafter\let\csname\??tk#1\c!state\endcsname\v!normal}}
-\def\placelayouttextline#1% #2
+\unexpanded\def\placelayouttextline#1% #2
{\settextlinestatus#1%
\csname\??tk::\ifcsname\??tk::\textlinestatus\endcsname\textlinestatus\else\s!unknown\fi\endcsname#1} % {#2}
@@ -468,39 +481,6 @@
\hss}%
\dp#1\zeropoint}
-\definepalet
- [layout]
- [grid=red,
- page=green]
-
-\def\addtextgridlayer#1% to be checked for color and layer
- {\ifcase\showgridstate\else % 1=bottom 2=top
- \startcolor[layout:grid]%
- \setgridbox\scratchbox\makeupwidth\textheight % todo: check color
- \setbox#1\hbox
- {\ifcase\showgridstate\or\or\box#1\hskip-\makeupwidth\fi
- \bgroup % color
- \ifcase\layoutcolumns\else
- \gray
- \setlayoutcomponentattribute\v!grid\v!columns
- \hbox \layoutcomponentboxattribute to \makeupwidth
- {\dorecurse\layoutcolumns
- {\hskip\layoutcolumnwidth
- \ifnum\recurselevel<\layoutcolumns
- \vrule
- \!!height\ht\scratchbox
- \!!depth\dp\scratchbox
- \!!width\layoutcolumndistance
- \fi}}%
- \hskip-\makeupwidth
- \fi
- \setlayoutcomponentattribute\v!grid\v!lines
- \hbox \layoutcomponentboxattribute{\box\scratchbox}%
- \egroup
- \ifcase\showgridstate\or\hskip-\makeupwidth\box#1\fi}%
- \stopcolor
- \fi}
-
%D The placement of a whole line is handled by the next two
%D macros. These are hooked into the general purpose token
%D list registers mentioned before.
@@ -624,7 +604,7 @@
\fi
\ifdim\rightedgewidth>\zeropoint
\hskip\rightedgedistance
- \dododoplacelayouttextline\rightedgewidth\currentlayouttextline\v!edge{\thelayoutrightedgeline#1}%
+ \dododoplacelayouttextline\rightedgewidth\currentlayouttextline\v!edge{\thelayoutrightedgeline#3}%
\fi}}
\def\thelayoutleftedgeline#1%
@@ -722,20 +702,15 @@
%D This code will move to \type {page-flt.tex}.
-\appendtoks
- \plaatsrechtermargeblok \hskip-\rightmarginwidth
-\to \rightmargintextcontent
-
-\appendtoks
- \plaatslinkermargeblok \hskip-\leftmarginwidth
-\to \leftmargintextcontent
+\appendtoks \placerightmarginblock \hskip-\rightmarginwidth \to \rightmargintextcontent
+\appendtoks \placeleftmarginblock \hskip-\leftmarginwidth \to \leftmargintextcontent
%D The next hook will later be used for keeping track of
%D positions, i.e.\ it will provide a proper (page
%D dependent) reference point.
\ifx\undefined\placepositionanchors
- \def\placepositionanchors{\vskip\textheight}
+ \unexpanded\def\placepositionanchors{\vskip\textheight}
\fi
%D \macros
@@ -759,7 +734,7 @@
%D \chapter{tweede} \dorecurse{20}{\input tufte \relax}
%D \stoptyping
-\def\definetext
+\unexpanded\def\definetext
{\doseventupleempty\dodefinetext}
\def\dodefinetext[#1][#2][#3][#4][#5][#6][#7]%
@@ -778,25 +753,25 @@
%D The rest of this file is dedicated to setting up the
%D texts. This code is not that impressive.
-\setupheadertexts [\v!text] [] []
+\setupheadertexts [\v!text] [] []
\setupheadertexts [\v!margin] [] []
-\setupheadertexts [\v!edge] [] []
+\setupheadertexts [\v!edge] [] []
-\setupfootertexts [\v!text] [] []
+\setupfootertexts [\v!text] [] []
\setupfootertexts [\v!margin] [] []
-\setupfootertexts [\v!edge] [] []
+\setupfootertexts [\v!edge] [] []
-\setuptexttexts [\v!text] [] []
+\setuptexttexts [\v!text] [] []
\setuptexttexts [\v!margin] [] []
-\setuptexttexts [\v!edge] [] []
+\setuptexttexts [\v!edge] [] []
-\setupbottomtexts [\v!text] [] []
+\setupbottomtexts [\v!text] [] []
\setupbottomtexts [\v!margin] [] []
-\setupbottomtexts [\v!edge] [] []
+\setupbottomtexts [\v!edge] [] []
-\setuptoptexts [\v!text] [] []
+\setuptoptexts [\v!text] [] []
\setuptoptexts [\v!margin] [] []
-\setuptoptexts [\v!edge] [] []
+\setuptoptexts [\v!edge] [] []
% alternative
%
@@ -860,11 +835,11 @@
%D While the header and footer lines are moved away from the
%D main text, the top and bottom lines are centered.
-\setuptop [\c!state=\v!normal,\c!before=\vss,\c!after=\vss,\c!strut=]
-\setupheader[\c!state=\v!normal,\c!before=, \c!after=\vss,\c!strut=\v!yes]
-\setuptext [\c!state=\v!normal,\c!before=\vss,\c!after=\vss,\c!strut=]
-\setupfooter[\c!state=\v!normal,\c!before=\vss,\c!after=, \c!strut=\v!yes]
-\setupbottom[\c!state=\v!normal,\c!before=\vss,\c!after=\vss,\c!strut=]
+\setuptop [\c!state=\v!normal,\c!n=0,\c!before=\vss,\c!after=\vss,\c!strut=]
+\setupheader[\c!state=\v!normal,\c!n=0,\c!before=, \c!after=\vss,\c!strut=\v!yes]
+\setuptext [\c!state=\v!normal,\c!n=0,\c!before=\vss,\c!after=\vss,\c!strut=]
+\setupfooter[\c!state=\v!normal,\c!n=0,\c!before=\vss,\c!after=, \c!strut=\v!yes]
+\setupbottom[\c!state=\v!normal,\c!n=0,\c!before=\vss,\c!after=\vss,\c!strut=]
\setuptop [\c!style=,\c!color=]
\setupheader[\c!style=,\c!color=]
diff --git a/Master/texmf-dist/tex/context/base/ppchtex.mkii b/Master/texmf-dist/tex/context/base/ppchtex.mkii
index 285b0004ecd..045e9808b6b 100644
--- a/Master/texmf-dist/tex/context/base/ppchtex.mkii
+++ b/Master/texmf-dist/tex/context/base/ppchtex.mkii
@@ -1477,7 +1477,6 @@
\getvalue{\s!chemicallinesegment#22}%
\undochemicaloffset}
-
\def\getprivatechemicallinesegment[#1][#2]%
{\chemicalrotate[#1]%
\getvalue{\s!chemicallinesegment#2#1}}
@@ -1531,8 +1530,104 @@
\def\processchemicalunrotatedlinesegment#1%
{\doprocesschemicallinesegment3{#1}\getchemicallinesegment}
-\def\processchemicaldashedlinesegment%
+\def\processchemicaldashedlinesegment
{\doprocesschemicallinesegment4c\getchemicallinesegment}
+
+\def\plotchemicaldasheddeltaline#1#2#3#4%
+ {\!!counta=#1\!!countb=#2\!!countc=#3\!!countd=#4\relax
+ \ifnum\chemicaldrawingmode=2
+ \global\MPdrawingdonetrue
+ \setchemicalattributes
+ \startMPdrawing
+ x0 := \MPdivten[\chemicalxoffset]u ;
+ y0 := \MPdivten[\chemicalyoffset]u ;
+ x1 := \MPdivten[\the\!!counta]u ;
+ y1 := \MPdivten[\the\!!countb]u ;
+ x2 := \MPdivten[\the\!!countc]u ;
+ y2 := \MPdivten[\the\!!countd]u ;
+ z20 = z2 rotatedaround(z1,+5) ;
+ z21 = z2 rotatedaround(z1,-5) ;
+ draw (z1 rotatedaround(origin,-\chemicalangle)) shifted z0 ;
+ save n ; n := 5 ;
+ for i=1 upto n :
+ draw ((((z20--z21) shifted -z2) shifted (i/n)[z2,z1])
+ rotatedaround(origin,-\chemicalangle)) shifted z0 ;
+ endfor
+ \stopMPdrawing
+ \account{#1}{#2}%
+ \account{#3}{#4}%
+ \else
+ \doplotchemicalline
+ \advance\!!countc by 16 \advance\!!countd by -21
+ \doplotchemicalline
+ \advance\!!countc by -4 \advance\!!countd by 7
+ \doplotchemicalline
+ \advance\!!countc by -4 \advance\!!countd by 7
+ \doplotchemicalline
+ \advance\!!countc by -8 \advance\!!countd by 14
+ \doplotchemicalline
+ \advance\!!countc by -4 \advance\!!countd by 7
+ \doplotchemicalline
+ \advance\!!countc by -4 \advance\!!countd by 7
+ \doplotchemicalline
+ \advance\!!countc by -4 \advance\!!countd by 7
+ \doplotchemicalline
+ \fi}
+
+\def\plotchemicalwavyline#1#2#3#4%
+ {\!!counta=#1\!!countb=#2\!!countc=#3\!!countd=#4\relax
+ \ifnum\chemicaldrawingmode=2
+ \global\MPdrawingdonetrue
+ \setchemicalattributes
+ \startMPdrawing
+ x0 := \MPdivten[\chemicalxoffset]u ;
+ y0 := \MPdivten[\chemicalyoffset]u ;
+ x1 := \MPdivten[\the\!!counta]u ;
+ y1 := \MPdivten[\the\!!countb]u ;
+ x2 := \MPdivten[\the\!!countc]u ;
+ y2 := \MPdivten[\the\!!countd]u ;
+ save d ; pair d ;
+ d := z2 rotatedaround(z1,+5) shifted -z2 ;
+ save n ; n := 4 ;
+ draw ((for i=0 upto n-1 :
+ ((i)/n)[z1,z2] ..
+ ((i+.25)/n)[z1,z2] shifted d ..
+ ((i+.50)/n)[z1,z2] ..
+ ((i+.75)/n)[z1,z2] shifted -d ..
+ endfor
+ z2) rotatedaround(origin,-\chemicalangle)) shifted z0 ;
+ \stopMPdrawing
+ \account{#1}{#2}%
+ \account{#3}{#4}%
+ \else
+ \doplotchemicalline
+ \advance\!!countc by 16 \advance\!!countd by -21
+ \doplotchemicalline
+ \advance\!!countc by -4 \advance\!!countd by 7
+ \doplotchemicalline
+ \advance\!!countc by -4 \advance\!!countd by 7
+ \doplotchemicalline
+ \advance\!!countc by -8 \advance\!!countd by 14
+ \doplotchemicalline
+ \advance\!!countc by -4 \advance\!!countd by 7
+ \doplotchemicalline
+ \advance\!!countc by -4 \advance\!!countd by 7
+ \doplotchemicalline
+ \advance\!!countc by -4 \advance\!!countd by 7
+ \doplotchemicalline
+ \fi}
+
+\def\processchemicaldasheddeltalinesegment#1#2%
+ {\bgroup
+ \def\plotchemicalline{\plotchemicaldasheddeltaline}%
+ \doprocesschemicallinesegment0c\getchemicallinesegment{#1}{#2}%
+ \egroup}
+
+\def\processchemicalwavylinesegment#1#2%
+ {\bgroup
+ \def\plotchemicalline{\plotchemicalwavyline}%
+ \doprocesschemicallinesegment0c\getchemicallinesegment{#1}{#2}%
+ \egroup}
\def\processchemicalopenend#1#2%
{\doprocesschemicallinesegment0c\doprocesschemicalopenend{#1}{#2}}
@@ -2395,6 +2490,8 @@
DB##3##4##5=>\processchemicallinesegment{DB}{##3##4##5},
SB##3##4##5=>\processchemicallinesegment{SB}{##3##4##5},
BB##3##4##5=>\processchemicaldeltalinesegment{SB}{##3##4##5},
+ BD##3##4##5=>\processchemicaldasheddeltalinesegment{SB}{##3##4##5},
+ BW##3##4##5=>\processchemicalwavylinesegment{SB}{##3##4##5},
SD##3##4##5=>\processchemicaldashedlinesegment{SB}{##3##4##5},
TB##3##4##5=>\processchemicallinesegment{SB}{##3##4##5}%
\processchemicallinesegment{DB}{##3##4##5},
diff --git a/Master/texmf-dist/tex/context/base/ppchtex.mkiv b/Master/texmf-dist/tex/context/base/ppchtex.mkiv
index f0fc54bcc47..e81551eeab2 100644
--- a/Master/texmf-dist/tex/context/base/ppchtex.mkiv
+++ b/Master/texmf-dist/tex/context/base/ppchtex.mkiv
@@ -414,7 +414,7 @@
\let\@@localchemicalstyle\empty
-\def\setupchemicalformat[#1]%
+\unexpanded\def\setupchemicalformat[#1]%
{\processaction
[\getvalue{#1\c!size}]
[ \v!small=>\def\@@localchemicalformat{\scriptscriptstyle},
@@ -449,7 +449,7 @@
\setupchemicalformat[\??chemical\s!chemical]%
\ignorespaces}
-\def\setupchemical
+\unexpanded\def\setupchemical
{\dosingleargument\dosetupchemical}
\def\@@dochemicalstyle% % default mapping
@@ -729,11 +729,11 @@
\def\@@chemicalpostponed{}%
\complexorsimpleempty\startchemical}
-\def\startchemical
+\unexpanded\def\startchemical
{\bgroup % t.b.v. ungrouped floats
\dostartchemical}
-\def\stopchemical
+\unexpanded\def\stopchemical
{\checkchemicalpicture
\@@endchemicalpicture
\egroup
@@ -1455,8 +1455,104 @@
\def\processchemicalunrotatedlinesegment#1%
{\doprocesschemicallinesegment3{#1}\getchemicallinesegment}
-\def\processchemicaldashedlinesegment%
+\def\processchemicaldashedlinesegment
{\doprocesschemicallinesegment4c\getchemicallinesegment}
+
+\def\plotchemicaldasheddeltaline#1#2#3#4%
+ {\!!counta=#1\!!countb=#2\!!countc=#3\!!countd=#4\relax
+ \ifnum\chemicaldrawingmode=2
+ \global\MPdrawingdonetrue
+ \setchemicalattributes
+ \startMPdrawing
+ x0 := \MPdivten[\chemicalxoffset]u ;
+ y0 := \MPdivten[\chemicalyoffset]u ;
+ x1 := \MPdivten[\the\!!counta]u ;
+ y1 := \MPdivten[\the\!!countb]u ;
+ x2 := \MPdivten[\the\!!countc]u ;
+ y2 := \MPdivten[\the\!!countd]u ;
+ z20 = z2 rotatedaround(z1,+5) ;
+ z21 = z2 rotatedaround(z1,-5) ;
+ draw (z1 rotatedaround(origin,-\chemicalangle)) shifted z0 ;
+ save n ; n := 5 ;
+ for i=1 upto n :
+ draw ((((z20--z21) shifted -z2) shifted (i/n)[z2,z1])
+ rotatedaround(origin,-\chemicalangle)) shifted z0 ;
+ endfor
+ \stopMPdrawing
+ \account{#1}{#2}%
+ \account{#3}{#4}%
+ \else
+ \doplotchemicalline
+ \advance\!!countc by 16 \advance\!!countd by -21
+ \doplotchemicalline
+ \advance\!!countc by -4 \advance\!!countd by 7
+ \doplotchemicalline
+ \advance\!!countc by -4 \advance\!!countd by 7
+ \doplotchemicalline
+ \advance\!!countc by -8 \advance\!!countd by 14
+ \doplotchemicalline
+ \advance\!!countc by -4 \advance\!!countd by 7
+ \doplotchemicalline
+ \advance\!!countc by -4 \advance\!!countd by 7
+ \doplotchemicalline
+ \advance\!!countc by -4 \advance\!!countd by 7
+ \doplotchemicalline
+ \fi}
+
+\def\plotchemicalwavyline#1#2#3#4%
+ {\!!counta=#1\!!countb=#2\!!countc=#3\!!countd=#4\relax
+ \ifnum\chemicaldrawingmode=2
+ \global\MPdrawingdonetrue
+ \setchemicalattributes
+ \startMPdrawing
+ x0 := \MPdivten[\chemicalxoffset]u ;
+ y0 := \MPdivten[\chemicalyoffset]u ;
+ x1 := \MPdivten[\the\!!counta]u ;
+ y1 := \MPdivten[\the\!!countb]u ;
+ x2 := \MPdivten[\the\!!countc]u ;
+ y2 := \MPdivten[\the\!!countd]u ;
+ save d ; pair d ;
+ d := z2 rotatedaround(z1,+5) shifted -z2 ;
+ save n ; n := 4 ;
+ draw ((for i=0 upto n-1 :
+ ((i)/n)[z1,z2] ..
+ ((i+.25)/n)[z1,z2] shifted d ..
+ ((i+.50)/n)[z1,z2] ..
+ ((i+.75)/n)[z1,z2] shifted -d ..
+ endfor
+ z2) rotatedaround(origin,-\chemicalangle)) shifted z0 ;
+ \stopMPdrawing
+ \account{#1}{#2}%
+ \account{#3}{#4}%
+ \else
+ \doplotchemicalline
+ \advance\!!countc by 16 \advance\!!countd by -21
+ \doplotchemicalline
+ \advance\!!countc by -4 \advance\!!countd by 7
+ \doplotchemicalline
+ \advance\!!countc by -4 \advance\!!countd by 7
+ \doplotchemicalline
+ \advance\!!countc by -8 \advance\!!countd by 14
+ \doplotchemicalline
+ \advance\!!countc by -4 \advance\!!countd by 7
+ \doplotchemicalline
+ \advance\!!countc by -4 \advance\!!countd by 7
+ \doplotchemicalline
+ \advance\!!countc by -4 \advance\!!countd by 7
+ \doplotchemicalline
+ \fi}
+
+\def\processchemicaldasheddeltalinesegment#1#2%
+ {\bgroup
+ \def\plotchemicalline{\plotchemicaldasheddeltaline}%
+ \doprocesschemicallinesegment0c\getchemicallinesegment{#1}{#2}%
+ \egroup}
+
+\def\processchemicalwavylinesegment#1#2%
+ {\bgroup
+ \def\plotchemicalline{\plotchemicalwavyline}%
+ \doprocesschemicallinesegment0c\getchemicallinesegment{#1}{#2}%
+ \egroup}
\def\processchemicalopenend#1#2%
{\doprocesschemicallinesegment0c\doprocesschemicalopenend{#1}{#2}}
@@ -2177,7 +2273,7 @@
{\writestatus{ppchtex}{chemical definition #1 is redefined}}%
\setvalue{\??chemical#1}{#2}}
-\def\definechemical%
+\unexpanded\def\definechemical%
{\dosingleargument\dodefinechemical}
\def\getpredefinedchemical#1%
@@ -2227,6 +2323,9 @@
% afstand dubbele radikalen : 260
% afstand substituenten : +125
+
+
+
\def\executechemicalONE[#1]%
{\setchemicalname ONE
%
@@ -2312,6 +2411,8 @@
DB##3##4##5=>\processchemicallinesegment{DB}{##3##4##5},
SB##3##4##5=>\processchemicallinesegment{SB}{##3##4##5},
BB##3##4##5=>\processchemicaldeltalinesegment{SB}{##3##4##5},
+ BD##3##4##5=>\processchemicaldasheddeltalinesegment{SB}{##3##4##5},
+ BW##3##4##5=>\processchemicalwavylinesegment{SB}{##3##4##5},
SD##3##4##5=>\processchemicaldashedlinesegment{SB}{##3##4##5},
TB##3##4##5=>\processchemicallinesegment{SB}{##3##4##5}%
\processchemicallinesegment{DB}{##3##4##5},
diff --git a/Master/texmf-dist/tex/context/base/pret-lua.lua b/Master/texmf-dist/tex/context/base/pret-lua.lua
index 3faf8108142..8803971f3eb 100644
--- a/Master/texmf-dist/tex/context/base/pret-lua.lua
+++ b/Master/texmf-dist/tex/context/base/pret-lua.lua
@@ -1,11 +1,14 @@
if not modules then modules = { } end modules ['pret-lua'] = {
version = 1.001,
- comment = "companion to buff-ver.tex",
+ comment = "companion to buff-ver.mkiv",
author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
copyright = "PRAGMA ADE / ConTeXt Development Team",
license = "see context related readme files"
}
+-- this is not a real parser as we also want to typeset wrong output
+-- and a real parser would choke on that
+
local utf = unicode.utf8
local utfcharacters, utfvalues = string.utfcharacters, string.utfvalues
@@ -19,6 +22,12 @@ local visualizer = buffers.newvisualizer("lua")
visualizer.identifiers = { }
-- borrowed from scite
+--
+-- depricated:
+--
+-- gcinfo unpack getfenv setfenv loadlib
+-- table.maxn table.getn table.setn
+-- math.log10 math.mod math.modf math.fmod
visualizer.identifiers.core = {
"and", "break", "do", "else", "elseif", "end", "false", "for", "function",
@@ -27,15 +36,15 @@ visualizer.identifiers.core = {
}
visualizer.identifiers.base = {
- "assert", "collectgarbage", "dofile", "error", "gcinfo", "loadfile",
+ "assert", "collectgarbage", "dofile", "error", "loadfile",
"loadstring", "print", "rawget", "rawset", "require", "tonumber",
- "tostring", "type", "unpack",
+ "tostring", "type",
}
visualizer.identifiers.five = {
- "_G", "getfenv", "getmetatable", "ipairs", "loadlib", "next", "pairs",
- "pcall", "rawequal", "setfenv", "setmetatable", "xpcall", "string", "table",
- "math", "coroutine", "io", "os", "debug", "load", "module", "select"
+ "_G", "getmetatable", "ipairs", "next", "pairs",
+ "pcall", "rawequal", "setmetatable", "xpcall", "string", "table",
+ "math", "coroutine", "io", "os", "debug", "load", "module", "select",
}
visualizer.identifiers.libs = {
@@ -43,7 +52,7 @@ visualizer.identifiers.libs = {
"coroutine.create", "coroutine.resume", "coroutine.status", "coroutine.wrap",
"coroutine.yield", "coroutine.running",
-- package
- "package.cpath", "package.loaded", "package.loadlib", "package.path",
+ "package.cpath", "package.loaded", "package.loadlib", "package.path", "package.config",
-- 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",
@@ -51,28 +60,31 @@ visualizer.identifiers.libs = {
-- 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.log", "math.max", "math.min", "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.tan", "math.cosh", "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",
+ "table.concat", "table.foreach", "table.foreachi",
+ "table.sort", "table.insert", "table.remove",
+ "table.pack", "table.unpack",
-- 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"
+ "package.preload", "package.seeall",
+ -- bit
+ -- ... todo ...
}
local known_words = { }
-for k,v in pairs(visualizer.identifiers) do
- for _,w in pairs(v) do
+for k,v in next, visualizer.identifiers do
+ for _,w in next, v do
known_words[w] = k
end
end
@@ -131,6 +143,22 @@ end
-- we will also provide a proper parser based pretty printer although normaly
-- a pretty printer should handle faulty code too (educational purposes)
+local function written(state,c,i)
+ if c == " " then
+ state = finish_state(state)
+ texsprint(ctxcatcodes,"\\obs")
+ elseif c == "\t" then
+ state = finish_state(state)
+ texsprint(ctxcatcodes,"\\obs")
+ if buffers.visualizers.enabletab then
+ texsprint(ctxcatcodes,rep("\\obs ",i%buffers.visualizers.tablength))
+ end
+ else
+ texwrite(c)
+ end
+ return state, 0
+end
+
function visualizer.flush_line(str, nested)
local state, instr, inesc, word = 0, false, false, nil
buffers.currentcolors = colors
@@ -162,9 +190,38 @@ function visualizer.flush_line(str, nested)
if pre then
code = pre
end
- local p, s = nil, nil
+ local p, s, i = nil, nil, 0
for c in utfcharacters(code) do
- if c == "[" then
+ i = i + 1
+ if instr then
+ if p then
+ texwrite(p)
+ p = nil
+ end
+ if c == s then
+ if inesc then
+ texwrite(c)
+ inesc = false
+ else
+ state = change_state(states[c],state)
+ instr = false
+ texwrite(c)
+ state = finish_state(state)
+ end
+ s = nil
+ else
+ if c == "\\" then
+ inesc = not inesc
+ else
+ inesc = false
+ end
+ state, i = written(state,c,i)
+ end
+ elseif c == "[" then
+ if word then
+ texwrite(word)
+ word = nil
+ end
if p == "[" then
inlongstring = true
state = change_state(states["[["],state)
@@ -172,9 +229,16 @@ function visualizer.flush_line(str, nested)
state = finish_state(state)
p = nil
else
+ if p then
+ state, i = written(state,p,i)
+ end
p = c
end
elseif c == "]" then
+ if word then
+ texwrite(word)
+ word = nil
+ end
if p == "]" then
inlongstring = false
state = change_state(states["]]"],state)
@@ -182,47 +246,34 @@ function visualizer.flush_line(str, nested)
state = finish_state(state)
p = nil
else
+ if p then
+ state, i = written(state,p,i)
+ end
p = c
end
else
if p then
- state = change_state(states[c],state)
- texwrite(p,c)
+ state = change_state(states[p],state)
+ texwrite(p)
state = finish_state(state)
p = nil
end
- if c == " " then
+ if c == " " or c == "\t" then
if word then
state = flush_lua_word(state,word)
word = nil
end
- texsprint(ctxcatcodes,"\\obs")
+ state, i = written(state,c,i)
elseif inlongstring then
- texwrite(c)
- elseif instr then
- if c == s then
- if inesc then
- texwrite(c)
- inesc = false
- else
- state = change_state(states[c],state)
- instr = false
- texwrite(c)
- state = finish_state(state)
- end
- s = nil
- else
- if c == "\\" then
- inesc = not inesc
- else
- inesc = false
- end
- texwrite(c)
- end
+ state, i = written(state,c,i)
elseif c == '"' or c == "'" then
+if word then
+ state = flush_lua_word(state,word)
+ word = nil
+end
instr = true
state = change_state(states[c],state)
- texwrite(c)
+ state, i = written(state,c,i)
state = finish_state(state)
s = c
elseif find(c,"^[%a]$") then
@@ -239,13 +290,18 @@ function visualizer.flush_line(str, nested)
end
end
end
+ if p then
+ texwrite(p)
+ -- state, i = written(state,p,i)
+ p = nil
+ end
state = flush_lua_word(state,word)
if post then
state = change_state(states['--'], state)
texwrite("--")
state = finish_state(state)
for c in utfcharacters(post) do
- if c == " " then texsprint(ctxcatcodes,"\\obs") else texwrite(c) end
+ state, i = written(state,c,i)
end
end
end
@@ -254,7 +310,10 @@ function visualizer.flush_line(str, nested)
state = change_state(states['--'], state)
texwrite("[[")
state = finish_state(state)
- texwrite(comment)
+ -- texwrite(comment) -- maybe also split and
+ for c in utfcharacters(comment) do
+ state, i = written(state,c,i)
+ end
end
state = finish_state(state)
end
diff --git a/Master/texmf-dist/tex/context/base/pret-mp.lua b/Master/texmf-dist/tex/context/base/pret-mp.lua
index 939065230a2..782adf5f5a2 100644
--- a/Master/texmf-dist/tex/context/base/pret-mp.lua
+++ b/Master/texmf-dist/tex/context/base/pret-mp.lua
@@ -1,6 +1,6 @@
if not modules then modules = { } end modules ['pret-mp'] = {
version = 1.001,
- comment = "companion to buff-ver.tex",
+ comment = "companion to buff-ver.mkiv",
author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
copyright = "PRAGMA ADE / ConTeXt Development Team",
license = "see context related readme files"
@@ -135,8 +135,8 @@ local states = {
local known_words = { }
-for k,v in pairs(visualizer.identifiers) do
- for _,w in pairs(v) do
+for k,v in next, visualizer.identifiers do
+ for _,w in next, v do
known_words[w] = k
end
end
diff --git a/Master/texmf-dist/tex/context/base/pret-tex.lua b/Master/texmf-dist/tex/context/base/pret-tex.lua
index 080075eb81a..5d128fa3b90 100644
--- a/Master/texmf-dist/tex/context/base/pret-tex.lua
+++ b/Master/texmf-dist/tex/context/base/pret-tex.lua
@@ -1,6 +1,6 @@
if not modules then modules = { } end modules ['pret-tex'] = {
version = 1.001,
- comment = "companion to buff-ver.tex",
+ comment = "companion to buff-ver.mkiv",
author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
copyright = "PRAGMA ADE / ConTeXt Development Team",
license = "see context related readme files"
@@ -37,9 +37,10 @@ local chardata = characters.data
local is_letter = characters.is_letter
function visualizer.flush_line(str,nested)
- local state, first = 0, false
+ local state, first, i = 0, false, 0
buffers.currentcolors = colors
for c in utfcharacters(str) do
+ i = i + 1
if c == " " then
state = finish_state(state)
texsprint(ctxcatcodes,"\\obs")
@@ -49,6 +50,7 @@ function visualizer.flush_line(str,nested)
texsprint(ctxcatcodes,"\\obs")
if buffers.visualizers.enabletab then
texsprint(ctxcatcodes,rep("\\obs ",i%buffers.visualizers.tablength))
+ i = 0
end
first = false
elseif first then
diff --git a/Master/texmf-dist/tex/context/base/pret-xml.lua b/Master/texmf-dist/tex/context/base/pret-xml.lua
new file mode 100644
index 00000000000..b11dccb99c3
--- /dev/null
+++ b/Master/texmf-dist/tex/context/base/pret-xml.lua
@@ -0,0 +1,136 @@
+if not modules then modules = { } end modules ['pret-xml'] = {
+ version = 1.001,
+ comment = "companion to buff-ver.mkiv",
+ author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
+ copyright = "PRAGMA ADE / ConTeXt Development Team",
+ license = "see context related readme files"
+}
+
+-- line by line, no check because can be snippet (educational) and
+-- a somewhat simplified view on xml; we forget about dtd's and
+-- cdata (some day i'll make a visualizer for valid xml using the
+-- built in parser)
+
+local utf = unicode.utf8
+
+local utfcharacters, utfvalues = string.utfcharacters, string.utfvalues
+local utfbyte, utffind = utf.byte, utf.find
+local rep = string.rep
+local texsprint, texwrite = tex.sprint, tex.write
+local ctxcatcodes = tex.ctxcatcodes
+
+local visualizer = buffers.newvisualizer("xml")
+
+local colors = {
+ "prettytwo",
+ "prettyone",
+ "prettythree",
+ "prettyfour"
+}
+
+local states = {
+ ['"']=2, ["'"]=2,
+ ["-"]=1, ["?"]=1, ["!"]=1, [":"]=1, ["_"]=1, ["/"]=1,
+}
+
+local change_state, finish_state = buffers.change_state, buffers.finish_state
+
+local state, intag, dotag, inentity, inquote
+
+function visualizer.reset()
+ state, intag, dotag, inentity, inquote = 0, false, false, false, false
+end
+
+function visualizer.flush_line(str,nested)
+ buffers.currentcolors = colors
+ for c in utfcharacters(str) do
+ if c == "&" then
+ inentity = true -- no further checking
+ state = change_state(3, state)
+ texwrite(c)
+ elseif c == ";" then
+ if inentity then
+ inentity = false
+ state = change_state(3, state)
+ texwrite(c)
+ state = finish_state(state)
+ else
+ texwrite(c)
+ end
+ elseif inentity then
+ state = change_state(3, state)
+ texwrite(c)
+ elseif c == " " then
+ state = finish_state(state)
+ texsprint(ctxcatcodes,"\\obs")
+ intag = false
+ elseif c == "\t" then
+ state = finish_state(state)
+ texsprint(ctxcatcodes,"\\obs")
+ if buffers.visualizers.enabletab then
+ texsprint(ctxcatcodes,rep("\\obs ",i%buffers.visualizers.tablength))
+ end
+ intag = false
+ elseif c == "<" then
+ if intag then
+ state = finish_state(state)
+ -- error
+ else
+ intag = 1
+ dotag = true
+ state = change_state(1, state)
+ end
+ texwrite(c)
+ elseif c == ">" then
+ if intag then
+ texwrite(c)
+ state = finish_state(state)
+ intag, dotag = false, false
+ elseif dotag then
+ state = change_state(1, state)
+ texwrite(c)
+ state = finish_state(state)
+ intag, dotag = false, false
+ else
+ state = finish_state(state)
+ texwrite(c)
+ end
+ elseif intag then
+ if utffind(c,"^[%S]$") then
+ state = change_state(1, state)
+ texwrite(c)
+ intag = intag + 1
+ else
+ intag = false
+ state = finish_state(state)
+ texwrite(c)
+ end
+ elseif dotag then
+ if c == "'" or c == '"' then
+ if inquote then
+ if c == inquote then
+ state = change_state(states[c], state) -- 2
+ texwrite(c)
+ state = finish_state(state)
+ inquote = false
+ else
+ texwrite(c)
+ end
+ else
+ inquote = c
+ state = change_state(states[c], state)
+ texwrite(c)
+ state = finish_state(state)
+ end
+ elseif inquote then
+ texwrite(c)
+ else
+ state = change_state(states[c], state)
+ texwrite(c)
+ end
+ else
+ texwrite(c)
+ end
+ end
+ state = finish_state(state)
+end
diff --git a/Master/texmf-dist/tex/context/base/prop-ini.mkiv b/Master/texmf-dist/tex/context/base/prop-ini.mkiv
index c5df391a76c..97d72582e3f 100644
--- a/Master/texmf-dist/tex/context/base/prop-ini.mkiv
+++ b/Master/texmf-dist/tex/context/base/prop-ini.mkiv
@@ -70,7 +70,7 @@
\global\advance\previouspropertylevel\minusone
\global\advance\propertylevel\minusone}
-\def\defineproperty
+\unexpanded\def\defineproperty
{\dotripleempty\dodefineproperty}
\def\dodefineproperty[#1]%
@@ -98,22 +98,22 @@
\letgvalue{\??py\s!check#1}\docheckproperty
\doifelsevalue{\??py#1\c!method}\v!command
{\doifelsevalue{\??py#1\c!global}\v!yes
- {\unexpanded\setgvalue{\e!start#1}{\dostartproperty{#1}}%
- \unexpanded\setgvalue{\e!stop #1}{\dostopproperty}}%
- {\unexpanded\setgvalue{\e!start#1}{\dostartgproperty{#1}}%
- \unexpanded\setgvalue{\e!stop #1}{\dostopgproperty}}}%
+ {\setugvalue{\e!start#1}{\dostartproperty{#1}}%
+ \setugvalue{\e!stop #1}{\dostopproperty}}%
+ {\setugvalue{\e!start#1}{\dostartgproperty{#1}}%
+ \setugvalue{\e!stop #1}{\dostopgproperty}}}%
{\doifelsevalue{\??py#1\c!global}\v!yes
- {\unexpanded\setgvalue{\e!start#2}[##1]{\dostartproperty{##1}}%
- \unexpanded\setgvalue{\e!stop #2}{\dostopproperty}}%
- {\unexpanded\setgvalue{\e!start#2}[##1]{\dostartgproperty{##1}}%
- \unexpanded\setgvalue{\e!stop #2}{\dostopgproperty}}}}
+ {\setugvalue{\e!start#2}[##1]{\dostartproperty{##1}}%
+ \setugvalue{\e!stop #2}{\dostopproperty}}%
+ {\setugvalue{\e!start#2}[##1]{\dostartgproperty{##1}}%
+ \setugvalue{\e!stop #2}{\dostopgproperty}}}}
\def\nododefineproperty[#1][#2][#3]%
{}
\def\doifelseproperty#1{\doifdefinedelse{\??py#1\c!global}}
-\def\setupproperty
+\unexpanded\def\setupproperty
{\dodoubleempty\dosetupproperty}
\def\dosetupproperty[#1][#2]% local
@@ -144,7 +144,7 @@
\def\checkedpropertyparameter#1% only self
{\ifcsname\??py\currentproperty#1\endcsname\csname\??py\currentproperty#1\endcsname\fi}
-\def\definepropertyhandler#1{\setvalue{\??py*#1}}
+\unexpanded\def\definepropertyhandler#1{\setvalue{\??py*#1}}
\def\propertyhandler #1{\getvalue{\??py*#1}}
\protect \endinput
diff --git a/Master/texmf-dist/tex/context/base/prop-lay.mkiv b/Master/texmf-dist/tex/context/base/prop-lay.mkiv
index 67e103ffb04..7711dae529a 100644
--- a/Master/texmf-dist/tex/context/base/prop-lay.mkiv
+++ b/Master/texmf-dist/tex/context/base/prop-lay.mkiv
@@ -33,12 +33,12 @@
\let\currentviewerlayer\empty
\to \everypagebody
-\def\startlayerproperty
+\unexpanded\def\startlayerproperty
{\pushmacro\currentviewerlayer % grouped (used in interaction)
\let\currentlayerproperty\currentproperty % can be cross group
\dotriggerviewerlayer\currentlayerproperty}
-\def\stoplayerproperty
+\unexpanded\def\stoplayerproperty
{\popmacro\currentviewerlayer % grouped (used in interaction)
\let\currentlayerproperty\previousproperty % can be cross group
\dotriggerviewerlayer\currentlayerproperty}
@@ -120,7 +120,7 @@
\let\layoutcomponentboxattribute \empty
\def\showlayoutcomponents
- {\ctxlua{viewerlayers.enabled=true}%
+ {\ctxlua{viewerlayers.enable()}%
\let\setlayoutcomponentattribute \dosetlayoutcomponentattribute
\let\resetlayoutcomponentattribute\doresetlayoutcomponentattribute}
diff --git a/Master/texmf-dist/tex/context/base/prop-mis.mkiv b/Master/texmf-dist/tex/context/base/prop-mis.mkiv
index 623b10f13bf..37c1d797396 100644
--- a/Master/texmf-dist/tex/context/base/prop-mis.mkiv
+++ b/Master/texmf-dist/tex/context/base/prop-mis.mkiv
@@ -21,16 +21,28 @@
\unprotect
-%D Stream based overprint and knockout:
-
-\defineproperty[\v!overprint][\s!overprint] [\c!method=\v!command]
-\defineproperty[\v!knockout] [\s!overprint] [\c!method=\v!command]
-
-%D Negation.
+% D Overprint cum suis.
+%
+% \defineproperty[\v!overprint][\s!overprint] [\c!method=\v!command]
+% \defineproperty[\v!knockout] [\s!overprint] [\c!method=\v!command]
+%
+% \definepropertyhandler \v!overprint {\dotriggeroverprint\v!overprint}
+% \definepropertyhandler \v!knockout {\dotriggeroverprint\v!knockout }
+%
+% \unexpanded\def\startoverprintproperty{\dotriggeroverprint\v!overprint}
+% \unexpanded\def\stopoverprintproperty {\dotriggeroverprint\v!knockout }
+
+%D Negative cum suis.
\defineproperty [\v!negative] [\s!negative] [\c!method=\v!command]
\defineproperty [\v!positive] [\s!negative] [\c!method=\v!command]
+\definepropertyhandler \v!negative {\dotriggernegative\v!negative}
+\definepropertyhandler \v!positive {\dotriggernegative\v!positive}
+
+\unexpanded\def\startnegativeproperty{\dotriggernegative\v!negative}
+\unexpanded\def\stopnegativeproperty {\dotriggernegative\v!positive}
+
%D Special font effects.
\setupproperty
@@ -46,24 +58,6 @@
\defineproperty [\v!stretch] [\s!effect] [\c!stretch=1]
-%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}}
@@ -74,7 +68,7 @@
\definepropertyhandler \v!hidden {\mktriggereffect\v!hidden}
\definepropertyhandler \v!stretch{\mktriggereffect\v!normal}
-\def\starteffectproperty{\mktriggereffect\currentproperty}
-\def\stopeffectproperty {\mktriggereffect\v!normal }
+\unexpanded\def\starteffectproperty{\mktriggereffect\currentproperty}
+\unexpanded\def\stopeffectproperty {\mktriggereffect\v!normal }
\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
index affc65762b4..b8f0a857311 100644
--- a/Master/texmf-dist/tex/context/base/regi-8859-1.lua
+++ b/Master/texmf-dist/tex/context/base/regi-8859-1.lua
@@ -1,26 +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
+if not modules then modules = { } end modules ['regi-8859-1'] = {
+ version = 1.001,
+ comment = "companion to regi-ini.mkiv",
+ author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
+ copyright = "PRAGMA ADE / ConTeXt Development Team",
+ license = "see context related readme files"
+}
-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,
+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-10.lua b/Master/texmf-dist/tex/context/base/regi-8859-10.lua
index 2b1d2d4ab74..574d4ac50cc 100644
--- a/Master/texmf-dist/tex/context/base/regi-8859-10.lua
+++ b/Master/texmf-dist/tex/context/base/regi-8859-10.lua
@@ -1,26 +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
+if not modules then modules = { } end modules ['regi-8859-10'] = {
+ version = 1.001,
+ comment = "companion to regi-ini.mkiv",
+ author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
+ copyright = "PRAGMA ADE / ConTeXt Development Team",
+ license = "see context related readme files"
+}
-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,
+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
index f6ff34b6950..1910bbb5d0a 100644
--- a/Master/texmf-dist/tex/context/base/regi-8859-11.lua
+++ b/Master/texmf-dist/tex/context/base/regi-8859-11.lua
@@ -1,26 +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
+if not modules then modules = { } end modules ['regi-8859-11'] = {
+ version = 1.001,
+ comment = "companion to regi-ini.mkiv",
+ author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
+ copyright = "PRAGMA ADE / ConTeXt Development Team",
+ license = "see context related readme files"
+}
-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,
+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
index 13b631e9bcb..a6f71cb7865 100644
--- a/Master/texmf-dist/tex/context/base/regi-8859-13.lua
+++ b/Master/texmf-dist/tex/context/base/regi-8859-13.lua
@@ -1,26 +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
+if not modules then modules = { } end modules ['regi-8859-13'] = {
+ version = 1.001,
+ comment = "companion to regi-ini.mkiv",
+ author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
+ copyright = "PRAGMA ADE / ConTeXt Development Team",
+ license = "see context related readme files"
+}
-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,
+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
index ae349ed3619..0c34748659b 100644
--- a/Master/texmf-dist/tex/context/base/regi-8859-14.lua
+++ b/Master/texmf-dist/tex/context/base/regi-8859-14.lua
@@ -1,26 +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
+if not modules then modules = { } end modules ['regi-8859-14'] = {
+ version = 1.001,
+ comment = "companion to regi-ini.mkiv",
+ author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
+ copyright = "PRAGMA ADE / ConTeXt Development Team",
+ license = "see context related readme files"
+}
-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,
+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
index 14891c7ffe3..a5626d6537b 100644
--- a/Master/texmf-dist/tex/context/base/regi-8859-15.lua
+++ b/Master/texmf-dist/tex/context/base/regi-8859-15.lua
@@ -1,26 +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
+if not modules then modules = { } end modules ['regi-8859-15'] = {
+ version = 1.001,
+ comment = "companion to regi-ini.mkiv",
+ author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
+ copyright = "PRAGMA ADE / ConTeXt Development Team",
+ license = "see context related readme files"
+}
-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,
+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
index 426c43773bd..817b41db2f1 100644
--- a/Master/texmf-dist/tex/context/base/regi-8859-16.lua
+++ b/Master/texmf-dist/tex/context/base/regi-8859-16.lua
@@ -1,26 +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
+if not modules then modules = { } end modules ['regi-8859-16'] = {
+ version = 1.001,
+ comment = "companion to regi-ini.mkiv",
+ author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
+ copyright = "PRAGMA ADE / ConTeXt Development Team",
+ license = "see context related readme files"
+}
-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,
+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
index 98988cd8e07..7ae59d0fa22 100644
--- a/Master/texmf-dist/tex/context/base/regi-8859-2.lua
+++ b/Master/texmf-dist/tex/context/base/regi-8859-2.lua
@@ -1,26 +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
+if not modules then modules = { } end modules ['regi-8859-2'] = {
+ version = 1.001,
+ comment = "companion to regi-ini.mkiv",
+ author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
+ copyright = "PRAGMA ADE / ConTeXt Development Team",
+ license = "see context related readme files"
+}
-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,
+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
index ab94e5a772d..a83d63bac72 100644
--- a/Master/texmf-dist/tex/context/base/regi-8859-3.lua
+++ b/Master/texmf-dist/tex/context/base/regi-8859-3.lua
@@ -1,26 +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
+if not modules then modules = { } end modules ['regi-8859-3'] = {
+ version = 1.001,
+ comment = "companion to regi-ini.mkiv",
+ author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
+ copyright = "PRAGMA ADE / ConTeXt Development Team",
+ license = "see context related readme files"
+}
-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,
+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
index 07928559060..939d55026f9 100644
--- a/Master/texmf-dist/tex/context/base/regi-8859-4.lua
+++ b/Master/texmf-dist/tex/context/base/regi-8859-4.lua
@@ -1,26 +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
+if not modules then modules = { } end modules ['regi-8859-4'] = {
+ version = 1.001,
+ comment = "companion to regi-ini.mkiv",
+ author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
+ copyright = "PRAGMA ADE / ConTeXt Development Team",
+ license = "see context related readme files"
+}
-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,
+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
index 5f6df9242e0..ab093d139a8 100644
--- a/Master/texmf-dist/tex/context/base/regi-8859-5.lua
+++ b/Master/texmf-dist/tex/context/base/regi-8859-5.lua
@@ -1,26 +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
+if not modules then modules = { } end modules ['regi-8859-5'] = {
+ version = 1.001,
+ comment = "companion to regi-ini.mkiv",
+ author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
+ copyright = "PRAGMA ADE / ConTeXt Development Team",
+ license = "see context related readme files"
+}
-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,
+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
index 86ed0b262e3..e094129f271 100644
--- a/Master/texmf-dist/tex/context/base/regi-8859-6.lua
+++ b/Master/texmf-dist/tex/context/base/regi-8859-6.lua
@@ -1,26 +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
+if not modules then modules = { } end modules ['regi-8859-6'] = {
+ version = 1.001,
+ comment = "companion to regi-ini.mkiv",
+ author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
+ copyright = "PRAGMA ADE / ConTeXt Development Team",
+ license = "see context related readme files"
+}
-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,
+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
index bb110fbfa42..cee253582f4 100644
--- a/Master/texmf-dist/tex/context/base/regi-8859-7.lua
+++ b/Master/texmf-dist/tex/context/base/regi-8859-7.lua
@@ -1,26 +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
+if not modules then modules = { } end modules ['regi-8859-7'] = {
+ version = 1.001,
+ comment = "companion to regi-ini.mkiv",
+ author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
+ copyright = "PRAGMA ADE / ConTeXt Development Team",
+ license = "see context related readme files"
+}
-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,
+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
index a6821499add..062b080adf1 100644
--- a/Master/texmf-dist/tex/context/base/regi-8859-8.lua
+++ b/Master/texmf-dist/tex/context/base/regi-8859-8.lua
@@ -1,26 +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
+if not modules then modules = { } end modules ['regi-8859-8'] = {
+ version = 1.001,
+ comment = "companion to regi-ini.mkiv",
+ author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
+ copyright = "PRAGMA ADE / ConTeXt Development Team",
+ license = "see context related readme files"
+}
-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,
+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
index 44a3a18abd4..2af118a8c87 100644
--- a/Master/texmf-dist/tex/context/base/regi-8859-9.lua
+++ b/Master/texmf-dist/tex/context/base/regi-8859-9.lua
@@ -1,26 +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
+if not modules then modules = { } end modules ['regi-8859-9'] = {
+ version = 1.001,
+ comment = "companion to regi-ini.mkiv",
+ author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
+ copyright = "PRAGMA ADE / ConTeXt Development Team",
+ license = "see context related readme files"
+}
-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,
+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
index aa374193aed..a37ca46b4fe 100644
--- a/Master/texmf-dist/tex/context/base/regi-cp1250.lua
+++ b/Master/texmf-dist/tex/context/base/regi-cp1250.lua
@@ -1,26 +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
+if not modules then modules = { } end modules ['regi-cp1250'] = {
+ version = 1.001,
+ comment = "companion to regi-ini.mkiv",
+ author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
+ copyright = "PRAGMA ADE / ConTeXt Development Team",
+ license = "see context related readme files"
+}
-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,
+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
index 88204df368c..42fe0b34092 100644
--- a/Master/texmf-dist/tex/context/base/regi-cp1251.lua
+++ b/Master/texmf-dist/tex/context/base/regi-cp1251.lua
@@ -1,26 +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
+if not modules then modules = { } end modules ['regi-cp1251'] = {
+ version = 1.001,
+ comment = "companion to regi-ini.mkiv",
+ author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
+ copyright = "PRAGMA ADE / ConTeXt Development Team",
+ license = "see context related readme files"
+}
-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,
+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
index 910656edfa6..74b2f3761c8 100644
--- a/Master/texmf-dist/tex/context/base/regi-cp1252.lua
+++ b/Master/texmf-dist/tex/context/base/regi-cp1252.lua
@@ -1,26 +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
+if not modules then modules = { } end modules ['regi-cp1252'] = {
+ version = 1.001,
+ comment = "companion to regi-ini.mkiv",
+ author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
+ copyright = "PRAGMA ADE / ConTeXt Development Team",
+ license = "see context related readme files"
+}
-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,
+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-cp1253.lua b/Master/texmf-dist/tex/context/base/regi-cp1253.lua
index 6d854e96700..f14a186bb94 100644
--- a/Master/texmf-dist/tex/context/base/regi-cp1253.lua
+++ b/Master/texmf-dist/tex/context/base/regi-cp1253.lua
@@ -1,26 +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
+if not modules then modules = { } end modules ['regi-cp1253'] = {
+ version = 1.001,
+ comment = "companion to regi-ini.mkiv",
+ author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
+ copyright = "PRAGMA ADE / ConTeXt Development Team",
+ license = "see context related readme files"
+}
-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,
+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
index 12f094b4640..76fbe9c49f2 100644
--- a/Master/texmf-dist/tex/context/base/regi-cp1254.lua
+++ b/Master/texmf-dist/tex/context/base/regi-cp1254.lua
@@ -1,26 +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
+if not modules then modules = { } end modules ['regi-cp1254'] = {
+ version = 1.001,
+ comment = "companion to regi-ini.mkiv",
+ author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
+ copyright = "PRAGMA ADE / ConTeXt Development Team",
+ license = "see context related readme files"
+}
-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,
+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
index 77119da565f..9ea807fbdfb 100644
--- a/Master/texmf-dist/tex/context/base/regi-cp1255.lua
+++ b/Master/texmf-dist/tex/context/base/regi-cp1255.lua
@@ -1,26 +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
+if not modules then modules = { } end modules ['regi-cp1255'] = {
+ version = 1.001,
+ comment = "companion to regi-ini.mkiv",
+ author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
+ copyright = "PRAGMA ADE / ConTeXt Development Team",
+ license = "see context related readme files"
+}
-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,
+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
index 9bd3dbd739b..e77525bcf83 100644
--- a/Master/texmf-dist/tex/context/base/regi-cp1256.lua
+++ b/Master/texmf-dist/tex/context/base/regi-cp1256.lua
@@ -1,26 +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
+if not modules then modules = { } end modules ['regi-cp1256'] = {
+ version = 1.001,
+ comment = "companion to regi-ini.mkiv",
+ author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
+ copyright = "PRAGMA ADE / ConTeXt Development Team",
+ license = "see context related readme files"
+}
-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,
+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
index d043b256f30..1b5d5337989 100644
--- a/Master/texmf-dist/tex/context/base/regi-cp1257.lua
+++ b/Master/texmf-dist/tex/context/base/regi-cp1257.lua
@@ -1,26 +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
+if not modules then modules = { } end modules ['regi-cp1257'] = {
+ version = 1.001,
+ comment = "companion to regi-ini.mkiv",
+ author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
+ copyright = "PRAGMA ADE / ConTeXt Development Team",
+ license = "see context related readme files"
+}
-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,
+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
index 45fa7eca081..271db30096e 100644
--- a/Master/texmf-dist/tex/context/base/regi-cp1258.lua
+++ b/Master/texmf-dist/tex/context/base/regi-cp1258.lua
@@ -1,26 +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
+if not modules then modules = { } end modules ['regi-cp1258'] = {
+ version = 1.001,
+ comment = "companion to regi-ini.mkiv",
+ author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
+ copyright = "PRAGMA ADE / ConTeXt Development Team",
+ license = "see context related readme files"
+}
-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,
+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
index 04b93db35b0..83739760758 100644
--- a/Master/texmf-dist/tex/context/base/regi-ini.lua
+++ b/Master/texmf-dist/tex/context/base/regi-ini.lua
@@ -1,13 +1,13 @@
if not modules then modules = { } end modules ['regi-ini'] = {
version = 1.001,
- comment = "companion to regi-ini.tex",
+ comment = "companion to regi-ini.mkiv",
author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
copyright = "PRAGMA ADE / ConTeXt Development Team",
license = "see context related readme files"
}
local utf = unicode.utf8
-local char, utfchar = string.char, utf.char
+local char, utfchar, gsub = string.char, utf.char, string.gsub
local texsprint = tex.sprint
local ctxcatcodes = tex.ctxcatcodes
@@ -51,7 +51,7 @@ function regimes.load(regime)
environment.loadluafile("regi-"..regime, 1.001)
if regimes.data[regime] then
regimes.utf[regime] = { }
- for k,v in pairs(regimes.data[regime]) do
+ for k,v in next, regimes.data[regime] do
regimes.utf[regime][char(k)] = utfchar(v)
end
end
@@ -63,7 +63,7 @@ function regimes.translate(line,regime)
if regime and line then
local rur = regimes.utf[regime]
if rur then
- return line:gsub("(.)", rur) -- () redundant
+ return (gsub(line,"(.)",rur)) -- () redundant
end
end
return line
diff --git a/Master/texmf-dist/tex/context/base/regi-ini.mkiv b/Master/texmf-dist/tex/context/base/regi-ini.mkiv
index 5a3be77a2c6..db7a224ac9a 100644
--- a/Master/texmf-dist/tex/context/base/regi-ini.mkiv
+++ b/Master/texmf-dist/tex/context/base/regi-ini.mkiv
@@ -25,7 +25,7 @@
%D \macros
%D {defineregimesynonym,trueregimename}
-\def\defineregimesynonym
+\unexpanded\def\defineregimesynonym
{\dodoubleargument\dodefineregimesynonym}
\def\dodefineregimesynonym[#1][#2]%
diff --git a/Master/texmf-dist/tex/context/base/regi-utf.mkii b/Master/texmf-dist/tex/context/base/regi-utf.mkii
index 01556ab2d04..b3423b15af5 100644
--- a/Master/texmf-dist/tex/context/base/regi-utf.mkii
+++ b/Master/texmf-dist/tex/context/base/regi-utf.mkii
@@ -32,6 +32,7 @@
% ÙÚÛÜùúû
% Ýýÿ
% ß
+% Ţţ
\unprotect
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 45bca44f235..a55eb95f18d 100644
--- a/Master/texmf-dist/tex/context/base/s-abr-01.tex
+++ b/Master/texmf-dist/tex/context/base/s-abr-01.tex
@@ -315,13 +315,10 @@
\def\NEWPAGE {\SystemSpecialB{newpage}}
\def\NEWLINE {\SystemSpecialB{newline}}
-
\doifmodeelse {mkiv} {
- \def\THANH{Han The Thanh} % todo
+ \unexpanded\def\THANH{H\agrave n Th\ecircumflexacute\ Th\agrave nh}
} {
- \def\THANH{H\`an Th\^e\llap{\raise 0.5ex\hbox{\'{}}} Th\`anh}
+ \unexpanded\def\THANH{H\`an Th\^e\llap{\raise 0.5ex\hbox{\'{}}} Th\`anh}
}
-%def\THANH {H\`an Th\ecircumflexacute\ Th\`anh}
-
\endinput
diff --git a/Master/texmf-dist/tex/context/base/s-chi-00.tex b/Master/texmf-dist/tex/context/base/s-chi-00.tex
index add0b333b00..bec86f6d2f0 100644
--- a/Master/texmf-dist/tex/context/base/s-chi-00.tex
+++ b/Master/texmf-dist/tex/context/base/s-chi-00.tex
@@ -12,7 +12,7 @@
%C therefore copyrighted by \PRAGMA. See mreadme.pdf for
%C details.
-\input font-chi.tex % faster than \setupbodyfont[chi]
+\input font-chi.mkii % faster than \setupbodyfont[chi]
\mainlanguage [cn]
diff --git a/Master/texmf-dist/tex/context/base/s-fnt-10.tex b/Master/texmf-dist/tex/context/base/s-fnt-10.tex
index 95e9282b8b2..216d9d2326e 100644
--- a/Master/texmf-dist/tex/context/base/s-fnt-10.tex
+++ b/Master/texmf-dist/tex/context/base/s-fnt-10.tex
@@ -45,6 +45,7 @@ function fonts.show_all()
sprint(tex.ctxcatcodes,format("\\stoptabulatehead"))
sprint(tex.ctxcatcodes,format("\\starttabulate[|l|c|l|p|p|p|]"))
for k, unicode in ipairs(table.sortedkeys(chars)) do
+-- for unicode, _ in table.sortedpairs(chars) do
if unicode >= 0 then
local chr, des, dat = chars[unicode], descs[unicode], data[unicode]
local index = chr.index or 0
diff --git a/Master/texmf-dist/tex/context/base/s-fnt-25.tex b/Master/texmf-dist/tex/context/base/s-fnt-25.tex
index 83a3ee58669..a8b398716c7 100644
--- a/Master/texmf-dist/tex/context/base/s-fnt-25.tex
+++ b/Master/texmf-dist/tex/context/base/s-fnt-25.tex
@@ -11,11 +11,15 @@
%C therefore copyrighted by \PRAGMA. See mreadme.pdf for
%C details.
+\def\enableshowmathfontvirtual
+ {\ctxlua{fonts.tfm.auto_cleanup=false}}
+
\def\showmathfontcharacters
{\dodoubleempty\doshowmathfontcharacters}
\def\doshowmathfontcharacters[#1][#2]%
{\begingroup
+ \dontcomplain
\doifelsenothing{#1}
{\definedfont[MathRoman*math-text]}
{\definedfont[#1]}%
@@ -40,12 +44,15 @@
\blank}
\def\mathfontlistentryhexdectit#1#2#3%
- {#1: \ruledhbox{\char#2}\enspace#3\par
+ {#1: \char#2\enspace\ruledhbox{\char#2}\enspace#3\par
\advance\leftskip 1em\relax}
\def\mathfontlistentrywdhtdpic#1#2#3#4%
{width: #1, height: #2, depth: #3, italic: #4\par}
+\def\mathfontlistentryresource#1%
+ {virtual: #1\par}
+
\def\mathfontlistentrynext#1#2%
{#1~\ruledhbox{\char#2}}
@@ -76,6 +83,15 @@ function document.showmathfont(id,slot)
local function report(...)
tex.sprint(tex.ctxcatcodes,string.format(...))
end
+ local virtual, names = tfmdata.type == "virtual", { }
+ if virtual then
+ for k, v in ipairs(tfmdata.fonts) do
+ local name = fonts.ids[v.id].name
+ names[k] = (name and file.basename(name)) or v.id
+ end
+ end
+ local round = math.round
+-- print(table.serialize(names))
for _, s in next, sorted do
local char = characters[s]
if char then
@@ -83,7 +99,23 @@ function document.showmathfont(id,slot)
local cnext, cvert_variants, choriz_variants = char.next, char.vert_variants, char.horiz_variants
report("\\startmathfontlistentry")
report("\\mathfontlistentryhexdectit{U+%05X}{%s}{%s}",s,s,string.lower(info.description or "no description, private to font"))
- report("\\mathfontlistentrywdhtdpic{%s}{%s}{%s}{%s}",char.width or 0,char.height or 0,char.depth or 0,char.italic or 0)
+ report("\\mathfontlistentrywdhtdpic{%s}{%s}{%s}{%s}",round(char.width or 0),round(char.height or 0),round(char.depth or 0),round(char.italic or 0))
+ if virtual then
+ local commands = char.commands
+ if commands then
+ local t = { }
+ for i=1,#commands do
+ local ci = commands[i]
+ if ci[1] == "slot" then
+ local fnt, idx = ci[2], ci[3]
+ t[#t+1] = string.format("%s/%0X",names[fnt] or fnt,idx)
+ end
+ end
+ if #t > 0 then
+ report("\\mathfontlistentryresource{%s}",table.concat(t,", "))
+ end
+ end
+ end
if info.mathclass then
report("\\mathfontlistentryclassname{%s}{%s}",info.mathclass,info.mathname or "no name")
end
@@ -124,7 +156,7 @@ function document.showmathfont(id,slot)
if choriz_variants then
local t = { }
for k, v in next, choriz_variants do
- t[#t+1] = string.format("\\fontlistentryvariants{%s}",v.glyph)
+ t[#t+1] = string.format("\\fontlistentryvariants{U+%05X}{%s}",v.glyph,v.glyph)
end
choriz_variants = t
end
@@ -147,7 +179,7 @@ end
\endinput
-\startbuffer mathtest
+\startbuffer[mathtest]
\begingroup\mm\mr\showmathfontcharacters\endgroup
\stopbuffer
diff --git a/Master/texmf-dist/tex/context/base/s-fnt-26.tex b/Master/texmf-dist/tex/context/base/s-fnt-26.tex
new file mode 100644
index 00000000000..026abf29be3
--- /dev/null
+++ b/Master/texmf-dist/tex/context/base/s-fnt-26.tex
@@ -0,0 +1,73 @@
+%D \module
+%D [ file=s-fnt-26,
+%D version=2009.10.26,
+%D title=\CONTEXT\ Style File,
+%D subtitle=Goodies Tables,
+%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.
+
+\startluacode
+
+ function document.show_goodies_stylistics(name)
+ local goodies = fonts.goodies.get(name)
+ local stylistics = goodies and goodies.stylistics
+ if stylistics then
+ local col, row, type = context.NC, context.NR, context.type
+ context.starttabulate { "|l|pl|" }
+ col() context("feature") col() context("meaning") col() row()
+ for feature, meaning in table.sortedpairs(stylistics) do
+ col() type(feature) col() type(meaning) col() row()
+ end
+ context.stoptabulate()
+ end
+ end
+
+ function document.show_goodies_featuresets(name)
+ local goodies = fonts.goodies.get(name)
+ local featuresets = goodies and goodies.featuresets
+ if featuresets then
+ local col, row, type = context.NC, context.NR, context.type
+ context.starttabulate { "|l|pl|" }
+ col() context("featureset") col() context("definitions") col() row()
+ for featureset, definitions in table.sortedpairs(featuresets) do
+ col() type(featureset) col()
+ for k, v in table.sortedpairs(definitions) do
+ type(string.format("%s=%s",k,tostring(v)))
+ context.quad()
+ end
+ col() row()
+ end
+ context.stoptabulate()
+ end
+ end
+
+ function document.show_goodies_colorschemes(name)
+ local goodies = fonts.goodies.get(name)
+ local colorschemes = goodies and goodies.colorschemes
+ if colorschemes then
+ local col, row, type = context.NC, context.NR, context.type
+ context.starttabulate { "|l|pl|" }
+ col() context("colorscheme") col() context("numbers") col() row()
+ for colorscheme, numbers in table.sortedpairs(colorschemes) do
+ col() type(colorscheme) col()
+ for i=1,#numbers do
+ type(i)
+ context.quad()
+ end
+ col() row()
+ end
+ context.stoptabulate()
+ end
+
+\stopluacode
+
+\def\showgoodiesstylistics #1{\ctxlua{document.show_goodies_stylistics ("#1")}}
+\def\showgoodiesfeaturesets #1{\ctxlua{document.show_goodies_featuresets ("#1")}}
+\def\showgoodiescolorschemes#1{\ctxlua{document.show_goodies_colorschemes("#1")}}
+
+\endinput
diff --git a/Master/texmf-dist/tex/context/base/s-inf-01.tex b/Master/texmf-dist/tex/context/base/s-inf-01.tex
new file mode 100644
index 00000000000..a2a693ae214
--- /dev/null
+++ b/Master/texmf-dist/tex/context/base/s-inf-01.tex
@@ -0,0 +1,203 @@
+%D \module
+%D [ file=s-inf-01,
+%D version=2009.07.09,
+%D title=\CONTEXT\ Style File,
+%D subtitle=Information 1 (\MKII/\MKIV\ usage),
+%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 Some day I will generalize this table mechanism.
+
+\startluacode
+ local format, gsub, find, match = string.format, string.gsub, string.find, string.match
+ local texsprint, ctxcatcodes = tex.sprint, tex.ctxcatcodes
+
+ local list, size, comp, used, nope = { }, { }, { }, { mkii = { }, mkiv = { } }, { 0, 0, 0, 0 }
+
+ local omit = {
+ "char%-def%.lua",
+ "mult%-def%.lua", "mult%-..%.tex", "mult%-m..%.tex",
+ }
+ local skip = {
+ "prag%-.*%.tex", "docs%-.*.tex", "list%-.*%.tex", "test%-.*%.tex", "demo%-.*%.tex",
+ "opti%-.*%.tex", "chrt%-.*%.tex",
+ }
+ local types = {
+ "tex", "mkii", "mkiv", "lua"
+ }
+
+ local function collect(list,suffix,n)
+ local path = file.dirname(resolvers.find_file("context.tex"),".")
+ local pattern = path .. "/*." .. suffix
+ local texfiles = dir.glob(pattern)
+ for _, name in ipairs(texfiles) do
+ local base = file.basename(name)
+ local category = match(base,"^([a-z][a-z][a-z][a-z])%-[a-z0-9]+%.[a-z]+")
+ if category and lfs.isfile(name) then
+ local okay = true
+ for s=1,#skip do
+ if find(base,skip[s]) then
+ okay = false
+ break
+ end
+ end
+ if okay then
+ local lm, sm, cm = list[category], size[category], comp[category]
+ if not lm then
+ lm, sm, cm = { 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0 }
+ list[category], size[category], comp[category] = lm, sm, cm
+ end
+ lm[n] = lm[n] + 1
+ local done = true
+ for o=1,#omit do
+ if find(base,omit[o]) then
+ done = false
+ break
+ end
+ end
+ local data = io.loaddata(name)
+ if suffix == "lua" then
+ data = gsub(data,"%-%-%[%[.-%]%]%-%-","")
+ data = gsub(data,"%-%-.-[\n\r]","")
+ else
+ data = gsub(data,"%%.-[\n\r]","")
+ end
+ data = gsub(data,"%s","")
+ sm[n+4] = sm[n+4] + #data
+ if done then
+ sm[n] = sm[n] + #data
+ else
+ cm[n] = cm[n] + 1
+ end
+ end
+ end
+ end
+ end
+
+ local function prepare(what)
+ if next(list) then
+ -- already loaded
+ else
+ for k, v in ipairs(types) do
+ collect(list,v,k)
+ end
+ for category, _ in pairs(list) do
+ pattern ="{"..category.."%-"
+ for suffix, t in pairs(used) do
+ local data = io.loaddata(resolvers.find_file("context."..suffix))
+ if find(data,pattern) then
+ t[category] = true
+ end
+ end
+ end
+ end
+ local max, what = 0, (what == "size" and size) or list
+ for k, v in table.sortedpairs(what) do
+ for i=1,4 do if v[i] > max then max = v[i] end end
+ end
+ return max, what, function(n) return n/max end
+ end
+
+ function document.context_state_1(what)
+ local max, what, norm = prepare(what)
+ texsprint(ctxcatcodes,"\\starttabulate[|Tc|T|T|T|T|]")
+ texsprint(ctxcatcodes,"\\NC category\\NC")
+ for i, t in ipairs(types) do
+ local n, m = 0, 0
+ for k, v in pairs(list) do
+ local nn, mm = what[k][i], what[k][i+4]
+ n = n + nn
+ m = m + (mm or nn)
+ end
+ texsprint(ctxcatcodes,format("\\Top{%s}{%s}{%s}{%s}\\NC",t,norm(max),n,m))
+ end
+ texsprint(ctxcatcodes,"\\NC\\NR\\HL")
+ for k, v in table.sortedpairs(what) do
+ local c = (what == size and comp[k]) or nope
+ local cat = format("%s~%s~~%s",(used.mkii[k] and "ii") or "~~",(used.mkiv[k] and "iv") or "~~",k)
+ texsprint(ctxcatcodes,"\\NC",cat,"\\NC")
+ for i, t in ipairs(types) do
+ texsprint(ctxcatcodes,format("\\Bar{%s}{%s}{%s}{%s}\\NC",t,v[i],c[i],norm(v[i])))
+ end
+ texsprint(ctxcatcodes,"\\NR")
+ end
+ texsprint(ctxcatcodes,"\\stoptabulate")
+ end
+
+ function document.context_state_2(what)
+ local max, what, norm = prepare(what)
+ for k, v in table.sortedpairs(what) do
+ local c = (what == size and comp[k]) or nope
+ texsprint(ctxcatcodes,format("\\StartUp{%s}",k))
+ for i, t in ipairs(types) do
+ texsprint(ctxcatcodes,format("\\Up{%s}{%s}",t,norm(v[i])))
+ end
+ texsprint(ctxcatcodes,"\\StopUp")
+ end
+ end
+
+\stopluacode
+
+\definecolor[bar:tex] [middlegreen]
+\definecolor[bar:mkii][middleblue]
+\definecolor[bar:mkiv][middlered]
+\definecolor[bar:lua] [middlegray]
+
+\def\Top#1#2#3#4%
+ {\hbox to 5em{\hss#3}%
+ \enspace
+ \hbox to #2\dimexpr 20em\relax{#1\ifnum#3=#4\else~#4\rlap{~+}\fi\hss}}
+
+\def\Bar#1#2#3#4%
+ {\ifcase#2\else
+ \hbox to 5em{\hss\ifcase#3\else\llap{-~}\fi#2}%
+ \enspace
+ \blackrule[color=bar:#1,width=#4\dimexpr 20em\relax,height=.8\strutht]%
+ \fi}
+
+\newcount\UpCounter
+
+\def\StartUp#1%
+ {\dontleavehmode\framed[frame=off,align={middle,low},height=18em]\bgroup
+ \def\StopUp
+ {\par\nointerlineskip\blackrule[height=1pt,width=4em,depth=0pt,color=darkgray]%
+ \par\tttf\strut#1\par
+ \egroup
+ \ifnum\UpCounter=17 \par \UpCounter\zerocount\else \kern1em \advance\UpCounter\plusone \fi}}
+
+\def\Up#1#2%
+ {\scratchdimen#2\dimexpr 16em\relax
+ \ifdim\scratchdimen=\zeropoint
+ \kern1em
+ \else
+ \ifdim\scratchdimen<\onepoint \scratchdimen\onepoint \fi
+ \blackrule[color=bar:#1,height=\scratchdimen,width=1em]%
+ \fi}
+
+\def\Show#1#2#3%
+ {\startTEXpage[offset=1em,width=fit]
+ \hbox{\tttf\strut\currentdate~-~#1}
+ \ctxlua{document.context_state_\number#2("#3")}
+ \stopTEXpage}
+
+% \doifnotmode{demo}{\endinput}
+
+\starttext
+ \Show
+ {The number of files used in ConTeXt (modules and styles are excluded).}
+ {1}{number}
+ \Show
+ {The size of (core) files used in ConTeXt (- indicates exclusion of large data files; + indicates inclusion of large data files; comment and spaces removed.)}
+ {1}{size}
+ \Show
+ {The relative number of files used in ConTeXt (tex, mkii, mkiv, lua).}
+ {2}{number}
+ \Show
+ {The relative size of files used in ConTeXt (tex, mkii, mkiv, lua).}
+ {2}{size}
+\stoptext
diff --git a/Master/texmf-dist/tex/context/base/s-inf-02.tex b/Master/texmf-dist/tex/context/base/s-inf-02.tex
new file mode 100644
index 00000000000..77a3f650c51
--- /dev/null
+++ b/Master/texmf-dist/tex/context/base/s-inf-02.tex
@@ -0,0 +1,27 @@
+%D \module
+%D [ file=s-inf-02,
+%D version=2009.11.25,
+%D title=\CONTEXT\ Style File,
+%D subtitle=Information 2 (filenames),
+%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.
+
+\starttext
+
+\starttabulate [|T|T|]
+ \NC \type{\jobname} \NC \jobname \NC \NR
+ \NC \type{\jobfilename} \NC \jobfilename \NC \NR
+ \NC \type{\jobfilesuffix} \NC \jobfilesuffix \NC \NR
+ \NC \type{\inputfilename} \NC \inputfilename \NC \NR
+ \NC \type{\inputfilebarename} \NC \inputfilebarename \NC \NR
+ \NC \type{\inputfilesuffix} \NC \inputfilesuffix \NC \NR
+ \NC \type{\outputfilename} \NC \outputfilename \NC \NR
+ \NC \type{\operatingsystem} \NC \operatingsystem \NC \NR
+\stoptabulate
+
+\stoptext
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 807ae42efbd..865132f9743 100644
--- a/Master/texmf-dist/tex/context/base/s-map-10.tex
+++ b/Master/texmf-dist/tex/context/base/s-map-10.tex
@@ -102,11 +102,12 @@
\definetypeface[map][tt][mono] [modern] [default][encoding=\typescripttwo]
\definetypeface[map][mm][math] [euler] [default][encoding=\typescripttwo]
- \usemathcollection[eul]
+% \usemathcollection[eul]
\stoptypescript
% activate protruding
+
\setupinterlinespace[line=11pt]
\setupfontsynonym[handling=pure]
diff --git a/Master/texmf-dist/tex/context/base/s-mod-00.tex b/Master/texmf-dist/tex/context/base/s-mod-00.tex
index d16688de553..270f7a9b4c7 100644
--- a/Master/texmf-dist/tex/context/base/s-mod-00.tex
+++ b/Master/texmf-dist/tex/context/base/s-mod-00.tex
@@ -22,7 +22,10 @@
\usemodule[units]
-\enableactivediscretionaries \newprettytrue
+\doifnotmode{mkiv}{
+ \enableactivediscretionaries
+ \newprettytrue
+}
\unprotect
@@ -57,7 +60,8 @@
\getrawparameters[Module][type=tex,#1]}
\def\startmodule
- {\dosingleempty\dostartmodule}
+ {\starttext
+ \dosingleempty\dostartmodule}
\def\complexmodule[#1]%
{\startglobal % i.v.m. \bgroup in \startdocumentation
@@ -71,7 +75,8 @@
[\v!index]
[\c!balance=\v!yes,
\c!indicator=\v!no,
- \c!criterium=\v!text]}
+ \c!criterium=\v!text]
+ \stoptext}
\def\simplemodule#1%
{\type{#1}}
diff --git a/Master/texmf-dist/tex/context/base/s-mod-01.tex b/Master/texmf-dist/tex/context/base/s-mod-01.tex
index dc695a44d72..4454986ce6d 100644
--- a/Master/texmf-dist/tex/context/base/s-mod-01.tex
+++ b/Master/texmf-dist/tex/context/base/s-mod-01.tex
@@ -16,10 +16,19 @@
\usemodule[mod-00,abr-01]
+\dontcomplain
+
\unprotect
\setupbodyfont
- [10pt,ams]
+ [10pt]
+
+\definetypeface
+ [narrowtt] [tt]
+ [mono] [modern-cond] [default] [encoding=\defaultencoding]
+
+\setuptyping[\v!typing][\c!style=\narrowtt]
+\setuptype [\v!type] [\c!style=\narrowtt]
\mainlanguage
[en]
@@ -44,7 +53,7 @@
\c!topspace=2cm,
\c!header=1.25cm,
\c!footer=1.25cm,
- \c!height=25cm,
+ \c!height=middle,
\c!style=\ss]
\setupsetup
@@ -60,9 +69,9 @@
\setuppagenumbering
[\c!location=]
-\setupfootertexts
+\expanded{\setupfootertexts
[\v!edge]
- [][\v!pagenumber]
+ [][\v!pagenumber]}
\startmode[single]
diff --git a/Master/texmf-dist/tex/context/base/s-mod.ctx b/Master/texmf-dist/tex/context/base/s-mod.ctx
new file mode 100644
index 00000000000..a85c991a57b
--- /dev/null
+++ b/Master/texmf-dist/tex/context/base/s-mod.ctx
@@ -0,0 +1,24 @@
+<?xml version='1.0' standalone='yes'?>
+
+<ctx:job>
+ <ctx:message>TeX Documentation Generator</ctx:message>
+ <ctx:preprocess>
+ <ctx:processors>
+ <ctx:processor name='ted'>mtxrun --script modules --convert --prep <ctx:value name='old'/></ctx:processor>
+ </ctx:processors>
+ <ctx:files>
+ <ctx:file processor='ted'><ctx:value name='old'/></ctx:file>
+ </ctx:files>
+ </ctx:preprocess>
+ <ctx:flags>
+ <!-- ctx:flag>purge</ctx:flag -->
+ <ctx:flag>global</ctx:flag>
+ <ctx:flag>prep</ctx:flag>
+ </ctx:flags>
+ <ctx:process>
+ <ctx:resources>
+ <ctx:module>mod-01</ctx:module>
+ </ctx:resources>
+ </ctx:process>
+</ctx:job>
+
diff --git a/Master/texmf-dist/tex/context/base/s-pre-60.tex b/Master/texmf-dist/tex/context/base/s-pre-60.tex
index 89ddbbba403..f12b98b0633 100644
--- a/Master/texmf-dist/tex/context/base/s-pre-60.tex
+++ b/Master/texmf-dist/tex/context/base/s-pre-60.tex
@@ -11,7 +11,7 @@
%C therefore copyrighted by \PRAGMA. See mreadme.pdf for
%C details.
-\startmode[paper]
+\startmode[paper,print]
\let\StartSteps\relax
\let\StopSteps \relax
\let\FlushStep \relax
diff --git a/Master/texmf-dist/tex/context/base/s-pre-64.tex b/Master/texmf-dist/tex/context/base/s-pre-64.tex
index bdc17e18ce2..b9dc10002c8 100644
--- a/Master/texmf-dist/tex/context/base/s-pre-64.tex
+++ b/Master/texmf-dist/tex/context/base/s-pre-64.tex
@@ -131,7 +131,7 @@
\def\StartItem
{\blank[line]
\begingroup
- \EveryPar {\AdaptShape}} % beware: \ABBREV aan gegin gaat fout
+ \EveryPar {\AdaptShape}} % beware: \ABBREV aan begin gaat fout
\def\StopItem
{\endgraf
diff --git a/Master/texmf-dist/tex/context/base/s-ptj-01.tex b/Master/texmf-dist/tex/context/base/s-ptj-01.tex
index 188af73bd7e..9990bf00615 100644
--- a/Master/texmf-dist/tex/context/base/s-ptj-01.tex
+++ b/Master/texmf-dist/tex/context/base/s-ptj-01.tex
@@ -1,29 +1,29 @@
%D \module
%D [ file=s-ptj-01,
-%D version=2006.11.28,
+%D version=2009.12.18,
%D title=\CONTEXT\ Style File,
%D subtitle=PracTeX Journal Style,
%D author=Aditya Mahajan,
%D email=adityam at umich dot edu,
%D date=\currentdate,
-%D copyright=2006 Aditya Mahajan]
+%D copyright=2009 Aditya Mahajan]
%C
%C This module is part of the \CONTEXT\ macro||package and is
%C therefore copyrighted by \PRAGMA. See mreadme.pdf for
%C details.
%M % These macros are needed to compile the documentation.
-%M \def\PracTeX{Prac\kern-0.07em\TeX}
-%M \def\PRACTEX{\PracTeX}
-%M \def\TPJ {The \PRACTEX\ Journal}
-%M \useurl[TPJ][http://www.tug.org/pracjourn/][][\TPJ]
-%M \useurl[texgyre][http://www.gust.org.pl/projects/e-foundry/tex-gyre/]
+%M \def\PracTeX {Prac\kern-0.07em\TeX}
+%M \def\PRACTEX {\PracTeX}
+%M \def\pracjourn {The \PRACTEX\ Journal}
+%M \useurl[pracjourn][http://www.tug.org/pracjourn/][][\pracjourn]
+%M \useurl[texgyre] [http://www.gust.org.pl/projects/e-foundry/tex-gyre/]
\writestatus {loading} {Context Module for the PracTeX Journal}
-%D This module is for producing acticles for \from[TPJ]. It merely copies the
+%D This module is for producing acticles for \from[pracjourn]. It merely copies the
%D layout of the the \LATEX\ class \filename{pracjourn.cls} available from
-%D \TPJ\ website (\url[TPJ]). This module has a filename synonym
+%D \pracjourn\ website (\url[pracjourn]). This module has a filename synonym
%D \filename{pracjourn}. So to use this module, you can write:
%D \starttyping
%D \usemodule[pracjourn]
@@ -42,8 +42,8 @@
\unprotect
-%D First let's setup the paper size and layout for \TPJ. I am actually not
-%D sure about the \quote{official} layout requirement for \TPJ\ and have
+%D First let's setup the paper size and layout for \pracjourn. I am actually not
+%D sure about the \quote{official} layout requirement for \pracjourn\ and have
%D reverse engineered the layout from the typeset \LATEX\ examples. If you
%D feel that anything is wrong here, please let me know.
@@ -68,32 +68,16 @@
footerdistance=.25in,
]
-%D Next we do the font setup. \TPJ\ uses mathpazo for roman and math faces and
+%D Next we do the font setup. \pracjourn\ uses mathpazo for roman and math faces and
%D uses latin modern for sans serif and monotype. For the main face, 12pt is
%D used with a 15.5pt baseline skip. Font protrusion is enabled, but font
-%D expansion is not. We follow these conventions, but use Pagella fonts from
-%D \TEX{gyre} project, and scale latin modern fonts by 1.1 for better
-%D matching. Right now, the \TEX{gyre} fonts are not distributed with
-%D \CONTEXT. They can be downloaded from \url[texgyre]. Most of the numbers
-%D (page numbers, figure numbers, section numbers) are set in oldstyle.
+%D expansion is not. We follow these conventions. \CONTEXT\ uses Pagella fonts
+%D from \TEX{gyre} project, so we use them instead.
\usetypescript [serif,sans,mono] [hanging] [pure]
\setupalign [hanging]
-
-\usetypescriptfile
- [type-gyr]
-
-\definetypeface
- [mainface] [rm] [serif] [palatino] [default] [encoding=texnansi]
-\definetypeface
- [mainface] [ss] [sans] [modern] [default] [encoding=texnansi, rscale=1.1]
-\definetypeface
- [mainface] [tt] [mono] [modern] [default] [encoding=texnansi, rscale=1.1]
-\definetypeface
- [mainface] [mm] [math] [palatino] [default] [encoding=texnansi]
-
-\setupbodyfont
- [mainface,12pt]
+\usetypescript [palatino][encoding=texnansi]
+\setupbodyfont [palatino,12pt]
\definefont [titlefont] [Regular at 20pt]
\definefont [authorfont] [Regular at 14pt]
@@ -164,11 +148,10 @@
after={\blank[big]}]
%D Next we define internal frames to take care of the layout of the extra
-%D material in the title. These start with \type|do...| to prevent clash with
-%D user macros. (I do not like writing @ in macro names).
+%D material in the title.
\defineframed
- [doinfotitle]
+ [pracjourninfotitle]
[ frame=off,
strut=yes,
width=0.1\textwidth,
@@ -178,7 +161,7 @@
]
\defineframed
- [doinfodetails]
+ [pracjourninfodetails]
[ frame=off,
strut=yes,
width=0.85\textwidth,
@@ -187,27 +170,27 @@
location=hanging,
]
-\newif\iftitleskipdone
+\newif\ifpracjourntitleskipdone
-\def\doadditionalinfo#1#2
- {\titleskipdonetrue
+\def\pracjourninfo#1#2%
+ {\pracjourntitleskipdonetrue
\hbox to \textwidth
\bgroup
- \hfill \doinfotitle{#1}
- \hfill \doinfodetails{#2}
+ \hfill \pracjourninfotitle{#1}
+ \hfill \pracjourninfodetails{#2}
\egroup\endgraf}
%D Now we take care of the actual layout of the title. Most of this is
%D heuristic, as I was trying to get the same visual effect as the
%D \filename{pracjourn.cls} class. If something does not match, please let me
-%D know. The additional information is typeset as
+%D know. The information is typeset as
%D \starttyping
%D \hfill <box of .1\textwidth> \hfill <box of .85\textwidth>
%D \stoptyping
%D at 11pt size. We also add the title and author information in the \PDF\
%D metadata.
-\startrawsetups [title]
+\startsetups [title]
% Place the tile and the author
\title{\getvariable{pracjourn}{title}}
\blank[medium]
@@ -217,36 +200,42 @@
% Place the additional information
\bgroup\switchtobodyfont[11pt]
\setupindenting[no]
- \doifdefined{\v!file:::email}
- {\doadditionalinfo{Email}{\tttf\from[email]\relax}}
- \doifdefined{\v!file:::website}
- {\doadditionalinfo{Website}{\from[website]\relax}}
+ \doifurldefinedelse{email}
+ {\pracjourninfo{Email}{\tttf\from[email]\relax}}
+ \empty
+ \doifurldefinedelse{website}
+ {\pracjourninfo{Website}{\from[website]\relax}}
+ \empty
\doifsomething{\getvariable{pracjourn}{address}}
- {\doadditionalinfo{Address}{\getvariable{pracjourn}{address}}}
- \iftitleskipdone \blank[big] \fi
- \doadditionalinfo{Abstract}%
- {\setupindenting[yes]%
- \setupinterlinespace%
+ {\pracjourninfo{Address}{\getvariable{pracjourn}{address}}}
+ \ifpracjourntitleskipdone \blank[big] \fi
+ \pracjourninfo{Abstract}
+ {\setupindenting[yes]
+ \setupinterlinespace
\getbuffer[abstract]
\endgraf}
\egroup
\blank[big]
+ \setups{pracjourndate}
+ % Add information to pdfmetadata
+ \setupinteraction
+ [title={\getvariable{pracjourn}{title}},
+ author={\getvariable{pracjourn}{author}},
+ subtitle={The PracTeX Journal Article}]
+\stopsetups
+
% If revision number is present, write it to \filename{_rev.tex}
% FIXME: Do we need to ensure that the dates and month are two digits?
+\startrawsetups [pracjourndate]
\doifsomething{\getvariable{pracjourn}{revision}}
{\expanded{\setvariables[pracjourn:date][y=,m=,d=,\getvariable{pracjourn}{revision}]}
\immediate\openout \scratchwrite _rev.tex
\immediate\write \scratchwrite
{\getvariable{pracjourn:date}{y}/\getvariable{pracjourn:date}{m}/\getvariable{pracjourn:date}{d}}
\immediate\closeout\scratchwrite}
-% Add information to pdfmetadata
- \setupinteraction
- [title={\getvariable{pracjourn}{title}},
- author={\getvariable{pracjourn}{author}},
- subtitle={The PracTeX Journal Article}]
\stoprawsetups
-%D Next we setup the header and footer for the first page. \TPJ\ formats the
+%D Next we setup the header and footer for the first page. \pracjourn\ formats the
%D header as
%D \startlines
%D The PracTeX Journal, year, No. number
@@ -255,32 +244,38 @@
%D If a copyright notice is present, it is printed right aligned on the bottom
%D of first page. Otherwise the footer on the first page is empty.
-\startlocalsetups [titleheader]
+\startsetups [pracjourntitleheader]
\framed[frame=off,width=\textwidth,align=normal,location=low]
{\small\setupinterlinespace
- \doifelsenothing{\TPJissue}{For submission to \TPJ}{\TPJissue}\endgraf
+ \doifelsenothing{\pracjournissue}
+ {For submission to \pracjourn}
+ {\pracjournissue}
+ \endgraf
\doifelsenothing{\getvariable{pracjourn}{revision}}
- {Draft of \currentdate[year,/,mm,/,dd]}
- {Article revision\space
- \expanded{\date[\getvariable{pracjourn}{revision}][year,/,mm,/,dd]}}
- \endgraf}
-\stoplocalsetups
+ {Draft of \currentdate[year,/,mm,/,dd]}
+ {Article revision\space
+ \expanded{\date[\getvariable{pracjourn}{revision}][year,/,mm,/,dd]}}
+ \endgraf}
+\stopsetups
-\startlocalsetups [titlefooter]
+\startsetups [pracjourntitlefooter]
\framed[frame=off,width=\textwidth,align=flushright,location=low]
- {\small\setupinterlinespace
- \getvariable{pracjourn}{copyright}\endgraf}
-\stoplocalsetups
+ {\small\setupinterlinespace \getvariable{pracjourn}{copyright}\endgraf}
+\stopsetups
-\definetext [titleheader] [header] [\setups{titleheader}][]
-\definetext [titlefooter] [footer] [\setups{titlefooter}]
-\setuphead [title] [header=titleheader,footer=titlefooter]
+\definetext [pracjourntitleheader] [header] [\setups{pracjourntitleheader}][]
+\definetext [pracjourntitlefooter] [footer] [\setups{pracjourntitlefooter}]
+
+\setuphead
+ [title]
+ [header=pracjourntitleheader,
+ footer=pracjourntitlefooter]
%D For rest of the pages, page number is printed on the middle of the footer.
\setuppagenumbering [location={footer,middle}, style=mediaeval]
-%D Next we setup the formating for the sections. \TPJ\ wants font sizes of
+%D Next we setup the formating for the sections. \pracjourn\ wants font sizes of
%D 17pt, 14pt, and 12pt respectively for section, subsection, and
%D subsubsection. By default, \tex{tfa} is 1.2, \tex{tfb} is 1.4, so the sizes
%D come out close to what is required. The section number is typset in
@@ -329,7 +324,7 @@
\def\pracjournfootnote#1{\hbox to 1.5em{#1.}}
-%D \TPJ\ uses dash as the first level of itemize and text period as the second
+%D \pracjourn\ uses dash as the first level of itemize and text period as the second
%D level. The third level is left unspecified.
\definesymbol [1] [{\symbol[dash]}]
@@ -338,13 +333,6 @@
\setupitemize [each] [packed]
\setupitemize [1] [packed,autointro] [margin=1em]
-%D We change \type|\type| so that the argument inside \type|\type| is pretty
-%D printed using \TEX's patterns. Another command \type|\normaltype| can be
-%D used if you do not want the original \type|\type|.
-
-\setuptype [option=TEX]
-\definetype [normaltype] [option=none]
-
%D We enable colors, interaction and bookmarks.
\setupinteraction [state=start,color=darkred,style=normal]
@@ -358,13 +346,13 @@
\setupwhitespace [medium]
\setupblank [medium]
-%D We define logos for \PRACTEX\ and \TPJ. These definitions are copied from
+%D We define logos for \PRACTEX\ and \pracjourn. These definitions are copied from
%D \filename{pracjourn.cls} and can be accessed by \type|\PracTeX|,
-%D \type|\PRACTEX| and \type|\TPJ|.
+%D \type|\PRACTEX| and \type|\pracjourn|.
\def\PracTeX{Prac\kern-0.07em\TeX}
\def\PRACTEX{\PracTeX}
-\def\TPJ {The \PRACTEX\ Journal}
+\def\pracjourn {The \PRACTEX\ Journal}
%D \filename{pracjourn.cls} provides two macros \type|\ctanfile| and
%D \type|\ctanloc|. I am not sure what is the advantage of these macors. If
@@ -372,22 +360,22 @@
%D \CONTEXT. For example
%D \starttyping
%D \useURL[pracjourn][http://ctan.org/get?fn=/macros/contrib/latex/pracjourn][][\mono{CTAN:macros/contrib/latex/pracjourn}]
-%D The \LATEX\ style files for \TPJ\ is localed at \from[pracjourn]
+%D The \LATEX\ style files for \pracjourn\ is localed at \from[pracjourn]
%D \stoptyping
%D For the final version of the paper, the string \quotation{The PracTeX
%D Journal year, No x} is written on the header. This only happens when the
%D current directory contains a file \filename{_iss.tex} which contains string
-%D like \quotation{TPJ 2006 No 04, 2006-11-15}. This step is usually taken in
+%D like \quotation{pracjourn 2006 No 04, 2006-11-15}. This step is usually taken in
%D the final production of the article. If this file is absent, \quotation{For
%D submission to the PracTeX Journal} is written instead. The next macros are
%D used to parse this file.
-\let\TPJissue\empty
+\let\pracjournissue\empty
-\def\parse@iss TPJ #1 No #2, #3-#4-#5\@nil%
+\def\parse@iss pracjourn #1 No #2, #3-#4-#5\@nil%
{\!!counta#2\relax
- \edef\TPJissue{\TPJ, #1, No.\,\the\!!counta}}
+ \edef\pracjournissue{\pracjourn, #1, No.\,\the\!!counta}}
%D Read the \filename{_iss.tex} file, if present to determine the current
%D issue.
diff --git a/Master/texmf-dist/tex/context/base/scrn-bar.mkiv b/Master/texmf-dist/tex/context/base/scrn-bar.mkiv
index fd274419dd9..dbeaf6d7f5a 100644
--- a/Master/texmf-dist/tex/context/base/scrn-bar.mkiv
+++ b/Master/texmf-dist/tex/context/base/scrn-bar.mkiv
@@ -61,8 +61,8 @@
\def\dointeractionbarparentparameter #1#2{\ifx#1\relax\s!empty\else\dointeractionbarparameter #1#2\fi}
\def\dointeractionbarparentparameterhash#1#2{\ifx#1\relax \else\dointeractionbarparameterhash#1#2\fi}
-\def\defineinteractionbar{\dodoubleargument\dodefineinteractionbar}
-\def\setupinteractionbar {\dodoubleempty \dosetupinteractionbar}
+\unexpanded\def\defineinteractionbar{\dodoubleargument\dodefineinteractionbar}
+\unexpanded\def\setupinteractionbar {\dodoubleempty \dosetupinteractionbar}
\def\interactionbar {\dodoubleempty \dointeractionbar}
\def\dosetupinteractionbar[#1][#2]%
diff --git a/Master/texmf-dist/tex/context/base/scrn-but.mkiv b/Master/texmf-dist/tex/context/base/scrn-but.mkiv
index 6beaee75746..9a72a756bd9 100644
--- a/Master/texmf-dist/tex/context/base/scrn-but.mkiv
+++ b/Master/texmf-dist/tex/context/base/scrn-but.mkiv
@@ -39,7 +39,7 @@
%D
%D \showsetup{setupbuttons}
-\def\setupbuttons
+\unexpanded\def\setupbuttons
{\dodoubleargument\getparameters[\??bt]}
\definecomplexorsimpleempty\button
@@ -121,6 +121,7 @@
\c!color=\@@iacolor,
\c!contrastcolor=\@@iacontrastcolor,
\c!samepage=\v!yes,
- \c!unknownreference=\v!yes]
+ \c!unknownreference=\v!yes,
+ \c!distance=\zeropoint] % for menubuttons
\protect \endinput
diff --git a/Master/texmf-dist/tex/context/base/scrn-fld.mkii b/Master/texmf-dist/tex/context/base/scrn-fld.mkii
index 85e4aa738be..4e1b34fa974 100644
--- a/Master/texmf-dist/tex/context/base/scrn-fld.mkii
+++ b/Master/texmf-dist/tex/context/base/scrn-fld.mkii
@@ -340,6 +340,8 @@
%D \field[XXXX]
%D \fitfield[XXXX]
%D \stoptyping
+%D
+%D Beware, in \MKII\ we don't support autocloning for radiofields.
\newif\ifdefinemainfield \definemainfieldfalse
diff --git a/Master/texmf-dist/tex/context/base/scrn-fld.mkiv b/Master/texmf-dist/tex/context/base/scrn-fld.mkiv
index 4bcc0eabd55..f895089e884 100644
--- a/Master/texmf-dist/tex/context/base/scrn-fld.mkiv
+++ b/Master/texmf-dist/tex/context/base/scrn-fld.mkiv
@@ -67,9 +67,9 @@
{\def\dopresetfieldsymbols##1{\processcommalist[##1]\dopresetfieldsymbol}%
\@EA\processcommalist\@EA[#1]\dopresetfieldsymbols}
-\def\definedefaultsymbols
- {\definesymbol[defaultyes][$\times$]%
- \definesymbol[defaultno][$\cdot$]}
+\unexpanded\def\definedefaultsymbols
+ {\definesymbol[defaultyes][\mathematics{\times}]%
+ \definesymbol[defaultno ][\mathematics{\cdot }]}
\def\resetfieldsymbol[#1]% for experimental usage only
{\resetobject{SYM}{#1}}
@@ -77,30 +77,36 @@
%D The interface to the specials. DEFAULT NOG ANDERS
\def\typesetfield
- {\ctxlua{backends.codeinjections.typesetfield("\currentfieldname", {
- title = "\currentfieldname",
- width = \number\dimexpr\@@fdwidth\relax,
- height = \number\dimexpr\@@fdheight\relax,
- align = "\@@fdalign",
- length = tonumber("\@@fdn") or 0,
- style = "\@@fdstyle",
- color = "\@@fdcolor",
- backgroundcolor = "\@@fdfieldbackgroundcolor",
- framecolor = "\@@fdfieldframecolor",
- layer = "\@@fdfieldlayer",
- options = "\@@fdoption",
- align = "\@@fdalign",
- clickin = "\@@fdclickin",
- clickout = "\@@fdclickout",
- regionin = "\@@fdregionin",
- regionout = "\@@fdregionout",
- afterkey = "\@@fdafterkey",
- format = "\@@fdformat",
- validate = "\@@fdvalidate",
- calculate = "\@@fdcalculate",
- focusin = "\@@fdfocusin",
- focusout = "\@@fdfocusout",
- }) }}
+ {\bgroup
+ \dosetfontattribute\??fd\c!style
+ \ctxlua{backends.codeinjections.typesetfield("\currentfieldname", {
+ title = "\currentfieldname",
+ width = \number\dimexpr\@@fdwidth\relax,
+ height = \number\dimexpr\@@fdheight\relax,
+ align = "\@@fdalign",
+ length = tonumber("\@@fdn") or 0,
+ style = "\@@fdstyle",
+ fontstyle = "\fontstyle",
+ fontalternative = "\fontalternative",
+ fontsize = "\currentfontbodysize",
+ color = "\@@fdcolor",
+ backgroundcolor = "\@@fdfieldbackgroundcolor",
+ framecolor = "\@@fdfieldframecolor",
+ layer = "\@@fdfieldlayer",
+ options = "\@@fdoption",
+ align = "\@@fdalign",
+ clickin = "\@@fdclickin",
+ clickout = "\@@fdclickout",
+ regionin = "\@@fdregionin",
+ regionout = "\@@fdregionout",
+ afterkey = "\@@fdafterkey",
+ format = "\@@fdformat",
+ validate = "\@@fdvalidate",
+ calculate = "\@@fdcalculate",
+ focusin = "\@@fdfocusin",
+ focusout = "\@@fdfocusout",
+ }) }%
+ \egroup}
\unexpanded\def\definefieldset {\dodoubleargument\dodefinefieldset}
\unexpanded\def\definefield {\doquintupleempty\dodefinefield}
@@ -115,7 +121,7 @@
% misc
-\appendtoks\ctxlua{backends.codeinjections.finishfields()}\to\everylastshipout
+% \appendtoks\ctxlua{backends.codeinjections.finishfields()}\to\everylastshipout
% testing
@@ -124,7 +130,7 @@
% definition
-\def\dodefinefield[#1][#2][#3][#4][#5]% [name] [kind] [group] [values] [default]
+\def\dodefinefield[#1][#2][#3][#4][#5]% [name] [kind] [group] [values] [default] | [name] [kind] [group] [default]
{\ctxlua{backends.codeinjections.definefield{ variant="normal", name="#1", kind="#2", group="#3", values=\!!bs#4\!!es, default=\!!bs#5\!!es }}}
\def\dodefinesubfield[#1][#2][#3]% [name] [group] [values]
@@ -150,29 +156,6 @@
\def\donormalfield{\doprocessfield\dohandlefield}
\def\dofitfield {\doprocessfield\dohandlefitfield}
-% \def\doprocessfield#1[#2][#3]% \method [name] [label]
-% {\dontleavehmode
-% \begingroup
-% \loadfieldscripts
-% \edef\currentfieldname {#2}%
-% \edef\currentfieldlabel{#3}%
-% \edef\currentfieldgroup{\ctxlua{backends.codeinjections.getfieldgroup("#2")}}%
-% \ifx\currentfieldlabel\empty
-% \let\currentfieldlabel\currentfieldname
-% \fi
-% \ifx\currentfieldgroup\empty
-% #1[#2][\v!label,\v!frame,\v!horizontal][][][]%
-% \else
-% \getvalue{\??fd::\currentfieldgroup}%
-% #1[#2][][][][]% todo: pass setups
-% \fi
-% \endgroup}
-
-% \def\dosetupfieldindeed#1#2[#3][#4][#5][#6][#7]%
-% {#1[#2][#4][#5][#6][#7]}
-%
-% equals:
-
\def\dosetupfieldindeed#1#2[#3]% [#4][#5][#6][#7]%
{#1[#2]} % [#4][#5][#6][#7]}
@@ -310,7 +293,7 @@
\c!clickin=,\c!clickout=,\c!regionin=,\c!regionout=,
\c!afterkey=,\c!format=,\c!validate=,\c!calculate=,
\c!focusin=,\c!focusout=,
- \c!fieldoffset=\zeropoint,\c!fieldbackgroundcolor=,
+ \c!fieldoffset=-\framedoffset,\c!fieldbackgroundcolor=,
\c!fieldframecolor=,\c!fieldlayer=\@@iafieldlayer,#5]%
\scratchdimen\framedwidth \edef\@@fdwidth {\the\scratchdimen}%
\scratchdimen\framedheight\edef\@@fdheight{\the\scratchdimen}%
@@ -469,11 +452,11 @@
%D And one more:
-\def\definefieldstack
+\unexpanded\def\definefieldstack
{\dotripleargument\dodefinefieldstack}
\def\dodefinefieldstack[#1][#2][#3]% name, symbols, settings
- {\ifcsname fieldstack:#1\endcsname
+ {\ifcsname fieldstack:#1\endcsname \else
\setgvalue{fieldstack:#1}{\dodofieldstack[#1][#2][#3]}%
\fi}
@@ -493,15 +476,15 @@
\begingroup
\getparameters[\??fd][\c!start=1,#3]%
\setupfields[\v!reset]%
- \definesymbol[\v!empty][]%
+ % \definesymbol[\v!empty][]%
\useJSscripts[fld][FieldStack]%
\newcounter\stackedfieldnumber
\def\dododofieldstack##1%
{\increment\stackedfieldnumber
\ifnum\stackedfieldnumber=\@@fdstart\relax
- \definefield[#1:\stackedfieldnumber][check][#1][##1,\v!empty][##1]%
+ \definefield[#1:\stackedfieldnumber][check][#1][##1,\empty][##1]% \v!empty fails
\else
- \definefield[#1:\stackedfieldnumber][check][#1][##1,\v!empty][\v!empty]%
+ \definefield[#1:\stackedfieldnumber][check][#1][##1,\empty][\empty]% \v!empty fails
\fi}%
\processcommalist[#2]\dododofieldstack
\setupfield[#1][\v!reset]% added
@@ -522,7 +505,7 @@
\newtoks\everysetupforms
-\def\setupforms{\dosingleempty\dosetupforms}
+\unexpanded\def\setupforms{\dosingleempty\dosetupforms}
\def\dosetupforms[#1]
{\getparameters[\??fr][#1]%
@@ -537,7 +520,7 @@
%D Goodie: (unchecked in \MKIV)
-\def\definepushbutton % name optional setup
+\unexpanded\def\definepushbutton % name optional setup
{\dodoubleempty\dodefinepushbutton}
\def\dodefinepushbutton[#1][#2]% name setup
@@ -550,7 +533,7 @@
{\doifsymboldefinedelse{psym:#1:#2}%
\donothing{\definesymbol[psym:#1:#2][{#3}]}}
-\def\definepushsymbol
+\unexpanded\def\definepushsymbol
{\dotripleargument\dodefinepushsymbol}
\def\dodefinepushsymbol[#1][#2]% [#3]
diff --git a/Master/texmf-dist/tex/context/base/scrn-hlp.mkiv b/Master/texmf-dist/tex/context/base/scrn-hlp.mkiv
index c9fcbd29ac0..4eaa340ca26 100644
--- a/Master/texmf-dist/tex/context/base/scrn-hlp.mkiv
+++ b/Master/texmf-dist/tex/context/base/scrn-hlp.mkiv
@@ -38,6 +38,9 @@
\newcounter \nofhelpdataentries
\newconditional \somehelpdatadefined
+\let\getpagehelpdata \relax
+\let\synchronizepagehelpdata\relax
+
\appendtoks \getpagehelpdata \to \beforeeverypage
\appendtoks \synchronizepagehelpdata \to \aftereverypage
@@ -46,43 +49,48 @@
\let\pagehelpdata\empty
\def\dontresetpagedata
- {\let\synchronizepagehelpdata\relax}
+ {\let\synchronizepagehelpdataindeed\relax}
\def\resetpagehelpdata
{\iflocation
- \let\synchronizepagehelpdata\resetpagehelpdata
+ \let\synchronizepagehelpdataindeed\resetpagehelpdata
\global\let\pagehelpdata\empty
\resetreference[HideHelp]%
\fi}
-\let\synchronizepagehelpdata\resetpagehelpdata
+\let\synchronizepagehelpdataindeed\resetpagehelpdata
\resetreference[HideHelp]
-\def\getpagehelpdata
+\def\getpagehelpdataindeed
{\iflocation\ifcase\nofhelpdataentries\else
- \let\pagehelpdata\empty
- \ifconditional\somehelpdatadefined
- \definetwopasslist{hlp:\realfolio}%
- \doloop
- {\gettwopassdata{hlp:\realfolio}%
- \iftwopassdatafound
- \addtocommalist\twopassdata\pagehelpdata
- \else
- \exitloop
- \fi}%
- \fi
- \ifx\pagehelpdata\empty \else
- \useJSscripts[fld]%
- \definereference[HideHelp][JS(Hide_Fields)]% for the moment
- \fi
+ \dogetpagehelpdataindeed
\fi\fi}
+\def\dogetpagehelpdataindeed
+ {\let\pagehelpdata\empty
+ \ifconditional\somehelpdatadefined
+ \definetwopasslist{hlp:\realfolio}%
+ \doloop
+ {\gettwopassdata{hlp:\realfolio}%
+ \iftwopassdatafound
+ \addtocommalist\twopassdata\pagehelpdata
+ \else
+ \exitloop
+ \fi}%
+ \fi
+ \ifx\pagehelpdata\empty \else
+ \useJSscripts[fld]%
+ \definereference[HideHelp][JS(Hide_Fields)]% for the moment
+ \fi}
+
\def\setpagehelpdata[#1]%
{\iflocation\expanded{\dosetpagehelpdata{#1}}\fi}
\def\dosetpagehelpdata#1%
{\doglobal\increment\nofhelpdataentries
+ \global\let\getpagehelpdata\getpagehelpdataindeed
+ \global\let\synchronizepagehelpdata\synchronizepagehelpdataindeed
\savetwopassdata{hlp:\realfolio}{\nofhelpdataentries}{#1}}
\setvalue{\e!start\v!helptext}[#1]%
diff --git a/Master/texmf-dist/tex/context/base/scrn-int.lua b/Master/texmf-dist/tex/context/base/scrn-int.lua
index 7e90ed069f1..7036bbf6a8d 100644
--- a/Master/texmf-dist/tex/context/base/scrn-int.lua
+++ b/Master/texmf-dist/tex/context/base/scrn-int.lua
@@ -1,6 +1,6 @@
if not modules then modules = { } end modules ['scrn-int'] = {
version = 1.001,
- comment = "companion to scrn-int.tex",
+ comment = "companion to scrn-int.mkiv",
author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
copyright = "PRAGMA ADE / ConTeXt Development Team",
license = "see context related readme files"
diff --git a/Master/texmf-dist/tex/context/base/scrn-int.mkii b/Master/texmf-dist/tex/context/base/scrn-int.mkii
index 9f1be68e193..cf55f864af6 100644
--- a/Master/texmf-dist/tex/context/base/scrn-int.mkii
+++ b/Master/texmf-dist/tex/context/base/scrn-int.mkii
@@ -269,18 +269,30 @@
\else
\let\openbookmarklist\empty
\fi
- \global\let\bookmarklevellist\empty
- \def\bookmarklevelcount{0}%
- \doprocessbookmarks[#1]\dogetbookmarkelement
- \dolistelement{}{}{}{}{}{}% needed to finish the first pass
- \doprocessbookmarks[#1]\doputbookmarkelement
- \flushbookmark
+ \xdef\doplacebookmarksindeed{\noexpand\dodoplacebookmarksindeed[#1][\openbookmarklist]}
\egroup
\else
\expanded{\placebookmarks\@EA[\getvalue{\??ih\v!content\c!list}]}%
\fi
\fi}
+\def\dodoplacebookmarksindeed[#1][#2]%
+ {\bgroup
+ \edef\openbookmarklist{#2}%
+ \global\let\bookmarklevellist\empty
+ \def\bookmarklevelcount{0}%
+ \doprocessbookmarks[#1]\dogetbookmarkelement
+ \dolistelement{}{}{}{}{}{}% needed to finish the first pass
+ \doprocessbookmarks[#1]\doputbookmarkelement
+ \flushbookmark
+ \egroup}
+
+\let\doplacebookmarksindeed\relax
+
+\prependtoks
+ \doplacebookmarksindeed % new, now postponed so that halfway defined commands work out ok
+\to \everystoptext
+
\def\doprocessbookmarks[#1]#2%
{\let\dolistelement#2\relax
\scratchcounter\zerocount
diff --git a/Master/texmf-dist/tex/context/base/scrn-int.mkiv b/Master/texmf-dist/tex/context/base/scrn-int.mkiv
index a68c374dd8f..11734e0d7e4 100644
--- a/Master/texmf-dist/tex/context/base/scrn-int.mkiv
+++ b/Master/texmf-dist/tex/context/base/scrn-int.mkiv
@@ -13,6 +13,8 @@
\writestatus{loading}{ConTeXt Screen Macros / Interaction}
+\registerctxluafile{scrn-int}{1.001}
+
\unprotect
%D This is an update of \MKII\ code. In the process profiles and versions
@@ -23,7 +25,7 @@
\newtoks\everysetupinteractionscreen
-\def\setupinteractionscreen
+\unexpanded\def\setupinteractionscreen
{\dosingleempty\dosetupinteractionscreen}
\def\dosetupinteractionscreen[#1]%
@@ -90,7 +92,9 @@
\fi\fi
\ctxlua{backends.codeinjections.setupcanvas {
mode = "\@@scoption",
- doublesided = \ifsinglesided false\else\ifdoublesided true\else false\fi\fi,
+ % doublesided = \ifsinglesided false\else\ifdoublesided true\else false\fi\fi,
+ singlesided = \ifsinglesided true\else false\fi,
+ doublesided = \ifdoublesided true\else false\fi,
leftoffset = \number\dimexpr\backoffset\relax,
topoffset = \number\dimexpr\topoffset \relax,
width = \number\dimexpr\!!widtha \relax,
@@ -128,9 +132,9 @@
\def\dolinkedlistparameter #1#2{\ifcsname#1#2\endcsname#1#2\else\expandafter\dolinkedlistparentparameter\csname#1\s!parent\endcsname#2\fi}
\def\dolinkedlistparentparameter#1#2{\ifx#1\relax\s!empty\else\dolinkedlistparameter#1#2\fi}
-\def\definelinkedlist{\dodoubleargument\dodefinelinkedlist}
-\def\setuplinkedlist {\dodoubleargument\dosetuplinkedlist }
-\def\setuplinkedlists{\dosingleargument\dosetuplinkedlists}
+\unexpanded\def\definelinkedlist{\dodoubleargument\dodefinelinkedlist}
+\unexpanded\def\setuplinkedlist {\dodoubleargument\dosetuplinkedlist }
+\unexpanded\def\setuplinkedlists{\dosingleargument\dosetuplinkedlists}
\def\dodefinelinkedlist[#1][#2]%
{\ctxlua{interactions.definelinkedlist("#1")}%
@@ -196,7 +200,7 @@
\let\askedpagetransitions\empty
-\def\setuppagetransitions
+\unexpanded\def\setuppagetransitions
{\dosingleempty\dosetuppagetransitions}
\def\dosetuppagetransitions[#1]%
@@ -236,10 +240,10 @@
\def\dodoflushcommentanchors
{\executeifdefined{\??cc:\c!location:\@@cclocation}\hbox{\box\commentbox}}
-\def\setupcomment
+\unexpanded\def\setupcomment
{\dodoubleargument\getparameters[\??cc]}
-\def\placecomments{\box\commentcollection} % when option=buffer
+\unexpanded\def\placecomments{\box\commentcollection} % when option=buffer
\def\doinsertcomment#1%
{\begingroup
@@ -273,7 +277,7 @@
\setcurrentbuffer{\v!comment\v!buffer}%
\dostartbuffer[\v!comment\v!buffer][\v!comment\v!buffer][\e!start\v!comment][\e!stop\v!comment]}
-\def\stopcomment
+\unexpanded\def\stopcomment
{\doif\@@ccstate\v!start
{\global\let\flushcommentanchors\doflushcommentanchors
\global\setbox\commentbox\frozenhbox
@@ -426,30 +430,41 @@
{\bgroup
\setupattachments[#2]%
\ctxlua{backends.codeinjections.presetsymbollist("\@@atsymbol")}%
- \getvalue{\??at:\@@atalternative}{\ctxlua{backends.codeinjections.attachfile{
- label = "#1",
- width = \number\dimexpr\@@atwidth \relax,
- height = \number\dimexpr\@@atheight\relax,
- depth = \number\dimexpr\@@atdepth \relax,
- color = "\@@atcolor",
- symbol = "\@@atsymbol",
- layer = "\@@attextlayer",
- }}}%
+ % we cannot yet ask for the wd/ht/dp of an xform else we could use those
+ \setbox\scratchbox\hbox{\symbol[\lastpredefinedsymbol]}%
+ \doif\@@atwidth \v!fit{\edef\@@atwidth {\the\wd\scratchbox}}%
+ \doif\@@atheight\v!fit{\edef\@@atheight{\the\ht\scratchbox}}%
+ \doif\@@atdepth \v!fit{\edef\@@atdepth {\the\dp\scratchbox}}%
+ %
+ \setbox\scratchbox\hbox
+ {\getvalue{\??at:\@@atalternative}{\ctxlua{backends.codeinjections.attachfile{
+ label = "#1",
+ width = \number\dimexpr\@@atwidth \relax,
+ height = \number\dimexpr\@@atheight\relax,
+ depth = \number\dimexpr\@@atdepth \relax,
+ color = "\@@atcolor",
+ symbol = "\@@atsymbol",
+ layer = "\@@attextlayer",
+ }}}}%
+ \wd\scratchbox\@@atwidth
+ \ht\scratchbox\@@atheight
+ \dp\scratchbox\@@atdepth
+ \box\scratchbox
\egroup}%
\fi}
\setvalue{\??at:\v!high}#1{\struttedbox{\tbox{#1}}}
-\def\setupattachments
+\unexpanded\def\setupattachments
{\dodoubleempty\getparameters[\??at]}
\setupattachments
[\c!state=\v!start,
\c!color=\@@iacolor,
\c!textlayer=,
- \c!width=1em,
- \c!height=\strutheight,
- \c!depth=\strutdepth,
+ \c!width=\v!fit,
+ \c!height=\v!fit,
+ \c!depth=\v!fit,
\c!alternative=\v!high,
\c!symbol=]
@@ -478,7 +493,7 @@
}}%
\fi}
-\def\setupexternalsoundtracks
+\unexpanded\def\setupexternalsoundtracks
{\dodoubleargument\getparameters[\??sd]}
\setupexternalsoundtracks
@@ -530,7 +545,7 @@
\def\renderingwidth {8cm}
\def\renderingheight {6cm}
-\def\definerenderingwindow
+\unexpanded\def\definerenderingwindow
{\dodoubleempty\dodefinerenderingwindow}
\def\dodefinerenderingwindow[#1][#2]%
@@ -541,13 +556,13 @@
\c!width=\renderingwidth,\c!height=\renderingheight,%
#2]}
-\def\setuprenderingwindow
+\unexpanded\def\setuprenderingwindow
{\dodoubleargument\dosetuprenderingwindow}
\def\dosetuprenderingwindow[#1]%
{\getparameters[\??rw#1]}
-\def\placerenderingwindow
+\unexpanded\def\placerenderingwindow
{\dodoubleempty\doplacerenderingwindow}
\def\doplacerenderingwindow[#1][#2]%
diff --git a/Master/texmf-dist/tex/context/base/scrn-men.mkiv b/Master/texmf-dist/tex/context/base/scrn-men.mkiv
index ae95a5c044f..246d31bfddd 100644
--- a/Master/texmf-dist/tex/context/base/scrn-men.mkiv
+++ b/Master/texmf-dist/tex/context/base/scrn-men.mkiv
@@ -87,7 +87,7 @@
\def\domenuparentparameter #1#2{\ifx#1\relax\s!empty\else\domenuparameter #1#2\fi}
\def\domenuparentparameterhash#1#2{\ifx#1\relax \else\domenuparameterhash#1#2\fi}
-\def\defineinteractionmenu
+\unexpanded\def\defineinteractionmenu
{\dotripleempty\dodefineinteractionmenu}
\def\dodefineinteractionmenu[#1][#2][#3]% [name] [location] [settings]
@@ -117,14 +117,14 @@
%D Setup menus:
-\def\setupinteractionmenu
+\unexpanded\def\setupinteractionmenu
{\dodoubleargument\dosetupinteractionmenu}
\def\dosetupinteractionmenu[#1][#2]%
{\def\docommand##1{\getparameters[\??am##1][#2]}%
\processcommalist[#1]\docommand}
-\def\setupinteractionmenus[#1]%
+\unexpanded\def\setupinteractionmenus[#1]%
{\getparameters[\??am][#1]}
%D Fill menus:
@@ -157,7 +157,7 @@
\csname\??am:\c!menu:#1\endcsname
\fi}
-% \def\defineinteractionmenuclass
+% \unexpanded\def\defineinteractionmenuclass
% {\dodoubleargument\dodefineinteractionmenuclass}
%
% \def\dodefineinteractionmenuclass[#1][#2]% tag hori|veri
@@ -546,6 +546,7 @@
\c!state=\v!start,
\c!samepage=\v!yes,
\c!unknownreference=\v!empty,
+ \c!distance=\bodyfontsize, % 12pt
\c!topoffset=\zeropoint,
\c!bottomoffset=\zeropoint,
\c!leftoffset=\zeropoint,
@@ -556,7 +557,6 @@
[\c!before=,
\c!after=\vfil,
\c!inbetween=\blank,
- \c!distance=\bodyfontsize, % 12pt
\c!left=\hss,
\c!right=\hss,
\c!height=\v!broad]
@@ -566,7 +566,6 @@
[\c!before=\vss,
\c!after=\vss,
\c!middle=\hfil,
- \c!distance=\bodyfontsize, % 12pt
\c!width=\v!fit,
\c!height=\v!broad]
@@ -575,13 +574,13 @@
% \setupinteractionmenu[\v!top ] [\c!height=\topheight ]
% \setupinteractionmenu[\v!bottom] [\c!height=\bottomheight ]
-\def\placeleftedgetextblock % Is \hss/\hsize really needed here? (check outer level and settings)
+\unexpanded\def\placeleftedgetextblock % Is \hss/\hsize really needed here? (check outer level and settings)
{\hbox to \leftedgewidth{\hsize\leftedgewidth\hss\interactionmenus[\v!left]}}
-\def\placerightedgetextblock % Is \hss/\hsize really needed here? (check outer level and settings)
+\unexpanded\def\placerightedgetextblock % Is \hss/\hsize really needed here? (check outer level and settings)
{\hbox to \rightedgewidth{\hsize\rightedgewidth\interactionmenus[\v!right]\hss}}
-\def\placetoptextblock
+\unexpanded\def\placetoptextblock
{\vbox to \topheight
{\vsize\topheight
\csname\??tk\v!top\c!before\endcsname
@@ -589,7 +588,7 @@
\csname\??tk\v!top\c!after\endcsname
\kern\zeropoint}}
-\def\placebottomtextblock
+\unexpanded\def\placebottomtextblock
{\vbox to \bottomheight
{\vsize\bottomheight
\csname\??tk\v!bottom\c!before\endcsname
diff --git a/Master/texmf-dist/tex/context/base/scrn-nav.mkiv b/Master/texmf-dist/tex/context/base/scrn-nav.mkiv
index 6b21a9e950f..264e3ded2e9 100644
--- a/Master/texmf-dist/tex/context/base/scrn-nav.mkiv
+++ b/Master/texmf-dist/tex/context/base/scrn-nav.mkiv
@@ -44,7 +44,7 @@
\newtoks\everysetupinteraction
-\def\setupinteraction
+\unexpanded\def\setupinteraction
{\dosingleargument\dodosetupinteraction}
\def\dodosetupinteraction[#1]% % \dosetupinteraction == special
@@ -79,7 +79,7 @@
\def\synchronizebackendidentity
{\ctxlua{backends.codeinjections.setupidentity{
title = \!!bs\@@iatitle\!!es,
- subtitle = \!!bs\@@iasubtitle\!!es,
+ subject = \!!bs\@@iasubtitle\!!es,
author = \!!bs\@@iaauthor\!!es,
creator = \!!bs ConTeXt - \contextversion\!!es,
date = \!!bs\@@iadate\!!es,
@@ -193,6 +193,18 @@
\doactivatecolor{#1\c!color}%
\fi}
+%D delayed ...
+
+\def\enableinteractivereferences
+ {\ifproductionrun
+ \ctxlua{jobreferences.enable_interaction()}%
+ \globallet\enableinteractivereferences\relax
+ \fi}
+
+\appendtoks
+ \enableinteractivereferences
+\to \everysetupinteraction
+
%D More tokens are spend when we want both typeface and color
%D highlighting.
@@ -229,4 +241,16 @@
\c!keyword=,
\c!date=\@@iatimestamp]
+%D XMP support:
+
+\setupinteraction
+ [xmpfile=]
+
+\appendtoks
+ % this will move as it is a backend issue
+ \doifsomething\@@iaxmpfile
+ {\ctxlua{if lpdf then lpdf.setxmpfile("\@@iaxmpfile") end}%
+ \globallet\@@iaxmpfile\empty}%
+\to \everysetupinteraction
+
\protect \endinput
diff --git a/Master/texmf-dist/tex/context/base/scrp-cjk.lua b/Master/texmf-dist/tex/context/base/scrp-cjk.lua
index a452673fa9f..997baaa962b 100644
--- a/Master/texmf-dist/tex/context/base/scrp-cjk.lua
+++ b/Master/texmf-dist/tex/context/base/scrp-cjk.lua
@@ -1,6 +1,6 @@
if not modules then modules = { } end modules ['scrp-cjk'] = {
version = 1.001,
- comment = "companion to scrp-ini.tex",
+ comment = "companion to scrp-ini.mkiv",
author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
copyright = "PRAGMA ADE / ConTeXt Development Team",
license = "see context related readme files"
@@ -26,7 +26,9 @@ local kind_to_number = scripts.kind_to_number
local number_to_kind = scripts.number_to_kind
local hash = scripts.hash
local cjk = scripts.cjk
-local fontdata = fonts.ids
+
+local fontdata = fonts.identifiers
+local quaddata = fonts.quads
-- raggedleft is controlled by leftskip and we might end up with a situation where
-- the intercharacter spacing interferes with this; the solution is to patch the
@@ -38,8 +40,7 @@ local inter_char_hangul_penalty = 0
local function set_parameters(font,data)
-- beware: parameters can be nil in e.g. punk variants
- local parameters = fontdata[font].parameters
- local quad = (parameters and parameters.quad or parameters[6]) or 0
+ local quad = quaddata[font]
inter_char_half_shrink = data.inter_char_half_shrink_factor * quad
inter_char_stretch = data.inter_char_stretch_factor * quad
inter_char_hangul_penalty = data.inter_char_hangul_penalty
@@ -486,7 +487,7 @@ local injectors = { -- [previous] [current]
full_width_close = {
jami_initial = nobreak_shrink_break_stretch,
korean = nobreak_shrink_break_stretch,
- chinese = nobreak_shrink_break_stretch,
+ chinese = stretch_break, -- nobreak_shrink_break_stretch,
half_width_open = nobreak_shrink_break_stretch_nobreak_autoshrink,
half_width_close = nobreak_shrink_nobreak_stretch,
full_width_open = nobreak_shrink_break_stretch_nobreak_shrink,
@@ -498,7 +499,7 @@ local injectors = { -- [previous] [current]
half_width_close = {
jami_initial = nobreak_shrink_break_stretch,
korean = nobreak_autoshrink_break_stretch,
- chinese = nobreak_autoshrink_break_stretch,
+ chinese = stretch_break, -- nobreak_autoshrink_break_stretch,
half_width_open = nobreak_autoshrink_break_stretch_nobreak_autoshrink,
half_width_close = nobreak_autoshrink_nobreak_stretch,
full_width_open = nobreak_autoshrink_break_stretch_nobreak_shrink,
diff --git a/Master/texmf-dist/tex/context/base/scrp-ini.lua b/Master/texmf-dist/tex/context/base/scrp-ini.lua
index a555732842d..b28c297d0bd 100644
--- a/Master/texmf-dist/tex/context/base/scrp-ini.lua
+++ b/Master/texmf-dist/tex/context/base/scrp-ini.lua
@@ -1,6 +1,6 @@
if not modules then modules = { } end modules ['scrp-ini'] = {
version = 1.001,
- comment = "companion to scrp-ini.tex",
+ comment = "companion to scrp-ini.mkiv",
author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
copyright = "PRAGMA ADE / ConTeXt Development Team",
license = "see context related readme files"
@@ -265,6 +265,8 @@ end
-- eventually we might end up with more extensive parsing
-- todo: pass t[start..stop] == original
+--
+-- one of the time consuming functiions:
function scripts.preprocess(head)
local start = first_character(head)
diff --git a/Master/texmf-dist/tex/context/base/scrp-ini.mkiv b/Master/texmf-dist/tex/context/base/scrp-ini.mkiv
index 3382ef4b64d..6e6b1061032 100644
--- a/Master/texmf-dist/tex/context/base/scrp-ini.mkiv
+++ b/Master/texmf-dist/tex/context/base/scrp-ini.mkiv
@@ -16,8 +16,8 @@
\registerctxluafile{scrp-ini}{1.001}
\registerctxluafile{scrp-cjk}{1.001}
-\definesystemattribute[preproc]
-\definesystemattribute[prestat]
+\definesystemattribute[preproc] \chardef\preprocattribute \dogetattributeid{preproc}
+\definesystemattribute[prestat] \chardef\prestatattribute \dogetattributeid{prestat}
%D Since scripts need specific \LUA\ code we use hard coded attribute
%D values, but we might have more tricks at some time, so we use a
@@ -50,7 +50,7 @@
% when #2 == string, then only synonym, no settings
-\def\definescript
+\unexpanded\def\definescript
{\dodoubleargument\dodefinescript}
\def\dodefinescript[#1][#2]%
@@ -62,7 +62,7 @@
{\getparameters[\??ls#1][\s!parent=#2]}%
\setvalue{#1}{\dosetscript{#1}}}
-\def\setupscript
+\unexpanded\def\setupscript
{\dodoubleargument\dosetupscript}
\def\dosetupscript[#1][#2]%
@@ -73,14 +73,14 @@
\edef\currentscriptattribute{\scriptparameter\s!attribute}%
\ifx\currentscriptattribute\empty
\let\currentscript\empty
- \doresetattribute{preproc}%
+ \attribute\preprocattribute\attributeunsetvalue
\else
- \dosetattribute{preproc}\currentscriptattribute % we can speed this up by storing the attribute in ??ls:a:#1
+ \attribute\preprocattribute\currentscriptattribute\relax % we can speed this up by storing the attribute in ??ls:a:#1
\fi}
\def\setscript [#1]{\dosetscript{#1}}
-\def\startscript[#1]{\begingroup\dosetscript{#1}}
-\def\stopscript {\endgroup}
+\unexpanded\def\startscript[#1]{\begingroup\dosetscript{#1}}
+\unexpanded\def\stopscript {\endgroup}
% \setscript[hangul] \hangul \startscript[hangul]
diff --git a/Master/texmf-dist/tex/context/base/sort-ini.lua b/Master/texmf-dist/tex/context/base/sort-ini.lua
index 5f045938f1a..b745c9aa5db 100644
--- a/Master/texmf-dist/tex/context/base/sort-ini.lua
+++ b/Master/texmf-dist/tex/context/base/sort-ini.lua
@@ -1,21 +1,24 @@
if not modules then modules = { } end modules ['sort-ini'] = {
version = 1.001,
- comment = "companion to sort-ini.tex",
+ comment = "companion to sort-ini.mkiv",
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
+-- It took a while to get there, but with Fleetwood Mac's "Don't Stop"
+-- playing in the background we sort of got it done.
+
+-- todo: cleanup splits (in other modules)
local utf = unicode.utf8
-local gsub, rep = string.gsub, string.rep
+local gsub, rep, sort, concat = string.gsub, string.rep, table.sort, table.concat
+local utfbyte, utfchar = utf.byte, utf.char
local utfcharacters, utfvalues, strcharacters = string.utfcharacters, string.utfvalues, string.characters
+local chardata = characters.data
+local next, type, tonumber = next, type, tonumber
+
+local trace_tests = false trackers.register("sorters.tests", function(v) trace_tests = v end)
sorters = { }
sorters.comparers = { }
@@ -23,30 +26,49 @@ sorters.splitters = { }
sorters.entries = { }
sorters.mappings = { }
sorters.replacements = { }
-sorters.language = 'en'
-function sorters.comparers.basic(sort_a,sort_b)
- -- sm assignment is slow, will become sorters.initialize
- local sm = sorters.mappings[sorters.language or sorters.defaultlanguage] or sorters.mappings.en
- if #sort_a > #sort_b then
+sorters.ignored_offset = 0x10000
+sorters.replacement_offset = 0x10000
+sorters.digits_offset = 0x20000
+sorters.digits_maximum = 0xFFFFF
+
+local ignored_offset = sorters.ignored_offset
+local digits_offset = sorters.digits_offset
+local digits_maximum = sorters.digits_maximum
+
+local mappings = sorters.mappings
+local entries = sorters.entries
+local replacements = sorters.replacements
+
+local language, defaultlanguage, dummy = 'en', 'en', { }
+
+local currentreplacements, currentmappings, currententries
+
+function sorters.setlanguage(lang)
+ language = lang or language or defaultlanguage
+ currentreplacements = replacements[language] or replacements[defaultlanguage] or dummy
+ currentmappings = mappings [language] or mappings [defaultlanguage] or dummy
+ currententries = entries [language] or entries [defaultlanguage] or dummy
+ return currentreplacements, currentmappings, currententries
+end
+
+sorters.setlanguage()
+
+-- maybe inline code if it's too slow
+
+local function basicsort(sort_a,sort_b)
+ if not sort_a or not sort_b then
+ return 0
+ elseif #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]
- local am, bm = sm[ai], sm[bi]
- if am and bm then
- if am > bm then
- return 1
- elseif am < bm then
- return -1
- end
- else
- if ai > bi then
- return 1
- elseif ai < bi then
- return -1
- end
+ if ai > bi then
+ return 1
+ elseif ai < bi then
+ return -1
end
end
return 1
@@ -57,19 +79,10 @@ function sorters.comparers.basic(sort_a,sort_b)
else
for i=1,#sort_a do
local ai, bi = sort_a[i], sort_b[i]
- local am, bm = sm[ai], sm[bi]
- if am and bm then
- if am > bm then
- return 1
- elseif am < bm then
- return -1
- end
- else
- if ai > bi then
- return 1
- elseif ai < bi then
- return -1
- end
+ if ai > bi then
+ return 1
+ elseif ai < bi then
+ return -1
end
end
return -1
@@ -79,71 +92,226 @@ function sorters.comparers.basic(sort_a,sort_b)
else
for i=1,#sort_a do
local ai, bi = sort_a[i], sort_b[i]
- local am, bm = sm[ai], sm[bi]
- if am and bm then
- if am > bm then
- return 1
- elseif am < bm then
- return -1
- end
- else
- if ai > bi then
- return 1
- elseif ai < bi then
- return -1
- end
+ if ai > bi then
+ return 1
+ elseif ai < bi then
+ return -1
end
end
return 0
end
end
-local function padd(s) return rep(" ",10-#s) .. s end -- or format with padd
+function sorters.comparers.basic(a,b)
+ local ea, eb = a.split, b.split
+ local na, nb = #ea, #eb
+ if na == 0 and nb == 0 then
+ -- simple variant (single word)
+ local result = basicsort(ea.e,eb.e)
+ return result == 0 and result or basicsort(ea.m,eb.m)
+ else
+ -- complex variant, used in register (multiple words)
+ local result = 0
+ for i=1,nb < na and nb or na do
+ local eai, ebi = ea[i], eb[i]
+ result = basicsort(eai.e,ebi.e)
+ if result == 0 then
+ result = basicsort(eai.m,ebi.m) -- only needed it there are m's
+ end
+ if result ~= 0 then
+ break
+ end
+ end
+ if result ~= 0 then
+ return result
+ elseif na > nb then
+ return 1
+ elseif nb > na then
+ return -1
+ else
+ return 0
+ end
+ end
+end
+
+local function numify(s)
+ return rep(" ",10-#s) .. s -- or format with padd
+end
+
+local function numify(s)
+ s = digits_offset + tonumber(s)
+ if s > digits_maximum then
+ s = digits_maximum
+ end
+ return utfchar(s)
+end
function sorters.strip(str) -- todo: only letters and such utf.gsub("([^%w%d])","")
if str then
str = gsub(str,"\\%S*","")
str = gsub(str,"[%s%[%](){}%$\"\']*","")
- str = gsub(str,"(%d+)",padd) -- sort numbers properly
+ str = gsub(str,"(%d+)",numify) -- sort numbers properly
return str
else
return ""
end
end
-function sorters.firstofsplit(split)
+local function firstofsplit(entry)
-- numbers are left padded by spaces
- local se = sorters.entries[sorters.language or sorters.defaultlanguage] -- slow, will become sorters.initialize
- local vs = split[1]
- local entry = (vs and vs[1]) or ""
- return entry, (se and se[entry]) or "\000"
+ local split = entry.split
+ if #split > 0 then
+ split = split[1].s
+ else
+ split = split.s
+ end
+ local entry = split and split[1] or ""
+ return entry, currententries[entry] or "\000"
end
-sorters.defaultlanguage = 'en'
+sorters.firstofsplit = firstofsplit
-- beware, numbers get spaces in front
-function sorters.splitters.utf(str) -- brrr, todo: language
- 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 next, r do
- str = gsub(str,v[1],v[2])
+function sorters.splitters.utf(str)
+ if #currentreplacements > 0 then
+ for k=1,#currentreplacements do
+ local v = currentreplacements[k]
+ str = gsub(str,v[1],v[2])
+ end
end
- for c in utfcharacters(str) do -- maybe an lpeg
- if #c == 1 then
- t[#t+1] = c
- else
- for cc in strcharacters(c) do
- t[#t+1] = cc
+ local s, e, m, n = { }, { }, { }, 0
+ for sc in utfcharacters(str) do -- maybe an lpeg
+ local ec, mc = currententries[sc], currentmappings[sc] or utfbyte(sc)
+ n = n + 1
+ s[n] = sc
+ e[n] = currentmappings[ec] or mc
+ m[n] = mc
+ end
+ return { s = s, e = e, m = m }
+end
+
+-- we can use one array instead (sort of like in mkii)
+-- but for the moment we do it this way as it is more
+-- handy for tracing
+
+-- function sorters.splitters.utf(str)
+-- if #currentreplacements > 0 then
+-- for k=1,#currentreplacements do
+-- local v = currentreplacements[k]
+-- str = gsub(str,v[1],v[2])
+-- end
+-- end
+-- local s, e, m, n = { }, { }, { }, 0
+-- for sc in utfcharacters(str) do -- maybe an lpeg
+-- local ec, mc = currententries[sc], currentmappings[sc] or utfbyte(sc)
+-- n = n + 1
+-- ec = currentmappings[ec] or mc
+-- s[n] = sc
+-- e[n] = ec
+-- if ec ~= mc then
+-- n = n + 1
+-- e[n] = mc
+-- end
+-- end
+-- return { s = s, e = e }
+-- end
+
+function table.remap(t)
+ local tt = { }
+ for k,v in next, t do
+ tt[v] = k
+ end
+ return tt
+end
+
+local function pack(entry)
+ local t = { }
+ local split = entry.split
+ if #split > 0 then
+ for i=1,#split do
+ local tt, li = { }, split[i].s
+ for j=1,#li do
+ local lij = li[j]
+ tt[j] = utfbyte(lij) > ignored_offset and "[]" or lij
end
+ t[i] = concat(tt)
end
+ return concat(t," + ")
+ else
+ local t, li = { }, split.s
+ for j=1,#li do
+ local lij = li[j]
+ t[j] = utfbyte(lij) > ignored_offset and "[]" or lij
+ end
+ return concat(t)
end
- return t
end
function sorters.sort(entries,cmp)
- table.sort(entries,function(a,b) return cmp(a,b) == -1 end)
+ if trace_tests then
+ sort(entries,function(a,b)
+ local r = cmp(a,b)
+ logs.report("sorter","%s %s %s",pack(a),(not r and "?") or (r<0 and "<") or (r>0 and ">") or "=",pack(b))
+ return r == -1
+ end)
+ local s
+ for i=1,#entries do
+ local entry = entries[i]
+ local letter, first = firstofsplit(entry)
+ if first == s then
+ first = " "
+ else
+ s = first
+ logs.report("sorter",">> %s 0x%05X (%s 0x%05X)",first,utfbyte(first),letter,utfbyte(letter))
+ end
+ logs.report("sorter"," %s",pack(entry))
+ end
+ else
+ sort(entries,function(a,b)
+ return cmp(a,b) == -1
+ end)
+ end
+end
+
+-- some day we can have a characters.upper and characters.lower
+
+function sorters.add_uppercase_replacements(what)
+ local rep, new = replacements[what], { }
+ for i=1,#rep do
+ local r = rep[i]
+ local u = chardata[utfbyte(r[1])].uccode
+ if u then
+ new[utfchar(u)] = r[2]
+ end
+ end
+ for k, v in next, new do
+ rep[k] = v
+ end
+end
+
+function sorters.add_uppercase_entries(what)
+ local ent, new = entries[what], { }
+ for k, v in next, ent do
+ local u = chardata[utfbyte(k)].uccode
+ if u then
+ new[utfchar(u)] = v
+ end
+ end
+ for k, v in next, new do
+ ent[k] = v
+ end
+end
+
+function sorters.add_uppercase_mappings(what,offset)
+ local map, new, offset = mappings[what], { }, offset or 0
+ for k, v in next, map do
+ local u = chardata[utfbyte(k)].uccode
+ if u then
+ new[utfchar(u)] = v + offset
+ end
+ end
+ for k, v in next, new do
+ map[k] = v
+ end
end
diff --git a/Master/texmf-dist/tex/context/base/sort-lan.lua b/Master/texmf-dist/tex/context/base/sort-lan.lua
index 5d4ded78eab..ed7e8ba3550 100644
--- a/Master/texmf-dist/tex/context/base/sort-lan.lua
+++ b/Master/texmf-dist/tex/context/base/sort-lan.lua
@@ -1,22 +1,33 @@
if not modules then modules = { } end modules ['sort-lan'] = {
version = 1.001,
- comment = "companion to sort-lan.tex",
+ comment = "companion to sort-lan.mkiv",
author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
copyright = "PRAGMA ADE / ConTeXt Development Team",
license = "see context related readme files"
}
-local utf = unicode.utf8
-
-- this is a rather preliminary and incomplete file
-- maybe we should load this kind of stuff runtime
--- english
+-- replacements are indexed as they need to be applied in sequence
--- 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.
+local utf = unicode.utf8
+local uc = utf.char
+local ub = utf.byte
+
+local mappings = sorters.mappings
+local entries = sorters.entries
+local replacements = sorters.replacements
+
+local add_uppercase_replacements = sorters.add_uppercase_replacements
+local add_uppercase_entries = sorters.add_uppercase_entries
+local add_uppercase_mappings = sorters.add_uppercase_mappings
+
+local replacement_offset = sorters.replacement_offset
+
+-- english
-sorters.entries['en'] = {
+entries['en'] = {
["a"] = "a", ["b"] = "b", ["c"] = "c", ["d"] = "d", ["e"] = "e",
["f"] = "f", ["g"] = "g", ["h"] = "h", ["i"] = "i", ["j"] = "j",
["k"] = "k", ["l"] = "l", ["m"] = "m", ["n"] = "n", ["o"] = "o",
@@ -31,269 +42,278 @@ sorters.entries['en'] = {
["Z"] = "z",
}
-sorters.mappings['en'] = {
+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,
+ ["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,
+ --
+ -- uppercase after lowercase
+ --
+ -- ["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,
}
-- dutch
-sorters.replacements['nl'] = { { "ij", 'y' }, { "IJ", 'Y' } }
-sorters.entries ['nl'] = sorters.entries ['en']
-sorters.mappings ['nl'] = sorters.mappings['en']
+replacements['nl'] = { { "ij", 'y' }, { "IJ", 'Y' } }
+entries ['nl'] = entries ['en']
+mappings ['nl'] = mappings['en']
-- czech
-local uc = utf.char
-local ub = utf.byte
+local cz_ch = uc(replacement_offset + 1)
+local cz_CH = uc(replacement_offset + 2)
-sorters.replacements['cz'] = {
- [1] = { "ch", uc(0xFF01) }
+replacements['cz'] = {
+ [1] = { "ch", cz_ch }
}
-sorters.entries['cz'] = {
- ['a'] = "a",
- [uc(0x00E1)] = "a",
- ['b'] = "b",
- ['c'] = "c",
+entries['cz'] = {
+ ['a'] = "a", -- a
+ [uc(0x00E1)] = "a", -- aacute
+ ['b'] = "b", -- b
+ ['c'] = "c", -- c
[uc(0x010D)] = uc(0x010D), -- ccaron
- ['d'] = "d",
- [uc(0x010F)] = uc(0x010F), -- dcaron
- ['e'] = "e",
- [uc(0x00E9)] = "e",
- [uc(0x011B)] = "e",
- ['f'] = "f",
- ['g'] = "g",
- ['h'] = "h",
- [uc(0xFF01)] = "ch",
- ['i'] = "i",
- [uc(0x00ED)] = "i",
- ['j'] = "j",
- ['k'] = "k",
- ['l'] = "l",
- ['m'] = "m",
- ['n'] = "n",
- [uc(0x0147)] = uc(0x0147), -- ncaron
- ['o'] = "o",
- ['p'] = "p",
- ['q'] = "q",
- ['s'] = "r",
- [uc(0x0147)] = uc(0x0147), -- rcaron
- ['s'] = "s",
+ ['d'] = "d", -- d
+ [uc(0x010F)] = "d", -- dcaron
+ ['e'] = "e", -- e
+ [uc(0x00E9)] = "e", -- eacute
+ [uc(0x011B)] = "e", -- ecaron
+ ['f'] = "f", -- f
+ ['g'] = "g", -- g
+ ['h'] = "h", -- h
+ [cz_ch] = "ch", -- ch
+ ['i'] = "i", -- i
+ [uc(0x00ED)] = "i", -- iacute
+ ['j'] = "j", -- j
+ ['k'] = "k", -- k
+ ['l'] = "l", -- l
+ ['m'] = "m", -- m
+ ['n'] = "n", -- n
+ ['ň'] = "n", -- ncaron
+ ['o'] = "o", -- o
+ ['p'] = "p", -- p
+ ['q'] = "q", -- q
+ ['r'] = "r", -- r
+ ['ř'] = "ř", -- rcaron
+ ['s'] = "s", -- s
[uc(0x0161)] = uc(0x0161), -- scaron
- ['t'] = "t",
- [uc(0x0165)] = uc(0x0165), -- tcaron
- ['u'] = "u",
- [uc(0x00FA)] = "u",
- [uc(0x01F6)] = "u",
- ['v'] = "v",
- ['w'] = "w",
- ['x'] = "x",
- ['y'] = "y",
- ['z'] = "z",
+ ['t'] = "t", -- t
+ [uc(0x0165)] = "t", -- tcaron
+ ['u'] = "u", -- u
+ [uc(0x00FA)] = "u", -- uacute
+ [uc(0x016F)] = "u", -- uring
+ ['v'] = "v", -- v
+ ['w'] = "w", -- w
+ ['x'] = "x", -- x
+ ['y'] = "y", -- y
+ [uc(0x00FD)] = "y", -- yacute
+ ['z'] = "z", -- z
[uc(0x017E)] = uc(0x017E), -- zcaron
}
-sorters.mappings['cz'] = {
+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
+ [uc(0x00E1)] = 3, -- aacute
+ ['b'] = 5, -- b
+ ['c'] = 7, -- c
+ [uc(0x010D)] = 9, -- ccaron
+ ['d'] = 11, -- d
+ [uc(0x010F)] = 13, -- dcaron
+ ['e'] = 15, -- e
+ [uc(0x00E9)] = 17, -- eacute
+ [uc(0x011B)] = 19, -- ecaron
+ ['f'] = 21, -- f
+ ['g'] = 23, -- g
+ ['h'] = 25, -- h
+ [cz_ch] = 27, -- ch
+ ['i'] = 29, -- i
+ [uc(0x00ED)] = 31, -- iacute
+ ['j'] = 33, -- j
+ ['k'] = 35, -- k
+ ['l'] = 37, -- l
+ ['m'] = 39, -- m
+ ['n'] = 41, -- n
+ ['ň'] = 43, -- ncaron
+ ['o'] = 45, -- o
+ ['p'] = 47, -- p
+ ['q'] = 49, -- q
+ ['r'] = 51, -- r
+ ['ř'] = 53, -- rcaron
+ ['s'] = 55, -- s
+ [uc(0x0161)] = 57, -- scaron
+ ['t'] = 59, -- t
+ [uc(0x0165)] = 61, -- tcaron
+ ['u'] = 63, -- u
+ [uc(0x00FA)] = 65, -- uacute
+ [uc(0x016F)] = 67, -- uring
+ ['v'] = 69, -- v
+ ['w'] = 71, -- w
+ ['x'] = 73, -- x
+ ['y'] = 75, -- y
+ [uc(0x00FD)] = 77, -- yacute
+ ['z'] = 79, -- z
+ [uc(0x017E)] = 81, -- zcaron
}
+add_uppercase_entries ("cz")
+add_uppercase_mappings("cz") -- 1 can be option (but then we need a runtime variant)
+
+entries ['cz'][cz_CH] = entries ['cz'][cz_ch]
+mappings['cz'][cz_CH] = mappings['cz'][cz_ch]
+
+replacements['cs'] = replacements['cz']
+entries ['cs'] = entries ['cz']
+mappings ['cs'] = mappings ['cz']
+
+--~ print(table.serialize(mappings.cs))
+
+-- French
+
+entries ['fr'] = entries ['en']
+mappings['fr'] = mappings['en']
+
-- German (by Wolfgang Schuster)
-- DIN 5007-1
-sorters.entries ['DIN 5007-1'] = sorters.entries ['en']
-sorters.mappings ['DIN 5007-1'] = sorters.mappings['en']
+entries ['DIN 5007-1'] = entries ['en']
+mappings ['DIN 5007-1'] = mappings['en']
-- DIN 5007-2
-sorters.replacements['DIN 5007-2'] = {
+replacements['DIN 5007-2'] = { -- todo: add_uppercase_replacements
{ "ä", 'ae' },
{ "ö", 'oe' },
{ "ü", 'ue' },
{ "Ä", 'Ae' },
{ "Ö", 'Oe' },
- { "Ü", 'Ue' }
+ { "Ü", 'Ue' },
}
-sorters.entries ['DIN 5007-2'] = sorters.entries ['en']
-sorters.mappings ['DIN 5007-2'] = sorters.mappings['en']
+--~ add_uppercase_replacements('DIN 5007-2')
+
+entries ['DIN 5007-2'] = entries ['en']
+mappings ['DIN 5007-2'] = mappings['en']
-- Duden
-sorters.replacements['Duden'] = { { "ß", 's' } }
-sorters.entries ['Duden'] = sorters.entries ['en']
-sorters.mappings ['Duden'] = sorters.mappings['en']
+replacements['Duden'] = { { "ß", 's' } }
+entries ['Duden'] = entries ['en']
+mappings ['Duden'] = mappings['en']
-- new german
-sorters.entries ['de'] = sorters.entries ['en']
-sorters.mappings ['de'] = sorters.mappings['en']
+entries ['de'] = entries ['en']
+mappings ['de'] = mappings['en']
-- old german
-sorters.entries ['deo'] = sorters.entries ['de']
-sorters.mappings ['deo'] = sorters.mappings['de']
+entries ['deo'] = entries ['de']
+mappings ['deo'] = mappings['de']
-- german - Germany
-sorters.entries ['de-DE'] = sorters.entries ['de']
-sorters.mappings ['de-DE'] = sorters.mappings['de']
+entries ['de-DE'] = entries ['de']
+mappings ['de-DE'] = mappings['de']
-- german - Swiss
-sorters.entries ['de-CH'] = sorters.entries ['de']
-sorters.mappings ['de-CH'] = sorters.mappings['de']
+entries ['de-CH'] = entries ['de']
+mappings ['de-CH'] = mappings['de']
-- german - Austria
-sorters.entries['de-AT'] = {
+entries['de-AT'] = {
["a"] = "a", ["ä"] = "ä", ["b"] = "b", ["c"] = "c", ["d"] = "d",
["e"] = "e", ["f"] = "f", ["g"] = "g", ["h"] = "h", ["i"] = "i",
["j"] = "j", ["k"] = "k", ["l"] = "l", ["m"] = "m", ["n"] = "n",
["o"] = "o", ["ö"] = "ö", ["p"] = "p", ["q"] = "q", ["r"] = "r",
["s"] = "s", ["t"] = "t", ["u"] = "u", ["ü"] = "ü", ["v"] = "v",
["w"] = "w", ["x"] = "x", ["y"] = "y", ["z"] = "z",
- ["A"] = "a", ["Ä"] = "ä", ["B"] = "b", ["C"] = "c", ["D"] = "d",
- ["E"] = "e", ["F"] = "f", ["G"] = "g", ["H"] = "h", ["I"] = "i",
- ["J"] = "j", ["K"] = "k", ["L"] = "l", ["M"] = "m", ["N"] = "n",
- ["O"] = "o", ["Ö"] = "ö", ["P"] = "p", ["Q"] = "q", ["R"] = "r",
- ["S"] = "s", ["T"] = "t", ["U"] = "u", ["Ü"] = "ü", ["V"] = "v",
- ["W"] = "w", ["X"] = "x", ["Y"] = "y", ["Z"] = "z",
+-- ["A"] = "a", ["Ä"] = "ä", ["B"] = "b", ["C"] = "c", ["D"] = "d",
+-- ["E"] = "e", ["F"] = "f", ["G"] = "g", ["H"] = "h", ["I"] = "i",
+-- ["J"] = "j", ["K"] = "k", ["L"] = "l", ["M"] = "m", ["N"] = "n",
+-- ["O"] = "o", ["Ö"] = "ö", ["P"] = "p", ["Q"] = "q", ["R"] = "r",
+-- ["S"] = "s", ["T"] = "t", ["U"] = "u", ["Ü"] = "ü", ["V"] = "v",
+-- ["W"] = "w", ["X"] = "x", ["Y"] = "y", ["Z"] = "z",
}
-sorters.mappings['de-AT'] = {
+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,
+-- ["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,
}
--- finish (by Wolfgang Schuster)
+add_uppercase_entries ('de-AT')
+add_uppercase_mappings('de-AT',1)
-sorters.entries['fi'] = {
- [ 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", [53] = "å", [55] = "ä", [57] = "ö",
- [ 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,
-}
+-- finish (by Wolfgang Schuster)
-sorters.entries['fi'] = {
+entries['fi'] = {
["a"] = "a", ["b"] = "b", ["c"] = "c", ["d"] = "d", ["e"] = "e",
["f"] = "f", ["g"] = "g", ["h"] = "h", ["i"] = "i", ["j"] = "j",
["k"] = "k", ["l"] = "l", ["m"] = "m", ["n"] = "n", ["o"] = "o",
["p"] = "p", ["q"] = "q", ["r"] = "r", ["s"] = "s", ["t"] = "t",
["u"] = "u", ["v"] = "v", ["w"] = "w", ["x"] = "x", ["y"] = "y",
["z"] = "z", ["å"] = "å", ["ä"] = "ä", ["ö"] = "ö",
- ["A"] = "a", ["B"] = "b", ["C"] = "c", ["D"] = "d", ["E"] = "e",
- ["F"] = "f", ["G"] = "g", ["H"] = "h", ["I"] = "i", ["J"] = "j",
- ["K"] = "k", ["L"] = "l", ["M"] = "m", ["N"] = "n", ["O"] = "o",
- ["P"] = "p", ["Q"] = "q", ["R"] = "r", ["S"] = "s", ["T"] = "t",
- ["U"] = "u", ["V"] = "v", ["W"] = "w", ["X"] = "x", ["Y"] = "y",
- ["Z"] = "z", ["Å"] = "å", ["Ä"] = "ä", ["Ö"] = "ö",
}
---~ 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))
+mappings['fi'] = {
+ ["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, ["å"] = 53, ["ä"] = 55, ["ö"] = 57,
+}
+
+add_uppercase_entries ("fi")
+add_uppercase_mappings("fi")
+
+-- slovenian
+--
+-- MM: this will change since we need to add accented vowels
+
+entries['sl'] = {
+ ["a"] = "a", ["b"] = "b", ["c"] = "c", ["č"] = "č", ["ć"] = "ć", ["d"] = "d",
+ ["đ"] = "đ", ["e"] = "e", ["f"] = "f", ["g"] = "g", ["h"] = "h", ["i"] = "i",
+ ["j"] = "j", ["k"] = "k", ["l"] = "l", ["m"] = "m", ["n"] = "n", ["o"] = "o",
+ ["p"] = "p", ["q"] = "q", ["r"] = "r", ["s"] = "s", ["š"] = "š", ["t"] = "t",
+ ["u"] = "u", ["v"] = "v", ["w"] = "w", ["x"] = "x", ["y"] = "y", ["z"] = "z",
+ ["ž"] = "ž",
+}
+
+mappings['sl'] = {
+ ["a"] = 1, ["b"] = 3, ["c"] = 5, ["č"] = 7, ["ć"] = 9, ["d"] = 11,
+ ["đ"] = 13, ["e"] = 15, ["f"] = 17, ["g"] = 19, ["h"] = 21, ["i"] = 23,
+ ["j"] = 25, ["k"] = 27, ["l"] = 29, ["m"] = 31, ["n"] = 33, ["o"] = 35,
+ ["p"] = 37, ["q"] = 39, ["r"] = 41, ["s"] = 43, ["š"] = 45, ["t"] = 47,
+ ["u"] = 49, ["v"] = 51, ["w"] = 53, ["x"] = 55, ["y"] = 57, ["z"] = 59,
+ ["ž"] = 61,
+}
+
+add_uppercase_entries ("sl")
+add_uppercase_mappings("sl") -- cf. MM
diff --git a/Master/texmf-dist/tex/context/base/sort-lan.mkii b/Master/texmf-dist/tex/context/base/sort-lan.mkii
index ad5232b02c8..db52c63fb66 100644
--- a/Master/texmf-dist/tex/context/base/sort-lan.mkii
+++ b/Master/texmf-dist/tex/context/base/sort-lan.mkii
@@ -45,13 +45,13 @@
% \exportsortexpansion {cacute} {czz}
% \exportsortexpansion {dstroke} {dz}
% \exportsortexpansion {scaron} {sz}
-% \exportsortexpansion {zacron} {zz}
+% \exportsortexpansion {zcaron} {zz}
% \exportsortdivision {cz} {ccaron}
% \exportsortdivision {czz} {cacute}
% \exportsortdivision {dz} {dstroke}
% \exportsortdivision {sz} {scaron}
-% \exportsortdivision {zz} {zacron}
+% \exportsortdivision {zz} {zcaron}
% \stopmode
%
% \startmode[sortorder-sl]
@@ -59,13 +59,13 @@
% \exportsortexpansion {cacute} {c+2}
% \exportsortexpansion {dstroke} {d+1}
% \exportsortexpansion {scaron} {s+1}
-% \exportsortexpansion {zacron} {z+1}
+% \exportsortexpansion {zcaron} {z+1}
%
% \exportsortdivision {c+1} {ccaron}
% \exportsortdivision {c+2} {cacute}
% \exportsortdivision {d+1} {dstroke}
% \exportsortdivision {s+1} {scaron}
-% \exportsortdivision {z+1} {zacron}
+% \exportsortdivision {z+1} {zcaron}
% \stopmode
\startmode[sortorder-sl]
@@ -73,7 +73,7 @@
\exportsortrule {cacute} {c+2}
\exportsortrule {dstroke} {d+1}
\exportsortrule {scaron} {s+1}
- \exportsortrule {zacron} {z+1}
+ \exportsortrule {zcaron} {z+1}
\stopmode
% finnish
@@ -156,48 +156,62 @@
\gdef\czsortdivisionCh{Ch}
\startmode[sortorder-cz]
- \exportsortexpansion {aacute} {a+1}
- \exportsortexpansion {Aacute} {A+1}
+ \exportsortexpansion {aacute} {a}
+ \exportsortexpansion {Aacute} {A}
\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}
+ \exportsortexpansion {dcaron} {d}
+ \exportsortexpansion {Dcaron} {D}
+ %\exportsortdivision {d+1} {dcaron}
+ \exportsortexpansion {eacute} {e}
+ \exportsortexpansion {Eacute} {E}
+ \exportsortexpansion {ecaron} {e}
+ \exportsortexpansion {Ecaron} {E}
\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 {iacute} {i}
+ \exportsortexpansion {Iacute} {I}
+ \exportsortexpansion {ncaron} {n}
+ \exportsortexpansion {Ncaron} {N}
+ %\exportsortdivision {n+1} {ncaron}
+ \exportsortexpansion {oacute} {o}
+ \exportsortexpansion {Oacute} {O}
\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 {tcaron} {t}
+ \exportsortexpansion {Tcaron} {T}
+ %\exportsortdivision {t+1} {tcaron}
+ \exportsortexpansion {uacute} {u}
+ \exportsortexpansion {Uacute} {U}
+ \exportsortexpansion {uring} {u}
+ \exportsortexpansion {Uring} {U}
+ \exportsortexpansion {yacute} {y}
+ \exportsortexpansion {Yacute} {Y}
\exportsortexpansion {zcaron} {z+1}
\exportsortexpansion {Zcaron} {Z+1}
\exportsortdivision {z+1} {zcaron}
\stopmode
+% Polish:
+
+\startmode[sortorder-pl]
+ \exportsortrule {aogonek} {a+1}
+ \exportsortrule {cacute} {c+1}
+ \exportsortrule {eogonek} {e+1}
+ \exportsortrule {lstroke} {l+1}
+ \exportsortrule {nacute} {n+1}
+ \exportsortrule {oacute} {o+1}
+ \exportsortrule {sacute} {s+1}
+ \exportsortrule {zacute} {z+1}
+ \exportsortrule {zdotaccent} {z+2}
+\stopmode
+
\endinput
diff --git a/Master/texmf-dist/tex/context/base/spac-ali.mkiv b/Master/texmf-dist/tex/context/base/spac-ali.mkiv
new file mode 100644
index 00000000000..b168a02be27
--- /dev/null
+++ b/Master/texmf-dist/tex/context/base/spac-ali.mkiv
@@ -0,0 +1,677 @@
+%D \module
+%D [ file=spac-ali,
+%D version=2009.10.16, % 1997.03.31, was core-spa.tex
+%D title=\CONTEXT\ Spacing Macros,
+%D subtitle=Alignments,
+%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 Spacing Macros / Alignments}
+
+\unprotect
+
+% We will not use bodydir and pagedir so we disable them. That way we get
+% normal hyperlink support.
+
+\let\@@bodydir\normalbodydir
+\let\@@pagedir\normalpagedir
+
+\unexpanded\def\bodydir{\afterassignment\do@@bodydir\@@bodydir} \let\normalbodydir\bodydir
+\unexpanded\def\pagedir{\afterassignment\do@@pagedir\@@pagedir} \let\normalpagedir\pagedir
+
+\def\do@@bodydir{\@@bodydir TLT\relax}
+\def\do@@pagedir{\@@pagedir TLT\relax}
+
+% This will become a more advanced layout controller soon:
+
+\newconditional\layoutlefttoright \settrue\layoutlefttoright
+\newconditional\displaylefttoright \settrue\displaylefttoright
+\newconditional\inlinelefttoright \settrue\inlinelefttoright
+
+\unexpanded\def\lefttoright
+ {\ifvmode
+ \settrue\displaylefttoright
+ \settrue\inlinelefttoright
+ \textdir TLT\relax
+ \pardir TLT\relax
+ \else
+ \settrue\inlinelefttoright
+ \textdir TLT\relax
+ \fi}
+
+\unexpanded\def\righttoleft
+ {\ifvmode
+ \setfalse\displaylefttoright
+ \setfalse\inlinelefttoright
+ \textdir TRT\relax
+ \pardir TRT\relax
+ \else
+ \textdir TRT\relax
+ \setfalse\inlinelefttoright
+ \fi}
+
+\def\currentdirectionparameters
+ {\ifconditional\inlinelefttoright \else
+ idir="r2l",
+ \fi
+ \ifconditional\displaylefttoright \else
+ ddir="r2l",
+ \fi}
+
+\def\dodefinehbox[#1][#2]%
+ {\setvalue{hbox#1}##1{\hbox to #2{\begstrut##1\endstrut\hss}}}
+
+\unexpanded\def\definehbox
+ {\dodoubleargument\dodefinehbox}
+
+\def\iobox#1#2#3#% here #3# is not really needed
+ {\vbox\bgroup % we want to return a vbox like the others
+ \hbox\bgroup% we need to pack the signal with the box
+ \signalrightpage
+ \dowithnextboxcontent
+ {\let\\=\endgraf\forgetall\doifrightpageelse#1#2}
+ {\box\nextbox\egroup\egroup}
+ \vbox#3}
+
+\def\obox{\iobox\raggedleft \raggedright} % outerbox
+\def\ibox{\iobox\raggedright\raggedleft} % innerbox
+
+\def\dosetraggedvbox#1%
+ {\let\raggedbox\vbox
+ \processfirstactioninset
+ [#1]
+ [ \v!left=>\let\raggedbox\lbox,
+ \v!right=>\let\raggedbox\rbox,
+ \v!middle=>\let\raggedbox\cbox,
+ \v!inner=>\let\raggedbox\ibox,
+ \v!outer=>\let\raggedbox\obox,
+ \v!flushleft=>\let\raggedbox\rbox,
+ \v!flushright=>\let\raggedbox\lbox,
+ \v!center=>\let\raggedbox\cbox,
+ \v!no=>\def\raggedbox{\vbox\bgroup\raggedright\let\next=}]}
+
+\def\dosetraggedhbox#1%
+ {\let\raggedbox\hbox
+ \processaction % slow
+ [#1]
+ [ \v!left=>\def\raggedbox{\doalignedline\v!left },
+ \v!right=>\def\raggedbox{\doalignedline\v!right },
+ \v!middle=>\def\raggedbox{\doalignedline\v!middle},
+ \v!inner=>\def\raggedbox{\doalignedline\v!inner },
+ \v!outer=>\def\raggedbox{\doalignedline\v!outer },
+ \v!flushleft=>\def\raggedbox{\doalignedline\v!right },
+ \v!flushright=>\def\raggedbox{\doalignedline\v!left },
+ \v!center=>\def\raggedbox{\doalignedline\v!middle}]}
+
+\def\dosetraggedcommand#1%
+ {\normalexpanded{\noexpand\dodosetraggedcommand{#1}}}
+
+\newtoks\everyraggedcommand
+
+\def\raggedcommand{\the\everyraggedcommand}
+
+\def\dodosetraggedcommand#1% beware: #1=empty is ignored, keep that!
+ {\everyraggedcommand\emptytoks
+ \let\raggedtopcommand\empty
+ \let\raggedbottomcommand\empty
+ \chardef\raggedoneliner\zerocount
+ \doifsomething{#1}
+ {\doifinsetelse\v!broad{#1}\!!doneatrue\!!doneafalse
+ \doifinsetelse\v!wide {#1}\!!donebtrue\!!donebfalse
+ \!!donectrue
+ \rawprocesscommalist[#1]\dododosetraggedcommand}}
+
+\def\dododosetraggedcommand#1%
+ {\executeifdefined{\@@ragged@@command\string#1}\relax}
+
+\def\@@ragged@@command{@@raggedcommand}
+
+\setvalue{\@@ragged@@command\v!hanging }{\appendtoks\enableprotruding \to\everyraggedcommand}
+\setvalue{\@@ragged@@command\v!nothanging }{\appendtoks\disableprotruding \to\everyraggedcommand}
+\setvalue{\@@ragged@@command\v!hz }{\appendtoks\enableadjusting \to\everyraggedcommand}
+\setvalue{\@@ragged@@command\v!nohz }{\appendtoks\disableadjusting \to\everyraggedcommand}
+\setvalue{\@@ragged@@command\v!spacing }{\appendtoks\enablespacehandling
+ \enablekernhandling \to\everyraggedcommand}
+\setvalue{\@@ragged@@command\v!nospacing }{\appendtoks\disablespacehandling
+ \disablekernhandling \to\everyraggedcommand}
+\setvalue{\@@ragged@@command\v!hyphenated }{\appendtoks\dohyphens \to\everyraggedcommand}
+\setvalue{\@@ragged@@command\v!nothyphenated}{\appendtoks\nohyphens \to\everyraggedcommand}
+
+\setvalue{\@@ragged@@command\v!tolerant }{\appendtoks\tolerance3000\relax \to\everyraggedcommand}
+\setvalue{\@@ragged@@command\v!verytolerant}{\appendtoks\tolerance4500\relax \to\everyraggedcommand}
+\setvalue{\@@ragged@@command\v!stretch }{\appendtoks\emergencystretch\bodyfontsize\to\everyraggedcommand}
+
+\setvalue{\@@ragged@@command\v!left}%
+ {\if!!donea \appendtoks\veryraggedleft\to\everyraggedcommand
+ \else \appendtoks\raggedleft \to\everyraggedcommand
+ \fi
+ \!!donecfalse}
+
+\setvalue{\@@ragged@@command\v!right}%
+ {\if!!donea \appendtoks\veryraggedright\to\everyraggedcommand
+ \else \appendtoks\raggedright \to\everyraggedcommand
+ \fi
+ \!!donecfalse}
+
+\setvalue{\@@ragged@@command\v!middle}%
+ {\if!!donec
+ \if!!doneb \appendtoks\raggedwidecenter\to\everyraggedcommand
+ \else\if!!donea \appendtoks\veryraggedcenter\to\everyraggedcommand
+ \else \appendtoks\raggedcenter \to\everyraggedcommand
+ \fi\fi
+ \!!donecfalse
+ \else
+ \let\raggedbottomcommand\vfilll % bonus, pretty strong
+ \let\raggedtopcommand \vfilll % used with \framed for
+ \fi} % instance in tables
+
+\setvalue{\@@ragged@@command\v!flushleft }{\getvalue{\@@ragged@@command\v!right }}
+\setvalue{\@@ragged@@command\v!flushright}{\getvalue{\@@ragged@@command\v!left }}
+\setvalue{\@@ragged@@command\v!center }{\getvalue{\@@ragged@@command\v!middle}}
+
+\setvalue{\@@ragged@@command\v!high}%
+ {\let\raggedbottomcommand\vfilll} % and since we lack a
+
+\setvalue{\@@ragged@@command\v!low}%
+ {\let\raggedtopcommand\vfilll} % proper keyword, but
+
+\setvalue{\@@ragged@@command\v!lohi}%
+ {\let\raggedbottomcommand\vfilll % we do support the
+ \let\raggedtopcommand\vfilll} % ugly laho (lohi)
+
+\setvalue{\@@ragged@@command\v!no}%
+ {\appendtoks\raggedright\to\everyraggedcommand}
+
+\setvalue{\@@ragged@@command\v!yes}%
+ {\appendtoks\notragged\to\everyraggedcommand}
+
+\setvalue{\@@ragged@@command\v!normal}%
+ {\appendtoks\notragged\to\everyraggedcommand}
+
+\setvalue{\@@ragged@@command\v!inner}% not yet perfect
+ {\signalrightpage % may interfere
+ \doifrightpageelse
+ {\getvalue{\@@ragged@@command\v!right}}
+ {\getvalue{\@@ragged@@command\v!left}}}
+
+\setvalue{\@@ragged@@command\v!outer}% not yet perfect
+ {\signalrightpage % may interfere
+ \doifrightpageelse
+ {\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}
+
+\setvalue{\@@ragged@@command\v!lefttoright}{\appendtoks\lefttoright\to\everyraggedcommand}
+\setvalue{\@@ragged@@command\v!righttoleft}{\appendtoks\righttoleft\to\everyraggedcommand}
+\setvalue{\@@ragged@@command l2r}{\appendtoks\lefttoright\to\everyraggedcommand}
+\setvalue{\@@ragged@@command r2l}{\appendtoks\righttoleft\to\everyraggedcommand}
+
+% compare:
+%
+% \framed[width=4cm,align=no] {\hfil xxx}
+% \framed[width=4cm,align=disable]{\hfil xxx}
+
+\setvalue{\@@ragged@@command\v!disable}% for one liners
+ {\appendtoks\raggedright\parfillskip\zeropoint\to\everyraggedcommand}
+
+\chardef\raggedoneliner\zerocount
+
+\setvalue{\@@ragged@@command\v!line}%
+ {\chardef\raggedoneliner\plusone}
+
+% More alignments:
+
+% \hyphenpenalty = ( 2.5 * \hsize ) / \raggedness
+% \tolerance >= 1500 % was 200
+% \raggedness = 2 .. 6\bodyfontsize
+
+\chardef\raggedstatus=0 % normal left center right
+
+\def\leftraggedness {2\bodyfontsize}
+\def\rightraggedness {2\bodyfontsize}
+\def\middleraggedness {6\bodyfontsize}
+
+\def\middleraggedness {.5\hsize} % was: 6\bodyfontsize, fails on: \placefigure{x $x=x$ x}{}
+
+% oeps, hsize can be 0pt in which case we get a strange division
+
+\def\middleraggedness {\ifdim\hsize=\zeropoint6\bodyfontsize\else.5\hsize\fi} % was: 6\bodyfontsize, fails on: \placefigure{x $x=x$ x}{}
+
+%D More hyphenation control, will be combined with align
+%D setup.
+
+\def\nohyphens
+ {\ifx\dohyphens\relax
+ \edef\dohyphens
+ {\hyphenpenalty\the\hyphenpenalty
+ \exhyphenpenalty\the\exhyphenpenalty\relax}%
+ \fi
+ \hyphenpenalty\plustenthousand
+ \exhyphenpenalty\plustenthousand}
+
+\let\dohyphens\relax
+
+%D To prevent unwanted side effects, we also have to check
+%D for hyphens here:
+
+\newskip\@@raggedskipa
+\newskip\@@raggedskipb
+
+\def\setraggedness#1%
+ {\ifnum\tolerance<1500\relax % small values have
+ \tolerance1500\relax % unwanted side effects
+ \fi
+ \ifx\dohyphens\relax
+ % this code will be reconsidered / kind of fuzzy (and old)
+ \@@raggedskipa 2.5\hsize
+ \@@raggedskipb #1\relax
+ \divide\@@raggedskipa \@@raggedskipb
+ \hyphenpenalty\@@raggedskipa
+ \fi}
+
+\let\updateraggedskips\relax
+
+\def\setraggedskips#1#2#3#4#5#6#7% never change this name
+ {\def\updateraggedskips{\dosetraggedskips{#1}{#2}{#3}{#4}{#5}{#6}{#7}}%
+ \updateraggedskips}
+
+\def\dosetraggedskips#1#2#3#4#5#6#7%
+ {\chardef \raggedstatus#1\relax
+ \leftskip 1\leftskip \!!plus#2\relax % zie: Tex By Topic 8.1.3
+ \rightskip 1\rightskip\!!plus#3\relax % zie: Tex By Topic 8.1.3
+ \spaceskip #4\relax
+ \xspaceskip #5\relax
+ \parfillskip\zeropoint\!!plus#6\relax
+ \parindent #7\relax}
+
+% \def\notragged%
+% {\setraggedskips{0}{0em}{0em}{0em}{0em}{1fil}{\parindent}}
+
+% older (context) names:
+
+\let\spaceamount \interwordspace
+\let\emspaceamount\emwidth
+
+% tracing:
+
+\def\doshowpardata#1%
+ {\ifx#1\relax\else
+ \hbox{\string#1: \the#1}\endgraf
+ \expandafter\doshowpardata
+ \fi}
+
+\def\showpardata
+ {\edef\thepardata
+ {\hbox{font: \fontname\font}\endgraf
+ \doshowpardata
+ \interwordspace \interwordstretch \interwordshrink \emwidth \exheight \extraspace
+ \hsize \vsize
+ \leftskip \rightskip
+ \spaceskip \xspaceskip
+ \parindent \parfillskip
+ \hyphenpenalty \exhyphenpenalty
+ \displaywidowpenalty \widowpenalty \clubpenalty \brokenpenalty
+ \doublehyphendemerits \finalhyphendemerits \adjdemerits
+ \relax}%
+ \begingroup
+ \dontshowcomposition
+ \inleftmargin{\vsmash
+ {\switchtobodyfont[7pt,tt]%
+ \framed[\c!align=\v!right]{\thepardata}}}%
+ \endgroup}
+
+\unexpanded\def\startshowpardata
+ {\begingroup
+ \showcomposition
+ \showstruts\tracepositionstrue \tracingparagraphs\maxdimen
+ \appendtoksonce\showpardata\let\showpardata\relax\to\everypar}
+
+\unexpanded\def\stopshowpardata
+ {\endgraf
+ \endgroup}
+
+% defaults
+
+\def\raggedfillamount {1fil}
+\def\raggedhalffillamount{.5fil}
+\def\raggedspaceamount {\interwordspace} % {.3333em}
+\def\raggedxspaceamount {.5em}
+
+\unexpanded\def\notragged
+ {\chardef\raggedstatus\zerocount
+ \leftskip 1\leftskip
+ \rightskip 1\rightskip
+ \spaceskip \zeropoint
+ \xspaceskip \zeropoint
+ \parfillskip\zeropoint\!!plus\raggedfillamount\relax
+ \let\updateraggedskips\relax} % new
+
+\let\forgetragged\notragged
+
+\unexpanded\def\raggedleft
+ {\setraggedness\leftraggedness
+ \setraggedskips1\leftraggedness\zeropoint\raggedspaceamount
+ \raggedxspaceamount\zeropoint\zeropoint}
+
+\unexpanded\def\raggedcenter
+ {\setraggedness\middleraggedness
+ \setraggedskips2\middleraggedness\middleraggedness\raggedspaceamount
+ \raggedxspaceamount\zeropoint\zeropoint}
+
+%D We used to have:
+%D
+%D \starttyping
+%D \def\raggedright
+%D {\setraggedness\rightraggedness
+%D \setraggedskips{3}{0em}{\rightraggedness}{.3333em}{.5em}{0em}{\parindent}}
+%D \stoptyping
+%D
+%D However, the next alternative, suggested by Taco, is better.
+
+\unexpanded\def\raggedright
+ {\setraggedness\rightraggedness
+ \setraggedskips3\zeropoint\rightraggedness\raggedspaceamount
+ \raggedxspaceamount\raggedfillamount\parindent}
+
+\unexpanded\def\veryraggedleft
+ {\setraggedskips1\raggedfillamount\zeropoint\raggedspaceamount
+ \raggedxspaceamount\zeropoint\zeropoint}
+
+%D When we want the last line to have a natural width:
+%D
+%D \starttyping
+%D \def\veryraggedleft%
+%D {\setraggedskips{1}{1fil}{0em}{.3333em}{.5em}{0em}{-1fil}}
+%D \stoptyping
+%D
+%D but this one is not accepted by the macros.
+
+\unexpanded\def\veryraggedcenter
+ {\setraggedskips2\raggedfillamount\raggedfillamount\raggedspaceamount
+ \raggedxspaceamount\zeropoint\zeropoint}
+
+\unexpanded\def\veryraggedright
+ {\setraggedskips3\zeropoint\raggedfillamount\raggedspaceamount
+ \raggedxspaceamount\zeropoint\parindent}
+
+\unexpanded\def\ttraggedright
+ {\tttf
+ \setraggedskips3\zeropoint\rightraggedness
+ \zeropoint\zeropoint\zeropoint\parindent} % \ctxparindent
+
+%D A bonus one:
+
+\unexpanded\def\raggedwidecenter
+ {\setraggedness\middleraggedness
+ \setraggedskips2\raggedhalffillamount\raggedhalffillamount
+ \raggedspaceamount\raggedxspaceamount\zeropoint\zeropoint}
+
+\newif\if@@asragged \@@asraggedtrue % old method
+
+% todo
+%
+% \setuplayout[grid=yes,lines=44] \showgrid
+% \starttext
+% test \vfill test \endgraf \strut \endgraf \vskip-\lineheight \removedepth \pagina test
+% \stoptext
+
+% \setupalign[reset,new,right,old]
+
+\def\@@align@@rl{\if!!donea\veryraggedleft \else\raggedleft \fi}
+\def\@@align@@rr{\if!!donea\veryraggedright \else\raggedright \fi}
+\def\@@align@@rc{\if!!donea\veryraggedcenter\else\raggedcenter\fi}
+
+\setvalue{@@ngila@@\v!broad }{\!!doneatrue}
+\setvalue{@@ngila@@\v!wide }{\!!donebtrue}
+
+\def\installalign#1#2{\setvalue{@@align@@#1}{#2}} % can be used for overloads
+
+\installalign \v!new {\@@asraggedfalse}
+\installalign \v!old {\@@asraggedtrue}
+\installalign \empty {}
+
+\installalign \v!line {\baselinebottom}
+\installalign \v!bottom {\raggedbottom}
+\installalign \v!height {\normalbottom}
+\installalign \v!width {\notragged}
+\installalign \v!normal {\notragged}
+\installalign \v!yes {\notragged}
+\installalign \v!no {\raggedright}
+\installalign \v!inner {\if@@asragged \setraggedparagraphmode\@@align@@rl\@@align@@rr \else
+ \setraggedparagraphmode\@@align@@rr\@@align@@rl \fi}
+\installalign \v!outer {\if@@asragged \setraggedparagraphmode\@@align@@rr\@@align@@rl \else
+ \setraggedparagraphmode\@@align@@rl\@@align@@rr \fi}
+\installalign \v!left {\if@@asragged\@@align@@rl\else\@@align@@rr\fi}
+\installalign \v!right {\if@@asragged\@@align@@rr\else\@@align@@rl\fi}
+\installalign \v!middle {\if!!doneb\raggedwidecenter\else\@@align@@rc\fi}
+\installalign \v!flushleft {\if!!donea\veryraggedright \else\raggedright\fi}
+\installalign \v!flushright {\if!!donea\veryraggedleft \else\raggedleft \fi}
+\installalign \v!flushouter {\setraggedparagraphmode\raggedleft\raggedright}
+\installalign \v!flushinner {\setraggedparagraphmode\raggedright\raggedleft}
+\installalign \v!center {\if!!doneb\raggedwidecenter\else\@@align@@rc\fi}
+\installalign \v!hanging {\enableprotruding}
+\installalign \v!nothanging {\disableprotruding}
+\installalign \v!hz {\enableadjusting}
+\installalign \v!nohz {\disableadjusting}
+\installalign \v!spacing {\enablespacehandling \enablekernhandling}
+\installalign \v!nospacing {\disablespacehandling\disablekernhandling}
+\installalign \v!hyphenated {\dohyphens}
+\installalign \v!nothyphenated {\nohyphens}
+\installalign \v!new {\@@asraggedfalse} % so new will give you consistency
+\installalign \v!reset {\notragged\normalbottom}
+
+\installalign \v!tolerant {\tolerance3000 \relax}
+\installalign \v!verytolerant {\tolerance4500 \relax}
+\installalign \v!stretch {\emergencystretch\bodyfontsize}
+
+\installalign \v!righttoleft {\lefttoright}
+\installalign \v!lefttoright {\righttoleft}
+\installalign {l2r} {\lefttoright}
+\installalign {r2l} {\righttoleft}
+
+\newcount\hyphenminoffset
+
+\ifx\sethyphenationvariables\undefined \let\sethyphenationvariables\relax \fi
+
+\unexpanded\def\lesshyphens
+ {\advance\hyphenminoffset\plusone
+ \sethyphenationvariables}
+
+\unexpanded\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}
+
+\unexpanded\def\setupalign
+ {\dosingleargument\dosetupalign}
+
+\def\dosetupalign[#1]% can be made faster by checking for defined #1
+ {\!!doneafalse
+ \!!donebfalse
+ \processcommacommand[#1]\dodosetupngila
+ \processcommacommand[#1]\dodosetupalign}
+
+% \setupalign[flushleft] \input ward \par % lijnlinks
+% \setupalign[right] \input ward \par
+
+% \setupalign[flushright] \input ward \par % lijnrechts
+% \setupalign[left] \input ward \par
+
+% \setupalign[middle] \input ward \par % centreer
+% \setupalign[center] \input ward \par
+
+\unexpanded\def\startalignment
+ {\bgroup
+ \setupalign}
+
+\unexpanded\def\stopalignment
+ {\par
+ \egroup}
+
+\chardef\alignstrutmode=1
+
+% see later for the real definition, which in the simple case is:
+
+\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
+ {\noindentation % was \noindent
+ \dontleavehmode % added in marrakesch at TUG 2006\begingroup
+ \begingroup
+ \setlocalhsize % new
+ \def\\{\egroup\par\doalignline{#1}{#2}\bgroup}%
+ \dowithnextbox
+ {\hbox to \localhsize
+ {\ifcase\alignstrutmode\or\strut\fi
+ \the\everyleftofalignedline
+ #1\unhbox\nextbox#2\relax
+ \the\everyrightofalignedline}%
+ \endgroup}
+ \hbox}
+
+% plain commands
+
+\ifdefined\line \else \def\line {\hbox to\hsize} \fi
+\ifdefined\leftline \else \def\leftline #1{\line{#1\hss}} \fi
+\ifdefined\rightline \else \def\rightline #1{\line{\hss#1}} \fi
+\ifdefined\centerline \else \def\centerline#1{\line{\hss#1\hss}} \fi
+
+% directe commando's
+
+\def\leftaligned {\doalignline \relax \hss }
+\def\midaligned {\doalignline \hss \hss }
+\def\rightaligned{\doalignline \hss \relax}
+
+\let\centeraligned\midaligned
+
+\def\regelbegrensd#1{\limitatetext{#1}{\hsize}{\unknown}} % to be translated
+
+% indirecte commando's
+
+\letvalue{\s!do\v!line\v!left }\leftaligned
+\letvalue{\s!do\v!line\v!right }\rightaligned
+\letvalue{\s!do\v!line\v!middle }\midaligned
+\letvalue{\s!do\v!line\v!flushleft }\rightaligned
+\letvalue{\s!do\v!line\v!flushright}\leftaligned
+\letvalue{\s!do\v!line\v!center }\midaligned
+
+\def\doalignedline#1{\csname\s!do\v!line#1\endcsname}
+
+%D Experimental:
+
+\def\doxalignline#1#2#3#4#5#6%
+ {\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 moved up
+ \hbox to \localhsize
+ {#1\hskip\ifdone#2\else#3\fi#4%
+ \hbox to \localhsize
+ {\the\everyleftofalignedline
+ \ifcase\alignstrutmode\or\strut\fi
+ \ifdone#5\unhbox\nextbox#6\else#6\unhbox\nextbox#5\fi
+ \the\everyrightofalignedline}%
+ \hss}%
+ \endgroup}
+ \hbox}
+
+\def\doxcheckline
+ {\signalrightpage\doifrightpageelse\donetrue\donefalse}
+
+\setvalue{\s!do\v!line\v!inner }{\doxalignline\doxcheckline++\zeropoint \relax\hss }
+\setvalue{\s!do\v!line\v!outer }{\doxalignline\doxcheckline++\zeropoint \hss \relax}
+\setvalue{\s!do\v!line\v!innermargin}{\doxalignline\doxcheckline-+\innermargintotal\relax\hss }
+\setvalue{\s!do\v!line\v!outermargin}{\doxalignline\doxcheckline+-\outermargintotal\hss \relax}
+\setvalue{\s!do\v!line\v!inneredge }{\doxalignline\doxcheckline-+\inneredgetotal \relax\hss }
+\setvalue{\s!do\v!line\v!outeredge }{\doxalignline\doxcheckline+-\outeredgetotal \hss \relax}
+\setvalue{\s!do\v!line\v!backspace }{\doxalignline\doxcheckline-+\backspace \relax\hss }
+\setvalue{\s!do\v!line\v!cutspace }{\doxalignline\doxcheckline+-\cutspace \hss \relax}
+
+\setvalue{\s!do\v!line\v!leftmargin }{\doxalignline\donefalse --\leftmargintotal \hss \relax}
+\setvalue{\s!do\v!line\v!rightmargin}{\doxalignline\donefalse ++\rightmargintotal\relax\hss }
+\setvalue{\s!do\v!line\v!leftedge }{\doxalignline\donefalse --\leftedgetotal \hss \relax}
+\setvalue{\s!do\v!line\v!rightedge }{\doxalignline\donefalse ++\rightedgetotal \relax\hss }
+
+% ! ! ! beware, redefining \doalignline gives the wrong results ! ! !
+%
+% \def\doalignline{\doxalignline\donefalse++\zeropoint}
+
+%D Better:
+
+\def\doalignedline#1{\csname\s!do\v!line#1\endcsname}
+
+\def\alignedline#1#2% setting default
+ {\csname\s!do\v!line\ifcsname\s!do\v!line#1\endcsname#1\else#2\fi\endcsname}
+
+% \def\woordrechts
+% {\groupedcommand{\hfill\hbox}{\parfillskip\zeropoint}}
+
+% beware: \wordright{whatever\kern-\rightskip} should work!
+% so, no funny boxing here
+
+\def\dowordright[#1]%
+ {% don't change
+ \groupedcommand
+ {\removeunwantedspaces
+ \hfill
+ \allowbreak % changed back from \hskip\zeropoint
+ \strut
+ \hfill
+ \quad % decent spacing
+ \hbox}
+ {\doifelse{#1}\v!right{\kern-\rightskip}{\doifsomething{#1}{\kern-#1}}%
+ \parfillskip\zeropoint
+ \finalhyphendemerits\zerocount % yes or no (see hyhenation/specialcases-001.tex)
+ \par}}
+
+\unexpanded\def\wordright
+ {\dosingleempty\dowordright}
+
+% \dorecurse{5}{something } \wordright{--someone} \endgraf
+% \dorecurse{6}{something } \wordright{--someone} \endgraf
+% \dorecurse{7}{something } \wordright{--someone} \endgraf
+%
+% \dorecurse{5}{something } \wordright{--someone else entirely} \endgraf
+% \dorecurse{6}{something } \wordright{--someone else entirely} \endgraf
+% \dorecurse{7}{something } \wordright{--someone else entirely} \endgraf
+%
+% \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}}
+
+\unexpanded\def\simplealignedbox#1{\executeifdefined{\s!simple\c!align#1}{\getvalue{\s!simple\c!align\v!right}}}
+
+\protect \endinput
diff --git a/Master/texmf-dist/tex/context/base/spac-def.mkiv b/Master/texmf-dist/tex/context/base/spac-def.mkiv
new file mode 100644
index 00000000000..3aa85dda515
--- /dev/null
+++ b/Master/texmf-dist/tex/context/base/spac-def.mkiv
@@ -0,0 +1,118 @@
+%D \module
+%D [ file=spac-def,
+%D version=2009.10.16, % 1997.03.31, was core-spa.tex
+%D title=\CONTEXT\ Spacing 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.
+
+\writestatus{loading}{ConTeXt Spacing Macros / Definitions}
+
+\unprotect
+
+\def\forgeteverypar
+ {\everypar{\the\neverypar}}
+
+\def\forgetparindent
+ {\forgeteverypar
+ \indentfirstparagraphtrue % recently added
+ \let\currentindentation\v!none
+ \ctxparindent\zeropoint
+ \parindent\zeropoint\relax}
+
+\def\forgetparskip
+ {\let\currentwhitespace\v!none
+ \ctxparskip\zeropoint
+ \parskip\zeropoint\relax}
+
+\def\forgetbothskips
+ {\tolerance1500
+ \leftskip\zeropoint
+ \rightskip\zeropoint\relax}
+
+\def\forgetspacing
+ {\emergencystretch\zeropoint}
+
+\newif\ifforgotten % rather good signal for inner
+
+\appendtoks \forgottentrue \to \everyforgetall
+\appendtoks \forgetragged \to \everyforgetall
+\appendtoks \forgetparskip \to \everyforgetall
+\appendtoks \forgetparindent \to \everyforgetall
+\appendtoks \forgetbothskips \to \everyforgetall
+\appendtoks \forgetspacing \to \everyforgetall % i.v.m. funny spacing in pagebody
+\appendtoks \spacing\plusone \to \everyforgetall % new per 10/08/2004, else problems in otr / !! needed
+\appendtoks \everypar\emptytoks \to \everyforgetall % indeed!
+
+
+\appendtoks \spacing\plusone \to \everybodyfont
+\appendtoks \presetnormallineheight \to \everybodyfont
+\appendtoks \setnormalbaselines \to \everybodyfont % check if redundant
+\appendtoks \setstrut \to \everybodyfont % check if redundant
+\appendtoks \settopskip \to \everybodyfont
+\appendtoks \setmaxdepth \to \everybodyfont
+\appendtoks \simplesetupindenting \to \everybodyfont
+\appendtoks \simplesetupblank \to \everybodyfont
+\appendtoks \simplesetupwhitespace \to \everybodyfont
+\appendtoks \simplesetupspacing \to \everybodyfont % nieuw
+\appendtoks \setrelativeinterlinespace \to \everybodyfont
+
+\appendtoks \updateraggedskips \to \everyfontswitch % under test
+\prependtoks \let\par\endgraf \to \everypagebody % see \fillinline
+\appendtoks \simplesetupspacing \to \everydefinedfont
+
+\setupwhitespace
+ [\v!none]
+
+\indenting
+ [\v!never]
+
+\setupindenting
+ [\v!none]
+
+\setupvspacing
+ [\v!standard,
+ \v!big]
+
+\definevspacing[\v!default] [\currentblank]
+\definevspacing[\v!before] [\v!default]
+\definevspacing[\v!inbetween][\v!default]
+\definevspacing[\v!after] [\v!before]
+
+\setupinterlinespace
+ [\c!minheight=0pt, % only special purpose
+ \c!mindepth=0pt, % only special purpose
+ \c!height=.72,
+ \c!depth=.28,
+ \c!top=1.0,
+ \c!bottom=0.4,
+ \c!distance=1pt,
+ \c!line=2.8ex,
+ \c!stretch=0]
+
+\setupnarrower
+ [\c!before=\endgraf,
+ \c!after=\endgraf,
+ \c!left=1.5em,
+ \c!right=1.5em,
+ \c!middle=1.5em]
+
+\setuptolerance
+ [\v!horizontal,\v!verystrict]
+
+\setuptolerance
+ [\v!vertical,\v!strict]
+
+\setupalign
+ [\v!bottom,
+ \v!width]
+
+\setupspacing
+ [\v!packed]
+
+\protect \endinput
diff --git a/Master/texmf-dist/tex/context/base/spac-fnt.mkiv b/Master/texmf-dist/tex/context/base/spac-fnt.mkiv
new file mode 100644
index 00000000000..c268d7893cf
--- /dev/null
+++ b/Master/texmf-dist/tex/context/base/spac-fnt.mkiv
@@ -0,0 +1,94 @@
+%D \module
+%D [ file=spac-fnt,
+%D version=2009.10.16, % 1997.03.31, was core-spa.tex
+%D title=\CONTEXT\ Spacing Macros,
+%D subtitle=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.
+
+\writestatus{loading}{ConTeXt Spacing Macros / Fonts}
+
+%D For historic reasons here, will move and/or disappear:
+
+\unprotect
+
+\let\dostopattributes\relax % in case these commands end up in an edef
+
+\unexpanded\def\@@dostopattributes
+ {\stopcolor
+ \finishparbasedattributes
+ \endgroup}
+
+\unexpanded\def\@@nostopattributes
+ {\finishparbasedattributes
+ \endgroup}
+
+\unexpanded\def\doattributes#1#2#3#4%
+ {\dostartattributes{#1}{#2}{#3}{#4}\dostopattributes}
+
+% An even faster \ETEX\ version:
+
+\unexpanded\def\dostartattributes#1#2#3%
+ {\begingroup % geen \bgroup, anders in mathmode lege \hbox
+ \ifincolor
+ \ifcsname#1#3\endcsname
+ \let\dostopattributes\@@dostopattributes
+ \faststartcolor[\csname#1#3\endcsname]%
+ \else
+ \let\dostopattributes\@@nostopattributes
+ \fi
+ \else
+ \let\dostopattributes\@@nostopattributes
+ \fi
+ \ifcsname#1#2\endcsname
+ % \@EAEAEA\doconvertfont\@EA\@EA\csname#1#2\endcsname
+ \@EA\doconvertfont\csname#1#2\@EA\endcsname
+ \fi}
+
+\unexpanded\def\@@dostopattributes
+ {\faststopcolor
+ \finishparbasedattributes
+ \endgroup}
+
+\unexpanded\def\@@nostopattributes
+ {\finishparbasedattributes
+ \endgroup}
+
+%D Bonus macro, see core-sec.tex
+
+\newconditional\fontattributeisset
+
+\unexpanded\def\dosetfontattribute#1#2%
+ {\ifcsname#1#2\endcsname
+ \settrue\fontattributeisset % reset is done elsewhere
+ \@EA\doconvertfont\csname#1#2\@EA\endcsname
+ \fi\empty}
+
+%D Since this happens a lot, and sometimes large arguments
+%D are passed in \type {#4}, we just copy some code:
+
+\unexpanded\def\doattributes#1#2#3#4%
+ {\begingroup % geen \bgroup, anders in mathmode lege \hbox
+ \ifincolor
+ \ifcsname#1#3\endcsname
+ \let\dostopattributes\@@dostopattributes
+ \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}
+
+\protect \endinput
diff --git a/Master/texmf-dist/tex/context/base/core-spa.mkii b/Master/texmf-dist/tex/context/base/spac-gen.mkii
index 7c97bcc9c88..8274db1b925 100644
--- a/Master/texmf-dist/tex/context/base/core-spa.mkii
+++ b/Master/texmf-dist/tex/context/base/spac-gen.mkii
@@ -1337,21 +1337,11 @@
\definecomplexorsimple\setupspacing
-% \dorecurse{100}{\recurselevel\spacefactor 800 \space} \par
-% \dorecurse{100}{\recurselevel\spacefactor1200 \space} \par
-% \dorecurse{100}{\recurselevel\spacefactor 800 \normalspaceprimitive} \par
-% \dorecurse{100}{\recurselevel\spacefactor1200 \normalspaceprimitive} \par
+\let\normalspaceprimitive=\ % space-comment is really needed else \<newline>
-% When we don't add the % here, we effectively get \<endlinechar> and
-% since we have by default \def\^^M{\ } we get into a loop.
+\unexpanded\def\nonbreakablespace{\penalty\plustenthousand\normalspaceprimitive}
-\let\normalspaceprimitive=\ % space-comment is really needed
-
-\unexpanded\def\ {\mathortext\normalspaceprimitive\space} % no \dontleavehmode\space (else no frenchspacing)
-
-\unexpanded\def\nonbreakablespace{\penalty\plustenthousand\space}
-
-\letcatcodecommand \ctxcatcodes `\~ \nonbreakablespace % overloaded later
+\letcatcodecommand \ctxcatcodes `\~ \nonbreakablespace
\def\space { }
\def\removelastspace{\ifhmode\unskip\fi}
@@ -1376,7 +1366,10 @@
\unskip\unskip\unskip\unskip\unskip
\fi}
-\appendtoks\let~\space\to\simplifiedcommands
+\appendtoks
+ \let~\space
+ \let\ \space
+\to\simplifiedcommands
% still not fixed in aleph / luatex
%
@@ -1590,11 +1583,9 @@
\fi}
\def\dosetupwhitespace % quick test for no list
- {\ifcsname\??ws\??ws\currentwhitespace\endcsname
- \csname\??ws\??ws\currentwhitespace\endcsname
- \else
- \expandafter\processcommalist\expandafter[\currentwhitespace]\dowhitespacemethod % can be raw
- \fi\relax
+ {\doifdefinedelse{\??ws\??ws\currentwhitespace}% no ifcsname due to nested \lineheight
+ {\getvalue{\??ws\??ws\currentwhitespace}}%
+ {\processcommacommand[\currentwhitespace]\dowhitespacemethod}%
\ifgridsnapping
\setfalse\flexiblewhitespace
\ifdim\ctxparskip>\zeropoint
@@ -1659,8 +1650,8 @@
% \def\dowhitespacemethod#1%
% {\executeifdefined{\??ws\??ws#1}{\ctxparskip#1}\relax}
-\def\dowhitespacemethod#1%
- {\ifcsname\??ws\??ws#1\endcsname\csname\??ws\??ws#1\endcsname\else\ctxparskip#1\fi\relax}
+\def\dowhitespacemethod#1% \doifdefined because of \lineheight
+ {\doifdefinedelse{\??ws\??ws#1}{\getvalue{\??ws\??ws#1}}{\ctxparskip#1}\relax}
\def\nowhitespace
{\ifdim\parskip>\zeropoint\relax
@@ -2607,6 +2598,9 @@
[ \v!left=>\global\advance\ctxleftskip \@@slleft,
\v!middle=>\global\advance\ctxmidskip \@@slmiddle,
\v!right=>\global\advance\ctxrightskip \@@slright,
+ -\v!left=>\global\advance\ctxleftskip -\@@slleft,
+ -\v!middle=>\global\advance\ctxmidskip -\@@slmiddle,
+ -\v!right=>\global\advance\ctxrightskip-\@@slright,
\v!reset=>\global\ctxleftskip \zeropoint
\global\ctxmidskip \zeropoint
\global\ctxrightskip\zeropoint,
@@ -4513,10 +4507,10 @@
\def\obeyedspace{\mathortext\normalspace{\dontleavehmode \normalspace }}%
\let\ =\obeyedspace}
-\installspacehandler \v!off
+\installspacehandler \v!off % == default
{\normalspaces
\let\obeyedspace\normalspace
- \let\ =\normalspace}
+ \let\ =\normalspaceprimitive} % was \normalspace
\installspacehandler \v!fixed
{\obeyspaces
diff --git a/Master/texmf-dist/tex/context/base/core-grd.mkii b/Master/texmf-dist/tex/context/base/spac-grd.mkii
index 249e2e4308e..249e2e4308e 100644
--- a/Master/texmf-dist/tex/context/base/core-grd.mkii
+++ b/Master/texmf-dist/tex/context/base/spac-grd.mkii
diff --git a/Master/texmf-dist/tex/context/base/spac-grd.mkiv b/Master/texmf-dist/tex/context/base/spac-grd.mkiv
new file mode 100644
index 00000000000..bd5c51a853e
--- /dev/null
+++ b/Master/texmf-dist/tex/context/base/spac-grd.mkiv
@@ -0,0 +1,259 @@
+%D \module
+%D [ file=spac-grd,
+%D version=2009.10.16, % 1998.03.10, was core-grd.tex
+%D title=\CONTEXT\ Spacing Macros,
+%D subtitle=Grid Snapping,
+%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 will be merged intio spac-ver.mkiv.
+
+\writestatus{loading}{ConTeXt Spacing Macros / Grid Snapping}
+
+% buff-ver.mkiv: halfline spacing
+% strc-mat.mkiv: configure math grid (new code needed)
+% page-one.mkiv: to be checked
+% page-mul.mkiv: to be checked and redone
+% page-sid.mkiv: to be checked
+% page-set.mkiv: to be checked
+% strc-not.mkiv: to be checked
+% strc-ren.mkiv: to be checked
+% strc-flt.mkiv: to be checked (captions, probably top/bottom)
+% core-mis.mkiv: to be checked (placement, probbaly harmless)
+
+\unprotect
+
+%D Helpers:
+
+\let\poplastnode\relax
+
+\def\pushlastnode
+ {\ifdim\lastskip=\zeropoint
+ \ifnum\lastpenalty=\zerocount
+ \ifnum\lastkern=\zerocount
+ \let\poplastnode\relax
+ \else
+ \edef\poplastnode{\kern\the\lastkern\relax}\kern-\lastkern % untested
+ \fi
+ \else
+ \edef\poplastnode{\penalty\the\lastpenalty\relax}\nobreak % untested
+ \fi
+ \else
+ \edef\poplastnode{\vskip\the\lastskip\relax}\vskip-\lastskip % \removelastskip
+ \fi}
+
+%D Moved from supp-box:
+
+%D \macros
+%D {startbaselinecorrection,baselinecorrection,
+%D showbaselinecorrection,offbaselinecorrection}
+%D
+%D Spacing around ruled boxes can get pretty messed up. The
+%D next macro tries as good as possible to fix this.
+%D
+%D \startbuffer[1]
+%D \startbaselinecorrection
+%D \ruledhbox{Rule Brittanica}
+%D \stopbaselinecorrection
+%D \stopbuffer
+%D
+%D \typebuffer[1]
+%D
+%D The macros put some white space around the box:
+%D
+%D \getbuffer[1]
+%D
+%D A simple alternative is \type {\baselinecorrection}, which
+%D only looks at the previous line.
+%D
+%D \startbuffer[2]
+%D \baselinecorrection
+%D \ruledhbox{Rule Brittanica}
+%D \baselinecorrection
+%D \stopbuffer
+%D
+%D \typebuffer[2]
+%D
+%D This time the last preceding line gets a correction,%
+%D dependant on the depth.
+%D
+%D \getbuffer[2]
+%D
+%D One can make the correction visible by saying \type
+%D {\showbaselinecorrection}. Part of the correction is
+%D calculated from the dimensions of a~(. One can disble the
+%D correction by calling \type {\offbaselinecorrection}.
+%D
+%D When visualize the first example looks like:
+%D
+%D {\showbaselinecorrection\getbuffer[1]}
+%D
+%D and the second one comes out as:
+%D
+%D {\showbaselinecorrection\getbuffer[2]}
+
+% \definecolor[GridLineColor][red]
+% \definecolor[GridTextColor][blue]
+
+\let\thetopbaselinecorrection \!!zeropoint
+\let\thebotbaselinecorrection \!!zeropoint
+\let\thenegtopbaselinecorrection\!!zeropoint
+\let\thenegbotbaselinecorrection\!!zeropoint
+
+\def\setbaselinecorrections
+ {\setbox0\hbox{\setstrut\strut}%
+ \setbox2\hbox{(}%
+ \dimen0\ht0\advance\dimen0 -\ht2
+ \ifdim\dimen0<\zeropoint\dimen0\zeropoint\fi
+ \dimen2\dp0\advance\dimen2 -\dp2
+ \ifdim\dimen2<\zeropoint\dimen2\zeropoint\fi
+ \edef\thetopbaselinecorrection {\the\dimen0}\dimen0-\dimen0
+ \edef\thebotbaselinecorrection {\the\dimen2}\dimen2-\dimen2
+ \edef\thenegtopbaselinecorrection{\the\dimen0}%
+ \edef\thenegbotbaselinecorrection{\the\dimen2}}
+
+\def\dotopbaselinecorrection {\kern\thetopbaselinecorrection}
+\def\dobotbaselinecorrection {\kern\thebotbaselinecorrection}
+\def\donegtopbaselinecorrection{\kern\thenegtopbaselinecorrection}
+\def\donegbotbaselinecorrection{\kern\thenegbotbaselinecorrection}
+
+\def\showbaselinecorrection
+ {\def\dobaselinecorrection % visualization is not watertight!
+ {\bgroup
+\ifdim\prevdepth>\zeropoint\kern-\prevdepth\fi
+ \setbox0\null
+ \wd0\hsize
+ \dp0\strutdp
+ \nointerlineskip
+ \forgetall
+ \ruledvbox{\box0}%
+ \egroup
+ \prevdepth\strutdp}%
+ \def\dotopbaselinecorrection
+ {\hrule\!!height\thetopbaselinecorrection}%
+ \def\dobotbaselinecorrection
+ {\hrule\!!height\thebotbaselinecorrection}}
+
+\def\dobaselinecorrection
+ {\ifdim\prevdepth>\zeropoint\kern-\prevdepth\fi
+ \kern\strutdp
+ \prevdepth\strutdp}
+
+\def\baselinecorrection
+ {\endgraf
+ \ifvmode
+ \ifdim\prevdepth<\maxdimen
+ \ifdim\prevdepth<\zeropoint \else
+ \ifdim\prevdepth<\strutdepth \relax
+ \pushlastnode
+ \dobaselinecorrection
+ \poplastnode
+ \fi
+ \fi
+ \fi
+ \fi}
+
+\def\pagebaselinecorrection
+ {\ifdim\pagegoal<\maxdimen
+ \ifdim\pagetotal>\lineheight % or \topskip
+ \scratchdimen\pagetotal
+ \advance\scratchdimen\lineheight
+ \ifdim\scratchdimen<\pagegoal
+ \baselinecorrection
+ \fi
+ \fi
+ \fi}
+
+\unexpanded\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}
+
+%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.
+
+\chardef\baselinecorrectionmode\plusone
+
+\def\onbaselinecorrection {\chardef\baselinecorrectionmode\plusone }
+\def\offbaselinecorrection {\chardef\baselinecorrectionmode\plustwo }
+\def\forcebaselinecorrection{\chardef\baselinecorrectionmode\plusthree}
+
+%D \macros
+%D {topbaselinecorrection,botbaselinecorrection}
+%D
+%D The actual top and bottom corrections are implemented as:
+
+\def\topbaselinecorrection
+ {\ifvmode \ifdim\pagegoal<\maxdimen
+ \forcedtopbaselinecorrection
+ \fi \fi}
+
+\def\forcedtopbaselinecorrection
+ {\ifvmode
+ \bgroup
+ \setbaselinecorrections
+ \whitespace
+ \nointerlineskip
+ \dotopbaselinecorrection
+ \egroup
+ \fi}
+
+\def\botbaselinecorrection
+ {\ifvmode
+ \bgroup
+ \setbaselinecorrections
+ \dobotbaselinecorrection
+ \allowbreak % new, otherwise problems when many in a row
+ \prevdepth\strutdp
+ \egroup
+ \fi}
+
+\let\forcedbotbaselinecorrection\botbaselinecorrection
+
+\let\normalstartbaselinecorrection\startbaselinecorrection
+
+\unexpanded\def\startbaselinecorrection
+ {\ifgridsnapping
+ \snaptogrid[v!normal]\vbox\bgroup
+ \let\stopbaselinecorrection\egroup
+ \else
+ \normalstartbaselinecorrection
+ \fi}
+
+\protect \endinput
diff --git a/Master/texmf-dist/tex/context/base/spac-hor.lua b/Master/texmf-dist/tex/context/base/spac-hor.lua
new file mode 100644
index 00000000000..6cb6e3f497b
--- /dev/null
+++ b/Master/texmf-dist/tex/context/base/spac-hor.lua
@@ -0,0 +1,32 @@
+if not modules then modules = { } end modules ['spac-hor'] = {
+ version = 1.001,
+ comment = "companion to spac-hor.mkiv",
+ author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
+ copyright = "PRAGMA ADE / ConTeXt Development Team",
+ license = "see context related readme files"
+}
+
+local match = string.match
+local utfbyte = utf.byte
+local chardata = characters.data
+
+local can_have_space = table.tohash {
+ "lu", "ll", "lt", "lm", "lo", -- letters
+ -- "mn", "mc", "me", -- marks
+ "nd", "nl", "no", -- numbers
+ "ps", "pi", -- initial
+ -- "pe", "pf", -- final
+ -- "pc", "pd", "po", -- punctuation
+ "sm", "sc", "sk", "so", -- symbols
+ -- "zs", "zl", "zp", -- separators
+ -- "cc", "cf", "cs", "co", "cn", -- others
+}
+
+function commands.autonextspace(str) -- todo: use nexttoken
+ local ch = match(str,"the letter (.)") or match(str,"the character (.)")
+ ch = ch and chardata[utfbyte(ch)]
+ if ch and can_have_space[ch.category] then
+ -- texsprint(ctxcatcodes,"\\space") -- faster
+ context.space()
+ end
+end
diff --git a/Master/texmf-dist/tex/context/base/spac-hor.mkiv b/Master/texmf-dist/tex/context/base/spac-hor.mkiv
new file mode 100644
index 00000000000..9f902678a4c
--- /dev/null
+++ b/Master/texmf-dist/tex/context/base/spac-hor.mkiv
@@ -0,0 +1,946 @@
+%D \module
+%D [ file=spac-hor,
+%D version=2009.10.16, % 1997.03.31, was core-spa.tex
+%D title=\CONTEXT\ Spacing Macros,
+%D subtitle=Horizontal,
+%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 Spacing Macros / Horizontal}
+
+\unprotect
+
+\registerctxluafile{spac-hor}{1.001}
+
+\let\currentindentation\empty % amount/keyword
+\let\currentindenting \empty % method
+
+\newdimen \ctxparindent
+\parindent\ctxparindent % for the show
+
+\newif \ifindentfirstparagraph \indentfirstparagraphtrue
+\chardef\indentingtoggle\zerocount
+
+%D After a blank or comparable situation (left side floats) we
+%D need to check if the next paragraph has to be indented.
+
+\def\presetindentation
+ {\doifoutervmode{\ifindentfirstparagraph\else\noindentation\fi}}
+
+% we need a better everypar model: for each option a switch, which we
+% set to false with \forgetall and can enable when needed (context 4);
+% that way we can control the order of execution of options
+
+\def\checkeverypar % currently a hack
+ {\ifzeropt\parindent\else
+ \doifsometokselse\everypar\donothing{\appendtoks\checkindentation\to\everypar}%
+ \fi}
+
+\definecomplexorsimple\setupindenting
+
+\def\complexsetupindenting[#1]%
+ {\edef\currentindenting{#1}%
+ \doifsomething\currentindenting % handy when a parameter is passed
+ {% not here: \indentfirstparagraphtrue
+ % not here: \parindent\ctxparindent
+ % not here: \chardef\indentingtoggle\zerocount
+ % we use commacommand in order to catch #1 being a command (expanded parameter)
+ \processcommacommand[\currentindenting]\docomplexsetupindentingA % catch small, medium, etc
+ \processcommacommand[\currentindenting]\docomplexsetupindentingB % catch rest
+ \checkeverypar % only when non-empty #1
+ \ifindentfirstparagraph\else\noindentation\fi % added
+ \toggleindentation}}
+
+\def\docomplexsetupindentingA#1%
+ {\edefconvertedargument\!!stringa{#1}% can this be done differently now?
+ \ifcsname\??in:\!!stringa\endcsname \else
+ \edef\currentindentation{#1}%
+ \let\normalindentation\currentindentation
+ \simplesetupindenting
+ \fi}
+
+\def\docomplexsetupindentingB#1%
+ {\edefconvertedargument\!!stringa{#1}% catch #1=\somedimen
+ \executeifdefined{\??in:\!!stringa}\donothing}
+
+\def\simplesetupindenting % empty case, a it strange, needed this way?
+ {\assigndimension\currentindentation\ctxparindent{1em}{1.5em}{2em}}
+
+\def\indenting % kind of obsolete
+ {\dosingleargument\complexsetupindenting}
+
+% use \noindentation to suppress next indentation
+
+\unexpanded\def\defineindentingmethod[#1]#2%
+ {\setvalue{\??in:#1}{#2}}
+
+\defineindentingmethod [\v!no] {\parindent\zeropoint}% was: \ctxparindent\noindent}
+\defineindentingmethod [\v!not] {\parindent\zeropoint}% was: \ctxparindent\noindent}
+
+\defineindentingmethod [\v!first] {\indentfirstparagraphtrue}
+\defineindentingmethod [\v!next] {\indentfirstparagraphfalse}
+
+\defineindentingmethod [\v!yes] {\parindent\ctxparindent\relax} % no \indent !
+\defineindentingmethod [\v!always] {\parindent\ctxparindent\relax} % no \indent !
+
+\defineindentingmethod [\v!never] {\parindent\zeropoint\relax % no \indent !
+ \chardef\indentingtoggle\zerocount}
+
+\defineindentingmethod [\v!odd] {\chardef\indentingtoggle\plusone}
+\defineindentingmethod [\v!even] {\chardef\indentingtoggle\plustwo}
+
+\defineindentingmethod [\v!normal] {\ifx\normalindentation\empty\else
+ \let\currentindentation\normalindentation
+ \simplesetupindenting
+ \fi}
+
+\defineindentingmethod [\v!reset] {\indentfirstparagraphtrue
+ \parindent\zeropoint
+ \chardef\indentingtoggle\zerocount}
+
+\def\noindenting{\indenting[\v!no, \v!next ]}
+\def\doindenting{\indenting[\v!yes,\v!first]}
+
+%D This one sets up the local indentation behaviour (i.e. either or not
+%D a next paragraph will be indented).
+
+\def\dochecknextindentation#1% internal one
+ {\checknextindentation[\csname#1\c!indentnext\endcsname]}
+
+\setvalue{\??in->\s!empty}{}
+\setvalue{\??in->\v!yes }{\doindentation}
+\setvalue{\??in->\v!no }{\noindentation}
+\setvalue{\??in->\v!auto }{\autoindentation}
+
+\unexpanded\def\checknextindentation[#1]%
+ {\csname\??in->\ifcsname\??in->#1\endcsname#1\else\s!empty\fi\endcsname}
+
+%D Here come the handlers.
+
+\newif\ifindentation \indentationtrue % documenteren, naar buiten
+
+\let\checkindentation\relax
+
+\ifx\autoindentation\undefined \let\autoindentation\relax \fi % hook
+
+\def\doindentation
+ {\gdef\checkindentation{\global\indentationtrue}}
+
+\def\noindentation % made global
+ {\ifinpagebody \else
+ \global\indentationfalse
+ \gdef\checkindentation
+ {\donoindentation
+ \gdef\checkindentation{\global\indentationtrue}}%
+ \fi}
+
+\def\nonoindentation % bv bij floats
+ {\ifinpagebody \else
+ \global\indentationtrue
+ \gdef\checkindentation{\global\indentationtrue}%
+ \fi}
+
+\def\donoindentation
+ {\ifdim\parindent=\zeropoint \else
+ \bgroup \setbox\scratchbox\lastbox \egroup
+ \fi}
+
+\def\indentation
+ {\ifvmode \ifdim\parindent=\zeropoint \else
+ % was : \hskip\parindent
+ % can be: \indent
+ % but we test:
+ \noindent\hskip\parindent
+ \fi \fi}
+
+\def\toggleindentation % does not play well with noindentation
+ {\ifcase\indentingtoggle
+ % nothing
+ \or
+ \notoggleindentation
+ \or
+ \dotoggleindentation
+ \fi}
+
+\def\dokillindentation
+ {\gdef\checkindentation{\global\indentationfalse\donoindentation}}
+
+\def\dotoggleindentation
+ {\gdef\checkindentation{\global\indentationfalse\notoggleindentation\donoindentation}}
+
+\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
+%
+% \def\setlasthvmode
+% {\global\chardef\savedhvmode\ifhmode\plusone\else\ifvmode\plustwo\else\zerocount\fi\fi}
+%
+% \def\resetlasthvmode
+% {\global\chardef\savedhvmode\zerocount}
+%
+% \chardef\savedhvmode\zerocount
+
+% This is a user requested hack (using the auto-hook).
+
+\chardef\recheckindentationmode\zerocount
+
+\def\dontrechecknextindentation
+ {\global\chardef\recheckindentationmode\zerocount}
+
+\def\dorechecknextindentation
+ {\ifcase\recheckindentationmode
+ % nothing
+ \or
+ \dontrechecknextindentation
+ \expandafter\doautoindentation
+ \fi}
+
+\def\doautoindentation
+ {\doifnextcharelse\par\donothing\noindentation}
+
+\def\autoindentation
+ {\global\chardef\recheckindentationmode\plusone}
+
+%D An example of usage:
+%D
+%D \starttyping
+%D \setupindenting[small,yes]
+%D
+%D \setupitemize [indentnext=auto]
+%D \setuptyping [indentnext=auto]
+%D \setupformulas[indentnext=auto]
+%D
+%D \input tufte \startitemize \item itemize \stopitemize
+%D \input tufte \startitemize \item itemize \stopitemize
+%D \input tufte \startitemize \item itemize \stopitemize
+%D
+%D \page
+%D
+%D \input tufte
+%D \starttyping
+%D verbatim
+%D \stoptyping
+%D
+%D \input tufte
+%D \starttyping
+%D verbatim
+%D \stoptyping
+%D
+%D \input tufte
+%D \starttyping
+%D verbatim
+%D \stoptyping
+%D
+%D \page
+%D
+%D \input tufte \startformula a = b \stopformula
+%D \input tufte \startformula a = b \stopformula
+%D \input tufte \startformula a = b \stopformula
+%D \stoptyping
+
+\def\softbreak
+ {\relax\ifhmode\hskip\parfillskip\break\fi}
+
+%D \macros
+%D {frenchspacing,nonfrenchspacing}
+%D
+%D Smehow \type{\frenchspacing} can lead to hyphenation between
+%D dashes so we now have \type {\newfrenchspacing} (moved from
+%D \type {syst-chr}).
+
+%D Hm ... todo:
+
+\sfcode`\)=0
+\sfcode`\'=0
+\sfcode`\]=0
+
+\def\setfrenchspacing#1%
+ {\sfcode`\.#1 \sfcode`\,#1\relax
+ \sfcode`\?#1 \sfcode`\!#1\relax
+ \sfcode`\:#1 \sfcode`\;#1\relax}
+
+\def\frenchspacing
+ {\setfrenchspacing{1000}}
+
+\def\resetfrenchspacing
+ {\sfcode`\.3000 \sfcode`\,1250
+ \sfcode`\?3000 \sfcode`\!3000
+ \sfcode`\:2000 \sfcode`\;1500 }
+
+\def\frenchspacing {\setfrenchspacing{1000}}
+\def\newfrenchspacing{\setfrenchspacing{1050}}
+\def\nonfrenchspacing{\resetfrenchspacing}
+
+\unexpanded\def\definespacingmethod[#1]#2{\setvalue{\??sg\??sg#1}{#2}}
+
+\definespacingmethod[\v!packed]{\newfrenchspacing}
+\definespacingmethod[\v!broad ]{\nonfrenchspacing}
+
+\def\complexsetupspacing[#1]%
+ {\executeifdefined{\??sg\??sg#1}\relax
+ \updateraggedskips}
+
+\def\simplesetupspacing
+ {\updateraggedskips}
+
+\definecomplexorsimple\setupspacing
+
+% \dorecurse{100}{\recurselevel\spacefactor 800 \space} \par
+% \dorecurse{100}{\recurselevel\spacefactor1200 \space} \par
+% \dorecurse{100}{\recurselevel\spacefactor 800 \normalspaceprimitive} \par
+% \dorecurse{100}{\recurselevel\spacefactor1200 \normalspaceprimitive} \par
+
+% When we don't add the % here, we effectively get \<endlinechar> and
+% since we have by default \def\^^M{\ } we get into a loop.
+
+\let\normalspaceprimitive=\ % space-comment is really needed
+
+% hm ...
+
+% \unexpanded\def\normalnotobeyedspace{\mathortext\normalspaceprimitive\space} % no \dontleavehmode\space (else no frenchspacing)
+% \let\ =\normalnotobeyedspace
+
+% Because I strip spaces at the end of lines (in the editor) we need a bit of
+% a trick to define slash+newline, so \space and \<newline> are the same
+
+% We need to be careful with \ and \space and the definition of ~ which uses \ as
+% we need to associate unicode spacing with it. There is some messy thing that that
+% I forgot to note down so I will revision the \ once I ran into it again.
+
+% \ruledhbox spread 10pt {\frenchspacing xx xx\ X}
+% \ruledhbox spread 10pt {\nonfrenchspacing xx xx\ X}
+% \ruledhbox spread 10pt {\frenchspacing xx xx X}
+% \ruledhbox spread 10pt {\nonfrenchspacing xx xx X}
+% \ruledhbox spread 10pt {\frenchspacing xx xx~X}
+% \ruledhbox spread 10pt {\nonfrenchspacing xx xx~X}
+
+% \ruledhbox spread 10pt {\frenchspacing xx dr.\ X}
+% \ruledhbox spread 10pt {\nonfrenchspacing xx dr.\ X}
+% \ruledhbox spread 10pt {\frenchspacing xx dr. X}
+% \ruledhbox spread 10pt {\nonfrenchspacing xx dr. X}
+% \ruledhbox spread 10pt {\frenchspacing xx dr.~X}
+% \ruledhbox spread 10pt {\nonfrenchspacing xx dr.~X}
+
+\unexpanded\def\nonbreakablespace{\penalty\plustenthousand\normalspaceprimitive} % no space in math
+
+\letcatcodecommand \ctxcatcodes `\~ \nonbreakablespace % overloaded later
+
+\def\space { }
+\def\removelastspace{\ifhmode\unskip\fi}
+\def\nospace {\removelastspace\ignorespaces}
+
+\ifdefined\softhyphen \else \let\softhyphen\- \fi
+
+\ctxlua{tex.sprint(tex.ctxcatcodes,"\string\\unexpanded\string\\def\string\\\string\n{\string\\space}")}
+% \ctxlua{tex.sprint(tex.ctxcatcodes,"\string\\let\string\\\string\n=\string\\space")}
+
+% in tables we need:
+%
+% \def\fixedspace {\hskip.5em\relax}
+%
+% but, since not all fonts have .5em digits:
+
+\unexpanded\def\fixedspace
+ {\setbox\scratchbox\normalhbox{\mathortext{0}{0}}%
+ \hskip\wd\scratchbox\relax}
+
+\def\fixedspaces
+ {\letcatcodecommand \ctxcatcodes `\~ \fixedspace}
+
+\appendtoks
+ \let~\space
+ \let\ \space
+\to\simplifiedcommands
+
+\unexpanded\def\removeunwantedspaces
+ {\ifhmode
+ \expandafter \doremoveunwantedspace
+ \fi}
+
+\def\doremoveunwantedspace
+ {\ifnum\lastnodetype=\@@gluenode
+ \unskip \expandafter\doremoveunwantedspace
+ \fi}
+
+% \startbuffer
+% \startlines \tt \fixedspaces
+% 0~1~~2~~~3~~~~4~~~~~5
+% 0~~~~~~~~~~~~~~~~~~~5
+% $0~1~~2~~~3~~~~4~~~~~5$
+% $0~~~~~~~~~~~~~~~~~~~5$
+% \stoplines
+%
+% \starttabulate[|~|]
+% \NC 0~1~~2~~~3~~~~4~~~~~5 \NC \NR \NC 0~~~~~~~~~~~~~~~~~~~5 \NC \NR
+% \NC $0~1~~2~~~3~~~~4~~~~~5$ \NC \NR \NC $0~~~~~~~~~~~~~~~~~~~5$ \NC \NR
+% \stoptabulate
+%
+% \starttable[||]
+% \NC 0~1~~2~~~3~~~~4~~~~~5 \NC \AR \NC 0~~~~~~~~~~~~~~~~~~~5 \NC \AR
+% \NC $0~1~~2~~~3~~~~4~~~~~5$ \NC \AR \NC $0~~~~~~~~~~~~~~~~~~~5$ \NC \AR
+% \stoptable
+% \stopbuffer
+%
+% \setupbodyfont[cmr] \getbuffer
+% \setupbodyfont[lbr] \getbuffer
+
+%D A couple of plain macros:
+
+\ifx\thinspace\undefined
+
+ \def\thinspace {\kern .16667\emwidth}
+ \def\negthinspace{\kern-.16667\emwidth}
+ \def\enspace {\kern .5\emwidth}
+
+\fi
+
+\ifx\quad\undefined
+
+ \def\enskip{\hskip.5\emwidth}
+ \def\quad {\hskip \emwidth}
+ \def\qquad {\hskip 2\emwidth}
+
+\fi
+
+\let\emspace\quad
+
+% Suggested by GB (not the name -):
+
+\def\rapfillskip{.5\hsize plus .092\hsize minus .5\hsize} % D.A.'s value
+
+% Bovendien definieren we enkele extra \fill's:
+
+\def\hfilll{\hskip\zeropoint\!!plus1filll\relax}
+\def\vfilll{\vskip\zeropoint\!!plus1filll\relax}
+
+% De onderstaande hulpmacro's moeten nog eens instelbaar worden
+% gemaakt.
+
+\def\tfskipsize{1em\relax}
+\def\tfkernsize{1ex\relax}
+
+\def\tfskip{\dotfskip\tfskipsize}
+\def\tfkern{\dotfkern\tfkernsize}
+
+\def\dotfskip#1{{\tf\hskip#1}}
+\def\dotfkern#1{{\tf\kern #1}}
+
+% needs a proper \definenarrower or installnarrower
+
+\newskip\ctxleftskip
+\newskip\ctxrightskip
+\newskip\ctxmidskip
+
+% \def\dosinglenarrower#1%
+% {\processaction
+% [#1]
+% [ \v!left=>\global\advance\ctxleftskip \@@slleft,
+% \v!middle=>\global\advance\ctxmidskip \@@slmiddle,
+% \v!right=>\global\advance\ctxrightskip \@@slright,
+% \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
+ {\dorepeatwithcommand[#1]\donarrowermethod}
+
+\unexpanded\def\definenarrowermethod[#1]#2%
+ {\setvalue{\??sl:#1}{#2}}
+
+\def\donarrowermethod#1%
+ {\ifcsname\??sl:#1\endcsname\csname\??sl:#1\endcsname\else\global\advance\ctxmidskip#1\relax\fi}
+
+\definenarrowermethod[\v!left ]{\global\advance\ctxleftskip \@@slleft \relax}
+\definenarrowermethod[\v!middle ]{\global\advance\ctxmidskip \@@slmiddle\relax}
+\definenarrowermethod[\v!right ]{\global\advance\ctxrightskip \@@slright \relax}
+\definenarrowermethod[-\v!left ]{\global\advance\ctxleftskip -\@@slleft \relax}
+\definenarrowermethod[-\v!middle]{\global\advance\ctxmidskip -\@@slmiddle\relax}
+\definenarrowermethod[-\v!right ]{\global\advance\ctxrightskip-\@@slright \relax}
+\definenarrowermethod[\v!reset ]{\global\ctxleftskip \zeropoint
+ \global\ctxmidskip \zeropoint
+ \global\ctxrightskip\zeropoint\relax}
+\definenarrowermethod[\v!none ]{}
+
+% todo: definenarrower
+%
+% \definecomplexorsimple\startnarrower
+%
+% \def\simplestartnarrower
+% {\startnarrower[\v!middle]}
+%
+% \def\complexstartnarrower[#1]%
+% {\@@slbefore % was hard coded \par
+% \bgroup
+% \global\ctxleftskip \zeropoint
+% \global\ctxrightskip\zeropoint
+% \global\ctxmidskip \zeropoint
+% \processcommalistwithparameters[#1]\donarrower
+% \advance\leftskip \dimexpr\ctxleftskip +\ctxmidskip\relax
+% \advance\rightskip \dimexpr\ctxrightskip+\ctxmidskip\relax
+% \seteffectivehsize}
+%
+% \unexpanded\def\stopnarrower
+% {\@@slafter % was hard coded \par / needed, else skips forgotten
+% \egroup}
+%
+% \unexpanded\def\setupnarrower
+% {\dodoubleargument\getparameters[\??sl]}
+
+%D Contrary to \MKII\ we can now define classes of narrower (generalized
+%D by Wolfgang). This environment will be enhanced for bidi.
+
+\def\narrowerparameter #1{\csname\donarrowerparameter{\??sl\@@narrower}#1\endcsname}
+\def\donarrowerparameter #1#2{\ifcsname#1#2\endcsname#1#2\else\expandafter\donarrowerparentparameter\csname#1\s!parent\endcsname#2\fi}
+\def\donarrowerparentparameter#1#2{\ifx#1\relax\s!empty\else\donarrowerparameter#1#2\fi}
+
+\getparameters
+ [\??sl]
+ [\c!before=\endgraf,
+ \c!after=\endgraf,
+ \c!left=1.5em,
+ \c!right=1.5em,
+ \c!middle=1.5em]
+
+\unexpanded\def\definenarrower
+ {\dodoubleempty\dodefinenarrower}
+
+\def\dodefinenarrower[#1][#2]%
+ {\getparameters[\??sl#1][\s!parent=\??sl,#2]%
+ \setvalue{\e!start#1}{\dodoubleempty\dostartnarrower[#1]}%
+ \setvalue{\e!stop #1}{\dostopnarrower}}
+
+\unexpanded\def\setupnarrower
+ {\dodoubleempty\dosetupnarrower}
+
+\def\dosetupnarrower[#1][#2]%
+ {\doifelsenothing{#2}
+ {\getparameters[\??sl][#1]}
+ {\def\docommand##1{\getparameters[\??sl##1][#2]}%
+ \processcommacommand[#1]\docommand}}
+
+\definenarrowermethod[\v!left ]{\global\advance\ctxleftskip \narrowerparameter\c!left \relax}
+\definenarrowermethod[\v!middle ]{\global\advance\ctxmidskip \narrowerparameter\c!middle\relax}
+\definenarrowermethod[\v!right ]{\global\advance\ctxrightskip \narrowerparameter\c!right \relax}
+\definenarrowermethod[-\v!left ]{\global\advance\ctxleftskip -\narrowerparameter\c!left \relax}
+\definenarrowermethod[-\v!middle]{\global\advance\ctxmidskip -\narrowerparameter\c!middle\relax}
+\definenarrowermethod[-\v!right ]{\global\advance\ctxrightskip-\narrowerparameter\c!right \relax}
+\definenarrowermethod[\v!reset ]{\global\ctxleftskip \zeropoint
+ \global\ctxmidskip \zeropoint
+ \global\ctxrightskip\zeropoint\relax}
+\definenarrowermethod[\v!none ]{}
+
+\def\dostartnarrower[#1][#2]%
+ {\bgroup
+ \ifsecondargument % \doifsomethingelse{#2}?
+ \dodostartnarrower[#1][#2]%
+ \else
+ \dodostartnarrower[#1][\v!middle]%
+ \fi}
+
+\def\dodostartnarrower[#1][#2]%
+ {\edef\@@narrower{#1}%
+ \narrowerparameter\c!before
+ \global\ctxleftskip \zeropoint
+ \global\ctxrightskip\zeropoint
+ \global\ctxmidskip \zeropoint
+ \processcommalistwithparameters[#2]\donarrower
+ \advance\leftskip \dimexpr\ctxleftskip +\ctxmidskip\relax
+ \advance\rightskip\dimexpr\ctxrightskip+\ctxmidskip\relax
+ \seteffectivehsize}
+
+\def\dostopnarrower
+ {\narrowerparameter\c!after
+ \egroup}
+
+\def\v!narrower{narrower}
+
+\definenarrower[\v!narrower]
+
+\newdimen\@@effectivehsize \def\effectivehsize {\hsize}
+\newdimen\@@effectiveleftskip \def\effectiveleftskip {\leftskip}
+\newdimen\@@effectiverightskip \def\effectiverightskip{\rightskip}
+
+\def\seteffectivehsize
+ {\setlocalhsize
+ \@@effectivehsize \localhsize
+ \@@effectiveleftskip \leftskip
+ \@@effectiverightskip \rightskip
+ \let\effectivehsize \@@effectivehsize
+ \let\effectiveleftskip \@@effectiveleftskip
+ \let\effectiverightskip\@@effectiverightskip}
+
+\newskip\leftskipadaption
+\newskip\rightskipadaption
+
+\def\doadaptleftskip#1%
+ {\dosetleftskipadaption{#1}%
+ \advance\leftskip \leftskipadaption}
+
+\def\doadaptrightskip#1%
+ {\dosetrightskipadaption{#1}%
+ \advance\rightskip \rightskipadaption}
+
+\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
+\letvalue{@lsa@\empty }\zeropoint
+\setvalue{@rsa@\v!standard}{\@@slright}
+\setvalue{@rsa@\v!yes }{\@@slright}
+\letvalue{@rsa@\v!no }\zeropoint
+\letvalue{@rsa@\empty }\zeropoint
+
+\def\dosetleftskipadaption#1%
+ {\edefconvertedargument\ascii{@lsa@#1}%
+ \leftskipadaption
+ \ifcsname\ascii\endcsname
+ \csname\ascii\endcsname
+ \else
+ #1%
+ \fi
+ \relax}
+
+\def\dosetrightskipadaption#1%
+ {\edefconvertedargument\ascii{@rsa@#1}%
+ \rightskipadaption
+ \ifcsname\ascii\endcsname
+ \csname\ascii\endcsname
+ \else
+ #1%
+ \fi
+ \relax}
+
+%D Tolerance:
+
+\unexpanded\def\definetolerancemethod
+ {\dodoubleargument\dodefinetolerancemethod}
+
+\def\dodefinetolerancemethod[#1][#2]#3%
+ {\setvalue{\??to:#1:#2}{#3}}
+
+\definetolerancemethod [\v!vertical] [\v!verystrict ] {\let\bottomtolerance\empty}
+\definetolerancemethod [\v!vertical] [\v!strict ] {\def\bottomtolerance{.050}}
+\definetolerancemethod [\v!vertical] [\v!tolerant ] {\def\bottomtolerance{.075}}
+\definetolerancemethod [\v!vertical] [\v!verytolerant] {\def\bottomtolerance{.100}}
+
+\definetolerancemethod [\v!horizontal] [\v!stretch ] {\emergencystretch\bodyfontsize}
+\definetolerancemethod [\v!horizontal] [\v!space ] {\spaceskip.5em\!!plus.25em\!!minus.25em\relax}
+\definetolerancemethod [\v!horizontal] [\v!verystrict ] {\tolerance 200 }
+\definetolerancemethod [\v!horizontal] [\v!strict ] {\tolerance1500 }
+\definetolerancemethod [\v!horizontal] [\v!tolerant ] {\tolerance3000 }
+\definetolerancemethod [\v!horizontal] [\v!verytolerant] {\tolerance4500 }
+
+\def\dotolerancencemethodvertical #1{\csname\??to:\v!vertical :#1\endcsname}
+\def\dotolerancencemethodhorizontal#1{\csname\??to:\v!horizontal:#1\endcsname}
+
+\def\dosetuptolerance[#1]%
+ {\doifinsetelse\v!vertical{#1}%
+ {\processcommacommand[#1]\dotolerancencemethodvertical}
+ {\processcommacommand[#1]\dotolerancencemethodhorizontal}}
+
+\unexpanded\def\setuptolerance
+ {\dosingleargument\dosetuptolerance}
+
+%D \macros
+%D {pushindentation,popindentation}
+%D
+%D The pushing and popping is done by:
+
+\newbox\indentationboxA
+\newbox\indentationboxB
+
+\def\pushindentation
+ {\bgroup
+ \ifhmode
+ \unskip
+ \setbox\indentationboxA\lastbox % get \strut if present
+ \unskip
+ \setbox\indentationboxB\lastbox % get \indent generated box
+ \unskip
+ \else
+ \hskip\zeropoint % switch to horizontal mode
+ \unskip
+ \setbox\indentationboxA\lastbox % get \indent generated box
+ \setbox\indentationboxB\emptybox
+ \fi}
+
+\def\popindentation
+ {\box\indentationboxB\box\indentationboxA % put back the boxes
+ \egroup}
+
+%D The only complication lays in \type{\strut}. In \PLAIN\
+%D \TEX\ a \type{\strut} is defined as:
+%D
+%D \starttyping
+%D \def\strut%
+%D {\relax\ifmmode\copy\strutbox\else\unhcopy\strutbox\fi}
+%D \stoptyping
+%D
+%D But what is a \type{\strut}? Normally it's a rule of width
+%D zero, but when made visual, it's a rule and a negative skip.
+%D The mechanism for putting things in the margins described
+%D here cannot handle this situation very well. One
+%D characteristic of \type{\strut} is that the \type{\unhcopy}
+%D results in entering horizontal mode, which in return leads
+%D to some indentation.
+%D
+%D To serve our purpose a bit better, the macro \type{\strut}
+%D can be redefined as:
+%D
+%D \starttyping
+%D \def\strut
+%D {\relax\ifmmode\else\hskip0pt\fi\copy\strutbox}
+%D \stoptyping
+%D
+%D Or more compatible:
+%D
+%D \starttyping
+%D \def\strut
+%D {\relax\ifmmode
+%D \copy\strutbox
+%D \else
+%D \bgroup\setbox\strutbox=\normalhbox{\box\strutbox}\unhcopy\strutbox\egroup
+%D \fi}
+%D \stoptyping
+%D
+%D In \CONTEXT\ however we save some processing time by putting
+%D an extra \type{\hbox} around the \type{\strutbox}.
+
+% moved from page-lin.tex to here (due to visualization added
+% in august 2003)
+%
+% \unexpanded \def\crlf
+% {\ifhmode\unskip\else\strut\fi\ifcase\raggedstatus\hfil\fi\break}
+
+\unexpanded \def\crlf
+ {\ifhmode
+ \unskip
+ \prewordbreak\crlfplaceholder
+ \ifcase\raggedstatus\hfil\or\or\or\hfil\fi
+ \break
+ \else
+ \crlfplaceholder
+ \endgraf
+ \fi}
+
+\def\crlfplaceholder
+ {\strut}
+
+\def\settestcrlf
+ {\def\crlfplaceholder
+ {\hbox to \zeropoint
+ {\strut{\infofont\kern.25em}\lohi{\infofont CR}{\infofont LF}\hss}}}
+
+%D \starttyping
+%D % \setuplayout[gridgrid=yes] \showgrid
+%D
+%D \startbuffer
+%D test 1\crlf
+%D test 2\crlf
+%D
+%D \crlf test 3
+%D
+%D test 4\crlf
+%D test 5
+%D
+%D \crlf
+%D \crlf
+%D \crlf
+%D test 6
+%D \stopbuffer
+%D
+%D \hbox
+%D {\hsize5em
+%D \ruledvtop{\getbuffer}\enspace
+%D \ruledvtop{\showstruts\getbuffer}\enspace
+%D \hsize15em \setuptyping[before=,after=]%
+%D \ruledvtop{\typebuffer}}
+%D \stoptyping
+
+\unexpanded\def\justonespace{\removeunwantedspaces\space}
+%unexpanded\def\justaperiod {\removeunwantedspaces.}
+%unexpanded\def\justacomma {\removeunwantedspaces,}
+
+\def\ignorecrlf
+ {\let\crlf\justonespace\let\\\crlf}
+
+\unexpanded\def\definehspace
+ {\dotripleempty\dodefinehspace}
+
+\def\dodefinehspace[#1][#2][#3]% #1 = optional namespace
+ {\ifthirdargument
+ \setvalue{\??hs#1:#2}{#3}%
+ \else
+ \setvalue{\??hs:#1}{#2}%
+ \fi}
+
+\unexpanded\def\hspace
+ {\dodoubleempty\dohspace}
+
+\def\dohspace[#1][#2]%
+ {\ifsecondargument
+ \dodohspace[#1][#2]%
+ \else\iffirstargument
+ \hspace[][#1]%
+ \else
+ \hspace[][\s!default]%
+ \fi\fi}
+
+\def\dodohspace[#1][#2]%
+ {\ifhmode
+ \removeunwantedspaces
+ \hskip\hspaceamount{#1}{#2}%
+ \expandafter\ignorespaces
+ \fi}
+
+\def\hspaceamount#1#2%
+ {\executeifdefined{\??hs#1:#2}{\executeifdefined{\??hs:#2}\zeropoint}}
+
+\definehspace [\v!small] [.25\emspaceamount]
+\definehspace [\v!medium] [.5\emspaceamount]
+\definehspace [\v!big] [1\emspaceamount]
+\definehspace [\v!normal] [1\spaceamount]
+\definehspace [\v!default] [\spaceamount]
+
+%D Taken from Taco's math module (cq. \AMS\ macros), but
+%D adapted to \type {\hspace}:
+
+\unexpanded\def\textormathspace #1#2#3{\ifmmode\mskip#1#2\else\kern #1\hspaceamount\empty{#3}\fi\relax}
+\unexpanded\def\breakabletextormathspace#1#2#3{\ifmmode\mskip#1#2\else\hskip#1\hspaceamount\empty{#3}\fi\relax}
+
+\newmuskip\hairmuskip \hairmuskip=.15mu
+
+\unexpanded\def\hairspace {\textormathspace+\hairmuskip{.5}}
+\unexpanded\def\thinspace {\textormathspace+\thinmuskip 1}
+\unexpanded\def\medspace {\textormathspace+\medmuskip 2}
+\unexpanded\def\thickspace {\textormathspace+\thickmuskip3}
+\unexpanded\def\neghairspace {\textormathspace-\thinmuskip{.5}}
+\unexpanded\def\negthinspace {\textormathspace-\thinmuskip 1}
+\unexpanded\def\negmedspace {\textormathspace-\medmuskip 2}
+\unexpanded\def\negthickspace{\textormathspace-\thickmuskip3}
+
+% needed for unicode:
+
+\unexpanded\def\breakablethinspace {\breakabletextormathspace+\thinmuskip 1}
+
+\unexpanded\def\twoperemspace {\hskip\dimexpr\emwidth/2\relax} % == \enspace
+\unexpanded\def\threeperemspace {\hskip\dimexpr\emwidth/3\relax}
+\unexpanded\def\fourperemspace {\hskip\dimexpr\emwidth/4\relax}
+\unexpanded\def\fiveperemspace {\hskip\dimexpr\emwidth/5\relax} % goodie
+\unexpanded\def\sixperemspace {\hskip\dimexpr\emwidth/6\relax}
+\unexpanded\def\figurespace {\begingroup\setbox\scratchbox\hbox{0}\hskip\wd\scratchbox\endgroup} % there is a command for this
+\unexpanded\def\punctuationspace {\begingroup\setbox\scratchbox\hbox{.}\hskip\wd\scratchbox\endgroup}
+\unexpanded\def\ideographicspace {\hskip\dimexpr\emwidth/1\relax}
+\unexpanded\def\ideographichalffillspace{\hskip\dimexpr\emwidth/2\relax}
+%unexpanded\def\nobreakspace {\penalty\plustenthousand\space}
+\unexpanded\def\nobreakspace {\penalty\plustenthousand\kern\interwordspace}
+\unexpanded\def\narrownobreakspace {\penalty\plustenthousand\thinspace}
+%unexpanded\def\zerowidthnobreakspace {\penalty\plustenthousand\hskip\zeropoint}
+\unexpanded\def\zerowidthnobreakspace {\penalty\plustenthousand\kern\zeropoint}
+\unexpanded\def\zerowidthspace {\hskip\zeropoint}
+
+\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
+
+\def\flexiblespaceamount#1#2#3%
+ {#1\interwordspace
+ \!!plus#2\interwordstretch
+ \!!minus#3\interwordshrink}
+
+\def\fixedspaceamount#1%
+ {#1\interwordspace}
+
+% moved from page-lin
+%
+% the following code is used in startlines\stoplines
+%
+% do we need \normalspaceprimitive here?
+
+\def\installspacehandler#1#2% needs to set \obeyedspace
+ {\setvalue{\??sr#1}{#2}}
+
+\installspacehandler \v!on
+ {\obeyspaces
+ \unexpanded\def\obeyedspace{\mathortext\normalspace{\dontleavehmode{\tt\controlspace}}}%
+ \let\ =\obeyedspace}
+
+\installspacehandler \v!yes
+ {\obeyspaces
+ \unexpanded\def\obeyedspace{\mathortext\normalspace{\dontleavehmode\normalspace}}%
+ \let\ =\obeyedspace}
+
+\installspacehandler \v!off % == default
+ {\normalspaces
+ \let\obeyedspace\normalspace
+ \let\ =\normalspaceprimitive} % was \normalspace
+
+\installspacehandler \v!fixed
+ {\obeyspaces
+ \unexpanded\def\obeyedspace{\mathortext\normalspace{\dontleavehmode\fixedspace}}%
+ \let\ =\obeyedspace}
+
+\def\activatespacehandler#1%
+ {\executeifdefined{\??sr#1}{\activatespacehandler\v!off}}
+
+\appendtoks
+ \normalspaces % to be sure
+\to \everybeforeoutput
+
+%D A more robust variant ofthe \MKII\ one:
+%D
+%D \startbuffer
+%D bla \TEX\autoinsertnextspace bla
+%D bla \TEX\autoinsertnextspace (bla)
+%D bla (\TEX\autoinsertnextspace) bla
+%D bla \TEX\autoinsertnextspace\ bla
+%D \stopbuffer
+%D
+%D \typebuffer \getbuffer
+
+% unexpanded is important here as it prevents premature expansion in
+% e.g. \normalexpanded{\egroup\sortingparameter\c!next}
+
+\unexpanded\def\autoinsertnextspace
+ {\futurelet\nexttoken\doautoinsertnextspace}
+
+\def\doautoinsertnextspace
+ {\ctxlua{commands.autonextspace("\meaning\nexttoken")}} % todo, just consult nexttoken at the lua end
+
+%D Moved from bib module:
+
+\def\outdented#1%
+ {\hskip-\hangindent#1\relax}
+
+%D Beware: due to char-def this becomes an active character but that
+%D might change sometime when we will replace all these specials to
+%D node insertions. We might even expand it to utf then as it then
+%D can be used in string comparison (not that much needed anyway).
+
+\chardef\zwnj="200C
+\chardef\zwj ="200D
+
+\protect \endinput
diff --git a/Master/texmf-dist/tex/context/base/spac-pag.mkiv b/Master/texmf-dist/tex/context/base/spac-pag.mkiv
new file mode 100644
index 00000000000..353afa5363f
--- /dev/null
+++ b/Master/texmf-dist/tex/context/base/spac-pag.mkiv
@@ -0,0 +1,199 @@
+%D \module
+%D [ file=spac-pag,
+%D version=2009.10.16, % 1997.03.31, was core-spa.tex
+%D title=\CONTEXT\ Spacing Macros,
+%D subtitle=Pages,
+%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 Spacing Macros / Pages}
+
+\unprotect
+
+%D A quick way to determine left|/|middle|/|right states
+%D (experimental).
+
+\setvalue{\??as\v!left }{0}
+\setvalue{\??as\v!middle}{1}
+\setvalue{\??as\v!right }{2}
+
+\def\setalignmentswitch#1%
+ {\chardef\alignmentswitch0\csname\??as#1\endcsname\relax}
+
+\newcount \noftrackedpagestates
+\newif \ifpagestatemismatch
+\newcount \realpagestateno
+\chardef \frozenpagestate \zerocount
+
+\def\dotrackpagestate#1#2%
+ {\ifdoublesided \ifinpagebody \else
+ \doforcedtrackpagestate{#1}{#2}%
+ \fi \fi}
+
+\def\doforcedtrackpagestate#1#2%
+ {\ifcase\frozenpagestate
+ \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
+ \realpagestateno\realfolio
+ \ifinpagebody
+ \ifdoublesided
+ \ifodd\realpageno\relax
+ \twopassdatafoundtrue \else \twopassdatafoundfalse
+ \fi
+ \else
+ \twopassdatafoundtrue
+ \fi
+ \else\ifdoublesided
+ \findtwopassdata{#1}{\number#2}%
+ \iftwopassdatafound
+ \realpagestateno\twopassdata\relax
+ \ifnum\twopassdata=\realpageno \else
+ \pagestatemismatchtrue
+ \fi
+ \ifodd\twopassdata\relax
+ \twopassdatafoundtrue \else \twopassdatafoundfalse
+ \fi
+ \else
+ \ifodd\realpageno\relax
+ \twopassdatafoundtrue \else \twopassdatafoundfalse
+ \fi
+ \fi
+ \else
+ \twopassdatafoundtrue
+ \fi\fi
+ \else
+ \ifodd\realpagestateno\relax
+ \twopassdatafoundtrue \else \twopassdatafoundfalse
+ \fi
+ \fi
+ \iftwopassdatafound
+ \@EA\firstoftwoarguments
+ \else
+ \@EA\secondoftwoarguments
+ \fi}
+
+\def\doifforcedrightpagestateelse#1#2%
+ {\ifcase\frozenpagestate
+ \pagestatemismatchfalse
+ \realpagestateno\realfolio
+ \findtwopassdata{#1}{\number#2}%
+ \iftwopassdatafound
+ \realpagestateno\twopassdata\relax
+ \ifnum\twopassdata=\realpageno \else
+ \pagestatemismatchtrue
+ \fi
+ \ifodd\twopassdata\relax
+ \twopassdatafoundtrue \else \twopassdatafoundfalse
+ \fi
+ \else
+ \ifodd\realpageno\relax
+ \twopassdatafoundtrue \else \twopassdatafoundfalse
+ \fi
+ \fi
+ \else
+ \ifodd\realpagestateno\relax
+ \twopassdatafoundtrue \else \twopassdatafoundfalse
+ \fi
+ \fi
+ \iftwopassdatafound
+ \@EA\firstoftwoarguments
+ \else
+ \@EA\secondoftwoarguments
+ \fi}
+
+\def\freezepagestate {\chardef\frozenpagestate\plusone }
+\def\defrostpagestate{\chardef\frozenpagestate\zerocount}
+
+% we can make more of these on top, but how to deal with mixed frozen states
+
+\definetwopasslist\s!paragraph \newcount \nofraggedparagraphs
+
+\def\signalrightpage {\dotrackpagestate \s!paragraph\nofraggedparagraphs}
+\def\doifrightpageelse{\doifrightpagestateelse\s!paragraph\nofraggedparagraphs}
+
+\newcount\pagesignallevel
+
+\unexpanded\def\startsignalrightpage % one may do a \postsignalrightplace
+ {\advance\pagesignallevel\plusone
+ \presignalrightpage
+ \let\signalrightpage\relax
+ \let\presignalrightpage\relax
+ \let\startsignalrightpage\relax
+ \doifrightpageelse\donothing\donothing
+ \freezepagestate}
+
+\unexpanded\def\stopsignalrightpage
+ {\ifcase\pagesignallevel\or\postsignalrightpage\fi
+ \advance\pagesignallevel\minusone}
+
+\def\setraggedparagraphmode
+ {\signalrightpage\doifrightpageelse} % move it there
+
+\ifx\swapmargins\undefined \let\swapmargins\undefined \fi % todo
+
+\def\doifswappedrightpageelse#1#2% alleen in box construction !
+ {\doifrightpageelse
+ {#1}
+ {\scratchcounter\realpageno
+ \realpageno\realpagestateno\relax
+ \swapmargins
+ \realpageno\scratchcounter
+ #2}}
+
+\newbox\signaledrightpage % this way we can avoid interference, i.e. postpone placement
+
+\def\presignalrightpage {\global\setbox\signaledrightpage\hbox{\signalrightpage}}
+\def\postsignalrightpage{\ifvoid\signaledrightpage\else\box\signaledrightpage\fi}
+
+% The next feature is is used in:
+%
+% \definenumber[test][way=bypage]
+%
+% \def\Test
+% {\incrementnumber[test]\rawnumber[test]/%
+% \incrementnumber[test]\rawnumber[test]/%
+% \incrementnumber[test]\rawnumber[test]\space
+% \checkpagechange{oeps}\changedpage{oeps}\space
+% \ifpagechanged TRUE\else FALSE\fi}
+%
+% \Test\page \Test\par \Test\page \Test\par \Test\page \Test\page
+%
+% (adapted from cont-new.tex:)
+
+\newif\ifpagechanged \let\lastchangedpage\empty
+
+\def\docheckpagestatechange#1#2#3%
+ {\pagechangedfalse
+ \doforcedtrackpagestate{#2}{#3}%
+ \findtwopassdata{#2}{\number#3}%
+ \iftwopassdatafound
+ \ifnum\twopassdata>0\getvalue{#2:p:#1}\relax
+ \pagechangedtrue
+ \fi
+ \fi
+ \ifpagechanged
+ \letgvalue{#2:p:#1}\twopassdata
+ \globallet\lastchangedpage\twopassdata
+ \else
+ \globallet\lastchangedpage\realfolio
+ \fi}
+
+\def\changedpagestate#1#2%
+ {\executeifdefined{#2:p:#1}{0}}
+
+\def\checkpagechange#1{\docheckpagestatechange{#1}\s!paragraph\nofraggedparagraphs}
+\def\changedpage #1{\changedpagestate{#1}\s!paragraph}
+
+\protect \endinput
diff --git a/Master/texmf-dist/tex/context/base/spac-par.mkiv b/Master/texmf-dist/tex/context/base/spac-par.mkiv
new file mode 100644
index 00000000000..3477b1c1b14
--- /dev/null
+++ b/Master/texmf-dist/tex/context/base/spac-par.mkiv
@@ -0,0 +1,192 @@
+%D \module
+%D [ file=spac-par,
+%D version=2009.10.16, % 1997.03.31, was core-spa.tex
+%D title=\CONTEXT\ Spacing Macros,
+%D subtitle=Paragraphs,
+%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 Spacing Macros / Paragraphs}
+
+\unprotect
+
+%D The dreadful sequence \type {\bgroup} \unknown\
+%D \type {\carryoverpar} \unknown\ \type {\egroup} is needed
+%D when for instance sidefloats are used in combination with
+%D something that starts with a group. This is because
+%D otherwise the indentation as set (by the output routine)
+%D inside the group are forgotten afterwards. (I must
+%D not forget its existence).
+
+\global\let\carriedoverpar\relax
+
+\def\carryoverpar#1%
+ {\normalexpanded % \scratchtoks{#1}%
+ {\noexpand#1% \the\scratchtoks
+ \hangindent\the\hangindent
+ \hangafter \the\hangafter
+ \parskip \the\parskip
+ \leftskip \the\leftskip
+ \rightskip \the\rightskip}}
+
+\newconditional \parbasedattributes
+
+\def\finishparbasedattributes
+ {\ifconditional\parbasedattributes
+ \setfalse\parbasedattributes
+ \par
+ \fi}
+
+\def\dostopparbasedattributes
+ {\settrue\parbasedattributes
+ \dostopattributes}
+
+% beware, changing this will break some code (like pos/backgrounds)
+
+\newtoks\everyfirstparagraphintro
+\newtoks\everynextparagraphintro
+\newtoks\@@everyparagraphtoks
+
+\chardef\everyparagraphintro\zerocount
+
+\unexpanded\def\setupparagraphintro
+ {\dodoubleempty\dosetupparagraphintro}
+
+\def\dosetupparagraphintro[#1][#2]%
+ {\processallactionsinset
+ [#1]
+ [ \v!reset=>\global\chardef\everyparagraphintro\zerocount
+ \global\everyfirstparagraphintro\emptytoks
+ \global\everynextparagraphintro \emptytoks,
+ \v!first=>\global\chardef\everyparagraphintro\plusone
+ \doglobal\appendtoks#2\to\everyfirstparagraphintro,
+ \v!next=>\ifcase\everyparagraphintro\global\chardef\everyparagraphintro\plusone\fi
+ \doglobal\appendtoks#2\to\everynextparagraphintro,
+ \v!each=>\ifcase\everyparagraphintro\global\chardef\everyparagraphintro\plustwo\fi
+ \doglobal\appendtoks#2\to\everyfirstparagraphintro
+ \doglobal\appendtoks#2\to\everynextparagraphintro]}
+
+%D We can say:
+%D
+%D \starttyping
+%D \setupparagraphintro[first][\index{Knuth}]
+%D \stoptyping
+%D
+%D Maybe more convenient is:
+%D
+%D \starttyping
+%D \flushatparagraph{\index{Zapf}}
+%D \stoptyping
+
+\def\flushatparagraph#1%
+ {\global\chardef\everyparagraphintro\plusone
+ \global\appendtoks{#1}\to\everyfirstparagraphintro
+ \global\let\insertparagraphintro\doinsertparagraphintro}
+
+\def\doinsertparagraphintro % can be merged with the next
+ {\ifcase\everyparagraphintro\else\@EA\dodoinsertparagraphintro\fi}
+
+\def\dodoinsertparagraphintro
+ {\begingroup
+ \everypar\emptytoks
+ \ifcase\everyparagraphintro\relax
+ % no data
+ \@@everyparagraphtoks\emptytoks
+ \or
+ % first data
+ \global\chardef\everyparagraphintro\plustwo
+ \@@everyparagraphtoks\everyfirstparagraphintro
+ \global\everyfirstparagraphintro\emptytoks
+ \or
+ % next data
+ \@@everyparagraphtoks\everynextparagraphintro
+ \fi
+ \the\@@everyparagraphtoks
+ \global\let\insertparagraphintro\relax
+ \endgroup}
+
+\let\insertparagraphintro\relax
+
+%D \starttyping
+%D \setupparagraphintro[first][\hbox to 3.5em{\tt FIRST \hss}]
+%D \setupparagraphintro[first][\hbox to 3.5em{\tt TSRIF \hss}]
+%D \setupparagraphintro[next] [\hbox to 3.5em{\tt NEXT \hss}]
+%D \setupparagraphintro[next] [\hbox to 3.5em{\tt TXEN \hss}]
+%D \setupparagraphintro[each] [\hbox to 3.0em{\tt EACH \hss}]
+%D \setupparagraphintro[each] [\hbox to 3.0em{\tt HCEA \hss}]
+%D
+%D some paragraph \par
+%D some paragraph \par
+%D some paragraph \par
+%D
+%D \definelabel[parnumber]
+%D
+%D \setupparagraphintro[reset,each][\inleft{\slxx\parnumber}]
+%D
+%D some paragraph \par
+%D some paragraph \par
+%D some paragraph \par
+%D \stoptyping
+
+%D \macros
+%D {flushatnextpar}
+%D
+%D This macro collects data that will be flushed at the next paragraph.
+%D By using this macro you can avoid interfering nodes (writes, etc).
+
+\newbox\postponednodedata
+\let\flushpostponednodedata\relax
+
+\def\flushatnextpar
+ {\bgroup
+ \global\let\flushpostponednodedata\doflushpostponednodedata
+ \dowithnextbox{\global\setbox\postponednodedata\hbox{\box\postponednodedata\box\nextbox}\egroup}\hbox}
+
+\def\doflushpostponednodedata
+ {\ifvoid\postponednodedata\else
+ \hbox{\smashedbox\postponednodedata}%
+ \fi
+ \global\let\flushpostponednodedata\relax}
+
+% Very nasty but needed for margin stuff inside colored
+% paragraphs.
+
+\let\normalvadjust\vadjust
+
+\def\graphicvadjust % nasty bidi handling
+ {\dowithnextboxcontent
+ {\forgetall}
+ {\vadjust{\vbox attr \graphicvadjustattribute \plusone
+ {\unvbox\nextbox
+ % corrects for one line paragraphs
+ \nointerlineskip
+ \kern-\struttotal
+ \nointerlineskip
+ \verticalstrut}}}%
+ \vbox}
+
+%D This works only in a properly strutted line, and is meant
+%D for deeply burried operations, like in heads.
+
+\def\fakedvadjust
+ {\dowithnextbox
+ {\setbox\nextbox\hbox{\llap{\lower\strutdepth\box\nextbox}}%
+ \smashedbox\nextbox}%
+ \vtop}
+
+\def\localvbox#1#% used?
+ {\vbox#1\bgroup
+ \forgetparskip
+ \setlocalhsize
+ \hsize\localhsize
+ \forgetparindent
+ \forgetbothskips
+ \forgeteverypar
+ \let\next=}
+
+\protect \endinput
diff --git a/Master/texmf-dist/tex/context/base/spac-ver.lua b/Master/texmf-dist/tex/context/base/spac-ver.lua
new file mode 100644
index 00000000000..c75eb1baa68
--- /dev/null
+++ b/Master/texmf-dist/tex/context/base/spac-ver.lua
@@ -0,0 +1,1185 @@
+if not modules then modules = { } end modules ['spac-ver'] = {
+ version = 1.001,
+ comment = "companion to spac-ver.mkiv",
+ author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
+ copyright = "PRAGMA ADE / ConTeXt Development Team",
+ license = "see context related readme files"
+}
+
+-- we also need to call the spacer for inserts!
+
+-- this code dates from the beginning and is kind of experimental; it
+-- will be optimized and improved soon
+--
+-- the collapser will be redone with user nodes; also, we might get make
+-- parskip into an attribute and appy it explicitly thereby getting rid
+-- of automated injections; eventually i want to get rid of the currently
+-- still needed tex -> lua -> tex > lua chain (needed because we can have
+-- expandable settings at the tex end
+
+-- todo: strip baselineskip around display math
+
+local next, type, tonumber = next, type, tonumber
+local format, gmatch, concat, match = string.format, string.gmatch, table.concat, string.match
+local ceil, floor, max, min, round = math.ceil, math.floor, math.max, math.min, math.round
+local texsprint, texlists, texdimen, texbox = tex.sprint, tex.lists, tex.dimen, tex.box
+local lpegmatch = lpeg.match
+local unpack = unpack or table.unpack
+
+local ctxcatcodes = tex.ctxcatcodes
+local variables = interfaces.variables
+
+local starttiming, stoptiming = statistics.starttiming, statistics.stoptiming
+
+-- vertical space handler
+
+local trace_vbox_vspacing = false trackers.register("nodes.vbox_vspacing", function(v) trace_vbox_vspacing = v end)
+local trace_page_vspacing = false trackers.register("nodes.page_vspacing", function(v) trace_page_vspacing = v end)
+local trace_collect_vspacing = false trackers.register("nodes.collect_vspacing", function(v) trace_collect_vspacing = v end)
+local trace_vspacing = false trackers.register("nodes.vspacing", function(v) trace_vspacing = v end)
+local trace_vsnapping = false trackers.register("nodes.vsnapping", function(v) trace_vsnapping = v end)
+
+local skip_category = attributes.private('skip-category')
+local skip_penalty = attributes.private('skip-penalty')
+local skip_order = attributes.private('skip-order')
+local snap_category = attributes.private('snap-category')
+local display_math = attributes.private('display-math')
+local snap_method = attributes.private('snap-method')
+local snap_done = attributes.private('snap-done')
+
+local has_attribute = node.has_attribute
+local unset_attribute = node.unset_attribute
+local set_attribute = node.set_attribute
+local find_node_tail = node.tail
+local free_node = node.free
+local copy_node = node.copy
+local traverse_nodes = node.traverse
+local traverse_nodes_id = node.traverse_id
+local insert_node_before = node.insert_before
+local insert_node_after = node.insert_after
+local remove_node = nodes.remove
+local make_penalty_node = nodes.penalty
+local make_kern_node = nodes.kern
+local make_rule_node = nodes.rule
+local count_nodes = nodes.count
+local node_ids_to_string = nodes.ids_to_string
+local hpack_node = node.hpack
+local vpack_node = node.vpack
+local writable_spec = nodes.writable_spec
+
+local glyph = node.id("glyph")
+local penalty = node.id("penalty")
+local kern = node.id("kern")
+local glue = node.id('glue')
+local hlist = node.id('hlist')
+local vlist = node.id('vlist')
+local adjust = node.id('adjust')
+
+vspacing = vspacing or { }
+vspacing.data = vspacing.data or { }
+
+vspacing.data.snapmethods = vspacing.data.snapmethods or { }
+
+storage.register("vspacing/data/snapmethods", vspacing.data.snapmethods, "vspacing.data.snapmethods")
+
+local snapmethods = vspacing.data.snapmethods --maybe some older code can go
+
+local default = {
+ maxheight = true,
+ maxdepth = true,
+ strut = true,
+ hfraction = 1,
+ dfraction = 1,
+}
+
+local fractions = {
+ minheight = "hfraction", maxheight = "hfraction",
+ mindepth = "dfraction", maxdepth = "dfraction",
+ top = "tlines", bottom = "blines",
+}
+
+local values = {
+ offset = "offset"
+}
+
+local colonsplitter = lpeg.splitat(":")
+
+local function listtohash(str)
+ local t = { }
+ for s in gmatch(str,"[^, ]+") do
+ local key, detail = lpegmatch(colonsplitter,s)
+ local v = variables[key]
+ if v then
+ t[v] = true
+ if detail then
+ local k = fractions[key]
+ if k then
+ detail = tonumber("0" .. detail)
+ if detail then
+ t[k] = detail
+ end
+ else
+ k = values[key]
+ if k then
+ detail = string.todimen(detail)
+ if detail then
+ t[k] = detail
+ end
+ end
+ end
+ end
+ else
+ detail = tonumber("0" .. key)
+ if detail then
+ t.hfraction, t.dfraction = detail, detail
+ end
+ end
+ end
+ if next(t) then
+ t.hfraction = t.hfraction or 1
+ t.dfraction = t.dfraction or 1
+ return t
+ else
+ return default
+ end
+end
+
+function vspacing.define_snap_method(name,method)
+ local n = #snapmethods + 1
+ local t = listtohash(method)
+ snapmethods[n] = t
+ t.name, t.specification = name, method
+ tex.write(n)
+end
+
+--~ local rule_id = node.id("rule")
+--~ local vlist_id = node.id("vlist")
+--~ function nodes.makevtop(n)
+--~ if n.id == vlist_id then
+--~ local list = n.list
+--~ local height = (list and list.id <= rule_id and list.height) or 0
+--~ n.depth = n.depth - height + n.height
+--~ n.height = height
+--~ end
+--~ end
+
+local function snap_hlist(current,method,height,depth) -- method.strut is default
+ local snapht, snapdp
+--~ print(table.serialize(method))
+ if method["local"] then
+ -- snapping is done immediately here
+ snapht, snapdp = texdimen.bodyfontstrutheight, texdimen.bodyfontstrutdepth
+ elseif method["global"] then
+ snapht, snapdp = texdimen.globalbodyfontstrutheight, texdimen.globalbodyfontstrutdepth
+ else
+ -- maybe autolocal
+ -- snapping might happen later in the otr
+ snapht, snapdp = texdimen.globalbodyfontstrutheight, texdimen.globalbodyfontstrutdepth
+ local lsnapht, lsnapdp = texdimen.bodyfontstrutheight, texdimen.bodyfontstrutdepth
+ if snapht ~= lsnapht and snapdp ~= lsnapdp then
+ snapht, snapdp = lsnapht, lsnapdp
+ end
+ end
+ local h, d = height or current.height, depth or current.depth
+ local hr, dr, ch, cd = method.hfraction or 1, method.dfraction or 1, h, d
+ local tlines, blines = method.tlines or 1, method.blines or 1
+ local done, plusht, plusdp = false, snapht, snapdp
+ local snaphtdp = snapht + snapdp
+ if method.none then
+ plusht, plusdp = 0, 0
+ end
+ if method.halfline then
+ plusht, plusdp = plusht + snaphtdp/2, plusdp + snaphtdp/2
+ end
+ if method.line then
+ plusht, plusdp = plusht + snaphtdp, plusdp + snaphtdp
+ end
+
+ if method.first then
+ if current.id == vlist then
+ local list, lh, ld = current.list
+ for n in traverse_nodes_id(hlist,list) do
+ lh, ld = n.height, n.depth
+ break
+ end
+ if lh then
+ local x = max(ceil((lh-hr*snapht)/snaphtdp),0)*snaphtdp + plusht
+ local n = make_kern_node(x-lh)
+ n.next, list.prev, current.list = list, n, n
+ ch = x + snaphtdp
+ cd = max(ceil((d+h-lh-dr*snapdp-hr*snapht)/snaphtdp),0)*snaphtdp + plusdp
+ done = true
+ end
+ end
+ elseif method.last then
+ if current.id == vlist then
+ local list, lh, ld = current.list
+ for n in traverse_nodes_id(hlist,list) do
+ lh, ld = n.height, n.depth
+ end
+ if lh then
+ local baseline_till_top = h + d - ld
+ local x = max(ceil((baseline_till_top-hr*snapht)/snaphtdp),0)*snaphtdp + plusht
+ local n = make_kern_node(x-baseline_till_top)
+ n.next, list.prev, current.list = list, n, n
+ ch = x
+ cd = max(ceil((ld-dr*snapdp)/snaphtdp),0)*snaphtdp + plusdp
+ done = true
+ end
+ end
+ end
+
+ if done then
+ -- first or last
+ elseif method.minheight then
+ ch = max(floor((h-hr*snapht)/snaphtdp),0)*snaphtdp + plusht
+ elseif method.maxheight then
+ ch = max(ceil((h-hr*snapht)/snaphtdp),0)*snaphtdp + plusht
+ else
+ ch = plusht
+ end
+ if done then
+ -- first or last
+ elseif method.mindepth then
+ cd = max(floor((d-dr*snapdp)/snaphtdp),0)*snaphtdp + plusdp
+ elseif method.maxdepth then
+ cd = max(ceil((d-dr*snapdp)/snaphtdp),0)*snaphtdp + plusdp
+ else
+ cd = plusdp
+ end
+ if method.top then
+ ch = ch + tlines * snaphtdp
+ end
+ if method.bottom then
+ cd = cd + blines * snaphtdp
+ end
+
+ local offset = method.offset
+ if offset then
+ -- we need to set the attr
+ local shifted = vpack_node(current.list)
+ shifted.shift = offset
+ current.list = shifted
+ end
+ if not height then
+ current.height = ch
+ end
+ if not depth then
+ current.depth = cd
+ end
+ -- set_attribute(current,snap_method,0)
+ return h, d, ch, cd, (ch+cd)/snaphtdp
+end
+
+--~ local function snap_topskip(current,method)
+--~ local spec = current.spec
+--~ local w = spec.width
+--~ local wd = w
+--~ if spec then
+--~ wd = 0
+--~ spec = writable_spec(current)
+--~ spec.width = wd
+--~ end
+--~ return w, wd
+--~ end
+
+local function snap_topskip(current,method)
+ local spec = current.spec
+ local w = spec.width
+ local wd = w
+ if spec.writable then
+ spec.width, wd = 0, 0
+ end
+ return w, wd
+end
+
+vspacing.categories = {
+ [0] = 'discard',
+ [1] = 'largest',
+ [2] = 'force' ,
+ [3] = 'penalty',
+ [4] = 'add' ,
+ [5] = 'disable',
+ [6] = 'nowhite',
+ [7] = 'goback',
+ [8] = 'together'
+}
+
+local categories = vspacing.categories
+
+function vspacing.tocategories(str)
+ local t = { }
+ for s in gmatch(str,"[^, ]") do
+ local n = tonumber(s)
+ if n then
+ t[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({ [categories[str]] = true })
+ end
+end
+
+vspacing.data.map = vspacing.data.map or { }
+vspacing.data.skip = vspacing.data.skip or { }
+
+storage.register("vspacing/data/map", vspacing.data.map, "vspacing.data.map")
+storage.register("vspacing/data/skip", vspacing.data.skip, "vspacing.data.skip")
+
+do -- todo: interface.variables
+
+ local function logger(c,...)
+ logs.report("vspacing",concat {...})
+ texsprint(c,...)
+ end
+
+ vspacing.fixed = false
+
+ local map = vspacing.data.map
+ local skip = vspacing.data.skip
+
+ local multiplier = lpeg.C(lpeg.S("+-")^0 * lpeg.R("09")^1) * lpeg.P("*")
+ local category = lpeg.P(":") * lpeg.C(lpeg.P(1)^1)
+ local keyword = lpeg.C((1-category)^1)
+ local splitter = (multiplier + lpeg.Cc(1)) * keyword * (category + lpeg.Cc(false))
+
+ local k_fixed, k_flexible, k_category, k_penalty, k_order = variables.fixed, variables.flexible, "category", "penalty", "order"
+
+ -- This will change: just node.write and we can store the values in skips which
+ -- then obeys grouping
+
+ local function analyse(str,oldcategory,texsprint) -- we could use shorter names
+ for s in gmatch(str,"([^ ,]+)") do
+ local amount, keyword, detail = lpegmatch(splitter,s)
+ if not keyword then
+ logs.report("vspacing","unknown directive: %s",s)
+ else
+ local mk = map[keyword]
+ if mk then
+ category = analyse(mk,category,texsprint)
+ elseif keyword == k_fixed then
+ texsprint(ctxcatcodes,"\\fixedblankskip")
+ elseif keyword == k_flexible then
+ texsprint(ctxcatcodes,"\\flexibleblankskip")
+ elseif keyword == k_category then
+ local category = tonumber(detail)
+ if category then
+ texsprint(ctxcatcodes,"\\setblankcategory{",category,"}")
+ if category ~= oldcategory then
+ texsprint(ctxcatcodes,"\\flushblankhandling")
+ oldcategory = category
+ end
+ end
+ elseif keyword == k_order and detail then
+ local order = tonumber(detail)
+ if order then
+ texsprint(ctxcatcodes,"\\setblankorder{",order,"}")
+ end
+ elseif keyword == k_penalty and detail then
+ local penalty = tonumber(detail)
+ if penalty then
+ texsprint(ctxcatcodes,"\\setblankpenalty{",penalty,"}")
+ end
+ else
+ amount = tonumber(amount) or 1
+ local sk = skip[keyword]
+ if sk then
+ texsprint(ctxcatcodes,"\\addpredefinedblankskip{",amount,"}{",keyword,"}")
+ else -- no check
+ texsprint(ctxcatcodes,"\\addaskedblankskip{",amount,"}{",keyword,"}")
+ end
+ end
+ end
+ end
+ return category
+ end
+
+ function vspacing.analyse(str)
+ local texsprint = (trace_vspacing and logger) or texsprint
+ texsprint(ctxcatcodes,"\\startblankhandling")
+ analyse(str,1,texsprint)
+ texsprint(ctxcatcodes,"\\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
+
+local trace_list, tracing_info, before, after = { }, false, "", ""
+
+local function glue_to_string(glue)
+ local spec = glue.spec
+ local t = { }
+ t[#t+1] = aux.strip_zeros(number.topoints(spec.width))
+ if spec.stretch_order and spec.stretch_order ~= 0 then
+ t[#t+1] = format("plus -%sfi%s",spec.stretch/65536,string.rep("l",math.abs(spec.stretch_order)-1))
+ elseif spec.stretch and spec.stretch ~= 0 then
+ t[#t+1] = format("plus %s",aux.strip_zeros(number.topoints(spec.stretch)))
+ end
+ if spec.shrink_order and spec.shrink_order ~= 0 then
+ t[#t+1] = format("minus -%sfi%s",spec.shrink/65536,string.rep("l",math.abs(spec.shrink_order)-1))
+ elseif spec.shrink and spec.shrink ~= 0 then
+ t[#t+1] = format("minus %s",aux.strip_zeros(number.topoints(spec.shrink)))
+ end
+ return concat(t," ")
+end
+
+local function nodes_to_string(head)
+ local current, t = head, { }
+ while current do
+ local id = current.id
+ local ty = node.type(id)
+ if id == penalty then
+ t[#t+1] = format("%s:%s",ty,current.penalty)
+ elseif id == glue then
+ t[#t+1] = format("%s:%s",ty,aux.strip_zeros(number.topoints(current.spec.width)))
+ elseif id == kern then
+ t[#t+1] = format("%s:%s",ty,aux.strip_zeros(number.topoints(current.kern)))
+ else
+ t[#t+1] = ty
+ end
+ current = current.next
+ end
+ return concat(t," + ")
+end
+
+local function reset_tracing(head)
+ trace_list, tracing_info, before, after = { }, false, nodes_to_string(head), ""
+end
+
+local function trace_skip(str,sc,so,sp,data)
+ trace_list[#trace_list+1] = { "skip", format("%s | %s | category %s | order %s | penalty %s", str, glue_to_string(data), sc or "-", so or "-", sp or "-") }
+ tracing_info = true
+end
+
+local function trace_natural(str,data)
+ trace_list[#trace_list+1] = { "skip", format("%s | %s", str, glue_to_string(data)) }
+ tracing_info = true
+end
+
+local function trace_info(message, where, what)
+ trace_list[#trace_list+1] = { "info", format("%s: %s/%s",message,where,what) }
+end
+
+local function trace_node(what)
+ local nt = node.type(what.id)
+ local tl = trace_list[#trace_list]
+ if tl and tl[1] == "node" then
+ trace_list[#trace_list] = { "node", tl[2] .. " + " .. nt }
+ else
+ trace_list[#trace_list+1] = { "node", nt }
+ end
+end
+
+local function trace_done(str,data)
+ if data.id == penalty then
+ trace_list[#trace_list+1] = { "penalty", format("%s | %s", str, data.penalty) }
+ else
+ trace_list[#trace_list+1] = { "glue", format("%s | %s", str, glue_to_string(data)) }
+ end
+ tracing_info = true
+end
+
+local function show_tracing(head)
+ if tracing_info then
+ after = nodes_to_string(head)
+ for i=1,#trace_list do
+ local tag, text = unpack(trace_list[i])
+ if tag == "info" then
+ logs.report("collapse",text)
+ else
+ logs.report("collapse"," %s: %s",tag,text)
+ end
+ end
+ logs.report("collapse","before: %s",before)
+ logs.report("collapse","after : %s",after)
+ end
+end
+
+-- 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",
+}
+
+local free_glue_node = free_node
+local discard, largest, force, penalty, add, disable, nowhite, goback, together = 0, 1, 2, 3, 4, 5, 6, 7, 8
+
+--~ local function free_glue_node(n) free_node(n.spec) free_node(n) end
+
+function vspacing.snap_box(n,how)
+ local sv = snapmethods[how]
+ if sv then
+ local box = texbox[n]
+ local list = box.list
+--~ if list and (list.id == hlist or list.id == vlist) then
+ if list then
+ local s = has_attribute(list,snap_method)
+ if s == 0 then
+ if trace_vsnapping then
+ -- logs.report("snapper", "hlist not snapped, already done")
+ end
+ else
+ local h, d, ch, cd, lines = snap_hlist(box,sv,box.height,box.depth)
+ box.height, box.depth = ch, cd
+ if trace_vsnapping then
+ logs.report("snapper", "hlist snapped from (%s,%s) to (%s,%s) using method '%s' (%s) for '%s' (%s lines)",h,d,ch,cd,sv.name,sv.specification,"direct",lines)
+ end
+ set_attribute(list,snap_method,0)
+ end
+ end
+ end
+end
+
+local function forced_skip(head,current,width,where,trace)
+ if where == "after" then
+ head, current = insert_node_after(head,current,make_rule_node(0,0,0))
+ head, current = insert_node_after(head,current,make_kern_node(width))
+ head, current = insert_node_after(head,current,make_rule_node(0,0,0))
+ else
+ local c = current
+ head, current = insert_node_before(head,current,make_rule_node(0,0,0))
+ head, current = insert_node_before(head,current,make_kern_node(width))
+ head, current = insert_node_before(head,current,make_rule_node(0,0,0))
+ current = c
+ end
+ if trace then
+ logs.report("vspacing", "inserting forced skip of %s",width)
+ end
+ return head, current
+end
+
+local function collapser(head,where,what,trace,snap) -- maybe also pass tail
+ if trace then
+ reset_tracing(head)
+ end
+ local current, oldhead = head, head
+ local glue_order, glue_data, force_glue = 0, nil, false
+ local penalty_order, penalty_data, natural_penalty = 0, nil, nil
+ local parskip, ignore_parskip, ignore_following, ignore_whitespace, keep_together = nil, false, false, false, false
+ --
+ -- todo: keep_together: between headers
+ --
+ local function flush(why)
+ if penalty_data then
+ local p = make_penalty_node(penalty_data)
+ if trace then trace_done("flushed due to " .. why,p) end
+ head, _ = insert_node_before(head,current,p)
+ end
+ if glue_data then
+ if force_glue then
+ if trace then trace_done("flushed due to " .. why,glue_data) end
+ head, _ = forced_skip(head,current,glue_data.spec.width,"before",trace)
+ free_glue_node(glue_data)
+ elseif glue_data.spec.writable then
+ if trace then trace_done("flushed due to " .. why,glue_data) end
+ head, _ = insert_node_before(head,current,glue_data)
+ else
+ free_glue_node(glue_data)
+ end
+ end
+ if trace then trace_node(current) end
+ glue_order, glue_data, force_glue = 0, nil, false
+ penalty_order, penalty_data, natural_penalty = 0, nil, nil
+ parskip, ignore_parskip, ignore_following, ignore_whitespace = nil, false, false, false
+ end
+ if trace_vsnapping then
+ logs.report("snapper", "global ht/dp = %s/%s, local ht/dp = %s/%s",
+ texdimen.globalbodyfontstrutheight, texdimen.globalbodyfontstrutdepth,
+ texdimen.bodyfontstrutheight, texdimen.bodyfontstrutdepth)
+ end
+ if trace then trace_info("start analyzing",where,what) end
+ while current do
+ local id, subtype = current.id, current.subtype
+ if id == hlist or id == vlist then
+-- needs checking, why so many calls
+ if snap then
+ local s = has_attribute(current,snap_method)
+ if not s then
+ -- if trace_vsnapping then
+ -- logs.report("snapper", "hlist not snapped")
+ -- end
+ elseif s == 0 then
+ if trace_vsnapping then
+ -- logs.report("snapper", "hlist not snapped, already done")
+ end
+ else
+ local sv = snapmethods[s]
+ if sv then
+ local h, d, ch, cd, lines = snap_hlist(current,sv)
+ if trace_vsnapping then
+ logs.report("snapper", "hlist snapped from (%s,%s) to (%s,%s) using method '%s' (%s) for '%s' (%s lines)",h,d,ch,cd,sv.name,sv.specification,where,lines)
+ end
+ elseif trace_vsnapping then
+ logs.report("snapper", "hlist not snapped due to unknown snap specification")
+ end
+ set_attribute(current,snap_method,0)
+ end
+ else
+ --
+ end
+ -- tex.prevdepth = 0
+ flush("list")
+ current = current.next
+ elseif id == penalty then
+ --~ natural_penalty = current.penalty
+ --~ if trace then trace_done("removed penalty",current) end
+ --~ head, current = remove_node(head, current, true)
+ current = current.next
+ elseif id == kern then
+ if snap and trace_vsnapping and current.kern ~= 0 then
+ --~ current.kern = 0
+ logs.report("snapper", "kern of %s (kept)",current.kern)
+ end
+ flush("kern")
+ current = current.next
+ elseif id ~= glue then
+ flush("something else")
+ current = current.next
+ elseif subtype == user_skip then -- todo, other subtypes, like math
+ local sc = has_attribute(current,skip_category) -- has no default, no unset (yet)
+ local so = has_attribute(current,skip_order ) or 1 -- has 1 default, no unset (yet)
+ local sp = has_attribute(current,skip_penalty ) -- has no default, no unset (yet)
+ if sp and sc == penalty 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
+ if trace then trace_skip('penalty in skip',sc,so,sp,current) end
+ head, current = remove_node(head, current, true)
+ elseif not sc then -- if not sc then
+ if glue_data then
+ if trace then trace_done("flush",glue_data) end
+ head, current = nodes.before(head,current,glue_data)
+ if trace then trace_natural("natural",current) end
+ current = current.next
+ else
+ -- not look back across head
+ local previous = current.prev
+ if previous and previous.id == glue and previous.subtype == 0 then
+ local ps = previous.spec
+ if ps.writable then
+ local cs = current.spec
+ if cs.writable and ps.stretch_order == 0 and ps.shrink_order == 0 and cs.stretch_order == 0 and cs.shrink_order == 0 then
+ local pw, pp, pm = ps.width, ps.stretch, ps.shrink
+ local cw, cp, cm = cs.width, cs.stretch, cs.shrink
+ ps = writable_spec(previous) -- no writable needed here
+ ps.width, ps.stretch, ps.shrink = pw + cw, pp + cp, pm + cm
+ if trace then trace_natural("removed",current) end
+ head, current = remove_node(head, current, true)
+ -- current = previous
+ if trace then trace_natural("collapsed",previous) end
+ -- current = current.next
+ else
+ if trace then trace_natural("filler",current) end
+ current = current.next
+ end
+ else
+ if trace then trace_natural("natural (no prev spec)",current) end
+ current = current.next
+ end
+ else
+ if trace then trace_natural("natural (no prev)",current) end
+ current = current.next
+ end
+ end
+ glue_order, glue_data = 0, nil
+ elseif sc == disable then
+ ignore_following = true
+ if trace then trace_skip("disable",sc,so,sp,current) end
+ head, current = remove_node(head, current, true)
+ elseif sc == together then
+ keep_together = true
+ if trace then trace_skip("together",sc,so,sp,current) end
+ head, current = remove_node(head, current, true)
+ elseif sc == nowhite then
+ ignore_whitespace = true
+ head, current = remove_node(head, current, true)
+ elseif sc == discard then
+ if trace then trace_skip("discard",sc,so,sp,current) end
+ head, current = remove_node(head, current, true)
+ elseif ignore_following then
+ if trace then trace_skip("disabled",sc,so,sp,current) end
+ head, current = remove_node(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 = remove_node(head, current)
+ elseif glue_order < so then
+ if trace then trace_skip("force",sc,so,sp,current) end
+ glue_order = so
+ free_glue_node(glue_data)
+ head, current, glue_data = remove_node(head, current)
+ elseif glue_order == so then
+ -- is now exclusive, maybe support goback as combi, else why a set
+ if sc == largest then
+ local cs, gs = current.spec, glue_data.spec
+ local cw, gw = cs.width, gs.width
+ if cw > gw then
+ if trace then trace_skip('largest',sc,so,sp,current) end
+ free_glue_node(glue_data) -- also free spec
+ head, current, glue_data = remove_node(head, current)
+ else
+ if trace then trace_skip('remove smallest',sc,so,sp,current) end
+ head, current = remove_node(head, current, true)
+ end
+ elseif sc == goback then
+ if trace then trace_skip('goback',sc,so,sp,current) end
+ free_glue_node(glue_data) -- also free spec
+ head, current, glue_data = remove_node(head, current)
+ elseif sc == force then
+ -- last one counts, some day we can provide an accumulator and largest etc
+ -- but not now
+ if trace then trace_skip('force',sc,so,sp,current) end
+ free_glue_node(glue_data) -- also free spec
+ head, current, glue_data = remove_node(head, current)
+ elseif sc == penalty then
+ -- ? ? ? ?
+ if trace then trace_skip('penalty',sc,so,sp,current) end
+ free_glue_node(glue_data) -- also free spec
+ glue_data = nil
+ head, current = remove_node(head, current, true)
+ elseif sc == add then
+ if trace then trace_skip('add',sc,so,sp,current) end
+--~ local old, new = glue_data.spec, current.spec
+ local old, new = writable_spec(glue_data), current.spec
+ old.width = old.width + new.width
+ old.stretch = old.stretch + new.stretch
+ old.shrink = old.shrink + new.shrink
+ -- toto: order
+ head, current = remove_node(head, current, true)
+ else
+ if trace then trace_skip("unknown",sc,so,sp,current) end
+ head, current = remove_node(head, current, true)
+ end
+ else
+ if trace then trace_skip("unknown",sc,so,sp,current) end
+ head, current = remove_node(head, current, true)
+ end
+ if sc == force then
+ force_glue = true
+ end
+ elseif subtype == line_skip then
+ if snap then
+ local s = has_attribute(current,snap_method)
+ if s and s ~= 0 then
+ set_attribute(current,snap_method,0)
+ if current.spec.writable then
+ local spec = writable_spec(current)
+ spec.width = 0
+ if trace_vsnapping then
+ logs.report("snapper", "lineskip set to zero")
+ end
+ end
+ else
+ if trace then trace_skip("lineskip",sc,so,sp,current) end
+ flush("lineskip")
+ end
+ else
+ if trace then trace_skip("lineskip",sc,so,sp,current) end
+ flush("lineskip")
+ end
+ current = current.next
+ elseif subtype == baseline_skip then
+ if snap then
+ local s = has_attribute(current,snap_method)
+ if s and s ~= 0 then
+ set_attribute(current,snap_method,0)
+ if current.spec.writable then
+ local spec = writable_spec(current)
+ spec.width = 0
+ if trace_vsnapping then
+ logs.report("snapper", "baselineskip set to zero")
+ end
+ end
+ else
+ if trace then trace_skip("baselineskip",sc,so,sp,current) end
+ flush("baselineskip")
+ end
+ else
+ if trace then trace_skip("baselineskip",sc,so,sp,current) end
+ flush("baselineskip")
+ end
+ current = current.next
+ elseif subtype == par_skip then
+ -- parskip always comes later
+ if ignore_whitespace then
+ if trace then trace_natural("ignored parskip",current) end
+ head, current = remove_node(head, current, true)
+ elseif glue_data then
+ local ps, gs = current.spec, glue_data.spec
+ if ps.writable and gs.writable and ps.width > gs.width then
+ glue_data.spec = copy_node(ps)
+ if trace then trace_natural("taking parskip",current) end
+ else
+ if trace then trace_natural("removed parskip",current) end
+ end
+ head, current = remove_node(head, current, true)
+ else
+ if trace then trace_natural("honored parskip",current) end
+ head, current, glue_data = remove_node(head, current)
+ end
+ elseif subtype == top_skip_code or subtype == split_top_skip_code then
+ if snap then
+ local s = has_attribute(current,snap_method)
+ if s and s ~= 0 then
+ set_attribute(current,snap_method,0)
+ local sv = snapmethods[s]
+ local w, cw = snap_topskip(current,sv)
+ if trace_vsnapping then
+ logs.report("snapper", "topskip snapped from %s to %s for '%s'",w,cw,where)
+ end
+ else
+ if trace then trace_skip("topskip",sc,so,sp,current) end
+ flush("topskip")
+ end
+ else
+ if trace then trace_skip("topskip",sc,so,sp,current) end
+ flush("topskip")
+ end
+ current = current.next
+ elseif subtype == above_display_skip then
+ --
+ if trace then trace_skip("above display skip (normal)",sc,so,sp,current) end
+ flush("above display skip (normal)")
+ current = current.next
+ --
+ elseif subtype == below_display_skip then
+ --
+ if trace then trace_skip("below display skip (normal)",sc,so,sp,current) end
+ flush("below display skip (normal)")
+ current = current.next
+ --
+ elseif subtype == above_display_short_skip then
+ --
+ if trace then trace_skip("above display skip (short)",sc,so,sp,current) end
+ flush("above display skip (short)")
+ current = current.next
+ --
+ elseif subtype == below_display_short_skip then
+ --
+ if trace then trace_skip("below display skip (short)",sc,so,sp,current) end
+ flush("below display skip (short)")
+ current = current.next
+ --
+ else -- other glue
+ if snap and trace_vsnapping and current.spec.writable and current.spec.width ~= 0 then
+ logs.report("snapper", "%s of %s (kept)",skips[subtype],current.spec.width)
+ --~ current.spec.width = 0
+ end
+ if trace then trace_skip(format("some glue (%s)",subtype),sc,so,sp,current) end
+ flush("some glue")
+ current = current.next
+ end
+ end
+ if trace then trace_info("stop analyzing",where,what) end
+ --~ if natural_penalty and (not penalty_data or natural_penalty > penalty_data) then
+ --~ penalty_data = natural_penalty
+ --~ end
+ if trace and (glue_data or penalty_data) then
+ trace_info("start flushing",where,what)
+ end
+ local tail
+ if penalty_data then
+ tail = find_node_tail(head)
+ local p = make_penalty_node(penalty_data)
+ if trace then trace_done("result",p) end
+ head, tail = insert_node_after(head,tail,p)
+ end
+ if glue_data then
+ if not tail then tail = find_node_tail(head) end
+ if trace then trace_done("result",glue_data) end
+ if force_glue then
+ head, tail = forced_skip(head,tail,glue_data.spec.width,"after",trace)
+ free_glue_node(glue_data)
+ else
+ head, tail = insert_node_after(head,tail,glue_data)
+ end
+ end
+ if trace then
+ if glue_data or penalty_data then
+ trace_info("stop flushing",where,what)
+ end
+ show_tracing(head)
+ if oldhead ~= head then
+ trace_info("head has been changed from '%s' to '%s'",node.type(oldhead.id),node.type(head.id))
+ end
+ end
+ return head, true
+end
+
+-- alignment after_output end box new_graf vmode_par hmode_par insert penalty before_display after_display
+-- \par -> vmode_par
+--
+-- status.best_page_break
+-- tex.lists.best_page_break
+-- tex.lists.best_size (natural size to best_page_break)
+-- tex.lists.least_page_cost (badness of best_page_break)
+-- tex.lists.page_head
+-- tex.lists.contrib_head
+
+local stackhead, stacktail, stackhack = nil, nil, false
+
+local function report(message,lst)
+ logs.report("vspacing",message,count_nodes(lst,true),node_ids_to_string(lst))
+end
+
+function nodes.handle_page_spacing(newhead,where)
+--~ local newhead = texlists.contrib_head
+ if newhead then
+--~ starttiming(vspacing)
+ local newtail = find_node_tail(newhead)
+ local flush = false
+ stackhack = true -- todo: only when grid snapping once enabled
+ for n in traverse_nodes(newhead) do -- we could just look for glue nodes
+ local id = n.id
+ if id == glue then
+ if n.subtype == 0 then
+ if has_attribute(n,skip_category) then
+ stackhack = true
+ else
+ flush = true
+ end
+ else
+ -- tricky
+ end
+ else
+ flush = true
+ end
+ end
+ if flush then
+ if stackhead then
+ if trace_collect_vspacing then report("appending %s nodes to stack (final): %s",newhead) end
+ stacktail.next = newhead
+ newhead.prev = stacktail
+ newhead = stackhead
+ stackhead, stacktail = nil, nil
+ end
+ if stackhack then
+ stackhack = false
+ if trace_collect_vspacing then report("processing %s nodes: %s",newhead) end
+--~ texlists.contrib_head = collapser(newhead,"page",where,trace_page_vspacing,true)
+newhead = collapser(newhead,"page",where,trace_page_vspacing,true)
+ else
+ if trace_collect_vspacing then report("flushing %s nodes: %s",newhead) end
+--~ texlists.contrib_head = newhead
+ end
+ else
+ if stackhead then
+ if trace_collect_vspacing then report("appending %s nodes to stack (intermediate): %s",newhead) end
+ stacktail.next = newhead
+ newhead.prev = stacktail
+ else
+ if trace_collect_vspacing then report("storing %s nodes in stack (initial): %s",newhead) end
+ stackhead = newhead
+ end
+ stacktail = newtail
+--~ texlists.contrib_head = nil
+newhead = nil
+ end
+--~ stoptiming(vspacing)
+ end
+return newhead
+end
+
+local ignore = table.tohash {
+ "split_keep",
+ "split_off",
+ -- "vbox",
+}
+
+function nodes.handle_vbox_spacing(head,where)
+ if head and not ignore[where] and head.next then
+ -- starttiming(vspacing)
+ head = collapser(head,"vbox",where,trace_vbox_vspacing,false)
+ -- stoptiming(vspacing)
+ end
+ return head
+end
+
+function nodes.collapse_vbox(n) -- for boxes
+ local list = texbox[n].list
+ if list then
+ -- starttiming(vspacing)
+ texbox[n].list = vpack_node(collapser(list,"snapper","vbox",trace_vbox_vspacing,true))
+ -- stoptiming(vspacing)
+ end
+end
+
+-- we will split this module hence the locals
+
+local attribute = attributes.private('graphicvadjust')
+
+local hlist = node.id('hlist')
+local vlist = node.id('vlist')
+
+local remove_node = nodes.remove
+local hpack_node = node.hpack
+local vpack_node = node.vpack
+local has_attribute = node.has_attribute
+
+function nodes.repackage_graphicvadjust(head,groupcode) -- we can make an actionchain for mvl only
+ if groupcode == "" then -- mvl only
+ local h, p, done = head, nil, false
+ while h do
+ local id = h.id
+ if id == hlist or id == vlist then
+ local a = has_attribute(h,attribute)
+ if a then
+ if p then
+ local n
+ head, h, n = remove_node(head,h)
+ local pl = p.list
+ if n.width ~= 0 then
+ n = hpack_node(n,0,'exactly') -- todo: dir
+ end
+ if pl then
+ pl.prev = n
+ n.next = pl
+ end
+ p.list = n
+ done = true
+ else
+ -- can't happen
+ end
+ else
+ p = h
+ h = h.next
+ end
+ else
+ h = h.next
+ end
+ end
+ return head, done
+ else
+ return head, false
+ end
+end
+
+--~ function nodes.repackage_graphicvadjust(head,groupcode) -- we can make an actionchain for mvl only
+--~ if groupcode == "" then -- mvl only
+--~ return head, false
+--~ else
+--~ return head, false
+--~ end
+--~ end
+
+--~ tasks.appendaction("finalizers", "lists", "nodes.repackage_graphicvadjust")
+
+nodes.builders = nodes.builder or { }
+
+local builders = nodes.builders
+
+local actions = tasks.actions("vboxbuilders",5)
+
+function nodes.builders.vpack_filter(head,groupcode,size,packtype,maxdepth,direction)
+ local done = false
+ if head then
+ starttiming(builders)
+ if trace_callbacks then
+ local before = nodes.count(head)
+ head, done = actions(head,groupcode,size,packtype,maxdepth,direction)
+ local after = nodes.count(head)
+ if done then
+ tracer("vpack","changed",head,groupcode,before,after,true)
+ else
+ tracer("vpack","unchanged",head,groupcode,before,after,true)
+ end
+ stoptiming(builders)
+ else
+ head, done = actions(head,groupcode)
+ stoptiming(builders)
+ end
+ end
+ return head, done
+end
+
+-- This one is special in the sense that it has no head
+-- and we operate on the mlv. Also, we need to do the
+-- vspacing last as it removes items from the mvl.
+
+local actions = tasks.actions("mvlbuilders",1)
+
+function nodes.builders.buildpage_filter(groupcode)
+ starttiming(builders)
+ local head = texlists.contrib_head
+ local head, done = actions(head,groupcode)
+ texlists.contrib_head = head
+ stoptiming(builders)
+ return (done and head) or true
+end
+
+callbacks.register('vpack_filter', nodes.builders.vpack_filter, "vertical spacing etc")
+callbacks.register('buildpage_filter', nodes.builders.buildpage_filter, "vertical spacing etc (mvl)")
+
+statistics.register("v-node processing time", function()
+ return statistics.elapsedseconds(builders)
+end)
diff --git a/Master/texmf-dist/tex/context/base/spac-ver.mkiv b/Master/texmf-dist/tex/context/base/spac-ver.mkiv
new file mode 100644
index 00000000000..75af82df79a
--- /dev/null
+++ b/Master/texmf-dist/tex/context/base/spac-ver.mkiv
@@ -0,0 +1,2078 @@
+%D \module
+%D [ file=spac-ver,
+%D version=2009.10.16, % 1997.03.31, was core-spa.tex
+%D title=\CONTEXT\ Spacing Macros,
+%D subtitle=Vertical,
+%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 Spacing Macros / Vertical}
+
+\unprotect
+
+\registerctxluafile{spac-ver}{1.001}
+
+\newskip\blankskip \blankskip=\bigskipamount
+
+\def\skipfactor {.75}
+\def\skipgluefactor{.25}
+
+\def\normalskipamount
+ {\openlineheight
+ \ifgridsnapping \else \ifblankflexible
+ \!!plus \skipgluefactor\openlineheight
+ \!!minus\skipgluefactor\openlineheight
+ \fi \fi
+ \relax}
+
+\def\linedistance {\normalskipamount}
+\def\appliedblankskip{\skipfactor\linedistance}
+\def\lastblankskip {\blankskip}
+\def\currentblank {\v!big}
+\def\oldprevdepth {\prevdepth}
+\def\newprevdepth {-1001pt}
+\def\mindimen {1sp} % was: 0.00002pt
+
+%D There are two ways to influence the interline spacing. The
+%D most general and often most consistent way is using
+%D
+%D \showsetup{setupinterlinespace}
+%D
+%D For instance
+%D
+%D \starttyping
+%D \setupinterlinespace[line=2.8ex]
+%D \stoptyping
+%D
+%D This setting adapts itself to the bodyfontsize, while for
+%D instance saying
+%D
+%D \starttyping
+%D \setupinterlinespace[line=12pt]
+%D \stoptyping
+%D
+%D sets things fixed for all sizes, which is definitely not
+%D what we want. Therefore one can also say:
+%D
+%D \starttyping
+%D \definebodyfontenvironment[9pt][interlinespace=11pt]
+%D \stoptyping
+%D
+%D One can still use \type{\setupinterlinespace} (without
+%D arguments) to set the interline space according to the
+%D current font, e.g. a \type{\bfa}.
+
+\newif\iflocalinterlinespace
+
+% font-ini
+
+\ifx\bodyfontinterlinespecs\undefined
+
+ \let\bodyfontinterlinespecs\empty
+ \let\bodyfontinterlinespace\empty
+
+\fi
+
+% \def\presetnormallineheight
+% {\edef\normallineheight{\@@itline}%
+% %done elsewhere : \spacing\!!plusone % new per 10/08/2004, else problems in otr / !! needed
+% \iflocalinterlinespace \else
+% \doifdefined\bodyfontinterlinespecs
+% {\doifsomething\bodyfontinterlinespace
+% {\edef\normallineheight{\bodyfontinterlinespace}}}%
+% \fi}
+
+% \unexpanded\def\setupspecifiedinterlinespace[#1]%
+% {\getparameters[\??it][#1]%
+% \scratchdimen0\@@itheight\points
+% \advance\scratchdimen 0\@@itdepth\points
+% \ifdim\scratchdimen>\onepoint
+% \showmessage\m!layouts{10}{\@@itheight,\@@itdepth}%
+% \let\@@itheight\strutheightfactor
+% \let\@@itdepth \strutdepthfactor
+% \else
+% \let\strutheightfactor\@@itheight
+% \let\strutdepthfactor \@@itdepth
+% \fi
+% \let\minimumstrutheight \@@itminheight
+% \let\minimumstrutdepth \@@itmindepth
+% \let\minimumlinedistance\@@itdistance
+% \let\normallineheight \@@itline % let ! ! ! ! ! ivm ex
+% \doifelse\@@ittop\v!height % new, topskip does more bad than good
+% {\let\topskipfactor \@@itheight}
+% {\let\topskipfactor \@@ittop }%
+% \let\maxdepthfactor \@@itbottom
+% \let\baselinegluefactor \@@itstretch
+% \setfontparameters % redundant, can be \setstrut, test first
+% \updateraggedskips} % yes indeed
+
+\def\presetnormallineheight
+ {\edef\normallineheight{\interlinespaceparameter\c!line}%
+ %done elsewhere : \spacing\!!plusone % new per 10/08/2004, else problems in otr / !! needed
+ \iflocalinterlinespace \else
+ \doifdefined\bodyfontinterlinespecs
+ {\doifsomething\bodyfontinterlinespace
+ {\edef\normallineheight{\bodyfontinterlinespace}}}%
+ \fi}
+
+\unexpanded\def\setupspecifiedinterlinespace[#1]%
+ {\getparameters[\??it\currentinterlinespace][#1]%
+ \dosetupspecifiedinterlinespaceindeed}
+
+\def\dosetupspecifiedinterlinespaceindeed
+ {\edef\strutheightfactor {\interlinespaceparameter\c!height}%
+ \edef\strutdepthfactor {\interlinespaceparameter\c!depth}%
+ \edef\minimumstrutheight {\interlinespaceparameter\c!minheight}%
+ \edef\minimumstrutdepth {\interlinespaceparameter\c!mindepth}%
+ \edef\minimumlinedistance{\interlinespaceparameter\c!distance}%
+ \edef\normallineheight {\interlinespaceparameter\c!line}%
+ \edef\topskipfactor {\interlinespaceparameter\c!top}%
+ \edef\maxdepthfactor {\interlinespaceparameter\c!bottom}%
+ \edef\baselinegluefactor {\interlinespaceparameter\c!stretch}%
+ % often topskip does more bad than good, so:
+ \ifx\topskipfactor\v!height
+ \let\topskipfactor\strutheightfactor
+ \fi
+ \setfontparameters % redundant, can be \setstrut, test first
+ \updateraggedskips} % yes indeed
+
+\let\currentrelativeinterlinespace\empty
+
+\setvalue{\??it::\v!on }{\oninterlineskip}
+\setvalue{\??it::\v!off }{\offinterlineskip}
+\setvalue{\??it::\v!reset}{\let\currentrelativeinterlinespace\empty
+ \let\setrelativeinterlinespace\relax
+ \setfontparameters}
+\setvalue{\??it::\v!auto }{\let\setrelativeinterlinespace\dosetrelativeinterlinespace}
+
+% \def\dosetspecifiedrelativeinterlinespace#1%
+% {\assignvalue{#1}\currentrelativeinterlinespace{1.00}{1.25}{1.50}%
+% \spacing\currentrelativeinterlinespace}
+
+% \def\dosetspecifiedrelativeinterlinespace#1% fragile?
+% {\doifdimensionelse{#1}
+% {\setupspecifiedinterlinespace[\c!line=#1]}
+% {\assignvalue{#1}\currentrelativeinterlinespace{1.00}{1.25}{1.50}%
+% \spacing\currentrelativeinterlinespace}}
+
+\def\dosetspecifiedrelativeinterlinespace#1% fragile?
+ {\doifdimenstringelse{#1}
+ {\setupspecifiedinterlinespace[\c!line=#1]}
+ {\assignvalue{#1}\currentrelativeinterlinespace{1.00}{1.25}{1.50}%
+ \spacing\currentrelativeinterlinespace}}
+
+\unexpanded\def\setuprelativeinterlinespace[#1]%
+ {\processcommalist[#1]\dosetuprelativeinterlinespace}
+
+\def\dosetuprelativeinterlinespace#1%
+ {\ifcsname\??it::#1\endcsname
+ \csname\??it::#1\endcsname
+ \else
+ \dosetspecifiedrelativeinterlinespace{#1}%
+ \fi}
+
+\def\dosetrelativeinterlinespace
+ {\ifx\currentrelativeinterlinespace\empty\else
+ \spacing\currentrelativeinterlinespace
+ \fi}
+
+\let\setrelativeinterlinespace\relax
+
+% \appendtoks \setrelativeinterlinespace \to \everybodyfont
+
+\newtoks \everysetupglobalinterlinespace
+\newtoks \everysetuplocalinterlinespace
+
+% \def\complexsetupinterlinespace[#1]% \commalistelement ipv #1
+% {\doifassignmentelse{#1}\setupspecifiedinterlinespace\setuprelativeinterlinespace[#1]%
+% \the\iflocalinterlinespace\everysetuplocalinterlinespace\else\everysetupglobalinterlinespace\fi}
+
+\def\interlinespaceparameter #1{\csname\dointerlinespaceparameter{\??it\currentinterlinespace}#1\endcsname}
+\def\dointerlinespaceparameter #1#2{\ifcsname#1#2\endcsname#1#2\else\expandafter\dointerlinespaceparentparameter\csname#1\s!parent\endcsname#2\fi}
+\def\dointerlinespaceparentparameter#1#2{\ifx#1\relax\s!empty\else\dointerlinespaceparameter#1#2\fi}
+
+\newconditional\interlinespaceisset
+
+\let\currentinterlinespace\empty
+
+\unexpanded\def\defineinterlinespace
+ {\dodoubleempty\dodefineinterlinespace}
+
+\def\dodefineinterlinespace[#1][#2]%
+ {\getparameters[\??it#1][\s!parent=\??it,#2]}
+
+\unexpanded\def\setupinterlinespace
+ {\dodoubleempty\dosetupinterlinespace}
+
+\def\dosetupinterlinespace[#1][#2]%
+ {\settrue\interlinespaceisset % reset has to be done when needed
+ \ifsecondargument
+ \getparameters[\??it#1][#2]%
+ \else\iffirstargument
+ \edef\currentinterlinespace{\ifcsname\??it#1\s!parent\endcsname#1\fi}%
+ \ifx\currentinterlinespace\empty
+ \complexsetupinterlinespace[#1]%
+ \else
+ \dosetupspecifiedinterlinespaceindeed
+ \fi
+ \else
+ \let\currentinterlinespace\empty
+ \simplesetupinterlinespace
+ \fi\fi}
+
+\def\complexsetupinterlinespace[#1]% \commalistelement ipv #1
+ {\doifassignmentelse{#1}\setupspecifiedinterlinespace\setuprelativeinterlinespace[#1]%
+ \the\iflocalinterlinespace\everysetuplocalinterlinespace\else\everysetupglobalinterlinespace\fi}
+
+\def\simplesetupinterlinespace % adapts to the font
+ {\localinterlinespacetrue
+ \setfontparameters
+ \updateraggedskips % funny one here
+ \the\everysetuplocalinterlinespace
+ \localinterlinespacefalse}
+
+% \def\dosetupcheckedinterlinespace#1% often a chain
+% {\edef\askedinterlinespace{#1}%
+% \ifx\askedinterlinespace\empty
+% \simplesetupinterlinespace
+% \else
+% \normalexpanded{\noexpand\doifassignmentelse{\askedinterlinespace}%
+% \noexpand\setupspecifiedinterlinespace
+% \noexpand\setuprelativeinterlinespace[\askedinterlinespace]}%
+% \iflocalinterlinespace
+% \the\everysetuplocalinterlinespace
+% \else
+% \localinterlinespacetrue
+% \the\everysetuplocalinterlinespace
+% \localinterlinespacefalse
+% \fi
+% \fi}
+
+\def\dosetupcheckedinterlinespace#1% often a chain
+ {\edef\askedinterlinespace{#1}%
+ \ifx\askedinterlinespace\empty
+ \simplesetupinterlinespace
+ \else\ifcsname\??it\askedinterlinespace\s!parent\endcsname
+ \pushmacro\currentinterlinespace
+ \let\currentinterlinespace\askedinterlinespace
+ \dosetupspecifiedinterlinespaceindeed
+ \iflocalinterlinespace
+ \the\everysetuplocalinterlinespace
+ \else
+ \localinterlinespacetrue
+ \the\everysetuplocalinterlinespace
+ \localinterlinespacefalse
+ \fi
+ \popmacro\currentinterlinespace
+ \else
+ \normalexpanded{\noexpand\doifassignmentelse{\askedinterlinespace}%
+ \noexpand\setupspecifiedinterlinespace
+ \noexpand\setuprelativeinterlinespace[\askedinterlinespace]}%
+ \iflocalinterlinespace
+ \the\everysetuplocalinterlinespace
+ \else
+ \localinterlinespacetrue
+ \the\everysetuplocalinterlinespace
+ \localinterlinespacefalse
+ \fi
+ \fi\fi}
+
+% \unexpanded\def\setuplocalinterlinespace[#1]%
+% {\localinterlinespacetrue
+% \let\@@saveditheight \@@itheight
+% \let\@@saveditdepth \@@itdepth
+% \let\@@saveditline \@@itline
+% \let\@@saveditminheight\@@itminheight
+% \let\@@saveditmindepth \@@itmindepth
+% \let\@@saveditdistance \@@itdistance
+% \let\@@savedittop \@@ittop
+% \let\@@saveditbottom \@@itbottom
+% \let\@@saveditstretch \@@itstretch
+% \setupinterlinespace[#1]%
+% \let\@@itheight \@@saveditheight
+% \let\@@itdepth \@@saveditdepth
+% \let\@@itline \@@saveditline
+% \let\@@itminheight\@@saveditminheight
+% \let\@@itmindepth \@@saveditmindepth
+% \let\@@itdistance \@@saveditdistance
+% \let\@@ittop \@@savedittop
+% \let\@@itbottom \@@saveditbottom
+% \let\@@itstretch \@@saveditstretch
+% \localinterlinespacefalse}
+
+\unexpanded\def\setuplocalinterlinespace[#1]%
+ {\localinterlinespacetrue
+ \pushmacro\currentinterlinespace
+ \setupinterlinespace[#1]%
+ \popmacro\currentinterlinespace
+ \localinterlinespacefalse}
+
+\let\switchtointerlinespace\setuplocalinterlinespace
+
+\definecomplexorsimple\setupinterlinespace
+
+\def\removelastskip % a redefinition of plain
+ {\ifvmode\ifdim\lastskip=\zeropoint\else\vskip-\lastskip\fi\fi}
+
+\def\doifoutervmode#1%
+ {\ifvmode\ifinner\else#1\fi\fi}
+
+\def\dosomebreak#1%
+ {\doifoutervmode
+ {\scratchskip\lastskip
+ \removelastskip
+ %\leavevmode\type{#1}%
+ #1\relax
+ \ifdim\scratchskip=\zeropoint % else interference with footnotes
+ \else
+ \vskip\scratchskip
+ \fi}}
+
+\def\packed
+ {\nointerlineskip}
+
+\def\godown[#1]%
+ {\relax
+ \ifhmode\endgraf\fi
+ \ifvmode\nointerlineskip\vskip#1\relax\fi}
+
+\ifx\smallskip\undefined
+
+ \def\smallskip{\vskip\smallskipamount}
+ \def\medskip {\vskip\medskipamount}
+ \def\bigskip {\vskip\bigskipamount}
+
+\fi
+
+\ifx\allowbreak\undefined
+
+ \def\break {\penalty\ifhmode-\plustenthousand\else\ejectpenalty\fi}
+ \def\nobreak {\penalty \plustenthousand}
+ \def\allowbreak{\penalty \zeropoint}
+ \def\filbreak {\par\vfil\penalty-200\vfilneg}
+ \def\goodbreak {\par\penalty-500 }
+
+\fi
+
+%D Made slightly more readable:
+
+\ifx\vglue\undefined
+
+ \def\vglue {\afterassignment\dovglue\scratchskip=}
+ \def\hglue {\afterassignment\dohglue\scratchskip=}
+ \def\topglue{\nointerlineskip\vglue-\topskip\vglue}
+
+ \def\dovglue
+ {\par
+ \scratchdimen\prevdepth
+ \hrule\!!height\zeropoint
+ \nobreak
+ \vskip\scratchskip
+ \prevdepth\scratchdimen}
+
+ \def\dohglue
+ {\dontleavehmode % \leavevmode
+ \scratchcounter\spacefactor
+ \vrule\!!width\zeropoint
+ \nobreak
+ \hskip\scratchskip
+ \spacefactor\scratchcounter}
+
+\fi
+
+\ifx\eject\undefined
+
+ \def\eject{\par\break}
+
+\fi
+
+\ifx\supereject\undefined
+
+ \def\supereject{\par\penalty\superpenalty}
+
+\fi
+
+\ifx\dosupereject\undefined
+
+ \def\dosupereject
+ {\ifnum\insertpenalties>\zerocount % something is being held over
+ \line{}
+ \kern-\topskip
+ \nobreak
+ \vfill\supereject
+ \fi}
+
+\fi
+
+%D We adapt plain's \type {\removelastskip} a bit:
+
+\ifx\removelastskip\undefined
+
+ \def\removelastskip
+ {\ifvmode \ifdim\lastskip=\zeropoint \else
+ \vskip-\lastskip
+ \fi \fi}
+
+\fi
+
+\ifx\smallbreak\undefined
+
+\def\smallbreak
+ {\par
+ \ifdim\lastskip<\smallskipamount
+ \removelastskip
+ \penalty-50
+ \smallskip
+ \fi}
+
+\def\medbreak
+ {\par
+ \ifdim\lastskip<\medskipamount
+ \removelastskip
+ \penalty-100
+ \medskip
+ \fi}
+
+\def\bigbreak
+ {\par
+ \ifdim\lastskip<\bigskipamount
+ \removelastskip
+ \penalty-200
+ \bigskip
+ \fi}
+
+\fi
+
+\newskip\ctxparskip \ctxparskip\zeropoint
+
+\newconditional \flexiblewhitespace \settrue\flexiblewhitespace
+
+\def\currentwhitespace {\zeropoint}
+
+\definecomplexorsimple\setupwhitespace
+
+\def\simplesetupwhitespace
+ {\doifnot\currentwhitespace\v!none\dosetupwhitespace}
+
+\def\complexsetupwhitespace[#1]%
+ {\edef\nextcurrentwhitespace{#1}%
+ \ifx\nextcurrentwhitespace\empty
+ \simplesetupwhitespace
+ \else
+ \let\currentwhitespace\nextcurrentwhitespace
+ \dosetupwhitespace
+ \fi}
+
+\def\dosetupwhitespace % quick test for no list
+ {\ifcsname\??ws\??ws\currentwhitespace\endcsname
+ \csname\??ws\??ws\currentwhitespace\endcsname
+ \else
+ \expandafter\processcommalist\expandafter[\currentwhitespace]\dowhitespacemethod % can be raw
+ \fi\relax
+ \ifgridsnapping
+ \setfalse\flexiblewhitespace
+ \ifdim\ctxparskip>\zeropoint
+ \ctxparskip
+ \ifcase\baselinegridmode
+ \baselineskip % normal ! ! ! ! !!
+ \or
+ \ifdim\scratchdimen=\baselineskip % maybe range
+ \baselineskip % normal ! ! ! ! !!
+ \else
+ \numexpr\ctxparskip/\dimexpr.5\lineheight\relax\relax\dimexpr.5\lineheight\relax
+ \fi
+ \else
+ \baselineskip % normal ! ! ! ! !!
+ \fi
+ \fi
+ \else
+ \ifconditional\flexiblewhitespace \else \ctxparskip1\ctxparskip \fi
+ \fi
+ \parskip\ctxparskip}
+
+\chardef\baselinegridmode=0 % option in layout / 1=permit_half_lines
+
+\def\dodosetupwhitespace
+ {\ifgridsnapping
+ \setfalse\flexiblewhitespace
+ \ctxparskip1\ctxparskip
+ \ifdim\ctxparskip>\zeropoint
+ \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
+ \ifconditional\flexiblewhitespace \else \ctxparskip1\ctxparskip \fi
+ \fi
+ \parskip\ctxparskip}
+
+\definesystemvariable {ws} % whitespace
+
+\unexpanded\def\definewhitespacemethod[#1]#2{\setvalue{\??ws\??ws#1}{#2}}
+
+\definewhitespacemethod [\v!fix] {}
+\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 \bigskipamount}
+\definewhitespacemethod [\v!medium] {\ctxparskip \medskipamount}
+\definewhitespacemethod [\v!small] {\ctxparskip \smallskipamount}
+
+\definewhitespacemethod [\s!default] {\simplesetupwhitespace} % {\stelwitruimteopnieuwin}
+
+\def\dowhitespacemethod#1%
+ {\ifcsname\??ws\??ws#1\endcsname\csname\??ws\??ws#1\endcsname\else\ctxparskip#1\fi\relax}
+
+% \def\nowhitespace
+% {\ifdim\parskip>\zeropoint\relax
+% \ifdim\lastskip=-\parskip
+% \else
+% \vskip-\parskip
+% \fi
+% \fi}
+%
+% \def\nowhitespaceunlessskip
+% {\ifdim\lastskip>\zeropoint \else
+% \nowhitespace
+% \fi}
+%
+% \def\whitespace
+% {\par
+% \ifdim\parskip>\zeropoint\relax
+% %\ifdim\lastskip>\parskip \else
+% % \removelastskip interferes with blanko blokkeer en klein
+% \vskip\parskip
+% %\fi
+% \fi}
+
+\def\nowhitespace{\vspacing[\v!nowhite]}
+\def\whitespace {\vspacing[\v!white]}
+
+% obsolete:
+%
+% \def\savedcurrentwhitespace{\currentwhitespace}
+% \def\savecurrentwhitespace {\edef\savedcurrentwhitespace{\currentwhitespace}}
+% \def\restorecurrentwhitespace{\edef\currentwhitespace{\savedcurrentwhitespace}}
+
+% De onderstaande macro handelt ook de situatie dat er geen
+% tekst tussen \start ... \stop is geplaatst. Daartoe wordt de
+% laatste skip over de lege tekst heen gehaald. Dit komt goed
+% van pas bij het plaatsen van (mogelijk lege) lijsten.
+
+\newsignal \noparskipsignal % \def\noparskipsignal {0.00001pt}
+\def\lastdoneparskip {0pt}
+
+\newconditional\noblankinpacked
+\newcount\packeddepth
+
+\unexpanded\def\startpacked
+ {\dosingleempty\dostartpacked}
+
+\def\dostartpacked[#1]% nesting afvangen
+ {\global\advance\packeddepth\plusone
+ \par
+ \ifnum\packeddepth=\plusone \ifvmode
+ \bgroup
+ \whitespace % not combined
+ \blank[\v!disable]%
+ \doifelse{#1}\v!blank\setfalse\settrue\noblankinpacked
+ \setupwhitespace[\v!none]%
+ \fi \fi}
+
+\unexpanded\def\stoppacked
+ {\par
+ \ifnum\packeddepth=\plusone \ifvmode
+ \egroup
+ \fi \fi
+ \global\advance\packeddepth\minusone}
+
+\unexpanded\def\startunpacked
+ {\blank
+ \bgroup}
+
+\unexpanded\def\stopunpacked
+ {\egroup
+ \blank}
+
+% De onderstaande macro's moeten nog eens nader worden uitgewerkt.
+% Ze spelen een rol bij de spatiering rond omkaderde teksten
+% en/of boxen zonder diepte.
+
+% \prevdepth crosses pageboundaries!
+%
+% todo: a version that works ok inside a box
+
+\let\doaroundlinecorrection\relax
+
+\unexpanded\def\startlinecorrection
+ {\dodoubleempty\dostartlinecorrection}
+
+\def\dostartlinecorrection[#1][#2]% #2 gobbles spaces
+ {\bgroup
+ \processaction
+ [#1]
+ [ \v!blank=>\let\doaroundlinecorrection\blank,
+ \s!default=>\let\doaroundlinecorrection\relax,
+ \s!unknown=>{\def\doaroundlinecorrection{\blank[#1]}}]%
+ \doaroundlinecorrection
+ \startbaselinecorrection
+ \offbaselinecorrection
+ \ignorespaces}
+
+\unexpanded\def\stoplinecorrection
+ {\stopbaselinecorrection
+ \doaroundlinecorrection
+ \egroup}
+
+\def\correctwhitespace
+ {\dowithnextbox
+ {\startbaselinecorrection
+ \flushnextbox
+ \stopbaselinecorrection}%
+ \vbox}
+
+\def\verticalstrut {\normalvbox{\hsize\zeropoint\forgetall\strut}}
+\def\horizontalstrut{\normalhbox {\strut}}
+
+% Hieronder volgen enkele instellingen en macro's ten behoeve
+% van de interlinie en \strut. De waarden 2.8, 0.07, 0.72 en
+% 0.28 zijn ooit eens ontleend aan INRS-TEX en moeten wellicht
+% nog eens instelbaar worden.
+%
+% \lineheight : de hoogte van een regel
+% \spacing{getal} : instellen interlinie
+% \normalbaselines : instellen regelafstend
+%
+% \setstrut : instellen \strut
+% \setnostrut : resetten \strut, \endstrut, \begstrut
+%
+% \setteststrut : instellen zichtbare struts
+% \resetteststrut : instellen onzichtbare struts
+%
+% \setfontparameters : instellen na fontset
+%
+% De hoogte van een regel (\lineheight) is gelijk aan de
+% som van de hoogte (\ht) en diepte (\dp) van \strutbox.
+%
+% \strut : denkbeeldig blokje met hoogte en diepte
+%
+% Een \hbox kan als deze aan het begin van een regel staat
+% een breedte \hsize krijgen. Dit is soms te voorkomen met het
+% commando \leavevmode. Binnen een \vbox geeft dit echter
+% niet altijd het gewenste resultaat, vandaar het commando
+%
+% \dontleavehmode
+
+% Pas op: niet zomaar \topskip en \baselineskip aanpassen
+% en zeker niet \widowpenalty. Dit kan ernstige gevolgen
+% hebben voor kolommen.
+%
+% Enige glue kan op zich geen kwaad, echter als blanko=vast,
+% dan moet ook de rek 0 zijn. Binnen kolommen is rek ook
+% niet bepaald mooi. Een hele kleine waarde (0.025) voldoet,
+% omdat een positieve glue eindeloos rekbaar is.
+
+\newdimen\strutdimen
+\newdimen\lineheight
+\newdimen\openlineheight
+\newdimen\openstrutheight
+\newdimen\openstrutdepth
+\newdimen\topskipgap
+\newdimen\struttotal
+
+\def\strutheightfactor {.72}
+\def\strutdepthfactor {.28}
+
+\def\baselinefactor {2.8}
+\def\baselinegluefactor {0}
+
+\def\minimumstrutheight {0pt}
+\def\minimumstrutdepth {0pt}
+
+\def\normallineheight {\baselinefactor ex}
+\def\minimumlinedistance {\lineskip}
+
+\def\strutheight {0pt}
+\def\strutdepth {0pt}
+\def\strutwidth {0pt}
+
+\let\spacingfactor \plusone
+
+\def\topskipfactor {1.0}
+\def\maxdepthfactor {0.5}
+
+\def\systemtopskipfactor {\topskipfactor}
+\def\systemmaxdepthfactor {\maxdepthfactor}
+
+\ifdefined\globalbodyfontsize\else
+ \newdimen\globalbodyfontsize
+ \globalbodyfontsize=12pt
+\fi
+
+\ifdefined\normalizedbodyfontsize\else
+ \def\normalizedbodyfontsize{12pt}
+\fi
+
+% door een \dimen. Dit is geen probleem omdat (1) de default
+% korpsgrootte 12pt is en (2) de fonts nog niet geladen zijn
+% en de instellingen bij het laden nogmaals plaatsvinden.
+
+\def\topskipcorrection
+ {\simpletopskipcorrection
+ \vskip-\struttotal
+ \verticalstrut}
+
+\def\simpletopskipcorrection
+ {\ifdim\topskip>\openstrutheight
+ % == \vskip\topskipgap
+ \vskip\topskip
+ \vskip-\openstrutheight
+ \fi}
+
+\def\settopskip % the extra test is needed for the lbr family
+ {\topskip\systemtopskipfactor\globalbodyfontsize
+ \ifgridsnapping \else
+ \ifr@ggedbottom\!!plus5\globalbodyfontsize\fi
+ \fi
+\ifgridsnapping
+ \topskip\zeropoint
+\fi
+ \relax % the skip
+ \topskipgap\topskip
+ \advance\topskipgap -\openstrutheight\relax
+ \ifdim\minimumstrutheight>\zeropoint
+ \ifdim\topskip<\minimumstrutheight
+ \topskip\minimumstrutheight\relax
+ \fi
+ \else
+ \ifdim\topskip<\strutheightfactor\openlineheight
+ \topskip\strutheightfactor\openlineheight\relax
+ \fi
+ \fi}
+
+\def\setmaxdepth
+ {\maxdepth\systemmaxdepthfactor\globalbodyfontsize}
+
+\def\normalbaselines
+ {\baselineskip \normalbaselineskip
+ \lineskip \normallineskip
+ \lineskiplimit\normallineskiplimit}
+
+\def\setnormalbaselines
+ {\ifdim\normallineheight>\zeropoint
+ \lineheight\normallineheight
+ \fi
+ \openlineheight\spacingfactor\lineheight
+ \openstrutheight \ifdim\minimumstrutheight>\zeropoint
+ \minimumstrutheight % new
+ \else
+ \strutheightfactor\openlineheight
+ \fi
+ \openstrutdepth \ifdim\minimumstrutdepth>\zeropoint
+ \minimumstrutdepth % new
+ \else
+ \strutdepthfactor \openlineheight
+ \fi
+ \ifdim\dimexpr\minimumstrutdepth+\minimumstrutheight\relax>\zeropoint
+ \openlineheight\dimexpr\openstrutheight+\openstrutdepth\relax % new
+ \fi
+ \normalbaselineskip\openlineheight
+ \ifgridsnapping\else
+ \!!plus \baselinegluefactor\openlineheight
+ \!!minus\baselinegluefactor\openlineheight
+ \fi
+ \normallineskip\minimumlinedistance\relax % \onepoint\relax
+ \normallineskiplimit\zeropoint\relax
+ \normalbaselines
+ %\dosetupgridsnapping
+ }
+
+\def\spacing#1%
+ {\ifgridsnapping
+ %\ifdim#1\points=\onepoint\else\showmessage\m!layouts{11}{\withoutpt\the\dimexpr#1\points\relax}\fi
+ \let\spacingfactor\plusone
+ \else
+ \edef\spacingfactor{#1}%
+ \fi
+ \edef\systemtopskipfactor {\withoutpt\the\dimexpr#1\dimexpr\topskipfactor \points}%
+ \edef\systemmaxdepthfactor{\withoutpt\the\dimexpr#1\dimexpr\maxdepthfactor\points}%
+ \setnormalbaselines
+ \setstrut}
+
+%D Sometimes one needs to freeze the interlinespacing
+%D
+%D \starttyping
+%D \rm \saveinterlinespace .... {\ss \restoreinterlinespace .... \endgraf}
+%D \stoptyping
+
+\let\restoreinterlinespace\relax
+
+\def\saveinterlinespace
+ {\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\dimexpr\normallineheight}%
+ \noexpand\normalbaselines}}
+
+% plain definition:
+%
+% \def\strut{\relax\ifmmode\copy\strutbox\else\unhcopy\strutbox\fi}
+%
+% could be:
+%
+% \def\strut{\relax\ifmmode\copy\else\unhcopy\fi\strutbox}
+
+\ifx\strutbox\undefined
+
+ \newbox\strutbox
+
+ \setbox\strutbox\normalhbox{\vrule height8.5pt depth3.5pt width\zeropoint}
+
+ \def\strut{\relax\ifmmode\copy\else\unhcopy\fi\strutbox}
+
+\fi
+
+\let\normalstrut\strut
+
+% The double \hbox construction enables us to \backtrack
+% boxes.
+
+\let\strutht\undefined \newdimen\strutht
+\let\strutdp\undefined \newdimen\strutdp
+
+\unexpanded\def\setstrut
+ {\ifgridsnapping
+ \setstrutgridyes
+ \else
+ \setstrutgridnop
+ \fi}
+
+\unexpanded\def\setstrutgridyes
+ {\strutht\spacingfactor\dimexpr
+ \ifdim\minimumstrutheight>\zeropoint
+ \minimumstrutheight
+ \else
+ \strutheightfactor\dimexpr\normallineheight
+ \fi
+ \strutdp\dimexpr
+ \ifdim\minimumstrutdepth>\zeropoint
+ \minimumstrutdepth
+ \else
+ \normallineheight-\strutht
+ \fi
+ \dosetstrut}
+
+\unexpanded\def\setstrutgridnop
+ {\strutht\spacingfactor\dimexpr
+ \ifdim\minimumstrutheight>\zeropoint
+ \minimumstrutheight
+ \else
+ \strutheightfactor\dimexpr\normallineheight
+ \fi
+ \strutdp\spacingfactor\dimexpr
+ \ifdim\minimumstrutdepth>\zeropoint
+ \minimumstrutdepth
+ \else
+ \strutdepthfactor\dimexpr\normallineheight
+ \fi
+ \dosetstrut}
+
+\unexpanded\def\setcharstrut#1%
+ {\setbox\strutbox\normalhbox{#1}%
+ \strutht\ht\strutbox
+ \strutdp\dp\strutbox
+ \dosetstrut}
+
+\unexpanded\def\setfontstrut
+ {\setcharstrut{(gplQT}}
+
+\unexpanded\def\setcapstrut% could be M, but Q has descender
+ {\setcharstrut{Q}}
+
+%D Handy for math (used in mathml):
+
+\def\charhtstrut
+ {\begingroup
+ \setcharstrut{GJY}%
+ \vrule\!!width\zeropoint\!!depth\zeropoint\!!height\strutht
+ \endgroup}
+
+\def\chardpstrut
+ {\begingroup
+ \setcharstrut{gjy}%
+ \vrule\!!width\zeropoint\!!depth\strutdp\!!height\zeropoint
+ \endgroup}
+
+% 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
+
+\newdimen\tempstrutdimen
+
+\def\dosetstrut
+ {\let\strut\normalstrut
+ \tempstrutdimen\dimexpr\strutht+\strutdp-\lineheight\relax
+ \ifabsnum\tempstrutdimen<\plustwo
+ % compensate rounding error /- 1sp to avoid too many
+ % 1sp baselineskips in for instance verbatim
+ \strutht\dimexpr\strutht-\tempstrutdimen\relax
+ \fi
+ \edef\strutheight{\the\strutht}% maybe better \number\strutht sp
+ \edef\strutdepth {\the\strutdp}%
+ \ifdim\strutwidth=\zeropoint
+ \dosetstruthide
+ \else
+ \dosetstrutvide
+ \fi
+ \struttotal\dimexpr\strutht+\strutdp\relax}
+
+\def\dosetstruthide
+ {\setbox\strutbox\normalhbox
+ {\vrule
+ \!!width \zeropoint
+ \!!height\strutht
+ \!!depth \strutdp}}
+
+\def\dosetstrutvide
+ {\setbox\strutbox\normalhbox
+ {\normalhbox to \zeropoint
+ {% \hss % new, will be option
+ \vrule
+ \!!width \strutwidth
+ \!!height\strutht
+ \!!depth \strutdp
+ \hss}}}
+
+%D The dimen \type {\struttotal} holds the exact size of the
+%D strut; occasionally a one scaled point difference can show
+%D up with the lineheight.
+
+% experiment
+
+\newbox\emptystrutbox \setbox\emptystrutbox\hbox{}
+
+\def\dosetstruthide
+ {\setbox\strutbox\copy\emptystrutbox
+ \ht\strutbox\strutht
+ \dp\strutbox\strutdp}
+
+\def\strut{\relax\dontleavehmode\copy\strutbox} % still callbacks for \hbox{\strut}
+
+
+\let\normalstrut\strut
+
+%D Sometimes a capstrut comes in handy
+%D
+%D \starttabulate[|Tl|l|l|]
+%D \NC yes \NC normal strut \NC {\showstruts\setupstrut[yes]\strut} \NC \NR
+%D \NC no \NC no strut \NC {\showstruts\setupstrut[no]\strut} \NC \NR
+%D \NC kap \NC a capital strut (i.e. Q) \NC {\showstruts\setupstrut[cap]\strut} \NC \NR
+%D \NC A B \unknown \NC a character strut (e.g. A) \NC {\showstruts\setupstrut[A]\strut} \NC \NR
+%D \NC \NC a normal strut \NC {\showstruts\setupstrut\strut} \NC \NR
+%D \stoptabulate
+
+\unexpanded\def\setupstrut
+ {\dosingleempty\dosetupstrut}
+
+\def\dosetupstrut[#1]% yet undocumented, todo: fontstrut
+ {\processaction
+ [#1]
+ [ \v!yes=>\setstrut,
+ \v!auto=>\setautostrut,
+ \v!no=>\setnostrut,
+ \v!cap=>\setcapstrut,
+ \v!fit=>\setfontstrut,
+ \v!line=>\setstrut,
+ \s!default=>\setstrut,
+ \s!unknown=>\setcharstrut\commalistelement]}
+
+\def\showstruts
+ {\setteststrut
+ \settestcrlf}
+
+\def\setteststrut
+ {\def\strutwidth{.8pt}%
+ \setstrut}
+
+\def\autostrutfactor{1.1}
+
+\def\setautostrut
+ {\begingroup
+ \setbox\scratchbox\copy\strutbox
+ \setstrut
+ \ifdim\strutht>\autostrutfactor\ht\scratchbox
+ \endgroup \setstrut
+ \else\ifdim\strutdp>\autostrutfactor\dp\scratchbox
+ \endgroup \setstrut
+ \else
+ \endgroup
+ \fi\fi}
+
+% when enabled, sigstruts will remove themselves if nothing
+% goes inbetween
+
+\newsignal\strutsignal \setfalse\sigstruts
+
+\def\begstrut
+ {\relax\ifcase\strutht\else
+ \ifconditional\sigstruts
+ \noindent\horizontalstrut
+ \normalpenalty\plustenthousand
+ \normalhskip-\strutsignal
+ \normalhskip\strutsignal
+ \else
+ \strut
+ \normalpenalty\plustenthousand
+ \normalhskip\zeropoint
+ \fi
+ \expandafter \ignorespaces
+ \fi}
+
+\def\endstrut
+ {\relax\ifhmode\ifcase\strutht\else
+ \ifconditional\sigstruts
+ \ifdim\lastskip=\strutsignal
+ \unskip\unskip\unpenalty\setbox\scratchbox\lastbox
+ \else
+ \normalpenalty\plustenthousand
+ \normalhskip\zeropoint
+ \strut
+ \fi
+ \else
+ \removeunwantedspaces
+ \normalpenalty\plustenthousand
+ \normalhskip\zeropoint
+ \strut
+ \fi
+ \fi\fi}
+
+\newbox\nostrutbox \setbox\nostrutbox\normalhbox{} % {\normalhbox{}}
+
+\def\setnostrut
+ {\setbox\strutbox\copy\nostrutbox
+ \let\strut\empty
+ \let\endstrut\empty
+ \let\begstrut\empty
+ \let\crlfplaceholder\empty}
+
+% unsave:
+%
+% \def\pseudostrut
+% {\bgroup
+% \setnostrut
+% \normalstrut
+% \egroup}
+%
+% try:
+%
+% \startchemie
+% \chemie[ONE,Z0,SB15,MOV1,SB15,Z0][C,C]
+% \stopchemie
+%
+% so:
+
+\def\pseudostrut
+ {\noindent} % better: \dontleavehmode
+
+\let\pseudobegstrut\pseudostrut
+
+\let\pseudoendstrut\removeunwantedspaces
+
+\def\resetteststrut
+ {\def\strutwidth{\zeropoint}% no let
+ \setstrut}
+
+\ifdefined\setfontparameters\else
+ % problems ! ! ! !
+ \def\setfontparameters{\the\everybodyfont}
+\fi
+
+%D Handy:
+
+\def\baselinedistance{\the\lineheight}
+
+%D We need \type{\normaloffinterlineskip} because the new
+%D definition contains an assignment, and |<|don't ask me
+%D why|>| this assignment gives troubles in for instance the
+%D visual debugger.
+
+%D The plain ones:
+
+% \def\offinterlineskip
+% {\baselineskip-\thousandpoint
+% \lineskip\zeropoint
+% \lineskiplimit\maxdimen}
+
+\def\offinterlineskip
+ {\baselineskip-\thousandpoint
+ \lineskip\zeropoint
+ \lineskiplimit\maxdimen
+ % We also need this here now; thanks to taco for figuring that out!
+ \def\minimumlinedistance{\zeropoint}}
+
+\def\nointerlineskip
+ {\prevdepth-\thousandpoint}
+
+\let\normaloffinterlineskip=\offinterlineskip % knuth's original
+
+%D My own one:
+
+\def\dopushinterlineskip
+ {\edef\oninterlineskip
+ {\baselineskip\the\baselineskip
+ \lineskip\the\lineskip
+ \lineskiplimit\the\lineskiplimit
+ \noexpand\edef\noexpand\minimumlinedistance{\the\dimexpr\minimumlinedistance}%
+ \let\noexpand\offinterlineskip\noexpand\normaloffinterlineskip}}
+
+\def\nopushinterlineskip
+ {\let\oninterlineskip\setnormalbaselines}
+
+\def\offinterlineskip
+ {\ifdim\baselineskip>\zeropoint
+ \dopushinterlineskip
+ \else
+ \nopushinterlineskip
+ \fi
+ \normaloffinterlineskip}
+
+\let\oninterlineskip=\relax
+
+\def\leaveoutervmode
+ {\ifvmode\ifinner\else
+ \leavevmode
+ \fi\fi}
+
+% We stellen enkele penalties anders in dan Plain TEX:
+%
+% \widowpenalty=\defaultwidowpenalty\relax
+% \clubpenalty =\defaultclubpenalty \relax
+
+\def\resetpenalties#1%
+ {\ifdefined#1%
+ #1\minusone
+ \fi}
+
+\def\setpenalties#1#2#3%
+ {\ifdefined#1% 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\relax}{#2}\fi}
+
+%D \macros
+%D {keeplinestogether}
+%D
+%D Dirty hack, needed in margin content that can run of a page.
+
+% just before margintexts ... will eventually be done differently in mkiv using
+% attributes
+
+\newcount\nofkeeplinestogether
+\let\restoreinterlinepenalty\relax
+
+\def\dorestoreinterlinepenalty
+ {\global\let\restoreinterlinepenalty\relax
+ \global\resetpenalties\interlinepenalties
+ \global\nofkeeplinestogether\zerocount}
+
+\def\keeplinestogether#1%
+ {\ifnum#1>\nofkeeplinestogether
+ \global\nofkeeplinestogether#1%
+ \global\setpenalties\interlinepenalties\nofkeeplinestogether\plustenthousand
+ \global\let\restoreinterlinepenalty\dorestoreinterlinepenalty
+ \fi}
+
+\newif\ifgridsnapping % to be sure
+
+\def\defaultwidowpenalty {2000} % was: 1000
+\def\defaultclubpenalty {2000} % was: 800
+\def\defaultdisplaywidowpenalty {50}
+\def\defaultbrokenpenalty {100}
+
+\def\defaultgridwidowpenalty {0}
+\def\defaultgridclubpenalty {0}
+\def\defaultgriddisplaywidowpenalty {0}
+\def\defaultgridbrokenpenalty {0}
+
+\def\nopenalties
+ {\widowpenalty \zerocount
+ \clubpenalty \zerocount
+ \brokenpenalty \zerocount
+ \doublehyphendemerits\zerocount
+ \finalhyphendemerits \zerocount
+ \adjdemerits \zerocount}
+
+\def\setdefaultpenalties
+ {\directsetup{\systemsetupsprefix\s!default}}
+
+\startsetups [\systemsetupsprefix\s!reset]
+ \resetpenalties\widowpenalties
+ \resetpenalties\clubpenalties
+ \resetpenalties\interlinepenalties
+\stopsetups
+
+% we use \directsetup because it's faster and we know there is no csl
+
+\startsetups [\systemsetupsprefix\s!default]
+
+ \directsetup{\systemsetupsprefix\s!reset}
+
+ \widowpenalty \defaultwidowpenalty
+ \clubpenalty \defaultclubpenalty
+ \displaywidowpenalty\defaultdisplaywidowpenalty
+ \brokenpenalty \defaultbrokenpenalty
+
+\stopsetups
+
+\startsetups [\v!grid] [\systemsetupsprefix\s!default]
+
+ \directsetup{\systemsetupsprefix\s!reset}
+
+ \widowpenalty \defaultgridwidowpenalty
+ \clubpenalty \defaultgridclubpenalty
+ \displaywidowpenalty\defaultgriddisplaywidowpenalty
+ \brokenpenalty \defaultgridbrokenpenalty
+
+\stopsetups
+
+% as an illustration:
+
+\startsetups [\systemsetupsprefix\v!strict]
+
+ \directsetup{\systemsetupsprefix\s!reset}
+
+ \setpenalties\widowpenalties2\maxdimen
+ \setpenalties\clubpenalties 2\maxdimen
+ \brokenpenalty \maxdimen
+
+\stopsetups
+
+\setdefaultpenalties % will happen later in \setuplayout
+
+%D To be checked:
+
+\ifx\savedstrutbox\undefined \newbox\savedstrutbox \fi
+
+\def\savestrut {\setbox\savedstrutbox\copy\strutbox}
+\def\savedstrut{\copy \savedstrutbox}
+
+%D Page spacing
+
+\chardef\bottomraggedness=0 % 0=ragged 1=normal/align 2=baseline
+
+\def\bottomalignlimit{3\lineheight}
+
+\newif\ifn@rmalbottom
+\newif\ifr@ggedbottom
+\newif\ifb@selinebottom
+
+\def\normalbottom
+ {% \topskip 10pt
+ \r@ggedbottomfalse}
+
+\def\raggedbottom
+ {\chardef\bottomraggedness\zerocount
+ \n@rmalbottomfalse
+ \r@ggedbottomtrue
+ \b@selinebottomfalse
+ \settopskip}
+
+\def\alignbottom
+ {\chardef\bottomraggedness\plusone
+ \n@rmalbottomtrue
+ \r@ggedbottomfalse
+ \b@selinebottomfalse
+ \settopskip}
+
+\def\baselinebottom
+ {\chardef\bottomraggedness\plustwo
+ \n@rmalbottomfalse
+ \r@ggedbottomfalse
+ \b@selinebottomtrue
+ \settopskip}
+
+\let\normalbottom=\alignbottom % downward compatible
+
+% so, the new one will be
+%
+% \chardef\bottomraggedness=0 % 0=ragged 1=normal/align 2=baseline
+%
+% \def\bottomalignlimit{3\lineheight} % will be settable
+%
+% \def\raggedbottom {\chardef\bottomraggedness=0 \settopskip}
+% \def\alignbottom {\chardef\bottomraggedness=1 \settopskip}
+% \def\baselinebottom{\chardef\bottomraggedness=2 \settopskip}
+%
+% \let\normalbottom =\alignbottom
+
+%D Good old blank redone:
+
+\definesystemattribute[kern-chars]
+\definesystemattribute[skip-category] \chardef\skipcategoryattribute \dogetattributeid{skip-category}
+\definesystemattribute[skip-penalty] \chardef\skippenaltyattribute \dogetattributeid{skip-penalty}
+\definesystemattribute[skip-order] \chardef\skiporderattribute \dogetattributeid{skip-order}
+\definesystemattribute[display-math] \chardef\displaymathattribute \dogetattributeid{display-math}
+\definesystemattribute[snap-method] \chardef\snapmethodattribute \dogetattributeid{snap-method}
+\definesystemattribute[snap-done] \chardef\snapdoneattribute \dogetattributeid{snap-done}
+
+%definesystemattribute[snap-category] \chardef\snapcategoryattribute \dogetattributeid{snap-category}
+
+% TODO: NAMED SNAPPERS
+
+\newskip \bodyfontlineheight
+\newdimen \bodyfontstrutheight
+\newdimen \bodyfontstrutdepth
+
+\newskip \globalbodyfontlineheight
+\newdimen \globalbodyfontstrutheight
+\newdimen \globalbodyfontstrutdepth
+
+% \appendtoks
+% \dosetupgridsnapping
+% \to \everysetupbodyfont
+
+\def\installsnapvalues#1#2% todo: a proper define
+ {\edef\currentsnapper{#1:#2}%
+ \ifcsname\currentsnapper\endcsname \else
+ \setevalue\currentsnapper{\ctxlua{vspacing.define_snap_method("#1","#2")}}%
+ \fi
+ \setevalue{\??gr:#1}{\attribute\snapmethodattribute\csname\currentsnapper\endcsname\space}}
+
+\unexpanded\def\definegridsnapping
+ {\dodoubleargument\dodefinegridsnapping}
+
+\def\dodefinegridsnapping[#1][#2]%
+ {\installsnapvalues{#1}{#2}}
+
+\edef\resetsnapvalue
+ {%\gridsnappingfalse
+ \attribute\snapmethodattribute\attributeunsetvalue}
+
+\def\setsnapvalue#1%
+ {%\gridsnappingtrue
+ \ifcsname\??gr:#1\endcsname\csname\??gr:#1\endcsname\fi}
+
+\def\autosetsnapvalue#1%
+ {\ifcsname\??gr:#1\endcsname
+ \csname\??gr:#1\endcsname
+ \else
+ \installsnapvalues\s!dummy{#1}%
+ \csname\??gr:\s!dummy\endcsname
+ \fi}
+
+% \installsnapvalues{loose} {\v!maxdepth:0.8,\v!maxheight:0.8,\v!strut}
+% \installsnapvalues{normal}{\v!maxdepth:1.0,\v!maxheight:1.0,\v!strut}
+% \installsnapvalues{tight} {\v!maxdepth:1.2,\v!maxheight:1.2,\v!strut}
+
+% none don't enlarge
+% halfline enlarge by halfline/halfline
+% line enlarge by line/line
+% strut enlarge by ht/dp (default)
+% first align to top line
+% last align to bottom line
+% mindepth round depth down
+% maxdepth round depth up
+% minheight round height down
+% maxheight round height up
+% local use local interline space
+% shift:-3tp vertical shift within box
+
+%D We're not downward compatible with \MKII !
+
+\definegridsnapping[\v!normal] [\v!maxheight,\v!maxdepth,\v!strut]
+\definegridsnapping[\v!standard] [\v!maxheight,\v!maxdepth,\v!strut]
+\definegridsnapping[\v!yes] [\v!maxheight,\v!maxdepth,\v!strut]
+
+\definegridsnapping[\v!strict] [\v!maxdepth:0.8,\v!maxheight:0.8,\v!strut]
+\definegridsnapping[\v!tolerant] [\v!maxdepth:1.2,\v!maxheight:1.2,\v!strut]
+
+\definegridsnapping[\v!top] [\v!minheight,\v!maxdepth,\v!strut]
+\definegridsnapping[\v!bottom] [\v!maxheight,\v!mindepth,\v!strut]
+\definegridsnapping[\v!both] [\v!minheight,\v!mindepth,\v!strut]
+
+\definegridsnapping[\v!broad] [\v!maxheight,\v!maxdepth,\v!strut,0.8] % maybe 0.85
+\definegridsnapping[\v!fit] [\v!maxheight,\v!maxdepth,\v!strut,1.2] % tight 0.15
+
+\definegridsnapping[\v!first] [\v!first]
+\definegridsnapping[\v!last] [\v!last]
+\definegridsnapping[\v!high] [\v!minheight,\v!maxdepth,\v!none]
+\definegridsnapping[\v!low] [\v!maxheight,\v!mindepth,\v!none]
+\definegridsnapping[\v!line] [\v!line]
+\definegridsnapping[\v!strut] [\v!strut]
+
+\definegridsnapping[\v!max] [\v!maxdepth,\v!maxheight,\v!strut]
+\definegridsnapping[\v!min] [\v!mindepth,\v!minheight,\v!strut]
+
+\newtoks\everysetupgridsnapping % this only happens at the setuplayout level
+
+\def\dosetupgridsnapping{\the\everysetupgridsnapping} % not used !
+
+\def\synchronizelocallinespecs
+ {\bodyfontlineheight \normallineheight
+ \bodyfontstrutheight\strutheight
+ \bodyfontstrutdepth \strutdepth}
+
+\def\synchronizegloballinespecs
+ {\global\globalbodyfontlineheight \normallineheight
+ \global\globalbodyfontstrutheight\strutheight
+ \global\globalbodyfontstrutdepth \strutdepth}
+
+% \appendtoks
+% \synchronizegloballinespecs
+% \synchronizelocallinespecs
+% \to \everysetupgridsnapping
+
+\appendtoks
+ \synchronizegloballinespecs
+ \synchronizelocallinespecs
+\to \everysetupglobalinterlinespace
+
+\appendtoks
+ \synchronizelocallinespecs
+\to \everysetuplocalinterlinespace
+
+% \appendtoks
+% \resetsnapvalues
+% \to \everyforgetall
+
+%D Snapping.
+
+\newif\ifgridsnapping
+
+\let\showgridsnapping\relax
+
+\def\snaptogrid {\dosingleempty\dosnaptogrid}
+\def\moveongrid {\dosingleempty\domoveongrid}
+\unexpanded\def\placeongrid{\dosingleempty\doplaceongrid}
+
+\def\dodomoveongrid[#1]%
+ {} % gone, unless we set an attribute
+
+\def\doplaceongrid[#1]%
+ {\snaptogrid[#1]\vbox}
+
+\def\dosnaptogrid[#1]% list or predefined
+ {\ifgridsnapping
+ \expandafter\dodosnaptogrid
+ \else
+ \expandafter\gobbleoneargument
+ \fi{#1}}
+
+\def\dodosnaptogrid#1%
+ {\bgroup
+ \resetsnapvalue
+ \dowithnextbox{\dododosnaptogrid{#1}}}
+
+% eventually there will always be a line snap
+
+\def\dododosnaptogrid#1%
+ {\ifvbox\nextbox
+ \ctxlua{nodes.collapse_vbox(\number\nextbox)}%
+ \fi
+ \doifelsenothing{#1}{\setsnapvalue\v!normal}{\autosetsnapvalue{#1}}%
+ \ctxlua{vspacing.snap_box(\number\nextbox,\number\attribute\snapmethodattribute)}%
+% \ifzeropt\ht\nextbox
+% \ifzeropt\dp\nextbox
+% \box\nextbox % here, else empty and zero
+% \kern-\bodyfontlineheight
+% \else
+% \box\nextbox
+% \fi
+% \else
+ \box\nextbox
+% \fi
+ \egroup}
+
+\def\docheckgridsnapping
+ {\edef\askedgridmode{\layoutparameter\c!grid}% needs checking by WS
+ \doifelse\askedgridmode\v!no
+ {\gridsnappingfalse
+ \resetsystemmode\v!grid
+ \resetsnapvalue}
+ {\gridsnappingtrue
+ \setsystemmode\v!grid
+ \autosetsnapvalue\askedgridmode}}
+
+%D Visualization:
+
+\definepalet
+ [grid]
+ [ one=red,
+ two=green,
+ three=blue,
+ four=gray]
+
+\def\setgridtracebox#1[#2]% % maybe reverse the order
+ {\setbox\nextbox#1%
+ {\hbox
+ {\hbox to \zeropoint
+ {\setlayoutcomponentattribute\v!grid\v!test
+ \color[grid:#2]{\ruledhbox \layoutcomponentboxattribute {\fakebox\nextbox}}%
+ \hss}%
+ \flushnextbox}}}
+
+\chardef\gridboxlinenomode\plusone % 0:nothing 1:all 2:lines 3:frame 4:l/r
+\chardef\gridboxlinemode \plusone
+
+\def\gridboxvbox {\ifcase\gridboxlinemode\vbox\or\ruledvbox\or\vbox\or\ruledvbox\else\ruledvbox\fi}
+\def\gridboxwidth{\ifcase\gridboxlinemode0\or.5\or.5\or0\else.5\fi\testrulewidth}
+
+\def\setgridbox#1#2#3% maybe ifgridsnapping at outer level
+ {\setbox#1\gridboxvbox to #3 % given size
+ {\forgetall
+ \resetteststrut
+ \offinterlineskip
+ \hsize#2%
+ \baselinerulefalse
+ \ifnum\gridboxlinenomode=\plusthree
+ \chardef\gridboxlinenomode\ifodd\realpageno\plusone\else\plustwo\fi
+ \fi
+ \gridboxvbox % calculated size
+ {\getrawnoflines{#3}% \getnoflines{#3}%
+% \ifgridsnapping \else
+% \vskip\topskip
+% \vskip-\strutht
+% \fi
+ \scratchdimen#2\advance\scratchdimen \lineheight
+ \dorecurse\noflines
+ {\strut
+ \hskip-.5\lineheight
+ \ifcase\gridboxlinenomode\or
+ \rlap
+ {\hskip.2\bodyfontsize\hskip\scratchdimen
+ \infofont\hbox to 1em{\hss\recurselevel}}%
+ \or
+ \llap
+ {\infofont\hbox to 1em{\hss\recurselevel}%
+ \hskip.2\bodyfontsize}%
+ \fi
+ \vrule
+ \!!height \gridboxwidth
+ \!!depth \gridboxwidth
+ \!!width \scratchdimen
+ \par}}
+ \vfill}}
+
+%D This has become obsolete:
+
+\def\fuzzysnappedbox#1#2% \box<n> \unvbox<n>
+ {#1#2}
+
+% \def\moveboxontogrid#1#2#3% will become obsolete
+% {\doif{#2}\v!top {\setbox#1\hbox{\snaptogrid[\v!first]\box#1}}%
+% \doif{#2}\v!bottom{\setbox#1\hbox{\snaptogrid[\v!last ]\box#1}}}
+
+\def\moveboxontogrid#1#2#3% will become obsolete
+ {}
+
+%D Helper:
+
+\def\doassignsomeskip#1\to#2% ook nog \v!halfline+fuzzysnap
+ {\doifelse{#1}\v!line
+ {#2\ifgridsnapping
+ \bodyfontlineheight
+ \else
+ \openlineheight
+ \fi}
+ {\ifgridsnapping
+ \assigndimension{#1}{#2}{.25\bodyfontlineheight}{.5\bodyfontlineheight}\bodyfontlineheight
+ \else
+ \assigndimension{#1}{#2}\smallskipamount\medskipamount\bigskipamount
+ \fi}%
+ \relax}
+
+% \start \dosetstretch{.25em} \setuptolerance[tolerant,stretch] \input tufte \endgraf \stop
+% \start \dosetstretch{.5em} effe flink doorfietsen \stop
+
+% \def\dosetupgridsnapping % calls too often, only needed in gridsnapping
+% {\ctxlua{nodes.setsnapvalue(1,\number\openstrutheight,\number\openstrutdepth)}}
+%
+% \def\doenablegridsnapping
+% {\attribute\snapcategoryattribute\plusone
+% \topskip\strutht
+% \offinterlineskip}
+%
+% \def\dodisablegridsnapping
+% {\attribute\snapcategoryattribute\attributeunsetvalue
+% % reset topskip
+% \oninterlineskip}
+
+% 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 back
+%
+% penalty: larger wins
+% order: larger wins
+% category:2,order:5,penalty:10000,skip:value|kw
+%
+% \defineblankmethod [\v!joinedup] {\ifvmode\nointerlineskip\fi}
+
+% todo, in grid mode: vspacing.fixed = false
+
+\let\saveouterspacing \relax % for old times sake
+\let\restoreouterspacing\relax % for old times sake
+
+\newtoks\everybeforeblankhandling
+\newtoks\everyafterblankhandling
+
+\newconditional\someblankdone
+
+\appendtoks
+ \blankskip\zeropoint
+ \attribute\skipcategoryattribute\plusone
+ \attribute\skippenaltyattribute \attributeunsetvalue
+ \attribute\skiporderattribute \attributeunsetvalue
+ \ifgridsnapping % \ifblankflexible
+ \setfalse\blankisfixed
+ \else
+ \settrue\blankisfixed
+ \fi
+\to \everybeforeblankhandling
+
+\appendtoks
+ \ifconditional\blankisfixed
+ \blankskip1\blankskip
+ \else
+ \blankskip1\blankskip\!!plus\skipgluefactor\blankskip\!!minus\skipgluefactor\blankskip
+ \fi
+\to \everyafterblankhandling
+
+% \ifgridsnapping will go
+
+\appendtoks
+ \ifgridsnapping
+ \settrue\blankisfixed
+ \else
+ \setfalse\blankisfixed
+ \fi
+\to \everybeforeblankhandling
+
+\def\setblankcategory#1%
+ {\settrue\someblankdone
+ \attribute\skipcategoryattribute#1\relax}
+
+\def\setblankorder#1%
+ {\attribute\skiporderattribute#1\relax}
+
+\def\fixedblankskip
+ {\settrue\blankisfixed}
+
+\def\flexibleblankskip
+ {\setfalse\blankisfixed}
+
+\def\addblankskip#1#2#3%
+ {\settrue\someblankdone
+ \advance\blankskip#1\dimexpr\ifgridsnapping#3\else#2\fi\relax\relax}
+
+\def\setblankpenalty #1%
+ {\flushblankhandling
+ \settrue\someblankdone
+ \attribute\skipcategoryattribute \plusthree
+ \attribute\skippenaltyattribute #1\relax
+ \flushblankhandling}
+
+\unexpanded\def\startblankhandling
+ {\par
+ \ifvmode
+ \expandafter\dostartblankhandling
+ \else
+ \expandafter\nostartblankhandling
+ \fi}
+
+\def\nostartblankhandling#1\stopblankhandling
+ {}
+
+\def\dostartblankhandling
+ {\begingroup
+ \setfalse\someblankdone
+ \the\everybeforeblankhandling}
+
+\unexpanded\def\stopblankhandling
+ {\the\everyafterblankhandling
+ \ifconditional\someblankdone
+ \vskip\blankskip
+ \fi
+ \endgroup}
+
+\def\flushblankhandling
+ {\the\everyafterblankhandling
+ \ifconditional\someblankdone
+ \vskip\blankskip
+ \fi
+ \setfalse\someblankdone
+ \the\everybeforeblankhandling}
+
+% % % % we can move much to lua once we can expand there % % % %
+
+\unexpanded\def\definevspacingamount
+ {\dotripleempty\dodefinevspacingamount}
+
+% \def\dodefinevspacingamount[#1][#2][#3]%
+% {\ctxlua{vspacing.setskip("#1",\!!bs\detokenize{#2}\!!es,\!!bs\detokenize{#3}\!!es)}}
+
+\def\dodefinevspacingamount[#1][#2][#3]% can be combined
+ {\setvalue{\??vs:#1}{\ifgridsnapping#3\else#2\fi}%
+ \ctxlua{vspacing.setskip("#1")}}
+
+\def\addpredefinedblankskip#1#2%
+ {\settrue\someblankdone
+ \advance\blankskip#1\dimexpr\csname\??vs:#2\endcsname\relax}
+
+\def\addaskedblankskip#1#2%
+ {\settrue\someblankdone
+ \advance\blankskip#1\dimexpr#2\relax}
+
+\unexpanded\def\definevspacing
+ {\dodoubleempty\dodefinevspacing}
+
+\def\dodefinevspacing[#1][#2]%
+ {\ctxlua{vspacing.setmap("#1","#2")}}
+
+\unexpanded\def\vspacing
+ {\dosingleempty\dovspacing}
+
+% todo: when packed blocks blank, we need to enable forced
+
+\def\dovspacing % blank also has a \flushnotes
+ {\ifinpagebody
+ \expandafter\dovspacingyes
+ \else\ifconditional\noblankinpacked % todo: better reset this conditional in pagebody
+ \expandafter\expandafter\expandafter\dovspacingnop
+ \else
+ \expandafter\expandafter\expandafter\dovspacingyes
+ \fi\fi}
+
+\def\dovspacingyes[#1]%
+ {\ifmmode\else\ctxlua{vspacing.analyse("\iffirstargument#1\else\s!default\fi")}\fi}
+
+\def\dovspacingnop[#1]%
+ {\ifmmode\else\par\fi}
+
+% todo: check them and make them faster:
+
+\definecomplexorsimple\setupvspacing
+
+\let\currentvspacing\empty
+
+\def\complexsetupvspacing[#1]%
+ {\edef\currentvspacing{#1}}
+
+\def\simplesetupvspacing
+ {\ifx\empty\currentvspacing\else
+ \let\currentvspacing\s!default
+ \fi
+ \simplesetupwhitespace}
+
+\def\restorestandardblank
+ {\let\currentvspacing\v!standard}
+
+% used both
+
+\def\doinhibitblank{\vspacing[\v!disable]} % can be made faster
+\def\inhibitblank {\vspacing[\v!disable]} % can be made faster
+
+\let\setupblank \setupvspacing
+\let\simplesetupblank\simplesetupvspacing
+\let\blank \vspacing
+
+% category:4 is default
+
+% \definevspacingamount[\v!big] [\bigskipamount] [\openlineheight]
+% \definevspacingamount[\v!medium] [\medskipamount] [0.50\openlineheight]
+% \definevspacingamount[\v!small] [\smallskipamount] [0.25\openlineheight]
+% \definevspacingamount[\v!line] [\openlineheight] [\openlineheight]
+% \definevspacingamount[\v!halfline][0.50\openlineheight][0.50\openlineheight]
+% \definevspacingamount[\v!formula] [\medskipamount] [0.50\openlineheight]
+% \definevspacingamount[\v!white] [\parskip] [\openlineheight]
+% \definevspacingamount[\v!height] [\strutheight] [\strutheight]
+% \definevspacingamount[\v!depth] [\strutdepth] [\strutdepth]
+
+\definevspacingamount[\v!none] [\zeropoint] [\zeropoint]
+\definevspacingamount[\v!big] [\bigskipamount] [\bodyfontlineheight]
+\definevspacingamount[\v!medium] [\medskipamount] [0.50\bodyfontlineheight]
+\definevspacingamount[\v!small] [\smallskipamount] [0.25\bodyfontlineheight]
+\definevspacingamount[\v!line] [\openlineheight] [\bodyfontlineheight]
+\definevspacingamount[\v!halfline][0.50\openlineheight][0.50\bodyfontlineheight]
+\definevspacingamount[\v!formula] [\medskipamount] [0.50\bodyfontlineheight]
+\definevspacingamount[\v!white] [\parskip] [\bodyfontwhitespace]
+\definevspacingamount[\v!height] [\strutheight] [\bodyfontstrutheight]
+\definevspacingamount[\v!depth] [\strutdepth] [\bodyfontstrutdepth]
+
+\def\bodyfontwhitespace
+ {\dimexpr
+ \ifdim\parskip=\zeropoint
+ \zeropoint
+ \else\ifgridsnapping
+ \bodyfontlineheight
+ \else
+ \parskip
+ \fi\fi
+ \relax}
+
+\definevspacing[\v!preference][penalty:-500] % goodbreak
+\definevspacing[\v!samepage] [penalty:10000] % real strong
+\definevspacing[\v!max] [category:1]
+\definevspacing[\v!force] [category:2]
+\definevspacing[\v!disable] [category:5]
+\definevspacing[\v!nowhite] [category:6]
+\definevspacing[\v!back] [category:7]
+\definevspacing[\v!always] [category:0]
+\definevspacing[\v!weak] [order:0]
+\definevspacing[\v!strong] [order:100]
+
+\definevspacing[\s!default] [\v!white] % was big for a while
+
+\dorecurse{10} % todo: other values < 4000
+ {\expanded{\definevspacing[\v!samepage-\recurselevel][penalty:\the\numexpr4000+250*\recurselevel\relax]}}
+
+% \setfalse\vspacingenabled
+%
+% \newtoks\everyenablevspacing
+% \newtoks\everydisablevspacing
+%
+% \def\enablevspacing {\the\everyenablevspacing}
+% \def\disablevspacing{\the\everydisablevspacing}
+%
+% \appendtoks
+% \writestatus\m!systems{! ! enabling vspacing ! !}%
+% \settrue\vspacingenabled
+% \ctxlua{vspacing.enable()}%
+% \to \everyenablevspacing
+%
+% \appendtoks
+% \writestatus\m!systems{! ! disabling vspacing ! !}%
+% \setfalse\vspacingenabled
+% \ctxlua{vspacing.disable()}%
+% \to \everydisablevspacing
+
+\let\blank \vspacing
+\let\defineblank \definevspacing
+\let\defineblankmethod\definevspacingamount
+
+%D The following command is for Wolfgang. It has to be used with
+%D care as it does {\em not} work in tandem with the other spacing
+%D commands.
+
+\unexpanded\def\definevspace
+ {\dotripleempty\dodefinevspace}
+
+\def\dodefinevspace[#1][#2][#3]%
+ {\ifthirdargument
+ \setvalue{\??va#1:#2}{#3}%
+ \else
+ \setvalue{\??va:#1}{#2}%
+ \fi}
+
+\unexpanded\def\vspace
+ {\dodoubleempty\dovspace}
+
+\def\dovspace[#1][#2]%
+ {\ifsecondargument
+ \dodovspace[#1][#2]%
+ \else\iffirstargument
+ \vspace[][#1]%
+ \else
+ \vspace[][\s!default]%
+ \fi\fi}
+
+\def\dodovspace[#1][#2]%
+ {\par
+ \ifvmode
+ \removelastskip
+ \vskip\vspaceamount{#1}{#2}\relax
+ \fi}
+
+\def\vspaceamount#1#2%
+ {\executeifdefined{\??va#1:#2}{\executeifdefined{\??va:#2}\zeropoint}}
+
+%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
+
+% \unexpanded\def\setuplines
+% {\dodoubleargument\getparameters[\??rg]}
+%
+% \unexpanded\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
+% \doifnot\@@rgoption\v!packed{\global\let\afterfirstobeyedline\relax}}}%
+% \def\obeyedline
+% {\par
+% \futurelet\next\dobetweenthelines}%
+% \activatespacehandler\@@rgspace
+% \GotoPar}
+%
+% \unexpanded\def\stoplines
+% {\endgroup
+% \popmacro\checkindentation
+% \@@rgafter}
+%
+% \def\dobetweenthelines
+% {\doifmeaningelse\next\obeyedline
+% {\@@rginbetween}
+% {\afterfirstobeyedline}}
+%
+% \setuplines
+% [\c!option=,
+% \c!before=\blank,
+% \c!after=\blank,
+% \c!inbetween=\blank,
+% \c!indenting=\v!no,
+% \c!space=\v!default]
+
+%D Contrary to \MKII\ we can now define classes of lines (generalized by
+%D Wolfgang). I will probably rewrite bits in \LUA.
+
+\let\currentlines\empty
+
+\def\linesparameter #1{\csname\dolinesparameter{\??rg\currentlines}#1\endcsname}
+\def\linesparameterhash#1{\dolinesparameterhash {\??rg\currentlines}#1}
+
+\def\dolinesparameter #1#2{\ifcsname#1#2\endcsname#1#2\else\expandafter\dolinesparentparameter \csname#1\s!parent\endcsname#2\fi}
+\def\dolinesparameterhash#1#2{\ifcsname#1#2\endcsname #1\else\expandafter\dolinesparentparameterhash\csname#1\s!parent\endcsname#2\fi}
+
+\def\dolinesparentparameter #1#2{\ifx#1\relax\s!empty\else\dolinesparameter #1#2\fi}
+\def\dolinesparentparameterhash#1#2{\ifx#1\relax \else\dolinesparameterhash#1#2\fi}
+
+\def\dosetlinesattributes#1#2% style color
+ {\edef\fontattributehash {\linesparameterhash#1}%
+ \edef\colorattributehash{\linesparameterhash#2}%
+ \ifx\fontattributehash \empty\else\dosetfontattribute \fontattributehash #1\fi
+ \ifx\colorattributehash\empty\else\dosetcolorattribute\colorattributehash#2\fi}
+
+\getparameters
+ [\??rg]
+ [\c!option=,
+ \c!before=\blank,
+ \c!after=\blank,
+ \c!inbetween=\blank,
+ \c!indenting=\v!no,
+ \c!space=\v!default]
+
+\unexpanded\def\definelines
+ {\dodoubleempty\dodefinelines}
+
+\def\dodefinelines[#1][#2]%
+ {\getparameters[\??rg#1][\s!parent=\??rg,#2]%
+ \setvalue{\e!start#1}{\dostartlines[#1]}%
+ \setvalue{\e!stop #1}{\dostoplines}}
+
+\unexpanded\def\setuplines
+ {\dodoubleempty\dosetuplines}
+
+\def\dosetuplines[#1][#2]%
+ {\doifelsenothing{#2}
+ {\getparameters[\??rg][#1]}
+ {\def\docommand##1{\getparameters[\??rg##1][#2]}%
+ \processcommacommand[#1]\docommand}}
+
+\def\dostartlines[#1]%
+ {\bgroup
+ \edef\currentlines{#1}%
+ \linesparameter\c!before
+ \pushmacro\checkindentation
+ \whitespace
+ \begingroup
+ \dosetlinesattributes\c!style\c!color
+ \setupindenting[\linesparameter\c!indenting]%
+ \setupalign[\linesparameter\c!align]%
+ \typesettinglinestrue
+ \setupwhitespace[\v!none]%
+ \obeylines
+ \ignorespaces
+ \gdef\afterfirstobeyedline % tzt two pass, net als opsomming
+ {\gdef\afterfirstobeyedline
+ {\nobreak
+ \doifnot{\linesparameter\c!option}\v!packed{\global\let\afterfirstobeyedline\relax}}}%
+ \def\obeyedline
+ {\par
+ \futurelet\next\dobetweenthelines}%
+ \activatespacehandler{\linesparameter\c!space}%
+ \GotoPar}
+
+\def\dostoplines
+ {\endgroup
+ \popmacro\checkindentation
+ \linesparameter\c!after
+ \egroup}
+
+\def\dobetweenthelines
+ {\doifmeaningelse\next\obeyedline
+ {\linesparameter\c!inbetween}
+ {\afterfirstobeyedline}}
+
+\definelines[\v!lines]
+
+\def\emptylines
+ {\dosingleempty\doemptylines}
+
+\def\doemptylines[#1]%
+ {\endgraf\dorecurse{\iffirstargument#1\else3\fi}\crlf}
+
+\protect \endinput
diff --git a/Master/texmf-dist/tex/context/base/spec-dpm.mkii b/Master/texmf-dist/tex/context/base/spec-dpm.mkii
index 9cf023fe0a8..efecd792806 100644
--- a/Master/texmf-dist/tex/context/base/spec-dpm.mkii
+++ b/Master/texmf-dist/tex/context/base/spec-dpm.mkii
@@ -411,7 +411,8 @@
\scratchcounter#4\advance\scratchcounter\minusone
\special{pdf: out \ifcase#5-\fi#2
% <</Page \the\scratchcounter\space /View [/Fit] /Title (#3)>>}%
- <</Title (#3) /A <</S /GoTo /D [@page\number#4\space\PDFpageviewwrd]>> >>}%
+ % <</Title (#3) /A <</S /GoTo /D [@page\number#4\space\PDFpageviewwrd]>> >>}%
+ <</Title \ifPDFunicode<#3>\else(#3)\fi\space /A <</S /GoTo /D [@page\number#4\space\PDFpageviewwrd]>> >>}%
\fi}
%D \macros
diff --git a/Master/texmf-dist/tex/context/base/spec-dpx.mkii b/Master/texmf-dist/tex/context/base/spec-dpx.mkii
index ed49ea843c9..c521da8c72c 100644
--- a/Master/texmf-dist/tex/context/base/spec-dpx.mkii
+++ b/Master/texmf-dist/tex/context/base/spec-dpx.mkii
@@ -590,7 +590,8 @@
%\scratchcounter#4\advance\scratchcounter\minusone
\special{pdf:outline #1 %\ifcase#5 opened\fi
% <</Title (#3) /A <</S /GoTo /D (page:\the\scratchcounter)>>>>}%
- <</Title (#3) /A <</S /GoTo /D [@page\number#4\space\PDFpageviewwrd]>> >>}%
+ % <</Title (#3) /A <</S /GoTo /D [@page\number#4\space\PDFpageviewwrd]>> >>}%
+ <</Title \ifPDFunicode<#3>\else(#3)\fi\space /A <</S /GoTo /D [@page\number#4\space\PDFpageviewwrd]>> >>}%
\fi}
%D \macros
diff --git a/Master/texmf-dist/tex/context/base/spec-fdf.mkii b/Master/texmf-dist/tex/context/base/spec-fdf.mkii
index 6579a9247f6..30e15ff34eb 100644
--- a/Master/texmf-dist/tex/context/base/spec-fdf.mkii
+++ b/Master/texmf-dist/tex/context/base/spec-fdf.mkii
@@ -191,6 +191,26 @@
\def\appendtoPDFdocumentextgstates#1%
{\xdef\docuPDFextgstates{\docuPDFextgstates\space#1}}
+%D Patterns (for tikz)
+
+\let\docuPDFpatterns\empty
+
+\def\checkPDFpatterns
+ {\ifx\docuPDFpatterns\empty \else
+ \ifnum\realpageno=\lastpage\relax
+ \doPDFdictionaryobject{FDF}{docupatterns}{\docuPDFpatterns}%
+ \fi
+ \doPDFgetobjectreference{FDF}{docupatterns}\PDFobjectreference
+ \doPDFpageresource{/Pattern \PDFobjectreference}%
+ \fi}
+
+\appendtoksonce
+ \checkPDFpatterns
+\to \everyshipout
+
+\def\appendtoPDFdocumentpatterns#1%
+ {\xdef\docuPDFpatterns{\docuPDFpatterns\space#1}}
+
%D Another special mechanism (needed for color separation):
\let\docuPDFcolorspaces\empty
@@ -301,10 +321,20 @@
\addPDFdocumentinfo
\to \everyfirstshipout
-\def\PDFversion{1.5}
+\ifx\pdfminorversion\undefined
+ \ifx\pdfoptionpdfminorversion\undefined
+ \newcount\pdfminorversion
+ \else
+ \let\pdfminorversion\pdfoptionpdfminorversion
+ \fi
+\fi
+
+\pdfminorversion=5
+
+\def\PDFversion{1.\number\pdfminorversion}
\appendtoksonce
- \def\PDFversion{1.5}%
+ \def\PDFversion{1.\the\pdfminorversion}%
\let\addPDFdocumentinfo\relax
\to \everyresetspecials
@@ -347,21 +377,39 @@
\flushPDFpageboxes
\to \everyshipout
+% \def\doPDFsetupidentity#1#2#3#4#5#6%
+% {\bgroup
+% \enablePDFdocencoding
+% \edef\!!stringa{#5}%
+% \ifx\!!stringa\empty \ifx\pdfdate\undefined\else
+% \edef\!!stringa{D:\pdfdate}%
+% \fi \fi
+% \expanded{\doPDFaddtoinfo
+% {/Title (#1)
+% /Subject (#2)
+% /Author (#3)
+% /Creator (#4)
+% /ModDate (\!!stringa)
+% /ID (\jobname.\!!stringa) % needed for pdf/x
+% /Keywords (#6)}}%
+% \egroup}
+
\def\doPDFsetupidentity#1#2#3#4#5#6%
{\bgroup
\enablePDFdocencoding
- \edef\!!stringa{#5}%
- \ifx\!!stringa\empty \ifx\pdfdate\undefined\else
- \edef\!!stringa{D:\pdfdate}%
- \fi \fi
+ \sanitizePDFencoding#1\to\idtitle \stripstring\idtitle
+ \sanitizePDFencoding#2\to\idsubject\stripstring\idsubject
+ \sanitizePDFencoding#3\to\idauthor \stripstring\idauthor
+ \sanitizePDFencoding#4\to\idcreator\stripstring\idcreator
+ \sanitizePDFencoding#6\to\idkeyword\stripstring\idkeyword
\expanded{\doPDFaddtoinfo
- {/Title (#1)
- /Subject (#2)
- /Author (#3)
- /Creator (#4)
- /ModDate (\!!stringa)
- /ID (\jobname.\!!stringa) % needed for pdf/x
- /Keywords (#6)}}%
+ {/Title \ifPDFunicode<\idtitle >\else(\idtitle )\fi
+ /Subject \ifPDFunicode<\idsubject>\else(\idsubject)\fi
+ /Author \ifPDFunicode<\idauthor >\else(\idauthor )\fi
+ /Creator \ifPDFunicode<\idcreator>\else(\idcreator)\fi
+ /ModDate (#4)
+ /ID (\jobname.#5) % needed for pdf/x
+ /Keywords \ifPDFunicode<\idkeyword>\else(\idkeyword)\fi}}%
\egroup}
%D \macros
@@ -1149,10 +1197,8 @@
\def\doPDFinsertbookmark#1#2#3#4#5% level sublevels text page open=1
{\bgroup
- % todo, unicode
- \sanitizePDFdocencoding#3\to\bookmarktext % uses scratchcounter
+ \sanitizePDFencoding#3\to\bookmarktext % uses scratchcounter
\stripstring\bookmarktext
- %\sanitizePDFstring#3\to\bookmarktext
\doPDFbookmark{#1}{#2}{\bookmarktext}{#4}{#5}%
\egroup}
@@ -1171,7 +1217,7 @@
\def\FDFflagMultiLine {4096} % 13
\def\FDFflagNoToggleToOff {16384} % 15
-\def\FDFflagRadio {32768} % 16
+\def\FDFflagRadio {32768} % 16 (not used as such)
\def\FDFflagPushButton {65536} % 17
\def\FDFflagPopUp {131072} % 18
\def\FDFflagEdit {262144} % 19
@@ -1376,66 +1422,31 @@
\let\FDFactions\empty
-%\def\setFDFactions[#1,#2,#3,#4,#5,#6,#7,#8]%
-% {\global\let\FDFactions\empty
-% \setFDFaction D#1% mousedown
-% \setFDFaction U#2% mouseup
-% \setFDFaction E#3% enterregion
-% \setFDFaction X#4% exitregion
-% \setFDFaction K#5% afterkeystroke
-% \setFDFaction F#6% formatresult
-% \setFDFaction V#7% validateresult
-% \setFDFaction C#8% calculatewhatever
-% \ifx\FDFactions\empty\else
-% \xdef\FDFactions{/AA << \FDFactions >>}% since 1.3 no longer inherited
-% \fi}
-%% {\setFDFaction A#2}% mouseup % changed for version 5
-
-% \def\setFDFactions[#1,#2,#3,#4,#5,#6,#7,#8,%
-% {\global\let\FDFactions\empty
-% \setFDFaction D#1% mousedown
-% %\setFDFaction U#2% mouseup
-% \setFDFaction E#3% enterregion
-% \setFDFaction X#4% exitregion
-% \setFDFaction K#5% afterkeystroke
-% \setFDFaction F#6% formatresult
-% \setFDFaction V#7% validateresult
-% \setFDFaction C#8% calculatewhatever
-% \setFDFactionsmore#2,}
-
-% \def\setFDFactionsmore#1,#2,#3]%
-% {\setFDFaction{Fo}#2% focusin
-% \setFDFaction{Bl}#3% focusout % was I (now pdf ref manual explicitly talks about lowercase l)
-% \ifx\FDFactions\empty\else
-% \xdef\FDFactions{/AA << \FDFactions >>}% since 1.3 no longer inherited
-% \fi
-% \setFDFaction A#1}% mouseup
-
\def\setFDFactions[#1,#2,#3,#4,#5,#6,#7,#8,%
{\global\let\FDFactions\empty
- \setFDFaction D#1% mousedown
- \setFDFaction U#2% mouseup
- \setFDFaction E#3% enterregion
- \setFDFaction X#4% exitregion
- \setFDFaction K#5% afterkeystroke
- \setFDFaction F#6% formatresult
- \setFDFaction V#7% validateresult
- \setFDFaction C#8% calculatewhatever
+ \setFDFaction D#1\relax% mousedown
+ \setFDFaction U#2\relax% mouseup
+ \setFDFaction E#3\relax% enterregion
+ \setFDFaction X#4\relax% exitregion
+ \setFDFaction K#5\relax% afterkeystroke
+ \setFDFaction F#6\relax% formatresult
+ \setFDFaction V#7\relax% validateresult
+ \setFDFaction C#8\relax% calculatewhatever
\setFDFactionsmore}
\def\setFDFactionsmore#1,#2]%
- {\setFDFaction{Fo}#1% focusin
- \setFDFaction{Bl}#2% focusout % was I (now pdf ref manual explicitly talks about lowercase l)
+ {\setFDFaction{Fo}#1\relax% focusin
+ \setFDFaction{Bl}#2\relax% focusout % was I (now pdf ref manual explicitly talks about lowercase l)
\ifx\FDFactions\empty\else
\xdef\FDFactions{/AA << \FDFactions >>}% since 1.3 no longer inherited
\fi}
% todo, when new var scheme is implemented
%
-% \setFDFaction{PO}\@@DriverFieldPageOpen
-% \setFDFaction{PC}\@@DriverFieldPageClose
-% \setFDFaction{PV}\@@DriverFieldPageVisible
-% \setFDFaction{PI}\@@DriverFieldPageInVisible
+% \setFDFaction{PO}\@@DriverFieldPageOpen\relax
+% \setFDFaction{PC}\@@DriverFieldPageClose\relax
+% \setFDFaction{PV}\@@DriverFieldPageVisible\relax
+% \setFDFaction{PI}\@@DriverFieldPageInVisible\relax
%D The event handler becomes something:
%D
@@ -1444,7 +1455,7 @@
%D /A << /S /JavaScript /JS (...) >>
%D \stoptyping
-% \def\setFDFaction#1#2%
+% \def\setFDFaction#1#2\relax%
% {\bgroup
% \global\let\sanitizedJScode\empty
% \def\setFDFaction##1%
@@ -1466,7 +1477,7 @@
%
% acrobat 5 supports other that JS actions too
-\def\setFDFaction#1#2%
+\def\setFDFaction#1#2\relax%
{\bgroup
\def\docommand{\xdef\FDFactions{\FDFactions /#1 << \lastPDFaction >> }}%
\@EA\handlereferenceactions\@EA{#2}\docommand % one level expansion
@@ -1486,7 +1497,7 @@
%D a message to the console.
\def\testFDFactions
- {\def\setFDFaction##1##2%
+ {\def\setFDFaction##1##2\relax%
{\doPSsanitizeJScode console.show();console.println("executing:##1"); \to\sanitizedJScode
\edef\FDFactions{\FDFactions /##1 << /S /JavaScript /JS (\sanitizedJScode) >> }}}
@@ -1919,6 +1930,11 @@
\def\doFDFpresetcheckfield#1#2#3#4#5#6#7%
{\doFDFpresetpushcheckfield{#1}{#2}{#3}{#4}{#5}{#6}{#7}{1}}
+% As pdf widgets are rather consistently upward incompatible
+% especially with regards to inheritance, the following code is not
+% quite okay. I've decided no longer to bother about in it in MkII
+% and use a flat model in MkIV which somehow seems to work better.
+
\def\doFDFpresetradiofield#1#2#3#4#5#6#7#8%
{\bgroup
\setFDFlayer\@@DriverFieldLayer
@@ -2003,13 +2019,19 @@
% seems to be more important than compatibility of documents, which in
% turn renders acrobat useless for forms.] Anyway, synchronization is
% broken or not depending on the combination pdfversion/acrobatversion.
+%
+% Hm, nowadays Radio will overload RadiosInUnison so we need to use only one
+% of them.
\def\doFDFpresetradiorecord#1#2#3#4#5%
{\bgroup
% < pdf 1.5 (1.5 was broken)
% \setFDFswitches[Radio,NoToggleToOff,RadiosInUnison,#3]%
% > pdf 1.5
- \setFDFswitches[Radio,RadiosInUnison,#3]%
+ % \setFDFswitches[Radio,RadiosInUnison,#3]%
+ % > pdf 1.6
+ \setFDFswitches[RadiosInUnison,#3]%
+ %setFDFswitches[PushButton,RadiosInUnison,#3]% this is what acrobat itself does
% older, else fatal error
% \setFDFkids[#4][]%
% newer
@@ -2358,7 +2380,69 @@
\let^^M=\\}
\egroup
-\let\sanitizePDFencoding\sanitizePDFdocencoding
+% \let\sanitizePDFencoding\sanitizePDFdocencoding
+
+%D The conversions comes down to (for the sake of speed the
+%D implementation combines steps):
+%D
+%D \startitemize
+%D \item we expand the \UTF\ sequences into \type {\unicodechar}'s
+%D \item spaces become character 255's (so that they are not
+%D gobbled in argument fetching
+%D \item normal \ASCII\ chars are unchanged
+%D \item \par's and alike are converted to \type {\unicodechar}'s
+%D \stopitemize
+%D
+%D This happens by expansion; next we convert the resulting
+%D sequence by interpreting the stream.
+
+\long\def\sanitizePDFuniencoding#1\to#2%
+ {\enablePDFunicrlf
+ \simplifycommands % added due to Dohyun Kim
+ \let\unicodechar\relax % prevent further expansion
+ \retainlccodes\lccode32=255 % slooow
+ \lowercasestring\PDFunicodetrigger#1\to#2%
+ \edef#2{\expandafter\doPDFuni#2\empty\empty}} % slooow
+
+%D Handling of empty lines:
+
+\bgroup
+\catcode`\^^M=\@@active
+\gdef\enablePDFunicrlf%
+ {\def\\{\unicodechar{13}}%
+ \def\par{\\\\}%
+ \catcode`\^^M=\@@active%
+ \let^^M=\\}
+\egroup
+
+%D Conversion to 16 bit \UNICODE:
+
+\def\PDFunicodechar#1%
+ {\@EA\lchexnumbers\@EA{\number\utfdiv{#1}}%
+ \@EA\lchexnumbers\@EA{\number\utfmod{#1}}}
+
+\def\PDFunicodetrigger
+ {\unicodechar{65279}}
+
+%D The postprocessor:
+
+\def\doPDFuni#1%
+ {\ifx#1\relax
+ \@EA\dodoPDFuni
+ \else\ifx#1\empty
+ % quit
+ \else
+ \@EAEAEA\nodoPDFuni
+ \fi\fi#1}
+
+\def\nodoPDFuni#1%
+ {\PDFunicodechar{\ifnum`#1=255 32\else`#1\fi}\doPDFuni}
+
+\def\dodoPDFuni#1#2%
+ {\PDFunicodechar{#2}\doPDFuni}
+
+\def\sanitizePDFencoding
+ {\doifelse\currentregime{utf}{\PDFunicodetrue\sanitizePDFuniencoding}\sanitizePDFdocencoding}
%D A bit out of place, but useful:
@@ -3279,6 +3363,9 @@
\doifobjectreferencefoundelse{FDF}{docuextgstates}
{\doPDFgetobjectreference{FDF}{docuextgstates}\PDFobjectreference
\xdef\collectedPDFresources{\collectedPDFresources/ExtGState \PDFobjectreference}}\donothing
+ \doifobjectreferencefoundelse{FDF}{docupatterns}
+ {\doPDFgetobjectreference{FDF}{docupatterns}\PDFobjectreference
+ \xdef\collectedPDFresources{\collectedPDFresources/Pattern \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-tpd.mkii b/Master/texmf-dist/tex/context/base/spec-tpd.mkii
index 597993e0a72..6af3b1272df 100644
--- a/Master/texmf-dist/tex/context/base/spec-tpd.mkii
+++ b/Master/texmf-dist/tex/context/base/spec-tpd.mkii
@@ -1176,7 +1176,7 @@
\pdfoutline
user {<</S /GoTo /D [\PDFobjectreference\space\PDFpageviewwrd]>>}%
\ifcase#2 \else count \ifcase#5-\fi#2 \fi
- {#3}}
+ {\ifPDFunicode<#3>\else#3\fi}}
%D \macros
%D {doPDFdictionaryobject,doPDFarrayobject}
diff --git a/Master/texmf-dist/tex/context/base/spec-tst.mkii b/Master/texmf-dist/tex/context/base/spec-tst.mkii
index bdd8a29b221..543baa647b3 100644
--- a/Master/texmf-dist/tex/context/base/spec-tst.mkii
+++ b/Master/texmf-dist/tex/context/base/spec-tst.mkii
@@ -11,113 +11,14 @@
%C therefore copyrighted by \PRAGMA. See mreadme.pdf for
%C details.
-\ifcase \pdfoutput \endinput \fi
-
\unprotect
-%D The conversions comes down to (for the sake of speed the
-%D implementation combines steps):
-%D
-%D \startitemize
-%D \item we expand the \UTF\ sequences into \type {\unicodechar}'s
-%D \item spaces become character 255's (so that they are not
-%D gobbled in argument fetching
-%D \item normal \ASCII\ chars are unchanged
-%D \item \par's and alike are converted to \type {\unicodechar}'s
-%D \stopitemize
-%D
-%D This happens by expansion; next we convert the resulting
-%D sequence by interpreting the stream.
-
-\long\def\sanitizePDFuniencoding#1\to#2%
- {\enablePDFunicrlf
- \simplifycommands % added due to Dohyun Kim
- \let\unicodechar\relax % prevent further expansion
- \retainlccodes\lccode32=255 % slooow
- \lowercasestring\PDFunicodetrigger#1\to#2%
- \edef#2{\expandafter\doPDFuni#2\empty\empty}} % slooow
-
-%D Handling of empty lines:
-
-\bgroup
-\catcode`\^^M=\@@active
-\gdef\enablePDFunicrlf%
- {\def\\{\unicodechar{13}}%
- \def\par{\\\\}%
- \catcode`\^^M=\@@active%
- \let^^M=\\}
-\egroup
-
-%D Conversion to 16 bit \UNICODE:
-
-\def\PDFunicodechar#1%
- {\@EA\lchexnumbers\@EA{\number\utfdiv{#1}}%
- \@EA\lchexnumbers\@EA{\number\utfmod{#1}}}
-
-\def\PDFunicodetrigger
- {\unicodechar{65279}}
-
-%D The postprocessor:
-
-\def\doPDFuni#1%
- {\ifx#1\relax
- \@EA\dodoPDFuni
- \else\ifx#1\empty
- % quit
- \else
- \@EAEAEA\nodoPDFuni
- \fi\fi#1}
-
-\def\nodoPDFuni#1%
- {\PDFunicodechar{\ifnum`#1=255 32\else`#1\fi}\doPDFuni}
-
-\def\dodoPDFuni#1#2%
- {\PDFunicodechar{#2}\doPDFuni}
-
-\def\sanitizePDFencoding
- {\doifelse\currentregime{utf}%
- {\PDFunicodetrue\sanitizePDFuniencoding}\sanitizePDFdocencoding}
-
-% pdftex specific
-
-\def\doPDFinsertbookmark#1#2#3#4#5% level sublevels text page open=1
- {\bgroup
- \sanitizePDFencoding#3\to\bookmarktext % uses scratchcounter
- \stripstring\bookmarktext
- \doPDFbookmark{#1}{#2}{\bookmarktext}{#4}{#5}%
- \egroup}
-
-\def\doPDFbookmark#1#2#3#4#5%
- {\doPDFgetpagereference{#4}\PDFobjectreference
- \pdfoutline
- user {<</S /GoTo /D [\PDFobjectreference\space\PDFpageviewwrd]>>}%
- \ifcase#2 \else count \ifcase#5-\fi#2 \fi
- {\ifPDFunicode<#3>\else#3\fi}}
-
-\def\doPDFsetupidentity#1#2#3#4#5#6%
- {\bgroup
- \enablePDFdocencoding
- \sanitizePDFencoding#1\to\idtitle \stripstring\idtitle
- \sanitizePDFencoding#2\to\idsubject\stripstring\idsubject
- \sanitizePDFencoding#3\to\idauthor \stripstring\idauthor
- \sanitizePDFencoding#4\to\idcreator\stripstring\idcreator
- \sanitizePDFencoding#6\to\idkeyword\stripstring\idkeyword
- \expanded{\doPDFaddtoinfo
- {/Title \ifPDFunicode<\idtitle >\else(\idtitle )\fi
- /Subject \ifPDFunicode<\idsubject>\else(\idsubject)\fi
- /Author \ifPDFunicode<\idauthor >\else(\idauthor )\fi
- /Creator \ifPDFunicode<\idcreator>\else(\idcreator)\fi
- /ModDate (#4)
- /ID (\jobname.#5) % needed for pdf/x
- /Keywords \ifPDFunicode<\idkeyword>\else(\idkeyword)\fi}}%
- \egroup}
+%D The code is now merged into spec-*.mkii
\protect
\doifnotmode{demo}{\endinput}
-% \input spec-tst.tex
-
\mainlanguage[vn]
\enableregime[utf]
\usetypescript[all][computer-modern][t5]
@@ -149,4 +50,3 @@
\subsection{Mục nhỏ thứ hai} Thử tiếng Việt
\stoptext
-
diff --git a/Master/texmf-dist/tex/context/base/strc-bkm.lua b/Master/texmf-dist/tex/context/base/strc-bkm.lua
index 8f8a3ca246a..f34d83ec557 100644
--- a/Master/texmf-dist/tex/context/base/strc-bkm.lua
+++ b/Master/texmf-dist/tex/context/base/strc-bkm.lua
@@ -1,6 +1,6 @@
if not modules then modules = { } end modules ['strc-bkm'] = {
version = 0.200,
- comment = "companion to strc-bkm.tex",
+ comment = "companion to strc-bkm.mkiv",
author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
copyright = "PRAGMA ADE / ConTeXt Development Team",
license = "see context related readme files"
@@ -59,21 +59,35 @@ local function stripped(str) -- kind of generic
return str
end
+-- todo: collect specs and collect later i.e. multiple places
+
function bookmarks.place()
if names ~= "" then
local list = lists.filter(names,"all",nil,lists.collected)
+ local lastlevel = 1
if #list > 0 then
local opened, levels = aux.settings_to_set(opened), { }
for i=1,#list do
local li = list[i]
local metadata = li.metadata
local name = metadata.name
- if not metadata.nolist and levelmap[name] then
+ if not metadata.nolist then -- and levelmap[name] then
local titledata = li.titledata
if titledata then
+ local structural = levelmap[name]
+ lastlevel = structural or lastlevel
+ local title = titledata.bookmark
+ if not title or title == "" then
+ if not structural then
+ -- placeholder, todo: bookmarklabel
+ title = name .. ": " .. (titledata.title or "?")
+ else
+ title = titledata.title or "?"
+ end
+ end
levels[#levels+1] = {
- levelmap[name],
- stripped(titledata.bookmark or titledata.title or "?"),
+ lastlevel,
+ stripped(title),
li.references, -- has internal and realpage
allopen or opened[name]
}
@@ -85,3 +99,33 @@ function bookmarks.place()
function bookmarks.place() end -- prevent second run
end
end
+
+lpdf.registerdocumentfinalizer(function() structure.bookmarks.place() end,1)
+
+-- bkm
+--~ function nodes.toutf(list)
+--~ local t= { }
+--~ for n in node.traverse(list) do
+--~ local id = n.id
+--~ if id == node.id("glyph") then
+--~ local c = n.char
+--~ local f = fonts.ids[n.font]
+--~ if f then
+--~ local u = f.characters[c].tounicode
+--~ if u then
+--~ for s in string.gmatch(u,"..") do
+--~ t[#t+1] = utf.char(tonumber(s,16))
+--~ end
+--~ else
+--~ t[#t+1] = utf.char(c)
+--~ end
+--~ else
+--~ t[#t+1] = utf.char(c)
+--~ end
+--~ elseif id == node.id("glue") then
+--~ t[#t+1] = " "
+--~ end
+--~ end
+--~ return table.concat(t,"")
+--~ end
+--~ print(nodes.toutf(tex.box[999].list))
diff --git a/Master/texmf-dist/tex/context/base/strc-bkm.mkiv b/Master/texmf-dist/tex/context/base/strc-bkm.mkiv
index 9298a9d8ef6..77854738d2f 100644
--- a/Master/texmf-dist/tex/context/base/strc-bkm.mkiv
+++ b/Master/texmf-dist/tex/context/base/strc-bkm.mkiv
@@ -55,7 +55,7 @@
%D Placement \unknown\ look how simple compared to \MKII:
-\def\placebookmarks
+\unexpanded\def\placebookmarks
{\dodoubleempty\doplacebookmarks}
\def\doplacebookmarks[#1][#2]%
@@ -67,7 +67,8 @@
\fi
\fi}
-\appendtoks\ctxlua{structure.bookmarks.place()}\to\everystoptext
+% \prependtoks\ctxlua{structure.bookmarks.place()}\to\everystoptext % too late
+% \prependtoks\ctxlua{structure.bookmarks.place()}\to\everylastbackendshipout % okay but not nice
\protect \endinput
diff --git a/Master/texmf-dist/tex/context/base/strc-blk.lua b/Master/texmf-dist/tex/context/base/strc-blk.lua
index 33dbb0b7ce8..2589190eb5c 100644
--- a/Master/texmf-dist/tex/context/base/strc-blk.lua
+++ b/Master/texmf-dist/tex/context/base/strc-blk.lua
@@ -1,6 +1,6 @@
if not modules then modules = { } end modules ['strc--blk'] = {
version = 1.001,
- comment = "companion to strc--blk.mkiv",
+ comment = "companion to strc-blk.mkiv",
author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
copyright = "PRAGMA ADE / ConTeXt Development Team",
license = "see context related readme files"
@@ -8,7 +8,8 @@ if not modules then modules = { } end modules ['strc--blk'] = {
-- this one runs on top of buffers and structure
-local texprint, format, gmatch = tex.print, string.format, string.gmatch
+local texprint, format, gmatch, find = tex.print, string.format, string.gmatch, string.find
+local lpegmatch = lpeg.match
local ctxcatcodes = tex.ctxcatcodes
@@ -29,7 +30,7 @@ end
job.register('structure.blocks.collected', structure.blocks.tobesaved, initializer)
-local printer = (lpeg.linebyline/texprint)^0
+local printer = (lpeg.patterns.textline/texprint)^0 -- can be shared
function blocks.print(name,data,hide)
if hide then
@@ -42,7 +43,7 @@ function blocks.print(name,data,hide)
texprint(data[i])
end
else
- printer:match(data)
+ lpegmatch(printer,data)
end
if hide then
texprint(ctxcatcodes,"\\dostophiddenblock")
@@ -65,7 +66,7 @@ function blocks.setstate(state,name,tag)
elseif all then
sn.all = state
else
- for _, tag in pairs(tags) do
+ for _, tag in next, tags do
sn[tag] = state
end
end
@@ -76,7 +77,7 @@ end
function blocks.select(state,name,tag,criterium)
criterium = criterium or "text"
- if tag:find("=") then tag = "" end
+ if find(tag,"=") then tag = "" end
local names = aux.settings_to_set(name)
local all = tag == ""
local tags = not all and aux.settings_to_set(tag)
@@ -91,7 +92,7 @@ function blocks.select(state,name,tag,criterium)
blocks.print(name,ri.data,hide)
else
local mtags = metadata.tags
- for tag, sta in pairs(tags) do
+ for tag, sta in next, tags do
if mtags[tag] then
blocks.print(name,ri.data,hide)
break
@@ -129,7 +130,7 @@ function blocks.save(name,tag,buffer) -- wrong, not yet adapted
end
else
local sn = states[name]
- for tag, _ in pairs(tags) do
+ for tag, _ in next, tags do
if sn[tag] == nil then
if allstate ~= "hide" then
blocks.print(name,data)
diff --git a/Master/texmf-dist/tex/context/base/strc-blk.mkiv b/Master/texmf-dist/tex/context/base/strc-blk.mkiv
index 90d2ff9ab05..8aa8568407f 100644
--- a/Master/texmf-dist/tex/context/base/strc-blk.mkiv
+++ b/Master/texmf-dist/tex/context/base/strc-blk.mkiv
@@ -25,15 +25,15 @@
\def\blockparameter#1#2{\ifcsname\??tb#1#2\endcsname\csname\??tb#1#2\endcsname\fi}
-\def\setupblockparameters{\dodoubleargument \dosetupblock} % fast one (for compatibility)
-\def\setupblock {\dodoubleargumentwithset\dosetupblock} % handles set
+\unexpanded\def\setupblockparameters{\dodoubleargument \dosetupblock} % fast one (for compatibility)
+\unexpanded\def\setupblock {\dodoubleargumentwithset\dosetupblock} % handles set
\def\dosetupblock[#1]{\getparameters[\??tb#1]} % [#1][#2]}
-\def\defineblock
- {\dosingleargument\dodefineblock}
+\unexpanded\def\defineblock[#1]%
+ {\processcommalist[#1]\dodefineblock}
-\def\dodefineblock[#1]%
+\def\dodefineblock#1%
{\getparameters
[\??tb#1]
[\c!before=\blank,
@@ -59,11 +59,13 @@
% order matters: \c!before (think of: \c!before=\startitemize)
+% no \endgroups
+
\let\doblocksetups\gobbleoneargument
\def\dostartnormalblock#1% name
{\bgroup
-\visibletrue
+ \visibletrue
\edef\currentblock{#1}%
\doblocksetups\currentblock
\let\doblocksetups\gobbleoneargument
@@ -83,7 +85,7 @@
{\ctxlua{structure.blocks.setstate("#1","#2","#3")}}
\def\doselectblocks[#1][#2][#3][#4]% state name tag setups
- {\begingroup
+ {\bgroup
\doifassignmentelse{#3}
{\getparameters[\??tb\??tb][\c!criterium=\v!text,#3]%
\def\doblocksetups##1{\getparameters[\??tb##1][#3]}%
@@ -91,7 +93,7 @@
{\getparameters[\??tb\??tb][\c!criterium=\v!text,#4]%
\def\doblocksetups##1{\getparameters[\??tb##1][#4]}%
\ctxlua{structure.blocks.select("#1","#2","#3","\@@tb@@tbcriterium")}}%
- \endgroup}
+ \egroup}
% hide: save, if [+] also hidden execute
% keep: save and normal execute
diff --git a/Master/texmf-dist/tex/context/base/strc-def.mkiv b/Master/texmf-dist/tex/context/base/strc-def.mkiv
index 2395ddf6c67..77793c7eb7e 100644
--- a/Master/texmf-dist/tex/context/base/strc-def.mkiv
+++ b/Master/texmf-dist/tex/context/base/strc-def.mkiv
@@ -76,8 +76,11 @@
%\c!margintext=,
\c!number=\v!yes,
\c!numbercolor=\structureheadparameter\c!color,
- %\c!numbercommand=,
+ \c!textcolor=\structureheadparameter\c!color,
\c!numberstyle=\structureheadparameter\c!style,
+ \c!textstyle=\structureheadparameter\c!style,
+ %\c!numbercommand=,
+ %\c!textcommand=,
\c!ownnumber=\v!no,
%\c!page=,
\c!placehead=\v!yes,
@@ -86,13 +89,12 @@
%\c!sectionsegments=,
\c!sectionseparatorset=\s!default,
\c!sectionset=\v!all,
+ \c!interlinespace=,
%\c!sectionstopper=,
+ %\c!sectionstarter=,
%\c!strut=,
%\c!style=,
%\c!text=,
- \c!textcolor=\structureheadparameter\c!color,
- %\c!textcommand=,
- \c!textstyle=\structureheadparameter\c!style,
%\c!tolerance=
]
@@ -109,17 +111,18 @@
\definestructureseparatorset [\s!default] [] [.]
\definestructureconversionset [\s!default] [] [numbers]
-\definestructureresetset [\s!default] [] [1]
+\definestructureresetset [\s!default] [] [1] % each level
\definestructureprefixset [\s!default] [section-1,section-2,section-3] []
\definestructureprefixset [\v!all] [section-1,section-2,section-3,section-4,section-5,section-6,section-7,section-8] []
+\definestructureprefixset [\v!none] [] []
\definestructureprefixset [\v!part] [section-1] []
\definestructureprefixset [\v!chapter] [section-2] []
\definestructureseparatorset [\v!appendix:\s!default] [] [.]
\definestructureconversionset [\v!appendix:\s!default] [Romannumerals,Characters] [numbers]
-\definestructureresetset [\v!appendix:\s!default] [] [0]
+\definestructureresetset [\v!appendix:\s!default] [] [1] % why was this 0
% \definesectionblock
@@ -285,14 +288,14 @@
\setuplist
[\v!part]
- [\c!before={\blank\page[\v!preference]},
+ [\c!before={\blank[\v!preference,\v!big]}, % sort of mkii compatible, watch columns
\c!after=\blank,
\c!label=\v!yes,
\c!distance=1em]
\setuplist
[\v!chapter]
- [\c!before={\blank\page[\v!preference]},
+ [\c!before={\blank[\v!preference,\v!big]}, % sort of mkii compatible, watch columns
\c!after=]
\setuplist [\v!part] [\c!width=0em]
diff --git a/Master/texmf-dist/tex/context/base/strc-des.lua b/Master/texmf-dist/tex/context/base/strc-des.lua
index 0d548e61f44..ee5fe702b7f 100644
--- a/Master/texmf-dist/tex/context/base/strc-des.lua
+++ b/Master/texmf-dist/tex/context/base/strc-des.lua
@@ -1,6 +1,6 @@
if not modules then modules = { } end modules ['strc-des'] = {
version = 1.001,
- comment = "companion to strc-des.tex",
+ comment = "companion to strc-des.mkiv",
author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
copyright = "PRAGMA ADE / ConTeXt Development Team",
license = "see context related readme files"
diff --git a/Master/texmf-dist/tex/context/base/strc-des.mkiv b/Master/texmf-dist/tex/context/base/strc-des.mkiv
index 2c3a0d6416c..29e4ea36c80 100644
--- a/Master/texmf-dist/tex/context/base/strc-des.mkiv
+++ b/Master/texmf-dist/tex/context/base/strc-des.mkiv
@@ -1,5 +1,5 @@
%D \module
-%D [ file=strc-blk,
+%D [ file=strc-des,
%D version=2008.10.20,
%D title=\CONTEXT\ Structure Macros,
%D subtitle=Descriptions,
@@ -21,19 +21,30 @@
%D
%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 \defineenumeration[two] [one] % clone one
+%D \defineenumeration[three] [counter=one,style=slanted] % only use counter of one
+%D \defineenumeration[four] [three] % clone three
+%D \defineenumeration[five] [three] [counter=five] % clone three and use own counter
+%D \defineenumeration[six] [three] [counter=four] % clone tree and use counter four (undefined)
%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 \startone test test 6 \stopone
+%D \starttwo test test 7 \stoptwo
+%D \startthree test test 8 \stopthree
+%D \startfour test test 9 \stopfour
+%D \startfive test test 2 \stopfive
+%D \startsix test test 10 \stopsix
%D \stopbuffer
%D
%D \typebuffer \start \getbuffer \stop
+%D
+%D \starttyping
+%D \setupenumerations[one] [prefix=yes,prefixsegments=section]
+%D \setupenumerations[two] [prefix=yes,prefixsegments=section]
+%D \setupenumerations[three][prefix=yes,prefixsegments=section]
+%D \setupenumerations[four] [prefix=yes,prefixsegments=chapter:section]
+%D \setupenumerations[five] [prefix=yes,prefixsegments=chapter:section]
+%D \setupenumerations[six] [prefix=yes,prefixsegments=chapter:section]
+%D \stoptyping
% list and titles are experimental
%
@@ -67,6 +78,17 @@
\def\dodescriptionparentparameter#1#2%
{\ifx#1\relax\s!empty\else\dodescriptionparameter#1#2\fi}
+\def\descriptionlocationparameter#1{\csname\dodescriptionlocationparameter{\??dd\currentdescription}#1\endcsname}
+
+\def\dodescriptionlocationparameter#1#2%
+ {\ifcsname#1#2:\descriptionparameter\c!location\endcsname
+ #1#2:\descriptionparameter\c!location
+ \else\ifcsname#1\s!parent\endcsname
+ \expandafter\dodescriptionlocationparameter\csname#1\s!parent\endcsname#2%
+ \else
+ \dodescriptionparameter{\??dd\currentdescription}#2%
+ \fi\fi}
+
% description hashes (needed for style/color)
\def\descriptionparameterhash #1{\dodescriptionparameterhash{\??dd\currentdescription }#1}
@@ -136,17 +158,17 @@
\noindent
\llap
{\@@makedescriptionpurebox\raggedright
- \hbox to \descriptionparameter\c!width{\copy\descriptionheadbox\hss}%
- \hskip\descriptionparameter\c!distance}%
+ \hbox to \descriptionsheadwidth{\copy\descriptionheadbox\hss}%
+ \hskip\descriptionsheaddistance}%
\@@dodescription}
\def\@@descriptionrightmargin % whatever this means
{\def\\{\crlf}%
\noindent
\rlap
- {\hskip\descriptionparameter\c!distance
+ {\hskip\descriptionsheaddistance
\@@makedescriptionpurebox\raggedright
- \hbox to \descriptionparameter\c!width{\copy\descriptionheadbox\hss}}%
+ \hbox to \descriptionsheadwidth{\copy\descriptionheadbox\hss}}%
\@@dodescription}
\def\@@makedescriptionpurebox#1%
@@ -155,7 +177,7 @@
\hsize\descriptionsheadwidth
\leftskip\zeropoint
\rightskip\zeropoint
- #1\setupalign[\descriptionparameter\c!align]%
+ #1\setupalign[\descriptionparameter\c!headalign]%
\ifhbox\descriptionheadbox\unhcopy\else\copy\fi\descriptionheadbox}%
\ht\descriptionheadbox\strutht
\dp\descriptionheadbox\strutdp}
@@ -191,7 +213,7 @@
{\forgetall
\dontcomplain
\hsize\descriptionsheadwidth
- #1\setupalign[\descriptionparameter\c!align]#2%
+ #1\setupalign[\descriptionparameter\c!headalign]#2%
\ifhbox\descriptionheadbox\unhcopy\else\copy\fi\descriptionheadbox}%
\ht\descriptionheadbox\strutht
\dp\descriptionheadbox\strutdp
@@ -256,7 +278,7 @@
\setvalue{@@description\v!serried}%
{\processaction
- [\descriptionparameter\c!width]
+ [\descriptionlocationparameter\c!width]
[ \v!fit=>\let\next\v!fit,
\v!broad=>\let\next\v!broad,
\s!unknown=>\let\next\v!wide,
@@ -309,35 +331,31 @@
\begingroup
\doadaptleftskip{\descriptionparameter\c!margin}%
\showcomposition
- \descriptionsheaddistance\descriptionparameter\c!distance\relax
+ \setlocalhsize % so we can use \localhsize in width assignments
+ \descriptionsheaddistance\descriptionlocationparameter\c!distance\relax
\ifdim\descriptionsheaddistance=\zeropoint\relax
- \doif{\descriptionparameter\c!width}\v!broad{\descriptionsheaddistance=1em}%
+ \doif{\descriptionlocationparameter\c!width}\v!broad{\descriptionsheaddistance=1em}%
\fi
\setbox\descriptionheadbox\hbox
{\forgetall\dontcomplain
\trialtypesettingtrue
\doifelsenothing{\descriptionparameter\c!sample}
- {\dodescriptionhandler
- {\begstrut\descriptionparameter\c!text\ignorespaces\currentdescriptiontext\endstrut}}%
- {\dodescriptionhandler
- {\begstrut\descriptionparameter\c!text\descriptionparameter\c!sample\endstrut}}}%
+ {\dodescriptionhandler\currentdescriptiontext}%
+ {\dodescriptionhandler\currentdescriptionsample}}%
\assignwidth
\descriptionsheadwidth
- {\descriptionparameter\c!width}
+ {\descriptionlocationparameter\c!width}
{\unhcopy\descriptionheadbox}
\descriptionsheaddistance
\setbox\descriptionheadbox\hbox
{\forgetall\dontcomplain
\doifelse{\descriptionparameter\c!location}\v!serried % brrr, hack
- {\dodescriptionhandler
- {\begstrut\descriptionparameter\c!text\currentdescriptiontext\endstrut}}
- {\dodescriptionhandler
- {\vtop
- {\hsize\dimexpr\descriptionsheadwidth-\descriptionsheaddistance\relax
- \begstrut\descriptionparameter\c!text\ignorespaces\currentdescriptiontext\endstrut}}}}%
+ {\dodescriptionhandler\currentdescriptiontext}
+ {\dodescriptionhandler{\boxeddescriptionhead\currentdescriptiontext}}}%
\doifelse{\descriptionparameter\c!aligntitle}\v!no
{\leftdescriptionskip\leftskip\rightdescriptionskip\rightskip}
{\ifcase\nesteddescriptionstate\leftdescriptionskip\leftskip\rightdescriptionskip\rightskip\fi}%
+ \doifsomething{\descriptionparameter\c!align}{\setupalign[\descriptionparameter\c!align]}%
\normalexpanded{\noexpand\indenting[\descriptionparameter\c!indenting]}%
% better a system mode
\ifcase\nesteddescriptionstate
@@ -347,6 +365,13 @@
\fi % now happens elsewhere : \noindent\ignorespaces
\@@resetdescriptionclosesymbol}
+\def\boxeddescriptionhead#1%
+ {\vtop
+ %{\hsize\dimexpr\descriptionsheadwidth-\descriptionsheaddistance\relax
+ {\hsize\descriptionsheadwidth
+ \doifsomething{\descriptionparameter\c!headalign}{\setupalign[\descriptionparameter\c!headalign]}%
+ #1}}
+
\def\@@stopdescription
{\@@placedescriptionclosesymbol
\par % else we loose
@@ -399,10 +424,11 @@
\csname @@description\currentdescriptionlocation\endcsname} % args not needed
\def\@@makedescription[#1]#2%
- {\postponenotes % new, assumes grouping
- \doenumerationcheckconditions
- \dodescriptioncomponent[\c!reference=#1,\c!label={\descriptionparameter\c!text},\c!title={#2},\c!bookmark=,][]%
- \@@dostartdescriptionindeed}
+ {\postponenotes % new, assumes grouping
+ \edef\currentdescriptionreference{#1}%
+ \doenumerationcheckconditions
+ \dodescriptioncomponent[\c!reference=#1,\c!label={\descriptionparameter\c!text},\c!title={#2},\c!bookmark=,\c!list=][]%
+ \@@dostartdescriptionindeed}
\def\dostartstoreddescription
{\@@dostartdescriptionindeed}
@@ -418,7 +444,7 @@
% setup descriptions
-\def\setupdescriptions
+\unexpanded\def\setupdescriptions
{\dodoubleempty\dosetupdescriptions}
\def\dosetupdescriptions[#1][#2]% % beter: \iffirstargument
@@ -433,7 +459,7 @@
% define descriptions
-\def\definedescription
+\unexpanded\def\definedescription
{\dotripleemptywithset\dodefinedescription}
\def\dodefinedescription[#1][#2][#3]% to be simplified cf enumeration
@@ -449,9 +475,9 @@
\fi}
\def\dodefinedescriptioncommands#1#2%
- {\unexpanded\setevalue {#1}{\noexpand\dodescriptioncommand{#1}}%
- \unexpanded\setevalue{\e!start#1}{\noexpand\dodescriptionstart {#1}}%
- \unexpanded\setevalue{\e!stop #1}{\noexpand\dodescriptionstop {#1}}}
+ {\setuevalue {#1}{\noexpand\dodescriptioncommand{#1}}%
+ \setuevalue{\e!start#1}{\noexpand\dodescriptionstart {#1}}%
+ \setuevalue{\e!stop #1}{\noexpand\dodescriptionstop {#1}}}
% handle descriptions
@@ -465,9 +491,14 @@
\def\dodescriptionstart #1{\dodescriptioninit{#1}\dosingleempty\@@startdescription}
\def\dodescriptionstop #1{\dodescriptioninit{#1}\@@stopdescription}
-\def\dodescriptionhandler {\csname\??dd:\descriptionparameter\s!handler:\s!handler \endcsname}
-\def\dohandledescriptiondo {\csname\??dd:\descriptionparameter\s!handler:\s!handler:\s!do \endcsname}
-\def\dohandledescriptionstart{\csname\??dd:\descriptionparameter\s!handler:\s!handler:\s!start\endcsname}
+\def\dodescriptiontext {\csname\??dd:\descriptionparameter\s!handler:\s!handler:\s!text \endcsname}
+\def\dodescriptionnumber {\csname\??dd:\descriptionparameter\s!handler:\s!handler:\s!number\endcsname}
+\def\dodescriptionhandler {\csname\??dd:\descriptionparameter\s!handler:\s!handler \endcsname}
+\def\dohandledescriptiondo {\csname\??dd:\descriptionparameter\s!handler:\s!handler:\s!do \endcsname}
+\def\dohandledescriptionstart{\csname\??dd:\descriptionparameter\s!handler:\s!handler:\s!start \endcsname}
+
+\def\currentdescriptiontext {\begstrut\dodescriptiontext\endstrut}
+\def\currentdescriptionsample{\begstrut\descriptionparameter\c!text\descriptionparameter\c!sample\endstrut}
% implementation
@@ -476,28 +507,33 @@
\newtoks \everydescription
+\setvalue{\??dd:\v!description:\s!handler:\s!text }{\@@dodescriptiontext}
\setvalue{\??dd:\v!description:\s!handler }{\@@dodescriptionhandler}
\setvalue{\??dd:\v!description:\s!handler:\s!do }{\@@somedescription}
\setvalue{\??dd:\v!description:\s!handler:\s!start}{\@@startsomedescription}
\def\@@dodescriptionhandler#1%
- {\strut
- \dodescriptionheadtext{#1}%
- \iftrialtypesetting \else
+ {\iftrialtypesetting \else
+ \begingroup
\currentdescriptionsynchronize
- \dosetattribute{destination}\currentdescriptionattribute % todo
- \fi}
+ \attribute\destinationattribute\currentdescriptionattribute\relax % todo, whole text
+ \forcecolorhack
+ \endgroup
+ \fi#1}
+
+\def\@@dododescriptiontext
+ {\ctxlua{structure.lists.savedtitle("\currentdescriptionmain",\currentdescriptionnumberentry)}}
-\def\dodescriptionheadtext#1% title
+\def\@@dodescriptiontext
{\begingroup
\dosetdescriptionattributes\c!headstyle\c!headcolor
\the\everydescription
- \descriptionparameter\c!command{\strut#1}% probably incomplete
+ \descriptionparameter\c!command{\strut\descriptionparameter\c!text\ignorespaces\@@dododescriptiontext}% probably incomplete
\endgroup}
% setup enumerations
-\def\setupenumerations
+\unexpanded\def\setupenumerations
{\dodoubleempty\dosetupenumerations}
\def\dodosetupenumerations[#1][#2]%
@@ -514,7 +550,7 @@
% define enumerations
-\def\defineenumeration
+\unexpanded\def\defineenumeration
{\dotripleemptywithset\dodefineenumeration}
\def\dodefineenumeration[#1][#2][#3]% #2 or #3 assignment
@@ -529,13 +565,13 @@
{\normalexpanded{\noexpand\dodefineenumerationcommands{#1}{\recurselevel}{\@@subslevel\v!sub}{\??dd\@@subslevel#1}}%
\edef\@@subslevel{\@@subslevel\v!sub}}%
\else % clone
- \getparameters[\??dd#1][\s!counter=#2,#3]%
+ \getparameters[\??dd#1][\s!parent=\??dd#2,#3]%
\let\@@subslevel\empty
\dorecurse{\descriptionparameter\c!levels}
{\normalexpanded{\noexpand\dodefineenumerationcommands{#1}{\recurselevel}{\@@subslevel}{\??dd\@@subslevel#2}}%
\edef\@@subslevel{\@@subslevel\v!sub}}%
\fi
- \edef\currentdescriptioncounter{\descriptionparameter\c!number}%
+ \edef\currentdescriptioncounter{\descriptionparameter\s!counter}%
\ifx\currentdescriptioncounter\empty
\ifdone\dodefineenumerationcounter{#1}\fi
\else\ifx\currentdescriptioncounter\v!yes
@@ -544,8 +580,10 @@
\ifdone\dodefineenumerationcounter{#1}\fi
\else
\letvalue{\??dd#1\s!counter}\currentdescriptioncounter % ?
+ %[[#1:\currentdescriptioncounter]]
\doifstructurecounterelse{\currentdescriptioncounter}{}{\dodefineenumerationcounter\currentdescriptioncounter}%
- \fi\fi\fi}
+ \fi\fi\fi
+ \dosetupenumerationcounter{#1}} % new
\newtoks\everysetupenumerationcounter
\let\currentenumerationcountername\empty
@@ -565,9 +603,9 @@
\def\dodefineenumerationcommands#1#2#3#4% since we use \currentdescription, we need an edef
{\setevalue{\??dd#3#1\s!parent}{#4}%
- \unexpanded\setevalue {#3#1}{\noexpand\doenumerationcommand{#1}{#2}{#3}}%
- \unexpanded\setevalue{\e!start#3#1}{\noexpand\doenumerationstart {#1}{#2}{#3}}%
- \unexpanded\setevalue{\e!stop #3#1}{\noexpand\doenumerationstop {#1}{#2}{#3}}}
+ \setuevalue {#3#1}{\noexpand\doenumerationcommand{#1}{#2}{#3}}%
+ \setuevalue{\e!start#3#1}{\noexpand\doenumerationstart {#1}{#2}{#3}}%
+ \setuevalue{\e!stop #3#1}{\noexpand\doenumerationstop {#1}{#2}{#3}}}
% handle enumeration
@@ -592,98 +630,96 @@
\newtoks \everyenumeration
\newconditional\enumerationnumberenabled
-\chardef \enumerationcouplingmode \zerocount
\def \enumerationdisablenumbersignal {-}
\appendtoks \disablepseudocaps \to \everyenumeration % sorry, uppercase causes troubles
-\letvalue{\??dd:\c!couplingway:\v!local }\plusone
-\letvalue{\??dd:\c!couplingway:\v!global}\plustwo
+\setvalue{\??dd:\v!enumeration:\s!handler:\s!number}{\@@doenumerationnumber}
+\setvalue{\??dd:\v!enumeration:\s!handler:\s!text }{\@@doenumerationtext}
+\setvalue{\??dd:\v!enumeration:\s!handler }{\@@doenumerationhandler}
+\setvalue{\??dd:\v!enumeration:\s!handler:\s!do }{\@@somedescription}
+\setvalue{\??dd:\v!enumeration:\s!handler:\s!start }{\@@startsomedescription}
-\setvalue{\??dd:\v!enumeration:\s!handler }{\@@doenumerationhandler}
-\setvalue{\??dd:\v!enumeration:\s!handler:\s!do }{\@@somedescription}
-\setvalue{\??dd:\v!enumeration:\s!handler:\s!start}{\@@startsomedescription}
+\let\@@doenumerationhandler\@@dodescriptionhandler
-\def\@@doenumerationhandler#1%
- {\strut
- \ifconditional\enumerationnumberenabled
+% \def\currentenumerationfullnumber
+% {\ctxlua{structure.lists.savedprefixednumber("\currentdescriptionmain",\currentdescriptionnumberentry)}}
+
+\def\@@doenumerationnumber
+ {\ctxlua{structure.lists.savedprefixednumber("\currentdescriptionmain",\currentdescriptionnumberentry)}}
+
+\def\@@dodoenumerationtext
+ {\ctxlua{structure.lists.savedtitle("\currentdescriptionmain",\currentdescriptionnumberentry)}}
+
+\def\doenumerationnumber
+ {\descriptionparameter\c!left
+ \descriptionparameter\c!starter
+ \dodescriptionnumber
+ \descriptionparameter\c!stopper
+ \descriptionparameter\c!right}
+
+\def\@@doenumerationtext
+ {\ifconditional\enumerationnumberenabled
\iftrialtypesetting
- \doenumerationfullnumber\showdntext{#1}%
+ \doenumerationfullnumber\showdntext
\doenumerationcouplingsymbol
\else
\doenumerationregistercoupling
- \doenumerationfullnumber\showdntext{#1}%
+ \doenumerationfullnumber\showdntext
\doenumerationcouplingsymbol
\fi
\else
- \doenumerationfullnumber\showdnpuretext{#1}%
- \fi
- \iftrialtypesetting \else
- \currentdescriptionsynchronize
- \dosetattribute{destination}\currentdescriptionattribute % todo
+ \doenumerationfullnumber\showdnpuretext
\fi}
+\def\doenumerationfullnumber#1% text, title
+ {\begingroup
+ \dosetdescriptionattributes\c!headstyle\c!headcolor
+ \the\everyenumeration
+ \descriptionparameter\c!command{\strut#1\doenumerationnumber\doenumerationextratext}%
+ \endgroup}
+
+\def\doenumerationextratext
+ {\doif{\descriptionparameter\c!title}\v!yes
+ {\begingroup
+ \dosetdescriptionattributes\c!titlestyle\c!titlecolor
+ \hskip\descriptionparameter\c!titledistance
+ \descriptionparameter\c!titlecommand
+ {\descriptionparameter\c!titleleft
+ \begstrut\@@dodoenumerationtext\endstrut
+ \descriptionparameter\c!titleright}%
+ \endgroup}}
+
\def\doenumerationsavecounter {\savestructurecounter[\currentdescriptionnumber]}
\def\doenumerationrestorecounter {\restorestructurecounter[\currentdescriptionnumber]}
\def\doenumerationincrementcounter{\doincrementsubstructurecounter[\currentdescriptionnumber][\currentdescriptionlevel]}
+% to be used in for instance:
+%
+% coupling=questions .... coupling=answers
+%
+% we will provide some more control, like skipping etc or reference relates
+
\def\doenumerationcheckconditions
{\doifelse{\descriptionparameter\c!number}\v!yes
{\ifx\currentdescriptionreference\enumerationdisablenumbersignal
\setfalse\enumerationnumberenabled \else \settrue\enumerationnumberenabled
\fi}%
{\setfalse\enumerationnumberenabled}%
- \chardef\enumerationcouplingmode \iflocation
- \executeifdefined{\??dd:\c!couplingway:\descriptionparameter\c!coupling}\zerocount
- \else
- \zerocount
- \fi}
+ \edef\currentenumerationcoupling{\descriptionparameter\c!coupling}}
\def\doenumerationregistercoupling
{\iflocation
- \ifcase\enumerationcouplingmode
- \or
- % todo
- \or
- % todo
- \fi
+ % no area yet, we will provide variants some day
\fi}
\def\doenumerationcouplingsymbol
- {\iflocation\ifcase\enumerationcouplingmode \else
- % todo
- \fi\fi}
-
-\def\currentdescriptiontext
- {\ctxlua{structure.lists.savedtitle("\currentdescriptionmain",\currentdescriptionnumberentry)}}
+ {\iflocation \ifx\currentenumerationcoupling\empty\else
+ \symbolreference[order(description:\currentenumerationcoupling:\nextinternalorderreference)]%
+ \fi \fi}
-\def\currentenumerationfullnumber
- {\ctxlua{structure.lists.savednumber("\currentdescriptionmain",\currentdescriptionnumberentry)}}
-
-\def\doenumerationfullnumber#1#2% text, title
- {\begingroup
- \dosetdescriptionattributes\c!headstyle\c!headcolor
- \the\everyenumeration
- \descriptionparameter\c!command
- {\strut
- #1%
- \descriptionparameter\c!left
- \currentenumerationfullnumber
- % save cq. treat expansion etc
- \doiftext{#2} % always true anyway
- {\doif{\descriptionparameter\c!title}\v!yes
- {\begingroup
- \dosetdescriptionattributes\c!titlestyle\c!titlecolor
- \hskip\descriptionparameter\c!titledistance
- \descriptionparameter\c!titlecommand
- {\descriptionparameter\c!titleleft
- \begstrut#2\endstrut
- \descriptionparameter\c!titleright}%
- \endgroup}}%
- %
- \descriptionparameter\c!stopper
- \descriptionparameter\c!right}%
- \endgroup}
+\def\skipenumerationcoupling[#1]% e.g. for questions with no answer
+ {\ctxlua{jobreferences.setnextorder("description","#1")}}
\def\showdnpuretext{\strut\descriptionparameter\c!text} % geen spatie
\def\showdnlisttext{\descriptionparameter\c!listtext} % space in default
@@ -720,29 +756,59 @@
\def\dododescriptioncomponent[#1][#2]% #1=interfaced-settings, #2=optional user data
{\begingroup % similar to structure so we might generalize this
\getparameters[\??dd\currentdescription][#1]%
- \edef\currentdescriptionexpansion{\descriptionparameter\c!expansion}%
+ %
+ \xdef\currentdescriptionexpansion {\descriptionparameter\c!expansion}%
+ \xdef\currentdescriptionxmlsetup {\descriptionparameter\c!xmlsetup}%
+ \xdef\currentdescriptioncatcodes {\descriptionparameter\s!catcodes}%
+ \xdef\currentdescriptionlabel {\descriptionparameter\c!label}%
+ \xdef\currentdescriptionreference {\descriptionparameter\c!reference}%
+ \xdef\currentdescriptionreferenceprefix{\descriptionparameter\c!referenceprefix}%
+ %xdef\currentdescriptionshownumber {\descriptionparameter\c!number}%
+ \xdef\currentdescriptionsaveinlist {\descriptionparameter\c!saveinlist}%
+ \xdef\currentdescriptionincrementnumber{\descriptionparameter\c!incrementnumber}%
+ %
+ \ifx\currentdescriptionexpansion\empty
+ \glet\currentdescriptionexpansion\v!no
+ \fi
+ %
\ifx\currentdescriptionexpansion\s!xml
- \xdef\currentdescriptiontitle {\detokenizeddescriptionparameter\c!title}%
- \xdef\currentdescriptionbookmark{\detokenizeddescriptionparameter\c!bookmark}%
\xmlstartraw
- \xdef\currentdescriptionlisttitle {\descriptionparameter\c!title}%
+ \xdef\currentdescriptiontitle {\descriptionparameter\c!title}%
+ \xdef\currentdescriptionbookmark{\descriptionparameter\c!bookmark}%
+ \xdef\currentdescriptionmarking {\descriptionparameter\c!marking}%
+ \xdef\currentdescriptionlist {\descriptionparameter\c!list}%
\xmlstopraw
+ \ifx\currentdescriptionlist\empty
+ \globallet\currentdescriptionlist\currentdescriptiontitle
+ \fi
\globallet\currentdescriptioncoding\s!xml
\else
\ifx\currentdescriptionexpansion\v!yes
\xdef\currentdescriptiontitle {\descriptionparameter\c!title}%
\xdef\currentdescriptionbookmark{\descriptionparameter\c!bookmark}%
+ \xdef\currentdescriptionmarking {\descriptionparameter\c!marking}%
+ \xdef\currentdescriptionlist {\descriptionparameter\c!list}%
\else
\xdef\currentdescriptiontitle {\detokenizeddescriptionparameter\c!title}%
\xdef\currentdescriptionbookmark{\detokenizeddescriptionparameter\c!bookmark}%
+ \xdef\currentdescriptionmarking {\detokenizeddescriptionparameter\c!marking}%
+ \xdef\currentdescriptionlist {\detokenizeddescriptionparameter\c!list}%
+ \iflocation \ifx\currentdescriptionbookmark\empty
+ \begingroup
+ \simplifycommands
+ \xdef\currentdescriptionbookmark{\detokenize\expandafter{\normalexpanded{\descriptionparameter\c!title}}}%
+ \endgroup
+ \fi \fi
+ \fi
+ \ifx\currentdescriptionlist\empty
+ \globallet\currentdescriptionlist\currentdescriptiontitle
\fi
- \globallet\currentdescriptionlisttitle \currentdescriptiontitle
\globallet\currentdescriptioncoding\s!tex
\fi
- \xdef\currentdescriptionlabel {\descriptionparameter\c!label}%
- \xdef\currentdescriptionreference{\descriptionparameter\c!reference}%
%
- \doif{\descriptionparameter\c!title}\v!none{\global\nodescriptioncaptiontrue\global\nodescriptionnumbertrue}% will become obsolete
+ \ifx\currentdescriptiontitle\v!none % will become obsolete
+ \global\nodescriptioncaptiontrue\global\nodescriptionnumbertrue
+ \fi
%
\ifconditional\enumerationnumberenabled
\doifelsedescriptioncomponent\donothing\doenumerationincrementcounter
@@ -753,16 +819,19 @@
\glet\currentdescriptionsynchronize\relax
\glet\currentdescriptionattribute \relax
\else
- \setnextinternalreference
+ %\setnextinternalreference
+ \setnextinternalreferences{description}\currentdescriptionname % plural
\xdef\currentdescriptionnumberentry{\ctxlua{structure.lists.push{
metadata = {
kind = "description",
name = "\currentdescriptionname",
level = structure.sections.currentlevel(),
catcodes = \the\catcodetable,
+ % \currentdirectionparameters
},
references = {
internal = \nextinternalreference,
+ order = \nextinternalorderreference,
reference = "\currentdescriptionreference",
referenceprefix = "\referenceprefix",
block = "\currentstructureblock",
@@ -774,8 +843,8 @@
\ifx\currentdescriptionbookmark\currentdescriptiontitle \else
bookmark = \!!bs\detokenize\expandafter{\currentdescriptionbookmark}\!!es,
\fi
- \ifx\currentdescriptionlisttitle\currentdescriptiontitle \else % \ifx\currentdescriptionsaveinlist\v!no
- list = \!!bs\detokenize\expandafter{\currentdescriptionlisttitle }\!!es,
+ \ifx\currentdescriptionlist\currentdescriptiontitle \else % \ifx\currentdescriptionsaveinlist\v!no
+ list = \!!bs\detokenize\expandafter{\currentdescriptionlist }\!!es,
\fi % \fi
},
\ifconditional\enumerationnumberenabled
@@ -789,10 +858,11 @@
connector = \!!bs\descriptionparameter\c!prefixconnector\!!es,
},
numberdata = {
- numbers = structure.counters.compact("\currentdescriptionname",nil,true),
+ numbers = structure.counters.compact("\currentdescriptionnumber",nil,true), % ! number can be cloned
separatorset = "\descriptionparameter\c!numberseparatorset",
conversion = "\descriptionparameter\c!numberconversion",
conversionset = "\descriptionparameter\c!numberconversionset",
+ starter = \!!bs\descriptionparameter\c!numberstarter\!!es,
stopper = \!!bs\descriptionparameter\c!numberstopper\!!es,
segments = "\descriptionparameter\c!numbersegments",
},
@@ -800,11 +870,19 @@
userdata = structure.helpers.touserdata(\!!bs\detokenize{#2}\!!es)
}
}}%
- \xdef\currentdescriptionattribute {\ctxlua {tex.write(jobreferences.setinternalreference("\referenceprefix","\currentdescriptionreference",\nextinternalreference,"\@@iafocus"))}}%
- \xdef\currentdescriptionsynchronize{\ctxlatelua{structure.lists.enhance(\currentdescriptionnumberentry)}}%
+ \xdef\currentdescriptionattribute {\ctxlua {tex.write(jobreferences.setinternalreference("\referenceprefix","\currentdescriptionreference",\nextinternalreference,"\@@iafocus"))}}%
+ \xdef\currentdescriptionsynchronize{\ctxlatelua{structure.lists.enhance(\currentdescriptionnumberentry)}}%
\fi
\endgroup}
+% This is not so nice, some day i'll just store the number with the entry
+% and deal with all at the Lua end, but first we need to be able to set
+% macros.
+
+\def\reinstatedescriptionnumberentry#1%
+ {\xdef\currentdescriptionattribute {\ctxlua {tex.write(jobreferences.getinternalreference(#1))}}%
+ \xdef\currentdescriptionsynchronize{\ctxlatelua{structure.lists.enhance(#1)}}}
+
\installstructurelistprocessor{description}{\usestructurelistprocessor{number+title}}
% labels, we could share with enumerations and forget about the text; anyhow, figure
@@ -814,10 +892,10 @@
% unfinished
-\def\setuplabels
+\unexpanded\def\setuplabels
{\getparameters[\??db]}
-\def\definelabel
+\unexpanded\def\definelabel
{\dotripleargumentwithset\dodefinelabel}
\def\dodefinelabel[#1][#2][#3]% #2 or #3 assignment
@@ -835,12 +913,12 @@
\fi}
\def\dodefinelabelcommands#1#2%
- {\unexpanded\setevalue {#1}{\noexpand\dolabelnumbercommand {#1}}%
- \unexpanded\setevalue{\c!reset #1}{\noexpand\doresetlabelnumber {#1}}%
- %\unexpanded\setevalue{\c!set #1}{\noexpand\dosetlabelnumber {#1}}% [#2] or {#2} ?
- \unexpanded\setevalue{\e!next #1}{\noexpand\donextlabelnumber {#1}}%
- \unexpanded\setevalue{\e!increment#1}{\noexpand\doincrementlabelnumber{#1}}%
- \unexpanded\setevalue{\c!current #1}{\noexpand\docurrentlabelnumber {#1}}}
+ {\setuevalue {#1}{\noexpand\dolabelnumbercommand {#1}}%
+ \setuevalue{\c!reset #1}{\noexpand\doresetlabelnumber {#1}}%
+ %\setuevalue{\c!set #1}{\noexpand\dosetlabelnumber {#1}}% [#2] or {#2} ?
+ \setuevalue{\e!next #1}{\noexpand\donextlabelnumber {#1}}%
+ \setuevalue{\e!increment#1}{\noexpand\doincrementlabelnumber{#1}}%
+ \setuevalue{\c!current #1}{\noexpand\docurrentlabelnumber {#1}}}
% this is just for downward compatibility, we might drop it
@@ -884,7 +962,7 @@
% to be reimplmented
-\def\setupindentations
+\unexpanded\def\setupindentations
{\dodoubleempty\dosetupindentations}
\def\dosetupindentations[#1][#2]%
@@ -897,7 +975,7 @@
\def\dodosetupindentations[#1][#2]%
{\getparameters[\??ds#1][#2]}
-\def\defineindenting
+\unexpanded\def\defineindenting
{\dodoubleargumentwithset\dodefineindenting}
\def\dodefineindenting[#1][#2]%
@@ -905,9 +983,9 @@
[\c!text,\c!separator,\c!width,\c!style,\c!color,
\c!headstyle,\c!sample,\c!before,\c!after,\c!distance]%
\getparameters[\??ds#1][#2]%
- \unexpanded\setvalue {#1}{\dododefineindenting{#1}{0}{1}}%
- \unexpanded\setvalue {\v!sub#1}{\dododefineindenting{#1}{1}{2}}%
- \unexpanded\setvalue{\v!sub\v!sub#1}{\dododefineindenting{#1}{2}{3}}}
+ \setuvalue {#1}{\dododefineindenting{#1}{0}{1}}%
+ \setuvalue {\v!sub#1}{\dododefineindenting{#1}{1}{2}}%
+ \setuvalue{\v!sub\v!sub#1}{\dododefineindenting{#1}{2}{3}}}
\def\dododefineindenting#1#2#3%
{\par
@@ -953,6 +1031,7 @@
\c!hang=,
\c!sample=,
\c!align=,
+ \c!headalign=,
\c!margin=\v!no,
\c!before=\blank,
\c!inbetween=\blank,
@@ -970,12 +1049,35 @@
[\c!location=\v!top,
\c!text=,
\c!way=\v!by\v!text,
+ \c!prefix=\v!no,
\c!prefixconnector=.,
+ \c!starter=,
\c!stopper=,
\c!number=\v!yes, % else description
\c!start=0,
\s!parent=\??dd]
+\setupdescriptions
+ [\c!expansion=\v!no,
+ \c!xmlsetup=,
+ \s!catcodes=,
+ \c!saveinlist=\v!yes]
+
+\setupenumerations
+ [\c!expansion=\v!no,
+ \c!xmlsetup=,
+ \s!catcodes=,
+ \c!saveinlist=\v!yes]
+
+\setupdescriptions
+ [\c!width=7em,
+ \c!distance=1em]
+
+\setupdescriptions[\c!width:\c!top=\localhsize] % undocumented, only width and distance
+% \setupdescriptions[\c!width:\c!left=7em,\c!distance=1em]
+% \setupdescriptions[\c!width:\c!right=7em,\c!distance=1em]
+
+
\setuplabels
[\s!parent=\??dn]
diff --git a/Master/texmf-dist/tex/context/base/strc-doc.lua b/Master/texmf-dist/tex/context/base/strc-doc.lua
index cb279e32065..7faf0d5b393 100644
--- a/Master/texmf-dist/tex/context/base/strc-doc.lua
+++ b/Master/texmf-dist/tex/context/base/strc-doc.lua
@@ -1,21 +1,28 @@
if not modules then modules = { } end modules ['strc-doc'] = {
version = 1.001,
- comment = "companion to strc-doc.tex",
+ comment = "companion to strc-doc.mkiv",
author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
copyright = "PRAGMA ADE / ConTeXt Development Team",
license = "see context related readme files"
}
+-- todo: associate counter with head
+
+-- we need to freeze and document this module
+
local next, type = next, type
-local format, gsub, find, concat = string.format, string.gsub, string.find, table.concat
+local format, gsub, find, concat, gmatch, match = string.format, string.gsub, string.find, table.concat, string.gmatch, string.match
local texsprint, texwrite = tex.sprint, tex.write
+local concat = table.concat
+local max, min = math.max, math.min
local ctxcatcodes = tex.ctxcatcodes
local variables = interfaces.variables
-if not trackers then trackers = { register = function() end } end
+--~ if not trackers then trackers = { register = function() end } end
local trace_sectioning = false trackers.register("structure.sectioning", function(v) trace_sectioning = v end)
+local trace_detail = false trackers.register("structure.detail", function(v) trace_detail = v end)
local function report(...)
--~ print(...)
@@ -58,7 +65,7 @@ function documents.reset()
data.forced = { }
data.ownnumbers = { }
data.status = { }
- data.checkers = { }
+--~ data.checkers = { }
data.depth = 0
end
@@ -130,6 +137,8 @@ storage.register("structure/sections/levelmap", structure.sections.levelmap, "st
sections.verbose = true
+levelmap.block = -1
+
function sections.setlevel(name,level) -- level can be number or parent (=string)
local l = tonumber(level)
if not l then
@@ -157,6 +166,7 @@ function sections.setblock(name)
end
function sections.pushblock(name)
+ structure.counters.check(0) -- we assume sane usage of \page between blocks
local block = name or data.block
data.blocks[#data.blocks+1] = block
data.block = block
@@ -187,15 +197,18 @@ end
function sections.somelevel(given)
-- old number
local numbers, ownnumbers, forced, status, olddepth = data.numbers, data.ownnumbers, data.forced, data.status, data.depth
---~ print("old",olddepth,given.metadata.name,levelmap[given.metadata.name])
- local newdepth = tonumber(levelmap[given.metadata.name] or (olddepth > 0 and olddepth) or 1) -- hm, levelmap only works for section-*
---~ print("new",newdepth)
+ local givenname = given.metadata.name
+ local mappedlevel = levelmap[givenname]
+ local newdepth = tonumber(mappedlevel or (olddepth > 0 and olddepth) or 1) -- hm, levelmap only works for section-*
local directives = given.directives
local resetset = (directives and directives.resetset) or ""
- local resetter = sets.getall("structure:resets",data.block,resetset)
+ -- local resetter = sets.getall("structure:resets",data.block,resetset)
-- a trick to permits userdata to overload title, ownnumber and reference
-- normally these are passed as argument but nowadays we provide several
-- interfaces (we need this because we want to be compatible)
+ if trace_detail then
+ logs.report("structure","name '%s', mapped level '%s', old depth '%s', new depth '%s', reset set '%s'",givenname,mappedlevel,olddepth,newdepth,resetset)
+ end
local u = given.userdata
if u then
-- kind of obsolete as we can pass them directly anyway
@@ -209,7 +222,9 @@ function sections.somelevel(given)
if newdepth > olddepth then
for i=olddepth+1,newdepth do
local s = tonumber(sets.get("structure:resets",data.block,resetset,i))
---~ logs.report("structure >","old: %s, new:%s, reset: %s (%s: %s)",olddepth,newdepth,s,resetset,table.concat(resetter,","))
+ if trace_detail then
+ logs.report("structure","new>old (%s>%s), reset set '%s', reset value '%s', current '%s'",olddepth,newdepth,resetset,s or "?",numbers[i] or "?")
+ end
if not s or s == 0 then
numbers[i] = numbers[i] or 0
ownnumbers[i] = ownnumbers[i] or ""
@@ -222,7 +237,9 @@ function sections.somelevel(given)
elseif newdepth < olddepth then
for i=olddepth,newdepth+1,-1 do
local s = tonumber(sets.get("structure:resets",data.block,resetset,i))
---~ logs.report("structure <","old: %s, new:%s, reset: %s (%s: %s)",olddepth,newdepth,s,resetset,table.concat(resetter,","))
+ if trace_detail then
+ logs.report("structure","new<old (%s<%s), reset set '%s', reset value '%s', current '%s'",olddepth,newdepth,resetset,s or "?",numbers[i] or "?")
+ end
if not s or s == 0 then
numbers[i] = numbers[i] or 0
ownnumbers[i] = ownnumbers[i] or ""
@@ -233,13 +250,14 @@ function sections.somelevel(given)
status[i] = nil
end
end
+ structure.counters.check(newdepth)
ownnumbers[newdepth] = given.numberdata.ownnumber or ""
given.numberdata.ownnumber = nil
data.depth = newdepth
-- new number
olddepth = newdepth
if given.metadata.increment then
- local oldn, newn = numbers[newdepth], 0
+ local oldn, newn = numbers[newdepth] or 0, 0
local fd = forced[newdepth]
if fd then
if fd[1] == "add" then
@@ -251,21 +269,31 @@ function sections.somelevel(given)
newn = 1 -- maybe zero is nicer
end
forced[newdepth] = nil
+ if trace_detail then
+ logs.report("structure","old depth '%s', new depth '%s, old n '%s', new n '%s', forced '%s'",olddepth,newdepth,oldn,newn,concat(fd,""))
+ end
elseif newn then
newn = oldn + 1
+ if trace_detail then
+ logs.report("structure","old depth '%s', new depth '%s, old n '%s', new n '%s', increment",olddepth,newdepth,oldn,newn)
+ end
else
local s = tonumber(sets.get("structure:resets",data.block,resetset,newdepth))
---~ logs.report("structure =","old: %s, new:%s, reset: %s (%s: %s)",olddepth,newdepth,s,resetset,table.concat(resetter,","))
- if not s or s == 0 then
+ if not s then
+ newn = oldn or 0
+ elseif s == 0 then
newn = oldn or 0
else
newn = s - 1
end
+ if trace_detail then
+ logs.report("structure","old depth '%s', new depth '%s, old n '%s', new n '%s', reset",olddepth,newdepth,oldn,newn)
+ end
end
numbers[newdepth] = newn
end
status[newdepth] = given or { }
- for k, v in pairs(data.checkers) do
+ for k, v in next, data.checkers do
if v[1] == newdepth and v[2] then
v[2](k)
end
@@ -284,6 +312,9 @@ function sections.somelevel(given)
if #ownnumbers > 0 then
numberdata.ownnumbers = table.fastcopy(ownnumbers)
end
+ if trace_detail then
+ logs.report("structure","name '%s', numbers '%s', own numbers '%s'",givenname,concat(numberdata.numbers, " "),concat(numberdata.ownnumbers, " "))
+ end
given.references.section = sections.save(given)
-- given.numberdata = nil
end
@@ -293,7 +324,7 @@ function sections.writestatus()
local numbers, ownnumbers, status, depth = data.numbers, data.ownnumbers, data.status, data.depth
local d = status[depth]
local o = concat(ownnumbers,".",1,depth)
- local n = (numbers and concat(numbers,".",1,depth)) or 0
+ local n = (numbers and concat(numbers,".",1,min(depth,#numbers))) or 0
local l = d.titledata.title or ""
local t = (l ~= "" and l) or d.titledata.title or "[no title]"
local m = d.metadata.name
@@ -310,7 +341,7 @@ end
function sections.setnumber(depth,n)
local forced, depth, new = data.forced, depth or data.depth, tonumber(n)
if type(n) == "string" then
- if n:find("^[%+%-]") then
+ if find(n,"^[%+%-]") then
forced[depth] = { "add", new }
else
forced[depth] = { "set", new }
@@ -324,8 +355,25 @@ function sections.number_at_depth(depth)
return data.numbers[tonumber(depth) or sections.getlevel(depth) or 0] or 0
end
-function sections.getnumber(depth)
- return texwrite(data.numbers[depth] or 0)
+function sections.numbers()
+ return data.numbers
+end
+
+function sections.matching_till_depth(depth,numbers,parentnumbers)
+ local dn = parentnumbers or data.numbers
+ local ok = false
+ for i=1,depth do
+ if dn[i] == numbers[i] then
+ ok = true
+ else
+ return false
+ end
+ end
+ return ok
+end
+
+function sections.getnumber(depth) -- redefined later ...
+ texwrite(data.numbers[depth] or 0)
end
function sections.set(key,value)
@@ -341,7 +389,7 @@ function sections.structuredata(depth,key,default,honorcatcodetable) -- todo: sp
if not depth or depth == 0 then depth = data.depth end
local data = data.status[depth]
local d = data
- for k in key:gmatch("([^.]+)") do
+ for k in gmatch(key,"([^.]+)") do
if type(d) == "table" then
d = d[k]
if not d then
@@ -383,8 +431,8 @@ function sections.userdata(depth,key,default)
end
end
-function sections.setchecker(name,level,command)
- data.checkers[name] = (name and command and level > 0 and { level, command }) or nil
+function sections.setchecker(name,level,command) -- hm, checkers are not saved
+ data.checkers[name] = (name and command and level >= 0 and { level, command }) or nil
end
function sections.current()
@@ -432,16 +480,20 @@ function sections.typesetnumber(entry,kind,...) -- kind='section','number','pref
local conversionset = ""
local conversion = ""
local stopper = ""
+ local starter = ""
local connector = ""
local set = ""
local segments = ""
local criterium = ""
- for _, data in ipairs { ... } do -- can be multiple parametersets
+ local dataset = { ... }
+ for d=1,#dataset do
+ local data = dataset[d] -- can be multiple parametersets
if data then
if separatorset == "" then separatorset = data.separatorset or "" end
if conversionset == "" then conversionset = data.conversionset or "" end
if conversion == "" then conversion = data.conversion or "" end
if stopper == "" then stopper = data.stopper or "" end
+ if starter == "" then starter = data.starter or "" end
if connector == "" then connector = data.connector or "" end
if set == "" then set = data.set or "" end
if segments == "" then segments = data.segments or "" end
@@ -449,9 +501,10 @@ function sections.typesetnumber(entry,kind,...) -- kind='section','number','pref
end
end
if separatorset == "" then separatorset = "default" end
- if conversionset == "" then conversionset = "default" end
+ if conversionset == "" then conversionset = "default" end -- not used
if conversion == "" then conversion = nil end
if stopper == "" then stopper = nil end
+ if starter == "" then starter = nil end
if connector == "" then connector = nil end
if set == "" then set = "default" end
if segments == "" then segments = nil end
@@ -466,9 +519,9 @@ function sections.typesetnumber(entry,kind,...) -- kind='section','number','pref
criterium = 0
end
--
- local firstprefix, lastprefix = 0, 100
+ local firstprefix, lastprefix = 0, 16
if segments then
- local f, l = (tostring(segments)):match("^(.-):(.+)$")
+ local f, l = match(tostring(segments),"^(.-):(.+)$")
if f and l then
-- 0:100, chapter:subsubsection
firstprefix = tonumber(f) or sections.getlevel(f) or 0
@@ -486,12 +539,13 @@ function sections.typesetnumber(entry,kind,...) -- kind='section','number','pref
if numbers then
local done, preceding = false, false
local function process(index) -- move to outer
+ -- todo: too much (100 steps)
local number = numbers and (numbers[index] or 0)
local ownnumber = ownnumbers and ownnumbers[index] or ""
if number > criterium or (ownnumber ~= "") then
- local block = entry.block
+ local block = (entry.block ~= "" and entry.block) or sections.currentblock() -- added
if preceding then
- local separator = sets.get("structure:separators",b,s,preceding,".")
+ local separator = sets.get("structure:separators",block,separatorset,preceding,".")
if separator then
processors.sprint(ctxcatcodes,separator)
end
@@ -505,7 +559,7 @@ function sections.typesetnumber(entry,kind,...) -- kind='section','number','pref
-- traditional (e.g. used in itemgroups)
texsprint(ctxcatcodes,format("\\convertnumber{%s}{%s}",conversion,number))
else
- local theconversion = sets.get("structure:conversions",block,conversion,index,"numbers")
+ local theconversion = sets.get("structure:conversions",block,conversionset,index,"numbers")
processors.sprint(ctxcatcodes,theconversion,function(str)
return format("\\convertnumber{%s}{%s}",str or "numbers",number)
end)
@@ -517,6 +571,9 @@ function sections.typesetnumber(entry,kind,...) -- kind='section','number','pref
end
--
local prefixlist = set and sets.getall("structure:prefixes","",set) -- "" == block
+ if starter then
+ processors.sprint(ctxcatcodes,starter)
+ end
if prefixlist and (kind == 'section' or kind == 'prefix') then
-- find valid set (problem: for sectionnumber we should pass the level)
-- if kind == "section" then
@@ -587,17 +644,59 @@ function sections.typesetnumber(entry,kind,...) -- kind='section','number','pref
processors.sprint(ctxcatcodes,stopper)
end
else
- report("error: no numbers")
+ -- report("error: no numbers")
end
end
end
-function sections.fullnumber(depth)
+function sections.title()
+ local sc = sections.current()
+ if sc then
+ helpers.title(sc.titledata.title,sc.metadata)
+ end
+end
+
+function sections.findnumber(depth,what)
local data = data.status[depth or data.depth]
if data then
- local sectiondata = jobsections.collected[data.references.section]
+ local index = data.references.section
+ local collected = jobsections.collected
+ local sectiondata = collected[index]
if sectiondata and sectiondata.hidenumber ~= true then -- can be nil
- sections.typesetnumber(sectiondata,'section',sectiondata)
+ if what == variables.first then
+ for i=index,1,-1 do
+ local s = collected[i]
+ local n = s.numbers
+ if #n == depth and n[depth] and n[depth] ~= 0 then
+ sectiondata = s
+ elseif #n < depth then
+ break
+ end
+ end
+ elseif what == variables.last then
+ for i=index,#collected do
+ local s = collected[i]
+ local n = s.numbers
+ if #n == depth and n[depth] and n[depth] ~= 0 then
+ sectiondata = s
+ elseif #n < depth then
+ break
+ end
+ end
+ end
+ return sectiondata
end
end
end
+
+function sections.fullnumber(depth,what,raw)
+ local sectiondata = sections.findnumber(depth,what)
+ if sectiondata then
+ sections.typesetnumber(sectiondata,'section',sectiondata)
+ end
+end
+
+function sections.getnumber(depth,what) -- redefined here
+ local sectiondata = sections.findnumber(depth,what)
+ texwrite((sectiondata and sectiondata.numbers[depth]) or 0)
+end
diff --git a/Master/texmf-dist/tex/context/base/strc-doc.mkiv b/Master/texmf-dist/tex/context/base/strc-doc.mkiv
index 4ff87b742be..e10efb3f70d 100644
--- a/Master/texmf-dist/tex/context/base/strc-doc.mkiv
+++ b/Master/texmf-dist/tex/context/base/strc-doc.mkiv
@@ -17,6 +17,8 @@
\unprotect
+\def\c!xmlsetup{xmlsetup}
+
% We operate in a \type {@@ns} namespace. All data is passed through
% variables. Of course we can built another interface on top of this
% that accepts multiple arguments. We might change this approach and
@@ -36,9 +38,10 @@
[\??ns]
[\c!number=,\c!level=,\c!name=,\c!title=,\c!bookmark=,\c!marking=,\c!list=,\c!label=,\c!coupling=,\c!ownnumber=,
\c!sectionseparatorset=\s!default,\c!sectionconversionset=\s!default,
- \c!sectionstopper=,\c!sectionsegments=,
+ \c!sectionstopper=,\c!sectionstarter,\c!sectionsegments=,
\c!sectionresetset=,\c!reference=,
\c!expansion=\v!no,
+ \c!xmlsetup=,
\s!catcodes=,
\c!saveinlist=\v!yes,
\c!command=\showstructuredata]
@@ -50,28 +53,29 @@
\def\dostructurecomponent[#1][#2]% #1=interfaced-settings, #2=optional user data (not yet supported)
{\begingroup
\getparameters[\??ns][#1]%
- \xdef\currentstructurename {\structureparameter\c!name}%
- \xdef\currentstructurecoupling {\structureparameter\c!coupling}%
- \xdef\currentstructureownnumber{\structureparameter\c!ownnumber}% optional own number
- \xdef\currentstructurelevel {\structureparameter\c!level}%
-\ifnum\catcodetable=\xmlcatcodes
- \let\currentstructureexpansion\s!xml
-\else
- \edef\currentstructureexpansion{\structureparameter\c!expansion}
-\fi
+ \xdef\currentstructurename {\structureparameter\c!name}%
+ \xdef\currentstructurecoupling {\structureparameter\c!coupling}%
+ \xdef\currentstructureownnumber {\structureparameter\c!ownnumber}% optional own number
+ \xdef\currentstructurelevel {\structureparameter\c!level}%
+ \edef\currentstructureexpansion {\structureparameter\c!expansion}%
+ \xdef\currentstructurexmlsetup {\structureparameter\c!xmlsetup}%
+ \xdef\currentstructurecatcodes {\structureparameter\s!catcodes}%
+ \xdef\currentstructurelabel {\structureparameter\c!label}%
+ \xdef\currentstructurereference {\structureparameter\c!reference}%
+ \xdef\currentstructurereferenceprefix{\structureparameter\c!referenceprefix}%
+ \xdef\currentstructureshownumber {\structureparameter\c!number}%
+ \xdef\currentstructuresaveinlist {\structureparameter\c!saveinlist}%
+ \xdef\currentstructureincrementnumber{\structureparameter\c!incrementnumber}%
\ifx\currentstructureexpansion\s!xml
- % maybe just title xml and inherit xml then in which case we have to test
- % when typesetting marks, lists, refs etc (+specific env)
- \xdef\currentstructuretitle {\detokenizedstructureparameter\c!title}% maybe xml
- \xdef\currentstructurebookmark{\detokenizedstructureparameter\c!bookmark}% no xml
- \xdef\currentstructuremarking {\detokenizedstructureparameter\c!marking}% no xml
- \xdef\currentstructurelist {\detokenizedstructureparameter\c!list}% no xml
+ \xmlstartraw
+ \xdef\currentstructuretitle {\structureparameter\c!title}%
+ \xdef\currentstructurebookmark{\structureparameter\c!bookmark}%
+ \xdef\currentstructuremarking {\structureparameter\c!marking}%
+ \xdef\currentstructurelist {\structureparameter\c!list}%
+ \xmlstopraw
\ifx\currentstructurelist\empty
- \xmlstartraw
- \xdef\currentstructurelist{\structureparameter\c!title}%
- \xmlstopraw
+ \globallet\currentstructurelist\currentstructuretitle
\fi
- %
\globallet\currentstructurecoding\s!xml
\else
\ifx\currentstructureexpansion\v!yes
@@ -96,12 +100,6 @@
\fi
\globallet\currentstructurecoding\s!tex
\fi
- \xdef\currentstructurelabel {\structureparameter\c!label}%
- \xdef\currentstructurereference {\structureparameter\c!reference}%
- \xdef\currentstructurereferenceprefix{\structureparameter\c!referenceprefix}%
- \xdef\currentstructureshownumber {\structureparameter\c!number}%
- \xdef\currentstructuresaveinlist {\structureparameter\c!saveinlist}%
- \xdef\currentstructureincrementnumber{\structureparameter\c!incrementnumber}%
\setnextinternalreference
\xdef\currentstructurenumber{\ctxlua{ % todo: combine with next call, adapt marks accordingly
structure.sections.somelevel {
@@ -115,17 +113,22 @@
resetset = "\structureparameter\c!sectionresetset",
},
metadata = {
- kind = "section",
- name = "\currentstructurename",
- catcodes = \the\catcodetable,
- coding = "\currentstructurecoding",
- xmlroot = \ifx\currentstructurecoding\s!xml "\xmldocument" \else nil \fi,
- \ifx\currentstructuresaveinlist\v!no
- nolist = true,
- \fi
- \ifx\currentstructureincrementnumber\v!yes
- increment = "\currentstructureincrementnumber",
- \fi
+ kind = "section",
+ name = "\currentstructurename",
+ catcodes = \the\ifx\currentstructurecatcodes\empty\catcodetable\else\csname\currentstructurecatcodes\endcsname\fi,
+ coding = "\currentstructurecoding",
+ \ifx\currentstructurecoding\s!xml
+ xmlroot = "\xmldocument",
+ \fi
+ \ifx\currentstructurexmlsetup\empty \else
+ xmlsetup = "\currentstructurexmlsetup",
+ \fi
+ \ifx\currentstructuresaveinlist\v!no
+ nolist = true,
+ \fi
+ \ifx\currentstructureincrementnumber\v!yes
+ increment = "\currentstructureincrementnumber",
+ \fi
},
titledata = { % we can add mark and reference
label = \!!bs\detokenize\expandafter{\currentstructurelabel }\!!es,
@@ -143,11 +146,14 @@
\fi
},
numberdata = {
-block = "\currentstructureblock",
-hidenumber = \ifx\currentstructureshownumber\v!no true\else nil\fi, % titles
+ % needed ?
+ block = "\currentstructureblock",
+ hidenumber = \ifx\currentstructureshownumber\v!no true\else nil\fi, % titles
+ % so far
separatorset = "\structureparameter\c!sectionseparatorset",
conversion = "\structureparameter\c!sectionconversion", % for good old times sake
conversionset = "\structureparameter\c!sectionconversionset",
+ starter = \!!bs\structureparameter\c!sectionstarter\!!es,
stopper = \!!bs\structureparameter\c!sectionstopper\!!es,
set = "\structureparameter\c!sectionset",
segments = "\structureparameter\c!sectionsegments",
diff --git a/Master/texmf-dist/tex/context/base/strc-flt.lua b/Master/texmf-dist/tex/context/base/strc-flt.lua
index f6f3e19ccc7..466fd515e04 100644
--- a/Master/texmf-dist/tex/context/base/strc-flt.lua
+++ b/Master/texmf-dist/tex/context/base/strc-flt.lua
@@ -1,6 +1,6 @@
if not modules then modules = { } end modules ['strc-flt'] = {
version = 1.001,
- comment = "companion to strc-flt.tex",
+ comment = "companion to strc-flt.mkiv",
author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
copyright = "PRAGMA ADE / ConTeXt Development Team",
license = "see context related readme files"
diff --git a/Master/texmf-dist/tex/context/base/strc-flt.mkiv b/Master/texmf-dist/tex/context/base/strc-flt.mkiv
index bb19146a1fd..67023d701a6 100644
--- a/Master/texmf-dist/tex/context/base/strc-flt.mkiv
+++ b/Master/texmf-dist/tex/context/base/strc-flt.mkiv
@@ -20,9 +20,9 @@
%D This module needs a cleanup and will be split in
%D strc-flt.tex and page-flt.mkiv cq. page-flt.mkii.
-\ifx\addlocalbackgroundtobox\undefined \def\addlocalbackgroundtobox{\resetglobal\gobbleoneargument} \fi
+\ifdefined\addlocalbackgroundtobox\else \def\addlocalbackgroundtobox{\resetglobal\gobbleoneargument} \fi
-\def\placefloats{\doflushfloats} % keep this one
+\unexpanded\def\placefloats{\doflushfloats} % keep this one
\let\currentfloat\empty
@@ -71,8 +71,8 @@
% todo: everysetupfloat everysetupcaption for all floats
-\def\setupfloats {\dosingleargument\dosetupfloats} % was \??bk
-\def\setupcaptions{\dosingleargument\dosetupcaptions}
+\unexpanded\def\setupfloats {\dosingleargument\dosetupfloats} % was \??bk
+\unexpanded\def\setupcaptions{\dosingleargument\dosetupcaptions}
\let\alldefinedfloats\empty
@@ -110,14 +110,15 @@
\c!textcolor=,
\c!align=,
\c!number=\v!yes,
-\c!prefix=\v!no,
-\c!prefixconnector=.,
-\c!way=bychapter,
-\c!prefixsegments=2:2,
+% \c!prefix=\v!no,
+% \c!prefixconnector=.,
+% \c!way=\v!by\v!chapter,
+% \c!prefixsegments=2:2,
% \c!way=\@@nrway,
% \c!blockway=\@@nrblockway,
% \c!sectionnumber=\@@nrsectionnumber,
% \c!separator=\@@koseparator,
+% \c!starter=\@@kostarter,
% \c!stopper=\@@kostopper,
% \c!suffix=\floatcaptionsuffix, % hook
\c!distance=1em,
@@ -207,8 +208,8 @@
%D Individial settings:
-\def\setupfloat {\dodoubleargument\dosetupfloat}
-\def\setupcaption{\dodoubleargument\dosetupcaption}
+\unexpanded\def\setupfloat {\dodoubleargument\dosetupfloat}
+\unexpanded\def\setupcaption{\dodoubleargument\dosetupcaption}
\newtoks\everysetupfloat
\newtoks\everysetupcaption
@@ -221,13 +222,16 @@
{\def\docommand##1{\getparameters[\??kj##1][#2]\def\currentfloat{##1}\the\everysetupcaption}%
\processcommalist[#1]\docommand}
+\presetstructurecountersetup\setupcaptions\sharedstructurecounterparameter
+
\appendtoks
\dostructurecountersetup\currentfloat\floatcaptionparameter
+ \docheckstructurecountersetup\currentfloat
\to \everysetupcaption
%D Definitions:
-\def\definefloat
+\unexpanded\def\definefloat
{\dotripleempty\dodefinefloat}
\def\dodefinefloat[#1][#2][#3]% #1=naam #2=meervoud #3=parent
@@ -264,16 +268,16 @@
\dodefinefloatcommands[#1][#2]}
\def\dodefinefloatcommands[#1][#2]%
- {\setvalue {\e!place\e!listof#2}{\dodoubleempty\doplacelist[#1]}%
- \setvalue {\e!complete\e!listof#2}{\dotripleempty\dodocompletelist[#1][#2]}%
- \setvalue {\e!place#1}{\dotripleempty\docomplexplacefloat[#1]}%
- \setvalue {\e!reserve#1}{\doquadrupleempty\docomplexreserveblock[#1]}%
- \setvalue {\e!start#1\e!text}{\dotripleempty\docomplexstarttextblock[#1]}%
- \setvalue {\e!stop#1\e!text}{\dostoptextfloat}%
- \setvalue{\e!start\e!reserve#1\e!text}{\doquadrupleempty\docomplexstartreservetextblock[#1]}%
- \setvalue {\e!stop\e!reserve#1\e!text}{\dostoptextfloat}%
- \setvalue {\e!emptyone#1}{\doemptyfloatblock{#1}}%
- \setvalue {\e!emptytwo#1}{\doemptyfloatblock{#1}}}
+ {\setuvalue {\e!place\e!listof#2}{\dodoubleempty\doplacelist[#1]}%
+ \setuvalue {\e!complete\e!listof#2}{\dotripleempty\dodocompletelist[#1][#2]}%
+ \setuvalue {\e!place#1}{\dotripleempty\docomplexplacefloat[#1]}%
+ \setuvalue {\e!reserve#1}{\doquadrupleempty\docomplexreserveblock[#1]}%
+ \setuvalue {\e!start#1\e!text}{\dotripleempty\docomplexstarttextblock[#1]}%
+ \setuvalue {\e!stop#1\e!text}{\dostoptextfloat}%
+ \setuvalue{\e!start\e!reserve#1\e!text}{\doquadrupleempty\docomplexstartreservetextblock[#1]}%
+ \setuvalue {\e!stop\e!reserve#1\e!text}{\dostoptextfloat}%
+ \setuvalue {\e!emptyone#1}{\doemptyfloatblock{#1}}%
+ \setuvalue {\e!emptytwo#1}{\doemptyfloatblock{#1}}}
%D Fallback float body:
@@ -297,11 +301,18 @@
\installstructurelistprocessor{float}{\usestructurelistprocessor{number+title}}
+% \def\thecurrentfloatnumber
+% {\ifnofloatcaption \else \ifnofloatnumber \else
+% % \labeltexts\currentfloat{\convertedstructurecounter[\currentfloat]}% ! ! todo: use a lua call instead
+% \ifx\currentfloatnumber\relax\else
+% \labeltexts\currentfloat{\ctxlua{structure.lists.savednumber("\currentfloat",\currentfloatnumber)}}%
+% \fi
+% \fi \fi}
+
\def\thecurrentfloatnumber
{\ifnofloatcaption \else \ifnofloatnumber \else
- % \labeltexts\currentfloat{\convertedstructurecounter[\currentfloat]}% ! ! todo: use a lua call instead
\ifx\currentfloatnumber\relax\else
- \labeltexts\currentfloat{\ctxlua{structure.lists.savednumber("\currentfloat",\currentfloatnumber)}}%
+ \labeltexts\currentfloat{\ctxlua{structure.lists.savedprefixednumber("\currentfloat",\currentfloatnumber)}}%
\fi
\fi \fi}
@@ -326,7 +337,7 @@
% NOT YET REDONE ! ! ! ! !
- \def\placefloatcaption
+ \unexpanded\def\placefloatcaption
{\dodoubleempty\doplacefloatcaption}
\long\def\doplacefloatcaption[#1][#2]#3%
@@ -334,7 +345,7 @@
\placefloatcaptiontext[#1]%
\placefloatcaptionreference[#1]}
- \def\setfloatcaption % \dosetfloatcaption already in use
+ \unexpanded\def\setfloatcaption % \dosetfloatcaption already in use
{\dodoubleempty\dodosetfloatcaption} % beware, name clash
\long\def\dodosetfloatcaption[#1][#2]#3% to do namespace for number/ascii
@@ -370,9 +381,9 @@
{\letgvalue{@fl@r@#1}\relax
\letgvalue{@fl@t@#1}\relax}
- \def\placefloatcaptiontext [#1]{\getvalue{@fl@t@#1}}
- \def\placefloatcaptionnumber [#1]{\getvalue{@fl@n@#1}}
- \def\placefloatcaptionreference[#1]{\getvalue{@fl@r@#1}}
+ \unexpanded\def\placefloatcaptiontext [#1]{\getvalue{@fl@t@#1}}
+ \unexpanded\def\placefloatcaptionnumber [#1]{\getvalue{@fl@n@#1}}
+ \unexpanded\def\placefloatcaptionreference[#1]{\getvalue{@fl@r@#1}}
% still needed for uguide
@@ -439,13 +450,13 @@
% \fi
% \stopsetups
%
-% \def\setupswithbox[#1]{\dowithnextbox{\setups[#1]}\vbox}
+% \unexpanded\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 ?
+ {\doprocesslocalsetups{\floatcaptionparameter\c!setups}% expanded ?
%\advance\leftskip \floatcaptionparameter\c!leftmargin
%\advance\rightskip\floatcaptionparameter\c!rightmargin
\relax}
@@ -594,12 +605,12 @@
{\normalexpanded{\noexpand\doifcommonelse{#2}{\flushfloatslist}}\doflushfloats\donothing}%
% but which should be done before using box \floatbox
\fi
- \ifmargeblokken
+ \ifmarginblocks
\doifinset\v!margin{#2}\endgraf
\fi
\global\insidefloattrue
\begingroup % **
- \ifmargeblokken
+ \ifmarginblocks
\doifinset\v!margin{#2}{\hsize\@@mbwidth}%
\fi
\the\everyinsidefloat
@@ -608,7 +619,6 @@
\dowithnextboxcontent % better a \the\everyfloattoks
{\setlocalfloathsize
\floatparameter\c!inner
- \fuzzysnappingfalse
\postponenotes} % new
{\doifsomething{\floatparameter\c!criterium}
{\ifdim\wd\nextbox>\floatparameter\c!criterium\relax
@@ -690,13 +700,17 @@
{\global\nofloatnumbertrue}}%
% this has to change
\ConvertToConstant\doifelse{#4}{}
+% \ConvertToConstant\doifelse{\detokenize{#4}}{}
{\global\emptyfloatcaptiontrue}
{\global\emptyfloatcaptionfalse}%
+% \doifinsetelse\v!none{#2}
+% {\global\nofloatcaptiontrue}
+% {\ConvertToConstant\doifelse{#4}\v!none
+% {\global\nofloatcaptiontrue}
+% {\global\nofloatcaptionfalse}}%
\doifinsetelse\v!none{#2}
{\global\nofloatcaptiontrue}
- {\ConvertToConstant\doifelse{#4}\v!none
- {\global\nofloatcaptiontrue}
- {\global\nofloatcaptionfalse}}%
+ {\global\nofloatcaptionfalse}%
\doif{\floatcaptionparameter\c!number}\v!none % new
{\global\nofloatcaptiontrue}%
\ifemptyfloatcaption \ifnofloatnumber
@@ -734,6 +748,8 @@
% todo: optional user pars
+\let\currentfloatattribute\empty % to be checked
+
\def\floatcaptionattribute
{\iflocation \ifnofloatnumber \else \ifnofloatcaption \else
attr \destinationattribute \currentfloatattribute
@@ -797,10 +813,6 @@
\dogetfloatdata
\to \everyinsidefloat
-%\appendtoks
-% \fuzzysnappingfalse
-%\to \everyinsidefloat
-
\def\doifrightpagefloatelse
{\ifdoublesided
\ifsinglesided
@@ -961,7 +973,7 @@
{\flushsidefloats % hoort eigenlijk niet hier
\docomplexreserveblock[#1][#2][\v!text,#3,\v!left][#4]}
-\def\placefloat
+\unexpanded\def\placefloat
{\dotripleempty\docomplexplacefloat}
\installinsertion\topins
@@ -970,187 +982,60 @@
\newdimen\botinserted
\newdimen\topinserted
-%D Extra float registers.
-
-\newif\ifsomefloatwaiting \somefloatwaitingfalse
-\newif\ifroomforfloat \roomforfloattrue
-\newif\ifnofloatpermitted \nofloatpermittedfalse
-
-\newcount\totalnoffloats \totalnoffloats =0
-\newcount\savednoffloats \savednoffloats =0
-\newcount\noffloatinserts \noffloatinserts=0
-
-\newbox\floatlist
-\newbox\savedfloatlist
-
-\newif\ifflushingfloats \flushingfloatsfalse
-
-\newbox\floattext
+\newif\iftopofinsert
+\newif\iftestfloatbox
-\newdimen\floattextwidth
-\newdimen\floattextheight
+\newdimen\floatsideskip \floatsideskip =12pt
+\newdimen\floattopskip \floattopskip =\floattopskip
+\newdimen\floatbottomskip \floatbottomskip=\floattopskip
-\newbox\floatbox
-\newbox\savedfloatbox
+\newdimen\sidefloattopskip \sidefloattopskip =\floattopskip
+\newdimen\sidefloatbottomskip \sidefloatbottomskip=\floatbottomskip
-\newdimen\floatwidth
-\newdimen\floatheight
-
-\def\dosavefloatinfo {\showmessage\m!floatblocks2{\the\totalnoffloats}}
-\def\doinsertfloatinfo {\showmessage\m!floatblocks4{\the\totalnoffloats}}
-\def\dofloatflushedinfo{\showmessage\m!floatblocks3{\the\numexpr\totalnoffloats-\savednoffloats\relax}}
-
-\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\emptybox
- \fi}
+\newskip\sidefloatdownshift
+\newskip\sidefloatleftshift
+\newskip\sidefloatrightshift
-\def\uncenteredfloatbox
- {\ifcenterfloatbox
- \ifhbox\floatbox\relax % remove centering
- \ifdim\wd\floatbox=\hsize
- \ifhbox\floatbox
- \setbox\scratchbox\hbox
- {\unhbox\floatbox
- \unskip\unskip
- \global\setbox\globalscratchbox\lastbox}%
- \box\globalscratchbox
- \else
- \box\floatbox
- \fi
- \else
- \box\floatbox
- \fi
- \else
- \box\floatbox
- \fi
- \else
- \box\floatbox
- \fi}
+\def\sidefloattopoffset {\openstrutdepth} % {\strutdp}
-\def\dosavefloat
- {\global\setbox\floatlist\vbox
- {\nointerlineskip
- \uncenteredfloatbox
- \unvbox\floatlist}%
- \global\advance\savednoffloats \plusone
- \global\somefloatwaitingtrue
- \dosavefloatinfo
- \nonoindentation}
-
-\def\doresavefloat
- {\global\setbox\floatlist\vbox
- {\nointerlineskip
- \unvbox\floatlist
- \uncenteredfloatbox}%
- \global\advance\savednoffloats \plusone
- \global\somefloatwaitingtrue}
-
-\def\doreversesavefloat
- {\global\setbox\floatlist\vbox
- {\nointerlineskip
- \unvbox\floatlist
- \uncenteredfloatbox}%
- \global\advance\savednoffloats \plusone
- \global\somefloatwaitingtrue
- \dosavefloatinfo}
-
-% better (todo): \savednofsavedfloats
-
-\def\dosavefloatstatus
- {\global\setbox\savedfloatlist\copy\floatlist
- \global\setbox\savedfloatbox \copy\floatbox
- \xdef\dorestorefloatstatus
- {\global\setbox\floatlist\box\savedfloatlist
- \global\setbox\floatbox \box\savedfloatbox
- \global\savednoffloats\the\savednoffloats}}
-
-\let\dorestorefloatstatus\relax
-
-\ifx\doflushfloats\undefined \let\doflushfloats\relax \fi
-\ifx\flushfloatbox\undefined \let\flushfloatbox\relax \fi
-
-% needed in the splitter:
-
-\newcount\savedsavednoffloats
-
-\let\dopopsavedfloats\relax
-
-\def\dopushsavedfloats
- {\global\setbox\savedfloatlist\box\floatlist
- \global\savedsavednoffloats\savednoffloats
- \global\savednoffloats\savednoffloats
- \global\somefloatwaitingfalse
- \gdef\dopopsavedfloats
- {\global\advance\savednoffloats\savedsavednoffloats
- \global\setbox\floatlist\vbox\bgroup
- \ifvoid\floatlist \else\unvbox\floatlist \fi
- \ifvoid\savedfloatlist\else\unvbox\savedfloatlist\fi
- \egroup
- \global\ifcase\savednoffloats
- \somefloatwaitingfalse\else\somefloatwaitingtrue\fi
- \globallet\dopopsavedfloats\relax}}
-
-\def\doflushsavedfloats % simplified \OTRONEdodoflushfloats
- {\doloop
- {\ifsomefloatwaiting
- \dogetfloat
- \dofloatflushedinfo
- \docheckiffloatfits
- \ifroomforfloat
- \doplacefloatbox
- \else
- \doreversesavefloat
- \exitloop
- \fi
- \else
- \exitloop
- \fi}}
+\newcount\noftopfloats \noftopfloats=2
+\newcount\nofbotfloats \nofbotfloats=0
-% top and bottom
+\def\docalculatefloatskip#1#2%
+ {\doifelsenothing{#2}
+ {\global#1\zeropoint}
+ {\doifelse{#2}\v!none
+ {\global#1\zeropoint}
+ {\setbox\scratchbox\vbox{\whitespace\normalexpanded{\noexpand\blank[#2]}}%
+ \global#1\ht\scratchbox}}}
-\newif\iftopofinsert
-\newif\iftestfloatbox
-\newif\ifcenterfloatbox \centerfloatboxtrue
-\newif\iflocalcenterfloatbox \localcenterfloatboxfalse
-\newif\ifglobalcenterfloatbox \globalcenterfloatboxfalse
+\def\calculatefloatskips
+ {{\docalculatefloatskip\floattopskip{\floatsharedparameter\c!spacebefore}%
+ \docalculatefloatskip\floatbottomskip{\floatsharedparameter\c!spaceafter}%
+ \docalculatefloatskip\sidefloattopskip{\floatsharedparameter\c!sidespacebefore}%
+ \docalculatefloatskip\sidefloatbottomskip{\floatsharedparameter\c!sidespaceafter}%
+ \gdef\sidefloattopoffset{\openstrutdepth}% was \def
+ \global\floatsideskip\floatsharedparameter\c!margin
+ \global\sidefloatleftshift\floatparameter\c!leftmargindistance
+ \global\sidefloatrightshift\floatparameter\c!rightmargindistance
+ \global\noftopfloats\floatsharedparameter\c!ntop\relax
+ \global\nofbotfloats\floatsharedparameter\c!nbottom\relax}}
% beter de laatste skip buiten de \insert uitvoeren,
% bovendien bij volle flush onder baseline.
-\def\betweenfloatblanko% assumes that spaceafter is present
- {\bgroup
- \setbox0\vbox{\strut\blank[\floatsharedparameter\c!spacebefore]\strut}%
- \setbox2\vbox{\strut\blank[\floatsharedparameter\c!spaceafter]\strut}%
- \ifdim\ht0>\ht2
- \blank[-\floatsharedparameter\c!spaceafter,\floatsharedparameter\c!spacebefore]%
- \fi
- \egroup}
+% \def\betweenfloatblanko% assumes that spaceafter is present
+% {\bgroup
+% \setbox0\vbox{\strut\blank[\floatsharedparameter\c!spacebefore]\strut}%
+% \setbox2\vbox{\strut\blank[\floatsharedparameter\c!spaceafter]\strut}%
+% \ifdim\ht0>\ht2
+% \blank[-\floatsharedparameter\c!spaceafter,\floatsharedparameter\c!spacebefore]%
+% \fi
+% \egroup}
+\def\betweenfloatblanko% assumes that spaceafter is present
+ {\blank[\floatsharedparameter\c!spacebefore]} % or v!back,....
+
\def\doplacefloatbox
{%\forgetall % NO
\whitespace
@@ -1158,15 +1043,12 @@
\flushfloatbox
\blank[\floatsharedparameter\c!spaceafter]}
-\ifx\someherefloat\undefined \let\someherefloat\doplacefloatbox \fi
-\ifx\somefixdfloat\undefined \let\somefixdfloat\doplacefloatbox \fi
-\ifx\somepagefloat\undefined \let\somepagefloat\doplacefloatbox \fi
-\ifx\sometopsfloat\undefined \let\sometopsfloat\doplacefloatbox \fi
-\ifx\somebotsfloat\undefined \let\somebotsfloat\doplacefloatbox \fi
-
-\ifx\somesidefloat\undefined \let\somesidefloat\doplacefloatbox \fi
-\ifx\somefacefloat\undefined \let\somefacefloat\doplacefloatbox \fi
-\ifx\sometextfloat\undefined \let\sometextfloat\doplacefloatbox \fi
+\ifdefined\someherefloat\else \let\someherefloat\doplacefloatbox \fi
+\ifdefined\someslotfloat\else \let\someslotfloat\doplacefloatbox \fi
+\ifdefined\somefixdfloat\else \let\somefixdfloat\doplacefloatbox \fi
+\ifdefined\sometopsfloat\else \let\sometopsfloat\doplacefloatbox \fi
+\ifdefined\somebotsfloat\else \let\somebotsfloat\doplacefloatbox \fi
+\ifdefined\somesidefloat\else \let\somesidefloat\doplacefloatbox \fi
% test case:
%
@@ -1307,51 +1189,6 @@
{\placesomebotsfloat[#1]}
{\placesomeherefloat[#1]}}}}
-% De onderstaande macro wordt gebruikt bij de macros
-% voor het plaatsen van tabellen en figuren (klopt niet
-% meer).
-%
-% \dofloat {plaats} {label1} {label2}
-% \docompletefloat {nummer} {referentie} {plaats} {label} {inhoud}
-% \box\floatbox inhoud+referentie
-% \do???float#1 #1 = boxnummer
-
-\newdimen\floatsideskip \floatsideskip =12pt
-\newdimen\floattopskip \floattopskip =\floattopskip
-\newdimen\floatbottomskip \floatbottomskip=\floattopskip
-
-\newdimen\sidefloattopskip \sidefloattopskip =\floattopskip
-\newdimen\sidefloatbottomskip \sidefloatbottomskip=\floatbottomskip
-
-\newskip\sidefloatdownshift
-\newskip\sidefloatleftshift
-\newskip\sidefloatrightshift
-
-\def\sidefloattopoffset {\openstrutdepth} % {\strutdp}
-
-\newcount\noftopfloats \noftopfloats=2
-\newcount\nofbotfloats \nofbotfloats=0
-
-\def\docalculatefloatskip#1#2%
- {\doifelsenothing{#2}
- {\global#1\zeropoint}
- {\doifelse{#2}\v!none
- {\global#1\zeropoint}
- {\setbox\scratchbox\vbox{\whitespace\normalexpanded{\noexpand\blank[#2]}}%
- \global#1\ht\scratchbox}}}
-
-\def\calculatefloatskips
- {{\docalculatefloatskip\floattopskip{\floatsharedparameter\c!spacebefore}%
- \docalculatefloatskip\floatbottomskip{\floatsharedparameter\c!spaceafter}%
- \docalculatefloatskip\sidefloattopskip{\floatsharedparameter\c!sidespacebefore}%
- \docalculatefloatskip\sidefloatbottomskip{\floatsharedparameter\c!sidespaceafter}%
- \gdef\sidefloattopoffset{\openstrutdepth}% was \def
- \global\floatsideskip\floatsharedparameter\c!margin
- \global\sidefloatleftshift\floatparameter\c!leftmargindistance
- \global\sidefloatrightshift\floatparameter\c!rightmargindistance
- \global\noftopfloats\floatsharedparameter\c!ntop\relax
- \global\nofbotfloats\floatsharedparameter\c!nbottom\relax}}
-
\def\borderedfloatbox
{\localframed
[\??fl\currentfloat]
@@ -1362,7 +1199,7 @@
% minwidth=fit,width=max : no overshoot, as wide as graphic
-\ifx\moveboxontogrid\undefined \let\movecaptionontogrid\gobblethreearguments \fi
+\ifdefined\moveboxontogrid\else \let\movecaptionontogrid\gobblethreearguments \fi
\def\locatefloatbox
{\chardef\alignstrutmode\zerocount
@@ -1967,29 +1804,24 @@
\newif\ifparfloat
-\long\def\dosetfloatbox#1#2#3% todo : \global\setbox
+\long\def\dosetfloatbox#1#2#3% todo : \global\setbox, currently messy
{\ifvisible
\par
\edef\floatcaptiondirectives{\floatparameter\c!location,\floatcaptionparameter\c!location}%
\ifparfloat\@EA\dosetparfloat\else\@EA\dosetpagfloat\fi{#1}{#2}{#3}%
\setlocalfloatdimensions{#1}%
+ \global\advance\totalnoffloats\plusone
\setbox\floatbox\hbox{\dosavefloatdata\box\floatbox}% still needed? we will do renumbering differently
- \global\floatheight\ht\floatbox
- \global\advance\floatheight \dp\floatbox
+ \global\floatheight\htdp\floatbox
\global\floatwidth\wd\floatbox
- \global\advance\totalnoffloats \plusone
\doifnotinset\v!margin{#1} % gaat namelijk nog fout
{\setbox\floatbox\vbox
{\parindent\zeropoint
\doifconcepttracing{\inleftmargin{\framed{\infofont\the\totalnoffloats}}}%
\box\floatbox}}%
\wd\floatbox\floatwidth
- \dimen0=\floatheight
- \advance\dimen0 \lineheight
- \ifdim\dimen0<\textheight
- \else
- \global\floatheight\textheight
- \global\advance\floatheight -\lineheight
+ \ifdim\dimexpr\floatheight+\lineheight\relax<\textheight \else
+ \global\floatheight\dimexpr\textheight-\lineheight\relax
\ht\floatbox\floatheight
\dp\floatbox\zeropoint
\showmessage\m!floatblocks{10}{\the\totalnoffloats}%
@@ -2040,7 +1872,7 @@
\@EA\aftersplitstring \floatcolumn\at*\to\floatrow
\@EA\beforesplitstring\floatcolumn\at*\to\floatcolumn
% todo: nog algemeen otr
- \ifx\OTRSETsetpreferedcolumnslot\undefined\else
+ \ifdefined\OTRSETsetpreferedcolumnslot
\OTRSETsetpreferedcolumnslot\floatcolumn\floatrow
\fi}
{\let\floatcolumn\empty
@@ -2092,16 +1924,9 @@
\installfloathandler {fxtb} \someslotfloat
\installfloathandler {fxbt} \someslotfloat
-\registerotrcommand\placesomeslotfloat % \def\placesomeslotfloat {\OTRcommand\someslotfloat}
-\registerotrcommand\placesomeherefloat % \def\placesomeherefloat {\OTRcommand\someherefloat}
-\registerotrcommand\placesomefixdfloat % \def\placesomefixdfloat {\OTRcommand\somefixdfloat}
-\registerotrcommand\placesomepagefloat % \def\placesomepagefloat {\OTRcommand\somepagefloat}
-\registerotrcommand\placesomeleftpagefloat % \def\placesomeleftpagefloat {\OTRcommand\someleftpagefloat}
-\registerotrcommand\placesomerightpagefloat % \def\placesomerightpagefloat{\OTRcommand\somerightpagefloat}
-\registerotrcommand\placesometopsfloat % \def\placesometopsfloat {\OTRcommand\sometopsfloat}
-\registerotrcommand\placesomebotsfloat % \def\placesomebotsfloat {\OTRcommand\somebotsfloat}
-\registerotrcommand\placesomesidefloat % \def\placesomesidefloat {\OTRcommand\somesidefloat}
-\registerotrcommand\placesomefacefloat % \def\placesomefacefloat {\OTRcommand\somefacefloat}
+% no \registerotrcommand\placesome* here!, this has to be cleaned up:
+
+\def\somesidefloat{\OTRcommand\somesidefloat}
\def\someleftsidefloat [#1]{\somesidefloat[#1]\presetindentation}
\def\somerightsidefloat [#1]{\somesidefloat[#1]}
@@ -2115,10 +1940,20 @@
\def\someinrightedgefloat [#1]{\somesidefloat[#1]}
\def\someinmarginfloat [#1]{\somesidefloat[#1]}
\def\someherefloat [#1]{\someelsefloat[\v!here,#1]}
-
\def\somebackspacefloat [#1]{\somesidefloat[#1]}
\def\somecutspacefloat [#1]{\somesidefloat[#1]}
+\unexpanded\def\placesomeslotfloat {\OTRcommand\someslotfloat}
+\unexpanded\def\placesomeherefloat {\OTRcommand\someherefloat}
+\unexpanded\def\placesomefixdfloat {\OTRcommand\somefixdfloat}
+\unexpanded\def\placesomepagefloat {\OTRcommand\somepagefloat}
+\unexpanded\def\placesomeleftpagefloat {\OTRcommand\someleftpagefloat}
+\unexpanded\def\placesomerightpagefloat{\OTRcommand\somerightpagefloat}
+\unexpanded\def\placesometopsfloat {\OTRcommand\sometopsfloat}
+\unexpanded\def\placesomebotsfloat {\OTRcommand\somebotsfloat}
+\unexpanded\def\placesomesidefloat {\OTRcommand\somesidefloat}
+\unexpanded\def\placesomefacefloat {\OTRcommand\somefacefloat}
+
\def\somefixdfloat {\placesomefixdfloat}
\def\somepagefloat {\placesomepagefloat}
\def\someleftpagefloat {\placesomeleftpagefloat}
diff --git a/Master/texmf-dist/tex/context/base/strc-ini.lua b/Master/texmf-dist/tex/context/base/strc-ini.lua
index 06f5ff82f82..61c26a20eed 100644
--- a/Master/texmf-dist/tex/context/base/strc-ini.lua
+++ b/Master/texmf-dist/tex/context/base/strc-ini.lua
@@ -1,13 +1,12 @@
if not modules then modules = { } end modules ['strc-ini'] = {
version = 1.001,
- comment = "companion to strc-ini.tex",
+ comment = "companion to strc-ini.mkiv",
author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
copyright = "PRAGMA ADE / ConTeXt Development Team",
license = "see context related readme files"
}
--[[
-
The restructuring is the (intermediate) result of quite some experiments. I started
with the basic structure, followed by lists, numbers, enumerations, itemgroups
and floats. All these have something in common, like pagenumbers and section
@@ -24,8 +23,11 @@ but it does not make sense to store all processdata.
local format, concat, match = string.format, table.concat, string.match
local count, texwrite, texprint, texsprint = tex.count, tex.write, tex.print, tex.sprint
local type, next, tonumber, tostring = type, next, tonumber, tostring
+local lpegmatch = lpeg.match
+
+local ctxcatcodes, xmlcatcodes, notcatcodes = tex.ctxcatcodes, tex.xmlcatcodes, tex.notcatcodes -- tricky as we're in notcatcodes
-local ctxcatcodes = tex.ctxcatcodes
+local trace_processors = false trackers.register("structure.processors", function(v) trace_processors = v end)
-- move this
@@ -150,16 +152,29 @@ function helpers.merged(...)
return t
end
-local tag = "ctx:tocentry"
+local tags = {
+ generic = "ctx:genericentry",
+ section = "ctx:sectionentry",
+ entry = "ctx:registerentry",
+}
-function helpers.title(title,metadata)
+function helpers.title(title,metadata) -- brrr
if title and title ~= "" then
if metadata then
if metadata.coding == "xml" then
+ tag = tags[metadata.kind] or tags.generic
buffers.set(tag,format("<?xml version='1.0'?><%s>%s</%s>",tag,title,tag))
texsprint(ctxcatcodes,format("\\xmlprocessbuffer{%s}{%s}{}",metadata.xmlroot or "main",tag))
+ elseif metadata.xmlsetup then
+ texsprint(ctxcatcodes,format("\\xmlsetup{%s}{%s}",title,metadata.xmlsetup)) -- nasty
else
- texsprint(metadata.catcodes,title)
+ local catcodes = metadata.catcodes
+--~ print(tex.ctxcatcodes,tex.xmlcatcodes,catcodes,title)
+ if catcodes == notcatcodes or catcodes == xmlcatcodes then
+ texsprint(ctxcatcodes,title) -- nasty
+ else
+ texsprint(catcodes,title)
+ end
end
else
texsprint(title) -- no catcode switch
@@ -184,7 +199,7 @@ end
local splitter = lpeg.splitat("->",true)
function processors.split(str)
- local p, s = splitter:match(str)
+ local p, s = lpegmatch(splitter,str)
if registered[p] then
return p, s
else
@@ -193,16 +208,21 @@ function processors.split(str)
end
function processors.sprint(catcodes,str,fnc,...)
- local p, s = splitter:match(str)
+ local p, s = lpegmatch(splitter,str)
+ local code
if registered[p] then
- texsprint(catcodes,format("\\applyprocessor{%s}{%s}",p,(fnc and fnc(s,...)) or s))
+ code = format("\\applyprocessor{%s}{%s}",p,(fnc and fnc(s,...)) or s)
else
- texsprint(catcodes,(fnc and fnc(str,...)) or str)
+ code = (fnc and fnc(str,...)) or str
+ end
+ if trace_processors then
+ logs.report("processors","cct: %s, seq: %s",catcodes,code)
end
+ texsprint(catcodes,code)
end
function processors.apply(str)
- local p, s = splitter:match(str)
+ local p, s = lpegmatch(splitter,str)
if registered[p] then
return format("\\applyprocessor{%s}{%s}",p,s)
else
diff --git a/Master/texmf-dist/tex/context/base/strc-ini.mkiv b/Master/texmf-dist/tex/context/base/strc-ini.mkiv
index 61944299803..5ed7b423c3a 100644
--- a/Master/texmf-dist/tex/context/base/strc-ini.mkiv
+++ b/Master/texmf-dist/tex/context/base/strc-ini.mkiv
@@ -71,10 +71,10 @@
% level of a number in sets. This is all handles at the \LUA\ end.
% References to such sets travel with the multipass information.
-\def\definestructureresetset {\dotripleempty\dodefinestructureresetset}
-\def\definestructureseparatorset {\dotripleempty\dodefinestructureseparatorset}
-\def\definestructureconversionset{\dotripleempty\dodefinestructureconversionset}
-\def\definestructureprefixset {\dotripleempty\dodefinestructureprefixset}
+\unexpanded\def\definestructureresetset {\dotripleempty\dodefinestructureresetset}
+\unexpanded\def\definestructureseparatorset {\dotripleempty\dodefinestructureseparatorset}
+\unexpanded\def\definestructureconversionset{\dotripleempty\dodefinestructureconversionset}
+\unexpanded\def\definestructureprefixset {\dotripleempty\dodefinestructureprefixset}
\def\dodefinestructureresetset [#1][#2][#3]{\ctxlua{structure.sets.define("structure:resets", "#1","\luaescapestring{\detokenize{#2}}","\luaescapestring{\detokenize{#3}}",true)}}
\def\dodefinestructureseparatorset [#1][#2][#3]{\ctxlua{structure.sets.define("structure:separators", "#1","\luaescapestring{\detokenize{#2}}","\luaescapestring{\detokenize{#3}}")}}
diff --git a/Master/texmf-dist/tex/context/base/strc-itm.lua b/Master/texmf-dist/tex/context/base/strc-itm.lua
index fc609b44812..e776f326d1c 100644
--- a/Master/texmf-dist/tex/context/base/strc-itm.lua
+++ b/Master/texmf-dist/tex/context/base/strc-itm.lua
@@ -1,6 +1,6 @@
if not modules then modules = { } end modules ['strc-itm'] = {
version = 1.001,
- comment = "companion to strc-itm.tex",
+ comment = "companion to strc-itm.mkiv",
author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
copyright = "PRAGMA ADE / ConTeXt Development Team",
license = "see context related readme files"
diff --git a/Master/texmf-dist/tex/context/base/strc-itm.mkii b/Master/texmf-dist/tex/context/base/strc-itm.mkii
index d0afd13c842..1de63c7c32b 100644
--- a/Master/texmf-dist/tex/context/base/strc-itm.mkii
+++ b/Master/texmf-dist/tex/context/base/strc-itm.mkii
@@ -409,23 +409,22 @@
\fi\fi}
\def\setitemlevel#1%
- {\ifnum\currentitemlevel>\zerocount
- \settrue\firstlistitem
- %
- \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\currentitemlevel}}%
- \doifelse{\getitemparameter\currentitemlevel\c!placestopper}\v!yes
- {\def\tempsymbol{\getitemparameter\currentitemlevel\c!stopper}}
- {\let\tempsymbol\empty}%
- \fi}
+ {\ifnum\currentitemlevel>\zerocount
+ \settrue\firstlistitem
+ % \expanded{\setitemparameter{\currentitemlevel}{\c!start}{1}}% ***
+ \doifinset{0}{#1}{\setitemparameter\currentitemlevel\c!start{0}}% ***
+ \setcounter{\@@itemcounter\currentitemlevel}{\the\numexpr\getitemparameter\currentitemlevel\c!start-1\relax}% ***
+ \doifelsenothing{\getitemparameter\currentitemlevel\c!start}
+ {\def\currentitemoffset{1}}
+ {\def\currentitemoffset{\getitemparameter\currentitemlevel\c!start}%
+ \letitemparameter\currentitemlevel\c!start\empty}%
+ \def\tempnumber
+ {\countervalue{\@@itemcounter\currentitemlevel}}%
+ \doifelse{\getitemparameter\currentitemlevel\c!placestopper}\v!yes
+ {\def\tempsymbol{\getitemparameter\currentitemlevel\c!stopper}}
+ {\let\tempsymbol\empty}%
+ \fi}
+
\def\actualitemnumber
{\ifconditional\reverselistitem
diff --git a/Master/texmf-dist/tex/context/base/strc-itm.mkiv b/Master/texmf-dist/tex/context/base/strc-itm.mkiv
index 6799a02a67d..7207494ed49 100644
--- a/Master/texmf-dist/tex/context/base/strc-itm.mkiv
+++ b/Master/texmf-dist/tex/context/base/strc-itm.mkiv
@@ -17,24 +17,26 @@
\unprotect
-\newconditional\sublistitem \setfalse\sublistitem
-\newconditional\symbollistitem \setfalse\symbollistitem
-\newconditional\headlistitem \setfalse\headlistitem
-\newconditional\introlistitem \setfalse\introlistitem
-\newconditional\randomizeitems \setfalse\randomizeitems
-\newconditional\autointrolistitem \setfalse\autointrolistitem
-\newconditional\optimizelistitem \settrue \optimizelistitem
-\newconditional\packlistitem \setfalse\packlistitem
-\newconditional\paragraphlistitem \setfalse\paragraphlistitem
-\newconditional\textlistitem \setfalse\textlistitem
-\newconditional\firstlistitem \setfalse\firstlistitem
-\newconditional\beforelistitem \setfalse\beforelistitem
-\newconditional\afterlistitem \setfalse\afterlistitem
-\newconditional\nowhitelistitem \setfalse\nowhitelistitem
-\newconditional\joinedlistitem \setfalse\joinedwhitelistitem
-\newconditional\reverselistitem \setfalse\reverselistitem
-\newconditional\continuelistitems \setfalse\continuelistitems
-\newconditional\fittinglistitems \setfalse\fittinglistitems
+\newconditional\sublistitem \setfalse\sublistitem
+\newconditional\symbollistitem \setfalse\symbollistitem
+\newconditional\headlistitem \setfalse\headlistitem
+\newconditional\introlistitem \setfalse\introlistitem
+\newconditional\randomizeitems \setfalse\randomizeitems
+\newconditional\autointrolistitem \setfalse\autointrolistitem
+\newconditional\optimizelistitem \settrue \optimizelistitem
+\newconditional\packlistitem \setfalse\packlistitem
+\newconditional\paragraphlistitem \setfalse\paragraphlistitem
+\newconditional\textlistitem \setfalse\textlistitem
+\newconditional\firstlistitem \setfalse\firstlistitem
+\newconditional\beforelistitem \setfalse\beforelistitem
+\newconditional\afterlistitem \setfalse\afterlistitem
+\newconditional\nowhitelistitem \setfalse\nowhitelistitem
+\newconditional\joinedlistitem \setfalse\joinedwhitelistitem
+\newconditional\reverselistitem \setfalse\reverselistitem
+\newconditional\continuelistitems \setfalse\continuelistitems
+\newconditional\fittinglistitems \setfalse\fittinglistitems
+\newconditional\indentedfirstlistitem \setfalse\indentedfirstlistitem
+\newconditional\inlinelistitem \setfalse\inlinelistitem
\newcount\noflists
\newcount\currentnoflists
@@ -64,13 +66,15 @@
{\edef\currentnofitems {\ctxlua{structure.itemgroups.nofitems("\currentitemgroup",\number\currentnoflists)}}%
\edef\currentitemmaxwidth{\ctxlua{structure.itemgroups.maxwidth("\currentitemgroup",\number\currentnoflists)}\scaledpoint}}
+% todo: \dodosetreference -> \dostructurecountercomponent (to be checked)
+
\def\dohandleitemreference % we will make a decent number helper
{\ifx\currentitemreference \empty \else
\setnextinternalreference
\ctxlua { jobreferences.setandgetattribute("\s!full", "\referenceprefix","\currentitemreference",
{
metadata = {
- kind = "list",
+ kind = "item",% ?
catcodes = \the\catcodetable,
xmlroot = \ifx\currentreferencecoding\s!xml "\xmldocument" \else nil \fi, % only useful when text
},
@@ -78,6 +82,16 @@
internal = \nextinternalreference,
section = structure.sections.currentid(),
},
+ prefixdata = structure.helpers.simplify {
+ prefix = "\structurecounterparameter\currentitemgroupcounter\c!prefix",
+ separatorset = "\structurecounterparameter\currentitemgroupcounter\c!prefixseparatorset",
+ conversion = \!!bs\structurecounterparameter\currentitemgroupcounter\c!prefixconversion\!!es,
+ conversionset = "\structurecounterparameter\currentitemgroupcounter\c!prefixconversionset",
+ set = "\structurecounterparameter\currentitemgroupcounter\c!prefixset",
+ segments = "\structurecounterparameter\currentitemgroupcounter\c!prefixsegments",
+ % segments = "\askedprefixsegments",
+ connector = \!!bs\structurecounterparameter\currentitemgroupcounter\c!prefixconnector\!!es,
+ },
numberdata = structure.helpers.simplify {
numbers = structure.counters.compact("\currentitemgroupcounter",nil,true),
separatorset = "\structurecounterparameter\currentitemgroupcounter\c!numberseparatorset",
@@ -90,9 +104,10 @@
})
}%
\xdef\currentitemattribute{\number\lastdestinationattribute}%
- \begingroup\dosetattribute{destination}\currentitemattribute\kern\zeropoint\endgroup % todo
+ \begingroup\attribute\destinationattribute\currentitemattribute\kern\zeropoint\endgroup % todo
\fi}
+
% \startitemize[n,packed]
% \item test \item test \item test
% \stopitemize
@@ -141,26 +156,55 @@
\def\@@itemcounter{\s!itemcount\currentitemgroup}
-\def\doitembreak#1{\ifconditional\optimizelistitem\ifconditional\textlistitem\else\dosomebreak#1\fi\fi}
+% \def\doitembreak#1{\ifconditional\optimizelistitem\ifconditional\textlistitem\else\dosomebreak#1\fi\fi}
+%
+% \def\allowitembreak {\doitembreak\allowbreak}
+% \def\noitembreak {\doitembreak\nobreak}
+% \def\itembreakspecial {\doitembreak\itembreak}
+% \def\noitembreakspecial{\doitembreak\itemnobreak}
+%
+% \def\itembreak {\flushnotes\penalty-5\relax} % -10
+% \def\itemnobreak{\flushnotes\penalty+5\ifinsidecolumns\else00\fi\relax} % +5
+
+\definevspacing[\v!item @0] [penalty:0] % allow
+\definevspacing[\v!item @10000] [penalty:10000] % no
+\definevspacing[\v!item @-5] [penalty:-5]
+\definevspacing[\v!item @5] [penalty:5]
+\definevspacing[\v!item @500] [penalty:500]
+
+\def\doitembreak#1{\ifconditional\optimizelistitem\ifconditional\textlistitem\else#1\fi\fi}
-\def\allowitembreak {\doitembreak\allowbreak}
-\def\noitembreak {\doitembreak\nobreak}
+\def\allowitembreak {\doitembreak\itembreakallow}
+\def\noitembreak {\doitembreak\itembreakno}
\def\itembreakspecial {\doitembreak\itembreak}
\def\noitembreakspecial{\doitembreak\itemnobreak}
-\def\itembreak {\flushnotes\penalty-5\relax} % -10
-\def\itemnobreak{\flushnotes\penalty+5\ifinsidecolumns\else00\fi\relax} % +5
+\def\itembreakallow{\vspacing[\v!item @0]}
+\def\itembreakno {\vspacing[\v!item @10000]}
+\def\itembreak {\flushnotes\vspacing[\v!item @-5]}
+\def\itemnobreak {\flushnotes\ifinsidecolumns\vspacing[\v!item @5]\else\vspacing[\v!item @500]\fi}
+
+% cool but wrong:
+%
+% \def\initializeitemgrouplevel#1%
+% {\ifcsname\??op\currentitemgroup#1\s!parent\endcsname
+% % ok
+% \else\ifnum#1>\plusone
+% \setevalue{\??op\currentitemgroup#1\s!parent}{\??op\currentitemgroup\the\numexpr#1-1\relax}%
+% \else
+% \setevalue{\??op\currentitemgroup#1\s!parent}{\??op\currentitemgroup}%
+% \fi\fi}
+%
+% so we have:
\def\initializeitemgrouplevel#1%
{\ifcsname\??op\currentitemgroup#1\s!parent\endcsname
% ok
- \else\ifnum#1>\plusone
- \setevalue{\??op\currentitemgroup#1\s!parent}{\??op\currentitemgroup\the\numexpr#1-1\relax}%
\else
\setevalue{\??op\currentitemgroup#1\s!parent}{\??op\currentitemgroup}%
- \fi\fi}
+ \fi}
-\def\defineitemgroup
+\unexpanded\def\defineitemgroup
{\dotripleempty\dodefineitemgroup}
\def\dodefineitemgroup[#1][#2][#3]% todo: clone
@@ -181,7 +225,7 @@
\newtoks\everysetupitemgroup
-\def\setupitemgroups % [#1]
+\unexpanded\def\setupitemgroups % [#1]
{\dodoubleargument\getparameters[\??oo]} % [#1]
\def\packitems
@@ -199,17 +243,19 @@
\def\dodosetupitemgroupconstant#1%
{\edef\itemgroupconstantvalue{#1}%
\ifx\itemgroupconstantvalue\empty\else
- \splitstring\itemgroupconstantvalue\at*\to\itemgroupfirst\and\itemgroupsecond
- \ifcsname\??op:::\itemgroupfirst\endcsname\csname\??op:::\itemgroupfirst\endcsname\fi
+ \splitstring\itemgroupconstantvalue\at*\to\itemgroupfirst\and\itemgroupsecond
+ \ifx\itemgroupsecond\empty
+ \let\itemgroupsecond\itemgroupfirst
+ \let\itemgroupfirst\!!plusone
+ \fi
+ \ifcsname\??op:::\itemgroupsecond\endcsname\csname\??op:::\itemgroupsecond\endcsname\fi
\fi}
-\newconditional\inlinelistitem \setfalse\inlinelistitem
-
\setvalue{\??op:::\v!packed }{\packitems}
\setvalue{\??op:::\v!intro }{\settrue\introlistitem} % here? not set to false
\setvalue{\??op:::\v!autointro}{\settrue\autointrolistitem}
-\setvalue{\??op:::\v!broad }{\ifx\itemgroupsecond\empty\def\itemgroupsecond{1}\fi
- \letitemparameter\currentitemlevel\c!factor\itemgroupsecond}
+\setvalue{\??op:::\v!broad }{\ifx\itemgroupfirst\empty\def\itemgroupfirst{1}\fi
+ \letitemparameter\currentitemlevel\c!factor\itemgroupfirst}
\setvalue{\??op:::\v!text }{\settrue\textlistitem
\settrue\inlinelistitem
\settrue\joinedlistitem
@@ -225,12 +271,12 @@
\setvalue{\??op:::\v!loose }{\setfalse\optimizelistitem}
\setvalue{\??op:::\v!fit }{\settrue\fittinglistitems}
\setvalue{\??op:::\v!nofit }{\setfalse\fittinglistitems}
-\setvalue{\??op:v:\v!paragraph}{\settrue\paragraphlistitem
+\setvalue{\??op:::\v!paragraph}{\settrue\paragraphlistitem
\packitems}
\setvalue{\??op:::\v!joinedup }{\settrue\joinedlistitem
\packitems}
-\setvalue{\??op:::\v!serried }{\edef\itemgroupsecond{-\ifx\itemgroupsecond\empty1\else\itemgroupsecond\fi}%
- \letitemparameter\currentitemlevel\c!factor\itemgroupsecond}
+\setvalue{\??op:::\v!serried }{\edef\itemgroupfirst{-\ifx\itemgroupfirst\empty1\else\itemgroupfirst\fi}%
+ \letitemparameter\currentitemlevel\c!factor\itemgroupfirst}
\setvalue{\??op:::\v!stopper }{\letitemparameter\currentitemlevel\c!placestopper\v!yes} % keep {}
\setvalue{\??op:::\v!unpacked }{\setfalse\packlistitem}
\setvalue{\??op:::\v!repeat }{\settrue\repeatlistitem}
@@ -240,7 +286,7 @@
\def\dosetupstandarditemgroup#1%
{\getparameters
[\??op\currentitemgroup#1]
- [\c!width=1.5em,\c!factor=0,\c!distance=.5em,\c!inner=,
+ [\c!width=1.5em,\c!factor=0,\c!distance=.5em,\c!inner=,\c!factor=0,
\c!beforehead=,\c!afterhead=\blank,\c!before=\blank,\c!inbetween=\blank,\c!after=\blank]}
% \def\packeditemspacing{\empty}
@@ -356,7 +402,7 @@
{\def\docommand##1{\dodosetupitemgroup[##1][#2][#3][#4]}%
\processcommalist[#1]\docommand}
-\def\setupitemgroup
+\unexpanded\def\setupitemgroup
{\doquadrupleempty\dosetupitemgroup}
\def\doadvanceitem
@@ -385,7 +431,15 @@
{\begingroup
\setupstructurecounter
[\currentitemgroupcounter]
- [\c!prefix=\v!no,
+ [%\c!prefix=\v!no,
+ \c!prefix=\getitemparameter\currentitemlevel\c!prefix,
+ \c!prefixstopper=\getitemparameter\currentitemlevel\c!prefixstopper,
+ \c!prefixseparatorset=\getitemparameter\currentitemlevel\c!prefixseparatorset,
+ \c!prefixconversion=\getitemparameter\currentitemlevel\c!prefixconversion,
+ \c!prefixconversionset=\getitemparameter\currentitemlevel\c!prefixseparatorset,
+ \c!prefixset=\getitemparameter\currentitemlevel\c!prefixset,
+ \c!prefixsegments=\getitemparameter\currentitemlevel\c!prefixsegments,
+ \c!prefixconnector=\getitemparameter\currentitemlevel\c!prefixconnector,
\c!criterium=\getitemparameter\currentitemlevel\c!criterium,
\c!numberorder=\ifconditional\reverselistitem\v!reverse\else\v!normal\fi,
\c!numberstopper=\expdoif{\getitemparameter\currentitemlevel\c!placestopper}\v!yes{\getitemparameter\currentitemlevel\c!stopper},
@@ -429,13 +483,26 @@
\let\@@opsymbol\empty}%
{}}}
-\def\calculatelistwidth#1% distance deals with 'broad'
- {\itemgrouplistwidth\getitemparameter#1\c!distance\relax
- \ifnum\getitemparameter#1\c!factor>\zerocount
+% \def\calculatelistwidth#1% distance deals with 'broad'
+% {\itemgrouplistwidth\getitemparameter#1\c!distance\relax
+% \ifnum\getitemparameter#1\c!factor>\zerocount
+% \ifdim\itemgrouplistwidth=\zeropoint \itemgrouplistwidth=.5em\fi
+% \fi
+% \multiply\itemgrouplistwidth \getitemparameter#1\c!factor
+% \advance \itemgrouplistwidth \getitemparameter#1\c!width\relax}
+
+\def\calculatelistwidth#1%
+ {\ifdim\currentitemmaxwidth>\zeropoint
+ \itemgrouplistwidth\currentitemmaxwidth
+ \else\ifnum\getitemparameter#1\c!factor>\zerocount
+ \itemgrouplistwidth\getitemparameter#1\c!step\relax
\ifdim\itemgrouplistwidth=\zeropoint \itemgrouplistwidth=.5em\fi
- \fi
- \multiply\itemgrouplistwidth \getitemparameter#1\c!factor
- \advance \itemgrouplistwidth \getitemparameter#1\c!width\relax}
+ \multiply\itemgrouplistwidth \getitemparameter#1\c!factor
+ \advance\itemgrouplistwidth\getitemparameter#1\c!width\relax
+ \else
+ \itemgrouplistwidth\getitemparameter#1\c!width\relax
+ \fi\fi
+ \advance\itemgrouplistwidth\getitemparameter#1\c!distance\relax}
% The next conditionals deal with \item \startitemgroup. It
% looks like a hack to skip back, but that way we preserve
@@ -446,7 +513,7 @@
\newconditional\autoconcatnextitem \settrue \autoconcatnextitem
\newsignal \itemsignal
-\def\startitemgroup
+\unexpanded\def\startitemgroup
{\dotripleempty\dostartitemgroup}
\def\dostartitemgroup[#1][#2][#3]%
@@ -524,7 +591,7 @@
\expandafter\flushcollecteditems
\fi}
-\def\stopcollectitems
+\unexpanded\def\stopcollectitems
{\ifconditional\randomizeitems
\newcounter\itemcollectcounterdone
\ifnum\itemcollectcounter>\zerocount
@@ -532,7 +599,7 @@
\fi
\fi}
-\def\startcollectitems
+\unexpanded\def\startcollectitems
{\ifconditional\randomizeitems
\newcounter\itemcollectcounter
\letvalue{\e!start\v!item}\collectitemgroupitem
@@ -540,7 +607,7 @@
%D End of plugin.
-\ifx\startcolumns\undefined \def\startcolumns[#1]{} \fi
+\ifx\startcolumns\undefined \unexpanded\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
@@ -553,6 +620,8 @@
\v!middle=>\let\symalignleft\hfil,
\v!center=>\let\symalignleft\hfil]}
+\let\currentitemindenting\empty
+
\def\redostartitemgroup[#1][#2]%
{\setfalse\inlinelistitem % new, no indent (leftskip)
\setfalse\concatnextitem % new, concat
@@ -622,8 +691,11 @@
\fi
\dosetraggedcommand{\getitemparameter\currentitemlevel\c!align}\raggedcommand
\dosetsymalign{\getitemparameter\currentitemlevel\c!symalign}%
- \doifsomething{\getitemparameter\currentitemlevel\c!indenting}
- {\normalexpanded{\noexpand\setupindenting[\getitemparameter\currentitemlevel\c!indenting]}}%
+ %\doifsomething{\getitemparameter\currentitemlevel\c!indenting}
+ % {\normalexpanded{\noexpand\setupindenting[\v!reset,\v!yes,\getitemparameter\currentitemlevel\c!indenting]}}%
+ % {\normalexpanded{\noexpand\setupindenting[\getitemparameter\currentitemlevel\c!indenting]}}%
+ %
+ \edef\currentitemindenting{\getitemparameter\currentitemlevel\c!indenting}%
%
\setitemlevel{#1}% moved to here
\ifx\listitem\empty
@@ -689,7 +761,7 @@
% \item \input ward \item \input ward \item \input ward
% \stopitemize \blank
-\def\stopitemgroup
+\unexpanded\def\stopitemgroup
{\stopcollectitems
\ifconditional\textlistitem
\removeunwantedspaces\space\ignorespaces
@@ -734,40 +806,50 @@
\dorechecknextindentation}
\newtoks\itemgroupcommands
+\newtoks\itemgroupfinalizer
\def\itemgroupitem
- {\doitemgroupitem}
+ {\the\itemgroupfinalizer
+ \doitemgroupitem}
\def\itemgroupnoitem
- {\doitemgroupnoitem}
+ {\the\itemgroupfinalizer
+ \doitemgroupnoitem}
\def\itemgroupbutton[#1]%
- {\gdef\doitemdestination{#1}%
+ {\the\itemgroupfinalizer
+ \gdef\doitemdestination{#1}%
\itemgroupitem}
\def\itemgroupdummy
- {\itemgroupsymbol{\strut}\strut}
+ {\the\itemgroupfinalizer
+ \itemgroupsymbol{\strut}\strut}
\def\itemgroupsubitem
- {\settrue\sublistitem
+ {\the\itemgroupfinalizer
+ \settrue\sublistitem
\itemgroupitem}
\def\itemgroupsymbol#1%
- {\def\symsymbol{#1}%
+ {\the\itemgroupfinalizer
+ \def\symsymbol{#1}%
\settrue\symbollistitem
\itemgroupitem}
\def\itemgroupedge#1%
- {\itemgroupsymbol
+ {\the\itemgroupfinalizer
+ \itemgroupsymbol
{\calculatelistwidth\currentitemlevel
\hbox to \itemgrouplistwidth
{#1\hskip\getitemparameter\currentitemlevel\c!distance}}}
\def\itemgrouphead
- {\settrue\headlistitem\doitemgrouphead}
+ {\the\itemgroupfinalizer
+ \settrue\headlistitem\doitemgrouphead}
\def\itemgroupitems
- {\dosingleempty\doitemgroupitems}
+ {\the\itemgroupfinalizer
+ \dosingleempty\doitemgroupitems}
\def\doitemgroupitems[#1]%
{\itemgroupedge
@@ -775,7 +857,8 @@
\unskip}}
\def\itemgroupmargin#1%
- {\def\marsymbol
+ {\the\itemgroupfinalizer
+ \def\marsymbol
{\llap
{\dosetitemattributes\currentitemlevel\c!marstyle\c!marcolor{#1}%
\hskip\leftskip\hskip\leftmargindistance}}%
@@ -795,6 +878,16 @@
\appendtoks \letvalue\v!mar \itemgroupmargin \to \itemgroupcommands
% todo : \startitem .. \stopitem
+%
+% beware, we don't group (yet) as we want to keep the left/right skip
+%
+% \startitemize
+% \startitem \stopitem
+% some intermediate text that will properly indent
+% \startitem \stopitem
+% \stopitem
+%
+% so we need to keep that property
\appendtoks
\letvalue{\e!start\v!item}\itemgroupitem
@@ -869,7 +962,7 @@
\else
\scratchdimen\zeropoint
\fi
- \llap{\hbox to \itemgrouplistwidth{\ifconditional\sublistitem\llap{+}\fi\box\itemgroupitembox\hss}}% was: \hfill
+ \llap{\hbox to \itemgrouplistwidth{\ifconditional\sublistitem\llap{+\enspace}\fi\box\itemgroupitembox\hss}}% was: \hfill
\hskip\scratchdimen}
\def\optimizelistitemsbreak
@@ -897,6 +990,18 @@
\fi
\fi\fi}
+\def\dodosubitem
+ {\ifconditional\sublistitem\llap{+\enspace}\fi}
+
+\def\dodolapitem
+ {\llap
+ {\hbox to \itemgrouplistwidth
+ {\dodosubitem
+ \symalignleft
+ \box\itemgroupitembox % can already have a forced widt, only factor handled here
+ \hfil
+ \hskip\getitemparameter\currentitemlevel\c!distance}}}
+
\def\dolistitem % evt aantal items opslaan per niveau, scheelt zoeken
{\ifconditional\textlistitem
% begin of item
@@ -905,7 +1010,16 @@
\fi
\advance\noflistelements\plusone
\optimizelistitemsbreak
- \noindent
+ \setfalse\indentedfirstlistitem
+ \ifx\currentitemindenting\empty \else
+ \normalexpanded{\noexpand\setupindenting[\v!reset,\v!yes,\currentitemindenting]}%
+ \doifnot{\getitemparameter\currentitemlevel\c!alignsymbol}\v!yes
+ {\ifindentfirstparagraph\settrue\indentedfirstlistitem\fi}%
+ \fi
+ \dontleavehmode
+ \ifconditional\indentedfirstlistitem
+ \hskip-\parindent
+ \fi
\setbox\itemgroupitembox\hbox
{\ifconditional\headlistitem
\ifconditional\symbollistitem
@@ -920,25 +1034,34 @@
\dosetitemattributes\currentitemlevel\c!style\c!color{\listitem}%
\fi
\fi}%
- \ifconditional\fittinglistitems
- \ifdim\wd\itemgroupitembox>\getitemparameter\currentitemlevel\c!maxwidth sp\relax
- \xsetitemparameter\currentitemlevel\c!maxwidth{\number\wd\itemgroupitembox}%
- \fi
- \ifdim\currentitemmaxwidth>\zeropoint
- \setbox\itemgroupitembox\simplealignedbox{\getitemparameter\currentitemlevel\c!itemalign}{\currentitemmaxwidth}{\box\itemgroupitembox}%
- \fi
- \fi
\doifsomething\doitemdestination
{\setbox\itemgroupitembox\hbox{\directgotobox{\box\itemgroupitembox}[\doitemdestination]}}%
- \globallet\doitemdestination\empty
\itemgroupaskedwidth\getitemparameter\currentitemlevel\c!width\relax
+ \ifconditional\fittinglistitems
+ \ifdim\wd\itemgroupitembox>\getitemparameter\currentitemlevel\c!maxwidth sp\relax
+ \xsetitemparameter\currentitemlevel\c!maxwidth{\number\wd\itemgroupitembox}%
+ \fi
+ \ifdim\currentitemmaxwidth>\zeropoint
+ \setbox\itemgroupitembox\simplealignedbox
+ {\getitemparameter\currentitemlevel\c!itemalign}
+ {\dimexpr\currentitemmaxwidth+\getitemparameter\currentitemlevel\c!distance\relax}
+ {\box\itemgroupitembox\hskip\getitemparameter\currentitemlevel\c!distance}%
+ \fi
+ \else\ifdim\itemgroupaskedwidth>\zeropoint
+ \doifsomething{\getitemparameter\currentitemlevel\c!itemalign}
+ {\setbox\itemgroupitembox\simplealignedbox
+ {\getitemparameter\currentitemlevel\c!itemalign}
+ {\dimexpr\itemgroupaskedwidth+\getitemparameter\currentitemlevel\c!distance\relax}
+ {\box\itemgroupitembox\hskip\getitemparameter\currentitemlevel\c!distance}}%
+ \fi\fi
+ \globallet\doitemdestination\empty
% new, prevents loops when symbol is (not yet found) graphic
\ht\itemgroupitembox\strutheight
\dp\itemgroupitembox\strutdepth
% so that content differs per run (esp mp graphics afterwards)
\checkforrepeatedlistitem
\ifdim\itemgroupaskedwidth<\zeropoint\relax
- \llap{\ifconditional\sublistitem\llap{+}\fi\box\itemgroupitembox\hskip\leftmargindistance}%
+ \llap{\ifconditional\sublistitem\llap{+\enspace}\fi\box\itemgroupitembox\hskip\leftmargindistance}%
\else
\ifdim\itemgroupaskedwidth=\zeropoint\relax
\calculatelistwidth1%
@@ -946,29 +1069,25 @@
\calculatelistwidth\currentitemlevel
\fi
\ifconditional\textlistitem
- \hbox{\ifconditional\sublistitem+\fi\box\itemgroupitembox\hskip\interwordspace}\nobreak
+ \hbox{\ifconditional\sublistitem+\enspace\fi\box\itemgroupitembox\hskip\interwordspace}\nobreak
\else\ifconditional\inlinelistitem
- \hbox to \itemgrouplistwidth{\ifconditional\sublistitem\llap{+}\fi\box\itemgroupitembox\hss}% was: \hfill
+ \hbox to \itemgrouplistwidth{\ifconditional\sublistitem\llap{+\enspace}\fi\box\itemgroupitembox\hss}% was: \hfill
\else\ifconditional\txtlistitem
\dodotxtitem
\else
- % todo: align+marge binnen de hbox
- \llap{\hbox to \itemgrouplistwidth{\ifconditional\sublistitem\llap{+}\fi
- \symalignleft
- \box\itemgroupitembox\hfil
- \hskip\getitemparameter\currentitemlevel\c!distance% T h
- }}%
+ \dodolapitem
\fi\fi\fi
\fi
- \forceunexpanded % needed for m conversion (\os) / i need to look into this
\setevalue{\@@currentitemsymbol\currentitemlevel}%
{\getvalue{\@@localitemsymbol\currentitemlevel}}% still problems with \uchar ?
%{\noexpand\getvalue{\@@localitemsymbol\currentitemlevel}}% no, spoils subrefs
- \resetunexpanded
\setfalse\headlistitem
\setfalse\sublistitem
\setfalse\symbollistitem
\EveryPar{\ignorespaces}% needed ?
+ \ifconditional\indentedfirstlistitem
+ \hskip\parindent
+ \fi
\ignorespaces}
% For Wolfgang Schuster
@@ -995,7 +1114,7 @@
\def\checkforrepeatedlistitem
{\ifconditional\repeatlistitem
\ifx\currentrepeatstart\empty
- \edef\currentrepeatstart{\the\numexpr\currentitemlevel-1}%
+ \let\currentrepeatstart\currentitemlevel
\fi
\setbox\itemgroupitembox\hbox to \wd\itemgroupitembox{\hskip-\itemgroupaskedwidth\box\itemgroupitembox}% what a hack !
\fi}
@@ -1058,7 +1177,11 @@
\fi
\else
\ifconditional\textlistitem % was bugged: \inlinelistitem
- \removeunwantedspaces\hskip\emwidth\!!plus\interwordstretch\!!minus\interwordshrink\relax % new per 2006/10/20
+ \ifhmode
+ % WS: make the distance between items customizable, think about better default values -> see itemize-1.tex
+ \normalexpanded{\doassigntextitemdistance{\getitemparameter\currentitemlevel\c!textdistance}}% HH: moved out and made configurable (sort of)
+ \removeunwantedspaces\hskip\textitemdistance\relax
+ \fi
\else
\iteminbetweencommand
\fi
@@ -1076,12 +1199,33 @@
\marsymbol
\let\marsymbol\relax
\strut % added 11-08-99
-% \dohandleitemreference
\setfalse\concatnextitem % new, concat
\nobreak % else problems with intext items
\hskip\itemsignal % new, concat
\getitemparameter\currentitemlevel\c!command} % \defaultitemcommand
+% \startitemize[text][space=medium]
+% \item one \item two \item three
+% \stopitemize
+
+\setvalue{\??op:\??op:\c!textdistance:\v!none}%
+ {\def\textitemdistance{\zeropoint}}
+
+\def\doassigngiventextitemdistance#1%
+ {\assignvalue
+ {#1}%
+ \textitemdistance
+ {.5\interwordspace\!!plus.5\emwidth}%
+ {\interwordspace \!!plus \emwidth}%
+ {\emwidth \!!plus \interwordstretch\!!minus\interwordshrink}}
+
+\unexpanded\def\doassigntextitemdistance#1%
+ {\ifcsname\??op:\??op:\c!textdistance:#1\endcsname
+ \csname\??op:\??op:\c!textdistance:#1\endcsname
+ \else
+ \doassigngiventextitemdistance{#1}%
+ \fi}
+
\def\defaultitemcommand
{\EveryPar{\ignorespaces}% needed ?
\ignorespaces}
@@ -1113,6 +1257,8 @@
% the next solution accepts \head test \type{x{x}x} test ...
+\let\doenditemhead\relax
+
\def\complexdoitemgrouphead[#1]% beter in \complexdosom hangen met een if
{\ifconditional\firstlistitem\else\allowitembreak\fi
\ifconditional\packlistitem\else\itembeforeheadcommand\fi
@@ -1123,6 +1269,7 @@
\bgroup
\dosetitemattributes\currentitemlevel\c!headstyle\c!headcolor\empty
\ignorespaces
+ \itemgroupfinalizer{\enditemhead}%
\let\par\enditemhead} % brrrr but simple anyway
\def\enditemhead
@@ -1186,11 +1333,29 @@
\c!start=1,
\c!criterium=\v!all, % permits 0 and negative numbers
%\c!option=,
+ \c!textdistance=\v!big,
\c!command=\defaultitemcommand,
+ \c!indenting=\v!next,
+ %\c!alignsymbol=v!no,
\c!symbol=\currentitemlevel]
+% new:
+
+\setupitemgroups
+ [\c!step=.5em, % deals with broad
+ \c!distance=\zeropoint]
+
\setupitemgroups
- [\c!numberseparatorset=,
+ [\c!prefix=\v!no,
+% \c!prefixstopper=.,
+% \c!prefixseparatorset=,
+% \c!prefixconversion=,
+% \c!prefixconversionset=,
+% \c!prefixset=,
+% \c!prefixsegments=1:100,
+ \c!prefixconnector=.,
+ %
+ \c!numberseparatorset=,
\c!numberconversionset=,
\c!numberstopper=.,
\c!numbersegments=1]
diff --git a/Master/texmf-dist/tex/context/base/strc-lnt.mkiv b/Master/texmf-dist/tex/context/base/strc-lnt.mkiv
index d0816cfc747..0df44294bdd 100644
--- a/Master/texmf-dist/tex/context/base/strc-lnt.mkiv
+++ b/Master/texmf-dist/tex/context/base/strc-lnt.mkiv
@@ -17,26 +17,13 @@
\unprotect
-\newcounter\linenotecounter
-\newtoks \collectedlinenotes
-\newif \iftracelinenotes
-
-\appendtoks
- \the\collectedlinenotes
-\to \everylinenumber
-
-\appendtoks
- \global\collectedlinenotes\emptytoks
-\to \beforeeverylinenumbering
+\newcounter\linenotecounter \newif\iftracelinenotes % will be tracker
\def\dohandlelinenote#1#2#3%
{\bgroup
- \expanded{\beforesplitstring#2}\at--\to\linenotelinenumber
- \ifnum\linenotelinenumber=\linenumber\relax
- \def\linenotelinenumber##1{#2}%
- \setupnote[#1][\c!numbercommand=\linenotelinenumber,\c!textcommand=\gobbleoneargument]%
- \setnote[#1]{#3}%
- \fi
+ \def\linenotelinenumber##1{\inlinerange[#2]}% ##1 == order
+ \setupnote[ln:#1][\c!numbercommand=\linenotelinenumber,\c!textcommand=\gobbleoneargument]% todo: deep hook
+ \setnote[ln:#1]{#3}%
\egroup}
\def\dotracedlinenote#1%
@@ -54,37 +41,30 @@
\def\dolinenote#1#2%
{\doglobal\increment\linenotecounter
- \doifreferencefoundelse{\??rr:\linenotecounter}%
- {\expanded{\doglobal\noexpand\appendtoks\noexpand\dohandlelinenote
- {#1}{\currenttextreference}}{#2}\to\collectedlinenotes}
- \donothing
+ \dohandlelinenote{#1}{\linenotecounter}{#2}%
\dotracedlinenote\empty
- \expanded{\someline[\??rr:\linenotecounter]}}
+ \expanded{\someline[\linenotecounter]}}
\def\dostartlinenote#1[#2]#3%
- {\doifreferencefoundelse{\??rr:#2}%
- {\expanded{\doglobal\noexpand\appendtoks\noexpand\dohandlelinenote
- {#1}{\currenttextreference}}{#3}\to\collectedlinenotes}%
- {\unknownreference{#2}}%
+ {\doglobal\increment\linenotecounter
+ \dohandlelinenote{#1}{#2}{#3}%
\dotracedlinenote{#2}%
- \startline[\??rr:#2]}
+ \startline[#2]}
\def\dostoplinenote#1[#2]%
- {\stopline[\??rr:#2]}
-
-% defining them
+ {\stopline[#2]}
-\def\definelinenote
+\unexpanded\def\definelinenote
{\dodoubleempty\dodefinelinenote}
\def\dodefinelinenote[#1][#2]%
- {\definenote[#1][#2]%
- \setvalue {#1}{\dolinenote {#1}}%
- \setvalue{\e!start#1}{\dostartlinenote{#1}}%
- \setvalue{\e!stop #1}{\dostoplinenote {#1}}}
+ {\definenote[ln:#1][#2]%
+ \setuvalue {#1}{\dolinenote {#1}}%
+ \setuvalue{\e!start#1}{\dostartlinenote{#1}}%
+ \setuvalue{\e!stop #1}{\dostoplinenote {#1}}}
-\def\setuplinenote % convenient
- {\setupnote}
+\unexpanded\def\setuplinenote[#1]% convenient
+ {\setupnote[ln:#1]}
% We predefine one, namely \type {\linenote} cum suis.
diff --git a/Master/texmf-dist/tex/context/base/strc-lst.lua b/Master/texmf-dist/tex/context/base/strc-lst.lua
index dd45e7f689d..fefbe52ce29 100644
--- a/Master/texmf-dist/tex/context/base/strc-lst.lua
+++ b/Master/texmf-dist/tex/context/base/strc-lst.lua
@@ -1,6 +1,6 @@
if not modules then modules = { } end modules ['strc-lst'] = {
version = 1.001,
- comment = "companion to strc-lst.tex",
+ comment = "companion to strc-lst.mkiv",
author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
copyright = "PRAGMA ADE / ConTeXt Development Team",
license = "see context related readme files"
@@ -11,9 +11,13 @@ if not modules then modules = { } end modules ['strc-lst'] = {
-- section, metadata cache (internal then has to move up one level) or a
-- shared cache [we can use a fast and stupid serializer]
-local format, tonumber = string.format, tonumber
+local format, gmatch, gsub = string.format, string.gmatch, string.gsub
+local tonumber = tonumber
local texsprint, texprint, texwrite, texcount = tex.sprint, tex.print, tex.write, tex.count
-local insert, remove = table.insert, table.remove
+local concat, insert, remove = table.concat, table.insert, table.remove
+local lpegmatch = lpeg.match
+
+local trace_lists = false trackers.register("structure.lists", function(v) trace_lists = v end)
local ctxcatcodes = tex.ctxcatcodes
@@ -36,6 +40,7 @@ lists.internals = lists.internals or { }
lists.ordered = lists.ordered or { }
local variables = interfaces.variables
+local matching_till_depth, number_at_depth = sections.matching_till_depth, sections.number_at_depth
local function initializer()
-- create a cross reference between internal references
@@ -76,8 +81,7 @@ if job then
job.register('structure.lists.collected', structure.lists.tobesaved, initializer)
end
-local cached = { }
-local pushed = { }
+local cached, pushed = { }, { }
function lists.push(t)
local r = t.references
@@ -103,7 +107,7 @@ function lists.enhance(n)
if l then
--
l.directives = nil -- might change
- -- save in the right order (happen sat shipout)
+ -- save in the right order (happens at shipout)
lists.tobesaved[#lists.tobesaved+1] = l
-- default enhancer (cross referencing)
l.references.realpage = texcount.realpageno
@@ -125,7 +129,7 @@ function lists.pushnesting(i)
local name = r.metadata.name
local numberdata = r and r.numberdata
local n = (numberdata and numberdata.numbers[sections.getlevel(name)]) or 0
- insert(nesting, { number = n, name = name, result = lists.result })
+ insert(nesting, { number = n, name = name, result = lists.result, parent = r })
end
function lists.popnesting()
@@ -133,15 +137,30 @@ function lists.popnesting()
lists.result = old.result
end
-local function filter_collected(names, criterium, number, collected)
+-- will be split
+
+local function filter_collected(names, criterium, number, collected, nested)
local numbers, depth = documents.data.numbers, documents.data.depth
- local hash, result, all = { }, { }, not names or names == "" or names == variables.all
+ local hash, result, all, detail = { }, { }, not names or names == "" or names == variables.all, nil
+ names, criterium = gsub(names," ",""), gsub(criterium," ","")
+ if trace_lists then
+ logs.report("lists","filtering names: %s, criterium: %s, number: %s",names,criterium,number or "-")
+ end
if not all then
- for s in names:gmatch("[^, ]+") do
+ for s in gmatch(names,"[^, ]+") do -- sort of settings to hash
hash[s] = true
end
end
- if criterium == variables.all or criterium == variables.text then
+ if criterium == variables.intro then
+ -- special case, no structure yet
+ for i=1,#collected do
+ local v = collected[i]
+ local r = v.references
+ if r and r.section == 0 then
+ result[#result+1] = v
+ end
+ end
+ elseif criterium == variables.all or criterium == variables.text then
for i=1,#collected do
local v = collected[i]
local r = v.references
@@ -156,26 +175,30 @@ local function filter_collected(names, criterium, number, collected)
end
end
elseif criterium == variables.current then
- for i=1,#collected do
- local v = collected[i]
- local r = v.references
- if r then
- local sectionnumber = jobsections.collected[r.section]
- if sectionnumber then -- and not sectionnumber.hidenumber then
- local cnumbers = sectionnumber.numbers
- local metadata = v.metadata
- if cnumbers then
- if metadata and not metadata.nolist and (all or hash[metadata.name or false]) and #cnumbers > depth then
- local ok = true
- for d=1,depth do
- local cnd = cnumbers[d]
- if not (cnd == 0 or cnd == numbers[d]) then
- ok = false
- break
+ if depth == 0 then
+ return filter_collected(names,variables.intro,number,collected)
+ else
+ for i=1,#collected do
+ local v = collected[i]
+ local r = v.references
+ if r then
+ local sectionnumber = jobsections.collected[r.section]
+ if sectionnumber then -- and not sectionnumber.hidenumber then
+ local cnumbers = sectionnumber.numbers
+ local metadata = v.metadata
+ if cnumbers then
+ if metadata and not metadata.nolist and (all or hash[metadata.name or false]) and #cnumbers > depth then
+ local ok = true
+ for d=1,depth do
+ local cnd = cnumbers[d]
+ if not (cnd == 0 or cnd == numbers[d]) then
+ ok = false
+ break
+ end
+ end
+ if ok then
+ result[#result+1] = v
end
- end
- if ok then
- result[#result+1] = v
end
end
end
@@ -183,26 +206,32 @@ local function filter_collected(names, criterium, number, collected)
end
end
elseif criterium == variables.here then
- for i=1,#collected do
- local v = collected[i]
- local r = v.references
- if r then
- local sectionnumber = jobsections.collected[r.section]
- if sectionnumber then -- and not sectionnumber.hidenumber then
- local cnumbers = sectionnumber.numbers
- local metadata = v.metadata
- if cnumbers then
- if metadata and not metadata.nolist and (all or hash[metadata.name or false]) and #cnumbers >= depth then
- local ok = true
- for d=1,depth do
- local cnd = cnumbers[d]
- if not (cnd == 0 or cnd == numbers[d]) then
- ok = false
- break
+ -- this is quite dirty ... as cnumbers is not sparse we can misuse #cnumbers
+ if depth == 0 then
+ return filter_collected(names,variables.intro,number,collected)
+ else
+ for i=1,#collected do
+ local v = collected[i]
+ local r = v.references
+ if r then
+ local sectionnumber = jobsections.collected[r.section]
+ if sectionnumber then -- and not sectionnumber.hidenumber then
+ local cnumbers = sectionnumber.numbers
+ local metadata = v.metadata
+ if cnumbers then
+--~ print(#cnumbers, depth, table.concat(cnumbers))
+ if metadata and not metadata.nolist and (all or hash[metadata.name or false]) and #cnumbers >= depth then
+ local ok = true
+ for d=1,depth do
+ local cnd = cnumbers[d]
+ if not (cnd == 0 or cnd == numbers[d]) then
+ ok = false
+ break
+ end
+ end
+ if ok then
+ result[#result+1] = v
end
- end
- if ok then
- result[#result+1] = v
end
end
end
@@ -210,26 +239,30 @@ local function filter_collected(names, criterium, number, collected)
end
end
elseif criterium == variables.previous then
- for i=1,#collected do
- local v = collected[i]
- local r = v.references
- if r then
- local sectionnumber = jobsections.collected[r.section]
- if sectionnumber then -- and not sectionnumber.hidenumber then
- local cnumbers = sectionnumber.numbers
- local metadata = v.metadata
- if cnumbers then
- if metadata and not metadata.nolist and (all or hash[metadata.name or false]) and #cnumbers >= depth then
- local ok = true
- for d=1,depth-1 do
- local cnd = cnumbers[d]
- if not (cnd == 0 or cnd == numbers[d]) then
- ok = false
- break
+ if depth == 0 then
+ return filter_collected(names,variables.intro,number,collected)
+ else
+ for i=1,#collected do
+ local v = collected[i]
+ local r = v.references
+ if r then
+ local sectionnumber = jobsections.collected[r.section]
+ if sectionnumber then -- and not sectionnumber.hidenumber then
+ local cnumbers = sectionnumber.numbers
+ local metadata = v.metadata
+ if cnumbers then
+ if metadata and not metadata.nolist and (all or hash[metadata.name or false]) and #cnumbers >= depth then
+ local ok = true
+ for d=1,depth-1 do
+ local cnd = cnumbers[d]
+ if not (cnd == 0 or cnd == numbers[d]) then
+ ok = false
+ break
+ end
+ end
+ if ok then
+ result[#result+1] = v
end
- end
- if ok then
- result[#result+1] = v
end
end
end
@@ -239,33 +272,47 @@ local function filter_collected(names, criterium, number, collected)
elseif criterium == variables["local"] then -- not yet ok
local nested = nesting[#nesting]
if nested then
- return filter_collected(names,nested.name,nested.number,collected)
+ return filter_collected(names,nested.name,nested.number,collected,nested)
elseif sections.autodepth(documents.data.numbers) == 0 then
return filter_collected(names,variables.all,number,collected)
else
return filter_collected(names,variables.current,number,collected)
end
else -- sectionname, number
+ -- not the same as register
local depth = sections.getlevel(criterium)
- local number = tonumber(number) or 0
- for i=1,#collected do
- local v = collected[i]
- local r = v.references
- if r then
- local sectionnumber = jobsections.collected[r.section]
- if sectionnumber then -- and not sectionnumber.hidenumber then
- local cnumbers = sectionnumber.numbers
- local metadata = v.metadata
- if cnumbers then
--- if metadata and not metadata.nolist and (all or hash[metadata.name or false]) and #cnumbers >= depth and cnumbers[depth] == number then
- if metadata and not metadata.nolist and (all or hash[metadata.name or false]) and #cnumbers >= depth and (number == 0 or cnumbers[depth] == number) then
- result[#result+1] = v
+ local number = tonumber(number) or number_at_depth(depth) or 0
+ if trace_lists then
+ local t = sections.numbers()
+ detail = format("depth: %s, number: %s, numbers: %s, startset: %s",depth,number,(#t>0 and concat(t,".",1,depth)) or "?",#collected)
+ end
+ if number > 0 then
+ local parent = nested and nested.parent and nested.parent.numberdata.numbers -- so local as well as nested
+ for i=1,#collected do
+ local v = collected[i]
+ local r = v.references
+ if r then
+ local sectionnumber = jobsections.collected[r.section]
+ if sectionnumber then
+ local metadata = v.metadata
+ local cnumbers = sectionnumber.numbers
+ if cnumbers then
+ if (all or hash[metadata.name or false]) and #cnumbers >= depth and matching_till_depth(depth,cnumbers,parent) then
+ result[#result+1] = v
+ end
end
end
end
end
end
end
+ if trace_lists then
+ if detail then
+ logs.report("lists","criterium: %s, %s, found: %s",criterium,detail,#result)
+ else
+ logs.report("lists","criterium: %s, found: %s",criterium,#result)
+ end
+ end
return result
end
@@ -283,6 +330,7 @@ function lists.process(...)
local r = lists.result[i]
local m = r.metadata
texsprint(ctxcatcodes,format("\\processlistofstructure{%s}{%s}{%i}",m.name,m.kind,i))
+--~ context.processlistofstructure(m.name,m.kind,i)
end
end
@@ -290,12 +338,14 @@ function lists.analyze(...)
lists.result = lists.filter(...)
end
-function lists.userdata(name,r,tag) -- to tex
- local str = lists.result[r]
- str = str and str.userdata
- str = str and str[tag]
- if str then
- texsprint(ctxcatcodes,str)
+function lists.userdata(name,r,tag) -- to tex (todo: xml)
+ local result = lists.result[r]
+ if result then
+ local userdata, metadata = result.userdata, result.metadata
+ local str = userdata and userdata[tag]
+ if str then
+ texsprint(metadata and metadata.catcodes or ctxcatcodes,str)
+ end
end
end
@@ -310,7 +360,7 @@ function lists.size()
texprint(#lists.result)
end
-function lists.location(name,n)
+function lists.location(n)
local l = lists.result[n]
texsprint(l.references.internal or n)
end
@@ -330,7 +380,6 @@ function lists.title(name,n,tag) -- tag becomes obsolete
local titledata = data.titledata
if titledata then
helpers.title(titledata[tag] or titledata.list or titledata.title or "",data.metadata)
---~ texsprint(ctxcatcodes,titledata[tag] or titledata.list or titledata.title or "")
end
end
end
@@ -362,6 +411,7 @@ function lists.savedprefixednumber(name,n)
helpers.prefix(data,data.prefixdata)
local numberdata = data.numberdata
if numberdata then
+--~ print(name,n,table.serialize(numberdata))
sections.typesetnumber(numberdata,"number",numberdata or false)
end
end
@@ -407,7 +457,30 @@ function lists.prefixednumber(name,n,prefixspec,numberspec)
helpers.prefix(data,prefixspec)
local numberdata = data.numberdata
if numberdata then
- sections.typesetnumber(numberdata,"number",spec or false,numberdata or false)
+--~ print(table.serialize(numberspec))
+ sections.typesetnumber(numberdata,"number",numberspec or false,numberdata or false)
+ end
+ end
+end
+
+-- todo, do this in references namespace ordered instead (this is an experiment)
+--
+-- also see lpdf-ano (maybe move this there)
+
+local splitter = lpeg.splitat(":")
+
+function jobreferences.specials.order(var,actions) -- jobreferences.specials !
+ local operation = var.operation
+ if operation then
+ local kind, name, n = lpegmatch(splitter,operation)
+ local order = lists.ordered[kind]
+ order = order and order[name]
+ local v = order[tonumber(n)]
+ local r = v and v.references.realpage
+ if r then
+ actions.realpage = r
+ var.operation = r -- brrr, but test anyway
+ return jobreferences.specials.page(var,actions)
end
end
end
diff --git a/Master/texmf-dist/tex/context/base/strc-lst.mkiv b/Master/texmf-dist/tex/context/base/strc-lst.mkiv
index 440047a423a..413052882e5 100644
--- a/Master/texmf-dist/tex/context/base/strc-lst.mkiv
+++ b/Master/texmf-dist/tex/context/base/strc-lst.mkiv
@@ -91,7 +91,7 @@
\endgroup}
\def\structurelistlocation
- {\ctxlua{structure.lists.location("\currentlist",\currentlistindex)}}
+ {\ctxlua{structure.lists.location(\currentlistindex)}}
\def\structurelistpagenumber
{\ctxlua{structure.lists.prefixedpage(
@@ -107,6 +107,7 @@
{
prefix = "\listparameter\c!pageprefix",
conversionset = "\listparameter\c!pageconversionset",
+ starter = \!!bs\listparameter\c!pagestarter\!!es,
stopper = \!!bs\listparameter\c!pagestopper\!!es,
}
)}}
@@ -126,7 +127,7 @@
% \appendtoks
% \to \everystructurelist
-\def\placestructurelist#1#2#3%
+\unexpanded\def\placestructurelist#1#2#3% hm ... [][][]
{\ctxlua{structure.lists.process("#1","#2","#3")}}
\def\analysestructurelist#1#2#3%
@@ -181,16 +182,20 @@
\currentlist
\structurelistlocation
\structurelistgenericnumber
- \structurelistgenerictitle
+ \structurelistgenerictitle % hm, can end up in message (volkers test)
\structurelistpagenumber
\structurelistrealpagenumber}
% so far (todo: also recursive)
\def\listalternativeparameter#1%
- {\csname\??li\??li\listparameter\c!alternative#1\endcsname}
+ {\ifcsname\??li\??li\listparameter\c!alternative#1\endcsname
+ \csname\??li\??li\listparameter\c!alternative#1\endcsname
+ \else
+ \listparameter{#1}%
+ \fi}
-\def\setuplistalternative[#1]%
+\unexpanded\def\setuplistalternative[#1]%
{\dodoubleargument\getparameters[\??li\??li#1]}
\def\listfill {\listalternativeparameter\c!command }
@@ -208,14 +213,20 @@
\def\listdots{\leaders\hbox to .5em{\hss.\hss}\hfill}
-\setvalue{\??li\c!alternative}{\getvalue{\??li\c!alternative b}}
-\getvalue{\??li\c!alternative}
+% \setvalue{\??li\c!alternative}{\getvalue{\??li\c!alternative b}} % ?
+% \getvalue{\??li\c!alternative} % ?
+
+\def\checklistexistence#1%
+ {\ifcsname\??li#1\s!parent\endcsname \else
+ \letvalue{\??li#1\s!parent}\??li
+ \fi}
\def\dosetuplist[#1][#2]% slow -)
- {\def\docommand##1{\getparameters[\??li##1][#2]}%
+ {\checklistexistence{#1}%
+ \def\docommand##1{\getparameters[\??li##1][#2]}%
\processcommalist[#1]\docommand}
-\def\setuplist
+\unexpanded\def\setuplist
{\dodoubleargument\dosetuplist}
\def\dodefinelist[#1][#2][#3]%
@@ -226,7 +237,7 @@
{\getparameters[\??li#1][\s!parent=\??li]}
{\getparameters[\??li#1][\s!parent=\??li#2,#3]}}}
-\def\setuplists % new, but not for users (hardly handy)
+\unexpanded\def\setuplists % new, but not for users (hardly handy)
{\dodoubleargument\getparameters[\??li]}
\setuplists
@@ -266,17 +277,20 @@
\c!limittext=\@@kolimittext,
%\c!sectionseparatorset=,
%\c!sectionconversionset=,
+ %\c!sectionstarter=,
%\c!sectionstopper=,
%\c!sectionset=,
%\c!sectionsegments=,
%\c!prefix=\v!no,
%\c!prefixseparatorset=,
%\c!prefixconversionset=,
+ %\c!prefixstarter=.,
%\c!prefixstopper=.,
%\c!prefixset=,
%\c!prefixsegments=,
%\c!pageseparatorset=,
%\c!pageconversionset=,
+ %\c!pagestarter=,
%\c!pagestopper=,
%\c!expansion=,
% \c!prefixconnector=., % maybe inherit from setupheads
@@ -284,13 +298,13 @@
% \c!pageprefixconnector=\listparameter\c!prefixconnector,
]%\c!pagesegments=2:2]
-\def\definelist
+\unexpanded\def\definelist
{\dotripleempty\dodefinelist}
-\def\placelist
+\unexpanded\def\placelist
{\dodoubleempty\doplacelist}
-\def\placerawlist
+\unexpanded\def\placerawlist
{\dodoubleempty\doplacerawlist}
\def\dobeginoflist
@@ -355,11 +369,11 @@
\utilitydonetrue \setsystemmode \v!list
\fi}
-\def\systemsuppliedchapter {\getvalue{\v!chapter}} % brrr
-\def\systemsuppliedtitle {\getvalue{\v!title}} % brrr
+\unexpanded\def\systemsuppliedchapter {\getvalue{\v!chapter}} % brrr
+\unexpanded\def\systemsuppliedtitle {\getvalue{\v!title}} % brrr
\def\dodocompletelist[#1][#2][#3]% enkelvoud, meervoud, instellingen
- {\normalexpanded{\noexpand\systemsuppliedtitle[#2]{\noexpand\headtext{#2}}}% expansion needed for v! vs french !
+ {\normalexpanded{\systemsuppliedtitle[#2]{\noexpand\headtext{#2}}}% expansion needed for v! vs french !
\doplacelist[#1][#3]}
\def\docompletelist[#1][#2]%
@@ -433,6 +447,7 @@
{% prefix = no, none, yes
\strut
\doif{\listparameter\c!label}\v!yes{\leftlabeltext\currentlist}% we can use the new command that does left and right
+ \listparameter\c!starter
\currentlistnumber
\listparameter\c!stopper
\doif{\listparameter\c!label}\v!yes{\rightlabeltext\currentlist}}
@@ -444,10 +459,12 @@
\strut
\doifelse{\listparameter\c!label}\v!yes
{\leftlabeltext\currentlist
+ \listparameter\c!starter
\currentlistnumber
\listparameter\c!stopper
\rightlabeltext\currentlist}
- {\currentlistnumber
+ {\listparameter\c!starter
+ \currentlistnumber
\listparameter\c!stopper}}
\def\listsymbol@unknown
@@ -481,7 +498,7 @@
% \definelistplacement[MyListItem][none]#1#2#3%
% {(#1) (#2) (#3)}
-\def\definelistplacement
+\unexpanded\def\definelistplacement
{\dodoubleempty\dodefinelistplacement}
\def\dodefinelistplacement[#1][#2]%
@@ -531,12 +548,13 @@
{[\currentlist: #3 -- #4 -- #5]}}
\def\domakelistelement#1#2#3#4% ref internal command data
- {\dontleavehmode
- \doifnot{\listparameter\c!interaction}{#1}\locationfalse
- \iflocation
- \directgotobox{\setlocationcolor\??ia#4}[internal(#2)]%
+ {\dontleavehmode
+ \iflocation % we cannot tewak \iflocation as we nest
+ \doifelse{\listparameter\c!interaction}{#1}
+ {\directgoto{\setlocationcolor\??ia#4}[internal(#2)]}% was \directgotobox
+ {#3{#4}}%
\else
- #3{#4}%
+ #3{#4}%
\fi}
\def\dodofreelistelement#1#2#3#4#5#6#7#8%
@@ -601,11 +619,8 @@
\!!widthc\zeropoint}
{\!!widtha\listparameter\c!width}}
{\!!widtha\listparameter\c!width}}%
- \getvalue{\??li\c!alternative\listparameter\c!alternative}%
+% \getvalue{\??li\c!alternative\listparameter\c!alternative}% ?
\endgraf
- \doif{\listparameter\c!interaction}\v!text % not supported ! ! ! ! ! ! text == all
- {\setlistparameter\currentlist\c!interaction\v!all}%
- % \dontleavehmode % new, else no margin, but wrong, better (else \indent as well):
\noindent
\domakelistelement\v!all{#2}\hbox
{\setlocalhsize
@@ -655,6 +670,7 @@
\leavevmode
\box2\relax
\hskip\dimen2
+\domakelistelement\v!text{#2}\firstofoneargument{%
\bgroup
\donestedlistattributes\c!textstyle\c!textcolor
{\let\\=\newlineinlist
@@ -663,6 +679,7 @@
\limitatedlistentry{#4}}%
%\carryoverpar % new otherwise wrong linespacing
\egroup
+}%
\ifdim\wd4=\zeropoint\relax % \ifvoid4
% \ifdim\!!widtha<\hsize \hfill\strut \fi % spoils align
\else
@@ -711,17 +728,20 @@
\ifvmode
\noindent\leavevmode % leavevmode ? ? ?
\fi
+%% actually, the next can be supported now (will be enabled when I have time to test it)
\doif{\listparameter\c!interaction}\v!text % not supported
{\setlistparameter\currentlist\c!interaction\v!sectionnumber}%
\doif{\listparameter\c!interaction}\v!all % not supported
{\setlistparameter\currentlist\c!interaction\v!sectionnumber}%
+%%
\setbox4\hbox
{\doif{\listparameter\c!pagenumber}\v!yes
{\doifsomething{#5}
{\domakelistelement\v!pagenumber{#2}\hbox
{\donestedlistattributes\c!pagestyle\c!pagecolor
{\listparameter\c!pagecommand{#5}}}}}}%
- \doif{\listparameter\c!headnumber}\v!yes
+%% \domakelistelement\v!all{#2}\firstofoneargument{%
+ \doif{\listparameter\c!headnumber}\v!yes
{\donetrue
\doifnothing{#3}{\doifnothing{\listparameter\c!symbol}\donefalse}%
% == \doifnothing{#3\listparameter\c!symbol}\donefalse
@@ -736,17 +756,20 @@
\nobreak
\fi}%
\tolerance3500 % niet zomaar veranderen
+%% \domakelistelement\v!text{#2}\firstofoneargument{%
\donestedlistattributes\c!textstyle\c!textcolor
{\let\\=\newlineinlist
\dontconvertfont
%\listparameter\c!textcommand{#4}}%
\limitatedlistentry{#4}}%
+%% }%
\ifvoid4\else
\nobreak
\hskip.75em\relax
\nobreak
\box4
\fi
+%% }%
\dimen0=\listparameter\c!distance\relax
\ifdim\dimen0<1em\relax
\hskip1em\!!plus1em\!!minus.25em\relax
@@ -811,7 +834,7 @@
\def\combinedlistparameter#1{\csname\??ih\currentcombinedlist#1\endcsname}
-\def\setupcombinedlist
+\unexpanded\def\setupcombinedlist
{\dodoubleargument\dosetupcombinedlist}
\def\dosetupcombinedlist[#1][#2]%
@@ -819,7 +842,7 @@
\edef\currentcombinedlist{#1}%
\normalexpanded{\noexpand\setuplist[\combinedlistparameter\c!list]}[#2]}
-\def\definecombinedlist
+\unexpanded\def\definecombinedlist
{\dotripleempty\dodefinecombinedlist}
\def\dodefinecombinedlist[#1][#2][#3]%
@@ -830,7 +853,7 @@
\setvalue{\e!place#1}{\dodoubleempty\doplacecombinedlist[#1]}%
\setvalue{\e!complete#1}{\dodoubleempty\docompletecombinedlist[#1]}}
-\def\placecombinedlist
+\unexpanded\def\placecombinedlist
{\dodoubleempty\doplacecombinedlist}
\def\doplacecombinedlist[#1][#2]% we can move much of the analysis to lua
@@ -850,7 +873,7 @@
\dosetlistmode}
\def\docompletecombinedlist[#1][#2]%
- {\normalexpanded{\noexpand\systemsuppliedtitle[#1]{\noexpand\headtext{#1}}}% expansion due to v! vs french !
+ {\normalexpanded{\systemsuppliedtitle[#1]{\noexpand\headtext{#1}}}% expansion due to v! vs french !
\doplacecombinedlist[#1][#2]}
% lists that have a number/title are kind of generic and can share code
@@ -872,6 +895,7 @@
prefix = "\listparameter\c!prefix",
separatorset = "\listparameter\c!prefixseparatorset",
conversionset = "\listparameter\c!prefixconversionset",
+ starter = \!!bs\listparameter\c!prefixstarter\!!es,
stopper = \!!bs\listparameter\c!prefixstopper\!!es,
set = "\listparameter\c!prefixset",
segments = "\listparameter\c!prefixsegments",
@@ -880,6 +904,7 @@
{
separatorset = "\listparameter\c!numberseparatorset",
conversionset = "\listparameter\c!numberconversionset",
+ starter = \!!bs\listparameter\c!numberstarter\!!es,
stopper = \!!bs\listparameter\c!numberstopper\!!es,
segments = "\listparameter\c!numbersegments",
} )}}
@@ -900,7 +925,7 @@
%
% \definesystemvariable {ll} % ListLength
%
-% \def\setupremaininglistlength[#1]%
+% \unexpanded\def\setupremaininglistlength[#1]%
% {\getparameters[\??ll][#1]%
% \globallet\listlengthcounter\!!zerocount}
%
diff --git a/Master/texmf-dist/tex/context/base/strc-mar.lua b/Master/texmf-dist/tex/context/base/strc-mar.lua
index f0d6df314a1..8ee814d7743 100644
--- a/Master/texmf-dist/tex/context/base/strc-mar.lua
+++ b/Master/texmf-dist/tex/context/base/strc-mar.lua
@@ -1,6 +1,6 @@
if not modules then modules = { } end modules ['strc-mar'] = {
version = 1.001,
- comment = "companion to strc-mar.tex",
+ comment = "companion to strc-mar.mkiv",
author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
copyright = "PRAGMA ADE / ConTeXt Development Team",
license = "see context related readme files"
diff --git a/Master/texmf-dist/tex/context/base/strc-mar.mkiv b/Master/texmf-dist/tex/context/base/strc-mar.mkiv
index 8dbbb232caf..bb87051e026 100644
--- a/Master/texmf-dist/tex/context/base/strc-mar.mkiv
+++ b/Master/texmf-dist/tex/context/base/strc-mar.mkiv
@@ -73,7 +73,7 @@
\clearmarks#1%
\fi}
-\def\definenewmark#1%
+\unexpanded\def\definenewmark#1%
{\ifcsname\string#1:m\endcsname\else
\@EA\@EA\@EA\newcount \markstatecs #1\global\markstatecs#1\plusone
\@EA\@EA\@EA\renewmarks\markautocs #1%
@@ -138,8 +138,10 @@
\def\checkedcurrentmarks{\markcurrentcs} % #1 shared current mark
-\let\currentsplittopmarknumber\currenttopmarknumber
-\let\normalsplittopmarks \normaltopmarks
+\let\currentsplitfirstmarknumber\currentfirstmarknumber
+\let\currentsplittopmarknumber \currenttopmarknumber
+\let\currentsplitbotmarknumber \currentbotmarknumber
+\let\normalsplittopmarks \normaltopmarks
\def\uncheckedautotopmark {\normaltopmarks \markautocs} % #1
\def\uncheckedautofirstmark {\normalfirstmarks \markautocs} % #1
@@ -223,7 +225,7 @@
\def\dowithmarkcommandtwo#1#2#3% \command {mark} {mark}
{\expandafter#1\csname\??mk:\markingcoupling{#2}\expandafter\endcsname\csname\??mk:\markingcoupling{#3}\endcsname}
-\def\setupmarking
+\unexpanded\def\setupmarking
{\dodoubleargument\dosetupmarking}
\def\dosetupmarking[#1][#2]%
@@ -243,7 +245,7 @@
\let\alldefinedmarks\empty
-\def\definemarking
+\unexpanded\def\definemarking
{\dodoubleempty\dodefinemarking}
\def\dodefinemarking[#1][#2]%
@@ -276,7 +278,7 @@
\def\relatemarking[#1]#2[#3]% define 1 as child of 2
{\dowithmarkcommandtwo\addmarkreset{#1}{#3}}
-\def\definerawmarking[#1]%
+\unexpanded\def\definerawmarking[#1]%
{\dododefinemarking[#1][#1]%
\getgparameters[\??mk#1][\c!limittext=]} % global !
diff --git a/Master/texmf-dist/tex/context/base/strc-mat.lua b/Master/texmf-dist/tex/context/base/strc-mat.lua
index ba64bf9db4c..291cc8845d6 100644
--- a/Master/texmf-dist/tex/context/base/strc-mat.lua
+++ b/Master/texmf-dist/tex/context/base/strc-mat.lua
@@ -1,6 +1,6 @@
if not modules then modules = { } end modules ['strc-mat'] = {
version = 1.001,
- comment = "companion to strc-mat.tex",
+ comment = "companion to strc-mat.mkiv",
author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
copyright = "PRAGMA ADE / ConTeXt Development Team",
license = "see context related readme files"
diff --git a/Master/texmf-dist/tex/context/base/strc-mat.mkiv b/Master/texmf-dist/tex/context/base/strc-mat.mkiv
index 097b1d71059..2064db2c586 100644
--- a/Master/texmf-dist/tex/context/base/strc-mat.mkiv
+++ b/Master/texmf-dist/tex/context/base/strc-mat.mkiv
@@ -15,9 +15,11 @@
\registerctxluafile{strc-mat}{1.001}
+% we have potential for captions
+
\unprotect
-\definestructureconversionset[\v!formula][number,characters]
+\definestructureconversionset[\v!formula][numbers,characters]
\setupformulas
[%\c!way=\@@nrway,
@@ -46,117 +48,208 @@
\definestructurecounter
[\v!formula]
-\setupstructurecounter
- [\v!formula]
- [\c!numberconversionset=\v!formula]
+% \setupstructurecounter
+% [\v!formula]
+% [\c!numberconversionset=\v!formula]
+
+\presetstructurecountersetup\setupformulas\sharedstructurecounterparameter
+
+\appendtoks
+% \dostructurecountersetup\currentformula\formulaparameter
+% \docheckstructurecountersetup\currentformula
+ \dostructurecountersetup\v!formula\formulaparameter
+% \docheckstructurecountersetup\v!formula
+\to \everysetupformulas
+
+\setupformulas
+ [\c!numberconversionset=\v!formula] % why forgotten
-\def\storecurrentformulanumber#1#2#3#4% ref, todo:str, \sync % todo: title etc (like float)
+\def\storecurrentformulanumber#1#2#3#4#5% ref, todo:str, \sync % todo: title etc (like float)
{\dostructurecountercomponent
{formula}%
- \getfloatparameters
- \formulaparameter
- \detokenizedformulaparameter
- \relax
- \relax
- \relax
- [\c!name=\currentformula,\s!counter=\currentformula,%
- \s!hascaption=\v!yes,\s!hasnumber=\v!yes,\s!hastitle=\v!yes,%
+ \getformulaparameters \formulaparameter \detokenizedformulaparameter
+ \relax \relax \relax
+% [\c!name=\currentformula,\s!counter=\currentformula,%
+ [\c!name=\v!formula,\s!counter=\v!formula,%
+ \s!hascaption=\v!yes,\s!hastitle=\v!yes,\s!hasnumber=\v!yes,%\s!haslevel=#6,%
+ \s!hasnumber=\v!no,%
\c!reference=#1,\c!title=,\c!bookmark=]%
[#2]%
- \globallet\currentformulanumber\laststructurecounternumber
- \globallet#3\laststructurecountersynchronize
- \globallet#4\laststructurecounterattribute}
+ \globallet#3\laststructurecounternumber
+ \globallet#4\laststructurecountersynchronize
+ \globallet#5\laststructurecounterattribute}
-\def\thecurrentformulanumber
- {%\ifnoformulacaption \else \ifnoformulanumber \else
- \labeltexts\currentformula{\convertedstructurecounter[formula]}% ! ! todo: use a lua call instead
- }%\fi \fi}
+\newif\ifnoformulanumber
-\def\placecurrentformulanumber
- {\currentformulassynchronize \currentformulasattribute % todo
- \currentformulasynchronize \currentformulasattribute % todo
- \currentsubformulasynchronize \currentsubformulaattribute % todo
- \thecurrentformulanumber}
+\newconditional\handleformulanumber
+\newconditional\incrementformulanumber
-\def\doformulanumber
- {\dotripleempty\dodoformulanumber}
+\newtoks\everyresetformulas
-\def\dodoformulanumber[#1][#2][#3]%
- {\doquadruplegroupempty\dododoformulanumber{#1}{#2}{#3}}
+\newconditional\insideplaceformula
+\newconditional\insideplacesubformula
+\newconditional\insideformulas
+\newconditional\insidesubformulas
+
+% 0=unset, 1=forced, 2=none, 3=reference
+
+\def\handleplaceformulanumbering % place formula
+ {\settrue\handleformulanumber
+ \docheckformulareference\placeformulanumbermode\currentplaceformulareference
+ \glet\doplaceformulanumber \doplaceformulanumberindeed
+ \glet\donestedformulanumber\donestedformulanumberindeed}
+
+\def\handleformulasnumbering % formulas
+ {\docheckformulareference\formulasnumbermode\currentformularesference}
+
+\def\handlesubformulasnumbering % sub formulas
+ {\docheckformulareference\subformulasnumbermode\currentsubformulasreference
+ \doincrementsubstructurecounter[\v!formula][1]% always
+ \storecurrentformulanumber
+ \currentsubformulasreference
+ \empty
+ \currentsubformulasnumber
+ \currentsubformulassynchronize
+ \currentsubformulasattribute
+ }
+
+\def\tracedformulamode
+ {\hbox{\quad\tt\txx[\number\placeformulanumbermode,\number\formulasnumbermode,\number\subformulasnumbermode,\number\nestedformulanumbermode]}}
+
+\unexpanded\def\placecurrentformulanumber
+ {\rm % nodig ?
+ \doif{\formulaparameter\c!location}\v!right{\hskip\formulaparameter\c!distance}%
+ \formulaparameter\c!numbercommand
+ {\dosetformulaattributes\c!numberstyle\c!numbercolor
+ \strut
+ \formulaparameter\c!left
+ \labeltexts\v!formula{\ignorespaces\doplacecurrentformulanumber\unskip}%
+ \formulaparameter\c!right}%
+ \doif{\formulaparameter\c!location}\v!left{\hskip\formulaparameter\c!distance}}
+
+\def\doplacecurrentformulanumber
+ {\dohandlecurrentformulareferences
+ %\currentformulasattribute % todo
+ %\currentformulasattribute % todo
+ %\currentsubformulaattribute % todo
+ \labeltexts\currentformula{\doconvertedstructurecounter[\v!formula][]}}
+
+\appendtoks
+ \glet\currentplaceformulasynchronize \relax
+ \glet\currentformulassynchronize \relax
+ \glet\currentsubformulassynchronize \relax
+ \glet\currentnestedformulasynchronize\relax
+ \let\currentformula\empty
+\to \everyresetformulas
+
+\def\dohandlecurrentformulareferences
+ {\ifnum\placeformulanumbermode=\plusthree
+ \storecurrentformulanumber
+ \currentplaceformulareference
+ \empty
+ \currentplaceformulanumber
+ \currentplaceformulasynchronize
+ \currentplaceformulaattribute
+ \currentplaceformulasynchronize
+ \glet\currentplaceformulasynchronize\relax
+ \fi
+ \ifnum\formulasnumbermode=\plusthree
+ \storecurrentformulanumber
+ \currentformulasreference
+ \empty
+ \currentformulasnumber
+ \currentformulassynchronize
+ \currentformulasattribute
+ \currentformulassynchronize
+ \glet\currentformulassynchronize\relax
+ \fi
+ \ifnum\subformulasnumbermode=\plusthree
+ \currentsubformulassynchronize
+ \glet\currentsubformulassynchronize\relax
+ \fi
+ \ifnum\nestedformulanumbermode=\plusthree
+ \storecurrentformulanumber
+ \currentnestedformulareference
+ \empty
+ \currentnestedformulanumber
+ \currentnestedformulasynchronize
+ \currentnestedformulaattribute
+ \currentnestedformulasynchronize
+ \glet\currentnestedformulasynchronize\relax
+ \fi}
-\let\subformulasreference\empty % temp hack
+\let\currentformulasreference \empty \let\currentformulassuffix \empty
+\let\currentformulareference \empty \let\currentformulasuffix \empty
+\let\currentsubformulareference \empty \let\currentsubformulasuffix \empty
+\let\currentnestedformulareference\empty \let\currentnestedformulasuffix\empty
\let\currentformulasynchronize \relax \let\currentformulaattribute \relax
\let\currentsubformulasynchronize\relax \let\currentsubformulaattribute\relax
\let\currentformulassynchronize \relax \let\currentformulasattribute \relax
-\def\dododoformulanumber#1#2#3#4% (#1,#2)=outer(ref,sub) (#3,#4)=inner(ref,sub)
- {\hbox\bgroup
- \ifconditional\handleformulanumber
- \ifconditional\incrementformulanumber
+\def\dohandleformulanumbering
+ {\doincrementsubstructurecounter[\v!formula][1]%
+ \doiftext\currentplaceformulasuffix{\setsubstructurecounterown[\v!formula][2]{\currentplaceformulasuffix}}%
+ \placecurrentformulanumber}
+
+\def\dohandlesubformulanumbering
+ {\doiftextelse\currentsubformulasuffix
+ {\setsubstructurecounterown[\v!formula][2]{\currentsubformulasuffix}}
+ {\doincrementsubstructurecounter[\v!formula][2]}%
+ \placecurrentformulanumber}
+
+\def\dododoformulanumber
+ {\ifconditional\handleformulanumber
+ \hbox\bgroup
+ % main counter
\ifconditional\insidesubformulas
- \incrementsubstructurecounter[\v!formula][2]%
+ % nothing
\else
- \incrementstructurecounter[\v!formula]%
+ \ifcase\formulasnumbermode
+ \ifcase\placeformulanumbermode
+ \dohandleformulanumbering
+ \or
+ \dohandleformulanumbering
+ \or
+ % nothing
+ \or
+ \dohandleformulanumbering
+ \fi
+ \or
+ \dohandleformulanumbering
+ \or
+ % nothing
+ \or
+ \dohandleformulanumbering
+ \fi
\fi
- \fi
- %
- % main counter
- \setbox0\hbox{\ignorespaces#2\unskip}%
- \ifdim\wd0>\zeropoint
- \setsubstructurecounterown[\v!formula][2]{#2}% \detokenize?
- \fi
- \edef\currentformulareference{#1}%
- \ifx\currentformulareference\empty
- \glet\currentformulasynchronize\relax
- \glet\currentformulaattribute \relax
- \else
- \storecurrentformulanumber\currentformulareference\empty\currentformulasynchronize\currentformulaattribute
- \fi
- % subcounter
- \setbox0\hbox{\ignorespaces#4\unskip}%
- \ifdim\wd0>\zeropoint
- \setsubstructurecounterown[\v!formula][2]{#4}% \detokenize?
- \fi
- \edef\currentsubformulareference{#3}%
- \ifx\currentsubformulareference\empty
- \glet\currentsubformulasynchronize\relax
- \glet\currentsubformulaattribute \relax
- \else
- \storecurrentformulanumber\currentsubformulareference\empty\currentsubformulasynchronize\currentsubformulaattribute
- \fi
- %
- \rm % nodig ?
- \doif{\formulaparameter\c!location}\v!right{\hskip\formulaparameter\c!distance}%
- \formulaparameter\c!numbercommand
- {\dosetformulaattributes\c!numberstyle\c!numbercolor
- \strut
- \formulaparameter\c!left
- \labeltexts\v!formula{\ignorespaces\placecurrentformulanumber\unskip}%
- \formulaparameter\c!right}%
- \doif{\formulaparameter\c!location}\v!left{\hskip\formulaparameter\c!distance}%
- \fi
- \egroup}
-
-\let\donestedformulanumber\gobbletwoarguments
+ % subcounter
+ \ifconditional\insidesubformulas
+ \ifcase\subformulasnumbermode
+ % nothing
+ \or
+ \dohandlesubformulanumbering
+ \or
+ % nothing
+ \or
+ \dohandlesubformulanumbering
+ \fi
+ \fi
+ %\rlap{\tracedformulamode}%
+ \egroup
+ \fi}
\definelist[\v!formula]
-\global\let\doflushformulalistentry\gobbleoneargument
-
-\def\setformulalistentry#1%
- {\gdef\doflushformulalistentry##1%
- {\normalexpanded{\noexpand\writetolist[\v!formula]{##1}}{#1}%
- \global\let\doflushformulalistentry\gobbleoneargument}}
-
-\newconditional\handleformulanumber
-\newconditional\incrementformulanumber
-\newconditional\insidesubformulas
+\appendtoks
+ \global\setfalse\insideplaceformula
+ \global\setfalse\insideplacesubformula
+% \global\setfalse\insideformulas
+% \global\setfalse\insidesubformulas
+\to \everyresetformulas
\newif\ifinformula
-\let\doplaceformulanumber\empty
-
%D We need a hook into the plain math alignment macros
%D
%D \starttyping
@@ -168,13 +261,13 @@
%D Otherwise we get a missing \type {$$} error reported.
\def\resetdisplaymatheq
- {\let\normalleqno\relax \let\leqno\relax
- \let\normalreqno\relax \let\eqno \relax
+ {\let\normalleqno\gobbleoneargument \let\leqno\gobbleoneargument
+ \let\normalreqno\gobbleoneargument \let\eqno \gobbleoneargument
\let\doplaceformulanumber\empty}
%D
-\def\defineformula
+\unexpanded\def\defineformula
{\dodoubleempty\dodefineformula}
\def\dodefineformula[#1][#2]%
@@ -184,7 +277,7 @@
\setvalue{\e!start#1\v!formula}{\dostartformula{#1}}%
\setvalue{\e!stop #1\v!formula}{\dostopformula}}}
-\def\defineformulaalternative
+\unexpanded\def\defineformulaalternative
{\dotripleargument\dodefineformulaalternative}
\def\dodefineformulaalternative[#1][#2][#3]%
@@ -227,7 +320,7 @@
\def\subformulaparameter#1{\ifcname\??fn#1\endcsname\cname\??fn#1\endcsname\fi}
-\def\setupsubformulas
+\unexpanded\def\setupsubformulas
{\dodoubleargument\getparameters[\??fn]}
\setupsubformulas
@@ -255,27 +348,6 @@
\newdimen\lastlinewidth
-% test \par \dorecurse{10}{test } \moveformula \startformula test \stopformula test \endgraf
-% test \par \dorecurse{10}{test } \startformula test \stopformula test \endgraf
-% \dorecurse{30}{\bpar \dorecurse\recurselevel{test } \epar \startformula formula \stopformula}
-
-\def\setlastlinewidth
- {\resetlastlinewidth
- \ifoptimizedisplayspacing\ifmmode\else\ifhmode
- \bgroup
- \forgetdisplayskips
- \displaywidowpenalty\widowpenalty % brrr, else widowpenalty does not work
- \everymath \emptytoks
- \everydisplay\emptytoks
- $$\strut\global\lastlinewidth\predisplaysize$$
- \vskip-\lineheight
- \vskip\zeropoint
- \egroup
- \fi\fi\fi}
-
-\def\resetlastlinewidth
- {\global\lastlinewidth\zeropoint\relax}
-
\abovedisplayskip \zeropoint
\abovedisplayshortskip \zeropoint % evt. 0pt minus 3pt
\belowdisplayskip \zeropoint
@@ -286,13 +358,6 @@
% we don't use the skip's
-\def\displayskipsize#1#2% obsolete
- {\ifdim\ctxparskip>\zeropoint
- #1\ctxparskip\!!plus#2\ctxparskip\!!minus#2\ctxparskip\relax
- \else
- #1\lineheight\!!plus#2\lineheight\!!minus#2\lineheight\relax
- \fi}
-
\def\forgetdisplayskips % to do
{\abovedisplayskip \zeropoint
\belowdisplayskip \zeropoint
@@ -308,7 +373,6 @@
\def\rightdisplayskip {\rightskip}
\def\leftdisplaymargin {\formulaparameter\c!leftmargin}
\def\rightdisplaymargin {\formulaparameter\c!rightmargin}
-\def\displaygridsnapping{\formulaparameter\c!grid}
\def\beforedisplayspace
{\doifnot{\formulaparameter\c!spacebefore}\v!none{\blank[\formulaparameter\c!spacebefore]}}
@@ -316,26 +380,26 @@
\def\afterdisplayspace
{\doifnot{\formulaparameter\c!spaceafter }\v!none{\blank[\formulaparameter\c!spaceafter ]}}
-\def\setpredisplaysize#1%
- {\predisplaysize#1\relax
- \ifdim\predisplaysize<\maxdimen
- \ifdim\predisplaysize>\zeropoint
- \advance\predisplaysize \predisplaysizethreshhold
- \fi
- \advance\predisplaysize \displayindent % needed ?
- \ifdim\predisplaysize>\hsize
- \predisplaysize\hsize
- \fi
- \else
- \predisplaysize\zeropoint
- \fi}
+% \def\setpredisplaysize
+% {\predisplaysize\lastlinewidth\relax
+% \ifdim\predisplaysize<\maxdimen
+% \ifdim\predisplaysize>\zeropoint
+% \advance\predisplaysize \predisplaysizethreshhold
+% \fi
+% \advance\predisplaysize \displayindent % needed ?
+% \ifdim\predisplaysize>\hsize
+% \predisplaysize\hsize
+% \fi
+% \else
+% \predisplaysize\zeropoint
+% \fi}
\def\setdisplaydimensions
{\displayindent\leftdisplayskip
\advance\displayindent\leftdisplaymargin
\displaywidth\hsize
-% \setlocalhsize
-% \displaywidth\localhsize
+ %\setlocalhsize
+ %\displaywidth\localhsize
\ifdim\hangindent>\zeropoint
\advance\displayindent\hangindent
\else
@@ -344,8 +408,6 @@
\advance\displaywidth\dimexpr-\displayindent-\rightdisplayskip-\rightdisplaymargin\relax
\hsize\displaywidth} % new, else overfull in itemize
-\newif\ifoptimizedisplayspacing
-
\def\dostartformula#1%
{\dodoubleempty\dodostartformula[#1]}
@@ -353,8 +415,6 @@
\newskip\formulastrutht
\newskip\formulastrutdp
-% hm, invoke otr in hmode in order to move skips to mvl, could be an option
-
%D \startbuffer
%D \startformula[9pt] x = 1 \stopformula
%D \startformula[7pt] x = 1 \stopformula
@@ -363,12 +423,7 @@
%D \typebuffer \getbuffer
\def\dodostartformula[#1][#2]% setting leftskip adaption is slow !
- {% todo: test first
- %
- % \ifdim\lastskip>\zeropoint
- % \resetlastlinewidth % else problems with in between stuff without \epar
- % \fi
- \bgroup % HERE
+ {\bgroup % HERE
\def\currentformula{#1}%
\the\everybeforedisplayformula
\formulaparskip\parskip
@@ -391,13 +446,6 @@
\freezedimenmacro\rightdisplaymargin
\freezedimenmacro\predisplaysizethreshhold
\forgetdisplayskips
- \ifoptimizedisplayspacing
- \ifdim\lastlinewidth>\zeropoint
- \abovedisplayshortskip-\strutht\relax
- \fi
- \else
- \resetlastlinewidth
- \fi
\getvalue{\e!start\formulaparameter\c!alternative\v!formula}}
\def\switchtoformulabodyfont{\switchtobodyfont}
@@ -414,100 +462,52 @@
\def\dostopformula
{\doplaceformulanumber
\getvalue{\e!stop\formulaparameter\c!alternative\v!formula}%
- \resetlastlinewidth
\nonoindentation
\checknextindentation[\formulaparameter\c!indentnext]%
\egroup
\hangafter\minusone % added for side floats
\hangindent\zeropoint % added for side floats
\setfalse\handleformulanumber
+ \the\everyresetformulas
\dorechecknextindentation} % here ?
-\def\startdisplaymath
- {\ifgridsnapping
- \beforedisplayspace
- \snapmathtogrid\vbox
- \bgroup
- \informulatrue
- %\forgetall % breaks side floats
- \else
- \bgroup
- \parskip\formulaparskip % ! !
- \informulatrue
- %\forgetall % otherwise backgrounds fail
- \ifdim\lastskip<\zeropoint\else
- \par
- \ifvmode \ifdim\parskip>\zeropoint\relax
- \whitespace \vskip-\parskip % kind of forces and cancels again
- \fi \fi
- \fi
- \doif\displaygridcorrection{-\v!top}{\kern-\strutht}% new, currently only option/default
- \beforedisplayspace
- \par
- \ifvmode
- \prevdepth-\maxdimen % texbook pagina 79-80
- % otherwise problems at the top of a page
- \verticalstrut
- \vskip-\struttotal
- \vskip-\baselineskip
- \fi
+%D \starttyping
+%D % test \par % no preceding hlist
+%D % $$x$$ % preceding hlist
+%D % \noindent $$x$$ % no preceding hlist
+%D \startformula x \stopformula % now has \noindent (in mkii we messed with baselineskip)
+%D \stoptyping
+
+\unexpanded\def\startdisplaymath
+ {\bgroup
+ \par
+ \informulatrue
+ \beforedisplayspace
+ \par
+ \ifvmode
+ \prevdepth-\maxdimen % texbook pagina 79-80
\fi
- $$\setdisplaydimensions
- \setpredisplaysize\lastlinewidth
+ \noindent % else funny hlist with funny baselineskip
+ $$% \Ustartdisplaymath
+ \setdisplaydimensions
+ %\setpredisplaysize
\startinnermath}
-\def\stopdisplaymath
+\unexpanded\def\stopdisplaymath
{\stopinnermath
- $$%
- \ifgridsnapping
- \egroup
- \afterdisplayspace
- \else
- \par\ifvmode\ifdim\parskip>\zeropoint\whitespace\vskip-\parskip\fi\fi
- \afterdisplayspace
- \egroup
- \fi
- \globallet\displaylinecorrection\empty
- \gdef\displaygridcorrection{\displaygridsnapping}}
+ $$% \Ustopdisplaymath
+ \par
+ \afterdisplayspace
+ \par
+ \egroup}
\newif\ifclipdisplaymath \clipdisplaymathtrue
\def\displaymathclipfactor{1.1}
-\def\snapmathtogrid % to do \dp
- {\dowithnextbox
- {\bgroup
- \donefalse
- \ifclipdisplaymath
- \ifdim\nextboxht<\displaymathclipfactor\lineheight
- \donetrue
- \fi
- \fi
- \ifdone
- \nextboxht\lineheight
- \else
- \getnoflines\nextboxht
- \setbox\nextbox\vbox to \noflines\lineheight{\vfill\flushnextbox\vfill}%
- \setbox\nextbox\hbox{\lower\strutdepth\flushnextbox}%
- \fi
- \snaptogrid[\displaygridcorrection]\hbox{\flushnextbox}%
- \egroup}}
-
-\def\displaygridcorrection{\displaygridsnapping}
-\let\displaygridcorrection\empty
-
-\def\moveformula
- {\dosingleempty\domoveformula}
-
-\def\domoveformula[#1]% brr gaat mogelijk fout
- {\iffirstargument
- \xdef\displaygridcorrection{#1}%
- \else
- \gdef\displaygridcorrection{-\v!top}% handy with short preline
- \fi
- \globallet\displaylinecorrection\displaygridcorrection}
-
-\let\startinnermath\empty
-\let\stopinnermath \empty
+% already defined
+%
+% \let\startinnermath\empty
+% \let\stopinnermath \empty
% \defineformulaalternative[multi][\begindmath][\enddmath]
%
@@ -530,47 +530,31 @@
% \placeformula {f} \startspformule \fakespacingformula \stopspformule
% \fakewords{20}{40}
-\def\placeformula
- {\settrue\incrementformulanumber
- \dodoubleempty\doplaceformula}
-
-\def\placesubformula
- {\setfalse\incrementformulanumber
- \dodoubleempty\doplaceformula}
-
-\def\startsubformulas
+\unexpanded\def\startsubformulas
{\dosingleempty\dostartsubformulas}
\def\dostartsubformulas[#1]%
- {\ifconditional\incrementformulanumber
- \incrementstructurecounter[\v!formula]%
- \edef\subformulasreference{#1}% messy
- \ifx\subformulasreference\empty
- \glet\currentformulassynchronize\relax
- \glet\currentformulasattribute \relax
- \else
- \storecurrentformulanumber\subformulasreference\empty\currentformulassynchronize\currentformulasattribute
- \fi
- \fi
- \settrue\insidesubformulas}
+ {\edef\currentsubformulasreference{#1}%
+ \global\settrue\insidesubformulas
+ \handlesubformulasnumbering}
-\def\stopsubformulas
- {\setfalse\insidesubformulas
- \resetlastlinewidth
- \nonoindentation
+\unexpanded\def\stopsubformulas
+ {\nonoindentation
\checknextindentation[\formulaparameter\c!indentnext]%
+ \the\everyresetformulas % to be checked
+ \global\setfalse\insidesubformulas
\dorechecknextindentation} % here ?
-%D Named subformulas
+%D Named subformulas (to be redone)
-\def\startnamedsubformulas
+\unexpanded\def\startnamedsubformulas
{\dosingleempty\dostartnamedsubformulas}
\def\dostartnamedsubformulas[#1]#2%
{\setformulalistentry{#2}%
\startsubformulas[#1]}
-\def\stopnamedsubformulas
+\unexpanded\def\stopnamedsubformulas
{\stopsubformulas}
%D Experimental goodie:
@@ -584,339 +568,191 @@
%D
%D \typebuffer \getbuffer
-\def\placenamedformula
- {\dosingleempty\doplacenamedformula}
-
-\def\doplacenamedformula[#1]#2%
- {\iffirstargument
- \def\next{\placeformula[#1]}%
- \else
- \let\next\placeformula
- \fi
- \setformulalistentry{#2}%
- \next}
-
-%D The implementation of placement is a bit ugly:
-
-\def\doplaceformula[#1][#2]% #2 = dummy, gobbles spaces
- {\def\redoplaceformula
- {\bgroup
- \ifx\next\bgroup
- \egroup \@EA\moreplaceformula % [ref]{}
- \else
- \let\nextnext$% no def
- \ifx\next\nextnext
- \egroup \@EAEAEA\dispplaceformula % [ref]$$
- \else
- \egroup \@EAEAEA\dodoplaceformula % [ref]\start
- \fi
- \fi[#1]{}}%
- \futurelet\next\redoplaceformula}
-
-\long\def\moreplaceformula[#1]#2#3#4% #2 dummy #4 gobbles spaces
- {\def\redoplaceformula
- {\bgroup
- \let\nextnext$% no def
- \ifx\next\nextnext
- \egroup \@EA\dispplaceformula % [ref]$$
- \else
- \egroup \@EA\dodoplaceformula % [ref]\start
- \fi
- [#1]{#3}}%
- \futurelet\next\redoplaceformula#4}
-
-\let\startplaceformula\placeformula
-\let\stopplaceformula \relax
+\unexpanded\def\startformulas
+ {\dosingleempty\dostartformulas}
-\def\startformulas#1\stopformulas % new / to be internationalized
+\def\dostartformulas[#1]#2\stopformulas % new / to be internationalized
{\bgroup
+ \global\settrue\insideformulas
+ \edef\currentformulasreference{#1}%
+ \handleformulasnumbering
\let\currentformula\empty
\forgetdisplayskips
\startdisplaymath
\setlocalhsize
- \long\def\startformula##1\stopformula
+ \long\unexpanded\def\startformula##1\stopformula
{\advance\scratchcounter\plusone}%
\scratchcounter\zerocount
- #1% preroll
+ #2% preroll
\ifcase\scratchcounter\else
\divide \hsize \scratchcounter
\fi
\hbox to \localhsize \bgroup
\hss
- \def\normalstartformula{\vskip-\strutdepth$$}% i hate this
- \def\normalstopformula {$$}%
- \def\startformula {$\vcenter\bgroup\normalstartformula}%
- \def\stopformula {\normalstopformula\egroup$\hss}%
- #1%
+ \def\normalstartformula{\vskip-\strutdepth\Ustartdisplaymath}% i hate this
+ \def\normalstopformula {\Ustopdisplaymath}%
+ \unexpanded\def\startformula {\Ustartmath\vcenter\bgroup\normalstartformula}%
+ \unexpanded\def\stopformula {\normalstopformula\egroup\Ustopmath\hss}%
+ #2%
\egroup
\stopdisplaymath
+ \global\setfalse\insideformulas
\egroup
+ \the\everyresetformulas
\hangafter\minusone % added for side floats
\hangindent\zeropoint} % added for side floats
-\def\dispplaceformula[#1]#2$$#3$$%
- {\dodoplaceformula[#1]{#2}\dostartformula{}#3\dostopformula}
-
-\def\dodoplaceformula[#1]#2% messy, needs a clean up
- {\doifelse{#1}{-}
- {\setfalse\handleformulanumber}
- {\doifelse{#2}{-}
- {\setfalse\handleformulanumber}
- {\settrue\handleformulanumber}}%
- \ifconditional\handleformulanumber
- \def\formulanumber
- {%\global\let\subformulanumber\doformulanumber % no, bug
- \doformulanumber[#1][#2]}%
- \def\donestedformulanumber##1##2%
- {\doifsomething{##1}
- {\doifelse{##1}{+}{\doformulanumber[#1]}{\doformulanumber[##1]}[##2][]{}}}%
- \def\subformulanumber
- {\setfalse\incrementformulanumber
- \formulanumber}%
- \gdef\doplaceformulanumber
- {\global\let\doplaceformulanumber\empty
- \doifelse{\formulaparameter\c!location}\v!left
- {\normalleqno{\doformulanumber[#1][#2][]{}}}
- {\normalreqno{\doformulanumber[#1][#2][]{}}}}%
+% place
+
+% 0=unset, 1=forced, 2=none, 3=reference
+
+\chardef\placeformulanumbermode \zerocount
+\chardef\formulanumbermode \zerocount
+\chardef\formulasnumbermode \zerocount
+\chardef\subformulasnumbermode \zerocount
+\chardef\nestedformulanumbermode\zerocount
+
+\def\inhibitformulanumberflag{-}
+\def\forceformulanumberflag {+}
+
+\def\docheckformulareference#1#2%
+ {\chardef#1\ifx#2\empty
+ \zerocount
+ \else\ifx#2\forceformulanumberflag
+ \plusone
+ \else\ifx#2\inhibitformulanumberflag
+ \plustwo
\else
- \def\formulanumber{\doformulanumber[#1][#2]}%
- \let\donestedformulanumber\gobbletwoarguments
- \let\subformulanumber\doformulanumber % was \global
- \global\let\doplaceformulanumber\empty
- \fi}
-
-%D Here we implement a basic math alignment mechanism. Numbers
-%D are also handled. The macros \type {\startinnermath} and
-%D \type {\stopinnermath} can be overloaded in specialized
-%D modules.
-
-\def\startinnermath
- {\getvalue{\e!start\??fm\formulaparameter\c!align}}
-
-\def\stopinnermath
- {\getvalue{\e!stop \??fm\formulaparameter\c!align}}
-
-\def\mathinnerstrut
- {\doif{\formulaparameter\c!strut}\v!yes\strut}
-
-\long\def\defineinnermathhandler#1#2#3%
- {\setvalue{\e!start\??fm#1}{#2}%
- \setvalue{\e!stop \??fm#1}{#3}}
-
-\newif\iftracemath
-
-\def\mathhbox
- {\iftracemath\ruledhbox\else\hbox\fi}
-
-\chardef\mathraggedstatus=0 % normal left center right
-\chardef\mathnumberstatus=0 % nothing normal shift_right
-\let\mathnumbercorrection\!!zeropoint
-
-\def\startmathbox#1%
- {\hsize\displaywidth
- \global\chardef\mathnumberstatus\plusone
- \chardef\mathraggedstatus#1\relax
- \let\mathnumbercorrection\!!zeropoint
- \global\let\@eqno \empty \def\eqno {\gdef\@eqno }%
- \global\let\@leqno\empty \def\leqno{\gdef\@leqno}%
- % added
- \let\normalreqno\eqno
- \let\normalleqno\leqno
- % added
- \doplaceformulanumber
- \setbox\scratchbox\mathhbox to \displaywidth\bgroup
- \mathinnerstrut
- $%
- \displaystyle
- \ifcase\mathraggedstatus\or\hfill\or\hfill\fi}
-
-\def\llappedmathno
- {\ifcase\mathraggedstatus\or
- \@eqno
- \or
- \llap{\@eqno}%
- \or
- \llap{\@eqno}%
- \fi}
+ \plusthree
+ \fi\fi\fi}
+
+\def\formulanumber{\doformulanumber} % for the moment
-\def\rlappedmathno
- {\ifcase\mathraggedstatus\or
- \rlap{\@leqno}%
+\def\doformulanumber
+ {\dosingleempty\dodoformulanumber}
+
+\def\dodoformulanumber[#1]%
+ {\def\currentformulareference{#1}%
+ \dosinglegroupempty\dododoformulanumber}
+
+\def\redoformulanumber#1%
+ {\def\currentformulasuffix{#1}%
+ \dododoformulanumber}
+
+\unexpanded\def\placeformula
+ {\doglobal\settrue\insideplaceformula
+ \settrue\incrementformulanumber
+ \dodoubleempty\doplaceformula}
+
+\unexpanded\def\placesubformula
+ {\doglobal\settrue\insideplacesubformula
+ \setfalse\incrementformulanumber
+ \dodoubleempty\doplaceformula}
+
+% \def\doplaceformula[#1][#2]% #2 = dummy, gobbles spaces
+% {\def\currentplaceformulareference{#1}%
+% \let\currentplaceformulasuffix\empty
+% \futurelet\next\redoplaceformulaone}
+%
+% \let\mathdollarsign$ % no def
+%
+% \def\redoplaceformulaone % use doifnextcharelse
+% {\ifx\next\bgroup
+% \@EA\moreplaceformula % [ref]{}
+% \else
+% \@EA\redoplaceformulatwo
+% \fi}
+%
+% \long\def\moreplaceformula#1#2% #1 dummy #1 gobbles spaces
+% {\def\currentplaceformulasuffix{#1}%
+% \futurelet\next\redoplaceformulatwo#2}
+%
+% \def\redoplaceformulatwo
+% {\ifx\next\mathdollarsign
+% \@EA\dispplaceformula % [ref]$$
+% \else
+% \@EA\dodoplaceformula % [ref]\start
+% \fi}%
+
+\def\doplaceformula[#1][#2]% #2 = dummy, gobbles spaces
+ {\def\currentplaceformulareference{#1}%
+ \let\currentplaceformulasuffix\empty
+ \doifnextbgroupelse\moreplaceformula\redoplaceformula} % [ref]{}
+
+\long\def\moreplaceformula#1%
+ {\def\currentplaceformulasuffix{#1}%
+ \redoplaceformula}
+
+\long\def\redoplaceformula
+ {\doifnextcharelse$\dispplaceformula\dodoplaceformula} % [ref]$$ [ref]\start
+
+\def\dodoplaceformula
+ {\handleplaceformulanumbering}
+
+\def\dispplaceformula$$#1$$%
+ {\handleplaceformulanumbering
+ \dostartformula{}#1\dostopformula}
+
+\let\startplaceformula\placeformula
+\let\stopplaceformula \relax
+
+% to be checked
+
+\def\doformulanumber
+ {\dosingleempty\dodoformulanumber}
+
+\def\dodoformulanumber[#1]%
+ {\def\currentformulareference{#1}%
+ \dosinglegroupempty\dododoformulanumber}
+
+\def\redoformulanumber#1%
+ {\def\currentformulasuffix{#1}%
+ \dododoformulanumber}
+
+\glet\doplaceformulanumber \relax
+\glet\donestedformulanumber\gobbletwoarguments
+
+\def\donestedformulanumberindeed#1#2%
+ {\def\currentnestedformulareference{#1}%
+ \def\currentnestedformulasuffix{#2}%
+ \glet\doplaceformulanumber\relax
+ \docheckformulareference\nestedformulanumbermode\currentnestedformulareference
+ \ifcase\nestedformulanumbermode
+ % nothing
\or
- \rlap{\@leqno}%
+ \doformulanumber
\or
- \@leqno
+ % nothing
+ \or
+ \doformulanumber
\fi}
-\def\stopmathbox
- {$%
- \ifcase\mathraggedstatus\or\or\hfill\or\hfill\fi
- \egroup
- \setbox0\hbox{\unhcopy\scratchbox}%
- \scratchdimen\wd0
- \ifdim\scratchdimen>\displaywidth
- \donetrue
+\def\doplaceformulanumberindeed
+ {\glet\doplaceformulanumber\relax
+ \doifelse{\formulaparameter\c!location}\v!left
+ {\normalleqno{\dododoformulanumber}}
+ {\normalreqno{\dododoformulanumber}}}
+
+% todo
+
+\unexpanded\def\placenamedformula
+ {\dosingleempty\doplacenamedformula}
+
+\def\doplacenamedformula[#1]#2%
+ {\iffirstargument
+ \def\next{\placeformula[#1]}%
\else
- \donefalse
+ \let\next\placeformula
\fi
- \hbox to \displaywidth\bgroup
- \ifcase\mathnumberstatus
- \box\scratchbox
- \or
- \ifx\@leqno\empty
- \ifx\@eqno\empty
- \box\scratchbox
- \else
- \ifdone
- \vbox{\box\scratchbox\hbox to \displaywidth{\hss\llappedmathno}}%
- \else
- \hss\box\scratchbox\llappedmathno % hss makes room for number
- \fi
- \fi
- \else
- \ifdone
- \vbox{\hbox to \displaywidth{\rlappedmathno\hss}\box\scratchbox}%
- \else
- \rlappedmathno\box\scratchbox\hss % hss makes room for number
- \fi
- \fi
- \or
- \hskip\mathnumbercorrection
- \box\scratchbox
- \hss
- \else
- \box\scratchbox
- \fi
- \egroup}
+ \setformulalistentry{#2}%
+ \next}
-\defineinnermathhandler\v!left {\startmathbox\plusone }{\stopmathbox}
-\defineinnermathhandler\v!middle {\startmathbox\plustwo }{\stopmathbox}
-\defineinnermathhandler\v!right {\startmathbox\plusthree}{\stopmathbox}
-\defineinnermathhandler\v!flushleft {\startmathbox\plusthree}{\stopmathbox}
-\defineinnermathhandler\v!center {\startmathbox\plustwo }{\stopmathbox}
-\defineinnermathhandler\v!flushright{\startmathbox\plusone }{\stopmathbox}
+\global\let\doflushformulalistentry\gobbleoneargument
-%D [The examples below are in english and don't process in the
-%D documentation style, which will be english some day.]
-%D
-%D Normally a formula is centered, but in case you want to
-%D align it left or right, you can set up formulas to behave
-%D that way. Normally a formula will adapt is left indentation
-%D to the environment:
-%D
-%D \startbuffer
-%D \fakewords{20}{40}\epar
-%D \startitemize
-%D \item \fakewords{20}{40}\epar
-%D \placeformula \startformula \fakeformula \stopformula
-%D \item \fakewords{20}{40}\epar
-%D \stopitemize
-%D \fakewords{20}{40}\epar
-%D \stopbuffer
-%D
-%D % \getbuffer
-%D
-%D In the next examples we explicitly align formulas to the
-%D left (\type {\raggedleft}), center and right (\type
-%D {\raggedright}):
-%D
-%D \startbuffer
-%D \setupformulas[align=left]
-%D \startformula\fakeformula\stopformula
-%D \setupformulas[align=middle]
-%D \startformula\fakeformula\stopformula
-%D \setupformulas[align=right]
-%D \startformula\fakeformula\stopformula
-%D \stopbuffer
-%D
-%D \typebuffer
-%D
-%D Or in print:
-%D
-%D % {\getbuffer}
-%D
-%D With formula numbers these formulas look as follows:
-%D
-%D \startbuffer
-%D \setupformulas[align=left]
-%D \placeformula \startformula\fakeformula\stopformula
-%D \setupformulas[align=middle]
-%D \placeformula \startformula\fakeformula\stopformula
-%D \setupformulas[align=right]
-%D \placeformula \startformula\fakeformula\stopformula
-%D \stopbuffer
-%D
-%D % {\getbuffer}
-%D
-%D This was keyed in as:
-%D
-%D \typebuffer
-%D
-%D When tracing is turned on (\type {\tracemathtrue}) you can
-%D visualize the bounding box of the formula,
-%D
-%D % {\tracemathtrue\getbuffer}
-%D
-%D As you can see, the dimensions are the natural ones, but if
-%D needed you can force a normalized line:
-%D
-%D \startbuffer
-%D \setupformulas[strut=yes]
-%D \placeformula \startformula \fakeformula \stopformula
-%D \stopbuffer
-%D
-%D \typebuffer
-%D
-%D This time we get a more spacy result.
-%D
-%D % {\tracemathtrue\getbuffer}
-%D
-%D We will now show a couple of more settings and combinations
-%D of settings. In centered formulas, the number takes no space
-%D
-%D \startbuffer
-%D \setupformulas[align=middle]
-%D \startformula \fakeformula \stopformula
-%D \placeformula \startformula \fakeformula \stopformula
-%D \stopbuffer
-%D
-%D \typebuffer % {\tracemathtrue\getbuffer}
-%D
-%D You can influence the placement of the whole box with the
-%D parameters \type {leftmargin} and \type {rightmargin}.
-%D
-%D \startbuffer
-%D \setupformulas[align=right,leftmargin=3em]
-%D \startformula \fakeformula \stopformula
-%D \placeformula \startformula \fakeformula \stopformula
-%D
-%D \setupformulas[align=left,rightmargin=1em]
-%D \startformula \fakeformula \stopformula
-%D \placeformula \startformula \fakeformula \stopformula
-%D \stopbuffer
-%D
-%D \typebuffer % {\tracemathtrue\getbuffer}
-%D
-%D You can also inherit the margin from the environment.
-%D
-%D \startbuffer
-%D \setupformulas[align=right,margin=standard]
-%D \startformula \fakeformula \stopformula
-%D \placeformula \startformula \fakeformula \stopformula
-%D \stopbuffer
-%D
-%D \typebuffer % {\tracemathtrue\getbuffer}
-%D
-%D The distance between the formula and the number is only
-%D applied when the formula is left or right aligned.
-%D
-%D \startbuffer
-%D \setupformulas[align=left,distance=2em]
-%D \startformula \fakeformula \stopformula
-%D \placeformula \startformula \fakeformula \stopformula
-%D \stopbuffer
-%D
-%D \typebuffer % {\tracemathtrue\getbuffer}
+\def\setformulalistentry#1%
+ {\gdef\doflushformulalistentry##1%
+ {\normalexpanded{\noexpand\writetolist[\v!formula]{##1}}{#1}%
+ \global\let\doflushformulalistentry\gobbleoneargument}}
\protect \endinput
diff --git a/Master/texmf-dist/tex/context/base/strc-not.lua b/Master/texmf-dist/tex/context/base/strc-not.lua
index 32a836ba86c..be883af57eb 100644
--- a/Master/texmf-dist/tex/context/base/strc-not.lua
+++ b/Master/texmf-dist/tex/context/base/strc-not.lua
@@ -1,6 +1,6 @@
if not modules then modules = { } end modules ['strc-not'] = {
version = 1.001,
- comment = "companion to strc-not.tex",
+ comment = "companion to strc-not.mkiv",
author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
copyright = "PRAGMA ADE / ConTeXt Development Team",
license = "see context related readme files"
@@ -52,14 +52,14 @@ function notes.store(tag,n)
end
state.start = state.start or nnd
end
- tex.write(#nd)
+ texwrite(#nd)
end
-function notes.get(tag,n)
+local function get(tag,n)
local nd = notedata[tag]
if nd then
- n = n or #notedata
- nd = nd[n or n]
+ n = n or #nd
+ nd = nd[n]
if nd then
if trace_notes then
logs.report("notes","getting %s of %s",n,tag)
@@ -69,6 +69,20 @@ function notes.get(tag,n)
end
end
+local function getn(tag)
+ local nd = notedata[tag]
+ return (nd and #nd) or 0
+end
+
+nodes.get = get
+nodes.getn = getn
+
+-- we could make a special enhancer
+
+function notes.listindex(tag,n)
+ return notedata[tag][n]
+end
+
function notes.define(tag,kind,number)
local state = notes.setstate(tag,kind)
state.number = number
@@ -77,6 +91,9 @@ end
function notes.save(tag,newkind)
local state = notestates[tag]
if state and not state.saved then
+ if trace_notes then
+ logs.report("notes","saving state of %s: %s -> %s",tag,state.kind,newkind or state.kind)
+ end
state.saved = notedata[tag]
state.savedkind = state.kind
state.kind = newkind or state.kind
@@ -84,11 +101,14 @@ function notes.save(tag,newkind)
end
end
-function notes.restore(tag)
+function notes.restore(tag,forcedstate)
local state = notestates[tag]
if state and state.saved then
+ if trace_notes then
+ logs.report("notes","restoring state of %s: %s -> %s",tag,state.kind,state.savedkind)
+ end
state.saved = nil
- state.kind = state.savedkind
+ state.kind = forcedstate or state.savedkind
notedata[tag] = state.saved
end
end
@@ -136,7 +156,7 @@ function notes.doifcontent(tag)
end
local function internal(tag,n)
- local nd = notes.get(tag,n)
+ local nd = get(tag,n)
if nd then
local r = nd.references
if r then
@@ -154,6 +174,20 @@ local function ordered(kind,name,n)
return o and o[n]
end
+notes.internal = internal
+notes.ordered = ordered
+
+function notes.doifonsamepageasprevious(tag)
+ local same = false
+ local n = getn(tag,n)
+ local current, previous = get(tag,n), get(tag,n-1)
+ if current and previous then
+ local cr, pr = current.references, previous.references
+ same = cr and pr and cr.realpage == pr.realpage
+ end
+ commands.doifelse(same)
+end
+
function notes.checkpagechange(tag) -- called before increment !
local nd = notedata[tag] -- can be unset at first entry
if nd then
@@ -197,7 +231,7 @@ function notes.deltapage(tag,n)
what = 3
end
end
- tex.write(what)
+ texwrite(what)
end
function notes.postpone()
@@ -212,14 +246,14 @@ function notes.postpone()
end
function notes.setsymbolpage(tag,n)
- local nd = notes.get(tag,n)
+ local nd = get(tag,n)
if nd then
nd.metadata.symbolpage = texcount.realpageno
end
end
function notes.getsymbolpage(tag,n)
- local nd = notes.get(tag,n)
+ local nd = get(tag,n)
nd = nd and nd.metadata.symbolpage
texwrite(nd or 0)
end
@@ -236,9 +270,9 @@ function notes.flush(tag,whatkind) -- store and postpone
local state = notestates[tag]
local kind = state.kind
if kind == whatkind then
+ local nd = notedata[tag]
+ local ns = state.start -- first index
if kind == "postpone" then
- local nd = notedata[tag]
- local ns = state.start -- first index
if nd and ns then
if trace_notes then
logs.report("notes","flushing state %s of %s from %s to %s",whatkind,tag,ns,#nd)
@@ -250,17 +284,22 @@ function notes.flush(tag,whatkind) -- store and postpone
state.start = nil
state.kind = "insert"
elseif kind == "store" then
- local nd = notedata[tag]
- local ns = state.start -- first index
- if trace_notes then
- logs.report("notes","flushing state %s of %s from %s to %s",whatkind,tag,ns,#nd)
- end
if nd and ns then
+ if trace_notes then
+ logs.report("notes","flushing state %s of %s from %s to %s",whatkind,tag,ns,#nd)
+ end
for i=ns,#nd do
texsprint(ctxcatcodes,format("\\handlenoteitself{%s}{%s}",tag,i))
end
end
state.start = nil
+ elseif kind == "reset" then
+ if nd and ns then
+ if trace_notes then
+ logs.report("notes","flushing state %s of %s from %s to %s",whatkind,tag,ns,#nd)
+ end
+ end
+ state.start = nil
elseif trace_notes then
logs.report("notes","not flushing state %s of %s",whatkind,tag)
end
diff --git a/Master/texmf-dist/tex/context/base/strc-not.mkii b/Master/texmf-dist/tex/context/base/strc-not.mkii
index 40e06c9a49a..f6fae3378ce 100644
--- a/Master/texmf-dist/tex/context/base/strc-not.mkii
+++ b/Master/texmf-dist/tex/context/base/strc-not.mkii
@@ -589,6 +589,38 @@
\donothing
\fi}
+% maybe some day
+%
+% \newconditional\tracemovednotes
+% \def\domovednote#1#2%
+% {\iflocation
+% \doshowmovednote{#1}{#2}%
+% \else\ifconditional\tracemovednotes
+% \doshowtracednote{#1}{#2}%
+% \fi\fi}
+% \def\doshowmovednote#1#2%
+% {\doifreferencefoundelse{\s!fnt:t:\number\internalnotereference}
+% {\let\savedrealreference\currentrealreference
+% \doifreferencefoundelse{\s!fnt:f:\number\internalnotereference}
+% {\ifnum\savedrealreference<\currentrealreference\relax
+% \symbol[#1]%
+% \else\ifnum\savedrealreference>\currentrealreference\relax
+% \symbol[#2]%
+% \fi\fi}
+% \donothing}
+% \donothing}
+% \def\doshowtracednote#1#2%
+% {\doifreferencefoundelse{\s!fnt:t:\number\internalnotereference}
+% {\let\savedrealreference\currentrealreference
+% \doifreferencefoundelse{\s!fnt:f:\number\internalnotereference}
+% {\ifnum\savedrealreference<\currentrealreference\relax
+% \writestatus{NOTE}{forward note reference on real page \currentrealreference}%
+% \else\ifnum\savedrealreference>\currentrealreference\relax
+% \writestatus{NOTE}{backward note reference on real page \currentrealreference}%
+% \fi\fi}
+% \donothing}
+% \donothing}
+
\def\dodonote
{\ifnotesenabled
\iftrialtypesetting
diff --git a/Master/texmf-dist/tex/context/base/strc-not.mkiv b/Master/texmf-dist/tex/context/base/strc-not.mkiv
index 4b033cbf9e7..45e37b276f5 100644
--- a/Master/texmf-dist/tex/context/base/strc-not.mkiv
+++ b/Master/texmf-dist/tex/context/base/strc-not.mkiv
@@ -17,6 +17,12 @@
\unprotect
+% this needs a further cleanup ...
+%
+% -- set breakpoin in descriptions
+% -- reset after trialtypesetting
+% -- that way we can trick the symbol space
+
% obsolete
\let\autopostponenotes\relax
@@ -97,7 +103,7 @@
\newtoks\tobeprocessednotes
-\def\processnotes#1% #1: \macro that uses \currentnote
+\unexpanded\def\processnotes#1% #1: \macro that uses \currentnote
{\def\doprocesssomenote##1{\edef\currentnote{##1}\let\currentdescription\currentnote#1}%
\the\tobeprocessednotes}
@@ -150,13 +156,12 @@
%D Are quite ligitimate, we default to a simple one 20\% of the
%D text width.
-\def\setupnotes
+\unexpanded\def\setupnotes
{\dodoubleargument\getparameters[\??vn]}
\setupnotes
[\c!location=\v!page,
\c!way=\v!by\v!part,
- \c!sectionnumber=\v!no,
%\c!conversion=,
\c!rule=\v!on,
\c!before=\blank,
@@ -186,34 +191,29 @@
\c!interaction=\v!yes,
%\c!factor=,
%\c!scope=, % \v!text \v!page
-\c!prefixconnector=.,
-\c!prefix=\v!no,
- \c!next=\autoinsertnextspace, % new, experimental with startnotes
+ \c!prefixconnector=.,
+ %\c!next=\autoinsertnextspace
+ \c!prefix=\v!no,
+ %\c!continue=\v!no,
\c!n=1]
+\setupnotes
+ [\c!expansion=\v!no,
+ \c!xmlsetup=,
+ \s!catcodes=,
+ \c!saveinlist=\v!yes]
+
\def\@@defaultnotedefloc{\v!inleft}
\def\@@defaultnotedefdis{\!!zeropoint}
-% also s!root
-%
-% \definedescription
-% [\??vn\??vn]
-% [\c!location=\@@defaultnotedefloc,
-% \c!distance=\@@defaultnotedefdis,
-% \c!width=\v!fit,
-% \c!headstyle=\noteparameter\c!style,
-% \c!headcolor=\noteparameter\c!color,
-% \c!before=,
-% \c!after=]
-
-\def\startnotedef{\resetdescriptions\csname\e!start\??vn\??vn\currentnote\endcsname}
-\def\stopnotedef {\csname\e!stop \??vn\??vn\currentnote\endcsname}
+\unexpanded\def\startnotedef{\resetdescriptions\csname\e!start\??vn\??vn\currentnote\endcsname}
+\unexpanded\def\stopnotedef {\csname\e!stop \??vn\??vn\currentnote\endcsname}
\def\currentnoteins{\csname\??vn:\currentnote\endcsname}
\newtoks \everysetupnote
-\def\definenote
+\unexpanded\def\definenote
{\dodoubleempty\dodefinenote}
\def\dodefinenote[#1][#2]%
@@ -227,12 +227,13 @@
[\c!location=\@@defaultnotedefloc,
\c!distance=\@@defaultnotedefdis,
\c!width=\v!fit,
- \c!headstyle=\noteparameter\c!style,
- \c!headcolor=\noteparameter\c!color,
-\s!handler=\v!note,
+ \c!headstyle=\noteparameter\c!style, % hm
+ \c!headcolor=\noteparameter\c!color, % hm
+ \s!handler=\v!note,
\c!text=,
\c!before=,
\c!after=]%
+ \doredefinenotecommands\currentnote
\setupenumerations
[\currentnote]
[\s!parent=\??vn\currentnote,
@@ -242,12 +243,35 @@
\getparameters
[\??vn\currentnote]
[\s!parent=\??vn,#2]%
- \definestructurecounter
- [\currentnote]%
+% \definestructurecounter
+% [\currentnote]%
\ctxlua{structure.notes.define("\currentnote","insert",\number\csname\??vn:\currentnote\endcsname)}%
\the\everysetupnote
\dochecknote}
+% \starttext
+% text \startfootnote Test.\stopfootnote
+% test \footnote{xxxx} \subfootnote{xxxx}
+% test \footnote{xxxx} \subfootnote{xxxx}
+% \stoptext
+
+\def\dodoredefinenotecommands#1#2#3%
+ {\unexpanded\expandafter\def\csname\e!start#3#1\expandafter\endcsname\expandafter
+ {\expandafter\dosingleempty\csname\s!do\e!start#3#1\endcsname}%
+ \unexpanded\expandafter\def\csname\s!do\e!start#3#1\expandafter\endcsname
+ \expandafter[\expandafter##\expandafter1\expandafter]\expandafter##\expandafter2\csname\e!stop#3#1\endcsname
+ {\begingroup
+ \doenumerationinit{#1}{#2}{#3}%
+ \@@notemakedescription[##1]{}{##2}%
+ \endgroup}}
+
+\def\doredefinenotecommands#1%
+ {\normalexpanded{\noexpand\dodoredefinenotecommands{#1}{1}{}}%
+ \let\@@subslevel\empty
+ \dostepwiserecurse{2}{\descriptionparameter\c!levels}{1}
+ {\normalexpanded{\noexpand\dodoredefinenotecommands{#1}{\recurselevel}{\@@subslevel\v!sub}}%
+ \edef\@@subslevel{\@@subslevel\v!sub}}}
+
\let\setupnotedefinition\setupenumerations
\appendtoks
@@ -258,8 +282,7 @@
% \dochecknote
% \to \everysetupnote
-
-\def\setupnote
+\unexpanded\def\setupnote
{\dodoubleempty\dosetupnote}
\def\dosetupnote[#1][#2]%
@@ -271,16 +294,20 @@
\dochecknote}
\appendtoks
- \letvalue{\??vn\c!rule:\currentnote}\normalnoterule % hm
+ \setvalue{\??vn\c!rule:c:\currentnote}{\normalnoterule}% hm
+ \letvalue{\??vn\c!rule:a:\currentnote}\v!left
\to \everysetupnote
\appendtoks
- \processaction
- [\noteparameter\c!rule]
- [ \v!on=>\letvalue{\??vn\c!rule:\currentnote}\normalnoterule,
- \v!off=>\letvalue{\??vn\c!rule:\currentnote}\relax,
- \s!default=>\letvalue{\??vn\c!rule:\currentnote}\relax,
- \s!unknown=>\setvalue{\??vn\c!rule:\currentnote}{\noteparameter\c!rule}]%
+ \expanded{\processallactionsinset
+ [\noteparameter\c!rule]}
+ [ \v!on=>\setvalue{\??vn\c!rule:c:\currentnote}{\normalnoterule}, % no let as it can be changed afterwards
+ \v!normal=>\setvalue{\??vn\c!rule:c:\currentnote}{\normalnoterule},
+ \v!left=>\setvalue{\??vn\c!rule:a:\currentnote}{l2r},
+ \v!right=>\setvalue{\??vn\c!rule:a:\currentnote}{r2l},
+ \v!off=>\letvalue{\??vn\c!rule:c:\currentnote}\relax,
+ \s!default=>\letvalue{\??vn\c!rule:c:\currentnote}\relax,
+ \s!unknown=>\setvalue{\??vn\c!rule:c:\currentnote}{\noteparameter\c!rule}]%
\to \everysetupnote
\appendtoks
@@ -333,8 +360,8 @@
\setvalue{\??vn @\v!page }{\setnotelocation\plusone}
\setvalue{\??vn @\v!columns }{\setnotelocation\plustwo}
-\setvalue{\??vn @\v!firstcolumn}{\setnotelocation\plusthree}
-\setvalue{\??vn @\v!lastcolumn }{\setnotelocation\plusfour}
+\setvalue{\??vn @\v!lastcolumn }{\setnotelocation\plusthree}
+\setvalue{\??vn @\v!firstcolumn}{\setnotelocation\plusfour}
\setvalue{\??vn @\v!none }{\setnotelocation\plusfive}
\setvalue{\??vn @\v!text }{\setnotelocation\plusfive \setnoteformatting\plusone} % test
\setvalue{\??vn @\v!high }{\setnoteposition\plusone}
@@ -378,15 +405,8 @@
\ifnotelimit
\global\dimen\currentnoteins\dimexpr\noteparameter\c!height*\scratchcounter\relax
\fi
- % distance
- \begingroup
- \setbox\scratchbox\vbox
- {\forgetall
- \noteparameter\c!before
- \placenoterule
- \noteparameter\c!after}%
- \global\skip\currentnoteins\ht\scratchbox
- \endgroup
+ % distance -> tricky as this might depend on a font switch so we need a fast checker
+ \dosetnotedistance
% play safe
\ifnum\noteparameter\s!noteloc=\plusfive
\ctxlua{structure.notes.setstate("\currentnote","store")}%
@@ -396,10 +416,28 @@
\global\skip \currentnoteins\zeropoint
\fi}
-% \def\checknotes
-% {\processnotes\dochecknote}
+\def\dosetnotedistance
+ {\begingroup
+ \setbox\scratchbox\vbox
+ {\forgetall
+ \dontcomplain
+ \noteparameter\c!before
+ \placenoterule
+ \noteparameter\c!after}%
+ \global\skip\currentnoteins\ht\scratchbox
+ \endgroup}
-\let\checknotes\relax % experiment, avoiding this saves a lot of time
+% \def\checknotes % no longer needed
+% {\processnotes\dochecknote}
+%
+% \def\checknotedistances
+% {\processnotes\dosetnotedistance}
+%
+% fails but not that much needed anyway:
+%
+% \appendtoks
+% \checknotedistances
+% \to \everyglobalbodyfont
% D When \type{n} exceeds~1, footnotes are typeset in
% D multi||columns, using the algoritm presented on page~397
@@ -423,20 +461,30 @@
%D runs). Let's just reserve a few points, that probably match
%D those of the stretch component.
-\def\placenoterule
- {\getvalue{\??vn\c!rule:\currentnote}}
+%D A bit messy:
-\def\normalnoterule
+\unexpanded\def\placenoterule
+ {\bgroup
+ \setupalign[\getvalue{\??vn\c!rule:a:\currentnote}]%
+ \righttoleft
+ \getvalue{\??vn\c!rule:c:\currentnote}%
+ \par
+ \egroup}
+
+\unexpanded\def\normalnoterule
{\ifvmode
- \color
- [\noteparameter\c!rulecolor]
- {\hrule\!!width .2\hsize\!!height\noteparameter\c!rulethickness\!!depth \zeropoint}%
+ \dontleavehmode \blackrule
+ [ \c!color=\noteparameter\c!rulecolor,
+ \c!width=.2\hsize,
+ \c!height=\noteparameter\c!rulethickness,
+ \c!depth=\zeropoint]%
+ \endgraf
\kern\strutdepth
\fi}
\ifx\setnotehsize\undefined
- \def\setnotehsize{\hsize\noteparameter\c!width\relax} % can be overloaded
+ \unexpanded\def\setnotehsize{\hsize\noteparameter\c!width\relax} % can be overloaded
\fi
@@ -499,68 +547,105 @@
%D functionality.
%D The next implementation runs on top of enumerations (only in \MKIV).
+%D
+%D \starttyping
+%D \setupenumerations
+%D [footnote]
+%D [ style=\type{(es)},
+%D headstyle=\type{(hs)}]
+%D
+%D \setupnote
+%D [footnote]
+%D [ style=\type{(s)},
+%D command=\type{(c)},
+%D textcommand=\type{(tc)},
+%D textstyle=\type{(ts)},
+%D numberstyle=\type{(ns)},
+%D numbercommand=\type{(nc)}]
+%D
+%D \setuplayout[backspace=6cm,marginwidth=cm,width=middle]
+%D
+%D \starttext
+%D \dorecurse{9}{This\footnote{Hello World #1} is a test.\par }
+%D \stoptext
+%D \stoptyping
% TODO: \ifnotesenabled
\newif\ifnotesymbol \notesymboltrue
-\def\setnote [#1]{\getvalue{#1}}
-\def\setnotetext[#1]{\global\settrue\skipnoteplacement\getvalue{#1}}
+\newconditional\skipnoteplacement
+
+\unexpanded\def\setnote [#1]{\getvalue{#1}}
+\unexpanded\def\setnotetext[#1]{\global\settrue\skipnoteplacement\getvalue{#1}}
\def\domovednote#1#2#3#4%
{\ifcase\ctxlua{structure.notes.deltapage("#1",#2)}\or\symbol[#3]\or\symbol[#4]\fi}
-\setvalue{\??dd:\v!note:\s!handler }{\@@doenumerationhandler}
-\setvalue{\??dd:\v!note:\s!handler:\s!do }{\@@somenotedescription}
-\setvalue{\??dd:\v!note:\s!handler:\s!start}{\@@startsomenotedescription}
+\setvalue{\??dd:\v!note:\s!handler:\s!text }{\@@donotetext}
+\setvalue{\??dd:\v!note:\s!handler:\s!number}{\@@donotenumber}
+\setvalue{\??dd:\v!note:\s!handler }{\@@donotehandler}
+\setvalue{\??dd:\v!note:\s!handler:\s!do }{\@@somenotedescription}
+\setvalue{\??dd:\v!note:\s!handler:\s!start }{\@@startsomenotedescription}
+
+\let\@@donotehandler\@@dodescriptionhandler
\def\@@somenotedescription {\@@notemakedescription}
\def\@@startsomenotedescription{\@@notemakedescription}
-\newconditional\skipnoteplacement
-
-\def\@@notemakedescription[#1]#2#3% todo ... proper [key=value] etc
+\def\@@notemakedescription[#1]#2#3%
{\ifnotesenabled
- \begingroup
- \doenumerationcheckconditions
- \let\currentnote\currentdescriptionmain
- \dodescriptioncomponent[\c!reference=#1,\c!label={\descriptionparameter\c!text},\c!title={#3},\c!bookmark=,][]%
- \xdef\currentnotenumber{\ctxlua{structure.notes.store("\currentnote",\currentdescriptionnumberentry)}}%
- \settrue\processingnote
- \ifconditional\skipnoteplacement
- \globallet\lastnotesymbol\dolastnotesymbol
+ \edef\currentdescriptionreference{#1}%
+ \iftrialtypesetting
+ \doenumerationcheckconditions
+ \let\currentnote\currentdescriptionmain
+ \typesetdummynotesymbol
\else
- \iftypesettinglines % otherwise problems with \type <crlf> {xxx}
- \ignorelines % makes footnotes work in \startlines ... \stoplines
- \fi
- \ifnotesymbol
- \dolastnotesymbol
- \else
- \unskip\unskip
+ \begingroup
+ \doenumerationcheckconditions
+ \let\currentnote\currentdescriptionmain
+ \dodescriptioncomponent[\c!reference=#1,\c!label={\descriptionparameter\c!text},\c!title={#3},\c!list=,\c!bookmark=,][]%
+ \xdef\currentnotenumber{\ctxlua{structure.notes.store("\currentnote",\currentdescriptionnumberentry)}}%
+ \settrue\processingnote
+ \ifconditional\skipnoteplacement
\globallet\lastnotesymbol\dolastnotesymbol
+ \else
+ \iftypesettinglines % otherwise problems with \type <crlf> {xxx}
+ \ignorelines % makes footnotes work in \startlines ... \stoplines
+ \fi
+ \ifnotesymbol
+ \dolastnotesymbol
+ \else
+ \unskip\unskip
+ \globallet\lastnotesymbol\dolastnotesymbol
+ \fi
\fi
+ \ifconditional\postponingnotes % todo: per note class
+ \global\settrue\postponednote
+ \else\ifconditional\inlocalnotes % todo: per note class
+ \global\settrue\postponednote
+ \else
+ \handlenoteinsert\currentnote\currentnotenumber
+ \fi\fi
+ \endgroup
\fi
- \ifconditional\postponingnotes
- \global\settrue\postponednote
- \else
- \handlenoteinsert\currentnote\currentnotenumber
- \fi
- \ifconditional\skipnoteplacement \else
- \kern\notesignal\relax % \relax is needed to honor spaces
- \iftrialtypesetting \else \global\setfalse\skipnoteplacement \fi
- \fi
- \endgroup
+ \fi
+ \ifconditional\skipnoteplacement
+ \global\setfalse\skipnoteplacement
+ \else
+ \kern\notesignal\relax % \relax is needed to honor spaces
\fi}
-\def\dolastnotesymbol{\typesetsomenotesymbol\currentnote\currentnotenumber}
+\def\dolastnotesymbol
+ {\typesetsomenotesymbol\currentnote\currentnotenumber}
-\def\dotypesetsomenotesymbol#1#2%
+\def\dotypesetsomenotesymbol#1#2% running text
{\dodonotesymbol
{\synchronizesomenotesymbol{#1}{#2}%
\ctxlua{structure.notes.number("\currentnote",\currentnotenumber)}% \currentdescriptionnumberentry
\domovednote{#1}{#2}\v!previouspage\v!nextpage}}
-\def\typesetsomenotesymbol#1#2%
+\unexpanded\def\typesetsomenotesymbol#1#2% running text
{\removeunwantedspaces
\doifitalicelse\/\donothing % Charles IV \footnote{the fourth}
\ifdim\lastkern=\notesignal
@@ -572,10 +657,35 @@
{\directgotobox{\dotypesetsomenotesymbol{#1}{#2}}[page(\ctxlua{structure.notes.getnumberpage("#1",\number#2)})]}% f:
\globallet\lastnotesymbol\relax}
+\unexpanded\def\typesetdummynotesymbol % temp hack
+ {\removeunwantedspaces
+ \doifitalicelse\/\donothing % Charles IV \footnote{the fourth}
+ \ifdim\lastkern=\notesignal
+ \dodonotesymbol{\kern\noteparameter\c!distance}% gets the font right, hack !
+ \fi
+ \nobreak
+ \hbox to .5em{}%
+ \globallet\lastnotesymbol\relax}
+
\def\currentnotedescriptiontext % todo: can be other number
{\ctxlua{structure.notes.title("\currentnote",\currentdescriptionnumberentry)}}
-\def\currentnoteenumerationfullnumber
+\def\@@donotetext
+ {\ifconditional\enumerationnumberenabled
+ \iftrialtypesetting
+ \doenumerationfullnumber\showdntext
+ \doenumerationcouplingsymbol
+ \else
+ \doenumerationregistercoupling
+ \doenumerationfullnumber\showdntext
+ \doenumerationcouplingsymbol
+ \fi
+ \else
+ \doenumerationfullnumber\showdnpuretext
+ \fi}
+
+% \def\currentnoteenumerationfullnumber
+\def\@@donotenumber
{\doifelse{\noteparameter\c!interaction}\v!no
{\docurrentnoteenumerationfullnumber}%
{\directgotobox
@@ -584,7 +694,8 @@
\def\docurrentnoteenumerationfullnumber
{\noteparameter\c!numbercommand
- {\ctxlua{structure.notes.number("\currentnote",\currentdescriptionnumberentry)}%
+ {\dosetnoteattributes\c!numberstyle\c!numbercolor
+ \ctxlua{structure.notes.number("\currentnote",\currentdescriptionnumberentry)}%
\domovednote\currentdescription\currentdescriptionnumberentry\v!nextpage\v!previouspage}}
\def\synchronizesomenotesymbol#1#2% called more often than needed
@@ -596,6 +707,7 @@
\the\everybeforenoteinsert
\insert\currentnoteins\bgroup
\the\everyinsidenoteinsert
+ \doprocesslocalsetups{\noteparameter\c!setups}% experimental
\handlenoteitself{#1}{#2}%
\egroup
\the\everyafternoteinsert
@@ -605,8 +717,12 @@
{\edef\currentdescription{#1}%
\edef\currentnote{#1}%
\edef\currentdescriptionnumberentry{#2}%
- \let\currentdescriptiontext\currentnotedescriptiontext
- \let\currentenumerationfullnumber\currentnoteenumerationfullnumber
+ \edef\currentdescriptionlistentry{\ctxlua{tex.write(structure.notes.listindex("#1",#2))}}%
+ % as we can have collected notes (e.g. in tables) we need to recover
+ % \currentdescriptionattribute and \currentdescriptionsynchronize
+ \reinstatedescriptionnumberentry\currentdescriptionlistentry % we could store the number in the entry
+ %
+ \dontcomplain % should be done in startstoreddescription instead
\dostartstoreddescription\begstrut\currentnotedescriptiontext\endstrut\dostopstoreddescription}
\def\dostartstoreddescription
@@ -669,6 +785,8 @@
\fi
\to \everyinsidenoteinsert
+% not: \appendtoks \setnotehsize \to \everyinsidenoteinsert (spoils columns)
+
\let\lastnotesymbol\relax
%D \macros
@@ -681,7 +799,7 @@
%D
%D This command is implemented rather straightforward as:
-\def\notesymbol
+\unexpanded\def\notesymbol
{\dodoubleempty\donotesymbol}
\def\donotesymbol[#1][#2]%
@@ -709,29 +827,33 @@
%
% \dorecurse{6}{\input tufte\footnote{\input ward \input tufte \relax}}
-\def\placenoteinserts
+\unexpanded\def\placenoteinserts
{\processnotes\doplacenoteinserts}
-\def\unvboxed {\ifvmode\unvbox \else\box \fi}
-\def\unvcopied{\ifvmode\unvcopy\else\copy\fi}
+\unexpanded\def\unvboxed {\ifvmode\unvbox \else\box \fi}
+\unexpanded\def\unvcopied{\ifvmode\unvcopy\else\copy\fi}
\def\doplacenoteinserts
{\relax\ifdim\ht\currentnoteins>\zeropoint\relax
\ifnum\noteparameter\s!noteloc=\plusfive
\else
- \endgraf
- \ifvmode
- \whitespace
- \noteparameter\c!before
- \fi
+ \endgraf
+ \ifvmode
+ \whitespace
+ \noteparameter\c!before
+ \fi
+% \bgroup
+% \setupalign[\noteparameter\c!align]%
\placenoterule % alleen in ..mode
+% \par
+% \egroup
\bgroup
\setnotebodyfont
\setbox\scratchbox\hbox
{% 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
- \iftrialtypesetting\unvcopied\else\unvboxed\fi\currentnoteins
+ \iftrialtypesetting\unvcopied\else\unvboxed\fi\currentnoteins % is this needed?
\or
\iftrialtypesetting\copy\else\box\fi\currentnoteins
\obeydepth % (a) added , since split footnotes will not align properly
@@ -834,26 +956,32 @@
\def\defaultnotewidth{\makeupwidth} % {\ifdim\hsize<\makeupwidth\hsize\else\makeupwidth\fi}
-\def\startlocalnotes
+\newconditional\inlocalnotes
+
+\unexpanded\def\startlocalnotes
{\dosingleempty\dostartlocalnotes}
\def\dostartlocalnotes[#1]%
{\def\localnoteslist{#1}%
+ \settrue\inlocalnotes
\processcommacommand[\localnoteslist]\dodostartlocalnotes}
-\def\stoplocalnotes
- {\processcommacommand[\localnoteslist]\dodostoplocalnotes}
+\unexpanded\def\stoplocalnotes
+ {\processcommacommand[\localnoteslist]\dodostoplocalnotes
+ \setfalse\inlocalnotes}
\def\dodostartlocalnotes#1%
- {\savestructurecounter[#1]%
- \resetstructurecounter[#1]%
+ {\doifnot{\noteparameter\c!continue}\v!yes
+ {\savestructurecounter[#1]%
+ \resetstructurecounter[#1]}%
\ctxlua{structure.notes.save("#1","store")}}
\def\dodostoplocalnotes#1%
- {\restorestructurecounter[#1]%
+ {\doifnot{\noteparameter\c!continue}\v!yes
+ {\restorestructurecounter[#1]}%
\ctxlua{structure.notes.restore("#1")}}
-\def\placelocalnotes
+\unexpanded\def\placelocalnotes
{\dodoubleempty\doplacelocalnotes}
\def\doplacelocalnotes[#1][#2]%
@@ -903,10 +1031,10 @@
%D
%D \showsetup{placefootnotes}
-\def\placebottomnotes
+\unexpanded\def\placebottomnotes
{\processnotes\placenoteinserts}
-\def\placenotes
+\unexpanded\def\placenotes
{\dodoubleempty\doplacenotes}
\def\doplacenotes[#1][#2]%
@@ -990,13 +1118,13 @@
% is this ok? endnotes and such
- \def\fakenotes
+ \unexpanded\def\fakenotes
{\ifhmode\endgraf\fi\ifvmode
\calculatetotalclevernoteheight
\ifdim\totalnoteheight>\zeropoint \kern\totalnoteheight \fi
\fi}
- \def\fakepagenotes
+ \unexpanded\def\fakepagenotes
{\ifhmode\endgraf\fi\ifvmode
\calculatetotalpagenoteheight
\ifdim\totalnoteheight>\zeropoint \kern\totalnoteheight \fi
@@ -1006,15 +1134,18 @@
\def\doaddtototalnoteheight#1%
{\ifdim\ht#1>\zeropoint
- \advance\totalnoteheight\ht #1%
- \advance\totalnoteheight\skip#1%
+ \ifcase\count#1\else
+ % todo: divide by count
+ \advance\totalnoteheight\ht #1%
+ \advance\totalnoteheight\skip#1%
+ \fi
\fi}
\def\docalculatetotalnoteheight
{\ifcase\clevernotes % tricky here ! ! ! to be sorted out ! ! !
\doaddtototalnoteheight\currentnoteins
\else
- \doaddtototalnoteheight\currentbackupnoteins
+% \doaddtototalnoteheight\currentbackupnoteins
\fi}
\def\docalculatetotalclevernoteheight
@@ -1101,34 +1232,44 @@
%D Compatibility macros:
- \def\setupfootnotedefinition{\setupnotedefinition [\v!footnote]}
- \def\setupfootnotes {\setupnote [\v!footnote]}
-%unexpanded \def\footnote {\setnote [\v!footnote]}
-\unexpanded \def\footnotetext {\setnotetext [\v!footnote]}
- %def\note {\dodoubleempty\notesymbol [\v!footnote]} % alleen footnote
- \def\placefootnotes {\dodoubleempty\doplacefootnotes [\v!footnote]}
- \def\placelocalfootnotes {\dodoubleempty\doplacelocalfootnotes[\v!footnote]}
- \def\startlocalfootnotes {\startlocalnotes [\v!footnote]} % alleen footnote
- \def\stoplocalfootnotes {\stoplocalnotes }
+\unexpanded\def\setupfootnotedefinition{\setupnotedefinition [\v!footnote]}
+\unexpanded\def\setupfootnotes {\setupnote [\v!footnote]}
+%unexpanded\def\footnote {\setnote [\v!footnote]}
+\def\footnotetext {\setnotetext [\v!footnote]}
+%unexpanded\def\note {\dodoubleempty\notesymbol [\v!footnote]} % alleen footnote
+\unexpanded\def\placefootnotes {\dodoubleempty\doplacefootnotes [\v!footnote]}
+\unexpanded\def\placelocalfootnotes {\dodoubleempty\doplacelocalfootnotes[\v!footnote]}
+\unexpanded\def\startlocalfootnotes {\startlocalnotes [\v!footnote]} % alleen footnote
+\unexpanded\def\stoplocalfootnotes {\stoplocalnotes }
\def\doplacefootnotes [#1][#2]{\ifsecondargument\placenotes [#1][#2,\c!height=\textheight]\else\placenotes [#1]\fi}
\def\doplacelocalfootnotes[#1][#2]{\ifsecondargument\placelocalnotes[#1][#2,\c!height=\textheight]\else\placelocalnotes[#1]\fi}
-\def\note{\dodoubleempty\donote}
+\unexpanded\def\note{\dodoubleempty\donote}
\def\donote[#1][#2]{\ifsecondargument\donotesymbol[#1][#2]\else\secondargumenttrue\donotesymbol[\v!footnote][#1]\fi}
+%D Goodies:
+%D
+%D \starttyping
+%D \dorecurse {100} {
+%D test \footnote{\doifnoteonsamepageelse[footnote]{ibidem}{aaa}}
+%D }
+%D \stoptyping
+
+\def\doifnoteonsamepageelse[#1]{\ctxlua{structure.notes.doifonsamepageasprevious("#1")}}
+
%D New trickery:
\def\ownnotesymbol#1% #1 gets number passed
{\executeifdefined{\??vn::\currentnote}\empty}
-\def\setnotesymbol[#1]#2#3%
+\unexpanded\def\setnotesymbol[#1]#2#3%
{\prewordbreak % prevent lookback
\setgvalue{\??vn::#1}{#3}
\dolastnotesymbol}
-\def\ownnote[#1]#2#3#4%
+\unexpanded\def\ownnote[#1]#2#3#4%
{\setnotesymbol[#1]{#2}{#3}%
\setnotetext [#1]{#4}}
diff --git a/Master/texmf-dist/tex/context/base/strc-num.lua b/Master/texmf-dist/tex/context/base/strc-num.lua
index 431200b3993..8165d078617 100644
--- a/Master/texmf-dist/tex/context/base/strc-num.lua
+++ b/Master/texmf-dist/tex/context/base/strc-num.lua
@@ -1,6 +1,6 @@
if not modules then modules = { } end modules ['strc-num'] = {
version = 1.001,
- comment = "companion to strc-num.tex",
+ comment = "companion to strc-num.mkiv",
author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
copyright = "PRAGMA ADE / ConTeXt Development Team",
license = "see context related readme files"
@@ -11,14 +11,17 @@ local next, type = next, type
local min, max = math.min, math.max
local texsprint, texcount = tex.sprint, tex.count
+local trace_counters = false trackers.register("structure.counters", function(v) trace_counters = v end)
+
structure = structure or { }
structure.helpers = structure.helpers or { }
structure.sections = structure.sections or { }
structure.counters = structure.counters or { }
structure.documents = structure.documents or { }
-structure.counters = structure.counters or { }
-structure.counters.data = structure.counters.data or { }
+structure.counters = structure.counters or { }
+structure.counters.data = structure.counters.data or { }
+structure.counters.specials = structure.counters.specials or { }
local helpers = structure.helpers
local sections = structure.sections
@@ -31,6 +34,7 @@ local variables = interfaces.variables
local counterdata = counters.data
local counterranges, tbs = { }, 0
+local counterspecials = counters.specials
counters.collected = counters.collected or { }
counters.tobesaved = counters.tobesaved or { }
@@ -120,6 +124,7 @@ local function allocate(name,i)
if not cd then
cd = {
level = 1,
+--~ block = "", -- todo
numbers = nil,
state = variables.start, -- true
data = { }
@@ -154,14 +159,18 @@ function counters.record(name,i)
end
local function savevalue(name,i)
- local cd = counterdata[name].data[i]
- local cs = tobesaved[name][i]
- local cc = collected[name]
- local cr = cd.range
- local old = (cc and cc[i] and cc[i][cr]) or 0
- cs[cr] = cd.number
- cd.range = cr + 1
- return old
+ if name then
+ local cd = counterdata[name].data[i]
+ local cs = tobesaved[name][i]
+ local cc = collected[name]
+ local cr = cd.range
+ local old = (cc and cc[i] and cc[i][cr]) or 0
+ cs[cr] = cd.number
+ cd.range = cr + 1
+ return old
+ else
+ return 0
+ end
end
function counters.define(name, start, counter) -- todo: step
@@ -197,10 +206,12 @@ function counters.compact(name,level,onlynumbers)
local compact = { }
for i=1,level or #data do
local d = data[i]
+--~ print(name,i,d.number)
if d.number ~= 0 then
compact[i] = (onlynumbers and d.number) or d
end
end
+--~ print(table.serialize(compact))
return compact
end
end
@@ -259,6 +270,24 @@ function counters.setoffset(name,value)
counters.setvalue(name,"offset",value)
end
+
+local function synchronize(name,d)
+ local dc = d.counter
+ if dc then
+ if trace_counters then
+ logs.report("counters","setting counter %s with name %s to %s",dc,name,d.number)
+ end
+ tex.setcount("global",dc,d.number)
+ end
+ local cs = counterspecials[name]
+ if cs then
+ if trace_counters then
+ logs.report("counters","invoking special for name %s",name)
+ end
+ cs()
+ end
+end
+
function counters.reset(name,n)
local cd = counterdata[name]
if cd then
@@ -267,7 +296,7 @@ function counters.reset(name,n)
savevalue(name,i)
d.number = d.start or 0
d.own = nil
- if d.counter then texcount[d.counter] = d.number end
+ synchronize(name,d)
end
cd.numbers = nil
end
@@ -279,7 +308,7 @@ function counters.set(name,n,value)
local d = allocate(name,n)
d.number = value or 0
d.own = nil
- if d.counter then texcount[d.counter] = d.number end
+ synchronize(name,d)
end
end
@@ -289,7 +318,7 @@ local function check(name,data,start,stop)
savevalue(name,i)
d.number = d.start or 0
d.own = nil
- if d.counter then texcount[d.counter] = d.number end
+ synchronize(name,d)
end
end
@@ -299,10 +328,15 @@ function counters.setown(name,n,value)
local d = allocate(name,n)
d.own = value
d.number = (d.number or d.start or 0) + (d.step or 0)
- if cd.level and cd.level > 0 then -- 0 is signal that we reset manually
- check(name,data,n+1) -- where is check defined
+ local level = cd.level
+ if not level or level == -1 then
+ -- -1 is signal that we reset manually
+ elseif level > 0 then
+ check(name,d,n+1)
+ elseif level == 0 then
+ -- happens elsewhere
end
- if d.counter then texcount[d.counter] = d.number end
+ synchronize(name,d)
end
end
@@ -339,20 +373,29 @@ function counters.add(name,n,delta)
local data = cd.data
local d = allocate(name,n)
d.number = (d.number or d.start or 0) + delta*(d.step or 0)
- if cd.level and cd.level > 0 then -- 0 is signal that we reset manually
+ local level = cd.level
+ if not level or level == -1 then
+ -- -1 is signal that we reset manually
+ elseif level > 0 then
+ -- within countergroup
check(name,data,n+1)
+ elseif level == 0 then
+ -- happens elsewhere
end
- if d.counter then texcount[d.counter] = d.number end
- return d.number
+ synchronize(name,d)
+ return d.number -- not needed
end
return 0
end
-function counters.check(level)
- for _, v in next, counterdata do
- if v.level == level then -- is level for whole counter!
- local data = v.data
- check(name,data)
+function counters.check(level) -- not used (yet)
+ for name, cd in next, counterdata do
+ -- logs.report("counters","%s %s %s",name,cd.level,level)
+ if cd.level == level then
+ if trace_counters then
+ logs.report("counters","resetting %s at level %s",name,level)
+ end
+ counters.reset(name)
end
end
end
@@ -384,7 +427,7 @@ function counters.converted(name,spec) -- name can be number and reference to st
if cd then
local spec = spec or { }
local numbers, ownnumbers = { }, { }
- local reverse = spec.order == variables["reverse"]
+ local reverse = spec.order == variables.reverse
local kind = spec.type or "number"
local v_first, v_next, v_previous, v_last = variables.first, variables.next, variables.previous, variables.last
local data = cd.data
@@ -409,7 +452,8 @@ function counters.converted(name,spec) -- name can be number and reference to st
local vf = v.first
local vl = v.last
if vl > 0 then
- vn = vl - vn + 1 + vf
+ -- vn = vl - vn + 1 + vf
+ vn = vl - vn + vf -- see testbed for test
end
end
end
diff --git a/Master/texmf-dist/tex/context/base/strc-num.mkiv b/Master/texmf-dist/tex/context/base/strc-num.mkiv
index 9f6733a6cbd..5b5aebe7dc8 100644
--- a/Master/texmf-dist/tex/context/base/strc-num.mkiv
+++ b/Master/texmf-dist/tex/context/base/strc-num.mkiv
@@ -39,21 +39,26 @@
% todo: better inheritane system
-\definesystemvariable {nn}
-
-\def\setupstructurecountering{\dodoubleempty\getparameters[\??nn]}
+\unexpanded\def\setupstructurecountering{\dodoubleempty\getparameters[\??nn]}
\setupstructurecountering
[\c!way=\v!by\v!chapter,
-% \c!blockway=,
-% \c!prefixstopper=,
-\c!prefixconnector=.,
-\c!prefixsegments=\thenamedstructurecounterlevel\currentstructurecounter,
-\c!start=0,
-\c!state=\v!start,
+% \c!blockway=,
+% \c!prefixstarter=,
+% \c!prefixstopper=,
+ \c!prefixconnector=.,
+ \c!prefixsegments=\thenamedstructurecounterlevel\currentstructurecounter,
+ \c!start=0,
+ \c!state=\v!start,
\c!prefix=\v!yes,
\c!state=\v!start]
+\setupstructurecountering
+ [\c!prefixsegments=\autostructureprefixsegments\sharedstructurecounterparameter]
+
+\def\autostructureprefixsegments#1% todo: \c!prefixsegments=\v!auto
+ {2:\thenamedstructureheadlevel{\ctxlua{structure.sections.way("#1\c!way","\v!by")}}}
+
% \letvalue{\??nn\s!empty}\empty
\def\structurecounterparameter#1#2%
@@ -76,13 +81,22 @@
#1%
\fi}
+\def\sharedstructurecounterparameter#1%
+ {\csname
+ \ifcsname\??nn#1\endcsname
+ \??nn#1%
+ \else
+ \s!empty
+ \fi
+ \endcsname}
+
+\let\numberingparameter\sharedstructurecounterparameter
+
% \def\structurecounterparameter #1#2{\csname\dostructurecounterparameter{\??nn#1}#2\endcsname}
% \def\dostructurecounterparameter #1#2{\ifcsname#1#2\endcsname#1#2\else\expandafter\dostructurecounterparentparameter\csname#1\s!number\endcsname#2\fi}
% \def\dostructurecounterparentparameter#1#2{\ifx#1\relax\s!empty\else\dostructurecounterparameter#1#2\fi}
-%
-
-\def\definestructurecounter
+\unexpanded\def\definestructurecounter
{\dodoubleempty\dodefinestructurecounter}
\def\dodefinestructurecounter[#1][#2]%
@@ -101,7 +115,7 @@
{\getparameters[\??nn#1][\c!number=#2]%
\docheckstructurecountersetup{#1}}
-\def\setupstructurecounter
+\unexpanded\def\setupstructurecounter
{\dodoubleargument\dosetupstructurecounter}
\def\dosetupstructurecounter[#1][#2]%
@@ -189,7 +203,7 @@
\ctxlua{structure.counters.add("\@@thestructurecounter{#1}",1,1)}}
\def\doincrementsubstructurecounter[#1][#2]%
- {\docheckstructurecounterbypage{#1}
+ {\docheckstructurecounterbypage{#1}%
\ctxlua{structure.counters.add("\@@thestructurecounter{#1}",#2,1)}}
\def\convertedstructurecounter
@@ -205,6 +219,7 @@
separatorset = "\structurecounterparameter{#1}\c!prefixseparatorset",
conversion = "\structurecounterparameter{#1}\c!prefixconversion",
conversionset = "\structurecounterparameter{#1}\c!prefixconversionset",
+ starter = \!!bs\structurecounterparameter{#1}\c!prefixstarter\!!es,
stopper = \!!bs\structurecounterparameter{#1}\c!prefixstopper\!!es,
set = "\structurecounterparameter{#1}\c!prefixset",
segments = "\structurecounterparameter{#1}\c!prefixsegments",
@@ -215,6 +230,7 @@
separatorset = "\structurecounterparameter{#1}\c!numberseparatorset",
conversion = \!!bs\structurecounterparameter{#1}\c!numberconversion\!!es,
conversionset = "\structurecounterparameter{#1}\c!numberconversionset",
+ starter = \!!bs\structurecounterparameter{#1}\c!numberstarter\!!es,
stopper = \!!bs\structurecounterparameter{#1}\c!numberstopper\!!es,
segments = "\structurecounterparameter{#1}\c!numbersegments",
type = "\structurecounterparameter{#1}\c!type",
@@ -232,7 +248,8 @@
separatorset = "\structurecounterparameter{#1}\c!prefixseparatorset",
conversion = "\structurecounterparameter{#1}\c!prefixconversion",
conversionset = "\structurecounterparameter{#1}\c!prefixconversionset",
- stopper = \!!bs\structurecounterparameter{#1}\c!prefixstopper\!!es,
+ % starter = \!!bs\structurecounterparameter{#1}\c!prefixstarter\!!es,
+ % stopper = \!!bs\structurecounterparameter{#1}\c!prefixstopper\!!es,
set = "\structurecounterparameter{#1}\c!prefixset",
segments = "\structurecounterparameter{#1}\c!prefixsegments",
connector = \!!bs\structurecounterparameter{#1}\c!prefixconnector\!!es,
@@ -242,6 +259,7 @@
separatorset = "\structurecounterparameter{#1}\c!numberseparatorset",
conversion = \!!bs\structurecounterparameter{#1}\c!numberconversion\!!es,
conversionset = "\structurecounterparameter{#1}\c!numberconversionset",
+ starter = \!!bs\structurecounterparameter{#1}\c!numberstarter\!!es,
stopper = \!!bs\structurecounterparameter{#1}\c!numberstopper\!!es,
segments = "\structurecounterparameter{#1}\c!numbersegments",
type = "#2",
@@ -249,7 +267,7 @@
)}%
\endgroup}
-\def\convertedsubstructurecounter
+\unexpanded\def\convertedsubstructurecounter
{\dotripleempty\doconvertedsubstructurecounter}
\def\doconvertedsubstructurecounter[#1][#2][#3]% #2 can be n or n:m
@@ -306,7 +324,7 @@
% funny, here, todo: these are the defaults
-\def\setupnumbering
+\unexpanded\def\setupnumbering
{\dodoubleempty\getparameters[\??nr]}
\setupnumbering
@@ -314,17 +332,6 @@
\c!blockway=,
\c!state=\v!start]
-\def\numberingparameter#1{\csname\??nr#1\endcsname}
-
-% \c!prefixconnector=.,
-% \c!stopper=,
-
-% \c!prefix=\v!no,
-% \c!prefixconnector=.,
-% \c!way=bychapter,
-% \c!prefixsegments=2:2,
-
-
%D Helpers:
% call:
@@ -347,10 +354,16 @@
\def\dostructurecountercomponent#1#2#3#4#5#6#7[#8][#9]%
{\begingroup
%
- #2[#8]%
+ #2[\s!haslevel=1,#8]%
\edef\hasstructurecountercaption{#3\s!hascaption}%
- \edef\hasstructurecountertitle{#3\s!hastitle}%
- \edef\hasstructurecounternumber{#3\s!hasnumber}%
+ \edef\hasstructurecountertitle {#3\s!hastitle}%
+ \edef\hasstructurecounternumber {#3\s!hasnumber}%
+ \edef\hasstructurecounterlevel {#3\s!haslevel}%
+ %
+ \edef\askedprefixsegments{#3\c!prefixsegments}%
+ \ifx\askedprefixsegments\v!auto
+ \edef\askedprefixsegments{\autostructureprefixsegments#3}%
+ \fi
%
\edef\currentname{#3\c!name}%
\ifx\currentname\empty
@@ -363,8 +376,8 @@
%
\doif{#3\c!title}\v!none{\setfalse\hasstructurecountercaption\setfalse\hasstructurecounternumber}% will become obsolete
%
- \ifx\hasstructurecounternumber\v!yes
- \incrementstructurecounter[\currentcounter]%
+ \ifx\hasstructurecounternumber\v!yes % here due to previous test but best in callers
+ \doincrementsubstructurecounter[\currentcounter][\hasstructurecounterlevel]%
\fi
%
\ifx\hasstructurecountercaption\v!yes
@@ -421,7 +434,8 @@
conversion = \!!bs#3\c!prefixconversion\!!es,
conversionset = "#3\c!prefixconversionset",
set = "#3\c!prefixset",
- segments = "#3\c!prefixsegments",
+ % segments = "#3\c!prefixsegments",
+ segments = "\askedprefixsegments",
connector = \!!bs#3\c!prefixconnector\!!es,
},
numberdata = {
@@ -429,6 +443,7 @@
separatorset = "#3\c!numberseparatorset",
conversion = \!!bs#3\c!numberconversion\!!es,
conversionset = "#3\c!numberconversionset",
+ starter = \!!bs#3\c!numberstarter\!!es,
stopper = \!!bs#3\c!numberstopper\!!es,
segments = "#3\c!numbersegments",
},
@@ -440,11 +455,15 @@
\xdef\laststructurecountersynchronize{\ctxlatelua{structure.lists.enhance(\laststructurecounternumber)}}%
\else
\glet\laststructurecounternumber \relax
- \glet\laststructurecounterattribute \relax
+ \glet\laststructurecounterattribute \attributeunsetvalue
\glet\laststructurecountersynchronize\relax
\fi
\endgroup}
+\let\laststructurecounternumber \relax
+\let\laststructurecounterattribute \relax
+\let\laststructurecountersynchronize\relax
+
\def\dostructurecountersetup#1#2% name \someparameter
{\setupstructurecounter
[#1]
@@ -456,6 +475,7 @@
\c!prefixseparatorset=#2\c!prefixseparatorset,
\c!prefixconversion=#2\c!prefixconversion,
\c!prefixconversionset=#2\c!prefixconversionset,
+ \c!prefixstarter=#2\c!prefixstarter,
\c!prefixstopper=#2\c!prefixstopper,
\c!prefixset=#2\c!prefixset,
\c!prefixsegments=#2\c!prefixsegments,
@@ -465,7 +485,27 @@
\c!numberseparatorset=#2\c!numberseparatorset,
\c!numberconversion=#2\c!numberconversion,
\c!numberconversionset=#2\c!numberconversionset,
+ \c!numberstarter=#2\c!numberstarter,
\c!numberstopper=#2\c!numberstopper,
\c!numbersegments=#2\c!numbersegments]}
+\def\presetstructurecountersetup#1#2% \setupcommand \someparameter
+ {#1%
+ [\c!way =#2\c!way,
+ \c!prefix =#2\c!prefix,
+ \c!prefixseparatorset =#2\c!prefixseparatorset,
+ \c!prefixconversion =#2\c!prefixconversion,
+ \c!prefixconversionset=#2\c!prefixconversionset,
+ \c!prefixstarter =#2\c!prefixstarter,
+ \c!prefixstopper =#2\c!prefixstopper,
+ \c!prefixsegments =#2\c!prefixsegments,
+ \c!prefixset =#2\c!prefixset,
+ \c!prefixconnector =#2\c!prefixconnector,
+ \c!numberseparatorset =#2\c!numberseparatorset,
+ \c!numberconversion =#2\c!numberconversion,
+ \c!numberconversionset=#2\c!numberconversionset,
+ \c!numberstarter =#2\c!numberstarter,
+ \c!numberstopper =#2\c!numberstopper,
+ \c!numbersegments =#2\c!numbersegments]}
+
\protect \endinput
diff --git a/Master/texmf-dist/tex/context/base/strc-pag.lua b/Master/texmf-dist/tex/context/base/strc-pag.lua
index b95f0842ac6..2610595872a 100644
--- a/Master/texmf-dist/tex/context/base/strc-pag.lua
+++ b/Master/texmf-dist/tex/context/base/strc-pag.lua
@@ -1,6 +1,6 @@
if not modules then modules = { } end modules ['strc-pag'] = {
version = 1.001,
- comment = "companion to strc-pag.tex",
+ comment = "companion to strc-pag.mkiv",
author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
copyright = "PRAGMA ADE / ConTeXt Development Team",
license = "see context related readme files"
@@ -11,6 +11,8 @@ local texcount, format = tex.count, string.format
local ctxcatcodes = tex.ctxcatcodes
local texsprint, texwrite = tex.sprint, tex.write
+local trace_pages = false trackers.register("structure.pages", function(v) trace_pages = v end)
+
structure.pages = structure.pages or { }
local helpers = structure.helpers or { }
@@ -35,51 +37,75 @@ end
job.register('jobpages.collected', jobpages.tobesaved, initializer)
-local specification = { }
+local specification = { } -- to be checked
-function pages.save(userspec)
+function pages.save(prefixdata,numberdata)
local realpage, userpage = texcount.realpageno, texcount.userpageno
- local data = {
- number = userpage,
- specification = helpers.simplify(userspec or specification),
- block = sections.currentblock(),
- }
- tobesaved[realpage] = data
- if not collected[realpage] then
- collected[realpage] = data
+ if realpage > 0 then
+ if trace_pages then
+ logs.report("pages","saving page %s.%s",realpage,userpage)
+ end
+ local data = {
+ number = userpage,
+ block = sections.currentblock(),
+ prefixdata = prefixdata and helpers.simplify(prefixdata),
+ numberdata = numberdata and helpers.simplify(numberdata),
+ }
+ tobesaved[realpage] = data
+ if not collected[realpage] then
+ collected[realpage] = data
+ end
+ elseif trace_pages then
+ logs.report("pages","not saving page %s.%s",realpage,userpage)
end
end
-function pages.pagenumber(localspec)
- local deltaspec
- if localspec then
- for k,v in next, localspec do
- if v ~= "" and v ~= specification[k] then
- if not deltaspec then deltaspec = { } end
- deltaspec[k] = v
+function structure.counters.specials.userpage()
+ local r = texcount.realpageno
+ if r > 0 then
+ local t = tobesaved[r]
+ if t then
+ t.number = texcount.userpageno
+ if trace_pages then
+ logs.report("pages","forcing pagenumber of realpage %s to %s",r,t.number)
end
end
end
- if deltaspec then
- return { realpage = texcount.realpageno, specification = deltaspec }
- else
- return { realpage = texcount.realpageno }
- end
end
---
+--~ function pages.pagenumber(localspec)
+--~ local deltaspec
+--~ if localspec then
+--~ for k,v in next, localspec do
+--~ if v ~= "" and v ~= specification[k] then
+--~ if not deltaspec then deltaspec = { } end
+--~ deltaspec[k] = v
+--~ end
+--~ end
+--~ end
+--~ if deltaspec then
+--~ return { realpage = texcount.realpageno, specification = deltaspec }
+--~ else
+--~ return { realpage = texcount.realpageno }
+--~ end
+--~ end
local function convertnumber(str,n)
return format("\\convertnumber{%s}{%s}",str or "numbers",n)
end
-function pages.number(realdata,pagespecification)
- local userpage, block = realdata.number, realdata.block or ""
- local conversionset = (pagespecification and pagespecification.conversionset) or realdata.conversionset or ""
- local conversion = (pagespecification and pagespecification.conversion ) or realdata.conversion or ""
- local stopper = (pagespecification and pagespecification.stopper ) or realdata.stopper or ""
+function pages.number(realdata,pagespec)
+ local userpage, block = realdata.number, realdata.block or "" -- sections.currentblock()
+ local numberspec = realdata.numberdata
+ local conversionset = (pagespec and pagespec.conversionset ~= "" and pagespec.conversionset) or (numberspec and numberspec.conversionset ~= "" and numberspec.conversionset) or ""
+ local conversion = (pagespec and pagespec.conversion ~= "" and pagespec.conversion ) or (numberspec and numberspec.conversion ~= "" and numberspec.conversion ) or ""
+ local starter = (pagespec and pagespec.starter ~= "" and pagespec.starter ) or (numberspec and numberspec.starter ~= "" and numberspec.starter ) or ""
+ local stopper = (pagespec and pagespec.stopper ~= "" and pagespec.stopper ) or (numberspec and numberspec.stopper ~= "" and numberspec.stopper ) or ""
+ if starter ~= "" then
+ processors.sprint(ctxcatcodes,starter)
+ end
if conversion ~= "" then
- texsprint(ctxcatcodes,format("\\convertnumber{%s}{%s}",conversion,number))
+ texsprint(ctxcatcodes,format("\\convertnumber{%s}{%s}",conversion,userpage))
else
if conversionset == "" then conversionset = "default" end
local theconversion = sets.get("structure:conversions",block,conversionset,index,"numbers")
@@ -119,11 +145,11 @@ function pages.analyse(entry,pagespecification)
return pagedata, false, "current spec blocks prefix"
end
-- stored preferences
- if entry.prefix == no then
- return pagedata, false, "entry blocks prefix"
- end
+--~ if entry.prefix == no then
+--~ return pagedata, false, "entry blocks prefix"
+--~ end
-- stored page state
- pagespecification = pagedata.specification
+ pagespecification = pagedata.prefixdata
if pagespecification and pagespecification.prefix == no then
return pagedata, false, "pagedata blocks prefix"
end
@@ -143,10 +169,9 @@ end
function helpers.prefixpage(data,prefixspec,pagespec)
if data then
local pagedata, prefixdata, e = pages.analyse(data,pagespec)
---~ tex.write(e)
if pagedata then
if prefixdata then
- sections.typesetnumber(prefixdata,"prefix",prefixspec or false,prefixdata or false,pagedata.specification or false)
+ sections.typesetnumber(prefixdata,"prefix",prefixspec or false,prefixdata or false,pagedata.prefixdata or false)
end
pages.number(pagedata,pagespec)
end
@@ -170,7 +195,7 @@ function helpers.analyse(entry,specification)
if not entry then
return false, false, "no entry"
end
- local no = variables.no
+ local yes, no = variables.yes, variables.no
-- section data
local references = entry.references
if not references then
@@ -199,9 +224,18 @@ end
function helpers.prefix(data,prefixspec)
if data then
- local _, prefixdata = helpers.analyse(data,prefixspec)
+ local _, prefixdata, status = helpers.analyse(data,prefixspec)
if prefixdata then
sections.typesetnumber(prefixdata,"prefix",prefixspec or false,data.prefixdata or false,prefixdata or false)
end
end
end
+
+function pages.is_odd(n)
+ n = n or texcount.realpageno
+ if texcount.pagenoshift % 2 == 0 then
+ return n % 2 == 0
+ else
+ return n % 2 ~= 0
+ end
+end
diff --git a/Master/texmf-dist/tex/context/base/strc-pag.mkiv b/Master/texmf-dist/tex/context/base/strc-pag.mkiv
index 276cf8b78b6..0f3d7ba3b07 100644
--- a/Master/texmf-dist/tex/context/base/strc-pag.mkiv
+++ b/Master/texmf-dist/tex/context/base/strc-pag.mkiv
@@ -23,10 +23,11 @@
% Allocation:
-\countdef\realpageno = 0 \realpageno = 1
-\countdef\userpageno = 1 \userpageno = 1
-\countdef\subpageno = 2 \subpageno = 0 % !!
-\countdef\arrangeno = 3 \arrangeno = 0 % !!
+\countdef\realpageno = 0 \realpageno = 1
+\countdef\userpageno = 1 \userpageno = 1
+\countdef\subpageno = 2 \subpageno = 0 % !!
+\countdef\arrangeno = 3 \arrangeno = 0 % !!
+\countdef\pagenoshift = 4 \pagenoshift = 0 % !!
\let\pageno\userpageno
@@ -55,17 +56,37 @@
% prefixset=mine,
% prefixseparatorset=mine]
-\definestructurecounter[\s!realpage][\c!prefix=\v!no,\c!start=1,\c!prefixsegments=] % \c!counter=realpage
-\definestructurecounter[\s!userpage][\c!prefix=\v!no,\c!start=1,\c!prefixsegments=] % \c!counter=userpage
-\definestructurecounter[\s!subpage] [\c!prefix=\v!no,\c!start=1,\c!prefixsegments=] % \c!counter=subpage
+% \definestructureconversionset[frontpart:pagenumber][][romannumerals]
+% \definestructureconversionset[bodypart:pagenumber] [][numbers]
+%
+% \setupuserpagenumber[way=byblock]
+% \setupuserpagenumber[way=bychapter]
+% \setupuserpagenumber[numberconversionset=pagenumber]
+%
+% \starttext
+% \startfrontmatter
+% \completecontent[criterium=all]
+% \chapter{tufte} \section{one} \input tufte \page \section{two} \input tufte \page
+% \chapter{tufte} \section{one} \input tufte \page \section{two} \input tufte \page
+% \stopfrontmatter
+% \startbodymatter
+% \chapter{knuth} \section{one} \input knuth \page \section{two} \input knuth \page \section{three} \input knuth \page
+% \chapter{knuth} \section{one} \input knuth \page \section{two} \input knuth \page \section{three} \input knuth \page
+% \stopbodymatter
+% \stoptext
+
+
+\definestructurecounter[\s!realpage][\c!prefix=\v!no,\c!start=1,\c!prefixsegments=,\s!counter=realpageno]
+\definestructurecounter[\s!userpage][\c!prefix=\v!no,\c!start=1,\c!prefixsegments=,\s!counter=userpageno]
+\definestructurecounter[\s!subpage] [\c!prefix=\v!no,\c!start=1,\c!prefixsegments=,\s!counter=subpageno]
\newtoks\everysetuprealpagenumber % todo: set state: none, start, stop, reset
\newtoks\everysetupuserpagenumber % todo: set state: none, start, stop, reset
\newtoks\everysetupsubpagenumber % todo: set state: none, start, stop, reset
-\def\setuprealpagenumber{\dosingleargument\dosetuprealpagenumber}
-\def\setupuserpagenumber{\dosingleargument\dosetupuserpagenumber}
-\def\setupsubpagenumber {\dosingleargument\dosetupsubpagenumber}
+\unexpanded\def\setuprealpagenumber{\dosingleargument\dosetuprealpagenumber}
+\unexpanded\def\setupuserpagenumber{\dosingleargument\dosetupuserpagenumber}
+\unexpanded\def\setupsubpagenumber {\dosingleargument\dosetupsubpagenumber}
\def\dosavepagenumberstate#1{\edef\oldpagenumberstate{\structurecounterparameter#1\c!state}}
@@ -86,17 +107,22 @@
\let\setuppagenumber\setupuserpagenumber
\let\resetpagenumber\resetuserpagenumber
-\def\savecurrentpagestate
- {\ctxlua{structure.pages.save {
+\def\savecurrentpagestate % \normalexpanded?
+ {\ctxlua{structure.pages.save({
prefix = "\structurecounterparameter\s!userpage\c!prefix",
separatorset = "\structurecounterparameter\s!userpage\c!prefixseparatorset",
conversion = "\structurecounterparameter\s!userpage\c!prefixconversion",
conversionset = "\structurecounterparameter\s!userpage\c!prefixconversionset",
set = "\structurecounterparameter\s!userpage\c!prefixset",
- stopper = \!!bs\structurecounterparameter\s!userpage\c!prefixstopper\!!es,
segments = "\structurecounterparameter\s!userpage\c!prefixsegments",
connector = \!!bs\structurecounterparameter\s!userpage\c!prefixconnector\!!es,
- }}}
+ },{
+ conversion = "\structurecounterparameter\s!userpage\c!numberconversion",
+ conversionset = "\structurecounterparameter\s!userpage\c!numberconversionset",
+ starter = \!!bs\structurecounterparameter\s!userpage\c!numberstarter\!!es,
+ stopper = \!!bs\structurecounterparameter\s!userpage\c!numberstopper\!!es,
+ }
+ )}}
\prependtoks
\savecurrentpagestate
@@ -216,8 +242,9 @@
% Hooks:
+\def\currentpage{\the\realpageno}% rather useless
+
\appendtoks
- \xdef\currentpage{\the\realpageno}%
\ifnum\realpageno>\lastpage \globallet\lastpage\lastrealpage \fi
\to \everyinitializepagecounters
@@ -232,10 +259,13 @@
\def\setnextrealpageno{\global\realpageno\incrementedstructurecounter[\s!realpage]\relax}
\def\setnextsubpageno {\global\subpageno \incrementedstructurecounter[\s!subpage ]\relax}
-% Page numbers:
+% Page numbers: (can move to lua)
-\def\dodecrementpagenumber{\global\userpageno\decrementedstructurecounter[\s!userpage]\relax}
-\def\doincrementpagenumber{\global\userpageno\incrementedstructurecounter[\s!userpage]\relax}
+\def\dodecrementpagenumber {\global\userpageno\decrementedstructurecounter[\s!userpage]\relax}
+\def\doincrementpagenumber {\global\userpageno\incrementedstructurecounter[\s!userpage]\relax}
+
+\def\decrementsubpagenumber{\global\subpageno \decrementedstructurecounter[\s!subpage ]\relax}
+\def\incrementsubpagenumber{\global\subpageno \incrementedstructurecounter[\s!subpage ]\relax}
\def\dosynchronizepagenumber{\global\let\@@pnstate\v!start}
@@ -251,8 +281,6 @@
\setvalue{\??pn+\v!empty}{\doincrementpagenumber\dosynchronizepagenumber}
\letvalue{\??pn+\v!keep }\dosynchronizepagenumber
-% todo: check if number set, and reset it after testing; also take care of \global\shiftedrealpagenotrue
-
% Control:
\def\getpagestatus % hierboven gebruiken
@@ -267,7 +295,7 @@
\newtoks\everysetuppagenumbering
-\def\setuppagenumbering
+\unexpanded\def\setuppagenumbering
{\dosingleempty\dosetuppagenumbering}
\def\dosetuppagenumbering[#1]%
@@ -293,6 +321,9 @@
\ifdefined \recalculatebackgrounds \recalculatebackgrounds \fi
\to \everysetuppagenumbering
+\def\flushfinallayoutpage
+ {\doifsomething\@@nmpage{\doifnot\@@nmpage\v!no{\page[\@@nmpage]}}}
+
% The numbered location handler is there because we need to be downward
% compatible. So, in fact there can be multiple handlers active at the
% same time, but only the current one does something.
@@ -395,13 +426,6 @@
{\chardef\overallpagenumberstate\zerocount}%
\to \everysetuppagenumbering
-% \appendtoks % todo: set state: none, start, stop, reset
-% % this makes starting at an even page possible
-% \ifnum\realpageno=1 \ifodd\pageno \else
-% \global\shiftedrealpagenotrue
-% \fi \fi
-% \to \everysetupuserpagenumber
-
% Done
% \c!way=\v!by\v!part
@@ -417,6 +441,7 @@
\c!width=, % in geval van \v!marginedge
\c!left=,
\c!right=,
+ \c!page=\v!last,
\c!textseparator=\tfskip,
\c!state=\v!start,
\c!command=,
@@ -434,6 +459,14 @@
\fi
\to \everysetupuserpagenumber % todo: set state: none, start, stop, reset
+\appendtoks
+ \edef\askedsubpagenumber{\structurecounterparameter\s!subpage\c!number}%
+ \ifx\askedsubpagenumber\empty \else
+ \normalexpanded{\noexpand\setupsubpagenumber[\c!start=\structurecounterparameter\s!subpage\c!number,\c!number=]}%
+ \subpageno\rawstructurecounter[\s!subpage]%
+ \fi
+\to \everysetupsubpagenumber % todo: set state: none, start, stop, reset
+
% \setuplayout[width=300pt,backspace=4cm]
% \setuppagenumbering [alternative=doublesided]
% \setupuserpagenumber[start=2]
@@ -442,10 +475,10 @@
\def\checkpagenumbershift
{\userpageno\rawstructurecounter[\s!userpage]\relax
\ifnum\realpageno=\plusone
- \ifodd\userpageno
- \else
- \global\shiftedrealpagenotrue
- \fi
+ \ifodd\userpageno
+ \else
+ \global\pagenoshift\plusone
+ \fi
\fi}
\appendtoks % todo: set state: none, start, stop, reset
diff --git a/Master/texmf-dist/tex/context/base/strc-prc.lua b/Master/texmf-dist/tex/context/base/strc-prc.lua
index 35e7000db1f..b1a1fb0a966 100644
--- a/Master/texmf-dist/tex/context/base/strc-prc.lua
+++ b/Master/texmf-dist/tex/context/base/strc-prc.lua
@@ -1,6 +1,6 @@
if not modules then modules = { } end modules ['strc-prc'] = {
version = 1.001,
- comment = "companion to strc-prc.tex",
+ comment = "companion to strc-prc.mkiv",
author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
copyright = "PRAGMA ADE / ConTeXt Development Team",
license = "see context related readme files"
diff --git a/Master/texmf-dist/tex/context/base/strc-prc.mkiv b/Master/texmf-dist/tex/context/base/strc-prc.mkiv
index a81cfddd15e..2955a396b5a 100644
--- a/Master/texmf-dist/tex/context/base/strc-prc.mkiv
+++ b/Master/texmf-dist/tex/context/base/strc-prc.mkiv
@@ -44,7 +44,7 @@
%D Valid keys for defining a processor are \type {style}, \type {color}, \type {left},
%D \type {right}, and \type {command} (the given command takes one argument).
-\def\defineprocessor
+\unexpanded\def\defineprocessor
{\dodoubleargument\dodefineprocessor}
\def\dodefineprocessor[#1][#2]%
diff --git a/Master/texmf-dist/tex/context/base/strc-ref.lua b/Master/texmf-dist/tex/context/base/strc-ref.lua
index eb4f74ce86f..475ab318a8a 100644
--- a/Master/texmf-dist/tex/context/base/strc-ref.lua
+++ b/Master/texmf-dist/tex/context/base/strc-ref.lua
@@ -1,13 +1,14 @@
if not modules then modules = { } end modules ['strc-ref'] = {
version = 1.001,
- comment = "companion to strc-ref.tex",
+ comment = "companion to strc-ref.mkiv",
author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
copyright = "PRAGMA ADE / ConTeXt Development Team",
license = "see context related readme files"
}
-local format, find, gmatch, match = string.format, string.find, string.gmatch, string.match
-local texsprint, texwrite, texcount = tex.sprint, tex.write, tex.count
+local format, find, gmatch, match, concat = string.format, string.find, string.gmatch, string.match, table.concat
+local lpegmatch = lpeg.match
+local texsprint, texwrite, texcount, texsetcount = tex.sprint, tex.write, tex.count, tex.setcount
local trace_referencing = false trackers.register("structure.referencing", function(v) trace_referencing = v end)
@@ -18,42 +19,84 @@ local constants = interfaces.constants
-- beware, this is a first step in the rewrite (just getting rid of
-- the tuo file); later all access and parsing will also move to lua
+-- the useddata and pagedata names might change
+-- todo: pack exported data
+
jobreferences = jobreferences or { }
jobreferences.tobesaved = jobreferences.tobesaved or { }
jobreferences.collected = jobreferences.collected or { }
-jobreferences.documents = jobreferences.documents or { }
jobreferences.defined = jobreferences.defined or { } -- indirect ones
jobreferences.derived = jobreferences.derived or { } -- taken from lists
jobreferences.specials = jobreferences.specials or { } -- system references
jobreferences.runners = jobreferences.runners or { }
jobreferences.internals = jobreferences.internals or { }
+jobreferences.exporters = jobreferences.exporters or { }
+jobreferences.imported = jobreferences.imported or { }
storage.register("jobreferences/defined", jobreferences.defined, "jobreferences.defined")
local tobesaved, collected = jobreferences.tobesaved, jobreferences.collected
-local defined, derived, specials, runners = jobreferences.defined, jobreferences.derived, jobreferences.specials, jobreferences.runners
+local defined, derived, specials = jobreferences.defined, jobreferences.derived, jobreferences.specials
+local exporters, runners = jobreferences.exporters, jobreferences.runners
local currentreference = nil
-jobreferences.initializers = jobreferences.initializers or { }
+local initializers = { }
+local finalizers = { }
function jobreferences.registerinitializer(func) -- we could use a token register instead
- jobreferences.initializers[#jobreferences.initializers+1] = func
+ initializers[#initializers+1] = func
+end
+function jobreferences.registerfinalizer(func) -- we could use a token register instead
+ finalizers[#finalizers+1] = func
end
local function initializer()
tobesaved, collected = jobreferences.tobesaved, jobreferences.collected
- for k,v in ipairs(jobreferences.initializers) do
- v(tobesaved,collected)
+ for i=1,#initializers do
+ initializers[i](tobesaved,collected)
+ end
+end
+local function finalizer()
+ tobesaved = jobreferences.tobesaved
+ for i=1,#finalizers do
+ finalizers[i](tobesaved)
end
end
if job then
- job.register('jobreferences.collected', jobreferences.tobesaved, initializer)
+ job.register('jobreferences.collected', jobreferences.tobesaved, initializer, finalizer)
end
-- todo: delay split till later as in destinations we split anyway
+local orders, lastorder = { }, 0
+
+local function setnextorder(kind,name)
+ lastorder = 0
+ if kind and name then
+ local ok = orders[kind]
+ if not ok then
+ ok = { }
+ orders[kind] = ok
+ end
+ lastorder = (ok[name] or 0) + 1
+ ok[name] = lastorder
+ end
+ texsetcount("global","locationorder",lastorder)
+end
+
+jobreferences.setnextorder = setnextorder
+
+function jobreferences.setnextinternal(kind,name)
+ setnextorder(kind,name) -- always incremented with internal
+ texsetcount("global","locationcount",texcount.locationcount + 1)
+end
+
+function jobreferences.currentorder(kind,name)
+ texwrite((orders[kind] and orders[kind][name]) or lastorder)
+end
+
function jobreferences.set(kind,prefix,tag,data)
for ref in gmatch(tag,"[^,]+") do
local p, r = match(ref,"^(%-):(.-)$")
@@ -74,9 +117,9 @@ function jobreferences.set(kind,prefix,tag,data)
end
end
-function jobreferences.setandgetattribute(kind,prefix,tag,data) -- maybe do internal automatically here
+function jobreferences.setandgetattribute(kind,prefix,tag,data,view) -- maybe do internal automatically here
jobreferences.set(kind,prefix,tag,data)
- texcount.lastdestinationattribute = jobreferences.setinternalreference(prefix,tag) or -0x7FFFFFFF
+ texcount.lastdestinationattribute = jobreferences.setinternalreference(prefix,tag,nil,view) or -0x7FFFFFFF
end
function jobreferences.enhance(prefix,tag,spec)
@@ -117,12 +160,12 @@ local special_reference = special * lparent * (operation * optional_arguments +
local scanner = (reset * outer_reference * (special_reference + inner_reference)^-1 * -1) / function() return result end
-function jobreferences.analyse(str)
- return scanner:match(str)
-end
+--~ function jobreferences.analyse(str) -- overloaded
+--~ return lpegmatch(scanner,str)
+--~ end
function jobreferences.split(str)
- return scanner:match(str or "")
+ return lpegmatch(scanner,str or "")
end
--~ print(table.serialize(jobreferences.analyse("")))
@@ -147,7 +190,7 @@ function jobreferences.resolvers.section(var)
local vi = structure.lists.collected[var.i[2]]
if vi then
var.i = vi
- var.r = (vi.references and vi.references.realpage) or 1
+ var.r = (vi.references and vi.references.realpage) or (vi.pagedata and vi.pagedata.realpage) or 1
else
var.i = nil
var.r = 1
@@ -163,7 +206,7 @@ function jobreferences.resolvers.reference(var)
local vi = var.i[2]
if vi then
var.i = vi
- var.r = (vi.references and vi.references.realpage) or 1
+ var.r = (vi.references and vi.references.realpage) or (vi.pagedata and vi.pagedata.realpage) or 1
else
var.i = nil
var.r = 1
@@ -180,10 +223,13 @@ local function register_from_lists(collected,derived)
local kind, realpage = m.kind, r.realpage
if kind and realpage then
local d = derived[prefix] if not d then d = { } derived[prefix] = d end
---~ d[reference] = { kind, i }
-for s in gmatch(reference,"[^,]+") do
- d[s] = { kind, i }
-end
+ local t = { kind, i }
+ for s in gmatch(reference,"%s*([^,]+)") do
+ if trace_referencing then
+ logs.report("referencing","list entry %s provides %s reference '%s' on realpage %s",i,kind,s,realpage)
+ end
+ d[s] = t -- share them
+ end
end
end
end
@@ -217,6 +263,10 @@ function jobreferences.urls.get(name,method,space) -- method: none, before, afte
end
end
+function commands.doifurldefinedelse(name)
+ commands.doifelse(urls[name])
+end
+
-- files
jobreferences.files = jobreferences.files or { }
@@ -237,6 +287,59 @@ function jobreferences.files.get(name,method,space) -- method: none, before, aft
end
end
+function commands.doiffiledefinedelse(name)
+ commands.doifelse(files[name])
+end
+
+-- helpers
+
+function jobreferences.checkedfile(whatever) -- return whatever if not resolved
+ if whatever then
+ local w = files[whatever]
+ if w then
+ return w[1]
+ else
+ return whatever
+ end
+ end
+end
+
+function jobreferences.checkedurl(whatever) -- return whatever if not resolved
+ if whatever then
+ local w = urls[whatever]
+ if w then
+ local u, f = w[1], w[2]
+ if f and f ~= "" then
+ return u .. "/" .. f
+ else
+ return u
+ end
+ else
+ return whatever
+ end
+ end
+end
+
+function jobreferences.checkedfileorurl(whatever,default) -- return nil, nil if not resolved
+ if whatever then
+ local w = files[whatever]
+ if w then
+ return w[1], nil
+ else
+ local w = urls[whatever]
+ if w then
+ local u, f = w[1], w[2]
+ if f and f ~= "" then
+ return nil, u .. "/" .. f
+ else
+ return nil, u
+ end
+ end
+ end
+ end
+ return default
+end
+
-- programs
jobreferences.programs = jobreferences.programs or { }
@@ -257,72 +360,213 @@ function jobreferences.programs.get(name)
end
end
+function jobreferences.checkedprogram(whatever) -- return whatever if not resolved
+ if whatever then
+ local w = programs[whatever]
+ if w then
+ return w[1]
+ else
+ return whatever
+ end
+ end
+end
+
-- shared by urls and files
function jobreferences.whatfrom(name)
texsprint(ctxcatcodes,(urls[name] and variables.url) or (files[name] and variables.file) or variables.unknown)
end
-function jobreferences.from(name,method,space)
+--~ function jobreferences.from(name)
+--~ local u = urls[name]
+--~ if u then
+--~ local url, file, description = u[1], u[2], u[3]
+--~ if description ~= "" then
+--~ texsprint(ctxcatcodes,format("\\dofromurldescription{%s}",description))
+--~ -- ok
+--~ elseif file and file ~= "" then
+--~ texsprint(ctxcatcodes,format("\\dofromurlliteral{%s}",url .. "/" .. file))
+--~ else
+--~ texsprint(ctxcatcodes,format("\\dofromurlliteral{%s}",url))
+--~ end
+--~ else
+--~ local f = files[name]
+--~ if f then
+--~ local description, file = f[1], f[2]
+--~ if description ~= "" then
+--~ texsprint(ctxcatcodes,format("\\dofromfiledescription{%s}",description))
+--~ else
+--~ texsprint(ctxcatcodes,format("\\dofromfileliteral{%s}",file))
+--~ end
+--~ end
+--~ end
+--~ end
+
+function jobreferences.from(name)
local u = urls[name]
if u then
local url, file, description = u[1], u[2], u[3]
if description ~= "" then
+ context.dofromurldescription(description)
-- ok
elseif file and file ~= "" then
- description = url .. "/" .. file
+ context.dofromurlliteral(url .. "/" .. file)
else
- description = url
+ context.dofromurlliteral(url)
end
- texsprint(ctxcatcodes,description)
else
local f = files[name]
if f then
local description, file = f[1], f[2]
if description ~= "" then
- --
+ context.dofromfiledescription(description)
else
- description = file
+ context.dofromfileliteral(file)
+ end
+ end
+ end
+end
+
+-- export
+
+exporters.references = exporters.references or { }
+exporters.lists = exporters.lists or { }
+
+function exporters.references.generic(data)
+ local useddata = {}
+ local entries, userdata = data.entries, data.userdata
+ if entries then
+ for k, v in next, entries do
+ useddata[k] = v
+ end
+ end
+ if userdata then
+ for k, v in next, userdata do
+ useddata[k] = v
+ end
+ end
+ return useddata
+end
+
+function exporters.lists.generic(data)
+ local useddata = { }
+ local titledata, numberdata = data.titledata, data.numberdata
+ if titledata then
+ useddata.title = titledata.title
+ end
+ if numberdata then
+ local numbers = numberdata.numbers
+ local t = { }
+ for i=1,#numbers do
+ local n = numbers[i]
+ if n ~= 0 then
+ t[#t+1] = n
+ end
+ end
+ useddata.number = concat(t,".")
+ end
+ return useddata
+end
+
+local function referencer(data)
+ local references = data.references
+ local realpage = references.realpage
+ local numberdata = jobpages.tobesaved[realpage]
+ local specification = numberdata.specification
+ return {
+ realpage = references.realpage,
+ number = numberdata.number,
+ conversion = specification.conversion,
+ -- prefix = only makes sense when bywhatever
+ }
+end
+
+function jobreferences.export(usedname)
+ local exported = { }
+ local e_references, e_lists = exporters.references, exporters.lists
+ local g_references, g_lists = e_references.generic, e_lists.generic
+ -- todo: pagenumbers
+ -- todo: some packing
+ for prefix, references in next, jobreferences.tobesaved do
+ local pe = exported[prefix] if not pe then pe = { } exported[prefix] = pe end
+ for key, data in next, references do
+ local metadata = data.metadata
+ local exporter = e_references[metadata.kind] or g_references
+ if exporter then
+ pe[key] = {
+ metadata = {
+ kind = metadata.kind,
+ catcodes = metadata.catcodes,
+ coding = metadata.coding, -- we can omit "tex"
+ },
+ useddata = exporter(data),
+ pagedata = referencer(data),
+ }
end
- texsprint(ctxcatcodes,description)
end
end
+ local pe = exported[""] if not pe then pe = { } exported[""] = pe end
+ for n, data in next, structure.lists.tobesaved do
+ local metadata = data.metadata
+ local exporter = e_lists[metadata.kind] or g_lists
+ if exporter then
+ local result = {
+ metadata = {
+ kind = metadata.kind,
+ catcodes = metadata.catcodes,
+ coding = metadata.coding, -- we can omit "tex"
+ },
+ useddata = exporter(data),
+ pagedata = referencer(data),
+ }
+ for key in gmatch(data.references.reference,"[^,]+") do
+ pe[key] = result
+ end
+ end
+ end
+ local e = {
+ references = exported,
+ version = 1.00,
+ }
+ io.savedata(file.replacesuffix(usedname or tex.jobname,"tue"),table.serialize(e,true))
end
-function jobreferences.load(name)
- if name then
- local jdn = jobreferences.documents[name]
+function jobreferences.import(usedname)
+ if usedname then
+ local imported = jobreferences.imported
+ local jdn = imported[usedname]
if not jdn then
- jdn = { }
- local fn = files[name]
- if fn then
- jdn.filename = fn[1]
- local data = io.loaddata(file.replacesuffix(fn[1],"tuc")) or ""
- if data ~= "" then
- -- quick and dirty, assume sane { } usage inside strings
- local lists = data:match("structure%.lists%.collected=({.-[\n\r]+})[\n\r]")
- if lists and lists ~= "" then
- lists = loadstring("return" .. lists)
- if lists then
- jdn.lists = lists()
- jdn.derived = { }
- register_from_lists(jdn.lists,jdn.derived)
- else
- commands.writestatus("error","invalid structure data in %s",filename)
- end
- end
- local references = data:match("jobreferences%.collected=({.-[\n\r]+})[\n\r]")
- if references and references ~= "" then
- references = loadstring("return" .. references)
- if references then
- jdn.references = references()
- else
- commands.writestatus("error","invalid reference data in %s",filename)
- end
- end
+ local filename = files[usedname]
+ if filename then -- only registered files
+ filename = filename[1]
+ else
+ filename = usedname
+ end
+ local data = io.loaddata(file.replacesuffix(filename,"tue")) or ""
+ if data == "" then
+ interfaces.showmessage("references",24,filename)
+ data = nil
+ else
+ data = loadstring(data)
+ if data then
+ data = data()
+ end
+ if data then
+ -- version check
+ end
+ if not data then
+ interfaces.showmessage("references",25,filename)
end
end
- jobreferences.documents[name] = jdn
+ if data then
+ interfaces.showmessage("references",26,filename)
+ jdn = data
+ jdn.filename = filename
+ else
+ jdn = { filename = filename, references = { }, version = 1.00 }
+ end
+ imported[usedname] = jdn
+ imported[filename] = jdn
end
return jdn
else
@@ -330,6 +574,10 @@ function jobreferences.load(name)
end
end
+function jobreferences.load(usedname)
+ -- gone
+end
+
function jobreferences.define(prefix,reference,list)
local d = defined[prefix] if not d then d = { } defined[prefix] = d end
d[reference] = { "defined", list }
@@ -366,7 +614,7 @@ local function resolve(prefix,reference,args,set) -- we start with prefix,refere
if d then
resolve(prefix,d[2],nil,set)
else
- local var = scanner:match(ri)
+ local var = lpegmatch(scanner,ri)
if var then
var.reference = ri
if not var.outer and var.inner then
@@ -438,6 +686,16 @@ function jobreferences.expandcurrent() -- todo: two booleans: o_has_tex& a_has_t
end
end
+--~ local uo = urls[outer]
+--~ if uo then
+--~ special, operation, argument = "url", uo[1], inner or uo[2] -- maybe more is needed
+--~ else
+--~ local fo = files[outer]
+--~ if fo then
+--~ special, operation, argument = "file", fo[1], inner -- maybe more is needed
+--~ end
+--~ end
+
local function identify(prefix,reference)
local set = resolve(prefix,reference)
local bug = false
@@ -455,6 +713,7 @@ local function identify(prefix,reference)
-- special()
var.kind = "special outer"
end
+ var.f = outer
elseif operation then
if arguments then
-- special(operation{argument,argument})
@@ -471,17 +730,37 @@ local function identify(prefix,reference)
var.error = "unknown special"
end
elseif outer then
- local e = jobreferences.load(outer)
+ local e = jobreferences.import(outer)
if e then
- local f = e.filename
- if f then
- if inner then
- local r = e.references
+ if inner then
+ local r = e.references
+ if r then
+ r = r[prefix]
+ if r then
+ r = r[inner]
+ if r then
+ if arguments then
+ -- outer::inner{argument}
+ var.kind = "outer with inner with arguments"
+ else
+ -- outer::inner
+ var.kind = "outer with inner"
+ end
+ var.i = { "reference", r }
+ jobreferences.resolvers.reference(var)
+ var.f = outer
+ var.e = true -- external
+ end
+ end
+ end
+ if not r then
+ r = e.derived
if r then
r = r[prefix]
if r then
r = r[inner]
if r then
+ -- outer::inner
if arguments then
-- outer::inner{argument}
var.kind = "outer with inner with arguments"
@@ -489,66 +768,76 @@ local function identify(prefix,reference)
-- outer::inner
var.kind = "outer with inner"
end
- var.i = { "reference", r }
- jobreferences.resolvers.reference(var)
- var.f = f
+ var.i = r
+ jobreferences.resolvers[r[1]](var)
+ var.f = outer
end
end
end
- if not r then
- r = e.derived
- if r then
- r = r[prefix]
- if r then
- r = r[inner]
- if r then
- -- outer::inner
- if arguments then
- -- outer::inner{argument}
- var.kind = "outer with inner with arguments"
- else
- -- outer::inner
- var.kind = "outer with inner"
- end
- var.i = r
- jobreferences.resolvers[r[1]](var)
- var.f = f
- end
- end
+ end
+ if not r then
+ var.error = "unknown outer"
+ end
+ elseif special then
+ local s = specials[special]
+ if s then
+ if operation then
+ if arguments then
+ -- outer::special(operation{argument,argument})
+ var.kind = "outer with special and operation and arguments"
+ else
+ -- outer::special(operation)
+ var.kind = "outer with special and operation"
end
+ else
+ -- outer::special()
+ var.kind = "outer with special"
end
- if not r then
- var.error = "unknown outer"
- end
- elseif special then
- local s = specials[special]
- if s then
- if operation then
- if arguments then
- -- outer::special(operation{argument,argument})
- var.kind = "outer with special and operation and arguments"
- else
- -- outer::special(operation)
- var.kind = "outer with special and operation"
- end
+ var.f = outer
+ else
+ var.error = "unknown outer with special"
+ end
+ else
+ -- outer::
+ var.kind = "outer"
+ var.f = outer
+ end
+ else
+ if inner then
+ if arguments then
+ -- outer::inner{argument}
+ var.kind = "outer with inner with arguments"
+ else
+ -- outer::inner
+ var.kind = "outer with inner"
+ end
+ var.i = { "reference", inner }
+ jobreferences.resolvers.reference(var)
+ var.f = outer
+ elseif special then
+ local s = specials[special]
+ if s then
+ if operation then
+ if arguments then
+ -- outer::special(operation{argument,argument})
+ var.kind = "outer with special and operation and arguments"
else
- -- outer::special()
- var.kind = "outer with special"
+ -- outer::special(operation)
+ var.kind = "outer with special and operation"
end
- var.f = f
else
- var.error = "unknown outer with special"
+ -- outer::special()
+ var.kind = "outer with special"
end
+ var.f = outer
else
- -- outer::
- var.kind = "outer"
- var.f = f
+ var.error = "unknown outer with special"
end
else
- var.error = "unknown outer"
+ -- outer::
+ var.kind = "outer"
+ var.f = outer
end
- else
- var.error = "unknown outer"
end
else
if arguments then
@@ -611,6 +900,7 @@ local function identify(prefix,reference)
set[i] = var
end
jobreferences.currentset = set
+-- print(bug,table.serialize(set))
return set, bug
end
@@ -651,6 +941,36 @@ function jobreferences.setinternalreference(prefix,tag,internal,view)
return destination
end
+function jobreferences.getinternalreference(n) -- n points into list
+ local l = structure.lists.collected[n]
+ texsprint(ctxcatcodes,(l and l.references.internal) or n)
+end
+
+
+--
+
+function jobreferences.get_current_metadata(tag)
+ local data = currentreference and currentreference.i
+ data = data and data.metadata and data.metadata[tag]
+ if data then
+ texsprint(ctxcatcodes,data)
+ end
+end
+local function current_metadata(tag)
+ local data = currentreference and currentreference.i
+ return data and data.metadata and data.metadata[tag]
+end
+jobreferences.current_metadata = current_metadata
+
+function jobreferences.get_current_prefixspec(default) -- todo: message
+ texsprint(ctxcatcodes,"\\getreferencestructureprefix{",
+ current_metadata("kind") or "?", "}{", current_metadata("name") or "?", "}{", default or "?", "}")
+end
+
+--~ function jobreferences.get_current_prefixspec(default) -- we can consider storing the data at the lua end
+--~ context.getreferencestructureprefix(current_metadata("kind"),current_metadata("name"),default)
+--~ end
+
--
jobreferences.filters = jobreferences.filters or { }
@@ -659,23 +979,26 @@ local filters = jobreferences.filters
local helpers = structure.helpers
local sections = structure.sections
-function jobreferences.filter(name) -- number page title ...
+function jobreferences.filter(name,...) -- number page title ...
local data = currentreference and currentreference.i
if data then
local kind = data.metadata and data.metadata.kind
if kind then
local filter = filters[kind] or filters.generic
- filter = filter and (filter[name] or filters.generic[name])
+ filter = filter and (filter[name] or filter.unknown or filters.generic[name] or filters.generic.unknown)
if filter then
- filter(data)
+ if trace_referencing then
+ logs.report("referencing","name '%s', kind '%s', using dedicated filter",name,kind)
+ end
+ filter(data,name,...)
elseif trace_referencing then
- logs.report("referencing","no (generic) filter.name for '%s'",name)
+ logs.report("referencing","name '%s', kind '%s', using generic filter",name,kind)
end
elseif trace_referencing then
- logs.report("referencing","no metadata.kind for '%s'",name)
+ logs.report("referencing","name '%s', unknown kind",name)
end
elseif trace_referencing then
- logs.report("referencing","no current reference for '%s'",name)
+ logs.report("referencing","name '%s', no reference",name)
end
end
@@ -683,7 +1006,7 @@ filters.generic = { }
function filters.generic.title(data)
if data then
- local titledata = data.titledata
+ local titledata = data.titledata or data.useddata
if titledata then
helpers.title(titledata.title or "?",data.metadata)
end
@@ -692,25 +1015,66 @@ end
function filters.generic.text(data)
if data then
- local entries = data.entries
+ local entries = data.entries or data.useddata
if entries then
helpers.title(entries.text or "?",data.metadata)
end
end
end
-function filters.generic.number(data) -- todo: spec and then no stopper
+function filters.generic.number(data,what,prefixspec) -- todo: spec and then no stopper
if data then
- helpers.prefix(data)
local numberdata = data.numberdata
if numberdata then
- sections.typesetnumber(numberdata,"number",numberdata or false)
+--~ print(table.serialize(prefixspec))
+ helpers.prefix(data,prefixspec)
+ sections.typesetnumber(numberdata,"number",numberdata)
+ else
+ local useddata = data.useddata
+ if useddata and useddsta.number then
+ tex.sprint(tex.ctxcatcodes,useddata.number)
+ end
end
end
end
+filters.generic.default = filters.generic.text
+
function filters.generic.page(data,prefixspec,pagespec)
- helpers.prefixpage(data,prefixspec,pagespec)
+ local pagedata = data.pagedata
+ if pagedata then -- imported
+ local number, conversion = pagedata.number, pagedata.conversion
+ if not number then
+ -- error
+ elseif conversion then
+ tex.sprint(tex.ctxcatcodes,format("\\convertnumber{%s}{%s}",conversion,number))
+ else
+ tex.sprint(tex.ctxcatcodes,number)
+ end
+ else
+ helpers.prefixpage(data,prefixspec,pagespec)
+ end
+end
+
+filters.user = { }
+
+function filters.user.unknown(data,name)
+ if data then
+ local userdata = data.userdata
+ local userkind = userdata and userdata.kind
+ if userkind then
+ local filter = filters[userkind] or filters.generic
+ filter = filter and (filter[name] or filter.unknown)
+ if filter then
+ filter(data,name)
+ return
+ end
+ end
+ local namedata = userdata and userdata[name]
+ if namedata then
+ texsprint(ctxcatcodes,namedata)
+ end
+ end
end
filters.text = { }
@@ -731,23 +1095,29 @@ end
filters.section = { }
-filters.section.title = filters.generic.title
-filters.section.page = filters.generic.page
-
-function filters.section.number(data) -- todo: spec and then no stopper
+function filters.section.number(data,what,prefixspec)
if data then
local numberdata = data.numberdata
if numberdata then
- sections.typesetnumber(numberdata,"number",numberdata or false)
+ sections.typesetnumber(numberdata,"number",prefixspec,numberdata)
+ else
+ local useddata = data.useddata
+ if useddata and useddata.number then
+ tex.sprint(tex.ctxcatcodes,useddata.number)
+ end
end
end
end
---~ filters.float = { }
+filters.section.title = filters.generic.title
+filters.section.page = filters.generic.page
+filters.section.default = filters.section.number
---~ filters.float.title = filters.generic.title
---~ filters.float.number = filters.generic.number
---~ filters.float.page = filters.generic.page
+filters.note = { default = filters.generic.number }
+filters.formula = { default = filters.generic.number }
+filters.float = { default = filters.generic.number }
+filters.description = { default = filters.generic.number }
+filters.item = { default = filters.generic.number }
structure.references = structure.references or { }
structure.helpers = structure.helpers or { }
@@ -810,7 +1180,6 @@ function jobreferences.analyse(actions)
return actions
end
-
function jobreferences.realpage() -- special case, we always want result
local cs = jobreferences.analyse()
texwrite(cs.realpage or 0)
@@ -863,7 +1232,7 @@ end
specials.i = specials.internal
-function specials.page(var,actions)
+function specials.page(var,actions) -- is this ok?
local p = pages[var.operation]
if type(p) == "function" then
p = p()
diff --git a/Master/texmf-dist/tex/context/base/strc-ref.mkii b/Master/texmf-dist/tex/context/base/strc-ref.mkii
index d06319d0744..1df5d09d826 100644
--- a/Master/texmf-dist/tex/context/base/strc-ref.mkii
+++ b/Master/texmf-dist/tex/context/base/strc-ref.mkii
@@ -2296,6 +2296,9 @@
\doexternaldocument{#1}{#2}{\url[#3]}%
\egroup}
+\def\doifurldefinedelse #1{\doifdefinedelse{\v!file:::#1}}
+\def\doiffiledefinedelse#1{\doifdefinedelse{\v!file:::#1}}
+
%D \macros
%D {url,setupurl}
%D
diff --git a/Master/texmf-dist/tex/context/base/strc-ref.mkiv b/Master/texmf-dist/tex/context/base/strc-ref.mkiv
index 5db3d0013f9..8290a1b1380 100644
--- a/Master/texmf-dist/tex/context/base/strc-ref.mkiv
+++ b/Master/texmf-dist/tex/context/base/strc-ref.mkiv
@@ -13,14 +13,17 @@
% todo: (1) configure references, (2) rendering => with presets
%
-% \starttext
-% \definestructureconversionset[default][Character,number,Romannumerals,Character][number]
-% \definestructureseparatorset [default][.,.,--][.]
-% \setupstructurehead[subsection][sectionstopper=),sectionsegments=4:4]
-
-% \setupreferencing[sectionsegments=3:4]
-% \section {One} \subsection[sec:test]{Two} See \in[sec:test]
-% \stoptext
+% \definestructureconversionset[default][Character,number,Romannumerals,Character][number]
+% \definestructureseparatorset [default][.,.,--][.]
+% \setupstructurehead[subsection][sectionstopper=),sectionsegments=4:4]
+% \setupreferencestructureprefix[default][prefixsegments=2:4]
+% \setupreferencestructureprefix[figure][default][prefixsegments=3:4]
+% \chapter {One}
+% \section {One}
+% \subsection[sec:test]{Two}
+% See \in[sec:test] and \in[fig:xx] and \in[fig:yy]
+% \placefigure[here][fig:xx]{}{}
+% \placefigure[here][fig:yy]{}{}
\writestatus{loading}{ConTeXt Structure Macros / Cross Referencing}
@@ -46,6 +49,7 @@
\let\setexecutecommandcheck\gobbletwoarguments
\def\s!full{full}
+\def\s!user{user}
\def\s!text{text}
\def\s!page{page}
@@ -89,15 +93,17 @@
%D \reference[here]{some text}
%D \stoptyping
-\def\textreference {\dosingleargument\dotextreference}
-\def\pagereference {\dosingleargument\dopagereference}
-\def\reference {\dosingleargument\doreference }
+\unexpanded\def\textreference {\dosingleargument\dotextreference}
+\unexpanded\def\pagereference {\dosingleargument\dopagereference}
+\unexpanded\def\reference {\dosingleargument\doreference }
+\unexpanded\def\setreference {\dodoubleargument\dosetreference }
%D These are implemented in a low level form as:
-\def\dotextreference[#1]{\dosetreference\s!text{#1}}
-\def\dopagereference[#1]{\dosetreference\s!page{#1}{}}
-\def\doreference [#1]{\dosetreference\s!full{#1}}
+\def\dotextreference [#1]{\dodosetreference\s!text{#1}{}}
+\def\dopagereference [#1]{\dodosetreference\s!page{#1}{}{}}
+\def\doreference [#1]{\dodosetreference\s!full{#1}{}}
+\def\dosetreference[#1][#2]{\dodosetreference\s!user{#1}{#2}{}}
%D Actually there is not much difference between a text and a
%D full reference, but it's the concept that counts. The low
@@ -110,8 +116,9 @@
\def\dofinishtextreference#1#2{\normalexpanded{\ctxlatelua{jobreferences.enhance("#1","#2",{})}}}
\let\dofinishpagereference\dofinishfullreference
+\let\dofinishuserreference\dofinishfullreference
-\def\dosetreference#1#2#3% kind labels text -> todo: userdata
+\def\dodosetreference#1#2#3#4% kind labels userdata text -> todo: userdata
{\ifreferencing
\edef\currentreferencekind{#1}%
\edef\currentreferencelabels{#2}%
@@ -119,14 +126,14 @@
\ifx\currentreferencelabels\empty \else
\ifx\currentreferenceexpansion\s!xml
\xmlstartraw
- \xdef\currentreferencetext{#3}%
+ \xdef\currentreferencedata{#4}% data, no text else conflict
\xmlstopraw
\globallet\currentreferencecoding\s!xml
\else
\ifx\currentreferenceexpansion\v!yes
- \xdef\currentreferencetext{#3}%
+ \xdef\currentreferencedata{#4}%
\else
- \xdef\currentreferencetext{\detokenize{#3}}%
+ \xdef\currentreferencedata{\detokenize{#4}}%
\fi
\globallet\currentreferencecoding\s!tex
\fi
@@ -144,13 +151,16 @@
catcodes = \the\catcodetable,
xmlroot = \ifx\currentreferencecoding\s!xml "\xmldocument" \else nil \fi, % only useful when text
},
- entries = {
- text = \!!bs\currentreferencetext\!!es
- }
- })
+ \ifx\currentreferencedata\empty\else
+ entries = {
+ text = \!!bs\currentreferencedata\!!es
+ },
+ \fi
+ userdata = structure.helpers.touserdata(\!!bs\detokenize{#3}\!!es)
+ },"\@@iafocus")
}%
\xdef\currentdestinationattribute{\number\lastdestinationattribute}%
- \begingroup\dosetattribute{destination}\currentdestinationattribute\hbox{}\endgroup % todo
+ \begingroup\attribute\destinationattribute\currentdestinationattribute\hbox{}\endgroup % todo
\fi
\fi}
@@ -357,7 +367,7 @@
%D We can trace references by setting the next switch to
%D true.
-\def\definereference
+\unexpanded\def\definereference
{\dodoubleempty\dodefinereference}
\def\dodefinereference[#1][#2]%
@@ -504,18 +514,27 @@
%D \gotosomeinternal {tag}{identifier}{pagenumber}{text}
%D \stoptyping
+%D We could do this in lua ...
+
\newif \iflocation
\newcount\locationcount
+\newcount\locationorder
\newbox \locationbox
-\def\nextinternalreference
- {\the\locationcount}
+\def\nextinternalreference {\the\locationcount}
+\def\nextinternalorderreference{\the\locationorder}
\def\setnextinternalreference
{\global\advance\locationcount\plusone}
+\def\setnextinternalreferences#1#2% plural
+ {\ctxlua{jobreferences.setnextinternal("#1","#2")}}
+
+\def\getinternalorderreference#1#2%
+ {\ctxlua{jobreferences.currentorder("#1","#2")}}
+
\def\thisissomeinternal#1#2% tag reference (only for old time sake)
- {\begingroup\dosetattribute{destination}{\ctxlua{jobreferences.mark("#1:#2")}}\hbox{}\endgroup}
+ {\begingroup\attribute\destinationattribute\ctxlua{jobreferences.mark("#1:#2")}\hbox{}\endgroup}
\def\gotosomeinternal#1#2#3#4%
{\ifinternalnamedreferences
@@ -570,7 +589,7 @@
\chardef\autocrossfilereferences=0
-\def\setupreferencing
+\unexpanded\def\setupreferencing
{\dosingleargument\dosetupreferencing}
\def\dosetupreferencing[#1]%
@@ -602,10 +621,25 @@
{\settrue \autoglobalfilereferences}
{\setfalse\autoglobalfilereferences}}
+% \appendtoks\ctxlua{jobreferences.export("whatever")}\to\everystoptext
+% \starttext
+% \chapter[test]{test}
+% test \in{IN}[more] and \in{IN}[test] or \at{AT}[more] and \at{AT}[test]\par
+% test \in{IN}[whatever::more] and \in{IN}[whatever::test] or \at{AT}[whatever::more] and \at{AT}[whatever::test] \page
+% reference\reference[more]{oeps}
+% \stoptext
+
+\def\exportreferences
+ {\doif\@@rfexport\v!yes{\ctxlua{jobreferences.export()}}}
+
+\appendtoks
+ \exportreferences
+\to \everygoodbye
+
\def\incrementreferenceprefix{+}
\def\decrementreferenceprefix{-}
-\def\setupreferenceprefix[#1]%
+\unexpanded\def\setupreferenceprefix[#1]%
{\edef\@@rfprefix{#1}%
\ifx\@@rfprefix\empty
\let\referenceprefix\empty
@@ -731,8 +765,11 @@
\def\currentreferencepage {\ctxlua{jobreferences.filter("page")}}
\def\currentreferencetitle {\ctxlua{jobreferences.filter("title")}}
\def\currentreferencetext {\ctxlua{jobreferences.filter("text")}}
+\def\currentreferencedefault {\ctxlua{jobreferences.filter("default")}}
\def\currentreferencerealpage{\ctxlua{jobreferences.realpage()}}
+\def\getreferenceentry#1{\ctxlua{jobreferences.filter("#1")}} % user entry
+
\unexpanded\def\dospecialabout[#1]%
{\dontleavehmode
\begingroup
@@ -762,35 +799,62 @@
% Yet untested:
\unexpanded\def\somewhere#1#2#3[#4]% #3 gobbles space around #2 % todo
- {\goto{\ifcase\referencepagestate#1/#2\or#2\or#1\or#2\fi}[#4]}
+ {\doifreferencefoundelse{#4}% kind of inefficient as \goto also analyses
+ {\goto{\analyzecurrentreference\ifcase\referencepagestate\relax#1/#2\or#2\or#1\or#2\fi}[#4]}
+ {[#1/#2]}}
\unexpanded\def\atpage[#1]% todo
- {\goto{\ifcase\referencepagestate
- \labeltexts\v!page\dummyreference
- \or
- \labeltexts\v!atpage\currentreferencepage
- \or
- \labeltexts\v!atpage\currentreferencepage
- \or
- \labeltexts\v!atpage\currentreferencepage
- \or
- \labeltext\v!hereafter
- \or
- \labeltext\v!hencefore
- \fi}[#1]}
+ {\doifreferencefoundelse{#1}% kind of inefficient as \goto also analyses
+ {\goto{\analyzecurrentreference\ifcase\referencepagestate
+ \labeltexts\v!page\dummyreference
+ \or
+ \labeltexts\v!atpage\currentreferencepage
+ \or
+ \labeltexts\v!atpage\currentreferencepage
+ \or
+ \labeltexts\v!atpage\currentreferencepage
+ \or
+ \labeltext\v!hereafter
+ \or
+ \labeltext\v!hencefore
+ \fi}[#1]}
+ {[?]}}
+
+\unexpanded\def\referencesymbol
+ {\hbox{\strut\high
+ {\setupsymbolset[\@@iasymbolset]%
+ \symbol
+ [\ifcase\referencepagestate
+ \v!somewhere
+ \or % same
+ \v!nowhere
+ \or % before
+ \v!previous
+ \or % after
+ \v!next%
+ \fi]}}}
+
+% \def\dosymbolreference#1#2[#3]%
+% {\removeunwantedspaces
+% \goto{\setupsymbolset[\@@iasymbolset]\high{\symbol
+% [\ifcase\referencepagestate
+% \v!somewhere
+% \or % same
+% \v!nowhere
+% \or % before
+% \v!previous
+% \or % after
+% \v!next%
+% \fi]}}[#3]}
\def\dosymbolreference#1#2[#3]%
{\removeunwantedspaces
- \goto{\setupsymbolset[\@@iasymbolset]\high{\symbol
- [\ifcase\referencepagestate
- \v!somewhere
- \or % same
- \v!nowhere
- \or % before
- \v!previous
- \or % after
- \v!next%
- \fi]}}[#3]}
+ \goto{\referencesymbol}[#3]}
+
+\def\symbolreference[#1]%
+ {\removeunwantedspaces
+ \goto{\referencesymbol}[#1]}
+
%D The other alternatives just conform their names: only the
%D label, only the text, or the label and the text.
@@ -841,7 +905,7 @@
% todo: inherit; probably not yet mkiv okay
-\def\definereferenceformat
+\unexpanded\def\definereferenceformat
{\dodoubleargument\dodefinereferenceformat}
\def\dodefinereferenceformat[#1][#2]%
@@ -853,7 +917,7 @@
\c!label=, % can be {left}{right}
\c!command=\in,
#2]%
- \unexpanded\setvalue{#1}%
+ \setuvalue{#1}%
{\dontleavehmode\doexecutereferenceformat{#1}}%
\fi}
@@ -906,8 +970,8 @@
% [\inxx{a}{b}[one]]
% \stoptext
-\unexpanded\def\dospecialin{\let\currentreferencecontent\currentreferencenumber\doinatreference}
-\unexpanded\def\dospecialat{\let\currentreferencecontent\currentreferencepage \doinatreference}
+\unexpanded\def\dospecialin{\let\currentreferencecontent\currentreferencedefault\doinatreference}
+\unexpanded\def\dospecialat{\let\currentreferencecontent\currentreferencepage \doinatreference}
\newtoks\leftreferencetoks
\newtoks\rightreferencetoks
@@ -988,8 +1052,8 @@
\def\extrareferencearguments{\luaconditional\highlighthyperlinks,\luaconditional\gotonewwindow,"\currentviewerlayer"}
-\unexpanded\def\directgoto {\ifconditional\uselocationstrut\expandafter\dodirectgoto\else\expandafter\directgotohtdp\fi}
-\unexpanded\def\goto {\ifconditional\uselocationstrut\expandafter\dogoto \else\expandafter\gotohtdp \fi}
+\unexpanded\def\directgoto{\ifconditional\uselocationstrut\expandafter\dodirectgoto\else\expandafter\directgotohtdp\fi}
+\unexpanded\def\goto {\ifconditional\uselocationstrut\expandafter\dogoto \else\expandafter\gotohtdp \fi}
% The unbox trick is needed in order to permit \par inside a reference. Otherwise
% the reference attribute migrates to the outer boxes.
@@ -1169,6 +1233,9 @@
\def\dousefile[#1][#2][#3]%
{\ctxlua{jobreferences.files.define("#1",\!!bs\detokenize{#2}\!!es,\!!bs\detokenize{#3}\!!es)}}
+\def\doifurldefinedelse #1{\ctxlua{commands.doifurldefinedelse ("#1")}}
+\def\doiffiledefinedelse#1{\ctxlua{commands.doiffiledefinedelse("#1")}}
+
%D \macros
%D {url,setupurl}
%D
@@ -1186,7 +1253,7 @@
%D
%D \showsetup{setupurl}
-\def\setupurl
+\unexpanded\def\setupurl
{\dodoubleargument\getparameters[\??ur]}
\unexpanded\def\url[#1]%
@@ -1194,16 +1261,18 @@
\begingroup
\dosetfontattribute\??ur\c!style
\dosetcolorattribute\??ur\c!color
- \ctxlua{jobreferences.urls.get("#1","\@@uralternative","\@@urspace")}%
+ \hyphenatedurl{\ctxlua{jobreferences.urls.get("#1","\@@uralternative","\@@urspace")}}%
\endgroup}
+% # fails
+
%D This macro is hooked into a support macro, and thereby
%D \URL's break ok, according to the setting of a switch,
%D
%D \startbuffer
%D \useURL
%D [test]
-%D [sentence_sentence%sentence#sentence~sentence/sentence//sentence:sentence.sentence]
+%D [sentence_sentence~sentence//sentence:sentence.sentence]
%D \stopbuffer
%D
%D \typebuffer
@@ -1235,11 +1304,25 @@
%D
%D \showsetup{from}
-\def\dospecialfrom
+%D We keep this for compatibility reasons, hence the hackery.
+
+\unexpanded\def\dospecialfrom
{\dosingleempty\dodospecialfrom}
\def\dodospecialfrom[#1]%
- {\dontleavehmode\goto{\ctxlua{jobreferences.from("#1")}}[url(#1)]}
+ {\dontleavehmode
+ \goto{\ctxlua{jobreferences.from("#1")}}[fileorurl(#1)]}
+
+\def\dofromurldescription#1%
+ {#1}
+
+\def\dofromurlliteral#1%
+ {\dosetfontattribute \??ur\c!style
+ \dosetcolorattribute\??ur\c!color
+ \hyphenatedurl{#1}}
+
+\let\dofromfiledescription\dofromurldescription
+\let\dofromfileliteral \dofromurlliteral % maybe some day setupfile that inherits from url
%D We also support:
%D
@@ -1266,10 +1349,10 @@
% also lua, like urls and files
-\def\setupprograms
+\unexpanded\def\setupprograms
{\dodoubleargument\getparameters[\??pr]}
-\def\defineprogram
+\unexpanded\def\defineprogram
{\dotripleargument\dodefineprogram}
\def\dodefineprogram[#1][#2][#3]%
@@ -1316,7 +1399,7 @@
%D
%D \showsetup{gotopage}
-\def\definepage
+\unexpanded\def\definepage
{\dodoubleargument\dodefinepage}
\def\dodefinepage[#1][#2]%
@@ -1400,7 +1483,7 @@
%D
%D \showsetup{setupbuttons}
-\def\setupbuttons
+\unexpanded\def\setupbuttons
{\dodoubleargument\getparameters[\??bt]}
\definecomplexorsimpleempty\button
@@ -1572,7 +1655,7 @@
\setbox\scratchbox\hbox{#1}% to be solved some day
\ifdim\wd\scratchbox>\zeropoint
\unhbox\scratchbox
- \@@rfseparator
+ \doifsomething\@@rfseparator{\removeunwantedspaces\@@rfseparator}% remove is new
\else
\unhbox\scratchbox
\fi
@@ -1596,7 +1679,8 @@
\c!right=\egroup,
\c!global=\v!no,
\c!expansion=\v!no,
- \c!separator=\nonbreakablespace]
+ \c!separator=\nonbreakablespace,
+ \c!export=\v!no]
\setupurl
[\c!alternative=\v!both,
@@ -1678,6 +1762,72 @@
%D We cannot set up buttons (not yet, this one calls a menu macro):
+%D New (and experimental):
+
+% \starttext
+% \chapter{test}
+% \placefigure[here][xx:1]{}{\framed{one}} \placefigure[here][xx:2]{}{\framed{three}}
+% \placetable [here][xx:3]{}{\framed{two}} \placetable [here][xx:4]{}{\framed{four}}
+% \start
+% \in{fig}[xx:1] and \in{fig}[xx:2] \in{tab}[xx:3] and \in{tab}[xx:4]
+% \stop \blank \start
+% \setupreferencestructureprefix[default][prefix=no]
+% \in{fig}[xx:1] and \in{fig}[xx:2] \in{tab}[xx:3] and \in{tab}[xx:4]
+% \stop \blank \start
+% \setupreferencestructureprefix[float][default][prefix=no]
+% \in{fig}[xx:1] and \in{fig}[xx:2] \in{tab}[xx:3] and \in{tab}[xx:4]
+% \stop \blank \start
+% \setupreferencestructureprefix[figure][default][prefix=no]
+% \in{fig}[xx:1] and \in{fig}[xx:2] \in{tab}[xx:3] and \in{tab}[xx:4]
+% \stop \blank
+% \stoptext
+
+\unexpanded\def\setupreferencestructureprefix
+ {\dotripleargument\dosetupreferencestructureprefix}
+
+\def\getreferencestructureprefix#1#2#3%
+ {{
+ prefix = "\referencestructureprefixparameter{#1}{#2}{#3}\c!prefix",
+ separatorset = "\referencestructureprefixparameter{#1}{#2}{#3}\c!prefixseparatorset",
+ conversion = "\referencestructureprefixparameter{#1}{#2}{#3}\c!prefixconversion",
+ conversionset = "\referencestructureprefixparameter{#1}{#2}{#3}\c!prefixconversionset",
+ set = "\referencestructureprefixparameter{#1}{#2}{#3}\c!prefixset",
+ segments = "\referencestructureprefixparameter{#1}{#2}{#3}\c!prefixsegments",
+ connector = \!!bs\referencestructureprefixparameter{#1}{#2}{#3}\c!prefixconnector\!!es,
+ }}
+
+\unexpanded\def\setupreferencestructureprefix
+ {\dotripleempty\dosetupreferencestructureprefix}
+
+\def\dosetupreferencestructureprefix[#1][#2][#3]%
+ {\ifthirdargument
+ \getparameters[\??rf:\c!prefix:#1:#2][#3]%
+ \else\ifsecondargument
+ \getparameters[\??rf:\c!prefix::#1][#2]%
+ \fi\fi}
+
+\def\referencestructureprefixparameter#1#2#3#4% kind name category parameter
+ {\ifcsname\??rf:\c!prefix:#2:#3#4\endcsname
+ \csname\??rf:\c!prefix:#2:#3#4\endcsname
+ \else\ifcsname\??rf:\c!prefix:#1:#3#4\endcsname
+ \csname\??rf:\c!prefix:#1:#3#4\endcsname
+ \else\ifcsname\??rf:\c!prefix::#3#4\endcsname
+ \csname\??rf:\c!prefix::#3#4\endcsname
+ \fi\fi\fi}
+
+% \def\getreferencestructureprefixspec#1% we can save one call by moving this to the lua end
+% {\getreferencestructureprefix
+% {\ctxlua{jobreferences.get_current_metadata("kind")}}
+% {\ctxlua{jobreferences.get_current_metadata("name")}}
+% {#1}}
+% \def\currentreferencedefault
+% {\ctxlua{jobreferences.filter("default",\getreferencestructureprefixspec\v!default)}}
+%
+% this is shortcut for:
+
+\def\currentreferencedefault
+ {\ctxlua{jobreferences.filter("default",\ctxlua{jobreferences.get_current_prefixspec("\v!default")})}}
+
\protect \endinput
% tricky:
diff --git a/Master/texmf-dist/tex/context/base/strc-reg.lua b/Master/texmf-dist/tex/context/base/strc-reg.lua
index b406ea1b057..c5b2c93741c 100644
--- a/Master/texmf-dist/tex/context/base/strc-reg.lua
+++ b/Master/texmf-dist/tex/context/base/strc-reg.lua
@@ -1,6 +1,6 @@
if not modules then modules = { } end modules ['strc-reg'] = {
version = 1.001,
- comment = "companion to strc-reg.tex",
+ comment = "companion to strc-reg.mkiv",
author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
copyright = "PRAGMA ADE / ConTeXt Development Team",
license = "see context related readme files"
@@ -8,25 +8,38 @@ if not modules then modules = { } end modules ['strc-reg'] = {
local next, type = next, type
local texwrite, texsprint, texcount = tex.write, tex.sprint, tex.count
-local format, gmatch = string.format, string.gmatch
+local format, gmatch, concat = string.format, string.gmatch, table.concat
local utfchar = utf.char
+local lpegmatch = lpeg.match
+
+local trace_registers = false trackers.register("structure.registers", function(v) trace_registers = v end)
local ctxcatcodes = tex.ctxcatcodes
local variables = interfaces.variables
-local helpers = structure.helpers
-local sections = structure.sections
-local documents = structure.documents
-local pages = structure.pages
+local helpers = structure.helpers
+local sections = structure.sections
+local documents = structure.documents
+local pages = structure.pages
+local processors = structure.processors
+
+local mappings = sorters.mappings
+local entries = sorters.entries
+local replacements = sorters.replacements
+
+local processor_split = processors.split
+
+local matching_till_depth, number_at_depth = sections.matching_till_depth, sections.number_at_depth
--- to be shared, but tested first
+-- some day we will share registers and lists (although there are some conceptual
+-- differences in the application of keywords)
local function filter_collected(names,criterium,number,collected,prevmode)
if not criterium or criterium == "" then criterium = variables.all end
local data = documents.data
local numbers, depth = data.numbers, data.depth
- local hash, result, all = { }, { }, not names or names == "" or names == variables.all
+ local hash, result, all, detail = { }, { }, not names or names == "" or names == variables.all, nil
if not all then
for s in gmatch(names,"[^, ]+") do
hash[s] = true
@@ -117,38 +130,51 @@ local function filter_collected(names,criterium,number,collected,prevmode)
return filter_collected(names,variables.current,number,collected,prevmode)
end
else -- sectionname, number
+ -- beware, this works ok for registers
local depth = sections.getlevel(criterium)
- local number = tonumber(number) or 0
- for i=1,#collected do
- local v = collected[i]
- local r = v.references
- if r then
- local sectionnumber = jobsections.collected[r.section]
- if sectionnumber then
- local metadata = v.metadata
- local cnumbers = sectionnumber.numbers
- if cnumbers then
- if (all or hash[metadata.name or false]) and #cnumbers >= depth and (number == 0 or cnumbers[depth] == number) then
- result[#result+1] = v
+ local number = tonumber(number) or number_at_depth(depth) or 0
+ if trace_registers then
+ detail = format("depth: %s, number: %s, numbers: %s, startset: %s",depth,number,concat(sections.numbers(),".",1,depth),#collected)
+ end
+ if number > 0 then
+ for i=1,#collected do
+ local v = collected[i]
+ local r = v.references
+ if r then
+ local sectionnumber = jobsections.collected[r.section]
+ if sectionnumber then
+ local metadata = v.metadata
+ local cnumbers = sectionnumber.numbers
+ if cnumbers then
+ if (all or hash[metadata.name or false]) and #cnumbers >= depth and matching_till_depth(depth,cnumbers) then
+ result[#result+1] = v
+ end
end
end
end
end
end
end
+ if trace_registers then
+ if detail then
+ logs.report("registers","criterium: %s, %s, found: %s",criterium,detail,#result)
+ else
+ logs.report("registers","criterium: %s, found: %s",criterium,#result)
+ end
+ end
return result
end
-structure.filter_collected = filter_collected
+jobregisters = jobregisters or { }
+jobregisters.collected = jobregisters.collected or { }
+jobregisters.tobesaved = jobregisters.tobesaved or { }
+
+jobregisters.filter_collected = filter_collected
-- we follow a different strategy than by lists, where we have a global
-- result table; we might do that here as well but since sorting code is
-- older we delay that decision
-jobregisters = jobregisters or { }
-jobregisters.collected = jobregisters.collected or { }
-jobregisters.tobesaved = jobregisters.tobesaved or { }
-
local tobesaved, collected = jobregisters.tobesaved, jobregisters.collected
local function initializer()
@@ -189,23 +215,45 @@ end
jobregisters.define = allocate
-local entrysplitter = lpeg.Ct(lpeg.splitat('+'))
+local entrysplitter = lpeg.Ct(lpeg.splitat('+')) -- & obsolete in mkiv
local tagged = { }
local function preprocessentries(rawdata)
local entries = rawdata.entries
if entries then
- local et = entrysplitter:match(entries[1]) -- alse &
- local kt = entrysplitter:match(entries[2]) -- alse &
+ local e, k = entries[1] or "", entries[2] or ""
+ local et, kt, entryproc, pageproc
+ if type(e) == "table" then
+ et = e
+ else
+ entryproc, e = processor_split(e)
+ et = lpegmatch(entrysplitter,e)
+ end
+ if type(k) == "table" then
+ kt = e
+ else
+ pageproc, k = processor_split(k)
+ kt = lpegmatch(entrysplitter,k)
+ end
entries = { }
for k=1,#et do
entries[k] = { et[k] or "", kt[k] or "" }
end
+ for k=#et,1,-1 do
+ if entries[k][1] ~= "" then
+ break
+ else
+ entries[k] = nil
+ end
+ end
rawdata.list = entries
+ if pageproc or entryproc then
+ rawdata.processors = { entryproc, pageproc }
+ end
rawdata.entries = nil
else
- rawdata.list = { "", "" } -- br
+ rawdata.list = { { "", "" } } -- br
end
end
@@ -239,12 +287,12 @@ function jobregisters.extend(name,tag,rawdata) -- maybe do lastsection internall
rr.lastsection = structure.sections.currentid()
if rawdata then
preprocessentries(rawdata)
- for k,v in pairs(rawdata) do
+ for k,v in next, rawdata do
if not r[k] then
r[k] = v
else
local rk = r[k]
- for kk,vv in pairs(v) do
+ for kk,vv in next, v do
if vv ~= "" then
rk[kk] = vv
end
@@ -258,43 +306,27 @@ end
-- sorting and rendering
+local compare = sorters.comparers.basic
+
function jobregisters.compare(a,b)
- local result = 0
- local compare = sorters.comparers.basic
- local ea, eb = a.split, b.split
- local na, nb = #ea, #eb
- local max = na
- if nb < max then max = nb end
- for i=1,max do
- if result == 0 then
- result = compare(ea[i],eb[i])
- else
- return result
- end
- end
+ local result = compare(a,b)
if result ~= 0 then
return result
- elseif na > nb then
- return 1
- elseif nb > na then
- return -1
elseif a.metadata.kind == 'entry' then -- e/f/t
local page_a, page_b = a.references.realpage, b.references.realpage
if not page_a or not page_b then
---~ print(table.serialize(a),table.serialize(b))
return 0
elseif page_a < page_b then
return -1
elseif page_a > page_b then
return 1
end
- else
- return 0
end
+ return 0
end
function jobregisters.filter(data,options)
- data.result = structure.filter_collected(nil,options.criterium,options.number,data.entries,true)
+ data.result = jobregisters.filter_collected(nil,options.criterium,options.number,data.entries,true)
end
function jobregisters.prepare(data)
@@ -327,7 +359,9 @@ end
function jobregisters.unique(data,options)
local result, prev, equal = { }, nil, table.are_equal
- for _,v in ipairs(data.result) do
+ local dataresult = data.result
+ for k=1,#dataresult do
+ local v = dataresult[k]
if not prev then
result[#result+1], prev = v, v
else
@@ -356,17 +390,21 @@ end
function jobregisters.finalize(data,options)
local result = data.result
data.metadata.nofsorted = #result
- local split = { }
+ local split, lasttag, s, d = { }, nil, nil, nil
-- maps character to index (order)
for k=1,#result do
local v = result[k]
- local entry, tag = sorters.firstofsplit(v.split)
- local s = split[tag] -- keeps track of change
- if not s then
- s = { tag = tag, data = { } }
- split[tag] = s
+ local entry, tag = sorters.firstofsplit(v)
+ if tag ~= lasttag then
+ if trace_registers then
+ logs.report("registers","splitting at %s",tag)
+ end
+ d = { }
+ s = { tag = tag, data = d }
+ split[#split+1] = s
+ lasttag = tag
end
- s.data[#s.data+1] = v
+ d[#d+1] = v
end
data.result = split
end
@@ -374,7 +412,8 @@ end
function jobregisters.analysed(class,options)
local data = collected[class]
if data and data.entries then
- sorters.language = options.language or sorters.defaultlanguage
+ options = options or { }
+ sorters.setlanguage(options.language)
jobregisters.filter(data,options) -- filter entries into results (criteria)
jobregisters.prepare(data,options) -- adds split table parallel to list table
jobregisters.sort(data,options) -- sorts results
@@ -389,6 +428,16 @@ end
-- todo take conversion from index
+function jobregisters.userdata(index,name)
+ local data = jobreferences.internals[tonumber(index)]
+ data = data and data.userdata and data.userdata[name]
+ if data then
+ texsprint(ctxcatcodes,data)
+ end
+end
+
+-- proc can be wrapped
+
function jobregisters.flush(data,options,prefixspec,pagespec)
local equal = table.are_equal
texsprint(ctxcatcodes,"\\startregisteroutput")
@@ -399,25 +448,51 @@ function jobregisters.flush(data,options,prefixspec,pagespec)
local function pagenumber(entry)
local er = entry.references
texsprint(ctxcatcodes,format("\\registeronepage{%s}{%s}{",er.internal or 0,er.realpage or 0)) -- internal realpage content
- helpers.prefixpage(entry,prefixspec,pagespec)
+ local proc = entry.processors and entry.processors[2]
+ if proc then
+ texsprint(ctxcatcodes,"\\applyprocessor{",proc,"}{")
+ helpers.prefixpage(entry,prefixspec,pagespec)
+ texsprint(ctxcatcodes,"}")
+ else
+ helpers.prefixpage(entry,prefixspec,pagespec)
+ end
texsprint(ctxcatcodes,"}")
end
local function pagerange(f_entry,t_entry,is_last)
local er = f_entry.references
texsprint(ctxcatcodes,format("\\registerpagerange{%s}{%s}{",er.internal or 0,er.realpage or 0))
- helpers.prefixpage(f_entry,prefixspec,pagespec)
+ local proc = f_entry.processors and f_entry.processors[2]
+ if proc then
+ texsprint(ctxcatcodes,"\\applyprocessor{",proc,"}{")
+ helpers.prefixpage(f_entry,prefixspec,pagespec)
+ texsprint(ctxcatcodes,"}")
+ else
+ helpers.prefixpage(f_entry,prefixspec,pagespec)
+ end
local er = t_entry.references
- texsprint(ctxcatcodes,format("}{%s}{%s}{",er.internal or 0,er.realpage or 0))
+ texsprint(ctxcatcodes,format("}{%s}{%s}{",er.internal or 0,er.lastrealpage or er.realpage or 0))
if is_last then
- helpers.prefixlastpage(t_entry,prefixspec,pagespec) -- swaps page and realpage keys
+ if proc then
+ texsprint(ctxcatcodes,"\\applyprocessor{",proc,"}{")
+ helpers.prefixlastpage(t_entry,prefixspec,pagespec) -- swaps page and realpage keys
+ texsprint(ctxcatcodes,"}")
+ else
+ helpers.prefixlastpage(t_entry,prefixspec,pagespec) -- swaps page and realpage keys
+ end
else
- helpers.prefixpage(t_entry,prefixspec,pagespec)
+ if proc then
+ texsprint(ctxcatcodes,"\\applyprocessor{",proc,"}{")
+ helpers.prefixpage(t_entry,prefixspec,pagespec)
+ texsprint(ctxcatcodes,"}")
+ else
+ helpers.prefixpage(t_entry,prefixspec,pagespec)
+ end
end
texsprint(ctxcatcodes,"}")
end
-- ranges need checking !
- for k, letter in ipairs(table.sortedkeys(result)) do
- local sublist = result[letter]
+ for i=1,#result do
+ local sublist = result[i]
local done = { false, false, false, false }
local data = sublist.data
local d, n = 0, 0
@@ -426,6 +501,7 @@ function jobregisters.flush(data,options,prefixspec,pagespec)
d = d + 1
local entry = data[d]
local e = { false, false, false, false }
+ local metadata = entry.metadata
for i=1,4 do -- max 4
if entry.list[i] then
e[i] = entry.list[i][1]
@@ -445,7 +521,27 @@ function jobregisters.flush(data,options,prefixspec,pagespec)
texsprint(ctxcatcodes,format("\\startregisterentries{%s}",n))
end
end
- texsprint(ctxcatcodes,format("\\registerentry{%s}",e[i]))
+ if metadata then
+ texsprint(ctxcatcodes,"\\registerentry{")
+ local proc = entry.processors and entry.processors[1]
+ if proc then
+ texsprint(ctxcatcodes,"\\applyprocessor{",proc,"}{")
+ helpers.title(e[i],metadata)
+ texsprint(ctxcatcodes,"}")
+ else
+ helpers.title(e[i],metadata)
+ end
+ texsprint(ctxcatcodes,"}")
+ else
+ local proc = entry.processors and entry.processors[1]
+ if proc then
+ texsprint(ctxcatcodes,"\\applyprocessor{",proc,"}{")
+ texsprint(ctxcatcodes,format("\\registerentry{%s}",e[i]))
+ texsprint(ctxcatcodes,"}")
+ else
+ texsprint(ctxcatcodes,format("\\registerentry{%s}",e[i]))
+ end
+ end
else
done[i] = false
end
@@ -454,6 +550,7 @@ function jobregisters.flush(data,options,prefixspec,pagespec)
local kind = entry.metadata.kind
if kind == 'entry' then
texsprint(ctxcatcodes,"\\startregisterpages")
+ --~ collapse_ranges = true
if collapse_singles or collapse_ranges then
-- we collapse ranges and keep existing ranges as they are
-- so we get prebuilt as well as built ranges
@@ -604,7 +701,14 @@ function jobregisters.flush(data,options,prefixspec,pagespec)
elseif kind == 'see' then
-- maybe some day more words
texsprint(ctxcatcodes,"\\startregisterseewords")
- texsprint(ctxcatcodes,format("\\registeroneword{0}{0}{%s}",entry.seeword.text)) -- todo: internal
+ local proc = entry.processors and entry.processors[1]
+ if proc then
+ texsprint(ctxcatcodes,"\\applyprocessor{",proc,"}{")
+ texsprint(ctxcatcodes,format("\\registeroneword{0}{0}{%s}",entry.seeword.text)) -- todo: internal
+ texsprint(ctxcatcodes,"}")
+ else
+ texsprint(ctxcatcodes,format("\\registeroneword{0}{0}{%s}",entry.seeword.text)) -- todo: internal
+ end
texsprint(ctxcatcodes,"\\stopregisterseewords")
end
end
@@ -629,4 +733,3 @@ function jobregisters.process(class,...)
jobregisters.flush(collected[class],...)
end
end
-
diff --git a/Master/texmf-dist/tex/context/base/strc-reg.mkii b/Master/texmf-dist/tex/context/base/strc-reg.mkii
index 8d824bd9dcd..b088246d327 100644
--- a/Master/texmf-dist/tex/context/base/strc-reg.mkii
+++ b/Master/texmf-dist/tex/context/base/strc-reg.mkii
@@ -98,7 +98,8 @@
\doifelse{\registerparameter\c!ownnumber}\v!yes
\donetrue\donefalse
\expanded{\writeutility{r % spaces are essential
- {\ifcase\registerpagestatus\space\or e\or f\or t\fi} {\currentregister} %
+ \ifcase\registerpagestatus\space\or e\or f\or t\fi\space
+ {\currentregister} %
{\nextinternalreference} %
{\asciiregisterentryA} %
{\asciiregisterentryB} %
diff --git a/Master/texmf-dist/tex/context/base/strc-reg.mkiv b/Master/texmf-dist/tex/context/base/strc-reg.mkiv
index 2ec448d97fe..fcc37549c44 100644
--- a/Master/texmf-dist/tex/context/base/strc-reg.mkiv
+++ b/Master/texmf-dist/tex/context/base/strc-reg.mkiv
@@ -57,14 +57,14 @@
\def\detokenizedregisterparameter#1{\detokenize\expandafter\expandafter\expandafter{\csname\??id#1\endcsname}} % always root
-\def\registerparameter #1{\csname\doregisterparameter{\??id\currentregister}#1\endcsname}
+\def\registerparameter #1{\csname\doregisterparameter{\??id\currentregister}{#1}\endcsname}
\def\registerparameterhash#1{\doregisterparameterhash {\??id\currentregister}#1}
-\def\doregisterparameter #1#2{\ifcsname#1#2\endcsname#1#2\else\expandafter\doregisterparentparameter \csname#1\s!parent\endcsname#2\fi}
-\def\doregisterparameterhash#1#2{\ifcsname#1#2\endcsname #1\else\expandafter\doregisterparentparameterhash\csname#1\s!parent\endcsname#2\fi}
+\def\doregisterparameter #1#2{\ifcsname#1#2\endcsname#1#2\else\expandafter\doregisterparentparameter \csname#1\s!parent\endcsname{#2}\fi}
+\def\doregisterparameterhash#1#2{\ifcsname#1#2\endcsname #1\else\expandafter\doregisterparentparameterhash\csname#1\s!parent\endcsname{#2}\fi}
-\def\doregisterparentparameter #1#2{\ifx#1\relax\s!empty\else\doregisterparameter #1#2\fi}
-\def\doregisterparentparameterhash#1#2{\ifx#1\relax \else\doregisterparameterhash#1#2\fi}
+\def\doregisterparentparameter #1#2{\ifx#1\relax\s!empty\else\doregisterparameter #1{#2}\fi}
+\def\doregisterparentparameterhash#1#2{\ifx#1\relax \else\doregisterparameterhash#1{#2}\fi}
\def\dosetregisterattributes#1#2% style color
{\edef\fontattributehash {\registerparameterhash#1}%
@@ -76,7 +76,7 @@
\newtoks\everysetupregister
-\def\setupregisters
+\unexpanded\def\setupregisters
{\dotripleempty\dosetupregisters}
\def\dosetupregisters[#1][#2][#3]%
@@ -116,6 +116,7 @@
\c!unknownreference=\v!empty,
\c!prefix=\v!both,
%\c!expansion=,
+%\c!xmlsetup=,
\c!pageprefixconnector=\endash,
\c!pagesegments=2:2,
\c!file=\jobname,
@@ -124,16 +125,16 @@
%D Definition:
-\def\defineregister
+\unexpanded\def\defineregister
{\dodoubleargument\dodefineregister}
\def\dodefineregister[#1][#2]% #2?
{\setupregister[#1][\s!parent=\??id]%
\ctxlua{jobregisters.define('#1')}%
\presetheadtext[#1=\Word{#1}]%
- \unexpanded\setvalue{#1}{\dodoubleempty\doregister[#1]}%
- \unexpanded\setvalue{\e!see#1}{\dodoubleempty\doseeregister[#1]}%
-% \unexpanded\setvalue{\e!coupled#1}{\dolinkedregister{#1}}%
+ \setuvalue{#1}{\dodoubleempty\doregister[#1]}%
+ \setuvalue{\e!see#1}{\dodoubleempty\doseeregister[#1]}%
+% \setuvalue{\e!coupled#1}{\dolinkedregister{#1}}%
\setvalue{\e!place#1}{\placeregister[#1]}%
\setvalue{\e!complete#1}{\completeregister[#1]}%
\setvalue{\e!setup#1\e!endsetup}[##1]{\getparameters[\??id#1][##1]}}
@@ -144,32 +145,85 @@
% tzt variant met n entries, parameters en userdata (altnum)
-\def\doregisterstructurepageregister#1#2#3% register data userdata
+\getparameters
+ [\??id]
+ [\c!label=,
+ \c!entries=,
+ \c!entries:1=,\c!entries:2=,\c!entries:3=,
+ \c!keys:1=,\c!keys:2=,\c!keys:3=,
+ \c!alternative=]
+
+\def\doregisterstructurepageregister
+ {\iftrialtypesetting
+ \expandafter\gobblethreearguments
+ \else
+ \expandafter\dodoregisterstructurepageregister
+ \fi}
+
+\def\dodoregisterstructurepageregister#1#2#3% register data userdata
{\begingroup
\edef\currentregister{#1}%
- \getparameters[\??id][\c!entries=,\c!label=,\c!keys=,\c!alternative=,#2]%
+ %getparameters[\??id][\c!entries=,\c!label=,\c!keys=,\c!alternative=,#2]%
+ \getparameters[\??id][#2]%
\edef\currentregisterlabel {\registerparameter\c!label}%
\edef\currentregisterexpansion{\registerparameter\c!expansion}%
\edef\currentregisterownnumber{\registerparameter\c!ownnumber}%
\xdef\currentregisterkeys {\registerparameter\c!keys}%
- \ifx\currentregisterexpansion\s!xml
- \xmlstartraw
- \xdef\currentregisterentries{\registerparameter\c!entries}%
- \xmlstopraw
- \globallet\currentregistercoding\s!xml
+ \xdef\currentregisterentries {\registerparameter\c!entries}%
+ \xdef\currentregisterxmlsetup {\registerparameter\c!xmlsetup}%
+ \ifx\currentregisterentries\empty
+ \ifx\currentregisterexpansion\s!xml
+ \xmlstartraw
+ \xdef\currentregisterentriesa{\registerparameter{\c!entries:1}}%
+ \xdef\currentregisterentriesb{\registerparameter{\c!entries:2}}%
+ \xdef\currentregisterentriesc{\registerparameter{\c!entries:3}}%
+ \xmlstopraw
+ \globallet\currentregistercoding\s!xml
+ \else
+ \ifx\currentregisterexpansion\v!yes
+ \xdef\currentregisterentriesa{\registerparameter{\c!entries:1}}%
+ \xdef\currentregisterentriesb{\registerparameter{\c!entries:2}}%
+ \xdef\currentregisterentriesc{\registerparameter{\c!entries:3}}%
+ \else
+ \xdef\currentregisterentriesa{\detokenizedregisterparameter{\c!entries:1}}%
+ \xdef\currentregisterentriesb{\detokenizedregisterparameter{\c!entries:2}}%
+ \xdef\currentregisterentriesc{\detokenizedregisterparameter{\c!entries:3}}%
+ \fi
+ \globallet\currentregistercoding\s!tex
+ \fi
\else
- \ifx\currentregisterexpansion\v!yes
- \xdef\currentregisterentries{\registerparameter\c!entries}%
+ \ifx\currentregisterexpansion\s!xml
+ \xmlstartraw
+ \xdef\currentregisterentries{\registerparameter\c!entries}%
+ \xmlstopraw
+ \globallet\currentregistercoding\s!xml
\else
- \xdef\currentregisterentries{\detokenizedregisterparameter\c!entries}%
+ \ifx\currentregisterexpansion\v!yes
+ \xdef\currentregisterentries{\registerparameter\c!entries}%
+ \else
+ \xdef\currentregisterentries{\detokenizedregisterparameter\c!entries}%
+ \fi
+ \globallet\currentregistercoding\s!tex
+ \fi
+ \fi
+ \ifx\currentregisterkeys\empty
+ \ifx\currentregistercoding\s!xml
+ \xmlstartraw
+ \xdef\currentregisterkeysa{\registerparameter{\c!keys:1}}%
+ \xdef\currentregisterkeysb{\registerparameter{\c!keys:2}}%
+ \xdef\currentregisterkeysc{\registerparameter{\c!keys:3}}%
+ \xmlstopraw
+ \else
+ \xdef\currentregisterkeysa{\registerparameter{\c!keys:1}}%
+ \xdef\currentregisterkeysb{\registerparameter{\c!keys:2}}%
+ \xdef\currentregisterkeysc{\registerparameter{\c!keys:3}}%
\fi
- \globallet\currentregistercoding\s!tex
\fi
\setnextinternalreference
% we could consider storing register entries in a list which we
% could then sort
\xdef\currentregisternumber{\ctxlua{
- jobregisters.store {
+ jobregisters.store { % 'own' should not be in metadata
metadata = {
kind = "entry",
name = "\currentregister",
@@ -179,18 +233,31 @@
\ifx\currentregisterownnumber\v!yes
own = "\registerparameter\c!alternative", % can be used instead of pagenumber
\fi
+ xmlroot = \ifx\currentreferencecoding\s!xml "\xmldocument" \else nil \fi, % only useful when text
+\ifx\currentregisterxmlsetup\empty \else
+ xmlsetup = "\currentregisterxmlsetup",
+\fi
},
references = {
internal = \nextinternalreference,
- section = structure.sections.currentid(), % hm, why then not also lastsection the same way
- label = "\currentregisterlabel",
+ section = structure.sections.currentid(), % hm, why then not also lastsection the same way
+ label = "\currentregisterlabel",
},
- \ifx\currentregisterentries\empty \else
+% \ifx\currentregisterentries\empty \else
entries = {
% we need a special one for xml, this is just a single one
- \!!bs\currentregisterentries\!!es, \!!bs\currentregisterkeys\!!es
+ \ifx\currentregisterentries\empty
+ { \!!bs\currentregisterentriesa\!!es, \!!bs\currentregisterentriesb\!!es, \!!bs\currentregisterentriesc\!!es },
+ \else
+ \!!bs\currentregisterentries\!!es,
+ \fi
+ \ifx\currentregisterkeys\empty
+ { \!!bs\currentregisterkeysa\!!es, \!!bs\currentregisterkeysb\!!es, \!!bs\currentregisterkeysc\!!es },
+ \else
+ \!!bs\currentregisterkeys\!!es,
+ \fi
},
- \fi
+% \fi
userdata = structure.helpers.touserdata(\!!bs\detokenize{#3}\!!es)
}
} }%
@@ -201,7 +268,7 @@
\xdef\currentregistersynchronize{\ctxlatelua{jobregisters.enhance("\currentregister",\currentregisternumber)}}%
\fi
\currentregistersynchronize % here?
- \attribute\destinationattribute\lastdestinationattribute \strut % todo
+ \attribute\destinationattribute\lastdestinationattribute \forcecolorhack % no \strut as it will be removed during cleanup
\endgroup}
\def\doregister[#1][#2]%
@@ -211,8 +278,8 @@
\def\donoregister #1#2#3{\doflushatpar{\doregisterstructurepageregister{#1}{\c!keys={#2},\c!entries={#3}}{}}}
\def\dodoregister#1#2#3#4{\doflushatpar{\doregisterstructurepageregister{#1}{\c!keys={#2},\c!alternative=#3,\c!entries={#4}}{}}}
-\def\startregister{\doquadrupleempty\dostartregister}
-\def\stopregister {\dodoubleargument\dostopregister}
+\unexpanded\def\startregister{\doquadrupleempty\dostartregister}
+\unexpanded\def\stopregister {\dodoubleargument\dostopregister}
% a synonym, so that we can nest with overlap without syntax check problems
@@ -234,6 +301,8 @@
\def\setregisterentry {\dotripleempty\dosetregisterentry}
\def\finishregisterentry{\dotripleempty\dofinishregisterentry}
+% not yet document, not sure if this will stay:
+
\def\dosetregisterentry [#1][#2][#3]{\doflushatpar{\doregisterstructurepageregister{#1}{#2}{#3}}}
\def\dofinishregisterentry[#1][#2][#3]{\dofinishregisterstructurepageregister{#1}{#2}{#3}}
@@ -287,6 +356,41 @@
\fi
\endgroup}
+% The following variants are meant for (for instance xml). There is some
+% overlap with previously defined macros.
+%
+% \starttext
+% \setstructurepageregister[index][entries=alpha]a
+% \setstructurepageregister[index][entries=gamma]g
+% \setstructurepageregister[index][entries=beta]b
+% \setstructurepageregister[index][entries:1=alpha,keys:1=z]a
+% \setstructurepageregister[index][entries:1=gamma,keys:1=x]g
+% \setstructurepageregister[index][entries:1=beta, keys:1=y]b
+% \index{alpha}a
+% \index{gamma}g
+% \index{beta}b
+% \placeregister[index][n=1]
+% \stoptext
+
+\def\setstructurepageregister{\dotripleempty\dosetstructurepageregister}
+
+\def\dosetstructurepageregister[#1][#2][#3]% [register][settings][userdata]
+ {\doflushatpar{\doregisterstructurepageregister{#1}{#2}{#3}}}
+
+\unexpanded\def\startstructurepageregister{\doquadrupleempty\dostartstructurepageregister}
+\unexpanded\def\stopstructurepageregister {\dodoubleargument\dostopstructurepageregister}
+
+\let\openstructurepageregisterrange \startstructurepageregister
+\let\closestructurepageregisterrange\stopstructurepageregister
+
+\def\dostartstructurepageregister[#1][#2][#3][#4]% [register][tag][settings][userdata]
+ {\doflushatpar{\doregisterstructurepageregister{#1}{\c!label=#2,#3}{#4}}}
+
+\def\dostopstructurepageregister[#1][#2]%
+ {\normalexpanded{\ctxlatelua{jobregisters.extend("#1","#2")}}}
+
+% So far.
+
\def\doseeregister[#1][#2]#3#4%
{\doflushatpar{\doprocessseeregister{#1}{#2}{#3}{#4}}}
@@ -312,7 +416,7 @@
\fi
\setnextinternalreference
% we could consider storing register entries in list
- \ctxlua{ jobregisters.store {
+ \edef\temp{\ctxlua{ jobregisters.store {
metadata = {
kind = "see",
name = "\currentregister",
@@ -331,7 +435,7 @@
text = "\currentregisterseeword"
},
}
- }%
+ }}%
\endgroup}
%D Rendering:
@@ -342,7 +446,14 @@
{\dodoubleempty\dodetermineregistercharacteristics}
\def\dodetermineregistercharacteristics[#1][#2]%
- {\edef\utilityregisterlength{\ctxlua{jobregisters.analyse('\currentregister')}}%
+ {\begingroup
+ \edef\currentregister{#1}%
+ \setupregister[\currentregister][#2]%
+ \normalexpanded{\endgroup\noexpand\xdef\noexpand\utilityregisterlength{\ctxlua{jobregisters.analyse('\currentregister',{
+ language = "\registerparameter\s!language",
+ compress = "\registerparameter\c!compress",
+ criterium = "\registerparameter\c!criterium",
+ })}}}% brrr
\ifcase\utilityregisterlength\relax
\resetsystemmode\v!register
\else
@@ -355,7 +466,7 @@
\dontcomplain
\to \everyplaceregister
-\def\placeregister
+\unexpanded\def\placeregister
{\dodoubleempty\doplaceregister}
\def\doplaceregister[#1][#2]%
@@ -380,6 +491,7 @@
% prefix = "\registerparameter\c!pageprefix",
separatorset = "\registerparameter\c!pageprefixseparatorset",
conversionset = "\registerparameter\c!pageprefixconversionset",
+ starter = \!!bs\registerparameter\c!pageprefixstarter\!!es,
stopper = \!!bs\registerparameter\c!pageprefixstopper\!!es,
set = "\registerparameter\c!pageprefixset",
segments = "\registerparameter\c!pageprefixsegments",
@@ -389,6 +501,7 @@
prefix = "\registerparameter\c!pageprefix",
separatorset = "\registerparameter\c!pageseparatorset",
conversionset = "\registerparameter\c!pageconversionset",
+ starter = \!!bs\registerparameter\c!pagestarter\!!es,
stopper = \!!bs\registerparameter\c!pagestopper\!!es,
segments = "\registerparameter\c!pagesegments",
}
@@ -417,7 +530,7 @@
\begingroup
\edef\currentregister{#1}%
% the expansion is needed because we don't want \v!'s in the tuo file (french)
- \normalexpanded{\noexpand\systemsuppliedchapter[\currentregister]{\noexpand\headtext{\currentregister}}}%
+ \normalexpanded{\systemsuppliedchapter[\currentregister]{\noexpand\headtext{\currentregister}}}%
\placeregister[\currentregister][#2]%
\page[\v!yes]%
\endgroup
@@ -426,9 +539,9 @@
% test case for collapsing (experimental, for Steffen Wolfrum)
%
% \starttext
-% \placeregister[index][collapse=no] \blank[2*big]
-% \placeregister[index][collapse=yes] \blank[2*big]
-% \placeregister[index][collapse=akk] \page
+% \placeregister[index][compress=no] \blank[2*big]
+% \placeregister[index][compress=yes] \blank[2*big]
+% \placeregister[index][compress=all] \page
% \dorecurse{10}{test 1:!\index{test} test \page}
% \dorecurse{5} {test 2:\recurselevel \page}
% \dorecurse{10}{test 3:!\index{test} test \page}
@@ -459,13 +572,14 @@
\setvalue{\??id:\c!indicator:a}#1%
{\registerparameter\c!before
- \vskip\lineheight\goodbreak\vskip-\lineheight
+ % bugged, why does leftskip gets set: \vskip\lineheight\goodbreak\vskip-\lineheight
\begingroup\dosetregisterattributes\c!style\c!color
\registerparameter\c!command{\strut#1}%
\endgroup
\registerparameter\c!after
\par\nobreak}
+
% b = <goodbreak> <before> <character> <after> <nobreak>
\setvalue{\??id:\c!indicator:b}#1%
@@ -482,49 +596,53 @@
%D The following macros are the interface to the rendering. These are
%D generated by \LUA. This might change.
-\def\startregisteroutput
+%D Beware, we get funny side effects when a dangling \index precedes an
+%D placeindex as then flushing takes place inside the index. Took me hours
+%D to notice that.
+
+\unexpanded\def\startregisteroutput
{\endgraf
\begingroup
\forgetparindent
\forgetparskip}
-\def\stopregisteroutput
+\unexpanded\def\stopregisteroutput
{\endgraf
\endgroup}
-\def\startregisterentries#1% depth
+\unexpanded\def\startregisterentries#1% depth
{\endgraf
\begingroup
\dosetregisterattributes\c!textstyle\c!textcolor
\advance\leftskip\numexpr#1-1\relax\dimexpr\registerparameter\c!distance\relax
\hangindent\registerparameter\c!distance\hangafter\plusone}
-\def\stopregisterentries
+\unexpanded\def\stopregisterentries
{\endgraf
\endgroup}
-\def\startregistersection#1% title
+\unexpanded\def\startregistersection#1% title
{\registercharacter{#1}\endgraf}
-\def\stopregistersection
+\unexpanded\def\stopregistersection
{\endgraf}
\newconditional\registerpagedone
-\def\startregisterpages
+\unexpanded\def\startregisterpages
{\begingroup
\setfalse\registerpagedone
\dosetregisterattributes\c!pagestyle\c!pagecolor}
-\def\stopregisterpages
+\unexpanded\def\stopregisterpages
{\endgroup}
-\def\startregisterseewords
+\unexpanded\def\startregisterseewords
{\begingroup
\setfalse\registerpagedone
\dosetregisterattributes\c!pagestyle\c!pagecolor}
-\def\stopregisterseewords
+\unexpanded\def\stopregisterseewords
{\endgroup}
\def\registerpageseparator% todo: , configurable
@@ -535,14 +653,29 @@
\settrue\registerpagedone
\fi}
+\def\registeronepagerangeseparator{|\endash|}
+
+\def\withregisterpagecommand#1#2#3%
+ {\def\currentregisterpageindex{#1}%
+ \iflocation
+ \goto{\registerparameter\c!pagecommand{#3}}[internal(#1)]%
+ \else
+ \registerparameter\c!pagecommand{#3}%
+ \fi}
+
\def\registeronepage#1#2#3% content
- {\registerpageseparator\registerparameter\c!pagecommand{\goto{#3}[internal(#1)]}}
+ {\registerpageseparator
+ \withregisterpagecommand{#1}{#2}{#3}}
\def\registerpagerange#1#2#3#4#5#6% content, content todo: -- configurable
- {\registerpageseparator\registerparameter\c!pagecommand{\goto{#3}[internal(#1)]}|--|\registerparameter\c!pagecommand{\goto{#6}[internal(#4)]}}
+ {\registerpageseparator
+ \withregisterpagecommand{#1}{#2}{#3}%
+ \registeronepagerangeseparator
+ \withregisterpagecommand{#4}{#5}{#6}}
\def\registeroneword#1#2#3% content
- {\registerpageseparator\registerseeword{#3}}
+ {\registerpageseparator
+ \registerseeword{#3}}
\def\defaultregisterentry #1{\registerparameter\c!textcommand{\limitedregisterentry{\registerparameter\c!deeptextcommand{#1}}}}
\def\defaultregisterseeword#1{\labeltexts\v!see{#1}}
@@ -559,13 +692,41 @@
% todo: \installregisterpagehandler
+% \def\MyRegisterPageCommand#1%
+% {#1\currentregisterpageuserdata{whatever}}
+%
+% \starttext
+% \setregisterentry[index][entries=aaa][whatever=f.] test \index{bbb} test
+% \placeregister[index][n=1,pagecommand=\MyRegisterPageCommand]
+% \stoptext
+
+\def\registerpageuserdata #1#2{\ctxlua{jobregisters.userdata(#1,"#2")}}
+\def\currentregisterpageuserdata {\registerpageuserdata\currentregisterpageindex} % {#1}
+
+% not yet ok : new internal handler names
+
\def\registerpagebuttonsymbol{\vrule\!!width1em\!!height1ex\!!depth\zeropoint\relax}
-\setvalue{\??id:\c!symbol :\c!n}{\def\registerpageseparatorsymbol{, }\let\registerpagenumberhandler\firstofoneargument}
-\setvalue{\??id:\c!symbol :\c!a}{\def\registerpageseparatorsymbol{, }\let\registerpagenumberhandler\firstofoneargument} % now done via conversion
-\setvalue{\??id:\c!symbol:\v!none}{\let\registerpageseparatorsymbol\empty\let\registerpagenumberhandler\gobbleoneargument}
-\setvalue{\??id:\c!symbol :1}{\let\registerpageseparatorsymbol\space\def\registerpagenumberhandler{\symbol[1]\gobbleoneargument}}
-\setvalue{\??id:\c!symbol :2}{\let\registerpageseparatorsymbol\space\def\registerpagenumberhandler{\registerpagebuttonsymbol\gobbleoneargument}}
+\setvalue{\??id:\c!symbol:\c!n}%
+ {\def\registerpageseparatorsymbol{, }}
+
+\setvalue{\??id:\c!symbol:\c!a}%
+ {\def\registerpageseparatorsymbol{, }} % now done via conversion
+
+\setvalue{\??id:\c!symbol:\v!none}%
+ {\let\registerpageseparatorsymbol\empty
+ \let\registeronepage \gobblethreearguments
+ \let\registerpagerange \gobblesixarguments}
+
+\setvalue{\??id:\c!symbol:1}%
+ {\let\registerpageseparatorsymbol\space
+ \def\registeronepage {\symbol[1]\gobblethreearguments}%
+ \def\registerpagerange {\symbol[1]\gobblesixarguments}}
+
+\setvalue{\??id:\c!symbol:2}%
+ {\let\registerpageseparatorsymbol\space
+ \def\registeronepage {\registerpagebuttonsymbol\gobblethreearguments}%
+ \def\registerpagerange {\registerpagebuttonsymbol\gobblesixarguments}}
\def\setregisterpagerendering
{\edef\currentregisterpagesymbol{\registerparameter\c!symbol}%
@@ -575,7 +736,8 @@
\csname\??id:\c!symbol:\currentregisterpagesymbol\endcsname
\else
\let\registerpageseparatorsymbol\space
- \def\registerpagenumberhandle{\registerparameter\c!symbol\gobbleoneargument}%
+ \def\registeronepage {\registerparameter\c!symbol\gobblethreearguments}%
+ \def\registerpagerange {\registerparameter\c!symbol\gobblesixarguments}%
\fi\fi}
\appendtoks
@@ -684,8 +846,8 @@
% \fi}
% {\dosetpageregister{#1}}}
-\def\dosetregister#1%
- {\dosetpageregister{#1}}
+% \def\dosetregister#1%
+% {\dosetpageregister{#1}}
% \newcounter\internallistreference
diff --git a/Master/texmf-dist/tex/context/base/strc-ren.mkiv b/Master/texmf-dist/tex/context/base/strc-ren.mkiv
index 8890ec8e6c7..3a60a34a380 100644
--- a/Master/texmf-dist/tex/context/base/strc-ren.mkiv
+++ b/Master/texmf-dist/tex/context/base/strc-ren.mkiv
@@ -27,20 +27,55 @@
\newevery \everyheadstart \relax
-\def\placeheadmargintexts
+\unexpanded\def\placeheadmargintexts
{\the\everyheadstart
\doif{\structureheadparameter\c!margintext}\v!yes\placemargincontent}
-\def\doplaceheadtextcomponent#1#2%
- {\begingroup
- \dosetstructureheadattributes\c!style\c!color
- \dosetstructureheadattributes\c!textstyle\c!textcolor
- \dontconvertfont
- \ifconditional\structureheadisdisplay % \ifdisplaysectionhead
- \setupinterlinespace
+\unexpanded\def\setupheadcomponentfont#1#2%
+ {\ifconditional\structureheadisdisplay
+ \edef\askedstructureheadinterlinespace{\structureheadparameter\c!interlinespace}%
+ \ifx\askedstructureheadinterlinespace\empty
+ % here the interline space is only set when style sets no space
+ \setfalse\fontattributeisset
+ \setfalse\interlinespaceisset
+ \dosetstructureheadattributes\c!style\c!color
+ \ifconditional\fontattributeisset \ifconditional\interlinespaceisset \else
+ \setupinterlinespace
+ \fi \fi
+ \setfalse\fontattributeisset \dosetstructureheadattributes#1#2%
+ \ifconditional\fontattributeisset \ifconditional\interlinespaceisset \else
+ \setupinterlinespace
+ \fi \fi
\else
+ % here the set interline space overloads any other set space in the style
+ \setfalse\fontattributeisset
+ \dosetstructureheadattributes\c!style\c!color
+ \ifconditional\fontattributeisset
+ \dosetupcheckedinterlinespace\askedstructureheadinterlinespace
+ \fi
+ \setfalse\fontattributeisset
+ \dosetstructureheadattributes#1#2%
+ \ifconditional\fontattributeisset
+ \dosetupcheckedinterlinespace\askedstructureheadinterlinespace
+ \fi
+ \fi
+ \else
+ \setfalse\fontattributeisset
+ \dosetstructureheadattributes\c!style\c!color
+ \ifconditional\fontattributeisset
+ \setupspacing
+ \fi
+ \setfalse\fontattributeisset
+ \dosetstructureheadattributes#1#2%
+ \ifconditional\fontattributeisset
\setupspacing
\fi
+ \fi
+ \dontconvertfont}
+
+\def\doplaceheadtextcomponent#1#2%
+ {\begingroup
+ \setupheadcomponentfont\c!textstyle\c!textcolor
% \ifcase\headtimingmode#1\fi % can introduce cr
\structureheadparameter\c!commandbefore
\placeheadmargintexts
@@ -68,8 +103,7 @@
\def\doplaceheadnumbercomponent#1#2%
{\begingroup
- \dosetstructureheadattributes\c!style\c!color
- \dosetstructureheadattributes\c!numberstyle\c!numbercolor
+ \setupheadcomponentfont\c!numberstyle\c!numbercolor
% \getvalue{\??ko\currentstructurehead\c!commandbefore}% strange, why here? moved 21/11/2005
\placeheadmargintexts
\ifconditional\structureheadisdisplay % \ifdisplaysectionhead
@@ -93,7 +127,6 @@
\def\doplacestructureheadtext#1#2#3% nodes, text, endstuff
{\beginheadplacement
-% \postponenotes
\doresettructureheadnumbercontent
\ifconditional\structureheadleaveempty
\setbox\sectionheadbox\ifvertical\vbox\else\hbox\fi \structureheadattribute to \zeropoint {#1}%
@@ -109,7 +142,6 @@
\def\doplacestructureheadnumbertext#1#2#3#4% nodes number text nodes
{\beginheadplacement
-% \postponenotes
\doiftextelse{#2}\dosettructureheadnumbercontent\doresettructureheadnumbercontent
\ifconditional\structureheadleaveempty
\setbox\sectionheadbox\ifvertical\vbox\else\hbox\fi \structureheadattribute to \zeropoint{#1}%
@@ -122,13 +154,13 @@
\fi
\endheadplacement{#4}}
-\def\placestructureheadnumbertext
+\unexpanded\def\placestructureheadnumbertext
{\doplacestructureheadnumbertext\empty\getstructureheadnumber\getstructureheadtitle\getstructureheadsyncs}
-\def\placestructureheadtext
+\unexpanded\def\placestructureheadtext
{\doplacestructureheadtext\empty\getstructureheadtitle\getstructureheadsyncs}
-\def\placestructureheadnothing
+\unexpanded\def\placestructureheadempty
{\hbox \structureheadattribute {\getstructureheadsyncs}}
%D \starttyping
@@ -159,7 +191,6 @@
\def\beginheadplacement
{\bgroup
\setsystemmode\currentstructurehead
- \ifgridsnapping\iftracegridsnapping\showstruts\fi\fi
\xdef\localheadheight {\the\strutht}%
\xdef\localheaddepth {\the\strutdp}%
\xdef\localheadlineheight{\the\lineheight}%
@@ -241,10 +272,25 @@
\v!unknown=>\hangheadplacement\noflines\numexpr0\commalistelement-1\relax]%
% so far
\let\headlastlinewidth\!!zeropoint
- \snaptogrid[\structureheadparameter\c!grid]\hbox
- {\hskip\localheadskip
- \hskip\structureheadparameter\c!margin\relax
- \box\sectionheadbox}%
+ % kind of special, we want to snap heads also according to local specs local
+ \ifgridsnapping
+ \begingroup
+ \edef\currentstructureheadgridsnapping{\structureheadparameter\c!grid}%
+ \ifconditional\structureheadisdisplay
+ \ifx\currentstructureheadgridsnapping\empty\else
+ \dosetstructureheadattributes\c!style\c!color
+ \setupinterlinespace
+ \dosetstructureheadattributes\c!textstyle\c!textcolor
+ \setupinterlinespace
+ \fi
+ \fi
+ \snaptogrid[\currentstructureheadgridsnapping]\hbox
+ {\hskip\localheadskip\hskip\structureheadparameter\c!margin\box\sectionheadbox}%
+ \endgroup
+ \else
+ \hbox
+ {\hskip\localheadskip\hskip\structureheadparameter\c!margin\box\sectionheadbox}%
+ \fi
\flushnotes % new, not really needed
\endgraf
\ifvmode
@@ -297,13 +343,16 @@
\let\numberheadalternative\v!normal
-\def\defineheadplacement
+\unexpanded\def\defineheadplacement
{\dodoubleargument\dodefineheadplacement}
\def\dodefineheadplacement[#1][#2]% #3#4
{\setvalue{\??ns:#1}{#2}%
\setvalue{\??ns::#1}}
+\def\presetnumberheadalternative
+ {\doifelsevalue{\??ns:\numberheadalternative}\v!horizontal\setfalse\settrue\structureheadisdisplay}
+
% \def\normalplacehead
% {\executeifdefined
% {\??ns::\numberheadalternative}
@@ -390,7 +439,7 @@
\fi
#2}}
-\def\placeheadmargin#1#2%
+\unexpanded\def\placeheadmargin#1#2%
{\vbox
{\localheadsetup
\begstrut % use one \strut here!
@@ -425,7 +474,7 @@
{\begstrut#2}%
\egroup}
-\def\placeheadlohi#1#2#3%
+\unexpanded\def\placeheadlohi#1#2#3%
{\ifconditional\structureheadshownumber % \ifheadnumbercontent
\setbox0\hbox{#2}
\setbox2=#1{\localheadsetup\advance\hsize-\wd0\relax#3}%
diff --git a/Master/texmf-dist/tex/context/base/strc-sbe.mkiv b/Master/texmf-dist/tex/context/base/strc-sbe.mkiv
index 7db3cedb0dd..206ac8a9c4f 100644
--- a/Master/texmf-dist/tex/context/base/strc-sbe.mkiv
+++ b/Master/texmf-dist/tex/context/base/strc-sbe.mkiv
@@ -31,8 +31,8 @@
\def\v!structureblockenvironment{structureblockenvironment}
-\def\definestructureblock{\dotripleargument\dodefinestructureblock}
-\def\setupstructureblock {\dodoubleargument\dosetupstructureblock}
+\unexpanded\def\definestructureblock{\dotripleargument\dodefinestructureblock}
+\unexpanded\def\setupstructureblock {\dodoubleargument\dosetupstructureblock}
\def\setstructureblock {\dosingleargument\dosetstructureblock}
% \def\structureblockparameter#1{\executeifdefined{\??nb\currentstructureblock#1}\empty}
@@ -77,15 +77,16 @@
\let\currentstructureblock\s!unknown
-\def\startstructureblock[#1]%
- {\begingroup
+\unexpanded\def\startstructureblock[#1]%
+ {%\ctxlua{structure.counters.check(0)}% we assume sane usage of \page, as this is the only workable place (in push)
+ \begingroup
\edef\currentstructureblock{\ctxlua{structure.sections.pushblock("#1")}}%
\csname #1true\endcsname % for old times sake
\setsystemmode\currentstructureblock
\the\everybeforestructureblock\relax
\showmessage\m!structures1\currentstructureblock}
-\def\stopstructureblock
+\unexpanded\def\stopstructureblock
{\showmessage\m!structures2\currentstructureblock
\the\everyafterstructureblock\relax
\edef\currentstructureblock{\ctxlua{structure.sections.popblock()}}%
diff --git a/Master/texmf-dist/tex/context/base/strc-sec.mkiv b/Master/texmf-dist/tex/context/base/strc-sec.mkiv
index ddc601eb831..35927d98a00 100644
--- a/Master/texmf-dist/tex/context/base/strc-sec.mkiv
+++ b/Master/texmf-dist/tex/context/base/strc-sec.mkiv
@@ -41,12 +41,14 @@
% lua interface / names and interface might change
-\def\setstructurelevel #1#2{\ctxlua{structure.sections.setlevel("#1","#2")}} % name, level|parent
-\def\getstructurelevel #1{\ctxlua{structure.sections.getcurrentlevel("#1")}}% name
-\def\setstructurenumber #1#2{\ctxlua{structure.sections.setnumber(#1,"#2")}} % level, number (+/-)
-\def\getstructurenumber #1{\ctxlua{structure.sections.getnumber(#1)}} % level
-\def\getfullstructurenumber #1{\ctxlua{structure.sections.fullnumber(#1)}} % level
-\def\getspecificstructuretitle#1{\ctxlua{structure.sections.structuredata(#1,"titledata.title",nil,"\structureheadparameter\s!catcodes")}}%
+\def\setstructurelevel #1#2{\ctxlua{structure.sections.setlevel("#1","#2")}} % name, level|parent
+\def\getstructurelevel #1{\ctxlua{structure.sections.getcurrentlevel("#1")}}% name
+\def\setstructurenumber #1#2{\ctxlua{structure.sections.setnumber(#1,"#2")}} % level, number (+/-)
+\def\getstructurenumber #1{\ctxlua{structure.sections.getnumber(#1)}} % level
+\def\getsomestructurenumber #1#2{\ctxlua{structure.sections.getnumber(#1,"#2")}} % level, what
+\def\getfullstructurenumber #1{\ctxlua{structure.sections.fullnumber(#1)}} % level
+\def\getsomefullstructurenumber#1#2{\ctxlua{structure.sections.fullnumber(#1,"#2")}}
+\def\getspecificstructuretitle #1{\ctxlua{structure.sections.structuredata(#1,"titledata.title",nil,"\structureheadparameter\s!catcodes")}}%
% interface
@@ -59,6 +61,8 @@
\def\dostructureheadparentparameter #1#2{\ifx#1\relax\s!empty\else\dostructureheadparameter #1#2\fi}
\def\dostructureheadparentparameterhash#1#2{\ifx#1\relax \else\dostructureheadparameterhash#1#2\fi}
+\def\structureheadparameterstrict#1{\csname\ifcsname\??nh\currentstructurehead#1\endcsname\??nh\currentstructurehead#1\else\s!empty\fi\endcsname}
+
\def\dosetstructureheadattributes#1#2% style color
{\edef\fontattributehash {\structureheadparameterhash#1}%
\edef\colorattributehash{\structureheadparameterhash#2}%
@@ -71,22 +75,30 @@
\let\laststructuresectionname\empty
-\def\definestructuresection[#1]%
+\unexpanded\def\definestructuresection[#1]%
{\doifundefined{\??nh#1}
{\global\advance\maxstructuredepth\plusone
\setevalue{\??nh#1\c!level}{\the\maxstructuredepth}%
\setstructurelevel{#1}{\the\maxstructuredepth}%
-% \letvalue{\??nh#1\c!marking}\empty % ?
+% \letvalue{\??nh#1\c!marking}\empty % ?
%\writestatus{structure}{#1\ifx\laststructuresectionname\empty\else\space->\space\laststructuresectionname\fi}%
\normalexpanded{\noexpand\getparameters[\??nh#1][\s!parent=\??nh\laststructuresectionname]}%
+ % this is a rather practical default that we don't want to be part of the parent chain
+ % lookup mechanism; it's also mkii compativle; this might become \everystructureheaddefine
+ \getparameters[\??nh#1]
+ [ \c!textstyle=\structureheadparameterstrict\c!style,
+ \c!textcolor=\structureheadparameterstrict\c!color,
+ \c!numberstyle=\structureheadparameterstrict\c!style,
+ \c!numbercolor=\structureheadparameterstrict\c!color]%
+ % so far for these default inheritances
\definemarking[#1]%
\ifnum\maxstructuredepth>\plusone
-% \normalexpanded{\noexpand\couplemarking[#1][\laststructuresectionname]}% so, the child inherits settings from the parent
+% \normalexpanded{\noexpand\couplemarking[#1][\laststructuresectionname]}% so, the child inherits settings from the parent
\normalexpanded{\noexpand\relatemarking[#1][\laststructuresectionname]}% so, the parent will reset the child
\fi
\xdef\laststructuresectionname{#1}}}
-\def\setupstructuresection
+\unexpanded\def\setupstructuresection
{\dotripleempty\dosetupstructuresection}
\def\dosetupstructuresection[#1]%
@@ -102,16 +114,18 @@
\fi}
\def\structuresectionlevel#1%
- {\executeifdefined{\??nh#1\c!level}0}
+ {\executeifdefined{\??nh#1\c!level}{-1}}
+
+\setvalue{\??nh block\c!level}{0} % -1 == manual
% head -> structurehead
\let\currentstructurehead\empty
\newtoks\everystructureheadsetup
-\def\setupstructureheads{\dosingleargument\dosetupstructureheads}
-\def\setupstructurehead {\dodoubleempty\dosetupstructurehead}
-\def\definestructurehead{\dodoubleempty\dodefinestructurehead}
+\unexpanded\def\setupstructureheads{\dosingleargument\dosetupstructureheads}
+\unexpanded\def\setupstructurehead {\dodoubleempty\dosetupstructurehead}
+\unexpanded\def\definestructurehead{\dodoubleempty\dodefinestructurehead}
\newif\ifsectionnumber % maybe conditional
@@ -254,6 +268,7 @@
\newconditional\structureheaddoincrement
\newconditional\structureheaddoplace
\newconditional\structureheadleaveempty
+\newconditional\structureheadhidden
\newconditional\structureheadshownumber
\newconditional\structureheadisdisplay
@@ -302,11 +317,13 @@
\def\setstructureheadplacement
{\settrue\structureheaddoplace
\setfalse\structureheadleaveempty
+ \setfalse\structureheadhidden
\processaction
[\structureheadparameter\c!placehead]
[ \v!yes=>,
\v!empty=>\settrue\structureheadleaveempty,
- \v!no=>\settrue\structureheadleaveempty\setfalse\structureheaddoplace]}
+ \v!no=>\settrue\structureheadleaveempty\setfalse\structureheaddoplace,
+ \v!hidden=>\settrue\structureheadhidden\settrue\structureheadleaveempty\setfalse\structureheaddoplace]}
\def\setstructureheaddisplay
{\doifelsevalue{\??nh:\structureheadparameter\c!alternative}\v!horizontal
@@ -332,16 +349,17 @@
\setfalse\structureheadshownumber
\fi}
-\def\thestructureheadsynchonization
+\unexpanded\def\thestructureheadsynchonization
{\pagetype[\currentstructureheadcoupling]% hm also number
\normalexpanded{\noexpand\setmarking[\currentstructureheadcoupling]{\currentstructurelistnumber}}%
\currentstructuresynchronize}
-\def\fullstructureheadnumber{\labeltexts{\structureheadparameter\c!label}{\structurenumber}} % todo
-\def\fullstructureheadtitle {\structurevariable{titledata.title}} % no catcode!
+\unexpanded\def\fullstructureheadnumber{\labeltexts{\structureheadparameter\c!label}{\structurenumber}} % todo
+
+% \def\fullstructureheadtitle {\structurevariable{titledata.title}} % no catcode!
+% \unexpanded\def\fullstructureheadtitle{\structureautocatcodedget{titledata.title}{\structureheadparameter\s!catcodes}}
-\unexpanded\def\fullstructureheadtitle
- {\structureautocatcodedget{titledata.title}{\structureheadparameter\s!catcodes}}
+\unexpanded\def\fullstructureheadtitle{\ctxlua{structure.sections.title()}}
\let\currentstructurehead \empty
\let\currentstructureheadcoupling\empty
@@ -356,15 +374,18 @@
\c!saveinlist=\ifconditional\structureheadtolist\v!yes\else\v!no\fi,
\c!level=\currentstructureheadlevel,
\c!name=#1,
- \c!number=\ifconditional\structureheadshownumber\v!yes\else\v!no\fi,
+ \c!number=\ifconditional\structureheaddoincrement\ifconditional\structureheadshownumber\v!yes\else\v!no\fi\else\v!no\fi,
\c!bookmark=,
\c!marking=,
\c!list=,
\c!expansion=\structureheadparameter\c!expansion,
+ \c!xmlsetup=\structureheadparameter\c!xmlsetup,
+ \s!catcodes=\structureheadparameter\s!catcodes,
\c!sectionresetset=\structureheadparameter\c!sectionresetset,
\c!sectionseparatorset=\structureheadparameter\c!sectionseparatorset,
\c!sectionconversionset=\structureheadparameter\c!sectionconversionset,
\c!sectionconversion=\structureheadparameter\c!conversion, % just for compatibility
+ \c!sectionstarter=\structureheadparameter\c!sectionstarter,
\c!sectionstopper=\structureheadparameter\c!sectionstopper,
\c!sectionset=\structureheadparameter\c!sectionset,
\c!sectionsegments=\structureheadparameter\c!sectionsegments,
@@ -378,14 +399,21 @@
\unexpanded\def\placeheadtext {\dosingleempty\doplaceheadtext } % use with care
\unexpanded\def\placeheadnumber{\dosingleempty\doplaceheadnumber} % use with care
+\ifdefined\setupheadcomponentfont \else
+
+ \unexpanded\def\setupheadcomponentfont#1#2%
+ {\dosetstructureheadattributes\c!style\c!color
+ \dosetstructureheadattributes#1#2%
+ \dontconvertfont
+ \setupinterlinespace}
+
+\fi
+
\def\doplaceheadtext[#1]%
{\dontleavehmode
\begingroup
\edef\currentstructurehead{#1}%
- \dosetstructureheadattributes\c!style\c!color
- \dosetstructureheadattributes\c!textstyle\c!textcolor
- \dontconvertfont
- \setupinterlinespace
+ \setupheadcomponentfont\c!textstyle\c!textcolor
\relax
\getspecificstructuretitle{\thenamedstructureheadlevel{#1}}%
\endgraf
@@ -395,15 +423,14 @@
{\dontleavehmode
\begingroup
\edef\currentstructurehead{#1}%
- \dosetstructureheadattributes\c!style\c!color
- \dosetstructureheadattributes\c!numberstyle\c!numbercolor
- \dontconvertfont
- \setupinterlinespace
+ \setupheadcomponentfont\c!numberstyle\c!numbercolor
\relax
\getfullstructurenumber{\thenamedstructureheadlevel{#1}}%
\endgraf
\endgroup}
+\ifdefined \else \let\presetnumberheadalternative\relax \fi
+
\def\dohandlestructurehead#1#2#3% name data userdata
{\xdef\currentstructurehead {#1}%
\xdef\currentstructureheadcoupling{\structuresectionheadcoupling\currentstructurehead}%
@@ -432,6 +459,7 @@
%
\edef\numberheaddistance {\structureheadparameter\c!distance }% compatibility
\edef\numberheadalternative{\structureheadparameter\c!alternative}% compatibility
+ \presetnumberheadalternative
%
\let\getstructureheadnumber\empty
\let\getstructureheadtitle \empty
@@ -449,13 +477,17 @@
\placestructureheadtext
\fi
\dostructureheadspacingafteryes
+ \else\ifconditional\structureheadhidden
+ \doregisterstructurehead{#1}{#2}{#3}% after optional \page
+ \let\getstructureheadsyncs\thestructureheadsynchonization
+ \placestructureheadhidden % only something when tracing
\else
\dostructureheadspacingbeforenop % toegevoegd ivm subpaginanr / tug sheets
\doregisterstructurehead{#1}{#2}{#3}% after optional \page
\let\getstructureheadsyncs\thestructureheadsynchonization
- \placestructureheadnothing % just flush 'm
+ \placestructureheadempty % just flush 'm
\dostructureheadspacingafternop
- \fi
+ \fi\fi
\else
\ifconditional\structureheaddoplace
\dostructureheadspacingbeforeyes
@@ -464,14 +496,18 @@
\let\getstructureheadtitle\fullstructureheadtitle
\placestructureheadtext
\dostructureheadspacingafteryes
+ \else\ifconditional\structureheadhidden
+ \doregisterstructurehead{#1}{#2}{#3}% after optional \page
+ \let\getstructureheadsyncs\thestructureheadsynchonization
+ \placestructureheadhidden % only something when tracing
\else
% do nothing / should be vbox to 0pt
\dostructureheadspacingbeforenop
\doregisterstructurehead{#1}{#2}{#3}% after optional \page
\let\getstructureheadsyncs\thestructureheadsynchonization
- \placestructureheadnothing % just flush 'm
+ \placestructureheadempty % just flush 'm
\dostructureheadspacingafternop
- \fi
+ \fi\fi
\fi
\flushingcolumnfloatstrue
\setfalse\ignorehandlepagebreak
@@ -484,28 +520,54 @@
% typesetting
-\def\placestructureheadnumbertext % dummy, will be overloaded
+\unexpanded\def\placestructureheadnumbertext % dummy, will be overloaded
{\getstructureheadnumber/\getstructureheadtitle
\getstructureheadsyncs}
-\def\placestructureheadtext % dummy, will be overloaded
+\unexpanded\def\placestructureheadtext % dummy, will be overloaded
{\getstructureheadtitle
\getstructureheadsyncs}
-\def\placestructureheadnothing % dummy, will be overloaded
+\unexpanded\def\placestructureheadempty % dummy, will be overloaded
{\getstructureheadsyncs}
+\unexpanded\def\placestructureheadhidden
+ {\setxvalue{\currentstructurehead:sync}%
+ {\noexpand\pagetype[\currentstructureheadcoupling]% hm also number
+ \noexpand\setmarking[\currentstructureheadcoupling]{\currentstructurelistnumber}%
+ \currentstructuresynchronize}}
+
+\def\synchronizestructurehead#1%
+ {\getvalue{#1:sync}}
+
+\unexpanded\def\placerawheaddata [#1]{\synchronizestructurehead {#1}}
+\unexpanded\def\placerawheadtext [#1]{\getspecificstructuretitle{\thenamedstructureheadlevel{#1}}}
+\unexpanded\def\placerawheadnumber[#1]{\getfullstructurenumber {\thenamedstructureheadlevel{#1}}}
+
+% \setuphead[chapter][placehead=hidden]
+% \chapter {test}
+%
+% %(\synchronizestructurehead{chapter}) % \getstructureheadsyncs
+% %(\getfullstructurenumber{\thenamedstructureheadlevel{chapter}})
+% %(\getspecificstructuretitle{\thenamedstructureheadlevel{chapter}})
+%
+% (\placerawheaddata [chapter])
+% (\placerawheadnumber[chapter])
+% (\placerawheadtext [chapter])
+
% pagebreaks
\newcount\precedingstructurelevel \precedingstructurelevel\plusone
\newconditional\ignorehandlepagebreak
\def\dostructureheadspacingbeforeyes
- {\docheckstructureheadbefore\dohandlestructureheadpagebreak
+ {\docheckstructureheadbefore
+ \dohandlestructureheadpagebreak
\structureheadparameter\c!inbetween}
\def\dostructureheadspacingbeforenop
- {\docheckstructureheadbefore\docheckstructureheadlayout
+ {\docheckstructureheadbefore
+ \docheckstructureheadlayout
\structureheadparameter\c!inbetween}
% \def\emptystructureheadcorrection
@@ -579,7 +641,7 @@
\setfalse\ignorehandlepagebreak
\else
\ifnum\lastpenalty>\zerocount
- \global\pagebreakdisabledtrue
+% \global\pagebreakdisabledtrue
\fi
% beware, these numbers are not yet know here
\doifelse{\structureheadparameter\c!continue}\v!yes
@@ -592,53 +654,70 @@
\doifnot{\structureheadparameter\c!aligntitle}\v!float\flushsidefloats
\structureheadparameter\c!before
\relax
- \ifpagebreakdisabled
- \global\pagebreakdisabledfalse
- \else
+% \ifpagebreakdisabled
+% \global\pagebreakdisabledfalse
+% \else
\dopreventbreakafterstructureheadauto
- \fi
+% \fi
\doif{\structureheadparameter\c!aligntitle}\v!float\indent
\global\precedingstructurelevel\currentstructureheadlevel
\fi}
% the next one was: \somebreakmethod
-\chardef\somestructureheadbreakmethod\plusone % 0=nothing, 1=weighted, 2=strict, 3=vspacing
+% \chardef\somestructureheadbreakmethod\plusone % 0=nothing, 1=weighted, 2=strict, 3=vspacing
+\chardef\somestructureheadbreakmethod\plusthree
+
+% \def\dopreventbreakafterstructureheadauto % used after \c!before
+% {\ifcase\somestructureheadbreakmethod
+% % 0 = nothing
+% \or
+% % 1 = old weighted version
+% \ifnum\currentstructureheadlevel>\precedingstructurelevel
+% \dosomebreak{\penalty\numexpr20000+500*\currentstructureheadlevel\relax}%
+% \else
+% \dosomebreak\allowbreak % brr
+% \fi
+% \or
+% % 2 = strict version
+% \dosomebreak{\penalty\maxdimen}%
+% \or
+% % 3 = vspacing
+% \vspacing[\v!samepage]% if preceded by ! then a loop
+% \else
+% % nothing
+% \fi}
+%
+% \def\dopreventbreakafterstructureheadspec#1% see enumerations etc
+% {\ifcase\somestructureheadbreakmethod
+% % 0 = nothing
+% \or
+% % 1 = old weighted version
+% \dosomebreak{\penalty\numexpr20000+500*(\currentstructureheadlevel+#1)\relax}%
+% \or
+% % 2 = strict version
+% \dosomebreak{\penalty\maxdimen}%
+% \or
+% % 3 = vspacing
+% \vspacing[\v!samepage]%
+% \else
+% % nothing
+% \fi}
+%
+% todo: \vspacing[category:8] == keep_together
\def\dopreventbreakafterstructureheadauto % used after \c!before
{\ifcase\somestructureheadbreakmethod
% 0 = nothing
- \or
- % 1 = old weighted version
- \ifnum\currentstructureheadlevel>\precedingstructurelevel
- \dosomebreak{\penalty\numexpr20000+500*\currentstructureheadlevel\relax}%
- \else
- \dosomebreak\allowbreak % brr
- \fi
- \or
- % 2 = strict version
- \dosomebreak{\penalty\maxdimen}%
- \or
- % 3 = vspacing
- \vspacing[\v!samepage]% if preceded by ! then a loop
\else
- % nothing
+ \vspacing[\v!samepage-\currentstructureheadlevel]%
\fi}
\def\dopreventbreakafterstructureheadspec#1% see enumerations etc
{\ifcase\somestructureheadbreakmethod
% 0 = nothing
- \or
- % 1 = old weighted version
- \dosomebreak{\penalty\numexpr20000+500*(\currentstructureheadlevel+#1)\relax}%
- \or
- % 2 = strict version
- \dosomebreak{\penalty\maxdimen}%
- \or
- % 3 = vspacing
- \vspacing[\v!samepage]%
\else
- % nothing
+ \vspacing[\v!samepage-\the\numexpr\currentstructureheadlevel+1\relax]% todo #1
\fi}
\def\dohandlepagebreakX{\dopreventbreakafterstructureheadspec} % no \let so we can redefind
@@ -649,13 +728,13 @@
% \chapter{some} \setupheadnumber[chapter][3] \chapter{more}
% \setupheadnumber[section][8] \section{b} \section{c} \setupheadnumber[section][-1] \section{d}
-\def\thecurrentstructureheadlevel#1%
- {\getcurrentstructurelevel{#1}}
+% \def\thecurrentstructureheadlevel#1%
+% {\getcurrentstructurelevel{#1}}
\def\thenamedstructureheadlevel#1%
{\structuresectionlevel{\structuresectionheadsection{\structuresectionheadcoupling{#1}}}}
-\def\setupheadnumber
+\unexpanded\def\setupheadnumber
{\dodoubleargument\dosetupheadnumber}
\def\dosetupheadnumber[#1][#2]% todo: reset if at other level
@@ -663,18 +742,29 @@
\def\currentstructureheadnumber{0} % ==> \currentheadnumber
-\def\determineheadnumber[#1]%
+\unexpanded\def\determineheadnumber[#1]%
{\xdef\currentstructureheadnumber{\getstructurenumber{\thenamedstructureheadlevel{#1}}}}
% The previous macro is been replaced by the expandable:
-\def\namedheadnumber#1{\getstructurenumber{\thenamedstructureheadlevel{#1}}}
+\def\namedheadnumber #1{\getstructurenumber {\thenamedstructureheadlevel{#1}}}
+\def\somenamedheadnumber#1#2{\getsomestructurenumber{\thenamedstructureheadlevel{#1}}{#2}}
+
+\unexpanded\def\structureheadnumber
+ {\dodoubleempty\dostructureheadnumber}
+
+\def\dostructureheadnumber[#1][#2]% simple case is just a number
+ {\getsomefullstructurenumber{\iffirstargument\thenamedstructureheadlevel{#1}\fi}{#2}}
-\def\structureheadnumber
- {\dosingleempty\dostructureheadnumber}
+\def\somestructureheadnumber
+ {\dodoubleempty\dosomestructureheadnumber}
-\def\dostructureheadnumber[#1]% simple case is just a number
- {\getfullstructurenumber{\iffirstargument\thecurrentstructureheadlevel{#1}\fi}}
+\def\dosomestructureheadnumber[#1][#2]%
+ {\dontleavehmode
+ \begingroup
+ \edef\currentstructurehead{#1}%
+ \getsomefullstructurenumber{\thenamedstructureheadlevel{#1}}{#2}%
+ \endgroup}
% compatibility code (after all, we might offer different structure handlers as well
% but we might as well remove the 'structure' substring at some point (we needed it
diff --git a/Master/texmf-dist/tex/context/base/strc-syn.lua b/Master/texmf-dist/tex/context/base/strc-syn.lua
index d9b7b9a572e..d6f38c2c7f6 100644
--- a/Master/texmf-dist/tex/context/base/strc-syn.lua
+++ b/Master/texmf-dist/tex/context/base/strc-syn.lua
@@ -1,6 +1,6 @@
if not modules then modules = { } end modules ['str-syn'] = {
version = 1.001,
- comment = "companion to str-syn.tex",
+ comment = "companion to str-syn.mkiv",
author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
copyright = "PRAGMA ADE / ConTeXt Development Team",
license = "see context related readme files"
@@ -24,7 +24,9 @@ local function initializer()
end
local function finalizer()
- tobesaved.hash = nil
+ for entry, data in next, tobesaved do
+ data.hash = nil
+ end
end
job.register('joblists.collected', joblists.tobesaved, initializer, finalizer)
@@ -56,8 +58,18 @@ end
function joblists.register(class,kind,spec)
local data = allocate(class)
data.metadata.kind = kind -- runtime, not saved in format (yet)
- data.entries[#data.entries+1] = spec
- data.hash[spec.definition.tag or ""] = spec
+ if not data.hash[spec.definition.tag or ""] then
+ data.entries[#data.entries+1] = spec
+ data.hash[spec.definition.tag or ""] = spec
+ end
+end
+
+function joblists.registerused(class,tag)
+ local data = allocate(class)
+ local dht = data.hash[tag]
+ if dht then
+ dht.definition.used = true
+ end
end
function joblists.synonym(class,tag)
@@ -80,9 +92,7 @@ function joblists.meaning(class,tag)
end
end
-function joblists.compare(a,b)
- return sorters.comparers.basic(a.split,b.split)
-end
+joblists.compare = sorters.comparers.basic -- (a,b)
function joblists.filter(data,options)
local result = { }
@@ -124,7 +134,7 @@ function joblists.finalize(data,options)
local split = { }
for k=1,#result do
local v = result[k]
- local entry, tag = sorters.firstofsplit(v.split)
+ local entry, tag = sorters.firstofsplit(v)
local s = split[entry] -- keeps track of change
if not s then
s = { tag = tag, data = { } }
@@ -137,19 +147,21 @@ end
function joblists.flush(data,options) -- maybe pass the settings differently
local kind = data.metadata.kind -- hack, will be done better
- texsprint(ctxcatcodes,format("\\start%soutput",kind))
+--~ texsprint(ctxcatcodes,format("\\start%soutput",kind))
local result = data.result
- for k, letter in ipairs(table.sortedkeys(result)) do
+ local sorted = table.sortedkeys(result)
+ for k=1,#sorted do
+ local letter = sorted[k]
local sublist = result[letter]
local data = sublist.data
- texsprint(ctxcatcodes,format("\\start%ssection{%s}",kind,sublist.tag))
+--~ texsprint(ctxcatcodes,format("\\start%ssection{%s}",kind,sublist.tag))
for d=1,#data do
local entry = data[d].definition
- texsprint(ctxcatcodes,format("\\%sentry{%s}{%s}{%s}",kind,d,entry.synonym,entry.meaning))
+ texsprint(ctxcatcodes,format("\\%sentry{%s}{%s}{%s}{%s}",kind,d,entry.tag,entry.synonym,entry.meaning or ""))
end
- texsprint(ctxcatcodes,format("\\stop%ssection",kind))
+--~ texsprint(ctxcatcodes,format("\\stop%ssection",kind))
end
- texsprint(ctxcatcodes,format("\\stop%soutput",kind))
+--~ texsprint(ctxcatcodes,format("\\stop%soutput",kind))
-- for now, maybe at some point we will do a multipass or so
data.result = nil
data.metadata.sorted = false
@@ -158,6 +170,8 @@ end
function joblists.analysed(class,options)
local data = joblists.collected[class]
if data and data.entries then
+ options = options or { }
+ sorters.setlanguage(options.language)
joblists.filter(data,options) -- filters entries to result
joblists.prepare(data,options) -- adds split table parallel to list table
joblists.sort(data,options) -- sorts entries in result
diff --git a/Master/texmf-dist/tex/context/base/strc-syn.mkiv b/Master/texmf-dist/tex/context/base/strc-syn.mkiv
index 9865305c75e..65f5174372a 100644
--- a/Master/texmf-dist/tex/context/base/strc-syn.mkiv
+++ b/Master/texmf-dist/tex/context/base/strc-syn.mkiv
@@ -15,6 +15,9 @@
\registerctxluafile{strc-syn}{1.001}
+% todo: add 'define only' option to descriptions, then add sorting (also based on key)
+% and call to definition -> replaces this module
+
\unprotect
% general help, can be shared
@@ -64,7 +67,7 @@
\newtoks\everysetupsynonyms
-\def\setupsynonyms
+\unexpanded\def\setupsynonyms
{\dodoubleargument\dosetupsynonyms}
\def\dosetupsynonyms[#1][#2]%
@@ -95,7 +98,7 @@
%\c!expansion=,
\s!language=\currentmainlanguage]
-\def\definesynonyms
+\unexpanded\def\definesynonyms
{\doquadrupleempty\dodefinesynonyms}
\def\dodefinesynonyms[#1][#2][#3][#4]% name plural \meaning \use
@@ -104,21 +107,21 @@
\ifthirdargument
\unexpanded\def#3##1{\doinsertsynonymmeaning{#1}{##1}}% \meaning
\fi
- \unexpanded\setvalue{#1}{\definesynonym[\v!no][#1]}% \name
+ \setuvalue{#1}{\definesynonym[\v!no][#1]}% \name
\else
\ifthirdargument
\unexpanded\def#3##1{\doinsertsynonymmeaning{#1}{##1}}% \meaning
\fi
- \unexpanded\setvalue{#1}{\definesynonym[\v!yes][#1]}% \name
+ \setuvalue{#1}{\definesynonym[\v!yes][#1]}% \name
\fi
- \getparameters[\??sm#1][\s!parent=\??sm]%
+ \getparameters[\??sm#1][\s!parent=\??sm,\s!multi={#2}]%
\presetheadtext[#2=\Word{#2}]% changes the \if...argument
%\ctxlua{joblists.define('#1')}%
\setvalue{\e!setup #2\e!endsetup}{\dodoubleargument\getparameters[\??sm#1]}% to be obsolete
- \setvalue{\e!place \e!listof#2}{\doplacelistofsynonyms{#1}{#2}}%
- \setvalue{\e!complete\e!listof#2}{\docompletelistofsynonyms{#1}{#2}}}
+ \setvalue{\e!place \e!listof#2}{\placelistofsynonyms[#1]}% accepts extra argument
+ \setvalue{\e!complete\e!listof#2}{\completelistofsynonyms[#1]}}
-\def\definesynonym
+\unexpanded\def\definesynonym
{\dotripleempty\dodefinesynonym}
\def\dodefinesynonym[#1][#2][#3]#4#5%
@@ -147,10 +150,16 @@
used = false,
}
})}%
- \doif{#1}\v!yes{\unexpanded\setxvalue\currentsynonymtag{\noexpand\doinsertsynonym{\currentsynonym}{\currentsynonymtag}}}%
+ \doif{#1}\v!yes{\setuxvalue\currentsynonymtag{\noexpand\doinsertsynonym{\currentsynonym}{\currentsynonymtag}}}%
\fi
\endgroup}
+\def\registersynonym
+ {\dodoubleargument\doregistersynonym}
+
+\def\registersynonym[#1][#2]%
+ {\ctxlua{joblists.registerused("#1","#2")}}
+
\unexpanded\def\doinsertsynonymmeaning#1#2% name tag
{\begingroup
\def\currentsynonym{#1}%
@@ -163,9 +172,12 @@
\def\currentsynonym{#1}%
\dosetsynonymattributes\c!synonymstyle\c!synonymcolor
\synonymparameter\c!synonymcommand{\ctxlua{joblists.synonym("#1","#2")}}%
- \endgroup}
+ \normalexpanded{\endgroup\synonymparameter\c!next}}
+
+\unexpanded\def\placelistofsynonyms
+ {\dodoubleempty\doplacelistofsynonyms}
-\def\doplacelistofsynonyms#1#2%
+\def\doplacelistofsynonyms[#1][#2]%
{\begingroup
\def\currentsynonym{#1}%
\definedescription % todo, per class
@@ -185,15 +197,19 @@
\c!headstyle=\synonymparameter\c!textstyle,
\c!headcolor=\synonymparameter\c!textcolor,
\c!style=,
- \c!color=]%
+ \c!color=.
+ #2]%
\startpacked
\ctxlua{joblists.process('#1',{ criterium = "\synonymparameter\c!criterium" })}%
\stoppacked
\endgroup}
-\def\docompletelistofsynonyms#1#2% expansion needed to avoid v! (due to french active !)
- {\normalexpanded{\noexpand\systemsuppliedchapter[#1]{\noexpand\headtext{#2}}}%
- \doplacelistofsynonyms{#1}{#2}%
+\def\completelistofsynonyms
+ {\dodoubleempty\docompletelistofsynonyms}
+
+\def\docompletelistofsynonyms[#1][#2]% expansion needed to avoid v! (due to french active !)
+ {\normalexpanded{\systemsuppliedchapter[#1]{\noexpand\headtext{\synonymparameter\s!single}}}%
+ \doplacelistofsynonyms[#1][#2]%
\page[\v!yes]}
\let\startsynonymoutput \relax
@@ -201,10 +217,10 @@
\let\startsynonymsection\gobbleoneargument
\let\stopsynonymsection \relax
-\unexpanded\def\synonymentry#1#2#3%
+\unexpanded\def\synonymentry#1#2#3#4%
% {\syndef{\dosetsynonymattributes\c!textstyle\c!textcolor#2}#3\par}
% {\startsyndef{#2}#3\stopsyndef}
- {\syndef{#2}#3\par}
+ {\syndef{#3}#4\par}
\let\currentsorting\empty
@@ -227,7 +243,7 @@
\newtoks\everysetupsorting
-\def\setupsorting
+\unexpanded\def\setupsorting
{\dodoubleargument\dosetupsorting}
\def\dosetupsorting[#1][#2]%
@@ -248,7 +264,7 @@
%\c!expansion=,
\s!language=\currentmainlanguage]
-\def\definesorting
+\unexpanded\def\definesorting
{\dotripleempty\dodefinesorting}
% if #3=\relax or \v!none, then no command but still protected
@@ -259,19 +275,18 @@
{\ifx#3\relax \else
\unexpanded\def#3##1{\doinsertsort{#1}{##1}}%
\fi}%
- \unexpanded\setvalue{#1}{\definesort[\v!no][#1]}%
+ \setuvalue{#1}{\definesort[\v!no][#1]}%
\else
- \unexpanded\setvalue{#1}{\definesort[\v!yes][#1]}%
+ \setuvalue{#1}{\definesort[\v!yes][#1]}%
\fi
- \getparameters[\??so#1][\s!parent=\??so]%
+ \getparameters[\??so#1][\s!parent=\??so,\s!multi={#2}]%
\presetheadtext[#2=\Word{#2}]% after \ifthirdargument -)
%\ctxlua{joblists.define('#1')}%
\setvalue{\e!setup #2\e!endsetup}{\dodoubleargument\getparameters[\??so#1]}% to be obsolete
- \setvalue{\e!place \e!listof#2}{\doplacelistofsortings{#1}{#2}}%
- \setvalue{\e!complete\e!listof#2}{\docompletelistofsortings{#1}{#2}}}
+ \setvalue{\e!place \e!listof#2}{\placelistofsorts[#1]}%
+ \setvalue{\e!complete\e!listof#2}{\completelistofsorts[#1]}}
-
-\def\definesort
+\unexpanded\def\definesort
{\dotripleempty\dodefinesort}
\def\dodefinesort[#1][#2][#3]#4%
@@ -298,32 +313,46 @@
% used = false,
}
})}%
- \doif{#1}\v!yes{\unexpanded\setxvalue\currentsortingtag{\noexpand\doinsertsort{\currentsorting}{\currentsortingtag}}}%
+ \doif{#1}\v!yes{\setuxvalue\currentsortingtag{\noexpand\doinsertsort{\currentsorting}{\currentsortingtag}}}%
\fi
\endgroup}
-\def\doinsertsort#1#2% name tag
+\unexpanded\def\doinsertsort#1#2% name tag
{\begingroup
% no kap currently, of .. we need to map cap onto WORD
+ \edef\currentsorting{#1}%
\dosetsynonymattributes\c!style\c!color
\ctxlua{joblists.synonym("#1","#2")}%
- \endgroup}
+ \normalexpanded{\endgroup\sortingparameter\c!next}}
+
+\def\registersort
+ {\dodoubleargument\doregistersort}
+
+\def\registersort[#1][#2]%
+ {\ctxlua{joblists.registerused("#1","#2")}}
% before after
%
% maybe just 'commandset' and then combine
-\def\doplacelistofsorts#1% NOG EEN RUWE VERSIE MAKEN ZONDER WITRUIMTE ETC ETC
+\unexpanded\def\placelistofsorts
+ {\dodoubleempty\placelistofsorts}
+
+\unexpanded\def\placelistofsorts[#1][#2]% NOG EEN RUWE VERSIE MAKEN ZONDER WITRUIMTE ETC ETC
{\begingroup
\def\currentsorting{#1}%
+ \getparameters[\??so#1][#2]%
\startpacked
- \ctxlua{joblists.process('#1',{})}%
+ \ctxlua{joblists.process('#1',{ criterium = "\sortingparameter\c!criterium" })}%
\stoppacked
\endgroup}
-\def\docompletelistofsorts#1#2%
- {\normalexpanded{\noexpand\systemsuppliedchapter[#1]{\noexpand\headtext{#2}}}%
- \doplacelistofsorts{#1}%
+\def\completelistofsorts
+ {\dodoubleemptydocompletelistofsorts}
+
+\def\docompletelistofsorts[#1][#2]%
+ {\normalexpanded{\systemsuppliedchapter[#1]{\noexpand\headtext{#2}}}%
+ \doplacelistofsorts[#1][#2]%
\page[\v!yes]}
\let\startsortingoutput \relax
@@ -331,8 +360,10 @@
\let\startsortingsection\gobbleoneargument
\let\stopsortingsection \relax
-\def\sortingentry#1#2#3%
- {\begingroup\dosetsortingattributes\c!style\c!color#2\endgroup\par} % todo
+\def\sortingentry#1#2#3#4% #4 is meaning but empty here
+ {\doifelsenothing{\sortingparameter\c!command}
+ {\begingroup\dosetsortingattributes\c!style\c!color#3\endgroup\par} % todo
+ {\sortingparameter\c!command{#1}{#2}{#3}}}
%D Here we define a support macro that can sort simple comma
%D separated lists. It's a multi-list variant of a prototype
diff --git a/Master/texmf-dist/tex/context/base/strc-xml.mkiv b/Master/texmf-dist/tex/context/base/strc-xml.mkiv
index 3f11c0ac9f8..7a009958597 100644
--- a/Master/texmf-dist/tex/context/base/strc-xml.mkiv
+++ b/Master/texmf-dist/tex/context/base/strc-xml.mkiv
@@ -15,13 +15,23 @@
\unprotect
-\startxmlsetups xml:ctx:tocentry
- \xmlsetsetup{\xmldocument}{ctx:tocentry}{xml:ctx:tocentry}
+\startxmlsetups xml:ctx:internal:setup
+ \xmlsetsetup{\xmldocument}{ctx:genericentry} {xml:ctx:genericentry}
+ \xmlsetsetup{\xmldocument}{ctx:sectionentry} {xml:ctx:sectionentry}
+ \xmlsetsetup{\xmldocument}{ctx:registerentry}{xml:ctx:registerentry}
\stopxmlsetups
-\xmlregistersetup{xml:ctx:tocentry}
+\xmlregistersetup{xml:ctx:internal:setup}
-\startxmlsetups xml:ctx:tocentry
+\startxmlsetups xml:ctx:genericentry
+ \xmlflush{#1}
+\stopxmlsetups
+
+\startxmlsetups xml:ctx:sectionentry
+ \xmlflush{#1}
+\stopxmlsetups
+
+\startxmlsetups xml:ctx:registerentry
\xmlflush{#1}
\stopxmlsetups
diff --git a/Master/texmf-dist/tex/context/base/supp-box.tex b/Master/texmf-dist/tex/context/base/supp-box.tex
index e314305d7dc..4c398973ee3 100644
--- a/Master/texmf-dist/tex/context/base/supp-box.tex
+++ b/Master/texmf-dist/tex/context/base/supp-box.tex
@@ -1897,6 +1897,13 @@
\advance\hsize \scratchdimen
\divide\hsize #3\relax}
+% ==
+%
+% \def\setrigidcolumnhsize#1#2#3%
+% {\xdef\savedrigidhsize{\the\hsize}%
+% \global\chardef\rigidcolumns#3\relax
+% \hsize=\dimexpr(#1-\numexpr#3-1\relax\dimexpr#2\relax)/#3\relax}
+
\newbox\rigidcolumnbox
\let\rigidcolumnlines\!!zerocount
diff --git a/Master/texmf-dist/tex/context/base/supp-dir.mkiv b/Master/texmf-dist/tex/context/base/supp-dir.mkiv
index 2d7f6bd6640..0634bd36f34 100644
--- a/Master/texmf-dist/tex/context/base/supp-dir.mkiv
+++ b/Master/texmf-dist/tex/context/base/supp-dir.mkiv
@@ -15,4 +15,27 @@
\unprotect
+% \expanded{\defineactivecharacter \number"2000E} {\textdir TRT\relax}
+% \expanded{\defineactivecharacter \number"2000F} {\textdir TLT\relax}
+
+\unexpanded\def\showdirsinmargin
+ {\doifelse{\the\pardir}\!!TLT
+ {\inleft{\normalexpanded{\noexpand\hbox dir TLT{\ttxx[\the\pardir,\the\textdir]}}}}
+ {\inleft{\normalexpanded{\noexpand\hbox dir TLT{\ttxx[\the\pardir,\the\textdir]}}}}}
+
+\bgroup
+ \catcode`L=\othercatcode \gdef\istltdir#1#2#3{\if#2L0\else1\fi}
+ \catcode`R=\othercatcode \gdef\istrtdir#1#2#3{\if#2R0\else1\fi}
+\egroup
+
+\def\istlttextdir{\expandafter\istltdir\the\textdir}
+\def\istrttextdir{\expandafter\istrtdir\the\textdir}
+
+\def\istltpardir {\expandafter\istltdir\the\pardir }
+\def\istrtpardir {\expandafter\istrtdir\the\pardir }
+
+% \ifcase\istlttextdir Y\else N\fi
+% \ifcase\istltpardir Y\else N\fi
+% \ifcase\istltdir TRT\relax Y\else N\fi
+
\protect \endinput
diff --git a/Master/texmf-dist/tex/context/base/supp-fil.lua b/Master/texmf-dist/tex/context/base/supp-fil.lua
index a93b0bce92f..8d69f64a72c 100644
--- a/Master/texmf-dist/tex/context/base/supp-fil.lua
+++ b/Master/texmf-dist/tex/context/base/supp-fil.lua
@@ -1,6 +1,6 @@
if not modules then modules = { } end modules ['supp-fil'] = {
version = 1.001,
- comment = "companion to supp-fil.tex",
+ comment = "companion to supp-fil.mkiv",
author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
copyright = "PRAGMA ADE / ConTeXt Development Team",
license = "see context related readme files"
@@ -12,9 +12,10 @@ if not modules then modules = { } end modules ['supp-fil'] = {
at the <l n='tex'/> side.</p>
--ldx]]--
-local find, gsub, match = string.find, string.gsub, string.match
+local find, gsub, match, format, concat = string.find, string.gsub, string.match, string.format, table.concat
+local texsprint, texwrite, ctxcatcodes = tex.sprint, tex.write, tex.ctxcatcodes
-local ctxcatcodes = tex.ctxcatcodes
+local trace_modules = false trackers.register("modules.loading", function(v) trace_modules = v end)
support = support or { }
environment = environment or { }
@@ -26,7 +27,7 @@ function support.checkfilename(str) -- "/whatever..." "c:..." "http://..."
end
function support.thesanitizedfilename(str)
- tex.write((gsub(str,"\\","/")))
+ texwrite((gsub(str,"\\","/")))
end
function support.splitfilename(fullname)
@@ -84,5 +85,195 @@ function support.doiffileexistelse(name)
end
function support.lastexistingfile()
- tex.sprint(ctxcatcodes,lastexistingfile)
+ texsprint(ctxcatcodes,lastexistingfile)
end
+
+-- more, we can cache matches
+
+local finders, loaders, openers = resolvers.finders, resolvers.loaders, resolvers.openers
+
+local found = { } -- can best be done in the resolver itself
+
+-- todo: tracing
+
+local function readfilename(specification,backtrack,treetoo)
+ local fnd = found[specification]
+ if not fnd then
+ local splitspec = resolvers.splitmethod(specification)
+ local filename = splitspec.path or ""
+ if lfs.isfile(filename) then
+ fnd = filename
+ end
+ if not fnd and backtrack then
+ local fname = filename
+ for i=1,backtrack,1 do
+ fname = "../" .. fname
+ if lfs.isfile(fname) then
+ fnd = fname
+ break
+ end
+ end
+ end
+ if not fnd and treetoo then
+--~ fnd = resolvers.find_file(filename)
+ fnd = resolvers.findtexfile(filename)
+ end
+ found[specification] = fnd
+ end
+ return fnd or ""
+end
+
+support.readfilename = readfilename
+
+function finders.job(filename) return readfilename(filename,nil,false) end -- current path, no backtracking
+function finders.loc(filename) return readfilename(filename,2, false) end -- current path, backtracking
+function finders.sys(filename) return readfilename(filename,nil,true ) end -- current path, obeys tex search
+function finders.fix(filename) return readfilename(filename,2, false) end -- specified path, backtracking
+function finders.set(filename) return readfilename(filename,nil,false) end -- specified path, no backtracking
+function finders.any(filename) return readfilename(filename,2, true ) end -- loc job sys
+
+openers.job = openers.generic loaders.job = loaders.generic
+openers.loc = openers.generic loaders.loc = loaders.generic
+openers.sys = openers.generic loaders.sys = loaders.generic
+openers.fix = openers.generic loaders.fix = loaders.generic
+openers.set = openers.generic loaders.set = loaders.generic
+openers.any = openers.generic loaders.any = loaders.generic
+
+function support.doreadfile(protocol,path,name) -- better do a split and then pass table
+ local specification
+ if url.hasscheme(name) then
+ specification = name
+ else
+ specification = ((path == "") and format("%s:///%s",protocol,name)) or format("%s:///%s/%s",protocol,path,name)
+ end
+ texsprint(ctxcatcodes,resolvers.findtexfile(specification))
+end
+
+-- modules can only have a tex or mkiv suffix or can have a specified one
+
+local prefixes = { "m", "p", "s", "x", "t" }
+local suffixes = { "tex", "mkiv" }
+local modstatus = { }
+
+local function usemodule(name,hassheme)
+ local foundname
+ if hasscheme then
+ -- no auto suffix as http will return a home page or error page
+ -- so we only add one if missing
+ local fullname = file.addsuffix(name,"tex")
+ if trace_modules then
+ logs.report("modules","checking scheme driven file '%s'",fullname)
+ end
+ foundname = resolvers.findtexfile(fullname) or ""
+ elseif file.extname(name) ~= "" then
+ if trace_modules then
+ logs.report("modules","checking suffix driven file '%s'",name)
+ end
+ foundname = support.readfilename(name,false,true) or ""
+ else
+ for i=1,#suffixes do
+ local fullname = file.addsuffix(name,suffixes[i])
+ if trace_modules then
+ logs.report("modules","checking suffix driven file '%s'",fullname)
+ end
+ foundname = support.readfilename(fullname,false,true) or ""
+ if foundname ~= "" then
+ break
+ end
+ end
+ end
+ if foundname ~= "" then
+ if trace_modules then
+ logs.report("modules","loading '%s'",foundname)
+ end
+ context.startreadingfile()
+ context.input(foundname)
+ context.stopreadingfile()
+ return true
+ else
+ return false
+ end
+end
+
+function support.usemodules(prefix,askedname,truename)
+ local hasprefix = prefix and prefix ~= ""
+ local hashname = ((hasprefix and prefix) or "*") .. "-" .. truename
+ local status = modstatus[hashname]
+ if status == 0 then
+ -- not found
+ elseif status == 1 then
+ status = status + 1
+ else
+ if trace_modules then
+ logs.report("modules","locating '%s'",truename)
+ end
+ local hasscheme = url.hasscheme(truename)
+ if hasscheme then
+ -- no prefix and suffix done
+ if usemodule(truename,true) then
+ status = 1
+ else
+ status = 0
+ end
+ elseif hasprefix then
+ if usemodule(prefix .. "-" .. truename) then
+ status = 1
+ else
+ status = 0
+ end
+ else
+ for i=1,#prefixes do
+ -- todo: reconstruct name i.e. basename
+ local thename = prefixes[i] .. "-" .. truename
+ if usemodule(thename) then
+ status = 1
+ break
+ end
+ end
+ if status then
+ -- ok, don't change
+ elseif usemodule(truename) then
+ status = 1
+ else
+ status = 0
+ end
+ end
+ end
+ if status == 0 then
+ if trace_modules then
+ logs.report("modules","skipping '%s' (not found)",truename)
+ else
+ interfaces.showmessage("systems",6,askedname)
+ end
+ elseif status == 1 then
+ if not trace_modules then
+ interfaces.showmessage("systems",5,askedname)
+ end
+ else
+ if trace_modules then
+ logs.report("modules","skipping '%s' (already loaded)",truename)
+ else
+ interfaces.showmessage("systems",7,askedname)
+ end
+ end
+ modstatus[hashname] = status
+end
+
+statistics.register("loaded tex modules", function()
+ if next(modstatus) then
+ local t, f = { }, { }
+ for k, v in table.sortedhash(modstatus) do
+ k = file.basename(k)
+ if v == 0 then
+ f[#f+1] = k
+ else
+ t[#t+1] = k
+ end
+ end
+ local ts = (#t>0 and format(" (%s)",concat(t," "))) or ""
+ local fs = (#f>0 and format(" (%s)",concat(f," "))) or ""
+ return format("%s requested, %s found%s, %s missing%s",#t+#f,#t,ts,#f,fs)
+ else
+ return nil
+ 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 1e86498e424..fc0492442ce 100644
--- a/Master/texmf-dist/tex/context/base/supp-fil.mkii
+++ b/Master/texmf-dist/tex/context/base/supp-fil.mkii
@@ -392,6 +392,8 @@
\readfile{#1}{#2}{#3}%
\popcatcodetable}
+\ifdefined\xmlcatcodes \else \let\xmlcatcodes\xmlcatcodesn \fi
+
\def\readxmlfile#1#2#3%
{\pushcatcodetable \catcodetable \xmlcatcodes
\readfile{#1}{#2}{#3}%
diff --git a/Master/texmf-dist/tex/context/base/supp-fil.mkiv b/Master/texmf-dist/tex/context/base/supp-fil.mkiv
index 00263a85fbd..872612eab0b 100644
--- a/Master/texmf-dist/tex/context/base/supp-fil.mkiv
+++ b/Master/texmf-dist/tex/context/base/supp-fil.mkiv
@@ -194,7 +194,7 @@
\def\inputgivenfile#1{\normalinput"#1"\relax}
%D \macros
-%D {readfile,ReadFile,maxreadlevel}
+%D {readfile,ReadFile}
%D
%D One cannot be sure if a file exists. When no file can be
%D found, the \type{\input} primitive gives an error message
@@ -236,13 +236,7 @@
%D We first present an earlier implementation of
%D \type{\readfile}. This command backtracks parent
%D directories, upto a predefined level. Users can change this
-%D level, but we default to~3.
-%D
-%D \starttyping
-%D \def\maxreadlevel {3}
-%D \stoptyping
-%D
-%D This is a pseudo \COUNTER.
+%D level (on the commandline using a directive); we default to~3.
%D
%D We use \type{\normalinput} instead of \type{\input}
%D because we want to be able to redefine the original
@@ -254,106 +248,27 @@
\let \everyreadfile \everybeforereadfile
-\newif\iftracefiles
-
-\newcount\readlevel
-
-\def\maxreadlevel{3}
-
-\newconditional\trackfilenames
-\let\trackedfilename\empty
+\def\maxreadlevel{\ctxlua{commands.maxreadlevel()}}
% We need to postpone loading, else we got frozen type-* files and so when
% a format is generated on a source path.
-\def\doreadfile#1#2#3#4%
- {\sanitizefilename#2\to\readfilename
+\def\doreadfile#1#2#3% protocol path filename true false
+ {\edef\readfilename{\ctxlua{support.doreadfile("#1","#2","#3")}}%
\ifx\readfilename\empty
- % silently ignore
+ \expandafter\doreadfilenop
\else
- \let\trackedfilename\readfilename
- \ifconditional\trackfilenames
- \doifundefinedelse{fn..\trackedfilename}\donetrue\donefalse
- \else
- \donetrue
- \fi
- \ifdone
- \checkfilename\readfilename
- \ifcase\kindoffile
- \iftracefiles\writestatus\m!systems{searching for \readfilename\space on #1}\fi
- % not a full path or url, check for existence
- \doifelsenothing{#1}
- {\def\next{\redoreadfile\readfilename{#3}{#4}}}%
- {\def\next{\redoreadfile{\pathplusfile{#1}{\readfilename}}{#3}{#4}}}%
- \else
- % a full path or url, no further checking done
- \doiffileexistselse\readfilename
- {\iftracefiles\writestatus\m!systems{located \readfilename}\fi
- \def\next{#3\dodoreadfile}}%
- {\iftracefiles\writestatus\m!systems{not found \readfilename}\fi
- \def\next{#4}}%
- \fi
- \else
- \edef\readfilename{\getvalue{fn..\readfilename}}%
- \iftracefiles\writestatus\m!systems{already located \readfilename}\fi
- \def\next{#3\dodoreadfile}%
- \fi
- \expandafter\next
+ \expandafter\doreadfileyes
\fi}
-\def\redoreadfile#1#2#3%
- {\doiffileexistselse{#1}%
- {\edef\readfilename{#1}%
- \iftracefiles\writestatus\m!systems{#1 located}\fi
- \def\next{#2\dodoreadfile}}%
- {\iftracefiles\writestatus\m!systems{cannot locate #1}\fi
- \advance\readlevel\minusone
- \ifnum\readlevel>\zerocount
- \edef\readfilename{\pathplusfile{\f!parentpath}{\readfilename}}%
- \def\next{\redoreadfile\readfilename{#2}{#3}}%
- \else
- \def\next{#3}%
- \fi}%
- \next}
-
-\def\dodoreadfile % we provide hooks, for instance for \enableXML
- {\ifconditional\trackfilenames
- \setxvalue{fn..\trackedfilename}{\readfilename}%
- \fi
+\long\def\doreadfileyes#1#2%
+ {#1\relax
\the\everybeforereadfile
\relax\inputgivenfile\readfilename\relax
\the\everyafterreadfile}
-% too less:
-%
-% \unexpanded\def\readfile% #1%
-% {\readlevel\maxreadlevel
-% \doreadfile\empty} % {#1}
-%
-% too much:
-%
-% \unexpanded\def\readfile#1#2#3%
-% {\readlocfile{#1}{#2}
-% {\readjobfile{#1}{#2}
-% {\readsysfile{#1}{#2}{#3}}}}
-%
-% just ok:
-
-\unexpanded\def\readfile#1#2#3%
- {\readlocfile{#1}{#2}{\readsysfile{#1}{#2}{#3}}}
-
-\def\readtexfile#1#2#3%
- {\pushcatcodetable \catcodetable \ctxcatcodes
- \readfile{#1}{#2}{#3}%
- \popcatcodetable}
-
-\def\readxmlfile#1#2#3%
- {\pushcatcodetable \catcodetable \xmlcatcodes
- \readfile{#1}{#2}{#3}%
- \popcatcodetable}
-
-\unexpanded\def\ReadFile#1%
- {\readfile{#1}\donothing\donothing}
+\long\def\doreadfilenop#1#2%
+ {#2}
%D \macros
%D {readjobfile,readlocfile,readsysfile,
@@ -366,45 +281,26 @@
%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~\number\readlevel\ directories, including the current
+%D backtracks~\number\maxreadlevel\ directories, including the current
%D one.
-
-\unexpanded\def\readjobfile % #1% current path, no backtracking
- {\readlevel\zerocount
- \doreadfile\f!currentpath} % {#1}}
-
-\unexpanded\def\readlocfile % #1% current path, backtracking
- {\readlevel\maxreadlevel
- \doreadfile\f!currentpath} % {#1}}
-
+%D
%D System files can be anywhere and therefore
%D \type{\readsysfile} is not bound to the current directory
%D and obeys the \TEX\ implementation.
-
-\unexpanded\def\readsysfile % #1% current path, obeys tex search
- {\readlevel\zerocount
- \doreadfile\empty} % {#1}}
-
+%D
%D Of the last two, \type{\readfixfile} searches on the
%D directory specified and backtracks too, while
%D \type{\readsetfile} does only search on the specified path.
+%D
+%D The most liberal is \type {\readfile}.
-\unexpanded\def\readfixfile % #1#2% specified path, backtracking
- {\readlevel\maxreadlevel
- \doreadfile} % {#1}{#2}}
-
-\unexpanded\def\readsetfile % #1#2% specified path, no backtracking
- {\readlevel\zerocount
- \doreadfile} % {#1}{#2}}
-
-%D After having defined this commands, we reconsidered the
-%D previously defined \type{\readfile}. This time we more or
-%D less impose the search order.
-
-\unexpanded\def\readfile#1#2#3%
- {\readlocfile{#1}{#2}
- {\readjobfile{#1}{#2}
- {\readsysfile{#1}{#2}{#3}}}}
+\unexpanded\def\readjobfile #1{\doreadfile{job} {.}{#1}} % current path, no backtracking
+\unexpanded\def\readlocfile #1{\doreadfile{loc} {.}{#1}} % current path, backtracking
+\unexpanded\def\readsysfile #1{\doreadfile{sys} {.}{#1}} % current path, obeys tex search
+\unexpanded\def\readfixfile#1#2{\doreadfile{fix}{#1}{#2}} % specified path, backtracking
+\unexpanded\def\readsetfile#1#2{\doreadfile{set}{#1}{#2}} % specified path, no backtracking
+\unexpanded\def\readfile #1{\doreadfile{any} {.}{#1}}
+\unexpanded\def\ReadFile #1{\doreadfile{any} {.}{#1}\donothing\donothing}
%D So now we've got ourselves five file loading commands:
%D
@@ -417,44 +313,15 @@
%D \readsysfile {directory} {filename} {before loading} {not found}
%D \stoptyping
-%D \macros
-%D {readjobfile,readlocfile,readsysfile,readfixfile}
-%D
-%D The next four alternatives can be used for opening files
-%D for reading on a line||by||line basis. These commands get
-%D an extra argument, the filetag. Explicit closing is done
-%D in the normal way by \type{\closein}.
-
-\def\doopenin#1#2%
- {\sanitizefilename#2\to\readfilename
- \checkfilename\readfilename
- \ifcase\kindoffile
- \advance\readlevel\plusone
- \openinputfile{#1}\readfilename
- \ifeof#1% \relax
- \ifnum\readlevel>\maxreadlevel % \relax
- \else
- \closeinputfile#1% \relax
- \doopenin{#1}{\pathplusfile\f!parentpath{#2}}%
- \fi
- \fi
- \fi}
-
-\def\openjobin#1#2%
- {\readlevel\zerocount
- \doopenin{#1}{\pathplusfile\f!currentpath{#2}}}
-
-\def\opensysin % #1#2%
- {\readlevel\maxreadlevel
- \doopenin} % {#1}{#2}}
-
-\def\openlocin#1#2%
- {\readlevel\maxreadlevel
- \doopenin{#1}{\pathplusfile\f!currentpath{#2}}}
+\def\readtexfile#1#2#3%
+ {\pushcatcodetable \catcodetable \ctxcatcodes
+ \readfile{#1}{#2}{#3}%
+ \popcatcodetable}
-\def\openfixin#1#2#3%
- {\readlevel\maxreadlevel
- \doopenin{#1}{\pathplusfile{#2}{#3}}}
+\def\readxmlfile#1#2#3%
+ {\pushcatcodetable \catcodetable \xmlcatcodes
+ \readfile{#1}{#2}{#3}%
+ \popcatcodetable}
%D \macros
%D {doiffileelse,doiflocfileelse}
@@ -545,13 +412,13 @@
\newtoks \everystartreadingfile
\newtoks \everystopreadingfile
-\def\startreadingfile% beter een every en \setnormalcatcodes
+\unexpanded\def\startreadingfile% beter een every en \setnormalcatcodes
{\global\advance\readingfilelevel\plusone
\the\everystartreadingfile
\beginrestorecatcodes
\setcatcodetable\prtcatcodes}
-\def\stopreadingfile
+\unexpanded\def\stopreadingfile
{\endrestorecatcodes
\the\everystopreadingfile
\global\advance\readingfilelevel\minusone}
diff --git a/Master/texmf-dist/tex/context/base/supp-mat.tex b/Master/texmf-dist/tex/context/base/supp-mat.mkii
index 1a51164e676..1a51164e676 100644
--- a/Master/texmf-dist/tex/context/base/supp-mat.tex
+++ b/Master/texmf-dist/tex/context/base/supp-mat.mkii
diff --git a/Master/texmf-dist/tex/context/base/supp-mat.mkiv b/Master/texmf-dist/tex/context/base/supp-mat.mkiv
new file mode 100644
index 00000000000..4aebddda91d
--- /dev/null
+++ b/Master/texmf-dist/tex/context/base/supp-mat.mkiv
@@ -0,0 +1,293 @@
+%D \module
+%D [ file=supp-mat,
+%D version=1998.09.10,
+%D title=\CONTEXT\ Support Macros,
+%D subtitle=Math,
+%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 For practical reasons, I decided to move some math things to
+%D a support module. There is nothing spectacular here. It may move
+%D back to math-ini.
+
+\writestatus{loading}{ConTeXt Support Macros / Math}
+
+\unprotect
+
+%D \macros
+%D {mathematics, math, nomathematics, startmathmode}
+%D
+%D The \type{$} can be both an begin and end math character.
+%D This can lead to confusing and errorprone situations when
+%D macros insert \type{$}. When for instance we have defined:
+%D
+%D \starttyping
+%D \def\MyPlus{$\,+\,$}
+%D \stoptyping
+%D
+%D the sequence \type{$x^2 \MyPlus y^2 = r^2$} will expand to:
+%D
+%D \starttyping
+%D $x^2 $\,+\,$ y^2 = r^2$
+%D \stoptyping
+%D
+%D Here the \type{\,} are given outside math mode and \TEX\ will
+%D definitely complain about this. A more save definition would
+%D have been:
+%D
+%D \starttyping
+%D \def\MyPlus{\mathematics{\,+\,}}
+%D \stoptyping
+%D
+%D Which is implemented as:
+
+\long\def\mathematics#1{\relax \ifmmode#1\else\Ustartmath #1\Ustopmath \fi}
+\long\def\displaymath#1{\noindent \ifmmode#1\else\Ustartdisplaymath#1\Ustopdisplaymath\fi}
+\long\def\inlinemath #1{\dontleavehmode\ifmmode#1\else\Ustartmath #1\Ustopmath \fi}
+
+\let\stopmathmode\relax
+
+\unexpanded\def\startmathmode % cannot be used nested
+ {\relax\ifmmode
+ \let\stopmathmode\relax
+ \else
+ \Ustartmath\let\stopmathmode\Ustopmath
+ \fi}
+
+\unexpanded\def\startmathmode % nested variant
+ {\relax\ifmmode
+ \begingroup\let\stopmathmode\endgroup
+ \else
+ \Ustartmath\let\stopmathmode\Ustopmath
+ \fi}
+
+\def\nomathematics#1%
+ {\relax\ifmmode\hbox{#1}\else#1\fi}
+
+\let\math\mathematics
+
+%D \macros
+%D {displaymathematics,inlinemathematics,automathematics}
+%D
+%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}
+ \def\inlinemathematics {\dontleavehmode\mathematics}
+ \def\automathematics {\relax\ifhmode\@EA\inlinemathematics\else\@EA\displaymathematics\fi}
+
+% better, esp when used in bTABLE ... eTABLE
+
+\def\automathematics
+ {\relax
+ \ifhmode
+ \expandafter\inlinemathematics
+ \else\ifintable
+ \expandafter\expandafter\expandafter\inlinemathematics
+ \else
+ \expandafter\expandafter\expandafter\displaymathematics
+ \fi\fi}
+
+%D \macros
+%D {dimension, nodimension}
+%D
+%D The next few macros are used for typesetting dimensions in
+%D such a way that spacing is acceptable. I won't spend much
+%D words on these macros, because they will be overloaded in
+%D the units module.
+
+\newsignal\dimensionsignal
+
+\def\dimensiontypeface {\tf}
+\def\dimensionhalfspace {\,}
+
+\unexpanded\def\dimension#1%
+ {\def\dodimensionsignal{\kern\dimensionsignal}%
+ \ifdim\lastskip=\zeropoint\relax
+ \ifdim\lastkern=\zeropoint\relax
+ \ifmmode
+ \mathematics{\dimensionhalfspace\dimensionhalfspace\dimensiontypeface#1}%
+ \else
+ \mathematics{\dimensiontypeface#1}%
+ \fi
+ \else\ifdim\lastkern=\dimensionsignal
+ \mathematics{\dimensionhalfspace\dimensiontypeface#1}%
+ \else
+ \unkern\mathematics{\dimensionhalfspace\dimensionhalfspace\dimensiontypeface#1}%
+ \fi\fi
+ \else
+ \unskip\mathematics{\dimensionhalfspace\dimensionhalfspace\dimensiontypeface#1}%
+ \fi
+ \dodimensionsignal}
+
+\unexpanded\def\nodimension#1%
+ {\unskip#1\global\let\dodimensionsignal\relax}
+
+%D \macros
+%D {super, suber}
+%D
+%D \TEX\ uses \type{^} and \type{_} for entering super- and
+%D subscript mode. We want however a bit more control than
+%D normally provided, and therefore provide \type {\super}
+%D and \type{\suber} (\type {\sub} is already taken).
+
+\global\let\normalsuper=^
+\global\let\normalsuber=_
+
+\newcount\supersubmode
+
+\newevery\everysupersub \EverySuperSub
+
+\appendtoks \advance\supersubmode 1\relax \to \everysupersub
+
+% \def\dodosuper#1{\normalsuper{\the\everysupersub#1}}
+% \def\dodosuber#1{\normalsuber{\the\everysupersub#1}}
+%
+% \def\dosuper{\ifx\next\bgroup\expandafter\dodosuper\else\normalsuper\fi}
+% \def\dosuber{\ifx\next\bgroup\expandafter\dodosuber\else\normalsuber\fi}
+%
+% \def\super{\futurelet\next\dosuper}
+% \def\suber{\futurelet\next\dosuber}
+
+\def\super#1{\normalsuper{\the\everysupersub#1}}
+\def\suber#1{\normalsuber{\the\everysupersub#1}}
+
+%D \macros
+%D {enablesupsub}
+%D
+%D We can let \type {^} and \type {_} act like \type {\super}
+%D and \type {\suber} by saying \type {\enablesupsub}.
+
+\bgroup
+\catcode`\^=\@@active
+\catcode`\_=\@@active
+\gdef\enablesupsub
+ {\catcode`\^=\@@active
+ \def^{\ifmmode\expandafter\super\else\expandafter\normalsuper\fi}%
+ \catcode`\_=\@@active
+ \def_{\ifmmode\expandafter\suber\else\expandafter\normalsuber\fi}}
+\egroup
+
+%D \macros
+%D {restoremathstyle}
+%D
+%D We can pick up the current math style by calling \type
+%D {\restoremathstyle}.
+
+\def\restoremathstyle
+ {\ifmmode
+ \ifcase\supsubmode
+ \textstyle
+ \or
+ \scriptstyle
+ \else
+ \scriptscriptstyle
+ \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 (\useurl
+%D {http://www.ctan.org/tex-archive/digests/tex-implementors/042}).
+%D
+%D \startbuffer
+%D \ruledhbox{$\left\{{x^2\over y^2}\right\}$}
+%D \ruledhbox{$\cramped{\left\{ {x^2\over y^2}\right\}}$}
+%D \stopbuffer
+%D
+%D \typebuffer \getbuffer
+
+\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
+% $\mathsurround\zeropoint#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
+ \Ustartmath\mathsurround\zeropoint#1\radical\zerocount{#2}\Ustopmath}%
+ \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-mis.mkii b/Master/texmf-dist/tex/context/base/supp-mis.mkii
index 5b45d8b9da0..f3bde453ba2 100644
--- a/Master/texmf-dist/tex/context/base/supp-mis.mkii
+++ b/Master/texmf-dist/tex/context/base/supp-mis.mkii
@@ -91,8 +91,7 @@
\ifnocontextobject \writestatus \do
- \def\writestatus#1#2%
- {\immediate\write16{#1 : #2}}
+ \def\writestatus#1#2{\immediate\write16{#1 : #2}}
\fi
@@ -704,6 +703,30 @@
\let\newconditional = \setfalse
\let\ifconditional = \ifcase
+%D We could load \type {norm-tex} but this takes less hash space:
+
+\let \normalif = \if
+\let \normalifcase = \ifcase
+\let \normalifcat = \ifcat
+\let \normalifdim = \ifdim
+\let \normalifeof = \ifeof
+\let \normaliffalse = \iffalse
+\let \normalifhbox = \ifhbox
+\let \normalifhmode = \ifhmode
+\let \normalifinner = \ifinner
+\let \normalifmmode = \ifmmode
+\let \normalifnum = \ifnum
+\let \normalifodd = \ifodd
+\let \normaliftrue = \iftrue
+\let \normalifvbox = \ifvbox
+\let \normalifvmode = \ifvmode
+\let \normalifvoid = \ifvoid
+\let \normalifx = \ifx
+\let \normalfi = \fi
+\let \normalelse = \else
+
+\let \normalunexpanded = \unexpanded % beware the primitive, not the context one
+
%D That's it. Please forget this junk and take a look at how
%D it should be done.
diff --git a/Master/texmf-dist/tex/context/base/supp-mis.tex b/Master/texmf-dist/tex/context/base/supp-mis.tex
index c5c2dfb851c..bda8d4f6fda 100644
--- a/Master/texmf-dist/tex/context/base/supp-mis.tex
+++ b/Master/texmf-dist/tex/context/base/supp-mis.tex
@@ -1,5 +1,4 @@
-% This file is not needed, for instance supp-pdf has the relevant code
-% built in and ppchtex is adapted.
-
-\input supp-mis.mkii
-
+% This file is not needed, for instance supp-pdf has the relevant code
+% built in and ppchtex is adapted.
+
+\input supp-mis.mkii
diff --git a/Master/texmf-dist/tex/context/base/supp-mpe.tex b/Master/texmf-dist/tex/context/base/supp-mpe.tex
index 27518ba6125..f4438133a2a 100644
--- a/Master/texmf-dist/tex/context/base/supp-mpe.tex
+++ b/Master/texmf-dist/tex/context/base/supp-mpe.tex
@@ -1,5 +1,4 @@
-% This file is not needed as I don't expect other macro packages
-% to support the metafun extensions.
-
-\input supp-mpe.mkii
-
+% This file is not needed as I don't expect other macro packages
+% to support the metafun extensions.
+
+\input supp-mpe.mkii
diff --git a/Master/texmf-dist/tex/context/base/supp-mps.mkii b/Master/texmf-dist/tex/context/base/supp-mps.mkii
index 3629ccf0b4a..b071ffe72de 100644
--- a/Master/texmf-dist/tex/context/base/supp-mps.mkii
+++ b/Master/texmf-dist/tex/context/base/supp-mps.mkii
@@ -236,7 +236,8 @@
%D The next hack prevents too long lines:
\long\def\runtimeobeyMPlines
- {\ifx\rawcharacter\undefined
+ {\catcode35=11\relax % goodie
+ \ifx\rawcharacter\undefined
\let\obeyedline\space
\else
\obeylines
diff --git a/Master/texmf-dist/tex/context/base/supp-num.tex b/Master/texmf-dist/tex/context/base/supp-num.tex
index 130fd393844..d192ab54836 100644
--- a/Master/texmf-dist/tex/context/base/supp-num.tex
+++ b/Master/texmf-dist/tex/context/base/supp-num.tex
@@ -195,23 +195,25 @@
%D Although we could do with one pass, a second pass for
%D handling the stored sequence is more readable.
-\startmode[mkiv]
+\ifnum\texengine=\luatexengine
\def\dohandledigits
- {\mathcode`\,="003B \mathcode`\.="003A % pretty hard coded
+ {\mathcode`\,="002C \mathcode`\.="002E % pretty hard coded
\expandafter\handletokens\collecteddigits\with\scandigits
\ifcase\powerdigits\else\digitpowerseparator^{\savedpowerdigits}\fi}
-\stopmode
+ \chardef\mathaxisfontid\zerocount
-\startnotmode[mkiv]
+\else
\def\dohandledigits
{\mathcode`\,="013B \mathcode`\.="013A % pretty hard coded
\expandafter\handletokens\collecteddigits\with\scandigits
\ifcase\powerdigits\else\digitpowerseparator^{\savedpowerdigits}\fi}
-\stopnotmode
+ \chardef\mathaxisfontid\plustwo
+
+\fi
\def\doscandigit#1%
{\ifcase\skipdigit\@EA\hbox\else\@EA\hphantom\fi\bgroup
@@ -230,7 +232,6 @@
\fi}%
\egroup}
-
%D The signs can be made smaller and sqeezed into the width
%D of a digit. Watch the \type {\mathaxisheight} trickery (this
%D font related register stored the math axis).
@@ -317,9 +318,9 @@
{\ifcase\digitsignmode#1\else
\hbox
{\setbox\scratchbox\hbox{0}%
- \scratchdimen\mathaxisheight\textfont2
+ \scratchdimen\mathaxisheight\textfont\mathaxisfontid
\def\digitsgn##1##2%
- {\advance\scratchdimen-\mathaxisheight##12
+ {\advance\scratchdimen-\mathaxisheight##1\mathaxisfontid
\raise\scratchdimen
\hbox to \wd\scratchbox{\hss$##2#1$\hss}}%
\ifcase\digitsignmode\or
@@ -390,7 +391,7 @@
%D
%D We also permit:
-\let\Digits=\digits
+\let\Digits\digits
%D These macros are complicated by the fact that we also
%D have to support cases like:
@@ -435,8 +436,8 @@
\handletokens#1\with\scandigittemplate}
\def\scandigittemplate#1%
- {\if #1.\ifcase\digitinputmode\chardef\digitinputmode1 \fi% period
- \else\if#1,\ifcase\digitinputmode\chardef\digitinputmode2 \fi% comma
+ {\if #1.\ifcase\digitinputmode\chardef\digitinputmode\plusone \fi% period
+ \else\if#1,\ifcase\digitinputmode\chardef\digitinputmode\plustwo \fi% comma
\fi\fi}
\protect \endinput
diff --git a/Master/texmf-dist/tex/context/base/supp-pdf.tex b/Master/texmf-dist/tex/context/base/supp-pdf.tex
index a7467fce81e..2ae87806782 100644
--- a/Master/texmf-dist/tex/context/base/supp-pdf.tex
+++ b/Master/texmf-dist/tex/context/base/supp-pdf.tex
@@ -1,2 +1 @@
-\input supp-pdf.mkii
-
+\input supp-pdf.mkii
diff --git a/Master/texmf-dist/tex/context/base/supp-ran.lua b/Master/texmf-dist/tex/context/base/supp-ran.lua
index 9e4330f57ca..fe635fc7f9e 100644
--- a/Master/texmf-dist/tex/context/base/supp-ran.lua
+++ b/Master/texmf-dist/tex/context/base/supp-ran.lua
@@ -11,7 +11,20 @@ if not modules then modules = { } end modules ['supp-ran'] = {
commands = commands or { }
-local texwrite, random, seed, last = tex.write, math.random, false, 1
+local random, randomseed, round, seed, last = math.random, math.randomseed, math.round, false, 1
+local texwrite = tex.write
+
+function math.setrandomseedi(n,comment)
+ if n <= 1 then
+ n = n*1073741823 -- maxcount
+ end
+ n = round(n)
+ if false then
+ logs.report("system","setting random seed to %s (%s)",n,comment or "normal")
+ end
+ randomseed(n)
+ last = random(0,1073741823) -- we need an initial value
+end
function commands.getrandomcounta(min,max)
last = random(min,max)
@@ -25,22 +38,30 @@ end
function commands.setrandomseed(n)
last = n
- math.randomseed(n)
+ math.setrandomseedi(n)
end
function commands.getrandomseed(n)
texwrite(last)
end
-function commands.freezerandomseed()
- if seed == false then
+-- maybe stack
+
+function commands.freezerandomseed(n)
+ -- print("<<<<",seed,last)
+ if seed == false or seed == nil then
seed = last
+ math.setrandomseedi(seed,"freeze",seed)
+ end
+ if n then
+ randomseed(n)
end
end
function commands.defrostrandomseed()
+ -- print(">>>>",seed,last)
if seed ~= false then
- math.randomseed(last)
+ math.setrandomseedi(seed,"defrost",seed) -- was last (bug)
seed = false
end
end
diff --git a/Master/texmf-dist/tex/context/base/supp-vis.tex b/Master/texmf-dist/tex/context/base/supp-vis.tex
index 82ada920229..f38c8e1e353 100644
--- a/Master/texmf-dist/tex/context/base/supp-vis.tex
+++ b/Master/texmf-dist/tex/context/base/supp-vis.tex
@@ -201,11 +201,12 @@
%D offers \type{\hfilneg} and \type{\vfilneg}, we define our
%D own alternative double \type{ll}'ed ones.
-\def\hfillneg
- {\normalhskip\zeropoint \!!plus-1fill\relax}
-
-\def\vfillneg
- {\normalvskip\zeropoint \!!plus-1fill\relax}
+\def\hfilneg {\normalhskip\zeropoint \!!plus-1fil\relax}
+\def\vfilneg {\normalvskip\zeropoint \!!plus-1fil\relax}
+\def\hfillneg {\normalhskip\zeropoint \!!plus-1fill\relax}
+\def\vfillneg {\normalvskip\zeropoint \!!plus-1fill\relax}
+\def\hfilllneg{\normalhskip\zeropoint \!!plus-1filll\relax}
+\def\vfilllneg{\normalvskip\zeropoint \!!plus-1filll\relax}
%D \macros
%D {normalhss,normalhfil,normalhfill,
diff --git a/Master/texmf-dist/tex/context/base/symb-ini.mkiv b/Master/texmf-dist/tex/context/base/symb-ini.mkiv
index 253a7c41ce9..f4f6bdd7965 100644
--- a/Master/texmf-dist/tex/context/base/symb-ini.mkiv
+++ b/Master/texmf-dist/tex/context/base/symb-ini.mkiv
@@ -45,7 +45,7 @@
% ss:set:tag -> symbol out of set
% sstag -> list of symbols in set
-\def\definesymbol
+\unexpanded\def\definesymbol
{\dotripleempty\dodefinesymbol}
% \def\dodefinesymbol[#1][#2][#3]% class name meaning
@@ -155,7 +155,7 @@
\appendtoks \resetexternalfigures \to \everysymbol
-\def\definefiguresymbol
+\unexpanded\def\definefiguresymbol
{\dotripleempty\dodefinefiguresymbol}
\def\dodefinefiguresymbol[#1][#2][#3]%
@@ -233,15 +233,15 @@
\let\currentsymboldef\empty
-\def\startsymbolset[#1]
+\unexpanded\def\startsymbolset[#1]
{\def\currentsymboldef{#1}}
-\def\stopsymbolset
+\unexpanded\def\stopsymbolset
{\let\currentsymboldef\empty}
\newtoks\symbolsetups
-\def\setupsymbolset[#1]%
+\unexpanded\def\setupsymbolset[#1]%
{\prependtoksonce\fetchsymbol{#1}\to\symbolsetups}
\def\resetsymbolset
diff --git a/Master/texmf-dist/tex/context/base/syst-aux.mkiv b/Master/texmf-dist/tex/context/base/syst-aux.mkiv
index 995a0cb6e02..fcc1ee88f1e 100644
--- a/Master/texmf-dist/tex/context/base/syst-aux.mkiv
+++ b/Master/texmf-dist/tex/context/base/syst-aux.mkiv
@@ -428,6 +428,11 @@
\def\undefinevalue#1{\expandafter\let\csname#1\endcsname\undefined}
\def\ignorevalue#1#2{\expandafter\let\csname#1\endcsname\empty}
+\def\setuvalue #1{\normalprotected\expandafter \def\csname#1\endcsname}
+\def\setuevalue #1{\normalprotected\expandafter\edef\csname#1\endcsname}
+\def\setugvalue #1{\normalprotected\expandafter\gdef\csname#1\endcsname}
+\def\setuxvalue #1{\normalprotected\expandafter\xdef\csname#1\endcsname}
+
%D \macros
%D {globallet,glet}
%D
@@ -439,26 +444,19 @@
\def\globallet{\global\let} \let\glet\globallet
%D \macros
-%D {donottest,unexpanded}
-%D
-%D When expansion of a macro gives problems, we can precede it
-%D by \type{\donottest}. It seems that protection is one of the
-%D burdens of developers of packages, so maybe that's why in
-%D \ETEX\ protection is solved in a more robust way.
+%D {unexpanded}
%D
-%D Because we use thi smodule onl in \MKIV, we have removed the
+%D Because we use this module only in \MKIV, we have removed the
%D old protection code.
%D
%D \starttyping
%D \unexpanded\def\somecommand{... ... ...}
%D \stoptyping
+%D
+%D This overloads the \ETEX\ primitive but as we already had an \MKII\
+%D solution we keep the same name for a similar mechanism.
-\let \donottest \firstofoneargument % we need to weed
-\let \honorunexpanded \empty % we need to weed
-\let \forceunexpanded \empty % we need to weed
-\let \resetunexpanded \empty % we need to weed
-
-\let \unexpanded \normalprotected
+\let\unexpanded\normalprotected
%D \macros
%D {doifundefined,doifdefined,
@@ -623,8 +621,7 @@
\fi}
%D \macros
-%D {doif,doifelse,doifnot,
-%D donottest}
+%D {doif,doifelse,doifnot}
%D
%D Programming in \TEX\ differs from programming in procedural
%D languages like \MODULA. This means that one --- well, let me
@@ -641,9 +638,6 @@
%D \doifnot {string1} {string2} {...}
%D \doifelse {string1} {string2} {then ...}{else ...}
%D \stoptyping
-%D
-%D When expansion gives problems, we can precede the
-%D troublemaker with \type{\donottest}.
\long\def\doif#1#2%
{\edef\!!stringa{#1}\edef\!!stringb{#2}%
@@ -1120,6 +1114,15 @@
\def\processcommacommand[#1]%
{\expandafter\processcommalist\expandafter[\normalexpanded{#1}]}
+% \def\processcommacommand[#1]%
+% {\edef\expandedcommacommand{#1%
+% \ifx\expandedcommacommand\empty\else
+% \doprocesscommacommand
+% \fi}
+%
+% \def\doprocesscommacommand
+% {\expandafter\processcommalist\expandafter[\expandedcommacommand]}
+
%D The argument to \type{\command} is not delimited. Because
%D we often use \type{[]} as delimiters, we also have:
%D
@@ -1142,11 +1145,11 @@
%D
%D Two more:
-\long\def\startprocesscommalist[#1]#2\stopprocesscommalist
+\long\unexpanded\def\startprocesscommalist[#1]#2\stopprocesscommalist
{\long\def\currentcommalistcommand##1{\def\currentcommalistitem{##1}#2}%
\processcommalist[#1]\currentcommalistcommand}
-\long\def\startprocesscommacommand[#1]#2\stopprocesscommacommand
+\long\unexpanded\def\startprocesscommacommand[#1]#2\stopprocesscommacommand
{\long\def\currentcommalistcommand##1{\def\currentcommalistitem{##1}#2}%
\normalexpanded{\noexpand\processcommacommand[#1]}\currentcommalistcommand}
@@ -1779,6 +1782,7 @@
\def\getparameters {\dogetparameters\dosetvalue}
\def\geteparameters {\dogetparameters\dosetevalue}
\def\getgparameters {\dogetparameters\dosetgvalue}
+\def\getxparameters {\dogetparameters\dosetxvalue}
\def\forgetparameters{\dogetparameters\doignorevalue}
\let\getexpandedparameters=\geteparameters
@@ -1864,11 +1868,11 @@
\def\processassignmentcommand[#1]%
{\normalexpanded{\noexpand\processassignmentlist[#1]}}
-\long\def\startprocessassignmentlist[#1]#2\stopprocessassignmentlist
+\long\unexpanded\def\startprocessassignmentlist[#1]#2\stopprocessassignmentlist
{\long\def\currentassignmentlistcommand##1##2{\def\currentassignmentlistkey{##1}\def\currentassignmentlistvalue{##2}#2}%
\processassignmentlist[#1]\currentassignmentlistcommand}
-\long\def\startprocessassignmentcommand[#1]#2\stopprocessassignmentcommand
+\long\unexpanded\def\startprocessassignmentcommand[#1]#2\stopprocessassignmentcommand
{\long\def\currentassignmentlistcommand##1##2{\def\currentassignmentlistkey{##1}\def\currentassignmentlistvalue{##2}#2}%
\normalexpanded{\noexpand\processassignmentlist[#1]}\currentassignmentlistcommand}
@@ -1909,13 +1913,24 @@
\def\xdoget@n@parameters#1]%
{\xprocesscommaitem#1,],\@relax@}
+% \def\xdoget@e@parameters#1]%
+% {\let\dosetnvalue\dosetvalue
+% \let\dosetvalue\dosetevalue
+% \let\p!doassign\p!e!doassign
+% \xprocesscommaitem#1,],\@relax@
+% \let\p!doassign\p!n!doassign
+% \let\dosetvalue\dosetnvalue
+% \let\xdogetparameters\xdoget@n@parameters
+% \let\currentvalue\empty}
+
\def\xdoget@e@parameters#1]%
- {\let\dosetnvalue\dosetvalue
- \let\dosetvalue\dosetevalue
+ {\let\dosetnvalue\setsomevalue
+ \let\setsomevalue\dosetevalue
\let\p!doassign\p!e!doassign
+ \let\setsomevalue\dosetevalue
\xprocesscommaitem#1,],\@relax@
\let\p!doassign\p!n!doassign
- \let\dosetvalue\dosetnvalue
+ \let\setsomevalue\dosetnvalue
\let\xdogetparameters\xdoget@n@parameters
\let\currentvalue\empty}
@@ -2137,7 +2152,7 @@
%D \def\dosetupsomething[#1][#2]%
%D {... #1 ... #2 ...}
%D
-%D \def\setupsomething
+%D \unexpanded\def\setupsomething
%D {\dodoubleargument\dosetupsomething}
%D \stoptyping
%D
@@ -2475,13 +2490,13 @@
\def\docomplexorsimpleempty#1%
{\doifnextoptionalelse{\firstargumenttrue#1}{\firstargumentfalse#1[]}}
-\def\definecomplexorsimple#1%
+\unexpanded\def\definecomplexorsimple#1%
{\unexpanded\edef#1%
{\noexpand\docomplexorsimple
\@EA\noexpand\csname\s!complex\strippedcsname#1\endcsname
\@EA\noexpand\csname\s!simple \strippedcsname#1\endcsname}}
-\def\definecomplexorsimpleempty#1%
+\unexpanded\def\definecomplexorsimpleempty#1%
{\unexpanded\edef#1%
{\noexpand\docomplexorsimpleempty
\@EA\noexpand\csname\s!complex\strippedcsname#1\endcsname}}
@@ -2876,7 +2891,7 @@
%D Also new:
-\def\define#1%
+\unexpanded\def\define#1%
{\ifdefined#1%
\message{[\noexpand#1is already defined]}%
\expandafter\def\expandafter\gobbleddefinition
@@ -3116,8 +3131,8 @@
%D We cannot use the simple scheme:
%D
%D \starttyping
-%D \def\settrue#1{\let#1=\iftrue}
-%D \def\settrue#1{\let#1=\iffalse}
+%D \def\settrue #1{\let#1=\iftrue}
+%D \def\setfalse#1{\let#1=\iffalse}
%D \stoptyping
%D
%D Such an implementation gives problems with nested
@@ -3403,7 +3418,7 @@
%D for conditional errors.
%D Krzysztof Leszczynski suggested to provide access to the level by
-%D means of a \type {#1}. I decided to pass the more frquently used
+%D means of a \type {#1}. I decided to pass the more frequently used
%D level as \type {#1} and the less favoured depth as \type {#2}. The
%D intended usage is:
%D
@@ -3431,6 +3446,15 @@
\global\@EA\let\csname\@@irecurse\recursedepth\endcsname\recurselevel
\@EA\dodorecurse\@EA1\@EA{\number#1}}
+\long\def\ydorecurse#1#2%
+ {\global\advance\outerrecurse \plusone
+ \global\@EA\let\csname\@@irecurse\recursedepth\endcsname\recurselevel
+ \let\recurselevel\!!plusone
+ \long\global\@EA\def\csname\@@arecurse\recursedepth\endcsname##1##2{#2}%
+ \expandrecursecontent
+ \@EA\let\@EA\recurselevel\csname\@@irecurse\recursedepth\endcsname
+ \global\advance\outerrecurse \minusone}
+
\long\def\dostepwiserecurse#1#2#3#4% can be made faster by postponing #4
{\global\advance\outerrecurse \plusone
\long\global\@EA\def\csname\@@arecurse\recursedepth\endcsname##1##2{#4}%
@@ -3519,13 +3543,21 @@
\def\recurselevel{\number\fastrecursecounter}%
\dodofastrecurse}
+\def\resetrecurselevel{\let\recurselevel\!!zerocount}
+
\def\dodofastrecurse
- {\ifnum\fastrecursecounter>\lastrecursecounter\else
+ {\ifnum\fastrecursecounter>\lastrecursecounter
+ % \resetrecurselevel % slows down
+ \else
\fastrecursebody
\advance\fastrecursecounter\steprecursecounter
\expandafter\dodofastrecurse
\fi}
+% \appendtoks \resetrecurselevel \to \everydump
+
+\everydump\expandafter{\the\everydump\resetrecurselevel}
+
%D This alternative looks a bit different and uses a
%D pseudo counter. When this macro is nested, we have to use
%D different counters. This time we use keywords.
@@ -3583,7 +3615,7 @@
\csname t\strippedcsname#1\endcsname}
\def\newevery#1#2%
- {\newtoks#1% we test for redefinition elsewhere
+ {\ifx#1\everypar\else\newtoks#1\fi% we test for redefinition elsewhere
\ifx#2\relax\else\ifdefined#2\else
\expandafter\newtoks\csname t\strippedcsname#1\endcsname
\def#2{\dowithevery#1}%
@@ -3965,7 +3997,7 @@
%D hard coded delimiter like in:
%D
%D \starttyping
-%D \def\startcommand#1\stopcommand%
+%D \unexpanded\def\startcommand#1\stopcommand%
%D {... #1 ...}
%D \stoptyping
%D
@@ -3986,7 +4018,7 @@
%D This means that:
%D
%D \starttyping
-%D \def\starthello%
+%D \unexpanded\def\starthello%
%D {\grabuntil{stophello}\message}
%D
%D \starthello Hello world!\stophello
@@ -4123,7 +4155,22 @@
\afterassignment\BeforeGroup
\let\next=}
-\long\def\HandleNoGroup#1#2%
+% \long\def\HandleNoGroup#1#2%
+% {\long\def\AfterGroup{#2\egroup}%
+% \bgroup\aftergroup\AfterGroup#1}
+
+\def\HandleNoGroup % retrofit into mkii
+ {\ifnum\currentgrouptype=\@@semisimplegroup
+ \expandafter\HandleNoGroupA
+ \else
+ \expandafter\HandleNoGroupB
+ \fi}
+
+\long\def\HandleNoGroupA#1#2%
+ {\long\def\AfterGroup{#2\endgroup}%
+ \begingroup\aftergroup\AfterGroup#1}
+
+\long\def\HandleNoGroupB#1#2%
{\long\def\AfterGroup{#2\egroup}%
\bgroup\aftergroup\AfterGroup#1}
@@ -4362,19 +4409,6 @@
%D a row. In both commands, the \type{n*} is optional. When this
%D specification is missing, the command executes once.
-% this one is obsolete:
-
-\def\dorepeat[#1]%
- {\dodorepeat#1*\empty*\relax}
-
-\long\def\dodorepeat#1*#2#3*#4\relax
- {\ifx#2\empty#1\else\dorecurse{#1}{#2#3}\fi}
-
-\def\repeater
- {\recurselevel}
-
-% this one will be kept
-
\def\dorepeatwithcommand[#1]%
{\dodorepeatwithcommand#1*\empty*\relax}
@@ -4385,8 +4419,7 @@
{\ifx#2\empty % redundant but gives cleaner extensions
#4{#1}%
\else\ifnum#1<\zerocount
- \bgroup\scratchcounter#1%
- \normalexpanded{\egroup\noexpand\dorecurse{\number-\scratchcounter}}{#4{-#2#3}}%
+ \normalexpanded{\noexpand\dorecurse{\number-\number#1}}{#4{-#2#3}}%
\else\ifx#2+%
\dorecurse{#1}{#4{#3}}%
\else
@@ -5284,7 +5317,7 @@
%D \def\dodefinesomething[#1][#2]%
%D {\getparameters[\??xx#1][#2]}
%D
-%D \def\definesomething%
+%D \unexpanded\def\definesomething%
%D {\dodoubleargumentwithset\dodefinesomething}
%D \stoptyping
%D
@@ -5896,10 +5929,10 @@
\def\dostopglobaldefs
{\globaldefs\ifcsname @gd@\the\globaldefs\endcsname\zerocount}
-\def\startlocal {\dostartglobaldefs>-}
-\def\stoplocal {\dostopglobaldefs}
-\def\startglobal {\dostartglobaldefs<+}
-\def\stopglobal {\dostopglobaldefs}
+\unexpanded\def\startlocal {\dostartglobaldefs>-}
+\unexpanded\def\stoplocal {\dostopglobaldefs}
+\unexpanded\def\startglobal {\dostartglobaldefs<+}
+\unexpanded\def\stopglobal {\dostopglobaldefs}
%D \macros
%D {twodigitrounding}
@@ -5931,7 +5964,7 @@
%D Beware of verbatim, i.e. catcode changes.
%D
%D \starttyping
-%D \def\starthans%
+%D \unexpanded\def\starthans%
%D {\processcontent{stophans}\test{\message{\test}\wait}}
%D \stoptyping
%D
@@ -6118,12 +6151,16 @@
% better: push/pop
-\def\startstrictinspectnextcharacter
+\unexpanded\def\startstrictinspectnextcharacter
{\let\inspectnextcharacter\strictinspectnextcharacter}
-\def\stopstrictinspectnextcharacter
+\unexpanded\def\stopstrictinspectnextcharacter
{\let\inspectnextcharacter\normalinspectnextcharacter}
+\def\strictdoifnextoptionalelse#1#2%
+ {\startstrictinspectnextcharacter
+ \doifnextcharelse[{\stopstrictinspectnextcharacter#1}{\stopstrictinspectnextcharacter#2}}
+
%D \macros
%D {gobblespacetokens}
%D
@@ -6261,7 +6298,7 @@
\def\??dm{@@dm} % brrr
-\def\definemeasure
+\unexpanded\def\definemeasure
{\dodoubleargument\dodefinemeasure}
\def\dodefinemeasure[#1][#2]%
@@ -6296,6 +6333,71 @@
\expandafter\thirdoffourarguments
\fi}
+%D Ok, here's another one, slower but seldom used. This one scans the text.
+%D
+%D \starttabulate[|Tc|Tc|]
+%D \NC pt \NC \doifdimenstringelse {pt}{yes}{no} \NC \NR
+%D \NC 12pt \NC \doifdimenstringelse {-12pt}{yes}{no} \NC \NR
+%D \NC 1pt \NC \doifdimenstringelse {1pt}{yes}{no} \NC \NR
+%D \NC 12pt \NC \doifdimenstringelse {12pt}{yes}{no} \NC \NR
+%D \NC 12.0pt \NC \doifdimenstringelse {12.0pt}{yes}{no} \NC \NR
+%D \NC -.12pt \NC \doifdimenstringelse {-.12pt}{yes}{no} \NC \NR
+%D \NC .12pt \NC \doifdimenstringelse {.12pt}{yes}{no} \NC \NR
+%D \NC -12pt \NC \doifdimenstringelse {-12pt}{yes}{no} \NC \NR
+%D \NC -12.0pt \NC \doifdimenstringelse{-12.0pt}{yes}{no} \NC \NR
+%D \NC big \NC \doifdimenstringelse {big}{yes}{no} \NC \NR
+%D \NC 10 \NC \doifdimenstringelse {10}{yes}{no} \NC \NR
+%D \NC 1 \NC \doifdimenstringelse {1}{yes}{no} \NC \NR
+%D \stoptabulate
+
+\def\doifdimenstringelse#1{\normalexpanded{\noexpand\dodimenteststageone#1}\empty\empty]}
+
+\def\dodimenteststageone #1#2{\csname d!1!\ifcsname d!1!#2\endcsname#2\else x\fi\endcsname#2}
+\def\dodimenteststagetwo #1#2{\csname d!2!\ifcsname d!2!#2\endcsname#2\else x\fi\endcsname#2}
+\def\dodimenteststagethree #1]{\csname d!3!\ifcsname d!3!#1\endcsname#1\else x\fi\endcsname}
+
+\expandafter\let\csname d!1!x\endcsname\dodimenteststagethree
+\expandafter\let\csname d!2!x\endcsname\dodimenteststagethree
+\expandafter\let\csname d!3!x\endcsname\secondoftwoarguments
+
+\expandafter\let\csname d!1!.\endcsname\dodimenteststagetwo
+\expandafter\let\csname d!1!,\endcsname\dodimenteststagetwo
+\expandafter\let\csname d!1!1\endcsname\dodimenteststageone
+\expandafter\let\csname d!1!2\endcsname\dodimenteststageone
+\expandafter\let\csname d!1!3\endcsname\dodimenteststageone
+\expandafter\let\csname d!1!4\endcsname\dodimenteststageone
+\expandafter\let\csname d!1!5\endcsname\dodimenteststageone
+\expandafter\let\csname d!1!6\endcsname\dodimenteststageone
+\expandafter\let\csname d!1!7\endcsname\dodimenteststageone
+\expandafter\let\csname d!1!8\endcsname\dodimenteststageone
+\expandafter\let\csname d!1!9\endcsname\dodimenteststageone
+\expandafter\let\csname d!1!0\endcsname\dodimenteststageone
+
+\expandafter\let\csname d!2!1\endcsname\dodimenteststagetwo
+\expandafter\let\csname d!2!2\endcsname\dodimenteststagetwo
+\expandafter\let\csname d!2!3\endcsname\dodimenteststagetwo
+\expandafter\let\csname d!2!4\endcsname\dodimenteststagetwo
+\expandafter\let\csname d!2!5\endcsname\dodimenteststagetwo
+\expandafter\let\csname d!2!6\endcsname\dodimenteststagetwo
+\expandafter\let\csname d!2!7\endcsname\dodimenteststagetwo
+\expandafter\let\csname d!2!8\endcsname\dodimenteststagetwo
+\expandafter\let\csname d!2!9\endcsname\dodimenteststagetwo
+\expandafter\let\csname d!2!0\endcsname\dodimenteststagetwo
+
+\expandafter\let\csname d!3!pt\endcsname\firstoftwoarguments
+\expandafter\let\csname d!3!pc\endcsname\firstoftwoarguments
+\expandafter\let\csname d!3!in\endcsname\firstoftwoarguments
+\expandafter\let\csname d!3!bp\endcsname\firstoftwoarguments
+\expandafter\let\csname d!3!cm\endcsname\firstoftwoarguments
+\expandafter\let\csname d!3!mm\endcsname\firstoftwoarguments
+\expandafter\let\csname d!3!dd\endcsname\firstoftwoarguments
+\expandafter\let\csname d!3!cc\endcsname\firstoftwoarguments
+\expandafter\let\csname d!3!sp\endcsname\firstoftwoarguments
+\expandafter\let\csname d!3!ex\endcsname\firstoftwoarguments
+\expandafter\let\csname d!3!em\endcsname\firstoftwoarguments
+\expandafter\let\csname d!3!nd\endcsname\firstoftwoarguments
+\expandafter\let\csname d!3!nc\endcsname\firstoftwoarguments
+
%D \macros
%D {comparedimension,comparedimensioneps}
%D
@@ -6501,10 +6603,15 @@
% awaiting the definitive implementation
-\ifdefined\resettimer \else
- \let\resettimer \relax
- \newcount\elapsedtime
-\fi
+% \ifdefined\resettimer \else
+% \let\resettimer \relax
+% \newcount\elapsedtime
+% \fi
+% \def\elapsedseconds{\expandafter\withoutpt\the\dimexpr\elapsedtime sp\relax}
+
+\def\resettimer {\ctxlua{commands.resettimer()}}
+\def\elapsedtime {\ctxlua{commands.elapsedtime()}}
+\let\elapsedseconds \elapsedtime
\newcount\featuretest
@@ -6524,8 +6631,6 @@
\wait
\egroup}
-\def\elapsedseconds{\expandafter\withoutpt\the\dimexpr\elapsedtime sp\relax}
-
\def\showtimer#1%
{\writestatus{runtime}{\elapsedseconds\space s / #1}}
@@ -6781,8 +6886,7 @@
%D \stoptyping
\def\stripstring#1% #1 is \cs
- {\edef\cs{\ctxlua
- {tex.sprint(tex.vrbcatcodes,string.strip(\!!bs\detokenize\expandafter{#1}\!!es))}}}
+ {\edef\cs{\ctxlua{tex.sprint(tex.vrbcatcodes,string.strip(\!!bs\detokenize\expandafter{#1}\!!es))}}}
%D \macros
%D {dowithrange}
@@ -6864,11 +6968,11 @@
\newbox\nointerferencebox
-\def\startnointerference % not even grouped !
+\unexpanded\def\startnointerference % not even grouped !
{\setbox\nointerferencebox\vbox
\bgroup}
-\def\stopnointerference
+\unexpanded\def\stopnointerference
{\egroup
\setbox\nointerferencebox\emptybox}
diff --git a/Master/texmf-dist/tex/context/base/syst-con.lua b/Master/texmf-dist/tex/context/base/syst-con.lua
index b2f6c42afc8..638f3c797bf 100644
--- a/Master/texmf-dist/tex/context/base/syst-con.lua
+++ b/Master/texmf-dist/tex/context/base/syst-con.lua
@@ -1,6 +1,6 @@
if not modules then modules = { } end modules ['syst-con'] = {
version = 1.001,
- comment = "companion to syst-con.tex",
+ comment = "companion to syst-con.mkiv",
author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
copyright = "PRAGMA ADE / ConTeXt Development Team",
license = "see context related readme files"
diff --git a/Master/texmf-dist/tex/context/base/syst-ext.mkii b/Master/texmf-dist/tex/context/base/syst-ext.mkii
index 898ee8000a5..73fb98b728f 100644
--- a/Master/texmf-dist/tex/context/base/syst-ext.mkii
+++ b/Master/texmf-dist/tex/context/base/syst-ext.mkii
@@ -498,8 +498,8 @@
%D We cannot use the simple scheme:
%D
%D \starttyping
-%D \def\settrue#1{\let#1=\iftrue}
-%D \def\settrue#1{\let#1=\iffalse}
+%D \def\settrue #1{\let#1=\iftrue}
+%D \def\setfalse#1{\let#1=\iffalse}
%D \stoptyping
%D
%D Such an implementation gives problems with nested
@@ -969,7 +969,7 @@
%D for conditional errors.
%D Krzysztof Leszczynski suggested to provide access to the level by
-%D means of a \type {#1}. I decided to pass the more frquently used
+%D means of a \type {#1}. I decided to pass the more frequently used
%D level as \type {#1} and the less favoured depth as \type {#2}. The
%D intended usage is:
%D
@@ -997,6 +997,15 @@
\global\@EA\let\csname\@@irecurse\recursedepth\endcsname\recurselevel
\@EA\dodorecurse\@EA1\@EA{\number#1}}
+\long\def\ydorecurse#1#2%
+ {\global\advance\outerrecurse \plusone
+ \global\@EA\let\csname\@@irecurse\recursedepth\endcsname\recurselevel
+ \let\recurselevel\!!plusone
+ \long\global\@EA\def\csname\@@arecurse\recursedepth\endcsname##1##2{#2}%
+ \expandrecursecontent
+ \@EA\let\@EA\recurselevel\csname\@@irecurse\recursedepth\endcsname
+ \global\advance\outerrecurse \minusone}
+
\long\def\dostepwiserecurse#1#2#3#4% can be made faster by postponing #4
{\global\advance\outerrecurse \plusone
\long\global\@EA\def\csname\@@arecurse\recursedepth\endcsname##1##2{#4}%
@@ -1040,13 +1049,21 @@
\def\recurselevel{\number\fastrecursecounter}%
\dodofastrecurse}
+\def\resetrecurselevel{\let\recurselevel\!!zerocount}
+
\def\dodofastrecurse
- {\ifnum\fastrecursecounter>\lastrecursecounter\else
+ {\ifnum\fastrecursecounter>\lastrecursecounter
+ % \resetrecurselevel % slows down
+ \else
\fastrecursebody
\advance\fastrecursecounter\steprecursecounter
\expandafter\dodofastrecurse
\fi}
+% \appendtoks \resetrecurselevel \to \everydump
+
+\everydump\expandafter{\the\everydump\resetrecurselevel}
+
%D This alternative looks a bit different and uses a
%D pseudo counter. When this macro is nested, we have to use
%D different counters. This time we use keywords.
@@ -4752,6 +4769,10 @@
\def\stopstrictinspectnextcharacter
{\let\inspectnextcharacter\normalinspectnextcharacter}
+\def\strictdoifnextoptionalelse#1#2%
+ {\startstrictinspectnextcharacter
+ \doifnextcharelse[{\stopstrictinspectnextcharacter#1}{\stopstrictinspectnextcharacter#2}}
+
%D \macros
%D {gobblespacetokens}
%D
diff --git a/Master/texmf-dist/tex/context/base/syst-gen.mkii b/Master/texmf-dist/tex/context/base/syst-gen.mkii
index 65a501360f3..0367ba4fd76 100644
--- a/Master/texmf-dist/tex/context/base/syst-gen.mkii
+++ b/Master/texmf-dist/tex/context/base/syst-gen.mkii
@@ -4435,7 +4435,15 @@
% \ifx\writestatus\undefined \let\writestatus\normalwritestatus \fi
% \ifx\writebanner\undefined \def\writebanner{\writestring} \fi
-\let\writestatus\normalwritestatus
+\ifx\normalwritestatus\undefined
+ % for use within latex
+ \ifx\writestatus\undefined
+ \def\writestatus#1#2{\immediate\write16{#1 : #2}}
+ \fi
+\else
+ \let\writestatus\normalwritestatus
+\fi
+
\def\writebanner{\writestring}
\writestatus{loading}{ConTeXt System Macros / General}
diff --git a/Master/texmf-dist/tex/context/base/syst-ini.tex b/Master/texmf-dist/tex/context/base/syst-ini.tex
index 2a04f111271..7c9d72127a7 100644
--- a/Master/texmf-dist/tex/context/base/syst-ini.tex
+++ b/Master/texmf-dist/tex/context/base/syst-ini.tex
@@ -311,7 +311,7 @@
\newdimen\onepoint \onepoint = 1pt
\newdimen\maxdimen \maxdimen = 16383.99999pt
\newdimen\onebasepoint \onebasepoint = 1bp
-\chardef \scaledpoint = 1
+\newdimen\scaledpoint \scaledpoint = 1sp
\newdimen\thousandpoint\thousandpoint= 1000pt
\let\points\onepoint
@@ -442,7 +442,7 @@
\chardef\@@active = 13 \chardef\active = 13
\chardef\@@comment = 14
-%D Constants to be used with \type {\grouptype}.
+%D Constants to be used with \type {\currentgrouptype}.
\chardef\@@bottomlevelgroup = 0
\chardef\@@simplegroup = 1
@@ -580,7 +580,7 @@
\tracingstats\plusone
-%D Here we also save \input, more will be saved later.
+%D Here we also save \type {\input}, more will be saved later.
\ifdefined\normalinput \else \let\normalinput\input \fi
@@ -800,13 +800,14 @@
\pdfminorversion \plusfive
- \ifdefined\pdfcompresslevel \else \newcount\pdfcompresslevel \fi
- \ifdefined\pdfobjcompresslevel \else \newcount\pdfobjcompresslevel \fi
- \ifdefined\pdfgentounicode \else \newcount\pdfgentounicode \fi \pdfgentounicode\plusone
+ \ifdefined\pdfcompresslevel \else \newcount\pdfcompresslevel \fi
+ \ifdefined\pdfobjcompresslevel \else \newcount\pdfobjcompresslevel \fi
+ \ifdefined\pdfgentounicode \else \newcount\pdfgentounicode \fi \pdfgentounicode \plusone
+ \ifdefined\pdfinclusioncopyfonts\else \newcount\pdfinclusioncopyfonts \fi \pdfinclusioncopyfonts\plusone
\def\nopdfcompression {\pdfobjcompresslevel\zerocount \pdfcompresslevel\zerocount}
- \def\maximumpdfcompression{\pdfobjcompresslevel\plusone \pdfcompresslevel\plusnine }
- \def\normalpdfcompression {\pdfobjcompresslevel\plusone \pdfcompresslevel\plusthree}
+ \def\maximumpdfcompression{\pdfobjcompresslevel\plusnine \pdfcompresslevel\plusnine }
+ \def\normalpdfcompression {\pdfobjcompresslevel\plusthree \pdfcompresslevel\plusthree}
\normalpdfcompression
diff --git a/Master/texmf-dist/tex/context/base/syst-ltx.tex b/Master/texmf-dist/tex/context/base/syst-ltx.tex
new file mode 100644
index 00000000000..ae89ff25b81
--- /dev/null
+++ b/Master/texmf-dist/tex/context/base/syst-ltx.tex
@@ -0,0 +1,56 @@
+%D \module
+%D [ file=syst-ltx,
+%D version=2009.10.13,
+%D title=\CONTEXT\ System Macros,
+%D subtitle=General,
+%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 \macros
+%D {newcommand}
+%D
+%D This module replaces \type {t-bibltx} and implements the
+%D \LATEX\ newcommand (sort of). This command is not to be
+%D used directly but only is there for the occasional
+%D \BIBTEX\ file that uses it.
+%D
+%D \starttyping
+%D \newcommand\oeps {oeps}
+%D \newcommand\oeps[6] {oeps[#1]#6}
+%D \newcommand\oeps[6][whatever]{oeps[#1]#6}
+%D \stoptyping
+
+\unprotect
+
+\def\newcommand#1%
+ {\dotripleempty\donewcommand[#1]}
+
+\def\donewcommand
+ {\ifthirdargument
+ \expandafter\donewcommandtwo
+ \else\ifsecondargument
+ \expandafter\expandafter\expandafter\donewcommandone
+ \else
+ \expandafter\expandafter\expandafter\donewcommandzero
+ \fi\fi}
+
+\def\donewcommandzero[#1][#2][#3]%
+ {\long\def#1}
+
+\def\donewcommandone[#1][#2][#3]%
+ {\scratchtoks{\long\def#1}%
+ \dorecurse{#2}{\scratchtoks\expandafter{\the\scratchtoks######1}}%
+ \the\scratchtoks}
+
+\def\donewcommandtwo[#1][#2][#3]%
+ {\long\def#1{\doifnextcharelse[{\getvalue{>>\string#1>>}}{\getvalue{>>\string#1>>}[#3]}}%
+ \scratchtoks{\long\setvalue{>>\string#1>>}[##1]}%
+ \dostepwiserecurse{2}{#2}{1}{\scratchtoks\expandafter{\the\scratchtoks######1}}%
+ \the\scratchtoks}
+
+\protect \endinput
diff --git a/Master/texmf-dist/tex/context/base/syst-lua.lua b/Master/texmf-dist/tex/context/base/syst-lua.lua
index 6df1b7b4480..64028295350 100644
--- a/Master/texmf-dist/tex/context/base/syst-lua.lua
+++ b/Master/texmf-dist/tex/context/base/syst-lua.lua
@@ -1,13 +1,14 @@
if not modules then modules = { } end modules ['syst-lua'] = {
version = 1.001,
- comment = "companion to syst-lua.tex",
+ comment = "companion to syst-lua.mkiv",
author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
copyright = "PRAGMA ADE / ConTeXt Development Team",
license = "see context related readme files"
}
local texsprint, texprint, texwrite, texiowrite_nl = tex.sprint, tex.print, tex.write, texio.write_nl
-local format = string.format
+local format, find = string.format, string.find
+local lpegmatch = lpeg.match
local ctxcatcodes = tex.ctxcatcodes
@@ -20,14 +21,29 @@ function commands.writestatus(a,b,c,...)
texiowrite_nl(format("%-16s: %s\n",a,b)) -- b can have %'s
end
end
+function commands.writedebug(a,b,c,...)
+ if c then
+ texiowrite_nl(format("%-16s| %s\n",a,format(b,c,...)))
+ else
+ texiowrite_nl(format("%-16s| %s\n",a,b)) -- b can have %'s
+ end
+end
+
+function commands.report(s,t,...)
+ commands.writestatus("!"..s,format(t,...))
+end
-function commands.doifelse(b)
+local function testcase(b)
if b then -- faster with if than with expression
texsprint(ctxcatcodes,"\\firstoftwoarguments")
else
texsprint(ctxcatcodes,"\\secondoftwoarguments")
end
end
+
+commands.testcase = testcase
+commands.doifelse = testcase
+
function commands.doif(b)
if b then
texsprint(ctxcatcodes,"\\firstofoneargument")
@@ -43,14 +59,12 @@ function commands.doifnot(b)
end
end
-commands.testcase = commands.doifelse
-
function commands.boolcase(b)
if b then texwrite(1) else texwrite(0) end
end
function commands.doifelsespaces(str)
- return commands.doifelse(str:find("^ +$"))
+ return commands.doifelse(find(str,"^ +$"))
end
local s = lpeg.Ct(lpeg.splitat(","))
@@ -59,27 +73,27 @@ local h = { }
function commands.doifcommonelse(a,b)
local ha = h[a]
local hb = h[b]
- if not ha then ha = s:match(a) h[a] = ha end
- if not hb then hb = s:match(b) h[b] = hb end
+ if not ha then ha = lpegmatch(s,a) h[a] = ha end
+ if not hb then hb = lpegmatch(s,b) h[b] = hb end
for i=1,#ha do
for j=1,#hb do
if ha[i] == hb[j] then
- return commands.testcase(true)
+ return testcase(true)
end
end
end
- return commands.testcase(false)
+ return testcase(false)
end
function commands.doifinsetelse(a,b)
local hb = h[b]
- if not hb then hb = s:match(b) h[b] = hb end
+ if not hb then hb = lpegmatch(s,b) h[b] = hb end
for i=1,#hb do
if a == hb[i] then
- return commands.testcase(true)
+ return testcase(true)
end
end
- return commands.testcase(false)
+ return testcase(false)
end
function commands. def (cs,value) texsprint(ctxcatcodes,format( "\\def\\%s{%s}",cs,value)) end
@@ -87,3 +101,9 @@ function commands.edef (cs,value) texsprint(ctxcatcodes,format("\\edef\\%s{%s}
function commands.gdef (cs,value) texsprint(ctxcatcodes,format("\\gdef\\%s{%s}",cs,value)) end
function commands.xdef (cs,value) texsprint(ctxcatcodes,format("\\xdef\\%s{%s}",cs,value)) end
function commands.chardef(cs,value) texsprint(ctxcatcodes,format("\\chardef\\%s=%s\\relax",cs,value)) end
+
+local pattern = lpeg.patterns.validdimen
+
+function commands.doifdimenstringelse(str)
+ testcase(lpegmatch(pattern,str))
+end
diff --git a/Master/texmf-dist/tex/context/base/type-tmf.tex b/Master/texmf-dist/tex/context/base/tabl-com.mkii
index 78ed89cf9c3..892905f6c12 100644
--- a/Master/texmf-dist/tex/context/base/type-tmf.tex
+++ b/Master/texmf-dist/tex/context/base/tabl-com.mkii
@@ -1,8 +1,8 @@
%D \module
-%D [ file=type-tmf,
-%D version=2007.07.30,
-%D title=\CONTEXT\ Typescript Macros,
-%D subtitle=Core \TEX\ Fonts,
+%D [ file=tabl-com,
+%D version=2009.08.22,
+%D title=\CONTEXT\ Table Macros,
+%D subtitle=Common Code,
%D author=Hans Hagen,
%D date=\currentdate,
%D copyright={PRAGMA / Hans Hagen \& Ton Otten}]
@@ -11,6 +11,11 @@
%C therefore copyrighted by \PRAGMA. See mreadme.pdf for
%C details.
-\loadmarkfile{type-tmf}
+\writestatus{loading}{ConTeXt Table Macros / Common Code}
-\endinput
+\unprotect
+
+\let\NC\relax
+\let\NR\relax
+
+\protect \endinput
diff --git a/Master/texmf-dist/tex/context/base/tabl-com.mkiv b/Master/texmf-dist/tex/context/base/tabl-com.mkiv
new file mode 100644
index 00000000000..892905f6c12
--- /dev/null
+++ b/Master/texmf-dist/tex/context/base/tabl-com.mkiv
@@ -0,0 +1,21 @@
+%D \module
+%D [ file=tabl-com,
+%D version=2009.08.22,
+%D title=\CONTEXT\ Table Macros,
+%D subtitle=Common Code,
+%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 Table Macros / Common Code}
+
+\unprotect
+
+\let\NC\relax
+\let\NR\relax
+
+\protect \endinput
diff --git a/Master/texmf-dist/tex/context/base/tabl-ltb.mkii b/Master/texmf-dist/tex/context/base/tabl-ltb.mkii
index 0ff64047e62..095e30e2b76 100644
--- a/Master/texmf-dist/tex/context/base/tabl-ltb.mkii
+++ b/Master/texmf-dist/tex/context/base/tabl-ltb.mkii
@@ -1,5 +1,5 @@
%D \module
-%D [ file=core-ltb,
+%D [ file=tabl-ltb,
%D version=2002.10.31,
%D title=\CONTEXT\ Table Macros,
%D subtitle=Line Tables,
diff --git a/Master/texmf-dist/tex/context/base/tabl-ltb.mkiv b/Master/texmf-dist/tex/context/base/tabl-ltb.mkiv
index 0ff64047e62..7d3fab0df37 100644
--- a/Master/texmf-dist/tex/context/base/tabl-ltb.mkiv
+++ b/Master/texmf-dist/tex/context/base/tabl-ltb.mkiv
@@ -1,5 +1,5 @@
%D \module
-%D [ file=core-ltb,
+%D [ file=tabl-ltb,
%D version=2002.10.31,
%D title=\CONTEXT\ Table Macros,
%D subtitle=Line Tables,
@@ -93,7 +93,7 @@
\chardef\linetablepage \zerocount
\chardef\linetablerepeat\zerocount
-\def\setuplinetable
+\unexpanded\def\setuplinetable
{\dotripleempty\dosetuplinetable}
\def\dosetuplinetable[#1][#2][#3]%
@@ -182,7 +182,7 @@
}
{\xdef\noflinetablelines{\linetableparameter\c!lines}}}
-\def\startlinetablecell
+\unexpanded\def\startlinetablecell
{\dosingleempty\dostartlinetablecell}
\def\dostartlinetablecell[#1]%
@@ -247,7 +247,7 @@
\dostartattributes{\??lec\number\linetablecolumn}\c!style\c!color\empty
\begstrut \ignorespaces}
-% \def\stoplinetablecell
+% \unexpanded\def\stoplinetablecell
% {\unskip \endstrut
% \dostopattributes
% \ifcase\linetablemode
@@ -269,7 +269,7 @@
\newconditional\linetableautoheight \settrue\linetableautoheight
-\def\stoplinetablecell
+\unexpanded\def\stoplinetablecell
{\unskip \endstrut
\dostopattributes
\ifcase\linetablemode
@@ -298,7 +298,7 @@
\fi
\egroup}
-% \def\stoplinetablecell
+% \unexpanded\def\stoplinetablecell
% {\unskip \endstrut
% \dostopattributes
% \ifcase\linetablemode
@@ -387,14 +387,14 @@
\setnoftableslines
\fi}
-\def\startlinetablepart
+\unexpanded\def\startlinetablepart
{\global\linetablesubcol\zerocount
\setbox\scratchbox\hbox\bgroup
\doconvertfont{\linetablerparameter\c!style}%
\startcolor[\linetablerparameter\c!color]%
\ignorespaces}
-\def\stoplinetablepart
+\unexpanded\def\stoplinetablepart
{\ifnum\linetablepart>\zerocount
\unskip \unskip % remove last intercolumn skip (distance+fill)
\fi
@@ -514,7 +514,7 @@
% \linetableparameter\c!var -> \@@levar (when no classes)
-\def\startlinetablerun % to do: quit when nested
+\unexpanded\def\startlinetablerun % to do: quit when nested
{\bgroup
\inlinetabletrue
% autowidth
@@ -571,7 +571,7 @@
\let\NR\linetableNR
\flushlinetablehead}
-\def\stoplinetablerun
+\unexpanded\def\stoplinetablerun
{\globallet\linetableline\!!maxcard
\chardef\linetableheadstate\zerocount % blocked
\flushlinetableparts
@@ -736,19 +736,19 @@
{\stoplinetablecell % dummy
\linetableER}
-\def\startlinetable
+\unexpanded\def\startlinetable
{\startlinetablerun}
-\def\stoplinetable
+\unexpanded\def\stoplinetable
{\stoplinetablerun}
-\def\startlinetableanalysis
+\unexpanded\def\startlinetableanalysis
{\bgroup
\linetableprerolltrue
\trialtypesettingtrue
\startlinetablerun}
-\def\stoplinetableanalysis
+\unexpanded\def\stoplinetableanalysis
{\stoplinetablerun
\egroup
\globallet\noflinetablerows\linetablerows
@@ -767,7 +767,7 @@
\newtoks \@@linetablehead
-\long\def\startlinetablehead#1\stoplinetablehead
+\long\unexpanded\def\startlinetablehead#1\stoplinetablehead
{\ifinlinetable
\@@linetablehead\emptytoks
\fi
diff --git a/Master/texmf-dist/tex/context/base/tabl-ntb.mkii b/Master/texmf-dist/tex/context/base/tabl-ntb.mkii
index 1f9a9d5747d..0bfcc20c68f 100644
--- a/Master/texmf-dist/tex/context/base/tabl-ntb.mkii
+++ b/Master/texmf-dist/tex/context/base/tabl-ntb.mkii
@@ -1213,6 +1213,7 @@
\fi
\advance\xxrowTBL\plusone}%
% distribute overshoot equally
+\ifdim\dimen2>\zeropoint % see natural-003
\ifdim\dimen4<\dimen0
\advance\dimen0 -\dimen4
\divide\dimen0 \!!countb
@@ -1231,6 +1232,7 @@
\else\ifdim\dimen4>\dimen0
\settblhei\xrowTBL{\the\dimen2}%
\fi\fi
+\fi
\fi}
\def\checktblheightsone
diff --git a/Master/texmf-dist/tex/context/base/tabl-ntb.mkiv b/Master/texmf-dist/tex/context/base/tabl-ntb.mkiv
index e7df3b28171..b24eaa85d3c 100644
--- a/Master/texmf-dist/tex/context/base/tabl-ntb.mkiv
+++ b/Master/texmf-dist/tex/context/base/tabl-ntb.mkiv
@@ -214,6 +214,7 @@
\newif\ifappendTBLsetups \appendTBLsetupstrue
\newif\ifenableTBLbreak \enableTBLbreakfalse
\newif\ifmultipleTBLheads \multipleTBLheadsfalse
+\newif\iftightTBLrowspan \tightTBLrowspantrue
\newif\iftraceTABLE \traceTABLEfalse
@@ -320,7 +321,37 @@
% \eTABLE
% \stopTEXpage
-\def\setupTBLcell#1#2% cell over col over row
+%D By default rowspans are tight but you can change that:
+%D
+%D \startbuffer
+%D \bTABLE
+%D \bTR[height=20pt] \bTH 1. col \eTH \bTH 2. col \eTH \eTR
+%D \bTR[height=20pt] \bTD 1 row in 1. col \eTD \bTD[nr=2] 2 rows in 2. col \eTD \eTR
+%D \bTR[height=20pt] \bTD[nr=2] 2 rows in 1. col\eTD \eTR
+%D \bTR[height=20pt] \bTD[nr=3] 3 rows in 2. col \eTD \eTR
+%D \bTR[height=20pt] \bTD 1 row in 1. col \eTD \eTR
+%D \bTR[height=20pt] \bTD 1 row in 1. col \eTD \eTR
+%D \eTABLE
+%D
+%D \bTABLE
+%D \bTR[height=20pt] \bTH 2. col \eTH \bTH 1. col \eTH \eTR
+%D \bTR[height=20pt] \bTD[nr=2] 2 rows in 2. col \eTD \bTD 1 row in 1. col \eTD \eTR
+%D \bTR[height=20pt] \bTD[nr=2] 2 rows in 1. col\eTD \eTR
+%D \bTR[height=20pt] \bTD[nr=3] 3 rows in 2. col \eTD \eTR
+%D \bTR[height=20pt] \bTD 1 row in 1. col \eTD \eTR
+%D \bTR[height=20pt] \bTD 1 row in 1. col \eTD \eTR
+%D \eTABLE
+%D \stopbuffer
+%D
+%D \typebuffer
+%D
+%D \getbuffer
+%D
+%D With \type {\tightTBLrowspanfalse} we get:
+%D
+%D \start \tightTBLrowspanfalse \getbuffer \stop
+
+\unexpanded\def\setupTBLcell#1#2% cell over col over row
{\setupTBLsection % already forgotten
\edef\positiverow{\number#1}%
\edef\positivecol{\number#2}%
@@ -626,7 +657,7 @@
\long\def\doTABLEfoot[#1]#2\eTABLEfoot{\appendtoks\doTABLEsection[#1]{#2}\to\TBLfoot}
\long\def\doTABLEsection[#1]#2%
- {\def\setupTBLsection{\getparameters[\@@tbl\@@tbl][#1]}%
+ {\unexpanded\def\setupTBLsection{\getparameters[\@@tbl\@@tbl][#1]}%
#2%
\let\setupTBLsection\relax}
@@ -656,6 +687,9 @@
\getparameters
[\@@tbl\@@tbl]
[\c!align={\v!right,\v!broad,\v!high},#1]%
+ \ifx\tbltblsetups\empty\else
+ \doprocesslocalsetups\tbltblsetups
+ \fi
\hsize\tbltbltextwidth
\processaction
[\tbltblsplit]
@@ -776,6 +810,17 @@
% \vskip-\strutdp
% \fi
\fi
+ % tracing
+ % \iftrue
+ % \blank \tttf
+ % \dorecurse\maximumrow
+ % {\row\recurselevel\relax
+ % \dorecurse\maximumcol
+ % {\col\recurselevel\relax
+ % [r=\the\row,c=\the\col,h=\the\dimexpr\gettblht\row\col,w=\the\dimexpr\gettblwd\row\col]}%
+ % \par}%
+ % \blank
+ % \fi
\egroup
\popTBL}
@@ -829,6 +874,9 @@
{\global\advance\tblrow\plusone
\global\tblcol\zerocount
\global\tblspn\zerocount}%
+ % \iftrue
+ % \bgroup\tbox{\tttf[\number\tblrow]}\egroup
+ % \fi
\nexttblcol
\kern\dimexpr\tbltblleftmargindistance-\tbltblcolumndistance\relax}
@@ -923,8 +971,7 @@
\else
\scratchcounter#1\relax
\dorecurse\!!countb
- {\advance\scratchdimen
- \gettblhei\scratchcounter
+ {\advance\scratchdimen\gettblhei\scratchcounter
\advance\scratchcounter\plusone}%
\ifdim\scratchdimen<\!!heighta\relax
\scratchdimen\!!heighta
@@ -1190,24 +1237,28 @@
\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
+ \ifdim\dimen2>\zeropoint % new: test on natural-003
+ \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
+ \iftightTBLrowspan
+ \settblhei\xrowTBL{\the\dimen2}%
+ \fi
+ \fi\fi
+ \fi
\fi}
\def\checktblheightsone
@@ -1372,7 +1423,7 @@
\fi}%
\hskip\gettbldis{#2}}
-\presetlocalframed
+\presetlocalframed % todo: tableparameter etc
[\@@tbl\@@tbl]
\setupTABLE [%
@@ -1405,6 +1456,7 @@
\c!rightmargindistance=\zeropoint,% whole table
\c!left=,
\c!right=,
+ \c!setups=,
\c!splitmethod=a%
]
@@ -1549,7 +1601,7 @@
% \bTRs[xx] \bTD oeps \eTD \bTD oeps \eTD \eTRs
% \eTABLE
-\def\defineTABLEsetup
+\unexpanded\def\defineTABLEsetup
{\dodoubleargument\dodefineTABLEsetup}
\def\dodefineTABLEsetup[#1][#2]%
diff --git a/Master/texmf-dist/tex/context/base/tabl-tab.mkiv b/Master/texmf-dist/tex/context/base/tabl-tab.mkiv
index 429f41add44..d926dab989a 100644
--- a/Master/texmf-dist/tex/context/base/tabl-tab.mkiv
+++ b/Master/texmf-dist/tex/context/base/tabl-tab.mkiv
@@ -980,12 +980,13 @@
\newconditional\tablerepeathead
\newconditional\tablerepeattail
-\def\starttable
+\unexpanded\def\starttable
{\bgroup
+ \let\stoptable\dostoptable
\doif\@@tisplit\v!auto
{\ifinsidesplitfloat\let\@@tisplit\v!yes\fi}%
\doifinsetelse\@@tisplit{\v!yes,\v!repeat}
- {\def\stoptable{\stoptables\egroup}%
+ {\unexpanded\def\stoptable{\stoptables\egroup}%
\starttables}
{\doifelsenothing\@@tiframe
{\ifinsidefloat\else\startbaselinecorrection\fi}
@@ -993,7 +994,12 @@
\postponenotes
\firststagestartTABLE}}
-\def\stoptable
+% We cannot define \unexpanded\def\dostoptable a ssomehow lookahead
+% in alignments fail then, so we relax it and define it locally.
+
+\let\stoptabel\relax
+
+\def\dostoptable
{\chuckTABLEautorow % before the tail, else noalign problem
\insertTABLEtail
\TABLEnoalign{\globalletempty\@@TABLEhead}%
@@ -1039,7 +1045,7 @@
%D The implementation of the definition macro is not that
%D complicated:
-\def\definetabletemplate % to be redone
+\unexpanded\def\definetabletemplate % to be redone
{\bgroup
\catcode`\|=\@@other
\doquadrupleempty\dodefinetabletemplate}
@@ -1208,8 +1214,9 @@
\newbox\tablecontentbox
-\def\starttables
+\unexpanded\def\starttables
{\bgroup
+ \let\stoptables\dostoptables
\splittablestrue
\doifelse\@@tisplit\v!repeat
{\settrue \tablerepeathead\settrue \tablerepeattail}
@@ -1220,23 +1227,17 @@
\global\TABLEinbreakfalse
\firststagestartTABLE}
-% \def\stoptables
-% {\ifconditional\tablerepeattail\else\insertTABLEtail\fi
-% \finishTABLE
-% \egroup
-% \dosplittablebox\tablecontentbox
-% \flushnotes
-% \egroup}
-
-\def\stoptables
- {\chuckTABLEautorow % AM: before the tail, else noalign problem
- \ifconditional\tablerepeattail\else\insertTABLEtail\fi
- \finishTABLE
- \egroup
-\dontcomplain
- \dosplittablebox\tablecontentbox
- \flushnotes
- \egroup}
+\let\stoptables\relax % needed for \noalign
+
+\def\dostoptables
+ {\chuckTABLEautorow % AM: before the tail, else noalign problem
+ \ifconditional\tablerepeattail\else\insertTABLEtail\fi
+ \finishTABLE
+ \egroup
+ \dontcomplain
+ \dosplittablebox\tablecontentbox
+ \flushnotes
+ \egroup}
\newdimen\TABLEcaptionheight % obsolete
@@ -1296,11 +1297,11 @@
\letvalue{\e!stop \v!tabletail}=\undefined
\expanded
- {\def\csname\e!start\v!tablehead\endcsname##1\csname\e!stop\v!tablehead\endcsname%
+ {\long\def\csname\e!start\v!tablehead\endcsname##1\csname\e!stop\v!tablehead\endcsname%
{\noexpand\setTABLEhead##1\noexpand\end}}
\expanded
- {\def\csname\e!start\v!tabletail\endcsname##1\csname\e!stop\v!tabletail\endcsname%
+ {\long\def\csname\e!start\v!tabletail\endcsname##1\csname\e!stop\v!tabletail\endcsname%
{\noexpand\setTABLEtail##1\noexpand\end}}
%D The second argument is a dummy one, by scanning for it, we
@@ -1312,8 +1313,8 @@
\newconditional\preventTABLEbreak
\newconditional\someTABLEhead
-\def\dosetTABLEhead[#1][#2]#3\end{\setvalue{@@TABLEhead#1}{\TABLEnoalign{\global\settrue\someTABLEhead}#3}}
-\def\dosetTABLEtail[#1][#2]#3\end{\setvalue{@@TABLEtail#1}{\TABLEnoalign{\global\settrue\someTABLEtail}#3}}
+\long\def\dosetTABLEhead[#1][#2]#3\end{\setvalue{@@TABLEhead#1}{\TABLEnoalign{\global\settrue\someTABLEhead}#3}}
+\long\def\dosetTABLEtail[#1][#2]#3\end{\setvalue{@@TABLEtail#1}{\TABLEnoalign{\global\settrue\someTABLEtail}#3}}
%D Redudant \type{\HL}'s are removed automatically, so
%D mid||lines can be used without problems.
@@ -1454,7 +1455,7 @@
\global\TABLEgraydonefalse
\fi}
-\def\defineTABLEendings
+\unexpanded\def\defineTABLEendings
{\let\SR\TableSR
\let\FR\TableFR
\let\MR\TableMR
@@ -1694,13 +1695,13 @@
%D \sym{\type{\HC}} a horizontal colored line
%D \stopitemize
-% \def\defineTABLErules
+% \unexpanded\def\defineTABLErules
% {\let\VL\TableVL
% \let\VC\TableVC
% \let\HL\TableHL
% \let\HC\TableHC}
-\def\defineTABLErules
+\unexpanded\def\defineTABLErules
{\let\VL\TableVL
\let\VC\TableVC
\let\HL\TableHL
@@ -1865,7 +1866,7 @@
% n+1 uitleggen
-\def\defineTABLEsteps
+\unexpanded\def\defineTABLEsteps
{\let\NL\TableNL
\let\NR\TableNR
\let\NC\TableNC
@@ -1931,7 +1932,7 @@
\newif\ifTABLEdivision
-% \def\defineTABLEdivisions
+% \unexpanded\def\defineTABLEdivisions
% {\global\TABLEdivisionfalse % in start
% \let\DL\TableDL
% \let\DC\TableDC
@@ -1939,7 +1940,7 @@
% \let\VD\TableDV
% \let\DR\TableDR}
-\def\defineTABLEdivisions
+\unexpanded\def\defineTABLEdivisions
{\global\TABLEdivisionfalse % in start
\let\DL\TableDL
\let\DC\TableDC
@@ -2044,7 +2045,7 @@
% definieer: \CL \RL (eerste \CL[green] = hele row! / \CL[1,green])
% dus: \CL en \RL mix tussen \HL en \BL
-\def\defineTABLEbackgrounds
+\unexpanded\def\defineTABLEbackgrounds
{\let\BC \TableBC
\let\BL \TableBL
\let\BR \TableBR
@@ -2345,7 +2346,7 @@
\global\chardef\TABLEendofrowdepth \TABLErowfactor
\fi}
-\def\defineTABLEshorthands%
+\unexpanded\def\defineTABLEshorthands%
{\def\SPAN##1{\use{##1}}%
\def\TWO {\use2}%
\def\THREE {\use3}%
@@ -2354,7 +2355,7 @@
\def\SIX {\use6}%
\def\REF {\ReFormat}}
-\def\defineTABLEunits
+\unexpanded\def\defineTABLEunits
{\processaction
[\@@tidistance]
[ \v!none=>\OpenUp00\def\LOW{\Lower6 },
@@ -2376,7 +2377,7 @@
% De macro's t.b.v. instellingen.
-\def\setuptables
+\unexpanded\def\setuptables
{\dosingleargument\dosetuptables}
\def\dosetuptables[#1]%
@@ -2414,8 +2415,8 @@
\expanded{\switchtobodyfont[\@@tibodyfont]}%
% linecolor
\doifsomething\@@tirulecolor
- {\def\startglobalTABLEcolor{\startcolor[\@@tirulecolor]}%
- \def\stopglobalTABLEcolor {\stopcolor}}%
+ {\unexpanded\def\startglobalTABLEcolor{\startcolor[\@@tirulecolor]}%
+ \unexpanded\def\stopglobalTABLEcolor {\stopcolor}}%
% linethickness
\LineThicknessFactor4
\scratchdimen\@@tirulethickness
@@ -2423,10 +2424,10 @@
\expanded{\NormalTLTU{\the\scratchdimen}}%
% spacing, was depth=4 height=8 (counters, sigh, now macros)
\doifelse\@@tiheight\v!strut
- {\let\StrutHeightFactor\@@itheight}
+ {\let\StrutHeightFactor\strutheightfactor}
{\let\StrutHeightFactor\@@tiheight}%
\doifelse\@@tidepth\v!strut
- {\let\StrutDepthFactor\@@itdepth}
+ {\let\StrutDepthFactor\strutdepthfactor}
{\let\StrutDepthFactor\@@tidepth}%
\scratchdimen\StrutHeightFactor\points \multiply\scratchdimen 10%
\edef\StrutHeightFactor{\withoutpt\the\scratchdimen}%
diff --git a/Master/texmf-dist/tex/context/base/tabl-tbl.mkii b/Master/texmf-dist/tex/context/base/tabl-tbl.mkii
index 15e827e68b7..09fa4105c53 100644
--- a/Master/texmf-dist/tex/context/base/tabl-tbl.mkii
+++ b/Master/texmf-dist/tex/context/base/tabl-tbl.mkii
@@ -1221,7 +1221,8 @@
\dotabulaterule
\ifnum\noftabulatelines>\plusone
\ifnum\noftabulatelines<\minusnoftabulatelines
- \vskip\topskip\allowbreak\vskip-\topskip
+ % \vskip \topskip\allowbreak \vskip-\topskip
+ \vskip1\topskip\allowbreak\vskip-1\topskip
\vskip-\tabulateparameter\c!rulethickness
\dotabulaterule
\fi
diff --git a/Master/texmf-dist/tex/context/base/tabl-tbl.mkiv b/Master/texmf-dist/tex/context/base/tabl-tbl.mkiv
index bfff978ab70..400d8a659de 100644
--- a/Master/texmf-dist/tex/context/base/tabl-tbl.mkiv
+++ b/Master/texmf-dist/tex/context/base/tabl-tbl.mkiv
@@ -15,6 +15,8 @@
% \processbetween gebruiken in head/tail macros
+% todo: \aligntab \alignmark (after 0.60 is out)
+
\unprotect
%D I can probably reimplement this using a \LUA||\TEX\ combination
@@ -173,6 +175,7 @@
\newif \ifframedtabulate
\newdimen \tabulatepwidth
+\newdimen \tabulatexwidth
\newdimen \tabulatewidth
\newdimen \tabulateunit
\newdimen \tabulatemaxpheight
@@ -316,6 +319,13 @@
\unexpanded\def\beforetabulateentry{\ignorespaces\tabulatehook}
\unexpanded\def\aftertabulateentry {\unskip\unskip\ifmmode\else\endgraf\fi}
+\unexpanded\def\beginreshapedtabulatepar
+ {\dowithnextbox
+ {\ctxlua{commands.doreshapeframedbox(\number\nextbox)}\ifvmode\unvbox\else\box\fi\nextbox}
+ \vbox\bgroup}
+
+\let\endreshapedtabulatepar\egroup
+
\def\dodosettabulatepreamble#1#2% only makes sense for many tabulates
{\normalexpanded{\!!toksa{\the\!!toksa
&\hskip\pretabskip\noexpand\pretabrule##&%
@@ -328,7 +338,7 @@
\noexpand\autotabulatetrue
\fi
\else
- \ifnum\tabulatemodus=\zeropoint
+ \ifnum\tabulatemodus=\zerocount
\hbox to
\else
\hsize
@@ -339,8 +349,11 @@
\noexpand\bbskip
\bgroup % we cannot combine the if because a cell may have only one ##
\noexpand#1%
+ \ifcase\tabulatereshape\else
+ \beginreshapedtabulatepar
+ \fi
\noexpand\ifnum\noexpand\tabulatetype=\plusone\noexpand\else
- \the\tabulatebmath
+ \the\tabulatebmath % maybe later?
\the\tabulatefont
\the\tabulatesettings
\the\tabulatebefore
@@ -356,6 +369,9 @@
\the\tabulateafter
\the\tabulateemath
\noexpand\fi
+ \ifcase\tabulatereshape\else
+ \endreshapedtabulatepar
+ \fi
\noexpand#2%
\egroup
\egroup
@@ -410,8 +426,8 @@
\def\gettabulatepreskip#1%
{\doifnumberelse{#1}
- {\edef\pretabskip{\the\dimenexpr#1\tabulateunit}\let\next\empty}
- {\edef\pretabskip{\the\dimenexpr.5\tabulateunit}\def\next{#1}}%
+ {\edef\pretabskip{\the\dimexpr#1\tabulateunit}\let\next\empty}
+ {\edef\pretabskip{\the\dimexpr.5\tabulateunit}\def\next{#1}}%
\@EA\settabulatepreamble\next}
\def\gettabulateposskip#1%
@@ -423,8 +439,8 @@
\def\gettabulatepreposskip#1%
{\doifnumberelse{#1}
- {\edef\pretabskip{\the\dimenexpr#1\tabulateunit}\let\next\empty}
- {\edef\pretabskip{\the\dimenexpr.5\tabulateunit}\def\next{#1}}%
+ {\edef\pretabskip{\the\dimexpr#1\tabulateunit}\let\next\empty}
+ {\edef\pretabskip{\the\dimexpr.5\tabulateunit}\def\next{#1}}%
\let\postabskip\pretabskip
\let\gettabulateexit\settabulatepreamble
\@EA\settabulatepreamble\next}
@@ -483,6 +499,8 @@
[ \v!fit=>\let\tabulatemodus\plusthree,
\v!fixed=>\let\tabulatemodus\plusthree
\tabulatenopbreaktrue,
+ \v!auto=>\let\tabulatemodus\plusthree
+ \let\tabulatereshape\plusone,
\s!unknown=>\tabulatewidth#1\relax]%
\ifnum\tabulatedimen=\plusone
\global\advance\tabulatepwidth\tabulatewidth
@@ -533,11 +551,12 @@
{\let\tabulatealign\@@tabulatealign
\let\tabulatemodus\zerocount
\let\tabulatedimen\zerocount
- \tabulatebefore \emptytoks
- \tabulateafter \emptytoks
- \tabulatebmath \emptytoks
- \tabulateemath \emptytoks
- \tabulatefont \emptytoks
+ \let\tabulatereshape\zerocount
+ \tabulatebefore\emptytoks
+ \tabulateafter\emptytoks
+ \tabulatebmath\emptytoks
+ \tabulateemath\emptytoks
+ \tabulatefont\emptytoks
\tabulatesettings\emptytoks
\global\advance\tabulatecolumns\plusone
\expandafter\let\csname\??tt:s:\the\tabulatecolumns\endcsname\donothing
@@ -947,7 +966,7 @@
%D When set to true, no (less) break optimization is done.
-\newif\iftolerantTABLEbreak
+\newif\iftolerantTABLEbreak % used in styles !
%D The main processing macro is large but splitting it up
%D would make things less clear.
@@ -1017,7 +1036,7 @@
\def\tabulatexeskipone{\par\egroup\egroup\glet\tabulatehook\dotabulatehook}
\def\tabulatebaselinecorrection
- {\def\dobaselinecorrection
+ {\def\dobaselinecorrection % todo: mkiv
{\vskip-\prevdepth
\vskip\strutdp
\vskip\strutdp}%
@@ -1042,26 +1061,31 @@
\global\tabulatecolumn\zerocount
\resettabulatepheight
\unskip\unskip\crcr\flushtabulated
- \TABLEnoalign
- {\the\everyaftertabulaterow}%
- \TABLEnoalign
- {\iftolerantTABLEbreak\else
- \ifconditional\tabulatesomeamble \ifcase\tabulaterepeathead \else
- \allowbreak
- \fi \fi
- \ifnum\noftabulatelines=\plusone
- \dotabulatenobreak
- \else\ifnum\noftabulatelines=\minusnoftabulatelines
- \ifnum\tabulatemaxplines<\plustwo
- \dotabulatenobreak
- \else
- \allowbreak % needed with pbreak prevention
- \fi
- \else
- \allowbreak % needed with pbreak prevention
- \fi\fi
- \fi
- \global\tabulatefirstflushedfalse}}
+ \TABLEnoalign{\the\everyaftertabulaterow}%
+ \TABLEnoalign{\checktabulatepenaltiesa}}
+
+\def\checktabulatepenaltiesa
+ {\iftolerantTABLEbreak\else
+ \ifnum\totalnoftabulatelines=\plusone
+ % \allowbreak
+ \else
+ \ifconditional\tabulatesomeamble \ifcase\tabulaterepeathead \else
+ \allowbreak
+ \fi \fi
+ \ifnum\noftabulatelines=\plusone
+ \dotabulatenobreak
+ \else\ifnum\noftabulatelines=\minusnoftabulatelines
+ \ifnum\tabulatemaxplines<\plustwo
+ \dotabulatenobreak
+ \else
+ \allowbreak % needed with pbreak prevention
+ \fi
+ \else
+ \allowbreak % needed with pbreak prevention
+ \fi\fi
+ \fi
+ \fi
+ \global\tabulatefirstflushedfalse}
\def\tabulatebbskiptwo
{\ifvoid\tablebox\tabulatecolumn
@@ -1175,12 +1199,23 @@
\prevdepth\strutdp
\dotabulatenobreak}}
+% see ***
+%
+% \enabletrackers[nodes.page_vspacing]
+% \starttext
+% \starttabulate[||] \dorecurse{100}{\NC Eins \NC \NR \HL} \stoptabulate
+% \stoptext
+
\def\tabulateMLfive{\TABLEnoalign
{\dotabulateruleseperator
\dotabulaterule
\ifnum\noftabulatelines>\plusone
\ifnum\noftabulatelines<\minusnoftabulatelines
- \vskip\topskip\allowbreak\vskip-\topskip
+ % *** somehow topskip messes up as it's intercepted
+ % \vskip \topskip\allowbreak\vskip- \topskip
+ % messy anyhow so this needs to be improved, so for
+ % the momenet we keep this bugged variant
+ \vskip1\topskip\allowbreak\vskip-1\topskip
\vskip-\tabulateparameter\c!rulethickness
\dotabulaterule
\fi
@@ -1223,6 +1258,7 @@
\totalnoftabulatelines\noftabulatelines
\minusnoftabulatelines\noftabulatelines
\global\tabulatepwidth\zeropoint
+ \global\tabulatexwidth\zeropoint
\global\tabulateequalfalse
\resettabulatepheight
\ifinsidesplitfloat
@@ -1291,7 +1327,7 @@
\ifnum\nofautotabulate>\zerocount
% so, even if the natural size is larger, in the final
% run, we force the calculated width
- \tabulatewidth\dimexpr\hsize-\wd0-\tabulatepwidth\relax
+ \tabulatewidth\dimexpr\hsize-\wd0-\tabulatepwidth-\tabulatexwidth\relax
\ifnum\nofautotabulate>\zerocount
\divide\tabulatewidth \nofautotabulate\relax
\fi
@@ -1446,7 +1482,7 @@
% \NC \digits $@@@.@@1,@@$ \NC\NR
% \stoptabulatie
-\def\setuptabulate
+\unexpanded\def\setuptabulate
{\dotripleempty\dosetuptabulate}
\def\dosetuptabulate[#1][#2][#3]%
diff --git a/Master/texmf-dist/tex/context/base/tabl-tsp.mkiv b/Master/texmf-dist/tex/context/base/tabl-tsp.mkiv
index 49bb7ad90ed..9ceb3af6e89 100644
--- a/Master/texmf-dist/tex/context/base/tabl-tsp.mkiv
+++ b/Master/texmf-dist/tex/context/base/tabl-tsp.mkiv
@@ -29,12 +29,14 @@
% \splitfloat [settings] {\placetable[optional args]{test}} {content}
-\definenumber
+% \def\s!noftablesplits{nofsplittables}
+
+\definenumber % we need a nicer name like nofsplittables, we then also need to set \s!parent
[\??si]
[\c!way=\v!by\v!text,
\c!conversion=\@@siconversion]
-\def\setupfloatsplitting
+\unexpanded\def\setupfloatsplitting
{\dodoubleargument\getparameters[\??si]}
\newif\ifinsidesplitfloat % will become chardef
diff --git a/Master/texmf-dist/tex/context/base/task-ini.lua b/Master/texmf-dist/tex/context/base/task-ini.lua
index 7ba20fa204a..aaa97ec4910 100644
--- a/Master/texmf-dist/tex/context/base/task-ini.lua
+++ b/Master/texmf-dist/tex/context/base/task-ini.lua
@@ -1,6 +1,6 @@
if not modules then modules = { } end modules ['task-ini'] = {
version = 1.001,
- comment = "companion to task-ini.tex",
+ comment = "companion to task-ini.mkiv",
author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
copyright = "PRAGMA ADE / ConTeXt Development Team",
license = "see context related readme files"
@@ -8,44 +8,87 @@ if not modules then modules = { } end modules ['task-ini'] = {
-- this is a temporary solution, we need to isolate some modules and then
-- the load order can determine the trickery to be applied to node lists
+--
+-- we can disable more handlers and enable then when really used (*)
-tasks.appendaction("processors", "normalizers", "fonts.collections.process")
-tasks.appendaction("processors", "normalizers", "fonts.checkers.missing")
+tasks.appendaction("processors", "normalizers", "fonts.collections.process") -- todo
+tasks.appendaction("processors", "normalizers", "fonts.checkers.missing") -- disabled
-tasks.appendaction("processors", "characters", "chars.handle_mirroring")
-tasks.appendaction("processors", "characters", "chars.handle_casing")
-tasks.appendaction("processors", "characters", "chars.handle_breakpoints")
+tasks.appendaction("processors", "characters", "chars.handle_mirroring") -- disabled
+tasks.appendaction("processors", "characters", "chars.handle_casing") -- disabled
+tasks.appendaction("processors", "characters", "chars.handle_digits") -- disabled
+tasks.appendaction("processors", "characters", "chars.handle_breakpoints") -- disabled
tasks.appendaction("processors", "characters", "scripts.preprocess")
-tasks.appendaction("processors", "words", "kernel.hyphenation")
-tasks.appendaction("processors", "words", "languages.words.check")
+tasks.appendaction("processors", "words", "kernel.hyphenation") -- always on
+tasks.appendaction("processors", "words", "languages.words.check") -- disabled
-tasks.appendaction("processors", "fonts", "nodes.process_characters")
-tasks.appendaction("processors", "fonts", "nodes.inject_kerns")
-tasks.appendaction("processors", "fonts", "nodes.protect_glyphs", nil, "nohead")
-tasks.appendaction("processors", "fonts", "kernel.ligaturing")
-tasks.appendaction("processors", "fonts", "kernel.kerning")
+tasks.appendaction("processors", "fonts", "nodes.process_characters") -- maybe todo
+tasks.appendaction("processors", "fonts", "nodes.inject_kerns") -- maybe todo
+tasks.appendaction("processors", "fonts", "nodes.protect_glyphs", nil, "nohead") -- maybe todo
+tasks.appendaction("processors", "fonts", "kernel.ligaturing") -- always on
+tasks.appendaction("processors", "fonts", "kernel.kerning") -- always on
+tasks.appendaction("processors", "fonts", "nodes.stripping.process") -- disabled (might move)
-tasks.appendaction("processors", "lists", "lists.handle_spacing")
-tasks.appendaction("processors", "lists", "lists.handle_kerning")
+tasks.appendaction("processors", "lists", "lists.handle_spacing") -- disabled
+tasks.appendaction("processors", "lists", "lists.handle_kerning") -- disabled
-tasks.appendaction("shipouts", "normalizers", "nodes.cleanup_page")
-tasks.appendaction("shipouts", "normalizers", "nodes.add_references")
-tasks.appendaction("shipouts", "normalizers", "nodes.add_destinations")
+tasks.appendaction("shipouts", "normalizers", "nodes.cleanup_page") -- maybe todo
+tasks.appendaction("shipouts", "normalizers", "nodes.add_references") -- disabled
+tasks.appendaction("shipouts", "normalizers", "nodes.add_destinations") -- disabled
+tasks.appendaction("shipouts", "normalizers", "nodes.rules.process") -- disabled
+tasks.appendaction("shipouts", "normalizers", "nodes.shifts.process") -- disabled
-tasks.appendaction("shipouts", "finishers", "shipouts.handle_color")
-tasks.appendaction("shipouts", "finishers", "shipouts.handle_transparency")
-tasks.appendaction("shipouts", "finishers", "shipouts.handle_overprint")
-tasks.appendaction("shipouts", "finishers", "shipouts.handle_negative")
-tasks.appendaction("shipouts", "finishers", "shipouts.handle_effect")
-tasks.appendaction("shipouts", "finishers", "shipouts.handle_viewerlayer")
+tasks.appendaction("shipouts", "finishers", "shipouts.handle_color") -- disabled
+tasks.appendaction("shipouts", "finishers", "shipouts.handle_transparency") -- disabled
+tasks.appendaction("shipouts", "finishers", "shipouts.handle_colorintent") -- disabled
+tasks.appendaction("shipouts", "finishers", "shipouts.handle_negative") -- disabled
+tasks.appendaction("shipouts", "finishers", "shipouts.handle_effect") -- disabled
+tasks.appendaction("shipouts", "finishers", "shipouts.handle_viewerlayer") -- disabled
-tasks.appendaction("math", "normalizers", "noads.relocate_characters", nil, "nohead")
-tasks.appendaction("math", "normalizers", "noads.resize_characters", nil, "nohead")
-tasks.appendaction("math", "normalizers", "noads.respace_characters", nil, "nohead")
+tasks.appendaction("math", "normalizers", "noads.relocate_characters", nil, "nohead") -- always on
+tasks.appendaction("math", "normalizers", "noads.resize_characters", nil, "nohead") -- always on
+tasks.appendaction("math", "normalizers", "noads.respace_characters", nil, "nohead") -- always on
-tasks.appendaction("math", "builders", "noads.mlist_to_hlist")
+tasks.appendaction("math", "builders", "noads.mlist_to_hlist") -- always on
-- quite experimental
-tasks.appendaction("finalizers", "lists", "nodes.repackage_graphicvadjust")
+tasks.appendaction("finalizers", "lists", "nodes.repackage_graphicvadjust") -- todo
+
+-- rather new
+
+tasks.appendaction("mvlbuilders", "normalizers", "nodes.migrate_outwards")
+tasks.appendaction("mvlbuilders", "normalizers", "nodes.handle_page_spacing") -- last !
+
+tasks.appendaction("vboxbuilders", "normalizers", "nodes.handle_vbox_spacing")
+
+-- speedup: only kick in when used
+
+tasks.disableaction("processors", "fonts.checkers.missing")
+tasks.disableaction("processors", "chars.handle_breakpoints")
+tasks.disableaction("processors", "chars.handle_casing")
+tasks.disableaction("processors", "chars.handle_digits")
+tasks.disableaction("processors", "chars.handle_mirroring")
+tasks.disableaction("processors", "languages.words.check")
+tasks.disableaction("processors", "lists.handle_spacing")
+tasks.disableaction("processors", "lists.handle_kerning")
+tasks.disableaction("processors", "nodes.stripping.process")
+
+tasks.disableaction("shipouts", "nodes.rules.process")
+tasks.disableaction("shipouts", "nodes.shifts.process")
+tasks.disableaction("shipouts", "shipouts.handle_color")
+tasks.disableaction("shipouts", "shipouts.handle_transparency")
+tasks.disableaction("shipouts", "shipouts.handle_colorintent")
+tasks.disableaction("shipouts", "shipouts.handle_effect")
+tasks.disableaction("shipouts", "shipouts.handle_negative")
+tasks.disableaction("shipouts", "shipouts.handle_viewerlayer")
+
+tasks.disableaction("shipouts", "nodes.add_references")
+tasks.disableaction("shipouts", "nodes.add_destinations")
+
+tasks.disableaction("mvlbuilders", "nodes.migrate_outwards")
+
+callbacks.freeze("find_.*_file", "find file using resolver")
+callbacks.freeze("read_.*_file", "read file at once")
+callbacks.freeze("open_.*_file", "open file for reading")
diff --git a/Master/texmf-dist/tex/context/base/toks-ini.lua b/Master/texmf-dist/tex/context/base/toks-ini.lua
index 1313b04a238..ec60402d857 100644
--- a/Master/texmf-dist/tex/context/base/toks-ini.lua
+++ b/Master/texmf-dist/tex/context/base/toks-ini.lua
@@ -56,7 +56,7 @@ collectors.data = collectors.data or { }
function tex.printlist(data)
callbacks.push('token_filter', function ()
- callbacks.pop('token_filter')
+ callbacks.pop('token_filter') -- tricky but the nil assignment helps
return data
end)
end
@@ -142,7 +142,7 @@ 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
+ for i=1,#str do
t[#t+1] = tokens.other('*')
end
t[#t+1] = tokens.egroup
@@ -151,7 +151,9 @@ end
function collectors.with_words(tag,handle)
local t, w = { }, { }
handle = handle or collectors.default_words
- for _,v in ipairs(collectors.data[tag]) do
+ local tagdata = collectors.data[tag]
+ for k=1,#tagdata do
+ local v = tagdata[k]
if v[1] == commands.letter then
w[#w+1] = v[2]
else
@@ -201,7 +203,7 @@ collectors.show_methods.a = function(data) -- no need to store the table, just p
texsprint(ctxcatcodes, "\\starttabulate[|T|Tr|cT|Tr|T|]")
texsprint(ctxcatcodes, format(template,"cmd","chr","","id","name"))
texsprint(ctxcatcodes, "\\HL")
- for _,v in pairs(data) do
+ for _,v in next, data do
local cmd, chr, id, cs, sym = v[1], v[2], v[3], "", ""
local name = gsub(token.command_name(v) or "","_","\\_")
if id > 0 then
@@ -231,7 +233,7 @@ collectors.show_methods.b_c = function(data,swap) -- no need to store the table,
end
texsprint(ctxcatcodes, format(template,"cmd","chr","name"))
texsprint(ctxcatcodes, "\\HL")
- for _,v in pairs(data) do
+ for _,v in next, data do
local cmd, chr, id, cs, sym = v[1], v[2], v[3], "", ""
local name = gsub(token.command_name(v) or "","_","\\_")
if id > 0 then
diff --git a/Master/texmf-dist/tex/context/base/toks-ini.mkiv b/Master/texmf-dist/tex/context/base/toks-ini.mkiv
index 932c05f32e3..22deca745dd 100644
--- a/Master/texmf-dist/tex/context/base/toks-ini.mkiv
+++ b/Master/texmf-dist/tex/context/base/toks-ini.mkiv
@@ -19,7 +19,7 @@
%D Handy for manuals \unknown
-\def\starttokens [#1]{\ctxlua{collectors.install("#1", "stoptokens")}}
+\unexpanded\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")}}
@@ -62,7 +62,7 @@
\def\remaptokens#1%
{\ctxlua{collectors.handle("#1",function(str) return collectors.remapper.convert("#1",str) end)}}
-\def\defineremapper[#1]%
+\unexpanded\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}}%
diff --git a/Master/texmf-dist/tex/context/base/trac-deb.lua b/Master/texmf-dist/tex/context/base/trac-deb.lua
index f476169c395..97753f3e921 100644
--- a/Master/texmf-dist/tex/context/base/trac-deb.lua
+++ b/Master/texmf-dist/tex/context/base/trac-deb.lua
@@ -1,6 +1,6 @@
if not modules then modules = { } end modules ['trac-deb'] = {
version = 1.001,
- comment = "companion to luat-lib.tex",
+ comment = "companion to trac-deb.mkiv",
author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
copyright = "PRAGMA ADE / ConTeXt Development Team",
license = "see context related readme files"
@@ -9,19 +9,6 @@ if not modules then modules = { } end modules ['trac-deb'] = {
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']
-
lmx.htmfile = function(name) return environment.jobname .. "-status.html" end
lmx.lmxfile = function(name) return resolvers.find_file(name,'tex') end
@@ -31,8 +18,11 @@ if not tracers.strings then tracers.strings = { } end
tracers.strings.undefined = "undefined"
+local splitter = lpeg.splitat(":")
+local lpegmatch = lpeg.match
+
function tracers.split(csname)
- return csname:match("^(.+):(.+)$")
+ return lpegmatch(splitter,csname)
end
function tracers.type(csname)
@@ -82,30 +72,30 @@ function tracers.knownlist(name)
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()
+ local variables = {
+ ['title'] = 'ConTeXt Debug Information',
+ ['color-background-one'] = lmx.get('color-background-green'),
+ ['color-background-two'] = lmx.get('color-background-blue'),
+ }
+ lmx.show('context-debug.lmx',variables)
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")
+ local variables = {
+ ['title'] = 'ConTeXt Error Information',
+ ['errormessage'] = status.lasterrorstring,
+ ['linenumber'] = status.linenumber,
+ ['color-background-one'] = lmx.get('color-background-yellow'),
+ ['color-background-two'] = lmx.get('color-background-purple'),
+ }
if not filename then
- lmx.set('filename', 'unknown')
- lmx.set('errorcontext', 'error in filename')
+ variables.filename, variables.errorcontext = 'unknown', 'error in filename'
elseif type(filename) == "number" then
- lmx.set('filename', "<read " .. filename .. ">")
- lmx.set('errorcontext', 'unknown error')
+ variables.filename, variables.errorcontext = "<read " .. filename .. ">", '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 = { }
@@ -124,16 +114,14 @@ function tracers.showerror()
end
n = n + 1
end
- lmx.set('errorcontext', table.concat(context,"\n"))
+ variables.filename, variables.errorcontext = filename, table.concat(context,"\n")
else
- lmx.set('errorcontext', "")
+ variables.filename, variables.errorcontext = filename, ""
end
else
- lmx.set('filename', filename)
- lmx.set('errorcontext', 'file not found')
+ variables.filename, variables.errorcontext = filename, 'file not found'
end
- lmx.show('context-error.lmx')
- lmx.restore()
+ lmx.show('context-error.lmx',variables)
end
function tracers.overloaderror()
@@ -171,7 +159,7 @@ function tracers.dump_hash(filename,delta)
local list = { }
local hash = tex.hashtokens()
local command_name = token.command_name
- for name, token in pairs(hash) do
+ for name, token in next, hash do
if not delta or not saved[name] then
-- token: cmd, chr, csid -- combination cmd,chr determines name
local kind = command_name(token)
@@ -195,12 +183,5 @@ function tracers.register_dump_hash(delta)
main.register_stop_actions(1,function() tracers.dump_hash(nil,true) end) -- at front
end
--- trackers (maybe group the show by class)
-
-function trackers.show()
- commands.writestatus("","")
- for k,v in ipairs(trackers.list()) do
- commands.writestatus("tracker",v)
- end
- commands.writestatus("","")
-end
+directives.register("system.dumphash", function() tracers.register_dump_hash(false) end)
+directives.register("system.dumpdelta", function() tracers.register_dump_hash(true ) end)
diff --git a/Master/texmf-dist/tex/context/base/trac-deb.mkiv b/Master/texmf-dist/tex/context/base/trac-deb.mkiv
index 870c452adf7..b004cdeb495 100644
--- a/Master/texmf-dist/tex/context/base/trac-deb.mkiv
+++ b/Master/texmf-dist/tex/context/base/trac-deb.mkiv
@@ -37,7 +37,15 @@
}%
\to \everybye
-\def\showtrackers {\ctxlua{trackers.show()}}
-\def\resettrackers {\ctxlua{trackers.reset()}}
-\def\enabletrackers [#1]{\ctxlua{trackers.enable("#1")}}
-\def\disabletrackers[#1]{\ctxlua{trackers.disable("#1")}}
+\def\showtrackers {\ctxlua{trackers.show()}}
+\def\enabletrackers [#1]{\ctxlua{trackers.enable("#1")}}
+\def\disabletrackers [#1]{\ctxlua{trackers.disable("#1")}}
+\def\resettrackers {\ctxlua{trackers.reset()}}
+
+\def\showdirectives {\ctxlua{directives.show()}}
+\def\enabledirectives [#1]{\ctxlua{directives.enable("#1")}}
+\def\disabledirectives [#1]{\ctxlua{directives.disable("#1")}}
+
+\def\showexperiments {\ctxlua{experiments.show()}}
+\def\enableexperiments [#1]{\ctxlua{experiments.enable("#1")}}
+\def\disableexperiments[#1]{\ctxlua{experiments.disable("#1")}}
diff --git a/Master/texmf-dist/tex/context/base/trac-inf.lua b/Master/texmf-dist/tex/context/base/trac-inf.lua
index 3dfaf71192b..72f03675a1c 100644
--- a/Master/texmf-dist/tex/context/base/trac-inf.lua
+++ b/Master/texmf-dist/tex/context/base/trac-inf.lua
@@ -1,6 +1,6 @@
if not modules then modules = { } end modules ['trac-inf'] = {
version = 1.001,
- comment = "companion to luat-lib.tex",
+ comment = "companion to trac-inf.mkiv",
author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
copyright = "PRAGMA ADE / ConTeXt Development Team",
license = "see context related readme files"
@@ -25,6 +25,14 @@ function statistics.hastimer(instance)
return instance and instance.starttime
end
+function statistics.resettiming(instance)
+ if not instance then
+ notimer = { timing = 0, loadtime = 0 }
+ else
+ instance.timing, instance.loadtime = 0, 0
+ end
+end
+
function statistics.starttiming(instance)
if not instance then
notimer = { }
@@ -39,6 +47,8 @@ function statistics.starttiming(instance)
if not instance.loadtime then
instance.loadtime = 0
end
+ else
+--~ logs.report("system","nested timing (%s)",tostring(instance))
end
instance.timing = it + 1
end
@@ -84,6 +94,12 @@ function statistics.elapsedindeed(instance)
return t > statistics.threshold
end
+function statistics.elapsedseconds(instance,rest) -- returns nil if 0 seconds
+ if statistics.elapsedindeed(instance) then
+ return format("%s seconds %s", statistics.elapsedtime(instance),rest or "")
+ end
+end
+
-- general function
function statistics.register(tag,fnc)
@@ -161,3 +177,21 @@ function statistics.timed(action,report)
statistics.stoptiming(timer)
report("total runtime: %s",statistics.elapsedtime(timer))
end
+
+-- where, not really the best spot for this:
+
+commands = commands or { }
+
+local timer
+
+function commands.resettimer()
+ statistics.resettiming(timer)
+ statistics.starttiming(timer)
+end
+
+function commands.elapsedtime()
+ statistics.stoptiming(timer)
+ tex.sprint(statistics.elapsedtime(timer))
+end
+
+commands.resettimer()
diff --git a/Master/texmf-dist/tex/context/base/trac-lmx.lua b/Master/texmf-dist/tex/context/base/trac-lmx.lua
index 07f5ae291c0..664815c6618 100644
--- a/Master/texmf-dist/tex/context/base/trac-lmx.lua
+++ b/Master/texmf-dist/tex/context/base/trac-lmx.lua
@@ -1,72 +1,129 @@
if not modules then modules = { } end modules ['trac-lmx'] = {
- version = 1.001,
- comment = "companion to luat-lib.tex",
+ version = 1.002,
+ comment = "companion to trac-lmx.mkiv",
author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
copyright = "PRAGMA ADE / ConTeXt Development Team",
license = "see context related readme files"
}
-local gsub, format, concat = string.gsub, string.format, table.concat
+-- todo: use lpeg instead (although not really needed)
--- we can now use l-xml, and we can also use lpeg
+local gsub, format, concat, byte = string.gsub, string.format, table.concat, string.byte
lmx = lmx or { }
-lmx.escapes = {
+local 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 io.loaddata(resolvers.find_file(filename))
-end
-
-lmx.converting = false
-
-local templates = { }
-
-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 = templates[template]
- if not data then
- data = lmx.loadedfile(template)
- templates[template] = data
- end
- local text = { }
- function lmx.print(...)
- text[#text+1] = concat({...})
- end
- function lmx.variable(str)
- return lmx.variables[str] or ""
- end
- function lmx.escape(str)
- str = tostring(str)
- str = gsub(str,'&','&amp;')
- str = gsub(str,'[<>"]',lmx.escapes)
- return str
- 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
+-- variables
+
+lmx.variables = { } -- global, shared
+
+local lmxvariables = lmx.variables
+
+lmxvariables['title-default'] = 'ConTeXt LMX File'
+lmxvariables['title'] = lmx.variables['title-default']
+lmxvariables['color-background-green'] = '#4F6F6F'
+lmxvariables['color-background-blue'] = '#6F6F8F'
+lmxvariables['color-background-yellow'] = '#8F8F6F'
+lmxvariables['color-background-purple'] = '#8F6F8F'
+lmxvariables['color-background-body'] = '#808080'
+lmxvariables['color-background-main'] = '#3F3F3F'
+lmxvariables['color-background-one'] = lmxvariables['color-background-green']
+lmxvariables['color-background-two'] = lmxvariables['color-background-blue']
+
+function lmx.set(key, value)
+ lmxvariables[key] = value
+end
+
+function lmx.get(key)
+ return lmxvariables[key] or ""
+end
+
+-- helpers
+
+local variables, result = { } -- we assume no nesting
+
+local function do_print(one,two,...)
+ if two then
+ result[#result+1] = concat { one, two, ... }
+ else
+ result[#result+1] = one
+ end
+end
+
+local function do_escape(str)
+ str = tostring(str)
+ str = gsub(str,'&','&amp;')
+ str = gsub(str,'[<>"]',escapes)
+ return str
+end
+
+local function do_urlescaped(str)
+ return (gsub(str,"[^%a%d]",format("%%0x",byte("%1"))))
+end
+
+function do_type(str)
+ if str then do_print("<tt>" .. do_escape(str) .. "</tt>") end
+end
+
+local function do_variable(str)
+ return variables[str] or lmxvariables[str] -- or format("<!-- unset lmx instance variable: %s -->",str or "?")
+end
+
+function lmx.loadedfile(name)
+ name = (resolvers and resolvers.find_file and resolvers.find_file(name)) or name
+ return io.loaddata(name)
+end
+
+local function do_include(filename)
+ local stylepath = do_variable('includepath')
+ local data = lmx.loadedfile(filename)
+ if (not data or data == "") and stylepath ~= "" then
+ data = lmx.loadedfile(file.join(stylepath,filename))
+ end
+ if not data or data == "" then
+ data = format("<!-- unknown lmx include file: %s -->",filename)
+ end
+ return data
+end
+
+lmx.print = do_print
+lmx.type = do_type
+lmx.escape = do_escape
+lmx.urlescape = do_escape
+lmx.variable = do_variable
+lmx.include = do_include
+
+function lmx.pv(str)
+ do_print(do_variable(str) or "")
+end
+
+function lmx.tv(str)
+ lmx.type(do_variable(str) or "")
+end
+
+local template = [[
+ local definitions = { }
+ local p, v, e, t, pv, tv = lmx.print, lmx.variable, lmx.escape, lmx.type, lmx.pv, lmx.tv
+ %s
+]]
+
+local cache = { }
+
+local trace = false
+
+function lmx.new(data,variables)
+ data = data or ""
+ local known = cache[data]
+ if not known then
+ local definitions = { }
data = gsub(data,"<%?lmx%-include%s+(.-)%s-%?>", function(filename)
- return lmx.loadedfile(filename)
+ return lmx.include(filename)
end)
local definitions = { }
data = gsub(data,"<%?lmx%-define%-begin%s+(%S-)%s-%?>(.-)<%?lmx%-define%-end%s-%?>", function(tag,content)
@@ -76,78 +133,86 @@ function lmx.convert(template,result) -- todo: use lpeg instead
data = gsub(data,"<%?lmx%-resolve%s+(%S-)%s-%?>", function(tag)
return definitions[tag] or ""
end)
- data = gsub(data,"%c%s-(<%?lua .-%?>)%s-%c", function(lua)
- return "\n" .. lua .. " "
- end)
- data = gsub(data .. "<?lua ?>","(.-)<%?lua%s+(.-)%?>", function(txt, lua)
- txt = gsub(txt,"%c+", "\\n")
- txt = gsub(txt,'"' , '\\"')
- txt = gsub(txt,"'" , "\\'")
- -- txt = gsub(txt,"([\'\"])", { ["'"] = '\\"', ['"'] = "\\'" } )
- return "p(\"" .. txt .. "\")\n" .. lua .. "\n"
+ data = gsub(data .. "<?lua ?>","(.-)<%?lua%s+(.-)%s*%?>", function(txt,lua)
+ txt = gsub(txt,"%c+","\n")
+ return format("p(%q)%s ",txt,lua) -- nb! space
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
- text = concat(text)
- if result then
- io.savedata(result,text)
- else
- return text
- end
+ data = format(template,data)
+ known = {
+ data = trace and data,
+ variables = variables or { },
+ converter = loadstring(data),
+ }
+ elseif variables then
+ known.variables = variables
+ end
+ return known, known.variables
+end
+
+function lmx.reset(self)
+ self.variables = { }
+end
+
+function lmx.result(self)
+ if trace then
+ return self.data
+ else
+ variables, result = self.variables, { }
+ self.converter()
+ return concat(result)
+ end
+end
+
+-- file converter
+
+local loaded = { }
+
+function lmx.convert(templatefile,resultfile,variables)
+ local data = loaded[templatefile]
+ if not data then
+ data = lmx.new(lmx.loadedfile(templatefile),variables)
+ loaded[template] = data
+ elseif variables then
+ data.variables = variables
+ end
+ local result = lmx.result(data)
+ if resultfile then
+ io.savedata(resultfile,result)
+ else
+ return lmx.result(data,result)
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
+lmx.lmxfile = function(filename) return filename end -- beware, these can be set!
+lmx.htmfile = function(filename) return filename end -- beware, these can be set!
-if os.platform == "windows" then
+if os.type == "windows" then
lmx.popupfile = function(filename) os.execute("start " .. filename) end
else
lmx.popupfile = function(filename) os.execute(filename) end
end
-function lmx.make(name)
+function lmx.make(name,variables)
local lmxfile = lmx.lmxfile(name)
local htmfile = lmx.htmfile(name)
if lmxfile == htmfile then
htmfile = gsub(lmxfile, "%.%a+$", "html")
end
- lmx.convert(lmxfile, htmfile)
+ lmx.convert(lmxfile,htmfile,variables)
return htmfile
end
-function lmx.show(name)
- local htmfile = lmx.make(name)
+function lmx.show(name,variables)
+ local htmfile = lmx.make(name,variables)
lmx.popupfile(htmfile)
return 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
+-- test
-function lmx.restore()
- for _,key in pairs(lmx.restorables) do
- lmx.variables[key] = lmx.variables['@@' .. key]
- end
- lmx.restorables = { }
-end
+--~ print(lmx.result(lmx.new(io.loaddata("t:/sources/context-timing.lmx"))))
-- command line
diff --git a/Master/texmf-dist/tex/context/base/trac-log.lua b/Master/texmf-dist/tex/context/base/trac-log.lua
index d05bc9fec9c..0d4a1b0a9f1 100644
--- a/Master/texmf-dist/tex/context/base/trac-log.lua
+++ b/Master/texmf-dist/tex/context/base/trac-log.lua
@@ -1,6 +1,6 @@
-if not modules then modules = { } end modules ['luat-log'] = {
+if not modules then modules = { } end modules ['trac-log'] = {
version = 1.001,
- comment = "companion to luat-lib.tex",
+ comment = "companion to trac-log.mkiv",
author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
copyright = "PRAGMA ADE / ConTeXt Development Team",
license = "see context related readme files"
@@ -8,7 +8,11 @@ if not modules then modules = { } end modules ['luat-log'] = {
-- this is old code that needs an overhaul
-local write_nl, write, format = texio.write_nl or print, texio.write or io.write, string.format
+--~ io.stdout:setvbuf("no")
+--~ io.stderr:setvbuf("no")
+
+local write_nl, write = texio.write_nl or print, texio.write or io.write
+local format, gmatch = string.format, string.gmatch
local texcount = tex and tex.count
if texlua then
@@ -89,25 +93,48 @@ function logs.tex.line(fmt,...) -- new
end
end
+--~ function logs.tex.start_page_number()
+--~ local real, user, sub = texcount.realpageno, texcount.userpageno, texcount.subpageno
+--~ if real > 0 then
+--~ if user > 0 then
+--~ if sub > 0 then
+--~ write(format("[%s.%s.%s",real,user,sub))
+--~ else
+--~ write(format("[%s.%s",real,user))
+--~ end
+--~ else
+--~ write(format("[%s",real))
+--~ end
+--~ else
+--~ write("[-")
+--~ end
+--~ end
+
+--~ function logs.tex.stop_page_number()
+--~ write("]")
+--~ end
+
+local real, user, sub
+
function logs.tex.start_page_number()
- local real, user, sub = texcount.realpageno, texcount.userpageno, texcount.subpageno
+ real, user, sub = texcount.realpageno, texcount.userpageno, texcount.subpageno
+end
+
+function logs.tex.stop_page_number()
if real > 0 then
if user > 0 then
if sub > 0 then
- write(format("[%s.%s.%s",real,user,sub))
+ logs.report("pages", "flushing realpage %s, userpage %s, subpage %s",real,user,sub)
else
- write(format("[%s.%s",real,user))
+ logs.report("pages", "flushing realpage %s, userpage %s",real,user)
end
else
- write(format("[%s",real))
+ logs.report("pages", "flushing realpage %s",real)
end
else
- write("[-")
+ logs.report("pages", "flushing page")
end
-end
-
-function logs.tex.stop_page_number()
- write("]")
+ io.flush()
end
logs.tex.report_job_stat = statistics.show_job_stat
@@ -207,7 +234,7 @@ end
function logs.setprogram(_name_,_banner_,_verbose_)
name, banner = _name_, _banner_
if _verbose_ then
- trackers.enable("resolvers.verbose")
+ trackers.enable("resolvers.locating")
end
logs.set_method("tex")
logs.report = report -- also used in libraries
@@ -220,9 +247,9 @@ end
function logs.setverbose(what)
if what then
- trackers.enable("resolvers.verbose")
+ trackers.enable("resolvers.locating")
else
- trackers.disable("resolvers.verbose")
+ trackers.disable("resolvers.locating")
end
logs.verbose = what or false
end
@@ -239,7 +266,7 @@ logs.report = logs.tex.report
logs.simple = logs.tex.report
function logs.reportlines(str) -- todo: <lines></lines>
- for line in str:gmatch("(.-)[\n\r]") do
+ for line in gmatch(str,"(.-)[\n\r]") do
logs.report(line)
end
end
@@ -250,8 +277,12 @@ end
logs.simpleline = logs.reportline
-function logs.help(message,option)
+function logs.reportbanner() -- for scripts too
logs.report(banner)
+end
+
+function logs.help(message,option)
+ logs.reportbanner()
logs.reportline()
logs.reportlines(message)
local moreinfo = logs.moreinfo or ""
@@ -282,3 +313,8 @@ end
--~ for i=1,10 do
--~ logs.system(syslogname,"context","test","fonts","font %s recached due to newer version (%s)","blabla","123")
--~ end
+
+function logs.fatal(where,...)
+ logs.report(where,"fatal error: %s, aborting now",format(...))
+ os.exit()
+end
diff --git a/Master/texmf-dist/tex/context/base/trac-tex.mkiv b/Master/texmf-dist/tex/context/base/trac-tex.mkiv
index 8443541600f..9c596feabc3 100644
--- a/Master/texmf-dist/tex/context/base/trac-tex.mkiv
+++ b/Master/texmf-dist/tex/context/base/trac-tex.mkiv
@@ -33,4 +33,23 @@
\def\doenabletextracer #1{\csname enabletracer#1\endcsname}
\def\dodisabletextracer#1{\csname disabletracer#1\endcsname}
+% context --directives=system.nostatistics ...
+
+\def\nomkivstatistics{\ctxlua{statistics.enable = false}} % for taco
+
+\def\tracersdumphash {\ctxlua{tracers.register_dump_hash(false)}}
+\def\tracersdumpdelta{\ctxlua{tracers.register_dump_hash(true)}}
+
+% wrong place:
+
+\def\traceluausage
+ {\dosingleempty\dotraceluausage}
+
+\def\dotraceluausage[#1]%
+ {\ctxlua{debugger.enable()}%
+ \appendtoks
+ \ctxlua{debugger.disable() debugger.showstats(print,\doifnumberelse{#1}{#1}{5000})}^
+ \to \everybye
+ \gdef\dotraceluausage[#1]{}}
+
\protect \endinput
diff --git a/Master/texmf-dist/tex/context/base/trac-tim.lua b/Master/texmf-dist/tex/context/base/trac-tim.lua
index 82c03f4c7a2..a8725bb5c11 100644
--- a/Master/texmf-dist/tex/context/base/trac-tim.lua
+++ b/Master/texmf-dist/tex/context/base/trac-tim.lua
@@ -6,10 +6,14 @@ if not modules then modules = { } end modules ['trac-tim'] = {
license = "see context related readme files"
}
-goodies = goodies or { }
-goodies.progress = goodies.progress or { }
+local format, gsub = string.format, string.gsub
+local concat, sort = table.concat, table.sort
+local next, tonumber = next, tonumber
-local progress = goodies.progress
+plugins = plugins or { }
+plugins.progress = plugins.progress or { }
+
+local progress = plugins.progress
progress = progress or { }
@@ -26,7 +30,7 @@ local params = {
"pdf_mem_ptr",
"pdf_mem_size",
"pdf_os_cntr",
- "pool_ptr",
+-- "pool_ptr", -- obsolete
"str_ptr",
}
@@ -36,12 +40,8 @@ local last = os.clock()
local data = { }
function progress.save()
- local f = io.open((name or progress.defaultfilename) .. ".lut","w")
- if f then
- f:write(table.serialize(data,true))
- f:close()
- data = { }
- end
+ io.savedata((name or progress.defaultfilename) .. ".lut",table.serialize(data,true))
+ data = { }
end
function progress.store()
@@ -50,7 +50,7 @@ function progress.store()
elapsed_time = c - last,
node_memory = nodes.usage(),
}
- for k, v in pairs(params) do
+ for k, v in next, params do
if status[v] then t[v] = status[v] end
end
data[#data+1] = t
@@ -61,32 +61,7 @@ end
local processed = { }
-function progress.bot(name,tag)
- local d = progress.convert(name)
- return d.bot[tag] or 0
-end
-function progress.top(name,tag)
- local d = progress.convert(name)
- return d.top[tag] or 0
-end
-function progress.pages(name,tag)
- local d = progress.convert(name)
- return d.pages or 0
-end
-function progress.path(name,tag)
- local d = progress.convert(name)
- return d.paths[tag] or "origin"
-end
-function progress.nodes(name)
- local d = progress.convert(name)
- return d.names or { }
-end
-function progress.parameters(name)
- local d = progress.convert(name)
- return params -- shared
-end
-
-function progress.convert(name)
+local function convert(name)
name = ((name ~= "") and name) or progress.defaultfilename
if not processed[name] then
local names, top, bot, pages, paths, keys = { }, { }, { }, 0, { }, { }
@@ -97,21 +72,22 @@ function progress.convert(name)
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
+ for k=1,#data do
+ for k, v in next, data[k].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
+ for k=1,#data do
+ local m = data[k].node_memory
+ for k, v in next, 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]
+ for k=1,#data do
+ local v = data[k][tag]
+ v = v and (subtag and v[subtag]) or v
if v then
v = tonumber(v)
if b then
@@ -127,30 +103,30 @@ function progress.convert(name)
end
end
local tagname = subtag or tag
- top[tagname] = (string.format("%.3f",t)):gsub("%.000$","")
- bot[tagname] = (string.format("%.3f",b)):gsub("%.000$","")
+ top[tagname] = gsub(format("%.3f",t),"%.000$","")
+ bot[tagname] = gsub(format("%.3f",b),"%.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 .. ")"
+ for k=1,#s do
+ s[k] = "(" .. k .. "," .. (s[k]-b)*delta .. ")"
end
- paths[tagname] = table.concat(s,"--")
+ paths[tagname] = concat(s,"--")
end
- for _, tag in pairs(params) do
+ for _, tag in next, params do
path(tag)
end
- for tag, _ in pairs(keys) do
+ for tag, _ in next, keys do
path("node_memory",tag)
names[#names+1] = tag
end
pages = pages - 1
end
end
- table.sort(names)
+ sort(names)
processed[name] = {
names = names,
top = top,
@@ -161,3 +137,24 @@ function progress.convert(name)
end
return processed[name]
end
+
+progress.convert = convert
+
+function progress.bot(name,tag)
+ return convert(name).bot[tag] or 0
+end
+function progress.top(name,tag)
+ return convert(name).top[tag] or 0
+end
+function progress.pages(name,tag)
+ return convert(name).pages or 0
+end
+function progress.path(name,tag)
+ return convert(name).paths[tag] or "origin"
+end
+function progress.nodes(name)
+ return convert(name).names or { }
+end
+function progress.parameters(name)
+ return params -- shared
+end
diff --git a/Master/texmf-dist/tex/context/base/trac-tra.lua b/Master/texmf-dist/tex/context/base/trac-tra.lua
index aa18c3d98e9..052e4bba78f 100644
--- a/Master/texmf-dist/tex/context/base/trac-tra.lua
+++ b/Master/texmf-dist/tex/context/base/trac-tra.lua
@@ -1,6 +1,6 @@
if not modules then modules = { } end modules ['trac-tra'] = {
version = 1.001,
- comment = "companion to luat-lib.tex",
+ comment = "companion to trac-tra.mkiv",
author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
copyright = "PRAGMA ADE / ConTeXt Development Team",
license = "see context related readme files"
@@ -10,12 +10,17 @@ if not modules then modules = { } end modules ['trac-tra'] = {
-- bound to a variable, like node.new, node.copy etc (contrary to for instance
-- node.has_attribute which is bound to a has_attribute local variable in mkiv)
+local debug = require "debug"
+
+local getinfo = debug.getinfo
+local type, next = type, next
+local concat = table.concat
+local format, find, lower, gmatch, gsub = string.format, string.find, string.lower, string.gmatch, string.gsub
+
debugger = debugger or { }
local counters = { }
local names = { }
-local getinfo = debug.getinfo
-local format, find, lower, gmatch = string.format, string.find, string.lower, string.gmatch
-- one
@@ -54,10 +59,10 @@ function debugger.showstats(printer,threshold)
local total, grandtotal, functions = 0, 0, 0
printer("\n") -- ugly but ok
-- table.sort(counters)
- for func, count in pairs(counters) do
+ for func, count in next, counters do
if count > threshold then
local name = getname(func)
- if not name:find("for generator") then
+ if not find(name,"for generator") then
printer(format("%8i %s", count, name))
total = total + count
end
@@ -89,7 +94,7 @@ end
--~ local total, grandtotal, functions = 0, 0, 0
--~ printer("\n") -- ugly but ok
--~ -- table.sort(counters)
---~ for func, count in pairs(counters) do
+--~ for func, count in next, counters do
--~ if count > threshold then
--~ printer(format("%8i %s", count, func))
--~ total = total + count
@@ -143,38 +148,77 @@ end
--~ print("")
--~ debugger.showstats(print,3)
-trackers = trackers or { }
+setters = setters or { }
+setters.data = setters.data or { }
-local data, done = { }, { }
+--~ local function set(t,what,value)
+--~ local data, done = t.data, t.done
+--~ if type(what) == "string" then
+--~ what = aux.settings_to_array(what) -- inefficient but ok
+--~ end
+--~ for i=1,#what do
+--~ local w = what[i]
+--~ for d, f in next, data do
+--~ if done[d] then
+--~ -- prevent recursion due to wildcards
+--~ elseif find(d,w) then
+--~ done[d] = true
+--~ for i=1,#f do
+--~ f[i](value)
+--~ end
+--~ end
+--~ end
+--~ end
+--~ end
-local function set(what,value)
+local function set(t,what,value)
+ local data, done = t.data, t.done
if type(what) == "string" then
- what = aux.settings_to_array(what)
+ what = aux.settings_to_hash(what) -- inefficient but ok
end
- for i=1,#what do
- local w = what[i]
+ for w, v in next, what do
+ if v == "" then
+ v = value
+ else
+ v = toboolean(v)
+ end
for d, f in next, data do
if done[d] then
-- prevent recursion due to wildcards
elseif find(d,w) then
done[d] = true
for i=1,#f do
- f[i](value)
+ f[i](v)
end
end
end
end
end
-local function reset()
- for d, f in next, data do
+local function reset(t)
+ for d, f in next, t.data do
for i=1,#f do
f[i](false)
end
end
end
-function trackers.register(what,...)
+local function enable(t,what)
+ set(t,what,true)
+end
+
+local function disable(t,what)
+ local data = t.data
+ if not what or what == "" then
+ t.done = { }
+ reset(t)
+ else
+ set(t,what,false)
+ end
+end
+
+function setters.register(t,what,...)
+ local data = t.data
what = lower(what)
local w = data[what]
if not w then
@@ -186,32 +230,32 @@ function trackers.register(what,...)
if typ == "function" then
w[#w+1] = fnc
elseif typ == "string" then
- w[#w+1] = function(value) set(fnc,value,nesting) end
+ w[#w+1] = function(value) set(t,fnc,value,nesting) end
end
end
end
-function trackers.enable(what)
- done = { }
- set(what,true)
+function setters.enable(t,what)
+ local e = t.enable
+ t.enable, t.done = enable, { }
+ enable(t,string.simpleesc(tostring(what)))
+ t.enable, t.done = e, { }
end
-function trackers.disable(what)
- done = { }
- if not what or what == "" then
- trackers.reset(what)
- else
- set(what,false)
- end
+function setters.disable(t,what)
+ local e = t.disable
+ t.disable, t.done = disable, { }
+ disable(t,string.simpleesc(tostring(what)))
+ t.disable, t.done = e, { }
end
-function trackers.reset(what)
- done = { }
- reset()
+function setters.reset(t)
+ t.done = { }
+ reset(t)
end
-function trackers.list() -- pattern
- local list = table.sortedkeys(data)
+function setters.list(t) -- pattern
+ local list = table.sortedkeys(t.data)
local user, system = { }, { }
for l=1,#list do
local what = list[l]
@@ -223,3 +267,75 @@ function trackers.list() -- pattern
end
return user, system
end
+
+function setters.show(t)
+ commands.writestatus("","")
+ local list = setters.list(t)
+ for k=1,#list do
+ commands.writestatus(t.name,list[k])
+ end
+ commands.writestatus("","")
+end
+
+-- we could have used a bit of oo and the trackers:enable syntax but
+-- there is already a lot of code around using the singular tracker
+
+-- we could make this into a module
+
+function setters.new(name)
+ local t
+ t = {
+ data = { },
+ name = name,
+ enable = function(...) setters.enable (t,...) end,
+ disable = function(...) setters.disable (t,...) end,
+ register = function(...) setters.register(t,...) end,
+ list = function(...) setters.list (t,...) end,
+ show = function(...) setters.show (t,...) end,
+ }
+ setters.data[name] = t
+ return t
+end
+
+trackers = setters.new("trackers")
+directives = setters.new("directives")
+experiments = setters.new("experiments")
+
+-- nice trick: we overload two of the directives related functions with variants that
+-- do tracing (itself using a tracker) .. proof of concept
+
+local trace_directives = false local trace_directives = false trackers.register("system.directives", function(v) trace_directives = v end)
+local trace_experiments = false local trace_experiments = false trackers.register("system.experiments", function(v) trace_experiments = v end)
+
+local e = directives.enable
+local d = directives.disable
+
+function directives.enable(...)
+ commands.writestatus("directives","enabling: %s",concat({...}," "))
+ e(...)
+end
+
+function directives.disable(...)
+ commands.writestatus("directives","disabling: %s",concat({...}," "))
+ d(...)
+end
+
+local e = experiments.enable
+local d = experiments.disable
+
+function experiments.enable(...)
+ commands.writestatus("experiments","enabling: %s",concat({...}," "))
+ e(...)
+end
+
+function experiments.disable(...)
+ commands.writestatus("experiments","disabling: %s",concat({...}," "))
+ d(...)
+end
+
+-- a useful example
+
+directives.register("system.nostatistics", function(v)
+ statistics.enable = not v
+end)
+
diff --git a/Master/texmf-dist/tex/context/base/type-buy.tex b/Master/texmf-dist/tex/context/base/type-buy.mkii
index a973fb7b1c9..56fc92e62d6 100644
--- a/Master/texmf-dist/tex/context/base/type-buy.tex
+++ b/Master/texmf-dist/tex/context/base/type-buy.mkii
@@ -17,231 +17,6 @@
\starttypescriptcollection[commercial fonts]
-% 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]
-\stoptypescript
-
-\starttypescript [sans] [fallback]
- \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]
-\stoptypescript
-
-% Lucida Bright : Biggelow and Holmes
-
-\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]
-\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]
-\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]
-\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]
-\stoptypescript
-
-\starttypescript [math] [lucida] [name]
- \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]
-\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]
-\stoptypescript
-
-\starttypescript [handwriting] [lucida] [name]
- \definefontsynonym [Handwriting] [LucidaHandwriting-Italic]
-\stoptypescript
-
-\starttypescript [calligraphy] [lucida] [name]
- \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]
-\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]
-\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]
- \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]
- \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]
- \loadmapfile [\typescriptthree-bh-lucida.map]
-\stoptypescript
-
-\starttypescript [calligraphy] [lucida] [texnansi,ec,8r]
- \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]
- \loadmapfile [\typescriptthree-bh-lucida.map]
-\stoptypescript
-
-\starttypescript [handwriting] [lucida] [texnansi,ec,8r]
- \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]
- \loadmapfile [\typescriptthree-bh-lucida.map]
-\stoptypescript
-
-\starttypescript [lucida,lucidabfm,lucidaboldmath] [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]
- \loadmapfile [\typescripttwo-bh-lucida.map]
-\stoptypescript
-
-\starttypescript [lucida] [texnansi,ec,8r]
- \definetypeface [lucida] [mm] [math] [lucida] [default] [encoding=\typescripttwo]
-\stoptypescript
-
-\starttypescript [lucidabfm] [texnansi,ec,8r]
- \definetypeface [lucida] [mm] [bfmath] [lucida] [default] [encoding=\typescripttwo]
-\stoptypescript
-
-\starttypescript [lucidaboldmath] [texnansi,ec,8r]
- \definetypeface [lucida] [mm] [boldmath] [lucida] [default] [encoding=\typescripttwo]
-\stoptypescript
-
-\starttypescript [lucidabfm] [texnansi,ec,8r,uc]
- \definetypeface [lucidabfm] [rm] [serif] [lucida] [default] [encoding=\typescripttwo]
- \definetypeface [lucidabfm] [ss] [sans] [lucida] [default] [encoding=\typescripttwo]
- \definetypeface [lucidabfm] [tt] [mono] [lucida] [default] [encoding=\typescripttwo]
- \definetypeface [lucidabfm] [hw] [handwriting] [lucida] [default] [encoding=\typescripttwo]
- \definetypeface [lucidabfm] [cg] [calligraphy] [lucida] [default] [encoding=\typescripttwo]
- \definetypeface [lucidabfm] [mm] [bfmath] [lucida] [default] [encoding=\typescripttwo]
- \loadmapfile [\typescripttwo-bh-lucida.map]
-\stoptypescript
-
-\starttypescript [lucidaboldmath] [texnansi,ec,8r,uc]
- \definetypeface [lucidaboldmath] [rm] [serif] [lucida] [default] [encoding=\typescripttwo]
- \definetypeface [lucidaboldmath] [ss] [sans] [lucida] [default] [encoding=\typescripttwo]
- \definetypeface [lucidaboldmath] [tt] [mono] [lucida] [default] [encoding=\typescripttwo]
- \definetypeface [lucidaboldmath] [hw] [handwriting] [lucida] [default] [encoding=\typescripttwo]
- \definetypeface [lucidaboldmath] [cg] [calligraphy] [lucida] [default] [encoding=\typescripttwo]
- \definetypeface [lucidaboldmath] [mm] [boldmath] [lucida] [default] [encoding=\typescripttwo]
- \loadmapfile [\typescripttwo-bh-lucida.map]
-\stoptypescript
-
-\starttypescript [lucida,lucidabfm,lucidaboldmath] [texnansi,ec,8r]
- \usemathcollection[lbr]
- \quittypescriptscanning % last in the row
-\stoptypescript
-
% Informal : Vulis
\starttypescript [casual] [informal] [name]
@@ -516,6 +291,11 @@
\loadmapfile[\typescriptthree-adobe-frutiger.map]
\stoptypescript
+\starttypescript [frutiger] [texnansi,ec,8r,uc]
+ \definetypeface [frutiger] [ss] [sans] [frutiger] [default] [encoding=\typescripttwo]
+% \loadmapfile [\typescripttwo-adobe-frutiger.map]
+\stoptypescript
+
% kabel
\starttypescript [sans] [kabel] [ec,8r,texnansi]
diff --git a/Master/texmf-dist/tex/context/base/type-buy.mkiv b/Master/texmf-dist/tex/context/base/type-buy.mkiv
new file mode 100644
index 00000000000..becc4361c4a
--- /dev/null
+++ b/Master/texmf-dist/tex/context/base/type-buy.mkiv
@@ -0,0 +1,82 @@
+%D \module
+%D [ file=type-buy,
+%D version=2003.07.08, % 2001.04.12,
+%D title=\CONTEXT\ Typescript Macros,
+%D subtitle=A Few Commercial 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[commercial fonts]
+
+% Informal : Vulis
+
+\starttypescript [casual] [informal]
+ \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]
+\stoptypescript
+
+\starttypescript [casual] [informal]
+ \definefontsynonym [Informal-Regular] [file:ifrg]
+ \definefontsynonym [Informal-Bold] [file:ifb]
+ \definefontsynonym [Informal-Oblique] [file:ifo]
+ \definefontsynonym [Informal-BoldOblique] [file:ifbo]
+\stoptypescript
+
+\starttypescript [math] [informal] [default]
+ \loadfontgoodies[informal-math]
+ \definefontsynonym[MathRoman][informalmath@informal-math]
+\stoptypescript
+
+\starttypescript [informal]
+ \definetypeface[informal][rm][casual][informal][default]
+ \definetypeface[informal][tt][mono] [modern] [default][rscale=0.95]
+ \definetypeface[informal][mm][math] [informal][default]
+\stoptypescript
+
+% Sabon
+
+\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[SabonMT] [sab_____]
+ \definefontsynonym[SabonMT-Italic] [sabi____]
+ \definefontsynonym[SabonMT-ItalicOsF] [saboi___]
+ \definefontsynonym[SabonMT-SemiBoldOsF] [sabos___]
+ \definefontsynonym[SabonMT-SemiBold] [sabs____]
+ \definefontsynonym[SabonMT-RegularSC] [sabsc___]
+ \definefontsynonym[SabonMT-SemiBoldItalic] [sabsi___]
+ \definefontsynonym[SabonMT-SemiBoldItalicOsF][sasio___]
+\stoptypescript
+
+% \definetypeface[sabon][rm][serif][sabon][default]
+% \setupbodyfont[sabon]
+% \starttext
+% \input tufte
+% \stoptext
+
+\stoptypescriptcollection
+
diff --git a/Master/texmf-dist/tex/context/base/type-cbg.tex b/Master/texmf-dist/tex/context/base/type-cbg.mkii
index 93cfa077ece..93cfa077ece 100644
--- a/Master/texmf-dist/tex/context/base/type-cbg.tex
+++ b/Master/texmf-dist/tex/context/base/type-cbg.mkii
diff --git a/Master/texmf-dist/tex/context/base/type-cow.tex b/Master/texmf-dist/tex/context/base/type-cow.mkii
index 507386443d7..507386443d7 100644
--- a/Master/texmf-dist/tex/context/base/type-cow.tex
+++ b/Master/texmf-dist/tex/context/base/type-cow.mkii
diff --git a/Master/texmf-dist/tex/context/base/type-cow.mkiv b/Master/texmf-dist/tex/context/base/type-cow.mkiv
new file mode 100644
index 00000000000..5215e7122f5
--- /dev/null
+++ b/Master/texmf-dist/tex/context/base/type-cow.mkiv
@@ -0,0 +1,85 @@
+%D \module
+%D [ file=type-cow,
+%D version=2006.06.23,
+%D title=\CONTEXT\ Typescript Macros,
+%D subtitle=Cow Fonts,
+%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 The cow fonts are a project of Duane Bibby, Hans Hagen and Taco
+%D Hoekwater.
+
+\starttypescriptcollection[cow]
+
+\starttypescript [math,serif] [cow,sheep]
+ \setups[font:fallback:serif]
+ % \usemathcollection[cow]
+ \loadmapfile[koeieletters.map]
+ \definefontsynonym [Serif] [Cows]
+ \definefontsynonym [SerifContour] [CowsContour]
+ \definefontsynonym [SerifLogo] [CowsLogo]
+ \definefontsynonym [SerifLogoContour][CowsLogoContour]
+ \definefontsynonym [MathRoman] [CowsMathRoman]
+ \definefontsynonym [MathItalic] [CowsMathItalic]
+ \definefontsynonym [MathSymbol] [CowsMathSymbol]
+ \definefontsynonym [MathExtension] [CowsMathExtensions]
+\stoptypescript
+
+\starttypescript [math,serif] [sheep]
+ \setups[font:fallback:serif]
+ % \usemathcollection[cow]
+ \loadmapfile[koeieletters.map]
+ \definefontsynonym [Serif] [Sheep]
+ \definefontsynonym [SerifContour] [SheepContour]
+ \definefontsynonym [SerifLogo] [SheepLogo]
+ \definefontsynonym [SerifLogoContour][SheepLogoContour]
+ \definefontsynonym [MathRoman] [SheepMathRoman]
+ \definefontsynonym [MathItalic] [SheepMathItalic]
+ \definefontsynonym [MathSymbol] [SheepMathSymbol]
+ \definefontsynonym [MathExtension] [SheepMathExtensions]
+\stoptypescript
+
+\starttypescript [all] [cow,sheep]
+ \definefontsynonym [Cows] [koeielett]
+ \definefontsynonym [CowsContour] [koeielett-contour]
+ \definefontsynonym [CowsLogo] [koeielogos]
+ \definefontsynonym [CowsLogoContour] [koeielogos-contour]
+ \definefontsynonym [CowsMathRoman] [koeielett]
+ \definefontsynonym [CowsMathItalic] [koeieletter-mi]
+ \definefontsynonym [CowsMathSymbol] [koeieletter-sy]
+ \definefontsynonym [CowsMathExtensions][koeieletter-ex]
+\stoptypescript
+
+\starttypescript [all] [sheep]
+ \definefontsynonym [Sheep] [koeielett]
+ \definefontsynonym [SheepContour] [koeielett-contour]
+ \definefontsynonym [SheepLogo] [koeielogos]
+ \definefontsynonym [SheepLogoContour] [koeielogos-contour]
+ \definefontsynonym [SheepMathRoman] [koeielettx]
+ \definefontsynonym [SheepMathItalic] [koeieletter-mi]
+ \definefontsynonym [SheepMathSymbol] [koeieletter-syx]
+ \definefontsynonym [SheepMathExtensions][koeieletter-ex]
+\stoptypescript
+
+\starttypescript [cow]
+ \definetypeface [cow][rm][serif][cow] [default]
+ \definetypeface [cow][ss][serif][cow] [default]
+ \definetypeface [cow][mm][math] [cow] [default]
+ \definetypeface [cow][tt][mono] [modern][default][rscale=0.85]
+\stoptypescript
+
+\starttypescript [sheep]
+ \definetypeface [sheep][rm][serif][sheep] [default]
+ \definetypeface [sheep][ss][serif][sheep] [default]
+ \definetypeface [sheep][mm][math] [sheep] [default]
+ \definetypeface [sheep][tt][mono] [modern][default][,rscale=0.85]
+\stoptypescript
+
+\stoptypescriptcollection
+
+\endinput
diff --git a/Master/texmf-dist/tex/context/base/type-def.mkii b/Master/texmf-dist/tex/context/base/type-def.mkii
new file mode 100644
index 00000000000..f31c93e504e
--- /dev/null
+++ b/Master/texmf-dist/tex/context/base/type-def.mkii
@@ -0,0 +1,86 @@
+%D \module
+%D [ file=type-def,
+%D version=2005.02.04,
+%D title=\CONTEXT\ Typescript Macros,
+%D subtitle=Default 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.
+
+\starttypescriptcollection[simplification]
+
+\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
+
+\stoptypescriptcollection
+
+% handy
+
+% \starttypescript [serif] [simple] [name]
+% \definefontsynonym [Simple] [cmvtt10]
+% \setupfontsynonym [Simple] [handling=pure]
+% \stoptypescript
+
+\starttypescriptcollection[handling-and-hz]
+
+\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
+
+\stoptypescriptcollection
+
+\endinput
diff --git a/Master/texmf-dist/tex/context/base/type-def.mkiv b/Master/texmf-dist/tex/context/base/type-def.mkiv
new file mode 100644
index 00000000000..c980a4ee528
--- /dev/null
+++ b/Master/texmf-dist/tex/context/base/type-def.mkiv
@@ -0,0 +1,48 @@
+%D \module
+%D [ file=type-def,
+%D version=2005.02.04,
+%D title=\CONTEXT\ Typescript Macros,
+%D subtitle=Default 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.
+
+\starttypescriptcollection[simplification]
+
+\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
+
+\stoptypescriptcollection
+
+\endinput
diff --git a/Master/texmf-dist/tex/context/base/type-def.tex b/Master/texmf-dist/tex/context/base/type-def.tex
deleted file mode 100644
index 6469a5925d8..00000000000
--- a/Master/texmf-dist/tex/context/base/type-def.tex
+++ /dev/null
@@ -1,128 +0,0 @@
-%D \module
-%D [ file=type-def,
-%D version=2005.02.04,
-%D title=\CONTEXT\ Typescript Macros,
-%D subtitle=Default 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.
-
-\definetypescriptprefix [serif] [Serif]
-\definetypescriptprefix [sans] [Sans]
-\definetypescriptprefix [mono] [Mono]
-
-\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]
-\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]
-\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]
-\stopsetups
-
-\startsetups [font:allbold:serif]
- \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]
-\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-exp.tex b/Master/texmf-dist/tex/context/base/type-exp.mkii
index dae770e98c0..dae770e98c0 100644
--- a/Master/texmf-dist/tex/context/base/type-exp.tex
+++ b/Master/texmf-dist/tex/context/base/type-exp.mkii
diff --git a/Master/texmf-dist/tex/context/base/type-fsf.tex b/Master/texmf-dist/tex/context/base/type-fsf.mkii
index 7813b7b5dbd..7813b7b5dbd 100644
--- a/Master/texmf-dist/tex/context/base/type-fsf.tex
+++ b/Master/texmf-dist/tex/context/base/type-fsf.mkii
diff --git a/Master/texmf-dist/tex/context/base/type-ghz.tex b/Master/texmf-dist/tex/context/base/type-ghz.mkii
index 7e31096ee4a..7e31096ee4a 100644
--- a/Master/texmf-dist/tex/context/base/type-ghz.tex
+++ b/Master/texmf-dist/tex/context/base/type-ghz.mkii
diff --git a/Master/texmf-dist/tex/context/base/type-hgz.tex b/Master/texmf-dist/tex/context/base/type-ghz.mkiv
index 59b5eefd803..e6a12d7e33b 100644
--- a/Master/texmf-dist/tex/context/base/type-hgz.tex
+++ b/Master/texmf-dist/tex/context/base/type-ghz.mkiv
@@ -270,7 +270,7 @@
\definetypeface[palatino][rm][serif][palatino-nova][default][features=default]
\definetypeface[palatino][ss][sans] [palatino-sans][default][features=default]
\definetypeface[palatino][tt][mono] [latin-modern] [default][features=default,rscale=1.1]
- \definetypeface[palatino][mm][math] [latin-modern] [default][features=default,rscale=1.1]
+ \definetypeface[palatino][mm][math] [palatino] [default][features=default] % ,rscale=1.1]
\quittypescriptscanning
\stoptypescript
@@ -278,7 +278,7 @@
\definetypeface[palatino][ss][sans] [palatino-sans][default][features=default]
\definetypeface[palatino][rm][serif][palatino-nova][default][features=default]
\definetypeface[palatino][tt][mono] [latin-modern] [default][features=default,rscale=1.1]
- \definetypeface[palatino][mm][math] [latin-modern] [default][features=default,rscale=1.1]
+ \definetypeface[palatino][mm][math] [palatino] [default][features=default] % ,rscale=1.1]
\quittypescriptscanning
\stoptypescript
@@ -286,7 +286,7 @@
\definetypeface[palatino-informal][ss][sans] [palatino-informal][default][features=default]
\definetypeface[palatino-informal][rm][serif][palatino-nova] [default][features=default]
\definetypeface[palatino-informal][tt][mono] [latin-modern] [default][features=default,rscale=1.1]
- \definetypeface[palatino-informal][mm][math] [latin-modern] [default][features=default,rscale=1.1]
+ \definetypeface[palatino-informal][mm][math] [palatino] [default][features=default] % ,rscale=1.1]
\quittypescriptscanning
\stoptypescript
diff --git a/Master/texmf-dist/tex/context/base/type-hgz.mkii b/Master/texmf-dist/tex/context/base/type-hgz.mkii
new file mode 100644
index 00000000000..4d3e495b065
--- /dev/null
+++ b/Master/texmf-dist/tex/context/base/type-hgz.mkii
@@ -0,0 +1 @@
+\input type-ghz.mkii \endinput % can be file synonym
diff --git a/Master/texmf-dist/tex/context/base/type-hgz.mkiv b/Master/texmf-dist/tex/context/base/type-hgz.mkiv
new file mode 100644
index 00000000000..a3c2a78418c
--- /dev/null
+++ b/Master/texmf-dist/tex/context/base/type-hgz.mkiv
@@ -0,0 +1 @@
+\input type-ghz.mkiv \endinput % can be file synonym
diff --git a/Master/texmf-dist/tex/context/base/type-husayni-default.mkiv b/Master/texmf-dist/tex/context/base/type-husayni-default.mkiv
new file mode 100644
index 00000000000..b3c1af5b708
--- /dev/null
+++ b/Master/texmf-dist/tex/context/base/type-husayni-default.mkiv
@@ -0,0 +1,146 @@
+\definefontfeature
+ [husayni-default]
+ [analyze=yes,mode=node,
+ language=dflt,script=arab,
+ ccmp=yes, % adds identity dots to unicode letters; includes dynamic dot placement
+ init=yes,medi=yes,fina=yes, % contextual analysis
+ % dlig=yes, % Hamzahbelow under YaaHamzahabove
+ rlig=yes, % indispensable
+ calt=yes, % ayah+numerals
+ salt=yes, % includes manual justification with Tatwiil
+ % fchr=yes % formatting chars
+ anum=yes, % replace latin numerals with arabic-script ones
+ ss01=yes, % Allah, Muhammad,
+ % ss02=yes, % ss01 + Allah_final
+ ss03=yes, % level-1 stack over Jiim, initial entry only
+ % ss04=yes, % level-1 stack over Jiim, initial/medial entry
+ % ss05=yes, % multi-level Jiim stacking, initial/medial entry
+ % ss06=yes, % aesthetic Faa/Qaaf for FJ_mm, FJ_mf connection
+ ss07=yes, % initial-entry stacking over Haa
+ % ss08=yes, % initial/medial stacking over Haa, minus HM_mf strings
+ % ss09=yes, % initial/medial Haa stacking plus HM_mf strings
+ ss10=yes, % basic dipped Miim, initial-entry B_S-stack over Miim
+ % ss11=yes, % full dipped Miim, initial-entry B_S-stack over Miim
+ ss12=yes, % XBM_im initial-medial entry B_S-stack over Miim,
+ % ss13=yes, % full initial-medial entry B_S-stacked Miim
+ % ss14=yes, initial entry, stacked Laam on Miim
+ ss15=yes, % full stacked Laam-on-Miim
+ ss16=yes, % initial entry, stacked Ayn-on-Miim
+ % ss17=yes, % full stacked Ayn-on-Miim
+ % ss18=yes, % LMJ_im % already contained in ss03--05, may remove
+ ss19=yes, % LM_im
+ % ss20=yes, % KLM_m, sloped Miim
+ % ss21=yes, % KLM_i_mm/LM_mm, sloped Miim
+ % ss22=yes, % filled sloped Miim
+ % ss23=yes, % LM_mm, non-sloped Miim
+ ss24=yes, % BR_i_mf, BN_i_mf
+ ss25=yes, % basic LH_im % might merge with ss24
+ ss26=yes, % full Yaa.final special strings: BY_if, BY_mf, LY_mf
+ ss27=yes, % basic thin Miim.final
+ % ss28=yes, % full thin Miim.final % to be moved to jsnn
+ % ss29=yes, % basic short Miim.final
+ % ss30=yes, % full short Miim.final % to be moved to jsnn
+ ss31=yes, % basic Raa.final strings: JR and SR
+ % ss32=yes, % basic Raa.final strings: JR, SR, and BR
+ % ss33=yes, % TtR % to be moved to jsnn
+ ss34=yes, % AyR style % also available in jsnn
+ ss35=yes, % full Kaaf contexts
+ ss36=yes, % full Laam contexts
+ ss37=yes, % Miim-Miim contexts
+ ss38=yes, % basic dipped Haa, B_SH_mm
+ % ss39=yes, % full dipped Haa, B_S_LH_i_mm_Mf
+ % ss40=yes, % aesthetic dipped medial Haa
+ ss41=yes, % high and low Baa strings
+ ss42=yes, % diagonal entry
+ ss43=yes, % initial alternates
+ % ss44=yes, % hooked final alif
+ % ss45=yes, % BMA_f
+ % ss46=yes, % BM_mm_alt, for JBM combinations
+ % ss47=yes, % Shaddah-<kasrah> combo
+ % ss48=yes, % Auto-sukuun
+ % ss49=yes, % No vowels
+ % ss50=yes, % Shaddah/MaaddahHamzah only
+ % ss51=yes, % No Skuun
+ % ss52=yes, % No Waslah
+ % ss53=yes, % No Waslah
+ % ss54=yes, % chopped finals
+ % ss55=yes, % idgham-tanwin
+ ss60=yes, %
+ % js01=yes, % Raawide
+ % js02=yes, % Yaawide
+ % js03=yes, % Kaafwide
+ % js04=yes, % Nuunwide
+ % js05=yes, % Kaafwide Nuunwide Siinwide Baawide
+ % js06=yes, % final Haa wide
+ % js07=yes, % thin Miim
+ % js08=yes, % short Miim
+ % js09=yes, % wide Siin
+ % js10=yes, % thuluth-style initial Haa, final Miim, MRw_mf
+ % js11=yes, % level-1 stretching
+ % js12=yes, % level-2 stretching
+ % js13=yes, % level-3 stretching
+ % js14=yes, % final Alif
+ % js15=yes, % hooked final Alif
+ js16=yes, % aesthetic medial Faa/Qaaf
+ % js17=yes, % fancy isol Haa after Daal, Raa, and Waaw
+ % js18=yes, % Laamwide, alternate substitution
+ % js19=yes, % level-4 stretching, only siin and Hhaa for basmalah
+ % js20=yes, % level-5 stretching, only siin and Hhaa for basmalah
+ % js21=yes, % Haa.final_alt2
+ % calt=yes, % to be used for vowel/dot-based dynamics
+ % ttwl=yes, % for simple, horizontal stretching, not yet implemented in luatex/mkiv
+ % flts=yes, % Final Glyph On Line Alternates Short: Baa-like
+ % fltw=yes, % Final Glyph On Line Alternates Wide: Baa-like
+ % gclr=yes, % Geometric Cursive LR : for testing GPOS only!
+ % gcrl=yes, % Geometric Cursive RL
+ % gklr=yes, % Geometric Kerning LR
+ % gkrl=yes, % Geometric Kerning RL
+ kern=yes, % includes kerning of dot-base pairs, and final pairs in continuous strings
+ curs=yes, % we don't curs final pairs, padj for that
+ mark=yes, % vowels
+ mkmk=yes, % stacked vowels
+ tlig=yes,
+ colorscheme=husayni:default]
+
+\definefontfeature
+ [husayni-tt]
+ [analyze=yes,mode=node,
+ language=dflt,script=arab,
+ ccmp=yes, % adds identity dots to unicode letters; includes dynamic dot placement
+ init=yes,medi=yes,fina=yes, % contextual analysis
+ rlig=yes, % indispensable
+ fchr=yes,
+ kern=yes, % includes kerning of dot-base pairs, and final pairs in continuous strings
+ curs=yes, % we don't curs final pairs, padj for that
+ mark=yes, % vowels
+ mkmk=yes] % stacked vowels
+
+\definefontfeature
+ [husayni-mono]
+ [analyze=yes,mode=node,
+ language=dflt,script=arab,ccmp=no,
+ init=yes,medi=yes,fina=yes,isol=yes,
+ rlig=yes,liga=yes,
+ mset=yes]
+
+\definedelimitedtext
+ [ornatequote]
+ [left={‏\char"FD3F\penalty10000},
+ right={‏\char"FD3E\penalty10000}]
+
+\definedelimitedtext
+ [arparenthesis]
+ [left={‏\char"0028},
+ right={‏\char"0029}]
+
+\definedelimitedtext
+ [arquotation]
+ [left={‏\symbol[rightquotation]},
+ right={‏\symbol[leftquotation]},
+ leftmargin=standard]
+
+\definedelimitedtext
+ [arquote]
+ [left={‏\symbol[rightquote]},
+ right={‏\symbol[leftquote]},
+ leftmargin=standard] \ No newline at end of file
diff --git a/Master/texmf-dist/tex/context/base/type-ini.mkii b/Master/texmf-dist/tex/context/base/type-ini.mkii
index 9372f8dc395..ac1e243f248 100644
--- a/Master/texmf-dist/tex/context/base/type-ini.mkii
+++ b/Master/texmf-dist/tex/context/base/type-ini.mkii
@@ -76,19 +76,6 @@
{\splitfiletype{#1}%
\addtocommalist\splitoffname\typescriptfiles}}
-\usetypescriptfile[\f!typeprefix tmf]
-\usetypescriptfile[\f!typeprefix siz]
-
-\ifnum\texengine=\xetexengine
- \usetypescriptfile[\f!typeprefix otf]
- \usetypescriptfile[\f!typeprefix xtx]
-\else
- \usetypescriptfile[\f!typeprefix one]
- %usetypescriptfile[\f!typeprefix akb] % we have gyre now
-\fi
-
-\usetypescriptfile[\f!typeprefix loc]
-
% SO FAR
\let\currenttypescripts\empty
@@ -171,7 +158,7 @@
\startreadingfile
\pushendofline
\unprotect
- \readfile\currenttypefile\donothing\donothing
+ \readfile{\currenttypefile.\mksuffix}\donothing{\readfile\currenttypefile\donothing\donothing}%
\protect
\popendofline
\stopreadingfile
@@ -185,7 +172,7 @@
\startreadingfile
\pushendofline
\unprotect
- \readfile\currenttypefile\donothing\donothing
+ \readfile{\currenttypefile.\mksuffix}\donothing{\readfile\currenttypefile\donothing\donothing}%
\protect
\popendofline
\stopreadingfile
@@ -650,7 +637,7 @@
\fi \fi
\ifmmode\mr\else\tf\fi} % needed ?
-\def\usetypefile[#1]% recurses on path !
+\def\usetypefile[#1]% recurses on path ! ?
{\readfile{\f!typeprefix#1}\donothing\donothing}
%D For Taco:
diff --git a/Master/texmf-dist/tex/context/base/type-ini.mkiv b/Master/texmf-dist/tex/context/base/type-ini.mkiv
index 4076cf7b8ae..cd65f8abb4a 100644
--- a/Master/texmf-dist/tex/context/base/type-ini.mkiv
+++ b/Master/texmf-dist/tex/context/base/type-ini.mkiv
@@ -59,13 +59,13 @@
\unprotect
-\def\starttypescriptcollection
+\unexpanded\def\starttypescriptcollection
{\dosingleempty\dostarttypescriptcollection}
\def\dostarttypescriptcollection[#1]%
{}
-\def\stoptypescriptcollection
+\unexpanded\def\stoptypescriptcollection
{}
\let\typescriptfiles\empty
@@ -76,20 +76,6 @@
{\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 tmf]
-\usetypescriptfile[\f!typeprefix siz]
-\usetypescriptfile[\f!typeprefix otf]
-\usetypescriptfile[\f!typeprefix loc]
-
% SO FAR
\let\currenttypescripts\empty
@@ -183,7 +169,8 @@
{\startreadingfile
\pushendofline
\unprotect
- \readfile\currenttypefile\donothing\donothing
+ % we could have something readfilewithMKfallback
+ \readfile{\currenttypefile.\mksuffix}\donothing{\readfile\currenttypefile\donothing\donothing}%
\protect
\popendofline
\stopreadingfile}
@@ -199,7 +186,7 @@
% \definetypescriptsynonym[lbr][cmr]
-\def\definetypescriptsynonym
+\unexpanded\def\definetypescriptsynonym
{\dodoubleempty\dodefinetypescriptsynonym}
\def\dodefinetypescriptsynonym[#1][#2]%
@@ -226,7 +213,9 @@
\newif\iftracetypescripts
-\def\starttypescript
+\let\stoptypescript\relax
+
+\unexpanded\def\starttypescript
{\ifcase\typescriptstate
% 0 = skip
\@EA\gobbleuntil\@EA\stoptypescript
@@ -294,7 +283,7 @@
\def\doprocesstypescript
{\pushmacro\fontclass}
-\def\stoptypescript
+\unexpanded\def\stoptypescript
{\popmacro\fontclass}
\long\def\noprocesstypescript#1\stoptypescript
@@ -339,117 +328,31 @@
\def\quittypescriptscanning{\settrue\quittingtypescript}
-% status
-%
-% 1 loaded
-% 2 reported
-% 3 preloaded
-
-% flags ipv \c!state, more flag values
-
-\def\dopreloadmapfile#1%
- {\splitfiletype{#1}%
- \writestatus\m!fonts{assuming map file: \splitoffname}%
- \setxvalue{\splitoffname \c!state}{3}%
- \doglobal\removefromcommalist\splitoffname\allfontmapsfiles}
-
-\def\preloadmapfile[#1]{\processcommacommand[#1]\dopreloadmapfile}
-\def\loadmapfile [#1]{\processcommacommand[#1]\loadthemapfile}
-\def\unloadmapfile [#1]{\processcommacommand[#1]\unloadthemapfile}
-
-% too soon, no driver known, \ifproductionrun \loadallfontmapfiles \fi
-
-\def\loadthemapfile#1%
- {\splitfiletype{#1}%
- \doglobal\addtocommalist\splitoffname\allfontmapsfiles}
-
-\def\unloadthemapfile#1%
- {\splitfiletype{#1}%
- \doglobal\removefromcommalist\splitoffname\allfontmapsfiles}
-
-\let\usedmapfile \gobbletwoarguments
-\let\usedmapline \gobbletwoarguments
-\let\doregisterloadedmapfile\gobbleoneargument
-
-\def\doloadfontmapfile#1%
- {\ifcsname#1\c!state\endcsname\else
- \writestatus\m!fonts{using map file: #1}%
- \doregisterloadedmapfile{#1}%
- \doloadmapfile{=}{#1.\f!fontmapextension}% +/add =/replace -/remove
- \setxvalue{#1\c!state}{1}%
- \fi}
-
-\def\doreportfontmapfile#1%
- {\ifcsname#1\c!state\endcsname\else
- \writestatus\m!fonts{needs map file: #1}%
- \setxvalue{#1\c!state}{2}%
- \fi}
-
-\def\loadallfontmapfiles
- {%\message{[\allfontmapsfiles]}%
- \ifconditional\resettingmapfile
- \writestatus\m!fonts{resetting map file list}%
- \doresetmapfilelist
- \global\setfalse\resettingmapfile
- \fi
- \ifx\allfontmapsfiles\empty \else
- \ifautoloadmapfiles
- \processcommacommand[\allfontmapsfiles]\doloadfontmapfile
- \else
- \processcommacommand[\allfontmapsfiles]\doreportfontmapfile
- \fi
- \forgetmapfiles
- \fi}
-
-\def\loadmapline
- {\dodoubleempty\dodoloadmapline}
-
-\def\dodoloadmapline[#1][#2]%
- {\loadallfontmapfiles % ! ! !
- \ifsecondargument
- \doloadmapline{#1}{#2}% special
- \else
- \doloadmapline{=}{#1}% special
- \fi}
-
-% since this is driver dependent, and since we may set map files
-% before an output format is defined, we need to postpone it; we
-% cannot use starttext as hook because an output switch can be part
-% of a style; an alternative is to no longer permit driver switching
-% after the first \starttext, but that will break compatibility
-% because \startcomponent ... \environment ... is pretty legal.
-
-% the map directives need to end up in the right place in the stream
+%D Map files will go away in \LUATEX, but till that happens we
+%D use stripped down support for loading them.
-% hm, the timing of when pdftex needs the map file info keeps changing;
-% it's really time to move to map line support
+\def\loadmapfile{\dosingleempty\doloadmapfile}
+\def\loadmapline{\dodoubleempty\doloadmapline}
-% \everybeforeshipout \expandafter % will move as it is backend dependent
-% {\expandafter\appendtoks
-% \expandafter\loadallfontmapfiles
-% \expandafter\to
-% \expandafter\pageboundsettings
-% \the\everybeforeshipout}
+\def\doloadmapfile [#1]{\ctxlua{fonts.map.loadfile("#1")}}
+\def\doloadmapline [#1][#2]{\ctxlua{fonts.map.loadline("#1","#2")}}
+\def\forgetmapfiles {\ctxlua{fonts.map.reset()}}
-\appendtoks
- \loadallfontmapfiles
-\to \pageboundsettings
+\let\loadallfontmapfiles\relax
+\let\allfontmapsfiles \empty
+\let\preloadmapfile \loadmapfile
+\let\resetmapfiles \forgetmapfiles
+\let\disablemapfiles \forgetmapfiles
\newif\ifautoloadmapfiles
-\let\allfontmapsfiles\empty
-
-\def\forgetmapfiles
- {\globallet\allfontmapsfiles\empty}
-
-\newconditional\resettingmapfile
-
-\def\resetmapfiles
- {\global\settrue\resettingmapfile}
+% \appendtoks
+% \pdfmapfile{}% somehow does not work at the lua end
+% \to \everyjob
-\def\disablemapfiles
- {\resetmapfiles
- \forgetmapfiles}
+\prependtoks
+ \loadmapfile[mkiv-base.map]%
+\to \everystarttext
%D A handy shortcut:
@@ -461,7 +364,7 @@
% \setupfontsynonym [\typescriptprefix\typescriptone] [handling=\typescriptthree]
% \stoptypescript
-\def\definetypescriptprefix
+\unexpanded\def\definetypescriptprefix
{\dodoubleargument\dodefinetypescriptprefix}
\def\dodefinetypescriptprefix[#1][#2]%
@@ -483,7 +386,7 @@
% \definetypeface [#1:joke] [#2:rm] [#3:...]
% \definetypeface [#1:joke] [#2:rm] [#3:serif] [#4:lucida] [#5:size] [#6:...]
-\def\definetypeface
+\unexpanded\def\definetypeface
{\dosixtupleargument\dodefinetypeface}
\def\tsvar#1#2% \executeifdefined{\??ts#1}{#2}
@@ -499,65 +402,71 @@
\def\typefaceencoding{\defaultencoding}
-\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
- \normalexpanded{\noexpand\getparameters[\??ts][\s!rscale=\plusone,\s!encoding=\defaultencoding,\s!features=,\s!fallbacks=,\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
- \letvalue{\fontclass\s!fallbacks}\@@tsfallbacks % new per 12/10/2008
- \saverelativefontsize{#2}\relativefontsize % fall back
- \savemathtextstyle\@@tstext % math text style (new per 28/4/2006)
- \iftracetypescripts\writestatus\m!fonts{define: [#1] [#2] [#3] [#4]}\fi
- % we need to keep typefaceencoding for a while as it can still be used to filter
- % old scripts as we just strip the texnansi- prefix
- \ifx\typefaceencoding\t!default
- \usetypescript[#3][#4][\t!name,\t!default]% will be default some day
- \else
- \usetypescript[#3][#4][\t!name,\t!default,\typefaceencoding]%
- \fi
- \usetypescript[#3][#5][\t!size]%
- \popmacro\fontclass
- \popmacro\typefaceencoding
- \popmacro\relativefontsize
- \else\iffourthargument
- \definetypeface[#1][#2][#3][#4][\s!default]%
- \else\ifthirdargument
- \getparameters[\??tf#1#2][#3]%
- \fi\fi\fi}
+% we need to keep typefaceencoding for a while as it can still be used to filter
+% old scripts as we just strip the texnansi- prefix
-% will become (once we've adapted the typescripts):
+% \def\dostarttypefacedefining#1#2%
+% {\pushmacro\fontclass
+% \setcurrentfontclass{#1}%
+% \pushmacro\relativefontsize
+% \let\relativefontsize\@@tsrscale % still needed ?
+% \savefontclassparameters{#2}\@@tsrscale\@@tsfeatures\@@tsfallbacks}
+%
+% \def\dostoptypefacedefining
+% {\popmacro\relativefontsize
+% \popmacro\fontclass}
%
% \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
-% \normalexpanded{\noexpand\getparameters[\??ts][\s!rscale=\plusone,\s!features=,\s!fallbacks=,\s!text=,#6]}% \geteparameters
-% \pushmacro\relativefontsize
-% \pushmacro\fontclass
-% \let\relativefontsize\@@tsrscale
-% \setcurrentfontclass{#1}%
-% \letvalue{\fontclass\s!features }\@@tsfeatures % new per 16/6/2007
-% \letvalue{\fontclass\s!fallbacks}\@@tsfallbacks % new per 12/10/2008
-% \saverelativefontsize{#2}\relativefontsize % fall back
-% \savemathtextstyle\@@tstext % math text style (new per 28/4/2006)
+% \iffifthargument % sixth is optional, we need to expand since in #6 there can be a \typescripttwo
+% % \normalexpanded{\noexpand\getparameters[\??ts][\s!rscale=\plusone,\s!encoding=\defaultencoding,\s!features=,\s!fallbacks=,#6]}% \geteparameters
+% \geteparameters[\??ts][\s!rscale=\plusone,\s!encoding=\defaultencoding,\s!features=,\s!fallbacks=,#6]%
+% \dostarttypefacedefining{#1}{#2}%
+% \pushmacro\typefaceencoding
+% \let\typefaceencoding\@@tsencoding
% \iftracetypescripts\writestatus\m!fonts{define: [#1] [#2] [#3] [#4]}\fi
-% \usetypescript[#3][#4][\t!name,\t!default,\empty]% brr, this empty, no encoding
+% \ifx\typefaceencoding\t!default
+% \usetypescript[#3][#4][\t!name,\t!default]% will be default some day
+% \else
+% \usetypescript[#3][#4][\t!name,\t!default,\typefaceencoding]%
+% \fi
% \usetypescript[#3][#5][\t!size]%
-% \popmacro\fontclass
-% \popmacro\relativefontsize
+% %
+% \dostoptypefacedefining
+% %
+% \popmacro\typefaceencoding
% \else\iffourthargument
% \definetypeface[#1][#2][#3][#4][\s!default]%
% \else\ifthirdargument
% \getparameters[\??tf#1#2][#3]%
% \fi\fi\fi}
+\def\dostarttypefacedefining#1#2#3%
+ {\geteparameters[\??ts][\s!rscale=\plusone,\s!features=,\s!fallbacks=,#3]%
+ \pushmacro\fontclass
+ \setcurrentfontclass{#1}%
+ \pushmacro\relativefontsize
+ \let\relativefontsize\@@tsrscale % still needed ?
+ \savefontclassparameters{#2}\@@tsrscale\@@tsfeatures\@@tsfallbacks}
+
+\def\dostoptypefacedefining
+ {\popmacro\relativefontsize
+ \popmacro\fontclass}
+
+\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
+ \iftracetypescripts\writestatus\m!fonts{define: [#1] [#2] [#3] [#4]}\fi
+ \dostarttypefacedefining{#1}{#2}{#6}%
+ \usetypescript[#3][#4][\t!name,\t!default]%
+ \usetypescript[#3][#5][\t!size]%
+ \dostoptypefacedefining
+ \else\iffourthargument
+ \definetypeface[#1][#2][#3][#4][\s!default]%
+ \else\ifthirdargument
+ \getparameters[\??tf#1#2][#3]%
+ \fi\fi\fi}
+
\def\dododefinetypeface[#1][#2]% saveguard against redefinition
{\doifsomething{#1}
{\ifcsname\??tf#1\s!default\endcsname \else
@@ -565,10 +474,10 @@
\setgvalue{\??tf#1\s!default}{#2}%
\fi
\ifcsname#1\endcsname \else
- \unexpanded\setgvalue{#1}{\switchtotypeface[#1][#2]}%
+ \setugvalue{#1}{\switchtotypeface[#1][#2]}%
\fi}}
-\def\setuptypeface% [class] [settings]
+\unexpanded\def\setuptypeface% [class] [settings]
{\doquadrupleempty\doswitchtotypeface[\setupbodyfont][\fontclass]}
\unexpanded\def\switchtotypeface% [class] [settings]
@@ -592,7 +501,8 @@
\ifmmode\mr\else\tf\fi} % needed ?
\def\usetypefile[#1]% recurses on path !
- {\readfile{\f!typeprefix#1}\donothing\donothing}
+ {\edef\currenttypefile{\f!typeprefix#1}%
+ \readfile{\currenttypefile.\mksuffix}\donothing{\readfile\currenttypefile\donothing\donothing}}
%D For Taco:
%D
@@ -632,3 +542,37 @@
\fetchruntimecommand \typetypescript {\f!typeprefix\s!run.mkiv} % will become module
\protect \endinput
+
+% 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
diff --git a/Master/texmf-dist/tex/context/base/type-lua.mkiv b/Master/texmf-dist/tex/context/base/type-lua.mkiv
new file mode 100644
index 00000000000..a6799671edc
--- /dev/null
+++ b/Master/texmf-dist/tex/context/base/type-lua.mkiv
@@ -0,0 +1,88 @@
+%D \module
+%D [ file=type-lua,
+%D version=2009.11.27,
+%D title=\CONTEXT\ Typescript Macros,
+%D subtitle=\MKIV\ goodies,
+%D author=Hans Hagen \& Wolfgang Schuster,
+%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
+
+\starttypescriptcollection [luatex]
+
+\starttypescript [specserif] [all] [name]
+ \definefontsynonym [Serif] [spec:\cleanfontname\typescripttwo-\s!normal-\s!normal] [\s!features=\s!default]
+ \definefontsynonym [SerifItalic] [spec:\cleanfontname\typescripttwo-\s!normal-\s!italic] [\s!features=\s!default]
+ \definefontsynonym [SerifSlanted] [spec:\cleanfontname\typescripttwo-\s!normal-\s!italic] [\s!features=\s!default]
+ \definefontsynonym [SerifBold] [spec:\cleanfontname\typescripttwo-\s!bold -\s!normal] [\s!features=\s!default]
+ \definefontsynonym [SerifBoldItalic] [spec:\cleanfontname\typescripttwo-\s!bold -\s!italic] [\s!features=\s!default]
+ \definefontsynonym [SerifBoldSlanted] [spec:\cleanfontname\typescripttwo-\s!bold -\s!italic] [\s!features=\s!default]
+ \definefontsynonym [SerifCaps] [spec:\cleanfontname\typescripttwo-\s!normal-\s!normal] [\s!features=\s!smallcaps]
+\stoptypescript
+
+\starttypescript [specsans] [all] [name]
+ \definefontsynonym [Sans] [spec:\cleanfontname\typescripttwo-\s!normal-\s!normal] [\s!features=\s!default]
+ \definefontsynonym [SansItalic] [spec:\cleanfontname\typescripttwo-\s!normal-\s!italic] [\s!features=\s!default]
+ \definefontsynonym [SansSlanted] [spec:\cleanfontname\typescripttwo-\s!normal-\s!italic] [\s!features=\s!default]
+ \definefontsynonym [SansBold] [spec:\cleanfontname\typescripttwo-\s!bold -\s!normal] [\s!features=\s!default]
+ \definefontsynonym [SansBoldItalic] [spec:\cleanfontname\typescripttwo-\s!bold -\s!italic] [\s!features=\s!default]
+ \definefontsynonym [SansBoldSlanted] [spec:\cleanfontname\typescripttwo-\s!bold -\s!italic] [\s!features=\s!default]
+ \definefontsynonym [SansCaps] [spec:\cleanfontname\typescripttwo-\s!normal-\s!normal] [\s!features=\s!smallcaps]
+\stoptypescript
+
+\starttypescript [specmono] [all] [name]
+ \definefontsynonym [Mono] [spec:\cleanfontname\typescripttwo-\s!normal-\s!normal] [\s!features=\s!default]
+ \definefontsynonym [MonoItalic] [spec:\cleanfontname\typescripttwo-\s!normal-\s!italic] [\s!features=\s!default]
+ \definefontsynonym [MonoSlanted] [spec:\cleanfontname\typescripttwo-\s!normal-\s!italic] [\s!features=\s!default]
+ \definefontsynonym [MonoBold] [spec:\cleanfontname\typescripttwo-\s!bold -\s!normal] [\s!features=\s!default]
+ \definefontsynonym [MonoBoldItalic] [spec:\cleanfontname\typescripttwo-\s!bold -\s!italic] [\s!features=\s!default]
+ \definefontsynonym [MonoBoldSlanted] [spec:\cleanfontname\typescripttwo-\s!bold -\s!italic] [\s!features=\s!default]
+ \definefontsynonym [MonoCaps] [spec:\cleanfontname\typescripttwo-\s!normal-\s!normal] [\s!features=\s!smallcaps]
+\stoptypescript
+
+% we could combine these in the normal serif settings
+
+\starttypescript [specserif] [default] [size]
+ \definebodyfont
+ [4pt,5pt,6pt,7pt,8pt,9pt,10pt,11pt,12pt,14.4pt,17.3pt] [rm]
+ [\s!default]
+\stoptypescript
+
+\starttypescript [specsans] [default] [size]
+ \definebodyfont
+ [4pt,5pt,6pt,7pt,8pt,9pt,10pt,11pt,12pt,14.4pt,17.3pt]
+ [ss] [\s!default]
+\stoptypescript
+
+\starttypescript [specmono] [default] [size]
+ \definebodyfont
+ [4pt,5pt,6pt,7pt,8pt,9pt,10pt,11pt,12pt,14.4pt,17.3pt]
+ [tt] [\s!default]
+\stoptypescript
+
+\starttypescript [specserif] [dtp] [size]
+ \definebodyfont
+ [5pt,6pt,7pt,8pt,9pt,10pt,11pt,12pt,13pt,14pt,16pt,18pt,22pt,28pt]
+ [rm] [\s!default]
+\stoptypescript
+
+\starttypescript [specsans] [dtp] [size]
+ \definebodyfont
+ [5pt,6pt,7pt,8pt,9pt,10pt,11pt,12pt,13pt,14pt,16pt,18pt,22pt,28pt]
+ [ss] [\s!default]
+\stoptypescript
+
+\starttypescript [specmono] [dtp] [size]
+ \definebodyfont
+ [5pt,6pt,7pt,8pt,9pt,10pt,11pt,12pt,13pt,14pt,16pt,18pt,22pt,28pt]
+ [tt] [\s!default]
+\stoptypescript
+
+\stoptypescriptcollection
+
+\protect \endinput
diff --git a/Master/texmf-dist/tex/context/base/type-mac.mkii b/Master/texmf-dist/tex/context/base/type-mac.mkii
index feedcd43d7d..ac57726cb9c 100644
--- a/Master/texmf-dist/tex/context/base/type-mac.mkii
+++ b/Master/texmf-dist/tex/context/base/type-mac.mkii
@@ -23,6 +23,21 @@
\definetypescriptprefix [f:trebuchet] [Trebuchet MS]
\definetypescriptprefix [f:verdana] [Verdana]
+\definetypescriptprefix [n:andalemono] [AndaleMono]
+\definetypescriptprefix [n:chalkboard] [Chalkboard]
+\definetypescriptprefix [n:cochin] [Cochin]
+\definetypescriptprefix [n:comicsans] [ComicSans]
+\definetypescriptprefix [n:couriernew] [CourierNew]
+\definetypescriptprefix [n:georgia] [Georgia]
+\definetypescriptprefix [n:lucidagrande] [LucidaGrande]
+\definetypescriptprefix [n:monaco] [Monaco]
+\definetypescriptprefix [n:tahoma] [Tahoma]
+\definetypescriptprefix [n:timesnewroman] [TimesNewRoman]
+\definetypescriptprefix [n:trebuchet] [Trebuchet]
+\definetypescriptprefix [n:verdana] [Verdana]
+
+\starttypescriptcollection [macosx]
+
% American Typewriter
\starttypescript [serif] [americantypewriter-light-condensed,americantypewriter-condensed,americantypewriter-light,americantypewriter]
@@ -34,6 +49,34 @@
\definefontsynonym [AmericanTypewriter-BoldCond] [name:American Typewriter Condensed Bold] [features=default]
\stoptypescript
+\starttypescript [serif] [americantypewriter-light-condensed]
+ \setups[font:fallback:serif]
+ \definefontsynonym [Serif] [AmericanTypewriter-LightCond] [features=default]
+ \definefontsynonym [SerifBold] [AmericanTypewriter-Condensed] [features=default]
+\stoptypescript
+
+\starttypescript [serif] [americantypewriter-condensed]
+ \setups[font:fallback:serif]
+ \definefontsynonym [Serif] [AmericanTypewriter-Condensed] [features=default]
+ \definefontsynonym [SerifBold] [AmericanTypewriter-BoldCond] [features=default]
+\stoptypescript
+
+\starttypescript [serif] [americantypewriter-light]
+ \setups[font:fallback:serif]
+ \definefontsynonym [Serif] [AmericanTypewriter-Light] [features=default]
+ \definefontsynonym [SerifBold] [AmericanTypewriter-Regular] [features=default]
+\stoptypescript
+
+\starttypescript [serif] [americantypewriter]
+ \setups[font:fallback:serif]
+ \definefontsynonym [Serif] [AmericanTypewriter-Regular] [features=default]
+ \definefontsynonym [SerifBold] [AmericanTypewriter-Bold] [features=default]
+\stoptypescript
+
+\starttypescript [americantypewriter-light-condensed,americantypewriter-condensed,americantypewriter-light,americantypewriter]
+ \definetypeface [\typescriptone] [rm] [serif] [\typescriptone] [default]
+\stoptypescript
+
% Arial / Arial Narrow / Arial Rounded / Arial Unicode
\starttypescript [sans] [arial-narrow,arial-condensed,arial,arial-rounded,arial-unicode]
@@ -50,6 +93,36 @@
\definefontsynonym [Arial-Rounded] [name:Arial Rounded MT Bold] [features=default]
\stoptypescript
+\starttypescript [sans] [arial-narrow,arial-condensed]
+ \setups[font:fallback:sans]
+ \definefontsynonym [Sans] [Arial-Condensed] [features=default]
+ \definefontsynonym [SansItalic] [Arial-ItalicCond] [features=default]
+ \definefontsynonym [SansBold] [Arial-BoldCond] [features=default]
+ \definefontsynonym [SansBoldItalic] [Arial-BoldItalicCond] [features=default]
+\stoptypescript
+
+\starttypescript [sans] [arial]
+ \setups[font:fallback:sans]
+ \definefontsynonym [Sans] [Arial-Regular] [features=default]
+ \definefontsynonym [SansItalic] [Arial-Italic] [features=default]
+ \definefontsynonym [SansBold] [Arial-Bold] [features=default]
+ \definefontsynonym [SansBoldItalic] [Arial-BoldItalic] [features=default]
+\stoptypescript
+
+\starttypescript [sans] [arial-rounded]
+ \setups[font:fallback:sans]
+ \definefontsynonym [Sans] [Arial-Rounded] [features=default]
+\stoptypescript
+
+\starttypescript [sans] [arial-unicode]
+ \setups[font:fallback:sans]
+ \definefontsynonym [Sans] [Arial-Unicode] [features=default]
+\stoptypescript
+
+\starttypescript [arial-narrow,arial-condensed,arial,arial-rounded,arial-unicode]
+ \definetypeface [\typescriptone] [ss] [sans] [\typescriptone] [default]
+\stoptypescript
+
% Baskerville
\starttypescript [serif] [baskerville]
@@ -61,12 +134,33 @@
\definefontsynonym [Baskerville-BoldItalic] [name:Baskerville Bold Italic] [features=default]
\stoptypescript
+\starttypescript [serif] [baskerville]
+ \setups[font:fallback:serif]
+ \definefontsynonym [Serif] [Baskerville-Regular] [features=default]
+ \definefontsynonym [SerifItalic] [Baskerville-Italic] [features=default]
+ \definefontsynonym [SerifBold] [Baskerville-Medium] [features=default]
+ \definefontsynonym [SerifBoldItalic] [Baskerville-MediumItalic] [features=default]
+\stoptypescript
+
+\starttypescript [baskerville]
+ \definetypeface [\typescriptone] [rm] [serif] [\typescriptone] [default]
+\stoptypescript
+
% Big Caslon
\starttypescript [serif] [caslon,bigcaslon]
\definefontsynonym [BigCaslon-Medium] [name:Big Caslon Medium] [features=default]
\stoptypescript
+\starttypescript [serif] [caslon,bigcaslon]
+ \setups[font:fallback:serif]
+ \definefontsynonym [Serif] [BigCaslon-Medium] [features=default]
+\stoptypescript
+
+\starttypescript [caslon,bigcaslon]
+ \definetypeface [\typescriptone] [rm] [serif] [\typescriptone] [default]
+\stoptypescript
+
% Copperplate
\starttypescript [sans] [copperplate-light,copperplate]
@@ -75,6 +169,22 @@
\definefontsynonym [Copperplate-Bold] [name:Copperplate Bold] [features=default]
\stoptypescript
+\starttypescript [sans] [copperplate-light]
+ \setups[font:fallback:sans]
+ \definefontsynonym [Sans] [Copperplate-Light] [features=default]
+ \definefontsynonym [SansBold] [Copperplate-Regular] [features=default]
+\stoptypescript
+
+\starttypescript [sans] [copperplate]
+ \setups[font:fallback:sans]
+ \definefontsynonym [Sans] [Copperplate-Regular] [features=default]
+ \definefontsynonym [SansBold] [Copperplate-Bold] [features=default]
+\stoptypescript
+
+\starttypescript [copperplate-light,copperplate]
+ \definetypeface [\typescriptone] [ss] [sans] [\typescriptone] [default]
+\stoptypescript
+
% Futura
\starttypescript [sans] [futura-condensed,futura]
@@ -84,6 +194,22 @@
\definefontsynonym [Futura-BoldCond] [name:Futura Condensed ExtraBold] [features=default]
\stoptypescript
+\starttypescript [sans] [futura-condensed]
+ \setups[font:fallback:sans]
+ \definefontsynonym [Sans] [Futura-MediumCond] [features=default]
+ \definefontsynonym [SansBold] [Futura-BoldCond] [features=default]
+\stoptypescript
+
+\starttypescript [sans] [futura]
+ \setups[font:fallback:sans]
+ \definefontsynonym [Sans] [Futura-Medium] [features=default]
+ \definefontsynonym [SansItalic] [Futura-MediumItalic] [features=default]
+\stoptypescript
+
+\starttypescript [futura-condensed,futura]
+ \definetypeface [\typescriptone] [ss] [sans] [\typescriptone] [default]
+\stoptypescript
+
% Gill Sans
\starttypescript [sans] [gillsans-light,gillsans]
@@ -95,6 +221,26 @@
\definefontsynonym [GillSans-BoldItalic] [name:Gill Sans Bold Italic] [features=default]
\stoptypescript
+\starttypescript [sans] [gillsans-light]
+ \setups[font:fallback:sans]
+ \definefontsynonym [Sans] [GillSans-Light] [features=default]
+ \definefontsynonym [SansItalic] [GillSans-LightItalic] [features=default]
+ \definefontsynonym [SansBold] [GillSans-Regular] [features=default]
+ \definefontsynonym [SansBoldItalic] [GillSans-Italic] [features=default]
+\stoptypescript
+
+\starttypescript [sans] [gillsans]
+ \setups[font:fallback:sans]
+ \definefontsynonym [Sans] [GillSans-Regular] [features=default]
+ \definefontsynonym [SansItalic] [GillSans-Italic] [features=default]
+ \definefontsynonym [SansBold] [GillSans-Bold] [features=default]
+ \definefontsynonym [SansBoldItalic] [GillSans-BoldItalic] [features=default]
+\stoptypescript
+
+\starttypescript [gillsans-light,gillsans]
+ \definetypeface [\typescriptone] [ss] [sans] [\typescriptone] [default]
+\stoptypescript
+
% Helvetica Neuse
\starttypescript [sans] [helvetica-neue-ultralight,helvetica-neue-light,helvetica-neue,helvetica-neue-boldcondensed]
@@ -110,6 +256,40 @@
\definefontsynonym [HelveticaNeue-BlackCond] [name:Helvetica Neue Condensed Black] [features=default]
\stoptypescript
+\starttypescript [sans] [helvetica-neue-ultralight]
+ \setups[font:fallback:sans]
+ \definefontsynonym [Sans] [HelveticaNeue-UltraLight] [features=default]
+ \definefontsynonym [SansItalic] [HelveticaNeue-UltraLightItalic] [features=default]
+ \definefontsynonym [SansBold] [HelveticaNeue-Light] [features=default]
+ \definefontsynonym [SansBoldItalic] [HelveticaNeue-LightItalic] [features=default]
+\stoptypescript
+
+\starttypescript [sans] [helvetica-neue-light]
+ \setups[font:fallback:sans]
+ \definefontsynonym [Sans] [HelveticaNeue-Light] [features=default]
+ \definefontsynonym [SansItalic] [HelveticaNeue-LightItalic] [features=default]
+ \definefontsynonym [SansBold] [HelveticaNeue-Regular] [features=default]
+ \definefontsynonym [SansBoldItalic] [HelveticaNeue-Italic] [features=default]
+\stoptypescript
+
+\starttypescript [sans] [helvetica-neue]
+ \setups[font:fallback:sans]
+ \definefontsynonym [Sans] [HelveticaNeue-Regular] [features=default]
+ \definefontsynonym [SansItalic] [HelveticaNeue-Italic] [features=default]
+ \definefontsynonym [SansBold] [HelveticaNeue-Bold] [features=default]
+ \definefontsynonym [SansBoldItalic] [HelveticaNeue-BoldItalic] [features=default]
+\stoptypescript
+
+\starttypescript [sans] [helvetica-neue-boldcondensed]
+ \setups[font:fallback:sans]
+ \definefontsynonym [Sans] [HelveticaNeue-BoldCond] [features=default]
+ \definefontsynonym [SansBold] [HelveticaNeue-BlackCond] [features=default]
+\stoptypescript
+
+\starttypescript [helvetica-neue-ultralight,helvetica-neue-light,helvetica-neue,helvetica-neue-boldcondensed]
+ \definetypeface [\typescriptone] [ss] [sans] [\typescriptone] [default]
+\stoptypescript
+
% Hiragino Mincho
\starttypescript [serif] [hiragino-mincho]
@@ -119,6 +299,22 @@
\definefontsynonym [HiraginoMinchoProN-Bold] [name:Hiragino Mincho ProN W6] [features=japanese]
\stoptypescript
+\starttypescript [serif] [hiragino-mincho]
+ \setups[font:fallback:serif]
+ \definefontsynonym [Serif] [HiraginoMinchoPro-Regular] [features=japanese]
+ \definefontsynonym [SerifBold] [HiraginoMinchoPro-Bold] [features=japanese]
+\stoptypescript
+
+% \starttypescript [serif] [hiragino-mincho]
+% \setups[font:fallback:serif]
+% \definefontsynonym [Serif] [HiraginoMinchoProN-Regular] [features=japanese]
+% \definefontsynonym [SerifBold] [HiraginoMinchoProN-Bold] [features=japanese]
+% \stoptypescript
+
+\starttypescript [hiragino-mincho]
+ \definetypeface [\typescriptone] [rm] [serif] [\typescriptone] [default]
+\stoptypescript
+
% Hiragino Maru
\starttypescript [sans] [hiragino-maru]
@@ -126,6 +322,20 @@
\definefontsynonym [HiraginoMaruGothicProN-Regular] [name:Hiragino Maru Gothic ProN W4] [features=japanese]
\stoptypescript
+\starttypescript [sans] [hiragino-maru]
+ \setups[font:fallback:sans]
+ \definefontsynonym [Sans] [HiraginoMaruGothicPro-Regular] [features=japanese]
+\stoptypescript
+
+% \starttypescript [sans] [hiragino-maru]
+% \setups[font:fallback:sans]
+% \definefontsynonym [Sans] [HiraginoMaruGothicProN-Regular] [features=japanese]
+% \stoptypescript
+
+\starttypescript [hiragino-maru]
+ \definetypeface [\typescriptone] [ss] [sans] [\typescriptone] [default]
+\stoptypescript
+
% Hiragino Kaku
\starttypescript [sans] [hiragino-kaku]
@@ -137,6 +347,22 @@
\definefontsynonym [HiraginoKakuGothicStdN-Black] [name:Hiragino Kaku Gothic StdN W8] [features=japanese]
\stoptypescript
+\starttypescript [sans] [hiragino-kaku]
+ \setups[font:fallback:sans]
+ \definefontsynonym [Sans] [HiraginoKakuGothicPro-Regular] [features=japanese]
+ \definefontsynonym [SansBold] [HiraginoKakuGothicPro-Bold] [features=japanese]
+\stoptypescript
+
+% \starttypescript [sans] [hiragino-kaku]
+% \setups[font:fallback:sans]
+% \definefontsynonym [Sans] [HiraginoKakuGothicProN-Regular] [features=japanese]
+% \definefontsynonym [SansBold] [HiraginoKakuGothicProN-Bold] [features=japanese]
+% \stoptypescript
+
+\starttypescript [hiragino-kaku]
+ \definetypeface [\typescriptone] [ss] [sans] [\typescriptone] [default]
+\stoptypescript
+
% Hoefler Text
\starttypescript [serif] [hoefler]
@@ -147,18 +373,48 @@
\definefontsynonym [HoeflerText-Ornaments] [name:Hoefler Text Ornaments] [features=default]
\stoptypescript
+\starttypescript [serif] [hoefler]
+ \setups[font:fallback:serif]
+ \definefontsynonym [Serif] [HoeflerText-Regular] [features=default]
+ \definefontsynonym [SerifItalic] [HoeflerText-Italic] [features=default]
+ \definefontsynonym [SerifBold] [HoeflerText-Black] [features=default]
+ \definefontsynonym [SerifBoldItalic] [HoeflerText-BlackItalic] [features=default]
+\stoptypescript
+
+\starttypescript [hoefler]
+ \definetypeface [\typescriptone] [rm] [serif] [\typescriptone] [default]
+\stoptypescript
+
% Impact
\starttypescript [sans] [impact]
\definefontsynonym [Impact-Regular] [name:Impact] [features=default]
\stoptypescript
+\starttypescript [sans] [impact]
+ \setups[font:fallback:sans]
+ \definefontsynonym [Sans] [Impact-Regular] [features=default]
+\stoptypescript
+
+\starttypescript [impact]
+ \definetypeface [\typescriptone] [ss] [sans] [\typescriptone] [default]
+\stoptypescript
+
% Andale Mono / Monaco
\starttypescript [mono] [andalemono,monaco]
\definefontsynonym [\typescriptprefix{n:\typescripttwo}-Regular] [name:\typescriptprefix{f:\typescripttwo}] [features=default]
\stoptypescript
+\starttypescript [mono] [andalemono,monaco]
+ \setups[font:fallback:mono]
+ \definefontsynonym [Mono] [\typescriptprefix{n:\typescripttwo}-Regular] [features=default]
+\stoptypescript
+
+\starttypescript [andalemono,monaco]
+ \definetypeface [\typescriptone] [tt] [mono] [\typescriptone] [default]
+\stoptypescript
+
% Optima
\starttypescript [sans] [optima,optima-bold]
@@ -169,6 +425,25 @@
\definefontsynonym [Optima-Black] [name:Optima ExtraBlack] [features=default]
\stoptypescript
+\starttypescript [sans] [optima]
+ \setups[font:fallback:sans]
+ \definefontsynonym [Sans] [Optima-Regular] [features=default]
+ \definefontsynonym [SansItalic] [Optima-Italic] [features=default]
+ \definefontsynonym [SansBold] [Optima-Bold] [features=default]
+ \definefontsynonym [SansBoldItalic] [Optima-BoldItalic] [features=default]
+\stoptypescript
+
+\starttypescript [sans] [optima-bold]
+ \setups[font:fallback:sans]
+ \definefontsynonym [Sans] [Optima-Bold] [features=default]
+ \definefontsynonym [SansItalic] [Optima-BoldItalic] [features=default]
+ \definefontsynonym [SansBold] [Optima-Black] [features=default]
+\stoptypescript
+
+\starttypescript [optima,optima-bold]
+ \definetypeface [\typescriptone] [ss] [sans] [\typescriptone] [default]
+\stoptypescript
+
% Papyrus
\starttypescript [sans] [papyrus]
@@ -176,12 +451,30 @@
\definefontsynonym [Papyrus-Condensed] [name:Papyrus Condensed] [features=default]
\stoptypescript
+\starttypescript [sans] [papyrus]
+ \setups[font:fallback:sans]
+ \definefontsynonym [Sans] [Papyrus-Regular] [features=default]
+\stoptypescript
+
+\starttypescript [papyrus]
+ \definetypeface [\typescriptone] [ss] [sans] [\typescriptone] [default]
+\stoptypescript
+
% STFangsong
\starttypescript [serif] [stfangsong]
\definefontsynonym [STFangsong-Regular] [name:STFangsong] [features=chinese]
\stoptypescript
+\starttypescript [serif] [stfangsong]
+ \setups[font:fallback:sans]
+ \definefontsynonym [Serif] [STFangsong-Regular] [features=chinese]
+\stoptypescript
+
+\starttypescript [stfangsong]
+ \definetypeface [\typescriptone] [rm] [serif] [\typescriptone] [default]
+\stoptypescript
+
% STHeiti
\starttypescript [sans] [stheiti]
@@ -189,18 +482,46 @@
\definefontsynonym [STHeiti-Regular] [name:STHeiti Regular] [features=chinese]
\stoptypescript
+\starttypescript [sans] [stheiti]
+ \setups[font:fallback:sans]
+ \definefontsynonym [Sans] [STXihei-Light] [features=chinese]
+ \definefontsynonym [SansBold] [STKaiti-Regular] [features=chinese]
+\stoptypescript
+
+\starttypescript [stheiti]
+ \definetypeface [\typescriptone] [ss] [sans] [\typescriptone] [default]
+\stoptypescript
+
% STKaiti
\starttypescript [serif] [stkaiti]
\definefontsynonym [STKaiti-Regular] [name:STKaiti] [features=chinese]
\stoptypescript
+\starttypescript [serif] [stkaiti]
+ \setups[font:fallback:sans]
+ \definefontsynonym [Serif] [STKaiti-Regular] [features=chinese]
+\stoptypescript
+
+\starttypescript [stkaiti]
+ \definetypeface [\typescriptone] [rm] [serif] [\typescriptone] [default]
+\stoptypescript
+
% STSong
\starttypescript [serif] [stsong]
\definefontsynonym [STSong-Regular] [name:STSong] [features=chinese]
\stoptypescript
+\starttypescript [serif] [stsong]
+ \setups[font:fallback:sans]
+ \definefontsynonym [Serif] [STSong-Regular] [features=chinese]
+\stoptypescript
+
+\starttypescript [stsong]
+ \definetypeface [\typescriptone] [rm] [serif] [\typescriptone] [default]
+\stoptypescript
+
% Chalkboard / Comic Sans / Tahoma
\starttypescript [sans] [chalkboard,comicsans,lucidagrande,tahoma]
@@ -208,6 +529,16 @@
\definefontsynonym [\typescriptprefix{n:\typescripttwo}-Bold] [name:\typescriptprefix{f:\typescripttwo} Bold] [features=default]
\stoptypescript
+\starttypescript [sans] [chalkboard,comicsans,lucidagrande,tahoma]
+ \setups[font:fallback:sans]
+ \definefontsynonym [Sans] [\typescriptprefix{n:\typescripttwo}-Regular] [features=default]
+ \definefontsynonym [SansBold] [\typescriptprefix{n:\typescripttwo}-Bold] [features=default]
+\stoptypescript
+
+\starttypescript [chalkboard,comicsans,tahoma]
+ \definetypeface [\typescriptone] [ss] [sans] [\typescriptone] [default]
+\stoptypescript
+
% Cochin / Courier New / Georgia / Times New Roman / Trebuchet / Verdana
\starttypescript [serif,sans,mono] [cochin,georgia,timesnewroman,trebuchet,verdana,couriernew]
@@ -217,4 +548,46 @@
\definefontsynonym [\typescriptprefix{n:\typescripttwo}-BoldItalic] [name:\typescriptprefix{f:\typescripttwo} Bold Italic] [features=default]
\stoptypescript
+\starttypescript [serif] [cochin,georgia,timesnewroman]
+ \setups[font:fallback:serif]
+ \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]
+\stoptypescript
+
+\starttypescript [cochin,georgia,timesnewroman]
+ \definetypeface [\typescriptone] [rm] [serif] [\typescriptone] [default]
+\stoptypescript
+
+% Courier New
+
+% \starttypescript [mono] [couriernew]
+% \setups[font:fallback:mono]
+% \definefontsynonym [Mono] [\typescriptprefix{n:\typescripttwo}-Regular] [features=default]
+% \definefontsynonym [MonoItalic] [\typescriptprefix{n:\typescripttwo}-Italic] [features=default]
+% \definefontsynonym [MonoBold] [\typescriptprefix{n:\typescripttwo}-Bold] [features=default]
+% \definefontsynonym [MonoBoldItalic] [\typescriptprefix{n:\typescripttwo}-BoldItalic] [features=default]
+% \stoptypescript
+
+% \starttypescript [couriernew]
+% \definetypeface [\typescriptone] [tt] [mono] [\typescriptone] [default]
+% \stoptypescript
+
+% Trebuchet / Verdana
+
+% \starttypescript [sans] [trebuchet,verdana]
+% \setups[font:fallback:sans]
+% \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]
+% \stoptypescript
+
+% \starttypescript [trebuchet,verdana]
+% \definetypeface [\typescriptone] [ss] [sans] [\typescriptone] [default]
+% \stoptypescript
+
+\stoptypescriptcollection
+
\endinput
diff --git a/Master/texmf-dist/tex/context/base/type-mac.mkiv b/Master/texmf-dist/tex/context/base/type-mac.mkiv
index 10a41588390..9856439da44 100644
--- a/Master/texmf-dist/tex/context/base/type-mac.mkiv
+++ b/Master/texmf-dist/tex/context/base/type-mac.mkiv
@@ -23,6 +23,21 @@
\definetypescriptprefix [f:trebuchet] [trebuchetms]
\definetypescriptprefix [f:verdana] [verdana]
+\definetypescriptprefix [n:andalemono] [AndaleMono]
+\definetypescriptprefix [n:chalkboard] [Chalkboard]
+\definetypescriptprefix [n:cochin] [Cochin]
+\definetypescriptprefix [n:comicsans] [ComicSans]
+\definetypescriptprefix [n:couriernew] [CourierNew]
+\definetypescriptprefix [n:georgia] [Georgia]
+\definetypescriptprefix [n:lucidagrande] [LucidaGrande]
+\definetypescriptprefix [n:monaco] [Monaco]
+\definetypescriptprefix [n:tahoma] [Tahoma]
+\definetypescriptprefix [n:timesnewroman] [TimesNewRoman]
+\definetypescriptprefix [n:trebuchet] [Trebuchet]
+\definetypescriptprefix [n:verdana] [Verdana]
+
+\starttypescriptcollection [macosx]
+
% American Typewriter
\starttypescript [serif] [americantypewriter-light-condensed,americantypewriter-condensed,americantypewriter-light,americantypewriter]
@@ -34,6 +49,34 @@
\definefontsynonym [AmericanTypewriter-BoldCond] [name:americantypewritercondensedbold] [features=default]
\stoptypescript
+\starttypescript [serif] [americantypewriter-light-condensed]
+ \setups[font:fallback:serif]
+ \definefontsynonym [Serif] [AmericanTypewriter-LightCond] [features=default]
+ \definefontsynonym [SerifBold] [AmericanTypewriter-Condensed] [features=default]
+\stoptypescript
+
+\starttypescript [serif] [americantypewriter-condensed]
+ \setups[font:fallback:serif]
+ \definefontsynonym [Serif] [AmericanTypewriter-Condensed] [features=default]
+ \definefontsynonym [SerifBold] [AmericanTypewriter-BoldCond] [features=default]
+\stoptypescript
+
+\starttypescript [serif] [americantypewriter-light]
+ \setups[font:fallback:serif]
+ \definefontsynonym [Serif] [AmericanTypewriter-Light] [features=default]
+ \definefontsynonym [SerifBold] [AmericanTypewriter-Regular] [features=default]
+\stoptypescript
+
+\starttypescript [serif] [americantypewriter]
+ \setups[font:fallback:serif]
+ \definefontsynonym [Serif] [AmericanTypewriter-Regular] [features=default]
+ \definefontsynonym [SerifBold] [AmericanTypewriter-Bold] [features=default]
+\stoptypescript
+
+\starttypescript [americantypewriter-light-condensed,americantypewriter-condensed,americantypewriter-light,americantypewriter]
+ \definetypeface [\typescriptone] [rm] [serif] [\typescriptone] [default]
+\stoptypescript
+
% Arial / Arial Narrow / Arial Rounded / Arial Unicode
\starttypescript [sans] [arial-narrow,arial-condensed,arial,arial-rounded,arial-unicode]
@@ -50,6 +93,36 @@
\definefontsynonym [Arial-Rounded] [name:arialroundedmtbold] [features=default]
\stoptypescript
+\starttypescript [sans] [arial-narrow,arial-condensed]
+ \setups[font:fallback:sans]
+ \definefontsynonym [Sans] [Arial-Condensed] [features=default]
+ \definefontsynonym [SansItalic] [Arial-ItalicCond] [features=default]
+ \definefontsynonym [SansBold] [Arial-BoldCond] [features=default]
+ \definefontsynonym [SansBoldItalic] [Arial-BoldItalicCond] [features=default]
+\stoptypescript
+
+\starttypescript [sans] [arial]
+ \setups[font:fallback:sans]
+ \definefontsynonym [Sans] [Arial-Regular] [features=default]
+ \definefontsynonym [SansItalic] [Arial-Italic] [features=default]
+ \definefontsynonym [SansBold] [Arial-Bold] [features=default]
+ \definefontsynonym [SansBoldItalic] [Arial-BoldItalic] [features=default]
+\stoptypescript
+
+\starttypescript [sans] [arial-rounded]
+ \setups[font:fallback:sans]
+ \definefontsynonym [Sans] [Arial-Rounded] [features=default]
+\stoptypescript
+
+\starttypescript [sans] [arial-unicode]
+ \setups[font:fallback:sans]
+ \definefontsynonym [Sans] [Arial-Unicode] [features=default]
+\stoptypescript
+
+\starttypescript [arial-narrow,arial-condensed,arial,arial-rounded,arial-unicode]
+ \definetypeface [\typescriptone] [ss] [sans] [\typescriptone] [default]
+\stoptypescript
+
% Baskerville
\starttypescript [serif] [baskerville]
@@ -61,12 +134,33 @@
\definefontsynonym [Baskerville-BoldItalic] [name:baskervillebolditalic] [features=default]
\stoptypescript
+\starttypescript [serif] [baskerville]
+ \setups[font:fallback:serif]
+ \definefontsynonym [Serif] [Baskerville-Regular] [features=default]
+ \definefontsynonym [SerifItalic] [Baskerville-Italic] [features=default]
+ \definefontsynonym [SerifBold] [Baskerville-Medium] [features=default]
+ \definefontsynonym [SerifBoldItalic] [Baskerville-MediumItalic] [features=default]
+\stoptypescript
+
+\starttypescript [baskerville]
+ \definetypeface [\typescriptone] [rm] [serif] [\typescriptone] [default]
+\stoptypescript
+
% Big Caslon
\starttypescript [serif] [caslon,bigcaslon]
\definefontsynonym [BigCaslon-Medium] [name:bigcaslonmedium] [features=default]
\stoptypescript
+\starttypescript [serif] [caslon,bigcaslon]
+ \setups[font:fallback:serif]
+ \definefontsynonym [Serif] [BigCaslon-Medium] [features=default]
+\stoptypescript
+
+\starttypescript [caslon,bigcaslon]
+ \definetypeface [\typescriptone] [rm] [serif] [\typescriptone] [default]
+\stoptypescript
+
% Copperplate
\starttypescript [sans] [copperplate-light,copperplate]
@@ -75,6 +169,22 @@
\definefontsynonym [Copperplate-Bold] [name:copperplatebold] [features=default]
\stoptypescript
+\starttypescript [sans] [copperplate-light]
+ \setups[font:fallback:sans]
+ \definefontsynonym [Sans] [Copperplate-Light] [features=default]
+ \definefontsynonym [SansBold] [Copperplate-Regular] [features=default]
+\stoptypescript
+
+\starttypescript [sans] [copperplate]
+ \setups[font:fallback:sans]
+ \definefontsynonym [Sans] [Copperplate-Regular] [features=default]
+ \definefontsynonym [SansBold] [Copperplate-Bold] [features=default]
+\stoptypescript
+
+\starttypescript [copperplate-light,copperplate]
+ \definetypeface [\typescriptone] [ss] [sans] [\typescriptone] [default]
+\stoptypescript
+
% Futura
\starttypescript [sans] [futura-condensed,futura]
@@ -84,6 +194,22 @@
\definefontsynonym [Futura-BoldCond] [name:futuracondensedextrabold] [features=default]
\stoptypescript
+\starttypescript [sans] [futura-condensed]
+ \setups[font:fallback:sans]
+ \definefontsynonym [Sans] [Futura-MediumCond] [features=default]
+ \definefontsynonym [SansBold] [Futura-BoldCond] [features=default]
+\stoptypescript
+
+\starttypescript [sans] [futura]
+ \setups[font:fallback:sans]
+ \definefontsynonym [Sans] [Futura-Medium] [features=default]
+ \definefontsynonym [SansItalic] [Futura-MediumItalic] [features=default]
+\stoptypescript
+
+\starttypescript [futura-condensed,futura]
+ \definetypeface [\typescriptone] [ss] [sans] [\typescriptone] [default]
+\stoptypescript
+
% Gill Sans
\starttypescript [sans] [gillsans-light,gillsans]
@@ -95,6 +221,26 @@
\definefontsynonym [GillSans-BoldItalic] [name:gillsansbolditalic] [features=default]
\stoptypescript
+\starttypescript [sans] [gillsans-light]
+ \setups[font:fallback:sans]
+ \definefontsynonym [Sans] [GillSans-Light] [features=default]
+ \definefontsynonym [SansItalic] [GillSans-LightItalic] [features=default]
+ \definefontsynonym [SansBold] [GillSans-Regular] [features=default]
+ \definefontsynonym [SansBoldItalic] [GillSans-Italic] [features=default]
+\stoptypescript
+
+\starttypescript [sans] [gillsans]
+ \setups[font:fallback:sans]
+ \definefontsynonym [Sans] [GillSans-Regular] [features=default]
+ \definefontsynonym [SansItalic] [GillSans-Italic] [features=default]
+ \definefontsynonym [SansBold] [GillSans-Bold] [features=default]
+ \definefontsynonym [SansBoldItalic] [GillSans-BoldItalic] [features=default]
+\stoptypescript
+
+\starttypescript [gillsans-light,gillsans]
+ \definetypeface [\typescriptone] [ss] [sans] [\typescriptone] [default]
+\stoptypescript
+
% Helvetica Neuse
\starttypescript [sans] [helvetica-neue-ultralight,helvetica-neue-light,helvetica-neue,helvetica-neue-boldcondensed]
@@ -110,6 +256,40 @@
\definefontsynonym [HelveticaNeue-BlackCond] [name:helveticaneuecondensedblack] [features=default]
\stoptypescript
+\starttypescript [sans] [helvetica-neue-ultralight]
+ \setups[font:fallback:sans]
+ \definefontsynonym [Sans] [HelveticaNeue-UltraLight] [features=default]
+ \definefontsynonym [SansItalic] [HelveticaNeue-UltraLightItalic] [features=default]
+ \definefontsynonym [SansBold] [HelveticaNeue-Light] [features=default]
+ \definefontsynonym [SansBoldItalic] [HelveticaNeue-LightItalic] [features=default]
+\stoptypescript
+
+\starttypescript [sans] [helvetica-neue-light]
+ \setups[font:fallback:sans]
+ \definefontsynonym [Sans] [HelveticaNeue-Light] [features=default]
+ \definefontsynonym [SansItalic] [HelveticaNeue-LightItalic] [features=default]
+ \definefontsynonym [SansBold] [HelveticaNeue-Regular] [features=default]
+ \definefontsynonym [SansBoldItalic] [HelveticaNeue-Italic] [features=default]
+\stoptypescript
+
+\starttypescript [sans] [helvetica-neue]
+ \setups[font:fallback:sans]
+ \definefontsynonym [Sans] [HelveticaNeue-Regular] [features=default]
+ \definefontsynonym [SansItalic] [HelveticaNeue-Italic] [features=default]
+ \definefontsynonym [SansBold] [HelveticaNeue-Bold] [features=default]
+ \definefontsynonym [SansBoldItalic] [HelveticaNeue-BoldItalic] [features=default]
+\stoptypescript
+
+\starttypescript [sans] [helvetica-neue-boldcondensed]
+ \setups[font:fallback:sans]
+ \definefontsynonym [Sans] [HelveticaNeue-BoldCond] [features=default]
+ \definefontsynonym [SansBold] [HelveticaNeue-BlackCond] [features=default]
+\stoptypescript
+
+\starttypescript [helvetica-neue-ultralight,helvetica-neue-light,helvetica-neue,helvetica-neue-boldcondensed]
+ \definetypeface [\typescriptone] [ss] [sans] [\typescriptone] [default]
+\stoptypescript
+
% Hiragino Mincho
\starttypescript [serif] [hiragino-mincho]
@@ -119,6 +299,22 @@
\definefontsynonym [HiraginoMinchoProN-Bold] [name:hiraminpronw6] [features=japanese]
\stoptypescript
+\starttypescript [serif] [hiragino-mincho]
+ \setups[font:fallback:serif]
+ \definefontsynonym [Serif] [HiraginoMinchoPro-Regular] [features=japanese]
+ \definefontsynonym [SerifBold] [HiraginoMinchoPro-Bold] [features=japanese]
+\stoptypescript
+
+% \starttypescript [serif] [hiragino-mincho]
+% \setups[font:fallback:serif]
+% \definefontsynonym [Serif] [HiraginoMinchoProN-Regular] [features=japanese]
+% \definefontsynonym [SerifBold] [HiraginoMinchoProN-Bold] [features=japanese]
+% \stoptypescript
+
+\starttypescript [hiragino-mincho]
+ \definetypeface [\typescriptone] [rm] [serif] [\typescriptone] [default]
+\stoptypescript
+
% Hiragino Maru
\starttypescript [sans] [hiragino-maru]
@@ -126,6 +322,20 @@
\definefontsynonym [HiraginoMaruGothicProN-Regular] [name:hiramarupronw4] [features=japanese]
\stoptypescript
+\starttypescript [sans] [hiragino-maru]
+ \setups[font:fallback:sans]
+ \definefontsynonym [Sans] [HiraginoMaruGothicPro-Regular] [features=japanese]
+\stoptypescript
+
+% \starttypescript [sans] [hiragino-maru]
+% \setups[font:fallback:sans]
+% \definefontsynonym [Sans] [HiraginoMaruGothicProN-Regular] [features=japanese]
+% \stoptypescript
+
+\starttypescript [hiragino-maru]
+ \definetypeface [\typescriptone] [ss] [sans] [\typescriptone] [default]
+\stoptypescript
+
% Hiragino Kaku
\starttypescript [sans] [hiragino-kaku]
@@ -137,6 +347,22 @@
\definefontsynonym [HiraginoKakuGothicStdN-Black] [name:hirakakustdnw8] [features=japanese]
\stoptypescript
+\starttypescript [sans] [hiragino-kaku]
+ \setups[font:fallback:sans]
+ \definefontsynonym [Sans] [HiraginoKakuGothicPro-Regular] [features=japanese]
+ \definefontsynonym [SansBold] [HiraginoKakuGothicPro-Bold] [features=japanese]
+\stoptypescript
+
+% \starttypescript [sans] [hiragino-kaku]
+% \setups[font:fallback:sans]
+% \definefontsynonym [Sans] [HiraginoKakuGothicProN-Regular] [features=japanese]
+% \definefontsynonym [SansBold] [HiraginoKakuGothicProN-Bold] [features=japanese]
+% \stoptypescript
+
+\starttypescript [hiragino-kaku]
+ \definetypeface [\typescriptone] [ss] [sans] [\typescriptone] [default]
+\stoptypescript
+
% Hoefler Text
\starttypescript [serif] [hoefler]
@@ -147,18 +373,48 @@
\definefontsynonym [HoeflerText-Ornaments] [name:hoeflertextornaments] [features=default]
\stoptypescript
+\starttypescript [serif] [hoefler]
+ \setups[font:fallback:serif]
+ \definefontsynonym [Serif] [HoeflerText-Regular] [features=default]
+ \definefontsynonym [SerifItalic] [HoeflerText-Italic] [features=default]
+ \definefontsynonym [SerifBold] [HoeflerText-Black] [features=default]
+ \definefontsynonym [SerifBoldItalic] [HoeflerText-BlackItalic] [features=default]
+\stoptypescript
+
+\starttypescript [hoefler]
+ \definetypeface [\typescriptone] [rm] [serif] [\typescriptone] [default]
+\stoptypescript
+
% Impact
\starttypescript [sans] [impact]
\definefontsynonym [Impact-Regular] [name:impact] [features=default]
\stoptypescript
+\starttypescript [sans] [impact]
+ \setups[font:fallback:sans]
+ \definefontsynonym [Sans] [Impact-Regular] [features=default]
+\stoptypescript
+
+\starttypescript [impact]
+ \definetypeface [\typescriptone] [ss] [sans] [\typescriptone] [default]
+\stoptypescript
+
% Andale Mono / Monaco
\starttypescript [mono] [andalemono,monaco]
\definefontsynonym [\typescriptprefix{n:\typescripttwo}-Regular] [name:\typescriptprefix{f:\typescripttwo}] [features=default]
\stoptypescript
+\starttypescript [mono] [andalemono,monaco]
+ \setups[font:fallback:mono]
+ \definefontsynonym [Mono] [\typescriptprefix{n:\typescripttwo}-Regular] [features=default]
+\stoptypescript
+
+\starttypescript [andalemono,monaco]
+ \definetypeface [\typescriptone] [tt] [mono] [\typescriptone] [default]
+\stoptypescript
+
% Optima
\starttypescript [sans] [optima,optima-bold]
@@ -169,6 +425,25 @@
\definefontsynonym [Optima-Black] [name:optimaextrablack] [features=default]
\stoptypescript
+\starttypescript [sans] [optima]
+ \setups[font:fallback:sans]
+ \definefontsynonym [Sans] [Optima-Regular] [features=default]
+ \definefontsynonym [SansItalic] [Optima-Italic] [features=default]
+ \definefontsynonym [SansBold] [Optima-Bold] [features=default]
+ \definefontsynonym [SansBoldItalic] [Optima-BoldItalic] [features=default]
+\stoptypescript
+
+\starttypescript [sans] [optima-bold]
+ \setups[font:fallback:sans]
+ \definefontsynonym [Sans] [Optima-Bold] [features=default]
+ \definefontsynonym [SansItalic] [Optima-BoldItalic] [features=default]
+ \definefontsynonym [SansBold] [Optima-Black] [features=default]
+\stoptypescript
+
+\starttypescript [optima,optima-bold]
+ \definetypeface [\typescriptone] [ss] [sans] [\typescriptone] [default]
+\stoptypescript
+
% Papyrus
\starttypescript [sans] [papyrus]
@@ -176,12 +451,30 @@
\definefontsynonym [Papyrus-Condensed] [name:papyruscondensed] [features=default]
\stoptypescript
+\starttypescript [sans] [papyrus]
+ \setups[font:fallback:sans]
+ \definefontsynonym [Sans] [Papyrus-Regular] [features=default]
+\stoptypescript
+
+\starttypescript [papyrus]
+ \definetypeface [\typescriptone] [ss] [sans] [\typescriptone] [default]
+\stoptypescript
+
% STFangsong
\starttypescript [serif] [stfangsong]
\definefontsynonym [STFangsong-Regular] [name:stfangsong] [features=chinese]
\stoptypescript
+\starttypescript [serif] [stfangsong]
+ \setups[font:fallback:sans]
+ \definefontsynonym [Serif] [STFangsong-Regular] [features=chinese]
+\stoptypescript
+
+\starttypescript [stfangsong]
+ \definetypeface [\typescriptone] [rm] [serif] [\typescriptone] [default]
+\stoptypescript
+
% STHeiti
\starttypescript [sans] [stheiti]
@@ -189,18 +482,46 @@
\definefontsynonym [STHeiti-Regular] [name:stheiti] [features=chinese]
\stoptypescript
+\starttypescript [sans] [stheiti]
+ \setups[font:fallback:sans]
+ \definefontsynonym [Sans] [STXihei-Light] [features=chinese]
+ \definefontsynonym [SansBold] [STKaiti-Regular] [features=chinese]
+\stoptypescript
+
+\starttypescript [stheiti]
+ \definetypeface [\typescriptone] [ss] [sans] [\typescriptone] [default]
+\stoptypescript
+
% STKaiti
\starttypescript [serif] [stkaiti]
\definefontsynonym [STKaiti-Regular] [name:stkaiti] [features=chinese]
\stoptypescript
+\starttypescript [serif] [stkaiti]
+ \setups[font:fallback:sans]
+ \definefontsynonym [Serif] [STKaiti-Regular] [features=chinese]
+\stoptypescript
+
+\starttypescript [stkaiti]
+ \definetypeface [\typescriptone] [rm] [serif] [\typescriptone] [default]
+\stoptypescript
+
% STSong
\starttypescript [serif] [stsong]
\definefontsynonym [STSong-Regular] [name:stsong] [features=chinese]
\stoptypescript
+\starttypescript [serif] [stsong]
+ \setups[font:fallback:sans]
+ \definefontsynonym [Serif] [STSong-Regular] [features=chinese]
+\stoptypescript
+
+\starttypescript [stsong]
+ \definetypeface [\typescriptone] [rm] [serif] [\typescriptone] [default]
+\stoptypescript
+
% Chalkboard / Comic Sans / Tahoma
\starttypescript [sans] [chalkboard,comicsans,tahoma]
@@ -208,6 +529,16 @@
\definefontsynonym [\typescriptprefix{n:\typescripttwo}-Bold] [name:\typescriptprefix{f:\typescripttwo}bold] [features=default]
\stoptypescript
+\starttypescript [sans] [chalkboard,comicsans,lucidagrande,tahoma]
+ \setups[font:fallback:sans]
+ \definefontsynonym [Sans] [\typescriptprefix{n:\typescripttwo}-Regular] [features=default]
+ \definefontsynonym [SansBold] [\typescriptprefix{n:\typescripttwo}-Bold] [features=default]
+\stoptypescript
+
+\starttypescript [chalkboard,comicsans,tahoma]
+ \definetypeface [\typescriptone] [ss] [sans] [\typescriptone] [default]
+\stoptypescript
+
% Cochin / Courier New / Georgia / Times New Roman / Trebuchet / Verdana
\starttypescript [serif,sans,mono] [cochin,georgia,timesnewroman,trebuchet,verdana,couriernew]
@@ -217,4 +548,46 @@
\definefontsynonym [\typescriptprefix{n:\typescripttwo}-BoldItalic] [name:\typescriptprefix{f:\typescripttwo}bolditalic] [features=default]
\stoptypescript
+\starttypescript [serif] [cochin,georgia,timesnewroman]
+ \setups[font:fallback:serif]
+ \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]
+\stoptypescript
+
+\starttypescript [cochin,georgia,timesnewroman]
+ \definetypeface [\typescriptone] [rm] [serif] [\typescriptone] [default]
+\stoptypescript
+
+% Courier New
+
+% \starttypescript [mono] [couriernew]
+% \setups[font:fallback:mono]
+% \definefontsynonym [Mono] [\typescriptprefix{n:\typescripttwo}-Regular] [features=default]
+% \definefontsynonym [MonoItalic] [\typescriptprefix{n:\typescripttwo}-Italic] [features=default]
+% \definefontsynonym [MonoBold] [\typescriptprefix{n:\typescripttwo}-Bold] [features=default]
+% \definefontsynonym [MonoBoldItalic] [\typescriptprefix{n:\typescripttwo}-BoldItalic] [features=default]
+% \stoptypescript
+
+% \starttypescript [couriernew]
+% \definetypeface [\typescriptone] [tt] [mono] [\typescriptone] [default]
+% \stoptypescript
+
+% Trebuchet / Verdana
+
+% \starttypescript [sans] [trebuchet,verdana]
+% \setups[font:fallback:sans]
+% \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]
+% \stoptypescript
+
+% \starttypescript [trebuchet,verdana]
+% \definetypeface [\typescriptone] [ss] [sans] [\typescriptone] [default]
+% \stoptypescript
+
+\stoptypescriptcollection
+
\endinput
diff --git a/Master/texmf-dist/tex/context/base/type-mac.tex b/Master/texmf-dist/tex/context/base/type-mac.tex
deleted file mode 100644
index 04ac6139b2f..00000000000
--- a/Master/texmf-dist/tex/context/base/type-mac.tex
+++ /dev/null
@@ -1,434 +0,0 @@
-%D \module
-%D [ file=type-mac,
-%D version=2009.03.10,
-%D title=\CONTEXT\ Typescript Macros,
-%D subtitle=Mac OS X Definitions,
-%D author=Wolfgang Schuster,
-%D date=\currentdate,
-%D copyright=Wolfgang Schuster]
-%C
-%C This module is part of the \CONTEXT\ macro||package. See
-%C mreadme.pdf for details.
-
-\starttypescriptcollection [macosx]
-
-\definetypescriptprefix [n:andalemono] [AndaleMono]
-\definetypescriptprefix [n:chalkboard] [Chalkboard]
-\definetypescriptprefix [n:cochin] [Cochin]
-\definetypescriptprefix [n:comicsans] [ComicSans]
-\definetypescriptprefix [n:couriernew] [CourierNew]
-\definetypescriptprefix [n:georgia] [Georgia]
-\definetypescriptprefix [n:lucidagrande] [LucidaGrande]
-\definetypescriptprefix [n:monaco] [Monaco]
-\definetypescriptprefix [n:tahoma] [Tahoma]
-\definetypescriptprefix [n:timesnewroman] [TimesNewRoman]
-\definetypescriptprefix [n:trebuchet] [Trebuchet]
-\definetypescriptprefix [n:verdana] [Verdana]
-
-% American Typewriter
-
-\starttypescript [serif] [americantypewriter-light-condensed]
- \setups[font:fallback:serif]
- \definefontsynonym [Serif] [AmericanTypewriter-LightCond] [features=default]
- \definefontsynonym [SerifBold] [AmericanTypewriter-Condensed] [features=default]
-\stoptypescript
-
-\starttypescript [serif] [americantypewriter-condensed]
- \setups[font:fallback:serif]
- \definefontsynonym [Serif] [AmericanTypewriter-Condensed] [features=default]
- \definefontsynonym [SerifBold] [AmericanTypewriter-BoldCond] [features=default]
-\stoptypescript
-
-\starttypescript [serif] [americantypewriter-light]
- \setups[font:fallback:serif]
- \definefontsynonym [Serif] [AmericanTypewriter-Light] [features=default]
- \definefontsynonym [SerifBold] [AmericanTypewriter-Regular] [features=default]
-\stoptypescript
-
-\starttypescript [serif] [americantypewriter]
- \setups[font:fallback:serif]
- \definefontsynonym [Serif] [AmericanTypewriter-Regular] [features=default]
- \definefontsynonym [SerifBold] [AmericanTypewriter-Bold] [features=default]
-\stoptypescript
-
-\starttypescript [americantypewriter-light-condensed,americantypewriter-condensed,americantypewriter-light,americantypewriter]
- \definetypeface [\typescriptone] [rm] [serif] [\typescriptone] [default]
-\stoptypescript
-
-% Arial / Arial Narrow / Arial Rounded / Arial Unicode
-
-\starttypescript [sans] [arial-narrow,arial-condensed]
- \setups[font:fallback:sans]
- \definefontsynonym [Sans] [Arial-Condensed] [features=default]
- \definefontsynonym [SansItalic] [Arial-ItalicCond] [features=default]
- \definefontsynonym [SansBold] [Arial-BoldCond] [features=default]
- \definefontsynonym [SansBoldItalic] [Arial-BoldItalicCond] [features=default]
-\stoptypescript
-
-\starttypescript [sans] [arial]
- \setups[font:fallback:sans]
- \definefontsynonym [Sans] [Arial-Regular] [features=default]
- \definefontsynonym [SansItalic] [Arial-Italic] [features=default]
- \definefontsynonym [SansBold] [Arial-Bold] [features=default]
- \definefontsynonym [SansBoldItalic] [Arial-BoldItalic] [features=default]
-\stoptypescript
-
-\starttypescript [sans] [arial-rounded]
- \setups[font:fallback:sans]
- \definefontsynonym [Sans] [Arial-Rounded] [features=default]
-\stoptypescript
-
-\starttypescript [sans] [arial-unicode]
- \setups[font:fallback:sans]
- \definefontsynonym [Sans] [Arial-Unicode] [features=default]
-\stoptypescript
-
-\starttypescript [arial-narrow,arial-condensed,arial,arial-rounded,arial-unicode]
- \definetypeface [\typescriptone] [ss] [sans] [\typescriptone] [default]
-\stoptypescript
-
-% Baskerville
-
-\starttypescript [serif] [baskerville]
- \setups[font:fallback:serif]
- \definefontsynonym [Serif] [Baskerville-Regular] [features=default]
- \definefontsynonym [SerifItalic] [Baskerville-Italic] [features=default]
- \definefontsynonym [SerifBold] [Baskerville-Medium] [features=default]
- \definefontsynonym [SerifBoldItalic] [Baskerville-MediumItalic] [features=default]
-\stoptypescript
-
-\starttypescript [baskerville]
- \definetypeface [\typescriptone] [rm] [serif] [\typescriptone] [default]
-\stoptypescript
-
-% Big Caslon
-
-\starttypescript [serif] [caslon,bigcaslon]
- \setups[font:fallback:serif]
- \definefontsynonym [Serif] [BigCaslon-Medium] [features=default]
-\stoptypescript
-
-\starttypescript [caslon,bigcaslon]
- \definetypeface [\typescriptone] [rm] [serif] [\typescriptone] [default]
-\stoptypescript
-
-% Copperplate
-
-\starttypescript [sans] [copperplate-light]
- \setups[font:fallback:sans]
- \definefontsynonym [Sans] [Copperplate-Light] [features=default]
- \definefontsynonym [SansBold] [Copperplate-Regular] [features=default]
-\stoptypescript
-
-\starttypescript [sans] [copperplate]
- \setups[font:fallback:sans]
- \definefontsynonym [Sans] [Copperplate-Regular] [features=default]
- \definefontsynonym [SansBold] [Copperplate-Bold] [features=default]
-\stoptypescript
-
-\starttypescript [copperplate-light,copperplate]
- \definetypeface [\typescriptone] [ss] [sans] [\typescriptone] [default]
-\stoptypescript
-
-% Courier New
-
-\starttypescript [mono] [couriernew]
- \setups[font:fallback:mono]
- \definefontsynonym [Mono] [\typescriptprefix{n:\typescripttwo}-Regular] [features=default]
- \definefontsynonym [MonoItalic] [\typescriptprefix{n:\typescripttwo}-Italic] [features=default]
- \definefontsynonym [MonoBold] [\typescriptprefix{n:\typescripttwo}-Bold] [features=default]
- \definefontsynonym [MonoBoldItalic] [\typescriptprefix{n:\typescripttwo}-BoldItalic] [features=default]
-\stoptypescript
-
-\starttypescript [couriernew]
- \definetypeface [\typescriptone] [tt] [mono] [\typescriptone] [default]
-\stoptypescript
-
-% Futura
-
-\starttypescript [sans] [futura-condensed]
- \setups[font:fallback:sans]
- \definefontsynonym [Sans] [Futura-MediumCond] [features=default]
- \definefontsynonym [SansBold] [Futura-BoldCond] [features=default]
-\stoptypescript
-
-\starttypescript [sans] [futura]
- \setups[font:fallback:sans]
- \definefontsynonym [Sans] [Futura-Medium] [features=default]
- \definefontsynonym [SansItalic] [Futura-MediumItalic] [features=default]
-\stoptypescript
-
-\starttypescript [futura-condensed,futura]
- \definetypeface [\typescriptone] [ss] [sans] [\typescriptone] [default]
-\stoptypescript
-
-% Gill Sans
-
-\starttypescript [sans] [gillsans-light]
- \setups[font:fallback:sans]
- \definefontsynonym [Sans] [GillSans-Light] [features=default]
- \definefontsynonym [SansItalic] [GillSans-LightItalic] [features=default]
- \definefontsynonym [SansBold] [GillSans-Regular] [features=default]
- \definefontsynonym [SansBoldItalic] [GillSans-Italic] [features=default]
-\stoptypescript
-
-\starttypescript [sans] [gillsans]
- \setups[font:fallback:sans]
- \definefontsynonym [Sans] [GillSans-Regular] [features=default]
- \definefontsynonym [SansItalic] [GillSans-Italic] [features=default]
- \definefontsynonym [SansBold] [GillSans-Bold] [features=default]
- \definefontsynonym [SansBoldItalic] [GillSans-BoldItalic] [features=default]
-\stoptypescript
-
-\starttypescript [gillsans-light,gillsans]
- \definetypeface [\typescriptone] [ss] [sans] [\typescriptone] [default]
-\stoptypescript
-
-% Helvetica Neuse
-
-\starttypescript [sans] [helvetica-neue-ultralight]
- \setups[font:fallback:sans]
- \definefontsynonym [Sans] [HelveticaNeue-UltraLight] [features=default]
- \definefontsynonym [SansItalic] [HelveticaNeue-UltraLightItalic] [features=default]
- \definefontsynonym [SansBold] [HelveticaNeue-Light] [features=default]
- \definefontsynonym [SansBoldItalic] [HelveticaNeue-LightItalic] [features=default]
-\stoptypescript
-
-\starttypescript [sans] [helvetica-neue-light]
- \setups[font:fallback:sans]
- \definefontsynonym [Sans] [HelveticaNeue-Light] [features=default]
- \definefontsynonym [SansItalic] [HelveticaNeue-LightItalic] [features=default]
- \definefontsynonym [SansBold] [HelveticaNeue-Regular] [features=default]
- \definefontsynonym [SansBoldItalic] [HelveticaNeue-Italic] [features=default]
-\stoptypescript
-
-\starttypescript [sans] [helvetica-neue]
- \setups[font:fallback:sans]
- \definefontsynonym [Sans] [HelveticaNeue-Regular] [features=default]
- \definefontsynonym [SansItalic] [HelveticaNeue-Italic] [features=default]
- \definefontsynonym [SansBold] [HelveticaNeue-Bold] [features=default]
- \definefontsynonym [SansBoldItalic] [HelveticaNeue-BoldItalic] [features=default]
-\stoptypescript
-
-\starttypescript [sans] [helvetica-neue-boldcondensed]
- \setups[font:fallback:sans]
- \definefontsynonym [Sans] [HelveticaNeue-BoldCond] [features=default]
- \definefontsynonym [SansBold] [HelveticaNeue-BlackCond] [features=default]
-\stoptypescript
-
-\starttypescript [helvetica-neue-ultralight,helvetica-neue-light,helvetica-neue,helvetica-neue-boldcondensed]
- \definetypeface [\typescriptone] [ss] [sans] [\typescriptone] [default]
-\stoptypescript
-
-% Hiragino Mincho
-
-\starttypescript [serif] [hiragino-mincho]
- \setups[font:fallback:serif]
- \definefontsynonym [Serif] [HiraginoMinchoPro-Regular] [features=japanese]
- \definefontsynonym [SerifBold] [HiraginoMinchoPro-Bold] [features=japanese]
-\stoptypescript
-
-% \starttypescript [serif] [hiragino-mincho]
-% \setups[font:fallback:serif]
-% \definefontsynonym [Serif] [HiraginoMinchoProN-Regular] [features=japanese]
-% \definefontsynonym [SerifBold] [HiraginoMinchoProN-Bold] [features=japanese]
-% \stoptypescript
-
-\starttypescript [hiragino-mincho]
- \definetypeface [\typescriptone] [rm] [serif] [\typescriptone] [default]
-\stoptypescript
-
-% Hiragino Maru
-
-\starttypescript [sans] [hiragino-maru]
- \setups[font:fallback:sans]
- \definefontsynonym [Sans] [HiraginoMaruGothicPro-Regular] [features=japanese]
-\stoptypescript
-
-% \starttypescript [sans] [hiragino-maru]
-% \setups[font:fallback:sans]
-% \definefontsynonym [Sans] [HiraginoMaruGothicProN-Regular] [features=japanese]
-% \stoptypescript
-
-\starttypescript [hiragino-maru]
- \definetypeface [\typescriptone] [ss] [sans] [\typescriptone] [default]
-\stoptypescript
-
-% Hiragino Kaku
-
-\starttypescript [sans] [hiragino-kaku]
- \setups[font:fallback:sans]
- \definefontsynonym [Sans] [HiraginoKakuGothicPro-Regular] [features=japanese]
- \definefontsynonym [SansBold] [HiraginoKakuGothicPro-Bold] [features=japanese]
-\stoptypescript
-
-% \starttypescript [sans] [hiragino-kaku]
-% \setups[font:fallback:sans]
-% \definefontsynonym [Sans] [HiraginoKakuGothicProN-Regular] [features=japanese]
-% \definefontsynonym [SansBold] [HiraginoKakuGothicProN-Bold] [features=japanese]
-% \stoptypescript
-
-\starttypescript [hiragino-kaku]
- \definetypeface [\typescriptone] [ss] [sans] [\typescriptone] [default]
-\stoptypescript
-
-% Hoefler Text
-
-\starttypescript [serif] [hoefler]
- \setups[font:fallback:serif]
- \definefontsynonym [Serif] [HoeflerText-Regular] [features=default]
- \definefontsynonym [SerifItalic] [HoeflerText-Italic] [features=default]
- \definefontsynonym [SerifBold] [HoeflerText-Black] [features=default]
- \definefontsynonym [SerifBoldItalic] [HoeflerText-BlackItalic] [features=default]
-\stoptypescript
-
-\starttypescript [hoefler]
- \definetypeface [\typescriptone] [rm] [serif] [\typescriptone] [default]
-\stoptypescript
-
-% Impact
-
-\starttypescript [sans] [impact]
- \setups[font:fallback:sans]
- \definefontsynonym [Sans] [Impact-Regular] [features=default]
-\stoptypescript
-
-\starttypescript [impact]
- \definetypeface [\typescriptone] [ss] [sans] [\typescriptone] [default]
-\stoptypescript
-
-% Andale Mono / Monaco
-
-\starttypescript [mono] [andalemono,monaco]
- \setups[font:fallback:mono]
- \definefontsynonym [Mono] [\typescriptprefix{n:\typescripttwo}-Regular] [features=default]
-\stoptypescript
-
-\starttypescript [andalemono,monaco]
- \definetypeface [\typescriptone] [tt] [mono] [\typescriptone] [default]
-\stoptypescript
-
-% Optima
-
-\starttypescript [sans] [optima]
- \setups[font:fallback:sans]
- \definefontsynonym [Sans] [Optima-Regular] [features=default]
- \definefontsynonym [SansItalic] [Optima-Italic] [features=default]
- \definefontsynonym [SansBold] [Optima-Bold] [features=default]
- \definefontsynonym [SansBoldItalic] [Optima-BoldItalic] [features=default]
-\stoptypescript
-
-\starttypescript [sans] [optima-bold]
- \setups[font:fallback:sans]
- \definefontsynonym [Sans] [Optima-Bold] [features=default]
- \definefontsynonym [SansItalic] [Optima-BoldItalic] [features=default]
- \definefontsynonym [SansBold] [Optima-Black] [features=default]
-\stoptypescript
-
-\starttypescript [optima,optima-bold]
- \definetypeface [\typescriptone] [ss] [sans] [\typescriptone] [default]
-\stoptypescript
-
-% Papyrus
-
-\starttypescript [sans] [papyrus]
- \setups[font:fallback:sans]
- \definefontsynonym [Sans] [Papyrus-Regular] [features=default]
-\stoptypescript
-
-\starttypescript [papyrus]
- \definetypeface [\typescriptone] [ss] [sans] [\typescriptone] [default]
-\stoptypescript
-
-% STFangsong
-
-\starttypescript [serif] [stfangsong]
- \setups[font:fallback:sans]
- \definefontsynonym [Serif] [STFangsong-Regular] [features=chinese]
-\stoptypescript
-
-\starttypescript [stfangsong]
- \definetypeface [\typescriptone] [rm] [serif] [\typescriptone] [default]
-\stoptypescript
-
-% STHeiti
-
-\starttypescript [sans] [stheiti]
- \setups[font:fallback:sans]
- \definefontsynonym [Sans] [STXihei-Light] [features=chinese]
- \definefontsynonym [SansBold] [STKaiti-Regular] [features=chinese]
-\stoptypescript
-
-\starttypescript [stheiti]
- \definetypeface [\typescriptone] [ss] [sans] [\typescriptone] [default]
-\stoptypescript
-
-% STKaiti
-
-\starttypescript [serif] [stkaiti]
- \setups[font:fallback:sans]
- \definefontsynonym [Serif] [STKaiti-Regular] [features=chinese]
-\stoptypescript
-
-\starttypescript [stkaiti]
- \definetypeface [\typescriptone] [rm] [serif] [\typescriptone] [default]
-\stoptypescript
-
-% STSong
-
-\starttypescript [serif] [stsong]
- \setups[font:fallback:sans]
- \definefontsynonym [Serif] [STSong-Regular] [features=chinese]
-\stoptypescript
-
-\starttypescript [stsong]
- \definetypeface [\typescriptone] [rm] [serif] [\typescriptone] [default]
-\stoptypescript
-
-% Chalkboard / Comic Sans / Tahoma
-
-\starttypescript [sans] [chalkboard,comicsans,lucidagrande,tahoma]
- \setups[font:fallback:sans]
- \definefontsynonym [Sans] [\typescriptprefix{n:\typescripttwo}-Regular] [features=default]
- \definefontsynonym [SansBold] [\typescriptprefix{n:\typescripttwo}-Bold] [features=default]
-\stoptypescript
-
-\starttypescript [chalkboard,comicsans,tahoma]
- \definetypeface [\typescriptone] [ss] [sans] [\typescriptone] [default]
-\stoptypescript
-
-% Cochin / Georgia / Times New Roman
-
-\starttypescript [serif] [cochin,georgia,timesnewroman]
- \setups[font:fallback:serif]
- \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]
-\stoptypescript
-
-\starttypescript [cochin,georgia,timesnewroman]
- \definetypeface [\typescriptone] [rm] [serif] [\typescriptone] [default]
-\stoptypescript
-
-% Trebuchet / Verdana
-
-\starttypescript [sans] [trebuchet,verdana]
- \setups[font:fallback:sans]
- \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]
-\stoptypescript
-
-\starttypescript [trebuchet,verdana]
- \definetypeface [\typescriptone] [ss] [sans] [\typescriptone] [default]
-\stoptypescript
-
-\stoptypescriptcollection
-
-% XeTeX / LuaTeX font names
-
-\loadmarkfile{type-mac}
-
-\endinput
diff --git a/Master/texmf-dist/tex/context/base/type-msw.mkii b/Master/texmf-dist/tex/context/base/type-msw.mkii
new file mode 100644
index 00000000000..26ec190cbee
--- /dev/null
+++ b/Master/texmf-dist/tex/context/base/type-msw.mkii
@@ -0,0 +1 @@
+\input type-win.mkii \endinput % could be a file synonym
diff --git a/Master/texmf-dist/tex/context/base/type-msw.mkiv b/Master/texmf-dist/tex/context/base/type-msw.mkiv
new file mode 100644
index 00000000000..2e741f7a04b
--- /dev/null
+++ b/Master/texmf-dist/tex/context/base/type-msw.mkiv
@@ -0,0 +1 @@
+\input type-win.mkiv \endinput % could be a file synonym
diff --git a/Master/texmf-dist/tex/context/base/type-one.mkii b/Master/texmf-dist/tex/context/base/type-one.mkii
index b456d7e6438..efe31ed2114 100644
--- a/Master/texmf-dist/tex/context/base/type-one.mkii
+++ b/Master/texmf-dist/tex/context/base/type-one.mkii
@@ -24,1161 +24,2724 @@
% \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] [ec,texnansi,cs,qx,rm,t5,t2a,t2b,t2c,l7x]
- \definetypeface [postscript] [rm] [serif] [times] [default] [encoding=\typescripttwo]
- \definetypeface [postscript] [ss] [sans] [helvetica] [default] [encoding=\typescripttwo,rscale=0.9]
- \definetypeface [postscript] [tt] [mono] [courier] [default] [encoding=\typescripttwo,rscale=1.1]
- \definetypeface [postscript] [mm] [math] [times] [default] [encoding=\typescripttwo]
- \quittypescriptscanning
-\stoptypescript
-
-\starttypescript [times,termes] [ec,texnansi,cs,qx,rm,t5,t2a,t2b,t2c,l7x]
- \definetypeface [\typescriptone] [rm] [serif] [\typescriptone] [default] [encoding=\typescripttwo]
- \definetypeface [\typescriptone] [ss] [sans] [helvetica] [default] [encoding=\typescripttwo,rscale=0.9]
- \definetypeface [\typescriptone] [tt] [mono] [modern] [default] [encoding=\typescripttwo,rscale=1.05]
- \definetypeface [\typescriptone] [mm] [math] [times] [default] [encoding=\typescripttwo]
- \quittypescriptscanning
-\stoptypescript
-
-\starttypescript [palatino,pagella] [ec,texnansi,cs,qx,rm,t5,t2a,t2b,t2c,l7x]
- \definetypeface [\typescriptone] [rm] [serif] [\typescriptone] [default] [encoding=\typescripttwo]
- \definetypeface [\typescriptone] [ss] [sans] [modern] [default] [encoding=\typescripttwo,rscale=1.075]
- \definetypeface [\typescriptone] [tt] [mono] [modern] [default] [encoding=\typescripttwo,rscale=1.075]
- \definetypeface [\typescriptone] [mm] [math] [palatino] [default] [encoding=default]
- \quittypescriptscanning
-\stoptypescript
-
-\starttypescript [fourier] [ec]
- \definetypeface [fourier] [rm] [serif] [fourier] [default] [encoding=ec]
- \definetypeface [fourier] [ss] [sans] [modern] [default] [encoding=ec,rscale=1.07]
- \definetypeface [fourier] [tt] [mono] [modern] [default] [encoding=ec,rscale=1.07]
- \definetypeface [fourier] [mm] [math] [fourier] [default] [encoding=default]
- \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,t5,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 [schoolbook,schola] [ec,texnansi,cs,qx,rm,t5,t2a,t2b,t2c,l7x]
- \definetypeface [\typescriptone] [rm] [serif] [\typescriptone] [default] [encoding=\typescripttwo]
- \definetypeface [\typescriptone] [ss] [sans] [modern] [default] [encoding=\typescripttwo]
- \definetypeface [\typescriptone] [tt] [mono] [modern] [default] [encoding=\typescripttwo]
- \definetypeface [\typescriptone] [mm] [math] [modern] [default] [encoding=default]
- \quittypescriptscanning
-\stoptypescript
-
-\starttypescript [bookman,bonum] [ec,texnansi,cs,qx,rm,t5,t2a,t2b,t2c,l7x]
- \definetypeface [\typescriptone] [rm] [serif] [\typescriptone] [default] [encoding=\typescripttwo]
- \definetypeface [\typescriptone] [ss] [sans] [modern] [default] [encoding=\typescripttwo]
- \definetypeface [\typescriptone] [tt] [mono] [modern] [default] [encoding=\typescripttwo]
- \definetypeface [\typescriptone] [mm] [math] [modern] [default] [encoding=default]
- \quittypescriptscanning
-\stoptypescript
-
-\starttypescript [chancery,chorus] [ec,texnansi,cs,qx,rm,t5,t2a,t2b,t2c,l7x]
- \definetypeface [\typescriptone] [rm] [serif] [\typescriptone] [default] [encoding=\typescripttwo]
- \definetypeface [\typescriptone] [ss] [sans] [modern] [default] [encoding=\typescripttwo]
- \definetypeface [\typescriptone] [tt] [mono] [modern] [default] [encoding=\typescripttwo]
- \definetypeface [\typescriptone] [mm] [math] [modern] [default] [encoding=default]
- \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
-
-\starttypescript [helvetica,heros] [ec,texnansi,cs,qx,rm,t5,t2a,t2b,t2c,l7x]
- \definetypeface [\typescriptone] [ss] [sans] [\typescriptone] [default] [encoding=\typescripttwo]
- \definetypeface [\typescriptone] [rm] [serif] [modern] [default] [encoding=\typescripttwo,rscale=1.15]
- \definetypeface [\typescriptone] [tt] [mono] [modern] [default] [encoding=\typescripttwo,rscale=1.15]
- \definetypeface [\typescriptone] [mm] [math] [modern] [default] [encoding=default,rscale=1.15]
- \quittypescriptscanning
-\stoptypescript
-
-\starttypescript [avantgarde,adventor] [ec,texnansi,cs,qx,rm,t5,t2a,t2b,t2c,l7x]
- \definetypeface [\typescriptone] [ss] [sans] [adventor] [default] [encoding=\typescripttwo]
- \definetypeface [\typescriptone] [rm] [serif] [modern] [default] [encoding=\typescripttwo,rscale=1.15]
- \definetypeface [\typescriptone] [tt] [mono] [modern] [default] [encoding=\typescripttwo,rscale=1.15]
- \definetypeface [\typescriptone] [mm] [math] [modern] [default] [encoding=default]
- \quittypescriptscanning
-\stoptypescript
-
-\starttypescript [courier,cursor] [ec,texnansi,cs,qx,rm,t5,t2a,t2b,t2c,l7x]
- \definetypeface [\typescriptone] [tt] [mono] [\typescriptone] [default] [encoding=\typescripttwo]
- \definetypeface [\typescriptone] [rm] [serif] [modern] [default] [encoding=\typescripttwo]
- \definetypeface [\typescriptone] [ss] [sans] [modern] [default] [encoding=\typescripttwo]
- \definetypeface [\typescriptone] [mm] [math] [modern] [default] [encoding=default]
- \quittypescriptscanning
-\stoptypescript
+\starttypescriptcollection[latinmodern]
+
+ \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]
+ \usemathcollection[default]
+ \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 [Serif] [\typescriptprefix{c:\typescriptthree}rm1000] [encoding=\typescriptthree]
+ \definefontsynonym [SerifItalic] [\typescriptprefix{c:\typescriptthree}ti1000] [encoding=\typescriptthree]
+ \definefontsynonym [SerifSlanted] [\typescriptprefix{c:\typescriptthree}sl1000] [encoding=\typescriptthree]
+ \definefontsynonym [SerifBold] [\typescriptprefix{c:\typescriptthree}bx1000] [encoding=\typescriptthree]
+ \definefontsynonym [SerifBoldItalic] [\typescriptprefix{c:\typescriptthree}bi1000] [encoding=\typescriptthree]
+ \definefontsynonym [SerifBoldSlanted] [\typescriptprefix{c:\typescriptthree}bl1000] [encoding=\typescriptthree]
+ \definefontsynonym [SerifCaps] [\typescriptprefix{c:\typescriptthree}cc1000] [encoding=\typescriptthree]
+ \definefontsynonym [SerifCapsSlanted] [\typescriptprefix{c:\typescriptthree}sc1000] [encoding=\typescriptthree]
+ \stoptypescript
+
+ \starttypescript [sans] [computer-modern] [t2a,t2b,t2c,x2]
+ \definefontsynonym [Sans] [\typescriptprefix{c:\typescriptthree}ss1000] [encoding=\typescriptthree]
+ \definefontsynonym [SansItalic] [\typescriptprefix{c:\typescriptthree}si1000] [encoding=\typescriptthree]
+ \definefontsynonym [SansSlanted] [\typescriptprefix{c:\typescriptthree}si1000] [encoding=\typescriptthree]
+ \definefontsynonym [SansBold] [\typescriptprefix{c:\typescriptthree}sx1000] [encoding=\typescriptthree]
+ \definefontsynonym [SansBoldItalic] [\typescriptprefix{c:\typescriptthree}so1000] [encoding=\typescriptthree]
+ \definefontsynonym [SansBoldSlanted] [\typescriptprefix{c:\typescriptthree}so1000] [encoding=\typescriptthree]
+ \definefontsynonym [SansCaps] [\typescriptprefix{c:\typescriptthree}ss1000] [encoding=\typescriptthree]
+ \definefontsynonym [SansCapsSlanted] [\typescriptprefix{c:\typescriptthree}si1000] [encoding=\typescriptthree]
+ \stoptypescript
+
+ \starttypescript [mono] [computer-modern] [t2a,t2b,t2c,x2]
+ \definefontsynonym [Mono] [\typescriptprefix{c:\typescriptthree}tt1000] [encoding=\typescriptthree]
+ \definefontsynonym [MonoItalic] [\typescriptprefix{c:\typescriptthree}it1000] [encoding=\typescriptthree]
+ \definefontsynonym [MonoSlanted] [\typescriptprefix{c:\typescriptthree}st1000] [encoding=\typescriptthree]
+ \definefontsynonym [MonoBold] [\typescriptprefix{c:\typescriptthree}tt1000] [encoding=\typescriptthree]
+ \definefontsynonym [MonoBoldItalic] [\typescriptprefix{c:\typescriptthree}it1000] [encoding=\typescriptthree]
+ \definefontsynonym [MonoBoldSlanted] [\typescriptprefix{c:\typescriptthree}st1000] [encoding=\typescriptthree]
+ \definefontsynonym [MonoCaps] [\typescriptprefix{c:\typescriptthree}tc1000] [encoding=\typescriptthree]
+ \definefontsynonym [MonoCapsSlanted] [\typescriptprefix{c:\typescriptthree}tc1000] [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
+
+ \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
+
+ \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
+
+ \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 [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 [serif] [simple] [name] % bad, will be changed but in sycn with manuals that use it
+ \definefontsynonym [Simple] [cmvtt10]
+ \setupfontsynonym [Simple] [handling=pure]
+ \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]
- \usemathcollection[default]
- \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 [Serif] [\typescriptprefix{c:\typescriptthree}rm1000] [encoding=\typescriptthree]
- \definefontsynonym [SerifItalic] [\typescriptprefix{c:\typescriptthree}ti1000] [encoding=\typescriptthree]
- \definefontsynonym [SerifSlanted] [\typescriptprefix{c:\typescriptthree}sl1000] [encoding=\typescriptthree]
- \definefontsynonym [SerifBold] [\typescriptprefix{c:\typescriptthree}bx1000] [encoding=\typescriptthree]
- \definefontsynonym [SerifBoldItalic] [\typescriptprefix{c:\typescriptthree}bi1000] [encoding=\typescriptthree]
- \definefontsynonym [SerifBoldSlanted] [\typescriptprefix{c:\typescriptthree}bl1000] [encoding=\typescriptthree]
- \definefontsynonym [SerifCaps] [\typescriptprefix{c:\typescriptthree}cc1000] [encoding=\typescriptthree]
- \definefontsynonym [SerifCapsSlanted] [\typescriptprefix{c:\typescriptthree}sc1000] [encoding=\typescriptthree]
-\stoptypescript
-
-\starttypescript [sans] [computer-modern] [t2a,t2b,t2c,x2]
- \definefontsynonym [Sans] [\typescriptprefix{c:\typescriptthree}ss1000] [encoding=\typescriptthree]
- \definefontsynonym [SansItalic] [\typescriptprefix{c:\typescriptthree}si1000] [encoding=\typescriptthree]
- \definefontsynonym [SansSlanted] [\typescriptprefix{c:\typescriptthree}si1000] [encoding=\typescriptthree]
- \definefontsynonym [SansBold] [\typescriptprefix{c:\typescriptthree}sx1000] [encoding=\typescriptthree]
- \definefontsynonym [SansBoldItalic] [\typescriptprefix{c:\typescriptthree}so1000] [encoding=\typescriptthree]
- \definefontsynonym [SansBoldSlanted] [\typescriptprefix{c:\typescriptthree}so1000] [encoding=\typescriptthree]
- \definefontsynonym [SansCaps] [\typescriptprefix{c:\typescriptthree}ss1000] [encoding=\typescriptthree]
- \definefontsynonym [SansCapsSlanted] [\typescriptprefix{c:\typescriptthree}si1000] [encoding=\typescriptthree]
-\stoptypescript
-
-\starttypescript [mono] [computer-modern] [t2a,t2b,t2c,x2]
- \definefontsynonym [Mono] [\typescriptprefix{c:\typescriptthree}tt1000] [encoding=\typescriptthree]
- \definefontsynonym [MonoItalic] [\typescriptprefix{c:\typescriptthree}it1000] [encoding=\typescriptthree]
- \definefontsynonym [MonoSlanted] [\typescriptprefix{c:\typescriptthree}st1000] [encoding=\typescriptthree]
- \definefontsynonym [MonoBold] [\typescriptprefix{c:\typescriptthree}tt1000] [encoding=\typescriptthree]
- \definefontsynonym [MonoBoldItalic] [\typescriptprefix{c:\typescriptthree}it1000] [encoding=\typescriptthree]
- \definefontsynonym [MonoBoldSlanted] [\typescriptprefix{c:\typescriptthree}st1000] [encoding=\typescriptthree]
- \definefontsynonym [MonoCaps] [\typescriptprefix{c:\typescriptthree}tc1000] [encoding=\typescriptthree]
- \definefontsynonym [MonoCapsSlanted] [\typescriptprefix{c:\typescriptthree}tc1000] [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]
- \usemathcollection[eul]
- \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]
- \usemathcollection[eul]
- \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]
- \usemathcollection[default]
-\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]
- \usemathcollection[fou]
- \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
-
-% 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]
- \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] [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]
- \usemathcollection[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-RegularItalic] [Kurier-Italic]
- \definefontsynonym[Kurier-Bold] [\typescriptthree-kurierb] [encoding=\typescriptthree]
- \definefontsynonym[Kurier-BoldItalic] [\typescriptthree-kurierbi] [encoding=\typescriptthree]
- \definefontsynonym[Kurier-Light] [\typescriptthree-kurierl] [encoding=\typescriptthree]
- \definefontsynonym[Kurier-LightItalic] [\typescriptthree-kurierli] [encoding=\typescriptthree]
- \definefontsynonym[Kurier-Medium] [\typescriptthree-kurierm] [encoding=\typescriptthree]
- \definefontsynonym[Kurier-MediumItalic] [\typescriptthree-kuriermi] [encoding=\typescriptthree]
- \definefontsynonym[Kurier-Heavy] [\typescriptthree-kurierh] [encoding=\typescriptthree]
- \definefontsynonym[Kurier-HeavyItalic] [\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]
- \usemathcollection[default]
- \loadmapfile[kurier-rm.map]
- \loadmapfile[kurier-mi.map]
- \loadmapfile[kurier-sy.map]
- \loadmapfile[kurier-ex.map]
-\stoptypescript
-
-\starttypescript [kurier-light,kurier,kurier-medium] [texnansi,ec,qx,t5]
- \definetypeface[\typescriptone][ss][sans] [\typescriptone] [default][encoding=\typescripttwo]
- \definetypeface[\typescriptone][rm][serif][modern] [default][encoding=\typescripttwo]
- \definetypeface[\typescriptone][tt][mono] [modern] [default][encoding=\typescripttwo,rscale=1.05]
- \definetypeface[\typescriptone][mm][math] [\typescriptone] [default][encoding=\typescripttwo,text=ss]
- \quittypescriptscanning
-\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
-
-%
-% TeXGyre
-%
-% We now use tex-gyre fonts by default ...
-
-\definetypescriptprefix [f:pagella] [pl] \definetypescriptprefix [f:palatino] [pl]
-\definetypescriptprefix [f:termes] [tm] \definetypescriptprefix [f:times] [tm]
-\definetypescriptprefix [f:heros] [hv] \definetypescriptprefix [f:helvetica] [hv]
-\definetypescriptprefix [f:bonum] [bk] \definetypescriptprefix [f:bookman] [bk]
-\definetypescriptprefix [f:schola] [cs] \definetypescriptprefix [f:schoolbook] [cs]
-\definetypescriptprefix [f:adventor][ag] %definetypescriptprefix [f:adventor] [ag]
-\definetypescriptprefix [f:cursor] [cr] \definetypescriptprefix [f:courier] [cr]
-\definetypescriptprefix [f:chorus] [zc] \definetypescriptprefix [f:chancery] [zc] % not the full set
-
-\starttypescript [serif,sans,mono] [pagella,palatino,termes,times,adventor,bonum,bookman,cursor,courier,heros,helvetica,schola,schoolbook] [ec,texnansi,cs,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]
- \loadmapfile[q\typescriptprefix{f:\typescripttwo}-\typescriptthree.map]
-\stoptypescript
-
-\starttypescript [serif,sans,mono] [pagella,palatino,termes,times,adventor,bonum,bookman,cursor,courier,heros,helvetica,schola,schoolbook] [ec,texnansi,cs,qx,rm,t5,l7x]
- \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]
- \loadmapfile[q\typescriptprefix{f:\typescripttwo}-\typescriptthree.map]
-\stoptypescript
-
-\starttypescript [serif] [chorus,chancery] [ec,texnansi,cs,qx,rm,t5,t2a,t2b,t2c,l7x]
- \definefontsynonym [TeXGyreChorus-MediumItalic] [\typescriptthree-qzcmi] [encoding=\typescriptthree]
- \loadmapfile[qzc-\typescriptthree.map]
-\stoptypescript
-
-% bonus definitions
-
-% when these fonts are in tex live ...
-%
-% \definefontsynonym [Palatino-Caps] [TeXPalladioL-SC] [encoding=\typescriptthree]
-%
-% \starttypescript [serif] [palatino] [ec,texnansi]
-% \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]
- \usemathcollection[default]
- \loadmapfile[original-youngryu-px.map]
-\stoptypescript
-
-% Times Math (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]
- \usemathcollection[default]
- \loadmapfile[original-youngryu-tx.map]
-\stoptypescript
-
-%D These are just fallbacks in case anyone stil uses the old names (might also be removed?).
-
-%
-% TeXGyrePagella
-%
-\starttypescript [serif] [palatino]
- \definefontsynonym [Palatino] [TeXGyrePagella-Regular]
- \definefontsynonym [Palatino-Italic] [TeXGyrePagella-Italic]
- \definefontsynonym [Palatino-Bold] [TeXGyrePagella-Bold]
- \definefontsynonym [Palatino-BoldItalic] [TeXGyrePagella-BoldItalic]
- \definefontsynonym [Palatino-Slanted] [TeXGyrePagella-Italic]
- \definefontsynonym [Palatino-BoldSlanted] [TeXGyrePagella-BoldItalic]
- \definefontsynonym [Palatino-Caps] [TeXGyrePagella-Caps]
-\stoptypescript
-%
-% TeXGyreTermes
-%
-\starttypescript [serif] [times]
- \definefontsynonym [Times-Roman] [TeXGyreTermes-Regular]
- \definefontsynonym [Times-Italic] [TeXGyreTermes-Italic]
- \definefontsynonym [Times-Bold] [TeXGyreTermes-Bold]
- \definefontsynonym [Times-BoldItalic] [TeXGyreTermes-BoldItalic]
- \definefontsynonym [Times-Slanted] [TeXGyreTermes-Italic]
- \definefontsynonym [Times-BoldSlanted] [TeXGyreTermes-BoldItalic]
- \definefontsynonym [Times-Caps] [TeXGyreTermes-Caps]
-\stoptypescript
-%
-% TeXGyreHeros
-%
-\starttypescript [sans] [helvetica]
- \definefontsynonym [Helvetica] [TeXGyreHeros-Regular]
- \definefontsynonym [Helvetica-Oblique] [TeXGyreHeros-Italic]
- \definefontsynonym [Helvetica-Bold] [TeXGyreHeros-Bold]
- \definefontsynonym [Helvetica-BoldOblique] [TeXGyreHeros-BoldItalic]
- \definefontsynonym [Helvetica-Caps] [TeXGyreHeros-Caps]
-\stoptypescript
-%
-% TeXGyreBonum
-%
-\starttypescript [serif] [bookman]
- \definefontsynonym [Bookman-Light] [TeXGyreBonum-Regular]
- \definefontsynonym [Bookman-LightItalic] [TeXGyreBonum-Italic]
- \definefontsynonym [Bookman-DemiBold] [TeXGyreBonum-Bold]
- \definefontsynonym [Bookman-DemiBoldItalic] [TeXGyreBonum-BoldItalic]
- \definefontsynonym [Bookman-LightSlanted] [TeXGyreBonum-Italic]
- \definefontsynonym [Bookman-DemiBoldSlanted] [TeXGyreBonum-BoldItalic]
- \definefontsynonym [Bookman-Light-Caps] [TeXGyreBonum-Caps]
-\stoptypescript
-%
-% TeXGyreScola
-%
-\starttypescript [serif] [schoolbook]
- \definefontsynonym [Schoolbook-Roman] [TeXGyreScola-Regular]
- \definefontsynonym [Schoolbook-Italic] [TeXGyreScola-Italic]
- \definefontsynonym [Schoolbook-Bold] [TeXGyreScola-Bold]
- \definefontsynonym [Schoolbook-BoldItalic] [TeXGyreScola-BoldItalic]
- \definefontsynonym [Schoolbook-Slanted] [TeXGyreScola-Italic]
- \definefontsynonym [Schoolbook-BoldSlanted] [TeXGyreScola-BoldItalic]
- \definefontsynonym [Schoolbook-Roman-Caps] [TeXGyreScola-Caps]
-\stoptypescript
-%
-% TeXGyreAdventor
-%
-%
-% TeXGyreCursor
-%
-\starttypescript [mono] [courier]
- \definefontsynonym [Courier] [TeXGyreCursor-Regular]
- \definefontsynonym [Courier-Bold] [TeXGyreCursor-Bold]
- \definefontsynonym [Courier-Oblique] [TeXGyreCursor-Italic]
- \definefontsynonym [Courier-BoldOblique] [TeXGyreCursor-BoldItalic]
- \fakecontrolspace
-\stoptypescript
-%
-% TeXGyreChorus
-%
-\starttypescript [calligraphy] [chancery]
- \definefontsynonym [Chancery] [TeXGyreChorus-MediumItalic]
-\stoptypescript
+\starttypescriptcollection[concrete]
+
+ \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
+
+\stoptypescriptcollection
+
+\starttypescriptcollection[euler]
+
+ \starttypescript [math] [euler] [default]
+ \definefontsynonym [Euler-Roman] [zeurm10]
+ \definefontsynonym [Euler-Extension] [zeuex10]
+ \definefontsynonym [Euler-Symbol] [zeusm10]
+ \definefontsynonym [Euler-Fraktur] [eufm10]
+ \usemathcollection[eul]
+ \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]
+ \usemathcollection[eul]
+ \loadmapfile[original-ams-euler.map]
+ \stoptypescript
+
+ \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
+
+\stoptypescriptcollection
+
+\starttypescriptcollection[amssymbols]
+
+ \starttypescript [math] [modern,computer-modern,latin-modern,ams] [default]
+ \definefontsynonym [AMS-SymbolA] [msam10]
+ \definefontsynonym [AMS-SymbolB] [msbm10]
+ \usemathcollection[default]
+ \stoptypescript
+
+ \starttypescript [math] [modern,computer-modern,latin-modern,ams] [name]
+ \definefontsynonym [MathAlpha] [AMS-SymbolA]
+ \definefontsynonym [MathBeta] [AMS-SymbolB]
+ \stoptypescript
+
+\stoptypescriptcollection
+
+\starttypescriptcollection[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]
+ \usemathcollection[fou]
+ \loadmapfile[fourier.map]
+ \stoptypescript
+
+ \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
+
+ \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
+
+ \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
+
+ \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
+
+ \starttypescript [fourier] [ec]
+ \definetypeface [fourier] [rm] [serif] [fourier] [default] [encoding=ec]
+ \definetypeface [fourier] [ss] [sans] [modern] [default] [encoding=ec,rscale=1.07]
+ \definetypeface [fourier] [tt] [mono] [modern] [default] [encoding=ec,rscale=1.07]
+ \definetypeface [fourier] [mm] [math] [fourier] [default] [encoding=default]
+ \quittypescriptscanning
+ \stoptypescript
+
+\stoptypescriptcollection
+
+\starttypescriptcollection[antykwa]
+
+ % 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]
+ \usemathcollection[default]
+ \loadmapfile[antt-rm.map]
+ \loadmapfile[antt-mi.map]
+ \loadmapfile[antt-sy.map]
+ \loadmapfile[antt-ex.map]
+ \stoptypescript
+
+ \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
+
+ \starttypescript [antykwa-torunska] [texnansi,ec,8r,uc,t5,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
+
+ % Antykwa Poltawskiego (GUST)
+
+ \starttypescript [serif] [antykwa-poltawskiego,antykwa-poltawskiego-light] [ec,texnansi,qx,t5]
+
+ \definefontsynonym [AntykwaPoltawskiego-Condensed-Light] [\typescriptthree-antpl17] [encoding=\typescriptthree]
+ \definefontsynonym [AntykwaPoltawskiego-Condensed-LightItalic] [\typescriptthree-antpli17] [encoding=\typescriptthree]
+ \definefontsynonym [AntykwaPoltawskiego-Condensed-Regular] [\typescriptthree-antpr17] [encoding=\typescriptthree]
+ \definefontsynonym [AntykwaPoltawskiego-Condensed-Italic] [\typescriptthree-antpri17] [encoding=\typescriptthree]
+ \definefontsynonym [AntykwaPoltawskiego-Condensed-Medium] [\typescriptthree-antpm17] [encoding=\typescriptthree]
+ \definefontsynonym [AntykwaPoltawskiego-Condensed-MediumItalic] [\typescriptthree-antpmi17] [encoding=\typescriptthree]
+ \definefontsynonym [AntykwaPoltawskiego-Condensed-Bold] [\typescriptthree-antpb17] [encoding=\typescriptthree]
+ \definefontsynonym [AntykwaPoltawskiego-Condensed-BoldItalic] [\typescriptthree-antpbi17] [encoding=\typescriptthree]
+
+ \definefontsynonym [AntykwaPoltawskiego-Condensed-CapsLight] [\typescriptthree-antpl17-sc] [encoding=\typescriptthree]
+ \definefontsynonym [AntykwaPoltawskiego-Condensed-CapsLightItalic] [\typescriptthree-antpli17-sc] [encoding=\typescriptthree]
+ \definefontsynonym [AntykwaPoltawskiego-Condensed-CapsRegular] [\typescriptthree-antpr17-sc] [encoding=\typescriptthree]
+ \definefontsynonym [AntykwaPoltawskiego-Condensed-CapsItalic] [\typescriptthree-antpri17-sc] [encoding=\typescriptthree]
+ \definefontsynonym [AntykwaPoltawskiego-Condensed-CapsMedium] [\typescriptthree-antpm17-sc] [encoding=\typescriptthree]
+ \definefontsynonym [AntykwaPoltawskiego-Condensed-CapsMediumItalic] [\typescriptthree-antpmi17-sc] [encoding=\typescriptthree]
+ \definefontsynonym [AntykwaPoltawskiego-Condensed-CapsBold] [\typescriptthree-antpb17-sc] [encoding=\typescriptthree]
+ \definefontsynonym [AntykwaPoltawskiego-Condensed-CapsBoldItalic] [\typescriptthree-antpbi17-sc] [encoding=\typescriptthree]
+
+ \definefontsynonym [AntykwaPoltawskiego-SemiCondensed-Regular] [\typescriptthree-antpl12] [encoding=\typescriptthree]
+ \definefontsynonym [AntykwaPoltawskiego-SemiCondensed-Italic] [\typescriptthree-antpli12] [encoding=\typescriptthree]
+ \definefontsynonym [AntykwaPoltawskiego-SemiCondensed-Regular] [\typescriptthree-antpr12] [encoding=\typescriptthree]
+ \definefontsynonym [AntykwaPoltawskiego-SemiCondensed-Italic] [\typescriptthree-antpri12] [encoding=\typescriptthree]
+ \definefontsynonym [AntykwaPoltawskiego-SemiCondensed-Medium] [\typescriptthree-antpm12] [encoding=\typescriptthree]
+ \definefontsynonym [AntykwaPoltawskiego-SemiCondensed-MediumItalic] [\typescriptthree-antpmi12] [encoding=\typescriptthree]
+ \definefontsynonym [AntykwaPoltawskiego-SemiCondensed-Bold] [\typescriptthree-antpb12] [encoding=\typescriptthree]
+ \definefontsynonym [AntykwaPoltawskiego-SemiCondensed-BoldItalic] [\typescriptthree-antpbi12] [encoding=\typescriptthree]
+
+ \definefontsynonym [AntykwaPoltawskiego-SemiCondensed-CapsRegular] [\typescriptthree-antpl12-sc] [encoding=\typescriptthree]
+ \definefontsynonym [AntykwaPoltawskiego-SemiCondensed-CapsItalic] [\typescriptthree-antpli12-sc] [encoding=\typescriptthree]
+ \definefontsynonym [AntykwaPoltawskiego-SemiCondensed-CapsRegular] [\typescriptthree-antpr12-sc] [encoding=\typescriptthree]
+ \definefontsynonym [AntykwaPoltawskiego-SemiCondensed-CapsItalic] [\typescriptthree-antpri12-sc] [encoding=\typescriptthree]
+ \definefontsynonym [AntykwaPoltawskiego-SemiCondensed-CapsMedium] [\typescriptthree-antpm12-sc] [encoding=\typescriptthree]
+ \definefontsynonym [AntykwaPoltawskiego-SemiCondensed-CapsMediumItalic] [\typescriptthree-antpmi12-sc] [encoding=\typescriptthree]
+ \definefontsynonym [AntykwaPoltawskiego-SemiCondensed-CapsBold] [\typescriptthree-antpb12-sc] [encoding=\typescriptthree]
+ \definefontsynonym [AntykwaPoltawskiego-SemiCondensed-CapsBoldItalic] [\typescriptthree-antpbi12-sc] [encoding=\typescriptthree]
+
+ \definefontsynonym [AntykwaPoltawskiego-Light] [\typescriptthree-antpl10] [encoding=\typescriptthree]
+ \definefontsynonym [AntykwaPoltawskiego-LightItalic] [\typescriptthree-antpli10] [encoding=\typescriptthree]
+ \definefontsynonym [AntykwaPoltawskiego-Regular] [\typescriptthree-antpr10] [encoding=\typescriptthree]
+ \definefontsynonym [AntykwaPoltawskiego-Italic] [\typescriptthree-antpri10] [encoding=\typescriptthree]
+ \definefontsynonym [AntykwaPoltawskiego-Medium] [\typescriptthree-antpm10] [encoding=\typescriptthree]
+ \definefontsynonym [AntykwaPoltawskiego-MediumItalic] [\typescriptthree-antpmi10] [encoding=\typescriptthree]
+ \definefontsynonym [AntykwaPoltawskiego-Bold] [\typescriptthree-antpb10] [encoding=\typescriptthree]
+ \definefontsynonym [AntykwaPoltawskiego-BoldItalic] [\typescriptthree-antpbi10] [encoding=\typescriptthree]
+
+ \definefontsynonym [AntykwaPoltawskiego-CapsLight] [\typescriptthree-antpl10-sc] [encoding=\typescriptthree]
+ \definefontsynonym [AntykwaPoltawskiego-CapsLightItalic] [\typescriptthree-antpli10-sc] [encoding=\typescriptthree]
+ \definefontsynonym [AntykwaPoltawskiego-CapsRegular] [\typescriptthree-antpr10-sc] [encoding=\typescriptthree]
+ \definefontsynonym [AntykwaPoltawskiego-CapsItalic] [\typescriptthree-antpri10-sc] [encoding=\typescriptthree]
+ \definefontsynonym [AntykwaPoltawskiego-CapsMedium] [\typescriptthree-antpm10-sc] [encoding=\typescriptthree]
+ \definefontsynonym [AntykwaPoltawskiego-CapsMediumItalic] [\typescriptthree-antpmi10-sc] [encoding=\typescriptthree]
+ \definefontsynonym [AntykwaPoltawskiego-CapsBold] [\typescriptthree-antpb10-sc] [encoding=\typescriptthree]
+ \definefontsynonym [AntykwaPoltawskiego-CapsBoldItalic] [\typescriptthree-antpbi10-sc] [encoding=\typescriptthree]
+
+ \definefontsynonym [AntykwaPoltawskiego-SemiExtended-Light] [\typescriptthree-antpl8] [encoding=\typescriptthree]
+ \definefontsynonym [AntykwaPoltawskiego-SemiExtended-LightItalic] [\typescriptthree-antpli8] [encoding=\typescriptthree]
+ \definefontsynonym [AntykwaPoltawskiego-SemiExtended-Regular] [\typescriptthree-antpr8] [encoding=\typescriptthree]
+ \definefontsynonym [AntykwaPoltawskiego-SemiExtended-Italic] [\typescriptthree-antpri8] [encoding=\typescriptthree]
+ \definefontsynonym [AntykwaPoltawskiego-SemiExtended-Medium] [\typescriptthree-antpm8] [encoding=\typescriptthree]
+ \definefontsynonym [AntykwaPoltawskiego-SemiExtended-MediumItalic] [\typescriptthree-antpmi8] [encoding=\typescriptthree]
+ \definefontsynonym [AntykwaPoltawskiego-SemiExtended-Bold] [\typescriptthree-antpb8] [encoding=\typescriptthree]
+ \definefontsynonym [AntykwaPoltawskiego-SemiExtended-BoldItalic] [\typescriptthree-antpbi8] [encoding=\typescriptthree]
+
+ \definefontsynonym [AntykwaPoltawskiego-SemiExtended-CapsLight] [\typescriptthree-antpl8-sc] [encoding=\typescriptthree]
+ \definefontsynonym [AntykwaPoltawskiego-SemiExtended-CapsLightItalic] [\typescriptthree-antpli8-sc] [encoding=\typescriptthree]
+ \definefontsynonym [AntykwaPoltawskiego-SemiExtended-CapsRegular] [\typescriptthree-antpr8-sc] [encoding=\typescriptthree]
+ \definefontsynonym [AntykwaPoltawskiego-SemiExtended-CapsItalic] [\typescriptthree-antpri8-sc] [encoding=\typescriptthree]
+ \definefontsynonym [AntykwaPoltawskiego-SemiExtended-CapsMedium] [\typescriptthree-antpm8-sc] [encoding=\typescriptthree]
+ \definefontsynonym [AntykwaPoltawskiego-SemiExtended-CapsMediumItalic] [\typescriptthree-antpmi8-sc] [encoding=\typescriptthree]
+ \definefontsynonym [AntykwaPoltawskiego-SemiExtended-CapsBold] [\typescriptthree-antpb8-sc] [encoding=\typescriptthree]
+ \definefontsynonym [AntykwaPoltawskiego-SemiExtended-CapsBoldItalic] [\typescriptthree-antpbi8-sc] [encoding=\typescriptthree]
+
+ \definefontsynonym [AntykwaPoltawskiego-Extended-Light] [\typescriptthree-antpl6] [encoding=\typescriptthree]
+ \definefontsynonym [AntykwaPoltawskiego-Extended-LightItalic] [\typescriptthree-antpli6] [encoding=\typescriptthree]
+ \definefontsynonym [AntykwaPoltawskiego-Extended-Regular] [\typescriptthree-antpr6] [encoding=\typescriptthree]
+ \definefontsynonym [AntykwaPoltawskiego-Extended-Italic] [\typescriptthree-antpri6] [encoding=\typescriptthree]
+ \definefontsynonym [AntykwaPoltawskiego-Extended-Medium] [\typescriptthree-antpm6] [encoding=\typescriptthree]
+ \definefontsynonym [AntykwaPoltawskiego-Extended-MediumItalic] [\typescriptthree-antpmi6] [encoding=\typescriptthree]
+ \definefontsynonym [AntykwaPoltawskiego-Extended-Bold] [\typescriptthree-antpb6] [encoding=\typescriptthree]
+ \definefontsynonym [AntykwaPoltawskiego-Extended-BoldItalic] [\typescriptthree-antpbi6] [encoding=\typescriptthree]
+
+ \definefontsynonym [AntykwaPoltawskiego-Extended-CapsLight] [\typescriptthree-antpl6-sc] [encoding=\typescriptthree]
+ \definefontsynonym [AntykwaPoltawskiego-Extended-CapsLightItalic] [\typescriptthree-antpli6-sc] [encoding=\typescriptthree]
+ \definefontsynonym [AntykwaPoltawskiego-Extended-CapsRegular] [\typescriptthree-antpr6-sc] [encoding=\typescriptthree]
+ \definefontsynonym [AntykwaPoltawskiego-Extended-CapsItalic] [\typescriptthree-antpri6-sc] [encoding=\typescriptthree]
+ \definefontsynonym [AntykwaPoltawskiego-Extended-CapsMedium] [\typescriptthree-antpm6-sc] [encoding=\typescriptthree]
+ \definefontsynonym [AntykwaPoltawskiego-Extended-CapsMediumItalic] [\typescriptthree-antpmi6-sc] [encoding=\typescriptthree]
+ \definefontsynonym [AntykwaPoltawskiego-Extended-CapsBold] [\typescriptthree-antpb6-sc] [encoding=\typescriptthree]
+ \definefontsynonym [AntykwaPoltawskiego-Extended-CapsBoldItalic] [\typescriptthree-antpbi6-sc] [encoding=\typescriptthree]
+
+ \loadmapfile[poltawski-\typescriptthree.map]
+ \stoptypescript
+
+ \starttypescript [serif] [antykwa-poltawskiego] [name]
+ \definefontsynonym [Serif] [AntykwaPoltawskiego-Regular]
+ \definefontsynonym [SerifBold] [AntykwaPoltawskiego-Bold]
+ \definefontsynonym [SerifItalic] [AntykwaPoltawskiego-Italic]
+ \definefontsynonym [SerifSlanted] [AntykwaPoltawskiego-Italic]
+ \definefontsynonym [SerifBoldItalic] [AntykwaPoltawskiego-BoldItalic]
+ \definefontsynonym [SerifBoldSlanted] [AntykwaPoltawskiego-BoldItalic]
+ \definefontsynonym [SerifCaps] [AntykwaPoltawskiego-CapsRegular]
+ \stoptypescript
+
+ \starttypescript [serif] [antykwa-poltawskiego-light] [name]
+ \definefontsynonym [Serif] [AntykwaPoltawskiego-Light]
+ \definefontsynonym [SerifBold] [AntykwaPoltawskiego-Medium]
+ \definefontsynonym [SerifItalic] [AntykwaPoltawskiego-LightItalic]
+ \definefontsynonym [SerifSlanted] [AntykwaPoltawskiego-LightItalic]
+ \definefontsynonym [SerifBoldItalic] [AntykwaPoltawskiego-MediumItalic]
+ \definefontsynonym [SerifBoldSlanted] [AntykwaPoltawskiego-MediumItalic]
+ \definefontsynonym [SerifCaps] [AntykwaPoltawskiego-CapsLight]
+ \stoptypescript
+
+ % condensed and extended variants are still missing
+
+ \starttypescript [antykwa-poltawskiego,antykwa-poltawskiego-light] [ec,texnansi,qx,t5]
+ \definetypeface [\typescriptone] [rm] [serif] [\typescriptone] [default] [encoding=\typescripttwo]
+ \definetypeface [\typescriptone] [ss] [sans] [modern] [default] [encoding=\typescripttwo,rscale=1.05] % scaling?
+ \definetypeface [\typescriptone] [tt] [mono] [modern] [default] [encoding=\typescripttwo,rscale=1.05] % scaling?
+ \definetypeface [\typescriptone] [mm] [math] [modern] [default] [encoding=\typescripttwo,rscale=1.05] % scaling?
+ \quittypescriptscanning
+ \stoptypescript
+
+\stoptypescriptcollection
+
+\starttypescriptcollection[iwona]
+
+ % 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]
+ \usemathcollection[default]
+ \loadmapfile[iwona-rm.map]
+ \loadmapfile[iwona-mi.map]
+ \loadmapfile[iwona-sy.map]
+ \loadmapfile[iwona-ex.map]
+ \stoptypescript
+
+ \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
+
+ \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[kurier]
+
+ \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-RegularItalic] [Kurier-Italic]
+ \definefontsynonym[Kurier-Bold] [\typescriptthree-kurierb] [encoding=\typescriptthree]
+ \definefontsynonym[Kurier-BoldItalic] [\typescriptthree-kurierbi] [encoding=\typescriptthree]
+ \definefontsynonym[Kurier-Light] [\typescriptthree-kurierl] [encoding=\typescriptthree]
+ \definefontsynonym[Kurier-LightItalic] [\typescriptthree-kurierli] [encoding=\typescriptthree]
+ \definefontsynonym[Kurier-Medium] [\typescriptthree-kurierm] [encoding=\typescriptthree]
+ \definefontsynonym[Kurier-MediumItalic] [\typescriptthree-kuriermi] [encoding=\typescriptthree]
+ \definefontsynonym[Kurier-Heavy] [\typescriptthree-kurierh] [encoding=\typescriptthree]
+ \definefontsynonym[Kurier-HeavyItalic] [\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]
+ \usemathcollection[default]
+ \loadmapfile[kurier-rm.map]
+ \loadmapfile[kurier-mi.map]
+ \loadmapfile[kurier-sy.map]
+ \loadmapfile[kurier-ex.map]
+ \stoptypescript
+
+ \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
+
+ \starttypescript [kurier-light,kurier,kurier-medium] [texnansi,ec,qx,t5]
+ \definetypeface[\typescriptone][ss][sans] [\typescriptone] [default][encoding=\typescripttwo]
+ \definetypeface[\typescriptone][rm][serif][modern] [default][encoding=\typescripttwo]
+ \definetypeface[\typescriptone][tt][mono] [modern] [default][encoding=\typescripttwo,rscale=1.05]
+ \definetypeface[\typescriptone][mm][math] [\typescriptone] [default][encoding=\typescripttwo,text=ss]
+ \quittypescriptscanning
+ \stoptypescript
+
+\stoptypescriptcollection
+
+\starttypescriptcollection[charter]
+
+ \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
+
+ \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
+
+\stoptypescriptcollection
+
+\starttypescriptcollection[symbols]
+
+ \starttypescript
+ \definefontsynonym [ZapfDingbats] [uzdr]
+ \definefontsynonym [RalfSmithFormalScript] [rsfs10]
+ \definefontsynonym [MartinVogel] [fmvr8x]
+ \stoptypescript
+
+\stoptypescriptcollection
+
+\starttypescriptcollection[texgyre]
+
+ \definetypescriptprefix [f:pagella] [pl] \definetypescriptprefix [f:palatino] [pl]
+ \definetypescriptprefix [f:termes] [tm] \definetypescriptprefix [f:times] [tm]
+ \definetypescriptprefix [f:heros] [hv] \definetypescriptprefix [f:helvetica] [hv]
+ \definetypescriptprefix [f:bonum] [bk] \definetypescriptprefix [f:bookman] [bk]
+ \definetypescriptprefix [f:schola] [cs] \definetypescriptprefix [f:schoolbook] [cs]
+ \definetypescriptprefix [f:adventor][ag] %definetypescriptprefix [f:adventor] [ag]
+ \definetypescriptprefix [f:cursor] [cr] \definetypescriptprefix [f:courier] [cr]
+ \definetypescriptprefix [f:chorus] [zc] \definetypescriptprefix [f:chancery] [zc] % not the full set
+
+ \starttypescript [serif,sans,mono] [pagella,palatino,termes,times,adventor,bonum,bookman,cursor,courier,heros,helvetica,schola,schoolbook] [ec,texnansi,cs,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]
+ \loadmapfile[q\typescriptprefix{f:\typescripttwo}-\typescriptthree.map]
+ \stoptypescript
+
+ \starttypescript [serif,sans,mono] [pagella,palatino,termes,times,adventor,bonum,bookman,cursor,courier,heros,helvetica,schola,schoolbook] [ec,texnansi,cs,qx,rm,t5,l7x]
+ \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]
+ \loadmapfile[q\typescriptprefix{f:\typescripttwo}-\typescriptthree.map]
+ \stoptypescript
+
+ \starttypescript [serif] [chorus,chancery] [ec,texnansi,cs,qx,rm,t5,t2a,t2b,t2c,l7x]
+ \definefontsynonym [TeXGyreChorus-MediumItalic] [\typescriptthree-qzcmi] [encoding=\typescriptthree]
+ \loadmapfile[qzc-\typescriptthree.map]
+ \stoptypescript
+
+ \definetypescriptprefix [n:pagella] [TeXGyrePagella] \definetypescriptprefix [n:palatino] [TeXGyrePagella]
+ \definetypescriptprefix [n:termes] [TeXGyreTermes] \definetypescriptprefix [n:times] [TeXGyreTermes]
+ \definetypescriptprefix [n:heros] [TeXGyreHeros] \definetypescriptprefix [n:helvetica] [TeXGyreHeros]
+ \definetypescriptprefix [n:bonum] [TeXGyreBonum] \definetypescriptprefix [n:bookman] [TeXGyreBonum]
+ \definetypescriptprefix [n:schola] [TeXGyreSchola] \definetypescriptprefix [n:schoolbook] [TeXGyreSchola]
+ \definetypescriptprefix [n:adventor] [TeXGyreAdventor] %definetypescriptprefix [n:adventor] [TeXGyreAdventor]
+ \definetypescriptprefix [n:cursor] [TeXGyreCursor] \definetypescriptprefix [n:courier] [TeXGyreCursor]
+ \definetypescriptprefix [n:chorus] [TeXGyreChorus] \definetypescriptprefix [n:chancery] [TeXGyreChorus] % not the full set
+
+ \starttypescript [serif] [pagella,palatino,termes,times,bonum,bookman,schola,schoolbook] [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 [SerifSlanted] [SerifItalic]
+ \definefontsynonym [SerifBoldSlanted] [SerifBoldItalic]
+ \definefontsynonym [SerifCaps] [\typescriptprefix{n:\typescripttwo}-Caps]
+
+ \definefontvariant [Serif][osf][Caps]
+ \definefontvariant [Serif][sc] [Caps]
+
+ \definefontsynonym [SerifRegular] [Serif]
+ \definefontsynonym [SerifRegularCaps] [SerifCaps]
+ \definefontsynonym [SerifItalicCaps] [\typescriptprefix{n:\typescripttwo}-ItalicCaps]
+ \definefontsynonym [SerifBoldCaps] [\typescriptprefix{n:\typescripttwo}-BoldCaps]
+ \definefontsynonym [SerifBoldItalicCaps] [\typescriptprefix{n:\typescripttwo}-BoldItalicCaps]
+ \definefontsynonym [SerifSlantedCaps] [SerifItalicCaps]
+ \definefontsynonym [SerifBoldSlantedCaps] [SerifBoldItalicCaps]
+ \definefontsynonym [SerifCapsCaps] [SerifCaps]
+ \stoptypescript
+
+ \starttypescript [serif] [chorus,chancery] [name]
+ \definefontsynonym [SerifMediumItalic] [TeXGyreChorus-MediumItalic]
+ \definefontsynonym [Serif] [SerifMediumItalic]
+ \definefontsynonym [SerifItalic] [SerifMediumItalic]
+ \definefontsynonym [SerifBold] [SerifMediumItalic]
+ \definefontsynonym [SerifBoldItalic] [SerifMediumItalic]
+ \definefontsynonym [SerifSlanted] [SerifMediumItalic]
+ \definefontsynonym [SerifBoldSlanted] [SerifMediumItalic]
+ \definefontsynonym [SerifCaps] [SerifMediumItalic]
+ \stoptypescript
+
+ \starttypescript [calligraphy] [chorus,chancery] [name]
+ \definefontsynonym [Calligraphy] [TeXGyreChorus-MediumItalic]
+ \stoptypescript
+
+ \starttypescript [sans] [heros,helvetica,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 [SansSlanted] [SansItalic]
+ \definefontsynonym [SansBoldSlanted] [SansBoldItalic]
+ \definefontsynonym [SansCaps] [\typescriptprefix{n:\typescripttwo}-Caps]
+
+ \definefontvariant [Sans][osf][Caps]
+ \definefontvariant [Sans][sc] [Caps]
+
+ \definefontsynonym [SansRegular] [Sans]
+ \definefontsynonym [SansRegularCaps] [SansCaps]
+ \definefontsynonym [SansItalicCaps] [\typescriptprefix{n:\typescripttwo}-ItalicCaps]
+ \definefontsynonym [SansBoldCaps] [\typescriptprefix{n:\typescripttwo}-BoldCaps]
+ \definefontsynonym [SansBoldItalicCaps] [\typescriptprefix{n:\typescripttwo}-BoldItalicCaps]
+ \definefontsynonym [SansSlantedCaps] [SansItalicCaps]
+ \definefontsynonym [SansBoldSlantedCaps] [SansBoldItalicCaps]
+ \definefontsynonym [SansCapsCaps] [SansCaps]
+ \stoptypescript
+
+ \starttypescript [mono] [cursor,courier] [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]
+
+ \definefontvariant [Mono][osf][Caps]
+ \definefontvariant [Mono][sc] [Caps]
+
+ \definefontsynonym [MonoRegular] [Mono]
+ \definefontsynonym [MonoRegularCaps] [MonoCaps]
+ \definefontsynonym [MonoItalicCaps] [\typescriptprefix{n:\typescripttwo}-ItalicCaps]
+ \definefontsynonym [MonoBoldCaps] [\typescriptprefix{n:\typescripttwo}-BoldCaps]
+ \definefontsynonym [MonoBoldItalicCaps] [\typescriptprefix{n:\typescripttwo}-BoldItalicCaps]
+ \definefontsynonym [MonoSlantedCaps] [MonoItalicCaps]
+ \definefontsynonym [MonoBoldSlantedCaps] [MonoBoldItalicCaps]
+ \definefontsynonym [MonoCapsCaps] [MonoCaps]
+ \stoptypescript
+
+ % bonus definitions
+
+ % when these fonts are in tex live ...
+ %
+ % \definefontsynonym [Palatino-Caps] [TeXPalladioL-SC] [encoding=\typescriptthree]
+ %
+ % \starttypescript [serif] [palatino] [ec,texnansi]
+ % \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
+
+ % Faces:
+
+ \starttypescript [times,termes] [ec,texnansi,cs,qx,rm,t5,t2a,t2b,t2c,l7x]
+ \definetypeface [\typescriptone] [rm] [serif] [\typescriptone] [default] [encoding=\typescripttwo]
+ \definetypeface [\typescriptone] [ss] [sans] [helvetica] [default] [encoding=\typescripttwo,rscale=0.9]
+ \definetypeface [\typescriptone] [tt] [mono] [modern] [default] [encoding=\typescripttwo,rscale=1.05]
+ \definetypeface [\typescriptone] [mm] [math] [times] [default] [encoding=\typescripttwo]
+ \quittypescriptscanning
+ \stoptypescript
+
+ \starttypescript [palatino,pagella] [ec,texnansi,cs,qx,rm,t5,t2a,t2b,t2c,l7x]
+ \definetypeface [\typescriptone] [rm] [serif] [\typescriptone] [default] [encoding=\typescripttwo]
+ \definetypeface [\typescriptone] [ss] [sans] [modern] [default] [encoding=\typescripttwo,rscale=1.075]
+ \definetypeface [\typescriptone] [tt] [mono] [modern] [default] [encoding=\typescripttwo,rscale=1.075]
+ \definetypeface [\typescriptone] [mm] [math] [palatino] [default] [encoding=default]
+ \quittypescriptscanning
+ \stoptypescript
+
+ \starttypescript [schoolbook,schola] [ec,texnansi,cs,qx,rm,t5,t2a,t2b,t2c,l7x]
+ \definetypeface [\typescriptone] [rm] [serif] [\typescriptone] [default] [encoding=\typescripttwo]
+ \definetypeface [\typescriptone] [ss] [sans] [modern] [default] [encoding=\typescripttwo]
+ \definetypeface [\typescriptone] [tt] [mono] [modern] [default] [encoding=\typescripttwo]
+ \definetypeface [\typescriptone] [mm] [math] [modern] [default] [encoding=default]
+ \quittypescriptscanning
+ \stoptypescript
+
+ \starttypescript [bookman,bonum] [ec,texnansi,cs,qx,rm,t5,t2a,t2b,t2c,l7x]
+ \definetypeface [\typescriptone] [rm] [serif] [\typescriptone] [default] [encoding=\typescripttwo]
+ \definetypeface [\typescriptone] [ss] [sans] [modern] [default] [encoding=\typescripttwo]
+ \definetypeface [\typescriptone] [tt] [mono] [modern] [default] [encoding=\typescripttwo]
+ \definetypeface [\typescriptone] [mm] [math] [modern] [default] [encoding=default]
+ \quittypescriptscanning
+ \stoptypescript
+
+ \starttypescript [chancery,chorus] [ec,texnansi,cs,qx,rm,t5,t2a,t2b,t2c,l7x]
+ \definetypeface [\typescriptone] [rm] [serif] [\typescriptone] [default] [encoding=\typescripttwo]
+ \definetypeface [\typescriptone] [ss] [sans] [modern] [default] [encoding=\typescripttwo]
+ \definetypeface [\typescriptone] [tt] [mono] [modern] [default] [encoding=\typescripttwo]
+ \definetypeface [\typescriptone] [mm] [math] [modern] [default] [encoding=default]
+ \quittypescriptscanning
+ \stoptypescript
+
+ \starttypescript [helvetica,heros] [ec,texnansi,cs,qx,rm,t5,t2a,t2b,t2c,l7x]
+ \definetypeface [\typescriptone] [ss] [sans] [\typescriptone] [default] [encoding=\typescripttwo]
+ \definetypeface [\typescriptone] [rm] [serif] [modern] [default] [encoding=\typescripttwo,rscale=1.15]
+ \definetypeface [\typescriptone] [tt] [mono] [modern] [default] [encoding=\typescripttwo,rscale=1.15]
+ \definetypeface [\typescriptone] [mm] [math] [modern] [default] [encoding=default,rscale=1.15]
+ \quittypescriptscanning
+ \stoptypescript
+
+ \starttypescript [avantgarde,adventor] [ec,texnansi,cs,qx,rm,t5,t2a,t2b,t2c,l7x]
+ \definetypeface [\typescriptone] [ss] [sans] [adventor] [default] [encoding=\typescripttwo]
+ \definetypeface [\typescriptone] [rm] [serif] [modern] [default] [encoding=\typescripttwo,rscale=1.15]
+ \definetypeface [\typescriptone] [tt] [mono] [modern] [default] [encoding=\typescripttwo,rscale=1.15]
+ \definetypeface [\typescriptone] [mm] [math] [modern] [default] [encoding=default]
+ \quittypescriptscanning
+ \stoptypescript
+
+ \starttypescript [courier,cursor] [ec,texnansi,cs,qx,rm,t5,t2a,t2b,t2c,l7x]
+ \definetypeface [\typescriptone] [tt] [mono] [\typescriptone] [default] [encoding=\typescripttwo]
+ \definetypeface [\typescriptone] [rm] [serif] [modern] [default] [encoding=\typescripttwo]
+ \definetypeface [\typescriptone] [ss] [sans] [modern] [default] [encoding=\typescripttwo]
+ \definetypeface [\typescriptone] [mm] [math] [modern] [default] [encoding=default]
+ \quittypescriptscanning
+ \stoptypescript
+
+\stoptypescriptcollection
+
+\starttypescriptcollection[xmath]
+
+ \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]
+ \usemathcollection[default]
+ \loadmapfile[original-youngryu-px.map]
+ \stoptypescript
+
+ \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]
+ \usemathcollection[default]
+ \loadmapfile[original-youngryu-tx.map]
+ \stoptypescript
+
+\stoptypescriptcollection
+
+\starttypescriptcollection[pregyre]
+
+ %D These are just fallbacks in case anyone stil uses the
+ %D old names (might also be removed?).
+
+ % TeXGyrePagella
+
+ \starttypescript [serif] [palatino]
+ \definefontsynonym [Palatino] [TeXGyrePagella-Regular]
+ \definefontsynonym [Palatino-Italic] [TeXGyrePagella-Italic]
+ \definefontsynonym [Palatino-Bold] [TeXGyrePagella-Bold]
+ \definefontsynonym [Palatino-BoldItalic] [TeXGyrePagella-BoldItalic]
+ \definefontsynonym [Palatino-Slanted] [TeXGyrePagella-Italic]
+ \definefontsynonym [Palatino-BoldSlanted] [TeXGyrePagella-BoldItalic]
+ \definefontsynonym [Palatino-Caps] [TeXGyrePagella-Caps]
+ \stoptypescript
+
+ \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
+
+ % TeXGyreTermes
+
+ \starttypescript [serif] [times]
+ \definefontsynonym [Times-Roman] [TeXGyreTermes-Regular]
+ \definefontsynonym [Times-Italic] [TeXGyreTermes-Italic]
+ \definefontsynonym [Times-Bold] [TeXGyreTermes-Bold]
+ \definefontsynonym [Times-BoldItalic] [TeXGyreTermes-BoldItalic]
+ \definefontsynonym [Times-Slanted] [TeXGyreTermes-Italic]
+ \definefontsynonym [Times-BoldSlanted] [TeXGyreTermes-BoldItalic]
+ \definefontsynonym [Times-Caps] [TeXGyreTermes-Caps]
+ \stoptypescript
+
+ \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
+
+ % TeXGyreHeros
+
+ \starttypescript [sans] [helvetica]
+ \definefontsynonym [Helvetica] [TeXGyreHeros-Regular]
+ \definefontsynonym [Helvetica-Oblique] [TeXGyreHeros-Italic]
+ \definefontsynonym [Helvetica-Bold] [TeXGyreHeros-Bold]
+ \definefontsynonym [Helvetica-BoldOblique] [TeXGyreHeros-BoldItalic]
+ \definefontsynonym [Helvetica-Caps] [TeXGyreHeros-Caps]
+ \stoptypescript
+
+ \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
+
+ % TeXGyreBonum
+
+ \starttypescript [serif] [bookman]
+ \definefontsynonym [Bookman-Light] [TeXGyreBonum-Regular]
+ \definefontsynonym [Bookman-LightItalic] [TeXGyreBonum-Italic]
+ \definefontsynonym [Bookman-DemiBold] [TeXGyreBonum-Bold]
+ \definefontsynonym [Bookman-DemiBoldItalic] [TeXGyreBonum-BoldItalic]
+ \definefontsynonym [Bookman-LightSlanted] [TeXGyreBonum-Italic]
+ \definefontsynonym [Bookman-DemiBoldSlanted] [TeXGyreBonum-BoldItalic]
+ \definefontsynonym [Bookman-Light-Caps] [TeXGyreBonum-Caps]
+ \stoptypescript
+
+ \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
+
+ % TeXGyreScola
+
+ \starttypescript [serif] [schoolbook]
+ \definefontsynonym [Schoolbook-Roman] [TeXGyreScola-Regular]
+ \definefontsynonym [Schoolbook-Italic] [TeXGyreScola-Italic]
+ \definefontsynonym [Schoolbook-Bold] [TeXGyreScola-Bold]
+ \definefontsynonym [Schoolbook-BoldItalic] [TeXGyreScola-BoldItalic]
+ \definefontsynonym [Schoolbook-Slanted] [TeXGyreScola-Italic]
+ \definefontsynonym [Schoolbook-BoldSlanted] [TeXGyreScola-BoldItalic]
+ \definefontsynonym [Schoolbook-Roman-Caps] [TeXGyreScola-Caps]
+ \stoptypescript
+
+ \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
+
+ % TeXGyreAdventor
+
+ % TeXGyreCursor
+
+ \starttypescript [mono] [courier]
+ \definefontsynonym [Courier] [TeXGyreCursor-Regular]
+ \definefontsynonym [Courier-Bold] [TeXGyreCursor-Bold]
+ \definefontsynonym [Courier-Oblique] [TeXGyreCursor-Italic]
+ \definefontsynonym [Courier-BoldOblique] [TeXGyreCursor-BoldItalic]
+ \fakecontrolspace
+ \stoptypescript
+
+ \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]
+ \stoptypescript
+
+ % TeXGyreChorus
+
+ \starttypescript [calligraphy] [chancery]
+ \definefontsynonym [Chancery] [TeXGyreChorus-MediumItalic]
+ \stoptypescript
+
+ \starttypescript [calligraphy] [chancery] [name]
+ \definefontsynonym [Calligraphy] [Chancery]
+ \stoptypescript
+
+\stoptypescriptcollection
+
+\starttypescriptcollection[Lucida]
+
+ \definetypescriptprefix [e:ec] [8t]
+ \definetypescriptprefix [e:texnansi] [8y]
+ \definetypescriptprefix [e:8r] [8r]
+
+ % Lucida Bright
+
+ \starttypescript [serif] [lucida] [ec,texnansi,8r]
+ \definefontsynonym [\typescriptthree-lbr] [hlhr\typescriptprefix{e:\typescriptthree}] [encoding=\typescriptthree] % LucidaBright
+ \definefontsynonym [\typescriptthree-lbd] [hlhb\typescriptprefix{e:\typescriptthree}] [encoding=\typescriptthree] % LucidaBright-Demi
+ \definefontsynonym [\typescriptthree-lbi] [hlhri\typescriptprefix{e:\typescriptthree}] [encoding=\typescriptthree] % LucidaBright-Italic
+ \definefontsynonym [\typescriptthree-lbdi] [hlhbi\typescriptprefix{e:\typescriptthree}] [encoding=\typescriptthree] % LucidaBright-DemiItalic
+ \definefontsynonym [\typescriptthree-lbsl] [hlhro\typescriptprefix{e:\typescriptthree}] [encoding=\typescriptthree] % LucidaBright-Oblique
+ \definefontsynonym [\typescriptthree-lbrsc] [hlhrc\typescriptprefix{e:\typescriptthree}] [encoding=\typescriptthree] % LucidaBrightSmallcaps
+ \definefontsynonym [\typescriptthree-lbdsc] [hlhbc\typescriptprefix{e:\typescriptthree}] [encoding=\typescriptthree] % LucidaBrightSmallcaps-Demi
+
+ \definefontsynonym [LucidaBright] [\typescriptthree-lbr] [encoding=\typescriptthree]
+ \definefontsynonym [LucidaBright-Demi] [\typescriptthree-lbd] [encoding=\typescriptthree]
+ \definefontsynonym [LucidaBright-Italic] [\typescriptthree-lbi] [encoding=\typescriptthree]
+ \definefontsynonym [LucidaBright-DemiItalic] [\typescriptthree-lbdi] [encoding=\typescriptthree]
+ \definefontsynonym [LucidaBright-Oblique] [\typescriptthree-lbsl] [encoding=\typescriptthree]
+ \definefontsynonym [LucidaBrightSmallcaps] [\typescriptthree-lbrsc] [encoding=\typescriptthree]
+ \definefontsynonym [LucidaBrightSmallcaps-Demi] [\typescriptthree-lbdsc] [encoding=\typescriptthree]
+
+ \loadmapfile[lucida.map]
+ \stoptypescript
+
+ % Lucida Bright Sans
+
+ \starttypescript [sans] [lucida] [ec,texnansi,8r]
+ \definefontsynonym [\typescriptthree-lsr] [hlsr\typescriptprefix{e:\typescriptthree}] [encoding=\typescriptthree] % LucidaSans
+ \definefontsynonym [\typescriptthree-lsd] [hlsb\typescriptprefix{e:\typescriptthree}] [encoding=\typescriptthree] % LucidaSans-Demi
+ \definefontsynonym [\typescriptthree-lsb] [hlsu\typescriptprefix{e:\typescriptthree}] [encoding=\typescriptthree] % LucidaSans-Bold
+ \definefontsynonym [\typescriptthree-lsi] [hlsri\typescriptprefix{e:\typescriptthree}] [encoding=\typescriptthree] % LucidaSans-Italic
+ \definefontsynonym [\typescriptthree-lsdi] [hlsbi\typescriptprefix{e:\typescriptthree}] [encoding=\typescriptthree] % LucidaSans-DemiItalic
+ \definefontsynonym [\typescriptthree-lsbi] [hlsui\typescriptprefix{e:\typescriptthree}] [encoding=\typescriptthree] % LucidaSans-BoldItalic
+
+ \definefontsynonym [LucidaSans] [\typescriptthree-lsr] [encoding=\typescriptthree]
+ \definefontsynonym [LucidaSans-Demi] [\typescriptthree-lsd] [encoding=\typescriptthree]
+ \definefontsynonym [LucidaSans-Bold] [\typescriptthree-lsb] [encoding=\typescriptthree]
+ \definefontsynonym [LucidaSans-Italic] [\typescriptthree-lsi] [encoding=\typescriptthree]
+ \definefontsynonym [LucidaSans-DemiItalic] [\typescriptthree-lsdi] [encoding=\typescriptthree]
+ \definefontsynonym [LucidaSans-BoldItalic] [\typescriptthree-lsbi] [encoding=\typescriptthree]
+
+ \loadmapfile[lucida.map]
+ \stoptypescript
+
+ % Lucida Bright Typewriter
+
+ \starttypescript [mono] [lucida] [ec,texnansi,8r]
+ \definefontsynonym [\typescriptthree-lbtr] [hlcrt\typescriptprefix{e:\typescriptthree}] [encoding=\typescriptthree] % LucidaTypewriter
+ \definefontsynonym [\typescriptthree-lbtb] [hlcbt\typescriptprefix{e:\typescriptthree}] [encoding=\typescriptthree] % LucidaTypewriterBold
+ \definefontsynonym [\typescriptthree-lbto] [hlcrot\typescriptprefix{e:\typescriptthree}] [encoding=\typescriptthree] % LucidaTypewriterOblique
+ \definefontsynonym [\typescriptthree-lbtbo] [hlcbot\typescriptprefix{e:\typescriptthree}] [encoding=\typescriptthree] % LucidaTypewriterBoldOblique
+
+ \definefontsynonym [LucidaTypewriter] [\typescriptthree-lbtr] [encoding=\typescriptthree]
+ \definefontsynonym [LucidaTypewriterBold] [\typescriptthree-lbtb] [encoding=\typescriptthree]
+ \definefontsynonym [LucidaTypewriterOblique] [\typescriptthree-lbto] [encoding=\typescriptthree]
+ \definefontsynonym [LucidaTypewriterBoldOblique] [\typescriptthree-lbtbo] [encoding=\typescriptthree]
+
+ \loadmapfile[lucida.map]
+ \stoptypescript
+
+ % Lucida Bright Sans Typewriter
+
+ \starttypescript [mono] [lucida] [ec,texnansi,8r]
+ \definefontsynonym [\typescriptthree-lstr] [hlsrt\typescriptprefix{e:\typescriptthree}] [encoding=\typescriptthree] % LucidaSans-Typewriter
+ \definefontsynonym [\typescriptthree-lstb] [hlsbt\typescriptprefix{e:\typescriptthree}] [encoding=\typescriptthree] % LucidaSans-TypewriterBold
+ \definefontsynonym [\typescriptthree-lsto] [hlsrot\typescriptprefix{e:\typescriptthree}] [encoding=\typescriptthree] % LucidaSans-TypewriterOblique
+ \definefontsynonym [\typescriptthree-lstbo] [hlsbot\typescriptprefix{e:\typescriptthree}] [encoding=\typescriptthree] % LucidaSans-TypewriterBoldOblique
+
+ \definefontsynonym [LucidaSans-Typewriter] [\typescriptthree-lstr] [encoding=\typescriptthree]
+ \definefontsynonym [LucidaSans-TypewriterBold] [\typescriptthree-lstb] [encoding=\typescriptthree]
+ \definefontsynonym [LucidaSans-TypewriterOblique] [\typescriptthree-lsto] [encoding=\typescriptthree]
+ \definefontsynonym [LucidaSans-TypewriterBoldOblique] [\typescriptthree-lstbo] [encoding=\typescriptthree]
+
+ \loadmapfile[lucida.map]
+ \stoptypescript
+
+ % Lucida Calligraphy
+
+ \starttypescript [calligraphy] [lucida] [texnansi,ec,8r]
+ \definefontsynonym [\typescriptthree-lbc] [hlcrie\typescriptprefix{e:\typescriptthree}] [encoding=\typescriptthree] % LucidaCalligraphy-Italic
+
+ \definefontsynonym [LucidaCalligraphy-Italic] [\typescriptthree-lbc] [encoding=\typescriptthree]
+
+ \loadmapfile[lucida.map]
+ \stoptypescript
+
+ % Lucida Casual
+
+ \starttypescript [casual] [lucida] [texnansi,ec,8r]
+ \definefontsynonym [\typescriptthree-lbkr] [hlcrn\typescriptprefix{e:\typescriptthree}] [encoding=\typescriptthree] % LucidaCasual
+ \definefontsynonym [\typescriptthree-lbki] [hlcrin\typescriptprefix{e:\typescriptthree}] [encoding=\typescriptthree] % LucidaCasual-Italic
+
+ \definefontsynonym [LucidaCasual] [\typescriptthree-lbkr] [encoding=\typescriptthree]
+ \definefontsynonym [LucidaCasual-Italic] [\typescriptthree-lbki] [encoding=\typescriptthree]
+
+ \loadmapfile[lucida.map]
+ \stoptypescript
+
+ % Lucida Handwriting
+
+ \starttypescript [handwriting] [lucida] [texnansi,ec,8r]
+ \definefontsynonym [\typescriptthree-lbh] [hlcriw\typescriptprefix{e:\typescriptthree}] [encoding=\typescriptthree] % LucidaHandwriting-Italic
+
+ \definefontsynonym [LucidaHandwriting-Italic] [\typescriptthree-lbh] [encoding=\typescriptthree]
+
+ \loadmapfile[lucida.map]
+ \stoptypescript
+
+ % Lucida Fax
+
+ \starttypescript [fax] [lucida] [texnansi,ec,8r]
+ \definefontsynonym [\typescriptthree-lfr] [hlxr\typescriptprefix{e:\typescriptthree}] [encoding=\typescriptthree] % LucidaFax
+ \definefontsynonym [\typescriptthree-lfd] [hlxb\typescriptprefix{e:\typescriptthree}] [encoding=\typescriptthree] % LucidaFax-Demi
+ \definefontsynonym [\typescriptthree-lfi] [hlxri\typescriptprefix{e:\typescriptthree}] [encoding=\typescriptthree] % LucidaFax-Italic
+ \definefontsynonym [\typescriptthree-lfdi] [hlxbi\typescriptprefix{e:\typescriptthree}] [encoding=\typescriptthree] % LucidaFax-DemiItalic
+
+ \definefontsynonym [LucidaFax] [\typescriptthree-lfr] [encoding=\typescriptthree] % LucidaFax
+ \definefontsynonym [LucidaFax-Demi] [\typescriptthree-lfd] [encoding=\typescriptthree] % LucidaFax-Demi
+ \definefontsynonym [LucidaFax-Italic] [\typescriptthree-lfi] [encoding=\typescriptthree] % LucidaFax-Italic
+ \definefontsynonym [LucidaFax-DemiItalic] [\typescriptthree-lfdi] [encoding=\typescriptthree] % LucidaFax-DemiItalic
+
+ \loadmapfile[lucida.map]
+ \stoptypescript
+
+ \starttypescript [blackletter] [lucida] [texnansi,ec,8r]
+ \definefontsynonym [\typescriptthree-lbl] [hlcrf\typescriptprefix{e:\typescriptthree}] [encoding=\typescriptthree] % LucidaBlackletter
+
+ \definefontsynonym [LucidaBlackletter] [\typescriptthree-lbl] [encoding=\typescriptthree]
+
+ \loadmapfile[lucida.map]
+ \stoptypescript
+
+ \starttypescript [lucida,lucidabfm,lucidaboldmath] [texnansi,ec,8r]
+ \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]
+
+ \loadmapfile[lucida.map]
+ \stoptypescript
+
+ \starttypescript [math] [lucida] [default]
+ \definefontsynonym [LucidaNewMath-AltItalic] [hlcrima]
+ \definefontsynonym [LucidaNewMath-Arrows] [hlcra]
+ \definefontsynonym [LucidaNewMath-Extension] [hlcrv]
+ \definefontsynonym [LucidaNewMath-Roman] [hlcrm]
+ \definefontsynonym [LucidaNewMath-Italic] [hlcrim]
+ \definefontsynonym [LucidaNewMath-Symbol] [hlcry]
+ \definefontsynonym [LucidaBlackletter] [hlcrf8y] % what a mess
+ \usemathcollection[lbr]
+ \loadmapfile [lucida.map]
+ \stoptypescript
+
+ \starttypescript [boldmath,bfmath] [lucida] [default]
+ \definefontsynonym [LucidaNewMath-AltDemiItalic] [hlcdima]
+ \definefontsynonym [LucidaNewMath-Arrows-Demi] [hlcda]
+ \definefontsynonym [LucidaNewMath-Extension] [hlcrv]
+ \definefontsynonym [LucidaNewMath-Demi] [hlcdm]
+ \definefontsynonym [LucidaNewMath-DemiItalic] [hlcdim]
+ \definefontsynonym [LucidaNewMath-Symbol-Demi] [hlcdy]
+ \loadmapfile [lucida.map]
+ \stoptypescript
+
+ % Lucida Bright
+
+ \starttypescript [serif] [lucida] [name]
+ \definefontsynonym [Serif] [LucidaBright]
+ \definefontsynonym [SerifBold] [LucidaBright-Demi]
+ \definefontsynonym [SerifItalic] [LucidaBright-Italic]
+ \definefontsynonym [SerifBoldItalic] [LucidaBright-DemiItalic]
+ \definefontsynonym [SerifSlanted] [LucidaBright-Oblique]
+ \definefontsynonym [SerifBoldSlanted] [LucidaBright-DemiItalic]
+ \definefontsynonym [SerifCaps] [LucidaBrightSmallcaps]
+ \definefontsynonym [SerifBoldCaps] [LucidaBrightSmallcaps-Demi]
+ \stoptypescript
+
+ % Lucida Bright Sans
+
+ \starttypescript [sans] [lucida] [name]
+ \definefontsynonym [Sans] [LucidaSans]
+ \definefontsynonym [SansBold] [LucidaSans-Demi]
+ \definefontsynonym [SansItalic] [LucidaSans-Italic]
+ \definefontsynonym [SansBoldItalic] [LucidaSans-DemiItalic]
+ \definefontsynonym [SansSlanted] [LucidaSans-Italic]
+ \definefontsynonym [SansBoldSlanted] [LucidaSans-DemiItalic]
+ \definefontsynonym [SansCaps] [LucidaSans]
+ \stoptypescript
+
+ % Lucida Bright Typewriter
+
+ % only one family may be used as mono; sans used to be that since the beginning,
+ % so we keep using that as default
+
+ % \starttypescript [mono] [lucida] [name]
+ % \definefontsynonym [Mono] [LucidaTypewriter]
+ % \definefontsynonym [MonoBold] [LucidaTypewriterBold]
+ % \definefontsynonym [MonoItalic] [LucidaTypewriterOblique]
+ % \definefontsynonym [MonoBoldItalic] [LucidaTypewriterBoldOblique]
+ % \definefontsynonym [MonoSlanted] [LucidaTypewriterOblique]
+ % \definefontsynonym [MonoBoldSlanted] [LucidaTypewriterBoldOblique]
+ % \definefontsynonym [MonoCaps] [LucidaTypewriter]
+ % \stoptypescript
+
+ % Lucida Bright Sans Typewriter
+
+ \starttypescript [mono] [lucida] [name]
+ \definefontsynonym [Mono] [LucidaSans-Typewriter]
+ \definefontsynonym [MonoBold] [LucidaSans-TypewriterBold]
+ \definefontsynonym [MonoItalic] [LucidaSans-TypewriterOblique]
+ \definefontsynonym [MonoBoldItalic] [LucidaSans-TypewriterBoldOblique]
+ \definefontsynonym [MonoSlanted] [LucidaSans-TypewriterOblique]
+ \definefontsynonym [MonoBoldSlanted] [LucidaSans-TypewriterBoldOblique]
+ \definefontsynonym [MonoCaps] [LucidaSans-Typewriter]
+ \stoptypescript
+
+ % Lucida Calligraphy
+
+ \starttypescript [calligraphy] [lucida] [name]
+ \definefontsynonym [Calligraphy] [LucidaCalligraphy-Italic]
+ \stoptypescript
+
+ % Lucida Casual
+
+ % \starttypescript [casual] [lucida] [name]
+ % % LucidaCasual
+ % % LucidaCasual-Italic
+ % \stoptypescript
+
+ % Lucida Handwriting
+
+ \starttypescript [handwriting] [lucida] [name]
+ \definefontsynonym [Handwriting] [LucidaHandwriting-Italic]
+ \stoptypescript
+
+ % Lucida Fax
+ %
+ % \starttypescript [fax] [lucida] [name]
+ % \definefontsynonym [FaksRegular] [LucidaFax]
+ % \definefontsynonym [FaksBold] [LucidaFax-Demi]
+ % \definefontsynonym [FaksItalic] [LucidaFax-Italic]
+ % \definefontsynonym [FaksBoldItalic] [LucidaFax-DemiItalic]
+ % \stoptypescript
+
+ % Lucida Black Letter
+ %
+ % \starttypescript [blackletter] [lucida] [name]
+ % \definefontsynonym [Blackletter] [LucidaBlackletter]
+ % \stoptypescript
+
+ % Lucida Math
+
+ \starttypescript [math] [lucida] [name]
+ % \definefontsynonym [MathRoman] [LucidaBright]
+ \definefontsynonym [MathRoman] [LucidaNewMath-Roman]
+ \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 !
+ \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]
+ \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]
+ \stoptypescript
+
+ \starttypescript [lucida,lucidabfm,lucidaboldmath] [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]
+ \loadmapfile [lucida.map]
+ \stoptypescript
+
+ \starttypescript [lucida] [texnansi,ec,8r]
+ \definetypeface [lucida] [mm] [math] [lucida] [default] [encoding=\typescripttwo]
+ \stoptypescript
+
+ \starttypescript [lucidabfm] [texnansi,ec,8r]
+ \definetypeface [lucida] [mm] [bfmath] [lucida] [default] [encoding=\typescripttwo]
+ \stoptypescript
+
+ \starttypescript [lucidaboldmath] [texnansi,ec,8r]
+ \definetypeface [lucida] [mm] [boldmath] [lucida] [default] [encoding=\typescripttwo]
+ \stoptypescript
+
+ \starttypescript [lucidabfm] [texnansi,ec,8r,uc]
+ \definetypeface [lucidabfm] [rm] [serif] [lucida] [default] [encoding=\typescripttwo]
+ \definetypeface [lucidabfm] [ss] [sans] [lucida] [default] [encoding=\typescripttwo]
+ \definetypeface [lucidabfm] [tt] [mono] [lucida] [default] [encoding=\typescripttwo]
+ \definetypeface [lucidabfm] [hw] [handwriting] [lucida] [default] [encoding=\typescripttwo]
+ \definetypeface [lucidabfm] [cg] [calligraphy] [lucida] [default] [encoding=\typescripttwo]
+ \definetypeface [lucidabfm] [mm] [bfmath] [lucida] [default] [encoding=\typescripttwo]
+ \loadmapfile [lucida.map]
+ \stoptypescript
+
+ \starttypescript [lucidaboldmath] [texnansi,ec,8r,uc]
+ \definetypeface [lucidaboldmath] [rm] [serif] [lucida] [default] [encoding=\typescripttwo]
+ \definetypeface [lucidaboldmath] [ss] [sans] [lucida] [default] [encoding=\typescripttwo]
+ \definetypeface [lucidaboldmath] [tt] [mono] [lucida] [default] [encoding=\typescripttwo]
+ \definetypeface [lucidaboldmath] [hw] [handwriting] [lucida] [default] [encoding=\typescripttwo]
+ \definetypeface [lucidaboldmath] [cg] [calligraphy] [lucida] [default] [encoding=\typescripttwo]
+ \definetypeface [lucidaboldmath] [mm] [boldmath] [lucida] [default] [encoding=\typescripttwo]
+ \loadmapfile [bh-lucida.map]
+ \stoptypescript
+
+ \starttypescript [lucida,lucidabfm,lucidaboldmath] [texnansi,ec,8r]
+ \usemathcollection[lbr]
+ \quittypescriptscanning % last in the row
+ \stoptypescript
+
+\stoptypescriptcollection
+
+\starttypescriptcollection[postscript]
+
+ \starttypescript [postscript] [ec,texnansi,cs,qx,rm,t5,t2a,t2b,t2c,l7x]
+ \definetypeface [postscript] [rm] [serif] [times] [default] [encoding=\typescripttwo]
+ \definetypeface [postscript] [ss] [sans] [helvetica] [default] [encoding=\typescripttwo,rscale=0.9]
+ \definetypeface [postscript] [tt] [mono] [courier] [default] [encoding=\typescripttwo,rscale=1.1]
+ \definetypeface [postscript] [mm] [math] [times] [default] [encoding=\typescripttwo]
+ \quittypescriptscanning
+ \stoptypescript
+
+\stoptypescriptcollection
+
+\starttypescriptcollection[libertine]
+
+ \starttypescript [serif] [libertine] [ec]
+ \definefontsynonym [Libertine-Regular] [fxlr-t1] [encoding=ec]
+ \definefontsynonym [Libertine-Italic] [fxlri-t1] [encoding=ec]
+ \definefontsynonym [Libertine-Bold] [fxlb-t1] [encoding=ec]
+ \definefontsynonym [Libertine-BoldItalic] [fxlbi-t1] [encoding=ec]
+ \definefontsynonym [Libertine-SmallCaps] [fxlrc-t1] %[encoding=ec]
+ \loadmapfile [libertine.map]
+ \stoptypescript
+
+ \starttypescript [serif] [libertine] [name]
+ \definefontsynonym [Serif] [Libertine-Regular]
+ \definefontsynonym [SerifItalic] [Libertine-Italic]
+ \definefontsynonym [SerifSlanted] [Libertine-Italic]
+ \definefontsynonym [SerifBold] [Libertine-Bold]
+ \definefontsynonym [SerifBoldItalic] [Libertine-BoldItalic]
+ \definefontsynonym [SerifBoldSlanted][Libertine-BoldItalic]
+ \definefontsynonym [SerifCaps] [Libertine-SmallCaps]
+ \stoptypescript
+
+ \starttypescript [libertine] [ec]
+ \definetypeface [libertine] [tt] [mono] [default] [default] [encoding=ec]
+ \definetypeface [libertine] [ss] [sans] [default] [default] [encoding=ec]
+ \definetypeface [libertine] [rm] [serif] [libertine] [default] [encoding=ec]
+ \stoptypescript
+
+\stoptypescriptcollection
+
+\starttypescriptcollection[inconsolata]
+
+ \starttypescript [mono] [inconsolata] [ec]
+ \definefontsynonym [Inconsolata] [ec-inconsolata] [encoding=ec]
+ \pdfmapline{ec-inconsolata Inconsolata "fi4ECEncoding ReEncodeFont" <[fi4-ec.enc <Inconsolata.pfb}
+ \stoptypescript
+
+ \starttypescript [mono] [inconsolata] [name]
+ \definefontsynonym [Mono] [Inconsolata]
+ \stoptypescript
\stoptypescriptcollection
diff --git a/Master/texmf-dist/tex/context/base/type-one.mkiv b/Master/texmf-dist/tex/context/base/type-one.mkiv
index 6f64dff0a4a..fa5d9b08a70 100644
--- a/Master/texmf-dist/tex/context/base/type-one.mkiv
+++ b/Master/texmf-dist/tex/context/base/type-one.mkiv
@@ -11,6 +11,103 @@
%C therefore copyrighted by \PRAGMA. See mreadme.pdf for
%C details.
-% We use open type fonts in \MKIV.
+% We use open type fonts in \MKIV. However we can still use type
+% one fonts but there are not that many useful left that only
+% come in type one.
+
+\starttypescriptcollection[allkindofafm]
+
+ % \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
+
+ % \starttypescript [calligraphy] [chancery] [name]
+ % \definefontsynonym [Calligraphy] [Chancery]
+ % \stoptypescript
+
+ % \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
+
+ % \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
+
+ % \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
+
+ % \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 [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
+
+ % \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]
+ % \stoptypescript
+
+ % \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
+
+\stoptypescriptcollection
\endinput
diff --git a/Master/texmf-dist/tex/context/base/type-otf.mkii b/Master/texmf-dist/tex/context/base/type-otf.mkii
index 869555688b6..1e22a9df244 100644
--- a/Master/texmf-dist/tex/context/base/type-otf.mkii
+++ b/Master/texmf-dist/tex/context/base/type-otf.mkii
@@ -16,519 +16,2017 @@
%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[fallback]
+
+\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
+
+% faster
+%
+% \starttypescript [fallback]
+% \definetypeface [] [rm] [serif] [modern] [default]
+% \definetypeface [] [ss] [sans] [modern] [default]
+% \definetypeface [] [tt] [mono] [modern] [default]
+% \definetypeface [] [mm] [math] [modern] [default]
+% \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
+\starttypescriptcollection[latinmodern]
+
+ %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] [features=none]
+ \definefontsynonym [LMTypewriter9-Regular] [file:lmmono9-regular] [features=none]
+ \definefontsynonym [LMTypewriter10-Regular] [file:lmmono10-regular] [features=none]
+ \definefontsynonym [LMTypewriter12-Regular] [file:lmmono12-regular] [features=none]
+ \definefontsynonym [LMTypewriter10-Italic] [file:lmmono10-italic] [features=none]
+ \definefontsynonym [LMTypewriter10-Oblique] [file:lmmonoslant10-regular] [features=none]
+ \definefontsynonym [LMTypewriter10-CapsRegular] [file:lmmonocaps10-regular] [features=none] % features=smallcaps?
+ \definefontsynonym [LMTypewriter10-CapsOblique] [file:lmmonocaps10-oblique] [features=none]
+
+ \definefontsynonym [LMTypewriter10-Light] [file:lmmonolt10-regular] [features=none]
+ \definefontsynonym [LMTypewriter10-LightOblique] [file:lmmonolt10-oblique] [features=none]
+ \definefontsynonym [LMTypewriter10-LightCondensed] [file:lmmonoltcond10-regular] [features=none]
+ \definefontsynonym [LMTypewriter10-LightCondensedOblique] [file:lmmonoltcond10-oblique] [features=none]
+
+ \definefontsynonym [LMTypewriter10-Dark] [file:lmmonolt10-bold] [features=none]
+ \definefontsynonym [LMTypewriter10-DarkOblique] [file:lmmonolt10-boldoblique] [features=none]
+
+ \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 [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
+
+ \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
+
+ \starttypescript [math] [modern,computer-modern,latin-modern]
+ \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]
+ \definefontsynonym [ComputerModernMath-Roman-Bold] [rm-lmb10]
+ \definefontsynonym [ComputerModernMath-Extension] [lmex10]
+ \definefontsynonym [ComputerModernMath-Italic-Bold] [lmmib10]
+ \definefontsynonym [ComputerModernMath-Symbol-Bold] [lmbsy10]
+ \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 [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 [serif] [simple] [name] % bad, will be changed but in sycn with manuals that use it
+ \definefontsynonym [Simple] [cmvtt10]
+ \setupfontsynonym [Simple] [handling=pure]
+ \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
+\stoptypescriptcollection
-\starttypescript [mono] [modern,latin-modern,modern-vari,latin-modern-vari,modern-cond,latin-modern-cond]
- \definefontsynonym [LMTypewriter8-Regular] [file:lmmono8-regular] [features=none]
- \definefontsynonym [LMTypewriter9-Regular] [file:lmmono9-regular] [features=none]
- \definefontsynonym [LMTypewriter10-Regular] [file:lmmono10-regular] [features=none]
- \definefontsynonym [LMTypewriter12-Regular] [file:lmmono12-regular] [features=none]
- \definefontsynonym [LMTypewriter10-Italic] [file:lmmono10-italic] [features=none]
- \definefontsynonym [LMTypewriter10-Oblique] [file:lmmonoslant10-regular] [features=none]
- \definefontsynonym [LMTypewriter10-CapsRegular] [file:lmmonocaps10-regular] [features=none] % features=smallcaps?
- \definefontsynonym [LMTypewriter10-CapsOblique] [file:lmmonocaps10-oblique] [features=none]
-
- \definefontsynonym [LMTypewriter10-Light] [file:lmmonolt10-regular] [features=none]
- \definefontsynonym [LMTypewriter10-LightOblique] [file:lmmonolt10-oblique] [features=none]
- \definefontsynonym [LMTypewriter10-LightCondensed] [file:lmmonoltcond10-regular] [features=none]
- \definefontsynonym [LMTypewriter10-LightCondensedOblique] [file:lmmonoltcond10-oblique] [features=none]
-
- \definefontsynonym [LMTypewriter10-Dark] [file:lmmonolt10-bold] [features=none]
- \definefontsynonym [LMTypewriter10-DarkOblique] [file:lmmonolt10-boldoblique] [features=none]
-
- \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
+\starttypescriptcollection[concrete]
-\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
+ % Computer Concrete (AMS)
-\starttypescript [math] [modern,computer-modern,latin-modern]
- \definefontsynonym [ComputerModernMath-Roman] [rm-lmr10]
- \definefontsynonym [ComputerModernMath-Extension] [lmex10]
- \definefontsynonym [ComputerModernMath-Italic] [lmmi10]
- \definefontsynonym [ComputerModernMath-Symbol] [lmsy10]
-\stoptypescript
+ \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
-\starttypescript [boldmath,bfmath] [modern,computer-modern,latin-modern]
- \definefontsynonym [ComputerModernMath-Roman-Bold] [rm-lmb10]
- \definefontsynonym [ComputerModernMath-Extension] [lmex10]
- \definefontsynonym [ComputerModernMath-Italic-Bold] [lmmib10]
- \definefontsynonym [ComputerModernMath-Symbol-Bold] [lmbsy10]
-\stoptypescript
+\stoptypescriptcollection
-% Computer Concrete (AMS)
+\starttypescriptcollection[euler]
+
+ \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
+
+ \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
-\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
+\stoptypescriptcollection
-% Euler (AMS)
+\starttypescriptcollection[amssymbols]
-\starttypescript [math] [euler]
- \definefontsynonym [Euler-Roman] [zeurm10]
- \definefontsynonym [Euler-Extension] [zeuex10]
- \definefontsynonym [Euler-Symbol] [zeusm10]
- \definefontsynonym [Euler-Fraktur] [eufm10]
+ \starttypescript [math] [modern,computer-modern,latin-modern,ams] [name]
+ \definefontsynonym [MathAlpha] [AMS-SymbolA]
+ \definefontsynonym [MathBeta] [AMS-SymbolB]
+ \stoptypescript
- \loadmapfile[original-ams-euler.map]
-\stoptypescript
+ \starttypescript [math] [modern,computer-modern,latin-modern,ams]
+ \definefontsynonym [AMS-SymbolA] [msam10]
+ \definefontsynonym [AMS-SymbolB] [msbm10]
+ \stoptypescript
-\starttypescript [boldmath,bfmath] [euler]
- \definefontsynonym [Euler-Roman-Bold] [zeurb10]
- \definefontsynonym [Euler-Extension] [zeuex10]
- \definefontsynonym [Euler-Symbol-Bold] [zeusb10]
- \definefontsynonym [Euler-Fraktur-Bold] [eufb10]
+\stoptypescriptcollection
- \loadmapfile[original-ams-euler.map]
-\stoptypescript
+\starttypescriptcollection[texgyre]
+
+ \definetypescriptprefix [f:pagella] [pagella] \definetypescriptprefix [f:palatino] [pagella]
+ \definetypescriptprefix [f:termes] [termes] \definetypescriptprefix [f:times] [termes]
+ \definetypescriptprefix [f:heros] [heros] \definetypescriptprefix [f:helvetica] [heros]
+ \definetypescriptprefix [f:bonum] [bonum] \definetypescriptprefix [f:bookman] [bonum]
+ \definetypescriptprefix [f:schola] [schola] \definetypescriptprefix [f:schoolbook] [schola]
+ \definetypescriptprefix [f:adventor][adventor] %definetypescriptprefix [f:adventor] [adventor]
+ \definetypescriptprefix [f:cursor] [cursor] \definetypescriptprefix [f:courier] [cursor]
+ \definetypescriptprefix [f:chorus] [chorus] \definetypescriptprefix [f:chancery] [chorus] % not the full set
+
+ % \starttypescript [serif,sans,mono] [adventor,bonum,cursor,heros,pagella,palatino,schola,termes]
+ % \starttypescript [serif] [pagella,palatino,termes,times,bonum,bookman,schola,schoolbook] [name]
+
+ \starttypescript [serif,sans,mono] [adventor,bonum,bookman,cursor,courier,heros,helvetica,pagella,palatino,schola,schoolbook,termes,times]
+ \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=smallcaps]
+ \definefontsynonym [\typescriptprefix{n:\typescripttwo}-ItalicCaps] [file:texgyre\typescriptprefix{f:\typescripttwo}-italic] [features=smallcaps]
+ \definefontsynonym [\typescriptprefix{n:\typescripttwo}-BoldCaps] [file:texgyre\typescriptprefix{f:\typescripttwo}-bold] [features=smallcaps]
+ \definefontsynonym [\typescriptprefix{n:\typescripttwo}-BoldItalicCaps] [file:texgyre\typescriptprefix{f:\typescripttwo}-bolditalic] [features=smallcaps]
+ \stoptypescript
+
+ \starttypescript [serif,calligraphy] [chorus,chancery]
+ \definefontsynonym [TeXGyreChorus-MediumItalic] [file:texgyrechorus-mediumitalic] [features=default]
+ \stoptypescript
+
+ \definetypescriptprefix [n:pagella] [TeXGyrePagella] \definetypescriptprefix [n:palatino] [TeXGyrePagella]
+ \definetypescriptprefix [n:termes] [TeXGyreTermes] \definetypescriptprefix [n:times] [TeXGyreTermes]
+ \definetypescriptprefix [n:heros] [TeXGyreHeros] \definetypescriptprefix [n:helvetica] [TeXGyreHeros]
+ \definetypescriptprefix [n:bonum] [TeXGyreBonum] \definetypescriptprefix [n:bookman] [TeXGyreBonum]
+ \definetypescriptprefix [n:schola] [TeXGyreSchola] \definetypescriptprefix [n:schoolbook] [TeXGyreSchola]
+ \definetypescriptprefix [n:adventor] [TeXGyreAdventor] %definetypescriptprefix [n:adventor] [TeXGyreAdventor]
+ \definetypescriptprefix [n:cursor] [TeXGyreCursor] \definetypescriptprefix [n:courier] [TeXGyreCursor]
+ \definetypescriptprefix [n:chorus] [TeXGyreChorus] \definetypescriptprefix [n:chancery] [TeXGyreChorus] % not the full set
+
+ \starttypescript [serif] [pagella,palatino,termes,times,bonum,bookman,schola,schoolbook] [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 [SerifSlanted] [SerifItalic]
+ \definefontsynonym [SerifBoldSlanted] [SerifBoldItalic]
+ \definefontsynonym [SerifCaps] [\typescriptprefix{n:\typescripttwo}-Caps]
+
+ \definefontvariant [Serif][osf][Caps]
+ \definefontvariant [Serif][sc] [Caps]
+
+ \definefontsynonym [SerifRegular] [Serif]
+ \definefontsynonym [SerifRegularCaps] [SerifCaps]
+ \definefontsynonym [SerifItalicCaps] [\typescriptprefix{n:\typescripttwo}-ItalicCaps]
+ \definefontsynonym [SerifBoldCaps] [\typescriptprefix{n:\typescripttwo}-BoldCaps]
+ \definefontsynonym [SerifBoldItalicCaps] [\typescriptprefix{n:\typescripttwo}-BoldItalicCaps]
+ \definefontsynonym [SerifSlantedCaps] [SerifItalicCaps]
+ \definefontsynonym [SerifBoldSlantedCaps] [SerifBoldItalicCaps]
+ \definefontsynonym [SerifCapsCaps] [SerifCaps]
+ \stoptypescript
+
+ \starttypescript [serif] [chorus,chancery] [name]
+ \definefontsynonym [SerifMediumItalic] [TeXGyreChorus-MediumItalic]
+ \definefontsynonym [Serif] [SerifMediumItalic]
+ \definefontsynonym [SerifItalic] [SerifMediumItalic]
+ \definefontsynonym [SerifBold] [SerifMediumItalic]
+ \definefontsynonym [SerifBoldItalic] [SerifMediumItalic]
+ \definefontsynonym [SerifSlanted] [SerifMediumItalic]
+ \definefontsynonym [SerifBoldSlanted] [SerifMediumItalic]
+ \definefontsynonym [SerifCaps] [SerifMediumItalic]
+ \stoptypescript
+
+ \starttypescript [calligraphy] [chorus,chancery] [name]
+ \definefontsynonym [Calligraphy] [TeXGyreChorus-MediumItalic]
+ \stoptypescript
+
+ \starttypescript [sans] [heros,helvetica,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 [SansSlanted] [SansItalic]
+ \definefontsynonym [SansBoldSlanted] [SansBoldItalic]
+ \definefontsynonym [SansCaps] [\typescriptprefix{n:\typescripttwo}-Caps]
+
+ \definefontvariant [Sans][osf][Caps]
+ \definefontvariant [Sans][sc] [Caps]
+
+ \definefontsynonym [SansRegular] [Sans]
+ \definefontsynonym [SansRegularCaps] [SansCaps]
+ \definefontsynonym [SansItalicCaps] [\typescriptprefix{n:\typescripttwo}-ItalicCaps]
+ \definefontsynonym [SansBoldCaps] [\typescriptprefix{n:\typescripttwo}-BoldCaps]
+ \definefontsynonym [SansBoldItalicCaps] [\typescriptprefix{n:\typescripttwo}-BoldItalicCaps]
+ \definefontsynonym [SansSlantedCaps] [SansItalicCaps]
+ \definefontsynonym [SansBoldSlantedCaps] [SansBoldItalicCaps]
+ \definefontsynonym [SansCapsCaps] [SansCaps]
+ \stoptypescript
+
+ \starttypescript [mono] [cursor,courier] [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]
+
+ \definefontvariant [Mono][osf][Caps]
+ \definefontvariant [Mono][sc] [Caps]
+
+ \definefontsynonym [MonoRegular] [Mono]
+ \definefontsynonym [MonoRegularCaps] [MonoCaps]
+ \definefontsynonym [MonoItalicCaps] [\typescriptprefix{n:\typescripttwo}-ItalicCaps]
+ \definefontsynonym [MonoBoldCaps] [\typescriptprefix{n:\typescripttwo}-BoldCaps]
+ \definefontsynonym [MonoBoldItalicCaps] [\typescriptprefix{n:\typescripttwo}-BoldItalicCaps]
+ \definefontsynonym [MonoSlantedCaps] [MonoItalicCaps]
+ \definefontsynonym [MonoBoldSlantedCaps] [MonoBoldItalicCaps]
+ \definefontsynonym [MonoCapsCaps] [MonoCaps]
+ \stoptypescript
+
+ \starttypescript [times,termes]
+ \definetypeface [\typescriptone] [rm] [serif] [\typescriptone] [default]
+ \definetypeface [\typescriptone] [ss] [sans] [helvetica] [default] [rscale=0.9]
+ \definetypeface [\typescriptone] [tt] [mono] [modern] [default] [rscale=1.05]
+ \definetypeface [\typescriptone] [mm] [math] [times] [default]
+ \quittypescriptscanning
+ \stoptypescript
+
+ \starttypescript [palatino,pagella]
+ \definetypeface [\typescriptone] [rm] [serif] [\typescriptone] [default]
+ \definetypeface [\typescriptone] [ss] [sans] [modern] [default] [rscale=1.075]
+ \definetypeface [\typescriptone] [tt] [mono] [modern] [default] [rscale=1.075]
+ \definetypeface [\typescriptone] [mm] [math] [palatino] [default]
+ \quittypescriptscanning
+ \stoptypescript
+
+ \starttypescript [schoolbook,schola]
+ \definetypeface [\typescriptone] [rm] [serif] [\typescriptone] [default]
+ \definetypeface [\typescriptone] [ss] [sans] [modern] [default] [rscale=1.1]
+ \definetypeface [\typescriptone] [tt] [mono] [modern] [default] [rscale=1.1]
+ \definetypeface [\typescriptone] [mm] [math] [modern] [default] [rscale=1.1]
+ \quittypescriptscanning
+ \stoptypescript
+
+ \starttypescript [bookman,bonum]
+ \definetypeface [\typescriptone] [rm] [serif] [\typescriptone] [default]
+ \definetypeface [\typescriptone] [ss] [sans] [modern] [default] [rscale=1.1]
+ \definetypeface [\typescriptone] [tt] [mono] [modern] [default] [rscale=1.1]
+ \definetypeface [\typescriptone] [mm] [math] [modern] [default] [rscale=1.1]
+ \quittypescriptscanning
+ \stoptypescript
+
+ \starttypescript [chancery,chorus]
+ \definetypeface [\typescriptone] [rm] [serif] [\typescriptone] [default]
+ \definetypeface [\typescriptone] [ss] [sans] [modern] [default]
+ \definetypeface [\typescriptone] [tt] [mono] [modern] [default]
+ \definetypeface [\typescriptone] [mm] [math] [modern] [default]
+ \quittypescriptscanning
+ \stoptypescript
+
+ \starttypescript [helvetica,heros]
+ \definetypeface [\typescriptone] [ss] [sans] [\typescriptone] [default]
+ \definetypeface [\typescriptone] [rm] [serif] [modern] [default] [rscale=1.15]
+ \definetypeface [\typescriptone] [tt] [mono] [modern] [default] [rscale=1.15]
+ \definetypeface [\typescriptone] [mm] [math] [modern] [default] [rscale=1.15]
+ \quittypescriptscanning
+ \stoptypescript
+
+ \starttypescript [avantgarde,adventor]
+ \definetypeface [\typescriptone] [ss] [sans] [adventor] [default]
+ \definetypeface [\typescriptone] [rm] [serif] [modern] [default] [rscale=1.15]
+ \definetypeface [\typescriptone] [tt] [mono] [modern] [default] [rscale=1.15]
+ \definetypeface [\typescriptone] [mm] [math] [modern] [default]
+ \quittypescriptscanning
+ \stoptypescript
+
+ \starttypescript [courier,cursor]
+ \definetypeface [\typescriptone] [tt] [mono] [\typescriptone] [default]
+ \definetypeface [\typescriptone] [rm] [serif] [modern] [default]
+ \definetypeface [\typescriptone] [ss] [sans] [modern] [default]
+ \definetypeface [\typescriptone] [mm] [math] [modern] [default]
+ \quittypescriptscanning
+ \stoptypescript
-% AMS (AMS)
+\stoptypescriptcollection
-\starttypescript [math] [modern,computer-modern,latin-modern,ams]
- \definefontsynonym [AMS-SymbolA] [msam10]
- \definefontsynonym [AMS-SymbolB] [msbm10]
-\stoptypescript
+\starttypescriptcollection[xmath]
+
+ \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
+
+ \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
-% TeXGyre
-
-\definetypescriptprefix [f:pagella] [pagella] \definetypescriptprefix [f:palatino] [pagella]
-\definetypescriptprefix [f:termes] [termes] \definetypescriptprefix [f:times] [termes]
-\definetypescriptprefix [f:heros] [heros] \definetypescriptprefix [f:helvetica] [heros]
-\definetypescriptprefix [f:bonum] [bonum] \definetypescriptprefix [f:bookman] [bonum]
-\definetypescriptprefix [f:schola] [schola] \definetypescriptprefix [f:schoolbook] [schola]
-\definetypescriptprefix [f:adventor][adventor] %definetypescriptprefix [f:adventor] [adventor]
-\definetypescriptprefix [f:cursor] [cursor] \definetypescriptprefix [f:courier] [cursor]
-\definetypescriptprefix [f:chorus] [chorus] \definetypescriptprefix [f:chancery] [chorus] % not the full set
-
-% name definitions & prefixes
-% \starttypescript [serif,sans,mono] [adventor,bonum,cursor,heros,pagella,palatino,schola,termes]
-% \starttypescript [serif] [pagella,palatino,termes,times,bonum,bookman,schola,schoolbook] [name]
-
-\starttypescript [serif,sans,mono] [adventor,bonum,bookman,cursor,courier,heros,helvetica,pagella,palatino,schola,schoolbook,termes,times]
- \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=smallcaps]
- \definefontsynonym [\typescriptprefix{n:\typescripttwo}-ItalicCaps] [file:texgyre\typescriptprefix{f:\typescripttwo}-italic] [features=smallcaps]
- \definefontsynonym [\typescriptprefix{n:\typescripttwo}-BoldCaps] [file:texgyre\typescriptprefix{f:\typescripttwo}-bold] [features=smallcaps]
- \definefontsynonym [\typescriptprefix{n:\typescripttwo}-BoldItalicCaps] [file:texgyre\typescriptprefix{f:\typescripttwo}-bolditalic] [features=smallcaps]
-\stoptypescript
+\stoptypescriptcollection
-\starttypescript [serif,calligraphy] [chorus,chancery]
- \definefontsynonym [TeXGyreChorus-MediumItalic] [file:texgyrechorus-mediumitalic] [features=default]
-\stoptypescript
+\starttypescriptcollection[antykwa]
+
+ % 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
+
+ \starttypescript [antykwa-torunska,antykwa-torunska-light,antykwa-torunska-cond,antykwa-torunska-lightcond]
+ \definetypeface[antykwa][rm][serif][\typescriptone] [default]
+ \definetypeface[antykwa][ss][sans] [modern] [default,rscale=1.05]
+ \definetypeface[antykwa][tt][mono] [modern] [default,rscale=1.05]
+ \definetypeface[antykwa][mm][math] [\typescriptone] [default]
+ \quittypescriptscanning
+ \stoptypescript
+
+ \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 (GUST)
+
+ % \starttypescript [serif] [antykwa-poltawskiego]
+ % \definefontsynonym [AntykwaPoltawskiego-Regular] [antpr]
+ % \definefontsynonym [AntykwaPoltawskiego-Bold] [antpb]
+ % \definefontsynonym [AntykwaPoltawskiego-Italic] [antpri]
+ % \definefontsynonym [AntykwaPoltawskiego-BoldItalic] [antpbi]
+ % \stoptypescript
+
+ % \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
+
+ \starttypescript [serif] [antykwa-poltawskiego,antykwa-poltawskiego-light]
+ \definefontsynonym [AntykwaPoltawskiego-Condensed-Light] [\s!file:AntPoltLtCond-Regular] [\s!features=\s!default]
+ \definefontsynonym [AntykwaPoltawskiego-Condensed-LightItalic] [\s!file:AntPoltLtCond-Italic] [\s!features=\s!default]
+ \definefontsynonym [AntykwaPoltawskiego-Condensed-Regular] [\s!file:AntPoltCond-Regular] [\s!features=\s!default]
+ \definefontsynonym [AntykwaPoltawskiego-Condensed-Italic] [\s!file:AntPoltCond-Italic] [\s!features=\s!default]
+ \definefontsynonym [AntykwaPoltawskiego-Condensed-Medium] [\s!file:AntPoltMdCond-Bold] [\s!features=\s!default]
+ \definefontsynonym [AntykwaPoltawskiego-Condensed-MediumItalic] [\s!file:AntPoltMdCond-BoldItalic] [\s!features=\s!default]
+ \definefontsynonym [AntykwaPoltawskiego-Condensed-Bold] [\s!file:AntPoltCond-Bold] [\s!features=\s!default]
+ \definefontsynonym [AntykwaPoltawskiego-Condensed-BoldItalic] [\s!file:AntPoltCond-BoldItalic] [\s!features=\s!default]
+
+ \definefontsynonym [AntykwaPoltawskiego-Condensed-CapsLight] [\s!file:AntPoltLtCond-Regular] [\s!features=\s!smallcaps]
+ \definefontsynonym [AntykwaPoltawskiego-Condensed-CapsLightItalic] [\s!file:AntPoltLtCond-Italic] [\s!features=\s!smallcaps]
+ \definefontsynonym [AntykwaPoltawskiego-Condensed-CapsRegular] [\s!file:AntPoltCond-Regular] [\s!features=\s!smallcaps]
+ \definefontsynonym [AntykwaPoltawskiego-Condensed-CapsItalic] [\s!file:AntPoltCond-Italic] [\s!features=\s!smallcaps]
+ \definefontsynonym [AntykwaPoltawskiego-Condensed-CapsMedium] [\s!file:AntPoltMdCond-Bold] [\s!features=\s!smallcaps]
+ \definefontsynonym [AntykwaPoltawskiego-Condensed-CapsMediumItalic] [\s!file:AntPoltMdCond-BoldItalic] [\s!features=\s!smallcaps]
+ \definefontsynonym [AntykwaPoltawskiego-Condensed-CapsBold] [\s!file:AntPoltCond-Bold] [\s!features=\s!smallcaps]
+ \definefontsynonym [AntykwaPoltawskiego-Condensed-CapsBoldItalic] [\s!file:AntPoltCond-BoldItalic] [\s!features=\s!smallcaps]
+
+ \definefontsynonym [AntykwaPoltawskiego-SemiCondensed-Regular] [\s!file:AntPoltLtSemiCond-Regular] [\s!features=\s!default]
+ \definefontsynonym [AntykwaPoltawskiego-SemiCondensed-Italic] [\s!file:AntPoltLtSemiCond-Italic] [\s!features=\s!default]
+ \definefontsynonym [AntykwaPoltawskiego-SemiCondensed-Regular] [\s!file:AntPoltSemiCond-Regular] [\s!features=\s!default]
+ \definefontsynonym [AntykwaPoltawskiego-SemiCondensed-Italic] [\s!file:AntPoltSemiCond-Italic] [\s!features=\s!default]
+ \definefontsynonym [AntykwaPoltawskiego-SemiCondensed-Medium] [\s!file:AntPoltMdSemiCond-Bold] [\s!features=\s!default]
+ \definefontsynonym [AntykwaPoltawskiego-SemiCondensed-MediumItalic] [\s!file:AntPoltMdSemiCond-BdItalic] [\s!features=\s!default]
+ \definefontsynonym [AntykwaPoltawskiego-SemiCondensed-Bold] [\s!file:AntPoltSemiCond-Bold] [\s!features=\s!default]
+ \definefontsynonym [AntykwaPoltawskiego-SemiCondensed-BoldItalic] [\s!file:AntPoltSemiCond-BoldItalic] [\s!features=\s!default]
+
+ \definefontsynonym [AntykwaPoltawskiego-SemiCondensed-CapsRegular] [\s!file:AntPoltLtSemiCond-Regular] [\s!features=\s!smallcaps]
+ \definefontsynonym [AntykwaPoltawskiego-SemiCondensed-CapsItalic] [\s!file:AntPoltLtSemiCond-Italic] [\s!features=\s!smallcaps]
+ \definefontsynonym [AntykwaPoltawskiego-SemiCondensed-CapsRegular] [\s!file:AntPoltSemiCond-Regular] [\s!features=\s!smallcaps]
+ \definefontsynonym [AntykwaPoltawskiego-SemiCondensed-CapsItalic] [\s!file:AntPoltSemiCond-Italic] [\s!features=\s!smallcaps]
+ \definefontsynonym [AntykwaPoltawskiego-SemiCondensed-CapsMedium] [\s!file:AntPoltMdSemiCond-Bold] [\s!features=\s!smallcaps]
+ \definefontsynonym [AntykwaPoltawskiego-SemiCondensed-CapsMediumItalic] [\s!file:AntPoltMdSemiCond-BdItalic] [\s!features=\s!smallcaps]
+ \definefontsynonym [AntykwaPoltawskiego-SemiCondensed-CapsBold] [\s!file:AntPoltSemiCond-Bold] [\s!features=\s!smallcaps]
+ \definefontsynonym [AntykwaPoltawskiego-SemiCondensed-CapsBoldItalic] [\s!file:AntPoltSemiCond-BoldItalic] [\s!features=\s!smallcaps]
+
+ \definefontsynonym [AntykwaPoltawskiego-Light] [\s!file:AntPoltLt-Regular] [\s!features=\s!default]
+ \definefontsynonym [AntykwaPoltawskiego-LightItalic] [\s!file:AntPoltLt-Italic] [\s!features=\s!default]
+ \definefontsynonym [AntykwaPoltawskiego-Regular] [\s!file:AntPolt-Regular] [\s!features=\s!default]
+ \definefontsynonym [AntykwaPoltawskiego-Italic] [\s!file:AntPolt-Italic] [\s!features=\s!default]
+ \definefontsynonym [AntykwaPoltawskiego-Medium] [\s!file:AntPoltMd-Bold] [\s!features=\s!default]
+ \definefontsynonym [AntykwaPoltawskiego-MediumItalic] [\s!file:AntPoltMd-BoldItalic] [\s!features=\s!default]
+ \definefontsynonym [AntykwaPoltawskiego-Bold] [\s!file:AntPolt-Bold] [\s!features=\s!default]
+ \definefontsynonym [AntykwaPoltawskiego-BoldItalic] [\s!file:AntPolt-BoldItalic] [\s!features=\s!default]
+
+ \definefontsynonym [AntykwaPoltawskiego-CapsLight] [\s!file:AntPoltLt-Regular] [\s!features=\s!smallcaps]
+ \definefontsynonym [AntykwaPoltawskiego-CapsLightItalic] [\s!file:AntPoltLt-Italic] [\s!features=\s!smallcaps]
+ \definefontsynonym [AntykwaPoltawskiego-CapsRegular] [\s!file:AntPolt-Regular] [\s!features=\s!smallcaps]
+ \definefontsynonym [AntykwaPoltawskiego-CapsItalic] [\s!file:AntPolt-Italic] [\s!features=\s!smallcaps]
+ \definefontsynonym [AntykwaPoltawskiego-CapsMedium] [\s!file:AntPoltMd-Bold] [\s!features=\s!smallcaps]
+ \definefontsynonym [AntykwaPoltawskiego-CapsMediumItalic] [\s!file:AntPoltMd-BoldItalic] [\s!features=\s!smallcaps]
+ \definefontsynonym [AntykwaPoltawskiego-CapsBold] [\s!file:AntPolt-Bold] [\s!features=\s!smallcaps]
+ \definefontsynonym [AntykwaPoltawskiego-CapsBoldItalic] [\s!file:AntPolt-BoldItalic] [\s!features=\s!smallcaps]
+
+ \definefontsynonym [AntykwaPoltawskiego-SemiExtended-Light] [\s!file:AntPoltLtSemiExtd-Regular] [\s!features=\s!default]
+ \definefontsynonym [AntykwaPoltawskiego-SemiExtended-LightItalic] [\s!file:AntPoltLtSemiExtd-Italic] [\s!features=\s!default]
+ \definefontsynonym [AntykwaPoltawskiego-SemiExtended-Regular] [\s!file:AntPoltSemiExtd-Regular] [\s!features=\s!default]
+ \definefontsynonym [AntykwaPoltawskiego-SemiExtended-Italic] [\s!file:AntPoltSemiExtd-Italic] [\s!features=\s!default]
+ \definefontsynonym [AntykwaPoltawskiego-SemiExtended-Medium] [\s!file:AntPoltMdSemiExtd-Bold] [\s!features=\s!default]
+ \definefontsynonym [AntykwaPoltawskiego-SemiExtended-MediumItalic] [\s!file:AntPoltMdSemiExtd-BdItalic] [\s!features=\s!default]
+ \definefontsynonym [AntykwaPoltawskiego-SemiExtended-Bold] [\s!file:AntPoltSemiExtd-Bold] [\s!features=\s!default]
+ \definefontsynonym [AntykwaPoltawskiego-SemiExtended-BoldItalic] [\s!file:AntPoltSemiExtd-BoldItalic] [\s!features=\s!default]
+
+ \definefontsynonym [AntykwaPoltawskiego-SemiExtended-CapsLight] [\s!file:AntPoltLtSemiExtd-Regular] [\s!features=\s!smallcaps]
+ \definefontsynonym [AntykwaPoltawskiego-SemiExtended-CapsLightItalic] [\s!file:AntPoltLtSemiExtd-Italic] [\s!features=\s!smallcaps]
+ \definefontsynonym [AntykwaPoltawskiego-SemiExtended-CapsRegular] [\s!file:AntPoltSemiExtd-Regular] [\s!features=\s!smallcaps]
+ \definefontsynonym [AntykwaPoltawskiego-SemiExtended-CapsItalic] [\s!file:AntPoltSemiExtd-Italic] [\s!features=\s!smallcaps]
+ \definefontsynonym [AntykwaPoltawskiego-SemiExtended-CapsMedium] [\s!file:AntPoltMdSemiExtd-Bold] [\s!features=\s!smallcaps]
+ \definefontsynonym [AntykwaPoltawskiego-SemiExtended-CapsMediumItalic] [\s!file:AntPoltMdSemiExtd-BdItalic] [\s!features=\s!smallcaps]
+ \definefontsynonym [AntykwaPoltawskiego-SemiExtended-CapsBold] [\s!file:AntPoltSemiExtd-Bold] [\s!features=\s!smallcaps]
+ \definefontsynonym [AntykwaPoltawskiego-SemiExtended-CapsBoldItalic] [\s!file:AntPoltSemiExtd-BoldItalic] [\s!features=\s!smallcaps]
+
+ \definefontsynonym [AntykwaPoltawskiego-Extended-Light] [\s!file:AntPoltLtExtd-Regular] [\s!features=\s!default]
+ \definefontsynonym [AntykwaPoltawskiego-Extended-LightItalic] [\s!file:AntPoltLtExtd-Italic] [\s!features=\s!default]
+ \definefontsynonym [AntykwaPoltawskiego-Extended-Regular] [\s!file:AntPoltExtd-Regular] [\s!features=\s!default]
+ \definefontsynonym [AntykwaPoltawskiego-Extended-Italic] [\s!file:AntPoltExtd-Italic] [\s!features=\s!default]
+ \definefontsynonym [AntykwaPoltawskiego-Extended-Medium] [\s!file:AntPoltMdExtd-Bold] [\s!features=\s!default]
+ \definefontsynonym [AntykwaPoltawskiego-Extended-MediumItalic] [\s!file:AntPoltMdExtd-BoldItalic] [\s!features=\s!default]
+ \definefontsynonym [AntykwaPoltawskiego-Extended-Bold] [\s!file:AntPoltExtd-Bold] [\s!features=\s!default]
+ \definefontsynonym [AntykwaPoltawskiego-Extended-BoldItalic] [\s!file:AntPoltExtd-BoldItalic] [\s!features=\s!default]
+
+ \definefontsynonym [AntykwaPoltawskiego-Extended-CapsLight] [\s!file:AntPoltLtExtd-Regular] [\s!features=\s!smallcaps]
+ \definefontsynonym [AntykwaPoltawskiego-Extended-CapsLightItalic] [\s!file:AntPoltLtExtd-Italic] [\s!features=\s!smallcaps]
+ \definefontsynonym [AntykwaPoltawskiego-Extended-CapsRegular] [\s!file:AntPoltExtd-Regular] [\s!features=\s!smallcaps]
+ \definefontsynonym [AntykwaPoltawskiego-Extended-CapsItalic] [\s!file:AntPoltExtd-Italic] [\s!features=\s!smallcaps]
+ \definefontsynonym [AntykwaPoltawskiego-Extended-CapsMedium] [\s!file:AntPoltMdExtd-Bold] [\s!features=\s!smallcaps]
+ \definefontsynonym [AntykwaPoltawskiego-Extended-CapsMediumItalic] [\s!file:AntPoltMdExtd-BoldItalic] [\s!features=\s!smallcaps]
+ \definefontsynonym [AntykwaPoltawskiego-Extended-CapsBold] [\s!file:AntPoltExtd-Bold] [\s!features=\s!smallcaps]
+ \definefontsynonym [AntykwaPoltawskiego-Extended-CapsBoldItalic] [\s!file:AntPoltExtd-BoldItalic] [\s!features=\s!smallcaps]
+ \stoptypescript
+
+ \starttypescript [serif] [antykwa-poltawskiego] [name]
+ \definefontsynonym [Serif] [AntykwaPoltawskiego-Regular]
+ \definefontsynonym [SerifBold] [AntykwaPoltawskiego-Bold]
+ \definefontsynonym [SerifItalic] [AntykwaPoltawskiego-Italic]
+ \definefontsynonym [SerifSlanted] [AntykwaPoltawskiego-Italic]
+ \definefontsynonym [SerifBoldItalic] [AntykwaPoltawskiego-BoldItalic]
+ \definefontsynonym [SerifBoldSlanted] [AntykwaPoltawskiego-BoldItalic]
+ \definefontsynonym [SerifCaps] [AntykwaPoltawskiego-CapsRegular]
+ \stoptypescript
+
+ \starttypescript [serif] [antykwa-poltawskiego-light] [name]
+ \definefontsynonym [Serif] [AntykwaPoltawskiego-Light]
+ \definefontsynonym [SerifBold] [AntykwaPoltawskiego-Medium]
+ \definefontsynonym [SerifItalic] [AntykwaPoltawskiego-LightItalic]
+ \definefontsynonym [SerifSlanted] [AntykwaPoltawskiego-LightItalic]
+ \definefontsynonym [SerifBoldItalic] [AntykwaPoltawskiego-MediumItalic]
+ \definefontsynonym [SerifBoldSlanted] [AntykwaPoltawskiego-MediumItalic]
+ \definefontsynonym [SerifCaps] [AntykwaPoltawskiego-CapsLight]
+ \stoptypescript
+
+ % condensed and extended variants are still missing
+
+ \starttypescript [antykwa-poltawskiego,antykwa-poltawskiego-light]
+ \definetypeface [\typescriptone] [rm] [serif] [\typescriptone] [default]
+ \definetypeface [\typescriptone] [ss] [sans] [modern] [default] [rscale=1.05]
+ \definetypeface [\typescriptone] [tt] [mono] [modern] [default] [rscale=1.05]
+ \definetypeface [\typescriptone] [mm] [math] [modern] [default] [rscale=1.05]
+ \quittypescriptscanning
+ \stoptypescript
-% Times Math (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
+\stoptypescriptcollection
-% 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
+\starttypescriptcollection[iwona]
+
+ % 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
+
+ \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
+
+ \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
-% 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
+\stoptypescriptcollection
-\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
+\starttypescriptcollection[kurier]
+
+ \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
+
+ \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
-\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
+\stoptypescriptcollection
-\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
+\starttypescriptcollection[symbols]
-\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
+ \definefontsynonym [ZapfDingbats] [uzdr]
+ \definefontsynonym [RalfSmithFormalScript] [rsfs10]
+ \definefontsynonym [MartinVogel] [fmvr8x]
+ \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
+\stoptypescriptcollection
-% Antykwa Poltawskiego (GUST)
+\starttypescriptcollection[charter]
-\starttypescript [serif] [antykwa-poltawskiego]
- \definefontsynonym [AntykwaPoltawskiego-Regular] [antpr]
- \definefontsynonym [AntykwaPoltawskiego-Bold] [antpb]
- \definefontsynonym [AntykwaPoltawskiego-Italic] [antpri]
- \definefontsynonym [AntykwaPoltawskiego-BoldItalic] [antpbi]
-\stoptypescript
+ % is this ok?
-% 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]
+ \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] [Charter-Roman] % not present
+ \stoptypescript
-\stoptypescript
+\stoptypescriptcollection
-\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
+\starttypescriptcollection[postscript]
-\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 [postscript]
+ \definetypeface [postscript] [rm] [serif] [times] [default]
+ \definetypeface [postscript] [ss] [sans] [helvetica] [default] [rscale=0.9]
+ \definetypeface [postscript] [tt] [mono] [courier] [default] [rscale=1.1]
+ \definetypeface [postscript] [mm] [math] [times] [default]
+ \quittypescriptscanning
+ \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
+\stoptypescriptcollection
-\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
+\starttypescriptcollection[lucida]
-\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
+ \definetypescriptprefix [e:ec] [8t]
+ \definetypescriptprefix [e:texnansi] [8y]
+ \definetypescriptprefix [e:8r] [8r]
-% 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
+ % Lucida Bright
-\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 [serif] [lucida] [ec,texnansi,8r]
+ \definefontsynonym [\typescriptthree-lbr] [hlhr\typescriptprefix{e:\typescriptthree}] [encoding=\typescriptthree] % LucidaBright
+ \definefontsynonym [\typescriptthree-lbd] [hlhb\typescriptprefix{e:\typescriptthree}] [encoding=\typescriptthree] % LucidaBright-Demi
+ \definefontsynonym [\typescriptthree-lbi] [hlhri\typescriptprefix{e:\typescriptthree}] [encoding=\typescriptthree] % LucidaBright-Italic
+ \definefontsynonym [\typescriptthree-lbdi] [hlhbi\typescriptprefix{e:\typescriptthree}] [encoding=\typescriptthree] % LucidaBright-DemiItalic
+ \definefontsynonym [\typescriptthree-lbsl] [hlhro\typescriptprefix{e:\typescriptthree}] [encoding=\typescriptthree] % LucidaBright-Oblique
+ \definefontsynonym [\typescriptthree-lbrsc] [hlhrc\typescriptprefix{e:\typescriptthree}] [encoding=\typescriptthree] % LucidaBrightSmallcaps
+ \definefontsynonym [\typescriptthree-lbdsc] [hlhbc\typescriptprefix{e:\typescriptthree}] [encoding=\typescriptthree] % LucidaBrightSmallcaps-Demi
-\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
+ \definefontsynonym [LucidaBright] [\typescriptthree-lbr] [encoding=\typescriptthree]
+ \definefontsynonym [LucidaBright-Demi] [\typescriptthree-lbd] [encoding=\typescriptthree]
+ \definefontsynonym [LucidaBright-Italic] [\typescriptthree-lbi] [encoding=\typescriptthree]
+ \definefontsynonym [LucidaBright-DemiItalic] [\typescriptthree-lbdi] [encoding=\typescriptthree]
+ \definefontsynonym [LucidaBright-Oblique] [\typescriptthree-lbsl] [encoding=\typescriptthree]
+ \definefontsynonym [LucidaBrightSmallcaps] [\typescriptthree-lbrsc] [encoding=\typescriptthree]
+ \definefontsynonym [LucidaBrightSmallcaps-Demi] [\typescriptthree-lbdsc] [encoding=\typescriptthree]
-\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
+ \loadmapfile[lucida.map]
+ \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
+ % Lucida Bright Sans
-\starttypescript [iwona,iwona-light,iwona-medium,iwona-heavy]
- \definetypeface[\typescriptone][ss][sans] [\typescriptone] [default]
- \definetypeface[\typescriptone][rm][serif][modern] [default]
- \definetypeface[\typescriptone][tt][mono] [modern] [default][rscale=1.05]
- \definetypeface[\typescriptone][mm][math] [\typescriptone] [default][text=ss]
- \quittypescriptscanning
-\stoptypescript
+ \starttypescript [sans] [lucida] [ec,texnansi,8r]
+ \definefontsynonym [\typescriptthree-lsr] [hlsr\typescriptprefix{e:\typescriptthree}] [encoding=\typescriptthree] % LucidaSans
+ \definefontsynonym [\typescriptthree-lsd] [hlsb\typescriptprefix{e:\typescriptthree}] [encoding=\typescriptthree] % LucidaSans-Demi
+ \definefontsynonym [\typescriptthree-lsb] [hlsu\typescriptprefix{e:\typescriptthree}] [encoding=\typescriptthree] % LucidaSans-Bold
+ \definefontsynonym [\typescriptthree-lsi] [hlsri\typescriptprefix{e:\typescriptthree}] [encoding=\typescriptthree] % LucidaSans-Italic
+ \definefontsynonym [\typescriptthree-lsdi] [hlsbi\typescriptprefix{e:\typescriptthree}] [encoding=\typescriptthree] % LucidaSans-DemiItalic
+ \definefontsynonym [\typescriptthree-lsbi] [hlsui\typescriptprefix{e:\typescriptthree}] [encoding=\typescriptthree] % LucidaSans-BoldItalic
-% Whatever else we need:
+ \definefontsynonym [LucidaSans] [\typescriptthree-lsr] [encoding=\typescriptthree]
+ \definefontsynonym [LucidaSans-Demi] [\typescriptthree-lsd] [encoding=\typescriptthree]
+ \definefontsynonym [LucidaSans-Bold] [\typescriptthree-lsb] [encoding=\typescriptthree]
+ \definefontsynonym [LucidaSans-Italic] [\typescriptthree-lsi] [encoding=\typescriptthree]
+ \definefontsynonym [LucidaSans-DemiItalic] [\typescriptthree-lsdi] [encoding=\typescriptthree]
+ \definefontsynonym [LucidaSans-BoldItalic] [\typescriptthree-lsbi] [encoding=\typescriptthree]
-\starttypescript
- \definefontsynonym [ZapfDingbats] [uzdr]
- \definefontsynonym [RalfSmithFormalScript] [rsfs10]
- \definefontsynonym [MartinVogel] [fmvr8x]
-\stoptypescript
+ \loadmapfile[lucida.map]
+ \stoptypescript
-% Temp here
+ % Lucida Bright Typewriter
-\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] [Charter-Roman] % not present
-\stoptypescript
+ \starttypescript [mono] [lucida] [ec,texnansi,8r]
+ \definefontsynonym [\typescriptthree-lbtr] [hlcrt\typescriptprefix{e:\typescriptthree}] [encoding=\typescriptthree] % LucidaTypewriter
+ \definefontsynonym [\typescriptthree-lbtb] [hlcbt\typescriptprefix{e:\typescriptthree}] [encoding=\typescriptthree] % LucidaTypewriterBold
+ \definefontsynonym [\typescriptthree-lbto] [hlcrot\typescriptprefix{e:\typescriptthree}] [encoding=\typescriptthree] % LucidaTypewriterOblique
+ \definefontsynonym [\typescriptthree-lbtbo] [hlcbot\typescriptprefix{e:\typescriptthree}] [encoding=\typescriptthree] % LucidaTypewriterBoldOblique
+
+ \definefontsynonym [LucidaTypewriter] [\typescriptthree-lbtr] [encoding=\typescriptthree]
+ \definefontsynonym [LucidaTypewriterBold] [\typescriptthree-lbtb] [encoding=\typescriptthree]
+ \definefontsynonym [LucidaTypewriterOblique] [\typescriptthree-lbto] [encoding=\typescriptthree]
+ \definefontsynonym [LucidaTypewriterBoldOblique] [\typescriptthree-lbtbo] [encoding=\typescriptthree]
+
+ \loadmapfile[lucida.map]
+ \stoptypescript
+
+ % Lucida Bright Sans Typewriter
+
+ \starttypescript [mono] [lucida] [ec,texnansi,8r]
+ \definefontsynonym [\typescriptthree-lstr] [hlsrt\typescriptprefix{e:\typescriptthree}] [encoding=\typescriptthree] % LucidaSans-Typewriter
+ \definefontsynonym [\typescriptthree-lstb] [hlsbt\typescriptprefix{e:\typescriptthree}] [encoding=\typescriptthree] % LucidaSans-TypewriterBold
+ \definefontsynonym [\typescriptthree-lsto] [hlsrot\typescriptprefix{e:\typescriptthree}] [encoding=\typescriptthree] % LucidaSans-TypewriterOblique
+ \definefontsynonym [\typescriptthree-lstbo] [hlsbot\typescriptprefix{e:\typescriptthree}] [encoding=\typescriptthree] % LucidaSans-TypewriterBoldOblique
+
+ \definefontsynonym [LucidaSans-Typewriter] [\typescriptthree-lstr] [encoding=\typescriptthree]
+ \definefontsynonym [LucidaSans-TypewriterBold] [\typescriptthree-lstb] [encoding=\typescriptthree]
+ \definefontsynonym [LucidaSans-TypewriterOblique] [\typescriptthree-lsto] [encoding=\typescriptthree]
+ \definefontsynonym [LucidaSans-TypewriterBoldOblique] [\typescriptthree-lstbo] [encoding=\typescriptthree]
+
+ \loadmapfile[lucida.map]
+ \stoptypescript
+
+ % Lucida Calligraphy
+
+ \starttypescript [calligraphy] [lucida] [texnansi,ec,8r]
+ \definefontsynonym [\typescriptthree-lbc] [hlcrie\typescriptprefix{e:\typescriptthree}] [encoding=\typescriptthree] % LucidaCalligraphy-Italic
+
+ \definefontsynonym [LucidaCalligraphy-Italic] [\typescriptthree-lbc] [encoding=\typescriptthree]
+
+ \loadmapfile[lucida.map]
+ \stoptypescript
+
+ % Lucida Casual
+
+ \starttypescript [casual] [lucida] [texnansi,ec,8r]
+ \definefontsynonym [\typescriptthree-lbkr] [hlcrn\typescriptprefix{e:\typescriptthree}] [encoding=\typescriptthree] % LucidaCasual
+ \definefontsynonym [\typescriptthree-lbki] [hlcrin\typescriptprefix{e:\typescriptthree}] [encoding=\typescriptthree] % LucidaCasual-Italic
+
+ \definefontsynonym [LucidaCasual] [\typescriptthree-lbkr] [encoding=\typescriptthree]
+ \definefontsynonym [LucidaCasual-Italic] [\typescriptthree-lbki] [encoding=\typescriptthree]
+
+ \loadmapfile[lucida.map]
+ \stoptypescript
+
+ % Lucida Handwriting
+
+ \starttypescript [handwriting] [lucida] [texnansi,ec,8r]
+ \definefontsynonym [\typescriptthree-lbh] [hlcriw\typescriptprefix{e:\typescriptthree}] [encoding=\typescriptthree] % LucidaHandwriting-Italic
+
+ \definefontsynonym [LucidaHandwriting-Italic] [\typescriptthree-lbh] [encoding=\typescriptthree]
+
+ \loadmapfile[lucida.map]
+ \stoptypescript
+
+ % Lucida Fax
+
+ \starttypescript [fax] [lucida] [texnansi,ec,8r]
+ \definefontsynonym [\typescriptthree-lfr] [hlxr\typescriptprefix{e:\typescriptthree}] [encoding=\typescriptthree] % LucidaFax
+ \definefontsynonym [\typescriptthree-lfd] [hlxb\typescriptprefix{e:\typescriptthree}] [encoding=\typescriptthree] % LucidaFax-Demi
+ \definefontsynonym [\typescriptthree-lfi] [hlxri\typescriptprefix{e:\typescriptthree}] [encoding=\typescriptthree] % LucidaFax-Italic
+ \definefontsynonym [\typescriptthree-lfdi] [hlxbi\typescriptprefix{e:\typescriptthree}] [encoding=\typescriptthree] % LucidaFax-DemiItalic
+
+ \definefontsynonym [LucidaFax] [\typescriptthree-lfr] [encoding=\typescriptthree] % LucidaFax
+ \definefontsynonym [LucidaFax-Demi] [\typescriptthree-lfd] [encoding=\typescriptthree] % LucidaFax-Demi
+ \definefontsynonym [LucidaFax-Italic] [\typescriptthree-lfi] [encoding=\typescriptthree] % LucidaFax-Italic
+ \definefontsynonym [LucidaFax-DemiItalic] [\typescriptthree-lfdi] [encoding=\typescriptthree] % LucidaFax-DemiItalic
+
+ \loadmapfile[lucida.map]
+ \stoptypescript
+
+ \starttypescript [blackletter] [lucida] [texnansi,ec,8r]
+ \definefontsynonym [\typescriptthree-lbl] [hlcrf\typescriptprefix{e:\typescriptthree}] [encoding=\typescriptthree] % LucidaBlackletter
+
+ \definefontsynonym [LucidaBlackletter] [\typescriptthree-lbl] [encoding=\typescriptthree]
+
+ \loadmapfile[lucida.map]
+ \stoptypescript
+
+ \starttypescript [lucida,lucidabfm,lucidaboldmath] [texnansi,ec,8r]
+ \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]
+
+ \loadmapfile[lucida.map]
+ \stoptypescript
+
+ \starttypescript [math] [lucida] [texnansi,ec,8r]
+ \definefontsynonym [LucidaBright] [hlcrm] % [encoding=\typescriptthree]
+ \definefontsynonym [LucidaNewMath-AltItalic] [hlcrima]
+ \definefontsynonym [LucidaNewMath-Arrows] [hlcra]
+ \definefontsynonym [LucidaNewMath-Extension] [hlcrv]
+ \definefontsynonym [LucidaNewMath-Roman] [hlcrm]
+ \definefontsynonym [LucidaNewMath-Italic] [hlcrim]
+ \definefontsynonym [LucidaNewMath-Symbol] [hlcry]
+ \definefontsynonym [LucidaBlackletter] [hlcrf8y] % what a mess
+ \loadmapfile [lucida.map]
+ \stoptypescript
+
+ \starttypescript [boldmath,bfmath] [lucida] [texnansi,ec,8r]
+ \definefontsynonym [LucidaNewMath-AltDemiItalic] [hlcdima]
+ \definefontsynonym [LucidaNewMath-Arrows-Demi] [hlcda]
+ \definefontsynonym [LucidaNewMath-Extension] [hlcrv]
+ \definefontsynonym [LucidaNewMath-Demi] [hlcdm]
+ \definefontsynonym [LucidaNewMath-DemiItalic] [hlcdim]
+ \definefontsynonym [LucidaNewMath-Symbol-Demi] [hlcdy]
+ \loadmapfile [lucida.map]
+ \stoptypescript
+
+ % Lucida Bright
+
+ \starttypescript [serif] [lucida] [name]
+ \definefontsynonym [Serif] [LucidaBright]
+ \definefontsynonym [SerifBold] [LucidaBright-Demi]
+ \definefontsynonym [SerifItalic] [LucidaBright-Italic]
+ \definefontsynonym [SerifBoldItalic] [LucidaBright-DemiItalic]
+ \definefontsynonym [SerifSlanted] [LucidaBright-Oblique]
+ \definefontsynonym [SerifBoldSlanted] [LucidaBright-DemiItalic]
+ \definefontsynonym [SerifCaps] [LucidaBrightSmallcaps]
+ \definefontsynonym [SerifBoldCaps] [LucidaBrightSmallcaps-Demi]
+ \stoptypescript
+
+ % Lucida Bright Sans
+
+ \starttypescript [sans] [lucida] [name]
+ \definefontsynonym [Sans] [LucidaSans]
+ \definefontsynonym [SansBold] [LucidaSans-Demi]
+ \definefontsynonym [SansItalic] [LucidaSans-Italic]
+ \definefontsynonym [SansBoldItalic] [LucidaSans-DemiItalic]
+ \definefontsynonym [SansSlanted] [LucidaSans-Italic]
+ \definefontsynonym [SansBoldSlanted] [LucidaSans-DemiItalic]
+ \definefontsynonym [SansCaps] [LucidaSans]
+ \stoptypescript
+
+ % Lucida Bright Typewriter
+
+ % only one family may be used as mono; sans used to be that since the beginning,
+ % so we keep using that as default
+
+ % \starttypescript [mono] [lucida] [name]
+ % \definefontsynonym [Mono] [LucidaTypewriter]
+ % \definefontsynonym [MonoBold] [LucidaTypewriterBold]
+ % \definefontsynonym [MonoItalic] [LucidaTypewriterOblique]
+ % \definefontsynonym [MonoBoldItalic] [LucidaTypewriterBoldOblique]
+ % \definefontsynonym [MonoSlanted] [LucidaTypewriterOblique]
+ % \definefontsynonym [MonoBoldSlanted] [LucidaTypewriterBoldOblique]
+ % \definefontsynonym [MonoCaps] [LucidaTypewriter]
+ % \stoptypescript
+
+ % Lucida Bright Sans Typewriter
+
+ \starttypescript [mono] [lucida] [name]
+ \definefontsynonym [Mono] [LucidaSans-Typewriter]
+ \definefontsynonym [MonoBold] [LucidaSans-TypewriterBold]
+ \definefontsynonym [MonoItalic] [LucidaSans-TypewriterOblique]
+ \definefontsynonym [MonoBoldItalic] [LucidaSans-TypewriterBoldOblique]
+ \definefontsynonym [MonoSlanted] [LucidaSans-TypewriterOblique]
+ \definefontsynonym [MonoBoldSlanted] [LucidaSans-TypewriterBoldOblique]
+ \definefontsynonym [MonoCaps] [LucidaSans-Typewriter]
+ \stoptypescript
+
+ % Lucida Calligraphy
+
+ \starttypescript [calligraphy] [lucida] [name]
+ \definefontsynonym [Calligraphy] [LucidaCalligraphy-Italic]
+ \stoptypescript
+
+ % Lucida Casual
+
+ % \starttypescript [casual] [lucida] [name]
+ % % LucidaCasual
+ % % LucidaCasual-Italic
+ % \stoptypescript
+
+ % Lucida Handwriting
+
+ \starttypescript [handwriting] [lucida] [name]
+ \definefontsynonym [Handwriting] [LucidaHandwriting-Italic]
+ \stoptypescript
+
+ % Lucida Fax
+ %
+ % \starttypescript [fax] [lucida] [name]
+ % \definefontsynonym [FaksRegular] [LucidaFax]
+ % \definefontsynonym [FaksBold] [LucidaFax-Demi]
+ % \definefontsynonym [FaksItalic] [LucidaFax-Italic]
+ % \definefontsynonym [FaksBoldItalic] [LucidaFax-DemiItalic]
+ % \stoptypescript
+
+ % Lucida Black Letter
+ %
+ % \starttypescript [blackletter] [lucida] [name]
+ % \definefontsynonym [Blackletter] [LucidaBlackletter]
+ % \stoptypescript
+
+ % Lucida Math
+
+ \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]
+ \stoptypescript
+
+ \starttypescript [math] [lucida] [name]
+ \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]
+ \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]
+ \stoptypescript
+
+ \starttypescript [lucida,lucidabfm,lucidaboldmath] [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]
+ \loadmapfile[lucida.map]
+ \stoptypescript
+
+ \starttypescript [lucida] [texnansi,ec,8r]
+ \definetypeface [lucida] [mm] [math] [lucida] [default] [encoding=\typescripttwo]
+ \stoptypescript
+
+ \starttypescript [lucidabfm] [texnansi,ec,8r]
+ \definetypeface [lucida] [mm] [bfmath] [lucida] [default] [encoding=\typescripttwo]
+ \stoptypescript
+
+ \starttypescript [lucidaboldmath] [texnansi,ec,8r]
+ \definetypeface [lucida] [mm] [boldmath] [lucida] [default] [encoding=\typescripttwo]
+ \stoptypescript
+
+ \starttypescript [lucidabfm] [texnansi,ec,8r,uc]
+ \definetypeface [lucidabfm] [rm] [serif] [lucida] [default] [encoding=\typescripttwo]
+ \definetypeface [lucidabfm] [ss] [sans] [lucida] [default] [encoding=\typescripttwo]
+ \definetypeface [lucidabfm] [tt] [mono] [lucida] [default] [encoding=\typescripttwo]
+ \definetypeface [lucidabfm] [hw] [handwriting] [lucida] [default] [encoding=\typescripttwo]
+ \definetypeface [lucidabfm] [cg] [calligraphy] [lucida] [default] [encoding=\typescripttwo]
+ \definetypeface [lucidabfm] [mm] [bfmath] [lucida] [default] [encoding=\typescripttwo]
+ \loadmapfile[lucida.map]
+ \stoptypescript
+
+ \starttypescript [lucidaboldmath] [texnansi,ec,8r,uc]
+ \definetypeface [lucidaboldmath] [rm] [serif] [lucida] [default] [encoding=\typescripttwo]
+ \definetypeface [lucidaboldmath] [ss] [sans] [lucida] [default] [encoding=\typescripttwo]
+ \definetypeface [lucidaboldmath] [tt] [mono] [lucida] [default] [encoding=\typescripttwo]
+ \definetypeface [lucidaboldmath] [hw] [handwriting] [lucida] [default] [encoding=\typescripttwo]
+ \definetypeface [lucidaboldmath] [cg] [calligraphy] [lucida] [default] [encoding=\typescripttwo]
+ \definetypeface [lucidaboldmath] [mm] [boldmath] [lucida] [default] [encoding=\typescripttwo]
+ \loadmapfile[lucida.map]
+ \stoptypescript
\stoptypescriptcollection
diff --git a/Master/texmf-dist/tex/context/base/type-otf.mkiv b/Master/texmf-dist/tex/context/base/type-otf.mkiv
index 1efd5448870..486fa1a57f0 100644
--- a/Master/texmf-dist/tex/context/base/type-otf.mkiv
+++ b/Master/texmf-dist/tex/context/base/type-otf.mkiv
@@ -16,487 +16,1781 @@
%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.
-% if a fontname equals the filename, then use
+
+% \starttypescriptcollection[myfonts]
%
-% \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 [serif] [myserif] [name]
+% \setups[font:fallback:serif]
+% \definefontsynonym [Serif] [file:myserif.ttf] [features=default]
+% \definefontsynonym [SerifBold] [file:myserifbold.ttf] [features=default]
+% \definefontsynonym [SerifItalic] [file:myserifitalic.ttf] [features=default]
+% \definefontsynonym [SerifBoldItalic] [file:myserifbolditalic.ttf] [features=default]
+% \stoptypescript
+%
+% \starttypescript[myfont]
+% \definetypeface [myfont] [rm] [serif] [myserif] [default]
+% \stoptypescript
+%
+% \stoptypescriptcollection
+%
+% \setupbodyfont[myfont]
-\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
+\starttypescriptcollection[fallback]
-\starttypescript [mono] [modern,latin-modern,modern-vari,latin-modern-vari,modern-cond,latin-modern-cond]
- \definefontsynonym [LMTypewriter8-Regular] [file:lmmono8-regular] [features=none]
- \definefontsynonym [LMTypewriter9-Regular] [file:lmmono9-regular] [features=none]
- \definefontsynonym [LMTypewriter10-Regular] [file:lmmono10-regular] [features=none]
- \definefontsynonym [LMTypewriter12-Regular] [file:lmmono12-regular] [features=none]
- \definefontsynonym [LMTypewriter10-Italic] [file:lmmono10-italic] [features=none]
- \definefontsynonym [LMTypewriter10-Oblique] [file:lmmonoslant10-regular] [features=none]
- \definefontsynonym [LMTypewriter10-CapsRegular] [file:lmmonocaps10-regular] [features=none] % features=smallcaps?
- \definefontsynonym [LMTypewriter10-CapsOblique] [file:lmmonocaps10-oblique] [features=none]
-
- \definefontsynonym [LMTypewriter10-Light] [file:lmmonolt10-regular] [features=none]
- \definefontsynonym [LMTypewriter10-LightOblique] [file:lmmonolt10-oblique] [features=none]
- \definefontsynonym [LMTypewriter10-LightCondensed] [file:lmmonoltcond10-regular] [features=none]
- \definefontsynonym [LMTypewriter10-LightCondensedOblique] [file:lmmonoltcond10-oblique] [features=none]
-
- \definefontsynonym [LMTypewriter10-Dark] [file:lmmonolt10-bold] [features=none]
- \definefontsynonym [LMTypewriter10-DarkOblique] [file:lmmonolt10-boldoblique] [features=none]
-
- \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]
+\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 [math] [modern,latin-modern,computer-modern]
- \definefontsynonym[LMMathRoman5-Regular] [LMMath5-Regular@lmroman5-math]
- \definefontsynonym[LMMathRoman6-Regular] [LMMath6-Regular@lmroman6-math]
- \definefontsynonym[LMMathRoman7-Regular] [LMMath7-Regular@lmroman7-math]
- \definefontsynonym[LMMathRoman8-Regular] [LMMath8-Regular@lmroman8-math]
- \definefontsynonym[LMMathRoman9-Regular] [LMMath9-Regular@lmroman9-math]
- \definefontsynonym[LMMathRoman10-Regular][LMMath10-Regular@lmroman10-math]
- \definefontsynonym[LMMathRoman12-Regular][LMMath12-Regular@lmroman12-math]
- \definefontsynonym[LMMathRoman17-Regular][LMMath17-Regular@lmroman17-math]
-
- \definefontsynonym[LMMathRoman5-Bold] [LMMath10-Bold@lmroman10-boldmath]
- \definefontsynonym[LMMathRoman6-Bold] [LMMath10-Bold@lmroman10-boldmath]
- \definefontsynonym[LMMathRoman7-Bold] [LMMath10-Bold@lmroman10-boldmath]
- \definefontsynonym[LMMathRoman8-Bold] [LMMath10-Bold@lmroman10-boldmath]
- \definefontsynonym[LMMathRoman9-Bold] [LMMath10-Bold@lmroman10-boldmath]
- \definefontsynonym[LMMathRoman10-Bold] [LMMath10-Bold@lmroman10-boldmath]
- \definefontsynonym[LMMathRoman12-Bold] [LMMath10-Bold@lmroman10-boldmath]
- \definefontsynonym[LMMathRoman17-Bold] [LMMath10-Bold@lmroman10-boldmath]
-
- % are these needed?
- %
- % \definefontsynonym[MathRoman][LMMath10-Regular@lmroman10-math]
- % \definefontsynonym[MathBold] [LMMath10-Bold@lmroman10-boldmath]
+% faster
+%
+% \starttypescript [fallback]
+% \definetypeface [] [rm] [serif] [modern] [default]
+% \definetypeface [] [ss] [sans] [modern] [default]
+% \definetypeface [] [tt] [mono] [modern] [default]
+% \definetypeface [] [mm] [math] [modern] [default]
+% \quittypescriptscanning
+% \stoptypescript
- \loadmapfile[lm-math.map]
- \loadmapfile[lm-rm.map]
-\stoptypescript
+\stoptypescriptcollection
-% TeXGyre
-
-\definetypescriptprefix [f:pagella] [pagella] \definetypescriptprefix [f:palatino] [pagella]
-\definetypescriptprefix [f:termes] [termes] \definetypescriptprefix [f:times] [termes]
-\definetypescriptprefix [f:heros] [heros] \definetypescriptprefix [f:helvetica] [heros]
-\definetypescriptprefix [f:bonum] [bonum] \definetypescriptprefix [f:bookman] [bonum]
-\definetypescriptprefix [f:schola] [schola] \definetypescriptprefix [f:schoolbook] [schola]
-\definetypescriptprefix [f:adventor][adventor] %definetypescriptprefix [f:adventor] [adventor]
-\definetypescriptprefix [f:cursor] [cursor] \definetypescriptprefix [f:courier] [cursor]
-\definetypescriptprefix [f:chorus] [chorus] \definetypescriptprefix [f:chancery] [chorus] % not the full set
-
-% name definitions & prefixes
-% \starttypescript [serif,sans,mono] [adventor,bonum,cursor,heros,pagella,palatino,schola,termes]
-% \starttypescript [serif] [pagella,palatino,termes,times,bonum,bookman,schola,schoolbook] [name]
-
-\starttypescript [serif,sans,mono] [adventor,bonum,bookman,cursor,courier,heros,helvetica,pagella,palatino,schola,schoolbook,termes,times]
- \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=smallcaps]
- \definefontsynonym [\typescriptprefix{n:\typescripttwo}-ItalicCaps] [file:texgyre\typescriptprefix{f:\typescripttwo}-italic] [features=smallcaps]
- \definefontsynonym [\typescriptprefix{n:\typescripttwo}-BoldCaps] [file:texgyre\typescriptprefix{f:\typescripttwo}-bold] [features=smallcaps]
- \definefontsynonym [\typescriptprefix{n:\typescripttwo}-BoldItalicCaps] [file:texgyre\typescriptprefix{f:\typescripttwo}-bolditalic] [features=smallcaps]
-\stoptypescript
+% if a fontname equals the filename, then use
+%
+% \setupfontsynonym [LMRoman10-DemiOblique] [\s!features=\s!default] % file is lowercase, so fails
+% \definefontsynonym [LMRoman10-DemiOblique] [\s!name:LMRoman10-DemiOblique] [\s!features=\s!default]
+% \definefontsynonym [LMRoman10-DemiOblique] [lmroman10-demioblique] [\s!features=\s!default]
-\starttypescript [serif,calligraphy] [chorus,chancery]
- \definefontsynonym [TeXGyreChorus-MediumItalic] [file:texgyrechorus-mediumitalic] [features=default]
-\stoptypescript
+\unprotect
-% Times Math (tx)
+% \starttypescript [math] [modern,computer-modern,latin-modern]
+% \definefontsynonym[MathSymbol][MathSymbol-Regular@symbol-math]
+% \loadfontgoodies[symbol-math]
+% \stoptypescript
-\starttypescript [math][times][all]
- \definefontsynonym[MathRoman][txmath@tx-math]
- \loadmapfile[original-youngryu-tx.map]
-\stoptypescript
+\starttypescriptcollection[latinmodern]
+
+ %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,computer-modern]
+ \definefontsynonym [LMRoman5-Regular] [\s!file:lmroman5-regular] [\s!features=\s!default]
+ \definefontsynonym [LMRoman6-Regular] [\s!file:lmroman6-regular] [\s!features=\s!default]
+ \definefontsynonym [LMRoman7-Regular] [\s!file:lmroman7-regular] [\s!features=\s!default]
+ \definefontsynonym [LMRoman8-Regular] [\s!file:lmroman8-regular] [\s!features=\s!default]
+ \definefontsynonym [LMRoman9-Regular] [\s!file:lmroman9-regular] [\s!features=\s!default]
+ \definefontsynonym [LMRoman10-Regular] [\s!file:lmroman10-regular] [\s!features=\s!default]
+ \definefontsynonym [LMRoman12-Regular] [\s!file:lmroman12-regular] [\s!features=\s!default]
+ \definefontsynonym [LMRoman17-Regular] [\s!file:lmroman17-regular] [\s!features=\s!default]
+ \definefontsynonym [LMRoman5-Bold] [\s!file:lmroman5-bold] [\s!features=\s!default]
+ \definefontsynonym [LMRoman6-Bold] [\s!file:lmroman6-bold] [\s!features=\s!default]
+ \definefontsynonym [LMRoman7-Bold] [\s!file:lmroman7-bold] [\s!features=\s!default]
+ \definefontsynonym [LMRoman8-Bold] [\s!file:lmroman8-bold] [\s!features=\s!default]
+ \definefontsynonym [LMRoman9-Bold] [\s!file:lmroman9-bold] [\s!features=\s!default]
+ \definefontsynonym [LMRoman10-Bold] [\s!file:lmroman10-bold] [\s!features=\s!default]
+ \definefontsynonym [LMRoman12-Bold] [\s!file:lmroman12-bold] [\s!features=\s!default]
+ \definefontsynonym [LMRoman7-Italic] [\s!file:lmroman7-italic] [\s!features=\s!default]
+ \definefontsynonym [LMRoman8-Italic] [\s!file:lmroman8-italic] [\s!features=\s!default]
+ \definefontsynonym [LMRoman9-Italic] [\s!file:lmroman9-italic] [\s!features=\s!default]
+ \definefontsynonym [LMRoman10-Italic] [\s!file:lmroman10-italic] [\s!features=\s!default]
+ \definefontsynonym [LMRoman12-Italic] [\s!file:lmroman12-italic] [\s!features=\s!default]
+ \definefontsynonym [LMRoman10-BoldItalic] [\s!file:lmroman10-bolditalic] [\s!features=\s!default]
+ \definefontsynonym [LMRoman8-Oblique] [\s!file:lmromanslant8-regular] [\s!features=\s!default]
+ \definefontsynonym [LMRoman9-Oblique] [\s!file:lmromanslant9-regular] [\s!features=\s!default]
+ \definefontsynonym [LMRoman10-Oblique] [\s!file:lmromanslant10-regular][\s!features=\s!default]
+ \definefontsynonym [LMRoman12-Oblique] [\s!file:lmromanslant12-regular][\s!features=\s!default]
+ \definefontsynonym [LMRoman17-Oblique] [\s!file:lmromanslant17-regular][\s!features=\s!default]
+ \definefontsynonym [LMRoman10-BoldOblique] [\s!file:lmromanslant10-bold] [\s!features=\s!default]
+ \definefontsynonym [LMRoman10-Demi] [\s!file:lmromandemi10-regular] [\s!features=\s!default]
+ \definefontsynonym [LMRoman10-DemiOblique] [\s!file:lmromandemi10-oblique] [\s!features=\s!default]
+ \definefontsynonym [LMRoman10-CapsRegular] [\s!file:lmromancaps10-regular] [\s!features=\s!default] % features=smallcaps?
+ \definefontsynonym [LMRoman10-CapsOblique] [\s!file:lmromancaps10-oblique] [\s!features=\s!default]
+
+ \definefontsynonym [LMRoman10-Dunhill] [\s!file:lmromandunh10-regular] [\s!features=\s!default]
+ \definefontsynonym [LMRoman10-DunhillOblique] [\s!file:lmromandunh10-oblique] [\s!features=\s!default]
+ \definefontsynonym [LMRoman10-Unslanted] [\s!file:lmromanunsl10-regular] [\s!features=\s!default]
+ \stoptypescript
+
+ \starttypescript [sans] [modern,latin-modern,computer-modern]
+ \definefontsynonym [LMSans8-Regular] [\s!file:lmsans8-regular] [\s!features=\s!default]
+ \definefontsynonym [LMSans9-Regular] [\s!file:lmsans9-regular] [\s!features=\s!default]
+ \definefontsynonym [LMSans10-Regular] [\s!file:lmsans10-regular] [\s!features=\s!default]
+ \definefontsynonym [LMSans12-Regular] [\s!file:lmsans12-regular] [\s!features=\s!default]
+ \definefontsynonym [LMSans17-Regular] [\s!file:lmsans17-regular] [\s!features=\s!default]
+ \definefontsynonym [LMSans10-Bold] [\s!file:lmsans10-bold] [\s!features=\s!default]
+ \definefontsynonym [LMSans8-Oblique] [\s!file:lmsans8-oblique] [\s!features=\s!default]
+ \definefontsynonym [LMSans9-Oblique] [\s!file:lmsans9-oblique] [\s!features=\s!default]
+ \definefontsynonym [LMSans10-Oblique] [\s!file:lmsans10-oblique] [\s!features=\s!default]
+ \definefontsynonym [LMSans12-Oblique] [\s!file:lmsans12-oblique] [\s!features=\s!default]
+ \definefontsynonym [LMSans17-Oblique] [\s!file:lmsans17-oblique] [\s!features=\s!default]
+ \definefontsynonym [LMSans10-BoldOblique] [\s!file:lmsans10-boldoblique] [\s!features=\s!default]
+
+ \definefontsynonym [LMSans10-DemiCondensed] [\s!file:lmsansdemicond10-regular] [\s!features=\s!default]
+ \definefontsynonym [LMSans10-DemiCondensedOblique] [\s!file:lmsansdemicond10-oblique] [\s!features=\s!default]
+
+ \definefontsynonym [LMSansQuotation8-Regular] [\s!file:lmsansquot8-regular] [\s!features=\s!default]
+ \definefontsynonym [LMSansQuotation8-Bold] [\s!file:lmsansquot8-bold] [\s!features=\s!default]
+ \definefontsynonym [LMSansQuotation8-Oblique] [\s!file:lmsansquot8-oblique] [\s!features=\s!default]
+ \definefontsynonym [LMSansQuotation8-BoldOblique] [\s!file:lmsansquot8-boldoblique] [\s!features=\s!default]
+ \stoptypescript
+
+ \starttypescript [mono] [modern,modern-variable,modern-condensed,latin-modern,latin-modern-variable,latin-modern-condensed,computer-modern]
+
+ \definefontsynonym [LMTypewriter8-Regular] [\s!file:lmmono8-regular] [\s!features=\s!none]
+ \definefontsynonym [LMTypewriter9-Regular] [\s!file:lmmono9-regular] [\s!features=\s!none]
+ \definefontsynonym [LMTypewriter10-Regular] [\s!file:lmmono10-regular] [\s!features=\s!none]
+ \definefontsynonym [LMTypewriter12-Regular] [\s!file:lmmono12-regular] [\s!features=\s!none]
+ \definefontsynonym [LMTypewriter10-Italic] [\s!file:lmmono10-italic] [\s!features=\s!none]
+ \definefontsynonym [LMTypewriter10-Oblique] [\s!file:lmmonoslant10-regular] [\s!features=\s!none]
+ \definefontsynonym [LMTypewriter10-CapsRegular] [\s!file:lmmonocaps10-regular] [\s!features=\s!none] % features=smallcaps?
+ \definefontsynonym [LMTypewriter10-CapsOblique] [\s!file:lmmonocaps10-oblique] [\s!features=\s!none]
+
+ \definefontsynonym [LMTypewriter10-Light] [\s!file:lmmonolt10-regular] [\s!features=\s!none]
+ \definefontsynonym [LMTypewriter10-LightOblique] [\s!file:lmmonolt10-oblique] [\s!features=\s!none]
+ \definefontsynonym [LMTypewriter10-LightCondensed] [\s!file:lmmonoltcond10-regular] [\s!features=\s!none]
+ \definefontsynonym [LMTypewriter10-LightCondensedOblique] [\s!file:lmmonoltcond10-oblique] [\s!features=\s!none]
+
+ \definefontsynonym [LMTypewriter10-Dark] [\s!file:lmmonolt10-bold] [\s!features=\s!none]
+ \definefontsynonym [LMTypewriter10-DarkOblique] [\s!file:lmmonolt10-boldoblique] [\s!features=\s!none]
+
+ \definefontsynonym [LMTypewriterVarWd10-Regular] [\s!file:lmmonoproplt10-regular] [\s!features=\s!default]
+ \definefontsynonym [LMTypewriterVarWd10-Oblique] [\s!file:lmmonoproplt10-oblique] [\s!features=\s!default]
+ \definefontsynonym [LMTypewriterVarWd10-Light] [\s!file:lmmonoprop10-regular] [\s!features=\s!default]
+ \definefontsynonym [LMTypewriterVarWd10-LightOblique] [\s!file:lmmonoprop10-oblique] [\s!features=\s!default]
+ \definefontsynonym [LMTypewriterVarWd10-Dark] [\s!file:lmmonoproplt10-bold] [\s!features=\s!default]
+ \definefontsynonym [LMTypewriterVarWd10-DarkOblique] [\s!file:lmmonoproplt10-boldoblique] [\s!features=\s!default]
+ \stoptypescript
+
+ \starttypescript [math] [modern,latin-modern,computer-modern]
+ \definefontsynonym[LMMathRoman5-Regular] [LMMath5-Regular@lmroman5-math]
+ \definefontsynonym[LMMathRoman6-Regular] [LMMath6-Regular@lmroman6-math]
+ \definefontsynonym[LMMathRoman7-Regular] [LMMath7-Regular@lmroman7-math]
+ \definefontsynonym[LMMathRoman8-Regular] [LMMath8-Regular@lmroman8-math]
+ \definefontsynonym[LMMathRoman9-Regular] [LMMath9-Regular@lmroman9-math]
+ \definefontsynonym[LMMathRoman10-Regular][LMMath10-Regular@lmroman10-math]
+ \definefontsynonym[LMMathRoman12-Regular][LMMath12-Regular@lmroman12-math]
+ \definefontsynonym[LMMathRoman17-Regular][LMMath17-Regular@lmroman17-math]
+
+ \definefontsynonym[LMMathRoman5-Bold] [LMMath10-Bold@lmroman10-boldmath]
+ \definefontsynonym[LMMathRoman6-Bold] [LMMath10-Bold@lmroman10-boldmath]
+ \definefontsynonym[LMMathRoman7-Bold] [LMMath10-Bold@lmroman10-boldmath]
+ \definefontsynonym[LMMathRoman8-Bold] [LMMath10-Bold@lmroman10-boldmath]
+ \definefontsynonym[LMMathRoman9-Bold] [LMMath10-Bold@lmroman10-boldmath]
+ \definefontsynonym[LMMathRoman10-Bold] [LMMath10-Bold@lmroman10-boldmath]
+ \definefontsynonym[LMMathRoman12-Bold] [LMMath10-Bold@lmroman10-boldmath]
+ \definefontsynonym[LMMathRoman17-Bold] [LMMath10-Bold@lmroman10-boldmath]
+
+ % are these needed?
+ %
+ % \definefontsynonym[MathRoman][LMMath10-Regular@lmroman10-math]
+ % \definefontsynonym[MathBold] [LMMath10-Bold@lmroman10-boldmath]
+
+ \loadfontgoodies[lm-math]
+ \stoptypescript
+
+ \starttypescript [serif] [modern,latin-modern,computer-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,latin-modern,computer-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,latin-modern,computer-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,latin-modern,computer-modern] [name]
+ \definefontsynonym [MathRoman] [LMMathRoman-Regular]
+ %definefontsynonym [MathExtension] [LMMathExtension-Regular]
+ %definefontsynonym [MathItalic] [LMMathItalic-Italic]
+ %definefontsynonym [MathSymbol] [LMMathSymbols-Italic]
+ \stoptypescript
+
+ \starttypescript [serif] [modern-variable,latin-modern-variable] [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-condensed,latin-modern-condensed,modern-light-condensed,latin-modern-light-condensed] [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,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,computer-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,computer-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-variable,latin-modern-variable,modern-condensed,latin-modern-condensed]
+ \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,latin-modern,computer-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,latin-modern,computer-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,latin-modern,computer-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 [mono] [modern-light,latin-modern-light]
+ \definefontsynonym [ComputerModernMono] [LMTypewriter-Light]
+ \definefontsynonym [ComputerModernMono-Italic] [LMTypewriter-LightOblique]
+ \definefontsynonym [ComputerModernMono-Slanted] [LMTypewriter-LightOblique]
+ \definefontsynonym [ComputerModernMono-Bold] [LMTypewriter-Dark]
+ \definefontsynonym [ComputerModernMono-BoldItalic] [LMTypewriter-DarkOblique]
+ \definefontsynonym [ComputerModernMono-BoldSlanted] [LMTypewriter-DarkOblique]
+ \definefontsynonym [ComputerModernMono-Caps] [LMTypewriter-Light]
+ \definefontsynonym [ComputerModernMono-CapsSlanted] [LMTypewriter-LightOblique]
+ \definefontsynonym [ComputerModernMono-Variable] [LMTypewriterVarWd-Light]
+ \stoptypescript
+
+ \starttypescript [serif] [modern-variable,latin-modern-variable]
+ \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 [serif] [modern-variable-light,latin-modern-variable-light]
+ \definefontsynonym [ComputerModernVariable] [LMTypewriterVarWd-Light]
+ \definefontsynonym [ComputerModernVariable-Italic] [LMTypewriterVarWd-LightOblique]
+ \definefontsynonym [ComputerModernVariable-Slanted] [LMTypewriterVarWd-LightOblique]
+ \definefontsynonym [ComputerModernVariable-Bold] [LMTypewriterVarWd-Dark]
+ \definefontsynonym [ComputerModernVariable-BoldItalic] [LMTypewriterVarWd-DarkOblique]
+ \definefontsynonym [ComputerModernVariable-BoldSlanted] [LMTypewriterVarWd-DarkOblique]
+ \definefontsynonym [ComputerModernVariable-Caps] [LMTypewriterVarWd-Light]
+ \definefontsynonym [ComputerModernVariable-CapsSlanted] [LMTypewriterVarWd-LightOblique]
+ \stoptypescript
+
+ \starttypescript [math] [modern,latin-modern]
+ % isn't this obsolete now?
+ \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
+
+ \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 [modernvariable,modern-variable]
+ \definetypeface [modernvariable] [rm] [serif] [modern-variable] [default]
+ \definetypeface [modernvariable] [tt] [mono] [modern-variable] [default]
+ \definetypeface [modernvariable] [mm] [math] [modern] [default]
+ \quittypescriptscanning
+ \stoptypescript
+
+ \starttypescript [modernvariablelight,modern-variable-light]
+ \definetypeface [modernvariable] [rm] [serif] [modern-variable-light] [default]
+ \definetypeface [modernvariable] [tt] [mono] [modern-variable-light] [default]
+ \definetypeface [modernvariable] [mm] [math] [modern] [default]
+ \quittypescriptscanning
+ \stoptypescript
+
+ \starttypescript [modern-mono]
+ \definetypeface [modern] [rm] [serif] [modern] [computer-modern]
+ \definetypeface [modern] [ss] [sans] [modern] [computer-modern]
+ \definetypeface [modern] [tt] [mono] [modern-light] [computer-modern]
+ \definetypeface [modern] [mm] [math] [modern] [computer-modern]
+ \quittypescriptscanning
+ \stoptypescript
+
+ \starttypescript [modern-base-mono]
+ \definetypeface [modern] [rm] [serif] [modern] [computer-modern] [default]
+ \definetypeface [modern] [ss] [sans] [modern] [computer-modern] [default]
+ \definetypeface [modern] [tt] [mono] [modern-light] [computer-modern] [default]
+ \definetypeface [modern] [mm] [math] [modern] [computer-modern] [default]
+ \quittypescriptscanning
+ \stoptypescript
+
+ \starttypescript [serif] [simple] [name] % bad, will be changed but in sycn with manuals that use it
+ \definefontsynonym [Simple] [cmvtt10]
+ %setupfontsynonym [Simple] [handling=pure]
+ \stoptypescript
-% Palatino Math (px)
+\stoptypescriptcollection
-\starttypescript [math][palatino][all]
- \definefontsynonym[MathRoman][pxmath@px-math]
- \loadmapfile[original-youngryu-px.map]
-\stoptypescript
+\starttypescriptcollection[texgyre]
+
+ \definetypescriptprefix [f:pagella] [pagella] \definetypescriptprefix [f:palatino] [pagella]
+ \definetypescriptprefix [f:termes] [termes] \definetypescriptprefix [f:times] [termes]
+ \definetypescriptprefix [f:heros] [heros] \definetypescriptprefix [f:helvetica] [heros]
+ \definetypescriptprefix [f:bonum] [bonum] \definetypescriptprefix [f:bookman] [bonum]
+ \definetypescriptprefix [f:schola] [schola] \definetypescriptprefix [f:schoolbook] [schola]
+ \definetypescriptprefix [f:adventor][adventor] %definetypescriptprefix [f:adventor] [adventor]
+ \definetypescriptprefix [f:cursor] [cursor] \definetypescriptprefix [f:courier] [cursor]
+ \definetypescriptprefix [f:chorus] [chorus] \definetypescriptprefix [f:chancery] [chorus] % not the full set
+
+ \starttypescript [serif,sans,mono] [adventor,bonum,bookman,cursor,courier,heros,helvetica,pagella,palatino,schola,schoolbook,termes,times]
+ \definefontsynonym [\typescriptprefix{n:\typescripttwo}-Regular] [\s!file:texgyre\typescriptprefix{f:\typescripttwo}-regular] [\s!features=\s!default]
+ \definefontsynonym [\typescriptprefix{n:\typescripttwo}-Italic] [\s!file:texgyre\typescriptprefix{f:\typescripttwo}-italic] [\s!features=\s!default]
+ \definefontsynonym [\typescriptprefix{n:\typescripttwo}-Bold] [\s!file:texgyre\typescriptprefix{f:\typescripttwo}-bold] [\s!features=\s!default]
+ \definefontsynonym [\typescriptprefix{n:\typescripttwo}-BoldItalic] [\s!file:texgyre\typescriptprefix{f:\typescripttwo}-bolditalic] [\s!features=\s!default]
+ \definefontsynonym [\typescriptprefix{n:\typescripttwo}-Caps] [\s!file:texgyre\typescriptprefix{f:\typescripttwo}-regular] [\s!features=\s!smallcaps]
+ \definefontsynonym [\typescriptprefix{n:\typescripttwo}-ItalicCaps] [\s!file:texgyre\typescriptprefix{f:\typescripttwo}-italic] [\s!features=\s!smallcaps]
+ \definefontsynonym [\typescriptprefix{n:\typescripttwo}-BoldCaps] [\s!file:texgyre\typescriptprefix{f:\typescripttwo}-bold] [\s!features=\s!smallcaps]
+ \definefontsynonym [\typescriptprefix{n:\typescripttwo}-BoldItalicCaps] [\s!file:texgyre\typescriptprefix{f:\typescripttwo}-bolditalic] [\s!features=\s!smallcaps]
+ \stoptypescript
+
+ \starttypescript [serif,calligraphy] [chorus,chancery]
+ \definefontsynonym [TeXGyreChorus-MediumItalic] [\s!file:texgyrechorus-mediumitalic] [\s!features=\s!default]
+ \stoptypescript
+
+ \definetypescriptprefix [n:pagella] [TeXGyrePagella] \definetypescriptprefix [n:palatino] [TeXGyrePagella]
+ \definetypescriptprefix [n:termes] [TeXGyreTermes] \definetypescriptprefix [n:times] [TeXGyreTermes]
+ \definetypescriptprefix [n:heros] [TeXGyreHeros] \definetypescriptprefix [n:helvetica] [TeXGyreHeros]
+ \definetypescriptprefix [n:bonum] [TeXGyreBonum] \definetypescriptprefix [n:bookman] [TeXGyreBonum]
+ \definetypescriptprefix [n:schola] [TeXGyreSchola] \definetypescriptprefix [n:schoolbook] [TeXGyreSchola]
+ \definetypescriptprefix [n:adventor] [TeXGyreAdventor] %definetypescriptprefix [n:adventor] [TeXGyreAdventor]
+ \definetypescriptprefix [n:cursor] [TeXGyreCursor] \definetypescriptprefix [n:courier] [TeXGyreCursor]
+ \definetypescriptprefix [n:chorus] [TeXGyreChorus] \definetypescriptprefix [n:chancery] [TeXGyreChorus] % not the full set
+
+ \starttypescript [serif] [pagella,palatino,termes,times,bonum,bookman,schola,schoolbook] [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 [SerifSlanted] [SerifItalic]
+ \definefontsynonym [SerifBoldSlanted] [SerifBoldItalic]
+ \definefontsynonym [SerifCaps] [\typescriptprefix{n:\typescripttwo}-Caps]
+
+ \definefontsynonym [SerifRegular] [Serif]
+ \definefontsynonym [SerifRegularCaps] [SerifCaps]
+ \definefontsynonym [SerifItalicCaps] [\typescriptprefix{n:\typescripttwo}-ItalicCaps]
+ \definefontsynonym [SerifBoldCaps] [\typescriptprefix{n:\typescripttwo}-BoldCaps]
+ \definefontsynonym [SerifBoldItalicCaps] [\typescriptprefix{n:\typescripttwo}-BoldItalicCaps]
+ \definefontsynonym [SerifSlantedCaps] [SerifItalicCaps]
+ \definefontsynonym [SerifBoldSlantedCaps] [SerifBoldItalicCaps]
+ \definefontsynonym [SerifCapsCaps] [SerifCaps]
+ \stoptypescript
+
+ \starttypescript [serif] [chorus,chancery] [name]
+ \definefontsynonym [SerifMediumItalic] [TeXGyreChorus-MediumItalic]
+ \definefontsynonym [Serif] [SerifMediumItalic]
+ \definefontsynonym [SerifItalic] [SerifMediumItalic]
+ \definefontsynonym [SerifBold] [SerifMediumItalic]
+ \definefontsynonym [SerifBoldItalic] [SerifMediumItalic]
+ \definefontsynonym [SerifSlanted] [SerifMediumItalic]
+ \definefontsynonym [SerifBoldSlanted] [SerifMediumItalic]
+ \definefontsynonym [SerifCaps] [SerifMediumItalic]
+ \stoptypescript
+
+ \starttypescript [calligraphy] [chorus,chancery] [name]
+ \definefontsynonym [Calligraphy] [TeXGyreChorus-MediumItalic]
+ \stoptypescript
+
+ \starttypescript [sans] [heros,helvetica,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 [SansSlanted] [SansItalic]
+ \definefontsynonym [SansBoldSlanted] [SansBoldItalic]
+ \definefontsynonym [SansCaps] [\typescriptprefix{n:\typescripttwo}-Caps]
+
+ \definefontsynonym [SansRegular] [Sans]
+ \definefontsynonym [SansRegularCaps] [SansCaps]
+ \definefontsynonym [SansItalicCaps] [\typescriptprefix{n:\typescripttwo}-ItalicCaps]
+ \definefontsynonym [SansBoldCaps] [\typescriptprefix{n:\typescripttwo}-BoldCaps]
+ \definefontsynonym [SansBoldItalicCaps] [\typescriptprefix{n:\typescripttwo}-BoldItalicCaps]
+ \definefontsynonym [SansSlantedCaps] [SansItalicCaps]
+ \definefontsynonym [SansBoldSlantedCaps] [SansBoldItalicCaps]
+ \definefontsynonym [SansCapsCaps] [SansCaps]
+ \stoptypescript
+
+ \starttypescript [mono] [cursor,courier] [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]
+
+ \definefontsynonym [MonoRegular] [Mono]
+ \definefontsynonym [MonoRegularCaps] [MonoCaps]
+ \definefontsynonym [MonoItalicCaps] [\typescriptprefix{n:\typescripttwo}-ItalicCaps]
+ \definefontsynonym [MonoBoldCaps] [\typescriptprefix{n:\typescripttwo}-BoldCaps]
+ \definefontsynonym [MonoBoldItalicCaps] [\typescriptprefix{n:\typescripttwo}-BoldItalicCaps]
+ \definefontsynonym [MonoSlantedCaps] [MonoItalicCaps]
+ \definefontsynonym [MonoBoldSlantedCaps] [MonoBoldItalicCaps]
+ \definefontsynonym [MonoCapsCaps] [MonoCaps]
+ \stoptypescript
+
+ \starttypescript [times,termes]
+ \definetypeface [\typescriptone] [rm] [serif] [\typescriptone] [default]
+ \definetypeface [\typescriptone] [ss] [sans] [helvetica] [default] [rscale=0.9]
+ \definetypeface [\typescriptone] [tt] [mono] [modern] [default] [rscale=1.05]
+ \definetypeface [\typescriptone] [mm] [math] [times] [default]
+ \quittypescriptscanning
+ \stoptypescript
+
+ \starttypescript [palatino,pagella]
+ \definetypeface [\typescriptone] [rm] [serif] [\typescriptone] [default]
+ \definetypeface [\typescriptone] [ss] [sans] [modern] [default] [rscale=1.075]
+ \definetypeface [\typescriptone] [tt] [mono] [modern] [default] [rscale=1.075]
+ \definetypeface [\typescriptone] [mm] [math] [palatino] [default]
+ \quittypescriptscanning
+ \stoptypescript
+
+ \starttypescript [schoolbook,schola]
+ \definetypeface [\typescriptone] [rm] [serif] [\typescriptone] [default]
+ \definetypeface [\typescriptone] [ss] [sans] [modern] [default] [rscale=1.1]
+ \definetypeface [\typescriptone] [tt] [mono] [modern] [default] [rscale=1.1]
+ \definetypeface [\typescriptone] [mm] [math] [modern] [default] [rscale=1.1]
+ \quittypescriptscanning
+ \stoptypescript
+
+ \starttypescript [bookman,bonum]
+ \definetypeface [\typescriptone] [rm] [serif] [\typescriptone] [default]
+ \definetypeface [\typescriptone] [ss] [sans] [modern] [default] [rscale=1.1]
+ \definetypeface [\typescriptone] [tt] [mono] [modern] [default] [rscale=1.1]
+ \definetypeface [\typescriptone] [mm] [math] [modern] [default] [rscale=1.1]
+ \quittypescriptscanning
+ \stoptypescript
+
+ \starttypescript [chancery,chorus]
+ \definetypeface [\typescriptone] [rm] [serif] [\typescriptone] [default]
+ \definetypeface [\typescriptone] [ss] [sans] [modern] [default]
+ \definetypeface [\typescriptone] [tt] [mono] [modern] [default]
+ \definetypeface [\typescriptone] [mm] [math] [modern] [default]
+ \quittypescriptscanning
+ \stoptypescript
+
+ \starttypescript [helvetica,heros]
+ \definetypeface [\typescriptone] [ss] [sans] [\typescriptone] [default]
+ \definetypeface [\typescriptone] [rm] [serif] [modern] [default] [rscale=1.15]
+ \definetypeface [\typescriptone] [tt] [mono] [modern] [default] [rscale=1.15]
+ \definetypeface [\typescriptone] [mm] [math] [modern] [default] [rscale=1.15]
+ \quittypescriptscanning
+ \stoptypescript
+
+ \starttypescript [avantgarde,adventor]
+ \definetypeface [\typescriptone] [ss] [sans] [adventor] [default]
+ \definetypeface [\typescriptone] [rm] [serif] [modern] [default] [rscale=1.15]
+ \definetypeface [\typescriptone] [tt] [mono] [modern] [default] [rscale=1.15]
+ \definetypeface [\typescriptone] [mm] [math] [modern] [default]
+ \quittypescriptscanning
+ \stoptypescript
+
+ \starttypescript [courier,cursor]
+ \definetypeface [\typescriptone] [tt] [mono] [\typescriptone] [default]
+ \definetypeface [\typescriptone] [rm] [serif] [modern] [default]
+ \definetypeface [\typescriptone] [ss] [sans] [modern] [default]
+ \definetypeface [\typescriptone] [mm] [math] [modern] [default]
+ \quittypescriptscanning
+ \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
+\stoptypescriptcollection
-% \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
+\starttypescriptcollection[xmath]
-% Antykwa Poltawskiego (GUST)
+ % Times Math (tx)
-\starttypescript [serif] [antykwa-poltawskiego]
- \definefontsynonym [AntykwaPoltawskiego-Regular] [antpr]
- \definefontsynonym [AntykwaPoltawskiego-Bold] [antpb]
- \definefontsynonym [AntykwaPoltawskiego-Italic] [antpri]
- \definefontsynonym [AntykwaPoltawskiego-BoldItalic] [antpbi]
-\stoptypescript
+ \starttypescript [math][times][all]
+ \loadfontgoodies[tx-math]
+ \definefontsynonym[MathRoman][txmath@tx-math]
+ \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]
+ % Palatino Math (px)
-\stoptypescript
+ \starttypescript [math][palatino][all]
+ \loadfontgoodies[px-math]
+ \definefontsynonym[MathRoman][pxmath@px-math]
+ \stoptypescript
-% [all] is redundant
+\stoptypescriptcollection
-\starttypescript [math][iwona][all]
- \definefontsynonym[MathRoman][iwonamath@iwona-math]
-\stoptypescript
-\starttypescript [math][iwona-light][all]
- \definefontsynonym[MathRoman][iwonalightmath@iwona-light-math]
-\stoptypescript
-\starttypescript [math][iwona-medium][all]
- \definefontsynonym[MathRoman][iwonamediummath@iwona-medium-math]
-\stoptypescript
-\starttypescript [math][iwona-heavy][all]
- \definefontsynonym[MathRoman][iwonaheavymath@iwona-heavy-math]
-\stoptypescript
+\starttypescriptcollection[antykwa]
+
+ % Antykwa Torunska (GUST)
+
+ \starttypescript [serif] [antykwa-torunska,antykwa-torunska-light,antykwa-torunska-cond,antykwa-torunska-lightcond]
+ \definefontsynonym [AntykwaTorunska-Regular] [\s!file:AntykwaTorunska-Regular] [\s!features=\s!default]
+ \definefontsynonym [AntykwaTorunska-Italic] [\s!file:AntykwaTorunska-Italic] [\s!features=\s!default]
+ \definefontsynonym [AntykwaTorunska-Bold] [\s!file:AntykwaTorunska-Bold] [\s!features=\s!default]
+ \definefontsynonym [AntykwaTorunska-BoldItalic] [\s!file:AntykwaTorunska-BoldItalic] [\s!features=\s!default]
+ \definefontsynonym [AntykwaTorunska-Light] [\s!file:AntykwaTorunskaLight-Regular] [\s!features=\s!default]
+ \definefontsynonym [AntykwaTorunska-LightItalic] [\s!file:AntykwaTorunskaLight-Italic] [\s!features=\s!default]
+ \definefontsynonym [AntykwaTorunska-Medium] [\s!file:AntykwaTorunskaMed-Regular] [\s!features=\s!default]
+ \definefontsynonym [AntykwaTorunska-MedItalic] [\s!file:AntykwaTorunskaMed-Italic] [\s!features=\s!default]
+ \definefontsynonym [AntykwaTorunska-CondRegular] [\s!file:AntykwaTorunskaCond-Regular] [\s!features=\s!default]
+ \definefontsynonym [AntykwaTorunska-CondItalic] [\s!file:AntykwaTorunskaCond-Italic] [\s!features=\s!default]
+ \definefontsynonym [AntykwaTorunska-CondBold] [\s!file:AntykwaTorunskaCond-Bold] [\s!features=\s!default]
+ \definefontsynonym [AntykwaTorunska-CondBoldItalic] [\s!file:AntykwaTorunskaCond-BoldItalic] [\s!features=\s!default]
+ \definefontsynonym [AntykwaTorunska-CondLight] [\s!file:AntykwaTorunskaCondLight-Regular] [\s!features=\s!default]
+ \definefontsynonym [AntykwaTorunska-CondLightItalic] [\s!file:AntykwaTorunskaCondLight-Italic] [\s!features=\s!default]
+ \definefontsynonym [AntykwaTorunska-CondMedium] [\s!file:AntykwaTorunskaCondMed-Regular] [\s!features=\s!default]
+ \definefontsynonym [AntykwaTorunska-CondMedItalic] [\s!file:AntykwaTorunskaCondMed-Italic] [\s!features=\s!default]
+
+ \definefontsynonym [AntykwaTorunska-Cap] [\s!file:AntykwaTorunska-Regular] [\s!features=\s!smallcaps]
+ \definefontsynonym [AntykwaTorunska-ItalicCap] [\s!file:AntykwaTorunska-Italic] [\s!features=\s!smallcaps]
+ \definefontsynonym [AntykwaTorunska-BoldCap] [\s!file:AntykwaTorunska-Bold] [\s!features=\s!smallcaps]
+ \definefontsynonym [AntykwaTorunska-BoldItalicCap] [\s!file:AntykwaTorunska-BoldItalic] [\s!features=\s!smallcaps]
+ \definefontsynonym [AntykwaTorunska-LightCap] [\s!file:AntykwaTorunskaLight-Regular] [\s!features=\s!smallcaps]
+ \definefontsynonym [AntykwaTorunska-LightItalicCap] [\s!file:AntykwaTorunskaLight-Italic] [\s!features=\s!smallcaps]
+ \definefontsynonym [AntykwaTorunska-MediumCap] [\s!file:AntykwaTorunskaMed-Regular] [\s!features=\s!smallcaps]
+ \definefontsynonym [AntykwaTorunska-MedItalicCap] [\s!file:AntykwaTorunskaMed-Italic] [\s!features=\s!smallcaps]
+ \definefontsynonym [AntykwaTorunska-CondCap] [\s!file:AntykwaTorunskaCond-Regular] [\s!features=\s!smallcaps]
+ \definefontsynonym [AntykwaTorunska-CondItalicCap] [\s!file:AntykwaTorunskaCond-Italic] [\s!features=\s!smallcaps]
+ \definefontsynonym [AntykwaTorunska-CondBoldCap] [\s!file:AntykwaTorunskaCond-Bold] [\s!features=\s!smallcaps]
+ \definefontsynonym [AntykwaTorunska-CondBoldItalicCap] [\s!file:AntykwaTorunskaCond-BoldItalic] [\s!features=\s!smallcaps]
+ \definefontsynonym [AntykwaTorunska-CondLightCap] [\s!file:AntykwaTorunskaCondLight-Regular] [\s!features=\s!smallcaps]
+ \definefontsynonym [AntykwaTorunska-CondLightItalicCap][\s!file:AntykwaTorunskaCondLight-Italic] [\s!features=\s!smallcaps]
+ \definefontsynonym [AntykwaTorunska-CondMediumCap] [\s!file:AntykwaTorunskaCondMed-Regular] [\s!features=\s!smallcaps]
+ \definefontsynonym [AntykwaTorunska-CondMedItalicCap] [\s!file:AntykwaTorunskaCondMed-Italic] [\s!features=\s!smallcaps]
+ \stoptypescript
+
+ \starttypescript [math][antykwa-torunska][all]
+ \loadfontgoodies[antykwa-math]
+ \definefontsynonym[MathRoman][antykwamath@antykwa-math]
+ \stoptypescript
+
+ \starttypescript [math][antykwa-torunska-light][all]
+ \loadfontgoodies[antykwa-math]
+ \definefontsynonym[MathRoman][antykwalightmath@antykwa-light-math]
+ \stoptypescript
+
+ \starttypescript [math][antykwa-torunska-cond][all]
+ \loadfontgoodies[antykwa-math]
+ \definefontsynonym[MathRoman][antykwacondmath@antykwa-cond-math]
+ \stoptypescript
+
+ \starttypescript [math][antykwa-torunska-lightcond][all]
+ \loadfontgoodies[antykwa-math]
+ \definefontsynonym[MathRoman][antykwalightcondmath@antykwa-lightcond-math]
+ \stoptypescript
+
+ \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]
+
+ \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]
+
+ \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]
+ \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]
+
+ \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]
+
+ \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]
+ \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]
+
+ \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]
+
+ \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]
+ \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]
+
+ \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]
+
+ \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]
+ \stoptypescript
+
+ \starttypescript [antykwa-torunska,antykwa-torunska-light,antykwa-torunska-cond,antykwa-torunska-lightcond]
+ \definetypeface[antykwa][rm][serif][\typescriptone] [default]
+ \definetypeface[antykwa][ss][sans] [modern] [default] [rscale=1.05]
+ \definetypeface[antykwa][tt][mono] [modern] [default] [rscale=1.05]
+ \definetypeface[antykwa][mm][math] [\typescriptone] [default]
+ \quittypescriptscanning
+ \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
+
+% \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
+
+ % names of "Caps" may still change
+ \starttypescript [serif] [antykwa-poltawskiego,antykwa-poltawskiego-light]
+ \definefontsynonym [AntykwaPoltawskiego-Condensed-Light] [\s!file:AntPoltLtCond-Regular] [\s!features=\s!default]
+ \definefontsynonym [AntykwaPoltawskiego-Condensed-LightItalic] [\s!file:AntPoltLtCond-Italic] [\s!features=\s!default]
+ \definefontsynonym [AntykwaPoltawskiego-Condensed-Regular] [\s!file:AntPoltCond-Regular] [\s!features=\s!default]
+ \definefontsynonym [AntykwaPoltawskiego-Condensed-Italic] [\s!file:AntPoltCond-Italic] [\s!features=\s!default]
+ \definefontsynonym [AntykwaPoltawskiego-Condensed-Medium] [\s!file:AntPoltMdCond-Bold] [\s!features=\s!default]
+ \definefontsynonym [AntykwaPoltawskiego-Condensed-MediumItalic] [\s!file:AntPoltMdCond-BoldItalic] [\s!features=\s!default]
+ \definefontsynonym [AntykwaPoltawskiego-Condensed-Bold] [\s!file:AntPoltCond-Bold] [\s!features=\s!default]
+ \definefontsynonym [AntykwaPoltawskiego-Condensed-BoldItalic] [\s!file:AntPoltCond-BoldItalic] [\s!features=\s!default]
+
+ \definefontsynonym [AntykwaPoltawskiego-Condensed-CapsLight] [\s!file:AntPoltLtCond-Regular] [\s!features=\s!smallcaps]
+ \definefontsynonym [AntykwaPoltawskiego-Condensed-CapsLightItalic] [\s!file:AntPoltLtCond-Italic] [\s!features=\s!smallcaps]
+ \definefontsynonym [AntykwaPoltawskiego-Condensed-CapsRegular] [\s!file:AntPoltCond-Regular] [\s!features=\s!smallcaps]
+ \definefontsynonym [AntykwaPoltawskiego-Condensed-CapsItalic] [\s!file:AntPoltCond-Italic] [\s!features=\s!smallcaps]
+ \definefontsynonym [AntykwaPoltawskiego-Condensed-CapsMedium] [\s!file:AntPoltMdCond-Bold] [\s!features=\s!smallcaps]
+ \definefontsynonym [AntykwaPoltawskiego-Condensed-CapsMediumItalic] [\s!file:AntPoltMdCond-BoldItalic] [\s!features=\s!smallcaps]
+ \definefontsynonym [AntykwaPoltawskiego-Condensed-CapsBold] [\s!file:AntPoltCond-Bold] [\s!features=\s!smallcaps]
+ \definefontsynonym [AntykwaPoltawskiego-Condensed-CapsBoldItalic] [\s!file:AntPoltCond-BoldItalic] [\s!features=\s!smallcaps]
+
+ \definefontsynonym [AntykwaPoltawskiego-SemiCondensed-Regular] [\s!file:AntPoltLtSemiCond-Regular] [\s!features=\s!default]
+ \definefontsynonym [AntykwaPoltawskiego-SemiCondensed-Italic] [\s!file:AntPoltLtSemiCond-Italic] [\s!features=\s!default]
+ \definefontsynonym [AntykwaPoltawskiego-SemiCondensed-Regular] [\s!file:AntPoltSemiCond-Regular] [\s!features=\s!default]
+ \definefontsynonym [AntykwaPoltawskiego-SemiCondensed-Italic] [\s!file:AntPoltSemiCond-Italic] [\s!features=\s!default]
+ \definefontsynonym [AntykwaPoltawskiego-SemiCondensed-Medium] [\s!file:AntPoltMdSemiCond-Bold] [\s!features=\s!default]
+ \definefontsynonym [AntykwaPoltawskiego-SemiCondensed-MediumItalic] [\s!file:AntPoltMdSemiCond-BdItalic] [\s!features=\s!default]
+ \definefontsynonym [AntykwaPoltawskiego-SemiCondensed-Bold] [\s!file:AntPoltSemiCond-Bold] [\s!features=\s!default]
+ \definefontsynonym [AntykwaPoltawskiego-SemiCondensed-BoldItalic] [\s!file:AntPoltSemiCond-BoldItalic] [\s!features=\s!default]
+
+ \definefontsynonym [AntykwaPoltawskiego-SemiCondensed-CapsRegular] [\s!file:AntPoltLtSemiCond-Regular] [\s!features=\s!smallcaps]
+ \definefontsynonym [AntykwaPoltawskiego-SemiCondensed-CapsItalic] [\s!file:AntPoltLtSemiCond-Italic] [\s!features=\s!smallcaps]
+ \definefontsynonym [AntykwaPoltawskiego-SemiCondensed-CapsRegular] [\s!file:AntPoltSemiCond-Regular] [\s!features=\s!smallcaps]
+ \definefontsynonym [AntykwaPoltawskiego-SemiCondensed-CapsItalic] [\s!file:AntPoltSemiCond-Italic] [\s!features=\s!smallcaps]
+ \definefontsynonym [AntykwaPoltawskiego-SemiCondensed-CapsMedium] [\s!file:AntPoltMdSemiCond-Bold] [\s!features=\s!smallcaps]
+ \definefontsynonym [AntykwaPoltawskiego-SemiCondensed-CapsMediumItalic] [\s!file:AntPoltMdSemiCond-BdItalic] [\s!features=\s!smallcaps]
+ \definefontsynonym [AntykwaPoltawskiego-SemiCondensed-CapsBold] [\s!file:AntPoltSemiCond-Bold] [\s!features=\s!smallcaps]
+ \definefontsynonym [AntykwaPoltawskiego-SemiCondensed-CapsBoldItalic] [\s!file:AntPoltSemiCond-BoldItalic] [\s!features=\s!smallcaps]
+
+ \definefontsynonym [AntykwaPoltawskiego-Light] [\s!file:AntPoltLt-Regular] [\s!features=\s!default]
+ \definefontsynonym [AntykwaPoltawskiego-LightItalic] [\s!file:AntPoltLt-Italic] [\s!features=\s!default]
+ \definefontsynonym [AntykwaPoltawskiego-Regular] [\s!file:AntPolt-Regular] [\s!features=\s!default]
+ \definefontsynonym [AntykwaPoltawskiego-Italic] [\s!file:AntPolt-Italic] [\s!features=\s!default]
+ \definefontsynonym [AntykwaPoltawskiego-Medium] [\s!file:AntPoltMd-Bold] [\s!features=\s!default]
+ \definefontsynonym [AntykwaPoltawskiego-MediumItalic] [\s!file:AntPoltMd-BoldItalic] [\s!features=\s!default]
+ \definefontsynonym [AntykwaPoltawskiego-Bold] [\s!file:AntPolt-Bold] [\s!features=\s!default]
+ \definefontsynonym [AntykwaPoltawskiego-BoldItalic] [\s!file:AntPolt-BoldItalic] [\s!features=\s!default]
+
+ \definefontsynonym [AntykwaPoltawskiego-CapsLight] [\s!file:AntPoltLt-Regular] [\s!features=\s!smallcaps]
+ \definefontsynonym [AntykwaPoltawskiego-CapsLightItalic] [\s!file:AntPoltLt-Italic] [\s!features=\s!smallcaps]
+ \definefontsynonym [AntykwaPoltawskiego-CapsRegular] [\s!file:AntPolt-Regular] [\s!features=\s!smallcaps]
+ \definefontsynonym [AntykwaPoltawskiego-CapsItalic] [\s!file:AntPolt-Italic] [\s!features=\s!smallcaps]
+ \definefontsynonym [AntykwaPoltawskiego-CapsMedium] [\s!file:AntPoltMd-Bold] [\s!features=\s!smallcaps]
+ \definefontsynonym [AntykwaPoltawskiego-CapsMediumItalic] [\s!file:AntPoltMd-BoldItalic] [\s!features=\s!smallcaps]
+ \definefontsynonym [AntykwaPoltawskiego-CapsBold] [\s!file:AntPolt-Bold] [\s!features=\s!smallcaps]
+ \definefontsynonym [AntykwaPoltawskiego-CapsBoldItalic] [\s!file:AntPolt-BoldItalic] [\s!features=\s!smallcaps]
+
+ \definefontsynonym [AntykwaPoltawskiego-SemiExtended-Light] [\s!file:AntPoltLtSemiExtd-Regular] [\s!features=\s!default]
+ \definefontsynonym [AntykwaPoltawskiego-SemiExtended-LightItalic] [\s!file:AntPoltLtSemiExtd-Italic] [\s!features=\s!default]
+ \definefontsynonym [AntykwaPoltawskiego-SemiExtended-Regular] [\s!file:AntPoltSemiExtd-Regular] [\s!features=\s!default]
+ \definefontsynonym [AntykwaPoltawskiego-SemiExtended-Italic] [\s!file:AntPoltSemiExtd-Italic] [\s!features=\s!default]
+ \definefontsynonym [AntykwaPoltawskiego-SemiExtended-Medium] [\s!file:AntPoltMdSemiExtd-Bold] [\s!features=\s!default]
+ \definefontsynonym [AntykwaPoltawskiego-SemiExtended-MediumItalic] [\s!file:AntPoltMdSemiExtd-BdItalic] [\s!features=\s!default]
+ \definefontsynonym [AntykwaPoltawskiego-SemiExtended-Bold] [\s!file:AntPoltSemiExtd-Bold] [\s!features=\s!default]
+ \definefontsynonym [AntykwaPoltawskiego-SemiExtended-BoldItalic] [\s!file:AntPoltSemiExtd-BoldItalic] [\s!features=\s!default]
+
+ \definefontsynonym [AntykwaPoltawskiego-SemiExtended-CapsLight] [\s!file:AntPoltLtSemiExtd-Regular] [\s!features=\s!smallcaps]
+ \definefontsynonym [AntykwaPoltawskiego-SemiExtended-CapsLightItalic] [\s!file:AntPoltLtSemiExtd-Italic] [\s!features=\s!smallcaps]
+ \definefontsynonym [AntykwaPoltawskiego-SemiExtended-CapsRegular] [\s!file:AntPoltSemiExtd-Regular] [\s!features=\s!smallcaps]
+ \definefontsynonym [AntykwaPoltawskiego-SemiExtended-CapsItalic] [\s!file:AntPoltSemiExtd-Italic] [\s!features=\s!smallcaps]
+ \definefontsynonym [AntykwaPoltawskiego-SemiExtended-CapsMedium] [\s!file:AntPoltMdSemiExtd-Bold] [\s!features=\s!smallcaps]
+ \definefontsynonym [AntykwaPoltawskiego-SemiExtended-CapsMediumItalic] [\s!file:AntPoltMdSemiExtd-BdItalic] [\s!features=\s!smallcaps]
+ \definefontsynonym [AntykwaPoltawskiego-SemiExtended-CapsBold] [\s!file:AntPoltSemiExtd-Bold] [\s!features=\s!smallcaps]
+ \definefontsynonym [AntykwaPoltawskiego-SemiExtended-CapsBoldItalic] [\s!file:AntPoltSemiExtd-BoldItalic] [\s!features=\s!smallcaps]
+
+ \definefontsynonym [AntykwaPoltawskiego-Extended-Light] [\s!file:AntPoltLtExtd-Regular] [\s!features=\s!default]
+ \definefontsynonym [AntykwaPoltawskiego-Extended-LightItalic] [\s!file:AntPoltLtExtd-Italic] [\s!features=\s!default]
+ \definefontsynonym [AntykwaPoltawskiego-Extended-Regular] [\s!file:AntPoltExtd-Regular] [\s!features=\s!default]
+ \definefontsynonym [AntykwaPoltawskiego-Extended-Italic] [\s!file:AntPoltExtd-Italic] [\s!features=\s!default]
+ \definefontsynonym [AntykwaPoltawskiego-Extended-Medium] [\s!file:AntPoltMdExtd-Bold] [\s!features=\s!default]
+ \definefontsynonym [AntykwaPoltawskiego-Extended-MediumItalic] [\s!file:AntPoltMdExtd-BoldItalic] [\s!features=\s!default]
+ \definefontsynonym [AntykwaPoltawskiego-Extended-Bold] [\s!file:AntPoltExtd-Bold] [\s!features=\s!default]
+ \definefontsynonym [AntykwaPoltawskiego-Extended-BoldItalic] [\s!file:AntPoltExtd-BoldItalic] [\s!features=\s!default]
+
+ \definefontsynonym [AntykwaPoltawskiego-Extended-CapsLight] [\s!file:AntPoltLtExtd-Regular] [\s!features=\s!smallcaps]
+ \definefontsynonym [AntykwaPoltawskiego-Extended-CapsLightItalic] [\s!file:AntPoltLtExtd-Italic] [\s!features=\s!smallcaps]
+ \definefontsynonym [AntykwaPoltawskiego-Extended-CapsRegular] [\s!file:AntPoltExtd-Regular] [\s!features=\s!smallcaps]
+ \definefontsynonym [AntykwaPoltawskiego-Extended-CapsItalic] [\s!file:AntPoltExtd-Italic] [\s!features=\s!smallcaps]
+ \definefontsynonym [AntykwaPoltawskiego-Extended-CapsMedium] [\s!file:AntPoltMdExtd-Bold] [\s!features=\s!smallcaps]
+ \definefontsynonym [AntykwaPoltawskiego-Extended-CapsMediumItalic] [\s!file:AntPoltMdExtd-BoldItalic] [\s!features=\s!smallcaps]
+ \definefontsynonym [AntykwaPoltawskiego-Extended-CapsBold] [\s!file:AntPoltExtd-Bold] [\s!features=\s!smallcaps]
+ \definefontsynonym [AntykwaPoltawskiego-Extended-CapsBoldItalic] [\s!file:AntPoltExtd-BoldItalic] [\s!features=\s!smallcaps]
+ \stoptypescript
+
+ \starttypescript [serif] [antykwa-poltawskiego] [name]
+ \definefontsynonym [Serif] [AntykwaPoltawskiego-Regular]
+ \definefontsynonym [SerifBold] [AntykwaPoltawskiego-Bold]
+ \definefontsynonym [SerifItalic] [AntykwaPoltawskiego-Italic]
+ \definefontsynonym [SerifSlanted] [AntykwaPoltawskiego-Italic]
+ \definefontsynonym [SerifBoldItalic] [AntykwaPoltawskiego-BoldItalic]
+ \definefontsynonym [SerifBoldSlanted] [AntykwaPoltawskiego-BoldItalic]
+ \definefontsynonym [SerifCaps] [AntykwaPoltawskiego-CapsRegular]
+ \stoptypescript
+
+ \starttypescript [serif] [antykwa-poltawskiego-light] [name]
+ \definefontsynonym [Serif] [AntykwaPoltawskiego-Light]
+ \definefontsynonym [SerifBold] [AntykwaPoltawskiego-Medium]
+ \definefontsynonym [SerifItalic] [AntykwaPoltawskiego-LightItalic]
+ \definefontsynonym [SerifSlanted] [AntykwaPoltawskiego-LightItalic]
+ \definefontsynonym [SerifBoldItalic] [AntykwaPoltawskiego-MediumItalic]
+ \definefontsynonym [SerifBoldSlanted] [AntykwaPoltawskiego-MediumItalic]
+ \definefontsynonym [SerifCaps] [AntykwaPoltawskiego-CapsLight]
+ \stoptypescript
+
+ % condensed and extended variants are still missing
+
+ \starttypescript [antykwa-poltawskiego,antykwa-poltawskiego-light]
+ \definetypeface [\typescriptone] [rm] [serif] [\typescriptone] [default]
+ \definetypeface [\typescriptone] [ss] [sans] [modern] [default] [rscale=1.05]
+ \definetypeface [\typescriptone] [tt] [mono] [modern] [default] [rscale=1.05]
+ \definetypeface [\typescriptone] [mm] [math] [modern] [default] [rscale=1.05]
+ \quittypescriptscanning
+ \stoptypescript
-\starttypescript [math] [iwona,iwona-light,iwona-medium,iwona-heavy] [all]
- \loadmapfile[iwona-rm.map]
- \loadmapfile[iwona-mi.map]
- \loadmapfile[iwona-sy.map]
- \loadmapfile[iwona-ex.map]
-\stoptypescript
+\stoptypescriptcollection
-% 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
+\starttypescriptcollection[iwona]
+
+ % 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] [\s!file:Iwona-Regular] [\s!features=\s!default]
+ \definefontsynonym [Iwona-Italic] [\s!file:Iwona-Italic] [\s!features=\s!default]
+ \definefontsynonym [Iwona-Bold] [\s!file:Iwona-Bold] [\s!features=\s!default]
+ \definefontsynonym [Iwona-BoldItalic] [\s!file:Iwona-BoldItalic] [\s!features=\s!default]
+ \definefontsynonym [Iwona-Light-Regular] [\s!file:IwonaLight-Regular] [\s!features=\s!default]
+ \definefontsynonym [Iwona-Light-Italic] [\s!file:IwonaLight-Italic] [\s!features=\s!default]
+ \definefontsynonym [Iwona-Medium-Regular] [\s!file:IwonaMedium-Regular] [\s!features=\s!default]
+ \definefontsynonym [Iwona-Medium-Italic] [\s!file:IwonaMedium-Italic] [\s!features=\s!default]
+ \definefontsynonym [Iwona-Heavy-Regular] [\s!file:IwonaHeavy-Regular] [\s!features=\s!default]
+ \definefontsynonym [Iwona-Heavy-Italic] [\s!file:IwonaHeavy-Italic] [\s!features=\s!default]
+
+ \definefontsynonym [Iwona-CapsRegular] [\s!file:Iwona-Regular] [\s!features=\s!smallcaps]
+ \definefontsynonym [Iwona-CapsItalic] [\s!file:Iwona-Italic] [\s!features=\s!smallcaps]
+ \definefontsynonym [Iwona-CapsBold] [\s!file:Iwona-Bold] [\s!features=\s!smallcaps]
+ \definefontsynonym [Iwona-CapsBoldItalic] [\s!file:Iwona-BoldItalic] [\s!features=\s!smallcaps]
+ \definefontsynonym [Iwona-CapsLight] [\s!file:IwonaLight-Regular] [\s!features=\s!smallcaps]
+ \definefontsynonym [Iwona-CapsLight-Italic] [\s!file:IwonaLight-Italic] [\s!features=\s!smallcaps]
+ \definefontsynonym [Iwona-CapsMedium] [\s!file:IwonaMedium-Regular] [\s!features=\s!smallcaps]
+ \definefontsynonym [Iwona-CapsMedium-Italic] [\s!file:IwonaMedium-Italic] [\s!features=\s!smallcaps]
+ \definefontsynonym [Iwona-CapsHeavy] [\s!file:IwonaHeavy-Regular] [\s!features=\s!smallcaps]
+ \definefontsynonym [Iwona-CapsHeavy-Italic] [\s!file:IwonaHeavy-Italic] [\s!features=\s!smallcaps]
+
+ \definefontsynonym [Iwona-CondRegular] [\s!file:IwonaCond-Regular] [\s!features=\s!default]
+ \definefontsynonym [Iwona-CondItalic] [\s!file:IwonaCond-Italic] [\s!features=\s!default]
+ \definefontsynonym [Iwona-CondBold] [\s!file:IwonaCond-Bold] [\s!features=\s!default]
+ \definefontsynonym [Iwona-CondBoldItalic] [\s!file:IwonaCond-BoldItalic] [\s!features=\s!default]
+ \definefontsynonym [Iwona-CondLight-Regular] [\s!file:IwonaCondLight-Regular] [\s!features=\s!default]
+ \definefontsynonym [Iwona-CondLight-Italic] [\s!file:IwonaCondLight-Italic] [\s!features=\s!default]
+ \definefontsynonym [Iwona-CondMedium-Regular] [\s!file:IwonaCondMedium-Regular] [\s!features=\s!default]
+ \definefontsynonym [Iwona-CondMedium-Italic] [\s!file:IwonaCondMedium-Italic] [\s!features=\s!default]
+ \definefontsynonym [Iwona-CondHeavy-Regular] [\s!file:IwonaCondHeavy-Regular] [\s!features=\s!default]
+ \definefontsynonym [Iwona-CondHeavy-Italic] [\s!file:IwonaCondHeavy-Italic] [\s!features=\s!default]
+
+ \definefontsynonym [Iwona-CapsCondRegular] [\s!file:IwonaCond-Regular] [\s!features=\s!smallcaps]
+ \definefontsynonym [Iwona-CapsCondItalic] [\s!file:IwonaCond-Italic] [\s!features=\s!smallcaps]
+ \definefontsynonym [Iwona-CapsCondBold] [\s!file:IwonaCond-Bold] [\s!features=\s!smallcaps]
+ \definefontsynonym [Iwona-CapsCondBoldItalic] [\s!file:IwonaCond-BoldItalic] [\s!features=\s!smallcaps]
+ \definefontsynonym [Iwona-CapsCondLight-Regular] [\s!file:IwonaCondLight-Regular] [\s!features=\s!smallcaps]
+ \definefontsynonym [Iwona-CapsCondLight-Italic] [\s!file:IwonaCondLight-Italic] [\s!features=\s!smallcaps]
+ \definefontsynonym [Iwona-CapsCondMedium-Regular][\s!file:IwonaCondMedium-Regular] [\s!features=\s!smallcaps]
+ \definefontsynonym [Iwona-CapsCondMedium-Italic] [\s!file:IwonaCondMedium-Italic] [\s!features=\s!smallcaps]
+ \definefontsynonym [Iwona-CapsCondHeavy-Regular] [\s!file:IwonaCondHeavy-Regular] [\s!features=\s!smallcaps]
+ \definefontsynonym [Iwona-CapsCondHeavy-Italic] [\s!file:IwonaCondHeavy-Italic] [\s!features=\s!smallcaps]
+
+ \stoptypescript
+
+ % [all] is redundant
+
+ \starttypescript [math][iwona][all]
+ \definefontsynonym[MathRoman][iwonamath@iwona-math]
+ \stoptypescript
+ \starttypescript [math][iwona-light][all]
+ \definefontsynonym[MathRoman][iwonalightmath@iwona-light-math]
+ \stoptypescript
+ \starttypescript [math][iwona-medium][all]
+ \definefontsynonym[MathRoman][iwonamediummath@iwona-medium-math]
+ \stoptypescript
+ \starttypescript [math][iwona-heavy][all]
+ \definefontsynonym[MathRoman][iwonaheavymath@iwona-heavy-math]
+ \stoptypescript
+
+ \starttypescript [math] [iwona,iwona-light,iwona-medium,iwona-heavy] [all]
+ \loadfontgoodies[iwona-math]
+ \stoptypescript
+
+ \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 [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
-\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
+\stoptypescriptcollection
-\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
+\starttypescriptcollection[kurier]
+
+ % Kurier (JMN) / no open type fonts yet so this should be in type-one.mkiv
+
+ \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 [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-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
+\stoptypescriptcollection
-\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
+\starttypescriptcollection[symbols]
-\starttypescript [iwona,iwona-light,iwona-medium,iwona-heavy]
- \definetypeface[\typescriptone][ss][sans] [\typescriptone] [default]
- \definetypeface[\typescriptone][rm][serif][modern] [default]
- \definetypeface[\typescriptone][tt][mono] [modern] [default][rscale=1.05]
- \definetypeface[\typescriptone][mm][math] [\typescriptone] [default][text=ss]
- \quittypescriptscanning
-\stoptypescript
+ \starttypescript
+ \definefontsynonym [ZapfDingbats] [uzdr]
+ \definefontsynonym [RalfSmithFormalScript] [rsfs10]
+ \definefontsynonym [MartinVogel] [fmvr8x]
+ \stoptypescript
-% Whatever else we need:
+\stoptypescriptcollection
-\starttypescript
- \definefontsynonym [ZapfDingbats] [uzdr]
- \definefontsynonym [RalfSmithFormalScript] [rsfs10]
- \definefontsynonym [MartinVogel] [fmvr8x]
-\stoptypescript
+\starttypescriptcollection[charter]
+
+ \starttypescript [serif] [charter]
+ \definefontsynonym [Charter-Roman] [\s!name:CharterBT-Roman] % or: [bchr8a]
+ \definefontsynonym [Charter-Italic] [\s!name:CharterBT-Italic] % or: [bchri8a]
+ \definefontsynonym [Charter-Bold] [\s!name:CharterBT-Bold] % or: [bchb8a]
+ \definefontsynonym [Charter-BoldItalic] [\s!name:CharterBT-BoldItalic] % or: [bchbi8a]
+ \definefontsynonym [Charter-Slanted] [\s!name:CharterBT-Italic] % or: [bchri8a]
+ \definefontsynonym [Charter-BoldSlanted] [\s!name:CharterBT-BoldItalic] % or: [bchbi8a]
+ \definefontsynonym [Charter-Roman-Caps] [Charter-Roman] % not present
+ \stoptypescript
+
+ \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
-% Temp here
+\stoptypescriptcollection
-\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] [Charter-Roman] % not present
-\stoptypescript
+\starttypescriptcollection[mathtimes]
-% new
+ \starttypescript [math] [mathtimes] [all]
+ \loadfontgoodies[mathtimes-math]
+ \definefontsynonym[MathRoman][mathtimes@mathtimes-math]
+ \stoptypescript
-% cambria.ttc cambriab.ttf cambriai.ttf cambriaz.ttf
+ \starttypescript [mathtimes]
+ \definetypeface [mathtimes] [rm] [serif] [times] [default]
+ \definetypeface [mathtimes] [ss] [sans] [helvetica] [default] [rscale=0.9]
+ \definetypeface [mathtimes] [tt] [mono] [modern] [default] [rscale=1.05]
+ \definetypeface [mathtimes] [mm] [math] [mathtimes] [default]
+ \quittypescriptscanning
+ \stoptypescript
-\starttypescript [math] [cambria] [name]
- \definefontsynonym [MathRoman] [name:cambriamath] [features=math\mathsizesuffix]
-\stoptypescript
-\starttypescript [math] [cambria-x] [name]
- \definefontsynonym [MathRoman] [name:cambriamath] [features=math]
-\stoptypescript
-\starttypescript [math] [cambria-y] [name]
- \definefontsynonym [MathRoman] [name:cambriamath] [features=math-nostack\mathsizesuffix]
-\stoptypescript
+\stoptypescriptcollection
-\starttypescript [serif] [cambria] [name]
- \usetypescript[fallback:serif]
- \definefontsynonym [Serif] [name:cambria] [features=default]
- \definefontsynonym [SerifBold] [name:cambriabold] [features=default]
- \definefontsynonym [SerifItalic] [name:cambriaitalic] [features=default]
- \definefontsynonym [SerifBoldItalic] [name:cambriabolditalic] [features=default]
-\stoptypescript
+\starttypescriptcollection[lucida]
+
+ \starttypescript [serif] [lucida]
+ \definefontsynonym [LucidaBright] [\s!name:LucidaBright]
+ \definefontsynonym [LucidaBright-Demi] [\s!name:LucidaBright-Demi]
+ \definefontsynonym [LucidaBright-Italic] [\s!name:LucidaBright-Italic]
+ \definefontsynonym [LucidaBright-DemiItalic] [\s!name:LucidaBright-DemiItalic]
+ \definefontsynonym [LucidaBright-Oblique] [\s!name:LucidaBright-Oblique]
+ \definefontsynonym [LucidaBrightSmallcaps] [\s!name:LucidaBrightSmallcaps]
+ \definefontsynonym [LucidaBrightSmallcaps-Demi] [\s!name:LucidaBrightSmallcaps-Demi]
+ \stoptypescript
+
+ \starttypescript [sans] [lucida]
+ \definefontsynonym [LucidaSans] [\s!name:LucidaSans]
+ \definefontsynonym [LucidaSans-Demi] [\s!name:LucidaSans-Demi]
+ \definefontsynonym [LucidaSans-Bold] [\s!name:LucidaSans-Bold]
+ \definefontsynonym [LucidaSans-Italic] [\s!name:LucidaSans-Italic]
+ \definefontsynonym [LucidaSans-DemiItalic] [\s!name:LucidaSans-DemiItalic]
+ \definefontsynonym [LucidaSans-BoldItalic] [\s!name:LucidaSans-BoldItalic]
+ \stoptypescript
+
+ \starttypescript [mono] [lucida]
+ \definefontsynonym [LucidaTypewriter] [\s!name:LucidaTypewriter]
+ \definefontsynonym [LucidaTypewriterBold] [\s!name:LucidaTypewriterBold]
+ \definefontsynonym [LucidaTypewriterOblique] [\s!name:LucidaTypewriterOblique]
+ \definefontsynonym [LucidaTypewriterBoldOblique] [\s!name:LucidaTypewriterBoldOblique]
+ \stoptypescript
+
+ \starttypescript [mono] [lucida]
+ \definefontsynonym [LucidaSans-Typewriter] [\s!name:LucidaSans-Typewriter]
+ \definefontsynonym [LucidaSans-TypewriterBold] [\s!name:LucidaSans-TypewriterBold]
+ \definefontsynonym [LucidaSans-TypewriterOblique] [\s!name:LucidaSans-TypewriterOblique]
+ \definefontsynonym [LucidaSans-TypewriterBoldOblique] [\s!name:LucidaSans-TypewriterBoldOblique]
+ \stoptypescript
+
+ \starttypescript [calligraphy] [lucida]
+ \definefontsynonym [LucidaCalligraphy-Italic] [\s!name:LucidaCalligraphy-Italic]
+ \stoptypescript
+
+ \starttypescript [casual] [lucida]
+ \definefontsynonym [LucidaCasual] [\s!name:LucidaCasual]
+ \definefontsynonym [LucidaCasual-Italic] [\s!name:LucidaCasual-Italic]
+ \stoptypescript
+
+ \starttypescript [handwriting] [lucida]
+ \definefontsynonym [LucidaHandwriting-Italic] [\s!name:LucidaHandwriting-Italic]
+ \stoptypescript
+
+ \starttypescript [fax] [lucida]
+ \definefontsynonym [LucidaFax] [\s!name:LucidaFax]
+ \definefontsynonym [LucidaFax-Demi] [\s!name:LucidaFax-Demi]
+ \definefontsynonym [LucidaFax-Italic] [\s!name:LucidaFax-Italic]
+ \definefontsynonym [LucidaFax-DemiItalic] [\s!name:LucidaFax-DemiItalic]
+ \stoptypescript
+
+ \starttypescript [blackletter] [lucida]
+ \definefontsynonym [LucidaBlackletter] [\s!name:LucidaBlackletter]
+ \stoptypescript
+
+ \starttypescript [math] [lucida]
+ \loadfontgoodies[lucida-math]
+ \definefontsynonym[MathRoman][lucidamath@lucida-math]
+ \stoptypescript
+
+ \starttypescript [serif] [lucida] [name]
+ \definefontsynonym [Serif] [LucidaBright]
+ \definefontsynonym [SerifBold] [LucidaBright-Demi]
+ \definefontsynonym [SerifItalic] [LucidaBright-Italic]
+ \definefontsynonym [SerifBoldItalic] [LucidaBright-DemiItalic]
+ \definefontsynonym [SerifSlanted] [LucidaBright-Oblique]
+ \definefontsynonym [SerifBoldSlanted] [LucidaBright-DemiItalic]
+ \definefontsynonym [SerifCaps] [LucidaBrightSmallcaps]
+ \definefontsynonym [SerifBoldCaps] [LucidaBrightSmallcaps-Demi]
+ \stoptypescript
+
+ % Lucida Bright Sans
+
+ \starttypescript [sans] [lucida] [name]
+ \definefontsynonym [Sans] [LucidaSans]
+ \definefontsynonym [SansBold] [LucidaSans-Demi]
+ \definefontsynonym [SansItalic] [LucidaSans-Italic]
+ \definefontsynonym [SansBoldItalic] [LucidaSans-DemiItalic]
+ \definefontsynonym [SansSlanted] [LucidaSans-Italic]
+ \definefontsynonym [SansBoldSlanted] [LucidaSans-DemiItalic]
+ \definefontsynonym [SansCaps] [LucidaSans]
+ \stoptypescript
+
+ % Lucida Bright Typewriter
+
+ % only one family may be used as mono; sans used to be that since the beginning,
+ % so we keep using that as default
+
+ % \starttypescript [mono] [lucida] [name]
+ % \definefontsynonym [Mono] [LucidaTypewriter]
+ % \definefontsynonym [MonoBold] [LucidaTypewriterBold]
+ % \definefontsynonym [MonoItalic] [LucidaTypewriterOblique]
+ % \definefontsynonym [MonoBoldItalic] [LucidaTypewriterBoldOblique]
+ % \definefontsynonym [MonoSlanted] [LucidaTypewriterOblique]
+ % \definefontsynonym [MonoBoldSlanted] [LucidaTypewriterBoldOblique]
+ % \definefontsynonym [MonoCaps] [LucidaTypewriter]
+ % \stoptypescript
+
+ % Lucida Bright Sans Typewriter
+
+ \starttypescript [mono] [lucida] [name]
+ \definefontsynonym [Mono] [LucidaSans-Typewriter]
+ \definefontsynonym [MonoBold] [LucidaSans-TypewriterBold]
+ \definefontsynonym [MonoItalic] [LucidaSans-TypewriterOblique]
+ \definefontsynonym [MonoBoldItalic] [LucidaSans-TypewriterBoldOblique]
+ \definefontsynonym [MonoSlanted] [LucidaSans-TypewriterOblique]
+ \definefontsynonym [MonoBoldSlanted] [LucidaSans-TypewriterBoldOblique]
+ \definefontsynonym [MonoCaps] [LucidaSans-Typewriter]
+ \stoptypescript
+
+ % Lucida Calligraphy
+
+ \starttypescript [calligraphy] [lucida] [name]
+ \definefontsynonym [Calligraphy] [LucidaCalligraphy-Italic]
+ \stoptypescript
+
+ % Lucida Casual
+
+ % \starttypescript [casual] [lucida] [name]
+ % % LucidaCasual
+ % % LucidaCasual-Italic
+ % \stoptypescript
+
+ % Lucida Handwriting
+
+ \starttypescript [handwriting] [lucida] [name]
+ \definefontsynonym [Handwriting] [LucidaHandwriting-Italic]
+ \stoptypescript
+
+ % Lucida Fax
+ %
+ % \starttypescript [fax] [lucida] [name]
+ % \definefontsynonym [FaksRegular] [LucidaFax]
+ % \definefontsynonym [FaksBold] [LucidaFax-Demi]
+ % \definefontsynonym [FaksItalic] [LucidaFax-Italic]
+ % \definefontsynonym [FaksBoldItalic] [LucidaFax-DemiItalic]
+ % \stoptypescript
+
+ % Lucida Black Letter
+ %
+ % \starttypescript [blackletter] [lucida] [name]
+ % \definefontsynonym [Blackletter] [LucidaBlackletter]
+ % \stoptypescript
+
+ \starttypescript [lucida]
+ \definetypeface [lucida] [rm] [\s!serif] [lucida] [\s!default] [\s!features=\s!default]
+ \definetypeface [lucida] [ss] [\s!sans] [lucida] [\s!default] [\s!features=\s!default]
+ \definetypeface [lucida] [tt] [\s!mono] [lucida] [\s!default] [\s!features=\s!default]
+ \definetypeface [lucida] [hw] [\s!handwriting] [lucida] [\s!default] [\s!features=\s!default]
+ \definetypeface [lucida] [cg] [\s!calligraphy] [lucida] [\s!default] [\s!features=\s!default]
+ \definetypeface [lucida] [mm] [\s!math] [lucida] [\s!default]
+ \stoptypescript
-\starttypescript [cambria]
- \definetypeface [cambria] [rm] [serif] [cambria] [default]
- \definetypeface [cambria] [tt] [mono] [modern] [default]
- \definetypeface [cambria] [mm] [math] [cambria] [default]
-\stoptypescript
+\stoptypescriptcollection
-\starttypescript [cambria-x]
- \definetypeface [cambria-x] [rm] [serif] [cambria] [default]
- \definetypeface [cambria-x] [tt] [mono] [modern] [default]
- \definetypeface [cambria-x] [mm] [math] [cambria-x] [default]
-\stoptypescript
+\starttypescriptcollection [mathdesign]
-\starttypescript [cambria-y]
- \definetypeface [cambria-y] [rm] [serif] [cambria] [default]
- \definetypeface [cambria-y] [tt] [mono] [modern] [default]
- \definetypeface [cambria-y] [mm] [math] [cambria-y] [default]
-\stoptypescript
+ \starttypescript [math] [charter,mathdesignch] [all]
+ \loadfontgoodies[charter-math]
+ \definefontsynonym[MathRoman][chartermath@charter-math]
+ \stoptypescript
-% math times
+ \starttypescript [math] [garamond,mathdesigngm] [all]
+ \loadfontgoodies[garamond-math]
+ \definefontsynonym[MathRoman][garamondmath@garamond-math]
+ \stoptypescript
-\starttypescript [math] [mathtimes] [all]
- \definefontsynonym[MathRoman][mathtimes@mathtimes-math]
- \loadmapfile[mathtime.map]
-\stoptypescript
+ \starttypescript [math] [utopia,mathdesignut] [all]
+ \loadfontgoodies[utopia-math]
+ \definefontsynonym[MathRoman][utopiamath@utopia-math]
+ \stoptypescript
-\starttypescript [mathtimes]
- \definetypeface [mathtimes] [rm] [serif] [times] [default]
- \definetypeface [mathtimes] [ss] [sans] [helvetica] [default] [rscale=0.9]
- \definetypeface [mathtimes] [tt] [mono] [modern] [default] [rscale=1.05]
- \definetypeface [mathtimes] [mm] [math] [mathtimes] [default]
- \quittypescriptscanning
-\stoptypescript
+\stoptypescriptcollection
-% lucida
+\starttypescriptcollection [asanamath]
-\starttypescript [math] [lucida,lucidanewmath] [all]
- \definefontsynonym[MathRoman][lucidamath@lucida-math]
- \loadmapfile[lucida.map]
-\stoptypescript
+ \starttypescript [math] [asana]
+ \definefontsynonym [AsanaMath] [\s!name:asanamath]
+ \stoptypescript
-% mathdesign
+ \starttypescript [math] [asana] [name]
+ \definefontsynonym [MathRoman] [AsanaMath] [\s!features=math\mathsizesuffix]
+ \stoptypescript
-\starttypescript [math] [charter,mathdesignch] [all]
- \definefontsynonym[MathRoman][chartermath@charter-math]
- \loadmapfile[mdbch.map]
-\stoptypescript
+ \starttypescript[asana]
+ \definetypeface [\typescriptone] [rm] [\s!serif] [palatino] [\s!default]
+ \definetypeface [\typescriptone] [ss] [\s!sans] [modern] [\s!default] [rscale=1.075]
+ \definetypeface [\typescriptone] [tt] [\s!mono] [modern] [\s!default] [rscale=1.075]
+ \definetypeface [\typescriptone] [mm] [\s!math] [\typescriptone] [\s!default]
+ \quittypescriptscanning
+ \stoptypescript
-\starttypescript [math] [garamond,mathdesigngm] [all]
- \definefontsynonym[MathRoman][garamondmath@garamond-math]
- \loadmapfile[mdugm.map]
-\stoptypescript
+\stoptypescriptcollection
-\starttypescript [math] [utopia,mathdesignut] [all]
- \definefontsynonym[MathRoman][utopiamath@utopia-math]
- \loadmapfile[mdput.map]
-\stoptypescript
+\starttypescriptcollection[cleartype]
+
+ % microsoft: cambria.ttc cambriab.ttf cambriai.ttf cambriaz.ttf
+ % ascender : cambmath.ttf cambria.ttf cambriab.ttf cambriai.ttf cambriaz.ttf
+
+ \starttypescript [math,serif] [cambria,cambria-x,cambria-y]
+ % whatever matches
+ \definefontsynonym [CambriaMath] [\s!name:cambriamath]
+ \definefontsynonym [CambriaSerif] [\s!name:cambria]
+ \stoptypescript
+ \starttypescript [math,serif] [cambria-m]
+ % microsoft cabria
+ \definefontsynonym [CambriaMath] [\s!file:cambria.ttc(Cambria Math)]
+ \definefontsynonym [CambriaSerif] [\s!file:cambria.ttc(Cambria)]
+ \stoptypescript
+ \starttypescript [math,serif] [cambria-a]
+ % ascender cambria
+ \definefontsynonym [CambriaMath] [\s!file:cambmath.ttf]
+ \definefontsynonym [CambriaSerif] [\s!file:cambria.ttf]
+ \stoptypescript
+
+ \starttypescript [math] [cambria,cambria-m,cambria-a] [name]
+ \definefontsynonym [MathRoman] [CambriaMath] [\s!features=math\mathsizesuffix]
+ \stoptypescript
+ \starttypescript [math] [cambria-x] [name]
+ \definefontsynonym [MathRoman] [CambriaMath] [\s!features=math]
+ \stoptypescript
+ \starttypescript [math] [cambria-y] [name]
+ \definefontsynonym [MathRoman] [CambriaMath] [\s!features=math-nostack\mathsizesuffix]
+ \stoptypescript
+
+ \starttypescript [serif] [cambria,cambria-m,cambria-a] [name]
+ \setups[\s!font:\s!fallback:\s!serif]
+ \definefontsynonym [\s!Serif] [CambriaSerif] [\s!features=\s!default]
+ \definefontsynonym [\s!SerifBold] [\s!name:cambriabold] [\s!features=\s!default]
+ \definefontsynonym [\s!SerifItalic] [\s!name:cambriaitalic] [\s!features=\s!default]
+ \definefontsynonym [\s!SerifBoldItalic] [\s!name:cambriabolditalic] [\s!features=\s!default]
+ \stoptypescript
+
+ \starttypescript [cambria,cambria-m,cambria-a]
+ % any
+ \definetypeface [cambria] [rm] [\s!serif] [\typescriptone] [\s!default]
+ \definetypeface [cambria] [tt] [\s!mono] [modern] [\s!default]
+ \definetypeface [cambria] [mm] [\s!math] [\typescriptone] [\s!default]
+ \stoptypescript
+ \starttypescript [cambria-x,cambria-y]
+ % test x
+ \definetypeface [\typescriptone] [rm] [\s!serif] [cambria] [\s!default]
+ \definetypeface [\typescriptone] [tt] [\s!mono] [modern] [\s!default]
+ \definetypeface [\typescriptone] [mm] [\s!math] [\typescriptone] [\s!default]
+ \stoptypescript
+
+ \starttypescript [sans] [candara] [name]
+ \setups[\s!font:\s!fallback:\s!sans]
+ \definefontsynonym [\s!Sans] [\s!file:candara] [\s!features=\s!default]
+ \definefontsynonym [\s!SansBold] [\s!file:candarab] [\s!features=\s!default]
+ \definefontsynonym [\s!SansItalic] [\s!file:candarai] [\s!features=\s!default]
+ \definefontsynonym [\s!SansBoldItalic] [\s!file:candaraz] [\s!features=\s!default]
+ \stoptypescript
+
+ \starttypescript [sans] [consolas] [name]
+ \setups[\s!font:\s!fallback:\s!sans]
+ \definefontsynonym [\s!Sans] [\s!file:consola] [\s!features=\s!default]
+ \definefontsynonym [\s!SansBold] [\s!file:consolab] [\s!features=\s!default]
+ \definefontsynonym [\s!SansItalic] [\s!file:consolai] [\s!features=\s!default]
+ \definefontsynonym [\s!SansBoldItalic] [\s!file:consolaz] [\s!features=\s!default]
+ \stoptypescript
+
+ \starttypescript [serif] [constantia] [name]
+ \setups[\s!font:\s!font:\s!fallback:\s!serif]
+ \definefontsynonym [\s!Serif] [\s!file:constan] [\s!features=\s!default]
+ \definefontsynonym [\s!SerifBold] [\s!file:constanb] [\s!features=\s!default]
+ \definefontsynonym [\s!SerifItalic] [\s!file:constani] [\s!features=\s!default]
+ \definefontsynonym [\s!SerifBoldItalic] [\s!file:constanz] [\s!features=\s!default]
+ \stoptypescript
+
+ \starttypescript [sans] [corbel] [name]
+ \setups[\s!font:\s!fallback:\s!sans]
+ \definefontsynonym [\s!Sans] [\s!file:corbel] [\s!features=\s!default]
+ \definefontsynonym [\s!SansBold] [\s!file:corbelb] [\s!features=\s!default]
+ \definefontsynonym [\s!SansItalic] [\s!file:corbeli] [\s!features=\s!default]
+ \definefontsynonym [\s!SansBoldItalic] [\s!file:corbelz] [\s!features=\s!default]
+ \stoptypescript
+
+ \starttypescript [sans] [calibri] [name]
+ \setups[\s!font:\s!fallback:\s!sans]
+ \definefontsynonym [\s!Sans] [\s!file:calibri] [\s!features=\s!default]
+ \definefontsynonym [\s!SansBold] [\s!file:calibrib] [\s!features=\s!default]
+ \definefontsynonym [\s!SansItalic] [\s!file:calibrii] [\s!features=\s!default]
+ \definefontsynonym [\s!SansBoldItalic] [\s!file:calibriz] [\s!features=\s!default]
+ \stoptypescript
+
+\stoptypescriptcollection
+
+\starttypescriptcollection[mscore]
+
+ % .ttf not really needed but we want to force the originals
+
+ \starttypescript [serif] [mscoretimes] [name]
+ \setups[\s!font:\s!fallback:\s!serif]
+ \definefontsynonym [\s!Serif] [\s!file:times.ttf] [\s!features=\s!default]
+ \definefontsynonym [\s!SerifBold] [\s!file:timesbd.ttf] [\s!features=\s!default]
+ \definefontsynonym [\s!SerifItalic] [\s!file:timesi.ttf] [\s!features=\s!default]
+ \definefontsynonym [\s!SerifBoldItalic] [\s!file:timesbi.ttf] [\s!features=\s!default]
+ \stoptypescript
+
+ \starttypescript [sans] [mscorearial] [name]
+ \setups[\s!font:\s!fallback:\s!sans]
+ \definefontsynonym [\s!Sans] [\s!file:arial.ttf] [\s!features=default]
+ \definefontsynonym [\s!SansBold] [\s!file:arialbd.ttf] [\s!features=default]
+ \definefontsynonym [\s!SansItalic] [\s!file:ariali.ttf] [\s!features=default]
+ \definefontsynonym [\s!SansBoldItalic] [\s!file:arialbi.ttf] [\s!features=default]
+ \stoptypescript
+
+ \starttypescript [mono] [mscorecourier] [name]
+ \setups[\s!font:\s!fallback:\s!mono]
+ \definefontsynonym [\s!Mono] [\s!file:cour.ttf] [\s!features=\s!default]
+ \definefontsynonym [\s!MonoBold] [\s!file:courbd.ttf] [\s!features=\s!default]
+ \definefontsynonym [\s!MonoItalic] [\s!file:couri.ttf] [\s!features=\s!default]
+ \definefontsynonym [\s!MonoBoldItalic] [\s!file:courbi.ttf] [\s!features=\s!default]
+ \stoptypescript
+
+ \starttypescript [sans] [mscoreverdana] [name]
+ \setups[\s!font:\s!fallback:\s!sans]
+ \definefontsynonym [\s!Sans] [\s!file:verdana.ttf] [\s!features=\s!default]
+ \definefontsynonym [\s!SansBold] [\s!file:verdanab.ttf] [\s!features=\s!default]
+ \definefontsynonym [\s!SansItalic] [\s!file:verdanai.ttf] [\s!features=\s!default]
+ \definefontsynonym [\s!SansBoldItalic] [\s!file:verdanaz.ttf] [\s!features=\s!default]
+ \stoptypescript
+
+ \starttypescript[mscore]
+ \definetypeface [mscore] [rm] [serif] [mscoretimes] [default]
+ \definetypeface [mscore] [ss] [sans] [mscorearial] [default] [rscale=0.860]
+ \definetypeface [mscore] [tt] [mono] [mscorecourier] [default] [rscale=1.065]
+ \definetypeface [mscore] [mm] [math] [times] [default] [rscale=1.020]
+ \stoptypescript
+
+\stoptypescriptcollection
+
+\starttypescriptcollection[liberation]
+
+ \starttypescript [serif] [liberationserif] [name]
+ \setups[\s!font:\s!fallback:\s!serif]
+ \definefontsynonym [\s!Serif] [\s!file:liberationserif-regular] [\s!features=\s!default]
+ \definefontsynonym [\s!SerifBold] [\s!file:liberationserif-bold] [\s!features=\s!default]
+ \definefontsynonym [\s!SerifItalic] [\s!file:liberationserif-italic] [\s!features=\s!default]
+ \definefontsynonym [\s!SerifBoldItalic] [\s!file:liberationserif-bolditalic] [\s!features=\s!default]
+ \stoptypescript
+
+ \starttypescript [sans] [liberationsans] [name]
+ \setups[\s!font:\s!fallback:\s!sans]
+ \definefontsynonym [\s!Sans] [\s!file:liberationsans-regular] [\s!features=\s!default]
+ \definefontsynonym [\s!SansBold] [\s!file:liberationsans-bold] [\s!features=\s!default]
+ \definefontsynonym [\s!SansItalic] [\s!file:liberationsans-italic] [\s!features=\s!default]
+ \definefontsynonym [\s!SansBoldItalic] [\s!file:liberationsans-bolditalic] [\s!features=\s!default]
+ \stoptypescript
+
+ \starttypescript [mono] [liberationmono] [name]
+ \setups[\s!font:\s!fallback:\s!mono]
+ \definefontsynonym [\s!Mono] [\s!file:liberationmono-regular] [\s!features=\s!default]
+ \definefontsynonym [\s!MonoBold] [\s!file:liberationmono-bold] [\s!features=\s!default]
+ \definefontsynonym [\s!MonoItalic] [\s!file:liberationmono-italic] [\s!features=\s!default]
+ \definefontsynonym [\s!MonoBoldItalic] [\s!file:liberationmono-bolditalic] [\s!features=\s!default]
+ \stoptypescript
+
+ \starttypescript[liberation]
+ \definetypeface [liberation] [rm] [serif] [liberationserif] [default]
+ \definetypeface [liberation] [ss] [sans] [liberationsans] [default] [rscale=0.870]
+ \definetypeface [liberation] [tt] [mono] [liberationmono] [default] [rscale=0.870]
+ \definetypeface [liberation] [mm] [math] [times] [default] [rscale=1.040]
+ \stoptypescript
+
+\stoptypescriptcollection
+
+%D For some reason the libertine collection has not retained its
+%D original names. We force the \OPENTYPE\ variant. Once these fonts
+%D are stable we might switch to the by then hopefully cleaner internal
+%D names.
+
+\starttypescriptcollection[libertine]
+
+% \starttypescript [serif] [libertine] [name]
+% \setups[\s!font:\s!fallback:\s!serif]
+% \definefontsynonym [\s!Serif] [\s!file:fxlr.otf] [\s!features=\s!default]
+% \definefontsynonym [\s!SerifBold] [\s!file:fxlb.otf] [\s!features=\s!default]
+% \definefontsynonym [\s!SerifItalic] [\s!file:fxlri.otf] [\s!features=\s!default]
+% \definefontsynonym [\s!SerifBoldItalic] [\s!file:fxlbi.otf] [\s!features=\s!default]
+% \stoptypescript
+
+ \starttypescript [serif] [libertine]
+ \definefontsynonym [Libertine-Regular] [\s!file:fxlr]
+ \definefontsynonym [Libertine-Italic] [\s!file:fxlri]
+ \definefontsynonym [Libertine-Bold] [\s!file:fxlb]
+ \definefontsynonym [Libertine-BoldItalic] [\s!file:fxlbi]
+ \definefontsynonym [Libertine-SmallCaps] [file:fxlrc]
+ \stoptypescript
+
+ \starttypescript [serif] [libertine] [name]
+ \setups[\s!font:\s!fallback:\s!serif]
+ \definefontsynonym [\s!Serif] [Libertine-Regular] [\s!features=\s!default]
+ \definefontsynonym [\s!SerifItalic] [Libertine-Italic] [\s!features=\s!default]
+ % \definefontsynonym [\s!SerifSlanted] [Libertine-Italic] [\s!features=\s!default]
+ \definefontsynonym [\s!SerifBold] [Libertine-Bold] [\s!features=\s!default]
+ \definefontsynonym [\s!SerifBoldItalic] [Libertine-BoldItalic] [\s!features=\s!default]
+ % \definefontsynonym [\s!SerifBoldSlanted][Libertine-BoldItalic] [\s!features=\s!default]
+ \definefontsynonym [\s!SerifCaps] [Libertine-SmallCaps] [\s!features=\s!default]
+ \stoptypescript
+
+ \starttypescript [libertine]
+ \definetypeface [libertine] [tt] [mono] [default] [default]
+ \definetypeface [libertine] [ss] [sans] [default] [default]
+ \definetypeface [libertine] [rm] [serif] [libertine] [default]
+ \stoptypescript
+
+ \starttypescript [sans] [biolinum] [name]
+ \setups[\s!font:\s!fallback:\s!sans]
+ \definefontsynonym [\s!Sans] [\s!file:fxbr.otf] [\s!features=\s!default]
+ %definefontsynonym [\s!SansBold] [\s!file:fxbb.otf] [\s!features=\s!default] % unfinished
+ %definefontsynonym [\s!SansItalic] [\s!file:fxbri.otf] [\s!features=\s!default] % nonexistent
+ %definefontsynonym [\s!SansBoldItalic] [\s!file:fxbbi.otf] [\s!features=\s!default] % nonexistent
+ \stoptypescript
+
+\stoptypescriptcollection
+
+\starttypescriptcollection[inconsolata]
+
+ \starttypescript [mono] [inconsolata]
+ \definefontsynonym [Inconsolata] [\s!file:inconsolata.otf]
+ \stoptypescript
+
+ \starttypescript [mono] [inconsolata] [name]
+ \setups[\s!font:\s!fallback:\s!mono]
+ \definefontsynonym [\s!Mono] [Inconsolata]
+ \stoptypescript
+
+\stoptypescriptcollection
+
+\starttypescriptcollection[postscript]
+
+ \starttypescript [postscript]
+ \definetypeface [postscript] [rm] [\s!serif] [times] [\s!default]
+ \definetypeface [postscript] [ss] [\s!sans] [helvetica] [\s!default] [\s!rscale=0.9]
+ \definetypeface [postscript] [tt] [\s!mono] [courier] [\s!default] [\s!rscale=1.1]
+ \definetypeface [postscript] [mm] [\s!math] [times] [\s!default]
+ \quittypescriptscanning
+ \stoptypescript
+
+\stoptypescriptcollection
+
+\starttypescriptcollection[pagella-euler]
+
+ \starttypescript [math] [euler]
+ \definefontsynonym [EulerMath] [\s!file:euler.otf]
+ \stoptypescript
+
+ \starttypescript [math] [euler] [name]
+ % \definefontsynonym [MathRoman] [EulerMath] [\s!features=math]
+ \definefontsynonym [MathRoman] [EulerMath] [\s!features=math\mathsizesuffix]
+ \stoptypescript
+
+ \starttypescript [pagella-euler]
+ \definetypeface [\typescriptone] [rm] [\s!serif] [pagella] [\s!default]
+ % \definetypeface [\typescriptone] [ss] [\s!sans] [pagella] [\s!default] [\s!rscale=auto]
+ \definetypeface [\typescriptone] [tt] [\s!mono] [modern] [\s!default] [\s!rscale=auto]
+ \definetypeface [\typescriptone] [mm] [\s!math] [euler] [\s!default] [\s!rscale=auto]
+ \quittypescriptscanning
+ \stoptypescript
+
+ \starttypescript [serif] [euler] [name]
+ \setups[\s!font:\s!fallback:\s!serif]
+ \definefontsynonym [Serif] [\s!file:euler.otf] [\s!features=\s!default]
+ \stoptypescript
+
+ \starttypescript [euler]
+ \definetypeface [euler] [rm] [\s!serif] [euler] [\s!default]
+ \definetypeface [euler] [tt] [\s!mono] [modern] [\s!default] [\s!rscale=auto]
+ \definetypeface [euler] [mm] [\s!math] [euler] [\s!default]
+ \quittypescriptscanning
+ \stoptypescript
\stoptypescriptcollection
-\endinput
+% \starttypescript [math] [hvmath]
+% \definefontsynonym[MathRoman][hvmath@hvmath-math]
+% \loadfontgoodies[hvmath-math]
+% \stoptypescript
+
+\protect \endinput
diff --git a/Master/texmf-dist/tex/context/base/type-otf.tex b/Master/texmf-dist/tex/context/base/type-otf.tex
deleted file mode 100644
index 720ffbaf93d..00000000000
--- a/Master/texmf-dist/tex/context/base/type-otf.tex
+++ /dev/null
@@ -1,155 +0,0 @@
-%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
-
-% faster
-%
-% \starttypescript [fallback]
-% \definetypeface [] [rm] [serif] [modern] [default]
-% \definetypeface [] [ss] [sans] [modern] [default]
-% \definetypeface [] [tt] [mono] [modern] [default]
-% \definetypeface [] [mm] [math] [modern] [default]
-% \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=0.9]
- \definetypeface [postscript] [tt] [mono] [courier] [default] [rscale=1.1]
- \definetypeface [postscript] [mm] [math] [times] [default]
- \quittypescriptscanning
-\stoptypescript
-
-\starttypescript [times,termes]
- \definetypeface [\typescriptone] [rm] [serif] [\typescriptone] [default]
- \definetypeface [\typescriptone] [ss] [sans] [helvetica] [default] [rscale=0.9]
- \definetypeface [\typescriptone] [tt] [mono] [modern] [default] [rscale=1.05]
- \definetypeface [\typescriptone] [mm] [math] [times] [default]
- \quittypescriptscanning
-\stoptypescript
-
-\starttypescript [palatino,pagella]
- \definetypeface [\typescriptone] [rm] [serif] [\typescriptone] [default]
- \definetypeface [\typescriptone] [ss] [sans] [modern] [default] [rscale=1.075]
- \definetypeface [\typescriptone] [tt] [mono] [modern] [default] [rscale=1.075]
- \definetypeface [\typescriptone] [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 [schoolbook,schola]
- \definetypeface [\typescriptone] [rm] [serif] [\typescriptone] [default]
- \definetypeface [\typescriptone] [ss] [sans] [modern] [default]
- \definetypeface [\typescriptone] [tt] [mono] [modern] [default]
- \definetypeface [\typescriptone] [mm] [math] [modern] [default]
- \quittypescriptscanning
-\stoptypescript
-
-\starttypescript [bookman,bonum]
- \definetypeface [\typescriptone] [rm] [serif] [\typescriptone] [default]
- \definetypeface [\typescriptone] [ss] [sans] [modern] [default]
- \definetypeface [\typescriptone] [tt] [mono] [modern] [default]
- \definetypeface [\typescriptone] [mm] [math] [modern] [default]
- \quittypescriptscanning
-\stoptypescript
-
-\starttypescript [chancery,chorus]
- \definetypeface [\typescriptone] [rm] [serif] [\typescriptone] [default]
- \definetypeface [\typescriptone] [ss] [sans] [modern] [default]
- \definetypeface [\typescriptone] [tt] [mono] [modern] [default]
- \definetypeface [\typescriptone] [mm] [math] [modern] [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
-
-\starttypescript [helvetica,heros]
- \definetypeface [\typescriptone] [ss] [sans] [\typescriptone] [default]
- \definetypeface [\typescriptone] [rm] [serif] [modern] [default] [rscale=1.15]
- \definetypeface [\typescriptone] [tt] [mono] [modern] [default] [rscale=1.15]
- \definetypeface [\typescriptone] [mm] [math] [modern] [default] [rscale=1.15]
- \quittypescriptscanning
-\stoptypescript
-
-\starttypescript [avantgarde,adventor]
- \definetypeface [\typescriptone] [ss] [sans] [adventor] [default]
- \definetypeface [\typescriptone] [rm] [serif] [modern] [default] [rscale=1.15]
- \definetypeface [\typescriptone] [tt] [mono] [modern] [default] [rscale=1.15]
- \definetypeface [\typescriptone] [mm] [math] [modern] [default]
- \quittypescriptscanning
-\stoptypescript
-
-\starttypescript [courier,cursor]
- \definetypeface [\typescriptone] [tt] [mono] [\typescriptone] [default]
- \definetypeface [\typescriptone] [rm] [serif] [modern] [default]
- \definetypeface [\typescriptone] [ss] [sans] [modern] [default]
- \definetypeface [\typescriptone] [mm] [math] [modern] [default]
- \quittypescriptscanning
-\stoptypescript
-
-\stoptypescriptcollection
-
-\loadmarkfile{type-otf}
-
-\endinput
diff --git a/Master/texmf-dist/tex/context/base/type-pre.tex b/Master/texmf-dist/tex/context/base/type-pre.mkii
index ad2109a65ca..ad2109a65ca 100644
--- a/Master/texmf-dist/tex/context/base/type-pre.tex
+++ b/Master/texmf-dist/tex/context/base/type-pre.mkii
diff --git a/Master/texmf-dist/tex/context/base/type-run.mkiv b/Master/texmf-dist/tex/context/base/type-run.mkiv
index 1b64c102ec6..e91398095ac 100644
--- a/Master/texmf-dist/tex/context/base/type-run.mkiv
+++ b/Master/texmf-dist/tex/context/base/type-run.mkiv
@@ -25,7 +25,7 @@
\edef\typescriptone {\truetypescript{#1}}%
\edef\typescripttwo {\truetypescript{#2}}%
\edef\typescriptthree{\truetypescript{#3}}%
- \def\starttypescript
+ \unexpanded\def\starttypescript
{\bgroup
\obeylines % else we loose the first line due to lookahead
\dotripleempty\dostarttypescript}
@@ -35,7 +35,7 @@
\dochecktypescript{##2}\typescripttwo \ifdone
\dochecktypescript{##3}\typescriptthree\ifdone
\def\next%
- {\def\stoptypescript{\egroup\type{\stoptypescript}}
+ {\unexpanded\def\stoptypescript{\egroup\type{\stoptypescript}}
% what follows now is quite ugly
\skipfirstverbatimlinefalse
\type{\starttypescript}
diff --git a/Master/texmf-dist/tex/context/base/type-set.mkii b/Master/texmf-dist/tex/context/base/type-set.mkii
new file mode 100644
index 00000000000..0316f95c787
--- /dev/null
+++ b/Master/texmf-dist/tex/context/base/type-set.mkii
@@ -0,0 +1,81 @@
+%D \module
+%D [ file=type-set,
+%D version=2005.02.04, % moved from ini/def
+%D title=\CONTEXT\ Typescript Macros,
+%D subtitle=Default Settings,
+%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
+
+\definetypescriptprefix [serif] [Serif]
+\definetypescriptprefix [sans] [Sans]
+\definetypescriptprefix [mono] [Mono]
+
+\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]
+\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]
+\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]
+\stopsetups
+
+\startsetups [font:allbold:serif]
+ \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]
+\stopsetups
+
+\ifnum\texengine=\xetexengine
+ \usetypescriptfile[\f!typeprefix def]
+ %usetypescriptfile[\f!typeprefix tmf]
+ \usetypescriptfile[\f!typeprefix siz]
+ \usetypescriptfile[\f!typeprefix otf]
+ \usetypescriptfile[\f!typeprefix xtx]
+ \usetypescriptfile[\f!typeprefix loc]
+\else
+ \usetypescriptfile[\f!typeprefix def]
+ %usetypescriptfile[\f!typeprefix tmf]
+ \usetypescriptfile[\f!typeprefix siz]
+ \usetypescriptfile[\f!typeprefix one]
+ \usetypescriptfile[\f!typeprefix loc]
+\fi
+
+\protect \endinput
diff --git a/Master/texmf-dist/tex/context/base/type-set.mkiv b/Master/texmf-dist/tex/context/base/type-set.mkiv
new file mode 100644
index 00000000000..d12c333fe3c
--- /dev/null
+++ b/Master/texmf-dist/tex/context/base/type-set.mkiv
@@ -0,0 +1,77 @@
+%D \module
+%D [ file=type-set,
+%D version=2005.02.04, % moved from ini/def
+%D title=\CONTEXT\ Typescript Macros,
+%D subtitle=Default Settings,
+%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
+
+\definetypescriptprefix [serif] [Serif]
+\definetypescriptprefix [sans] [Sans]
+\definetypescriptprefix [mono] [Mono]
+
+\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]
+\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]
+\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]
+\stopsetups
+
+\starttypescript [serif,sans,mono] [fallback]
+ \setups[\s!font:\s!fallback:\typescriptone]
+\stoptypescript
+
+\startsetups [font:allbold:serif]
+ \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]
+\stopsetups
+
+\usetypescriptfile[\f!typeprefix def]
+\usetypescriptfile[\f!typeprefix lua]
+%usetypescriptfile[\f!typeprefix tmf]
+\usetypescriptfile[\f!typeprefix siz]
+\usetypescriptfile[\f!typeprefix otf]
+\usetypescriptfile[\f!typeprefix loc]
+
+\protect \endinput
diff --git a/Master/texmf-dist/tex/context/base/type-siz.mkii b/Master/texmf-dist/tex/context/base/type-siz.mkii
index 6bf7f01f45d..831019e9598 100644
--- a/Master/texmf-dist/tex/context/base/type-siz.mkii
+++ b/Master/texmf-dist/tex/context/base/type-siz.mkii
@@ -11,6 +11,163 @@
%C therefore copyrighted by \PRAGMA. See mreadme.pdf for
%C details.
+\starttypescriptcollection[size]
+
+\starttypescript [serif] [default] [size]
+ \definebodyfont
+ [4pt,5pt,6pt,7pt,8pt,9pt,10pt,11pt,12pt,14.4pt,17.3pt]
+ [rm] [default]
+\stoptypescript
+
+\starttypescript [sans] [default] [size]
+ \definebodyfont
+ [4pt,5pt,6pt,7pt,8pt,9pt,10pt,11pt,12pt,14.4pt,17.3pt]
+ [ss] [default]
+\stoptypescript
+
+\starttypescript [mono] [default] [size]
+ \definebodyfont
+ [4pt,5pt,6pt,7pt,8pt,9pt,10pt,11pt,12pt,14.4pt,17.3pt]
+ [tt] [default]
+\stoptypescript
+
+\starttypescript [math,boldmath] [default] [size]
+ \definebodyfont
+ [4pt,5pt,6pt,7pt,8pt,9pt,10pt,11pt,12pt,14.4pt,17.3pt]
+ [mm] [default]
+\stoptypescript
+
+\starttypescript [bfmath] [default] [size]
+ \definebodyfont
+ [4pt,5pt,6pt,7pt,8pt,9pt,10pt,11pt,12pt,14.4pt,17.3pt]
+ [mm] [bfmath]
+\stoptypescript
+
+\starttypescript [handwriting] [default] [size]
+ \definebodyfont
+ [4pt,5pt,6pt,7pt,8pt,9pt,10pt,11pt,12pt,14.4pt,17.3pt]
+ [hw] [default]
+\stoptypescript
+
+\starttypescript [calligraphy] [default] [size]
+ \definebodyfont
+ [4pt,5pt,6pt,7pt,8pt,9pt,10pt,11pt,12pt,14.4pt,17.3pt]
+ [cg] [default]
+\stoptypescript
+
+\starttypescript [casual] [default] [size] % maps onto rm !
+ \definebodyfont
+ [4pt,5pt,6pt,7pt,8pt,9pt,10pt,11pt,12pt,14.4pt,17.3pt]
+ [rm] [default]
+\stoptypescript
+
+\starttypescript [all] [dtp] [size]
+
+ \definebodyfontenvironment
+ [4pt]
+ [\s!text=4pt,\s!script=4pt,\s!scriptscript=4pt,
+ \c!x=4pt,\c!xx=4pt,\c!big=6pt,\c!small=4pt]
+
+ \definebodyfontenvironment
+ [5pt]
+ [\s!text=5pt,\s!script=5pt,\s!scriptscript=5pt,
+ \c!x=5pt,\c!xx=5pt,\c!big=7pt,\c!small=5pt]
+
+ \definebodyfontenvironment
+ [6pt]
+ [\s!text=6pt,\s!script=5pt,\s!scriptscript=5pt,
+ \c!x=5pt,\c!xx=5pt,\c!big=8pt,\c!small=5pt]
+
+ \definebodyfontenvironment
+ [7pt]
+ [\s!text=7pt,\s!script=6pt,\s!scriptscript=5pt,
+ \c!x=6pt,\c!xx=5pt,\c!big=9pt,\c!small=5pt]
+
+ \definebodyfontenvironment
+ [8pt]
+ [\s!text=8pt,\s!script=6pt,\s!scriptscript=5pt,
+ \c!x=6pt,\c!xx=5pt,\c!big=10pt,\c!small=6pt]
+
+ \definebodyfontenvironment
+ [9pt]
+ [\s!text=9pt,\s!script=7pt,\s!scriptscript=5pt,
+ \c!x=7pt,\c!xx=5pt,\c!big=11pt,\c!small=7pt]
+
+ \definebodyfontenvironment
+ [10pt]
+ [\s!text=10pt,\s!script=7pt,\s!scriptscript=5pt,
+ \c!x=8pt,\c!xx=6pt,\c!big=12pt,\c!small=8pt]
+
+ \definebodyfontenvironment
+ [11pt]
+ [\s!text=11pt,\s!script=8pt,\s!scriptscript=6pt,
+ \c!x=9pt,\c!xx=7pt,\c!big=13pt,\c!small=9pt]
+
+ \definebodyfontenvironment
+ [12pt]
+ [\s!text=12pt,\s!script=9pt,\s!scriptscript=7pt,
+ \c!x=10pt,\c!xx=8pt,\c!big=14pt,\c!small=10pt]
+
+ \definebodyfontenvironment
+ [13pt]
+ [\s!text=13pt,\s!script=10pt,\s!scriptscript=8pt,
+ \c!x=11pt,\c!xx=9pt,\c!big=16pt,\c!small=11pt]
+
+ \definebodyfontenvironment
+ [14pt]
+ [\s!text=14pt,\s!script=10pt,\s!scriptscript=7pt,
+ \c!x=12pt,\c!xx=10pt,\c!big=16pt,\c!small=12pt]
+
+ \definebodyfontenvironment
+ [16pt]
+ [\s!text=16pt,\s!script=12pt,\s!scriptscript=9pt,
+ \c!x=13pt,\c!xx=11pt,\c!big=18pt,\c!small=14pt]
+
+ % suboptimal math sizes
+
+ \definebodyfontenvironment
+ [18pt]
+ [\s!text=18pt,\s!script=16pt,\s!scriptscript=14pt,
+ \c!x=16pt,\c!xx=14pt,\c!big=22pt,\c!small=16pt]
+
+ \definebodyfontenvironment
+ [22pt]
+ [\s!text=22pt,\s!script=22pt,\s!scriptscript=18pt,
+ \c!x=18pt,\c!xx=16pt,\c!big=28pt,\c!small=18pt]
+
+ \definebodyfontenvironment
+ [28pt]
+ [\s!text=28pt,\s!script=22pt,\s!scriptscript=18pt,
+ \c!x=22pt,\c!xx=18pt,\c!big=28pt,\c!small=22pt]
+
+\stoptypescript
+
+\starttypescript [serif] [dtp] [size]
+ \definebodyfont
+ [5pt,6pt,7pt,8pt,9pt,10pt,11pt,12pt,13pt,14pt,16pt,18pt,22pt,28pt]
+ [rm] [default]
+\stoptypescript
+
+\starttypescript [sans] [dtp] [size]
+ \definebodyfont
+ [5pt,6pt,7pt,8pt,9pt,10pt,11pt,12pt,13pt,14pt,16pt,18pt,22pt,28pt]
+ [ss] [default]
+\stoptypescript
+
+\starttypescript [mono] [dtp] [size]
+ \definebodyfont
+ [5pt,6pt,7pt,8pt,9pt,10pt,11pt,12pt,13pt,14pt,16pt,18pt,22pt,28pt]
+ [tt] [default]
+\stoptypescript
+
+\starttypescript [math,boldmath] [dtp] [size]
+ \definebodyfont
+ [5pt,6pt,7pt,8pt,9pt,10pt,11pt,12pt,13pt,14pt,16pt,18pt,22pt,28pt]
+ [mm] [default]
+\stoptypescript
+
+\stoptypescriptcollection
+
\starttypescriptcollection[size-mkii]
% todo: instead of assuming designsize we will set it explicitly (saves these
diff --git a/Master/texmf-dist/tex/context/base/type-siz.mkiv b/Master/texmf-dist/tex/context/base/type-siz.mkiv
index 734c262b5ad..f513c7392a3 100644
--- a/Master/texmf-dist/tex/context/base/type-siz.mkiv
+++ b/Master/texmf-dist/tex/context/base/type-siz.mkiv
@@ -11,6 +11,163 @@
%C therefore copyrighted by \PRAGMA. See mreadme.pdf for
%C details.
+\starttypescriptcollection[size]
+
+\starttypescript [serif] [default] [size]
+ \definebodyfont
+ [4pt,5pt,6pt,7pt,8pt,9pt,10pt,11pt,12pt,14.4pt,17.3pt]
+ [rm] [default]
+\stoptypescript
+
+\starttypescript [sans] [default] [size]
+ \definebodyfont
+ [4pt,5pt,6pt,7pt,8pt,9pt,10pt,11pt,12pt,14.4pt,17.3pt]
+ [ss] [default]
+\stoptypescript
+
+\starttypescript [mono] [default] [size]
+ \definebodyfont
+ [4pt,5pt,6pt,7pt,8pt,9pt,10pt,11pt,12pt,14.4pt,17.3pt]
+ [tt] [default]
+\stoptypescript
+
+\starttypescript [math,boldmath] [default] [size]
+ \definebodyfont
+ [4pt,5pt,6pt,7pt,8pt,9pt,10pt,11pt,12pt,14.4pt,17.3pt]
+ [mm] [default]
+\stoptypescript
+
+\starttypescript [bfmath] [default] [size]
+ \definebodyfont
+ [4pt,5pt,6pt,7pt,8pt,9pt,10pt,11pt,12pt,14.4pt,17.3pt]
+ [mm] [bfmath]
+\stoptypescript
+
+\starttypescript [handwriting] [default] [size]
+ \definebodyfont
+ [4pt,5pt,6pt,7pt,8pt,9pt,10pt,11pt,12pt,14.4pt,17.3pt]
+ [hw] [default]
+\stoptypescript
+
+\starttypescript [calligraphy] [default] [size]
+ \definebodyfont
+ [4pt,5pt,6pt,7pt,8pt,9pt,10pt,11pt,12pt,14.4pt,17.3pt]
+ [cg] [default]
+\stoptypescript
+
+\starttypescript [casual] [default] [size] % maps onto rm !
+ \definebodyfont
+ [4pt,5pt,6pt,7pt,8pt,9pt,10pt,11pt,12pt,14.4pt,17.3pt]
+ [rm] [default]
+\stoptypescript
+
+\starttypescript [all] [dtp] [size]
+
+ \definebodyfontenvironment
+ [4pt]
+ [\s!text=4pt,\s!script=4pt,\s!scriptscript=4pt,
+ \c!x=4pt,\c!xx=4pt,\c!big=6pt,\c!small=4pt]
+
+ \definebodyfontenvironment
+ [5pt]
+ [\s!text=5pt,\s!script=5pt,\s!scriptscript=5pt,
+ \c!x=5pt,\c!xx=5pt,\c!big=7pt,\c!small=5pt]
+
+ \definebodyfontenvironment
+ [6pt]
+ [\s!text=6pt,\s!script=5pt,\s!scriptscript=5pt,
+ \c!x=5pt,\c!xx=5pt,\c!big=8pt,\c!small=5pt]
+
+ \definebodyfontenvironment
+ [7pt]
+ [\s!text=7pt,\s!script=6pt,\s!scriptscript=5pt,
+ \c!x=6pt,\c!xx=5pt,\c!big=9pt,\c!small=5pt]
+
+ \definebodyfontenvironment
+ [8pt]
+ [\s!text=8pt,\s!script=6pt,\s!scriptscript=5pt,
+ \c!x=6pt,\c!xx=5pt,\c!big=10pt,\c!small=6pt]
+
+ \definebodyfontenvironment
+ [9pt]
+ [\s!text=9pt,\s!script=7pt,\s!scriptscript=5pt,
+ \c!x=7pt,\c!xx=5pt,\c!big=11pt,\c!small=7pt]
+
+ \definebodyfontenvironment
+ [10pt]
+ [\s!text=10pt,\s!script=7pt,\s!scriptscript=5pt,
+ \c!x=8pt,\c!xx=6pt,\c!big=12pt,\c!small=8pt]
+
+ \definebodyfontenvironment
+ [11pt]
+ [\s!text=11pt,\s!script=8pt,\s!scriptscript=6pt,
+ \c!x=9pt,\c!xx=7pt,\c!big=13pt,\c!small=9pt]
+
+ \definebodyfontenvironment
+ [12pt]
+ [\s!text=12pt,\s!script=9pt,\s!scriptscript=7pt,
+ \c!x=10pt,\c!xx=8pt,\c!big=14pt,\c!small=10pt]
+
+ \definebodyfontenvironment
+ [13pt]
+ [\s!text=13pt,\s!script=10pt,\s!scriptscript=8pt,
+ \c!x=11pt,\c!xx=9pt,\c!big=16pt,\c!small=11pt]
+
+ \definebodyfontenvironment
+ [14pt]
+ [\s!text=14pt,\s!script=10pt,\s!scriptscript=7pt,
+ \c!x=12pt,\c!xx=10pt,\c!big=16pt,\c!small=12pt]
+
+ \definebodyfontenvironment
+ [16pt]
+ [\s!text=16pt,\s!script=12pt,\s!scriptscript=9pt,
+ \c!x=13pt,\c!xx=11pt,\c!big=18pt,\c!small=14pt]
+
+ % suboptimal math sizes
+
+ \definebodyfontenvironment
+ [18pt]
+ [\s!text=18pt,\s!script=16pt,\s!scriptscript=14pt,
+ \c!x=16pt,\c!xx=14pt,\c!big=22pt,\c!small=16pt]
+
+ \definebodyfontenvironment
+ [22pt]
+ [\s!text=22pt,\s!script=22pt,\s!scriptscript=18pt,
+ \c!x=18pt,\c!xx=16pt,\c!big=28pt,\c!small=18pt]
+
+ \definebodyfontenvironment
+ [28pt]
+ [\s!text=28pt,\s!script=22pt,\s!scriptscript=18pt,
+ \c!x=22pt,\c!xx=18pt,\c!big=28pt,\c!small=22pt]
+
+\stoptypescript
+
+\starttypescript [serif] [dtp] [size]
+ \definebodyfont
+ [5pt,6pt,7pt,8pt,9pt,10pt,11pt,12pt,13pt,14pt,16pt,18pt,22pt,28pt]
+ [rm] [default]
+\stoptypescript
+
+\starttypescript [sans] [dtp] [size]
+ \definebodyfont
+ [5pt,6pt,7pt,8pt,9pt,10pt,11pt,12pt,13pt,14pt,16pt,18pt,22pt,28pt]
+ [ss] [default]
+\stoptypescript
+
+\starttypescript [mono] [dtp] [size]
+ \definebodyfont
+ [5pt,6pt,7pt,8pt,9pt,10pt,11pt,12pt,13pt,14pt,16pt,18pt,22pt,28pt]
+ [tt] [default]
+\stoptypescript
+
+\starttypescript [math,boldmath] [dtp] [size]
+ \definebodyfont
+ [5pt,6pt,7pt,8pt,9pt,10pt,11pt,12pt,13pt,14pt,16pt,18pt,22pt,28pt]
+ [mm] [default]
+\stoptypescript
+
+\stoptypescriptcollection
+
\starttypescriptcollection[size-mkiv]
\starttypescript [serif] [computer-modern] [size]
@@ -218,6 +375,8 @@
\stoptypescript
+% ms=MathSymbol sa 1
+
\starttypescript [math] [modern,computer-modern,latin-modern] [size]
\definebodyfont [12pt] [mm] [mr=LMMathRoman12-Regular sa 1, mb=LMMathRoman12-Bold sa 1]
diff --git a/Master/texmf-dist/tex/context/base/type-siz.tex b/Master/texmf-dist/tex/context/base/type-siz.tex
deleted file mode 100644
index 56b54b3010a..00000000000
--- a/Master/texmf-dist/tex/context/base/type-siz.tex
+++ /dev/null
@@ -1,179 +0,0 @@
-%D \module
-%D [ file=type-siz,
-%D version=2001.04.12,
-%D title=\CONTEXT\ Typescript Macros,
-%D subtitle=Sizing scripts,
-%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.
-
-% we need to use proper verbose names, which saves us a resolve
-
-\unprotect
-
-\starttypescriptcollection[size]
-
-\starttypescript [serif] [default] [size]
- \definebodyfont
- [4pt,5pt,6pt,7pt,8pt,9pt,10pt,11pt,12pt,14.4pt,17.3pt]
- [rm] [default]
-\stoptypescript
-
-\starttypescript [sans] [default] [size]
- \definebodyfont
- [4pt,5pt,6pt,7pt,8pt,9pt,10pt,11pt,12pt,14.4pt,17.3pt]
- [ss] [default]
-\stoptypescript
-
-\starttypescript [mono] [default] [size]
- \definebodyfont
- [4pt,5pt,6pt,7pt,8pt,9pt,10pt,11pt,12pt,14.4pt,17.3pt]
- [tt] [default]
-\stoptypescript
-
-\starttypescript [math,boldmath] [default] [size]
- \definebodyfont
- [4pt,5pt,6pt,7pt,8pt,9pt,10pt,11pt,12pt,14.4pt,17.3pt]
- [mm] [default]
-\stoptypescript
-
-\starttypescript [bfmath] [default] [size]
- \definebodyfont
- [4pt,5pt,6pt,7pt,8pt,9pt,10pt,11pt,12pt,14.4pt,17.3pt]
- [mm] [bfmath]
-\stoptypescript
-
-\starttypescript [handwriting] [default] [size]
- \definebodyfont
- [4pt,5pt,6pt,7pt,8pt,9pt,10pt,11pt,12pt,14.4pt,17.3pt]
- [hw] [default]
-\stoptypescript
-
-\starttypescript [calligraphy] [default] [size]
- \definebodyfont
- [4pt,5pt,6pt,7pt,8pt,9pt,10pt,11pt,12pt,14.4pt,17.3pt]
- [cg] [default]
-\stoptypescript
-
-\starttypescript [casual] [default] [size] % maps onto rm !
- \definebodyfont
- [4pt,5pt,6pt,7pt,8pt,9pt,10pt,11pt,12pt,14.4pt,17.3pt]
- [rm] [default]
-\stoptypescript
-
-\starttypescript [all] [dtp] [size]
-
- \definebodyfontenvironment
- [4pt]
- [\s!text=4pt,\s!script=4pt,\s!scriptscript=4pt,
- \c!x=4pt,\c!xx=4pt,\c!big=6pt,\c!small=4pt]
-
- \definebodyfontenvironment
- [5pt]
- [\s!text=5pt,\s!script=5pt,\s!scriptscript=5pt,
- \c!x=5pt,\c!xx=5pt,\c!big=7pt,\c!small=5pt]
-
- \definebodyfontenvironment
- [6pt]
- [\s!text=6pt,\s!script=5pt,\s!scriptscript=5pt,
- \c!x=5pt,\c!xx=5pt,\c!big=8pt,\c!small=5pt]
-
- \definebodyfontenvironment
- [7pt]
- [\s!text=7pt,\s!script=6pt,\s!scriptscript=5pt,
- \c!x=6pt,\c!xx=5pt,\c!big=9pt,\c!small=5pt]
-
- \definebodyfontenvironment
- [8pt]
- [\s!text=8pt,\s!script=6pt,\s!scriptscript=5pt,
- \c!x=6pt,\c!xx=5pt,\c!big=10pt,\c!small=6pt]
-
- \definebodyfontenvironment
- [9pt]
- [\s!text=9pt,\s!script=7pt,\s!scriptscript=5pt,
- \c!x=7pt,\c!xx=5pt,\c!big=11pt,\c!small=7pt]
-
- \definebodyfontenvironment
- [10pt]
- [\s!text=10pt,\s!script=7pt,\s!scriptscript=5pt,
- \c!x=8pt,\c!xx=6pt,\c!big=12pt,\c!small=8pt]
-
- \definebodyfontenvironment
- [11pt]
- [\s!text=11pt,\s!script=8pt,\s!scriptscript=6pt,
- \c!x=9pt,\c!xx=7pt,\c!big=13pt,\c!small=9pt]
-
- \definebodyfontenvironment
- [12pt]
- [\s!text=12pt,\s!script=9pt,\s!scriptscript=7pt,
- \c!x=10pt,\c!xx=8pt,\c!big=14pt,\c!small=10pt]
-
- \definebodyfontenvironment
- [13pt]
- [\s!text=13pt,\s!script=10pt,\s!scriptscript=8pt,
- \c!x=11pt,\c!xx=9pt,\c!big=16pt,\c!small=11pt]
-
- \definebodyfontenvironment
- [14pt]
- [\s!text=14pt,\s!script=10pt,\s!scriptscript=7pt,
- \c!x=12pt,\c!xx=10pt,\c!big=16pt,\c!small=12pt]
-
- \definebodyfontenvironment
- [16pt]
- [\s!text=16pt,\s!script=12pt,\s!scriptscript=9pt,
- \c!x=13pt,\c!xx=11pt,\c!big=18pt,\c!small=14pt]
-
- % suboptimal math sizes
-
- \definebodyfontenvironment
- [18pt]
- [\s!text=18pt,\s!script=16pt,\s!scriptscript=14pt,
- \c!x=16pt,\c!xx=14pt,\c!big=22pt,\c!small=16pt]
-
- \definebodyfontenvironment
- [22pt]
- [\s!text=22pt,\s!script=22pt,\s!scriptscript=18pt,
- \c!x=18pt,\c!xx=16pt,\c!big=28pt,\c!small=18pt]
-
- \definebodyfontenvironment
- [28pt]
- [\s!text=28pt,\s!script=22pt,\s!scriptscript=18pt,
- \c!x=22pt,\c!xx=18pt,\c!big=28pt,\c!small=22pt]
-
-\stoptypescript
-
-\starttypescript [serif] [dtp] [size]
- \definebodyfont
- [5pt,6pt,7pt,8pt,9pt,10pt,11pt,12pt,13pt,14pt,16pt,18pt,22pt,28pt]
- [rm] [default]
-\stoptypescript
-
-\starttypescript [sans] [dtp] [size]
- \definebodyfont
- [5pt,6pt,7pt,8pt,9pt,10pt,11pt,12pt,13pt,14pt,16pt,18pt,22pt,28pt]
- [ss] [default]
-\stoptypescript
-
-\starttypescript [mono] [dtp] [size]
- \definebodyfont
- [5pt,6pt,7pt,8pt,9pt,10pt,11pt,12pt,13pt,14pt,16pt,18pt,22pt,28pt]
- [tt] [default]
-\stoptypescript
-
-\starttypescript [math,boldmath] [dtp] [size]
- \definebodyfont
- [5pt,6pt,7pt,8pt,9pt,10pt,11pt,12pt,13pt,14pt,16pt,18pt,22pt,28pt]
- [mm] [default]
-\stoptypescript
-
-\stoptypescriptcollection
-
-\protect
-
-\loadmarkfile{type-siz}
-
-\endinput
diff --git a/Master/texmf-dist/tex/context/base/type-tmf.mkii b/Master/texmf-dist/tex/context/base/type-tmf.mkii
index 3c17b0308b4..af9280c73c8 100644
--- a/Master/texmf-dist/tex/context/base/type-tmf.mkii
+++ b/Master/texmf-dist/tex/context/base/type-tmf.mkii
@@ -11,1151 +11,4 @@
%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
-
-\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]
-\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
-
-% TeXGyre
-
-% name definitions & prefixes
-
-\definetypescriptprefix [n:pagella] [TeXGyrePagella] \definetypescriptprefix [n:palatino] [TeXGyrePagella]
-\definetypescriptprefix [n:termes] [TeXGyreTermes] \definetypescriptprefix [n:times] [TeXGyreTermes]
-\definetypescriptprefix [n:heros] [TeXGyreHeros] \definetypescriptprefix [n:helvetica] [TeXGyreHeros]
-\definetypescriptprefix [n:bonum] [TeXGyreBonum] \definetypescriptprefix [n:bookman] [TeXGyreBonum]
-\definetypescriptprefix [n:schola] [TeXGyreSchola] \definetypescriptprefix [n:schoolbook] [TeXGyreSchola]
-\definetypescriptprefix [n:adventor] [TeXGyreAdventor] %definetypescriptprefix [n:adventor] [TeXGyreAdventor]
-\definetypescriptprefix [n:cursor] [TeXGyreCursor] \definetypescriptprefix [n:courier] [TeXGyreCursor]
-\definetypescriptprefix [n:chorus] [TeXGyreChorus] \definetypescriptprefix [n:chancery] [TeXGyreChorus] % not the full set
-
-\starttypescript [serif] [pagella,palatino,termes,times,bonum,bookman,schola,schoolbook] [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 [SerifSlanted] [SerifItalic]
- \definefontsynonym [SerifBoldSlanted] [SerifBoldItalic]
- \definefontsynonym [SerifCaps] [\typescriptprefix{n:\typescripttwo}-Caps]
-
- \definefontvariant [Serif][osf][Caps]
- \definefontvariant [Serif][sc] [Caps]
-
- \definefontsynonym [SerifRegular] [Serif]
- \definefontsynonym [SerifRegularCaps] [SerifCaps]
- \definefontsynonym [SerifItalicCaps] [\typescriptprefix{n:\typescripttwo}-ItalicCaps]
- \definefontsynonym [SerifBoldCaps] [\typescriptprefix{n:\typescripttwo}-BoldCaps]
- \definefontsynonym [SerifBoldItalicCaps] [\typescriptprefix{n:\typescripttwo}-BoldItalicCaps]
- \definefontsynonym [SerifSlantedCaps] [SerifItalicCaps]
- \definefontsynonym [SerifBoldSlantedCaps] [SerifBoldItalicCaps]
- \definefontsynonym [SerifCapsCaps] [SerifCaps]
-\stoptypescript
-
-\starttypescript [serif] [chorus,chancery] [name]
- \definefontsynonym [SerifMediumItalic] [TeXGyreChorus-MediumItalic]
- \definefontsynonym [Serif] [SerifMediumItalic]
- \definefontsynonym [SerifItalic] [SerifMediumItalic]
- \definefontsynonym [SerifBold] [SerifMediumItalic]
- \definefontsynonym [SerifBoldItalic] [SerifMediumItalic]
- \definefontsynonym [SerifSlanted] [SerifMediumItalic]
- \definefontsynonym [SerifBoldSlanted] [SerifMediumItalic]
- \definefontsynonym [SerifCaps] [SerifMediumItalic]
-\stoptypescript
-
-\starttypescript [calligraphy] [chorus,chancery] [name]
- \definefontsynonym [Calligraphy] [TeXGyreChorus-MediumItalic]
-\stoptypescript
-
-\starttypescript [sans] [heros,helvetica,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 [SansSlanted] [SansItalic]
- \definefontsynonym [SansBoldSlanted] [SansBoldItalic]
- \definefontsynonym [SansCaps] [\typescriptprefix{n:\typescripttwo}-Caps]
-
- \definefontvariant [Sans][osf][Caps]
- \definefontvariant [Sans][sc] [Caps]
-
- \definefontsynonym [SansRegular] [Sans]
- \definefontsynonym [SansRegularCaps] [SansCaps]
- \definefontsynonym [SansItalicCaps] [\typescriptprefix{n:\typescripttwo}-ItalicCaps]
- \definefontsynonym [SansBoldCaps] [\typescriptprefix{n:\typescripttwo}-BoldCaps]
- \definefontsynonym [SansBoldItalicCaps] [\typescriptprefix{n:\typescripttwo}-BoldItalicCaps]
- \definefontsynonym [SansSlantedCaps] [SansItalicCaps]
- \definefontsynonym [SansBoldSlantedCaps] [SansBoldItalicCaps]
- \definefontsynonym [SansCapsCaps] [SansCaps]
-\stoptypescript
-
-\starttypescript [mono] [cursor,courier] [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]
-
- \definefontvariant [Mono][osf][Caps]
- \definefontvariant [Mono][sc] [Caps]
-
- \definefontsynonym [MonoRegular] [Mono]
- \definefontsynonym [MonoRegularCaps] [MonoCaps]
- \definefontsynonym [MonoItalicCaps] [\typescriptprefix{n:\typescripttwo}-ItalicCaps]
- \definefontsynonym [MonoBoldCaps] [\typescriptprefix{n:\typescripttwo}-BoldCaps]
- \definefontsynonym [MonoBoldItalicCaps] [\typescriptprefix{n:\typescripttwo}-BoldItalicCaps]
- \definefontsynonym [MonoSlantedCaps] [MonoItalicCaps]
- \definefontsynonym [MonoBoldSlantedCaps] [MonoBoldItalicCaps]
- \definefontsynonym [MonoCapsCaps] [MonoCaps]
-\stoptypescript
-
-\stoptypescriptcollection
-
\endinput
diff --git a/Master/texmf-dist/tex/context/base/type-tmf.mkiv b/Master/texmf-dist/tex/context/base/type-tmf.mkiv
index df7a180f07e..af9280c73c8 100644
--- a/Master/texmf-dist/tex/context/base/type-tmf.mkiv
+++ b/Master/texmf-dist/tex/context/base/type-tmf.mkiv
@@ -11,923 +11,4 @@
%C therefore copyrighted by \PRAGMA. See mreadme.pdf for
%C details.
-\starttypescriptcollection[synonyms]
-
-\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
-
-\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
-
-% 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]
-\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
-
-% TeXGyre
-
-% name definitions & prefixes
-
-\definetypescriptprefix [n:pagella] [TeXGyrePagella] \definetypescriptprefix [n:palatino] [TeXGyrePagella]
-\definetypescriptprefix [n:termes] [TeXGyreTermes] \definetypescriptprefix [n:times] [TeXGyreTermes]
-\definetypescriptprefix [n:heros] [TeXGyreHeros] \definetypescriptprefix [n:helvetica] [TeXGyreHeros]
-\definetypescriptprefix [n:bonum] [TeXGyreBonum] \definetypescriptprefix [n:bookman] [TeXGyreBonum]
-\definetypescriptprefix [n:schola] [TeXGyreSchola] \definetypescriptprefix [n:schoolbook] [TeXGyreSchola]
-\definetypescriptprefix [n:adventor] [TeXGyreAdventor] %definetypescriptprefix [n:adventor] [TeXGyreAdventor]
-\definetypescriptprefix [n:cursor] [TeXGyreCursor] \definetypescriptprefix [n:courier] [TeXGyreCursor]
-\definetypescriptprefix [n:chorus] [TeXGyreChorus] \definetypescriptprefix [n:chancery] [TeXGyreChorus] % not the full set
-
-\starttypescript [serif] [pagella,palatino,termes,times,bonum,bookman,schola,schoolbook] [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 [SerifSlanted] [SerifItalic]
- \definefontsynonym [SerifBoldSlanted] [SerifBoldItalic]
- \definefontsynonym [SerifCaps] [\typescriptprefix{n:\typescripttwo}-Caps]
-
- \definefontvariant [Serif][osf][Caps]
- \definefontvariant [Serif][sc] [Caps]
-
- \definefontsynonym [SerifRegular] [Serif]
- \definefontsynonym [SerifRegularCaps] [SerifCaps]
- \definefontsynonym [SerifItalicCaps] [\typescriptprefix{n:\typescripttwo}-ItalicCaps]
- \definefontsynonym [SerifBoldCaps] [\typescriptprefix{n:\typescripttwo}-BoldCaps]
- \definefontsynonym [SerifBoldItalicCaps] [\typescriptprefix{n:\typescripttwo}-BoldItalicCaps]
- \definefontsynonym [SerifSlantedCaps] [SerifItalicCaps]
- \definefontsynonym [SerifBoldSlantedCaps] [SerifBoldItalicCaps]
- \definefontsynonym [SerifCapsCaps] [SerifCaps]
-\stoptypescript
-
-\starttypescript [serif] [chorus,chancery] [name]
- \definefontsynonym [SerifMediumItalic] [TeXGyreChorus-MediumItalic]
- \definefontsynonym [Serif] [SerifMediumItalic]
- \definefontsynonym [SerifItalic] [SerifMediumItalic]
- \definefontsynonym [SerifBold] [SerifMediumItalic]
- \definefontsynonym [SerifBoldItalic] [SerifMediumItalic]
- \definefontsynonym [SerifSlanted] [SerifMediumItalic]
- \definefontsynonym [SerifBoldSlanted] [SerifMediumItalic]
- \definefontsynonym [SerifCaps] [SerifMediumItalic]
-\stoptypescript
-
-\starttypescript [calligraphy] [chorus,chancery] [name]
- \definefontsynonym [Calligraphy] [TeXGyreChorus-MediumItalic]
-\stoptypescript
-
-\starttypescript [sans] [heros,helvetica,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 [SansSlanted] [SansItalic]
- \definefontsynonym [SansBoldSlanted] [SansBoldItalic]
- \definefontsynonym [SansCaps] [\typescriptprefix{n:\typescripttwo}-Caps]
-
- \definefontvariant [Sans][osf][Caps]
- \definefontvariant [Sans][sc] [Caps]
-
- \definefontsynonym [SansRegular] [Sans]
- \definefontsynonym [SansRegularCaps] [SansCaps]
- \definefontsynonym [SansItalicCaps] [\typescriptprefix{n:\typescripttwo}-ItalicCaps]
- \definefontsynonym [SansBoldCaps] [\typescriptprefix{n:\typescripttwo}-BoldCaps]
- \definefontsynonym [SansBoldItalicCaps] [\typescriptprefix{n:\typescripttwo}-BoldItalicCaps]
- \definefontsynonym [SansSlantedCaps] [SansItalicCaps]
- \definefontsynonym [SansBoldSlantedCaps] [SansBoldItalicCaps]
- \definefontsynonym [SansCapsCaps] [SansCaps]
-\stoptypescript
-
-\starttypescript [mono] [cursor,courier] [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]
-
- \definefontvariant [Mono][osf][Caps]
- \definefontvariant [Mono][sc] [Caps]
-
- \definefontsynonym [MonoRegular] [Mono]
- \definefontsynonym [MonoRegularCaps] [MonoCaps]
- \definefontsynonym [MonoItalicCaps] [\typescriptprefix{n:\typescripttwo}-ItalicCaps]
- \definefontsynonym [MonoBoldCaps] [\typescriptprefix{n:\typescripttwo}-BoldCaps]
- \definefontsynonym [MonoBoldItalicCaps] [\typescriptprefix{n:\typescripttwo}-BoldItalicCaps]
- \definefontsynonym [MonoSlantedCaps] [MonoItalicCaps]
- \definefontsynonym [MonoBoldSlantedCaps] [MonoBoldItalicCaps]
- \definefontsynonym [MonoCapsCaps] [MonoCaps]
-\stoptypescript
-
-\stoptypescriptcollection
-
\endinput
diff --git a/Master/texmf-dist/tex/context/base/type-msw.tex b/Master/texmf-dist/tex/context/base/type-win.mkii
index 4757b5008b0..cb0ad19f5dc 100644
--- a/Master/texmf-dist/tex/context/base/type-msw.tex
+++ b/Master/texmf-dist/tex/context/base/type-win.mkii
@@ -26,7 +26,7 @@
% {\tt test {\sl test} {\it test} {\bf test} {\bs test} {\bi test}}
% \stoplines
-\starttypescriptcollection[microsoft windows]
+\starttypescriptcollection[windows]
% verdana
diff --git a/Master/texmf-dist/tex/context/base/type-win.tex b/Master/texmf-dist/tex/context/base/type-win.mkiv
index bae89471fc3..3f06fa4db1d 100644
--- a/Master/texmf-dist/tex/context/base/type-win.tex
+++ b/Master/texmf-dist/tex/context/base/type-win.mkiv
@@ -63,23 +63,22 @@
\definefontsynonym [Mono] [\typescripttwo-Regular] [features=default]
\stoptypescript
-
-\definetypescriptprefix [f:arial] [Arial]
-\definetypescriptprefix [f:arialblack] [Arial Black]
-\definetypescriptprefix [f:comic] [Comic Sans MS]
-\definetypescriptprefix [f:courier] [Courier New]
-\definetypescriptprefix [f:franklin] [Franklin Gothic Medium]
-\definetypescriptprefix [f:georgia] [Georgia]
-\definetypescriptprefix [f:impact] [Impact]
-\definetypescriptprefix [f:lucidaconsole] [Lucida Console]
-\definetypescriptprefix [f:lucidasans] [Lucida Sans Unicode]
-\definetypescriptprefix [f:microsans] [Microsoft Sans Serif]
-\definetypescriptprefix [f:palatino] [Palatino Linotype]
-\definetypescriptprefix [f:sylfaen] [Sylfaen]
-\definetypescriptprefix [f:tahoma] [Tahoma]
-\definetypescriptprefix [f:times] [Times New Roman]
-\definetypescriptprefix [f:trebuchet] [Trebuchet MS]
-\definetypescriptprefix [f:verdana] [Verdana]
+\definetypescriptprefix [f:arial] [Arial]
+\definetypescriptprefix [f:arialblack] [Arial Black]
+\definetypescriptprefix [f:comic] [Comic Sans MS]
+\definetypescriptprefix [f:courier] [Courier New]
+\definetypescriptprefix [f:franklin] [Franklin Gothic Medium]
+\definetypescriptprefix [f:georgia] [Georgia]
+\definetypescriptprefix [f:impact] [Impact]
+\definetypescriptprefix [f:lucidaconsole] [Lucida Console]
+\definetypescriptprefix [f:lucidasans] [Lucida Sans Unicode]
+\definetypescriptprefix [f:microsans] [Microsoft Sans Serif]
+\definetypescriptprefix [f:palatino] [Palatino Linotype]
+\definetypescriptprefix [f:sylfaen] [Sylfaen]
+\definetypescriptprefix [f:tahoma] [Tahoma]
+\definetypescriptprefix [f:times] [Times New Roman]
+\definetypescriptprefix [f:trebuchet] [Trebuchet MS]
+\definetypescriptprefix [f:verdana] [Verdana]
\starttypescript [serif] [georgia,palatino,sylfaen,times]
\definefontsynonym [\typescripttwo-Regular] [name:\typescriptprefix{f:\typescripttwo}] [features=default]
@@ -102,7 +101,6 @@
\definefontsynonym [\typescripttwo-BoldItalic] [name:\typescriptprefix{f:\typescripttwo} Bold Italic] [features=default]
\stoptypescript
-
\starttypescript [georgia,palatino,sylfaen,times]
\definetypeface [\typescriptone] [rm] [serif] [\typescriptone] [default]
\stoptypescript
diff --git a/Master/texmf-dist/tex/context/base/type-xtx.tex b/Master/texmf-dist/tex/context/base/type-xtx.mkii
index 450beb6f2ec..0ee0130f776 100644
--- a/Master/texmf-dist/tex/context/base/type-xtx.tex
+++ b/Master/texmf-dist/tex/context/base/type-xtx.mkii
@@ -88,7 +88,6 @@
%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.
diff --git a/Master/texmf-dist/tex/context/base/typo-brk.lua b/Master/texmf-dist/tex/context/base/typo-brk.lua
index 33837ab7ad8..8f7a00f9df9 100644
--- a/Master/texmf-dist/tex/context/base/typo-brk.lua
+++ b/Master/texmf-dist/tex/context/base/typo-brk.lua
@@ -1,6 +1,6 @@
if not modules then modules = { } end modules ['typo-brk'] = {
version = 1.001,
- comment = "companion to typo-brk.tex",
+ comment = "companion to typo-brk.mkiv",
author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
copyright = "PRAGMA ADE / ConTeXt Development Team",
license = "see context related readme files"
@@ -9,33 +9,39 @@ if not modules then modules = { } end modules ['typo-brk'] = {
-- this code dates from the beginning and is kind of experimental; it
-- will be optimized and improved soon
-local next, type = next, type
+local next, type, tonumber = next, type, tonumber
+local utfbyte, utfchar = utf.byte, utf.char
local format = string.format
+local settings_to_array = aux.settings_to_array
local has_attribute = node.has_attribute
local unset_attribute = node.unset_attribute
local set_attribute = node.set_attribute
local copy_node = node.copy
+local free_node = node.free
local insert_node_before = node.insert_before
local insert_node_after = node.insert_after
local make_penalty_node = nodes.penalty
local make_glue_node = nodes.glue
local make_disc_node = nodes.disc
+local make_glyph_node = nodes.glyph
+local remove_node = nodes.remove -- ! nodes
+local tonodes = blobs.tonodes
-local glyph = node.id("glyph")
-local kern = node.id("kern")
+local glyph = node.id("glyph")
+local kern = node.id("kern")
breakpoints = breakpoints or { }
breakpoints.mapping = breakpoints.mapping or { }
breakpoints.methods = breakpoints.methods or { }
-breakpoints.enabled = false
breakpoints.attribute = attributes.private("breakpoint")
storage.register("breakpoints/mapping", breakpoints.mapping, "breakpoints.mapping")
local mapping = breakpoints.mapping
-function breakpoints.setreplacement(id,char,kind,before,after,language)
+function breakpoints.setreplacement(id,char,language,settings)
+ char = utfbyte(char)
local map = mapping[id]
if not map then
map = { }
@@ -46,75 +52,82 @@ function breakpoints.setreplacement(id,char,kind,before,after,language)
cmap = { }
map[char] = cmap
end
- cmap[language or ""] = { kind or 1, before or 1, after or 1 }
+ local left, right, middle = settings.left, settings.right, settings.middle
+ cmap[language or ""] = {
+ kind = tonumber(settings.kind) or 1,
+ nleft = tonumber(settings.nleft) or 1,
+ nright = tonumber(settings.nright) or 1,
+ left = left ~= "" and left or nil,
+ right = right ~= "" and right or nil,
+ middle = middle ~= "" and middle or nil,
+ } -- was { kind or 1, before or 1, after or 1 }
+end
+
+local function insert_break(head,start,before,after)
+ insert_node_before(head,start,make_penalty_node(before))
+ insert_node_before(head,start,make_glue_node(0))
+ insert_node_after(head,start,make_glue_node(0))
+ insert_node_after(head,start,make_penalty_node(after))
end
breakpoints.methods[1] = function(head,start)
if start.prev and start.next then
- insert_node_before(head,start,make_penalty_node(10000))
- insert_node_before(head,start,make_glue_node(0))
- insert_node_after(head,start,make_glue_node(0))
- insert_node_after(head,start,make_penalty_node(0))
+ insert_break(head,start,10000,0)
end
return head, start
end
breakpoints.methods[2] = function(head,start) -- ( => (-
if start.prev and start.next then
- local tmp = start
- start = make_disc_node()
- start.prev, start.next = tmp.prev, tmp.next
- tmp.prev.next, tmp.next.prev = start, start
- tmp.prev, tmp.next = nil, nil
+ local tmp
+ head, start, tmp = remove_node(head,start)
+ head, start = insert_node_before(head,start,make_disc_node())
start.replace = tmp
local tmp, hyphen = copy_node(tmp), copy_node(tmp)
hyphen.char = languages.prehyphenchar(tmp.lang)
tmp.next, hyphen.prev = hyphen, tmp
start.post = tmp
- insert_node_before(head,start,make_penalty_node(10000))
- insert_node_before(head,start,make_glue_node(0))
- insert_node_after(head,start,make_glue_node(0))
- insert_node_after(head,start,make_penalty_node(10000))
+ insert_break(head,start,10000,10000)
end
return head, start
end
breakpoints.methods[3] = function(head,start) -- ) => -)
if start.prev and start.next then
- local tmp = start
- start = make_disc_node()
- start.prev, start.next = tmp.prev, tmp.next
- tmp.prev.next, tmp.next.prev = start, start
- tmp.prev, tmp.next = nil, nil
+ local tmp
+ head, start, tmp = remove_node(head,start)
+ head, start = insert_node_before(head,start,make_disc_node())
start.replace = tmp
local tmp, hyphen = copy_node(tmp), copy_node(tmp)
hyphen.char = languages.prehyphenchar(tmp.lang)
tmp.prev, hyphen.next = hyphen, tmp
start.pre = hyphen
- insert_node_before(head,start,make_penalty_node(10000))
- insert_node_before(head,start,make_glue_node(0))
- insert_node_after(head,start,make_glue_node(0))
- insert_node_after(head,start,make_penalty_node(10000))
+ insert_break(head,start,10000,10000)
end
return head, start
end
breakpoints.methods[4] = function(head,start) -- - => - - -
if start.prev and start.next then
- local tmp = start
- start = make_disc_node()
- start.prev, start.next = tmp.prev, tmp.next
- tmp.prev.next, tmp.next.prev = start, start
- tmp.prev, tmp.next = nil, nil
- -- maybe prehyphenchar etc
- start.pre = copy_node(tmp)
- start.post = copy_node(tmp)
- start.replace = tmp
- insert_node_before(head,start,make_penalty_node(10000))
- insert_node_before(head,start,make_glue_node(0))
- insert_node_after(head,start,make_glue_node(0))
- insert_node_after(head,start,make_penalty_node(10000))
+ local tmp
+ head, start, tmp = remove_node(head,start)
+ head, start = insert_node_before(head,start,make_disc_node())
+ start.pre, start.post, start.replace = copy_node(tmp), copy_node(tmp), tmp
+ insert_break(head,start,10000,10000)
+ end
+ return head, start
+end
+breakpoints.methods[5] = function(head,start,settings) -- x => p q r
+ if start.prev and start.next then
+ local tmp
+ head, start, tmp = remove_node(head,start)
+ head, start = insert_node_before(head,start,make_disc_node())
+ start.pre, start.post, start.replace = tonodes(settings.right,tmp), tonodes(settings.left,tmp), tonodes(settings.middle,tmp)
+ free_node(tmp)
+ insert_break(head,start,10000,10000)
end
return head, start
end
+local methods = breakpoints.methods
+
function breakpoints.process(namespace,attribute,head)
local done, numbers = false, languages.numbers
local start, n = head, 0
@@ -129,20 +142,22 @@ function breakpoints.process(namespace,attribute,head)
if map then
local cmap = map[start.char]
if cmap then
- local smap = cmap[numbers[start.lang]] or cmap[""]
+ local lang = start.lang
+ -- we do a sanity check for language
+ local smap = lang and lang >= 0 and lang < 0x7FFF and (cmap[numbers[lang]] or cmap[""])
if smap then
- if n >= smap[2] then
- local m = smap[3]
+ if n >= smap.nleft then
+ local m = smap.nright
local next = start.next
- while next do -- gamble on same attribute
+ while next do -- gamble on same attribute (not that important actually)
local id = next.id
- if id == glyph then -- gamble on same attribute
+ if id == glyph then -- gamble on same attribute (not that important actually)
if map[next.char] then
break
elseif m == 1 then
- local method = breakpoints.methods[smap[1]]
+ local method = methods[smap.kind]
if method then
- head, start = method(head,start)
+ head, start = method(head,start,smap)
done = true
end
break
@@ -169,6 +184,8 @@ function breakpoints.process(namespace,attribute,head)
else
n = 0
end
+ else
+ -- n = n + 1 -- if we want single char handling (|-|) then we will use grouping and then we need this
end
elseif id == kern and start.subtype == 0 then
-- ignore intercharacter kerning, will go way
@@ -185,3 +202,7 @@ chars.handle_breakpoints = nodes.install_attribute_handler {
namespace = breakpoints,
processor = breakpoints.process,
}
+
+function breakpoints.enable()
+ tasks.enableaction("processors","chars.handle_breakpoints")
+end
diff --git a/Master/texmf-dist/tex/context/base/typo-brk.mkiv b/Master/texmf-dist/tex/context/base/typo-brk.mkiv
index 90561fc9e09..38afbb454b6 100644
--- a/Master/texmf-dist/tex/context/base/typo-brk.mkiv
+++ b/Master/texmf-dist/tex/context/base/typo-brk.mkiv
@@ -17,19 +17,17 @@
\registerctxluafile{typo-brk}{1.001}
-\definesystemattribute[breakpoint]
+\definesystemattribute[breakpoint] \chardef\breakpointattribute \dogetattributeid{breakpoint}
% compound stuff (under construction)
\newbox\breakpointbox
-\definesystemvariable {bp} % BreakPoint
-
-\exhyphenchar=\minusone % we use a different order then base tex, so we really need this
+\exhyphenchar\minusone % we use a different order then base tex, so we really need this
\newcount \maxbreakpointsid
-\def\definebreakpoints
+\unexpanded\def\definebreakpoints
{\dosingleargument\dodefinebreakpoints}
\def\dodefinebreakpoints[#1]%
@@ -42,32 +40,50 @@
{\dotripleempty\doinstallbreakpoint}
% hm, we cannot prebuild lists, font dependent
+%
+% -- type nleft nright language left right middle
+%
+% -- we might eventually stick to only method 5
\def\doinstallbreakpoint[#1][#2][#3]%
{\ifcsname\??bp:#1\endcsname
\begingroup
- \getparameters[\??bp][\c!type=1,\c!nleft=3,\c!nright=3,\s!language=,#3]%
- \ctxlua{breakpoints.setreplacement(\csname\??bp:#1\endcsname,#2,\@@bptype,\@@bpnleft,\@@bpnright,"\@@bplanguage")}%
+ \getparameters[\??bp][\c!type=1,\c!nleft=3,\c!nright=3,\s!language=,\c!left=,\c!right=,\c!middle=,#3]%
+ \ctxlua{breakpoints.setreplacement(\csname\??bp:#1\endcsname, "#2", "\@@bplanguage", {
+ kind = \@@bptype,
+ nleft = "\@@bpnleft",
+ nright = "\@@bpnright",
+ right = "\@@bpright",
+ left = "\@@bpleft",
+ middle = "\@@bpmiddle"
+ } )}% todo: table
\endgroup
\fi}
\def\setbreakpoints
- {\ctxlua{breakpoints.enabled=true}%
- \gdef\setbreakpoints[##1]{\dosetattribute{breakpoint}{\csname\??bp:##1\endcsname}}%
+ {\ctxlua{breakpoints.enable()}%
+ \gdef\setbreakpoints[##1]{\attribute\breakpointattribute\csname\??bp:##1\endcsname\relax}%
\setbreakpoints}
\letvalue{\??bp:\s!reset}\attributeunsetvalue
\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]
+\installbreakpoint [compound] [+] [\c!nleft=3,\c!nright=3,\c!type=1] % middle=+,left=,right=
+\installbreakpoint [compound] [-] [\c!nleft=3,\c!nright=3,\c!type=1] % middle=+,left=,right=
+\installbreakpoint [compound] [/] [\c!nleft=3,\c!nright=3,\c!type=1] % middle=+,left=,right=
+\installbreakpoint [compound] [(] [\c!nleft=3,\c!nright=3,\c!type=2] % type=5,middle=(,left=(-,right=
+\installbreakpoint [compound] [)] [\c!nleft=3,\c!nright=3,\c!type=3] % type=5,middle=),left=,right=-)
+
+% \start \hsize 1.5cm \setbreakpoints[compound]
+% \installbreakpoint [compound] [-] [nleft=3,nright=3,type=5,left=,right={-},middle={-}]
+% \installbreakpoint [compound] [(] [nleft=3,nright=3,type=5,left=,right={(-},middle={(}]
+% \installbreakpoint [compound] [)] [nleft=3,nright=3,type=5,left={-)},right=,middle={)}]
+% composed-word\par composed(word)\par
+% \stop
% \mainlanguage[czech]
-% \installbreakpoint [compound] [\number`-] [language=cs,left=3,right=3,type=4]
+% \installbreakpoint [compound] [\number`-] [language=cs,nleft=3,nright=3,type=4]
% \setbreakpoints[compound]
% \start \hsize 1mm test-test \par \stop
diff --git a/Master/texmf-dist/tex/context/base/typo-cap.lua b/Master/texmf-dist/tex/context/base/typo-cap.lua
index c232ac72851..5f741da7c1d 100644
--- a/Master/texmf-dist/tex/context/base/typo-cap.lua
+++ b/Master/texmf-dist/tex/context/base/typo-cap.lua
@@ -1,6 +1,6 @@
if not modules then modules = { } end modules ['typo-cap'] = {
version = 1.001,
- comment = "companion to typo-cap.tex",
+ comment = "companion to typo-cap.mkiv",
author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
copyright = "PRAGMA ADE / ConTeXt Development Team",
license = "see context related readme files"
@@ -20,10 +20,10 @@ local glyph = node.id("glyph")
local kern = node.id("kern")
local fontdata = fonts.ids
+local fontchar = fonts.chr
local chardata = characters.data
cases = cases or { }
-cases.enabled = false
cases.actions = { }
cases.attribute = attributes.private("case")
@@ -51,7 +51,8 @@ local function helper(start, code, codes, special, attribute, once)
start.font = lastfont
end
end
- local ifc = fontdata[fnt].characters
+ -- local ifc = fontdata[fnt].characters
+ local ifc = fontchar[fnt]
local ucs = dc[codes]
if ucs then
local ok = true
@@ -149,7 +150,8 @@ actions[8] = function(start)
lastfont = nil
local ch = start.char
local mr = math.random
- local tfm = fontdata[start.font].characters
+ -- local tfm = fontdata[start.font].characters
+ local tfm = fontchar[start.font]
if chardata[ch].lccode then
while true do
local d = chardata[mr(1,0xFFFF)]
@@ -202,3 +204,7 @@ chars.handle_casing = nodes.install_attribute_handler {
namespace = cases,
processor = cases.process,
}
+
+function cases.enable()
+ tasks.enableaction("processors","chars.handle_casing")
+end
diff --git a/Master/texmf-dist/tex/context/base/typo-cap.mkiv b/Master/texmf-dist/tex/context/base/typo-cap.mkiv
index 45a932200af..af4e12bc28a 100644
--- a/Master/texmf-dist/tex/context/base/typo-cap.mkiv
+++ b/Master/texmf-dist/tex/context/base/typo-cap.mkiv
@@ -17,7 +17,7 @@
\registerctxluafile{typo-cap}{1.001}
-\definesystemattribute[case]
+\definesystemattribute[case] \chardef\caseattribute \dogetattributeid{case}
%D \macros
%D {Word, Words, WORD, WORDS}
@@ -51,11 +51,13 @@
% test \word{test TEST \TeX} test
% test \Word{test TEST \TeX} test
-\def\setcharactercasing
- {\ctxlua{cases.enabled=true}%
- \gdef\setcharactercasing[##1]{\dosetattribute{case}{\number##1}}%
+\unexpanded\def\setcharactercasing
+ {\ctxlua{cases.enable()}%
+ \gdef\setcharactercasing[##1]{\attribute\caseattribute##1\relax}%
\setcharactercasing}
+% todo: names casings
+
\unexpanded\def\WORD {\groupedcommand{\setcharactercasing[\plusone ]}{}}
\unexpanded\def\word {\groupedcommand{\setcharactercasing[\plustwo ]}{}}
\unexpanded\def\Word {\groupedcommand{\setcharactercasing[\plusthree]}{}}
@@ -164,6 +166,10 @@
\let\normalWORD \WORD
\let\normalword \word
+%D As suggested by WS:
+
+\unexpanded\def\notsmallcapped{\groupedcommand{\setcharactercasing[\plustwo]\char\zerocount}{}}
+
%D \macros
%D {setupcapitals}
%D
@@ -174,10 +180,10 @@
\let\normalsmallcapped\smallcapped
-\def\setupcapitals
+\unexpanded\def\setupcapitals
{\dosingleempty\dosetupcapitals}
-\def\dosetupcapitals[#1]%
+\def\dosetupcapitals[#1]% todo: don't use grouping just a switch
{\getparameters[\??kk][#1]%
\doifelse\@@kktitle\v!yes
{\definealternativestyle[\v!capital][\normalsmallcapped][\normalsmallcapped]%
@@ -199,6 +205,8 @@
%
% \definestartstop[randomized][\c!before=\dosetattribute{case}{8},\c!after=]
-\def\randomizetext{\groupedcommand{\dosetattribute{case}{8}}{}}
+\def\randomizetext{\groupedcommand{\attribute\caseattribute\pluseight}{}}
+
+\definestartstop[randomized][\c!before=\dosetattribute{case}{8},\c!after=]
\protect \endinput
diff --git a/Master/texmf-dist/tex/context/base/typo-dig.lua b/Master/texmf-dist/tex/context/base/typo-dig.lua
new file mode 100644
index 00000000000..c1b44e39f74
--- /dev/null
+++ b/Master/texmf-dist/tex/context/base/typo-dig.lua
@@ -0,0 +1,106 @@
+if not modules then modules = { } end modules ['typo-dig'] = {
+ version = 1.001,
+ comment = "companion to typo-dig.mkiv",
+ author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
+ copyright = "PRAGMA ADE / ConTeXt Development Team",
+ license = "see context related readme files"
+}
+
+local next, type = next, type
+local format, insert = string.format, table.insert
+local round = math.round
+
+local trace_digits = false trackers.register("nodes.digits", function(v) trace_digits = v end)
+
+local has_attribute = node.has_attribute
+local unset_attribute = node.unset_attribute
+local set_attribute = node.set_attribute
+local hpack_node = node.hpack
+local traverse_id = node.traverse_id
+local insert_before = node.insert_before
+local insert_after = node.insert_after
+
+local glyph = node.id("glyph")
+local kern = node.id("kern")
+
+local new_glue = nodes.glue
+
+local fontdata = fonts.identifiers
+local chardata = fonts.characters
+local quaddata = fonts.quads
+local charbase = characters.data
+
+digits = digits or { }
+digits.actions = { }
+digits.attribute = attributes.private("digits")
+
+local actions = digits.actions
+
+-- at some point we can manipulate the glyph node so then i need
+-- to rewrite this
+
+function nodes.aligned(start,stop,width,how)
+ local prv, nxt, head = start.prev, stop.next, nil
+ start.prev, stop.next = nil, nil
+ if how == "flushright" or how == "middle" then
+ head, start = insert_before(start,start,new_glue(0,65536,65536))
+ end
+ if how == "flushleft" or how == "middle" then
+ head, stop = insert_after(start,stop,new_glue(0,65536,65536))
+ end
+ local packed = hpack_node(start,width,"exactly") -- no directional mess here, just lr
+ if prv then
+ prv.next, packed.prev = packed, prv
+ end
+ if nxt then
+ nxt.prev, packed.next = packed, nxt
+ end
+ return packed, prv, nxt
+end
+
+actions[1] = function(start,attribute)
+ local char = start.char
+ if charbase[char].category == "nd" then
+ local font = start.font
+ local oldwidth, newwidth = start.width, fonts.get_digit_width(font)
+ if newwidth ~= oldwidth then
+ local start = nodes.aligned(start,start,newwidth,"middle") -- return three node pointers
+ return start, true
+ end
+ end
+ return start, false
+end
+
+function digits.process(namespace,attribute,head)
+ local done, current, ok = false, head, false
+ while current do
+ if current.id == glyph then
+ local attr = has_attribute(current,attribute)
+ if attr and attr > 0 then
+ unset_attribute(current,attribute)
+ local action = actions[attr]
+ if action then
+ if current == head then
+ head, ok = action(current,attribute)
+ current = head
+ else
+ current, ok = action(current,attribute)
+ end
+ done = done and ok
+ end
+ end
+ end
+ current = current and current.next
+ end
+ return head, done
+end
+
+chars.handle_digits = nodes.install_attribute_handler {
+ name = "digits",
+ namespace = digits,
+ processor = digits.process,
+}
+
+function digits.enable()
+ tasks.enableaction("processors","chars.handle_digits")
+end
diff --git a/Master/texmf-dist/tex/context/base/typo-dig.mkiv b/Master/texmf-dist/tex/context/base/typo-dig.mkiv
new file mode 100644
index 00000000000..d8f73141817
--- /dev/null
+++ b/Master/texmf-dist/tex/context/base/typo-dig.mkiv
@@ -0,0 +1,51 @@
+%D \module
+%D [ file=typo-dig,
+%D version=2010.01.18,
+%D title=\CONTEXT\ Typesetting Macros,
+%D subtitle=Digits,
+%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}{ConTeXt Typesetting Macros / Digits}
+
+\unprotect
+
+\registerctxluafile{typo-dig}{1.001}
+
+\definesystemattribute[digits] \chardef\digitsattribute \dogetattributeid{digits}
+
+%D This could as well be a dynamic font feature but why bother.
+%D
+%D \macros
+%D {\equaldigits}
+%D
+%D \starttyping
+%D test test \ruledhbox{123} test test\par
+%D test test \ruledhbox{\equaldigits{123}} test test\par
+%D test test \equaldigits{123} test test\par
+%D \stoptyping
+%D
+%D \typebuffer
+%D
+%D This calls result in:
+%D
+%D \startvoorbeeld
+%D \startlines
+%D \getbuffer
+%D \stoplines
+%D \stopvoorbeeld
+
+\unexpanded\def\setdigitsmanipulation
+ {\ctxlua{digits.enable()}%
+ \gdef\setdigitsmanipulation[##1]{\attribute\digitsattribute##1\relax}%
+ \setdigitsmanipulation}
+
+\unexpanded\def\equaldigits{\groupedcommand{\setdigitsmanipulation[\plusone]}{}}
+\unexpanded\def\dummydigit {\hphantom{\setdigitsmanipulation[\plusone]0}}
+
+\protect \endinput
diff --git a/Master/texmf-dist/tex/context/base/typo-krn.lua b/Master/texmf-dist/tex/context/base/typo-krn.lua
index d3031633d84..746773e0a88 100644
--- a/Master/texmf-dist/tex/context/base/typo-krn.lua
+++ b/Master/texmf-dist/tex/context/base/typo-krn.lua
@@ -1,6 +1,6 @@
if not modules then modules = { } end modules ['typo-krn'] = {
version = 1.001,
- comment = "companion to typo-krn.tex",
+ comment = "companion to typo-krn.mkiv",
author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
copyright = "PRAGMA ADE / ConTeXt Development Team",
license = "see context related readme files"
@@ -28,18 +28,29 @@ local glue = node.id('glue')
local hlist = node.id('hlist')
local vlist = node.id('vlist')
-local fontdata = fonts.ids
-local chardata = characters.data
+local fontdata = fonts.identifiers
+local chardata = fonts.characters
+local quaddata = fonts.quads
kerns = kerns or { }
kerns.mapping = kerns.mapping or { }
-kerns.enabled = false
+kerns.factors = kerns.factors or { }
kerns.attribute = attributes.private("kern")
storage.register("kerns/mapping", kerns.mapping, "kerns.mapping")
+storage.register("kerns/factors", kerns.factors, "kerns.factors")
-function kerns.setspacing(id,factor)
- kerns.mapping[id] = factor
+local mapping = kerns.mapping
+local factors = kerns.factors
+
+function kerns.setspacing(factor)
+ local a = factors[factor]
+ if not a then
+ a = #mapping + 1
+ factors[factors], mapping[a] = a, factor
+ end
+ tex.attribute[kerns.attribute] = a
+ return a
end
-- one must use liga=no and mode=base and kern=yes
@@ -47,12 +58,9 @@ end
-- make sure it runs after all others
-- there will be a width adaptor field in nodes so this will change
-- todo: interchar kerns / disc nodes / can be made faster
--- todo: cache quad and so
-
-local mapping = kerns.mapping
local function process(namespace,attribute,head,force)
- local scale = tex.scale
+ local scale = tex.scale -- will go
local start, done, lastfont = head, false, nil
while start do
-- faster to test for attr first
@@ -92,21 +100,16 @@ local function process(namespace,attribute,head,force)
-- nothing
elseif pid == kern and prev.subtype == 0 then
prev.subtype = 1
- prev.kern = prev.kern + scale(fontdata[lastfont].parameters.quad,krn)
+ prev.kern = prev.kern + scale(quaddata[lastfont],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 = fontdata[lastfont].characters[prevchar]
- local ickern = tfm.kerns
- if ickern and ickern[lastchar] then
- krn = scale(ickern[lastchar]+fontdata[lastfont].parameters.quad,krn)
- else
- krn = scale(fontdata[lastfont].parameters.quad,krn)
- end
+ local kerns = chardata[lastfont][prevchar].kerns
+ local kern = kerns and kerns[lastchar] or 0
+ krn = scale(kern+quaddata[lastfont],krn)
else
- krn = scale(fontdata[lastfont].parameters.quad,krn)
+ krn = scale(quaddata[lastfont],krn)
end
insert_node_before(head,start,make_kern_node(krn))
done = true
@@ -115,9 +118,10 @@ local function process(namespace,attribute,head,force)
-- but we could have multiple glyphs involved so ...
local disc = prev -- disc
local pre, post, replace = disc.pre, disc.post, disc.replace
- if pre then -- must pair with start.prev
+ local prv, nxt = disc.prev, disc.next
+ if pre and prv then -- must pair with start.prev
-- this one happens in most cases
- local before = copy_node(disc.prev)
+ local before = copy_node(prv)
pre.prev = before
before.next = pre
before.prev = nil
@@ -127,8 +131,8 @@ local function process(namespace,attribute,head,force)
disc.pre = pre
free_node(before)
end
- if post then -- must pair with start
- local after = copy_node(disc.next)
+ if post and nxt then -- must pair with start
+ local after = copy_node(nxt)
local tail = find_node_tail(post)
tail.next = after
after.prev = tail
@@ -138,9 +142,9 @@ local function process(namespace,attribute,head,force)
disc.post = post
free_node(after)
end
- if replace then -- must pair with start and start.prev
- local before = copy_node(disc.prev)
- local after = copy_node(disc.next)
+ if replace and prv and nxt then -- must pair with start and start.prev
+ local before = copy_node(prv)
+ local after = copy_node(nxt)
local tail = find_node_tail(replace)
replace.prev = before
before.next = replace
@@ -151,22 +155,18 @@ local function process(namespace,attribute,head,force)
replace = process(namespace,attribute,before,attr)
replace = replace.next
replace.prev = nil
- tail.next = nil
+ after.prev.next = nil
disc.replace = replace
free_node(after)
free_node(before)
else
- if disc.prev.font == lastfont then
- local prevchar, lastchar = disc.prev.char, start.char
- local tfm = fontdata[lastfont].characters[prevchar]
- local ickern = tfm.kerns
- if ickern and ickern[lastchar] then
- krn = scale(ickern[lastchar]+fontdata[lastfont].parameters.quad,krn)
- else
- krn = scale(fontdata[lastfont].parameters.quad,krn)
- end
+ if prv and prv.id == glyph and prv.font == lastfont then
+ local prevchar, lastchar = prv.char, start.char
+ local kerns = chardata[lastfont][prevchar].kerns
+ local kern = kerns and kerns[lastchar] or 0
+ krn = scale(kern+quaddata[lastfont],krn)
else
- krn = scale(fontdata[lastfont].parameters.quad,krn)
+ krn = scale(quaddata[lastfont],krn)
end
disc.replace = make_kern_node(krn)
end
@@ -191,11 +191,11 @@ local function process(namespace,attribute,head,force)
end
elseif lastfont and (id == hlist or id == vlist) then -- todo: lookahead
if start.prev then
- insert_node_before(head,start,make_kern_node(scale(fontdata[lastfont].parameters.quad,krn)))
+ insert_node_before(head,start,make_kern_node(scale(quaddata[lastfont],krn)))
done = true
end
if start.next then
- insert_node_after(head,start,make_kern_node(scale(fontdata[lastfont].parameters.quad,krn)))
+ insert_node_after(head,start,make_kern_node(scale(quaddata[lastfont],krn)))
done = true
end
end
@@ -217,3 +217,7 @@ lists.handle_kerning = nodes.install_attribute_handler {
namespace = kerns,
processor = kerns.process,
}
+
+function kerns.enable()
+ tasks.enableaction("processors","lists.handle_kerning")
+end
diff --git a/Master/texmf-dist/tex/context/base/typo-krn.mkiv b/Master/texmf-dist/tex/context/base/typo-krn.mkiv
index e2f10d8066a..b7a6113bc86 100644
--- a/Master/texmf-dist/tex/context/base/typo-krn.mkiv
+++ b/Master/texmf-dist/tex/context/base/typo-krn.mkiv
@@ -17,43 +17,63 @@
\registerctxluafile{typo-krn}{1.001}
-\definesystemattribute[kern]
+\definesystemattribute[kern] \chardef\kernattribute\dogetattributeid{kern}
% more
%
% {\setcharacterkerning[extrakerning]\input davis\relax}
-\newcount \maxcharacterkerningid
+\unexpanded\def\definecharacterkerning
+ {\dodoubleargument\dodefinecharacterkerning}
-\def\definecharacterkerning
- {\dosingleargument\dodefinecharacterkerning}
+\def\dodefinecharacterkerning[#1][#2]%
+ {\getparameters[\??ck#1][\c!factor=0.125,#2]%
+ \setgvalue{\??ck:#1}{\ctxlua{kerns.setspacing(\csname\??ck#1\c!factor\endcsname)}}}
-\def\dodefinecharacterkerning[#1]%
- {\ifcsname\??ck#1\endcsname \else
- \global\advance\maxcharacterkerningid\plusone
- \setxvalue{\??ck:#1}{\the\maxcharacterkerningid}%
- \fi}
-
-\def\setupcharacterkerning
+\unexpanded\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
+ \getparameters[\??ck#1][#2]%
+ \else
+ \dodefinecharacterkerning[#1][#2]% bonus
\fi}
-\def\setcharacterkerning
- {\ctxlua{kerns.enabled=true}%
- \gdef\setcharacterkerning[##1]{\dosetattribute{kern}{\csname\??ck:##1\endcsname}}%
+\unexpanded\def\setcharacterkerning
+ {\ctxlua{kerns.enable()}%
+ \unexpanded\gdef\setcharacterkerning[##1]{\csname\??ck:##1\endcsname}%
\setcharacterkerning}
\letvalue{\??ck:\s!reset}\attributeunsetvalue
-\definecharacterkerning[extrakerning]
+\definecharacterkerning [extrakerning] [\c!factor=.125] % used in manuals
+
+%D Added after discussion on list (posted by WS, adapted abit by HH)
+%D \unknown\ this needs to be interfaced (\type {\v!kerncharacters}).
+%D
+%D \starttyping
+%D \setuphead[section][style=\sca,textstyle={\kerncharacters[.5]}] \section{Section}
+%D \stoptyping
+%D
+%D We could combine this with the previous definition command but
+%D then we alwasy would get a command defined which is not beforehand
+%D a good idea.
+
+\def\v!kerncharacters{kerncharacters} % no time now for translations
+
+\definecharacterkerning [\v!kerncharacters] [\c!factor=.125]
+
+\unexpanded\def\kerncharacters
+ {\dosingleempty\dokerncharacters}
+
+\def\dokerncharacters[#1]%
+ {\groupedcommand{\dodokerncharacters{#1}}\donothing}
-\setupcharacterkerning[extrakerning][\c!factor=.125]
+\def\dodokerncharacters#1%
+ {\iffirstargument
+ \setupcharacterkerning[\v!kerncharacters][\c!factor=#1]%
+ \fi
+ \setcharacterkerning[\v!kerncharacters]}
\protect \endinput
diff --git a/Master/texmf-dist/tex/context/base/typo-mir.lua b/Master/texmf-dist/tex/context/base/typo-mir.lua
index 806b8e0a0b8..6c119c2f289 100644
--- a/Master/texmf-dist/tex/context/base/typo-mir.lua
+++ b/Master/texmf-dist/tex/context/base/typo-mir.lua
@@ -1,6 +1,6 @@
if not modules then modules = { } end modules ['typo-mir'] = {
version = 1.001,
- comment = "companion to typo-mir.tex",
+ comment = "companion to typo-mir.mkiv",
author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
copyright = "PRAGMA ADE / ConTeXt Development Team",
license = "see context related readme files"
@@ -9,12 +9,12 @@ if not modules then modules = { } end modules ['typo-mir'] = {
local utf = unicode.utf8
local next, type = next, type
-local format, insert = string.format, table.insert
+local format, insert, sub, find, match = string.format, table.insert, string.sub, string.find, string.match
local utfchar = utf.char
-- vertical space handler
-local trace_mirroring = false trackers.register("nodes.mirroring", function(v) trace_mirroring = v end)
+local trace_mirroring = false trackers.register("nodes.mirroring", function(v) trace_mirroring = v end)
local has_attribute = node.has_attribute
local unset_attribute = node.unset_attribute
@@ -29,6 +29,7 @@ local whatsit = node.id("whatsit")
local mthnode = node.id('math')
local fontdata = fonts.ids
+local fontchar = fonts.chr
local chardata = characters.data
--~ Analysis by Idris:
@@ -56,13 +57,12 @@ local chardata = characters.data
-- elseif d == "ws" then -- Whitespace
-- elseif d == "on" then -- Other Neutrals
-mirror = mirror or { }
-mirror.enabled = false
-mirror.strip = false
-mirror.attribute = attributes.private("mirror")
+mirroring = mirroring or { }
+mirroring.strip = false
+mirroring.attribute = attributes.private("mirroring")
local state = attributes.private('state')
-local mirrora = attributes.private('mirror')
+local mirrora = attributes.private('mirroring')
local directions = characters.directions -- maybe make a special mirror table
@@ -144,7 +144,7 @@ local function force_auto_right_before()
end
end
-function mirror.process(namespace,attribute,start) -- todo: make faster
+function mirroring.process(namespace,attribute,start) -- todo: make faster
if not start.next then
return start, false
end
@@ -156,6 +156,7 @@ function mirror.process(namespace,attribute,start) -- todo: make faster
local lro, rlo, prevattr, inmath = false, false, 0, false
while current do
local id = current.id
+--~ print(id,attribute,has_attribute(current,attribute))
if skipmath and id == mthnode then
local subtype = current.subtype
if subtype == 0 then
@@ -172,8 +173,7 @@ function mirror.process(namespace,attribute,start) -- todo: make faster
else
local attr = has_attribute(current,attribute)
if attr and attr > 0 then
- unset_attribute(current,attribute) -- slow, needed?
---~ set_attribute(current,attribute,0) -- might be faster
+ -- unset_attribute(current,attribute) -- slow, needed?
if attr == 1 then
-- bidi parsing mode
elseif attr ~= prevattr then
@@ -238,7 +238,7 @@ function mirror.process(namespace,attribute,start) -- todo: make faster
end
if d == "on" then
local mirror = chardata[char].mirror -- maybe make a special mirror table
- if mirror and fontdata[current.font].characters[mirror] then
+ if mirror and fontchar[current.font][mirror] then
-- todo: set attribute
if autodir < 0 then
current.char = mirror
@@ -254,10 +254,16 @@ function mirror.process(namespace,attribute,start) -- todo: make faster
if autodir <= 0 then
force_auto_left_before()
end
- elseif d == "r" or d == "al" or d == "an" then -- arabic left, arabic number
+ elseif d == "r" or d == "al" then -- arabic number
if autodir >= 0 then
force_auto_right_before()
end
+ elseif d == "an" then -- arabic number
+ -- actually this is language dependent ...
+ if autodir <= 0 then
+--~ force_auto_right_before()
+ force_auto_left_before()
+ end
elseif d == "lro" then -- Left-to-Right Override -> right becomes left
if trace_mirroring then
list[#list+1] = "override right -> left"
@@ -306,12 +312,10 @@ function mirror.process(namespace,attribute,start) -- todo: make faster
end
obsolete[#obsolete+1] = current
end
- else
- if trace_mirroring then
- local char = current.char
- local d = directions[char]
- list[#list+1] = format("char %s (%s / U+%04X) of class %s (no bidi)",utfchar(char),char,char,d)
- end
+ elseif trace_mirroring then
+ local char = current.char
+ local d = directions[char]
+ list[#list+1] = format("char %s (%s / U+%04X) of class %s (no bidi)",utfchar(char),char,char,d or "?")
end
elseif id == whatsit then
if finish then
@@ -320,8 +324,8 @@ function mirror.process(namespace,attribute,start) -- todo: make faster
local subtype = current.subtype
if subtype == 6 then
local dir = current.dir
- local d = dir:sub(2,2) -- -- -- -- -- why is this not used
- if dir:find(".R.") then -- -- d == "R" or just dir == "TRT"
+ local d = sub(dir,2,2)
+ if d == 'R' then -- find(dir,".R.") / dir == "TRT"
autodir = -1
else
autodir = 1
@@ -332,8 +336,9 @@ function mirror.process(namespace,attribute,start) -- todo: make faster
end
elseif subtype == 7 then
local dir = current.dir
- local sign = dir:sub(1,1)
- local dire = dir:sub(3,3)
+ -- local sign = sub(dir,1,1)
+ -- local dire = sub(dir,3,3)
+ local sign, dire = match(dir,"^(.).(.)")
if dire == "R" then
if sign == "+" then
finish, autodir = "TRT", -1
@@ -375,7 +380,7 @@ function mirror.process(namespace,attribute,start) -- todo: make faster
end
logs.report("bidi","stop log")
end
- if done and mirror.strip then
+ if done and mirroring.strip then
local n = #obsolete
if n > 0 then
for i=1,n do
@@ -404,7 +409,11 @@ end
--~ end
chars.handle_mirroring = nodes.install_attribute_handler {
- name = "mirror",
- namespace = mirror,
- processor = mirror.process,
+ name = "mirroring",
+ namespace = mirroring,
+ processor = mirroring.process,
}
+
+function mirroring.enable()
+ tasks.enableaction("processors","chars.handle_mirroring")
+end
diff --git a/Master/texmf-dist/tex/context/base/typo-mir.mkiv b/Master/texmf-dist/tex/context/base/typo-mir.mkiv
index fe9d793e051..4c85262aab2 100644
--- a/Master/texmf-dist/tex/context/base/typo-mir.mkiv
+++ b/Master/texmf-dist/tex/context/base/typo-mir.mkiv
@@ -17,21 +17,21 @@
\registerctxluafile{typo-mir}{1.001}
-\definesystemattribute[mirror]
+\definesystemattribute[mirroring] \chardef\mirroringattribute \dogetattributeid{mirroring}
% experimental mirroring
\def\setcharactermirroring
- {\ctxlua{mirror.enabled=true}%
- \gdef\setcharactermirroring[##1]{\dosetattribute{mirror}{\number##1}}%
+ {\ctxlua{mirroring.enable()}%
+ \gdef\setcharactermirroring[##1]{\attribute\mirroringattribute##1\relax}%
\setcharactermirroring}
\def\resetcharactermirroring
- {\doresetattribute{mirror}}
+ {\attribute\mirroringattribute\attributeunsetvalue}
\newtoks\everysetupdirections
-\def\setupdirections[#1]% there will be more like setting up directions themselves
+\unexpanded\def\setupdirections[#1]% there will be more like setting up directions themselves
{\getparameters[\??di][#1]%
\the\everysetupdirections}
@@ -100,9 +100,9 @@
\def\biditest#1#2#3% font text raw
{\dontleavehmode\hbox
{\framed[offset=overlay]{\tttf#2}\quad
- \ctxlua{mirror.trace = true}%
+ \enabletrackers[nodes.mirroring]%
\framed[offset=overlay]{#1#3}\quad
- \ctxlua{mirror.trace = false}
+ \disabletrackers[nodes.mirroring]%
\tttf\ctxlua{document.split_tokens([[\detokenize{#3}]])}}}
\startbuffer[bidi-sample]
diff --git a/Master/texmf-dist/tex/context/base/typo-rep.lua b/Master/texmf-dist/tex/context/base/typo-rep.lua
new file mode 100644
index 00000000000..6fde21482c7
--- /dev/null
+++ b/Master/texmf-dist/tex/context/base/typo-rep.lua
@@ -0,0 +1,135 @@
+if not modules then modules = { } end modules ['typo-rep'] = {
+ version = 1.001,
+ comment = "companion to node-ini.mkiv",
+ author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
+ copyright = "PRAGMA ADE / ConTeXt Development Team",
+ license = "see context related readme files"
+}
+
+-- This was rather boring to program (more of the same) but I could
+-- endure it by listening to a couple cd's by The Scene and The Lau
+-- on the squeezebox on my desk.
+
+local trace_stripping = false trackers.register("nodes.stripping", function(v) trace_stripping = v end)
+ trackers.register("fonts.stripping", function(v) trace_stripping = v end)
+
+local delete_node = nodes.delete
+local replace_node = nodes.replace
+local copy_node = node.copy
+local has_attribute = node.has_attribute
+
+local chardata = characters.data
+local collected = false
+local glyph = node.id("glyph")
+local attribute = attributes.private("stripping")
+local fontdata = fonts.ids
+
+nodes.stripping = nodes.stripping or { }
+local stripping = nodes.stripping
+stripping.glyphs = stripping.glyphs or { }
+local glyphs = stripping.glyphs
+
+local function initialize()
+ for k,v in next, chardata do
+ if v.category == "cf" and v.visible ~= "yes" then
+ if not glyphs[k] then
+ glyphs[k] = true
+ end
+ end
+ end
+ initialize = nil
+end
+
+local function process(what,head,current,char)
+ if what == true then
+ if trace_stripping then
+ logs.report("fonts","deleting 0x%05X from text",char)
+ end
+ head, current = delete_node(head,current)
+ elseif type(what) == "function" then
+ head, current = what(head,current)
+ current = current.next
+ if trace_stripping then
+ logs.report("fonts","processing 0x%05X in text",char)
+ end
+ elseif what then -- assume node
+ head, current = replace_node(head,current,copy_node(what))
+ current = current.next
+ if trace_stripping then
+ logs.report("fonts","replacing 0x%05X in text",char)
+ end
+ end
+ return head, current
+end
+
+function nodes.stripping.process(head)
+ local current, done = head, false
+ while current do
+ if current.id == glyph then
+ -- it's more efficient to keep track of what needs to be kept
+ local todo = has_attribute(current,attribute)
+ if todo == 1 then
+ local char = current.char
+ local what = glyphs[char]
+ if what then
+ head, current = process(what,head,current,char)
+ done = true
+ else -- handling of spacing etc has to be done elsewhere
+ current = current.next
+ end
+ else
+ current = current.next
+ end
+ else
+ current = current.next
+ end
+ end
+ return head, done
+end
+
+tasks.appendaction("processors","fonts","nodes.stripping.process",nil,"nodes.process_characters")
+tasks.disableaction("processors","nodes.stripping.process")
+
+function nodes.stripping.enable()
+ if initialize then initialize() end
+ tasks.enableaction("processors","nodes.stripping.process")
+ function nodes.stripping.enable() end
+end
+
+-- bonus:
+
+local initializers, methods = fonts.initializers, fonts.methods
+
+local function processformatters(head,font)
+ local how = fontdata[font].shared.features.formatters -- slow
+ if how == nil or how == "strip" then -- nil when forced
+ local current, done = head, false
+ while current do
+ if current.id == glyph and current.subtype<256 and current.font == font then
+ local char = current.char
+ local what = glyphs[char]
+ if what then
+ head, current = process(what,head,current,char)
+ done = true
+ else -- handling of spacing etc has to be done elsewhere
+ current = current.next
+ end
+ else
+ current = current.next
+ end
+ end
+ return head, done
+ else
+ return head, false
+ end
+end
+
+function initializers.common.formatters(tfmdata,value)
+ if initialize then initialize() end
+end
+
+initializers.base.otf.formatters = initializers.common.formatters
+initializers.node.otf.formatters = initializers.common.formatters
+
+methods.node.otf.formatters = processformatters
+methods.base.otf.formatters = processformatters
diff --git a/Master/texmf-dist/tex/context/base/typo-rep.mkiv b/Master/texmf-dist/tex/context/base/typo-rep.mkiv
new file mode 100644
index 00000000000..2f1d8b4cbee
--- /dev/null
+++ b/Master/texmf-dist/tex/context/base/typo-rep.mkiv
@@ -0,0 +1,53 @@
+%D \module
+%D [ file=typo-rep,
+%D version=2010.05.23,
+%D title=\CONTEXT\ Typesetting Macros,
+%D subtitle=Stripping,
+%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}{ConTeXt Typesetting Macros / Stripping}
+
+% experimental stripping
+
+%D For a while we had stripping built into the analyzer. Khaled
+%D suggested to generalize this so I changed the code into a
+%D manipulator there.
+%D
+%D \starttyping
+%D \definefontfeature[default][default][mode=node,formatters=strip]
+%D \stoptyping
+%D
+%D However, in \MKIV\ it makes more sense to also provide it as a more
+%D general feature. Here we implement this as experiment. I might
+%D cook up a few more variants in both variants.
+%D
+%D \starttyping
+%D \setcharacterstripping[1]
+%D \stoptyping
+
+\unprotect
+
+\registerctxluafile{typo-rep}{1.001}
+
+\definesystemattribute[stripping] \chardef\strippingattribute \dogetattributeid{stripping}
+
+\def\setcharacterstripping
+ {\ctxlua{nodes.stripping.enable()}%
+ \gdef\setcharacterstripping[##1]{\attribute\strippingattribute##1\relax}%
+ \setcharacterstripping}
+
+\def\resetcharacterstripping
+ {\attribute\strippingattribute\attributeunsetvalue}
+
+% maybe .. this might disappear, but is handy for testing
+
+\def\forcecharacterstripping % secret command
+ {\ctxlua{fonts.otf.features.register("formatters",true)}}
+
+\protect \endinput
diff --git a/Master/texmf-dist/tex/context/base/typo-spa.lua b/Master/texmf-dist/tex/context/base/typo-spa.lua
index 20861d08b32..48c7263c70e 100644
--- a/Master/texmf-dist/tex/context/base/typo-spa.lua
+++ b/Master/texmf-dist/tex/context/base/typo-spa.lua
@@ -1,11 +1,13 @@
if not modules then modules = { } end modules ['typo-spa'] = {
version = 1.001,
- comment = "companion to typo-spa.tex",
+ comment = "companion to typo-spa.mkiv",
author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
copyright = "PRAGMA ADE / ConTeXt Development Team",
license = "see context related readme files"
}
+-- get rid of tex.scale here
+
local utf = unicode.utf8
local next, type = next, type
@@ -21,11 +23,12 @@ local remove_node = nodes.remove
local make_penalty_node = nodes.penalty
local make_glue_node = nodes.glue
local glyph = node.id("glyph")
-local fontdata = fonts.ids
+
+local fontdata = fonts.identifiers
+local quaddata = fonts.quads
spacings = spacings or { }
spacings.mapping = spacings.mapping or { }
-spacings.enabled = false
spacings.attribute = attributes.private("spacing")
storage.register("spacings/mapping", spacings.mapping, "spacings.mapping")
@@ -56,10 +59,10 @@ function spacings.process(namespace,attribute,head)
local map = mapping[attr]
if map then
map = map[start.char]
- unset_attribute(start,attribute)
+ unset_attribute(start,attribute) -- needed?
if map then
local left, right, alternative = map.left, map.right, map.alternative
- local quad = fontdata[start.font].parameters.quad
+ local quad = quaddata[start.font]
local prev = start.prev
if left and left ~= 0 and prev then
local ok = false
@@ -148,3 +151,17 @@ lists.handle_spacing = nodes.install_attribute_handler {
namespace = spacings,
processor = spacings.process,
}
+
+function spacings.enable()
+ tasks.enableaction("processors","lists.handle_spacing")
+end
+
+--~ local data = {
+--~ name = "spacing",
+--~ namespace = spacings,
+--~ processor = spacings.process,
+--~ }
+--~ nodes.process_attribute = process_attribute
+--~ function lists.handle_spacing(head)
+--~ return process_attribute(head,data)
+--~ end
diff --git a/Master/texmf-dist/tex/context/base/typo-spa.mkiv b/Master/texmf-dist/tex/context/base/typo-spa.mkiv
index d1b855edd6b..e059b62e454 100644
--- a/Master/texmf-dist/tex/context/base/typo-spa.mkiv
+++ b/Master/texmf-dist/tex/context/base/typo-spa.mkiv
@@ -17,7 +17,7 @@
\registerctxluafile{typo-spa}{1.001}
-\definesystemattribute[spacing]
+\definesystemattribute[spacing] \chardef\spacingattribute \dogetattributeid{spacing}
% experimental spacing
%
@@ -25,13 +25,13 @@
\newcount \maxcharacterspacingid
-\def\definecharacterspacing[#1]%
+\unexpanded\def\definecharacterspacing[#1]%
{\ifcsname\??ch#1\endcsname \else
\global\advance\maxcharacterspacingid\plusone
\setxvalue{\??ch:#1}{\the\maxcharacterspacingid}%
\fi}
-\def\setupcharacterspacing
+\unexpanded\def\setupcharacterspacing
{\dotripleargument\dosetupcharacterspacing}
\def\dosetupcharacterspacing[#1][#2][#3]%
@@ -43,12 +43,12 @@
\fi}
\def\setcharacterspacing
- {\ctxlua{spacings.enabled=true}%
- \gdef\setcharacterspacing[##1]{\dosetattribute{spacing}{\csname\??ch:##1\endcsname}}%
+ {\ctxlua{spacings.enable()}%
+ \gdef\setcharacterspacing[##1]{\attribute\spacingattribute\csname\??ch:##1\endcsname\relax}%
\setcharacterspacing}
\def\resetcharacterspacing
- {\doresetattribute{spacing}}
+ {\attribute\spacingattribute\attributeunsetvalue}
\letvalue{\??ch:\s!reset}\attributeunsetvalue
diff --git a/Master/texmf-dist/tex/context/base/unic-031.mkii b/Master/texmf-dist/tex/context/base/unic-031.mkii
index ae6bc1b8e4b..13fd47a5484 100644
--- a/Master/texmf-dist/tex/context/base/unic-031.mkii
+++ b/Master/texmf-dist/tex/context/base/unic-031.mkii
@@ -271,13 +271,3 @@
\stopunicodevector
\protect \endinput
-
-
-
-
-
-
-
-
-
-
diff --git a/Master/texmf-dist/tex/context/base/verb-eif.mkii b/Master/texmf-dist/tex/context/base/verb-eif.mkii
index 5904abc6e54..68c84d4bef4 100644
--- a/Master/texmf-dist/tex/context/base/verb-eif.mkii
+++ b/Master/texmf-dist/tex/context/base/verb-eif.mkii
@@ -64,7 +64,7 @@
%D We borrow most of the macros from the \PERL\ driver.
-\ifx\undefined\setupprettyPLtype \input verb-pl \relax \fi
+\ifdefined\setupprettyPLtype \else \loadmarkfile{verb-pl} \fi
\unprotect
diff --git a/Master/texmf-dist/tex/context/base/verb-ini.mkii b/Master/texmf-dist/tex/context/base/verb-ini.mkii
index 4726d0eace4..829e10fd82e 100644
--- a/Master/texmf-dist/tex/context/base/verb-ini.mkii
+++ b/Master/texmf-dist/tex/context/base/verb-ini.mkii
@@ -1455,11 +1455,8 @@
\ifCONTEXT \else
- \input verb-tex
- \input verb-mp
- \input verb-pl
- \input verb-jv
- \input verb-sql
+ \input verb-tex.mkii
+ \input verb-mp.mkii
\def\startTEX
{\bgroup \everypar{}%
@@ -1471,26 +1468,8 @@
\let\obeycharacters\setupprettyMPtype
\processdisplayverbatim{\stopMP}}
- \def\startPL
- {\bgroup \everypar{}%
- \let\obeycharacters\setupprettyPLtype
- \processdisplayverbatim{\stopPL}}
-
- \def\startJV
- {\bgroup \everypar{}%
- \let\obeycharacters\setupprettyJVtype
- \processdisplayverbatim{\stopJV}}
-
- \def\startSQL
- {\bgroup \everypar{}%
- \let\obeycharacters\setupprettySQLtype
- \processdisplayverbatim{\stopSQL}}
-
\let\stopTEX=\egroup
\let\stopMP =\egroup
- \let\stopPL =\egroup
- \let\stopJV =\egroup
- \let\stopSQL=\egroup
\fi
diff --git a/Master/texmf-dist/tex/context/base/verb-js.mkii b/Master/texmf-dist/tex/context/base/verb-js.mkii
index 3d1b69f8b7d..e497e475b05 100644
--- a/Master/texmf-dist/tex/context/base/verb-js.mkii
+++ b/Master/texmf-dist/tex/context/base/verb-js.mkii
@@ -32,7 +32,7 @@
%D a slightly adapted \PERL\ visualization. First we load the
%D \PERL\ module:
-\ifx\undefined\setupprettyPLtype \input verb-pl \relax \fi
+\ifdefined\setupprettyPLtype \else \loadmarkfile{verb-pl} \fi
\unprotect
diff --git a/Master/texmf-dist/tex/context/base/verb-jv.mkii b/Master/texmf-dist/tex/context/base/verb-jv.mkii
index 197b37ee706..ee79e5c03d7 100644
--- a/Master/texmf-dist/tex/context/base/verb-jv.mkii
+++ b/Master/texmf-dist/tex/context/base/verb-jv.mkii
@@ -22,7 +22,7 @@
%D driver looks much like the \JAVASCRIPT\ one, we don't
%D comment it extensively.
-\ifx\undefined\setupprettyPLtype \input verb-pl \relax \fi
+\ifdefined\setupprettyPLtype \else \loadmarkfile{verb-pl} \fi
\unprotect
diff --git a/Master/texmf-dist/tex/context/base/verb-pas.mkii b/Master/texmf-dist/tex/context/base/verb-pas.mkii
index 0c9850abfd9..71c0b5a1252 100644
--- a/Master/texmf-dist/tex/context/base/verb-pas.mkii
+++ b/Master/texmf-dist/tex/context/base/verb-pas.mkii
@@ -36,7 +36,7 @@
%D [palet=,icommand=\bf,vcommand=,ccommand=\it]
%D \stopbuffer
-\ifx\undefined\setupprettyPLtype \input verb-pl \relax \fi
+\ifdefined\setupprettyPLtype \else \loadmarkfile{verb-pl} \fi
\unprotect
diff --git a/Master/texmf-dist/tex/context/base/verb-raw.mkii b/Master/texmf-dist/tex/context/base/verb-raw.mkii
index 32903db7736..43a0891a039 100644
--- a/Master/texmf-dist/tex/context/base/verb-raw.mkii
+++ b/Master/texmf-dist/tex/context/base/verb-raw.mkii
@@ -1,7 +1,7 @@
-\ifx\undefined\setupprettyTEXtype \input verb-tex \relax \fi
+\ifdefined\setupprettyPLtype \else \loadmarkfile{verb-pl} \fi
\gdef\setupprettyRAWtype%
{\setupprettyTEXtype
\def\prettyidentifier{RAW}}
-
-\endinput
+
+\endinput
diff --git a/Master/texmf-dist/tex/context/base/verb-sql.mkii b/Master/texmf-dist/tex/context/base/verb-sql.mkii
index a00841d7341..f145607f819 100644
--- a/Master/texmf-dist/tex/context/base/verb-sql.mkii
+++ b/Master/texmf-dist/tex/context/base/verb-sql.mkii
@@ -49,7 +49,7 @@
%D Like we did with the \JAVASCRIPT\ driver, we will borrow
%D most of the macros from the \PERL\ driver.
-\ifx\undefined\setupprettyPLtype \input verb-pl \relax \fi
+\ifdefined\setupprettyPLtype \else \loadmarkfile{verb-pl} \fi
\unprotect
diff --git a/Master/texmf-dist/tex/context/base/x-asciimath.lua b/Master/texmf-dist/tex/context/base/x-asciimath.lua
new file mode 100644
index 00000000000..c2b15e3132f
--- /dev/null
+++ b/Master/texmf-dist/tex/context/base/x-asciimath.lua
@@ -0,0 +1,267 @@
+if not modules then modules = { } end modules ['x-asciimath'] = {
+ version = 1.001,
+ comment = "companion to x-asciimath.mkiv",
+ author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
+ copyright = "PRAGMA ADE / ConTeXt Development Team",
+ license = "see context related readme files"
+}
+
+--[[ldx--
+<p>Some backgrounds are discussed in <t>x-asciimath.mkiv</t>.</p>
+--ldx]]--
+
+local trace_mapping = false if trackers then trackers.register("asciimath.mapping", function(v) trace_mapping = v end) end
+
+local format = string.format
+local texsprint, ctxcatcodes = tex.sprint, tex.ctxcatcodes
+local lpegmatch = lpeg.match
+
+local S, P, R, C, V, Cc, Ct, Cs = lpeg.S, lpeg.P, lpeg.R, lpeg.C, lpeg.V, lpeg.Cc, lpeg.Ct, lpeg.Cs
+
+local letter = lpeg.patterns.utf8
+local space = S(" \n\r\t")
+local spaces = space^0/""
+local integer = P("-")^-1 * R("09")^1
+local realpart = P("-")^-1 * R("09")^1 * S(".")^1 * R("09")^1
+local number = integer -- so we can support nice formatting if needed
+local real = realpart -- so we can support nice formatting if needed
+local float = realpart * P("E") * integer -- so we can support nice formatting if needed
+local texnic = P("\\") * (R("az","AZ")^1)
+
+local premapper = Cs ( (
+
+ P("@") / "\\degrees " +
+ P("O/") / "\\varnothing " +
+ P("o+") / "\\oplus " +
+ P("o.") / "\\ocirc " +
+ P("!in") / "\\not\\in " +
+ P("!=") / "\\neq " +
+ P("**") / "\\star " +
+ P("*") / "\\cdot " +
+ P("//") / "\\slash " +
+ P("/_") / "\\angle " +
+ P("\\\\") / "\\backslash " +
+ P("^^^") / "\\wedge " +
+ P("^^") / "\\wedge " +
+ P("<<") / "\\left\\langle " +
+ P(">>") / "\\right\\rangle " +
+ P("<=") / "\\leq " +
+ P(">=") / "\\geq " +
+ P("-<") / "\\precc " +
+ P(">-") / "\\succ " +
+ P("~=") / "\\cong " +
+ P("~~") / "\\approx " +
+ P("=>") / "\\Rightarrow " +
+ P("(:") / "\\left\\langle " +
+ P(":)") / "\\right\\rangle " +
+ P(":.") / "\\therefore " +
+ P("~|") / "\\right\\rceil " +
+ P("_|_") / "\\bot " +
+ P("_|") / "\\right\\rfloor " +
+ P("+-") / "\\pm " +
+ P("|--") / "\\vdash " +
+ P("|==") / "\\models " +
+ P("|_") / "\\left\\lfloor " +
+ P("|~") / "\\left\\lceil " +
+ P("-:") / "\\div " +
+ P("_=") / "\\equiv " +
+
+ P("|") / "\\middle\\| " +
+
+ P("dx") / "(dx)" +
+ P("dy") / "(dy)" +
+ P("dz") / "(dz)" +
+
+ letter + P(1)
+
+)^0 )
+
+local reserved = {
+ ["aleph"] = "\\aleph ",
+ ["vdots"] = "\\vdots ",
+ ["ddots"] = "\\ddots ",
+ ["oint"] = "\\oint ",
+ ["grad"] = "\\nabla ",
+ ["prod"] = "\\prod ",
+ ["prop"] = "\\propto ",
+ ["sube"] = "\\subseteq ",
+ ["supe"] = "\\supseteq ",
+ ["sinh"] = "\\sinh ",
+ ["cosh"] = "\\cosh ",
+ ["tanh"] = "\\tanh ",
+ ["sum"] = "\\sum ",
+ ["vvv"] = "\\vee ",
+ ["nnn"] = "\\cap ",
+ ["uuu"] = "\\cup ",
+ ["sub"] = "\\subset ",
+ ["sup"] = "\\supset ",
+ ["not"] = "\\lnot ",
+ ["iff"] = "\\Leftrightarrow ",
+ ["int"] = "\\int ",
+ ["del"] = "\\partial ",
+ ["and"] = "\\and ",
+ ["not"] = "\\not ",
+ ["sin"] = "\\sin ",
+ ["cos"] = "\\cos ",
+ ["tan"] = "\\tan ",
+ ["csc"] = "\\csc ",
+ ["sec"] = "\\sec ",
+ ["cot"] = "\\cot ",
+ ["log"] = "\\log ",
+ ["det"] = "\\det ",
+ ["lim"] = "\\lim ",
+ ["mod"] = "\\mod ",
+ ["gcd"] = "\\gcd ",
+ ["lcm"] = "\\lcm ",
+ ["min"] = "\\min ",
+ ["max"] = "\\max ",
+ ["xx"] = "\\times ",
+ ["in"] = "\\in ",
+ ["ox"] = "\\otimes ",
+ ["vv"] = "\\vee ",
+ ["nn"] = "\\cap ",
+ ["uu"] = "\\cup ",
+ ["oo"] = "\\infty ",
+ ["ln"] = "\\ln ",
+ ["or"] = "\\or ",
+
+ ["AA"] = "\\forall ",
+ ["EE"] = "\\exists ",
+ ["TT"] = "\\top ",
+ ["CC"] = "\\Bbb{C}",
+ ["NN"] = "\\Bbb{N}",
+ ["QQ"] = "\\Bbb{Q}",
+ ["RR"] = "\\Bbb{R}",
+ ["ZZ"] = "\\Bbb{Z}",
+
+}
+
+local postmapper = Cs ( (
+
+ P("\\mathoptext ") * spaces * (P("\\bgroup ")/"{") * (1-P("\\egroup "))^1 * (P("\\egroup ")/"}") +
+
+ (P("\\bgroup ")) / "{" +
+ (P("\\egroup ")) / "}" +
+
+ P("\\") * (R("az","AZ")^2) +
+
+ (R("AZ","az")^2) / reserved +
+
+ P("{:") / "\\left." +
+ P(":}") / "\\right." +
+ P("(") / "\\left(" +
+ P(")") / "\\right)" +
+ P("[") / "\\left[" +
+ P("]") / "\\right]" +
+ P("{") / "\\left\\{" +
+ P("}") / "\\right\\}" +
+
+ letter + P(1)
+)^0 )
+
+local parser
+
+local function converted(original,totex)
+ local ok, result
+ if trace_mapping then
+ logs.report("asciimath","original : %s",original)
+ end
+ local premapped = lpegmatch(premapper,original)
+ if premapped then
+ if trace_mapping then
+ logs.report("asciimath","prepared : %s",premapped)
+ end
+ local parsed = lpegmatch(parser,premapped)
+ if parsed then
+ if trace_mapping then
+ logs.report("asciimath","parsed : %s",parsed)
+ end
+ local postmapped = lpegmatch(postmapper,parsed)
+ if postmapped then
+ if trace_mapping then
+ logs.report("asciimath","finalized : %s",postmapped)
+ end
+ result, ok = postmapped, true
+ else
+ result = "error in postmapping"
+ end
+ else
+ result = "error in mapping"
+ end
+ else
+ result = "error in premapping"
+ end
+ if totex then
+ if ok then
+ texsprint(ctxcatcodes,"\\mathematics{",result,"}")
+ else
+ texsprint(ctxcatcodes,"{\\tt",result,"}")
+ end
+ else
+ return result
+ end
+end
+
+local function onlyconverted(str)
+ local parsed = lpegmatch(parser,str)
+ return parsed or str
+end
+
+local sqrt = P("sqrt") / "\\rootradical \\bgroup \\egroup "
+local root = P("root") / "\\rootradical "
+local frac = P("frac") / "\\frac "
+local stackrel = P("stackrel") / "\\stackrel "
+local text = P("text") / "\\mathoptext "
+local hat = P("hat") / "\\widehat "
+local overbar = P("bar") / "\\overbar "
+local underline = P("ul") / "\\underline "
+local vec = P("vec") / "\\overrightarrow "
+local dot = P("dot") / "\\dot "
+local ddot = P("ddot") / "\\ddot "
+
+local left = P("(:") + P("{:") + P("(") + P("[") + P("{")
+local right = P(":)") + P(":}") + P(")") + P("]") + P("}")
+local leftnorright = 1 - left - right
+local singles = sqrt + text + hat + underline + overbar + vec + ddot + dot
+local doubles = root + frac + stackrel
+local ignoreleft = (left/"") * spaces * spaces
+local ignoreright = spaces * (right/"") * spaces
+local ignoreslash = spaces * (P("/")/"") * spaces
+local comma = P(",")
+local nocomma = 1-comma
+local anychar = P(1)
+local openmatrix = left * spaces * Cc("\\matrix\\bgroup ")
+local closematrix = Cc("\\egroup ") * spaces * right
+local nextcolumn = spaces * (comma/"&") * spaces
+local nextrow = spaces * (comma/"\\cr ") * spaces
+local finishrow = Cc("\\cr ")
+local opengroup = left/"\\bgroup "
+local closegroup = right/"\\egroup "
+local somescript = S("^_") * spaces
+local beginargument = Cc("\\bgroup ")
+local endargument = Cc("\\egroup ")
+
+parser = Cs { "main",
+
+ scripts = somescript * V("argument"),
+ division = Cc("\\frac") * V("argument") * spaces * ignoreslash * spaces * V("argument"),
+ double = doubles * spaces * V("argument") * spaces * V("argument"),
+ single = singles * spaces * V("argument"),
+
+ balanced = opengroup * (C((leftnorright + V("balanced"))^0)/onlyconverted) * closegroup,
+ argument = V("balanced") + V("token"),
+
+ element = (V("step") + (V("argument") + V("step")) - ignoreright - nextcolumn - comma)^1,
+ commalist = ignoreleft * V("element") * (nextcolumn * spaces * V("element"))^0 * ignoreright,
+ matrix = openmatrix * spaces * (V("commalist") * (nextrow * V("commalist"))^0) * finishrow * closematrix,
+
+ token = beginargument * (texnic + float + real + number + letter) * endargument,
+
+ step = V("scripts") + V("division") + V("single") + V("double"),
+ main = (V("matrix") + V("step") + anychar)^0,
+
+}
+
+asciimath = { }
+asciimath.reserved = reserved
+asciimath.convert = converted
diff --git a/Master/texmf-dist/tex/context/base/x-asciimath.mkiv b/Master/texmf-dist/tex/context/base/x-asciimath.mkiv
new file mode 100644
index 00000000000..c9252408d83
--- /dev/null
+++ b/Master/texmf-dist/tex/context/base/x-asciimath.mkiv
@@ -0,0 +1,96 @@
+%D \module
+%D [ file=m-asciimath,
+%D version=2006.04.24, % 1999.11.06,
+%D title=\CONTEXT\ Modules,
+%D subtitle=AsciiMath,
+%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 Lua code.
+
+\ctxloadluafile{x-asciimath}{}
+
+%D The following code is not officially supported and is only meant
+%D for the Math4All project.
+%D
+%D The following code kind of maps ascii math
+%D http://www1.chapman.edu/~jipsen/mathml/asciimath.html onto \TEX. The
+%D code was written for the math4all project but in retrospect we
+%D could have used just tex code as the web version can handle that
+%D as well. Anyhow, as we use \MATHML\ as basis it makes sense to add
+%D this to the repertoire as annotation variant, so now we have
+%D content \MATHML\ (prefered), presentation \MATHML\ (often messy),
+%D \OPENMATH\ (what was which we started with in this project)
+%D calcmath (handy for students who are accustomed to calculators),
+%D asciimath (to make Frits's live easier) and of course \TEX. Of
+%D course all are used mixed.
+%D
+%D We don't support all quirks of asciimath as I am not in the mood to
+%D write a complex parser while a bit of sane coding can work as well.
+%D
+%D \startitemize
+%D \item We support only the syntactically clear variants and as long
+%D as lpeg does not support left recursion this is as far as we
+%D want to go.
+%D \item The parser is rather insensitive for spaces but yet the advice is
+%D to avoid weird coding like \type {d/dxf(x)} but use \type {d/dx
+%D f(x)} instead. After all we're not in a compact coding cq.\
+%D parser challenge.
+%D \item We also don't support the somewhat confusing \type {sqrt sqrt 2}
+%D nor \type {root3x} (although the second one kind of works). A bit
+%D of defensive coding does not hurt.
+%D \item We can process \type {a/b/c/d} but it's not compatible with the
+%D default behaviour of asciimath. Use grouping instead. Yes, we do
+%D support the somewhat nonstandard grouping token mix.
+%D \item You should use explicit \type {text(..)} directives as one can
+%D never be sure what is a reserved word and not.
+%D \stopitemize
+%D
+%D Actually, as the only parsing sensitive elements of \TEX\ are
+%D fractions (\type {\over} and friends, a restricted use of \TEX\
+%D coding is probably as comprehensive and parseble.
+%D
+%D The webpage with examples served as starting point so anything beyond
+%D what can be found there isn't supported.
+
+\unprotect
+
+\writestatus{asciimath}{beware, this is an experimental (m4all only) module}
+
+\unexpanded\def\asciimath#1{\ctxlua{asciimath.convert(\!!bs\detokenize{#1}\!!es,true)}}
+
+\protect
+
+\doifnotmode{demo}{\endinput}
+
+\enabletrackers[asciimath.mapping]
+
+\starttext
+
+\startlines
+\asciimath{x^2+y_1+z_12^34}
+\asciimath{sin^-1(x)}
+\asciimath{d/dx f(x)=lim_(h->0) (f(x+h)-f(x))/h}
+\asciimath{f(x)=sum_(n=0)^oo(f^((n))(a))/(n!)(x-a)^n}
+\asciimath{int_0^1 f(x)dx}
+\asciimath{int^1_0 f(x)dx}
+\asciimath{a//b}
+\asciimath{(a/b)/(d/c)}
+\asciimath{((a*b))/(d/c)}
+\asciimath{[[a,b],[c,d]]((n),(k))}
+\asciimath{1/x={(1,text{if } x!=0),(text{undefined},if x=0):}}
+\asciimath{{ (1,2), (x,(x + text(x))) }}
+\asciimath{{(1,2),(x,(x+text(x))),(x,text(x))}}
+\asciimath{{(1,2),(x,(x+text(x))),(x,x text(x))}}
+\asciimath{{(1,2/2),(x,(x+x^22+sqrt(xx))),(x,x text(xyz))}}
+\asciimath{{(1,2/2),(x,(x+x^22+sqrt(xx))),(x,text(xyz)+1+text(hans))}}
+\asciimath{<<a,b>> text{and} {:(x,y),(u,v):}}
+\asciimath{(a,b] = {x text(in) RR | a < x <= b}}
+\stoplines
+
+\stoptext
diff --git a/Master/texmf-dist/tex/context/base/x-calcmath.lua b/Master/texmf-dist/tex/context/base/x-calcmath.lua
index fcb6b7470a6..e4d5da139f9 100644
--- a/Master/texmf-dist/tex/context/base/x-calcmath.lua
+++ b/Master/texmf-dist/tex/context/base/x-calcmath.lua
@@ -6,7 +6,8 @@ if not modules then modules = { } end modules ['x-calcmath'] = {
license = "see context related readme files"
}
-local format, lower, upper, gsub = string.format, string.lower, string.upper, string.gsub
+local format, lower, upper, gsub, sub = string.format, string.lower, string.upper, string.gsub, string.sub
+local lpegmatch = lpeg.match
tex = tex or { }
@@ -71,8 +72,8 @@ local symbols = {
}
local function nsub(str,tag,pre,post)
- return (str:gsub(tag .. "(%b())", function(body)
- return pre .. nsub(body:sub(2,-2),tag,pre,post) .. post
+ return (gsub(str,tag .. "(%b())", function(body)
+ return pre .. nsub(sub(body,2,-2),tag,pre,post) .. post
end))
end
@@ -80,87 +81,87 @@ function calcmath.totex(str,mode)
if not frozen then freeze() end
local n = 0
-- crap
- str = str:gsub("%s+" , ' ')
+ str = gsub(str,"%s+",' ')
-- xml
- str = str:gsub("&(.-);", entities)
+ str = gsub(str,"&(.-);",entities)
-- ...E...
- str = str:gsub("([%-%+]?[%d%.%+%-]+)E([%-%+]?[%d%.]+)", "{\\SCINOT{%1}{%2}}")
+ str = gsub(str,"([%-%+]?[%d%.%+%-]+)E([%-%+]?[%d%.]+)", "{\\SCINOT{%1}{%2}}")
-- ^-..
- str = str:gsub( "%^([%-%+]*%d+)", "^{%1}")
+ str = gsub(str,"%^([%-%+]*%d+)", "^{%1}")
-- ^(...)
- str = nsub(str, "%^", "^{", "}")
+ str = nsub(str,"%^", "^{", "}")
-- 1/x^2
repeat
- str, n = str:gsub("([%d%w%.]+)/([%d%w%.]+%^{[%d%w%.]+})", "\\frac{%1}{%2}")
+ str, n = gsub(str,"([%d%w%.]+)/([%d%w%.]+%^{[%d%w%.]+})", "\\frac{%1}{%2}")
until n == 0
-- todo: autoparenthesis
-- int(a,b,c)
for k, v in next, list_2_1 do
- repeat str, n = str:gsub(k,v) until n == 0
+ repeat str, n = gsub(str,k,v) until n == 0
end
-- int(a,b)
for k, v in next, list_2_2 do
- repeat str, n = str:gsub(k, v) until n == 0
+ repeat str, n = gsub(str,k,v) until n == 0
end
-- int(a)
for k, v in next, list_2_3 do
- repeat str, n = str:gsub(k, v) until n == 0
+ repeat str, n = gsub(str,k,v) until n == 0
end
-- sin(x) => {\\sin(x)}
for k, v in next, list_1_1 do
- repeat str, n = str:gsub(k, v) until n == 0
+ repeat str, n = gsub(str,k,v) until n == 0
end
-- mean
str = nsub(str, "mean", "\\OVERLINE{", "}")
-- (1+x)/(1+x) => \\FRAC{1+x}{1+x}
repeat
- str, n = str:gsub("(%b())/(%b())", function(a,b)
- return "\\FRAC{" .. a:sub(2,-2) .. "}{" .. b:sub(2,-2) .. "}"
+ str, n = gsub(str,"(%b())/(%b())", function(a,b)
+ return "\\FRAC{" .. sub(a,2,-2) .. "}{" .. sub(b,2,-2) .. "}"
end )
until n == 0
-- (1+x)/x => \\FRAC{1+x}{x}
repeat
- str, n = str:gsub("(%b())/([%+%-]?[%.%d%w]+)", function(a,b)
- return "\\FRAC{" .. a:sub(2,-2) .. "}{" .. b .. "}"
+ str, n = gsub(str,"(%b())/([%+%-]?[%.%d%w]+)", function(a,b)
+ return "\\FRAC{" .. sub(a,2,-2) .. "}{" .. b .. "}"
end )
until n == 0
-- 1/(1+x) => \\FRAC{1}{1+x}
repeat
- str, n = str:gsub("([%.%d%w]+)/(%b())", function(a,b)
- return "\\FRAC{" .. a .. "}{" .. b:sub(2,-2) .. "}"
+ str, n = gsub(str,"([%.%d%w]+)/(%b())", function(a,b)
+ return "\\FRAC{" .. a .. "}{" .. sub(b,2,-2) .. "}"
end )
until n == 0
-- 1/x => \\FRAC{1}{x}
repeat
- str, n = str:gsub("([%.%d%w]+)/([%+%-]?[%.%d%w]+)", "\\FRAC{%1}{%2}")
+ str, n = gsub(str,"([%.%d%w]+)/([%+%-]?[%.%d%w]+)", "\\FRAC{%1}{%2}")
until n == 0
-- times
- str = str:gsub("%*", " ")
+ str = gsub(str,"%*", " ")
-- symbols -- we can use a table substitution here
- str = str:gsub("([<>=][<>=]*)", symbols)
+ str = gsub(str,"([<>=][<>=]*)", symbols)
-- functions
- str = nsub(str, "sqrt", "\\SQRT{", "}")
- str = nsub(str, "exp", "e^{", "}")
- str = nsub(str, "abs", "\\left|", "\\right|")
+ str = nsub(str,"sqrt", "\\SQRT{", "}")
+ str = nsub(str,"exp", "e^{", "}")
+ str = nsub(str,"abs", "\\left|", "\\right|")
-- d/D
- str = nsub(str, "D", "{\\FRAC{\\MBOX{d}}{\\MBOX{d}x}{(", ")}}")
- str = str:gsub("D([xy])", "\\FRAC{{\\RM d}%1}{{\\RM d}x}")
+ str = nsub(str,"D", "{\\FRAC{\\MBOX{d}}{\\MBOX{d}x}{(", ")}}")
+ str = gsub(str,"D([xy])", "\\FRAC{{\\RM d}%1}{{\\RM d}x}")
-- f/g
for k,v in next, list_3 do -- todo : prepare k,v
- str = nsub(str, "D"..v,"{\\RM "..v.."}^{\\PRIME}(",")")
- str = nsub(str, v,"{\\RM "..v.."}(",")")
+ str = nsub(str,"D"..v,"{\\RM "..v.."}^{\\PRIME}(",")")
+ str = nsub(str,v,"{\\RM "..v.."}(",")")
end
-- more symbols
for k,v in next, list_4_1 do
- str = str:gsub(k, v)
+ str = gsub(str,k,v)
end
-- parenthesis (optional)
if mode == 2 then
- str = str:gsub("%(", "\\left\(")
- str = str:gsub("%)", "\\right\)")
+ str = gsub(str,"%(", "\\left\(")
+ str = gsub(str,"%)", "\\right\)")
end
-- csnames
- str = str:gsub("(\\[A-Z]+)", lower)
+ str = gsub(str,"(\\[A-Z]+)", lower)
-- trace
--~ print(str)
-- report
@@ -191,19 +192,20 @@ if false then
-- Df Dg {\rm f}^{\prime}
-- f() g() {\rm f}()
+
-- valid utf8
local S, P, R, C, V, Cc, Ct = lpeg.S, lpeg.P, lpeg.R, lpeg.C, lpeg.V, lpeg.Cc, lpeg.Ct
local space = S(" \n\r\t")^0
- local number_x = P("-")^-1 * R("09")^1
- local real_x = P("-")^-1 * R("09")^1 * S(".")^1 * R("09")^1
- local number = Cc("number") * C(number_x) * space
- local real = Cc("real") * C(real_x) * space
- local float = Cc("float") * C(real_x) * lpeg.P("E") * lpeg.C(number_x) * space
- local identifier = Cc("identifier") * C(R("az","AZ")^1) * space
- local compareop = P("<") + P("=") + P(">") + P(">=") + P("<=") + P("&gt;") + P("&lt;")
- local factorop = Cc("factor") * C(S("+-^,") + compareop ) * space
+ local integer = P("-")^-1 * R("09")^1
+ local realpart = P("-")^-1 * R("09")^1 * S(".")^1 * R("09")^1
+ local number = Cc("number") * C(integer) * space
+ local real = Cc("real") * C(realpart) * space
+ local float = Cc("float") * C(realpart) * lpeg.P("E") * lpeg.C(integer) * space
+ local identifier = Cc("identifier") * C(R("az","AZ")) * space
+ local compareop = Cc("compare") * C(P("<") + P("=") + P(">") + P(">=") + P("<=") + P("&gt;") + P("&lt;")) * space
+ local factorop = Cc("factor") * C(S("+-^_,")) * space
local termop = Cc("term") * C(S("*/")) * space
local constant = Cc("constant") * C(P("pi") + lpeg.P("inf")) * space
local functionop = Cc("function") * C(R("az")^1) * space
@@ -212,123 +214,150 @@ if false then
local grammar = P {
"expression",
- expression = Ct(V("factor" ) * (factorop * V("factor" ))^0),
- factor = Ct(V("term" ) * (termop * V("term" ))^0),
+ expression = Ct(V("factor") * ((factorop+compareop) * V("factor"))^0),
+ factor = Ct(V("term") * (termop * V("term"))^0),
term = Ct(
float + real + number +
(open * V("expression") * close) +
- (functionop * open * V("expression") * close) +
+ (functionop * open * (V("expression") * (P(",") * V("expression"))^0) * close) +
+ (functionop * V("term")) +
constant + identifier
),
}
+
local parser = space * grammar * -1
+ local texprint = function(...) texio.write(table.concat{ ... }) end
+
+ local function has_factor(t)
+ for i=1,#t do
+ if t[i] == "factor" then
+ return true
+ end
+ end
+ end
+
function totex(t)
if t then
- local one, two, three = t[1], t[2], t[3]
- if one == "number" then
- return two
- elseif one == "real" then
- return two
- elseif one == "float" then
- return format("\\scinot{%s}{%s}", two, three)
- elseif one == "identifier" then
- return format(" %s ", two)
- elseif one == "constant" then
- return format("\\%s ", two)
- elseif one == "function" then
- if two == "sqrt" then
- return format("\\sqrt{%s}", totex(three))
- elseif two == "exp" then
- return format(" e^{%s}", totex(three))
- elseif two == "abs" then
- return format("\\left|%s\\right|", totex(three))
- elseif two == "mean" then
- return format("\\overline{%s}", totex(three))
- elseif two == "int" or two == "prod" or two == "sum" then --brrr, we need to parse better for ,,
- local tt = three
- if #tt == 1 then
- return format("\\%s{%s}", two ,totex(tt[1]))
- elseif #tt == 4 then
- return format("\\%s^{%s}{%s}", two ,totex(tt[1]), totex(tt[4]))
- elseif #tt == 7 then
- return format("\\%s^{%s}_{%s}{%s}", two ,totex(tt[1]), totex(tt[4]), totex(tt[7]))
- end
- elseif #two == 1 then
- return format("%s(%s)", two, totex(three))
- else
- return format("\\%s(%s)", two, totex(three))
- end
- elseif one == "factor" then
- if two == '^' then
- return format("^{%s}%s",totex(three), (#t>3 and totex({unpack(t,4,#t)})) or "")
- else
- if two == ">=" then
- two = "\\ge "
- elseif two == "<=" then
- two = "\\le "
- elseif two == "&gt;" then
- two = "> "
- elseif two == "&lt;" then
- two = "< "
- end
- return format("%s%s%s", two, totex(three), (#t>3 and totex({unpack(t,4,#t)})) or "")
- end
- elseif one == "term" then
- if two == '/' then
- if #t > 4 then
- return format("\\frac{%s}{%s}", totex(three), totex({unpack(t,4,#t)}))
+ local one = t[1]
+ if type(one) == "string" then
+ local two, three = t[2], t[3]
+ if one == "number" then
+ texprint(two)
+ elseif one == "real" then
+ texprint(two)
+ elseif one == "float" then
+ texprint("\\scinot{",two,"}{",three,"}")
+ elseif one == "identifier" then
+ texprint(two)
+ elseif one == "constant" then
+ texprint("\\"..two)
+ elseif one == "function" then
+ if two == "sqrt" then
+ texprint("\\sqrt{")
+ totex(three)
+ texprint("}")
+ elseif two == "exp" then
+ texprint(" e^{")
+ totex(three)
+ texprint("}")
+ elseif two == "abs" then
+ texprint("\\left|")
+ totex(three)
+ texprint("\\right|")
+ elseif two == "mean" then
+ texprint("\\overline{")
+ totex(three)
+ texprint("}")
+ elseif two == "int" or two == "prod" or two == "sum" then
+ local four, five = t[4], t[5]
+ if five then
+ texprint("\\"..two.."^{")
+ totex(three)
+ texprint("}_{")
+ totex(four)
+ texprint("}")
+ totex(five)
+ elseif four then
+ texprint("\\"..two.."^{")
+ totex(three)
+ texprint("}")
+ totex(four)
+ elseif three then
+ texprint("\\"..two.." ") -- " " not needed
+ totex(three)
+ else
+ texprint("\\"..two)
+ end
else
- return format("\\frac{%s}{%s}", totex(three), totex(t[4]))
+ texprint("\\"..two.."(")
+ totex(three)
+ texprint(")")
end
- elseif two == '*' then
- local times = "\\times "
- return format("%s%s%s", times, totex(three), (#t>3 and totex({unpack(t,4,#t)})) or "")
- else
- return format("%s%s%s", two, totex(three), (#t>3 and totex({unpack(t,4,#t)})) or "")
end
- elseif two == "factor" then
- if three == '^' then
- return format("%s^{%s}", totex(one), totex(t[4]))
- else
- if two == ">=" then
- two = "\\ge "
- elseif two == "<=" then
- two = "\\le "
- elseif two == "&gt;" then
- two = "> "
- elseif two == "&lt;" then
- two = "< "
+ else
+ local nt = #t
+ local hasfactor = has_factor(t)
+ if hasfactor then
+ texprint("\\left(")
+ end
+ totex(one)
+ for i=2,nt,3 do
+ local what, how, rest = t[i], t[i+1], t[i+2]
+ if what == "factor" then
+ if how == '^' or how == "_" then
+ texprint(how)
+ texprint("{")
+ totex(rest)
+ texprint("}")
+ else
+ texprint(how)
+ totex(rest)
+ end
+ elseif what == "term" then
+ if how == '/' then
+ texprint("\\frac{")
+ totex(rest)
+ texprint("}{")
+ totex(t[i+3] or "")
+ texprint("}")
+ elseif how == '*' then
+ texprint("\\times")
+ totex(rest)
+ else
+ texprint(how)
+ totex(three)
+ end
+ elseif what == "compare" then
+ if two == ">=" then
+ texprint("\\ge")
+ elseif two == "<=" then
+ texprint("\\le")
+ elseif two == "&gt;" then
+ texprint(">")
+ elseif two == "&lt;" then
+ texprint("<")
+ end
+ totex(three)
end
- return format("%s%s", totex(one), (#t>1 and totex({unpack(t,2,#t)})) or "")
end
- elseif two == "term" then
- if three == '/' then
- return format("\\frac{%s}{%s}", totex(one), (#t>3 and totex({unpack(t,4,#t)})) or "")
- else
- return format("%s%s", totex(one), (#t>1 and totex({unpack(t,2,#t)})) or "")
+ if hasfactor then
+ texprint("\\right)")
end
- else
- return totex(one)
end
end
- return ""
end
calcmath = { }
function calcmath.parse(str)
- return parser:match(str)
+ return lpegmatch(parser,str)
end
function calcmath.tex(str)
- str = totex(parser:match(str))
- print(str)
+ str = totex(lpegmatch(parser,str))
return (str == "" and "[error]") or str
end
end
-
---~ compareop = Cc("compare") * C(P("<") + P("=") + P(">") + P(">=") + P("<=") + P("&gt;")/">" + P("&lt;")/"<") * space
---~ comparison = Ct(V("expression") * (compareop * V("expression"))^0),
diff --git a/Master/texmf-dist/tex/context/base/x-calcmath.mkiv b/Master/texmf-dist/tex/context/base/x-calcmath.mkiv
index 29bc1af9a32..c726843fa4f 100644
--- a/Master/texmf-dist/tex/context/base/x-calcmath.mkiv
+++ b/Master/texmf-dist/tex/context/base/x-calcmath.mkiv
@@ -1,5 +1,3 @@
-% engine=luatex
-
%D \module
%D [ file=m-calcmath,
%D version=2006.04.24, % 1999.11.06,
diff --git a/Master/texmf-dist/tex/context/base/x-cals.lua b/Master/texmf-dist/tex/context/base/x-cals.lua
new file mode 100644
index 00000000000..5d15b4e302d
--- /dev/null
+++ b/Master/texmf-dist/tex/context/base/x-cals.lua
@@ -0,0 +1,209 @@
+if not modules then modules = { } end modules ['x-cals'] = {
+ version = 1.001,
+ comment = "companion to x-cals.mkiv",
+ author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
+ copyright = "PRAGMA ADE / ConTeXt Development Team",
+ license = "see context related readme files"
+}
+
+local format, lower = string.format, string.lower
+local texsprint, ctxcatcodes = tex.sprint, tex.ctxcatcodes
+local xmlsprint, xmlcprint, xmlcollected = xml.sprint, xml.cprint, xml.collected
+local n_todimen, s_todimen = number.todimen, string.todimen
+
+-- there is room for speedups as well as cleanup (using context functions)
+
+lxml.cals = lxml.cals or { }
+
+local cals = lxml.cals
+
+cals.ignore_widths = false
+cals.shrink_widths = false
+cals.stretch_widths = false
+
+-- the following flags only apply to columns that have a specified width
+--
+-- proportional : shrink or stretch proportionally to the width
+-- equal : shrink or stretch equaly distributed
+-- n < 1 : shrink or stretch proportionally to the width but multiplied by n
+--
+-- more clever things, e.g. the same but applied to unspecified widths
+-- has to happen at the core-ntb level (todo)
+
+local halignments = {
+ left = "flushleft",
+ right = "flushright",
+ center = "middle",
+ centre = "middle",
+ justify = "normal",
+}
+
+local valignments = {
+ top = "high",
+ bottom = "low",
+ middle = "lohi",
+}
+
+local function adapt(widths,b,w,delta,sum,n,what)
+ if b == "equal" then
+ delta = delta/n
+ for k, v in next, w do
+ widths[k] = n_todimen(v - delta)
+ end
+ elseif b == "proportional" then
+ delta = delta/sum
+ for k, v in next, w do
+ widths[k] = n_todimen(v - v*delta)
+ end
+ elseif type(b) == "number" and b < 1 then
+ delta = b*delta/sum
+ for k, v in next, w do
+ widths[k] = n_todimen(v - v*delta)
+ end
+ end
+end
+
+local function getspecs(root, pattern, names, widths)
+ -- here, but actually we need this in core-ntb.tex
+ -- but ideally we need an mkiv enhanced core-ntb.tex
+ local ignore_widths = cals.ignore_widths
+ local shrink_widths = cals.shrink_widths
+ local stretch_widths = cals.stretch_widths
+ for e in xmlcollected(root,pattern) do
+ local at = e.at
+ local column = at.colnum
+ if column then
+ if not ignore_widths then
+ local width = at.colwidth
+ if width then
+ widths[tonumber(column)] = lower(width)
+ end
+ end
+ local name = at.colname
+ if name then
+ names[name] = tonumber(column)
+ end
+ end
+ end
+ if ignore_width then
+ -- forget about it
+ elseif shrink_widths or stretch_widths then
+ local sum, n, w = 0, 0, { }
+ for _, v in next, widths do
+ n = n + 1
+ v = (type(v) == "string" and s_todimen(v)) or v
+ if v then
+ w[n] = v
+ sum = sum + v
+ end
+ end
+ local hsize = tex.hsize
+ if type(hsize) == "string" then
+ hsize = s_todimen(hsize)
+ end
+ local delta = sum - hsize
+ if shrink_widths and delta > 0 then
+ adapt(widths,shrink_widths,w,delta,sum,n,"shrink")
+ elseif stretch_widths and delta < 0 then
+ adapt(widths,stretch_widths,w,delta,sum,n,"stretch")
+ end
+ end
+end
+
+local function getspans(root, pattern, names, spans)
+ for e in xmlcollected(root,pattern) do
+ local at = e.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 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) -- move this one outside
+ texsprint(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(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(ctxcatcodes,"\\bTD{")
+ cals.table(dk)
+ texsprint(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(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"))
+ -- texsprint(ctxcatcodes,"\\bTD[nx=",s or 1,"ny=",(m or 0)+1,"align={",halign or "flushleft",",",valign or "high","},width=",width or "fit","]")
+ else
+ texsprint(ctxcatcodes,"\\bTD[align={flushleft,high},width=fit]") -- else problems with vertical material
+ end
+ xmlcprint(dk)
+ texsprint(ctxcatcodes,"\\eTD")
+ col = col + (s or 1)
+ end
+ end
+ texsprint(ctxcatcodes,"\\eTR")
+ end
+ texsprint(ctxcatcodes,after)
+ end
+
+ for tgroup in lxml.collected(root,tgroupspec) do
+ texsprint(ctxcatcodes, "\\directsetup{cals:table:before}")
+ lxml.directives.before(root,"cdx") -- "cals:table"
+ texsprint(ctxcatcodes, "\\bgroup")
+ lxml.directives.setup(root,"cdx") -- "cals:table"
+ texsprint(ctxcatcodes, "\\bTABLE")
+ tablepart(tgroup, hcolspec, hrowspec, "\\bTABLEhead", "\\eTABLEhead")
+ tablepart(tgroup, bcolspec, browspec, "\\bTABLEbody", "\\eTABLEbody")
+ tablepart(tgroup, fcolspec, frowspec, "\\bTABLEfoot", "\\eTABLEfoot")
+ texsprint(ctxcatcodes, "\\eTABLE")
+ texsprint(ctxcatcodes, "\\egroup")
+ lxml.directives.after(root,"cdx") -- "cals:table"
+ texsprint(ctxcatcodes, "\\directsetup{cals:table:after}")
+ end
+
+end
diff --git a/Master/texmf-dist/tex/context/base/x-cals.mkiv b/Master/texmf-dist/tex/context/base/x-cals.mkiv
index 3d264404584..32d5767c1c7 100644
--- a/Master/texmf-dist/tex/context/base/x-cals.mkiv
+++ b/Master/texmf-dist/tex/context/base/x-cals.mkiv
@@ -13,210 +13,9 @@
\writestatus{loading}{ConTeXt XML Macros / Cals Tables}
-\startluacode
-do
+\startmodule [cals]
- lxml.cals = { }
- lxml.cals.ignore_widths = false
-
- -- the following flags only apply to columns that have a specified width
- --
- -- proportional : shrink or stretch proportionally to the width
- -- equal : shrink or stretch equaly distributed
- -- n < 1 : shrink or stretch proportionally to the width but multiplied by n
- --
- -- more clever things, e.g. the same but applied to unspecified widths
- -- has to happen at the core-ntb level (todo)
-
- lxml.cals.shrink_widths = false
- lxml.cals.stretch_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)
- -- here, but actually we need this in core-ntb.tex
- -- but ideally we need an mkiv enhanced core-ntb.tex
- local ignore_widths = lxml.cals.ignore_widths
- local shrink_widths = lxml.cals.shrink_widths
- local stretch_widths = lxml.cals.stretch_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
- local function adapt(b,w,delta,sum,n,what)
- if b == "equal" then
- delta = delta/n
- for k, v in pairs(w) do
- widths[k] = number.todimen(v - delta)
- end
- elseif b == "proportional" then
- delta = delta/sum
- for k, v in pairs(w) do
- widths[k] = number.todimen(v - v*delta)
- end
- elseif type(b) == "number" and b < 1 then
- delta = b*delta/sum
- for k, v in pairs(w) do
- widths[k] = number.todimen(v - v*delta)
- end
- end
- end
- if ignore_width then
- -- forget about it
- elseif shrink_widths or stretch_widths then
- local sum, n, w = 0, 0, { }
- for _, v in pairs(widths) do
- n = n + 1
- v = (type(v) == "string" and v:todimen()) or v
- if v then
- w[n] = v
- sum = sum + v
- end
- end
- local hsize = tex.hsize
- if type(hsize) == "string" then
- hsize = hsize:todimen()
- end
- local delta = sum - hsize
- if shrink_widths and delta > 0 then
- adapt(shrink_widths,w,delta,sum,n,"shrink")
- elseif stretch_widths and delta < 0 then
- adapt(stretch_widths,w,delta,sum,n,"stretch")
- 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]
- texsprint(tex.ctxcatcodes, "\\directsetup{cals:table:before}")
- 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"
- texsprint(tex.ctxcatcodes, "\\directsetup{cals:table:after}")
- end
- end
-
-end
-\stopluacode
+\ctxloadluafile{x-cals}{}
% \startxmlsetups xml:cals:process
% \xmlsetsetup {\xmldocument} {cals:table} {*}
@@ -234,4 +33,4 @@ end
\xmlregisterns{cals}{cals}
-\endinput
+\stopmodule
diff --git a/Master/texmf-dist/tex/context/base/x-chemml.mkiv b/Master/texmf-dist/tex/context/base/x-chemml.mkiv
index e0da353fc70..f9ed3296041 100644
--- a/Master/texmf-dist/tex/context/base/x-chemml.mkiv
+++ b/Master/texmf-dist/tex/context/base/x-chemml.mkiv
@@ -35,7 +35,7 @@
\xmlregisterns{cml}{chemml}
-\def\setupCMLappearance[#1]{\dodoubleargument\getparameters[@@CML#1]}
+\unexpanded\def\setupCMLappearance[#1]{\dodoubleargument\getparameters[@@CML#1]}
\setupCMLappearance [ion] [\c!alternative=\v!a]
diff --git a/Master/texmf-dist/tex/context/base/x-contml.tex b/Master/texmf-dist/tex/context/base/x-contml.mkii
index ba6762e77d6..a582d8eb90f 100644
--- a/Master/texmf-dist/tex/context/base/x-contml.tex
+++ b/Master/texmf-dist/tex/context/base/x-contml.mkii
@@ -1,5 +1,3 @@
-% interface=en
-
%M \usemodule [contml] \autoXMLnamespace [context]
%M \definefilesynonym [context] [x-contml.xsd]
diff --git a/Master/texmf-dist/tex/context/base/x-corres.tex b/Master/texmf-dist/tex/context/base/x-corres.mkii
index 09c7263dc17..09c7263dc17 100644
--- a/Master/texmf-dist/tex/context/base/x-corres.tex
+++ b/Master/texmf-dist/tex/context/base/x-corres.mkii
diff --git a/Master/texmf-dist/tex/context/base/x-ct.lua b/Master/texmf-dist/tex/context/base/x-ct.lua
new file mode 100644
index 00000000000..222a127cec6
--- /dev/null
+++ b/Master/texmf-dist/tex/context/base/x-ct.lua
@@ -0,0 +1,182 @@
+if not modules then modules = { } end modules ['x-ct'] = {
+ version = 1.001,
+ comment = "companion to x-ct.mkiv",
+ author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
+ copyright = "PRAGMA ADE / ConTeXt Development Team",
+ license = "see context related readme files"
+}
+
+local xmlsprint, xmlfilter, xmlcollected = xml.sprint, xml.filter, xml.collected
+local texsprint, ctxcatcodes = tex.sprint, tex.ctxcatcodes
+local format, concat, rep, find = string.format, table.concat, string.rep, string.find
+
+lxml.context = { }
+
+local halignments = {
+ left = 'l',
+ flushleft = 'l',
+ right = 'r',
+ flushright = 'r',
+ center = 'c',
+ middle = 'c',
+ centre = 'c',
+ justify = '',
+}
+
+local function roottemplate(root)
+ local rt = root.at.template
+ if rt then
+ if not find(rt,"|") then
+ rt = gsub(rt,",","|")
+ end
+ if not find(rt,"^|") then rt = "|" .. rt end
+ if not find(rt,"|$") then rt = rt .. "|" end
+ end
+ return rt
+end
+
+local function specifiedtemplate(root,templatespec)
+ local template = { }
+ for e in xmlcollected(root,templatespec) do
+ local at = e.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 "|" .. concat(template,"|") .. "|"
+ else
+ return nil
+ end
+end
+
+local function autotemplate(root,rowspec,cellspec)
+ local max = 0
+ for e in xmlcollected(root,rowspec) do
+ local n = xml.count(e,cellspec)
+ if n > max then max = n end
+ end
+ if max == 2 then
+ return "|l|p|"
+ elseif max > 0 then
+ return "|" .. 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
+
+ -- todo: head and foot
+
+--~ lxml.directives.before(root,'cdx')
+--~ texsprint(ctxcatcodes, "\\bgroup")
+--~ lxml.directives.setup(root,'cdx')
+--~ texsprint(ctxcatcodes, format("\\starttabulate[%s]",template))
+--~ for e in xmlcollected(root,bodyrowspec) do
+--~ texsprint(ctxcatcodes, "\\NC ")
+--~ for e in xmlcollected(e,cellspec) do
+--~ texsprint(xml.text(e)) -- use some xmlprint
+--~ texsprint(ctxcatcodes, "\\NC")
+--~ end
+--~ texsprint(ctxcatcodes, "\\NR")
+--~ end
+--~ texsprint(ctxcatcodes, "\\stoptabulate")
+--~ texsprint(ctxcatcodes, "\\egroup")
+--~ lxml.directives.after(root,'cdx')
+
+ local NC, NR = context.NC, context.NR
+
+ lxml.directives.before(root,'cdx')
+ context.bgroup()
+ lxml.directives.setup(root,'cdx')
+ context.starttabulate { template }
+ for e in xmlcollected(root,bodyrowspec) do
+ NC()
+ for e in xmlcollected(e,cellspec) do
+ texsprint(xml.text(e)) -- test: xmlcprint(e)
+ NC()
+ end
+ NR()
+ end
+ context.stoptabulate()
+ context.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 = format("%s*%s", nx or 1, ny or 1)
+
+ -- todo: alignments
+
+--~ lxml.directives.before(root,'cdx')
+--~ texsprint(ctxcatcodes, "\\bgroup")
+--~ lxml.directives.setup(root,'cdx')
+--~ texsprint(ctxcatcodes, "\\startcombination[",template,"]")
+--~ for e in xmlcollected(root,pairspec) do
+--~ texsprint(ctxcatcodes,"{")
+--~ xmlfilter(e,contentspec)
+--~ texsprint(ctxcatcodes,"}{")
+--~ xmlfilter(e,captionspec)
+--~ texsprint(ctxcatcodes,"}")
+--~ end
+--~ texsprint(ctxcatcodes, "\\stopcombination")
+--~ texsprint(ctxcatcodes, "\\egroup")
+--~ lxml.directives.after(root,'cdx')
+
+ lxml.directives.before(root,'cdx')
+ context.bgroup()
+ lxml.directives.setup(root,'cdx')
+ context.startcombination { template }
+ for e in xmlcollected(root,pairspec) do
+ texsprint(ctxcatcodes,"{")
+ xmlfilter(e,contentspec)
+ texsprint(ctxcatcodes,"}{")
+ xmlfilter(e,captionspec)
+ texsprint(ctxcatcodes,"}")
+ end
+ context.stopcombination()
+ context.egroup()
+ lxml.directives.after(root,'cdx')
+
+end
diff --git a/Master/texmf-dist/tex/context/base/x-ct.mkiv b/Master/texmf-dist/tex/context/base/x-ct.mkiv
index 17ea254083e..d282193a15b 100644
--- a/Master/texmf-dist/tex/context/base/x-ct.mkiv
+++ b/Master/texmf-dist/tex/context/base/x-ct.mkiv
@@ -13,151 +13,9 @@
\writestatus{loading}{ConTeXt XML Macros / Basics}
-\startluacode
-do
- lxml.context = { }
+\startmodule [ct]
- 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
+\ctxloadluafile{x-ct}{}
\startxmlsetups xml:context:process
\xmlsetfunction {\xmldocument} {context:tabulate} {lxml.context.tabulate}
@@ -168,35 +26,4 @@ end
\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
+\stopmodule
diff --git a/Master/texmf-dist/tex/context/base/x-dir-05.mkii b/Master/texmf-dist/tex/context/base/x-dir-05.mkii
new file mode 100644
index 00000000000..0d0edd832e8
--- /dev/null
+++ b/Master/texmf-dist/tex/context/base/x-dir-05.mkii
@@ -0,0 +1,51 @@
+%D \module
+%D [ file=x-dir-05,
+%D version=2003.05.10, % around that time -)
+%D title=\CONTEXT\ Directory Handling,
+%D subtitle=Access,
+%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.
+
+\setvariables
+ [filestate]
+ [name=,base=,type=,size=,permissions=,date=]
+
+\def\savefilestate
+ {\dodoubleargument\dosavefilestate}
+
+\def\dosavefilestate[#1][#2]%
+ {\startnointerference
+ \setxvariables
+ [#1]
+ [name=#2,base=,type=,size=,permissions=,date=]
+ \executesystemcommand{texmfstart xmltools.rb --dir --pattern=\getvariable{#1}{name} --output=xmldir.tmp}
+ \defineXMLprocess [files]
+ \defineXMLprocess [directory]
+ \defineXMLenvironment [file]
+ {\defineXMLsave [base]
+ \defineXMLsave [type]
+ \defineXMLsave [size]
+ \defineXMLsave [permissions]
+ \defineXMLsave [date]}
+ {\setxvariables
+ [#1]
+ [name=\XMLop{name},
+ base=\XMLflush{base},
+ type=\XMLflush{type},
+ size=\XMLflush{size},
+ permissions=\XMLflush{permissions},
+ date=\XMLflush{date}]}
+ \startXMLignore
+ \processXMLfile{xmldir.tmp}
+ \stopXMLignore
+ \stopnointerference}
+
+\def\getfilestate#1% old one
+ {\savefilestate[filestate][#1]}
+
+\endinput
diff --git a/Master/texmf-dist/tex/context/base/x-dir-05.mkiv b/Master/texmf-dist/tex/context/base/x-dir-05.mkiv
new file mode 100644
index 00000000000..c29c9ea2aba
--- /dev/null
+++ b/Master/texmf-dist/tex/context/base/x-dir-05.mkiv
@@ -0,0 +1,72 @@
+%D \module
+%D [ file=x-dir-05,
+%D version=2003.05.10, % around that time -)
+%D title=\CONTEXT\ Directory Handling,
+%D subtitle=Access,
+%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.
+
+\setvariables
+ [filestate]
+ [name=,
+ base=,
+ type=,
+ size=,
+ permissions=,
+ date=]
+
+% \savefilestate[zip-latest][context/latest/cont-#2.zip]%
+
+\startluacode
+ local filestates = { }
+ function commands.savefilestate(tag,name)
+ if not filestates[tag] then
+ local attr = lfs.attributes(name)
+ if attr then attr.name = name end
+ filestates[tag] = attr
+ end
+ end
+ function commands.getfilestatevariable(tag,name)
+ local fs = filestates[tag]
+ if fs then
+ local value
+ if name == "base" then
+ value = file.basename(fs.name)
+ elseif name == "type" then
+ value = file.extname(fs.name)
+ elseif name == "date" then
+ value = os.date("%Y-%m-%d %H:%M",fs.modification)
+ else
+ value = fs[name] or ""
+ end
+ tex.sprint(tex.vrbcatcodes,value)
+ end
+ end
+\stopluacode
+
+\def\getfilestatevariable#1#2%
+ {\ctxlua{commands.getfilestatevariable("#1","#2")}}
+
+\def\savefilestate
+ {\dodoubleargument\dosavefilestate}
+
+\def\dosavefilestate[#1][#2]%
+ {\ctxlua{commands.savefilestate("#1","#2")}%
+ \setxvariables
+ [#1]
+ [name={#2},
+ base=\getfilestatevariable{#1}{base},
+ type=\getfilestatevariable{#1}{type},
+ size=\getfilestatevariable{#1}{size},
+ date=\getfilestatevariable{#1}{date},
+ permissions=\getfilestatevariable{#1}{permissions}]}
+
+\def\getfilestate#1% old one
+ {\savefilestate[filestate][#1]}
+
+\endinput
diff --git a/Master/texmf-dist/tex/context/base/x-fe.tex b/Master/texmf-dist/tex/context/base/x-fe.mkii
index 8562b1d5296..8562b1d5296 100644
--- a/Master/texmf-dist/tex/context/base/x-fe.tex
+++ b/Master/texmf-dist/tex/context/base/x-fe.mkii
diff --git a/Master/texmf-dist/tex/context/base/x-fig-03.tex b/Master/texmf-dist/tex/context/base/x-fig-03.tex
index bf5ea226cff..1317528235e 100644
--- a/Master/texmf-dist/tex/context/base/x-fig-03.tex
+++ b/Master/texmf-dist/tex/context/base/x-fig-03.tex
@@ -11,8 +11,8 @@
%C therefore copyrighted by \PRAGMA. See mreadme.pdf for
%C details.
-\ifx \undefined \convertMPtoPDF \input supp-pdf.tex \fi
-\ifx \undefined \includefigurefile \else \expandafter \endinput \fi
+\ifx \undefined \convertMPtoPDF \input supp-pdf.mkii \fi
+\ifx \undefined \includefigurefile \else \expandafter \endinput \fi
\gdef\getfigurefile#1%
{\expandafter\ifx\csname x-fig-f-#1\endcsname\relax
@@ -37,8 +37,8 @@
{\doincludefigurefile{#1}}
\def\doincludefigurefile#1#2%
- {\edef\next{\noexpand\pdfimage
+ {\edef\next{\noexpand\pdfimage
#1 page \getfigurepage{#2} {\getfigurefile{#2}.pdf}}%
- \next}
+ \next}
-\endinput
+\endinput
diff --git a/Master/texmf-dist/tex/context/base/x-fo.tex b/Master/texmf-dist/tex/context/base/x-fo.mkii
index 395ec7eb364..b2b0b59f927 100644
--- a/Master/texmf-dist/tex/context/base/x-fo.tex
+++ b/Master/texmf-dist/tex/context/base/x-fo.mkii
@@ -1091,7 +1091,6 @@ leader-pattern-width=12pt,
\checkhexcolor[\XMLpar{fo:region-\currentcommalistitem}{border-top-color}{}]
\checkhexcolor[\XMLpar{fo:region-\currentcommalistitem}{border-left-color}{}]
\checkhexcolor[\XMLpar{fo:region-\currentcommalistitem}{border-right-color}{}]
-
\checkhexcolor[\XMLpar{fo:region-\currentcommalistitem}{background-color}{}]
\checkFOposition{fo:region-\currentcommalistitem}{background}
@@ -2379,6 +2378,10 @@ leader-pattern-width=12pt,
{\beginXMLelement}
{\directsetup{fo:inline:process}\endXMLelement}
+\defineXMLsingular
+ [fo:inline]
+ {}
+
% baseline-shift: baseline sub super % dimen inherit
\chardef\isolatedwordsmode=1
@@ -2387,10 +2390,10 @@ leader-pattern-width=12pt,
\def\shiftedword{\raise\wordshiftamount\hbox}
-\def\shiftedwords#1{\processisolatedwords{#1}\shiftedword}
-\def\normalwords #1{\processisolatedwords{#1}\hbox}
-\def\highwords #1{\processisolatedwords{#1}\high}
-\def\lowwords #1{\processisolatedwords{#1}\low}
+\long\def\shiftedwords#1{\processisolatedwords{#1}\shiftedword}
+\long\def\normalwords #1{\processisolatedwords{#1}\hbox}
+\long\def\highwords #1{\processisolatedwords{#1}\high}
+\long\def\lowwords #1{\processisolatedwords{#1}\low}
\mapXMLvalue {fo:baseline-shift} {baseline} {\normalwords}
\mapXMLvalue {fo:baseline-shift} {sub} {\lowwords}
@@ -2617,8 +2620,8 @@ leader-pattern-width=12pt,
alignment-baseline=,
baseline-shift=,
dominant-baseline=,
-% text-depth=,
-% text-altitude=,
+ % text-depth=,
+ % text-altitude=,
keep-with-next=,
keep-with-previous=,
letter-spacing=,
@@ -2636,16 +2639,13 @@ leader-pattern-width=12pt,
\startsetups fo:leader:process
-% \tracebackXMLattribute{leader-pattern-width}
-
- \strut \leaders
-
-% \edefXMLinh \FOlepatwd {leader-pattern-width}
+ %tracebackXMLattribute{leader-pattern-width}
+ \strut \leaders
+ %edefXMLinh \FOlepatwd {leader-pattern-width}
\hbox to \XMLinh{leader-pattern-width}
{\hss\XMLval{fo:leader-pattern}{\XMLinh{leader-pattern}}{\hfill}\hss}
-
- \hfill \strut
+ \hfill \strut
\stopsetups
@@ -2702,7 +2702,7 @@ leader-pattern-width=12pt,
\defineconversion[1][\numbers]
-\def\handleFOformat#1#2%
+\long\def\handleFOformat#1#2%
{\defconvertedargument\ascii{#2}%
\doifconversiondefinedelse\ascii{\convertnumber\ascii{#1}}{#2}}
@@ -3541,7 +3541,7 @@ text-indent=0pt, % yes
\unprotect
-\def\noFOchecks#1\od{}
+\long\def\noFOchecks#1\od{}
\def\FOassignskip#1#2#3%
{\edef\!!stringa{\XMLpar{#1}{#2}\empty}%
@@ -3747,8 +3747,6 @@ text-indent=0pt, % yes
% we can get crap like: 10pt/1.5 bold "Times Roman" ; i'm really puzzled why an
% otherwise rather verbose coding occasionally packs attributes; a design flaw
-\unprotect
-
\newtoks\FOfonttoks
\def\checkFOfontSS#1'{}
@@ -3835,8 +3833,6 @@ text-indent=0pt, % yes
\appendtoks \flushFOreferences \to \everypar
\appendtoks \flushFOreferences \to \neverypar % check !
-\protect
-
%D Graphics: static frames
\startMPinclusions
@@ -3997,7 +3993,7 @@ text-indent=0pt, % yes
\stopXMLcompiling
-\protect \endinput
+\endinput
% we can follow two approaches: set the attributes global, using
%
diff --git a/Master/texmf-dist/tex/context/base/x-foxet.mkii b/Master/texmf-dist/tex/context/base/x-foxet.mkii
new file mode 100644
index 00000000000..0f8e43af9af
--- /dev/null
+++ b/Master/texmf-dist/tex/context/base/x-foxet.mkii
@@ -0,0 +1,28 @@
+%D \module
+%D [ file=x-foxet,
+%D version=2004.03.12, % based on earlier experiments
+%D title=\FOXET,
+%D subtitle=Formatting Objects,
+%D author=Hans Hagen,
+%D date=\currentdate,
+%D copyright={PRAGMA ADE / 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 is just a shortcut for:
+
+% fo = basic formatting objects
+% fe = basic formatting extensions
+% fx = extra formatting objects
+% fu = user formatting objects
+% fs = setup
+
+\usemodule[fo,fe,fx,fu,fs,mathml]
+
+\usemodule[fp] % passivetex bonus
+
+% \autoXMLnamespace[mml,mm,mathml]
+
+\endinput
diff --git a/Master/texmf-dist/tex/context/base/x-foxet.mkiv b/Master/texmf-dist/tex/context/base/x-foxet.mkiv
new file mode 100644
index 00000000000..b27969721b8
--- /dev/null
+++ b/Master/texmf-dist/tex/context/base/x-foxet.mkiv
@@ -0,0 +1,29 @@
+%D \module
+%D [ file=x-foxet,
+%D version=2004.03.12, % based on earlier experiments
+%D title=\FOXET,
+%D subtitle=Formatting Objects,
+%D author=Hans Hagen,
+%D date=\currentdate,
+%D copyright={PRAGMA ADE / 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 Nota bene: I will reimplement formatting object in proper
+%D \MKIV\ code.
+
+\writestatus{foxet}{the mkiv variant is under construction}
+
+%D This module is just a shortcut for:
+
+% fo = basic formatting objects
+% fe = basic formatting extensions
+% fx = extra formatting objects
+% fu = user formatting objects
+% fs = setup
+
+% \usemodule[fo,fe,fx,fu,fs,mathml]
+
+\endinput
diff --git a/Master/texmf-dist/tex/context/base/x-foxet.tex b/Master/texmf-dist/tex/context/base/x-foxet.tex
deleted file mode 100644
index 78cc0efb760..00000000000
--- a/Master/texmf-dist/tex/context/base/x-foxet.tex
+++ /dev/null
@@ -1,15 +0,0 @@
-%D This is just a shortcut for:
-
-% fo = basic formatting objects
-% fe = basic formatting extensions
-% fx = extra formatting objects
-% fu = user formatting objects
-% fs = setup
-
-\usemodule[fo,fe,fx,fu,fs,mathml]
-
-\usemodule[fp] % passivetex bonus
-
-% \autoXMLnamespace[mml,mm,mathml]
-
-\endinput
diff --git a/Master/texmf-dist/tex/context/base/x-ldx.tex b/Master/texmf-dist/tex/context/base/x-ldx.tex
index 140413e7d74..398ca2345f0 100644
--- a/Master/texmf-dist/tex/context/base/x-ldx.tex
+++ b/Master/texmf-dist/tex/context/base/x-ldx.tex
@@ -2,7 +2,7 @@
\setupxml[method=mkiv,default=hidden]
-\usemodule[mathml]
+\usemodule[x][mathml]
\xmlregisterdocumentsetup{ldx}{xml:mml:define}
\xmlregisterdocumentsetup{ldx}{xml:ldx:define}
@@ -10,7 +10,8 @@
\xmlregisterns{ldx}{ldx}
\startxmlsetups xml:ldx:define
- \xmlgrab {\xmldocument} {ldx:*} {*}
+% \xmlgrab {\xmldocument} {ldx:*} {*}
+ \xmlsetsetup {#1} {ldx:*} {ldx:*}
\stopxmlsetups
% % %
@@ -29,12 +30,12 @@
\startxmlsetups ldx:variable
\xmlflush{#1}
- \expanded{\variable{\xmlflush{#1}}}
+% \expanded{\variable{\xmlflush{#1}}}
\stopxmlsetups
\startxmlsetups ldx:function
\dontleavehmode{\bf function}\space\xmlflush{#1}
- \expanded{\function{\xmlflush{#1}}}
+% \expanded{\function{\xmlflush{#1}}}
\stopxmlsetups
\startxmlsetups ldx:com
@@ -78,7 +79,7 @@
\startxmlsetups ldx:code
\startpacked
- \xmlflush{#1}
+ \xmlflush{#1}\relax
\stoppacked
\stopxmlsetups
@@ -94,8 +95,8 @@
} {
\dontleavehmode \hbox to \hsize \bgroup
\strut
- \hskip.25\dimexpr\xmlattdef{#1}{n}{0}em\relax
- \xmldoif {\xmlatt{#1}{comment}} {yes} {\tt}
+ \hskip.25\dimexpr\xmlattdef{#1}{n}{0}em\relax\relax % extra relax needed !
+ \doif {\xmlatt{#1}{comment}} {yes} {\tt}
\xmlflush{#1}
\hss
\egroup
@@ -133,8 +134,6 @@
\def\xmldocument{ldx}
-% \processXMLfileMKIV[ldx]
-
\usemodule[abr-02]
% key -> kw
@@ -187,5 +186,6 @@
backspace=2cm,
topspace=2cm]
-\endinput
+% \usemodule[inf-02]
+\endinput
diff --git a/Master/texmf-dist/tex/context/base/x-mathml.lua b/Master/texmf-dist/tex/context/base/x-mathml.lua
index aa2e4e716f3..2ee3cd09093 100644
--- a/Master/texmf-dist/tex/context/base/x-mathml.lua
+++ b/Master/texmf-dist/tex/context/base/x-mathml.lua
@@ -1,26 +1,23 @@
if not modules then modules = { } end modules ['x-mathml'] = {
version = 1.001,
- comment = "companion to x-mathml.tex",
+ comment = "companion to x-mathml.mkiv",
author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
copyright = "PRAGMA ADE / ConTeXt Development Team",
license = "see context related readme files"
}
+local type, next = type, next
local utf = unicode.utf8
+local texsprint, ctxcatcodes = tex.sprint, tex.ctxcatcodes
+local format, lower, find, gsub = string.format, string.lower, string.find, string.gsub
+local utfchar, utffind, utfgmatch, utfgsub = utf.char, utf.find, utf.gmatch, utf.gsub
+local xmlsprint, xmlcprint, xmltext, xmlcontent = xml.sprint, xml.cprint, xml.text, xml.content
+local lxmltext, get_id = lxml.text, lxml.get_id
+local utfcharacters, utfvalues = string.utfcharacters, string.utfvalues
+local lpegmatch = lpeg.match
-lxml = lxml or { }
lxml.mml = lxml.mml or { }
-local texsprint = tex.sprint
-local format = string.format
-local lower = string.lower
-local utfchar = utf.char
-local utffind = utf.find
-local xmlsprint = xml.sprint
-local xmlcprint = xml.cprint
-
-local utfcharacters, utfvalues = string.utfcharacters, string.utfvalues
-
-- an alternative is to remap to private codes, where we can have
-- different properties .. to be done; this will move and become
-- generic
@@ -387,30 +384,29 @@ local csymbols = {
},
}
-function xml.functions.remapmmlcsymbol(r,d,k)
- local dk = d[k]
- local at = dk.at
+function xml.functions.remapmmlcsymbol(e)
+ local at = e.at
local cd = at.cd
if cd then
cd = csymbols[cd]
if cd then
- local tx = dk.dt[1]
+ local tx = e.dt[1]
if tx and tx ~= "" then
local tg = cd[tx]
if tg then
at.cd = nil
at.cdbase = nil
- dk.dt = { }
+ e.dt = { }
if type(tg) == "table" then
- for k, v in pairs(tg) do
+ for k, v in next, tg do
if k == "tag" then
- dk.tg = v
+ e.tg = v
else
at[k] = v
end
end
else
- dk.tg = tg
+ e.tg = tg
end
end
end
@@ -418,170 +414,167 @@ function xml.functions.remapmmlcsymbol(r,d,k)
end
end
-function xml.functions.remapmmlbind(r,d,k)
- d[k].tg = "apply"
+function xml.functions.remapmmlbind(e)
+ e.tg = "apply"
end
-function xml.functions.remapopenmath(r,d,k)
- local dk = d[k]
- local tg = dk.tg
+function xml.functions.remapopenmath(e)
+ local tg = e.tg
if tg == "OMOBJ" then
- dk.tg = "math"
+ e.tg = "math"
elseif tg == "OMA" then
- dk.tg = "apply"
+ e.tg = "apply"
elseif tg == "OMB" then
- dk.tg = "apply"
+ e.tg = "apply"
elseif tg == "OMS" then
- -- xml.functions.remapmmlcsymbol(r,d,k)
- local at = dk.at
- dk.tg = "csymbol"
- dk.dt = { at.name or "unknown" }
+ local at = e.at
+ e.tg = "csymbol"
+ e.dt = { at.name or "unknown" }
at.name = nil
elseif tg == "OMV" then
- local at = dk.at
- dk.tg = "ci"
- dk.dt = { at.name or "unknown" }
+ local at = e.at
+ e.tg = "ci"
+ e.dt = { at.name or "unknown" }
at.name = nil
elseif tg == "OMI" then
- dk.tg = "ci"
+ e.tg = "ci"
end
- dk.rn = "mml"
+ e.rn = "mml"
end
function lxml.mml.checked_operator(str)
- texsprint(tex.ctxcatcodes,(utf.gsub(str,".",o_replacements)))
+ texsprint(ctxcatcodes,(utfgsub(str,".",o_replacements)))
end
function lxml.mml.stripped(str)
- tex.sprint(tex.ctxcatcodes,str:strip())
+ tex.sprint(ctxcatcodes,str:strip())
end
-function lxml.mml.mn(id,pattern)
- -- maybe at some point we need to interpret the number, but
- -- currently we assume an upright font
- local str = xml.content(lxml.id(id),pattern) or ""
- -- str = str:gsub("^%s*(.-)%s*$","%1")
- str = str:gsub("(%s+)",utfchar(0x205F)) -- medspace e.g.: twenty one (nbsp is not seen)
- texsprint(tex.ctxcatcodes,(str:gsub(".",n_replacements)))
+function table.keys_as_string(t)
+ local k = { }
+ for k,_ in next, t do
+ k[#k+1] = k
+ end
+ return concat(k,"")
end
+--~ local leftdelimiters = "[" .. table.keys_as_string(l_replacements) .. "]"
+--~ local rightdelimiters = "[" .. table.keys_as_string(r_replacements) .. "]"
+
function characters.remapentity(chr,slot)
texsprint(format("{\\catcode%s=13\\xdef%s{\\string%s}}",slot,utfchar(slot),chr))
end
-function lxml.mml.mo(id,pattern)
- local str = xml.content(lxml.id(id),pattern) or ""
- texsprint(tex.ctxcatcodes,(utf.gsub(str,".",o_replacements)))
+function lxml.mml.mn(id,pattern)
+ -- maybe at some point we need to interpret the number, but
+ -- currently we assume an upright font
+ local str = xmlcontent(get_id(id)) or ""
+ str = gsub(str,"(%s+)",utfchar(0x205F)) -- medspace e.g.: twenty one (nbsp is not seen)
+ texsprint(ctxcatcodes,(gsub(str,".",n_replacements)))
+end
+
+function lxml.mml.mo(id)
+ local str = xmlcontent(get_id(id)) or ""
+ texsprint(ctxcatcodes,(utfgsub(str,".",o_replacements)))
end
-function lxml.mml.mi(id,pattern)
- local str = xml.content(lxml.id(id),pattern) or ""
- -- str = str:gsub("^%s*(.-)%s*$","%1")
+function lxml.mml.mi(id)
+ local str = xmlcontent(get_id(id)) or ""
+ -- str = gsub(str,"^%s*(.-)%s*$","%1")
local rep = i_replacements[str]
if rep then
- texsprint(tex.ctxcatcodes,rep)
+ texsprint(ctxcatcodes,rep)
else
- texsprint(tex.ctxcatcodes,(str:gsub(".",i_replacements)))
+ texsprint(ctxcatcodes,(gsub(str,".",i_replacements)))
end
end
-function table.keys_as_string(t)
- local k = { }
- for k,_ in pairs(t) do
- k[#k+1] = k
- end
- return concat(k,"")
-end
-
---~ local leftdelimiters = "[" .. table.keys_as_string(l_replacements) .. "]"
---~ local rightdelimiters = "[" .. table.keys_as_string(r_replacements) .. "]"
-
-function lxml.mml.mfenced(id,pattern) -- multiple separators
- id = lxml.id(id)
+function lxml.mml.mfenced(id) -- multiple separators
+ id = get_id(id)
local left, right, separators = id.at.open or "(", id.at.close or ")", id.at.separators or ","
local l, r = l_replacements[left], r_replacements[right]
- texsprint(tex.ctxcatcodes,"\\enabledelimiter")
+ texsprint(ctxcatcodes,"\\enabledelimiter")
if l then
- texsprint(tex.ctxcatcodes,l_replacements[left] or o_replacements[left] or "")
+ texsprint(ctxcatcodes,l_replacements[left] or o_replacements[left] or "")
else
- texsprint(tex.ctxcatcodes,o_replacements["@l"])
- texsprint(tex.ctxcatcodes,left)
+ texsprint(ctxcatcodes,o_replacements["@l"])
+ texsprint(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 == doublebar then
- m = "\\enabledelimiter\\middle|\\relax\\disabledelimiter"
- elseif m == "{" then
- m = "\\{"
- elseif m == "}" then
- m = "\\}"
+ texsprint(ctxcatcodes,"\\disabledelimiter")
+ local collected = lxml.filter(id,"/*") -- check the *
+ if collected then
+ local n = #collected
+ if n == 0 then
+ -- skip
+ elseif n == 1 then
+ xmlsprint(collected[1]) -- to be checked
+--~ lxml.all(id,"/*")
+ else
+ local t = { }
+ for s in utfgmatch(separators,"[^%s]") do
+ t[#t+1] = s
+ end
+ for i=1,n do
+ xmlsprint(collected[i]) -- to be checked
+ if i < n then
+ local m = t[i] or t[#t] or ""
+ if m == "|" then
+ m = "\\enabledelimiter\\middle|\\relax\\disabledelimiter"
+ elseif m == doublebar then
+ m = "\\enabledelimiter\\middle|\\relax\\disabledelimiter"
+ elseif m == "{" then
+ m = "\\{"
+ elseif m == "}" then
+ m = "\\}"
+ end
+ texsprint(ctxcatcodes,m)
end
- texsprint(tex.ctxcatcodes,m)
end
end
end
- texsprint(tex.ctxcatcodes,"\\enabledelimiter")
+ texsprint(ctxcatcodes,"\\enabledelimiter")
if r then
- texsprint(tex.ctxcatcodes,r_replacements[right] or o_replacements[right] or "")
+ texsprint(ctxcatcodes,r_replacements[right] or o_replacements[right] or "")
else
- texsprint(tex.ctxcatcodes,right)
- texsprint(tex.ctxcatcodes,o_replacements["@r"])
+ texsprint(ctxcatcodes,right)
+ texsprint(ctxcatcodes,o_replacements["@r"])
end
- texsprint(tex.ctxcatcodes,"\\disabledelimiter")
+ texsprint(ctxcatcodes,"\\disabledelimiter")
end
local function flush(e,tag,toggle)
- -- texsprint(tex.ctxcatcodes,(toggle and "^{") or "_{")
+ -- texsprint(ctxcatcodes,(toggle and "^{") or "_{")
if toggle then
- texsprint(tex.ctxcatcodes,"^{")
+ texsprint(ctxcatcodes,"^{")
else
- texsprint(tex.ctxcatcodes,"_{")
+ texsprint(ctxcatcodes,"_{")
end
if tag == "none" then
- texsprint(tex.ctxcatcodes,"{}")
+ texsprint(ctxcatcodes,"{}")
else
xmlsprint(e.dt)
end
if not toggle then
- texsprint(tex.ctxcatcodes,"}")
+ texsprint(ctxcatcodes,"}")
else
- texsprint(tex.ctxcatcodes,"}{}")
+ texsprint(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]
+ for e in lxml.collected(id,"/*") do
local tag = e.tg
if tag == "mprescripts" then
- texsprint(tex.ctxcatcodes,"{}")
+ texsprint(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]
+ for e in lxml.collected(id,"/*") do
local tag = e.tg
if tag == "mprescripts" then
break
@@ -617,12 +610,12 @@ local frametypes = {
-- crazy element ... should be a proper structure instead of such a mess
function lxml.mml.mcolumn(root)
- root = lxml.id(root)
+ root = get_id(root)
local matrix, numbers = { }, 0
- local function collect(m,dk)
- local tag = dk.tg
+ local function collect(m,e)
+ local tag = e.tg
if tag == "mi" or tag == "mn" or tag == "mo" or tag == "mtext" then
- local str = xml.content(dk)
+ local str = xmltext(e)
for s in utfcharacters(str) do -- utf.gmatch(str,".") btw, the gmatch was bugged
m[#m+1] = { tag, s }
end
@@ -633,28 +626,27 @@ function lxml.mml.mcolumn(root)
end
end
elseif tag == "mspace" or tag == "mline" then
- local str = dk.at.spacing or ""
+ local str = e.at.spacing or ""
for s in utfcharacters(str) do -- utf.gmatch(str,".") btw, the gmatch was bugged
m[#m+1] = { tag, s }
end
elseif tag == "mline" then
- m[#m+1] = { tag, dk }
+ m[#m+1] = { tag, e }
end
end
- for r, d, k in xml.elements(root,"/*") do
+ for e in lxml.collected(root,"/*") do
local m = { }
matrix[#matrix+1] = m
- local dk = d[k]
- if dk.tg == "mrow" then
+ if e.tg == "mrow" then
-- only one level
- for r, d, k in xml.elements(dk,"/*") do
- collect(m,d[k])
+ for e in lxml.collected(e,"/*") do
+ collect(m,e)
end
else
- collect(m,dk)
+ collect(m,e)
end
end
- tex.sprint(tex.ctxcatcodes,"\\halign\\bgroup\\hss$#$&$#$\\cr")
+ tex.sprint(ctxcatcodes,"\\halign\\bgroup\\hss$#$&$#$\\cr")
for i=1,#matrix do
local m = matrix[i]
local mline = true
@@ -665,7 +657,7 @@ function lxml.mml.mcolumn(root)
end
end
if mline then
- tex.sprint(tex.ctxcatcodes,"\\noalign{\\obeydepth\\nointerlineskip}")
+ tex.sprint(ctxcatcodes,"\\noalign{\\obeydepth\\nointerlineskip}")
end
for j=1,#m do
local mm = m[j]
@@ -679,9 +671,9 @@ function lxml.mml.mcolumn(root)
--~ if type(mc) ~= "string" then
--~ n, p = false, false
--~ break
---~ elseif mc:find("^[%d ]$") then -- rangecheck is faster
+--~ elseif find(mc,"^[%d ]$") then -- rangecheck is faster
--~ -- digit
---~ elseif not mc:find("^[%.%,]$") then -- rangecheck is faster
+--~ elseif not find(mc,"^[%.%,]$") then -- rangecheck is faster
--~ -- punctuation
--~ else
--~ n = false
@@ -701,85 +693,92 @@ function lxml.mml.mcolumn(root)
chr = "\\mmlmcolumndigitspace" -- utfchar(0x2007)
end
if j == numbers + 1 then
- tex.sprint(tex.ctxcatcodes,"&")
+ tex.sprint(ctxcatcodes,"&")
end
local nchr = n_replacements[chr]
- tex.sprint(tex.ctxcatcodes,nchr or chr)
+ tex.sprint(ctxcatcodes,nchr or chr)
end
- tex.sprint(tex.ctxcatcodes,"\\crcr")
+ tex.sprint(ctxcatcodes,"\\crcr")
end
- tex.sprint(tex.ctxcatcodes,"\\egroup")
+ tex.sprint(ctxcatcodes,"\\egroup")
end
local spacesplitter = lpeg.Ct(lpeg.splitat(" "))
function lxml.mml.mtable(root)
- root = lxml.id(root)
-
-- todo: align, rowspacing, columnspacing, rowlines, columnlines
-
+ root = get_id(root)
local at = root.at
local rowalign = at.rowalign
local columnalign = at.columnalign
local frame = at.frame
- local rowaligns = rowalign and spacesplitter:match(rowalign)
- local columnaligns = columnalign and spacesplitter:match(columnalign)
- local frames = frame and spacesplitter:match(frame)
+ local rowaligns = rowalign and lpegmatch(spacesplitter,rowalign)
+ local columnaligns = columnalign and lpegmatch(spacesplitter,columnalign)
+ local frames = frame and lpegmatch(spacesplitter,frame)
local framespacing = at.framespacing or "0pt"
local framespacing = at.framespacing or "-\\ruledlinewidth" -- make this an option
---~ function texsprint(a,b) print(b) end
-
- 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
+ texsprint(ctxcatcodes, format("\\bTABLE[frame=%s,offset=%s]",frametypes[frame or "none"] or "off",framespacing))
+--~ context.bTABLE { frame = frametypes[frame or "none"] or "off", offset = framespacing }
+ for e in lxml.collected(root,"/(mml:mtr|mml:mlabeledtr)") do
+ texsprint(ctxcatcodes,"\\bTR")
+--~ context.bTR()
+ local at = e.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])
- local ignorelabel = dk.tg == "mlabeledtr"
- for rr, dd, kk in xml.elements(dk,"/mml:mtd") do
+ local ignorelabel = e.tg == "mlabeledtr"
+ for e in lxml.collected(e,"/mml:mtd") do -- nested we can use xml.collected
col = col + 1
if ignorelabel and col == 1 then
-- get rid of label, should happen at the document level
else
- local dk = dd[kk]
- local at = dk.at
+ local at = e.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") -- $
+ texsprint(ctxcatcodes,format("\\bTD[align={%s,%s},frame=%s,nx=%s,ny=%s]$\\ignorespaces",cra,cca,cfr,columnspan,rowspan))
+--~ texfprint("\\bTD[align={%s,%s},frame=%s,nx=%s,ny=%s]$\\ignorespaces",cra,cca,cfr,columnspan,rowspan)
+--~ context.bTD { align = format("{%s,%s}",cra,cca), frame = cfr, nx = columnspan, ny = rowspan }
+--~ context.bmath()
+--~ context.ignorespaces()
+ xmlcprint(e)
+ texsprint(ctxcatcodes,"\\removeunwantedspaces$\\eTD") -- $
+--~ context.emath()
+--~ context.removeunwantedspaces()
+--~ context.eTD()
end
end
---~ if dk.tg == "mlabeledtr" then
---~ texsprint(tex.ctxcatcodes,"\\bTD")
---~ xmlcprint(xml.first(dk,"/!mml:mtd"))
---~ texsprint(tex.ctxcatcodes,"\\eTD")
+--~ if e.tg == "mlabeledtr" then
+--~ texsprint(ctxcatcodes,"\\bTD")
+--~ xmlcprint(xml.first(e,"/!mml:mtd"))
+--~ texsprint(ctxcatcodes,"\\eTD")
--~ end
- texsprint(tex.ctxcatcodes,"\\eTR")
+ texsprint(ctxcatcodes,"\\eTR")
+--~ context.eTR()
end
- texsprint(tex.ctxcatcodes, "\\eTABLE")
+ texsprint(ctxcatcodes, "\\eTABLE")
+--~ context.eTABLE()
end
function lxml.mml.csymbol(root)
- root = lxml.id(root)
- local encoding = root.at.encoding or ""
- local hash = url.hashed(lower(root.at.definitionUrl or ""))
+ root = get_id(root)
+ local at = root.at
+ local encoding = at.encoding or ""
+ local hash = url.hashed(lower(at.definitionUrl or ""))
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))
+ local text = string.strip(lxmltext(root))
+--~ texsprint(ctxcatcodes,format("\\mmlapplycsymbol{%s}{%s}{%s}{%s}",full,base,encoding,text))
+ texsprint(ctxcatcodes,"\\mmlapplycsymbol{",full,"}{",base,"}{",encoding,"}{",text,"}")
end
function lxml.mml.menclosepattern(root)
- root = lxml.id(root)
+ root = get_id(root)
local a = root.at.notation
if a and a ~= "" then
- texsprint("mml:enclose:"..a:gsub(" +",",mml:enclose:"))
+ texsprint("mml:enclose:",gsub(a," +",",mml:enclose:"))
end
end
diff --git a/Master/texmf-dist/tex/context/base/x-mathml.mkiv b/Master/texmf-dist/tex/context/base/x-mathml.mkiv
index 649798c9fe2..a5245c83588 100644
--- a/Master/texmf-dist/tex/context/base/x-mathml.mkiv
+++ b/Master/texmf-dist/tex/context/base/x-mathml.mkiv
@@ -28,7 +28,7 @@
\xmlfilter {\xmldocument} {omt:*/function(remapopenmath)}
\xmlfilter {\xmldocument} {mml:bind/function(remapmmlbind)}
\xmlfilter {\xmldocument} {mml:csymbol/function(remapmmlcsymbol)}
- \xmlsetsetup{\xmldocument} {mml:*} {*}
+ \xmlsetsetup{\xmldocument} {mml:*} {mml:*}
\xmlsetsetup{\xmldocument} {mml:apply/mml:apply/mml:inverse/../../..} {mml:apply:inverse}
\xmlstrip {\xmldocument} {(mml:mi|mml:mo|mml:mn|mml:mtext|mml:csymbol)}
\stopxmlsetups
@@ -38,7 +38,7 @@
\xmlregistersetup{xml:mml:define}
-\def\setupMMLappearance[#1]{\dodoubleargument\getparameters[@@MML#1]}
+\unexpanded\def\setupMMLappearance[#1]{\dodoubleargument\getparameters[@@MML#1]}
\def\MMLhack{\let\MMLpar\par \let\par\relax \everyvbox{\let\par\MMLpar}}
@@ -99,7 +99,7 @@
%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.
+%D some namespace limitations. Here we do it the \MKIV\ way.
\def\widevec#1%
{\vbox{\mathsurround\zeropoint\ialign{##\crcr
@@ -152,7 +152,7 @@
%D In the styles, options can be set with:
-\def\setupMMLappearance[#1]{\dodoubleargument\getparameters[MML#1]} % no @@ because passed to lua
+\unexpanded\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}.
@@ -334,7 +334,7 @@
\MMLcreset
\MMLdoL
\mmlfirst{#1}
- \ifnum\xmlnofelements{#1}>\plusone
+ \ifnum\xmlcount{#1}>\plusone
\negthinspace % not enough
\left(\MMLcreset\xmlconcatrange{#1}{/*}{2}{}{\MMLseparator,}\right)
\fi
@@ -354,7 +354,7 @@
\startxmlsetups mml:apply:mml:ci
\xmlfirst{#1}{/mml:ci}
- \ifnum\xmlnofelements{#1}>\plusone
+ \ifnum\xmlcount{#1}>\plusone
\left(\MMLcreset\xmlconcatrange{#1}{/*}{2}{}{\MMLseparator,}\right)
\fi
\stopxmlsetups
@@ -368,7 +368,7 @@
% fn
\startxmlsetups mmc:fn:\utfchar{"00B1} % plusminus ±
- \ifnum\xmlnofelements{#1}>\plustwo
+ \ifnum\xmlcount{#1}>\plustwo
\MMLcreset
\left(\xmlconcat{#1}{/*}{2}{}{\mmlfirst{#1}}\right)
\else
@@ -382,7 +382,7 @@
\startxmlsetups mmc:fn
\begingroup
- \edef\mmlnoffn{\xmlnofelements{#1}}
+ \edef\mmlnoffn{\xmlcount{#1}}
\ifnum\mmlnoffn>\plustwo
\def\MMCfnleft {\left(}
\def\MMCfnright{\right)}
@@ -428,7 +428,7 @@
} {
\MMLcreset
\mmlfirst{#1}
- \ifnum\xmlnofelements{#1}>\plusone
+ \ifnum\xmlcount{#1}>\plusone
\negthinspace
\left(\MMLcreset\xmlconcat{#1}{2}{}{\MMLseparator,}\right)
\fi
@@ -550,10 +550,6 @@
\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
@@ -759,7 +755,7 @@
\doif \MMLdeclarestate \v!start {
\mathopnolimits{declare}
\mmlfirst{#1}
- \ifnum\xmlnofelements{#1}>\plusone
+ \ifnum\xmlcount{#1}>\plusone
\thickspace
\mathopnolimits{as}
\thickspace
@@ -1361,12 +1357,6 @@
}
\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
@@ -1595,7 +1585,7 @@
\startxmlsetups mml:vector
\begingroup
- \ifnum\xmlnofelements{#1}>\plusone
+ \ifnum\xmlcount{#1}>\plusone
\doifelse\MMLvectordirection\v!horizontal {
\left(\xmlconcat{#1}{/*}{\MMLseparator\MMLvectorseparator}\right)
} {
@@ -1664,18 +1654,24 @@
\stopxmlsetups
\usemodule[x][calcmath]
+%usemodule[x][asciimath]
\startxmlsetups mml:annotation
- \xmldoifelse {#1} {[oneof(@encoding,'TeX','tex','TEX','ConTeXt','context','CONTEXT','ctx')]} {
- \begingroup
- \setcatcodetable\ctxcatcodes
- \xmlflush{#1}
- \endgroup
+ \xmldoifelse {#1} {.[oneof(@encoding,'TeX','tex','TEX','ConTeXt','context','CONTEXT','ctx')]} {
+ \xmlflushcontext{#1}
} {
- \xmldoifelse {#1} {[oneof(@encoding,'calcmath','cm')]} {
- \calcmath{\xmlflush{#1}}
+ \xmldoifelse {#1} {.[oneof(@encoding,'calcmath','cm')]} {
+ \expanded{\calcmath{\xmlflush{#1}}}
} {
- \xmlall{#1}{../!mml:annotation}
+ \xmldoifelse {#1} {.[oneof(@encoding,'asciimath','am')]} {
+ \ifdefined\asciimath
+ \expanded{\asciimath{\xmlflush{#1}}}
+ \else
+ \hbox{\tt no am loaded}%
+ \fi
+ } {
+ \xmlall{#1}{../!mml:annotation}
+ }
}
}
\stopxmlsetups
@@ -1852,12 +1848,12 @@
% setups
\startxmlsetups mml:mi % todo: mathvariant mathsize mathcolor mathbackground
- \ctxlua{lxml.mml.mi("#1","*")}
+ \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
+ \mr \ctxlua{lxml.mml.mn("#1")}% no \hbox, would be ok for . , but spoils rest
\endgroup
\stopxmlsetups
@@ -1868,7 +1864,7 @@
\startxmlsetups mml:mo
\doif {\xmlatt{#1}{maxsize}} {1} {\settrue\mmlignoredelimiter}
\doif {\xmlatt{#1}{stretchy}} {false} {\settrue\mmlignoredelimiter}
- \ctxlua{lxml.mml.mo("#1","*")}
+ \ctxlua{lxml.mml.mo("#1")}
\setfalse\mmlignoredelimiter
\stopxmlsetups
@@ -1876,7 +1872,7 @@
\def\MMLleft {\left }% weird
\def\MMLright {\right}
\def\MMLmiddle{\middle}
- \ctxlua{lxml.mml.mfenced("#1","/*")}
+ \ctxlua{lxml.mml.mfenced("#1")}
\stopxmlsetups
\defineoverlay [mml:enclose:box] [\useMPgraphic{mml:enclose:box}]
@@ -2080,8 +2076,9 @@
\startxmlsetups mml:mrow
\begingroup
- \ifnum\xmlcount{#1}{/mml:mo}=\plustwo
- \xmldoifelse {#1} {/mml:mo[position()==1 or position()==\xmlnofelements{#1}]} {% we need a {}
+ \edef\nofmmlrows{\xmlcount{#1}{/mml:mo}}%
+ \ifnum\nofmmlrows=\plustwo
+ \xmldoifelse {#1} {/mml:mo[position()==1 or position()==\nofmmlrows]} {% we need a {}
\def\MMLleft {\left }
\def\MMLright {\right}
\def\MMLmiddle{\middle}
@@ -2146,12 +2143,12 @@
\startxmlsetups mml:mover
% \mathop {
- \edef\mmlovertoken{\xmlraw{#1}{/mml:*[position()==2]}}
+ \edef\mmlovertoken{\xmlraw{#1}{/mml:*[2]}}
\doifelse{\utfmathclass\mmlovertoken}{accent} {
\edef\mmlovercommand{\utfmathcommand\mmlovertoken}
\mmlexecuteifdefined\mmlovercommand\mathematics{\mmlfirst{#1}}
} {
- \edef\mmlbasetoken{\xmlraw{#1}{/mml:*[position()==1]}}
+ \edef\mmlbasetoken{\xmlraw{#1}{/mml:*[1]}}
\edef\mmlbasecommand{\utfmathfiller\mmlbasetoken}
\edef\mmlovercommand{\utfmathfiller\mmlovertoken}
\vbox {
@@ -2170,12 +2167,12 @@
\startxmlsetups mml:munder
% \mathop {
- \edef\mmlundertoken{\xmlraw{#1}{/mml:*[position()==2]}}
+ \edef\mmlundertoken{\xmlraw{#1}{/mml:*[2]}}
\doifelse{\utfmathclass\mmlundertoken}{accent} {
\edef\mmlundercommand{\utfmathcommand\mmlundertoken}
\mmlexecuteifdefined\mmlundercommand\mathematics{\mmlfirst{#1}}
} {
- \edef\mmlbasetoken {\xmlraw{#1}{/mml:*[position()==1]}}
+ \edef\mmlbasetoken {\xmlraw{#1}{/mml:*[1]}}
\edef\mmlbasecommand {\utfmathfiller\mmlbasetoken}
\edef\mmlundercommand{\utfmathfiller\mmlundertoken}
\vtop {
@@ -2193,7 +2190,7 @@
\stopxmlsetups
\startxmlsetups mml:munderover
- \edef\mmlbasetoken{\xmlraw{#1}{/mml:*[position()==1]}}
+ \edef\mmlbasetoken{\xmlraw{#1}{/mml:*[1]}}
\edef\mmlbasecommand{\utfmathcommand\mmlbasetoken}
\mmlexecuteifdefined\mmlbasecommand{\mathematics{\mmlfirst{#1}}}_{\mmlsecond{#1}}^{\mmlthird{#1}}
\stopxmlsetups
diff --git a/Master/texmf-dist/tex/context/base/x-pending.mkiv b/Master/texmf-dist/tex/context/base/x-pending.mkiv
new file mode 100644
index 00000000000..20fe5fb6ae2
--- /dev/null
+++ b/Master/texmf-dist/tex/context/base/x-pending.mkiv
@@ -0,0 +1,39 @@
+%D \module
+%D [ file=x-pending,
+%D version=2008.04.04,
+%D title=\CONTEXT\ Style File,
+%D subtitle=Track \MKII\ \XML\ usage in \MKIV,
+%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 Including this module will result in the production of
+%D a file \type {jobname-pending-xml.log} which has a
+%D \LUA\ table with \XML\ elements that are still catched by
+%D \MKII\ code, when enabled.
+
+\startluacode
+ dofile(resolvers.find_file("lxml-inf.lua"))
+ local list = { }
+ function document.check_pending_xml_element(str)
+ list[str] = (list[str] and (list[str]+1)) or 1
+ end
+ function document.show_pending_xml_elements()
+ io.savedata("\jobname-pending-xml-mkii.log", table.serialize(list))
+ io.savedata("\jobname-pending-xml-mkiv.log", table.serialize(lxml.get_command_status()))
+ end
+\stopluacode
+
+\defineXMLcommand
+ [default]
+ {\ctxlua{document.check_pending_xml_element("\currentXMLelement")}}
+
+\appendtoks
+ \ctxlua{document.show_pending_xml_elements()}%
+\to \everystoptext
+
+\endinput
diff --git a/Master/texmf-dist/tex/context/base/x-set-11.mkii b/Master/texmf-dist/tex/context/base/x-set-11.mkii
index 434b1864793..450382a953b 100644
--- a/Master/texmf-dist/tex/context/base/x-set-11.mkii
+++ b/Master/texmf-dist/tex/context/base/x-set-11.mkii
@@ -1,14 +1,100 @@
+%D \module
+%D [ file=x-set-11,
+%D version=2004.10.31,
+%D remark=setupx.tex: 1998.07.20 and later,
+%D title=\CONTEXT\ Setup Definitions,
+%D subtitle=Macro 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.
+
+% module x-set-02 loads the mapping, after that we can say:
+%
+% texmfstart texexec --int=nl --pdf --global --result=setup-nl x-set-12
+
+\usemodule[set-99] % interface messages
+
\unprotect
-\def\mkloadsetups#1%
- {\doifnotmode{no-setup-all}
- {\startXMLmapping[zero]
- \expanded{\processXMLfilegrouped{#1}}%
- \stopXMLmapping}}
+% general
+
+\def\setupnumfont {}
+\def\setuptxtfont {}
+\def\setupintfont#1{\uppercase{#1}}
+\def\setupvarfont {\sl}
+\def\setupoptfont {\sl}
+\def\setupalwcolor {}
+\def\setupoptcolor {darkgray}
+
+\defineXMLenvironmentsave [cd:content] [list=,state=]
+ {\simpleSETUPargument{content}\blank[\v!halfline]\ignorespaces}
+ {\ignorespaces}
+
+\def\c!setup!internal!#1%
+ {{\setmessagetext{setup}{#1}%
+ \expanded{\setupintfont{\currentmessagetext}}}}
+
+\def\c!setup!text!#1%
+ {{\setmessagetext{setup}{#1}%
+ \setupvarfont{\currentmessagetext}}}
+
+\def\c!setup!command!#1%
+ {{\setupvarfont{\texescape...#1}}}
+
+\def\??stp{@@stp}
+
+\defineregister
+ [texmacro]
+ [texmacros]
+
+\definesorting
+ [texcommand]
+ [texcommands]
+
+\setupsorting
+ [texcommand]
+ [\c!command=\@@stpcommand,
+ \c!criterium=\@@stpcriterium]
+
+\definesorting
+ [eachtexcommand]
+ [alltexcommands]
+
+\setupsorting
+ [eachtexcommand]
+ [\c!command=\@@stpcommand,
+ \c!criterium=\v!all]
+
+\pushmacro\setuptext
+
+\defineframedtext
+ [setuptext]
+ [\c!width=\hsize,
+ \c!height=\v!fit,
+ \c!align=\v!right,
+ \c!offset=0.75em]
+
+\popmacro\setuptext
+
+\newif\ifshortsetup
+
+\def\doshowsetup
+ {\dosingleempty\dodoshowsetup}
+
+\def\dodoshowsetup[#1]%
+ {\iffirstargument
+ \doshowsetup{#1}%
+ \else
+ \expandafter\doshowsetup
+ \fi}
\bgroup \catcode`\<=\active
-\gdef\mkshowsetup#1%
+\gdef\doshowsetup#1%
{\bgroup
\def<<##1>>{##1}%
\edef\ascii{#1}%
@@ -23,17 +109,465 @@
\egroup
-\def\mkshowusedsetups
- {\getvalue{\e!place\e!listof texcommands}}
+\def\setup {\shortsetupfalse\doshowsetup}
+\def\showsetup {\shortsetupfalse\doshowsetup}
+\def\shortsetup{\shortsetuptrue \doshowsetup}
+\def\setupsetup{\dodoubleargument\getparameters[\??stp]}
+
+\setupsetup
+ [\c!before=,
+ \c!after=,
+ \c!command=\setup,
+ \c!criterium=\v!used]
+
+% verwijzing: 0 geen verwijzingen plaatsen / wel genereren
+% 1 alleen bij zie plaatsen / wel genereren
+% 2 alle verwijzingen plaatsen / niet genereren
+% 3 bij zie commando klikken / wel genereren
+
+\setupsetup
+ [\c!reference=0]
+
+\def\placesetup
+ {\bgroup
+ \getvalue{\e!place\e!listof texcommands}%
+ \egroup}
+
+\def\placeallsetups
+ {\bgroup
+ \setupsetup[\c!reference=2]%
+ \setupreferencing[\c!state=\v!stop]%
+ \getvalue{\e!place\e!listof alltexcommands}%
+ \egroup}
+
+\let\placeeverysetup\placeallsetups
+
+\let\plaatssetup \placesetup
+\let\plaatselkesetup\placeallsetups
-\def\mkshowallsetups
- {\getvalue{\e!place\e!listof alltexcommands}}
+% we use :1 as fallback
+%
+% \setup{setupinterlinespace}
+% \setup{setupinterlinespace:1}
+% \setup{setupinterlinespace:2}
+
+% todo: make this proper mkiv xml
\defineXMLenvironmentsave [cd:define] [name=]
{}
{\setxvalue{cd:def:\XMLop{name}}{\XMLflush{cd:define}}}
\defineXMLsingular [cd:resolve] [name=]
- {\getvalue{cd:def:\XMLop{name}}}
+ {\ignorespaces\getvalue{cd:def:\XMLop{name}}\ignorespaces}
+
+\defineXMLenvironment [cd:command] [name=,type=,generated=,interactive=,variant=]
+ {}
+ {\showSETUPrecord}
+
+\def\showSETUPrecord
+ {\getvalue{\e!start setuptext}
+ \tttf
+ \nohyphens
+ \veryraggedright
+ \startXMLmapping [one]
+ \doglobal\newcounter\currentSETUPargument
+ \global\let\maximumSETUPargument\currentSETUPargument
+ \bgroup
+ \doif{\XMLpar{cd:command}{generated}{}}{yes}{\ttsl}%
+ \doifelseXMLop{type}{environment}
+ {\tex{\e!start}}{\tex{}}\ignorespaces
+ \XMLflush{cd:sequence}\ignorespaces
+ \egroup
+ \doifelseXMLempty{cd:arguments}
+ {}
+ {\bgroup
+ \setbox0=\hbox{\XMLflush{cd:arguments}}%
+ \global\let\maximumSETUPargument\currentSETUPargument
+ \doglobal\newcounter\currentSETUPargument
+ \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
+ %\bgroup
+ % \tx
+ % \doif{\XMLpar{cd:command}{interactive}{}}{yes} {\quad INTERACTIVE}%
+ % \doif{\XMLpar{cd:command}{interactive}{}}{exclusive}{\quad INTERACTIVE ONLY}%
+ %\egroup
+ \startXMLmapping [two]
+ \bgroup
+ \doglobal\newcounter\currentSETUPargument
+ \blank[\v!line]
+ \switchtobodyfont[small] % kan sneller
+ \ignorespaces\XMLflush{cd:arguments}\endgraf
+ \egroup
+ \stopXMLmapping}
+ \stopXMLmapping
+ \getvalue{\e!stop setuptext}}
+
+\defineXMLenvironmentsave [cd:sequence] \ignorespaces \ignorespaces
+\defineXMLenvironmentsave [cd:arguments] \ignorespaces \ignorespaces
+
+%D This is the first pass; here we generate the top line.
+
+\newcounter\currentSETUPargument
+\def\currentSETUPwidth{0pt}
+
+% environmentsave ?
+
+\startXMLmapping [one]
+
+\defineXMLenvironmentsave [cd:string] [value=]
+ {\XMLop{value}\ignorespaces}
+ {\ignorespaces}
+
+\defineXMLenvironmentsave [cd:variable] [value=]
+ {{\expanded{\setupintfont{\XMLop{value}}}}\ignorespaces}
+ {\ignorespaces}
+
+% moet een standaard type worden
+
+\defineXMLenvironmentsave [cd:assignments] [list=,state=]
+ {\showSETUPassignment\ignorespaces} {\ignorespaces}
+
+\defineXMLenvironmentsave [cd:keywords] [list=,state=]
+ {\showSETUPkeyword\ignorespaces} {\ignorespaces}
+
+\defineXMLenvironmentsave [cd:content] [list=,state=]
+ {\showSETUPcontent\ignorespaces} {\ignorespaces}
+
+\defineXMLenvironmentsave [cd:displaymath] [list=,state=]
+ {\showSETUPdisplaymath\ignorespaces} {\ignorespaces}
+
+\defineXMLenvironmentsave [cd:index] [list=,state=]
+ {\showSETUPindex\ignorespaces} {\ignorespaces}
+
+\defineXMLenvironmentsave [cd:math] [list=,state=]
+ {\showSETUPmath\ignorespaces} {\ignorespaces}
+
+\defineXMLenvironmentsave [cd:nothing] [list=,state=]
+ {\showSETUPnothing\ignorespaces} {\ignorespaces}
+
+\defineXMLenvironmentsave [cd:file] [list=,state=]
+ {\showSETUPfile\ignorespaces} {\ignorespaces}
+
+\defineXMLenvironmentsave [cd:position] [list=,state=]
+ {\showSETUPposition\ignorespaces} {\ignorespaces}
+
+\defineXMLenvironmentsave [cd:reference] [list=,state=]
+ {\showSETUPreference\ignorespaces} {\ignorespaces}
+
+\defineXMLenvironmentsave [cd:csname] [list=,state=]
+ {\showSETUPcsname\ignorespaces} {\ignorespaces}
+
+\defineXMLenvironmentsave [cd:destination] [list=,state=]
+ {\showSETUPdestination\ignorespaces} {\ignorespaces}
+
+\defineXMLenvironmentsave [cd:triplet] [list=,state=]
+ {\showSETUPtriplet\ignorespaces} {\ignorespaces}
+
+\defineXMLenvironmentsave [cd:word] [list=,state=]
+ {\showSETUPword\ignorespaces} {\ignorespaces}
+
+\stopXMLmapping
+
+%D This is the second pass; here we generate the table.
+
+\startXMLmapping [two]
+
+\def\startfirstSETUPcolumn#1%
+ {\bgroup
+ \advance\leftskip 2em
+ \noindent\llap{\hbox to 2em{#1\hss}}}
+
+\def\stopfirstSETUPcolumn
+ {\endgraf
+ \egroup}
+
+\def\startsecondSETUPcolumn#1#2%
+ {\bgroup
+ \advance\hangindent \currentSETUPwidth
+ \advance\hangindent 2.5em
+ \noindent \hbox to \hangindent{#1\hss\hbox to 2.5em{\hss#2\hss}}%
+ \ignorespaces}
+
+\def\stopsecondSETUPcolumn
+ {\endgraf
+ \egroup}
+
+\def\secondSETUPcolumn#1#2%
+ {\startsecondSETUPcolumn{#1}{#2}\stopsecondSETUPcolumn}
+
+\def\previousSETUPargument{\currentSETUPargument}
+
+\defineXMLenvironmentsave [cd:assignments]
+ {}
+ {\xdef\currentSETUPwidth{0pt}%
+ \bgroup
+ \defineXMLenvironment [cd:parameter] [name=]
+ {\setbox0=\hbox{\potentialXMLentity{\XMLop{name}}}%
+ \ifdim\wd0>\currentSETUPwidth\xdef\currentSETUPwidth{\the\wd0}\fi}%
+ {}%
+ \setbox0=\vbox{\XMLflush{cd:assignments}}%
+ \egroup
+ \startfirstSETUPcolumn{\showSETUPnumber}%
+ \doifelseXMLempty{cd:assignments}
+ {\secondSETUPcolumn{\c!setup!text!{see} \previousSETUPargument}{}}
+ {\ignorespaces
+ \XMLflush{cd:assignments}%
+ \let\previousSETUPargument\currentSETUPargument}%
+ \stopfirstSETUPcolumn
+ \blank[\v!halfline]
+ \ignorespaces}
+
+\defineXMLenvironmentsave [cd:keywords] [optional=no]
+ {}
+ {\startfirstSETUPcolumn{\showSETUPnumber}%
+ \doifelseXMLempty{cd:keywords}
+ {\secondSETUPcolumn{see \previousSETUPargument}{}}
+ {\ignorespaces
+ \XMLflush{cd:keywords}%
+ \let\previousSETUPargument\currentSETUPargument}%
+ \stopfirstSETUPcolumn
+ \blank[\v!halfline]
+ \ignorespaces}
+
+\defineXMLenvironment [cd:parameter] [name=]
+ {\startsecondSETUPcolumn{\potentialXMLentity{\XMLop{name}}}{=}%
+ \ignorespaces}
+ {\stopsecondSETUPcolumn
+ \ignorespaces}
+
+\defineXMLenvironmentsave [cd:constant] [type=,default=]
+ {\doifXMLop{default}{yes}{\underbar}%
+ {\potentialXMLentity{\XMLop{type}}}\space\ignorespaces}
+ {\ignorespaces}
+
+\defineXMLenvironmentsave [cd:variable] [value=]
+ {\potentialXMLentity{\XMLop{value}}\space\ignorespaces}
+ {\ignorespaces}
+
+\defineXMLenvironmentsave [cd:inherit] [name=]
+ {\secondSETUPcolumn{\c!setup!text!{inherits} \tex{}\XMLop{name}}{}\ignorespaces}
+ {\ignorespaces}
+
+\def\simpleSETUPargument#1%
+ {\startfirstSETUPcolumn{\showSETUPnumber}%
+ \c!setup!internal!{#1}%
+ \stopfirstSETUPcolumn}
+
+\defineXMLenvironmentsave [cd:content] [list=,state=]
+ {\simpleSETUPargument{content}\blank[\v!halfline]\ignorespaces}
+ {\ignorespaces}
+
+\defineXMLenvironmentsave [cd:displaymath] [list=,state=]
+ {\simpleSETUPargument{display math}\blank[\v!halfline]\ignorespaces}
+ {\ignorespaces}
+
+\defineXMLenvironmentsave [cd:index] [list=,state=]
+ {\simpleSETUPargument{index}\blank[\v!halfline]\ignorespaces}
+ {\ignorespaces}
+
+\defineXMLenvironmentsave [cd:math] [list=,state=]
+ {\simpleSETUPargument{math}\blank[\v!halfline]\ignorespaces}
+ {\ignorespaces}
+
+\defineXMLenvironmentsave [cd:nothing] [list=,state=]
+ {\simpleSETUPargument{nothing}\blank[\v!halfline]\ignorespaces}
+ {\ignorespaces}
+
+\defineXMLenvironmentsave [cd:file] [list=,state=]
+ {\simpleSETUPargument{file name}\blank[\v!halfline]\ignorespaces}
+ {\ignorespaces}
+
+\defineXMLenvironmentsave [cd:position] [list=,state=]
+ {\simpleSETUPargument{position}\blank[\v!halfline]\ignorespaces}
+ {\ignorespaces}
+
+\defineXMLenvironmentsave [cd:reference] [list=,state=]
+ {\simpleSETUPargument{reference}\blank[\v!halfline]\ignorespaces}
+ {\ignorespaces}
+
+\defineXMLenvironmentsave [cd:csname] [list=,state=]
+ {\simpleSETUPargument{csname}\blank[\v!halfline]\ignorespaces}
+ {\ignorespaces}
+
+\defineXMLenvironmentsave [cd:destination] [list=,state=]
+ {\simpleSETUPargument{destination}\blank[\v!halfline]\ignorespaces}
+ {\ignorespaces}
+
+\defineXMLenvironmentsave [cd:triplet] [list=,state=]
+ {\simpleSETUPargument{triplet}\blank[\v!halfline]\ignorespaces}
+ {\ignorespaces}
+
+\defineXMLenvironmentsave [cd:word] [list=,state=]
+ {\simpleSETUPargument{word}\blank[\v!halfline]\ignorespaces}
+ {\ignorespaces}
+
+\stopXMLmapping
+
+\defineXMLentity [cd:command] {\c!setup!internal!{command}}
+\defineXMLentity [cd:dimension] {\c!setup!internal!{dimension}}
+\defineXMLentity [cd:file] {\c!setup!internal!{file}}
+\defineXMLentity [cd:name] {\c!setup!internal!{identifier}}
+\defineXMLentity [cd:character] {\c!setup!internal!{character}}
+\defineXMLentity [cd:mark] {\c!setup!internal!{mark}}
+\defineXMLentity [cd:number] {\c!setup!internal!{number}}
+\defineXMLentity [cd:reference] {\c!setup!internal!{reference}}
+\defineXMLentity [cd:plural] {\c!setup!internal!{plural}}
+\defineXMLentity [cd:singular] {\c!setup!internal!{singular}}
+\defineXMLentity [cd:text] {\c!setup!internal!{text}}
+\defineXMLentity [cd:formula] {\c!setup!internal!{formula}}
+\defineXMLentity [cd:file] {\c!setup!internal!{file}}
+\defineXMLentity [cd:matrix] {\c!setup!internal!{matrix}}
+\defineXMLentity [cd:list] {\c!setup!internal!{list}}
+\defineXMLentity [cd:section] {\c!setup!internal!{section}}
+
+\defineXMLentity [cd:noargument] {\c!setup!command!{}}
+\defineXMLentity [cd:oneargument] {\c!setup!command!{\#1}}
+\defineXMLentity [cd:twoarguments] {\c!setup!command!{\#1\#2}}
+\defineXMLentity [cd:threearguments] {\c!setup!command!{\#1\#2\#3}}
+
+%D Todo:
+
+\defineXMLprocess [cd:choice]
+
+%D Auxiliary.
+
+\unexpanded\def\showSETUP#1#2%
+ {\bgroup
+ \doglobal\increment\currentSETUPargument
+ \setbox0=\hbox
+ {\doifelseXMLop{list}{yes}{#2}{#1}}%
+ \setbox2=\hbox to \wd0
+ {\hss
+ \raise1ex\hbox
+ {\tx\ifcase\maximumSETUPargument\relax
+ \or*\else\currentSETUPargument
+ \fi}%
+ \hss}%
+ \setbox4=\hbox to \wd0
+ {\hss
+ \lower2ex\hbox
+ \bgroup
+ \txx\doifXMLop{optional}{yes}{\c!setup!internal!{optional}}%
+ \egroup
+ \hss}%
+ \ht2\ht\strutbox
+ \dp4\dp\strutbox
+ \hskip.5em\hsmash{\box0}\hsmash{\box4}\box2%
+ \egroup}
+
+\def\showSETUPnumber
+ {\doglobal\increment\currentSETUPargument
+ \hbox to 2em
+ {\ifcase\maximumSETUPargument\relax
+ \or*\else\currentSETUPargument
+ \fi
+ \hss}}
+
+\def\showSETUPassignment {\showSETUP
+ {[.\lower.5ex\hbox{=}.]}
+ {[..,.\lower.5ex\hbox{=}.,..]}}
+
+\def\showSETUPkeyword {\showSETUP
+ {[...]}
+ {[...,...]}}
+
+\def\showSETUPargument {\showSETUP
+ {\leftargument..\rightargument}
+ {\leftargument..,...,..\rightargument}}
+
+\def\showSETUPdisplaymath {\showSETUP
+ {\$\$...\$\$}
+ {\$\$...\$\$}}
+
+\def\showSETUPindex {\showSETUP
+ {\leftargument...\rightargument}
+ {\leftargument..+...+..\rightargument}}
+
+\def\showSETUPmath {\showSETUP
+ {\$...\$}
+ {\$...\$}}
+
+\def\showSETUPnothing {\showSETUP
+ {...}
+ {}}
+
+\def\showSETUPfile {\showSETUP
+ {~...~}
+ {}}
+
+\def\showSETUPposition {\showSETUP
+ {(...)}
+ {(...,...)}}
+
+\def\showSETUPreference {\showSETUP
+ {[...]}
+ {[...,...]}}
+
+\def\showSETUPcsname {\showSETUP
+ {{\c!setup!command!{}}}
+ {}}
+
+\def\showSETUPdestination {\showSETUP
+ {[\leftargument..[ref]\rightargument]}
+ {[..,\leftargument..[ref,..]\rightargument,..]}}
+
+\def\showSETUPtriplet {\showSETUP
+ {[x:y:z=]}
+ {[x:y:z=,..]}}
+
+\def\showSETUPword {\showSETUP
+ {\leftargument...\rightargument}
+ {\leftargument.. ... ..\rightargument}}
+
+\def\showSETUPcontent {\showSETUP
+ {\leftargument...\rightargument}
+ {\leftargument.. ... ..\rightargument}}
+
+%\def\c!par!{\c!setup!internal!{endofpar}}
+%\def\c!repeat!{\c!opt!{{\setupvarfont n}*}}
+%\showSETUP\def\c!par!{\texescape par}
+%\showSETUP\def\c!sep!{\texescape\texescape}
+%\def\c!par!{\addtypespec{delimiter}{par}} % \par
+%\def\c!sep!{\addtypespec{separator}{backslash}} % \\
+%\def\c!repeat!{}
+%\def\c!tex!#1{\addtypespec{command}{#1}\doanother{tex}}
+
+\startXMLmapping[zero]
+
+\defineXMLenvironmentsave [cd:command] [name=,type=,generated=,interactive=,variant=]
+ {}
+ {\doifelseXMLop{type}{environment}
+ {\edef\currentSETUPname{start\XMLop{name}}}
+ {\edef\currentSETUPname{\XMLop{name}}}%
+ \doifsomething{\XMLop{variant}}
+ {\edef\currentSETUPname{\currentSETUPname:\XMLop{variant}}}% like setupinterlinespace:1
+ \doifXMLop{generated}{yes}
+ {\edef\currentSETUPname{\currentSETUPname*}}%
+ \doglobal\saveXMLdatainelement{stp:\currentSETUPname}{cd:command}{cd:command}%
+ \expanded{\eachtexcommand[stp:x:\currentSETUPname]{\currentSETUPname}}%
+ \expanded{\texcommand [stp:y:\currentSETUPname]{\currentSETUPname}}}
+
+\stopXMLmapping
+
+\def\loadsetups{\complexorsimple\loadsetups}
+
+\def\simpleloadsetups
+ {\doifnotmode{no-setup-main}
+ {\complexloadsetups[cont-en.xml]}}
+
+\def\complexloadsetups[#1]%
+ {\doifsomething{#1}
+ {\doifnotmode{no-setup-all}
+ {\startXMLmapping[zero]
+ \expanded{\processXMLfilegrouped{#1}}%
+ \stopXMLmapping}}}
+
+\defineXMLsingular [cd:include] [file=]
+ {\complexloadsetups[\XMLop{file}]}
\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
index 499d531e5f0..784df311389 100644
--- a/Master/texmf-dist/tex/context/base/x-set-11.mkiv
+++ b/Master/texmf-dist/tex/context/base/x-set-11.mkiv
@@ -1,98 +1,476 @@
-% engine=luatex
+%D \module
+%D [ file=x-set-11,
+%D version=2004.10.31,
+%D remark=setupx.tex: 1998.07.20 and later,
+%D title=\CONTEXT\ Setup Definitions,
+%D subtitle=Macro 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.
-\startluacode
- do
- document = document or { }
+% \startluacode
+% collectgarbage("stop")
+% function collectgarbage() return 0 end
+% \stopluacode
- document.setups = {
- loaded = { },
- root = nil,
- used = { },
+% todo: for fun: pure lua interface, but as this style evolved over 15 years
+% it's a waste of time
+%
+% todo:
+%
+% \setup{setupinterlinespace}
+% \setup{setupinterlinespace:1}
+% \setup{setupinterlinespace:2}
+%
+% cd:include -> @file
+% cd:choice
+%
+% register, interaction
+
+\usemodule[set-99] % interface messages
+
+\unprotect
+
+% general
+
+\unexpanded\def\setupnumfont {}
+\unexpanded\def\setuptxtfont {}
+\unexpanded\def\setupintfont {\WORD}
+\unexpanded\def\setupvarfont {\sl}
+\unexpanded\def\setupoptfont {\sl}
+\unexpanded\def\setupalwcolor {}
+\unexpanded\def\setupoptcolor {darkgray}
+
+\def\c!setup!definereserved#1#2%
+ {\setvalue{c!setup!:r:#1}{#2}}
+
+\def\c!setup!reserved!#1%
+ {\executeifdefined{c!setup!:r:#1}{#1}}
+
+\def\c!setup!internal!#1%
+ {\dontleavehmode
+ \begingroup
+ \setupintfont{#1}%
+ \endgroup}
+
+\def\c!setup!text!#1%
+ {\dontleavehmode
+ \begingroup
+ \setupvarfont{#1}%
+ \endgroup}
+
+\def\c!setup!command!#1%
+ {{\setupvarfont{\texescape...#1}}}
+
+\def\??stp{@@stp}
+
+\defineregister
+ [texmacro]
+ [texmacros]
+
+\definesorting
+ [texcommand]
+ [texcommands]
+
+\setupsorting
+ [texcommand]
+ [\c!command=\showsetupinlist,
+ \c!criterium=\@@stpcriterium]
+
+\pushmacro\setuptext
+
+\defineframedtext
+ [setuptext]
+ [\c!width=\hsize,
+ \c!height=\v!fit,
+ \c!align=\v!right,
+ \c!offset=0.75em]
+
+\popmacro\setuptext
+
+%D Loading:
+
+\let\currentSETUPfullname\s!unknown
+
+\startxmlsetups xml:setups:assemblename
+ \doifelse {\xmlatt{#1}{environment}} {yes} {
+ \let\currentSETUPprefix\e!start
+ } {
+ \let\currentSETUPprefix\empty
+ }
+ \edef\currentSETUPname{\xmlatt{#1}{name}}
+ \doifelse {\xmlatt{#1}{generated}} {yes} {
+ \def\currentSETUPgenerated{*}
+ } {
+ \let\currentSETUPgenerated\empty
+ }
+ \doifelsenothing {\xmlatt{#1}{variant}} {
+ \let\currentSETUPvariant\empty
+ } {
+ \def\currentSETUPvariant{:\xmlatt{#1}{variant}}
+ }
+ \edef\currentSETUPfullname {
+ \currentSETUPprefix
+ \currentSETUPname
+ \currentSETUPvariant
+ \currentSETUPgenerated
+ }
+\stopxmlsetups
+
+\startxmlsetups xml:setups:register
+ \xmlsetup{#1}{xml:setups:assemblename}
+ \expanded{\texcommand[stp:x:\currentSETUPfullname]{#1}}
+\stopxmlsetups
+
+\startxmlsetups xml:setups:basics
+ \xmlsetsetup {#1} {
+ sequence|string|variable|assignments|keywords|content|displaymath|index|math|
+ nothing|file|position|reference|csname|destination|triplet|word|
+ resolve|parameter|constant|inherit|parameter|define
+ } {xml:setups:*}
+\stopxmlsetups
+
+\xmlregisterdocumentsetup{setups}{xml:setups:basics}
+
+\def\loadsetups{\complexorsimple\loadsetups}
+
+\let\loadedsetups\empty % we load more setups, setups:<name>
+
+\def\simpleloadsetups
+ {\doifnotmode{no-setup-main}{\complexloadsetups[cont-en.xml]}}
+
+\def\complexloadsetups[#1]%
+ {\doifsomething{#1}
+ {\doonlyonce{setups:#1}
+ {\doglobal\prependtocommalist{setups:#1}\loadedsetups % last overloads first
+ \xmlloadonly{setups:#1}{#1}{setups}%
+ \xmlfilter{setups:#1}{/interface/command/command(xml:setups:register)}}}} % qualified path saves > 50% runtime
+
+\newif\ifshortsetup
+
+\unexpanded\def\setup {\shortsetupfalse\doshowsetup}
+\def\showsetup {\shortsetupfalse\doshowsetup}
+\def\shortsetup{\shortsetuptrue \doshowsetup}
+\unexpanded\def\setupsetup{\dodoubleargument\getparameters[\??stp]}
+
+%unexpanded\def\showsetupinlist#1#2#3{\shortsetupfalse\showsetupindeed{#3}\par}
+\unexpanded\def\showsetupinlist#1#2#3{\shortsetupfalse\xmlsetup{#3}{xml:setups:typeset}\par}
+
+% todo: only references in lists
+
+\def\doshowsetup
+ {\dosingleempty\dodoshowsetup}
+
+\def\dodoshowsetup[#1]%
+ {\iffirstargument
+ \dododoshowsetup{#1}%
+ \else
+ \expandafter\dododoshowsetup
+ \fi}
+
+\def\dododoshowsetup#1% this will trigger 'used'
+ {\registersort[texcommand][stp:x:#1]%
+ \showsetupindeed{#1}}
+
+\def\showsetupindeed#1%
+ {\xmlfilterlist{\loadedsetups}{/interface/command[@name='#1']/command(xml:setups:typeset)}}
+
+\unexpanded\def\placesetup {\placelistofsorts[texcommand][\c!criterium=\v!used]}
+\unexpanded\def\placeallsetups{\placelistofsorts[texcommand][\c!criterium=\v!all ]}
+
+\let\placeeverysetup\placeallsetups
+
+%D Typesetting:
+
+\setupxml
+ [\c!method=mkiv, % mixed mode
+ \c!default=\v!hidden, % ignore elements that are not defined
+ \c!compress=\v!yes, % strip comment
+ \c!entities=\v!yes] % replace entities
+
+\newcounter\currentSETUPargument
+\newcounter\maximumSETUPargument
+
+\def\currentSETUPwidth{0pt}
+
+\startxmlsetups xml:setups:typeset
+ \getvalue{\e!start setuptext}
+ \tttf
+ \nohyphens
+ \veryraggedright
+ \doglobal\newcounter\currentSETUPargument
+ \xdef\maximumSETUPargument{\xmlcount{#1}{/arguments/*}}
+ \bgroup
+ \doif {\xmlatt{#1}{generated}} {yes} {
+ \ttsl
+ }
+ \doifelse {\xmlatt{#1}{type}} {environment} {
+ \tex{\e!start}
+ } {
+ \tex{}
+ }
+ \xmlfilter{#1}{/sequence/first()}
+ \ignorespaces
+ \egroup
+ \xmldoif{#1}{/arguments} {
+ \bgroup
+ \enablemode[setups-pass-one]
+ \doglobal\newcounter\currentSETUPargument
+ \ignorespaces
+ \xmlfilter{#1}{/arguments/text()}
+ \egroup
+ }
+ \doif {\xmlatt{#1}{type}} {environment} {
+ \bgroup
+ \hskip.5em\unknown\hskip.5em
+ \doif {\xmlatt{#1}{generated}} {yes} {
+ \ttsl
+ }
+ \tex{\e!stop}
+ \xmlfilter{#1}{/sequence/variable/first()}
+ \ignorespaces
+ \egroup
+ }
+ \endgraf
+ \xmldoif{#1}{/arguments} {
+ \bgroup
+ \enablemode[setups-pass-two]
+ \doglobal\newcounter\currentSETUPargument
+ \blank[\v!line]
+ \switchtobodyfont[small]
+ \ignorespaces\xmlfilter{#1}{/arguments/text()}\endgraf
+ \egroup
+ }
+ \getvalue{\e!stop setuptext}
+\stopxmlsetups
+
+\setupsetup
+ [\c!before=,
+ \c!after=,
+ \c!command=\setup,
+ \c!criterium=\v!used]
+
+\startxmlsetups xml:setups:resolve
+ \ignorespaces
+ \xmlfilterlist{\loadedsetups}{/interface/define[@name='\xmlatt{#1}{name}']/first()}
+\stopxmlsetups
+
+%D This is the first pass; here we generate the top line.
+
+\startxmlsetups xml:setups:define
+ \ignorespaces\xmlflush{#1}
+\stopxmlsetups
+
+\startxmlsetups xml:setups:sequence
+ \ignorespaces\xmlflush{#1}
+\stopxmlsetups
+
+\startxmlsetups xml:setups:string
+ \xmlatt{#1}{value}\ignorespaces
+\stopxmlsetups
+
+\startxmlsetups xml:setups:content \showSETUPcomponent{#1}{content} {content} \stopxmlsetups
+\startxmlsetups xml:setups:displaymath \showSETUPcomponent{#1}{displaymath}{display math}\stopxmlsetups
+\startxmlsetups xml:setups:index \showSETUPcomponent{#1}{index} {index} \stopxmlsetups
+\startxmlsetups xml:setups:math \showSETUPcomponent{#1}{math} {math} \stopxmlsetups
+\startxmlsetups xml:setups:nothing \showSETUPcomponent{#1}{nothing} {nothing} \stopxmlsetups
+\startxmlsetups xml:setups:file \showSETUPcomponent{#1}{file} {file name} \stopxmlsetups
+\startxmlsetups xml:setups:position \showSETUPcomponent{#1}{position} {position} \stopxmlsetups
+\startxmlsetups xml:setups:reference \showSETUPcomponent{#1}{reference} {reference} \stopxmlsetups
+\startxmlsetups xml:setups:csname \showSETUPcomponent{#1}{csname} {csname} \stopxmlsetups
+\startxmlsetups xml:setups:destination \showSETUPcomponent{#1}{destination}{destination} \stopxmlsetups
+\startxmlsetups xml:setups:triplet \showSETUPcomponent{#1}{triplet} {triplet} \stopxmlsetups
+\startxmlsetups xml:setups:word \showSETUPcomponent{#1}{word} {word} \stopxmlsetups
+
+\def\showSETUPcomponent#1#2#3%
+ {\doifmodeelse{setups-pass-one}
+ {\getvalue{showSETUP#2}{#1}}
+ {\simpleSETUPargument{#3}}}
+
+%D This is the second pass; here we generate the table.
+
+\unexpanded\def\startfirstSETUPcolumn#1%
+ {\bgroup
+ \advance\leftskip 2em
+ \noindent\llap{\hbox to 2em{#1\hss}}}
+
+\unexpanded\def\stopfirstSETUPcolumn
+ {\endgraf
+ \egroup}
+
+\unexpanded\def\startsecondSETUPcolumn#1#2%
+ {\bgroup
+ \advance\hangindent\dimexpr\currentSETUPwidth+2.5em\relax
+ \noindent \hbox to \hangindent{#1\hss\hbox to 2.5em{\hss#2\hss}}}
+
+\unexpanded\def\stopsecondSETUPcolumn
+ {\endgraf
+ \egroup}
+
+\def\secondSETUPcolumn#1#2%
+ {\startsecondSETUPcolumn{#1}{#2}\stopsecondSETUPcolumn}
+
+\def\previousSETUPargument{\currentSETUPargument}
+
+\startxmlsetups xml:setups:parameter:measure
+ \setbox0=\hbox{\c!setup!reserved!{\xmlatt{#1}{name}}}
+ \ifdim\wd0>\currentSETUPwidth\xdef\currentSETUPwidth{\the\wd0}\fi
+\stopxmlsetups
+
+\startxmlsetups xml:setups:assignments
+ \doifmodeelse{setups-pass-one} {
+ \showSETUPassignment{#1}
+ } {
+ \xdef\currentSETUPwidth{0pt}%
+ \bgroup
+ \xmlfilter{#1}{/parameter/command(xml:setups:parameter:measure)}
+ \egroup
+ \startfirstSETUPcolumn{\showSETUPnumber}%
+ \ignorespaces
+ \xmlflush{#1}
+ \let\previousSETUPargument\currentSETUPargument
+ \stopfirstSETUPcolumn
+ \blank[\v!halfline]
+ \ignorespaces
+ }
+\stopxmlsetups
+
+\startxmlsetups xml:setups:keywords
+ \doifmodeelse{setups-pass-one} {
+ \showSETUPkeyword{#1}
+ } {
+ \startfirstSETUPcolumn{\showSETUPnumber}%
+ \ignorespaces
+ \xmlflush{#1}
+ \let\previousSETUPargument\currentSETUPargument
+ \stopfirstSETUPcolumn
+ \blank[\v!halfline]
+ \ignorespaces
+ }
+\stopxmlsetups
+
+\startxmlsetups xml:setups:parameter
+ \startsecondSETUPcolumn{\c!setup!reserved!{\xmlatt{#1}{name}}}{=}
+ \ignorespaces
+ \xmlflush{#1}
+ \stopsecondSETUPcolumn
+ \ignorespaces
+\stopxmlsetups
+
+\startxmlsetups xml:setups:constant
+ \doifmodeelse {setups-pass-one} {
+ } {
+ \doif {\xmlatt{#1}{default}} {yes} {
+ \underbar % next needs to be {braced}
}
+ {\c!setup!reserved!{\xmlatt{#1}{type}}}
+ \space
+ \ignorespaces
+ }
+\stopxmlsetups
+
+\startxmlsetups xml:setups:variable
+ \doifmodeelse {setups-pass-one} {
+ \expanded{\setupintfont{\xmlatt{#1}{value}}}\ignorespaces
+ } {
+ \c!setup!reserved!{\xmlatt{#1}{value}}
+ \space
+ \ignorespaces
+ }
+\stopxmlsetups
+
+\startxmlsetups xml:setups:inherit
+ \secondSETUPcolumn {
+ \c!setup!text!{\getmessage{setup}{inherits}}
+ \enspace
+ \tex{}
+ \xmlatt{#1}{name}
+ } {}
+ \ignorespaces
+\stopxmlsetups
+
+\def\simpleSETUPargument#1%
+ {\startfirstSETUPcolumn{\showSETUPnumber}%
+ \c!setup!internal!{#1}%
+ \stopfirstSETUPcolumn
+ \blank[\v!halfline]
+ \ignorespaces}
+
+\c!setup!definereserved {cd:command} {\c!setup!internal!{\getmessage{setup}{command}}}
+\c!setup!definereserved {cd:dimension} {\c!setup!internal!{\getmessage{setup}{dimension}}}
+\c!setup!definereserved {cd:file} {\c!setup!internal!{\getmessage{setup}{file}}}
+\c!setup!definereserved {cd:name} {\c!setup!internal!{\getmessage{setup}{identifier}}}
+\c!setup!definereserved {cd:character} {\c!setup!internal!{\getmessage{setup}{character}}}
+\c!setup!definereserved {cd:mark} {\c!setup!internal!{\getmessage{setup}{mark}}}
+\c!setup!definereserved {cd:number} {\c!setup!internal!{\getmessage{setup}{number}}}
+\c!setup!definereserved {cd:reference} {\c!setup!internal!{\getmessage{setup}{reference}}}
+\c!setup!definereserved {cd:plural} {\c!setup!internal!{\getmessage{setup}{plural}}}
+\c!setup!definereserved {cd:singular} {\c!setup!internal!{\getmessage{setup}{singular}}}
+\c!setup!definereserved {cd:text} {\c!setup!internal!{\getmessage{setup}{text}}}
+\c!setup!definereserved {cd:formula} {\c!setup!internal!{\getmessage{setup}{formula}}}
+\c!setup!definereserved {cd:file} {\c!setup!internal!{\getmessage{setup}{file}}}
+\c!setup!definereserved {cd:matrix} {\c!setup!internal!{\getmessage{setup}{matrix}}}
+\c!setup!definereserved {cd:list} {\c!setup!internal!{\getmessage{setup}{list}}}
+\c!setup!definereserved {cd:section} {\c!setup!internal!{\getmessage{setup}{section}}}
+
+\c!setup!definereserved {cd:noargument} {\c!setup!command! {}}
+\c!setup!definereserved {cd:oneargument} {\c!setup!command! {\#1}}
+\c!setup!definereserved {cd:twoarguments} {\c!setup!command! {\#1\#2}}
+\c!setup!definereserved {cd:threearguments} {\c!setup!command! {\#1\#2\#3}}
+
+%D Auxiliary.
+
+\unexpanded\def\showSETUP#1#2#3%
+ {\bgroup
+ \doglobal\increment\currentSETUPargument
+ \setbox0=\hbox
+ {\doifelse{\xmlatt{#1}{list}}{yes}{#3}{#2}}%
+ \setbox2=\hbox to \wd0
+ {\hss
+ \raise1ex\hbox
+ {\tx\ifcase\maximumSETUPargument\relax
+ \or*\else\currentSETUPargument
+ \fi}%
+ \hss}%
+ \setbox4=\hbox to \wd0
+ {\hss
+ \lower2ex\hbox
+ \bgroup
+ \txx\doif{\xmlatt{#1}{optional}}{yes}{\c!setup!internal!{\getmessage{setup}{optional}}}%
+ \egroup
+ \hss}%
+ \ht2\ht\strutbox
+ \dp4\dp\strutbox
+ \hskip.5em\hsmash{\box0}\hsmash{\box4}\box2%
+ \egroup
+ \ignorespaces}
+
+\def\showSETUPnumber
+ {\doglobal\increment\currentSETUPargument
+ \hbox to 2em
+ {\ifcase\maximumSETUPargument\relax
+ \or*\else\currentSETUPargument
+ \fi
+ \hss}}
+
+\def\showSETUPassignment #1{\showSETUP{#1}{[.\lower.5ex\hbox{=}.]} {[..,.\lower.5ex\hbox{=}.,..]}}
+\def\showSETUPkeyword #1{\showSETUP{#1}{[...]} {[...,...]}}
+\def\showSETUPargument #1{\showSETUP{#1}{\leftargument..\rightargument} {\leftargument..,...,..\rightargument}}
+\def\showSETUPdisplaymath#1{\showSETUP{#1}{\$\$...\$\$} {\$\$...\$\$}}
+\def\showSETUPindex #1{\showSETUP{#1}{\leftargument...\rightargument} {\leftargument..+...+..\rightargument}}
+\def\showSETUPmath #1{\showSETUP{#1}{\$...\$} {\$...\$}}
+\def\showSETUPnothing #1{\showSETUP{#1}{...} {}}
+\def\showSETUPfile #1{\showSETUP{#1}{~...~} {}}
+\def\showSETUPposition #1{\showSETUP{#1}{(...)} {(...,...)}}
+\def\showSETUPreference #1{\showSETUP{#1}{[...]} {[...,...]}}
+\def\showSETUPcsname #1{\showSETUP{#1}{{\c!setup!command!{}}} {}}
+\def\showSETUPdestination#1{\showSETUP{#1}{[\leftargument..[ref]\rightargument]}{[..,\leftargument..[ref,..]\rightargument,..]}}
+\def\showSETUPtriplet #1{\showSETUP{#1}{[x:y:z=]} {[x:y:z=,..]}}
+\def\showSETUPword #1{\showSETUP{#1}{\leftargument...\rightargument} {\leftargument.. ... ..\rightargument}}
+\def\showSETUPcontent #1{\showSETUP{#1}{\leftargument...\rightargument} {\leftargument.. ... ..\rightargument}}
- function document.setups.load(filename)
- filename = resolvers.find_file(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\mkshowusedsetups {\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
+\protect \endinput
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 6fcc7f9341c..920fd7426d0 100644
--- a/Master/texmf-dist/tex/context/base/x-set-11.tex
+++ b/Master/texmf-dist/tex/context/base/x-set-11.tex
@@ -12,807 +12,99 @@
%C therefore copyrighted by \PRAGMA. See mreadme.pdf for
%C details.
-% module x-set-02 loads the mapping, after that we can say:
-%
-% texmfstart texexec --int=nl --pdf --global --result=setup-nl x-set-12
-%
-% \getinterfacecomponent{constant|variable|string}{tag}
-
-\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
-
-\def\setupnumfont {}
-\def\setuptxtfont {}
-\def\setupintfont#1{\uppercase{#1}}
-\def\setupvarfont {\sl}
-\def\setupoptfont {\sl}
-\def\setupalwcolor {}
-\def\setupoptcolor {darkgray}
-
-\defineXMLenvironmentsave [cd:content] [list=,state=]
- {\simpleSETUPargument{content}\blank[\v!halfline]\ignorespaces}
- {\ignorespaces}
-
-\startmessages dutch library: setup
- title: setup
- formula: formule
- number: getal
- list: lijst
- dimension: maat
- mark: markering
- reference: verwijzing
- command: commando
- file: file
- name: naam
- identifier: naam
- text: tekst
- section: sectie
- singular: naam enkelvoud
- plural: naam meervoud
- matrix: n*m
- see: zie
- inherits: erft van
- 1: de karakters < en > zijn globaal actief!
- 2: -- wordt verwerkt
- 3: -- is niet gedefinieerd
- 4: -- wordt nogmaals verwerkt
- optional: optioneel
- displaymath: formule
- index: ingang
- math: formule
- nothing: leeg
- file: file
- position: positie
- reference: verwijzing
- csname: naam
- destination: bestemming
- triplet: triplet
- word: woord
- content: tekst
-\stopmessages
-
-\startmessages english library: setup
- title: setup
- formula: formula
- number: number
- list: list
- dimension: dimension
- mark: mark
- reference: reference
- command: command
- file: file
- name: name
- identifier: identifier
- text: text
- section: section
- singular: singular name
- plural: plural name
- matrix: n*m
- see: see
- inherits: inherits from
- 1: the characters < and > are globally active!
- 2: -- is processed
- 3: -- is undefined
- 4: -- is processed again
- optional: optional
- displaymath: formula
- index: entry
- math: formula
- nothing: empty
- file: file
- position: position
- reference: reference
- csname: name
- destination: destination
- triplet: triplet
- word: word
- content: text
-\stopmessages
-
-\startmessages german library: setup
- title: Setup
- formula: Formel
- number: Nummer
- list: Liste
- dimension: Dimension
- mark: Beschriftung
- reference: Referenz
- command: Befehl
- file: Datei
- name: Name
- identifier: Name
- text: Text
- section: Abschnitt
- singular: singular
- plural: plural
- matrix: n*m
- see: siehe
- inherits: inherits from
- 1: Die Zeichen < und > gelten global!
- 2: -- wird verarbeitet
- 3: -- ist undefiniert
- 4: -- ist mehrmals verarbeitet
- optional: optioneel
- displaymath: formula
- index: entry
- math: formula
- nothing: empty
- file: file
- position: position
- reference: reference
- csname: name
- destination: destination
- triplet: triplet
- word: word
- content: text
-\stopmessages
-
-\startmessages czech library: setup
- title: setup
- formula: rovnice
- number: cislo
- list: seznam
- dimension: dimenze
- mark: znacka
- reference: reference
- command: prikaz
- file: soubor
- name: jmeno
- identifier: jmeno
- text: text
- section: sekce
- singular: jmeno v singularu
- plural: jmeno v pluralu
- matrix: n*m
- see: viz
- inherits: inherits from
- 1: znaky < a > jsou globalne aktivni!
- 2: -- je zpracovano
- 3: -- je nedefinovano
- 4: -- je zpracovano znovu
- optional: optioneel
- displaymath: formula
- index: entry
- math: formula
- nothing: empty
- file: file
- position: position
- reference: reference
- csname: name
- destination: destination
- triplet: triplet
- word: word
- content: text
-\stopmessages
-
-\startmessages italian library: setup
- title: setup
- formula: formula
- number: number
- list: list
- dimension: dimension
- mark: mark
- reference: reference
- command: command
- file: file
- name: name
- identifier: name
- text: text
- section: section
- singular: singular name
- plural: plural name
- matrix: n*m
- see: see
- inherits: inherits from
- 1: the characters < and > are globally active!
- 2: -- is processed
- 3: -- is undefined
- 4: -- is processed again
- optional: optioneel
- displaymath: formula
- index: entry
- math: formula
- nothing: empty
- file: file
- position: position
- reference: reference
- csname: name
- destination: destination
- triplet: triplet
- word: word
- content: text
-\stopmessages
-
-\startmessages romanian library: setup
- title: setari
- formula: formula
- number: numar
- list: lista
- dimension: dimensiune
- mark: marcaj
- reference: referinta
- command: comanda
- file: fisier
- name: nume
- identifier: nume
- text: text
- section: sectiune
- singular: nume singular
- plural: nume pluram
- matrix: n*m
- see: vezi
- inherits: inherits from
- 1: caracterele < si > sunt active global!
- 2: este procesat --
- 3: -- este nedefinit
- 4: -- este procesat din nou
- optional: optioneel
- displaymath: formula
- index: entry
- math: formula
- nothing: empty
- file: file
- position: position
- reference: reference
- csname: name
- destination: destination
- triplet: triplet
- word: word
- content: text
-\stopmessages
-
-\startmessages french library: setup
- title: réglage
- formula: formule
- number: numéro
- list: liste
- dimension: dimension
- mark: marquage
- reference: reference
- command: commande
- file: fichier
- name: nom
- identifier: identificateur
- text: texte
- section: section
- singular: nom singulier
- plural: nom pluriel
- matrix: n*m
- see: vois
- inherits: herite de
- 1: les caractères < et > sont globalement actifs !
- 2: -- est traité
- 3: -- n'est pas défini
- 4: -- est traité de nouveau
- optional: optionel
- displaymath: formule
- index: entrée
- math: formule
- nothing: vide
- file: fichier
- position: position
- reference: réference
- csname: nom
- destination: destination
- triplet: triplet
- word: mot
- content: texte
-\stopmessages
-
-\def\c!setup!internal!#1%
- {{\setmessagetext{setup}{#1}%
- \expanded{\setupintfont{\currentmessagetext}}}}
-
-\def\c!setup!text!#1%
- {{\setmessagetext{setup}{#1}%
- \setupvarfont{\currentmessagetext}}}
-
-\def\c!setup!command!#1%
- {{\setupvarfont{\texescape...#1}}}
-
-\def\??stp{@@stp}
-
-\defineregister
- [texmacro]
- [texmacros]
-
-\definesorting
- [texcommand]
- [texcommands]
-
-\setupsorting
- [texcommand]
- [\c!command=\@@stpcommand,
- \c!criterium=\@@stpcriterium]
-
-\definesorting
- [eachtexcommand]
- [alltexcommands]
-
-\setupsorting
- [eachtexcommand]
- [\c!command=\@@stpcommand,
- \c!criterium=\v!all]
-
-\pushmacro\setuptext
-
-\defineframedtext
- [setuptext]
- [\c!width=\hsize,
- \c!height=\v!fit,
- \c!align=\v!right,
- \c!offset=0.75em]
-
-\popmacro\setuptext
-
-\newif\ifshortsetup
-
-\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
- [\c!before=,
- \c!after=,
- \c!command=\setup,
- \c!criterium=\v!used]
-
-% verwijzing: 0 geen verwijzingen plaatsen / wel genereren
-% 1 alleen bij zie plaatsen / wel genereren
-% 2 alle verwijzingen plaatsen / niet genereren
-% 3 bij zie commando klikken / wel genereren
-
-\setupsetup
- [\c!reference=0]
-
-\def\placesetup
- {\bgroup
- \mkshowusedsetups
- \egroup}
-
-\def\placeallsetups
- {\bgroup
- \setupsetup[\c!reference=2]%
- \setupreferencing[\c!state=\v!stop]%
- \mkshowallsetups
- \egroup}
-
-\let\placeeverysetup\placeallsetups
-
-\let\plaatssetup \placesetup
-\let\plaatselkesetup\placeallsetups
-
-% we use :1 as fallback
-%
-% \setup{setupinterlinespace}
-% \setup{setupinterlinespace:1}
-% \setup{setupinterlinespace:2}
-
-
-\defineXMLenvironment [cd:command] [name=,type=,generated=,interactive=,variant=]
- {}
- {\showSETUPrecord}
-
-\def\showSETUPrecord
- {\getvalue{\e!start setuptext}
- \tttf
- \nohyphens
- \veryraggedright
- \startXMLmapping [one]
- \doglobal\newcounter\currentSETUPargument
- \global\let\maximumSETUPargument\currentSETUPargument
- \bgroup
- \doif{\XMLpar{cd:command}{generated}{}}{yes}{\ttsl}%
- \doifelseXMLop{type}{environment}
- {\tex{\e!start}}{\tex{}}\ignorespaces
- \XMLflush{cd:sequence}\ignorespaces
- \egroup
- \doifelseXMLempty{cd:arguments}
- {}
- {\bgroup
- \setbox0=\hbox{\XMLflush{cd:arguments}}%
- \global\let\maximumSETUPargument\currentSETUPargument
- \doglobal\newcounter\currentSETUPargument
- \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
- %\bgroup
- % \tx
- % \doif{\XMLpar{cd:command}{interactive}{}}{yes} {\quad INTERACTIVE}%
- % \doif{\XMLpar{cd:command}{interactive}{}}{exclusive}{\quad INTERACTIVE ONLY}%
- %\egroup
- \startXMLmapping [two]
- \bgroup
- \doglobal\newcounter\currentSETUPargument
- \blank[\v!line]
- \switchtobodyfont[small] % kan sneller
- \ignorespaces\XMLflush{cd:arguments}\endgraf
- \egroup
- \stopXMLmapping}
- \stopXMLmapping
- \getvalue{\e!stop setuptext}}
-
-\defineXMLenvironmentsave [cd:sequence] \ignorespaces \ignorespaces
-\defineXMLenvironmentsave [cd:arguments] \ignorespaces \ignorespaces
-
-%D This is the first pass; here we generate the top line.
-
-\newcounter\currentSETUPargument
-\def\currentSETUPwidth{0pt}
-
-% environmentsave ?
-
-\startXMLmapping [one]
-
-\defineXMLenvironmentsave [cd:string] [value=]
- {\getinterfacecomponent{string}{\XMLop{value}}\ignorespaces}
- {\ignorespaces}
-
-\defineXMLenvironmentsave [cd:variable] [value=]
- {{\expanded{\setupintfont{\getinterfacecomponent{variable}{\XMLop{value}}}}}\ignorespaces}
- {\ignorespaces}
-
-% moet een standaard type worden
-
-\defineXMLenvironmentsave [cd:assignments] [list=,state=]
- {\showSETUPassignment\ignorespaces} {\ignorespaces}
-
-\defineXMLenvironmentsave [cd:keywords] [list=,state=]
- {\showSETUPkeyword\ignorespaces} {\ignorespaces}
-
-\defineXMLenvironmentsave [cd:content] [list=,state=]
- {\showSETUPcontent\ignorespaces} {\ignorespaces}
-
-\defineXMLenvironmentsave [cd:displaymath] [list=,state=]
- {\showSETUPdisplaymath\ignorespaces} {\ignorespaces}
-
-\defineXMLenvironmentsave [cd:index] [list=,state=]
- {\showSETUPindex\ignorespaces} {\ignorespaces}
-
-\defineXMLenvironmentsave [cd:math] [list=,state=]
- {\showSETUPmath\ignorespaces} {\ignorespaces}
-
-\defineXMLenvironmentsave [cd:nothing] [list=,state=]
- {\showSETUPnothing\ignorespaces} {\ignorespaces}
-
-\defineXMLenvironmentsave [cd:file] [list=,state=]
- {\showSETUPfile\ignorespaces} {\ignorespaces}
-
-\defineXMLenvironmentsave [cd:position] [list=,state=]
- {\showSETUPposition\ignorespaces} {\ignorespaces}
-
-\defineXMLenvironmentsave [cd:reference] [list=,state=]
- {\showSETUPreference\ignorespaces} {\ignorespaces}
-
-\defineXMLenvironmentsave [cd:csname] [list=,state=]
- {\showSETUPcsname\ignorespaces} {\ignorespaces}
-
-\defineXMLenvironmentsave [cd:destination] [list=,state=]
- {\showSETUPdestination\ignorespaces} {\ignorespaces}
-
-\defineXMLenvironmentsave [cd:triplet] [list=,state=]
- {\showSETUPtriplet\ignorespaces} {\ignorespaces}
-
-\defineXMLenvironmentsave [cd:word] [list=,state=]
- {\showSETUPword\ignorespaces} {\ignorespaces}
-
-\stopXMLmapping
-
-%D This is the second pass; here we generate the table.
-
-\startXMLmapping [two]
-
-\def\startfirstSETUPcolumn#1%
- {\bgroup
- \advance\leftskip 2em
- \noindent\llap{\hbox to 2em{#1\hss}}}
-
-\def\stopfirstSETUPcolumn
- {\endgraf
- \egroup}
-
-\def\startsecondSETUPcolumn#1#2%
- {\bgroup
- \advance\hangindent \currentSETUPwidth
- \advance\hangindent 2.5em
- \noindent \hbox to \hangindent{#1\hss\hbox to 2.5em{\hss#2\hss}}}
-
-\def\stopsecondSETUPcolumn
- {\endgraf
- \egroup}
-
-\def\secondSETUPcolumn#1#2%
- {\startsecondSETUPcolumn{#1}{#2}\stopsecondSETUPcolumn}
-
-\def\previousSETUPargument{\currentSETUPargument}
-
-\defineXMLenvironmentsave [cd:assignments]
- {}
- {\xdef\currentSETUPwidth{0pt}%
- \bgroup
- \defineXMLenvironment [cd:parameter] [name=]
- {\setbox0=\hbox{\potentialXMLentity{\getinterfacecomponent{constant}{\XMLop{name}}}}%
- \ifdim\wd0>\currentSETUPwidth\xdef\currentSETUPwidth{\the\wd0}\fi}%
- {}
- \setbox0=\vbox{\XMLflush{cd:assignments}}%
- \egroup
- \startfirstSETUPcolumn{\showSETUPnumber}%
- \doifelseXMLempty{cd:assignments}
- {\secondSETUPcolumn{\c!setup!text!{see} \previousSETUPargument}{}}
- {\ignorespaces
- \XMLflush{cd:assignments}%
- \let\previousSETUPargument\currentSETUPargument}%
- \stopfirstSETUPcolumn
- \blank[\v!halfline]
- \ignorespaces}
-
-\defineXMLenvironmentsave [cd:keywords] [optional=no]
+\endinput
+
+% Old code, a mixture of loading in mkiv and processing in mkii.
+
+\startluacode
+ do
+ document = document or { }
+
+ document.setups = {
+ loaded = { },
+ root = nil,
+ used = { },
+ }
+
+ function document.setups.load(filename)
+ filename = resolvers.find_file(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\mkshowusedsetups {\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=]
{}
- {\startfirstSETUPcolumn{\showSETUPnumber}%
- \doifelseXMLempty{cd:keywords}
- {\secondSETUPcolumn{see \previousSETUPargument}{}}
- {\ignorespaces
- \XMLflush{cd:keywords}%
- \let\previousSETUPargument\currentSETUPargument}%
- \stopfirstSETUPcolumn
- \blank[\v!halfline]
- \ignorespaces}
-
-\defineXMLenvironment [cd:parameter] [name=]
- {\startsecondSETUPcolumn{\potentialXMLentity{\getinterfacecomponent{constant}{\XMLop{name}}}}{=}%
- \ignorespaces}
- {\stopsecondSETUPcolumn
- \ignorespaces}
-
-\defineXMLenvironmentsave [cd:constant] [type=,default=]
- {\doifXMLop{default}{yes}{\underbar}%
- {\potentialXMLentity{\getinterfacecomponent{variable}{\XMLop{type}}}}\quad\ignorespaces}
- {\ignorespaces}
-
-\defineXMLenvironmentsave [cd:variable] [type=]
- {\potentialXMLentity{\getinterfacecomponent{variable}{\XMLop{type}}}\quad\ignorespaces}
- {\ignorespaces}
-
-\defineXMLenvironmentsave [cd:inherit] [name=]
- {\secondSETUPcolumn{\c!setup!text!{inherits} \tex{}\getinterfacecomponent{string}{\XMLop{name}}}{}\ignorespaces}
- {\ignorespaces}
-
-\def\simpleSETUPargument#1%
- {\startfirstSETUPcolumn{\showSETUPnumber}%
- \c!setup!internal!{#1}%
- \stopfirstSETUPcolumn}
-
-\defineXMLenvironmentsave [cd:content] [list=,state=]
- {\simpleSETUPargument{content}\blank[\v!halfline]\ignorespaces}
- {\ignorespaces}
-
-\defineXMLenvironmentsave [cd:displaymath] [list=,state=]
- {\simpleSETUPargument{display math}\blank[\v!halfline]\ignorespaces}
- {\ignorespaces}
-
-\defineXMLenvironmentsave [cd:index] [list=,state=]
- {\simpleSETUPargument{index}\blank[\v!halfline]\ignorespaces}
- {\ignorespaces}
-
-\defineXMLenvironmentsave [cd:math] [list=,state=]
- {\simpleSETUPargument{math}\blank[\v!halfline]\ignorespaces}
- {\ignorespaces}
-
-\defineXMLenvironmentsave [cd:nothing] [list=,state=]
- {\simpleSETUPargument{nothing}\blank[\v!halfline]\ignorespaces}
- {\ignorespaces}
-
-\defineXMLenvironmentsave [cd:file] [list=,state=]
- {\simpleSETUPargument{file name}\blank[\v!halfline]\ignorespaces}
- {\ignorespaces}
-
-\defineXMLenvironmentsave [cd:position] [list=,state=]
- {\simpleSETUPargument{position}\blank[\v!halfline]\ignorespaces}
- {\ignorespaces}
-
-\defineXMLenvironmentsave [cd:reference] [list=,state=]
- {\simpleSETUPargument{reference}\blank[\v!halfline]\ignorespaces}
- {\ignorespaces}
-
-\defineXMLenvironmentsave [cd:csname] [list=,state=]
- {\simpleSETUPargument{csname}\blank[\v!halfline]\ignorespaces}
- {\ignorespaces}
-
-\defineXMLenvironmentsave [cd:destination] [list=,state=]
- {\simpleSETUPargument{destination}\blank[\v!halfline]\ignorespaces}
- {\ignorespaces}
-
-\defineXMLenvironmentsave [cd:triplet] [list=,state=]
- {\simpleSETUPargument{triplet}\blank[\v!halfline]\ignorespaces}
- {\ignorespaces}
-
-\defineXMLenvironmentsave [cd:word] [list=,state=]
- {\simpleSETUPargument{word}\blank[\v!halfline]\ignorespaces}
- {\ignorespaces}
-
-\stopXMLmapping
-
-\defineXMLentity [cd:command] {\c!setup!internal!{command}}
-\defineXMLentity [cd:dimension] {\c!setup!internal!{dimension}}
-\defineXMLentity [cd:file] {\c!setup!internal!{file}}
-\defineXMLentity [cd:name] {\c!setup!internal!{identifier}}
-\defineXMLentity [cd:character] {\c!setup!internal!{character}}
-\defineXMLentity [cd:mark] {\c!setup!internal!{mark}}
-\defineXMLentity [cd:number] {\c!setup!internal!{number}}
-\defineXMLentity [cd:reference] {\c!setup!internal!{reference}}
-\defineXMLentity [cd:plural] {\c!setup!internal!{plural}}
-\defineXMLentity [cd:singular] {\c!setup!internal!{singular}}
-\defineXMLentity [cd:text] {\c!setup!internal!{text}}
-\defineXMLentity [cd:formula] {\c!setup!internal!{formula}}
-\defineXMLentity [cd:file] {\c!setup!internal!{file}}
-\defineXMLentity [cd:matrix] {\c!setup!internal!{matrix}}
-\defineXMLentity [cd:list] {\c!setup!internal!{list}}
-\defineXMLentity [cd:section] {\c!setup!internal!{section}}
-
-\defineXMLentity [cd:noargument] {\c!setup!command!{}}
-\defineXMLentity [cd:oneargument] {\c!setup!command!{\#1}}
-\defineXMLentity [cd:twoarguments] {\c!setup!command!{\#1\#2}}
-\defineXMLentity [cd:threearguments] {\c!setup!command!{\#1\#2\#3}}
-
-%D Todo:
-
-\defineXMLprocess [cd:choice]
-
-%D Auxiliary.
-
-\unexpanded\def\showSETUP#1#2%
- {\bgroup
- \doglobal\increment\currentSETUPargument
- \setbox0=\hbox
- {\doifelseXMLop{list}{yes}{#2}{#1}}%
- \setbox2=\hbox to \wd0
- {\hss
- \raise1ex\hbox
- {\tx\ifcase\maximumSETUPargument\relax
- \or*\else\currentSETUPargument
- \fi}%
- \hss}%
- \setbox4=\hbox to \wd0
- {\hss
- \lower2ex\hbox
- \bgroup
- \txx\doifXMLop{optional}{yes}{\c!setup!internal!{optional}}%
- \egroup
- \hss}%
- \ht2\ht\strutbox
- \dp4\dp\strutbox
- \hskip.5em\hsmash{\box0}\hsmash{\box4}\box2%
- \egroup}
-
-\def\showSETUPnumber
- {\doglobal\increment\currentSETUPargument
- \hbox to 2em
- {\ifcase\maximumSETUPargument\relax
- \or*\else\currentSETUPargument
- \fi
- \hss}}
-
-\def\showSETUPassignment {\showSETUP
- {[.\lower.5ex\hbox{=}.]}
- {[..,.\lower.5ex\hbox{=}.,..]}}
-
-\def\showSETUPkeyword {\showSETUP
- {[...]}
- {[...,...]}}
-
-\def\showSETUPargument {\showSETUP
- {\leftargument..\rightargument}
- {\leftargument..,...,..\rightargument}}
-
-\def\showSETUPdisplaymath {\showSETUP
- {\$\$...\$\$}
- {\$\$...\$\$}}
-
-\def\showSETUPindex {\showSETUP
- {\leftargument...\rightargument}
- {\leftargument..+...+..\rightargument}}
-
-\def\showSETUPmath {\showSETUP
- {\$...\$}
- {\$...\$}}
-
-\def\showSETUPnothing {\showSETUP
- {...}
- {}}
-
-\def\showSETUPfile {\showSETUP
- {~...~}
- {}}
-
-\def\showSETUPposition {\showSETUP
- {(...)}
- {(...,...)}}
-
-\def\showSETUPreference {\showSETUP
- {[...]}
- {[...,...]}}
-
-\def\showSETUPcsname {\showSETUP
- {{\c!setup!command!{}}}
- {}}
-
-\def\showSETUPdestination {\showSETUP
- {[\leftargument..[ref]\rightargument]}
- {[..,\leftargument..[ref,..]\rightargument,..]}}
-
-\def\showSETUPtriplet {\showSETUP
- {[x:y:z=]}
- {[x:y:z=,..]}}
-
-\def\showSETUPword {\showSETUP
- {\leftargument...\rightargument}
- {\leftargument.. ... ..\rightargument}}
-
-\def\showSETUPcontent {\showSETUP
- {\leftargument...\rightargument}
- {\leftargument.. ... ..\rightargument}}
-
-%\def\c!par!{\c!setup!internal!{endofpar}}
-%\def\c!repeat!{\c!opt!{{\setupvarfont n}*}}
-%\showSETUP\def\c!par!{\texescape par}
-%\showSETUP\def\c!sep!{\texescape\texescape}
-%\def\c!par!{\addtypespec{delimiter}{par}} % \par
-%\def\c!sep!{\addtypespec{separator}{backslash}} % \\
-%\def\c!repeat!{}
-%\def\c!tex!#1{\addtypespec{command}{#1}\doanother{tex}}
-
-\startXMLmapping[zero]
-
-\defineXMLenvironmentsave [cd:command] [name=,type=,generated=,interactive=,variant=]
- {}
- {\doifelseXMLop{type}{environment}
- {\edef\currentSETUPname{start\getinterfacecomponent{string}{\XMLop{name}}}}
- {\edef\currentSETUPname{\getinterfacecomponent{string}{\XMLop{name}}}}%
- \doifsomething{\XMLop{variant}}
- {\edef\currentSETUPname{\currentSETUPname:\XMLop{variant}}}% like setupinterlinespace:1
- \doifXMLop{generated}{yes}
- {\edef\currentSETUPname{\currentSETUPname*}}%
- \doglobal\saveXMLdatainelement{stp:\currentSETUPname}{cd:command}{cd:command}%
- \expanded{\eachtexcommand[stp:x:\currentSETUPname]{\currentSETUPname}}%
- \expanded{\texcommand [stp:y:\currentSETUPname]{\currentSETUPname}}}
-
-\stopXMLmapping
-
-\def\loadsetups{\complexorsimple\loadsetups}
-
-\def\simpleloadsetups
- {\doifnotmode{no-setup-main}
- {\complexloadsetups[cont-en.xml]}}
-
-\def\complexloadsetups[#1]%
- {\doifsomething{#1}{\mkloadsetups{#1}}}
-\defineXMLsingular [cd:include] [file=]
- {\complexloadsetups[\XMLop{file}]}
+\defineXMLsingular [cd:resolve] [name=]
+ {\enableXML\ignorespaces\ctxlua{document.setups.resolve("\XMLop{name}")}}
-\protect \endinput
+\endinput
diff --git a/Master/texmf-dist/tex/context/base/x-set-12.tex b/Master/texmf-dist/tex/context/base/x-set-12.tex
index 2659df0d86e..d7990143365 100644
--- a/Master/texmf-dist/tex/context/base/x-set-12.tex
+++ b/Master/texmf-dist/tex/context/base/x-set-12.tex
@@ -16,7 +16,10 @@
\unprotect
-\loadsetups
+% \starttext
+% \setup{installlanguage}
+% \placesetup
+% \stoptext
\definecolor[TitleColor][r=.375,g=.125,b=.125]
\definecolor[TitleColor][r=.125,g=.375,b=.125]
@@ -32,6 +35,14 @@
\definecolor[TitleColor][r=.15,g=.20,b=.25]
\definecolor[TitleColor][r=.15,g=.25,b=.20]
+\startinterface english \loadsetups[cont-en.xml] \stopinterface
+\startinterface dutch \loadsetups[cont-nl.xml] \stopinterface
+\startinterface german \loadsetups[cont-de.xml] \stopinterface
+\startinterface french \loadsetups[cont-fr.xml] \stopinterface
+\startinterface italian \loadsetups[cont-it.xml] \stopinterface
+\startinterface czech \loadsetups[cont-cs.xml] \stopinterface
+\startinterface romanian \loadsetups[cont-ro.xml] \stopinterface
+
\startinterface dutch \definecolor[LocalColor][r=.75,g=.25,b=.25] \stopinterface
\startinterface english \definecolor[LocalColor][r=.25,g=.75,b=.25] \stopinterface
\startinterface german \definecolor[LocalColor][r=.25,g=.25,b=.75] \stopinterface
@@ -61,7 +72,7 @@
\definecolor [lightgray] [s=.9]
\definecolor [darkgray] [s=.1]
-\usetypescript[palatino][\defaultencoding]
+\usetypescript[palatino]
\setupbodyfont[palatino,9pt]
\setupcolors
@@ -181,9 +192,9 @@
\startmakeup[\v!standard]
\dontcomplain
+ \setupalign[\v!left]
\startcolor[TitleColor]
\definedfont[RegularBold at 100pt]\setstrut
- \setupalign[\v!left]
\strut Con\TeX t \par
\definedfont[RegularBold at 50pt]\setstrut
\setups[text:commands]
diff --git a/Master/texmf-dist/tex/context/base/x-set-99.tex b/Master/texmf-dist/tex/context/base/x-set-99.tex
new file mode 100644
index 00000000000..64d2b1db385
--- /dev/null
+++ b/Master/texmf-dist/tex/context/base/x-set-99.tex
@@ -0,0 +1,283 @@
+%D \module
+%D [ file=x-set-99,
+%D version=2004.10.31,
+%D remark=setupx.tex: 1998.07.20 and later,
+%D title=\CONTEXT\ Setup Definitions,
+%D subtitle=Macro 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.
+
+% shared list
+
+\startmessages dutch library: setup
+ title: setup
+ formula: formule
+ number: getal
+ list: lijst
+ dimension: maat
+ mark: markering
+ reference: verwijzing
+ command: commando
+ file: file
+ name: naam
+ identifier: naam
+ text: tekst
+ section: sectie
+ singular: naam enkelvoud
+ plural: naam meervoud
+ matrix: n*m
+ see: zie
+ inherits: erft van
+ 1: de karakters < en > zijn globaal actief!
+ 2: -- wordt verwerkt
+ 3: -- is niet gedefinieerd
+ 4: -- wordt nogmaals verwerkt
+ optional: optioneel
+ displaymath: formule
+ index: ingang
+ math: formule
+ nothing: leeg
+ file: file
+ position: positie
+ reference: verwijzing
+ csname: naam
+ destination: bestemming
+ triplet: triplet
+ word: woord
+ content: tekst
+\stopmessages
+
+\startmessages english library: setup
+ title: setup
+ formula: formula
+ number: number
+ list: list
+ dimension: dimension
+ mark: mark
+ reference: reference
+ command: command
+ file: file
+ name: name
+ identifier: identifier
+ text: text
+ section: section
+ singular: singular name
+ plural: plural name
+ matrix: n*m
+ see: see
+ inherits: inherits from
+ 1: the characters < and > are globally active!
+ 2: -- is processed
+ 3: -- is undefined
+ 4: -- is processed again
+ optional: optional
+ displaymath: formula
+ index: entry
+ math: formula
+ nothing: empty
+ file: file
+ position: position
+ reference: reference
+ csname: name
+ destination: destination
+ triplet: triplet
+ word: word
+ content: text
+\stopmessages
+
+\startmessages german library: setup
+ title: Setup
+ formula: Formel
+ number: Nummer
+ list: Liste
+ dimension: Dimension
+ mark: Beschriftung
+ reference: Referenz
+ command: Befehl
+ file: Datei
+ name: Name
+ identifier: Name
+ text: Text
+ section: Abschnitt
+ singular: singular
+ plural: plural
+ matrix: n*m
+ see: siehe
+ inherits: inherits from
+ 1: Die Zeichen < und > gelten global!
+ 2: -- wird verarbeitet
+ 3: -- ist undefiniert
+ 4: -- ist mehrmals verarbeitet
+ optional: optioneel
+ displaymath: formula
+ index: entry
+ math: formula
+ nothing: empty
+ file: file
+ position: position
+ reference: reference
+ csname: name
+ destination: destination
+ triplet: triplet
+ word: word
+ content: text
+\stopmessages
+
+\startmessages czech library: setup
+ title: setup
+ formula: rovnice
+ number: cislo
+ list: seznam
+ dimension: dimenze
+ mark: znacka
+ reference: reference
+ command: prikaz
+ file: soubor
+ name: jmeno
+ identifier: jmeno
+ text: text
+ section: sekce
+ singular: jmeno v singularu
+ plural: jmeno v pluralu
+ matrix: n*m
+ see: viz
+ inherits: inherits from
+ 1: znaky < a > jsou globalne aktivni!
+ 2: -- je zpracovano
+ 3: -- je nedefinovano
+ 4: -- je zpracovano znovu
+ optional: optioneel
+ displaymath: formula
+ index: entry
+ math: formula
+ nothing: empty
+ file: file
+ position: position
+ reference: reference
+ csname: name
+ destination: destination
+ triplet: triplet
+ word: word
+ content: text
+\stopmessages
+
+\startmessages italian library: setup
+ title: setup
+ formula: formula
+ number: number
+ list: list
+ dimension: dimension
+ mark: mark
+ reference: reference
+ command: command
+ file: file
+ name: name
+ identifier: name
+ text: text
+ section: section
+ singular: singular name
+ plural: plural name
+ matrix: n*m
+ see: see
+ inherits: inherits from
+ 1: the characters < and > are globally active!
+ 2: -- is processed
+ 3: -- is undefined
+ 4: -- is processed again
+ optional: optioneel
+ displaymath: formula
+ index: entry
+ math: formula
+ nothing: empty
+ file: file
+ position: position
+ reference: reference
+ csname: name
+ destination: destination
+ triplet: triplet
+ word: word
+ content: text
+\stopmessages
+
+\startmessages romanian library: setup
+ title: setari
+ formula: formula
+ number: numar
+ list: lista
+ dimension: dimensiune
+ mark: marcaj
+ reference: referinta
+ command: comanda
+ file: fisier
+ name: nume
+ identifier: nume
+ text: text
+ section: sectiune
+ singular: nume singular
+ plural: nume pluram
+ matrix: n*m
+ see: vezi
+ inherits: inherits from
+ 1: caracterele < si > sunt active global!
+ 2: este procesat --
+ 3: -- este nedefinit
+ 4: -- este procesat din nou
+ optional: optioneel
+ displaymath: formula
+ index: entry
+ math: formula
+ nothing: empty
+ file: file
+ position: position
+ reference: reference
+ csname: name
+ destination: destination
+ triplet: triplet
+ word: word
+ content: text
+\stopmessages
+
+\startmessages french library: setup
+ title: réglage
+ formula: formule
+ number: numéro
+ list: liste
+ dimension: dimension
+ mark: marquage
+ reference: reference
+ command: commande
+ file: fichier
+ name: nom
+ identifier: identificateur
+ text: texte
+ section: section
+ singular: nom singulier
+ plural: nom pluriel
+ matrix: n*m
+ see: vois
+ inherits: herite de
+ 1: les caractères < et > sont globalement actifs !
+ 2: -- est traité
+ 3: -- n'est pas défini
+ 4: -- est traité de nouveau
+ optional: optionel
+ displaymath: formule
+ index: entrée
+ math: formule
+ nothing: vide
+ file: fichier
+ position: position
+ reference: réference
+ csname: nom
+ destination: destination
+ triplet: triplet
+ word: mot
+ content: texte
+\stopmessages
+
+\endinput
diff --git a/Master/texmf-dist/tex/context/base/x-xtag.mkiv b/Master/texmf-dist/tex/context/base/x-xtag.mkiv
new file mode 100644
index 00000000000..d7e2f25595d
--- /dev/null
+++ b/Master/texmf-dist/tex/context/base/x-xtag.mkiv
@@ -0,0 +1,23 @@
+%D \module
+%D [ file=x-xtag,
+%D version=2009.09.23,
+%D title=\CONTEXT\ Modules,
+%D subtitle=\XML\ stream handler,
+%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.
+
+\ifdefined\XMLbanner \endinput \fi
+
+\loadcorefile{xtag-ini}
+\loadcorefile{xtag-ext}
+\loadcorefile{xtag-exp}
+\loadcorefile{xtag-pre} % has old encoding code
+\loadcorefile{xtag-xsd} % will go away (stub anyway)
+\loadcorefile{xtag-rng} % will go away (stub anyway)
+
+\endinput
diff --git a/Master/texmf-dist/tex/context/bib/bibl-apa-de.tex b/Master/texmf-dist/tex/context/bib/bibl-apa-de.tex
index 8f8be59fbbf..afeebd260b3 100644
--- a/Master/texmf-dist/tex/context/bib/bibl-apa-de.tex
+++ b/Master/texmf-dist/tex/context/bib/bibl-apa-de.tex
@@ -108,7 +108,7 @@
\def\insertchap#1#2#3%
{\insertchapter
- {#1\insertbibtype{}{\ }{chapter\ }}{#2}%
+ {#1\insertbibtype{}{\ }{Kapitel\ }}{#2}%
{#3}}
\def\insertpublisher#1#2#3%
@@ -383,4 +383,4 @@
\insertnote{ }{.}{}%
}
-\protect \ No newline at end of file
+\protect
diff --git a/Master/texmf-dist/tex/context/bib/t-bib.mkii b/Master/texmf-dist/tex/context/bib/t-bib.mkii
deleted file mode 100644
index ac34947257a..00000000000
--- a/Master/texmf-dist/tex/context/bib/t-bib.mkii
+++ /dev/null
@@ -1,5 +0,0 @@
-% some code will move here
-
-\unprotect
-
-\protect \endinput
diff --git a/Master/texmf-dist/tex/context/bib/t-bib.mkiv b/Master/texmf-dist/tex/context/bib/t-bib.mkiv
deleted file mode 100644
index 9a01bc7cde1..00000000000
--- a/Master/texmf-dist/tex/context/bib/t-bib.mkiv
+++ /dev/null
@@ -1,62 +0,0 @@
-%D Note by HH:
-%D
-%D We use a still somewhat experimental extension to the list
-%D mechanism. Eventually the bibtex module will use the bibl loader
-%D and access the data by means of lpath expressions. In that case we
-%D don't need to process the bibliography but still need to track
-%D usage as done here.
-
-\unprotect
-
-\startluacode
-local list = { }
-
-bibtexhacks = {
- reset = function() list = { } end,
- add = function(str) list[#list+1] = str end,
- flush = function() tex.sprint(table.concat(list,",")) end,
-}
-\stopluacode
-
-% HACK WILL GO:
-
-\def\namedlistparameter#1#2{\csname\dolistparameter{\??li#1}#2\endcsname}
-
-% TILL HERE
-
-\let\bibrefprefixcounter\!!plusone
-\def\bibrefprefix {\bibrefprefixcounter:}
-\let\preparebibrefprefix\relax
-\let\preparebibreflist \gobbleoneargument
-\let\bibreflist \empty
-
-\setuplist[pubs][\c!state=\s!start]
-
-\installstructurelistprocessor{pubs:userdata}
- {\ctxlua{bibtexhacks.add(structure.lists.uservalue("\currentlist",\currentlistindex,"bibref"))}}
-
-\def\docitation#1%
- {\expanded{\writedatatolist[pubs][bibref=#1]}}
-
-\def\filllocalpublist
- {\edef\currentlist{pubs}%
- \doif{\listparameter\c!criterium}{cite}{\setuplist[pubs][\c!criterium=\v!here]}%
- \ctxlua{bibtexhacks.reset()}%
- \placestructurelist{pubs}{\listparameter\c!criterium}{\listparameter\c!number}%
- \edef\localpublist{\ctxlua{bibtexhacks.flush()}}}
-
-\def\gotobiblink#1[#2]{\doifreferencefoundelse{\bibrefprefix#2}{\goto{#1}[\bibrefprefix#2]}{\unknownreference{#2}}}
-\def\atbiblink [#1]{\doifreferencefoundelse{\bibrefprefix#1}{\at [\bibrefprefix#1]}{\unknownreference{#1}}}
-\def\inbiblink [#1]{\doifreferencefoundelse{\bibrefprefix#1}{\at [\bibrefprefix#1]}{\unknownreference{#1}}}
-
-\ifdefined\normaldodoplacepublications \else % just in case we load twice
-
- \let\normaldodoplacepublications\dodoplacepublications
-
- \def\dodoplacepublications
- {\normaldodoplacepublications
- \doglobal\increment\bibrefprefixcounter}
-
-\fi
-
-\protect \endinput
diff --git a/Master/texmf-dist/tex/context/bib/t-bibltx.tex b/Master/texmf-dist/tex/context/bib/t-bibltx.tex
deleted file mode 100644
index cb9e787adcf..00000000000
--- a/Master/texmf-dist/tex/context/bib/t-bibltx.tex
+++ /dev/null
@@ -1,75 +0,0 @@
-%D \module
-%D [ file=t-bibltx,
-%D version=2005.01.04,
-%D title=\CONTEXT\ Publication Module,
-%D subtitle=Publications,
-%D author={Taco Hoekwater},
-%D date=\currentdate,
-%D copyright={Public Domain}]
-%C
-%C Donated to the public domain.
-
-%D \macros{newcommand}
-%D
-%D Just about all databases define something that uses
-%D \type {\newcommand}. This fake version does not cover
-%D everything \type {\newcommand} does, but it should be
-%D enough for simple definitions like the ones found in
-%D \BIBTEX\ files.
-
-\unprotect
-
-\def\@star@or@long#1%
- {\doifnextcharelse*{\afterassignment#1\let\next=}{#1}}
-
-\def\newcommand
- {\@star@or@long\new@command}
-
-\def\new@command#1%
- {\@testopt{\@newcommand#1}0}
-
-\def\@newcommand#1[#2]%
- {\doifnextcharelse[{\@xargdef#1[#2]}{\@argdef#1[#2]}}
-
-\long\def\@argdef#1[#2]#3%
- {\@yargdef#1\@ne{#2}{#3}}
-
-\long\def\@xargdef#1[#2][#3]#4%
- {\@EA\def\@EA#1\@EA{\@EA\do@testopt\@EA#1\csname\string#1\endcsname{#3}}%
- \@EA\@yargdef\csname\string#1\endcsname\tw@{#2}{#4}}
-
-\def\@testopt#1#2%
- {\doifnextcharelse[{#1}{#1[#2]}}
-
-\def\do@testopt#1%
- {\expandafter\@testopt}
-
-\long\def\@yargdef#1#2#3%
- {\!!counta#3\relax
- \advance \!!counta \@ne
- \let\@hash@\relax
- \edef\!!tempa{\ifx#2\tw@ [\@hash@1]\fi}%
- \!!countb #2%
- \loop
- \ifnum\!!countb <\!!counta
- \edef\!!tempa{\!!tempa\@hash@\the\!!countb}%
- \advance\!!countb \@ne
- \repeat
- \let\@hash@##%
- \long\@EA\def\@EA#1\!!tempa}
-
-\long\def\@reargdef#1[#2]%
- {\@yargdef#1\@ne{#2}}
-
-%D Something like the following is needed to support the
-%D average \LATEX-based \BIBTEX\ databases.
-%D
-%D \starttyping
-%D \let\textsc\kap
-%D \def\emph#1{{\em#1}}
-%D \let\sf\ss
-%D \stoptyping
-%D
-%D But we happily leave that to the user.
-
-\protect \endinput
diff --git a/Master/texmf-dist/tex/context/config/cont-cz.ini b/Master/texmf-dist/tex/context/config/cont-cz.ini
deleted file mode 100644
index 7df97918fbe..00000000000
--- a/Master/texmf-dist/tex/context/config/cont-cz.ini
+++ /dev/null
@@ -1,5 +0,0 @@
-% This is a configuration file needed for Thomas Esser's teTeX. Don't
-% forget to uncomment the context specific lines in "fmtutil --edit".
-% You may want to read the ConTeXt installation manual "minstall.pdf".
-\input cont-cz.tex
-\endinput
diff --git a/Master/texmf-dist/tex/context/config/cont-de.ini b/Master/texmf-dist/tex/context/config/cont-de.ini
deleted file mode 100644
index bf5b3b39781..00000000000
--- a/Master/texmf-dist/tex/context/config/cont-de.ini
+++ /dev/null
@@ -1,5 +0,0 @@
-% This is a configuration file needed for Thomas Esser's teTeX. Don't
-% forget to uncomment the context specific lines in "fmtutil --edit".
-% You may want to read the ConTeXt installation manual "minstall.pdf".
-\input cont-de.tex
-\endinput
diff --git a/Master/texmf-dist/tex/context/config/cont-en.ini b/Master/texmf-dist/tex/context/config/cont-en.ini
deleted file mode 100644
index 6b101ed6566..00000000000
--- a/Master/texmf-dist/tex/context/config/cont-en.ini
+++ /dev/null
@@ -1,5 +0,0 @@
-% This is a configuration file needed for Thomas Esser's teTeX. Don't
-% forget to uncomment the context specific lines in "fmtutil --edit".
-% You may want to read the ConTeXt installation manual "minstall.pdf".
-\input cont-en.tex
-\endinput
diff --git a/Master/texmf-dist/tex/context/config/cont-fmt.tex b/Master/texmf-dist/tex/context/config/cont-fmt.tex
deleted file mode 100644
index 855d83c2451..00000000000
--- a/Master/texmf-dist/tex/context/config/cont-fmt.tex
+++ /dev/null
@@ -1,29 +0,0 @@
-%D \module
-%D [ file=cont-fmt,
-%D version=2007.01.23,
-%D title=\CONTEXT\ Format options,
-%D author=Taco Hoekwater,
-%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 Normally, \CONTEXT\ users run
-%D \starttyping
-%D texexec --make
-%D \stoptyping
-%D to generate the \CONTEXT\ formats. \TEXEXEC\ writes a local
-%D \type{cont-fmt.tex} with the additional command||line options.
-
-%D But in \TeX Live, \type{fmtutil} is used instead, so a the
-%D separate file is needed. Because of the location of this file
-%D in the TDS tree, it will not conflict with the file created
-%D by \TEXEXEC.
-
-\writestatus{loading}{Pattern loading for TeXLive}
-
-\preloadallpatterns
-
-\endinput
diff --git a/Master/texmf-dist/tex/context/config/cont-fr.ini b/Master/texmf-dist/tex/context/config/cont-fr.ini
deleted file mode 100644
index d65044ff02f..00000000000
--- a/Master/texmf-dist/tex/context/config/cont-fr.ini
+++ /dev/null
@@ -1,5 +0,0 @@
-% This is a configuration file needed for Thomas Esser's teTeX. Don't
-% forget to uncomment the context specific lines in "fmtutil --edit".
-% You may want to read the ConTeXt installation manual "minstall.pdf".
-\input cont-fr.tex
-\endinput
diff --git a/Master/texmf-dist/tex/context/config/cont-it.ini b/Master/texmf-dist/tex/context/config/cont-it.ini
deleted file mode 100644
index 3214b5b7da6..00000000000
--- a/Master/texmf-dist/tex/context/config/cont-it.ini
+++ /dev/null
@@ -1,5 +0,0 @@
-% This is a configuration file needed for Thomas Esser's teTeX. Don't
-% forget to uncomment the context specific lines in "fmtutil --edit".
-% You may want to read the ConTeXt installation manual "minstall.pdf".
-\input cont-it.tex
-\endinput
diff --git a/Master/texmf-dist/tex/context/config/cont-nl.ini b/Master/texmf-dist/tex/context/config/cont-nl.ini
deleted file mode 100644
index afbe790426e..00000000000
--- a/Master/texmf-dist/tex/context/config/cont-nl.ini
+++ /dev/null
@@ -1,5 +0,0 @@
-% This is a configuration file needed for Thomas Esser's teTeX. Don't
-% forget to uncomment the context specific lines in "fmtutil --edit".
-% You may want to read the ConTeXt installation manual "minstall.pdf".
-\input cont-nl.tex
-\endinput
diff --git a/Master/texmf-dist/tex/context/config/cont-ro.ini b/Master/texmf-dist/tex/context/config/cont-ro.ini
deleted file mode 100644
index 4f766b66c27..00000000000
--- a/Master/texmf-dist/tex/context/config/cont-ro.ini
+++ /dev/null
@@ -1,5 +0,0 @@
-% This is a configuration file needed for Thomas Esser's teTeX. Don't
-% forget to uncomment the context specific lines in "fmtutil --edit".
-% You may want to read the ConTeXt installation manual "minstall.pdf".
-\input cont-ro.tex
-\endinput
diff --git a/Master/texmf-dist/tex/context/config/cont-uk.ini b/Master/texmf-dist/tex/context/config/cont-uk.ini
deleted file mode 100644
index 6b7a680d138..00000000000
--- a/Master/texmf-dist/tex/context/config/cont-uk.ini
+++ /dev/null
@@ -1,5 +0,0 @@
-% This is a configuration file needed for Thomas Esser's teTeX. Don't
-% forget to uncomment the context specific lines in "fmtutil --edit".
-% You may want to read the ConTeXt installation manual "minstall.pdf".
-\input cont-uk.tex
-\endinput
diff --git a/Master/texmf-dist/tex/context/fonts/antykwa-math.lfg b/Master/texmf-dist/tex/context/fonts/antykwa-math.lfg
new file mode 100644
index 00000000000..112a3f9a7a9
--- /dev/null
+++ b/Master/texmf-dist/tex/context/fonts/antykwa-math.lfg
@@ -0,0 +1,57 @@
+local msam = { name = "msam10.tfm", vector = "tex-ma" }
+local msbm = { name = "msbm10.tfm", vector = "tex-mb" }
+
+return {
+ name = "antykwa-math",
+ version = "1.00",
+ comment = "Goodies that complement antykwa math.",
+ author = "Hans, Mojca, Aditya",
+ copyright = "ConTeXt development team",
+ mathematics = {
+ mapfiles = {
+ "antt-rm.map",
+ "antt-mi.map",
+ "antt-sy.map",
+ "antt-ex.map",
+ "mkiv-base.map",
+ },
+ virtuals = {
+ ["antykwa-math"] = {
+ { name = "file:AntykwaTorunska-Regular", features = "virtualmath", main = true },
+ { name = "mi-anttri.tfm", vector = "tex-mi", skewchar=0x7F },
+ { name = "mi-anttri.tfm", vector = "tex-it", skewchar=0x7F },
+ { name = "sy-anttrz.tfm", vector = "tex-sy", skewchar=0x30, parameters = true } ,
+ { name = "ex-anttr.tfm", vector = "tex-ex", extension = true } ,
+ msam,
+ msbm,
+ },
+ ["antykwa-light-math"] = {
+ { name = "file:AntykwaTorunskaLight-Regular", features = "virtualmath", main = true },
+ { name = "mi-anttli.tfm", vector = "tex-mi", skewchar=0x7F },
+ { name = "mi-anttli.tfm", vector = "tex-it", skewchar=0x7F },
+ { name = "sy-anttlz.tfm", vector = "tex-sy", skewchar=0x30, parameters = true } ,
+ { name = "ex-anttl.tfm", vector = "tex-ex", extension = true } ,
+ msam,
+ msbm,
+ },
+ ["antykwa-cond-math"] = {
+ { name = "file:AntykwaTorunskaCond-Regular", features = "virtualmath", main = true },
+ { name = "mi-anttcri.tfm", vector = "tex-mi", skewchar=0x7F },
+ { name = "mi-anttcri.tfm", vector = "tex-it", skewchar=0x7F },
+ { name = "sy-anttcrz.tfm", vector = "tex-sy", skewchar=0x30, parameters = true } ,
+ { name = "ex-anttcr.tfm", vector = "tex-ex", extension = true } ,
+ msam,
+ msbm,
+ },
+ ["antykwa-lightcond-math"] = {
+ { name = "file:AntykwaTorunskaCondLight-Regular", features = "virtualmath", main = true },
+ { name = "mi-anttcli.tfm", vector = "tex-mi", skewchar=0x7F },
+ { name = "mi-anttcli.tfm", vector = "tex-it", skewchar=0x7F },
+ { name = "sy-anttclz.tfm", vector = "tex-sy", skewchar=0x30, parameters = true } ,
+ { name = "ex-anttcl.tfm", vector = "tex-ex", extension = true } ,
+ msam,
+ msbm,
+ }
+ }
+ }
+}
diff --git a/Master/texmf-dist/tex/context/fonts/charter-math.lfg b/Master/texmf-dist/tex/context/fonts/charter-math.lfg
new file mode 100644
index 00000000000..9d061d1e0f7
--- /dev/null
+++ b/Master/texmf-dist/tex/context/fonts/charter-math.lfg
@@ -0,0 +1,28 @@
+return {
+ name = "charter-math",
+ version = "1.00",
+ comment = "Goodies that complement charter math.",
+ author = "Hans, Mojca, Aditya",
+ copyright = "ConTeXt development team",
+ mathematics = {
+ mapfiles = {
+ "mdbch.map",
+ "mkiv-base.map",
+ },
+ virtuals = {
+ ["charter-math"] = {
+ -- { name = "file:bchr8a", features = "virtualmath", main = true },
+ { name = "file:bchri8a", features = "virtualmath", main = true },
+ -- { name = "md-chr7m.tfm", vector = "tex-mr" },
+ { name = "md-chri7m.tfm", vector = "tex-mi", skewchar=0x7F },
+ { name = "md-chri7m.tfm", vector = "tex-it", skewchar=0x7F },
+ { name = "md-chr7y.tfm", vector = "tex-sy", skewchar=0x30, parameters = true },
+ { name = "md-chr7v.tfm", vector = "tex-ex", extension = true },
+ -- { name = "md-chbma.tfm", vector = "tex-ma" },
+ -- { name = "md-chbmb.tfm", vector = "tex-mb" },
+ { name = "msam10.tfm", vector = "tex-ma" },
+ { name = "msbm10.tfm", vector = "tex-mb" },
+ }
+ }
+ }
+}
diff --git a/Master/texmf-dist/tex/context/fonts/garamond-math.lfg b/Master/texmf-dist/tex/context/fonts/garamond-math.lfg
new file mode 100644
index 00000000000..a082f8a9d11
--- /dev/null
+++ b/Master/texmf-dist/tex/context/fonts/garamond-math.lfg
@@ -0,0 +1,28 @@
+return {
+ name = "garamond-math",
+ version = "1.00",
+ comment = "Goodies that complement garamond math.",
+ author = "Hans, Mojca, Aditya",
+ copyright = "ConTeXt development team",
+ mathematics = {
+ mapfiles = {
+ "mdugm.map",
+ "mkiv-base.map",
+ },
+ virtuals = {
+ ["garamond-math"] = {
+ -- { name = "file:ugmr8a", features = "virtualmath", main = true },
+ { name = "file:ugmri8a", features = "virtualmath", main = true },
+ -- { name = "md-gmr7m.tfm", vector = "tex-mr" },
+ { name = "md-gmri7m.tfm", vector = "tex-mi", skewchar=0x7F },
+ { name = "md-gmri7m.tfm", vector = "tex-it", skewchar=0x7F },
+ { name = "md-gmr7y.tfm", vector = "tex-sy", skewchar=0x30, parameters = true },
+ { name = "md-gmr7v.tfm", vector = "tex-ex", extension = true },
+ -- { name = "md-gmmma.tfm", vector = "tex-ma" },
+ -- { name = "md-gmmmb.tfm", vector = "tex-mb" },
+ { name = "msam10.tfm", vector = "tex-ma" },
+ { name = "msbm10.tfm", vector = "tex-mb" },
+ }
+ }
+ }
+}
diff --git a/Master/texmf-dist/tex/context/fonts/husayni.lfg b/Master/texmf-dist/tex/context/fonts/husayni.lfg
new file mode 100644
index 00000000000..2cc4d6111e4
--- /dev/null
+++ b/Master/texmf-dist/tex/context/fonts/husayni.lfg
@@ -0,0 +1,178 @@
+local yes = "yes", "node"
+
+local basics = {
+ analyze = yes,
+ mode = "node",
+ language = "dflt",
+ script = "arab",
+}
+
+local analysis = {
+ ccmp = yes,
+ init = yes, medi = yes, fina = yes,
+}
+
+local regular = {
+ rlig = yes, calt = yes, salt = yes, anum = yes,
+ ss01 = yes, ss03 = yes, ss07 = yes, ss10 = yes, ss12 = yes, ss15 = yes, ss16 = yes,
+ ss19 = yes, ss24 = yes, ss25 = yes, ss26 = yes, ss27 = yes, ss31 = yes, ss34 = yes,
+ ss35 = yes, ss36 = yes, ss37 = yes, ss38 = yes, ss41 = yes, ss42 = yes, ss43 = yes,
+ js16 = yes,
+}
+
+local positioning = {
+ kern = yes, curs = yes, mark = yes, mkmk = yes,
+}
+
+local minimal_stretching = {
+ js11 = yes, js03 = yes,
+}
+
+local medium_stretching = {
+ js12=yes, js05=yes,
+}
+local maximal_stretching= {
+ js13 = yes, js05 = yes, js09 = yes,
+}
+
+local wide_all = {
+ js11 = yes, js12 = yes, js13 = yes, js05 = yes, js09 = yes,
+}
+
+local shrink = {
+ flts = yes, js17 = yes, ss05 = yes, ss11 = yes, ss06 = yes, ss09 = yes,
+}
+
+local default = {
+ basics, analysis, regular, positioning, -- xxxx = yes, yyyy = 2,
+}
+
+return {
+ name = "husayni",
+ version = "1.00",
+ comment = "Goodies that complement the Husayni font by Idris Samawi Hamid.",
+ author = "Idris Samawi Hamid and Hans Hagen",
+ featuresets = { -- here we don't have references to featuresets
+ default = {
+ default,
+ },
+ minimal_stretching = {
+ default, js11 = yes, js03 = yes,
+ },
+ medium_stretching = {
+ default, js12=yes, js05=yes,
+ },
+ maximal_stretching= {
+ default, js13 = yes, js05 = yes, js09 = yes,
+ },
+ wide_all = {
+ default, js11 = yes, js12 = yes, js13 = yes, js05 = yes, js09 = yes,
+ },
+ shrink = {
+ default, flts = yes, js17 = yes, ss05 = yes, ss11 = yes, ss06 = yes, ss09 = yes,
+ },
+ },
+ solutions = { -- here we have references to featuresets, so we use strings!
+ experimental = {
+ less = { "shrink" },
+ more = { "minimal_stretching", "medium_stretching", "maximal_stretching", "wide_all" },
+ },
+ },
+ stylistics = {
+ ss01 = "Allah, Muhammad",
+ ss02 = "ss01 + Allah_final",
+ ss03 = "level-1 stack over Jiim, initial entry only",
+ ss04 = "level-1 stack over Jiim, initial/medial entry",
+ ss05 = "multi-level Jiim stacking, initial/medial entry",
+ ss06 = "aesthetic Faa/Qaaf for FJ_mm, FJ_mf connection",
+ ss07 = "initial-entry stacking over Haa",
+ ss08 = "initial/medial stacking over Haa, minus HM_mf strings",
+ ss09 = "initial/medial Haa stacking plus HM_mf strings",
+ ss10 = "basic dipped Miim, initial-entry B_S-stack over Miim",
+ ss11 = "full dipped Miim, initial-entry B_S-stack over Miim",
+ ss12 = "XBM_im initial-medial entry B_S-stack over Miim",
+ ss13 = "full initial-medial entry B_S-stacked Miim",
+ ss14 = "initial entry, stacked Laam on Miim",
+ ss15 = "full stacked Laam-on-Miim",
+ ss16 = "initial entry, stacked Ayn-on-Miim",
+ ss17 = "full stacked Ayn-on-Miim",
+ ss18 = "LMJ_im already contained in ss03--05, may remove",
+ ss19 = "LM_im",
+ ss20 = "KLM_m, sloped Miim",
+ ss21 = "KLM_i_mm/LM_mm, sloped Miim",
+ ss22 = "filled sloped Miim",
+ ss23 = "LM_mm, non-sloped Miim",
+ ss24 = "BR_i_mf, BN_i_mf",
+ ss25 = "basic LH_im might merge with ss24",
+ ss26 = "full Yaa.final special strings: BY_if, BY_mf, LY_mf",
+ ss27 = "basic thin Miim.final",
+ ss28 = "full thin Miim.final to be moved to jsnn",
+ ss29 = "basic short Miim.final",
+ ss30 = "full short Miim.final to be moved to jsnn",
+ ss31 = "basic Raa.final strings: JR and SR",
+ ss32 = "basic Raa.final strings: JR, SR, and BR",
+ ss33 = "TtR to be moved to jsnn",
+ ss34 = "AyR style also available in jsnn",
+ ss35 = "full Kaaf contexts",
+ ss36 = "full Laam contexts",
+ ss37 = "Miim-Miim contexts",
+ ss38 = "basic dipped Haa, B_SH_mm",
+ ss39 = "full dipped Haa, B_S_LH_i_mm_Mf",
+ ss40 = "aesthetic dipped medial Haa",
+ ss41 = "high and low Baa strings",
+ ss42 = "diagonal entry",
+ ss43 = "initial alternates",
+ ss44 = "hooked final alif",
+ ss45 = "BMA_f",
+ ss46 = "BM_mm_alt, for JBM combinations",
+ ss47 = "Shaddah-<kasrah> combo",
+ ss48 = "Auto-sukuun",
+ ss49 = "No vowels",
+ ss50 = "Shaddah/MaaddahHamzah only",
+ ss51 = "No Skuun",
+ ss52 = "No Waslah",
+ ss53 = "No Waslah",
+ ss54 = "chopped finals",
+ ss55 = "idgham-tanwin",
+ js01 = "Raawide",
+ js02 = "Yaawide",
+ js03 = "Kaafwide",
+ js04 = "Nuunwide",
+ js05 = "Kaafwide Nuunwide Siinwide Baawide",
+ js06 = "final Haa wide",
+ js07 = "thin Miim",
+ js08 = "short Miim",
+ js09 = "wide Siin",
+ js10 = "thuluth-style initial Haa, final Miim, MRw_mf",
+ js11 = "level-1 stretching",
+ js12 = "level-2 stretching",
+ js13 = "level-3 stretching",
+ js14 = "final Alif",
+ js15 = "hooked final Alif",
+ js16 = "aesthetic medial Faa/Qaaf",
+ js17 = "fancy isol Haa after Daal, Raa, and Waaw",
+ js18 = "Laamwide, alternate substitution",
+ js19 = "level-4 stretching, only siin and Hhaa for basmalah",
+ js20 = "level-5 stretching, only siin and Hhaa for basmalah",
+ js21 = "Haa.final_alt2",
+ },
+ colorschemes = {
+ default = {
+ [1] = {
+ "Onedotabove", "Onedotbelow", "Twodotsabove", "Twodotsbelow", "Threedotsabove", "Twodotsabove.vrt", "Twodotsbelow.vrt", "Twodotsabove.KBA", "Threedotsabove.KBA", "Threedotsbelowinv", "Hamzahabove", "Hamzahbelow", "MaaddahHamzah.identity", "Waslah","Hamzah.initial_medial",
+ },
+ [2] = {
+ "Fathah", "Dammah", "Kasrah", "FathahVertical", "DammahInverted", "KasrahVertical", "FathahVertical.alt1", "KasrahVertical.alt1", "FathahTanwiin", "DammahTanwiin", "KasrahTanwiin", "Shaddah", "Sukuun", "MaaddahHamzah", "Jazm", "Maaddah", "DammahTanwiin_alt2", "DammahTanwiin_alt1", "FathahTanwiin_alt1", "KasrahTanwiin_alt1", "Fathah.mkmk", "Dammah.mkmk", "Kasrah.mkmk", "FathahVertical.mkmk", "DammahInverted.mkmk", "KasrahVertical.mkmk", "FathahTanwiin.mkmk", "DammahTanwiin.mkmk", "KasrahTanwiin.mkmk", "DammahTanwiin_alt1.mkmk", "Waawsmall", "Yaasmall", "FathahVertical.alt2", "Waawsmall.isol", "Yaasmall.isol", "FathahVertical.isol", "Hamzah","Shaddah.lillaah","FathahVertical.alt1_mkmk","Sifr.empty","Maaddah.small","FathahVertical.alt2","Waawsmall.isol","Yaasmall.isol","FathahTanwiin.alt1_mkmk","KasrahTanwiin.alt1_mkmk",
+ },
+ [3] = {
+ "Ttaa.waqf", "SsLY.waqf", "QLY.waqf", "Miim.waqf", "LA.waqf", "Jiim.waqf", "Threedotsabove.waqf", "Siin.waqf", "Ssaad.waqf", "Qaaf.waqf", "SsL.waqf", "QF.waqf", "SKTH.waqf", "WQFH.waqf", "Kaaf.waqf", "Ayn.ruku", "Miim.nuun_high", "Siin.Ssaad", "Nuunsmall", "emptydot_low", "emptydot_high", "Sifr.fill", "Miim.nuun_low", "Nuun.tanwiin",
+ },
+ [4] = {
+ "ZeroArabic.ayah", "OneArabic.ayah", "TwoArabic.ayah", "ThreeArabic.ayah", "FourArabic.ayah", "FiveArabic.ayah", "SixArabic.ayah", "SevenArabic.ayah", "EightArabic.ayah", "NineArabic.ayah", "FourFarsi.ayah", "FiveFarsi.ayah", "SixFarsi.ayah", "FourFarsi.urdu_ayah", "SevenFarsi.urdu_ayah","ZeroArabic.ayah_small","OneArabic.ayah_small","TwoArabic.ayah_small","ThreeArabic.ayah_small","FourArabic.ayah.001","FiveArabic.ayah_small","SixArabic.ayah_small","SevenArabic.ayah_small","EightArabic.ayah_small","NineArabic.ayah_small",
+ },
+ [5] = {
+ "Ayah", "Ayah.alt1", "Ayah.alt2", "Ayah.alt3", "Ayah2",
+ }
+ }
+ }
+}
diff --git a/Master/texmf-dist/tex/context/fonts/hvmath-math.lfg b/Master/texmf-dist/tex/context/fonts/hvmath-math.lfg
new file mode 100644
index 00000000000..a7ec1ce89b8
--- /dev/null
+++ b/Master/texmf-dist/tex/context/fonts/hvmath-math.lfg
@@ -0,0 +1,24 @@
+return {
+ name = "hvmath-math",
+ version = "1.00",
+ comment = "Goodies that complement hvmath math.",
+ author = "Hans, Mojca, Aditya",
+ copyright = "ConTeXt development team",
+ mathematics = {
+ mapfiles = {
+ -- todo
+ },
+ virtuals = {
+ ["hvmath-math"] = {
+ { name = "file:texgyreheros-regular.otf", features = "virtualmath", main = true },
+ { name = "hvrm108r.tfm", vector="tex-mr" },
+ { name = "hvmi10.tfm", vector = "tex-mi", skewchar=0x7F },
+ { name = "hvmi10.tfm", vector = "tex-it", skewchar=0x7F },
+ { name = "hvsy10.tfm", vector = "tex-sy", skewchar=0x30, parameters = true },
+ { name = "hvex10.tfm", vector = "tex-ex", extension = true },
+ { name = "hvam10.tfm", vector = "tex-ma" },
+ { name = "hvbm10.tfm", vector = "tex-mb" },
+ }
+ }
+ }
+}
diff --git a/Master/texmf-dist/tex/context/fonts/informal-math.lfg b/Master/texmf-dist/tex/context/fonts/informal-math.lfg
new file mode 100644
index 00000000000..67fb73b392f
--- /dev/null
+++ b/Master/texmf-dist/tex/context/fonts/informal-math.lfg
@@ -0,0 +1,22 @@
+return {
+ name = "informal-math",
+ version = "1.00",
+ comment = "Goodies that complement informal math.",
+ author = "Hans, Mojca, Aditya",
+ copyright = "ConTeXt development team",
+ mathematics = {
+ mapfiles = {
+ "original-micropress-informal.map",
+ },
+ virtuals = {
+ ["hvmath-math"] = {
+ { name = "file:ifrg.afm", features = "virtualmath", main = true },
+ { name = "ifrm10cm.tfm", vector="tex-mr" },
+ { name = "ifmi10", vector = "tex-mi", skewchar=0x7F },
+ { name = "ifmi10.tfm", vector = "tex-it", skewchar=0x7F },
+ { name = "ifsy10.tfm", vector = "tex-sy", skewchar=0x30, parameters = true },
+ { name = "ifex10.tfm", vector = "tex-ex", extension = true },
+ }
+ }
+ }
+}
diff --git a/Master/texmf-dist/tex/context/fonts/iwona-math.lfg b/Master/texmf-dist/tex/context/fonts/iwona-math.lfg
new file mode 100644
index 00000000000..f2fb6934154
--- /dev/null
+++ b/Master/texmf-dist/tex/context/fonts/iwona-math.lfg
@@ -0,0 +1,57 @@
+local msam = { name = "msam10.tfm", vector = "tex-ma" }
+local msbm = { name = "msbm10.tfm", vector = "tex-mb" }
+
+return {
+ name = "iwona-math",
+ version = "1.00",
+ comment = "Goodies that complement iwona math.",
+ author = "Hans Hagen",
+ copyright = "ConTeXt development team",
+ mathematics = {
+ mapfiles = {
+ "iwona-rm.map",
+ "iwona-mi.map",
+ "iwona-sy.map",
+ "iwona-ex.map",
+ "mkiv-base.map",
+ },
+ virtuals = {
+ ["iwona-math"] = {
+ { name = "file:Iwona-Regular", features = "virtualmath", main = true },
+ { name = "mi-iwonari.tfm", vector = "tex-mi", skewchar=0x7F },
+ { name = "mi-iwonari.tfm", vector = "tex-it", skewchar=0x7F },
+ { name = "sy-iwonarz.tfm", vector = "tex-sy", skewchar=0x30, parameters = true } ,
+ { name = "ex-iwonar.tfm", vector = "tex-ex", extension = true } ,
+ msam,
+ msbm,
+ },
+ ["iwona-light-math"] = {
+ { name = "file:IwonaLight-Regular", features = "virtualmath", main = true },
+ { name = "mi-iwonali.tfm", vector = "tex-mi", skewchar=0x7F },
+ { name = "mi-iwonali.tfm", vector = "tex-it", skewchar=0x7F },
+ { name = "sy-iwonalz.tfm", vector = "tex-sy", skewchar=0x30, parameters = true } ,
+ { name = "ex-iwonal.tfm", vector = "tex-ex", extension = true } ,
+ msam,
+ msbm,
+ },
+ ["iwona-medium-math"] = {
+ { name = "file:IwonaMedium-Regular", features = "virtualmath", main = true },
+ { name = "mi-iwonami.tfm", vector = "tex-mi", skewchar=0x7F },
+ { name = "mi-iwonami.tfm", vector = "tex-it", skewchar=0x7F },
+ { name = "sy-iwonamz.tfm", vector = "tex-sy", skewchar=0x30, parameters = true } ,
+ { name = "ex-iwonam.tfm", vector = "tex-ex", extension = true } ,
+ msam,
+ msbm,
+ },
+ ["iwona-heavy-math"] = {
+ { name = "file:IwonaHeavy-Regular", features = "virtualmath", main = true },
+ { name = "mi-iwonahi.tfm", vector = "tex-mi", skewchar=0x7F },
+ { name = "mi-iwonahi.tfm", vector = "tex-it", skewchar=0x7F },
+ { name = "sy-iwonahz.tfm", vector = "tex-sy", skewchar=0x30, parameters = true } ,
+ { name = "ex-iwonah.tfm", vector = "tex-ex", extension = true } ,
+ msam,
+ msbm,
+ }
+ }
+ }
+}
diff --git a/Master/texmf-dist/tex/context/fonts/lm-math.lfg b/Master/texmf-dist/tex/context/fonts/lm-math.lfg
new file mode 100644
index 00000000000..361b5bb86ab
--- /dev/null
+++ b/Master/texmf-dist/tex/context/fonts/lm-math.lfg
@@ -0,0 +1,230 @@
+-- rm-lmr5 : LMMathRoman5-Regular
+-- rm-lmbx5 : LMMathRoman5-Bold ]
+-- lmbsy5 : LMMathSymbols5-BoldItalic
+-- lmsy5 : LMMathSymbols5-Italic
+-- lmmi5 : LMMathItalic5-Italic
+-- lmmib5 : LMMathItalic5-BoldItalic
+
+local five = {
+ { name = "lmroman5-regular.otf", features = "virtualmath", main = true },
+ { name = "rm-lmr5.tfm", vector = "tex-mr-missing" } ,
+ { name = "lmmi5.tfm", vector = "tex-mi", skewchar=0x7F },
+ { name = "lmmi5.tfm", vector = "tex-it", skewchar=0x7F },
+ { name = "lmsy5.tfm", vector = "tex-sy", skewchar=0x30, parameters = true } ,
+ { name = "lmex10.tfm", vector = "tex-ex", extension = true } ,
+ { name = "msam5.tfm", vector = "tex-ma" },
+ { name = "msbm5.tfm", vector = "tex-mb" },
+ -- { name = "rm-lmbx5.tfm", vector = "tex-bf" } ,
+ { name = "lmroman5-bold", vector = "tex-bf" } ,
+ { name = "lmmib5.tfm", vector = "tex-bi", skewchar=0x7F } ,
+ { name = "lmsans8-regular.otf", vector = "tex-ss", optional=true },
+ { name = "lmmono8-regular.otf", vector = "tex-tt", optional=true },
+ { name = "eufm5.tfm", vector = "tex-fraktur", optional=true },
+}
+
+-- rm-lmr6 : LMMathRoman6-Regular
+-- rm-lmbx6 : LMMathRoman6-Bold
+-- lmsy6 : LMMathSymbols6-Italic
+-- lmmi6 : LMMathItalic6-Italic
+
+local six = {
+ { name = "lmroman6-regular.otf", features = "virtualmath", main = true },
+ { name = "rm-lmr6.tfm", vector = "tex-mr-missing" } ,
+ { name = "lmmi6.tfm", vector = "tex-mi", skewchar=0x7F },
+ { name = "lmmi6.tfm", vector = "tex-it", skewchar=0x7F },
+ { name = "lmsy6.tfm", vector = "tex-sy", skewchar=0x30, parameters = true } ,
+ { name = "lmex10.tfm", vector = "tex-ex", extension = true } ,
+ { name = "msam5.tfm", vector = "tex-ma" },
+ { name = "msbm5.tfm", vector = "tex-mb" },
+ -- { name = "rm-lmbx6.tfm", vector = "tex-bf" } ,
+ { name = "lmroman6-bold.otf", vector = "tex-bf" } ,
+ { name = "lmmib5.tfm", vector = "tex-bi", skewchar=0x7F } ,
+ { name = "lmsans8-regular.otf", vector = "tex-ss", optional=true },
+ { name = "lmmono8-regular.otf", vector = "tex-tt", optional=true },
+ { name = "eufm5.tfm", vector = "tex-fraktur", optional=true },
+ { name = "eufb5.tfm", vector = "tex-fraktur-bold", optional=true },
+}
+
+-- rm-lmr7 : LMMathRoman7-Regular
+-- rm-lmbx7 : LMMathRoman7-Bold
+-- lmbsy7 : LMMathSymbols7-BoldItalic
+-- lmsy7 : LMMathSymbols7-Italic
+-- lmmi7 : LMMathItalic7-Italic
+-- lmmib7 : LMMathItalic7-BoldItalic
+
+local seven = {
+ { name = "lmroman7-regular.otf", features = "virtualmath", main = true },
+ { name = "rm-lmr7.tfm", vector = "tex-mr-missing" } ,
+ { name = "lmmi7.tfm", vector = "tex-mi", skewchar=0x7F },
+ { name = "lmmi7.tfm", vector = "tex-it", skewchar=0x7F },
+ { name = "lmsy7.tfm", vector = "tex-sy", skewchar=0x30, parameters = true } ,
+ { name = "lmex10.tfm", vector = "tex-ex", extension = true } ,
+ { name = "msam7.tfm", vector = "tex-ma" },
+ { name = "msbm7.tfm", vector = "tex-mb" },
+ -- { name = "rm-lmbx7.tfm", vector = "tex-bf" } ,
+ { name = "lmroman7-bold.otf", vector = "tex-bf" } ,
+ { name = "lmmib7.tfm", vector = "tex-bi", skewchar=0x7F } ,
+ { name = "lmsans8-regular.otf", vector = "tex-ss", optional=true },
+ { name = "lmmono8-regular.otf", vector = "tex-tt", optional=true },
+ { name = "eufm7.tfm", vector = "tex-fraktur", optional=true },
+ { name = "eufb7.tfm", vector = "tex-fraktur-bold", optional=true },
+}
+
+-- rm-lmr8 : LMMathRoman8-Regular
+-- rm-lmbx8 : LMMathRoman8-Bold
+-- lmsy8 : LMMathSymbols8-Italic
+-- lmmi8 : LMMathItalic8-Italic
+
+local eight = {
+ { name = "lmroman8-regular.otf", features = "virtualmath", main = true },
+ { name = "rm-lmr8.tfm", vector = "tex-mr-missing" } ,
+ { name = "lmmi8.tfm", vector = "tex-mi", skewchar=0x7F },
+ { name = "lmmi8.tfm", vector = "tex-it", skewchar=0x7F },
+ { name = "lmsy8.tfm", vector = "tex-sy", skewchar=0x30, parameters = true } ,
+ { name = "lmex10.tfm", vector = "tex-ex", extension = true } ,
+ { name = "msam7.tfm", vector = "tex-ma" },
+ { name = "msbm7.tfm", vector = "tex-mb" },
+ -- { name = "rm-lmbx8.tfm", vector = "tex-bf" } ,
+ { name = "lmroman8-bold.otf", vector = "tex-bf" } ,
+ { name = "lmmib7.tfm", vector = "tex-bi", skewchar=0x7F } ,
+ { name = "lmsans8-regular.otf", vector = "tex-ss", optional=true },
+ { name = "lmmono8-regular.otf", vector = "tex-tt", optional=true },
+ { name = "eufm7.tfm", vector = "tex-fraktur", optional=true },
+ { name = "eufb7.tfm", vector = "tex-fraktur-bold", optional=true },
+}
+
+-- rm-lmr9 : LMMathRoman9-Regular
+-- rm-lmbx9 : LMMathRoman9-Bold
+-- lmsy9 : LMMathSymbols9-Italic
+-- lmmi9 : LMMathItalic9-Italic
+
+local nine = {
+ { name = "lmroman9-regular.otf", features = "virtualmath", main = true },
+ { name = "rm-lmr9.tfm", vector = "tex-mr-missing" } ,
+ { name = "lmmi9.tfm", vector = "tex-mi", skewchar=0x7F },
+ { name = "lmmi9.tfm", vector = "tex-it", skewchar=0x7F },
+ { name = "lmsy9.tfm", vector = "tex-sy", skewchar=0x30, parameters = true } ,
+ { name = "lmex10.tfm", vector = "tex-ex", extension = true } ,
+ { name = "msam10.tfm", vector = "tex-ma" },
+ { name = "msbm10.tfm", vector = "tex-mb" },
+ -- { name = "rm-lmbx9.tfm", vector = "tex-bf" } ,
+ { name = "lmroman9-bold.otf", vector = "tex-bf" } ,
+ { name = "lmmib10.tfm", vector = "tex-bi", skewchar=0x7F } ,
+ { name = "lmsans9-regular.otf", vector = "tex-ss", optional=true },
+ { name = "lmmono9-regular.otf", vector = "tex-tt", optional=true },
+ { name = "eufm10.tfm", vector = "tex-fraktur", optional=true },
+ { name = "eufb10.tfm", vector = "tex-fraktur-bold", optional=true },
+}
+
+-- rm-lmr10 : LMMathRoman10-Regular
+-- rm-lmbx10 : LMMathRoman10-Bold
+-- lmbsy10 : LMMathSymbols10-BoldItalic
+-- lmsy10 : LMMathSymbols10-Italic
+-- lmex10 : LMMathExtension10-Regular
+-- lmmi10 : LMMathItalic10-Italic
+-- lmmib10 : LMMathItalic10-BoldItalic
+
+local ten = {
+ { name = "lmroman10-regular.otf", features = "virtualmath", main = true },
+ { name = "rm-lmr10.tfm", vector = "tex-mr-missing" } ,
+ { name = "lmmi10.tfm", vector = "tex-mi", skewchar=0x7F },
+ { name = "lmmi10.tfm", vector = "tex-it", skewchar=0x7F },
+ { name = "lmsy10.tfm", vector = "tex-sy", skewchar=0x30, parameters = true } ,
+ { name = "lmex10.tfm", vector = "tex-ex", extension = true } ,
+ { name = "msam10.tfm", vector = "tex-ma" },
+ { name = "msbm10.tfm", vector = "tex-mb" },
+ -- { name = "rm-lmbx10.tfm", vector = "tex-bf" } ,
+ { name = "lmroman10-bold.otf", vector = "tex-bf" } ,
+ { name = "lmmib10.tfm", vector = "tex-bi", skewchar=0x7F } ,
+ { name = "lmsans10-regular.otf", vector = "tex-ss", optional=true },
+ { name = "lmmono10-regular.otf", vector = "tex-tt", optional=true },
+ { name = "eufm10.tfm", vector = "tex-fraktur", optional=true },
+ { name = "eufb10.tfm", vector = "tex-fraktur-bold", optional=true },
+}
+
+local ten_bold = {
+ { name = "lmroman10-bold.otf", features = "virtualmath", main = true },
+ { name = "rm-lmr10.tfm", vector = "tex-mr-missing" } ,
+ { name = "lmmib10.tfm", vector = "tex-mi", skewchar=0x7F },
+ { name = "lmmib10.tfm", vector = "tex-it", skewchar=0x7F },
+ { name = "lmbsy10.tfm", vector = "tex-sy", skewchar=0x30, parameters = true } ,
+ { name = "lmex10.tfm", vector = "tex-ex", extension = true } ,
+-- copied from roman:
+ { name = "msam10.tfm", vector = "tex-ma" },
+ { name = "msbm10.tfm", vector = "tex-mb" },
+ -- { name = "rm-lmbx10.tfm", vector = "tex-bf" } ,
+ { name = "lmroman10-bold.otf", vector = "tex-bf" } ,
+ { name = "lmmib10.tfm", vector = "tex-bi", skewchar=0x7F } ,
+ { name = "lmsans10-regular.otf", vector = "tex-ss", optional=true },
+ { name = "lmmono10-regular.otf", vector = "tex-tt", optional=true },
+ { name = "eufm10.tfm", vector = "tex-fraktur", optional=true },
+ { name = "eufb10.tfm", vector = "tex-fraktur-bold", optional=true },
+}
+
+-- rm-lmr12 : LMMathRoman12-Regular
+-- rm-lmbx12 : LMMathRoman12-Bold
+-- lmmi12 : LMMathItalic12-Italic
+
+local twelve = {
+ { name = "lmroman12-regular.otf", features = "virtualmath", main = true },
+ { name = "rm-lmr12.tfm", vector = "tex-mr-missing" } ,
+ { name = "lmmi12.tfm", vector = "tex-mi", skewchar=0x7F },
+ { name = "lmmi12.tfm", vector = "tex-it", skewchar=0x7F },
+ { name = "lmsy10.tfm", vector = "tex-sy", skewchar=0x30, parameters = true } ,
+ { name = "lmex10.tfm", vector = "tex-ex", extension = true } ,
+ { name = "msam10.tfm", vector = "tex-ma" },
+ { name = "msbm10.tfm", vector = "tex-mb" },
+ -- { name = "rm-lmbx12.tfm", vector = "tex-bf" } ,
+ { name = "lmroman12-bold.otf", vector = "tex-bf" } ,
+ { name = "lmmib10.tfm", vector = "tex-bi", skewchar=0x7F } ,
+ { name = "lmsans12-regular.otf", vector = "tex-ss", optional=true },
+ { name = "lmmono12-regular.otf", vector = "tex-tt", optional=true },
+ { name = "eufm10.tfm", vector = "tex-fraktur", optional=true },
+ { name = "eufb10.tfm", vector = "tex-fraktur-bold", optional=true },
+}
+
+-- rm-lmr17 : LMMathRoman17-Regular
+
+local seventeen = {
+ { name = "lmroman17-regular.otf", features = "virtualmath", main = true },
+ { name = "rm-lmr12.tfm", vector = "tex-mr-missing" } ,
+ { name = "lmmi12.tfm", vector = "tex-mi", skewchar=0x7F },
+ { name = "lmmi12.tfm", vector = "tex-it", skewchar=0x7F },
+ { name = "lmsy10.tfm", vector = "tex-sy", skewchar=0x30, parameters = true } ,
+ { name = "lmex10.tfm", vector = "tex-ex", extension = true } ,
+ { name = "msam10.tfm", vector = "tex-ma" },
+ { name = "msbm10.tfm", vector = "tex-mb" },
+ -- { name = "rm-lmbx12.tfm", vector = "tex-bf" } ,
+ { name = "lmroman12-bold.otf", vector = "tex-bf" } ,
+ { name = "lmmib10.tfm", vector = "tex-bi", skewchar=0x7F } ,
+ { name = "lmsans17-regular.otf", vector = "tex-ss", optional=true },
+ { name = "lmmono17-regular.otf", vector = "tex-tt", optional=true },
+ { name = "eufm10.tfm", vector = "tex-fraktur", optional=true },
+ { name = "eufb10.tfm", vector = "tex-fraktur-bold", optional=true },
+}
+
+return {
+ name = "lm-math",
+ version = "1.00",
+ comment = "Goodies that complement latin modern math.",
+ author = "Hans Hagen",
+ copyright = "ConTeXt development team",
+ mathematics = {
+ mapfiles = {
+ "lm-math.map",
+ "lm-rm.map",
+ "mkiv-base.map",
+ },
+ virtuals = {
+ ["lmroman5-math"] = five,
+ ["lmroman6-math"] = six,
+ ["lmroman7-math"] = seven,
+ ["lmroman8-math"] = eight,
+ ["lmroman9-math"] = nine,
+ ["lmroman10-math"] = ten,
+ ["lmroman10-boldmath"] = ten_bold,
+ ["lmroman12-math"] = twelve,
+ ["lmroman17-math"] = seventeen,
+ }
+ }
+}
diff --git a/Master/texmf-dist/tex/context/fonts/lucida-math.lfg b/Master/texmf-dist/tex/context/fonts/lucida-math.lfg
new file mode 100644
index 00000000000..83c3c272d65
--- /dev/null
+++ b/Master/texmf-dist/tex/context/fonts/lucida-math.lfg
@@ -0,0 +1,320 @@
+fonts.enc.math["lbr-ma"] = {
+ [0x025CB] = 0x00, -- circle
+ [0x025CF] = 0x01, -- blackcircle
+ [0x025A1] = 0x02, -- square
+ [0x025A0] = 0x03, -- blacksquare
+ [0x025B3] = 0x04, -- triangleup
+ [0x025B2] = 0x05, -- blacktriangleup
+ [0x025BD] = 0x06, -- triangledown
+ [0x025BC] = 0x07, -- blacktriangledown
+ [0x02B28] = 0x08, -- lozenge
+ [0x02B27] = 0x09, -- blacklozenge
+ [0x02B29] = 0x0A, -- blackdiamond
+ [0x02571] = 0x0B, -- upright
+ [0x02572] = 0x0C, -- downright
+ [0x022E4] = 0x0D, -- squareimageofnoteq
+ [0x022E5] = 0x0E, -- squareoriginalofnoteq
+ [0x02A4F] = 0x0F, -- dblsquareunion
+ [0x02A4E] = 0x10, -- dblsquareintersection
+ [0x02A64] = 0x11, -- zdomainantirestriction
+ [0x02A65] = 0x12, -- zrangeantirestriction
+ [0x022EE] = 0x13, -- verticalellipsis
+ [0x022EF] = 0x14, -- ellipsis
+ [0x022F0] = 0x15, -- uprightellipsis
+ [0x022F1] = 0x16, -- downrightellipsis
+ [0x022D5] = 0x17, -- equalparallel
+
+ [0x0225B] = 0x1A, -- stareq
+ [0x00127] = 0x1B, -- hbar
+ [0x022F6] = 0x1C, -- barelementof
+ [0x02209] = 0x1D, -- notelementof
+ [0x022FD] = 0x1E, -- barcontains
+ [0x0220C] = 0x1F, -- notcontain
+ [0x02204] = 0x20, -- nexists
+ [0x02194] = 0x21, -- leftrightarrow
+ [0x02195] = 0x22, -- updownarrow
+ [0x0219E] = 0x23, -- leftleftarrow
+ [0x0219F] = 0x24, -- upuparrow
+ [0x021A0] = 0x25, -- rightrightarrow
+-- [0x00026] = 0x26, -- amperand
+ [0x021A1] = 0x27, -- downdownarrow
+ [0x021A2] = 0x28, -- leftarrowtail
+ [0x021A3] = 0x29, -- rightarrowtail
+ [0x021A4] = 0x2A, -- leftarrowbar
+ [0x021A6] = 0x2B, -- rightarrowbar
+ [0x021A5] = 0x2C, -- uparrowbar
+-- [0x02212] = 0x2D, -- minus
+-- [0x0002D] = 0x2D, -- minus
+ [0x021A7] = 0x2E, -- downarrowbar
+ [0x021E4] = 0x2F, -- barleftarrow
+ [0x021E5] = 0x30, -- barrightarrow
+
+ [0x021E0] = 0x38, -- dashleftarrow
+ [0x021E1] = 0x39, -- dashuparrow
+ [0x021E2] = 0x3A, -- dashrightarrow
+ [0x021E3] = 0x3B, -- dashdownarrow
+ [0x021A9] = 0x3C, -- hookleftarrow
+-- [0x0003D] = 0x3D, -- equalto
+ [0x021AA] = 0x3E, -- hookrightarrow
+ [0x021AB] = 0x3F, -- looparrowleft
+ [0x021AC] = 0x40, -- looparrowright
+ [0x1D538] = 0x41, -- A (blackboard A)
+ [0x1D539] = 0x42, -- B
+ [0x02102] = 0x43, -- C
+ [0x1D53B] = 0x44, -- D
+ [0x1D53C] = 0x45, -- E
+ [0x1D53D] = 0x46, -- F
+ [0x1D53E] = 0x47, -- G
+ [0x0210D] = 0x48, -- H
+ [0x1D540] = 0x49, -- I
+ [0x1D541] = 0x4A, -- J
+ [0x1D542] = 0x4B, -- K
+ [0x1D543] = 0x4C, -- L
+ [0x1D544] = 0x4D, -- M
+ [0x02115] = 0x4E, -- N
+ [0x1D546] = 0x4F, -- O
+ [0x02119] = 0x50, -- P
+ [0x0211A] = 0x51, -- Q
+ [0x0211D] = 0x52, -- R
+ [0x1D54A] = 0x53, -- S
+ [0x1D54B] = 0x54, -- T
+ [0x1D54C] = 0x55, -- U
+ [0x1D54D] = 0x56, -- V
+ [0x1D54E] = 0x57, -- W
+ [0x1D54F] = 0x58, -- X
+ [0x1D550] = 0x59, -- Y
+ [0x02124] = 0x5A, -- Z (blackboard Z)
+ [0x0231C] = 0x5B, -- ulcorner
+ [0x0231D] = 0x5C, -- urcorner
+ [0x0231E] = 0x5D, -- llcorner
+ [0x0231F] = 0x5E, -- lrcorner
+ [0x02225] = 0x5F, -- parallel, Vert, lVert, rVert, arrowvert
+ [0x021D5] = 0x60, -- Updownarrow
+ [0x021D4] = 0x61, -- Leftrightarrow
+ [0x021D6] = 0x62, -- Upleftarrow
+ [0x021D7] = 0x63, -- Uprightarrow
+ [0x021D9] = 0x64, -- Downleftarrow
+ [0x021D8] = 0x65, -- Downrightarrow
+ [0x021CD] = 0x66, -- nLeftarrow
+ [0x021CE] = 0x67, -- nLeftrightarrow
+ [0x021CF] = 0x68, -- nRightarrow
+-- [0x021CE] = 0x69, -- nLeftrightarrow -- what's the difference between this and 0x0067[0x021CE]
+ [0x021DA] = 0x6A, -- Lleftarrow
+ [0x1D55C] = 0x6B, -- k \Bbbk (blackboard k)
+ [0x021DB] = 0x6C, -- Rrightarrow
+ [0x021C4] = 0x6D, -- rlarrow
+ [0x021C6] = 0x6E, -- lrarrow
+ [0x021C5] = 0x6F, -- udarrow
+-- [0x021C5] = 0x70, -- duarrow
+ [0x021C7] = 0x71, -- llarrow
+ [0x021C8] = 0x72, -- uuarrow
+ [0x021C9] = 0x73, -- rrarrow
+ [0x021CA] = 0x74, -- ddarrow
+ [0x021BE] = 0x75, -- rupharpoon
+ [0x021BF] = 0x76, -- lupharpoon
+ [0x021C2] = 0x77, -- rdownharpoon
+ [0x021C3] = 0x78, -- ldownharpoon
+ [0x021CB] = 0x79, -- lrharpoon
+ [0x021CC] = 0x7A, -- rlharpoon
+ [0x021B0] = 0x7B, -- upthenleftarrow
+-- [0x00000] = 0x7C, -- part
+ [0x021B1] = 0x7D, -- upthenrightarrow
+-- [0x00000] = 0x7E, -- part
+ [0x02276] = 0x7F, -- ltgt
+ [0x021B2] = 0x81, -- downthenleftarrow
+ [0x021B3] = 0x82, -- downthenrightarrow
+ [0x02B0E] = 0x83, -- rightthendownarrow
+ [0x02B10] = 0x84, -- leftthendownarrow
+ [0x02B0F] = 0x85, -- rightthenuparrow
+ [0x02B11] = 0x86, -- leftthenuparrow
+ [0x021B6] = 0x87, -- leftarcarrow
+ [0x021B7] = 0x88, -- rightarcarrow
+ [0x0293D] = 0x89, -- leftarcarrowplus
+ [0x0293C] = 0x8A, -- rightarcarrowminus
+ [0x021BA] = 0x8B, -- anticlockwise
+ [0x021BB] = 0x8C, -- clockwise
+
+ [0x02260] = 0x94, -- noteq
+ [0x02262] = 0x95, -- notidentical
+ [0x02241] = 0x96, -- nottilde
+ [0x02244] = 0x97, -- notasymptoticallyequal
+ [0x02249] = 0x98, -- notalmostequal
+ [0x02247] = 0x99, -- notapproximatelyeq
+ [0x0226E] = 0x9A, -- nless
+ [0x0226F] = 0x9B, -- ngtr
+ [0x02270] = 0x9C, -- nleq
+ [0x02271] = 0x9D, -- ngeq
+ [0x022E6] = 0x9E, -- lnsim
+ [0x022E7] = 0x9F, -- gnsim
+ [0x02605] = 0xAB, -- black star
+ [0x02713] = 0xAC, -- check
+ [0x02277] = 0xC5, -- gtlt
+ [0x02284] = 0xC6, -- nsubsetof
+ [0x02285] = 0xC7, -- nsupsetof
+ [0x02288] = 0xC8, -- nsubseteq
+ [0x02289] = 0xC9, -- nsupseteq
+
+ [0x0228A] = 0xCC, -- subsetneq
+ [0x0228B] = 0xCD, -- supsetneq
+
+-- [0x0228A] = 0xD0, -- subsetneq
+-- [0x0228B] = 0xD1, -- supsetneq
+
+ [0x02270] = 0xD6, -- nleq
+ [0x02271] = 0xD7, -- ngeq
+
+ [0x02268] = 0xDC, -- lneqq
+ [0x02269] = 0xDD, -- gneqq
+
+ [0x022E6] = 0xE0, -- lnsim
+ [0x02219] = 0xE1, -- bullet
+ [0x022E7] = 0xE2, -- gnsim
+
+ [0x02280] = 0xE5, -- nprec
+ [0x02281] = 0xE6, -- nsucc
+
+ [0x022E8] = 0xEB, -- precnsim
+ [0x022E9] = 0xEC, -- succnsim
+
+ [0x022EA] = 0xEF, -- nnormalsub
+ [0x022EB] = 0xF0, -- ncontainnormalsub
+ [0x022EC] = 0xF1, -- nnormalsubeq
+ [0x022ED] = 0xF2, -- ncontainnormalsubeq
+
+ [0x02226] = 0xF7, -- nparallel
+ [0x022AC] = 0xF8, -- nvdash
+ [0x022AE] = 0xF9, -- nVdash
+ [0x022AD] = 0xFA, -- nvDash
+ [0x022AF] = 0xFB, -- nVDash
+}
+
+fonts.enc.math["lbr-mb"] = {
+ [0x00393] = 0x00, -- Gamma
+ [0x00394] = 0x01, -- Delta
+ [0x00398] = 0x02, -- Theta
+ [0x0039B] = 0x03, -- Lambda
+ [0x0039E] = 0x04, -- Xi
+ [0x003A0] = 0x05, -- Pi
+ [0x003A3] = 0x06, -- Sigma
+ [0x003A5] = 0x07, -- Upsilon
+ [0x003A6] = 0x08, -- Phi
+ [0x003A8] = 0x09, -- Psi
+ [0x003A9] = 0x0A, -- Omega
+ [0x0210F] = 0x9D, -- hslash
+ [0x02127] = 0x92, -- mho
+ [0x02132] = 0x90, -- Finv
+ [0x02136] = 0x95, -- beth
+ [0x02137] = 0x96, -- gimel
+ [0x02138] = 0x97, -- daleth
+ [0x02141] = 0x91, -- Game
+ [0x02201] = 0x94, -- complement
+ [0x0226C] = 0xF2, -- between
+ [0x0227C] = 0xE4, -- preccurlyeq
+ [0x0227D] = 0xE5, -- succcurlyeq
+ [0x0229D] = 0xCC, -- circleddash
+ [0x022A8] = 0xD6, -- vDash
+ [0x022AA] = 0xD3, -- Vvdash
+ [0x022B8] = 0xC7, -- multimap
+ [0x022BB] = 0xD2, -- veebar
+ [0x022C7] = 0xF7, -- divideontimes
+ [0x022C9] = 0xCF, -- ltimes
+ [0x022CA] = 0xCE, -- rtimes
+ [0x022CB] = 0xD0, -- leftthreetimes
+ [0x022CC] = 0xD1, -- rightthreetimes
+ [0x022D6] = 0xDC, -- lessdot
+ [0x022D7] = 0xDD, -- gtrdot
+ [0x022DA] = 0xE8, -- lesseqgtr
+ [0x022DB] = 0xE9, -- gtreqless
+ [0x022DE] = 0xE6, -- curlyeqprec
+ [0x022DF] = 0xE7, -- curlyeqsucc
+ [0x024C7] = 0xC9, -- circledR
+ [0x024C8] = 0xCA, -- circledS
+ [0x025B6] = 0xF1, -- blacktriangleright
+ [0x025B8] = 0xF0, -- blacktriangleleft
+ [0x02720] = 0xCB, -- maltese
+ [0x02A7D] = 0xE0, -- leqslant
+ [0x02A7E] = 0xE1, -- geqslant
+ [0x02A85] = 0xDA, -- lessapprox
+ [0x02A86] = 0xDB, -- gtrapprox
+ [0x02A8B] = 0xEA, -- lesseqqgtr
+ [0x02A8C] = 0xEB, -- gtreqqless
+ [0x02A95] = 0xE2, -- eqslantless
+ [0x02A96] = 0xE3, -- eqslantgtr
+ [0x02AB7] = 0xEC, -- precapprox
+ [0x02AB8] = 0xED, -- succapprox
+ [0x02AC5] = 0xEE, -- subseteqq
+ [0x02AC6] = 0xEF, -- supseteqq
+ [0x12035] = 0xC8, -- backprime
+ [0x1D718] = 0x9B, -- varkappa
+}
+
+fonts.enc.math["lbr-sy"] = {
+ [0x021CB] = 0x8D, -- leftrightharpoons
+ [0x021CC] = 0x8E, -- rightleftharpoons
+ [0x02214] = 0x89, -- dotplus
+ [0x02220] = 0x8B, -- angle
+ [0x02221] = 0x8C, -- measuredangle
+ [0x02222] = 0x8D, -- sphericalangle
+ [0x02234] = 0x90, -- therefore
+ [0x02235] = 0x91, -- because
+ [0x0223D] = 0x24, -- backsim
+ [0x02242] = 0x99, -- eqsim
+ [0x0224A] = 0x9D, -- approxeq
+ [0x0224E] = 0xC7, -- Bumpeq
+ [0x02252] = 0xCB, -- fallingdotseq
+ [0x02253] = 0xCC, -- risingdotseq
+ [0x02256] = 0xCF, -- eqcirc
+ [0x02257] = 0xD0, -- circeq
+ [0x0225C] = 0xD5, -- triangleq
+ [0x02266] = 0xDA, -- leqq
+ [0x02267] = 0xDB, -- geqq
+ [0x02272] = 0xDC, -- lesssim
+ [0x02273] = 0xDD, -- gtrsim
+ [0x02276] = 0xDE, -- lessgtr
+ [0x02277] = 0xDF, -- gtrless
+ [0x0227E] = 0xE0, -- precsim
+ [0x0227F] = 0xE1, -- succsim
+ [0x0228F] = 0xE4, -- sqsubset
+ [0x02290] = 0xE5, -- sqsupset
+ [0x0229A] = 0xE6, -- circledcirc
+ [0x0229B] = 0xE7, -- circledast
+ [0x0229E] = 0xEA, -- boxplus
+ [0x0229F] = 0xEB, -- boxminus
+ [0x022A0] = 0xEC, -- boxtimes
+ [0x022A1] = 0xED, -- boxdot
+ [0x022A7] = 0xEE, -- models
+ [0x022A9] = 0xF0, -- Vdash
+ [0x022BC] = 0xF6, -- barwedge
+ [0x022CE] = 0x85, -- curlyvee
+ [0x022CF] = 0x84, -- curlywedge
+ [0x022D0] = 0xF8, -- Subset
+ [0x022D1] = 0xF9, -- Supset
+ [0x02300] = 0x53, -- varnothing
+ [0x025CA] = 0x05, -- lozenge
+}
+
+fonts.enc.math["lbr-sy"] = table.merged(fonts.enc.math["tex-sy"],fonts.enc.math["lbr-sy"])
+
+return {
+ name = "lucida-math",
+ version = "1.00",
+ comment = "Goodies that complement lucida math.",
+ author = "Aditya, Hans, Mojca",
+ copyright = "ConTeXt development team",
+ mathematics = {
+ mapfiles = {
+ "lucida.map",
+ },
+ virtuals = {
+ ["lucida-math"] = {
+ { name = "file:lbr.afm", features = "virtualmath", main = true },
+ { name = "hlcrim.tfm", vector = "tex-mi", skewchar=0x7F },
+ { name = "hlcrim.tfm", vector = "tex-it", skewchar=0x7F },
+ { name = "hlcry.tfm", vector = "lbr-sy", skewchar=0x30, parameters = true },
+ { name = "hlcrv.tfm", vector = "tex-ex", extension = true },
+ { name = "hlcra.tfm", vector = "lbr-ma" },
+ { name = "hlcrm.tfm", vector = "lbr-mb" },
+ }
+ }
+ }
+}
diff --git a/Master/texmf-dist/tex/context/fonts/mathtimes-math.lfg b/Master/texmf-dist/tex/context/fonts/mathtimes-math.lfg
new file mode 100644
index 00000000000..951cb683814
--- /dev/null
+++ b/Master/texmf-dist/tex/context/fonts/mathtimes-math.lfg
@@ -0,0 +1,24 @@
+return {
+ name = "mathtimes-math",
+ version = "1.00",
+ comment = "Goodies that complement mathtimes math.",
+ author = "Hans Hagen",
+ copyright = "ConTeXt development team",
+ mathematics = {
+ mapfiles = {
+ "mathtime.map",
+ "mkiv-base.map",
+ },
+ virtuals = {
+ ["mathtimes-math"] = {
+ { name = "file:texgyretermes-regular.otf", features = "virtualmath", main = true },
+ { name = "mtmiz.tfm", vector = "tex-mi", skewchar=0x7F },
+ { name = "mtmiz.tfm", vector = "tex-it", skewchar=0x7F },
+ { name = "mtsyn.tfm", vector = "tex-sy", skewchar=0x30, parameters = true },
+ { name = "mtex.tfm", vector = "tex-ex", extension = true },
+ { name = "msam10.tfm", vector = "tex-ma" },
+ { name = "msbm10.tfm", vector = "tex-mb" },
+ }
+ }
+ }
+}
diff --git a/Master/texmf-dist/tex/context/fonts/px-math.lfg b/Master/texmf-dist/tex/context/fonts/px-math.lfg
new file mode 100644
index 00000000000..b261f07013a
--- /dev/null
+++ b/Master/texmf-dist/tex/context/fonts/px-math.lfg
@@ -0,0 +1,24 @@
+return {
+ name = "px-math",
+ version = "1.00",
+ comment = "Goodies that complement px math.",
+ author = "Hans Hagen",
+ copyright = "ConTeXt development team",
+ mathematics = {
+ mapfiles = {
+ "mkiv-px.map",
+ },
+ virtuals = {
+ ["px-math"] = {
+ { name = "texgyrepagella-regular.otf", features = "virtualmath", main = true },
+ { name = "rpxr.tfm", vector = "tex-mr" } ,
+ { name = "rpxmi.tfm", vector = "tex-mi", skewchar=0x7F },
+ { name = "rpxpplri.tfm", vector = "tex-it", skewchar=0x7F },
+ { name = "pxsy.tfm", vector = "tex-sy", skewchar=0x30, parameters = true } ,
+ { name = "pxex.tfm", vector = "tex-ex", extension = true } ,
+ { name = "pxsya.tfm", vector = "tex-ma" },
+ { name = "pxsyb.tfm", vector = "tex-mb" },
+ },
+ }
+ }
+}
diff --git a/Master/texmf-dist/tex/context/fonts/symbol-math.lfg b/Master/texmf-dist/tex/context/fonts/symbol-math.lfg
new file mode 100644
index 00000000000..d37a3b1ee1e
--- /dev/null
+++ b/Master/texmf-dist/tex/context/fonts/symbol-math.lfg
@@ -0,0 +1,17 @@
+return {
+ name = "symbol-math",
+ version = "1.00",
+ comment = "Goodies that complement symbol math.",
+ author = "Hans Hagen",
+ copyright = "ConTeXt development team",
+ mathematics = {
+ mapfiles = {
+ "mkiv-base.map",
+ },
+ virtuals = {
+ ["symbol-math"] = {
+ { name = "rsfs10", features = "virtualmath", main = true }, -- tfm name needed
+ },
+ }
+ }
+}
diff --git a/Master/texmf-dist/tex/context/fonts/tx-math.lfg b/Master/texmf-dist/tex/context/fonts/tx-math.lfg
new file mode 100644
index 00000000000..f1d5327733e
--- /dev/null
+++ b/Master/texmf-dist/tex/context/fonts/tx-math.lfg
@@ -0,0 +1,24 @@
+return {
+ name = "tx-math",
+ version = "1.00",
+ comment = "Goodies that complement tx math.",
+ author = "Hans Hagen",
+ copyright = "ConTeXt development team",
+ mathematics = {
+ mapfiles = {
+ "mkiv-tx.map",
+ },
+ virtuals = {
+ ["tx-math"] = {
+ { name = "texgyretermes-regular.otf", features = "virtualmath", main = true },
+ { name = "rtxr.tfm", vector = "tex-mr" } ,
+ { name = "rtxptmri.tfm", vector = "tex-it", skewchar=0x7F },
+ { name = "rtxmi.tfm", vector = "tex-mi", skewchar=0x7F },
+ { name = "txsy.tfm", vector = "tex-sy", skewchar=0x30, parameters = true } ,
+ { name = "txex.tfm", vector = "tex-ex", extension = true } ,
+ { name = "txsya.tfm", vector = "tex-ma" },
+ { name = "txsyb.tfm", vector = "tex-mb" },
+ }
+ }
+ }
+}
diff --git a/Master/texmf-dist/tex/context/fonts/utopia-math.lfg b/Master/texmf-dist/tex/context/fonts/utopia-math.lfg
new file mode 100644
index 00000000000..4074aa88615
--- /dev/null
+++ b/Master/texmf-dist/tex/context/fonts/utopia-math.lfg
@@ -0,0 +1,28 @@
+return {
+ name = "utopia-math",
+ version = "1.00",
+ comment = "Goodies that complement utopia math.",
+ author = "Hans, Mojca, Aditya",
+ copyright = "ConTeXt development team",
+ mathematics = {
+ mapfiles = {
+ "mdput.map",
+ "mkiv-base.map",
+ },
+ virtuals = {
+ ["utopia-math"] = {
+ -- { name = "file:putr8a", features = "virtualmath", main = true },
+ { name = "file:putri8a", features = "virtualmath", main = true },
+ -- { name = "md-utr7m.tfm", vector = "tex-mr" },
+ { name = "md-utri7m.tfm", vector = "tex-mi", skewchar=0x7F },
+ { name = "md-utri7m.tfm", vector = "tex-it", skewchar=0x7F },
+ { name = "md-utr7y.tfm", vector = "tex-sy", skewchar=0x30, parameters = true },
+ { name = "md-utr7v.tfm", vector = "tex-ex", extension = true },
+ -- { name = "md-utbma.tfm", vector = "tex-ma" },
+ -- { name = "md-utbmb.tfm", vector = "tex-mb" },
+ { name = "msam10.tfm", vector = "tex-ma" },
+ { name = "msbm10.tfm", vector = "tex-mb" },
+ }
+ }
+ }
+}
diff --git a/Master/texmf-dist/tex/context/interface/cont-cs.xml b/Master/texmf-dist/tex/context/interface/cont-cs.xml
index 3bfad5fb450..d6783304124 100644
--- a/Master/texmf-dist/tex/context/interface/cont-cs.xml
+++ b/Master/texmf-dist/tex/context/interface/cont-cs.xml
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="UTF-8"?><!-- versions:
+<?xml version="1.0" encoding="UTF-8"?> <!-- versions:
comment : user interface definitions of ConTeXt
@@ -577,6 +577,7 @@
<cd:constant type="ano"/>
<cd:constant type="ne"/>
<cd:constant type="vzdy"/>
+ <cd:constant type="nikdy"/>
</cd:parameter>
<cd:parameter name="redukce">
<cd:constant type="ano"/>
@@ -619,6 +620,11 @@
<cd:constant type="vse"/>
<cd:constant type="zadny"/>
</cd:parameter>
+ <cd:parameter name="intent">
+ <cd:constant type="zadny"/>
+ <cd:constant type="overprint"/>
+ <cd:constant type="knockout"/>
+ </cd:parameter>
</cd:assignments>
</cd:arguments>
</cd:command>
@@ -939,7 +945,7 @@
<cd:parameter name="volba">
<cd:constant type="sklonene"/>
<cd:constant type="normalni"/>
- <cd:constant type="prikazy"/>
+ <cd:constant type="prikazy" version="mkiv"/>
<cd:constant type="barevne"/>
<cd:constant type="zadny"/>
</cd:parameter>
@@ -984,7 +990,7 @@
<cd:constant type="radek"/>
</cd:parameter>
<cd:parameter name="escape">
- <cd:constant type="cd:character"/>
+ <cd:constant type="cd:text"/>
</cd:parameter>
<cd:parameter name="mezera">
<cd:constant type="zap"/>
@@ -1011,6 +1017,9 @@
<cd:parameter name="paleta">
<cd:constant type="cd:name"/>
</cd:parameter>
+ <cd:parameter name="range">
+ <cd:constant type="cd:text"/>
+ </cd:parameter>
<cd:parameter name="radky">
<cd:constant type="ano"/>
<cd:constant type="ne"/>
@@ -1029,6 +1038,11 @@
<cd:parameter name="zakladnifont">
<cd:resolve name="bodyfont"/>
</cd:parameter>
+ <cd:parameter name="strip">
+ <cd:constant type="ne"/>
+ <cd:constant type="auto"/>
+ <cd:constant type="cd:number"/>
+ </cd:parameter>
</cd:assignments>
</cd:arguments>
</cd:command>
@@ -1239,7 +1253,7 @@
<cd:command name="underbar" file="core-fnt.tex">
<cd:sequence>
- <cd:string value="podtrzeno"/>
+ <cd:string value="underbar"/>
</cd:sequence>
<cd:arguments>
<cd:content n="1"/>
@@ -1248,7 +1262,7 @@
<cd:command name="underbars" file="core-fnt.tex">
<cd:sequence>
- <cd:string value="podtrzeni"/>
+ <cd:string value="underbars"/>
</cd:sequence>
<cd:arguments>
<cd:word n="1" list="yes"/>
@@ -1257,7 +1271,7 @@
<cd:command name="overbar" file="core-fnt.tex">
<cd:sequence>
- <cd:string value="nadtrzeno"/>
+ <cd:string value="overbar"/>
</cd:sequence>
<cd:arguments>
<cd:content n="1"/>
@@ -1266,7 +1280,7 @@
<cd:command name="overbars" file="core-fnt.tex">
<cd:sequence>
- <cd:string value="nadtrzeni"/>
+ <cd:string value="overbars"/>
</cd:sequence>
<cd:arguments>
<cd:word n="1" list="yes"/>
@@ -1275,7 +1289,7 @@
<cd:command name="overstrike" file="core-fnt.tex">
<cd:sequence>
- <cd:string value="preskrtnuto"/>
+ <cd:string value="overstrike"/>
</cd:sequence>
<cd:arguments>
<cd:content n="1"/>
@@ -1284,7 +1298,7 @@
<cd:command name="overstrikes" file="core-fnt.tex">
<cd:sequence>
- <cd:string value="preskrtnuti"/>
+ <cd:string value="overstrikes"/>
</cd:sequence>
<cd:arguments>
<cd:word n="1" list="yes"/>
@@ -3996,6 +4010,7 @@
<cd:constant type="nonumber"/>
<cd:constant type="vpravo"/>
<cd:constant type="vlevo"/>
+ <cd:constant type="vnejsi"/>
</cd:keywords>
<cd:content n="2"/>
</cd:arguments>
@@ -4198,6 +4213,11 @@
<cd:parameter name="prikaz">
<cd:constant type="cd:oneargument"/>
</cd:parameter>
+ <cd:parameter name="stranka">
+ <cd:constant type="posledni"/>
+ <cd:constant type="ano"/>
+ <cd:constant type="ne"/>
+ </cd:parameter>
</cd:assignments>
</cd:arguments>
</cd:command>
@@ -4763,6 +4783,10 @@
<cd:constant type="ano"/>
<cd:constant type="ne"/>
</cd:parameter>
+ <cd:parameter name="export">
+ <cd:constant type="ano"/>
+ <cd:constant type="ne"/>
+ </cd:parameter>
</cd:assignments>
</cd:arguments>
</cd:command>
@@ -4997,6 +5021,8 @@
<cd:constant type="lokalne"/>
<cd:constant type="predchozi"/>
<cd:constant type="aktualni"/>
+ <cd:constant type="zde"/>
+ <cd:constant type="uvod"/>
<cd:constant type="vse"/>
</cd:parameter>
<cd:parameter name="hranicestranky">
@@ -5415,8 +5441,18 @@
<cd:constant type="cd:dimension"/>
</cd:parameter>
<cd:parameter name="misto">
- <cd:constant type="dotextu"/>
+ <cd:constant type="nastred"/>
+ <cd:constant type="vlevo"/>
+ <cd:constant type="marginalie"/>
<cd:constant type="naokraji"/>
+ <cd:constant type="vlevo"/>
+ <cd:constant type="vpravo"/>
+ <cd:constant type="vpravo"/>
+ <cd:constant type="uvnitr"/>
+ <cd:constant type="vnejsi"/>
+ <cd:constant type="text"/>
+ <cd:constant type="begin"/>
+ <cd:constant type="end"/>
</cd:parameter>
<cd:parameter name="pismeno">
<cd:resolve name="style"/>
@@ -6097,6 +6133,7 @@
</cd:command>
<cd:command name="setupitemgroup" file="core-itm.tex">
+ <!-- we mis a few experimental keys here, like alignsymbol and indentation -->
<cd:sequence>
<cd:string value="setupitemgroup"/>
</cd:sequence>
@@ -6152,6 +6189,9 @@
<cd:parameter name="vzdalenost">
<cd:constant type="cd:dimension"/>
</cd:parameter>
+ <cd:parameter name="krok">
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
<cd:parameter name="faktor">
<cd:constant type="cd:number"/>
</cd:parameter>
@@ -6209,6 +6249,13 @@
<cd:parameter name="odsadpristi">
<cd:resolve name="indentnext"/>
</cd:parameter>
+ <cd:parameter name="textdistance">
+ <!-- maybe resolve here too -->
+ <cd:constant type="zadny"/>
+ <cd:constant type="velke"/>
+ <cd:constant type="stredni"/>
+ <cd:constant type="male"/>
+ </cd:parameter>
</cd:assignments>
</cd:arguments>
</cd:command>
@@ -7044,6 +7091,10 @@
<cd:constant type="vlevo"/>
<cd:constant type="nastred" default="yes"/>
<cd:constant type="vpravo"/>
+ <cd:constant type="-left"/>
+ <cd:constant type="-middle"/>
+ <cd:constant type="-right"/>
+ <cd:constant type="-none"/>
</cd:keywords>
</cd:arguments>
</cd:command>
diff --git a/Master/texmf-dist/tex/context/interface/cont-de.xml b/Master/texmf-dist/tex/context/interface/cont-de.xml
index 2fe0f460ca6..6ba3e691ed5 100644
--- a/Master/texmf-dist/tex/context/interface/cont-de.xml
+++ b/Master/texmf-dist/tex/context/interface/cont-de.xml
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="UTF-8"?><!-- versions:
+<?xml version="1.0" encoding="UTF-8"?> <!-- versions:
comment : user interface definitions of ConTeXt
@@ -577,6 +577,7 @@
<cd:constant type="ja"/>
<cd:constant type="nein"/>
<cd:constant type="immer"/>
+ <cd:constant type="nie"/>
</cd:parameter>
<cd:parameter name="reduktion">
<cd:constant type="ja"/>
@@ -619,6 +620,11 @@
<cd:constant type="alles"/>
<cd:constant type="kein"/>
</cd:parameter>
+ <cd:parameter name="intent">
+ <cd:constant type="kein"/>
+ <cd:constant type="overprint"/>
+ <cd:constant type="knockout"/>
+ </cd:parameter>
</cd:assignments>
</cd:arguments>
</cd:command>
@@ -939,7 +945,7 @@
<cd:parameter name="option">
<cd:constant type="geneigt"/>
<cd:constant type="normal"/>
- <cd:constant type="befehle"/>
+ <cd:constant type="befehle" version="mkiv"/>
<cd:constant type="farbe"/>
<cd:constant type="kein"/>
</cd:parameter>
@@ -984,7 +990,7 @@
<cd:constant type="zeile"/>
</cd:parameter>
<cd:parameter name="escape">
- <cd:constant type="cd:character"/>
+ <cd:constant type="cd:text"/>
</cd:parameter>
<cd:parameter name="spatium">
<cd:constant type="an"/>
@@ -1011,6 +1017,9 @@
<cd:parameter name="palette">
<cd:constant type="cd:name"/>
</cd:parameter>
+ <cd:parameter name="range">
+ <cd:constant type="cd:text"/>
+ </cd:parameter>
<cd:parameter name="zeilen">
<cd:constant type="ja"/>
<cd:constant type="nein"/>
@@ -1029,6 +1038,11 @@
<cd:parameter name="fliesstext">
<cd:resolve name="bodyfont"/>
</cd:parameter>
+ <cd:parameter name="strip">
+ <cd:constant type="nein"/>
+ <cd:constant type="auto"/>
+ <cd:constant type="cd:number"/>
+ </cd:parameter>
</cd:assignments>
</cd:arguments>
</cd:command>
@@ -1239,7 +1253,7 @@
<cd:command name="underbar" file="core-fnt.tex">
<cd:sequence>
- <cd:string value="unterstrichen"/>
+ <cd:string value="underbar"/>
</cd:sequence>
<cd:arguments>
<cd:content n="1"/>
@@ -1248,7 +1262,7 @@
<cd:command name="underbars" file="core-fnt.tex">
<cd:sequence>
- <cd:string value="unterstreichen"/>
+ <cd:string value="underbars"/>
</cd:sequence>
<cd:arguments>
<cd:word n="1" list="yes"/>
@@ -1257,7 +1271,7 @@
<cd:command name="overbar" file="core-fnt.tex">
<cd:sequence>
- <cd:string value="ueberstrichen"/>
+ <cd:string value="overbar"/>
</cd:sequence>
<cd:arguments>
<cd:content n="1"/>
@@ -1266,7 +1280,7 @@
<cd:command name="overbars" file="core-fnt.tex">
<cd:sequence>
- <cd:string value="ueberstreichen"/>
+ <cd:string value="overbars"/>
</cd:sequence>
<cd:arguments>
<cd:word n="1" list="yes"/>
@@ -1275,7 +1289,7 @@
<cd:command name="overstrike" file="core-fnt.tex">
<cd:sequence>
- <cd:string value="durchgestrichen"/>
+ <cd:string value="overstrike"/>
</cd:sequence>
<cd:arguments>
<cd:content n="1"/>
@@ -1284,7 +1298,7 @@
<cd:command name="overstrikes" file="core-fnt.tex">
<cd:sequence>
- <cd:string value="durchstreichen"/>
+ <cd:string value="overstrikes"/>
</cd:sequence>
<cd:arguments>
<cd:word n="1" list="yes"/>
@@ -3996,6 +4010,7 @@
<cd:constant type="nonumber"/>
<cd:constant type="rechts"/>
<cd:constant type="links"/>
+ <cd:constant type="aussen"/>
</cd:keywords>
<cd:content n="2"/>
</cd:arguments>
@@ -4198,6 +4213,11 @@
<cd:parameter name="befehl">
<cd:constant type="cd:oneargument"/>
</cd:parameter>
+ <cd:parameter name="seite">
+ <cd:constant type="letzte"/>
+ <cd:constant type="ja"/>
+ <cd:constant type="nein"/>
+ </cd:parameter>
</cd:assignments>
</cd:arguments>
</cd:command>
@@ -4763,6 +4783,10 @@
<cd:constant type="ja"/>
<cd:constant type="nein"/>
</cd:parameter>
+ <cd:parameter name="export">
+ <cd:constant type="ja"/>
+ <cd:constant type="nein"/>
+ </cd:parameter>
</cd:assignments>
</cd:arguments>
</cd:command>
@@ -4997,6 +5021,8 @@
<cd:constant type="lokal"/>
<cd:constant type="vorig"/>
<cd:constant type="aktuell"/>
+ <cd:constant type="hier"/>
+ <cd:constant type="intro"/>
<cd:constant type="alles"/>
</cd:parameter>
<cd:parameter name="seitenbegrenzung">
@@ -5415,8 +5441,18 @@
<cd:constant type="cd:dimension"/>
</cd:parameter>
<cd:parameter name="platz">
- <cd:constant type="imtext"/>
+ <cd:constant type="mittig"/>
+ <cd:constant type="links"/>
+ <cd:constant type="marginalie"/>
<cd:constant type="imrand"/>
+ <cd:constant type="imlinken"/>
+ <cd:constant type="rechts"/>
+ <cd:constant type="imrechten"/>
+ <cd:constant type="innen"/>
+ <cd:constant type="aussen"/>
+ <cd:constant type="text"/>
+ <cd:constant type="begin"/>
+ <cd:constant type="end"/>
</cd:parameter>
<cd:parameter name="stil">
<cd:resolve name="style"/>
@@ -6097,6 +6133,7 @@
</cd:command>
<cd:command name="setupitemgroup" file="core-itm.tex">
+ <!-- we mis a few experimental keys here, like alignsymbol and indentation -->
<cd:sequence>
<cd:string value="setupitemgroup"/>
</cd:sequence>
@@ -6152,6 +6189,9 @@
<cd:parameter name="abstand">
<cd:constant type="cd:dimension"/>
</cd:parameter>
+ <cd:parameter name="schritt">
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
<cd:parameter name="faktor">
<cd:constant type="cd:number"/>
</cd:parameter>
@@ -6209,6 +6249,13 @@
<cd:parameter name="ziehefolgendeein">
<cd:resolve name="indentnext"/>
</cd:parameter>
+ <cd:parameter name="textdistance">
+ <!-- maybe resolve here too -->
+ <cd:constant type="kein"/>
+ <cd:constant type="gross"/>
+ <cd:constant type="mittel"/>
+ <cd:constant type="klein"/>
+ </cd:parameter>
</cd:assignments>
</cd:arguments>
</cd:command>
@@ -7044,6 +7091,10 @@
<cd:constant type="links"/>
<cd:constant type="mittig" default="yes"/>
<cd:constant type="rechts"/>
+ <cd:constant type="-left"/>
+ <cd:constant type="-middle"/>
+ <cd:constant type="-right"/>
+ <cd:constant type="-none"/>
</cd:keywords>
</cd:arguments>
</cd:command>
diff --git a/Master/texmf-dist/tex/context/interface/cont-en.xml b/Master/texmf-dist/tex/context/interface/cont-en.xml
index e15d017a286..5421df6e375 100644
--- a/Master/texmf-dist/tex/context/interface/cont-en.xml
+++ b/Master/texmf-dist/tex/context/interface/cont-en.xml
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="UTF-8"?><!-- versions:
+<?xml version="1.0" encoding="UTF-8"?> <!-- versions:
comment : user interface definitions of ConTeXt
@@ -577,6 +577,7 @@
<cd:constant type="yes"/>
<cd:constant type="no"/>
<cd:constant type="always"/>
+ <cd:constant type="never"/>
</cd:parameter>
<cd:parameter name="reduction">
<cd:constant type="yes"/>
@@ -619,6 +620,11 @@
<cd:constant type="all"/>
<cd:constant type="none"/>
</cd:parameter>
+ <cd:parameter name="intent">
+ <cd:constant type="none"/>
+ <cd:constant type="overprint"/>
+ <cd:constant type="knockout"/>
+ </cd:parameter>
</cd:assignments>
</cd:arguments>
</cd:command>
@@ -939,7 +945,7 @@
<cd:parameter name="option">
<cd:constant type="slanted"/>
<cd:constant type="normal"/>
- <cd:constant type="commands"/>
+ <cd:constant type="commands" version="mkiv"/>
<cd:constant type="color"/>
<cd:constant type="none"/>
</cd:parameter>
@@ -984,7 +990,7 @@
<cd:constant type="line"/>
</cd:parameter>
<cd:parameter name="escape">
- <cd:constant type="cd:character"/>
+ <cd:constant type="cd:text"/>
</cd:parameter>
<cd:parameter name="space">
<cd:constant type="on"/>
@@ -1011,6 +1017,9 @@
<cd:parameter name="palet">
<cd:constant type="cd:name"/>
</cd:parameter>
+ <cd:parameter name="range">
+ <cd:constant type="cd:text"/>
+ </cd:parameter>
<cd:parameter name="lines">
<cd:constant type="yes"/>
<cd:constant type="no"/>
@@ -1029,6 +1038,11 @@
<cd:parameter name="bodyfont">
<cd:resolve name="bodyfont"/>
</cd:parameter>
+ <cd:parameter name="strip">
+ <cd:constant type="no"/>
+ <cd:constant type="auto"/>
+ <cd:constant type="cd:number"/>
+ </cd:parameter>
</cd:assignments>
</cd:arguments>
</cd:command>
@@ -3996,6 +4010,7 @@
<cd:constant type="nonumber"/>
<cd:constant type="right"/>
<cd:constant type="left"/>
+ <cd:constant type="outer"/>
</cd:keywords>
<cd:content n="2"/>
</cd:arguments>
@@ -4198,6 +4213,11 @@
<cd:parameter name="command">
<cd:constant type="cd:oneargument"/>
</cd:parameter>
+ <cd:parameter name="page">
+ <cd:constant type="last"/>
+ <cd:constant type="yes"/>
+ <cd:constant type="no"/>
+ </cd:parameter>
</cd:assignments>
</cd:arguments>
</cd:command>
@@ -4763,6 +4783,10 @@
<cd:constant type="yes"/>
<cd:constant type="no"/>
</cd:parameter>
+ <cd:parameter name="export">
+ <cd:constant type="yes"/>
+ <cd:constant type="no"/>
+ </cd:parameter>
</cd:assignments>
</cd:arguments>
</cd:command>
@@ -4997,6 +5021,8 @@
<cd:constant type="local"/>
<cd:constant type="previous"/>
<cd:constant type="current"/>
+ <cd:constant type="here"/>
+ <cd:constant type="intro"/>
<cd:constant type="all"/>
</cd:parameter>
<cd:parameter name="pageboundaries">
@@ -5415,8 +5441,18 @@
<cd:constant type="cd:dimension"/>
</cd:parameter>
<cd:parameter name="location">
- <cd:constant type="intext"/>
+ <cd:constant type="middle"/>
+ <cd:constant type="left"/>
+ <cd:constant type="margin"/>
<cd:constant type="inmargin"/>
+ <cd:constant type="inleft"/>
+ <cd:constant type="right"/>
+ <cd:constant type="inright"/>
+ <cd:constant type="inner"/>
+ <cd:constant type="outer"/>
+ <cd:constant type="text"/>
+ <cd:constant type="begin"/>
+ <cd:constant type="end"/>
</cd:parameter>
<cd:parameter name="style">
<cd:resolve name="style"/>
@@ -6097,6 +6133,7 @@
</cd:command>
<cd:command name="setupitemgroup" file="core-itm.tex">
+ <!-- we mis a few experimental keys here, like alignsymbol and indentation -->
<cd:sequence>
<cd:string value="setupitemgroup"/>
</cd:sequence>
@@ -6152,6 +6189,9 @@
<cd:parameter name="distance">
<cd:constant type="cd:dimension"/>
</cd:parameter>
+ <cd:parameter name="step">
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
<cd:parameter name="factor">
<cd:constant type="cd:number"/>
</cd:parameter>
@@ -6209,6 +6249,13 @@
<cd:parameter name="indentnext">
<cd:resolve name="indentnext"/>
</cd:parameter>
+ <cd:parameter name="textdistance">
+ <!-- maybe resolve here too -->
+ <cd:constant type="none"/>
+ <cd:constant type="big"/>
+ <cd:constant type="medium"/>
+ <cd:constant type="small"/>
+ </cd:parameter>
</cd:assignments>
</cd:arguments>
</cd:command>
@@ -7044,6 +7091,10 @@
<cd:constant type="left"/>
<cd:constant type="middle" default="yes"/>
<cd:constant type="right"/>
+ <cd:constant type="-left"/>
+ <cd:constant type="-middle"/>
+ <cd:constant type="-right"/>
+ <cd:constant type="-none"/>
</cd:keywords>
</cd:arguments>
</cd:command>
diff --git a/Master/texmf-dist/tex/context/interface/cont-fr.xml b/Master/texmf-dist/tex/context/interface/cont-fr.xml
index 0a4e5bb4dc3..043a2b91fd3 100644
--- a/Master/texmf-dist/tex/context/interface/cont-fr.xml
+++ b/Master/texmf-dist/tex/context/interface/cont-fr.xml
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="UTF-8"?><!-- versions:
+<?xml version="1.0" encoding="UTF-8"?> <!-- versions:
comment : user interface definitions of ConTeXt
@@ -577,6 +577,7 @@
<cd:constant type="oui"/>
<cd:constant type="non"/>
<cd:constant type="toujours"/>
+ <cd:constant type="jamais"/>
</cd:parameter>
<cd:parameter name="reduction">
<cd:constant type="oui"/>
@@ -619,6 +620,11 @@
<cd:constant type="tout"/>
<cd:constant type="rien"/>
</cd:parameter>
+ <cd:parameter name="intent">
+ <cd:constant type="rien"/>
+ <cd:constant type="overprint"/>
+ <cd:constant type="knockout"/>
+ </cd:parameter>
</cd:assignments>
</cd:arguments>
</cd:command>
@@ -939,7 +945,7 @@
<cd:parameter name="option">
<cd:constant type="incline"/>
<cd:constant type="normal"/>
- <cd:constant type="commandes"/>
+ <cd:constant type="commandes" version="mkiv"/>
<cd:constant type="couleur"/>
<cd:constant type="rien"/>
</cd:parameter>
@@ -984,7 +990,7 @@
<cd:constant type="ligne"/>
</cd:parameter>
<cd:parameter name="escape">
- <cd:constant type="cd:character"/>
+ <cd:constant type="cd:text"/>
</cd:parameter>
<cd:parameter name="espace">
<cd:constant type="actif"/>
@@ -1011,6 +1017,9 @@
<cd:parameter name="palette">
<cd:constant type="cd:name"/>
</cd:parameter>
+ <cd:parameter name="range">
+ <cd:constant type="cd:text"/>
+ </cd:parameter>
<cd:parameter name="lignes">
<cd:constant type="oui"/>
<cd:constant type="non"/>
@@ -1029,6 +1038,11 @@
<cd:parameter name="policecorps">
<cd:resolve name="bodyfont"/>
</cd:parameter>
+ <cd:parameter name="strip">
+ <cd:constant type="non"/>
+ <cd:constant type="auto"/>
+ <cd:constant type="cd:number"/>
+ </cd:parameter>
</cd:assignments>
</cd:arguments>
</cd:command>
@@ -1239,7 +1253,7 @@
<cd:command name="underbar" file="core-fnt.tex">
<cd:sequence>
- <cd:string value="souslignetout"/>
+ <cd:string value="underbar"/>
</cd:sequence>
<cd:arguments>
<cd:content n="1"/>
@@ -1248,7 +1262,7 @@
<cd:command name="underbars" file="core-fnt.tex">
<cd:sequence>
- <cd:string value="sousligne"/>
+ <cd:string value="underbars"/>
</cd:sequence>
<cd:arguments>
<cd:word n="1" list="yes"/>
@@ -1275,7 +1289,7 @@
<cd:command name="overstrike" file="core-fnt.tex">
<cd:sequence>
- <cd:string value="surlignetout"/>
+ <cd:string value="overstrike"/>
</cd:sequence>
<cd:arguments>
<cd:content n="1"/>
@@ -1284,7 +1298,7 @@
<cd:command name="overstrikes" file="core-fnt.tex">
<cd:sequence>
- <cd:string value="surligne"/>
+ <cd:string value="overstrikes"/>
</cd:sequence>
<cd:arguments>
<cd:word n="1" list="yes"/>
@@ -3996,6 +4010,7 @@
<cd:constant type="sansnumero"/>
<cd:constant type="droite"/>
<cd:constant type="gauche"/>
+ <cd:constant type="exterieur"/>
</cd:keywords>
<cd:content n="2"/>
</cd:arguments>
@@ -4198,6 +4213,11 @@
<cd:parameter name="commande">
<cd:constant type="cd:oneargument"/>
</cd:parameter>
+ <cd:parameter name="page">
+ <cd:constant type="dernier"/>
+ <cd:constant type="oui"/>
+ <cd:constant type="non"/>
+ </cd:parameter>
</cd:assignments>
</cd:arguments>
</cd:command>
@@ -4763,6 +4783,10 @@
<cd:constant type="oui"/>
<cd:constant type="non"/>
</cd:parameter>
+ <cd:parameter name="export">
+ <cd:constant type="oui"/>
+ <cd:constant type="non"/>
+ </cd:parameter>
</cd:assignments>
</cd:arguments>
</cd:command>
@@ -4997,6 +5021,8 @@
<cd:constant type="local"/>
<cd:constant type="precedent"/>
<cd:constant type="courant"/>
+ <cd:constant type="ici"/>
+ <cd:constant type="intro"/>
<cd:constant type="tout"/>
</cd:parameter>
<cd:parameter name="limitespage">
@@ -5415,8 +5441,18 @@
<cd:constant type="cd:dimension"/>
</cd:parameter>
<cd:parameter name="emplacement">
- <cd:constant type="danstexte"/>
+ <cd:constant type="milieu"/>
+ <cd:constant type="gauche"/>
+ <cd:constant type="marge"/>
<cd:constant type="dansmarge"/>
+ <cd:constant type="dansgauche"/>
+ <cd:constant type="droite"/>
+ <cd:constant type="dansdroit"/>
+ <cd:constant type="interieur"/>
+ <cd:constant type="exterieur"/>
+ <cd:constant type="texte"/>
+ <cd:constant type="begin"/>
+ <cd:constant type="end"/>
</cd:parameter>
<cd:parameter name="style">
<cd:resolve name="style"/>
@@ -6097,6 +6133,7 @@
</cd:command>
<cd:command name="setupitemgroup" file="core-itm.tex">
+ <!-- we mis a few experimental keys here, like alignsymbol and indentation -->
<cd:sequence>
<cd:string value="setupitemgroup"/>
</cd:sequence>
@@ -6152,6 +6189,9 @@
<cd:parameter name="distance">
<cd:constant type="cd:dimension"/>
</cd:parameter>
+ <cd:parameter name="pas">
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
<cd:parameter name="facteur">
<cd:constant type="cd:number"/>
</cd:parameter>
@@ -6209,6 +6249,13 @@
<cd:parameter name="indentesuivant">
<cd:resolve name="indentnext"/>
</cd:parameter>
+ <cd:parameter name="distancetexte">
+ <!-- maybe resolve here too -->
+ <cd:constant type="rien"/>
+ <cd:constant type="grand"/>
+ <cd:constant type="moyen"/>
+ <cd:constant type="petit"/>
+ </cd:parameter>
</cd:assignments>
</cd:arguments>
</cd:command>
@@ -7044,6 +7091,10 @@
<cd:constant type="gauche"/>
<cd:constant type="milieu" default="yes"/>
<cd:constant type="droite"/>
+ <cd:constant type="-left"/>
+ <cd:constant type="-middle"/>
+ <cd:constant type="-right"/>
+ <cd:constant type="-none"/>
</cd:keywords>
</cd:arguments>
</cd:command>
diff --git a/Master/texmf-dist/tex/context/interface/cont-it.xml b/Master/texmf-dist/tex/context/interface/cont-it.xml
index 8064a3294a6..9e470fe684d 100644
--- a/Master/texmf-dist/tex/context/interface/cont-it.xml
+++ b/Master/texmf-dist/tex/context/interface/cont-it.xml
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="UTF-8"?><!-- versions:
+<?xml version="1.0" encoding="UTF-8"?> <!-- versions:
comment : user interface definitions of ConTeXt
@@ -577,6 +577,7 @@
<cd:constant type="si"/>
<cd:constant type="no"/>
<cd:constant type="sempre"/>
+ <cd:constant type="mai"/>
</cd:parameter>
<cd:parameter name="riduzione">
<cd:constant type="si"/>
@@ -619,6 +620,11 @@
<cd:constant type="tutti"/>
<cd:constant type="nessuno"/>
</cd:parameter>
+ <cd:parameter name="intent">
+ <cd:constant type="nessuno"/>
+ <cd:constant type="overprint"/>
+ <cd:constant type="knockout"/>
+ </cd:parameter>
</cd:assignments>
</cd:arguments>
</cd:command>
@@ -939,7 +945,7 @@
<cd:parameter name="opzione">
<cd:constant type="inclinato"/>
<cd:constant type="normale"/>
- <cd:constant type="comandi"/>
+ <cd:constant type="comandi" version="mkiv"/>
<cd:constant type="colore"/>
<cd:constant type="nessuno"/>
</cd:parameter>
@@ -984,7 +990,7 @@
<cd:constant type="riga"/>
</cd:parameter>
<cd:parameter name="escape">
- <cd:constant type="cd:character"/>
+ <cd:constant type="cd:text"/>
</cd:parameter>
<cd:parameter name="spazio">
<cd:constant type="attivo"/>
@@ -1011,6 +1017,9 @@
<cd:parameter name="tavolozza">
<cd:constant type="cd:name"/>
</cd:parameter>
+ <cd:parameter name="range">
+ <cd:constant type="cd:text"/>
+ </cd:parameter>
<cd:parameter name="righe">
<cd:constant type="si"/>
<cd:constant type="no"/>
@@ -1029,6 +1038,11 @@
<cd:parameter name="fonttesto">
<cd:resolve name="bodyfont"/>
</cd:parameter>
+ <cd:parameter name="strip">
+ <cd:constant type="no"/>
+ <cd:constant type="auto"/>
+ <cd:constant type="cd:number"/>
+ </cd:parameter>
</cd:assignments>
</cd:arguments>
</cd:command>
@@ -1239,7 +1253,7 @@
<cd:command name="underbar" file="core-fnt.tex">
<cd:sequence>
- <cd:string value="sottolinea"/>
+ <cd:string value="underbar"/>
</cd:sequence>
<cd:arguments>
<cd:content n="1"/>
@@ -1248,7 +1262,7 @@
<cd:command name="underbars" file="core-fnt.tex">
<cd:sequence>
- <cd:string value="sottolinee"/>
+ <cd:string value="underbars"/>
</cd:sequence>
<cd:arguments>
<cd:word n="1" list="yes"/>
@@ -1257,7 +1271,7 @@
<cd:command name="overbar" file="core-fnt.tex">
<cd:sequence>
- <cd:string value="sopralinea"/>
+ <cd:string value="overbar"/>
</cd:sequence>
<cd:arguments>
<cd:content n="1"/>
@@ -1266,7 +1280,7 @@
<cd:command name="overbars" file="core-fnt.tex">
<cd:sequence>
- <cd:string value="sopralinee"/>
+ <cd:string value="overbars"/>
</cd:sequence>
<cd:arguments>
<cd:word n="1" list="yes"/>
@@ -1275,7 +1289,7 @@
<cd:command name="overstrike" file="core-fnt.tex">
<cd:sequence>
- <cd:string value="sbarrato"/>
+ <cd:string value="overstrike"/>
</cd:sequence>
<cd:arguments>
<cd:content n="1"/>
@@ -1284,7 +1298,7 @@
<cd:command name="overstrikes" file="core-fnt.tex">
<cd:sequence>
- <cd:string value="sbarrati"/>
+ <cd:string value="overstrikes"/>
</cd:sequence>
<cd:arguments>
<cd:word n="1" list="yes"/>
@@ -3996,6 +4010,7 @@
<cd:constant type="nonumber"/>
<cd:constant type="destra"/>
<cd:constant type="sinistra"/>
+ <cd:constant type="esterno"/>
</cd:keywords>
<cd:content n="2"/>
</cd:arguments>
@@ -4198,6 +4213,11 @@
<cd:parameter name="comando">
<cd:constant type="cd:oneargument"/>
</cd:parameter>
+ <cd:parameter name="pagina">
+ <cd:constant type="ultimo"/>
+ <cd:constant type="si"/>
+ <cd:constant type="no"/>
+ </cd:parameter>
</cd:assignments>
</cd:arguments>
</cd:command>
@@ -4763,6 +4783,10 @@
<cd:constant type="si"/>
<cd:constant type="no"/>
</cd:parameter>
+ <cd:parameter name="export">
+ <cd:constant type="si"/>
+ <cd:constant type="no"/>
+ </cd:parameter>
</cd:assignments>
</cd:arguments>
</cd:command>
@@ -4997,6 +5021,8 @@
<cd:constant type="locale"/>
<cd:constant type="precedente"/>
<cd:constant type="corrente"/>
+ <cd:constant type="qui"/>
+ <cd:constant type="intro"/>
<cd:constant type="tutti"/>
</cd:parameter>
<cd:parameter name="limitipagina">
@@ -5415,8 +5441,18 @@
<cd:constant type="cd:dimension"/>
</cd:parameter>
<cd:parameter name="luogo">
- <cd:constant type="intesto"/>
+ <cd:constant type="centro"/>
+ <cd:constant type="sinistra"/>
+ <cd:constant type="margine"/>
<cd:constant type="inmargine"/>
+ <cd:constant type="insinistra"/>
+ <cd:constant type="destra"/>
+ <cd:constant type="indestra"/>
+ <cd:constant type="interno"/>
+ <cd:constant type="esterno"/>
+ <cd:constant type="testo"/>
+ <cd:constant type="begin"/>
+ <cd:constant type="end"/>
</cd:parameter>
<cd:parameter name="stile">
<cd:resolve name="style"/>
@@ -6097,6 +6133,7 @@
</cd:command>
<cd:command name="setupitemgroup" file="core-itm.tex">
+ <!-- we mis a few experimental keys here, like alignsymbol and indentation -->
<cd:sequence>
<cd:string value="setupitemgroup"/>
</cd:sequence>
@@ -6152,6 +6189,9 @@
<cd:parameter name="distanza">
<cd:constant type="cd:dimension"/>
</cd:parameter>
+ <cd:parameter name="passo">
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
<cd:parameter name="fattore">
<cd:constant type="cd:number"/>
</cd:parameter>
@@ -6209,6 +6249,13 @@
<cd:parameter name="rientrasuccessivo">
<cd:resolve name="indentnext"/>
</cd:parameter>
+ <cd:parameter name="distanzatesto">
+ <!-- maybe resolve here too -->
+ <cd:constant type="nessuno"/>
+ <cd:constant type="grande"/>
+ <cd:constant type="medio"/>
+ <cd:constant type="piccolo"/>
+ </cd:parameter>
</cd:assignments>
</cd:arguments>
</cd:command>
@@ -7044,6 +7091,10 @@
<cd:constant type="sinistra"/>
<cd:constant type="centro" default="yes"/>
<cd:constant type="destra"/>
+ <cd:constant type="-left"/>
+ <cd:constant type="-middle"/>
+ <cd:constant type="-right"/>
+ <cd:constant type="-none"/>
</cd:keywords>
</cd:arguments>
</cd:command>
diff --git a/Master/texmf-dist/tex/context/interface/cont-nl.xml b/Master/texmf-dist/tex/context/interface/cont-nl.xml
index c8f221c58fc..990b915c9d8 100644
--- a/Master/texmf-dist/tex/context/interface/cont-nl.xml
+++ b/Master/texmf-dist/tex/context/interface/cont-nl.xml
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="UTF-8"?><!-- versions:
+<?xml version="1.0" encoding="UTF-8"?> <!-- versions:
comment : user interface definitions of ConTeXt
@@ -577,6 +577,7 @@
<cd:constant type="ja"/>
<cd:constant type="nee"/>
<cd:constant type="altijd"/>
+ <cd:constant type="nooit"/>
</cd:parameter>
<cd:parameter name="reductie">
<cd:constant type="ja"/>
@@ -619,6 +620,11 @@
<cd:constant type="alles"/>
<cd:constant type="geen"/>
</cd:parameter>
+ <cd:parameter name="intent">
+ <cd:constant type="geen"/>
+ <cd:constant type="overprint"/>
+ <cd:constant type="knockout"/>
+ </cd:parameter>
</cd:assignments>
</cd:arguments>
</cd:command>
@@ -939,7 +945,7 @@
<cd:parameter name="optie">
<cd:constant type="schuin"/>
<cd:constant type="normaal"/>
- <cd:constant type="commandos"/>
+ <cd:constant type="commandos" version="mkiv"/>
<cd:constant type="kleur"/>
<cd:constant type="geen"/>
</cd:parameter>
@@ -984,7 +990,7 @@
<cd:constant type="regel"/>
</cd:parameter>
<cd:parameter name="escape">
- <cd:constant type="cd:character"/>
+ <cd:constant type="cd:text"/>
</cd:parameter>
<cd:parameter name="spatie">
<cd:constant type="aan"/>
@@ -1011,6 +1017,9 @@
<cd:parameter name="palet">
<cd:constant type="cd:name"/>
</cd:parameter>
+ <cd:parameter name="bereik">
+ <cd:constant type="cd:text"/>
+ </cd:parameter>
<cd:parameter name="regels">
<cd:constant type="ja"/>
<cd:constant type="nee"/>
@@ -1029,6 +1038,11 @@
<cd:parameter name="korps">
<cd:resolve name="bodyfont"/>
</cd:parameter>
+ <cd:parameter name="strip">
+ <cd:constant type="nee"/>
+ <cd:constant type="auto"/>
+ <cd:constant type="cd:number"/>
+ </cd:parameter>
</cd:assignments>
</cd:arguments>
</cd:command>
@@ -1239,7 +1253,7 @@
<cd:command name="underbar" file="core-fnt.tex">
<cd:sequence>
- <cd:string value="onderstreep"/>
+ <cd:string value="underbar"/>
</cd:sequence>
<cd:arguments>
<cd:content n="1"/>
@@ -1248,7 +1262,7 @@
<cd:command name="underbars" file="core-fnt.tex">
<cd:sequence>
- <cd:string value="onderstrepen"/>
+ <cd:string value="underbars"/>
</cd:sequence>
<cd:arguments>
<cd:word n="1" list="yes"/>
@@ -1257,7 +1271,7 @@
<cd:command name="overbar" file="core-fnt.tex">
<cd:sequence>
- <cd:string value="overstreep"/>
+ <cd:string value="overbar"/>
</cd:sequence>
<cd:arguments>
<cd:content n="1"/>
@@ -1266,7 +1280,7 @@
<cd:command name="overbars" file="core-fnt.tex">
<cd:sequence>
- <cd:string value="overstrepen"/>
+ <cd:string value="overbars"/>
</cd:sequence>
<cd:arguments>
<cd:word n="1" list="yes"/>
@@ -1275,7 +1289,7 @@
<cd:command name="overstrike" file="core-fnt.tex">
<cd:sequence>
- <cd:string value="doorstreep"/>
+ <cd:string value="overstrike"/>
</cd:sequence>
<cd:arguments>
<cd:content n="1"/>
@@ -1284,7 +1298,7 @@
<cd:command name="overstrikes" file="core-fnt.tex">
<cd:sequence>
- <cd:string value="doorstrepen"/>
+ <cd:string value="overstrikes"/>
</cd:sequence>
<cd:arguments>
<cd:word n="1" list="yes"/>
@@ -3996,6 +4010,7 @@
<cd:constant type="geennummer"/>
<cd:constant type="rechts"/>
<cd:constant type="links"/>
+ <cd:constant type="buiten"/>
</cd:keywords>
<cd:content n="2"/>
</cd:arguments>
@@ -4198,6 +4213,11 @@
<cd:parameter name="commando">
<cd:constant type="cd:oneargument"/>
</cd:parameter>
+ <cd:parameter name="pagina">
+ <cd:constant type="laatste"/>
+ <cd:constant type="ja"/>
+ <cd:constant type="nee"/>
+ </cd:parameter>
</cd:assignments>
</cd:arguments>
</cd:command>
@@ -4763,6 +4783,10 @@
<cd:constant type="ja"/>
<cd:constant type="nee"/>
</cd:parameter>
+ <cd:parameter name="exporteer">
+ <cd:constant type="ja"/>
+ <cd:constant type="nee"/>
+ </cd:parameter>
</cd:assignments>
</cd:arguments>
</cd:command>
@@ -4997,6 +5021,8 @@
<cd:constant type="lokaal"/>
<cd:constant type="vorige"/>
<cd:constant type="huidige"/>
+ <cd:constant type="hier"/>
+ <cd:constant type="intro"/>
<cd:constant type="alles"/>
</cd:parameter>
<cd:parameter name="paginaovergangen">
@@ -5415,8 +5441,18 @@
<cd:constant type="cd:dimension"/>
</cd:parameter>
<cd:parameter name="plaats">
- <cd:constant type="intekst"/>
+ <cd:constant type="midden"/>
+ <cd:constant type="links"/>
+ <cd:constant type="marge"/>
<cd:constant type="inmarge"/>
+ <cd:constant type="inlinker"/>
+ <cd:constant type="rechts"/>
+ <cd:constant type="inrechter"/>
+ <cd:constant type="binnen"/>
+ <cd:constant type="buiten"/>
+ <cd:constant type="tekst"/>
+ <cd:constant type="begin"/>
+ <cd:constant type="eind"/>
</cd:parameter>
<cd:parameter name="letter">
<cd:resolve name="style"/>
@@ -6097,6 +6133,7 @@
</cd:command>
<cd:command name="setupitemgroup" file="core-itm.tex">
+ <!-- we mis a few experimental keys here, like alignsymbol and indentation -->
<cd:sequence>
<cd:string value="stelitemgroepin"/>
</cd:sequence>
@@ -6152,6 +6189,9 @@
<cd:parameter name="afstand">
<cd:constant type="cd:dimension"/>
</cd:parameter>
+ <cd:parameter name="stap">
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
<cd:parameter name="factor">
<cd:constant type="cd:number"/>
</cd:parameter>
@@ -6209,6 +6249,13 @@
<cd:parameter name="springvolgendein">
<cd:resolve name="indentnext"/>
</cd:parameter>
+ <cd:parameter name="tekstafstand">
+ <!-- maybe resolve here too -->
+ <cd:constant type="geen"/>
+ <cd:constant type="groot"/>
+ <cd:constant type="middel"/>
+ <cd:constant type="klein"/>
+ </cd:parameter>
</cd:assignments>
</cd:arguments>
</cd:command>
@@ -7044,6 +7091,10 @@
<cd:constant type="links"/>
<cd:constant type="midden" default="yes"/>
<cd:constant type="rechts"/>
+ <cd:constant type="-left"/>
+ <cd:constant type="-middle"/>
+ <cd:constant type="-right"/>
+ <cd:constant type="-none"/>
</cd:keywords>
</cd:arguments>
</cd:command>
diff --git a/Master/texmf-dist/tex/context/interface/cont-pe.xml b/Master/texmf-dist/tex/context/interface/cont-pe.xml
index 0f320aa8ea6..c4e82e1d504 100644
--- a/Master/texmf-dist/tex/context/interface/cont-pe.xml
+++ b/Master/texmf-dist/tex/context/interface/cont-pe.xml
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="UTF-8"?><!-- versions:
+<?xml version="1.0" encoding="UTF-8"?> <!-- versions:
comment : user interface definitions of ConTeXt
@@ -577,6 +577,7 @@
<cd:constant type="بله"/>
<cd:constant type="نه"/>
<cd:constant type="همواره"/>
+ <cd:constant type="هیچگاه"/>
</cd:parameter>
<cd:parameter name="کاهش">
<cd:constant type="بله"/>
@@ -619,6 +620,11 @@
<cd:constant type="همه"/>
<cd:constant type="هیچکدام"/>
</cd:parameter>
+ <cd:parameter name="intent">
+ <cd:constant type="هیچکدام"/>
+ <cd:constant type="overprint"/>
+ <cd:constant type="knockout"/>
+ </cd:parameter>
</cd:assignments>
</cd:arguments>
</cd:command>
@@ -939,7 +945,7 @@
<cd:parameter name="گزینه">
<cd:constant type="خوابیده"/>
<cd:constant type="نرمال"/>
- <cd:constant type="فرمانها"/>
+ <cd:constant type="فرمانها" version="mkiv"/>
<cd:constant type="رنگ"/>
<cd:constant type="هیچکدام"/>
</cd:parameter>
@@ -984,7 +990,7 @@
<cd:constant type="خط"/>
</cd:parameter>
<cd:parameter name="فرار">
- <cd:constant type="cd:character"/>
+ <cd:constant type="cd:text"/>
</cd:parameter>
<cd:parameter name="فضا">
<cd:constant type="روی"/>
@@ -1011,6 +1017,9 @@
<cd:parameter name="لوح">
<cd:constant type="cd:name"/>
</cd:parameter>
+ <cd:parameter name="range">
+ <cd:constant type="cd:text"/>
+ </cd:parameter>
<cd:parameter name="خطها">
<cd:constant type="بله"/>
<cd:constant type="نه"/>
@@ -1029,6 +1038,11 @@
<cd:parameter name="قلم‌بدنه">
<cd:resolve name="bodyfont"/>
</cd:parameter>
+ <cd:parameter name="strip">
+ <cd:constant type="نه"/>
+ <cd:constant type="خودکار"/>
+ <cd:constant type="cd:number"/>
+ </cd:parameter>
</cd:assignments>
</cd:arguments>
</cd:command>
@@ -1239,7 +1253,7 @@
<cd:command name="underbar" file="core-fnt.tex">
<cd:sequence>
- <cd:string value="میله‌زیر"/>
+ <cd:string value="underbar"/>
</cd:sequence>
<cd:arguments>
<cd:content n="1"/>
@@ -1248,7 +1262,7 @@
<cd:command name="underbars" file="core-fnt.tex">
<cd:sequence>
- <cd:string value="میله‌‌های‌زیر"/>
+ <cd:string value="underbars"/>
</cd:sequence>
<cd:arguments>
<cd:word n="1" list="yes"/>
@@ -1257,7 +1271,7 @@
<cd:command name="overbar" file="core-fnt.tex">
<cd:sequence>
- <cd:string value="میله‌رو"/>
+ <cd:string value="overbar"/>
</cd:sequence>
<cd:arguments>
<cd:content n="1"/>
@@ -1266,7 +1280,7 @@
<cd:command name="overbars" file="core-fnt.tex">
<cd:sequence>
- <cd:string value="میله‌ها‌رو"/>
+ <cd:string value="overbars"/>
</cd:sequence>
<cd:arguments>
<cd:word n="1" list="yes"/>
@@ -1275,7 +1289,7 @@
<cd:command name="overstrike" file="core-fnt.tex">
<cd:sequence>
- <cd:string value="خط‌زدن"/>
+ <cd:string value="overstrike"/>
</cd:sequence>
<cd:arguments>
<cd:content n="1"/>
@@ -1284,7 +1298,7 @@
<cd:command name="overstrikes" file="core-fnt.tex">
<cd:sequence>
- <cd:string value="خط‌زدنها"/>
+ <cd:string value="overstrikes"/>
</cd:sequence>
<cd:arguments>
<cd:word n="1" list="yes"/>
@@ -3996,6 +4010,7 @@
<cd:constant type="بدون‌شماره"/>
<cd:constant type="راست"/>
<cd:constant type="چپ"/>
+ <cd:constant type="خارجی"/>
</cd:keywords>
<cd:content n="2"/>
</cd:arguments>
@@ -4198,6 +4213,11 @@
<cd:parameter name="فرمان">
<cd:constant type="cd:oneargument"/>
</cd:parameter>
+ <cd:parameter name="صفحه">
+ <cd:constant type="آخرین"/>
+ <cd:constant type="بله"/>
+ <cd:constant type="نه"/>
+ </cd:parameter>
</cd:assignments>
</cd:arguments>
</cd:command>
@@ -4763,6 +4783,10 @@
<cd:constant type="بله"/>
<cd:constant type="نه"/>
</cd:parameter>
+ <cd:parameter name="export">
+ <cd:constant type="بله"/>
+ <cd:constant type="نه"/>
+ </cd:parameter>
</cd:assignments>
</cd:arguments>
</cd:command>
@@ -4997,6 +5021,8 @@
<cd:constant type="موضعی"/>
<cd:constant type="قبلی"/>
<cd:constant type="جاری"/>
+ <cd:constant type="اینجا"/>
+ <cd:constant type="پیشگفتار"/>
<cd:constant type="همه"/>
</cd:parameter>
<cd:parameter name="مرزهای‌صفحه">
@@ -5415,8 +5441,18 @@
<cd:constant type="cd:dimension"/>
</cd:parameter>
<cd:parameter name="مکان">
- <cd:constant type="درون‌متن"/>
+ <cd:constant type="میان"/>
+ <cd:constant type="چپ"/>
+ <cd:constant type="حاشیه"/>
<cd:constant type="درون‌حاشیه"/>
+ <cd:constant type="درون‌چپ"/>
+ <cd:constant type="راست"/>
+ <cd:constant type="درون‌راست"/>
+ <cd:constant type="داخلی"/>
+ <cd:constant type="خارجی"/>
+ <cd:constant type="متن"/>
+ <cd:constant type="begin"/>
+ <cd:constant type="end"/>
</cd:parameter>
<cd:parameter name="سبک">
<cd:resolve name="style"/>
@@ -6097,6 +6133,7 @@
</cd:command>
<cd:command name="setupitemgroup" file="core-itm.tex">
+ <!-- we mis a few experimental keys here, like alignsymbol and indentation -->
<cd:sequence>
<cd:string value="بارگذاری‌گروه‌آیتم"/>
</cd:sequence>
@@ -6152,6 +6189,9 @@
<cd:parameter name="فاصله">
<cd:constant type="cd:dimension"/>
</cd:parameter>
+ <cd:parameter name="گام">
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
<cd:parameter name="عامل">
<cd:constant type="cd:number"/>
</cd:parameter>
@@ -6209,6 +6249,13 @@
<cd:parameter name="متن‌تورفته">
<cd:resolve name="indentnext"/>
</cd:parameter>
+ <cd:parameter name="فاصله‌متن">
+ <!-- maybe resolve here too -->
+ <cd:constant type="هیچکدام"/>
+ <cd:constant type="بزرگ"/>
+ <cd:constant type="متوسط"/>
+ <cd:constant type="کوچک"/>
+ </cd:parameter>
</cd:assignments>
</cd:arguments>
</cd:command>
@@ -7044,6 +7091,10 @@
<cd:constant type="چپ"/>
<cd:constant type="میان" default="yes"/>
<cd:constant type="راست"/>
+ <cd:constant type="-left"/>
+ <cd:constant type="-middle"/>
+ <cd:constant type="-right"/>
+ <cd:constant type="-none"/>
</cd:keywords>
</cd:arguments>
</cd:command>
diff --git a/Master/texmf-dist/tex/context/interface/cont-ro.xml b/Master/texmf-dist/tex/context/interface/cont-ro.xml
index 152201dc469..dcaa288dad9 100644
--- a/Master/texmf-dist/tex/context/interface/cont-ro.xml
+++ b/Master/texmf-dist/tex/context/interface/cont-ro.xml
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="UTF-8"?><!-- versions:
+<?xml version="1.0" encoding="UTF-8"?> <!-- versions:
comment : user interface definitions of ConTeXt
@@ -577,6 +577,7 @@
<cd:constant type="da"/>
<cd:constant type="nu"/>
<cd:constant type="totdeauna"/>
+ <cd:constant type="niciodata"/>
</cd:parameter>
<cd:parameter name="reducere">
<cd:constant type="da"/>
@@ -619,6 +620,11 @@
<cd:constant type="tot"/>
<cd:constant type="niciunul"/>
</cd:parameter>
+ <cd:parameter name="intent">
+ <cd:constant type="niciunul"/>
+ <cd:constant type="overprint"/>
+ <cd:constant type="knockout"/>
+ </cd:parameter>
</cd:assignments>
</cd:arguments>
</cd:command>
@@ -939,7 +945,7 @@
<cd:parameter name="optiune">
<cd:constant type="inclinat"/>
<cd:constant type="normal"/>
- <cd:constant type="comenzi"/>
+ <cd:constant type="comenzi" version="mkiv"/>
<cd:constant type="culoare"/>
<cd:constant type="niciunul"/>
</cd:parameter>
@@ -984,7 +990,7 @@
<cd:constant type="linie"/>
</cd:parameter>
<cd:parameter name="escape">
- <cd:constant type="cd:character"/>
+ <cd:constant type="cd:text"/>
</cd:parameter>
<cd:parameter name="spatiu">
<cd:constant type="on"/>
@@ -1011,6 +1017,9 @@
<cd:parameter name="paleta">
<cd:constant type="cd:name"/>
</cd:parameter>
+ <cd:parameter name="range">
+ <cd:constant type="cd:text"/>
+ </cd:parameter>
<cd:parameter name="linii">
<cd:constant type="da"/>
<cd:constant type="nu"/>
@@ -1029,6 +1038,11 @@
<cd:parameter name="fonttext">
<cd:resolve name="bodyfont"/>
</cd:parameter>
+ <cd:parameter name="strip">
+ <cd:constant type="nu"/>
+ <cd:constant type="auto"/>
+ <cd:constant type="cd:number"/>
+ </cd:parameter>
</cd:assignments>
</cd:arguments>
</cd:command>
@@ -1239,7 +1253,7 @@
<cd:command name="underbar" file="core-fnt.tex">
<cd:sequence>
- <cd:string value="sublinie"/>
+ <cd:string value="underbar"/>
</cd:sequence>
<cd:arguments>
<cd:content n="1"/>
@@ -1248,7 +1262,7 @@
<cd:command name="underbars" file="core-fnt.tex">
<cd:sequence>
- <cd:string value="sublinii"/>
+ <cd:string value="underbars"/>
</cd:sequence>
<cd:arguments>
<cd:word n="1" list="yes"/>
@@ -1257,7 +1271,7 @@
<cd:command name="overbar" file="core-fnt.tex">
<cd:sequence>
- <cd:string value="barasus"/>
+ <cd:string value="overbar"/>
</cd:sequence>
<cd:arguments>
<cd:content n="1"/>
@@ -1266,7 +1280,7 @@
<cd:command name="overbars" file="core-fnt.tex">
<cd:sequence>
- <cd:string value="supralinie"/>
+ <cd:string value="overbars"/>
</cd:sequence>
<cd:arguments>
<cd:word n="1" list="yes"/>
@@ -1275,7 +1289,7 @@
<cd:command name="overstrike" file="core-fnt.tex">
<cd:sequence>
- <cd:string value="liniepeste"/>
+ <cd:string value="overstrike"/>
</cd:sequence>
<cd:arguments>
<cd:content n="1"/>
@@ -1284,7 +1298,7 @@
<cd:command name="overstrikes" file="core-fnt.tex">
<cd:sequence>
- <cd:string value="liniipeste"/>
+ <cd:string value="overstrikes"/>
</cd:sequence>
<cd:arguments>
<cd:word n="1" list="yes"/>
@@ -3996,6 +4010,7 @@
<cd:constant type="nonumber"/>
<cd:constant type="dreapta"/>
<cd:constant type="stanga"/>
+ <cd:constant type="extern"/>
</cd:keywords>
<cd:content n="2"/>
</cd:arguments>
@@ -4198,6 +4213,11 @@
<cd:parameter name="comanda">
<cd:constant type="cd:oneargument"/>
</cd:parameter>
+ <cd:parameter name="pagina">
+ <cd:constant type="ultim"/>
+ <cd:constant type="da"/>
+ <cd:constant type="nu"/>
+ </cd:parameter>
</cd:assignments>
</cd:arguments>
</cd:command>
@@ -4763,6 +4783,10 @@
<cd:constant type="da"/>
<cd:constant type="nu"/>
</cd:parameter>
+ <cd:parameter name="export">
+ <cd:constant type="da"/>
+ <cd:constant type="nu"/>
+ </cd:parameter>
</cd:assignments>
</cd:arguments>
</cd:command>
@@ -4997,6 +5021,8 @@
<cd:constant type="local"/>
<cd:constant type="precedent"/>
<cd:constant type="curent"/>
+ <cd:constant type="aici"/>
+ <cd:constant type="intro"/>
<cd:constant type="tot"/>
</cd:parameter>
<cd:parameter name="marginipagina">
@@ -5415,8 +5441,18 @@
<cd:constant type="cd:dimension"/>
</cd:parameter>
<cd:parameter name="locatie">
- <cd:constant type="intext"/>
+ <cd:constant type="centru"/>
+ <cd:constant type="stanga"/>
+ <cd:constant type="margine"/>
<cd:constant type="inmargine"/>
+ <cd:constant type="instanga"/>
+ <cd:constant type="dreapta"/>
+ <cd:constant type="indreapta"/>
+ <cd:constant type="intern"/>
+ <cd:constant type="extern"/>
+ <cd:constant type="text"/>
+ <cd:constant type="begin"/>
+ <cd:constant type="end"/>
</cd:parameter>
<cd:parameter name="stil">
<cd:resolve name="style"/>
@@ -6097,6 +6133,7 @@
</cd:command>
<cd:command name="setupitemgroup" file="core-itm.tex">
+ <!-- we mis a few experimental keys here, like alignsymbol and indentation -->
<cd:sequence>
<cd:string value="setupitemgroup"/>
</cd:sequence>
@@ -6152,6 +6189,9 @@
<cd:parameter name="distanta">
<cd:constant type="cd:dimension"/>
</cd:parameter>
+ <cd:parameter name="pas">
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
<cd:parameter name="factor">
<cd:constant type="cd:number"/>
</cd:parameter>
@@ -6209,6 +6249,13 @@
<cd:parameter name="aliniaturmator">
<cd:resolve name="indentnext"/>
</cd:parameter>
+ <cd:parameter name="textdistance">
+ <!-- maybe resolve here too -->
+ <cd:constant type="niciunul"/>
+ <cd:constant type="mare"/>
+ <cd:constant type="mediu"/>
+ <cd:constant type="mic"/>
+ </cd:parameter>
</cd:assignments>
</cd:arguments>
</cd:command>
@@ -7044,6 +7091,10 @@
<cd:constant type="stanga"/>
<cd:constant type="centru" default="yes"/>
<cd:constant type="dreapta"/>
+ <cd:constant type="-left"/>
+ <cd:constant type="-middle"/>
+ <cd:constant type="-right"/>
+ <cd:constant type="-none"/>
</cd:keywords>
</cd:arguments>
</cd:command>
diff --git a/Master/texmf-dist/tex/context/interface/keys-cs.xml b/Master/texmf-dist/tex/context/interface/keys-cs.xml
index 352245d6b09..93d81caa677 100644
--- a/Master/texmf-dist/tex/context/interface/keys-cs.xml
+++ b/Master/texmf-dist/tex/context/interface/keys-cs.xml
@@ -78,6 +78,7 @@
<cd:variable name='atmargin' value='naokraji'/>
<cd:variable name='atpage' value='nastrance'/>
<cd:variable name='august' value='srpen'/>
+ <cd:variable name='author' value='autor'/>
<cd:variable name='auto' value='auto'/>
<cd:variable name='autointro' value='autouvod'/>
<cd:variable name='back' value='zpet'/>
@@ -86,7 +87,10 @@
<cd:variable name='backpart' value='epilog'/>
<cd:variable name='backspace' value='zpetnamezera'/>
<cd:variable name='backward' value='zpet'/>
+ <cd:variable name='bbl' value='bbl'/>
<cd:variable name='before' value='pred'/>
+ <cd:variable name='begin' value='begin'/>
+ <cd:variable name='bib' value='bib'/>
<cd:variable name='big' value='velke'/>
<cd:variable name='bigbodyfont' value='bigbodyfont'/>
<cd:variable name='bigpreference' value='vysokapriorita'/>
@@ -111,6 +115,7 @@
<cd:variable name='chapter' value='kapitola'/>
<cd:variable name='character' value='pismeno'/>
<cd:variable name='characters' value='pismena'/>
+ <cd:variable name='cite' value='cite'/>
<cd:variable name='color' value='barevne'/>
<cd:variable name='column' value='column'/>
<cd:variable name='columns' value='sloupce'/>
@@ -136,9 +141,11 @@
<cd:variable name='display' value='obrazovka'/>
<cd:variable name='dot' value='tecka'/>
<cd:variable name='doublesided' value='dvoustranny'/>
+ <cd:variable name='down' value='down'/>
<cd:variable name='each' value='kazdy'/>
<cd:variable name='edge' value='hrana'/>
<cd:variable name='empty' value='prazdne'/>
+ <cd:variable name='end' value='end'/>
<cd:variable name='endnote' value='endnote'/>
<cd:variable name='enumeration' value='vycet'/>
<cd:variable name='environment' value='prostredi'/>
@@ -268,11 +275,15 @@
<cd:variable name='mathcases' value='mathcases'/>
<cd:variable name='mathmatrix' value='mathmatrix'/>
<cd:variable name='max' value='max'/>
+ <cd:variable name='maxdepth' value='maxdepth'/>
+ <cd:variable name='maxheight' value='maxheight'/>
+ <cd:variable name='maxwidth' value='maxwidth'/>
<cd:variable name='may' value='kveten'/>
<cd:variable name='mediaeval' value='stredoveky'/>
<cd:variable name='medium' value='stredni'/>
<cd:variable name='middle' value='nastred'/>
<cd:variable name='min' value='min'/>
+ <cd:variable name='mindepth' value='mindepth'/>
<cd:variable name='minheight' value='minvyska'/>
<cd:variable name='minwidth' value='minsirka'/>
<cd:variable name='mirrored' value='zrcadleno'/>
@@ -320,8 +331,12 @@
<cd:variable name='outer' value='vnejsi'/>
<cd:variable name='outeredge' value='outeredge'/>
<cd:variable name='outermargin' value='outermargin'/>
+ <cd:variable name='overbar' value='nadtrzeno'/>
+ <cd:variable name='overbars' value='nadtrzeni'/>
<cd:variable name='overlay' value='prekryv'/>
<cd:variable name='overprint' value='overprint'/>
+ <cd:variable name='overstrike' value='preskrtnuto'/>
+ <cd:variable name='overstrikes' value='preskrtnuti'/>
<cd:variable name='packed' value='zhustene'/>
<cd:variable name='page' value='stranka'/>
<cd:variable name='pagecomment' value='komentarstranky'/>
@@ -389,6 +404,7 @@
<cd:variable name='serried' value='semknuto'/>
<cd:variable name='setups' value='einstellungen'/>
<cd:variable name='sheet' value='sheet'/>
+ <cd:variable name='short' value='short'/>
<cd:variable name='singlesided' value='jednostranne'/>
<cd:variable name='slanted' value='sklonene'/>
<cd:variable name='slantedbold' value='sklonenetucne'/>
@@ -413,6 +429,7 @@
<cd:variable name='spot' value='spot'/>
<cd:variable name='standard' value='standardni'/>
<cd:variable name='start' value='start'/>
+ <cd:variable name='starter' value='starter'/>
<cd:variable name='sticker' value='sticker'/>
<cd:variable name='stop' value='stop'/>
<cd:variable name='stopper' value='predel'/>
@@ -474,10 +491,13 @@
<cd:variable name='type' value='opis'/>
<cd:variable name='typing' value='typing'/>
<cd:variable name='unavailable' value='nedostupne'/>
+ <cd:variable name='underbar' value='podtrzeno'/>
+ <cd:variable name='underbars' value='podtrzeni'/>
<cd:variable name='unit' value='jednotka'/>
<cd:variable name='units' value='jednotky'/>
<cd:variable name='unknown' value='neznamy'/>
<cd:variable name='unpacked' value='rozbalene'/>
+ <cd:variable name='up' value='up'/>
<cd:variable name='url' value='url'/>
<cd:variable name='used' value='uzito'/>
<cd:variable name='value' value='hodnota'/>
@@ -508,12 +528,21 @@
<cd:constant name='align' value='zarovnani'/>
<cd:constant name='aligncharacter' value='aligncharacter'/>
<cd:constant name='alignmentcharacter' value='alignmentcharacter'/>
+ <cd:constant name='alignsymbol' value='alignsymbol'/>
<cd:constant name='aligntitle' value='zarovnejtitul'/>
<cd:constant name='alternative' value='alternativa'/>
+ <cd:constant name='andtext' value='andtext'/>
<cd:constant name='apa' value='apa'/>
<cd:constant name='arrow' value='sipka'/>
+ <cd:constant name='artauthor' value='artauthor'/>
+ <cd:constant name='artauthoretaldisplay' value='artauthoretaldisplay'/>
+ <cd:constant name='artauthoretallimit' value='artauthoretallimit'/>
+ <cd:constant name='artauthoretaltext' value='artauthoretaltext'/>
<cd:constant name='at' value='u'/>
<cd:constant name='author' value='autor'/>
+ <cd:constant name='authoretaldisplay' value='authoretaldisplay'/>
+ <cd:constant name='authoretallimit' value='authoretallimit'/>
+ <cd:constant name='authoretaltext' value='authoretaltext'/>
<cd:constant name='auto' value='auto'/>
<cd:constant name='autofile' value='autofile'/>
<cd:constant name='autofocus' value='autoostreni'/>
@@ -582,6 +611,7 @@
<cd:constant name='cutspace' value='cutspace'/>
<cd:constant name='dash' value='pomlcka'/>
<cd:constant name='dat' value='dat'/>
+ <cd:constant name='database' value='database'/>
<cd:constant name='date' value='datum'/>
<cd:constant name='deepnumbercommand' value='deepnumbercommand'/>
<cd:constant name='deeptextcommand' value='deeptextcommand'/>
@@ -600,12 +630,17 @@
<cd:constant name='dy' value='dy'/>
<cd:constant name='edge' value='hrana'/>
<cd:constant name='edgedistance' value='vzdalenosthrany'/>
+ <cd:constant name='editor' value='editor'/>
+ <cd:constant name='editoretaldisplay' value='editoretaldisplay'/>
+ <cd:constant name='editoretallimit' value='editoretallimit'/>
+ <cd:constant name='editoretaltext' value='editoretaltext'/>
<cd:constant name='empty' value='prazdne'/>
<cd:constant name='equalheight' value='equalheight'/>
<cd:constant name='equalwidth' value='equalwidth'/>
<cd:constant name='escape' value='escape'/>
<cd:constant name='evenmargin' value='sudamarginalie'/>
<cd:constant name='expansion' value='expanzen'/>
+ <cd:constant name='export' value='export'/>
<cd:constant name='extras' value='extras'/>
<cd:constant name='factor' value='faktor'/>
<cd:constant name='fallback' value='fallback'/>
@@ -616,6 +651,8 @@
<cd:constant name='fieldoffset' value='offsetpole'/>
<cd:constant name='file' value='soubor'/>
<cd:constant name='filtercommand' value='filtercommand'/>
+ <cd:constant name='finalnamesep' value='finalnamesep'/>
+ <cd:constant name='firstnamesep' value='firstnamesep'/>
<cd:constant name='focus' value='zaostreni'/>
<cd:constant name='focusin' value='focusin'/>
<cd:constant name='focusout' value='focusout'/>
@@ -637,6 +674,7 @@
<cd:constant name='global' value='globalne'/>
<cd:constant name='grid' value='mrizka'/>
<cd:constant name='hang' value='zaveseni'/>
+ <cd:constant name='headalign' value='headalign'/>
<cd:constant name='headcolor' value='barvahlavicky'/>
<cd:constant name='headcommand' value='headcommand'/>
<cd:constant name='headconversion' value='konverzehlavicky'/>
@@ -664,14 +702,18 @@
<cd:constant name='inner' value='vnitrni'/>
<cd:constant name='innermargin' value='innermargin'/>
<cd:constant name='inputfile' value='inputfile'/>
+ <cd:constant name='intent' value='intent'/>
<cd:constant name='interaction' value='interakce'/>
<cd:constant name='interlinespace' value='meziradkovamezera'/>
<cd:constant name='itemalign' value='itemalign'/>
<cd:constant name='items' value='polozky'/>
+ <cd:constant name='juniorsep' value='juniorsep'/>
<cd:constant name='ken' value='ken'/>
<cd:constant name='keyexpansion' value='keyexpansion'/>
<cd:constant name='keyword' value='keyword'/>
<cd:constant name='label' value='popisek'/>
+ <cd:constant name='lastnamesep' value='lastnamesep'/>
+ <cd:constant name='lastpubsep' value='lastpubsep'/>
<cd:constant name='left' value='vlevo'/>
<cd:constant name='leftcolor' value='barvavlevo'/>
<cd:constant name='leftcompoundhyphen' value='leftcompoundhyphen'/>
@@ -711,8 +753,10 @@
<cd:constant name='marking' value='znaceni'/>
<cd:constant name='marstyle' value='stylsnacky'/>
<cd:constant name='max' value='max'/>
+ <cd:constant name='maxdepth' value='maxdepth'/>
<cd:constant name='maxheight' value='maxvyska'/>
<cd:constant name='maxwidth' value='maxsirka'/>
+ <cd:constant name='maybeyear' value='maybeyear'/>
<cd:constant name='menu' value='menu'/>
<cd:constant name='method' value='metoda'/>
<cd:constant name='middle' value='stredni'/>
@@ -723,8 +767,10 @@
<cd:constant name='mindepth' value='mindepth'/>
<cd:constant name='minheight' value='minvyska'/>
<cd:constant name='minwidth' value='minsirka'/>
+ <cd:constant name='monthconversion' value='monthconversion'/>
<cd:constant name='n' value='n'/>
<cd:constant name='name' value='jmeno'/>
+ <cd:constant name='namesep' value='namesep'/>
<cd:constant name='nbottom' value='nspodek'/>
<cd:constant name='nc' value='nc'/>
<cd:constant name='next' value='dalsi'/>
@@ -748,6 +794,7 @@
<cd:constant name='numberseparator' value='oddelovaccisla'/>
<cd:constant name='numberseparatorset' value='numberseparatorset'/>
<cd:constant name='numberset' value='numberset'/>
+ <cd:constant name='numberstarter' value='numberstarter'/>
<cd:constant name='numberstopper' value='numberstopper'/>
<cd:constant name='numberstyle' value='stylcisla'/>
<cd:constant name='numberwidth' value='numberwidth'/>
@@ -760,7 +807,9 @@
<cd:constant name='openaction' value='otevriakci'/>
<cd:constant name='openpageaction' value='akceotevrenistranky'/>
<cd:constant name='option' value='volba'/>
+ <cd:constant name='order' value='order'/>
<cd:constant name='orientation' value='orientation'/>
+ <cd:constant name='otherstext' value='otherstext'/>
<cd:constant name='outermargin' value='outermargin'/>
<cd:constant name='overprint' value='overprint'/>
<cd:constant name='ownnumber' value='vlastnicislo'/>
@@ -778,10 +827,12 @@
<cd:constant name='pageprefixsegments' value='pageprefixsegments'/>
<cd:constant name='pageprefixseparatorset' value='pageprefixseparatorset'/>
<cd:constant name='pageprefixset' value='pageprefixset'/>
+ <cd:constant name='pageprefixstarter' value='pageprefixstarter'/>
<cd:constant name='pageprefixstopper' value='pageprefixstopper'/>
<cd:constant name='pagesegments' value='pagesegments'/>
<cd:constant name='pageseparatorset' value='pageseparatorset'/>
<cd:constant name='pageset' value='pageset'/>
+ <cd:constant name='pagestarter' value='pagestarter'/>
<cd:constant name='pagestate' value='pagestate'/>
<cd:constant name='pagestopper' value='pagestopper'/>
<cd:constant name='pagestyle' value='stylstranky'/>
@@ -799,16 +850,20 @@
<cd:constant name='prefixsegments' value='prefixsegments'/>
<cd:constant name='prefixseparatorset' value='prefixseparatorset'/>
<cd:constant name='prefixset' value='prefixset'/>
+ <cd:constant name='prefixstarter' value='prefixstarter'/>
<cd:constant name='prefixstopper' value='prefixstopper'/>
<cd:constant name='preset' value='prednastaveni'/>
<cd:constant name='preview' value='nahled'/>
<cd:constant name='previous' value='predchozi'/>
<cd:constant name='previousnumber' value='predchozicislo'/>
<cd:constant name='process' value='process'/>
+ <cd:constant name='pubsep' value='pubsep'/>
<cd:constant name='radius' value='polomer'/>
<cd:constant name='random' value='nahodne'/>
+ <cd:constant name='range' value='range'/>
<cd:constant name='reduction' value='redukce'/>
<cd:constant name='ref' value='ref'/>
+ <cd:constant name='refcommand' value='refcommand'/>
<cd:constant name='reference' value='odkaz'/>
<cd:constant name='referenceprefix' value='referenceprefix'/>
<cd:constant name='referencing' value='odkazujici'/>
@@ -842,6 +897,7 @@
<cd:constant name='rulethickness' value='tloustkalinky'/>
<cd:constant name='samepage' value='stejnastranka'/>
<cd:constant name='sample' value='vzor'/>
+ <cd:constant name='samplesize' value='samplesize'/>
<cd:constant name='saveinlist' value='saveinlist'/>
<cd:constant name='scale' value='meritko'/>
<cd:constant name='scope' value='rozsah'/>
@@ -854,6 +910,7 @@
<cd:constant name='sectionsegments' value='sectionsegments'/>
<cd:constant name='sectionseparatorset' value='sectionseparatorset'/>
<cd:constant name='sectionset' value='sectionset'/>
+ <cd:constant name='sectionstarter' value='sectionstarter'/>
<cd:constant name='sectionstopper' value='sectionstopper'/>
<cd:constant name='separator' value='oddelovac'/>
<cd:constant name='set' value='set'/>
@@ -866,6 +923,7 @@
<cd:constant name='sign' value='znak'/>
<cd:constant name='size' value='velikost'/>
<cd:constant name='small' value='male'/>
+ <cd:constant name='sort' value='sort'/>
<cd:constant name='sorttype' value='sorttype'/>
<cd:constant name='source' value='zdroj'/>
<cd:constant name='space' value='mezera'/>
@@ -880,16 +938,19 @@
<cd:constant name='spot' value='spot'/>
<cd:constant name='stack' value='stack'/>
<cd:constant name='start' value='start'/>
+ <cd:constant name='starter' value='starter'/>
<cd:constant name='state' value='status'/>
<cd:constant name='step' value='krok'/>
<cd:constant name='stop' value='stop'/>
<cd:constant name='stopper' value='predel'/>
<cd:constant name='stretch' value='natahnout'/>
+ <cd:constant name='strip' value='strip'/>
<cd:constant name='strut' value='strut'/>
<cd:constant name='style' value='pismeno'/>
<cd:constant name='sub' value='pod'/>
<cd:constant name='subtitle' value='podtitulek'/>
<cd:constant name='suffix' value='suffix'/>
+ <cd:constant name='surnamesep' value='surnamesep'/>
<cd:constant name='sx' value='sx'/>
<cd:constant name='sy' value='sy'/>
<cd:constant name='symalign' value='symzarovnani'/>
@@ -929,6 +990,7 @@
<cd:constant name='topoffset' value='offsetvrsku'/>
<cd:constant name='topspace' value='svrchnimezera'/>
<cd:constant name='topstate' value='statusvrsku'/>
+ <cd:constant name='totalnumber' value='totalnumber'/>
<cd:constant name='type' value='typ'/>
<cd:constant name='unit' value='jednotka'/>
<cd:constant name='unknownreference' value='neznamyodkaz'/>
@@ -939,6 +1001,7 @@
<cd:constant name='veroffset' value='offsethlavicky'/>
<cd:constant name='vfil' value='vfil'/>
<cd:constant name='voffset' value='voffset'/>
+ <cd:constant name='vonsep' value='vonsep'/>
<cd:constant name='way' value='zpusob'/>
<cd:constant name='wfactor' value='sfaktor'/>
<cd:constant name='white' value='bily'/>
@@ -1273,10 +1336,6 @@
<cd:command name='outeredgewidth' value='outeredgewidth'/>
<cd:command name='outermargindistance' value='outermargindistance'/>
<cd:command name='outermarginwidth' value='outermarginwidth'/>
- <cd:command name='overbar' value='nadtrzeno'/>
- <cd:command name='overbars' value='nadtrzeni'/>
- <cd:command name='overstrike' value='preskrtnuto'/>
- <cd:command name='overstrikes' value='preskrtnuti'/>
<cd:command name='packed' value='zhustene'/>
<cd:command name='page' value='strana'/>
<cd:command name='pagedepth' value='pagedepth'/>
@@ -1611,8 +1670,6 @@
<cd:command name='type' value='opis'/>
<cd:command name='typebuffer' value='typebuffer'/>
<cd:command name='typefile' value='opissoubor'/>
- <cd:command name='underbar' value='podtrzeno'/>
- <cd:command name='underbars' value='podtrzeni'/>
<cd:command name='unitmeaning' value='vyznam'/>
<cd:command name='unknown' value='neznamo'/>
<cd:command name='useJSscripts' value='uzijJSscripts'/>
diff --git a/Master/texmf-dist/tex/context/interface/keys-de.xml b/Master/texmf-dist/tex/context/interface/keys-de.xml
index 521a731c61d..4c60d2be495 100644
--- a/Master/texmf-dist/tex/context/interface/keys-de.xml
+++ b/Master/texmf-dist/tex/context/interface/keys-de.xml
@@ -78,6 +78,7 @@
<cd:variable name='atmargin' value='amrand'/>
<cd:variable name='atpage' value='aufseite'/>
<cd:variable name='august' value='August'/>
+ <cd:variable name='author' value='autor'/>
<cd:variable name='auto' value='auto'/>
<cd:variable name='autointro' value='autointro'/>
<cd:variable name='back' value='zurueck'/>
@@ -86,7 +87,10 @@
<cd:variable name='backpart' value='epilog'/>
<cd:variable name='backspace' value='rumpfspatium'/>
<cd:variable name='backward' value='rueckwaerts'/>
+ <cd:variable name='bbl' value='bbl'/>
<cd:variable name='before' value='vor'/>
+ <cd:variable name='begin' value='begin'/>
+ <cd:variable name='bib' value='bib'/>
<cd:variable name='big' value='gross'/>
<cd:variable name='bigbodyfont' value='bigbodyfont'/>
<cd:variable name='bigpreference' value='grosszuegig'/>
@@ -111,6 +115,7 @@
<cd:variable name='chapter' value='kapitel'/>
<cd:variable name='character' value='buchstabe'/>
<cd:variable name='characters' value='buchstaben'/>
+ <cd:variable name='cite' value='cite'/>
<cd:variable name='color' value='farbe'/>
<cd:variable name='column' value='column'/>
<cd:variable name='columns' value='spalten'/>
@@ -136,9 +141,11 @@
<cd:variable name='display' value='bildschirm'/>
<cd:variable name='dot' value='punkt'/>
<cd:variable name='doublesided' value='doppelseitig'/>
+ <cd:variable name='down' value='down'/>
<cd:variable name='each' value='jede'/>
<cd:variable name='edge' value='kante'/>
<cd:variable name='empty' value='leer'/>
+ <cd:variable name='end' value='end'/>
<cd:variable name='endnote' value='endnote'/>
<cd:variable name='enumeration' value='nummerierung'/>
<cd:variable name='environment' value='umgebung'/>
@@ -268,11 +275,15 @@
<cd:variable name='mathcases' value='mathcases'/>
<cd:variable name='mathmatrix' value='mathmatrix'/>
<cd:variable name='max' value='max'/>
+ <cd:variable name='maxdepth' value='maxdepth'/>
+ <cd:variable name='maxheight' value='maxheight'/>
+ <cd:variable name='maxwidth' value='maxwidth'/>
<cd:variable name='may' value='Mai'/>
<cd:variable name='mediaeval' value='mittelalterlich'/>
<cd:variable name='medium' value='mittel'/>
<cd:variable name='middle' value='mittig'/>
<cd:variable name='min' value='min'/>
+ <cd:variable name='mindepth' value='mindepth'/>
<cd:variable name='minheight' value='minhoehe'/>
<cd:variable name='minwidth' value='minbreite'/>
<cd:variable name='mirrored' value='gespiegelt'/>
@@ -320,8 +331,12 @@
<cd:variable name='outer' value='aussen'/>
<cd:variable name='outeredge' value='outeredge'/>
<cd:variable name='outermargin' value='outermargin'/>
+ <cd:variable name='overbar' value='ueberstrichen'/>
+ <cd:variable name='overbars' value='ueberstreichen'/>
<cd:variable name='overlay' value='overlay'/>
<cd:variable name='overprint' value='overprint'/>
+ <cd:variable name='overstrike' value='durchgestrichen'/>
+ <cd:variable name='overstrikes' value='durchstreichen'/>
<cd:variable name='packed' value='gepackt'/>
<cd:variable name='page' value='seite'/>
<cd:variable name='pagecomment' value='pagecomment'/>
@@ -389,6 +404,7 @@
<cd:variable name='serried' value='kleinerabstand'/>
<cd:variable name='setups' value='impostazioni'/>
<cd:variable name='sheet' value='sheet'/>
+ <cd:variable name='short' value='kurz'/>
<cd:variable name='singlesided' value='einzelseitig'/>
<cd:variable name='slanted' value='geneigt'/>
<cd:variable name='slantedbold' value='geneigtfett'/>
@@ -413,6 +429,7 @@
<cd:variable name='spot' value='spot'/>
<cd:variable name='standard' value='standard'/>
<cd:variable name='start' value='start'/>
+ <cd:variable name='starter' value='starter'/>
<cd:variable name='sticker' value='sticker'/>
<cd:variable name='stop' value='stop'/>
<cd:variable name='stopper' value='trenner'/>
@@ -474,10 +491,13 @@
<cd:variable name='type' value='tippen'/>
<cd:variable name='typing' value='tippen'/>
<cd:variable name='unavailable' value='nichtverfuegbar'/>
+ <cd:variable name='underbar' value='unterstrichen'/>
+ <cd:variable name='underbars' value='unterstreichen'/>
<cd:variable name='unit' value='einheit'/>
<cd:variable name='units' value='einheiten'/>
<cd:variable name='unknown' value='unbekannt'/>
<cd:variable name='unpacked' value='ungepackt'/>
+ <cd:variable name='up' value='up'/>
<cd:variable name='url' value='url'/>
<cd:variable name='used' value='verwende'/>
<cd:variable name='value' value='wert'/>
@@ -508,12 +528,21 @@
<cd:constant name='align' value='ausrichtung'/>
<cd:constant name='aligncharacter' value='aligncharacter'/>
<cd:constant name='alignmentcharacter' value='alignmentcharacter'/>
+ <cd:constant name='alignsymbol' value='alignsymbol'/>
<cd:constant name='aligntitle' value='titelausrichten'/>
<cd:constant name='alternative' value='alternative'/>
+ <cd:constant name='andtext' value='andtext'/>
<cd:constant name='apa' value='apa'/>
<cd:constant name='arrow' value='pfeil'/>
+ <cd:constant name='artauthor' value='artauthor'/>
+ <cd:constant name='artauthoretaldisplay' value='artauthoretaldisplay'/>
+ <cd:constant name='artauthoretallimit' value='artauthoretallimit'/>
+ <cd:constant name='artauthoretaltext' value='artauthoretaltext'/>
<cd:constant name='at' value='bei'/>
<cd:constant name='author' value='autor'/>
+ <cd:constant name='authoretaldisplay' value='authoretaldisplay'/>
+ <cd:constant name='authoretallimit' value='authoretallimit'/>
+ <cd:constant name='authoretaltext' value='authoretaltext'/>
<cd:constant name='auto' value='auto'/>
<cd:constant name='autofile' value='autofile'/>
<cd:constant name='autofocus' value='autofocus'/>
@@ -582,6 +611,7 @@
<cd:constant name='cutspace' value='cutspace'/>
<cd:constant name='dash' value='strich'/>
<cd:constant name='dat' value='dat'/>
+ <cd:constant name='database' value='database'/>
<cd:constant name='date' value='datum'/>
<cd:constant name='deepnumbercommand' value='deepnumbercommand'/>
<cd:constant name='deeptextcommand' value='deeptextcommand'/>
@@ -600,12 +630,17 @@
<cd:constant name='dy' value='dy'/>
<cd:constant name='edge' value='kante'/>
<cd:constant name='edgedistance' value='kantenabstand'/>
+ <cd:constant name='editor' value='editor'/>
+ <cd:constant name='editoretaldisplay' value='editoretaldisplay'/>
+ <cd:constant name='editoretallimit' value='editoretallimit'/>
+ <cd:constant name='editoretaltext' value='editoretaltext'/>
<cd:constant name='empty' value='leer'/>
<cd:constant name='equalheight' value='equalheight'/>
<cd:constant name='equalwidth' value='equalwidth'/>
<cd:constant name='escape' value='escape'/>
<cd:constant name='evenmargin' value='geraderand'/>
<cd:constant name='expansion' value='expansion'/>
+ <cd:constant name='export' value='export'/>
<cd:constant name='extras' value='extras'/>
<cd:constant name='factor' value='faktor'/>
<cd:constant name='fallback' value='fallback'/>
@@ -616,6 +651,8 @@
<cd:constant name='fieldoffset' value='feldoffset'/>
<cd:constant name='file' value='datei'/>
<cd:constant name='filtercommand' value='filtercommand'/>
+ <cd:constant name='finalnamesep' value='finalnamesep'/>
+ <cd:constant name='firstnamesep' value='firstnamesep'/>
<cd:constant name='focus' value='focus'/>
<cd:constant name='focusin' value='focusin'/>
<cd:constant name='focusout' value='focusout'/>
@@ -637,6 +674,7 @@
<cd:constant name='global' value='global'/>
<cd:constant name='grid' value='gritter'/>
<cd:constant name='hang' value='haengend'/>
+ <cd:constant name='headalign' value='headalign'/>
<cd:constant name='headcolor' value='kopffarbe'/>
<cd:constant name='headcommand' value='headcommand'/>
<cd:constant name='headconversion' value='headconversion'/>
@@ -664,14 +702,18 @@
<cd:constant name='inner' value='innen'/>
<cd:constant name='innermargin' value='innermargin'/>
<cd:constant name='inputfile' value='inputfile'/>
+ <cd:constant name='intent' value='intent'/>
<cd:constant name='interaction' value='interaktion'/>
<cd:constant name='interlinespace' value='zeilenabstande'/>
<cd:constant name='itemalign' value='itemalign'/>
<cd:constant name='items' value='posten'/>
+ <cd:constant name='juniorsep' value='juniorsep'/>
<cd:constant name='ken' value='ken'/>
<cd:constant name='keyexpansion' value='keyexpansion'/>
<cd:constant name='keyword' value='keyword'/>
<cd:constant name='label' value='label'/>
+ <cd:constant name='lastnamesep' value='lastnamesep'/>
+ <cd:constant name='lastpubsep' value='lastpubsep'/>
<cd:constant name='left' value='links'/>
<cd:constant name='leftcolor' value='linkerfarbe'/>
<cd:constant name='leftcompoundhyphen' value='leftcompoundhyphen'/>
@@ -711,8 +753,10 @@
<cd:constant name='marking' value='beschriftung'/>
<cd:constant name='marstyle' value='beschrstil'/>
<cd:constant name='max' value='max'/>
+ <cd:constant name='maxdepth' value='maxdepth'/>
<cd:constant name='maxheight' value='maxhoehe'/>
<cd:constant name='maxwidth' value='maxbreite'/>
+ <cd:constant name='maybeyear' value='maybeyear'/>
<cd:constant name='menu' value='menue'/>
<cd:constant name='method' value='methode'/>
<cd:constant name='middle' value='mittig'/>
@@ -723,8 +767,10 @@
<cd:constant name='mindepth' value='mindepth'/>
<cd:constant name='minheight' value='minhoehe'/>
<cd:constant name='minwidth' value='minbreite'/>
+ <cd:constant name='monthconversion' value='monthconversion'/>
<cd:constant name='n' value='n'/>
<cd:constant name='name' value='name'/>
+ <cd:constant name='namesep' value='namesep'/>
<cd:constant name='nbottom' value='nunten'/>
<cd:constant name='nc' value='nc'/>
<cd:constant name='next' value='folgende'/>
@@ -748,6 +794,7 @@
<cd:constant name='numberseparator' value='nummernseperator'/>
<cd:constant name='numberseparatorset' value='numberseparatorset'/>
<cd:constant name='numberset' value='numberset'/>
+ <cd:constant name='numberstarter' value='numberstarter'/>
<cd:constant name='numberstopper' value='numberstopper'/>
<cd:constant name='numberstyle' value='nummernstil'/>
<cd:constant name='numberwidth' value='numberwidth'/>
@@ -760,7 +807,9 @@
<cd:constant name='openaction' value='oeffenaktion'/>
<cd:constant name='openpageaction' value='openpageaction'/>
<cd:constant name='option' value='option'/>
+ <cd:constant name='order' value='order'/>
<cd:constant name='orientation' value='orientation'/>
+ <cd:constant name='otherstext' value='otherstext'/>
<cd:constant name='outermargin' value='outermargin'/>
<cd:constant name='overprint' value='overprint'/>
<cd:constant name='ownnumber' value='eigenenummer'/>
@@ -778,10 +827,12 @@
<cd:constant name='pageprefixsegments' value='pageprefixsegments'/>
<cd:constant name='pageprefixseparatorset' value='pageprefixseparatorset'/>
<cd:constant name='pageprefixset' value='pageprefixset'/>
+ <cd:constant name='pageprefixstarter' value='pageprefixstarter'/>
<cd:constant name='pageprefixstopper' value='pageprefixstopper'/>
<cd:constant name='pagesegments' value='pagesegments'/>
<cd:constant name='pageseparatorset' value='pageseparatorset'/>
<cd:constant name='pageset' value='pageset'/>
+ <cd:constant name='pagestarter' value='pagestarter'/>
<cd:constant name='pagestate' value='pagestate'/>
<cd:constant name='pagestopper' value='pagestopper'/>
<cd:constant name='pagestyle' value='seitenstil'/>
@@ -799,16 +850,20 @@
<cd:constant name='prefixsegments' value='prefixsegments'/>
<cd:constant name='prefixseparatorset' value='prefixseparatorset'/>
<cd:constant name='prefixset' value='prefixset'/>
+ <cd:constant name='prefixstarter' value='prefixstarter'/>
<cd:constant name='prefixstopper' value='prefixstopper'/>
<cd:constant name='preset' value='voreinstellung'/>
<cd:constant name='preview' value='vorschau'/>
<cd:constant name='previous' value='vorige'/>
<cd:constant name='previousnumber' value='vorigenummer'/>
<cd:constant name='process' value='process'/>
+ <cd:constant name='pubsep' value='pubsep'/>
<cd:constant name='radius' value='radius'/>
<cd:constant name='random' value='zufaellig'/>
+ <cd:constant name='range' value='range'/>
<cd:constant name='reduction' value='reduktion'/>
<cd:constant name='ref' value='ref'/>
+ <cd:constant name='refcommand' value='refcommand'/>
<cd:constant name='reference' value='referenz'/>
<cd:constant name='referenceprefix' value='referenceprefix'/>
<cd:constant name='referencing' value='referieren'/>
@@ -842,6 +897,7 @@
<cd:constant name='rulethickness' value='liniendicke'/>
<cd:constant name='samepage' value='selbeseite'/>
<cd:constant name='sample' value='muster'/>
+ <cd:constant name='samplesize' value='samplesize'/>
<cd:constant name='saveinlist' value='saveinlist'/>
<cd:constant name='scale' value='format'/>
<cd:constant name='scope' value='bereich'/>
@@ -854,6 +910,7 @@
<cd:constant name='sectionsegments' value='sectionsegments'/>
<cd:constant name='sectionseparatorset' value='sectionseparatorset'/>
<cd:constant name='sectionset' value='sectionset'/>
+ <cd:constant name='sectionstarter' value='sectionstarter'/>
<cd:constant name='sectionstopper' value='sectionstopper'/>
<cd:constant name='separator' value='seperator'/>
<cd:constant name='set' value='set'/>
@@ -866,6 +923,7 @@
<cd:constant name='sign' value='zeichen'/>
<cd:constant name='size' value='groesse'/>
<cd:constant name='small' value='klein'/>
+ <cd:constant name='sort' value='sort'/>
<cd:constant name='sorttype' value='sorttype'/>
<cd:constant name='source' value='quelle'/>
<cd:constant name='space' value='spatium'/>
@@ -880,16 +938,19 @@
<cd:constant name='spot' value='spot'/>
<cd:constant name='stack' value='stack'/>
<cd:constant name='start' value='start'/>
+ <cd:constant name='starter' value='starter'/>
<cd:constant name='state' value='status'/>
<cd:constant name='step' value='schritt'/>
<cd:constant name='stop' value='stop'/>
<cd:constant name='stopper' value='abschnitttrenner'/>
<cd:constant name='stretch' value='strecken'/>
+ <cd:constant name='strip' value='strip'/>
<cd:constant name='strut' value='strut'/>
<cd:constant name='style' value='stil'/>
<cd:constant name='sub' value='unter'/>
<cd:constant name='subtitle' value='untertitel'/>
<cd:constant name='suffix' value='suffix'/>
+ <cd:constant name='surnamesep' value='surnamesep'/>
<cd:constant name='sx' value='sx'/>
<cd:constant name='sy' value='sy'/>
<cd:constant name='symalign' value='symausrichtung'/>
@@ -929,6 +990,7 @@
<cd:constant name='topoffset' value='obenoffset'/>
<cd:constant name='topspace' value='kopfspatium'/>
<cd:constant name='topstate' value='statusoben'/>
+ <cd:constant name='totalnumber' value='totalnumber'/>
<cd:constant name='type' value='typ'/>
<cd:constant name='unit' value='einheit'/>
<cd:constant name='unknownreference' value='unbekantereferenz'/>
@@ -939,6 +1001,7 @@
<cd:constant name='veroffset' value='kopfoffset'/>
<cd:constant name='vfil' value='vfil'/>
<cd:constant name='voffset' value='voffset'/>
+ <cd:constant name='vonsep' value='vonsep'/>
<cd:constant name='way' value='art'/>
<cd:constant name='wfactor' value='bfaktor'/>
<cd:constant name='white' value='weiss'/>
@@ -1273,10 +1336,6 @@
<cd:command name='outeredgewidth' value='outeredgewidth'/>
<cd:command name='outermargindistance' value='outermargindistance'/>
<cd:command name='outermarginwidth' value='outermarginwidth'/>
- <cd:command name='overbar' value='ueberstrichen'/>
- <cd:command name='overbars' value='ueberstreichen'/>
- <cd:command name='overstrike' value='durchgestrichen'/>
- <cd:command name='overstrikes' value='durchstreichen'/>
<cd:command name='packed' value='kleinerdurchschuss'/>
<cd:command name='page' value='seite'/>
<cd:command name='pagedepth' value='pagedepth'/>
@@ -1611,8 +1670,6 @@
<cd:command name='type' value='tippen'/>
<cd:command name='typebuffer' value='tippepuffer'/>
<cd:command name='typefile' value='tippedatei'/>
- <cd:command name='underbar' value='unterstrichen'/>
- <cd:command name='underbars' value='unterstreichen'/>
<cd:command name='unitmeaning' value='bedeutung'/>
<cd:command name='unknown' value='unbekant'/>
<cd:command name='useJSscripts' value='verwendeJSscript'/>
diff --git a/Master/texmf-dist/tex/context/interface/keys-en.xml b/Master/texmf-dist/tex/context/interface/keys-en.xml
index 2b7c68915c6..26ee20ad313 100644
--- a/Master/texmf-dist/tex/context/interface/keys-en.xml
+++ b/Master/texmf-dist/tex/context/interface/keys-en.xml
@@ -78,6 +78,7 @@
<cd:variable name='atmargin' value='atmargin'/>
<cd:variable name='atpage' value='atpage'/>
<cd:variable name='august' value='August'/>
+ <cd:variable name='author' value='author'/>
<cd:variable name='auto' value='auto'/>
<cd:variable name='autointro' value='autointro'/>
<cd:variable name='back' value='back'/>
@@ -86,7 +87,10 @@
<cd:variable name='backpart' value='backpart'/>
<cd:variable name='backspace' value='backspace'/>
<cd:variable name='backward' value='backward'/>
+ <cd:variable name='bbl' value='bbl'/>
<cd:variable name='before' value='before'/>
+ <cd:variable name='begin' value='begin'/>
+ <cd:variable name='bib' value='bib'/>
<cd:variable name='big' value='big'/>
<cd:variable name='bigbodyfont' value='bigbodyfont'/>
<cd:variable name='bigpreference' value='bigpreference'/>
@@ -111,6 +115,7 @@
<cd:variable name='chapter' value='chapter'/>
<cd:variable name='character' value='character'/>
<cd:variable name='characters' value='characters'/>
+ <cd:variable name='cite' value='cite'/>
<cd:variable name='color' value='color'/>
<cd:variable name='column' value='column'/>
<cd:variable name='columns' value='columns'/>
@@ -136,9 +141,11 @@
<cd:variable name='display' value='display'/>
<cd:variable name='dot' value='dot'/>
<cd:variable name='doublesided' value='doublesided'/>
+ <cd:variable name='down' value='down'/>
<cd:variable name='each' value='each'/>
<cd:variable name='edge' value='edge'/>
<cd:variable name='empty' value='empty'/>
+ <cd:variable name='end' value='end'/>
<cd:variable name='endnote' value='endnote'/>
<cd:variable name='enumeration' value='enumeration'/>
<cd:variable name='environment' value='environment'/>
@@ -268,11 +275,15 @@
<cd:variable name='mathcases' value='mathcases'/>
<cd:variable name='mathmatrix' value='mathmatrix'/>
<cd:variable name='max' value='max'/>
+ <cd:variable name='maxdepth' value='maxdepth'/>
+ <cd:variable name='maxheight' value='maxheight'/>
+ <cd:variable name='maxwidth' value='maxwidth'/>
<cd:variable name='may' value='May'/>
<cd:variable name='mediaeval' value='mediaeval'/>
<cd:variable name='medium' value='medium'/>
<cd:variable name='middle' value='middle'/>
<cd:variable name='min' value='min'/>
+ <cd:variable name='mindepth' value='mindepth'/>
<cd:variable name='minheight' value='minheight'/>
<cd:variable name='minwidth' value='minwidth'/>
<cd:variable name='mirrored' value='mirrored'/>
@@ -320,8 +331,12 @@
<cd:variable name='outer' value='outer'/>
<cd:variable name='outeredge' value='outeredge'/>
<cd:variable name='outermargin' value='outermargin'/>
+ <cd:variable name='overbar' value='overbar'/>
+ <cd:variable name='overbars' value='overbars'/>
<cd:variable name='overlay' value='overlay'/>
<cd:variable name='overprint' value='overprint'/>
+ <cd:variable name='overstrike' value='overstrike'/>
+ <cd:variable name='overstrikes' value='overstrikes'/>
<cd:variable name='packed' value='packed'/>
<cd:variable name='page' value='page'/>
<cd:variable name='pagecomment' value='pagecomment'/>
@@ -389,6 +404,7 @@
<cd:variable name='serried' value='serried'/>
<cd:variable name='setups' value='setups'/>
<cd:variable name='sheet' value='sheet'/>
+ <cd:variable name='short' value='short'/>
<cd:variable name='singlesided' value='singlesided'/>
<cd:variable name='slanted' value='slanted'/>
<cd:variable name='slantedbold' value='slantedbold'/>
@@ -413,12 +429,13 @@
<cd:variable name='spot' value='spot'/>
<cd:variable name='standard' value='standard'/>
<cd:variable name='start' value='start'/>
+ <cd:variable name='starter' value='starter'/>
<cd:variable name='sticker' value='sticker'/>
<cd:variable name='stop' value='stop'/>
<cd:variable name='stopper' value='stopper'/>
<cd:variable name='stretch' value='stretch'/>
<cd:variable name='strict' value='strict'/>
- <cd:variable name='strong' value='sterk'/>
+ <cd:variable name='strong' value='strong'/>
<cd:variable name='strut' value='strut'/>
<cd:variable name='sub' value='sub'/>
<cd:variable name='subbackward' value='subbackward'/>
@@ -474,10 +491,13 @@
<cd:variable name='type' value='type'/>
<cd:variable name='typing' value='typing'/>
<cd:variable name='unavailable' value='unavailable'/>
+ <cd:variable name='underbar' value='underbar'/>
+ <cd:variable name='underbars' value='underbars'/>
<cd:variable name='unit' value='unit'/>
<cd:variable name='units' value='units'/>
<cd:variable name='unknown' value='unknown'/>
<cd:variable name='unpacked' value='unpacked'/>
+ <cd:variable name='up' value='up'/>
<cd:variable name='url' value='url'/>
<cd:variable name='used' value='used'/>
<cd:variable name='value' value='value'/>
@@ -485,7 +505,7 @@
<cd:variable name='very' value='very'/>
<cd:variable name='verystrict' value='verystrict'/>
<cd:variable name='verytolerant' value='verytolerant'/>
- <cd:variable name='weak' value='zwak'/>
+ <cd:variable name='weak' value='weak'/>
<cd:variable name='wednesday' value='wednesday'/>
<cd:variable name='week' value='week'/>
<cd:variable name='weekday' value='weekday'/>
@@ -508,12 +528,21 @@
<cd:constant name='align' value='align'/>
<cd:constant name='aligncharacter' value='aligncharacter'/>
<cd:constant name='alignmentcharacter' value='alignmentcharacter'/>
+ <cd:constant name='alignsymbol' value='alignsymbol'/>
<cd:constant name='aligntitle' value='aligntitle'/>
<cd:constant name='alternative' value='alternative'/>
+ <cd:constant name='andtext' value='andtext'/>
<cd:constant name='apa' value='apa'/>
<cd:constant name='arrow' value='arrow'/>
+ <cd:constant name='artauthor' value='artauthor'/>
+ <cd:constant name='artauthoretaldisplay' value='artauthoretaldisplay'/>
+ <cd:constant name='artauthoretallimit' value='artauthoretallimit'/>
+ <cd:constant name='artauthoretaltext' value='artauthoretaltext'/>
<cd:constant name='at' value='at'/>
<cd:constant name='author' value='author'/>
+ <cd:constant name='authoretaldisplay' value='authoretaldisplay'/>
+ <cd:constant name='authoretallimit' value='authoretallimit'/>
+ <cd:constant name='authoretaltext' value='authoretaltext'/>
<cd:constant name='auto' value='auto'/>
<cd:constant name='autofile' value='autofile'/>
<cd:constant name='autofocus' value='autofocus'/>
@@ -582,6 +611,7 @@
<cd:constant name='cutspace' value='cutspace'/>
<cd:constant name='dash' value='dash'/>
<cd:constant name='dat' value='dat'/>
+ <cd:constant name='database' value='database'/>
<cd:constant name='date' value='date'/>
<cd:constant name='deepnumbercommand' value='deepnumbercommand'/>
<cd:constant name='deeptextcommand' value='deeptextcommand'/>
@@ -600,12 +630,17 @@
<cd:constant name='dy' value='dy'/>
<cd:constant name='edge' value='edge'/>
<cd:constant name='edgedistance' value='edgedistance'/>
+ <cd:constant name='editor' value='editor'/>
+ <cd:constant name='editoretaldisplay' value='editoretaldisplay'/>
+ <cd:constant name='editoretallimit' value='editoretallimit'/>
+ <cd:constant name='editoretaltext' value='editoretaltext'/>
<cd:constant name='empty' value='empty'/>
<cd:constant name='equalheight' value='equalheight'/>
<cd:constant name='equalwidth' value='equalwidth'/>
<cd:constant name='escape' value='escape'/>
<cd:constant name='evenmargin' value='evenmargin'/>
<cd:constant name='expansion' value='expansion'/>
+ <cd:constant name='export' value='export'/>
<cd:constant name='extras' value='extras'/>
<cd:constant name='factor' value='factor'/>
<cd:constant name='fallback' value='fallback'/>
@@ -616,6 +651,8 @@
<cd:constant name='fieldoffset' value='fieldoffset'/>
<cd:constant name='file' value='file'/>
<cd:constant name='filtercommand' value='filtercommand'/>
+ <cd:constant name='finalnamesep' value='finalnamesep'/>
+ <cd:constant name='firstnamesep' value='firstnamesep'/>
<cd:constant name='focus' value='focus'/>
<cd:constant name='focusin' value='focusin'/>
<cd:constant name='focusout' value='focusout'/>
@@ -637,6 +674,7 @@
<cd:constant name='global' value='global'/>
<cd:constant name='grid' value='grid'/>
<cd:constant name='hang' value='hang'/>
+ <cd:constant name='headalign' value='headalign'/>
<cd:constant name='headcolor' value='headcolor'/>
<cd:constant name='headcommand' value='headcommand'/>
<cd:constant name='headconversion' value='headconversion'/>
@@ -664,14 +702,18 @@
<cd:constant name='inner' value='inner'/>
<cd:constant name='innermargin' value='innermargin'/>
<cd:constant name='inputfile' value='inputfile'/>
+ <cd:constant name='intent' value='intent'/>
<cd:constant name='interaction' value='interaction'/>
<cd:constant name='interlinespace' value='interlinespace'/>
<cd:constant name='itemalign' value='itemalign'/>
<cd:constant name='items' value='items'/>
+ <cd:constant name='juniorsep' value='juniorsep'/>
<cd:constant name='ken' value='ken'/>
<cd:constant name='keyexpansion' value='keyexpansion'/>
<cd:constant name='keyword' value='keyword'/>
<cd:constant name='label' value='label'/>
+ <cd:constant name='lastnamesep' value='lastnamesep'/>
+ <cd:constant name='lastpubsep' value='lastpubsep'/>
<cd:constant name='left' value='left'/>
<cd:constant name='leftcolor' value='leftcolor'/>
<cd:constant name='leftcompoundhyphen' value='leftcompoundhyphen'/>
@@ -711,8 +753,10 @@
<cd:constant name='marking' value='marking'/>
<cd:constant name='marstyle' value='marstyle'/>
<cd:constant name='max' value='max'/>
+ <cd:constant name='maxdepth' value='maxdepth'/>
<cd:constant name='maxheight' value='maxheight'/>
<cd:constant name='maxwidth' value='maxwidth'/>
+ <cd:constant name='maybeyear' value='maybeyear'/>
<cd:constant name='menu' value='menu'/>
<cd:constant name='method' value='method'/>
<cd:constant name='middle' value='middle'/>
@@ -723,8 +767,10 @@
<cd:constant name='mindepth' value='mindepth'/>
<cd:constant name='minheight' value='minheight'/>
<cd:constant name='minwidth' value='minwidth'/>
+ <cd:constant name='monthconversion' value='monthconversion'/>
<cd:constant name='n' value='n'/>
<cd:constant name='name' value='name'/>
+ <cd:constant name='namesep' value='namesep'/>
<cd:constant name='nbottom' value='nbottom'/>
<cd:constant name='nc' value='nc'/>
<cd:constant name='next' value='next'/>
@@ -748,6 +794,7 @@
<cd:constant name='numberseparator' value='numberseparator'/>
<cd:constant name='numberseparatorset' value='numberseparatorset'/>
<cd:constant name='numberset' value='numberset'/>
+ <cd:constant name='numberstarter' value='numberstarter'/>
<cd:constant name='numberstopper' value='numberstopper'/>
<cd:constant name='numberstyle' value='numberstyle'/>
<cd:constant name='numberwidth' value='numberwidth'/>
@@ -760,7 +807,9 @@
<cd:constant name='openaction' value='openaction'/>
<cd:constant name='openpageaction' value='openpageaction'/>
<cd:constant name='option' value='option'/>
+ <cd:constant name='order' value='order'/>
<cd:constant name='orientation' value='orientation'/>
+ <cd:constant name='otherstext' value='otherstext'/>
<cd:constant name='outermargin' value='outermargin'/>
<cd:constant name='overprint' value='overprint'/>
<cd:constant name='ownnumber' value='ownnumber'/>
@@ -778,10 +827,12 @@
<cd:constant name='pageprefixsegments' value='pageprefixsegments'/>
<cd:constant name='pageprefixseparatorset' value='pageprefixseparatorset'/>
<cd:constant name='pageprefixset' value='pageprefixset'/>
+ <cd:constant name='pageprefixstarter' value='pageprefixstarter'/>
<cd:constant name='pageprefixstopper' value='pageprefixstopper'/>
<cd:constant name='pagesegments' value='pagesegments'/>
<cd:constant name='pageseparatorset' value='pageseparatorset'/>
<cd:constant name='pageset' value='pageset'/>
+ <cd:constant name='pagestarter' value='pagestarter'/>
<cd:constant name='pagestate' value='pagestate'/>
<cd:constant name='pagestopper' value='pagestopper'/>
<cd:constant name='pagestyle' value='pagestyle'/>
@@ -799,16 +850,20 @@
<cd:constant name='prefixsegments' value='prefixsegments'/>
<cd:constant name='prefixseparatorset' value='prefixseparatorset'/>
<cd:constant name='prefixset' value='prefixset'/>
+ <cd:constant name='prefixstarter' value='prefixstarter'/>
<cd:constant name='prefixstopper' value='prefixstopper'/>
<cd:constant name='preset' value='preset'/>
<cd:constant name='preview' value='preview'/>
<cd:constant name='previous' value='previous'/>
<cd:constant name='previousnumber' value='previousnumber'/>
<cd:constant name='process' value='process'/>
+ <cd:constant name='pubsep' value='pubsep'/>
<cd:constant name='radius' value='radius'/>
<cd:constant name='random' value='random'/>
+ <cd:constant name='range' value='range'/>
<cd:constant name='reduction' value='reduction'/>
<cd:constant name='ref' value='ref'/>
+ <cd:constant name='refcommand' value='refcommand'/>
<cd:constant name='reference' value='reference'/>
<cd:constant name='referenceprefix' value='referenceprefix'/>
<cd:constant name='referencing' value='referencing'/>
@@ -842,6 +897,7 @@
<cd:constant name='rulethickness' value='rulethickness'/>
<cd:constant name='samepage' value='samepage'/>
<cd:constant name='sample' value='sample'/>
+ <cd:constant name='samplesize' value='samplesize'/>
<cd:constant name='saveinlist' value='saveinlist'/>
<cd:constant name='scale' value='scale'/>
<cd:constant name='scope' value='scope'/>
@@ -854,6 +910,7 @@
<cd:constant name='sectionsegments' value='sectionsegments'/>
<cd:constant name='sectionseparatorset' value='sectionseparatorset'/>
<cd:constant name='sectionset' value='sectionset'/>
+ <cd:constant name='sectionstarter' value='sectionstarter'/>
<cd:constant name='sectionstopper' value='sectionstopper'/>
<cd:constant name='separator' value='separator'/>
<cd:constant name='set' value='set'/>
@@ -866,6 +923,7 @@
<cd:constant name='sign' value='sign'/>
<cd:constant name='size' value='size'/>
<cd:constant name='small' value='small'/>
+ <cd:constant name='sort' value='sort'/>
<cd:constant name='sorttype' value='sorttype'/>
<cd:constant name='source' value='source'/>
<cd:constant name='space' value='space'/>
@@ -880,16 +938,19 @@
<cd:constant name='spot' value='spot'/>
<cd:constant name='stack' value='stack'/>
<cd:constant name='start' value='start'/>
+ <cd:constant name='starter' value='starter'/>
<cd:constant name='state' value='state'/>
<cd:constant name='step' value='step'/>
<cd:constant name='stop' value='stop'/>
<cd:constant name='stopper' value='stopper'/>
<cd:constant name='stretch' value='stretch'/>
+ <cd:constant name='strip' value='strip'/>
<cd:constant name='strut' value='strut'/>
<cd:constant name='style' value='style'/>
<cd:constant name='sub' value='sub'/>
<cd:constant name='subtitle' value='subtitle'/>
<cd:constant name='suffix' value='suffix'/>
+ <cd:constant name='surnamesep' value='surnamesep'/>
<cd:constant name='sx' value='sx'/>
<cd:constant name='sy' value='sy'/>
<cd:constant name='symalign' value='symalign'/>
@@ -929,6 +990,7 @@
<cd:constant name='topoffset' value='topoffset'/>
<cd:constant name='topspace' value='topspace'/>
<cd:constant name='topstate' value='topstate'/>
+ <cd:constant name='totalnumber' value='totalnumber'/>
<cd:constant name='type' value='type'/>
<cd:constant name='unit' value='unit'/>
<cd:constant name='unknownreference' value='unknownreference'/>
@@ -939,6 +1001,7 @@
<cd:constant name='veroffset' value='veroffset'/>
<cd:constant name='vfil' value='vfil'/>
<cd:constant name='voffset' value='voffset'/>
+ <cd:constant name='vonsep' value='vonsep'/>
<cd:constant name='way' value='way'/>
<cd:constant name='wfactor' value='wfactor'/>
<cd:constant name='white' value='white'/>
@@ -1273,10 +1336,6 @@
<cd:command name='outeredgewidth' value='outeredgewidth'/>
<cd:command name='outermargindistance' value='outermargindistance'/>
<cd:command name='outermarginwidth' value='outermarginwidth'/>
- <cd:command name='overbar' value='overbar'/>
- <cd:command name='overbars' value='overbars'/>
- <cd:command name='overstrike' value='overstrike'/>
- <cd:command name='overstrikes' value='overstrikes'/>
<cd:command name='packed' value='packed'/>
<cd:command name='page' value='page'/>
<cd:command name='pagedepth' value='pagedepth'/>
@@ -1611,8 +1670,6 @@
<cd:command name='type' value='type'/>
<cd:command name='typebuffer' value='typebuffer'/>
<cd:command name='typefile' value='typefile'/>
- <cd:command name='underbar' value='underbar'/>
- <cd:command name='underbars' value='underbars'/>
<cd:command name='unitmeaning' value='unitmeaning'/>
<cd:command name='unknown' value='unknown'/>
<cd:command name='useJSscripts' value='useJSscripts'/>
diff --git a/Master/texmf-dist/tex/context/interface/keys-fr.xml b/Master/texmf-dist/tex/context/interface/keys-fr.xml
index d03d72a8808..ba648336512 100644
--- a/Master/texmf-dist/tex/context/interface/keys-fr.xml
+++ b/Master/texmf-dist/tex/context/interface/keys-fr.xml
@@ -78,6 +78,7 @@
<cd:variable name='atmargin' value='alamarge'/>
<cd:variable name='atpage' value='alapage'/>
<cd:variable name='august' value='aout'/>
+ <cd:variable name='author' value='auteur'/>
<cd:variable name='auto' value='auto'/>
<cd:variable name='autointro' value='autointro'/>
<cd:variable name='back' value='retour'/>
@@ -86,7 +87,10 @@
<cd:variable name='backpart' value='postface'/>
<cd:variable name='backspace' value='retourarriere'/>
<cd:variable name='backward' value='retourarriere'/>
+ <cd:variable name='bbl' value='bbl'/>
<cd:variable name='before' value='avant'/>
+ <cd:variable name='begin' value='begin'/>
+ <cd:variable name='bib' value='bib'/>
<cd:variable name='big' value='grand'/>
<cd:variable name='bigbodyfont' value='grandepolicecorp'/>
<cd:variable name='bigpreference' value='grandepreference'/>
@@ -111,6 +115,7 @@
<cd:variable name='chapter' value='chapitre'/>
<cd:variable name='character' value='caractere'/>
<cd:variable name='characters' value='caracteres'/>
+ <cd:variable name='cite' value='cite'/>
<cd:variable name='color' value='couleur'/>
<cd:variable name='column' value='colonne'/>
<cd:variable name='columns' value='colonnes'/>
@@ -136,9 +141,11 @@
<cd:variable name='display' value='affichage'/>
<cd:variable name='dot' value='point'/>
<cd:variable name='doublesided' value='rectoverso'/>
+ <cd:variable name='down' value='down'/>
<cd:variable name='each' value='chaque'/>
<cd:variable name='edge' value='bord'/>
<cd:variable name='empty' value='vide'/>
+ <cd:variable name='end' value='end'/>
<cd:variable name='endnote' value='notefin'/>
<cd:variable name='enumeration' value='enumeration'/>
<cd:variable name='environment' value='environement'/>
@@ -268,11 +275,15 @@
<cd:variable name='mathcases' value='mathcases'/>
<cd:variable name='mathmatrix' value='mathmatrix'/>
<cd:variable name='max' value='max'/>
+ <cd:variable name='maxdepth' value='maxdepth'/>
+ <cd:variable name='maxheight' value='maxheight'/>
+ <cd:variable name='maxwidth' value='maxwidth'/>
<cd:variable name='may' value='mai'/>
<cd:variable name='mediaeval' value='medieval'/>
<cd:variable name='medium' value='moyen'/>
<cd:variable name='middle' value='milieu'/>
<cd:variable name='min' value='min'/>
+ <cd:variable name='mindepth' value='mindepth'/>
<cd:variable name='minheight' value='hauteurmin'/>
<cd:variable name='minwidth' value='largeurmin'/>
<cd:variable name='mirrored' value='reflete'/>
@@ -320,8 +331,12 @@
<cd:variable name='outer' value='exterieur'/>
<cd:variable name='outeredge' value='bordexterieur'/>
<cd:variable name='outermargin' value='margeexterieure'/>
+ <cd:variable name='overbar' value='overbar'/>
+ <cd:variable name='overbars' value='overbars'/>
<cd:variable name='overlay' value='revetement'/>
<cd:variable name='overprint' value='overprint'/>
+ <cd:variable name='overstrike' value='surlignetout'/>
+ <cd:variable name='overstrikes' value='surligne'/>
<cd:variable name='packed' value='groupe'/>
<cd:variable name='page' value='page'/>
<cd:variable name='pagecomment' value='commentairepage'/>
@@ -389,6 +404,7 @@
<cd:variable name='serried' value='serried'/>
<cd:variable name='setups' value='reglages'/>
<cd:variable name='sheet' value='sheet'/>
+ <cd:variable name='short' value='short'/>
<cd:variable name='singlesided' value='recto'/>
<cd:variable name='slanted' value='incline'/>
<cd:variable name='slantedbold' value='grasincline'/>
@@ -413,6 +429,7 @@
<cd:variable name='spot' value='spot'/>
<cd:variable name='standard' value='standard'/>
<cd:variable name='start' value='demarre'/>
+ <cd:variable name='starter' value='starter'/>
<cd:variable name='sticker' value='sticker'/>
<cd:variable name='stop' value='stoppe'/>
<cd:variable name='stopper' value='stopper'/>
@@ -474,10 +491,13 @@
<cd:variable name='type' value='type'/>
<cd:variable name='typing' value='typing'/>
<cd:variable name='unavailable' value='indisponible'/>
+ <cd:variable name='underbar' value='souslignetout'/>
+ <cd:variable name='underbars' value='sousligne'/>
<cd:variable name='unit' value='unite'/>
<cd:variable name='units' value='unites'/>
<cd:variable name='unknown' value='inconnu'/>
<cd:variable name='unpacked' value='degroupe'/>
+ <cd:variable name='up' value='up'/>
<cd:variable name='url' value='url'/>
<cd:variable name='used' value='used'/>
<cd:variable name='value' value='valeur'/>
@@ -508,12 +528,21 @@
<cd:constant name='align' value='alignement'/>
<cd:constant name='aligncharacter' value='caracterealigne'/>
<cd:constant name='alignmentcharacter' value='alignementcaractere'/>
+ <cd:constant name='alignsymbol' value='alignsymbol'/>
<cd:constant name='aligntitle' value='alignementtitre'/>
<cd:constant name='alternative' value='alternative'/>
+ <cd:constant name='andtext' value='andtext'/>
<cd:constant name='apa' value='apa'/>
<cd:constant name='arrow' value='fleche'/>
+ <cd:constant name='artauthor' value='artauthor'/>
+ <cd:constant name='artauthoretaldisplay' value='artauthoretaldisplay'/>
+ <cd:constant name='artauthoretallimit' value='artauthoretallimit'/>
+ <cd:constant name='artauthoretaltext' value='artauthoretaltext'/>
<cd:constant name='at' value='a'/>
<cd:constant name='author' value='auteur'/>
+ <cd:constant name='authoretaldisplay' value='authoretaldisplay'/>
+ <cd:constant name='authoretallimit' value='authoretallimit'/>
+ <cd:constant name='authoretaltext' value='authoretaltext'/>
<cd:constant name='auto' value='auto'/>
<cd:constant name='autofile' value='autofile'/>
<cd:constant name='autofocus' value='autofocus'/>
@@ -582,6 +611,7 @@
<cd:constant name='cutspace' value='cutspace'/>
<cd:constant name='dash' value='pointille'/>
<cd:constant name='dat' value='dat'/>
+ <cd:constant name='database' value='database'/>
<cd:constant name='date' value='date'/>
<cd:constant name='deepnumbercommand' value='deepnumbercommand'/>
<cd:constant name='deeptextcommand' value='deeptextcommand'/>
@@ -600,12 +630,17 @@
<cd:constant name='dy' value='dy'/>
<cd:constant name='edge' value='bord'/>
<cd:constant name='edgedistance' value='distancebord'/>
+ <cd:constant name='editor' value='editor'/>
+ <cd:constant name='editoretaldisplay' value='editoretaldisplay'/>
+ <cd:constant name='editoretallimit' value='editoretallimit'/>
+ <cd:constant name='editoretaltext' value='editoretaltext'/>
<cd:constant name='empty' value='vide'/>
<cd:constant name='equalheight' value='equalheight'/>
<cd:constant name='equalwidth' value='equalwidth'/>
<cd:constant name='escape' value='escape'/>
<cd:constant name='evenmargin' value='margepaire'/>
<cd:constant name='expansion' value='expansion'/>
+ <cd:constant name='export' value='export'/>
<cd:constant name='extras' value='extras'/>
<cd:constant name='factor' value='facteur'/>
<cd:constant name='fallback' value='fallback'/>
@@ -616,6 +651,8 @@
<cd:constant name='fieldoffset' value='offsetchamp'/>
<cd:constant name='file' value='fichier'/>
<cd:constant name='filtercommand' value='filtercommand'/>
+ <cd:constant name='finalnamesep' value='finalnamesep'/>
+ <cd:constant name='firstnamesep' value='firstnamesep'/>
<cd:constant name='focus' value='focus'/>
<cd:constant name='focusin' value='focusin'/>
<cd:constant name='focusout' value='focusout'/>
@@ -637,6 +674,7 @@
<cd:constant name='global' value='global'/>
<cd:constant name='grid' value='grille'/>
<cd:constant name='hang' value='suspend'/>
+ <cd:constant name='headalign' value='headalign'/>
<cd:constant name='headcolor' value='couleurtete'/>
<cd:constant name='headcommand' value='commandetete'/>
<cd:constant name='headconversion' value='conversiontete'/>
@@ -664,14 +702,18 @@
<cd:constant name='inner' value='interieur'/>
<cd:constant name='innermargin' value='margeinterieure'/>
<cd:constant name='inputfile' value='fichierentree'/>
+ <cd:constant name='intent' value='intent'/>
<cd:constant name='interaction' value='interaction'/>
<cd:constant name='interlinespace' value='espaceinterligne'/>
<cd:constant name='itemalign' value='itemalign'/>
<cd:constant name='items' value='elements'/>
+ <cd:constant name='juniorsep' value='juniorsep'/>
<cd:constant name='ken' value='ken'/>
<cd:constant name='keyexpansion' value='keyexpansion'/>
<cd:constant name='keyword' value='motcle'/>
<cd:constant name='label' value='etiquette'/>
+ <cd:constant name='lastnamesep' value='lastnamesep'/>
+ <cd:constant name='lastpubsep' value='lastpubsep'/>
<cd:constant name='left' value='gauche'/>
<cd:constant name='leftcolor' value='couleurgauche'/>
<cd:constant name='leftcompoundhyphen' value='leftcompoundhyphen'/>
@@ -711,8 +753,10 @@
<cd:constant name='marking' value='marquage'/>
<cd:constant name='marstyle' value='stylemarquage'/>
<cd:constant name='max' value='max'/>
+ <cd:constant name='maxdepth' value='maxdepth'/>
<cd:constant name='maxheight' value='hauteurmax'/>
<cd:constant name='maxwidth' value='largeurmax'/>
+ <cd:constant name='maybeyear' value='maybeyear'/>
<cd:constant name='menu' value='menu'/>
<cd:constant name='method' value='methode'/>
<cd:constant name='middle' value='milieu'/>
@@ -723,8 +767,10 @@
<cd:constant name='mindepth' value='profondeurmin'/>
<cd:constant name='minheight' value='hauteurmin'/>
<cd:constant name='minwidth' value='largeurmin'/>
+ <cd:constant name='monthconversion' value='monthconversion'/>
<cd:constant name='n' value='n'/>
<cd:constant name='name' value='nom'/>
+ <cd:constant name='namesep' value='namesep'/>
<cd:constant name='nbottom' value='ninf'/>
<cd:constant name='nc' value='nc'/>
<cd:constant name='next' value='suivant'/>
@@ -748,6 +794,7 @@
<cd:constant name='numberseparator' value='separateurnumbero'/>
<cd:constant name='numberseparatorset' value='numberseparatorset'/>
<cd:constant name='numberset' value='numberset'/>
+ <cd:constant name='numberstarter' value='numberstarter'/>
<cd:constant name='numberstopper' value='numberstopper'/>
<cd:constant name='numberstyle' value='stylenumero'/>
<cd:constant name='numberwidth' value='numberwidth'/>
@@ -760,7 +807,9 @@
<cd:constant name='openaction' value='actionouverture'/>
<cd:constant name='openpageaction' value='actionouverturepage'/>
<cd:constant name='option' value='option'/>
+ <cd:constant name='order' value='order'/>
<cd:constant name='orientation' value='orientation'/>
+ <cd:constant name='otherstext' value='otherstext'/>
<cd:constant name='outermargin' value='margeexterieure'/>
<cd:constant name='overprint' value='overprint'/>
<cd:constant name='ownnumber' value='numeroproprio'/>
@@ -778,10 +827,12 @@
<cd:constant name='pageprefixsegments' value='pageprefixsegments'/>
<cd:constant name='pageprefixseparatorset' value='pageprefixseparatorset'/>
<cd:constant name='pageprefixset' value='pageprefixset'/>
+ <cd:constant name='pageprefixstarter' value='pageprefixstarter'/>
<cd:constant name='pageprefixstopper' value='pageprefixstopper'/>
<cd:constant name='pagesegments' value='pagesegments'/>
<cd:constant name='pageseparatorset' value='pageseparatorset'/>
<cd:constant name='pageset' value='pageset'/>
+ <cd:constant name='pagestarter' value='pagestarter'/>
<cd:constant name='pagestate' value='etatpage'/>
<cd:constant name='pagestopper' value='pagestopper'/>
<cd:constant name='pagestyle' value='stylepage'/>
@@ -799,16 +850,20 @@
<cd:constant name='prefixsegments' value='prefixsegments'/>
<cd:constant name='prefixseparatorset' value='prefixseparatorset'/>
<cd:constant name='prefixset' value='prefixset'/>
+ <cd:constant name='prefixstarter' value='prefixstarter'/>
<cd:constant name='prefixstopper' value='prefixstopper'/>
<cd:constant name='preset' value='prereglage'/>
<cd:constant name='preview' value='previsualisation'/>
<cd:constant name='previous' value='precedent'/>
<cd:constant name='previousnumber' value='numeroprecedent'/>
<cd:constant name='process' value='process'/>
+ <cd:constant name='pubsep' value='pubsep'/>
<cd:constant name='radius' value='rayon'/>
<cd:constant name='random' value='aleatoire'/>
+ <cd:constant name='range' value='range'/>
<cd:constant name='reduction' value='reduction'/>
<cd:constant name='ref' value='ref'/>
+ <cd:constant name='refcommand' value='refcommand'/>
<cd:constant name='reference' value='reference'/>
<cd:constant name='referenceprefix' value='referenceprefix'/>
<cd:constant name='referencing' value='referencing'/>
@@ -842,6 +897,7 @@
<cd:constant name='rulethickness' value='epaisseurligne'/>
<cd:constant name='samepage' value='memepage'/>
<cd:constant name='sample' value='echantillon'/>
+ <cd:constant name='samplesize' value='samplesize'/>
<cd:constant name='saveinlist' value='saveinlist'/>
<cd:constant name='scale' value='echelle'/>
<cd:constant name='scope' value='scope'/>
@@ -854,6 +910,7 @@
<cd:constant name='sectionsegments' value='sectionsegments'/>
<cd:constant name='sectionseparatorset' value='sectionseparatorset'/>
<cd:constant name='sectionset' value='sectionset'/>
+ <cd:constant name='sectionstarter' value='sectionstarter'/>
<cd:constant name='sectionstopper' value='sectionstopper'/>
<cd:constant name='separator' value='separateur'/>
<cd:constant name='set' value='set'/>
@@ -866,6 +923,7 @@
<cd:constant name='sign' value='signe'/>
<cd:constant name='size' value='dimension'/>
<cd:constant name='small' value='petit'/>
+ <cd:constant name='sort' value='sort'/>
<cd:constant name='sorttype' value='sorttype'/>
<cd:constant name='source' value='origine'/>
<cd:constant name='space' value='espace'/>
@@ -880,16 +938,19 @@
<cd:constant name='spot' value='spot'/>
<cd:constant name='stack' value='stack'/>
<cd:constant name='start' value='demarre'/>
+ <cd:constant name='starter' value='starter'/>
<cd:constant name='state' value='etat'/>
<cd:constant name='step' value='pas'/>
<cd:constant name='stop' value='stoppe'/>
<cd:constant name='stopper' value='taquet'/>
<cd:constant name='stretch' value='etire'/>
+ <cd:constant name='strip' value='strip'/>
<cd:constant name='strut' value='strut'/>
<cd:constant name='style' value='style'/>
<cd:constant name='sub' value='sous'/>
<cd:constant name='subtitle' value='soustitre'/>
<cd:constant name='suffix' value='suffix'/>
+ <cd:constant name='surnamesep' value='surnamesep'/>
<cd:constant name='sx' value='sx'/>
<cd:constant name='sy' value='sy'/>
<cd:constant name='symalign' value='symalignement'/>
@@ -929,6 +990,7 @@
<cd:constant name='topoffset' value='decalagesup'/>
<cd:constant name='topspace' value='espacesup'/>
<cd:constant name='topstate' value='etatsup'/>
+ <cd:constant name='totalnumber' value='totalnumber'/>
<cd:constant name='type' value='type'/>
<cd:constant name='unit' value='unite'/>
<cd:constant name='unknownreference' value='referenceinconnue'/>
@@ -939,6 +1001,7 @@
<cd:constant name='veroffset' value='veroffset'/>
<cd:constant name='vfil' value='vfil'/>
<cd:constant name='voffset' value='voffset'/>
+ <cd:constant name='vonsep' value='vonsep'/>
<cd:constant name='way' value='mode'/>
<cd:constant name='wfactor' value='facteurlargeur'/>
<cd:constant name='white' value='blanc'/>
@@ -1273,10 +1336,6 @@
<cd:command name='outeredgewidth' value='outeredgewidth'/>
<cd:command name='outermargindistance' value='outermargindistance'/>
<cd:command name='outermarginwidth' value='outermarginwidth'/>
- <cd:command name='overbar' value='overbar'/>
- <cd:command name='overbars' value='overbars'/>
- <cd:command name='overstrike' value='surlignetout'/>
- <cd:command name='overstrikes' value='surligne'/>
<cd:command name='packed' value='groupe'/>
<cd:command name='page' value='page'/>
<cd:command name='pagedepth' value='pagedepth'/>
@@ -1611,8 +1670,6 @@
<cd:command name='type' value='dactylographier'/>
<cd:command name='typebuffer' value='tapebuffer'/>
<cd:command name='typefile' value='fichierdactylo'/>
- <cd:command name='underbar' value='souslignetout'/>
- <cd:command name='underbars' value='sousligne'/>
<cd:command name='unitmeaning' value='sensunite'/>
<cd:command name='unknown' value='inconnu'/>
<cd:command name='useJSscripts' value='utiliseJSscripts'/>
diff --git a/Master/texmf-dist/tex/context/interface/keys-it.xml b/Master/texmf-dist/tex/context/interface/keys-it.xml
index b2c01b9168d..098aba8992b 100644
--- a/Master/texmf-dist/tex/context/interface/keys-it.xml
+++ b/Master/texmf-dist/tex/context/interface/keys-it.xml
@@ -78,6 +78,7 @@
<cd:variable name='atmargin' value='almargine'/>
<cd:variable name='atpage' value='apagina'/>
<cd:variable name='august' value='agosto'/>
+ <cd:variable name='author' value='autore'/>
<cd:variable name='auto' value='auto'/>
<cd:variable name='autointro' value='autointro'/>
<cd:variable name='back' value='dietro'/>
@@ -86,7 +87,10 @@
<cd:variable name='backpart' value='postfazione'/>
<cd:variable name='backspace' value='backspace'/>
<cd:variable name='backward' value='indietro'/>
+ <cd:variable name='bbl' value='bbl'/>
<cd:variable name='before' value='prima'/>
+ <cd:variable name='begin' value='begin'/>
+ <cd:variable name='bib' value='bib'/>
<cd:variable name='big' value='grande'/>
<cd:variable name='bigbodyfont' value='grossofontdeltesto'/>
<cd:variable name='bigpreference' value='grandepreferenza'/>
@@ -111,6 +115,7 @@
<cd:variable name='chapter' value='capitolo'/>
<cd:variable name='character' value='lettera'/>
<cd:variable name='characters' value='lettere'/>
+ <cd:variable name='cite' value='cite'/>
<cd:variable name='color' value='colore'/>
<cd:variable name='column' value='colonna'/>
<cd:variable name='columns' value='colonne'/>
@@ -136,9 +141,11 @@
<cd:variable name='display' value='schermo'/>
<cd:variable name='dot' value='punto'/>
<cd:variable name='doublesided' value='doppiafaccia'/>
+ <cd:variable name='down' value='down'/>
<cd:variable name='each' value='ogni'/>
<cd:variable name='edge' value='bordo'/>
<cd:variable name='empty' value='vuoto'/>
+ <cd:variable name='end' value='end'/>
<cd:variable name='endnote' value='endnote'/>
<cd:variable name='enumeration' value='enumerazione'/>
<cd:variable name='environment' value='ambiente'/>
@@ -268,11 +275,15 @@
<cd:variable name='mathcases' value='mathcases'/>
<cd:variable name='mathmatrix' value='mathmatrix'/>
<cd:variable name='max' value='max'/>
+ <cd:variable name='maxdepth' value='maxdepth'/>
+ <cd:variable name='maxheight' value='maxheight'/>
+ <cd:variable name='maxwidth' value='maxwidth'/>
<cd:variable name='may' value='maggio'/>
<cd:variable name='mediaeval' value='medievale'/>
<cd:variable name='medium' value='medio'/>
<cd:variable name='middle' value='centro'/>
<cd:variable name='min' value='min'/>
+ <cd:variable name='mindepth' value='mindepth'/>
<cd:variable name='minheight' value='altezzamin'/>
<cd:variable name='minwidth' value='ampiezzamin'/>
<cd:variable name='mirrored' value='riflesso'/>
@@ -320,8 +331,12 @@
<cd:variable name='outer' value='esterno'/>
<cd:variable name='outeredge' value='bordoesterno'/>
<cd:variable name='outermargin' value='margineesterno'/>
+ <cd:variable name='overbar' value='sopralinea'/>
+ <cd:variable name='overbars' value='sopralinee'/>
<cd:variable name='overlay' value='sovrapponi'/>
<cd:variable name='overprint' value='overprint'/>
+ <cd:variable name='overstrike' value='sbarrato'/>
+ <cd:variable name='overstrikes' value='sbarrati'/>
<cd:variable name='packed' value='impaccato'/>
<cd:variable name='page' value='pagina'/>
<cd:variable name='pagecomment' value='commentopagina'/>
@@ -389,6 +404,7 @@
<cd:variable name='serried' value='vicino'/>
<cd:variable name='setups' value='nastaveni'/>
<cd:variable name='sheet' value='sheet'/>
+ <cd:variable name='short' value='short'/>
<cd:variable name='singlesided' value='facciasingola'/>
<cd:variable name='slanted' value='inclinato'/>
<cd:variable name='slantedbold' value='inclinatograssetto'/>
@@ -413,6 +429,7 @@
<cd:variable name='spot' value='spot'/>
<cd:variable name='standard' value='standard'/>
<cd:variable name='start' value='inizia'/>
+ <cd:variable name='starter' value='starter'/>
<cd:variable name='sticker' value='sticker'/>
<cd:variable name='stop' value='termina'/>
<cd:variable name='stopper' value='stopper'/>
@@ -474,10 +491,13 @@
<cd:variable name='type' value='type'/>
<cd:variable name='typing' value='typing'/>
<cd:variable name='unavailable' value='nondisponibile'/>
+ <cd:variable name='underbar' value='sottolinea'/>
+ <cd:variable name='underbars' value='sottolinee'/>
<cd:variable name='unit' value='unita'/>
<cd:variable name='units' value='unita'/>
<cd:variable name='unknown' value='ignoto'/>
<cd:variable name='unpacked' value='unpacked'/>
+ <cd:variable name='up' value='up'/>
<cd:variable name='url' value='url'/>
<cd:variable name='used' value='usato'/>
<cd:variable name='value' value='valore'/>
@@ -508,12 +528,21 @@
<cd:constant name='align' value='allinea'/>
<cd:constant name='aligncharacter' value='allineacarattere'/>
<cd:constant name='alignmentcharacter' value='carattereallineamento'/>
+ <cd:constant name='alignsymbol' value='alignsymbol'/>
<cd:constant name='aligntitle' value='allineatitolo'/>
<cd:constant name='alternative' value='alternativa'/>
+ <cd:constant name='andtext' value='andtext'/>
<cd:constant name='apa' value='apa'/>
<cd:constant name='arrow' value='freccia'/>
+ <cd:constant name='artauthor' value='artauthor'/>
+ <cd:constant name='artauthoretaldisplay' value='artauthoretaldisplay'/>
+ <cd:constant name='artauthoretallimit' value='artauthoretallimit'/>
+ <cd:constant name='artauthoretaltext' value='artauthoretaltext'/>
<cd:constant name='at' value='ad'/>
<cd:constant name='author' value='autore'/>
+ <cd:constant name='authoretaldisplay' value='authoretaldisplay'/>
+ <cd:constant name='authoretallimit' value='authoretallimit'/>
+ <cd:constant name='authoretaltext' value='authoretaltext'/>
<cd:constant name='auto' value='auto'/>
<cd:constant name='autofile' value='autofile'/>
<cd:constant name='autofocus' value='autofocus'/>
@@ -582,6 +611,7 @@
<cd:constant name='cutspace' value='cutspace'/>
<cd:constant name='dash' value='dash'/>
<cd:constant name='dat' value='dat'/>
+ <cd:constant name='database' value='database'/>
<cd:constant name='date' value='data'/>
<cd:constant name='deepnumbercommand' value='deepnumbercommand'/>
<cd:constant name='deeptextcommand' value='deeptextcommand'/>
@@ -600,12 +630,17 @@
<cd:constant name='dy' value='dy'/>
<cd:constant name='edge' value='bordo'/>
<cd:constant name='edgedistance' value='distanzabordo'/>
+ <cd:constant name='editor' value='editor'/>
+ <cd:constant name='editoretaldisplay' value='editoretaldisplay'/>
+ <cd:constant name='editoretallimit' value='editoretallimit'/>
+ <cd:constant name='editoretaltext' value='editoretaltext'/>
<cd:constant name='empty' value='vuoto'/>
<cd:constant name='equalheight' value='equalheight'/>
<cd:constant name='equalwidth' value='equalwidth'/>
<cd:constant name='escape' value='escape'/>
<cd:constant name='evenmargin' value='marginepari'/>
<cd:constant name='expansion' value='espansione'/>
+ <cd:constant name='export' value='export'/>
<cd:constant name='extras' value='extras'/>
<cd:constant name='factor' value='fattore'/>
<cd:constant name='fallback' value='fallback'/>
@@ -616,6 +651,8 @@
<cd:constant name='fieldoffset' value='offsetcampo'/>
<cd:constant name='file' value='file'/>
<cd:constant name='filtercommand' value='filtercommand'/>
+ <cd:constant name='finalnamesep' value='finalnamesep'/>
+ <cd:constant name='firstnamesep' value='firstnamesep'/>
<cd:constant name='focus' value='focus'/>
<cd:constant name='focusin' value='focusin'/>
<cd:constant name='focusout' value='focusout'/>
@@ -637,6 +674,7 @@
<cd:constant name='global' value='globale'/>
<cd:constant name='grid' value='griglia'/>
<cd:constant name='hang' value='sospendi'/>
+ <cd:constant name='headalign' value='headalign'/>
<cd:constant name='headcolor' value='coloretesta'/>
<cd:constant name='headcommand' value='headcommand'/>
<cd:constant name='headconversion' value='conversionetesta'/>
@@ -664,14 +702,18 @@
<cd:constant name='inner' value='interno'/>
<cd:constant name='innermargin' value='margineinterno'/>
<cd:constant name='inputfile' value='inputfile'/>
+ <cd:constant name='intent' value='intent'/>
<cd:constant name='interaction' value='interazione'/>
<cd:constant name='interlinespace' value='interlinea'/>
<cd:constant name='itemalign' value='itemalign'/>
<cd:constant name='items' value='elementi'/>
+ <cd:constant name='juniorsep' value='juniorsep'/>
<cd:constant name='ken' value='ken'/>
<cd:constant name='keyexpansion' value='keyexpansion'/>
<cd:constant name='keyword' value='parolachiave'/>
<cd:constant name='label' value='etichetta'/>
+ <cd:constant name='lastnamesep' value='lastnamesep'/>
+ <cd:constant name='lastpubsep' value='lastpubsep'/>
<cd:constant name='left' value='sinistra'/>
<cd:constant name='leftcolor' value='coloresinistra'/>
<cd:constant name='leftcompoundhyphen' value='leftcompoundhyphen'/>
@@ -711,8 +753,10 @@
<cd:constant name='marking' value='marcatura'/>
<cd:constant name='marstyle' value='stilemarcatura'/>
<cd:constant name='max' value='max'/>
+ <cd:constant name='maxdepth' value='maxdepth'/>
<cd:constant name='maxheight' value='altezzamax'/>
<cd:constant name='maxwidth' value='ampiezzamax'/>
+ <cd:constant name='maybeyear' value='maybeyear'/>
<cd:constant name='menu' value='menu'/>
<cd:constant name='method' value='metodo'/>
<cd:constant name='middle' value='centro'/>
@@ -723,8 +767,10 @@
<cd:constant name='mindepth' value='mindeoth'/>
<cd:constant name='minheight' value='altezzamin'/>
<cd:constant name='minwidth' value='ampiezzamin'/>
+ <cd:constant name='monthconversion' value='monthconversion'/>
<cd:constant name='n' value='n'/>
<cd:constant name='name' value='nome'/>
+ <cd:constant name='namesep' value='namesep'/>
<cd:constant name='nbottom' value='nfondo'/>
<cd:constant name='nc' value='nc'/>
<cd:constant name='next' value='successivo'/>
@@ -748,6 +794,7 @@
<cd:constant name='numberseparator' value='separatorenumero'/>
<cd:constant name='numberseparatorset' value='numberseparatorset'/>
<cd:constant name='numberset' value='numberset'/>
+ <cd:constant name='numberstarter' value='numberstarter'/>
<cd:constant name='numberstopper' value='numberstopper'/>
<cd:constant name='numberstyle' value='stilenumero'/>
<cd:constant name='numberwidth' value='numberwidth'/>
@@ -760,7 +807,9 @@
<cd:constant name='openaction' value='azioneapri'/>
<cd:constant name='openpageaction' value='azioneapripagina'/>
<cd:constant name='option' value='opzione'/>
+ <cd:constant name='order' value='order'/>
<cd:constant name='orientation' value='orientation'/>
+ <cd:constant name='otherstext' value='otherstext'/>
<cd:constant name='outermargin' value='margineesterno'/>
<cd:constant name='overprint' value='overprint'/>
<cd:constant name='ownnumber' value='numeroproprio'/>
@@ -778,10 +827,12 @@
<cd:constant name='pageprefixsegments' value='pageprefixsegments'/>
<cd:constant name='pageprefixseparatorset' value='pageprefixseparatorset'/>
<cd:constant name='pageprefixset' value='pageprefixset'/>
+ <cd:constant name='pageprefixstarter' value='pageprefixstarter'/>
<cd:constant name='pageprefixstopper' value='pageprefixstopper'/>
<cd:constant name='pagesegments' value='pagesegments'/>
<cd:constant name='pageseparatorset' value='pageseparatorset'/>
<cd:constant name='pageset' value='pageset'/>
+ <cd:constant name='pagestarter' value='pagestarter'/>
<cd:constant name='pagestate' value='statopagina'/>
<cd:constant name='pagestopper' value='pagestopper'/>
<cd:constant name='pagestyle' value='stilepagina'/>
@@ -799,16 +850,20 @@
<cd:constant name='prefixsegments' value='prefixsegments'/>
<cd:constant name='prefixseparatorset' value='prefixseparatorset'/>
<cd:constant name='prefixset' value='prefixset'/>
+ <cd:constant name='prefixstarter' value='prefixstarter'/>
<cd:constant name='prefixstopper' value='prefixstopper'/>
<cd:constant name='preset' value='preimpostato'/>
<cd:constant name='preview' value='anteprima'/>
<cd:constant name='previous' value='precedente'/>
<cd:constant name='previousnumber' value='numeroprecedente'/>
<cd:constant name='process' value='process'/>
+ <cd:constant name='pubsep' value='pubsep'/>
<cd:constant name='radius' value='raggio'/>
<cd:constant name='random' value='casuale'/>
+ <cd:constant name='range' value='range'/>
<cd:constant name='reduction' value='riduzione'/>
<cd:constant name='ref' value='ref'/>
+ <cd:constant name='refcommand' value='refcommand'/>
<cd:constant name='reference' value='riferimento'/>
<cd:constant name='referenceprefix' value='referenceprefix'/>
<cd:constant name='referencing' value='referencing'/>
@@ -842,6 +897,7 @@
<cd:constant name='rulethickness' value='spessorelinea'/>
<cd:constant name='samepage' value='stessapagina'/>
<cd:constant name='sample' value='campione'/>
+ <cd:constant name='samplesize' value='samplesize'/>
<cd:constant name='saveinlist' value='saveinlist'/>
<cd:constant name='scale' value='scala'/>
<cd:constant name='scope' value='scope'/>
@@ -854,6 +910,7 @@
<cd:constant name='sectionsegments' value='sectionsegments'/>
<cd:constant name='sectionseparatorset' value='sectionseparatorset'/>
<cd:constant name='sectionset' value='sectionset'/>
+ <cd:constant name='sectionstarter' value='sectionstarter'/>
<cd:constant name='sectionstopper' value='sectionstopper'/>
<cd:constant name='separator' value='separatore'/>
<cd:constant name='set' value='set'/>
@@ -866,6 +923,7 @@
<cd:constant name='sign' value='segno'/>
<cd:constant name='size' value='dimensione'/>
<cd:constant name='small' value='piccolo'/>
+ <cd:constant name='sort' value='sort'/>
<cd:constant name='sorttype' value='sorttype'/>
<cd:constant name='source' value='origine'/>
<cd:constant name='space' value='spazio'/>
@@ -880,16 +938,19 @@
<cd:constant name='spot' value='spot'/>
<cd:constant name='stack' value='stack'/>
<cd:constant name='start' value='inizia'/>
+ <cd:constant name='starter' value='starter'/>
<cd:constant name='state' value='stato'/>
<cd:constant name='step' value='passo'/>
<cd:constant name='stop' value='termina'/>
<cd:constant name='stopper' value='stopper'/>
<cd:constant name='stretch' value='dilata'/>
+ <cd:constant name='strip' value='strip'/>
<cd:constant name='strut' value='strut'/>
<cd:constant name='style' value='stile'/>
<cd:constant name='sub' value='sotto'/>
<cd:constant name='subtitle' value='sottotitolo'/>
<cd:constant name='suffix' value='suffix'/>
+ <cd:constant name='surnamesep' value='surnamesep'/>
<cd:constant name='sx' value='sx'/>
<cd:constant name='sy' value='sy'/>
<cd:constant name='symalign' value='symallinea'/>
@@ -929,6 +990,7 @@
<cd:constant name='topoffset' value='offsetcima'/>
<cd:constant name='topspace' value='spaziocima'/>
<cd:constant name='topstate' value='statocima'/>
+ <cd:constant name='totalnumber' value='totalnumber'/>
<cd:constant name='type' value='type'/>
<cd:constant name='unit' value='unita'/>
<cd:constant name='unknownreference' value='riferimentoingoto'/>
@@ -939,6 +1001,7 @@
<cd:constant name='veroffset' value='veroffset'/>
<cd:constant name='vfil' value='vfil'/>
<cd:constant name='voffset' value='voffset'/>
+ <cd:constant name='vonsep' value='vonsep'/>
<cd:constant name='way' value='modo'/>
<cd:constant name='wfactor' value='wfactor'/>
<cd:constant name='white' value='bianco'/>
@@ -1273,10 +1336,6 @@
<cd:command name='outeredgewidth' value='outeredgewidth'/>
<cd:command name='outermargindistance' value='outermargindistance'/>
<cd:command name='outermarginwidth' value='outermarginwidth'/>
- <cd:command name='overbar' value='sopralinea'/>
- <cd:command name='overbars' value='sopralinee'/>
- <cd:command name='overstrike' value='sbarrato'/>
- <cd:command name='overstrikes' value='sbarrati'/>
<cd:command name='packed' value='impaccato'/>
<cd:command name='page' value='pagina'/>
<cd:command name='pagedepth' value='pagedepth'/>
@@ -1611,8 +1670,6 @@
<cd:command name='type' value='type'/>
<cd:command name='typebuffer' value='typebuffer'/>
<cd:command name='typefile' value='typefile'/>
- <cd:command name='underbar' value='sottolinea'/>
- <cd:command name='underbars' value='sottolinee'/>
<cd:command name='unitmeaning' value='nomeunita'/>
<cd:command name='unknown' value='ignoto'/>
<cd:command name='useJSscripts' value='usaJSscripts'/>
diff --git a/Master/texmf-dist/tex/context/interface/keys-nl.xml b/Master/texmf-dist/tex/context/interface/keys-nl.xml
index 9bb953e9bfa..d9eb3341011 100644
--- a/Master/texmf-dist/tex/context/interface/keys-nl.xml
+++ b/Master/texmf-dist/tex/context/interface/keys-nl.xml
@@ -78,6 +78,7 @@
<cd:variable name='atmargin' value='opmarge'/>
<cd:variable name='atpage' value='oppagina'/>
<cd:variable name='august' value='augustus'/>
+ <cd:variable name='author' value='auteur'/>
<cd:variable name='auto' value='auto'/>
<cd:variable name='autointro' value='autointro'/>
<cd:variable name='back' value='terug'/>
@@ -86,7 +87,10 @@
<cd:variable name='backpart' value='uitleiding'/>
<cd:variable name='backspace' value='rugwit'/>
<cd:variable name='backward' value='achteruit'/>
+ <cd:variable name='bbl' value='bbl'/>
<cd:variable name='before' value='voor'/>
+ <cd:variable name='begin' value='begin'/>
+ <cd:variable name='bib' value='bib'/>
<cd:variable name='big' value='groot'/>
<cd:variable name='bigbodyfont' value='grootkorps'/>
<cd:variable name='bigpreference' value='grotevoorkeur'/>
@@ -111,6 +115,7 @@
<cd:variable name='chapter' value='hoofdstuk'/>
<cd:variable name='character' value='letter'/>
<cd:variable name='characters' value='letters'/>
+ <cd:variable name='cite' value='cite'/>
<cd:variable name='color' value='kleur'/>
<cd:variable name='column' value='kolom'/>
<cd:variable name='columns' value='kolommen'/>
@@ -136,9 +141,11 @@
<cd:variable name='display' value='scherm'/>
<cd:variable name='dot' value='punt'/>
<cd:variable name='doublesided' value='dubbelzijdig'/>
+ <cd:variable name='down' value='omlaag'/>
<cd:variable name='each' value='elk'/>
<cd:variable name='edge' value='rand'/>
<cd:variable name='empty' value='leeg'/>
+ <cd:variable name='end' value='eind'/>
<cd:variable name='endnote' value='eindnoot'/>
<cd:variable name='enumeration' value='doornummering'/>
<cd:variable name='environment' value='omgeving'/>
@@ -268,11 +275,15 @@
<cd:variable name='mathcases' value='mathcases'/>
<cd:variable name='mathmatrix' value='wiskundematrix'/>
<cd:variable name='max' value='max'/>
+ <cd:variable name='maxdepth' value='maxdepth'/>
+ <cd:variable name='maxheight' value='maxheight'/>
+ <cd:variable name='maxwidth' value='maxwidth'/>
<cd:variable name='may' value='mei'/>
<cd:variable name='mediaeval' value='mediaeval'/>
<cd:variable name='medium' value='middel'/>
<cd:variable name='middle' value='midden'/>
<cd:variable name='min' value='min'/>
+ <cd:variable name='mindepth' value='mindepth'/>
<cd:variable name='minheight' value='minhoogte'/>
<cd:variable name='minwidth' value='minbreedte'/>
<cd:variable name='mirrored' value='gespiegeld'/>
@@ -320,8 +331,12 @@
<cd:variable name='outer' value='buiten'/>
<cd:variable name='outeredge' value='buitenrand'/>
<cd:variable name='outermargin' value='buitenmarge'/>
+ <cd:variable name='overbar' value='overstreep'/>
+ <cd:variable name='overbars' value='overstrepen'/>
<cd:variable name='overlay' value='overlay'/>
<cd:variable name='overprint' value='overprint'/>
+ <cd:variable name='overstrike' value='doorstreep'/>
+ <cd:variable name='overstrikes' value='doorstrepen'/>
<cd:variable name='packed' value='opelkaar'/>
<cd:variable name='page' value='pagina'/>
<cd:variable name='pagecomment' value='paginacommentaar'/>
@@ -389,6 +404,7 @@
<cd:variable name='serried' value='aanelkaar'/>
<cd:variable name='setups' value='instellingen'/>
<cd:variable name='sheet' value='sheet'/>
+ <cd:variable name='short' value='kort'/>
<cd:variable name='singlesided' value='enkelzijdig'/>
<cd:variable name='slanted' value='schuin'/>
<cd:variable name='slantedbold' value='schuinvet'/>
@@ -413,12 +429,13 @@
<cd:variable name='spot' value='spot'/>
<cd:variable name='standard' value='standaard'/>
<cd:variable name='start' value='start'/>
+ <cd:variable name='starter' value='opener'/>
<cd:variable name='sticker' value='sticker'/>
<cd:variable name='stop' value='stop'/>
<cd:variable name='stopper' value='afsluiter'/>
<cd:variable name='stretch' value='rek'/>
<cd:variable name='strict' value='streng'/>
- <cd:variable name='strong' value='strong'/>
+ <cd:variable name='strong' value='sterk'/>
<cd:variable name='strut' value='strut'/>
<cd:variable name='sub' value='sub'/>
<cd:variable name='subbackward' value='subachteruit'/>
@@ -474,10 +491,13 @@
<cd:variable name='type' value='type'/>
<cd:variable name='typing' value='typen'/>
<cd:variable name='unavailable' value='nietbeschikbaar'/>
+ <cd:variable name='underbar' value='onderstreep'/>
+ <cd:variable name='underbars' value='onderstrepen'/>
<cd:variable name='unit' value='eenheid'/>
<cd:variable name='units' value='eenheden'/>
<cd:variable name='unknown' value='onbekend'/>
<cd:variable name='unpacked' value='vanelkaar'/>
+ <cd:variable name='up' value='omhoog'/>
<cd:variable name='url' value='url'/>
<cd:variable name='used' value='gebruikt'/>
<cd:variable name='value' value='waarde'/>
@@ -485,7 +505,7 @@
<cd:variable name='very' value='zeer'/>
<cd:variable name='verystrict' value='zeerstreng'/>
<cd:variable name='verytolerant' value='zeersoepel'/>
- <cd:variable name='weak' value='weak'/>
+ <cd:variable name='weak' value='zwak'/>
<cd:variable name='wednesday' value='woensdag'/>
<cd:variable name='week' value='week'/>
<cd:variable name='weekday' value='weekdag'/>
@@ -508,12 +528,21 @@
<cd:constant name='align' value='uitlijnen'/>
<cd:constant name='aligncharacter' value='karakteruitlijnen'/>
<cd:constant name='alignmentcharacter' value='uitlijnkarakter'/>
+ <cd:constant name='alignsymbol' value='alignsymbol'/>
<cd:constant name='aligntitle' value='titeluitlijnen'/>
<cd:constant name='alternative' value='variant'/>
+ <cd:constant name='andtext' value='andtext'/>
<cd:constant name='apa' value='apa'/>
<cd:constant name='arrow' value='pijl'/>
+ <cd:constant name='artauthor' value='artauthor'/>
+ <cd:constant name='artauthoretaldisplay' value='artauthoretaldisplay'/>
+ <cd:constant name='artauthoretallimit' value='artauthoretallimit'/>
+ <cd:constant name='artauthoretaltext' value='artauthoretaltext'/>
<cd:constant name='at' value='op'/>
<cd:constant name='author' value='auteur'/>
+ <cd:constant name='authoretaldisplay' value='authoretaldisplay'/>
+ <cd:constant name='authoretallimit' value='authoretallimit'/>
+ <cd:constant name='authoretaltext' value='authoretaltext'/>
<cd:constant name='auto' value='auto'/>
<cd:constant name='autofile' value='autofile'/>
<cd:constant name='autofocus' value='autofocus'/>
@@ -582,6 +611,7 @@
<cd:constant name='cutspace' value='snijwit'/>
<cd:constant name='dash' value='streep'/>
<cd:constant name='dat' value='dat'/>
+ <cd:constant name='database' value='database'/>
<cd:constant name='date' value='datum'/>
<cd:constant name='deepnumbercommand' value='diepnummercommando'/>
<cd:constant name='deeptextcommand' value='dieptekstcommando'/>
@@ -600,12 +630,17 @@
<cd:constant name='dy' value='dy'/>
<cd:constant name='edge' value='rand'/>
<cd:constant name='edgedistance' value='randafstand'/>
+ <cd:constant name='editor' value='editor'/>
+ <cd:constant name='editoretaldisplay' value='editoretaldisplay'/>
+ <cd:constant name='editoretallimit' value='editoretallimit'/>
+ <cd:constant name='editoretaltext' value='editoretaltext'/>
<cd:constant name='empty' value='leeg'/>
<cd:constant name='equalheight' value='equalheight'/>
<cd:constant name='equalwidth' value='equalwidth'/>
<cd:constant name='escape' value='escape'/>
<cd:constant name='evenmargin' value='evenmarge'/>
<cd:constant name='expansion' value='expansie'/>
+ <cd:constant name='export' value='exporteer'/>
<cd:constant name='extras' value='extras'/>
<cd:constant name='factor' value='factor'/>
<cd:constant name='fallback' value='terugval'/>
@@ -616,6 +651,8 @@
<cd:constant name='fieldoffset' value='veldoffset'/>
<cd:constant name='file' value='file'/>
<cd:constant name='filtercommand' value='filtercommand'/>
+ <cd:constant name='finalnamesep' value='finalnamesep'/>
+ <cd:constant name='firstnamesep' value='firstnamesep'/>
<cd:constant name='focus' value='focus'/>
<cd:constant name='focusin' value='focusin'/>
<cd:constant name='focusout' value='focusuit'/>
@@ -637,6 +674,7 @@
<cd:constant name='global' value='globaal'/>
<cd:constant name='grid' value='grid'/>
<cd:constant name='hang' value='hang'/>
+ <cd:constant name='headalign' value='kopuitlijnen'/>
<cd:constant name='headcolor' value='kopkleur'/>
<cd:constant name='headcommand' value='kopcommando'/>
<cd:constant name='headconversion' value='kopconversie'/>
@@ -664,14 +702,18 @@
<cd:constant name='inner' value='binnen'/>
<cd:constant name='innermargin' value='binnenmarge'/>
<cd:constant name='inputfile' value='inputfile'/>
+ <cd:constant name='intent' value='intent'/>
<cd:constant name='interaction' value='interactie'/>
<cd:constant name='interlinespace' value='interlinie'/>
<cd:constant name='itemalign' value='itemuitlijnen'/>
<cd:constant name='items' value='items'/>
+ <cd:constant name='juniorsep' value='juniorsep'/>
<cd:constant name='ken' value='ken'/>
<cd:constant name='keyexpansion' value='sleutelexpansie'/>
<cd:constant name='keyword' value='trefwoord'/>
<cd:constant name='label' value='label'/>
+ <cd:constant name='lastnamesep' value='lastnamesep'/>
+ <cd:constant name='lastpubsep' value='lastpubsep'/>
<cd:constant name='left' value='links'/>
<cd:constant name='leftcolor' value='linkerkleur'/>
<cd:constant name='leftcompoundhyphen' value='linkerkoppelteken'/>
@@ -711,8 +753,10 @@
<cd:constant name='marking' value='markering'/>
<cd:constant name='marstyle' value='marletter'/>
<cd:constant name='max' value='max'/>
+ <cd:constant name='maxdepth' value='maxdepth'/>
<cd:constant name='maxheight' value='maxhoogte'/>
<cd:constant name='maxwidth' value='maxbreedte'/>
+ <cd:constant name='maybeyear' value='maybeyear'/>
<cd:constant name='menu' value='menu'/>
<cd:constant name='method' value='methode'/>
<cd:constant name='middle' value='midden'/>
@@ -723,8 +767,10 @@
<cd:constant name='mindepth' value='mindiepte'/>
<cd:constant name='minheight' value='minhoogte'/>
<cd:constant name='minwidth' value='minbreedte'/>
+ <cd:constant name='monthconversion' value='maandconversie'/>
<cd:constant name='n' value='n'/>
<cd:constant name='name' value='naam'/>
+ <cd:constant name='namesep' value='namesep'/>
<cd:constant name='nbottom' value='nonder'/>
<cd:constant name='nc' value='nc'/>
<cd:constant name='next' value='volgende'/>
@@ -748,6 +794,7 @@
<cd:constant name='numberseparator' value='nummerscheider'/>
<cd:constant name='numberseparatorset' value='numberseparatorset'/>
<cd:constant name='numberset' value='numberset'/>
+ <cd:constant name='numberstarter' value='numberstarter'/>
<cd:constant name='numberstopper' value='numberstopper'/>
<cd:constant name='numberstyle' value='nummerletter'/>
<cd:constant name='numberwidth' value='nummerbreedte'/>
@@ -760,7 +807,9 @@
<cd:constant name='openaction' value='openactie'/>
<cd:constant name='openpageaction' value='openpaginaactie'/>
<cd:constant name='option' value='optie'/>
+ <cd:constant name='order' value='order'/>
<cd:constant name='orientation' value='orientatie'/>
+ <cd:constant name='otherstext' value='otherstext'/>
<cd:constant name='outermargin' value='buitenmarge'/>
<cd:constant name='overprint' value='overprint'/>
<cd:constant name='ownnumber' value='eigennummer'/>
@@ -778,10 +827,12 @@
<cd:constant name='pageprefixsegments' value='pageprefixsegments'/>
<cd:constant name='pageprefixseparatorset' value='pageprefixseparatorset'/>
<cd:constant name='pageprefixset' value='pageprefixset'/>
+ <cd:constant name='pageprefixstarter' value='pageprefixstarter'/>
<cd:constant name='pageprefixstopper' value='pageprefixstopper'/>
<cd:constant name='pagesegments' value='pagesegments'/>
<cd:constant name='pageseparatorset' value='pageseparatorset'/>
<cd:constant name='pageset' value='pageset'/>
+ <cd:constant name='pagestarter' value='pagestarter'/>
<cd:constant name='pagestate' value='paginastatus'/>
<cd:constant name='pagestopper' value='pagestopper'/>
<cd:constant name='pagestyle' value='paginaletter'/>
@@ -799,16 +850,20 @@
<cd:constant name='prefixsegments' value='prefixsegments'/>
<cd:constant name='prefixseparatorset' value='prefixseparatorset'/>
<cd:constant name='prefixset' value='prefixset'/>
+ <cd:constant name='prefixstarter' value='prefixstarter'/>
<cd:constant name='prefixstopper' value='prefixstopper'/>
<cd:constant name='preset' value='preset'/>
<cd:constant name='preview' value='preview'/>
<cd:constant name='previous' value='vorige'/>
<cd:constant name='previousnumber' value='vorigenummer'/>
<cd:constant name='process' value='proces'/>
+ <cd:constant name='pubsep' value='pubsep'/>
<cd:constant name='radius' value='straal'/>
<cd:constant name='random' value='willekeur'/>
+ <cd:constant name='range' value='bereik'/>
<cd:constant name='reduction' value='reductie'/>
<cd:constant name='ref' value='ref'/>
+ <cd:constant name='refcommand' value='refcommand'/>
<cd:constant name='reference' value='verwijzing'/>
<cd:constant name='referenceprefix' value='referenceprefix'/>
<cd:constant name='referencing' value='refereren'/>
@@ -842,6 +897,7 @@
<cd:constant name='rulethickness' value='lijndikte'/>
<cd:constant name='samepage' value='zelfdepagina'/>
<cd:constant name='sample' value='monster'/>
+ <cd:constant name='samplesize' value='samplesize'/>
<cd:constant name='saveinlist' value='saveinlist'/>
<cd:constant name='scale' value='schaal'/>
<cd:constant name='scope' value='scope'/>
@@ -854,6 +910,7 @@
<cd:constant name='sectionsegments' value='sectionsegments'/>
<cd:constant name='sectionseparatorset' value='sectionseparatorset'/>
<cd:constant name='sectionset' value='sectionset'/>
+ <cd:constant name='sectionstarter' value='sectionstarter'/>
<cd:constant name='sectionstopper' value='sectionstopper'/>
<cd:constant name='separator' value='scheider'/>
<cd:constant name='set' value='set'/>
@@ -866,6 +923,7 @@
<cd:constant name='sign' value='teken'/>
<cd:constant name='size' value='formaat'/>
<cd:constant name='small' value='klein'/>
+ <cd:constant name='sort' value='sort'/>
<cd:constant name='sorttype' value='sortering'/>
<cd:constant name='source' value='bron'/>
<cd:constant name='space' value='spatie'/>
@@ -880,16 +938,19 @@
<cd:constant name='spot' value='spot'/>
<cd:constant name='stack' value='stapel'/>
<cd:constant name='start' value='start'/>
+ <cd:constant name='starter' value='opener'/>
<cd:constant name='state' value='status'/>
<cd:constant name='step' value='stap'/>
<cd:constant name='stop' value='stop'/>
<cd:constant name='stopper' value='afsluiter'/>
<cd:constant name='stretch' value='rek'/>
+ <cd:constant name='strip' value='strip'/>
<cd:constant name='strut' value='strut'/>
<cd:constant name='style' value='letter'/>
<cd:constant name='sub' value='sub'/>
<cd:constant name='subtitle' value='subtitel'/>
<cd:constant name='suffix' value='suffix'/>
+ <cd:constant name='surnamesep' value='surnamesep'/>
<cd:constant name='sx' value='sx'/>
<cd:constant name='sy' value='sy'/>
<cd:constant name='symalign' value='symuitlijnen'/>
@@ -929,6 +990,7 @@
<cd:constant name='topoffset' value='bovenoffset'/>
<cd:constant name='topspace' value='kopwit'/>
<cd:constant name='topstate' value='bovenstatus'/>
+ <cd:constant name='totalnumber' value='totalnumber'/>
<cd:constant name='type' value='type'/>
<cd:constant name='unit' value='eenheid'/>
<cd:constant name='unknownreference' value='onbekendeverwijzing'/>
@@ -939,6 +1001,7 @@
<cd:constant name='veroffset' value='kopoffset'/>
<cd:constant name='vfil' value='vfil'/>
<cd:constant name='voffset' value='voffset'/>
+ <cd:constant name='vonsep' value='vonsep'/>
<cd:constant name='way' value='wijze'/>
<cd:constant name='wfactor' value='bfactor'/>
<cd:constant name='white' value='wit'/>
@@ -1273,10 +1336,6 @@
<cd:command name='outeredgewidth' value='buitenrandbreedte'/>
<cd:command name='outermargindistance' value='buitenmargeafstand'/>
<cd:command name='outermarginwidth' value='buitenmargebreedte'/>
- <cd:command name='overbar' value='overstreep'/>
- <cd:command name='overbars' value='overstrepen'/>
- <cd:command name='overstrike' value='doorstreep'/>
- <cd:command name='overstrikes' value='doorstrepen'/>
<cd:command name='packed' value='opelkaar'/>
<cd:command name='page' value='pagina'/>
<cd:command name='pagedepth' value='paginadiepte'/>
@@ -1611,8 +1670,6 @@
<cd:command name='type' value='type'/>
<cd:command name='typebuffer' value='typebuffer'/>
<cd:command name='typefile' value='typefile'/>
- <cd:command name='underbar' value='onderstreep'/>
- <cd:command name='underbars' value='onderstrepen'/>
<cd:command name='unitmeaning' value='betekenis'/>
<cd:command name='unknown' value='onbekend'/>
<cd:command name='useJSscripts' value='gebruikJSscripts'/>
diff --git a/Master/texmf-dist/tex/context/interface/keys-pe.xml b/Master/texmf-dist/tex/context/interface/keys-pe.xml
index 0086e5d13a4..2b0a3f25bfd 100644
--- a/Master/texmf-dist/tex/context/interface/keys-pe.xml
+++ b/Master/texmf-dist/tex/context/interface/keys-pe.xml
@@ -78,6 +78,7 @@
<cd:variable name='atmargin' value='درحاشیه'/>
<cd:variable name='atpage' value='درصفحه'/>
<cd:variable name='august' value='آگوست'/>
+ <cd:variable name='author' value='author'/>
<cd:variable name='auto' value='خودکار'/>
<cd:variable name='autointro' value='پیشگفتارخودکار'/>
<cd:variable name='back' value='پشت'/>
@@ -86,7 +87,10 @@
<cd:variable name='backpart' value='پس‌قسمت'/>
<cd:variable name='backspace' value='فضای‌پشت'/>
<cd:variable name='backward' value='عقب‌گرد'/>
+ <cd:variable name='bbl' value='bbl'/>
<cd:variable name='before' value='قبل‌از'/>
+ <cd:variable name='begin' value='begin'/>
+ <cd:variable name='bib' value='bib'/>
<cd:variable name='big' value='بزرگ'/>
<cd:variable name='bigbodyfont' value='قلم‌بدنه‌بزرگ'/>
<cd:variable name='bigpreference' value='اولویت‌بزرگ'/>
@@ -111,6 +115,7 @@
<cd:variable name='chapter' value='فصل'/>
<cd:variable name='character' value='حرف'/>
<cd:variable name='characters' value='حرفها'/>
+ <cd:variable name='cite' value='cite'/>
<cd:variable name='color' value='رنگ'/>
<cd:variable name='column' value='ستون'/>
<cd:variable name='columns' value='ستونها'/>
@@ -136,9 +141,11 @@
<cd:variable name='display' value='نمایش'/>
<cd:variable name='dot' value='نقطه'/>
<cd:variable name='doublesided' value='دورو'/>
+ <cd:variable name='down' value='down'/>
<cd:variable name='each' value='هر'/>
<cd:variable name='edge' value='لبه'/>
<cd:variable name='empty' value='تهی'/>
+ <cd:variable name='end' value='end'/>
<cd:variable name='endnote' value='ته‌نوشت'/>
<cd:variable name='enumeration' value='شماره‌بندی'/>
<cd:variable name='environment' value='محیط'/>
@@ -268,11 +275,15 @@
<cd:variable name='mathcases' value='حالتهای‌ریاضی'/>
<cd:variable name='mathmatrix' value='ماتریش‌ریاضی'/>
<cd:variable name='max' value='بیشترین'/>
+ <cd:variable name='maxdepth' value='maxdepth'/>
+ <cd:variable name='maxheight' value='maxheight'/>
+ <cd:variable name='maxwidth' value='maxwidth'/>
<cd:variable name='may' value='مه'/>
<cd:variable name='mediaeval' value='mediaeval'/>
<cd:variable name='medium' value='متوسط'/>
<cd:variable name='middle' value='میان'/>
<cd:variable name='min' value='کمترین'/>
+ <cd:variable name='mindepth' value='mindepth'/>
<cd:variable name='minheight' value='کمترین‌ارتفاع'/>
<cd:variable name='minwidth' value='کمترین‌عرض'/>
<cd:variable name='mirrored' value='منعکس'/>
@@ -320,8 +331,12 @@
<cd:variable name='outer' value='خارجی'/>
<cd:variable name='outeredge' value='لبه‌خارجی'/>
<cd:variable name='outermargin' value='حاشیه‌خارجی'/>
+ <cd:variable name='overbar' value='میله‌رو'/>
+ <cd:variable name='overbars' value='میله‌ها‌رو'/>
<cd:variable name='overlay' value='پوشش'/>
<cd:variable name='overprint' value='overprint'/>
+ <cd:variable name='overstrike' value='خط‌زدن'/>
+ <cd:variable name='overstrikes' value='خط‌زدنها'/>
<cd:variable name='packed' value='فشرده'/>
<cd:variable name='page' value='صفحه'/>
<cd:variable name='pagecomment' value='توضیح‌صفحه'/>
@@ -389,6 +404,7 @@
<cd:variable name='serried' value='تنگ‌هم'/>
<cd:variable name='setups' value='بارگذاریها'/>
<cd:variable name='sheet' value='ورقه'/>
+ <cd:variable name='short' value='short'/>
<cd:variable name='singlesided' value='یک‌رو'/>
<cd:variable name='slanted' value='خوابیده'/>
<cd:variable name='slantedbold' value='مشکی‌خوابیده'/>
@@ -413,6 +429,7 @@
<cd:variable name='spot' value='لکه'/>
<cd:variable name='standard' value='استاندارد'/>
<cd:variable name='start' value='شروع'/>
+ <cd:variable name='starter' value='starter'/>
<cd:variable name='sticker' value='دشنه'/>
<cd:variable name='stop' value='پایان'/>
<cd:variable name='stopper' value='ایست'/>
@@ -474,10 +491,13 @@
<cd:variable name='type' value='تایپ'/>
<cd:variable name='typing' value='تایپ‌کردن'/>
<cd:variable name='unavailable' value='غیرموجود'/>
+ <cd:variable name='underbar' value='میله‌زیر'/>
+ <cd:variable name='underbars' value='میله‌‌های‌زیر'/>
<cd:variable name='unit' value='واحد'/>
<cd:variable name='units' value='واحدها'/>
<cd:variable name='unknown' value='ناشناس'/>
<cd:variable name='unpacked' value='غیرفشرده'/>
+ <cd:variable name='up' value='up'/>
<cd:variable name='url' value='url'/>
<cd:variable name='used' value='استفاده‌شده'/>
<cd:variable name='value' value='مقدار'/>
@@ -508,12 +528,21 @@
<cd:constant name='align' value='تنظیم'/>
<cd:constant name='aligncharacter' value='حرف‌تنظیم'/>
<cd:constant name='alignmentcharacter' value='حرف‌تنظیم‌کردن'/>
+ <cd:constant name='alignsymbol' value='alignsymbol'/>
<cd:constant name='aligntitle' value='عنوان‌تنظیم'/>
<cd:constant name='alternative' value='جایگزین'/>
+ <cd:constant name='andtext' value='andtext'/>
<cd:constant name='apa' value='apa'/>
<cd:constant name='arrow' value='پیکان'/>
+ <cd:constant name='artauthor' value='artauthor'/>
+ <cd:constant name='artauthoretaldisplay' value='artauthoretaldisplay'/>
+ <cd:constant name='artauthoretallimit' value='artauthoretallimit'/>
+ <cd:constant name='artauthoretaltext' value='artauthoretaltext'/>
<cd:constant name='at' value='در'/>
<cd:constant name='author' value='نویسنده'/>
+ <cd:constant name='authoretaldisplay' value='authoretaldisplay'/>
+ <cd:constant name='authoretallimit' value='authoretallimit'/>
+ <cd:constant name='authoretaltext' value='authoretaltext'/>
<cd:constant name='auto' value='خودکار'/>
<cd:constant name='autofile' value='پرونده‌خودکار'/>
<cd:constant name='autofocus' value='تمرکز‌خودکار'/>
@@ -582,6 +611,7 @@
<cd:constant name='cutspace' value='فضای‌برش'/>
<cd:constant name='dash' value='دش'/>
<cd:constant name='dat' value='dat'/>
+ <cd:constant name='database' value='database'/>
<cd:constant name='date' value='تاریخ'/>
<cd:constant name='deepnumbercommand' value='فرمان‌شماره‌عمیق'/>
<cd:constant name='deeptextcommand' value='فرمان‌متن‌عمیق'/>
@@ -600,12 +630,17 @@
<cd:constant name='dy' value='dy'/>
<cd:constant name='edge' value='لبه'/>
<cd:constant name='edgedistance' value='فاصله‌لبه'/>
+ <cd:constant name='editor' value='editor'/>
+ <cd:constant name='editoretaldisplay' value='editoretaldisplay'/>
+ <cd:constant name='editoretallimit' value='editoretallimit'/>
+ <cd:constant name='editoretaltext' value='editoretaltext'/>
<cd:constant name='empty' value='تهی'/>
<cd:constant name='equalheight' value='ارتفاع‌یکسان'/>
<cd:constant name='equalwidth' value='عرض‌یکسان'/>
<cd:constant name='escape' value='فرار'/>
<cd:constant name='evenmargin' value='حاشیه‌زوج'/>
<cd:constant name='expansion' value='گسترش'/>
+ <cd:constant name='export' value='export'/>
<cd:constant name='extras' value='extras'/>
<cd:constant name='factor' value='عامل'/>
<cd:constant name='fallback' value='عقب‌ریختن'/>
@@ -616,6 +651,8 @@
<cd:constant name='fieldoffset' value='آفست‌میدان'/>
<cd:constant name='file' value='پرونده'/>
<cd:constant name='filtercommand' value='filtercommand'/>
+ <cd:constant name='finalnamesep' value='finalnamesep'/>
+ <cd:constant name='firstnamesep' value='firstnamesep'/>
<cd:constant name='focus' value='تمرکز'/>
<cd:constant name='focusin' value='تمرکزدرون'/>
<cd:constant name='focusout' value='تمرکزبیرون'/>
@@ -637,6 +674,7 @@
<cd:constant name='global' value='سراسری'/>
<cd:constant name='grid' value='توری'/>
<cd:constant name='hang' value='بیاویز'/>
+ <cd:constant name='headalign' value='headalign'/>
<cd:constant name='headcolor' value='رنگ‌سر'/>
<cd:constant name='headcommand' value='فرمان‌سر'/>
<cd:constant name='headconversion' value='تبدیل‌سر'/>
@@ -664,14 +702,18 @@
<cd:constant name='inner' value='داخلی'/>
<cd:constant name='innermargin' value='حاشیه‌داخلی'/>
<cd:constant name='inputfile' value='پرونده‌ورودی'/>
+ <cd:constant name='intent' value='intent'/>
<cd:constant name='interaction' value='پانل'/>
<cd:constant name='interlinespace' value='فضای‌بین‌خط'/>
<cd:constant name='itemalign' value='تنظیم‌آیتم'/>
<cd:constant name='items' value='آیتمها'/>
+ <cd:constant name='juniorsep' value='juniorsep'/>
<cd:constant name='ken' value='ken'/>
<cd:constant name='keyexpansion' value='گسترش‌کلید'/>
<cd:constant name='keyword' value='کلید‌واژه'/>
<cd:constant name='label' value='برچسب'/>
+ <cd:constant name='lastnamesep' value='lastnamesep'/>
+ <cd:constant name='lastpubsep' value='lastpubsep'/>
<cd:constant name='left' value='چپ'/>
<cd:constant name='leftcolor' value='رنگ‌چپ'/>
<cd:constant name='leftcompoundhyphen' value='leftcompoundhyphen'/>
@@ -711,8 +753,10 @@
<cd:constant name='marking' value='نشانه‌گذاری'/>
<cd:constant name='marstyle' value='سبک‌حاش'/>
<cd:constant name='max' value='بیشترین'/>
+ <cd:constant name='maxdepth' value='maxdepth'/>
<cd:constant name='maxheight' value='بیشترین‌ارتفاع'/>
<cd:constant name='maxwidth' value='بیشترین‌عرض'/>
+ <cd:constant name='maybeyear' value='maybeyear'/>
<cd:constant name='menu' value='منو'/>
<cd:constant name='method' value='روش'/>
<cd:constant name='middle' value='میان'/>
@@ -723,8 +767,10 @@
<cd:constant name='mindepth' value='کمترین‌عمق'/>
<cd:constant name='minheight' value='کمترین‌ارتفاع'/>
<cd:constant name='minwidth' value='کمترین‌عرض'/>
+ <cd:constant name='monthconversion' value='monthconversion'/>
<cd:constant name='n' value='n'/>
<cd:constant name='name' value='نام'/>
+ <cd:constant name='namesep' value='namesep'/>
<cd:constant name='nbottom' value='nbottom'/>
<cd:constant name='nc' value='nc'/>
<cd:constant name='next' value='بعدی'/>
@@ -748,6 +794,7 @@
<cd:constant name='numberseparator' value='جداکننده‌شماره'/>
<cd:constant name='numberseparatorset' value='numberseparatorset'/>
<cd:constant name='numberset' value='numberset'/>
+ <cd:constant name='numberstarter' value='numberstarter'/>
<cd:constant name='numberstopper' value='numberstopper'/>
<cd:constant name='numberstyle' value='سبک‌شماره'/>
<cd:constant name='numberwidth' value='عرض‌شماره'/>
@@ -760,7 +807,9 @@
<cd:constant name='openaction' value='عمل‌باز'/>
<cd:constant name='openpageaction' value='عمل‌صفحه‌باز'/>
<cd:constant name='option' value='گزینه'/>
+ <cd:constant name='order' value='order'/>
<cd:constant name='orientation' value='جهت‌دهی'/>
+ <cd:constant name='otherstext' value='otherstext'/>
<cd:constant name='outermargin' value='حاشیه‌خارجی'/>
<cd:constant name='overprint' value='overprint'/>
<cd:constant name='ownnumber' value='شماره‌خود'/>
@@ -778,10 +827,12 @@
<cd:constant name='pageprefixsegments' value='pageprefixsegments'/>
<cd:constant name='pageprefixseparatorset' value='pageprefixseparatorset'/>
<cd:constant name='pageprefixset' value='pageprefixset'/>
+ <cd:constant name='pageprefixstarter' value='pageprefixstarter'/>
<cd:constant name='pageprefixstopper' value='pageprefixstopper'/>
<cd:constant name='pagesegments' value='pagesegments'/>
<cd:constant name='pageseparatorset' value='pageseparatorset'/>
<cd:constant name='pageset' value='pageset'/>
+ <cd:constant name='pagestarter' value='pagestarter'/>
<cd:constant name='pagestate' value='وضعیت‌صفحه'/>
<cd:constant name='pagestopper' value='pagestopper'/>
<cd:constant name='pagestyle' value='سبک‌صفحه'/>
@@ -799,16 +850,20 @@
<cd:constant name='prefixsegments' value='prefixsegments'/>
<cd:constant name='prefixseparatorset' value='prefixseparatorset'/>
<cd:constant name='prefixset' value='prefixset'/>
+ <cd:constant name='prefixstarter' value='prefixstarter'/>
<cd:constant name='prefixstopper' value='prefixstopper'/>
<cd:constant name='preset' value='preset'/>
<cd:constant name='preview' value='پیش‌دید'/>
<cd:constant name='previous' value='قبلی'/>
<cd:constant name='previousnumber' value='شماره‌قبلی'/>
<cd:constant name='process' value='پردازش'/>
+ <cd:constant name='pubsep' value='pubsep'/>
<cd:constant name='radius' value='شعاع'/>
<cd:constant name='random' value='تصادفی'/>
+ <cd:constant name='range' value='range'/>
<cd:constant name='reduction' value='کاهش'/>
<cd:constant name='ref' value='رج'/>
+ <cd:constant name='refcommand' value='refcommand'/>
<cd:constant name='reference' value='مرجع'/>
<cd:constant name='referenceprefix' value='referenceprefix'/>
<cd:constant name='referencing' value='مراجعه'/>
@@ -842,6 +897,7 @@
<cd:constant name='rulethickness' value='ضخامت‌خط'/>
<cd:constant name='samepage' value='همان‌صفحه'/>
<cd:constant name='sample' value='نمونه'/>
+ <cd:constant name='samplesize' value='samplesize'/>
<cd:constant name='saveinlist' value='saveinlist'/>
<cd:constant name='scale' value='مقیاس'/>
<cd:constant name='scope' value='طرح'/>
@@ -854,6 +910,7 @@
<cd:constant name='sectionsegments' value='sectionsegments'/>
<cd:constant name='sectionseparatorset' value='sectionseparatorset'/>
<cd:constant name='sectionset' value='sectionset'/>
+ <cd:constant name='sectionstarter' value='sectionstarter'/>
<cd:constant name='sectionstopper' value='sectionstopper'/>
<cd:constant name='separator' value='جداکننده'/>
<cd:constant name='set' value='قراربده'/>
@@ -866,6 +923,7 @@
<cd:constant name='sign' value='علامت'/>
<cd:constant name='size' value='اندازه'/>
<cd:constant name='small' value='کوچک'/>
+ <cd:constant name='sort' value='sort'/>
<cd:constant name='sorttype' value='ترتیب‌تایپ'/>
<cd:constant name='source' value='منبع'/>
<cd:constant name='space' value='فضا'/>
@@ -880,16 +938,19 @@
<cd:constant name='spot' value='لکه'/>
<cd:constant name='stack' value='توده'/>
<cd:constant name='start' value='شروع'/>
+ <cd:constant name='starter' value='starter'/>
<cd:constant name='state' value='وضعیت'/>
<cd:constant name='step' value='گام'/>
<cd:constant name='stop' value='پایان'/>
<cd:constant name='stopper' value='ایست'/>
<cd:constant name='stretch' value='کشیدن'/>
+ <cd:constant name='strip' value='strip'/>
<cd:constant name='strut' value='بست'/>
<cd:constant name='style' value='سبک'/>
<cd:constant name='sub' value='زیر'/>
<cd:constant name='subtitle' value='زیرعنوان'/>
<cd:constant name='suffix' value='پسوند'/>
+ <cd:constant name='surnamesep' value='surnamesep'/>
<cd:constant name='sx' value='sx'/>
<cd:constant name='sy' value='sy'/>
<cd:constant name='symalign' value='تنظیم‌نماد'/>
@@ -929,6 +990,7 @@
<cd:constant name='topoffset' value='آفست‌بالا'/>
<cd:constant name='topspace' value='فضای‌بالا'/>
<cd:constant name='topstate' value='وضعیت‌بالا'/>
+ <cd:constant name='totalnumber' value='totalnumber'/>
<cd:constant name='type' value='تایپ'/>
<cd:constant name='unit' value='واحد'/>
<cd:constant name='unknownreference' value='مرجع‌ناشناس'/>
@@ -939,6 +1001,7 @@
<cd:constant name='veroffset' value='آفست‌عم'/>
<cd:constant name='vfil' value='vfil'/>
<cd:constant name='voffset' value='آفست‌ع'/>
+ <cd:constant name='vonsep' value='vonsep'/>
<cd:constant name='way' value='راه'/>
<cd:constant name='wfactor' value='wfactor'/>
<cd:constant name='white' value='سفید'/>
@@ -1273,10 +1336,6 @@
<cd:command name='outeredgewidth' value='عرض‌لبه‌خارجی'/>
<cd:command name='outermargindistance' value='فاصله‌حاشیه‌خارجی'/>
<cd:command name='outermarginwidth' value='عرض‌حاشیه‌خارجی'/>
- <cd:command name='overbar' value='میله‌رو'/>
- <cd:command name='overbars' value='میله‌ها‌رو'/>
- <cd:command name='overstrike' value='خط‌زدن'/>
- <cd:command name='overstrikes' value='خط‌زدنها'/>
<cd:command name='packed' value='فشرده'/>
<cd:command name='page' value='صفحه'/>
<cd:command name='pagedepth' value='عمق‌صفحه'/>
@@ -1611,8 +1670,6 @@
<cd:command name='type' value='تایپ'/>
<cd:command name='typebuffer' value='تایپ‌بافر'/>
<cd:command name='typefile' value='تایپ‌پرونده'/>
- <cd:command name='underbar' value='میله‌زیر'/>
- <cd:command name='underbars' value='میله‌‌های‌زیر'/>
<cd:command name='unitmeaning' value='معنی‌واحد'/>
<cd:command name='unknown' value='ناشناس'/>
<cd:command name='useJSscripts' value='useJSscripts'/>
diff --git a/Master/texmf-dist/tex/context/interface/keys-ro.xml b/Master/texmf-dist/tex/context/interface/keys-ro.xml
index 964c8a71414..46f2ecd1e86 100644
--- a/Master/texmf-dist/tex/context/interface/keys-ro.xml
+++ b/Master/texmf-dist/tex/context/interface/keys-ro.xml
@@ -78,6 +78,7 @@
<cd:variable name='atmargin' value='lamargine'/>
<cd:variable name='atpage' value='lapagina'/>
<cd:variable name='august' value='august'/>
+ <cd:variable name='author' value='autor'/>
<cd:variable name='auto' value='auto'/>
<cd:variable name='autointro' value='autointro'/>
<cd:variable name='back' value='inapot'/>
@@ -86,7 +87,10 @@
<cd:variable name='backpart' value='epilog'/>
<cd:variable name='backspace' value='spatiuspate'/>
<cd:variable name='backward' value='inapoi'/>
+ <cd:variable name='bbl' value='bbl'/>
<cd:variable name='before' value='inainte'/>
+ <cd:variable name='begin' value='begin'/>
+ <cd:variable name='bib' value='bib'/>
<cd:variable name='big' value='mare'/>
<cd:variable name='bigbodyfont' value='bigbodyfont'/>
<cd:variable name='bigpreference' value='preferintamare'/>
@@ -111,6 +115,7 @@
<cd:variable name='chapter' value='capitol'/>
<cd:variable name='character' value='caracter'/>
<cd:variable name='characters' value='caractere'/>
+ <cd:variable name='cite' value='cite'/>
<cd:variable name='color' value='culoare'/>
<cd:variable name='column' value='coloana'/>
<cd:variable name='columns' value='coloane'/>
@@ -136,9 +141,11 @@
<cd:variable name='display' value='display'/>
<cd:variable name='dot' value='punct'/>
<cd:variable name='doublesided' value='douafete'/>
+ <cd:variable name='down' value='down'/>
<cd:variable name='each' value='fiecare'/>
<cd:variable name='edge' value='bordura'/>
<cd:variable name='empty' value='gol'/>
+ <cd:variable name='end' value='end'/>
<cd:variable name='endnote' value='endnote'/>
<cd:variable name='enumeration' value='enumerare'/>
<cd:variable name='environment' value='mediu'/>
@@ -268,11 +275,15 @@
<cd:variable name='mathcases' value='mathcases'/>
<cd:variable name='mathmatrix' value='mathmatrix'/>
<cd:variable name='max' value='max'/>
+ <cd:variable name='maxdepth' value='maxdepth'/>
+ <cd:variable name='maxheight' value='maxheight'/>
+ <cd:variable name='maxwidth' value='maxwidth'/>
<cd:variable name='may' value='mai'/>
<cd:variable name='mediaeval' value='medieval'/>
<cd:variable name='medium' value='mediu'/>
<cd:variable name='middle' value='centru'/>
<cd:variable name='min' value='min'/>
+ <cd:variable name='mindepth' value='mindepth'/>
<cd:variable name='minheight' value='inaltimeminima'/>
<cd:variable name='minwidth' value='latimeminima'/>
<cd:variable name='mirrored' value='oglindit'/>
@@ -320,8 +331,12 @@
<cd:variable name='outer' value='extern'/>
<cd:variable name='outeredge' value='outeredge'/>
<cd:variable name='outermargin' value='outermargin'/>
+ <cd:variable name='overbar' value='barasus'/>
+ <cd:variable name='overbars' value='supralinie'/>
<cd:variable name='overlay' value='overlay'/>
<cd:variable name='overprint' value='overprint'/>
+ <cd:variable name='overstrike' value='liniepeste'/>
+ <cd:variable name='overstrikes' value='liniipeste'/>
<cd:variable name='packed' value='impachetat'/>
<cd:variable name='page' value='pagina'/>
<cd:variable name='pagecomment' value='comentariupagina'/>
@@ -389,6 +404,7 @@
<cd:variable name='serried' value='serried'/>
<cd:variable name='setups' value='setari'/>
<cd:variable name='sheet' value='sheet'/>
+ <cd:variable name='short' value='short'/>
<cd:variable name='singlesided' value='ofata'/>
<cd:variable name='slanted' value='inclinat'/>
<cd:variable name='slantedbold' value='inclinataldin'/>
@@ -413,6 +429,7 @@
<cd:variable name='spot' value='spot'/>
<cd:variable name='standard' value='standard'/>
<cd:variable name='start' value='start'/>
+ <cd:variable name='starter' value='starter'/>
<cd:variable name='sticker' value='sticker'/>
<cd:variable name='stop' value='stop'/>
<cd:variable name='stopper' value='stopper'/>
@@ -474,10 +491,13 @@
<cd:variable name='type' value='type'/>
<cd:variable name='typing' value='typing'/>
<cd:variable name='unavailable' value='nedisponibil'/>
+ <cd:variable name='underbar' value='sublinie'/>
+ <cd:variable name='underbars' value='sublinii'/>
<cd:variable name='unit' value='unitate'/>
<cd:variable name='units' value='unitati'/>
<cd:variable name='unknown' value='necunoscut'/>
<cd:variable name='unpacked' value='despachetat'/>
+ <cd:variable name='up' value='up'/>
<cd:variable name='url' value='url'/>
<cd:variable name='used' value='folosit'/>
<cd:variable name='value' value='valoare'/>
@@ -508,12 +528,21 @@
<cd:constant name='align' value='aliniere'/>
<cd:constant name='aligncharacter' value='aliniazacaracter'/>
<cd:constant name='alignmentcharacter' value='alierecaracter'/>
+ <cd:constant name='alignsymbol' value='alignsymbol'/>
<cd:constant name='aligntitle' value='alinieretitlu'/>
<cd:constant name='alternative' value='alternativ'/>
+ <cd:constant name='andtext' value='andtext'/>
<cd:constant name='apa' value='apa'/>
<cd:constant name='arrow' value='sageata'/>
+ <cd:constant name='artauthor' value='artauthor'/>
+ <cd:constant name='artauthoretaldisplay' value='artauthoretaldisplay'/>
+ <cd:constant name='artauthoretallimit' value='artauthoretallimit'/>
+ <cd:constant name='artauthoretaltext' value='artauthoretaltext'/>
<cd:constant name='at' value='la'/>
<cd:constant name='author' value='autor'/>
+ <cd:constant name='authoretaldisplay' value='authoretaldisplay'/>
+ <cd:constant name='authoretallimit' value='authoretallimit'/>
+ <cd:constant name='authoretaltext' value='authoretaltext'/>
<cd:constant name='auto' value='auto'/>
<cd:constant name='autofile' value='autofile'/>
<cd:constant name='autofocus' value='autofocus'/>
@@ -582,6 +611,7 @@
<cd:constant name='cutspace' value='cutspace'/>
<cd:constant name='dash' value='dash'/>
<cd:constant name='dat' value='dat'/>
+ <cd:constant name='database' value='database'/>
<cd:constant name='date' value='data'/>
<cd:constant name='deepnumbercommand' value='deepnumbercommand'/>
<cd:constant name='deeptextcommand' value='deeptextcommand'/>
@@ -600,12 +630,17 @@
<cd:constant name='dy' value='dy'/>
<cd:constant name='edge' value='bordura'/>
<cd:constant name='edgedistance' value='distantabordura'/>
+ <cd:constant name='editor' value='editor'/>
+ <cd:constant name='editoretaldisplay' value='editoretaldisplay'/>
+ <cd:constant name='editoretallimit' value='editoretallimit'/>
+ <cd:constant name='editoretaltext' value='editoretaltext'/>
<cd:constant name='empty' value='gol'/>
<cd:constant name='equalheight' value='equalheight'/>
<cd:constant name='equalwidth' value='equalwidth'/>
<cd:constant name='escape' value='escape'/>
<cd:constant name='evenmargin' value='marginepara'/>
<cd:constant name='expansion' value='expansiune'/>
+ <cd:constant name='export' value='export'/>
<cd:constant name='extras' value='extras'/>
<cd:constant name='factor' value='factor'/>
<cd:constant name='fallback' value='fallback'/>
@@ -616,6 +651,8 @@
<cd:constant name='fieldoffset' value='offsetcamp'/>
<cd:constant name='file' value='fisier'/>
<cd:constant name='filtercommand' value='filtercommand'/>
+ <cd:constant name='finalnamesep' value='finalnamesep'/>
+ <cd:constant name='firstnamesep' value='firstnamesep'/>
<cd:constant name='focus' value='focus'/>
<cd:constant name='focusin' value='focusin'/>
<cd:constant name='focusout' value='focusout'/>
@@ -637,6 +674,7 @@
<cd:constant name='global' value='global'/>
<cd:constant name='grid' value='grid'/>
<cd:constant name='hang' value='suspenda'/>
+ <cd:constant name='headalign' value='headalign'/>
<cd:constant name='headcolor' value='culoaretitlu'/>
<cd:constant name='headcommand' value='headcommand'/>
<cd:constant name='headconversion' value='conversietitlu'/>
@@ -664,14 +702,18 @@
<cd:constant name='inner' value='intern'/>
<cd:constant name='innermargin' value='innermargin'/>
<cd:constant name='inputfile' value='inputfile'/>
+ <cd:constant name='intent' value='intent'/>
<cd:constant name='interaction' value='interactiune'/>
<cd:constant name='interlinespace' value='spatiereinterliniara'/>
<cd:constant name='itemalign' value='itemalign'/>
<cd:constant name='items' value='elemente'/>
+ <cd:constant name='juniorsep' value='juniorsep'/>
<cd:constant name='ken' value='ken'/>
<cd:constant name='keyexpansion' value='keyexpansion'/>
<cd:constant name='keyword' value='keyword'/>
<cd:constant name='label' value='eticheta'/>
+ <cd:constant name='lastnamesep' value='lastnamesep'/>
+ <cd:constant name='lastpubsep' value='lastpubsep'/>
<cd:constant name='left' value='stanga'/>
<cd:constant name='leftcolor' value='culoarestanga'/>
<cd:constant name='leftcompoundhyphen' value='leftcompoundhyphen'/>
@@ -711,8 +753,10 @@
<cd:constant name='marking' value='marcaje'/>
<cd:constant name='marstyle' value='stilmarcaj'/>
<cd:constant name='max' value='max'/>
+ <cd:constant name='maxdepth' value='maxdepth'/>
<cd:constant name='maxheight' value='inaltimemaxima'/>
<cd:constant name='maxwidth' value='latimemaxima'/>
+ <cd:constant name='maybeyear' value='maybeyear'/>
<cd:constant name='menu' value='meniu'/>
<cd:constant name='method' value='metoda'/>
<cd:constant name='middle' value='mijloc'/>
@@ -723,8 +767,10 @@
<cd:constant name='mindepth' value='mindepth'/>
<cd:constant name='minheight' value='inaltimeminima'/>
<cd:constant name='minwidth' value='latimeminima'/>
+ <cd:constant name='monthconversion' value='monthconversion'/>
<cd:constant name='n' value='n'/>
<cd:constant name='name' value='nume'/>
+ <cd:constant name='namesep' value='namesep'/>
<cd:constant name='nbottom' value='njos'/>
<cd:constant name='nc' value='nc'/>
<cd:constant name='next' value='urmatorul'/>
@@ -748,6 +794,7 @@
<cd:constant name='numberseparator' value='separatornumar'/>
<cd:constant name='numberseparatorset' value='numberseparatorset'/>
<cd:constant name='numberset' value='numberset'/>
+ <cd:constant name='numberstarter' value='numberstarter'/>
<cd:constant name='numberstopper' value='numberstopper'/>
<cd:constant name='numberstyle' value='stilnumar'/>
<cd:constant name='numberwidth' value='numberwidth'/>
@@ -760,7 +807,9 @@
<cd:constant name='openaction' value='actiunedeschidere'/>
<cd:constant name='openpageaction' value='actiunedeschiderepagina'/>
<cd:constant name='option' value='optiune'/>
+ <cd:constant name='order' value='order'/>
<cd:constant name='orientation' value='orientation'/>
+ <cd:constant name='otherstext' value='otherstext'/>
<cd:constant name='outermargin' value='outermargin'/>
<cd:constant name='overprint' value='overprint'/>
<cd:constant name='ownnumber' value='numarpropriu'/>
@@ -778,10 +827,12 @@
<cd:constant name='pageprefixsegments' value='pageprefixsegments'/>
<cd:constant name='pageprefixseparatorset' value='pageprefixseparatorset'/>
<cd:constant name='pageprefixset' value='pageprefixset'/>
+ <cd:constant name='pageprefixstarter' value='pageprefixstarter'/>
<cd:constant name='pageprefixstopper' value='pageprefixstopper'/>
<cd:constant name='pagesegments' value='pagesegments'/>
<cd:constant name='pageseparatorset' value='pageseparatorset'/>
<cd:constant name='pageset' value='pageset'/>
+ <cd:constant name='pagestarter' value='pagestarter'/>
<cd:constant name='pagestate' value='pagestate'/>
<cd:constant name='pagestopper' value='pagestopper'/>
<cd:constant name='pagestyle' value='stilpagina'/>
@@ -799,16 +850,20 @@
<cd:constant name='prefixsegments' value='prefixsegments'/>
<cd:constant name='prefixseparatorset' value='prefixseparatorset'/>
<cd:constant name='prefixset' value='prefixset'/>
+ <cd:constant name='prefixstarter' value='prefixstarter'/>
<cd:constant name='prefixstopper' value='prefixstopper'/>
<cd:constant name='preset' value='preset'/>
<cd:constant name='preview' value='previzualizare'/>
<cd:constant name='previous' value='precendent'/>
<cd:constant name='previousnumber' value='numarprecedent'/>
<cd:constant name='process' value='process'/>
+ <cd:constant name='pubsep' value='pubsep'/>
<cd:constant name='radius' value='raza'/>
<cd:constant name='random' value='aleator'/>
+ <cd:constant name='range' value='range'/>
<cd:constant name='reduction' value='reducere'/>
<cd:constant name='ref' value='ref'/>
+ <cd:constant name='refcommand' value='refcommand'/>
<cd:constant name='reference' value='referinta'/>
<cd:constant name='referenceprefix' value='referenceprefix'/>
<cd:constant name='referencing' value='referinta'/>
@@ -842,6 +897,7 @@
<cd:constant name='rulethickness' value='grosimerigla'/>
<cd:constant name='samepage' value='aceeasipagina'/>
<cd:constant name='sample' value='exemplu'/>
+ <cd:constant name='samplesize' value='samplesize'/>
<cd:constant name='saveinlist' value='saveinlist'/>
<cd:constant name='scale' value='scala'/>
<cd:constant name='scope' value='scop'/>
@@ -854,6 +910,7 @@
<cd:constant name='sectionsegments' value='sectionsegments'/>
<cd:constant name='sectionseparatorset' value='sectionseparatorset'/>
<cd:constant name='sectionset' value='sectionset'/>
+ <cd:constant name='sectionstarter' value='sectionstarter'/>
<cd:constant name='sectionstopper' value='sectionstopper'/>
<cd:constant name='separator' value='separator'/>
<cd:constant name='set' value='set'/>
@@ -866,6 +923,7 @@
<cd:constant name='sign' value='semn'/>
<cd:constant name='size' value='dimensiune'/>
<cd:constant name='small' value='mic'/>
+ <cd:constant name='sort' value='sort'/>
<cd:constant name='sorttype' value='sorttype'/>
<cd:constant name='source' value='sursa'/>
<cd:constant name='space' value='spatiu'/>
@@ -880,16 +938,19 @@
<cd:constant name='spot' value='spot'/>
<cd:constant name='stack' value='stack'/>
<cd:constant name='start' value='start'/>
+ <cd:constant name='starter' value='starter'/>
<cd:constant name='state' value='stare'/>
<cd:constant name='step' value='pas'/>
<cd:constant name='stop' value='stop'/>
<cd:constant name='stopper' value='stopper'/>
<cd:constant name='stretch' value='dilatat'/>
+ <cd:constant name='strip' value='strip'/>
<cd:constant name='strut' value='strut'/>
<cd:constant name='style' value='stil'/>
<cd:constant name='sub' value='sub'/>
<cd:constant name='subtitle' value='subtitlu'/>
<cd:constant name='suffix' value='suffix'/>
+ <cd:constant name='surnamesep' value='surnamesep'/>
<cd:constant name='sx' value='sx'/>
<cd:constant name='sy' value='sy'/>
<cd:constant name='symalign' value='symaliniere'/>
@@ -929,6 +990,7 @@
<cd:constant name='topoffset' value='offsetsus'/>
<cd:constant name='topspace' value='spatiusus'/>
<cd:constant name='topstate' value='staresus'/>
+ <cd:constant name='totalnumber' value='totalnumber'/>
<cd:constant name='type' value='type'/>
<cd:constant name='unit' value='unitate'/>
<cd:constant name='unknownreference' value='referintanecunoscuta'/>
@@ -939,6 +1001,7 @@
<cd:constant name='veroffset' value='veroffset'/>
<cd:constant name='vfil' value='vfil'/>
<cd:constant name='voffset' value='voffset'/>
+ <cd:constant name='vonsep' value='vonsep'/>
<cd:constant name='way' value='mod'/>
<cd:constant name='wfactor' value='factorw'/>
<cd:constant name='white' value='alb'/>
@@ -1273,10 +1336,6 @@
<cd:command name='outeredgewidth' value='outeredgewidth'/>
<cd:command name='outermargindistance' value='outermargindistance'/>
<cd:command name='outermarginwidth' value='outermarginwidth'/>
- <cd:command name='overbar' value='barasus'/>
- <cd:command name='overbars' value='supralinie'/>
- <cd:command name='overstrike' value='liniepeste'/>
- <cd:command name='overstrikes' value='liniipeste'/>
<cd:command name='packed' value='impachetat'/>
<cd:command name='page' value='pagina'/>
<cd:command name='pagedepth' value='pagedepth'/>
@@ -1611,8 +1670,6 @@
<cd:command name='type' value='type'/>
<cd:command name='typebuffer' value='scriebuffer'/>
<cd:command name='typefile' value='typefile'/>
- <cd:command name='underbar' value='sublinie'/>
- <cd:command name='underbars' value='sublinii'/>
<cd:command name='unitmeaning' value='numeunitate'/>
<cd:command name='unknown' value='necunoscut'/>
<cd:command name='useJSscripts' value='folosestescriptJS'/>
diff --git a/Master/texmf-dist/tex/context/interface/t-bib.xml b/Master/texmf-dist/tex/context/interface/t-bib.xml
deleted file mode 100644
index faa728fa6bc..00000000000
--- a/Master/texmf-dist/tex/context/interface/t-bib.xml
+++ /dev/null
@@ -1,411 +0,0 @@
-<?xml version="1.0"?>
-
-<cd:interface xmlns:cd="http://www.pragma-ade.com/commands"
- name="context/third/t-bib"
- language="all" version="2006.08.04">
-
-<cd:command name="setuppublications" file="t-bib.tex">
- <cd:sequence>
- <cd:string value="setuppublications"/>
- </cd:sequence>
- <cd:arguments>
- <cd:assignments list="yes">
- <cd:parameter name="alternative">
- <cd:constant type="ams"/>
- <cd:constant type="apa" default="yes"/>
- <cd:constant type="apa-de"/>
- <cd:constant type="apa-fr"/>
- <cd:constant type="aps"/>
- <cd:constant type="num"/>
- <cd:constant type="num-fr"/>
- <cd:constant type="ssa"/>
- </cd:parameter>
- <cd:parameter name="refcommand">
- <cd:constant type="author"/>
- <cd:constant type="authornum"/>
- <cd:constant type="authoryear"/>
- <cd:constant type="authoryears" default="yes"/>
- <cd:constant type="key"/>
- <cd:constant type="num"/>
- <cd:constant type="serial"/>
- <cd:constant type="page"/>
- <cd:constant type="short"/>
- <cd:constant type="type"/>
- <cd:constant type="year"/>
- <cd:constant type="data"/>
- <cd:constant type="doi"/>
- <cd:constant type="url"/>
- </cd:parameter>
- <cd:parameter name="sorttype">
- <cd:constant type="cite" default="yes"/>
- <cd:constant type="bbl"/>
- </cd:parameter>
- <cd:parameter name="criterium">
- <cd:constant type="all" />
- <cd:constant type="cite" default="yes"/>
- </cd:parameter>
- <cd:parameter name="numbering">
- <cd:constant type="yes"/>
- <cd:constant type="no" default="yes"/>
- <cd:constant type="short"/>
- <cd:constant type="bib"/>
- </cd:parameter>
- <cd:parameter name="autohang">
- <cd:constant type="yes"/>
- <cd:constant type="no" default="yes"/>
- </cd:parameter>
- <cd:parameter name="monthconversion">
- <cd:constant type="cd:command"/>
- </cd:parameter>
- </cd:assignments>
- </cd:arguments>
-</cd:command>
-
-<cd:command name="setuppublicationlist" file="t-bib.tex">
- <cd:sequence>
- <cd:string value="setuppublicationlist"/>
- </cd:sequence>
- <cd:arguments>
- <cd:assignments list="yes">
- <cd:parameter name="totalnumber">
- <cd:constant type="cd:number"/>
- </cd:parameter>
- <cd:parameter name="samplesize">
- <cd:constant type="cd:text"/>
- </cd:parameter>
- <cd:parameter name="title">
- <cd:constant type="cd:command"/>
- </cd:parameter>
- <cd:parameter name="maybeyear">
- <cd:constant type="off"/>
- <cd:constant type="on" default="yes"/>
- </cd:parameter>
- <cd:parameter name="criterium">
- <cd:constant type="cd:section"/>
- <cd:constant type="local"/>
- <cd:constant type="previous"/>
- <cd:constant type="current" default="yes"/>
- <cd:constant type="all"/>
- </cd:parameter>
- <cd:parameter name="pagenumber">
- <cd:constant type="yes"/>
- <cd:constant type="no" default="yes"/>
- </cd:parameter>
- <cd:parameter name="artauthor">
- <cd:constant type="\normalauthor"/>
- <cd:constant type="\normalshortauthor"/>
- <cd:constant type="\invertedauthor"/>
- <cd:constant type="\invertedshortauthor" default="yes"/>
- </cd:parameter>
- <cd:parameter name="author">
- <cd:constant type="\normalauthor"/>
- <cd:constant type="\normalshortauthor"/>
- <cd:constant type="\invertedauthor"/>
- <cd:constant type="\invertedshortauthor" default="yes"/>
- </cd:parameter>
- <cd:parameter name="editor">
- <cd:constant type="\normalauthor"/>
- <cd:constant type="\normalshortauthor"/>
- <cd:constant type="\invertedauthor"/>
- <cd:constant type="\invertedshortauthor" default="yes"/>
- </cd:parameter>
- <cd:parameter name="namesep">
- <cd:constant type="cd:text"/>
- </cd:parameter>
- <cd:parameter name="lastnamesep">
- <cd:constant type="cd:text"/>
- </cd:parameter>
- <cd:parameter name="finalnamesep">
- <cd:constant type="cd:text"/>
- </cd:parameter>
- <cd:parameter name="firstnamesep">
- <cd:constant type="cd:text"/>
- </cd:parameter>
- <cd:parameter name="juniorsep">
- <cd:constant type="cd:text"/>
- </cd:parameter>
- <cd:parameter name="vonsep">
- <cd:constant type="cd:text"/>
- </cd:parameter>
- <cd:parameter name="surnamesep">
- <cd:constant type="cd:text"/>
- </cd:parameter>
- <cd:parameter name="authoretallimit">
- <cd:constant type="cd:number"/>
- </cd:parameter>
- <cd:parameter name="authoretaltext">
- <cd:constant type="cd:text"/>
- </cd:parameter>
- <cd:parameter name="authoretaldisplay">
- <cd:constant type="cd:number"/>
- </cd:parameter>
- <cd:parameter name="authorcommand">
- <cd:constant type="cd:threearguments"/>
- </cd:parameter>
- <cd:parameter name="artauthoretallimit">
- <cd:constant type="cd:number"/>
- </cd:parameter>
- <cd:parameter name="artauthoretaltext">
- <cd:constant type="cd:text"/>
- </cd:parameter>
- <cd:parameter name="artauthoretaldisplay">
- <cd:constant type="cd:number"/>
- </cd:parameter>
- <cd:parameter name="artauthorcommand">
- <cd:constant type="cd:threearguments"/>
- </cd:parameter>
- <cd:parameter name="editoretallimit">
- <cd:constant type="cd:number"/>
- </cd:parameter>
- <cd:parameter name="editoretaltext">
- <cd:constant type="cd:text"/>
- </cd:parameter>
- <cd:parameter name="editoretaldisplay">
- <cd:constant type="cd:number"/>
- </cd:parameter>
- <cd:parameter name="editorcommand">
- <cd:constant type="cd:threearguments"/>
- </cd:parameter>
- <cd:inherit name="setuplist"/>
- </cd:assignments>
- </cd:arguments>
-</cd:command>
-
-
-<cd:command name="setupcite" file="t-bib.tex">
- <cd:sequence>
- <cd:string value="setupcite"/>
- </cd:sequence>
- <cd:arguments>
- <cd:keywords list="yes">
- <cd:constant type="author"/>
- <cd:constant type="year"/>
- <cd:constant type="authoryear"/>
- <cd:constant type="authoryears"/>
- <cd:constant type="key"/>
- <cd:constant type="serial"/>
- <cd:constant type="page"/>
- <cd:constant type="short"/>
- <cd:constant type="type"/>
- <cd:constant type="data"/>
- <cd:constant type="doi"/>
- <cd:constant type="url"/>
- <cd:constant type="num"/>
- </cd:keywords>
- <cd:assignments list="yes">
- <cd:parameter name="andtext">
- <cd:constant type="cd:text"/>
- </cd:parameter>
- <cd:parameter name="otherstext">
- <cd:constant type="cd:text"/>
- </cd:parameter>
- <cd:parameter name="namesep">
- <cd:constant type="cd:text"/>
- </cd:parameter>
- <cd:parameter name="pubsep">
- <cd:constant type="cd:text"/>
- </cd:parameter>
- <cd:parameter name="lastpubsep">
- <cd:constant type="cd:text"/>
- </cd:parameter>
- <cd:parameter name="compress">
- <cd:constant type="yes" default="yes"/>
- <cd:constant type="no"/>
- </cd:parameter>
- <cd:parameter name="inbetween">
- <cd:constant type="cd:text"/>
- </cd:parameter>
- <cd:parameter name="left">
- <cd:constant type="cd:text"/>
- </cd:parameter>
- <cd:parameter name="right">
- <cd:constant type="cd:text"/>
- </cd:parameter>
- </cd:assignments>
- </cd:arguments>
-</cd:command>
-
-<cd:command name="setuppublicationlayout" file="t-bib.tex">
- <cd:sequence>
- <cd:string value="setuppublicationlayout"/>
- </cd:sequence>
- <cd:arguments>
- <cd:keywords list="yes">
- <cd:constant type="article"/>
- <cd:constant type="book"/>
- <cd:constant type="booklet"/>
- <cd:constant type="conference"/>
- <cd:constant type="electronic"/>
- <cd:constant type="inbook"/>
- <cd:constant type="incollection"/>
- <cd:constant type="inproceedings"/>
- <cd:constant type="manual"/>
- <cd:constant type="mastersthesis"/>
- <cd:constant type="misc"/>
- <cd:constant type="patent"/>
- <cd:constant type="periodical"/>
- <cd:constant type="phdthesis"/>
- <cd:constant type="proceedings"/>
- <cd:constant type="standard"/>
- <cd:constant type="techreport"/>
- <cd:constant type="unpublished"/>
- </cd:keywords>
- <cd:content/>
- </cd:arguments>
-</cd:command>
-
-
-<cd:command name="setupbibtex" file="t-bib.tex">
- <cd:sequence>
- <cd:string value="setupbibtex"/>
- </cd:sequence>
- <cd:arguments>
- <cd:assignments list="yes">
- <cd:parameter name="database">
- <cd:constant type="cd:file"/>
- </cd:parameter>
- <cd:parameter name="sort">
- <cd:constant type="title"/>
- <cd:constant type="author"/>
- <cd:constant type="short"/>
- <cd:constant type="no" default="yes"/>
- <cd:constant type="cd:file"/>
- </cd:parameter>
- </cd:assignments>
- </cd:arguments>
-</cd:command>
-
-
-<cd:command name="usepublications" file="t-bib.tex">
- <cd:sequence>
- <cd:string value="usepublications"/>
- </cd:sequence>
- <cd:arguments list="yes">
- <cd:keywords>
- <cd:constant type="cd:file"/>
- </cd:keywords>
- </cd:arguments>
-</cd:command>
-
-
-<cd:command name="publication" file="t-bib.tex" type="environment">
- <cd:sequence>
- <cd:string value="publication"/>
- </cd:sequence>
- <cd:arguments>
- <cd:assignments list="yes">
- <cd:parameter name="k">
- <cd:constant type="cd:text"/>
- </cd:parameter>
- <cd:parameter name="a">
- <cd:constant type="cd:text"/>
- </cd:parameter>
- <cd:parameter name="y">
- <cd:constant type="cd:text"/>
- </cd:parameter>
- <cd:parameter name="n">
- <cd:constant type="cd:text"/>
- </cd:parameter>
- <cd:parameter name="s">
- <cd:constant type="cd:text"/>
- </cd:parameter>
- <cd:parameter name="t">
- <cd:constant type="cd:text"/>
- </cd:parameter>
- <cd:parameter name="u">
- <cd:constant type="cd:text"/>
- </cd:parameter>
- <cd:parameter name="o">
- <cd:constant type="cd:text"/>
- </cd:parameter>
- </cd:assignments>
- </cd:arguments>
-</cd:command>
-
-<cd:command name="cite" file="t-bib.tex">
- <cd:sequence>
- <cd:string value="cite"/>
- </cd:sequence>
- <cd:arguments>
- <cd:keywords optional="yes">
- <cd:constant type="author"/>
- <cd:constant type="year"/>
- <cd:constant type="authoryear"/>
- <cd:constant type="authoryears"/>
- <cd:constant type="key"/>
- <cd:constant type="serial"/>
- <cd:constant type="page"/>
- <cd:constant type="short"/>
- <cd:constant type="type"/>
- <cd:constant type="doi"/>
- <cd:constant type="data"/>
- <cd:constant type="url"/>
- <cd:constant type="num"/>
- </cd:keywords>
- <cd:reference list="yes"/>
- </cd:arguments>
-</cd:command>
-
-<cd:command name="nocite" file="t-bib.tex">
- <cd:sequence>
- <cd:string value="nocite"/>
- </cd:sequence>
- <cd:arguments>
- <cd:reference list="yes"/>
- </cd:arguments>
-</cd:command>
-
-<cd:command name="citealt" file="t-bib.tex">
- <cd:sequence>
- <cd:string value="cite"/>
- </cd:sequence>
- <cd:arguments>
- <cd:assignments optional="yes" list="yes">
- <cd:parameter name="alternative">
- <cd:constant type="author"/>
- <cd:constant type="year"/>
- <cd:constant type="authoryear"/>
- <cd:constant type="authoryears"/>
- <cd:constant type="key"/>
- <cd:constant type="serial"/>
- <cd:constant type="page"/>
- <cd:constant type="short"/>
- <cd:constant type="type"/>
- <cd:constant type="doi"/>
- <cd:constant type="data"/>
- <cd:constant type="url"/>
- <cd:constant type="num"/>
- </cd:parameter>
- <cd:parameter name="extras">
- <cd:constant type="cd:text"/>
- </cd:parameter>
- <cd:inherit name="setupcite"/>
- </cd:assignments>
- <cd:reference list="yes"/>
- </cd:arguments>
-</cd:command>
-
-<cd:command name="placepublications" file="t-bib.tex">
- <cd:sequence>
- <cd:string value="placepublications"/>
- </cd:sequence>
- <cd:arguments>
- <cd:assignments optional="yes" list="yes">
- <cd:inherit name="setuplist"/>
- </cd:assignments>
- </cd:arguments>
-</cd:command>
-
-<cd:command name="completepublications" file="t-bib.tex">
- <cd:sequence>
- <cd:string value="completepublications"/>
- </cd:sequence>
- <cd:arguments>
- <cd:assignments optional="yes" list="yes">
- <cd:inherit name="setuplist"/>
- </cd:assignments>
- </cd:arguments>
-</cd:command>
-
-
-</cd:interface>
diff --git a/Master/texmf-dist/tex/context/patterns/lang-ba.hyp b/Master/texmf-dist/tex/context/patterns/lang-ba.hyp
deleted file mode 100644
index b3e1410467f..00000000000
--- a/Master/texmf-dist/tex/context/patterns/lang-ba.hyp
+++ /dev/null
@@ -1,36 +0,0 @@
-% context hyphenation file, see lang-all.xml for original comment
-
-% source of data: bahyph.tex
-
-% begin description data
-
-% <!-- copied from lang-all.xml
-%
-% <?xml version='1.0' standalone='yes'?>
-%
-% <description language='ba'>
-% <sourcefile>bahyph.tex</sourcefile>
-% <title>TeX hyphenation patterns for the Basque language</title>
-% <copyright>
-% <year>1991</year>
-% <owner>Julio Sanchez (jsanchez@gmv.es)</owner>
-% <comment>These patterns have been derived from "On Word Division in Spanish"
-% Jos'e A. Ma~nas</comment>
-% </copyright>
-% <copyright>
-% <year>1997</year>
-% <owner>Juan M. Aguirregabiria (wtpagagj@lg.ehu.es)</owner>
-% <comment>Adaption to TeX based on shyphen.sh</comment>
-% </copyright>
-% </description>
-%
-% end of copy -->
-
-% end description data
-
-% begin hyphenation data
-
-\hyphenation {}
-
-% end hyphenation data
-
diff --git a/Master/texmf-dist/tex/context/patterns/lang-ba.pat b/Master/texmf-dist/tex/context/patterns/lang-ba.pat
deleted file mode 100644
index 79e69b52bb5..00000000000
--- a/Master/texmf-dist/tex/context/patterns/lang-ba.pat
+++ /dev/null
@@ -1,224 +0,0 @@
-% context pattern file, see lang-all.xml for original comment
-
-% source of data: bahyph.tex
-
-% begin description data
-
-% <!-- copied from lang-all.xml
-%
-% <?xml version='1.0' standalone='yes'?>
-%
-% <description language='ba'>
-% <sourcefile>bahyph.tex</sourcefile>
-% <title>TeX hyphenation patterns for the Basque language</title>
-% <copyright>
-% <year>1991</year>
-% <owner>Julio Sanchez (jsanchez@gmv.es)</owner>
-% <comment>These patterns have been derived from "On Word Division in Spanish"
-% Jos'e A. Ma~nas</comment>
-% </copyright>
-% <copyright>
-% <year>1997</year>
-% <owner>Juan M. Aguirregabiria (wtpagagj@lg.ehu.es)</owner>
-% <comment>Adaption to TeX based on shyphen.sh</comment>
-% </copyright>
-% </description>
-%
-% end of copy -->
-
-% end description data
-
-% begin pattern data
-
-\patterns {
-1ba
-1be
-1bo
-1bi
-1bu
-1ca
-1ce
-1co
-1ci
-1cu
-1da
-1de
-1do
-1di
-1du
-1fa
-1fe
-1fo
-1fi
-1fu
-1ga
-1ge
-1go
-1gi
-1gu
-1ja
-1je
-1jo
-1ji
-1ju
-1ka
-1ke
-1ko
-1ki
-1ku
-1la
-1le
-1lo
-1li
-1lu
-1ma
-1me
-1mo
-1mi
-1mu
-1na
-1ne
-1no
-1ni
-1nu
-1pa
-1pe
-1po
-1pi
-1pu
-1qa
-1qe
-1qo
-1qi
-1qu
-1ra
-1re
-1ro
-1ri
-1ru
-1sa
-1se
-1so
-1si
-1su
-1ta
-1te
-1to
-1ti
-1tu
-1va
-1ve
-1vo
-1vi
-1vu
-1wa
-1we
-1wo
-1wi
-1wu
-1xa
-1xe
-1xo
-1xi
-1xu
-1ya
-1ye
-1yo
-1yi
-1yu
-1za
-1ze
-1zo
-1zi
-1zu
-1l2la
-1l2le
-1l2lo
-1l2li
-1l2lu
-1r2ra
-1r2re
-1r2ro
-1r2ri
-1r2ru
-1t2sa
-1t2se
-1t2so
-1t2si
-1t2su
-1t2xa
-1t2xe
-1t2xo
-1t2xi
-1t2xu
-1t2za
-1t2ze
-1t2zo
-1t2zi
-1t2zu
-1b2la
-1b2le
-1b2lo
-1b2li
-1b2lu
-1b2ra
-1b2re
-1b2ro
-1b2ri
-1b2ru
-1d2ra
-1d2re
-1d2ro
-1d2ri
-1d2ru
-1f2la
-1f2le
-1f2lo
-1f2li
-1f2lu
-1f2ra
-1f2re
-1f2ro
-1f2ri
-1f2ru
-1g2la
-1g2le
-1g2lo
-1g2li
-1g2lu
-1g2ra
-1g2re
-1g2ro
-1g2ri
-1g2ru
-1k2la
-1k2le
-1k2lo
-1k2li
-1k2lu
-1k2ra
-1k2re
-1k2ro
-1k2ri
-1k2ru
-1p2la
-1p2le
-1p2lo
-1p2li
-1p2lu
-1p2ra
-1p2re
-1p2ro
-1p2ri
-1p2ru
-1t2ra
-1t2re
-1t2ro
-1t2ri
-1t2ru
-su2b2r
-su2b2l
-}
-
-% end pattern data
-
diff --git a/Master/texmf-dist/tex/context/patterns/lang-bg.hyp b/Master/texmf-dist/tex/context/patterns/lang-bg.hyp
index 368ff0ecd1f..87a04049af1 100644
--- a/Master/texmf-dist/tex/context/patterns/lang-bg.hyp
+++ b/Master/texmf-dist/tex/context/patterns/lang-bg.hyp
@@ -1,6 +1,6 @@
% generated by mtxrun --script pattern --convert
-% for comment and copyright, see ./lang-bg.rme
+% for comment and copyright, see e:/tmp/patterns/lang-bg.rme
% used:
diff --git a/Master/texmf-dist/tex/context/patterns/lang-bg.pat b/Master/texmf-dist/tex/context/patterns/lang-bg.pat
index f90258acb87..3f3f5952fd7 100644
--- a/Master/texmf-dist/tex/context/patterns/lang-bg.pat
+++ b/Master/texmf-dist/tex/context/patterns/lang-bg.pat
@@ -1,6 +1,6 @@
% generated by mtxrun --script pattern --convert
-% for comment and copyright, see ./lang-bg.rme
+% for comment and copyright, see e:/tmp/patterns/lang-bg.rme
% used: а б в г д е ж з и й к л м н о п р с т у ф х ц ч ш щ ъ ь ю я
diff --git a/Master/texmf-dist/tex/context/patterns/lang-ca.hyp b/Master/texmf-dist/tex/context/patterns/lang-ca.hyp
index 3446df9f5c3..90ccd20b773 100644
--- a/Master/texmf-dist/tex/context/patterns/lang-ca.hyp
+++ b/Master/texmf-dist/tex/context/patterns/lang-ca.hyp
@@ -1,6 +1,6 @@
% generated by mtxrun --script pattern --convert
-% for comment and copyright, see ./lang-ca.rme
+% for comment and copyright, see e:/tmp/patterns/lang-ca.rme
% used: a b c d e g h i j k l n o p r s t u v w x y
diff --git a/Master/texmf-dist/tex/context/patterns/lang-ca.pat b/Master/texmf-dist/tex/context/patterns/lang-ca.pat
index f27dc24ab01..34e2e96ea0b 100644
--- a/Master/texmf-dist/tex/context/patterns/lang-ca.pat
+++ b/Master/texmf-dist/tex/context/patterns/lang-ca.pat
@@ -1,6 +1,6 @@
% generated by mtxrun --script pattern --convert
-% for comment and copyright, see ./lang-ca.rme
+% for comment and copyright, see e:/tmp/patterns/lang-ca.rme
% used: a b c d e f g h i j l m n o p q r s t u v x y z à ç è é í ï ò ó ú ü
diff --git a/Master/texmf-dist/tex/context/patterns/lang-ca.rme b/Master/texmf-dist/tex/context/patterns/lang-ca.rme
index e64e6b0df09..656141fbf47 100644
--- a/Master/texmf-dist/tex/context/patterns/lang-ca.rme
+++ b/Master/texmf-dist/tex/context/patterns/lang-ca.rme
@@ -43,7 +43,7 @@
% - \lccode is *forbidden*, and I really mean it
% - all the patterns should be in UTF-8
% - the only "allowed" TeX commands in this file are: \patterns, \hyphenation,
-% and if you really cannot do without, also \message
+% and if you really cannot do without, also \input and \message
% - in particular, please no \catcode or \lccode changes,
% they belong to loadhyph-foo.tex,
% and no \lefthyphenmin and \righthyphenmin,
diff --git a/Master/texmf-dist/tex/context/patterns/lang-cs.hyp b/Master/texmf-dist/tex/context/patterns/lang-cs.hyp
index b4bbe1ecb06..25095ee6f06 100644
--- a/Master/texmf-dist/tex/context/patterns/lang-cs.hyp
+++ b/Master/texmf-dist/tex/context/patterns/lang-cs.hyp
@@ -1,6 +1,6 @@
% generated by mtxrun --script pattern --convert
-% for comment and copyright, see ./lang-cs.rme
+% for comment and copyright, see e:/tmp/patterns/lang-cs.rme
% used: a c e f h i j k l n o p r t y í ú č ř
diff --git a/Master/texmf-dist/tex/context/patterns/lang-cs.pat b/Master/texmf-dist/tex/context/patterns/lang-cs.pat
index 4e7fc9ef766..6e9f08bdedf 100644
--- a/Master/texmf-dist/tex/context/patterns/lang-cs.pat
+++ b/Master/texmf-dist/tex/context/patterns/lang-cs.pat
@@ -1,6 +1,6 @@
% generated by mtxrun --script pattern --convert
-% for comment and copyright, see ./lang-cs.rme
+% for comment and copyright, see e:/tmp/patterns/lang-cs.rme
% used: a b c d e f g h i j k l m n o p q r s t u v w x y z á é í ó ú ý č ď ě ň ř š ť ů ž
diff --git a/Master/texmf-dist/tex/context/patterns/lang-cy.hyp b/Master/texmf-dist/tex/context/patterns/lang-cy.hyp
index c9da02a1691..ba7bd489adf 100644
--- a/Master/texmf-dist/tex/context/patterns/lang-cy.hyp
+++ b/Master/texmf-dist/tex/context/patterns/lang-cy.hyp
@@ -1,31 +1,8 @@
-% context hyphenation file, see lang-all.xml for original comment
+% generated by mtxrun --script pattern --convert
-% source of data: cyhyph.tex
+% for comment and copyright, see e:/tmp/patterns/lang-cy.rme
-% begin description data
-
-% <!-- copied from lang-all.xml
-%
-% <?xml version='1.0' standalone='yes'?>
-%
-% <description language='cy'>
-% <sourcefile>cyhyph.tex</sourcefile>
-% <title>TeX hyphenation patterns for the Welsh Language</title>
-% <remarks>v3,GNU General Public License</remarks>
-% <copyright>
-% <year>1996</year>
-% <owner>Yannis Haralambous</owner>
-% <comment>Inputs cathyph.tex, patterns in EC/DC encoding</comment>
-% </copyright>
-% </description>
-%
-% end of copy -->
-
-% end description data
-
-% begin hyphenation data
-
-\hyphenation {}
-
-% end hyphenation data
+% used:
+\hyphenation{
+} \ No newline at end of file
diff --git a/Master/texmf-dist/tex/context/patterns/lang-cy.pat b/Master/texmf-dist/tex/context/patterns/lang-cy.pat
index 64ac02adaa6..b0c9ed79384 100644
--- a/Master/texmf-dist/tex/context/patterns/lang-cy.pat
+++ b/Master/texmf-dist/tex/context/patterns/lang-cy.pat
@@ -1,31 +1,10 @@
-% context pattern file, see lang-all.xml for original comment
+% generated by mtxrun --script pattern --convert
-% source of data: cyhyph.tex
+% for comment and copyright, see e:/tmp/patterns/lang-cy.rme
-% begin description data
+% used: a b c d e f g h i l m n o p r s t u w y á â ê ë ï ô ö
-% <!-- copied from lang-all.xml
-%
-% <?xml version='1.0' standalone='yes'?>
-%
-% <description language='cy'>
-% <sourcefile>cyhyph.tex</sourcefile>
-% <title>TeX hyphenation patterns for the Welsh Language</title>
-% <remarks>v3,GNU General Public License</remarks>
-% <copyright>
-% <year>1996</year>
-% <owner>Yannis Haralambous</owner>
-% <comment>Inputs cathyph.tex, patterns in EC/DC encoding</comment>
-% </copyright>
-% </description>
-%
-% end of copy -->
-
-% end description data
-
-% begin pattern data
-
-\patterns {
+\patterns{
.ac4t
.ad3ae
.add5as
@@ -6753,8 +6732,4 @@ y4wyc
y3wyf
ywy3na
ywy5ne
-y1y
-}
-
-% end pattern data
-
+y1y} \ No newline at end of file
diff --git a/Master/texmf-dist/tex/context/patterns/lang-il.rme b/Master/texmf-dist/tex/context/patterns/lang-cy.rme
index 3ab365eedc6..7a7ed664048 100644
--- a/Master/texmf-dist/tex/context/patterns/lang-il.rme
+++ b/Master/texmf-dist/tex/context/patterns/lang-cy.rme
@@ -3,8 +3,8 @@
% This file is part of hyph-utf8 package and resulted from
% semi-manual conversions of hyphenation patterns into UTF-8 in June 2008.
%
-% Source: TODO:WRITEME (yyyy-mm-dd)
-% Author: Maksym Polyakov <polyama at auburn.edu>, <mpoliak at i.com.ua>
+% Source: cyhyph.tex ()
+% Author: Yannis Haralambous
%
% The above mentioned file should become obsolete,
% and the author of the original file should preferaby modify this file instead.
@@ -43,7 +43,7 @@
% - \lccode is *forbidden*, and I really mean it
% - all the patterns should be in UTF-8
% - the only "allowed" TeX commands in this file are: \patterns, \hyphenation,
-% and if you really cannot do without, also \message
+% and if you really cannot do without, also \input and \message
% - in particular, please no \catcode or \lccode changes,
% they belong to loadhyph-foo.tex,
% and no \lefthyphenmin and \righthyphenmin,
@@ -60,11 +60,5 @@
%
%------------------------------------------------------------------------------
%
-% Ukrainian hyphenation patterns in LCY (cp866nav) encoding.
-% Copyright 1998-2001 Maksym Polyakov.
-% Released 2001/05/10.
-% This file can be redistributed and/or modified
-% under the terms of the LaTeX Project Public License (lppl).
-% Please, send bug reports via e-mail:
-% polyama@auburn.edu
-% mpoliak@i.com.ua \ No newline at end of file
+% Welsh patterns
+% Yannis Haralambous 1996 \ No newline at end of file
diff --git a/Master/texmf-dist/tex/context/patterns/lang-da.hyp b/Master/texmf-dist/tex/context/patterns/lang-da.hyp
index d6cefa307e9..f9d33a5a28d 100644
--- a/Master/texmf-dist/tex/context/patterns/lang-da.hyp
+++ b/Master/texmf-dist/tex/context/patterns/lang-da.hyp
@@ -1,6 +1,6 @@
% generated by mtxrun --script pattern --convert
-% for comment and copyright, see ./lang-da.rme
+% for comment and copyright, see e:/tmp/patterns/lang-da.rme
% used:
diff --git a/Master/texmf-dist/tex/context/patterns/lang-da.pat b/Master/texmf-dist/tex/context/patterns/lang-da.pat
index 73f938599c7..fdccc42f9a4 100644
--- a/Master/texmf-dist/tex/context/patterns/lang-da.pat
+++ b/Master/texmf-dist/tex/context/patterns/lang-da.pat
@@ -1,6 +1,6 @@
% generated by mtxrun --script pattern --convert
-% for comment and copyright, see ./lang-da.rme
+% for comment and copyright, see e:/tmp/patterns/lang-da.rme
% used: a b c d e f g h i j k l m n o p q r s t u v w x y z å æ ø
diff --git a/Master/texmf-dist/tex/context/patterns/lang-de.hyp b/Master/texmf-dist/tex/context/patterns/lang-de.hyp
index 15485d1e1ae..21cafe84166 100644
--- a/Master/texmf-dist/tex/context/patterns/lang-de.hyp
+++ b/Master/texmf-dist/tex/context/patterns/lang-de.hyp
@@ -1,8 +1,8 @@
% generated by mtxrun --script pattern --convert
-% for comment and copyright, see ./lang-de.rme
+% for comment and copyright, see e:/tmp/patterns/lang-de.rme
-% used:
+% used:
\hyphenation{
-}
+} \ No newline at end of file
diff --git a/Master/texmf-dist/tex/context/patterns/lang-de.pat b/Master/texmf-dist/tex/context/patterns/lang-de.pat
index 836fa7080bd..2b0c8a1078c 100644
--- a/Master/texmf-dist/tex/context/patterns/lang-de.pat
+++ b/Master/texmf-dist/tex/context/patterns/lang-de.pat
@@ -1,380 +1,352 @@
% generated by mtxrun --script pattern --convert
-% for comment and copyright, see ./lang-de.rme
+% for comment and copyright, see e:/tmp/patterns/lang-de.rme
% used: a b c d e f g h i j k l m n o p q r s t u v w x y z ß à á â ä ç è é ê ë í ñ ó ô ö ü
\patterns{
-.a6
-.ab3b
-.aben2
-.ab5l
-.abo4
+.ab1a
+.abi4
+.ab3l
+.abo2
.ab3ol
.ab1or
-.ab5r
-.ab3s
+.ack2
+.ag4n
.ag4r
.ag2u
-.aid2
.ai2s
+.akt2a
.al3br
.al2e
-.al3l4en
-.al3ph
+.al5l4en
.al4tei
.alt3s
-.amt4
-.amt6s3
-.an3alg
-.an3d
-.ang4
-.an1gl
+.ampe4
+.amt4s3
+.an3d2
+.anden6k
+.and4ri
+.ang2
+.an3gli
.angs4
.angst3
-.an3k
.an3s
.an4si.
.ans2p
-.an3z
-.ap3s2
-.ar3k2a
+.ans2t
+.an4tag
+.an3th
+.apo1
+.aps2
+.ari1e
+.ark2a
.ar4m3ac
-.ar4s
+.ar2sc
.ar4t3ei
-.as1t
+.as3t
.as4ta
+.at4h
.au3d
-.au2f5
-.au4s1
+.au2f3
+.au4s3
.ausch3
-.aus5s
-.ä4
-.äm5
+.ax4
+.äm3
.ät2s
-.b6
-.bau1s
.be3erb
.bei6ge.
.be3ra
.be3r2e
-.ber4g3a
+.berg3a
+.ber6gab
.ber4g3r
-.bi4os
.boge2
.bo4s3k
-.c4
+.bu4ser
+.by4t
.ch2
-.con3
-.d4
-.dab6
+.dab4
.da2r1
-.dar3in
-.dar2m
+.da4rin
+.darm1
.da4te.
.da4tes
-.de4al
+.de2al
.de1i
-.de3o2
+.de4in.
+.de1o2
.de3r4en
.de1s
+.des2e
.de3sk
-.de3s2t
-.deut2
-.dien4
-.do3b
+.des2t
+.dien4e
.do2mo
.do1pe
-.dor2f1
+.dorf1
.dü1b
-.e4
-.ebe2
-.ehe3i
+.dys1
+.ebe2r1
+.ehe1i
.ei3e2
-.ei4ne
-.ei5nen.
-.ei5ner
-.ei5nes
-.ei4sp
+.ei4na
+.einen6g
+.ei2sp
.ei4st
-.ei2tr
+.ei4tr
+.eke2
.el2bi
.elb3s
-.els7t
.em3m2
.en1
.en4d3er
-.en4d3r
+.en5der.
+.en2d3r
+.end3s
.enn2
-.en4t3
+.enns3
+.en2t3
+.en4tei
+.en4tr
+.er8brecht
+.er2da
+.er4dan
+.er4dar
.er4dei
.er4der
.er1e
+.ere3c
+.erf4
.er1i
.er8stein
-.es3k
-.es3p
-.es1ta
+.er8stritt.
+.er8stritten.
+.er4zen4
+.es1p
+.es3ta
.es5t4e
-.es1th
-.es3tr
-.et4s
-.eu3
-.eug4
+.est2h
+.es3to
+.es5tr
+.et2s
+.eu1
+.eu3g4
+.eu3t
+.eve4r
.ext4
-.f6
+.fe2i
+.fer4no
.fi3est
.fi4le.
.fi4len
-.fin6s
.fi2s
-.frau3
+.flug1
+.for2t
.fs4
.fu2sc
-.g4
.ga4t
.gd2
-.gel2d
.ge5nar
.ge3ne
.ge3r2a
.ge3r2e
-.ge3s4a
-.ge1u
-.gros4
-.gs2
-.gus4s3
-.gu4ter
-.h4
-.ha3bi
-.haft5s
-.hal5te
-.haup4
-.hau4t1
+.ge3u
+.gs4
+.guss1
+.hau2t1
.he2
-.he3cke
+.he3fe
+.her3an
.he3ri
.he6r5inn
-.he5xe
-.his1
.ho4met
-.i6
.ia4
.im2a
-.in3
+.ima4ge
+.im5m
+.in1
+.in3e
.ink4
-.inu3
+.inn2e
+.int6
+.inu1
+.ire3
.is2a
-.is3tr
-.jor5
-.k6
+.jor3
.ka2b5l
.ka2i
.kamp2
-.ka6t3io
+.ka4t3io
.ki4e
-.klan4
+.kle2i
+.kopf1
.ks2
-.kü1b
-.l4
-.la3b
-.le4a
-.le5ni
-.lib6
+.kus2
+.le4ar
+.li2f
+.li4tu
.lo4g3in
.lo3ver
-.m4
+.lus4tr
.ma3d
-.ma3ge
-.ma3le
-.ma4st
-.me3l4a
-.me3ne
+.ma2i
+.ma3la
+.ma2st
+.md2
+.me2e
+.mel2a
+.men8schl
.men8schw
-.ment2
-.mi2s
-.mi4t
-.n4
-.näs3c
-.ne6s
-.nich2
+.men3t4
+.mi4t1
+.mm2
+.näs1c
+.ne4s
.ni4e
.nob4
-.no2th
-.nus4
-.o6
+.no4th
+.nus2
.oa3
.ob1a
.obe2
-.oben3
-.ober3i
-.ob3l
.oper4
.or2a
.ort2
-.ort6s
.orts3e
.oste2
-.os4tel
-.os8t7ende
-.oste6r5e
+.ost5end
+.os8ten8de
+.oste6re
.ost3r
.ozo4
-.ö6
-.p6
-.pa6r1e
+.öd2
+.pa4r1e
.par3t4h
-.pat4s
-.pe5la
-.pf6
+.pf4
.ph4
.poka2
-.po4st
+.pro1
.ps2
-.r6
+.ram3s
.reb3s2
.re3cha
.rein4t
.reli1
.reli3e
-.res4tr
-.rich5t6e
-.ro3be
-.ro2h
+.res6tr
+.ri2as
+.richt6e
+.ro4a
.ro3m2a
-.rö4s
-.rös3c
-.rut2
-.ru3th
+.rö2s1
.rü1b
-.rü6cker
-.s6
+.rü6cker6
.sali3e
.sch4
-.sen5s
+.se3ck
+.sen3s
.ser2u
-.se2t
+.se2t1
.sha2
-.si2e
.sim3p4
.si4te
.ski1e
-.spra2
-.st6
+.spiege8lei
+.st4
.sto4re
-.t6
-.ta5ge4s
-.ta3mi
-.tan6k5l
+.sucher6
+.tage4s
+.tal2e
+.tan4k3l
.ta2to
.te2e
-.tehe3
+.te2f
.te3no
+.te2s
.te4st
.th4
-.ti4a
+.ti2a
+.tid1
.ti2s
-.ti3ta
-.to2n
-.to4ni
-.ton3s
+.ti5ta
+.tite4
+.to4nin
.to4pl
-.to4st
.to2w
.tri3es
+.tro2s
.ts2
-.tu3ra
.tu3ri
-.u6
.uf2e2
+.ufer1
.ul4mei
.um3
.umo2
.un3a2
.un3d
.un3e
-.unen2
.un3g
.uni4t
.un3s
-.un5s4t
+.uns4t
.ur1
-.urin4
-.ur5o2m
+.ur2i
+.urin4s
+.ur3o2m
.uro2p
.ur3s2
.ut2a
.ut3r
-.ü2
-.v2
+.übe4
.ve5n2e
-.ve4r
-.vol2
.vo4r
-.w2
-.wah2
.wah4l
-.wa3re
-.we2
-.weg3
-.welt3
+.wa2s
+.wei4ta
.wi4e
.wor2
-.wor6t5en
+.wort5en6
+.wor8tend
.wor4tu
-.wun4sc
-.x4
.xe3
-.y4
.ya4l
-.z2
-.zah2n
-.za4s
+.za2s
.zi2e
-.zin6s5t
-.zuch2
-.zwe4
-6a.
-4aa
+.zin4st
+.zwe2
+2aa
a1ab
aa2be
aa1c
aa2gr
-aale5ne
-aa4lö
-a1a2n
+4a1a2n
+4a2ar
aa2r1a
-aa5re
aar3f4
-aar3k4
aart4
-aar3tr
-aas3t
-aat6s3
+aas5t
+aat4s3
a3au
a1ä
+a1b
2aba
-ab2am
-ab1ar
ab1auf
ab1ä
ab2äu
1abd
-a1be
ab1eb
abe1e
-abei3
+abei1
ab1eil
-4a3bel
+2abel
abe2la
-abe4na
-2aber
-a3beri
+a3ber
ab1erk
ab1err
ab1erz
ab3esse
-4abet
+2abet
2abew
1abf
3abfi
@@ -383,337 +355,344 @@ ab3esse
2abi
ab1ins
ab1ir
-ab1iso
ab1it
1abk
-ab3l
-1a2b5la
-3a2b5lä
+ab1l
+1a2bla
+ab5lag
+1a2blä
2able
ab4le.
-ab5li
-a3blis
-3a2b5lö
+ab3li
+ab4lo
+3a2blö
a2blu
-3abn
-2abo
+1abn
a2bo.
-ab4of
-3a2bon
+ab2of
+a2bon
+2abor
ab3r
-ab5rec
+a3bra
+a4brä
+2abrü
1abs
2abs.
abs2a
2absar
ab3s2i
ab3sp
-abst6
+abst4
2abst.
-ab5sta
-ab5ste
+ab3ste
ab3sz
1abtei
-2a1bu
-ab3ur
+2abu
+ab1ur
2abü
-ab3üb
1abw
2aby
+aby4t
1abz
2ac.
-a2ce.
+2aca
+2ac1c
a1cem
+2ach.
ach1a
-ach3ak
a1chal
ach3au
+2achb
a1che
a2ch1e2c
ach1ei
a4cherf
-ach3erw
-a3ches
+a4cherk
+a4cherö
+a4ch3erw
4achf
a1chi
-a3chis
-ach5l
-ach5m
+ach3l
+ach3m
ach3n
a1cho
a3cho.
-ach1o4b
+ach1o2b
ach1or
-ach1ö
+ach3ö
ach3r
-ach3spr
ach3su
-ach6t5erg
-ach4th
+a4cht
+acht5erg
ach2t1o
+ach8traum
+ach8träume.
+ach8träumen.
+ach6trit
a1chu
ach1u2f
ach3ü
-4achv
-2ach3w
+2achv
+4ach1w
+a1ci
ac1in
-2ack.
a1ckar
ack2en
-a3cki
-a4ckin
+a2ckin
ack2se
ack3sl
-ack5sta4
+ack3sta4
+a1cl
acon4n
2acu
a1ç
-2a1d
-4ad.
-ada1b
-a4d1ac
-ad1ama
+a1d
+2ada.
+a3d2ab
+ad2ag
+ad3ama
a2d1an
-3a4d5ap
-a3dar3
-3a2dä
-ade4al
+3a4dap
+a3d2ar3
+4adav
+1a2dä
+ad1c
+1add
+2ade.
+ade2al
adefi4
-ad1ein
-ade1ra
-4ades
+a2dein
+2aden
+ade1r2a
+a2deri
+4ade1s
ade3s2p
-ades6s
-4adi
+ades4s
+ade5str
+2adf
+2adh
+4a3di
adi3en
+5adj
+2ado
ad2ob
-ado3c
-a2dr
-ad5rah
-4ad3rec
+2adp
+2adq
+2ad3rec
ad4res
-ad5ru
-ad1s2
-ad3sä
-ad3sp
+ad3ru
+2ads2
ad3st
ad3sz
-ad4t1
-adt3a
-2ae
-a1e2b
-a1e2c
-a1e2d
-a1ei
-a1el.
+2ad2t1
+ad4te
+ad4tr
+2adu
+2a1e
+ae2b
+ae2c
+ae2d
+a2ek
+a2ela
a2ele
-a2eli
-a1els
-a1em
ae2o3
-a1e2p
-ae1r
-3a2er2o
-a1e2s1
-aes3t
-a1e2x
-a2f1a
-a3fah
-a3fal
-af3an
-a3f2ar
-a3fat
+ae2p
+3a2er2o1
+aes5t
+a2et
+a2ew
+ae2x
+af1a
+a2fak
+a2fan
+a3far
+af4at
+a2fau
2afe
a2f1ec
a2fent
af1erl
-af4f5l
-2a3fi
+a2fex
+af2fl
+af4flu
+2afi
2af3l
+afo1s
+a2fö
af3ra
af3rä
af3re
af3rö
-af3ru
af3s2a
af2sp
-afs4t
-af3ste
-2aft
af2t1a
-af3tab
af2tei
af4t3erl
af2t3r
af4t5re
af2tur
-a2f1ur
+a2f3ur
a1g
2aga
-ag1a2b
-ag3a2d
+ag1ab
+ag1a2d
ag1ar
ag1au
-ag2d
-a2gem
-a5gen.
+ag2di
+ag2dr
+ag2du
+age1i
age4na
+age4neb
a2gent
-age2nu
-age2se
+a4gentu
+age4ral
+2ages
+age2sa
+age4sel
age4si
-age4s3p
-ages3s
-a4g5esse
+age2s3p
+ag3esse
age4s3ti
ag3gl
-2agi
+1aggr
3a2git
-4a2g3l
+2a2gl
ag4la
-ag4lei
-ag5lo
a4glö
-ag1lu
-ag4n
-a4g5na
-a5gnat
-a2go
-a3gob
-a5gon.
-a5gons
-a3gor
+ag2n
+ag4ne.
+ag4nu
a2g3re
a2g3ri
ag4ro
-a3gru
-2ags
agsa2
ag4sam
ag4set
-ag6s5p
-ag7spi
+ags3p
+ag4spo
ag3sta
ag3ste
-ags4tei
+ags4toc
2agt
-2agu
-a2g1und
+ag2th
+a2gund
2ah.
2a1ha
ah4at
2a1he
a2h1erh
-a1hi
-ahl5a2
-ahl1ei
+ahe1s
+a1h2i
+ahin3
+ahl3a2
+ah4l1ei
ah4l3erh
-ahl1o
-ah4lö
+ah2lö
ahl3sz
-ah3ma
-ah3me
-ah4n3a
-ahn5th
+ah4n1a
+ahner4e
+ahnt2
+1ahor
ah1os
-a2h1ö
+a2h3ö
ahr1a
-ah3re
-ah4rei
-ahre6s3
-ah1ri
+ah3r2e
+ahre4s3
+ah3ri
+ahrta4
+ahr6tri
2ahs
-aht3sp
+aht3s
a1hu
ah1w
a1hy
2ai
-ai1a
-aib3l
-ai1er
+aian3
+aid2s
+ai1e2
+aien3
aif2
ai3g4
a3ik.
+ai3ke
ai3ku
a2il
ai2lo
a1ind
-ai3n4e
+ain4e
a1ing
ain3sp
-ai2nu
-ai3o
ai2sa
a3isch.
-ai5s2e
-ais3s
-a2it
+ai3s2e
+aiso2
a3iv.
+aive3
a3ivl
a3ivs
a1j
-aje4
+aje2
2ak.
-a2kad
-2akam
+1a2k4ad
+2akal
+2a3kam
2akar
ak4at
-aka2ta
+1a2kaz
2akb
2akc
2akd
4a1ke
a2kef
-a2kes
+aken2n
a2keu
2a1ki
2ak3l
-ak4la
ak4li
-ak3n
4ako
2a1kr
+4akra
ak3rau
-ak3res
+3akro
2aks
ak3sh
2akta
-ak3t2an
+ak5tan
2aktb
-ak5ten
2aktik
-akt2o
-ak4t5r
-ak5t6ri
+ak2t3r
+ak5t4ri
2aktst
2a1ku
a2kun
4a3kü
1akz
+a1la
+2ala.
al1ab
-a1lac
-ala5ch
+ala5ch2
al1af
-ala4g
+ala2g
al1age
-a3l2al
-a1lala
-al3all
+a3lal
al1am
-al5amp
+al3ame
+alami5
+al3amp
al1ana
-al1ang
+a2l1ang
al1ans
-al3anz
+al1anz
a2lar
a3lar.
a3lare
-a3lari
al2arm
al3arr
ala4s
-al3asi
-al3ass
+al1asi
+al1ass
+2alat
al1au
al3aug
a1lä
@@ -722,615 +701,627 @@ alb3ein
alb3eis
al4berh
al4b3erw
-al2b3l
+al2b1l
+alb3li
al2boh
al2br
alb3ru
alb3s
-al2da
al2dä
-al3dri
-alds2
-ald3st
+al2dr
+alds2t
al3du
2ale
3a2l1e2b
3a2l1ef
a4l1eh
a2l1ei
-a4lein
+a4l3ein
a2l1el
+alen1
al3ends
a2leng
-al2ent
-a2le2p
+ale2p
al1epo
-4a5ler.
a2l1erf
a2l1erh
-a2l1erl
+al1erl
+3alerm
a2l1ert
3a2lerz
a2l1esk
ale4t
-al3eta
-al3eth
-a4l1eu
-3alex
-al1exi
+al1eta
+al1eth
+a2l1eu
+a4leur
+3a2lex
+alf4r
+3algi
al2gli
2ali
-ali4e3ne
+ali4ene
ali4nal
-ali5ne
-a2l1ins
+al1ins
a2linv
-al2k1ar
+alk1ar
1alkoh
-alk3s4
-al2lan
-al2l3a6r
+alk3s2
+alks4t
+al2lab
+al2l3a4r
al2lau
-al4lec
al3lend
all5erfa
al3les
alli5er.
alli7ers.
+al2lob
+3almb
2alo
-a2l1ob
+a2l1o2b
alo2ga
al1ope
al1orc
-al1ö
+a2l1ö
al2ös
3alpe.
1alph
al3skl
-al3sp
al4spal
al5s6terb
-al2ta
+al3sun
+al2tak
al3tam
alt3eig
-al4te4l
al4t3erf
-al2tö
+al2tre
al2tri
alt3ric
al2tro
+alt2se
alt4stü
-3alty
a1lu
al2uf
a2lum
+al1umb
al1ur
4aly
-am2a
+alzer4z
+al2zw
+2am.
+2am2a
amab4
-ama5d
-am4e
+amad2
+ama3g
+2amä
+2ambiq
+2am4e
4ame.
a2meb
-ame2n
+ame2n1
amer2a
a2meri
-a4mese
-a5met
+ame3ru
+a4mesh
+a3met
a2mew
+2amf
+a3mi.
a3mie
-a3mil
2a3mir
-amit2a
-ami5ti
+a3mis
+ami3ta
+ami3ti
+2amk
+2aml
2ammal
+am2mei
am2min
+2amml
ammu2
-2amo
a2mö
-2amp
-amp2f3a2
+amp2fa2
am3pr
-am2s
+2am2s
am3sa
-am3so
-am3sp
+am4schl
am3str
-3amt.
+1amt.
am2t1a
am2t1ä
am4tel
+2amtem
am4t3ern
-am2to
-am2tö
-am4t3r
+am4tö
+am2t3r
+am4tre
am2tu
-4amu
-am3unt
-4ana.
+2amu
+2ana.
2anab
ana3c
-a3na3d
anadi3
a3nak
+an1alg
+ana4lin
+2anam
2anan
-an3ara
-2anas2
-2anat
+2ana1s4
an1äs
1anb
-3anbr
-an5cht
-4and.
-an5de6s
-an2d1ex
-2ando
-an4d5rü
+2anbu
+an3ch
+2and.
+an3dac
+and4art
+andel4s
+ande2s
+an2dex
+an2d3rü
and4sas
-an2d1ur
-4ane
-an3e4c
+and6spas
+and3ste
+and2su
+2andu
+and1ur
+2ane
+an3e2c
a3nee
+an2ei.
an3eif
-an1e2k
-5a4n1erb
-an3eth
-1anfä
+an1e4k
+3a4n1erb
+an1eth
+1anf
+2anfi
anft5s
+an3f2u
4ang.
3angeb
-an4g5ei
-ang5erl
-ang5erz
+an2g1ei
+an4g3erf
+an4g3erl
+an4g3erz
2angf
2angh
2angie
-ang3l
+ang1l
an2gla
-an2glä
-ang5le.
2ango
-ang3ra
+ang1r
+an2g3ra
4angs.
-ang5sc
-ang6s5po
+ang4s3po
1anh
-4a3ni
-ani3els
+2a3ni
+an2id
ani5ers.
-5a4nim
-4anj
+3a4nim
+a4nins
+2anj
2ank.
an2k1an
-an3k4l
+an2kei
+an3kl
an4klö
an2k3no
-an2k1r
-ank3ra
-ank3rä
-ank5ti
+ank1r
+an2k3ra
+an2k3rä
+ankt4
an2ky
1anl
2anmu
2ann
3an3na
+ann2ab
3annä
-an5n4e
-an3od
-an1or
+an3n2e
+an1od
+a3nol
+a2n1or
+a3nos
a1nö
+2anpr
1anr
-2ans.
-3ansä
+1ansä
1ansc
-an5se
ans2en
-an6seu
+an2seu
+2ansk
an3skr
-an2s1pa
+ans1pa
1anspr
-an3s2t
-an5stei
-an5str
an3s2z
2ant.
-ant2a
an2t3a4r
1antá
1antei
3antenn
-an3th
-ant2he
+an3t4he
1anthr
2anto
1antr
+ant3rin
an2tro
-3antw
-4a3nu
-a4nunt
-a5nus
+1antw
+2a1nu
+anu3s
a1nü
1anw
2anwet
-2anz
-3anzah
-3anzei
-anz5erst
+2anzb
+1anzei
+2anzg
an2z1i4n
-3anzu
-3anzü
-an2zw
+2anzs
+1anzü
+2anzw
+an2zwi
+2ao
ao1i
a1op
a1or
-a1o4s5
-aot2
+a1os3
+ao3t2
a3ot.
-ao3ts
a1ö
a1p
2ap.
-4apa
+2apa
2ape
+a2pef
+a3pel
a2pé
+a2pf
ap2fa
a3pfl
a3phä
-ap1hel
-2a2p3l
+a2pht
+2ap3l
ap2n
-apo1s
a2pot
-ap3pl
+3appl
+ap3pu
2apr
-2apu
+2a3pu
+2aq
2ar.
-2a1ra
+a1ra
a3ra.
-ar2ab4
+ar2ab
ar3abt
ara3d2
a2r3al
-ar1ang
-ar1ans
-ar3anz
+a3ra3li
+a2r1ang
+a2r1ans
+a2r1anz
a2r3app
-ara4st
+2a2rar
a2r1au
a1rä
+1arb
2arb.
4arba
ar2bau
ar2bec
-arb3eie
-arb3eim
2arben
2arbi
-ar2b5l
+ar2bl
2arbr
ar2bre
2arbs2
-arb3sp
2arbt
2arbu
ar2b3un
-ar1c
-1archi
-ar2dr
+1ar1c
+ar2dro
2are
-4are.
a2rea
-are5b
-a2ref
ar1eff
-a4re3g
+a4reg
+a2reh
ar1ehr
a2rein
-a5ren
-a2rena
-a2rene
+a4rek
+a3ren
+aren4se
are3r2a
-a3r2erf
+ar2erf
a2r1erh
a2reri
+a2rerl
are3u
ar2ew
2arf
-ar2f1r
-arf3ra
+arf1r
+ar2f3ra
ar2gl
ar2gn
2arh
-4a1ri
+2ari
ar2ia
-ari3e2n
-arien3e
+ari3e4n
ari3erd
ari3erg
-a2r1im
-ar1ind
-ar1ins
+ar1im
+arin3it
ar1int
a3riu
-2ark
-ark5amt
+ar2kal
+ark3amt
ar2k1ar
ark3aue
-ar2kl
ark3lag
ar2kor
-ark1r
ar4kri
-arks2
+ark1s4
ark3sa
ark3sh
-ar4les
-2arma
+ark4tre
+ar2les
arm2ä
-arm3erk
-arm2or
-2arn
-ar5n2e
+ar4merk
+ar3m2or
+ar2nan
+arn2e
2a1ro
ar1ob
-ar3o2d
-a3rodo
-a3rol
+a2r1o2d
a2r1op
a2ror
-2arp
-ar5pr
2arr
-4arr.
ar2r3ad
-arre4n
+arre4n3
ar2rh
arr3he
-2ar2s
-ar3sa
+2arsa
ar4schl
-ar4schr
-ar5se
+arse3
ar3s2h
-ars3k
+2arsi
+ar2st
ar3sta
-ar3su
-ar2tau
-1artd
-ar4t3erl
-art2ho
+ar3t2e
+ar2the
+ar3t2i
artin2
2arto
-ar2t3r
+art3r
+ar4tram
+ar6tri
2arts
-2a1ru
-ar1ums
-ar3ü
+2aru
+ar1uh
+ar1um
+a2rü
2arv
+arwa2
2ary
ar2zä
2arze
-1arzn
1arzt
ar2z1w
-2as
-as2al
-as3ala
-a4s3au
+as1ala
+as3au
a2s1ä
-a6sca
+a2sca
+a3sche
a4schec
+a3schi
asch3la
a2schm
+a3schu
4as2e
a2seb
-ase3le
-aseli5
a2s3e2m
a3ses
4ash
a3s2hi
-a5si.
-4asis
+asin2g
+2asis
+aska3s
a3skop
-as1o2f
-a3sol
-a3som
+a2s1o2f
as1or
-a2s1ö
+a2sö
a2s1p
as3pan
-as3pe
as2ph
+as2pi
as2po
-as2pu
+a3spu
as3s2a
-as5se
-as6sei
-asse3le
+as3s2e
+as4s3ei
as3s2i
-as5so
as2s1p
as2st
ass3ti
-as4sto
as3str
-a2st
-4a4s1ta
-a5s4tas
-as2tau
-a5stä
+as3stu
+2as3ta
+a1s4tas
+as4tau
as3te
+as2th
as3ti
-4a3str
-ast3rau
+as3to
+as4tof
+2astr
ast3rä
-as4t3re
+as6t3re
a2sü
-3asy
+aswa2s
+3a2syl
a1ß
aße2
+aßen3
2a1t
-4ata1
-a2t1ab
-ata2be
+ata1
+at1ab
at2af
-at4a5g
-at1akt
+at4ag
+a2t1akt
+ata3l
a3tam
at1apf
-a2t1au2
-a3tau.
-at1än
+at1au
+a2taus
+a2t1ä
at2c
-4a3te
-a4teb
-at1eig
-a4teli
-a4tep
-ater3st
-a4tew
-4atf
-4atg
-at2he
-5athl
-a4thr
+at2e
+4ate.
+a2teb
+at3eig
+a2teli
+4aten
+a2tep
+ater3s2
+ate2ru
+4ates
+at2h
+at3ha
+4athe1
+3athl
4a3ti
-at1int
+atil4s
+ati2st
3atm
4atmus
ato4man
+4ator
a2t1ort
-a2t1ö
-4atp
+at1ö
4atr
atra4t
at3rä
at3re
at3rom
-at2s
-at3sc
+at2sa
+at4schn
+at2se
at4set
-ats1p
-3attac
+at2si
+at2so
+at2s1p
+at3ta
+at4tak
att3ang
-at2t1au
+at4tau
at2tei
-at5thä
-att3rau
-at4t3rä
-atts4
-4atu
+at3t4hä
+at2t3rä
+att3s
a3tub
-atu4n
-atu3ren
-atu4rer
-at3w
-4atz
+atu2n
+a3tü
atz1er
+at4zerk
+at4zerw
at2z1in
-atzt2
-atz3th
+at2zo
+atz3t2
+at2z1w
a2u
2au.
-au1a2
+2au1a2
2aub
-au2bl
-au2bri
+au2bli
+au2blo
4auc
-auch4se
auch3ta
-au3di
au2dr
2aue
aue2b
-aue3re
au5erein
-au5erl
-aue4s
-au3et
+aue2s
au2fa
auf1an
2aufe.
2aufeh
auf1er
-au5fer.
+au4ferk
+auff4
3aufn
-au2fo
+2aufs.
2aug
-au3g6e
4augeh
-2au1i
+4au1i
au2is
-4auj
-au2kl
+2auj
aule2s
-aul3ese
-aul4s
au3lü
4aum
au2mal
-au2mar
-au2mau
-au2mer
au2m1o
aum3p2
-aums2
-aum3st
-aum3sz
-4au3n2
-au4nio
-aun3k
-aun3s
+aum3s6
+4aun
+au3n4a
+aun2e
+au2nio
+au1nu
a4unz
au1o
-aup2
+2aup2
+aup4ter
2au3r2
au2s1ah
ausan8ne.
-4au2sc
-au3schl
-au3schw
-2ause
+au2sau
+2ausc
+au4schm
+au4scho
+1ausd
aus3erp
au4s3erw
+3ausf
+1ausg
+1ausl
au2so
-au2sp
-aus3s4
+au2spr
+1ausr
+aus3s2
3aussag
aus4se.
-au2st
-aus3tri
+auster6m
+aus5tri
+1ausü
+1ausz
2aut.
-au3tan
-au2tä
-aut1äu
+au2t1äu
2aute
+au4ten4g
au4t3erh
-3auto
+1auto
2auts4
-aut5st
+2auu
+2auw
2aux
+2auz
auz2w
2a1ü
2a1v
-av4a
-ava3t
+a3v4a
+ava3t4
+4avi
a2vr
2a1w
awi3e
a1x
-ax2a
-ax3an
+ax4am
ax2e
2a1ya
a1yeu
-ays2
-aysi1e
-ay3ste
+ays4
+aysi1
+ay3t
2a1z
-az4a
-azo3
+az2a
+az2o
az2u
ä1a
ä1b
@@ -1345,39 +1336,39 @@ az2u
äch4st
ä1chu
ä1ck
+äck2e
ä1d
-ä3di
-ä4d1ia
-ä3do
-ä2d3r
-2ä3e
+ä2da
+ä2d1ia
+ä2dr
+äd2s
+2ä1e
äf2fl
-äf5l
+äf3l
äf3r
äf2s
äft4s3
ä1g
äge1i
-äges4
+äge3s
ä2g3l
-ä3g2n
+äg2n
ä2g3r
-äg3s2tr
+äg4ra
+äg3str
1ä2gy
äh1a
2ä3he
ä3hi
ähl1a
-äh5l2e
-äh6l3e4be
-äh3li
+ähl2e
+äh4l3e4be
2ähm
-äh5ne
-äh5ri
+äh3ne
+äh3ri
2ähs
-2äht4
-äh3tr
-ä3hu
+2äh3t4
+ä1hu
äh1w
ä1im
ä1is.
@@ -1390,38 +1381,41 @@ az2u
ä1la
älbe2
äl2bl
-äle3ru
+2äle
äl2l1a
äl2p3
-äl2sc
+äl4schl
ä1lu
-ä3me
ämi3en
2äml
+äm2s
ämt2e
2än.
+än5de
än2dr
-2ä3ne
+2äne
äne2n1
-än2f3
+äne1s
+än2f5
2änge
än2gl
än2gr
äng3se
2ä3ni
-än5k2e
+änk2e
än2k3l
än2kr
änk2s
-än5n4e2
+än3n4e2
2äns
-än4s3c
+än2s1c
änse3h
ä1on
ä1pa
+äp2pl
äp2pr
-äp4s3c
-äp2st
+äp2s1c
+äp4st
1äq
ä2r3a2
är4af
@@ -1430,111 +1424,109 @@ az2u
4äre
ä2r1ei
äre2n
-ä2r3ene
+ä2r1ene
är2gr
-ä1ri
är1int
-är2k5l
+är2k3l
ärk2s
+är4ment
+ärm2s
är1o2
ä1rö
ärse2
-är6si
+är4si
är2st
ärt4e
+är2th
ärt2s3
-ä1ru
-är3ü
-är2z1w
-äs2a
-äs4e
-äse3g
-äse3re
+ä2rü
+1ärz
+är2zw
+ä5s4e
+äse3g2
äser4ei
äse4ren
-äse3r2i
+äser2i
äse3t
äskop2
+äskopf3
ä3s2kr
ä2s1p
-äs4s3c
+äs6s1c
+äss2e
äs4s3erk
-äs4st
-ä4s3t
-äs5ti
+äs2st
+ä4s3t2
äs4tr
ä3su
ä1ß
äß1erk
-2ät
-ä4t3a2
+ä4t1a2
ä3te
-äte1i
+ät2e1i
+ätein2
äte2n
-ät2ha
-ä1to
+ät2h
ät1ob
-ät3r
+ä2t3r
+ät2sa
ät2sä
ät4schl
ät4schr
ät2s1i
äts3l
-ät3so
-äts1p
-ät2st
-äts3ti
-ät2tr
-ä3tu
-ät5ze
+ät2s1p
+ät2s3t
+ät4tr
+ät2zw
äu2br
äu1c
+äude3
äu3el
ä2uf
äuf2e
+1äug
äug3l
-2äul
+4äul
2äum
äu2ma
-äum2s
-äums1p
-ä2u3n2
-2äu5r
+äum4s5
+ä2un
+äun2e
+äu1nu
+2äur
2ä3us.
-äu2sc
-äu6schä
äu4schm
-äu5se
-ä1usg
-ä1usk
-ä1usn
+äu3se
+ä3usg
+ä3usk
+ä3usn
äu2sp
-äus4s3c
+äus2s1c
1äuß
äu2tr
4ä1v
1äx
ä1z
â1t
-6b.
-1ba
+á1n
+ba2bl
2babs
-ba3char
bach7t4e
backs4
-2b3adr
-2baf
+b1a2dr
+2b1af
3bah
bah2nu
-bah5re
-bais4
+bais2
ba2ka
-ba2k3er
+ba2k1er
ba2k1i
-bak5l
+bak1l
+bak1r
ba2kra
3bal
-ba1la
+bal2a
bal4l3eh
bal6lerg
bal3th
@@ -1542,84 +1534,77 @@ bal3th
ban2a
3b2and
ban2dr
-ba3n4e
-ba5ner
-2bang
+ba3n2e
+b1ang
ban2k1a
ban4kl
+ban2kr
2banl
2b1ans
-b3anz
-ba2ran
+ban3t
+b1anz
bar3b
-b2ard
bar3de
ba2rei
bar2en
+bar3n
bar3zw
3bas
-ba5sa
+ba3s2a
ba2sc
-ba4st
-ba2to
-bau3b
+ba2st
bau3g
-bau3s
-bau1s2k
+bau1s
+bau3s2k
+bau3sp
ba1yo
3b2ä1c
-1bäe
-1b2är
-1b2äs
-1bäu
-b1äug
-bäu3s
+b2är
+b2äs
4b1b
-b3ba
-bben3s2
+b3be
+bben3
+bbens2
bbe4p
-b3bi
-bb5ler
-b2bli
-bb3lin
-b3blo
-b3blö
-bbru2
+bb3ler
+bb2lö
+bbru2c
bb2s
bbu1
-b7by
-2b3c
-2b5d
-bde1st
-bdo3
-bdu3s
-1be.
-3be3a
-be5an
-be4au.
+2b1c
+2b3d4
+bde1s
+3be.
+3bea
+be3an
+be3ar
+be3as
+3beb
b2ebe
1be1c
be2del
bedi4
be1eh
+be2erk
be1erl
-be3eta
-3bef
-be3g4
-2beier
+be1eta
+3bef4
+be3g2
+2b1eier
bei1f4
+beik4
beil2
bei3la
-2beime
-3b2ein
-bei5na
+2b1eime
+b2ein
be1ind
-be1in4h
+be1in2h
bei3sc
beis2e
-bei3st
+bei1st
beit2s
3bek
+3bel
be3las
be3lec
be3lei
@@ -1627,59 +1612,54 @@ be2l1en
be2let
be3li
bel3la
-bel3sp
bel3sz
-belt4
-bel3ta
-bel3tr
+bel3t4
1bem
1ben.
-be3na
-be4nal
ben3ar
-be4nau
-be3ne
-ben4erg
-be4ners
-ben3g
-be3ni
-ben4se
-ben2sp
-ben4su
-ben4th
-3b2enti
+ben3dor
+be3nei
+3ben3g
+be3n2i
+ben3n
+ben2se
+ben4spa
+ben4spr
+benst4
+ben2su
+2bentb
+b2enti
+ben5t4r
b1ents
-4bentw
-ben1un
+2bentw
+ben3un
ben3z2
be1o
be1ra
ber3am
be2ran
-ber3as
-berd4
-ber3eiw
-be3rel
+ber4ei.
+be4r3eiw
+be4rerk
bere4s
-ber3esc
+ber6gan.
ber4in.
ber3iss
ber3na
b1ernt
-be1rop
+be2rob
+be3rop
ber3st4a
-ber3th
be3rum
-1be1s
-be3sa
+3be1s
+bes2a
be2s1er
be3slo
-be3spo
-be3spr
-bes5s4e
+bes2po
+bess4e
b3esst.
bes3sz
-bes2to2
+be6stein
be4s3tol
be3s4ze
3bet
@@ -1691,103 +1671,104 @@ be1ur
1bez
2b5f4
bfal2
-4b3g4
-b5ga
+2b1g2
bge3
-bge5n
bges4
-2b3h
+2b5h2
+bhut2
1bi
-bi1ak
-bibe4
-bi2e
-bi3ens
-bi3ent
+bi3ak
+bib2
+bibe2
+bien3s
bie2s
-bi3k2a
+bik2a
bi2ke.
bi2kes
-bi3ki
-3b2il
-bil4a
-4b3illu
+3bil
+bil2a
+bi2lau
+4b1illu
bi2lu
2b1inb
-bi3n2e
+bin2e
2b1inf
-2b3int
-bi2o3
+bin3gl
+2b1int
+bi2o1
+bio3d
bi3on
biri1
-bi5se
+bi3se
+b1iso
bi2sol
-bis4s3c
-bi4st
-bi2t
-b2i3ta
-bi3te
-bi3to
-bi3tr
-bit3st
-2bi4tu
-bi5tum
-b2i5tus
+bi2sp
+bis2s1c
+bi2s5t
+b2it.
+b2it2a
+b2ite
+bi2tu
+b2i3tus
biz2
-bi3za
-4b3j
+4b1j
bjek4to
-2b3k4
-b2l2
+2b1k4
+bl2
2bl.
-bla3b6
-4b5lad
-b6lanc
-6blasser
-b6latt
-b3law
-3b4le2a
+bla3b4
+b3lad
+b2lanc
+3blat
+b2latt
+2b3law
+b2le
+3ble2a
b3leb
-2b5leg
-b3leh
+2b3leg
2b3leid
-b5lein
-blei3sc
-ble3l
-b4lem
-b4ler
-b5lese
-ble5sz
-3b4let
-2b3lich
+b3lein
+3blem
+3blen
+b3lese
+ble3sz
+b4let
+b3leu
+2blich
3blick
-b4lie
-2b3lis
-b4lit
-3b6litz
-1b4lo
-b6loc
-b5lok
-2b3lun
-blu4ter
+b2lie
+2blig
+bling4
+b3lis
+b2lit
+3blitz
+b2lo
+b4loc
+b3los
+2blun
+3blut
3blü
-2b3m
-6b3n2
+2b1m
+4b3n2
bni2
-bnis3
-1bo
+bnis1
+bo4a
bo5as
-bo2b3l
-bo3b4r
+b1ob3
+bo2bl
+bo2br
bo2c
bo3ch2
bo3d2
+boe1
bo2e3i
-2b3of
-bo5fe
+2b1of
+bo3fe
bo1is
bo2l1an
3bon.
-bon2d1e
+bond1
+bon2de
bo2ne
3bons
b1op
@@ -1796,272 +1777,253 @@ bo4rä
bor2d1i
bor2d3r
bo2rei
+bo4rig
bor2s
b1ort
-bor4tei
bor2t3r
bo2sc
-bo5se
bo4s3p
-3bot
-bote5n4e
+bote3n4e
bo3th
bot2st
+bo2xi
bö2b3
-2b3öf
-bö3sc
-2b3p2
-bpa4g
-2b3q
+2böf
+2b1p2
+bpa2g
+2b1q
b2r4
2br.
b4ra.
2b3rad
-b6rah
-b6ra3k
+b4rah
+b4ra3k
bra1st4
+3brä
+brä4u
2bre.
+3brea
6b5rechte
2b3ref
2breg
b3reif
-b3rek
3brem
2b3rep
b4rer
-b4ri
-2b5riem
+2b3riem
bri2er
-2b5rig
-b5ris
-b5roh
+2brig
+b4rio
+b3roh
2b3rol
+b4ron
b4ruc
-brust1
+bru4s
+brust3
+bru2th
+3brü
4b1s
-bs3ad
-bs1an
+b2s1ad
b3sand
bs3ar
bsat2
b3sä
b4sär
-b3sc
-b4schan
-b7schl
+bs2äu
+b5sc
+bs2ca
+b6schan
+b6schef
bs4cu
-b3se
-b5se.
-bs1e2b
-b5sel.
-bs1ele
-bse2n
-b5sen.
-bs1ent
-bs1er
-bs5e4r3in
-b5ses
-b5set
-bs1ex
+b3se.
+bse2b
+b3sel.
+bse2n1
+b4s1erf
+bs3e4r3in
+b4s1ers
+b3s2es
bsi4t
-bs5ko
bs2ku
b4sl
b2s1of
-bs1op
bso2r
b2sö
-bs1par
bs2pl
b3s2pu
-bs5s2
+bss2
bs2t
bst1a2b
-bst1ac
+bst3ac
bst1ak
-bst3ank
bs3tät
-bs4tem
-bst1er
-bst1h
+bst3er
+b2stip
b3sto
+b4stod
+b3stö
b2s3trä
bs3treu
-b3stu
+bs4tri
b3stü
b4stüb
b2s1un
-4b1t
-b3ta
+4b3t
btal3
-bta4s
btast3r
-b3tä
b5te
-b2t1h
-b3ti
-bti2s
-b3to
-b3tr
-bts2
-b3tu
+b4th
+btil4
+bt4r
+b4ts2
btü1
-b2u
bu2chi
bu2e3
bu2f
-bu5li
+bu3li
bul2la
2b3umk
-bu3na
-bunde6s
-bun4th
-b4urg
+bung4
+b2urg
bu3r4i
-bu2s
-bus3cha
-bu3se
-bu4s1er
-bus1p
-bus1u
-bu3ße
-1b2ü
+bu2sa
+bu4s3cha
+bu4schl
+bu4schm
+bu4schw
+bus1er
+bu2sin
+bu2s1p
+bu2s1u
bü1c
-büge4
bügel3e
-2b3v
-2b5w
-1by
-by1a
+2b1v
+2b1w
+3by1
by3p
-by4t
-by5th
+bys2
2b3z2
-b5ze
-bzei2t1
-2c.
-1c4a
-2ca1b
+bzeit1
+1ca
+2c1ab
ca1ch
ca2e3
-3caf
ca3g4
ca1h
-3cal
-ca3la
cal3t
3cam
+c4an
ca2pe
-ca3pel
3car
car3n
carri1
ca3s2a3
-ca4st
-ca3th
+cas3t
+ca3t4h
ca1y2
cä3
-4c1c
-cch2
-4cd
-c1do
+cäs2
+2cc
+c1ce
+c1ch2
+c2d2
+c3do
2cec
ce2dr
2cef
ce1i
2cek
-3cen
+1cen
cen3g
-cen3ta
-ce3n1u
1cer
-ce1ro
+cere3
ce3sh
-ce1st
1cet
2ceta
-cet3am
-ce3ty
ce1u
1cé
2c1f
c4h
4ch.
2chab
-ch3abi
-ch1ah
-ch1ak
+ch3a2bi
+cha2ck
+2chaf
+2ch1ak
ch2anb
-5chanc
+3chanc
ch1ang
ch3anst
4chanz
-3chao
-ch1ap
+1chao
4char.
-ch3arm.
+1chara
3charta
cha2sc
-chasi1
3chato
4chatu
ch1ärm
ch1äs
1châ
2chb
-4chc
+2chc
2chd
ch3e4ben
-ch3echt
-3chef
-che2fe
+1chef
+3chef.
+che4fer
+3chefi
+3chefs
4chei
ch1eim
+4chelem
che4ler
4chents
4chentw
cher3a
che3rei
6chergeb
-2cherö
+cher6zie
ch1ess
-2ch3eta
-2ch1ex
+2cheta
+2ch1e4x
1ché
2chf
2chg
2chh
-ch1ia
-3chia.
-3chias
-6chind
+1ch1ia
+2chic
+chi3na
+4chind
3chines
-ch1inf
-2ch1inh
+2chinf
+2chinh
ch1ins
ch1int
-ch1inv
-3chiru
+2ch1inv
+1chiru
2chj
2chk
-2ch2l2
+2chl2
+ch2le
ch3lein
-2ch2m
-ch4mu
+ch2lu
+4ch2m
2chn4
+chner8ei.
2chob
-cho6cker
cho2f
ch1off
ch1oh
ch1orc
2chp
-ch2r2
+ch2r4
4chre
+chre3s
ch3rh
-3chron
+1chron
4chs
-4cht
+2cht
2chuf
2chuh
2chum
@@ -2069,49 +2031,47 @@ ch3rh
2chunt
4chü
2chv
-2chw
+4chw
2chz
-1ci
ci1c
ci2s
c1j
c4k
4ck.
ck1a
-3cka.
-ck5aa
+1cka.
2ckac
+1ckag
2ckal
-ck5am
2ck3an
cka4r1
2ckau
ck1ä
-4ckb
+2ckb
2ckc
2ckd
1cke
-3cked
4ckeff
-4ckeh
+2ckeh
ck1ehe
-4ck3ei
-3ckel
-3cken
-4ck3ense
+4ck1ei
+4ckense
ck1ent
4ckentw
cke2ra
-cke5reig
+ck2ere
+6ckergeb
+ck1erh
4ckerhö
4ckerke
+ck2ern
2ckero
2ck1err
-cke2s
+4ckerze
2ck1ese
2ckex
-4ckf
-4ckg
+2ckf
+2ckg
2ckh
1cki
2ck1id
@@ -2119,34 +2079,33 @@ ck1im
ck1in
3ckis
2ckk
-2ck5l
+2ck3l
2ckm
2ck3n
-2ck1o2
-ck1ö
+ck1o2
2ckp
-2ck5r
+2ck3r
4cks
-ck3spo
-4ckt
-ck5t2e
-ck3ther
-3cku
-4ck1um3
-4ckunt
-4ck1up
+ck4stro
+2ckt
+ckt2e
+1cku
+2ck1um3
+2ckunt
+2ck1up
2ckv
-4ckw
+2ckw
1cky
-4ckz
-3c6l2
+2ckz
+c4l2
clet4
-clo1c
-c2m
+clo1
+1clu
+c2m2
3co
co2c
co3ch
-co2d
+co2d2
co4der.
co3di
coff4
@@ -2154,449 +2113,439 @@ coi2
co1it
co2ke
co2le
-co5l2o
+col2o
com4te.
comtes4
con2ne
co2pe
co1ra
-co4re
-cor5t
+cor3d
+co3re
cos4
co4te
cô4
2cp
2c1q
-c4r2
+1c4r2
cre2
cre4mes
cry2
-2c2s
+2cs
cs2a
-c3se
-cst4
-c3s2tr
-2c1t
+c2si
+c1s4tr
+4c1t
cte3e
-c3ti4
-c3to
+cti2
+cti4o
ctur6
3cu
cu2p3
-cup1e
cussi4
1cy
-2cz
-4d.
+2c1z
3da.
da1a
-2dab
-d2abä
+2d1ab
+3d2abä
da2ben
-3d2a1b4l
-3dac
-dach5a
+3d2abl
+da2bre
+dab4rü
+2d1ac
+dach3a
da2cho
-4dachse
-3dad
-da2de
-da3dr
-da1er
-2d1af
+dach1s
+4d3achse
+d1af
d1ag
-dagi4
+dagi2
dah3l
da1ho
3d4ai
da1in
da1is
-da1l2a
+dal2a
2d1alar
-dal3b4
-da1lö
-2d1alt
-2d1amma
+dal3b2
+da3lö
+d1alt
+d1amma
2d1ammä
damo3
-damp7f8erf
+d4amp
+dampf8erf
2d1amt
d2an.
-2dana
-dan2c
-2d1and
-2d1ang
-3dank
+2d1ana
+dan4ce.
+2d1an3d2
+d1ang
+2dange
dan4kl
-dan4k1o
-dank3r
-2danl
-4d1ans
+dan5kla
+dan2k1o
+dan2kr
+2d1ans
+2dantw
2danw
-d4anz.
+d2anz.
+4danzi
2d1ap
d2aph
4dapp
da2r3a
-2darb6
+2darb2
3d2arl
dar2ma
dar2m1i
da2ro
-2darr
-dar3s
-2dart
-d1artg
+d3arr
+d2ar3s
+d1art
da2ru
d2arw
-das4
+da1s
da3s2h
-da5s2t
-3dat
-da3ta
-dat2e4
+das4t
+dat2a
+dat4e2
+da3tei
+date4n
4d3atl
4datm
-3dau3e4
+dau3e
2d1au2f
-2d1aus
+2dauk
+2d1aus3
+4daush
2d1äh
2d1ämt
2d1änd
2d1äng
2d1äp
-2d1ärz
-dä2um
-dä1us
-2d7b6
-dbu2
-2d1c
-4d3d2
+2därz
+dä2u
+dä3us
+2d1b4
+dbu2c
+2dc
+d1ch
+dco4r
+2d1d2
ddar2
-ddar4m
-d5de
+d3dh
+d5do
1de
-de3am
-de3an
+de2ad
de3as
-de5a4t
-de3b6
-4d1e4ben
+de3a2t
+de3b4
+2d1e4ben
3de1c
+de4ca.
de2cka
deco3
-de1e2
+de1e4
2d1eff
-deg4
+deg2
+de3gl
dehe2
de3ho
2d1ehr
-2dei
+d1ei
d2eic
3d2e1im
+dein2d
+dein2s
de2l1a4g
de4l3aug
-de4l1än
+del1än
del1ec
-de3l2ei
+delei4g
+de3lein
2delek
2delem
-de2len
-2d1elfm
-3delik
+2delfm
delle2
del4leb
del4lei
de2l1ob
+de2lop
de3lor
de2lö
+del4san
+del5sc
del2s5e
del2so
del2s1p
del5ster
-delt4
-del3ta
-del3tr
-de6ments
+del3t4
+dem2ar
2d1emp
d2en.
dend2
-dend4s
de4n3end
+4denerg
den3g
+d2enh
de2ni
-den4k5li
-den3sc
+den4k3li
+4den4sem
den4sen
-dens5tau
+den6s5tau
den3th
2dentw
-de2ob
-2deol
+de1nu
de1on
-deo4no
depi2
d4er.
+dera2b
de1rad
-de2r3ap
+de2rap
der2bl
-de2r1e2b
+2derdb
+de2re2b
de4reck
der3edi
+derer3
de3r4erb
de3r4erf
de4r3ero
+derer4t
4d3erhöh
-de5ric
-de3rik
-4d3erklä
-de1ro
-de2rop
-d3ersat
-dert2a
-der6t5end
-dert2s
+3derie
+derin4f
+4derklä
+der3m2
+4derneu
+4d3ersat
+der3tau
+der6t5en6d
de3ru
de4ruh
de4rum
-de2s
-de4s3a
-de5sac
-de5säc
-des1än
-de5sc
-de3se
-des1en
-des1in
-des1o
-des1p
-des3pot
-des3s4
-des5se
+des1
+de2sa
+de3sac
+desa4g
+de4sam
+des2äc
+de2seb
+de4seh
+de2sei
+des3elt
+de2sen1
+de4set
+de2sin
+de2sor
+de2sp
+des3s2
dest5alt
-de5stang
-de5star
-de5stat
-de7stel
-de4sto
-de3str
+de2sto
dest5rat
-de5stri
-de5stro
-des1u
-deten6t
-2d3etw
+de4stre
+des4tum
+de2su
+det2
+deten4t
+2d1etw
de1un
de1url
-de1us
+de3us
de2xis
2dexp
-2d3f
-2d1g
+2d1f4
+2d1g2
dga2
d2ge.
-d3gem
-dge2ta
-dge6t5e
+dge4t1e
d3gl
2d1h2
-dhas2
+dha1s4
d2his
-d3hu
1di
-3di.
-di2a
di4ab
+di2ad
di4am
-dia5ne
-di4at
3dic
di1ce
-dich3te
-di2de
di2e
di3e2d
-die3ner
+die4neb
di3eni
di3ens.
-dienst5r
-die4s3c
-die2t5
+die2s3c
+diet3
+die2th
dige4s
-di3gn
-di3ka
-dil2s3
+dik2a
+dil2s5
2d1imb
din2a
2d1ind
2d1inf
2d1inh
-2d1init
-4dinner
+2d1in1it
+4d3inner
2d1ins
2d1int
-di2o3b
-di3o2d
-di3p
-di2ra
+di2ob
+dion3s
+di1p
di4re.
di2ren
di2ris
2d1irl
+di2sp
2d1isr
-dist4
-di4ste
+dist2
+di2s5te
di2ta
-di3te
-di4tei
di4teng
di4t3erl
di4t3erm
di4t3ers
-di2t3r
+di2th
+di4t3r
+dit3s
di2tu
-diz2
-di3zi
+di5v
+di3z2
2d1j
2d1k4
-4d1l
-d3l2e
-dle2r3a
-2d5m
-d3me
-4d1n4
-d5ne
+4d1l2
+d3la
+d3le
+dle2ra
+dli2f
+dl3m
+dl3s
+2d3m2
+4d5n2
dni2
dnis1
-d3no
-3do.
-2dob
-3doba
-d1o2be
+d1ob
+d2oba
+2dobe
dob4l
-3dobr
-3doby
-do2c
-do3chi
-3dog
-do3ha
-3dok
-dol3l2
+d2obr
+2d1o2f
+dole4
+doll2
do2mar
-3don
do5n4a
doni1e
do2o
-4d1opf
+2dope
+2d1opf
d2opp
d2o3r4a
-4dorc
-3dorf
+2dorc
+2dord
dor2f1a
dor2fä
dor2fl
dor2fr
-4d1org
+2d1org
do2rie
d2orp
+2dort
+dor2ta
d2os.
-do3sp
dos3s
-dost3
-do4sta
-do3str
-3dot
-dot4h
+dost1r
+dot6h
do3un
-do1y2
-2dö
-d1öf
-d1öl1
-3dör
-dö4s3c
+d1ö
+dö2l1
+3d2ör
+dö2s1c
2d3p2
2d1q
d2r4
3d4ra.
2d3rad
drag4
-d4rah
-2d5rahm
+2drahm
+d3rai
3d4ram
d3rand
-2drast
-2drat
-2drauc
-d3raum
-2d3räd
+2d3rast
+2d3rauc
+2dräd
+d4räh
2d3rät
-2dräu
+2d3räu
4dre.
-d4rea
-d5real
+d4rea.
+d4reas
3d4reck
2dreg
-5dreh
+3d4reh
2d3reic
-d4rein
-drei3t
d4reiv
4drem
4d3ren
-d3rep
+2d3rep
4d3rer
4dres.
d4resc
2d3rh
-d4ria
-2d3ric
-d3rieg
+d3ri
+d4ri.
+3d4ria
+2d5ric
+d4rid
+d4rie
+d5rieg
d4rif
-d3rind
-3drisc
+d4rik
+d4ril
+d4rin.
+3d4risc
3d4rit
4dritu
-2drob
+d3rob
d3roc
2d3rod
d4roi
2d3rot
d3rou
2d3rov
-drö4s3
-3d4ru
+d3rö
+drö2s1
d5rub
-4d5ruf
-4d5ruh
-4d5rut
-3d4rü
+3d4ruc
+2d3ruh
+drunge3
+2d5rut
drü1b
drü5cke
-2ds
-ds3ab
-d4s3amt
-d2s3an
+2d1s
+d4s1amt
+d2san
ds3assi
-d2s1au2
-d2s1än
+d2sau2
+ds1än
4dsb
d4schin
d2s1e2b
-d3sec
d2s1ef
-d5s4eig
-d2sein
+d3sei
+ds2eig
+d4seins
d2s1eng
d2s1ent
d2s1erf
+d2serh
d2s1erk
ds1err
d2s1erz
dse4t
d4s1eta
d3s2ha
-ds3han
d3sho
-ds3hu
d2s1im
ds2inf
d3s2kan
@@ -2607,189 +2556,157 @@ dso2r
ds1ori
d2sö
d2s1par
-d2s1pas
-d2s1pä
-d3s2po
-d4spro
-dss2
-ds3st
+ds1pas
+d2spä
+ds2po
+d2spro
+ds2pu
+dss4
dst4
-d2s1tab
+ds3tab
+d4stag
d4s3täti
-d5stei
-d5stell
+d2ste
+d4stea
+d3stei
+d3stell
+d4stem
d3s4tern
-ds1th
-d1s2ti
+ds2ti
ds4til
-d3stip
-d1str
-d5stre
-ds2tri
-d1s2tu
+ds4tip
+ds2tu
ds1ums
d2sun
-d1sy
ds2zen
-4dt
-d1ta
-dt3a2d
-d1tä
+2d1t
+dta2d
d5tea
-dte5na
-dt3ha
-d3ti
-d1to4
-d1tö
+d2th
+d4thei
+dt3ho
+dto2
+d3tö
dt3r
dtran2
-dts2
-dt3sa
-dt5sc
-dt3sp
-dt5str
-dt3t
-d1tü
+dt5s2
+d3tü
1du
du1alv
du1ar
-du2b3l
-du3e
+dub3l
+du2bli
du2f
2d1ufe
2d1uh
du1i
-3dum.
-d1umb
+2d1umb
2dumd
-d3u2m1e
+2d1u2m1e
2dumf
2dumg
-4dumk
+2d3umk
2duml
d2ump
2dumr
-2d1ums
-3dums.
-d1umv
-dun3d
+d1ums
+d2ums.
+2d1umv
+2d1un3d
+dund2a
2d1unf
+dung4
dun3ke
dun2kl
2dunr
-dun2st
+dun2s
2dunt
-du1os
-dup4
+du1o
dur2
2d1url
-3du2s
-du3scha
-du3se
-dus1t
+2dursa
+du4schn
+du4schr
+du4schw
+dus3t
2düb
3düf
3dün
-3dür
-dürn3
2d1v2
2d1w
-dwa4
-dwa2l
-dwes4
-dwest1
-dy3n
+dwa2
+dwest3
+dy2s
2d1z
-4e.
2e1a
e3a2b
+eab3l
ea2c
+ea3der
eadli4
-e2ag4
-ea2ge
+ea2dr
+ea2g4
+ea3ga
+ea4ge
ea3gl
-eakt4
-eak3to
-e2al
-e3al.
-e3alb
+eak1
+eakt2
+ea2la
e3alei
-e3alf
-e3alg
-e3alk
-e3all
-e3aln
-e3alp
-e3als
-e3alta
-e3alv
-e3alw
-e3alz
-e2am
-eam3a
-e4ame
+e4aler.
+eam3
eam1o
-eam3to
ea2na
-e5and
-e4ano
-e3anz
-e2ap
+e2ano
e3ar.
ea2ra
-e3arb
-e4are
-e5a6rene
-e3arm
-e3art
+e3a4rene
+e3arr
+e3arv
+e2as
eas3s
-e4at.
eat4e2
-eate4r
-e4atl
-e4ats2
-eat3t4
-eatu4
-eau3b
+eater1
+e3ath
+ea5tr
+eat3s2
+e3at5t4
e3au2f
e3aug
-e3ä4
+eau1st
+e1ä2
e1b
2eba
e3b2ak
-eba3ra
+2ebed
ebe2i
-eb4en
-e3beng
-eben6s5e
+2ebel
+eb2en
+ebens3e
2ebet
2ebl
-eb5ler
+eb3ler
eb4leu
-eb3li
e3blie
-eb5lo
+eb3lo
+eb2lö
2eb2o
-ebö4s
+ebot2
+ebö2s
2ebr
-e3bra
eb3rei
-eb2s
-ebs1au
-eb4se2
-ebs1i
-ebs1o
-ebs1p
+eb4ru
+eb2s1
+eb6sche
+ebse2
ebs3pa
+eb3sta
eb4stät
-ebs5tem
-ebs3th
-ebs3ti
+ebs3tem
+ebs3t2h
eb3str
-ebs1u
e3bu
ebu2t1
-eb3üb
2e3ca
e1ce
ech1ä
@@ -2799,47 +2716,50 @@ e6ch5erzi
e1chi
ech3l
ech3m
-ech5n
+ech3n
e2cho.
-ech1o4b
+ech1o2b
e2ch3r
ech3ta
ech3t4ei
e1chu
ech1uh
-ech3w
+ech1w
+e1ci
eci6a
-e1cka
eck3se
2eckt
-2ecl
+2e1cl
2eco
-e5cr
-ecs1
+e3cr
+ec1s4
2ect
e1d
-ed4dr
-ed4e
+e3d2a
+ed2dr
+ed2e
+ede2al
e3dei
ede3n2e
-eden2s
+edens1
eden4se
-edens3p
+eden4sp
ede2r
-ed2ge
-edi4a
+eder3t2
+edi4al
e3d2o
-e3dö
-ed3s2ä
+ed2ö
+eds2ä
ed2s1es
ed2s1o
ed2s1p
-ed2s1tr
+ed2s3tr
ed2su
-e3dy
-6ee
-ee5a2
-eeb4l
+edu2s
+e3dy3
+4ee
+ee3a2
+eeb2l
ee2ce
ee1ch
ee2cho
@@ -2847,44 +2767,44 @@ ee2ck
eede3
eed3s2
ee1e
-ee3ei
e1eff
+eef4l
eef3s
-eeg4
-e1ei2
-eei3e
+eeg2
+e1ei
ee1im
-ee3ing
+eein4se
eel2e
-e1e2lek
+ee2lek
ee3len
e1emp
e1en
-eena4
+eena2
+ee4nag
e2enä
e2enc
-ee5ni
+ee3ni
e2eno
+een3s
e1e2pi
-e2e1ra
+ee1ra
e1erbt
e1erd
ee3r2e
-ee4r3eng
-eere4s
+ee4r3en4g
+eere2s
ee4ret
-e2e1ro
-ee1r2ö
-eer3öf
+e1erk
+ee1rö
+eer2ös
eert2
e1ertr
-e2erü
+ee3r2u
e1erz
-ees2
-ee3sh
+ee3s2
ees3k
-ee3st
-ee2tat
+ee3ta
+ee4tat
ee2th
ee1u2
eewa4r
@@ -2892,18 +2812,16 @@ e1e2x
e1f
2ef.
2efa
-e3fab
-ef3ad
-e3fah
+e2f1ad
ef1ana
-ef1ank
-ef1arc
-ef1aus
-ef1äu
+ef1ar
+e2fat
+e2fäu
2efe
+e3fe.
e2f1e2b
-e2f1em
-e4fent
+ef1em
+e2fent
ef2er
2eff.
1effi
@@ -2914,242 +2832,239 @@ e2f1ins
efi2s
1efku
2efl
-e3flu
-e3flü
+e3f4lu
2e3f2o
-e3f4ra
+e3fra
ef3rea
-ef4rie
-ef1rol
+ef3rol
ef3rom
-ef3rot
+ef4rü
efs2
-ef5sc
ef3so
ef3sp
ef2tan
-eft4r
2efu
-ef1um
+e2fum
2efü
e1g
+egas3
+egd4
e3ge
-ege4n1a
+ege4n3a4
ege2ra
+ege4str
ege1u
-eg4li
-eg3lo
-eg3lu
+e2glo
e2gn
eg3ni
eg4sal
-eg6ser1
-egs2pe
-egs2t6
-eg1ste
+eg4se4r1
eg4sto
-eg1str
-egs3trä
-2e3gu
-egus1
+eg2th
+2egu
+egung4
+egus3
2e1ha
eh1ach
-eh3aka
e3h2al
-eh1ap
eh2aus
-2e3hä
+2e1hä
e1he
+eh2ec
eh1eff
-ehen2t3
+eh2el
+ehen6t3
1e2hep
+e3her
ehe1ra
-eher4an
ehe3str
-e3h2i
-eh3int
+e1hi
+eh1int
eh1lam
eh1lä
-ehl2e2
+ehle2
ehl3ein
-ehl3ent
+eh4lent
+eh5l2er
+eh2lin
eh3lo
ehl2se
-eh3ma
-eh3mi
+2ehm
eh3mu
-eh5nat
e1ho
e3hol
-ehr1a
+ehr1a2
ehr1ä
-ehr3e2c
-eh2r3ei
-eh1ri
-eh1ro
+ehr1e2c
+eh2rei
+ehr3erl
+ehr6erle
+ehre3s
+eh3ri
+eh1ro2
ehr1ob
ehr1of
-ehr5sch
ehs2
eh3sh
-eh3sp
-eh3te
+eh1ste
+2eht
e1hu
+e2hunt
e1hü
eh3üb
-e3hüt
eh1w
e1hy
-2ei.
2ei3a2
4eib
-ei2b3l
+ei2bar
+ei2bl
eibu4t
ei4b3ute
ei2cho
-eich5te
e2id
ei2d1a
+ei3dan
ei3de
ei4d3err
2eidn
ei3dra
ei1e
-ei3el
-2eien
-eien3st
-ei3erv
-ei3et
+4eien3
+eienge4
1eifr
ei3g2a
-eig2e
-ei3g6er
+4eigeno
+eig2er
2eigew
ei3gl
1ei2g3n
2eigru
2eigt
2eigu
-4eih
-ei3k2a
-eik4r
-e2il
+eik2ar
+ei3kau
+eik4la
+e4il
2eil.
-ei4lant
ei2lar
+ei2lau
2eilb
eil3d
ei4lein
-eile2n1
+eilen1
eil3f4
-ei4l3ins
+eil3ins
2eiln
-ei2m1ag
+1eilzu
+ei2m1a4g
eim3all
ei2mor
e1imp
-ei4n1a
-ein3an
-ei2nä
-ein5de
+eim2pl
+ei2n1a
+ei4nas
+ei4nä
ein3dr
2eindu
-ei5ne.
ei4neng
+ei2neu
2einfo
-e2in1g2
-ein3ga
-ein2i
+ein4fo.
+ein4fos
+ein3g2
+ein4hab
e1init
ein3k
ein6karn
-3einna
-ei2no
-ein1ob
+3einkom
+ei2n1o2
3einsat
+ein6stal
ein4sz
e4inver
ei3o2
-ei3p
+ei1p
eip2f
2eir
ei3re
e1irr
e2is.
-ei2sa6
-ei2sä
+ei2sa4
+ei6schwu
ei4s3erw
-ei3sp
eis2pe
-ei3sto
-ei2ta
+eis4th
+ei1sto
+ei2sum
+e2it
+ei2tab
+ei2tan
+ei2tar
2eitä
-eit1h
+ei3te
+ei2th
ei2tro
-eit3t2
-ei4t3um
+eitt4
+eit3um
2eiu
2e1j
e1k
-e3k2a
+ek2a
1ekd
-eke2
e3ke.
e3ken
-eke3ri
e3kes
e3key
-ek4l
-ek5lip
+e3k2l
ek4n
-2ek2o
-ek3s4t
+ek2o
+ek4r
+ek1s4t
2ekt
ekt4ant
ekt3erf
ekt3erg
ek4t3erz
-ek3t2o
+ekt2o
+ek5tri
+ek2u
e3k2w
-2e1la
-e3lab
-el3aben
+e1la
+ela4ben
+el2abt
ela2c
el1af
-el3agi
ela2h
-el1aho
e2l1ak
-el1a2m
-el3ans
-e2lant
-e2l3anz
-el1ap
+e2l3a2m
+el4ami
+el4amp
+el1ans
+el1anz
+2elao
+e2l1ap
e2l1a2r
-el5ari
+el3ari
ela4s
-el3asi
-el3asp
-e3law
+el1asi
+el1asp
+el2ast
2e1lä
-1elbis
-elb4l
+3elbis
el2da
eld5erst
-eld3erw
-el3des
-el3dr
-elds2
-e5le.
+el4d3erw
+eld3s2
+2ele.
elea2
-ele4c
+ele2c
+2eleh
2elei
-e3leie
e6l5eier.
-el3eig
e2l1ein
e3leine
e4leing
+1elek
e2l1el
1e2lem
e3lem.
@@ -3157,731 +3072,664 @@ el1emp
2e3len.
e4lense
e2l1ent
-e3ler.
+e3lep
el1erd
el1erf
-e4lerfa
+e4ler4fa
e2l1erg
el1erk
-e4l3erla
+el1erl
+e4ler4la
e4l3ernä
e2l1err
+2eles2
el1ess
-e3let.
-e2l3e4ta
+e4l1e4ta
+e3leu
2elev
ele2x
-el1exi
+1elf.
el3fe
-elf3ein
elf4l
+1elfm
+1elft
elgi5er.
elgi5ers
+2eli
e2l1id
e3lie
-e2lim
-eli4n
+eli2ne
el1ita
-ell2a
+el3kl
el3lan
+el3le
el5le.
ell3ebe
el4l3ein
ell3eis
-el3les
-el5lin
-ell5sp
+el3lin
+ell3sp
elm2a
2eln
el5na
2elo
-el1obl
e2lof
e2lol
-e3lom
+elon2
el1ope
e2l1or
elo2ri
-e3los
-e5lose
-e1lö
-el2san
-el2ser
-el2spr
-els6tern
-el2su
-el2ta
-el3tak
+el2öf
+elö2s
+el2sum
elte2k
elt3eng
-el4t3in
-el2to2
+3eltern
+elto2
el2t3r
-el3tri
-el3tro
-elts2
-elt3sk
-elt5sp
+elt3s2k
+elt3s2p
2e1lu
e2l1um
-e3lung
el1ur
-el1use
+el3use
e1lü
-e2ly
+e2lya
2elz
-el3zwe
+elz2e
+el2zwa
+e1m
2ema
-e2m3ad
+e2m1ad
ema2k
-em1anf
-e3mann
-em1ans
+e2m3anf
+e2m1ans
3emanz
-e5mä
-em4d3a2
-2eme
-eme4n
+em2d3a2
+e3m2en
emen4t3h
+e6mentsp
e2m1erw
eme2s
-3e2meti
-em1ex
-em1im
+1e2meti
+e2m1im
em1int
-emi5ti
+emi3ti
2emm
emma3u
-e3mon
+em2mei
e2mop
-emo5s
3empf
em3pfl
em2p3le
em2sa
-em3spo
+em2spr
+em2st
em3t2
+1emul
2emü
-e2na
+e2n1a
4ena.
-e4na2b
-2e3nac
+2enac
e3nad
e4naf
4enah
e4nak
-en1al
ena3l2i
-4en1am
+4enam
en4ame
e4nand
-e5nann
-en3anz
-en1ap
-e4nar
+en3ang
en3are
+en2asc
4enat
-e5nati
en3att
e3naue
-en3auf
-e2nä
-e3näc
-en1är
+e2n1är
en1äu
-en2ce
-en3del
-end3ess
-en3do
+en4ce.
+en3d2ac
+en2dal
+en4d3ess
end4ort
-end3ras
-end7si
+end3rom
+end3si
end3s2p
end3sz
-en3dum
-2ene
+end2um
+2ene.
+ene4ben
en1e2c
-ene4ck
-e2nef
-en1ehr
-en3ei.
+e2neff
+e4nein
e2n1el
ene4le
-e4nelt
-4enen
+2enem
+2enen
e4n1ent
-e5n4entr
-en1epo
-4ener.
-e4n1erd
-3e2n3erg
-e4n3erh
-4e3neri
-e2n3erk
+en4entr
+4e3ner.
+e2n1erd
+e2nerf
+1e2nerg
+e4nerh
+e4nerk
e2n1erl
-en3ermo
+e4n3ermo
4enern
e2n1err
-en1ers
-e2n3ert
+e2n1ers
+e2n1ert
e2n3eru
-e4n1erw
-en3erz
+e2n1erw
+e4nerz
+2enes
e4n3ess
-en3eta
-en3eth
-en1eup
-e4nex
-en3fa
-en3ga
+en3f
+enf2a
+enf2u
1engad
3engag
-en5g2i
+en3ge
+en3g2i
en2gl
en3glo
1engp
-eng5sc
eng3se
-2eni
+e3ni.
e3nic
-e4n1id
+e4nid
e3nie
eni3er.
eni5ers.
e2n1i4m
-en3imi
e2n1in
-e5nit
+e3nio
+2enis
+eni3se
+e3nit
+2eniv
en3k2ü
-e2n1ob
+e2n1o2b
enob4le
-e2n3oh
-e3n4ol
+e2nof
+en1oh
+e3nol
eno2ma
en1on
e2n1op
-en1o2r
-en2os
+e2n1o2r
+enost3
e3not
-e3now
+eno2w
2e1nö
en1ö2d
-4enpe
-e6nr
-en2san
-en5sche
-en7schen
-en4seb
+e4nr
+en3sac
+en2sau
+en5sch4e
+en2seb
+ens2el
1ensem
-ens3eng
-en3sho
-en2sid
-en3s2ka
+ensen1
+en3ska
en3s2po
enst5alt
en4s3tät
-4ensto
-en3stoc
-en5t4ag
-en3tanz
+2ensto
+e4nt
+ent4ag
1entd
-en4teb
-ente2n
-en6t5erb
+en2teb
+en4terb
1entfa
-1entga
+3entga
+en2thi
3entla
-1entna
+1entn
+en4t3rol
3entspr
-3entw
+2entü
+1entw
4entwet
1entz
-3entzü
-e2n1uf
-e2n1um
-en1unf
-en1ur
-e3nus
+en1u
2enut
e1nü
+enü1st
4enwü
e1ny
-enz3erf
-enz3erg
-enz3erk
+en4z3erf
+en4z3erg
+en4z3erk
enz3ert
e1ñ
-eo5a
+2eo
e1o2b1
-eo3ben
e1of
eo2fe
e1oh
+e4ol
e1on.
-eo3na
e1ond
e1onf
e1onl
e1onr
e1ons
e1ope
-e3opf
+e1opf
eop4t
e1or
e3or.
e3orb
-e3ord
-eorgi1
-e3ort
+e3ors
e3orw
-eo3s2
+eo1s2
e3os.
-eo1st
eo3ul
-e1o2v
+e1ov
e1ö2
e1p
e3pa
-epa4g
-e3p2f6
+epa2g
+e3p2f4
1episo
ep3le
-e2poc
+1e2poc
ep2pa
ep4pl
ep2pr
-ept2
-ep3ta
-ep4tal
-ep5ti
+ept2a
+ep2tal
+e3pu
+epu2s
e1q
er1a
-e5ra.
-era2be
-e1rabi
-er3abs
-er3abt
+e3ra.
e3rad.
er3adm
-er3adr
-era5f4a
+eraf4a
era1fr
era2g
-er3agi
e1rai
er3aic
e2rak
-er3akr
e1ral
-era5le
er3all
-er3ana
-er3and
+eran3d
e3rane
+er3anf
e2ranh
er3anm
e1rap
er3apf
-er3ar
+e2rar
e3rari
e1ras
e2r3a4si
era2ß
e2rath
e3rati
+e2ratm
e1raub
er3aue
+erau2f
er3aug
-e1raum
e1raw
e1raz
-2e1rä
-e3räd
+e1rä
er1äh
er1äm
-er3ätz
erb2e
-er3blu
er3br
+erb4sp
er1c
er3chl
+er3da
1erdb
er3de
2erdec
erd3erw
-2ere
-4e5re.
+4ere.
+er1eb
e3rech
er3echs
-er1e4ck
+er1e2ck
ere4dit
er1eff
-er1e2h
-4e3r4ei.
+e2r1e2h
+4e3rei.
er1eig
e2rein
-er3eing
-er3einr
-er3eis.
+e4r3eis.
ere2l
-e2r1ele
-4e3rem
-e5rem.
-e4remp
-er3emu
-4eren
-e5ren.
-e5rena
+er1ele
+2e3rem
+2eren
+4e3ren.
+e3rena
e4rense
e4r3entf
e4rentn
-e3reo
-4e5rer.
-er3erf
+e3renz
+eren8z7end
+2erer
+4erer.
+e2r3erf
e2r1erh
-e2rerk
+e4rerl
4erern
+e3rero
er1err
er1ers
-e4rersc
e2rert
-e2r1erw
-4eres
-e5res.
+er1erw
+2eres
er1ess
er3e4ti
er1eul
-ere3us
-er3e4vid
-er3fä
+ere4vid
+erf2e
+erf4r
4erfür
3ergebn
4ergehä
-erg3ise
-erg3s4
-e2r3h
-3erhab
-4e1ri
+erg3el4s3
+1ergol
+erg3s
+ergs4t
+er3h
+1erhab
+2erhü
+2eri
e2riat
e3rib
-6e3rie
-eri5e4n3
-erien5e
-e5rif
-erik6
-6e3rin.
+4e3ric
+4e3rie
+eri3e4n3
+e3ri3k4
+4e3rin.
er1inb
-er1ind
-e4r1ini
+e2r1ini
er1ink
-er1ins
-e4r1int
+er1int
e3rio
er1ita
-2erkol
-erk5te
-erk5tr
-4erl.
+2erk.
+1erklä
+2erkre
+erk3t
3erlebn
-4erln
-erm2
-er3ma
+ermen4s
erm3ers
-er3nan
-er2n1o4s
-e1ro.
+ern1os
+e1ro
+e3ro.
er3oa
-er1ob
+er1o2b
er1of
-e1rog
-e2r1oh
-e1rok
-e1rol
-er3oly
-e1rom
-e5ron
-er1o2p
+er1oh
+e3ron
+e2r1o2p
e4ro2r
-e1ros
-e1rou
-e1row
-e1roz
-er1ö2
-e1röh
-4erök
-er5p
-er3ra
-er5rä
+e3ros
+e3row
+er1ö
+erö2d
+2erök
+er3p4
+er3rä
2errü
-er3sa
-ers2au
-er5sen
-er7s2i
+ers2a
+er3se
+ers2i
er3sk
er3smo
er3sn
-er3sum
-er3s2z
-ert3abe
+er3sp
+er3sz
ert2ak
-er3tä
-ert3ein
er6terei
-er4tho
+er4ters
+er2tho
4erti
ert3ins
-er3to
+ert4ra
erts2e
-2e1ru
-er1uhr
-er1u2m
+2eru
+eruf4s
+er1u4m
+er1und
+erung4
er1uns
-e3rus
-er1uz
-e1rü
-er3ü2b
-e5rüg
-2erv
+er3uz
+erü4b
3erweck
6erweis
-2erzy
-e4s3ab
-es4ach
-es3ad
+es3ab
+es2ach
es3ak
-e5s4a4s
-es3aus
-es3av
-esä2c
+es3anz
+e3s2as
+e4s3ato
2esb
-e3sc
+es2c
es3cap
-e5s4ce
-esch4
-e6schan
-esch2n
-e6scu
-es1ebe
-es3ehr
-es3ein
-es1eis
-es1eta
+e3sce
+esch2
+e3scha
+e2s3ein
+es2el
+ese4ler
es3eva
2esf
-6esh
+4esh
es2har
-es3he
es2hu
-e3sid
-e5sie
-es1il
-es1ini
+es2id
+e2sil
es3int
-e3sir
-e7sis
-es3ke
-es3ki
+es2ir
+es2kat
+e4ske
es3kl
es3ku
-e4s3ky
+e4sky
es3l
es4log
2esm
-e3sof
-e3sol
-eso2r
es2ort
-es4pei
-e3spek
-es2po
-e5spor
-e5s4pra
+e3sot
+es2ö
+2esp
+e3s2pek
+e3spi
+e3s2por
+e3s4pra
2esr
-1essay
+es2sau
es3sc
-es5sec
-6essem
+es3se
+4essem
ess4e3re
-es4s3erg
+ess3erg
2esso
es2sof
-es2sp
-ess1pa
-es2st
-ess3tie
+es2s1pa
+es2spu
es3str
-e5staa
-e2stab
+es3stu
estab4b
est1ak
-e3star
+e1star
e4starb
-es2tau
-es3taum
-e3stec
-est5eink
-e5stel
+1e2stas
+e1stat
+e1s2tec
+e3stel
es4t3eng
es4t3erh
es4t3ess
e1stil
+e2stip
estmo6de
est3ori
-e1s2tr
+e1str
+es4tri
es3trop
-e1s2tu
-es3tus
-e3s4tü
+e1stu
+es4tü
e2s1um
es3ums
-es1ur
es3w
e3sy
es3z
e1ß
eße3r2e
-2et
-e1ta
-eta3b6
+e1t
+etab4
et1am
+3etap
et4at
-e1tä
et1äh
e3te
-e5te.
-et1ein
-e5t2en
-etend4
-e1t2h
-et3hai
+e4tein
+et2en
+eten3d2
+ete2o
+eter4hö
+eter4tr
+et2h
et3hal
-et3hä
-et3hei
et3hü
e3ti
eti2m
eti2ta
-e3to
-eto4b
+2e3to
+eto2b
e4t1of
etons4
-eto4s
-e1tö
-4e1tr
-e4t3raum
-et3rec
-e2t3res
-et4ri
-et4ro
-et2s
-et3sc
-et5schu
+e3tö
+2etr
+e4traum
+e6t3rec
+e2tres
+et4rig
etsch3w
-et3se
-et3so
-et3sp
-et3sto
-et3str
+ets2p
et3su
-et2ta2
-et4tang
-ett3au
+ett1a
+et2tab
+et2t3au
et2tei
ette4n1
-ett1h
-et4t3r
+et2th
+et2t3r
+et4tro
ett3sz
et4t1um
-et1ups
-e1tü
+e3tü
+etwa4r
+2etz
+et2zä
et4z3ent
-et3zo
-eu1a
-eu3ere
-eu3erz
+etze4s
+et2zw
+eu1a2
+eu3erei
+eue6reif
eu2esc
eu2ga
-eug6er
-eug3l
+eu4gent
+eu3g2er
eu4gla
eugs4
-euho2
euil4
-eu1in3
+eu1in
+1euk
eu2kä
e1um
e3um.
e3umb
e3uml
-e3um4s
+e3um2s
+eum4sc
eums1p
-eum5st
+eum3st
2eun
-eu3n2e
-e3ung
-eu4nio
+eun2e
+eu4nei
+e3un2g
+eu2nio
+eun3ka
eu1o2
-eu3p
-eu2rau
-eu3r2e
-eur4er
-1eu3ro
-eu4sk
+eu1p
+eur2e
+3eu3ro
eu3sp
-e4ust4
+eust4
+eu1sta
+eu1sto
eu1str
2eut
-eu5te
-eu3to
+eut2h
+eut6schn
2eux
eu2zw
e3ü
2e1v
-4eve
e2vela
e2vent
+4ever
+eve5r2i
+e3vo
e1w
-2e3wa
-ewa3s
+2ewa
e3wä
ewä2s
2ewe
e2we.
-ew3et.
+ewinde3
e3wir
ewi2s
e3wit
-e5wo
ew2s
2ex.
-1exam
ex3at
-1e6xem
-e4x1er
+1e2xem
+ex1er
+e1xi
e2x1in
+1exis
+ex3l
3exp
2ext.
-e1xy
-2ey
+ex2tin
+ex2tu
+2exu
+2e3xy
+ey1
ey4n
-ey3st
+eys4
e1z
e3z2a
e2z1enn
e3zi
-ezin4
ezi2s
+ez2w
é1b
é1c
é1g
+égi2
é1h
é1l
élu2
é1o
é1p
é1r
-é1t
-é1u4
+é1s
+é1t2
+é1u2
é1v
é1z2
è1c
@@ -3890,225 +3738,233 @@ ezi2s
è1r
ê1p
ê4t
-6f.
1fa
-3fa.
-fa1b
+fab4
+f1abe
fa2ben
+fab5s
3fac
fa4cheb
+facher5f
fa2ch1i
fa2cho
-2fad
-fa2da
-3fa1e
-fa3fa
-fa3g
-f2ah
+f1ader
+fa2dr
+f4ah
+faib4
fa2ke
f2al
-fa1l2a
+fa3l2a
fal2kl
fal6l5erk
-fal2s
+fal6scha
+fal6schm
fal3te
-falt4s
-fal2z1
+falt2s
2fanb
-fan3da
2fanf
fan2gr
+2f1ank
2fanl
+f1anp
2fanr
+fan3s
2fanw
-2f3anz
+f1an3z
2f1ap
-far2b3r
+f2ar
+far2br
+2f3arc
3fari
farr3s
-3f2art
-fa5ru
-f1arz
-3fas
-fa3s2a
-fa5se
+3f4art
+2f3arz
+fa3s4a
fa3sh
-2fat
-fa2to5
+f3at
+fa2to3
2f1auf
f3aug
f1ausb
-3fav
+3f4av
+fa2xa
1fä
fä1c
fäh2r1u
2f1ärm
-f1ärz
fä2ßer
-2fäu
-2f1b
+f1äu
+2f1b2
2f1c
-2f1d4
-f3ds
+2f3d4
+fdie2
1fe
-3fe.
-fe4c
+featu4
+fe2c
f2ech
-fe5che
-4f3eck
+2f1eck
fe2dr
fe2ei
fe1em
+fef4l
+feh4lei
f4eie
-4feinh
-fei2nu
+2f1eing
+4f1einh
+fe1ini
+2f1einw
+f1eis
fek2ta
-3fel
fe2l1a
-fel4dr
-fel5eise
-4f1e2lek
+fel2dr
+2fe2lek
fe2l1er
+fe2les
fe2l1o
fel4soh
-fel3to
-3f2em.
-2femi
+fel3t
+f2em.
fem4m
-fen3a
-fe4nä
-3fend
+2femp
+fe2nä
fen3g
-fe2ni
fe2no
fen3sa
-fen7sc
-fenst2
f1ent
f2er.
-fe1r2a
+fe1ra
+fer2an
fe4rang
-fe4ranz
-fe2r3au
-3ferei
-fer3eis
+fe4r3anz
+fe2rau
+ferde3
+f2ere
fer2er
fer3erz
-2f1erfa
-fe1ro
+f1erfa
+f2erl.
+4ferneu
f4erpa
f2ers.
f2ert
f1erw
-fe2s
-fe4st1a
-fes3tat
+fe2st
+fest1a
fest3ei
-2f3e4ta
+2f1e4ta
3fete
-fet4t1a
+fet2t3a
+feuer3e
+feu4ru
3few
-2f1ex
-4fexp
+f1ex
+2fexp
3fez
1fé
-4f1f
-ff1ar
-ff3at
+2f1f
+ff3ar
ff1au
ff2e
ffe2e
f2f3ef
ff3ei
-ffe3in
+ffe1in
ffe2m
-ff3emi
-f5fen
-f5fer
+f2f3emi
+ff4en
+f2fex
fff4
-ffi3k
-ff6lei
-ff3li
+ff3l
+ff4la
+ff4lä
+ff4lo
f3flu
f3flü
-ff1ox
-ff1rak
f3f4rä
ff3ro
ff3rö
-ff3ru
ff2s
ff3sho
-fft2
-fft3h
-2f3g4
-fge1
-2f1h
+ffs3t
+ffs4tr
+4f3g2
+fge3s
+2f1h2
1fi
3fi.
fi3at
+fid2
+fi4ds
+fid3sc
fien3
fi1er2f
-fi2ki
+fi2kin
fi3kl
-fi2k1o4
+fik1o2
+fi2kob
fi2kr
-fi2l3an
-fi3l4auf
+fi2l1an
+fil4auf
fil3d
fi2les
-fi5li
-fi6lin
+filg4
+fi3li
+fi4lin
fil2ip
-fin4a
+f2ina
fi3ni
-fin4s3
+fin2s
+fin3sp
2f1int
+fi2o
fi3ol
fi2r
fi3ra
3fis
-fi3s4a
+fis2a
fisch3o
-fi3so
-fi5s2p
-fi4s3t
-fi3te
-fi2t1o2
-fit3st
+fis2p
+fi2s5t
+fit1o2
+fi2tor
fi3tu
-5fiz
+3fiz
2f1j
-2f1k4
-f2l4
+4f1k4
+f2l2
2fl.
f3lad
-1f4lä
-3fläc
+f3lap
+1flä
+3f4läc
2f5läd
-f5län
-f5läu
+f3län
+2f3läu
2f3leb
+f4lee
2f3lein
f3ler
-3flim
+f4lé
+f3li.
+3f6lim
fli4ne
2f5lon
1f4lop
1f4lot
flo2w
-f4lu
-f6lug
-flug1a
+f3lö
+f4luc
+1f4lug
+flu4ger
f4lü
-2f1m
+2f3m2
2f3n2
fni2s
1fo
-fob4l
+fob2l
2f1of
+foli3
fo2na
-fon3st
fo2nu
2f1op
fo1ra
@@ -4118,139 +3974,153 @@ fo3rin
for4m3a4g
forni7er.
for4st
-for2t
-for4te
-for4th
-fort3r
+for4tei
+for2th
+for2t3r
for3tu
-2fo2x
-2f1öf
+2f1o2x
+1fö
+2föf
2f1ök
2f1öl
-förs3
-2f3p2
-fper1
+för2s
+4f1p2
2f1q
f2r2
f4rac
+frach6tr
f5rad
fra4m
f3rand
+f5rap
1f4rän
-2f5re.
-f5ref
+2fre.
+f3rec
+f3red
2freg
-frei3ba
-frei5n2
+freik2
+frein4
f3rep
f4reu
2f3ric
fri3d
fri2e
2frig
-fri3k
-1f4ris
+1fris
+f4risc
f3roc
1f4ron
+fro2na
fro2s
-fru2h
-4fs
+f3rot
+f3ru
+f3rü
+4f1s
fs1all
-f2s1an
+fs4amm
+f2san
fs3ar
-f2s3as
-fs1auf
+f2s1as
+f2sauf
+f2saus
f2saut
f3sc
+f4sce
f4schan
-f5schl
+f4schef
fs4co
fs1e2b
-fs3ehr
+f4s1ehr
f2s1em
-f4s1ent
+f2s1ent
f2s1er
fse4t
f4s1eta
f3si
-fsi2d
+f2si2d
+f3s2kie
f2s1o2
-fs3ol
f3span
f2s1pas
fs1pen
+f2sph
f3s2pl
f3s2por
-f2s1pr
-fs2pra
+fs1pr
+f2spre
fs2pri
-fs3s2
-f1s2t
-fs3tak
-fs3tät
-f4stäti
+f2spro
+fs2pru
+fs3s4
+fs2t
+f2stas
+f4s3täti
f4stech
f3stei
-f5stel
+f3s4tel
f3stern
fs3th
+f2stip
f3st4r
f4s3tres
-fs4tro
-f3stü
f4s3tüte
f2s1un
f2sü
-f5sy
+f3sy
4f1t
f4ta.
+f2tab
ft1a2be
ft1af
-ft1al
+f2t1al
ft1an
-ft3anz
ft1ar
f3tat
-ft1auf
ft1e2h
ft1eig
-ft1ein
ft1eis
-fte3ma
f4t1ent
-f2t3e4ti
-f2t1h
-f4t3hei
-f3ti
+f4t1e4ti
+f2th
+f4thei
+ft3ho
ft1op
-ft3rau
+f3tö
f2t3ro
-ft3rö
+f2t3rö
f3t4ru
ft2s1
-ft4s3a2
-ft3sc
-ft6sche
-ftse2
+ftsa4
+ft4sam
+ft3s2c
+ft4sche
+ftse4
+ft4seh
+fts3el
ft3st
-fts3tan
+ft4s3tan
ft4s3tä
-ft5sti
-ft3t
+fts2ti
+ft4stri
+f2tum
ft1url
+f3tü
+ftwa4
ft3z2
1fu
-2fum
+3fug
+3f2uh
+f1um
2f1unf
-2f1u4ni
+fung4
+2f1u2ni
fun2kl
-fun4ko
+fun2ko
fun2k3r
2f1unm
2funt
-furch4
+f2ur
fu4re.
-fu5ru
fus2sa
fus2s1p
fus2st
@@ -4261,34 +4131,32 @@ fu2ß1er
fü2r
2f1v
2f1w
-fwa3s
1fy
2f1z
fz2a
+fzeiten6
fzei8tend
-fz4s
-6g.
-1ga
-5ga.
-gabe4n
+fz2ö
+fzu3
+fzu4ga
+3ga.
2gabf
-gab5l
-ga1br
-ga3bu
+ga2b5l
+gab4r
2gabz
ga1c
-ga3di
-ga1e
+2gadl
+2ga2dr
ga1fl
-ga3g
+ga3ge
+5gai
ga1k
ga2ka
-ga1l2a
-5g4amo
+gal2a
+g4amo
2g1amt
2ganb
gan3d
-g1anf
gan2g1a
4gangeb
gan2gr
@@ -4296,601 +4164,582 @@ gan2gr
2g3anku
2ganl
g3anla
-3gano
+3g2ano
2ganw
ga1ny
-2g1arb
-2g1arc
+2garb
+2garc
3gard
2g1arm
ga3r2o
g1arti
-2garz
-ga2s1a
-ga4sal
+ga3ru
+2g1arz
+ga2sa
gas3ei
ga2si
-ga2so
+ga2sor
+ga3sp
+ga4spe
+ga4spr
gas3s
-ga4st
+gas4ta
+gas5tan
+ga4ste
gas4t3el
-gas4tra
-ga3t2a
-ga3th
+gat2a
2gatm
gat4r
gau1c
2g1auf
g2auk
-2g1aus
+g1aus
2g1aut
-1gä
2g1äp
-g1ärz
-3gäs
+2gärz
+gäs5
gä4u
-4g1b
-g5be
+2g1b2
gber2
-g5bo
+gbi2
+gby4t
2g1c
2gd
g1da
-gda3de
-g3dal
-gd1au
-g3de
-g4d1er
+g2d1au
+g2d1er
gd1in
g1do
-g3dö
-g1dr
-gd3re
-gds2
-gd3sz
-gd1t4
-gd1un
-gd1ur
-1g4e
+g1dö
+g1d3r
+gd3s2
+gdt4
+gd1u
+1ge
ge3a2
-ge3ba
+geb2a
gebe4am
geb4r
-ge3c
-ge3d
+ge1c
+ged4
ge1e2
ge3ec
ge2es
gef4
-ge3ha
+ge3g2l
ge1im
-ge1ins
-ge1inv
+ge2in.
+gein2s
+ge2int
+gein2v
ge1ir
ge2is
-4geise
+2g1eise2
gei3sh
g2el
+ge4lanz
+gelb1r
+gel4b3ra
gel6ders
ge3le
+ge5leh
ge4l3ers
ge4less
+gell2a
ge3lor
-gel3sa
gels2t
gel3ste
gel3sz
gel3t2a
ge3lum
ge3lü
-gel3z2
-3gema
-3gemä
-3gemö
+gelz2
+ge3mi
+gem2u
+3gen
ge3na
ge4nam
-gen2au
+ge4nar
gen4aug
-gen2d3r
+gen2d1r
+gen1eb
ge3nec
gen3eid
gen3ern
gen3g
-gen3k
-ge3nor
-gens3am
-gen7stern
+gen3n
+gen4sam
gen3sz
-g1entf
+2g1entf
gen3th
+4gentw
geo2r
-ge3ou
-ge3p6
-3ger.
+ge1ou
+ge3p4
ge1ra
ge2rab
-ge2ral
-ger3amp
-3gerä
-g5ereig
-ge5rem
+4g3ereig
ge4reng
-ge4rens
+ge4ren4s
ge4r3ent
ger2er
+gerin4f
+ger4inn
+gerin4t
germ4
ger3no
-ge1ro
ge1r2ö
ger4sto
-3gerw
-ges2
-ge5s4am
+ge3r2u
+g2e1s2
ges3auf
-ge5s4c
+ge3sc
ges3elt
ge2s3er
-ge3ses
ge3si
-ge3sp
ges4pi
-gess4t
-ge1st
+ges3s2t
+gest2
ge3ste
-ge5stei
-ges4tem
ge4s3ter
-get2a
-4getap
-ge3t2u
+ges3th
+ge3t2a
+2getap
+ge5tr
+ge3t4u
ge1ul
-4g5ex
-2g3f2
+ge1ur
+2g1ex
+2g1f4
4g1g
gga4t
-g5ge
+g3ge
gge2ne
g2g3l
gg4lo
g2g3n
gg4r
-g3grä
2g1h
4gh.
+gh2e
3g2het
3g2hie
-gh3l
+gh1l
3gh2r
-gh3te
g2hu
gh1w
-1gi
-gi2a
gi3alo
-gie3f
gie3g
gi2e1i
gi2el
gien2e1
-gie3re
-gie3t
+gie1st
gi2gu
-gi2m
+gi2me.
gi4mes
-3gin
-4g1ind
+gi2met
+2g1ind
gi3ne
gin2ga
-4g1ins
-gi2o
-3gip
-gi3ro
-2gisel
-git2a
+2g1ins
+2g3isel
+gi3t2a
gi3tu
-gi2us
+gi4us
2g1j
-2g5k
-g2l
-6gl.
-1gla
-2g3lab
+4g3k2
+4gl.
+g1lab
+g1lac
3glad
-2g3lag
+g2lade
+2g1lag
3glanz
-3g4laub
-2g3lauf
-1glä
+3g2laub
+2g1lauf
3glät
2gläuf
-1gl4e
+g2l4e
2gle.
+3glea
2g3leb
-g5lec
+g3lec
g3leg
-2g3leh
-g4leic
-4glein
+2gleh
+4g3lein
glei4t5r
-3glem
g3len
4g5ler
+2gles
g3lese
-g3lev
-g3li
g4lia
2glib
-3g4lid
-5g4lie
+3g2lid
+3g2lie
2glif
-1g4lik
-g5lin
-1g4lio
-gli2s
-4glisc
-1g4lit
-1g4liz
-1g4loa
-g4lob
-1g4loc
-g5loch
-1g4lok
-g4lom
-1g4lop
-2glos
-1g4lot
-g3lö
+g2lik
+4glin
+g2lio
+2glis
+4g3lisc
+3g2lit
+g2liz
+3g2loa
+3g2lob
+g3loch
+glo3g
+3g4lok
+g2lom
+3g2lop
+3g2lot
2gls
-2glu
+2g1lu
glu2t
3glü
-3gly
-4g1m2
-gn2
-4gn.
-g2na
-g6na.
-g6nat
-1g2nä
-g5neh
+g2ly
+2g1m2
+g1n
+2gn.
+g2n2a
+g4na.
+2gnac
+g4nat
+3g2nä
+gn2e
+g3neh
+gne2tr
2gneu
-4gn3g
-2gni2
+2gng
g2nie
g2nif
g4nin
-4g5nis1
-g2no
+2gni2s1
+3g2no
gno1r
-2g3not
-4gnp
-4gns
-4gnt
+4g3not
+2gnp
+2gns
+2gnt
2gnu
3g2num.
+g2nü
g2ny
-4gn3z
-1go
-3go.
+2gnz
go4a
goa3li
-go3be
2g1of
+2gog
2g1oh
go1i
gol2a
-3gon
+2gonis
2g1ope
2g1opf
-3g2o1ra
-3gos
-go2si
+g2o1ra
+2gord
+2gorg
+go2s1
go3st
-go3t2h
+go3th
got6t5erg
-3gou
-3go1y
-1gö
-g1öf
-2g3p2
-2g5q
-1g2r4
+go1y
+2g1p2
+2g1q
+g2r4
gra2bi
+gra2bl
2gradl
-g3rah
-3grai
+2g3rah
2g3rak
+grammen6
gram8m7end
-3gran
-g3räd
-2gräu
+2g3räu
2g5re.
g4reb
2g3rec
-g3rede
+2g3rede
g4re2e
2g3reic
+2g3rein
g3reit
-g3rek
g4rem
2g3renn
-gre3no
gren6z5ei
-2gret
+g4rer
+g3ret
+g3rev
2g3ric
gri2e
g3riese
3grif
2grig
2g3ring
-gro3be
2groc
2groh
gron4
g4ros
-gross5el
+gros6sel
gro4u
2g3röh
g4ruf
2g3rui
-2grum
+2g3rum
3g4runs
3g4rup
-2g3rut
-grü1b
+2grut
2g3rüc
3g4rün
4g2s1
-gs3ad
-g4sa2g
+gsa4g
g3s2ah
-gs5a2k
+g4s3a2k
g3sal
+g4salt
gs3ama
-gs3amb
gs3an
gs3ar
-gs3as
-g5sat
gs3aug
-g5sät
-g3sc
-g6sca
-g6sce
+g3s2c
+g4sca
+g4s3ce
gsch4
-g4schan
-g6schef
+g4schef
gs4chi
-gs3cr
+g4sco
+g4s3cr
gse2
+gs2eh
g3s2eil
g3sel.
+gs3eli
g3seln
-g4s5er
+gsen1
+gs3er
+gs5erk
gse4t
+g4seta
gsi2d
-g5sil
-g4s3l
+g3sil
+g4sl
gso2
-g3sol
-g5soz
-g3spek
-gs2pi
-gs6pie
-g4s3pin
-g5s4por
+gsp4
+g3s2pek
+g3spi
+gs4pie
+g4spin
+gs2pit
+gs3pl
+g3s2por
+gsrat4
gsrü2
gs5s4
+gs3ta
+g3stan
g3star
-gs4tati
-gst1au
-g4stä
+g3s4tati
+g4s3tä
g5stäm
-gs3te
-g3s4tel
+g3stel
gst3ent
gst3err
-gs4teu
+g1steu
+gst2he
g3stir
-g3s2to
+g3sto
+gs3toc
+g4stol
+gs3top
g4s3tor
-gs2tö
-gs4tör
-g1stre
+g3stö
+gs3tr
+gst4ra
+gs4trat
+gst4ri
gs4t3ros
-gs3trü
g3stu
-gs2tüc
-g4s5w
+g4stur
+gs3tü
+gs4tüc
+g4sw
g3sy
-2g1t2
-g5te
-g2t3h
-g5ti
+2g1t
+g3te
gti2m
-gts3
-gt3t
-gt3w
+gt4r
+gt2s
+g3tü
1gu
+gu3am
gu1an.
gu1ant
gu1c
gu2e
+2gued
guet4
2g1u2f
2g1uh
-gu3ins
+gu1ins
gu1is
-gu5me
-gun2e
+3gumm
2g1unf
g2ung.
-gunge6
+gunge2
4gungew
2g1ungl
-3g2un4s
-4gunt
-gu3re
+g2un4s
+2gunt2
2g1url
-gu4s
-gus3a
-gu5sc
+gurt3s
+gu2s3a
guschi5
-gu5se
-gus5se.
+gus4ser
+gus2sp
gus2st
-5gu2t1
-1gü
+gu4st
+gu2t
+gut1a
+gu4t3erh
+gut3h
2güb
gür1
-güs1
+güs3
2g1v
-4g5w
-1gy
-gy3n
+2g1w
2g3z2
-4h.
-2ha.
+3haa
hab2a
hab2e
h2abs
ha2cho
-hade2
ha2del
-h3adle
-ha3dri
-ha1el
-ha3fa
-haf5fl
-haft4s
-hafts3p
-ha3go
-ha3ha
-hai1es
-h2aka
-haki3
+ha4din
+h1adle
+haf3f4l
+haft4s3p
+h1ah
ha1kl
-4h2al.
-ha1la
+2h2al.
halan4c
-ha4lang
ha2lau
hal2ba
hal4bei
halb3r
-halb5s
-2ha3le
-ha3li
+2hale
+hal2la
hal6lerf
h1alp
-hal4st
-halt3r
+hal2st
+hal4t3r
h1amt
h2an.
-2hana
h2and
+hand3s
h4ann
2hanr
2hant
-ha3os
-2hap
+h1ap
+ha2pl
ha2pr
h4a3ra
-2h1arb
+2harb
h2ard
-har3ma
+h1arm.
har4me.
har4mes
-har5te
-har4th
+har2th
h1arti
-2has.
-4ha3sa
-ha5sta
+h2as
+2ha3sa
+hasi1
+hat5t2
hau3f4li
2h1aufm
h1aukt
hau2sa
-hau4sc
+hau2sc
+hau4spa
hau5stei
-hau2ta
+hau6terk
2hauto
hau2tr
h1äff
-3häp
-h1ärz
hä6s5chen
-häu4s3c
-hä1usp
-2h5b6
+häu2s1c
+hä3usp
+2h3b2
hba2r3a
2h1c
-2h1d
+2h3d4
+hdan2
2hea
-he3al
-1heb
+he2ad
he3be
he4b1ei
he2bl
he3br
-he5che
+he5ch2e
he1cho
-he2el
-hee3le
-hee2s
-he2fa
+h1echt
+he3cke
+hed2g
+he3di
+he2e3l
+hee4s
+he2fan
he2fä
he2f1ei
-he3fen
hef3erm
2heff
he4f3ing
he2f3l
-he2f3r
+he2fr
he3fri
he2fu
-he2i
+he3gu
h1eie
h1eif
h1eig
+he2im
heim3p
hei4mu
-2hein
heine2
hei4neh
h1eink
-he3ism
-he3ist
-heit6s3
+4heio
+he1ism
+he1ist
+heit4s3
h1eiw
-hekt5a
he2l3au
hel1ec
-h1e2lek
+h3e2lek
he3len
hel3ers
he3li
hel4l3au
hel4mei
he3lo
-he4lö
+he4lof
+he2lö
3hemd
he3mi
3hemm
4h1emp
h2en.
-he6n3a2
-he4nä
-hend4s
-h4ene
+he4n3a4
+he2nä
+hend2s
he2n1e2b
hen3end
+hen3erg
he2net
-he2ni
+heng2
+2heni
he2no
henst2
+hen5tr
h1ents
-he2nu
+2h3entw
hen3z
4he2o
he3on
@@ -4898,158 +4747,162 @@ he3op
he3ph
her3a2b
he2ral
-her3an
+2herap
he3ras
-herb4
+herb4s
he4reck
-4her4eig
+4hereig
he4r3eis
he2rel
-h1erfo
+he4rerw
+h1er2fo
h1erfü
-he6r5innu
+herg2
+herin4f
+he6rin6nu
+herin4s
+herin8ter
h1erke
+h3erlau
2herm
he3ro
-he4r3o2b
+he4r3o4b
h1erö
hert2
her3th
-her2z1w
-he2s3tr
+her2zw
+he1sta
+he2s5tr
he2tap
heter2
he3th
-he5ti
-he3t6s
-he2u
+het2i
+he3t4s
+h2e2u
heu3g
he3x
-he1x2a
+he1x4a
he1y2
1hè
-2h5f4
-hfel2l1
+2h3f4
+hfell1
+hfel6ler
hfi2s
-2h5g2
-hge1
-hgin4s
-2h1h
+2h3g2
+hget4
+2h1h2
2hi.
-2hi2a
+2hia
+hi2ac
+hi2ang
hi1ce
-2h2i3d
-h3i4di
+hich6ter
+2hi3d
+h2ide
+h1i4di
hi2e
hi3ens
-hie4r3in
-hif3f6r
+hier1i
+hie4rin
+hiers2
+hif3f4r
hi2kr
-h2il
-hi2l5a4
+hi2l3a4
hil2fr
hi2n
+h1indu
hi3nel
hin2en
-hi5n4i
+h1inf
+h1inh
+hi3n2i
+hin3n2
hi3no
-hin4t3a
+hin3s2
+hin4t1a
2hio
hi4on
hi3or
-hi3os
-4hi2p
-hi3pe
-hip1h
-hip1i
+2hip1
+hi2ph
+hi2pi
h2i2r
hi3ra
2hi3re
hi3ri
-hir4n
+hirn1
+hir4ner
hi3ro
+hir2s
his2a
-hi4se
-hi5s2p
-hi4st
+hi2se
+his2p
+hi2st
hi1th
-hi5ti
+hi3ti
+2hiu
h1j
2h1k4
2hl
h4lac
-h3lad
-h4laf
-h3lai
-h5land
-hl3anz
-hl1ar
-h3las
-h3lat
-h3laug
-h3laut
-h3law
+hla2n
+hl1anz
+h1las
+h1lat
+h1laut
h3läd
-hl1är
-h3läs
-h3läu
+h1läs
+h1läu
hlb4
-hl3d4
-h5le.
+hld4
h3leb
-h3led
hle3e
-h3leh
-h2lein
-hle3l
h5len.
hlen3g
hl2enn
h3ler
-h5ler.
-hle2r3a
-h5lere
-h4l1erg
-h4l3ernä
+hle2ra
+hl1erg
+h6l3ernä
hle3run
hl1erw
+h4lerz
h3les
h4lesi
h3lex
hlg4
-h2li
-h3lic
-h3lik
+h2lie
+h2lif
hl1ind
+h2lip
+h2lis
+h3list
+h2lit
hll2
hlm2
h2lo
-h5loc
+h3loc
hl1of
hl1op
-h6lor
+h4lor
hlo2re
h3losi
-h3lö
-h5löc
-h4lös
+hl2ö
+h3löc
+h2lös
hl2san
hl2ser
hl3sku
hl3slo
-hl3sp
-hlt2
+hl3t2
h3luf
h3luk
-h3lüf
-hlzu5
+h1lüf
2h1m
-h2ma
-h4mab
+h2mab
h3mag
h3man
h3mar
-h3mä
h4mäc
h4mäh
h4mäl
@@ -5057,309 +4910,303 @@ h4mäu
h3me.
hme1e
hme1in
-hmen4s
-hmen6sc
+h3men
+hmen2s
hme2ra
-h2mi
-h3mir.
h2mo
-h3mot
+h4mon
h3mö
-hm3p2
+hm3p4
+hm2s
hm3sa
-hm2s1p
+hms1p
h2mu
-h5musi
-h2mü
2hn
-h2n2a
-hn3ab
-h3nac
-hn3ad
+h2na
+hn1ad
h3nam
-hn3an
-h4nat
-h5nati
+hn1an
h2nä
-hn1är
-h3näs
hn3d4
hn2e
hn3eig
hn3ein
h2nel
hne4n1
-h2nep
+hne4pf
hner3ei
-h5nerz
-h2neu
+h3nerl
+h3nerz
hn3ex
-hn1g
-hngen5
h2nic
-hn1id
+h2nid
h2nie
-hn3im
+hn1im
hn1in
h2nip
hn3k4
-h3nof
+h2nor
hn3s2k
-hn4th
hnts2
+h1nu
+h2nuc
h2nul
hn1unf
h3nunge
-ho3be
ho2bl
-ho2c
-ho4ch5
-ho3ck
-ho4cka
-ho7cker.
+ho2ch3
+ho2cka
+ho6ckerl
+hock3t
+2hod
hoe4
ho2ef
ho4fa
ho2f3r
-hohen3
+2hoi
hol1au
+4holdy
+3hole
ho2l1ei
hol3g4
-2holo
+4holo
ho4lor
-1hols
-h3oly
+3hol3s
+h1o2ly
3holz
hol6zene
hom2e
ho2mec
ho2med
-ho5mu
h2on
-hon3str
+hono3
2hoo
2hop
ho1ra
hor3d
h1org
+ho4sei
ho3sl
-ho4sp
+ho2sp
ho4st
-4hot.
-ho5th
-4hot3s2
-1hou2
+2hot.
+ho3th
+hotli4
+2hot3s2
3hov
-4ho2w
-how1e
+2ho2w1
h1o2x
ho1y2
-1hö
+1h2ö
hö2c
hö3ck
-h2ör
-hö4s
-hös3c
-h1öst
+h4ör
+hö2s1
+h3öst
2h3p2
h1q
-4hr
+2hr
hr1ac
-hr3a2d
+hr3ad
h1rai
h1rane
-h3raum
h3räu
hr1c
hr3d
-hr2e
h2rec
-h3r4ech
+h3rech
h3red
h3ref
h4rei.
+hrei4ba
h3reic
-h4r5eig
+h4r3eig
h3rel
-h3ren
+h3r2en
h3rep
-h4r3erla
-h3rerle
+hr2erg
+hr2erk
h6rerleb
-h3re4s1
+hr2erm
+hr2erz
+h3re2s1
hre2t
-h2r3eta
+h2r1eta
h3rev
hrf2
-hrg4
+hrg2
+h2ri
h3ric
+h4rick
hri4e
h3riesl
h3rin
-hr1ind
h4rine
-hr1ins
-h4ris
+h4rinh
+h4rist
h2rob
h3roh
h3rol
-h4rom
+h4rome
+h4romi
h4ron
h2ror
h3rou
+hrr4
hr2s1ac
hr2s3an
-hrs1au
-hr4se
+hr2sau
+hr3schl
hr2s1en
hr2ser
-hr2set
-hr6s1in
+hr4set
+hr4s1in
hrs3k
hr4s1of
-hrst2
hr2su
hr4sw
-hr4tab
+hr2tab
hr2tan
-hr2t3ri
+hr2th
+hr2tor
+hrt3ri
hr2tro
+hrt2sa
hrt2se
-h1ru
h3ruh
hr1ums
-h3rut
h3rü
-hr3üb
+h4rüb
h2ry
hrz2
4hs
h2s1ach
-h2s1an
-h2s1au
+h2san
+h2sau
h4schan
-hs1e4c
-hs2ei
-hs3eins
-hs3eis
-h3sel
-h3sen
-h3ser
-h4s1erl
-h3sex
+h2s1ec
+hse4ler
+h2s1erl
+h3s2ex
h2s1ing
-hs3l
h2s1of
h2s1par
-h2sper
-h3s2por
+h2sph
+hs2por
h2sprä
-hs3s2
-h2stal
+h2spro
+hss2
+h1sta
hst3alt
-h2stau
+hst2an
+h2s3tau
h1stec
+h3stein
+h5stell
h3s4terb
-hs1the
+hst2he
h1s2ti
-h2s3tie
-hs4tief
+h1sto
h2stor
-h1s2tr
+h1s4tr
hst3ran
hst3ri
h1stun
-h2s1un
+h2s1u
hs2ung
-h1sy
4h1t
h2t1a
-htab2s
h3t4akt.
h3takts
h3t2al
h4t3alt
-h4tam
-ht3a4n
-ht5ane
-h3t4ank
+h4t3a2m
+hta4n
+ht3ane
+h3tank
+ht2as
h4t3ass
h4tasy
ht3a2t
-h2t1är
-h5te.
-h2t1e4c
-h3tech
+h2tär
+ht1e2c
h2t1ef
-ht1e2h
-h3teha
+ht1eh
+hte2he
h2teif
-h4t1eim
-ht1ein
+h4teilz
+h2t1eim
h2t1eis
h4t3elit
-h4temp
+h2temp
h4tentf
h4t3ents
ht3erfo
ht3erfü
h2t1erh
-h2t1erk
-ht4erko
+ht5erken
+h4terkl
+h6terneu
h4t3erre
ht3ersc
h6t5erspa
-h4t3erst
+ht3erst
+h6tersta
+ht6erste
h2t1erz
hte2s
-h4t3ese
-h4t3ess
-h5tet
-ht1eu
+h4t1ese
+h4t1ess
+hte3sta
+h2t1eu
h2t1ex
-h2t1h
-h3ti
-h4t1in
-hti2s
-h2t3oly
-h2top
-h2tö
+h2th
+h4thei
+hthe3u
+h4tho
+h2t1in
+hto2
+h2toly
+h2torg
h3töp
h4t3rak
ht3rand
h2t3rat
-ht3raus
+ht6raume
h4tref
ht4ri
-h2t5rin
+h4t5rin
h2t3rol
h2t3ros
-h2t3rö
+ht3rö
+h4t1rös
h2t3ru
h2t3rü
-ht2sen
+h4ts
+ht2so
+ht2sp
ht3spri
ht4stab
+hts2ti
+hts4tie
ht4s3tur
ht4s3tür
-ht3t
+htt4
htti2
-htue3
-ht1und
h2t1urs
-htwa5re
-ht3z4
-hu2b
-hub1a
-hu4b3ei
-hu4b1en
-hub3l
-hub5r
+h3tü
+ht3z2
+hu2b1a
+hu2b3ei
+hu2b1en
+hu2b3l
+hu4b3r
+hu2bu
hu1c
hu2h1a
hu2h1i
huko3
-huk3t6
+huk3t4
hu2l3a
hu2lä
hu2l3ei
@@ -5369,19 +5216,20 @@ hu2ler
hu2let
hu2l1in
hu2lo
-hu3ma
+hu3m2a
h1ums
+hu2n
h1una
-huni1
-2hunt
+hung4s
+hu3ni1
h1up.
h1ups
2hur
-hur3g
+hurg2
hu3sa
-hu2sc
hu2so
hus4sa
+hus2sp
hu2tab
hu3t2h
hu2ti
@@ -5390,223 +5238,205 @@ hut4zen
hut4z3er
hutz1i
h2ü
-hü1bel
h4übs
-hüf2
-hüh3
+h3übu
hühne4
hüs3
2h1v
hvi2
hvil4
2hw
-h2wal
-hwas7
+h2wall
hwe1c
h1weib
-h1wet
-3hyd
-1hyp
+3hyg
+3hyp
hy2pe.
+2hy2t
h1z
-hz4s
-2i.
+hz2o
+hzug4
+i1a
2ia.
-ia1b4
-iab5s
+i4aa
+i2ab
+iab4l
2iac
-i5ad.
-i3adn
+i2af
iaf4l
-i4a3g
+i4a3g2
+i2ah
+i2aj
+i2ak
i3ak.
-i1akt
-2i1al
+i3akt
+2ial
i5al.
-i3al3a
+ia2l1a4
ia2lä
-i3al3b
-i3alc
-i3al3d
+ial3b
+ial3d
i3alei
i3alent
i3alerf
i3alerh
-i3a4l3erm
+ia4l3erm
i3a2let
-i3alf
-i3alg
-i3alh
-i3a2lia
-i3alj
-i3al3k2
-i5al3l
-i3alm
-i3aln
+i3a4lia
+ialk2
+i3all
+ial3la
ia2lor
-i3alp
-i3alr
-i3als
-i3al3t4
+ial3t4
ia2lu
-i3alv
-i3alw
-i3al3z2
+ial3z2
+i2am
+i4amo
2ian
-i5an.
-i1ana
ia2nal
-i1anc
-i5and
-ia3n2e
+i3and2
+ian2e
i3ann
i2ano
-i5ans
i3ant
i3anz
+i2ap
ia3p2f
ia1q
-i3ar
+i3ar.
ia2ra
-iard2
-2i3as
-i5as.
-i4asc
+2ias
+i2asc
ia3sh
-i4asi
-i4a3sp
+i2asi
+i2a3sp
+ias3s
iast4
-ia5sta
-ia1str
-i5at.
-ia4ta
-i3at2h
+i3at.
+i3a4ta
+i4ate
+i3at4h
1iatr
i3ats
i3au
ia3un
2iav
+2iä
i1äm
iär2
i1är.
i1ärs
-i3ät.
-iä5te
-i3ät3s
-i1b
-i2b1ar
+i1ät.
+i1äta
+i1ät3s4
+2i1b
i2b1auf
-ib2bl
-i2b1ei
-ibe4n1
-ibi4k
-i3b4la
-i3b4le
+ib2bli
+ib1ei
+i2beig
+i2beis
+ibela2
+ibe4n
+iben3a
+ibi2k
+i3bla
+i3ble
+i2blis
+ib2o
i2b1ö
-i2b3rä
+i4brä
ib3ren
-ib2s
-ib3sa
-ib3sp
-ib3sta
ib4ste
i2bunk
-i2b3unt
-ibus3
+i2bunt
+ibu2s1
2ic
+ic1c
+ice1
ich1a
-ich3ä
+ich1ä
i1che
-ich3ei
-i3cher
+ich1ei
i1chi
i2chin
ich3l
i3chlo
-ich5m
+ich3m
i1cho
i2ch3r
ich2t3r
i1chu
-ich3w
-i2cka
+ich1w
+i1ci
i3ck2e
-icks2
-i1cr
-i5cu
+i1cl
i1d
-i3d2am
+id2ab4
+i3dam
id2an
i2d1au
1i2dee
-id1ei
-i3del
-ide5l2ä
-ide3le
-ide1ra
+i2dei
+idel2ä
ide3so
+ide3sp
1i2dio
+idni3
i2dol
1idol.
-i3dos
-i2d3r
-id4ra
+2i2dr
+i3d2sc
id2s1p
-id1t4
-1i2dy
-ie5a2
+idt4
+i2dy
+ie3a4
ie2bä
-ie2b3l
-ie2br
+ie2bl
+ie2bre
ieb4sto
ieb4str
ie1c
ie2cho
-ie4ck
-ied3g
+ie2ck
ie2dr
ie1e2
ie2f1ak
ie2f1an
ie2fau
-ie3fer
ief3f4
ie2f3l
-ie2f1r
-ie2g5l
+ie2fro
+ie4g5l
ie3g4n
ie2g3r
-ieg4ra
+ie3g4ra
iegs3c
-ie3her
i1ei
-ie2l1a2
-iel3ad
+i2e2l1a
ie3las
iel3au
iel3d
-i2ele
iel1ec
-i2eli
+ieler8geb
i1ell
-ielo2b
-i2els
-iel3sp
+ielo4b
iel3sz
-ielt4
iel3ta
-i1en
+2i1en
i3en.
i3ena
-ie4n1ag
-i3e4nä
+iena2b
+ie4n3a4g
+i3e2nä
i3end
-ie2n1e2b
-ien2er
-ie4nerg
-ie3nern
+i2ene
+ien1eb
+ie3ner
+ien4erf
+ie4n3erg
i3enf
i3en3g
+ienge4f
i3enh
i3enj
i3enk
@@ -5616,605 +5446,590 @@ i3e2no
i3enö
i3enp
i3enr
-ien5s2e
-ien2st
-iens4tr
+ien2s
+ien3sc
+ien3s2e
+ien3si
+iens2k
+ien3sp
ienst5rä
ien3sz
+ie1nu
i3env
i3enw
i3enz
ie1o2
ier3a2
ie2rap
-ie2rec
-ie3rel
+i2ere
ie3r2er
ie4rerf
-ier4ert
ie4r3erz
ie3res
i3ereu
+i4eri
+ierin3
ier3k2
i1ern
i3ern.
-ier5ni
-iers2e
-ier4s3eh
-ier7sei
+i2er5ni
+ie2rö
+ier4seh
+iers2t
ier3sta
ier3ste
+ier3te
iesen3s4
+ies2sp
+ies2s3t
+ie1sta
ie3su
ie2t1a
-ie4tei
ie4t3erh
ie4t3ert
-ie2th
-iet3ho
+ie2t3ho
ie4t1o
-ie2t3ö2
-iet4se
-i3ett
+ie4t1ö4
+ie2tri
+iet2se
+i1ett
ieu2e
ie1un
-i1eura
i1ex
-4if
-i2f1arm
-if3au
-i3fe
-i5f2en
-ifen3st
+2if
+if1ar
+i2f3arm
+if4at
+if1au
+i2fec
+ife2i
+if2en
+ifens2
if1erg
if1erh
-ife4s
if2fl
-i3fi
if3l
i1f4la
-if1lö
-if5lu
-i1flug
+if4lä
i1flü
-i1fö
if3r
if4ra
i1frau
-i1f4re
-if5reg
+i1fre
+if4rei
+if4rü
if2s
if3se
if3sp
if2ta
ift3erk
if2top
-if2t3ri
-ift3sp
+if4t3ri
+ift3s2p
ift3sz
2i1g
-ig2ab
iga3i
i2g1ang
ig1art
-iga5s
+iga1s4
i4gefar
-ig5eise
-i3gen
ige4na
-ige4rau
-i2g5erz
-ig2gr
+ig1erz
i2g1im
-i2g3l
+i2gl
ig1lä
-ig4le
-ig5lein
-i4gli
-ig1lu
ig4na
i4gnä
i3g4neu
ig4no
-i3g4ra
+i3go
+ig4ra
+ig3rei
ig4sal
-ig5sä
+ig3sä
ig4se
ig3so
ig3spr
-ig3s4tei
-ig4s3to
+ig3stei
+ig4sto
ig4stö
ig3str
ig4stre
-ig5stu
+ig3stü
+igung4
2i1h
i2h1am
-i2h1ar
-i5he
+i2har
+i3he
ihe1e
ihe4n
-ih3l
ih3m
ih3n
-ih1r
+ih3r
+ihs2
i2h1um
-ihu3s
ih1w
-2i1i4
-i2i5a4
-i3ig
-i3in
+ii2
+ii3a4
+i1ie
+i3i4g
+i1im
+i1in
+i1i4s
i2is.
-i2i5t
+ii3t
i1j
-i1k
-i4k3a4k
-ik5amt
-i4k3anl
+2i1k
+i2k1a4k
+ik1amt
i2k1ano
-ik3ansa
-i2k3anz
-i2k1ar
+ik1anz
+i4kanze
+ik1art
ik3att
i2k1au
-ik3aufr
-ik1är
-2ike
+i2kär
+4ike
i2k1ei
-ike2l
-ike2re
-i2k3eta
+ike2l1
+i2k1e2r2e
+ik1erf
+iker6fah
+i2ker2l
+i2k1eta
i3ki.
-i3kic
-i3kil
-i2k1in
+ik1in
+i2kind
i2k3l
-i3k4la
+i3kla
i3k4lä
-ik1lö
-i2k3n
-ik2o3p6
-ikot3t
-ik3ra
+i2kn
+ik3no
+ik2o3p4
+iko3s
+i2köl
+i2k3ra
ik3rä
ik3re
-i3kri
-ik1s
+ik1s2
ik3so
-iks2p
-ik3s2z
+ik3sz
ikt2e
ikt3erk
-ik2t3r
+ikt3r
+ik2tre
i2kun
i3kus
i1la
-il5ab
-il3a2d
+i2l3ab
+il1a2d
i2l1ak
-i2l3a4m
+i2l3a2m
il1ans
-il3asp
-i2l1au
+il1asp
+il1au
il4aufb
-il5aus
+il3aus
+i2laut
i1lä1
-2ilb
+6ilb
il2c
il2da
-il3de
-il4d3ent
+il4d3en4t
ild2er
-il2d1o
-il1e4c
+ild1o
+il2dor
+il2dr
+il1e2c
ile2h
il1ehe
il1ein
-i2l1el
-i3len
-i4l1ent
+il1el
+i4lents
i2l1erf
i2l1erg
i2l1err
+ilf2
il2f3l
il2f3re
-ilf4s
-ilg4r
-ili5en3
-iliga2
-ili4g3ab
+ilf4s3
+ilie4n
+ilig1a2
+ili4gab
i2l1ind
i2l1ip
i3lip.
i3lips
+2ill.
il3l2a
-ill4an
il3l2er
-il5l2i
+il3l2i
+2ills
il2mak
il4mang
-il2m5at
+il2m3at
il2mau
il2min
2ilo
i2l1or
-i1lö
-il1öf
il3t2h
-il3tr
-i1lu
+i1lu2
i2lum
+ilung4
i3lus
-il3v2
-il2zar
+ilv4
+il2z1ar
ilz3erk
-4im.
-ima2g
+2im.
i2manw
i2m1arm
+im4at
ima2tr
+imat5sc
ima4tur
-i2m1ele
-i2m1elf
+i2meg
+i2mej
+i2mek
+i2mele
+i2melf
i2m1erf
i2m1erz
+i4mesh
i2meti
-im1ex
-2imi
+i2mew
i2m1inf
i2m1ins
+im2mei
im4m3ent
-3immo
+1immo
+2imo
im1org
1impo
-imp2s
+imp4s
im3pse
1impu
-im2str
+im2st
+im3sta
2imt
+imt3s2
2imu
-im3unt
-2in.
-2ina
-in1a4c
-in3ad
+in3a2c
+i4nack
+i2n1ad
in2af
-in3a2m
-in2ant
+in3am
i3nap
-i6narb
+in2ara
+in2ars
ina4s
-in3asi
-inasy3
i2n3au
in1äs
-in1äu
-in3dau
-in4dene
+in2dal
+in2dan
1index
in3do
2indr
-ind3se
+ind4ri
+in3drü
1indus
2ine
i2n1e2be
-i2ned
in1ehe
in3ei
-i5nend
-in1eng
-i3n2er
-i5ner.
+i2n1eng
in3erbe
-i4n3erlö
-i5ners
-i5nerv
-in3erz
-i2n1eu
+i4nerbi
+in2erh
+iner4lö
+i4ner4tr
+i4nesk
+in1eu
ine3un
ine2x
-inf4
+in3f
1info.
-4inga
+1infos
+2inga
ing1af
in2g1a4g
-ing5sc
+in2gl
+ing4sam
1inhab
2inhar
2inhau
4inhe
-i3ni3d
+in2i3d
+i3nie
2inig
-in3ins
+ini3kr
in2ir
2inis
-ini5se
+ini3se
i3nitz
3inkarn
-ink4ste
+inma4le
2inn.
in4n3erm
2innl
+in2nor
+inn4sta
1innta
2ino
-in3od
-in3ole
+in1od
in3ols
in1or
-inos2
-ino3st
+ino1s2
ino3t
i1nö
in1ö2d
2inp
2inr
-ins2
-2ins.
-ins4am
-ins3än
-insch4
-in7schl
-in4seb
+ins2am
+insch2
+in2seb
2insen
-ins3erg
ins3ert
in3skan
-in5spe
-in3st
-3instal
+in3skr
+1insta
in4s3tät
-in5s4tr
-in5su
+in3stel
+in3su
1insuf
-in6s3um
-in3sze
+in4s3um
+in3s2z
1integ
-in3t2h
+int2h
in3t4r
-i2n1uf
+in5tri
+in1u
i3n2um
-in1unz
+in3unz
invil4
i1ny
-inze2
-in3z2w
+in3zw
i1ñ
-i1o
-io5a4
+2i1o
io1c
-i4o3di
+io2d
+i2oda
io3e4
-i2of
-io1f4l
+iof4l
i2o3h
io2i3d
-i4ok4
-io3kr
+io3k4
i3ol.
-i5om.
-i5oms
-ion4
+i3om.
+i3oms
+ion2
i3on.
-io3na
ional3a
-io4n5au
-ion5d
+io2nau
+ion3d
i3ons3
-ion6sc
-io2nu
+ion4spi
+ion4st
i2ony
i2o1p
+io4pf
i3ops
i3opt
-2i2or
+i2or
i3or.
-io1ra
i3orc
iore4n
-io1rh
i3orp
i3ors
i3ort
-i2os2
-i3os.
-io3sh
-io3sp
-io3st
+io3s2
+i2ost
i3ot.
i3ots
+i2ou
i2ov
io2x
i3oz.
-i1ö4k
+i1ö2k
i3ön
i1ös.
2ip.
i1pa
-ip4an
-i1pä
i1pe
ipen3
i3per
ip3fa
-iph4
+iph2
2i1pi
ipi3el
ipi3en
ipi2s
ip4l
+ip2pl
+ip3pu
i1pr
2ips
-2i1pu
-i1q
-i1r6a
-i3ra.
-1irak
-i3ras
+2ipu
+2i1q
+i1r2a
+i3rad
+1i2rak
+irat2
i1rä
ir2bl
ir1c
-ir4e
-i5ree
+ir2e
+i3ree
2irek
-i5ré
-irg4
-ir2g5l
-irg6s
+2i3ré
+ir2gl
+irg4s
ir2he
-i1r2i
+ir2i
2irig
2irk
-ir2k5l
+ir2k3l
irli4n
+ir2mak
ir2mau
-ir2mä
+ir4mä
ir2m1ei
ir2mum
ir4m3unt
-ir5nen
-irn3ers
+ir2nar
ir2no
i1ro
-1i2ron
+1iron
iro2s
i1rö
irpla4
-ir4s
-ir5se
-ir5sh
+irr2h
+ir4sch3w
+ir3se
+ir3sh
+ir2st
irt2st
-i1ru
iru2s1
i3sac
-i4s3amt
-is1an
+i4s1amt
is2ap
is3are
-i2s1au
-is1än
+i2sau
+i2s1än
2isb
i2sca
isch3ar
+i3s2che
+i4schef
i4sch3e4h
i4sch3ei
-isch6er
i4schin
i5sching
-i2sch3l
+i2sch1l
+isch3le
i2schm
isch3ob
isch3re
isch3ru
+i4schwa
+i6schwir
+i4schwo
isch3wu
-is3chy
+is1chy
i2s3cr
-2i3se
+2ise
ise3e
ise3ha
-ise5hi
-ise3il
+ise3hi
ise3inf
i4seint
-ise2n
-ise4nal
+ise2n1
is2end
-ise1ra
-i4s1erm
+isen3s
+i2serh
+i2s1erm
iser2u
-i4s1ess
-is4et
-i4s5etat
-i4sex
+i2s1ess
+i4s3etat
+is2has
isi2a
i2s1id
-is3la
-ismu2
i2s1of
-iso2n
iso6nend
is1op
-5i2sot
-i2sp
+3i2sot
is1pa
-i4spar
+i2spar
is1pe
is1pic
is2pit
-i4spl
-i4spo
-i4spro
+i2spro
is3sa
is4s1ac
is4sau
is4s3che
is2st
-iss1tr
-i2st
-is1t2a
-is2t3ab
-is2tat
-is3tec
-i3stel
+is3sta
+is3sto
+iss3tr
+is3stu
+is2sum
+is3t
+is4tab
+is4tam
+ist2an
+i1s4tat
+is4tel
iste4n
-is1th
-i1stil
-is1to
-is2toc
-is1tr
-is2t3re
-i3stru
-i3stü
+istes3
+i1s4teu
+i1s4til
+is4toc
+is4tö
+is5tör
+ist4ra
+ist3re
+is4tü
isum3p
i2sü
-i1sy
i1ß
-i2ß1ers
-ißler3
-2it.
-i1ta
+iß1ers
it1ab.
-it1ac
-i3tak
ital1a
it1alt
it1am
-it1ang
-it3a6re
+it1an
+it2an.
+it3a4re
it1art
i3tat
it1au
i3tauc
i4t1ax
-2i3tä
-i4t1äs
-ität4
-2ite
-i2t1eig
-it1ein
-6i3tel
-ite2n
-iten3g
-itens2
-iten3st
-i2t1epo
-i4tex
-it1he
+4itä
+it2är
+i2t1äs
+ität2
+i2t1ei
+i4teig
+it2eil
+i4tein
+2itel
+ite2la
+ite4n
+iten3s2
+i4tepo
+i2tex
i5thr
-it1hu
-i3ti
-1itia
-i4t1id
+i2t1id
1itii
iti4kan
-i4t1in
-i1to
+i2t1in1
+it2inn
+itmen2
i5toc
i2t1of
-i1tö
-i1tr
+i3tö
it3raf
-it3rah
i2t3ran
it3ras
it3rau
@@ -6222,101 +6037,90 @@ it3räu
it3re
it3ric
it3rom
+it4ron
i3tru
it3run
-it4s3ag
-it2sä
-it2s1e2
-it6s5er1
-its1pe
+it2sa
+its1a4g
+it2s1e4
+its3er1
+it2so
+it2s1pe
it4staf
-its3tie
it2sto
-it2str
-it3te
-it4teb
-itt3hä
-it2tr
+it2teb
+it4tri
+itt2sp
it1uh
i2t1um
i2tuns
-itu5re.
it1urg
-itut6
-i1tü
-i3tül
-i3ty
+itut4
+i3tü
2itz
+it2zä
it4z3erg
-2i1u4
-ium3a
-ium1i
-i3un
+it2z1w
+2i3u2
+ium1
i1ü
2i1v
-iv1ak
+i2v1ak
iv1ang
i2veb
i2v1ei
iv1elt
ive4n
-i2v3ene
+i2v1ene
i2v1ent
-i3vol
-i2vr
i2v1ur
2i1w
iwur2
+2i1x
+i2xa
ix2em
i3xi
-i1xo
-ix3tu
-i1z
-i2zan
+2i1z
iz1ap
iz1au
izei3c
ize2n
-i2z3ene
+i2z1ene
iz4er
i2z1ir
-iz1ob
-i2z1ö
-izt2
-iz3th
+izo2b
+i2zö
i2z1w
í1l
-2j.
ja1c
-jahr3ei
+jah4r3ei
jahr4s
-ja3la3
+ja3l2a
ja3ne
jani1
-ja5sa
-ja3st
+ja1st
2jat
je2a
-jean6s
+jean2s
je1c
-je2g5
+je2g
jek4ter
jekto2
-jek4tr
+jektor4
+jek2tr
je3na
je2p
-jes1t
-je2t
-jet1a
-jet3h
-jet3r
-jet3st
-jet5t
-jet1u4
-je5v
+je4s3t
+je2t1a
+je2t3h
+je2t3r
+jet3s2
+jet3t
+je2t1u2
+je3w
+ji2a
jit3
ji2v
-j2o
joa3
jo2b1
job3r
@@ -6325,332 +6129,348 @@ joni1
jo1ra
jord2
jo2sc
-jou2
jou4l
-joy3
-4jö
-2js
j2u
ju2bl
-juden3
-jugen6
-jugend5
+jugen2
+jugend3
ju2k
-jung5s4
+jung3s4
+ju3ni
jur2o
-ju2s
-jute1
+jus3
+jut2e1
2j1v
-4k.
1ka
3ka.
-ka2a
+k3a2a
ka3ar
kab2bl
ka2ben
2kabh
-ka1bl
2kabla
2kablä
-kab4le
-2k3a2bo
+2k1a2bo
ka3b4r
-4k3abs
+2kabs
2k1abt
ka1c
-2kada
-ka3dab
-2k3adr
+k2ad
+2k3ada
+2k3a2dr
ka1f4l
ka1fr
-kaf3t
-k2a3g
+kaf3t2
+k2ag
ka1in
ka3ka
kaken4
-ka1la
+2kala.
ka2lan
-kal3bl
ka3lei
ka3len.
ka4lens
-kal5eri
+kal3eri
kal2ka
kal2kr
-2kall
+k1all
+kalo5
kal4tr
-3k4am
-4k5a2ma
-ka3mar
-kamme2
-ka4n3a4s
+k3ama
+kamp8ferf
+kan2al
+ka4n1a4s
ka2nau
-kan3d4
+kand4
2kanda
kan2e
2k1ang
kan3k4
2kanl
2k1anna
-2k1ans
+k1ans
+k2ans.
6kantenn
-kan4th
+ka3nu
2kanw
-k4anz.
+k2anz.
ka2o
-2kapf
+2k1apf
3kara
2karb
-k1arc
k2ard
-3ka3re
k2arg
ka3r2i
kari3es
-2karm
-kar4p3
-k2ar3ta
-2karti
+k2ark
+2k1arm
+k2arp3
+kar2pf
+k2ars
+kar3t
+k2arta
+2k1arti
karu2
k2arw
3kas
ka3se
kasi1
-ka4sp
kas3s
-ka4s1t
-ka3th
-ka2t3r
+ka2s3t
+ka3tan
+ka3t4h
+ka4t3r
2katt
-kau4f1o
+kau2f1o
4kaufr
kauf4sp
-2kaus
-kau3t4
+k1aus
+kau3t2
2kauto
1kä
-3käf
-2käh
-k1ämi
+k1äh
+k1ä2mi
+k1än
kär2
-kä4s3c
-kä5se
-kä1th
-2k1b4
-k5be
+kä2s1c
+käse3
+2k3b4
kbo4n
+kbu2s
+kby4
2k3c
-2k3d
+2k3d2
kdamp2
-2ke1c
-ke3d
-k3eff
+2k1e1c
+k1eff
kefi4
-kege4
+kege2
ke2gl
ke2he.
-kehr4s
-kehrs3o
+kehr2s
+kehr4s3o
2k1eic
2k1eig
-2kein
-ke1ind
+k1ein
+ke1in2d
+2keinh
+kei1s
2k1eise
+keit2
ke2la
kel1ac
ke3lag
kel1au
ke2lä
-kel3b
-2k1e2lek
+kel3b4
+2ke2lek
ke2len
2ke3let
-kel3sk
+kell4e
+kel3s2k
+k4elt
2k1emp
-ken3a
-4kengag
+k2en.
+ken3au
+4ken4gag
+2kenlä
+ke2no
+kens2k
+ken5stei
ken3sz
k2ente
k3enten
ken3th
+k2entr
2k1ents
+k2entu
2kentw
-2keo
-4kep
+2keo2
ke2pl
k2er.
ke1rad
k2erc
-k3erhö
-ke5rin.
-ke6r5innu
+4kerfah
+k4erfam
+k3ergeb
+ker6gebn
+k3er4hö
+ke6rin6nu
+kerin6st
+kerin4t
+ker4ken
k2erko
k2erl
-k3erleb
-k4erlö
-k2ern
+k3er4lau
+k3er4leb
+k6erlebe
ker4neu
-k1ero
+k1e2ro
k2ers.
-ker3z2
-2k1erzi
+kerz2
+ker4zeu
+2k1er2zi
+k6es.
+ke2sel
ke4t1a
-keten3
ke2t3h
+ket3s
ke1up
keu6schl
2k1e2x
-2k5f
-kfi2s
-2k1g4
-kge1
+2k3f4
+2k1g2
2k1h4
kho3m
-ki3a6
+ki3a4
ki1c
-ki2d
-ki3da
-2k1ide
-ki3di
-ki3d4r
+2k1i2de
+ki3dr
ki2el
kie2l3o
-ki2en
-kif4
-ki1fl
-ki1fr
+ki1f4l
+ki1f4r
ki3k4
-2ki3l2a
-ki5li
+2kil2a
+ki3li
ki3lo
-3kin.
+k2imi
+k2in.
k2ing
2kinh
k2ini
k2inn
-ki3n4o
+ki3n4o3
+kin3s
2k1inse
-kin3sh
2k1int
-ki3o
-3kirc
-ki5s2p
-kis2to
+ki3or
+kio4s
+3kir
+kis2p
+kist2
+kis4to
2kiz
ki3zi
-2k5j
-2k1k
-k2l2
+2k3j
+2k1k4
+kl2
4kl.
-2kla.
-klan2
-k5last
-2k5le.
-kle5ari
-4k5leh
+4kla.
+k4lar
+4k1last
+k2le
+4kle.
+kle3ari
+4kleh
k4leid
-4k5leit
+4k3leit
k3lem.
2k3ler
-kle2r3a
+kle2ra
2k3leu
kle3us
-k5lich
-3klim
-k4lin
-k4lip
-k4lir
-k4lisc
+2klic
+2klig
+k2lin
+k3lip
+k2lir
+k2lisc
+2klist
klit2s
-4k5liz
+4kliz
2k3loc
klo2i3
k4lop
-k3lu
-k3lüc
-k3ly
+klost4
+klö2s
+k2löt
+k1lu
+kluf2
+klung4
+2k1lüc
+2kly
2k1m
k2n2
-3k4nab
+3knab
+k3ne
k4nei
-2k3ner
-kno2bl
-2knor
-3k4nü
+2k5ner
+kno4bl
+2k5nor
+k3nu
+3knü
1ko
-ko5ad
ko2al
-ko5ar
-ko3be
2kobj
2k1o2fe
koff4
-koh3le
koh3lu
ko1i2
-kol4k5
+kol4a
+ko3le
+kol2k5
3kom
-ko2min
ko4mu
-k2on3
-ko3n4e
-kon4i
-kons4
+k2on
+ko3n2e
+kon3s4
ko3nu
2kop.
ko1pe
-kop4f3en
-kopf5err
-kop2t
-ko3r2a
-4k1orc
+kop4fen
+2kops
+2kopz
+ko1r2a
+2k1orc
kor6derg
ko3ri
-kor3m
-3kort
k2os
-ko3str
-3kot
+ko2sp
+ko2st
ko3ta
-kots2
-kot3sp
-2k3ou
+kot3s2
+kot4tak
+2k1ou
3kow
+ko2we
k1o2x
-3kö
+1kö
kö2f
-4köl
-2k3p2
+k1öl
+2k1p2
k1q
k2r4
2k3rad
k3rats
-2k1raum
+2kraum
k4raz
-2krät
+2k3rät
2k3räum
2kre.
-kreb4
-2k5rec
-2krede
+2k3rec
+2k3rede
+2k3ref
2kreg
k3reic
-kre1i2e
+kre1i2e4
+kreier4
k3reih
2k3rh
2krib
-4k3ric
+2k3ric
k3ries
2krip
-k4ron
-kro3st
+3kris
+3k4ron
2kruf
krü1b
-4ks
-ks3amt
-k2s1an
-k2s1au
-ks4än
+2ks
+k4s1amt
+k2san
+ks3ar
+k2sau
+ks2än
ksch4
ks1e2b
k2s1em
@@ -6658,7 +6478,7 @@ k2sent
ks1erl
k2s1ers
k2s1erw
-ks1ex
+ks3ha
k2s1id
k2s1in
k2s1o2
@@ -6666,344 +6486,317 @@ k3sof
ks1pa
k3spe
ks2por
+ks2pu
ks3s2
-ks2t4
-k5stab
-ks3tanz
-kstat4
+kst4
+k1sta
+k4s3tanz
+k3stat4
k1ste
-k5stei
-k6steil
-k1sti
+k1s2ti
+k1sto
k2stor
k1str
k2strä
k1stu
k2stum
k2s1u
-k1sy
ks2zen
4k1t
-k2t3ad
-k3taf
+k2t1ad
kt1akt
k3tal
kt1am
kt1an
-kt3anz
k2t3a2r
-kt5a4re
-k5tat
+kta4re
k2t1au
ktä3s
-k3te
-kte3en
-k4t1ei
-k4temp
-k4tent
+kte3e
+kt1ei
+k2temp
+k2tent
k4t3erfo
-k4t1erh
-k5ters.
-k4tex
-k2t1h
+k2t1erh
+kte3ru
+k2tex
+k2th
+kt3ho
k2t1id
-ktien3
kt1im
k2t1ing
kt1ins
+kti4ter
k2t1of
k3top
kt1ope
k4torga
kt3orie
-k2tö
-k3t4ra
-kt5ras
-kt5rau
+kt4ran
+kt3ras
+k4tref
kt4ro
-ktro5s
+ktro1s
kt3run
-kts4
-kt3se
-kt3sp
-kt3st
-kt3su
-kt3s2z
-kt3t2
+kt3s4
+ktt2
k2tuns
+k3tü
kt3z
ku1c
-kuh3
+kuh1
2k1uhr
-ku3la
+kul2a
ku3l2e
ku3l2i
4kulp
2k3uml
kum2s1
k2u3n2a
-kun6s4
+kung4
+kun4s4
kunst3
2kunt
2k1up.
+kur2bl
ku2rei
kuri2e
kuri4er
ku2ro
-kur4sp
-kur4zen
+kur2sp
+kur2st
ku4schl
-ku2so
ku2sp
-ku2s1t
+kus3t
ku2su
1kü
2küb
-kü1bel
kü1c
kür4s
2k1v
2k1w
-3kys
-ky3t
-2k5z2
-6l.
-5la.
-2lab
+2k3z2
+kze3l
+3la.
la3ba
-4labb
-4la2ben
-3labi
-4l1abl
-3la3b2o
-3l2a1b4r
-lab5re
-lab6ri
-4l3abs
-4labw
+2labb
+4l3aben
+2labf
+2labg
+2labh
+4l1a2bl
+lab2o
+l2abr
+lab4ra
+lab4ri
+2l3abs
+l1abt
+3labu
+2labw
la1ce
+la2ce.
1lad
-la3den
-la3d2i
-l3adl
-4ladm
-2l3adr
-5ladu
-l3adv
-1la1e
+lad2i
+l1adl
+2ladm
+2l1a2dr
+3ladu
+l1adv
+2laf
+la2fa
+laf3s
+laf3t
la2ga
-la3ge
-lag5eis
+la2gio
la2gn
-lago4
-la4g1ob
-la2gr
-lahn3
+lago2
+la2g1ob
2la1ho
1lai
-1laj
-la3ke
la2k1i
-3l2akk
+l2akk
la1k4l
2l1al
4lall
-4l3alp
-l2a3ma
+4lalp
l2ami
la3min
-3lammf
-l4amp
+1lammf
+l2amp
2l1amt
-lamt6s
+lamt4s
la4mun
-la2na
-la3nac
l1anal
+la2nau
2lanb
3l2and
-lan2d3a
-lan4dad
+lan2d3a2
lan6d5erw
lan6d5erz
-land5inn
-lan2dr
-2l1anf
+lan2d3r
+2lanf
+lan2gl
lang3s4
-4lanl
-l3anli
+2lanhä
+l2anhe
+2lanl
+4lanli
2l3ann
l1anp
2lans
4lansä
-4lanw
-lanz1w
+2lantr
+lan2zw
3lao
-l1a2po
+l1a2po2
lap4pl
la2r1an
-2l1arb
-l1arc
la2r1ei
-la6rene
-l4ar3g
+la4rene
+3l4ar3g
lar3ini
-lar3st
-2l1art
-lar3th
+lar3s
+2l1ar3t
l3arti
-la3ru
+la2ru
+la2sau
+4lasd
la3se
2lash
+2lasi
la2so
-2la4sp
-5lasseri
-5lassern
-5lassers
-la4st
+2lasp
+3lasser
+la2st
last1o
lat2a
+la3te
la4tel
2l3ath
la2t3ra
-lat4s
-2latta
+lat2s
+2lat2t1a
lat4tan
lat4t3in
-lat4t3r
-laub6se
-lau4fer
-lau4fo
+lat2t3r
+laub4se
+l2auf.
+lau2fo
l2aufz
-l1ausg
-2l1ausl
-2l1ausr
+1laug
+2lausl
+2lausr
2l1auss
-l1ausz
2lauto
-2law
+1law
lawa4
-1lax
-la3xa
+lay1
lä1c
-4läf
+1läd
+2läf
2l1ähn
-3länd
+1länd
lär2m1a
-l1ärz
-lä4s3c
+lä2s1c
4lät
-4läub
-4läuc
-4läue
-3läuf
+2läub
+2läuc
+2läue
+1läuf
1là
-4l1b2
+2l1b
l3bac
-lb3af
-lb3am
-lb3ang
-lb3arb
-lb3b
-l2b3ede
-l4b3eta
-l2b3id
-l2b3ins
-lb4lat
+l2b1ede
+l4beta
+l2b1id
+l2b1ins
+lb2lat
l3blä
lb3le
-l2b5li
+l2bli
l3blo
-lb3ohn
l4bre.
-lb5rit
-lb4ro
-l3brü
-lbs4
+lb3rit
+lb2s
lb3sa
+lb3se
lb4sk
lb3sp
lbs6t
-lbst1e
+lbst3e
lb4sto
-lb4stu
+lb2u
l2b3uf
-4l1c
+lbzei2
+2l1c
l3che
-l5chi
+l3chi
lch3l
lch3r
lch3ü
lch1w
+l3cl
4l1d
-ld3a2b
-ld1a2ck
-l4d3ad
-lda2g
+ld3a2b1
+l3d2ac
+ld3a2ck
+l2d1a2d
+lda4g
l2d1ak
ld1al
l3dam
ld1amm
-l2d5a2n
-ld1a2r
-ld5ari
+l2d3a2n
+l2d1a2r
+ld3ari
l3das
+l3dat
ld1au
ld1är
-l3de.
-ld1ei
-l4dele
+l2dei
+l2dele
l3der.
-l2derd
-l3derl
-l3dern
-l2d1erp
-l2d1e4se
+ld1erp
+l2d1e2se
l2dex
l2d1id
l2d1im
ldo2r
-l3d2os
-l3dö4
-l2d3r
-ld1ra
-l4dran
-ld1rä
-l4dre
-ld5rea
-ld1ri
-ld1ro
-ld1rö
+ld2os
+ld2ö2
+ld3r
+l2dran
+l2dre
+l3d4ru
+ld4rü
ld3sa
-ld3ska
-ld3sp
-ld1st
-ld1t4
+ld3st
+ldt4
+ld3th
l2d1um
-l2dü
1le
3le.
-le3ar
-le3ba
+le2ad
leben4s3
le2bl
2lec
-lech1a
le2chi
-lech5t4e
+lecht4e
+3led
+4ledd
le3de
le2e
le3ei
-le3en.
-le3f4a
-3lefo
-le2g3as
+lef2a
+le2g1as
+le2gau
le2gä
-le2g5l
-le3gr
-legs4
-3lehr
-leh3r4e
+le2gl
+leg4r
+3leh
+leh3r2e
+4lehs
+4leht
3lei.
lei2br
l2eic
@@ -7011,56 +6804,58 @@ l2eid
4l1eig
l2ein.
l2eind
+lein4du
l2eine
+lei6nerb
+2leink
l2eint
-lei2s
-lei3so
leis6s5er
l4eist
-lei3su
+lei4ßer
l2eit
-lei8t7ersc
-leit3st
+lei2ta
+lei8t7er8sc
+leit3s2
lekt2a
2lektr
-3lela
-le2le
-2l1elek
-le3len
-le3ler
-le3les
-3l2eli
+3l2ela
+2le2lek
lel3s
3lemes
le2m1o2
4lemp
+lem3s
l2en.
le4nad
-le4nä
-3lene
+le2nä
+4lendet
+2lendu
le4n3end
4lenerg
-le4ners
l2enf
le3ni
-len3kl
+l2enk
2l1enni
l2e2no
-len3st
+len4sem
len3sz
-2l1ents
-4lentw
+l1ents
+2l3entw
lent4wä
5lentwet
+4lentz
len2zi
le1os
-2lepo
+2lep
+3lepa
+3lepf
lepositi8
+3lepr
l2er.
-l2e1r2a
-le2r3a4g
-le2r3au
-ler5b6
+l2e1ra
+le2ra4g
+le2rau
+lerb4
4l3ereig
le4r3eim
le4rers
@@ -7068,35 +6863,35 @@ l1erfo
l2erfr
l2erfü
3lergeh
-4l3ergen
+l3ergen
3l4ergew
2l1ergi
-lerk4
+lerin4s
+lerk2
l2erka
l2erko
l2erle
-le1ro
2l1er2ö
3l2erra
l4ers.
-lers4k
-ler3ste
-le2ru
-le3rung
+lers2k
+lers2t
+ler3t
+6lerwerb
l1erz
l2erza
-les4am
-les4e
-2lesel
-le5ser
+les2am
+les2e
+2l1esel
+le3ser
le3sh
lesi1
-le3s2k
+le3sk
les2t
leste3
+le1sto
4lesw
2lesy
-le4sz
le2tat
2le3th
2leto
@@ -7105,318 +6900,318 @@ le2u
4leud
2leuro
3leut
-3leva
-2lex
-3lexd
-le5xe
+3lev
+2lexe
le2xis
-3ley
+2lexz
2l1f
-l3fa
-l5fah
+l3fah
+lfang3
l2f1ec
lfe1e
-l4f1eis
-l3flä
+l4feis
+l3f4lä
lf3lo
-l3flu
+l3f4lu
lf3ram
-lf2s
-lfs3tau
-lfs3tr
lf2tr
lf4u
lfur1
+l3fü
2l1g
+lga3t
+lgd4
+lgen2a
lge3ra
+lgeräu3
l2geti
-lg3lo
+l3go
lg3re
l3gro
-2l1h
-l3he
+2l1h2
3lhi.
1li
-3li.
-li1ac
-li1ak
-li3bi
+3lia
+li3ac
+li3ak
+li3ar
+lia1s
+libi3
li1c
-5lichem
-5licher
+3lichem
+3licher
li3chi
-6lick
-li3da
-2l1i2do
+4lick
+li2cka
+li3d2a
+li2deo
+2l1ido
+li4ds
+lid3sc
+l2ie
3lie.
liebe4s
-lie2n
li3ene
-li5enp
-lie4s3c
+lien3s
+lie2s3c
lie2st
-li3fa
-li4fe
-5lig
-li3g4n
+3lig
+lig4n
+li2gre
li3ke
-li3ki
-li3kli
li2kr
lik2sp
lik4ter
-li3l2a
-li3li
-4lim
+li3l
+lil2a
+2lim
li3m2a
-lima3g
-2limb
-5limo
-2limp
-li3na
-lin1al
+3limo
+li3n2a
+lin3al
2l1indu
-li4nef
-li4neh
+li2nef
+li2neh
li2nep
-li4nes
+li2nes
2l1inf
-ling4s
+lings5
2l1inh
-li5ni
-2l1i6nit
+2l1in1it
2l1inj
-lin2k3a
-3linn
+lin2k1a
+link2s
li2nol
+l2ins.
l2insa
l2insc
+2linsp
+2linst
2l1int
l1inv
-4linz
+2linz
li2o
+li4om
+li3os.
li2p3a
-5lipt
3lis.
li3s2a
li4schu
-6lish
+4lish
2l1isl
-2l1i2so
-liss4
-3list
+2l1i4so
+li2sp
+liss2
+lit2a
li2tal
li3te
-li1t2h
-lits2
-lit3st
+lit2h
+lit1s2
lit3sz
li3tu
-li4tur
3liu
2lixi
li2za
-lizei5
-4l3j
+lizei3
+4l1j
2l1k
lk1alp
l3k2an
l3kar.
-lk1arm
-l3ke
lken3t
-l2kep
-lkir5
+lk2l
lk3lo
-l3k6lu
-lk3nu
+l3k4lu
+lk4ne
lkor2b1
-l3k4ra
-lk3ro
+lk4ra
+l2k3ro
l2k3ru
-lk2s3
+lk2s1
lk3sä
+lks3t
lk4stä
l3k2ü
-lkü1b
4l1l
ll1abb
-ll1abe
-ll3aben
-ll1abt
-l3labu
+ll1a2be
+l2labt
ll1aff
ll1akt
l3l2al
-l2l3a4m
-l2l3anz
+l2l1a2m
+ll3ama
+lla2n
+ll2anw
+ll1anz
l3lap
ll1arm
-ll3art
ll1au
ll3aug
-l2l3aus
+l2laus
l2l1äm
llb4
-ll3d
-l3lec
+llch4
+ll3d4
ll1ech
+lle3en
l2l1ef
ll1eim
-llei4ne
-l3l2em
+ll2em
l3len.
-lle4n1a
-ll3endl
+lle4n3a
ll3endu
llen3g
+l4lents
l3ler.
-lle2r3a
-l3lere
-l4l3ergo
+lle2ra
+l4lerfo
+l6lergen
+l4lergo
ll3ernt
+ll3ertr
l2lerz
ll2es
+l2lex
llg4
ll1imb
ll1imp
l2l1ind
-lli5ne
-l2l1ins
-ll3l4
+ll1ins
+llk4
+ll3l2
ll5m
-l2l1ob6
+lln2
+ll1ob
+l2lobe
l2l1of
ll1opf
l2l1o2r
-l2l3ou
-ll1ov
+l3lor.
+l3lore
+l2l1ou
l3low
-l4l1öf
-ll3ö2se
+l2löf
+ll1ö4se
ll3sh
ll3s2k
-ll3sp
-ll4spr
-llt4
-ll3th
+ll2spr
+ll5t4
llti2m
-ll3tr
llt5s2
+llu2f
ll1ur
-l3lus
-llust6
-llus5tr
+llus5t6
ll3z2
2l1m
-lm3a2b
-lm1aka
-l2m1arc
+l2m3a2b
+l2marc
lm1aus
+lm1c
+lme2e
lm3eins
l2m1e2p
l2m1erz
-lmin2
lm1ind
lm1ins
-lm1orc
l2möl
lm3p
lmpf4
-lm1s2t
+lms2t
lm3ste
-lm3sz
-lm3th
+lm3s2z
+lm3t
4ln
-lna6r
+lna4r
ln3are
-l3n2e
+lnd2
+l3n4e
l3ni
-l3no
+l1nu
l1nü
1lo
3l2ob.
-3lobb
+lo2ber
2lobj
-2lo2bl
+2l1o2bl
l2obr
-lo3bri
-lof4
-4l1o2fe
+lob4ri
+l1o2fe
lo1fl
-lo3ha
-loh2e
-2l1oh4r
+lof4r
+lo2gau
+lo3h2e
+2l1ohr
+loi4r
3lok
lo2k3r
lol2a
-l3oly
+l1o2ly
lo2min
-lo4n1o
-lon3st
+lo2n1o
lo2o
-2lope
2lopf
2lopt
lo1ra
lo4rä
2lorc
+l1ord
lo3ren
-4l1or3g
+2l1or3g2
lo3ro
3lorq
3los.
lo4sa
3lose
-los5se
-lost4
+lo4ske
+lo2spe
+loss2e
lo4ste
-los1tr
+los3t4r
lo2ta
-lo3th
+lo3tha
loti4o
-2lo2v
-lo3vi
+2l1ov
+lo2ve
2lox
+1lö
lö2b3
-lö3du
-3lö2f
-4l1öfe
-l3öhr
-2l1öl
-5lösc
-5lösu
+2löd
+lö2f
+2l3öfe
+4lög
+l1öhr
+2l1ö4l3
4löß
2l1p
+l3pa
lpe2n3
-l3p2f
-l4p1ho
-l3prei
-l3pro
+lp2f
+l2p1ho
lp3t4
+l3pu
2l1q
-lque3r
-2l5r2
-lrat6s
-lru3t2
+2l3r2
+lrat4s
+lre1s
+lrut4
lrü1b
-4ls
+4l1s
l3sac
-l2s3a2d
-l5s2al
-l4s3amb
-ls3amp
-ls1anf
-ls1ang
-l2s1ann
+l2s1a2d
+l3s2al
+l4s1amb
+l2sann
l3sare
-l2s1au2
+l2sau
l4schin
+l4schmü
l2s1e2b
-ls1ec
+l2s1ec
l2s1em
-ls3ere
+ls1ere
ls1erg
+l2serh
ls1erl
l2s1ers
l2s1erw
@@ -7427,117 +7222,106 @@ l2s1imp
ls2log
ls3ohne
l4s3ort.
-ls2pi
-l3s2po
-l3spri
+l3s2pi
+ls2po
+l2spro
l3s2pu
ls3s2
lst2a
-l5s2taf
-ls3täti
-l1stec
-l5stei
-l5stel
-l5steu
-l1sti
+lstab6
+ls4taf
+l4s3täti
+l2ste
+l3stec
+l3stei
+l3stel
+l4stem
+ls6terne
+ls6terns
ls2tie
l2stit
-ls2tol
-l1s2tr
-l1s2tu
+ls4tr
+ls2tu
ls1um
-l3sur
-l1sy
+l2sun
+lsu3s
ls2zen
4l1t
-lt1ac
+l2tab
+ltag4
lt1ak
-lt1am
-l4tame
+lt1a2m
+l4t3ame
lt3and
lt1ang
-l3tar
+l3tarb
lt1art
-l3tat
-l4t3ato
-lt1au
-l5tef
+l2t3ato
+l2t1au
lt1eh
-lt1ein
l2t1eis
-lte5lei
+l4te4lem
+lt3eli
lt2en
+l5ten.
lter3a
-l3t4erg
-lt2erö
-lter4sp
-l4t3es3k
-lte3str
-lt3e2th
-lt1eu
-l2t1h
-l4t5hei
+lt2erg
+lt4erö
+l4t1e4sk
+lte2th
+l2t1eu
+l2th
+l4thei
+lt3ho
l3thu
-l3ti
ltimo4
l2tob
-l3toc
-lt1of
-l2t1op
+l2t1of
+lt1op
l2t1o2ri
-lto3we
+lto2w
lt1öl
+l3tör
lt1ös
-lt3öt
-ltra1l
+l4t3öt
+ltra3l
l3trä
lt3räu
-l2t3re
+lt3re
lt4rie
lt3roc
lt3ros
l2t3rö
-lt5sc
-lt2se
-lt3spa
-lt3spr
-lt4spre
+l6ts
+lt3sc
+lt2so
lt4stab
lt4stoc
-lt3t
+ltt2
lt1uh
l2t1um
ltu4ran
-ltu4rer
-ltu2r3i
-lt3z2w
-1lu.
+ltu2ri
+l3tü
lu1an
-4lu2b1
+4lu4b3
luba2
-lub3l
-lub3r
lubs2
-lub3sz
-lub3u
lu2dr
lu2es
-lu2f2
+1luf
2l1ufe
-lu3fo
-luft1a
-luft1e
-luft5r
-lu2ga
-lu2g5e2b
-lu2ger
-lug5erp
-lug5l
+2luff
+luf2t1a
+luf2t1e
+luf2t5r
+lu2g1a
+lu2g1e2b
+lu4g3l
lu2go
lu2g3r
lug3sa
lug3sp
-lugs4t
lu2gu
2l1uh
lu1id.
@@ -7548,101 +7332,105 @@ lume2
l2ump
l1ums
l1umw
-1lu4n
+1lu2n
2l1una
2l1unf
-4l1uni
+lung4sc
+2l1uni
2lunt
2lunw
-lu4pf
+4luo
2lur
-lu1rä
l1urn
l1urt
2luse
lu2sp
lus4s3a
-lus2s3c
-lus4ser
+lus2s1c
+luss3er
+lus6serf
+lus6serk
+lus6sers
lus2s1o
-lus4s3p
-lus4st
-5lu4st
-lus2t3a
+lus2s3p
+lus2s3t
+lus4stä
+lu4st
+lus4t1a
lust3re
lu2s1u
lu2t1a
lu2tä
-lut3erg
-lu5terk
+lu4teg
+lu4t3erg
lut1o2f
lu2top
-lu4t5r
+lu4t3r
3lux
2lüb
5lüd
lüh1l
-lü2s
2l1v
-l3vo
-l2vr
2l3w
-l5wa
+2lx
1ly
ly1ar
ly3c
-ly3et
-2lym
-3ly3n
+2lymp
+3lyn
+ly3no
ly1o
-ly3th
ly3u
2l1z
+l2z3ac
l3z2an
-lz1ar
-lz1erz
+lz2erk
lz1ind
-lz1o2f
+lzo2f
l2zö
-lzt2
-lz3th
+lz3t2
l2z1u4fe
-l2z1w
+lz1w
lz2wec
-6m.
1ma
-maa4
-2m1ab
+m1ab
m2abe
-ma1bl
-3m2a1b4r
+2mabk
+m2ab4r
+2mabs
+2mabt
mach4tr
ma2ci
-mad4
ma3da
-ma3de
+ma2d4r
ma4d2s
-ma1e
+mae2
ma1f
+ma2ge.
+ma2geb
+ma2gef
+ma2geg
+ma2gek
+ma2gep
+ma4ges.
+ma2get
+ma2gev
+ma2gew
2m1agg
magi5er.
magi5ers
-ma5g6n
+ma3g4n
2m1ago
-3mah
-ma3ha
-mah4ler
-mah3li
-mai6se
+mai4se
2m1akt
-ma1la
-ma2l1ak
+mal1ak
+ma4lakt
ma2lan
-ma2l5at
+ma4l3at
ma2lau
-ma3law
mal3d
-mali3er
+ma3ler
+mali1e
mal3lo
2mallt
malu4
@@ -7651,269 +7439,292 @@ mam3m
2m1anal
ma2nau
2manb
-man2ce
-mand4
-man3do
-man3ds
+man4ce.
+man3d2
man3ers
ma2net
-mang2
-2mangr
+m2anf
+2m1angr
m2anh
2manl
m4ann
-manu3
+2mansa
+2mansä
+2mansc
+2mantw
2manz
ma2or
-5m4app
-2m1arb
+m2app
+2marb
mar3g2
-ma3ri
-3mark
-4mar4o
+4ma3r2o
maro3d
4marr
mar6schm
-mar5te
-ma3ru
-3m4as
-ma3s2p
-ma3sto
-ma1s2tr
+mar6schr
+ma3r2u
+m1arz
+3mas
+ma3s2pa
+4m1aspe
+massen3
+mas4tel
+ma1s4tr
3maß
-m4at
+ma2ta2b
ma2tan
-ma2tä
mat4c
-ma4tel
+ma2tel
ma4t3erd
+ma5tri
mat3se
mat3sp
-3maue
2m1au2f
ma3un
2mausg
m4ay
ma1yo
-ma3zu
-1mä
+3mä
m1ähn
mä1i2
-6m1änd
+4m1änd
m1ärg
-mät4
-mä1tr
-mäu4s3c
-2m1b4
-mb2a
+mä3t4r
+mäu2s1c
+2m1b2
mbe2e
-mbe4n
-m3b6r
-2m3c
+mb4l
+m3b4r
+mby4
+2mc
+m3ch
2m1d
-md1ar
+md1a
m2d1ä
-md1ei
-md3s2e
+m2dei
+mds2e
m2d1um
-mdu3s
1me
-meb6
-me1c
+meb4
+m2e1c
medi3
-medi5e4
+medie4
medien3
2medy
me1ef
-me3e2n
-mega5
+mee2n1
+mega1
3meh
2m1eif
+2m1eig
m2eil
-me1i2so
+mein4da
+me1i4so
3meist
-2mej
-me3lant
+me3lam
3meld
me2lek
+me2ler
melet4
-2m1elf.
+2melf.
mell2
-melt4
-6m5eltern
-mel3tr
+mel2se
+mel5t4
+6mel6tern
2m1e2mi
-3m2en
+m2en.
+mena2b
me3nal
men3ar
men3au
-m3endl
men3gl
me3nor
-men4s3k
-men4so
-men3st
+m2ens
+men4sk
+men2so
men3ta
men6tanz
-4m3entn
-ment6sc
-4mentw
+2mentn
+4m3entwi
me1o
-2me3ou
+2meou
2meö
3mer.
me1ra
-mera3li
me2r3ap
+me4rens
mer2er
4m3ergän
-me5ric
3merin
-mer2kl
+merin4d
+merin4t
+me2ro
3mers
-me3run
-mer3z4en
+merz4en
3mes
-me2s1a
-me2sä
-mes2e
-4me3sh
-4mes2sa
+mes1a
+me2sal
+me4sä
+4meser
+2me3sh
+4m1essa
+mes6serg
mes2s1o
-mess1p
+mes2s1p
+mes2st
meste2
+me1sto
4mesu
-me3t4a
-mete2
+me3t2a
me3th
meu1
-2mex
+2m1ex
1mé
-2m3f
+2m1f4
mfi4l
4m1g2
-mge1
-2m1h
+2m1h4
1mi
-3mi.
-mi1ak
-mi3an
-mibi3e
+mi2ad
+mi3ak
+mibi1
mi1c
mi3da
mie3dr
mi2e1i
+mie3l
+mien3s
mi2er
-miet1i
+mierer4
+mie2ro
+mi4et
+mie4ti
3mig
+mi2kar
mi2ki
mi2ku
+3mil
mi3l2a
-3mil4c
milch1
+mil4che
+mild4s
+4milz
2m1imp
-min5de
-min2e
-mi3neu
+minde4s
+min2en
+min2eu
min2ga
-mings4
-ming3st
+ming3s4
mi3ni
-mi3n2o
+3min2o
+mi1nu
+3mir.
+mi3ra
3miri
3mirs
-mir5sc
3mirw
mi2sa
+mi4scha
+mi4schn
+mi4schw
mise1
-mi3sp
-mis2s3c
-mi4ste
-3mi2t1
-mit3es
-mit3h
-mit3s4
+mis2s1c
+mi2s5te
+3mit
+mi2ta
+mi2th
+mi2t1r
+mit3s2
mit5sa
mi5tsu
+mi2t1u
4mitz
2m1j
-2m1k4
+4m1k4
m3ka
mk5re.
-2m1l
-m3la
-m3le
-m5li
-mlö3
+4m1l2
+ml3c
+ml3l
+ml3s
2m1m
-mma4ge.
+m2mab
m2m1ak
m2m1al
-m2m1ang
+mm1ang
m2m1ans
mm1anz
-mma3s4t
m2m1au
-m2m1ei
+mmd2
+mm1ei
mme4lin
mme4na
-mme2ra
+m4mentw
+mme2ra2
mme4rec
-mmer3k
+mme2sa
mm1inb
mm1inf
mm1inh
mm1ins
mm1int
mmi3sc
-mmi3s2t
-mm3m2
+mmi1s4t
+mmm2
mm3p
+mm2s
+mm3si
mm3sp
-m2m3um
+mm3sta
+mm3str
+m2mum
+mm2un
mmül2
-2m1n2
+mmüll1
+2m3n2
m4nesi
-m3ni
1mo
-mo4a3
+moa3
2mobj
-3mod
+3m2od
+mode3s
mo2dr
4mog.
mo2gal
3moh
-mo2i
-moi5r
+mo2i3
mo2k1l
-4mol.
+2mol.
3mom
-mo5m4e
-m2on
+mom2e
+3m2on
mo3ne
mo4n1er
-mons1
-mon5su
+mon2s3
+mon3su
3mo2o
-2mo1pe
-mo2per
+2m1ope
2mopt
-mo1r4a
-mor5ar
-2morc
-mor4d3a
-morgens6
-mo4sk
-mo3sp
-mo5s2ta
-mo3to
+mo1ra
+mo2rar
+2m1orc
+mor2d3a
+mor2dr
+mo2rer
+morgen5s6
+mork4
+3mos
+mos4ta
+moster4
+3mot
m1o2x
mo1y
1mö
-möbe2
mö2c
4mök
+m1öl
2m1p
+m2pf
mp4f3erg
mpf3erp
mpf3err
@@ -7921,212 +7732,219 @@ mp4f3erz
mp2fl
mpf3li
mpf1or
-mp6lif
-mp3lu
+m3pon
mp3ta
+m3pu
2m1q
-4m3r
-4ms
-msa3l
-m2s1an
+2m3r2
+2m1s
+m2san
ms3and
m4sap
-ms3as
-m2s1au
+ms1as
+m2sau
+m3sä
+m3sc
+msch2
+m4sco
m3se
m4s1ef
ms1erw
-m4s1ex
+m4sex
ms1ini
mso2r
ms1ori
m2spä
+m2sped
ms2po
+m2spot
+m2spro
+ms2pu
ms3s2
-m6stag
-m2stal
-ms2tau
-m1stec
-m1s2ti
-ms2to
-m1s2tr
-m2strä
-m1s2tu
-m3s2tü
+m4stag
+m3stel
+m3s2ti
+m3sto
+ms4tr
+ms5trä
+ms5tren
+m3s2tu
+ms4tü
ms1um
m2sü
m3sy
-ms2ze
4m1t
mt1ab
mt1ak
-m3t2am
+m3tam
mt1ar
mt3are
-mt1ein
mt1elt
m2t1erf
-m2t1erg
+m4t1erg
m2t1erl
m2t1ers
-m4t1ert
-m4t3eta
-mt1eu
-m2t1h
-mt5ho
-m3ti
-m4t1im
-m4t1ins
-mt1int
+m2t1ert
+m4t1eta
+m2t1eu
+m2th
+mt3ho
+m2t1im
+m2t1ins
mti2s
+mtmen2
+m3tö
mt1ös
-mt2s
-mt3sc
-mt5sco
-mts1e
+m4ts1
+mt2sa
+mt2se
mt3s2ka
-mts1p
-mt3spa
-mt3st
-mts3ti
-mt3t
+mt2spr
+mtt2
mt1um
-mtu3re
mt1urt
-mt3z2
-1m2u
+m3tü
+mt3z
+1mu
mu1a
mu3cke
2m3uh
mu3la
2muls
-m3umg
3mun
-mu3na
mun2d1a
-mu3ne
4m3unf
4m3ungeb
+mu3ni
m4unk
-mu3no
+munt2
+4munz
mu3ra
-mur3ma
-mu3ru2
-mu4r1uf
-mu4s3a
+mu4r1u2f
+m4us
+mu4s1a
+3musi
mu2s1o
mu2sp
-mu2s1t
+mus3t
mu2su
mut1au
-mut2s3
+muts3
+mut2st
1mü
2müb
+mül4len
3mün
3müt
+mütter3
2m1v
-mvol2l1
+mvoll1
2m1w2
-mwa4
+mwa2
+mwa4r
mwel4
1my
-my4s3
-my3t
+my4s
2m1z
-6n.
1na
-5na.
+3na.
2n1ab
-3naba
-na3ber
-4nabw
-na2c
-nach1
+na2bä
+4nabg
+4nabh
+na2bl
+n2abo
+na2br
+4n3abs
+4nabt
+3n2ac
+na2ch1
na3chen
-nachs2
-5nachw
-na3cke
-4n3add
-4n3adr
-na1e
+nach3s
+nacht6ra
+4nadd
+n2ade
+4na2dr
n1af
na1f4r
-3nag
-5n2ah
+3n2ag
+na2gem
+3n2ah
na2h1a
-n4ahm
n3ahn
3nai
+nai2e
n3aig
n3air
2n1ak
na2ka
3nako
-n3akt
n2al.
-nal1a2
-na2l3ad
+na2l1a2
na2lä
-5n2ald
-nal3ent
+3n2ald
+n4ale
+na4lent
na2let
-nal3k
-nal3l2a
+nal3la
nalmo2
+na2lop
+nal2ph
n2als.
nal3t4
na2lu
2naly
n4am.
-3n2ame
-5na3me.
-5n4amen
+3name
+n4amen
4n3a2mer
-5nami
na3m4n
3namo
-n3amp
-nam4sp
-4n3amt
-namt6s
-n1an
-4nan.
-4na2na
-4n3anb
-n2anc
-4n3ang4
-4nani
+2n1amt
+namt4s
+n1an.
+4n1a2na
+4nanb
+n1and2
+4n1ang
+2nanh
+2nani
4nank
-4n3anl
+2nanl
+3nann
na3no
-4n3anr
-4n3ans
-4n3antr
-2n3anw
+n1anp
+2nanr
+2n1ans
+2nantr
+2nanw
+nap2si
n1ar
-5n4ar.
+5nar.
na2r1a
-n4ard
-3nare
-5nari
-n2arl
-n3arl.
+2narc
+n2ard
+4narg
+3nari
+n2ark
+n2arle
2narm
-2n3art
-na3ru
+n2arp
+4n3art
+na3r2u
3nas
+n2as.
na4schw
-4n3asp
-na5sta
-4nasy
+4nasp
+4n1a2sy
+nasyl2
3nat
-5nat.
-5nate
-na3t2h
-5nats1
+n4ata
+na3t4h
+4natm
+nats1
nat4sa
-nat6sc
-nat3st
+nat4sc
4natt
n1au
4nauf
@@ -8134,146 +7952,125 @@ nauf4fr
n3aug
5naui
3n2aul
-4n3ausb
-nau3sc
-4n3ausg
-n3ausl
-4n3auss
-4n3ausw
-nau5te
+4nausb
+4nausg
+n2auso
+4nauss
+n4auste
+4nausw
navi5er.
navi5ers
1nä
-n2äc
+3n2äc
3näe
-3näh
n1ähn
2n1ä2m
-2n3än
-när4s1
-n1ärz
-2näs
-nä4sc
+2n1än
+när4s5
+3näs
+nä2sc
+n2äss
2näu
-5nä1um
-4n7b6
+3nä1um
+2n3b4
nbe2in
-nber2e
-4n1c
-nc5ab
-nce4n
-n3cer
-n3ces.
-n3che
+nbe3n
+nbe3r2e
+nbes4
+nbu2s
+nby4
+2n1c
+n3ce2n3
nch3m
-n3chu
n2ck
-n5cu
-4n1d
-nd1ab
-n3daf
+2n1d
nd2ag
n2d1ak
-n4dakt
-nd1ana
+n2danl
nd1ann
n2d1anz
-nd1arb
-nd3arr
-nda3ru
-n2d1au
-n3de.
+ndat2
+nd1au
+nd1c
nde4al.
-nde3alt
-nd1ei
-nd3ei.
-ndel4st
-n3den.
+n2dei
+nde4län
n4d3ents
-nde3o
-n5der.
-n5deri
nde4rob
nder5ste
-nde4s
-ndes1e
+nde2se
+ndi2a3
+n2dob
+ndo2be
ndo1c
-n3dol
nd1op
-n2d1or
-ndo3st
-nd3rat
-nd3räu
+nd1or
+n2dö
+n2d3rat
n2d3re
-nd3rob
+n2drob
nd3rol
nd3ros
-n2d3rö
-n4drui
-n4d5run
+n2drö
+n2drui
+n4d3run
nd2sor
nd2spr
+nd4stab
nds3tau
-nd3te
-nd1th
-nd1t4r
-n2dum
-nd2ums
-n2d1und
-n2dü
+nd3th
+ndt4r
+n2dü4
+ndy3
1ne
3ne.
-ne2a
-ne3am
-ne3an
+ne2ap
ne3as
ne3at
-ne3au
ne2bl
2n1ebn
2nec
3neca
-4nech
-2ne2e1
-nee3i4
+ne1ck
+3ned
+ne2de
+2nee3
+ne2e2i4
ne3ein
-ne3en
-nee3t
n1ef
-3nefe
-4neff
-ne3g6
-3n2eh
-n3ehe
-4ne2he.
-6n3ehr
+neg4
+2ne2he.
+3nehm
+4n1ehr
2n1ei
n2eid
-6neif
+4neif
3neigt
-5neigu
-4nein
-6n3eing
-6n3eink
+4n3eing
+4n3eink
ne2ke
-nek3t
+nek3t4
ne2l
+3nela
nel3b
-4n1ele
+2n1ele
+4nelek
+4nelem
ne3len
ne3li
nel4la
3ne3l2o
-ne3lu
-5n2em.
+3ne3lu
+n2em.
2n1emb
n1e2mi
2n3emp
2n1ems
3nen
-n2en.
-ne4n3a
-nen3dam
+n4en.
+nen3a2
+n2enb
+n2enc
4n1endb
4n1endd
4n1endf
@@ -8282,433 +8079,411 @@ n1endg
4n1endk
4n1endp
4n1endt
-4nendu
4n1endw
ne2n1e2b
nen3ei
+nenen1
ne4nene
+4nengb
+nen4ge.
+nen4gen
+4nengs
+4nengt
+n2enh
ne2ni
+n2enj
nen3k
-5nenn
ne2no
-nen7s4e
+n2ens
+nens4e
nen3sk
-5n2en5t2a
+5n2en3t2a
n1entb
-4n3entl
-4n1entn
-4n3ents
-4nentw
-6nentz
-ne2n1u
+4n1entl
+4nentn
+5nentr
+n1ents
+4n3entw
+4nentz
+ne2n3u
n2env
+n2enw
ne2ob
ne1os
-ne4pf
-2nepo
+2nepf
+2n1epo
ne2pos
-3n2er.
+n2er.
ne1ra
-ne2rab
-ne5r4al
+ne2ra2b
+ne3r4al
ne2r3am
-ne2r3ap
+ne2ran
+ne2rap
ne2rau
-4n3erbi
-2n1erf
-4n3erfo
+4nerbe.
+4nerben
+n1erbi
+nere2
+ne2reb
+n1erf
+4n5erfo
nerfor4
-4n3erfü
-n1erg
-2n1erh
-n3erhö
-ne3ri
+2nerfü
+3nergr
+n1erh
+2n3erhö
+3neri
n1erk
-n3ermä
+n2erli
+2n1erlö
+n1ermä
ner4mit
-2nermo
-4n3ernt
+n2ern.
+4n1ernt
+ne2ro
ne1rös
-n2ers.
+n2erp
+3n2ers.
2n3ersa
ner8schle
-3n4ert.
-4n3ertr
+n2ert.
+n1ertr
ne2rup
-4n1erz
+n2erv
+2n1erz
3n2es
n4es.
ne3san
-ne2sä
nes4c
nesi1e
-nes2k
ne3ska
-ne2s1o
+nes1o
ne2s1p
4n3essi
-5nest
-ne2ste
+ne1sta
nes3ti
-net1ak
-net1an
+ne2tad
+ne2t1ak
+ne2t1an
ne2tap
-n3etat
-net1au
+n1etat
+ne2tau
ne2th
net3ha
-ne2tre
-nett6sc
-2n3e2tu
+nett4sc
+n1e2tu
net2zi
ne2u
-neu3c
+neu1c
neu3g
-5n2ew
+2n1eup
+n2ew
2n1ex
3nez
1né
2n1f
-n3fä
-n3f2e
-n5fi
-nfi3le
-nf3läd
-nf3lin
-n3f2o
-nfo3s
-nf3st
+nf1ak
+nfalt4
+nf2ä
+nff4
+n3fi
+nfi4le.
+nf4l
+nf5lin
+nf2o
+nfo1s
+nf4r
+nf3s
nft2o
nft4s3
-4ng
+n2f1u
+4n1g
ng2abs
n2g1ac
-n2g3ad
-nga2ge
+ng1ad
n2g1ak
-n2g1a2m
+n2g3a2m
n2g1and
-n4ganl
+ng2anf
ng1anz
-n3gap
-n4garb
-n3gas
n2g1äl
-ng5d
-n3ge
-n4g5ein
-n5g2en
-ngen4da
-nge5nerw
+ng3d4
+n3gef
+n2g1ein
+ng2en
+ngen2a
+n3ger
nge4ram
-n4g5erse
-n5ges
+n4g3erse
+nge4zän
ng3g4
-ng5ho
-ng5hu
+ng3hu
n2g1i2d
-ng4lad
n3gläs
-ng3lein
-ng3lo
-ng3lu
-ng5m
+n2glic
+n2glo
+n3g2loc
+n2glö
+ng3m
+n2gn
ng3ne
-n2g1or
+ng1or
ng3rat
-ng3räu
-ng3rein
-ng3rev
ng3roc
-ng4sau
-ng4s3c
+ngs3c
ng4s3e4h
-ng5stel
-ng5stö
+ngs3pa
+ngs5tri
ng3ts
-n2gue
n2gum
-4n3h
-n5han
-n5har
-n5hau
-n5hä
-n5he
+2n1h4
+n3han
+n3har
+n3hau
+n3hä
+n3he
nhe2r
+n3hu
1ni
-3ni.
-3ni2a
-ni3ba
-nib3b
-2ni2d
+3nia
+nib4l
+nich1s
+nich8ters
+n1id
+ni2de
ni3de.
-ni3di
ni3dr
n4ie
nie3b
-nie3fr
ni1el
nie3l2a
-nie4n
-ni5ene
+nie4n3
+ni3ene
ni1ero
-ni3fa
-nifi3
-3nig
+nifes3
nig2a
-4n3i2gel
-ni2g3r
+2n3i2gel
+nig3r
+ni2gre
nig4sp
3nik
-nik1al
-ni2kä
-nik3ing
+ni2kal
+ni2kar
+ni3ker
+ni4k3ing
ni3kl
ni2kr
-3nil
-n2imm
+3n2il
nim2o
-4n3imp
-3n4in.
-nin2a
+4n1imp
+nin1
+3n2in.
+n2in4a
4n3ind
2ninf
3n2ing4
-4n3inh
-nin1i
-4n1ins
-4n3int
-2n3inv
-3nio
+4n1inh
+ni2nor
+2n1ins
+n2ins.
+4ninse
+4n1int
+2n1inv
ni2ob
-ni5ok
+ni3ok
ni3ol
-ni3os
-3n4is
+n2ip
+ni3ra
+3n2is
ni4schw
-ni4s1e
-ni5se.
-niso2
-nis1p
-nis3s2
-nis3tr
+ni2s1e
+ni2s1p
+ni3spi
+nis3s4
ni2s1u
2nit
-ni1th
-ni4ti
+ni2ti
ni3t4r
-nit2s
+nit4s
ni3tsc
+nitts1
nitt4sa
ni3tu
-3niu
-3niv
+ni3v
3nix
-2n1j
-4n1k
+n1j
+2n1k
n2k3ad
n2k1ak
n3k2al
n4k3alg
-nk1apf
-nk1arb
-nk1arm
-nk3arti
-nk1aus
-nk1äh
+nk2am
+n2kans
+n2kaus
+n2käh
n2k1är
-nk1e2c
-nk1ein
+nke2c
n4k3erfa
+nk4erg
nk1inh
n2k1ins
-n3kir
-n5klag
nk3len
nk3les
-n2k3li
-n3klin
-nk4lu
-nk5lun
-n3k4na
-nk3ne
-nk3nor
-n3ko
-nkor5d
-n4k1ort
-nk3rät
-n4kre.
-nk3rede
-n3kri
-nk3ro
+n2klie
+nk2lo
+nk2lu
+nk3lun
+nk4na
+n2kne
+n2k1ort
+nk2öf
+n2köl
+n2k3ro
nk2s1al
nks2ei
-nk2spa
-nk3spo
nk3s2z
-nk2ta
-nk3ti
-nk4t5i2t
+nk2tak
+nk2tan
+nkt1it
nk4top
nk2tru
-6n5l
-4n3m4
+2n3l2
+2n1m4
nmen2s
4n1n
nna2be
n2nada
n4n1all
-n2nan
+n2n1an
n2nau
-nn3d
-n3n2e
-nn3ein
-n4n3eis
-nn3ele
nnen3g
-nne5p
+n4nents
+nn2erh
+nn2erk
nne2rö
n4n3er4wa
-nn3er2z
+nner2z
nne2s
nnes1e
nne4st
-n5neu
+nn2ex
nn3f
-nn3g
+nng4
n3ni
-nnis3t
-nno3b
+n2nof
nn1o2r
-nn5sc
+nn3sc
+nn3se
nn3s2p
-nn3ste
-nns2tr
-nn4th
-n4n1uf
+nn2th
+n2n1uf
n2n1unf
nn1ur
1no
-5no.
-n2obl
+3no.
+3nobl
no2bla
-3noblo
-2n1obs
+n2o3ble
+2n1ob2s
no1c
-2no2d4
+2no2d
no3dr
-2n1of
-4n3o2fe
-n4oi
-2nole
+n1of
+2n3o2fe
+n3ole
no2leu
-nom4e
n2on.
-no3n4a
-non3s
3n2opa
-2nopt
-2nor
3nor.
nor2a
no2rad
no1rak
no3ral
-nor4d5r
+2norc
+nor2d5r
3norh
+3norm
3nors
n1ort
3n2os.
-no5se
no3sh
-3n2o3ste
-n1osth
-no3st4r
-no5tab
+no2sp
+n2oste
+nost1r
+2nostv
+no3tab
no2tä
-no4t1ei
-no4t1el
-no4t3in
+no4t3ei
+no2tel
+no3t3h
+no4tha
+no2t3in
no2t1op
no2tr
3nov
-4n1o4x
+3now
+2n1o2x
3noz
2nöd
-2n1ö2f
-n1ök
-4n1öl
-4n5p2
-npa4g
-npir5
-npro3
+2nö2f
+4n1ö4l
+2n3p4
+npa2g
+npro1
npsy3
2n1q
-4n3r2
+2n3r2
+nräu3s
nre3sz
-nrö4s3
-n5ru
-4n1s
-ns3ab
-n2s3a2d
-ns3ak
+nrö2s1
+6n1s
+n2s1a2d
n2s1all
-ns1an
-n3sand
-ns3ans
-ns3art
-ns1au
-ns3auf
+n2sang
+n2sant
+n2saus
+n3sav
n2s1än
n2s1äus
-n5sche.
-n5sches
-n5schi
-n6schlic
-n5schr
-n6schro
+ns2ca
+n6schef
+n4schro
nsch7werd
-n3se
-ns1e2b
-ns3ebe
+ns1eb
ns1e2d
nseh5ere
-nseh3i
-n5senk
nsen4sp
-n4s1ent
-n4s1ep
+ns1ent
+n2s1ep
ns1erf
-n4s1erg
-ns3erh
-n4s1erk
-n4s1erö
-n4s1ers
-n4s3erw
-n4s1erz
+ns1erg
+n2serh
+n2s1erk
+n2s1erö
+ns1ers
+n2s1erw
+n2s1erz
nse2t
n4s1eta
-ns3h
+n3sex
+nsfi4l
nsho2f
n3sil
n2simp
n2s1ini
-ns3int
nsi4te
+nsi2tr
ns2kal
-ns3ko
-ns3ku
-ns3ky
-ns3l
-n3so
-ns3ob
-n4s1op
+n2s1op
n4s3ort.
-ns3park
-ns4pei
-n3s4pek
-ns3ph
-ns2pi
+nsp4
+n2spat
+n2sph
+n3s2pi
+ns4pie
+n2spo
+ns3pon
n2sprä
n4s3prie
n4spro
@@ -8716,157 +8491,151 @@ nsrü2
ns3s2
nst1ak
n3star
+n3stat
+n4stat.
n4s3tate
-ns2tau
-n2ste
-n3stei
nst3eif
-n3stel
-n4stem
-n5stemm
+n3stemm
ns4tent
-n3step
-n5s6terbe
+ns6terbe
n5s6terne
n5s6terns
-n5steu
-ns2tie
-ns2to
+nst4erö
+ns2ti
+nst5opfe
+ns4tor
n4strac
n4strie
ns2tu
-nst4ü
+nst2ü
nstü1b
-n4sty
-n3su
+n2sty
ns2um
-n4s1un
-ns2unr
+n2s1un
+ns2ung
+ns4unr
+ns4uns
n3sy
-ns3zi
-4n1t
+n4s3zi
+2n1t
nt3abs
-nta3c
-nt2al
+n3t2a3c
+n3t2al
nta3m
nt1ang
n4tanza
nt2arb
-nt3ark
-n5tarm
-nt4as
+nt1ark
+nt2arm
nt4at
-n4t1auf
-n3taur
-n3taus
nt1äm
n2t1äu
-n3te
-n5te.
nte3au
nte2b
nt1ebe
nte1e
nte3g6
-n4t1eh
-n4teig
-n4t1ein
-ntem3p4
-n5t4en
+nt1eh
+n2teig
+nt2en
+nt4ene
nten6te.
-nt5ents
-n5t4er
-nte3ru
-n5tes
-n6t3ess
-n5tet
+n3ter
+nt4ern
+nt4ers
+nt4ert
+n4t1ess
+nteu3
nte3v
-n2th
-n3the
-nt1hi
-nt1ho
-n3thol
-n5thr
-n5t4hu
-n3ti
+nt2her
+n2t3ho
+n3thr
+n3t4hu
nti3c
nti3k4l
-n4tinf
-n4t1inh
+n2tinf
+n2t1inh
ntini1
-n5ti1t
+nt2ins
+n3ti1t
+ntmen2
ntmo2
-n5to
-nto5me
-nton4s1
-ntons3c
+n3to
+nto3me
+nton2s1
n3tö
nt3rec
-n5tree
nt3reif
-n5t4rep
-n2t3rin
+n5trep
+nt4rig
n5trop
n2t3rü
n4ts
nt3sa
-nt3s2o
-nt3s2p
+nt4sau
+nts2o
+nts2p
nt4s3par
+nts2t
nt2sto
-nt3t
n3tu
+3n4tu.
ntum4
+ntu2ra
+ntu4re.
+ntu4res
+n3tü
nt3z2
-1nu
-nu1a
-nu4ale
+1nu.
+1nu1a
nu3ar
-nu3as
-nubi3
-2nu1c
+nubi1
+1nu1c
+1nud
3nue
nu2es
-nu3et
nuf2
nu2fe
+1nug
2n1uh
-3nu3k4
+1nui
+nu3k4
n2um.
-2n5umb
+2n3umb
2numf
2numg
3numm
2numr
2n1ums
-2n5umz
-nu4n
-n1una
-2n1und
+2n3umz
+nu2n
+2nuna
+1n2ung4
3nung.
-n1ungl
+n3ungl
2n1uni
2nunt
+1nuo
2nup
2nur
-n2u2s
+3nu2s
nu3sc
nu3se
nu3sl
-nu3spo
+1nut
nu2ta
-nu5te
-nu2t3r
-5nü.
-2nü2b
+nu4t3r
+1nuu
+1nux
+1nuz
+3nü.
+2nü4b
nür1c
3nüs
1nüt
-4n1v2
+2n1v2
n3ver
-n3vi
4n1w
-n3wa
1ny.
1nyh
2nymu
@@ -8874,84 +8643,88 @@ n1yo
1nyr
1nys
1nyw
-4n1z
+2n1z
n2zad
-n2z1a2g
-nz3am
+n2z1a4g
n2zan
-n2z1ar
n2z1au
n2z1än
-n2z1är
-n2z1ec
+n2zär
+nzdi1s
+nz1ec
n4zense
+n4zentw
n4zentz
nz3erwe
nzi2ga
+nzig4s
nz1ini
-nz1of
-n2z1or
-nz3th
+n2zor
+nz2öl
+nz3s
+n2zurk
n2z1wa
n2z1wä
-nz1wer
-nz1wet
-nz1wir
+n2zwö
n2z1wu
-nzzol3
ño1
-4o.
2o3a2
-o5abs
+o4abi
o4ac
oa3che
oa3chi
o4ad
oa3de
+oa4g
o4ah
o4a3i
oa3ke
-oa4k5l
+oa4k1l
o4a3la
o4a3mi
oanne4
-o4ar
-o4as
+o2ar
+o2as
3oa3se
-o5asi
o4at
+o5au
o1b
ob2al
+2oban
o3bar
2o3b2ä
2obb
ob2e
-2o3be.
+2obe.
+2obea
ob3ein
-2oben
-oben5se
-o2ber
+2o3b4en
+oben3d4
+oben3se
+ober3in4
obe4ris
-obe6sp
-2obi
+2obew
+2o3b2i
+obi4t
+ob3ite
1obj
ob1l
-ob3la
-o2b5li
-1obm
-2obo
+o2b3li
+2o3blo
+2o3bo
o2b3re
-ob6ris
-ob2s
+o3bri
ob3s2h
ob3sk
-ob3so
-ob3s2p
-ob3str
+obs2p
+ob2sta
2o3bu
+obu2s
2o3bü
+2oby4
2oc
o3ca
+oc1c
o1ce
och1a
ocha2b
@@ -8959,44 +8732,52 @@ o1che
oche4b
o2ch1ec
och1ei
+ocher4k
och3l
-och5m
+och3m
och1o
-och1ö2
+och3ö2
och3r
+och1s
ocht2
och3te
-och3to
o1chu
ochu2f
-och3w
-o3ci
+och1w
+o1ci
o1ck
o2ckar
-o3ck2e
+o3cke
+ock2er
o3cki
+o2cko
ock3sz
-o3cr
+o1cl
o1ç
-2o1d
-o3dar
+o1d
+o3d2a
+od2dr
o3deb
-o3de3i
-ode2n
-oden1e2
+o3d2e1i
+odein3
+ode2n1
+odene4
ode3sp
o3dex
+2o3dia
o3dir
+o3div
+o2don
odo4s
-4odr
+2odr
o2dre
-od1t4
-4o3du
+odt4
+2o3du
2o1e2
o2ec
-o3en1
-o2e3s
-oe3t
+oen1
+o4e3s
+o2e3t
o3et.
o3ets
o1ë
@@ -9007,86 +8788,79 @@ of1au
o2f1ei
of2en
o3fer
-ofes3
of2f1a
of2f1in
1offiz
-of2f3l
+of2f5l
of2f3r
offs2
of2fu
2ofi
-ofi3k
of3l
of1la
+of4lä
+of4lö
2ofo
-o1f1r
+2o1f1r
of3ra
of3rä
-of2s
-of4s3a
-of3sä
-of3st
-ofs1u
+of4rü
+ofs1a
+of4sam
+of2spe
+of2spr
+of2s1u
2oft
of2tei
of3th
-4o1g
+2o1g
o2g1ab
oga3d
og1ala
og1ang
-oga4t3
-oga5te
-o2g5ei
+o2g1ei
oge2l1i
o3gh
ogi2er
-og3ins
-o2gl
-o3glo
-o3g6n
-ogs4
+og2lo
+o3g4n
+ogs2
og3sp
+og1ste
o1ha
o1hä
o1he
-o3he.
-oh1eis
-o3heit
-o3hem
-o3hen.
-o3her.
-o3here
-oh1ert
-oh1erz
-o3hes
+o2h1eis
+ohen3s
+o2h1ert
+o2h1erz
o1hi
ohl1a
+ohl3au
oh3lec
ohl1ei
-oh5lem
-oh5len
+oh3lem
+oh3len
oh3lep
-ohl3erh
-oh5les
-oh3li
+oh4lerg
+oh4l3erh
+oh4lerw
oh3lo
ohls2e
oh2lu
-oh3m
-2ohn
-ohn3a
+3ohng
oh2ni
+1ohnm
oh2n1o
o1ho
oho2la
oh1o2p
-o2h1ö
+o2h3ö
ohr1a
oh4rin
+oh1ro
oh1s
-oh3ta
+oh3t
o1hu
oh1w
2o1hy
@@ -9095,204 +8869,195 @@ o1i2d
o3ie
o1im
oimmu4
-o1i2n
-o4i3ne
-oi4r
+o1in
+oi2r
o2isc
o3isch.
o1ism
+oiss2
oi1th
2o1j
2o1k
-oka3i
oka2la
-okale2
-3o4kel
-o3ki
-oki4o
-ok3lau
-ok3lä
-okna3
+okale4
+3o2kel
+oki2o
+ok1lä
+ok4n
+4okr
ok2s1p
-ok3t4
+okt4
2ol
o1la
+o2lab
o2l1ak
ol2ar
+olars2
ol1auf
o1lä
-4olc
ol4dam
-ol4d5r
-oldwa5s
+ol4dr
+ole3e
ol1eie
ol1eis
+oler2
ole3s
ol1ex
o1lé
-ol4fa
-ol2f3l
+ol2fa
+ol2fl
olf1r
ol2fra
-olf3sp
-olge4ne
ol2gl
ol2gr
ol2i
-olib6
-oli5en
-oli5f
-oli5tu
+oli3k4
ol2kl
-ol2k3r
+olk3r
+ol2kre
ol2lak
-ol2lau
-ol4l1e2c
+ol2l3au
+oll1e2c
ol2l1ei
-oll1el
+ol2lel
oll5ends
-ol4l3erk
+ol4lerk
oll5erwe
-ol3les
-ol3lo
-ol2lu
o3lo
-o5l2of
+ol2of
olo3p2
ol1ort
-o1lö
-ol2pr
ol2str
o1lu
+3oly
+1olym
ol2z1a
-ol6z3ern
+ol4z3ern
ol2zin
-4om
+ol2zw
+2om
+o2mab
oma4ner
om2anw
om1art
o2m1au
-o3me.
o2meb
ome3c
o2m1ei
o3m2eis
o2mel
-o5men.
-om3ene
+o3men.
o2mep
o2meru
om1erz
-omie4t1
+om2es
+omiet1
o2m1ind
om1ing
-o3mini
-om1int
+o2m1int
om3ma
-om3me
-omme4r
om1org
om3pf
-omp6l
oms2
-om3sp
-om1st
-o4m3un
-o5m4ung
+omtu3
+o4munt
omy1
-2on2a
-on3a2b
+2ona
+ona2b
o2nae
-on3ak
o3nal
-on3ap
-o2n3ar
-on4are
-on4at
+on1ap
+o2narb
+on2au
on3aus
-2o3nä
+2onä
onbe3
2onc
+onderer5
2one
-on4eh
-on4e2n1
-onen3g
+one2i
+one2n3
onens2
o2n1erb
-on1erd
+o2n1erd
+on1erg
on1erö
o3nett
-on5f
-4ong4
-on3gl
-ong5sc
-ong5st
+on3f2
+on3g2l
+ong4r
+ong3s
4o3ni
-o5ni.
-oni3d
-o4ni4kr
+on2i3d
+o4nikr
o4n1im
on3ing
-on5k4
+on3k2
onli4
onlo2c
-on3nan
-o3no3
-o4noke
+on3n2an
+on3n2e
+ono1
+o3nod
+o2noke
on1orc
-on4os
-on2s
-ons3a2
-on3sch
-on4seb
+ono3s
+ons1a
+onsa4g
+on4sam
+on2seb
onse2l
onsi2
+ons3l
ons1p
-ont2a
+onst2h
+on3t2a
ont3ant
-on6t5end
-ont5erw
-on2t1ri
+on4t3end
+ont3erw
+ont2h
+on4t3ri
+ont3s
+o1nu
2onuk
-on5v
+on3v
1ony
-on5z
+on3z
o1ñ
-oof4
-oo2k
-ook3l
+oof2
+oo2k3l
o1op
o1or
oor3f
oo4sk
oo2tr
-oot2st
-2o1ö
+2o1ö2
o1pa
-opa1b4
+opab4
o2p3ad
-op1akt
-opa5st
-o1pä
-o1ped
+op3akt
+opa5s
+o1pec
o1pei
-o3pek
o1pe4n
2opf.
-op2f1a
+op2f3a
op3fah
-opf3l
-opf4li
-op1flu
+o2pfe
+op4ferd
+opf5erde
+opf1l
+opf3la
op1flü
4oph2
+o3phe
o1pi
-opi5a6
+opi5a4
opi3er.
opi5ers.
opin2
op5lag
-op3le
+o2p3le
op3li
2o3po
op4pl
@@ -9300,227 +9065,226 @@ op2pr
2o1pr
1opsi
op3sz
-1opt4
-op3th
-op3tr
-o1pu
+1op3t4
o1q
2or.
or1a
or3a2b
o1rad
-or3adr
2orak
2oral
-ora3li
-o4r3alm
+o2r3alm
or4alt
+3oram
+or2and
o2ranh
-orani1
or3arb
o1ras
-or3au
-o3r2ä
-or3änd
-or3ät
+or3att
+o3rä
+or1änd
+or1ät
or2bar
+orb2l
or1c
2orca
or2ce
-4or2da
-ord1am
-ord3ele
+4orda
+or2d3am
+or2dau
or4d3eng
or2deu
or2d1ir
+or2dit
1ordn
or2do
+2ordr
2ords
ord3s2t
+or2dum
2ordw
4ore
-ore4a
+ore4as
o2r1e2ck
-o5ree
o2r1ef
ore2h
or1eig
o2rein
-o2r1er
-or3eth
+or1er
+o2rerf
+or1eth
2orf
or2fle
+orf3s4
or3ga
2orget
or3g2h
2orgia
+orgi1e
or2gl
or3gle
+or2gn
2orh
-o1ri
2o3ric
+o4rient
o3rier
4oril
-4orin
-or1ins
+4orin1
2orit
-or3k2a
-or4k3ar
+ork2a
+or2k3ar
ork2s
2orm
-or2mor
-or3na
-or3n2o
-orn3st
+or4mans
+or4ment
+or5ne.
+or3n2o1
2o1ro
-or3oly
-oro3n4a
+oro3n2a
2o1rö
2orq
2orr
+orr4a
or3rh
2ors2
-or5sa
-ors4c
+or3s4a
orsch5li
or3sh
or3sz
-or2ta
-or3tad
-or4t1ak
-or4t3an
-ort1au
+or2t1ak
+or4t1an
+or2t1au
+or2tär
+or2tef
ort3eig
-ort3ein
-or4tem
or4t3ent
or4t3ere
-or4t3erf
-or4t5ev
-or4the
-or4tin
+ort3erf
+or2t3ev
+or2the
ort3ins
or4t3off
-or2tö
-or4t3rau
+or2tor
+or4tö
+or4trau
or4t3räu
ort3re
ort3ric
-ort5sch
or2t1um
o3ru
or2uf
o4r3un
-o5rus
-or3ü
-2orw
+o2r3ü
o2rya
-o3s2a
+2o3s2a
os3ad
os4an
-osa3s
+osa1s
+o3sche
os4co
2o3se
-ose3ei
-o4s1ei
+ose3e
+o2s1ei
ose2n
+o4sents
+2osh
o3s2hi
o3sho
2osi
-osit4
-osi3tr
-o3s2k
-os3ka
+o3sk
+o4ska
os3ke
-os3ki
+o4ski
+2os2kl
+2os2ko
os2lo
-o2s1p
-o4sper
+2oso
+2os1p
+o2s3per
o3s2po
os2sa
oss3and
os4sä
-os5se.
-os4sei
-oss3enk
-os5sent
-oss3enz
-os4s3o
-os4s3p
-os4st
-oss1ta
-oss1tr
-o2st
-os4t1a
-os5ta.
+os2sei
+os4s3en4k
+os4s3enz
+os2s3o
+os4son
+os2s3p
+os2s3t
+ost1a
osta2b
-os5tali
-os5tarr
-os2tau
+os4t3am
+os3tarr
+ost4art
+os4ta4s
+os4tei
oster3e
os6t5er6we
-ost1h
+os2t3h
os3til
-os1to
-os2t1ob
+os3to
+os4t1ob
+ost3ran
ost3rä
ost3re
ost3rot
-ost1uf
-osu4
-o1sy
+ost3uf
+2osu4
+2o3sy
o3s2ze
o2ß1el
-o2ß1enk
+o2ß1en2k
o2ß1enz
-oße2r
-o2ß3ere
+o2ß1ere
o2ß1erf
2o1t
-ota3m
-o3tark
+ota2go
+o5tark
o2t1au
ot3aug
-ot1är
-4o3te
-o4teb
-ote1i
-ote3i6n
-ote4l1a
+o2teb
+o3t2e1i
+otei4n
+ote2l1a
+ote4lei
ot4em3
otemp2
-o4t1erw
-4oth
-ot2he
-ot3hel
-o4t1hi
-ot1hos
-o4thr
-o3t2i
-o4t3i2m
-o4tl
-otli4
-4oto
+o2t1erw
+ote2s
+4ot2h
+ot4he
+ot5hel
+o4t3hi
+ot3hos
+o2thr
+o2t1i2m
+ot2in
+otli2
+ot4ol
ot1opf
ot2or
+oto2ra
+oto1s
o3tra
o2t3re
ot3rin
-ot3rut
+ot2sa
+ot3sc
ots1p
ot4spa
-ot3spe
-ot3stra
-ot2tau
-ot3te
-ot4t3erk
+ots2pe
+ot2spr
+ot4terk
+ot2th
ot2t3r
-ott3se
-2o2u
+ot4tri
+o3tü
+o2u
oub4
ou2ce
-ou3e
ou1f4l
+oug2
ou2ge
ou3gl
o3uh
@@ -9528,497 +9292,501 @@ ou4le.
o3um
o3unds
oun4ge.
+2our
ouri4
-our6ne.
-our3st
+our4ne.
ou3s2i
outu4
+2ouv
2o1ü
o1v
ove3s
+2ovi
oviso3
-2o3vo
-2ow
-o1wa
-o1wä
-o1we
+2ovo
+2o1w
o3wec
-ow1ef
owe2r1
-o1wi
-o1wo
-o1x2a
+o3wi
+o1x
+ox2a
ox2e
-o1xo
+1o2xid
+ox3l
o2xu
1oxy
+o1y2en
o1yo
-oys2
-oy3st
-2o1z2
-oz4e
+oy1s4
+2o1z
+oz2e
+ozen4ta
o3zi
-ozon3a
-ór3
+ozon1
+órd2
ö1b
+öbe2la
öbe4li
+öb2l
ö2ble
ö2b3r
-öb2s5
+öb2s3
2ö1c
-ö4ch3l
+öch1l
ö2chr
öch2s
öchs4tu
öcht4
ö1d
-ödi3en
-ö2du
+ödi3
+öd2st
ö1e
+1öf
öf2fl
öf3l
-ög3
-ögen4s1
-ö2gl
-ö2gr
-ög4s
-ög4u
-2öh
+ögen2s1
+ög3l
+ög3r
ö1he
öh3l2e
-öh3m
-öh1ri
+öh3ri
ö1hu
-ö2k
-ö3ke
-öko3
+ö3ig.
+ö1ke
+ö2ko3
ök3r
-ö6l
3öl.
-öl1a
+öl1a2
öl1ei
öl1em
+öl4en
öl2f1ei
-ölf3s
öl1im
öl1in
-öl2k5l
+öl2k3l
öl3la
-öl4nar
+öl2nar
öl1o2
+öls2
öl3sa
-öl3s2z
-öl1u
+öl3sz
+ö2l1u
öl2ung
-öl3z2w
+ölz2w
+öm2s
2ön
-ön3d
ön2e
ö3ni
+önn2e
ön2s
ön3sc
+ön3sp
+ö1nu
öo1
ö1pe
öpf3l
-öp2s3t
+öp4s3t
ör3a2
ör1c
-örden3
ör2dr
-ö2r1ec
+ö2r3ec
ö2r1ei
ö2r1e2l
ör2erg
+ö2rerl
ö3r2erz
ör2f3l
ör2gl
-ö1ri
ö2r1im
ör2kl
+örner2
ör1o2
örs2e
-ör3sk
-ör2st
+ör3s2k
+ört2e
ör2tr
-ö1ru6
+öru4
ö2r1une
ö2sa
-ö2sc
+ö2scha
ö4sch3ei
-ösch3m
-2öse
+ö2schl
+ö2sch3m
+ö2schw
ö2s1ei
ö2sp
-ös4s3c
+ös2s1c
ös2st
ö2st
ös3te
-ös1tr
+ös2th
+ös3tr
+ö3su
ö1ß
2ö1t
ö2t3a
-ö3te
-öte4n1
+öte4n3
+öt2h
+öts2
öt2sc
öt2tr
ö1v
ö1w
-öwe4
ö1z
öze3
-özes2
-4p.
+özes4
+p2a
1pa.
1paa
-1pack
+1pac
pa3da
-pa3fa
+pa2dr
+pa2el
pa1f4r
-pa3g2
+pag4
+pa3gh
pa1ho
1pak
-pa1kl
-1pa1la
+pa1k4l
+pak2to
+1pala
pala3t
1palä
-pa5li
+pa3li
2palt
-p2an
pa2nar
-pan3d
-pan4ds
pa3nei
pa2neu
pan3k4
2panl
-3pano
-pans4
+3pa2no
pan3sl
+pant2
3panz4
-3pap
+1pap
+papi2
+papieren8
papie8r7end
-3parad
+3para
pa2r3af
par3akt
+1parc
pa5reg
+pa5rek
2par2er
2parg
+pargel6d
1park.
par4kam
par4kau
-par4kl
+par2kl
par2kr
-pa2ro
-1parol
+1paro
2parp
1partn
1party
par3z2
-pa4s
-pa5sa
-pa5sc
-pa5se
-pa5si
-pa5s2p
-pa5str
+pa3s2p
+pa4st
2paß
-p4at
-pa5ta
+1pat
pat4c
-pat2e2
-1pati
-1pat4r
-1pau3
-p1auf
+pat4e2
+pa5t4r
+1pau
+p3auf
pa3uni
-pau4st
-pä2
-1päc
+1pä
+3pä2c
pä3cke
-1päd
-pä3de
-1pärc
-pä3ß
+3päd
+3pär
+3päs
pä4t1e2h
pä4t3ent
-pät1h
-pät3s
+pä2t3h
+pä2to
+pät3s4
2p1b
2p3c
-4p1d
+2p1d2
pda4
+p2e
1pe.
-pe4a2
+pe2a
pea4r
-1ped4a
-peed1
-2pef
+pech1
+1ped
+pe2en
+pef4
pei1
+2peic
pe1im
-3peit
-2pek
pekt4s
+2peku
1pel
-pe4l3a4
-pel5d
+pe2l3a4
+pel3d
pe2let
-pe3lin
+pe2lex
+pe3li4n
pe4l3ink
+pell2a
pell4e
1pem
-pena6
-pe3n4al
+pena4
+pe3n2al
pen3da
pe4nen
1penn
+pe2n1o
3pensi
1pensu
-pe2nu
pen3z2
+1pep
pe1ra
-per4an
+per2an
pere2
-1perle
-per6na
-perne4
-per4r3a
+1perl
+per4na
+3pero
+pe2rob
+per2r1a
5pers
perwa4
pe3sa
-pes4e
-pese2n
-pes5s2
+pes3s2
pe2st
3pet
1pé
-2pf
4pf.
p2fab
-pf1abe
+p2fad
p2faf
pf3ai
p2f1ak
pf1ans
-p2fa6r
+p2fa4r
pf3are
p2f1au
+4p3fe.
p2fei
pf1eim
pf1ein
-pf1eis
-pfe2l
p3fen.
p2fent
p3fer.
pf2erw
-p3fes
+p3f2es
pff4
-p2f1ins
-p2f5lä
+p2f1in3s
+p2f3lä
pf3lei
pf3lie
pf3lo
-pf3lö
-pf5lu
+pf3lu
p2for
pf3r
pf1ra
-pf1ri
-pfs2
+2pfs2
pf3sl
-pf3sp
pf3sz
-pft2
-pf3th
+2pf3t
2p1g
pgra2
1ph
4ph.
ph2a
-2phab
2phä
2phb
4phd
2p1hei
-phen3
+phen3d
+phen3s
2ph1ers
2phf
4phg
phi2ka
4phk
ph2l
-2ph3m
+2phm
2phn
p3hop
-4phö
+2phö
ph4r
2phs
-2ph3t2
-4ph5the
+ph3t2
+2phthe
phu4s
-4p1hü
+2p1hü
2phz
-pi4a3
-pia5l
-pia5s
+pi2a3
+pias4
+pi3as.
pi3chl
-p4id
-pie3fr
+p4id2
+piegelei8en
pi2el
-pie4la
-3pi2er
+piela2
+3pier
+3pik
1pil
+pi3le
pil4zer
-pi2na
pin2e
+pingen4
ping3s
3pinse
-pi2n1u
pi2o
pi3oi
pi3onu
+3pip
pi2pe
-pi5ri
-1pis
-2piso
-pit2a
+pi3ri
+3pirin
+3pis
+4piso
+pi3t2a
pi1th
pit2s
pi2z1in
-p1je
-2p1k4
+p1j
+2p1k2
pku2
pkur1
1p2l4
-4pl.
+2pl.
3p4la
+p5la.
p5lad
plan3g
3plä
2ple.
ple1c
-ple4e
p4leg
+p4lem
3ple5n4
-p5lic
-p5lif
-4plig
-p4lis
+2plig
+p4lik
+p4liz
p4lo
-2p1m
+2p3lu
+2p1m2
2p1n
1p2o
po3b4
po1c
+3pod
2p3oh
po2i
po3id
3poin
-3pol
+3pok
+3p4ol
po2lau
-po5li
-po3ly
-po1ob
-po2p1ak
-po2p1ar
+po3li
+po4lor
+2pond
+po1o2b
+po2p3ak
+po2p3ar
po1pe
po2pl
po3pt
po1ral
po1rau
2porn
-por5s
-por4tri
-po5s2e
-po3sp
+por3s
+por4tin
+por4tre
+por6tri
+pos2e
po4sta
-post3ag
+pos4t3ag
po4stä
+po2s3te
post3ei
-po4sti
-po3s4tr
+po2sto
+pos6tr
post3ra
po3ta
3pote
-pot2h
-3poti
po2t1u
po2w
-po1x
+po3x
pö2bl
pö2c
-4p1p
-p2p1ab
+2p1p
+p2p3a2b
pp3anl
-p3pe
-ppe1e
ppe4ler
ppe2n1
-pp1f4
+p2p1f4
p2p1h
p3p2ho
-p2p3l
+pp3l
pp5lan
-p4ple
-pp4li
+pp1lä
+p2ple
p2p3ra
p2p3re
p2pri
pp3sa
-pp3sp
ppt2
-pp3ta
-pp3to
p2r2
-3prak
-3prax
+1prak
+1prax
+p4rä
1präd
1präg
3präm
3präs
-4pre.
+2pre.
2prec
1pred
pre2e1
1prei
3preis
2p3rer
-3pres
+3p4res
pri4e
+2prig
1prinz
-2prit
1p4ro
3prob
-pro3be
2proc
3prod
3prog
3proj
-pro3st
-3proto
+2pross
+pro1st
+3prot
1prüf
2prün
-2ps
+2p1s
4ps.
-ps2an
+ps4an
+p3se
p3s2h
-4psi
-p2s1id
-p2s1ö
+ps1id
+p2sö
ps2po
+p2st
+p3sta
p3stea
-p1s2ti
+p3stel
+p3s2ti
pst3r
ps2tu
-3psy
+p3stü
+3p2sy
ps2ze
2p1t
-p2t1a
+pt1a
+pt2ab
pt3alb
-pt3as
pt3at
p3te
-p5te.
p4t3ec
p4t1ei
pte4l
@@ -10027,110 +9795,93 @@ p4t1ent
pt3erei
p4t1erw
p4t1erz
-p5tes
-p2t1h
-p3ti
-p4t1in
-pto5me
-p2tos
+p2th
+pt1in1
+pto3me
+p4tos
+pto2w
p2t3r
-pts2
-pt3sa
-pt3so
-pt3sp
-pt3st
-pt3su
-pt3t
+pt3s2
+ptt2
pt1um
pt1urs
-p2tü
+ptü4
3p2ty
-pt3z2
-pu3as
-1pub4
+pt3z
+1pu
+pu1a
+pub4
+2puc
pu2dr
-1puf
2p1uh
-pul4sp
-1pulv
-1pum
-1pun
-4pund
+pul2sp
+2pund
pun2s
2punt
-1pup
-pu3ri
-pur3st
-pu2s
-pu4s3t
-1put
-3put2s
-3putz
+2pur
+pu2s3t
+3put
+put2s
1püf
2pül
+pün2
2p1v
2p1w
pwa4r
-3py3
-4p1z
-q2u4
-3quen
-que3rel
+3py1
+pys4
+py3t
+2p1z
+qu4
1queu
-6r.
1ra.
ra2ab
-2r5aac
-r5aal
-ra1ar
+2r3aac
+r3aal
+ra3ar
r1ab
ra2bar
rab2bl
2rabd
-ra3ber
+r2aber
2rabf
2rabg
-r4abi
-ra1bl
-rab4le
-ra2bli
-rab5r
+1r4abi
+ra2br
2rabs
2rabt
2r3abw
1raby
ra1ce
2r1acet
-ra3che.
ra4cheb
-ra3chen
-ra3chet
-rach4t3r
+ra4chin
+racht3r
+rach6trä
ra2chu
r2ack
+r2ad
+r4ad.
rada2
ra2dam
2radap
3radf
-ra3di
-3radle
-ra4d3r
+3radl
+r3a2d3r
rad5t
1rae
-ra1er
r2af
-ra4f3ar
+raf3ar
ra2fer
-r2ag
ra3ge
ra3gle
-ra2g5n
-r2ahm
+ra2gn
+3r2ahm
+4raht
2raic
-rail2
rail4l
-r3air
-ra3ke
+2r3air
+1rake
3ra1k4l
ra2kre
ra2kro
@@ -10138,313 +9889,334 @@ ra2kro
3rakü
r2al
r4al.
-rala4
-ra4l3ab
+ra2la2
+ral3ab
+rala4g
r3alar
ral3b
3r4ald
ra3le
-4ralg
+2ralg
+r4ali
rali5er.
rali5ers
-ral3k2
+ralk2
+ral3la
rall2e
+2rallg
2r3alm.
r3alp.
-4ralpe
+2ralpe
r4als
r3al3t
-r4alth
+r4alt2h
ra2lu
3raly
-r2am
-ra3ma
+rama3s
ra2mer
-1rami
+1r2ami
+r2amm
+ram4man
ram6m5ers
ram4m3u
-r3amn
ram2p3l
-ram3ste
-2r3amt
-ramt6s
+2r1amt
+ramt4s
r2an.
4ranc
-r2and
r4anda
r4ande
ran4dep
ran4d3er
-4r5anei
-2r3anf
+rand3s
+4r3anei
+r4aner
+2ranf
1rangi
-4r3anl
+rani1e
+ran2kr
+2ranl
2r1anm
-r1anp
+2r1anp
2ranr
-2rans
-r4ans.
+r2ans.
r2ansp
+ran4spa
2rantr
2r3anw
r2ap
2rapf
-ra3pl
-2r1ar
+r1ar
+r2ara
+2rarb
3rarei
rar3f4
ra2r1in
-r3arz
+r2ark
+r2arp
+2r3arz
+r2as
r4as.
-ra3s4a
+ras2a
ra4schl
+2r3asph
2raß
1rat
r4at.
-ra2ta
-ra2t1ä
-2ratm
+ra2t1a
+r3atl
rat4r
-2ratta
+rat2st
+2r3atta
4rau.
3raub.
-rau3bl
4raud
-rau3en
-2rau2f
+rau3e2n
+2rauf
2raug
+3raum
rau4m3ag
rau4man
rau2mi
-ra3umsa
+3rausc
2rausg
-rau4sp
-raus5se
-rau4sti
+rau2sp
+2raus5s
raut5s
1raü
r2ax
-r2äd
+3r2äd
4räf
4räg
-4räh
+2räh
2räm
3rän.
3räni
+3räns
2r1är
+r2är.
rä3ra
-r3ärz
-rä4s3c
+rä2s1c
3rätse
rä2u
+räu2s
+räu5sche
4räut
2r1b
r2b1ab
-r2b3a2de
+r2b1a2de
r2bak
+rbal3a
rba3re
rb1art
rb1auf
-rb3b4
+rbb2
rb1ech
-r2belä
-r2b1ent
+r4belä
+rb1ent
rbe3r2e
-r3bla
+r3b2la
rbla2d
-rb7lasser
+r8blasser
r4b3last
r3blä
-r2b5le.
-rb5ler
+r2ble.
+rb3ler
+rb2lin
+rb2lö
rb2o
-rb3res
-rb6ri
+rb4ri
rb2s
-rbs1a
+rb3se
rb4sei
-rb4ser
rb3ska
rbs1o
+rb3sp
rb4stä
rb3str
-4rc
+rb2u
+rby4t
+2rc
r1ce
-rcha2
r1che.
r1chen
r1chi
rch3l
rch3m
rch3r
-rch1s4
+rch1s2
rch3sp
+rchst4r
rch3ta
+rch6terw
rch1w
+r1ci
r2ck1
-r1cr
+r1cl
r1ç
2r1d
-rd5achse
+r3d2ac
+r2daf
r2d1ak
-rd1al
-r3dan
+r2d1al
+rd2am
rdani1
-r4d1ant
-r4d3anz
-rd1arb
-rd1ei
+rd1ant
+rd1anz
+r4dap
+r2dei
+rd2ei.
r2d1elb
-rde7me
r3den
-rde5nar
+rden3d
rden4gl
-rde3r2e
+rde3re
+rder4er
+rderin6s
r4d3ernt
rde3sp
-rde3sta
rdi3a2
-rdi5a6l
+rdia4l
r2d1inn
-r2d1it
+rd1it
+rdo2be
+r3don
rd1os
-rd1ös
+r2dö
rd3rat
-rd3rau
-rd1st
+rd4ri
rdt4
-rd1th
-rd1tr
+rd3ta
+rd3th
+rdwa4
1re
3re.
-re3ad
-rea3g
re3aler
+re2alt
+re2am
re3as
-re5at.
-re5ats
+re3at.
+re3ats
+2reä
re2b1a
-re2b3l
+re2b1l
reb1r
-re4b3ra
+reb3ra
re2bü
+r2ech
rech3ar
4rechs
2reck.
-re2cka
-3reda
+2recki
4redd
-3rede.
2redit
re1el
-re3er
+re1er
3refe
4reff
3refl
3refo
-3refro
3reg
5reg.
rege4l3ä
-re2gl
-4reh
re2hac
re4h3ent
-reh3l4
+re2h1i
+rehl4
re2h1o
+r2ei.
+rei4bl
r2eie
2reig
-r5eign
+3reigew
rei3l2a
rei3l2i
+reim2p
r1ein
rei3nec
4reing
-4reinn
+r3eink
4reinr
-rein6sta
rein8s7tre
re1in2v
-2reis.
-2reiwe
-re2ke
+reister6
+3rek
+4re2ke
re3la
2r1elb
rel2e
re3lei
-re2lek
+2re2lek
2r1elf
re3lo
2r1elt
relu2
-r2em
-re3mo
+r4em.
+r2emi
+4rempf
4remu
-r2en.
+r4en.
r2ena
+rena2b
re3nal
-re3näu
-3rendit
+re2nä
+3rendi
ren3dr
re4n3end
ren4gl
2rengp
re2ni
+r1ense
2r1entl
2r1ents
2rentw
-2r3entz
+4r3entz
r2enz
-ren4zer
re3or
3repe
-5re3po
+3repo
4repp
-3r2er.
-re2ra
-2r3erb
-r4erba
-r4erbo
-r4erbr
-r4erbü
+3r4er.
+2r1erb
+r2erbr
2r1erd
-3rere
-r3ereig
-r4erer
-2r1erf
+r1erf
r1erg
r4ergen
r1erk
4r3erken
-3r2erki
-2r1erl
-5r4erlag
-r5erlau
-r3erlö
+r2erki
+r1erl
+4r3erlau
+2rerlö
2r1erm
+rer2n
2r1ernä
4r3erns
4r3ernt
-3r2e1ro
+r2ero
re2rob
r1erö
3r2ers.
-2r3ersa
+2r1ersa
r2erse
2rersp
-r1er5t
-2r3ertr
+r1ert
+r2erte
+2rertr
2r1erz
-3r2es.
+rer5ze
+r2erzy
+3r4es.
re2sa
-res1au
3rese
-3resol
-re3sp
+3reso
2ress
ress2e
res6s5erw
-re2stu
+3rest
+re1sta
+re2s2tu
3resu
re2thy
re2u
@@ -10452,425 +10224,422 @@ reu3g2
2reul
re3uni
2r1eur
-2revid
-r1e2w
-rewa4
-re3we
-4r3e2x1
+2reü
+2r3evid
+r1ew
+rewa4r
+re2wi
+2r3e2x1
3rez
4rezi
1ré
2r1f
rf1ält
+rf2äu
r2fent
-r3f2es
+rf2es
rfi4le.
-rfin6s
rf3lic
rf3lin
+rf4lö
r3flü
-r3fre
-rf2s
-rfs1ä
-rf3sen
+rfolg4s
+r3for
+rf4ru
+rf4rü
+rf2sa
+rf2s1ä
rf4s1id
-rfs3pr
-rf3sto
+rf2s3pr
+rf2s3t
rf2ta
-rf3tau
rf3t4r
-r3fu
+rf2u
4r1g
rg2ab
+r2g1a2d
r2g1ah
r2g1ak
rg2an
-r3ge
rge4an
rge2bl
rge4l3er
-rg5e4tap
-r4geto
+rgen4z3w
+rge4ral
+rge4tap
+r2geto
rgi4sel
r2glan
r2gleu
r2glig
-rg3lo
-rg3lu
-rg2ne
-rg3neu
+r2gno
r2g1ob
r2g3ral
r2greg
-r2g3res
-rg3ret
+r2gres
+r2gret
rg3rin
rg3s2p
-rg3str
-rgt4
-rg3th
+rgs4tr
+rg5s2tu
r1h4
2rh.
-2r3ha
-r4ha.
-2r3hä
+2rha
+r2ha.
+2rhä
3r4he.
3r4hen
r3her
-r3hof
+r2hoe
rho2i3
-2r3hol
+2rhol
2rhö
2rhs
-r2hy
-ri1am
-ri1an
+rhu2s
+1ri
+ri3am
+ria1s
ri3at
+rib2bl
ri1ce
ri1cha
-rich3te
-4rick
rid2
ri2d3an
2ridol
r2ie
+rie2fr
ri1el
-ri3els
riene4
-ri3eni
+rien3s
rie2nu
ri1er.
-ri4e3re
+ri4ere
ri3ers.
ri3esti
-rie5te
ri1eu
ri2f1a
-ri4f1ei
-ri4fer
+ri2f1ei
+ri2fer
ri2f1o
-ri2f5r
-rif3st
+ri2fr
+rif3s
rif4ter
3rig
-ri4g5ene
-4rigg
+5rig.
+5rige
+ri4gene
5rigj
rig1l
4rigr
-r2ik
-ri4k5l
-ri5kle
-ri3ma
+rik1l
+ri4kla
r2imb
2rimp
rim2s
rim4sc
-rin4a
-2rind
-ri5n4e
+r2i3na
+2r1ind
+rin4dex
+rin4diz
+ri3n4e
rine1i
2r1inf
-rin2g3l
+rin2fo
+ring3l
rin2gr
-4r1inh
+2r1inh
2rinit
2rink
-1rinn
+3rinn
6r5innenm
4r3inner
-2rins
+4rinnta
+r1innu
+2r1ins
3r4ins.
+rin4so
+rin2sp
r4inspi
2rint
+rin4teg
rin4t5r
-2r1inv
-3r2inva
-ri2o
+r1inv
+r2inva
+2rinve
4r1ir
r2is
-ri3s4a
+ris2a
ri4scho
ri4schw
3risik
-5risk
ri3so
-ri4s3p
+ri4s1p
3riss
-ris4sa
-ri4st
+ri2st
ris6t5ers
r2it
r3i2tal
-riten3
-ri5ti
-ri3t4r
+ri3t2i
+rit4r
+rit2tr
5ritu
-ri2x1
+rix1
1rí
2r1j
2r1k
-rk1all
-rk1aus
-rk1äh
-rke2s
-r3kla
-r5klau
-rk3li
+rk2am
+r2käh
+r3klau
+r2klis
rk4lo
-rk4lu
-rk3nor
-r2k3nu
-rk3rau
+rk2lu
+rk4n
+r2k5nu
rk3räu
r2k3rea
r3kri
rk3rin
rk2s1e
-rk3sen
rk3shi
rk2sp
+rk1st
rkstati6
rk4stec
-rks3ti
rk2ta
rk4t3eng
rk4t3erf
-rk4t3ers
+rkt3ers
+rk6tersc
rk4t3erw
rk2tin
rk2t1o2
-rkto4b
-rk4t3r
-rk5tra
-r2k1uh
+rk2t3r
+rk3tra
+rk4tri
+rk1uh
rk2um
-rku4n
+rku2n
rk1uni
-2r1l
-r3la
-r3le
+4r1l
+r3l2a
+rl2e
rle2a
+r3lec
+rle2i
+r3let
r3l2i
rli2s
-rlon3
+r3l2o
+rl2ö
rlös3s
rl2s1p
-rl2sto
-rl3th
+rl3ste
+rl2s3to
+rl3t
4r1m
+r3m2ag
+rma2la
r2m1ald
-r2m1ans
-rm3anz
-r4m3a2p
-rm1aus
-rm3d
+rm1ans
+rm1anz
+rm1a2p
+r2maph
+rm2är
+rm3d2
r3me.
r2m1ef
-rmen4sc
r2meo
+rm2es
r2mide
r2m1im
-rm1ope
-rm1o2ri
-rmo3s
+r2m1o2ri
+rmo1s
rm3sa
rm3sta
-rmt2
-rmt3h
+rmt2a
+rm2u
rm3ums
4rn
rna2b
-r2na4n
-rn5ani
-rn2ant
-r4n3anz
+rna4n
+rn2and
+rn3ani
+r2n1anz
rn2a2r
rn3are
-rn5ari
-r2n3au
-rn4aue
+rn3ari
+r2nau
rnd4
-rn3do
rn3dr
r3ne
-r5ne.
rn3e4ben
r4nef
-rn4eh
-r5n2ei
+rn2ei
rn3eif
-r6n3eis
+r4n3eis
rne2n
-r4n3ene
+r4n1ene
+rn3ense
r4nerf
-r4nerg
+r4n1erg
rn4erhi
r4nerk
r4n1ert
-r5ne2s
-rn4e2t
+r5nes
+rn2et
r4nex
-rn3g2
+rn3f
+rng2
r3ni
-r4n1in3
+r4n1in
r3nod
r2n1op
-rn1or
+r2n1or
rn1ö
r1nöt
rn3s2ä
rn3s2p
rn3s2z
-rn5t2e
-rn3th
+rn3t2e
+r1nu
rn1ur
r1nü
r1ny
-ro5ar
-ro4bei
+ro2bei
2robj
-1robo
+3robo
2robs
ro1c
3rock.
-r4o3de
-r4odo
-roe4
-ro3et
+r2o3de
+ro3e4
2rof
roh1l
-roh5n
+roh3na
3r2ohr
3roi
-ro3in
ro1ir
ro3le
-roll4en
+rol4lan
+rol3l4en
+rol3s
2roly
+4rom.
ro2mad
ro2mer
4romm
+4romt
r2on
-ronen3
3ronn
rons2
-ron3sp
-ron3str
ron4tan
ro1ny
ro1pe
-2ropf
ro3ph
-rop2s
r1or
-r2or3a
+r2ora
+ror3al
ro2rat
-ro1rau
ro2rei
ro2r1o
-ror5th
-ro1sé
+ror3th
ro3sh
ro3s2i
-ro5sk
ro3smo
-ro3sp
-ros4s3c
-ro4ste
+ros2p
+ros2s1c
+ro3st2a
+rost1r
4roß
ro2ßu
+ro4tag
+rote3i
ro2tho
-ro2tri
-rots2
-rot3so
-ro3tu
+ro4tri
+rots2o
+rot2ta
+ro3t2u
ro3unt
3rout
-ro3xa
-ro3z
+2rox
rö2b3l
-rö3ch
-2r1öf
+rö2du
+2röf
4rög
-röh3
+1r2öh
r1ök
-r2öl
-rö7le
+1r2öl
3römi
+4röp
r1ör
r2ös.
-rö3sc
-rö3se
-3rötu
-2r3p2
-r5pa
-r5p4e
+r2öse
+2r1p2
+rp4a
+rp4e
rpe2re
rpe4r3in
rpf4
-r4pli
-rpo4st
+r2pli
+r3po
rpro1
-r4ps
-rp3se
-r4pt
+rps3t
+rp3t
+r3pu
r1q
-4r1r
-rr2a
-r3rar
+2r1r
+rr2ab
+rr2ar
rr1äm
rrb2
rr1c
r3r2e
-rrer4
+rre4ale
+rrer4s
rre2st
r4rew
-rr2h
-rr3hö
-rri3k
-rr2na
+rr2he
+rrik2
+rr2n3a
rr2o
r2r3ob
rro3m
rr2st
+rr3stu
+rr2th
r3ru
-r5rü
+r3r2ü
rrü1b
4r1s
-r4sab
-r2s3a2d
-rsa4ler
-r2s3amp
-r4s3amt
-r4s1ang
-rs1anp
-r4sar
-r3sc
-r5sch2e
+rs3ab
+r2s1a2d
+r4samp
+r4s1amt
+rs2an
+r2s3ang
+rs3anp
+rs3ant
+rs3ar
+r3sch2e
r6scherl
-rsch4l
-r5schu
-r3se
-r5sei
-r6sein
-r5sel
-rse3le
-rse2n
+rsch2l
+r3schu
+r3schw
+r2sein
+rse2n1
rs2end
rse4ne
-rs3ere
+rs1ere
rs1erö
rs1ers
rs1erz
rs1eta
r3sho
-r5si
-rs2ka
-r5skal
-r5skan
-rs3kat
-rs2ki
+r3si
+rs2kal
+rs2kan
+rs2kie
+rs2kis
rs2kl
r4sko
r4skr
@@ -10878,674 +10647,664 @@ r4sku
rs3l
rs4no
r3so
+r4sob
r4s1op
+r4sord
r4s3ort.
-r3s2p
-r4s3ph
+rs2p4
+r2s3ph
rs3s2
-rs2t
r4stant
-rst5eing
+rs2tec
+r6st5eing
rs4temp
-r3sterb
-rst3erw
+rs4terb
+rs4t3er4w
+rs2th
+rs2ti
r3stie
r2stin
rst3ing
+r2stip
r3sto
+rs4tob
r4stot
-r3str
-r4st3ran
-r3stu
-r3stü
-r3s2wi
+r3stö
+r3s4tr
+rst3ran
+r6strang
+rs2tu
+r3s4tü
+r3swi
r3sy
4r1t
-r3tab
-rt1ac
-r2tad
-r3taf
-rt3akr
-r3tal2
-r4t1alm
+rtal2
+r2t1alm
rtals1
rt1am
-rt1an
-rt1ar
-rt3a6re
-r3tat
+rt1ang
+rt1ann
+rt1ant
+rt1anz
+r2t1ar
+rt3a4re
r2t3att
-rt1auf
-r2t1är
-r3te
-r5te.
-rtee2
-rt2ei
+rt1är
+rte1e2
+rt4eif
rtei3la
-rtei3s2
-rte5m4e
+rtei1s4
+r2telf
+r2temo
rte2n1
-r7ten.
-rtens2
-rten3st
-rte1ra
-rte4ran
+rten3s2
rt3erei
-r4t1erh
-r4t1erk
-rt3erle
-r5terli
+r4terfo
+r4t3erh
+r2t1erk
+r4t3er4la
+r4t3erle
r4t3ernä
rter4re
-r4t3ersc
-rte3sk
-r2th
-rt1he
-rt1hi
-r3tho
-rt1hol
-r3thu
-r3thy
-r3ti
-r4t1id
-r4t1ima
-rt1int
-rto3p
-r2t1o2r
+rt1ers
+rte3s2k
+r2thi
+rt3hol
+rt2hum
+r2t1id
+r2t1ima
+r2tinf
+rto1p
+rt1or
+rto2ri
+r3tö
r4trak
rt3rec
-r2t3res
-rtrü2
-rt4sam
-rt3sch
-rt7scha
-rts1eh
-rt3spe
+r4treis
+r5tri
+rt1ros
+rtrü2c
+r4ts
+rt4s1eh
+rt2so
+rt2spa
+rt2spr
rtt4
r2t1urt
-r3tün
-rt3w
-r3ty
-rt3z2
+r3tü
+rt3z
+1ru
ru1a
-ru3a2r
+ru3a2r3
rube2
-ru3cker
-ru4cku
-ru3de
+ruch3st
+ru6ckerl
+ru2cku
rude2a
ru2dr
3ruf
ru2fa
-ruf4s
+ruf2s3
4rug
-2ruhr
-5ruin
-ru3ins
+2r1uhr
+3ruin
+ru1ins
ru1is
-4ruk
2rum
4rumf
ru2mi
4ruml
r2ums.
4rumz
-ru4n
2r1una
+2rund
run2d1a
-2rundd
-run4d3er
-2rundv
-2rundz
-ru5ne
+r2unde
+rund3er
+run6derl
+run6ders
+run6derw
2r1unf
2rungl
-2r1uni
-ru5nis
-4runk
+2r1u2ni
+4r3unio
run2kr
2r1unl
-r1unm
+2r1unm
4runn
-ru5no
-2runs
-4runt
+4r3unt
2runw
ru3pr
-4r1u2r
-r3ur1e
-5ru3ro
+4r3ur
+ru2ra
+ru2r1e
+5ruro
ru2si
rus2s1p
rus4st
-ru4st
-ru5s2ta
-ru2th
-rut1he
+ru2st
+ru3sta
+3rut
+rut3h
ru2t1o2
ru2t3r
-rut2s
-6ruz
-ru2z1w
-r2ü
-4rüb
+4ruz
+ru2zw
+1rü
+2rüb
rü1ben
rü1ch
-4rüg
4rümm
2r1v
rve4n1e
2r1w
+rwun3s
4r1x
1ry
ry2c
-ry3t
2r1z
rz1a2c
-rz2ach
rz2an
-r2z1ar
-r2z3as
-rz1eck
-r2z1eng
-rz3ents
+r2zar
+r2zas
+r5zene
+rz1eng
+r4z3ents
r2z1erf
r2z1erg
r2z1erk
-rz1erq
r2z1erw
rz1id
-r3zof
-r2z1op
-rz1or
+r3z2of
+rz1op
+rz2ö
+rz3te
+rz2th
rz2t3ro
-rzu3g2u
-rz1urs
-r3z2wä
+rzug2u
+r3zwä
r3z2wec
-6s.
1sa
-5sa.
-5saa
+3sa.
+3saa
2s1ab
sa2be
3sabet
-sa1b4le
+sa2bl
+sa3ble
+sa2br
4sabs
-sa2chi
sa2cho2
-sa1cr
-2sada
-s3adm
-2s3adr
-sa3fa
-sa4fe
-4s1aff
+sach3t
+2s1ada
+s1adm
+2s1a2dr
+3safa
+sa2fe
+2s3aff
+3safi
sa1f4r
-3sag
-s1a2gr
-5s4ai
-sa1ik
+3saga
+sa4gent
+sag4n
+sa2gr
+3sai
+sa3i2k1
sail4
2s1ak
sa2ka
3saki
-s4akr
+3sakr
4sakt
3s2al.
-3s2a1la
-sal3erb
+sa4l3erb
sa2l1id
-5s4alo
+3salo
sal2se
-4s1alt
-5s4alz
-3s2am
+2s1alt
+3s2alz
+3sam
s3ameri
-5s4amm
-6s5amma
-4s3amn
-4samp
-3s2an.
-2s1a2na
-2sanb
+5samm
+6s1amma
+4s1amn
+s1amp
+sam2to
+s1an
+s2an.
+2s3a2na
+s3anb
s2an2c
s2and
-san4d3ri
+s4and.
+san4dri
3sang.
2s3anh
-5sani
+3sani
2s3anl
-2s1ans
+2s3ans
san4sk
-san3sp
-4sanw
-2s3anz
+4s3antr
+2s3anw
2s1ap
sa2po
3sapr
2s1ar
-3sar.
-3sara
+3s4ar.
+3s2ara
4s3arb
3s2ard
3sari
-s3arm
s3arr
-3sars
-4sart
-s3arz
-s3a4sp
-sa3stu
-6s5asy
-s2aß
+3s2ars
+4sarti
+s1asp
+4s3a2sy
3sat
sat2a
-5sate
4s3ath
4s3atl
4satm
sa2tr
sa3ts
-5satz
sat4z3en
-sat4zer
+s1a4u
3sau.
+3sauc
3saue
-2sauf
-4s3aufb
-3saug
+2s3aufb
sau2gr
3saum
-5saur
+3saur
sauri1
-2s1aus
-4s3ausb
-3sause
-s3ausf
-s3ausg
-s1auß
+2s3ausb
+3s2ause
+s3ausw
+2s3av
sa2vo
-3s2ax
-3say
1sä
-3säc
s3ähn
-3säle
+3säl
s1ält
2s1äm
-2s3änd
+2s1änd
3sänge
2s1är
-3sät
+3s2ät
3säul
2säuß
-4s5b6
+4s3b4
sba4n
-sber2
-sbe3re
-sby5
-1s2c
+sbe3r2e
+1sc
2sc.
-6scar
-4s3ce
+2scam
+s2can
+s2cap
+2scar
+2s1ce
6sch.
2schak
-5s4ch2al
+s4ch2al
4schanc
-5schanz
-6schao
-5s4chä
+4schang
+2schao
+s4chä
4schb
4schc
-3sche
-4schef
+2schd
+3sche.
+2schef
sch3ei.
-5scheib
4schemp
-sch5erla
+sch2en
+3sches
4schess
4schex
-4schf
-4schg
-4schh
-3schi
-7schic
+2schf
+2schg
+2schh
schi4e
s4chim
4schiru
-4schk
+3schis
+2schk
s4chl
4schle.
6schlein
sch6lit
-4schn.
-5s4chö
-6schöl
-4schp
+2schmö
+2schn.
+2schox
+s4chö
+2schp
+2schq
4schre.
-sch5rom
+4schrin
+sch3rom
+4schrou
6schs
-schs4e
+schs2e
sch3s2k
-sch3sti
-6scht
-sch3t4a
-sch5te
-3s4chu
+4sch3t
+scht2a
+scht4r
+s4chu
4schunt
sch2up
-5schü
-4schv
+3schü
+2schv
4schwet
-4schz
+sch4wil
+2schz
2scj
-4scl
-4sco
-5s4cop
+4s3cl
+2sco
+3s4cop
+3sco4r
+s2cr
2scs
2scu
-4s3d
+4s3d2
sda3me
-sde3s
-sdi1st
+sde1s
+sdien4e
+sd4r
1se
-se3a
-se4al
-se5al.
-se5at.
-4s1e2ben
-se3b4r
-2sec
-4s1echo
-sech2s
+se3at.
+2s1e2ben
+seb4r
+2s1echo
s1echt
-se2ck
-5secl
-5seco
-4sede
-7see
+2s1e2ck
+3see
se1ec
se2e1i4
see3ig
-se1er
+seein2
+se1er.
+se1erö
2s1eff
-3seg
se2gal
se2gl
seg4r
-3s2eh
-se2h1a2
+3seh
+se2h1a4
se3he
se4h1ei
se4hel
-se4h3erk
-se4hin
+se4herk
+se2hin
seh1l
-seh1ra
seh3re
seh1s
-se2hü
-2s3ei.
-3sei3b
-4s3eig
+seh3t
+se2hüb
+2s1ei.
+2s1eig
s1ein
-7s4ein.
-4seinb
-sei5n4e
+5s4ein.
+2seinb
+sein4du
+sei3n2e
+sein4fo
4seing
-2s3einh
-4s3eink
+2seinh
+4seink
2seinl
-4s3einn
+2seinn
4seinr
s4eins.
+4seinsp
4seinst
2seinw
-4seis
-7s2eit
-5s2ek
+4s1eis
+3s2eit
+3s2ek
s2el.
-se2l1a2
+se2l1a
se3lad
sela4g
se3lam
sel1ec
4selem
-se2ler
-sel3erl
+se4l3erl
sel3ers
-s1elix
-se4l1ö
+2self.
+s3elix
+se2l3ö
s2els
sel3sz
sel3tr
-5sem.
s4e3ma
-4s1emp
-s2en.
-3sena
+2s1emp
+3s2en.
se4nag
-se3nal
-4s1endl
-se4ners
+se2nä
+2s1endl
sen3gl
-5s4eni
-sen3ob
+3s2eni
+3senk
+se2no
+se4nob
3s2ens
s2ent.
4s1entf
2s3entg
s2enti
-4s3ents
-4sentw
+2s1ents
+2sentw
2sentz
-se2n1u
+se2n3u
seo2r
4s1e2pos
3seq
-5s2er.
+s4er.
+3sera
ser3a2d
se2r3al
se5ref
s3ereig
+6sereign
se4r3eim
se4r3enk
ser2er
-4s3erfo
+2s1erfo
s2erfr
-6s3erfü
+s3erfü
+4serfül
ser3g
-s1ergä
s2ergr
-4s1erh
-5seri
-s1erkl
-s1ernä
-4s3ernt
-se1rot
+s1erh
+2serhö
+3seri
+4serken
+2s3ernt
+se2rob
+4s3eröf
s2ers.
+2sersa
+4serseh
s4ert.
-ser3the
+s2erta
seru2
se4r1uf
se3rum
-7s6erv
+se3rund
+3s4erv
5ses.
+se2sel
+se1sta
se3su
3set
-s3eta
-4s5e4tap
+4se4tap
se2tat
-4s3e2th
-se1u4n
-2sex
-4sexa
-s1e2xe
+4s1e2th
+se1u2n
+2s1ex
+se2xe
4sexp
sex3t
-4s3f
+1sé
+4s3f4
sfal6l5er
-s5fi
-sfi3le
-s5fü
-4s3g4
-sge3s4a
+sflo4
+4s3g2
2s1h
-3sha.
+sh2a
+3s2ha.
sha2k
-4shan
+4s3han
1shas
s3hä
+s3h2e
3shi.
3shid
-1shi4r
+shi4r
sh3n
s3hoc
4shof
-3s4hop
-sho4r
+3shop
+sho4re
3show
s3hö
sh4r
1si
+si2ach
si3ach.
-5siak
-si1am.
-si3b4
-3si1c
-s1ideo
+si2ad
+si3am.
+2siat
+sib4
+5si1c
+2s1i2deo
s2ido
-3s2ie
+3s4ie
siege4s
+sien3
si3ene
-si3err
+si1err
sie2s
-3si1f4
-5sig
+si1f4
+3s4ig
si2g1a2
-si3g4n
+sig4n
+si3gnu
si2g3r
-sig4s
+sig4st
si2k1ab
-si4k3ere
-si4k3erl
+si2k1ä
+sik3erl
si2ki
-si4k5l
-si4kr
+si4k1l
+si2kr
sik3s
sik3t4
si2ku
-si5l2e
3silo
2s1imm
-3sin.
si3n4a
2s1ind
-6s1inf
-sin2g1a
+2s1inf
+sing1a
sin3gh
sin3g4l
sin2gr
sing3sa
-6s1inh
+4s1inh
sin1i
sini1e
2s1inq
2s1ins
2s1int
-6s1inv
-3s4io
-si3od
-si3os
-5s2is
+4s1inv
+3sio
+sion4
+3s2is
si2sa
si4schu
-si4s1e
+si2s1e
si2s1o
-sis1p
+si2s1p
sis3s
-7s2it
+3s2it
si2tau
-si3te
-si2t3r
-sit3s
+sit3r
+si2tra
si3tu
-5siu
-si2va
-six3
+siv1a
+sive3
+si2vr
1sí
-4s5j
-2s1k4
+2s1j
+2s1k2
4sk.
-s3kad
-s2kala
+3skala
4skam
-4s3kanz
+4skanz
s3kar
4skas
ska4te.
+4skateg
ska4tes
-s3kä
4skb
-4ske
+s4kep
3s2ki.
+s2kif
+s2kig
3s2kik
4skir
-ski3s
+ski1s
3skiz
-s3klas
-s3kn
-skna3
+sk4l
+4s3klas
+sk4n
4skom
4skor
+4skow
4skö
-s3kra
4sks
-4sk5t
+4sk3t
3skulp
2s1l2
-3s4lal
+3slal
4slan
+s2law
s3lä
sl3b
-s5le
-s5li
-3s6lip
+s3le
+sler3s
+s3li
+3s4lip
+sli4tu
s3lo.
slo3be
s3loe
2s3m2
-2s3n2
+2s3n4
4sna
-sna1b4
-s5ne
+snab4
sni3er.
sni3ers
4s5not
4snö
-s5ny
1so
3so.
-3so4a
-4s1o2b
-6sobj
+so4a
+2s1o2b
so1c
so3et
3soft
3sog
-so3gl
-so2h
-s1ohe
-so3hi
-4s5ohng
-so3ho
+s1o2he
+4sohng
2s1ohr
-3sol.
+3sol
so3la
-so4l3ei
-so3li
-4s3oly
+so4l1ei
+sol4ler
+4so2ly
+3som
3s2on
son3au
sone2
@@ -11553,474 +11312,464 @@ son5ende
son3sä
so2ny
so3o
-s1opf
+2sopf
3sor.
so1ral
s1orc
-4s3ord
+2s3ord
so2rei
-so3ren
-4s1orga
-4s1o2rie
-so2r1o
+2s1orga
+5s2orge
+2s1o2rie
+so2r1o2
3sors
so4ru
-3s2os
-5s4os.
-s3ost
-3sota
-so3tr
-3sou
+3sos
+s4os.
+4s1ost
so3unt
3sov
-s1o2ve
-s1ox
-s4oz
+4s1o2ve
+3sow
+2s1ox
+3soz
1sö
sö2c
sö2f
2s1ök
-2söl
+2s1ö2l
s1ös
1sp2
-4sp.
-4spaa
+2sp.
+2spaa
2spak
-3spalt
s2pan
spani7er.
-4spano
-4spap
-4spara
-spar5sc
+2spap
+2spara
+2sparo
+3sparu
3spaß
-2spat
2spau
s2paz
+s2pä
+3späh
2spär
-2sped
-3s2pee
-3s2pei
-4spel
+s2pee
+2spel
+4spensi
+spe3p4
2s1peri
-4sperl
-3s2perr
+2sperl
+s2perr
2spers
2spet
-3s4pez
+3s2pez
4s3pf
-2sph
-3sphä
+2spha
s3phe
-3spi
-5s2pi4e
-7spiel
-spier4
+2sphi
+3s2pi4e
+4spier4
spi2k
-4s3pil
+4spil
+3spio
4spip
-4s3pis
+4spis
2spl
4spla
4splä
-4sple
3s2pli
-4s3plu
-2spo
-4s3pod
-3s2poi
-4s3pok
+s3p4lu
+s3pn
+2spod
+2spog
+s2poi
+2spok
4spol
4s3pos
+s2pott
4spr.
s2prac
-4sprax
-4spräm
+s2pran
+2sprax
+2spräm
4spräs
-5s4prec
+3s4prec
2spred
-4spres
-2spro
-4sprob
-3s2pru
-5sprun
+2spres
+2sprob
+3spross
+3spru
2sprüf
-3sprün
-4s3ps
-4spun
+2s3ps
+2spt
+2spun
2spup
-5s2pur
+3spur
4sput
-3spü
4spy
2s1q
4s3r4
-srat6s
+srat2s
+srat4sc
sret3
-srö4s
-srös3c
+srö2s1
+srücker6
srü2d
-4s1s
+6s1s
ssa3bo
ss1a2ck
+s5saf
+s3sag
ss1aj
s3sal
-s4s3ala
+s4s1ala
s4s1alb
-s4s1amt
+s4s3amt
s4s3ang
-ss1ano
-s4s3ans
-s4sanz
-s3sas2
+s2sano
+s4sans
+ss2ant
+s4s3anz
+s3sa1s2
ss3att
-ss1au
s3s2ä
-s3se
-s4s1ec
-sse4ck
-s4s1ega
+s4sce
+s4sco
+ss1ec
+s2s1ega
sse3ha
sse3inf
-sse3int
-ss1eis
-s5sen.
-ss2er
+sse3in4t
sse6r5att
-ss3erhö
-s4s3erö
-s4s3erse
-s5s4es
-ss4et
+ss1erö
+ss3erse
+s3s2es
sse3ta
-ss5g
-s5sie
-s3skala
-ss3la
+ss3l
ss1off
-s6s1op
-s2s1ori
-s3spe
-s3s2po
-ss5re
+ssoi4
+s2s1op
+ss1ori
+ss2po
+s2spro
+ssquet4
ss3s4
-s3st2a
-s5stad
-sst6e
-ss3tec
+sst2a
s3stel
+ss2th
ss2ti
-s3stip
-s3sto
-s3stu
+ss4tip
ss2tur
s3stü
ss1ums
-4st.
-1sta
-2sta.
+s1t
+6st.
+s2ta
+4sta.
3staa
-stab4s
-3s2tad
-5staff
-4stag
+2stabb
+st2ac
+3s4tad
+3staff
+2stag
3stah
2stak
-s5tal.
-sta5li
+2stale
+s3ta3li
2stalk
st1alp
-st3ami
+st1ami
4stan.
-st3ana
-3s4tand
+sta4na
+3stand
2stani
-4stann
+4s3tann
2stans
-s3tans.
2stanw
-s2tar
-3s4tar.
-3s4tars
-st2art
-2sta2s
-st3a4si
-3stat
-4stat.
-3stau.
-2st1auf
+s4tar.
+4stari
+s4t2ars
+s3tat.
+s4tau.
+2stauf
2staum
-5staur
+3staur
2staus
3staus.
2stax
-3stä
+3s2tä
4stäg
4stält
+s4tänd
5stätt
-4stb
-2stc
-st3ch
+s3täus
+2stb
+2st3c
2std
-4ste.
+st2e
+4s5te.
2stea
-s2tec
-3steck
-1s2teg
-ste2g5r
-3steh
-1s2te2i
+4stechn
+s2ted
+4stee
+3s2teg
+ste2gr
+3s4teh
+s2te2i
3steig
-2steil
-4steing
+4steil
+3steilh
+stei4na
1s2tel
2stel.
-2stele
stel4l3ä
+2steln
2stels
2stem
4stem.
ste4mar
4sten
+s5ten.
s4t3ends
-ste2ne
s4t3engl
-s5t4ens
+st4ens
s4t3entf
s2tep
2ster
-6ster.
-s3tera
-st6erb
-4sterk
+6s5ter.
+ste6rers
+4sterm
3sternc
-s3ters
4stes
s4t3ese
stes6se.
ste4st
2stet
-4stet.
+s4teti
3s4tett
-3steu
-5steue
+3s2teu
+1steue
4steuf
st3ev
4stex
2stf
2stg
4sth
-st3ha
-s2t1hi
-st3ho
-st1hu
+s4thä
+s4thi
+s2t3ho
+s2thu
2stia
2stib
+s2tic
+sti2e
2stie.
-1s2tiel
+s2tieg
+s2tiel
2stien
3s2tif
-5stift
-4stig
+2stig
2stik
-3s2til
+s2til
3s4tim
+s4tinf
+s3tinn
st1ins
-st1int
2stio
-2stip
-1s2tir
+1s2ti2r
2stis
-st3iso
+st1i4so
1stitu
2stiv
2stj
-4stk
-4s4tl
-st5le
+2stk
+4stl
4stm
2stn
-1sto
-4sto.
-4stod
-sto3de
-s2toff
-s2t5om
+s2to
+2sto.
+s3tob
+2sto3d
+4stod.
+1stof
+s4toff
+s4t3om
4ston
+4stoo
2stopo
2stor.
2store
2storg
2stori
-2s3tose
-stos2t
-3stoß
+s3tort
+2stose
+sto3s2t
+1stoß
+4stote
4stou
-4stow
-4stoz
-3stö
-4stöch
-4stön
-4stöt
-4stp
+2stow
+2stoz
+1stö
+2stöch
+2stöt
+2stp
2stq
+s2tr
2strad
-5straf
2strag
-3s2trah
-6strai
+1s4trah
+4strai
4strak
-4stral
+2stral
4strans
-5s2tras
+3s4tras
5straß
-4sträg
+4straum
+4s5träg
4sträne
-4stref
-5streif
+4s5tref
+4streib
+5st4reif
st3renn
-s2tric
-2s2trig
-3s2tri2k
-s2trip
-2s3tris
+2s4trig
+1s4tri2k
+2s5tris
st3roll
-stro2m
-2strop
+stro4ma
1stru
-4strua
+2strua
+2strug
3struk
4st3run
-4st3s4
-st1sk
-st1sl
-st1sz
-2st3t2
-5stub
+2strup
+2s4t3s4
+2st3t4
+st2u
+1stub
4stuc
-5stud
-4stue
+3s4tud
+2stue
3stuf
3stuh
-stum2s
-stu4n
-4stun.
-3stund
-s2t1uni
-4s3tuns
-4stunt
-stu5re
-st1url
-4sturn
-stur4s
-4st1urt
-2stus
-1st2ü
-3stüc
-4stüch
-3stüh
+2stum2s
+stum4sc
+2stumt
+stu2n
+2stun.
+3s4tund
+s2t3uni
+4stunn
+2s3tuns
+2stunt
+stu3re
+st3url
+2sturn
+2st3urt
+2s3tus
+1stü
+2stüch
2stür.
-3s2tüt
-4stv
-4stw
-5styl
-4st3z2
+2stüre
+2stürg
+2stürs
+3stüt
+2stv
+2stw
+3s2tyl
+4st3z
1su
su1an
-3su2b5
-su4ba
-4su3bi
-5su1c
+3su2b3
+su4ba2
+4subi
+3su1c
+su2cha
+such4st
2s1u2f
-4s1uh
-3sui
+2s1uh
su1is
-su3it.
-su3la
+su1it.
+sul2a
sul2i
+sult2
su2mar
su2mau
-3sume
-su2m1el
+3s2ume
+su2mel
su6m5ents
-2sumf
s3umfe
-2sumk
-2suml
3summ
-sumo2
-su2m1or
-2sums
+sum1o2
+su2mor
s3umsa
s3umst
-su4n
-5sun.
+su2n
+3sun.
sun6derh
+su4ne
s1unf
2s1uni
-6s3unt
-5s2up
+4sunt
+3s2up
+sup3p
su2ra
2s1url
s1urt
-3su2s1
+s4u2s1
su3sa
su3sh
su3si
+sus3s
3suv
1sü
-2s3ü2b
+2sü4b
3süc
-3sü2d1
+sü2d1
+süden2
3sün
4s3v
-s5va
2s1w
s3wa
s3we
sweh2
-4s3wie
-4s3wil
-s3wir
-s3wis
-s2y
-3sy.
-sy2l
-sy4n1
-1sys5
-sy3t
+4swie
+4swil
+1s4y
+syl1
+sy4n3
2s1z
-s3za
+4s3za
4s3zei
-3s2zena
-5s4zene
-4s3zent
+s2zena
+3s4zene
+4szent
s2zes
+4s3zet
s2zis
+sz2o
4s3zu
s3zü
-s3zw
-2ß.
-2ß3a2
-2ß1b
-4ß1c
+4s3zw
+2ß1a2
+2ß1b2
+2ß1c
2ß1d
1ße
2ß1ec
2ß1e2g
2ß1ei
ße2l1a
-ßen3a
-ßene4
ßen3g
ße2ni
-ßen3st
-ßen3sz
-ße2nu
-ße3rin
-3ß2ers.
+ße2no
+ße2ro
+ß2ers.
+2ßerse
+ßer3t
2ß1f
-2ß5g2
+2ß3g2
ßge2bl
2ß1h
1ßi
@@ -12029,213 +11778,196 @@ s3zw
2ß1in
ß1j
2ß1k4
-ßkir5
2ß1l
+ßler3
2ß1m
-2ß5n2
+2ß1n2
ß1o2
-2ß3p2
+ßos2
+2ß1p2
2ß3r2
-2ß3s2
+2ß1s2
ßst2
2ß1t
-ß3ti
1ßu
-2ß1um1
+2ß1um
2ß1ü
2ß1v
2ß1w
-ßwa3
2ß1z
-4t.
+1ta
3ta.
-2taa
-3taan
-2tab.
+4taa
+5taan
+4tab.
ta2b1an
2t1abb
3tabel
-4taben
+2taben
ta4bend
-4tabf
-4tabg
-4tabh
-4tabk
-ta1b4l
-1table
-2tabn
+2tabf
+2tabg
+2tabh
+2tabk
+3table
+2t3abn
+ta2br
4tabs
-4t1abt
+2t3abt
ta2bü
2tabw
-4tabz
-ta1c
-tach3te
-t3ada
+2tabz
+2t1ac
+3tacu
+t1ada
tadi3
-t3adr
-1taf.
-1taf2e
-3tafel
+2t1a2dr
+ta3d2s
+3taf.
+3taf2e
4taff
t1afg
t1af4r
3t2ag
-5tag.
-ta2ga
-ta2g5ei
-4t3agent
-ta3ges
-2ta3gl
-ta3gn
-4t3a4go
-tag4s
-tag5sc
-tah4
+ta2ga2
+ta2g1ei
+4t3a4gent
+4ta3gl
+t3ago
+tag4st
+tah2
tah3le
-tahl5sk
-3tai
-ta1i2k
+tahl3sk
+ta3i2k
tai2l
ta1ins
tai4r
ta1ir.
-4t1a2ka
-ta3kes
-3takr
+t1a2ka
ta2kro
-tak4ta
+tak6ta
3taktb
3t2aktu
+2takz
3t2al.
-ta1lag
-ta1lak
-1talbu
+ta2la
+ta3lag
+ta3lak
tal3d
-1t4ale
-ta3len
+3t4ale
ta4lens
-1talia
-5talis
tal2lö
-1talo
+3talo
ta2l1op
-ta3lum
-2ta2m
-3tam.
-ta3ma
+2talt
+2tam
3tame
-3tamg
-ta3mo
-t3ampl
+ta2mer
+ta2mi
+t1ampl
t1amt
-3t2an.
+3tan.
t1a2na
-ta4nat
-2t2and
-tan3da
-tand4st
+2tanb
+4t2and
ta3ne
-4t1anf
-3tanis
+4tanf
+2tang
+3tani
t2ank
-tan4kl
-tan3kr
+t3ankl
4tanl
2t1anme
4t1anna
-1tanne
+t2ano
t1ans
-1tans.
-2t3ansi
-2t3ansp
-ta4nu
+3t2ans.
+4t3ansi
+4t3ansp
+ta2nu
2tanwa
2tanwä
-t4anz.
+t2anz.
+t1anza
tan6zerh
t1anzu
ta3or
ta2pe.
ta2pes
2tapf
-t4ar.
-2t1arb
-t1arc
-3tard
-ta6rens
-3ta3ri
-2tark
-4t1arm
+ta2pl
+2tarb
+ta4rens
+ta4r3ere
+3t4a3ri
+4tark
+2t1arm
2tart
-t3arti
+t1arti
+tar2to
ta2ru
2t1arz
3tas
-1tas.
ta3sa
-1ta3sc
-2ta3se
-4t3asp
-1tast
-ta3sta
-ta1str
-1tat.
+4t1asp
+ta2ta2b
ta2tan
-ta4t1ei
-ta4tem
-ta4t1er
+ta2tau
+tat3ei
+ta2tem
+ta2t3er
ta2th
tat3he
t3atl
t4atm
ta2tom
-4tatt
+4tatue
ta2t1um
-tau4fer
+2t1auf
+4taufg
tau3f4li
-2taufw
+4taufn
t1auk
-2taur
-1taus
+3taum
t1ausb
3tausc
+tau6schr
tau6schw
-t1ausd
-3tause
-t1ausf
-t3ausg
+t2ause
+4t3ausg
t1ausk
-2t1ausl
-t1ausr
-2t3auss
-t1ausü
+4tausl
+4t3auss
4t1ausw
-1tav
-ta3va
+3tav
3tax
-ta3xi
-1taz
+taxi1s
+1tä
+4täb
tä1c
-1täg
-2tägy
+4täd
+3täe
+3täg
+4tägy
2täh
-4t1ält
-2täm
+2t1ält
+4täm
t1ämt
t1ängs
3tänz
+t1äp
t2är.
tä2ru
-tä2s4
+tä2s
+t2ät
4tätt
-t1äug
-1täu3s
-4täx
+2täuß
+2täx
1tà
-4t3b
+4t3b2
tbe3r2e
-tblock7en
+tblock5e
+tblocken8
4t1c
t3cha
t3che
@@ -12243,424 +11975,396 @@ tch2i
tch3l
t2chu
tch1w
-t2ck
+t4ck
+t3cl
t3cr
-2t3d4
+4t3d4
tdun2
-tdu3s
1te
3te.
te2a2
2teak
te3al
-3team
te3an
-5teba
-5t4ebb
-2t1e2ben
+3teba
+3t4ebb
+4t1e2ben
t2ech
-te5cha
+te3cha
3techn
-4teck
-te2cka
+2teck
+teck2e
te2cki
-3tee
-te1ele
te1em
-te2e4n1
+te2en3
te1erw
-4tefe
-4teff
-te2fl
-teg4
+te2es
+2teff
teg3re
2teh
-te3han
+3teha
3tehä
-5tei.
+3t2ei.
t2eie
+t3eifr
+teik4
3teil
4teilhe
-2tein
+2t1ein
tein3e4c
t3einge
t3einla
-4t1einn
-4teinr
-4teinz
-t1eis.
-t1eisb
-tek5te
+4teinn
+t3eis.
+t3eisb
5tel.
-3te2la
-te4l1ab
-tel1ac
-te3lan
-tel1au
-3telb
-3tele
-tel1e2b
-tel1ec
-5telef
+3tela
+te2l3ab
+te2l1ac
+te2l1au
+telb4
+3te3le
+tel1eb
+tele4be
+te4l1ec
te4l1eh
-te3lem
+te4lein
+2telem
tel1en
-te3lep
-te3lex
-3telf
-4t1elf.
+te4lerd
+te4leu
+4t3elf.
3telg
-tel1in
+te2l1in
te2lit
3telk
-t4ell
-tel3l2e
+tell2e
5teln
-te2lo
+te4lost
te2l1ö
3telp
5tels
tel3s2k
3telt4
tel3ta
-3tem
-5tem.
-te2man
+tel3th
+3tem.
te2m1ei
-te2mi
-te3mis
-4temm
+te2min
2temme
te2m1o2r
-5temper
-4tempf
-tem1st
-te4m3u
+3temper
+2tempf
+tem3s
+te4m1u
3ten
-5t6en.
-te4n3a2
-te5nac
+t6en.
+ten3a
+tena2b
+te4na2d
+te4na4g
+te4nas
+te4nau
+te2nä
t4enb
ten3da
-6t5endf
+4t3endf
+t6endi
4t1endl
-6t5endp
-ten3dr
+t6endo
+4t3endp
+ten3d4r
te2n1e2b
+te2nef
te3n4ei.
ten3eid
+ten3ens
4tenerg
-t1eng.
+te2net
+ten3g
+4t1eng.
+ten4gla
+t4enh
te2ni
-ten3im
-ten3in
-t2enl
-t2enm
-t2eno
-t2ens
+te4n3in
+t4enj
+t4enm
+ten3n
tens2e
-4t3ensem
-ten3si
-tens3th
-t1entb
+4tensem
+t4enta
+t3entb
4tentd
-t1entn
-4tentw
-te2nu
-ten4zer
+t4ente
+4tentn
+tent3ri
+4t3entw
+4t3entz
+ten6zerh
ten3zw
-te2o
-te3ob
-t1e2pi
-5t6er.
+t3e2pi
+3t4er.
+tera2b
te1raf
ter3am
te3ran.
-te2r3as
-t2erb
-6t5erbs
-6t5erbt
+4terbs
+4terbt
+3terc
4t3erde.
-3tere.
-te2r1e2b
+te2re2b
te4r3eif
te2rel
-3terem
-3teren
ter3end
-3terer
-3teres
-5t4erfr
+te4reng
+te4rerk
+terer4z
+4terfol
+t4erfr
4terfül
-ter3g
+3ter3g2
+6tergrei
t6ergru
+t4eri
te3ria
-ter3k4
-3t2erka
-4t3erklä
-3terkr
-t4erli
-4t1erlö
-t4erlu
-3term
+4terklä
+2t1erlö
ter4mer
+3termi
ter4n3ar
+2ternc
t3erneu
-t1erö
-3terr
+t4ero
+t3erö
ter4re.
-t6ers.
+t4ers.
t6erscha
ter4ser
-ter4sk
terst4
t4erst.
-t4erste
-5t4ersti
-ter5sto
-ter5str
-5t4erstu
-3tert2
-3teru2
+t4ersti
+t4erstu
+tert2
+teru2
te4r1uf
-ter3z2a
-2t1erzb
-3t2es
-tesa2
-tes1ac
+ter4wäh
+6terwerb
+ter3za
+2t3erzb
+3tes
+tesa2c
+te2san
+tesä2c
te2sel
-tes3si
-5te2st
+te2spr
+tes3s2
+t2est
tes3tan
-tes3tät
test3ei
-tes6terg
+tes6ter6g
+tes6terk
+testes4
te2su
-3tet
+3tet2
+t2et.
te2tat
4teth
-4teti
-6tetl
-2teu
+4tetl
+teu3ere
+teu3eri
3teuf
3teum
te1un
3teur.
-teu2r5a4
-t5euro
+teu2r3a
te2vi
-5tewo
-te2x
-te3xa
-2t1exe
-4t1exi
+te1xa
+2t3e2xe
+2t1e2xi
4texp
3text
2t1exz
-1té
-2t3f
-tfi4l
-4t1g4
-tg2a
-t3ge
+4t1f4
+tfi2l
+4t1g2
tger2
+t1h
4th.
-2t1h2a
-3tha.
-3t2hag
+2th4a
+3t4ha.
+t2hag
+t3hai
t2hak
3thal.
-t3hap
-t2har
4t3hau
-4t1hä
-2thc
-t2he.
-3t4hea
-4theb
+2t3hä
+th2e
+1t2he.
+3thea
+2theb
t2hec
-2t1hei
-3t2hek
-t1hel
-3t2hem
-5thema
-5theme
+2t3hei
+t4hein
+t2hek
+t2hem
1then
+t4hene
+t4heni
3theo
-t2hera
-t1herd
-t1herr
-t1herz
-1these
-3thia
-2t1hil
-t1him
-t1hin
+2therr
+t2hes
+3these
+t2heu
+1thi
+t2hik
+2t3hil
+2t3him
2thk
4th3l
4th3m
2th3n
-4t1hoc
-t1hof
+1t2ho
+2t3hoc
+t3hof
2t3hoh
-t2hol.
-4tholz
-t2hon
-4t3hot
+t4hol.
+t3hor
+2t3hot
+thou2
4t3hö
2thp
-3thr2
-5thrine
-4ths
-4t1hub
+1th2r2
+4thrin.
+4thrins
+2ths
+2thub
4thun
-t1hü
+2thü
2thv
+t2hy
1ti
-ti2a
+ti2ad
ti3a2m
-ti3an
-tib4
-3tibe
-3tibl
-2tic
+3tib4
ti1ce
-ti4d3end
-t2ie
-tie3br
+tiden2
+ti4dend
+ti2deo
3tief.
-2tieg4
+tieg4
2tieh
ti1el
-ti2el.
-ti3e2n1
-ti2er
-3tiera
-4tieß
-ti3et
+ti3e4n3
+3ti2er
+tie4rec
+ti1et
ti1eu
3tif.
-ti3fa
ti1fr
+4tift
3tig
+ti4gerz
3tik
-ti4kam
-ti3k2an
-ti2kr
-tik5t
+ti2kam
+ti2kar
+ti3k2er
+ti2kin
+ti2krä
+ti2lar
+ti2lau
ti2lei
-til1ep
+ti2lel
3tilg
-ti3lo
-ti4lö
+ti2lö
+til3s
tilt4
ti2lu
-2tim
-ti2mag
+ti2ma2g
+t2imi
tim2m1a
4t1imp
-5tin.
+3t2in.
ti3na
t1inb
4t1ind
-ti5n4e
-2t1inf
+ti3n2e
+t1inf
tin2g1a
-tin2g3l
-tings2
-ting3st
-t1init
-4t1inj
-tin2k3l
-t2inn
-3tins.
+ting3l
+ting3s
+t1in1it
+2t1inj
+tin2k1l
+3t2ins.
4t1inse
-4tint
+2t1int
+ti1nu
4t1inv
-5tio
+3tio
ti3or
-3tip.
+3tip
ti3pl
-3tipp
-3tips
-ti2rak
+ti4que.
ti1rh
-5t2is
+3tis
+ti4scha
tisch3w
-ti4sei
-ti2sol
-t4it
-3tite
-tit2h
+ti2sei
+ti2sp
+ti1sta
+3ti3t2e
2ti3tu
-tiu6
tium2
-5tiv
+3tiv
ti2van
+tive3
ti2vel
ti4v3erl
ti2v1o
-ti4v1r
+ti2v3r
ti2za
2t1j
-2t3k4
-tkü1b
-2t3l2
+4t3k4
+4t3l
tl4e
-tle2r5a
-4t5li
-tli5f
-tlings3
-tlö3s
-2t1m2
-t5ma
-tmen2s
-tmen6t
-tmin4s
+tle2r3a
+6t5li
+tlung4
+4t3m2
+tmal2
+tmen6t3
tmo4des
-t3mu
-tmüll4s3
-2t5n4
-tna5me
-tnes4
+4t5n4
+tnes2
+tnes4s
+1to
3to.
-toa4
-to5ar
+to4as
to5at
-1tob
-to3be
-2tobj
-tob4l
-to2c
-to3ch
+4tobj
+tob2l
+to1c
3tocht
to6ckent
3tod
-tode4
+tode2
4to2d1er
-tode6s
to4d1u
-1tok4
-1tol
+toi4r
+3tok
to3la
3tole
-2tolz
-tome2
-to4men
+4tolz
+tom1e2
+to2men
2tomg
3ton
-to5nik
-to3ny
+to2nau
3too
to2pak
to2pat
-to1pec
-t3opfer
-to3phe
-to2pl
-1topo
-2topp
-1tor
+3topo
+2topt
3tor.
to1ra
to2rau
@@ -12668,53 +12372,56 @@ to4rän
4torc
t1ord
3tore
-to2r1el
+to2rel
to3ren
-2t1org
+t1org
t3orga
-3torh
+3torin
tor3int
to2rö
3tors
t1ort.
-to4ru
-2tory
-to5sc
-1to5se
+to2ru
+t2orw
+to3sc
+3tose
to4sk
-to5s2p
-2toss
-1to3st4
-2toß
-3to5te
+tos2p
+4toss
+3tost4
+to1sta
+4toß
+3to3te
to2tho
-1totr
-5t4ou
+3totr
+tots2
+3t4ou
touil4
to3un
3tow
-1toz
+2tö
3töch
-2t1öf
-2t1ök
+4töf
+4t1ök
+tö4l
3tön
-tör3ste
t1öst
-1töt
+4töß
+3töt
4t3p2
tpf4
2t1q
-t2r4
+1t2r4
2tr.
5tra.
-tra3bl
-1t4rac
-3trach
+3trac
tra3cha
+4tract
t3rad.
tra4dem
+tra4far
3trag
-2t3rahm
+6trahm
5t4rai
3trak
3tral
@@ -12722,41 +12429,40 @@ tra4dem
2trand
3trank
t3rann
-5trans
+3trans
t3rase
t3rasi
-tra4st
-2traß
-1traum
-3träc
-t3räd
+4traß
+5träc
3träg
3träne
-2träs
-2träß
+4träs
+4träß
4t5re.
-2treb
-2trec
+tre4ale
+4treb
+tre2br
+4trec
t3rech
t4reck
-2t3red
-t4ree
+6t3red
+5t4ree
3tref
4trefe
4trefo
-2treg
+4treg
t4rei.
3t4reib
-2treic
+4treic
2treif
t3reig
2t3reih
t3rein
-2t3reis
-4treit
+t3reis
+6treit
t3reiz
-2t3rek
-2t3rel
+2trek
+6t3rel
t4rem
t4ren.
3trend
@@ -12764,339 +12470,339 @@ t4ren.
t3rent
2trepe
2trepo
+t4repr
t4rer
-3t4res.
+t4res.
t4ret
-tre2t5r
+tre2t3r
t4reu
3treuh
t3rev
2trez
5t4ré
2t3rh
-1tri
-t4riche
-3trieb
+3tri
+4tric
+2trid
+5trieb
tri4er
-3trigg
+5trigg
t3rind
+4tring
tri3ni
-3trio
+4trinn
t4rip
+4tript
+tri2x
trizi1
-1tro.
-tro3b
-1troe
+3tro.
+3troe
3t4roi
tro2ke
-2trom.
+4trom.
tro2mi
-2troml
-1tron
+4troml
+3tron
2t3roo
t4rop
3tropf
-1tros
3troy
t3röc
-3trög
-1trös
-2tröt
-1trua
-3trug
-2truk
+2tröh
+3trös
+2t3röt
+3trua
+4truk
trum2
trums1
-3trunk
-3t4rup
+2trund
+3t4runk
+5t4rup
+tru2th
+t4rüb
trü1be
trü1bu
2t3rüc
-3trümm
+trücker6
+t4rüg
try1
2ts
4ts.
-t2s1a
-t4s3ab
-t5s4ac
-ts3ad
-t3saf
-ts2ag
-t4s3amt6
+t4sa4b
+t3s2ac
+ts1ad
+t2s1ah
+ts1al
+t4s1amt4
+t2san
t4s3ar
-ts3as
-t4sau
-t5sau.
+ts1as
+t2sau
t2s1än
-t2sca
+t3s2cha
t4schar
-t5sch2e
+t3sch2e
+t4schef
+ts4chem
tsch4li
t4schro
ts4cor
t2s1e2b
-tse4c
-ts1eck
-t4s3e4h
t3seil
t4seind
ts1em
-tse2n
-t3sen.
-ts1eng
+tse2n1
+t2s1eng
t2s1ent
t2s1er
t4s3esse
-ts1ex
t2s1i2d
ts1ini
t2s1ir
-t3skala
ts3kr
-t2s1o2
-t3sol
-t3som
-t3soz
+t1slal
+ts1o
+tso2r
+t3sou
t2sö
-t2sp
t3spal
-t3span
ts1par
ts4pare
-t3spas
+t2spä
+ts2ped
t3spek
-ts2pi
+t2sph
+t3s2pi
+t2spo
t3s2pon
t3s2por
-ts3s2
-t1s2t
-ts3taf
+t4sprei
+ts3s4
+t1st4
+t4stag
ts3tak
+ts4tal
ts3täti
-ts3tep
-t3stero
-t5steu
-ts3th
-ts4til
-t6stit
+t2s3tep
+t3s4tero
+t2stip
+t4stit
ts3toc
ts3tor
ts3trad
-t4s3trau
+t4stran
+ts3trau
t2s3trä
-t2s3tri
-t3strö
-ts3trü
-t3stu
-t3stü
+t4streu
+t2stri
+t4strop
+t2s3trü
+ts2tu
t2s1u
1tsub
t3sy
4t1t
tt1ab
-tt3ad
-t2t1ak
-t3tal
-t3tan
-t4tanb
+tta2be
+tt2ac
+t2t1ad
+tta6gess
+tt1ak
+tt2al
+tt2ant
tt1art
-tt1auf
+tta1s
tt1ebe
tt1eif
-tt1ein
tt1eis
-t3te2l
-tte4la
-tte4l1o
-tte2s
-tte4s1ä
-t2teti
-t2th
-tt3ha
+t3tel
+tte2la
+tte4leb
+tte4len
+ttel1o
+ttes1
+tte2sa
+tte2sä
+t4teti
tt2häu
-tt1ho
-tt1hu
+t2t3ho
t3ti
-t3tra
-t2trau
-t3trä
-t3t4ro
-tt5rom
+t3to
+tto1s
+t3tö
+t3tro
tt3ru
tt3rü
-tt2se
-tt3sec
-tt5se5h
-tt3sel
+tt2sen
+tt2sor
tts1p
-tt2s3ti
+tt2spe
+tt2spr
+tt2sti
ttt4
t3tu
-tt3z2
+tt2un
+t3tü
1tu
tu1alm
tu3an
2tub
-3tuch
+3tuc
tu2chi
2tud
3tue
-tue3re
-tu3et
-2tuf
+4tuf
tuf2e
tu3fen
-t1u2fer
+t3u2fer
+tuff3
2tuh
-2tu2k
-tu3ka
-t1ukr
-tu3la
-3t2um.
-5tume
-2tumf
-2tumg
-2tumk
+2tuk
+t3u2kr
+tul2a
+t2um.
+3t2ume
+2t3umf
+2t3umg
+2t3umk
+2t3umr
tum2si
tum2so
-2t1umt
+tums5tr
+2t3umt
+2t3umz
3tun.
2t1una
-2tund
-3tu3ne
-2t1unf
+2t1und
+3tune
+2t3unf
3tung
-t1unga
-tun2gl
-tung6s
+t3unga
+tung4s5
2tunif
-2t1u4nio
-2tunt
-3tuö
+2t1u2nio
+2t3unt
t1up.
-tu2ra
-tur3a4g
-tu3ras
-tur3b
+tu2r1a4g
+tu2rä
tur1c
-tu4re.
+tu2re.
tu2rei
tu2r1er
-tur3ere
-tu4res
-tu2r3e4t
+tu2res
+tu2r1e4t
+turin1
3turn
tu2ro
-tu3rol
-tur3s2
-tu2ru
-t2us
+tu4ru
tu2sa
tu4schl
-tu4so
+tu2so
tu3ta
-2tüb
-t3übe
+2tü
+4tüb
3tüch
tück2s
-1tüf
-1tüm
-1tür.
+3tüf
+3tüm
+3tür.
tür1c
-1türe
-1türg
-1tür3s
+3türe
+3türg
+3tür3s
3tüten
-2t1v
-t5vo
-4t1w
-twa4r
+4tütz
+4t3v
+4t3w
+twa2
twi4e
-1ty
-2tyl
-ty4le
+1ty1
3typ
ty2pa
-ty3st
-2t1z
-t2z1a2
-tz3an
-tz3as
-t2z1ä
-t5ze.
-t2z1e4c
+tys4
+4t1z
+t2za4
+tz1ag
+tz1al
+tz1ar
+tz1au
+tz1ä
+t3ze.
+t2z1e2c
t2z1eie
t2z1eis
-tze4n
-tz4ene
+tze4n1
+tz2ene
tz3ents
-t2z1erl
+tz1erl
+tz2ers
t3ze2s
-tz1imp
+tzgel2
tz1ind
tz1int
-t2zo
-tz1of
-t3zon
-tz1or
-tz4tin
-t2z1w
-2u.
-u3a2b
+t2zor
+tz2ö
+tz2th
+tz2tin
+tz1wä
+tz1wi
+tz1wu
+2ua
+u1a2b
u1a2c
-ua3d
uad4r
u1al.
+ua2lau
+u1alb
u3alet
u1alf
u3a2lo
u1alr
u1als
-ual3t
+u1alt
ua2lu
u1am
-u3ans
-ua2p
+u1ans
u3ar.
-uar3a2b
-u3ars
+uara2b
+u1ars
ua3sa
-ua2t3h
-ua5t2i
+ua2th
+uat2i
u3au
u1ay
u1äm
u1äu
2u1b
-u3be
-ub6i
+u2be2c
+u3b4i
+ubi3os.
+ub2l
ub3lic
-ub5los
-u3blö
-ub3lu
+u2b3lu
u2bop
+ub1r
ub3rä
-ub5rit
-ub2sa
+u2b3rit
+ub2san
ub2s1o
ub2spa
-ub3um
-u2b3üb
-4uc
-u1ce2
-u2ch1a
-u3cha.
-uch3an
+u2büb
+2uc
+uc1c
+u1ce
+uch1a
+u1cha.
uch1ä
u1che
-u2ch1e2c
+u2ch1e4c
uch1ei
u3ches
u1chi
-uch3il
+uch1il
uch1in
uch3l
-uch5m
+uch3m
uch3n
u2ch3r
uch2so
@@ -13106,65 +12812,67 @@ uch4tor
uch2t3r
u1chu
uch3ü
-uch3w
+uch1w
+u1ci
u2ckem
u4ckent
-uck2er
-u4ck3erl
+u3ck2er
u2cki
-uck4sta
-u1cr
+u1cl
2u1d
-u5d2a
-udens2
-ude3r2e
+u3d2a
+uden3s2
+uder2e
udi3en
uditi4
-u4don
+u2don
ud3ra
-u1e
-ue4ck
+u3dru
+2u1e
+ue2ck
u2ed
ue2en
u2eg
-u4ela
+u2ela
ue2le
+ueli4
ue2mi
-ue2n1
-u3eni
-uen3k
+uen1
+ue2nä
+ue2ner
+uenge4
+ue2ni
+ue2no
uen2zu
u2ep
ue2r3a
-u3e2r1ä
-ue2rei
-uer5eife
-u5eremp
-u5erent
+ue2r1ä
+u2ere
+u3ereh
+ue3reig
+u3erer
ue4rerg
+ue4rerk
+u3erex
uer3g2
-u5erinf
-u5erint
-uerk4
-uer4ne
+u4erinn
+u3erin4t
+uer2ne
+uer4ner
uern3s4t
-uer3o
+ue2r3o
u3err
-uert2
+uer3sc
+uer3t2
u3erum
u3erunf
u3erunt
-u3erur
-u3erv
-uer3z
ue2ta
ue4tek
-uet4s
-uf3ad
u3fah
uf1ak
-ufall2
-uf1ar
+uf3ar
+u3fas
uf1au
u2f1äs
u2f1ä2ß
@@ -13173,525 +12881,493 @@ u2f1em
u3fen.
u2fent
u2f1erh
+u4ferle
uf2ern
2uff
-uf3fe
uff4l
uf2fro
+uffs4
uf3l
-u3fo2r
+u2fob
+ufo2r
uf1ori
-u1fö
uf3r
-uf5sä
-uft1eb
-uft3s4
-uft5sa
+uf3sä
+uf4sin
+uf4so
+uf2spo
+ufs3tem
+uf2t1eb
+uft3s2
+u2fum
2u1g
u4gabte
ug1af
ug1ak
u2g1ap
uga4s
-ug3asc
ug1au
-u4g7e2i
-u2g5ent
-ug5erf
-ug5erl
-uge7sc
+ug3d2
+u2g1ei
+u2g1erf
+u2g1erl
ugge4st
ug3hu
u2g1l
-ug3lä
-ug5lo
-u3g4lö
-u4g3lu
+ug3lad
+ug3lo
+u3g2lö
+u4glu
u2g3n
ugo3
ug1or
u2gö
u4g3reis
ug3ro
-ug3rum
ug3rüs
-ug5sc
-ug3s2e
+ug3se
+ug4ser
ug3si
ug3spa
ug4spr
-ugs2t
+ug4spu
ug5stä
ug3str
-ugut2
+ug3stü
u2gü
u1h
2uh.
-uhe1ra
-uhe1s4
-uhe3st
+uhe3s6
uh1la
uh1lä
-uh3ma
-uh5me4
+uh2li
+uhme4
uhr1a
-uhr3er
-uh1ri
+uh2rer
+uh3ri
uh4rin
uhrt4
-uhr3tr
uh2ru
+uh4rü
uh1w
-4ui
+2ui
ui2ch
u1ie
ui1em
u3ig
u4ige
-u3in.
+u1in.
u3isch.
u3ischs
uisi4n
-ui4s3t
+ui4s5t
u1j
-ukä2
+uk2a
u3käu
u1ke
u1ki
-u1kl
-u3kla
+u1k2l
ukle1i
-u3klo
-u3klö
-u5kö
+uk4n
+uk2ö
u1k4r
uk2ta
-uk2t3in
+uk2t1in
uk2t3r
u1ku
uku2s
u1l
ul1ab
ul1am
-ul2ar
ula2s
ul1äm
ulb4
+ul2dr
uld2se
u2l1el
ule4n
ul1erf
ul1erh
ul1erw
-ules1a
+ule2sa
ule2t
-ul3eta
-ul3fe
+ul1eta
+u2lex
+ul3f4
ulg4
uli2k
-uli5ne
ul1ins
ul3ka
ul2kn
ull2a
ul2les
-ull1s
+ull3s
ulm3ein
ulo2i
ul1or
-ulö3s
ul2p1h
ul2sa
-ul2sei
-ul3sp
-ulsu3
+ul4sam
+uls2th
uls3z
-ul4tar
-ul2tau
+2ulta
ul3th
-ul2tri
+ul4tri
+ult3s
u2lü
-ulz2
-ul3zw
+ul2vr
+ulz2w
u2m3a2k
um1all
-um2an
-uman4s
um1anz
-um1ar
-um1aus
-1umd
-2ume
-um4en
+u2m1art
+u2m1aus
+u2maut
+1um3d2
+um2en
ument4s
umer2a
-um1erg
-um1erl
-um1erw
+u2m1erg
+u2m1erl
+u2m1erw
1umf
1umg
um1ins
um1ir
1umk
-1uml
-2umm
-um3m2a
-um3n
-u3mon
+1um3l
+4umm
+umm2a
umpf4li
-um2pl
-ump3le
+um2p3le
1umr
-1umsat
+3umsat
um4ser
um2sim
um2s1pe
-um1st
um2su
-umt2
-um3th
-u2m3ur
+um3t2
+um2un
+u2m1ur
1umz
-u2n
-2un.
+un1
+4un.
2una.
1unab
-un1ac
+un3ac
un4al
-u3nam
-u4n3an
-un1ap
-2u5nas
+u3n2am
+u2n3an
+2un2as
un3at
-unau2
-un1ä
-4unc
+1unda
un4dab
-un4d1ac
-1unddr
+1undd
un4dei
-und3erf
+un4d3erf
und5erha
+1undf
+2undg
un2did
-un2do
+1undn
+un2dor
un2d3r
-und5re
4unds.
und3sp
-un4d3um
-1undvi
-1undzw
-un1e2
+und3st
+un2d1um
+1undv
+1undz
+u3ne
+une2b
+une2h
+un2ei.
un3ein
-un3el
-une3re
+unen2t
un4es4
-un3et
-un2gä
1unget
1ungew
-un1gl
+ung5h
1unglü
un2g1r
ung3ra
ung3ri
-ung4s3
-u3ni
-un1ide
-1u4nif
-un1in
-un1ir
+ung4sa
+un2id
+un3ide
+1u2nif
+unik4
+un2im
+uni2r
2unis
-un5isl
-1u4niv
-un2k1a
-un2kn
-un2kre
-un2kro
+un3isl
+u3n2it
+3u2niv
+2unk
+un2k1a2
+un2kei
unks2
-unk3sp
-unk4t3r
+unk4tit
+unk2t3r
3unku
-un2n3a2d
-un5n4e
-un3no
-unn3s
-un1o
+unna2
+un2n3ad
+un3n2e
uno4r
un2os
1unr
uns2
2uns.
-unsch5el
-un5se
+un3se
1unsi
un3sk
un3sp
-un2stu
+uns4t1r
1unt
un3ta
-unte2
-un3th
-un3t4r
+unte4ri
+un3tr
+unt3s
2untu
-un1u
-u3nut
unvol2
unvoll3
1unw
+2unz
+2uo
u1o2b
u3of
u3or.
u1or3c
+u3ors
+uos2
u1os.
+uote2
u1pa
u1pe2
uper1
up2fa
-up3f2e
-up2f1i
-u3pfl
+u2pf2e
+u2pf1i
u3pi
+up2pl
up2pr
u1pr
-up1ru
-up1sl
up4t3a2
upt3erg
upt1o
up4tr
-u1pu
u1q
-4ur.
+2ur.
u1ra
-u3ra.
+u2rab
u3raba
ura2be
-u3rak
-u3ral
-ur3alg
u2r3a2m
-ur1ana
+u2r1ana
ur2anb
-u3rand
-ur1ang
+u2r1ang
ur2anh
-ur1ans
-u3rant
-ur3a6ren
-u3rati
-ur3att
-ur1au
-u3raz
-2urä
+u2r1an5s
+u2rar
+ur3a4ren
+u2r3att
+u2r1au
+2u1rä
ur1än
-urb2
-ur3ba
-ur2ble
+ur3b2a
urch1
-urch3s
urd2
ur3di
2ure
ur1eff
-ure3g
u2rele
ure4n
-u5ren.
-u2rent
+u4r1ep
ur1erh
ur1erw
2urf
-urg2a
+urf3t
ur2gri
urgros4
-urgs2
-urg3st
-u1r2i
+urg3s4
uri2c
-u2r3im
-ur3ind
+ur1im
ur1ini
ur3ins
ur1int
-ur3inv
+u2rinv
urk2s
1urlau
-urm2a
-urm3ang
-2u1ro
-uro3st
+4u1ro
+u3rol
+uro1s
u1rö
-2urr
+ur3p
ur3sac
ur2san
-urs1au
-ur6sei
-ur4ser
-ur6sin
-ur2st
-ur5st4r
+ur2sau
+ur2ser
+ur4sin
+urst4r
ur4sw
+ur3s2ze
urt2
-ur5t4e
-ur3th
-u1ru
+u3ru
urü2
ur2za
ur2zä
ur2zi
ur2zo
ur2z1w
+2us
u4saf
-us1an
us4ann
-u2s1au
u6schent
usch5wer
-us1ec
+u2s1ec
u2s1ei
u3seid
-u5sep
+u3sep
use1ra
u2serp
-us4et
+u2s1ese
usi3er.
usi5ers.
-u3sik
+us3kl
+u4sko
us3oc
u3soh
-u3sol
-us1op
-us3ou
-u3sow
+u2s1op
+us1ou
us3part
-us1pas
+u2s1pas
+u2spat
us1pe
-u3spek
+u3s2pek
us1pic
-u5s2piz
+u5s4piz
+u2spo
us2por
-us4sei
-usse4n
-uss5erfa
-uss3erk
-uss5ersu
+u2spu
us4sez
us2sof
-uss3tät
-ust1a2b
-u3stal
-u3stel
-us1tr
-us4tris
-u3stu
-u4stun
-u4stur
+ust3abe
+u1stal
+us3tau
+us2th
+ust2in
+us3tr
+u5stras
+us6tris
+u1stu
+u2stun
+u2stur
us2ur
u2sü
-u1sy
-u1ß
-ußen3
+2u1ß
2u1t
-u3taf
ut1alt
-ut1a4m
+ut3a2m
u2t1ap
-u2t3ar
-ut1är
-u3tät
+u2t1ar
+u2tär
u3te
-u5te.
-u4t1e4g
-ute2l
-ut2em
+ut1eg
+ute4ge
ute2n1
-uten3e
-u4tent
-ute5r4er
-u5tern
-ut3ersa
-u5tet
+u2tent
+uter4er
+u4t3ersa
+ut2es
+ut2et
u4tev
u4t1ex
-u2t1hi
-u2t1ho
-u2t1hu
-uti2q
+utfi4
+ut2he
+u2thi
+u2t3ho
+u2thu
+uto1
uto4ber
-uto5c
-uto3n4
+uto3c
ut1opf
u2tops
ut4or
-u3tos
+utos4
+u3tö
ut3rea
ut3rü
-ut5sa
+ut3s2a
ut2s1ä
ut4schl
-ut6schö
-ut3sp
-ut4spa
+ut4schm
+ut4schö
+ut2spa
ut3te
-ut3t4l
+ut5t4l
utts2
-utt3sp
-utu3ru
+utu4re
+utu5ru
+u3tü
utz3eng
ut2zin
-u1u4
+ut2zo
+ut2z1w
+2u1u2
uufe2
u1ü2
-u1v4
+2u1v4
u2ve.
uve3rä
u1w
-uwa3s
-u1x2
+2u1x
+ux2e
+ux2o
ux3t
u1ya
-u1z
-uze2
-uz3ot
+2u1z
uz1we
uz3z4
1üb
+2übc
2übd
übe2
übe3c
-übe4r1
-ü2b5l
-3üb5r
-üb2st
-3übu
+über3
+üb3l
+üb3r
+üb2s3t
2üc
ü1che
üch3l
-üch4s3c
-üch5t4e
+üch2s1c
+ücht4e
+ü3cken
ück1er
-ück5e4ri
+ück3eri
ü4ckers
ück4spe
-ü4d3a4
+2üd
+üd3a4
ü3den.
üden4g
ü3d2ens
üd1o4
-üd1ö
-ü4d5r
+üd3r
üd3s2
üdsa1
-üd1t4
-ü2f3a
+üd3t4
+üdwes2
+ü2f1a
ü2f1ei
+üfer2
ü2f1erg
üf2fl
ü2f1i
üf3l
+üf2to
ü1g
-ü3ge
+üge6leis
ü2g3l
ü2gn
üg3s
@@ -13705,373 +13381,371 @@ uz3z4
üh1i
ühla2
ühl1ac
-ühl1ag
-üh5l2e
-üh3li
-üh3mi
+ühl2e
üh3mo
-üh5ne
-ühner5ei
-üh3r4e
-ühr5ei.
-üh5ro
-ühr5ta
+üh3ne
+ühn2s
+üh3r2e
+ühr3ei.
+üh1ro
+ühr3ta
üh1s
-üh3s2p
-üh5te
+ühs2p
+üh3t
+üh4th
ü1hu
üh1w
ü1k
-2ül
ül1a
ül2c
-ü5l4e
+ül4e
ül2la
ül2l1ei
ül2lo
-ül4lö
+ül2lö
ü1lu
-ü4ment
+ü2ment
2ün
ü2n1a
-ün2c
ün2da
ün2dr
-ünd1s
-ün2f1
-ün4f3ei
-ün3fl
-ün4fli
-ünf3r
+ünd3s
+ünen3
+ün2fa
+ün2f1ei
+ün2fli
+ün2fr
ün2g3l
-ünn4s
+ünn2s
ün2s
ün3sc
+ün3se
ün3sp
-ün4st
-ün5sta
-ün5str
-ün3th
+ün3str
+ünt2
+ü1nu
ün2za
ü1pe
ü1pi
-ü1pu
+üp2pl
ür1a
ü2r1ei
ür2fl
-ür4f3r
-ür4g5eng
-ü1ri
-ü1r2o
-üro3b
-ü3rofe
-üro1r
-üro3st
+ür2fr
+ür4g3en4g
+ü3r2o1
ürr2
ür2s
-ürs3tin
+ür3sc
+ür3se
+ür3sp
ürt2h
-ür3the
-ü1ru
+üs2a
ü2schl
üse3h
üse3l
-üs4s3c
-üs5se
+üse1s
+üs2s1c
+üss2e
üs2st
ü2st
üste3ne
ü1ß
-ü1ta
+2üt
ü2t1al
-üt3r
+ü2t3r
üt2s1
üt2tr
ü1v
ü1z
-2v.
-3va.
2v1ab
-va3c
-va3ge
+va1c
val2s
2vang
-2v1arb
-va3st
+2varb
+va1s
v4at
-va2t3a6
-va4tei
+va2t3a4
+va2tei
va2t3h
+vatik2
va4t1in
vati8ons.
va2t3r
-vat3s2
-vat3t
+vat3s4
va2t1u
2v1au
2v1b
2v1d
-ve2
-3vea
+1ve2
ve3ar
ve3b
ve3c
ve3d
ve3g
ve3h
+ve4i
veit4
veits3
-vek3
ve3la
ve4l1au
ve3le
ve3li
-veli5ne
ve3lo
ve3ma
ve3mu
ve3nal
+ven2c
ve3ne
+venen4d
ve3ni
-ven3k
ve3nö
-ve3nu
ve3o
ver1
ver3a
ve3rad
-ve5rand
-ve5ras
-ver3b4
-ver3d2
+ve3rand
+ve3ras
+ver3b2
+verd2
vere2
-ve3reie
-ve3ren
+ve4rek
verf4
verg4
ve3ri
-ve5ris
-ve5rit
+ve4rin
+ver3k
ver3st
-2vesc
-2ve3se
-ves1p
+vert2
+ver5te
+ver3u
+ves1
+2ve3sc
+2ve3s2e
ves3ti
ve3ta
vete1
-vete3r
ve3tr
2veü
ve3v
-ve5x2
-ve7xe
+ve3x2
2v1f4
2v1g
2v1h
-vi2a
-vi3an
+vi3ar
vi4a3t
-vi4c
-vi3de
+vi2c
vid3s2t
vie2h3a
vi2el
vi2er
+vie4rec
vie2w1
vig2
-vi3ka
+2vii
vi2l1a
-vi2leh
+vi4leh
vi2l1in
2v1i2m
+vima2
vi4na
vin2s
2v1int
-3vio
vi3sa
vise4
-vi5s2o
-vi3s2u
-vize5
+vi3s2o
+vi2sp
+vis2u
2v1k
2v1l2
2v1m
2v1n
2v1ob
+vo3ga
vo2gu
+3vol
voll1a
-voll5end
-von3
+vollen4
+vol6l5end
+vol2li
2v1op
vo2r1
vor3a
vor3d
+vor3e
vor3g
vo3ri
-vo5rig
-vor3o
+vormen4
3voy
vö2c
2v1p
-v3pf
-v1ra
-3vri
-v1ro
+v2r
+2v3ra
+v3re
+v4ree
+2v3ro
2vs
vs2e
+v1sta
+v1steu
v3s2z
-2v1t
+2v3t
+vu2et
2vumf
2v1v
2v1w
2v1z
-4w.
w2a
+1waa
wab2bl
-wa5che
-wa3d
+wa3che
+wach6stu
+wach4t4r
waffe2
+waffel3
1wag
wa5ge
-wa2g5n
-wa2gr
-wa3gra
-3wah
+wa2g3n
+wa3go
+1wah
wahl5ent
-wah3ru
+wah4ler
+wah2li
wai2b
1wal
-3wald
+2walb
wal4da
+2walm
+wal2ta
+wal2to
walt4st
-wa5na
-wang6s
-wan4s
+wa3na
+wandels6
+wang4s
wa2p
-wa2r
-wa3ra
1war2e
ware1i
-wa3ri
war3ste
wart4e
-wa3ru
-1wa2s
+1was
wa3sa
+wa4scha
wa3se
wa3sh
-wa3si
-wass4
-was7se
+wass4e
+w2ä
1wäh
1wäl
+2wäng
1wäs
-wäs4c
-wä5sche
-wäs5se
-w1b
+wäs2c
+wä3sche
+2w1b2
+wbu2
2w1c
-w1d
-weat3
-we3be
+2w1d
+we2a
+we2ba
4webeb
-we3cke
-we5cke.
+we2bl
+web3s
+we3cke.
we5cken.
-we5ckes
-we3d
-we2e2
-weed1
+we3ckes
+we2e4
+weed3
we2fl
-3weg
+1weg
we2g1a
-we2g5l
-we4g3r
-wegs4
-weg3sp
+we2g3l
+we2g3r
+weg3s4
1weh
-we3he
+we2i
wei4bl
2weie
+weik4
weis4s3p
wei3str
-wei3ße
wei4tr
-weit3s
-wel2s
-wel3se
+wel6schl
+wel6schr
wel2t1
-wel4t3a
-wel6tend
+wel4t3a4
+wel6t5en6d
wel4tr
-wen3a6
+wen3a4
we3ni
wen4k3ri
we2r3a
wer2bl
1werbu
werd2
-werde3i
5werdens
1werdu
+werer2
wer2fl
-2werg
-we4r1io
+wer4gel
+we4r3io
1werk.
+wer2ka
1werke
wer2kl
wer2ku
+we2rö
wer2s
-wer2t3a
-wer4tei
+wer2ta
wer6t5erm
-wer4to
+wer2to
1werts
-1we3se
-we3si
+1wese
we2s1p
we4st
west1a
west3ei
-wes2t1o2
+wes2th
+west1o2
west3r
wes4tu
-wet4s
-wet4ta
+1wet
+wet2s
wett3s
+2w1ey
2w1g
-w5ho
+2w3h
wi3cka
-3wid
+1wid
wi2e
wie3l
-wie5ne
+wien2e
wie2st
-wi3k2
+wik2
+1wil
wim2ma
wim4m3u
win4d3e4c
win2dr
win2e
+2wing
win8n7ersc
-wi4r
-1wirt
-wi5s4e
+1wi4r
+wi3s2e
+wi2sp
1wiss
wi3th
1witzl
-3wj
-2wk
+2w1k
2w1l
2w1m
-wn3sh
+2wn
+wn3s
1wo1c
wo2cha
woche4
1woh
-woh4l
+woh2le
1wolf
-wolf4s
+wolf4s3
wol4ler
wor3a
wo2r3i
@@ -14080,15 +13754,14 @@ wo4r3u
wot2
1wöc
wört2h
-wör3the
2w1p
-1wr
-w1ro
-2ws
-w3s4k
-w1s2t
+w2r
+w3ro
+2w1s
+w3s2k
+ws2t
2w1t
-w3ti2
+wti2
w2u
1wuc
wul2
@@ -14096,7 +13769,7 @@ wul3se
wun2s
4wur.
wur2fa
-wur4s
+wur2s
1wurst
wus2
wus3te
@@ -14105,22 +13778,21 @@ wus3te
wül2
wün3
2w1w
-6x.
x1a
1xa.
-2x3ab
-1xad
+2xa2b
+1x2ad
1xae
xa1fl
-1x2a3g
-xa4m
-xa3me
-xa5mer
-2xan
-x4anz
-3xas
+1x2ag
+x3a2m
+x2anz
+1x2as
2x1b
-x1c
+2xc
+x1ce
+x1ch
+x1cl
4x1d
1xe
x1e4g
@@ -14128,184 +13800,197 @@ x1e4g
xe2l
xe3lei
x1em
-7x2em.
-xemp6
-3x2en
-xens4
-xen3sa
+3x2em.
+x2en
+xen3s2
x2er.
-5xere
+x2ere
xers2
3xes
2x3eu
2x1f
2x1g
-xge1
-2x3h
-1xi
+2x1h
xib4
xi1c
xich2
-2xid
xide2
xi2d1em
x1i2do
xie3l
-xi3g4
+xi3g
+xil1
+xil2a
xi2lo
-xi2l1u
-xin3sk
-x2i2s1
-xi3sc
-xi4se
-xiso2
+xi2lu
+xin3s2
+x2is1
+xis2c
+xi2se
+xi2so2
xis3s
-xis2tä
+xis4tä
+xi2su
x1i2tu
x1j
-x1k4
-2x3l
-xlib6
-x1m
+2x1k2
+2x2l2
+x3lä
+x3le
+2x1m
2x1n
x1or
-4x3p
+4x1p
+xpor6ter
x1q
-x1r
+2x1r
2x3s2
4x1t
x2t1a
-xt3an
-xt4as
-x2t1ä
-x3tät
+xt2as
+xt1ä
+x2tän
xtblo4
x2t1e2d
x2t1ei
x4tent
-x2t1erf
-xtra1b6
+x2t1er2f
+x2t3ev
+xtfi4
+x2t1il2l
+xtra3b4
x2t3ran
xt3s2
-x2t1u
+xt1u
x3tur
1xu
xu1a
-x1u4n
-xu2s1
-x1v
+x1u2n
+xu2s
+2xv
2x1w
-1xy.
-1xys
+2xy
+3xy.
+3xys
x1z
2y1ab
1yac
y1al.
y1a2m
yan2g
-y3ät
+y1ank
+y1ät
y1b
-yb6r
-y1c
+y1c2
y2chi
y3chis
-ych5n
-y1d
-y3d4r
+ych3n
+y1d4
y1e
y2ef
yen4n
-y2es
-ye3sp
-y3est
+y2ere
+y2es.
+yes2p
ye2th
-y1f
+y1f2
y1g
+ygi2
ygie5
+yg2l
y1h
yhr2
y1i4
y1j
-y1k4
-yk5s
+y1k2
+yke3n
+yk3s2
y1l
-yl3a2m
-y3lant.
-y3lante
+y2l3a2m
+yl4ante
yl3c
-y5len
-y5ler
+y4le.
yli4n
yloni1
-yls2
-yl1st
+yl3s2
y2l1u
yma4t
ym3p4
-ympi3e
-y2ne
-y2n3o
-yn3t
+ympi1
+y2n1o
+yno4d
+ynt2
+y1nu
y1of
yom2
yon4i
y1ont
-y3ou
+y1ou
y1p
ypa2
yp3an
ype2
-yper3t
+y2pf
y3ph
y2p1in
ypo3
-y4ps
-yp3t
+y4p3s
y1r
y3r2e
y3ri
+yri2a
yri1e
-y5s4c
-y1sé
-ys2h
-y3s2p
-y2st4
-ys1tr
-y3s2ty
+y3r4o
+yrr2
+ys2an
+y3s2c
+yse1
+y3s2h
+y4s3l
+ysme3
+ys2po
+ys1pr
+ys3t4
+y1s4ty
+y2s1u2
y3s2z
-y1t
-y2t2h
+y1t2
+y2te.
+y2tes
+y3to1
yu2r
yure3
y1v
y1w
y1y
y1z2
-6z.
2z3a2b
+zab3l
za1c
-z3a2d
+z1a2d
za3de
2z1af
za3gr
-3z2ah
+3zah
2z3a2k
+zale3
2z1all
2z1am
-z3ambik
3zambiq
z1an
za2na
2z3anf
3zani
-z3anl
-3zar.
-2z1arb
-3za3re
+2z3anl
+2zarb
+2zarc
z1arm
-3zaro
-za3st4
-2z3at
+z1arti
+zar2tr
+2z1arz
+z1as
+za1st4
+2z3at3
3zaub
z1au2f
z3aug
@@ -14316,205 +14001,218 @@ zä2
2z1äm
z1ärg
z1ärm
-4z3b6
+4z3b4
zbü1b
-zbübe5
-4z3c
-2z3d
+zbübe3
+2z3c
+2z3d2
+zdan2
zdä1
-zdi1st
-1ze
-ze3a
-2zeck
+2z1e2ben
+2zecho
+2z1eck
ze1e
2z1eff
+zeik4
zei3la
zeile4
2z1ein
-zei3s2
-zei5sp
+zei3s4
zeist4
-zeit1a
-zei4tak
-zeit7ende
+zei2t1a
+zeit5end
zei4t3er
zei2tr
-zeit3sp
-ze4l1a2
-zel3ad
-zel1er
-zel1in
-zel5la
+ze2l1a2
+ze2len
+ze2l1er
+ze2l1in
+zell2a
zel3sz
-zel3th
+zel3t2h
zelu2
-ze5m4e
2z1emp
5zen.
-ze4n1ac
-zen5s2e
-zen2ta
-5zentr
-zent3sk
-2zentw
-ze2nu
+ze4n3ac
+zen3n
+ze2no
+zens2e
+zen4sem
+3zent
+zent3s
zen4zer
-5z2er.
+z2er.
ze2r3a
-ze2r1e2b
+ze2re2b
2z1ergä
4z3ergeb
z3erhal
2zerhö
-ze3ri
-zer3k2
-3zerl.
-5z2ern
+zerin4t
+zerk2
+z2erl.
+2zerlö
+z2ern
zer4neb
-zer6n3ei
-2zerq
-5zerr
-z2ers
-2z3ersa
-4zerste
-zert2a2
+zer4n3ei
+ze2ro
+2z1erq
+zers2
+2z1ersa
+4z3erste
+zert1a4
zer4t3ag
-zer4ter
+zert4an
+zer6tere
zer4tin
zer6t5rau
-2zerz
-3zerza
-z1erzi
+4zerwei
+2z1erz
+3z2erza
ze2sä
-ze2s1i
+ze3sc
+zes1e
+zes1i
ze3sku
ze2sp
+zessen4
zes6s5end
-ze2st
-zes3tr
+zes2sp
+zes2st
+ze2s3t
+ze3sta
ze2tr
+2zetts
2z1ex
-2z3f
-2z1g
+2z1f4
+2z1g2
zger2a
2z1h
z2hen
-zhir5
+zhir3
zi3alo
-zid5r
+zi3ar
+zid3r
zi1erh
+ziers1
zi1es.
-zig4s
zil2e
-2zimp
-3zine
+2z1imp
+zin2e
zin4er
2z1inf
2z1inh
+zin1it
+zin2sa
zin4ser
4zinsuf
2z1inv
-zi2o
+zi2o3
zi3op
-zirk4
+zirk2
zirk6s
zi3s2z
zi1t2h
2z1j
2z3k4
-zkü1b
-2z1l
-z3la
-2z1m
-2z3n2
-znei3
-2zob
-2zof
-z1oh
+2z1l2
+2z1m2
+zme2e
+2z3n4
+2z1ob
+2z1of
+zo2gl
+2z1oh
3zol
-zol3lu
-zon6ter
+zon4ter
zo2o
-zo2r
-zo3re
+2zope
+z1or
+zo2ri
zor4ne
-zo5se
2z1osz
-2zot
-2z1ö2f
-zö7li
-2z3p2
+2z3ot
+2zö2f
+z1öl
+2z3p4
2z1q
2z3r2
-4z3s2
+4z1s2
+z3sa
+z3sh
+z3sk
+z3sz
2z1t
z2t1au
-z3te
z4tehe
-zte3ma
-zte3o
-zte3str
-z2t1h
-z4t3hei
z3t2her
zt3ho
-z3ti
zt1ins
+z3tö
zt3rec
-zt3s
+zt3s2
+z3tü
zu1
zu3a
zub4
-zu5cke
+zu4ch
+zu3cke
zud4
+zudi4
+zu2el
zu3f4
zu2g1ar
+zu4gent
zu3gl
-zu2g1un
+zug1un
2z1uhr
+zu3k
2z1um.
zumen2
2zumf
2zumg
2zuml
2z1ums
-zu3nä
-zu3n2e
+zun2e
+zung4
2zunt
-zu3nu
-zu3nü
+zup2fi
zu3r2a
-2z1urk
+z1urk
2z1url
-2zurs
+2z1urs
2z1urt
zu3s4
-zu3t
+zu5t2
zuz2
2züb
zür1c
2z1v
zw2
+z1wac
4zwah
zwan2d1
-4z3wäl
+z2wang
+z1war
+2zwas
+4zwäl
2zweg
z2weig
+z1weis
2z1wel
2z1wen
-2zwer
-4zwerk
-z1wes
+2z1wer
+z2werg
+2z1wes
+2zwet
4zwir
z2wit
2z1wo
-2zwö
+z1wör
z1wur
2z1wü
-zy1ank
4z1z
z3z4a
-z3zi
-zzi3s2
-z3zo
-zzoll2}
+zzi1s4
+z3z2o
+zz2ö} \ No newline at end of file
diff --git a/Master/texmf-dist/tex/context/patterns/lang-de.rme b/Master/texmf-dist/tex/context/patterns/lang-de.rme
index 8bfa03fdb91..ac6e14344b8 100644
--- a/Master/texmf-dist/tex/context/patterns/lang-de.rme
+++ b/Master/texmf-dist/tex/context/patterns/lang-de.rme
@@ -1,8 +1,8 @@
% generated by mtxrun --script pattern --convert
-% dehyphn-x-2008-06-18.pat
+% dehyphn-x-2009-06-19.pat
-\message{German Hyphenation Patterns (Reformed Orthography, 2006) `dehyphn-x' 2008-06-18 (WL)}
+\message{German Hyphenation Patterns (Reformed Orthography, 2006) `dehyphn-x' 2009-06-19 (WL)}
% TeX-Trennmuster für die reformierte (2006) deutsche Rechtschreibung
%
@@ -17,15 +17,15 @@
%
% The word list is available from
%
-% http://repo.or.cz/w/wortliste.git?a=commit;h=469951d78911b130c2c50f0bc327d2c5d1204895
+% http://repo.or.cz/w/wortliste.git?a=commit;h=e4826ce7db99bceb6043be48983ff2b67d56669f
%
% The used patgen parameters are
%
% 1 1 | 2 5 | 1 1 1
-% 2 2 | 2 5 | 1 1 1
+% 2 2 | 2 5 | 1 2 1
% 3 3 | 2 6 | 1 1 1
-% 4 4 | 2 6 | 1 1 1
+% 4 4 | 2 6 | 1 4 1
% 5 5 | 2 7 | 1 1 1
-% 6 6 | 2 7 | 1 1 1
-% 7 7 | 2 9 | 1 4 1
-% 8 8 | 2 9 | 1 4 1
+% 6 6 | 2 7 | 1 6 1
+% 7 7 | 2 13 | 1 4 1
+% 8 8 | 2 13 | 1 8 1
diff --git a/Master/texmf-dist/tex/context/patterns/lang-deo.hyp b/Master/texmf-dist/tex/context/patterns/lang-deo.hyp
index 0ca53c25f7f..a69a186cf68 100644
--- a/Master/texmf-dist/tex/context/patterns/lang-deo.hyp
+++ b/Master/texmf-dist/tex/context/patterns/lang-deo.hyp
@@ -1,8 +1,8 @@
% generated by mtxrun --script pattern --convert
-% for comment and copyright, see ./lang-deo.rme
+% for comment and copyright, see e:/tmp/patterns/lang-deo.rme
-% used:
+% used:
\hyphenation{
-}
+} \ No newline at end of file
diff --git a/Master/texmf-dist/tex/context/patterns/lang-deo.pat b/Master/texmf-dist/tex/context/patterns/lang-deo.pat
index a82b144ce69..7ea7b018806 100644
--- a/Master/texmf-dist/tex/context/patterns/lang-deo.pat
+++ b/Master/texmf-dist/tex/context/patterns/lang-deo.pat
@@ -1,365 +1,359 @@
% generated by mtxrun --script pattern --convert
-% for comment and copyright, see ./lang-deo.rme
+% for comment and copyright, see e:/tmp/patterns/lang-deo.rme
% used: a b c d e f g h i j k l m n o p q r s t u v w x y z ß à á â ä ç è é ê ë í ñ ó ô ö ü
\patterns{
-.a6
-.ab3b
-.ab5l
-.abo4
+.ab1a
+.ab3l
+.abo2
.ab3ol
.ab1or
-.ab3s
+.ack2
+.ag4n
.ag4r
.ag2u
-.aid4
.ai2s
+.akt2a
.al3br
.al2e
-.al3l4en
-.al3ph
+.al5l4en
+.al4tei
.alt3s
-.amt4
-.amts3
-.an3alg
-.an3d
-.ang4
-.an1gl
-.ang6s2
+.ampe4
+.amt4s1
+.an3d2
+.anden6k
+.and4ri
+.ang2
+.an3gli
+.ang4s2
.angst3
-.an3k
.an3s
.an4si.
.ans2p
-.an3z
-.ao5
-.ap3s2
-.ar3k2a
+.an4tag
+.an3th
+.aps2
+.ari1e
+.ark2a
.ar4m3ac
-.ar2s
+.ar2sc
.ar4t3ei
+.as6sest
+.as2t
.ata1
+.at4h
.au3d
-.au2f5
-.au4s1
+.au2f3
+.aufs2
+.au2s1
.ausch3
.au6stes
.ax2
-.ä6
.äm3
.ät2s
-.b6
+.äu3
.be3erb
.bei6ge.
.be3ra
.be3r2e
-.ber4g3a
+.berg3a
+.ber6gab
.ber4g3r
-.bi4os
.boge2
.bo4s3k
-.c4
+.bu4ser
+.bus5sen
+.bu7sser.
.ch2
-.d4
-.dab6
+.dab4
.da2r1
-.dar3in
-.dar2m1
+.da4rin
+.darm1
.da4te.
.da4tes
-.de4al
+.de2al
.de1i
-.de3o2
+.de4in.
+.de1o2
.de3r4en
+.derma3
+.dermas6
.de3sk
-.deut2
-.dien4
-.do3b
+.dien2
.do2mo
.do1pe
-.dor2f1
+.dorf1
.dü1b
-.e4
-.ebe2
-.ehe3i
+.ebe2r1
+.ehe1i
.ei3e2
-.ei4ne
-.ei5nen.
-.ei5ner
-.ei5nes
-.ei4sp
-.ei4s1t
+.ei4na
+.einbus6
+.einen6g
+.ei2sp
+.ei2s1t
.ei2tr
+.eke2
.el2bi
.em3m2
.en1
.en4d3er
-.en4d3r
-.enn4
-.en4t3
+.en5der.
+.en2d3r
+.enn2
+.en2t3
.epi1
+.er8brecht
+.er2da
+.er4dan
+.er4dar
.er4dei
.er4der
.er1e
+.ere3c
+.erf4
.er1i
.ers2
.er8stein
-.es3p
+.er8sterb
+.er8stritt.
+.er8stritten.
+.er4zen4
+.es1p
+.es2st
.es2t
.est4e
+.est2h
.et2s
-.eu3
-.eug4
+.eu1
+.eu3g4
+.eu3t
+.eve4r
.ext4
-.f6
-.fa2c
-.fe6sta
+.fä4s
+.fe2i
+.fer4no
+.fe4sta
.fi4le.
.fi4len
.fi2s
-.frau3
-.fs2
-.fus2
+.flö8s7se.
+.flö8s7sen.
+.flö8sses
+.fs4
.fu2sc
-.g6
-.gang5
.ga2t
.gd2
-.gel2d
.ge5nar
.ge3ne
.ge3r2a
.ge3r2e
-.ge5s4
-.ge7sta
-.ge1u
+.ge3s4
+.get4
+.ge3u
.grif8fes
-.gros2
-.gs2
-.gus2
-.guss3
-.gu4ter
-.h4
-.ha3bi
-.haft5s
-.hal4s
-.hal3te
-.haup4
+.guss1
+.haft3s
+.hal2s
.hau2t1
.he2
+.he3fe
+.her3an
.he3ri
.he6r5inn
-.he5xe
.ho4met
-.i6
-.ia4
-.il3
-.illu5
+.ia2
.im2a
-.in3
+.ima4ge
+.im5m
+.in1
+.in3e
.ink4
-.inu3
-.is4a
-.jor5
-.k4
+.inn2e
+.int6
+.inu1
+.ire3
+.is2a
+.jor3
.ka2b5l
.ka2i
.kamp2
.ka4t3io
.ken6num
-.ker5s
+.ker3s
.ki4e
-.klan4
+.kle2i
+.kopf1
.ks2
-.kü1b
-.l4
-.la3b
-.lat5s
-.le4a
-.lea7se
-.le5ni
+.kus2
+.le4ar
+.li2f
.lo4g3in
.lo3ver
+.lö4s3s
.lu4str
-.m4
.ma3d
-.ma3ge
-.ma3le
+.ma2i
+.ma3la
.ma4str
-.me3l4a
-.me3ne
+.md2
+.me2e
+.mel2a
+.men8schl
.men8schw
-.ment2
-.mi2sc
-.mi4t
-.n4
-.näs1c
-.nich2
+.men3t4
+.mi2t
+.mm2
+.näs5c
.ni4e
-.ni3ka
.nob4
.no2c
-.no2th
+.no2s
+.no4th
.nul2
-.nus6
-.o6
+.nus2
.ob1a
.obe2
-.oben3
-.ober3i
-.ob3l
+.ohr5s
+.om2a
.oper4
.or2a
-.ort4
+.ort2
.orts3e
+.ort4st
.oste2
-.ost7ende
-.oste6r5e
+.ost5end
+.osten8de
+.oste6re
.ost3r
.ozo4
-.ö6
-.p6
-.pa6r1e
+.pa4r1e
.par3t4h
-.pat4s
-.pe5la
-.pf6
+.pf4
.ph4
.poka2
.po4str
.ps2
-.pu3s
-.r4
-.reb5s2
+.ra4s3s
+.reb3s2
.re3cha
.rein4t
.reli1
.reli3e
-.rich5t6e
-.ro3be
-.ro2h
-.ro3m
-.rom4a
-.rö4s1c
-.rut2
-.ru3th
+.ri2as
+.richt6e
+.ro4a
+.ro3m4a
+.rö2s1c
+.ru5s6ses
.rü1b
-.s6
-.sa2c
+.rücker6
+.rü4ss
.sali1
+.sas2
+.sa5sse
+.säs4
+.sä5ss
.sch4
.sen3s
.ser2u
-.se2t
+.se2t1
.sha2
-.si2e
.sim3p4
.si2te
.ski1e
-.spra2
-.st6
+.spas4
+.spä5s4
+.spiege8lei
+.st4
.sto4re
-.t6
-.ta5ge4s
-.ta3mi
-.tan6k5l
+.sucher6
+.tal2e
+.tan4k3l
.ta2to
.te2e
-.tehe3
+.te2f
.te3no
-.te6ster
.th4
-.ti4a
+.ti2a
+.tid1
.ti2s
-.to2n
-.to4ni
+.tite4
+.to4nin
.to4pl
.to2w
+.tras3
+.tra4ss
.tri3e4s
.ts2
-.tu3ra
.tu3ri
-.u6
.uf2e2
+.ufer1
.ul4mei
.um3
.umo2
.un3a2
.un3d
.un3e
-.unen2
.un3g
-.uni4t
+.uni2t
.ur1
-.urin4
+.ur2i
+.urin4s
.ur3o2m
.uro2p
.ur3s2
.ut2a
.ut3r
-.ü2
-.v2
+.übe4
.ve5n2e
-.ve4r
.vo4r
-.w2
-.wah2
.wah4l
-.wa5re
-.we2
-.welt3
+.wa2s
+.weg5s
+.wei4ta
.wi4e
.wor2
-.wor6t5en
-.wun4sc
-.x4
+.wort5en6
.xe3
-.y4
.ya4l
-.z2
-.zah2n
+.zeit3s
.zi2e
.zin4st
-.zuch2
-6a.
2aa
a1ab
aa2be
aa1c
aa2gr
-aale5ne
-aa4lö
-a1a2n
+4a1a2n
+4a2ar
aa2r1a
-aa5re
aar3f4
-aar3k4
aart4
-aar3tr
-aas3t
-aat6s3
+aas1t
+aat4s1
a3au
a1ä
+a1b
2aba
-ab2am
-ab1ar
ab1auf
ab1ä
ab2äu
-3abd
-a1be
+1abd
ab1eb
abe1e
ab1eil
-4a3bel
+2abel
abe2la
-2aber
+2a3ber
ab1erk
ab1err
ab1erz
ab3esse
+abes2t
ab1eß
2abet
2abew
@@ -370,330 +364,337 @@ ab1eß
2abi
ab1ins
ab1ir
-ab1iso
ab1it
1abk
-ab3l
-1a2b5la
-3a2b5lä
+ab1l
+1a2bla
+ab5lag
+1a2blä
2able
ab4le.
-ab5li
-a3blis
-3a2b5lö
+ab3li
+ab4lo
+3a2blö
a2blu
-3abn
+abma3s
+1abn
2abo
a2bo.
-ab4of
+ab2of
3a2bon
ab3r
-ab5re
-1abs
-2abs.
+a3bra
+a4brä
+2abrü
abs2a
-2absar
-ab5s2i
-ab5sp
-abs4t6
-2abst.
-ab7sta
-ab7ste
+1absc
+ab3s2i
+1ab3sp
+abs4t4
+1absta
ab3sz
1abtei
-2a1bu
-ab3ur
+2abu
+ab1ur
2abü
-ab5üb
-3abw
+1abw
2aby
1abz
2ac.
-a2ce.
+2aca
+2ac1c
a1cem
-a3cet
+2ach.
ach1a
-ach3ak
-a3chal
+a1chal
ach3au
+2achb
a1che
a2ch1e2c
ach1ei
-a3chen
-a3cher.
a4cherf
-ach3erw
-a3ches
+a4cherk
+a4cherö
+a4ch3erw
4achf
a1chi
-ach5l
-ach5m
+ach3l
+ach3m
ach3n
a1cho
a3cho.
-ach1o4b
+ach1o2b
ach1or
-ach1ö
+ach3ö
ach3r
-ach3spr
ach3su
a4cht
-ach6t5erg
-ach4th
+acht5erg
ach2t1o
+ach8traum
+ach8träume.
+ach8träumen.
+ach6trit
a1chu
ach1u2f
ach3ü
-4achv
-2ach3w
+2achv
+4ach1w
+a1ci
ac1in
-4ack.
+2ack.
ack2en
-ackmu6
+ackmu4
ackmus3
ack2se
ack3sl
-ack7sta4
+ack3sta4
+a1cl
a3co
acon4n
2acu
a1ç
-2a1d
-4ad.
-ada1b
-a4d1ac
-ad1ama
+a1d
+2ada.
+a3d2ab
+ad2ag
+adai4
+ad3ama
a2d1an
-3a4d5ap
-a3dar
-3a2dä
-ade4al
+3a4dap
+a3d2ar3
+4adav
+1a2dä
+ad1c
+1add
+2ade.
+ade2al
adefi4
-ad1ein
-ade1ra
-4ades4
+a2dein
+2aden
+ade1r2a
+a2deri
+4ades2
ade3sp
ades6s
-4adi
+2adf
+2adh
+4a3di
adi3en
+5adj
+2ado
ad2ob
-a2dr
-ad5rah
-4ad3rec
+2adp
+2adq
+2ad3rec
ad4res
-ad5ru
-ads2
-ad3sä
-ad3sp
+ad3ru
+2ads2
ad3sz
-ad2t1
-adt3a
-2ae
-a1e2b
-a1ec
-a1e2d
-a1ei
-a1el.
+2ad2t1
+2adu
+2a1e1
+ae2b
+ae2d
+ae2i
+a2ek
+a2ela
a2ele
-a2eli
-a1els
-a1em
ae2o3
-a1e2p
-ae1r
+ae2p
3a2er2o
-a3estri
-a1e2x
-a2f1a
-a3fah
-a3fal
-af3an
-a3f2ar
-a3fat
+a2et
+a2ew
+ae2x
+af1a
+a2fak
+a2fan
+a3far
+af4at
+a2fau
2afe
a2f1ec
a2fent
af1erl
-af4f5l
+a2fex
+af2fl
+af4flu
2afi
2af3l
+a2fö
af3ra
af3rä
af3re
af3rö
-af3ru
af3s2a
af2sp
-afs2t
af2t1a
+af2tei
af4t3erl
af2t3r
aft5re
af2tur
-a2f1ur
+a2f3ur
a1g
-4aga
-ag1a2b
-ag3a2d
+2aga
+ag1ab
+ag1a2d
ag1ar
ag1au
-ag2d
-a2gem
-a5gen.
+ag2di
+ag2dr
+ag2du
+age1i
age4na
+age4neb
a2gent
-age2nu
-age2se
+a4gentu
+age4ral
+2ages
+age2sa
+age4sel
age4si
-age4s3p
+age2s3p
ages5s
-a4g5esse
+ag3esse
+age6stem
ag3gl
-2agi
+1aggr
3a2git
-4a2g3l
+2a2gl
ag4la
-ag4lei
-ag5lo
a4glö
-ag1lu
-ag4n
-a4g5na
-a5gnat
-a2go
-a3gob
-a5gon.
-a5gons
-a3gor
+ag2n
+ag4ne.
+ag4nu
a2g3re
a2g3ri
ag4ro
-a3gru
-ag4s
agsa2
-ag7sat
-ag5säu
-ag6s3p
-ag7spi
-ag5sta
-ag5ste
-a2g1und
+ag4sam
+ag3sc
+ags3p
+ag6spo
+ag4sti
+ag2str
+2agt
+ag2th
+a2gund
2ah.
2a1ha
ah4at
2a1he
a2h1erh
-a1hi
-ahl5a2
-ahl1ei
+a1h2i
+ahin3
+ahl3a2
+ah4l1ei
ah4l3erh
-ahl1o
-ah4lö
+ah2lö
ahl3sz
-ah3ma
-ah3me
-ah4n3a
-ahn5th
-ah1os
-a2h1ö
+ah4n1a
+ah2nä
+ahner4e
+ahnt2
+1ahor
+ah1o2s
+a2h3ö
ahr1a
-ah3re
-ah4rei
-ah1ri
+ah3r2e
+ahre4s3
+ah3ri
+ahrta4
+ahr4tri
2ah2s
-aht3sp
+aht1s
a1hu
ah1w
a1hy
2ai
-ai1a
-aib3l
+aian3
+aid4s
aids1t
-ai1er
+ai1e2
aif2
ai3g4
-a1ik.
+a3ik.
+ai3ke
ai3ku
ai2lo
a1ind
-ai3n4e
+ain4e
a1ing
ain3sp
-ai2nu
-ai3o
ai2sa
a3isch.
ai3s2e
-ai5se.
-ais4se
+aiso2
+aiss2
+ais3sen
ais5st
-a2it
a3iv.
+aive3
a3ivl
a3ivs
a1j
2ak.
-a2kad
+1a2k4ad
+2akal
2a3kam
2akar
ak4at
-aka4ta
+1a2kaz
2akb
2akc
2akd
4a1ke
a2kef
-a2kes
+aken2n
a2keu
-4a1ki
+2a1ki
2ak3l
-ak4la
ak4li
-ak3n
4ako
2a1kr
ak3rau
-ak3res
+3akro3
2aks
ak3sh
2akta
-akt2an
2aktb
ak3te
ak4tei
2aktik
-akt2o
-ak4t5r
-ak5t6ri
+ak2t3r
+ak3t4ri
2aktst
-a1ku
+2a1ku
a2kun
4a3kü
1akz
-al1ab
-a1lac
-ala5ch
+a1la
+2ala.
+ala5ch2
al1af
-ala4g
+ala2g
al1age
-a3l2al
-a1lala
-al3all
+a3lal
al1am
-al5amp
+alami5
+al3amp
al1ana
-al1ang
+a2l1ang
al1ans
-al3anz
+al1anz
a2lar
a3lar.
a3lare
-a3lari
al2arm
al3arr
-ala4s
-al3asi
-al3ass
+ala2s
+al1asi
+al1ass
+2alat
al1au
al3aug
a1lä
@@ -702,671 +703,693 @@ alb3ein
alb3eis
al4berh
al4b3erw
-al2b3l
+al2b1l
+alb3li
al2boh
al2br
alb3ru
-al2da
+alb3s
al2dä
-al3dri
+al2dr
al3du
2ale
3a2l1e2b
3a2l1ef
a4l1eh
a2l1ei
-a4lein
+a4l3ein
a2l1el
-ale2n
+alen1
al3ends
a2leng
-al2ent
-a2le2p
+ale2p
al1epo
-4a5ler.
a2l1erf
a2l1erh
-a2l1erl
+al1erl
+3alerm
a2l1ert
3a2lerz
a2l1esk
ale4t
-al3eta
-al3eth
-a4l1eu
-3alex
+al1eta
+al1eth
+a2l1eu
+a4leur
+3a2lex
+alf4r
+3algi
al2gli
1algo
2ali
-ali4e3ne
+ali4ene
+al2imb
ali4nal
-ali5ne
-a2l1ins
+al1ins
a2linv
-al2k1ar
+alk1ar
1alkoh
-alk5s2
-al2lan
-al2l3a6r
-al4län
+alk3s2
+al2lab
+al2l3a4r
+al2lau
al4lec
al3lend
all5erfa
al3les
alli5er.
alli7ers.
-2allo
-a2l1ob
-2alog
+al2lob
+3almb
+2alo
+a2l1o2b
alo2ga
al1ope
al1orc
-al1ö
+a2l1ö
al2ös
3alpe.
1alph
al3skl
-al3sp
al4spal
-al2ta
+al2sum
+al3sun
+al2tak
alt3eig
-al2te4l
al3ter
al4t3erf
al2tö
+al2tre
al2tri
alt3ric
al2tro
+alt2se
alt4stü
-3alty
a1lu
al2uf
a2lum
+al1umb
al1ur
4aly
-am2a
+alzer4z
+al2zw
+2am.
+2am2a
amab4
-ama5d
+amad2
+ama3g
+2amä
+2ambiq
am4e
-4ame.
+2ame.
a2meb
-ame2n
+ame2n1
amer2a
a2meri
-a4mese
-a5met
+ame3ru
+a4mesh
+a3met
a2mew
+a3mi.
a3mie
-a3mil
2a3mir
-amit2a
-ami3te
+a3mis
+ami3t2a
+ami3ti
+2aml
am2mac
2ammal
+am2mei
am2min
+2amml
am4mod
am2mus
-2amo
+ammu2t
a2mö
-amp2f3a2
+amp2fa2
am3pr
2ams
-am3sa
-am4sc
-am3so
+am4schl
1amt.
am2t1a
am2t1ä
am2tel
am4t3ern
-am2to
am2tö
am2t3r
am2tu
-4amu
-am3unt
-4ana.
+2amu
+2ana.
2anab
ana3c
-a3na3d
anadi3
a3nak
+an1alg
+ana4lin
+2anam
2anan
-an3ara
2anas
-2anat
an1äs
1anb
-an3cht
-4and.
-an5de6s
+2anbu
+an3ch
+2and.
+an3dac
+and4art
+ande4sc
an2dex
-2ando
-an4d5rü
+an2d3rü
and4sas
+and6spas
and6s5paß
-an2d1ur
-4ane
+and2su
+2andu
+and1ur
+2ane
an3ec
a3nee
+an2ei.
an3eif
-an1e2k
-5a4n1erb
-an3eth
-1anfä
-anft5s
+an1e4k
+3a4n1erb
+an1eth
+1anf
+2anfi
+anft3s
+an3f2u
4ang.
+1anga
3angeb
-an4g5ei
-ang5erl
-ang5erz
+an2g1ei
+an4g3erf
+an4g3erl
+an4g3erz
2angf
2angh
2angie
-ang3l
+ang1l
an2gla
-an2glä
-ang5le.
2ango
-ang3ra
-1angri
+ang1r
+an2g3ra
4angs.
+ang3sc
ang6s3po
-4a3ni
-ani3els
+1anh
+2a3ni
+an2id
ani5ers.
-5a4nim
-4anj
+3a4nim
+a4nins
+2anj
2ank.
an2k1an
-an3k4l
+an2kei
+an3kl
an4klö
an2k3no
-an2k1r
-ank3ra
-ank3rä
-ank5ti
+ank1r
+an2k3ra
+an2k3rä
+ankt4
an2ky
-3anl
+1anl
+anma3s2
2anmu
2ann
3an3na
3annä
-an5n4e
-an3od
-an1or
+an3n2e
+an1od
+a3nol
+a2n1or
+a3nos
a1nö
-3anr
-anrö5
-2ans.
-3ansä
+1anr
+1ansä
1ansc
-an3s2en
+ans2en
an2seu
+2ansh
2ansk
an3skr
-an2s1pa
+ans1pa
1anspr
-an5s2te
+ans2te
an3s2z
2ant.
-ant2a
an2t3a4r
1antá
1antei
3antenn
-an3th
-ant2he
+an3t4he
1anthr
2anto
+anton4
3antr
+ant3rin
an2tro
-3antw
-4a3nu
-a4nunt
-a5nus
+1antw
+2a1nu
+anu3s
a1nü
1anw
2anwet
-2anz
-3anzah
-3anzei
-anz5erst
-4anzg
+2anzb
+1anzei
+2anzes
+2anzg
an2z1i4n
-3anzu
-3anzü
-an2zw
+2anzs
+1anzü
+2anzw
+an2zwi
+2ao
ao1i4
a1op
a1or
-a1o2s
-aot4
+a1os
+ao3t2
a3ot.
-ao3ts
a1ö
a1p
2ap.
-4apa
+2a3pa
2ape
-3a2pé
+a2pef
+a3pel
+a2pé
+a2pf
ap2fa
a3pfl
a3phä
-ap1hel
-2a2p3l
+a2pht
+2ap3l
ap2n
a2pot
-ap3pl
+3appl
+ap3pu
2apr
-2apu
+2a3pu
+2aq
2ar.
-2a1ra
+a1ra
a3ra.
-ar2a1b4
+ar2ab
ar3abt
ara3d2
a2r3al
-ar1ang
-ar1ans
-ar3anz
+a3ra3li
+a2r1ang
+a2r1ans
+a2r1anz
a2r3app
+2a2rar
a2r1au
a1rä
+1arb
2arb.
4arba
ar2bau
ar2bec
-arb3eie
-arb3eim
2arben
2arbi
-ar2b5l
+ar2bl
2arbr
ar2bre
2arbs2
-arb5se
-arb3sp
2arbt
2arbu
ar2b3un
-ar1c
-1archi
-ar2dr
+1ar1c
+ar2dro
2are
-4are.
a2rea
-are5b
-a2ref
ar1eff
-are3g
+a4reg
+a2reh
ar1ehr
a2rein
-a5ren
-a2rena
-a2rene
+a4rek
+a3ren
+aren4se
are3r2a
-a3r2erf
+ar2erf
a2r1erh
a2reri
+a2rerl
are3u
ar2ew
2arf
-ar2f1r
-arf3ra
+arf1r
+ar2f3ra
ar2gl
ar2gn
2arh
-4a1ri
+2ari
ar2ia
-ari3e2n
-arien3e
+ari3e4n
ari3erd
ari3erg
-a2r1im
-ar1ind
-ar1ins
+ari5ers.
+ar1im
+arin3it
ar1int
a3riu
-2ark
+ar2kal
ark3amt
ar2k1ar
ark3aue
-ar2kl
ark3lag
ar2kor
-ark1r
ar4kri
arks4
ark3sa
ark3sh
-ar4les
-2arma
+ar2les
arm2ä
-arm2or
-2arn
-ar5n2e
-4a1ro
+ar4merk
+ar3m2or
+ar2nan
+arn2e
+2a1ro
ar1ob
-ar3o2d
-a3rodo
-a3rol
+a2r1o2d
a2r1op
a2ror
-2arp
-ar5pr
2arr
-4arr.
ar2r3ad
-arre4n
+arre4n3
ar2rh
arr3he
-2ars
+2arsa
ar4schl
-ar4schr
-ar3se
+arse3
ar3s2h
-ars3k
-ar2tau
-1artd
-ar4t3erl
-art2ho
+2arsi
+ar3t2e
+ar2the
+art2i
artin2
2arto
-ar2t3r
-ar3tres
-4arts
-2a1ru
-ar1ums
-ar3ü
+art3r
+ar4tram
+2arts
+2aru
+ar1uh
+ar1um
+a2rü
2arv
+arwa2
2ary
ar2zä
2arze
-1arzn
1arzt
ar2z1w
-2as
-as2a
-as3ab
as1ala
-a4s3au
-asaus1
-a2s1ä
+asas2
+asa3sse
+as3au
+asau2s1
+as1ä
a2sca
+a3sche
a4schec
+a3schi
asch3la
a2schm
-4a3se
+a3schu
+4a3s2e
a4seb
-ase3le
-aseli5
-a4s1e2m
-a5s2en
-as2er
-a5s2es
+as3e2m
a4sex
4ash
-a3s2hi
-a5si.
-4a5sis
+a4s3ha
+as4hi
+asin2g
+2a5sis
asi4st
a3skop
-as3m
-aso1
+a4s3l
+a4sn
+a1so1
as1o2f
a3sol
-a3som
as1or
-a2s1ö
-a2s1p
+as1p
as3pan
-as3pe
-as2ph
+a4s2ph
+as2pi
+a4spl
as2po
-as2pu
-as3s4a
-as4sä
-as3se
-as4sei
-asse3le
+a1spu
+as3s2a
+ass2e
+as2s3ei
+as3sel
+as3ser
+asserma6
as3s2i
-as3so
as2s1p
as4st
-as6s1to
+ass1ti
+ass1to
as5str
-4asta
-as2te
-as3tec
+as5stu
+2asta
+a3stä
a4s3tep
-as4ti
-as2to
-4as2tr
-ast3rau
-a4st3rä
-a4st3re
+as2ter
+2astr
+as4trau
+a4s2t3rä
+a2s2t3re
a4strol
a2stum
a3su
-a2sü
-3asy
+a4sw
+aswa2s
+3a2syl
aße2
+aßen3
2a1t
-4ata
-a2t1ab
-ata2be
+at1ab
at2a1f
-at4a5g
-at1akt
-ata1la
+at4ag
+a2t1akt
+ata3l
a3tam
at1apf
-a5tas
-a2t1au2
-a5tau.
-at1än
+at1au
+a2taus
+a2t1ä
at2c
-4ate
+at2e
+4ate.
a2teb
-at1eig
+at3eig
a4teli
+4aten
a2tep
-a2tew
-4atf
-4atg
-at2he
-5athl
-a4thr
+ate2ru
+4ates
+atex3
+at2h
+at3ha
+4athe1
+3athl
4a3ti
-at1int
+atingma5
3atm
4atmus
-a3to.
ato4man
+4ator
a2t1ort
a2t1ö
-4atp
4atr
atra4t
at3rä
at3re
at3rom
-at2s
-at3sc
-at5sche
-at5schü
-ats1e
+at2sa
+at4schn
+at2se
at4set
-ats1in
+at2si
ats1p
-at4st
-at5stä
-3attac
+at3ta
+at4tak
att3ang
-at2t1au
+at4tau
at2tei
-at5thä
-atts4
+at3t4hä
+at2t3rä
+att3s4
at3tu
-4atu
-a3tub
-atu4n
-atu3ren
-atu4rer
-at3w
+atu2n
atz1er
+at4zerk
+at4zerw
at2z1i
-atzt2
-atz3th
+at2zo
+atz3t2
+at2z1w
a2u
2au.
-au1a2
+2au1a2
2aub
-au2bl
-au2bri
+au2bli
+au2blo
4auc
-auch4se
auch3ta
-au3di
au2dr
2aue
aue2b
-aue3re
+au3en.
+au2ere
au5erein
-au5erl
-aue2s
-au3et
au2fa
auf1an
2aufe.
2aufeh
auf1er
-au5fer.
+au4ferk
+auff4
3aufn
-au2fo
2aug
-au3g6e
4augeh
-2auh
-2au1i
+au3ha
+4au1i
au2is
-4auj
-au2kl
+2auj
aule2s
-aul3ese
au3lü
4aum
au2mal
-au2mar
-au2mau
-au2mer
au2m1o
aum3p2
-aum5str
-aum3sz
-4au3n2
-au4nio
-aun3k
-aun3s
+aum3s2
+4aun
+au3n4a
+aun2e
+au2nio
+au1nu
a4unz
-au1o
-aup2
+2aup2
+aup4ter
2au3r2
au2s1ah
ausan8ne.
-2au2sc
-au3schl
-au3schw
+au2sau
+2ausc
+au4schm
+au4scho
+1ausd
aus3erp
au4s3erw
+1ausf
+1ausg
+1ausl
au2so
-au2sp
-auss4
-aus7sa
+au2spr
+1ausr
+auss2
3aussag
+au3sse
aus4se.
-aus3so
-au4st
-au6stec
+au8ssende
+au2sta
+au4stec
+auster6m
aus3tie
aus3tri
+1ausü
+1ausz
+au3ß
+a4ut
2aut.
-au3tan
-au2tä
-aut1äu
+au2t1äu
2aute
+au4ten4g
au4t3erh
-au3tes
3auto
2auts
-aut5st
+2auu
+2auw
2aux
+2auz
auz2w
2a1ü
2a1v
-av4a
-ava3t
+a3v4a
+ava3t4
+4a3vi
a2vr
av2s
2a1w
-awi3e
+awi3
+awi1e
a1x
ax2am
ax2e
-axi4s
+axi2s
2a1ya
a1yeu
-aysi1e
+aysi1
+ay3t
2a1z
-az4a
-azo3
+az2a3
+az2o
az2u
ä1a
ä1b
+ä5be
ä2b3l
äb2s
ä1che
äche1e
+ächenma5
+ächenmas8
ä1chi
äch3l
ä2chr
äch2sp
ä1chu
+äck2e
ä1d
ä2da
ä2d1ia
-ä2d3r
+ä2dr
äd2s
2ä1e
äf2fl
-äf5l
+äf3l
äf3r
äf2s
+äft2
äft4s
ä1g
+ä5ge
äge1i
ä2g3l
-ä3g2n
+äg2n
ä2g3r
-äg4s2
-äg5sa
-äg5ste
-äg5str
+äg4ra
+äg2s2
+äg3sc
+äg3str
1ä2gy
äh1a
2ä3he
ä3hi
ähl1a
-äh5l2e
-äh6l3e4be
-äh3li
+ähl2e
+äh4l3e4be
2ähm
-äh5ne
-äh5ri
+äh3ne
+äh3ri
2äh2s
-2äht4
-äh3tr
+2äh3t4
ä1hu
äh1w
ä1im
@@ -1380,40 +1403,39 @@ az2u
ä1la
älbe2
äl2bl
-äle3ru
+ä5le
äl2l1a
äl2p3
-äl2s
-äl3se
+äl4schl
ä1lu
-ä3me
ämi3en
2äml
äm4ma
äm2s
ämt2e
2än.
+än5de
än2dr
2äne
äne2n1
-än2f3
+än2f5
2änge
än2gl
än2gr
-äng5se
-äng5ste
+äng3se
2ä3ni
-än5k2e
+änk2e
än2k3l
än2kr
-än5n4e2
+än3n4e2
2äns
-än4s1c
+än2s1c
änse3h
ä1on
ä1pa
+äp2pl
äp2pr
-äp4s1c
+äp2s1c
1äq
ä2r3a2
är4af
@@ -1422,265 +1444,267 @@ az2u
4äre
ä2r1ei
äre2n
-ä2r3ene
+ä2r1ene
är2gr
-ä1ri
är1int
-är2k5l
-ärme5s
+är2k3l
+är4ment
+ärme3s
är1o2
ä1rö
ärse2
är2seb
-är4si
+är2si
ärt4e
+är2th
ärt4s3
-ä1ru
-är3ü
-är2z1w
-äs2a
-ä3s4e
-äse3g
-äse3re
+ä2rü
+1ärz
+är2zw
+ä3s
+äs4c
+äs4e
+äse3g2
äser4ei
äse4ren
-äse3r2i
+äser2i
äse3t
-ä3si
+ä5si
+ä4sko
äskop2
-ä3s2kr
-ä2s1p
+äskopf3
+äs2kr
+ä4sl
+ä4s1p
+äs2s
äs4s1c
-äs3se
-äs4s3erk
-äs6st
+äss2e
+äss3erk
+äs4s1t
+äst2
äs2te
ä4str
-ä3su
+ä4sw
ä1ß
äß1erk
-2ät
-ä2t3a2
+ä2t1a2
ä3te
-äte1i
+ät2e1i
+ätein2
äte2n
-ä2th
-ät2ha
+ä2t2h
ä1ti
ä1to
ät1ob
ät3r
+ät2sa
ät2sä
ät4schl
ät4schr
-äts1ei
ät2s1i
äts3l
-ät3so
äts1p
-ät4st
-äts3te
+ät2s1t
+ät4s3te
+ät4sti
ät2tr
ä1tu
-ät5ze
+ät2zw
äu2br
äu1c
+äude3
äu3el
ä2uf
äuf2e
-äug3l
+1äug
+äu4g3l
2äul
2äum
äu2ma
-äum4s
-äums1p
-ä2u3n2
-2äu5r
+äum2s1
+ä2un
+äun2e
+äu1nu
+2äur
+äu1s
2ä3us.
-äu2sc
+äu4schä
äu4schm
äu3se
-ä1usg
-ä1usk
-ä1usn
+ä3usg
+ä3usk
+ä3usn
äu2sp
-äus4s1c
+äu3s2s
+äuss1c
1äuß
äu2tr
4ä1v
1äx
ä1z
â1t
-4b.
-1ba
-2babs
-ba3char
+á1n
+ba2bl
+2b1abs
bach7t4e
backs4
-2b3adr
-2baf
-3bah
+b1a2dr
+2b1af
bah2nu
-bah5re
-bai1
bais2
ba2ka
-ba2k3er
+ba2k1er
ba2k1i
-bak5l
+bak1l
+bak1r
ba2kra
3bal
-ba1la
+bal2a
+bal2lä
+bal4leb
bal4leh
bal6lerg
-bal6lig
+bal4lig
bal3th
2b1am
ban2a
3b2and
ban2dr
-ba3n4e
-ba5ner
-2bang
+ba3n2e
+b1ang
ban2k1a
ban4kl
+ban2kr
2banl
2b1ans
-b3anz
-ba2ran
+ban3t
+b1anz
bar3b
-b2ard
bar3de
ba2rei
-ba3r2en
+bar2en
+bar3n
bar3zw
3bas
-ba7sa
+ba3s2a
ba2sc
-ba6str
-ba2to
-ba3tor
-bau3b
+ba2str
bau3g
bau3s2k
bau3sp
-bau5str
ba1yo
3b2äc
bä1ch
-1bäe
-1b2är
-1b2äs
-1bäu
-b1äug
-bäu3s
+b2är
+b2ä4s3
4b1b
-b5ba
-bbau3sc
+b3be
bbe4p
-b5bi
-bb5ler
-b2bli
-bb3lin
-b3blo
-b3blö
-bbru2
+bb3ler
+bb2lö
+bbru2c
bb2s
bbu1
-2b5c
-2b5d
-bdu3s
-1be.
-3be3a
-be5an
-be4au.
+2b1c
+2b3d4
+3be.
+3bea
+be3an
+be3ar
+be3as
+3beb
b2ebe
1bec
be1ch
be2del
bedi4
be1eh
+be2erk
be1erl
-be3eta
-3bef
-be3g4
-2beier
+be1eta
+3bef4
+be3g2
+2b1eier
bei1f4
+beik4
beil2
bei3la
-2beime
-3b2ein
-bei5na
+2b1eime
+b2ein
be1ind
-be1in4h
-bei3sc
-beis2e
-bei5st
+be1in2h
+bei3s2
beit2s
3bek
+3bel
be3las
-be5le
be3lec
be3lei
-be6l1en
-be6let
+be2l1en
+be2let
be3li
-bel5la
-bel5li
-bel3sp
+bel3la
+bel3li
bel3sz
-belt4
-bel3ta
-bel3tr
+bel3t4
1bem
+bema5sse
+bemas8sen
1ben.
-be4na
ben3ar
-be3ne
-ben4erg
-be4nerl
-be4ners
-ben3g
-be3ni
+ben3dor
+be3nei
+3ben3g
+be3n2i
+ben3n
ben2se
-ben2sp
+ben4spa
+ben4spr
+benst4
ben2su
-ben4th
-3b2enti
+2bentb
+b2enti
+bent4r
b1ents
-4bentw
-ben1un
+2bentw
+ben3un
ben3z2
be1o
be1ra
ber3am
be2ran
-ber3as
-berd4
-ber3eiw
-be3rel
+beras4
+ber4ei.
+be4r3eiw
+be4rerk
bere4s
-ber3esc
+ber6gan.
+bergeschos8
+bergescho7sse
ber4in.
ber3iss
+berma7sse
+bermas8se.
+berma8ssen
ber3na
b1ernt
be1rop
-ber5st4a
-ber3th
+berö4
+ber3st4a
be3rum
-1be3s
-be4s1er
-be4sk
+3bes
+bes2a
+besä5s
+be2s1er
be5slo
-bes5s4e
+bes2po
+bess4e
b3esst.
bes3sz
-bes2t
+be6stein
be4s3tol
be4stor
-be4sum
-be1s2ze
+be3s2ze
3bet
be2tap
be3tha
@@ -1690,105 +1714,112 @@ be1ur
1bez
2b5f4
bfal2
-bfrä5
-4b5g4
-bga4s1
-bgas3t
+bflö4
+bflös3
+2b1g2
+bgas1
+bga4st
bge3
-bge5n
-bge5s
-2b5h
+bges2
+2b5h2
+bhut2
1bi
-bi1ak
-bibe4
-bi2e
-bi3ens
-bi3ent
-bi3k2a
+bi3ak
+bib2
+bibe2
+bie4str
+bik2a
bi2ke.
bi2kes
-bi3ki
-3b2il
-bil4a
-4b3illu
+3bil
+bil2a
+bi2lau
+4b1illu
bi2lu
2b1inb
-bi3n2e
+bin2e
2b1inf
-2b3int
-bi2o3
+bin3gl
+2b1int
+bi2o1
+bio3d
bi3on
biri1
bi3se
+b1iso
bi2sol
+bi2sp
bis4s1c
-bi2s1t
-bi4stü
-bi2t
-b2i3ta
-bi3te
-bi3ti
-bi3to
-bi3tr
-bit5st
-2bitu
+bis3si
+bi2stu
+bi2stü
+b2it.
+b2ita
+b2ite
+bi2tu
bi3tum
b2i3tus
biz2
-bi3za
-4b3j
+4b1j
bjek4to
-2b5k2
-b2l2
+2b1k4
+bl2
2bl.
-b4la.
bla3b6
-4b5lad
-b6lanc
-6blasser
-b6latt
-b3law
-1ble.
+b3lad
+b2lanc
+3blat
+b2latt
+2b3law
+b2le
3ble2a
b3leb
-2b5leg
-b3leh
+2b3leg
2b3leid
-b5lein
-ble3l
-1b4lem
-b4ler
-b5lese
+b3lein
+3blem
+3blen
+b3lese
ble3sz
-3b4let
-2b3lich
+b4let
+b3leu
+2blich
3blick
-b4lie
-2b3lis
-b4lit
-3b6litz
-1b4lo
-b6loc
-b5lok
-2b3lun
+b2lie
+2blig
+bling4
+b3lis
+b2lit
+3blitz
+b2lo
+b4loc
+b3los2
+blo3sse
+blös4s
+2blun
+3blut
3blü
-2b5m
-4b5n2
-bni4
+2b1m
+bmas2
+4b3n2
+bni2
bnis1
-1bo
+bo4a
bo5as
-bo2b3l
-bo3b4r
-bo3ch2
+b1ob3
+bo2bl
+bo2br
+bo1ch2
bo3d2
-bo2e3i
-2b3of
-bo5fe
+boe1
+bo2ei
+2b1of
+bo3fe
bo1is
bo2l1an
3bon.
-bon2d1e
+bond1
+bon2de
bo2ne
3bons
b1op
@@ -1797,316 +1828,314 @@ bo4rä
bor2d1i
bor2d3r
bo2rei
+bo4rig
b1ort
-bor4tei
bor2t3r
bo2sc
-bo5se
bo4s3p
-3bot
-bote5n4e
+bote3n4e
bo3th
-bot4st
+bot2s3t
+bo2xi
bö2b3
-2b3öf
-bö3sc
-2b5p2
-bpa4g
-2b5q
+2böf
+2b1p2
+bpa2g
+2b1q
b2r4
2br.
b4ra.
2b3rad
b4rah
b4ra3k
-bra5st4
+bra4ss
+brast4
+3brä
+brä4u
2bre.
+3brea
6b5rechte
2b3ref
2breg
b3reif
-b3rek
3brem
2b3rep
-b6rer
+b4rer
2b3riem
bri2er
2brig
b4rio
bro1
-b5roh
+b3roh
2b3rol
+b4ron
b4ruc
-bru6s
-brust1
+bru4s
+brust3
+bru2th
+3brü
+brü4ss
4b1s
-bs3ad
+b2s1ad
b3sand
bs3ar
-b5sat2
+bsas2
+bsa3sse
+bsat2z
b3sä
+b4sär
b5sc
+bs2ca
b6schan
-b7schl
-b3se
-b5se.
+b6schef
+bs4cu
+b3se.
bs1e2b
-bs1ein
-b5sel.
+b3sel.
bs1ele
-bse2n
+bse2n1
+b3sen.
bs1ent
bs1er
+b4serf
bs3e4r3in
-b5ses
-b5set
+b4sers
+b3ses
+b3set
bsi2t
+bs2ku
+b4sl
b2s1of
bs1op
bso2r
b2sö
-bs1par
bs2pl
b3s2pu
-bs3s2
+b4ss2
bs2t
bst1a2b
-bst1ac
+bst3ac
bst1ak
-bst3ank
-b5stä
+b3stä
bs3tät
-bst1er
+bst3er
b4stern
-bst1h
-bs3tip
-b5stra
-b4s3trä
+b2stip
+b3sto
+b4stod
+b3stö
+b3stra
+b2s3trä
bs3treu
-b3stu
-bs3ty
+b3stü
+b4stüb
b2s1un
-bs3w
4b1t
-b5ta
+b3ta
btal3
bta4st3r
-b3tä
b5te
-b2t1h
-bti2s
-b3to
-b5tr
-b5tu
+b2th
+bt4r
+bts2
btü1
-b2u
bu2chi
bu2e3
bu2f
-bu5li
+bu3li
+bul2la
2b3umk
-bu3na
-bunde6s
-bun4th
-b4urg
+bunde4s
+b2urg
bu3r4i
-bu2s
-bus3cha
-bu3se
-bu4s1er
-bus1p
+burt4s
+bu2sa
+bu4s3cha
+bu4schl
+bu4schm
+bu4schw
+bus1er
+bu2sin
+bu2s1p
+bu4sses
bu6sterm
-bu4s1tr
-bus1u
-bu3ße
-1b2ü
+bu2s1tr
+bu2s1u
bü1c
-büge4
bügel3e
-2b3v
-2b5w
-bwa5re
-1by1
+bü3s4
+2b1v
+2b1w
+bwel3
+3by1
by3p
-by2t
-by3th
-2b5z2
-bzei2t1
-2c.
-1c4a
-2ca1b4
+bys2
+2b3z2
+bzeit1
+bzu1
+1ca
+2c1ab
ca1ch
-cae3
-3caf
+ca2e3
ca3g4
ca1h
-3cal
-ca3la
cal3t
-3cam
+c4an
ca2pe
-ca3pel
3car
car3n
carri1
-ca3s4a3
-ca3th
+ca3s2a3
+cas2t
+ca3t4h
ca1y2
-cä3
-4c1c
-cch2
-4cd
-c1do
+cä1
+cäs2
+2cc
+c1ce
+c1ch2
+c2d2
+c3do
2cec
ce2dr
2cef
ce1i
2cek
-3cen
+1cen
cen3g
-cen3ta
-ce3n1u
+ce1nu
1cer
+cere3
ce1ro
-ce5sh
+ce3sh
1cet
-4ceta
-cet3am
-ce3ty
+2ceta
ce1u
1cé
c1f
c4h
4ch.
2chab
-ch3abi
-ch1ah
-ch1ak
+ch3a2bi
+2ch1ak
ch2anb
3chanc
ch1ang
ch3anst
2chanz
1chao
-ch1ap
2char.
-ch3arm.
+1chara
3charta
cha2sc
-chasi1
1chato
+2chatu
ch1ärm
ch1äs
1châ
2chb
-2chc
+6chc
2chd
ch3e4ben
-ch3echt
1chef
3chef.
-che2fe
+che4fer
3chefs
4chei
ch1eim
+4chelem
che4ler
4chents
4chentw
cher3a
che3rei
6chergeb
+cher6zie
ch1ess
-2ch3eta
-ch1ex
+2cheta
+2ch1e4x
1ché
2chf
2chg
2chh
-ch1ia
-1chia.
-1chias
-6chind
+1ch1ia
+chi3na
+4chind
3chines
-ch1inf
-2ch1inh
+2chinf
+2chinh
ch1ins
ch1int
-ch1inv
-3chiru
+2ch1inv
+1chiru
2chj
2chk
-2ch2l2
+2chl2
+ch2le
ch3lein
-2ch2m
-ch4mu
+ch2lu
+4ch2m
2chn4
+chner8ei.
+2chob
cho2f
ch1off
ch1oh
ch1orc
2chp
-ch2r2
+ch2r4
2chre
-chre5s
+chre3s
ch3rh
-3chron
+1chron
4chs
+ch4stal
2cht
-ch5tes
2chuf
2chuh
-2chum
2ch1unf
-chus4si
+2chunt
2chü
2chv
2chw
2chz
-1ci
ci1c
-cil3l
ci2s
c1j
2c4k
ck1a
-ck3aa
-ck3am
ck3an
cka4r1
ck1ä
ck1ehe
-ck3ei
-ck3ense
+ck1ei
ck1ent
+4cker
cke2ra
-cke5reig
+ck2ere
+ck1erh
+ck2ern
ck1err
-cke2s
ck1ese
ck1id
ck1im
ck1in
-ck5l
+ck3l
ck3n
ck1o2
-ck1ö
-ck5r
-ck3spo
-ck5ste
+ck3r
ck4stro
-ck3t2e
-ck3ther
-ck1um
+ckt2e
+ck1um3
ck1up
-3c6l2
+c4l2
clet2
-clo1c
-c2m
+clo1
+1clu
+c2m2
1co
-3coa
-3coc
co1ch
-co2d
+co2d2
co4der.
co3di
coff4
@@ -2114,622 +2143,591 @@ coi2
co1it
co2ke
co2le
-co5l2o
+col2o
com4te.
comtes4
con2ne
co2pe
co1ra
-co4re
-cor5t
+cor3d
+co3re
cos4
-co4st
+co2st
co2te
2cp
c1q
-c4r2
+1c4r2
cre2
cre4mes
cry2
-2cs2
+2c1s2
c2si
-cst4
-2c1t
+4c1t
cte3e
-cti4
-ction5
+cti2
+cti4o
ctur6
-1cu
+3cu
cu2p3
-cup1e
cussi4
1cy
-4d.
+c1z
3da.
da1a
-2dab
+2d1ab
d2abä
da2ben
-3d2a1b4l
-3dac
-dach5a
+3d2abl
+da2bre
+dab4rü
+2d1ac
+dach3a
+dachgeschos8
+dachgescho7sse
da2cho
-4dachse
-3dad
-da2de
-da3dr
-da1er
-2d1af
+4d3achse
+d1af
d1ag
-dagi4o
+dagi2o
dah3l
da1ho
-3d4ai4
+3d4ai2
da1in
da1is
-da1l2a
+dal2a
2d1alar
-dal3b4
-da1lö
-2d1alt
-2d1amma
+dal3b2
+da3lö
+d1alt
+d1amma
2d1ammä
damo3
d2amp
-damp7f8erf
+dampf8erf
2d1amt
d2an.
-2dana
-dan2c
-2d1and
-2d1ang
-3dank
+2d1ana
+dan4ce.
+2d1an3d2
+d1ang
+2dange
dan4kl
-dan4k1o
-dank3r
-2danl
-4d1ans
+dan5kla
+dan2k1o
+dan2kr
+2d1ans
+2dantw
2danw
-d4anz.
+d2anz.
+4danzi
2d1ap
d2aph
4dapp
da2r3a
-2darb6
-dar3bl
+2darb2
3d2arl
dar2ma
dar2m1i
da2ro
-2darr
-2dart
-d1artg
+d3arr
+d2ars
+d1art
da2ru
d2arw
da3s2h
-3dat
-da3ta
-dat2e4
+dat4e2
da3tei
+date4n
4d3atl
4datm
-3dau3e4
+3dau3e
2d1au2f
2d1aus
+4daush
2d1äh
2d1ämt
2d1änd
-2d1äng5
+2d1äng
2d1äp
-2d1ärz
-dä2um
-dä1us
-2d7b
-dbu2
-2d1c
-4d3d2
-ddar4m
-d5de
+2därz
+dä2u
+dä3us
+2d1b4
+dbu2c
+dbu3s2
+2dc
+d1ch
+dco4r
+2d1d2
+ddar2m
+d3dh
+d5do
1de
-de3am
-de3an
+de2ad
de3as
-de5a2t
+de3a2t
de3b4
-4d1e4ben
+2d1e4ben
3dec
de1ch
deco3
de1e2
2d1eff
-deg4
+deg2
+de3gl
dehe2
de3ho
2d1ehr
-2dei
+d1ei
d2eic
3d2e1im
+dein2d
+dein2s
de2l1a4g
-delat5
de4l3aug
-de4l1än
+del1än
del1ec
-de3l2ei
-2delek
+delei4g
+de3lein
+2d1elek
2delem
-de2len
-2d1elfm
-3delik
-del4la
+2delfm
delle2
del4lei
del2lö
de2l1ob
+de2lop
de3lor
de2lö
-del2s1e
+del4san
+del2s5e
del2so
del2s1p
-delt4
-del3ta
-del3te
-del3tr
-de6ments
+del3t4
+dem2ar
2d1emp
d2en.
de4n3end
+4denerg
den3g
+d2enh
de2ni
-den4k5li
-4densem
+den4k3li
+4den4sem
den4sen
den6s5tau
den3th
2dentw
-de2ob
-2deol
+de1nu
de1on
-deo4no
depi4so
d4er.
-de1rad
-de2r3ap
+dera2b
+de2rap
der2bl
-de2r1e2b
+2derdb
+de2re2b
de4reck
der3edi
+derer3
de3r4erb
de3r4erf
de4r3ero
+derer4t
4d3erhöh
-d4eri
-de5ric
-de3rik
-4d3erklä
+3derie
+derin4f
+4derklä
+der3m2
+4derneu
de1ro
de2rop
-d3ersat
-dert2a
-der6t5end
+derö4
+4d3ersat
+der3tau
+der6t5en6d
de3ru
de4ruh
de4rum
-de2s
-de4s3a
-de5sac
-de5säc
+de2s1a
+de3sac
+de4sa4g
+de4sam
+des3an
des1än
-de5sc
-de3se
-des1en
+de4seh
+des1en1
+des1et
des1in
des1o
-des3p
-des5s4
+de2sor
+de2s1p
+des5s2
dest5alt
-de5stang
-de5ste
-de6s3tei
-de5sti
-de7stin
+de4stam
+de6stant
+de4stei
+de4stit
dest5rat
-de5stri
-de5stro
-des1u
-deten6t
-2d3etw
+de3stri
+de3stro
+de2s1u
+deten4t
+2d1etw
de1un
de1url
-de1us
+de3us
de2xis
2dexp
-2d3f
-2d1g
+2d1f4
+2d1g2
+dga4str
d2ge.
-d3gem
+dgeschos8
+dgescho7sse
dge2ta
-dge6t5e
+dge4t1e
d3gl
2d1h2
d2his
-d3hu
1di
-3di.
-di2a
di4ab
+di2ad
di4am
-dia5ne
-di4at
3dic
di1ce
-dich3te
-di2de
di2e
di3e2d
-die5ner
+die4neb
di3eni
di3ens.
-dienst5r
-die4s1c
-die2t5
-dige6s
-di3gn
-di3ka
-dil4s1
+die4s3c
+diet3
+die2th
+dige4s
+dik2a
+dil2s3
2d1imb
din2a
2d1ind
2d1inf
2d1inh
-2d1init
-4dinner
+2d1in1it
+4d3inner
2d1ins
2d1int
-di2o3b
-di3o2d
-di3p
-di2ra
+di2ob
+dion5s
+di1p
di4re.
di2ren
di2ris
2d1irl
+di2sp
2d1isr
-dist4
+dist2
di2ta
di4teng
di4t3erl
di4t3erm
di4t3ers
di2t3r
+dit1s
di2tu
+di5v
diz2
2d1j
2d1k4
-4d1l
-d3l2e
-dle2r3a
-2d5m
-d3me
-4d1n4
-d5ne
+4d1l2
+d3le
+dle2ra
+dli2f
+dl3m
+dl3s
+2d3m2
+4d5n2
dni2
dnis1
-d3no
-3do.
-2dob
-3doba
-d1o2be
+d1ob
+d2oba
+2dobe
dob4l
-3dobr
-3doby
+d2obr
do1chi
-3dog
-do3ha
-3dok
-dol3l2
+2d1o2f
+doll2
do2mar
-3don
do5n4a
doni1
do2o
-4d1opf
+2dope
+2d1opf
d2opp
d2o3r4a
-4dorc
-3dorf
+2dorc
+2dord
dor2f1a
dor2fä
dor2fl
dor2fr
-4d1org
+2d1org
do2rie
d2orp
+2dort
+dor2ta
d2os.
-do3sp
-dos3s4
-dost3
-do6sta
-3dot
-dot4h
+dos3s
+do4sta
+dost1r
+dot6h
do3un
-do1y2
-2dö
-d1öf
-d1öl1
-3dör
-dö4s1c
+d1ö
+dö2l1
+3d2ör
+dö2s1c
2d3p2
2d1q
d2r4
3d4ra.
2d3rad
-d4rah
-2d5rahm
+2drahm
+d3rai
3d4ram
d3rand
-2drast
-2drat
-2drauc
-d3raum
-2d3räd
+2d3rast
+2d3rauc
+2dräd
+d4räh
2d3rät
-2dräu
+2d3räu
4dre.
-d4rea
-d5real
+d4rea.
+d4reas
3d4reck
2dreg
-5dreh
+3d4reh
2d3reic
-d4rein
-drei3t
d4reiv
4drem
4d3ren
-d3rep
+2d3rep
4d3rer
4dres.
d4resc
2d3rh
-d4ria
-2d3ric
-d3rieg
+d3ri
+d4ri.
+3d4ria
+2d5ric
+d4rid
+d4rie
+d5rieg
d4rif
-d3rind
-3drisc
+d4rik
+d4ril
+d4rin.
+3d4risc
2driß
3d4rit
4dritu
-2drob
+d3rob
d3roc
2d3rod
d4roi
-dro3ma
+drom2
2d3rot
d3rou
2d3rov
-drö4s1
-3d4ru
+d3rö
+drö2s1
d5rub
-4d5ruf
-4d5ruh
-4d5rut
-3d4rü
+3d4ruc
+2d3ruh
+drunge3
+2d5rut
drü1b
2d1s
ds3ab
d4s1amt
-d2s3an
+d2san
ds3assi
d2sau2
-d2s1än
+ds1än
4dsb
+d4schef
d4schin
+dsch4r
d2s1e2b
-d3sec
d2s1ef
-d3s2eig
-d2s1ein
+d3sei
+ds2eig
+d4seins
d2s1eng
d2s1ent
d2s1erf
+d2serh
d2s1erk
ds1err
d2s1erz
dse4t
-d4s1eta
+d2s1eta
d3s2ha
-ds3han
d3sho
d2s1im
ds2inf
d3s2kan
d3skul
4dsl
-ds3m
d2s1op
dso2r
ds1ori
d2sö
d2s1par
-d2s1pas
-d2s1pä
-d3s2po
-d4spro
+ds1pa4s
+d2spä
+ds2po
+d2spro
+ds2pu
dss2
-ds5st
+ds3si
dst4
-d4s1tab
+ds1tab
d4s3täti
-d6stea
+d4stea
ds2til
-d5stip
-d4s1tis
+ds2tip
+d2s1tis
d2stod
-d5stre
ds1ums
d2sun
ds2zen
-4dt
-d1ta
-dt3a2d
-d1tä
-d1te
+2d1t
+dta2d
d3tea
-dte5na
-dt3ha
-d1ti
-d1to4
-d1tö
+d2th
+d4thei
+dt3ho
+dto2
dt3r
dtran2
-dts2
-dt3sa
-dt5sc
-dt3sp
-dt5str
-dt3t
-d1tu
-d1tü
+dt5s2
1du
du1alv
du1ar
-du2b3l
-du3e
+dub3l
+du2bli
du2f
2d1ufe
2d1uh
-du1i4
-3dum.
-d1umb
+du1i
+2d1umb
2dumd
-d3u2m1e
+2d1u2m1e
2dumf
2dumg
-4dumk
+2d3umk
2duml
d2ump
2dumr
-2d1ums
-3dums.
-d1umv
-dun3d
+d1ums
+d2ums.
+2d1umv
+2d1un3d
+dund2a
2d1unf
dun3ke
dun2kl
2dunr
2dunt
-du1os
-dup4
+du1o
dur2c
2d1url
-3dus
-du2sc
-du3scha
+2dursa
+du4schn
+du4schr
+du4schw
2düb
3düf
3dün
-3dür
2d1v2
2d1w
-dwa2l
-dwe4s
-dwest1
-dy3n
+dwa2
+dwest3
+dy1
+dy2s1
2d1z
-6e.
2e1a
e3a2b
+eab3l
+ea3der
eadli4
-e2ag4
-ea2ge
+ea2dr
+ea2g4
+ea3ga
+ea4ge
ea3gl
-eakt4
-e2al
-e3al.
-e3alb
+eakt2
+ea2la
e3alei
-e3alf
-e3alg
-e3alk
-e3all
-e3aln
-e3alp
-e3als
-e3alta
-e3alv
-e3alw
-e3alz
-e2am
-eam3a
-e4ame
+e4aler.
+e2ame
eam1o
-eam3to
-eam3tu
+eam3t
ea2na
-e5and
-e4ano
-e3anz
-e2ap
+e2ano
e3ar.
ea2ra
-e3arb
-e4are
-e5a6rene
-e3arm
-e3art
-ea6se.
+e3a4rene
+e3arr
+e3arv
+e2as
eas5s
-ea4st
-e4at.
eat4e2
-eate4r
-e4atl
-e4ats2
-eat3t4
-eatu4
-eau3b
+eater1
+e3ath
+eat3s2
+e3at3t4
e3au2f
e3aug
-e3ä4
-eäng5
+eaus3s
+eau3st
+e1ä4
e1b
2eba
e3b2ak
-eba3ra
+2ebed
ebe2i
-eb4en
-e3beng
-eben4s3e
+2ebel
+eb2en
+ebens3e
2ebet
2ebl
-eb5ler
+eb3ler
eb4leu
-eb3li
e3blie
-eb5lo
+eb3lo
+eb2lö
2eb2o
-ebö4s
+ebö2s
2ebr
-e3bra
eb3rei
+eb4ru
eb2s
eb6sche
-eb4se2
+ebse2
ebs1i
ebs1o
ebs1p
ebs3pa
-eb6stät
-eb4stec
-ebs3tei
-ebs3th
-ebs3ti
-ebs3tot
+eb4stät
+ebs3t2h
+eb4s3ti
+eb4s3tot
+eb3str
ebs1u
e3bu
+ebus3s
ebu2t1
-eb3üb
2eca
e1ce
ech1ä
@@ -2739,106 +2737,114 @@ e6ch5erzi
e1chi
ech3l
ech3m
-ech5n
+ech3n
e2cho.
-ech1o4b
+ech1o2b
e2ch3r
ech3ta
ech3t4ei
e1chu
ech1uh
-ech3w
+ech1w
+e1ci
eci6a
eck3se
2eckt
-2ecl
-e1cr
+2e1cl
+2eco
2ect
e1d
-ed4dr
-ed4e
+e3d2a
+ed2dr
+ed2e
+ede2al
ede4c
e3dei
ede3n2e
eden4se
eden4s3p
ede2r
-ed2ge
-edi4a
+eder3t2
+edi4al
+edma3s2
e3d2o
-e3dö
-ed3s2ä
+ed2ö
+eds2ä
ed2s1es
ed2s1o
ed2s1p
-ed5sta
-ed4s1tr
+ed2s3tr
ed2su
-e3dy
+edu2s
+e3dy3
4ee
-ee5a2
-eeb4l
+ee3a2
+eeb2l
ee2ce
ee1ch
+ee2cho
eede3
-eeds2
+eed3s2
ee1e
-ee3ei
e1eff
-eef5s
-eeg4
-e1ei2
-eei3e
+eef4l
+eeg2
+e1ei
ee1im
-ee3ing
-eei3se
+eein4se
+eei5se
eel2e
-e1elek
+e1e2lek
ee3len
e1emp
e1en
-eena4
+eena2
+ee4nag
e2enä
e2enc
-ee5ni
+ee3ni
e2eno
+een3s
e1e2pi
-e2e1ra
+ee1ra
e1erbt
e1erd
-eerde3c
+eerde3
ee3r2e
-ee4r3eng
-eere4s5
+ee4r3en4g
+eere4s1
ee4ret
-e2e1ro
-ee1r2ö5
-eer3öf
+e1erk
+ee1ro
+ee1rö
+eer2ös
eert2
e1ertr
-e2erü
+ee3r2u
e1erz
-ee5sh
-ee3st
-ee2tat
+ees2
+ee3sh
+ees3k
+ee3ta
+ee4tat
ee2th
ee1u2
+eewa4r
e1e2x
e1f
2ef.
2efa
-e3fab
-ef3ad
-e3fah
+e2f1ad
ef1ana
-ef1ank
-ef1arc
-ef1aus
-ef1äu
+ef1ar
+e2fat
+efäs4
+e2fäu
2efe
+e3fe.
e2f1e2b
-e2f1em
-e4fent
+ef1em
+e2fent
ef2er
2eff.
1effi
@@ -2849,77 +2855,79 @@ e2f1ins
efi2s
1efku
2efl
-e3flu
-e3flü
+e3f4lu
2e3f2o
-e3f4ra
+e3fra
ef3rea
-ef4rie
-ef1rol
+ef3rol
ef3rom
-ef3rot
+ef4rü
efs2
-ef7sc
ef3so
ef3sp
ef2tan
-eft4r
2efu
-ef1um
+e2fum
2efü
e1g
+egd4
e3ge
-ege4n1a
+ege4n3a4
ege2ra
ege4s3to
ege4str
ege1u
-eg3la
-eg4li
-eg3lo
-eg3lu
+eg1la
+e2glo
e2gn
eg3ni
-eg6sal
-egser1
-eg3spe
-egst6
-eg6sto
-2e3gu
+egro5sse
+eg4sal
+eg3se
+eg4sei
+egse4r1
+eg4sto
+eg2th
+2egu
2e1ha
eh1ach
-eh3aka
e3h2al
-eh1ap
eh2aus
-2e3hä
+2e1hä
+ehäs3
e1he
+eh2ec
eh1eff
+eh2el
ehen2t3
1e2hep
+e3her
ehe1ra
-eher4an
-e3h2i
-eh3int
+e1hi
+eh1int
+ehis4
eh1lam
eh1lä
-ehl2e2
+ehle2
ehl3ein
-ehl3ent
+eh4lent
+eh5l2er
+eh2lin
eh3lo
ehl2se
-eh3ma
-eh3mi
+2ehm
eh3mu
-eh5nat
e1ho
e3hol
-ehr1a
+eh2r1a2
ehr1ä
-ehr3ec
-eh2r3ei
-eh1ri
-eh1ro
+ehr1ec
+eh2rei
+ehr3erl
+ehr6erle
+ehre3s
+eh3ri
+eh1ro2
ehr1ob
ehr1of
eh2s2
@@ -2928,158 +2936,157 @@ eh3sh
eh3si
eh3so
eh3sp
-eh3te
+eh3sta
e1hu
+e2hunt
e1hü
eh3üb
-e3hüt
eh1w
e1hy
-2ei.
2ei3a2
4eib
-ei2b3l
-eibu2t
+ei2bar
+ei2bl
+eibu4t
ei4b3ute
ei2cho
-eichs7test
-eich5te
e2id
ei2d1a
+ei3dan
ei3de
ei4d3err
2eidn
ei3dra
+eid2sc
ei1e
-ei3el
-2eien
+4eien
+eienge4
eie4s
-ei3et
1eifr
ei3g2a
-eig2e
-ei3g6er
+4eigeno
+eig2er
2eigew
ei3gl
1ei2g3n
2eigru
2eigt
2eigu
-4eih
-ei3k2a
-eik4r
-e2il
+eik2ar
+ei3kau
+eik4la
+e4il
2eil.
-ei4lant
ei2lar
+ei2lau
2eilb
eil3d
ei4lein
-eile2n1
+eilen1
eil3f4
-ei4l3ins
+eil3ins
2eiln
-ei2m1ag
+1eilzu
+ei2m1a4g
eim3all
ei2mor
e1imp
-ei4n1a
-ein3an
+eim2pl
+ei2n1a
+ei4nas
ei2nä
-ein5de
ein3dr
2eindu
-ei5ne.
ei4neng
+ei2neu
2einfo
-e2in1g2
-ein3ga
-ein2i
+ein4fo.
+ein4fos
+ein3g2
+ein4hab
e1init
ein3k
ein6karn
-3einna
-ei2no
-ein1ob
+3einkom
+ei2n1o2
+einsas4
+einsa7sse
3einsat
+ein6stal
ein4sz
e4inver
ei3o2
-ei3p
+ei1p
eip2f
2eir
ei3re
e1irr
e2is.
-ei2sa6
-ei2sä
+ei2sa4
+ei6schin
+ei6schwu
ei4s3erw
-ei3sp
eis2pe
-ei4str
+ei3s2s
+ei2str
ei2sum
-ei2ta
+e2it
+ei2tab
+ei2tan
+ei2tar
2eitä
-ei3ten
-ei2t1h
+ei3te
+ei2th
ei2tro
-eit3t2
+eitt4
eit3um
2eiu
2e1j
e1k
-e3k2a
+ek2a
1ekd
-eke2
e3ke.
e3ken
-eke3ri
e3kes
e3key
-ek4l
-ek5lip
+e3k2l
ek4n
-2ek2o
+ek2o
+ek4r
2ekt
ekt4ant
ekt3erf
ekt3erg
ek4t3erz
ekt2o
+ek2u
e3k2w
-2e1la
-e3lab
-el3aben
+e1la
+ela4ben
+el2abt
el1af
-el3agi
ela2h
-el1aho
e2l1ak
-el1a2m
-el3ans
-e2lant
-e2l3anz
-el1ap
+e2l1a2m
+el1ans
+el1anz
+2elao
+e2l1ap
e2l1a2r
-el5ari
-el3asi
-el3asp
-e3law
+el3ari
+el1asi
+el1asp
+el2ast
2e1lä
-elb4
-1elbis
+3elbis
el2da
eld5erst
-eld3erw
-el3des
-el3dr
-elds2
-e5le.
-elea4
+el4d3erw
+eld3s2
+2ele.
+2eleh
2elei
-e3leie
e6l5eier.
-el3eig
e2l1ein
e3leine
e4leing
@@ -3090,726 +3097,693 @@ el1emp
2e3len.
e4lense
e2l1ent
-e3ler.
+e3lep
el1erd
el1erf
-e4lerfa
+e4ler4fa
e2l1erg
el1erk
-e4l3erla
+el1erl
+e4ler4la
e4l3ernä
e2l1err
+2eles2
el1ess
-e3let.
-e2l3e4ta
+e4l1e4ta
+e3leu
2elev
ele2x
+1elf.
el3fe
-elf3ein
elf4l
+1elfm
+1elft
elgi5er.
elgi5ers
+2eli
e2l1id
e3lie
-e2lim
-eli4n
+eli2ne
el1ita
+el3kl
elks2
-el3l2a
-el4läu
-el5le.
+el3lan
+ell2au
+el2leb
ell3ebe
el4l3ein
ell3eis
-el3les
+el3ler
el2lic
el3l2in
+ell3sp
elm2a
2eln
el5na
2elo
-el1obl
e2lof
e2lol
-e3lom
+elon2
el1ope
e2l1or
elo2ri
-e3los
-e5lose
-e1lö
-el2san
-el2ser
-el2spr
-el2su
-el2ta
-el3t2ak
+el2öf
+el2sum
+elt2ak
elte2k
-elt3eng
+el4t3eng
+el4tent
+3eltern
el3tes
-elt3in
-el2to2
+elto2
el2t3r
el3tri
-el3tro
-elts2
+elt1s2
+elt3se
elt3sk
-elt3sp
2e1lu
e2l1um
-e3lung
el1ur
-el1use
+el3use
e1lü
-e2ly
+e2lya
2elz
-el3zwe
+elz2e
+el2zwa
+e1m
2ema
-e2m3ad
+e2m1ad
ema2k
-e2m1anf
-em1ans
+e2m3anf
+e2mans
3emanz
-e5mä
-em4d3a2
-2eme
-eme4n
+emas8sens
+em2d3a2
+e3m2en
emen4t3h
+e6mentsp
e2m1erw
-3e2meti
-em1ex
-em1im
+1e2meti
+e2m1im
em1int
-emi3te
+emi3ti
2emm
em2map
emma3u
-e3mon
+em2mei
e2mop
-emo5s
3empf
em3pfl
em2p3le
em2sa
-em3spo
+em2spr
em3t2
+1emul
2emü
-e2na
+emü3s
+e2n1a
4ena.
-e4na2b
-2e5nac
+2enac
e3nad
e4naf
4enah
e4nak
-en1al
ena3l2i
-4en1am
+4enam
en4ame
e4nand
-en3anz
-en1ap
-e4nar
+en3ang
en3are
+en2asc
4enat
-e5nati
en3att
e3naue
-en3auf
-e2nä
-e3näc
-en1är
+e2n1är
en1äu
-en2ce
+enbu4s3
+en2ce.
+en3d2ac
+en2dal
+endermas8
en4d3ess
-en3do
end4ort
-end3ras
-end5si
+end3rom
+end3si
end3s2p
end3sz
-en3dum
-2ene
+end2um
+2ene.
+ene4ben
en1ec
-e2nef
-en1ehr
-en3ei.
+e2neff
+e4nein
e2n1el
ene4le
-e4nelt
-4enen
+2enem
+2enen
e4n1ent
-e5n4entr
-en1epo
-4ener.
-e4n1erd
-e4nerf
-3e2n3erg
-e4n3erh
-4e3neri
-e2n3erk
+en4entr
+4e3ner.
+e2n1erd
+e2nerf
+1e2nerg
+e4nerh
+e4nerk
e2n1erl
-en3ermo
+e4n3ermo
4enern
e2n1err
-en1ers
-e2n3ert
+e2n1ers
+e2n1ert
e2n3eru
-e4n1erw
-en3erwe
-e6n3erz
+e2n1erw
+e4nerz
+2enes
e4n3ess
-en3eta
-en3eth
-ene3tr
-en1eup
-e4nex
-en3fa
-en3ga
+en3f
+enf2a
+enf2u
1engad
3engag
-en5g2i
+en3ge
+en3g2i
en2gl
en3glo
1engp
-eng5s
-eng7sc
-2eni
+eng1s
+eng3sc
+eng3se
+e3ni.
e3nic
-e4n1id
+e4nid
e3nie
eni3er.
eni5ers.
e2n1i4m
-en3imi
e2n1in
-e5nit
+e3nio
+2enis
+eni3se
+e3nit
+2eniv
en3k2ü
-e2n1ob
+e2n1o2b
enob4le
-e2n1oh
+e2nof
+en1oh
e3nol
eno2ma
en1on
e2n1op
-en1o2r
-en2os
+e2n1o2r
+eno2s
+enost3
e3not
-e3now
+eno2w
2e1nö
en1ö2d
-4enpe
-e6nr
-en2san
-en5sche
-en7schen
+e4nr
+en3sac
+ensas2
+ensa5sse
+en2sau
+en5sch4e
en2seb
1ensem
+ensen1
ens3eng
-en3sho
-en2sid
en3ska
en3s2po
enst5alt
en4s3tät
en6s5test
-4ensto
-en7stric
-ens5trie
-en5t4ag
-en3tanz
+2ensto
+en6s5trie
+e4nt
+ent4ag
1entd
-en4teb
-ente2n
-en6t5erb
+en2teb
+en4terb
+en3tes
1entfa
-1entga
+3entga
+en2thi
3entla
-1entna
+1entn
+en4t3rol
3entspr
-3entw
+2entü
+1entw
4entwet
1entz
-3entzü
-e2n1uf
-e2n1um
-en1unf
-en1ur
-e3nus
+en1u
2enut
e1nü
4enwü
e1ny
-enz3erf
-enz3erg
-enz3erk
+en4z3erf
+en4z3erg
+en4z3erk
enz3ert
e1ñ
-eo5a
+2eo
e1o2b1
-eo3ben
e1of
eo2fe
e1oh
+e4ol
e1on.
-eo3na
e1ond
e1onf
e1onl
e1onr
e1ons
e1ope
-e3opf
+e1opf
eop4t
e1or
e3or.
e3orb
-e3ord
-eorgi1
-e3ort
+e3ors
e3orw
eos2
e3os.
-eo5st
eo3ul
-e1o2v
+e1ov
e1ö2
e1p
e3pa
-epa4g
-e3p2f6
+epa2g
+e3p2f4
1episo
ep3le
-e2poc
-epor5te
+1e2poc
ep2pa
ep4pl
ep2pr
-ept2
-ep3ta
-ep4tal
+ept2a
+ep2tal
+e3pu
+epu2s
e1q
er1a
-e5ra.
-era2be
-e1rabi
-er3abs
-er3abt
+e3ra.
e3rad.
er3adm
-er3adr
-era5f4a
+eraf4a
era1fr
era2g
-er3agi
e1rai
er3aic
e2rak
-er3akr
e1ral
-era5le
er3all
-er3ana
-er3and
+eran3d
e3rane
+er3anf
e2ranh
er3anm
e1rap
er3apf
-er3ar
+e2rar
e3rari
e1ras
-e2r3a4si
+e2r3a6si
+era4s3s
era2ß
e2rath
e3rati
+e2ratm
e1raub
er3aue
+erau2f
er3aug
-e1raum
e1raw
e1raz
-2e1rä
-e3räd
+e1rä
er1äh
er1äm
-er3ätz
+erä4s
erb2e
-er3blu
er3br
+erb4sp
er1c
er3chl
+er3da
1erdb
er3de
2erdec
erd3erw
-2ere
-4e5re.
+4ere.
+er1eb
e3rech
er3echs
er1eck
ere4dit
er1eff
-er1e2h
-4e3r4ei.
+e2r1e2h
+4e3rei.
er1eig
e2rein
-er3eing
-er3einr
-er3eis.
+e4r3eis.
ere2l
-e2r1ele
-4e3rem
-e5rem.
-e4remp
-er3emu
-4eren
-e5ren.
-e5rena
+er1ele
+2e3rem
+2eren
+e3ren.
+e3rena
e4rense
e4r3entf
e4rentn
-e3reo
-4e5rer.
-er3erf
+e3renz
+eren8z7end
+2erer.
+e2r3erf
e2r1erh
-e2rerk
-4erern
+e4rerl
+2erern
+e3rero
er1err
er1ers
-e4rersc
e2rert
-e2r1erw
-4eres
-e5res.
+er1erw
+2eres
er1ess
er1eß
er3e4ti
er1eul
-ere3us
-er3e4vid
-er3fä
+ere4vid
+erf2e
+erf4r
4erfür
3ergebn
4ergehä
-erg3ise
+erg3els
+1ergol
e2r3h
-3erhab
-2e1ri
+1erhab
+2erhü
+2eri
e2riat
e3rib
+4e3ric
4e3rie
-eri5e4n3
-e5rif
-erik6
+eri3e4n3
+eri5ers.
+e3ri3k4
4e3rin.
er1inb
-er1ind
-e4r1ini
+e2r1ini
er1ink
-er1ins
-e4r1int
+er1int
e3rio
er1ita
-2erkol
-erk3te
-erk3tr
-4erl.
+2erk.
+1erklä
+2erkli
+2erkre
+erk3t
3erlebn
-4erln
-erm2
-er3ma
+ermen4s
erm3ers
-er3nan
-er2n1os
+ern1os
e1ro.
er3oa
-er1ob
-er1of
+er1o2b
+e2r1of
e1rog
-e2r1oh
+e1r1oh
e1rok
e1rol
-er3oly
e1rom
-e5ron
+e3ron
er1o2p
e4ro2r
e1ros
e1rou
e1row
e1roz
-er1ö2
-e1röh
+er1ö
+erö2d
2erök
-erö4s
-er5p
-er3ra
+er3p4
+er3rä
+erri3er
2errü
-er3sa
-ers4au
+ers2a
er3se
-er5s2i
+er5sen
+er3s2i
er3sk
-er3smo
+ersma3s4
+er5smo
er3sn
-er3s2z
-ert3abe
+er3sp
+ers2te
+er3sz
ert2ak
-er3tä
-ert3ein
er6terei
-er4tho
+er4ters
+er2tho
4erti
ert3ins
-er3to
-erts2e
-2e1ru
-eruf6s
-er1uhr
-er1u2m
+ert4ra
+ert3s2e
+2eru
+eruf4s
+er1u4m
+er1und
er1uns
-e3rus
-er1uz
-e1rü
-er3ü2b
-e5rüg
+er3uz
+erü4b
3erweck
6erweis
-2erzy
-es2a
+e1s
e4s3ab
-es3ad
-es3ak
-es3alt
-es3ar
-e5s4as
-es3av
+es1ad
+es2an
+es3ant
+e3s2as
+esa3sse
+esas6sen
+e4s3ato
+esäs4
+es2äu
2esb
e3sc
+es2ca
es3cap
-es4ce
-esch4
-e6schan
-esch2n
+es2ce
+esch2
e4sco
-e6scu
+e4scu
+e3se.
es1ebe
es3ehr
-es1ein
-es1eis
-es1eta
+e2sein
+ese4ler
es3eva
2esf
-6e4sh
-es2har
+4esh
+es3ha
+es4har
es2hu
-e3sid
-e5sie
-es1il
+e3sig
+e2s1il
es1ini
+e4s3ins
es3int
-e3sir
-e7sis
-e5sit
-es5ke
-es3ki
-e4s3ky
-e4sl
-es2log
-2e4sm
+es2kat
+e4s3ke
+e4sky
+e4s3l
+es4log
+2esm
e4sn
-e3sof
-e3sol
-eso2r
es2ort
-es4pei
-e3s4pek
-e5spi
-es2po
-e5s4por
-es2pr
-e5s4pra
+es2ö
+2esp
+e3s2pek
+e3s2por
+e3s4pra
+es2pu
2esr
-es6saa
-1essay
-es3sec
+es2sau
+4essem
ess4e3re
-es4s3erg
-es4sit
+ess3erg
+es3si
2esso
es2sof
-es2sp
-ess1pa
-es4st
-ess3tie
-es5str
-es5su
-e2st
-estab6b
+es2s1pa
+es4ste
+estab4b
est1ak
+e3stan
e4starb
-es6tau
-es7taum
+1e2stas
+es2tau
es2te
-es6te.
-est5eink
-e7stel
e4st3eng
e4st3erh
-e7stern
-e7sters
e4st3ess
-es4ti
-es5tip
+e5stev
+e3sti
+e4stip
estmo6de
-est3o4ri
+e2stod
+est3ori
+2estro
es3trop
-e3stu
-es4tü
+es2tu
+e3s2tü
+es2ty
e2s1um
es1ur
+e4sw
e3sy
eße3r2e
-2et
-e1ta
-eta3b6
+e1t
+etab4
et1am
+1etap
etari1
et4at
-e1tä
et1äh
e3te
-e5te.
-et1ein
-e5t2en
-etend4
-e1t2h
-et3hai
+e4tein
+et2en
+eten3d2
+ete2o
+eter4hö
+eter4tr
+et2h
et3hal
-et3hä
-et3hei
et3hü
e3ti
eti2m
eti2ta
-e3to
-eto4b
+2e3to
+eto2b
e4t1of
-e1tö
-4e1tr
-e4t3raum
+2etr
+e4traum
et3rec
-e2t3res
-et4ri
-et4ro
+e2tres
etsch3w
-et3so
-et3sp
-et3su
-et2ta2
-et4tang
-ett3au
+et1s2p
+et1su
+ett1a
+et2tab
+et4tanz
+et2t3au
et2tä
et2tei
ette4n1
-ett1h
-et4t3r
+et2th
+et2t3r
+et4tro
ett3sz
et2t1um
et2tur
et2tü
-e1tu
-et1ups
-e1tü
+etwa4r
+2etz
+et2zä
et4z3ent
-et3zo
-eu1a
-eu3ere
-eu3erz
+etze4s
+et2zw
+eu1a2
+eue6reif
eu2e5sc
-eu2ga
-eug6er
-eug3l
+eu2g1a
+eu4gent
+eu3g2er
eu4gla
-eugs4
-euho2
+eug1s2
euil4
-eu1in3
+eu1in
+1euk
eu2kä
e1um
e3um.
e3umb
e3uml
-e3um6s
+e3um2s
eums1p
-eum5st
-eum7str
+eum3st
2eun
-eu3n2e
-e3ung
-eu4nio
+eun2e
+eu4nei
+e3un2g
+eu2nio
eun3ka
eu1o2
-eu3p
-eu2rau
-eu3r2e
-eur4er
-1eu3ro1
-eu4sk
+eu1p
+e2ur2e
+3eu3ro
+eu1s4
eu3sp
-e4ust4
+eu3ss
+eust4
2eut
-eu3te
+eut2h
+eut6schn
2eux
eu2zw
e3ü
2e1v
-4eve
e2vela
e2vent
+4ever
+eve5r2i
+e3vo
ev2s
e1w
-2e3wa
-ewa3s
-e3wä
-ewä2s
+2ewa
+e3wä4
+ewä6s
2ewe
e2we.
-ew3et.
e3wir
ewi2s
e3wit
ew2s
2ex.
ex3at
-1e6xem
-e4x1er
+1e2xem
+ex1er
+e1xi
e2x1in
1exis
+ex3l
3exp
2ext.
ex2tin
+ex2tu
2exu
-2e1xy
-2ey
+2e3xy
ey4n
+eys2
e1z
-e5z2a
+e3z2a
e2z1enn
e3zi
ezi2s
+ez2w
é1b
é1c
é1g
+égi2
é1h
é1l
élu2
é1o
é1p
é1r
-é1t
-é1u4
+é1s
+é1t2
+é1u2
é1v
é1z2
è1c
@@ -3817,372 +3791,392 @@ ezi2s
è1n
è1r
ê1p
-6f.
1fa
-3fa.
-fa1b4
+fab4
fa2ben
f3abf
+f2abr
fab5s
3fac
-fa3che.
-fa3chem
+fa4cheb
+facher5f
fa2ch1i
-2fad
-fa2da
-3fa1e
-fa3fa
-fa3g
-f2ah
+fa2cho
+f1ader
+fa2dr
+f4ah
+faib4
fa2ke
f2al
-fa1l2a
+fa3l2a
fal2kl
fal6lenk
fal6l5erk
fal2li
-fal2s
-falt4s
-fal2z1
-3fam
+fal6scha
+fal6schm
+falt2s
2fanb
-fan3da
2fanf
fan2gr
+2f1ank
2fanl
+f1anp
2fanr
+fan3s
2fanw
-2f3anz
+f1an3z
2f1ap
-far2b3r
+f2ar
+far2br
+2f3arc
3fari
-3f2art
-fa5ru
-f1arz
-3fas
+3f4art
+2f3arz
fa3s4a
fa3sh
-3faß
-2fat
-fa2to5
+f3at
+fa2to3
2f1auf
f3aug
+fau2s
f1ausb
-3fav
+3f4av
+fa2xa
1fä
fä1c
fäh2r1u
2f1ärm
-f1ärz
+fä4s3ser
fä2ßer
-2fäu
-2f1b
+f1äu
+2f1b2
2f1c
-2f1d4
-f3ds
+2f3d4
+fdie2
1fe
-3fe.
+featu4
f2ech
-4f3eck
+2f1eck
fe2dr
fe2ei
fe1em
+fef4l
+feh4lei
f4eie
-4feinh
-fei2nu
-fei5st
+2f1eing
+4f1einh
+fe1ini
+2f1einw
+f1ei3s
fek2ta
-3fel
fe2l1a
-fel4dr
-fel5eise
-4f1e2lek
+fel2dr
+2f1e2lek
fe2l1er
-fel5lä
+fe2les
fe2l1o
fel4soh
-fel3to
-fel3tr
-fel3tu
-3f2em.
-2femi
+fel3t
+f2em.
fem4m
-fen3a
-fe4nä
-3fend
+2femp
+fe2nä
fen3g
-fe2ni
fe2no
fen3sa
-fen7sc
-fens2t2
-fen5ste
+fens2t
f1ent
f2er.
-fe1r2a
+fe1ra
+fer2an
fe4rang
-fe4ranz
-fe2r3au
-3ferei
-fer3eis
+fe4r3anz
+fe2rau
+ferde3
+f2ere
fer2er
fer3erz
-2f1erfa
+f1erfa
+f2erl.
+4ferneu
fe1ro
f4erpa
f2ers.
f2ert
f1erw
fes2t
-fe4st1a
+fe2st1a
fe4st3ei
-fe4str
-2f3e4ta
+fe2str
+2f1e4ta
3fete
-fet4t1a
+fet2t3a
+feuer3e
+feu4ru
3few
-2f1ex
-4fexp
+f1ex
+2fexp
3fez
1fé
-6f1f
+2f1f
ff2ab
-ff1ar
-ff2arb
-ff3at
+ff3ar
+ff4arb
ff1au
ff2e
ffe2e
f2f3ef
ff3ei
-ffe3in
+ffe1in
ffe2m
-ff3emi
-f5fen
-f5fer
+f2f3emi
f2fetz
+f2fex
fff4
-ffi3k
-ff6lei
-ff3li
+ff3l
+ff4la
+ff4lä
+ff4lo
f3flu
f3flü
-ff1ox
-ff1rak
f3f4rä
ff3ro
ff3rö
-ff3ru
-ff2s
+ff2sa
ff3sho
-fft2
-fft3h
-2f3g4
-2f1h
+ff2sp
+4f3g2
+fge3s
+2f1h2
1fi
3fi.
fi3at
+fi4ds
fi1er2f
-fi2ki
+fi2kin
fi3kl
-fi2k1o4
+fik1o2
+fi2kob
fi2kr
-fi2l3an
-fi3l4auf
+fi2l1an
+fil4auf
fil3d
fi2les
-fi5li
-fi6lin
+filg4
+fi3li
+fi4lin
fil2ip
-fin4a
+f2ina
fi3ni
2f1int
+fi2o
fi3ol
fi2r
fi3ra
3fis
-fi3s4a
-fi4scha
+fis4a
fisch3o
fi3so
-fi5s2p
-fi2t1o2
-fit5st
+fis2p
+fit1o2
+fi2tor
fi3tu
-5fiz
+3fiz
2f1j
-2f1k4
-f2l4
+4f1k4
+f2l2
2fl.
f3lad
-1f4lä
-3fläc
+f3lap
+1flä
+3f4läc
2f5läd
-f5län
-f5läu
+f3län
+2f3läu
2f3leb
+f4lee
2f3lein
f3ler
-3flim
+f4lé
+f3li.
+3f6lim
fli4ne
2f5lon
1f4lop
+flo7s8ses.
1f4lot
flo2w
-f4lu
-f6lug
-flug1a
+f3lö
+f4luc
+1f4lug
+flu4ger
+flus3se
f4lü
-2f1m
+2f3m2
+fmas2s
+fma3sse
2f3n2
-fni2
+fni2s
1fo
-fob4l
+fob2l
2f1of
+foli3
fo2na
fo2nu
2f1op
-fo1ra
4f3org
fo3rin
3form
for4m3a4g
forni7er.
for4sta
-for2t
-for4te
-for4th
-fort3r
+for4sti
+for4tei
+for2th
+for2t3r
for3tu
-fo5st
-2fo2x
-2f1öf
+2f1o2x
+1fö
+2föf
2f1ök
2f1öl
-2f3p2
-fper1
+4f1p2
2f1q
f2r2
f4rac
+frach6tr
f5rad
fra4m
f3rand
+f5rap
1f4rän
-frä5st
-2f5re.
-f5ref
+2fre.
+f3rec
+f3red
2freg
-frei3ba
-frei5n2
+freik2
+frein4
f3rep
f4reu
2f3ric
fri3d
fri2e
2frig
-fri3k
-1f4ris
+1fris
+f4risc
fri6ster
-f4riß
f3roc
1f4ron
+fro2na
fro2sc
-fru2h
-4fs
+f3rot
+f3ru
+f3rü
+4f1s
+fs2amm
f2san
fs3ar
-f2s3as
+f2s1as
+f2sauf
+f2saus
f2saut
+fsä4
f3sc
f4sce
f4schan
-fs1e2b
-fs3ehr
-fs1ein
+f4schef
+f2s1e2b
+f4s3ehr
f2s1em
-f4s1ent
+f2s1ent
f2s1er
fse4t
-f4s1eta
-f3si
-f2si2d
+f2s1eta
+fsi2d
+f3s2kie
f2s1o2
-fs3ol
f3span
f2s1pas
-fs1pen
+f2sph
f3s2pl
f3s2por
-f2s1pr
-fs2pra
+fs1pr
+f2spre
fs2pri
-fs3s2
-fs1tak
-f4stas
-fs2tau
-fs1tät
-f4stäti
+f2spro
+fs2pru
+fs3s4
+f2stas
+f4s3täti
f4stech
-f5stel
f4stemp
-f4s1tis
+f2stip
+f2s1tis
fst4r
f4s3tres
-fs2tro
f4s3tüte
+f2sty
f2s1un
f2sü
-f5sy
+f3sy
4f1t
-f4ta.
+f2ta.
+f2tab
ft1a2be
ft1af
-ft1al
+f2t1al
ft1an
-ft3anz
ft1ar
f3tat
-ft1auf
ft1e2h
ft1eig
-ft1ein
ft1eis
f2t1ent
-f2t3e4ti
-f2t1h
-f4t3hei
-f3ti
+f2t1e4ti
+f2th
+f4thei
+ft3ho
ft1op
-ft3rau
f2t3ro
-ft3rö
+f2t3rö
f3t4ru
-ft2s1
-ft4sa2
-ft3sc
-ftse2
-ft4stä
-ft5s4ten
-ft5s2ti
-ft3sü
-ft3t
+fts1
+ft2sa4
+ft4sag
+ft4sam
+fts2c
+ft4sche
+ft2se4
+ft4seh
+fts3el
+ft2si
+ft2stä
+ft4ster
+ft4stes
+fts2ti
+fttra4
+f2tum
ft1url
+ftwa4
ft3z2
1fu
-2fum
+3fug
+3f2uh
+f1um
2f1unf
-2f1u4ni
+2f1u2ni
fun2kl
-fun4ko
+fun2ko
fun2k3r
2f1unm
2funt
-furch2
+f2ur
fu4re.
-fu5ru
-fus3se
-fus6senk
-fus4ser
+fus2
+fu3sse
+fus6sen
+fu4sser
fuss1p
fus4s1t
fu2ß1er
@@ -4190,657 +4184,620 @@ fu2ß1er
1fü
2füb
fü2r
+fü3s2
2f1v
2f1w
-fwa3s
1fy
2f1z
fz2a
+fzeiten6
fzei8tend
-fz4s
-6g.
-1ga
-5ga.
+fz2ö
+fzu3
+fzu4ga
+3ga.
2gabf
ga2b5l
-ga1b4r
-ga3bu
+gab4r
2gabz
ga1ch
-ga3di
-ga1e
+2gadl
+2ga2dr
ga1fl
-ga3g
ga1k
ga2ka
-ga1l2a
-5g4amo
+gal2a
+g4amo
2g1amt
2ganb
gan3d
-g1anf
gan2g1a
4gangeb
gan2gr
-2g1anh
+2ganh
2g3anku
2ganl
-3gano
-g4ant
+g3anla
+3g2ano
2ganw
ga1ny
-2g1arb
-2g1arc
+2garb
+2garc
3gard
2g1arm
ga3r2o
g1arti
-2garz
+ga3ru
+2g1arz
ga2s
-gas3a
-ga4sal
ga3sc
-ga5se.
-gas1ei
+ga4s3ei
+ga4sem
+ga3sp
+ga4spe
+ga4spr
gas5s
-ga4sta
+ga3s6ses
gas3tan
ga4st3el
+ga3str
ga4stra
+ga4stre
gas1tu
-ga3t2a
-ga3th
+gat2a
2gatm
gat4r
gau1c
2g1auf
g2auk
-2g1aus
+g1aus
2g1aut
-1gä
2g1äp
-g1ärz
-3gäs4
-gä5st
+2gärz
+gäs2
gä4u
-6g1b
-g5be
+2g3b2
+gbau5s
gber2
-g5bo
+gbi2
2g1c
2gd
g1da
-gda3de
-g3dal
-gd1au
-g3de
-g4d1er
+g2d1au
+g2d1er
gd1in
g1do
-g3dö
-g1dr
-gd3re
-gds2
-gd3sz
-gd1t4
-gd1un
-gd1ur
-1g4e
+g1dö
+g1d3r
+gd3s2
+gdt4
+gd1u
+1ge
ge3a2
-ge3ba
+geb2a
gebe4am
geb4r
ge1c
-ge3d
+ged4
ge1e2
ge3ec
ge2es
gef4
-geg4l
-ge3ha
+ge3g2l
ge1im
-ge1ins
-ge1inv
+ge2in.
+gein2s
+ge2int
+gein2v
ge1ir
-4geise
+ge2is4
+2g1eise2
gei3sh
gei4sta
g2el
+ge4lanz
+gelb1r
+gel4b3ra
gel6ders
ge3le
+ge5leh
ge4l3ers
ge4less
+gell2a
ge3lor
-gel3sa
gels2t
gel3sz
gel3t2a
-gel3to
ge3lum
ge3lü
-gel3z2
-3gema
-3gemä
-3gemö
+gelz2
+ge3mi
+gem2u
+3gen
ge3na
ge4nam
-gen2au
+ge4nar
gen4aug
-gen2d3r
+gen2d1r
+gen1eb
ge3nec
gen3eid
gen3ern
gen3g
-gen3k
-genmes4
-ge3nor
+genma7sse.
+gen3n
gen3sz
-g1entf
+2g1entf
gen3th
+4gentw
geo2r
-ge3ou
-ge3p6
-3ger.
+ge1ou
+ge3p4
ge1ra
ge2rab
-ge2ral
-ger3amp
-3gerä
-g5ereig
-ge5rem
+4g3ereig
ge4reng
-ge4rens
+ge4ren4s
ge4r3ent
ger2er
+gerin4f
+ger4inn
+gerin4t
germ4
+germas6s
ger3no
ge1ro
ge1r2ö
ger4sto
-3gerw
-g6es
-ges3auf
-ge5s2c
+ge3r2u
+ges2c
ges3elt
ge2s1er
-ge3ses
ge3s2i
-ge3sp
+ges2p
+ges4pi
gess2t
-ge3st
-get2a
-ge3tan
-4getap
-ge3t2u
+gest2
+ge3t2a
+2getap
+ge3t4u
ge1ul
-gewa5re
-4g5ex
-2g3f2
-2g1g
+2g1ex
+2g1f4
+4g1g
gga2t
-g5ge
+g3ge
gge2ne
g2g3l
gg4lo
g2g3n
gg4r
-g3grä
-gg4s
2g1h
4gh.
+gh2e
3g2het
3g2hie
-gh3l
+gh1l
3gh2r
-gh3te
g2hu
gh1w
-1gi
-gi2a
gi3alo
-gie3f
+gia2s
gie3g
gi2e1i
gi2el
gien2e1
-gie3re
-gie3t
gi2gu
-gi2m
+gi2me.
gi4mes
-3gin
-4g1ind
+gi2met
+2g1ind
gi3ne
gin2ga
-4g1ins
-gi2o
-3gip
-gi3ro
-2gisel
-git2a
-gi2us
+2g1ins
+2g3isel
+gi3t2a
+gi4us
2g1j
-2g5k
-g2l
-6gl.
-1gla
-2g3lab
+4g3k2
+4gl.
+gl2a
+g1lab
3glad
-2g3lag
+g2lade
+2g1lag
3glanz
-gla4s5ti
+gla4s3ti
gla4stu
-3g4laub
-2g3lauf
-1glä
-3gläs
-g3läß
+3g2laub
+2g1lauf
+g1läß
3glät
2gläuf
-1gl4e
+g2l4e
2gle.
+3glea
2g3leb
-g5lec
+g3lec
g3leg
-2g3leh
-g4leic
-4glein
+2gleh
+4g3lein
glei4t5r
-3glem
g3len
4g5ler
+2gles
g3lese
-g3lev
-g3li
g4lia
2glib
-3g4lid
-5g6lie
+3g2lid
+3g2lie
2glif
-1g4lik
-g5lin
-1g6lio
-4glisc
-1g4lit
-1g4liz
-1g4loa
-g4lob
-1g4loc
-g5loch
-1g4lok
-g4lom
-1g4lop
-2glos
-1g4lot
-g3lö
+g2lik
+4glin
+g2lio
+2glis
+4g3lisc
+3g2lit
+g2liz
+3g2loa
+3g2lob
+g3loch
+glo3g
+3g4lok
+g2lom
+3g2lop
+3g2lot
2gls
-2glu2
-glu3te
+2g1lu2
3glü
-3gly
+g2ly
2g1m2
-gmi3te
-gn2
-4gn.
-g2na
-g6na.
-g6nat
-1g2nä
-g5neh
+g1n
+2gn.
+g2n2a
+g4na.
+2gnac
+g4nat
+3g2nä
+gn2e
+g3neh
+gne2tr
2gneu
-4gn3g
-2gni2
+2gng
g2nie
g2nif
g4nin
-4g5ni4s1
-g2no
-gno1r
-2g3not
-4gnp
-4gns
-4gnt
+2gni2s1
+g2no1
+g3not
+2gnp
+2gns
+2gnt
2gnu
3g2num.
+g2nü
g2ny
-4gn3z
-1go
-3go.
+2gnz
go4a
goa3li
-go3be
2g1of
+2gog
2g1oh
-go1i4
+go1i2
gol2a
-3gon
+2gonis
2g1ope
2g1opf
-3g2o1ra
-3gos
-go2si
-go3t2h
+g2o1ra
+2gord
+2gorg
+go2s
+go3th
got6t5erg
-3gou
-3go1y
-1gö
-g1öf
-2g3p2
-2g5q
-1g2r4
+go1y
+2g1p2
+2g1q
+g2r4
gra2bi
+gra2bl
2gradl
-g3rah
-3grai
+2g3rah
2g3rak
+grammen6
gram8m7end
-3gran
-g3räd
-2gräu
+2g3räu
2g5re.
g4reb
2g3rec
-g3rede
+2g3rede
g4re2e
2g3reic
+2g3rein
g3reit
-g3rek
g4rem
2g3renn
-gre3no
gren6z5ei
-2gret
+g4rer
+g3ret
+g3rev
2g3ric
gri2e
g3riese
3grif
2grig
2g3ring
-gro3be
2groc
2groh
gron4
-g4ros
-gross5el
-gros8seri
+g4ros2
+gro5sse.
+gro7ssen.
+gro7sser.
+gro5sses
g4roß
gro4u
2g3röh
g4ruf
2g3rui
-2grum
+2g3rum
3g4runs
3g4rup
-2g3rut
-grü1b
+grus2s
+gru3sse
+2grut
2g3rüc
3g4rün
-4g2s
+4gs
+g2sa
gs1ac
-gs3ad
+gs1ad
gs1af
-gs1a2g
-g5sah
-gs5a2k
-g5sal
-gs1ama
-gs1amb
+g4s1a4g
+g3sah
+g4s3a2k
+g3sal
+g4salt
+gs3ama
+g4s1amb
gs3an
gs3ar
-gs3as
-g5sat
+gs1as
gs3aug
gs1ä
-g7sät
-g5sc
+g4sca
+g4sce
gsch4
-g6schan
-g7schä
-g6schef
-g7s2chi
-g7schl
-g7schö
-g7schu
-g7schü
-gs1cr
-gs1e2
-g5s2eil
-g5sel.
-g5seln
-gs3ene
+g4schef
+gs2chi
+gs3cr
+g2s1e2
+g3s2eil
+g3sel.
+gs3eli
+g3seln
+gsen1
g4s3er
gse4t
-gs1i
+g4seu
+g2s1i
gsi2d
-g7sil
-gs3l
+g3sig
+g3sil
gs1o2
-g3sol
-g7soz
-gs1ö
-gs1p
-g5spek
-gs2pi
-gs3pin
+gs1p4
+g3s2pek
+gs4pie
+gs2pit
+gs3pl
g5s2por
-g4spu
+gsrat4
gs3s2
-g3st
-gs1ta
-g5s2tar
-gst1au
+g3star
+gs1tau
gs1tä
-g5ste.
-gs3teil
-g7stel
-g5sten
+g5stel
+g4stemp
gst3ent
-g5ster.
+g4sterm
gst3err
-gs3test
-gs4teu
-g5sti
-gs3tier
+g4s3test
+gst2he
+g3sti
gs1tis
-g5sto
-g6ston
-g6s1tor
+g3sto
+g4ston
+g4s1tor
gs1tot
-g5stö
gs1tr
+gst4ra
gst4ri
gst3ros
-g5stuf
-g5stun
+g3stun
gs1tü
gs2tüc
gs1u
-g5sub
-g5sy
-2g1t
-g5te
-g2t1h
-g5ti
+g3sy
+4g1t
+g3te
gti2m
-g5tr
-gt4se
+gt4r
+gt2se
1gu
+gu3am
gu1an.
gu1ant
gu2e
+2gued
guet2
2g1u2f
2g1uh
-gu3ins
-gu1is
-gu5me
+gu1ins
+gu1i4s
3gumm
-gun2e
2g1unf
g2ung.
gunge2
4gungew
2g1ungl
-3g2uns
-4gunt
-gu3re
-2g1url
-gu4s3a
+g2uns
+2gunt2
+3gur
+4g1url
+gurt3s
+gu2s3a
guschi5
-gus6saa
-gus6sam
+gus2sp
gus4st
+gu3sti
gu2ß1
-5gu2t1
-gu3te
-1gü
+gu2t
+gut1a
+gu4t3erh
+gut3h
2güb
gür1
-gü5st
+gü3st
2g1v
-4g5w
-gwa5re
-1gy
-gy3n
+2g1w
2g3z2
-6h.
-2ha.
+3haa
hab2a
hab2e
-h2abs
ha2cho
-hade2
ha2del
-h3adle
-ha3dri
-ha1el
-ha3fa
-haf5fl
-haft4s
+ha4din
+h1adle
+haf3f4l
+haft2s
hafts3p
-ha3go
-ha3ha
-hai1es
-h2aka
+h1ah
ha1kl
-4h2al.
-ha1la
+2h2al.
halan4c
-ha4lang
ha2lau
hal2ba
hal4bei
halb3r
2hale
+hal2la
hal4leh
hal6lerf
h1alp
halt3r
h1amt
h2an.
-2hana
h2and
h4ann
2hanr
2hant
-haos5
-2hap
+hao2s
+h1ap
+ha2pl
ha2pr
h4a3ra
-2h1arb
+2harb
h2ard
-har3ma
+h1arm.
har4me.
har4mes
-har5te
-har4th
+har2th
h1arti
-h2arts
-2has.
+h2as
2ha3sa
+hasi1
ha2ß1
+hatt2
hau3f4li
2h1aufm
h1aukt
hau2sa
-hau4sc
-hau6s3ti
-hau2ta
+hau2sc
+hau4spa
+hau4ss
+haus5sen
+hau4s3ti
+hau4sto
+hau6terk
2hauto
hau2tr
h1äff
-h1ärz
+hä4s
+hä5sc
hä6s5chen
-häu4s1c
-hä1usp
-2h5b
+häu2s1c
+hä3usp
+2h3b2
hba2r3a
2h1c
-2h1d
+2h3d4
+hdan2
2hea
-he3al
-1heb
+he2ad
+hea5t
he3be
he4b1ei
he2bl
he3br
-he5che
+he5ch2e
he1cho
-he2el
-hee3le
+h1echt
+hed2g
+he3di
+he2e3l
hee2s
-he2fa
+he2fan
he2fä
he2f1ei
-he3fen
hef3erm
2heff
he4f3ing
he2f3l
-he2f3r
+he2fr
he3fri
he2fu
-he2i
+he3gu
h1eie
h1eif
h1eig
+he2im
heim3p
hei4mu
-2hein
heine2
hei4neh
h1eink
-he3ism
-he3i4st
-heit4s3
+4heio
+he1ism
+he1i4st
+heit4s1
h1eiw
-hekt5a
he2l3au
hel1ec
-h1e2lek
+h3e2lek
he3len
hel3ers
he3li
hel4l3au
hel4mei
he3lo
-he4lö
+he4lof
+he2lö
3hemd
he3mi
3hemm
4h1emp
h2en.
-he6n3a2
-he4nä
-h4ene
+he4n3a4
+he2nä
he2n1e2b
hen3end
+hen3erg
he2net
-he2ni
+heng2
+2heni
he2no
-hen5st2
+hen3st2
h1ents
-he2nu
+2h3entw
hen3z
4he2o
he3on
@@ -4848,158 +4805,163 @@ he3op
he3ph
her3a2b
he2ral
-her3an
+2herap
he3ras
-herb4
+herau2
he4reck
-4her4eig
+4hereig
he4r3eis
he2rel
-h1erfo
+he4rerw
+h1er2fo
h1erfü
-he6r5innu
+herg2
+herin4f
+he6rin6nu
+herin4s
+herin8ter
h1erke
+h3erlau
2herm
+herma3s
he3ro
-he4r3o2b
+he4r3o4b
h1erö
hert2
her3th
-her2z1w
-hes4t
+her2zw
he2tap
heter2
he3th
-he5ti
+het2i
he3t4s
-he2u
+h2e2u
heu3g
he3x
he1x2a
he1y2
1hè
-2h5f4
-hfel2l1
+2h3f4
+hfell1
+hfel6ler
hfi2s
-2h5g2
-2h1h
+2h3g2
+hget4
+2h1h2
2hi.
-2hi2a
+2hia
+hi2ac
+hi2ang
hi1ce
-2h2i3d
-h3i4di
+hich6ter
+2hi3d
+h2ide
+h1i4di
hi2e
hi3ens
-hie4r3in
-hif3f6r
-h2ig
+hier1i
+hie4rin
+hif3f4r
hi2kr
-h2il
-hi4l5a4
+hi2l3a4
hil2fr
hi2n
+h1indu
hi3nel
hin2en
-hi5n4i
+h1inf
+h1inh
+hi3n2i
+hin3n2
hi3no
-hin2t3a
+hin2t1a
2hio
hi4on
hi3or
-hi3os
-2hi2p
-hi3pe
-hip1h
-hip1i
+2hip1
+hi2ph
+hi2pi
h2i2r
hi3ra
2hi3re
hi3ri
-hir4n
+hirn1
+hir4ner
hi3ro
+hir2s
his2a
-hi4se
-hi5s2p
+hi2se
+his2p
hi3ti
+2hiu
h1j
2h1k4
-2hl
+4hl
h4lac
-h3lad
-h4laf
-h3lai
-h5land
-hl3anz
-hl1ar
-h3las
-h3laß
-h3lat
-h3laug
-h3laut
-h3law
+hla2n
+hl1anz
+h1las
+h1laß
+h1lat
+h1laut
h3läd
-hl1är
-h3läs
-h3läß
-h3läu
+h1läs
+h1läß
+h1läu
hlb4
-hl3d4
-h5le.
+hld4
h3leb
-h3led
hle3e
-h3leh
-h2lein
-hle3l
h5len.
hlen3g
hl2enn
h3ler
-h5ler.
-hle2r3a
-h5lere
-h4l1erg
-h4l3ernä
+hle2ra
+hl1erg
+h6l3ernä
hle3run
hl1erw
+h4lerz
h3les
h4lesi
h3lex
hlg4
-h2li
-h3lic
-h3lik
+h2lie
+h2lif
hl1ind
+h2lip
+h2lis
h3list
-hl3l2
+h2lit
+hll2
hlm2
+hlma3s
h2lo
-h5loc
+h3loc
hl1of
hl1op
-h6lor
+h4lor
hlo2re
h3losi
-h3lö
-h5löc
-h4lös
+hl2ö
+h3löc
+h2lös3
+hlö4ss
hl2san
hl2ser
hl3sku
hl3slo
-hl3sp
hl2sto
-hlt2
+hl3t2
h3luf
h3luk
-h3lüf
+h1lüf
2h1m
-h2ma
-h4mab
+h2mab
h3mag
h3man
h3mar
-h3mä
+hma3sse
h4mäc
h4mäh
h4mäl
@@ -5008,249 +4970,253 @@ h3me.
hme1e
hme1in
h3meist
+h3men
hmen2s
-hmen6sc
hme2ra
-h2mi
-h3mir.
h2mo
-h3mot
+h4mon
h3mö
-hm3p2
-hm3sa
+hm3p4
hm2s1p
h2mu
-h5musi
-h2mü
2hn
-h2n2a
-hn3ab
-h3nac
-hn3ad
+h2na
+hn1ad
h3nam
-hn3an
-h4nat
-h5nati
-h2nä
-hn1är
-h3näs
+hn1an
hn3d4
hn2e
hn3eig
hn3ein
h2nel
hne4n1
-h2nep
+hne4pf
hner3ei
-h5nerz
-h2neu
+h3nerl
+h3nerz
hn3ex
-hn1g
-hngen5
h2nic
-hn1id
+h2nid
h2nie
-hn3im
+hn1im
hn1in
h2nip
hn3k4
-h3nof
+h2nor
hn3s2k
-hn4th
+hns2t
+hntra4
+hnts2
+h1nu
+h2nuc
h2nul
hn1unf
h3nunge
-ho3be
ho2bl
ho2c
-hoch5
+hoch3
+hock3t
+2hod
hoe4
ho2ef
ho4fa
ho2f3r
+2hoi
hol1au
+4holdy
+3hole
ho2l1ei
hol3g4
-2holo
+4holo
ho4lor
-1hols
-h3oly
+3hols
+h1o2ly
3holz
hol6zene
hom2e
ho2mec
ho2med
-ho5mu
h2on
+hono3
2hoo
2hop
ho1ra
hor3d
h1org
-ho5ri
+ho4sei
ho3sl
-ho4sp
-ho4st
-ho6sta
-ho5ste
+ho2sp
+ho3s4se.
+ho5s6ses.
+ho3ssi
+ho4sta
+ho2str
2hot.
-ho5th
-2hot3s2
-1hou
+ho3th
+hotli4
+2hot1s2
3hov
-2ho2w
-how1e
+2ho2w1
h1o2x
ho1y2
hô1
-1hö
+1h2ö
hö2c
-h2ör
+h4ör
hö4s
hös1c
-h1öst
+hös3se
+h3öst
2h3p2
h1q
-4hr
+2hr
hr1ac
-hr3a2d
+hr3ad
h1rai
h1rane
-h3raum
+h3rat
h3räu
hr1c
hr3d
-hr2e
h2rec
-h3r4ech
+h3rech
h3red
h3ref
h4rei.
+hrei4ba
h3reic
-h4r5eig
+h4r3eig
h3rel
-h3ren
+h3r2en
h3rep
-h4r3erla
-h3rerle
+hr2erg
+hr2erk
h6rerleb
-h3re4s5
-hre6su
+hr2erm
+hr2erz
+h3re2s1
hre2t
-h2r3eta
+h2r1eta
h3rev
hrf2
-hrg4
-hrga4
+hrg2
+h2ri
h3ric
+h4rick
hri4e
h3riesl
h3rin
-hr1ind
h4rine
-hr1ins
-h4ris
+h4rinh
+h4rist
h2rob
+h2rof
h3roh
h3rol
-h4rom
-hro3man
+h4rome
+h4romi
h4ron
h2ror
h3rou
-hr2s3ac
+hrr4
+hr2s1ac
hr2s3an
-hrs3au
-hr5sch
+hr2sau
+hr3sch
hr2s1en
hr2ser
-hr4set
-hr4s1in
+hr2set
+hr2s1in
hrs3k
hr2s1of
-hrst2
+hr4stec
hr2su
-hr6sw
-hr4tab
+hr4sw
+hr2tab
hr2tan
-hr2t3ri
+hr2th
+hr2tor
+hrt3ri
hr2tro
+hrt2sa
hrt2se
hrt4ste
-h1ru
h3ruh
hr1ums
-h3rut
h3rü
-hr3üb
+h4rüb
h2ry
hrz2
4h1s
h2s1ach
h2san
h2sau
+hsä4s
h3sc
h4schan
-hs1ec
-hs3eins
-hs1eis
+h2s1ec
+hse4ler
h2s1erl
h3s2ex
h2s1ing
-hs3l
h2s1of
h2s1par
h2sper
-h3s2por
+h2sph
+hs2por
h2sprä
-hs3s2
-h4stal
+h2spro
+hss2
hst3alt
+hst2an
h4starb
-h4stau
-h4stäl
-h5ste.
-h5stem
-h5sten
-h4sterm
-h2steu
-h4s1tie
-h4stin
-h4s1tor
+h2stau
+h2stäl
+h4stea
+h5stel
+hst2he
+hs1tie
+h2stin
+h2s1tor
+h3stö
+h3str
hst3ran
-h4st3ri
-h2s1tu
+hst3ri
+h2stu
h3stun
-h2s1un
+h3stü
+h2s1u
hs2ung
h3sy
4h1t
h2t1a
-htab2s
h3t4akt.
h3takts
h3t2al
h4t3alt
-ht3a4n
-ht5ane
-h3t4ank
-h3tas
+hta2m
+hta4n
+ht3ane
+h3tank
+h3t2as
h4t3ass
h4tasy
ht3a2t
-h2t1är
-h5te.
-h2t1ec
-h3tech
+h2tär
+h3te.
+ht1ec
h2t1ef
-ht1e2h
+ht1eh
h3teha
h3tehä
+hte2he
h2teif
-h4t1eim
-ht1ein
+h4teilz
+h2t1eim
h2t1eis
h4t3elit
+htelma4
+htelmas5
h2temp
h3ten
h4tentf
@@ -5258,62 +5224,61 @@ h4t3ents
ht3erfo
ht3erfü
h2t1erh
-h2t1erk
-ht4erko
-ht3erre
+ht5erken
+h4terkl
+h4t3erre
ht3ersc
h6t5erspa
-h4t3erst
+ht3erst
+h6tersta
+ht6erste
h2t1erz
-hte2s
-h2t3ese
-h6t3ess
-h5tet
+h2t1ese
+h2t1ess
+h3tet
h2t1eu
h2t1ex
-h2t1h
-h3ti
-h4t1in
-hti2s
-htni4
-h2t3oly
-h2top
+htgeschos8
+htgescho7sse
+h2th
+h4thei
+hthe3u
+h4tho
+h2t1in
+htni2
+hto2
+h2toly
h2torg
-h2tö
-h3töp
ht3rak
ht3rand
h2t3rat
-ht3raus
+ht6raume
ht4ri
h2t5rin
h2t3rol
h2t3ros
-ht3roß
-h2t3rö
+ht3rö
+h2t1rös
h2t3ru
h2t3rü
-ht2sen
-ht4s3ess
+h4ts
ht3spri
ht4stab
-ht4ster
hts2ti
ht4s3tur
ht4s3tür
-ht3t
+htt4
htti2
-htue3
-ht1und
+htu2e
h2t1urs
-htwa5re
-ht3z4
-hu2b
-hub1a
-hu4bei
-hu4b1en
-hub3l
-hub3r
+ht3z2
+hu2a
+hu2b1a
+hu2bei
+hu2b1en
+hu2b3l
+hu4b3r
+hu2bu
hu2h1a
hu2h1i
huk3t4
@@ -5325,20 +5290,22 @@ hu4lent
hu2ler
hu2let
hu2l1in
-hul3l
hu2lo
hu3ma
h1ums
+hu2n
h1una
-huni1
-2hunt
+hu3ni1
h1up.
h1ups
2hur
-hur3g
+hurg2
hu3sa
-hu2sc
hu2so
+hus4sa
+hus3se
+hus2sp
+hus4st
hu2tab
hu3t2h
hu2ti
@@ -5347,705 +5314,688 @@ hut4zen
hut4z3er
hutz1i
h2ü
-hü1bel
h4übs
-hüf2
-hüh3
+h3übu
hühne4
+hüs3s
2h1v
hvi2
hvil4
2hw
-h2wal
-hwa5re
+h2wall
hwe1c
h1weib
-h1wet
-3hyd
-1hyp
+3hyg
+3hyp
hy2pe.
+2hy2t
h1z
-hz4s
-2i.
+hz2o
+hzug4
+i1a
2ia.
i4aa
-ia1b4
-iab5s
+i2ab
+iab4l
2iac
-i5ad.
-i3adn
-ia1f4l
-i4a3g
+i2af
+iaf4l
+i4a3g2
+i2ah
+i2aj
+i2ak
i3ak.
-i1akt
-2i1al
+i3akt
+2ial
i5al.
-i3al3a
+ia2l1a4
ia2lä
-i3al3b
-i3alc
-i3al3d
+ial3b
+ial3d
i3alei
i3alent
i3alerf
i3alerh
-i3a4l3erm
+ia4l3erm
i3a2let
-i3alf
-i3alg
-i3alh
-i3a2lia
-i3alj
-i3al3k2
-i5al5l
-i3alm
-i3aln
+i3a4lia
+ialk2
+i3all
+ial3la
ia2lor
-i3alp
-i3alr
-i3als
-i3al3t4
+ial3s
+ial3t4
ia2lu
-i3alv
-i3alw
-i3al3z2
-iam4
+ial3z2
+i2am4
+i4amo
2ian
-i5an.
-i1ana
ia2nal
-i1anc
-i5and
-ia3n2e
+i3and2
+ian2e
i3ann
i2ano
-i5ans
i3ant
i3anz
+i2ap
ia3p2f
ia1q
-i3ar
+i3ar.
ia2ra
-2i3as
-i5as.
-i4asc
+2ias
+i2asc
ia3sh
-i4asi
-i4a3sp
-ia4st4
-ia5str
-i5at.
-ia6ta
-i3at2h
+i2asi
+i2a1sp
+ias5s
+iast4
+i3at.
+i3a4ta
+i4ate
+i3at4h
1iatr
i3ats
i3au
ia3un
-iaus1
+iau2s1
2iav
+2iä
i1äm
i1är.
i1ärs
-i3ät.
-i3ät3s4
-i1b
-i2b1ar
+i1ät.
+i1äta
+i1ät3s4
+2i1b
i2b1auf
-ib2bl
-i2b1ei
-ibe6n1
-ibi4k
-i3b4la
-i3b4le
+ib2bli
+ib1ei
+i2beig
+i2beis
+ibe4n
+iben3a
+ibi2k
+i3bla
+i3ble
+i2blis
+ib2o
i2b1ö
-i2b3rä
+i4brä
ib3ren
-ib2s
-ib3sa
-ib3sp
ib4ste
i2bunk
-i2b3unt
+i2bunt
ibus1c
-ibwa5
+ibus3s
2ic
+ic1c
ich1a
-ich3ä
+ich1ä
i1che
-ich3ei
+ich1ei
+ichermas8
+ichgro3
i1chi
i2chin
ich3l
i3chlo
-ich5m
+ich3m
+ichmas4
i1cho
i2ch3r
ich2t3r
i1chu
-ich3w
+ich1w
+i1ci
ick2e
-i1cr
-i5cu
+icks2
+i1cl
i1d
-i3d2am
+id2ab4
+i3dam
id2an
i2d1au
1i2dee
-id1ei
-i3del
-ide5l2ä
-ide3le
-ide1ra
+i2dei
+idel2ä
ide3so
+ide3sp
1i2dio
+idni3
i2dol
1idol.
-i3dos
-i2d3r
-id4ra
+2i2dr
+i3dsc
id2s1p
-id1t4
-1i2dy
-ie5a2
+idt4
+i2dy
+ie3a4
ie2bä
-ie2b3l
-ie2br
+ie2bl
+ie2bre
ieb4sto
ieb4str
ie1c
ie2cho
-ied3g
ie2dr
ie1e2
ie2f1ak
ie2f1an
ie2fau
-ie3fer
ief3f4
ie2f3l
-ie2f1r
-ie2g7l
+ie2fro
+ie4g3l
ie3g4n
ie2g3r
-ieg4ra
+ie3g4ra
+ieg2s
iegs1c
+ieg4se
ieg4st
-ie3her
i1ei
-ie2l1a2
-iel3ad
+i2e2l1a
ie3las
iel3au
iel3d
-i2ele
iel1ec
-i2eli
+ieler8geb
i1ell
-ielo2b
-i2els
-iel3sp
+ielo4b
iel3sz
-ielt4
iel3ta
-iel3to
-i1en
+2i1en
i3en.
i3ena
-ie4n1ag
-i3e4nä
-i3end
-ie2n1e2b
-ien2er
-ie6nerg
+iena2b
+ie4n3a4g
+i3e2nä
+i3en3d
+i2ene
+ien1eb
+ie3ner
+ien4erf
+ie4n3erg
i3enf
i3en3g
+ienge4f
i3enh
i3enj
i3enk
i3enm
+ienma3s4
i3enn
i3e2no
i3enö
i3enp
i3enr
-iens2
-ien3se
-ien6sto
+ien3s2e
+iens2k
+ien6stof
+ien6stop
+iens4tr
ienst5rä
ien3sz
+ie1nu
i3env
i3enw
i3enz
ie1o2
ier3a2
+ie2rad
ie2rap
-ie2rec
-ie3rel
+i2ere
ie3r2er
ie4rerf
-ier4ert
ie4r3erz
ie3res
i3ereu
i4eri
+ierin3
ier3k4
i1ern
i3ern.
-ier5ni
+i2er5ni
+ie2rö
iers2e
ier4s3eh
-ier5sta
-i3e4stas
-ie3su
+ier3sta
+ier3te
+ie3s2
+ie4sh
+ie4sk
+ies4s
+ie5sset
+iess1t
+ie4stas
ie2t1a
-ie4tei
ie4t3erh
ie4t3ert
-ie2th
-iet3ho
+ie2t3ho
ie4t1o
-ie2t3ö6
+ie2t1ö2
+ie2tri
iet2se
-i3ett
+i1ett
ieu2e
ie1un
-i1eura
-iewa5r
i1ex
2if
-if1an
-i2f1arm
+if1ab
+if1ar
+i2f3arm
+if4at
if1au
-i3fe
-i5f2en
+i2fec
+ife2i
+if2en
if1erg
if1erh
-if2fa
+if2fah
if6feste
if2fl
-i3fi
if3l
i1f4la
-if1lö
-if5lu
-i1flug
+if4lä
i1flü
-i1fö
if3r
if4ra
i1frau
-i1f4re
-if5reg
-if2s
-if3se
-if3sp
+i1fre
+if4rei
+if4rü
if2ta
ift3erk
if2top
if2t3ri
-ift3sp
+ift1s2p
ift3sz
-i1g
-ig2ab
+2i1g
iga1i
i2g1ang
ig1art
-iga5s
+iga3s
i4gefar
-ig5eise
-i3gen
ige4na
-ige4rau
-i2g5erz
-ig2gr
+igerma3
+ig1erz
i2g1im
-i2g3l
+i2gl
ig1lä
-ig4le
-ig5lein
-i4gli
-ig1lu
-2igm
ig4na
i4gnä
i3g4neu
ig4no
-i3g4ra
-ig6sal
-ig3sau
-ig3sä
-ig4se
-ig3so
-ig6sti
-ig6s1to
-ig6stö
+i3go
+ig4ra
+ig3rei
+igro3
+ig4sal
+ig1so
+ig4sti
+ig4s1to
+ig2stö
ig4stre
2i1h
i2h1am
-i2h1ar
-i5he
+i2har
+i3he
ihe1e
ihe4n
-ih3l
ih3m
ih3n
-ih1r
+ih3r
ih2s
+ih3sp
i2h1um
-ihu3s
ih1w
-2i1i4
-i2i5a4
-i3in
+ii2
+ii3a4
+i1ie
+i3i4g
+i1im
+i1in
+i1i4s
i2is.
-i2i5t
+ii3t
i1j
-i1k
-i4k3a4k
-ik3amt
-i4kanl
+2i1k
+i2k1a4k
+ik1amt
i2k1ano
-ik3ansa
-i2k3anz
-i2k1ar
+ik1anz
+i4kanze
+ik1art
ik3att
i2k1au
-ik3aufr
-ik1är
-2ike
+i2kär
+ikbu2
+4ike
i2k1ei
-ike2l
-ike2re
-i2k3eta
+ike2l1
+i2k1e2r2e
+ik1erf
+iker6fah
+i2ker2l
+i2k1eta
i3ki.
-i3kic
-i3kil
-i2k1in
+ik1in
+i2kind
i2k3l
-i3k4la
+i3kla
i3k4lä
-ik1lö
-i2k3n
+i2kn
+ik3no
ik2o3p4
-ikot3t
-ik3ra
+i2köl
+i2k3ra
ik3rä
ik3re
-i3kri
+ikro3
ik3so
-iks2p
ik3s2z
-ik3t2e
+ikt2e
ikt3erk
-ik2t3r
+ikt3r
+ik2tre
i2kun
i3kus
i1la
-il5ab
-il3a2d
+i2l3ab
+il1a2d
i2l1ak
-i2l3a4m
+i2l3a2m
il1ans
-il3asp
-i3lat
-i2l1au
+il1asp
+il1au
il4aufb
-il5aus
+il3aus
+i2laut
i1lä1
-2ilb
+4ilb
il2c
il2da
-il3de
-il4d3ent
+il4d3en4t
ild2er
-il2d1o
+ild1o
+il2dor
+il2dr
il1ec
ile2h
il1ehe
ileid4
il1ein
-i2l1el
-i3len
-i4l1ent
+il1el
+i4lents
i2l1erf
i2l1erg
i2l1err
+ilf2
il2f3l
il2f3re
-ilf4s
-ilg4r
-ili5en
-iliga2
-ili4g3ab
+ilf4s1
+ilie4n
+ilig1a2
+ili4gab
i2l1ind
i2l1ip
i3lip.
i3lips
-il3l4a
+2ill.
+il3l2a
il4lad
-il2leg
+ill4an
il3l2er
-il5l2i
+il3l2i
+2ills
il2mak
il4mang
-il2m5at
+il2m3at
il2mau
il2min
2ilo
i2l1or
-i1lö
-il1öf
il3t2h
-il3tr
-i1lu
+i1lu2
i2lum
i3lus
-il3v2
-il2zar
+ilv4
+il2z1ar
ilz3erk
-4im.
-ima2g
+2im.
i2manw
i2m1arm
+im4at
ima2tr
+imat5sc
ima4tur
-1imbi
+i2meg
+i2mej
+i2mek
i2m1ele
-i2m1elf
+i2melf
i2m1erf
i2m1erz
+i4mesh
i2meti
-im1ex
-2imi
+i2mew
i2m1inf
-iming7
i2m1ins
-imi3te
-immei4
+im2mei4
im4m3ent
-3immo
-imni4
+1immo
+imni2
+2imo
im1org
1impo
-imp2s
+imp4s
im3pse
1impu
-im4str
+im2str
2imt
+imtu2
2imu
-im3unt
-2in.
-2ina
-in1ac
-in3ad
+in3ac
+i4nack
+i2n1ad
in2af
-in3a2m
-in2ant
+in1am
i3nap
-i6narb
+in2ara
+in2ars
ina4s
-in3asi
-inasy3
-i2n3au
+i2n3au2
inaus1
in1äs
-in1äu
+in2dal
+in2dan
in3dau
-in4dene
indes4t
1index
in3do
2indr
-ind3se
+ind4ri
+in3drü
1indus
2ine
i2n1e2be
-i2ned
in1ehe
in3ei
-i5nend
-in1eng
-i3n2er
-i5ner.
+i2n1eng
+inenma3
+inenmas6
in3erbe
-i4n3erlö
-i5ners
-i5nerv
-in3erz
-i2n1eu
+i4nerbi
+in2erh
+iner4lö
+i4ner4tr
+i4nesk
+in1eu
ine3un
ine2x
+in3f
1info.
-4inga
+1infos
+2inga
ing1af
in2g1a4g
-ings2c
-ing7sch
-ing3ska
-ing5ste
+in2gl
+ingmas4
+ing4sam
+ing3sc
1inhab
2inhar
2inhau
-2inhe
-i3ni3d
+4inhe
+in2i3d
+i3nie
2inig
-in3ins
+ini3kr
in2ir
2inis
+ini3se
i3nitz
3inkarn
-ink4st
+ink4ste
+inma4le
2inn.
in4n3erm
2innl
-inn6sta
+in2nor
+inn4sta
1innta
2ino
-in3od
-in3ole
+in1od
in3ols
in1or
-ino5st
ino3t
i1nö
in1ö2d
2inp
2inr
-2ins.
ins2am
-insch4
-in7schl
+insch2
in2seb
-in3sel
2insen
ins3ert
in3skan
-3instal
+in3skr
+1insta
in4s3tät
-in5sto
-in3s2u
+in3su
1insuf
in4s3um
-ins2z
-in3sze
+in3s2z
+i4nt
1integ
-in3t2h
+int2h
in3t4r
-i2n1uf
+in1u
i3n2um
-in1unz
+in3unz
invil4
i1ny
-inze2
-in3z2w
+in3zw
i1ñ
-i1o
-io5a4
+2i1o
+ioa4
io1c
-i4o3di
-io3e4
-i2of
-io1f4l
+io2d
+i2oda
+io3e2
+iof4l
i2o3h
io2i3d
-i4ok4
-io3kr
+io3k4
i3ol.
i3om.
i3oms
-ion4
+ion2
i3on.
-io3na
ional3a
-io4n5au
-ion5d
-i3ons1
-ion6sc
-ions3p
-io2nu
+io2nau
+ion3d
+i3on4s3
i2ony
i2o1p
+io4pf
i3ops
i3opt
-2i2or
+i2or
i3or.
-io1ra
i3orc
iore4n
-io1rh
i3orp
i3ors
i3ort
-i2os2
-i3os.
-io3sh
-io3sp
-io5st
+io3s
+i2ost
i3ot.
i3ots
+i2ou
i2ov
io2x
i3oz.
-i1ö4k
+i1ö2k
i3ön
i1ös.
2ip.
i1pa
-i1pä
i1pe
ipen3
i3per
+ipf2
ip3fa
-iph4
+iph2
2i1pi
ipi3el
ipi3en
ip4l
+ip2pl
+ip3pu
i1pr
2ips
-ip3ta
-2i1pu
-i1q
+2ipu
+2i1q
i1r2a
-i3ra.
-1irak
-i3ras
+i3rad
+1i2rak
+ira4s
+irat2
i1rä
ir2bl
ir1c
-ir4e
-i5ree
+ir2e
+i3ree
2irek
-i5ré
-irg4
-ir2g5l
-irg6s
+i3ré
+irg2
+ir2gl
+irg4s
ir2he
-i1r2i
-iri3a
+ir2i
2irig
2irk
-ir2k5l
+ir2k3l
irli4n
+ir2mak
ir2mau
-ir2mä
+ir4mä
ir2m1ei
ir2mum
ir4m3unt
-ir5nen
-irn3ers
+ir2nar
ir2no
i1ro
-1i2ron
-iro2s
-iro5st
+1iron
i1rö
irpla4
ir4rei
-ir2s
+irr2h
+ir4sch3w
+ir3se
ir3sh
irt4st
-i1ru
iru2s1
i1s
i3sac
@@ -6053,17 +6003,16 @@ i4s1amt
is2ap
is3are
i2sau
-is1än
+i2s1än
2isb
i2sca
isch3ar
-is2che
+i3s2che
+i4schef
i4sch3e4h
i4sch3ei
-isch6er
-i4schin
-i5sching
-i2sch3l
+i2sch1l
+isch3le
i2schm
isch3ob
isch3re
@@ -6071,116 +6020,113 @@ isch3ru
i4schwa
i6schwir
i4schwo
-i4sch3wu
+isch3wu
is1chy
-i2s1cr
+i2s3cr
2ise
-i3sec
ise3e
ise3ha
-ise5hi
-ise3il
-is1ein
+ise3hi
ise3inf
i4seint
-ise2n
-ise4nal
+ise2n1
is2end
-ise1ra
+isen3s
+i2serh
i2s1erm
iser2u
i2s1ess
-is4et
-i4s5etat
+i4s3etat
isi2a
i2s1id
-is3la
-is3m
i2s1of
-iso2n
iso6nend
is1op
3i2sot
-i2sp
+2isp
is1pa
-i4spar
+i2spar
is1pe
is1pic
is2pit
-i4spl
-i4spo
-i4spro
+i2spro
is3sa
-is6saa
-is4s3ac
+is4s1ac
is4sau
-is3sä
+is3sc
is4s3che
-is4st
-iss1tr
-is2sum
-ist2a
-i4st3ab
-i4staf
+is3senk
+issermas8
+is3so
+is3spa
+is3spi
+is3spo
+is2s1t
+is3sta
+is4ste
+is3sto
+is3stu
+is2su
+i2stab
i4stam
-is2te4n
+ist2an
+i4stea
+iste4n
is2ter
-is2ti
+ist4ra
ist3re
-is2tro
is1trü
i2stur
+is1tüm
+i2sty
isum3p
i2sü
-i2ß1ers
-2it.
+i1ß
+iß1ers
i1ta
it1ab.
-it1ac
-i3tak
+it1abs
ital1a
-ital3l
it1alt
it1am
it1ang
-it3a6re
+it3a4re
it1art
i3tat
it1au
i3tauc
-i4t1ax
-2i3tä
-i4t1äs
-ität4
-2i1te
-it1eig
-it1ein
-6i3tel
-ite2n
-iten3g
-itens2
-i2t1epo
+i2t1ax
+4i1tä
+it2är
+i2t1äs
+ität2
+i1te
+i2tei
+i4t1eig
+i4tein
+2itel
+ite2la
+ite4n
+it2ens2
+i4tepo
i2tex
-it1he
-i5thr
-it1hu
+i3thr
i1ti
-1itia
i2t1id
1itii
iti4kan
-i2t1in
+i2t1in1
+it2inn
i3tis
i3tiv
+itmen2
i1to
-i3to.
-i5toc
+i3toc
i2t1of
i1tö
i1tr
-i5tra.
+i3tra.
it3raf
-it3rah
i2t3ran
it3ras
it3rau
@@ -6188,432 +6134,435 @@ it3räu
it3re
it3ric
it3rom
+it4ron
i3tru
it3run
-it4s1ag
-it2sä
-it2s1e2
-it4s3er1
+it2sa
+it4s1a4g
+it2s1e4
+its3er1
+it4set
its1pe
it4staf
it4stec
it4s3tem
-its3tes
-it4sti
-it4sto
-it4str
+it4s3tes
+it2sti
+it4stie
+it2sto
it2teb
it4temp
-itt3hä
-it2tr
+it2tri
i1tu
it1uh
i2t1um
i2tuns
-itu5re.
it1urg
itut4
i1tü
-i3tül
-i3ty
2itz
+it2zä
it4z3erg
-2i1u6
+it2z1w
+2i3u2
ium1
-ium3a
-i3un
ius1t
i1ü
2i1v
-iv1ak
+i2v1ak
iv1ang
i2veb
i2v1ei
iv1elt
ive4n
-i2v3ene
+i2v1ene
i2v1ent
-i3vol
-i2vr
i2v1ur
2i1w
-iwa5r
iwur2
+2i1x
+i2xa
ix2em
i3xi
-i1xo
-ix3tu
-i1z
-i2zan
+ixt2
+2i1z
iz1ap
iz1au
izei3c
ize2n
-i2z3ene
+i2z1ene
iz4er
i2z1ir
-iz1ob
-i2z1ö
-izt2
-iz3th
+izo2b
+i2zö
i2z1w
í1l
-2j.
-jahr3ei
+jah4r3ei
jahr4s
-ja3la3
+ja3l2a
ja3ne
jani1
-ja5sa
2jat
je2a
-jean4s
-je2g5
+jean2s
+je2g
jek4ter
jekto2
-jek4tr
+jektor4
+jek2tr
je3na
je2p
-je3s
-je2t
-jet1a
-jet3h
-jet3r
-jet5t
-jet1u4
-jit3
+je2t1a
+je2t3h
+je2t3r
+jet3t
+je2t1u2
+ji2a
ji2v
-j2o
joa3
jo2b1
job3r
jo2i
joni1
jo1ra
-jord4
+jord2
jo2sc
-jou2
jou4l
-4jö
-2js
j2u
ju2bl
-jugen6
-jugend5
+jugen2
+jugend3
ju2k
-jung7s
+jung5s
+ju3ni
jur2o
-ju3te1
+jut2e3
2j1v
-4k.
1ka
3ka.
-ka2a
+k3a2a
ka3ar
kab2bl
ka2ben
2kabh
-ka1bl
2kabla
2kablä
-kab4le
2k3a2bo
-ka3b6r
-4k3abs
+ka3b4r
+2k1abs
2k1abt
ka1c
-2kada
-ka3dab
-2k3adr
-ka1e
+k2ad
+2k3ada
+2k3a2dr
ka1f4l
ka1fr
-kaf3t
-k2a3g
+kaf3t2
+k2ag
ka1in
ka3ka
kaken4
-ka1la
2kala.
ka2lan
-kal3bl
ka3lei
ka3len.
ka4lens
kal3eri
kal2ka
kal2kr
-2kall
+k1all
+kalo5
kal4tr
-k2am
-k3a2ma
-ka3mar
-kamme2
-ka4n3a4s
+k3ama
+kamp8ferf
+kan2al
+ka4n1a4s
ka2nau
-kan3d4
+kand4
2kanda
kan2e
2k1ang
kan3k4
2kanl
2k1anna
-2k1ans
+k1ans
+k2ans.
6kantenn
-kan4th
+ka3nu
2kanw
-k4anz.
+k2anz.
ka2o
-2kapf
+2k1apf
+3kara
2karb
-k1arc
k2ard
-3ka3re
k2arg
ka3r2i
kari3es
-2karm
-kar4p3
-k2ar3ta
-2karti
-kar3to
+k2ark
+2k1arm
+k2arp3
+kar2pf
+k2ars
+kar3t
+k2arta
+2k1arti
karu2
k2arw
-ka5se
kasi1
-ka4sp
-ka3ta
-ka3th
+ka2sp
+kas3s
+ka3t2an
+ka3t4h
ka2t3r
+kat3se
2katt
-kau4f1o
+kau2f1o
4kaufr
kauf4sp
-2kaus
-kau5st
-kau3t4
+k1aus
+kau3t2
2kauto
1kä
-3käf
-2käh
-k1ämi
+k1äh
+k1ä2mi
+k1än
kär2
-kä4s1c
-kä5se
+kä4s5c
+käse3
kä3th
-2k1b4
-k5be
+2k3b4
+kbe1
kbo4n
+kby2
2k3c
-2k3d
+2k3d2
kdamp2
-2kec
-ke3d
-k3eff
+2k1ec
+k1eff
kefi4
-kege4
+kege2
ke2gl
ke2he.
-kehr4s
+kehr2s
kehrs3o
-ke2i
+kehr4st
2k1eic
2k1eig
-2kein
-ke3ind
+k1ein
+ke1in2d
+2keinh
2k1eise
-keit4s
ke2la
kel1ac
ke3lag
kel1au
ke2lä
-kel3b
+kel3b4
2k1e2lek
ke2len
2ke3let
+kell4e
kel3s2k
+k4elt
2k1emp
-ken3a
-4kengag
+k2en.
+ken3au
+kenbu5s4
+4ken4gag
+2kenlä
+ke2no
kens2k
-ken5st
-ken7s4te
+ken5s4te
ken3sz
k2ente
k3enten
ken3th
+k2entr
2k1ents
+k2entu
2kentw
-2keo
-4kep
+2keo2
ke2pl
k2er.
-ke1rad
k2erc
-k3erhö
-ke5rin.
-ke6r5innu
+4kerfah
+k4erfam
+k3ergeb
+ker6gebn
+k3er4hö
+ke6rin6nu
+kerin6st
+kerin4t
+ker4ken
k2erko
k2erl
-k3erleb
-k4erlö
-k2ern
+k3er4lau
+k3er4leb
+k6erlebe
ker4neu
k1ero
k2ers.
-ker3z2
-2k1erzi
+kerz2
+ker4zeu
+2k1er2zi
+k6es.
+ke2sel
ke4t1a
-keten3
ke2t3h
+ket3s
ke1up
keu6schl
2k1e2x
-2k5f
-kfi2s
-2k1g4
+2k3f4
+2k1g2
2k1h4
kho3m
-ki3a6
+ki3a4
ki1ch
-ki2d
-ki3da
-2k1ide
-ki3di
-ki3d4r
+2k1i2de
+ki3dr
ki2el
kie2l3o
-ki2en
-kif4
-kif2a
-ki1fl
-ki1fr
+ki1f4l
+ki1f4r
ki3k4
-2ki3l2a
-ki5li
+2kil2a
+ki3li
ki3lo
-3kin.
+k2imi
+k2in.
k2ing
2kinh
k2ini
k2inn
ki3n4o
+kin3s
2k1inse
-kin3sh
2k1int
-ki3o
-3kirc
-ki5s2p
+ki3or
+kio4s
+5kir
+kis2p
+kist2
2kiz
ki3zi
-2k5j
-2k1k
-k2l2
+2k3j
+2k1k4
+kl2
4kl.
-2kla.
-klan2
-k5last
-2k5le.
-kle5ari
-4k5leh
+4kla.
+k4lar
+4k1last
+k2le
+4kle.
+kle3ari
+4kleh
k4leid
-4k5leit
+4k3leit
k3lem.
2k3ler
-kle2r3a
+kle2ra
2k3leu
kle3us
-k5lich
-3klim
-k4lin
-k4lip
-k4lir
-k4lisc
+2klic
+2klig
+k2lin
+k3lip
+k2lir
+k2lisc
+2klist
klit2s
-4k5liz
+4kliz
2k3loc
klo2i3
k4lop
-k3lu
-k3lüc
-k3ly
+klo3s2
+klost4
+k2löt
+k1lu
+kluf2
+2k1lüc
+2kly
2k1m
+kmas2
k2n2
-3k4nab
+3knab
+k3ne
k4nei
-2k3ner
-kno2bl
-2knor
-3k4nü
+2k5ner
+kno4bl
+2k5nor
+k3nu
+3knü
1ko
-ko5ad
ko2al
-ko5ar
-ko3be
2kobj
2k1o2fe
koff4
-koh3le
koh3lu
ko1i2
-kol4k5
+kol2a
+ko3le
+kol2k5
3kom
-ko2min
ko4mu
k2on
-kon3d
ko3n2e
kons4
ko3nu
2kop.
ko1pe
-kop4f3en
-kopf5err
-ko3r2a
-4k1orc
+kop4fen
+2kops
+2kopz
+ko1r2a
+2k1orc
kor6derg
ko3ri
-kor3m
-3kort
k2os
+ko2sp
ko3ta
-kots2
-kot3sp
-2k3ou
+kot1s2
+kot4tak
+2k1ou
3kow
+ko2we
k1o2x
-3kö
+1kö
kö2f
-4köl
-2k3p2
+k1öl
+2k1p2
k1q
k2r4
2k3rad
+kra4s3
k3rats
-2k1raum
+2kraum
k4raz
-2krät
+2k3rät
2k3räum
2kre.
-kreb4
-2k5rec
-2krede
+2k3rec
+2k3rede
+2k3ref
2kreg
k3reic
-kre1i2e
+kre1i2e4
+kreier4
k3reih
2k3rh
2krib
-4k3ric
+2k3ric
k3ries
2krip
-k4ron
-kro5st
+3kris
+3k4ron
+kro4ss
2kruf
krü1b
-4ks
-ks1amt
+2k1s
+k4s1amt
k2san
k2sau
ks2än
@@ -6628,414 +6577,397 @@ k2s1id
k2s1in
k2s1o2
k3sof
-k5son
ks1pa
k3spe
ks2por
-ks3s2
+ks2pu
+kss2
kst4
-k5stab
-ks3tanz
+k4s3tanz
kstat4
-k4s1tis
-k4s1tor
-k4strä
-k2s1tum
+k4stea
+k2s1tis
+k2s1tor
+k2strä
+k2stum
k2s1u
-k1sy
ks2zen
4k1t
-k2t3ad
-k3taf
+kt1abs
+k2t1ad
kt1akt
k3tal
kt1am
kt1an
-kt3anz
k2t3a2r
-kt5a4re
-k5tat
-k2t1au
-ktä3s
-kte3en
-k2t1ei
+kta4re
+k2t1au2
+ktä5s
+kte3e
+kt1ei
k2temp
k2tent
k4t3erfo
k2t1erh
-k5ters.
+kte3ru
k2tex
-k2t1h
+k2th
+kt3ho
k2t1id
-k2t1im
+kt1im
k2t1ing
kt1ins
+kti4ter
k2t1of
k3top
kt1ope
k4torga
kt3orie
-k2tö
-k3t4ra
-kt5ras
-kt5rau
+kt4ran
+kt3ras
kt4ro
kt3run
-kts4
-kt3se
-kt3sp
-kt5st
-kt3su
-kt3sz
-kt3t2
+kt3s2
+kts4t
+ktt2
k2tuns
kt3z
ku1c
-kuh5
+kuh3
2k1uhr
-ku3la
+kul2a
ku3l2e
ku3l2i
2kulp
2k3uml
kum2s
k2u3n2a
-kun6s
+kun4s
kunst3
2kunt
2k1up.
+kur2bl
ku2rei
kuri2e
-kuri4er
ku2ro
-kur4sp
-kur4s3t
-kur4zen
+kur2sp
+kur4st
ku4schl
-ku2so
ku2sp
-ku5s4t
+kus3ses
ku2su
ku2ß
1kü
2küb
-kü1bel
kü1c
kür2s
2k1v
2k1w
-kwa5re
-ky3t
-2k5z2
-6l.
+2k3z2
+kze3l
5la.
-2lab
+l1ab
la3ba
-4labb
-4la2ben
-3labi
-6l1abl
-3la3b2o
-3l2a1b4r
-4l3abs
-4labw
+2labb
+4l3aben
+2labf
+2labg
+2labh
+4la2bl
+lab2o
+l2abr
+lab4ra
+lab4ri
+2labs
+3labu
+2labw
la1ce
+la2ce.
1lad
-la3den
-la3d2i
-l3adl
-4ladm
-4l3adr
-5ladu
-l3adv
-1la1e
-laf3ta
+lad2i
+l1adl
+2ladm
+2l1a2dr
+3ladu
+l1adv
+2laf
+la2fa
+laf3t
la2ga
-la3ge
-lag5eis
+la2gio
la2gn
-lago4
-la4g1ob
-la2gr
+lago2
+la2g1ob
lag5se
2la1ho
1lai
lai4s1t
-1laj
-la3ke
la2k1i
-3l2akk
+l2akk
la1k4l
2l1al
4lall
-4l3alp
-l2a3ma
+4lalp
l2ami
la3min
lam4ma
-3lammf
-l4amp
+1lammf
+l2amp
2l1amt
lamt4s
la4mun
-la2na
-la3nac
l1anal
+la2nau
2lanb
3l2and
-lan2d3a
-lan4dad
+lan2d3a2
lan6d5erw
lan6d5erz
-land5inn
-lan2dr
-2l1anf
-lang5s2
-l1anh
-4lanl
+lan2d3r
+2lanf
+lan2gl
+lang3s2
+2lanhä
+l2anhe
+2lanl
+4lanli
2l3ann
l1anp
2lans
-4lanw
-lanz1w
+4lansä
+2lantr
+lan2zw
3lao
l1a2po
lap4pl
la2r1an
-2l1arb
-l1arc
la2r1ei
-la6rene
-l4ar3g
+la4rene
+3l4ar3g
lar3ini
-2l1art
-lar3th
+2l1ar3t
l3arti
-la3ru
+la2ru
+la2sau
+4lasd
la5se
2lash
+2lasi
la2so
-2la4sp
-5lasseri
-5lassern
-5lassers
-la4sta
-la5ste
-las3tei
+2la2sp
+3lasser
+la2sta
last1o
-la4str
+la2str
las3tur
-la4stü
-la2ß
-laß3th
+la2stü
+la2ß3
lat2a
la3te
la4tel
-4l3ath
+2l3ath
la2t3ra
-lat4s
-2latta
+lat2s
+2lat2t1a
lat4tan
lat4t3in
-lat4t3r
+lat2t3r
laub4se
-lau4fer
-lau4fo
+lau2fo
l2aufz
-l1ausg
-2l1ausl
-2l1ausr
+1laug
+2lausl
+2lausr
2l1auss
-lau5str
-l1ausz
2lauto
-2law
-1lax
-la3xa
+1law
+lawa4
lä1c
-4läf
+2läf
2l1ähn
-3länd
+1länd
lär2m1a
-l1ärz
-lä4s1c
+lä4s5c
+lä4s3s
4lät
-4läub
-4läuc
-4läue
-3läuf
+2läub
+2läuc
+2läue
+1läuf
1là
-4l1b2
+2l1b
l3bac
-lb3af
-lb3am
-lb3ang
-lb3arb
-lb5b
-l2b3ede
-lbe4n
-l4b3eta
-l2b3id
-l2b5ins
-lb4lat
+l2b1ede
+l4beta
+l2b1id
+l2b1ins
+lb2lat
l3blä
lb3le
-l2b5li
+l2bli
l3blo
-lb3ohn
l4bre.
lb3rit
-lb4ro
-l3brü
-lb5sa
-lb5sp
-lbst1e
-l2b5uf
-lb5v
-4l1c
+lb2s
+lb3sa
+lb3se
+lb4sk
+lb3sp
+lb4st3e
+lb4sto
+lb2u
+l2b3uf
+lbus3s
+lbzei2
+2l1c
l3che
-l5chi
+lchermas8
+l3chi
lch3l
lch3r
+lch3s
lch3ü
lch1w
+l3cl
l3co
4l1d
-ld3a2b
-ld1ack
-l4d3ad
-lda2g
+ld3a2b1
+l3d2ac
+ld3ack
+l2d1a2d
+lda4g
l2d1ak
ld1al
l3dam
ld1amm
-l2d5a2n
-ld1a2r
-ld5ari
+l2d3a2n
+l2d1a2r
+ld3ari
l3das
+l3dat
ld1au
ld1är
-l3de.
-ld1ei
-l4dele
+l2dei
+l2dele
l3der.
-l2derd
-l3derl
-l3dern
-l2d1erp
-l2d1e4se
+ld1erp
+l2d1e2se
l2dex
ldi2c
l2d1id
l2d1im
ldo2r
-l3d2os
-l3dö4
-l2d3r
-ld1ra
-l4dran
-ld1rä
-l4dre
-ld5rea
-ld1ri
-ld1ro
-ld1rö
+ld2os
+ld2ö2
+ld3r
+l2dran
+l2dre
+l3d4ru
+ld4rü
ld3sa
-ld3ska
-ld3sp
lds2t
-ld1t4
+ldt4
+ld3th
l2d1um
-l2dü
+ldy3
+ldys2
1le
3le.
-le3ar
-lea5s
-3le3ba
-leben4s3
+le2ad
+3leba
+leben4s
le2bl
2lec
-lech1a
le2chi
-lech5t4e
+lecht4e
+3led
+4ledd
le3de
le2e
le3ei
-le3en.
-le3f4a
-3lefo
-le2g3as
+lef2a
+le2g1as
+le2gau
le2gä
-le2g5l
-3le3gr
-3lehr
-leh3r4e
+le2gl
+leg4r
+3leh
+leh3r2e
+4lehs
+4leht
3lei.
lei2br
l2eic
l2eid
4l1eig
l2ein.
+leinbu4
+leinbus5
l2eind
+lein4du
l2eine
+lei6nerb
+2leink
l2eint
-leis6s5er
+lei6ss5er
l4eist
+lei4ßer
l2eit
-lei8t7ersc
+lei2ta
+lei8t7er8sc
lekt2a
2lektr
-3lela
-le2le
-2l1elek
-le3len
-le3ler
-le3les
-3l2eli
+3l2ela
+2l1e2lek
lel3s
3lemes
le2m1o2
4lemp
l2en.
le4nad
-le4nä
+le2nä
4lendet
2lendu
-3lene
le4n3end
4lenerg
-le4ners
l2enf
le3ni
-len3kl
+l2enk
2l1enni
l2e2no
-len5st
+len4sem
len3sz
-2l1ents
-4lentw
+l1ents
+2l3entw
lent4wä
5lentwet
+4lentz
len2zi
le1os
-2lepo
-lepositi8
+2lep
+3lepa
+3lepf
+3lepr
l2er.
-l2e1r2a
-le2r3a4g
-le2r3au
-ler5b6
+l2e1ra
+le2ra4g
+le2rau
+lerb4
4l3ereig
le4r3eim
le4rers
-2l1erfo
+l1erfo
l2erfr
l2erfü
3lergeh
-4l3ergen
+l3ergen
+lergeschos8
+lergescho7sse
3l4ergew
2l1ergi
-lerk4
+lergro3
+lerin4s
+lerk2
l2erka
l2erko
l2erle
@@ -7043,18 +6975,18 @@ le1ro
2l1er2ö
3l2erra
l4ers.
-lers4k
-le2ru
-le3rung
+lers2k
+ler3t
+6lerwerb
l1erz
l2erza
-les4e
-2lesel
-le3ser
-le5sh
+les2am
+les2e
+2l1esel
+le3sh
lesi1
-le3s2k
-les7sa
+le3sk
+les3s
leste3
4lesw
2lesy
@@ -7065,318 +6997,333 @@ le2u
4leud
2leuro
3leut
-3leva
-2lex
-3lexd
-le5xe
+3lev
+2lexe
le2xis
+2lexz
2l1f
-l3fa
-l5fah
+l3fah
+lfä4s3
l2f1ec
lfe1e
-l4f1eis
-l3flä
+l4feis
+l3f4lä
lf3lo
-l3flu
+l3f4lu
lf3ram
-lf2s
-lfs1e
-lfs3tau
-lfs1tr
lf2tr
lf4u
lfur1
+l3fü
2l1g
+lga3t
+lgd4
+lgen2a
lge3ra
+lgeräu3
l2geti
-lg3lo
+l3go
lg3re
l3gro
-lg4sc
-lg6st
+lgro3s
+lg2s
+lg4s1t
2l1h2
-l3he
3lhi.
1li
-3li.
-l4ia
-li1ac
-li1ak
-li3bi
+3lia
+li3ac
+li3ak
+li3ar
+libi3
li1c
-5lichem
-5licher
+3lichem
+3licher
li3chi
-6lick
-li3da
-2l1i2do
+4lick
+li3d2a
+li2deo
+2l1ido
+li4ds
+l2ie
3lie.
liebe4s
-lie2n
li3ene
-li5enp
-lie4s1c
-li3fa
-li4fe
-5lig
-li3g4n
-lig3s2
+lie4s3c
+lie5sse
+lie4sta
+3lig
+lig4n
+li2gre
+lig1s2
li3ke
-li3ki
-li3kli
li2kr
lik2sp
lik4ter
-li3l2a
-li3li
-4lim
+li3l
+lil2a
+2lim
li3m2a
-lima3g
-2limb
-5limo
-2limp
-li3na
-lin1al
+l1imb
+3limo
+li3n2a
+lin3al
2l1indu
-li4nef
-li4neh
+li4ned
+li2nef
+li2neh
li2nep
-li4nes
+li2nes
2l1inf
-ling6s
+lings3
2l1inh
-li5ni
-2l1i6nit
+2l1in1it
2l1inj
-lin2k3a
-3linn
+lin2k1a
+link2s
li2nol
+l2ins.
l2insa
l2insc
+2linsp
+2linst
2l1int
l1inv
-4linz
+2linz
li2o
+li4om
lion5s
-li2p5a
-5lipt
+li3os.
+li2p3a
3lis.
li3s2a
li4schu
-6lish
+4lish
2l1isl
2l1i2so
+li2sp
liss4
+2liß
li2tal
li3te
li1t2h
-lits2
-lit5st
+lit1s2
lit3sz
li2tur
3liu
2lixi
li2za
-lizei5
+lizei3
4l3j
2l1k
lk1alp
-l3k4an
+l3k2an
l3kar.
-lk1arm
lken3t
-l2kep
+lk2l
lk3lo
-l3k6lu
-lk3nu
+l3k4lu
+lk4ne
lkor2b1
-l3k4ra
-lk3ro
+lk4ra
+l2k3ro
l2k3ru
-lk4s1
-lk5sä
-lk5ste
+lk2s1
+lk3sä
l3k2ü
-lkü1b
-2l1l
-ll1abb
-ll1abe
-ll5aben
-ll1abt
-l3labu
+4l1l
+lla2be
+l2labt
ll1aff
ll1akt
l3l2al
-l4l3a4m
-l2l3anz
+l2l1a2m
+ll3ama
+lla2n
+ll2ang
+ll2anw
+ll1anz
l3lap
ll1arm
-l4l3art
-l2l1au
+ll1au
ll4aufe
ll3aug
-l4l3aus
+l2l3aus
l2l1äm
llb4
-ll3d
-l2leb
+llch4
+ll3d4
l3lec
ll1ech
+lle3en
l2l1ef
+l2legt
+l2legu
ll1eim
-llei4ne
-l3l2em
+ll2em
l3len.
-lle6n1a
+lle4n3a
ll3endl
ll3endu
llen3g
+l4lents
l3ler.
-lle2r3a
-l4l3ergo
+lle2ra
+l4lerfo
+l6lergen
+l4lergo
ll3ernt
+ll3ertr
l2lerz
ll2es
+l2lex
llg4
-l6lieg
+l4lieg
ll1imp
l2l1ind
-lli5ne
-l2l1ins
+ll1ins
+llk4
ll5m
-l2l1ob
+lln2
+ll1ob
+l2lobe
l2l1of
ll1opf
l2l1o2r
-l2l3ou
-ll1ov
-l4l1öf
-ll3ö6se
+l3lor.
+l3lore
+l2l1ou
+l2löf
+ll1ö2se
ll3sh
ll3s2k
+ll2spr
ll4s3tor
-llt4
-ll3th
+ll3t4
llti2m
-ll3tr
llt5s2
+llu2f
ll1ur
-l3lus
llust6
ll3z2
-4l1m
-lm3a2b
-lm1aka
-l2m1arc
+2l1m
+l2m3a2b
+l2marc
+lmas2
+lma3sse
lm1aus
+lm1c
+lme2e
lm3eins
l2m1e2p
l2m1erz
-lmin2
lm1ind
lm1ins
-lm1orc
l2möl
lm3p
lmpf4
-lm3sz
-lm3th
+lm3s2z
+lm3t
4ln
-lna6r
+lna4r
ln3are
-l3n2e
+l3n4e
l3ni
-l3no
+l1nu
l1nü
1lo
3l2ob.
-3lobb
+lo2ber
2lobj
-2lo2bl
+2l1o2bl
l2obr
-lo3b4ri
-lof4
-4l1o2fe
+lob4ri
+l1o2fe
lo1fl
-lo3ha
-loh2e
-2l1oh4r
+lof4r
+lo2gau
+lo3h2e
+2l1ohr
+loi4r
3lok
lo2k3r
lol2a
-l3oly
+l1o2ly
lo2min
-l4on
-lo4n1o
+lo2n1o
lo2o
-2lope
2lopf
2lopt
lo1ra
lo4rä
2lorc
+l1ord
lo3ren
-4l1or3g
-lo3ro
+2l1or3g2
3lorq
3los.
lo4sa
3lose
-los3se
-lost4
+lo4ske
+lo2spe
+loss2e
lo4steu
-lo4s3to
-lo4s3tr
+lo2s3to
+lo2s3t4r
lo2ßu
-lo2ta
-lo3th
+lo2t1a
+lo3tha
loti4o
-2lo2v
-lo3vi
+2l1ov
+lo2ve
2lox
+1lö
lö2b3
-lö3du
-3lö2f
-4l1öfe
-l3öhr
-2l1öl
-5lösc
+2löd
+lö2f
+2l3öfe
+4lög
+l1öhr
+2l1ö4l
4löß
2l1p
+l3pa
lpe2n3
-l3p2f
-l4p1ho
-l3prei
-l3pro
+lp2f
+l2p1ho
lp3t4
+l3pu
2l1q
-lque3r
-2l5r2
-lrat6s
-lro3m
-lru3t2
+2l3r2
+lra4ss
+lrat4s
+lrom2
+lrö4
+lrös3
+lrut4
lrü1b
4l1s
-l3s2ac
-l2s3a2d
-l7s2al
+l3sac
+l2s1a2d
+l3s2al
l4s1amb
+l2sanf
l2sann
l3sare
l2sau2
+lsä4s
l4schin
-l5se.
+l4schmü
+l3se.
l2s1e2b
-ls1ec
-ls1ein
+l2s1ec
l2s1em
-ls3ere
+ls1ere
ls1erg
ls1erl
l2s1ers
l2s1erw
-l5ses
+l3ses
l3sex
l4sha
lsho2
@@ -7384,117 +7331,101 @@ l2s1imp
ls2log
ls3ohne
l4s3ort.
-ls2pi
-l3s2po
+l3s2pi
+ls2po
+l2spro
l3s2pu
ls3s2
lst2a
-l5s2taf
-ls3täti
-l5stei
-l5stel
-l5ster
-l4s1tis
-l4stit
+lstab6
+ls2taf
+l4s3täti
+l2s1tis
+l2stit
+ls2tr
ls1um
-l3sur
-l3sus
+l2sun
+lsu3s
ls2zen
-6l1t
-lt1ac
+4l1t
+l2tab
+lt1abs
+ltag4
lt1ak
-lt1am
+lt1a2m
l3tami
-l3tan.
lt3and
lt1ang
-l3tar
+l3tarb
lt1art
-l3tas
-l3tat
-l4t3ato
-lt1au
+l2t3ato
+l2t1au
l3te.
-l5tef
lt1eh
-lt1ein
l2t1eis
-lte5lei
+lte4lem
+lt3eli
l3t2en
-l5ten.
lter3a
-l3t4erg
-lt2erö
-lter4sp
-l2t3esk
-lte5str
+l3t2erg
+lt4erö
+l2t1esk
+lte3str
l3tet.
-lt3e2th
+lte2th
l2t1eu
-l2t1h
-l4t5hei
+l2th
+l4thei
+lt3ho
l3thu
ltimo4
l2tob
-l3toc
-lt1of
-l3ton
-l2t1op
+l2t1of
+lt1op
l2t1o2ri
-lto3we
+lto2w
lt1öl
lt1ös
lt3öt
lt4rak
-ltra1l
+ltra3l
l3trä
lt3räu
-l2t3re
+lt3re
lt4rie
lt3roc
lt3ros
l2t3rö
-lt5sc
-lt2se
-lts1ei
-lt3spa
-lt3spr
+l4ts
+lt3sc
+lt1spa
lt4stab
lt5ste
lt4stoc
-lt3t
+ltt2
lt1uh
l2t1um
ltu4ran
-ltu4rer
-ltu2r3i
-lt3z2w
-1lu.
+ltu2ri
lu1an
-4lu2b1
+4lu4b3
luba2
-lub3l
-lub3r
lubs2
-lub3sz
-lub3u
lu2dr
lu2es
-lu2f2
+1luf
2l1ufe
-lu3fo
-luft1a
-luft1e
-luft5r
-lu2ga
-lu2g5e2b
-lu2ger
-lug5erp
-lug5l
+2luff
+luf2t1a
+luf2t1e
+luf2t5r
+lu2g1a
+lu2g1e2b
+lug3erp
+lu4g3l
lu2go
lu2g3r
lug3sa
-lug3sp
lu2gu
2l1uh
lu1id.
@@ -7505,318 +7436,344 @@ lume2
l2ump
l1ums
l1umw
-1lu4n
+1lu2n
2l1una
2l1unf
-4l1uni
+2l1uni
2lunt
2lunw
-lu4pf
+4lu2o
+lu2pf
2lur
-lu1rä
l1urn
l1urt
2luse
lu2sp
-lus4sä
-lus4ser
-lus4si
+lus4s3a
+lus2s1c
+lus3sen
lus2s1o
lus2s3p
-lus6st
-lus8suc
-5lus2t
-lu4st3a
-lu6stä
+lus4s1t
+lus2t
+lu2st1a
+lu2stä
+lu2sto
+lu3str
lust3re
lu2s1u
-lu2ß1
+4lu2ß1
lu2t1a
-lut3erg
+lu4teg
+lu4t3erg
lut1o2f
lu2top
-lu2t5r
+lu2t3r
3lux
2lüb
5lüd
lüh1l
+lüs3
2l1v
-l2vr
2l3w
-l5wa
-lwa5re
+2lx
1ly
ly1ar
ly3c
-ly3et
-2lym
-3ly3n
+2lymp
+3lyn
+ly3no
ly1o
-ly3th
-ly3u
+lys2
+ly3te
+ly1u
2l1z
+l2z3ac
l3z2an
-lz1ar
-lz1erz
+lz2erk
lz1ind
-lz1o2f
+lzo2f
l2zö
-lzt2
-lz3th
+lz3t2
l2z1u4fe
lzug4s
-l2z1w
+lz1w
lz2wec
-6m.
1ma
-maa4
-2m1ab
+maa2
+m1ab
m2abe
-ma1bl
-3m2a1b4r
+2mabk
+m2ab4r
+2mabs
+2mabt
mach4tr
ma2ci
-mad4
ma3da
-ma3de
+ma2d4r
ma4d2s
-ma1e
-ma2es
ma1f
+ma2ge.
+ma2geb
+ma2gef
+ma2geg
+ma2gek
+ma2gep
+ma4ges.
+ma2get
+ma2gev
+ma2gew
2m1agg
magi5er.
magi5ers
-ma5g6n
+ma3g4n
2m1ago
-3mah
-ma3ha
-mah4ler
-mah3li
mai4se
2m1akt
-ma1la
-ma2l1ak
+mal1ak
+ma4lakt
ma2lan
-ma2l5at
+ma4l3at
ma2lau
-ma3law
mal3d
-mali3er
+ma3ler
+mali1
mal3lo
2mallt
-malu2
+malu4
ma2l3ut
mam3m
2m1anal
ma2nau
2manb
-man2ce
-mand4
-man3do
-man3ds
+man4ce.
+man3d2
man3ers
ma2net
-mang2
-2mangr
+m2anf
+2m1angr
+m2anh
2manl
m4ann
-2mans
+m1ans
+m2ans.
+2mansa
+2mansä
+2mansc
2mantw
-manu3
2manz
ma2or
-m4app
-2m1arb
+m2app
+2m3arb
mar3g2
-ma3ri
-3mark
-4mar4o
+4ma3r2o
maro3d
4marr
mar6schm
-mar5te
-ma3ru
-3m4as
-ma3s2p
-mas4t
+mar6schr
+ma3r2u
+m3arz
+3mas
+ma1s2pa
+4m1aspe
+ma3sses
+mas6ses.
+mas6sest
+ma6sset
+ma3s2su
+mas2t
3maß
-m4at
+ma2ta2b
ma2tan
-ma2tä
mat4c
ma2tel
ma4t3erd
-mats2
mat3se
-mat3sp
-3maue
+mat1sp
2m1au2f
ma3un
2mausg
m4ay
ma1yo
-ma3zu
-1mä
+3mä
m1ähn
mä1i2
-6m1änd
+4m1änd
m1ärg
-mät4
-mä1tr
-mäu4s1c
-2m1b4
-mb2a
+mä1t4r
+mäu2s1c
+2m1b2
mbe2e
-m3br
-2m3c
+mb4l
+m3b4r
+mby2
+2mc
+m3ch
2m1d
-md1ar
+md1a
m2d1ä
-md1ei
-md3s2e
+m2dei
+mds2e
m2d1um
-mdu3s
1me
-meb6
-me1c
+meb4
+m2e1c
medi3
-medi5e6
+medie4
medien3
2medy
me1ef
-me3e2n
-mega5
+mee2n1
+mega3
3meh
2m1eif
+2m1eig
m2eil
+mein4da
+meis2
me1i2so
m2eist
-2mej
-me3lant
+me3lam
3meld
me2lek
+me2ler
melet2
-2m1elf.
-melt4
-6m5eltern
-mel3tr
+2melf.
+mel2se
+mel3t4
+6mel6tern
2m1e2mi
-3m2en
+m2en.
+mena2b
me3nal
men3ar
men3au
-m3endl
men3gl
me3nor
+m2ens
men4sk
men2so
men3ta
-4m3entn
-4mentw
+2mentn
+4m3entwi
me1o
-2me3ou
+2meou
2meö
3mer.
me1ra
-mera3li
me2r3ap
+me4rens
mer2er
4m3ergän
-me5ric
3merin
-mer2kl
+merin4d
+merin4t
3mers
-me3run
-mer3z4en
+merz4en
3mes
-me2s3a
-me2sä
+me2sal
+me4sä
mes2e
-4me5sh
-4mes2sa
-mes6sig
+4meser
+2me3sh
+4m1essa
+mes6serg
mes2s1o
-mess1p
+mes2s1p
meste2
-me4str
+me2str
4mesu
3me2ß1
-me3t4a
-mete2
+me3t2a
me3th
meu1
-2mex
+2m1ex
1mé
-2m3f
+2m1f4
mfi4l
4m1g2
-2m1h
+2m1h4
1mi
-3mi.
-mi1ak
-mi3an
-mibi3e
+mi2ad
+mi3ak
+mibi1
mi1ch
mi3da
mie3dr
mi2e1i
+mie3l
mi2er
-miet1i
+mierer4
+mi2et
+mie4ti
3mig
+migescho7
+migeschos8
+mi2kar
mi2ki
mi2ku
+3mil
mi3l2a
-3mil4c
milch1
+mil4che
+4milz
2m1imp
-min5de
-min2e
-mi3neu
+min2en
+min2eu
min2ga
+mings2
mi3ni
-mi3n2o
+3min2o
+mi1nu
+3mir.
+mi3ra
3miri
3mirs
-mir3sc
3mirw
mi2sa
+mi4scha
+mi4schn
+mi4schw
mise1
-mi3sp
-mis2s1c
-mis6st
+mis4s1c
+mis4ser
+mis3si
+mis4st
mi2ß1
-3mi2t1
-mi3te.
-mit3es
-mit3h
-mi3ti
-mit5s2
-mi5tsu
+3mit1
+mi2ta
+mi2th
+mi2tr
+mit3s2
+mit5sa
+mi3tsu
+mi2tu
4mitz
2m1j
-6m1k4
+2m1k4
m3ka
mk5re.
-6m1l
-m3la
-m3le
-m5li
-mlö3
-4m1m
-mma4ge.
+2m1l2
+ml3c
+ml3l
+ml3s
+2m1m
+m2mab
m2m1ak
m2m1al
-m2m1ang
-mm1ans
+mm1ang
+m2mans
mm1anz
m2m1au
-m2m1ei
+mmd2
+mm1ei
mmeis3t
mme4lin
mme4na
-mme2ra
+m4mentw
+mme2ra2
mme4rec
-mmer3k
+mme2s3a
mm1inb
mm1inf
mm1inh
@@ -7824,49 +7781,52 @@ mm1ins
mm1int
mmi3sc
mm3p
-mm2s2
-mm3si
-mm3sp
-m2m3um
+mms2
+m2mum
+mm2un
mmül2
-2m1n2
+2m3n2
m4nesi
-m3ni
1mo
-mo4a3
+moa3
2mobj
-3mod
+3m2od
+mode3s
mo2dr
-2mog.
+4mog.
mo2gal
3moh
-mo2i
-moi5r
+mo2i3
mo2k1l
-4mol.
+2mol.
3mom
-mo5m4e
-m2on
+mom2e
+3m2on
mo3ne
mo4n1er
-mon3su
+mon3s
3mo2o
-2mo1pe
-mo2per
+2m1ope
2mopt
-mo1r4a
-mor5ar
-2morc
-mor4d3a
-mo4sk
-mo3sp
+mo1ra
+mo2rar
+2m1orc
+mor2d3a
+mor2dr
+mo2rer
+mork4
+3mos
+moster4
+mo2sto
+3mot
m1o2x
mo1y
1mö
-möbe2
mö2c
4mök
+m1öl
2m1p
+m2pf
mp4f3erg
mpf3erp
mpf3err
@@ -7874,22 +7834,17 @@ mp4f3erz
mp2fl
mpf3li
mpf1or
-mp6lif
-mp3lu
+m3pon
mp3ta
+m3pu
2m1q
-4m3r
-4m1s
-msa3l
+2m3r2
+2m1s
m2san
ms3and
-m4sap
-ms3as
-m5sat
-m2sau
-m3sc
-m5sche
-m4sco
+ms1as
+m3sä
+msch2
m2s1ef
ms1erf
ms1erw
@@ -7897,182 +7852,190 @@ ms1ini
mso2r
ms1ori
m2spä
-ms2po
+m2sped
+ms2por
+m2spot
+m2spro
+ms2pu
ms3s2
-m4stal
-m4strä
-m3stu
+m4stag
+m2stal
ms1um
m2sü
-m3süc
-m3sy
-ms2ze
4m1t
mt1ab
mt1ak
-m3t2am
+m3tam
mt1ar
mt3are
-mt1ein
mt1elt
m2t1erf
m2t1erg
m2t1erl
m2t1ers
m2t1ert
-m2t3eta
+m2t1eta
m2t1eu
-m2t1h
-mt5ho
+m2th
+mt3ho
m2t1im
m2t1ins
-mt1int
mti2s
+mtmen2
mt1ös
-mt2s
-mt3sc
-mt7sco
-mts1e
+mtra4s3
+m4ts
+mt2sa
+mt2s1e
mt3s2ka
mts1p
-mt3spa
-mt3st
-mt3t
+mt1spa
+mtt2
mt1um
-mtu3re
mt1urt
-mt3z2
-1m2u
+mt3z
+1mu
mu1a
2m3uh
mu3la
2muls
-m3umg
3mun
-mu3na
mun2d1a
-mu3ne
4m3unf
4m3ungeb
+mu3ni
m4unk
-mu3no
-mur3ma
-mu3ru2
-mu4r1uf
+munt2
+4munz
+mu3ra
+mu4r1u2f
mu4s1a
+3musi
mu2s1o
mu2sp
-mus4st
-mu6s1to
-mu4str
+mu3s4se.
+mu3s4ses
+mus2te
+mu2s1to
+mu2str
mu2su
+muße3
mu2t1au
-mut4s3
-mut5sc
+muts3
+mut2st
1mü
2müb
+mül4len
3mün
+mü3ssi
3müt
2m1v
-mvol2l1
+mvoll1
2m1w2
-mwel4
-1my3
-my4an
+mwa2
+mwa4r
+1my
2m1z
mzug4
-6n.
1na
-5na.
+3na.
2n1ab
-3naba
-na3ber
-4nabw
-na2c
+na2bä
+4nabg
+4nabh
+na2bl
+na2br
+4n3abs
+4nabt
+3n2a2c
nach1
-nachs2
-5nachw
-4n3add
-4n3adr
-na1e
+na3chen
+nach3s
+nacht6ra
+4nadd
+n2ade
+4na2dr
n1af
na1f4r
-3nag
-5n2ah
+3n2ag
+na2gem
+3n2ah
na2h1a
-n4ahm
n3ahn
3nai
+nai2e
n3aig
n3air
2n1ak
na2ka
3nako
-n3akt
n2al.
-nal1a2
-na2l3ad
+na2l1a2
na2lä
-5n2ald
-nal3ent
+3n2ald
+n4ale
+na4lent
na2let
-nal3k
nal3l2a
nalmo2
+na2lop
+nal2ph
n2als.
nal3t4
na2lu
2naly
-n4am.
-3n2ame
-5na3me.
-5n4amen
-4n3a2mer
-5nami
+3name
+n2amen
+4n1a2mer
na3m4n
3namo
-nam2s
-2n3amt
+nam2sp
+2n1amt
namt4s
-n1an
-4na2na
-4n3anb
-n2anc
-4n3ang4
-4nani
+n1an.
+4n1a2na
+4nanb
+n1and2
+4n1ang
+2nanh
+2nani
4nank
-4nanl
-5nann
+2nanl
+3nann
na3no
-4nanr
-2n3ans
-4nantr
-2n3anw
+n1anp
+2nanr
+2n1ans
+2nantr
+2nanw
+nap2si
n1ar
-5n4ar.
+5nar.
na2r1a
-n4ard
-3nare
-5nari
-n2arl
-n3arl.
+2narc
+n2ard
+4narg
+3nari
+n2ark
+n2arle
2narm
-2n3art
-na3ru
+n2arp
+4n3art
+na3r2u
3nas
+n2as.
na4schw
-4n3asp
-4nasy
+4nasp
+4n1a2sy
nasyl2
3naß
3nat
-5nat.
-5nate
-na3t2h
-5nats
+n4ata
+na3t4h
+4natm
+nats1
nat4sa
-nat6s3c
-nat5st
+nat4sc
4natt
n1au
4nauf
@@ -8080,142 +8043,122 @@ nauf4fr
n3aug
5naui
3n2aul
-4n3ausb
-nau3sc
-4n3ausg
-n3ausl
-4n3auss
-4n3ausw
-nau3te
+4nausb
+4nausg
+n2auso
+4nauss
+n4auste
+4nausw
navi5er.
navi5ers
1nä
-n2äc
+2näb
+3n2äc
3näe
-3näh
n1ähn
2n1ä2m
-2n3än
-näng5
-n1ärz
-2nä2s
+2n1än
+2näp
nä4sc
-3näß
+n2ä4s3s
2näu
-5nä1um
-4n7b4
-nbau3sc
+3nä1um
+2n3b4
nbe2in
-nbe5n
-nber2e
-4n1c
-nc5ab
-nce4n
-n3cer
-n3ces.
-n3che
+nbe3n
+nbe3r2e
+nbu3s
+nby2
+2n1c
+n3ce2n3
nch3m
-n3chu
-n5cu
-6n1d
-nd1ab
-n3daf
+2n1d
nd2ag
n2d1ak
-n4dakt
-nd1ana
+n2danl
nd1ann
n2d1anz
-nd1arb
-nd3arr
-nda3ru
+ndat2
n2d1au
+nd1c
nde4al.
-nde3alt
-nd1ei
-nd3ei.
-ndel4st
+n2dei
+nde4län
n4d3ents
-nde3o
-n5der.
-n5deri
nde4rob
-n3de4s
+nde2s
ndes1e
-ndni4
-n3dol
+ndi2a3
+n2dob
+ndo2be
nd1op
-n2d1or
-nd3rat
-nd3räu
+nd1or
+n2dö
+n2d3rat
n2d3re
-nd3rob
+n2drob
nd3rol
nd3ros
-n2d3rö
-n4drui
-n4d5run
+n2drö
+n2drui
+n4d3run
nd2sor
nd2spr
+nd4stab
nds3tau
-nd5ste
-nd2sum
-nd1t4r
-n2dum
-nd2ums
-n2d1und
-n2dü
+nd3th
+ndt4r
+n2dü4
+ndy3
1ne
3ne.
-ne2a
-ne3am
-ne3an
-ne3as
+ne2ap
+ne3a4s
ne3at
-ne3au
ne2bl
2n1ebn
2nec
3neca
-2ne2e
-nee1i4
+3ned
+ne2de
+2nee3
+ne2e2i4
ne3ein
-ne3en
-nee3t
n1ef
-3nefe
-4neff
-ne3g6
-3n2eh
-n3ehe
-4ne2he.
-6n3ehr
+neg4
+2ne2he.
+3nehm
+4n1ehr
2n1ei
n2eid
-6neif
+4neif
3neigt
-4nein
-6n3eing
-6n3eink
+4n3eing
+4n3eink
ne2ke
-nek3t
+nek3t4
ne2l
+3nela
nel3b
-4n1ele
+2n1ele
+4nelek
+4nelem
ne3len
ne3li
nel4la
+nel2lä
3ne3l2o
-ne3lu
-5n2em.
+3ne3lu
+n2em.
2n1emb
n1e2mi
2n3emp
2n1ems
3nen
n2en.
-ne4n3a
-nen3dam
+nen3a2
+n2enb
+n2enc
4n1endb
4n1endd
4n1endf
@@ -8224,559 +8167,573 @@ n1endg
4n1endk
4n1endp
4n1endt
-4nendu
4n1endw
ne2n1e2b
nen3ei
+nenen1
ne4nene
+4nengb
+nen4ge.
+nen4gen
+4nengs
+4nengt
+n2enh
ne2ni
+n2enj
nen3k
ne2no
-nen5s4e
+n2ens
+nens4e
nen3sk
-nen5st
-5n2en5t2a
+5n2en3t2a
n1entb
-4n3entl
-4n1entn
-4n3ents
-4nentw
-6nentz
-ne2n1u
+4n1entl
+4nentn
+5nentr
+n1ents
+4n3entw
+4nentz
+ne2n3u
n2env
+n2enw
ne2ob
ne1os
-ne4pf
-2nepo
+2nepf
+2n1epo
ne2pos
-3n2er.
+n2er.
ne1ra
-ne2rab
-ne5r4al
+ne2ra2b
+ne3r4al
ne2r3am
-ne2r3ap
+ne2ran
+ne2rap
ne2rau
-4n3erbi
-2n1erf
-6n3erfo
+4nerbe.
+4nerben
+n1erbi
+nere2
+ne2reb
+n1erf
+4n5erfo
nerfor4
-4n3erfü
-n1erg
-2n1erh
-n3erhö
-ne3ri
+2nerfü
+3nergr
+n1erh
+2n3erhö
+3neri
n1erk
-n3ermä
+n2erli
+2n1erlö
+nerma3
+nermas4
+n1ermä
ner4mit
-2nermo
-3nern.
-4n3ernt
+n2ern.
+4n1ernt
ne1rös
-n2ers.
+n2erp
+3n2ers.
2n3ersa
ner8schle
-3n4ert.
-4n3ertr
+n2ert.
+n1ertr
ne2rup
n2erv
-4n1erz
+2n1erz
3n2es
n4es.
-ne3san
-ne2sä
nes2c
+ne2sei
+ne2sev
nesi1e
-nes2k
ne3ska
-ne2s1o
+nes1o
+ne2sor
ne2s1p
4n3essi
-5nest
-nes3tei
-net1ak
-net1an
+ne2tad
+ne2t1ak
+ne2t1an
ne2tap
-n3etat
-net1au
+n1etat
+ne2tau
ne2th
net3ha
-ne2tre
-2n3e2tu
+nett4sc
+n1e2tu
net2zi
ne2u
-neu3c
+neu1c
neu3g
-5n2ew
+2n1eup
+n2ew
2n1ex
3nez
1né
2n1f
-n3fä
-n3f2e
-n5fi
-nfi3le
-nf3läd
-nf3lin
-n3f2o
+nf1ak
+nf2ä
+nfä4s
+nff4
+n3fi
+nfi4le.
+nf4l
+nf5lin
+nflös4
+nf2o
nf4r
nft2o
-nft4s3
-4ng
-ng2abs
+nft2s3
+nft4st
+n2f1u
+4n1g
n2g1ac
-n2g3ad
-nga2ge
+ng1ad
n2g1ak
n2g1a2m
n2g1and
-n4ganl
+ng2anf
ng1anz
-n3gap
-n4garb
-n3gas
n2g1äl
-ng5d
-n3ge
-n4g5ein
-n5g2en
-ngen4da
-nge5nerw
+ng3d4
+n3gef
+n2g1ein
+ng2en
+ngen2a
+ngens2
+n3ger
nge4ram
-n4g5erse
-n5ges
+n4g3erse
+ng6es
+nges2t
+nge4zän
ng3g4
-ng5ho
-ng5hu
+nggeschos8
+nggescho7sse
+ng3hu
n2g1i2d
-ng4lad
-ng3lein
-ng3lo
-ng3lu
-n4g5m
+n3gläs
+n2glic
+n2glo
+n3g2loc
+n2glö
+ng3m
+n2gn
ng3ne
-n2g1or
+ng1or
ng3rat
-ng3räu
-ng3rein
-ng3rev
ng3roc
-ng4s
-ng6s1c
-ngs3e4h
-ng3send
+ngro3s
+ng2s
+ngs1c
+ng4s3e4h
ngs3pa
ng3ts
-n2gue
n2gum
-4n3h
-n5han
-n5har
-n5hau
-n5hä
-n5he
+2n1h2
+n3han
+n3har
+n3hau
+n3hä
+n3he
nhe2r
+n3hu
1ni
-3ni.
-3ni2a
-ni3ba
-nib3b
-2ni2d
+3nia
+nib4l
+nibu2
+nich8ters
+n1id
+ni2de
ni3de.
-ni3di
ni3dr
-n2ie
+n4ie
nie3b
-nie3fr
ni1el
nie3l2a
nie4n
-ni5ene
+ni3ene
ni1ero
-ni3fa
-nifi3
-3nig
nig2a
-4n3i2gel
-ni2g3r
+2n3i2gel
+nig3r
+ni2gre
3nik
-nik1al
-ni2kä
-nik3ing
+ni2kal
+ni2kar
+ni3ker
+ni4k3ing
ni3kl
+nikma3
ni2kr
-3nil
-n2imm
+3n2il
nim2o
-4n3imp
-3nin.
-nin2a
+4n1imp
+nin1
+3n2in.
+n2in4a
4n3ind
2ninf
-3n2ing6
-4n3inh
-nin1i
-4n1ins
-4n3int
-2n3inv
-3nio
+3n2ing4
+4n1inh
+ni2nor
+2n1ins
+n2ins.
+4ninse
+4n1int
+2n1inv
ni2ob
-ni5ok
+ni3ok
ni3ol
-ni3os
+n2ip
+ni3ra
3n2is
ni4schw
-nis1e
-niso2
-nis1p
+ni2s1e
+ni2s1p
+ni3spi
nis5s2
-nis3sz
ni2stu
+ni3stun
ni2s1u
2nit
-ni3ta
ni1th
ni2ti
-ni3to
ni3t4r
nit2s
ni3tsc
nit4tec
-nitt6sa
+nitt4sa
ni3tu
-3niu
-3ni3v
+ni3v
3nix
-2n1j
-4n1k
+n1j
+2n1k
n2k3ad
n2k1ak
n3k2al
n4k3alg
-nk1apf
-nk1arb
-nk1arm
-nk3arti
-nk1au6s
-nk1äh
+nk2am
+n2kans
+n2kau4s
+n2käh
n2k1är
-nk1ec
-nk1ein
n4k3erfa
+nk4erg
nk1inh
n2k1ins
-n3kir
-n5klag
nk3len
nk3les
-n2k3li
-n3klin
-nk4lu
-nk5lun
-n3k4na
-nk3ne
-nk3nor
-n3ko
-nkor5d
-n4k1ort
-nk3rät
-n4kre.
-nk3rede
-n3kri
-nk3ro
+n2klie
+nk2lo
+nk2lu
+nk3lun
+nk4na
+n2kne
+n2k1ort
+nk2öf
+n2köl
+n2k3ro
nk2sal
-nk2spa
-nk3spo
-nk5sti
+nks2ei
nk3s2z
-nk2ta
-nk3ti
-nk4t5i2t
+nk2tak
+nk2tan
+nkt1it
nk4top
nk2tru
-6n5l
-4n3m4
+2n3l2
+2n1m4
nmen2s
4n1n
nna2be
n2nada
n4n1all
-n2nan
+n2n1an
n2nau
+n3nä
nn3d
-n3n2e
-nn3ein
-n4n3eis
-nn3ele
nnen3g
-nne5p
-nne2rö
+n4nents
+nn2erh
+nn2erk
+nne2rö4
n4n3er4wa
-nn3er2z
-nne2s
-nnes1e
-n5neu
+nner2z
+nne2s1e
+nn2ex
nn3f
-nn3g
+nng4
n3ni
-nno3b
+n2nof
nn1o2r
-nn5se
+nn3se
nn3s2p
-nn4th
-n4n1uf
+nn2th
+n2n1uf
n2n1unf
nn1ur
1no
-5no.
-n2obl
+3no.
+3nobl
no2bla
-3noblo
+n2o3ble
2n1obs
no1c
-2no2d4
+2no2d
no3dr
-2n1of
-4n3o2fe
-2nole
+n1of
+2n3o2fe
+n3ole
no2leu
-n4om
-nom4e
n2on.
-no3n4a
3n2opa
-2nopt
-2nor
3nor.
nor2a
no2rad
no1rak
no3ral
-nor4d5r
+2norc
+nor2d5r
3norh
+3norm
3nors
n1ort
3n2os.
-no5se
no3sh
-3n2oste
-n1osth
-nost4r
-no5tab
+no2sp
+no4ss
+n2oste
+nost1r
+2nostv
+no3tab
no2tä
-no4t1ei
-no2t1el
+no4t3ei
+no2tel
+no3t3h
+no4tha
no2t3in
no2t1op
no2tr
3nov
-4n1o4x
+3now
+2n1o2x
3noz
2nöd
-2n1ö2f
-n1ök
-4n1öl
-4n5p2
-npa4g
+2nö2f
+4n1ö4l
+nö4s3s
+2n3p4
+npa2g
npsy3
2n1q
-4n3r2
+2n3r2
+nra4s3s
+nräu3s
nre3sz
-nrö4s1
-n5ru
-4n1s
-n2s3a2d
+nrö2s1
+6n1s
+n2s1a2d
n2sall
-n3sand
+n2sang
+n2sant
+n2saus
+n3sav
n2s1än
+nsä4s
n2s1äus
-n5sche.
-n5sches
-n5schi
-n6schlic
-n5schr
-n6schro
+ns2ca
+n6schef
+n4schro
nsch7werd
-ns1e2b
-n3sec
+ns1eb
ns1e2d
nseh5ere
-nseh3i
n3senk
nsen4sp
-n2s1ent
+ns1ent
n2s1ep
ns1erf
-n2s1erg
+n4serfo
+ns1erg
+n2serh
+n3seri
n2s1erk
n2s1erö
-n2s1ers
+ns1ers
n2s1erw
n2s1erz
nse2t
-n4s1eta
+n2s1eta
n3sex
+nsfi4l
nsho2f
n2simp
n2s1ini
nsi2te
+nsi2tr
ns2kal
n2s1op
n4s3ort.
+nsp4
+nspas2
n2spat
-ns4pei
-n3spek
+n2sph
ns2pi
+n2spo
+ns3pon
n2sprä
n4s3prie
n4spro
ns3s2
-nst1ak
-n6stat.
-n6s3tate
-n4stau
-n5s2te.
-n4stech
-nst3eif
-n5stel
+ns2t1ak
+n4stat.
+n4s3tate
+ns2tau
+n5s4te.
+n4st3eif
+n5s4tel
ns4tem.
-n5s4ten.
+ns4ten.
n4stent
ns2ter
-n5s4tes.
+ns4ter.
+nst4erö
+ns4tes.
n5steu
-n4stor
+nst5opfe
+ns2tor
n4strac
-nst4ü
+ns2tum
+nst2ü
nstü1b
+n2sty
ns2um
n2s1un
+ns2ung
ns2unr
-ns3zi
-4n1t
+n4s3zi
+2n1t
nt3abs
-nta3c
-nt2al
+n3t2a3c
+n3t2al
nta3m
-nt1ang
n4tanza
nt2arb
-nt3ark
-n5tarm
-nt4as
+nt1ark
+nt2arm
nt4at
-n4t1auf
-n3taur
-n3taus
nt1äm
n2t1äu
-n3te
-n5te.
+n3te.
nte3au
nte2b
nt1ebe
nte1e
nte3g6
-n4t1eh
-n4teig
-n4t1ein
-ntem3p4
-n5t4en
+nt1eh
+n2teig
+n3t2en
+nt4ene
nten6te.
-nt5ents
-n5t4er
-nte3ru
-n5tes
-n6t3ess
-n5tet
+n3ter
+nt4ern
+nt4ers
+nt4ert
+n2t1ess
+n3tet
+nteu3
nte3v
-n2th
-n3the
-nt1hi
-nt1ho
-n3thol
-n5thr
-n5t4hu
+nt2her
+n2t3ho
+n3thr
+n3t4hu
nti3k4l
n2tinf
n2t1inh
ntini1
-n5tit
+nt2ins
+n3tit
+ntmen2
ntmo2
-n5to
-nto5me
-nton4s1
-n3tö
+n3to
+nto3me
+nton2s1
+ntras3s
nt3rec
-n5tree
nt3reif
-n5t4rep
+n3trep
nt4rig
-n2t3rin
-n5trop
+n3trop
n2t3rü
+n4t1s
nt3sa
-nt3s2o
-nt3s2p
+nt4sau
+nts2o
+nts2p
nt4s3par
nts2t
nt4sto
-nt3t
-n3tu
+3n4tu.
ntum2
+ntu2ra
+ntu4re.
+ntu4res
nt3z2
-1nu
-nu1a
-nu4ale
+1nu.
+1nu1a
nu3ar
-nu3as
-nubi3
-2nuc
+nubi1
+1nuc
+1nud
3nue
nu2es
-nu3et
nuf2
nu2fe
+1nug
2n1uh
-3nu3k4
+1nui
+nu3k4
n2um.
-2n5umb
+2n3umb
2numf
2numg
3numm
2numr
2n1ums
-2n5umz
-nu4n
-n1una
-2n1und
+2n3umz
+nu2n
+2nuna
+1n2ung
3nung.
-n1ungl
+n3ungl
2n1uni
2nunt
+1nuo
2nup
2nur
-n2u2s
+3nu2s
nu3sc
nu3se
nu3sl
-nu3spo
-nu6s1t
-nu2ß
-nu2ta
-nu3te
+nu4s1t
+1nu2ß
+1nut
+nu2t1a
nu2t3r
-5nü.
-2nü2b
+1nuu
+1nux
+1nuz
+3nü.
+2nü4b
nür1c
3nüs
1nüt
-4n1v2
+2n1v2
n3ver
-n3vi
-nvol7ler
4n1w
-n3wa
-nwa5re
+nwei4st
2nx
1ny.
1nyh
@@ -8785,86 +8742,88 @@ n1yo
1nyr
1nys
1nyw
-4n1z
-nza2
+2n1z
n2zad
-n2z1ag
+n2z1a4g
n2zan
-n2z1ar
n2z1au
n2z1än
-n2z1är
-n2z1ec
+n2zär
+nz1ec
n4zense
+n4zentw
n4zentz
nz3erwe
nzi2ga
n2zinh
nz1ini
-nz1of
-n2z1or
-nz3th
-nzug4
+n2zor
+nz2öl
+nzug2s
+n2zurk
n2z1wa
n2z1wä
-nz1wer
-nz1wet
-nz1wir
+n2zwö
n2z1wu
-nzzol3
ño1
-4o.
2o3a2
-o5abs
+o4abi
o4ac
oa3che
oa3chi
o4ad
oa3de
+oa4g
o4ah
o4a3i
oa3ke
-oak5l
+oak1l
o4a3la
o4a3mi
oanne4
-o4ar
-o4a3s
+o2ar
+o2a3s
3oase
-o5a4si
+oa4si
o4at
oa3te
+o5au
o1b
ob2al
+2oban
o3bar
2o3b2ä
2obb
ob2e
-2o3be.
+2obe.
+2obea
ob3ein
-2oben
+2o3b4en
+oben3d4
oben3se
-o2ber
+ober3in4
obe4ris
-obe6sp
-2obi
+2obew
+2o3b2i
+obi2t
+ob3ite
1obj
ob1l
-ob3la
-o2b5li
-1obm
-2obo
+o2b3li
+2o3blo
+2o3bo
o2b3re
-ob2s2
-ob3sh
+o3bri
+ob3s2h
ob3sk
-ob3so
-ob3sp
-ob4sta
-ob3sü
+obs2p
+ob2sta
2o3bu
+obus3s
2o3bü
+2oby2
2oc
+oc1c
o1ce
och1a
ocha2b
@@ -8872,43 +8831,54 @@ o1che
oche4b
o2ch1ec
och1ei
+ocher4k
och3l
-och5m
+och3m
och1o
-och1ö2
+och3ö2
och3r
ocht2
och3te
-och3to
o1chu
ochu2f
-och3w
-ock2e
+och1w
+o1ci
+ock2er
ock3sz
+o1cl
o3co
-o1cr
o1ç
-2o1d
-o3dar
+o1d
+o3d2a
+od2dr
o3deb
-o3de3i
-ode2n
-oden1e2
-ode3sp
+ode2c
+o3d2e1i
+odein3
+ode2n1
+odene2
o3dex
+2o3dia
o3dir
+o3div
+o2don
odo4s
-4odr
+2odr
o2dre
-od1t4
-4o3du
-2o1e2
+odt4
+2o3du
+2o1e
+oe2b
o2ec
-o3en1
-o2e3s
-oe3t
+oe2d
+oe2h
+oe2l
+oe2n1
+o4es
+o2et
o3et.
o3ets
+oe2x
o1ë
2ofa
of1ac
@@ -8917,27 +8887,29 @@ of1au
o2f1ei
of2en
o3fer
-ofes3
of2f1a
of2f1in
of2fir
1offiz
-of2f3l
+of2f5l
of2fo
of2f3r
offs2
of2fu
2ofi
-ofi3k
of3l
of1la
+of4lä
+of4lö
2ofo
-o1f1r
+2o1f1r
of3ra
of3rä
-of4s1a
-of2se
-of2sp
+of4rü
+ofs1a
+of4sam
+of2spe
+of2spr
of2s1u
2oft
of2tei
@@ -8947,139 +8919,130 @@ o2g1ab
oga3d
og1ala
og1ang
-oga4t3
-oga5te
-o2g5ei
+o2g1ei
oge2l1i
+ogenmas6
o3gh
ogi2er
-og3ins
-o2gl
-o3glo
-o3g6n
-ogoi5
-og4s2
-og5sp
-og5ste
+og2lo
+o3g4n
+ogoi3
+og2s2
+og3sc
+og3si
+og3sp
o1ha
o1hä
o1he
-o3he.
-oh1eis
-o3heit
-o3hem
-o3hen.
-o3her.
-o3here
-oh1ert
-oh1erz
-o3hes
+o2h1eis
+o2h1ert
+o2h1erz
o1hi
ohl1a
oh3lec
ohl1ei
-oh5lem
-oh5len
+oh3lem
+oh3len
oh3lep
-ohl3erh
-oh5les
-oh3li
+oh4lerg
+oh4l3erh
+oh4lerw
oh3lo
-ohls2
+ohls2e
oh2lu
-oh3m
-ohn3a
+3ohng
oh2ni
+1ohnm
oh2n1o
o1ho
oho2la
oh1o2p
-o2h1ö
+o2h3ö
ohr1a
oh4rin
-oh3ta
+oh1ro
+oh3t
o1hu
oh1w
-ohwa5
2o1hy
2oi
o1i2d
o3ie
o1im
oimmu4
-o1i2n
-o4i3ne
-oi4r
+o1in
+oi2r
o2isc
o3isch.
-oi5se
+oi3se
o1ism
+oiss2
oi4st
2o1j
2o1k
-oka3i
oka2la
-okale2
-3o4kel
-o3ki
-oki4o
-ok3lau
-ok3lä
+okale4
+3o2kel
+oki2o
+ok1lä
+ok4n
+4okr
ok2s1p
okt4
2ol
o1la
+o2lab
o2l1ak
ol2ar
ol1auf
o1lä
ol4dam
-ol4d5r
+ol4dr
+ole3e
ol1eie
ol1eis
+oler2
ol1ex
o1lé
-ol4fa
-ol2f3l
+ol2fa
+ol2fl
olf1r
ol2fra
-olf3sp
-olge4ne
ol2gl
ol2gr
ol2i
-oli5en
-oli5f
+oli3k4
oli3tu
ol2kl
-ol2k3r
+olk3r
+ol2kre
ol2lad
ol2lak
oll3ans
ol2las
+ol2lau
ol2läd
ol4l1ec
ol2l1ei
ol2l1el
oll5ends
-ol4l3erk
+ol4lerk
oll5erwe
-ol3les
-ol3lo
-ol2lu
o3lo
-o5l2of
-olo3p2
+ol2of
+olo1p2
ol1ort
-o1lö
-ol2pr
-ols2
-ol4str
+ols2t
+ol2str
o1lu
+3oly
+1olym
ol2z1a
-ol6z3ern
+ol4z3ern
ol2zin
+ol2zw
2om
+o2mab
oma4ner
om2anw
om1art
@@ -9089,116 +9052,113 @@ ome3c
o2m1ei
o3m2eis
o2mel
-o5men.
-om3ene
+o3men.
o2mep
o2meru
om1erz
-omie4t1
-omil3l
+om2es
+omiet1
o2m1ind
om1ing
-o3mini
-om1int
-omi3te
+o2m1int
om3ma
-om3me
-omme4r
om1org
om3pf
-omp6l
oms2
-om3sp
-o4m3un
-o5m4ung
+omtu3
+o4munt
omy1
-2on2a
-on3a2b
+2ona
+ona2b
o2nae
-on3ak
o3nal
-on3ap
-o2n3ar
-on4are
+on1ap
+o2narb
+on2au
on3aus
-2o3nä
+2onä
onbe3
2onc
+onderer5
2one
-on4eh
+one2i
one2n1
onen3g
o2n1erb
-on1erd
+o2n1erd
+on1erg
on1erö
o3nett
-on5f
-ong4
-on3gl
-ong7sc
-ong5st
+on3f2
+on3g2l
+ong4r
+ong3s
4o3ni
-o5ni.
-oni3d
-o4ni4kr
+on2i3d
+o4nikr
o4n1im
on3ing
-on5k4
+on3k2
onli4n
onlo2c
-on3nan
-o3no3
-o4noke
+on3n2an
+on3n2e
+ono1
+o3nod
+o2noke
on1orc
-ons1a2
-ons3as
+ono3s
+ons1a
+onsa4g
on2seb
onse2l
+on4sh
onsi2d
ons3l
ons1p
+onst2h
on3t2a
-on6t5end
-ont5erw
-on2t1ri
+on4t3end
+ont3erw
+ont2h
+on2t3ri
+o1nu
2onuk
-on5v
+on3v
1ony
-on5z
+on3z
o1ñ
-oo2k
-ook3l
+oo2k3l
o1op
o1or
oor3f
oo4sk
oo2tr
-oot4st
-2o1ö
+2o1ö2
o1pa
-opa1b4
+opab4
o2p3ad
-op1akt
-o1pä
-o1ped
+op3akt
+o1pec
o1pei
-o3pek
o1pe4n
2opf.
-op2f1a
+op2f3a
op3fah
-opf3l
-opf4li
-op1flu
+op4ferd
+opf5erde
+opf1l
+opf3la
op1flü
4oph2
+o3phe
o1pi
-opi5a6
+opi5a4
opi3er.
opi5ers.
opin2
op5lag
-op3le
+o2p3le
op3li
2o3po
op4pl
@@ -9206,230 +9166,226 @@ op2pr
2o1pr
1opsi
op3sz
-1opt4
-op3th
-op3tr
-o1pu
+1op3t4
o1q
2or.
or1a
or3a2b
-o1rad
-or3adr
2orak
2oral
-ora3li
-o4r3alm
+o2r3alm
or4alt
+3or2am
+or2and
o2ranh
-orani1
or3arb
o1ras
or3att
-o3r2ä
-or3änd
-or3ät
+o3rä
+or1änd
+or1ät
or2bar
+orb2l
or1c
2orca
or2ce
-2or2da
-ord1am
-ord3ele
+2orda
+or2d1am
+or2dau
or4d3eng
or2deu
or2d1ir
+or2dit
1ordn
or2do
+2ordr
2ords
+or2dum
2ordw
4ore
-ore4a
+ore4as
o2r1eck
-o5ree
o2r1ef
ore2h
or1eig
o2rein
-o2r1er
-or3eth
+or1er
+o2rerf
+or1eth
2orf
or2fle
or3g4a
2orget
or3g2h
2orgia
+orgi1e
or2gl
or3gle
+or2gn
2orh
-o1ri
2o3ric
+o4rient
o3rier
-4o5ril
-4orin
-or1ins
+4oril
+4orin1
2orit
-o5riz
-or3k2a
-or4k3ar
-ork1s
+ork2a
+or2k3ar
+ork3s
2orm
-or2mor
-or3na
+or4mans
+or4ment
+or5ne.
or3n2o
2o1ro
-or3oly
-oro3n4a
+oro3n2a
2o1rö
2orq
2orr
+orr4a
or3rh
-2ors4
-or5sa
+2ors2
+or3s4a
orsch5li
or3sh
+or3si
or3sz
-or2ta
-or3tad
-or4t1ak
-ort3an
-ort1au
+or2t1ak
+or2t1an
+or2t1au
+or2tär
+or2tef
ort3eig
-ort3ein
or4t3ent
or4t3ere
-or4t3erf
-or4t5ev
-or4the
-or3ti
-or4tin
+ort3erf
+or2t3ev
+or2the
ort3ins
or4t3off
+or2tor
or2tö
-or4t3rau
+or4trau
or4t3räu
ort3re
ort3ric
-ort3sc
or2t1um
o3ru
or2uf
o4r3un
-o5rus
-or3ü
-2orw
+orus3
+o2r3ü
o2rya
o1s
-o3s2a
+2o3s2a
os3ad
os4an
-os2c
-2o3s2e
-ose3ei
-o4s3ei
+o3sche
+2o3se
+ose3e
+o2s1ei
ose2n
-o2sé
+o4sents
+2osh
o3s2hi
-o3sho
2osi
-osit4
-osi3tr
-o3s2k
-os3ka
-os3ke
-os3ki
+o3sk
+o4s3ka
+o4ski
+2os2kl
+2os2ko
os2lo
-o2s1p
-o4sper
+2oso
+2os1p
+o2s3per
o3s2po
-os2s3a
-os2sä
-os2seg
-os2sei
-oss3enk
-os3sent
+os2pr
+os2sa
+oss3and
+os4sä
+o6ssel
+o3ssem
+oss3en4k
+o3ssent
oss3enz
-os2seu
-os4s3o
-os4s3p
-os6st
-oss1ta
-oss1to
-oss1tr
+os2s3o
+os4son
+os2s3p
+os4s3t
+os2su
os2t
-o4s4t1a
-osta2b
-o5stal.
+ost1a
+o2sta2b
+o3stal.
+o4stam
+ost4art
+osta4s
o4sterd
oster3e
ost5er6we
ost3h
-o5stie
-o4stin
+o2stin
ost1ob
-os3ton.
-o5stons
-o4st3rä
+o4s3ton.
+ost3ran
+o2st3rä
ost3re
ost3rot
-ost1uf
-osu4
+ost3uf
+2osu4
+2o3sy
o3s2ze
o2ß1el
-o2ß1enk
+o2ß1en2k
o2ß1enz
-oße2r
-o2ß3ere
+o2ß1ere
o2ß1erf
-oß3th
+oß3t
2o1t
-ota3m
+ota2go
o3tark
o2t1au
ot3aug
-otau6s
-ot1är
-4ote
+otau4s
+o3t2ax
o2teb
-o3te1i
-ote3i6n
-ote4l1a
+o3t2e1i
+otei4n
+ote2l1a
+ote4lei
ot4em3
otemp2
o2t1erw
-4oth
-ot2he
-ot3hel
-o4t1hi
-ot1hos
-o4thr
-ot2i
-o2t3i2m
+4ot2h
+ot4he
+ot5hel
+o4t3hi
+ot3hos
+o2thr
+o2t1i2m
+ot2in
o4tl
-otli4
-4oto
+otli2
+ot4ol
ot1opf
ot2or
+oto2ra
o3tra
o2t3re
ot3rin
-ot3rut
+ot2sa
ots1p
-ot4spa
-ot3spe
+ot2spa
ots2t
-ot5stra
ots3tri
-ot2tau
-ot3te
-ot4t3erk
+ot4terk
+ot2th
ot2t3r
-ott3se
-2o2u
+o2u
oub4
ou2ce
-ou3e
ou1f4l
+oug2
ou2ge
ou3gl
o3uh
@@ -9438,165 +9394,171 @@ o3um
o3unds
oung5
oun4ge.
-oung7s2
-ouri4e
-our6ne.
+oungs2
+o4up
+2our
+ouri2e
+our4ne.
ou3s2i
-ou5s2t
-ou3te
+ous2t
outu4
+2ouv
2o1ü
o1v
+2ovi
oviso3
-2o3vo
-2ow
-o1wa
-owa5re
-o1wä
-o1we
+2ovo
+2o1w
o3wec
-ow1ef
owe2r1
-o1wi
-o1wo
-o1x2a
+o3wi
+o1x
+ox2a
ox2e
-o1xo
+1o2xid
+ox3l
o2xu
1oxy
+o1y2en
o1yo
-2o1z2
-oz4e
+2o1z
+oz2e
+ozen4ta
o3zi
-ozon3a
-ór3
+ozon1
+órd2
ö1b
+öbe2la
öbe4li
+öb2l
ö2ble
ö2b3r
2öc
ö1ch
-ö4ch3l
+öch1l
ö2chr
öchs2t
öch4str
-ö4cht4
+öcht4
ö1d
-ödel5l
-ödi3en
-ö2du
+ödi3
ö1e
+1öf
öf2fl
öf3l
-ög3
ögen4s1
-ö2gl
-ö2gr
-ög4s
-ög4u
-2öh
+ög3l
+ög3r
+ög2s
ö1he
öh3l2e
-öh3m
-öh1ri
+öh3ri
öh2s
ö1hu
-ö2k
-ö3ke
-öko5
+ö3ig.
+ö1ke
+ö2ko
ök3r
ök2s
-ö6l
3öl.
-öl1a
+öl1a2
öl1ei
öl1em
öl2f1ei
-ölf3s
öl1im
öl1in
-öl2k5l
-öl5la
-öl4nar
+öl2k3l
+öl3la
+öllma4
+öllmas3
+öl2nar
öl1o2
öls2
öl3sa
öl3sz
-öl1u
+ö2l1u
öl2ung
-öl3z2w
+ölz2w
öm2s
2ön
-ön3d
ön2e
ö3ni
+önn2e
+ö1nu
öo1
ö1pe
öpf3l
-ör3a
+ör3a2
ör1c
-örden3
ör2dr
-ö2r1ec
+ö2r3ec
ö2r1ei
ö2r1e2l
ör2erg
+ö2rerl
ö3r2erz
ör2f3l
ör2gl
-ö1ri
ö2r1im
ör2kl
+örner2
ör1o2
örs2e
-ör3sk
+ör3s2k
+ört2e
ör2tr
-ö1ru6
+öru4
ö2r1une
ö1s
ö2sa
-ö2sc
+ö2scha
ö4sch3ei
-ösch3m
-2ö5se
-ö6s1ei
+ö2schl
+ö2sch3m
+ö2schw
+ö2s1ei
+ös4en
+ös4es
ö2sp
+ö3s2s
ös4s1c
+ös3ses
+ös3set
ös4st
-ös2t
-ö4sta
-ö5stet
+ös4t
+ö2sta
+ös4u
ö1ß
2ö1t
ö2t3a
-ö3te
-öte4n1
+öte4n3
+öt2h
öt2sc
öt2tr
ö1v
ö1w
-öwe4
ö1z
öze3
özes4
-4p.
+p2a
1pa.
1paa
-1pack
+1pac
pa3da
-pa3fa
+pa2dr
+pa2el
pa1f4r
-pa3g2
+pag4
+pa3gh
pa1ho
1pak
-pa1kl
+pa1k4l
pak2to
-1pa1la
+1pala
pala3t
1palä
-pa5li
+pa3li
2palt
-p4an
pa2nar
pan3d
pan4ds
@@ -9604,150 +9566,148 @@ pa3nei
pa2neu
pan3k4
2panl
-3pano
+3pa2no
pan3sl
+pant2
3panz4
1pap
+papi2
+papieren8
papie8r7end
-1parad
+3para
pa2r3af
par3akt
+1parc
+pa5reg
+pa5rek
2par2er
2parg
+pargel6d
1park.
par4kam
par4kau
-par4kl
+par2kl
par2kr
-pa2ro
-1parol
+1paro
2parp
1partn
1party
par3z2
-pa3s2p
+pa1s2p
pa2ßu
-p4at
-pa5ta
+1pat
pat4c
-pat2e2
-1pati
-1pat4r
-1pau3
-p1auf
+pat4e2
+pat4r
+1pau
+p3auf
pa3uni
-1päc
-1päd
-1pärc
+1pä
+3päc
+3päd
+3pär
+3pä4s3
pä4t1e2h
pä4t3ent
-pät1h
+pät3h
pä2to
-pät5s
+pät3s
2p1b
pbe1
2p3c
-4p1d
+2p1d2
pda2
+p2e
1pe.
-pe4a2
+pe2a
pea4r
-1ped4a
-peed3
-2pef
+1ped
+pe2en
+pef4
pei1
-4peic
+2peic
pe1im
-3peit
-2pek
pekt4s
+2peku
1pel
-pe4l3a4
-pel5d
+pe2l3a4
+pel3d
pe2let
-pe3lin
+pe2lex
+pe3li4n
pe4l3ink
-pel5lä
pel3l4e
pel3li
-pel3to
1pem
-pena6
-pe3n4al
+pena4
+pe3n2al
pen3da
pe4nen
1penn
+pe2n1o
pens2
3pensi
1pensu
-pe2nu
pen3z2
+1pep
pe1ra
-per4an
-1perle
-per6na
-perne4
-per4ra
+per2an
+1perl
+per4na
+3pero
+per2ra
perr3an
-per2rä
-per4rie
-5pers
-perwa6
+per4rä
+per6rieg
+3pers
+perwa4
pe3sa
-pes4e
-pese2n
-pes5s4
+pes3s2
3pet
1pé
-2pf
4pf.
-p2fab
-pf1abe
+p2f1ab
+p2fad
p2faf
pf3ai
p2f1ak
pf1ans
-p2fa6r
+p2fa4r
pf3are
p2f1au
+4p3fe.
p2fei
pf1eim
pf1ein
-pf1eis
-pfe2l
p3fen.
p2fent
p3fer.
pf2erw
-p3fes
+p3f2es
pff4
p2f1ins
-p2f5lä
+p2f3lä
pf3lei
pf3lie
pf3lo
-pf3lö
-pf5lu
+pf3lu
p2for
pf3r
pf1ra
-pf1ri
pfs2
pf3sl
-pf3sp
pf3sz
-pft2
-pf3th
+pf3t
2p1g
pgra2
1ph
4ph.
-2phab
+ph2a
2phä
2phb
4phd
2p1hei
-phen3d4
+phen3d2
phen3s
2ph1ers
2phf
@@ -9755,173 +9715,179 @@ phen3s
phi2ka
4phk
ph2l
-2ph3m
+2phm
2phn
p3hop
-4phö
+2phö
ph4r
2phs
-2ph3t2
-4ph5the
+ph3t2
+2phthe
phu4s
-4p1hü
+2p1hü
2phz
-pi4a5
+pi2a3
+pi3as.
pi3chl
p4id
-pie3fr
+piegelei8en
pi2el
-pie4la
-5pi2er
+piela2
+3pier
+pie3t
+3pik
1pil
+pi3le
pil4zer
-pi2na
pin2e
-ping5s
+pingen4
+ping3s
3pinse
-pi2n1u
pi2o
pi3oi
pi3onu
+3pip
pi2pe
-pi5ri
-1pis
-2piso
+pi3ri
+3pirin
+3pis
+4piso
pis2t
-pi5sto
-pit2a
+pi3t2a
pit2s
pi2z1in
-p1je
-2p1k4
+p1j
+2p1k2
pku2
pkur1
1p2l4
-4pl.
+2pl.
3p4la
p5lad
plan3g
3plä
2ple.
ple1c
-ple4e
p4leg
+p4lem
3ple5n4
-p5lic
-p5lif
-4plig
+2plig
+p4lik
+p4liz
p4lo
-plü2
-2p1m
+2p3lu
+2p1m2
pma1
2p1n
1p2o
po3b4
po1c
+3pod
2p3oh
po2i
po3id
-3pol
+3poin
+3pok
+3p4ol
po2lau
-po5li
-po3ly
-pont4
-po1ob
-po2p1ak
-po2p1ar
+po3li
+po4lor
+2pond
+2ponn
+po1o2b
+po2p3ak
+po2p3ar
po1pe
po2pl
po3pt
po1ral
po1rau
2porn
-por5s
+por4tin
+por4tre
por4tri
-po5s4e
-po3sp
+pos2e
+pos4t
+po2sta
post3ag
-po4stä
+po2stä
po4st3ei
post3ra
po3ta
3pote
-pot2h
po2t1u
po2w
-po1x
+po3x
pö2bl
pö2c
-4p1p
-p2p1ab
-pp5anl
-p3pe
-ppe1e
+2p1p
+p2p3a2b
+pp3anl
+ppe4ler
ppe2n1
-pp1f4
+p2p1f4
p2p1h
p3p2ho
-p2p3l
+pp3l
pp5lan
-p4ple
-pp4li
+pp1lä
+p2ple
p2p3ra
p2p3re
p2pri
-pps2
pp3sa
-pp3sp
ppt2
-pp3ta
p2r2
-3prak
-3prax
+1prak
+pra4s3
+1prax
+p4rä
1präd
1präg
3präm
3präs
-4pre.
+2pre.
2prec
1pred
pre2e1
1prei
3preis
+prei4ss
2p3rer
-3pres
+3p4res
1preß
pri4e
+2prig
1prinz
-2prit
1p4ro1
3prob
-pro3be
2proc
3prod
3prog
3proj
-3proto
+2pros3s
+3prot
1prüf
2prün
-2ps
+2p1s
4ps.
ps4an
+p3se
p3s2h
-4psi
-p2s1id
-p2s1ö
-ps2t
-p5ste
-p4st3r
+ps1id
+p2sö
+ps2po
+ps2te
+p2st3r
p2stu
-ps3tur
-3psy
+3p2sy
ps2ze
2p1t
-p2t1a
+pt1a
+pt2ab
pt3alb
-pt3as
pt3at
p3te
-p5te.
p4t3ec
p4t1ei
pte4l
@@ -9930,105 +9896,93 @@ p4t1ent
pt3erei
p4t1erw
p4t1erz
-p5tes
-p2t1h
-pt1in
-pto5me
-p2tos
+p2th
+pt1in1
+pto3me
+p4tos
+pto2w
+ptpo4
p2t3r
-pts2
-pt3sa
-pt3so
-pt3sp
-pt3st
-pt3su
-pt3t
+pt1s2
+ptt2
pt1um
p3tung
pt1urs
-p2tü
+p2tü4
3p2ty
-pt3z2
-pu3as
-1pub4
+pt3z
+1pu
+pu1a
+pub4
+2puc
pu2dr
-1puf
2p1uh
-pul4sp
-1pulv
-1pum
-1pun
+pul2sp
2pund
pun2s
2punt
-1pup
-pu3ri
-pu2sc
-1put
-3put2s
-3putz
+2pur
+3put
+put2s
1püf
2pül
+pün2
2p1v
2p1w
+pwa4r
3py1
py3t
-4p1z
-q2u4
-3quen
-que3rel
+2p1z
+qu4
1queu
-qui5s
-6r.
+qui3s
1ra.
ra2ab
2r3aac
r3aal
-ra1ar
+ra3ar
r1ab
ra2bar
rab2bl
2rabd
-ra3ber
2rabf
2rabg
-r4abi
-ra1b4le
+1r4abi
+ra2br
2rabs
2rabt
-2rabw
+2r3abw
1raby
ra1ce
2r1acet
-ra3che.
ra4cheb
-ra3chet
-rach4t3r
+ra4chin
+racht3r
+rach6trä
ra2chu
r2ack
+1r2ad
+r4ad.
rada2
ra2dam
2radap
3radf
-ra3di
-3radle
-ra4d3r
+3radl
+r3a2d3r
rad3t
1rae
-ra1er
r2af
-ra4f3ar
+raf3ar
ra2fer
-r2ag
ra3ge
ra3gle
-ra2g5n
-r2ahm
+ra2gn
+3r2ahm
+4raht
2raic
-rail2
rail4l
-r3air
-ra3ke
+2r3air
+1rake
3ra1k4l
ra2kre
ra2kro
@@ -10036,631 +9990,674 @@ ra2kro
3rakü
r2al
r4al.
-rala4
-ra4l3ab
+ra2la4
+ral3ab
r3alar
ral3b
3r4ald
ra3le
-4ralg
+2ralg
+r4ali
rali5er.
rali5ers
-ral3k2
+ralk2
+ral3la
rall2e
+2rallg
2r3alm.
r3alp.
-4ralpe
+2ralpe
r4als
r3al3t
-r4alth
+r4alt2h
ra2lu
3raly
-r2am
-ra3ma
+r2ame
ra2mer
-1rami
+1r2ami
+r2amm
+ram4man
ram6m5ers
ram4m3u
-r3amn
ram2p3l
-2r3amt
+2r1amt
ramt4s
r2an.
4ranc
-r2and
r4anda
r4ande
ran4dep
ran4d3er
-4r5anei
-2r3anf
+4r3anei
+r4aner
+2ranf
1rangi
-4ranl
+rani1e
+ran2kr
+2ranl
2r1anm
-r1anp
+2r1anp
2ranr
-2rans
-r4ans.
+r2ans.
r2ansp
+ran4spa
2rantr
2r3anw
r2ap
2rapf
-ra3pl
-2r1ar
+r1ar
+r2ara
+2rarb
3rarei
rar3f4
ra2r1in
-r3arz
+r2ark
+r2arp
+2r3arz
+r2a3s2
r4as.
-ra3s4a
+ras4a
ra4schl
+ra5se
+ra5si
+ra4sk
+2r3asph
+ra4ssi
2raß
1rat
r4at.
-ra2ta
-ra2t1ä
+ra2t1a
+ra3ta.
ra3te
-2ratm
+r3atl
rat4r
-2ratta
+rat2st
+2r3atta
4rau.
3raub.
-rau3bl
4raud
-rau3en
-2rau2f
+rau3e2n
+2rauf
2raug
+r2auh
+3raum
rau4m3ag
rau4man
rau2mi
-ra3umsa
+3rausc
2rausg
-rau4sp
-raus5se
+rau2sp
+2rauss
+rau4sti
raus3tr
raut5s
1raü
r2ax
-raxis1
+raxi4s1
räch4s
-r2äd
+3r2äd
4räf
4räg
-4räh
+2räh
2räm
3rän.
3räni
+3räns
2r1är
+r2är.
rä3ra
-r3ärz
-rä4s1c
-rä4st
+rä4sa
+rä4s5c
+rä5sse
+rä2st
3rätse
rä2u
+räu2s
+räu5sche
4räut
2r1b
r2b1ab
-r2b3a2de
+r2b1a2de
r2bak
+rbal3a
rba3re
rb1art
rb1auf
-rb3b4
+rbb2
rb1ech
-r2belä
-r2b1ent
+r4belä
+rb1ent
rbe3r2e
-r3bla
+r3b2la
rbla2d
-rb7lasser
+r8blasser
r4b3last
r3blä
-r2b5le.
-rb5ler
+r2ble.
+rb3ler
+rb2lin
+rb2lö
+rbmas3
rb2o
-rb3res
rb4ri
rb2s
+rb3se
rb4sei
-rb4ser
rb3ska
rbs1o
-rb6stä
-rb5ste
-4rc
+rb3sp
+rb4stä
+rb3str
+rb2u
+2rc
r1ce
r1che.
r1chen
r1chi
rch3l
-rch5lö
rch3m
rch3r
rchs2
rch3sp
+rchst4r
rch3ta
+rch6terw
rch1w
-r1cr
+r1ci
+r1cl
r1ç
2r1d
-rd5achse
+r3d2ac
+r2daf
r2d1ak
-rd1al
-r3dan
+r2d1al
rdani1
-r4d1ant
-r4d3anz
-rd1arb
-rd1ei
+rd1ant
+rd1anz
+r4dap
+r2dei
+rd2ei.
r2d1elb
-rde7me
r3den
-rde5nar
-rdend4
+rden3d2
rden4gl
-rde3r2e
+rde3re
+rder4er
+rderin6s
r4d3ernt
-rdes4
rde3sp
-rdga4
rdi3a2
-rdi5a6l
+rdia4l
r2d1inn
-r2d1it
+rd1it
+rdo2be
+r3don
rd1os
rdo4st
-rd1ös
+r2dö
rd3rat
-rd3rau
+rd4ri
+rdrü4
rdt4
-rd1tr
-rdwe5ste
+rd3ta
+rd3th
+rdwa4
1re
3re.
-re3ad
-rea3g
re3aler
+re2alt
+re2am
re3as
-re5at.
-re5ats
+re3at.
+re3ats
+2reä
re2b1a
-re2b3l
+re2b1l
reb1r
-re4b3ra
+reb3ra
re2bü
+r2ech
rech3ar
4rechs
2reck.
-3reda
+2recki
4redd
-3rede.
2redit
re1el
-re3er
+re1er
3refe
4reff
3refl
3refo
-3refr
3reg
+5reg.
rege4l3ä
-re2gl
-4reh
re2hac
re4h3ent
-reh3l4
+re2h1i
+rehl4
re2h1o
+r2ei.
+rei4bl
r2eie
2reig
-r5eign
+3reigew
rei3l2a
rei3l2i
+reim2p
r1ein
rei3nec
4reing
-4reinn
+r3eink
4reinr
-rein6sta
rein8s7tre
re1in2v
-2reis.
+reister6
reis5tro
-2reiwe
-re2ke
+3rek
+4re2ke
re3la
2r1elb
rel2e
+relea4
re3lei
-re2lek
+2re2lek
2r1elf
re3lo
2r1elt
relu2
-r2em
-re3mo
+r4em.
+r2emi
+4rempf
4remu
-r2en.
+r4en.
r2ena
+rena2b
re3nal
-re3näu
-3rendit
+re2nä
+3rendi
ren3dr
re4n3end
ren4gl
2rengp
re2ni
ren4nes
+r1ense
2r1entl
2r1ents
2rentw
-2r3entz
+4r3entz
r2enz
-ren4zer
re3or
3repe
-5re3po
+3repo
4repp
-3r2er.
-re2ra
-2r3erb
-r4erba
-r4erbo
-r4erbr
-r4erbü
+3r4er.
+2r1erb
+r2erbr
2r1erd
-3rere
-r3ereig
-r4erer
-2r1erf
+r2erer
+r1erf
r1erg
r4ergen
r1erk
4r3erken
-3r2erki
-2r1erl
-5r4erlag
-r5erlau
-r3erlö
+r2erki
+r1erl
+4r3erlau
+2rerlö
2r1erm
+rer2n
2r1ernä
4r3erns
4r3ernt
-3r2e1ro
+r2e1ro
re2rob
r1erö
3r2ers.
-2r3ersa
+2r1ersa
r2erse
2rersp
-r1er5t
-2r3ertr
+r1ert
+r2erte
+2rertr
2r1erz
-3r2es.
+rer5ze
+r2erzy
+3r4es.
re2sa
-res3au
+res3an
3rese
-3resol
-re3sp
+3reso
2ress
ress2e
res6s5erw
-re4stu
+3rest
+res3tem
+re2stu
3resu
-4re2ß1
+2re2ß1
re2thy
re2u
reu3g2
2reul
re3uni
2r1eur
-2revid
-r1e2w
-rewa4
-re3we
-re3wo
-4r3e2x1
+2reü
+2r3evid
+r1ew
+rewa4r
+re2wi
+2r3e2x1
3rez
4rezi
1ré
2r1f
-rfall6s
+rfall4s
rf1ält
+rfä4s3
+rf2äu
r2fent
-r3f2es
+rf2es
+rfgeschos8
+rfgescho7sse
rfi4le.
rf3lic
rf3lin
+rf4lö
r3flü
-r3fre
+r3for
+rf4ru
+rf4rü
rf2sa
rf2s1ä
-rf2se
-rf3sen
-rf4s1id
-rfs3pr
+rf2s1id
+rf2s3pr
rf2ta
-rf3tau
rf3t4r
-r3fu
+rf2u
4r1g
-rg2ab
+r2g1a2d
r2g1ah
r2g1ak
rg2an
-rga5ste
-r3ge
+rga5ssen
+rgas2t
+rga4str
rge4an
rge2bl
rge4l3er
-rg5e4tap
-r4geto
+rgen4z3w
+rge4ral
+rge4tap
+r2geto
rgi4sel
r2glan
-rgleich8s
+rgleich8s7
r2gleu
r2glig
-rg3lo
-rg3lu
-rg2ne
-rg3neu
+r2gno
r2g1ob
r2g3ral
r2greg
-r2g3res
-rg3ret
+r2gres
+r2gret
rg3rin
-rg3s2p
-rgs2t
-rg3th
+rgro5sse
+rg1s2p
+rgs2tr
r1h4
2rh.
-2r3ha
-r4ha.
-2r3hä
+2rha
+r2ha.
+2rhä
3r4he.
3r4hen
r3her
-r3hof
+r2hoe
rho2i3
-2r3hol
+2rhol
2rhö
2rhs
-r2hy
-ri1am
-ri1an
+1ri
+ri3am
ri3at
+rib2bl
ri1ce
ri1cha
-rich3te
-4rick
rid2
ri2dan
2ridol
r2ie
-rieb4st
+rieb4s3t
+rie2fr
ri1el
-ri3els
riene4
-ri3eni
rie2nu
ri1er.
-ri4e3re
-ri3ers.
+ri4ere
ri3e4sti
-rie5te
ri1eu
-ri2fa
-ri4f1ei
-ri4fer
+ri2f1a
+ri2f1ei
+ri2fer
ri2f1o
-ri2f5r
+ri2fr
rif4ter
-3r2ig
-ri4g5ene
+3rig
+5rig.
+5rige
+ri4gene
5rigj
rig1l
4rigr
-rigs2
-r2ik
-ri4k5l
-ri5kle
-ri3ma
+rik1l
+ri4kla
r2imb
2rimp
-rim4s
-rim6sc
-rin4a
-2rind
-ri5n4e
+rim2s
+r2i3na
+2r1ind
+rin4dex
+rin4diz
+ri3n4e
rine1i
2r1inf
-rin2g3l
+rin2fo
+ring3l
rin2gr
-4r1inh
+2r1inh
2rinit
2rink
-1rinn
+3rinn
6r5innenm
4r3inner
-2rins
+4rinnta
+r1innu
+2r1ins
3r4ins.
+rin2so
+rin2sp
r4inspi
2rint
+rin4teg
rin4t5r
-2r1inv
-3r2inva
-ri2o
+r1inv
+r2inva
+2rinve
4r1ir
r2is
-ri3s4a
+ris4a
ri4scho
ri4schw
3risik
-5risk
+rismu2
ri3so
-ri4s3p
+ri4s1p
3riss
-ris4sa
+ris3si
rist5ers
ristes4
-3ri2ß1
+ri6stess
+ri2ß1
r2it
r3i2tal
-ri3ti
+ri3t2i
rit4r
+rit2tr
5ritu
-ri2x1
-4riz
+rix1
1rí
2r1j
2r1k
-rk1all
-rk1aus
-rk1äh
-r3kla
-r5klau
-rk3li
+rk2am
+r2käh
+r3klau
+r2klis
rk4lo
-rk4lu
-rk3nor
-r2k3nu
-rk3rau
+rk2lu
+rk4n
+r2k5nu
rk3räu
r2k3rea
r3kri
rk3rin
rk2s1e
-rk3shi
+rk3sen
rk2sp
rkstati6
rk4stec
-rks1ti
+rk4s1ti
rk2ta
rk4t3eng
rk4t3erf
-rk4t3ers
+rkt3ers
+rk6tersc
rk4t3erw
rk2tin
rk2t1o2
-rkto4b
rk2t3r
-r2k1uh
+rk3tra
+rk1uh
rk2um
-rku4n
+rku2n
rk1uni
-rku6s5t
-2r1l
-r3la
-r3le
+rkus3s
+rku4s1t
+4r1l
+r3l2a
+rl2e
rle2a
+r3lec
+rle2i
+rle2st
+r3let
r3l2i
+r3l2o
+rl2ö
rlös5s
rl2s1p
-rl4s1to
-rl3th
+rl2s1to
+rl3t
rlu4str
4r1m
+r3m2ag
+rma2la
r2m1ald
-rm1ans
-rm3anz
-r4m3a2p
-r5mapp
-rm1aus
-rm3d
+rm1anz
+rm1a2p
+r2maph
+rma5ssen
+rmas8sens
+rm2är
+rm3d2
r3me.
r2m1ef
-rmen4sc
r2meo
rm2es
r2mide
r2m1im
-rmi3te
-rm1ope
-rm1o2ri
+r2m1o2ri
rm3sa
rms2t
-rm5sta
-rmt2
-rmt3h
+rm3sta
+rmt2a
+rm2u
rm3ums
4rn
rna2b
-r2na4n
-rn5ani
-rn2ant
-r4n3anz
+rna4n
+rn2and
+rn3ani
+r2n1anz
rn2a2r
rn3are
-rn5ari
-r2n3au
-rn4aue
-rn3do
+rn3ari
+r2nau
+r3näp
rn3d4r
r3ne
-r5ne.
rn3e4ben
r4nef
-rn4eh
-r5n2ei
+rn2ei
rn3eif
-r6n3eis
+r4n3eis
rne2n
-r4n3ene
+r4n1ene
+rn3ense
r4nerf
-r4nerg
+r4n1erg
rn4erhi
r4nerk
r4n1ert
r5nes
-rn4e2t
+rn2et
r4nex
-rn3g2
+rn3f
+rng2
r3ni
-r4n1in3
+r4n1in
r3nod
r2n1op
-rn1or
+r2n1or
rn1ö
r1nöt
rn3s2ä
rn3s2p
rn3s2z
-rn5t2e
-rn3th
+rn3t2e
+r1nu
rn1ur
r1nü
r1ny
-ro5ar
-ro4bei
+ro2bei
2robj
1robo
2robs
ro1ch
3rock.
-r4o3de
-r4odo
-roe4
-ro3et
-2rof
+r2o3de
+ro3e4
roh1l
-roh5n
+roh3na
3r2ohr
3roi
-ro3in
ro3le
+rol4lan
rol3l4en
2roly
+4rom.
ro2mad
ro2mer
4romm
+4romt
r2on
3ronn
rons2
ron4tan
ro1ny
ro1pe
-2ropf
+2ro2pf
ro3ph
r1or
r2ora
@@ -10668,103 +10665,99 @@ ror3al
ro2rat
ro2rei
ro2r1o
-ror5th
-ro3sé
+ror3th
ro3sh
ro3s2i
-ro5sk
-ro3smo
-ro3sp
-ros4s1c
-ros4sie
-ro4str
+ro5smo
+ros2p
+ros6san
+ross1c
+ros4t
+ro3st2a
+ro2st1r
ro2ßu
+ro4tag
+rote3i
ro2tho
ro2tri
-rots2
-rot3so
-ro3tu
+rot1s2
+rot2ta
+ro3t2u
ro3unt
3rout
-ro3xa
-ro3z
rö2b3l
-rö3ch
-2r1öf
+rö2du
+2röf
4rög
-röh3
+1r2öh
r1ök
-r2öl
-rö7le
+1r2öl
3römi
+4röp
r1ör
r2ös.
-rö3sc
-3rötu
-2r3p2
-r5pa
-r5p4e
+r2öse
+2r1p2
+rp4a
+rp4e
rpe2re
rpe4r3in
rpf4
-r4pli
+r2pli
+r3po
rpo4str
-r4ps
-rp3se
-r4p3t
+rps1t
+rp3t
+r3pu
r1q
-4r1r
-rr2a
-r3rar
-r5räh
+2r1r
+rr2ab
+rr2ar
+rra4s3s
rr1äm
rrb2
rr1c
r3r2e
-rrer4
+rre4ale
+rrer4s
r4rew
-rr2h
-rr3hö
-r5ries
-rri3k
-rr2na
+rr2he
+rrik2
+rr2n3a
rr2o
r2r3ob
-rro3m
+rro3m2
+rr2th
r3ru
-r5rü
+r3r2ü
rrü1b
4r1s
-rs2a
-r4s3ab
-r2s3a2d
-rsa4ler
-r2s3amp
-r4s3amt
-r4s3ang
+rs3ab
+r2s1a2d
+r4samp
+r4s1amt
+rs2an
+r2s3ang
rs3anp
-r4s3ar
-rsch2e
+rs3ar
+r3sch2e
r6scherl
-rsch4l
+rsch2l
rs1ebe
-r2s1ein
-rse3le
-rse2n
+r2sein
+rse2n1
rs2end
rse4ne
-rs3ere
+rs1ere
rs1erö
rs1ers
rs1erz
rs1eta
r3sho
-r3si
-rs2ka
-r5skal
-r5skan
-rs3kat
-rs2ki
+rs2kal
+rs2kan
+rs2kie
+rs2kis
rs2kl
r4sko
r4skr
@@ -10773,659 +10766,657 @@ rs3l
rs4no
r2s1op
r4s3ort.
-r3s2p
-r4s3ph
-rs5s2
+rs2p4
+rspa3s2
+r2s3ph
+r4s3s2
+r5stad
r4stant
rs2tau
-rs2te
-rst5eing
-r4st3erw
+r6st5eing
+r6sterbt
+r4st3er4w
rs2th
-r4stin
rst3ing
-r5s2tob
-r4s1tot
-r4st3ran
-r5s2wi
-6r1t
-r3tab
-rt1ac
-r2tad
-r3taf
-rt3akr
-r3tal2
-r4t1alm
+r2stip
+r2s1tot
+rs2tr
+rst3ran
+r6strang
+rs2tu
+rsü3s
+r3swi
+4r1t
+rt1abs
+r2t1alm
rtals1
rt1am
-rt1an
-rt3anz
-rt1ar
-rt3a6re
-r3tas
-r3tat
+rt1ang
+rt1ann
+rt1ant
+rt1anz
+r2t1ar
+rt3a4re
r2t3att
-rt1auf
-r2t1är
-r3te
-r5te.
-rtee2
-rt2ei
+rt1är
+r3te.
+rte1e2
+rt4eif
rtei3la
-rte5m4e
+r2telf
rte2n1
-r7ten.
-r5ter.
-rte1ra
-rte4ran
+r3ten.
rt3erei
-r4t1erh
-r4t1erk
-rt3erle
-r5terli
+r4terfo
+r4t3erh
+r2t1erk
+r4t3er4la
+r4t3erle
r4t3ernä
rter4re
-r4t3ersc
-rtes2
+rt1ers
+r3tes2
rte3sk
-r2th
-rt1he
-rt1hi
-r3tho
-rt1hol
-r3thu
-r3thy
-r4t1id
-r4t1ima
-rt1int
-rt5le
-rto3p
-r2t1o2r
+r2thi
+rt3hol
+rt2hum
+r2t1id
+r2t1ima
+r2tinf
+rto1p
+rt1or
+rto2ri
+r2trak
+rtra4s3
rt3rec
r4treis
-r2t3res
-rt4sam
-rt5scha
-rts1eh
-rts1ei
-rt3spe
+rt1ros
+r4ts
+rt4s1eh
+rt1spe
rtt4
r2t1urt
-r3tün
-rt5w
-r3ty
-rt3z2
+rt3z
+1ru
ru1a
-ru3a2r
+ru3a2r3
rube2
-ru3de
rude2a
ru2dr
3ruf
ru2fa
-ruf4s
-ruf5sc
+ruf2s1
4rug
-2ruhr
-5ruin
-ru3ins
+2r1uhr
+3ruin
+ru1ins
ru1is
-4ruk
2rum
4rumf
ru2mi
4ruml
r2ums.
4rumz
-ru4n
2r1una
+2rund
run2d1a
-2rundd
-run4d3er
-2rundv
-2rundz
-ru5ne
+r2unde
+rund3er
+run6derl
+run6ders
+run6derw
2r1unf
2rungl
-2r1uni
-ru5nis
-4runk
+2r1u2ni
+4r3unio
run2kr
2r1unl
-r1unm
+2r1unm
4runn
-ru5no
-2runs
-4runt
+4r3unt
2runw
ru3pr
-4r1u2r
-r3ur1e
-5ru3ro
+4r3ur
+ru2ra
+ru2r1e
+5ruro
ru2si
+rus3sen
rus2s1p
-rus6st
-ru2th
-rut1he
+rus6s3t
+3rut
+rut3h
ru2t1o2
ru2t3r
-rut2s
4ruz
-ru2z1w
-r2ü
-4rüb
+ru2zw
+1rü
+2rüb
rü1ben
rü1ch
-4rüg
+rücks2
4rümm
+rü3s2s
+rüs3si
2r1v
rve4n1e
+rve5s
rv2s
2r1w
-rwa5re
+rwun3s
4r1x
1ry
ry2c
-ry3t
2r1z
rz1ac
-rz2ach
rz2an
-r2z1ar
-r2z3as
-rz1eck
-r2z1eng
-rz3ents
+r2zar
+r2zas
+r5zene
+rz1eng
+r4z3ents
r2z1erf
r2z1erg
r2z1erk
-rz1erq
r2z1erw
rz1id
-r3zof
-r2z1op
-rz1or
+r3z2of
+rz1op
+rz2ö
+rz3te
+rz2th
rz2t3ro
-rzu3g2u
-rz1urs
-r3z2wä
+rzug2u
+r3zwä
r3z2wec
-8s.
1sa
-5sa.
-5s4aa
+3sa.
+3saa
2s1ab
sa2be
3sabet
-sa1b4le
+sa2bl
+sa3ble
+sa2br
4sabs
-sa3che
-sacho6
-sa3cr
-2sada
-s3adm
-2s3adr
-sa3fa
-sa4fe
-4s3aff
+sa2cho2
+sach3t
+2s1ada
+s1adm
+2s1a2dr
+sa2fe
+2s3aff
+3safi
sa1f4r
3sag
-s3a2gr
-5s4ai
-sa1ik
+sa4gent
+sag4n
+4s1a2gr
+3sai
+sa3i2k1
sail4
2s1ak
sa2ka
3saki
-s4akr
+3sakr
4s3akt
3sal.
-3s2a1la
-sal3erb
+sa4l3erb
sa2l1id
s1all
-5s4alo
+3salo
sal2se
-6s1alt
-5s4alz
+2s1alt
+3s2alz
3sam
-5sam.
-5same
s3ameri
-5samf
-5samk
-5s4amm
-6s5amma
+5samm
+6s1amma
4s1amn
-4samp
-5sams
-5samu
+s1amp
+sam2to
s1an
-3s4an.
+s2an.
2s3a2na
2s3anb
s2an2c
s2and
-san4d3ri
-5sang.
+s4and.
+san4dri
+3sang.
+sang4s
2s3anh
-3sani
-2sanl
+3s4ani
+2s3anl
+2sanp
2s3ans
san4sk
-san3sp
-4s3anw
-2s3anz
+4santr
+2s3anw
+s3anz
2s1ap
sa2po
3sapr
2s1ar
3s4ar.
-3sara
-4s5arb
+3s2ara
+4s3arb
3s2ard
3sari
-s3arl
-s3arm
s3arr
-3s4ars
-4s3art
-s3a4sp
-6s5asy
+3s2ars
+4sarti
+s1a2sp
+sas6sest
+4s3a2sy
3sat
sat2a
-5sa3te
4s3ath
4s3atl
4satm
sa2tr
sa3ts
-5satz
sat4z3en
-sat4zer
-s1au
+s1a4u
3sau.
+3sauc
3saue
-2sauf
-4s5aufb
-3saug
+2s3aufb
sau2gr
3saum
+3saur
sauri1
-2s3aus
-4s5ausb
-3s4ause
-s3auß
+2s3ausb
+3s2ause
+2s3av
sa2vo
-3sax
-3say
-1sä
-3säb
3säc
s3ähn
-3säle
+3säl
s1ält
2s1äm
2s1änd
-3sänge
2s1är
-sä2s
-3sät
-3säul
+sä2s3
+3s2ät
+1säu
2säuß
-6s3b4
+4s3b4
sba4n
-sber2
-sbe3re
-sby3
+sbe3r2e
+sbus3
1sc
2sc.
-s2ca
2scam
-6scar
+s2cap
+4scar
2s1ce
6sch.
-7s2ch2al
+3schaf
+2schak
+s2ch2al
4schanc
-7schanz
-6schao
+4schang
+5schanz
+4schao
s2chau
-s2chä
-3schäd
-4schb
+3s2chä
+2schb
2schc
-3sche
-4schef
+2schd
+3sche.
sch3ei.
-5scheib
4schemp
-sch5erla
+sch2en
+3sches
4schess
4schex
4schf
2schg
2schh
-3schi
schi4e
s4chim
+3sching
4schiru
-4schk
+3schis
+2schk
4schle.
6schlein
sch6lit
-4schn.
-s2chö
-2schp
+2schmö
+2schn.
+2schox
+3s2chö
+4schöl
+4schp
2schq
4schre.
-sch5rom
-6schs4
+4schrin
+sch3rom
+4schrou
+6schs2
sch3sk
-sch5ste
-sch5sti
-6scht
-sch3t4a
-sch5te
-3s4chu
+6sch3t
+scht2a
+scht4r
+s4chu
4schunt
sch2up
+5schü
2schv
4schwet
+sch4wil
2schz
-s2ci
2scj
-6scl
-6sco
-7s2cop
+6s1cl
+2sco
+3s2cop
+3sco4r
+s2cr
2scs
2scu
-4s1d
-s3da
+4s3d2
sda3me
-s3do
+sdien4e
+sd4r
1se
-3se.
-se3a
-se4al
-se5al.
-se5at.
+se3at.
+seau4
2s1e2ben
-se3b4r
-2sec
-4s1echo
-4s1echt
-3secl
-3seco
-2sede
-5see
+seb4r
+2s1echo
+s1echt
+2s1eck
+3see
se1ec
se2e1i4
-se1er
+see3ig
+seein2
+se1er.
+se1erö
2s1eff
+3seg
se2gal
se2gl
seg4r
3s2eh
-se2h1a2
+se2h1a4
se3he
se4h1ei
se4hel
-se4h3erk
-se4hin
+se4herk
+se2hin
seh1l
-seh1ra
seh3re
seh3s
-se2hü
-2s3ei.
-3sei3b
+seh3t
+se2hüb
+2s1ei.
2s1eig
-5s4ein.
-2s1einb
-s1eind
-sei5n4e
+s1ein
+5s2ein.
+2seinb
+sein4du
+sei3n2e
+sein4fo
2seing
-2s1einh
-4s1eink
-4seinl
-2s1einn
+2seinh
+4seink
+2seinl
+2seinn
2seinr
-s3einsa
-s3einsä
-4s3einst
-2s1einw
-2seis
-7s4eit
-5s2ek
+s4eins.
+4seinsp
+4seinst
+2seinw
+4s1eis
+5s2eit
+3s2ek
s2el.
-se2l1a2
+se2l1a
se3lad
sela4g
se3lam
+3selb
sel1ec
2selem
-se2ler
-sel3erl
+se4l3erl
sel3ers
-s1elix
-se4l1ö
+2self.
+s3elix
+se2l3ö
s2els
sel3sz
sel3tr
-3sem.
-se3ma
+s4e3ma
2s1emp
-5s2en.
-3sena
+s2en.
se4nag
-se3nal
-2s1endl
-se4ners
+se2nä
+3sendet
+4s1endl
sen3gl
-7seni
-sen3ob
-3s2ens
-sen6stri
+5s2eni
+3senku
+se2no
+se4nob
+s2ens
s2ent.
2s1entf
-6s3entg
+4s3entg
s2enti
-4s3ents
+2s1ents
2sentw
-4sentz
-se2n1u
+2sentz
+se2n3u
+3senva
seo2r
4s1e2pos
3seq
-5s2er.
-ser3a2d
+s4er.
+se2r3a2d
se2r3al
se5ref
s3ereig
se4r3eim
se4r3enk
ser2er
-2s3erfo
+s1erfo
s2erfr
-4s3erfü
+s3erfü
+4serfül
ser3g
s1ergä
s2ergr
-2s1erh
-3seri
+s1erh
+5serie
+s3erken
s1erkl
+3serl.
s1ernä
2s3ernt
se1rot
-2s3eröf
+s3eröf
s2ers.
+2sersa
s4ert.
-ser3the
seru2
se4r1uf
se3rum
-5s6erv
-5ses.
+se3rund
+3s4erv
+se2sel
+2sesh
se3su
-3set
-s3eta
-4se2tap
+2se4tap
se2tat
-4s3e2th
-5setz
-3seum
-se1u4n
+s1e2th
+3setz
+se1u2n
2s1ex
se2xe
4sexp
sex3t
-6s3f
+6s3f4
sfal6l5er
-sfi3le
-4s3g4
-sges4
-sge3sa
+sflo4
+4s3g2
+sges2
+sgro3
2s1h
-3sha.
+4sh.
+sh2a
+3s2ha.
sha2k
-4shan
+4s3han
+4shc
+s3h2e
3shi.
3shid
-1shi4r
+shi4r
+4shk
sh3n
4shof
3shop
-sho6r
-5show
+sho4re
+3show
sh4r
-s3hü
+4shs
+4sht
+4s3hü
1si
+si2ach
si3ach.
-5siak
-si1am.
+si2ad
+si3am.
+sia4s
2siat
-si3b4
-3si1c
-s1ideo
+sib4
+5si1c
+2s1i2deo
s2ido
-3s2ie
+3s4ie
+siege4s
si3ene
-si3err
-3si1f4
-5s2ig
+si1err
+si1f4
si2g1a
-si3g4n
+3sigh
+sig4n
+si3gnu
si2g3r
si2k1ab
-si4k3ere
-si4k3erl
+si2k1ä
+sik3erl
si2ki
-si4k5l
-si4kr
-sik3s
+si4k1l
+si2kr
+sik3s2
sik3t4
si2ku
-si5l2e
3silo
2s1imm
si3n4a
2s1ind
-4s1inf
-sin2g1a
+2s1inf
+sing1a
sin3gh
sin3g4l
sin2gr
-sing5sa
-4s1inh
+sing3sa
+2s1inh
sin1i1
-3sinn.
-3sinnl
2s1inq
2s1ins
2s1int
-4s1inv
-3s4io
-si3od
-si3os
+2s1inv
+3sio
3s2is
si2sa
si4schu
si2s1e
si2s1o
-sis1p
-sis5s
+si2s1p
+sis3s2
si2stu
3s2it
si2tau
-si2t3r
-sit5s
+sit3r
+si2tra
si3tu
-5siu
-si2va
-six3
+3siv
+siv1a
+sive3
+si2vr
1sí
-4s5j
-2s1k4
+4s3j
+2s1k2
4sk.
-s3kad
-4s3kam
+1skala
+4skam
4skanz
-4s3kas
+4skas
ska4te.
+4skateg
ska4tes
4skb
-4ske
+skelma4
+skelmas5
+s2kep
3s2ki.
+s2kif
+s2kig
3s2kik
4skir
3skiz
-s3klas
+sk4l
+4s3klas
+sk4n
4skom
-4skor
+4s3kor
+4skow
4skö
-s3kra
4sks
-4sk5t
+4sk3t
3skulp
+skus3
2s1l2
+4sl.
3slal
4slan
+s2law
sl3b
s5le
-s5li
-3s6lip
+s3li
+3s4lip
+4sln
s3lo.
slo3be
s3loe
-2s1m2
-s3mu
-2s3n2
+s3lu
+4s3m2
+2s3n4
4sna
-sna1b4
-s5ne
+snab4
sni3er.
sni3ers
4s5not
4snö
-1so
3so.
-3so4a
+so4a
2s1o2b
so3et
3soft
3sog
-so3gl
-so2h
-s1ohe
-so3hi
-6s5ohng
-so3ho
+s1o2he
+6sohng
2s1ohr
-3sol.
+1sol
so3la
-so4l3ei
-so3li
-4s3oly
+so4l1ei
+sol4ler
+2so2ly
+3som
3s2on
son3au
sone2
@@ -11433,415 +11424,447 @@ son5ende
son3sä
so2ny
so3o
-s1opf
+2s1opf
3sor.
so1ral
s1orc
2s1ord
so2rei
-so3ren
2s1orga
+5s2orge
2s1o2rie
-so2r1o
-5sorp
+so2r1o2
3sors
so4ru
-3s2os
-5s4os.
-s3ost
-3sota
-so3tr
-3sou
+3so3s2
+s4os.
+4s1ost
+1sou
so3unt
3sov
-s1o2ve
-s1ox
-1sö
+4s1o2ve
+3sow
+2s1ox
+5soz
sö2f
2s1ök
-2söl
+2s1ö2l
s1ö4s
-1sp2
-4sp.
-4spaa
+sp2
+2sp.
+2spaa
2spak
-3spalt
s2pan
spani7er.
-4spano
+2spano
4spap
-4spara
+2spara
+1spare
2sparo
-spar5sc
-3s4paß
+3sparu
+spa3sse
+spa3ssi
+3s2paß
2spau
s2paz
-4spär
-2sped
+s2pä
+2spär
s2pee
-3s2pei
-4spel
+4s3pel
+4spensi
+spe3p4
2s1peri
4sperl
-3s2perr
+s2perr
2spers
2spet
-3s4pez
-4s3pf
-2sph
-3sphä
+1s2pez
+2s3pf
+2spha
s3phe
-3spi
-5s4pi4e
-7spiel
-spier4
+2sphi
+1spi
+3s2pi4e
+4spier4
spi2k
-6s3pil
+2spil
+3spio
4spip
-4s3pis
+4spis
2spl
4spla
4splä
-4sple
3s2pli
-4s3plu
-2spo
-4s3pod
-3s2poi
-4s3pok
+s3p4lu
+s3pn
+2spod
+2spog
+s2poi
+2spok
4spol
+1spon
+1spor
4s3pos
s2pott
4spr.
-3s2prac
-4sprax
-4spräm
+s2prac
+s2pran
+2sprax
+2spräm
4spräs
-5s4prec
+3s4prec
2spred
-4sprei
-4spres
-2spro
-4sprob
-3s2pru
-5sprun
+2spres
+2sprob
+5spross
+3spru
2sprüf
3sprün
-4s3ps
+2s3ps
+2spt
2spun
2spup
-5s2pur
+3spur
4sput
-3spü
+1spü
4spy
2s1q
-6s3r4
-srat6s
+4s3r4
+srat2s
+srat4sc
sret3
-sro3m
-srö4s
+srom2
+srö2s
srös1c
+srücker6
srü2d
-6s1s
-ss2a
-ss3ab
-ssa3be
+2s1s
+6ss.
+4ssa
ssa3bo
ss1ack
-ss4ag
-ss3aj
-s3s4al
-s4s5ala
-s4s5alb
-ss4am
-s4s5ang
-ss3ano
-s4s5anz
-s3s4as
-ss3auf
-ss2ä
-ss1ech
-ss1eck
-ssee2
-s2s1ega
+ss1aj
+s3sal
+s4s1ala
+s4s1alb
+s4s3amt
+s5sand
+s4s3ang
+s2sano
+s4sans
+ss2ant
+s4sanz
+s3sas
+ss3att
+4s3s2ä
+4ssb
+6ssc
+4ssd
+4ss1ec
+4ssee
+4sseg
+s4s1ega
+4sseh
sse3ha
-ss1ein
+4ssei
sse3inf
-sse3int
-ss1eis
-ss2er
-s3ser.
+sse3in4t
+4ssek
+6ssendet
+4s3sendu
+ssenmas6
sse6r5att
-s3serh
-ss3erhö
-s4s3erse
-s5s4es
-ss4et
+s2s1erö
+4ss3erse
+s3sersu
+ss2es
+4ssesc
+3ssesh
+4sset
sse3ta
+4ssez
+4ssf
+4ssg
+4ssh
+4ssic
+4ssie
+s2sig
+s4sinf
+s4sinst
+s4sint
+4ssio
+4ssit
+4ssk
s3skala
+4s4s3l
+4ssm
+4ssn
+4sso
ss1off
-s4s1op
-s2s1ori
+ssoi4
+s2s1op
+ss1ori
+4ssp
s3spe
-s3s2po
-ss5re
-ss3s2
-s5st2a
-s7stad
-s5stä
-ss1t6e
+ss2po
+ssquet4
+4ssr
+4ss3s2
+4sst
+sst2a
+s5stad
+ss2tar
+s3stä
+ss1te
s4ste.
s5stel
+s4sten
+s4stes
+s4stet
+s5steu
ss2th
-s5stil
+ss2tip
ss1tis
-s5sto
-s5stu
-s5stü
+ss2top
+ss2tur
+s3s2tü
+4ssum
ss1ums
-ss2zen
+4ssü
+4ssv
+4ssw
+4s3sy
+4ssz
1st
6st.
-3sta
-s4ta.
-5staa
-4stabb
-4stabh
-4stabl
-stab6s
-4stabt
-4stabz
-5s4tad
-6stada
-6stadr
-5staff
-6stag
-5stah
-4stak
-4stal.
-5sta5li
-4stalk
+3staa
+2stabb
+2stabh
+s2tabi
+2stabt
+2stabz
+st2ac
+3s2tad
+4stada
+4stadr
+3staff
+2stag
+3stah
+2stak
+2stal.
+2stale
+3sta3li
+2stalk
st1alp
-st3ami
+3stam
+st1ami
4stamt
-st3ana
-5stand
+sta4na
+3stand
+4stanf
4stanl
-6stann
-4stanw
-5star.
-5stars
-5st2art
-sta2s
-st3a4si
-5stat
-4stat.
-s2tati
-5stau.
-5staub
-4st1auf
-4staum
+4stann
+2stanw
+4stanza
+s2tar.
+s2t2ars
+3start
+3stat
+3s4tau.
+2stauf
+2staum
5staur
-4staus
-5staus.
-4stax
-3stä
-4stäg
-4stält
-4stämt
-5stär
-2stäti
-5stätt
-4stäus
+2staus
+3staus.
+2stax
+3stäb
+3städ
+2stäg
+2stält
+2stämt
+s2tär
+3stätt
+2stäus
4stb
-2stc
-st3ch
-2std
-3ste
-4stea
-5stean
-7steck
+4st3c
+4std
+3st2e
+s2tean
+4stechn
4stee
-ste2g5r
+ste2gr
ste2i
-5s4teig
-6steil
-s4tein
-4steing
+5s2teig
+4s3teil
+stei4na
s2tel
s3telem
stel4l3ä
ste4mar
4stempf
4st3ends
-ste2ne
st3engl
st4ens
-6st3entf
+4st3entf
4stentw
4stepi
-5st6erb
-st2erg
-5sterj
+ste6rers
+s2terl
s2tern
+6sterras
s2ters
-6st3ese
-4stesse
-ste4stä
+4st3ese
4stests
-5steß
s2teu
4steuf
-st3ev
-6stex
+4st3ev
+4stex
4stf
-4stg
-6sth
-st3ha
-st1hi
+2stg
+4sth
st3ho
-st1hu
-3sti
-5stic
-5stif
-5stil.
-5stile
-5stim
-4stinf
-st1ins
-st1int
-4stip
+3sti2e
+4stief.
+stierma5
+3stif
+3stim
+2stinb
+2stinf
+2st1ins
+s4tio
sti2r
-st3iso
+st3i2so
2stj
-4stk
-4stl
-st5le
+2stk
+4s4tl
4stm
-4stn
-3sto
-4stob
-7stock
-4stod
-5s4to3de
-5stof
-4st3om
-4ston
-4stopo
-4storg
-sto5rin
+stma3s2
+2stn
+3stoc
+sto3d
+s2tode
+2st3om
+2stopo
+2stord
+2storg
+3stos
4stou
-s4tow
-3stö
-4stöch
-7s2tör
-4s3töt
+2stöch
+5s2tör
+2stöt
4stp
2stq
-3str
-5s2traf
-4strag
-5strah
-6strai
-5s2tral
+3s2traf
+2strag
+3strah
+4strai
+3s2tral
4strans
-5s2tras
-7straß
-6sträg
+3s2tras4
+3straß
+4straum
+s2träf
+2sträg
+s2trän
4sträne
-4stre.
+2stre.
4strech
+4stred
4stref
-5streif
+4streg
+3st4reif
+4streis
st3renn
-4strev
-4stri.
-5s4tria
-4strib
-6strig
+2strep
+2stret
+2strev
+2stri.
+3s4tria
+2strib
+4strig
stri2k
-2strin
-2stris
4strisi
-4stroc
-5s2trof
-5s2trok
+2stroc
+3s2trof
+3s2trok
st3roll
stro4ma
s2tros
-5s2trö
-5struk
+s2trö
+3struk
s2trum
4st3run
-4strup
-6st3s4
-st1sk
-st1sl
-st1sz
-2st3t2
-5stub
-6stuc
-5s2tud
+2strup
+4st3s4
+stsas2
+2st3t4
+st2u
+3s2tub
+4stuc
+3stud
2stue
+3stuf
3stuh
-4stuk
-4stumr
-stum4s
-4stumz
-s2tu4n
-6stun.
+2stuk
+2stumr
+stum2s
+2stumz
+stu2n
+2stun.
2stunf
-3stung
-2st1uni
-2s3tuns
+2st3uni
+2stuns
2stunt
-stu5re
-st1url
-2sturn
-2st1urt
-3st2ü
+3stuö
+stu3re
+st3url
+2s3turn
+2st3urt
4stüch
s2tück
-4stür.
-s2tüt
-2stüte
-6stv
-4stw
-2sty
-3styl
-4st3z2
-1su
-su1an5
-3su2b5
-su4ba
-6su3bi
-7su1c
+2stür.
+2stüre
+2stürg
+2stürs
+2stv
+2stw
+2sty.
+2stys
+4st3z
+1su.
+su1an
+3su2b3
+su4ba2
+4subi
+5su1c
+su2cha
+such4st
2s1u2f
2s1uh
-3sui
su1is
-su3it.
-su3la
+su1it.
+sul2a
sul2i
+sult2
su2mar
su2mau
-3sume
+3s2ume
su2m1el
su6m5ents
-s3umfa
s3umfe
3summ
-sumo2
-su2m1or
+sum1o2
+su2mor
s3umsa
s3umst
-su4n
-3sun.
+su2n
sun6derh
+su4ne
s1unf
2s1uni
-4s3unt
+4sunt
3s2up
+sup3p
su2ra
2s1url
s1urt
@@ -11850,192 +11873,181 @@ su3sa
su3sh
su3si
sus3s
-1sü
-4sü2b
-3sü2d1
-5sün
-4s1v
-4s1w
-swa5re
+2sü4b
+3süc
+sü2d1
+süden2
+3sün
+süs4
+sü3sse
+sü3ssi
+4s3v
+2s1w
+s3we
sweh2
-6s3wie
-6s3wil
-s3wir
-s3wis
-s2y
-3sy.
-sy2l1
-sy4n1
-1sys
-sy5st
-sy3t
+4swie
+4swil
+s3wö
+s3wu
+1s2y
+syl1
+sy4n3
+sy5s
2s1z
4s3za
4s3zei
-3s2zena
-5s2zene
-4s3zent
+s2zena
+5s4zene
+4szent
s2zes
s2zeß
+s3zet
s2zis
-s3zö
+sz2o
4s3zu
-s3zw
-2ß.
-ß3a2
+4s3zw
+2ß3a2
ß1ä
-ß1b
+2ß1b2
+ßbus3
2ß1c
-ß1d
+2ß1d4
+ßdie3
1ße
2ß1ec
2ß1e2g
2ß1ei
-ße2l
-ßel1a
-ße3lu
-ßen3a
+ße2l1a
+ße2le
ßen3g
ße2ni
-ßen5st
-ßen3sz
-ße2nu
-ße3rin
-3ß2ers.
+ße2no
+ß2ers.
+2ßerse
+ßer3t
+ße2s
ße2t
ß1ex
-ß1f
-ß3g2
+2ß1f
+2ß3g2
ßge2bl
-2ß1h
+2ß1h2
1ßi
ßi2g1a
2ß1in
ß1j
2ß1k4
-2ß1l
-ß3la
+2ß1l2
2ß1m
-ß5n2
+2ß1n2
ß1o2
ß1ö
-ß3p2
-ß1q
-2ß3r2
+2ß1p2
+2ß1q
+ßquet2
+4ß3r2
+ßrus3
2ß3s2
-ßst2
2ß1t
-ß2t1h
-ßts4
-1ßu4
+ß2th
+ßts2
+1ßu2
ß1uf
2ß1um
ß1uni
ß1ü
2ß1v
2ß1w
-ßwa5r
-ßwa3s
2ß1z
-6t.
-3ta.
-2taa
-tab4
2tab.
-ta2b5an
+ta2b1an
2t1abb
1tabel
-4taben
+2taben
ta4bend
2tabf
-4tabg
-4tabh
-4tabk
-ta1bl
+2tabg
+2tabh
+2tabk
1table
-2tabn
+2t3abn
+ta2br
4tabs
-4t1abt
+2t3abt
ta2bü
2tabw
-4tabz
-tach3te
-t3ada
+2tabz
+2t1ac
+3tacu
+t1ada
tadi3
-t3adr
+2t1a2dr
+ta3d2s
1taf2e
-3tafel
+2taff
t1afg
t1af4r
3t2ag
-5tag.
-ta2ga
-ta2g5ei
-4t3agent
-ta3ges
+ta2ga2
+ta2g1ei
+4t3a4gent
ta3gl
-ta3gn
-4t3a4go
-tag6s
-tag7sc
-tah4
+t3ago
+tag2s
+tag4st
+tah2
tah3le
-tahl5sk
-3tai
-ta1i2k
+tahl3sk
+ta3i2k
tai2l
ta1ins
tai4r
ta1ir.
-4t3a2ka
-ta3kes
-3takr
+1tak
+t3a2ka
ta2kro
tak2ta
3taktb
3t2aktu
+2takz
3t2al.
-ta1lag
-ta1lak
+ta2la
+ta3lag
+ta3lak
1talbu
tal3d
-3t4ale
-ta3len
+1t4ale
ta4lens
tal4leg
tal2lö
ta2l1op
-ta3lum
-2ta2m
-3tam.
-ta3ma
-3tamg
-ta3mo
+tal2se
+2talt
+2tam
+ta2mer
+ta2mi
t1ampl
t1amt
-t2an.
t1a2na
-ta4nat
-4tanb
+2tanb
t2and
-tan3da
-tand4st
ta3ne
-4t1anf
+4tanf
+2tang
t2ank
-tan4kl
-tan3kr
+t3ankl
2tanl
2t1anme
4t1anna
-1tanne
t1ans
+t2ans.
4t3ansi
2t3ansp
-ta4nu
+ta2nu
2tanwa
2tanwä
-t4anz.
+t2anz.
+t1anza
4tanzei
tan6zerh
t1anzu
@@ -12043,78 +12055,81 @@ ta3or
ta2pe.
ta2pes
2tapf
-t4ar.
-2t1arb
-t1arc
-ta6rens
-3ta3ri
+ta2pl
+2tarb
+ta4rens
+ta4r3ere
+3t4a3ri
2tark
-4t1arm
+2t1arm
2tart
-t3arti
+t1arti
+tar2to
ta2ru
2t1arz
ta3sa
-1ta3sc
-4t3asp
+1tasc
+t1asp
1tas2t
1tat.
+ta2ta2b
ta2tan
-tat1ei
+ta2tau
+tat3ei
ta2tem
-ta2t1er
+ta2t3er
ta2th
tat3he
t3atl
t4atm
ta2tom
-4tatt
+1tats
ta2t1um
-tau4fer
+2t1auf
+4taufg
tau3f4li
-2taufw
+4taufn
1taug
t1auk
-2taur
+3taum
1taus
-2taus.
t1ausb
+tau6schr
tau6schw
-t1ausd
-3t2ause
-t1ausf
-t3ausg
+t2ause
+4t3ausg
t1ausk
-2t1ausl
-t1ausr
-2t3auss
-t1ausü
+2tausl
+4t3auss
4t1ausw
-ta3va
-3tax
-ta3xi
+1tax
+taxi3s
tä1c
+2täd
+3täe
1täg
2tägy
2täh
-3täle
-4t1ält
+2t1ält
2täm
t1ämt
t1ängs
1tänz
+t1äp
t2är.
tä2ru
-tä2s4
-tä4st
+tä4s
+t2ät
2tätt
-t1äug
-1täu3s
-4täx
+1täus
+2täuß
+2täx
1tà
-2t5b
+4t3b2
tbe3r2e
-tblock7en
+tblock5e
+tblocken8
+tbus3
2t1c
t3cha
t3che
@@ -12122,451 +12137,472 @@ tch2i
tch3l
t2chu
tch1w
+t4ck
+t3cl
t3cr
2t3d4
tdun2
-tdu3s
1te2a4
te3al
te3an
-5t4ebb
-2t1e2ben
+3t4ebb
+4t1e2ben
1t2ech
te1cha
3techn
2teck
-3tee
-te1ele
+teck2e
+1tee
te1em
-te2e4n1
+te2en3
te1erw
-4tefe
+te2es
2teff
-te2fl
-teg4
+teg2
teg3re
2teh
-te3han
+t2ei.
t2eie
-2teig
+t3eifr
+teik4
1teil
-3teiln
-3teilz
-2tein
+2t1ein
+teinbus6
tein3ec
t3einge
t3einla
-4t1einn
-4teinr
-t1eis.
-t1eisb
-tei5st
-tek3te
-te2la4
-te4l1ab
-tel1ac
-te3lan
-tel1au
-tel1e2b
-tel1ec
+4teinn
+t3eis.
+t3eisb
+tei3st
+tek3t
+tela4
+te2l3ab
+te2l1ac
+te2l1au
+telb4
+te3le
+tel1eb
+tele4be
+te4l1ec
3telef
3teleg
te4l1eh
-1te3lem
+te4lein
+2telem
tel1en
-te3lep
-te3lex
-4t1elf.
-tel1in
+te4lerd
+te4leu
+4t3elf.
+te2l1in
te2lit
-t4ell
-tel3l2e
-te2lo
+tell2e
+te4lost
te2l1ö
tel3s2k
tel3ta
+tel3th
tel3t4r
te2m1ei
-te2mi
-te3mis
-4temo
+te2min
+2temo
te2m1o2r
3temper
1tempo
-te4m3u
+te4m1u
t6en.
-te4n3a2
+ten3a
+tena2b
+te4na2d
+te4na4g
+te4nas
+te4nau
+te2nä
t4enb
ten3da
-6t5endf
-4t1endl
-6t5endp
-ten3dr
+4t3endf
+t6endi
+2t1endl
+t6endo
+4t3endp
+ten3d4r
te2n1e2b
+te2nef
te3n4ei.
ten3eid
+ten3ens
4tenerg
-t1eng.
+te2net
+ten3g
+4t1eng.
+tengeschos8
+tengescho7sse
+ten4gla
+t4enh
te2ni
-ten3im
-ten3in
+te4n3in
+t4enj
t2enl
-t2enm
+t4enm
+ten3n
t2eno
-t2ens
-4t3ensem
-ten3si
-ten5st
-t1entb
+tens2e
+4tensem
+t4enta
+t3entb
4tentd
-t1entn
-4tentw
-te2nu
-ten4zer
+t4ente
+4tentn
+ten4t3ri
+4t3entw
+4t3entz
+ten6zerh
ten3zw
-te2o
-te3ob
-t1e2pi
-t6er.
+t3e2pi
+t4er.
+tera2b
+te2rad
te1raf
ter3am
te3ran.
-te2r3as
-t2erb
-6t5erbs
-6t5erbt
+4terbs
+4terbt
t3erde.
-te2r1e2b
+te2re2b
te4r3eif
te2rel
ter3end
+te4reng
+te4rerk
+terer4z
+4terfol
t4erfr
4terfül
-ter3g
+ter3g2
+tergeschos8
+tergescho7sse
+6tergrei
t6ergru
2t1ergu
-2tergü
+4tergü
+t4eri
te3ria
-ter3k4
-t2erka
-4t3erklä
-t4erli
-4t1erlö
-t4erlu
+4terklä
+2t1erlö
1term
+terma3s4
ter4mer
-3termi
ter4n3ar
-t3erneu
-t1erö
+4t3erneu
+t4ero
+t3erö
+3terras
ter4re.
1terro
-t6ers.
+t4ers.
t6erscha
ter4ser
-ter4sk
terst4
t4erst.
-t4erste
t4ersti
-ter5str
t4erstu
tert4a
teru2
te4r1uf
-ter3z2a
-4t1erzb
-t2es
-tes3ac
-te2sel
+ter4wäh
+6terwerb
+ter3za
+4t3erzb
+te2s
+tes1ac
+te3ser
+te3si
+te3so
+te3sp
+te4spr
+tess2
3tesse.
-tes3si
-tes2t
+t2es2t
tes3tät
te4st3ei
-te7ster.
-te4str
+te6ster6g
+te6sterk
+testes4
1tests
-te4stu
-te2su
+t2et.
te2tat
-6tetl
+4tetl
+teu3eri
3teuf
te1un
-teu2r5a4
-t5euro
+teu2r3a4
te2vi
-1te2x
-te3xa
-t1exe
-4t1exi
+1tex
+te1xa
+t3e2xe
+2t1e2xi
4texp
3text
2t1exz
-1té
-2t3f
-tfi4l
-2t1g4
-tg2a
-t3ge
+2t1f4
+tfä4s3
+tfi2l
+2t1g2
tger2
+tgro3
+t1h
4th.
-2t1h2a
-3tha.
-3t2hag
+2th2a
+3t4ha.
+t2hag
+t3hai
t2hak
3thal.
-t3hap
-t2har
4t3hau
-4t1hä
+2t3hä
4thc
-1the
+1th2e
t2he.
3thea
-4theb
+2theb
t2hec
-2t1hei
-3t2hek
-t1hel
-3t2hem
-5thema
-5theme
+2t3hei
+t4hein
+t2hek
+t2hem
+t4hene
+t4heni
3theo
-t2hera
-t1herd
-2t1herr
-t1herz
+2therr
t2hes
3these
+t2heu
1thi.
-3thia
-2t1hil
-t1him
-t1hin
+t2hik
+2t3hil
+2t3him
2thk
4th3l
4th3m
2th3n
-4t1hoc
-t1hof
+t2ho
+2t3hoc
+t3hof
2t3hoh
-t2hol.
-4tholz
-t2hon
-4t3hot
-thou4
-4t3hö
+t4hol.
+t3hor
+2t3hot
+thou2
+2t3hö
2thp
-3thr2
-5thrine
-4ths
-4t1hub
+1th2r2
+4thrin.
+4thrins
+2ths
+2thub
4thun
-t1hü
+2thü
2thv
-ti2a
+t2hy
+ti2ad
ti3a2m
-ti3an
tib4
ti1ce
ti3chr
-ti4d3end
+tiden2
+ti4dend
+ti2deo
t2ie
-tie3br
-5tief.
-tieg6
+1tief.
ti1el
-ti2el.
-ti3e2n1
+ti3e4n1
ti2er
+tie4rec
+tiermas6
1tierr
+tie5sse
2tieß
-ti3et
+ti1et
ti1eu
-5tif.
-ti3fa
-tif3f
+1tif.
ti1fr
+ti4gerz
tihi4
ti2kam
-ti3k2an
-ti2kr
-ti2la
-ti3las
+ti2kar
+ti3k2er
+ti2kin
+ti2krä
+tiks2
+ti2lar
+ti2lau
ti2lei
-til1ep
+ti2lel
1tilg
-ti3lo
-ti4lö
+til4leb
+til4leg
+ti2lö
tilt4
ti2lu
-ti2mag
+ti2ma2g
+t2imi
tim2m1a
4t1imp
+t2in.
ti3na
t1inb
4t1ind
-ti5n4e
+ti3n2e
t1inf
tin2g1a
-tin2g3l
-tings2
-ting5st
-t1init
-4t1inj
-tin2k3l
-t2inn
+ting3l
+ting3s2
+t1in1it
+2t1inj
+tin2k1l
+t2ins.
4t1inse
-4tint
+2t1int
+ti1nu
4t1inv
3tio
ti3or
-3tiö
+1tip
3tip.
ti3pl
-1tipp
-1tips
+3tipp
+ti4que.
ti1rh
t2is
+ti4scha
tisch3w
ti2sei
-ti2sol
-t4it
-3tite
-5titel
-tium4
+ti2sp
+3ti3te
+tium2
ti2van
+tive3
ti2vel
ti4v3erl
ti2v1o
-ti4v1r
+ti2v3r
ti2za
2t1j
2t3k4
-tklat5
-t5kr
-tkü1b
2t3l2
tl4e
-tle2r5a
+tle2r3a
4t5li
-tli5f
-tlings3
-tli5s
-t5lo
-tlö3s
-2t5m2
-tmen2s
-tmen6t
+2t1m2
+tmal2
+tmen4t3
tmo4des
t3mu
-tmüll4s3
2t5n4
-tna5me
-tnes6
-to5ar
+tnes4
+to4as
to5a4t
1tob
-to3be
2tobj
-tob4l
+tob2l
to1ch
3tocht
-3tod
-tode4
+2tock
+1tod
+3tod.
+tode2
to2d1er
-tode6s1
+tode4s1
to4d1u
-tok4
+toi4r
to3la
-tome2
-to4men
+tom1e2
+to2men
2tomg
1ton
-to5nik
-to3ny
+to2nau
3too
to2pak
to2pat
-to1pec
-t3opfer
-to3phe
-to2pl
1topo
+2topt
to1ra
to2rau
to4rän
-4torc
+2torc
t1ord
1tore.
to2r1el
to3ren
t1org
t3orga
-3torh
tor3int
to2rö
1tort
t1ort.
-to4ru
-to7sc
-to5se
+to2ru
+t2orw
+to3s2
to4sk
-to3s2p
tost4
-to5sta
1toten
to2tho
3t4ou
touil4
to3un
-3tow
tö2c
1töch
-2t1öf
+2töf
2t1ök
+tö4l
3tön
-tö4s
-t1öst
+t1ö4st
1töt
4t3p2
-t5pf4
+tpf4
2t1q
t2r4
2tr.
-tra3bl
-t4rac
-1trach
+1trac
tra3cha
t3rad.
tra4dem
+tra4far
1trag
-3tragö
-2t3rahm
-5t4rai
+2trahm
+3t4rai
+1tram
3t4ran.
2trand
-3trank
+1trank
t3rann
-3trans
+1trans
t3rase
t3rasi
+tra4str
2traß
1traum
-1träc
-t3räd
-1träg
-1träne
+traus2
+1trä
+3träg
+2träh
+3träne
+2träs
+2träß
+2träus
+2träuß
4t5re.
+tre4ale
2treb
+tre2br
2trec
t3rech
t4reck
2t3red
-t4ree
+3t4ree
1tref
2trefe
+3treff
2trefo
2treg
t4rei.
@@ -12577,36 +12613,40 @@ t3reig
t3rein
t3reis
t3reiz
-2t3rek
+2trek
2t3rel
t4rem
t4ren.
1trend
t3rent
+1trep
2trepe
2trepo
-1trepp
+t4repr
t4rer
t4res.
1t4ret
-tre2t5r
+tre2t3r
t4reu
t3rev
2trez
-5t4ré
+3t4ré
2t3rh
1trib
-t4riche
+2trid
3trieb.
3triebs
-tri4er
+tri2er
+1trin
t3rind
+2tring
tri3ni
3trio
t4rip
+t3riß
1triu
+tri2x
trizi1
-tro3b
1troc
t4roi
tro2ke
@@ -12614,498 +12654,494 @@ tro2mi
2t3roo
t4rop
3tropf
-2troß
+2t3roß
t3röc
-3trög
-2tröt
-3trug
+2tröh
+trö4s3s
+2t3röt
+1trug
2truk
trum2
trums1
-1trunk
+2trund
+1t4runk
3t4rup
t3ruß
+tru2th
+t4rüb
trü1be
trü1bu
2t3rüc
+trücker6
+t4rüg
3trümm
try1
2ts
-4ts.
-t2sa
-t4s3ab
-t5s2ac
-ts3ad
-t3saf
-ts1ah
+t4s3a4b
+t3s2ac
+ts1ad
+t2s1ah
ts1al
-t4s1amt
+t4s1amt4
+t2san
t4s3ar
-ts3as
-t4sau
-t5sau.
+ts1as
+tsa3sse
+t2sau
+t1sä
t2s1än
-ts2c
t4schar
-tsch2e
+t3sch2e
+t4schef
tsch4li
t4schro
+ts2cor
t2s1e2b
-t3seg
-t4s3e4h
+ts3eh
t3seil
t4seind
-ts3einl
ts1em
-tse2n
-ts1eng
+tse2n1
+t2s1eng
+t3sens
t2s1ent
t2s1er
+t4s3esse
+t3set
+t4seth
t2s1i2d
ts1ini
t2s1ir
-t7sit
t3skala
ts3kr
-t2s1o2
-t3sol
-t3som
-t3soz
-t2sö
-t2sp
-t3spal
-t3span
+ts1o
+tso2r
+t1spal
+t1span
ts1par
ts4pare
-t3spas
-t3spek
+t1spas
+ts2ped
+t1spek
ts2pi
-t3s2pon
-t3s2por
-ts5s2
-ts1tak
+ts2pon
+ts2por
+ts3s2
+tst4
ts2tat
ts3täti
+t4stea
t4s1tep
-t5s4ter.
t4sterm
-t5stero
-ts3terr
-t5s4tes.
-t5steu
+t4s3terr
ts1tie
-t4s3tis
-t6stit
+t2s3tis
+t2stit
ts2to
ts3toc
ts3tor
t4s3trad
-t4strau
-t4s1trä
-t4s1tri
+t2strä
+t2s1tri
ts2tro
t4strop
-ts3trü
-t2s1u
+t2s3trü
+ts1u
1tsub
-t3sy
+t1sü
4t1t
tt1ab
-tt3ad
-ttag7ess
-t2t1ak
-t3tal
-t3tan
+tta2be
+tt2ac
+t2t1ad
+tta6gess
+tt1ak
+tt2al
+tt2ant
tt1art
-tta5st
-tt1auf
+tta3s
tt1ebe
tt1eif
-tt1ein
tt1eis
-t3te2l
-tte4la
-tte4l1o
-t3t2er
-tte2s
+tte2la
+tte4leb
+tte4len
+ttel1o
+t3ter
+tt2erg
+tterma8s7s
tte4s1ä
t2teti
-t2th
-tt3ha
tt2häu
-tt1ho
-tt1hu
-t3tra
-t3trä
-t3t4ro
-tt5rom
+t2t3ho
+ttras3s
+t3tro
tt3ru
tt3rü
-tt2se
-tt3sec
-tt5se5h
-tt3sel
+tt2sen
tts1p
tt4s3tem
tt4ster
tt4sti
ttt4
t2tuc
-tt3z2
+tt2un
tu1alm
tu3an
-2tub
1tuc
tu2chi
1tue
-tue3re
-tu3et
+tu2ere
+2tuf
tuf2e
tu3fen
-t1u2fer
+t3u2fer
2tuh
-tu2k
-tu3ka
-t1ukr
-tu3la
+t3u2kr
+tul2a
+1tum
t2um.
-2tumf
-2tumk
+t2ume
+2t3umf
+t3umg
+2t3umk
+2tump
+t3umr
tum2si
tum2so
-2t1umt
-3tun.
+2t3umt
+t3umz
+1tun.
2t1una
-2tund
-3tu3ne
-2t1unf
-t1unga
-tun2gl
-tung8s
+2t1und
+2t3unf
+t3unga
+tung6s
2tunif
-2t1u4nio
-3tunn
+2t1u2nio
+1tunn
1tuns
-2tunt
+2t3unt
t1up.
-tu2ra
-tur3a4g
-tu3ras
-tur3b
+tu2r1a4g
+tu2rä
tur1c
-tu4re.
+tu2re.
tu2rei
tu2r1er
-tur3ere
-tu4res
-tu2r3e4t
+tu2res
+tu2r1e4t
+turin1
1turn
tu2ro
-tu3rol
-tur3s2
-tu2ru
-t2us
+tur3s
+tu4ru
tu2sa
tu4schl
-tu4so
+tu2so
tu3ta
-tuts3c
2tüb
-t3übe
1tüch
-tück4s
+tück2s
1tüf
1tür.
tür1c
1türe
1türg
1türs
-3tüten
-2t1v
-t5vo
-4t1w
+1tüten
+2tütz
+2t3v
+4t3w
+twa2
+twä4
twi4e
1ty
-2tyl
-ty4le
+3ty.
+3typ
ty2pa
-2t1z
-t2z1a2
-tz3an
-tz3as
-t2z1ä
-t5ze.
+3tys
+4t1z
+t2za4
+tz1ag
+tz1al
+tz1ar
+tz1au
+tz1ä
+t3ze.
t2z1ec
t2z1eie
t2z1eis
-tze4n
-tz4ene
+tze4n1
+tz2ene
tz3ents
-t2z1erl
-t3ze4s
-tz1imp
+tz1erl
+tz2ers
+t3zes
+tzes3t
+tzgel2
tz1int
-t2zo
-tz1of
-t3zon
-tz1or
+t2zor
+tz2ö
+tz2th
tz2tin
-t2z1w
-2u.
+tz1wä
+tz1wi
+tz1wu
+2ua
u3a2b
-u1a4c
-ua3d
+u1a2c
uad4r
+u1ah
u1al.
+ua2lau
+u1alb
u3alet
u1alf
-ual3l
-ua2lo
+u3a2lo
u1alr
u1als
-ual3t
+u1al3t
ua2lu
u1am
-u3ans
-ua2p
+u1ans
u3ar.
-uar3a2b
-u3ars
+uara2b
+u1ars
ua3sa
-ua2t3h
-ua5t2i
+ua2th
+uat2i
u3au
+uau2s
u1ay
u1äm
+u1än
u1äu
2u1b
-u3be
+u2bec
ub3ein
-ub6i
+u3b4i
+ubi3os.
+ub2l
ub3lic
-ub5los
-u3blö
-ub3lu
+u2b3lu
u2bop
+ub1r
ub3rä
-ub3rit
-ub2sa
+u2b3rit
+ub2san
ub2s1o
ub2spa
-ub3um
-u2b3üb
+ubus3
+u2büb
2uc
+uc1c
u1ce4
uces3
-u2ch1a
-u3cha.
-uch3an
+uch1a
+u1cha.
uch1ä
u1che
u2ch1ec
uch1ei
+ucherma8s
u3ches
u1chi
-uch3il
+uch1il
uch1in
uch3l
-uch5m
+uch3m
+uchma6ss
uch3n
u2ch3r
uch2so
+uch4spr
uchst4
-uch5str
uch4tor
uch2t3r
u1chu
+u2chum
uch3ü
-uch3w
+uch1w
+u1ci
uck2er
-uck3erl
-uck4sta
-u1cr
+u1cl
2u1d
-u5d2a
-ude3r2e
-ude5sa
+u3d2a
+uder2e
udi3en
uditi4
-u4don
+u2don
ud3ra
-ud2s
-ud3sc
-u1e
+u3dru
+2u1e
u2ed
ue2en
u2eg
-u4ela
+u2ela
ue2le
+ueli4
ue2mi
-ue2n1
-u3eni
-uen3k
+uen1
+ue2nä
+ue2ner
+uenge4
+ue2ni
+ue2no
+uen2sa
uen2zu
u2ep
ue2r3a
-u3e2r1ä
-ue2rei
-uer5eife
-u5eremp
-u5erent
+ue2r1ä
+ue3reig
+u3eremp
+u3erent
ue4rerg
+ue4rerk
uer3g2
-u3erinf
-u3erint
-uerk4
-uer4ne
+u4erinn
+u3erin4t
+uerma6s
+uer2ne
+uer4ner
uer3o
u3err
-uert2
+uer3sc
+uer3t2
u3erum
u3erunf
u3erunt
-u3erur
-uer3z
ue4s
ue5se
ue5sp
ue2ta
ue4tek
-uet2s
-uf3ad
+uf1ab
u3fah
uf1ak
-ufall2
-uf1ar
+uf3ar
uf1au
-u2f1äs
+u2f1ä4s
u2f1ä2ß
u2f1ei
u2f1em
u3fen.
u2fent
u2f1erh
+u4ferle
uf2ern
u2f1eß
2uff
-uf3fe
uff4l
uf2fro
uf3l
-u3fo2r
+u2fob
+ufo2r
uf1ori
-u1fö
uf3r
-uf5sä
+uf3sä
+uf2spo
uf4s3tem
-ufs3ten
uf4ster
-uft1eb
+uf2t1eb
uf3ten
uft3s2
-uft5sa
+u2fum
2u1g
u4gabte
ug1af
ug1ak
+ugang4
u2g1ap
uga4s
-ug3asc
ug1au
-u4g7e2i
-u2g5ent
-ug5erf
-ug5erl
-uge7sc
+ug3d2
+u2g1ei
+ugenma3
+ugenmas6
+u2g1erf
+u2g1erl
ug3hu
u2g1l
-ug3lä
-ug5lo
-u3g4lö
-u4g3lu
+ug3lad
+ug3lo
+u3g2lö
+u4glu
u2g3n
ugo3
ug1or
u2gö
u4g3reis
ug3ro
-ug3rum
+ugro3s
ug3rüs
-ug3sau
-ug7sc
-ug3s2e
+ug3sc
+ug3se
ug3si
-ug3spa
-ug4spr
-ugs2t
-ugs3te
-ugut2
+ugsma3
+ugsmas4
+ug1spa
u2gü
u1h
2uh.
-uhe1ra
uh1la
uh1lä
-uh3ma
-uh5me6
-uh3mi
-uh3na
+uh2li
+uhme4
uhr1a
-uhr3er
-uh1ri
+uh2rer
+uh3ri
uh4rin
uhrt4
-uhr3tr
uh2ru
+uh4rü
uh1w
-4ui
+2ui
ui2c
u1ie
ui1em
-u1ig
-u2ige
-u3in.
-ui5ne
+u3ig
+u4ige
+u1im
+u1in.
u3isch.
u3ischs
uisi4n
-ui4st
+ui2st
u1j
-ukä2
+uk2a
u3käu
u1ke
u1ki
-u1kl
-u3kla
+u1k2l
ukle1i
-u3klo
-u3klö
+u1k4n
u3ko
-u5kö
+uk2ö
u1k4r
uk2ta
-uk2t3in
+uk2t1in
uk2t3r
u1ku
uku2s
u1l
-ul1ab
ul1am
-ul2ar
ul1äm
ulb4
+ul2dr
uld2se
u2l1el
ule4n
ul1erf
ul1erh
ul1erw
-ules3a
+ule2sa
ule2t
-ul3eta
+ul1eta
+u2lex
+ulf4
ulg4
uli2k
-uli5ne
ul1ins
ul3ka
ul2kn
@@ -13116,394 +13152,384 @@ ul2lö
ulm3ein
ulo2i
ul1or
-ulö3s
ul2p1h
-ul2s1a
-ul3sp
+ul2sa
+ul4sam
uls2t
uls3z
-ul4tar
-ul2tau
+2ulta
ul3th
ul2tri
+ult3s
u2lü
-ulz2
-ul3zw
-u2m1a2k
+ul2vr
+ulz2w
+u2m3a2k
um1all
um2an
-um1anz
-um1ar
-um1aus
-1umd
-2ume
-um4en
+um3anz
+u2m1art
+u2m1aus
+u2maut
+1um3d2
+um2en
ument4s
umer2a
-um1erg
-um1erl
-um1erw
+u2m1erg
+u2m1erl
+u2m1erw
1umf
1umg
um1ins
um1ir
1umk
-1uml
-2umm
-um3m2a
-um3n
-u3mon
+1um3l
+4umm
+umm2a
umpf4li
-um2pl
-ump3le
+um2p3le
1umr
-1umsat
+3umsat
+um2sau
um2ser
um2sim
um2s1pe
+um4stem
um2su
-umt2
-um3th
-u2m3ur
+um3t2
+um2un
+u2m1ur
1umz
-u2n
+un1
2un.
2una.
1unab
-un1ac
+un3ac
un4al
-u3nam
-u4n3an
-un1ap
-2u5nas
+u3n2am
+u2n3an
+2un2as
un3at
-unau2
-un1ä
-4unc
+1unda
un4dab
-un4d1ac
-1unddr
+1undd
un4dei
-und3erf
+un4d3erf
und5erha
+1undf
+2undg
un2did
-un2do
+1undn
+un2dor
un2d3r
-und5re
4unds.
und3sp
-un4d3um
-1undvi
-1undzw
-un1e2
+un2d1um
+1undv
+1undz
+u3ne
+une2b
+une2h
+un2ei.
un3ein
-un3el
-une3re
-un4es4
-un3et
-un2gä
+unen2t
+un4es2
1unget
1ungew
-un1gl
1unglü
-un2g1r
+un2gr
ung3ra
ung3ri
-ung6s1
-u3ni
-un1ide
-1u4nif
-un1in
-un1ir
+ung4s1
+un2id
+un3ide
+1u2nif
+unik4
+un2im
+uni2r
2unis
un3isl
-1u4niv
-un2k1a
-un2kn
-un2kre
-un2kro
+u3n2it
+3u2niv
+2unk
+un2k1a2
+un2kei
unks2
-unk3sp
-unk4t3r
+unk4tit
+unk2t3r
3unku
un2n3a2d
-un5n4e
-un3no
-un1o
+un3n2e
uno4r
un2os
1unr
uns2
2uns.
-unsch5el
un3se
1unsi
un3sk
un3sp
+unst1r
1unt
un3ta
-unte2
-un3th
-un3t4r
+unte4ri
+un3tr
+unt3s
2untu
-un1u
-u3nut
+u1nü
unvol2
unvoll3
1unw
+2unz
+2uo
u1o2b
u3of
+u1op
+u1or
u3or.
-u1or3c
+u3or3c
+u3ors
u1os.
+uote2
u1pa
u1pe2
uper1
up2fa
-up3f2e
-up2f1i
-u3pfl
+upf2e
+upf1i
+u1pfl
u3pi
+up2pl
up2pr
u1pr
-up1ru
-up1sl
upt3a2
upt3erg
upt1o
-u1pu
u1q
2ur.
u1ra
-u3ra.
+u2rab
u3raba
ura2be
-u3rak
-u3ral
-ur3alg
u2r3a2m
-ur1ana
+u2r1ana
ur2anb
-u3rand
-ur1ang
+u2r1ang
ur2anh
-ur1ans
-u3rant
-ur3a6ren
-u3rati
-ur3att
-ur1au
-u3raz
-2urä
+u2r1an5s
+u2rar
+ur3a4ren
+u2r3att
+u2r1au
+2u1rä
ur1än
-urb2
-ur3ba
-ur2ble
+ur3b2a
urch1
-urch5s
ur3d2i
-2ure
ur1eff
-ure3g
u2rele
ure4n
-u5ren.
-u2rent
+u4r1ep
ur1erh
ur1erw
2urf
-urg2a
+urf3t
ur2gri
-urgros4
-u1r2i
+urgs2
uri2c
-u2r3im
-ur3ind
+ur1im
ur1ini
ur3ins
ur1int
-ur3inv
+u2rinv
1urlau
-2u1ro
-uro5st
+4u1ro
+u3rol
u1rö
+ur3p
2urr
ur2san
-urs3au
-ur2sei
+ur2sau
ur2ser
-ur4sin
-ur5st4r
-ur6sw
-urt4
-ur5te
-ur3th
-u1ru
+urst4r
+ur4sw
+urs2ze
+urt2
+u3ru
ur2za
ur2zä
ur2zi
ur2zo
ur2z1w
+2us
u4saf
us4ann
-u2sau
+us5art
+u1sä
u6schent
usch5wer
-us1ec
+u2s1ec
u2s1ei
u3seid
-u7sep
+u3sep
use1ra
u2serp
-us4et
+u2s1ese
usi3er.
usi5ers.
-us3li
+us3kl
+u4sko
+usmas2
+usma5sse
+u1so
us3oc
u3soh
u3sol
-us1op
-us3ou
-u3sow
+u2s1op
+us1ou
+u1sö
+u1sp
us3part
-us1pas
+u2s1pas
+u2spat
us1pe
-u3spek
+u3s2pek
us1pic
-u5s2piz
+u3s2piz
+u2spo
us2por
-us2sac
-us6sat
-us2sei
-us3sel
-usse4n
+u2spu
+u4s3sel
+us2sen
+us5sende
+us6seni
+ussenma7s
+us2ser
+us4serf
uss5erfa
-uss3erk
-us5sers
us2sez
-us2sir
-uss3tät
-us2sü
-u4st1a2b
-u5stal
+u3ssig
+us2sof
+u2stab
+ust3abe
+u3stal
us2tat
-u5stä
-u5ste
us2ten
-us2ter
+us4ter.
us2th
-u5stis
-u5stop
-us1tor
-u4strä
-u5s4trop
-u5stu
-u6s1tur
-u5stüc
+ust2in
+u3stis
+u2s1tor
+u2strä
+u4strit
+u3s4trop
+u2s1tur
+u2sty
+u1su
us2ur
-u2sü
-u1sy
-u4sz
-uß3et
+2uß
u2ß1u
2u1t
-u3taf
+u3ta.
ut1alt
-ut1a4m
-u2tanz
+ut3a2m
u2t1ap
-u2t3ar
-ut1är
-u3tät
-u3te.
-u2t1e4g
-ute2l
-ut2em
+u2t1ar
+u2tär
+u3te
+ut1eg
+ute4ge
ute2n1
-u3ten.
-uten3e
u2tent
-u5ter.
-ute5r4er
+uter4er
u4t3ersa
-u3tet
-u2tev
+ut2es
+ut2et
+u4tev
u4t1ex
-u2t1hi
-u2t1ho
-u2t1hu
-uti2q
+utfi4
+ut2he
+u2thi
+u2t3ho
+u2thu
+utmas2
+utma5sse
u3to.
uto4ber
uto3c
-uto3n4
+u3tom
ut1opf
u2tops
ut4or
-u3tos
ut3rea
ut3rü
-ut5sa
+ut3s2a
ut2s1ä
ut4schl
-ut3sp
-ut4spa
+ut4schm
+ut4schö
+ut1sp
+ut2spa
ut3te
ut3t4l
-utts2
-utt3sp
-utu3ru
+utt1s2
+utu4re
+utu5ru
utz3eng
ut2zin
-u1u4
+ut2zo
+ut2z1w
+2u1u2
uufe2
u1ü2
u1v4
u2ve.
uve3rä
u1w
-uwa3s
-u1x2
+2u1x
+ux2e
+ux2o
ux3t
u1ya
-u1z
-uze4
-uz3ot
+2u1z
uz1we
uz3z4
1üb
+2übc
2übd
-übe4
-über1
-ü2b5l
-3üb3r
-3übu
+übe2
+über3
+üb3l
+üb3r
2üc
ü1che
üch3l
üch4s1c
-üch5t4e
+ücht4e
ück1er
-ück3e4ri
-ü4d3a4
-üdau5
+ück3eri
+ück4spe
+üd3a4
ü3den.
üden4g
ü3d2ens
üd1o4
-üd1ö4
-ü4d5r
-üd3s
+üdö4
+üd3r
+üd3s2
üdsa1
-üd1t4
-ü4f3a
+üd3t4
+üdwe2
+ü2f1a
ü2f1ei
+üfer2
ü2f1erg
üf2fl
ü2f1i
üf3l
-üf3te
+üf2to
ü1g
+üge6leis
ü2g3l
ü2gn
üg3s
@@ -13515,76 +13541,72 @@ uz3z4
ü2h1erz
üh1i
ühl1ac
-ühl1ag
-üh5l2e
-üh3li
-üh3mi
+ühl2e
üh3mo
-üh5ne
-ühner5ei
-üh3r4e
-ühr5ei.
-üh5ro
-ühr5ta
+üh3ne
+üh3r2e
+ühr3ei.
+üh1ro
+ühr3ta
ühs2
-üh3sp
üh3stu
-üh3te
+üh3t
+üh4th
ü1hu
üh1w
ü1k2
2ül
ül1a
ül2c
-ü5l4e
+ül4e
ül2la
ül2l1ei
ül2lo
-ül4lö
+ül2lö
ü1lu
-ü4ment
+ü2ment
ü2n1a
-ün2c
ün2da
ün2dr
-ün2f1
-ün4f3ei
-ün3fl
-ün4fli
-ünf5r
+ünen3
+ün2fa
+ün2f1ei
+ün2fli
+ün2fr
ün2g3l
-üng5s
-ün3th
+ünt2
+ü1nu
ün2za
ü1pe
ü1pi
-ü1pu
+üp2pl
ür1a
ü2r1ei
ür2fl
-ür4f3r
-ür4g5eng
-ü1ri
+ür2fr
+ür4g3en4g
ü1r2o1
-üro3b
-ü3rofe
ür4ster
-ür5sti
ürt2h
-ür3the
-ü1ru
üs2a
+üs4c
ü2schl
+ü5se
üse3h
üse3l
-üs4sa
+ü1sp
üs4s1c
-üs3se
+üss2e
+ü4s3sel
üs4st
-ü4sta
+üs2su
+üs4t
+ü2sta
üste3ne
-ü4str
+ü2str
+ü1su
ü1ß
+2üt
ü1ta
ü2t1al
ü1te
@@ -13595,282 +13617,295 @@ uz3z4
ü1tu
ü1v
ü1z
-4v.
-3va.
2v1ab
-va3c
-va3ge
+va1c
val2s
2vang
-2v1arb
+2varb
+vas2
v4at
-va2t3a6
+va2t3a4
+va2tei
va2t3h
+vatik2
va4t1in
vati8ons.
va2t3r
-vat5s4
-vat3t
+vat3s4
va2t1u
vat3z
2v1au
vä1
2v1b
2v1d
-ve2
+1ve2
ve3ar
ve3b
ve3c
ve3d
ve3g
ve3h
-veit4
+ve4i
+veit2
veits1
ve3la
ve4l1au
ve3le
ve3li
-veli5ne
ve3lo
ve3ma
ve3mu
ve3nal
+ven2c
ve3ne
+venen4d
ve3ni
-ven3k
ve3nö
-ve3nu
ve3o
ver1
ver3a
ve3rad
-ve5rand
-ve5ras
-ver3b4
-ver3d2
+ve3rand
+ve3ras
+ver3b2
+verd2
vere2
-ve3reie
-ve3ren
+ve4rek
verf4
verg4
+vergas6
ve3ri
-ve5ris
-ve5rit
-ver5sta
+ve4rin
+ver3k
+vermas8sen
+ver3sta
+vert2
+ver5te
+ver3u
ve3s
2vesc
2vese
+ve4sh
ve4s1p
-ves2t
+ves4t
ve3ta
vete1
-vete3r
ve3tr
2veü
ve3v
-ve5x2
-ve7xe
+ve3x2
2v1f4
2v1g
2v1h
-vi2a
-vi3an
+vi3ar
vi4a3t
-vi4c
-vi3de
+vi2c
vie2h3a
vi2el
vi2er
+vie4rec
vie2w1
vig2
-vi3ka
+2vii
vi2l1a
-vi2leh
+vi4leh
vi2l1in
-vil3l
2v1i2m
+vima2
vi4na
vin2s
2v1int
-3vio
vi3sa
vise4
vi3s2o
+vi2sp
vis2u
-vize5
2v1k
2v1l2
2v1m
2v1n
2v1ob
+vo3ga
vo2gu
+3vol
+vollen4
vol6l5end
-vol6lerw
vol2li
2v1op
vo2r1
vor3a
vor3d
+vor3e
vor3g
vo3ri
-vo5rig
-vor3o
+vormen4
vorö4
3voy
2v1p
-v3pf
-v1ra
-3vri
-v1ro
+v2r
+2v3ra
+v3re
+v4ree
+2v3ro
2v1s
+vs2e
v3s2z
2v1t
+vu2et
2vumf
2v1v
2v1w
2v1z
-4w.
w2a
+1waa
wab2bl
-wa3d
+wa3che
+wach6stu
+wach4t4r
waffe2
+waffel3
1wag
-wa3ge
-wa2g5n
-wa2gr
-wa3gra
-3wah
+wa5ge
+wa2g3n
+wa3go
+1wah
wahl5ent
-wah3ru
+wah4ler
+wah2li
wai2b
1wal
-3wald
+2walb
wal4da
+2walm
+wal2ta
wal2to
walt4st
+wa3na
+wang4s
wa2p
-wa4r
-wa5ra
-1wa3r2e
+1war2e
ware1i
-wa5ri
wart4e
-wa5ru
-1wa2s
+1was
wa3sa
+wa4scha
wa3sh
-wa3si
-was5s4
+wass4e
+w2ä
1wäh
1wäl
wäm3
-1wäs
-wäs2c
-wä5sche
-w1b
+2wäng
+1wäs3
+wä5sc
+wä4ss
+2w1b2
+wbu2
2w1c
-w1d
-weat3
-we3be
+2w1d
+we2a
+we2ba
4webeb
-we3d
-we2e2
-weed1
+we2bl
+web3s
+we2e4
+weed3
we2fl
-3weg
-we2g5a
-we2g5l
-we4g3r
-wegs2
-weg3sp
+1weg
+we2g1a
+we2g3l
+we2g3r
+weg1s2
1weh
-we3he
+we2i
wei4bl
2weie
+weik4
weis4s3p
-wei5str
-wei3ße
wei4tr
-weit3s
-wel2s
-wel3se
+weit1s
+wel6schl
+wel6schr
wel2t1
-wel4t3a
-wel6tend
+wel4t3a4
+wel6t5en6d
wel4tr
-wen3a6
+wen3a4
we3ni
wen4k3ri
we2r3a
wer2bl
1werbu
werd2
-werde3i
5werdens
1werdu
+werer2
wer2fl
-2werg
-we4r1io
+wer4gel
+we4r3io
1werk.
+wer2ka
1werke
wer2kl
wer2ku
+we2rö
wer4sta
wer2ta
-wer4tei
wer6t5erm
-wer4to
+wer2to
1werts
-1we5se
+1wese
wesen4s3
-we3si
we2s1p
wes2t
-we4st1a
+we2st1a
we4st3ei
-we5sten.
-we5stens
-we6steu
-we6sti
-we4st1o2
-we4stö
-we4st3r
+we4steu
+we4sti
+we2st1o2
+we2stö
+we2st3r
we4stu
+1wet
wet2s
wett3s
+2w1ey
2w1g
-w3ho
-3wid
+2w3h
+1wid
wi2e
wie3l
-wie5ne
+wien2e
wie4st
-wi3k2
+wik2
+1wil
+wim2ma
wim4m3u
win4d3ec
win2dr
win2e
+2wing
win8n7ersc
win4num
-wi4r
-1wirt
-wi5s4e
+1wi4r
+wi3s2e
+wi2sp
1wiss
+wi3st
wi3th
1witzl
-3wj
-2wk
+2w1k
2w1l
2w1m
2wn
-wn3sh
+wn3s
1wo1c
wo2cha
woche4
1woh
-woh4l
+woh2le
1wolf
-wolf4s
+wolf2s1
wol4la
wol4ler
wor3a
@@ -13880,41 +13915,43 @@ wo4r3u
wot2
1wöc
wört2h
-wör3the
2w1p
-1wr
-w1ro
-2ws
+w2r
+w3ro
+2w1s
w3s2k
2w1t
wti2
w2u
1wuc
+wuch4sc
wuls2
wun2s
4wur.
wur2fa
1wurst
wus4
-1wu2t1
+1wu4t1
1wüh
wüs4
2w1w
-6x.
x1a
1xa.
-2xab
-1xad
+2xa2b
+1x2ad
1xae
xa1fl
-1x2a3g
-xa4m
-xa3me
-xa5mer
-2xan
-3xas
+1x2ag
+xa2m
+x2anz
+1x2as
+xau3
+xaus2
2x1b
-x1c
+2xc
+x1ce
+x1ch
+x1cl
4x1d
1xe
x1e4g
@@ -13922,395 +13959,428 @@ x1e4g
xe2l
xe3lei
x1em
-7x2em.
-xemp6
-3x2en
-xens2
-xen3sa
+3x2em.
+x2en
+xen3s2
x2er.
-5xere
+x2ere
xers2
3xes
2x3eu
2x1f
2x1g
-2x3h
-1xi
+2x1h
xib4
xi1c
xich2
-2xid
xide2
xi2d1em
x1i2do
xie3l
-xi3g4
+xi3g
+xil1
+xil2a
xi2lo
-xi2l1u
-xins2
-xin3sk
+xi2lu
+xin3s2
x2is
xi2s1e
xi2s1o2
xis5s
-xi5stä
+xi3stä
xi2su
x1i2tu
x1j
-x1k4
-2x3l
-x1m
+2x1k2
+2x2l2
+x3lä
+x3le
+2x1m
2x1n
x1or
-4x3p
+4x1p
+xpor6ter
x1q
-x1r
+2x1r
2x3s2
4x1t
x2t1a
-xt3an
-x3t4as
-x2t1ä
-x3tät
+x3ta.
+x3t2as
+xt1ä
+x2tän
x2t1e2d
x2t1ei
-x3teil
x2tent
-x2t1erf
-xtra1b6
+x2t1er2f
+x2t3ev
+xtfi4
+x2t1il2l
+xtra3b4
x2t3ran
-xt3s2
-x2t1u
-x3tur
+xt1s2
+xt1u
+x3t2ur
1xu
xu1a
-x1u4n
+x1u2n
xu2s
-x1v
+2xv
2x1w
-1xy.
-1xys
+2xy
+3xy.
+3xys
x1z
2y1ab
1yac
y1al.
y1a2m
yan2g
-y3ät
+y1ank
+y1ät
y1b
-y1c
+y1c2
y2chi
y3chis
-ych5n
-y1d
-y3d4r
+ych3n
+y1d4
y1e
y2ef
yen4n
-y2es2
-ye3sp
-y3e4st
+y2ere
+yes2
+y2es.
+ye4st
ye2th
-y1f
+y1f2
y1g
+ygi2
ygie5
+yg2l
y1h
yhr2
y1i4
y1j
-y1k4
-yk5s
+y1k2
+yke3n
+yk3s2
y1l
-yl3a2m
-y3lant.
-y3l4ante
+y2l3a2m
+yl4ante
yl3c
-y5len
-y5ler
+y4le.
yli4n
yloni1
y2l1u
yma2t
ym3p2
-ympi3e
-y2ne
-y2n3o
-yn3t
+ympi1
+y2n1o
+yno4d
+ynt2
y1of
yom2
yon4i
y1ont
-y3ou
+y1ou
y1p
ypa2
-yp5an
+yp3an
ype2
-yper3t
+y2pf
y3ph
y2p1in
ypo3
-y4ps
-yp3t
+y4p3s
y1r
y3r2e
y3ri
+yri2a
yri1e
-y3ro
-y1s2
-y5sc
-y3sh
-ys3k
-y3sp
-ys3s
+y3r4o
+yrr2
+y1s
+ys2an
+ys2c
+yse1
+y3s2h
+y4s3l
+ysme3
+ys2pa
yst4
-y3sty
-y3sz
-y1t
-y2t2h
-yto5s
+y2s1u2
+y3s2z
+y1t2
+y2te.
+y2tes
+y3to
yu2r
yure3
y1v
y1w
y1y
y1z2
-6z.
-2z3a2b
-za1cha
-za1chä
-z3a2d
-za3de
+za2
+2z3ab
+zab3l
+za3cha
+za3chä
+z1ad
2z1af
+za3ge
za3gr
-3z2ah
-2z3a2k
+3zah
+2z3ak
+zale3
za3li
2z1all
2z1am
-z3ambik
3zambiq
z1an
+za3ne
2z3anf
3zani
-3zar.
-2z1arb
-3za3re
+2z3anl
+za3no
+za3ra
+2zarb
+2zarc
+za3re
+za3ri
z1arm
-3za3ro
-za5st4
-2z3at
+za3ro
+z1arti
+zar2tr
+2z1arz
+z1as
+zast4
+2z3at3
3zaub
z1au2f
z3aug
3zaun
-za3v
zä2
2z1äc
3z2äh
2z1äm
-zäng5
z1ärg
z1ärm
4z3b4
zbü1b
-zbübe5
-4z3c
-2z3d
+zbübe3
+2z3c
+2z3d2
+zdan2
zdä1
-1ze
-ze3a
-2zeck
+zeau3
+zeaus4
+2z1e2ben
+2zecho
+2z1eck
ze1e
2z1eff
+zeik4
zei3la
zeile4
2z1ein
-zei5s2
-zei3sk
+zeinbus6
+zei3s2
zeist4
-zeit1a
-zei4tak
-zeit7ende
+zei2t1a
+zeit5end
zei4t3er
zei2tr
-zeit3sp
-ze4l1a2
-zel3ad
-zel1er
-zel1in
-zel5l4a
-zel5lä
+ze2l1a2
+ze2len
+ze2l1er
+ze2l1in
+zell2a
zel4leh
zel4lin
-zel3spr
zel3sz
-zel3th
+zel3t2h
zelu2
-ze5m4e
2z1emp
5zen.
-ze6n1ac
-zen3s2e
-zen2ta
-5zentr
-zent3sk
-2zentw
-ze2nu
+ze4n3ac
+zen3n
+ze2no
+zens2e
+zen4sem
+3zent
+zent3s
zen4zer
-5z2er.
+z2er.
ze2r3a
-ze2r1e2b
+ze2re2b
2z1ergä
4z3ergeb
z3erhal
2zerhö
-ze3ri
-zer3k2
-3zerl.
-5z2ern
+zerin4t
+zerk2
+z2erl.
+2zerlö
+z2ern
zer4neb
-zer6n3ei
-2zerq
-5zerr
-z2ers
-2z3ersa
-4zerste
-zert2a2
+zer4n3ei
+2z1erq
+zers2
+2z1ersa
+4z3erste
+zert1a4
zer4t3ag
-zer4ter
+zert4an
+zer6tere
zer4tin
zer6t5rau
-2zerz
-3zerza
-z1erzi
-ze2sä
-ze5sc
-ze2s1i
+4zerwei
+2z1erz
+3z2erza
+ze2s
+zes1e
+zes1i
ze3sku
-ze2s3p
-zes4ser
+zessen4
+zes6s5end
+zes2sp
zes1tr
ze2ß1
ze2tr
+2zetts
2z1ex
-2z3f
-2z1g
+2z1f4
+zfä4s3
+2z1g2
zger2a
2z1h
z2hen
+zhir3
3zi.
-zid5r
+zi3alo
+zi3ar
+zid3r
zi1erh
zi1es.
-3z2ig
+3zig
zil2e
-zil3l
z2imm
-2zimp
-3zine
+2z1imp
+zin2e
zin4er
2z1inf
z1inh
+zin1it
+zin2sa
zin4ser
4zinsuf
-2z1inv
-zi2o
+z1inv
+zi2o3
zi3op
-zirk4
+zirk2
zirk6s
zi3s2z
zit2h
2z1j
2z3k4
-zkü1b
-2z1l
-z3la
-2z1m
-2z3n2
-2zob
-2zof
-z1oh
+2z1l2
+2z1m2
+zme2e
+2z3n4
+2z1ob
+2z1of
+zo2gl
+2z1oh
3zol
-zol3lu
-zon6ter
+zon4ter
zo2o
-zo2r
-zo3re
+2zope
+z1or
+zo2ri
zor4ne
-zo5se
2z1osz
-2zot
-2z1ö2f
-zö7li
-2z3p2
+2z3ot
+2zö2f
+z1öl
+2z3p4
2z1q
2z3r2
-4z3s2
+4z1s2
+z3sa
+z3sh
+z3sk
+z3str
+z3sz
2z1t
z2t1au
-z3te
z4tehe
-zte3o
-zte5str
-z2t1h
-z4t3hei
+zte3str
z3t2her
zt3ho
zt1ins
zt3rec
zt3s2
-zu1
zu3a
zub4
-zu2c
+zu4c
zud4
+zudi4
+zu2el
zu3f4
zu2g1ar
+zu4gent
zu3gl
-zu2g1un
+zugs1t
+zug4ste
+zug1un
2z1uhr
+zu1i
+zu3k
2z1um.
zumen2
2zumf
2zumg
2zuml
2z1ums
-zu3nä
-zu3n2e
+zun2e
2zunt
-zu3nu
-zu3nü
+zup2fi
zu3r2a
-2z1urk
+z1urk
2z1url
-2zurs
+2z1urs
2z1urt
zu3s2
-zu3t
+zu3t2
zuz2
2züb
zür1c
2z1v
zw2
+z1wac
4zwah
zwan2d1
-4z3wäl
+z2wang
+z1war
+2zwas
+4zwäl
2zweg
z2weig
+z1wei3s
2z1wel
2z1wen
-2zwer
-4zwerk
-z1wes
+2z1wer
+z2werg
+2z1wes
+2zwet
4zwir
z2wit
2z1wo
-2zwö
+z1wör
z1wur
2z1wü
-zy1ank
-6z1z
+4z1z
z3z4a
-z3zi
-z3zo
-zzoll2}
+zze3s
+z3z2o
+zz2ö} \ No newline at end of file
diff --git a/Master/texmf-dist/tex/context/patterns/lang-deo.rme b/Master/texmf-dist/tex/context/patterns/lang-deo.rme
index 3997cda14a9..b3a2b69ccbc 100644
--- a/Master/texmf-dist/tex/context/patterns/lang-deo.rme
+++ b/Master/texmf-dist/tex/context/patterns/lang-deo.rme
@@ -1,8 +1,8 @@
% generated by mtxrun --script pattern --convert
-% dehypht-x-2008-06-18.pat
+% dehypht-x-2009-06-19.pat
-\message{German Hyphenation Patterns (Traditional Orthography) `dehypht-x' 2008-06-18 (WL)}
+\message{German Hyphenation Patterns (Traditional Orthography) `dehypht-x' 2009-06-19 (WL)}
% TeX-Trennmuster für die traditionelle deutsche Rechtschreibung
%
@@ -17,15 +17,15 @@
%
% The word list is available from
%
-% http://repo.or.cz/w/wortliste.git?a=commit;h=469951d78911b130c2c50f0bc327d2c5d1204895
+% http://repo.or.cz/w/wortliste.git?a=commit;h=e4826ce7db99bceb6043be48983ff2b67d56669f
%
% The used patgen parameters are
%
% 1 1 | 2 5 | 1 1 1
-% 2 2 | 2 5 | 1 1 1
+% 2 2 | 2 5 | 1 2 1
% 3 3 | 2 6 | 1 1 1
-% 4 4 | 2 6 | 1 1 1
+% 4 4 | 2 6 | 1 4 1
% 5 5 | 2 7 | 1 1 1
-% 6 6 | 2 7 | 1 1 1
-% 7 7 | 2 9 | 1 4 1
-% 8 8 | 2 9 | 1 4 1
+% 6 6 | 2 7 | 1 6 1
+% 7 7 | 2 13 | 1 4 1
+% 8 8 | 2 13 | 1 8 1
diff --git a/Master/texmf-dist/tex/context/patterns/lang-es.hyp b/Master/texmf-dist/tex/context/patterns/lang-es.hyp
index 3768bbd79e7..1be9ae4e0a3 100644
--- a/Master/texmf-dist/tex/context/patterns/lang-es.hyp
+++ b/Master/texmf-dist/tex/context/patterns/lang-es.hyp
@@ -1,6 +1,6 @@
% generated by mtxrun --script pattern --convert
-% for comment and copyright, see ./lang-es.rme
+% for comment and copyright, see e:/tmp/patterns/lang-es.rme
% used:
diff --git a/Master/texmf-dist/tex/context/patterns/lang-es.pat b/Master/texmf-dist/tex/context/patterns/lang-es.pat
index 10449d76b78..691848d1653 100644
--- a/Master/texmf-dist/tex/context/patterns/lang-es.pat
+++ b/Master/texmf-dist/tex/context/patterns/lang-es.pat
@@ -1,12 +1,12 @@
% generated by mtxrun --script pattern --convert
-% for comment and copyright, see ./lang-es.rme
+% for comment and copyright, see e:/tmp/patterns/lang-es.rme
-% used: X a b c d e f g h i j k l m n o p q r s t u v w x y z á é í ñ ó ú ü
+% used: a b c d e f g h i j k l m n o p q r s t u v w x y z á é í ñ ó ú
\patterns{
-1ñ
1b
+4b.
2bb
2bc
2bd
@@ -15,14 +15,10 @@
2b1h
2bj
2bk
-b2l
-2bl.
2bm
2bn
2bp
2bq
-b2r
-2br.
2bs
2bt
2bv
@@ -31,23 +27,18 @@ b2r
2by
2bz
1c
+4c.
2cb
2cc
2cd
2cf
2cg
-c4h
-2ch.
2cj
-c2k
-c2l
-2cl.
+2ck
2cm
2cn
2cp
2cq
-c2r
-2cr.
2cs
2ct
2cv
@@ -56,6 +47,7 @@ c2r
2cy
2cz
1d
+4d.
2db
2dc
2dd
@@ -69,8 +61,6 @@ c2r
2dn
2dp
2dq
-d2r
-2dr.
2ds
2dt
2dv
@@ -79,6 +69,7 @@ d2r
2dy
2dz
1f
+4f.
2fb
2fc
2fd
@@ -87,14 +78,10 @@ d2r
2f1h
2fj
2fk
-f2l
-2fl.
2fm
2fn
2fp
2fq
-f2r
-2fr.
2fs
2ft
2fv
@@ -103,22 +90,19 @@ f2r
2fy
2fz
1g
+4g.
2gb
2gc
2gd
2gf
2gg
-2g2h
+2g1h
2gj
2gk
-g2l
-2gl.
2gm
2gn
2gp
2gq
-g2r
-2gr.
2gs
2gt
2gv
@@ -126,6 +110,7 @@ g2r
2gx
2gy
2gz
+4h.
2hb
2hc
2hd
@@ -148,6 +133,7 @@ g2r
2hy
2hz
1j
+4j.
2jb
2jc
2jd
@@ -170,22 +156,19 @@ g2r
2jy
2jz
1k
+4k.
2kb
2kc
2kd
2kf
2kg
-2k2h
+2k1h
2kj
2kk
-k2l
-2kl.
2km
2kn
2kp
2kq
-k2r
-2kr.
2ks
2kt
2kv
@@ -194,6 +177,7 @@ k2r
2ky
2kz
1l
+4l.
2lb
2lc
2ld
@@ -202,8 +186,6 @@ k2r
2l1h
2lj
2lk
-l4l
-2ll.
2lm
2ln
2lp
@@ -217,6 +199,7 @@ l4l
2ly
2lz
1m
+4m.
2mb
2mc
2md
@@ -239,6 +222,7 @@ l4l
2my
2mz
1n
+4n.
2nb
2nc
2nd
@@ -261,6 +245,7 @@ l4l
2ny
2nz
1p
+4p.
2pb
2pc
2pd
@@ -269,14 +254,10 @@ l4l
2p1h
2pj
2pk
-p2l
-2pl.
2pm
2pn
2pp
2pq
-p2r
-2pr.
2ps
2pt
2pv
@@ -285,6 +266,7 @@ p2r
2py
2pz
1q
+4q.
2qb
2qc
2qd
@@ -307,6 +289,7 @@ p2r
2qy
2qz
1r
+4r.
2rb
2rc
2rd
@@ -320,8 +303,6 @@ p2r
2rn
2rp
2rq
-r2r
-2rr.
2rs
2rt
2rv
@@ -330,6 +311,7 @@ r2r
2ry
2rz
1s
+4s.
2sb
2sc
2sd
@@ -352,6 +334,7 @@ r2r
2sy
2sz
1t
+4t.
2tb
2tc
2td
@@ -364,16 +347,15 @@ r2r
2tn
2tp
2tq
-t2r
-2tr.
2ts
2tt
2tv
2tw
-t2x
+2tx
2ty
2tz
1v
+4v.
2vb
2vc
2vd
@@ -382,14 +364,10 @@ t2x
2v1h
2vj
2vk
-v2l
-2vl.
2vm
2vn
2vp
2vq
-v2r
-2vr.
2vs
2vt
2vv
@@ -398,6 +376,7 @@ v2r
2vy
2vz
1w
+4w.
2wb
2wc
2wd
@@ -406,14 +385,12 @@ v2r
2w1h
2wj
2wk
-w2l
-2wl.
+2wl
2wm
2wn
2wp
2wq
-w2r
-2wr.
+2wr
2ws
2wt
2wv
@@ -422,6 +399,7 @@ w2r
2wy
2wz
1x
+4x.
2xb
2xc
2xd
@@ -444,6 +422,7 @@ w2r
2xy
2xz
1y
+4y.
2yb
2yc
2yd
@@ -466,6 +445,7 @@ w2r
2yy
2yz
1z
+4z.
2zb
2zc
2zd
@@ -487,7 +467,445 @@ w2r
2zx
2zy
2zz
-2t2l
+1ñ
+4ñ.
+c4h
+4ch.
+2chb
+2chc
+2chd
+2chf
+2chg
+2chh
+2chj
+2chk
+ch2l
+2chm
+2chn
+2chp
+2chq
+ch2r
+2chs
+2cht
+2chv
+2chw
+2chx
+2chy
+2chz
+l4l
+4ll.
+2llb
+2llc
+2lld
+2llf
+2llg
+2llh
+2llj
+2llk
+2lll
+2llm
+2lln
+2llp
+2llq
+2llr
+2lls
+2llt
+2llv
+2llw
+2llx
+2lly
+2llz
+b2l
+4bl.
+2bl2b
+2bl2c
+2bl2d
+2bl2f
+2bl2g
+2bl2h
+2bl2j
+2bl2k
+2bl2l
+2bl2m
+2bl2n
+2bl2p
+2bl2q
+2bl2r
+2bl2s
+2bl2t
+2bl2v
+2bl2w
+2bl2x
+2bl2y
+2bl2z
+c2l
+4cl.
+2cl2b
+2cl2c
+2cl2d
+2cl2f
+2cl2g
+2cl2h
+2cl2j
+2cl2k
+2cl2l
+2cl2m
+2cl2n
+2cl2p
+2cl2q
+2cl2r
+2cl2s
+2cl2t
+2cl2v
+2cl2w
+2cl2x
+2cl2y
+2cl2z
+f2l
+4fl.
+2fl2b
+2fl2c
+2fl2d
+2fl2f
+2fl2g
+2fl2h
+2fl2j
+2fl2k
+2fl2l
+2fl2m
+2fl2n
+2fl2p
+2fl2q
+2fl2r
+2fl2s
+2fl2t
+2fl2v
+2fl2w
+2fl2x
+2fl2y
+2fl2z
+g2l
+4gl.
+2gl2b
+2gl2c
+2gl2d
+2gl2f
+2gl2g
+2gl2h
+2gl2j
+2gl2k
+2gl2l
+2gl2m
+2gl2n
+2gl2p
+2gl2q
+2gl2r
+2gl2s
+2gl2t
+2gl2v
+2gl2w
+2gl2x
+2gl2y
+2gl2z
+k2l
+4kl.
+2kl2b
+2kl2c
+2kl2d
+2kl2f
+2kl2g
+2kl2h
+2kl2j
+2kl2k
+2kl2l
+2kl2m
+2kl2n
+2kl2p
+2kl2q
+2kl2r
+2kl2s
+2kl2t
+2kl2v
+2kl2w
+2kl2x
+2kl2y
+2kl2z
+p2l
+4pl.
+2pl2b
+2pl2c
+2pl2d
+2pl2f
+2pl2g
+2pl2h
+2pl2j
+2pl2k
+2pl2l
+2pl2m
+2pl2n
+2pl2p
+2pl2q
+2pl2r
+2pl2s
+2pl2t
+2pl2v
+2pl2w
+2pl2x
+2pl2y
+2pl2z
+v2l
+4vl.
+2vl2b
+2vl2c
+2vl2d
+2vl2f
+2vl2g
+2vl2h
+2vl2j
+2vl2k
+2vl2l
+2vl2m
+2vl2n
+2vl2p
+2vl2q
+2vl2r
+2vl2s
+2vl2t
+2vl2v
+2vl2w
+2vl2x
+2vl2y
+2vl2z
+b2r
+4br.
+2br2b
+2br2c
+2br2d
+2br2f
+2br2g
+2br2h
+2br2j
+2br2k
+2br2l
+2br2m
+2br2n
+2br2p
+2br2q
+2br2r
+2br2s
+2br2t
+2br2v
+2br2w
+2br2x
+2br2y
+2br2z
+c2r
+4cr.
+2cr2b
+2cr2c
+2cr2d
+2cr2f
+2cr2g
+2cr2h
+2cr2j
+2cr2k
+2cr2l
+2cr2m
+2cr2n
+2cr2p
+2cr2q
+2cr2r
+2cr2s
+2cr2t
+2cr2v
+2cr2w
+2cr2x
+2cr2y
+2cr2z
+d2r
+4dr.
+2dr2b
+2dr2c
+2dr2d
+2dr2f
+2dr2g
+2dr2h
+2dr2j
+2dr2k
+2dr2l
+2dr2m
+2dr2n
+2dr2p
+2dr2q
+2dr2r
+2dr2s
+2dr2t
+2dr2v
+2dr2w
+2dr2x
+2dr2y
+2dr2z
+f2r
+4fr.
+2fr2b
+2fr2c
+2fr2d
+2fr2f
+2fr2g
+2fr2h
+2fr2j
+2fr2k
+2fr2l
+2fr2m
+2fr2n
+2fr2p
+2fr2q
+2fr2r
+2fr2s
+2fr2t
+2fr2v
+2fr2w
+2fr2x
+2fr2y
+2fr2z
+g2r
+4gr.
+2gr2b
+2gr2c
+2gr2d
+2gr2f
+2gr2g
+2gr2h
+2gr2j
+2gr2k
+2gr2l
+2gr2m
+2gr2n
+2gr2p
+2gr2q
+2gr2r
+2gr2s
+2gr2t
+2gr2v
+2gr2w
+2gr2x
+2gr2y
+2gr2z
+k2r
+4kr.
+2kr2b
+2kr2c
+2kr2d
+2kr2f
+2kr2g
+2kr2h
+2kr2j
+2kr2k
+2kr2l
+2kr2m
+2kr2n
+2kr2p
+2kr2q
+2kr2r
+2kr2s
+2kr2t
+2kr2v
+2kr2w
+2kr2x
+2kr2y
+2kr2z
+p2r
+4pr.
+2pr2b
+2pr2c
+2pr2d
+2pr2f
+2pr2g
+2pr2h
+2pr2j
+2pr2k
+2pr2l
+2pr2m
+2pr2n
+2pr2p
+2pr2q
+2pr2r
+2pr2s
+2pr2t
+2pr2v
+2pr2w
+2pr2x
+2pr2y
+2pr2z
+r2r
+4rr.
+2rr2b
+2rr2c
+2rr2d
+2rr2f
+2rr2g
+2rr2h
+2rr2j
+2rr2k
+2rr2l
+2rr2m
+2rr2n
+2rr2p
+2rr2q
+2rr2r
+2rr2s
+2rr2t
+2rr2v
+2rr2w
+2rr2x
+2rr2y
+2rr2z
+t2r
+4tr.
+2tr2b
+2tr2c
+2tr2d
+2tr2f
+2tr2g
+2tr2h
+2tr2j
+2tr2k
+2tr2l
+2tr2m
+2tr2n
+2tr2p
+2tr2q
+2tr2r
+2tr2s
+2tr2t
+2tr2v
+2tr2w
+2tr2x
+2tr2y
+2tr2z
+v2r
+4vr.
+2vr2b
+2vr2c
+2vr2d
+2vr2f
+2vr2g
+2vr2h
+2vr2j
+2vr2k
+2vr2l
+2vr2m
+2vr2n
+2vr2p
+2vr2q
+2vr2r
+2vr2s
+2vr2t
+2vr2v
+2vr2w
+2vr2x
+2vr2y
+2vr2z
2b3p2t
2c3p2t
2d3p2t
@@ -535,7 +953,7 @@ w2r
2t3p2s
2x3p2s
2y3p2s
-4pc.
+4ps.
2b3m2n
2c3m2n
2d3m2n
@@ -623,6 +1041,7 @@ w2r
san4c5t
plan4c5t
2no.
+2t2l
4caca4
4cago4
4caga4
@@ -805,13 +1224,16 @@ plan4c5t
4í3da.
4í3dos.
4í3das.
+4o.
4as.
+4a.
4ás.
4a3mos.
4áis.
4an.
4aste.
4astes.
+4ó.
4ates.
4asteis.
4a3ron.
@@ -1024,23 +1446,23 @@ e5r4a3dor.
e5r4a3dora.
e5r4a3dores.
e5r4a3doras.
+acto1h
acto1a2
acto1e2
acto1i2
acto1o2
acto1u2
-acto1h
acto1á2
acto1é2
acto1í2
acto1ó2
acto1ú2
+afro1h
afro1a2
afro1e2
afro1i2
afro1o2
afro1u2
-afro1h
afro1á2
afro1é2
afro1í2
@@ -1094,45 +1516,45 @@ ana3lí
.anu3da
.anu3l
asu3b2
+aero1h
aero1a2
aero1e2
aero1i2
aero1o2
aero1u2
-aero1h
aero1á2
aero1é2
aero1í2
aero1ó2
aero1ú2
+anfi1h
anfi1a2
anfi1e2
anfi1i2
anfi1o2
anfi1u2
-anfi1h
anfi1á2
anfi1é2
anfi1í2
anfi1ó2
anfi1ú2
+anglo1h
anglo1a2
anglo1e2
anglo1i2
anglo1o2
anglo1u2
-anglo1h
anglo1á2
anglo1é2
anglo1í2
anglo1ó2
anglo1ú2
+ante1h
ante1a2
ante1e2
ante1i2
ante1o2
ante1u2
-ante1h
ante1á2
ante1é2
ante1í2
@@ -1151,12 +1573,12 @@ acante2
t4eo3nes.
mante4a
e4a3miento
+.anti1h
.anti1a2
.anti1e2
.anti1i2
.anti1o2
.anti1u2
-.anti1h
.anti1á2
.anti1é2
.anti1í2
@@ -1164,91 +1586,91 @@ e4a3miento
.anti1ú2
ti2o3qu
ti2o3co
+archi1h
archi1a2
archi1e2
archi1i2
archi1o2
archi1u2
-archi1h
archi1á2
archi1é2
archi1í2
archi1ó2
archi1ú2
+auto1h
auto1a2
auto1e2
auto1i2
auto1o2
auto1u2
-auto1h
auto1á2
auto1é2
auto1í2
auto1ó2
auto1ú2
+biblio1h
biblio1a2
biblio1e2
biblio1i2
biblio1o2
biblio1u2
-biblio1h
biblio1á2
biblio1é2
biblio1í2
biblio1ó2
biblio1ú2
+bio1h
bio1a2
bio1e2
bio1i2
bio1o2
bio1u2
-bio1h
bio1á2
bio1é2
bio1í2
bio1ó2
bio1ú2
bi1u2ní
+cardio1h
cardio1a2
cardio1e2
cardio1i2
cardio1o2
cardio1u2
-cardio1h
cardio1á2
cardio1é2
cardio1í2
cardio1ó2
cardio1ú2
+cefalo1h
cefalo1a2
cefalo1e2
cefalo1i2
cefalo1o2
cefalo1u2
-cefalo1h
cefalo1á2
cefalo1é2
cefalo1í2
cefalo1ó2
cefalo1ú2
+centi1h
centi1a2
centi1e2
centi1i2
centi1o2
centi1u2
-centi1h
centi1á2
centi1é2
centi1í2
centi1ó2
centi1ú2
centi5área
+ciclo1h
ciclo1a2
ciclo1e2
ciclo1i2
ciclo1o2
ciclo1u2
-ciclo1h
ciclo1á2
ciclo1é2
ciclo1í2
@@ -1264,24 +1686,24 @@ o4i3dales.
4i2dales.
4i3deo.
4i3deos.
+cito1h
cito1a2
cito1e2
cito1i2
cito1o2
cito1u2
-cito1h
cito1á2
cito1é2
cito1í2
cito1ó2
cito1ú2
3c2neor
+cnico1h
cnico1a2
cnico1e2
cnico1i2
cnico1o2
cnico1u2
-cnico1h
cnico1á2
cnico1é2
cnico1í2
@@ -1324,45 +1746,45 @@ co4opt
co4ord
con1imbr
con1urb
+cripto1h
cripto1a2
cripto1e2
cripto1i2
cripto1o2
cripto1u2
-cripto1h
cripto1á2
cripto1é2
cripto1í2
cripto1ó2
cripto1ú2
+crono1h
crono1a2
crono1e2
crono1i2
crono1o2
crono1u2
-crono1h
crono1á2
crono1é2
crono1í2
crono1ó2
crono1ú2
+contra1h
contra1a2
contra1e2
contra1i2
contra1o2
contra1u2
-contra1h
contra1á2
contra1é2
contra1í2
contra1ó2
contra1ú2
+deca1h
deca1a2
deca1e2
deca1i2
deca1o2
deca1u2
-deca1h
deca1á2
deca1é2
deca1í2
@@ -1374,244 +1796,244 @@ deca1ú2
4é3dricos.
4é3drica.
4é3dricas.
-.de2s2a2
-.de2s2e2
-.de2s2i2
-.de2s2o2
-.de2s2u2
-.de2s2á2
-.de2s2é2
-.de2s2í2
-.de2s2ó2
-.de2s2ú2
+.de2sa2
+.de2se2
+.de2si2
+.de2so2
+.de2su2
+.de2sá2
+.de2sé2
+.de2sí2
+.de2só2
+.de2sú2
deca2i3mient
decimo1
3sa.
3sas.
-de4s3órde
-de4s3orde
-de4s3abast
-de4s3aboll
-de4s3aboto
-de4s3abr
+de2s3órde
+de2s3orde
+de2s3abast
+de2s3aboll
+de2s3aboto
+de2s3abr
desa3brid
-de4s3abroch
-de4s3aceit
-de4s3aceler
+de2s3abroch
+de2s3aceit
+de2s3aceler
desa3cert
desa3ciert
-de4s3acobar
-de4s3acomod
-de4s3acomp
-de4s3acons
-de4s3acopl
-de4s3acorr
-de4s3acostum
-de4s3acot
+de2s3acobar
+de2s3acomod
+de2s3acomp
+de2s3acons
+de2s3acopl
+de2s3acorr
+de2s3acostum
+de2s3acot
desa3craliz
-de4s3acredit
-de4s3activ
-de4s3acuart
-de4s3aderez
-de4s3adeud
-de4s3adorar
-de4s3adormec
-de4s3adorn
-de4s3advert
-desa3fí
-de4s3aferr
-desa3fi
-de4s3afic
-de4s3afil
-de4s3afin
-de4s3afor
-desa3gü
+de2s3acredit
+de2s3activ
+de2s3acuart
+de2s3aderez
+de2s3adeud
+de2s3adorar
+de2s3adormec
+de2s3adorn
+de2s3advert
+de2s3aferr
+de2s3afic
+de2s3afil
+de2s3afin
+de2s3afor
+desa3gú
desa3garr
-de4s3agraci
-de4s3agrad
-de4s3agravi
-de4s3agreg
-de4s3agrup
-de4s3agu
+de2s3agraci
+de2s3agrad
+de2s3agravi
+de2s3agreg
+de2s3agrup
+de2s3agu
desa3guisado
-de4s3aherr
-de4s3ahij
-de4s3ajust
-de4s3alagar
-de4s3alent
-de4s3alfom
-de4s3alfor
-de4s3aliñ
+de2s3aherr
+de2s3ahij
+de2s3ajust
+de2s3alagar
+de2s3alent
+de2s3alfom
+de2s3alfor
+de2s3aliñ
desa3lin
-de4s3alien
-de4s3aline
+de2s3alien
+de2s3aline
desa3liv
-de4s3alm
-de4s3almid
-desa3loj
-de4s3alquil
-de4s3alter
-de4s3alumbr
+de2s3alm
+de2s3almid
+de2s3aloj
+de2s3alquil
+de2s3alter
+de2s3alumbr
desa3marr
desa3mobl
-de4s3amold
-de4s3amort
-de4s3amuebl
-de4s3and
-de4s3angel
-de4s3anid
-de4s3anim
-de4s3aním
-de4s3anud
+de2s3amold
+de2s3amort
+de2s3amuebl
+de2s3ampa
+de2s3and
+de2s3angel
+de3sangr
+de2s3anid
+de2s3anim
+de2s3aním
+de2s3anud
desa3pañ
desa3pacib
-de4s3apadr
-de4s3apare
-desa3parec
-desa3paric
-desa3peg
-desa3percib
-de4s3aplic
-de4s3apolill
-de4s3apoy
-desa3prensi
-de4s3aprend
-de4s3apret
-de4s3apriet
-de4s3aprob
-de4s3apropi
-de4s3aprovech
-de4s3arbol
-de4s3aren
-de4s3arm
+de2s3apadr
+de2s3apare
+de2s3aparec
+de2s3aparic
+de2s3apeg
+de2s3apercib
+de2s3apes
+de2s3aplic
+de2s3apolill
+de2s3apoy
+de2s3aprend
+de2s3apret
+de2s3apriet
+de2s3aprob
+de2s3apropi
+de2s3aprovech
+de2s3arbol
+de2s3aren
+de2s3arm
des4arme
-de4s3arraig
-de4s3arregl
-de4s3arrend
-de4s3arrim
+de2s3arraig
+de2s3arregl
+de2s3arrend
+de2s3arrim
desa3rroll
-de4s3arrop
-de4s3arrug
-de4s3articul
-de4s3asent
-de4s3asist
-de4s3asn
+de2s3arrop
+de2s3arrug
+de2s3articul
+de2s3asent
+de2s3asist
+de2s3asn
desa3soseg
desa3sosieg
-de4s3atenc
-de4s3atend
-de4s3atiend
-de4s3atent
+de2s3atenc
+de2s3atend
+de2s3atiend
+de2s3atent
desa3tin
-de4s3atorn
-de4s3atranc
-de4s3autor
-de4s3avis
+de2s3atorn
+de2s3atranc
+de2s3autor
+de2s3avis
desa3yun
desa3zón
desa3zon
-de4s3embal
-de4s3embál
-de4s3embar
-de4s3embár
-de4s3embarg
-de4s3embols
-de4s3emborr
-de4s3embosc
-de4s3embot
-de4s3embrag
-de4s3embrág
-de4s3embrave
-de4s3embráve
-de4s3embroll
-de4s3embróll
-de4s3embruj
-de4s3embrúj
+de2s3embal
+de2s3embál
+de2s3embar
+de2s3embár
+de2s3embarg
+de2s3embols
+de2s3emborr
+de2s3embosc
+de2s3embot
+de2s3embrag
+de2s3embrág
+de2s3embrave
+de2s3embráve
+de2s3embroll
+de2s3embróll
+de2s3embruj
+de2s3embrúj
de3semej
-de4s3empañ
-de4s3empáñ
-de4s3empac
-de4s3empaquet
-de4s3empaquét
-de4s3emparej
-de4s3emparéj
-de4s3emparent
-de4s3empat
-de4s3empé
-de4s3empedr
-de4s3empeg
-de4s3empeor
-de4s3emperez
-de4s3empern
-de4s3emple
-de4s3empolv
-de4s3empotr
-de4s3empoz
-de4s3enam
-de4s3encab
-de4s3encad
-de4s3encaj
-de4s3encáj
-de4s3encall
-de4s3encáll
-de4s3encam
+de2s3empañ
+de2s3empáñ
+de2s3empac
+de2s3empaquet
+de2s3empaquét
+de2s3emparej
+de2s3emparéj
+de2s3emparent
+de2s3empat
+de2s3empé
+de2s3empedr
+de2s3empeg
+de2s3empeor
+de2s3emperez
+de2s3empern
+de2s3emple
+de2s3empolv
+de2s3empotr
+de2s3empoz
+de2s3enam
+de2s3encab
+de2s3encad
+de2s3encaj
+de2s3encáj
+de2s3encall
+de2s3encáll
+de2s3encam
de3sencant
-de4s3encap
-de4s3encar
-de4s3encár
-de4s3ench
-de4s3encl
-de4s3enco
-de4s3encr
-de4s3encu
-de4s3end
+de2s3encap
+de2s3encar
+de2s3encár
+de2s3ench
+de2s3encl
+de2s3enco
+de2s3encr
+de2s3encu
+de2s3end
de3senfad
de3senfád
-de4s3enfi
-de4s3enfo
-de4s3enfó
+de2s3enfi
+de2s3enfo
+de2s3enfó
de3senfren
-de4s3enfund
-de4s3enfur
+de2s3enfund
+de2s3enfur
de3sengañ
de3sengáñ
-de4s3enganch
-de4s3engar
-de4s3engas
-de4s3engom
-de4s3engoz
-de4s3engra
-de4s3enhebr
-de4s3enj
-de4s3enlad
-de4s3enlaz
-de4s3enlo
-de4s3enm
-de4s3enr
-de4s3ens
-de4s3enta
+de2s3enganch
+de2s3engar
+de2s3engas
+de2s3engom
+de2s3engoz
+de2s3engra
+de2s3enhebr
+de2s3enj
+de2s3enlad
+de2s3enlaz
+de2s3enlo
+de2s3enm
+de2s3enr
+de2s3ens
+de2s3enta
de3sentend
de3sentien
de3sentién
-de4s3enter
-de4s3entier
-de4s3entiér
-de4s3ento
-de4s3entr
-de4s3entu
-de4s3envain
+de2s3enter
+de2s3entier
+de2s3entiér
+de2s3ento
+de2s3entr
+de2s3entu
+de2s3envain
de3senvolvim
de3seo
-de4s3eq
+de2s3eq
de3s4erci
de3s4ert
de3s4ért
-de4s3espa
+de2s3espa
de3sesperac
-de4s3esperanz
+de2s3esperanz
de3sesper
-de4s3estabil
-de4s3estim
+de2s3estabil
+de2s3estim
de3sider
de3sidia
de3sidio
@@ -1619,94 +2041,98 @@ de3siert
de3sign
de3sigual
de3silusi
-de4s3imagin
-de4s3iman
-de4s3impon
-de4s3impresX
-de4s3incent
-de4s3inclin
-de4s3incorp
-de4s3incrust
+de2s3imagin
+de2s3iman
+de2s3impon
+de2s3impres
+de2s3incent
+de2s3inclin
+de2s3incorp
+de2s3incrust
de3sinenc
de3sinfec
de3su3dar
de3su3das
de3su3dan
-de4s3inflam
-de4s3infl
-de4s3inform
-de4s3inhib
-de4s3insect
-de4s3instal
+de2s3inflam
+de2s3infl
+de2s3inform
+de2s3inhib
+de2s3insect
+de2s3instal
+ini3ci
+iní3ci
de3s4integr
de3s4inter
-de4s3intox
-de4s3inver
+de2s3intox
+de2s3inver
de3sisten
-de4s3impres
-de4s3obedec
-de4s3oblig
-de4s3obstr
+de3isti
+de2s3obedec
+de2s3oblig
+de2s3obstr
de3socup
-de4s3odor
+de2s3odor
de3solac
de3solad
de3soll
-de4s3orej
+de2s3orej
+de2s3orient
+de3sortij
+de2s3organi
de3suell
de3sonce
-de4s3ova
-de4s3ovi
-de4s3oxi
-de4s3oye
-de4s3oyé
+de2s3ovi
+de2s3oxi
+de2s3oye
+de2s3oyé
de3s4ubstan
de3s4ustan
de3s4oseg
-de4s3ub4ic
-de4s3unir
-de4s3unier
-de4s3unim
+de2s3ub4ic
+de2s3unir
+de2s3unier
+de2s3unim
.dieci1o2
+dodeca1h
dodeca1a2
dodeca1e2
dodeca1i2
dodeca1o2
dodeca1u2
-dodeca1h
dodeca1á2
dodeca1é2
dodeca1í2
dodeca1ó2
dodeca1ú2
+ecano1h
ecano1a2
ecano1e2
ecano1i2
ecano1o2
ecano1u2
-ecano1h
ecano1á2
ecano1é2
ecano1í2
ecano1ó2
ecano1ú2
+eco1h
eco1a2
eco1e2
eco1i2
eco1o2
eco1u2
-eco1h
eco1á2
eco1é2
eco1í2
eco1ó2
eco1ú2
+ectro1h
ectro1a2
ectro1e2
ectro1i2
ectro1o2
ectro1u2
-ectro1h
ectro1á2
ectro1é2
ectro1í2
@@ -1722,6 +2148,8 @@ ectro1ú2
.en2í2
.en2ó2
.en2ú2
+.ene3mist
+.ene3míst
.eno3jar
.enu3mera
.enu3merá
@@ -1737,179 +2165,181 @@ ectro1ú2
4ó3loga.
4ó3logos.
4ó3logas.
+endo1h
endo1a2
endo1e2
endo1i2
endo1o2
endo1u2
-endo1h
endo1á2
endo1é2
endo1í2
endo1ó2
endo1ú2
+ento1h
ento1a2
ento1e2
ento1i2
ento1o2
ento1u2
-ento1h
ento1á2
ento1é2
ento1í2
ento1ó2
ento1ú2
4emboca
+entre1h
entre1a2
entre1e2
entre1i2
entre1o2
entre1u2
-entre1h
entre1á2
entre1é2
entre1í2
entre1ó2
entre1ú2
+euco1h
euco1a2
euco1e2
euco1i2
euco1o2
euco1u2
-euco1h
euco1á2
euco1é2
euco1í2
euco1ó2
euco1ú2
+euro1h
euro1a2
euro1e2
euro1i2
euro1o2
euro1u2
-euro1h
euro1á2
euro1é2
euro1í2
euro1ó2
euro1ú2
+extra1h
extra1a2
extra1e2
extra1i2
extra1o2
extra1u2
-extra1h
extra1á2
extra1é2
extra1í2
extra1ó2
extra1ú2
u4teri
+.cau5t
+.deu5t
+fono1h
fono1a2
fono1e2
fono1i2
fono1o2
fono1u2
-fono1h
fono1á2
fono1é2
fono1í2
fono1ó2
fono1ú2
+foto1h
foto1a2
foto1e2
foto1i2
foto1o2
foto1u2
-foto1h
foto1á2
foto1é2
foto1í2
foto1ó2
foto1ú2
+gastro1h
gastro1a2
gastro1e2
gastro1i2
gastro1o2
gastro1u2
-gastro1h
gastro1á2
gastro1é2
gastro1í2
gastro1ó2
gastro1ú2
+geo1h
geo1a2
geo1e2
geo1i2
geo1o2
geo1u2
-geo1h
geo1á2
geo1é2
geo1í2
geo1ó2
geo1ú2
+gluco1h
gluco1a2
gluco1e2
gluco1i2
gluco1o2
gluco1u2
-gluco1h
gluco1á2
gluco1é2
gluco1í2
gluco1ó2
gluco1ú2
+hecto1h
hecto1a2
hecto1e2
hecto1i2
hecto1o2
hecto1u2
-hecto1h
hecto1á2
hecto1é2
hecto1í2
hecto1ó2
hecto1ú2
+helio1h
helio1a2
helio1e2
helio1i2
helio1o2
helio1u2
-helio1h
helio1á2
helio1é2
helio1í2
helio1ó2
helio1ú2
+hemato1h
hemato1a2
hemato1e2
hemato1i2
hemato1o2
hemato1u2
-hemato1h
hemato1á2
hemato1é2
hemato1í2
hemato1ó2
hemato1ú2
+hemi1h
hemi1a2
hemi1e2
hemi1i2
hemi1o2
hemi1u2
-hemi1h
hemi1á2
hemi1é2
hemi1í2
hemi1ó2
hemi1ú2
+hemo1h
hemo1a2
hemo1e2
hemo1i2
hemo1o2
hemo1u2
-hemo1h
hemo1á2
hemo1é2
hemo1í2
@@ -1917,83 +2347,83 @@ hemo1ó2
hemo1ú2
2al.
2ales.
+hexa1h
hexa1a2
hexa1e2
hexa1i2
hexa1o2
hexa1u2
-hexa1h
hexa1á2
hexa1é2
hexa1í2
hexa1ó2
hexa1ú2
+hidro1h
hidro1a2
hidro1e2
hidro1i2
hidro1o2
hidro1u2
-hidro1h
hidro1á2
hidro1é2
hidro1í2
hidro1ó2
hidro1ú2
+hipe2r3r
hipe2r1a2
hipe2r1e2
hipe2r1i2
hipe2r1o2
hipe2r1u2
-hipe2r3r
hipe2r1á2
hipe2r1é2
hipe2r1í2
hipe2r1ó2
hipe2r1ú2
pe3r4e3mia
+histo1h
histo1a2
histo1e2
histo1i2
histo1o2
histo1u2
-histo1h
histo1á2
histo1é2
histo1í2
histo1ó2
histo1ú2
+homo1h
homo1a2
homo1e2
homo1i2
homo1o2
homo1u2
-homo1h
homo1á2
homo1é2
homo1í2
homo1ó2
homo1ú2
+icono1h
icono1a2
icono1e2
icono1i2
icono1o2
icono1u2
-icono1h
icono1á2
icono1é2
icono1í2
icono1ó2
icono1ú2
-.in2a2
-.in2e2
-.in2i2
-.in2o2
-.in2u2
-.in2á2
-.in2é2
-.in2í2
-.in2ó2
-.in2ú2
+.i2n2a2
+.i2n2e2
+.i2n2i2
+.i2n2o2
+.i2n2u2
+.i2n2á2
+.i2n2é2
+.i2n2í2
+.i2n2ó2
+.i2n2ú2
.in3abord
.in3abarc
.in3acent
@@ -2015,9 +2445,17 @@ icono1ú2
.in3efici
.in3eludi
.ine3narr
-.ini3cia
-.ini3ciá
-.ini3cie
+ini3cia
+iní3cia
+ini3ciá
+ini3cie
+.rei3na
+re3ini3cia
+re3iní3cia
+re3ini3ciá
+re3ini3cie
+.ini3cuo
+.ini3cua
.ino3cuo
.ino3cua
.ino3cula
@@ -2025,23 +2463,23 @@ icono1ú2
.ino3cule
.inú3til
.inu3tiliz
+infra1h
infra1a2
infra1e2
infra1i2
infra1o2
infra1u2
-infra1h
infra1á2
infra1é2
infra1í2
infra1ó2
infra1ú2
+.inte2r3r
.inte2r1a2
.inte2r1e2
.inte2r1i2
.inte2r1o2
.inte2r1u2
-.inte2r3r
.inte2r1á2
.inte2r1é2
.inte2r1í2
@@ -2065,45 +2503,45 @@ infra1ú2
.in3te3r4rupc
.in3te3r4rupt
.in3te3r4rump
+intra1h
intra1a2
intra1e2
intra1i2
intra1o2
intra1u2
-intra1h
intra1á2
intra1é2
intra1í2
intra1ó2
intra1ú2
+iso1h
iso1a2
iso1e2
iso1i2
iso1o2
iso1u2
-iso1h
iso1á2
iso1é2
iso1í2
iso1ó2
iso1ú2
+kilo1h
kilo1a2
kilo1e2
kilo1i2
kilo1o2
kilo1u2
-kilo1h
kilo1á2
kilo1é2
kilo1í2
kilo1ó2
kilo1ú2
+macro1h
macro1a2
macro1e2
macro1i2
macro1o2
macro1u2
-macro1h
macro1á2
macro1é2
macro1í2
@@ -2132,67 +2570,67 @@ bien3t
b4ien3do.
.su3b4ien
b4ien3das.
+maxi1h
maxi1a2
maxi1e2
maxi1i2
maxi1o2
maxi1u2
-maxi1h
maxi1á2
maxi1é2
maxi1í2
maxi1ó2
maxi1ú2
+megalo1h
megalo1a2
megalo1e2
megalo1i2
megalo1o2
megalo1u2
-megalo1h
megalo1á2
megalo1é2
megalo1í2
megalo1ó2
megalo1ú2
+mega1h
mega1a2
mega1e2
mega1i2
mega1o2
mega1u2
-mega1h
mega1á2
mega1é2
mega1í2
mega1ó2
mega1ú2
+melano1h
melano1a2
melano1e2
melano1i2
melano1o2
melano1u2
-melano1h
melano1á2
melano1é2
melano1í2
melano1ó2
melano1ú2
+micro1h
micro1a2
micro1e2
micro1i2
micro1o2
micro1u2
-micro1h
micro1á2
micro1é2
micro1í2
micro1ó2
micro1ú2
+mili1h
mili1a2
mili1e2
mili1i2
mili1o2
mili1u2
-mili1h
mili1á2
mili1é2
mili1í2
@@ -2200,19 +2638,20 @@ mili1ó2
mili1ú2
familia3ri
ia5res.
+amili6a
+a3rio
li5área
+mini1h
mini1a2
mini1e2
mini1i2
mini1o2
mini1u2
-mini1h
mini1á2
mini1é2
mini1í2
mini1ó2
mini1ú2
-2o.
2os.
2o3so.
2o3sos.
@@ -2220,34 +2659,34 @@ mini1ú2
2o3sas.
2o3samente.
mini4a5tur
+multi1h
multi1a2
multi1e2
multi1i2
multi1o2
multi1u2
-multi1h
multi1á2
multi1é2
multi1í2
multi1ó2
multi1ú2
+miria1h
miria1a2
miria1e2
miria1i2
miria1o2
miria1u2
-miria1h
miria1á2
miria1é2
miria1í2
miria1ó2
miria1ú2
+mono1h
mono1a2
mono1e2
mono1i2
mono1o2
mono1u2
-mono1h
mono1á2
mono1é2
mono1í2
@@ -2257,100 +2696,100 @@ mono1ú2
2i3cos.
2i3ca.
2i3cas.
+namo1h
namo1a2
namo1e2
namo1i2
namo1o2
namo1u2
-namo1h
namo1á2
namo1é2
namo1í2
namo1ó2
namo1ú2
+necro1h
necro1a2
necro1e2
necro1i2
necro1o2
necro1u2
-necro1h
necro1á2
necro1é2
necro1í2
necro1ó2
necro1ú2
+neo1h
neo1a2
neo1e2
neo1i2
neo1o2
neo1u2
-neo1h
neo1á2
neo1é2
neo1í2
neo1ó2
neo1ú2
+neto1h
neto1a2
neto1e2
neto1i2
neto1o2
neto1u2
-neto1h
neto1á2
neto1é2
neto1í2
neto1ó2
neto1ú2
+norte1h
norte1a2
norte1e2
norte1i2
norte1o2
norte1u2
-norte1h
norte1á2
norte1é2
norte1í2
norte1ó2
norte1ú2
+octo1h
octo1a2
octo1e2
octo1i2
octo1o2
octo1u2
-octo1h
octo1á2
octo1é2
octo1í2
octo1ó2
octo1ú2
+octa1h
octa1a2
octa1e2
octa1i2
octa1o2
octa1u2
-octa1h
octa1á2
octa1é2
octa1í2
octa1ó2
octa1ú2
+oligo1h
oligo1a2
oligo1e2
oligo1i2
oligo1o2
oligo1u2
-oligo1h
oligo1á2
oligo1é2
oligo1í2
oligo1ó2
oligo1ú2
+omni1h
omni1a2
omni1e2
omni1i2
omni1o2
omni1u2
-omni1h
omni1á2
omni1é2
omni1í2
@@ -2358,23 +2797,23 @@ omni1ó2
omni1ú2
i2o.
i2os.
+paleo1h
paleo1a2
paleo1e2
paleo1i2
paleo1o2
paleo1u2
-paleo1h
paleo1á2
paleo1é2
paleo1í2
paleo1ó2
paleo1ú2
+para1h
para1a2
para1e2
para1i2
para1o2
para1u2
-para1h
para1á2
para1é2
para1í2
@@ -2383,45 +2822,45 @@ para1ú2
para2is.
aí5so.
aí5sos.
+penta1h
penta1a2
penta1e2
penta1i2
penta1o2
penta1u2
-penta1h
penta1á2
penta1é2
penta1í2
penta1ó2
penta1ú2
+piezo1h
piezo1a2
piezo1e2
piezo1i2
piezo1o2
piezo1u2
-piezo1h
piezo1á2
piezo1é2
piezo1í2
piezo1ó2
piezo1ú2
+pluri1h
pluri1a2
pluri1e2
pluri1i2
pluri1o2
pluri1u2
-pluri1h
pluri1á2
pluri1é2
pluri1í2
pluri1ó2
pluri1ú2
+poli1h
poli1a2
poli1e2
poli1i2
poli1o2
poli1u2
-poli1h
poli1á2
poli1é2
poli1í2
@@ -2509,34 +2948,34 @@ pre3opin
.pro2í2
.pro2ó2
.pro2ú2
+proto1h
proto1a2
proto1e2
proto1i2
proto1o2
proto1u2
-proto1h
proto1á2
proto1é2
proto1í2
proto1ó2
proto1ú2
+radio1h
radio1a2
radio1e2
radio1i2
radio1o2
radio1u2
-radio1h
radio1á2
radio1é2
radio1í2
radio1ó2
radio1ú2
+ranco1h
ranco1a2
ranco1e2
ranco1i2
ranco1o2
ranco1u2
-ranco1h
ranco1á2
ranco1é2
ranco1í2
@@ -2581,56 +3020,56 @@ ea3cias.
.re3usár
.re3utiliz
.re3utilíz
+rmano1h
rmano1a2
rmano1e2
rmano1i2
rmano1o2
rmano1u2
-rmano1h
rmano1á2
rmano1é2
rmano1í2
rmano1ó2
rmano1ú2
+retro1h
retro1a2
retro1e2
retro1i2
retro1o2
retro1u2
-retro1h
retro1á2
retro1é2
retro1í2
retro1ó2
retro1ú2
+romo1h
romo1a2
romo1e2
romo1i2
romo1o2
romo1u2
-romo1h
romo1á2
romo1é2
romo1í2
romo1ó2
romo1ú2
+sobre1h
sobre1a2
sobre1e2
sobre1i2
sobre1o2
sobre1u2
-sobre1h
sobre1á2
sobre1é2
sobre1í2
sobre1ó2
sobre1ú2
+semi1h
semi1a2
semi1e2
semi1i2
semi1o2
semi1u2
-semi1h
semi1á2
semi1é2
semi1í2
@@ -2640,12 +3079,12 @@ i2a.
i2as.
2ótic
emi2o2
+seudo1h
seudo1a2
seudo1e2
seudo1i2
seudo1o2
seudo1u2
-seudo1h
seudo1á2
seudo1é2
seudo1í2
@@ -2653,12 +3092,12 @@ seudo1ó2
seudo1ú2
o2os.
.so3a4s
+socio1h
socio1a2
socio1e2
socio1i2
socio1o2
socio1u2
-socio1h
socio1á2
socio1é2
socio1í2
@@ -2666,6 +3105,7 @@ socio1ó2
socio1ú2
a3rio.
a3rios.
+3logía
4ón.
4ones.
4i4er.
@@ -2695,19 +3135,31 @@ a3rios.
.sub3estím
.sub3ofici
.sub3urba
+.sub3alter
+.sub3insp
+.su3bién
+.su3bir
+.su3bam
+.su3bordin
+.su3bordín
+.sub3acuá
+.sub3espe
+.sub3esta
+.su3burbi
+.su4b5rein
+supe2r3r
supe2r1a2
supe2r1e2
supe2r1i2
supe2r1o2
supe2r1u2
-supe2r3r
supe2r1á2
supe2r1é2
supe2r1í2
supe2r1ó2
supe2r1ú2
-supe4r4a3r
-supe4r4á3r
+supe3r4a4r
+supe3r4á4r
supe3r4á3vit.
supe3r4á3vits.
4a3ción.
@@ -2724,35 +3176,35 @@ supe3r4á3vits.
4e3ra3blemente.
pe5r4ante
perpon5d6r
+supra1h
supra1a2
supra1e2
supra1i2
supra1o2
supra1u2
-supra1h
supra1á2
supra1é2
supra1í2
supra1ó2
supra1ú2
sup6ra
+talmo1h
talmo1a2
talmo1e2
talmo1i2
talmo1o2
talmo1u2
-talmo1h
talmo1á2
talmo1é2
talmo1í2
talmo1ó2
talmo1ú2
+tele1h
tele1a2
tele1e2
tele1i2
tele1o2
tele1u2
-tele1h
tele1á2
tele1é2
tele1í2
@@ -2760,45 +3212,45 @@ tele1ó2
tele1ú2
4ósteo.
4ósteos.
+termo1h
termo1a2
termo1e2
termo1i2
termo1o2
termo1u2
-termo1h
termo1á2
termo1é2
termo1í2
termo1ó2
termo1ú2
+tetra1h
tetra1a2
tetra1e2
tetra1i2
tetra1o2
tetra1u2
-tetra1h
tetra1á2
tetra1é2
tetra1í2
tetra1ó2
tetra1ú2
+topo1h
topo1a2
topo1e2
topo1i2
topo1o2
topo1u2
-topo1h
topo1á2
topo1é2
topo1í2
topo1ó2
topo1ú2
+tropo1h
tropo1a2
tropo1e2
tropo1i2
tropo1o2
tropo1u2
-tropo1h
tropo1á2
tropo1é2
tropo1í2
@@ -2806,23 +3258,23 @@ tropo1ó2
tropo1ú2
poi3de.
poi3des.
+ultra1h
ultra1a2
ultra1e2
ultra1i2
ultra1o2
ultra1u2
-ultra1h
ultra1á2
ultra1é2
ultra1í2
ultra1ó2
ultra1ú2
+xeno1h
xeno1a2
xeno1e2
xeno1i2
xeno1o2
xeno1u2
-xeno1h
xeno1á2
xeno1é2
xeno1í2
diff --git a/Master/texmf-dist/tex/context/patterns/lang-es.rme b/Master/texmf-dist/tex/context/patterns/lang-es.rme
index 02bb1fcab75..eab0c448559 100644
--- a/Master/texmf-dist/tex/context/patterns/lang-es.rme
+++ b/Master/texmf-dist/tex/context/patterns/lang-es.rme
@@ -1,99 +1,25 @@
% generated by mtxrun --script pattern --convert
-% This file is part of hyph-utf8 package and resulted from
-% semi-manual conversions of hyphenation patterns into UTF-8 in June 2008.
-%
-% Source: eshyph.tex (2006-01-11)
-% Author: Javier Bezos
-%
-% The above mentioned file should become obsolete,
-% and the author of the original file should preferaby modify this file instead.
-%
-% Modificatios were needed in order to support native UTF-8 engines,
-% but functionality (hopefully) didn't change in any way, at least not intentionally.
-% This file is no longer stand-alone; at least for 8-bit engines
-% you probably want to use loadhyph-foo.tex (which will load this file) instead.
-%
-% Modifications were done by Jonathan Kew, Mojca Miklavec & Arthur Reutenauer
-% with help & support from:
-% - Karl Berry, who gave us free hands and all resources
-% - Taco Hoekwater, with useful macros
-% - Hans Hagen, who did the unicodifisation of patterns already long before
-% and helped with testing, suggestions and bug reports
-% - Norbert Preining, who tested & integrated patterns into TeX Live
-%
-% However, the "copyright/copyleft" owner of patterns remains the original author.
-%
-% The copyright statement of this file is thus:
-%
-% Do with this file whatever needs to be done in future for the sake of
-% "a better world" as long as you respect the copyright of original file.
-% If you're the original author of patterns or taking over a new revolution,
-% plese remove all of the TUG comments & credits that we added here -
-% you are the Queen / the King, we are only the servants.
-%
-% If you want to change this file, rather than uploading directly to CTAN,
-% we would be grateful if you could send it to us (http://tug.org/tex-hyphen)
-% or ask for credentials for SVN repository and commit it yourself;
-% we will then upload the whole "package" to CTAN.
-%
-% Before a new "pattern-revolution" starts,
-% please try to follow some guidelines if possible:
-%
-% - \lccode is *forbidden*, and I really mean it
-% - all the patterns should be in UTF-8
-% - the only "allowed" TeX commands in this file are: \patterns, \hyphenation,
-% and if you really cannot do without, also \input and \message
-% - in particular, please no \catcode or \lccode changes,
-% they belong to loadhyph-foo.tex,
-% and no \lefthyphenmin and \righthyphenmin,
-% they have no influence here and belong elsewhere
-% - \begingroup and/or \endinput is not needed
-% - feel free to do whatever you want inside comments
-%
-% We know that TeX is extremely powerful, but give a stupid parser
-% at least a chance to read your patterns.
-%
-% For more unformation see
-%
-% http://tug.org/tex-hyphen
-%
-%------------------------------------------------------------------------------
-%
% DIVISI'ON DE PALABRAS
% ~~~~~~~~~~~~~~~~~~~~~
-% eshyph.tex 4.1a
-%
-% Why 4.x? Well, I know at least other three files with the
-% same name, so this one is the fourth. The others should
-% vanish as soon as posible.
+% hyph-es.tex 4.6
+% This files corresponds to eshyph.tex 4.6.
%
% (c) Javier Bezos 1993 1997.
-% (c) Javier Bezos and CervanTeX 2001-2006
+% (c) Javier Bezos and CervanTeX 2001-2010
% Some parts, (c) by Francesc Carmona
% Licence: LPPL
%
-% CervanTeX, the Spanish TeX User Group, has tackled the task of
-% writing a more complete set of patterns, but unfortunately the work
-% is a lot slower we expected. The file division.pdf is a draft of an
-% article (in Spanish) explaining the rules to be applied and how they
-% are being translated into TeX in a unified set of patterns.
-%
-% There is still a lot of work to be done. However, even if
-% incomplete it should provide in its current form a better option to
-% other patterns. However, if you experience problems, you might want
-% to return to one of these pattern files.
+% For further info, bug reports and comments:
%
-% For bug reports and comments:
+% http://www.tex-tipografia.com/spanish_hyphen.html
%
-% http://www.texytipografia.com/contact.php
-%
% I would like to thanks Francesc Carmona for his permission
-% to steal parts of his work without restrictions.
-%
-% 2006/01/09
-%
+% to steal parts of his work without restrictions.
+%
+% 2010-05-18
+%
% _____________________________________________________________
-% Javier Bezos | http://www.cervantex.org/
+% Javier Bezos | http://www.cervantex.es/
% .............................................................
-% TeX y tipografia | http://www.texytipografia.com/
+% TeX y tipografia | http://www.tex-tipografia.com/
diff --git a/Master/texmf-dist/tex/context/patterns/lang-et.hyp b/Master/texmf-dist/tex/context/patterns/lang-et.hyp
index d392bb95bbc..b2f666e16a4 100644
--- a/Master/texmf-dist/tex/context/patterns/lang-et.hyp
+++ b/Master/texmf-dist/tex/context/patterns/lang-et.hyp
@@ -1,6 +1,6 @@
% generated by mtxrun --script pattern --convert
-% for comment and copyright, see ./lang-et.rme
+% for comment and copyright, see e:/tmp/patterns/lang-et.rme
% used:
diff --git a/Master/texmf-dist/tex/context/patterns/lang-et.pat b/Master/texmf-dist/tex/context/patterns/lang-et.pat
index 475621beff0..e12f9d468e9 100644
--- a/Master/texmf-dist/tex/context/patterns/lang-et.pat
+++ b/Master/texmf-dist/tex/context/patterns/lang-et.pat
@@ -1,6 +1,6 @@
% generated by mtxrun --script pattern --convert
-% for comment and copyright, see ./lang-et.rme
+% for comment and copyright, see e:/tmp/patterns/lang-et.rme
% used: a b d e f g h i j k l m n o p r s t u v z ä õ ö ü š ž
diff --git a/Master/texmf-dist/tex/context/patterns/lang-eu.hyp b/Master/texmf-dist/tex/context/patterns/lang-eu.hyp
index 0502086ac58..3f5a18cf514 100644
--- a/Master/texmf-dist/tex/context/patterns/lang-eu.hyp
+++ b/Master/texmf-dist/tex/context/patterns/lang-eu.hyp
@@ -1,6 +1,6 @@
% generated by mtxrun --script pattern --convert
-% for comment and copyright, see ./lang-eu.rme
+% for comment and copyright, see e:/tmp/patterns/lang-eu.rme
% used:
diff --git a/Master/texmf-dist/tex/context/patterns/lang-eu.pat b/Master/texmf-dist/tex/context/patterns/lang-eu.pat
index 97d52056304..f23f71a349c 100644
--- a/Master/texmf-dist/tex/context/patterns/lang-eu.pat
+++ b/Master/texmf-dist/tex/context/patterns/lang-eu.pat
@@ -1,6 +1,6 @@
% generated by mtxrun --script pattern --convert
-% for comment and copyright, see ./lang-eu.rme
+% for comment and copyright, see e:/tmp/patterns/lang-eu.rme
% used: a b c d e f g i j k l m n o p q r s t u v w x y z ñ
diff --git a/Master/texmf-dist/tex/context/patterns/lang-fi.hyp b/Master/texmf-dist/tex/context/patterns/lang-fi.hyp
index 0b4c40422c3..108b1c69bd9 100644
--- a/Master/texmf-dist/tex/context/patterns/lang-fi.hyp
+++ b/Master/texmf-dist/tex/context/patterns/lang-fi.hyp
@@ -1,6 +1,6 @@
% generated by mtxrun --script pattern --convert
-% for comment and copyright, see ./lang-fi.rme
+% for comment and copyright, see e:/tmp/patterns/lang-fi.rme
% used:
diff --git a/Master/texmf-dist/tex/context/patterns/lang-fi.pat b/Master/texmf-dist/tex/context/patterns/lang-fi.pat
index f7e6a296d15..87bd73d7239 100644
--- a/Master/texmf-dist/tex/context/patterns/lang-fi.pat
+++ b/Master/texmf-dist/tex/context/patterns/lang-fi.pat
@@ -1,6 +1,6 @@
% generated by mtxrun --script pattern --convert
-% for comment and copyright, see ./lang-fi.rme
+% for comment and copyright, see e:/tmp/patterns/lang-fi.rme
% used: a b c d e f g h i j k l m n o p q r s t u v y ä ö
diff --git a/Master/texmf-dist/tex/context/patterns/lang-fr.hyp b/Master/texmf-dist/tex/context/patterns/lang-fr.hyp
index d13d72d9c99..9e87d4f72f5 100644
--- a/Master/texmf-dist/tex/context/patterns/lang-fr.hyp
+++ b/Master/texmf-dist/tex/context/patterns/lang-fr.hyp
@@ -1,6 +1,6 @@
% generated by mtxrun --script pattern --convert
-% for comment and copyright, see ./lang-fr.rme
+% for comment and copyright, see e:/tmp/patterns/lang-fr.rme
% used:
diff --git a/Master/texmf-dist/tex/context/patterns/lang-fr.pat b/Master/texmf-dist/tex/context/patterns/lang-fr.pat
index 44f9095fa74..2523c85cd88 100644
--- a/Master/texmf-dist/tex/context/patterns/lang-fr.pat
+++ b/Master/texmf-dist/tex/context/patterns/lang-fr.pat
@@ -1,6 +1,6 @@
% generated by mtxrun --script pattern --convert
-% for comment and copyright, see ./lang-fr.rme
+% for comment and copyright, see e:/tmp/patterns/lang-fr.rme
% used: a b c d e f g h i j k l m n o p q r s t u v w x y z à â ç è é ê î ï ô û œ
diff --git a/Master/texmf-dist/tex/context/patterns/lang-gb.hyp b/Master/texmf-dist/tex/context/patterns/lang-gb.hyp
index b19ea459ad8..29e8682e316 100644
--- a/Master/texmf-dist/tex/context/patterns/lang-gb.hyp
+++ b/Master/texmf-dist/tex/context/patterns/lang-gb.hyp
@@ -1,6 +1,6 @@
% generated by mtxrun --script pattern --convert
-% for comment and copyright, see ./lang-gb.rme
+% for comment and copyright, see e:/tmp/patterns/lang-gb.rme
% used: a c e g h i m n o p r s t u v w y
diff --git a/Master/texmf-dist/tex/context/patterns/lang-gb.pat b/Master/texmf-dist/tex/context/patterns/lang-gb.pat
index 827a7238493..cbb22963034 100644
--- a/Master/texmf-dist/tex/context/patterns/lang-gb.pat
+++ b/Master/texmf-dist/tex/context/patterns/lang-gb.pat
@@ -1,6 +1,6 @@
% generated by mtxrun --script pattern --convert
-% for comment and copyright, see ./lang-gb.rme
+% for comment and copyright, see e:/tmp/patterns/lang-gb.rme
% used: a b c d e f g h i j k l m n o p q r s t u v w x y z
diff --git a/Master/texmf-dist/tex/context/patterns/lang-hr.hyp b/Master/texmf-dist/tex/context/patterns/lang-hr.hyp
index 6040f7fb9f2..228bbd3b5d4 100644
--- a/Master/texmf-dist/tex/context/patterns/lang-hr.hyp
+++ b/Master/texmf-dist/tex/context/patterns/lang-hr.hyp
@@ -1,6 +1,6 @@
% generated by mtxrun --script pattern --convert
-% for comment and copyright, see ./lang-hr.rme
+% for comment and copyright, see e:/tmp/patterns/lang-hr.rme
% used:
diff --git a/Master/texmf-dist/tex/context/patterns/lang-hr.pat b/Master/texmf-dist/tex/context/patterns/lang-hr.pat
index d45882eae59..d99a0627b7a 100644
--- a/Master/texmf-dist/tex/context/patterns/lang-hr.pat
+++ b/Master/texmf-dist/tex/context/patterns/lang-hr.pat
@@ -1,6 +1,6 @@
% generated by mtxrun --script pattern --convert
-% for comment and copyright, see ./lang-hr.rme
+% for comment and copyright, see e:/tmp/patterns/lang-hr.rme
% used: a b c d e f g h i j k l m n o p r s t u v z ć č đ š ž
diff --git a/Master/texmf-dist/tex/context/patterns/lang-hu.hyp b/Master/texmf-dist/tex/context/patterns/lang-hu.hyp
index 05443476b78..68f96528878 100644
--- a/Master/texmf-dist/tex/context/patterns/lang-hu.hyp
+++ b/Master/texmf-dist/tex/context/patterns/lang-hu.hyp
@@ -1,6 +1,6 @@
% generated by mtxrun --script pattern --convert
-% for comment and copyright, see ./lang-hu.rme
+% for comment and copyright, see e:/tmp/patterns/lang-hu.rme
% used:
diff --git a/Master/texmf-dist/tex/context/patterns/lang-hu.pat b/Master/texmf-dist/tex/context/patterns/lang-hu.pat
index a917da76512..38b1ebf1184 100644
--- a/Master/texmf-dist/tex/context/patterns/lang-hu.pat
+++ b/Master/texmf-dist/tex/context/patterns/lang-hu.pat
@@ -1,2647 +1,12425 @@
% generated by mtxrun --script pattern --convert
-% for comment and copyright, see ./lang-hu.rme
+% for comment and copyright, see e:/tmp/patterns/lang-hu.rme
% used: a b c d e f g h i j k l m n o p q r s t u v w x y z á ä é í ó ö ú ü ő ű
\patterns{
.a2
+.adatát1a2
+.ada2t1e2
.adás1s
-.ae1
+.adá2s3z
+.ad1yé.
+.ad1yi
+.ag1os
+.ag2ra
+.agyag1g
+.agy1á2ram
+.agy1árt
+.agy1e2
+.agyo2
.agyon1
+.agy1ó2
+.agy1ű2
+.akác1c
+.aká2cs
+.ak2h
+.ako2
+.ak2t1ér.
+.ak2t1orr
+.ak2t1ő2
+.aku1p2
+.ala2g1
+.alak1a2
+.ala2k1ö2
+.ala2k1ő2
+.ala2pa
+.ala2p1á
.al1eg
-.al1e2m
-.al1e2s
-.al1ér
.al1is
+.al2járn
+.alje2
+.al2j1el
+.aljel1ö2
+.alo2m1
.al1os
-.arc1c
-.ar2c3ho
-.atmo1
+.al2t1a2k
+.al2t1erj
+.al2tén
+.al2térn
+.al2tért
+.al2tin
+.am1ak
+.ango2l1ó2
+.an1th
+.anti1s
+.apa1p2
+.apá2ly1á2z
+.ara2ny1e2
+.ara2sze
+.ar1á2c
+.ar2cal
+.arc3c
+.ar2c1e2
+.ar2cél
+.ar2c3há
+.ar2c3hoz
+.ar2cin
+.ar2cio
+.ar2col
+.ar2cö
+.ar2c3s
+.ar1kh
+.at2h
.az1a2
.az1ám
.aze2
+.az1ó2
.á2
+.ács1ék
+.ág1árn
+.ág1árt
+.ág1ó2
+.ágy1ala
+.ágy1asz
+.ágy1árt
+.ágy1á2z
.ál1a2
-.ál1e
-.ál1é2
-.ál1i
-.ál1ok
+.ál1é
+.ál1i2
+.áligaz1
+.ál2l1alj
+.ál2l1alt
+.ál2lin
+.ál1o2k
+.ál1ú
+.ár1aj
+.ár1aktá
+.ár1a2l
+.ára2m1e
+.ár1a2p
+.ára2sz
+.ár1aszó
+.ár1ác
+.ár1ál
+.ár1á2z
+.ár1d2
.áre2
.ár1em
-.ár2nyo
-.áro2
+.áré2
+.ár1ir
+.ár2nyel
+.ár1ol
+.ár1om
.ár1os
+.árrés1s
.ár1s2
-.át1ad.
-.át1ada
+.ár1t2r
+.ász1ál
+.ász1árb
+.ász1á2ré
+.ász1á2ri
+.ász1á2ro
+.át1a2d
+.át1a2k
+.át1alt
+.át1a2n
+.át1ar
+.át1a2s
+.át1av
.át1á2
.át1e2
.át1é2
.át1i2
-.áto2
.át1ol
-.át1or
-.át1os
+.át1o2r
+.át1o2s
+.átó2
+.át1óh
+.át1óv
.át1ö2
+.át1u
+.át1ü2
+.át1ű
.b2
+.ba2b1a2rá
+.ba2bál
+.ba2b1e2
+.ba2bol
+.ba2j1á2rat
+.ba2j1e
+.bak1aszt
+.ba2kál
+.ba2k1á2ro
+.baké2
+.ba2k1ö2
+.ba2kur
.ba2l1e2g
.ba1ts
+.ba2u
+.bá2l1ó2
+.bár1a
.bá1th
-.be2csé
+.be2at.
+.be1d2
.bei2
-.be1k2
-.bi2o
-.bo2rit
-.bu2szá
+.be1kr
+.be1str
+.be1szk
+.beté2t1e2l
+.be1tr
+.bér2c3sí
+.bé2r1o
+.bi2ke
+.bi2os
+.bi2ot
+.bita2
+.bi2tag
+.bi2t1á2
+.bi2tel
+.bi2t1er
+.bi2t1orr
+.bi2tur
+.bo2g1ó2
+.bol2ta
+.bo2ly1ó2
+.bo2nav
+.bo2raj
+.bo2ran
+.bo2ras
+.bo2rat
+.bo2rác
+.bo2rál
+.bo2r1odv
+.bor2sét
+.bort2
+.bo2tá
+.bra2i
+.bu2sz1e
.c2
-.cle2
+.cen2t1á
+.cen2t1ó2
+.ce2t1e2l
+.ce2t1ű
+.cé2l1e2
+.ci2n1á2
+.cito1
.cs2
-.csőda2rab.
+.csa2k1
+.csa2p1á2g
+.csa2t1é2
+.cse2l1ő2r
.d2
+.dac1c
+.da2c3s
.da2i
-.di1kr
+.dal1an
+.da2lás
+.da2l1e2
+.da2l1ék
+.da2lén
+.da2l1í2
+.da3lol
+.da2l1ó2
+.dan1n
+.da2u
+.den2g1
+.dé2la
+.dére2
+.dé2res
+.dé2sa
+.di2afo
+.di2aka
+.di2al
+.di2csá
+.di2ómá
+.dó2mor
+.dú2ra
.e2
+.eb1eg
+.eb1ir
+.eb1í
.eb1u2
-.egy1a
+.eg2é
+.egres1s
+.egy1a2
+.egy1á2
+.egy1e2lőr
+.egy1ev
+.egy1in
+.egy1ö2
.egy1ü2l
-.el1a2d
.el1a2k
.el1an
+.el1ap
.ela2s
.el1ass
+.el1aszn
.el1aszo
-.elá2
-.el1ál
-.el1ás
-.el1áz
-.el1e2gyek
+.el1aszv
+.el1á2
+.el1e2c
+.el1eger
+.ele2gyá
+.el1e2h
.el1ejt
-.el1emel
-.el1eng
+.el1e2l
+.ele2ma
+.ele2má
+.ele2meg
+.ele2mel
+.el1emele
+.el1emels
+.el1emelt
+.el1e2més
+.el1e2n
.el1e2p
.el1e2r
.el1e2se
.el1e2sés
+.el1esh
.el1e2si
.el1esn
+.el1e2ső
.el1ess
-.el1est
+.el1este
+.el1estél
+.el1estü
+.el1e2sü
.el1esv
-.el1esz
-.el1ékt
-.el1éle
+.el1e2sz
+.el1e2t
+.el1e2vet
+.el1e2vez
+.el1evi
+.elé2d
+.el1éde
+.el1é2gek
+.el1éh
+.el1ékez
+.el1é2le
.elé2n
.el1éne
-.el1ér.
-.el1é2re
-.el1ért
-.el1érv
+.el1é2p
+.el1é2r
+.el1é2tet.
+.el1é2v
.el1id
+.el1ig
+.el1i2h
+.el1ik
+.el1i2mit
.el1in
.el1ir
-.eli2s
-.el1iss
-.el1isz
-.el1itta
-.el1ít
-.elo2k
-.el1oká
-.el1os
+.el1i2s
+.eli2t1o
+.el1itta.
+.el1itták
+.el1izz
+.el1í
+.ellege2
+.elo2
+.el1okk
+.el1oko
+.el1or
+.el1ó2
.elö2
+.el1ök
+.el1öle
+.el1ölé
+.el1ölh
.el1öli
+.el1ölj.
+.el1ölje
+.el1öljé
+.el1öljü
+.el1ölne
+.el1ölné.
+.el1ölném
+.el1ölni
.el1ölő
.el1ölt.
-.elői2
+.el1ölte
+.el1ölté
+.el1öltn
+.el1öltü
+.el1ölün
+.el1ölv
+.el1öv
+.előé2
+.el1s2
.el1t2
-.el1u2
+.el1u
.elü2
.el1ül.
+.el1ülh
.el1üli
-.el1ült
+.el1ülj
+.el1üln
+.el1ülte
.el1ülv
+.el2v1el
+.el2v1ég.
.es1er
+.ese2tel
+.es2t1a
+.es2t1á
+.es2t1é2ke.
+.es2t1é2kek
.et2h
+.etilén1g2
+.evés1s
.ex1el
+.ez1á
.ez1e2l
.é2
-.égés1s
-.ég1o
+.édes3s
+.ég1a2
+.ég1eg
+.ég1e2rei
+.ége2s
+.ég1esz
+.ég1ér.
+.ég1é2ré
+.ég1érn
+.égés3s
+.égé2sz
+.ég1észb
+.ég1észe
+.ég1észé
+.ég1észn
+.ég1észr
+.ég1ö2
+.ég1u2
+.éh1év
+.éj1a2
+.éj1á2
+.éj1el
+.éj1u
.ék1a2
-.ék1i
-.én1á
-.én1el
-.épe2
+.ék1á
+.ékes1s
+.ék1ir
+.ék1o
+.él1a2
+.él2c1i
+.éli2k
+.él1ike
+.él2v1á2
.ép1es
-.ér2csi
-.ér1el
-.ét1é
+.ép2pa
+.ép2p1el
+.ép2pé
+.ép2po
+.ér1a2n
+.ér2c1e2l
+.ér2c1é2j
+.ér2cék
+.ér2c3sí
+.ér1e2l
+.ér1e2s
+.éré2sz
+.ér1észé
+.ér1é2t
+.érü2
+.ér1ül
+.ér2vad
+.ér2val
+.ér2v1ég.
+.ész1a2l
+.ész1á
+.észe2
+.ész1el
+.ész1em
+.ész1es
+.ész1é2k
+.észigaz1
+.ész1o
+.ész1ő2
+.ész2t1örv
+.észü2
+.ész1ülő
+.év1á2g
+.év1essz
+.év1é2g
+.év1é2k
.f2
-.fa2jeg
-.fe2len
+.fa2it.
+.fa2leg
+.fa2n1év
+.fa2r1ont
+.fas2
+.fa1st
+.fat2
+.fa1tr
+.fe2leme
+.fe2l1essz
.fe2lev
-.fe2lék
-.fe2lül.
-.fé2lér
-.fé2lév
-.fé2má
+.fé2k1e2l
+.fé2m1a2
+.fé2m1á2
+.fil2méré
+.fin2ge
+.fogó2s3zá
+.fol2t1a2
+.fö2lő
.fö2lül.
+.fölül1e2
.g2
-.ga2z1em
+.ga2zan
+.gát1al
+.gá2te
+.gá2z1ó2
+.gázs2
+.gá2zsu
+.gáz1z
+.gene2a
+.ge2od
+.ge2os
+.gesz2t1í
+.gé2d1
+.gé2na
.gé2ná
-.gi1g2
+.gén3n
+.gé2pe2lem
+.gé2p1i2p
+.giga1s
+.gonor1
+.gonorr2
+.gó2ce
+.gó2la
+.gó2lá
+.gó2lel
+.gó2l1e2s
+.góli2g
+.gó2l1iga
+.gó2lis
+.gő2z1á2
+.gő2zen
+.gő2z1ő
+.gő2zs
+.gu2i
.h2
+.ha2b1e2
+.ha2b1ol
+.ha2bor
+.ha2b1ő
+.ha2b1u
+.ha2dal
.ha2d1e2
-.hale2
-.ha2lev
-.ha2l1és
-.há2li
-.háncs1
+.ha2dz
+.ha2ik
+.ha2j1e2
+.ha2jom
+.ha2lác
+.halá2l1ó2
+.ha2lárv
+.ha2leg
+.ha2l1el
+.ha2lep
+.ha2let
+.ha2l1e2v
+.ha2lis
+.han2gad
+.han2g1e
+.ha2sor
+.has3sz
+.ha2tag
+.ha2t1at
+.ha2t1e2
+.ha2told
+.há2m1a
+.há2ny1in
+.háro2m1e
+.há2t1alj
.há2tus
+.há2zol
+.há2zó
.he2i
-.horo1s
+.hé2t1ez
+.hé2t1o
+.hit1a
+.hi2tis
+.hodás1
+.hol1l
+.hol2t1e
+.ho2ne
+.hő2sá
.i2
-.in2d3z
-.io2ná
+.ike2r1i
+.ikerü2
+.ike2r1ülé
+.ikon1s
+.ima1s
+.im1p2la
+.in1aktí
+.in2gin
+.inte2r1a
+.io2n1a2
+.io2n1á
+.io2ne
+.ion3n
+.ipa2re
+.izo2m1ért
.í2
-.íráskész1
+.íjá2t
+.íj1áto
+.ín1e
+.írá2s1ág
+.írá2s3z
+.ív1a2
+.ív1á2r
+.ív1ell
+.íz1a
+.íz1in
.j2
-.jazz1
-.je2gy1á
+.jaké2
+.ja2kér
+.ja2kov
+.járműká2
+.já2szá
+.já2szó
+.je2gy1a2
+.je2gy1á2
+.je2l1a
+.je2leg
+.je2lev
+.job2b1ol
+.jó2dal
+.jó2s1e2
+.jó2t1á
.k2
+.kale2i
+.ka2nar
+.ka2n1e
+.kapolc1
+.ka2rala
+.ka2ras
+.ka2r1á2s
+.kar2c3se
+.kare2
+.ka2rem
+.ka2rék
.ka2ring
-.kés1s
-.ké2t1a2
-.ké2tá
+.ka2rí
+.ka2ró2ra
+.ka2r1ó2rák
+.ka2r1ü
+.ka1th
+.ka1tz
+.kár1a2d
+.kás2
+.kása3l
+.ke2csó
+.ke2l1á2
+.ke2l1e2g
+.ke2l1e2ve
+.kel1ö
+.ker2ta
+.ké2nét
+.ké2p1és
+.kéta2
+.ké2tab
+.ké2tad
+.ké2t1ag
+.ké2taka
+.ké2tal
+.ké2tan
+.ké2tap
+.ké2tas
+.ké2tat
+.ké2tau
+.ké2t1á2
+.ké2t1ele
+.ké2t1ez
+.ké2t1o2
+.kéze2
+.ké2z1el
+.ké2zem
+.ké2zs
+.kéz1z
.kiá2
-.kié2
.ki1g2
+.ki1krá
+.kió2
+.ki2ság
+.kiű2
+.kla2uz
+.kle2i
+.kló2re
+.ko2rác
+.ko2rí
+.ko2sis
+.kó2d1a2
+.kó2r1e
+.kó2r1é2s
+.kö2b1öl
+.kö2d1ő
+.kö2zis
+.kö2z1ő
+.köz1z
.kr2
+.kun1a
+.kvar3k.
.l2
-.la2pa
+.lak1a2d
+.la2kal
+.la2k1an
+.la2kép
+.la2kor
+.la2kő
+.lan2t1e
+.lan2t1ó2
+.la2pal
+.la2p1ác
+.la2p1á2r
+.la2p1e2
+.la2p1or
+.la2p1osz
+.la2pó
+.lá2b1e2
+.lá2bil
+.lá2bor
+.lán2c3s
+.lá2nyan
+.lá2ny1e2
+.lá2p1e
+.lá2p1il
+.lá2z1ó2
+.lá2z3s
+.le3dé
.le2g1
+.le3g2ali
+.le3g2elés
.le3g2esle2g1
.le3g2esle3g2esle2g1
-.legé2nyem
+.lege2t
+.le4géne
+.leg3g
.le3gy
-.le2ná
+.lei2d
+.leí2ro
+.leí2ród
+.leí2ru
+.le1kl
+.le1k2r
+.lemez1z
+.le1p2ré
+.le1s2m
.le1t2r
-.lé2ta
-.li2o1
-.liszt1á
-.lókész1
-.ló1s2
-.lőe2
+.leü2
+.lé2c3s
+.lé2g1a2
+.lé2g1á
+.lége2
+.lé2g1el
+.lé2gér
+.lé2go
+.lé2gy1á2
+.lé2p1a2
+.lépü2
+.lép1ülé
+.lé2t1a2
+.lé2t1á2
+.lé2t1e2l
+.lé2t1érd
+.lé2tör
+.lisz2ta
+.lisz2t1á2
+.lisz2ter
+.lito1s
+.lob1e
+.lobi2
+.lo2bin
+.lo2mag
+.lo2mal
+.lo2m1á
+.lom2b1e2
+.lo2me
+.lo2m1é2t
+.lon2csi
+.lófo2g1a2d
+.lő2cs1ö2v
+.lőrés3s
.ly1o
.m2
-.malo2
+.ma2e
+.ma2gal
+.ma2gar
+.ma2gál
+.ma2g1e2
+.mag1g
+.magó2
+.ma2gór
+.ma2in.
+.ma2r1ác
+.ma2r1ing
+.masz2k1or
+.masz2k1ö
+.ma1th
+.ma2uz
.má2r1is
-.me2g1á
-.me2g1e2s
+.me2g1e2
.me2g1é2
-.me2gis
-.me2gő
+.meg1if
+.mego2
+.me2g1ő2
.me2i
+.mel2lá
+.me2ny1u2
+.me2zá
+.médi2af
+.mé2ná
+.mé2no
+.mé2sza
+.mé2szet
.mé2szi
-.mu2e
+.mé2szo
+.mé2zis
+.mi3rá
+.mo2lyan
+.műi2
+.mű1kr
+.mű1s
.n2
.na2gya
.na2gyá
+.na2gye
+.na2gyú
+.na2pap
+.na2p1ar
+.na2pál
.na2p1e
-.na1t
-.nerc1
+.na2pés
+.na2p1o2r
+.na2pö
+.ne2ma
+.ne2meg
+.ne2m1el
+.ne2min
+.ne2ol
+.ne2szá
+.net2t1a2
.ne2um
-.né2pí
-.ny2l
+.né2gyá
+.né2pa
+.né2v1ál
+.né2vel
+.no2r1
+.nya2k1á2ro
+.nya2k1e2
+.nya2k1ö2
+.nyol2c1an
.o2
+.oda1
.ok1a2d
-.ok1ir
+.ok1a2l
+.okka2
+.ola2j1e2
+.ola2sz1ó2
+.olda2l1út
+.or2r1aj
+.or2r1alt
+.or2ran
+.or2r1e2
+.orré2
+.or2r1és
+.or2v1a2
+.or2vá
+.or2v1é
+.orvi2
+.or2vis
+.ot1tr
.ó2
-.óé2
-.óf2
+.ólo2m1a
+.óme3g2
+.ón1a2
+.ón1á2
+.ón1e2
+.ón1év
+.óvá2s1árt
.ö2
-.ön1á
+.ön1d2
+.ön1e2
+.öni2
+.ön1í
.ön1k2
.ön3n
+.ön1o
+.ön1ő
+.ön1s
+.ön1ü
+.össz1a
.össz1á
.öte2
+.öt1eg
.öt1el
-.özö2n1ö
+.öt1t2
+.öv1e2g
+.öv1e2l
+.öv1ő2
.ő2
+.őa3l
+.ői3r
+.őr1ab
.őr1an
+.őr1e2g
+.őr1é2g
+.őr1é2s
+.őr1ist
+.őr1o
+.őr2s1ág
+.őr1u2
+.őr1üg
.ős1a2
+.ős1á2
+.ős1eg
+.ős1e2l
.ős1e2r
+.ős1e2s
+.ős1é2g
+.ős1ért
.ős1í2
+.ős1o
+.ős1ó2
+.ős1p
+.ős1tr
+.ős1u2
+.ős1ú
+.ősz1a2
+.ősz1á
+.ősz1e2g
+.ősz1el
+.ősz1em
+.ős3zene
+.ős3zené
+.őz1a2
+.őz1eg
+.őz1e2l
+.őze2t
+.őz1ete
+.őz1ék
+.őz1ére
+.őz1ő
.őz3s
+.őz1u
.p2
+.pa2da
+.pa2d1á2
+.pa2din
+.pa2d1ó2
.pa2i
-.pais1
+.pa2par
+.pa2pál
+.pa2pe
+.para1f2r
+.parke2
+.par2ker
+.par2ta
+.par2tel
+.par2ter
+.pá2c3s
+.pán2ta
+.pár2t1ö
+.pen3ny
.pe2r1a2
-.pé2k1
-.ph2
-.pier2
+.pe2r1á
+.pe2r1enc
+.pe2rok
+.pe2rül
+.pe2s
+.pia2c3s
+.pina1
+.pin2t1ó
+.ple2i
+.ponta2
+.pon2te
+.po2rad
+.po2ral
+.po2ran
+.po2rác
+.po2rál
.po2re
+.po2r1us
+.pó2kis
+.pó2k1ö
+.pó2rás
+.pó2t1e
+.pó2t1é
+.pre1k2
+.prés3s
+.proto1p2
.q2
.r2
-.ra2big
+.ra2b1as
+.ra2b1á
+.ra2be
+.rabic1
+.ra2b1il
+.ra2b1i2z
+.ra2bí
+.ra2bor
+.ra2bö
+.ra2b1ő2
+.ra2bú
+.ra2gal
+.ra2j1ö2
+.rajtó2
+.raj2t1ór
+.rá2cs1á2z
+.rá1dr
+.rá1fr
+.rá1gr
+.rái2
+.rán2c1e
+.rány2
+.rá1spr
+.rá1s2t
.rát2
-.re2ár
+.rá1tk
+.rá1tr
+.re1k2re
+.ren2d1a2
.ren2d1ő2
-.ru2ma
+.re1p2ri
+.rep2ro
+.re1prod
+.rete2k1
+.ré2m1emb
+.ré2mu
+.ré3p2a
+.ré2sa
+.rés3szer
+.ré2sza
+.ré2szá2
+.ré2sz1e2le
+.ré2szell
+.ré2szer
+.ré2szí
+.ré2szo
+.ré2sző
+.ré2t1a2
+.ré2t1á2
+.ré2v1á
+.ré2zá
+.ré2zel
+.ré2zet
+.ré2zis
+.ré2z1o
+.réz1z
+.ri2zso
+.rizs3z
+.rí2má
+.ro1c2kos
+.romé2
+.ro2m1ét
+.ro2min
+.ro2mis
+.ros2t1e2
+.rug1g
+.ru2m1a
+.ru2mil
+.rú2de
.s2
-.sa2li
+.sa2h1a
+.saj2te
+.sa2s1or
+.sa2vad
+.sa2v1ara
+.sa2v1ál
+.sa2vári
+.sa2v1e2
+.sa2v1é2
+.sá2r1ó
+.sá2rú
+.sás1s
+.sá2s3z
+.sá2v1a
+.sá2vá
+.sá2vó
.sc2
+.se2bal
+.se2b1á
+.se2bel
+.se2besz
+.se2b1o
+.sé2fi
+.s3gr
+.si2em
+.si2ók
+.sín3n
+.sí2p1ő2
+.sí2r1a2
+.sí2rát
.sk2
-.so2ki
-.so1ny
+.so2kél
+.so2kil
+.so2kis
+.so2kol
+.so2m1ag
+.so2mat
+.so1ny2
+.so2ral
.so2rál
+.sör1e2g
.sp2
+.spor2t1á2
.st2
-.sto2
-.su2r
+.star2t1a2
.sz2
-.sza2kér
+.szaba2d1e
+.sza2k1at
+.sza2k1ás
+.sza2k1e
+.sza2kö
+.sza2k1ü
+.szá2l1ó2
+.száz1z
+.szeg1ér.
+.sze2gí
+.sze2i
+.sze2m1á
+.sze2m1ér.
+.sze2m1é2ri
+.sze2r1ág
+.szer2v1a2d
+.szer2v1e2v
.sze2szá
-.szé2t
+.sze2szeg
+.sze2sz1ó2
+.szé2fa
+.szén1n
+.szé2t1
+.széte2
+.szín3n
.szk2
-.szódás1
+.szo2l1ó
+.szókész1
+.szó2szak
+.szószö2
+.szó2sz1öv
.szt2
.t2
-.ta2ni
-.ta2nos
-.ta2ur
-.tá2v1i2ratozá
-.te2j1á
-.té2nyi
+.ta2gal
+.ta2g1a2r
+.ta2g1á
+.ta2g1e
+.ta2gép
+.tag1g
+.ta2g1i2n
+.ta2gö
+.ta2nag
+.ta2n1as
+.ta2nál
+.tan1d2
+.ta2n1e2
+.ta2n1év
+.tané2ve
+.ta2nis
+.tan1n
+.ta2n1ó2
+.tant2
+.ta2n1u2s
+.ta3rá
+.ta2t1ál
+.ta2t1árai
+.ta2t1e2
+.ta2t1í
+.ta2tor
+.ta2tur
+.tá2l1ó2
+.tán2cse
+.tá2p1ol
+.tár2sor
+.tár2s1ö2
+.tár2t1es
+.tár2t1ölt
+.tá2v1a
+.távi2
+.tá2v1ir
+.tbc1
+.te2aka
+.te2ar
+.te2j1á2
+.te2j1eg
+.terape2
+.ter2v1a2
+.ter2v1á2
+.tes2ték
+.tes2t1öl
+.tetraé2
+.teza2
+.té3k
+.té2nyem
+.té2nyí
+.té2ra
.té2rá
-.to2ké
-.tö2k1élv
-.tölcséres1
-.tűz3s
+.té2ret
+.tér1int
+.tí2z1ó2
+.tí2zs
+.tízü2
+.to2káro
+.tol2le
+.topa3u2
+.to2r1á2l
+.to2r1odv
+.tor2z3se
+.tó1st
+.tó2t1ér.
+.tön2k1a
+.tőa2
+.tőe2
+.tő2gya
+.tő2r1éss
+.tő2r1é2sz
+.tra2u
+.turnus1s
+.tus3s
+.tu2sz
+.tus3zá
+.tú2r1att
+.tű2z1ért
+.tű2z1ő2r
+.tű2zse
+.tyú2ka
.u2
+.ugrás1s
+.un1in
+.uni2o
.utas1s
+.utás4
+.uto2
+.utó2d1ö
.ú2
-.úr1a
-.úr1ist
+.új1as
+.új1e
+.úr1a2
+.úr1á2
+.úr1e
+.úszós2
+.úszó1sp
.út1a2
-.út1e
+.út1á2
+.út1e2
+.út1ol
+.út1ő
+.út1ü2
.ü2
-.ük1
+.ügy1ér.
+.ük1a2
+.üstö2l
+.üs2t1ölő
+.ütőkész1
+.üve2g1e2l
.ű2
-.űr1i
+.űr1a2
+.űr1á2
+.űr1e2
+.űr1é2s
+.űr1éte
+.űri2
+.űr1ita
+.űr1öss
+.űr1s
+.űrt2
.v2
.va2d1al
-.va2gyi
-.vasas1s
+.va2dár
+.va2dét
+.va2d1o2r
+.va2dóv
+.va2d1ö
+.va2d3z
+.va2gy1i
+.va2j1e
+.va2k1ak
+.va2kal
+.va2k1an
+.va2kap
+.va2k1ár
+.va2k1e2
+.va2k1ö
+.va2rak
+.va2r1á2s
+.va2r1e2
+.va2r1ing
+.va2sab
+.va2sar
+.va2s1a2tom
+.va2s1á2g
+.va2sárk
+.va2sás
+.va2s1e
+.va2sék
+.va2s1i2r
.va2sol
+.va2s1or
+.va2só
+.vas3s
+.vas1tr
+.va2s1ü
+.va2s3z
+.vács1
+.vá2dá
+.vá2d1e
+.vá2ma
+.vár1a2dá
+.vá2r1i2s
+.vá2r1ol
+.verés1s
+.ver2s1ég
+.ver2s1o
+.ver2sz
+.vé2g1é2k
.vé2g1o
+.vé2nyel
+.vé2r1a2
+.vé2rá
+.vé2r1eb
+.vé2r1eg
+.vé2rik
+.vé2r1o
+.vé2ró
+.vér2t1ék
+.vé2ru
+.vé2sza
+.vé2szá
+.vé2szer
+.vé2szí
+.vé2szo
+.vé2sz1ó2
+.vi1g2n
+.ví2zed
+.ví2zem
+.vona2t1út
+.von2z1e2
.w2
.x2
.y2
.z2
+.za2be
+.za2b1i2n
+.zai2
+.za2j1e2
+.za2j1ö
+.za2jut
+.zá2r1a2dá
+.zá2r1e
+.zá2r1ó2ra
+.zárta2n
+.zár2t1any
+.zár2t1é
+.zár2t1ö2v
.ze2i
+.zé2t1
.zs2
+.zű2r1ő
2a.
-2a1a
-aa2d
-aa2j
-aa2k
-aa2l
-a2am
-aa2n
-aa2p
-aa2u
-aa2v
-aa2z
-2a1á
-aá2b
-aá2gak
+a1a
+aa2be
+aa2cé
+aa2ch
+aa2da
+aadás1s
+aa2dássz
+aa2dó
+aa2du
+aa2fo
+aa2ga
+aa2gi
+aa2gó
+aa2gy
+aa2já
+aa2ka
+aa2ká
+aa2ko
+aa2ku
+a2al.
+aa2la
+aala2g1
+aa2lá
+aal1eg
+aa2lé
+aalmana2
+aalmanac3
+aa2lo
+aal1os
+aa2lu
+aa2ma
+aa2na
+aa2ne
+aa2ni
+aa2no
+a2ans
+aa2ny
+aa2pa
+aa2pá
+aa2po
+aa2pu
+aa2ra
+aa2rá
+aa2ré
+aa2ri
+a2arl
+aa2ro
+aa2sz
+aa2to
+aa2ty
+aa2ur
+aa2ut
+aa2va
+a2avo
+aa2zo
+a1á
+aá2bé
+aá2cs
+aá2fá
+aá2ga
+aá2gá
+aá2gé
+aá2gi
+aá2go
+aá2gu
aá2gy
+aá2hí
+aá2ju
a2ál.
-a2áln
-aá2p
-aá2r
-aá2s
-aá2t1
-aáta2
-aba2de
+aá2la
+aá2lo
+aá2po
+aá2ra
+aá2rá
+aá2r1e2
+aá2ré
+aá2ri
+aá2ro
+aá2ru
+aá2rú
+aá2sa
+aá2sá
+aá2so
+aá2só
+aá2ta
+aá2t1á2
+aá2t1e2
+aá2té
+aá2t1i2
+aá2tí
+aá2to
+aá2t1ö
+aá2tu
+aá2tú
+aá2tü
+aá2zá
+aá2zó
+2abab
+ab1adó
+aba2dz
+1a2bajg
+ab1akk
+2abal
2aban
+aba2nal
+aba1pr
2abar
-2abáj
+aba2rat
+a2b1a2ráb
+a2b1au
+2abáb
+abá2b1u2r
+2abád
+2abán
+a2b1áp
+abá2rak
+ab1á2ron
+ab1á2rú
2abáz
-2abes
+abb2a
+1abbah
+2abea
+abeá2
+a2b1e2b
+2abec
+ab1edé
+2abeé
+2abef
+2abeh
+2abei
+2abej
+ab1ejt
+ab1ela
+ab1e2lá
+2abele
+abe2lem
+2abels
+ab1elsz
+a2b1elt
+ab1elv
+2abem
+ab1emb
+a2b1erd
+2abetá
+2abete
+2abeté
+2abeto
+2abetö
+2abev
+a2b1ex
+2abék
+2abél
+2abén
+a2b1é2ne
+a2b1ép
+2abér
+a2b1érz
+2abétá
+a2b1éve
+ab1fl
+ab1fr
+2abic
+ab1i2do
+2abie
+ab1i2ke
+ab1iks
+a2b1i2nai
+abi2náb
+a2b1ing
2abir
+ab1irkái
+ab1ism
+2abit
+a2b1i2ta
2abiz
+a2b1íj
+ab1írn
+ab1kr
+1ablaká
+1ablakh
+1ablakk
+1ablakos
+1ablakr
+2ablo
+a1b2lú
+2abog
+2aboh
+2abok
+2abolt
+ab1oltó
2abom
-abos3s
-2abő
-2abú
-a2b1ü
+abo2rak
+abo2r1as
+abo2rin
+2abot
+a2b1öb
+abö2l
+ab1ölő
+ab1ölt
+a2b1ös
+a2b1öt
+a2b1ö2z
+ab1őrl
+ab1pr
+ab2rek
+2abri
+a1b2rike
+ab2rin
+a1b2rit
+2abró
+ab2rók
+ab1st
+a2b1urd
+ab1úr.
+ab1úrt
+abú2s1á
+ab1úsz
+ab1ü2l
+ab1üs
+ab1üv
+a2b1üz
+aca2la
+aca2lá
+aca2l1e2
+aca2lét
+a2c1a2n
+aca2tá
+a2c1ág
+a2c1ál
+acci2ó
+ac2cö
+ac3cse
+ac3csí
+ac3csü
+acc3sz
a2ce.
+ac1ebé
+a2c1eg
ace2l
-ac1ele
-acé2l1e
+a2c1ele
+a2c1elé
+a2c1elh
+ac1elle
+a2c1elm
+a2c1elo
+a2c1elv
+ac1emb
+2acen
+ace2ta
+a2c1e2v
+a2c1ex
+a2célá
+acél1e2
+a2célé
a2c1ép
-ac1ére
+a2c1é2re
+a2c1érte
+ac1fr
a2chá
-ac3hoz
-2ací
-ac3ság
-a2c3sü
-ac3sz
-ada2le
-ada2li
-ada2l1ú
-a2dap
-ad1apr
-ada2t1e2
-ad1ág
-a2dású
+ac3héj
+ac3hí
+a2c3hoz
+ac3hó
+a2c3hö
+a2c3hú
+ac1ide
+a2c1i2gá
+a2c1i2gé
+a2c1ike
+2acin.
+a2c1ind
+ac1inf
+a2c1ist
+a2c1ír
+ac1ív
+ack1aro
+ac2kál
+ac2k1e2v
+acké2r
+ac2k1ére
+ack1éte
+ac2kil
+ac2k1osz
+ac2kös
+ac2kű
+ac2lu
+a2c1op
+ac1ös
+ac1őr
+ac1pl
+ac1pr
+2acsal
+acs1alj.
+acsa2p1á2g
+a2cs1atk
+acs1áll
+a2csáru
+acse2c
+acs1egy
+ac3seml
+1a2cséb
+a2cs1ék
+2acsi
+2acsí
+2acson
+acs1orm
+a2cs1öc
+acs1s
+ac3str
+a2csúl
+a2cs1úr
+acsü2l
+a2csüt
+ac3szá
+ac3sze
+ac3szö
+ac1tr
+a2c1ud
+2acula
+a2c1ut
+ac1új
+ac1üg
+ac1ür
+ac1üz
+ac3za
+ac3zá
+ac3ze
+ac3zs
+ac3zu
+a2d1a2da
+a2d1a2dá
+1a2dag.
+ada2gá
+1a2dagb
+a2dagg
+1a2dagh
+1adagi
+1a2dagj
+1a2dagn
+1a2dago
+1a2dagr
+1a2dagt
+1adagu
+1a2dagú
+a2d1aktá
+ada2lap
+ada2l1es
+1adalé
+ada2lén
+ada2l1osz
+ada2l1ó2
+ada2l1út
+a2d1ana
+a2d1ann
+1adapt
+2adar
+ada2ral
+ada2re
+ada2r1és
+ada2r1in
+ada2rut
+ada2tab
+ada2tal
+ada2t1a2n
+ada2t1ár.
+ada2t1á2rak
+ada2t1á2ram
+ada2t1á2rat
+ada2t1á2rá
+ada2t1árb
+ada2t1árr
+ada2t1á2ru
+1a2datáu
+ada2t1e2g
+ada2tel
+ada2t1es
+adaté2r
+ada2t1érd
+ada2t1érő
+1a2datin
+ada2tint
+ada2tis
+ada2tív
+a2datm
+ada2t1old
+ada2t1öl
+ada2t1ő
+a2datv
+ad1azo
+a2d1ág
+adára2
+adá2rak
+adá2ris
ad2del
-a2d1e2g
+ade2g
+ad1ege
+ad1egé
+ad1egy
ade2i
-1a2dek
-ad1e2le
-ad1elő
-ad1elv
-ade2n
-ad1ene
-ade2s
-ad1esé
-adet2
-ad1e2v
-adé2ke
+a2d1ej
+adel1ej
+ad1elh
+ad1elm
+ad1eln
+a2d1e2lő
+ad1elr
+ad1elt
+a2d1emb
+ad1e2mé
+a2d1eml
+a2d1emu
+ad1eng
+ad1e2pe
+ad1epr
+a2derd
+ad1erő
+ade2ti
+a2deu
+a2d1e2v
+a2d1ex
+adé2kat
+adé2k1e2
+adé2kés
+adé2kis
+adé2kü
+adé2kű
+ad1éle
+2adémont
a2d1ép
-a2d1é2v
-ad1ide
-adi2o1g2
-ad1íz
-a2d1orzá
-1a2dód
-ad1ö2l
-ad2rót
-adu2r
-ad1ura
-2adú
-2a1e
-ae2b
-ae2c
+a2d1érz
+adé2s
+adé2te
+a2d1é2ve
+ad1fl
+adfo2k1út
+ad1gr
+1adhé
+2adia
+adia2n
+ad1i2bo
+2adid
+adi2kut
+2adin
+ad1i2na.
+ad1i2nai
+ad1ind
+a2d1ing
+adi2o1g2ra
+2adip
+2adis
+2adiv
+a2d1í2z
+ad2ji
+adka2na
+ad1kr
+2adob
+2adoc
+a2d1okke
+2adol
+ad1ola
+1a2domá
+2adomb
+2adomi
+1a2dop
+a2d1orc
+a2d1org
+2adorh
+2adorian
+2adorig
+ad1orv
+a2d1orz
+a2d1osz
+a2dógu
+1a2dóku
+a2dómé
+a2dórá
+1a2dósat
+2adósi.
+ad1ó2vás
+1a2dózó
+a2d1ö2k
+a2d1ö2l
+ad1örd
+a2d1ös
+adőr1a
+adő2rel
+ad1ő2s
+ad1pl
+ad1pr
+a1d2rac
+ad2ram
+ad2raz
+2adrá
+ad2rám
+2adro
+ad2rog
+a1d2rót
+ad2ruk
+ad1sp
+ad1st
+2adug
+2adum
+2adup
+ad1u2rá
+ad1úsz
+adú2t
+a2d1úto
+a2d1üg
+ad1ü2lé
+a2d1üt
+ad1üz
+a2d1űr
+ad1űz
+ad1yéh
+ad1yér
+ad3zab
+ad3zav
+ad3zár
+ad3zel
+ad3zón
+a2d3zö
+ad3zsí
+a1e
+ae2bé
+ae2ce
+ae2cs
ae2dé
-aegész1
-a2ei
-ae2k
-ae2l1a2
+ae2dz
+ae2ge
+ae2gé
+ae2gy
+ae2he
+ae2ke
+ae2ké
+ae2la
+ae2l1á2
ae2le
-ae2l1o
+ael1ej
+ae3len
+ael1érh
+ae2l1í2
+ae2lo
+ae2l1ö2
ae2lő
+ae2lu
ae2me
-ae2p
-ae2re
+ae2mé
+ae2mi
+ae2mu
+ae2ne
+ae2pe
+ae2pé
+ae2pi
+ae2po
+ae2red
+ae2ré
aero1s
-aerosz2
+ae2ró
ae2rő
ae2se
+aes1er
ae2sé
ae2si
ae2ső
-ae2v
-ae2z
-2a1é
-aé2g
-aé2h
-aé2k
-aé2l
-aé2n
-aé2p
-aé2r
-aé2v
+ae2sü
+ae2sz
+ae2ta
+ae2tá
+ae2te
+ae2ti
+ae2tű
+ae2va
+ae2ve
+ae2vé
+ae2vi
+ae2vo
+ae2vő
+ae2xe
+ae2zü
+a1é
+aé2derv
+aé2ge
+aé2gé
+aé2gő
+aé2he
+aé2je
+aé2ke
+aé2kí
+aé2le
+aé2lé
+aé2li
+aé2lő
+aé2lü
+aé2lű
+aé2ne
+aé2pí
+aé2pü
+aérde2m1
+aé2ri
+aé2te
+aé2va
+aé2ve
+aé2vé
+aé2vi
+aé2vü
+2afa.
+2afaj.
+2afaja
+2afajá
+2afajb
+2afa2j1e2
+2afajj
2afajn
-2afe
-afe2li
+2afajo
+2afajt.
+2afaju
+2afajz
+2afak
+2afal
+2afam
+2afao
+2afar
+2afas
+afe2l1e2m
+2afék
+2aféli
+2afélő
+2afélt
+2afén
+2afér
2afés
-2afi
-2afő
-af2re
-2afü
-a2g1a2j
-ag1any
-ag1arc
-agán1n
-agá2nyé
+1affé
+afi2ap
+afi2asz
+afi2ke
+afi2t1a2
+afi2t1e2
+af2le
+a1f2lo
+a1f2ló
+a1f2lö
+a1f2lu
+2afoc
+2afog
+2afok
+2afol
+2afon
+2aford
+2aforg
+2aformác
+2aformál
+2aformátu
+2aformáz
+2aformu
+2aforr
+2afos
+2afot
+af2rak
+2a1f2re
+af2riz
+af2rí
+2afro
+af2ron
+2a1f2rö
+af3tá
+afus3s
+a2g1abl
+ag1abr
+ag1a2cé
+ag1aga
+a2g1a2ka
+a2g1akk
+a2g1akt
+2agal
+a2g1a2lak
+a2g1a2lap
+a2g1a2lá
+a2g1alj
+a2g1alm
+aga2lom
+a2g1alt
+ag1ang
+ag1a2no
+ag1ant
+a2gany
+a2gap
+ag1apa
+ag1apá
+a2g1arc
+a2g1aré
+a2g1a2ro
+a2g1art
+aga2tom
+ag1a2tó
+a2g1a2ur
+ag1aut
+a2g1ava
+2agaz
+ag1a2zon
+agá2c
+a2g1ács.
+a2g1ácsi
+ag1á2ga
+1a2gák
+a3gála
+a2g1álm
+agá2lyan
+a2g1áp
a2gár.
-ag1át1a
-ag1edé
-a2g1eg
+a2g1árad
+a2g1á2rai
+a2g1á2rak
+a2g1áras
+a2g1árat
+a2gá2rá
+a2gárb
+a2g1árc
+a2gáre
+a2gáré
+agá2rév
+a2gárf
+a2gárh
+a2gá2ri
+a2gárj
+a2gárk
+a2gárm
+a2gárn
+ag1árná
+a2gáro
+a2gárr
+a2gárs
+a2gárt
+a2g1á2ru
+a2g1á2rú
+ag1ásv
+a2g1átá
+a2g1á2t1e2
+ag1átfe
+a2g1áth
+a2g1átk
+a2g1átm
+agá2tol
+a2g1áts
+ag1átü
+a2g1átv
+ag1bl
+ag2del
+agdí2j1a2da
+a2ge.
+ag1e2cs
+a2g1e2d
+a2g1e2g
+age2l
+a2g1ela
+ag1elb
+ag1eld
+ag1ele
+ag1elé
+ag1elf
+ag1elh
+ag1eli
ag1elm
+ag1eln
+a2g1elo
+a2g1elő
+ag1elr
+ag1els
ag1elt
+ag1elű
ag1elv
-a2gem
-ag1emb
-a2g1ev
-a2g1é2g
+ag1elz
+a2g1e2m
+ag1eng
+a2g1eny
+a2g1e2p
+a2g1erd
+age2red
+a2g1erk
+a2g1erő
+age2s
+a2g1e2v
+a2g1ex
+a2g1ez
+a2g1é2j
+a2g1ék.
+a2g1ékn
a2g1é2l
-ag1épí
+agé2né
+agé2p1i2p
+a2g1é2pül
+a2g1ér.
+a2g1é2re
+a2g1é2ré
+a2g1érh
+a2g1é2ri
+a2g1érk
+ag1érl
+ag1érm
+ag1érte
+ag1érté
+ag1érth
+a2g1értő
+ag1ész
+a2g1éte
+a2g1éve
+ag1fl
+ag1fr
1agg.
+ag2g1a2ty
+ag2g1em
+ag2git
+1aggl
+1aggod
+1aggok
+ag3gyar
ag3gye
-a1g2hó
-agi2g
-ag1igé
-a2g1i2p
+ag3gyi
+ag3gyo
+ag3gyü
+agi3a
+ag1ide
+a2g1i2ga
+a2g1ige
+a2g1igé
+ag1ike
+a2gill
+ag1inf
+a2g1ing
+a2g1int
+a2g1i2oni
+agi2ó
+a2g1ip
+ag1iro
+a2g1ist
+agi2sz
+a2gita
+ag1izé
+ag1izm
+a2g1íj
+ag1ín
a2g1ír
-agli2
-ago2na
-2agor
+ag1ív
+a2g1íz
+agká2rok
+ag1kl
+ag1kr
+ag2ne.
+a1g2non
+a2g1ob
+ag1oltó
+ago2ly1a2
+2agom
+2agona
+agon3n
+ago2n1osz
+a2g1op
+a2g1org
+ag1orj
+a2g1orn
+a2g1orr
a2g1ors
-ag1órá
+a2g1orv
+a2g1otth
+agó2rái
+a2g1ö2l
+ag1önk
+ag1önt
+a2g1örö
+ag1örv
+a2g1ös
a2g1öt
-a1g2raf
-a2gut
-ag1uta
+a2g1ö2v
+a2g1ö2z
+a2g1őr
+a2g1ő2s
+ag1pl
+ag1pr
+2agrammj
+a1g2rav
+2agrá
+a1g2róf
+ag1sk
+ag1sp
+ag1sr
+ag1st
+agsz2
+ag1szt
+ag1tr
+a2g1und
+a2guram
+agu2rat
+ag1u2rá
+ag1urn
ag1u2tá
-a2g1út
-a2g1ü2
+a2g1új
+ag1úta
+a2g1úti
+ag1útt
+a2g1ü2l
+a2g1ür
+a2g1üs
+a2g1üt
+a2g1üv
+a2g1üz
+ag1űr
+ag1űz
+a2gy1a2c
a2gyad
agy1a2dó
-a2gyag
-agy1agy
-agy1ala
-agy1alk
-agy1any
+agy1a2gya
+a2gyaj
+1a2gyak.
+a2gyakb
+agya2la
+agy1alap
+agy1alg
+a2gyalj
+agy1alko
+agy1alm
+1a2gyam
+agy1ana
+a2gy1any
+a2gy1apa
+agy1apja
+agy1apjá
+a2gy1a2pó
+a2gy1apr
+agya2sz
+a2gy1aszó
a2gyál
-agy1ári
-a2gyát
-agy1el
-a2gy1em
-a2gy1en
-a2gyep
-agy1erő
-a2gy1es
+agy1árv
+a2gy1e2c
+agy1e2g
+a2gy1el
+agy1em
+agy1est
+agy1esz
+a2gyev
a2gy1ez
-a2gyér
-agy1ére
-a2gyét
-a2gyic
-a2gyim
-a2gy1ip
-a2gyir
-agy1is.
-agy1ist
-a2gyoko
-a2gyokt
+agy1ék.
+agy1éke
+agy1ékk
+agy1ér.
+a2gy1é2re
+agy1érn
+agy1érr
+agy1érs
+a2gyima
+agy2nyá
agyo2r
-agy1oro
-2ahar
-2ahe
-1ahh
-2ahi
-2ahí
-aho2l1i
-2ahu
+a2gy1oro
+a2gyorr
+a2gy1ö2l
+a2gy1ő2r
+agyu2r
+agy1urá
+1a2gyú.
+1a2gyúa
+a2gyún
+agy1úr.
+agy1ú2sz
+a2gyút
+2agyű
+aha2l1e
+aha2sábr
+ahelyü2kü
+ahert2
+aher1tze
+ahé2j1út
+ahitköz1
+ah1o2vi
+ahú2sár
+ahús3s
a1i
-a2ia.
ai2bo
2ai2de
-ai2dő
-ai2e
-2aig2
-ai2gazító
+ai2dom
+2ai2dő
+a2iék
+ai2ga
+ai2gá
+ai2ge
ai2gé
-a2ign
-ai2j
+ai2gy
+ai2ia
+ai2ib
+ai2ih
+ai2ij
+ai2in
+ai2ir
+ai2it
+ai2je
+aika2
+ai2kab
+ai2k1ad
+ai2k1al
+ai2k1ar
ai2k1as
-ai2k1e2
+ai2k1á
+ai2ke2
+aik1el
+aiki2
+ai2kik
+ai2kis
+ai2k1ol
+ai2k1osz
+ai2kő
+ai2kü
+a2ilb
+a2ile
+2aill
+ail2le.
+ail2lo
ai2ma.
2ai2má
-ai2nal
-ai2nas
+2aimi
+ai2mit
+2aimp
+ai2na.
+ai2na2l
+ain1ala
+2ai2nas
+ainá2
+ai2n1álo
+ai2nár
+2aind
+ai2ne
+ai2nél
+2ainf
2aing
+ai2n1in
+ai2nol
+2ainp
+2ains
2aint
-ai2o
-2ai2p
+ai2nü
+ai2onb
+ai2onn
+ai2ono
+ai2onr
+ai2ont
+ai2pa
+a2ir.
ai2ram
-ai2rá
+2ai2rat
+2ai2rá
+ai2re.
+ai2ré
+ai2ri
+2airo
ai2rod
-ai2zo
-2a1í2
-a2j1al
-aja2n
-aj1ana
-2aje
-a2j1e2d
-aj1egé
-a2j1elm
-aj1e2lő
-a2j1em
-a2j1er
-a2jég
-a2j1ék
-a2j1ir
-1ajkúa
+a2i2se
+ai2si
+2aisk
+2aism
+2aist
+2aisz
+ai2sza
+ai2szo
+2ai2ta
+ai2vad
+ai2var
+ai2vás
+2ai2vó
+ai2zé
+ai2zom
+a1í
+aí2gé
+aí2ja
+aí2já
+aí2ju
+aí2ra
+aí2rá
+aí2ro
+aí2ró
+aí2ru
+aí2té
+aí2vá
+aí2ve
+aí2vé
+aí2vi
+aí2vó
+aí2vü
+aí2vű
+aí2ze
+aí2zé
+aí2zü
+aí2zű
+a2j1a2dó
+a2j1adu
+aj1aga
+aj1agr
+aja2kol
+a2j1akó
+aja2kú
+a2j1ana
+a2j1ant
+a2j1any
+aj1apr
+a2j1áa
+ajá2c
+aj1á2go
+1a2jánd
+1ajánl
+a2j1áp
+2ajár
+a2j1árb
+a2j1árc
+a2j1áre
+a2j1áré
+a2j1árr
+aj1ásá
+aj1ásv
+a2j1á2t1e2
+ajá2z
+aj1ázá
+aj1bl
+aj1br
+aj2d1alm
+aj2d1a2lom.
+aj2d1a2lomm
+aj2d1a2lomn
+aj2d1a2lomr
+aj2d1a2lomt
+a2j1e2c
+a2j1ef
+a2j1egé
+a2j1ela
+aje2leme
+a2j1elf
+aj1ellá
+a2j1elo
+aj1elő
+aj1elvá
+aj1elvo
+a2j1e2m
+aj1ene
+aj1enz
+a2j1e2r
+aj1e2se
+a2j1ex
+a2j1ez
+a2j1ége
+a2j1égé
+aj1égő
+a2j1é2k
+a2j1él
+a2j1ép
+ajé2r
+a2j1ére
+a2j1éte
+aj1fl
+aj1fr
+aj1g2r
+a2j1i2d
+a2j1ij
+a2j1ik
+a2j1im
+a2j1int
+a2j1io
+a2j1ip
+a2j1iz
+aj1ír
+aj1íz
+aj1kl
+1ajkú.
+ajobb1o
+ajo2g1á2sza
a2j1ola
aj1old
+a2j1o2v
+a2j1ócskás
+ajó2sár
+aj1öb
+a2j1ök
+a2j1ör
+a2j1öz
+aj1őr
+aj1ő2s
+aj1pl
+aj1pr
+aj1sh
+aj1sk
+aj1sp
+aj2tág
+aj2teg
+aj2t1é2t
+ajt1org
+aju2hi
+a2j1új
+aj1úsz
+a2j1úto
+a2j1útr
+aj1üg
aj1ül
-aj2ze
+aj1üs
+aj1üz
+aj1űz
+ajz1aka
+ajz1atl
+aj2zer
aj2zí
-aj2zsí
-a2k1akn
-a2k1alk
-ak1ann
+aj2zü
+2akab
+aka2cse
+a2kadag
+a2k1a2data
+a2k1a2datb
+a2k1a2datn
+a2k1a2dato
+a2k1a2datr
+a2k1a2datt
+1akadál
+1a2kadém
+a2k1adm
+a2k1aga
+2akal
+ak1a2lag
+a2k1a2lak
+aka2lapú
+a2k1aleg
+ak1alko
+2akam
+2akan
+2akao
2akap
-aka2s1ü
+aka2pád
+ak1app
+ak1a2rai
+ak1arasz
+a2k1a2ráb
+a2k1a2rák
+2akarc
+a2karch
+2akard
+ak1a2rén
+2akari
+2akarr
+2akasí
+2akast
+aka2szaj
+ak1a2szat
+aka2szel
+aka2szö
+a2k1asztr
+2akata
+aka2tab
+2akate
+aka2tel
+aka2ter
+akati2
+aka2tik
+aka2tim
+aka2tin
+2akau
+a2k1autó
2akav
-akás1s
-2ake
-a2k1eg
-ak1els
-ak1emb
+2akaz
+1akác.
+a2k1áf
+a2k1ág
+aká2l1a
+aká2lis
+a2k1álló
+ak1árad
+a2k1árb
+a2k1árj
+a2kárk
+aká2rokn
+a2k1ártó
+a2k1á2ru
+aká2sad
+aká2saj
+aká2sal
+aká2sar
+aká2sav
+aká2sást
+akás3s
+ak1á2szán
+aká2szu
+a2k1ászun
+akát1a
+a2k1átla
+ak1bl
+akció2s1ű2
+a2ke.
+ake2cs
+a2k1e2dz
+ak1e2ge
+ak1e2gé
+a2k1ela
+a2k1elá
+ake2lem
+ak1elh
+a2k1elj
+a2k1elo
+ake2lők
+a2k1elr
+a2k1elv
+a2k1emb
+ak1e2mel
+a2kerd
+ak1e2rei
+a2k1e2ró
a2k1e2rő
-aké2k
-a2k1éke
-2akép
-ak1épí
+a2kesp
+a2k1est
+ak1eszk
+ak1eszm
+a2k1e2te
+ak1e2ti
+a2k1e2vez
+ak1é2kem
+ak1é2kes
+a2k1é2ké
+a2k1ékh
+ak1ékrő
+2akém
+2akény
+2akép.
+2aképb
+2aképe
+2aképé
+2aképh
+2aképk
+2aképl
+2aképn
+2aképpel
+2aképpé
+2aképr
+2aképt
+2aképü
+2aképz
+a2k1érc
2akérd
-a2k1é2ret
-ak1értel
+a2kérdek
+2akére
+2akéré
+a2k1érm
+2akérő
+a2k1é2rői
+a2k1é2rőj
+a2k1érr
+a2kérteke
+a2k1értel
+a2k1értet
a2k1értő
+2akérv
+a2k1érz
2akés
-a1khó
-akiá2
+a2k1észa
+a2k1é2te
+2akéts
+a2k1étt
+2akéz
+ak1fl
+ak1fr
+akgerinc1
+ak1gr
+2akia
+2akib
+2akic
+2akid
+a2k1i2dé
+ak1idi
+2akie2
+2akié
+2akif
+ak1iga
+a2k1igé
+2akigy
+2akih
+2akií
+2akij
+2akil
+a2k1ill
+ak1ily
+2akim
+a2k1i2má
+a2k1imi
2akin
-a2k1i2p
-ak1iro
-ak1is.
-aki2s1a
-ak1isk
+ak1ind
+a2k1ing
+a2k1ins
+a2k1ion
+2akir
+aki2rom
+2akis
+a2k1isi
+a2k1isk
ak1ism
-ak1izm
-2akí
-ak2kór
-ak2lei
-ak2lés
-ak2lin
+a2k1ist
+2akit
+2akiv
+2akiz
+a2k1izm
+a2kíté
+a2k1í2z
+ak2k1a2d
+ak2kaj
+ak2k1a2la
+akk1alk
+ak2k1arc
+ak2kál
+ak2k1á2p
+ak2k1ed
+akk1ell
+ak2kelm
+akk1elt
+ak2kem
+ak2k1eró
+akke2s
+akk1ese
+ak2ket
+ak2kola
+1akkord
+akk1ölt
+ak2k1ös
+ak2kőr
+1akku.
+1akkum
+ak2lau
+ak2lav
+ak2lor
+ak2lón
+ak2lór
+1aknai
+1aknáb
+1aknáh
+1aknái
+1aknáka
+1aknáko
+1aknás
+1aknát.
+1aknáv
+1aknáz
+2akoa
+ak1obj
+2akoc
+2akof
+2akokt
+akolás3s
+a2k1olda
a2k1o2ly
+2akom
+2akonc
+2akond
+2akonf
+2akong
+2akonk
+2akons
+2akont
+2akonv
+2akony
+2akonz
+2akoo
+2akop
+a2k1o2pe
+ak1o2rat
+2akorb
+2akord
+a2k1org
+2akori
+a2k1orj
+2akorl
+2akorm
+2akoro
+2akorp
+2akorr
+2akors
+2akort
+2akoru
+2akorú
a2k1orv
-2akö
-a2k1örv
+2akos
+2akóni
+2akó1p2
+a2k1ó2rá
+ak1ó2ród
+1a2kózá
+ak1össz
+akö2z1é2l
+aközrea3
ak1őr.
+ak1ős.
+ak1pl
+ak1pr
+ak1ps
+akrádi2
+ak2rát
+2akre
+ak2rea
2akré
+a1k2réme
+ak2réta
+ak2rétá
2akri
-ak2rit
-a1k2ru
-ak1ug
-2akut
-2akú
-ak1útr
-2akü
-ak1ülé
+a1k2rit
+2akrí
+ak2ríz
+1akrob
+2akrónik
+ak1sp
+ak1sz2t
+ak2t1au
+aktár2s1a2d
+akt1emb
+1akti.
+ak2tim
+1aktívb
+aktí2ve
+ak2t1íve.
+1aktívk
+1aktívo
+1aktívs
+1aktívt
+akto2r1ál
+akt1osz
+ak1trá
+1aktua
+1aktú.
+a2k1udv
+a2k1ujj
+2akun
+1akupu
+a2k1úg
+a2k1új
+a2k1úrr
+a2k1üg
+a2k1ü2le
+a2k1ü2lé
+a2k1üln
+a2k1ü2t
a2k1ü2v
-2akv
-al1abl
-alag1g
+ak1ya
+a2l1abl
+alac1c
+alace2
+alaci2
+ala2cit
+ala2cor
+a2lacsé
+ala2c3sö
+ala2csü
+a2ladag
+a2l1a2datá
+ala2gál
+ala2g1e
+ala2gép
ala2gol
+ala2gya
+ala2j1a2d
+ala2jas
ala2j1e2
-1alakí
-1a2lakok
-1a2lakú
+a2lakad
+ala2k1an
+a2l1a2kas
+ala2kál
+ala2k1áp
+ala2kes
+1a2lakí
+a2l1akna.
+a2laknák
+a2laknát
+ala2kol
+a2l1a2kód
+ala2k1öl
+a2l1aktu
+1alaku
+a2lakul.
+a2lakult
+al1alg
+a2l1alj
+a2l1alk
+al1all
+al1alm
+al1a2lo
+al1alt
+ala2n1e
+1a2lanny
a2lany
-ala2nye
-ala2p1a2
-ala2pár
-1a2lapi
-1a2lapí
+ala2nyal
+ala2ny1e2
+ala2p1a2d
+ala2pak
+ala2pal
+a2lapan
+ala2p1á2r
+ala2p1e2
+ala2pill
+ala2pin
+ala2pir
+1a2lapítv
+ala2p1ol
+ala2por
+ala2p1osz
+alap1ó2
alap1p
-a2láf
-al1ág.
-al1á2ga
-al1ágg
+al1a2ra
+al1a2rá
+al1arg
+ala1s2p
+a2l1aszp
+alaszta2l
+alat1any
+alatát1a2
+ala2t1e2v
+ala2t1inf
+ala2tív
+ala2t1ol
+alató2
+ala2tór
+a2l1attak
+1a2latti
+ala2t1ü2
+al1ava
+ala2zúr
+1a2láa
+1a2láá
+alába2d
+alá2b1ada
+al1ábrá
+1a2lábúj
+alá2dal
+alá2d1ap
+1a2láf
+a2l1ág.
+a2lága
+al1á2gá
+al1ágb
+a2l1ágg
+al1ágh
al1á2gi
al1ágk
+al1ágn
al1á2go
-1aláí
-2alán
-a2láp
+a2l1ágr
+al1ágt
+al1á2gú
+al1ágya
+1a2láí
+1a2lámo
+a2l1árad
+a2lárak
+a2lárá
+alá2rár
+a2l1árk
+aláste2
+alás2tel
+alás2t1ér.
+a2l1átd
+a2láte
+a2láté
+al1átép
+a2l1átf
+alá2ti
+a2l1átl
+a2l1átm
+a2látö
+a2látr
+a2látú
+al1bl
+al1br
+1album
+al1d2r
a2le.
-al1eln
-al1elt
-al1eml
-al1eny
-al1e2rő
-al1esp
-a2l1est
-ale2sz
-al1ez
-a2léb
-a2l1é2ne
-al1érz
-a2l1é2te
-1alfö
-alg2
+2alea
+2aleb
+al1ebé
+2alec
+al1ece
+ale2g1e2lé
+al1egés
+alegész1
+al1egys
+a2legyü
+2aleh
+2aleí2
+2alej
+ale2k1a
+a2l1ela
+a2l1elág
+a2l1eld
+al1e2led
+ale2lem.
+ale2lemb
+ale2leme
+ale2lemk
+ale2lemm
+ale2lemt
+a2l1elg
+a2l1elh
+al1elm
+a2l1eln
+ale2lők
+ale2lőt
+a2l1elr
+a2l1els
+al1elté
+a2l1elv
+2alem
+a2l1emb
+a2l1e2mel
+al1e2mé
+a2l1eml
+2alen
+a2l1ene
+2alep
+ale2pe.
+a2lerd
+a2l1e2re
+a2l1erk
+a2l1ern
+2ales
+al1esem
+a2lesi
+ale2sik
+ale2tet
+alet2t1est
+aleü2
+2alev
+ale2vol
+ale2vői
+2alex
+a2l1exp
+2aléc
+2alég
+al1égő
+alé2kal
+alé2k1an
+alé2kat
+alé2k1em
+alé2ker
+alé2kes
+alé2kor
+a2lél.
+al1é2len
+a2l1é2let
+a2l1élé
+a2l1éll
+al1é2lő
+a2l1élü
+2alén
+a2léneke
+a2l1érd
+al1érs
+a2l1érte
+a2l1érté
+a2l1értő
+a2l1érz
+2alét
+alé2tek
+a2l1é2tel
+al1étl
+a2l1évi
+1alfás
+1algásat
+1algor
al1gr
-al1ido
-a2l1ikr
+2alic
+al1ide
+a2lidé
+al1i2do
+al1ifj
+a2l1igé
+2alik
+al1ill
+2alim
+a2l1i2má
+a2linas
+ali2nin
alió2ra
+al1i2pa
a2l1irá
-al1isk
-al1isp
-al1itt
-al1í2rá
+a2l1iro
+a2l1i2si
+a2lism
+ali1s2po
+al1iste
+2alite
+al1izma
+al1íj
+a2l1í2v
+alja2iké
+1aljaka
+1aljakb
+1aljaké
+1aljakk
+1aljako
+1aljas
+1aljái
+alj1árna
+al2j1á2ro
1aljb
-1alji
+1aljc
+1aljd
+1aljer
+1aljf
+1aljg
+1aljh
+1aljia
+al2jí
+1aljj
+1aljk
+1aljl
+1aljm
1aljn
+1aljr
+1aljs
+1aljt
+1aljú
+1al2jü
+1aljv
1aljz
+al2k1a2pó
+alkele2
+1alkím
+1alkoh
+1alkotá
+1alkotm
+1alkotó
+al1kre
+al1kro
+1alku.
+1alkud
+1alkun
al2l1aj
+al2l1akt
+al2l1akv
+alla2l
+al2l1ala
+al2lalk
+al2lau
+all1áll
+all1ázs
+al2led
+all1egy
+all1emb
+1allerg
+all1ese
+all1est
+all1e2vő
+all1é2jé
+al2l1id
+al2lim
+all1int
+al2lip
+al2l1isk
+al2lí
+all1óri
+al2lös
+al2l1ő2
+al2lü
+1allű
1almád
-1almák
-almás1s
-2alogizm
-aloi2do
-2alok
-al1ola
+2alob
+al1obe
+alogos1s
+alo2g1ó2
+a2l1okta
+al2old.
+aloma2
+alo2mad
+alo2mak
+alo2m1al
+alo2m1an
+alo2map
+alo2mar
+alo2mas
+alo2mác
+alo2már
+alo2m1át
+alo2mer
+alo2min
+alo2mis
alo2mit
-alo2m1o2k
-2alor
-alos1s
-a2l1oszt
-2alógiá
-2alógu
-alókész1
+alom1p2
+alo2m1ú
+alo2n1á
+alon1d2
+alon3n
+2alop
+al1opc
+a2l1ope
+al1o2ra
+al1orc
+al1orn
+al1o2ro
+a2l1orr
+alos3s
+a2l1ostá
+a2l1oszl
+2alov
+aló2c3se
+3alóguses
+alóigaz1
+alói2ko
+al1ó2lo
+al1ónn
+alóó2
+aló2ráj
+aló2rák
+aló2zan
+aló2zis
+a2l1öb
+a2l1ö2l
a2l1ön
+a2l1ör
a2l1ös
-al2t1el
+a2l1ö2z
+alpe2l
+alp1ele
+al2piz
+al1sh
+al1sk
+al1sl
+al1sm
+al1sp
+alsz2
+al1szt
+al2tada
+al2t1alap
+alt1anya
+alt1elv
+alt1emb
+al2t1e2p
+al2t1e2v
+al2t1é2k
+alté2n
+alt1éne
+alt1érne
+al2t1é2rő
+al2t1érr
+alt1értő
+al2t1i2m
+alti2n
+alt1ina
+alti2p
+alt1ipa
+al2t1ir
+al2t1old
+1altonk
+al2t1osz
+al2tóc
+al2tön
+al1trak
+al1tran
+al1trav
+al2tur
+al2t1út
+al2tür
+1altvé
+al1ty
+alu1p
+1a2luss
+alu1str
+a2l1új
al1úr.
+al1úrb
+al1úrh
al1úri
-al1útr
-a2l1ü2
+al1úrk
+al1úrn
+al1úrr
+a2l1úté
+a2l1úth
+a2l1útj
+a2l1útn
+a2l1útt
+al1üg
+al1ül
+al1ün
+al1ür
+al1üs
+al1üt
+al1üv
+a2l1üz
+al1űr
+al1űz
+1alveo
1alvó
+a2ly1ap
+a2lyar
a2lyál
-a2ly1e
-am1a2dó
+a2ly1e2
+a2lyév
+a2ly1id
+a2lyim
+a2lyis
+a2lyö
+a2lyug
+a2ly1ü2
+am1abb
+am1abl
+2amad
+a2m1a2dat
+am1a2dás
+a2m1adm
+a2m1a2dó
+a2m1a2du
2amag
-am1akk
-am1app
-a2m1arc
-am1arr
-ama2ter
-ama2tin
-2amá
-a2m1árj
-am2b1eg
-am2b1ő
+ama2gát
+2amaj
+am1ajt
+ama2kar
+a2m1akt
+a2m1akv
+a2m1a2lak
+am1a2lap
+a2m1a2l1e
+ama2nya
+amaó2
+2amap
+2amas
+ama2sz1a2k
+ama2szeg
+ama2sz1em
+ama2szél
+ama2szö
+ama2tad
+amata2n
+ama2tárá
+ama2tel
+ama2told
+ama2t1osz
+ama2t1ó2
+a2m1a2u
+a2mazo
+a2m1álm
+a2m1á2rai
+a2m1á2rak
+amá2rá
+amát1a2dó.
+a2m1átk
+a2m1átl
+a2m1átt
+am2b1ag
+am2bal
+am2b1at
+am2b1ászá
+am2b1e2g
+am2b1e2le
+am2bep
+am2b1e2te
+am2b1ér.
+1ambula
+am1dr
a2me.
-ame2g1á
-a2m1elá
-a2m1e2l1o
-am1els
-am1elt
+am1e2ce
+2ameg
+am1elá
+am1e2lem
+a2m1e2l1i
+am1elj
+am1elk
+a2m1eln
+a2m1elo
+a2m1e2lő
+a2m1els
+a2m1elt
+a2m1elv
+a2m1e2me
+a2m1eng
+2amenn
+amens1s
+amen2t1á2ro
a2m1erd
-1a2meri
a2m1e2rő
+a2mesk
+2amest
+a2m1e2v
+a2m1ex
+am1ezr
+amé2hes
+amé2k
+am1éké
+amé2let
+a2m1ép
a2m1érd
+a2m1értek
+a2mértel
+a2m1étk
+a2m1évé
+1amforá
am1fr
-a2mim
-a2m1i2rá
+am1gr
+amid1i2
+ami2g
+a2m1iga
+a2m1igá
+a2m1igé
+a2mimá
+am1imi
+am1imp
+ami2na.
+ami2nan
+ami2nin
+a2m1inté
+amió2
+a2m1irá
+a2m1iro
amise2
-amis3s
-am1ír
+ami2sel
+ami2sep
+ami2sz
+1amitbo
+1a2mitha
+1a2mitm
+1a2mitö
+1amitro
+1amitrú
+1a2mits
+1a2mittá
+1a2mittö
+a2míg
+am1kl
+am1kr
+amme2g
+am2m1egy
+am2meta
+am2m1é2t
2amod
+a2m1oke
+a2m1okm
+a2m1o2koz
+am1ola
+a2m1old
+a2m1oltá
+a2m1op
+a2m1ors
+1a2mort
+a2m1orv
+2amos
amos3s
-a2m1ó2r
-a2m1ö2
-a2mő
-am1őr
+2amot
+2amoz
+am1ó2ri
+am1ö2r
+am1ös
+am1öt
+am1ö2z
+am1ő2r
am1ős
-am1p2h
+am1pla
+am1p2r
+1amput
+am1sk
+am1sp
+am1sr
+am1st
+am1t2r
2amun
-2amut
-a2m1ü2
-2amű
-a2nah
-an1akk
-an1alj
-an1any
-ana2sze
+a2muni
+amu2riz
+amu1sl
+a2m1u2tas
+a2m1új
+am1üg
+am1ü2l
+am1üt
+am1üz
+2anad
+a2n1a2dat
+a2n1adu
+a2n1aga
+a2n1agá
+an1a2gya
+a2n1ah
+2anai
+1a2nakr
+ana2lap
+1analí
+an1alk
+an1alm
+1a2naló
+an1a2mo
+a2n1ana
+1a2naná
+an1ann
+an1a2ny
+2anap
+ana2pa2
+an1apa.
+a2n1apá
+a2n1a2pó
+an1appo
+an1a2rab
+an1a2rá
+a2narc
+ana2sz1e2
+ana2szén
+ana2szin
+ana2sz1í2
+ana2szó
+ana2szü
+ana2t1e
+ana2tö
+2anav
+a2n1a2va
a2n1az
-anás1s
+a2n1ág
+a2n1álmi
+a2n1á2lom
+a2n1á2p
+a2násat
+2anát
+a2n1áta
+a2n1átk
+a2n1átr
+an1br
+anca3u
+an2c1ál
+ance2
an2ce.
-ancs1es
-an2cső
-an2dolv
-an1eb
-a2ner
-a2nes
-anet1o
-ane2u
-a2n1e2z
-2ané
-ané2v
-an1évb
-an1éve
-an1évn
-an2gad
-an2g1em
+an2c1ér.
+an2c3hit
+an2cho
+anci2al
+an2c1ó2
+an2csaj
+an2csar
+ancs1ell
+ancs1emb
+an2cs1en
+ancs1e2p
+ancs1et
+an2cséré
+an2cs1ill
+an2csiz
+an2cs1í2z
+an2cs1or
+an2csö
+ancső2
+ancs1t
+an2csut
+an2cs1ü
+an2d1alk
+anda1s
+and1atl
+and1e2le
+and1elk
+an2d1elő
+and1els
+an2derd
+an2d1es
+1andez
+an2dél
+an2dil
+an2d1ö
+an2d1ő2
+an2dús
+an2dün
+an2dű
+an1dy
+an2dzá
+a2n1eb
+an1edd
+an1e2gé
+1a2nekd
+ane2la
+ane2l1á
+ane2l1e2l
+ane2l1emb
+ane2lél
+ane2lő
+2anem
+an1emu
+an1e2re
+an1ern
+an1err
+2aneu
+2anev
+a2n1ex
+ane2z
+an1ez.
+a2n1eze
+an1ezé
+an1ezt
+an1ezz
+a2n1é2ké
+a2n1éle
+an1épí
+a2n1éri
+a2n1érv
+a2n1étk
+a2n1étt
+a2n1évc
+an1évem
+an1éves
+an1évet
+ané2véb
+ané2vén
+ané2vét
+ané2vév
+an1évha
+ané2vig
+an1évke
+an1évkö
+a2n1évü
+a2névz
+anfé2l1é2v
+an1fl
+an1f2r
+anga2d
+an2g1ada
+an2g1ado
+an2g1ala
+an2g1a2ra
+an2g1ass
+ang1azo
+an2g1ác
+an2g1áll
+angár1a2d
+ang1áta
+an2g1átj
+an2g1átt
+an2g1ed
+an2g1eg
+an2g1elf
+an2g1elh
+an2g1elj
+an2g1ell
+an2g1eln
+an2g1elő
+an2g1elt
+an2g1elv
+an2gem
+ang1emb
+ang1eng
+an2g1e2r
+ang1ese
+ang1éle
+ang1élv
+an2g1é2ne
+an2g1ér.
+ang1érő
+an2g1és
+an2gim
+an2giz
an2gí
-an2g1or
an2g1osz
+an2g1óri
+an2g1öl
an2g1ös
-1anim
+an2g1ő2
+ang1sz
+an2gü
+an2gű
+angye2
+angy1el
+an2gyék
+an1ide
+ani2g
+a2n1iga
+a2n1igé
+a2n1i2ko
+an1ind
+a2n1inf
+an1i2on
+2anip
+a2n1i2pa
+an1i2rá
+a2n1iro
+a2n1isi
+a2n1isk
+a2n1ism
+a2nita
+an1itt
+a2n1íg
+a2n1íj
+2anív
+a2n1íz
+ank1abl
+an2kaj
an2k1a2k
-ank1ala
-an2kau
-an2k1el
-an2k1ék.
-ank1osz
-an2k1u2
-an2kü
-ano1g2
-an1old
-an1onn
-an1ott
-an1órá
-2anö
-an1ö2t
-ansz1ál
-an2sz1u2
-an2tau
-a2nü
-any1ala
-1a2nyád
-a2nyám.
-a2ny1á2rak
+ank1ale
+an2k1a2n
+ank1arc
+ank1ari
+an2k1atl
+an2k1au
+an2kaz
+an2k1ál
+an2k1e2g
+an2k1ek
+an2k1e2l
+an2k1e2m
+an2k1e2reit
+an2k1erj
+an2k1es
+ank1érde
+ank1érem
+an2kérte
+an2k1érté
+an2k1i2d
+an2k1i2p
+an1klu
+an2k1old
+ank1oszt
+an2k1ö2römb
+an2kös
+an2k1ö2v
+an2kőr
+ank1t2
+an2k1ü
+an2ne.
+an3ny.
+an3nye
+an3nyo
+a2n1oj
+a2n1okta
+a2n1old
+1a2nomá
+2anor
+a2n1o2ro
+a2n1orr
+a2n1ors
+2anos
+a2n1ott
+a2nódd
+a2nódo
+anó1g2
+a2n1óni
+a2n1óno
+a2n1ó2rá
+an1óri
+a2n1öl
+a2n1ön
+a2n1ör
+a2n1ös
+a2n1ö2t
+an1pl
+an1pr
+an2s1e2l
+an1ska
+an2sö
+an1s2p
+ans3sze
+an1sta
+an2szal
+an2sz1á2bó
+an2sz1á2h
+an2szár
+ansz1es
+an2szél
+an2sz1én
+an2sz1é2p
+an2szil
+an2szin
+an2szó
+ansz1t2
+ansz1ü2l
+an2t1abl
+ant1aga
+an2t1eg
+1anten
+an2t1e2se
+ant1esz
+anti1llát
+an2t1ing
+an1t2re
+a2n1ud
+a2n1ug
+a2n1uj
+2anuk
+a2n1u2r
+anu2szi
+a2n1u2t
+a2n1úg
+an1ü2g
+anü2l
+a2n1ülő
+an1ü2z
+an1űr
+an1űz
+any1a2dó
+anyag1ár.
+anyag1árr
+1anyagb
+1a2nyagé
+anyag1g
+1anyagh
+1anyagk
+1anyagm
+1anyagr
+1anyagt
+1anyagú
+a2nyakad
+a2ny1a2kas
+a2ny1alk
+a2ny1all
+a2ny1ass
+any1aszt
+a2ny1a2tom
+a2nyaz
+1anyádt
+1anyáék
+any1álo
+a2ny1árá
+a2ny1árb
+a2ny1árf
+any1árk
+a2ny1árn
+a2ny1á2ro
+a2ny1árr
+any1á2sz
+any1d
2anye
+a2ny1e2c
a2ny1ed
+a2nyeg
+any1egé
+any1egy
+a2ny1e2k
+a2nyela
+anye2leme
+any1elev
+a2ny1ell
+a2ny1elo
a2ny1em
-any1eső
-anyé2
-any1éh
-any1ék
-any1ér
-a2nyif
-a2nyig
+a2ny1en
+any1e2re.
+any1e2rei
+any1e2ret
+any1e2rén
+any1e2rér
+any1e2rét
+any1e2rév
+any1e2rőm
+any1e2rőr
+any1e2rőt
+a2ny1ég
+a2nyéhe
+a2ny1é2j
+a2ny1ék
+any1élv
+a2ny1ér.
+a2ny1érb
+a2ny1érc
+a2ny1érd
+a2ny1ére
+a2ny1érg
+a2ny1érh
+a2ny1é2ri
+a2ny1érk
+a2ny1érm
+a2ny1érn
+a2nyérő
+a2ny1érp
+a2ny1érr
+a2ny1érs
+a2ny1érte
+a2nyérté
+a2ny1értő
+a2ny1érv
+a2nyéve
+a2nyévé
+anyha2j1ón
+anyha2j1ó2r
+2anyi
anyigaz1
-a2nyim
+any1ing
+a2ny1io
+2anyí
2anyo
-a2nyor
-a2ny1osz
-any1ó2r
-a2nyö
-a2nyő
-anzo2
-2a1o
+any1old
+a2ny1o2r
+any1órá
+any1ök
+any1ö2r
+any1öz
+a2ny1ő2
+any1s
+anyt2
+any1tr
+a2nyur
+2anyú
+2anyü
+any1ül
+a1o
+ao2áz
+ao2be
+ao2cs
+ao2da
+ao2dú
+ao2ka
+ao2ká
ao2la
-a2olo
+aolaja2d
+aola2j1ada
+ao2mo
+ao2pá
+ao2pe
+ao2ra
ao2ro
-2a1ó
-a2ób
-a2óc
-a2óf
-aó2l
-aó2ra
+ao2so
+ao2ut
+ao2ve
+ao2vi
+ao2xi
+a1ó
+aóá2r
+a2óbar
+a2óbá
+a2óbi
+a2óbo
+aó2ce
+aó2dá
+a2ódi
+a2ófá
+a2ófe
+a2ófo
+a2ófő
+a2ófü
+a2óhé
+a2óhi
+a2óhü
+a2óil
+a2óis
+a2ói2v
+a2óká
+a2óke
+aó1kré
+a2óku
+aó2la
+a2óle
+a2ólé
+a2óli
+aó2lo
+aó2lu
+a2ómag
+a2ómar
+a2ómas
+a2óme
+a2ómi
+a2ómo
+a2óné
+a2ónö
+a2ónő
aó2rá
+a2óré
aó2ri
-2a1ö2
-2a1ő2
+a2ósí
+a2ósű
+a2óta
+a2óte
+a2óté
+aó2vo
+aó2vó
+a1ö
+aö2bö
+aö2cs
+aö2dé
+aö2ko
+aö2kö
+aö2le
+aö2lé
+aö2lő
+aö2ná
+aö2rö
+aö2ve
+aö2vi
+aö2vö
+aö2zö
+a1ő
+aő2re
+aő2ré
+aő2ri
+aő2rö
+aő2rü
+aő2se
+aő2sö
+aő2sz
+apa2cs1a2v
apa2cs1i
-ap1a2da
-1a2pai
-1a2paké
-ap1a2la
-ap1alk
-apa2tér
-1a2pád
-1a2páé
-a2p1ág
-1a2pái
-a2páll
+a2p1a2da
+a2p1aga
+a2p1ajá
+a2p1akc
+2apal
+apa2lag
+apa2lak
+a2p1alb
+a2p1alj
+a2p1alt
+apa2mas
+a2p1ant
+2apap
+apa2pán
+ap1a2rán
+1apasá
+a2p1asp
+apa2tad
+apa2t1ala
+apata2n
+apa2t1as
+apa2tál
+apa2t1ö
+ap1aut
+2apav
+a2pava
+ap1a2zo
+a2pájú
+ap1állap
+a2p1állá
+a2p1állo
+apán1n
+a2p1á2rad
+ap1á2rai
+a2p1á2rak
+ap1á2ram
+ap1á2ras
+ap1á2rat
+apá2ráé
+apá2ráh
+apá2rán
+apá2rár
+apá2ráv
+apárba2
+a2p1áre
+a2p1á2ré
+a2p1árf
+ap1árka
+ap1árko
+a2p1árny
+ap1ártó
a2p1áru
-a2páta
-2ape
+a2p1á2rú
+apáská2
+apá2túr
+1a2páu
+ap1bl
+ap1dr
+a2pe.
+ap1e2dé
a2p1e2g
-ape2i
-ape2l
-ap1ele
+ap1e2l1a
+ap1elb
+ap1e2lé
+a2p1elf
ap1elg
+a2p1elh
ap1elj
-ap1elő
-ap1elv
-a2p1em
-ape2n
+ap1elk
+a2pell
+ap1elm
+ap1eln
+ap1elo
+ap1e2lő
+ap1elr
+a2p1elt
+a2p1elv
+ape2m
+ap1emb
+ap1eme
ap1ene
-ap1eny
+ap1eni
+ap1e2ny
+ap1e2rő
ape2s
ap1ese
-ap1f2
+ap1esé
+ap1eső
+a2p1e2v
+a2p1ex
+a2p1é2he
+a2p1éje
+a2p1é2le
+a2p1éll
+ap1élm
+a2p1é2ne
+ap1épü
+a2p1ér.
+ap1észl
+a2p1éte
+a2p1éve
+ap1fl
+ap1f2r
+ap1gr
a2p1ide
-api2g
-ap1ige
+a2pidé
+apigaz1
+ap1i2ko
+ap1ikr
+a2p1i2nár
+ap1ind
+ap1inj
+a2p1ins
+ap1i2rat
a2p1i2rá
-a2p1ist
+a2p1irk
+a2p1ism
+a2p1íg
a2p1ín
-2apl
-a2p1ola
+a2píté
+ap1ív
+a2p1íz
+ap1kl
+ap1kr
+ap1kv
+ap2laz
+ap2léd
+apmeg1
+apmű1
+apműt2
+a2p1ob
+ap1o2laj
+ap1oltár
+ap1opc
ap1ope
-apos3s
-ap1ös
-ap1öt
-ap2rém
-a1p2rés
-1aprí
-ap1szt
-ap1t2
-ap1udv
-ap1utá
-ar1ajt
-ara2nye
-ar1ará
+ap1opt
+apo2rad
+ap1orcá
+ap1orsó
+apor2t1ő2
+apo2t1ál
+a2p1ov
+1a2póká
+ap1ólo
+ap1óri
+a2p1öb
+ap1öl
+ap1ön
+ap1örv
+a2p1ös
+ap1öv
+a2p1ö2z
+ap1ő2r
+1appará
+ap2p1árn
+ap1ph
+app1ing
+ap1pla
+ap1pri
+ap1pró
+ap1p2s
+ap1py
+ap2res
+ap2réd
+a1p2rém
+ap2rés.
+a1p2rím
+2apro
+ap2roc
+a1p2rod
+1apród
+1aprózó
+ap2s1i2kon
+ap2síz
+aps1ork
+apsz1ert
+ap1szf
+apsz2t
+aptára2d
+aptá2r1ada
+ap1t2r
+apuá2
+a2p1udv
+apu1p2
+apus3s
+a2p1u2tas
+a2p1után
+a2putc
+a2p1új
+a2p1üd
+a2p1üg
+a2p1ü2l
+a2p1ün
+a2p1üt
+a2p1üv
+a2p1üz
+ap1űr
+ap1wh
+ara2b1ár
+ara2b1í2
+ar1abla
+2arad
+ar1a2data
+ar1a2dato
+ar1a2datr
+2arag
+ara2g1e
+2araj
+ar1ajkáró
+2arak
+a2r1a2kol
+ara2kóh
+ara2kói
+ara2kós
+ara2kót
+a2r1akt.
+ar1alk
+a2r1alm
+a2r1ana
+1a2rann
+arany1a2gá
+ara2nyal
+1aranyb
+1aranyh
+ara2nyí
+1aranyk
+1aranyn
+1aranyr
+1aranys
+ara2pa.
+ar1arc
+1arasz.
+arasz2t1e
+ar1aszú
+ara2tal
+ara2tel
+ara2tin
+ara2t1ő2
+aratű2
+ara2tűr
+ar1aul
+aravasz1
+1a2raw
+ara2zon
+2arác
+a2r1ác.
+a2r1á2csi
+a2rácsom
a2r1ág.
-a2r1á2ga
+a2r1á2ga.
+a2r1á2gai
+a2r1á2gak
+a2rágan
+a2r1á2gat
ará2gáb
+ará2gáh
ará2gán
ará2gár
ará2gát
ará2gáv
a2r1ágb
+a2r1áge
+a2r1á2gé
+a2r1ágf
a2r1ágg
-a2r1ági
-a2r1á2go
+a2r1ágh
+a2r1á2gi
+a2r1ágk
+a2r1ágl
+ará2gon
a2r1ágr
+a2r1ágs
a2r1ágt
-ar1á2guk
-ar1á2gun
-ar1á2gy
-a2r1áll
-ará2nyé
+a2r1á2guk
+a2r1á2gun
+a2r1á2gú
+a2r1á2gy
+ar1álc
+a2r1állá
+a2r1állo
+2arám
+ará2m1e2
+ará2nye
+a2r1á2rak
+a2r1á2rá
+a2r1árk
+a2r1árr
+ar1á2ru
+ar1árú
+ar1árv
+ará2sze
+a2r1á2szoki
+ará2tal
+ará2t1ö
+aráz4s
+ará2zsál
+arázsi2
+arázs3z
+ar2c1a2d
+arc1agy
+arc1ala
+arca2n
+arc1any
ar2car
-ar2ced
-ar2ces
-ar2cö
-arc3sor
-1arcú
-ar2dél
-2are
-ar1e2dz
-are2l
+ar2cat
+ar2ceg
+ar2c1es
+ar2cev
+ar2c1é2h
+arc1él.
+arc1élb
+arc1éll
+arc1élt
+ar2c1é2n
+ar2cés
+1archí
+arc1ing
+ar2c1int
+ar2ciz
+arcolás1s
+ar2có
+ar2cő
+arcs1ala
+ar2csál
+arc3sere
+ar2csip
+ar2c3sor
+ar2cü
+ar2cű
+ard1acé
+ar2d1alj
+ar2d1áll
+arde2l
+ard1ele
+ard1elő
+ard1elt
+ar2d1e2m
+ar2d1é2l
+ar2d1ina
+ar2d1ing
+ar2dor
+ar2dö
+ar2d1ur
+ar2dü
+a2r1e2dz
+ar1egés
+a2r1e2gy
+are2i
+areil2
+a2r1e2le
ar1elh
-ar1elo
-a2r1e2m
-aren2d1ő
-a2r1er
-a2r1e2v
-ar1é2ne
-a2r1é2r
-aré2z1
-ar1gh
-argon1n
-a2r1i2d
-a2r1iga
-ar1ingb
-a2r1inge
-a2rizma.
-a2rizmán
-a2rizo
-ar1khe
-ar2k1ő2
+ar1elm
+ar1eln
+ar1elr
+ar1elt
+ar1elü
+ar1elű
+ar1elv
+a2r1emb
+ar1emel
+ar1e2més
+a2remu
+a2r1e2r
+ar1e2se
+ar1e2ső
+a2r1eszek
+a2r1eszé
+a2r1eszü
+ar1etű
+ar1e2ve
+ar1e2vé
+a2rew
+aréé2
+ar1ég.
+ar1é2ge
+aré2k1a2l
+aré2kek
+ar1él.
+ar1élt
+2arém
+aré2nek
+aré1p
+a2r1épü
+a2r1é2ri
+a2r1érő
+ar1észj
+aré1sz2tá
+aré1tra
+ar1f2r
+ar1gha
+2ari.
+2aria
+ar1i2de
+a2ridé
+a2r1i2ga
+a2rimád
+ar1i2mi
+a2r1i2na.
+a2r1i2naké
+a2r1i2nas
+a2r1i2nat
+a2r1i2náb
+a2r1i2náh
+a2r1i2nán
+a2r1i2nár
+a2r1i2nát
+a2r1i2náv
+a2r1ingé
+ari2nit
+arink2
+a2r1inté
+ari2nü
+ar1i2ono
+a2r1i2ón
+2arip
+a2r1isp
+a2r1iste
+ari1szf
+2ariz
+ari2zom
+ar1í2té
+ar2j1áz
+ar2j1er
+arkas3s
+arká2p
+arká2s
+ar2k1eg
+ark1elá
+ar2kéj
+ar2képü
+ar2k1érd
+ar2k1in.
+ar2k1i2ont
+ar2kiz
+ar2k1orm
+ar2k1ovi
+ar2kud
ar2k1u2s
-2aro
-arog2r
+ar2les
+ar2m1a2gy
+arma2te
+arm1áll
+ar2me.
+ar2meo
+arme2s
+arm1ing
+ar2m1is
+ar2m1osz
+ar2m1ö
+ar2mü
+arnis3s
+aro2k1á2
+aro2k1e
+aro2kin
+a2r1olda
+1a2romát
aro2mis
-a2r1or
-2aró
-a2r1ó2rá
+a2r1opt
+ar1org
+ar1o2ro
+ar1ors
+a2r1ovi
+aró1p
+a2r1ó2rak
+a2r1ó2ráj
+a2r1ó2rám
+aró2s3zár
+aró2vár
+ar1ózd
+a2r1ö2b
+a2r1ök
a2r1ö2l
-a2r1ő2
-ar1s2h
-ar1thá
-arto1g2rá
-art1old
-ar2t1ő2r
-ar1ty
-2aru
-a2r1ü
-a2r1ű2
-ar2v1ér
-a1ry
-a2s1a2g
+ar1öng
+a2r1ör
+a2r1ös
+a2r1ö2z
+ar1őr
+ar1ős
+ar1pl
+ar1pr
+ar1ry
+ar1ska
+ar1srá
+ar1sta
+ar1sto
+ar1str
+2art.
+art1abl
+ar2t1a2lap
+arta2n1á2s
+art1aszt
+ar2t1a2u
+ar2t1álla
+ar2t1e2g
+art1e2lő
+art1emb
+art1e2rei
+ar2tég
+ar2t1é2l
+ar2t1érp
+ar2t1i2na.
+ar2t1i2nát
+ar2t1i2náv
+art1orz
+ar2t1ö2v
+ar2t1ut
+artvis1s
+ar1ty2
+a2r1uml
+a2runi
+aru2tas
+a2r1új
+a2r1úsz
+ar1útj
+ar1útr
+a2r1üt
+ar1üz
+ar1ű2z
+ar2vala
+arvas1s
+arv1ágy
+ar2v1árh
+ar2v1á2ri
+2asabl
+as1abr
+a2sadag
+asag2
+as1aga
+as1agg
+as1a2gy
2asaj
-as1a2kar
+a2s1a2kar
2asal
+as1alab
+a2s1a2lap
+as1alf
+a2s1alján
+a2s1alji
a2s1alk
as1alm
-asa2n
+a2s1anó
a2s1ant
-a2s1any
+a2s1a2ny
+2asap
as1apr
-a2s1ál
-as1áru
+2asar
+as1aran
+a2s1a2rá
+asa2t1ó2
+as1a2ty
+2asav
+asa2vo
+a2s1á2c
+asá2g1ikr
+as1áll
+2asám
+a2s1árnak
+a2s1á2ro
+a2s1árr
+a2s1árt
+a2s1á2ru
+asás1s
+as1ásvá
+as1áth
+2asáto
2asáv
-2ase
-as1e2d
-as1e2k
+as1bl
+as1d2r
+a2s1e2d
+as1ege
+a2s1e2gy
+ase2k
+as1eke
+as1eké
as1ell
-as1emb
-as1e2s
-as1ez
-as1éhe
-as1ék.
+a2s1emb
+a2s1e2n
+a2serd
+as1e2ré
+as1erő
+a2s1es
+ase2t
+as1eti
+a2s1ez
+a2s1éhe
+a2s1éke
a2s1é2l
+2asém
+a2s1ép
+2asér
+a2s1ér.
+as1érb
+as1érc
+a2s1érd
+asé1s2
as1étv
-a2s1é2v
-asi2d
+as1é2ve
+as1fr
+as1gl
+as1gr
as1ide
-a2s1i2p
-as1isk
-as1izo
+as1ido
+as1i2ga
+as1i2gá
+as1inj
+a2s1i2o
+2asiv
+as1izé
+as1i2zo
+a2s1íj
2asík
-as1old
+2asín
+2asír
+asírta2
+asír2tal
+a2s1í2v
+as1ízü
+2aská
+as1kl
+asko2s1a2rá
+asko2s1á
+as2koz
+as1k2r
+as2luk
+as2már
+2asodr
+a2s1of
+as1okke
+as1okl
+as1okos
+2asoks
+as1okta
+asom1or
+aso2né
2asor
-as1ord
+a2s1ord
+a2s1orm
as1osz
-as1órá
-as1ö2k
-as1ön
-as1ös
-2asp
-as1sy
-as3szab
+a2s1ox
+asó1p2
+as1ó2rá
+a2s1ö2k
+a2s1ö2l
+as1örd
+as1örv
+a2s1ös
+as1ö2ve
+as1őr
+as1p2l
+as2pot
+asp2r
+a1s2pu
+as1s2p
+as3szabá
+as3szin
+asszí2ve
+assz1íve.
+assz1ívek
+assz1ívne
+1asszoc
+1asszony
+as3szü
+as3szű
+2asta
+a1stand
+2astá
+a1s2tád
+2asti
astil2
+as2tim
2astí
+2asto
+as2top
+2astr
+as1trag
+as1trav
+a1st2ru
+2astú
+a2s1ud
+2asug
+a2s1uj
+2asuly
+asu2r
+as1ura
as1urn
-a2s1u2t
+a2s1u2sz
+as1u2tak
+a2s1u2tas
+a2s1u2tá
+as1u2tu
+a2s1ú2s
a2s1ú2t
-2asü
-as1ün
-a2s1ür
-as1üs
-a2s1ü2v
-2asű
-a2sz1ad
-asz1ág.
-a2szárad
+asút1a2
+a2s1üd
+a2s1ü2lő
+as1üst
+a2s1üz
+as1űz
+2aszab
+a2sz1a2d
+2aszak
+a2sz1akc
+asza2k1e
+a2sz1akt
+asza2k1ü
+a2sz1alk
+1aszaló
+asz1asp
+asz1ass
+asza2t1a2
+asza2t1e
+a2szath
+a2szati
+2aszav
+a2sz1ág.
+asz1á2ga
+asz1á2gá
+asz1ágb
+asz1ágg
+asz1á2gi
+asz1ágk
+asz1á2go
+asz1ágr
+asz1ágt
+a2szálc
+a2szálm
+2aszám
+aszá2rada
+a2száram
+asz1árnyé
+a2szárp
+a2száta
+a2száth
+asz1átl
+a2sz1á2to
+asz1áts
+2aszed
2aszeg
+aszegész1
+asz1eh
2aszek
-asz1e2lő
-a2sz1év
-a2szid
-2aszkó
-asz2kóp
+2aszel
+asz1e2lem
+asz1elj
+2aszemc
+2aszeme
+2aszemé
+2aszemp
+a2szemu
+2aszemü
+2aszemű
+2aszen
+a2sz1eng
+asz1e2pi
+2aszer.
+2aszere
+a2sz1erej
+2aszeré
+2aszerk
+2aszern
+a2sz1ero
+a2szerő
+2aszerr
+2aszers
+2aszert
+2aszerv
+2aszerz
+asze2s
+a2sz1ese
+asz1est
+2aszez
+2aszék
+aszé2k1el
+asz1é2let
+asz1élés
+aszé2n1ég
+aszén1n
+a2sz1é2re
+asz1éré
+2aszét
+asz2fér
+a2sz1ill
+2aszin
+a2sz1inf
+asz1ing
+2aszir
+a2sz1ism
+asz1ist
+2asziv
+a2sz1iz
+2aszí
+a2sz1ír
+asz1í2vi
+asz2karc
+asz2k1áp
+asz2kell
+asz2kes
+2aszob
+2aszoc
+2aszof
+aszon1n
+aszo2n1o
+a2sz1orr
asz1ors
-asz1ön
+a2sz1osz
+1aszóa
+asz1ó2dá
+2aszót
+2aszök
+asz1ölt
+a2sz1ön
+2aször
+asz1öss
+a2szöt
+2aszöv
+2asző
+aszőlőé2
+asz3su
+asz2tab
+asz2t1apo
+asz2tác
+asz2táll
+asz2t1emb
+asz2téne
asz2t1és
-asz2t1ív
+asz2t1ing
+asz2t1olt
+asz2t1oro
+asz2t1orr
+asz2tors
+asz2t1osz
+asz2töv
+asz2tős
+asz2t1ül
+asztvíz1
+2aszur
+1aszús
+asz1útr
2aszü
-1aszz
-at1abl
+aszü2g
+asz1ügg
+a2sz1ü2z
+2aszű
+asz2vit
+asz1z
+2atab
+at1abla
+a2t1a2cé
+ata2dat
+at1a2dó
+2atag
+a2t1agya
+a2taján
2atak
+a2t1akara
+ata2kár
+ata2kel
+ata2k1é2pes
+ata2k1ö2v
+a2t1aktu
+at1a2lag
+ata2lap.
+ata2lapb
+ata2lapj
+ata2lapo
+ata2lapp
+ata2lapr
+ata2lapú
+ata2lat
+a2t1aleg
+ata2lik
+a2t1alle
+a2t1almás
2atan
+a2t1anal
+ata2nó
+at1a2nyag
+at1a2nyás
+2atap
+at1app
+ata2puk
+ata2pun
2atar
-ata2rán
-a2t1arc
-ata2tom
-a2t1ág
+a2t1a2rab
+ata2ran
+a2t1a2rén
+ata1st
+atau2r
+a2t1a2ut
+a2t1azo
+2atáb
+at1ábr
+2atág
+at1ág.
+a2t1á2ga
+at1ágr
+2atáj
2atál
+a2t1állá
+a2t1álló
+a2t1álm
+2atám
atá2nal
+a2t1á2pol
2atár
-a2t1á2ram
+atá2rada
+atá2rado
+atá2ramh
+a2táramk
+atá2ramn
+atá2r1az
+atá2rét
+atá2ris
+at1árkár
+atársá2g
+atár2s1ágá
+at1ártás
+2atás
+atá2s1á2g
+atá2sz
+atá2tal
+atátá2
+atá2tár
+a2t1átb
+a2t1átf
+a2t1áth
+a2t1áti
+a2t1átj
+a2t1átk
a2t1átl
+a2t1átr
+a2t1áts
+a2t1átt
+a2t1átu
a2t1átv
-atá2v1i2
-atá2v1í2
-2ate
-a2t1ef
+2atáv
+at1bl
+at1br
+at1cl
+at1dr
at1e2gé
-at1e2gye
-ate2led
+ate2jel
+ateké2r
+ate2kére
+ate2kó
+a2t1e2l1a
+a2t1elb
+at1elc
+a2t1eld
+at1e2led
+at1eleg
at1e2lem
-at1elh
-at1elm
-at1elv
-at1elz
-at1emb
-at1eml
+at1e2l1en
+a2t1elf
+a2t1elh
+at1eljá
+at1elkö
+at1elkü
+a2t1elm
+at1eln
+a2t1e2lo
+at1e2lőn
+ate2lőt
+a2t1elr
+a2t1els
+at1elta
+at1eltá
+at1elté
+at1eltü
+a2t1elu
+a2t1elű
+a2t1elv
+a2t1elz
+a2t1emb
+at1e2mel
+a2t1emé
+a2t1eml
+a2t1emó
+a2t1enc
+a2t1ene
+at1epi
at1epo
-at1e2tet
-at1e2ve
+a2t1erd
+at1e2rec
+ate2r1ék
+a2t1erő
+a2t1e2se
+a2t1esé
+a2tesk
+ates2t1á
+ates2tő
+at1eszm
+at1eszű
+ate2tol
a2t1e2z
-2até
-at1éhe
+2atég
+até2get
+a2t1éhe
+até2k1a2l
+até2ke2
+a2t1éke.
+aték1el
+2atél
a2t1é2le
-a2t1ép
+a2t1é2lé
+a2t1élm
+a2t1élv
+2atém
+até2ne
+a2t1éps
+2atér
+até2rá
+a2t1érdek
+a2t1érin
+a2t1érl
+a2t1érm
+a2t1értel
+at1érvek
a2t1érz
-at1év.
-2at1f2
-at2hé
-at2hón
-atig2
-a2t1iga
-at1i2gé
-a2t1inf
-ati2nó
-at1iro
+at1észa
+at1észl
+2atét
+até2tét
+a2t1étv
+at1fj
+at1fl
+at1fr
+at1gl
+at1gr
+a1t2hus
+2ati.
+a2t1iat
+a2t1i2de
+a2t1ido
+ati2g
+a2t1ige
+a2t1igé
+a2t1igy
+a2till
+at1ille
+at1i2má
+at2i3mádá
+at1i2mi
+a2t1imp
+2atin
+a2t1ing.
+a2t1inga
+a2t1ingb
+a2t1inge
+atinó2
+ati2n1ór
+at1inté
+at1into
+2atip
+a2t1i2pa
+2atir
+a2t1irá
+a2t1iro
+2atis
a2t1isk
-2atn
-a2t1ob
-ato1g2
-ato2me
-at1opt
+a2t1ism
+ati2sz
+a2t1iszo
+2atit
+a2t1i2ta
+a2t1izé
+a2t1izg
+a2tizmo
+a2t1i2zo
+a2t1íg
+a2t1íj
+2atíp
+2atír
+a2t1í2t
+at1í2vek
+atív1e2l
+at1í2vet
+atí2vét
+a2t1íz
+2atki
+2at1kl
+2atko
+2atkö
+2atku
+at1kv
+at1ojt
+atoka2
+a2t1o2k1al
+ato2koss
+a2t1o2koz
+a2t1okta
+a2t1o2ku
+at1oldá
+a2t1oldó
+ato2m1á
+1atombe
+ato2mer
+1a2tomj
+a2toml
+1a2tomok
+1a2tomos
+1a2toms
+1atomú
+at1opc
+at1ope
+a2t1opt
2ator
-at1orsz
+ato2rál
+a2t1ord
+a2t1org
+ato2rú
a2t1orv
+a2t1orzá
atos3s
-atosz2
-ato1szf
-2ató
-a2t1ó2rá
+ato1sz2f
+a2t1oszl
+ató1p2
+a2t1ó2rák
+ató2rán
ató2riá
+ató1stá
ató1sz
-2atö
+ató2s3zár
+ató2s3zené
+ató1tr
+at1öko
+atö2l
+a2t1öle
+a2t1ölé
+a2t1ölő
+at1öná
+atön2k1a
+at1ö2röm
a2t1ös
-at1ö2ve
-at1ö2vö
+a2t1öt
+atö2vi.
+a2t1ö2z
+atő2ra
+at1őrl
+a2t1ő2s
+atpen1
+at1pl
+at1pr
+at1ps
+atrac1c
+a1t2rad
+2atraj
+2atrak
+at2ramb
+a1trap
+a1trau
+a1t2rav
+2atré
+a1t2réf
+at2rén
+atré2szel
+a1t2ril
+at2roj
+a1t2róg
+2atrón
+a1t2rü
at2sán
+at1sh
+at1sk
+at1sl
+at1sp
+at1st
+at1s2v
+atszá2m1é
+atszáraz1
+att1adó
+1attakok
+1attasé
+at2t1e2g
+at2tez
+att1ing
attó2
-at2tór
-at1tre
-at1tré
-2atu
-a2t1uj
-1atyj
-a1tyl
-2atz
+at2t1ór
+at1t2re
+2atud
+a2t1udv
+a2t1ug
+2atul
+a2t1und
+a2tuni
+2atur
+at1utá
+at1utó
+a2t1új
+2atúl
+at1ú2sz
+a2t1üg
+2atük
+at1ü2lé
+at1ült
+2atün
+at1üst
+a2t1ü2v
+2atüz
+at1üzem
+at1űri.
+at1űrl
+2atűz
a1u
+au2b1in
+au2bor
+a2udá
au2de
au2ga
-aug2h
+a2ug2h
au2go
-au1k2r
-au1ly
-2aur
-a2us.
+1a2ukc
+aul2l
+aul2t1a
+aul2ti
+a2umae
+a2umaf
+a2umak
+a2umam
+a2umar
+a2umav
+a2umáb
+a2umád
+a2umáé
+a2umáh
+a2umái
+a2umám
+a2umán
+a2umár
+a2umáv
+au1ph
+au2rad
+au2r1ikr
+au2rö
+au2sz1e
+a2ut.
+au2tad
au2tal
-a2utó.
+au2tam
+au2tas
+au2tat
+2autá
+au2tál
+a2uti
+1a2uton
+a2utó
+1autób
+1autóé
+1autóh
+1autói
+1autóm
+1autón
+1autór
+1autós
+1autót
+1autóv
+a2utr
+a2utt
+au2tu
+au2zí
au2zs
+a2uzú
+au2z1ü
a1ú
-aú2r1
-aú2s
-2a1ü2
-a1ű2
-av1anh
-avara2n
-ava2s1as
+aú2jí
+aú2jo
+aú2ré
+aú2r1i
+aú2sz
+aú2ti
+aú2to
+a1ü
+aü2dí
+aü2dü
+aü2ge
+aü2gy
+aü2le
+aü2lé
+aü2li
+aü2lö
+aü2lő
+aü2lü
+aü2nő
+aü2re
+aü2rí
+aü2rö
+aü2rü
+aü2sz
+aü2te
+aü2té
+aü2ti
+aü2ve
+aü2vö
+aü2zem.
+aü2zemb
+aü2zemen
+aü2zemet
+aü2zemé
+aü2zemh
+aü2zemm
+aü2zemn
+aü2zemr
+aü2zen
+aü2zé
+a1ű
+aű2ri
+aű2rö
+aű2ze
+aű2zé
+aű2zi
+aű2zö
+aű2ző
+2avad
+2avak
+av1akti
+a2v1anh
+1a2vant
+a2v1a2nya
+a2vanz
+ava2rac
+ava2r1ag
+ava2r1e2
+ava2rék
ava2sze
-2avá
-2avi
+ava2szü
+1a2vatá
+1a2vató
+2avád
+avá2nan
+2avár
+avá2r1al
+avá2ria.
+avá2riai
+a2v1á2riá
+a2v1áta
+a2v1átt
+avá2zal
+av1bl
+av1e2le
+av1elv
+2aves
+av1est
+2avet
+2avez
avi2cse
-avíz1
-2ay
-a1ya
-a1yá
-a1ye
-2aza
-aza2teg
-azaú2
+av1ing
+av1kr
+a2v1old
+av1oltó
+avo1s
+a2v1ox
+a2v1öm
+a2v1ös
+av1ős
+av1őz
+av1pr
+av1sp
+av1st
+a2v1ut
+av1ü2l
+av1ür
+av1ü2z
+a2wag
+aw2hi
+awhisky2
+awhiskyk2
+a2x1ab
+a2x1ad
+a2x1ak
+a2x1al
+a2x1an
+a2x1av
+ax1bl
+ax1eg
+ax1el
+ax1inf
+ax1ing
+ax1int
+axió2r
+axi2se
+ax1ír
+ax1ös
+ax1öz
+ax1pr
+a2x1ut
+ax1új
+ax1üz
+ax1űr
+a1ye.
+a1yed
+a1yei
+a1yek
+ay1e2l
+a1yen
+a1yes
+ayet2
+ay1fl
+a1yi.
+ay1il
+ay1ing
+a1yit
+ayma2
+ay1s2t
+aza2ch
+aza2cik
+azai2ko
+azal2t1a
+aza1p2
+aza1s2
az1áll
az1ált
-azás1s
+azá2nö
+azá2r1ó2ra
+azá2s1e
+azási2k
+azá2siko
+azás3s
az2du
-2aze
+a2z1e2g
az1e2le
az1elj
+az1elm
az1elő
-aze2o
-az1év
-az1i2d
+a2z1em
+a2z1ex
+a2z1ég
+azé2k1e2
+azé2kol
+a2z1érté
+a2z1ing
+a2z1i2o
+az1irá
+az1irt
+azma1g
+a2z1ob
+2azol
+azo2nal
azo2n1á
-2azó
-az1óta
-az1p2
-az3ság
-az3st
-a2zsú
+azont2
+a2z1op
+a2z1or
+a2z1osz
+azót2
+azó1tr
+a1z2rí
+az4sé
+a2z3sike
+az3sor
+az3sp
a2z3sü
+az3sz
az1ut
-az1új
+a2z1új
+azú2r1é
+az1üz
2á.
-á1a2
-á1á2
+á1a
+áa2da
+áa2dá
+áadás1s
+áa2do
+áa2dó
+áa2du
+áa2já
+áa2ka
+áa2la
+áa2lu
+áa2ra
+áa2sz
+áa2ut
+áa2va
+á1á
+áá2cs
+áá2ga
+áá2gy
+áá2ju
+áá2mu
+áá2ra
+áá2ru
+áá2sá
+áá2sí
+áá2so
+áá2só
+áá2su
+áá2zo
+áá2zu
+á2b1adu
+áb1akc
+á2b1a2la
+á2b1alk
+á2b1ambu
+á2b1a2ny
+ába1p
+áb1art
+ába3se
+á2b1á2g
áb1áll
+áb1álm
+á2b1áp
+á2b1árá
+á2b1árn
+á2b1á2ru
+á2b1átj
+á2b1átl
+á2b1átm
+á2b1átv
+á2b1áz
áb2b1a2d
-áb2b1é2
-áb2bis
-áb2bol
-áb2bos
-áb2b1ot
-áb2bö
-áb2bú
+ábba2l
+áb2b1ala
+áb2b1and
+áb2b1ár
+áb2ben
+áb2b1e2r
+áb2b1é2l
+áb2bid
+áb2bim
+áb2b1i2s
+áb2b1ita
+ább1o2so
+ább1oss
+áb2bör
+áb2b1ül
+áb2bű
+áb1dr
+á2b1ed
+á2b1e2g
ábe2l1a
-ábe2lér
-á2b1elő
+ábe2l1á
+ábe2l1eg
+ábe2l1el
+ábe2l1e2r
+ábe2lég
+ábe2l1in
+á2belnö
á2b1e2m
á2b1e2n
-á2b1ér
+áb1e2ro
+áb1erő
+1á2béc
+á2b1é2g
+áb1é2ke
+á2b1éks
+á2b1é2les
+á2b1élt
+á2b1ép
+á2b1ér.
+á2b1é2ri
+á2b1érs
+á2b1érte
+á2b1érté
+áb1fr
+á2b1i2d
+ábi2g
+áb1iga
+áb1igé
á2b1ikr
-á2b1in
-á2b1ir
-2ábiz
+áb1illa
+á2b1im
+ábi2nai
+á2binas
+á2b1ind
+á2b1ing
+á2b1int
+á2b1is
áb1izm
áb1izz
-2ábí
-1ábrá
-2ábu
-ábu2t
-áb1utá
-áca1k2
-ác1al
-ácá2ná
-á2c1e
-ác3ho
-ácin2ti
-áci2ósz
-á2cs1aj
-á2csas
-ác3ság
+á2b1ív
+áb1kl
+áb1kr
+ábla1kr
+ábla1p
+á2b1olda
+á2b1op
+ábo2raj
+ábo2ran
+ábo2rál
+ábo2ris
+á2b1osz
+á2b1o2v
+áb1öb
+áb1ö2d
+áb1öl
+áb1ön
+áb1ö2r
+áb1ös
+áb1öv
+áb1őr
+áb1pr
+1ábrái
+áb2rek
+áb1sp
+áb1st
+áb1sz2
+áb1tr
+á2b1ujjal
+ábu1sz2
+áb1úr.
+áb1üg
+áb1ü2l
+áb1üs
+áb1üt
+áb1üv
+á2c1a2g
+ác1ajt
+áca1k2l
+ác1akn
+á2c1a2la
+ác1alm
+á2c1a2ny
+á2c1ág
+á2c1ál
+ác3cse
+ác3cso
+ác1e2l1
+ácele2
+ác1en
+ác1er
+á2c1ép
+á2c1ére
+á2c3ha
+á2c3há
+ác3he
+á2c3hé
+ác3hon
+á2c3hu
+áci2as
+á2c1il
+ác1inc
+ác1ing
+ácin2til
+áci2ósű
+á2c1i2s
+ác1ív
+á2c1or
+á2c1osz
+ác1ór
+ác1ö2l
+ács1abl
+á2cs1a2g
+á2cs1ajt
+á2csaka
+á2cs1akn
+ács1alap
+ács1alj
+ács1alom
+ács1app
+ács1atk
+á2csatom
+á2cs1á2c
+á2cs1ál
+ác3sárg
+á2cs1árk
+á2cs1árn
+á2csáru
+á2cs1á2ta
+ácsboz1
+á2csef
+á2cs1e2g
á2cs1e2l
-á2csil
-ácsü2
-ács1ül
-ád1alk
-áda2n
-ád1any
-á2d1apá
+á2csene
+á2csent
+á2cser
+ácse2t
+á2cs1ev
+ács1é2g
+ácsé2k
+ács1éki
+ács1ékk
+ács1ékn
+á2csél
+á2csép
+ács1é2te
+ácsi2g
+á2cs1iga
+á2cs1ille
+á2csimi
+ács1int
+ácsi2p
+á2cs1ipa
+ács1isk
+ácsí2
+ács1ír
+á2csokta
+1á2csolat
+1á2csomk
+ács1orr
+á2csosz
+á2cs1ov
+ác3só.
+ács1ó2r
+ác3sót
+ác3sóv
+ács1ö2k
+á2cs1ö2l
+á2cs1ös
+á2csöt
+ács1ő2s
+ács1s
+á2csuj
+á2csut
+á2cs1úr
+ács1ü2l
+á2cs1ü2t
+á1csy
+ács3zen
+á2c1ut
+ác1úr
+ác1ül
+ác1ür
+ád1abl
+á2d1a2do
+á2d1akc
+ád1a2lap
+á2d1alb
+á2d1alj
+á2d1alk
+ád1a2nya
+ád1a2nyá
+áda1p
+á2d1a2pá
+ád1arc
+á2d1aty
+á2d1ág
á2d1ál
+ád1á2sz
+ád1átl
+ád1dr
+ád3dz
+ád1e2c
+á2d1e2g
+á2d1ej
á2d1e2l
+ádele2
+ádel1ej
+ádel1eme
á2d1e2m
-áde2ros
-á2d1es
-á2d1in
-ád1ira
+á2d1ep
+áde2r1á
+ád1erő
+ád1e2ti
+ádéd2
+ádé1dr
+ádé1g2
+á2d1é2ge
+ádé1kré
+ád1éne
+á2d1érte
+á2d1érz
+ádé1st
+ádi2cse
+á2d1i2d
+á2d1i2ga
+ád1i2ko
+ád1ill
+ád1imi
+ád1ind
+á2d1int
+ádi2ódar
+ádióé2r
+ádi2óéra
+ádi2ói2v
+ádi2óko
+ádi2ó1k2ra
+á2d1i2p
+ád1ist
+ád1ív
+ád1kl
+ád1kr
+ádo2ga
+ádo2gá
ádo2ge
+ádo2rak
á2d1osz
-ádö2
+ádós2
+ádö2b
+á2d1ös
+ád1öv
+ád1ö2z
+ád1ő2r
+ád1pr
+ád1ps
á1d2rót
-ádsza2
-á2d1ur
-á1dy
-á1e2
+ád1st
+ád1tr
+ád1udv
+á2d1ú2s
+á2d1üg
+ád1ü2lé
+á2d1üz
+ád3za
+á2d3zá
+á2d3ze
+ád3zú
+á1e
+áe2cs
+áe2dz
+áe2ge
+áe2gé
+áe2gy
+áe2le
+áe2lő
+áe2me
+áe2re
+áe2rő
+áe2se
+áe2sé
+áe2si
+áe2ső
+áe2sü
+áe2te
+áe2ve
+áe2vé
+áe2vő
á1é
+áé2de
+áé2ge
+áé2gé
+áé2gő
áé2he
áé2ke
-áé2l
+áé2le
áé2ne
-áé2p
+áé2pí
+áé2pü
áé2re
+áé2ré
áé2ri
-áé2rő.
+áé2rő
+áé2rü
+áé2te
+á2f1a2gya
+á2f1alg
+á2fáb
+á2f1ág
+1á2fák
+á2f1áp
+1á2fás
+á2fát
+áf1dr
áf1elm
-áf1üz
-á2g1a2d
-ág1ala
+á2f1e2m
+á2f1e2t
+áf1é2ne
+áfi2ad
+áfi2am
+á2f1i2d
+á2f1im
+á2f1ing.
+á2f1ordá
+á2f1osz
+áf2rec
+á1f2rö
+áfus3s
+á2f1ün
+á2g1abl
+ág1abr
+ága2c
+ág1acé
+1ágacska
+á2gad
+ág1a2dá
+1ágadd
+ág1a2dó
+á2g1a2j
+á2gaka
+ág1a2kar
+ág1a2kas
+1á2gakb
+1á2gakh
+1á2gaki
+1á2gakk
+1á2gakn
+1á2gakr
+á2gakt
+á2g1a2la
+á2g1alj
+á2g1all
+ág1alt
+1á2gam
+ága2n
+ág1ana
+á2g1ang
+1á2gank
+ág1ant
+á2g1any
+á2g1a2p
á2g1a2r
-1á2gaz
-á2g1ág
-á2g1álv
-á2g1áru
+ág1asp
+á2g1asz
+ága2tol
+á2g1au
+1á2gaza
+ága2zon
+á2g1á2g
+á2g1áld
+ág1álm
+ág1á2mu
+ágá2nyal
+á2g1áp
+á2g1árad
+á2g1árb
+á2g1á2ré
+á2g1árh
+á2g1á2ria
+ágá2rokb
á2g1árv
-ágá2sé
-ág1e2d
+á2g1ásó
+ágás3s
+ágá2sz
+á2g1át1a2
+á2g1átá
+á2g1áté
+á2g1átf
+á2g1áth
+á2g1áti
+á2g1átl
+á2g1átm
+á2g1átn
+ágá2tokk
+á2g1átr
+á2g1áts
+á2g1átt
+ág1átü
+á2g1átv
+ág1bl
+ág1br
+ág1d2r
+á2g1e2c
+á2g1e2d
+ág1ef
á2g1e2g
á2g1e2l
+á2g1e2m
+á2ge2n
+ág1enc
+ág1ene
+á2g1e2p
+áge2ra
+áge2rá
+áge2r1el
á2g1e2s
+á2g1e2t
+á2g1e2v
+á2g1ex
á2g1é2g
+á2g1é2he
+á2g1éj
+á2g1é2k
á2g1é2l
-ág1é2ne
-á2g1ép
-ág1érd
+á2g1é2ne
+á2g1épí
+ág1é2pü
+á2g1ér.
+á2g1érá
+á2g1é2ré
+á2g1éri
+ág1érm
+á2g1é2rő
ág1érte
ág1érté
-ágg2
+á2g1érv
+á2g1és
+á2g1éte
+á2g1éve
+á2g1évé
+ág1fl
+ág1fr
+ág1g2l
ág1gr
-á2g1id
+ág3gyar
+ág3gye
+ág3gyú
+ághá2nyi
+ági2al
+ági2asz
+ági2d
+á2g1ide
á2g1if
+ági2g
á2g1iga
-á2gigén
-á2g1ill
+á2g1igén
+á2gill
+ág1ima
+á2g1i2mi
+á2g1i2na.
+ág1inf
á2g1ing
-á2g1i2p
+ág1ins
+á2g1int
+á2g1iri
ág1iro
-ág1ír
-á2g1ola
-á2g1old
-á2g1olv
+á2g1ist
+á2g1isz
+á2g1i2ta
+á2g1iz
+á2g1íg
+á2g1ín
+á2g1ír
+á2gíté
+á2g1íz
+ágká2rok
+ág1kl
+ág1kr
+ág1kv
+á2g1oá
+á2g1okl
+á2g1o2li
+ág1oltó
+á2g1op
+á2g1or
+á2g1osko
ágos3s
-ág1óc
-á2g1ö2
+á2g1oszl
+ágó1dr
+á2g1ó2rá
+á2g1ö2k
+á2g1ö2l
+ág1önt
+ágö2r
+ág1örö
+ág1örv
+á2g1ös
+á2g1öt
+á2g1öv
+á2g1ö2z
+ág1ő2r
+ág1ő2s
+ág1pl
+ágport2
+ágpor1tr
+ág1pr
+ág1ps
+ág1sh
+ág1sk
+ág1sl
+ág1sp
+ág1st
ágsz2
-á2g1u2r
+ág1tr
+á2g1ud
+á2g1uj
+águ2n
+á2g1una
+á2g1und
+á2g1u2ra
+á2g1u2rá
á2g1u2t
-á2g1ü2
-á2g1ű2
-á2gyac
-á2gyál
+á2g1új
+á2g1ús
+ág1útt
+ág1üd
+ág1ü2g
+ág1ü2l
+ág1ün
+ág1üv
+ág1üz
+ág1ű2r
+ág1űz
+ágya1g
+ágy1alj
+ágy1alk
+ágy1alm
+1á2gyasn
+á2gyassa
+á2gy1á2l
+á2gy1á2ram
+ágyás1s
á2gy1e2
-2áha
-2áhá
-2áhe
-áh1ors
+á2gyél
+ágy1ér.
+1ágygyű
+á2gyid
+á2gyil
+á2gyivad
+á2gyob
+á2gyosz
+ágy1otth
+á2gy1ó2s
+ágy1ö2l
+ágy1ös
+á2gyur
+á2gyúh
+á2gyút
+á2gy1ü2
+áh1ajk
+áh1ass
+1á2hít
+á2h1ors
á1i
-ái2do
-ái2g
-ái2j
-2áil
+ái2dom
+ái2dő
+ái2ga
+ái2gé
+ái2gy
+ái2ha
+ái2je
ái2má
+ái2ram
ái2rá
-ái2s
-á1í2
-á2jí
-áj2kő
-áj2lá
+ái2sz
+ái2ta
+ái2vá
+ái2vo
+ái2zé
+á1í
+áí2gé
+áí2rá
+áí2ve
+áí2vo
+á2j1adó
+á2j1akc
+á2j1akv
+á2j1a2la
+áj1ambu
+á2j1ana
+áj1ant
+á2j1any
+á2j1ar
+á2j1atl
+á2j1ax
+áj1azo
+á2j1ág
+á2j1ál
+á2j1áp
+ájás3s
+á2j1át1a
+á2j1átá
+á2j1átt
+áj1bl
+áj1br
+áj2ch
+á2j1e2c
+áj1egé
+áj1elm
+áj1eln
+áj1elő
+áj1elv
+á2j1em
+á2j1e2n
+á2j1es
+áj1e2t
+á2j1e2v
+áj1ex
+á2j1é2g
+á2j1él
+á2j1ép
+ájé2r
+á2j1ére
+á2j1éte
+áj1fl
+áj1fr
+á2j1i2d
+á2j1il
+á2j1im
+á2j1iz
+áj1íj
+áj1ír
+áj1ív
+áj1íz
+ájk1ell
+áj2k1ő2
+áj2kü
+áj2lad
+ájl1akt
+áj2l1an
+áj2l1as
+áj2l1at
+áj2lik
+áj2lob
+áj2nár
+áj2nin
+áj2nü
+á2j1ob
+á2j1op
á2j1or
-á2jő
-áj2teg
-áj2tel
-áj2ti
-á2jul
-á2jü
+á2j1öb
+áj1ök
+áj1öl
+á2j1ör
+áj1őr
+áj1ős
+áj1pl
+áj1pr
+áj1sn
+áj1sp
+áj1st2
+áj1t2r
+á2j1ud
+áj1úsz
+áj1üg
+áj1ül
+áj1ür
+áj1ü2t
+áj1üv
+áj1üz
+áj1űr
+áj2zab
+áj2zaj
+áj2z3sa
ák1abr
-á2k1al
-á2k1as
-á2k1ál
-á2k1e2l
-ák1em
+á2k1a2d
+á2k1aj
+ák1aka
+á2k1a2lapí
+ák1ale
+ák1alj
+ák1ant
+ák1ara
+á2k1a2rá
+ák1arm
+ák1arz
+á2k1ass
+á2k1atl
+á2k1a2u
+á2k1á2c
+á2k1á2l
+ák1áta
+ák1átk
+ák1bl
+ák1ebé
+á2k1e2g
+ák1e2le
+á2k1elk
+á2kellene
+á2k1elm
+á2k1e2lő
+ák1emb
+ák1e2rő
+á2k1e2vé
+á2k1e2vo
á2k1é2l
-ák1é2ve
-ák1in
-ák1k2
-á2k1oli
+á2k1é2ne
+á2k1érm
+á2k1érte
+á2k1értő
+á2k1érv
+á2k1érz
+ák1éss
+á2k1é2te
+á2k1étk
+á2k1étt
+á2k1é2ve
+ák1fl
+ák1fr
+á2k1i2d
+á2k1if
+áki2g
+ák1iga
+á2k1igé
+ák1ill
+á2k1i2m
+ák1ing
+á2k1int
+ák1iro
+á2k1i2s
+áki2t
+ák1ita
+á2k1i2v
+ák1ír
+ák1k2l
+ák1k2r
+ák2lar
+á2k1oks
+á2k1o2la
+á2k1old
+á2k1o2li
á2k1oll
+á2k1o2pe
+á2k1orv
+ákos3s
á2k1ott
-2ákö
-ák1s
-á2k1ut
+ák1óni
+ákö2l
+á2k1ölő
+ák1ö2r
+ák1ő2r
+ák1pr
+ák2rák
+á1k2reá
+á1k2ris
+ák1sp
+ák1sr
+ák1st
+ák1sz2
+ák1t2r
+á2k1uj
+á2kuni
+áku2r
+ák1ura
+ák1utó
+ák1új
+ákú2t
+á2k1úto
+ák1üd
+á2k1üg
+ákü2l
+ák1ün
+ák1ür
+ák1ü2t
+ák1űr
+á1k2vat
+2ála.
ál1abl
-ála2m
-ála2n
-á2l1ana
+ál1acé
+á2l1adag
+á2l1a2dó
+ál1a2já
+ál1ajt
+ála2kar
+á2l1akna.
+2álal
+ál1alak
+á2l1alát
+ál1alg
+á2l1alk
+á2l1alm
+á2l1ane
á2l1ang
-ál1any
+á2l1ant
+á2l1a2nya
+ál1a2nyái
+ál1a2nyán
+á2l1a2nyát
+ál1a2nyáv
+á2l1a2pos
+ál1apó
+ál1a2ra
+ála2szek
ála2szel
-ála2szü
+ála2sz1ék
+ála2szö
+ála2szű
+ála2tat
+ála2tet
+ála2t1ér.
+ála2tikr
+ála2tint
+ál1atlé
+ála2told
+ála2t1ó2
+á2l1atti
+á2l1a2ty
+ál1aut
+á2l1ábr
+ál1ág.
+ál1á2gi
+á2l1á2gú
ál1áll
+á2l1á2rak
ál1árf
-1áldá
-1áldj
-1áldo
+ál1árk
+á2l1árn
+á2l1á2ro
+álá2s3z
+á2l1átc
+á2l1átk
+á2l1átm
+á2l1átú
+á2l1átvá
+ál1bl
+ál1br
+álcai2
+1áldás
+1áldoz
ál1d2r
-1áldu
-1áldv
-ále2l
+ál1dy
+á2l1e2c
+á2l1e2d
+á2l1ef
+ál1elk
+ál1elm
+ál1elo
+ál1e2lő
+ál1elr
ál1emu
á2l1e2r
-ál1ér.
-álé2t
-ál1éte
-á2l1id
+ál1esem
+á2l1e2ső
+á2l1esz
+á2l1e2t
+ál1ez
+á2l1ég
+á2l1é2he
+álé2kal
+álé2k1an
+álé2k1e2l
+álé2kü
+ál1é2le
+ál1é2lő
+á2l1é2ne
+á2l1ér.
+á2l1érb
+á2l1érd
+á2l1érf
+á2l1érg
+á2l1érh
+á2l1é2ri
+á2l1érm
+á2l1érr
+á2l1érs
+á2l1értá
+á2l1érte
+á2l1érté
+á2l1érz
+á2l1év.
+á2l1é2vé
+ál1fl
+ál1fr
+ál1gr
+1álhaja
+áli2as
+ál1i2bo
+áli2d
+ál1ide
+ál1idé
+áli2g
+á2l1iga
+á2l1ige
+á2l1igé
+ál1ill
+ál1imp
+á2l1ind
+ál1inf
+á2l1i2onb
+á2l1i2ont
+á2l1i2p
+ál1irá
+á2l1iro
+áli2s1e
+áli2s1ék
+áli2sis
ális3s
-á2l1í2
-ál1k2
-ál2liz
-ál1ob
-á2l1o2kok
+ál1iste
+á2l1iz
+ál1ín
+ál1í2r
+ál1ít
+ál1í2v
+álká2rok
+ál1k2l
+ál1k2r
+ál2l1a2dó
+1állag
+ál2laj
+ál2l1a2lak
+1államá
+álla2m1e
+1államot
+1államti
+ál2l1a2pá
+ál2l1a2r
+1állata
+álla2tas
+álla2t1e2
+álla2t1or
+álla2t1ö2
+1állatu
+ál2l1á2g
+ál2l1á2l
+ál2l1árr
+állás1s
+ál2l1áth
+ál2l1átm
+ál2led
+ál2l1e2h
+ál2l1ej
+áll1éké
+ál2l1iz
+1állomá
+ál2lü
+1álmaim
+1álmok.
+1álmom
+1álmot.
+1álmuk
+1álmunkb
+ál1obj
+á2l1o2ka.
+á2l1o2kai
+1álokaih
+1álokain
+1álokair
+á2l1o2ká
+1álokán
+1álokát
+1álokáu
+álo2kok
+1álokonk
+álo2kos
+á2l1okta
+1á2l1o2ku
á2l1ol
-1á2lomb
-álo2me
-álo2mit
-á2l1op
+áloma2
+álo2mad
+álo2m1al
+álo2m1an
+álo2mar
+álo2mas
+álo2m1á
+álo2m1e
+álo2m1it
+álo2mot
+á2loms
+álo2m1ú
+á2l1ont
+ál1opc
+á2l1ope
á2l1or
-ál1osz
-2álö
-ál1öl
-ál1ös
+á2l1osz
+á2l1ox
+álóa2
+álóá2
+álóó2
+áló2ráj
+áló2s1ű2
+álót2
+ál1öb
+á2l1öd
+á2l1ö2l
+á2l1ös
ál1öz
-ál1p2
-áls2
+á2l1őr
+ál1p2l
+ál1p2r
+ál1p2s
+ál1sk
+ál1sl
ál1st
-ál2t1e2g
-ál2tiv
+ál1trad
+ál1t2rak
+ál1t2ran
+ál1t2re
+ál1tré
á2l1ug
-ál1u2s
-ál1u2t
-ál1út
-á2lü
-ál1ű
-á2lyal
+álu2n
+á2l1una
+á2l1u2r
+á2l1u2t
+á2l1uz
+á2l1új
+á2l1úr
+álú2t
+ál1útj
+ál1útk
+ál1útn
+á2l1úto
+á2l1útr
+á2l1útt
+ál1üg
+ál1ün
+ál1ür
+ál1üt
+ál1üv
+ál1üz
+ál1űr
+ál1űz
+ály1ada
+álya1g2
+ály1ant
+ály1anya
+álya1p
+ály1ass
á2lyál
-á2ly1e
-á2lyiga
-á2lyis
+á2ly1e2
+á2lyéj
+á2lyél
+á2ly1é2ne
+á2lyére
+á2lyéve
+á2lyide
+á2lyí
+ály1k2
+ály1odv
+á2lyol
á2ly1ó2
-á2lyö
-á2lyü
-á2m1ac
+á2ly1ö
+á2lyő
+ály1s
+á2lyug
+á2ly1ü2
+á2ly1ű2
+á2m1abl
+á2m1abr
+ám1a2cé
+ám1adm
+ám1agg
+á2m1ajt
á2m1akt
-á2m1a2l
-áma2n
-ám1any
-ám1apa
-ám1a2rá
-ám1aty
-ám1ár.
+ám1a2lap
+ám1all
+ám1alt
+ámaó2
+á2m1app
+á2m1arc
+áma2sz1ál
+áma2szel
+áma2szív
+áma2sz1odv
+áma2sz1ü2
+ám1atl
+á2m1att
+á2m1aty
+ám1aud
+ám1a2zo
+ámá2c
+ám1áf
+á2m1ág
+ám1álla
+ám1állo
+ámán1n
+ámán1tr
+á2m1á2rak
+ám1á2ram
+á2m1áras
+á2m1á2rá
+á2m1árb
+á2m1á2ri
+á2m1árn
+á2m1á2ro
+á2m1árr
+á2m1á2ru
+ám1ásv
+á2m1átb
+ám1á2t1e
+á2m1áti
+á2m1átm
+ám1á2zó
ám1bl
-áme2g
-ám1elm
+ám1dr
+á2m1e2b
+á2m1ej
+á2m1ela
+ám1elá
+ám1e2lem
+ám1elé
+á2m1elh
+ám1elí
+á2m1elj
+ám1elk
+á2m1elm
+ám1elo
+á2m1e2lő
+ám1els
+ám1elt
+ám1elü
+ám1elv
á2m1e2m
-á2m1es
-ámész1
-ám1f2
-á2m1id
-ám1il
-á2m1ip
-á2m1i2r
-ámi2s
-ám1ism
-ám1isz
+á2m1erd
+ám1e2rek
+á2m1erk
+á2m1e2ro
+áme2rők
+áme2rőt
+áme2rőv
+ám1e2se
+ám1ess
+ám1esz
+áme2t
+á2m1eti
+á2m1etű
+á2m1ev
+á2m1ex
+á2m1ez
+ám1éke
+á2m1é2le
+á2m1ép
+á2m1érc
+á2m1érd
+á2m1értel
+á2m1étk
+ám1fr
+ám1gr
+ámi2ab
+ámi2al
+ámi2am
+á2mide
+á2m1idé
+ám1i2dő
+á2m1iga
+á2m1igá
+á2m1igé
+á2m1ill
+á2mimá
+á2mimm
+á2m1imp
+á2m1ind
+á2m1inf
+á2m1ing
+á2m1inte
+á2m1inté
+á2m1inv
+á2m1i2pa
+á2m1irá
+á2m1iro
+á2m1irt
+á2m1isk
+á2m1ism
+ám1i2szá
+á2m1i2z
+ám1íg
+á2m1íj
á2m1ír
-ám1ív
+á2m1í2v
+ám1íz
+ám1kl
+ám1kr
+ám1kv
+ámla3t2
á2m1ob
+á2m1of
+á2m1oká
+á2m1okl
+á2m1okm
+á2m1okta
+ámo2lyas
á2m1op
-ámo2rál
-ám1oszl
-á2m1ö
-á2m1ő2
-ám1p2
-ám1s
-ámu2n
-ám1ur
-á2m1ü2
+ámo2r1á2l
+ámo2ris
+ámo2r1odv
+ámo2sas
+ámos3s
+ám1osto
+á2m1osz
+á2m1ov
+á2m1ox
+ám1ó2r
+ám1ö2k
+ám1öl
+ám1ön
+ám1ör
+ám1ös
+ám1öt
+ám1öv
+ám1ö2z
+ám1ő2r
+ám1ő2s
+ám1őz
+ámpa1p2
+ám1p2l
+ám1p2r
+ám1p2s
+ám1sk
+ám1sm
+ám1sn
+ám1sp
+ám1st
+ám1sz2
+ám1t2r
+á2m1ud
+á2m1ug
+á2m1uj
+á2m1und
+á2muni
+á2m1u2r
+á2m1utá
+á2m1új
+ám1üd
+ám1üg
+ám1ü2l
+ám1ür
+ám1üt
+ám1üv
+ám1üz
+á3műt
ám1ű2z
-ána2d
+ámva2s1u2
+á2n1abl
+á2n1a2cé
+án1ach
án1ada
-ánai2
+ánae2
+án1afr
+án1agya
án1ajt
+á2n1aká
á2n1akc
+á2n1akr
á2n1a2la
án1alk
-á2n1a2pa
-á2n1apá
-án1ass
-án1aut
+á2n1all
+á2n1anó
+án1anya
+á2n1a2o
+ána2p
+án1apa
+ánap1i
+án1ara
+á2n1arc
+án1assz
+ána2t1ér.
+ána2tol
+ána2tor
+ána2t1ű
+á2n1a2u
+án1ava
+án1ábr
+á2n1ág
á2n1áll
+án1ár.
+án1árad
+án1á2ri
+án1árm
+án1árn
+án1áro
án1áru
+án1ásv
+áná2t1a
+áná2t1á
+á2n1á2z
+án1bl
+án1br
+án2cac
+án2c1ad
+án2caj
+án2cal
+án2c1a2n
+án2car
+án2c1as
+án2cat
+án2c1au
+án2c1ál
+án2c1á2ro
+án2cás
án2c1ed
-án2c1es
+án2c1e2g
+ánce2l
+ánc1ele
+án2c1elt
+án2c1er
+án2c1e2s
+án2c1et
+án2cez
+ánc1éhe
+ánc1é2ne
+án2c1ér.
án2c3h
-án2c1is
-án2cor
-án2c1ö
+án2c1ill
+án2cim
+ánci2p
+ánc1ipa
+án2c1ir
+án2c1i2s
+án2c1ó2
+án2c1ö2
+án2cő
+áncs1an
+ánc3sás
+án2c3seb
+áncs1es
+ánc3spo
+ánc3sza
án2cü
-á2n1e2d
-án1e2g
-ánegyez1
-án1e2l
-án1em
-án1en
-án1e2t
+án2cz
+áne2d
+án1edé
+á2n1ef
+á2n1e2g
+á2n1e2l
+án1emb
+án1e2mi
+án1eml
+án1e2mu
+á2n1en
+á2n1e2p
+án1es
+á2n1e2t
+án1e2u
+á2n1ex
+án1ez
+á2n1é2d
á2n1é2g
+á2n1ék.
+á2n1ékn
+án1éks
á2n1é2l
-án1é2ne
-á2n1épü
-án1érő
-án1f2
+á2n1é2ne
+án1épí
+án1épü
+á2n1ér.
+á2n1érc
+á2nérd
+á2n1éré
+á2n1érl
+án1éte
+á2névad
+á2n1éve
+á2n1é2vé
+án1f2r
+án2gab
án2g1a2r
-án2gel
-án2g1e2s
-án2g1és
+án2g1ára
+ángás1s
+án2g1át
+án2ged
+án2g1el
+ánge2s
+án2g1ér.
+án2g1é2s
+áng3g
+án2g1it
+án2g1iv
+án2gí
án2g1osz
-án2gö
+án2gőr
+án2g1us
+án2gü
+1ángy.
+án2gyas
á2n1i2d
+á2n1if
+á2n1i2ga
+án1igé
+áni2k1a
+áni2k1á
+áni2ke
+án1ill
á2n1im
-án1int
-á2n1ip
-á2n1ir
-án1isz
-ánizs1
-á2n1izz
-án2k1es
-án1k2l
-á2n1oki
-á2n1or
-á2n1osz
-á2n1ot
-ánó2r
-á2n1ö
-án1szf
-án1sz2l
-án1szp
-án2tir
+án1ind
+án1inn
+á2n1i2p
+á2nirr
+án1irt
+án1isk
+án1ism
+á2n1i2sz
+áni2tá
+áni2t1e2
+áni2t1í
+áni2tol
+áni2t1or
+án1izo
+án1íg
+án1ív
+án1íz
+án2kaj
+ánk1aro
+án2kern
+án1k2li
+án1k2lo
+án1klu
+án1k2rá
+án3nye
+án3nyí
+án3nyo
+án3nyu
+á2n1o2b
+á2n1okir
+á2n1okta
+á2n1o2ku
+án1old
+án1oli
+á3nom
+áno2n1i2m
+á2n1o2r
+án1oszl
+án1ott
+á2n1ox
+án1óri
+án1ök
+á2n1öl
+án1öm
+á2n1ön
+á2n1ör
+á2n1ös
+á2n1öt
+án1övö
+á2n1őr
+án1ő2s
+á2n1ő2z
+án1pl
+án1pr
+án2ses
+án2s1ér
+án2sis
+án2siz
+án1s2pe
+án1s2pi
+ánst2
+án1str
+áns1üld
+án1szl
+ánt1acé
+ánt1a2ny
+án2taz
+án2t1á2g
+ántá2p
+án2t1árb
+án2t1ári
+án2t1ed
+ánt1eké
+ánt1elh
+án2tez
+ánt1éke
+án2térte
+án2tid
+án2t1ipa
+ánt1ist
án2t1iz
-án2tór
+án2t1ív
+án2tök
+án2t1ös
+án1t2rak
+án1tran
+án2t1ü2l
+á2n1ud
+á2n1ug
á2n1uj
+á2n1u2r
á2n1u2t
-ánú2
-án1út
-á2n1ü
+án1úr
+ánú2t
+án1útj
+á2n1úto
+án1útt
+án1ü2g
+án1ü2l
+án1ü2t
+án1ü2v
+án1ü2z
+án1űz
+ány1adás
ány1a2dó
-ány1a2la
-ánya2n
-ány1any
-á2nyap
-ány1ass
-á2ny1ál
-á2ny1ár.
-á2ny1á2rak
-ánye2
-á2nyeg
-á2ny1el
-ány1er
-á2nyég
-á2nyél
-á2nyérz
-ány1í2r
-á2ny1ola
-á2ny1osz
-á2ny1ö
-á2nyő
-ány1us
-á2nyü
-án2z1ag
-án2zs
+ány1agg
+ány1akc
+ány1alap
+ány1alk
+ány1all
+ány1anya
+ány1anyá
+ány1apá
+ány1ara
+ány1ará
+ány1art
+ány1assz
+ány1aszt
+á2ny1á2l
+ány1á2ras
+á2ny1á2rá
+á2ny1árb
+ány1árc
+á2ny1árf
+ány1árh
+ány1árk
+á2ny1árn
+á2ny1á2ro
+á2ny1árr
+á2ny1árs
+á2ny1árt
+ány1áru
+ány1árú
+á2ny1átl
+á2ny1á2z
+ány1ed
+á2ny1e2g
+ányegyez1
+ány1el
+ánye2le
+á2ny1e2m
+ány1en
+á2ny1ep
+ány1eső
+ány1et
+ány1e2v
+á2ny1éd
+á2ny1ég
+á2nyéhe
+á2ny1é2j
+á2ny1é2k
+á2ny1él
+á2ny1é2ne
+ány1érc.
+ány1érre
+á2ny1érte
+á2ny1érté
+ányé2r1ü
+ány1érvé
+á2ny1és
+á2nyéte
+á2nyétk
+á2ny1étt
+á2nyéve
+ányfé2l1é2v
+á2ny1id
+á2nyigé
+á2nyike
+á2ny1ikr
+á2nyirat
+á2nyiro
+á2nyisk
+á2ny1isz
+á2nyita
+ány1í2ró
+á2ny1oml
+á2ny1ont
+á2ny1o2r
+á2nyosz
+ány1ök
+ány1ö2r
+á2ny1ös
+ány1öz
+á2ny1ő2
+ány1tr
+á2nyug
+á2ny1ur
+ány1ut
+á2nyúto
+á2ny1ü2
+á2ny1ű2
+án2zál
á1o
-áo2sze
+áo2cs
+áo2ká
+áo2ko
+áo2mo
+áo2pe
+áo2so
+áo2szan
+áo2sz1e
+áo2szis
+áo2sziv
+áo2szú
á1ó
+áó2ha
+áó2va
á1ö
-á1ő2
-áp1a2n
-ápe2
+áö2le
+áö2mö
+áö2re
+áö2rö
+á1ő
+áő2sz
+á2p1a2dot
+ápa1tr
+ápa3u2
+á2p1ág
+áp1áll
+áp1áta
+áp1dr
áp1eg
-á2p1ér
+áp1e2l
+áp1e2m
+ápe2n
+á2p1e2s
+áp1e2t
+á2p1ég
+áp1é2te
+ápi2ac
+ápi2av
+á2p1im
+áp1inj
áp1int
-á2poló
-ápora2
-ápo2rad
-ár1abl
-ár1abr
-2árag
-á2r1agg
-ára2j
-ár1ajá
-ár1ajt
-á2r1a2la
+ápi2t
+á2p1ita
+á2p1ín
+á2poll
+ápo2r1e
+áp1őr
+áp2ro
+áp1t2r
+á2p1ug
+á2p1u2t
+á2p1úr
+áp1üg
+áp1üz
+á2r1abl
+á2r1abr
+á2r1abs
+ár1adag
+á2radata
+á2radatá
+á2radatb
+1áradaté
+á2radatn
+á2radato
+1á2radatr
+á2radatt
+ár1a2gá
+á2r1ajk
+á2r1a2kad
+á2r1a2kas
+á2r1akc
+á2r1akna.
+á2raknát
+á2r1akt.
+ár1akti
+ár1aktí
ár1alá
-ár1alj
+á2r1alj.
+á2r1alja.
+á2raljak
+á2r1aljá
ár1alk
+ár1all
+á2r1alm
+ár1alt
+á2r1alv
+1á2rama.
+1áramai
+1á2ramá
+ára2mál
ára2m1el
-1á2ramk
+ára2m1érté
+1á2rami
+ára2m1in
+1á2ramkö
+1á2ramok
+1á2ramol
+1á2ramot
+1á2rams
+1á2ramu
1á2ramú
-ár1a2p
-á2r1a2r
-á2r1á2g
+ár1ana
+ár1ang
+ár1a2no
+á2r1ant
+ár1a2pá
+ár1a2pó
+ár1aps
+á2r1a2rá
+á2r1arc
+ár1a2ri
+á2r1asp
+ára2taj
+ára2tal
+ára2tav
+ára2tál
+ára2t1inf
+ár1atlé
+ára2t1ü2
+ár1aty
+á2r1ábr
+árá2c
+árá2g
+ár1ága
+ár1ágr
+ár1ágy
+ár1á2lo
+á2r1á2p
ár1ár.
-á2r1áro
-ár1árt
-árás3s
+á2r1á2rak
+á2r1á2rá
+á2r1árb
+á2r1árf
+á2r1á2ri
+á2r1árk
+á2r1á2ro
+á2r1árr
+á2r1árt
+ár1á2ru
+ár1árú
+ár1árv
+á2r1ásás
+árá2szó
+á2r1á2ta
+árát1a2d
+á2r1átá
+ár1átb
+á2r1átc
+á2r1átd
ár1á2t1e2
+á2r1áté
+á2r1átf
+á2r1áth
+á2r1á2ti
+á2r1átj
á2r1átk
-ár1b2
+á2r1átm
+á2r1á2tö
+á2r1átr
+á2r1áts
+á2r1átt
+á2r1átú
+á2r1átv
+ár1bl
1árboc
-árd1el
-ár2d1ó2
+ár1br
+ár2d1ál
+árd1ell
+árd1eme
+ár2d1é2n
+ár2d1őr
+ár1drá
+ár2dud
+áre2á
+ár1e2d
á2r1e2g
+ár1ej
á2r1e2l
+árelői3r
+áre2ma
+áre2mél
+áre2n
+ár1ene
ár1eng
-á2r1er
-ár1esé
-á2r1e2z
+á2r1e2r
+ár1e2sé
+ár1e2ső
+ár1evé
+á2r1ex
+ár1ébr
+ár1éde
á2r1é2g
-á2r1éj
-á2r1é2n
+ár1éj.
+ár1é2je
+ár1éjs
+á2r1é2ke
+á2r1é2ké
+á2r1éks
+á2r1é2l
+á2r1é2ne
á2r1ép
-á2r1é2tű
-ár2gye
-ár2gyor
-ár1ide
+á2r1éré
+á2r1é2ri
+ár1éss
+ár1ész
+á2rétk
+á2r1étr
+á2r1étt
+á2r1étv
+á2r1év.
+áré2vek
+á2r1évk
+á2r1évr
+ár1fl
+ár1f2r
+árgás1s
+ár1gl
+ár1g2r
+ár2gyárv
+ár2gyir
+ár2gyol
+ár2gyó
+á2r1i2de
+á2r1i2dé
+á3r2i3dőtl
+ár1ifj
ári2g
á2r1iga
-ár1inc
-ár1ind
-ár1ing
-ár1int
-á2r1i2o
-á2r1ir
-ár1isp
-ár1i2ta
-ár1izo
-ár1ír
-árká2s
-árkász1
-ár1kh
+á2r1igá
+á2r1ige
+á2r1ill
+á2r1i2má
+ár1imb
+á2r1i2mi
+á2rinas
+á2r1inc
+á2r1ind
+á2r1inf
+á2r1ing
+ár1inn
+á2r1int
+á2r1inv
+á2rio
+á2r1i2paro
+ári2s1e
+ár1isko
+ár1iste
+ár1i2sza
+á2r1i2ta
+ár1i2zo
+á2r1ír
+ár1ív
+á2r1í2z
+árka1k2
+1árkádo
+ár1k2l
1árkok
-ármas1s
-árnás1
-áro2koz
-ár1oll
-áro2mér
+ár1kré
+ár1k2v
+árnás3s
+árnya2n
+ár2ny1any
+árnye2l
+ár2ny1ele
+ár2nyelő
+ár2nyem
+ár2nyes
+ár2nyok
+ár2ny1ol
+ár2nyos
+ár2nyö
+ár2nyü
+ár1odv
+á2ro2ká
+áro2k1e
+á2rokha
+á2rokm
+áro2kol
+á2r1o2koz
+á2rokre
+1á2roks
+á2rokta
+á2r1olda
+ároma2
+áro2maj
+áro2mak
+áro2m1al
+áro2m1as
+áro2már
+áro2m1ok
áro2m1os
-á2r1or
+ár1opt
+á2r1o2r
+áro2sas
+áro2sál
áros3s
-á2rostr
-árö2
-ár1öl
-ár1ös
+á2r1ostr
+á2r1osty
+ár1otth
+á2r1o2v
+áróé2r
+ár1ó2nét
+ár1ó2név
+áró1p2
+á2r1ó2rak
+áró2rák
+á2r1óri
+áró1ská
+áró1s2p
+ár1ö2b
+ár1öc
+ár1ök
+á2r1ö2l
+á2r1ön
+ár1ör
+á2r1ös
ár1öv
-ár1öz
-á2r1ő2
-ár1p2
+á2r1ö2z
+ár1ő2r
+ár1ő2s
1árpa.
+ár1pl
+ár1p2r
+ár1p2s
+ár2s1ala
+árs1asz
+ár2s1ál
+ár2sed
+ár2s1e2l
+ár2sem
+ár2s1en
+ár2ses
+ár2s1é2g
+ár2sip
+ár2sirá
+árs1okt
+ár2s1ol
+ár2sóv
+ár2s1ön
árs3s
-ár1str
-árt1akt
+ár1s2tab
+ár2sut
+ársza2ké
+ár2s3zene
+ár2tado
+ár2t1aj
+1ártalo
+árta2n1á2s
+árt1ará
+árt1a2ris
+árta3u2
árt1áll
-árt1árn
-árt1áru
-ár2teg
-ár2tig
-ár2t1okt
+ár2t1árn
+ár2t1á2ru
+ár2t1e2g
+árt1elh
+árt1eli
+árt1ell
+árt1eln
+ár2t1elő
+árt1emb
+ár2t1erk
+árte2s
+árt1ese
+árt1esth
+árt1eti
+árt1éle
+ár2t1érd
+ár2t1érte
+ár2tid
+ár2tif
+ár2t1ins
+ár2t1int
+árt1izg
+ár2tít
+ár2t1okta
+ár2top
+árt1otth
ár2t1ön
-ár1tro
+ár2t1ös
+ár2t1ura
+árt1u2sz
+ár2t1ut
1á2ru.
+1á2rua
+áruá2
+1á2ru1b2
+1á2ruc
á2rud
-á2rué
+1áruda
+1árudá
+1á2rue
+1á2rué
1á2ruf
+1árugy
1á2rui
-1áruj
-á2ruke
-1á2ruké
-á2rum
-1á2rup
+á2ruj
+1árujá
+1á2rum
+1á2run.
+1á2runa
+1á2runá
+á2r1und
+á2runi
+1á2ruo
+1á2ru1p2
á2rur
+1árura.
+ár1urá
+1á2rus
+árus3s
á2rut
-ár1uta
-1áruü
-1áruv
-ár1úr
-árú2t
-ár1úti
-á2rü
-1árvu
-á1ry
+1árut.
+áru2tal
+áru2tas
+1árute
+áru1tr
+áru2tun
+1á2ruü
+1á2ruv
+ár1u2z
+1á2rúé
+1á2rúk
+ár1úré
+ár1úrf
+ár1úsz
+á2r1úta
+á2r1útb
+á2r1úté
+á2r1úth
+á2r1ú2ti
+á2r1útj
+ár1útl
+á2r1útn
+á2r1ú2to
+á2r1útr
+ár1úts
+á2r1útt
+ár1ü2g
+ár1ü2l
+ár1ün
+ár1ür
+ár1ü2s
+ár1üt
+ár1ü2v
+ár1üz
+ár1űr
+ár1ű2z
+1árvác
+ása2b
á2s1abl
-á2sad
-ás1a2dó
-á2s1a2j
-á2s1akt
+ás1abo
+ás1a2dat
+á2s1a2dá
+ás1a2do
+á2s1a2dó
+á2s1a2já
+ás1ajtó
+á2s1a2kar
+á2s1akc
+á2s1akv
ás1a2la
+ás1alg
+ás1a2li
+ás1alj
ás1alk
+ás1all
ás1alm
-ás1a2lo
+á2s1alt
+á2s1amb
ása2n
á2s1ana
+á2s1anó
+á2s1ant
á2s1any
-á2s1as
+ás1a2pá
+ás1app
+ás1apu
+ás1a2ra
+ás1a2rán
+á2s1arc
+á2s1aré
+á2s1a2ri
+ás1art
+ás1arz
+ás1asp
+á2sass
+1á2satá
+á2s1atl
+á2sato
+ás1aty
á2s1a2u
-á2s1a2v
-á2s1a2z
-á2sábr
+á2s1azo
+á2sábé
+á2s1ábr
+ásá2gai
+á2s1ágb
+á2s1á2gig
+á2s1ágk
+ás1ágn
+á2s1á2gú
á2s1ál
-ás1áru
-á2sást
-ás1átl
+á2s1á2p
+ás1áras
+ásá2rét
+ásáró2
+ásá2rón
+1á2sásb
+1á2sási
+1ásásk
+ás1ásv
+ás1á2ta
+á2s1átá
+ás1áté
+ás1áth
+ás1áti
+ás1átj
+ás1átk
+á2s1átl
+á2s1átr
+ás1áts
+ás1átt
ás1átv
-ás1e2d
+á2s1á2z
+ás1bl
+ás1br
+áscsa2p1á2
+ás1d2r
+ás1e2b
+á2s1e2d
+á2s1ef
+ás1e2gy
á2s1e2l
-ás1em
-á2s1en
+á2s1e2m
+á2s1e2n
+ás1epi
+ás1erk
+ás1erő
á2s1e2s
+á2s1e2t
+ás1e2v
ás1ex
ás1ez
+á2s1é2g
+á2s1éhe
+á2s1éj
+á2s1é2k
á2s1é2l
+á2s1é2ne
á2s1ép
-ás1ére
+á2s1ér.
+á2s1érd
+á2s1é2re
+á2s1é2ré
+á2s1é2ri
+á2s1érl
+á2s1érs
á2s1érte
á2s1érté
-á2s1és
-á2s1éve
-á2s1id
+á2s1értő
+á2s1érv
+á2s1é2s
+á2s1é2te
+ás1étk
+ás1étt
+á2s1é2ve
+ás1fl
+ás1fr
+ás1gl
+ás1gr
+á2s1i2d
á2s1if
ási2g
ás1iga
+ás1ige
+ási2k1e
+á2s1ill
+á2s1imá
+ás1imp
+ás1ind
ás1inf
-ás1int
+á2s1ing
+á2s1ini
+á2s1int
+ás1inv
á2s1i2p
-ás1i2rá
-á2s1is
-á2s1ín
-á2s1í2r
-ás1ív
-ás1k
+á2s1i2rat
+á2s1i2rá
+ás1iro
+ás1irt
+á2s1isk
+á2s1ism
+ás1ist
+ás1i2sz
+ás1ita
+á2s1iz
+ás1íg
+á2s1íj
+ás1íns
+ásí2r
+ás1írá
+ás1író
+á2s1í2v
+á2s1í2z
+ás1kl
+ás1k2r
+ás1kv
+1ásnu
+á2s1ob
+ásoda2
+áso2d1al
+áso2d1an
+áso2d1as
+áso2dau
+áso2d1ál
+ás1okl
+ás1okm
ás1okta
-á2s1or
+ás1oldó
+ás1oli
+á2s1ont
+á2s1op
+ás1o2rá
+á2s1org
+á2sori
+á2s1ork
+ás1orr
+á2s1ors
+á2s1orv
ás1osz
-1á2só.
+á2s1o2v
+1á2sób
+1á2sóé
+1á2sóg
+1á2sói
1á2sój
1á2sók
1á2són
+ásó1p2
á2sór
-ás1órá
+ás1ó2rá
+ás1óri
+1ásóró
+á2sós
+ás1ó2sá
1á2sót
-á2s1ö
-á2s1ő
-ás1p2
-áspis1
-áss2
-ás1st
-á1ssy
+á2sóv
+á2s1ö2k
+ás1ö2l
+ás1ön
+á2s1ö2r
+á2s1ös
+ás1ö2v
+á2s1ö2z
+ás1ő2r
+ás1ő2s
+á1spic
+ás1p2l
+á1s2pór
+ásp2r
+ás1ps
+ás1s2k
+ás1s2p
+ás1sr
+ás1s2t
+ássz2
+ás3szab
+ás3szag
+ás3szaka
+ás3szaké
+ás3száj
+ás3szám
+ás3száz
ás3sze
-ás3szé
+ás3szél
+ás3szf
ás3szi
+ás3szí
+ás3szk
+ás3szoc
+ás3szok
+ás3szol
ás3szor
+ás3szó
ás3szö
ás3szt
-ás3szü
-ás1tra
+ás3szú
+ás3szű
+ás2teg
+ást1elem
+ás2tir
+ás2t1ös
+ás1t2re
+ás1tri
+ás1tróf
+á2s1ud
á2s1uj
+á2s1u2r
+á2s1u2s
ásu2t
ás1uta
-ás1utá
-ás1u2z
+á2s1utá
+ás1utó
+á2s1u2z
+ás1úr.
+ás1úrn
+ás1ú2sz
+ás1úti
+ás1úto
+ás1üd
á2s1üg
-ás1ür
-ás1üs
-á2s1ü2v
-á2sz1aj
+ás1üld
+ás1üle
+á2s1ün
+á2s1ür
+ás1ü2ve
+á2s1üz
+ás1űr
+ás1ű2z
+á2s3zac
+á2sz1a2d
+ász1aga
+ász1agá
+á2sz1agy
+á2szaj
+á2sz1akc
+ász1a2kol
+á2sz1akt
+ász1ale
+á2sz1alk
+ásza2n
+á2szana
+á2sz1ant
+á2sz1any
á2sz1ap
-á2szas
-ás3zav
-2ászá
-á2szág
-ász1eb
-ász1el
-ász1em
-ász1ep
-ász1es
+ásza2s
+ász1asz
+ásza2t1e
+á2sz1au
+ás3zavar
+ász1ágg
+ász1ágy
+ász1á2lo
+ás3záp
+ászá2r1as
+ász1á2rih
+á2sz1á2rú
+ászás1s
+á2száta
+á2sz1áz
+ász1e2b
+ászebé2
+ászeb1éde
+ász1e2gé
+ász1e2gy
+ász1eln
+ász1elv
+ász1emb
+ás3zene
+ás3zené
+ász1eng
+ász1e2p
+á2sz1erd
+á2sz1e2ré
+á2sz1e2s
ász1e2t
-ászé2
+ász1e2v
+ász1ex
á2sz1éj
-á2sz1én
-ász1év
-ászi2
+á2sz1ékb
+á2sz1é2l
+á2sz1é2ne
+á2sz1ép
+ász1éré
+á2sz1éte
+á2sz1étt
+á2sz1éve
á2szid
-á2sz1in
-á2sz1ir
-á2sz1is
+á2szif
+á2sz1ill
+á2szind
+ász1ing
+ászi2p
+á2sz1ipa
+á2sziro
+á2sz1isk
+á2sz1ism
+ász1ist
+ász1ita
+á2sziz
+á2szír
+ász1k2
+1ászkái
+á2szokl
+á2sz1okm
ász1ors
-ász1osz
-ász1ös
+á2sz1osz
+ászó1s2p
+á2sz1ö2b
+ászö2l
+ász1ölt
+á2sz1ö2r
+á2sz1ös
+ász1övé
+ász1őr
+ász1ő2s
+ász3sa
+ás3zsu
ászt2
ász1tr
+á2szuni
á2szur
á2szut
-ász1út
-ász1ün
-á2szüz
-át1ado
-át1adt
-át1alm
+ász1ú2s
+á2sz1ü2g
+á2sz1ün
+á2sz1ü2z
+ász1z
+át1abr
+át1a2já
+át1ajk
+át1ajt
+áta1kré
+á2t1akt.
+á2t1akto
+át1alh
+á2t1alja
+á2t1alm
+át1als
át1a2lu
-át1a2u
-á2t1ál
+át1alvá
+á2t1a2ra
+á2t1ará
+á2t1arc
+át1arz
+áta2sá
+át1aut
+át1azo
+átá2c
+át1ág.
+át1ál
+átá2p
+át1ápo
+á2t1á2rad
+á2t1á2rai
+át1áram
+á2t1á2rá
+á2t1árb
+á2t1árn
+á2t1á2ro
+á2t1árt
+á2t1á2ru
+1á2t1ásás
+átá2s3z
+á2t1átf
+á2t1átu
+át1átv
+át1bl
+át1br
+1átbu
+át1dr
+át1e2c
át1ej
-át1e2m
-át1é2g
+át1ell
+át1eln
+át1elv
+á2t1emb
+át1eml
+át1eng
+áte2rá
+áteri2
+áte2rik
+át1erő
+át1ex
+át1é2d
+átée2
+áté2g
+át1ége
+át1égé
+áté2kaj
+áté2k1a2l
+áté2kas
áté2ke
-á2t1é2l
-át1é2p
-át1f2
-1átfú
-1áthi
+áték1em
+áték1es
+áté2kol
+áté2k1ü
+át1é2l
+áté2p
+á2t1érb
+á2t1é2ri
+á2t1érr
+á2t1érz
+áté2t1á2
+1átfés
+át1fr
+át1gr
+át2hi.
+át2hia
+1áthid
áti2ag
-át1id
+áti2al
+áti2d
áti2g
-át1in
-á2t1i2r
+á2t1igé
+át1ill
+á2t1ing
+át1i2pa
+á2t1irá
+át1isk
+át1ist
+á2t1i2ta
+á2t1izé
á2t1izm
-á2t1izo
-át1í2r
+á2t1i2zo
+át1íg
+á2t1í2r
át1í2v
-1átlé
-1átne
+1átkel
+át1kl
+át1k2r
+átle2g1
+átlege2
+átműt2r
+át1oj
+áto2kol
+át1okol.
+át1o2koz
+át1okta
+2átolj
+2átolt
+át1oml
+át1ont
+át1op
+áto2ran
+áto2ras
+áto2rác
+áto2rál
+áto2re
+áto2ris
+áto2r1ol
+át1orzá
+á2t1o2x
+átói2ko
+átó1p2
+át1óri
át1öb
-á2t1öm
+átö2l
+át1ölé
+át1öml
át1ön
-át1ö2v
+át1öt
+á2t1ö2v
át1ö2z
-á2t1ő2
-át1t2
-át1ug
+át1ő2r
+át1pl
+át1pr
+át1ps
+át2ril
+át1sk
+át1sl
+át1sm
+át1sp
+át1sr
+át1st
+1átszű
+1átteki
+át3t2é
+át1t2r
+á2t1udv
+á2t1ug
+á2t1uh
á2t1uj
-1á2t1u2t
+átu2min
+átu2n
+á2t1u2r
+átu2sze
+á2t1u2t
+át1új
+á2t1úr.
+á2t1úrb
+á2t1úrh
+át1úri
+á2t1úrn
+á2t1ú2ro
+á2t1úrr
á2t1ú2s
-átü2
-á2t1ül
-át1üt
-át1üz
-1átvo
-á1u2
+á2t1üg
+át1ül
+á2t1üt
+á2t1ü2v
+át1űr
+1átvár
+1átvev
+á1u
+áu2ga
+áu2go
+áu2ná
+áu2no
+áu2nó
+áu2nu
+áu2sz
+áu2ta
+áu2tá
á1ú
-á1ü2
+áú2sz
+á1ü
+áü2ge
+áü2gy
+áü2le
+áü2lé
+áü2lö
+áü2lő
+áü2lü
+áü2rí
+áü2té
+áü2ti
+áü2tö
+áü2tő
+áü2tü
+áü2vö
á1ű
-áv1el
-áv1érz
+áv1adm
+á2v1ajk
+áv1akt
+áv1alk
+áv1alt
+áv1asp
+áva1st
+áva1sz2
+áva1t2
+á2v1au
+áv1azo
+áv1áls
+áv1áte
+áv1átf
+á2v1áth
+á2v1átj
+á2v1átk
+á2v1átu
+ávegész1
+á2v1e2l
+ável1é
+áv1é2de
+ávé1dr
+á2v1é2ri
+á2v1érte
+á2v1érté
+áv1fr
+á2v1iga
+á2v1igé
+áv1ind
+á2v1inf
+á2v1ing
+á2v1int
á2v1i2rá
-á2v1iz
-á2v1okt
-á2v1ús
-áz1abl
-á2z1aj
-áz1alk
-á2z1ann
-áza2t1e2
+á2v1iro
+á2v1i2si
+áv1isk
+áv1ism
+áv1izm
+áv1izo
+áv1ír
+á2v1ob
+á2v1olv
+á2v1op
+á2v1osz
+áv1órá
+áv1ör
+áv1ös
+áv1öv
+áv1őr
+áv1pr
+áv1sk
+áv1sp
+áv1st
+áv1tr
+á2v1ug
+á2v1ur
+á2v1ú2sz
+ávú2t
+á2v1úti
+á2v1úto
+áv1üg
+áv1ü2z
+á2z1abl
+áz1abs
+áza2dal
+áza2d1e2
+áza2dott
+áza2dü
+áz1ajt
+áz1akc
+á2z1a2kó
+á2z1akt.
+á2z1akta
+áz1aktá
+á2z1aktu
+áz1a2lap
+á2z1a2le
+á2z1alk
+áza2n
+á2z1ana
+á2z1ano
+á2z1any
+á2z1a2p
+áz1a2rá
+áz1arc
+áz1arm
+á2z1assz
+á2z1aszt
+áza2t1a2l
+áza2tan
+ázate2
+áza2t1el
+áza2t1ér.
+áza2t1érv
+áza2tés
+áza2tik
áza2tí
áz1aty
-á2z1a2v
+á2z1a2u
+á2z1á2g
á2z1á2l
-ázás1s
-áz1ea
-á2z1eg
+á2z1á2rai
+á2z1á2rak
+á2z1á2ram
+á2z1á2ras
+á2z1á2rat
+ázá2rár
+ázá2rát
+á2z1árb
+á2z1árc
+á2z1árd
+á2z1á2ré
+áz1árf
+á2z1á2ri
+á2z1árjáb
+á2z1árjáv
+á2z1árka
+á2z1á2rokk
+á2z1á2rokr
+á2z1árp
+á2z1árrá
+áz1á2runkn
+áz1á2runkr
+ázá3rus.
+ázás3s
+á2z1á2ta
+á2z1á2t1á
+áz1átb
+á2z1á2t1e2
+á2z1áté
+áz1áth
+á2z1átr
+áz1áts
+á2z1átü
+á2z1áz
+áz1bl
+áz1d2r
+áz1ef
+áz1e2g
+áz1e2m
+áz1ep
áz1e2r
-á2z1es
-áze2z
-á2z1eze
-á2z1ezré
+áz1e2s
+áz1e2t
+áz1ex
+áz1e2z
+á2z1ég
+á2z1é2l
á2z1é2p
-áz1éve
-ázhoz1
-á2z1igá
+á2z1ér.
+á2z1érő
+á2z1érte
+á2z1érté
+á2z1értő
+á2z1érz
+á2z1é2te
+á2z1éve
+áz1évi
+áz1fl
+áz1fr
+áz1g2r
+á2z1i2d
+á2z1igé
+á2z1i2kon
+á2z1ill
+á2z1imá
+á2z1imi
+áz1imp
+á2z1inf
á2z1ing
-á2zins
-ázi2s1em
+á2z1inj
+á2z1int
+á2z1i2par
+áz1irá
+áz1iro
+ázi2s1e
+ázi2sir
+ázi2s1í2
ázis3s
+ázi2s1ü
+ázi2szó
+ázi2z
áz1izm
áz1izo
-áz1k2
-2ázol
+áz1íj
+áz1í2v
+áz1k2l
+áz1k2r
+á2z1olda
+á2zoltal
+á2z1oltó
+áz1oml
+á2z1ont
á2z1o2r
-2ázos
á2z1osz
-á2z1ö
-á2z1ő
-ázs1aj
-ázs1ár.
-ázs1árá
-ázs1árh
-á2zs1e2
-á2zsé
-ázs1é2n
+ázói2ko
+áz1ól.
+áz1ó2rá
+á2z1óri
+ázó1s2p
+ázó1sz
+áz1öb
+áz1öd
+áz1ö2l
+áz1öm
+áz1ön
+áz1ös
+áz1ö2t
+áz1ö2v
+áz1öz
+áz1ő2r
+áz1pl
+áz1p2r
+á2zsab
+á2zs1a2d
+á2zs1a2g
+ázs1ajt
+á2zs1akn
+ázs1ala
+ázs1alk
+ázs1all
+á2zs1amu
+ázs1any
+á2zsar
+ázs1ará
+á2zsat
+á2zs1au
+á2zs1áll
+á2z3sár.
+á2zse
+áz3seb
+ázs1e2c
+ázs1ef
+ázs1eg
+ázs1e2l
+ázs1e2m
+ázs1es
+á2zséj
+á2zs1é2k
+ázs1éne
+á2zs1ére
+á2zs1éri
+ázsé2t
+ázs1éte
+á2zsia
á2zsiá
-á2zs1ig
+á2zside
+ázsi2g
+á2zs1iga
+ázs1igá
+á2zsige
+á2zsimm
+á2zs1ing
+á2zs1int
+á2zsinv
+á2zsió
+á2zsip
+ázs1isk
+á2zs1ita
+á2zsiz
+á2zs1í2
áz3sor
-áz3spa
-áz3sug
+áz3sóh
+ázs1ó2r
+á2zsö
+á2zs1ő2
+ázs1s
+á2zs1uj
+á2zs1ut
+á2zsúto
á2zsü
ázs1ü2v
á2z3sű
-2ázú
-á2z1ü2
-á1zy
+áz3szá
+ázs3zon
+áz1t2r
+á2z1ud
+á2z1ug
+á2z1uj
+á2z1u2r
+á2z1ut
+á2z1új
+á2z1úr
+á2z1ü2g
+ázü2l
+áz1ür
+áz1ü2z
+ázy1i
+áz3zse
+2b.
1ba
-baá2
-baba1
-ba2b1o2l
+baa2d
+ba2b1a2dat
+ba2b1ajk
+baba1k2
+ba2b1ara
+ba2b1arc
+ba2b1aszt
+ba2b1ábr
+babá2c
+ba2b1ácsi
+ba2b1ág
+bab1áll
+ba2b1á2ro
+ba2bátv
+ba2b1érc
+babé2t
+bab1éte
+ba2bév
+ba2bik
+ba2b1i2na.
+ba2bola
+bab1old
+ba2b1ó2r
+ba2b1ult
+ba2bü
+ba2c3hu
+ba2csor
+2b1a2dag
+ba2das
+2b1a2dato
ba2d1ár
-ba2del
-ba2der
-ba2des
-ba2d1i2
-ba2dot
-ba2dun
-badú2
-ba2d1ús
-bae2
-bago2
-2bajg
-ba2k1as
-ba2k1ál
-ba2k1in
-ba1krá
-ba2l1a2d
+ba2deg
+ba2d1e2s
+ba2dog
+2badomá
+ba2dód
+ba2dói
+ba2dój
+ba2dók
+ba2dót
+ba2duj
+ba2dús
+baegész1
+bae2r
+baé2r
+ba1fl
+ba1f2r
+ba2gai
+ba1g2n
+ba1g2r
+2b1agy.
+bai2z
+ba2jag
+ba2j1á2ru
+ba2j1á2to
+2bajkú
+ba2j1ó2r
+ba2jü
+ba2jű
+ba2k1a2pó
+2bakas
+ba2kaszt
+2ba2kác
+bak1á2cs
+bak1áll
+2bakc
+ba2keg
+ba2k1ér.
+ba2k1éri
+bak1k
+ba1k2li
+ba1klu
+ba2k1o2v
+ba1k2ri
+bak1t2
+2b1aktu
+baku2r
+bak1ura
+bak1urá
+ba2ky
+2b1alany
+2b1a2lál
ba2l1e2s
-ba2l1í2
-ba2l1ol
-2bals
-ban2ch
-banka2
-ban2kad
-ban2kal
+ba2l1í
+bal2lak
+bal2lan
+bal2lál
+bal2l1ás
+bal2láz
+balle2
+bal2leg
+bal2l1el
+bal2lem
+bal2les
+bal2l1é2l
+bal2lin
+bal2lór
+bal2té
+bal2tiz
+ba2lud
+2b1amp
+2banal
+2b1a2nat
+banás3s
+ban2c1e
+banc3s
+2b1angy
+ban2kab
+ban2k1a2d
+ban2k1a2l
+ban2kar
+banke2
+ban2ker
ban2kép
-ban2kin
-bart2
-bar1th
+ban2kérd
+ban2kir
+ban2kol
+banku2
+ban2kut
+ba2nyó
+bao2k
+bao2l
+baó2r
+ba1p2l
+ba1pro
+2b1arc.
+2b1arcé
+2b1arcn
+2b1arco
+2b1arcr
+bar2csad
+bar2csal
+bar2csan
+bar2csö
+2b1arcú
+2b1argu
+baro2ma
+2b1arté
+baság1g
ba2seb
-ba1sp
-ba2ue
-bau2t
+ba1slá
+ba1s2m
+ba1sni
+2b1aspe
+ba1s2pó
+bas3sze
+ba1s2ta
+ba1s2tá
+ba2t1esti
+ba1t2rá
+ba1tre
+ba1tré
+ba2ud
+2b1a2ul
+bau2r
+2b1a2vat
+ba1yi
1bá
+bá2bal
+bá2b1ass
bá2bál
+bá2b1es
+bá2bik
+bá2bö
+bá2b1ü
+bá2csor
bá2csü
+2b1á2ga
b1á2gú
-bá2gyu
+bá2gyal
+bá2gyar
+bá2gyott
+bá2gyö
+bá2gyú
+bá2j1e2
+báj2n1á
+bá2j1ó2
+bá2j1ö2
+báj2t1a2k
+bá2jü
bákos1
-bá2lan
+bá2laj
+bá2l1ap
+bá2l1e2
+bálé2
+bá2l1éj
+bá2lid
+bá2l1ing
+bá2l1i2o
+bál2is
+2b1állí
+2b1állo
+2b1állv
2bálm
-bá2ne
-2b1á2p
-bá2r1as
-2b1á2ru
-bá2s1é
+bá2lö
+bá2lü
+bá2lyad
+bá2ly1al
+bá2ly1a2n
+bá2ly1á2z
+báni2as
+bán2ré
+bánya2ié
+bá2po
+2b1á2rad
+2b1á2rai
+bá2r1aj
+2b1á2ram
+bá2rap
+bá2ras
+2bá2ra2t
+2b1á2ráb
+bá2rág
+bá2rár
+bá2r1ás
+2b1á2rát
+bár2das
+bár2d1á
+bár2de
+bá2r1e
+bá2rén
+2b1á2riá
+bár1i2o
+bá2r1i2p
+bá2rí
+2b1árny
+bá2r1ó2né.
+2báru.
+2báruf
+2b1á2rug
+2b1á2ruh
+2b1áruj
+2b1á2ruk
+2b1árur
+bár1u2ra.
+2bárus
+2b1árut
+2báruv
+2bárú
+bá2rúr
+bá2rü
+bá2s1á2ré
+bá2se
+bá2sis
+bá2sz1ak
+bá2szan
+bá2szas
+bá2sz1ál
+bá2sz1á2ru
+bá2sze
+bá2szil
+bá2szip
+bá2szí
bá2szö
-bá2t1a2
-2b1átd
-2b1átm
-bb1adh
-bb1adj
-bb1adu
-bb1adv
+bá2szü
+bá2t1a2k
+bá2t1al
+bá2t1á2
+2b1á2t1e2
+bá2tö
+bá2tü
+bb1a2da
+bb1add
+bb1a2kas
b2b1alk
-bb1als
-bb1ar
-b2b1ál
-b2b1e2g
-bb1ela
-b2b1e2le
-bbe2m
-b2b1eme
-b2b1esé
-bbes1s
-b2b1é2v
-bb1is.
+b2b1als
+b2b1alu
+b2b1alv
+b2b1a2ny
+b2b1ap
+b2b1a2ra
+bba2t
+b2b1au
+bbá2gyas
+b2b1áll
+bb1álm
+b2b1áp
+bb1árn
+bb1á2ru
+b2b1á2s
+b2b1át
+bb1dr
+bbe2g
+b2b1e2kén
+b2b1elv
+b2b1emb
+bb1eng
+bb1erj
+bb1ern
+bb1erő
+bb1e2rű
+bb1esté
+b2b1etn
+b2b1ex
+b2b1ég
+bb1él.
+bb1éle
+bb1élh
+bb1élj
+bb1éln
+bb1élt
+bb1é2lű
+bb1élv
+b2b1ép
+bb1érl
+b2b1érm
+b2b1érte
+b2b1érté
+bb1érv
+b2b1évi
+bb1fr
+bb1i2de
+b2b1iga
+bbigaz1
+bb1illa
+b2b1ind
+b2b1int
+b2b1inv
+bbi2tat
+b2b1itt
b2b1í2r
-bb1old
-bb1olt
-bb1olv
-bb1osz
-bbó2
-bb1ór
-bbö2
-b2b1öl
-bb1ör
-bb1ös
-bb1s2
+b2b1ív
+bb1kl
+bb1kr
+b2b1okt
+bb1oltá
+b2b1olv
+b2b1op
+bb1ott
+b2b1ób
+bb1ó2r
+b2b1ö2m
+bbö2r
+bb1örö
+b2b1ös
+bb1őri
+bb1őrz
+b2b1ő2s
+bb1pl
+bb1pr
+bb1sk
+bb1sp
+bb1st2
+bb1t2r
+b2b1ud
+b2b1u2g
+b2b1uj
+bbu2r
+bb1ura
b2b1u2t
+bbúgás1
+b2b1új
+b2b1ú2s
+b2b1üg
+b2b1ür
+b2b1üz
+bb1ű2z
+bb2ví
+bc3sz
+bda2cs1a2pá
+bda1d2
+bda1p2
+bda1s2
+bdasz2
+bda1t2
+bdé2n
+bd2rá
+bd2ro
+bd2ró
1be
-bea2
-beat1
-beá2r
+be2ac
+bea2d
+bea2j
+bea2k
+bea2l
+bea2n
+bea2r
+bea2s
+bea2t1e
+be2ati
+bea2tin
+be2atk
+be2atl
+bea2v
+beá2j
+beá2s
beá2z
-be2cs1á
-be1f
-be1gr
-bei2d
+be1bl
+be1b2r
+be2csar
+be2csár
+be2csért
+be2cs1é2te
+be2dén
+be2dz
+bee2l
+bee2s
+beé2r
+be1fl
+be1fr
+begés3s
+begész1
+be1g2r
+be2gyel
+b1egyl
bei2g
bei2s
+beí2r
+be2j1elt
+2bejt
+2b1e2ke.
+beke2csa
+2b1e2kétő
+be1k2ré
+be1kri
+be1kró
be1k2v
-be2lad
-be2lár
-bel1ér.
-be2lór
-be2lőa
-be2n1á
+be2lál
+beleí2
+bel1els
+be2lemz
+bele1p2r
+belet2
+bele1tr
+be2l1é2k
+be2l1ér.
+be2l1é2ren
+be2l1érr
+be2lí
+be2lof
+be2löl
+2b1e2lőa
+be2lőr
+bel1p2
+2bemel
+2b1eml
+b1e2mus
+be2n1ál
+be2n1ék
+ben2n1a2
ben2ná
-ben2tét
-beo2
-be1p2
+ben2n1e2r
+ben2nég
+be2ny1e2g
+beo2k
+beo2l
+beo2m
+beó2v
+beö2r
+be2pe.
+be2ped
+2b1e2pé
+be1p2l
+be1p2r
+be2r1ad
+ber1alá
+ber1all
bera2n
-be2rap
-be2r1ar
-be2ras
-be2r1ár
-be2r1e2g
-be2r1e2lő
+ber1any
+be2r1a2p
+be2r1a2r
+ber1ass
+be2r1a2t
+be2r1av
+be2raz
+be3rág
+ber1áll
+b1erdei
+2berdő
+ber1egé
+ber1egy
+be2r1e2ke.
+bere2k1eg
+be2r1ekék
+be2r1ell
+be2r1elm
+be2relődö
+be2r1előn
+be2r1e2mé
be2r1eml
-ber1e2pé
-be2r1ev
-be2rid
+be2r1e2pé
+be2r1e2r
+ber1e2szü
+be2r1e2tet
+be2rég
+be2r1ékk
+ber1éss
+ber1ingü
+be2rism
be2r1ist
-2b1e2rő
-ber1s2
+ber1iszo
+ber1old
+be2ror
+ber1osz
+be2ról
+be2r1ó2r
+be2rő
+2b1erőd
+ber1ős.
+ber1ő2se
+ber1ő2si
+ber1ő2sü
+ber3s2
+berta2n1á2s
+be2r1ub
+be2r1un
+be2rur
+be2r1ut
+be2r1ü2g
+berü2l
+be2r1üld
+be2r1ülé
+be2r1ült
+be2sem
+2b1esél
+2b1e2sés
be1ska
+be1ská
be1s2l
-besp2
-be1spr
-be1sr
+be1s2m
+2b1e2ső
+be1s2p2
+bessz1a
+bessz1á
+be1s2ta
+2beste
+2besté
+be1s2til
be1sto
-beu2
+2b1e2szet
+2b1e2szét
+b1eszm
+besz2t1a2
+besz2t1á
+beteg1ér.
+beté2t1elb
+beté2telk
+be1t2hi
+be1t2ra
+be1trá
+be1t2ré
+be1t2ro
+beu2g
+beu2t
+beü2t
+be2vező
+2b1e2vol
+2b1e2vő
+2b1ezr
1bé
+2b1ébr
+bé2csú
+bé2d1as
+bé2d1á
+2bédé
+2bédh
+2bédj
+2bédl
bé2d1o
-bé2du
-bé2let
-bé2lo
-b1é2lő
+bé2dö
+2bédr
+2bédü
+2bédv
+bé2gő
+bék1alk
+2b1éksz
+bé2l1akt
+bé2l1a2n
+bé2l1a2p
+bé2l1a2r
+bé2lál
+bé2l1áto
+bé2l1á2z
+bé2l1ed
+bé2l1e2g
+bé2lek
+bé2l1e2r
+2b1é2let
+bé2l1é2j
+bé2liz
+bé2lí
+2bélj
+bé2l1o
+bé2ló
+bé2lö
+2b1é2lő
+bélt2
+bél1tr
+bé2lul
bé2lú
-bé2lyi
-2b1é2p
-bé2ran
+bé2ly1ec
+bé2l3yen
+bé2lyin
+bé2lyö
+bé2pí
+bé2pü
+2b1é2rai
+bé2r1aj
+bé2ral
+bé2r1a2n
+bé2rap
+bé2rar
bé2rá
-bé2r1em
-bé2r1os
-2b1érte
-2b1érté
-bé2ru
+2b1éráb
+2b1éráh
+2b1éráv
+2b1érde
+bé2reb
+bé2r1eleme
+bé2r1e2lemé
+bé2r1e2lemh
+bé2r1e2lemk
+bé2r1e2lemn
+bé2r1e2lemr
+bé2r1ell
+bé2relm
+bé2r1elői
+bé2r1eng
+bér1essz
+bé2r1esz
+bé2r1id
+bé2rir
+bé2rí
+b1érni
+bé2rö
+bér1s
+bért2
+2bértel
+2b1értés
+bér1tr
+bé2rut
bé2rú
-bé2vi
+bé2sz1a2
+bé2szá
+bé2sz1o
+béta1s
+2bétel
+bé1t2h
+2b1étk
+2b1étt
+2b1év.
+bé2vek
+2b1é2ven
+2b1é2ves
+bé2vet
+bé2vi.
+2b1évn
+bé2zsú
+bfej1els
+bfe2len
+bfé2n
+bf2la
+bf2rá
+bf2re
+bf2ri
+bf2ro
+bg2ra
+bg2rá
+bgyökö2
+bgyö2k1öl
1bi
+bia2d
+bi2ae
+bi2ag
+bia2la
+bia2v
+bi1br
+bi1by
+bic3sz
+bida2
+bi2d1ad
+bi2d1al
+bi2deg
+bi2del
+2b1i2dő
bi2ed
-bi1f2r
-2b1i2gáb
+bie2l
+bi1fr
+bi2gaz
2b1i2gáj
+2bigén
+2b1i2hat
+bik1ala
+bi2k1ál
bi2k1em
-bi2kél
+bi2kik
+bi1klu
+bi2k1ő2
bi1k2ro
-bil1ant
-bi2l1ip
-2bime
-2b1ind
-bio1g2
+bik1s
+bil1ima
+bil1int
+bilis3s
+2billé
+2b1illő
+2billu
+bi2lü
+bi2ma.
+2b1i2mi
+2b1imp
+bi2nab
+2b1i2nad
+bi2naj
+2b1i2nat.
+bi2n1árb
+2b1indá
+bi2n1éte
+2b1inká
+bin3n
+bi2nü
+bi1ny
+bi2oa
+bi2oá
+bi2ob
+bi2oc
+bi2od
+bi2oe
+bi2oé
+bi2of
+bi2oge
bi2ok
bi2ol
bi2om
+2b1i2on
bi2or
-bi2os
-2b1i2rá
-bi1sc
-bi1sh
-bi2t1á2r
-bi2tip
-bi2tü
-2b1i2vad
+bió2r
+bi2par
+bi1p2l
+bi1pr
+2b1i2ram
+2b1i2rat
+2b1i2rán
+2birkái
+2birodá
+2b1irr
+2b1irtá
+2b1irtó
+bis2hi
+2b1i2si
+2bism
+bi2sö
+bi1s2p
+bis3s
+bi1s2to
+bit1ará
+bi2t1e2g
+bit1elh
+bit1elr
+bit1elt
+bite2r1a
+bi2t1ing
+bi2t1int
+bi2t1i2o
+bi2t1on
+bit1t2
+bit1ura
+bi2t1ut
+biú2s
+bi2var
+2b1i2vás
1bí
-2b1ív
-b1k2
-bl2
-bla1bla
-bla2k1e2
-bla1pr
-ble2t1ér
-ble2ti
-b1lj
+bí2ja
+bíróé2r
+bí2ve
+bí2vé
+bí2vű
+2b1í2zü
+bkés3s
+bk2li
+bk2lu
+bk2ra
+bk2rá
+bk2re
+bk2ré
+bk2ri
+bk2rí
+bk2ro
+bk2ró
+1b2labl
+blai2k
+blak1a2d
+bla2kal
+bla2k1an
+bla2k1átm
+bla2k1átt
+bla2kem
+bla2kik
+bla2k1ol
+bla2kü
+blap1e
+bla1p2l
+bla1s2t
+blás1s
+bl2be
+ble2r1i
+bles2
+ble2t1ak
+ble2t1a2n
+ble2t1á2
+ble2t1e2l
+ble2ter
+ble2tesz
+ble2tél
+ble2t1érd
+ble2t1étk
+bletigaz1
+ble2t1o
+ble2tó
+ble2t1ö2
+ble2tu
+ble2tüz
+bleü2
+bleves1s
+bl2he
+bli2af
+bli2as
+bli2of
+b1ljana
+bl2ne
1b2lok
-blu2
-blues1
-b2lú
-b1ly
-bmeg1á
+blok2k1ö2
+blo2n1á
+blon3n
+b2l1őzé
+bl2re
+bl2rő
+bl2tő
+blu2esz
1bo
-boc1c
+bo2aá
+bo2ab
+bo2ad
+bo2ae
+bo2af
+bo2ah
+bo2aj
+bo2am
+bo2ar
+bo2at
+bo2av
+bo2c1ak
bo2ce
+bo2cé
bo2c3h
+bo2csé
+bo1dy
+bo2ei
+bo1fl
+bo2g1a2k
+bo2g1a2t
+bo2g1á2c
+bogás1s
bo2g1e
-bok2sz1á
-2b1olda
+bo2g1osz
+bogó2szá
+bo2gyo
+boka1p
+2b1o2kí
+b1o2koz
+bok2szak
+bok2szal
+bok2sz1ál
+bok2szel
+bokszé2
+bok2szél
+bok2sz1in
+bok2szó
+bok2sz1ő
+2b1okta
+2bolaj.
+bolás1s
+2b1oldó
+2b1o2lim
bolo1g2
-bo2r1ad
-bo2ral
-bo2r1e2c
-bo2rén
-bo2r1is
-bor1itt
-bo2r1iv
-bo2se
-bos3zs
-bo2t1e
+bol2t1e
+bol2t1ö2
+bol2t1ü2
+2bolvas
+bona1
+bon1ava
+bon2can
+bon2c1e
+bon2ch
+2bond
+bo2n1e2
+bo2n1ér.
+bo2n1or
+bon2t1i
+bo2nü
+bo2og
+bo2ok
+bo2om
+bo2ot
+bo2pe
+bo2r1a2d
+bo2r1aka
+bor1akk
+bo2r1akv
+bo2r1a2l
+bora2n
+bor1any
+bo2rar
+bor1asz
+bor1atr
+bo2r1au
+bo2r1av
+bo2raz
+bor1ács
+bo2r1áll
+bo2r1áz
+bor1d2
+bo2re
+bor1e2c
+bor1el
+bor1e2r
+bor1es
+bor1f2
+borfi2úké
+bo2r1i2ko
+bo2r1il
+bo2r1ing
+bo2r1int
+bo2r1isk
+bo2r1iss
+bo2r1ist
+bo2r1itt
+bo2r1iz
+bor1k2
+2b1ornam
+bo2r1ond
+bo2r1ó2r
+bo2rö
+bo2rő
+2b1orr.
+2b1orrú
+bor2s1eprű
+bor2sors
+bor1str
+bor2sül
+bor2süt
+bor1tre
+bor1tré
+bo2rü
+borvíz1
+bor2z1á2rak
+bor2zsa
+bor2z3se
+2b1oszt
+bo2t1a2g
+bo2t1al
+bo2tar
+bo2tas
+bo2t1a2u
+bo2t1ác
+bo2tár
+bo2t1e2
+bo2t1il
+bot1inf
+bot1int
+bo2t1i2p
+bo2tí
+bo2t1ó2
+bo2tö
+bo2tur
+botú2
+bo2túr
+bo2tü
+bo2tű
+bo2ui
bo2ul
-bo2zé
+bo2ur
+bo1ya
+bo1yá
+bo1yé
+bo1yi
+bo1yo
+bo1yu
+bo2zar
+bo2zál
+bo2z1e2
+bo2zid
+bo2z1i2p
+bo2z1ir
+bo2zí
+bo2z1old
+bo2z3s
+bo2zü
+bo2zű
1bó
-bó2rá
+bóa2d
+bóá2g
+bóá2r
+bó2bé
+bó2cal
+bó2ch
+bó2cü
+bó1fl
+bó1kré
+bóli2a
+b1ólm
+bó1p2l
+bó1p2r
+bó2r1ad
+bó2r1an
+bó2rat
+2bórá
+bó2rás
+bór1ásv
+bó2reg
+bó2rel
+bó2r1in
+bó2riz
+bó2r1ol
+bóró2
+bó2rós
+bó2rö
+bórt2
+bó2rü
+bó1s2p
+bó1sz
1bö
-bö2n1
-2b1öv
+bö2ch
+bö2lá
+2bölb
+böl2csü
+2b1ö2lér
+2bölhö
+2bölig
+2bölk
+b1ölkú
+2bölr
+2b1öltö
+2böltő
+bö2lú
+bö2lyökö
+b1öml
+bö2ná
+2b1önt
+bö2ra
+bö2r1e
+bö2ro
+2b1össz
+2b1ötl
+2b1öts
+bö2ve
1bő
-bő2r1a
-bő2rá
-bő2reg
-bő2rel
-bő2rin
-bő2r1o
-bő2ru
-bőr1ü2l
-b1p2
-br2
+bő2r1a2
+bő2r1á2
+bő2r1e2g
+bő2r1e2l
+bő2r1em
+bő2r1en
+bő2r1e2r
+bő2r1é2g
+bő2rék
+bő2r1és
+bő2ril
+bő2r1ing
+bő2rip
+bő2r1i2s
+bő2riz
+bőr1izg
+2bőrl
+bő2r1o2
+bőr1öl
+bő2rő
+bőrren2
+bőr1s2
+bő2r1u
+bő2rú
+bő2r1ü2g
+bő2r1ü2l
+2bősi
+bp2la
+bp2lá
+bp2le
+bp2re
+bp2ré
+bp2rí
+bp2ro
+b1proj
+bp2ró
+bra2k1á2
+bra2kös
+bra1p2
+1braty
+brá2nag
+brá2nas
+brá2n1át
+bránt2
+brá2sz1ál
+brá2sze
+b2ric
+bri2da
+bri2dá
+bri2der
1b2rig
-bsé2gel
-bsz1t2
-b1t2
+bri2no
+bri2ód
+bri2óf
+bri2óm
+bri2tel
+b2rosú
+bró2m1a
+bró2me
+1b2rum
+bsé2g1el
+b1s2ká
+bs2lá
+bs2pe
+bs2pi
+bs2po
+bs2ta
+bs2tá
+bs2ti
+bs2tí
+bs2tú
+bszá2r1a2da
+bsz2f
+b1sz2k
+bsz2tá
+btermo1
+btermosz2
+bt2rá
+b1t2re
+bt2ré
+b1t2ri
+b1t2ro
+b1t2ró
1bu
-2b1ujj
-buk2je
-bu2n1á
+bu2ch
+2b1udv
+bué2r
+bu2g1i2
+bu2il
+2b1ujj.
+2bujja.
+2bujjad
+buj2j1a2da
+2bujjai
+2bujjak
+2bujjam
+2bujjas
+2bujjat
+2b1ujjá
+2bujjb
+2bujjc
+2bujjd
+2bujje
+2bujjé
+2bujjf
+2bujjg
+2bujjh
+2bujji
+2bujjk
+2bujjl
+2bujjm
+2bujjn
+2b1ujjo
+2bujjp
+2bujjr
+2bujjs
+2bujjt
+2bujju
+2bujjú
+2bujjv
+buk2j1e
+bu2maj
+bu2mel
+bu2m1i2k
+bu2m1ina
+bu2mis
+bu2mol
+2b1ural
+b1urb
+2burn
+2b1u2rú
+bu2se
+bu2sin
+bu2sol
+bu1s2p
+bus3sze
+bu2szab
+busz1aj
+bu2szal
+bu2szas
bu2sz1ál
-bu2tó
+bu2sz1á2rak
+bu2sz1árn
+busz1en
+bu2sz1él
+bu2sz1é2p
+bu2szid
+bu2sz1il
+bu2szim
+bu2szin
+bu2szip
+bu2sziz
+buszí2
+busz1íj
+busz3s
+bu2szü
1bú
-bú2sz
-búzás1
+bú2jí
+2búr.
+2b1ú2ri
+2búrt
+2búsz
+bú2szá
+b1ú2ti
+b1útm
1bü
-2b1üz
+bü2dü
+bü2ge
+bü2gy
+bü2ku
+2b1üld
+bü2l1é2n
+bü2ne
+2bürü
+2b1ü2te
+2b1ü2té
+b1ü2tő
+2b1ü2ve
+bü2ze
1bű
-bű2v1e
-bvá2nyé
-bve2g
-bvegy1
-1by
-by2t
+bű2na
+bű2ná
+bű2nel
+bű2nem
+bű2nes
+bű2n1e2t
+bűn1n
+bű2no
+bű2nó
+bű2n1ő2
+bű2nu
+bű2nű
+bű2ri
+bű2v1e2
+bű2z1a2
+bű2z1á
+bű2zo
+bű2z1ő
+bű2z3s
+bvá2nyad
+bvá2nyí
+by2te
+2c.
1ca
-2c1a2la
-2c1alk
-cam1b
-ca2ny
+2c1abl
+ca1b2r
+ca2cél
+ca2ch
+ca2dás
+2c1a2dó
+ca2es
+caéne2
+ca1fro
+2c1agg
+ca2gya
+cagy1a2d
+ca2gyu
+2c1ajk
+2c1a2kad
+ca2kác
+ca2k1áz
+2c1akc
+cak2kol
+cak2k1ö
+ca1kri
+cala2g1
+ca2lan
+ca2l1a2s
+2c1albu
+ca2l1este
+ca2l1é2l
+calé2t
+cal1éte
+ca2lim
+ca2l1ip
+cal1osz
+cal1p
+cal1s
+ca2lü
+ca1ly
+ca2nal
+ca2nar
+2c1a2ni
+can2ne
+caó2r
+ca2pó
+ca1p2ró
+ca1p2s
+ca2ran
ca2rán
-catá2
+2c1arc
+ca2ris
+ca1s2p
+2c1assz
+cast2
+ca1sto
+ca1str
+2c1aszt
+ca2tau
ca2tem
2c1atl
-caus2
+c1a2uk
+cau2n
+ca2vat
+2c1a2zo
1cá
-2c1á2g
-cá2l
-2c1áll
-cá2po
-2c1árk
-2c1á2sá
-c2c1e2v
-c2ch
-c2c1í2
+2c1ábr
+cá2ga
+cá2gú
+cá2gy
+cá2la
+c1állá
+2c1álm
+cá2ne
+cá2nét
+cá2nir
+cá3p2a3
+2c1á2po
+2c1á2rad
+2c1á2rak
+cá2r1as
+cá2ria
+cá2riá
+cá2r1i2n
+2cárk
+2c1árp
+2cáru.
+2c1á2ruh
+2cárus
+cá2sás
+2c1á2só
+2c1ásv
+2c1á2szai
+2c1á2szo
+2c1á2t1a2
+c1áth
+2c1á2t1i2
+2c1átm
+2c1átr
+2c1átt
+2c1á2tü
+2c1átv
+cb2lo
+cb2ra
+c2c1a2j
+c2c1ak
+cc1alb
+cc1a2ny
+c2c1a2r
+c2c1au
+c2c1ág
+c2c1ál
+cc1bl
+cc1ef
+c2c1elm
+c2c1ember
+c2c1ép
+c2c1ér.
+c2c1érte
+cc3he
+cc3hí
+c2c3ho
+cc3hő
+cc3hú
+c2c1i2m
+cci2na.
+cc1ing
+cci2óv
+cc1i2pa
+cc1iro
+c2c1i2z
+cc1ír
+cc1kl
+cc1k2r
+cc1oá
+c2c1ov
+cc1ön
+cc1ös
+cc1öz
+cc1pl
+cc1pr
c2cs
c3csap
-c3csi
-c3csí
-cc3sor
-ccs1ön
+c3csar
+ccs1as
+c3csat
+ccs1ál
+c3csáp
+ccs1ás
+ccs1átl
+ccs1eg
+ccs1elem
+ccs1ell
+ccs1elv
+ccs1embe
+ccs1eml
+c3csep
+ccs1él
+ccs1érté
+ccs1iv
+c3csop
+ccs1ork
+cc3soro
+ccs1ö2l
+ccs1önt
+ccs1s
+ccs1ut
c3csú
-cda2lé
+c3csű
+cc3sza
+cc3szá
+ccs3zen
+cc3szó
+cc1új
+c2c1üg
+cc1ür
+cc3zá
+cc3ze
+cc3zs
+cda2l1é2
+cda2l1i
+cde2m1e2ké
+cde2m1el
+cd2ra
+cd2rá
1ce
-ce2dén
+cea2l
+ce2at
+ce2au
+ceá2r
+ce2béd
+ce1bl
+ce2ch
+cec3he
2c1e2dz
-ceg1ér
-2c1e2gy
-ce2lem
-ce2lők
-ceo2
-ce1ph
+ce2gas
+ce2g1é2k
+cegés3s
+ce2gina
+ce2gor
+ce1g2rá
+ce2gu
+ce2gú
+c1egy.
+c1egyb
+ce2gyen
+c1e2gyi
+c1egym
+c1egyr
+2c1egys
+2c1e2ke.
+ce1kl
+2c1elad
+2c1e2lág
+cel1ér
+2c1elf
+2c1elha
+2c1eljá
+2c1e2los
+c1e2lőa
+2celődöt.
+2c1e2lőf
+2c1e2lőí
+c1e2lőő
+2c1első
+2c1eltá
+c1elto
+2c1elvá
+2c1e2melő
+2c1eml
+cenc1c
+cen2c1eg
+cen2c3s
+2c1eng
+cen2s1ég
+cen2tau
+ceo2l
+ceo2r
+2c1e2pe.
+2c1e2pi
+ce1p2r
+cep2sz1a2
+cep2sz1é2p
+cep2szi
+cep2t1a2
+cep2t1ér.
+cep2tim
+cep2t1ol
+2c1e2rej
+ce2róz
2c1e2rő
-2c1eszt
-2cetb
+cer2t1a2
+certá2
+cer2tár
+cer2teg
+cer2t1e2l
+cer2t1emb
+cer2t1est
+cer2tél
+cer2t1én
+cer2t1ol
+cer2t1ö
+cer2tu
+certü2
+cer2t1üz
+ce2sem
+2c1e2sés
+2c1e2ső
+ces2t1é2j
+ces2t1ék
+ce1stra
+ce2t1e2g
+ce2t1essz
+ce2t1esz
+ce2t1é2t
+2ceth
+cet1ill
+ce2t1i2n
+ce2tiz
+2cetn
2ceton
+ce1t2ra
+ce2t1us
+ce2tűd
+cetű2z
+ceü2t
+ce2vés
+ce2vő
2c1e2zer
-2c1ezr
+2cezrede
1cé
-cé2ga
-cé2gel
-cé2g1o
-cé2lab
-cé2l1ar
-cé2l1á2
-céle2
+2c1ébr
+cé2dél
+cé2g1a2
+cé2g1á2
+cé2g1eg
+cé2g1e2l
+cé2ge2r
+cég1ere
+cég1eré
+cé2g1esem
+cé2geté
+cé2gető
+cé2g1ék
+cé2gép
+2c1é2gés
+cég1g
+cé2g1i2d
+cég1iga
+cé2gigé
+cé2gim
+cé2gir
+cé2g1iz
+cégo2
+cé2g1ok
+cé2gol
+cé2gó
+cé2gö
+cé2g1u2
+cé2gú
+céha2
+cé2hal
+cé2han
+cé2har
+cé2hed
+cé2h1e2g
+cé2hir
+cé2hu
+cé2hú
+2c1éks
+cé2la
+cél1a2n
+cé3lap
+cél1a2r
+cé2láb
+cé2lál
+cé2l1á2r
+cé2l1á2t
+cé2le.
+cé2led
cé2leg
+cé2lei
cé2lek
+cé2l1e2l
cé2lem
+cél1emb
+cé2len
cé2l1er
-cé2lip
+cé2l1e2s
+2c1é2let
+2c1é2lez
+cé2léb
+cé2l1é2k
+cé2lénk
+cé2lép
+cé2lére
+cé2lés
+cé2lim
+cé2lin
cé2lir
+cé2l1is
cé2liz
-cé2lö
-cé2lő
+cé2lí
+cé2ló
+cé2l1ö2
+cé2l1ő2
+célt2
+cél1tr
+célu2
+cé2l1ut
+cé2lü
+2c1é2lű
cé2pí
-cé2ret
-2c1é2ri
+cé2pü
+cé2rag
+2c1érd
+2c1é2rés
+cé2rin
+2c1érint
+cé2ris
+cér1s
+2c1érté
+2c1értő.
+cé2rú
+2c1érz
cés3s
-c1év.
+2c1észh
+2c1étk
+2c1étt
+2c1év.
+2c1évad
+2c1é2ve.
+2cévei
+2c1é2vek
2c1é2ven
2c1é2ves
-2c1é2vi
+2c1é2vet
+2c1é2vét
+cé2vi.
+2c1évn
+2c1é2vü
+cf2ló
+cf2ra
+cf2ri
+cf2ro
+cg2ra
+cg2ri
c2h
1cha
-cha2e
+c3had
+2c3haj
+2cham
+2chang
+2c3harc
+2charm
+2chatá
+2c3hav
1chá
+2c3hám
+c3hány
c3ház
+ch1bl
1che
-2che.
-chel2
-chet2t
+2c3heg
+2chev
+2c3hez
1ché
1chi
+2c3hib
+2c3hió
+2chitel
+2chitet
+c3hiú
1chí
1cho
+cho1d2
+2c3hor
+2c3hoss
1chó
1chö
1chő
-ch2ro
-2chu
-2chú
+ch1pr
+ch1sc
+ch1sp
+1chu
+chu2r
+2c3huz
+1chú
1chü
1chű
1ci
+ci2aa
+ci2aá
+cia1b2
+ci2aba
+ci2abo
+ci2abr
ci2ac
-ci2af
+ci2a1d2
+ci2ae
+ci2aé
+cia1f
+cia2fag
+ci2afr
ci2a1g2
-ci2aku
+ci2ah
+ci2aik
+ci2aí
+ci2aj
+ci2akar
+ci2akas
+ci2akén.
+ci2akó
+ci2ala
+ci2alá
+ci2ale
+ci2alé
+ci2alo
ci2am
-ci2ap
+ci2any
+ci2ao
+ci2aó
+ci2aö
+ci2aő
+ci2a1p2
ci2ar
+ci2asza
+ci2aszá
+ci2aszé
+ci2aszo
+ci2aszó
+cia1t2
+ci2ata
+ci2atá
+ci2até
+ci2ato
+ci2atű
+ci2au2
+ci2aú
+ci2aü
+ci2aű
ci2av
ci2az
+ciá2lan
+ciá2nár
+ci2áó
+2c1i2deg
+ci2deo
+2c1i2dé
+2c1i2dom
2c1i2dő
+cie2r
+2c1ifj
+2c1i2ga.
+2c1i2gaz
+ci2ge.
ci1g2r
-2cii
-2cing
-ci2o1g2
+ci2ker
+cikka2
+cik2kaj
+cik2kan
+cik2k1o
+ci1k2la
+2c1ikrá
+ci2l1á2t
+2cillu
+ci2mit
+2cimpu
+ci2n1al
+ci2n1árt
+cin1d2
+ci2n1e2re
+2cinf
+2c1inge
+2c1ingr
+ci2nim
+cin2kac
+cin2k1a2l
+cin2kért
+cin2kol
+cin2kors
+cin2kö
+ci2nö
+cin2tar
+cin2t1es
+cinus1s
+ci2nü
+2c1inv
+ci2od
+ci2of
+ci2og
+cio1gra
+ci2oi
ci2ol
+ci3olo
+2c1i2onn
+ci2op
+cio2v
ci2óa
+ci2óá
ci2óc
-ci2ófe
-ci2ófé
-ciókész1
+ci2ódar
+ci2óe
+ci2óg
+ci2óí
+ci2ókal
+ci2ókam
+ci2óká
+ci2óke
+ci2ó1kl
+ci2ókom
+ci2ókos
+ci2óku
ci2ól
-ci2órá
-ci2óta
-2cispán.
-ci2szi
-cito1
-2c1izma
-2c1izmo
-ci2zom
+ci2ómag
+ci2ómá
+ci2óné
+ci2óo
+ci2óó
+ci2óö
+ci2óő
+ci2ó1p
+ci2ósá
+ci2óse
+ció2s1ér
+ci2ó1s2ká
+ci2ószo
+ci2ótá
+ci2óú
+ci2óü
+ci2ózón
+ciő2r
+ci2rat
+2c1i2rán
+2c1i2rod
+2c1irt
+ci2si.
+2c1isko
+2c1ism
+2c1isp
+ci1stad
+ci2sz1i
+ci2t1aj
+citá2r
+cit1ár.
+cit1ára
+cit1áré
+cit1áro
+cit1érr
+ci2tik
+ci2t1ol
+ci1ty
+ciumi2
+ciu2min
+ciu2m1io
+ciumköz1
+ciu2t
+2c1i2vad
+2c1i2vás
1cí
-cí2ma
-cí2mi
-2c1í2rá
-2cív
+cí2ja
+cí2jé
+cí2m1a2
+cí2m1á
+cí2m1e2l
+cí2m1é2l
+cí2mí
+cí2mo
+cí2mö
+cí2mő
+cí2mu
+cí2rá
+cí2ró
+cí2vá
cí2ve
+cí2vé
cí2zs
-cké2t1
-c2k1í
+cí2zü
+ckaka2
+c2k1alj
+c2k1arc
+cka2rom
+c2k1ág
+ck1áll
+c2k1árn
+c2k1e2g
+cke1p
+1cker.
+1ckerk
+1ckern
+cké2p1e2l
+c2k1é2ré
+c2k1érl
+c2k1érté
+ck1fl
+ck1fr
+ck1ill
+c2k1íz
+ck1kl
+ck1k2r
+ck2lu
+c2k1o2la
ck1o2pe
-ck2ré
-ck2ri
-1c2ky
+c2k1orro
+c2korru
+c2korrú
+1c2kosak
+c2k1ou
+c2k1öb
+ck1öss
+ck2reá
+c1k2ri
+c1k2rí
+ck1sp
+c2k1üg
+ck1ült
+c2k1üt
+c2k1ü2v
+ck1űr
+ck2va
+cli2s
+clu2b1a
+cmelo1
+cnya2k
+cnyol2c1an
1co
-co2lig
+co2at
+co2áz
+co2be
+co2eu
+co2kar
+co2ká
+co2ke
+co2kél
+co2kép
+2c1o2kí
+2c1o2laj
+co2l1áro
+2c1olda
+2c1oldá
+2c1oldó
+co2le
+co2l1ibr
+co2li2m
+col1ima
+co2l1i2na.
+co2l1ind
+co2l1ing
+co2l1inu
+co2l1o2r
+2colvad
+2colvas
+comba2
+com2bal
+com2b1e2
com2biz
-co2o
-2cori
-2cország.
-2c1osz
-co2u
+com2bol
+com2bór
+com2bö
+2c1oml
+co2ol
+2c1o2pe
+cop2f1ő
+co1py
+2c1orc
+2c1o2ri
+2c1orm
+c1o2rom
+2c1orro
+2c1orrú
+2corv
+2c1oskol
+co2s1o2ku
+cos3s
+cos3zs
+2c1oszt
+co2ul
+co2un
+co2uv
+co2vi
1có
+c1ó2ni
+2c1ó2rá
+c1ó2ri
+có2vó
1cö
-c1ö2le
-c1öln
-cö2t
+c1öltö
+c1ösv
+c1ösz
c1ötb
-c1öt1e
-c1öté
-c1ötö
+c1ö2t1e
+c1ö2té
+c1ötf
+c1öth
+c1ö2ti
+c1ötk
+c1ötm
+c1ötn
+c1ötr
+c1öts
+c1ött
+c1ö2tü
+c1öv.
+cö2zö
1cő
-c1p2
+cő2rü
+cp2la
+cp2ra
+cp2re
+cp2ré
+cp2ri
+cp2ro
+cp2ró
c2s
1csa
-cs1abl
-2cs1a2d
-cs1ass
-csa2sz
-3csat
+2csabl
+2cs1a2dat
+2cs1a2dá
+2cs1a2dó
+2cs1akc
+csa2lakj
+csa2lapú
+2csaláí
+2csalát
+2csalb
+2cs1alg
+2cs1alk
+cs1alle
+2cs1alm
+csa2lomb
+cs1amb
+2csant
+csa2pál
+2csapka
+2csapká
+csa2por
+2csapóká
+2csapókr
+2csapósab
+2cs1arc
+2csarg
+2csark
+2cs1arz
+2cs1ass
+csa2t1ó2r
+csavar1a2
+cs1azo
1csá
+csá2be
+2csáf
2cság
-c3ság.
-cs1ágú
+cs1á2gak
+cs1á2gu
+2cs1árad
+2cs1á2rak
+2csáram
+2csárat
+csá2rát
+2cs1árny
+cs1á2ruk
2cs1ásá
-2csásó
-2csátí
+2c3sási
+2cs1ásó
+2csátásás
+2csátf
+2csátm
+2csátr
+2csáv.
+2c3sávo
+cs1bl
+cs1br
+cs1d2r
1cse
-2cselc
+2csebé
+cs1e2ce
+cse2csa
+2cs1e2dé
+2cs1edz
+cs1eff
+cs1e2ges
+2csegí
+2cs1e2ke.
+2cself
+2csellá
+2cselőí
+2cselta
+2cseltá
+2cselv.
+2c3sely
+2cs1ember
+2cs1e2mel
+2cseml
+2csemu
+csen2d1ő2
+cse2nis
+cse2n3yen
+2csenz
+cse1p2ré
+cse2rál
+cse2r1e2ped
+2cseró
+2cserő
+2cseső
+2cseszm
+cse2tüz
2csevő
+2cs1ex
1csé
-2c3ség
+2cség
+c3ség.
+c3ségb
+c3ségg
+c3ségh
+c3ségi
+c3ségn
+c3ségr
+2cséhes
+2cséhs
+2cs1é2ka
+2cséks
+2cs1éle
+csé2m1a
+2csénekb
+2cséneke
+2cséneké
+2csénekk
+2csénekr
+2cséneks
+2csénekt
+2csénekü
+2csépí
+2csépü
+2csérde
+csé2résk
+2c3sérv.
+2csérvb
+2csérvh
+2csérvr
+2csérvv
+2csérz
+csé2sza
+csé2tab
+2csév.
+2csévek
+2csévn
+2csévr
+2csévv
+cs1fr
+cs1gl
+cs1gr
1csi
-2cs1ita
+csiá2
+2csidő
+2csigé
+2csimí
+2csimog
+2csimpo
+2cs1i2na.
+2csinas
+2cs1ind
+2cs1inp
+2cs1inv
+2csiono
+2csipí
+2csiví
+2csivó
1csí
-cs1í2v
-cs1k
+2csíki
+2c3sírb
+2c3sírj
+cs1í2ró
+2cs1í2v
+2csíze
+2csízl
+cs1ízn
+2csízt
+cs1ízü
+cska1s
+cskasz2
+cs1kl
+cs1kv
+c3slág
1cso
+2cs1o2á
+2csobj
+cso2k1á
+2csokk.
+2csokoz
2csolaj
-3cson
-3csop
-2cs1orr
-c3sorv
+2csolda
+2csoldá
+2csoldó.
+2csoldók
+2csoldóm
+2csoldón
+2csoldór
+2csoldót
+2csoldóv
+2cs1oli
+2csolló
+2csolvas
+cso2mor
+cson2t1a2
+2csopc
+2cs1orc
+2csori
+2csork
+2c3sorv
+2csoszl
+2csoszt
1csó
+cs1ódá
+csó2kes
+csó2k1ö2
+2cs1óné
1csö
-2csönte
+2csökrü
+cs1öml
+csön3n
+2csör.
+c3söre
+2csössz
+2csöv.
+2csözön
1cső
-cs1p2
-cs3s
-cs1t2
-c3s2tí
+3cső.
+3csőb
+csőé2h
+2csőrz
+cső2sz1á2ra
+cső2szék
+cső2sző
+3csőv
+c3s2pek
+cs1p2l
+csp2r
+cs1ps
+cs1sl
+cs1s2p
+cs1s2t
+cs3sz2
+cssza2kü
+c3s2tab
+cs2top
+cst2r
+c3stru
1csu
+2csudv
+2csug
+2c3suho
+cs1ujj
+2cs1una
+2csuni
+2cs1ura
+2cs1u2rá
+cs1u2tas
+2cs1utá
+cs1utó
1csú
+csú1p2
+2csútn
1csü
-cs1üll
-cs1ü2té
-c3süv
-2csüz
+2csüd
+2csügé
+2csügy
+2cs1ünn
+cs1ü2te
+2c3süv
+2cs1üz
1csű
-c3sza
-c3száz.
-c3szem
-c3szes
+c4s3zac
+cs3zaj
+csza2ké
+cs3zam
+c3szál
+c3szám
+cs3záp
+cs3zát
+c3száz
+c3sz2c
+c3szer
+c3szé
+c3sz2f
+c3szi
c3szí
-c3szo
-c3szö
+c3sz2l
+c3szob
+cs3zokn
+c3szol
+cs3zon
+c3szor
+cs3zón
c3sző
cs3zs
-ct2
-c1tr
+csz2t
+cs3zug
+cs3zú
+c3szü
+c3szű
+c3sz2v
+ct2ra
+ct2re
+ct2ré
+ct2ri
+ct2ro
+ct2rü
1cu
-2c1utc
+cucci2
+cuc2cin
+cuko2r1a
+cula2te
+cu2lü
+2c1und
+2c1u2no
+2c1u2ra
+2c1u2tá
1cú
+cú2jí
+c1úr.
+c1úrr
+c1ú2ti
+cú2to
1cü
-2c1üg
+cü2ge
+cü2gy
+2c1ü2lé
+cü2lő
c1ünn
-2c1ü2r
-2c1ü2v
+cü2re
+cü2rí
+cü2rü
+cü2te
+cü2té
+cü2tő
+cü2ve
+cü2ze
1cű
-1cy
+cű2ző
+cva2nem
+cva2név
+cve2név
+cven3n
c2z
1cza
+cza2ib
+cza2ié
+cza2ih
+cza2ik
+cza2in
+cza2ir
+cza2it
+cza2iv
1czá
1cze
2c3zen
-cze2ö
1czé
+c3zéh
1czi
1czí
1czo
1czó
1czö
1cző
-c3zs
1czu
1czú
1czü
1czű
1czy
+2d.
1da
-daá2
-2d1abl
-2d1add
+daa2d
+daát1
+2d1abla
+da2c1ir
+da2cz
+da2dag
+dad1ala
+2dadato
2d1a2dó
-dae2
-da1g2ro
-da2hán
-dai2g
-da2lab
-da2l1aj
-da2lat
-da2lág
-da2l1e2l
-da2l1im
-dal1l
+da1drá
+da1dro
+dae2r
+daé2d
+daé2r
+da1f2l
+da1f2r
+da2g1el
+dag3g
+2d1ahh
+da2ire
+2d1a2ján
+2d1ajt
+2d1a2kad
+daká2r
+2d1akkora
+d1akku
+da1kl
+da1k2ré
+da1k2ri
+2d1aktu
+dal1a2ga
+dal1ajt
+da2lakj
+da2l1akta
+da2l1aktá
+da2laku
+da2lakú
+2d1alakz
+da2l1a2l
+da2lapc
+da2lapk
+da2lapn
+da2lapr
+da2l1aps
+da2lapt
+2d1a2lapú
+da2lar
+da2l1asz
+da2latt
+da2l1á2g
+da2l1ál
+dal1á2rak
+dal1árá
+da2l1árb
+da2l1árn
+da2l1árr
+dal1á2sz
+da2l1áti
+dale2l
+dal1elá
+dal1ele
+dal1ell
+dal1e2sé
+dalé2ke2
+dal1él.
+da2l1é2ne
+da2l1ér.
+dal1f2
+da2lid
+da2l1i2ko
+da2l1ikr
+da2l1i2m
+da2l1i2nát
+da2lind
+da2l1inf
+da2l1ing
+da2l1inj
+da2l1int
+da2l1i2nu
+da2l1itt
+dali2z
+dal1izo
+2d1alji
+dal3l
+2d1allo
+dalo2m1e
+dalomo2
da2l1or
-da2l1ó2r
-da2ma.
-da2maz
-da2mel
-2d1ann
-da2nyá
-daó2
+da2lőr
+dal1p2
+dal1ud
+da2l1ur
+da2l1u2s
+da2l1u2t
+dalú2t
+da2l1úto
+dal1útr
+da2lü
+2d1amc
+2d1amf
+2d1a2nal
+2d1ang
+d1a2nyag
+2d1a2nyó
+dao2k
+daó2r
+daó2v
2d1a2pa.
-2dapai
-2dapak
+2d1a2pai
+da2paké
+da2páb
+da2pád
+da2páé
+da2páh
+da2pái
da2pák
+da2pám
da2pát
-da1p2f
+da2páv
+2d1apj
da1p2l
-da2pó
+da2pó.
+2d1app
+da1pro
+da1p2s
+2dapt
+dara2be
+da2r1a2dó
+dar1ala
+da2rant
+da2r1azo
+da2r1áta
+da2r1átf
+dar2c1e2
dar2c3h
dar2cso
-da2rel
-da2r1é
+2d1arcú
+dar2d1a2l
+dar2d1á
+dar2del
+dar2d1es
+dar2d1ó2
+da2r1el
+da2r1il
+darus3s
+dar1uta
+da2r1ü
+da2sál
+da1s2l
da1spe
-dast2
-da1str
-2d1aszt
-da2t1ag
-dat1ala
-dat1alk
-dat1áll
-2datc
-da2t1eg
-da2t1em
-da2téh
-da2t1és
-da2t1in
-da2top
+2d1assz
+da1s2ta
+da1szl
+daszt2
+dasz2tá
+2daszú
+da2t1akt
+da2t1akv
+da2t1a2la
+da2t1alk
+dat1apu
+dat1ará
+dat1ass
+da2t1att
+da2taz
+da2t1áll
+da2t1árad
+datá2ramm
+datá2ramr
+da2t1áta
+da2t1átá
+da2telem
+dat1e2l1é
+dat1elí
+da2t1elk
+dat1ell
+da2t1elő
+dat1elt
+da2t1é2g
+da2térte
+da2t1érté
+da2t1érth
+da2t1érv
+da2tid
+dati2k
+da2t1iko
+da2tim
+da2t1inf
+dat1inte
+dat1ist
+da2tiz
+da2t1ír
+dat1íve
+dat1k2
+2d1atlas
+da2t1osz
+da2tóc
+2datóm
+da2t1ó2r
+dató2s
+dat1ósá
+dat1t2
+da2t1u2t
da2tút
-2d1a2ty
-da2z1á
-da2zé
+da2tűr
+da2tya
+da2tyá
+2d1a2uk
+da2up
+2d1a2ur
+dau2s
+dau2ta
+da3u2tóp
+daü2t
+daü2z
+2d1a2vat
+2d1avv
+da1ye
+da1yé
+2d1az.
+da2zál
+2d1a2zé
+da2zok
+da2zon
1dá
-dáb2
-2dá2g
-2d1állá
-dá2n1iz
-dára2
+2d1á2bé
+2d1ábr
+dá2c3ho
+dá2fá
+dá2ga
+dá2gá
+dá2gú
+2d1á2gy
+dá2lál
+dá2lár
+dá2l1e
+2d1állí
+dá2lü
+dá2ly1a2n
+dályú2
+dá2ly1ús
+dámu2
+dá2m1ut
+dá2m1ú
+dá2ny1a2d
+dá2ny1al
+dá2ny1a2n
+dá2nyaz
+dá2nyó
+dá2po
+2d1á2rad
dá2r1ag
+2d1á2rai
+dá2r1a2j
dá2ral
+2d1á2ram
+dá2r1a2n
+dá2r1a2p
+dá2rar
dá2ras
+dár1ass
+dá2rat
+dár1atk
+dá2rá
+dár1ál
dá2r1e2
+dá2réb
+2d1á2ria.
dá2rij
-dá2rit
-2d1á2ru
+dá2ril
+dá2r1i2p
+dár1isk
+dár1ism
+dá2rí
+dá2rod
+dá2r1ond
+dá2r1ot
+dá2rö
+dá2rő
+dár1s2
+dárt2
+dár1tr
+2dáru.
+dá2ruk
+dáru2s1ág.
+dáru2s1á2ga
+dá2rú2
+2d1árú.
+dá2rü
+dá2rű
+dá2s1a2d
dá2sal
-dá2se
+dá2sar
+dá2s1á2g
+dá2s1árad
+dá2s1árh
+dá2s1á2ru
+d1á2sás
+dását1a2
+dá2s1e2
+dásfé2l1é2v
+dá2sim
+dá2sis
+dá2sol
+dá2sor
+dá2só2
+dás1ór
+dá2sö
+dá2ső
dást2
-dá2sü
-dá2sz1al
+dás1tr
+dá2sut
+dá2s1ü2
+dá2szag
+dá2szaka
+dá2szal
+dá2szar
+dá2szav
dá2sz1ál
-dá2szár
-dá2sz1e
+dá2szárk
+dá2sz1á2ro
+dá2sze
+dász1el
+dász1em
+dász1er
+dá2széb
+dá2szip
+dá2szir
+dá2szis
+dá2sz1í2
+2dászkái
dá2sz1ö
-d1átm
-dá2z1ak
-dá2zs
-dáz3sá
+dá2sző
+dász3s
+dá2sz1us
+dá2sz1ú
+dá2sz1ü2
+dá2sz1ű
+2d1á2ta
+dát1al
+2d1á2tá
+2d1átd
+dá2t1e2
+2d1á2té
+2d1átf
+2d1á2tí
+2d1átj
+2d1átk
+2d1átm
+2d1átr
+3dátu
+2d1á2tú
+2d1átv
+dba2l1
+db2lo
+db2lú
+db2ro
+db2ró
+dc2lu
+dcsa2p1á2g
dd1elh
d2d1i2d
+ddí2s
d2d1o2d
+dd2rá
+dd2ró
d2dz
+d3dzs
1de
-de2a1s
+de2aa
+de2aá
+de2ac
+dea2d
+de2ae
+de2aé
+de2agy
+de2ah
+de2aí
+de2ala
+de2alá
+de2alo
+de2am
+dea2n
+de2ao
+de2ap
+dea1sz2
+de2aszf
de2at
+2d1e2bé
+ded1ell
+2d1e2dén
+de2d1ó2v
+de1dra
+de2d1ú2
+2d1e2dz
+de2ep
+dee2s
+deé2r
2d1eff
-de1f2r
-de2g1al
+de1fr
+de2g1a2l
+de2g1a2n
de2g1ál
-de2g1el
-de2g1em
+de2g1e2l
+degen3n
+de2ger
+de2g1ék
+deg1éri
+de2gés
+deg1éss
+degész1
deg3g
-de2gin
-de2g1o
-de2g1ö2
-de2gő
-2degy
-de2gye
-de2gyi
-de2isz
-de2k1a2r
+de2giz
+2dego
+de2gor
+degö2
+de2g1öl
+de2gör
+de2g1ös
+2de2gő
+2d1e2gye
+degyez1
+2degz
+2d1ehh
+deho2g
+de2if
+dei2g
+deí2r
+de2k1a2k
+de2kaz
de2k1e2g
-de2k1ell
-dek1érv
-2dekö
-de2köz
-dele2já
+de2kellen
+de2kep
+dek1e2rő
+de2k1esz
+dek1ékb
+dek1é2ke
+de2k1él
+de2k1éri
+de2kérte
+de2k1érté
+de2k1érv
+de2k1érz
+de1klu
+dek1old
+dek1s
+deksz2
+2d1elad
+de2lef
+2d1e2legy
+dele2m1a
+dele2má
dele2meg
+de2lemek
+dele2mel
+delem1ele
+dele2mu
+2d1e2lemű
2d1e2lemz
+dele2t1a2
+2d1eleteté
+2d1e2l1é2k
+2d1e2lél
+delés3s
+2d1elha
+2d1elho
+2delkezdé
+2delkezdő
del2lal
-dellé2
-del2l1én
-de2lőa
-d1elz
+del2l1an
+del2l1e2g
+delle2l
+del2l1ele
+del2lelk
+2dellená
+2d1ellene
+del2l1ent
+del2ler
+del2l1é2j
+del2l1é2k
+del2l1in
+del2l1is
+del2los
+del2lór
+del2lőr
+2d1elma
+2d1elnö
+de2los
+2delö
+de2löl
+de2lőad
+2d1e2lőka
+2delőrej
+2d1elsa
+2d1eltett.
+2d1eltér
+2d1elv.
+2d1elvá
+2d1elves
+2d1elvo
+2d1elvű.
+2d1elvűe
+2d1elvűk
+2d1elvűn
+2d1elvűr
+2d1elvűs
+2d1elvűt
+2d1elvűv
+de2mad
+de2m1a2l
+de2maz
+de2m1ál
+de2mez
de2m1é2rem
de2m1érm
-de2mú
-de2n1e2g
-de2n1ese
+de2mim
+dem1ing
+2demoi
+dem1p
+de2mus
+demü2l
+de2nal
+2d1e2ner
+denkié2ne
de2nol
+de2n1ó2
+dens1s
+de2od
de2of
-de2ok
-de2ol
+de2o1g2
+de2oj
+de2olo
de2om
-de2or
-de2os
de2ot
-de1pra
+de2pe.
+2d1e2pé
de1p2re
-de2r1áz
-der1osz
-de2rö
-2d1e2rő
-de2r1u2
-de2s1a2
-de2sá
-de2s1ér
-de2su
-de2s1ú2
-2d1e2szű
-det1é2ré
+de1pro
+de1p2s
+de2rad
+der1aka
+de2rala
+de2r1a2n
+de2r1ar
+de2r1á2g
+de2r1á2r
+de2rás
+der1ázt
+2derdő
+dere2c
+2deredm
+2d1e2reje
+2derején
+2derejér
+2d1e2rejét
+de2r1e2kei
+der1e2le
+der1ell
+der1e2lő
+der1elt
+de2rer
+de2r1e2ső
+de2r1él
+de2rid
+de2r1il
+de2r1i2m
+de2r1in
+de2r1i2p
+de2r1i2s
+der2nék
+de2r1osz
+de2r1ó2r
+de2rő
+d1erő.
+der1ős.
+d1erőt
+d1erőv
+der1sp
+deru2
+de2rut
+de2r1ü2g
+de2r1üld
+der1üle
+der1ültet
+dervis1s
+2de2s1a2
+2desg
+de2sip
+2deskü
+2destes
+de1sto
+de2sur
+desú2
+de2s1úr
+2d1eszm
+de1sz2ta
+de2szű.
+de2t1ék
+de2tika
+de2tiká
+2d1e2vő
+2d1evv
+de2xa
+dexi2
+de2xin
+de2xiz
+de2xí
+de2x1o
+de2xö
2deza
+de2zak
de2zér
-dezi2
-de2zid
de2zil
de2zin
-de2zor
+de2z1or
+dezőe2
+dezőkész1
+2d1ezr
1dé
-dé2da
+2d1ébr
+dé2dap
dé2d1ő
dé2du
-dé2d1ü
-dé1f2
-dé2gá
+dé1fl
+dé2g1a2
+dé2g1á2
+dé2g1e2b
+dé2g1eg
+dé2gép
+dé2g1érk
+dé2gés
+dég1ész
dég3g
-dé2go
-dé2hes
+dég1iga
+dé2gigé
+dé2gin
+dé2gí
+dé2g1ok
+dé2got
+dé2gó
+dég1s
+dé2g1u2
+dé2gú
+dé2gű
+2d1é2hes
2d1éhs
-2d1éjs
+2d1éj.
+2d1éjb
+dé2k1ab
+dé2kac
+dé2k1a2d
+dé2k1a2l
dé2k1a2n
-dé2l1a2
-dé2l1e2l
-dé2l1es
-dé2lir
+dé2k1ap
+dé2k1as
+dé2k1au
+dé2kaz
+dé2k1ág
+dé2k1árt
+dé2kás
+dékát1a2
+dé2k1e2g
+déke2l
+dé2k1ele
+dék1ell
+dék1elő
+dé2k1elt
+dé2k1er
+dé2k1esz
+dé2k1eti
+dé2kez
+dé2k1é2j
+dé2k1é2k
+dé2k1é2l
+dé2k1ér.
+dé2k1éte
+dék1isz
+dé2kivá
+dé2kí
+dékkulcs1
+dé2k1old
+dé2kop
+dé2k1or
+dé2k1osz
+dékó2
+dé2kór
+dé2k1ö2v
+dé2köz
+dé2kő
+dék2rém
+dé2k1ut
+dé2lad
+dé2lam
+dé2l1á2
+dé2leg
+dé2le2l
+dél1elő
+dé2les
+dél1est
+2d1é2let
+dé2lim
+dé2lio
+délkö2z1ön
dé2lo
-dé2lu
-dé2lyá
+dé2l1ö2
+2d1é2lő
+dé2l1u2
+dé2lük
+dé2lyö
+dé2m1e2l
+dé2m1e2m
+déna2
+dén1ac
+dénár1a2
+2d1é2neke
+dé2ny1el
+dé2nyid
+dé2nyo
+dé2nyö
+dép2i
2d1é2pí
-dé2raj
+2d1é2pü
+dé2rag
+dé2ral
+dé2r1an
dé2rar
+dé2ras
+dé2rá
+dér1d2
+dé2reg
+dér1eml
+dér1esé
+dé2r1est
+dé2rez
+dé2rés
+dé2rif
+dé2r1ik
+dé2rí
+dé2rot
+déró2
+dé2rór
+dé2rö
2d1érté
-2dértő
-dé2sa
-dé2s1el
-dé2s1o
-dé2sö
-dé2sza
-dé2ti
-dét1is
-dé2tu
+2d1érth
+dé2r1út
+dé1ry
+2d1érzé
+désa2
+dé2s1aj
+dé2sal
+dé2sap
+dé2sar
+dé2s1az
+désá2
+dé2s1ár
+dé2seg
+dé2s1e2l
+dé2s1eti
+dé2s1ég
+dé2sí
+dé2sú
+dé2s1ü2t
+dész1ak
+dé2s3zá
+dé2sz1ék
+dé2szév
+dé2sz1o
+dé2szú
+dé2t1as
+dé2t1e2g
+dé2t1is
+2d1étke
+dé2tőr
2d1év.
-2d1é2vei
+2d1évb
+2d1é2ve.
+2dévei
2d1é2vek
+2d1é2vem
2d1é2ven
-2d1é2ves
+2d1é2ves.
+2dévesb
+2d1é2vesek
+2d1é2vesen
+2d1é2vesh
+2dévesi
+2dévesk
+2d1é2vesn
+2dévesr
+2d1é2vess
2d1é2vet
+2d1évez
+2d1é2véb
+2d1é2véi
+2dévén
2dévér
+2d1é2vét
+2d1é2vév
+2d1évf
+2d1évh
2d1é2vi
-d1f2
-dg2
-dgá2z
-d1gr
+2d1évk
+2d1évn
+2d1évr
+2d1évs
+2d1évt
+2d1é2vu
+2d1é2vü
+2d1évv
+2d1évz
+dfé2nyem
+df2lo
+df2ló
+df2rá
+df2re
+df2ri
+df2ro
+df2rö
+dgá2zár
+dgázát1
+dgá2zi
+dgá2zó
+d2ge.
+dg2le
+dg2li
+dg2ló
+dg2ra
+dg2rá
+dg2ró
+d2gyu
+d2hali
+dhan2g1e
+dhé2t1
+d2hi.
+d2hié
+d2hih
+d2hii
+d2hij
+d2hik
+d2hir
+dhú2s1á2
1di
+di2aa
+di2aá
+dia1b
+di2abá
+di2abi
+di2abr
di2ac
-dia2dó
-di2afo
+dia1d2
+dia3da
+di2adi
+di2ado
+di2ae
+di2aé
+di2afa
+di2agy
di2ah
-di2ain
+di2ai2k
+di2aí
di2aj
+di2akép
+di2akol
+di2ala
+di2alá
+di2ali
di2am
-di2ap
-dia1szk
-di2at
+di2ana
+di2aná
+di2ani
+di2anó
+di2ao
+di2aó
+di2aö
+di2aő
+di2a1p2
+di2ara
+di2asza
+di2aszk
+di2aszó
+di2a1t2
+di2au2
+di2aú
+di2aü
+di2aű
di2av
+di2az
+diá2k1e
+diá2kol
+dián3n
+di1c2k
+di2cs1aj
+di2cs1e2r
+2d1i2deg
+2didej
+di2deo
+2d1i2dén
+di2d1i2o
2d1i2dő
-die2s
+di2eu
di1fl
-digaz1
-di2gén
-di2gér
-2d1i2gét
+di2ga.
+2d1i2gáná
+di2ge.
+di2g1e2l
+2d1i2gén
+di2gét
+2dijes
+di2kép
+di1k2l
+2d1i2konh
di1k2ro
-di2k1u2ta
-2d1ind
+dik1u2ta
+di1k2v
+di2lan
+dile2m
+dilig2
+di2lö
+di2l1ő
+di2lü
+di1ly
+di2ma.
+2d1i2má
+di2mit
+2d1imp
+2d1i2naka
+2dind
+2d1inf
+dinga2
+din2gal
+2d1ingá
+2d1inger
+2d1i2nic
+di2n1ing
+2d1inj
+di2nód
+di2n1óm
+di2n1ó2n
+di2n1ó2r
+2d1inp
+2d1inté
+2d1inv
+di2oa
+di2oi
+di2ok
di2ol
+di2ome
+di2ov
di2óa
-di2óc
-di2ófe
-di2ósz
+di2óá
+di2óe
+di2óg
+di2óí
+di2ókam
+di2óká
+di2ó1kl
+di2ókok
+di2óku
+di2ómé
+di2óo
+di2óó
+di2óö
+di2óő
+di2ó1p2
+di2órá
+di2óri
+dió2si2
+diós1ik
+di3ósor.
+di2óspe
+di2ószű
+di2óu
+di2óú
+di2óü
+2dipar.
+2d1i2pará
+2diparb
+2d1i2pari
+2d1i2paro
+2d1i2rat
+2d1i2rá
2d1i2rod
2d1irt
+di2saj
+2d1i2si.
+2d1isko
+2d1ism
2d1iste
-2d1i2zü
+di2tal
+dit1a2la
+dit1ará
+di2t1e2g
+dit1t2
+di2tü
+diumé2
+diu2m1én
+diu2mil
+diú2t
+di2vad
+2d1i2var
+diva2t1a
+2d1i2zé
1dí
-dí2j1al
-dí2ji
-2d1ín.
+dí2gé
+dí2j1áto
+dí2je
+dí2jí
+dí2jö
+dí2jü
2d1í2rá
-d1írn
-dí2ró
-2díz
+díri2
+dí2rik
+2d1í2ró
+dí2sz1a
+dí2szer
+dí2szö
+dítés3s
+2d1ív.
+2d1í2ve
+2dívn
+2d1í2vü
+2d1í2vű
dí2zi
-d2j1i
-dk2
-dkész1
-d1kr
-dlás1s
-dlő1k2
-dme2g1é
+dí2zs
+dí2zü
+dí2zű
+dj2eg
+dje2gya
+dj1is
+djo2n1
+dka2n1á2
+dkia2
+dkie2
+dk2la
+dk2li
+dk2lo
+dk2lu
+dk2rá
+dk2ré
+dk2ri
+dk2ro
+dk2ró
+dk2va
+dk2vi
+dlás3s
+dlá2s3z
+dleí2
+dló1g2
+dlót2
+dlő1kr
+dme2g1ér
+dna2pe
+dné2v1á
+dnö2k1ö2l
1do
-2dodú
-doe2
-doge2
-do2k1ú
-do2laj
-2d1oml
+do2áz
+do2b1ag
+do2b1a2l
+doba2n
+do2b1any
+do2b1ár
+do2bát
+dobe2
+do2b1el
+do2b1ill
+do2bí
+2dobje
+do2boá
+do2b1old
+do2b1or
+do2bö
+do2bü
+do2bű
+2d1o2dú
+do2gar
+dogasz1
+do2gár
+dogás1s
+do2g1ol
+do2gor
+dogos3s
+do1g2rá
+do2gü
+do2kal
+do2kas
+do2káj
+do2k1ál
+do2k1e
+do2k1é2l
+do2kép
+dokkö2
+dok2k1öb
+dok2kő
+do2k1ott
+2d1o2koz
+do2kö
+dokú2t
+dok1úto
+do2kü
+2d1o2laj
+dola2tar
+dola2t1e
+dola2t1ör
+2d1olda
+2d1oldá
+2d1oldo
+2d1oldó
+2d1oltár
+2d1oltás
+2dolvas
+dom1a2cé
+do2m1árb
+do2m1áré
+do2m1árh
+do2m1árj
+do2m1árk
+do2m1árl
+do2m1árn
+do2m1á2ron
+do2m1árr
+do2m1ártó
+dom2ba2l
+dom2bel
+dom2bol
+dom2bón
+do2mel
+2domí
+2doml
+do2m1ond
+do2mő
+2domú
+do2mü
+do2n1ad
+dona2l
+don1ala
+do2n1a2r
+do2n1as
+do2n1ál
+do2n1áta
+do2n1átj
+do2n1áts
+do2n1átv
+don1d2
do2n1e
-do2név
-do1p2h
-do2re
-do2r1é2
-do2rip
-do2ris
-do1sz2k
-2doszt
+donos1s
+do2n1osz
+do2nö
+don1s
+dont2
+don1tr
+do2nü
+do2nyal
+do2nyar
+do2nye
+do2nyó
+2d1o2pe
+do1p2l
+dor1akn
+do2r1a2l1
+do2r1a2p
+do2r1as
+do2rat
+dor1áll
+do2r1á2lo
+dord2
+dor1dr
+do2r1e2
+do2rid
+do2r1il
+do2r1is
+do2r1ita
+dor1k2
+do2r1okl
+dor1oszt
+do2rö
+do2rő
+2d1orrú
+dors2
+dor1sp
+dor1tró
+dorú2t
+do2rü
+2dorvos
+do2ug
+do2ut
+do2vi
+do1ye
1dó
-dóa2
-dóel1
-dó1p2
-dó2sem
-2dósl
-dó2só
+dóa2d
+dóá2g
+dóá2r
+dó1bl
+2dóez
+dó1fl
+dó1f2r
+2dógá
+dó1g2r
+dói2g
+dóí2v
+dó1k2l
+dó1kré
+dó1k2v
+dó2mab
+dó2mak
+dóm1org
+dó2mő
+dóó2r
+dó1p2l
+dó1p2r
+dó2rád
+d1ó2rák
+dó2riá
+dó2sam
+dó2sas
+dó2sel
+3dósi.
+dó2sip
+dó2sis
+dó2sír
+dó1s2ká
+dó1spe
+dó1spi
+dó1s2rá
+dós3s
+dó1stáb
+dó1str
+dó2s1ű2
+dósz2
+dó1szf
+dó1szp
+dó1t2r
2d1ó2vó
1dö
-döke2
-dö2k1er
+d1öbl
+dö2ga
+dö2gá
+dö2g1el
+dö2gev
+dög3g
+dögna2
+dö2go
+dö2gó
+dög1ö2lő
+dö2g1ő
+dö2gu
+dö2ka
+dö2ká
+dö2k1el
+dö2k1e2r
+dö2kék
+dö2k1ér.
dö2kí
-dö2le
-2d1ö2v
+2döntöz
+dö2ra
+dö2rá
+dö2ro
+2d1ö2röks
+2d1ösz
+d1ötl
+döt2tért
+dö2ve
+dö2vi
1dő
-dőa2
-dő1d2r
+dőa2n
+dőá2g
+dő1bl
+dő1cl
+dő1dra
+dőe2l
dőe2r
-dőé2
-dői2rá
-2dőra
-2d1őrb
-2d1őrez
-2d1őrf
+dőé2l
+dőé2te
+dő1fl
+dő1f2r
+dőgé2p1e2ké
+dő1gr
+dőirá2
+dői2ta
+dő1kl
+dő1kv
+dő2ny1a
+dő2nyele
+dő1pl
+dő1pr
+2dőráb
+2d1őrál
+2d1ő2reb
+dőr1egy
+dőr1ele
+dőr1elő
+2d1ő2rem
+2d1ő2ré.
+2d1ő2réh
+2dőrék
+2d1őrél
+2dőrén
2d1őrh
-2d1ő2rig
-2dőril
-2d1őrj
-2d1őrk
-2d1őrm
-2dőrö
-dő2rök
-dő2rön
+2d1őrif
+2d1ő2ril
+2d1ő2r1in
+2d1ő2rip
+dő2r1is
+2dőrok
+2d1őror
+2dőros
+dő2röd
+dő2r1öz
2dőrőr
-2d1őrr
-2d1őr1s
-2d1őrt
-2d1őrv
+2dőrun
+2dőrur
+2d1ő2rut
+2d1ő2rü2
+dőr1üg
+dőr1ül
+2d1őrz
+dő2s1érv
dő1ská
-dő1s2p
-dő2tál
-dő1tr
-dőu2
-d1p2
-1d2rám
-dri2t1
-drog2r
-drop2
-1d2ruk
-dsé2gi
-d1s2p
-d1s2t2
-dsuhanc1
-d2tarc
+dő1s2m
+dő1sni
+dőso2d
+dős1odo
+dő1spe
+dő1s2pi
+dő1spó
+dő1s2ta
+dő1sté
+dő1str
+dő1sv
+dő1sz2
+dőt1áll
+dő1t2r
+dp2la
+dp2le
+dp2lé
+dp2ra
+dp2re
+dp2ré
+dp2ri
+dp2rí
+dp2ro
+dp2ró
+dp2sz
+dra1ps
+dravasz1
+drág1g
+drá2sz1ál
+drá2sze
+dráta2
+drá2tal
+drá2t1e2
+drá2t1ér
+dren2d1ő2
+1d2ressz.
+1d2resszb
+1d2ressze
+1d2resszh
+1d2resszk
+1d2resszr
+1d2resszü
+dré2szá
+dro2g1a
+dro2gá
+dro2gen
+drogé2n1i2
+drog3g
+dro2g1ó2
+dro2n1a2
+dro2nyi
+drosz2
+dro1szf
+dro1t2r
+dró2baj
+dró2t1a2
+dró2t1á2
+dró2tis
+dró2t1ü2
+d2rui
+dru2se
+dru2si
+dság1g
+dsé2g1el
+dsé2gül
+ds2ká
+ds2li
+ds2pe
+ds2pi
+ds2po
+ds2rá
+ds2ta
+ds2tá
+ds2tí
+dst2r
+dsza2ké
+dszá2las
+dszáraz1
+dsz2e
+dsze2ra
+dsze2r1á
+dsze2r1elv
+dsze2r1o
+dszert2
+d1sz2l
+d1szn
+d1sz2p
+d1sz2t2
+d1sz2v
+dta2g1a2
+dtalpa2d
+dtal2p1ada
+dtal2p1al
+dta2n1á2s
+d2t1ékn
+d1t2rá
+d1t2ré
+d1t2ri
+d1t2ro
+d1t2róf
+d2t1ül
1du
+du2cem
du2c3h
+du2cö
+du2cü
+due2l
du2gal
du2g1ár
+2d1ugr
+2duit
+2d1ujj
+dula1k2
+dula2t1í
+du2l1e
+du2lép
+duli2
+du2l1im
+du2l1in
+du2lis
+du2lí
+du2lö
+du2lű
+2d1u2ni
2d1u2no
2d1unt
-du2se
-dus3s
-du2ta
-du2tá
+du2óa
+du2óá
+du2ód
+du2óf
+du2ól
+du2óp
+du2rai
+du2rak
+du2ral
+2d1u2rat
+du2ráb
+du2ráh
+du2rát
+du2ruk
+du2sal
+du2san
+du2sar
+du2s1as
+du2sál
+du2seg
+du2s1érté
+du2sin
+du2s1iv
+du2sol
+du2ső
+du2s1ű
+2duszo
+dus3zs
+du2t1i
+2d1u2to
+du2tó.
+du2tór
+du2tu
1dú
-dú2cs
-dú2to
+dú2ce
+dú2ch
+dú2cse
+dú2c3so
+dúc3sz
+dú1dr
+dú2j1é2
+dú2jí
+dú2r1a2c
+dú2ral
+dú2r1e2
+dú2rén
+2d1ú2ron
+dú2rö
+dú2szá
+dú2szó
+dú2t1a2
+dú2té
+2d1útj
+d1útl
+2d1útn
+dú2ton
+2d1útr
1dü
-2d1ü2g
-2d1ü2z
+dü2dü
+dü2gy
+dügy1érn
+dü2ha
+dü2há
+dü2hel
+dü2ho
+dü2hő
+dü2két
+dü2lá
+2d1üld
+dü2lep
+dülős2
+2d1ünne
+dü2rí
+dü2te
+dü2té
+dü2tő
+dü2ve
+dü2ze
+dü2zé
1dű
-2d1ű2z
+dű1pr
+d1űrl
+dű1sz
+dű1tr
+dű2zé
+dű2ző
+dva2raj
+dva2r1e
+dva2r1ó2
+dvá2nyan
+dvá2nyí
+dv1áta
+dv1áte
+dv1ece
+dv1e2leg
+dv1elk
+dven2t1í
+dve2ral
+dve2rár
+dve2rip
+dver1s
+d2v1e2sés
+d2v1e2teté
+dv1élm
+d2v1ép
+d2v1érd
+d2v1é2ri
+d2v1érté
+d2v1érz
+dv1fr
+dvi2csa
+dvi2csá
+d2v1iga
+dvigaz1
+dvitéz1
dv1or
-dy1a
-1dyk
+dvö2l
+dv1ölő
+dv1ős
+dv1őz
+dv1pr
+dv1un
+dv1ú2t
+d2v1üg
+d2v1ü2z
+d2v1űz
+dwa1yi
+dy1as
+d1yéb
+d1yén
+dy1étő
+d1yév
+dy2jé
+dy2ke
+dyk2k
+dyk2n
+dyk2t
+dy2vé
d2z
1dza
+dzaé2
+2d3zaj
+dzak2
+dza1kr
1dzá
-d3zár
+dzá2r1ó2ra
+dzás1s
+d3zász
1dze
1dzé
+dzé2sa
1dzi
+2d3zil
1dzí
1dzo
1dzó
1dzö
-2d3zöld.
1dző
+dzőa2
+2dzőbő
+2dződ
2dzőj
-2dzős
+2dzőné
+2dzőr
1dzsa
1dzsá
1dzse
+2dzs1e2g
+2dzs1esz
1dzsé
1dzsi
+2dzsir
+2dzs1is
+d3zsiv
1dzsí
-1dzso
+2dzso2
+dzs1ok
1dzsó
1dzsö
1dzső
+dzs1s
1dzsu
1dzsú
+2dzsúj
1dzsü
1dzsű
1dzu
@@ -2650,7222 +12428,32756 @@ d3zár
1dzű
2e.
e1a
-e2ac
+ea2bál
+e2abo
+e2abő
ea2da
ea2dá
-e2adi
-ea2do
+eadás1s
ea2dó
+ea1d2r
ea2du
-e2aga
-e2ah
-eai2v
-ea2j
+eaé2d
+e2afá
+e2afe
+e2afi
+e2afo
+e2afö
+e2afő
+e2afü
+e2afű
+ea2gi
+e2agó
+e2aid
+e2ail
+e2aim
+e2aip
+e2ais
+ea2ja
+e2ak.
+ea2kas
+e2akat
+e2aká
+e2akb
+e2ake
+e2akép
+e2akh
e2aki
+e2akí
+e2a1kl
e2ako
-ea2la
-ea2lá
-e2ale
-ea2p
+e2akó
+e2akö
+e2a1k2r
+e2akú
+e2akü
+e2alán
+eal1eg
+ea2lu
+e2am.
+e2ama
+e2amá
+e2amel
+e2amer
+e2amé
+e2amin
+ea2mo
+e2amu
+e2amú
+e2amű
+e2ane
+e2ané
+e2anö
+e2ans
+ea2nya
+e2api
+e2apo
+e2apó
+ea1p2ro
e2ar.
-ea2ra
-eas3s
-east2
-e2at.
-e2atk
-e2atl
+ea2ran
+ea2ras
+ea2rat
+ea2rá
+e2arb
+e2are
+e2arh
+e2arj
+e2arn
+e2aró
+e2arr
+e2aru
+e2arü
+e2aso
+e2a1st2
+e2asü
+e2asű
+e2aszem
+e2aszé
+e2ata
+e2atá
+e2atc
+e2ate
+ea2t1eg
+e2até2
+ea2tél
+ea2t1éne
+e2atf
+e2atg
+e2ath
+ea2tid
+eat1ing
+ea2tip
+ea2tir
+e2atm
+eatmo1s
+eatmosz2
+e2atn
e2ato
-e2au
-ea2z
+ea2t1or
+e2ató
+e2atö
+ea1t2rak
+eat2rón
+e2ats
+e2atu
+e2a2tü
+e2atű
+e2atz
+e2au.
+ea2ut
+e2a2ux
+e2avi
+ea1vy
+ea2zo
e1á
eá2bé
eá2cs
-eá2f
-eá2g
-eá2ke
-eá2lár
-e2ále
-eá2l1é
-eálu2
-e2ámu
-eá2nyal
-eá2nyan
-eá2nyas
-eá2nye
+eá2ga
+eá2gá
+eá2gi
+eá2go
+eá2gu
+eá2gy
+eá2hí
+eá2k1e
+eá2k1osk
+eála2
+eá2lad
+eá2l1ak
+eá2lál
+eá2l1á2r
+eá2l1e2
+eálé2
+eá2lél
+eálfe2
+eá2lid
+eá2l1in
+eá2lir
+eá2lism
+eá2lop
+eá2l1ór
+eá2lö
+eá2mu
+eá2nac
+eá2nal
+eá2n1at
+eáná2
+eá2nár
+eá2n1át
+eá2n1e2
+eá2ny1a2l
+eá2ny1a2n
+eá2nyap
+eá2nyar
+eá2ny1as
+eá2nyav
+eá2ny1e2
+eá2nyén
+eá2ny1ér.
+eá2nyif
+eá2ny1ing
+eá2nyis
+eá2ny1o2ku
+eá2nyö
+eá2po
+eá2rad
+eá2ram
+eá2ras
+eá2raz
+eá2ru
+eá2rú
eá2sa
-eá2se
-eá2so
-e2áte
-e2áté
-e2átö
-eb1a2d
+eá2sá
+eá2sí
+eá2só
+eá2su
+eá2sz
+eáta2
+eá2t1e2
+eá2té
+eá2tí
+eá2tu
+eá2tü
+e2ba2d
+eb1adó
+eb1adta
+eb1aga
e2b1ajk
+e2b1a2la
+e2b1alk
+eb1ant
+eb1a2ny
eb1atl
-1e2béd
-eb1ing
-e1b2lo
-eb1ó2r
-ec1á2r
+e2b1au
+eb1a2zo
+eb1ágg
+e2b1áp
+eb1ára
+ebeá2
+e2b1e2he
+eb1ejt
+ebe2l1á
+e2b1e2lef
+ebe2l1eme
+e2b1elhel
+e2b1enc
+eb1este
+eb1esté
+ebe2szek
+e2b1ex
+e2b1ég
+eb1ép
+e2b1érd
+e2b1érté
+e2b1érz
+eb1gr
+e2b1id
+e2b1i2na
+e2b1inf
+e2b1ing
+e2b1irá
+e2b1i2s
+e2b1izz
+eb1kl
+eb1kr
+eb2lat
+e1b2lú
+eb1okt
+eb1o2la
+eb1orv
+eb1öb
+eb1ös
+eb2rus
+eb1st2
+eb1tr
+e2b1üg
+ebü2l
+eb1ülé
+e2b1ür
+eb1üz
+ec1ajt
+ec1alk
+e2c1a2n
+e2c1az
+ec1ág
+e2c1ál
+ec1ár
+ec1bl
+ec2c1a2
+ec2c1ér
+ec2c3h
+ec2c1i
+eccs1át
+ec3cso
+ec2cú
+e2c1eg
+e2c1elo
+e2c1elv
2ecento
-ece2ti
-ecés1
-ec3hez
-ecs1ért
-edeles1
-ede2ri
+e2cetb
+ece2t1o
+1e2cets
+1e2cett
+e2cetü
+ece2tüz
+e2c1evé
+ec3har
+ec3hen
+ec3hi.
+ech1in
+1e2chó
+ech1u
+ec2le
+ec2lu
+e2csad
+e2cs1a2la
+e2cs1a2n
+ecsa2p1á2g
+e2cs1a2pák
+ecs1ará
+ecsá2r
+ecs1árá
+ecs1árb
+ecs1áro
+e2cs1á2t
+e2cs1é2l
+e2cs1ér.
+ecs1érté
+e2cs1ol
+e2cs1öl
+ecs1s
+ecsúszós1
+e2c3sükb
+e2c3süt
+ec3sze
+e2c1ud
+ec3zá
+ec3ze
+e2d1ab
+e2d1a2dá
+ed1a2ny
+e2d1a2z
+e2d1á2c
+e2d1ág
+e2d1áp
+ed1egy
+edeleme2
+e2d1elo
+e2d1eml
+ede2rak
+ede2r1ál
+ede2rel
+ede2r1ék
+ede2r1o
+ede2r1ü2l
+ede2s1o
+ede2tá
+ede2tel
+ede2t1ér.
+e2d1é2j
+edé2ká
+edé2kis
+edé2k1o
+edé2lyá
edé2lyo
+1e2dénn
1e2dény
+e2d1ép
+e2d1érd
+edé2sa
+edé2so
edés3s
-2edi
-edi2g
-e2d1iga
-edi2ó
+edé2s3z
+ed1é2vén
+ed1é2vér
+ed1gr
+2edic
+e2dide
+e2d1i2ga
+edigaz1
+ed1ill
+e2d1int
+e2d1ira
ed1iro
-ed1ír
-ed1íz
+e2d1ír
+ed1ívn
+e2d1íz
+ed1old
ed1orv
+e2d1os
+e2d1ös
+e2d1őrs
+edő2s1ü
+ed1pl
+ed1pr
+ed2ram
+e1d2rog
e1d2ró
-edu2r
-e1dy
+e2d1üg
+e2d1üt
+e2d1űz
+ed2v1a2
+edvá2
+ed2v1ár
+ed2vát
+edv1ér.
+ed2v1öz
+edy1i
+e2d3zá
+1e2dzői
+1edzőj
+1edzőr
+1e2dzőv
+1edzv
e1e
-ee2b
-ee2c
-e2e2d1
-ee2g
-ee2l
-eel1i
-eel1o
-ee2m
-e2ene
-ee2r
-ee2se
+ee2bé
+ee2cs
+ee2dz
+ee2ge
+ee2gé
+eegész1
+ee2gy
+ee2he
+ee2ke
+e2el.
+ee2la
+ee2le
+e2eléb
+ee2léd
+e2elg
+ee2lo
+ee2lő
+ee2me
+ee3men
+ee2mé
+ee2mu
+e2en.
+e2enb
+e2enj
+e2ent
+e2enw
+ee2ny
+ee2pe
+ee2pé
+ee2po
+ee2re
+ee2ro
+ee2ró
+ee2rő
ee2sé
-ee2si
-ee2ső.
-ee2sőn
ee2sü
ee2sz
-ee2tet
-e2e1th
-ee2v
-e1é2
-e2gabá
+ee2te
+e2e1t2h
+ee2to
+ee2ve
+ee2vé
+ee2vi
+ee2vo
+ee2vő
+ee2zü
+e1é
+eé2de
+eé2ge
+eé2gé
+eé2gő
+eé2gü
+eé2he
+eé2je
+eé2jé
+eé2ke
+eé2kí
+eé2le
+eé2lé
+eé2li
+eé2lő
+eélőkész1
+eé2lü
+eé2lű
+eé2me
+eé2ne
+eé2pí
+eépítés1s
+eé2pü
+eé2ré
+eé2ri
+eé2rő
+eé2rü
+eé2sz
+eé2te
+eé2ve
+eé2vé
+eé2vi
+eé2vü
+efa2x1i
+efek2tá
+efek2t1í2
+efenyőé2
+ef2f1in
+ef2f1o
+e1f2la
+efle2x1i2k
+ef2lu
+efo2n1alk
+efo2nik
+eforma2
+efor2m1al
+ef1pl
+e1f2rá
+ef2rö
+e2g1a2bá
+ega2be
+eg1abl
eg1abr
+e2g1a2cé
+ega2cs
e2g1a2d
e2g1a2g
+ega2i
e2g1a2j
e2g1a2k
+e3gaké
ega2lac
ega2lak
+ega2lan
+eg1a2lap
e2g1a2lá
+e2g1alh
+e2g1alj
+e2g1alm
+e2g1als
e2g1alt
-e2g1alu
-e2g1alv
+e2g1a2m
+eg1ang
eg1ann
-eg1any
+eg1ant
+eg1a2ny
e2g1a2pa
+eg1apá
+ega2po
+eg1a2pó
e2g1apr
-e2g1a2r
-e2g1a2s
-e3gat
-e2g1au
-e2g1a2v
-e3gaz
+eg1arc
+ega2ri
+eg1a2ro
+eg1art
+e2g1ass
+e2g1a2sza
+e2g1a2szo
+e2gaszú
+eg1atk
+ega1t2r
+e3g2aty
+e2g1a2u
+eg1a2va
+e3gazol
+ega2zon
+e3gába
+e3gábó
eg1á2cs
-e2g1ág
-eg1áld
-eg1álm
-e2g1á2r
-e2g1á2s
-eg1áta
-eg1átk
-eg1átl
-eg1á2zi
-eg1ázt
-e2g1e2g
-e2g1eh
-e2g1ej
-ege2lem
-ege2léb
-e2g1ell
+e2g1áf
+e2g1á2g
+eg1áh
+e3g2ái
+e3gája
+e3gájá
+egá2ju
+egá2m
+e3g2án
+e2g1áp
+e2g1á2rá
+e2g1árb
+e3g2árg
+e2g1árn
+egá2ro
+eg1árt
+egá2ru
+egá2rú
+egá2sa
+e3gát.
+e3g2átu
+e3gáva
+egá2zá
+egá2zi
+egá2zu
+eg1bl
+eg1br
+eg1d2r
+e2g1e2bé
+ege2cs1ö2
+eg1edz
+eg1e2ge
+eg1ehe
+e2g1e2kés
+e2gela
+e3geled
+ege2leg
+ege2lej
+e2gelekt
+eg1e2lemb
+e2g1e2leme
+e2g1e2lemn
+e2g1e2lemr
+e2g1e2lemt
+ege2l1e2s
+eg1elég
+eg1e2lér
+e2g1elf
+e3g2elg
+e2g1elha
+e3g2elit
+e2g1eljá
+e2g1elm
+e3g2elne
+e2g1elo
+e3g2előá
+ege2lőbbe
+e3g2előd
+e3g2előf
e3g2elői
-e2g1els
-eg1emé
+e3g2előm
+e3gelőnye
+e2g1eltá
+e3g2eltet
+e3g2eltü
+e2g1elvá
+e2g1elz
+e2gemel
e3gend
+e3genye
+eg1epe
+eg1epr
+e3gerá
e2gerd
-e2g1esh
-eg1essz
-eg1e2sze
-e2g1e2tet.
+1egere.
+e2gered
+1e2gerek
+e2geré
+ege2rény
+eg1erk
+e3gerl
+e2g1eró
+e2g1erő
+eg2esek
+e2g1esete
+e2g1eszk
+e2getal
+eg1e2ve
+e2g1ex
e2g1é2g
-egé2k
-eg1éke
-e2g1é2le
-eg1é2lü
-egé2nyel
+e3gémb
+e2g1é2neke
+e2g1é2nekk
+egé2ny1e2l
e2g1épí
-eg1épü
+eg1éps
e2gér.
-eg1érd
-egé2ret
-eg1érj
+e2gérb
+egé2r1es
+egé2re2t
+egér1ete
+egé2rez
+e2géré
+egé2rés
+e2gérg
+e2géri
+egé2ri.
+e2gérk
+e2gérn
+eg1é2rő.
+e2gérr
+e2gérs
+eg1érté
+eg1érth
+e2gértő
+e2gérv
+e2gész
+eg1észl
1egészs
-eg3gya
+eg1éte
+eg1fl
+eg2gim
+eg3gyal
+eg3gyan
eg3gyás
-eg3gyen
-eg3gyo
eg3gyú
-e2g1if
+e3gi.
+eg1ibr
+eg1idd
+eg1i2de
+e3gie
egi2g
+e3gig.
e2g1iga
-e2g1ige
e2g1igé
-eg1iha
-e2g1ij
-eg1ill
+eg1ij
+e2g1i2ko
+eg1ikr
+e2gill
+eg1imb
+e2gimm
+eg1inf
e2g1ing
eg1ino
-egi2p
+eg1ins
+e3g2io
eg1ira
-egi2ro
-e2g1ist
-eg1iszi
-eg1iszo
-e2g1ita
-e2g1itta.
-e2g1ittá
-egius1
-eg1ivá
+eg1i2ro
+eg1iss
+eg1ist
+egi2sz
+e2g1i2ta
+e3gitá
+e2g1iva
+e2g1ivá
+e3give
+eg1izé
eg1izg
eg1izm
-eg1ír
-eg1o2d
-eg1o2k
-eg1ola
-e3gom
-eg1op
-e3goro
-e2g1os
+eg1izz
+e2g1íg
+e2g1ín
+e2g1í2r
+e2g1ív
+e2g1íz
+eg1kl
+eg1kr
+eg1kv
+e2g1ob
+e2goc
+e2g1o2d
+e2goi
+e2g1o2k
+eg1o2la
+e2g1old
+eg1olv
+e3goly
+2egom
+ego2mi
+e2gont
+e2g1op
+eg1org
+e3g2orom
+ego2ros
+e2g1orr
+e2g1orv
+e2g1o2s
+e2g1ot
+e3gó.
+e3g2ób
+egó2do
+e3g2ój
+eg1ó2ra
eg1órá
-e2góv
-eg1öb
+eg1óv
+e2g1öb
eg1ök
-eg1öz
-e1g2ráf
-eg1ug
-eg1un
-eg1u2ra
-eg1u2t
+eg1önt
+eg1örö
+e3görög
+egö2röm
+eg1öt
+eg1öv
+e2g1ö2z
+egőkész1
+e3gőre
+eg1őri
+eg1őrö
+egő2szi
+e3g2őz
+eg1pl
+eg1pr
+eg1ps
+e1g2rat
+e1g2róf
+eg1sk
+eg1sl
+eg1sm
+eg1sp
+eg1s2t
+egsz2
+eg1szt
+eg1tr
+e3g2ub
+eg1ud
+e3g2um
+eg1u2n
+e2g1u2ra.
+e2g1u2rai
+e2g1u2rak
+e2g1u2ras
+e2g1u2rat
+e2g1u2rá
+e3guru
+e2g1u2s
+e2g1u2t
eg1u2z
-e2g1ú2
-egü2g
+eg1új
+e3g2ún
+eg1úr
+eg1ús
+eg1út
+e2g1üd
+egü2gye
+e2g1ü2le
eg1ü2li
-eg1ür
-eg1üz
-egy1a2d
-egya2r
-egy1as
+e2g1üs
+e2g1üt
+e2g1üv
+e2g1üz
+e2g1űz
+egvárosi2
+e2gy1a2d
+egy1a2g
+e2gy1aj
+egy1akt
+egy1a2la
+e2gy1ará
+e2gy1as
egy1a2t
+e2gy1au
egy1az
-egy1ál
-egy1ára
+e2gy1ál
+egy1á2rá
+egy1árf
+e2gyát
+egy1eleg
+egy1elf
egy1ell
+egy1elo
+egy1e2lőj
+egy1e2lőv
+egy1elz
+e2gyeni
1e2gyenl
-egyes1s
+1e2gyens
egy1eszt
-egyköz1
-egyo2
-egy1ol
-egy1om
-egy1ór
-egy1öl
-egy1ös
-egy1őr
-e2gyür
+1egyezm
+egy1éks
+1egyéni
+egy1ér.
+e2gyip
+e2gyis
+e2gy1iz
+egy1ok
+e2gy1ol
+egyo2r
+e2gy1os
+egy1ot
+e2gy1ó2r
+egy1ö2l
+e2gy1ös
+e2gy1öz
+egy1ő2r
+egyu2
+egy1ur
+egy1ut
1együt
-ehé2ra
-ehé2z1
-1ehh
+1egzis
+eha2de
+ehá2zal
+eh1ellá
+ehe2lyes
+ehe2rál
+ehe2rát
+ehere2
+ehe2r1el
+ehe2r1em
+ehe2ren
+ehe2res
+ehe2rin
+ehe2rol
+e2h1é2je
+ehé2ná
+ehé2név
+ehé2zá
+ehé2zo
e2h1ors
-eh1s
+eh1sz
e1i
-e2ia
-e2iá
-e2ibu
-e2ic
-e2idá
-eido1
+ei2áb
+ei2áh
+ei2áj
+ei2án
+ei2ár
+ei2át
+ei2áv
+e2ibn
+ei2deá
+ei2dei
+ei2deo
+ei2dén
+ei2dom
ei2dő
+e2idp
e2ier
-e2if
ei2gá
ei2gé
+e2i1g2n
ei2gy
ei2ha
-ei2j
-e2ima
+eil2le.
+ei2ma.
+ei2man
ei2má
-e2ini
-e2inr
-eins2
+ei2mit
+e2imk
+e2ims
+e2imz
+ei2na2
+ein1ad
+ei2n1á2
+ei2neg
+e2inér
+e2inét
+ei2n1ita
+ei2nol
+ei2nő
+ein1t2r
+ei2nü
ei2on
ei2pa
ei2ram
ei2rat
+ei2ri
ei2rod
e2iró
ei2ta
-e2ito
-e2itu
+e2itb
+e2itj
+e2itn
+e2itr
+ei2va
+ei2vá
+ei2vo
ei2vó
-e1í2
-ej1a2d
-ej1al
+ei2zé
+e2izmi
+ei2zo
+e1í
+eí2gé
+eí2já
+eí2jú
+eí2ra
+eí2rá
+eí3rásbe
+eí3rásil
+eí3rásoc
+eí3rásonk
+eí2ró.
+eí2róa
+eí2róá
+eí2rób
+eí2ródn
+eí2róf
+eí2róg
+eí2róh
+eí2rói.
+eí2róik
+eí2róin
+eí2róit
+eíróí2
+eí2rója
+eí2rójá
+eí2róje
+eí2róju
+eí2rók
+eí2róm
+eí2rón.
+eí2róna
+eí2róná
+eí2róny
+eí2rór
+eí2rót
+eí2róv
+eí2té
+eí2vá
+eí2ve
+eí2vé
+eí2vi
+eí2vo
+eí2vó
+eí2ze
+eí2zü
+eí2zű
+ej1ab
+e2j1a2d
+ej1a2g
+e2jak
+ej1akk
+ej1a2l
+ej1a2n
+ej1ar
+ej1au
+ej1a2z
+ej1áb
+e2j1á2g
ej1ál
-ejes1s
-ejé2k
-e2j1ék.
-e2j1éke
-e2j1in
-ej1kr
+e2j1ártó
+ej1á2t1e2
+ej1átv
+ej1bl
+ej1br
+ejcsa2p1
+ej1dr
+eje2c
+e2j1ecse
+e2j1ef
+ej1e2ged
+e2j1e2gé
+e2jekc
+e2j1ela
+e2j1elc
+e2jelede
+e2j1e2lemb
+e2j1e2leme
+ej1e2lemé
+e2j1e2lemn
+e2j1elf
+e2j1elha
+e2j1elhel
+e2j1elo
+ej1elszá
+ej1eltér
+e2j1elu
+e2j1eng
+e2j1enz
+e2j1essz
+eje2sz
+e2j1ex
+e2j1é2j
+e2j1é2k
+e2j1él
+e2j1ép
+e2j1éte
+ej1fr
+ej1g2r
+e2j1i2d
+e2j1im
+ej1ina
+e2j1int
+e2j1ip
+e2j1iz
+ej1íg
+ej1ív
+ej1kl
+ej1kv
+ej2mok
ej1ol
ej1op
-ej1os
-ejta2
-ej2tak
-ej2tal
-ej2t1an
+ej1óc
+ej1ón
+ejó2sá
+ej1ót
+ej1óv
+e2j1öb
+e2j1öl
+ej1ö2ve.
+e2j1őz
+ej1pl
+ej1pr
+ej1sp
+ej1st2
+ej2tad
ej2tau
ej2tál
-ej2tár
ej2tát
+ej2t1elk
+ej2t1este
+ej2tev
+ejté2r
+ejt1éré
+ej2tin
+ej2tiz
ej2tos
-e2j1ú2
-ek1a2dó
-e2k1aj
+ej2t1ó2r
+ej2töd
+ej2t1ö2l
+ej2tön
+ej2tös
+ej1tra
+ej1tró
+ej2tür
+ej1új
+ej1úr
+ej1ú2t
+e2j1üg
+e2j1ür
+e2j1ü2t
+e2j1üv
+e2j1üz
+e2k1abl
+ek1a2cé
+ek1a2dá
+e2k1a2dó
+eka2gy
+ek1a2ja
+e2k1ajtó.
+e2k1ajtói
+e2k1ajtók
+e2k1ajtón
+e2k1ajtór
+e2k1ajtót
+ek1a2kar
e2k1alj
-ek1áll
-ek1ár.
-e2k1e2lőt
+e2k1a2lo
+ek1alt
+ek1ang
+e2k1ani
+ek1a2nyá
+ek1arc.
+ek1arca
+ek1arcr
+ek1arcú
+eka2sip
+e2k1au
+ek1azo
+e2k1ág
+ek1állo
+ek1álm
+ek1árad
+eká2rai
+ek1á2rak
+ek1áras
+e2k1á2rá
+e2k1árd
+e2k1árf
+e2k1árh
+e2k1árk
+e2k1árm
+e2k1árn
+e2k1á2ron
+e2k1árr
+e2k1á2ru
+e2k1á2rú
+e2k1árv
+ek1ásó
+ek1áta
+ek1átd
+e2k1áth
+ek1átj
+e2k1átm
+ek1á2to
+e2k1átt
+ek1bl
+ek1br
+1ekcém
+ekci2óf
+ek1cl
+ek1dr
+e2k1ebé
+e2k1e2dz
+e2k1egg
+e2k1e2gye
+e2k1e2kébő
+e2k1e2kés
+e2kela
+e2k1e2leg
+eke2leme
+ek1elha
+e2k1elk
+e2kellá
+e2k1elm
+e2k1elo
+e2k1előn
+e2k1elr
+ek1elta
+ekel2t1é2r
+e2k1e2ma
+e2k1e2mel
+ek1e2més
+ek1e2pi
+e2k1estr
+eke2szele
+eke2szo
+e2k1e2vé
+e2k1evi
+1e2kééh
+e2k1ég
+1e2kéik
+ek1ékek
+e2k1ékt
ek1é2le
-ek1épí
-e2k1éss
-e2k1é2te
-ekie2
-ek1ist
-e2kod
-ek1orv
-ekö2l
-ek1ölé
-ek1ölő
-ek1őr
-ek2rit
-ek2tal
-ek1út
-e2k1üt
-ek2vit
-el1ad.
-el1a2da
-el1a2dá
-el1add
-el1adh
-el1adj
-el1adn
-el1a2dó
-el1adt
-el1adv
+ek1éln
+ek1élő
+e2k1épí
+e2k1érin
+ek1értékb
+eké2rül
+e2k1ész.
+e2k1észh
+e2k1észn
+eké2tel
+e2k1étk
+e2k1étl
+e2k1étt
+e2k1é2ve.
+e2k1é2vek
+ek1é2vet
+e2k1évi
+ek1fr
+ek1gn
+ek1gr
+ekiá2
+ek1i2ga
+ekigaz1
+ek1i2ge
+e2k1igé
+ekii2
+ek1ill
+e2k1ima
+eki2már
+e2k1iná
+ek1ind
+e2k1isk
+ek1ism
+e2k1isp
+ek1i2zo
+e2k1íj
+ek1írá
+ek1íz
+ekka2ró2
+ek2k1ele
+ek2k1elf
+ekk1osz
+ek1kri
+ek2kű
+eklés3s
+ek2lim
+ek3nő
+e2k1oá
+ek1obj
+e2k1odv
+e2k1o2la
+ek1olló
+e2k1olv
+e2k1o2pe
+ekor2da
+ekor2d1á2
+ek1o2rom
+ek1orra
+e2k1orv
+ek1otth
+e2k1ó2h
+ek1ó2ra
+ek1ó2rá
+ekö2k
+e2k1ökö
+e2k1ö2lé
+ek1ö2lő
+e2k1öm
+e2k1önk
+e2k1önt
+ekö2ri
+e2k1örv
+ek1pl
+ek1pr
+ek1ps
+e1k2ram
+e1krétá
+ek2ris
+e1k2rí
+ek2róm
+ek1sl
+ek1sm
+ek1sp
+ek1st
+eksz1al
+ek2szip
+ek2tau
+ek2taz
+ekt1elk
+ek2t1esz
+ek2t1érd
+ek2til
+ek2tim
+ek2t1i2o
+ek2t1ok
+ektus1s
+e2k1ud
+e2k1u2ra
+ek1uro
+e2k1utá
+e2k1utó
+e2k1uz
+e2k1új
+e2k1úr.
+ekú2t
+ek1úto
+ek1útv
+e2k1ünn
+ekü2t
+ek1ütő
+ek1üzl
+e1k2vó
+el1a2ba
+el1abl
+el1a2bort
+e2l1a2c
+e2l1a2d
el1agg
el1a2gy
-ela2j
-el1ajá
+el1a2j
+e2l1akad
+e2l1a2kas
el1akc
e2l1a2l
-ela2m
-el1ame
+el1a2m
+el1ana
+elan2di
+el1a2ne
+el1a2ni
el1ann
-el1a2ny
+ela2ny
el1a2pa
-el1apr
-el1aszá
+ela2r
+el1ara
+el1ará
+el1aré
+el1asza
+el1aszi
+el1aszó
+el1aszu
e2l1a2u
-el1a2v
-el1ács
-e2l1á2g
-el1áj
+el1a2va
+el1a2ve
+el1azo
+elá2bé
+el1ág.
+e2l1á2ga
+el1ágg
+el1á2gi
+el1ágn
+el1á2go
+el1á2j
+el1áld
el1áll
-el1álm
-el1á2m
+el1á2lo
+elá2m
+el1ámí
+el2án
+elá2ná
+elá2ne
+elá2nó
el1á2p
el1ár.
-el1ára
+el1á2rá
el1árb
+el1árc
+el1á2re
+el1á2ré
+el1árf
+el1árh
+el1árk
el1árn
el1á2ro
-1eláru
-el1árv
+el1árö
+el1árr
+el1árt
+el1á2ru
+el1á2rú
elá2s
-el1ás.
-el1ása
-el1ásn
-el1áso
-el1ást
-el1ásv
-el1áta
+eláta2
+el1át1e2
+el1átf
el1átk
+el1átl
+el1átm
el1átr
el1ázi
el1ázo
-el1ázv
-eld2
-el1dr
-el1ebl
-ele2gal
-e2leges
-el1e2gyen
+el1ázt
+el1bl
+el1br
+2eld.
+el1d2r
+ele1bre
+2eled.
+1e2ledel
+el1eff
+ele2g1e2lé
+el1e2gyene
+e2legyü
el1egz
-el1e2lev
-e2l1ell
+eleí3ran
+ele1k2l
+ele2k1os
+ele1krá
+1elektr
+e2l1elb
+e2l1e2lemb
e2l1elm
-el1ember
-e2leme.
+e2lelőz
+el1elr
+ele2mad
+e2l1ember
+1eleme.
1e2lemei
-1e2lemek
-elem1ell
-1e2lemez
-ele2m1érté
-el1e2més
-1e2lemi.
-1e2lemű
+1elemek
+ele2mell
+1e2lemem.
+1e2lememm
+1e2lemes.
+1e2lemesn
+ele2mesz
+ele2mélt
+ele2mérd
+1e2lemük
+1e2lemünk
1e2lemzé
1e2lemző
-ele2res
+2elend
+e2lener
+ele2nél
+eleó2
+ele2pal
+ele2pap
+ele2pele
+ele2pell
+ele2p1ő2r
+e2lerd
+el1e2red
+el1e2rei
el1erj
-el1erk
-el1ern
-e2l1e2rő
-ele2s1a
-ele2sem
-el1esh
+e2l1ern
+ele2róz
+ele2sege
+ele2sésb
+ele2sése
+ele2sésé
+ele2sésh
+ele2sési
+ele2sésk
+ele2sésn
+ele2sésr
+ele2séss
+ele2sést
+ele2sésü
ele2sik.
-eles3s
-ele2tele
+e2l1esnén
+ele2sőb
+ele2sős
+e2l1essél
+ele1sta
+ele2szek
+ele2t1e2két
+ele2teti
+ele2tetn
+ele2tető
+ele2t1ék
+ele2tél
+e2l1ették
+eleü2
+1e2l1e2vők
+el1e2xi
+e2lébb
+elé2du
el1é2ges
el1é2get
+el1égj
+el1égtek
+el1égv
+el1é2het
eléka2
-el1é2kel
+elé2kak
+elé2k1an
+elé2k1á
+elé2k1e2le
+elé2kev
+elé2keze
+elé2kezi
+elé2kezt
+el1ékí
+elé2kö
+elé2ku
el1él.
-elé2lek
+el1éld
+elé2led
+el1é2let
el1é2lé
el1élh
+el1é2li
el1élj
el1éln
-el1élt
-el1élv
-el1érc
-elé2rem
-elé2ren
+el1éls
+e2l1élt
+el1é2lü
+e2l1élv
+e2l1é2neke
+e2l1é2nekh
+e2l1é2red
+e2l1é2rem
+elé2rend
e2l1é2rez
-1e2l1éré
-e2l1érh
-el1é2ri
-e2l1érj
-e2l1érk
-e2l1érn
-el1érs
-e2l1érü
-el1f2
+elé2rét.
+elé2ri.
+e2l1érp
+e2l1érrő
+e2lértel
+e2l1érté
+el1érth
+e2l1értő
+e2l1é2rü
+e2l1érz
+2elésétő
+elé2so
+2elész.
+2elészel
+2elészem
+2elészne
+2elészné
+2elésző
+2elészü
+2elészv
+elé2tel
+e2l1é2tes
+elé2tete
+e2l1étk
+e2l1étt
+e2l1év.
+el1fl
+el1f2r
+el1gl
+1elhap
+el2ib
+el1ideg
+el1idé
+el1i2do
el1iga
-e2l1ige
-2elik
-el1ikr
+e2l1igé
el1ill
-el1ina
-e2l1ing
-elin1n
-elio1
-eli2os
-el1ivá
-1e2lix
-el1izm
-e2l1ín
-el1ír.
-el1íra
+e2l1i2ma
+e2limá
+e2l1imp
+e2l1i2na
+e2l1into
+el1i2on
+eliő2
+e2l1i2p
+e2l1ira
+e2l1i2ro
+e2l1i2si
+e2lism
+el1iss
+el1iste
+eli2tin
+eli2tol
+elitu2
+el1i2vá
+e2l2ix
+el1i2zo
+e2l1íg
el1í2rá
-e2l1í2v
-2elj.
-el1k2
+el1í2v
+elka2r1á
+1elkezdé
+1elkezdő
+el3ki
+el1k2l
+el1k2r
+el1kv
+el2l1a2dá
+el2l1a2dó
ell1alk
+el2l1amb
+el2lamp
+ella1t
+el2lau
+el2l1ábr
+el2l1áll
+1ellátáso
1ellátásü
+1ellátm
+el2lef
+elle2g1ó2
+ell1elké
+el2lelm
+1ellená
+1ellenes
+1ellenf
+1ellenő
1ellens
-ellu2s
+1ellenz
+el2lid
+ell1inf
+ell1ing.
+ell1int
+el2l1or
+ell1osz
+ell1órá
+el2lön
+el2lös
+el2l1űr
+1elmééh
1elmél
-2elné
+1elméte
+1elnép
+1elnök
+el1obj
+el1off
+el1oj
+e2l1o2ká
+el1okm
e2l1o2l
el1oml
-el1orc
-el1ord
-elo2s
-el1oso
-el1oss
-el1ox
-el1ó2ri
-el1öm
-el1ön
-el1ör
-el1ö2z
-1e2lőad
+el1omo
+el1ont
+el1opc
+e2l1ope
+el1oro
+el1orr
+el1os
+e2losz
+e2l1ox
+eló2ig
+eló2in
+e2l1ó2ri
+el1öb
+el1ö2m
+e2l1ön
+e2l1ör
+e2l1ös
+e2l1ö2z
+2előáp
+2előár
2előbé
-1előd.
-2előin
-2előit
-2előkh
-2előkk
-2előkö
-2előkr
-2előne
-1e2lőő
-2előr
-2előt.
-2előter
-e2lőtet
-1elővés
-el1ph
+2előbi
+2előbo
+1elődei
+elő2d1í2
+1elődje.
+2elődo
+1elődöt.
+előe2r
+1e2lőfú
+2előfü
+2előfű
+1e2lőhív
+1előhű
+2előib
+2előik
+2előim
+2előiv
+2előja
+2előké.
+2előkért
+1előkése
+1e2lőkést
+2előkl
+2előkő
+2előkt
+2előku
+2előkü
+2előmö
+2előmű
+2előna
+1előnn
+2előnö
+1előny.
+1előnyb
+2előnyer
+1előnyh
+2előnyi
+1előnyk
+1előnyn
+1előnyö
+1előnyr
+1előnyt
+1előnyü
+2előö
+el1őr.
+1e2lőreg
+1előreh
+1előrej
+el1őriz
+el1őrl
+2előro
+e2l1őrü
+2elősá
+2előso
+2elősö
+elő1s2p
+2elősze
+2előszé
+2előszi
+2előszó
+2előtü
+2előü
+2elővis
+2előviz
+1e2lőz.
+e2lőze
+2e3lőzene
+1előzm
el1p2l
-el1pra
-el1st
-2eltek
+el1pró
+el1sk
+el1sl
+el1sm
+el1sz2t
+el2t1aj
+eltára2d
+eltár1ada
+2elte.
+el2t1e2rei
2eltes
2eltet.
2eltete
2elteté
+2elteth
2elteti
+2eltetj
2eltetn
-el2töv
+2eltets
+1eltettk
+2eltetü
+2eltetv
+2eltéb
+2eltél
+2eltét
+el1t2ra
+el1trá
+el1tré
+2eltük
+e2l1ud
+el1u2g
+elu2n
+el1und
el1u2r
-el1u2s
-el1u2t
+e2l1u2t
+e2l1uz
+el1új
el1ús
-el1üd
-el1üs
+el1ú2t
+el1üc
+e2l1üd
+e2l1üg
+elügy1ér.
+elügy1érn
+elü2kén
+e2l1ültet
+e2l1ür
+e2l1üs
e2l1üt
-el2val
+e2l1üv
+e2l1üz
+el1űrt
+e2l1űz
+elv1ada
+elv1a2dó
el2v1at
+el2v1árai
+el2v1áras
+el2v1árár
+elv1ász
+el2vát
+el2v1enc
+el2v1égü
+elv1éle
+el2v1ér.
+el2v1éri
+el2vik
+elv1olt
el2v1ó2
+el2vöd
+el2vő
+el2vú
e2ly1a2
e2ly1á2
-e2lyel
-elyes1s
+e2ly1e2kén.
+e2ly1el
+e2lyer
+ely1eszt
+ely1é2jé
+ely1é2ké
+e2ly1él
+e2lyés
+e2ly1i2ko
+e2ly1ira
+ely2kéj
e2ly1o
-e2lyö
-ely2tál
+e2ly1ó
+e2lyöm
+e2lyön
+e2lyös
+e2lyő
+ely1ul
+elyü2l
+e2ly1ülé
e2m1ab
-em1a2da
-em1a2dó
-em1adt
-ema2j
-em1aja
+em1a2dat
+em1a2dás
+e2m1a2do
+e2m1a2dó
+e2m1adt
+e2m1a2gi
+em1a2ja
+e2m1ajá
em1ajk
-ema1k
-em1a2ny
-em1arc
-e2m1ass
-em1atl
-e2m1av
+e2m1ajt
+em1a2ka
+em1aká
+e2m1aku
+em1a2lap
+e2m1all
+em1almá
+em1alv
+e2m1ana
+1emaná
+e2m1a2ny
+ema2p
+em1apá
+em1apr
+em1a2rán
+em1asszo
+e2m1atl
+e2m1a2u
+e2m1a2v
+e2m1a2zo
e2m1áb
-em1ár.
+emá2l
+em1ála
+em1áld
+em1áli
+e2m1áp
+emá2r
+e2m1ára
e2m1árn
+e2m1áro
+e2m1áru
+em1árv
+e2m1ásá
+emát1a2
+e2m1áte
e2m1átl
-1emberr
-1embó
-eme2c
-emec3h
-1emeled
-1e2melen
-1emelk
+em1átm
+e2m1átt
+e2m1átu
+1embarg
+1embered
+1emberf
+ember1ő2
+1embers
+emb2len
+1emblé
+em1bre
+1embri
+em1bro
+em1dr
+e2m1ef
+eme3ger
+eme3gi
+em1egyet
+em1egyé
+e2m1egz
+e2m1e2kés
+e2m1ela
+em1elb
+1emelet
+1emelke
+e2m1ellá
e2m1elm
-e2m1e2l1o
-em1e2res
+2e2m1elo
+1emelőb
+1emelőe
+em1előny
+1emelős
+1emelőv
+1emelty
+e2m1ember
+e2m1e2mel
+e2m1emu
+e2mener
+emenes1s
+e2m1e2p
+e2m1e2rény
e2m1e2rő
-em1ers
+eme2sa
+em1e2seté
+e2m1e2sés
+em1e2szem
+e2m1e2szet
+e2m1eszk
+e2m1eszm
+e2m1eu
+e2m1e2v
+eme2z1a
+eme2z1á2
+eme2z1o
+eme2z3s
+e2m1ég
+e2m1é2he.
+e2m1é2hen
+e2m1é2hes
+e2méhs
e2m1é2j
-emé2lete
-1e2méss
-e2mid
-e2m1im
-e2m1ip
+emé2k
+e2m1éke
+em1ékr
+em1é2let
+e2méneke
+e2m1ép
+e2mértel
+e2m1értéke
+e2m1értéké
+e2m1értékn
+em1észl
+emé2t1a2
+emé2tár
+e2m1é2tek
+emé2tel
+e2m1étel.
+emét1elh
+emét1els
+em1fl
+emfoga2d
+emfo2gada
+em1f2r
+em1gr
+e2midé
+em1i2dő
+emi2g
+e2m1iga
+e2m1ige
+e2m1igé
+em1iks
+emi2m
+em1ima
+e2mimá
+e2m1inf
+e2m1ins
+e2m1inte
+e2m1i2p
+e2m1ira
e2mirá
+e2m1iro
+e2m1irt
+e2m1isk
+e2m1ism
+e2m1iste
+emi2sza
+emi2szá
+emi2szo
+em1izé
+em1izg
+e2m1i2zo
+e2míg
+e2m1íj
e2mír
-2emo
-em1old
+e2m1í2v
+em1kl
+em1kr
+1emlékm
+1emlékv
+emo2k
+e2m1okl
+em1oko
+e2m1okt
+em1ola
+e2m1old
+em1oll
+e2m1olt
+e2m1o2p
+e2m1ork
+e2m1ors
e2m1orv
-em1ó2ra
-em1ös
-em1ph
-em1s
+emo1t2
+emó2ra
+em1ó2rá
+e2m1öb
+emö2k
+e2m1ökö
+emö2l
+e2m1öld
+em1ölé
+e2m1ön
+e2m1ö2r
+e2m1ös
+em1öv
+e2m1ö2z
+em1őr.
+em1őrk
+em1őrn
+em1ő2rö
+em1őrr
+em1őrt
+1empát
+em1pc
+em1p2re
+em1pré
+em1pro
+em1pró
+em1p2s
+em1sk
+em1sm
+em1sp
+em1s2t
+em1t2r
1e2mu.
-em1ur
-em1üg
-em1ür
-em1űz
+e2mud
+e2mug
+e2muj
+1e2muk
+1emulz
+1e2mum
+em1uno
+e2mur
+e2musz
+em1utal
+e2m1u2tá
+e2mutc
+e2m1utó
+e2m1új
+em1úr
+e2m1út
+e2m1üd
+e2m1üg
+e2m1ü2lő
+e2m1ünn
+e2m1ür
+e2m1üt
+e2m1üv
+e2m1üz
+e2m1űz
+em1zr
+e2n1ab
+en1a2do
+en1agi
e2n1a2j
-e2n1ak
+e2n1a2k
+en1a2la
+en1alk
+en1all
+en1alm
e2n1a2n
-en1ar
-en1as
-e2n1a2u
-e2n1áb
-en1áll
-e2n1ár.
+en1a2pá
+ena2p1e
+en1a2rá
+en1arc
+en1asz
+en1atk
+en1aut
+en1ábr
+en1ág
+en1áld
+en1álm
e2n1ára
+en1árn
en1á2ro
-en1ázt
+e2n1áru
+en1átk
+en1átm
+en1átv
+e2n1áz
+en1bl
+en2c1a2
+en2c1ár
en2c3h
-enci2ah
-enc3sze
-en2d1ell
+en2c1ip
+en2cí
+en2c1ol
+en2c1os
+en2c1ö2
+enc3ség
+en2c3sor
+enc3s2p
+enc3sz
+en2cu
+en2d1adá
+en2d1alk
+en2dano
+en2d1áll
+en2d1árn
+en2d1átl
+end1é2jé
+en2d1ér.
+en2d1érr
+en2d1értő
+en2d1érz
+en2d1or
+en2d1ón
+en2d1ó2r
+en2dös
+en1d2rá
+en2dú
en2dza
+eneá2
+e2n1egér
+e2n1egg
+en1e2lek
+en1eljá
+en1elk
+e2n1ell
en1elm
-e2n1emé
+en1elny
+en1elü
+en1elvá
+e2n1eml
+eneó2
ene1p2
2enerá
1e2nerg
-ene2t1o
-e2n1eze
-e2n1é2ra
+e2n1ern
+e2nerv
+2enes
+ene1sztá
+ene2tal
+ene2tos
+e2n1ex
+ené2k1a
+ené2kel
+enéki2
+ené2kis
+en1épí
+en1épü
+e2n1ér.
+e2nérd
+e2n1éré
+e2n1éri
+e2n1érte
+e2n1érv
+ené2sza
+ené2szer
+ené2sz1in
+e2n1étk
+e2n1éves
+ené2vig
+en1f2l
+enfluo2
+enga2
+en2gan
+1engedé
+enger1ő2
engés3s
eng1g
-2eni
-eni2g
-en1igé
-e2n1ip
-en1ira
+e2nidé
+enidi2o
+e2n1i2ga
+e2n1ige
+e2n1igé
+en1ill
+e2nimá
+e2n1ina
+en1ind
+e2n1inf
+e2n1inte
+e2n1inv
+e2n1ira
+en1i2rá
+en1isk
e2n1ism
+eni2sza
+eni2szer
+eni2szo
+eni2sz1ó2
e2n1ív
-enké2t
-en1k2r
-en2nül
+en1k2j
+en2n1eme
+en2nes
+enn1ége
+enné2k
+en2n1éke
+en2nér
+en2nir
+en2n1ol
+en2nú
+en2n1ül
+enny1a2d
+enny1as
+enny1á
+en3nyer
+enny1í2
+en3nyu
+e2n1ob
+e2n1of
+e2n1oi
en1old
-en1ó2r
-en1öl
+e2n1olv
+eno2ni
+en1opt
+eno2r1á2
+e2n1ost
+en1oszt
+e2n1ox
+enóta2
+enó2tal
+enó2t1e2
+e2n1öb
+e2n1öl
+en1ön
+e2n1ös
e2n1ö2t
-ensas3
-en2sel
-en1ste
-ent1a2ny
-entes1s
-en2tev
-ent1ért
-en1uc
-en1ud
-enu2t
-e2n1ú
-2enw
-e2ny1ag
-en3ya2n
-eny1as
-e2nyau
-enyeres1
+e3növ
+enő2rü
+en1pr
+en1ry
+en2s1ab
+en2s1a2l
+en2s1a2n
+en2sas
+en2s1el
+en2s1érté
+ens3szá
+en2s3zon
+en2t1a2c
+en2tada
+ent1agy
+enta1k2
+en2t1a2la
+ent1alj
+en2t1alk
+ent1a2lo
+ent1and
+en2t1a2ny
+ent1ass
+en2t1á2rak
+en2t1á2rat
+en2t1árá
+en2t1á2rú
+en2t1elmé
+ente2r1a
+en2t1este
+en2t1esté
+en2t1esti
+ente1t2r
+en2t1é2g
+en2tép
+en2térm
+en2t1é2ve.
+en2tigé
+en2t1i2o
+enti2p
+ent1ipa
+enti2sz
+en2t1okt
+en2tön
+en1trad
+ent2ran
+en2tun
+en2t1u2r
+en2t1ü2z
+en1uta
+en1úr
+en1út
+e2n1űz
+e2nyab
+e2ny1a2d
+e2ny1ae
+enya2g
+eny1aga
+eny1agá
+e2ny1aj
+eny1alk
+e2ny1a2n
+eny1aré
+e2ny1as
+e2ny1at
+e2ny1au
+eny1d2
+eny1e2dzé
+e2nyelm
+eny1előn
+eny1elvo
+eny1elvű
+e2ny1e2rő
+eny1eve
+e2nyéva
+1enyhi.
+eny2h1ős
+e2ny1id
+e2nying
+e2ny1ira
+e2nyiz
+eny1í2ró
+e2nyok
+e2ny1o2l
+e2ny1or
+e2ny1os
e2ny1ó2
-eny1us
-en2zed
+enyö2k
+e2ny1ökö
+e2nyöt
+eny1s
+enyt2
+eny1tr
+eny1út
+enyva2
+eny2van
+1enyve.
+eny2v1e2l
+enyves1s
+en2zal
+1enzim
e1o
-e2oc
-eo2da
-e2odi
-eo1g2rá
-e2oh
+eo2áz
+e2obo
+e2ode
+eo2dú
+eog2rafi
e2oka
+eo2kád
+e2okár
+e2oké
e2o1k2l
-e2oko
-eo1k2r
+e2okon
+eo2kos
+eo2kö
+eo2laj
+e2oló
eo2ly
+e2ome
e2omé
-eona2
-eo2n1ar
-e2oná
-eont2
-eon1tr
-eo1p2
+e2omi
+eo2n1al
+eo2nan
+eon1any
+eo2natom
+eo2n1au
+eo2n1ál
+eo2nár
+eon1d2
+eo2ner
+eon1f2
+eo2niz
+eo2nö
+eon1t2r
+eo2n1ú
+eo2nü
+e2opa
eo2pe
-eorgi2á
-e2os.
+e2o1p2l
+eo1pro
+eo2r1a2
+eo2r1á2
+eo2res
+eo2r1és
+eorgi2a
+e2orgi2áb
+eori2tá
+eor1k2
+eo2rö
+eor1s2
eo2so
-eosz2f
-e2ov
-e2oz
+e2ost
+e2osza
+eo1sz2f
+e2otí
+e2oto
+eo1t2r
+eo2vi
e1ó
-e2óf
-e2óm
+eóa2d
+e2óbö
+eó2ce
+eó2dá
+e2ófa
+e2óhe
+e2óje
+e2ókap
+e2ókép
+e2ókor
+e2ómi
+e2ómű
+e2óné
+eó2no
+eó1pr
+eó2rá
+e2óre
+e2ósu
+e2ószo
+e2óta
+e2ótá
+e2óte
+e2óté
+e2óti
+e2ótí
+eó1tré
+eó2vak
+e2óve
+e2óvé
+e2óví
+eó2vo
+eó2vó
e1ö
-eö2l
-eö2m
-eö2v
-eö2z
-e1ő2
-epa2d
-ep1ado
-ep1aka
-ep1a2la
-ep1asz
-e2p1ág
-ep1elo
-e2perf
-ep2ha
-ep2ho
-ep2lan
-ep2las
-e2pos
-ep2rav
-ep2rio
-ep2tol
-er1abl
-er1a2da
+eö2bö
+eö2dé
+eö2kö
+eö2le
+eö2lé
+eö2li
+eö2lö
+eö2lő
+eö2lü
+eö2mö
+eö2nö
+eö2rö
+eö2rü
+e2ös.
+eö2ve
+eö2vi
+eö2vü
+eö2zö
+e1ő
+eő2re
+eő2rö
+eő2rü
+eő2sz
+e2p1ab
+e2p1a2da
+e2p1a2dá
+e2p1a2dó
+ep1a2gy
+e2p1aka
+e2p1akk
+e2p1akn
+ep1a2lak
+ep1a2lap
+e2p1alj
+e2p1alk
+epa2lom
+e2p1a2ny
+epa2rán
+ep1atró
+ep1aut
+ep1a2zo
+e2p1áb
+e2p1á2g
+ep1állá
+e2p1á2ra
+epá2s
+e2p1ása
+ep1áta
+ep1átc
+e2p1á2t1é
+ep1átf
+e2p1átm
+ep1á2t1o
+ep1átt
+ep1átü
+e2p1átv
+ep1bl
+ep1br
+ep1dr
+e2p1e2dz
+ep1e2lemr
+e2p1e2let
+e2p1ellá
+e2p1elo
+e2p1ene
+epe2ral
+epe2r1e2c
+epe2rev
+epe2rin
+epe2rül
+e2p1esti
+epe2szá
+e2peszmé
+e2p1ex
+1e2péd
+1epééb
+1epééi
+1epéén
+e2p1ég
+1e2péit
+e2péj
+ep1ékh
+ep1éle
+ep1élm
+1e2pénk
+e2p1ér.
+ep1fl
+ep1ido
+e2p1i2ko
+ep1ind
+e2p1inga
+e2p1i2rá
+e2p1irt
+e2p1ism
+e2piz
+e2p1íg
+e2p1íj
+e2p1ín
+e2p1ív
+ep1kl
+ep1kr
+ep2lag
+e1p2laká
+e1p2lan
+e1p2lán
+e2p1ob
+e2poch
+ep1okt
+e2p1olv
+ep1ope
+e2p1orn
+ep1orsó
+1eposz.
+1eposza
+1eposzá
+1eposzt.
+ep1osztá
+e2p1ö2l
+ep1önt
+e2p1ös
+e2p1öv
+e2p1őri
+ep2pan
+ep2pát
+ep2p1e2le
+ep2p1elh
+epp1eró
+eppó2
+ep2pór
+ep2pö
+ep1pro
+ep1pró
+ep3ret
+e1p2réd
+e1p2rin
+e1proj
+e1p2rot
+ep1s2k
+ep1sp
+ep1st
+ep2tad
+ep2t1aj
+ep2t1í2v
+ep2t1op
+e2p1ug
+e2p1u2ta
+e2p1utó
+ep1új
+ep1út
+e2p1üg
+e2p1üt
+e2p1üz
+e2p1űz
+er1abla
+er1a2bor
+e2r1abr
+er1abs
+era2dat
+e2r1a2dá
er1adm
-er1ajk
-er1akc
-e2r1akk
-e2r1a2la
+er1a2do
+e2r1a2dó
+era1dr
+er1a2ge
+er1agr
+e2r1a2ja
+e2r1ajk
+er1ajtó
+e2r1a2kad
+e2r1a2kas
+e2r1akc
+e2r1akti
+er1a2la
+e2r1alg
+e2r1alj
er1alk
-er1ana
+e2r1a2lo
+er1als
+e2r1alt
+er1alv
+er1amb
+er1amp
+er1angy
er1ann
-er1a2pa
-er1apá
-era2r
-er1ara
-er1ass
-erato1s
-e2r1a2u
-e2r1a2v
-e2ra2z
-er1azo
-er1á2gy
-e2ráld
-e2r1áll
-er1ár.
-erá2rak
-er1árb
-e2r1árf
+er1a2nya
+er1a2pa.
+er1app
+er1aps
+e2r1a2ro
+e2r1asp
+era2sz1a2l
+era2szav
+era2szárn
+era2szel
+era2sz1é2p
+e2r1atk
+e2r1atl
+era1t2r
+er1att
+er1aut
+e2r1a2zo
+e2r1ábr
+erá2fé
+er1áge
+er1á2gú
+e2r1á2gy
+er1állá
+er1állé
+er1állo
+er1álló
+er1állv
+er1ápo
+e2r1ár.
+er1á2rak
+er1á2rá
+e2r1árb
+er1áre
+er1áré
+er1árf
er1árk
-er1árn
-er1á2ro
-er1árr
-er1árt
+e2r1á2ro
+e2r1árr
+er1árs
er1á2ru
-er1áta
-er2cél
-er2c3h
+er1árú
+er1árv
+er1ásá
+e2r1á2sz
+er1á2t1e2
+e2r1áth
+er1á2ti
+e2r1átí
+e2r1átj
+e2r1átk
+er1átl
+e2r1átm
+e2r1átn
+e2r1átr
+e2r1átt
+e2r1átv
+erb1i2na
+er2c1a2l
+er2car
+er2c1ár
+er2c1át
+erc1ell
+er2c3ho
+er2cid
+er2c1ina
+er2c1iná
+er2c1i2pá
+er2cis
+erc1k2
+erco2
+er2cö
+er2csad
+er2cs1an
+ercs1ál
+er2cú
+er2cz
+1erdej
1erdő
+ereá2
+1eredetű
+e2redén
1e2redm
-ere2gá
-1erejü
-ere2kar
-erekes3s
-ere2ko
-e2r1ela
-e2r1ell
-er1elo
-e2remu
-ere2tel
-ere2vel
+eree2
+er1eff
+ere2gál
+ere2gel
+e2r1e2ger
+erei2g
+1e2rején
+1e2rejér
+ere2k1el
+erek1e2szű
+erek1é2j
+ere2kot
+erek1t
+ere2k1ú2s
+e2r1e2leg
+er1elér
+e2r1ellen
+er1elli
+e2r1elö
+e2r1elr
+erem1egy
+ere2m1emb
+erem1érté
+ere2m1ut
+e2r1enz
+ereo1gra
+ere2pan
+ere2pas
+erepá2
+ere2p1ál
+ere2p1e2sé
+ere2pin
+ere2pos
+er1erk
+er1ern
+er1eró
+e2r1esti
+e2r1estj
+e2r1estr
+e2resze.
+ere2szí
+e2reszü
+ere2tál
+ere2tát
+ere2t1eg
+ere2t1erj
+ere2t1é2rő.
+ere2t1é2ve.
+eretö2
+er1e2vés
e2r1ex
-erés3sze
+1e2rezet.
+1e2rezete
+1erezőkh
+erébe2
+eré2bes
+er1ég.
+er1é2ge
+er1égé
+e2r1éj.
+e2r1éjb
+er1éjf
+e2r1éjn
+e2r1éjs
+eré2k1a2
+eré2ká
+eré2kol
+eré2k1ö
+e2réneke
+e2r1é2neké
+eré2p1a
+eré2pá
+e2r1é2ren
+e2r1é2ré
+e2r1é2ri
+eré2sa
+eré2s1elv
+eré2sza
+eré2szá
+eré2szo
+eré2szö
+er1é2ter
+e2r1étk
e2r1év.
-eré2zé
+er1é2ve.
+e2r1é2vek
+e2réven
+e2r1é2ves
+e2r1é2vet
+e2r1é2vén
+er1é2vét
+er1évf
+er1évh
+e2r1é2vi
+e2r1évn
+e2r1évr
+er1évt
+er1évv
+erfé2l1é2v
+er1fl
+er1f2r
er1gl
-er1ide
-e2r1iga
-e2r1ind
-e2r1inj
-e2r1ism
-er1i2sza
-eri1szk
-er1izo
-er1izz
-er1íj
-e2r1íz
-er1kr
+e2r1i2deg
+e2ridé
+e2r1ido
+er1idu
+eri2ga
+e2r1i2gá
+e2r1i2kon
+e2r1i2mi
+eri2no
+erint2
+e2rinteg
+erin1tr
+e2r1i2on
+eri2os
+e2r1i2par
+e2r1ira
+er1iró
+e2r1isk
+er1ism
+eri2szo
+e2r1ita
+e2r1i2zé
+e2r1izg
+er1íg
+er1íj.
+er1íjá
+e2r1ír
+e2r1í2z
+er1k2r
+er1k2v
+erme2k1a2
+erme2ká
+erme2kesz
+erme2ko
+erme2köl
+erme2sz1á
+er2mind
+erm1isi
+ern1ala
+ern1ékn
+ern3n
+er2n1ó2d
1ernyő
-ero1g2r
-ero1t2r
-er1o2xi
-e2r1ó2r
-e2r1ö2k
+er1okl
+e2r1okm
+er1olda
+e2r1o2li
+ero2nal
+er1ope
+e2r1opt
+er1orc
+er1ord
+er1orm
+er1orn
+er1o2ro
+er1ors
+e2r1orv
+erosz2f
+e2r1o2ve
+e2r1ovi
+e2r1óc
+er1ó2dá
+er1ólo
+er1ó2rá
+er1óri
+e2r1ö2c
+erö2k
+er1ökl
+er1öko
+e2r1ökö
e2r1ö2l
-er1ön
-er1ös
-e2r1ö2t
-er1ö2z
-1e2rőmű
-1erősítő.
-1erősítőr
-1erőszakol.
-er1pl
-erro1k2
+e2r1ör
+e2r1ös
+e2r1öt
+e2r1ö2z
+e2rődd
+erőé2n
+1erőlt
+1e2rőmé
+1erőmh
+1e2rőnö
+1e2rőö
+e2r1őri
+er1őrö
+er1p2l
+er1p2s
+er2rév
+er1ry
er2s1a2d
-er2san
-er2sar
+ers1alk
+er2s1an
+er2sat
+er2s1á2gi
+ers1ára
+ers1eml
+er2sérte
+er2s1érté
+er2s1értő
+er2sid
+er2s1im
+er2s1i2n
+er1ská
+er2s1od
er2s1ol
-er2s1ö
-er1str
-er2sú
-er2t1any
-erta2r
-ert1ara
-2erte
-ertés3s
-e2r1ur
-e2r1ü2g
+er2s1ón
+er1spor
+er1srá
+er1stra
+er2sut
+ersz2to
+er2t1ai
+ertá2p
+ert1ápo
+ertára2d
+ertár1ada
+er2t1elké
+ert1estj
+ert1esze
+er2t1é2j
+er2t1ékn
+er2t1évén
+er2t1é2vév
+er2tid
+er2t1i2m
+er2t1íz
+er2tos
+ert1órá
+er2t1ös
+er2t1öz
+er1t2ran
+er1trén
+ert1s
+er2t1út
+erubi2
+1e2rup
+e2r1u2ra
+er1urá
+er1uru
+er1u2sz
+er1u2tá
+e2r1új
+e2r1úr
+e2r1ú2s
+er1útj
+er1útl
+er1ú2to
+er1útr
+e2r1üd
+e2r1ügg
+er1ügyb
+er1ügyn
+er1ügyr
+e2r1üled
+e2r1ür
+e2r1üs
+e2r1üt
+e2r1ü2v
+e2r1üz
+e2r1ű2z
+er2v1ala
+er2v1alt
+erva2n
+erv1any
+er2v1á2ru
+er2vása
+er2v1átk
+erv1e2lőké
+er2vereze
+er2v1e2sze
+er2vék
+er2vérte
+er2v1érz
er2vos
-e2s1ac
-es1a2n
+er2vös
+er2vú
+er1ya
+2esa.
+e2s1a2b
+e2s1a2d
+2esait
+e2s1alja
+es1alm
+esa2n
+es1any
esa2p
-e2s1as
-es1áb
-es1á2g
-e2s1ál
-es2co
-e2s1ekkén
+es1apá
+es1arc
+es1ass
+es1asz
+es1a2ty
+e2s1au
+2esábó
+e2s1á2g
+2esán
+es1ára
+es1á2ru
+2esát
+es1bl
+es1br
+es2ch
+1esdő
+es1dró
+1esedez
+ese1fr
+ese2gye
e2s1elm
-e2s1emb
-1esemé
+e2seng
+es1epri
+e2s1erd
+eseren2
+1e2settü
+2esé.
+esé2g1el
+1eséll
+1esély
+e2s1ép
+es1érc
+esés3s
+e2s1i2d
+esike2t1
e2s1ina
es1i2pa
-es1ita
-es1í2rá
-es1k
-es2kat
+e2s1isk
+1esítőst
+es1í2zű
+e1s2kat
+e1s2kál
+es2kic
1eskü
-e1s2lat
-es2már
-es1ol
-e2s1os
-e2sőc
-e2sőe
+es2lat
+eslege2l
+esle2t1o
+es2lin
+e1s2lu
+e1s2mac
+esná2
+2esok.
+2esoka
+2esokbó
+2esokk
+2esokr
+2eson
+e2s1op
+2esos.
+2esosa
+es1osz
+es1ott
+e2s1ó2r
+esőká2
+e2sőz
+es2pan
+es2pec
+es1p2l
+e1s2pó
+e1s2rá
+es1stá
+es3szab
+essz1aga
+essz1a2r
+1esszenc
+es3szerű
+essz1élet
+essz1élt
+essz1int
+essz1ok
es3szö
-esta2l
-est1ala
-es2t1áll
+e1s2tab
+es2taf
+es2t1a2l
+es2tana
+es2t1a2ny
+estapolc1
+es2t1a2ra
+est1ará
+e1s2tat
+es2taz
es2t1á2p
-es2tim
-es2tí
-es2top
-es2tőr
-es1trá
-e1s2tu
+est1áram
+es2t1ári
+es2t1árn
+es2t1át
+1esteko
+es2tenz
+este2r1a
+es2t1este
+es2t1esti
+1estéih
+1estéj
+1estém
+1esténk
+es2t1ér.
+es2t1éri
+es2t1érr
+es2térte
+es2t1é2rü
+es2t1ill
+es2t1ina
+es2t1int
+es2tip
+es2t1isz
+es2tiz
+es2t1ol
+e1s2top
+esto2r
+es2t1os
+es2t1ó2r
+estö2
+es2t1ös
+es2t1őr.
+es2t1őrk
+es2t1őrö
+es2t1őrr
+es2t1őrt
+es2tun
es2tú
-es1ú2s
-es1út
-es1ü2ve
-e1sy
-es3zac
-e2sz1ad
-esza2ké
-e2szárp
+es2tür
+es2t1ü2z
+e2s1ud
+esu2r
+es1ura
+es1urá
+e2s1utá
+es1úr.
+es1úrb
+es1úré
+es1úrh
+es1úri
+es1úrk
+es1úrn
+es1úrp
+es1úrr
+es1úrt
+e2s1ú2t
+e2s1üz
+e2sza2c
+esz1acé
+e2szad
+e2sz1a2e
+esz1ajt
+esza2k1é
+esz1akn
+esz1alj
+esz1any
+e2sz1ara
+e2sz1au
+e2száru
+e2sz1ás
+eszá2t
+esz1áts
+e2szece
+eszeg1ér
+e2sz1egy
+esz1ekés
+e2sz1ela
+e2sz1e2mel
+1eszenc
+e2sz1erd
e2szev
-e2szég
-esz1é2les
-esz1iz
-e1sz2kó
-es3zse
-eszta2
-esz2t1al
-esz2t1an
-esz2tár
-esz2t1ö
+e2sz1ex
+eszé2do
+esz1é2pí
+e2sz1é2ri
+esz1g2
+esz1i2pa
+esz1isk
+esz1ist
+e2sz1ita
+e2sz1iz
+eszke2l
+1eszme.
+1eszméb
+1eszméi
+1eszméj
+1eszmék
+1eszmén
+1eszmét
+1eszmév
+e2sz1old
+eszö2l
+esz1ölő
+e2sz1ön
+es3zsá
+esz3se
+esz2tab
+esz2tad
+esz2t1a2gá
+esz2taj
+esz2t1ala
+esz2t1alj
+esz2t1ap
+eszt1árf
+esz2t1árn
+esz2t1e2v
+esz2t1ér.
+esztés3s
+1esztéti
+esz2tid
+esz2t1ol
+esz2t1ó2r
+esztö2
+esz2t1öl
+esz2t1őr.
+esz2tut
+esz2t1út
+esz2tüz
+e2sz1ü2g
+e2sz1ü2z
+1e2szűs
+1e2szűt
+esz1z
+et1abr
+eta2c
+et1acé
e2t1a2d
-eta1g2r
-e2t1aj
-et1akt
-et1a2la
-et1alk
-e2t1ant
-eta2nya
-eta2nyá
-et1a2rá
-etas2
-et1ass
+e2t1a2gá
+e2t1a2gy
+e2t1a2j
+et1a2kas
+e2t1akc
+et1akó
+e2t1aku
+eta2lag
+eta2lak
+et1a2lás
+e2t1alb
+et1ald
+et1alf
+e2t1alg
+et1alj
+e2t1alk
+1e2talo
+eta2n1é
+eta2nyag
+e2tapr
+et1a2ra
+e2t1ará
+e2t1arc
+e2t1arz
+et1asp
+e2t1ass
+et1a2szá
+e2t1atk
+e2t1a2to
+e2t1aty
+e2t1a2u
+e2t1a2z
+et1ábr
+e2t1á2cs
+e2t1áf
et1ág.
-et1á2ga
+e2t1á2ga
+et1ágb
+et1ágg
et1ágn
+et1ágr
+e2t1áh
+et1áju
et1áll
-etá2ru
-e2t1á2t1a
+e2t1álm
+e2t1á2rad
+et1áre
+et1árny
+etá2ron
+et1á2rú
+e2t1á2ta
+etát1a2d
+e2t1áth
et1átl
-eteá2
-ete2l1eg
-ete2ná
-e2t1ene
-ete2szá
-eté2ká
-eté2kel
-eté2ko
-e2t1érté
+et1áts
+et1átu
+e2t1átv
+et1bl
+et1br
+et2ch
+et1dr
+etea2
+eteg1á
+ete2g1e2l
+ete2gó
+e2t1e2ke.
+e2t1e2kei
+e2t1e2kek
+ete2k1ék
+e2t1e2kénk
+e2t1e2kés
+e2t1elc
+et1eldo
+ete2lege
+ete2legy
+et1e2lej
+e2telemz
+e2t1e2lesé
+e2t1eléré
+etelés1s
+e2t1elha
+e2t1elhá
+et1elhel
+e2t1eliga
+e2t1eljá
+e2t1ellá
+e2tellen
+e2t1elme
+e2t1elmén.
+e2t1elméne
+e2t1elmét
+e2t1elnev
+e2telnö
+e2t1elny
+e2t1e2lo
+ete2lőad
+et1elszá
+e2t1eltá
+e2t1elter
+et1eltérí
+e2t1elvá
+e2t1elvez
+e2t1elvo
+e2t1elz
+ete2mal
+e2t1ember
+ete2mel
+e2t1enz
+ete1p2
+e2t1erd
+ete2rén
+etero1
+e2t1erő
+ete2s1a
+e2t1este.
+e2t1eszté
+ete2teté
+ete2t1ér.
+1e2tetésen
+1e2tetésn
+ete2tos
+ete2t1ö
+ete1tra
+e2t1ezr
+etéé2
+et1ég.
+et1égb
+et1é2gé
+et1égg
+e2t1é2gi
+et1égn
+eté2k1a2
+eté2k1á2
+eté2k1e2l
+et1ékí
+eté2kos
+e2t1élm
+e2t1érc
+e2t1é2ré.
+e2t1é2rén
+e2t1é2rér
+e2t1é2rét
+eté2rie
+e2t1érke
+e2t1érm
+e2t1é2rős
+e2t1értel
e2t1érz
+eté2sa
+eté2s1ég
+eté2so
etés3s
-eté2t1é
-et1év.
-et1é2vet
-et1é2véb
-et1é2vét
+eté2sza
+et1észl
+et1észr
+eté2t1a2
+eté2ter.
+eté2tere
+eté1tra
+e2t1é2ven
+eté2ves.
+e2t1é2vet
+e2t1é2véh
+eté2véig
+e2t1é2véne
+eté2vétő
et1évh
-e2t1i2d
+et1évt
+et1fr
+et1gl
+et1gr
+et2hei
+eti2d
+et1ide
+et1ido
eti2g
-e2t1iga
+e2t1ige
e2t1igé
-e2t1ill
-e2tim
-et1inf
+e2t1igy
+e2till
+et1i2ma
+e2t1imá
+e2t1i2mi
+1e2timo
+e2t1imp
+etina1
+e2t1ind
+e2t1inf
+e2t1ins
+e2t1inte
+e2t1inv
+e2tinz
+e2t1i2pa
+e2t1i2ra
e2t1iri
e2t1iro
-et1írá
-et1í2v
-et1okm
-et1okt
-eto2na
+e2t1iró
+e2t1ism
+e2t1iste
+e2t1i2sza
+e2t1i2szon
+e2t1i2ta
+et1izé
+e2t1izg
+e2t1izo
+e2t1izz
+e2t1íg
+e2t1íj
+e2t1ín
+e2t1í2r
+e2t1í2v
+e2t1íz
+et1kl
+et1k2r
+et1kv
+1etnol
+et1oda
+e2t1okm
+e2t1okt
+e2t1oml
+eto2n1a2
+eto2nál
+eto2n1is
+eton1n
+et1opc
+et1ope
+e2t1opt
+2etor
+et1ord
+e2t1org
+e2t1orm
+et1orom
+e2t1ors
+e2t1orv
+et1ost
+etosz2f
+et1oszl
+et1oszt
+e2t1ou
+e2t1ó2c
+et1ó2ra
+et1ó2rá
+e2t1ó2v
+et1öko
+etö2l
+e2t1öl.
+et1ölé
+e2t1ölő
+e2t1ön
e2t1ös
-et1őr.
-et1ő2ri
-et1őrn
-et1ő2rö
-et1őrs
-e1t2raf
-et2sz1ék
-et2telő
+e2t1öt
+et1ö2vü
+e2t1ö2z
+etőa2
+etőe2l
+etőé2b
+etőfé2l1é2v
+e2t1őr.
+e2t1őrb
+et1őrc
+et1ő2réh
+ető2ri.
+et1őrk
+et1őrl
+e2t1őrn
+ető2rök
+et1őrp
+e2t1őrr
+e2t1őrs
+et1ő2rü
+ető1s2p
+et1pl
+et1pr
+et1ps
+e1trap
+e1trau
+e1t2rág
+e1tréf
+e1t2ril
+et1sk
+et1sn
+et1sp
+et1st
+et3tad
+ettai2
+etta2n1ó2
+et2telem
+et2t1ing
+et2tír
+et1t2rá
+et1tri
+etty1á2
e2t1ug
-e2t1u2n
-et1u2r
-e2t1u2t
-et1új
+et1una
+et1und
+et1u2ra
+etu2sz
+et1utá
+et1utó
+et1utu
+e2t1új
+e2t1ú2ri
e2t1út
e2t1üd
+e2t1üg
e2t1üld
e2t1üt
+e2t1ü2v
+et1ü2zem
et3ya
-e2ty1o
-2etz
-e1t2ze
e1u
+eu2bo
eu2ga
-eu2go
-e2ume
-eumi2
-eu2miv
-e2uras
-e2urá
-eu2r1á2z
-e1ú2
-e1ü2
+eu1k2h
+eu2mal
+eu2m1e
+eu2mim
+eu2m1i2p
+eu2mis
+eu2m1iz
+eu2mí
+eu2mór
+eu2mő
+eum1p2
+eu2mü
+eu2na
+eu2ná
+eu2ni
+eu2no
+eu2nó
+e2ur.
+eu2rá
+eur1áz
+eu2ri.
+eu2rig
+e2urt
+eu2szí
+e2utai
+eu2tal
+e2utan
+eu2taz
+e2utái
+e2utájá
+e2utáka
+e2utákk
+e2utákná
+e2utákr
+e2utánk
+e2utár
+eu2tó
+e2uts
+eu2zs
+e1ú
+eú2jí
+eú2sz
+eú2ti
+eú2to
+e1ü
+eü2dü
+eü2ge
+eü2gy
+eü2le
+eü2lé
+eü2li
+eü2lö
+eü2lő
+eü2lü
+eü2re
+eü2rí
+eü2rü
+eü2sz
+eü2te
+eü2tő
+eü2tü
+eü2ve
+eü2vö
+eü2ze
e1ű
-evéle2
-evé2l1el
-ex1io
-e2x1í2
-1expe
-1expo
-e1ye
-ez1a2d
-e2z1ak
-1e2z1a2l
-e2z1az
-ez1ál
-ez1egy
-e2zer.
-eze2ra
-eze2re.
-eze2reg
+eű2ri
+eű2ze
+eű2zé
+eű2zi
+eű2zö
+eű2ző
+evá2r1al
+eve2szö
+evé2lá
+evé2l1e2l
+evé2nyel
+evé2r1emb
+evé2rö
+evé2so
+evé2sza
+evé2szö
+evízi2óét
+ex1ab
+ex1al
+ex1ap
+ex1áb
+ex1á2r
+e2x1át
+ex1bl
+ex1br
+ex1dr
+e2xeg
+e2x1elm
+e2x1elvá
+e2x1er
+e2x1ék
+e2x1él
+e2x1ép
+ex1idő
+e2x1igé
+ex1inf
+e2x1ing
+e2x1int
+ex1izz
+e2x1íj
+e2x1ír
+e2x1ob
+ex1op
+ex1ön
+ex1ör
+ex1ös
+1expan
+ex1sk
+ex1sp
+ex1st
+ex1új
+e2x1üg
+e2x1üv
+e2x1üz
+eza2c
+ez1acé
+e2z1a2d
+e2z1af
+ez1ajt
+e2z1a2l
+e2z1a2n
+ez1arz
+e2z1as
+ez1aut
+ez1áll
+ezá2ma
+ez1árb
+ez1árr
+ez1á2rú
+e2z1át
+ez1bl
+ez2dál
+ez1e2gy
+ez1e2kék
+e2z1ela
+e2z1e2leme
+e2z1elér
+e2z1elm
+e2z1el1ö
+e2z1e2mel
+ezen2t1e2
+eze2r1a
+eze2rá
+eze2red
+eze2r1el
+eze2r1em
+eze2r1es
eze2r1o
-eze2ta
-eze2t1el
-ezé2rem
-ez1idá
-ez1ill
+ez1erő
+ez1este
+e2z1e2sz
+eze2t1a2
+eze2t1á
+eze2t1eg
+eze2t1e2l
+eze2t1esz
+eze2t1ér.
+eze2t1é2rő.
+eze2t1é2ve.
+eze2t1o
+eze2tu
+e2z1ég
+e2z1é2j
+ezé2ká
+ezé2k1o
+e2z1él
+ezér1emb
+ezé2rett
+ezé2ru
+ezé2sa
+ezéskész1
+e2z1é2te
+ez1fr
+ez1gr
+ez1i2do
+ezi2g
+e2z1igé
+e2z1i2ko
+e2z1ill
+ez1imp
+ez1iná
+ez1ind
ez1inf
ez1int
+ezi2o
+ez1ion
e2z1i2p
-ez1ir
-ezo1k2
-ez1org
+ez1i2r
+ezisé2g
+ezi2s1égé
+e2z1ism
+ezi2ta
+e2z1í2v
+ez1k2r
+ezkupac1
+ez1kv
+e2z1ob
+ez1old
+ezo2nár
+ezon3n
+ez1opt
+e2z1ox
+e2z1ó2l
+e2z1ó2r
ez1ó2t
-ez1ön
-ezőkész1
-1ezred
-1ezrei.
-1ezreir
-1ezreit
-1ezreiv
-1ezrek
+ez1ö2b
+ez1ös
+ez1ö2v
+ezőe2l
+e2z1ő2ri
+ez1őrl
+e2z1őrs
+ez1ő2rü
+ez1őrz
+ezős1orra
+ez1pl
+ez1p2r
+1ezrede
+1ezreds
1ezrel
-1ezres
-1ezret
+1ezrem
+1ezresn
+1ezrű
+ez3saj
+ez3sap
+ez3sát
+ez3sáv
e2z3sé
+ezsió2
+ez3sl
ez3sor
+ez3s2p
+ez3s2ta
+ez3str
+e2z3sü
+ez3sz
+ez1t2r
+ez1u2r
ez1ut
-ez1út
-1ezüs
+ez1új
+ez1ú2t
+e2z1üg
+1e2züs
+e2z1üt
+e2z1ü2z
2é.
-é1a2
-é1á2
-éb2bá
-é2b1ir
-é2c1a
-é1ch
-é2c3so
+é1a
+éa2da
+éa2dá
+éa2do
+éa2dó
+éa2ga
+éa2gi
+éa2já
+éa2ka
+éa2la
+éa2l1e
+éa2na
+éa2ny
+éa2ré
+éa2ri
+éa2ro
+éa2uk
+é1á
+éá2fá
+éá2gy
+éá2ju
+éá2ra
+éá2ro
+éá2ru
+éá2rú
+é2b1ag
+é2b1a2j
+é2b1a2k
+é2b1a2l
+éba2n
+é2b1any
+é2b1a2v
+éb1ál
+ébá2r
+éb2b1á
+éb1eszű
+é2b1é2k
+é2b1él
+é2b1ép
+ébié2
+éb1isk
+éb1i2va
+éb1íz
+éb1kr
+éb1pl
+éb1pr
+1ébres
+é2b1ug
+éb1üg
+éc1a2d
+éc1aj
+éc1a2k
+éc1a2l
+éc1a2n
+éc1ál
+éc1ár
+é2c1e2lem
+é2c1elv
+é2c1ember
+é2c1e2mel
+éc1gr
+éc3ha
+éc3há
+éc3hí
+éc3ho
+é2c1i2d
+é2c1il
+éc1ima
+éc1ob
+éc1os
+éc1őr
+éc1pr
+éc3sab
+écs1ol
éc3sz
+é2c1u2t
+é2c1ül
+éc3zs
é2d1ab
é2d1a2c
-éd1ad
-é2d1ak
-éd1a2la
+é2d1a2d
+é2d1a2g
+é2d1a2j
+éd1akc
+éd1akt
+éd1a2ku
+éd1alk
é2d1a2n
-éd1a2p
-é2d1as
-éd1ág
+éd1apa
+éd1a2pá
+é2d1arc
+éd1asp
+éd1ass
+éd1a2ti
+éd1att
+é2d1ág
+éd1áp
+éd1dr
é2d1e2g
-éde2leme
-é2d1els
+é2d1ej
+é2d1e2ke.
+éde2kétő
+é2d1e2l1a
+é2d1elk
+é2d1ell
+é2d1elo
+éd1ember
é2d1eml
-é2derb
-é2derek
-é2deré
-é2dern
-é2derr
-é2dert
-é2desí
-édes3s
-é2d1él
-éd1értő
-éd1érv
+é2d1enz
+é2d1ep
+éd1erd
+é2derei
+é2derem
+é2derg
+é2derl
+é2derné
+é2d1erő
+é2derrá
+é2derrő
+é2ders
+é2dertő
+1édesa
+é2desem
+1édesg
+1é2desí
+é2d1ég
+é2d1é2j
+é2d1ékb
+é2d1é2ké
+é2d1ékk
+édé2l
+é2d1éle
+é2d1élm
+é2d1ép
+é2d1ér.
+é2d1é2ri
+é2d1érs
+é2d1érte
+é2d1értő
+é2d1érv
+é2d1érz
+éd1fr
+édi2ad
+édi2aka
+édi2al
+édi2ar
édi2a1s
édiasz2
-é2d1i2g
-é2d1in
+é2d1i2d
+édi2g
+é2d1iga
+é2d1ige
+é2d1igé
+éd1i2ko
+éd1ill
+é2d1i2m
+éd1i2na
+éd1ind
+é2d1ini
+éd1ins
+é2d1int
+é2d1i2p
+é2d1iro
+é2d1i2z
+é2d1ín
é2d1ír
-édna2
+éd1ív
+éd1kl
+éd1okta
+é2d1op
é2d1or
-éd1ut
+é2d1osz
+éd1ott
+éd1ó2r
+éd1öl
+éd1ön
+é2d1ö2r
+éd1öt
+éd1öv
+éd1öz
+é2d1őrm
+é2d1őrn
+édős2
+édő1sp
+éd1pl
+éd1pr
+é1d2ram
+éd2raz
+é1d2rám
+éd1sk
+éd1sp
+éd1sr
+éd1st
+éd1t2r
+é2d1ud
+éd1uj
+éd1ura
+é2d1u2t
+é2d1új
+éd1úr
+éd1ú2t
+é2d1üd
+é2d1üg
+é2d1üt
+é2d1üz
éd3za
éd3zá
-é1e2
-éesz1
+éd3ze
+éd3zó
+éd3zü
+é1e
+ée2bé
+ée2la
+ée2le
+ée2lő
+ée2me
+ée2pi
+ée2rő
+ée2se
+ée2sé
+ée2si
+ée2ső
+ée2sz1a2
+ée2sz1á
+ée2szel
+ée2szép
+ée2szir
+ée2szis
+éeszt2
+éesz1tr
+ée2uf
+ée2vé
+ée2vő
é1é
-2éf
-é2g1ab
-éga2d
-ég1a2g
-é2g1aj
-é2g1a2k
-ég1a2l
-ég1a2z
-ég1á2g
-ég1ál
-é2g1ára
+éé2ge
+éé2le
+éé2pí
+éé2ra
+éé2te
+éf1ai
+éf1ajtó
+éf1ing
+é2f1is
+éf1kl
+é2f1os
+ég1abl
+ég1abr
+ég1a2d
+ég1aka
+ég1akk
+ég1akn
+ég1alj
+ég1am
+ég1a2ny
+ég1a2p
+é2g1a2r
+ég1aut
+ég1a2v
+éga2z
+é2g1á2g
+é2g1ál
+ég1áp
+ég1árt
+égát1a2d
+ég1átá
+ég1á2t1e2
+ég1átf
+ég1átj
+ég1átm
+ég1áts
+ég1átt
+ég1átv
+ég1bl
+ég1br
+ég1d2r
+ég1ece
+é2gedén
+é2g1edz
+ég1e2ge
+é2g1ej
+é2g1e2kés
+é2g1ela
é2g1elb
-ége2lem
-é2g1elg
-é2g1ell
+ége2leg
+ég2elek
+ége2lemb
+é2ge2leme
+ége2lemn
+ége2lemt
+é2g1elér
+é2g1elf
+é2g1elha
+ég1elhá
+ége2lin
+é2g1elis
+é2g1eljá
+é2g1elk
+é2g1ellá
+é2g1ellen
é2g1elm
-é2g1e2lő
-égelői2
-é2g1els
-ége2n
-é2g1eny
-ége2r1ü
+é2gelnö
+ég1elny
+é2g1elö
+é2g1e2lőa
+ége2lőm
+é2g1e2lőn
+ég1e2lőt
+é2g1elp
+é2g1elr
+é2g1elsa
+é2g1elszí
+ég1elta
+é2g1eltá
+é2g1elvá
+é2g1elz
+é2g1enc
+é2g1e2ne
+é2g1eng
+ége1p
+ég1epi
+ége2rál
+é2g1erede
+ége2r1el
+égeri2
+ége2rim
+ége2rin
+é2g1eró
+ég1erő
+ége2rül
1é2gesd
-1é2geti
-1é2getn
+é2g1essz
+ége2sze
+é2g1eszk
+é2g1eszt
+1é2getj
+1é2getőh
+1é2getőn
+1é2getőt
+ég1eva
+ég1e2ve
+ég1e2vé
+ég1evo
+é2g1ex
é2g1é2g
é2g1é2l
-é2g1ép
-é2g1éri
+é2g1é2neke
+é2g1é2neké
+é2génekk
+é2g1é2nekn
+ég1épí
+é2g1épü
+ég1é2ret
+é2g1é2rez
+égé2ré.
+é2g1érh
+é2g1é2ri
+ég1érl
+ég1érm
+ég1é2rő.
+ég1é2rők
+égért2
ég1érte
ég1érté
-ég1érv
-é2g1id
+1é2gésé
+1é2gésn
+é2gést
+é2g1éva
+ég1fl
+ég1fr
+ég1g2l
+ég1g2r
+ég3gyo
+1éghes
+1éghü
+égi2as
+ég1i2den
égi2g
-égig1a
-égigé2
-ég1ill
+é2g1iga.
+égig1ap
+égig1as
+ég1igaz
+égig1á
+é2gill
+é2g1imá
+ég1ina
+ég1inf
é2g1ing
-ég1int
+é2g1inj
+ég1ins
+é2g1int
+é2g1ira
+ég1iro
+é2g1i2ta
+é2g1iva
+é2g1i2zésn
+é2g1izg
+ég1íg
+ég1íj
+ég1ín
ég1ír
-ég1o2l
-ég1ot
+ég1ív
+ég1íz
+1égj.
+égkia2
+ég1kl
+ég1kr
+ég1kv
+1égne.
+1égnék
+1égnén
+1égnét
+1égni
+é2g1ob
+ég1oki
+ég1ola
+ég1old
+ég1oli
+ég1oll
+ég1olt
+é2g1op
+é2g1o2r
+é2g1os
+ég1ott
+é2g1o2v
+é2g1ox
+é2g1óc
ég1ó2r
-é2g1ö
-1é2gő
-ég1u2t
-é2g1ú2
-ég1ü2g
-ég1ür
+ég1öb
+é2g1ö2d
+é2g1ö2l
+ég1ön
+égö2r
+ég1örö
+é2g1ös
+é2g1öt
+é2göv
+é2g1ö2z
+1égő.
+1égők
+é2gőr
+ég1őri
+ég1őrö
+ég1ősi
+1égőt
+1égőv
+ég1pl
+ég1pr
+ég1ps
+ég1sk
+ég1sp
+ég1s2t
+égsz2
+1égsz.
+égszáraz1
+ég1tr
+é2g1ud
+ég1un
+é2g1u2t
+ég1úg
+ég1új
+ég1úr
+ég1ús
+ég1ú2t
+é2g1üd
+é2g1ü2g
+é2g1ür
+é2g1üs
+é2g1üt
+é2g1üv
+é2g1üz
+é2g1űz
+égvezé2
+é2gy1a2
+é2gyál
+é2gyedé
é2gy1eg
-é2gyele
-é2gy1em
+é2gyelek
+é2gyeleme
+égye2m
+é2gy1emb
+é2gy1eme
+égye2seké
é2gy1esz
+é2gy1e2v
é2gyeze
-é2gy1ér
-é2gy1év
-é2gy1o
+é2gy1ék
+é2gyél
+égy1é2ne
+égyi2
+é2gyin
+é2gyir
+é2gy1is
+é2gy1iv
+é2gyí
+égyo2
+égy1ok
+égy1os
+égy1ot
é2gy1ó2
-é2gy1ö2
-égyszáz1
-égyszín1
-é2gyu
-égyü2
-é2gy1ül
+égy1ö2l
+é2gy1u2
+é2gy1ú
+é2gy1ü2l
+é2gyür
+éha2l
+éh1ala
+éh1any
+é2h1arc
+éh1art
+é2h1au
+é2h1a2v
+éh1edé
+2éheg
+éh1e2gé
+éh1e2le
+éh1elé
+éh1elf
+éh1elh
+éh1ell
+éh1e2lő
+éh1elt
+éh1elv
+é2h1enz
+é2h1e2r
+é2h1esem
+é2h1e2to
+éh1evé
+é2h1ex
é2heze
-é2hezi
-é2hezt
+1é2hezé
+1éhező
+1é2hezt
+é2hezü
+é2hezv
+éh1ég
+éh1é2k
+é2h1é2l
+é2h1ép
+éh1érb
+éh1fl
+é2h1ic
+é2h1if
+é2h1i2n
+é2h1ip
+éhi2r
+éh1ira
+éh1irt
+é2hit
+éh1ita
+é2h1iz
éh1ín
+éh1kr
+é2h1od
+éh1old
+éh1öb
+éh1ö2d
+éh1ös
+éh1pl
+éh1pr
+1éhsé
+éh1sk
+éh1sp
+éh1ud
+éh1új
+é2h1üg
+é2h1ür
+é2h1üt
+é2h1űr
é1i
+éi2dő
+éi2ga
+éi2gé
+éi2má
+éi2pa
+éi2rá
éi2ro
-é1í2
-éj1a2d
-éj1e2g
-é2ji
-éj1it
-é2k1ab
-ék1acé
-é2k1a2d
-é2k1a2g
-é2k1a2j
-ék1a2la
-ék1alj
-ék1alk
-ék1ana
-éka2nya
-é2k1a2r
-ék1á2f
+éi2ta
+éi2vás
+éi2vó
+é1í
+éí2rá
+éí2ro
+éí2ró
+éí2vá
+éí2ze
+é2j1ab
+é2j1a2da
+é2j1a2l
+é2j1any
+é2j1a2r
+é2j1á2l
+é2j1áp
+é2j1árn
+éj1eb
+é2j1e2lem
+é2j1elh
+éj1elm
+é2j1elv
+éj1emb
+é2j1esz
+é2j1e2v
+é2j1é2g
+éjé2j
+é2j1é2k
+é2j1él
+é2j1ép
+é2j1é2te
+1é2ji.
+é2j1il
+é2j1im
+éj1i2n
+é2j1ip
+é2j1iz
+é2j1o2l
+éj1ó2r
+éj1öd
+éj1ön
+éj1ör
+éj1pl
+éj1pr
+éj1sp
+éj1sz
+éj1ud
+éj1u2r
+éju2t
+éj1uta
+é2j1úr
+é2jül
+é2j1űz
+ék1abl
+ék1a2cé
+éka2dat
+ék1a2dá
+ék1a2dó
+ék1ajt
+éka2kad
+é2k1aká
+é2k1akk
+é2k1akn
+éka2lag
+ék1a2lak
+é2k1alg
+é2k1alj
+ék1alko
+é2k1all
+é2k1alt
+ék1alu
+ék1amb
+ék1ang
+ék1app
+é2k1a2rá
+ék1arc
+ék1a2ré
+ék1arz
+é2k1asp
+é2k1ass
+ék1aszt
+ék1a2tom
+ék1a2ve
+ék1azo
é2k1ál
-é2k1árb
+é2k1á2p
+ék1árad
+é2k1á2rak
+é2k1á2rá
+ék1árb
+é2k1á2ré
+ék1árh
+é2k1árk
+é2k1árn
+é2k1á2ro
+ék1árr
é2k1á2ru
+ék1á2rú
+ék1ásó
+ék1ásv
é2k1áta
+é2k1átá
+é2k1átc
+é2k1átd
+é2k1áte
+ék1áté
+é2k1átf
+é2k1áth
+é2k1áti
+é2k1átí
+é2k1átk
+é2k1átl
+é2k1átm
+é2k1átö
+é2k1átr
+é2k1áts
+ék1átt
+é2k1átu
+é2k1átv
+é2k1áz
+ék1bl
+ék1br
+ék1dr
+ék1egé
+é2k1e2kés
+é2k1elb
+é2k1e2leg
+ék1e2leme
+ék1e2lemé
+éke2lemm
+ék1e2lér
+é2k1elf
+é2k1elk
+é2kellá
+é2k1ellen
é2k1elm
é2k1elo
+ék1elp
+é2k1elta
+ék1eltá
+é2k1eltér
+ék1elül
+ék1elvi
é2k1e2mel
ék1eng
-éke2nya
-ékes3s
-ék1ég
-éké2p
-ék1épí
-ék1épü
-ék1ér.
+éke1p2
+é2k1erd
+é2k1e2rec
+é2kered
+é2k1e2rei
+é2k1e2rez
+é2k1erg
+é2k1e2ró
+é2k1e2rő
+é2k1e2sete
+ék1eszk
+éke1szl
+é2k1e2tet
+éke2tik
+éke2vés
+é2k1e2vo
+é2k1ex
+é2k1ég
+ék1éjs
+é2k1épí
+é2k1épü
+é2k1érc
é2k1é2rem
-ék1érl
+é2k1é2ren
+é2k1é2ré
+é2k1é2ri
+é2k1érk
+é2k1érl
+é2k1érm
+é2k1é2rő.
+é2k1é2rői
+é2k1é2rők
+é2k1érp
+é2k1érr
é2k1érte
é2k1érté
+é2k1értő
+é2k1é2rü
+é2k1érv
é2k1érz
-é2k1i2d
-ék1ing
-ék1int
+2ékés
+ékés3s
+ék1észl
+é2k1étk
+ék1étv
+é2k1é2ve.
+é2k1é2vek
+ék1é2vet
+é2k1é2véb
+é2k1é2vén
+é2k1é2vét
+é2k1é2vév
+é2k1évi
+ék1fj
+ék1fl
+ék1fr
+ék1g2r
+ékia2
+éki2d
+é2k1ide
+ék1idé
+ék1ido
+é2k1idő
+éki2g
+ék1iga
+ék1ige
+é2k1igé
+ék1i2ko
+ék1ikr
+é2k1ill
+é2k1ima
+é2k1imá
+ék1imi
+ék1ind
+é2k1ing
+é2k1inh
+é2k1inn
+é2k1int
+é2k1inv
+é2k1i2o
é2k1i2p
-éki2r
-ék1ira
+é2kirán
+é2k1iro
+é2k1isk
ék1ism
-ék1ír
-ék1íz
-ék1k2
-é2k1or
-é2k1osz
+é2k1ist
+éki2sza
+é2k1i2ta
+é2k1i2z
+ék1íj
+é2k1ír
+é2k1í2v
+é2k1í2z
+ék2kál
+ék1k2l
+ék1k2r
+ék1kv
+é1k2lu
+é2k1ob
+ék1of
+é2k1oká
+é2k1o2laj
+é2k1olda
+ék1oltás
+é2k1oml
+ék1opc
+ék1o2pe
+é2k1org
+é2k1orm
+é2k1orr
+é2k1orz
+é2k1osto
+é2k1ott
+é2k1ou
+é2k1ox
+é2k1óc
+ék1ó2l
+é2k1ón
+ék1ó2ra
+ék1ó2rá
+é2k1ó2v
+é2k1ó2z
+é2k1ö2b
+ékö2l
+é2k1öm
+ék1önt
+ék1ö2rö
é2k1ös
-é2k1ő2
-ék1t2
+é2k1ötl
+ék1ö2vö
+ék1ö2zö
+ék1ő2r
+ék1ős
+ék1pl
+ék1pr
+ék1ps
+é1k2reá
+ék2rim
+ék1sh
+ék1sk
+ék1sl
+ék1sp
+ék1s2r
+ék1st
+ék1sz2
+ék1t2r
é2k1ud
-é2k1u2t
-ék1út
+é2k1ug
+é2k1uj
+é2k1und
+é2kuni
+é2k1u2tac
+é2k1u2tak
+ék1u2tal
+é2k1u2tas
+é2k1utá
+é2k1új
+ék1úr.
+ék1úrn
+ékú2t
+é2k1úth
+é2k1úti
+é2k1útj
+é2k1útn
+é2k1úto
+é2k1útr
+é2k1útt
+é2kútv
+é2k1üd
+é2k1üg
+ék1ü2le
é2k1ünn
é2k1ür
+é2k1ü2s
+é2k1ü2t
+é2k1ü2v
é2k1üz
+ék1űr.
+ék1űrb
+ék1ű2rö
+é2k1űz
él1abl
+él1abr
+él1a2cé
+él1a2da
+él1a2do
+él1a2dó
+él1a2g
+é2l1a2j
+él1a2ka
+él1akc
él1akn
+él1ako
é2l1a2l
-é2l1a2u
-él1áj
-él1á2l
-é2l1árk
-é2látf
-éld2
-él1dr
-é2lebé
+él1amc
+él1a2me
+él1and
+él1apó
+él1arm
+él1asp
+él1ass
+él1asz
+él1a2to
+él1a2u
+é2l1a2va
+él1azo
+él1ábr
+é2l1á2g
+élá2l
+é2l1áll
+é2l1álmá
+é2lálmot
+é2l1álo
+é2l1á2p
+él1ár.
+él1á2rá
+él1árb
+él1árf
+él1á2ri
+él1árk
+é2l1árn
+él1á2ro
+él1árr
+él1á2ru
+él1á2rú
+él1árv
+él1át1a2
+él1átc
+élát1e2
+é2l1átf
+él1áth
+él1á2ti
+él1átj
+é2l1átm
+élá2tok
+él1átr
+él1áts
+él1átt
+él1átü
+él1átv
+él1bl
+él1br
+élc3sz
+él1d2r
+éle2b
+é2l1ebé
+é2l1e2dz
+él1eff
+él1e2gé
+élegész1
él1e2gy
-éle2k1a
+éle2k1a2
+éle2k1á
+éle2k1e2l
+éle2kem
éle2ker
-éle2kö
-é2l1emb
-é2leme
+éle2k1es
+é2l1e2kés
+éle2kis
+éle2kol
+éle2k1on
+éle2kot
+éle2kó
+éle2k1ö2
+éle2ku
+éle2k1ú
+él1e2l1a
+é2l1e2leg
+él1elf
+é2l1elo
+é2l1előe
+éle2lőj
+é2l1e2lők
+éle2lőt
+é2lemb
+é2l1e2mi
é2l1emp
+éle2n
+é2l1ene
+é2l1eng
+é2lenj
é2l1enn
-éle2sa
-éle2sz
-éle2ta
+é2l1eny
+é2l1enz
+él1e2ró
+é2l1e2sés
+éle2szü
+éle2szű
+éle2t1a2
éle2t1á2
+éle2t1eg
éle2t1e2l
-élet1érd
+éle2t1e2r
+éle2tesz
+éle2t1ék
+éle2tél
+éle2t1ér.
+éle2t1érd
+éle2t1é2rő.
+éle2térü
+éle2tés
+éle2téte
+éle2tété
+éle2t1étn
éle2t1é2ve.
-éle2t1ö2
-é2l1é2d
+éle2t1é2ved
+éle2t1é2vén
+éle2tik
+éle2tisz
+éle2t1o
+éle2tó
+életö2
+éle2t1öl
+éle2t1ör
+éle2t1u2
+éle2tüz
+éle2t1ű2z
+é2l1e2vő
+é2l1ex
+élé2d
+é2l1éde
+é2l1é2g
+él1é2hes
+él1ékek
+él1ékí
é2l1é2l
-él1é2ret
-él1é2vet
-él1é2vi
-él1f2
+él1épü
+é2l1ér.
+é2l1érb
+é2l1érd
+él1é2rem
+é2l1é2ret
+é2l1é2ré
+é2l1érm
+é2l1érn
+é2l1érte
+é2l1érté
+é2l1é2rü
+é2l1érz
+élé2sa
+élés3s
+é2l1é2te
+é2l1étk
+é2l1év.
+é2l1é2v1á
+é2l1é2ves
+é2l1é2vet
+é2l1évez
+él1é2vén
+é2l1é2vér
+é2l1é2vi
+él1évü
+él1f2l
+él1f2r
+él1g2r
é2l1i2d
é2l1iga
-éligaz1
éli2gá
-é2l1i2m
-é2l1in
-él1i2pa
-él1irá
-é2l1í2
-él1k2
-é2l1o2l
-él1op
+é2l1i2ge
+é2l1igé
+é2l1i2ko
+él1ill
+éli2m
+él1ima
+él1imi
+él1imp
+é2l1ind
+é2l1inf
+é2l1ing
+él1int
+él1inv
+él1inz
+él1i2on
+é2l1i2p
+é2l1irá
+él1iro
+é2lism
+éli1s2p
+é2l1i2szá
+él1i2va
+é2l1i2vá
+él1izg
+é2l1izm
+é2l1i2zo
+él1íj
+él1í2r
+él1í2v
+él1íz
+él1k2l
+él1k2r
+él3lyu
+él2mat
+1élmén
+é2l1ob
+é2l1okm
+é2l1oks
+é2l1ol
é2l1o2r
-él1ó2r
-élö2
-él1ök
-él1öl
+élos3s
+é2l1osz
+é2l1óc
+él1ó2n
+é2l1ó2r
+él1öb
+él1öc1
+élö2k
+él1ö2l
él1ön
+él1ör
+él1ös
+é2l1ö2z
élőe2
-élőkész1
-él1őz
-él1p2
-éls2
+él1őrü
+1é2lősk
+él1p2l
+él1p2r
+élrádi2
+élre1pr
+él1sk
+él1sp
él1st
-él2t1e2v
-él1t2r
-él1ug
-él1uj
-él1u2t
-él1út
+él2sz1árnn
+él1szt
+éltal2p1al
+él1trá
+él1tré
+él1tri
+él1tró
+é2l1ud
+é2l1ug
+é2l1uj
+él1ult
+él1u2r
+é2l1u2tas
+él1utó
+é2l1új
+él1úr
+é2l1üg
+él1üll
+él1ült
+é2l1ür
+é2l1üs
é2l1üt
-ély1á2l
+é2l1üv
+é2l1üz
+él1űz
+1élvező
+é2ly1ab
+é2ly1a2d
+é2lyaj
+é2ly1a2l
+ély1a2n
+é2ly1ap
+ély1a2r
+é2ly1as
+ély1au
+é2ly1av
+ély1az
+é2ly1á2l
+élye2c
+é2lyef
ély1egy
-élye2n1
-é2lyil
-é2ly1in
+é2lyekés
+é2ly1el
+é2lyeml
+é2lyene
+é2ly1ent
+é2lyer
+é2lyeti
+é2ly1é2j
+é2ly1ék
+é2lyél
+é2lyés
+ély1f2
+é2ly1ira
+ély1k2
+é2lyol
+é2ly1ó
+é2lyös
+é2ly1öz
+é2lyő
+ély1s
+élyú2
+é2lyültet
é2lyüt
-é2male
-ém1ass
-ém1ato
-é2m1á2l
-ém1áru
-ém1edé
-ém1e2le
+ém1abr
+éma1d2
+ém1a2da
+ém1a2dó
+émae2
+émai2k
+ém1ajt
+ém1akk
+ém1all
+ém1alm
+ém1app
+ém1arc
+ém1arm
+émas2
+éma1sp
+émat2
+éma1tr
+ém1aut
+ém1a2zo
+émá2c
+émá2l
+ém1álm
+ém1álo
+é2m1áp
+ém1árn
+é2m1áru
+émát1a
+é2m1átt
+ém1b2l
+ém1b2r
+ém1dr
+éme2c
+éme2g
+é2m1e2ke.
+é2m1e2kés
+ém1ela
+éme2led
é2m1elh
-ém1elő
-é2mesem
+é2m1ell
+ém1e2lő
+ém1els
+é2m1elv
+ém1e2re
+ém1ern
+ém1e2rő
+éme2s1á
+é2m1esemé
é2m1esz
éme2ta
éme2tel
-émé2l
-ém1étk
-é2m1ip
-é2m1ir
-ém1ol
-é2m1ó2
-é2m1ö2
-ém1p2
-ém1u2r
+éme2t1ék
+éme2to
+é2m1e2v
+é2m1ex
+ém1éks
+é2m1é2l
+é2m1ép
+é2m1érc
+ém1érd
+é2m1éri
+é2m1érm
+é2m1érté
+é2m1és
+é2m1é2te
+ém1fl
+ém1fr
+ém1gr
+émi2al
+é2m1i2d
+émi2g
+é2m1igé
+ém1iks
+ém1ill
+ém1ind
+ém1inf
+é2m1inv
+é2m1i2o
+é2m1i2p
+ém1irá
+ém1irh
+é2m1iro
+ém1isk
+ém1ism
+émi2sz
+ém1i2ta
+ém1izo
+é2m1ír
+ém1í2v
+ém1íz
+ém1kl
+ém1kr
+émo2nac
+émo2ne
+émon1n
+émont2
+ém1o2p
+ém1ost
+ém1ox
+ém1ó2l
+ém1ó2r
+ém1öb
+ém1ö2l
+ém1ön
+ém1ös
+ém1öt
+ém1öv
+ém1ő2r
+ém1p2l
+ém1p2r
+ém1sk
+ém1sl
+ém1sp
+ém1s2r
+ém1s2t
+ém1sz2
+ém1t2r
+ém1uj
+ému2n
+ém1una
+é2m1u2r
+é2m1úr
+é2m1üg
+é2m1ür
+é2m1üt
+é2m1üv
+é2m1üz
+ém1wh
+én1abb
+é2n1abl
+é2na2dal
+én1adá
+én1a2do
+én1agá
+én1agr
+én1akc
+é2n1akn
+én1akt
+én1alk
+én1ana
+én1ano
én1ant
-éna1p2
-én1ass
-é2n1a2to
+éna1pré
+én1arc
+énas2
+éna1sp
+é2n1ass
+én1atm
+é2n1a2tom
+éna1t2r
+é2n1au
+é2n1ág
+éná2l
+én1ála
+én1álc
+én1áld
é2n1áll
-én1átv
-én1egy
-é2nekel.
+é2n1á2p
+é2n1á2rak
+énás1s
+én1ásv
+én1áta
+én1átb
+én1áte
+én1átk
+én1átö
+é2n1átr
+én1átt
+én1átü
+é2n1átv
+énba2
+én1bl
+én1br
+én1d2r
+é2n1ef
+én1e2gy
+1é2ne2k1a2
+1é2nekd
+é2neke.
+1é2nekei
+1é2nekek
+1é2nekem
+éne2ker
1é2nekes
+éne2k1é2j
+1é2nekf
+1é2nekg
+éne2kiz
+1é2nekí
+1énekj
+1énekka
1é2nekl
+éne2kó
+éne2k1ö
+1é2neks
+én1ela
+én1elg
+én1elh
én1elj
-én1elő
+én1ell
+én1eln
+én1e2lő
+én1elp
+én1els
én1elt
-é2nem
-én1emb
-é2n1é2g
-éné2m1
-én1f2
+én1elv
+én1eml
+éne2n
+é2n1ene
+éne2r1a
+éne2r1á2
+éne2reme
+én1eró
+é2n1e2sz
+éne2t1a2
+éne2t1á2
+éne2t1e2l
+éne2test
+éne2to
+é2n1e2v
+é2n1ex
+én1éjb
+én1ékb
+én1é2ké
+én1é2ki
+én1é2kű
+éné2l
+é2n1éle
+é2n1élő
+éné2m1a
+én1éneke
+é2n1ér.
+é2n1érc
+é2n1éré
+éné2ter
+2énéz
+én1f2r
+énfüstö2
+énfüs2t1öl
+én1g2r
+én1ido
+éni2g
+é2n1igé
+én1iko
+én1ill
+én1imi
+én1ina
+én1ind
+én1inf
+én1inh
én1int
-é2n1i2o
-é2n1ip
-én1ita
+é2n1i2p
+én1ism
+é2n1ita
+é2n1iva
é2n1i2z
-énkupac1
-énmo2n1
-2énn
-én1öve
-én2s1as
+én1íj
+én1ín
+é2n1ív
+én1k2l
+én1k2rá
+én1k2ré
+én1kri
+énmű1
+én3nyo
+é2n1ol
+én1oml
+én1ond
+é2n1or
+é2n1osz
+én1ot
+é2n1ox
+én1óc
+é2n1ó2r
+én1ök
+én1öl
+én1ön
+én1ör
+én1öt
+2énöv
+é2n1ö2z
+én1ő2s
+énpe2
+én1pl
+én1pr
+én2sas
én1s2p
-én2su
+én1s2t2
én2sú
-én1t2r
-én1u2t
-2ény
+én1tra
+én1trá
+én1t2ri
+én1tró
+é2n1u2t
+én1út
+é2n1ü2g
+é2n1üle
+é2n1ür
+é2n1üs
+é2n1ü2v
+é2n1ü2z
é2ny1a2
é2ny1á2
+énye2c
+é2ny1ece
+é2nyecse
+é2ny1e2dz
+é2nyef
+é2ny1egy
+é2nyekés
+é2nyela
+é2nyelá
é2ny1ell
-ény1elv
-é2ny1e2r
-é2nyev
-é2nyél
-é2nyérté
+é2ny1elo
+é2ny1elvá
+ény1elvű
+ény1elvv
+é2nyema
+ény1enc
+é2ny1ep
+é2nyerd
+ény1ered
+é2ny1e2rő
+é2ny1e2sett
+é2ny1e2sés
+é2ny1e2ső
+é2ny1essz
+é2ny1esté
+é2ny1e2sz
+é2nyeta
+é2nyeti
+é2nyetű
+é2ny1ev
+é2ny1ég
+é2ny1é2j
+ényé2k
+ény1éke
+ény1ékh
+ény1ékn
+ény1ékt
+é2ny1é2l
+é2ny1ér.
+é2ny1érd
+é2nyéré
+é2ny1é2ri
+é2ny1érn
+é2nyérte
+é2ny1érté
+é2ny1é2rü
é2ny1érv
-é2nyérz
-é2nyis
-é2ny1it
-é2ny1í2r
-é2ny1o2
+é2ny1érz
+é2ny1és
+é2ny1é2te
+é2ny1étt
+é2nyéva
+é2ny1if
+ényi2g
+é2ny1igé
+é2ny1i2ko
+é2ny1ing
+é2ny1ira
+é2nyiro
+é2nyisk
+é2nyita
+é2nyiz
+ényí2r
+ény1írá
+ény1író
+é2ny1ok
+é2ny1o2l
+é2ny1o2r
+é2ny1os
é2ny1ó2
-é2ny1ö2
+ényö2
+é2nyön
+ény1ör
+é2ny1ös
+ény1öz
+é2ny1ő2
+ény1s
+ényt2
+ény1tr
é2nyu
-én2z1a2
-én2z1á2
-én2zéh
-én2z1i2
-én2z1o
-én2zö
+ény1u2r
+ény1us
+é2nyúj
+ény1út
+é2ny1ü2lő
+é2ny1üs
+é2ny1üv
+é2nyüz
+énza2
+én2z1ad
+én2zag
+én2zak
+én2z1al
+én2zar
+én2zau
+én2z1ál
+én2z1ás
+én2z1át
+én2z1e2r
+én2z1im
+én2z1in
+én2zis
+én2zí
+énzo2
+én2z1ol
+én2zor
+én2zos
+én2zör
+én2z1ő
+én2zsa
én2zse
-énz3sz
-én2z1u2
-é1o2
+én2zur
+én2zú
+énz1z
+é1o
+éo2la
+éo2pe
+éo2sz
é1ó
+éó2ra
+éó2ri
é1ö
é1ő
-ép1a2d
-ép1a2g
-ép1a2l
-ép1a2n
-épa2r
-épar2t
-ép1ág
-ép1ál
-ép1ám
+ép1ado
+é2p1a2j
+ép1alk
+épa2ny
+ép1apo
+épa1pr
+ép1arc
+ép1aré
+ép1ass
+ép1atl
+épau2s
+ép1aut
+ép1a2va
+é2p1á2g
+é2p1álla
+é2p1állo
ép1áp
-é2p1á2r
+ép1ár.
+ép1árb
+ép1árf
+ép1ári
+ép1á2ro
+ép1á2ru
+ép1á2rú
+ép1átb
+ép1átj
+ép1átl
+ép1átm
+ép1áts
+ép1átü
+ép1átv
+ép1bl
+ép1br
+ép1dr
+é2peb
ép1e2gé
-ép1egy
-é2pe2lem
-é2p1ell
-é2p1ep
-ép1ern
-épes3s
-é2p1eti
+ép1e2gy
+é2p1e2kés
+2épel
+é2p1ela
+é2p1elá
+é2p1elb
+é2p1elc
+ép1e2lemb
+é2p1e2leme
+ép1e2lemr
+é2p1elér
+é2p1elf
+é2p1e2lin
+ép1eljá
+é2p1elk
+ép1ellá
+é2p1ellen
+é2p1elm
+é2p1elo
+é2p1e2lőke
+é2p1elr
+é2p1eltér
+ép1elu
+épe2n
+é2p1ene
+é2p1e2p
+é2p1er
+épe2rő
+é2p1esem
+é2p1e2ser
+é2p1e2sett
+é2p1e2sés
+é2p1e2ső
+é2p1este
+é2p1esté
+é2p1esti
+é2p1estj
+épe2sz
+é2p1esze
+é2p1eszk
+é2p1eta
+ép1e2tete
+épe2teté
+é2p1etű
+ép1eva
+é2p1ex
+é2p1ég
+é2p1é2k
é2p1é2l
-é2p1ép
-épés1s
-épi2a
-é2p1i2p
-ép1ira
-ép1iro
+é2p1é2neke
+é2p1ér.
+é2p1éri
+épé2sa
+é2p1éte
+ép1fl
+ép1gr
+é2p1i2d
+é2p1i2ko
+é2p1imp
+ép1ind
+ép1ing
+é2p1ins
+é2p1int
+ép1i2pai
+é2p1i2ra
+é2p1i2rá
+é2p1i2ro
é2p1irt
-é2p1isk
+ép1isk
+é2p1ism
+é2p1ist
+é2p1i2ta
é2p1iz
-é2p1ír
-épo2
-ép1ok
-ép1ol
-ép2pak
-ép2p1an
-ép2pek
-éppo2
-ép2pod
-ép2p1ol
-ép1pr
-é1p2ró
-ép1t2
-ép1uj
-ép1u2n
-ép1u2r
-ép1u2t
-é2p1ú
+ép1ín
+é2p1í2r
+1építm
+é2p1ív
+épká2r
+ép1kl
+ép1kr
+ép1kv
+éple2t1ö
+ép1ob
+é2p1ok
+ép1old
+ép1olv
+ép1on
+ép1op
+ép1orm
+ép1ors
+ép1osz
+é2p1óc
+é2p1ó2h
+ép1ó2r
+ép1öl
+ép1öm
+ép1ön
+épö2r
+ép1ös
+ép1ö2z
+ép2p1ek
+ép2pí
+ép1p2l
+ép2p1od
+ép1p2r
+é1prog
+ép2rózá
+ép1sh
+ép1sk
+ép1s2n
+ép1sp
+ép1s2t
+épsz2
+ép1t2r
+ép1udv
+ép1ug
+é2p1uj
+épu2n
+ép1uno
+é2p1u2r
+épu2s
+é2p1u2t
+ép1új
+ép1ús
+ép1út
+é2p1üd
+é2p1üg
+é2p1üld
1épüle
-ér1abr
+é2p1ür
+ép1üs
+é2p1üv
+é2p1üz
+ér1abl
+ér1abs
é2r1a2d
-ér1ajá
-ér1aká
-éra1kl
-ér1akn
-é2r1a2l
-éra2n
-ér1any
-éra2r
-ér1ara
+ér1a2gá
+ér1agg
+ér1agy
+ér1a2ja
+ér1ajt
+é2r1a2ka
+é2r1akc
+é2r1a2la
+ér1alá
+ér1alg
+ér1alk
+ér1alm
+ér1alv
+ér1amb
+ér1amp
+ér1ane
+ér1ani
+ér1a2no
+ér1ant
+ér1a2pá
+ér1a2pó
+ér1app
+ér1apr
+ér1a2ra
+ér1a2rá
ér1arc
-é2r1as
-é2r1a2t
+ér1asp
+ér1ass
+ér1a2ti
+ér1atk
+ér1atl
+ér1a2to
+éra1t2r
+ér1att
+ér1aty
é2r1a2u
-ér1á2g
-ér1ál
-é2r1ár.
-érá2rak
-ér1áru
-ér1áz
-ér2ca
-ér2cá
-1ércb
+ér1a2va
+é2r1a2x
+ér1a2zo
+é2r1ábr
+ér1ág.
+é2r1á2ga
+ér1ágb
+ér1ágg
+ér1ágy
+é2r1á2l
+ér1á2p
+ér1árá
+ér1árk
+ér1á2ro
+ér1árp
+ér1árr
+ér1á2ru
+ér1á2t1a2
+ér1á2t1á2
+ér1átc
+ér1á2t1e2
+ér1áté
+ér1átf
+ér1áth
+ér1átj
+ér1átl
+ér1átm
+ér1á2tö
+ér1átr
+ér1átú
+ér1átü
+ér1átv
+é2r1áz
+1érbán
+ér1bl
+ér1br
+ér2caj
+ér2c1a2l
+ér2c1a2n
+ér2c1as
érc3c
-ér2ced
-1ér2c3h
+1ércd
+ér2cedé
+ér2c1emb
+ér2c1esz
+ér2c3h
+ér2cil
+ér2c1im
+ér2ciz
ér2c1o
+ér2có
ér2c1ö
+ér2cő
+ér2c3seb
+ér2c3sis
+ér2cú
ér2cz
-ér2dz
+ér2d1am
+ér2d1á2
+1érdekbő
+1érdeke.
+1érdekei
+1érdekel
+1érdekl
+1érdekt
+1érdekü
+1érdekű
+1érdemé
+ér2d1erő
+érd1este
+érdés3s
+ér2d1i2ná
+ér2d1iz
+ér1dra
+érdü2l
+ér2d1ülé
+ér2d1ülő
+ér2d3z
ére2b
-é2r1eb.
+ér1eba
é2r1ebe
-é2r1e2dé
-ére2ga
+é2r1ebé
+é2r1ebr
+ér1eff
+ére2g1a2
ére2g1á
+ére2ged
+ére2gel
+ére2g1em
+ére2gen
+ére2g1e2r
+ére2gev
+ére2g1él
éreg1g
+ére2gin
+ére2go
+ére2g1ö2
é2r1e2gy
-ér1elk
-é2r1ell
-ér1e2lő
-é2r1els
-ér1eny
-é2r1e2re
-é2r1e2ső
-éres3s
-ére2ta
-ére2tel
-é2r1e2v
-é2rezh
-é2rezv
-ér1é2kek
-ér1ékel
+éregyez1
+é2r1ej
+é2r1e2kén.
+é2r1elá
+é2r1e2leg
+é2relemz
+ér1e2lég
+é2r1elis
+é2r1elk
+é2r1elo
+é2r1e2lőa
+ére2lőir
+é2r1e2lől
+é2r1e2lőme
+é2r1e2lőn
+ér1elr
+ér1eltá
+ére2m1a
+ére2má
+é2rember
+ére2m1eg
+é2r1emel
+ére2mes
+é2r1e2més
+ér1e2mis
+é2reml
+ére2m1o
+ére2m1ó
+é2re2mu
+ére2n
+é2r1ene
+é2r1e2r
+ére2ső
+é2r1eső.
+é2r1esőb
+é2r1esőj
+é2r1esőn
+éres1ő2r
+é2r1esőt
+é2r1esté
+ére2t1a
+ére2tá
+ére2t1eg
+ére2t1el
+ére2t1ér.
+ére2t1é2ve.
+ér1e2ve
+é2r1e2vé
+é2r1é2d
+é2r1é2g
+é2r1éj.
+é2r1é2jét
+é2r1é2k
é2r1é2l
-é2réneke
-éri2as
-é2r1i2d
+é2r1é2neke
+é2r1ép
+é2r1é2ri
+éré2s1el
+éré2sza
+éré2szá
+éré2ter
+é2r1étk
+ér1é2ve.
+é2r1évn
+ér1évv
+érfiá2
+ér1fl
+érfo2g1ón.
+érfo2g1ós
+érfoto1
+ér1f2r
+ér1g2r
+éri2al
+éri2csi
+é2r1ido
+érié2n
+ér1ifj
éri2g
-ér1iga
-ér1ige
-ér1ill
+é2r1iga
+é2r1ige
+é2r1i2ko
+é2r1ill
+é2r1i2ma
+é2r1i2má
+é2r1i2mi
+é2r1i2na
+é2r1ind
+é2r1inf
+é2r1ing
+é2r1inj
+é2r1ins
+é2rint
+ér1inv
+é2rinz
+é2r1i2o
+é2r1i2pa
+ér1ira
é2r1isk
+ér1ism
é2r1ist
-ér1i2sz
-é2r1itt
-é2r1iz
-é2r1ív
-ér1old
-ér1olv
+é2r1i2sz
+é2r1i2ta
+é2r1iva
+é2r1ivá
+é2r1i2z
+ér1íg
+ér1íj
+é2r1ín
+é2r1ír
+é2r1í2v
+é2r1í2z
+ér2jan
+ér1k2l
+érkö2z1e2pé
+ér1k2r
+ér1k2v
+érle2t1öl
+1érméé
+1érméj
+1érmék
+1érmi.
+é2r1o2l
ér1ont
-é2r1or
-é2r1ö2
-é2rőse
-ér1p2
-érs2
-ér1sk
-ér1st
+éro2p
+ér1ope
+é2r1o2r
+ér1ott
+ér1ovi
+é2r1o2x
+éró2l
+ér1ólo
+ér1óri
+é2r1ö2b
+é2r1ö2c
+ér1öko
+é2r1ö2l
+é2r1öm
+é2r1ön
+é2r1ör
+é2r1ös
+ér1öt
+ér1öv
+é2r1ö2z
+érő1f2
+ér1pl
+ér1p2r
+1érsek
+ér1s2k
+ér1sl
+ér1s2p
+ér1s2r
+ér1s2t
+érsz2
+ér1szk
+ér2tat
+1értekez
+ér2t1ela
1értelm
+1értesí
+1értékil
+1értékm
+értés3s
+ért1ö2ve
1értőc
-1értőj
-1értőr
-1értőv
-ér1tra
-ér1u2r
-ér1u2t
-ér1u2z
-ér1úr
-ér1út
-ér1üld
-ér1üt
-érva2d
-érvén3n
-1érvv
-1érzeté
-1érzékenye
-1érzékenyí
-1érzékenyül.
-1érzékenyülé
-1érzékenyülh
-1érzékenyülte
-1érzékenyülts
-1érzékenyülv
-ésa2
-és1ad
-és1al
-é2s1an
-és1ál
-é2s1á2t
-é2s1eg
+1értőg
+1értőü
+ér1t2ran
+ér1trá
+ér1t2ren
+ér1t2ré
+1ér1t2ro
+ér1tró
+ér1uga
+é2r1uj
+éru2m1e
+éru2n
+ér1una
+é2r1u2r
+éru2s1ér
+ér1u2sz
+ér1uta
+ér1utá
+ér1u2to
+é2r1u2z
+é2r1új
+ér1ú2r
+ér1ú2s
+érú2t
+é2r1ü2g
+érü2ké.
+é2r1ür
+é2r1üs
+é2r1üt
+é2r1ü2v
+é2r1üz
+é2r1ű2z
+érv1a2dó
+érv1ala
+ér2v1a2n
+ér2v1á2gy
+1érvel
+ér2v1elem
+ér2v1égb
+ér2v1égh
+ér2vék
+ér2vél
+ér2vu
+2érzá
+1érzék.
+1érzékb
+1érzéké
+1érzékh
+1érzékk
+1érzékn
+1érzékr
+1érzékt
+1érzékü
+1érzékű
+1érzésil
+és1abl
+é2s1a2d
+és1agy
+és1ajt
+és1a2ka
+és1akl
+és1akn
+és1ako
+és1akt
+és1a2la
+és1alg
+és1alk
+és1all
+és1alt
+és1alv
+é2s1am
+és1ana
+és1ant
+és1a2ny
+és1apa
+és1apr
+és1ara
+és1a2rá
+és1arc
+és1aré
+és1arm
+és1arz
+és1asp
+és1ass
+é2s1a2u
+ésá2c
+é2s1ál
+és1árt
+ésá2s
+és1áta
+és1áth
+és1átl
+és1bl
+és1d2r
+ése2b
+é2s1ebé
+é2s1ef
+és1e2ge
+és1e2gy
+é2s1e2ke.
+é2s1e2kei
+é2s1e2kés
+é2s1eks
+é2s1ekv
+és1ela
és1elá
-és1e2le
-és1ell
+és1elb
+és1elk
é2s1elm
és1elo
-és1e2mel
+és1elr
+é2s1elvé
+és1elz
+és1ember
+é2s1e2mel
+é2s1eml
+ése2n
+é2s1ene
+é2s1eng
+é2s1eny
+é2s1e2p
+és1erő
é2s1esz
-é2s1eti
+é2s1eto
é2s1ev
-é2s1él
+é2s1ex
+és1égb
+é2s1é2géb
+é2s1é2géé
+és1é2géh
+és1é2gén
+é2s1é2gév
+é2s1égh
+é2s1é2gi
+é2s1égn
+é2s1égv
+é2s1é2hen
+é2s1é2j
+é2s1é2k
+é2s1é2l
+é2s1ép
+é2s1ér.
+és1érb
+és1érc
+é2s1érd
+é2s1é2rem
+é2s1é2ren
+é2s1é2ré
+é2s1érh
+é2s1érl
+é2s1érn
+é2s1é2rő.
+é2s1é2rők
+é2s1é2rőv
+és1érr
+é2s1érte
é2s1érté
+é2s1értő
+é2s1é2rü
+é2s1érv
+és1ész
+é2s1é2te
és1é2ve.
+és1é2vet
+és1é2véb
+és1é2vét
+és1é2vév
+és1fl
+és1fr
+és1gr
+é2s1ic
é2s1id
-é2s1in
-é2s1i2r
-é2s1i2v
-és1í2v
-és1k
-és1ol
-és1os
-é2s1ó
-é2s1öl
-és1ös
-és1p2
-éss2
-és1st
-és3sza
+é3sidet
+ésié2
+ési2g
+és1iga
+és1ige
+é2s1ikt
+é2s1ill
+é2s1imi
+és1imp
+és1ind
+és1inf
+é2s1ing
+é2s1int
+és1inv
+é2s1i2p
+é2s1ira
+é2s1i2rá
+és1iro
+é2s1i2s
+é2s1i2ta
+é2s1i2vá
+é2s1í2r
+é2s1ív
+és2katu
+és1kl
+és1k2r
+és1kv
+é1slág
+é2s1ob
+és1oko
+és1okt
+é2s1o2l
+é2s1om
+é2s1op
+2ésor
+és1org
+és1orn
+és1orv
+é2s1os
+é2s1ot
+és1o2v
+és1óc
+és1ó2l
+és1ón
+és1ó2r
+é2s1ö2l
+é2s1ön
+é2s1ös
+é2s1öt
+é2s1ö2v
+é2s1ö2z
+és1p2l
+és1p2r
+és2pri
+és1ps
+és1s2k
+és1s2p
+és1s2t
+éssz2
+és3szab
+és3szag
+és3szak
+és3szap
és3szá
+és4szel.
+és3szere
+és3széle
+és3szf
és3szi
+és3szí
+és3szo
+és3szó
és3szö
+és3sző
+és3szt
és3szú
-és1t2r
-é2s1ú
+és3szül
+és3szű
+ést2r
+és1tra
+és1trá
+és1tré
+é1stru
+és1ud
+és1u2r
+é2s1u2t
+é2s1ú2t
é2s1üg
-é2s1ü2t
-é1sy
-ész1a2d
-ész1a2g
-ész1a2l
-ész1a2n
-ész1a2r
-és3zav
-ész1á2l
-é2sz1egy
-ész1ell
-é2sz1esz
-é2szex
-é2szez
+é2s1ünn
+é2s1ür
+és1ü2té
+é2s1üz
+ész1abl
+é2sz1a2d
+ész1agy
+é2szaj
+északá2
+észa2k1áz
+é2szakc
+észa2k1ü
+ész1ale
+ész1alg
+ész1all
+észa2n
+ész1ant
+ész1any
+észa2p
+ész1apo
+é2sz1a2r
+é2sz1as
+ész1a2to
+é2sz1au
+é2szaz
+2észá
+é2száb
+é2sz1á2g
+észá2l
+ész1állá
+és3záp
+ész1áram
+é2szárá
+ész1árán
+ész1árf
+ész1árk
+é2sz1árn
+ész1á2ru
+é2szás
+é2sz1á2t
+ész1á2z
+é2sz1e2ge.
+é2sz1e2gei
+é2sz1e2gy
+é2sz1ej
+észe2k1a2
+észe2ká
+ész1ekés
+észekö2
+észe2köv
+é2sz1ela
+é2sz1e2leg
+ész1e2lemb
+ész1e2leme
+ész1e2lemé
+ész1e2lemm
+ész1e2lemn
+é2sz1elk
+ész1előd
+é2sz1előr
+é2szelőz
+ész1ember
+é2sz1emi
+é2s3zené
+é2sz1eng
+é2sz1ep
+ész1e2rez
+ész1e2rén
+ész1erkö
+é2szerő
+ész1e2sete
+ész1eszt
+észeta2
+észe2t1ak
+észe2t1e2l
+észe2t1ér.
+észe2t1o
+észe2t1ör
+ész1e2ve
+é2sz1ex
+é2szég
+é2sz1ékt
é2sz1é2l
-ész1éte
-é2szid
-é2szim
-é2sz1ir
-észi2s
+é2sz1é2p
+ész1éré
+é2széró
+é2szész
+é2sz1é2te
+é2sz1étk
+é2sz1i2d
+é2szif
+ész1i2ko
+é2sz1ikt
+é2sz1ill
+é2sz1im
+é2szina
+é2sz1ind
+é2sz1inf
+ész1ing
+é2sz1inté
+ész1io
+é2sz1i2p
+é2szira
+é2sziro
+é2szirt
+é2sz1i2s
+é2sz1ita
+é2sz1iz
+ész1í2j
+é2szír
+ész1í2vá
+ész1í2vé
+ész1í2vó
ész1k2
-é2sz1o2k
-é2sz1ol
+ész1okt
+észo2l
+ész1old
+ész1olt
+é2szop
+ész1ors
+é2sz1os
é2sz1ot
-ész1ös
-ész2t1o
-é2s3zu
-é2szú
-ész1üg
-é2sz1üz
-é2t1a2d
-ét1ajt
-ét1a2ka
-ét1akk
-ét1akn
-ét1a2la
-ét1ann
-ét1apr
-ét1arg
+é2s3zón
+2észö
+és3zöld
+ész1ölt
+é2sz1ön
+é2sz1ös
+é2szöt
+ész1őrs
+ész1p2
+ész3su
+ész3sű
+észtés1s
+ész2tors
+észtorz1
+ész1tra
+ész1tri
+és3zul
+ész1ut
+ész1úrn
+é2sz1út
+é2sz1ü2g
+é2szünn
+é2szüt
+é2sz1ü2z
+é2szűz
+ész1z
+ét1abla
+ét1a2do
+ét1a2dó
+ét1adt
+ét1agg
+éta1gr
+étai2k
+é2t1ajk
+é2t1ajt
+ét1akc
+éta1kr
+ét1akt
+é2t1alj
+é2t1alk
+ét1als
+é2t1alt
+é2t1ani
+é2t1ann
+é2t1ant
+ét1anya
+ét1anyá
+é2t1aps
+é2t1arc
+é2t1arg
+ét1aszt
état2
-ét1a2to
-étau2
-é2t1ág
-ét1áll
-ét1árb
-éte2rá
+ét1atom
+étaü2
+ét1azo
+ét1ábr
+é2t1á2g
+é2t1áll
+ét1á2rad
+ét1á2ram
+ét1á2rá
+é2t1á2ri
+é2t1á2rú
+ét1árv
+ét1áti
+é2t1átr
+é2t1átv
+ét1bl
+ét1dr
+étea2
+é2tedén
+éte2g1a2
+éte2gele
+éte2g1elv
+éte2ger
+éte2go
+é2t1e2ke.
+é2t1e2kei
+éte2la
+éte2l1á
+éte2l1e2l
+éte2l1er
+éte2l1ék
+éte2l1ér.
+éte2l1é2ren
+éte2léré
+é2telfog
+é2tellen
+éte2lo
+é2t1e2lől
+éte2l1ő2r
+é2t1e2mel
+étera2
+éte2rad
+éte2r1ag
+éte2r1á2
éte2reg
éte2rel
-é2t1esé
-é2t1esh
-é2t1e2si
-éte2szem
-ét1e2ve
-ét1ezr
-é2t1é2g
-été2k
-é2t1él
-é2t1érd
+étermo1
+é2t1erő
+éte2sik
+é2t1estün
+é2t1esv
+é2t1eszm
+ét1e2vi
+été2g
+ét1ég.
+ét1ége
+ét1égé
+ét1égn
+ét1égt
+é2t1é2j
+é2t1é2l
+é2t1é2ren
+é2t1é2ré
+é2t1é2ri
+é2t1é2rőt
é2t1érte
é2t1érté
-ét1f2
-é2t1ic
-é2t1id
+é2t1é2rü
+é2t1érv
+é2t1érz
+ét1észl
+é2t1étb
+é2t1é2té
+é2t1étn
+é2t1étr
+é2t1é2ves
+ét1fl
+ét1fr
+ét1gr
+é2t1i2d
éti2g
-ét1igé
-é2t1i2r
-ét1ist
-é2t1i2v
-é2t1ív
-é2t1o2l
-é2t1o2p
-éto2r1i
-é2t1ó2r
-ét1ök
-ét1ö2l
-ét1öm
-ét1ön
-ét1ös
+é2t1ige
+é2t1igé
+é2t1i2ko
+é2t1i2m
+é2t1ind
+é2t1inf
+é2t1int
+éti2p
+é2t1ipa
+é2t1irá
+ét1iro
+étis3s
+éti2sz
+é2t1i2vá
+ét1izé
+é2t1í2r
+é2t1í2v
+ét1kl
+ét1kr
+1étkű
+ét1kv
+étmeg1g
+ét1o2ká
+ét1o2ki
+ét1okm
+ét1o2l
+é2tola
+é2tolv
+ét1oml
+é2t1op
+ét1ord
+ét1org
+éto2ris
+ét1orm
+ét1ors
+é2t1óc
+ét1ó2ha
+ét1ón.
+ét1órá
+étö2k
+étö2l
+é2t1ömö
+é2t1ön
+étö2rül
+é2t1ös
ét1ö2t
-ét1ö2z
-é2t1őr
-étrás1
-é1t2ró
-ét1sz
-ét1ug
-ét1uj
-ét1üt
-ét1ű2z
-étve2g
+ét1ö2v
+é2t1ö2z
+ét1őr.
+ét1őrb
+ét1őri
+ét1őrm
+ét1őrö
+ét1őrü
+é2t1ő2s
+é2t1ő2z
+étpen1
+ét1pf
+ét1pl
+ét1pr
+é1t2rafá
+ét2réf
+étro2m1é2
+ét1sl
+ét1sm
+ét1sp
+ét1st
+ét1t2r
+ét1udv
+é2t1ug
+é2t1uj
+étu2n
+ét1una
+ét1und
+é2t1u2r
+é2t1u2t
+ét1ú2s
+é2t1üg
+é2t1ür
+ét1üs
+é2t1üt
+é2t1ü2v
+é2t1ü2z
+étű2z
+é2t3ye
é1u
+éu2ni
+éu2ta
+éu2tá
+éu2zs
é1ú
-é1ü2
+é1ü
+éü2gy
+éü2le
+éü2lé
+éü2lö
+éü2lő
+éü2rü
+éü2té
+éü2tö
+éü2tü
+éü2ze
é1ű
é2vad
-év1adá
+1évad.
év1adó
+1évadr
+év1agy
+év1ajá
+é2v1a2la
é2valá
+é2v1alk
+é2v1am
+é2v1a2n
+év1arc
+év1au
+év1ava
é2v1a2z
+é2v1állo
+é2v1áta
+év1áth
+év1átk
+é2v1átr
+évá2z
+év1ázá
+1évbeo
+é2v1e2g
+1é2vei
+1é2vekt
+év1ela
+1évelf
+1é2v1eli
+é2v1ell
+év1eln
+é2v1elo
é2velő
+é2v1els
+é2v1elt
+é2v1elv
+é2v1eng
+1é2venk
1é2vent
+év1e2ri
+é2v1e2rő
+1é2vesb
+1évesé
+év1e2sés
+1évesf
+1é2vesi
+1é2vesk
+1é2vesr
év1esté
-1é2v1ez
-1é2vérő
-év1érté
-é2vu
-é2v1ú2
-1évz
-éz1ab
+év1eve
+év1é2ge
+év1é2gé
+év1égr
+év1égt
+év1ér.
+év1é2ré
+évé2ri.
+év1érr
+é2v1érte
+é2v1érté
+évé1ska
+évé1s2p
+évé1stá
+év1gr
+évi2g
+év1iga
+é2v1igé
+1é2vih
+1é2vik
+1é2vim
+é2vin
+év1ind
+1évine
+1éviné
+év1ing
+év1int
+év1ism
+1é2vitő
+1é2viv
+é2v1ír
+1évkös
+év1kr
+1évny
+év1ok
+év1os
+év1ó2r
+év1ö2r
+év1ös
+év1öt
+1é2vőd
+év1pr
+év1sk
+év1st
+év1sz
+évsza2k1as
+évtá2r1a2d
+1évtő.
+év1ur
+év1új
+év1ú2t
+é2v1üg
+é2vük.
+é2vükb
+é2vüke
+é2vükh
+é2vüki
+é2vükn
+é2vükt
+é2vülj
+é2v1üt
+é2v1üz
+1évzá
éz1a2d
-éz1ak
-é2z1at
-é2z1ág
-é2z1ál
-éz1á2p
+éza2gal
+éza2ge
+éz1a2j
+éz1akr
+é2z1a2l
+éza2n
+éz1any
+éz1a2r
+éz1as
+é2z1a2t
+éz1az
+é2z1á2g
+é2z1á2l
+éz1ásv
+éz1áz
+éz1bl
éz1d2r
-éze2d
-éze2m
-éz1eme
-éze2n
+éze2c
+éz1ece
+é2z1e2dé
+éz1e2gé
+éz1e2gy
+é2z1ela
+é2z1eld
+é2z1e2le
+ézel1en
+é2z1elf
+é2z1elh
+é2z1ell
+éz1előb
+éz1előé
+éz1előg
+éz1elői
+éz1előj
+é2z1e2lőké
+éz1előn
+éz1előp
+éz1elős
+éz1előt
+éz1előv
+é2z1els
+é2z1elv
+é2z1emb
+éz2en.
+éze2n1á
+éz1enz
+é2z1e2p
+éze2r1a
+éze2r1á
+éze2r1in
+éze2rip
+éze2ro
+éz1erő
+éz1e2rű
+éz1esz
+éze2ta
+éze2t1á
+éze2t1eg
+éze2t1e2kéh
éze2t1el
-éz1ev
+é2z1e2v
+é2z1ex
é2z1é2d
+é2z1ég
+é2z1ék
+é2z1é2l
+é2z1ér.
é2z1érc
-éz1ill
+é2z1é2ri
+é2z1érm
+é2z1érp
+é2z1érté
+é2z1érz
+éz1fr
+ézgé2
+éz1g2r
+ézi2d
+éz1ido
+é2z1igé
+é2z1ill
+éz1imp
+éz1ind
éz1ing
-ézi2ók
+é2z1int
+ézi2o
+éz1ion
+é2z1i2pa
+é2z1ipá
é2z1i2r
-ézi2sel
-é2z1í2
-éz1k2
-éz1or
-éz1os
-é2z1ö
+é3zire
+é3zirő
+ézis3s
+ézi2s1ú
+ézi2sza
+ézi2s3zá
+éz1i2ta
+é2z1i2vá
+éz1izm
+éz1izo
+é2z1izz
+éz1í2j
+éz1ír
+éz1í2v
+éz1íz
+ézkar2c3h
+éz1k2l
+éz1k2r
+éz1ola
+éz1old
+éz1op
+é2z1or
+éz1osz
+é2z1ox
+éz1öb
+éz1ö2k
+éz1ön
+éz1ör
+éz1ös
+éz1öt
+éz1ö2v
+ézőa2
+éz1őr.
+éz1pl
+éz1p2r
+éz3saj
+éz3sar
+éz3seb
éz3ser
-éz3sé
-éz3sis
-é2z3so
+éz3sik
+éz3sín
+éz3sod
+ézsó2
+é2z3sók
+ézs1ór
éz3sö
-ézus1s
-ézü2
-éz1üg
-éz1üs
-éz1üt
-ézve2g
+éz3spi
+ézs1s
+éz3sug
+ézs1ú2r
+é2z3sü
+éz3sz
+éz1t2r
+éz1ug
+éz1uj
+é2z1u2r
+éz1ut
+é2z1ü2g
+é2z1ür
+é2z1üs
+é2z1üt
+é2z1ü2z
+éz1űr
+éz3zsa
+2f.
1fa
-faá2
-fae2
-fa2gyé
+faát1
+fa1b2ro
+fa2chi
+fac3hi.
+fa2c3ho
+fa1d2r
+faegyez1
+fae3lek
+fae2r
+faé2d
+fa1f2r
+fa1g2r
+fagyé2
+fa2gyék
+fa2gyol
+fa2győ
+fa2gyúr
+fai2d
+fai2s
+fa2j1a2l
+fa2j1az
+fa2j1ág
+fa2j1á2ru
+fa2j1egys
+fa2jelem
+fa2j1elk
+fa2jelm
+fa2j1eln
+fa2j1elv
+fa2j1es
fa2j1ö
+fa2jő
+fajt2
+faj1tr
+faju2r
+faj1ura
fa2jü
+fa1k2l
+fa1k2r
+fa1k2v
+fa2l1a2dá
+fa2l1a2dó
+fa2lajá
+fa2l1a2kó
+fa2l1a2l
fala2n
fal1any
-fa2l1ár.
-fa2l1e2g
-fa2l1e2l
-fa2lí
-fao2
-faó2
-faru2
-fa2r1us
-fas2
-fa1sk
-fa1st2
-fa1t2r
-fa2us
-fazé2
+fa2lav
+fa2l1azú
+fa2l1ábr
+fa2l1ál
+fa2l1á2ro
+fa2l1áth
+fa2l1átv
+fal1e2gy
+fa2l1elem
+fa2l1elő
+fal1ese
+fa2l1éri
+fal1f2
+fa2lid
+fa2l1inj
+fa2l1iz
+fa2l1í2
+fa2l1ol
+fa2l1oml
+fa2lor
+fa2l1os
+fal1órá
+falö2
+fa2lök
+fa2l1öv
+fa2l1őr
+fal1p2
+fal2s1ín.
+falta2n
+fal2tem
+fal2tip
+fal2tüz
+fa2lü
+fa2n1e2vet
+fan1évb
+fan1évr
+2f1a2nya.
+faó2r
+fa1p2l
+fa1p2r
+fa2r1a2dá
+fa2ragy
+fa2r1a2kó
+fa2r1a2l
+fa2r1at
+fa2r1a2v
+fa2r1ácc
+fa2r1ál
+fa2r1á2z
+fa2r1em
+fa2r1e2pe
+fa2r1id
+fa2r1iná
+fa2r1ing
+fa2r1izm
+fa2r1izo
+far2k1al
+far2kol
+far2mál
+far2min
+far2m1unká
+fa2r1okke
+fa2r1osz
+fa2r1ut
+fa1s2k
+fa1s2p
+fa1sta
+fa1sté
+fa2sz1ív.
+fa1tri
+fau2r
+fau2s
+fau2tá
+faü2t
+faü2z
+fa2xe
+faxi2
+fa2x1ik
+fa2xin
+fa2xí
+fa2xö
+fa2xú
+fa2xü
+fa2xű
+fa1ya
+fa1ye
1fá
+f1ábr
+fá2c3h
+fá2gép
+fáj2lak
+fáj2lá
+fáj2l1e2
+fáj2l1í2
+fá2ní
+fánka2
+fán2kar
+fán2ká
+fán2tad
+fán2t1a2g
+fán2tan
+fán2t1á2
+fán2t1e2
+fán2tis
+fán2tor
+fán2tö
+fá2po
+fá2ram
+f1á2rá
fás3s
-fá2sü
-fá2t1é
-fázás1
+fá2t1a2
+fá2t1á
+fá2te
+fá2t1érd
+fá2t1i2s
+fátmű1
+fá2t1ol
+fá2t1ü2
+fázi2s1ág
+fázi2s3z
+fba2l1
+fc2lu
+fd2ró
1fe
+fe2aa
+fe2aá
+fe2ab
+fe2ac
+fe2ad
+fe2ae
+fe2aé
+fe2af
+fe2ag
+fe2ah
+fe2ai
+fe2aj
+fe2am
+fe2an
+fe2a1p2
+fe2ar
+fe2as
+fe2at
+fe2aú
+fe2av
+2f1e2dz
+fe2ed
+fe2el
+fe1f2r
fe2gy1i
-fe2j1a
-fe2já
-fe2jo
+fe2győ
+fei2n1i
+fe2ja
+fe2j1á2
+fe2j1egy
+fe2j1elm
+fe2j1e2r
+fe2j1esz
+fe2j1e2v
+fe2j1o
+fe2j1ös
+fej1tr
+fe2j1u
+fe2jú
+fek2t1emb
fe2l1a2
fe2l1á2
+fele2c
+fe2l1e2dz
fe2l1e2g
+fe2l1e2h
+fe2l1elev
fe2l1e2mel
-fel1emé
+fe3lemen
+fe3lemet
+fe2l1e2més
fe2l1eml
-fel1eng
-fe2l1ere
+fe2l1eng
+fe2l1enn
+fe2l1e2re
+fe2l1esd
+fe2lesed
+fel1eseg
+fe2l1e2sett
+fe2l1esés
+fe2l1esik
fe2l1esk
-fe2l1esz
+fe2l1esni
+fe2l1e2ső
+fe2l1essen
+fe2l1este
+fe2l1estü
+fe2l1e2sz
+fe2l1e2tes
fe2l1e2tet
-fel1eve
+fe2l1ettek
+fe2l1ettél
+fel1e2ve
+fel1e2vé
+fel1evi
+felé2d
+fe2l1éde
fe2l1é2g
-fel1éke
-fel1éks
-fe2l1él
-fe2l1ép
+fe2l1é2k
+fe2l1é2l
+fe2l1é2p
fe2l1ér.
+fe2l1é2rek
+fe2l1éren
+fe2l1érh
+fe2l1éri
+fe2l1érj
+fe2l1érk
+fe2l1érn
+fe2l1érs
fe2l1ért
-fel1érz
-fe2l1id
-fe2lij
-fe2l1i2s
-feli2t
-fe2l1ita
-fe2l1iz
+fe2l1érv
+fe2l1étet
+fe2l1i2
+fe3lib
fe2l1í2
+fel3l
fe2l1o2
+fe2l1ó2
fe2l1ö2
+fe2l1őg
+fe2l1őr
fel1p2
-felsőrész1
-fel1t2
-fe2lu
+felt2
+fe2l1u2
fe2lú
+2f1e2ner
+fen2n1a2
fen2ná
-fen2tí
+fenne2
+fen2nev
+fen1sc
+fer1abl
+fe2rak
+fe2r1áll
+fe2r1á2r
+fere2g
+fer1egy
+fe2r1old
+fe2r1olj
+fe2r1oln
+fe2r1olt
+fe2sem
+fe2s1er
+2f1e2sé
+feu2m1é2
+fe2vő
+fe2z1ér.
+fe2zó
+fe2zs
1fé
-fé2ká
-féko2
-fé2kú
-fé2l1a
-fé2l1á
+féka2
+fé2k1ad
+fé2k1ag
+fé2k1al
+fé2kas
+fé2k1au
+fé2k1á2
+fé2k1e2g
+fék1ell
+fé2k1er
+fé2k1ék
+fé2k1é2l
+fé2k1ér.
+fé2k1o2l
+fé2k1or
+fé2kön
+fé2k1u2
+fé2k1ú
+fé2l1a2
+fé2l1á2j
+fé2l1á2r
fé2leg
+fé2l1ekk
+fél1elé
+fé2l1ell
+fé2l1elő
féle2m
-fél1eme
+fél1emb
+fé2l1eme
+fé2l1e2r
+fé2l1ese
fé2l1esz
+2f1é2let
fé2l1ez
+fé2l1éva
+féligaz1
+fé2lin
fé2lir
fé2l1is
-fé2l1o
+fé2liv
+fé2lí
+fé2l1ok
+fé2los
fé2ló
-fé2lö
-fé2lu
-fé2lú
-féma2
-fé2mat
-fé2med
-fé2mel
-fé2mét
+fé2l1ö
+fé2lőr
+félpen1
+fél1t2r
+fé2l1ú2
+fé2mab
+fé2mad
+fé2m1a2g
+fé2m1a2j
+fé2m1a2n
+fé2m1ap
+fé2mau
+fé2maz
+fé2m1ác
+fé2m1ál
+fé2m1ec
+fé2medé
+fé2me2két.
+fé2m1e2l
+fé2m1emb
+fé2mer
+fé2mez
+fé2m1é2k
+fémé2r
+fé2m1éré
+fé2m1i2n
+fé2m1ir
+fé2m1is
+fé2mit
+fé2m1iz
+fé2mí
+fé2m1o
+fé2mó
+fé2mö
+fé2m1u
+fémü2
+fé2m1ül
+fé2ny1e2g
fé2ny1e2l
-fé2ny1i
-fé2nyí
-2férá
+fé2ny1e2r
+fé2ny1is
+fé2ny1í
+fé2nyo
+fé2nyö
+fé2nyú
+fé2pí
+fé2pü
+2féraá
+2féraf
+2férai
+2féral
+2férar
+2férád
+2féráé
+2férám
+fér2cem
+fére2g1e2
+fé2s1orr
+fész1al
+fészá2
+fész1ár
+fé2szeg
+fé2sz1el
+féta3u2
+2f1évk
+fé2zs
+fézs1e2
+fézs1o
+ffe3li
+ffi2ac
+ffi2ag
+ffi2aka
+ffi2am
+ffi2at
+ffli2
+ff1sh
1f2fy
+fg2ló
1fi
+fi2aa
+fi2aá
+fi2ae
+fi2aé
+fi2af
fi2ah
+fi2aí
fia2la
-fi2ap
-fi2asz
-fi2av
-fie2
-fi2l1el
-fina2
-fi2n1ag
-fi2nid
+fi2ao
+fi2aó
+fi2aö
+fia1p
+fi2apa
+fia2ra
+fia2rá
+fi2aré
+fi2aszá
+fi2aszo
+fi2au
+fi2aü
+fi2avá
+fi2ave
+fiá2l
+fi2c3h
+fici2t1á
+fi2dan
+fi2d1á
+fi1drá
+fie2l
+fie2n
+fie2r
+fie2s
+fies1e
+fie2t
+fi1fl
+fi1fr
+2f1i2gaz
+fi1k2l
+fi1krá
+fi1kré
+fi1kri
+fi1k2v
+fi2lac
+fil1ada
+fil1akn
+fil1akt
+fi2lal
+fi2lam
+fi2l1ál
+fi2lár
+fil1elt
+fi2l1en
+fi2les
+fil1esz
+fil1ért
+fi2l1i2d
+fi2l1i2m
+fi2l1in
+fil2mad
+fil2mak
+fil2man
+fil2m1as
+fil2mat
+fil2m1á2
+fil2mos
+fil2mu
+fi2lö
+fi2lü
+2f1i2má
+fimeg1
+2f1i2nas
+2find
+fin1osz
+fi2n1ó
fint2
+fin1tr
fi2n1u2
-fió2ki
-fi1sc
+fi2nú
+2finx
+fio2v
+fi3ók
+fió2k1a2l
+fió2kar
+fió2k1e2
+fió2kép
+fió2kol
+fió2kö
+fió2r
+fiő2r
+fi1p2l
+fi1p2r
+fi2rod
+fis1arc
+fi1s2p
fist2
-fi2t1é2
-fi2tor
+fi1str
+fi2t1ad
+fit1a2la
+fit1alj
+fi2tág
+fit1árak
+fitá2t
+fi2t1áta
+fi2t1éh
+fi2t1érd
+fi2tik
+fi2t1in
+fi2tir
+fi2t1i2z
+fito1p2
+fi2t1osz
+fi2tön
+fi2t1őr
+fi2t1ur
+fiu2min
+fiu2t
+fi2úa
+fi2úá
+fi2úe
+fi2úf
+fi2úg
+fi2úí
+fi2úl
+fi2úo
+fi2úö
+fi2úő
+fi2úp
+fi2úsz
+fi2úti
+fi2úu
+fi2úú
+fi2úü
+fi2x1ár
+fi2x1el
+fi2xö
1fí
-f1k2
-fki2
-fkis1
-f2ló
-f2lú
-fme2
+fí2rá
+fírcsa2
+fí2r1in
+f1í2ró
+fír1tr
+fí2rü
+fjú1sz
+fki2s1
+fk2li
+fk2lu
+fk2ró
+f2lak
+f2lan
+f2lep
+f2lip
+fli2s1é
+flo2n1á
+flo2né
+f2lot
+f2luk
1fo
-fog1g
+fo2am
+fo2g1á2c
+fo2gál
+fo2g1árk
+fo2g1áro
+fo2g1e
+fog3g
+fo2gí
fo2g1or
fo2g1os
+fo2gö
+fo2gur
+fo2gü
+fohá2szat
+fo2kal
+fok1áll
+fo2k1árr
+fo2k1e2
+fok1ing
+fo2kí
+fok1k2
+fo2kola
+fo2k1or
+folta2n
+fol2t1e
+fol2t1ö
+fo2n1ada
+fo2nado
+fo2nak
+fon1alap
+fona2l1e2
+fon1alja
+fon1aljo
+fona2n
+fon1any
+fo2n1asz
fo2n1au
-fo2nát
+fo2n1á2r
+fonás1s
+fo2n1át
fond2
fon1dr
-fo2nel
-fo2n1in
+fo2neg
+fo2n1el1
+fo2ner
+fo2n1es
+fo2nék
+fon1f2
+fon1i2ko
+fo2n1i2m
+fo2nin
+fo2n1is
+fo2niz
+fo2ní
+fon1k
+fo2n1or
+fo2n1osz
+fo2nö
+fo2nő2
+fons2
+fon1st
+fon2t1i2n
+fontó2
+fon2tón
fo2nü
+fonya1
+fo2r1ad
+forakész1
+fo2r1ala
+fo2r1a2n
+for1ato
+fo2reg
+fo2r1el
+fo2r1er
+forgás1s
fo2r1il
+fo2r1i2o
+for2m1e2l
+for2m1em
+for2merő
+for2mes
+for2m1érté
+for2mil
+for2m1in
+fo2r1ol
+fo2rö
+2f1orrú
+fors2
+for1sp
+for2t1ál
+for2t1e2l
+for2t1érd
+for2tü
+fo2rü
foto1s
+fo2vi
1fó
+fó2rá
+fósza2
1fö
-föle2
-fö2leg
-föl1el
-fö2len
-fö2l1esk
-fö2l1et
-fö2lék
+fö2la
+fö2lá
+föl2dök
+fö2l1e2
+fö3le.
+2f1ö2lésbel
+fö2liv
fö2lí
+föl1k2
+fö2lo
+fö2ló
+fö2lön
+fölt2
+föl1tr
+fö2lu
+fö2lú
+fön2n1
+fönne2
+fö2sá
1fő
-főe2
-főé2
-fői2
-fő2r1ü2
-fő1tr
-főu2
-főú2
+főa2n
+főá2g
+fő1bl
+fő1br
+fő1dra
+főe2l
+főe2r
+főe2s
+főé2h
+főé2te
+fő1fl
+fő1f2r
+fő1gl
+fő1gn
+fő1gr
+fői2d
+főigaz1
+fői2ta
+főí2t
+fő1kl
+fő1kv
+fő2n1ag
+fő2n1apj
+fő1pl
+fő1pr
+fő2r1aj
+fő2rem
+főre2s
+fő2r1ék
+főri2
+fő2r1is
+fő2rül
+főr1ülé
+fő1sl
+2fősö
+fő1sta
+fő1str
+fősz2
+fő1szl
+fő1szp
+fő1szt
+fő1t2r
+főü2l
+főzőé2
+fp2la
+fp2ro
fra1s
-f2ric
-1f2rö
-fs2
-f1st
+frá2ma
+frá2má
+frá2m1e2
+frá2nye
+f2rás
+f2resk
+fré2ná
+fré2nén
+1f2ric
+f3rich
+f2rig
+f3rip
+1f2ris
+fron2t1a2
+fron2t1e2
+f2röc
+f2rus
+fs2ho
+fs2po
+fs2tí
+fst2r
ft1aj
-ft1ak
+fta1kr
+ft1alj
+ft1bl
+f2t1ef
+fte2m
+f2t1eme
+f2t1ér.
+fti2g
+f2t1ige
+f2t1ing
+ft1ös
+ft1út
+f2t1üg
+ft1üt
+f2t1ü2z
1fu
-fus3sz
+fuga1
+fura2t1e
+fu2s1as
+fu2seg
+fu2sis
+fu2sz1á2
fu2sz1ol
+fu2szü
+futókész1
+futó1s2p
1fú
+fúj2tal
+2f1ú2ré
+2f1úrr
+fú2zs
1fü
+2f1ü2gy
+fü2la
+fü2lá
+füle2c
+fü2l1eml
+fü2l1e2p
+fü2l1e2v
+fü2l1é2j
+fü2l1é2k
+fü2lí
+fül3l
fü2lo
-fül1t2
-fü2mi
-f1ü2té
-f1ü2tő
+2fülő
+fü2lőt
+fül3t2
+fü2ma
+fü2má
+fü2m1e
+fü2mo
+fü2mő
+fü2mú
+2f1ünn
+für2t1ő
+füstü2
+füs2t1ülé
+2f1ü2té
+2f1ü2tő
+2f1üzl
1fű
+fű1dr
+fű1fr
+fű1pr
+fű1sr
+fűsze2r1el
+fű1t2r
+fű2zá
+fű2zis
+fű2zo
+fű2z1ölt
+fvárosé2
1fy
+2g.
1ga
-ga2a
-g1a2bál
-2g1abl
+2g1abc
2gabr
-2g1a2cé
-ga2de
-gae2
-ga2gi
-ga2kad
-2g1a2lap
-2g1a2lám
-g1alb
-g2ali
+2g1abs
+ga1by
+2g1a2dag
+g1adap
+2g1a2data
+2g1a2datb
+gadás1s
+2g1adm
+ga2dog
+2gadomá
+gadói2ko
+2gadósat
+2g1a2du.
+2g1a2duk
+gae2r
+2g1aff
+ga1fl
+ga2ga.
+2g1agg
+ga1g2rá
+g1agy.
+ga2gyu
+g1a2gyú
+2g1aján
+2g1ajk
+2g1ajt
+2g1a2kad
+ga2kác
+2g1akc
+g2a3ké
+2gakév
+ga1kl
+2gaknai
+g1aktu
+g1akv
+gala2g1ú
+ga2lat
+2galáf
+2galáí
+ga2láv
+2g1alb
+2g1alc
+gale2g1e2
2g1alk
-3g2all
-2g1als
+galo2m1e
+3galop
+g1a2los
+2g1a2lud
ga2lul
+ga2lusz
+2galvó
+ga2m1a2gá
+2g1amc
+2g1amp
+ga2nab
+2g1a2nal
+2gancs
+gan2csal
+gancs1ág
gan2cse
gan1d2
-2gank
-2g1a2nya
-ga2nyá
-ga2nyó
-gaó2
+3g2ané
+gan2ga
+g1a2nim
+ga2nyag
+ga2ny1at
+ganye2l
+ga2nyér
+g1a2nyó
+ga2nyö
+gaó2r
ga2pa.
-2g1apj
-ga2pol
-2g1a2pó
+ga2paá
+ga2pac
+ga2pas
+ga2pán
+ga2pát
+ga1p2l
+ga2pok
+ga2pó.
+ga2pób
+ga2pók
+ga2pón
+ga2póv
2g1app
-ga2se
-ga2sé
-ga2s1i
-ga2su
+ga1p2ré
+ga1pro
+gara2t1í
+2g1a2rák
+2g1a2rány
+ga2rén
+gar1k2
+ga2rő
+ga2seg
+ga2s1is
+ga2s1ín
+ga1s2pi
+ga1spr
+gas3sze
+gas3szí
+gast2
+ga1s2ta
+ga1sto
+ga1str
+gasz1agg
+ga2sz1an
ga2szág
-g2at
-gata2r
+ga2szás
+ga2sz1es
+gasz2tár
+ga2t1a2d
gat1ará
-ga2t1eu
+ga2tav
+ga2t1ál
+ga2t1á2ram
+ga2t1eg
+ga2tep
+gaté2s
+ga1thi
ga2tim
-ga2ut
+gat1old
+ga2tomi
+g1a2uk
+ga2ul
+ga2us
+ga2van
+ga2var
ga2vat
+2g1a2vu
+gaza2n
+gaz1any
+gaza2te
+ga2zál
+3g2azd
+3g2aze
+ga2zer
2gazg
-2gazít.
-2gazíta
2gazítá
-2gazítók
-2gazítón
-2gazs
+gazmus1s
+2gazod
+2gazon
+ga2zü
1gá
+g2ába
2g1á2bé
-2gábr
+g2ábó
+2g1ábr
3g2áci
+gács1a2va
+gá2cse
+gá2cs1il
+gá2csü
+gáda2
+gá2d1al
gá2dá
-2g1á2f
-gá2gy
-g1á2hí
-3g2áli
-g1állh
-g1állí
-g1álls
-g1állu
-2g1állv
+gá2d1él
+gá2d1ia
+gá2dis
+gá2dő
+gá2d1ü
+gá2fo
+2g1ág.
+gá2gak
+gá2gat
+gá2gaz
+2g1ágg
+2g1á2gi
+2g1á2gú
+2g1á2gy
+gágy1asz
+2g1á2hí
+g2ája
+g2ájá
+gá2j1e2
+gá2jü
+gála1p
+2g1álc
+2g1áldo
+gá2l1es
+g2áli
+3gális
+2g1áll.
+2g1állí
+2g1állu
+2g1álmo
+3g2ály
+g2ám.
+gá2mal
+gá2m1e2
2g1á2mí
+gá2mü
gána2
-gá2nad
+gá2nac
gá2nal
gá2nap
-gá2nau
-gá2n1e2
-gá2nén
-gá2n1ér
-gá2nin
-gá2n1ó
-gá2nú
-gá2nye
-gá2ny1út.
-2g1á2p
-2g1á2rad
-g1á2rak
-gá2ral
-g1á2ram
-gá2r1as
+gá2n1at
+gá2nás
+gán2cse
+gán2csi
+gán2cs1ö2
+gán1d2
+gá2n1e
+2gángy.
+gá2nig
+gá2n1io
+gá2nis
+2g1á2niz
+gá2nol
+gá2n1ó2
+gán1sz2
+gánt2
+gán1tr
+gá2n1ú
+gá2nü
+gá2ny1a2n
+gá2nyar
+gá2ny1as
+gá2ny1e2
+gá2nyérd
+gá2nyérz
+gá2nyij
+gányká2
+gá2nyö
+gá2po
+gá2rad
+gá2r1ag
+gá2r1aj
+2g1á2ram
+gá2r1a2n
+gá2rar
+gá2ras
+gá2ra2t
+gár1ato
+gár1att
+gá2r1av
+2g1á2raz
+gá2rág
gá2r1ál
-gá2rár
-gá2r1e
-gá2riz
+gá2r1á2z
+gá2re2
+gár1em
+gár1es
+gár1et
+gár1éte
+gá2rif
+gá2r1i2p
+gá2r1isk
+gá2r1ism
+gá2r1iz
+gá2rí
+2g1árnyé
+gá2r1ol
+gá2rop
+gár1ost
+gá2r1osz
+gáró2
+gá2r1ór
gá2rö
-gá2ru
-gá2r1út
-gá2san
+gá2rő
+gár1s2
+gár1tr
+2gáru.
+2g1árud
+gá2rug
+2g1á2ruh
+2g1á2rulá
+2g1á2ruló
+2g1árur
+2gárus
+gár1uta
+gár1utu
+gá2rúr
+gá2rút
+gá2rü
+gá2rű
+g2ás.
+gá2s1a2d
+gá2sal
+2gásatá
+gá2s1á2g
+gá2s1árad
+gá2s1árn
+2g1á2sás
+gá2s1á2to
gá2s1e2
-gásé2
-gási2
-gá2sir
-gá2sze
-gá2szé
-gá2s3zö
-gá2ta2l
-gá2té
-2gátk
-3g2átló
-3g2áto
-gá2t1os
-2gátr
-3g2átu
-2g1á2tü
-2g1átv
-gá2z1ad
-gá2z1al
+gá2s1im
+gá2sis
+gá2sí
+gá2sor
+gá2só
+gás1ó2r
+gá2sö
+gá2ső
+gás3szé
+gás3szü
+gást2
+gás1tr
+gá2sut
+gá2s1ü2
+gá2sű
+gá2szal
+gá2szas
+gá2szatl
+gá2s3zav
+gá2sz1ál
+gá2sz1e2
+gá2szis
+gá2szit
+gá2szí
+2g1ászká
+gászkész1
+gá2sz1okta
+gá2sz1ól
+gá2s3zón
+gá2szöv
+gá2szü
+g2át.
+2gátad
+gá2taj
+2gá2tal
+gát1a2la
+gát1alj
+gátá2
+gá2tál
+gá2t1ár
+gá2tát
+2g1átbo
+gá2t1eg
+gá2t1e2l
+gá2t1e2m
+gá2ten
+gá2tél
+gáté2r
+gá2t1ér.
+gá2t1ére
+2gátfe
+2g1átg
+2g1átha
+gá2til
+gá2tis
+gá2tiz
+2g1á2tí
+g1átmé
+gá2t1olda
+gátó2
+gá2tór
+2g1á2t1ö
+gá2tő
+2g1áttű
+2gá2tü2
+g1átvi
+g2áva
+g1á2vó
+gá2z1a2d
+gáz1akn
+gáz1akt
+gá2z1a2l
+gá2zar
gá2z1a2t
+gá2z1av
+gá2z1ár.
+gá2z1árá
+gáz1áre
+gá2z1árh
+gá2z1árk
+gá2z1árn
+gá2z1á2ro
+gá2z1árr
+gá2z1árt
+gá2záru
+2g1á2zásos
gá2z1e2
-gázi2
-gá2z1ip
-gá2z1ó2r
-gázs2
-gáz3sé
-gá2zsu
-2g1á2zu
-g1b2
-g1d2r
+gázi2g
+gá2z1iga
+gá2zim
+gá2z1i2p
+gá2z1i2s
+gá2z1iz
+gá2zí
+gá2zö
+gá2ző
+gáz3sp
+gáz3sta
+gáz3ste
+gáz3sug
+gá2zsú
+gáz3sü
+gáz3sz
+gá2zü
+gbeá2
+gbé2lá
+gbé2rem
+gb2la
+gb2le
+gb2lo
+gb2lú
+gb2ra
+gb2ri
+gb2ro
+gb2ru
+gcsapá2
+gcsa2p1ág
+gda2u
+gd1ell
+gde1p2
+g2d1é2k
+g2d1ér.
+gd1ina.
+gd1ináb
+gd1ináh
+gd1inár
+gd1inát
+gd1ináv
+g1d2rá
+gd2re
+gd2ro
+gd1t2r
+g2d3zö
1ge
-gea2
+gea2c
+gea2g
+gea2l
geá2r
-2gebé
-ge2cet
-2g1e2dén
-2g1e2dz
+g2ebe
+g1e2cet
+3g2eci
+g1eddz
+2gedénn
+2gedény
+ge2dze
+ge2dzé
+ge2dzi
+ge2dző
2g1eff
-ge2gé
-gegész1
+2gege
+2g1e2gé
+3gegom
ge2gye
-ge2he
-g2ek.
+ge2gyé
+ge2gyo
+2g1e2gyü
+ge2hes
+ge2het
+2g1e2hü
+2g1ejt
+2g1e2ke.
+2g1e2kei
+2g1e2kek
+2g1e2kéé
+ge2kéj
+ge2kék
+2g1e2kés.
+ge1k2li
+2g1eks
3g2el.
-2g1e2l1a2
-ge2leg
-ge2lej
-gel1eng
+g1elad
+ge2lag
+3g2elap
+ge2las
+ge2lál
+ge2l1ár
+2g1elcs
+3geld.
+2g1eldo
+2g1eldö
+ge2lef
+ge2legi
+g1elegy
+3g2elek.
+2ge2lemé
+ge2lemi
+2ge2lemk
+2g1e2lemm
+2g1e2lemz
+gele2n
+3gelend
+ge2l1eng
+ge2l1eny
+gel1este
ge2lev
ge2lég
-3g2elés
-2g1elhá
-3g2elhe
+3g2elésb
+3g2elések
+3g2elésen
+3g2elésén
+3g2elésér
+3g2elésh
+3g2elési.
+3g2elésk
+3g2elésrő
+3g2eléss
+3g2eléstő
+3g2elésü
+2g1elész
+3gelész.
+3gelésző
+3gelészü
+3gelészv
+2g1elhel
+3g2elhes
+3g2elhet
3g2eli.
-3gelik
-gel1ism
-ge2l1í2
-3gelj.
-2g1eljá
-3g2elne
-3gelné
+3g2elik
+gel1int
+3g2elj.
+3g2elje
+3g2eljé
+3g2eljü
+2g1elkü
+2gellenő
+2g1elmé
+2g1elnev
+3g2elnén
3g2elni
-g1elny
-2g1e2l1o
+2g1e2los
ge2lö
3g2elő.
-ge2lőbb
+ge2lőbbr
+3g2előbe
3gelőbé
+3gelőbi
+3gelőbo
+3g2előbő
+3g2előc
+3g2előe
+3g2előé
+3g2előg
3g2előh
-3g2előj
+3gelőja
+3g2előjé
+3g2előjo
+3g2előjü
+3g2előjű
3g2elők.
+3g2előka
+3g2előkb
+ge2lőkel
+3g2előker
3g2előket
-3gelőkh
-3gelőkk
-3gelőkö
-3gelőkr
-ge2lől
-3g2előm
+3g2előkez
+3gelőké.
+3g2előkén
+2g1előkés
+3g2előkh
+3g2előki
+3g2előkk
+3gelőkl
+3g2előkn
+3g2előkö
+3gelőkő
+3g2előkr
+3gelőkt
+3gelőku
+3gelőkü
+2g1e2lől
+2g1előm
3g2előn.
-3gelőne
-ge2lőre
-3gelőrő
-ge2lős
-3gelőt.
-2g1előte
-3g2előv
-ge2lőz
-2g1elp
+3gelőna
+3g2előne
+3g2előné
+3g2előnk
+3gelőnö
+3gelőnyi
+3g2előo
+3gelőö
+3g2előő
+3g2előp
+g2előre.
+3g2előrés
+3gelőro
+3g2előrő
+3g2elős.
+3gelősá
+3gelőso
+3gelősö
+3g2elősza
+3gelősze
+3gelőszé
+3gelőszi
+3gelőszó
+ge2lőszö
+3g2előt.
+3g2előtá
+2g1előté
+3g2előtő
+3gelőtü
+3gelőü
+3g2elővá
+3g2előve
+3g2elővé
+3gelővis
+3gelőviz
+2g1e2lőz
g1első
+3g2elsz.
+2g1elszá
+2g1elszo
3g2elt.
-3geltek
+3gelte.
+3g2eltek
+3g2eltem
3geltes
-3geltet.
-3geltete
-3gelteté
-3gelteti
-3geltetn
+2g1eltett.
+2g1eltettn
+3geltéb
+3g2elték
+3geltél
2g1eltér
+3geltét
2g1elto
-ge2lu
+2g1eltű
ge2lül
-2g1elvá
-2g1elvez
+3g2elün
+2g1elv.
+2g1elvb
+2g1elven
+2g1elvét
+2g1elvh
+2g1elvn
2g1elvo
-2g1elz
-3g2em.
+2g1elvr
+2g1elvű
+2g1elvv
+ge2ly1e2g
+ge2lyid
+ge2man
2g1ember
-2g1e2mel
-ge2més
+2g1embl
+g1e2mel
+2gemelé
+2gemelk
+ge3mell
+2gemelő
+2g1e2més
2g1eml
-ge2na
-genci2as
+ge2moc
+2g1emp
+gena2
+ge2n1ad
+ge2nar
+ge2n1as
+ge2nau
+ge2n1ál
+ge2nár
+ge2nát
g2end
+ge2n1eg
3generá
-2g1enge
+ge2nere
+2generg
+ge2n1esz
+ge2n1e2vet
+ge2n1e2vez
+gené2k
+ge2n1éké
+ge2n1ékn
+ge2n1ékt
+geni2d1
+ge2n1in
ge2n1is
-2g1ennék
-2g1enni.
-2g1ennie
+gen1k2
+g1enni
+g1ennü
+gen3nya
+ge2nop
+ge2n1or
+ge2n1os
+gen2sért
+gens3s
+gent2
+gen1tr
+ge2n1ur
+g2enye
2g1enyh
-2g1enyv
+g1enyv
+2g1enz
+ge2ob
+ge2oc
ge2of
-ge2o1g2
-ge2oló
+ge2ok
ge2om
-ge2o1s
+ge2orgia
+ge2ot
+geó2r
+ge2ped
+ge2per
+ge2pés
+2gepi
+ge2pos
+ge2rab
+ge2r1ad
+ge2r1aj
ge2ral
ge2r1a2n
-ge2r1ág
-ge2r1á2r
-g1e2rej
-ge2r1ekké
-ge2riz
-ge2r1os
-ge2rö
-2g1e2rő
-ge2rű
-3g2es.
+ge2r1a2p
+ge2r1as
+ge2rau
+ge2ráb
+ge2r1á2g
+ger1áll
+gerá2r
+ge2r1ára
+ge2rát
+g1erde
+3g2ereb
+2geredm
+ge2reg
+g1erege
+ger1egy
+2g1e2rej
+ge2r1e2lők
+ge2r1eml
+ge2r1eny
+ge2r1er
+ge2resz
+ge2r1e2v
+ge2réj
+ge2r1ék
+ge2rél
+ger1éle
+ger1é2lé
+ge2r1ép
+ge2r1étt
+ge2r1i2na
+ge2r1ing
+ge2r1i2p
+ger2is
+ge2r1iz
+ge2rog
+ge2ror
+ger1osz
+ge2rot
+ge2ró
+ge2rök
+ge2r1ön
+ge2rő
+g1erő.
+g1erők
+g1erőv
+ger1őz
+geru2
+ge2rur
+ge2r1ü2g
+ger1üld
+ge2r1ü2lé
+g2es.
+ge2s1á
ge1sc
-ge2sem
-ge2sett
+gesd2
+g2eseb
+3g2esei
+ge2s1e2l
+ge2s1emb
+g2esen.
+ge2send
+2g1e2s1er
+2g1e2setb
+2g1e2setet
+2g1e2seté
+ge2setl
+2g1e2setr
+2g1e2sett
+2g1esél
2g1e2sés
-2g1e2sik
+g1e2sik
2geskü
+gesleg1
+g1esni
2g1e2ső
-ge2sú
-2gesze
-ge2szé
-ge2szik
-2g1eszl
+g2esr
+gess2
+3g2essé.
+3g2esség
+g2est.
+2g1este
+2g1esté
+2g1esti
+2g1estj
+g1esvé
+2g1e2szek
+ge2szes
+ge2szet
+g1eszl
2g1eszm
-2g1eszn
-2g1e2szü
-ge2szű
-g2et.
-ge2ter
-2g1e2tete
-2g1e2tetn
-2g1e2tette.
-ge2t1or
+ge2t1ak
+ge2tal
+ge2t1a2ny
+get1ap
+ge2t1as
+get1e2gy
+2g1e2tetőn
+ge2t1é2k
+geté2l
+get1éle
+ge2t1ér.
+ge2t1é2rü
+ge2t1é2ve.
+getó2
+ge2t1ór
+getőkész1
+get1őrt
+ge1t2ró
+get2t1ebbé
+ge2tut
+ge2t1ü2z
ge2ur
-2g1e2ve
-2g1e2vé
+geu2s
+ge2vic
+2gevo
+ge2vol
2g1e2vő
+ge1yé
+ge2zo
+gezőa2
+2g1ezr
1gé
gé2ber
2g1ébr
-gé2da
+géc3c
+gé2d1a2
+gé2d1á2
gé2d1e2l
+gé2d1e2r
gé2d1esz
-gé2dé
+gé2dik
+gé2din
+gé2dir
gé2dí
gé2d1o
+gé2dö
+gé2d1ő2
+gé2d1u2
+gé2d1ú2
+gédü2
+gé2d1ülé
+gé2dű
+gé2d3z
+gé2gi
+gé2gő
gé2gü
-gé2hes
-gé2led
-gé2let
+2g1é2he.
+2g1é2hek
+2g1é2hen
+2g1é2hes
+2g1é2het
+2g1éhh
+2g1éhs
+2g1éj.
+gé2jért
+2g1éjh
+2g1éjj
+2g1éjs
+gé2kei
+g1é2kel
+g1é2kes
+gékes1s
+g1é2kez
+2g1éks
+gé2lál
+gé2lel
+2géles
+2g1é2let
+2g1é2lez
gé2lén
-gé2li.
-2g1éls
+2g1élm
+gélvvá2
gé2lya
gé2lyá
gé2lyeg
+gé2lyo
+gé2lyú
+gé2m1a2
+gé2m1á
+g2émb
+gé2m1eg
+gé2mel
+gé2mer
+gé2mér
+gé2m1o
géna2
-gé2nat
+gé2nab
+gé2n1ad
+gé2nag
+gé2n1al
+gé2n1an
+gé2n1ar
+gé2n1at
géná2
gé2n1ár
gé2nát
-gé2n1el
-gé2nit
-gé2nyemb
-gé2nyeme
-gé2nyir
-gé2p1a
-gé2pá
-3g2épe
-gé2peg
-gé2pir
+3g2énd
+gé2neg
+2génekes
+2génekl
+gé2n1e2l
+gé2n1e2r
+gé2n1e2t
+gé2n1é2g
+gé2n1in
+gé2ní
+g2énn
+gé2nó
+gé2n1ö
+gént2
+gé2nú
+génü2
+g2ény
+gé2ny1e2g
+gé2nyid
+gé2nyis
+gé2nyír
+gé2nyo
+gé2nyö
+gé2nyú
+3gép.
+gé2p1a2
+gé2p1á2
+gé2p1e2g
+3gépel
+gé2p1ell
+gé2p1esé
+gé2p1esz
+gé2pik
gé2pí
-gé2po
-gé2pül
-gé2r1á
-2gérd
-g1é2red
-gé2reg
-2gérh
-g1é2rin
-2gérj
-2gérk
+2g1épít
+gé2p1o2
+gé2pó
+gé2pö
+gé2pő
+3g2épp
+géptá2v
+gé2p1u
+gé2pú
+gé2pülé
+géra2
+gé2rag
+gé2rak
+gé2ral
+gé2r1an
+gé2rap
+gé2rar
+gé2ras
+gé2rá
+2g1érc.
+2g1érd
+gé2r1el
+gér1eml
+2géret
+2géré.
+gé2rie
+2g1é2rin
+gé2ris
+gérká2
2gérl
-g1érle
-2gérs
+2gérm
+gé2ro
+gé2rö
+2gérő.
+2gérők
2gérte
2gérté
-g1érth
+2gérth
g1érti
g1értj
+g1értl
+g1értő.
+g1értőe
+g1értők
+g1értőv
g1érts
-g1értt
g1értv
-gé2ru
-gé2rú
-2gérv
+gé2r1u2
+gé2r1ú
+2g1érv.
+2gérvé
2g1érz
-gé2sá
-gé2sel
-gé2so
+3gérzá
+gé2sar
+gé2seg
+gé2s1e2l
+gé2s1é2g
+gé2sim
+gé2s1o
+gé2só
+gés3sza
gé2sza
-2gészs
-2g1é2te
+gés3zav
+gé2szá
+3gészítőü
+gé2sz1o
+gé2szó
+2g1é2tel
+gé2ter
+gé2tet
+2g1étk
+2g1é2to
+2g1étr
+2g1étt
2g1év.
-g1f2
-gfe2li
-g1g2ra
+2g1évb
+2g1é2ve.
+2g1é2ved
+2gévei
+2g1é2vek
+2g1é2ven
+2g1é2vet
+gé2véb
+2g1é2vén
+2g1é2vét
+2g1é2vév
+2g1évf
+2g1é2vi
+2g1évj
+2g1évk
+2g1évn
+2g1évr
+2g1évs
+2g1évt
+2g1évv
+gé2zan
+gé2zőr
+géz3s2
+gfala2d
+gfa2l1ada
+gfa2le
+gfi2úké
+gf2la
+gf2lo
+gf2ló
+gf2lu
+gfö2l1üle
+g1f2ra
+gf2rá
+g1f2re
+gf2rí
+g1f2ro
+g1f2rö
+gf2ru
+g2g1a2p
+gg1arc
+gga2s
+g2g1aszá
+g2g1aszó
+gge2lest
+ggés3s
+gg1i2ta
+g2g1iz
+gg1orv
+ggó2n
+g2g1óni
+ggős2
+g1g2raf
+g1g2ran
+g2gre
+gg2ro
+gg1sp
+g2g1ü2g
g2gy
+g3gyak
+g3gyalá
+g3gyap
+g3gyara
+ggy1aro
+g3gyat
g3gyár
-g3gyér
-g3gyi
+g3gyáv
+ggy1á2z
+ggy1e2lő
+g3gyeng
+g3gyep
+g3gyer
+g3gyérü
+g3gyil
+ggy1ol
+g3gyom
+g3gyor
g3gyó
g3gyö
g3győ
g3gyu
+g4gyút
ggy1ült
+g3gyür
g3gyű
-1g2hék
+gha2d1e2
+ghajói2ko
+g2ham.
+g2hamb
+g2hame
+g2hamh
+g2hamm
+g2hamn
+g2hamr
+g2hamt
+gha2sábr
+g2hia
1ghy
1gi
+gi2aa
+gi2aá
+gia1b2
+gi2aba
+gi2abá
+gi2abi
gi2abo
gi2ac
-gi2ad
-gi2af
-gi2ag
+gi2a1d2
+gi2ae
+gi2aé
+gia1f
+gi2afr
+gi2a1g2
gi2ah
-gi2ako
+gi2aim
+gi2aí
+gi2aj
+gi2akar
+gi2akas
+gi2ala
+gi2alá
+gi2alé
gi2am
-gi2ap
+gi2anó
+gi2any
+gi2ao
+gi2aó
+gi2aö
+gi2aő
+gi2a1p2
gi2ar
-gi2asze
+gia1sz2
+gi2asza
+gi2aszá
+gi2aszem
+gi2aszé
+gi2aszf
gi2aszi
gi2aszo
-gi2ata
+gi2aszó
+gi2at
+gia1t2r
+gi2au2
+gi2aú
+gi2aü
+gi2aű
gi2av
-3g2iá
-3g2idá
-2g1i2de
+gi2az
+2gibr
+2g1i2dea
+2g1i2deá
+2g1i2deg
+gi2dei
+2gidej
+2g1i2deo
2g1i2dé
-gi2dő
-gie2r
+gi2dió
+2g1i2do
+2g1i2dő
gi1fl
-2g1igaz
-gig1ár
+gig1ad
+gig1ara
+gig1ass
+gig1au
+2gigaz
+gig1ál
+2g1i2ge.
+gig1e2c
+gig1eg
+gig1eh
+gig1eng
+gig1enn
+gige2r
+gig1ere
gig1e2s
-gig1él
-gi2gén
+gig1et
+gig1e2v
+gi2gé
+gig1éh
+gig1é2l
+gig1ém
+gig1é2ne
+gig1é2r
+2g1igéz
gig3g
-gi2gi
-gi2g1o
-gi2gö
+gi2g1i2
+gi2gí
+gi2g1o2
+gi2g1ó2
+gi2g1ö
gi2g1u
-2g1i2gy
-2gihl
-gii2
-2g1ikr
-2g1i2má
-2g1i2mi
+gi2gú
+gi2g1ü
+gi2gű
+g1i2gy
+2g1i2ha
+2g1ihl
+2gijes
+gi2ker
+gi2kes
+3gile
+g1ill
+gi2ma.
+gi2man
+gi2máb
+2gimád
+gi2már
+2g1i2máz
+gi2me.
2g1imp
+gina1p2
+gi2nas
+gi2n1á2z
2g1ind
-2g1inf
-2g1inn
-2gino
-2gint.
+3giné
+2ginf
+2g1inkv
+g1inná
+g1inni
+g1inno
+g1innu
+2g1inp
+2gins
+2g1inta
+3gintc
2g1inte
2g1inté
-2g1inti
-2g1intő
+g1inth
+g1inti
+g1intj
+g1intő.
+g1ints
+g1intu
+g1intv
2g1inv
-3g2io
-gi2or
+2g1inz
+gi2one
+2g1ioné
+gi2ono
+gi2ot
+gi2óa
+gi2óá
+gi2óc
+gi2óe
+gi2óf
+gi2óg
+gi2óká
+gi2ókom
+gi2ól
+gi2ó1p
+gi2órá
+gi2ó1sp
+gi2óta
+gi2ótá
+gi2óú
+gi2óü
+gi2óz
+2g1i2pa
+3g2ips
+gip2sza
+gip2szá
+gip2szo
+gi2ram
+2g1i2rat
2g1i2rá
+gi2rig
2giro
gi2rod
-giro1s
+2g1i2rón
2g1irt
g1isc
+2g1i2si
2g1isk
+2g1isl
2g1ism
-2g1iss
+2g1isp
+2g1istál
2g1iste
+2g1i2szá
+2g1i2szo
+gi2szu
+gi2tas
+g2itá
+2gitác
3g2iti
-2gittam
-2gittasodh
-2gittasodi
-2gittasodn
-2gittasu
-gius3s
-gi2vó
-2gizg
+3gitte
+g1ittu
+2g1i2vad
+2g1i2vás
+g1i2vo
+2g1i2vó
+2g1i2zé.
+gi2zév
2g1i2zo
-2g1izz
1gí
-2g1íg
-2g1íj
-2g1í2n
+gí2gé
+gí2ja
+gí2já
+gí2m1a2
+gí2má
+gí2né
+gí2ny
gí2ra
gí2rá
+gí2re
+gí2ri
gí2ro
gí2ró
-2g1í2z
-g1k2
-gki2s1a
-g2lio
-glóa2
-gme2g1á
-1g2nac
+g1í2tész
+gí2vá
+gí2ve
+gí2vé
+gí2vo
+gí2vó
+gí2vü
+gí2ze
+gí2zü
+gí2zű
+gka2ró2r
+gké2p1e2l
+gkia3dóná
+gkiá2
+gkis1s
+gk2la
+gk2li
+gk2lí
+gk2lo
+gk2ló
+gk2lu
+gkö2zén
+gkö2z1ér
+gkővá2
+gk2ra
+gk2rá
+gk2re
+gk2ré
+gk2ri
+gk2rí
+gk2ro
+gk2ró
+gk2va
+gk2vó
+gla1p2l
+gla1s2t
+gla3t
+glá2sza
+gle2g1a2
+glege2l
+gle2g1elé
+gleí2
+gle2t1a2
+gle2tá
+gle2t1el
+gle2t1é2rőt
+gle2t1étn
+gle2tos
+gleü2
+glé2nyel
+g2lor
+1g2los
+glóó2
+glós2
+glőre2
+glő2reg
+glő2rel
+glő2ro
+gme2g1a2
+gme2g1e
+gme2g1é
+gmens1s
+gmen2sz
+gmus3s
+gna2d
+gn1ada
+g2n1a2j
+g2n1alk
+gna2pe
+g2n1a2r
1g2náb
+1g2náh
+1g2nái
+g2nán.
+g2náná
+g2nára
+gná2s3z
+g2nát.
+g2nátó
+1g2náv
+gn1br
+gne2i
g2n1e2l
+gne2m1e2l
+gne2sir
gnes3s
-gn1ing
-1gnore
+gne2szá
+gneto1
+gné2l
+g2n1éle
+gnév1a
+gné2v1á
+gni2g
+g2n1iga
+g2n1ing
+g2n1i2p
+g2n1i2r
+g2n1is
+gnit1a2
+gni2tel
+g2n1okt
+g2nol
+gn1olt
+1g2nora
+1g2nore
+1g2noré
+gn1ök
+gn1ös
+gn1pr
+gn1s2k
+gn1st
+gn1t2r
+g2núj
+gn1üg
+gn1üz
1go
-go2e
-go1g2r
-goi2
-goka2
-gok1ad
+go2áz
+go2be
+2g1obj
+2g1o2dú
+go2et
+g1o2ka.
+gok1a2d
+g1o2kai
+2g1o2k1a2l
2g1o2ká
+goki2
+gok1ir
+goklá2
+2g1okm
+g1o2kok
+2g1o2kos
+g1o2kot
+2g1o2koz
+2g1okta
2g1o2laj
-g1olc
+go2l1a2l
2g1olda
-go2lin
-go2lór
+2g1oldá
+2g1oldó
+gol2f1a
+gol2f1e
+gol2fin
+go2lim
+go2l1ó2rá
+2goltalo
+2g1oltár
+2g1oltás
+2g1oltó.
+2g1oltv
+2golvad
2golvas
-2g1o2lyo
go2m1as
+3g2omb
+gom2b1árn
+gom2b1árt
+gom2b1e2
+3g2ome
2g1oml
-g2on
-3goná
-gonc3s
+go2n1a2to
+go2n1áll
+gonc3c
+gon2d1á2
+gon2d1ér.
+gondi2
+gon2dik
+gon2doks
+gon2d1or
+gon2dó
+go2n1e2
+gon2g1a
+gon2gál
+g2ono
+go2nol
+2g1onto
+go2nü
go2nye
-go2pe
-g2oro
-gosz2kó
-go1t2h
+go2od
+go2pá
+2g1o2pe
+gor1ass
+gorasz2
+gora1t2
+gor1áll
+2g1orc
+go2r1el
+2gorie
+2g1orm
+go2roz
+go2rö
+2gorz
+go2se
+go2sö
+2gosto
+2g1ostr
+g1osty
+go2sü
+go2s3za
+go2s3zá
+go2szó
+go2ua
+go2ub
+go2ud
+go2ur
+go2ut
+go2vác
+2g1o2ve
+go2xi
+go1ya
+go1yá
1gó
-3gó.
-gó2ce
-gó2ch
-2górá
-gó2rák
-gó2rát
+góa2d
+góá2g
+góá2r
+gó1bl
+gó2c3h
+gó2c1ol
+gócsapá2
+gócsa2p1ág
+gó2cü
+2g1ó2dán
+gó2div
+gó1dru
+gó1f2r
+góí2v
+gó1kl
+gó1kré
+gó2lar
+góle2l
+gól1elő
+gó2l1é2h
+gó2lí
+gó2lü
+2g1ó2nu
+góó2r
+gó1p2l
+gó1p2r
+g1ó2rad
+g1ó2ras
+gó2ráka
+gó2rár
+3g2óro
+3g2ósa
+gó2s1aj
+gó1s2ká
+gó1s2p
+gó1s2rá
gós3s
-gó2tí
-g1óv.
-g1ó2vo
-g1ó2vó
+gó1s2ta
+gó1stá
+gó1str
+gó1sz2
+gó2s3zám
+gó2s3záras
+gó2s3zárá
+gós3zárú
+gó2tau
+gó2t1is
+gó1tré
+gó1tri
+3g2óval
+2góvod
+2g1ó2vó
+gó2vu
+3g2ózá
+3g2ózi
+3g2ózo
+3g2ózu
1gö
-2göb
-2g1ö2le
-g1ö2li
-g1öls
-3gömb
-g1öml
-3g2öng
-g1önt
-3görb
-gör2cso
+2g1öbl
+2g1ö2ko
+gö2ku
+2g1ö2lá
+2g1ölb
+g1ö2le
+2g1ölr
+3g2ömb
+göm2b1a
+gömbe2
+göm2bel
+göm2b1er
+2g1öml
+2g1ö2na
+g1ö2ná
+gö2ne
+gö2nö
+2gönt
+gö2ra
+3g2örb
+3g2örc
+gör2csa
+gör2csá
+gör2csel
+gör2cső
3gördí
3gördü
-g1ö2re
-3görg
-3görn
+2g1ö2re
+3g2örg
+3g2örn
+gö2rök
g1ö2rü
-gö2s1é2
+2görv
+gösé2
+gö2s1én
2g1össz
-2g1ö2v
+2g1ösz
+2g1ötl
+g1öv.
+g1övb
+g1ö2ve
+g1ö2vé
+g1övh
+g1övn
+g1ö2vö
+g1övr
+g1övt
+g1ö2vü
+g1ö2vű
+g1övv
1gő
-gő2g1ő
-2g1ő2ri
+gőa2n
+gőá2g
+gő1br
+gőe2l
+gőe2r
+gőé2b
+gő1fr
+gő1gl
+gő2g1ő2
+gői2ta
+gő1kl
+gő1kv
+gőnyá2
+gő1pl
+gő1pr
+2g1őr.
+g1őrb
+g1őrh
+g2őrit
+gő2riz
2g1őrj
+g1őrk
2g1őrl
-2g1ő2rö
+g1őrn
+gő2rök
+2g1őrr
+g1őrs
+g1őrt
2g1ő2rü
2g1őrz
-gő2s1ü2
-g1őszí
-g1őszü
-gőü2
+3gőrzősö
+gő2s1ep
+gő2sib
+gő1spi
+gő1sta
+gő2s1ü2v
+gő1tr
+gőu2t
+gőü2l
+gő2zát
+gő2zeg
gő2z1e2k
-gő2zel
-gő2zsu
-g1p2
-1g2rafá
-1grafik
-g2ra1p
-1g2ráf.
-grá2fe
-1gráfia
-1gráfiái
-1gráfián
-1gráfiát
-1gráfu
+gő2z1e2l
+gő2z1o
+gőző2s
+gő2zsö
+gő2z3su
+gő2z3sű
+gő2zú
+gpe2c3h
+gp1e2lu
+gpia2c1i2o
+gp2la
+gp2lá
+gp2le
+gp2lu
+gpon2ga
+gpo2re
+gp2ra
+gp2rá
+gp2re
+gp2ré
+gp2ri
+gp2rí
+gp2ro
+gp2ró
+gp2rű
+gp2sz
+1graff
+grafo1
+gra2mad
+gra2maj
+gra2mal
+gra2m1a2r
+gra2m1as
+gram1a2z
+gra2m1á2
+gra2m1e2
+gra2m1érté
+gra2mik
+gra2m1in
+gra2m1is
+1grammj
+gramu2
+gra2mut
+1g2ra1p
+1g2raví
+grá2cs1i
+gráfa2
+1g2rá2f1an
+1g2ráfb
+grá2f1e2
+1g2ráffe
+1gráfid
+1g2ráfl
+1g2ráft
+grá2lát
grá2l1e2
-grá2rip
-grás1s
+g2ráná
+grán1d
+g2ráni
+grá2rá
+grá2r1i2p
+grá2s3za
+gre2e
+gren2d1ő2
+g2ril
+gril2l1a
+gri2s1á
+gris3s
+grisü2
+gri2süt
g2ríz
-g2róf
-gs2
-g1sk
-g1sp2
-g1st2
-gszáz1
+gróa2
+gróá2
+gró2f1a
+gró2fú
+gró1p
+1g2rup
+gság1g
+gsé2gel
+gs2ho
+gs2ka
+gs2ká
+gs2ko
+gsk2r
+gs2la
+gs2lá
+gs2li
+gs2má
+gs2mi
+gs2mu
+gs2ná
+gso2k1o
+gsors3s
+gs2pa
+gs2pá
+gs2pe
+gs2pé
+gs2pi
+gs2po
+gs2pó
+gsp2r
+gs2rá
+g1s2ta
+gs2tá
+gs2te
+gs2té
+g1s2ti
+g1s2tí
+gsto2
+gst2r
+g1stra
+g1stru
+gs2tu
+g1s2tú
+gsugá2
+gs2vé
+gsza2ké
+gsza2k1ü
+gszála2d
+gszá2l1ada
+gszá2li
+gszá2r1a2da
+g1sz2c
+gszé2t
+g1sz2f
+g1sz2k
+g1sz2l
+gsz2m
+g1sz2p
gszt2
-g1t2
-gtá2v1i2
-gtíz1
+g1sz2tá
+gta2g1ar
+gtag1g
+gta2n1ó2
+gtára2d
+gtá2r1ada
+gtermo1
+gtermosz2
+gté2rá
+gti2m
+gt2ra
+gt2rá
+gt2re
+gt2ré
+gt2ri
+gt2ro
+gt2ró
+gt2rö
+gt2ru
+gt2rü
+gtű2z1ő2r
1gu
-3g2ub
-2gu2g
-3gugg
-gu2il
+gu2at
+gu2ay
+2g1u2bo
+gu2el
+gu2er2
+g1u2ga
+3g2ugg
+g1u2go
+2g1ugr
+gu2id
gu2in
-2g1uj
-gu2na
-gu2no
-3gurí
-3g2uru
-gu2sab
-gu2s1í2
+gu2ir
+2g1ujj
+gula2te
+gula2t1í
+gu2ná
+2g1u2ni
+gu2nó
+gu2nu
+3g2urí
+gus1abl
+gu2sad
+gu2s1a2n
+gu2sas
+gu2sat
+gu2s1av
+gu2sál
+gu2s1e2
+gu2s1érté
+gu2sil
+gu2sis
+gu2s1í
gu2sol
-gus3s
+gu2sor
+gu2s1ó2
+gu2sö
+gu2ső
+gus3s2
+gussz2
+gust2
+gu2sü
+gu2szá
+gus3zs
+gu2tac
gu2tak
+gu2tal
gu2tam
+gu2tan
+gu2tas
gu2tat
-gu2to
+gu2taz
+2g1utc
2g1u2tó
+gutó2d1o2ku
+2g1u2tu
+gu1ya
1gú
-g1úg
-2g1ú2j
-gú2nyi
-gú2te
-gú2té
-g1úth
-g1ú2ti
-g1útj
-g1útn
-g1ú2to
-g1útr
-g1útt
+gú2ja
+gú2jí
+gú2ju
+gú2ny1e
+gú2ny1í2
+2g1úr.
+gú2ré
+gú2ri
+2g1úrn
+gú2ro
+2g1ú2sz
+2gú2t1a2
+2g1ú2t1á2
+2g1útb
+2g1útc
+2g1útd
+2g1ú2t1e2
+2g1ú2té
+2g1útf
+2g1útg
+2g1úth
+2g1ú2ti.
+2g1ú2tia
+2g1ú2tig
+2g1ú2tih
+2gútij
+2gútiko
+2g1ú2tina
+2gútiná
+2gútir
+gú2tis
+2g1ú2tit
+2g1ú2tiv
+2gútiz
+2g1útj
+2g1útk
+2g1útl
+2g1útm
+2g1útn
+2g1ú2to
+2g1útp
+2g1útr
+2g1úts
+2gútt
+2g1útv
+2g1útz
+gú2zi
1gü
-2g1üd
-2güg
+gü2cs
+gü2dé
+gü2dí
+gü2dü
+gü2ge
+gügy1ér.
+2g1ü2gyi
+2g1ügyl
+2g1ügyv
2g1üld
+gü2len
+gü2lep
gü2lik
+gü2löm
2g1ünn
-2gür
-gü2re
-gü2rü
-2g1üs
-2g1ü2t
-2g1ü2v
-2güz
+3g2ürc
+2g1ü2re
+3g2üri
+2g1ü2rí
+2g1ü2rü
+gü2te
+gü2té
+gü2ti
+gü2tö
+gü2tő
+gü2tü
+gü2ve
+gü2vö
gü2ze
+gü2zé
1gű
2g1űr.
-2g1ű2z
-gví2z1
-g1w
+2g1űrb
+gűre2
+g1űrh
+gű2ri
+2g1űrj
+2g1űrl
+2g1űrm
+2g1űrn
+2g1ű2rö
+2g1űrt
+gű2ru
+gű2rü
+gű2ze
+gű2zé
+gű2zi
+gű2zö
+gű2ző
+gva2s1u2
+gvá2gy1a2da
+gvá2nyan
+gvás1s
+gverés3s
+gvezé2rel
+gvé2nyel
+gvi2na
+gvó1s2
g2y
1gya
-gy1acé
-gy1a2dá
-gy1adm
-2gy1a2j
-gya2lap
+gy1abl
+2gy1a2cé
+2gyadag
+gya2dal
+2gyadatb
+gy1a2dót
+2gyag.
+2gyagb
+gya2ge
+gya2gép
+2gyagg
+2gyagh
+gya2gis
+2gyagk
+2gyagn
+gya2g1ol
+2gyagt
+2gyagya
+gy1a2gyu
+2gy1aja
+2gy1akc
+2gyaknák
+2gyakt.
+2gyaktu
+gya2laj
+gyal1akt
+gya2lapo
+gya2lapp
+gy1alat
+2gyaláí
+gya2lel
+gya2lik
gyan1ab
-gy1ann
-gy1a2nya
-2gy1apa
-2gyapi
-2gyapó
-2gyapu
-gya2r1ó2
+gya2n1e
+2gy1a2nya
+gy1a2nyá
+gya2pak
+gy1a2páh
+2gyapái
+2gyapák
+2gyapám
+2gy1a2pán
+gy1a2pás
+2gyapátó
+2gyapjá
+gya2pón
+gya2pór
+2gyapp
+gy1aps
+gy1aran
+2gyaraw
+gyard2
+2gyardom
+gya2rel
+gy1argó
+3gyari
+gya2r1ón
+gya2r1ó2r
+gya2róv
+2gyarú
+2gyasak
+2gyasat
+2gyasra
2gyaty
-2gyazo
+2gyazá
1gyá
2gyábr
-2gyág
+2gy1ág
+gy1álc
gy1áll
gy1álm
-gy1á2lo
-gyá2ma
-gyá2ria
-2gyáru
+3gyám
+2gy1áp
+2gyáre
+2gyárf
+2gy1á2rok
+2gyárus
+2gy1árú
+gyá2szó
2gyáta
+2gyátk
gy1átl
+2gyátv
+gy1bl
+gy1br
+gy1dr
1gye
-3gyec
-2gyedün
-2gyela
-2gyelemz
-2gyelőg
-2gyeltá
-gy1emel
+gye2d1ős
+2gy1e2dz
+gy1e2ge
+gy1e2gé
+gy1e2gye
+2gyeke.
+2gy1e2kés
+2gyeleg
+gye2legy
+2gyelemű
+2gyelnö
+2gyeltér
+2gy1elvá
+gy1elvű
+2gyembl
+2gy1e2mel
gy1eml
-2gyerd
-gye2rős
+2gyenget
+2gy1e2ny
+2gyenz
+gye2pal
+2gy1erd
+gy1e2red
+2gyerej
+gy1e2res
+gye2rén
+2gy1ern
+2gyero
+2gy1e2rő
+2gy1ers
gye2seg
-2gy1ev
-2gyezres
+2gyesél
+2gyesg
+gy1e2ső
+2gy1este
+2gyestés
+2gy1esti
+2gyestű
+gye2szü
+2gyetem
+2gyetet
+2gyezm
+2gyezrede
+2gyezrel
+2gyezs
1gyé
-gy1éle
-2gyép
-gy1érd
-gy1érte
-gy1érté
-gy1érz
+2gyébr
+2gy1ég
+2gyéhes
+2gyéhs
+2gyéji
+gy1é2ke.
+gy1é2kes
+2gy1é2le
+2gy1élt
+gy1élv
+3gyém
+2gyéneke
+2gyéni
+2gy1ép
+2gyér.
+2gy1érd
+2gy1érem
+2gyérez
+gyé2rét
+gy1érg
+2gy1érh
+2gy1é2ri
+3gyérí
+gy1érke
+2gy1érm
+2gyérn
+2gyérr
+2gy1érte
+2gy1érté
+gy1értő
+2gy1érv
+2gy1érz
+2gy1été
+2gyétk
+2gyév.
+2gyévad
+2gyévb
+2gyéve.
+2gyévei
+2gyévek
+2gyéven
+2gyéves
+2gyévet
+2gyévh
+2gyévi
+2gyévn
+2gyévr
+2gyévt
+2gyévü
+2gyévv
+gy1fl
+gy1f2r
+gy1gl
+gy1gr
1gyi
+2gy1ide
+2gyidé
2gyidő
-gy1iga
+2gyiga
+2gyigá
+2gy1ige
2gy1i2gé
+2gyigm
+gy1iha
+2gyiker
+2gy1ill
+2gyimá
2gyind
+2gyinf
2gy1ing
-gy1i2ra
-gy1irá
+2gy1ipa
+2gy1i2rat
+2gyirá
2gy1iro
-2gyist
-gy1ita
+2gyirt
+2gyish
+gy1isk
+2gyism
+2gy1isn
+2gy1ita
2gyivó
+2gyizg
+2gy1i2zo
1gyí
+2gy1íg
2gy1í2r
-2gyív
-gy1k2
+2gy1ív
+gy1íz
+gy1kl
+gy1k2r
+gy1kv
+gymás1s
1gyo
+2gyokos
2gy1old
-2gyolvad
2gyolvas
+gyo2m1as
+gyo2mi
2gyope
+2gy1orc
+gy1orm
+2gyorsó
+2gy1orv
+gy1ou
1gyó
-gy1órá
-gy1óri
+2gyódár
+2gyódásak
+gy1ó2rá
+2gyóri
1gyö
-2gyönt
+2gy1öb
+gy1ödé
+2gy1ökl
+2gyötöd.
+2gyötödd
+2gyötöde
+2gyötödé
+2gyötödne
+2gyötödöt
+2gyötödr
+2gyötödü
+2gyött
+2gyötv
+2gyöv
+2gyözön
1győ
-2győr
+gy1őre
+gy1őrü
+2gy1ő2s
3győz
+gypárba2
+gypen1
+gy1pl
gy1pr
-gys2
-gy1st
+gy1ps
+gyrövid1
+gy1sc
+gy1sk
+gy1sl
+gy1sm
+gy1sn
+gy1sp
+gy1sr
+gy1s2t
+gy2sur
+gy1t2r
1gyu
2gy1ud
-gy1ug
-2gyuj
-2gyura
+2gy1ug
+2gy1uj
+2gyund
+2gyuni
+2gy1u2ra
2gyurá
+2gyuru
1gyú
-2gyút
+2gyúd
+2gyúé
+2gyúi
+2gyújí
+2gyújr
+2gyújs
+2gyúm
+2gyúrb
+2gyúré
+2gyúri
+2gyúrk
+2gyúrr
+gy1úti
+2gyúü
1gyü
+2gy1üd
+2gyüg
+3gyüle
+3gyüm
+2gyünn
+2gyüre
+2gyürü
+2gyüs
+gy1üst
2gyüt
+2gyüv
+gy1üve
2gy1üz
1gyű
-3gyűr
-gza2te
+3gyűl
+2gyűré.
+2gy1ű2z
+gy1zr
+gza2táp
+gza2t1e
+gza2tö
+gza2t1ű2
+gzá2r1ó2r
+gzá2se
+gzás3s
+gze2t1a2
+gze2t1á2
+gze2t1el
+gze2tin
+gze2t1o
+gze2t1ő2
+gzőa2
+2h.
1ha
-ha2b1ol
+haa2d
+3hab.
+ha2bak
+ha2b1a2l
+ha2b1a2n
+ha2b1ág
+ha2b1árb
+ha2bed
+ha2b1ér.
+ha2bid
+hab1ill
+ha2b1im
+ha2b1i2na.
+ha2b1int
+3habo
+hab1old
+hab1o2ra
+hab1orr
+ha2b1ost
+hab1sz
+habu2r
+ha2bü
+ha2d1ag
+had1alk
+ha2d1ap
+hada2s
+ha2d1asz
+ha2d1á2c
ha2d1ál
-ha2d1os
-ha2dur
-ha2d1ú
-ha2is
-ha2je
-2h1akl
-ha2kol
+hadás1s
+ha2d1ásv
+ha2d1á2szo
+ha2deg
+ha2d1el
+ha2dem
+ha2dél
+hadia2
+hadié2
+hadi2n
+ha2d1ina
+ha2dor
+ha2dos
+ha2d1u2r
+ha2d1úr.
+ha2d1ú2ré
+ha2d1úrh
+ha2d1ú2ri
+ha2d1úrk
+ha2d1úrn
+ha2d1úrr
+ha2d1úrt
+ha2dús
+ha2dü
+ha2dza
+ha2d3zá
+hae2r
+ha1fl
+ha1f2r
+2hagore
+ha2if
+ha2j1á2s
+ha2j1á2to
+ha2jáz
+ha2j1in
+haj1k2
+haj1oml
+ha2jö
+ha2jő
+haj1s
+haj1t2r
+ha2jü
+ha2k1ál
+ha1k2li
ha1k2r
-hal1áp
+h1akt
+ha1k2v
+ha2l1ach
+ha2l1a2g
+ha2l1aj
+ha2l1a2l
+hala2n
+hal1any
+ha2l1a2r
+hala2sz
+ha2l1asza
+ha2l1aszá
+ha2l1aszó
+ha2l1atk
+ha2l1a2tom
+ha2l1att
+3halá
+hal1á2cs
+ha2l1á2g
+halá2l1e2
+hal1á2rak
+hal1á2rá
+ha2l1árb
+ha2l1á2ro
+ha2l1árr
+hal1árve
+hal1áte
ha2leb
-ha2l1e2l
-ha2len
-ha2l1es
-hal1evő
-ha2lét
+ha2lec
+hal1e2gy
+hale2l
+hal1ele
+hal1elő
+ha2lem
+ha2l1en
+hal1epe
+ha2l1ese
+ha2l1e2ső
+hal1ete
+hal1e2to
+hal1evo
+hal1e2vő
+ha2lez
+ha2l1é2l
+ha2l1ér.
+ha2l1éte
+ha2l1étk
+ha2l1étt
+ha2lid
+ha2l1ik
+ha2l1i2m
+ha2l1ing
+ha2l1inv
+ha2l1i2ono
+ha2l1i2ont
+ha2lip
+hali2s
+hal1isz
ha2l1iv
+ha2l1i2z
ha2lí
-ha2lol
-ha2l1ő
-ham1b
+hal2k1a2pu
+halke2l1
+hal2k1ele
+hal2l1aszt
+hallás1s
+hal2l1á2t
+hal2léj
+hal3ly
+3halm
+halma2z1ó2
+ha2l1ol
+ha2l1ó2ri
+ha2l1ö
+ha2l1ő2
+hal1p2
+ha2l1ug
+ha2l1u2s
+ha2l1u2t
+ha2lü
+ha2lű
+ha2l3ya
+ha2m1ál
+ha2m1árb
+hamb2
+hame2l
+ham1ele
+ham1esz
+ha2mez
+ham1ism
+hamkész1
ha2m1osz
+3hamu
+ha2mü
+hanás1s
han2ch
-han2c3s
-han2g1e2
+2hanész
+3hang
+han2gal
+hange2
+han2gen
+han2g1es
+han2gél
+hang3g
+han2g1ó2
+han2gö
han2gut
-2hani
-ha2nyá
-haó2
+han2t1ó2
+ha2nyél
+haó2r
ha1p2r
-ha2rál
-harán2
-harc1c
-har2ce
+hara2g1ó2
+harang1g
+ha2r1ál
+har2c1al
+har2can
+harc3c
+har2c1e2
har2c3h
-har2cso
-harc3sz
-ha2r1ist
-hart2
-hasi2
-ha2sim
-ha2sol
+ha2rel
+ha2ret
+3harmó
+ha2r1ol
+ha2r1osz
+ha2r1ór
+ha2rű
+3hasa
+haság1g
+ha2s1iz
+ha2s1ol
+has1ors
+ha1s2pe
+ha1s2po
+ha3s2út
+ha2sür
ha2s1ű2
-ha2t1em
-ha2tev
+ha1szp
+ha2t1ab
+hat1agy
+ha2t1aj
+3hatá
+határa2d
+határ1ada
+ha2t1e2v
+ha2t1én
ha2t1é2v
-ha2t1old
-ha2t1ök
+ha2t1í2v
+hat1olda
+ha2t1osz
+ha2t1órá
+ha2t1ö2v
+ha1t2rá
+hatt2
+hat1tr
+ha2tül
+ha2ue
+hau2n
+hau2s
+ha2ut
+haü2z
1há
-2h1ács.
-2h1á2csi
-2háji
-2hájn
-2hájo
-2hájt
-há2lyú
-há2m1i
-há2nyin
-há2ral
-háro2ma
-há2sá
+3hábo
+há2gy
+há2jús
+háma2
+há2m1al
+há2m1á
+há2m1e2
+hámi2
+há2m1is
+há2m1ol
+há2mö
+hán2cs1e
+hán2csi
+há2ny1a2l
+hánya2n
+há2ny1ar
+hányás1s
+há2ny1e2
+há2nyö
+hára2
+há2r1ad
+há2r1al
+há2r1au
+hári2
+há2r1iv
+3hárí
+hár1k2
+hármas1s
+háro2m1a
+háro2mo
+hár2s1al
+hár2se
+3hárt
+há2rü
+há1ry
+há2sí
+hász1a2tom
+há2sz1e
+há2sziv
+2h1ászka.
+há2sző
+hát1a2dó
+há2t1a2la
+há2t1a2n
+há2tar
+há2táp
há2t1e2
+háté2
+há2tél
+há2t1ér.
+há2t1ére
+há2t1érn
+há2t1i2s
+há2tí
há2t1ol
-há2t1or
-hátu2s
-hát1usz
-há2zab
+há2t1o2r
+hátó2
+há2t1ós
+há2tö
+há2tő
+hát1u2sz
+há2t1ü
+há2tű
+hátvé2d1el
há2z1a2dó
+há2zaj
+há2z1ala
+há2z1asz
+há2z1av
+há2z1á2p
+há2z1árn
+há2z1á2ru
há2z1e2
+há2z1isk
+há2z1ism
+há2z1ist
+há2z1í
+ház1okt
+ház1old
+há2zos
+ház1otth
+há2zö
+há2ző
+házs2
+há2z3sa
+ház3se
+há2z3sé
+há2z3si
+ház3sp
+ház3st
+ház3sü
ház3sz
-1hä
+há2z1ü
+há1zy
+hb2le
1he
he2ad
-3heg
+he2av
+hec2c1emb
+hecc3s
+2hecu
+he2dén
+he2e2s
+he2f1i
+he2f1u2
+he2g1a2
+hegész1
he2gy1a
-he2gyo
+he2gyá
+he2gyeg
+hegyes1s
+he2gy1o
he2gyó
-2he2id
-he2io
-2hela
-2henó
-he2od
+he2győ
+he2gyú
+2heidp
+2h1e2kék
+3hekt
+he2lég
+helés1s
+2helf
+hel2fr
+2hellá
+2hellen
+he2lyeg
+he2lyeml
+he2lyesz
+he2ly1é2j
+2hema
+2h1embl
+2h1eml
+henés1s
+3heng
+he2ny1e2ge.
+he2nyo
he2ol
-he2rát
-2heu
-he2za
-he2zá
+he2rab
+he2r1a2d
+he2r1aj
+he2r1a2r
+he2rau
+her1áll
+her1át1a2
+her1áté
+her1eng
+here1p
+her1ese
+herevíz1
+her1int
+he2rö
+her1s2
+he2rut
+he2rű
+he2s1a
+he2s1á
+h1e2sés
+hes2t1o
+3hety
+2heusz
+2hevé
+he2vés
+3heví
+he2z1á
+2hezh
+2hezi
2hezn
+2hező
+2hezz
1hé
-hé2m1
+hé2hé
+3héi.
+3héit
+héje2
+hé2j1eg
+hé2j1el
+hé2jö
+3hékn
+hé2nal
hé2nan
+hé2nar
+hé2nát
+héne2
+hé2n1el
+hé2nem
+hé2n1et
+hén1év.
+hé2nid
+hé2nil
hé2n1is
-hé1p2
-hé2rab
+hén3n
+hé2nö
+hént2
+hé2nu
+hé2nü
+hé1ph
+hé2pü
+héra2
hé2rar
-hé2r1eg
-hé2r1ep
+hé2r1as
+hé2rat
+hé2rin
+2h1érz
+hé2szá
+hé2szeg
+hé2szesz
+hé2sz1ö
+héta2
+hé2t1ab
+hé2t1aj
hé2tal
-hé2tá
-héte2
+hé2tar
+hé2tál
+hé2t1e2l
+hé2t1e2m
hé2t1es
-hé2t1ez
-hé2t1é2
-hé2tó
-hé2z1á
-hé2z1e2
-hé2z1o2
-hé2zs
+hé2t1ezres
+hé2t1é2v
+hé2tí
+hé2tol
+hé2tor
+hé2t1os
+hétó2
+hé2t1ór
+hé2t1ö
+hé2tu
+hé2t1ü2
+hé2v1á
+hé2ve.
+hé2vég
+hé2v1érz
+héze2
+hé2z1ek
+hé2zio
+hé2zip
+hézo2
+hé2z3s
+hf2ló
1hi
-2hia
-hi2af
+2hia.
+hi2aa
+hi2aá
+hi2abelie
+hi2ac
+hi2ad
+hi2ae
+hi2aé
+hi2ag
+hi2ah
+hi2aj
+hi2al
hi2am
-hi2as
+hi2ant
+hi2ap
+hi2ar
+hi2at
+3hida
+hidro1s
+2hiév
+higa2nye
+3higi
2hila
-2hio
-hi2re
-hi1sc
-hi2se
-hi2t1á
-hi2t1elv
+2him.
+2hime
+2himé
+2h1i2nán
+3hinás
+2hing
+h1ing.
+2hink
+h1insp
+hi2om
+hi2pa
+2h1ips
+2hise
+hi2se.
+2hisn
+2hiso
+hi2ta
+hit1ak
+hita2l
+hit1a2n
+hi2t1á2
+hi2t1e2gy
+3hitel
+hite2l1e2l
+hi2t1elesé
+hi2t1elő
+hi2t1elve.
+hi2t1eng
+hi2t1er
+hi2t1esz
+3hitet
+hi2tél
+hi2t1ér.
+hi2t1érte
+hi2t1érv
+hi2t1é2te
+hi2t1é2ve.
+hi2t1im
+hi2t1int
+hitkész1
hi2t1o
+hitó2
+hi2t1ón
+hi2t1ór
+hitö2
+hi2t1ör
+hi2t1őr
+hi2t1u2
hi2tú
+hi2tül
+hi2zo
1hí
-3híd
+hí2da
+hí2dá
hí2de
hí2dí
-hí2ga
-hí2mi
+hí2dö
+hí2dő
+hí2dú
+hí2dü
+hí2dz
+hí2g1e
+hí2jé
+hí2m1a2
+hí2má
+hí2m1el
+hí2m1emb
+hí2mer
+hí2mo
+hí2mö
+hí2mu
hí2r1a2
+hí2r1á2
+hí2r1ing
+hí2rí
hí2r1o
-hí2rö
-h1k2
-h2m1é
-h2mi
-hno1g
+hí2r1ó2
+hí2rő
+hír1s
+hí2r1u
+hí2rú
+hkas3s
+hká2r
+hk2ri
+hle2g1e2lé
+hle2t1el
+hle2tö
1ho
-2hob
-ho2gy1i
+ho2dú
+2ho2eá
+ho2ef
+ho2ii
+ho2it
+2hokl
hola2
-ho2lad
-ho2l1át
-hol2d1al
-ho2le
-ho2l1iv
-ho2n1al
-ho2nav
+ho2l1ad
+ho2l1al
+ho2lam
+ho2l1at
+ho2l1au
+ho2l1ál
+ho2l1á2r
+hol2dá
+hol2dem
+hol2d1ó2r
+ho2l1e2
+ho2lig
+ho2l1in
+ho2lip
+ho2l1i2v
+hol1k2
+hol2mes
+hol2nik
+ho2lor
+ho2l1osz
+ho2lot
+ho2l1ó2r
+ho2lö
+holta2n
+holt1any
+holte2
+hol2t1el
+ho2lü
+ho2ly1al
+3homb
+3homo
+homo1s
+ho2n1a2g
+ho2n1a2l
+ho2n1a2n
+ho2n1a2p
+ho2n1au
+ho2n1a2v
ho2n1ál
-ho2nis
+ho2n1át1a2
+ho2n1á2to
+hone2
+ho2neg
+ho2n1el
+ho2n1ik
+ho2n1i2m
+ho2ní
+ho2n1orj
+ho2n1o2ro
+ho2n1orr
+ho2n1ó2
+ho2nö
+ho2nő
ho2nü
-ho2o
-2hory
-2hosb
-2hosi
+hor2d1e2
+ho2re
+2ho1ry
+hossz1e2
+hosszé2
+hossz1ék
+hossz1ü2
2hosz
-ho1szk
-2how
+ho1th
+ho2us
+ho2we
+ho2zál
+ho2z1e
+hozi2
+ho2zü
1hó
-hóa2
-hó2c3sa
-hó2dz
-hó1kr
-2hónr
+hóa2k
+hóá2g
+hó1bl
+hó2cal
+hó2cat
+hóc3c
+hó2cel
+hó2c1é2g
+hó2c3h
+hó2cim
+hó2có
+hó2c1ö
+hó2csü
+hó2cz
+hó2d1a2ra.
+hó2d1a2rá
+hó2d1á2
+hó2dem
+hó2d1é
+hó2d1ó2
+hó2dö
+hó2dü
+hó2d3z
+hó2l1ej
+hó2l1e2ped
+hó2l1e2vet
+hó2nal
+hón1apa
+2hórá
+hó2rár
+hó1sh
+hóví2
+hóza2t1e
1hö
hökö1
+höl2gya
+höl2gy1á
+höl2gyel
1hő
-hőe2
-hő2s1er
+hőa2n
+hő1br
+hőe2l
+hőe2m
+hőe2r
+hőé2n
+hő1fl
+hő1gl
+hő1gr
+hő1kv
+hő1pr
+hősa2
+hő2s1al
+hő2sas
+hő2s1av
+hő2s1el
+hő2sep
+hő2ses
+hő2sim
+hő2sis
+hő1s2pi
hős3s
-h1p2
-h2ri
-h2rü
-hs2
-h1sc
+hő1s2tab
+hős1tr
+hő2sut
+hő2s1ú
+hő2s1ült
+hő2s1ü2v
+hősű2
+hő2s1űr
+hő1tr
+hőü2l
+hp2la
+hp2ra
+hp2ré
+hp2ri
+hp2ro
+hp2ró
+hru1s2
+hs2ch
+hsé2gel
+hs2ka
+hs2pi
+hs2po
+hs1s2t
+hsza2ké
+hszá2j1a2da
hsz2l
-h1t2r
+ht1cl
+ht1kl
+h2t1ol
+ht2rá
+h1tref
+h2t1u2t
1hu
-hu2i
-hu2me
+hu1hy
+2hurá
+hur2t1e
+hur2tit
+2hus.
2husi
huszon1
-3hú
+1hú
+hú2gy1a2
+hú2gye
+hú2gyi
+hú2gyú
+hú2r1a2
+hú2r1á
hú2re
-hú2r1é
-hú2se
+húrt2
+húr1tr
+hú2s1ak
+hú2sal
+hú2san
+hú2sap
+hú2sar
+hú2s1á2g
+hú2s1ál
+hú2s1e2
+hú2sim
+hú2sí
+hú2sor
+hú2sö
+hú2ső
+hús3szak
+hús3szá
hús3szé
-hú2sz1e
-hú2szé
+hú2sü
+hú2s3zab
+hú2sz1ál
+hú2sz1e2
+hú2sz1í2
+hú2szol
+hú2szos
hú2sz1ó2
-hú2szö
+hú2sz1ü2
1hü
+hü2gy
+2h1ünn
+hü2re
+hü2rü
+hü2tő
+h1ü2vö
1hű
-hyá1
+hű2ré
+hű2ri
+hű2rö
+hy1ér
+hy1év
+hy1ig
2i.
i1a
-ia2cel
-ia2cér
+iaa2d
+iaát1
+iaáta2
+i2abaj
+i2aber
+i2abes
+i2abí
+i2abon
+i2abor
+i2abö
+i2abő
+i2abu
+i2abú
+i2abü
+i2abű
+ia2c1al
+iac3c
+i2acet
+iac1élé
+ia2c1ér.
ia2c3h
-ia2dós
-iae2
-i2afa
-ia2gi
-i2ahá
-2iai
+ia2cid
+iac1i2ko
+ia2c1im
+ia2c1int
+i2ací
+ia2c1or
+ia2có
+ia2cö
+ia2cő
+ia2c3sé
+iac3sp
+iac3st
+iac3sz
+ia2cü
+ia2cz
+iadás1s
+i2ade
+i2adí
+ia2dot
+ia2dóe
+iadó1st
+i2adö
+i2adő
+i2adú
+iae2l
+iae2r
+iae2t
+iaé2r
+i2afá
+i2afe
+i2afi
+i2a1fl
+i2afó
+i2afö
+i2afő
+i2afri
+ia1fro
+i2afu
+i2afú
+i2afü
+i2afű
+i2agá
+i2age
+i2agé
+i2agi
+i2agö
+i2agő
+i2agu
+ia2gyu
+i2aig
+i2aip
+i2ai2z
+ia2ján
+i2aje
+i2ajo
ia2kad
-ia2kar
-ia2kas
-ia2kol
+i2aká
+i2ake
+i2akí
+i2a1k2l
+i2akód
+i2akór
+i2akö
+i2akő
+ia1k2re
ia1k2ré
-ia1kri
-ia1kv
-i2ale
-i2alé
-ia2lu
+ia1k2ri
+ia1krí
+i2aku
+i2akú
+i2akü
+i2a1kv
+ia3lan
+ia2lat
+i2aleg
+i2alib
+i2alí
+ia2lom
+i2alö
+ia2lud
+ia2lus
+i2aly
+i2amá
i2ame
-ia2mur
-ia2nya
-iaó2
-ia1p2
-i2asé
-ia1s2p
-i2aszá
-ia2szor
-ia2szö
+i2amó
+ia2m1ur
+i2amú
+i2amű
+ia2nek
+i2ané
+i2anö
+i2anő
+iao2k
+iaó2r
+ia2pát
+i2ape
+i2apé
+ia1p2l
+i2apo
+ia1p2s
+iarádi2
+i2are
+ia2rén
+i2aro
+i2aró
+i2arö
+i2aru
+i2arú
+i2ase
+i2a1sh
+i2asi
+ia1s2ká
+i2a1s2l
+i2a1s2m
+i2asó
+i2asö
+i2a1s2p
+iast2
+ia1s2ta
+ia1s2tá
+ia1sti
+ia1sto
+ia1str
+i2asú
+i2asü
+i2asű
+ia2sz1an
+i3aszerű
+ia2szes
+ia2szép
+iasz2k1e2r
+ia2szop
+i2aszú
+i2ate
+i2ató
+i2atö
+i2atő
+ia1tré
ia2ty
-iau2
+i2aud
+i2au2r
+iau2s
+iaü2z
+ia2vat
+i2avé
+i2avi
+i2aví
+i2avo
+i2azá
+i2aze
+ia2zo
+i2azs
+i2azú
i1á
-2iáb
-iá2g
-2iák
+iá2cs
+iá2ga
+iá2gá
+iá2ge
+iá2gi
+iá2go
+iá2gy
+iá2hí
+iáka2
iá2kab
-iá2kév
+iá2kak
+iá2k1al
+iá2k1an
+iá2k1ap
+iá2k1ar
+iá2k1as
+iá2k1á2
+iá2keb
+iá2k1el
+iá2kem
+iá2k1en
+iá2k1e2s
+iá2k1ér.
+iá2k1érd
+iá2kés
+iáki2
+iá2kin
+iá2kir
+iá2kit
+iá2kí
+iá2kop
+iá2k1or
+iá2k1osz
+iá2k1ó2
+iá2k1ö
+iá2kő
+iá2kur
+iá2k1ut
+iá2k1ú2
+iá2k1ü
+iá2kű
iála2
-iá2l1al
+iál1ana
+iá2lál
+iá2l1ár
iá2l1e2
+iá2lim
iá2l1in
-iána2
-iá2n1an
-iá2nyi
-iá2p
-iá2ro
+iá2lop
+iá2nar
+iá2n1as
+iá2nem
+iá2nir
+iá2nis
+iá2nö
+iánt2
+ián1tr
+iá2nü
+iá2ny1ad
+iá2ny1a2l
+iá2nyan
+iá2nyar
+iá2ny1e2
+iá2nyérz
+iá2nyö
+iá2ói
+iá2po
+iá2rad
+iá2rak
+iá2ram
+iár2das
+iár2d1e
+iár2d3z
+iá2re
+iá2rim
+iár1s2
iá2ru
+iá3run
+iá2rú
+iá2sal
+iá2sar
+iá2s1as
+iá2s1á2g
+iá2s1ám
+iá2sás
+iá2s1e2
+iá2sikr
+iá2sí
+iá2sor
iá2só
-iás3s
-iá2sü
-ibai2
+iá2sö
+iá2ső
+iás3szo
+iást2
+iás1tr
+iá2s1ü2
+iá2sű
+iásví2
+iá2szás
+iá2s3ze
+iás3zs
+iá2ta
+iá2t1e2l
+iáti2
+iá2t1ir
+iba1d2
+ibas2
+ibat2
+ibau2
+ibaü2
+ibá2l1a
+ibe2lér
+ibe2r1in
+ibe1s
ibi2o
-2ibn
-ibu2c3
-1iccé
-i1chy
-idá2szo
+ib2lo
+ib2ró
+ib2ru
+ica1f2
+ica1g2
+ica1kl
+ica1k2r
+ica2los
+ica1pr
+ica1t2
+icca2l
+ic2can
+ic2c1á2
+ic2c3h
+ic2cin
+ic2cir
+ic2cí
+ic2c1o
+ic2c1ö
+iccse2l
+iccs1ol
+iccs1ő2
+ic2cú
+ic2cz
+ic3ha.
+ic3hek
+i2chiná
+ic3hoz
+i2c3hű
+ici2t1a2
+ici2tár
+ici2tel
+ici2ter
+i1c2lu
+i2c1ol
+i2cs1a2d
+ics1a2la
+icsa2p1á2g
+i2cs1au
+ics1ág
+ics1áll
+i2cs1eb
+i2cs1e2g
+icse2t
+i2cs1ete
+i2cs1ev
+ics1é2g
+i2cs1é2ré.
+ics1ipa
+ics1s
+ics1út
+i2cs1ül
+i2cs1ü2t
+ic3sze
+ic1üz
+i2d1a2j
+id1ana
+id1a2ny
+i2d1au
+id1áll
+id1áru
+i2d1ásv
+id1br
1iddo
+id3dz
+ide2av
+ide2g1á
+ide2g1él
+ideg1ér.
1i2dej
ide1k2v
2idel
-i2d1é2l
+id1elj
+id1elm
+id1elo
+id1elt
+i2d1emb
+ide1p2
+ide2red
+i2dero
+ide3sa
+ideu2
+i2d1é2g
+idé2kel
i2dény
-2idés
+idér2c3s
+2idész
1i2déz
id2ge
-idi2a1s
-i2d1id
-i2d1i2ta
-i2domá
-i2domo
-2idó
+idi2as
+1i2dil
+id1ionj
+id1ionn
+i2d1i2ono
+i2d1i2ont
+idi2os
+idi2ód
+i2d1ita
+idíja2d
+idí2j1ada
+id1kr
+id1old
+i2d1olv
+ido2mac
+ido2m1an
+1i2domá
+1i2domo
+1idomú
+id1ös
1i2dő.
-i2dőv
-2idp
-idro1
-idrosz2
-id3ze
+1i2dőb
+1i2dőd
+1i2dőé
+1i2dőh
+1i2dői
+1i2dők
+1i2dőm
+i2dőne
+i2dőné
+i2dőnk
+1i2dőp
+1i2dőr
+1i2dős
+idő2sod
+idő1s2p
+1i2dőt
+idő2tál
+1i2dőv
+i2dőz
+id1pr
+id2rót
+i1d2ru
+id1st
+id1t2r
+id1u2t
+id1üg
+i2d1üz
+i2d3zá
+i2d3ze
+i2d3zó
+i2dzs1a
+i2dzs1á
+i2dzsen
+i2dzsél
+i2dzs1í2
i1e
-i2ec
-ie2dé
-2ieg
+ie2be
+ie2cs
+ie2dz
+ie2f1a2
+ie2fá
+ie2f1i
+ie2f1ü2
ie2gé
ie2gy
-ie2le
-ie2léb
-ie2lőb
-ie2p
-ie2rej
-ie2rez
-ie2rő.
-ie2rőszakoln
-ie2rőv
-ier1s
-ie2set
-ie2sé
-ie2si
+ie2he
+i2eld
+ie2lo
+ie2lőa
+ie2ma
+ien2sá
+ien2s1o
+iens3s
+ie2ny
+ie2pe
+ie2r1a2d
+ie2rag
+ie2r1aj
+ie2r1a2k
+ie2ral
+ie2ram
+ie2r1an
+ie2ras
+ie2r1á
+ier1d2
+ie2reg
+ier1egy
+ie2r1el
+ie2r1ember
+ie2r1est
+ie2r1iga
+ie2r1in
+ie2r1iste
+ie2rí
+ie2r1ol
+ie2ror
+ie2rö
+ie2rő
+iersz2
+iert2
+ier1tr
+ie2r1u2
+ie2r1ú
+ie2r1ü2g
+ie2sel
+ie2sem
+ie2sett
+ie2sés
+ie2sik
ie2ső
ie2sz
+ieté1sz2
ietz1
ie2ur
-ie2v
+ie2ve
+ie2vé
+ie2vi
+ie2vő
i1é
-ié2dere
-ié2g
-ié2ke
-ié2kí
-ié2l
+i2édo
+i2éfe
+ié2ge
+ié2gé
+ié2gő
+ié2gü
+i2éha
+ié2hes
+i2éhi
+i2éil
+ié2le
+ié2lé
+ié2li
+ié2lő
+i2éme
+i2émé
+i2émo
+ié2neke
+ié2nekh
+ié2nekk
+ié2nekü
ié2pí
ié2pü
-ifi1b
+ié2rek
+i2éren
+ié2rez
+ié2ré
+ié2ri
+ié2rő.
+ié2rők
+ié2rőt
+ié2rü
+i2észi
+iéta1s
+ié2tel
+i2étö
+ié2ve.
+ié2vek
+ifa1st
+ifa1t2
+i2fe.
+ifenyőé2h
+ifio2
+if1ír
+1ifjí
+1ifju
+1ifjú.
+1ifjúb
+1ifjúé
+1ifjúi
+1ifjúké
+1ifjún
+1ifjúr
+1ifjús
+1ifjút
+1ifjúv
+i1f2la
+if2le
if2lo
-2ifö
-if2re
-if2ri
-if2ta
-ig1a2lu
-iga1p2
-1igazg
-ig1áll
+if2lö
+if2lu
+ifogo2
+ifon1n
+i1f2ri
+i1f2ro
+i1f2rö
+if2ru
+if2t1a
+if2t1á2
+if2t1e2l
+if2tin
+if2tö
+if2tú
+ig1a2git
+ig1a2ka
+ig1als
+ig1alv
+ig1and
+iga2nyal
+iganye2
+iga2ny1es
+iga2ras
+1i2garz
+iga1sl
+iga2szag
+igasz1al
+igau2r
+1i2gaz.
+1igazí
+ig1á2cs
ig1álm
-igá2nya
+ig1ásh
+i3gász
ig1á2t1e2
+ig1br
+ig1d2r
+ig1edz
+i2geg
+igek2
+ige1kl
ig1e2le
ig1ell
-i2ges
+ig1elm
+1i2genl
+ige2rá
+ig1erő
ig1e2se
ig1esi
+ige2tál
+ige2teg
+ige2tél
ige2t1o
-i2g1ev
-i2g1ég
+ige2tőr
+ig1evi
+i2g1ex
+1i2géd
+ig1é2g
+ig1é2li
+ig1é2lő
+ig1é2lü
ig1élv
+i2gém
+igé2na
+igé2ná
1i2gény
+i3gépe
+ig1épí
ig1ér.
-ig1é2rő
-ig1ért
-ig2gas
-2igi
-ig1im
-ig1ir
-ig1os
-ig2raf
-igro1
-ig1s
+ig1érj
+ig1érl
+ig1érn
+ig1é2rü
+ig1érv
+ig1ész
+1i2géü
+ig1fl
+ig1g2r
+ig1ív
+ig1íz
+ig1kl
+ig1kr
+ig2lac
+ig2nad
+ig2n1e2g
+igne2r
+ig2n1osz
+ig2nö
+ig2nü
+igo2rál
+ig1o2s
+igóé2
+ig1öb
+ig1ö2k
+ig1öl
+ig1ö2z
+ig1pr
+i1g2raf
+ig1sk
+ig1sl
+ig1sm
+ig1sp
+ig1st
+ig1sz
+ig1tr
ig1ug
-i2g1ü2
-iha2d
+igu2n
+igu2t
+ig1ús
+ig1üc
+ig1üd
+ig1ü2g
+igü2l
+ig1üt
+ig1üv
+ig1űz
+i2gya.
+i2gyam
+i2gyák
+i2gyál
+i2gy1eg
+i2gy1e2kéh
+i2gy1ékt
+igy1ér.
+i2gy1ért
iha2re
-1ihl
i1i
-2ii.
-ii2d
-ii2g
-i2ii
-ii2m
-ii2p
-ii2s
-i1í2
+ii2de
+ii2dé
+ii2dő
+ii2ga
+ii2gá
+ii2gé
+ii2gy
+ii2ha
+ii2je
+ii2má
+ii2mi
+ii2pa
+ii2ram
+ii2rat
+ii2rá
+ii2ro
+ii2sz
+ii2ta
+ii2vá
+ii2vo
+ii2vó
+ii2zé
+ii2zo
+i1í
+ií2gé
+ií2ra
+ií2rá
+ií2ro
+ií2ró
+ií2ru
+ií2té
+ií2ve
+ií2ze
1i2jed
+ije2gy1á2
1i2jes
-ika1pr
-iké2l
-ik1éle
-iki2s1
-ik2kár
-ik2kí
+ikabe2j1
+ikabejá2
+i2k1abl
+ik1ajt
+ika2lak
+ik1ang
+ikaó2
+ika1p2l
+ika1p2r
+ika2ró2r
+ikas2
+ika1sp
+ika1t2r
+i2k1árk
+i2k1áru
+ikás1s
+iká2tol
+ik1dr
+ik1ebé
+i2k1eg
+ik1elo
+ik1eng
+ike2r1a2
+ike2r1á2
+ike2r1e2dz
+ike2r1e2l
+ike2r1ev
+ike2ris
+ike2r1o
+ik1e2rő
+iker1s
+ike2ru
+ike2t1ült
+ik1evo
+iké2kekk
+i2k1épí
+i2k1épü
+i2k1érz
+ik1fl
+ik1fr
+i2k1id
+ik1i2ko
+ik1ikr
+ik1ind
+ik1ins
+i2k1int
+i2k1i2o
+ik1isk
+ikka2l
+ik2k1ala
+ikk1any
+ik2k1a2r
+ikk1ára
+ik2káz
+ik2kev
+ikk1érde
+ik2kin
+ik2k1i2p
+ik2k1ol
+ik2k1ó
+ik2k1ös
+ik2köt
+ik2k1ö2z
+ik2k1u2
+ik2küz
+ikla1tr
+ik2ler
ik2lor
-ikro1s
+i1klub
+ik2lum
+i1knéd
+ikoma2
+iko2m1ar
+1ikonbá
+1ikonén
+1i2konl
+1i2konta
+1ikontö
+1i2kontü
+1ikonzs
+ikó1p
+ik1ó2rá
+ikó2s3zá
+ikő2res
+ik1pl
+ik1pr
+1ikrei
+1ikrek
+ik2rém
+i1k2róm
i1k2ru
+ik1st
+ikszind2
+iksz2t
+iktus1s
+iktu2sz
+2iku.
+2ikub
+ik1udv
+2ikuf
+2ikuh
+2ikui
+2ikuí
+2ikuj
+2ikuk
+2ikur
+iku2sav
+2ikut
+2ikuv
+ik1ü2v
+il1abr
+il1a2ce
+il1a2cé
+il1a2dó
+il1a2la
il1ald
i2l1alk
-il1a2ny
-il1ell
+il1amb
+ila2n
+i2l1ana
+i2l1any
+ila2pin
+ila2pol
+i2l1a2r
+ilá2g1e2
+ilág3g
+ilá2gö
+il1á2gyo
+ilányfé2
+i2l1á2p
+i2l1árn
+il1á2ro
+il1áru
+il1á2rú
+ilá2sz
+i2l1ászo
+il1átf
+il1átm
+il1átr
+il1bl
+il2c1a2
+ilc3c
+il2ch
+il2c3sap
+il2c3sik
+ilc3sz
+il2cz
+il1e2lem
+i2l1emb
+i2l1eml
+il1exp
+ilé2n1á
+i2l1é2nekh
+i2l1é2nekn
+ilé1sp
+il1f2l
+il1fr
+il1g2r
+i2l1icc
+il1ide
+i2l1igáh
+i2l1igáj
+i2l1igás
+i2l1igát
+ili1gra
+i2l1i2kon.
+i2l1i2konb
+i2likoné
+i2l1i2konh
+i2l1i2konj
+i2l1i2konn
+i2l1i2kono
+i2l1i2konr
+i2l1i2kont
+i2likonz
+il1ill
+ili2ma.
+il1i2mi
+il1imp
+ilin1n
+ili2p1á
+il1iró
+il1k2l
+il1k2r
+illa2g1ó2
+1illatb
+1illatr
+1illatt
+il2l1este
+il2l1esté
+1illésé
+illé2t
+ill1éte
+ill1étt
+il2l1id
+illig2
+illi1gr
+il2l1ö
+1illu
1illú
-il2maj
-il2m1a2k
-il2m1am
-il2man
-il2má
-il2mel
+ilm1ada
+il2m1agy
+il2m1aj
+ilm1aka
+il2m1a2l
+ilm1ank
+ilm1any
+il2m1ap
+il2m1arc
+ilm1atl
+il2m1a2z
+il2m1ál
+ilme2g
+il2m1egé
+il2m1egy
+il2m1e2l
+il2m1ep
+il2m1e2r
il2m1esz
-il2mi
+il2m1é2j
+il2m1ék
+ilmé2l
+il2m1éle
+il2m1ér.
+il2m1érd
+ilm1é2rést
+il2mérte
+il2m1érté
+il2m1és
+il2mid
+il2m1i2k
+il2mim
+il2mir
+il2m1is
+il2miz
+il2m1í2
+il2m1ok
+il2mol
+il2m1or
+ilm1osz
+il2m1ó2r
+il2mö
+il2mő
+ilmu2
+il2m1ut
ilo1g2
+i2l1or
+ilót2
+iló1tr
+il1öb
+il1ös
+il1p2l
+il1p2r
+il1sh
+il1sp
+il1s2t
+2ilte
ilumi2
ilumin1
-i2lü
+ilus3s
+i2l1üg
+il1ür
+il1üv
+i2l1üz
+ilva1k2
+ima1gl
+im1akk
+imaó2
+ima1p
+2imar.
+i2marit
1i2mád
-ime2g1á
-imi2tár
-2imka
-2iml
-2imog
-2ims
-im1sz
-2imz
-i2n1aj
-in1akt
-in2c1ez
+i2mákt
+im1dr
+imeg1g
+im1elem
+ime2m
+i2m1eme
+ime2ra
+ime2rin
+i2m1érd
+im1inh
+im1inté
+imi2t1a2
+imi2t1á2r
+imi2tin
+1immu
+i2m1old
+i2m1om
+im1ó2rá
+imót2
+im1ös
+1impé
+1impu
+1imrei
+i2m1ür
+iműt2r
+i2n1abl
+i2n1a2cé
+i2n1adá
+in1ade
+i2nado
+in1a2já
+in1ajt
+inaka2r
+1i2nakat.
+i2n1akc
+i2nakk
+i2nakn
+i2nakt
+i2n1akv
+in1ald
+i2n1alk
+in1all
+1i2nam.
+i2n1a2mit.
+in1ana
+ina1pla
+ina2rán
+1i2nas.
+ina2sis
+1i2nasn
+ina2tell
+i2n1ág
+iná2lad
+in1á2rak
+in1árh
+i2náru
+i2n1ásv
+in1bl
+in1br
+in2c1a2g
+in2cal
+inca2n
+inc1elt
in2c1él
+in2chi
+in2c3ho
+in2c1is
+in2c1os
+in2có
in2c1ö
+in2cő
+incs1an
+in2cs1e2r
+in2cs1é2j
+in2cs1ér.
+inc3sérv
+in2csor
+inc3sor.
+in2csú
+inc3süt
+inc3sza
+in2cú
in2d1ab
-in2d1ah
-in2d1am
-in2d1at
-inde2m
-in2d1eme
-ind1err
-in2d1e2s
+1indai
+in2d1az
+in2deb
+in2d1ed
+in2d1e2g
+ind1ekö
+in2d1e2m
in2d1ett
+1index
in2d1e2z
-in2dét
-in2din
-1indí
-in2d1ö2
-ineke2
-ine2kel
-i2n1el
-2inen
+in2d1ég
+in2d1én
+in2dés
+ind1ink
+1indiv
+1indít
+indö2
+in2d1ör
+in2dös
+in1dra
+1indul
+2ine.
+i2n1e2dé
+i2n1ef
+ineg1g
+in1e2gy
+ine2ku
+i2n1e2l
+in1emu
+i2n1eny
2iner
-ine2ta
+i2n1erd
+i2n1erj
+ine2t1a
+ine2t1ér
+ine2tül
+i2n1ex
+2inéb
+in1é2ge
+iné1kré
+iné2l
+i2n1éle
+i2n1élt
+i2n1élv
+in1épí
+i2n1ér.
+i2nérd
+i2n1éré
+in1érte
+iné2tá
+iné2te
+2inév
+1infek
1infl
-1infr
-1ingad
+in2gadó
+in2g1ala
+ing1áll
+ing1árá
+ing1áré
+ing1á2ro
+ing1árt
+ing1áru
+ingás3s
1ingec
-in1g2rá
-in1ido
-in2kaj
-in2kál
-in1old
-ino2má
-in1ó2ra
-in1öl
-in1ös
-in1sh
+in2g1eg
+1ingei
+ing1eljá
+ing1elk
+in2g1ell
+ing1els
+in2g1enc
+1ingerb
+1ingerc
+1ingeré
+inge2r1és
+1ingerg
+1ingerh
+1ingeri
+1ingerk
+1ingerm
+1ingern
+1ingerp
+1ingerr
+1ingers
+1ingert
+1ingerü
+in2g1e2v
+in2g1é2j
+in2g1ék
+in2g1él
+ingés3s
+ing3g
+ing1i2na
+in2gí
+in1glo
+in2gor
+in2g1öl
+in2g1ös
+ing2rád.
+ing2rádb
+ing2rádd
+ing2rádn
+ing2rádo
+ing2rádt
+1inguj
+in2g1u2t
+in2gú
+ing1ült
+2inie
+2inié
+i2nigar
+i2n1ige
+in1ikra
+ini1kro
+i2n1ill
+i2n1i2ma.
+in1i2mi
+in1ind
+2ining
+i2n1inh
+i2n1i2o
+2inir
+ini2s1ég
+i2n1isk
+i2n1ism
+i2n1ital
+2iniu
+i2n1íz
+1injekc
+ink1acé
+in2k1a2d
+in2k1ato
+in2k1árn
+in2k1esz
+ink1érté
+in2kio
+ink1old
+ink1orsó
+in2kös
+1inkub
+1inna.
+in2nor
+i2n1ob
+i2n1okl
+i2n1old
+i2n1olt
+i2n1olv
+in1org
+i2n1ox
+in1óda
+in1ó2dá
+inó2rá
+i2n1öl
+in1ön
+in1őz
+in1pl
+in1pr
in1s2k
-1insp
-int1étk
-in2t1in
-in1tré
-in2t1ú2
-inú2
-in1út
+in1s2m
+1inspi
+in1spr
+1insta
+in1s2to
+in2t1aktu
+int1ann
+int1árai
+int1árak
+int1árat
+in2t1á2rá
+in2t1árf
+in2t1ári
+int1áron
+in2t1árr
+int1ársz
+in2t1áru
+int1á2ta
+1intege
+1integr
+in2t1e2gy
+int1előt
+int1elté
+in2t1enn
+in2t1e2ny
+1intenz
+in2t1e2rez
+1interfé
+int1essz
+inte2t1ős
+in2t1é2j
+in2t1ész
+1intézé
+1intézk
+1intézm
+1intéző
+2intézőc
+in1t2hos
+in1thu
+in2tid
+in2tigé
+int1illa
+in2t1ing
+in2t1ip
+in2t1ivá
+in2t1i2z
+int1oml
+in2t1osz
+in2t1ös
+intőkész1
+int1őr.
+int1ura
+intus1s
+in2t1ut
+in2tús
+in2t1út
+i2n1ug
+i2n1uj
+in1új
+in1ú2s
+i2n1ú2t
+i2n1ü2g
+in1ült
+in1ünn
+in1ür
+in1üs
+i2n1ü2t
+i2n1ü2v
+i2n1ü2z
+in1űr
+1inven
+in2xa
+1inzu
i1o
-ioe2
-i2of
-io1g2rá
+ioá2r
+io1b2r
+io2cs
+io1d2r
+io2dú
+i2ogá
+iog2raf
+io1g2ráf.
+io1g2ráff
+i2ogy
io2ik
-i2oka
io2ká
-io1kh
-io2laj
+io2kí
+io2ko
+io2ku
+i3old
+io2l1i2v
+iol1k2
+iol1okk
i2oló
-iono1sz2
-ion1s2
-io1ny
-iop2
+i3olv
+io2mar
+io2m1árt
+io2mil
+io2mö
+io2nad
+io2n1a2g
+io2nak
+io2n1a2n
+io2n1a2r
+io2n1as
+io2n1a2t
+io2n1av
+io2n1át
+io2neg
+io2n1el
+io2nen
+ionim1
+io2nin
+ion1k2
+io2nop
+io2n1oszt
+io2nö
+ions2
+ion1st
+ion1t2r
io2pe
-io1ps
+io1p2r
+io2r1a
+io2r1i2ko
io2so
io1sz2f
-io1t2
-i2ov
-io2xidd
+i2ote
+io2xidj
+io2xidt
i1ó
+ióa2d
+ió2ap
+ióá2g
+ióá2r
+ióát1a2
+i2óbá
+i2óbes
+i2óbé
+i2óbí
+i2ó1bl
+i2óbo
+i2óbö
+i2óbő
+i2ó1b2r
+i2óbu
+i2óbú
+i2óbü
+i2óbű
+i2óce
+i2ócé
+i2óci
+i3ócsk
+i2ócu
+i2óde
+i2ódé
i2ódi
-ió1f2
-ió1g2
+i2ódí
+i2ódó
+i2ódö
+ió1drá
+i2ódú
+i2ódü
+i2ódz
+i2óég
+i2óék
+i2óél
+i2óép
+i2óés
+i2óév.
+i2ófá
+i2ófe
+i2ófi
+i2ó1fl
+i2ófó
+i2ófö
+i2ófő
+i2ó1f2r
+i2ófu
+i2ófü
+i2ófű
+ió1g2r
i2óha
-ió2kár
-ió2kir
-iókos1
+i2óhá
+i2óhe
+i2óhé
+i2óhi
+i2óhí
+i2óhó
+i2óhö
+i2óhő
+i2óhu
+i2óhü
+i2óhű
+iói2g
+i2óip
+i2óis
+i2óiz
+ióí2v
+i2óje
+i2ójo
+i2ójó
+ió2kad
+ió2kaj
+iók1arc
+ió2k1aszt
+ió2kál
+ió2k1e2g
+ió2k1i2d
+i2ókí
+iókköz1
+iók1old
+i2ókort
+i2ókö
+i2ókő
+ió2küz
+i2óla
i2ólá
+i2óle
+i2ólé
+i2óli
i2ólo
-ió2rák
-i2óri
-i2ósá
-ió1spe
-i1ö2
+i2óme
+i2ómó
+i2ómu
+i2ómú
+i2ómű
+i2óne
+i2ónó
+i2ónö
+ióo2k
+ióó2r
+ió1p2s
+ió2rab
+i2órag
+i2órak
+i2óran
+i2órap
+ió2ras
+i2órád
+i2óre
+i2óré
+i2ória
+i2óro
+i2órö
+i2óru
+ió2s1aj
+ió2sel
+ió2si.
+ió1slá
+ió2só
+iós3s
+ió1s2tá
+ió1str
+i2ósú
+ió1sz2
+i2óte
+i2óté
+i2óti
+i2ótí
+i2ótö
+i2ótő
+i2ó1t2r
+i2ótu
+i2ótú
+i2ótü
+i2ótű
+i2óug
+i2óun
+i2óur
+i2óut
+i2óvár
+i2óvás
+i2óve
+i2óvé
+i2óvi
+i2óví
+i2óvö
+i2ózár
+i2óze
+i2ózs
+i1ö
+iö2kö
+iö2le
+iö2lé
+iö2li
+iö2lö
+iö2lő
+iö2mö
+iö2re
+iö2rö
+iö2rü
+iö2tö
+iö2ve
+iö2zö
i1ő
-iő2r
+iő1dr
+i2őha
+i2őké
+i2őku
+i2őra
+iő2ri2
+i2ő1s2p
+i2ő1st
+i2őte
+i2őté
+i2őva
+i2ővá
+ipa2cse
1i2par.
-ipa2rág
-ipa2r1e
-i2pari
+1ipara.
+ipa2ral
+ipa2rál
+1i2parán
+1i2parát
+1iparb
+ipa2r1en
+ipa2r1es
+1i2paré
+1i2parh
+1iparil
+1i2parin
ipa2ris
-i2paro
-ipe2rak
-i1p2h
-ip2lak
-i1plexe
-i1p2lé
-2ipo
-ippa2
-ip2p1ad
-ippo1l
-ip2ri
+1i2parm
+1i2parn
+i2parok
+i2paron
+1iparr
+1i2pars
+i2parta
+1i2partá
+1i2parte
+1i2partó
+1i2paru
+ipau2
+ipánk2
+ipán1n
+ip1átm
+i2p1ef
+ip1e2gy
+ip1e2lu
+i2p1esé
+i2p1ev
+ip1fl
+ip2fu
+ip1kl
+ip1kr
+ipo1kl
+ipor2tel
+ipor2t1ő
+ip1ö2l
+ip1ös
+ip2p1a2d
+ip2paj
+ip2par
+ip2pár
+ipp1ing
+ip2pö
+i1prof
+i1prog
+i1proj
ip2rop
-ip2sz1a
-ip2szá
-ip2szö
-iqu2
+i1p2rot
+ipsz1a2l
+ipsz1ál
+ip2sz1emb
+ip2szip
+ip2sz1í2
+ipsz1or
+i2p1ug
+iralo2
+1i2rama
+1i2ramá
+iramis1s
+ira2tal
+irata2n
+ira2t1any
+ira2t1as
+ira2t1at
+ira2tál
+1i2ratb
+1i2ratc
+1i2ratd
+ira2tel
+1i2raté
+1i2ratf
1i2rati
+2i3ratill
+1i2ratm
+ira2t1ol
1iratoz.
-1iratozi
+ira2t1ö2
+1i2ratp
+1i2ratr
+1i2ratü
+irádi2ók
+irádi2ót
+irá2f1a2
+irá2g1al
irá2g1ál
-irá2nyá2ra
-irá2nye
-2ires
-i2rew
-irgonc1
+irá2g1á2rak
+irá2g1á2ro
+irá2g1áto
+irá2gáz
+irá2g1e
+irág1g
+irá2g1ol
+irá2g1ó2r
+irá2gö
+irá2l1a
+irá2l1e2
+1i2ránn
+1i2rány
+irá2nyal
+irá2nye2
+ir2ch
+i2rei
+1irga
+irin2c
+iri2zo
+irka1s
+irkasz2
+irke1
+2iro.
2irob
+1i2roda.
+1i2rodá
+iro1g2r
+iro2ka
+iro2ká
+iro2k1e
+iro2kér
+iro2l1a
+iro2m1a
iros3s
-ir2s1a
+iró2ke
+i2róno
+1irri
+ir2s1a2
ir2s1á2
-1irtó
-ir2tü
-is1abl
-i2s1a2d
+ir2sil
+irs3s
+ir2s1ü
+ir2sz
+irté2
+ir2t1él
+ir2tiz
+ir2t1o2r
+ir2t1ö2
+ir2tür
+iru2sze
+i2s1abl
+is1a2da
+is1a2dá
+is1a2do
i2s1a2g
+is1aja
+is1ajk
+isa2k1e
+isa2kol
is1a2la
+is1alf
+i2s1alj
is1alk
+is1alm
+is1amb
isa2n
-is1ang
-is1ant
-is1any
+i2s1ana
+i2s1ano
+i2s1ant
+i2s1any
isa2p
-is1apa
is1apá
-i2s1ar.
-i2s1a2ra
-i2sasz
-is1atá
-is1atl
-i2s1a2u
+is1apo
+is1a2rá
+is1ass
+is1aut
+i2s1a2z
+i2s1ábr
+is1ággy
+iságy1út
is1áll
-is1áru
+is1á2po
+i2s1á2rak
+i2s1á2rá
+i2s1árb
+i2s1árf
+i2s1árh
+i2s1árké
+i2s1árn
+isá2ron
+i2s1árr
+i2s1árt
+i2s1á2ru
+isárus1
is1á2t1a2
-i2s1á2z
+is1átk
+i2s1átl
+is1átv
+is1bl
+is1br
+is1dr
+is1edz
+is1eff
i2s1ege
-i2s1e2gy
-i2s1elm
-is1elo
+is1e2gér
+i2s1e2ke.
+is1elf
+is1elm
+i2s1elo
i2s1eml
-ise2n
-is1enc
-is1ene
-i2serd
+i2s1enc
+i2s1ene
+is1eng
+i2s1e2pi
+is1epri
+is1erő
+is1e2set
is1esé
-is1est
-i2s1ev
-i2s1ép
-i2s1éri
-i2s1i2n
-isi2p
-is1ipa
-i2s1i2r
-is1isk
-is1ist
-is1í2v
-is1k
-1iskolát
-i1s2lis
-1ismer.
+isé2ge2l
+isé2gés
+isé2gid
+iségkész1
+is1élv
+i2s1ér.
+i2s1é2ri
+i2s1érté
+is1é2ve.
+is1é2vet
+is1é2vén
+is1é2vét
+is1évh
+isé2vi.
+isföl2
+is1fr
+is2hin
+is2his
+is1ido
+isi2g
+is1iga
+is1ind
+is1inf
+is1int
+is1inv
+isió2
+i2sipa
+isi2par
+is1iro
+i2s1isten
+is1ita
+is1i2zo
+i1s2katu
+is1kl
+is1k2r
+is1kv
+is2lag
+i1s2lat
+1isme.
+1ismek
1ismere
-1ismeré
-1ismerh
-1ismeri
-1ismerj
-1ismern
-1ismerő
-1ismert
-1ismerve
-1ismervény.
-1ismervénye
-1ismervényt
-i1s2min
-2iso
-is1ob
-i2s1ol
-is1ord
-is1öc
-i2s1ör
+1ismérv
+2ismo
+2ismű
+i2s1ob
+i2s1o2l
+i2s1orc
+i2s1ord
+iso2rosz
+i2s1orra
+i2s1orró
+is1orv
+i2s1osko
+is1osz
+i2s1ott
+is1ó2rá
+i2s1öb
+i2s1ö2c
+is1öl
+is1ön
+isö2r
+is1örd
+is1öre
is1ös
-i2s1ő
-isp2
-1ispán.
-i1s2pe
-i1s2por
-is1pr
-is1sr
-is1st
-isszo2ba
+is1ö2v
+is1ő2r
+i1s2pan
+i1s2pek
+isp2r
+i1s2pur
+is1s2p
+is1sta
+is1stá
+issz1e2rei
+issz1e2rek
+issz1erem
+issz1e2res
+is3szig
+is3szil
+is3szí
is3szó
is3szö
+is3sző
is3szú
-1isten.
-1istene
-1istenhit
-1istenné
-1istennő.
-1istennők
+is3szű
+ista1s
+istasz2
+1istáp
+1istenh
+iste2n1o
+i1s2til
+is1trez
+is1tré
+is1tri
+is1tro
1istv
-is1úr.
-is1üg
-is1üs
-1i2szák
-i1sz2f
-isz1il
-isz2kóp
-isz1ön
-is3zsa
-isz2tár.
-it1adó
-itai2
-itakész1
-1ital.
-1italt
+i2s1ud
+is1ujj
+isu2t
+is1uta
+is1utá
+i2s1új
+i2s1üg
+is1üst
+i2s1ü2tőt
+i2s1üz
+isva2d1áss
+i1svin
+isvíz1
+isza2k1o
+isza2p1á2
+isza2p1e
+is3zárá
+isz1árk
+is3zárl
+is3zárú
+isz1e2gy
+i2sz1elv
+is3zene
+isz1esem
+i2széj
+isz2fér
+i2szimi
+isz1ing
+isz1isk
+isz1ist
+isz1kl
+isz2k1ö2v
+isz2k1ú
+isz1öl
+isz1ös
+isz3s
+isz2tati
+iszt1áras
+isz2t1árb
+isz2tárt
+isz2t1ékn
+isz2t1ér.
+isz2t1ill
+iszt1i2nai
+isz2t1öl
+isz2t1őr.
+isz2tüz
+i2sz1ü2g
+i2szüt
+is3zűrödn
+it1a2cé
+ita1d2
+it1a2dó
+ita1g2r
+it1agya
+i2t1akk
+i2t1akn
+1i2tal.
+ita2lad
+ita2l1á2rú
+i2talb
+ita2l1el
+italé2
+i2talh
+itali2n
+ita2lina
+i2talj
+i2talk
+it1allo
+1i2talm
+1i2taln
+i2talo
+ita2l1ó2
+1i2talr
+i2talt2
+i2talu
+it1anó
it1ant
-ita2tat
+i2t1ara
+i2t1au
+it1ács.
+it1ág.
+it1á2ga
+itána2
+itá2n1at
+itá2rak
+i2t1á2ram
it1á2ras
-ite2la
+it1á2rat
+itá2rár
+itá2rát
+i2t1á2ria
+itá2rig
+itá2ris
+itáró2
+itá2r1ór
+itá2ruk
+itá2rú
+itáskész1
+itá2s3z
+itá2tal
+it1átf
+it1bl
+it1br
+it1dr
+ite2l1a
+ite2l1á
+ite2leg
+i2telemz
+ite2leng
+ite2lesé
+ite2lex
+ite2lél
+ite2l1ér.
+ite2linj
+it1eljá
+i2t1ellen
+it2elmély
+ite2lo
+ite2lőz
+i2t1e2mel
+i2t1eml
+i2t1e2p
2iter
-2ité
-i2t1é2l
-it2há
-i2t1i2g
+i2t1e2rez
+i2t1erő
+i2t1e2sete
+it1ezr
+ité2g
+i2t1ége
+it1é2le
+it1élm
+i2t1é2ret
+i2t1érz
+ité2tek
+i2t1étt
+it1fl
+it1fr
+it1gl
+it1gn
+it1gr
+i2t1id
+iti2g
itigaz1
-it1ipa
-itköz1
-ito1g2r
-ito2ká
+i2t1igé
+it1i2ko
+it1ikr
+itikus1s
+it1ill
+it1imp
+i2t1ind
+i2t1inf
+it1i2pa
+i2t1irá
+i2t1iro
+it1iró
+it1isk
+i2t1ism
+it1isza
+it1i2szo
+i2t1íg
+i2t1íz
+it1kl
+itkos1s
+it1kr
+ito2b
+it1obe
+ito2k1aj
+ito2kak
+ito2k1ol
+ito2n1á2
+itop2la
+ito2r1as
+ito2rál
+ito2ril
+2itosz
+ito1sz2f
+i2t1ov
+itóa2
+itó1f2
+1i2tókán
+i2t1ó2né
+i2t1ónn
+i2t1ónt
+itó1p2
+it1órá
+itós2
+itó1sp
+itó1st
+it1önt
+i2t1ös
+it1őrl
+it1pl
+it1pr
+it1sp
+1ittad
1ittam
-1ittasodh
-1ittasodi
-1ittasodn
-1ittasu
-it2teg
-it2tot
-it1ug
-it1uta
+itta2n1á2s
+itta2n1é
+itta2n1ó2
+2itte
+it2t1eg
+it2t1i2na
+it2t1ing
+it1tra
+it1tró
+1ittuk
+1ittun
+itty1i
+i2t1ug
+i2t1und
+itu2n1i
+itu2ral
+it1u2rán
+it1új
+i2t1üg
+it1üld
+it1üst
+i2t1üt
+i1t2zé
+i1t2zi
i1u
-iu2g
-iu2mad
+iu2ga
+iu2go
+iu2mab
+iu2mac
+iu2m1ad
+iu2maf
+iu2m1ag
+iu2mal
+iu2m1am
+iu2m1a2n
+iu2m1a2r
+iu2m1as
iu2m1a2t
-iu2mál
-iu2me
-iu2mio
+iu2m1av
+iu2maz
+iu2m1á2l
+iu2meg
+iu2m1el
+iu2m1en
+iu2mer
+iu2m1es
+iu2mez
+iu2mél
+iu2m1éré
+iu2m1i2d
+ium1ill
+iu2m1im
+ium1inj
+iu2m1i2p
+iu2m1is
+iu2m1iz
iu2mí
-iu2n
-iu2r
+iu2mol
+iu2m1or
+iu2m1ó2
+iu2mö
+iu2mő
+ium1p2
+iu2mü
+iu2na
+iu2no
+iu2ra
+iu2rá
+iu2ru
+ius3sze
iu2ta
-iu2tán.
iu2tó
-iu2z
+iu2tu
+iu2zs
i1ú
-i2úg
+i2úbá
+i2úbe
+i2úbé
+i2úbi
+i2úbo
+i2úbö
+i2ú1br
+i2úci
+i2úcí
+i2údá
+i2úde
+i2údo
+i2údz
+i2úél
+iú1fr
+i2úha
+i2úhá
+i2úhe
+i2úhi
+i2úhö
+i2úhő
+i2úhu
+i2úhú
+i2úif
+i2úje
+iú2jí
+i2újó
+i2úke
+i2úkí
+i2ú1kl
+i2úkó
+i2úkö
+i2úku
+i2úme
+i2úmó
+i2úmu
+i2úmű
+i2úne
+i2úné
+i2únö
+i2úre
+iú2ri
+iú2ro
+i2úru
+i2úse
+i2úso
+i2ú1sp
+i2úta
+i2útá
i2úte
-i1ü2
-i1ű2
+iú2té
+i2útí
+i2útö
+i2útú
+i2úve
+i2úvé
+i2úvi
+i2úvo
+i2úze
+i1ü
+iü2cs
+iü2ge
+iü2gy
+iü2le
+iü2lé
+iü2li
+iü2lö
+iü2lő
+iü2lü
+iü2re
+iü2rí
+iü2rü
+iü2te
+iü2té
+iü2ti
+iü2tö
+iü2tő
+iü2tü
+iü2ve
+iü2vö
+iü2ze
+i1ű
+iű2ze
+iű2zé
+iű2ző
+iva2csal
+iva2cs1e
+1i2vadé
+iva2r1ai
+iva2raj
+iva2re
+iva2rin
+iva2rol
+iva2ró
+ivar1s
+iva2t1a2n
+iva2t1e2
iva2tin
+iva2tol
+iva2t1ó2
+iva2t1ö
1i2vás.
-1i2vot
-ix1eg
-ix1in
-ix1p2
-iz1áll
-izene2
-ize2n1é
-izen1n
+1i2vásb
+1i2vásé
+1i2vásn
+1i2vásr
+1i2váss
+i2ve.
+1ivot
+ivókész1
+ivós2
+ivőé2
+iv2ré
+i2x1ab
+i2x1ad
+i2x1an
+i2x1ar
+ix1as
+i2x1ág
+ix1bl
+i2x1ef
+i2x1eg
+i2x1ex
+i2x1ép
+ix1fr
+i2x1im
+i2x1in
+i2x1io
+i2x1ir
+i2x1is
+ixi2t
+i2x1ob
+i2x1op
+ix1öd
+ix1ös
+ix1őr
+ix1ős
+ix1pl
+ix1pr
+i2x1új
+i2x1ül
+iz1akn
+izala2g1
+iz1alk
+izas2
+iza1sp
+iz1árny
+iz1bl
+ize2d1á2
+ize2d1ék
+iz1egy
+i2z1e2lem
+izele2tel
+i2z1e2lér
+i2z1e2lőí
+iz1ember
+izene2g
+izen3n
ize2s1á2
-1i2zél
+i2z1esemé
+i2z1ev
+i2zéd
+i2z1ég
+1i2zéj
+1i2zék
+i2zél
+i2z1é2p
+1i2zésí
+iz1fl
+1izgal
+1izgatot
+i2z1iga
+i2z1igé
+iz1inf
+iz1int
+iz1iro
+i2z1isk
+i2z1ism
+izi1s2p
+1izmok
+1izmuk
+izmus1s
1izmú
-1i2zom.
-2izs
-iz1út
-1i2zül
+iz1okt
+1i2zolá
+izo2m1a
+izo2mál
+1i2zomb
+1izomé
+1izomf
+1i2zomm
+1i2zomn
+1i2zomr
+1izoms
+1i2zomt
+1izomz
+izo1p2
+i2zos
+izo1szta
+1izotó
+izó2d1a2
+iz1órá
+iz1pl
+iz1pr
+i2zs1ad
+izsa2ik
+i2zsakn
+i2zs1all
+izs1ara
+izsa3u2tók
+iz4s1ág
+i2zs1ál
+i2zsec
+i2zs1embe
+i2zsev
+izsé2t
+izs1éte
+i2zsil
+i2zs1imp
+izs1ist
+i2zsita
+i2zsiz
+iz3sor
+i2zs1ő
+izs1s
+iz3str
+i2zs1ül
+iz3sze
+iztos1s
+iz1udv
+izura1
+iz1ú2t
+i2z1ü2g
+i2z1üt
+i2z1ü2z
+1izzi
1izzí
-1izzó
+1izzot
2í.
í1a
í1á
-í2d1a2
-íde2
-íd1el
-í2d1é2
+íba2l1
+í2bis
+íbo2r1as
+ícius1s
+íd1a2c
+íd1a2d
+íd1a2l
+ídala2g1
+íd1a2n
+íd1a2v
+íd1a2z
+íd1ág
+íd1ál
+íd1á2r
+íd1át
+íd1bl
+íd1e2g
+íd1e2l
+íd1e2m
+í2d1é2g
+í2d1él
+í2d1ép
+í2d1ér.
+í2d1érz
+ídi2g
+í2d1iga
+í2d1igé
+í2d1in
+í2d1i2r
íd1ív
+í2d1ol
+í2d1om
í2d1os
+íd1ös
+íd1ő2r
+íd1pr
+íd1st
+í2d1ud
+í2d1ug
+íd1új
+íd1üg
+íd1ün
+íd1üz
+íd3zá
+íd3zs
í1e
í1é
-íg1a2g
-í2g1e2
-í2gé
-í2g1o2
-í2g1ö
+íé2le
+í2g1a2g
+íg1e2p
+íge2s
+í2g2ér
+í2g1op
+íg1tr
ígyá2
-ígyász1
í1i
+íi2ro
í1í
-í2j1ác
-íjá2t
+í2j1a2dá
+í2j1a2dó
+í2j1a2j
+í2j1akc
+í2j1a2l
+íj1any
+í2j1a2r
+í2j1a2u
+í2j1á2c
+í2j1á2g
+í2j1árá
+í2j1áre
+í2j1árt
+í2j1áru
+1í2jás
+íjá2sze
+íj1ászka
í2j1áta
-íji2
-íj1ig
-íj1in
+í2j1á2te
+í2j1áth
+í2j1átl
+íjá2tos
+í2j1átt
+í2j1átu
+í2j1átv
+í2j1á2z
+íj1e2g
+íj1e2l
+íjel2i
+íj1e2m
+íj1en
+íj1e2r
+íj1e2s
+íj1ép
+íjé2r
+í2j1ére
+íj1fr
+í2j1i2d
+í2j1im
+í2j1int
+í2j1ir
+íjirá2
+íj1íg
+íj1ín
+íj1kr
+í2j1o2d
+í2j1ok
+í2j1ol
í2j1os
-í2j1ö2
-í2jü
-ík1a2l
-ík1es
-í2k1i2
-íkké2
-í2k1ü2
-ílás1s
+í2j1ot
+íj1ön
+íj1ös
+íj1ö2v
+íj1öz
+íj1pl
+íj1pr
+íj1sk
+íj1sp
+íj1st2
+í2j1ug
+í2j1u2t
+í2j1út
+íj1üg
+íj1ü2t
+í2k1abl
+í2k1a2c
+í2k1a2g
+í2k1a2l
+í2k1an
+ík1ar
+íka2s
+ík1asz
+ík1a2v
+í2k1áb
+í2k1ág
+ík1ál
+í2k1á2r
+í2k1eg
+í2k1e2l
+ík1em
+í2k1es
+ík1ev
+í2k1é2k
+í2k1ér.
+í2k1érb
+í2k1é2rő
+ík1fr
+í2k1i2d
+í2k1ing
+í2k1i2r
+ík1ín
+ík1ír
+ík1k2r
+í1k2lu
+ík1oll
+í2k1op
+í2k1orn
+í2k1orr
+í2k1ors
+íkö2l
+í2k1ö2v
+ík1pl
+ík1pr
+ík1sp
+ík1sz2
+í2k1ug
+í2kuni
+í2k1u2r
+í2k1u2t
+í2k1ú2t
+ík1ü2v
+íl1aj
+íl1a2k
+íl1a2l
+í2l1á2g
+ílási2
+ílá2s1ik
+ílás3s
+ílá2s3z
+í2l1át
+íl1bl
+íl1br
íl1e2g
+í2l1érz
+íli2as
+í2l1i2m
í2l1i2r
-ílta2
-íl2tag
-íl2t1e2
-ím1a2d
-ímfe2
-ím1i2r
-ím1i2v
-í2m1í2
-í2m1o2
-ímok1
-í2n1a2r
-í2n1a2u
+í2l1is
+íl1í2r
+íl1í2v
+íl1kr
+íl1ös
+íl1ö2z
+íl1st
+íltá2
+íl2t1árk
+íl2t1áro
+íl2t1árt
+íl2t1e
+íl2t1é2
+í2l1u2r
+ílu2sab
+ílu2se
+ílus3s
+ílu2s3z
+íma2n
+íma1p
+í2m1á2l
+ímá2ris
+ímás1s
+ím1bl
+ím1b2r
+ím1dr
+í2m1e2g
+ím1elí
+í2m1elm
+íme2r1a2
+íme2r1á
+íme2reg
+ím1e2rő
+í2m1esem
+í2m1e2v
+í2m1é2het
+í2m1é2k
+í2m1ép
+í2m1ér.
+í2m1é2ré
+í2m1é2rő.
+í2m1é2rői
+í2m1érr
+í2m1érte
+í2m1érté
+í2m1i2d
+ími2g
+í2m1iga
+í2m1igé
+í2m1ill
+í2m1ind
+í2m1inf
+í2m1ira
+í2m1is
+í2m1i2v
+ím1ír
+ím1kr
+ím1o2k1
+ím1ol
+ím1on
+ím1o2p
+ím1os
+ím1ök
+ím1ö2l
+ím1ös
+ím1öt
+ím1ő2r
+ím1p2r
+ím1sp
+ím1st
+ím1u2r
+ím1u2t
+í2m1üg
+í2m1ünn
+í2m1üt
+í2n1ab
+ín1a2cé
+ína2d
+ín1ada
+ín1adá
+ín1ado
+í2n1a2g
+í2n1a2j
+í2n1aka
+í2n1akk
+ín1a2la
+ín1alj
+ín1alk
+ín1ana
+ín1a2ny
+í2n1a2p
+í2n1a2rá
+í2n1arc
+ín1ass
+ín1atl
+ín1att
+í2n1au
í2n1az
-ín1árn
+ín1ábr
+í2n1á2c
+í2n1ág
+í2nálhaj
+í2n1álm
+í2n1á2p
+ín1á2t1a2
+ín1átc
+ín1áte
+ín1átf
+ín1áth
+ín1átl
+ín1átm
+ín1átt
+ín1átv
+í2n1á2z
+ín1bl
+ín1br
+ín1d2r
+í2n1ef
+í2n1e2g
+í2n1e2ke.
+í2n1elc
í2n1e2le
+í2n1elh
+í2n1elj
+í2n1elk
+í2n1ell
í2n1elm
-í2n1észl
-íni1k2
-í2n1il
-ín3n
-ín1ol
+í2n1elny
+í2n1e2lo
+í2n1elö
+í2n1e2lőh
+í2n1elr
+í2n1eltá
+í2n1elto
+í2n1elvá
+í2n1e2mel
+í2n1eml
+í2n1e2mu
+íne2n
+í2n1ene
+í2nesd
+í2n1e2sz
+í2n1e2vé
+ín1ég
+íné2l
+í2n1éle
+ín1élé
+ín1élő
+ín1élt
+í2n1é2p
+í2n1ér.
+í2nérd
+í2n1éri
+í2n1érl
+í2n1érm
+í2n1érü
+íné2sza
+íné2szer
+íné2szint
+íné2szo
+í2n1éte
+í2n1é2ven
+ín1f2r
+ín1g2r
+íni2g
+í2n1iga
+í2n1igé
+í2n1i2ko
+í2n1ill
+ín1ind
+í2n1inf
+í2n1ing
+í2n1int
+1í2nio
+ín1i2rá
+í2n1iro
+í2n1ism
+í2n1i2z
+ín1íz
+ín1k2l
+ín1k2r
+ín1k2v
+ín3nyú
+í2n1ob
+í2n1ol
+í2n1op
í2n1or
-í2n1ö
-ín1s2
-ín1u2t
-ín1üt
+í2n1osz
+ín1ó2l
+ín1ön
+ín1ör
+ín1ös
+ín1öt
+ín1ö2v
+ín1ö2z
+ín1pl
+ín1pr
+ín1ps
+ín1s2k
+ínso2k1
+ín1s2p
+ín1s2t2
+ín1sz2
+ín1t2r
+ín1ug
+ín1új
+í2n1üd
+í2n1ü2g
+í2n1ült
+í2n1ü2t
+í2n1ü2v
+íny1e2c
+íny1e2g
+íny1el
+íny1e2r
+íny1ing
í1o
í1ó
+íó2vo
í1ö
í1ő
-í2r1a2d
+í2p1a2g
+í2p1a2n
+í2p1álc
+í2p1él
+ípés3s
+í2p1i2z
+íp3ro
+í2p1uj
+ípu2san
+ípus3s
+ípus3z
+ír1a2dó
+ír1akc
+ír1akn
+ír1akt
+ír1a2la
+ír1alj
ír1alk
-í2r1ar
+íra1pl
+íra1pr
+ír1arc
+í2r1a2u
+í2r1ábr
í2r1á2g
-ír1áll
+í2r1á2p
ír1ár.
+ír1árak
+í2r1á2ro
ír1á2ru
+í2r1ásás
+írá2se
+íráskész1
írás3s
-1í2rász.
-1í2rászat.
-1írdáb
-í2r1eg
-í2r1er
+í2rász
+ír1á2t1a
+ír1á2t1e2
+í2r1áth
+ír1áts
+ír1átv
+ír1áza
+ír1bl
+ír1br
+ír1d2r
+ír1e2dé
+í2r1e2g
+í2r1e2kés
+í2r1e2l
+írel1a
+í2r1ember
+ír1eml
+ír1emu
+íre2n
+ír1ene
+í2r1e2r
+í2r1esem
+í2r1e2ső
+í2r1eszk
+í2r1ev
+í2r1é2g
+í2r1éj
+í2r1é2k
í2r1é2l
-írfe2
-ír1g2
-írin2
-íri2o
+í2r1ép
+í2r1é2ri
+í2r1és
+í2r1é2te
+ír1évh
+ír1f2r
+ír1gl
+ír1g2r
+íri2g
+í2r1iga
+ír1iko
+í2r1ill
+í2r1im
+ír1ind
+í2r1inf
+í2r1inj
+ír1ins
+í2r1int
í2r1i2p
-í2r1ir
-í2r1í
-ír1k2
-ír1old
-ír1oll
-ír1or
-ír1ös
-írs2
-ír1sp
-ír1t2r
+ír1ira
+í2ris
+íri2sz1á
+í2r1i2z
+ír1ín
+ír1ír
+ír1ív
+ír1í2z
+ír1k2l
+ír1k2r
+ír1kv
+1írnok
+í2r1o2b
+1írog
+í2r1okl
+í2r1okm
+íro2l
+í2r1ola
+í2r1old
+í2r1olv
+í2r1o2r
+í2r1osz
+í2r1o2v
+í2r1o2x
+íróá2
+í2ródj
+í2ródo
+í2ródó
+í2ródt
+í2róí
+író1p2
+író1s2p
+író1sz
+írót2
+író1tr
+ír1ön
+ír1ör
+í2r1ös
+í2r1ö2z
+í2r1ő2r
+ír1ő2s
+ír1p2l
+ír1p2r
+ír1sh
+ír1s2k
+ír1s2p
+ír1s2r
+ír1s2t
+írsz2
+írszt2
+ír2t1ag
+írt1alap
+írt1é2te
+írtha2
+ír1tran
+ír1tro
+ír2t1u2r
+íru2n
+í2r1und
+í2r1uni
+í2r1u2r
+íru2s1e2
írus3s
-í2r1ú
-í2r1üg
-í2sz1a
-í2sz1á
-í2szeb
+í2r1u2t
+í2r1új
+í2r1úr
+í2r1ú2s
+í2r1útj
+í2r1útn
+í2r1ú2to
+í2r1útr
+í2r1útt
+í2r1ü2g
+írü2l
+ír1ür
+ír1ü2v
+í2r1üz
+ír1ű2z
+ís2po
+ís2tí
+ísz1aj
+ísza2k
+íszak1o
+ísz1a2l
+ísz1as
+ísz1at
+ísz1au
+í2sz1á2
+í2sz1eb
+í2szedé
í2sz1e2g
+í2sz1e2lem
+í2sz1ell
í2szeln
-í2szelő
-í2szelv
-í2sz1e2m
+í2sz1e2lő
+í2sz1elv
+í2sz1emb
+í2sz1e2mel
+í2sz1eml
+í2sz1erk
+í2szég
+í2sz1é2l
+í2sz1é2p
+ísz1érem
+í2sz1ért
+í2sz1étk
+ísz1g2
+íszi2
+í2sz1id
+í2sz1in
+í2szír
+í2sz1ív
+ísz1k2
í2sz1o2
-í2sz1ö
-í2sz1ő
+í2sz1ó2
+ísz1öl
+ísz1ön
+í2sz1ő2
+ísz1p2
ísz3s
ísz1tr
-íszü2
-í2sz1ül
-í2sz1ün
+í2sz1u
+í2sz1ú
+íszü2l
+í2sz1ülé
+í2szünn
+í2szüt
+ísz1z
+íta3u2
+ítá2s1á2g
+íté2k1a2l
+íté2k1e2l
+1í2tél
+íté2sa
+íté2s1ég.
+íté2s1é2gé
+íté2s1égr
+íté2sza
+íté2szá
+íté2szo
+ítész3s
+ítóa2
+ító1f
+ítógé2p1é2s
+ító1p2
+ító1sp
+ító1sta
+ítót2
+ító1tr
+ít2ré
+ítus3s
í1u
í1ú
í1ü
+íü2dü
í1ű
-íva2l
-ív1ala
-í2varc
-ív1árf
-ív1eg
-íve2lem
-ív1elté
+í2v1a2d
+ív1a2já
+ív1ajk
+ív1ajt
+í2v1a2la
+í2v1alj
+í2v1a2na
+ív1ang
+í2v1anó
+í2v1a2ny
+ív1arc
+ív1a2ri
+í2v1aszt
+ív1ábr
+í2v1á2g
+í2v1ál
+ív1á2rad
+í2v1á2ram
+í2v1árk
+í2v1árn
+í2v1árt
+í2váru
+ívás3s
+ívá2s3z
+ív1áta
+ív1bl
+ív1dr
+íve2c
+í2v1e2dz
+í2v1e2g
+í2v1ej
+í2velek
+ív1e2lemb
+ív1e2leme
+ív1e2lemé
+ív1e2lemr
+í2velg
+ív1e2lől
+í2v1ember
íve2n
-í2v1e2re
+í2v1end
+í2v1ene
+íve2r
+ív1ere
+ív1eré
+ív1erő
+í2v1esemé
+í2v1esz
+í2v1e2tet
+í2v1é2g
+í2v1é2k
+í2v1é2le
+í2v1élm
+í2v1é2lő
+ív1élt
+í2v1ép
+í2v1ér.
+í2v1érd
+í2v1é2ri
+í2v1érr
+ív1érté
+í2v1érv
+í2v1érz
+í2v1é2te
+ív1fr
+í2v1i2d
+ívi2g
+í2v1iga
+ívi2k
+ív1ike
+í2v1ill
+í2v1im
í2v1in
-ívi2z
-ív1izo
-ív1ol
-í2v1ö
-ív1üg
+í2v1i2p
+ív1iro
+ívi2s1el
+ívi2ses
+ívis1s
+ív1iva
+í2v1i2z
+ív1kl
+ív1kr
+í2v1ol
+í2v1op
+í2v1or
+í2v1osz
+í2v1ox
+ívó1s2p
+í2v1öb
+í2v1ö2r
+í2v1ös
+ív1öv
+í2v1ö2z
+ív1pl
+ív1pr
+ívren2de
+ív1sk
+ív1sp
+ív1st
+ívsz2
+ív1szk
+ív1tr
+í2v1ug
+ív1ult
+í2v1ur
+í2v1u2t
+ív1új
+ív1út
+í2v1üg
+í2v1ür
+í2v1üt
+í2v1ü2v
+í2v1üz
+íz1ab
+íz1a2d
íz1a2g
+íz1aj
íz1a2k
íz1a2l
-íz1ág
+íza2n
+íz1ar
+íz1a2u
+íz1á2g
íz1ál
+íz1á2p
íz1á2r
-íz1á2t1
+ízár1ó2
+ízás1s
+íz1á2t
+ízát1a2d
+ízát1á
+ízát1e2
+íz1bl
+íz1d2r
í2z1ef
-í2z1eg
-í2zei.
-íz1ell
-íz1eln
-íz1elv
-í2z1e2m
-íze2r
-íz1ere
-í2z1esz
-íze2z
-í2z1eze
-í2z1ezrei
+í2z1e2g
+í2z1ej
+í3zelá
+íze2l1el
+íze2lö
+íze2lő
+í2z1emel
+í2zemé
+íze2n
+í2z1ene
+í2z1e2r
+1í2zesí
+í2z1e2sz
+í2z1e2ti
+í2z1eu
+í2z1e2v
+í2z1ex
+í2z1e2z
+í2z1ég
+íz1ékk
+í2z1é2l
í2z1é2p
í2z1ér.
+í2z1érb
+í2z1érd
+í2z1érel
+í2z1é2ren
+í2z1érh
+í2z1é2r1i
+í2z1érk
+í2z1érm
+í2z1érn
+í2z1érr
+í2z1érs
+í2z1érte
+í2z1érté
+í2z1értő
+í2z1érv
+í2z1érz
+ízé2sa
+íz1ész
+íz1évi
+íz1fr
+íz1gl
+íz1icc
+ízi2g
+í2z1igé
+íz1iko
í2z1ill
-ízi1sp
-í2z1i2szo
-í2zivás
-í2zí
-ízo2
+í2zimá
+í2z1imi
+í2z1imp
+í2z1ind
+í2z1inf
+í2z1int
+ízióé2r
+ízi2óéra
+ízi2óto
+í2z1i2pa
+í2z1ira
+íz1irá
+ízi2so
+ízi2sza
+ízi2szo
+ízi2szó
+í2z1i2ta
+í2z1i2vá
+íz1í2v
+íz1íz
+íz1kl
+íz1k2r
+ízo2k
+íz1on
+íz1or
íz1os
-íz1ó2r
-í2z1ö2
-íz1p2
-íz3sa
-íz3sá
-íz3su
-íz3sú
+íz1ó2rá
+íz1öb
+íz1öd
+íz1ök
+íz1ö2l
+íz1öm
+íz1ön
+íz1ör
+íz1ös
+íz1ö2v
+íz1öz
+ízpen1
+íz1pf
+íz1pl
+íz1p2r
+í2zsa2
+ízs1al
+ízs1as
+ízs1au
+íz4s1ág
+ízsá2r
+ízs1áro
+íz3sáv
+íz3seb
+í2zs1e2l
+ízse2s
+ízs1ese
+í2zs1in
+í2zs1it
+íz3sí
+í2zso
+ízs1ok
+íz3sor
+í2zs1ó2
+í2zsö
+ízs1s
+íz3str
+í2z3su
+í2zsú
íz3sz
-í2zü
-íz1ü2g
-1í2zű
+íz1t2r
+í2z1ug
+í2z1uj
+ízu2me
+ízu2m1i
+íz1und
+í2z1u2r
+í2z1ut
+íz1úr
+íz1ú2t
+í2z1ü2g
+í2züle
+í2z1ür
+í2z1üs
+í2z1üt
+í2z1üv
+í2z1ü2z
+í2zűe
+í2zűn
+1í2zűr
+í2zűv
+2j.
1ja
-ja2dag
-ja2k1ev
-ja2kiz
-ja2k1í
-ja2lap
-jan2s
-j1a2ny
-jao2
-jas1as
+j1a2cé
+2j1a2dag
+2j1a2dal
+ja2datá
+2j1a2dato
+2j1adm
+2j1a2dom
+2j1a2dot
+ja2dóh
+ja2dós
+ja2dót
+ja2dóv
+ja2dóz
+ja2dus
+ja1f2r
+ja2ga.
+2j1agg
+2j1a2gi
+2jakad
+ja2kadé
+ja2k1ál
+ja2k1á2p
+ja2k1árn
+2j1akci
+ja2k1ec
+ja2k1el
+ja2k1e2m
+ja2kes
+jak1ére
+ja2k1éri
+2jakf
+ja2k1im.
+ja2k1iz
+ja2k1í2r
+jak1k2
+2j1akku
+jako2v
+jak1ovi
+ja2kók
+ja2k1ölts
+ja2k1ös
+2j1akro
+jakt2
+2j1akt.
+2j1akti
+2j1aktu
+2j1alg
+2j1alk
+2j1all
+2j1alm
+jam2be
+2jambu
+ja2mes
+2jana.
+2jana2i
+ja2nal
+ja2nat
+2j1a2no
+jan2sze
+jan2szü
+ja2nya
+ja2ran
+2j1a2rá
+2j1arc
+ja2rom
+2j1a2szás
+2j1atk
+2j1atró
+ja2ur
+ja2uto
+2javat
+ja2xi
+ja2zon
1já
+já2ar
2j1á2bé
-2j1á2ga
+2j1ábr
+2j1ág.
+2j1á2ga.
+2j1ág1a2d
+2j1á2gai
+2j1á2gak
+2j1á2gas
+2j1á2gat
+2j1á2gaz
+2j1á2gá
+2j1ágb
+2j1ágf
2j1ágg
+2j1á2gi
+2j1ágk
+2j1ágr
+2j1á2gy
+jáí2r
2j1áll
-2jánd
+já2n1e
+já2nék
2jánl
-2j1á2p
+já2po
+2j1á2rada
+2j1á2rai
2j1á2rak
-j1á2rasz
-2j1árr
-j1árus
+2j1á2ram
+já2rar
+já2r1av
+2j1á2rán
+járás3s
+járá2s3z
+2j1á2rát
+2j1á2ráv
+járe2
+já2r1em
+já2res
+já2rér
+2j1á2rig
+já2r1is
+2j1árki
+2j1árko
+2j1árny
+2j1á2ron
+já2r1ot
+já3ró
+já2rő
+2j1ártal
+2j1ártás
+2j1á2ruk
+2járus
+j1árut
+2j1árvál
+2j1árz
+já2s1ad
já2sal
-já2se
-jás3s
-já2t1ér
-2játne2
-já2t1osz
-jdona2
-jdonat1
-j1d2r
+já2san
+já2s1ág
+já2s1á2rai
+já2s1árak
+já2sás
+já2s1e2
+já2sit
+já2s1í
+já2s1ol
+2j1á2só
+já2sö
+jást2
+já2s1ü2
+já2sz1al
+jásze2
+já2szis
+já2sz1okta
+jász1ói
+jász1ón
+jász1ó2r
+ját1a2dó.
+ját1a2dók.
+ját1a2dón.
+ját1a2dót
+2j1á2tal
+já2t1á2
+2j1átáz
+játék1e2
+2j1átfe
+2j1áthá
+2j1á2ti
+2j1átír
+2j1átlé
+2j1átm
+ját1osz
+2j1á2t1ö
+2játszű
+2j1á2tü
+2j1átvé
+2j1átvi
+já3zs
+jba2l1
+jb2lo
+jb2ri
+jb2ró
+jbű2n1ü2
+jc3ho
+jcsapá2
+jcs1s
+jdo2nal
+j1d2rá
+j1d2ro
+j1d2ru
+jdúköz1
1je
-2jegé
+jea2l
+jea2n
+je2bé
+2j1e2dén
+2j1e2dz
+jee2n
+je1f2r
+2jeged
je2gés
jegész1
-jegyá2
-je2gy1el
+je2gyeg
+je2gyel
+jegy1els
+jegy1elv
+2j1e2gyesí
+je2gy1é2k
je2gy1in
-je2gyo
-je2l1a2
+je2gy1o
+je2győ
+je2gyu
+je2gy1ú
+je2gy1ű2rű
+j1ekcé
+je1kri
+jek2t1a2
+jek2t1á2r
+jek2t1e2l
+jek2ter
+je2laj
+je2l1an
+je2l1ap
+je2lar
+je2lav
+je2laz
jelá2
-je2l1át
-je2l1ele
-je2ler
-je2l1e2si
+je2l1áb
+je2lág
+je2lál
+je2l1ár
+je2l1át1
+je2láz
+jel1e2gy
+je2l1e2l1e2v
+je2l1elk
+je2l1ell
+je2l1e2lőá
+je2l1e2lőb
+je2l1els
+je2l1emel
+2jelemé
+je2l1eml
+2j1e2lemz
+je2l1eng
+je2l1e2r
+jel1esés
+jel1esik
+je2l1esni
+je2l1e2ső
+jel1este
+je2l1esz
+je2l1etet
+jel1evo
+je2lég
+je2l1éj
+je2lél
+je2l1ép
+je2lérte
+je2l1ige
+je2lim
+je2l1inf
+je2l1ing
je2l1int
je2l1í2
-2j1ellá
-je2l1o
+2j1ellen
+je2l1o2
+je2l1öv
+je2lőa
+2j1e2lőfe
+je2lőí
+2j1e2lőtu
+jel1p2
+2jelszá
+2jelszo
+2j1eltett.
+2jeltér
je2lu
+je2lú
+2j1emba
+2j1ember
+2j1e2mel
je2mu
je2n1á
-je2no
+jen1d2
+je2n1e2ke.
+je2n1el
+je2ner
+jene2s
+je2n1esz
+je2n1in
+je2n1o
+je2n1ő2re
+je2n1ős
+je2n1ü
+je1p2r
+2j1erd
+je2red
je2ró
-je2sa
-je2s1á
-je2sem
-je2s1es
+2j1e2rő
+je2s1a
+je2s1emb
+2j1e2setb
+2j1e2sett
+je2s1ér
+je2ső
+jest2
+je1sta
+je1str
je2su
-je2süv
+je2s1ü2v
+jes3zac
+je2t1am
je2tál
-je2t1el
-je2t1o2
-je2tu
-jeu2
-2j1ex
+jet1ell
+je2t1em
+je2t1ék
+je2t1o
+je1tra
+je2tun
+je2tut
+jeu2r
+2j1e2vő
+jezőkész1
1jé
-jé2ga
+2j1ébr
+jé2g1a2
jé2g1á2
-jége2
-jé2g1eg
+jégár1a2d
+jé2gec
+jé2ged
+jé2g1e2k
+jé2g1el
+jé2g1em
+jé2g1erk
+jé2g1es
+jé2get
+jé2gép
+jé2g1ér.
+jé2gés
jég3g
-jé2gi
+jégi2
+jé2g1id
+jé2gigé
+jé2gim
+jé2g1is
jé2g1o
-jéne2s
-jé2n1i
-2j1é2p
+jé2gó
+jé2gö
+2jé2gő
+jé2g1u2
+jé2gú
+2j1é2hen
+2j1é2hes
+2j1éhs
+jé2k1os
+jé2kü
+2j1é2le
+jé2lő
+2j1élt
+jé2nad
+jé2n1ess
+jé2n1é2g
+jé2nil
+jé2no
+jé2nú
+jé2pí
+jé2pü
+2j1ér.
+2j1érb
+2j1érd
jé2reg
+2j1é2ren
+2j1é2ré
+2j1érh
+2j1é2ri
+2j1érk
+2j1érl
+2j1érm
+2j1érn
+2j1érr
+2j1érte
+2j1érté
+2j1értő
+2j1é2rü
+2j1érv
2j1érz
-jfeles1
-jfölös1
-j1g2r
+jé2tel
+2j1étk
+2j1étt
+2j1év.
+2j1évb
+jé2ve.
+2j1é2vek
+2j1é2vet
+jé2vén
+jé2vér
+jé2vét
+j1évh
+j1é2vi
+j1évk
+2j1évn
+2j1évr
+j1évt
+2j1é2vü
+j1évv
+jfeles1s
+jf2le
+jf2lo
+jf2ló
+jfölös1s
+jf2ra
+jf2re
+jf2ri
+jf2rí
+jf2ro
+jf2rö
+jfu2na
+j1g2le
+j1g2ló
+jg2ru
+jhá2r1e
1ji
-j1il
-2j1i2p
+ji2do
+j1i2dő
+2j1i2ga
+2j1i2gé
+ji2je
+2j1ikr
+2j1ill
+ji2ma
+ji2má
+ji2mi
+2j1i2na.
+ji2náb
+2j1ind
+2j1inf
+2j1ing
+2j1inj
+2j1ins
+2j1inte
+2j1inté
+ji2on
+ji2pa
+2j1i2rat
+2j1i2rá
+2j1i2ro
+2j1irr
+2j1irt
+2j1isk
2j1ism
+2j1ist
2j1i2ta
-2j1i2v
-2j1i2z
+2j1i2vá
+2j1i2vó
+ji2zé
+ji2zo
1jí
+jí2gé
+jí2rá
+jí2ró
jítókész1
-j1í2z
-j2jí
-jjob2
-j1k2l
-jk1őr
-jk2ré
-jlás1s
-jl1át
-jnal1u
+jí2ve
+jí2vé
+jí2vó
+jí2ze
+jí2zé
+jí2zü
+jí2zű
+j2j1alj
+j2j1a2z
+jjá1s
+jje2lesé
+jje2lesi
+jje2lest
+jje2l1ül
+jj1e2r
+j2j1im
+j2j1iz
+jj1ív
+jj1íz
+j2j1ol
+j2j1os
+jj1pr
+jj1üg
+jka1pr
+jk1ard
+jkau2
+j2k1e2g
+j2k1e2lő
+j2k1e2s
+jké2p1e2ké
+jkia2
+jkiá2
+j2k1id
+jkie2
+jk2la
+jk2lá
+j1k2li
+j1k2lo
+jkme2
+j2k1old
+jko2r1á2s
+jko2r1in
+jk1órá
+jk1pl
+jk1pr
+j1k2ré
+j1k2ri
+j1k2rí
+jk1st
+j2k1u2s
+jk1üg
+jk2va
+j1k2vó
+j2l1abl
+jl1a2da
+j2l1a2lap
+j2l1all
+j2l1ar
+jla2t1e2
+j2l1azo
+jlás3s
+jl1á2t1a
+jl1átn
+jl1bl
+jl1e2gy
+jleí2
+jl1elé
+jl1ell
+jl1eln
+jle2t1é2te
+jlé2cel
+jlé2c3s
+j2l1év.
+jli2k
+jl1iko
+j2l1ind
+j2l1inf
+j2l1int
+jl1obj
+j2l1ol
+jlo2n1á
+jlo2ni
+j2l1ös
+jl1pr
+jl1sp
+jl1st
+jl1t2r
+jme2g
+jm1oká
+j2m1old
+jna2l1e
+jna2lég
+jna2lis
+jn1á2rá
+jn1á2ru
+jnév1a
+jn1ing
+jn1st
+jn1ü2g
1jo
-jo2g1ak
+jo2g1a2d
+jo2g1aka
jo2gal
-jo2g1ál
-jo2g1e
+jo2g1an
+jo2g1a2z
+jo2g1á2c
+jo2g1á2l
+jo2g1e2
jog3g
-jo2gin
+jo2g1í
+jo2g1ol
jo2g1or
+jo2g1osz
+jogó2
+jo2g1óv
+jo2gö
+jo2gő
+jo2gur
+jo2gü
+2j1o2koz
+2j1oks
+2j1okta
jo2laj
+jo2lim
joma2
-jo2mag
+jo2m1ag
jo2m1an
+jo2mar
+jo2m1as
+jo2m1á
jo2m1e2
-jo2n1i
-2jo2p
-joro2
-jo2se
+jo2m1é2t
+jo2mév
+jom1f2
+jo2mij
+jo2m1ik
+jo2m1is
+jo2m1iv
+jo2m1ol
+jo2m1or
+jo2mö
+jo2mő
+jom1p2
+jo2mü
+jo2mű
+jonc1c
+jon2ch
+jon2cil
+jon2c3s
+2j1ond
+jo2ób
+jo2pá
+jo2pe
+jo2r1ing
+2j1orr.
+jo2rü
+2j1osto
+2j1osz
+jo2ui
+jo2uk
+jo2ul
+jo2ur
+jo2ut
+jo2va
1jó
-jóa2
-jóá2
-jóle2s
-jó2l1eső
-jó2l1i
-jó2lö
-2jórár
-jó2s1e2
+jóa2k
+jóá2g
+jóá2r
+jó1bl
+jó1b2r
+jó2ce
+jó2dad
+jó2dak
+jód1all
+jó2d1a2n
+jóda2t
+jó2d1ato
+jóde2
+jó2del
+jó2dig
+jó2diz
+jó2d1ol
+jódó2
+jó2dór
+jó2dü
+jó2d3z
+jó1fl
+jó1kl
+jó1kro
+jó2l1e2s
+2j1ónn
+jó1p2r
+jó2rák
+2j1ó2ri
+jó2sal
+jó2sas
+jó2sál
+jós1árk
+jó2seg
+jó2sem
+jó2sén
+jó2sip
+jó2sis
+jó2s1o2do
+jó2sö
jós3s
-jó2tál
+jós1üld
+jó2s1ün
+jó2s3zár
+jó1t2r
1jö
-j1önt
+jö2dé
+jö2ko
+jö2lé
+2j1önt
+jö2re
+jö2rö
+j1ösv
+j1ötv
+2j1öv.
+2jöve.
+j1ö2vez
+2j1ö2vén
+jö2zö
1jő
-j1őr
-2j1ő2sö
-j1p2
-jra1s
-j1s2p
-jsza2ké
+j1őrl
+jő2rö
+2j1őrt
+jő2rü
+jő2ze
+jpárba2
+jp2la
+jp2le
+jp2re
+jp2ré
+jp2ri
+jp2ro
+jp2ró
+jra3d2
+jra1f
+jrai2
+jra1p2
+jra1s2
+jrau2
+jré2sz1e2l
+jré2szí
+jsa2v1e
+jsa2v1é
+jsa2vo
+jsa2v1ón.
+jsa2v1ó2r
+jság1g
+js2ho
+js2ká
+js2ki
+js2ni
+js2pe
+js2pi
+js2po
+js2pó
+jsp2r
+j1s2ta
+js2ti
+j1s2tí
+j1s2to
+j1st2ra
+j1st2ru
+j1s2tú
+jszabás1s
+jszá2l1a2da
+jszáraz1
+jszín3n
+jsz2k
+jszt2
+j2t1a2da
+jt1a2do
+jt1a2dó
jt1akn
-jt1akt
+jt1a2lap
jt1alk
-jt1aut
-jt1áll
-j2t1á2ru
-jt1á2t1a2
+j2t1all
+j2t1alv
+jt1a2nyag
+jta1p2
+j2t1a2pá
+jt1a2rom
+j2t1arz
+jta1sp
+j2t1atk
+j2t1a2ut
+j2t1ác
+jt1ága
+j2t1áll
+jtá2rai
+j2t1á2rak
+j2t1árka
+jtá2s3z
+jt1á2t1a
j2t1e2gy
-j2teleme
-jt1elt
+j2t1e2ke.
+j2t1e2leg
+j2t1e2leme
+j2telemz
+j2t1elf
+j2t1elh
+jt1eljá
+j2t1ell
+j2telmél
+j2t1e2lo
+j2t1e2lő
+j2t1elp
+j2t1elr
+j2t1els
+j2t1elv
+j2t1eml
+j2tener
+j2t1enz
+jt1e2red
+jt1e2rez
+j2t1erő
+j2t1e2tetőe
+jt1e2vés
+jt1evo
+j2t1e2vő
j2t1é2le
-j2t1ér
-j2t1id
-j2t1i2r
-j2t1i2z
+jt1élm
+j2t1érl
+j2t1érm
+jtés3s
+jt1fl
+jt1fr
+j2t1i2d
+jti2m
+j2timá
+j2t1imi
+j2t1imp
+jt1inf
+j2t1ing
+jt1int
+j2t1i2pa
+j2t1ir
+jti2s
+jt1isi
+j2t1izg
+jt1i2zo
+j2t1í2v
+j2t1í2z
+jt1kl
+jt1kr
+j2t1olda
+j2t1orjáb
+j2t1ors
jt1osz
-j1t2rá
-jtu2
+j2t1o2x
+jtóa2
+jtóé2ra
+jtó1p2
+jtó1s2po
+jtó1sta
+jtó1str
+jtó1sz
+jtó1tr
+jt1ödé
+jt1öng
+jt1öss
+jtőa2
+jtőe2
+jtőé2
+jtő1s2p
+jt1pl
+jt1pr
+j1t2ran
+jtrádi2
+j1t2rág
+jt2ri
+j1t2roj
+jt2róf
+jt1sp
+jt1st
+jt1t2r
+j2t1udv
+j2t1und
+jt1utá
+j2t1új
+j2t1üg
+j2t1ü2l
+j2t1üt
1ju
+ju2ga
jugo1
-ju2hak
+ju2had
+ju2h1a2k
+ju2hal
+ju2h1a2n
+juha2ra
+ju2hat
+ju2hál
+ju2h1e2
+ju2h1éj
+ju2h1is
+ju2hor
+ju2hő
+ju2hü
+2jula
+2juls
+2jural
+ju2ru
+ju2sz1a2v
+ju2szim
+ju2sz1í2
+ju2tak
+2j1u2tál
1jú
+jú1fr
+jú2jí
+jújjáé3
+jú1pl
+jú1p2r
+jú1s2p
+jú1s2t
+jú2szó
+jú1szv
+2j1útb
+jú2ton
+2j1útv
1jü
-j1üg
-jü2l
-2j1ü2r
-j1ü2té
+jü2ge
+jü2gy
+jü2le
+jü2lé
+j1ü2lő
+j1ült
+jü2re
+jü2rí
+jü2rü
+jü2ta
j1ü2tő
-2j1ü2v
-2j1ü2z
+jü2ve
+jü2ze
1jű
-j2z1a2k
+jű2ri
+jű2ző
+j2z1abl
+j2z1a2d
+jza2j
+j2z1ajá
+jz1ajt
+jza2kad
+jz1akc
+j2z1a2l
j2z1a2ny
+j2z1ar
j2z1as
-jz1es
-j2z1is
-jz1k2
+jza2tan
+j2z1ál
+j2z1á2rad
+j2z1á2rán
+j2z1e2l
+j2z1em
+jze2r
+jz1eré
+j2z1es
+j2z1él
+j2z1érté
+jz1fr
+jzi2g
+j2z1igé
+j2zill
+j2z1int
+j2z1i2r
+j2z1isk
+j2z1ism
+jz1k2l
+jz1k2r
+j2z1ob
+jz1okta
+j2z1olda
+j2zolvas
+j2z1osz
+j2z1ó2d
+j2z1ó2r
+jzó1s2
+j2z1ös
+j2z1öt
+jz1pl
+jz1p2r
+jz3sab
+j2zs1a2l
+j2zs1ál
+jzscsa2p1
+j2zs1eg
+j2zsen
+j2zs1er
+j2zs1in
jz3sín
jz3sor
-jz3sz
+j2zs1ö2
+j2zs1ő
+jzs1s
+j2zs1u2t
+jz3sza
+jz3szá
+jz3sze
+j2z1ut
+jz1ü2g
+2k.
1ka
-2k1abl
-2kacé
-ka2ch
-ka2dom
-2kadók
-kae2
-kag2
-ka1gr
-ka2iá
+kaa2d
+kaát1
+kaáta2
+kab2a
+2kabbah
+2k1abhá
+kabi2ná
+2k1ablak.
+2k1ablaka
+2kablaká
+2k1ablakb
+2kablakh
+2kablakk
+2k1ablakok
+2k1ablakon
+2kablakos
+2k1ablakot
+2kablakr
+ka1b2le
+ka1bre
+2k1abs
+ka2cél.
+ka2c3h
+kacs1á2g
+ka2cs1ús
+ka2cü
+ka2cz
+k1adap
+2kadál
+kadás1s
+2k1a2dot
+ka2dói
+ka2dój
+2k1a2dóso
+ka2dóu
+ka2dóz
+ka1d2rá
+kaegész1
+kae2l
+kae2r
+kaé2r
+ka1f2r
+ka2gan
+2k1agg
+ka1g2r
+2k1agy.
+ka2gyu
+kai2z
+2kajánl
+2k1ajk
+2k1ajtóh
+ka2kadé
+ka2kadó
kakas3s
-2k1alg
-kanális1
+ka2kác
+2k1akc
+ka1k2l
+ka2kó.
+ka1k2ré
+ka1kri
+2k1akt.
+2k1akti
+ka1k2va
+ka2lapa
+2kalapítv
+2k1alb
+kal1egy
+2k1alf
+2k1alj.
+2k1alji
+2k1alka
+2kalko
+2k1alle
+2k1alti
+kama2te
+2k1ambu
+kana2g
+ka2nalí
+2k1a2nam
+k1a2nat
+ka2n1e2g
+ka2n1el
2kang
+ka2nim
+ka2nio
+ka2n1iv
+ka2nol
+ka2nód
+2kante
+ka2nű
+2k1a2nya.
2k1a2nyag
-ka2óv
+2k1a2nyai
+ka2nyáb
+ka2nyó
+ka2óa
+ka2óá
+ka2óc
+ka2óe
+ka2óg
+ka2óha
+ka2óí
+ka2óko
+ka2ókr
+ka2óp
+ka2óü
+ka2óz
2kapád
-ka1pré
-2k1a2ras
-2karcú
-ka2rén
-ka2rig
-kar1ing.
-ka2rö
-ka2sem
-kasé2
-ka2séh
-ka2sor
-kasó2
-ka2s1ór
-kasü2l
-ka2tab
-ka2uto
-ka2vat
-kazá2
+ka2páto
+2kapp
+ka1p2re
+ka1p2ré
+2k1aprí
+ka1prof
+ka2r1a2d
+ka2rakk
+ka2r1a2kó
+kar1a2lap
+2k1arank
+ka2r1a2r
+kara2s
+2ka2rasz
+2karat.
+2karatn
+2karato
+ka2rau
+ka2r1ácsh
+ka2r1ácsn
+ka2r1ácst
+ka2r1ál
+2k1a2rány
+kar2c1el
+kar2dac
+kar2dál
+kar2dz
+ka2rel
+ka2rev
+kar1éke
+karé2kor
+ka2rél
+ka2r1éne
+karfe2l1
+ka2rid
+ka2r1i2ko
+ka2r1ikr
+ka2rind
+ka2r1ing.
+kar1ingb
+kar1inge
+kar1ingg
+kar1ingr
+ka2r1isk
+ka2r1ism
+kari2z
+ka2r1izo
+2k1a2roma.
+2karomá
+ka2ror
+kars2
+2k1arti
+ka2sag
+kaság1g
+ka2sál
+ka2sid
+kasi2p
+kas1ipa
+ka2siz
+ka2s1ol
+ka2s1ó2r
+ka1s2po
+kas3sze
+kas3szé
+2k1asszi
+2kasszony
+kas3sző
+kast2
+ka1str
+ka2sür
+kasz1ajt
+2kaszat
+ka2szág
+kat1ará
+ka2tél
+kat1iko
+kat1int
+ka2t1i2o
+2k1atká
+ka2tolda
+katrádi2
+ka1t2ri
+ka2tyá
+ka2ud
+2k1a2ul
+kau2n
+kau2r
+kau2s
+kau2ta
+2k1a2uto
+2k1autó.
+2kautób
+ka3utóc
+2kautóé
+2kautóh
+2kautói
+2k1autój
+2k1autók
+2kautóm
+2kautón
+2kautós
+2kautót
+2kautóv
+kaü2t
+kaü2z
+2k1a2vat
+2k1a2zon
1ká
-ká2csin
+2kábé
+2k1ábr
+ká2cak
+ká2ce
+2ká2c3h
+ká2có
+ká2c3sar
+ká2csat
+ká2cse
+ká2cs1ék
+ká2csip
+ká2csis
ká2c3sor
-2k1á2g
-ká2l1e
-2k1állam.
-2k1államr
-ká2nye
-k1á2rad
-ká2rak
-k1á2ram
+ká2csö
+ká2cső
+ká2cü
+ká2dab
+ká2dar
+ká2d1ác
+ká2dát
+ká2dil
+ká2dí
+ká2d1ö
+ká2d1ü2
+ká2d3z
+ká2fá
+2k1ág.
+ká2ga
+2k1ága.
+2kágacska
+ká3gacská
+2k1ágai
+2k1ágak
+2k1ágat
+2k1ágaz
+2k1á2gá
+2k1ágb
+2k1á2ge
+k1á2gé
+2k1ágg
+2k1ágh
+2k1á2gi
+2k1ágk
+2k1ágn
+2k1á2go
+2k1ágr
+2k1ágs
+2k1ágt
+2k1á2gu
+2k1á2gú
+2k1á2gy
+2k1á2hí
+ká2jö
+ká2jü
+ká2lág
+2kálái
+2kálák
+2kálán
+2káláv
+2káláz
+2k1álc
+k1áldo
+ká2l1e2
+ká2lén
+2kállamti
+2k1állap
+2k1állás
+kál2l1e2
+kállé2
+kál2lék
+2k1állí
+2k1állom
+ká2lü
+ká2lyod
+2k1á2mí
+2k1á2mu
+ká2n1ag
+ká2n1a2n
+ká2n1as
+ká2nem
+ká2n1is
+ká2n1ó2
+ká2ny1ag
+ká2ny1a2l
+ká2ny1a2n
+ká2nyap
+ká2nyar
+ká2ny1á2to
+ká2ny1e2
+ká2nyis
+ká2nyiv
+ká2nyö
+2k1á2polá
+ká2poló
+2ká2rad
+ká2r1a2g
+2k1á2rakr
+ká2rakt
+kár1akta
+kár1aktá
+ká2r1a2l
+2k1á2ram
+ká2r1a2p
+ká2rar
+ká2ras
+kár1ass
+2k1á2rat
+ká2raz
+kár1azo
+kár1áll
+ká2r1á2z
+kár1d2
ká2r1e2
-ká2r1ér
-ká2r1oko
-ká2s1e
-kási2
-ká2sir
-2k1á2só
-ká2sü
-kásza2
-kász1al
-kát1ad
+kár1éte
+2k1á2riá
+k1árká
+kárkié2h
+ká2r1old
+ká2r1osz
+ká2rö
+ká2rő
+kárpszi2
+kárpszic3
+kár1s2
+kárt2
+kár1tr
+ká2ruh
+ká2rü
+kás1ajt
+kás1ass
+ká2s1á2go
+ká2s1á2rai
+ká2s1árak
+ká2s1á2rá
+ká2s1árb
+ká2s1á2ro
+ká2s1árr
+ká2s1árv
+ká2s1árz
+2k1á2sásá
+2kásást
+ká2s1e2
+ká2s1i2k
+ká2sim
+ká2sis
+ká2sír
+káská2r
+ká2s1ol
+ká2s1ott
+ká2só
+ká2sö
+ká2ső
+kás1p
+kást2
+kás1tr
+ká2sut
+ká2s1ü2
+2k1á2száb
+ká2szár
+kás3zár.
+2k1á2szát
+ká2sze
+ká2szé
+ká2szis
+ká2sziv
+2k1á2szom
+ká2s3zü
+ká2tab
+2k1átad
+ká2taj
ká2tal
-2k1átt
-2k1átv
-k1b
+kát1a2la
+ká2t1a2n
+ká2tar
+ká2tau
+ká2t1á2
+2k1átbe
+ká2t1e2
+ká2tég
+k1átfo
+ká2tip
+ká2t1ir
+ká2tis
+ká2tí
+k1átló
+2k1átme
+ká2t1osz
+kátó2
+ká2tór
+ká2t1ö
+ká2tü
+k1átvá
+kba2l1
+kbé2rel
+kb2la
+kb2le
+kb2lo
+kb2rá
+kb2ri
+kb2ro
+kb2ró
+kci2ófa
+kci2ósi
+kci2óspe
+kc2lu
+kcsa2p1á2g
+kdi2al
+kd2ra
+kd2rá
+kd2re
+kd2ro
+kd2ró
+kd2ru
1ke
+kea2j
kea2k
-keá2
-kee2
+kea2l
+kea2n
+kea2r
+kea2s
+keá2l
+keá2r
+keá2t1
+2k1eb.
+ke2bei
+ke2bek
+ke2béd
+kecs1alj
+kecs1ón
+kecs1ó2r
+ke1d2ra
+keegyez1
+kee2n
+ke2ep
+kee2s
+2k1eff
+ke1fl
+ke1f2r
+2k1e2gér
kegész1
-ke2gya
+2kegyb
+ke2gyék
+ke2gy1in
+2k1egyl
+2kegyn
+ke2gyö
+2kegyr
+2kegys
ke2gyu
ke2gy1ú
+2kegyü
2k1e2ke.
-2k1elekt
+2k1e2kei
+2k1e2kek
+2k1e2kéé
+2k1e2kék
+ke1k2l
+ke1k2ré
+kek2sza
+2k1ekv
+2k1elad
+ke2l1an
+ke2l1a2t
+2k1elav
+ke2l1á2g
+2k1e2lef
+ke2lekc
+2k1e2lekt
+ke2l1e2l
+k1e2lemb
+2keleme
+2kelemé
+k1e2lemh
+2kelemm
+2k1e2lemn
+k1e2lemr
2k1e2lemz
+ke2l1e2pe.
+ke2l1e2pei
+kele2p1ü2
+ke2l1e2sé
+ke2l1esze
+kele2t1el
+kele2t1o
2keley
-2k1elf
-ke2l1os
+ke2l1é2k
+2k1e2lél
+kel1érh
+kelés3s
+kelé2s3z
+2k1elhel
+2k1elho
+kel1id
+kel2ig
+2k1e2lim
+ke2lio
+2k1elism
+2k1e2l1í2
+2k1eljá
+k1ellá
+2kellát
+2kellená
+2kellenő
+2k1ellent
+2k1elnev
+2k1elny
+2k1e2los
+2ke2lö2l
2k1e2lőa
-k1e2lőá
+kelőé2
+2kelőfú
+ke2lőhí
+2k1e2lőí
+2k1e2lőképz
+2k1e2lőkés
2k1e2lől
-2k1eltér
+ke2lőny
+2k1e2lőo
+ke2lőté
+2k1e2lőtt
+k1e2lőz
+k1elra
+2k1elsa
+2k1első
+2k1elszá
+kel2t1é2rő.
+2k1elto
+2keltű
+2kelül
+ke2lűr
+2k1elv.
+2k1elvá
+2k1elvei
+2k1elvek
+2k1elven
+2kelvi
+k1elvk
+2k1elvo
+2k1elvt
+2k1elvű
+ke2lyemb
+ke2ly1ékn
+kelyköz1
+2k1elz
2k1ember
-ke2més
-kenés3s
-ken2tér
-kenü2
-ke2n1ül
-keó2
-ke1p2r
-ke2rab
-ke2r1ar
-ke2rál
+2k1embl
+2k1embr
+2k1eml
+2k1emul
+ke2nal
+2k1enci
+kende2rül
+ken2d1ék
+2k1endo
+2k1e2ner
+2k1enge
+ke2n1ip
+ke2nis
+ke2n1o
+kens3s
+kensz2
+2k1enyv
+keo2l
+keo2r
+keó2d
+keó2h
+keó2l
+keó2r
+ke2pik
+ke2ral
+ke2rap
+ke2r1a2r
+ke2r1as
+ke2rau
+ke2r1ál
ke2r1ár
+ke2rás
+ker2csá
+ker2csell
+kercsí2
+ker2csír
+2kerde
2kerdő
+2k1e2rege
2k1e2rej
-kerekes1
-ke2rős
-ker1s
-ke2s1eg
-2k1esem
+kere2k1eg
+kerekes3s
+ker1ell
+ker1elv
+ke2r1ember
+ke2r1er
+kere2ta
+kere2t1e2l
+kere2t1ö
+ke2rég
+ke2r1é2l
+ke2r1ép
+ker1éte
+ke2r1id
+ker1iga
+ke2r1ill
+ke2rim
+ke2r1ind
+ke2r1int
+ke2r1inv
+ke2rio
+ker1ist
+ke2r1iz
+ker1k2
+2kernel.
+ke2r1ol
+ke2ror
+ke2ród
+ke2r1ó2r
+ke2rőde
+ke2rőe
+ke2rőké
+ke2rőo
+ke2rősí
+ke2rőte
+kers2
+ker1sp
+ker1st
+kersz2
+ker2taj
+ker2táp
+ker2tás
+ker2t1ebbé
+ker2teg
+ker2t1este
+ker2t1esz
+ker2télv
+ker2t1é2vét
+ker2tön
+ker2töv
+ker2t1őr
+ker2t1ős
+ker1tró
+ke2rút
+kerü2g
+2k1esemé
+ke2seté
+2k1e2sett
+2k1esél
+2k1e2sés
+ke2sis
+2kesítőst
+2keskü
2k1e2ső
-ke2szi
-ke2s3zöl
-ke2tok
-keu2
-ke2vez
+ke1s2po
+kes3széke
+kes3szó
+ke1sta
+2k1este
+2k1esté
+2k1esti
+2k1estj
+2k1estk
+2k1estn
+ke1stra
+2k1estre
+2k1estt
+2k1estün
+ke2szaj
+ke2szép
+2keszmén
+ke2tál
+ke1tc
+ke2t1e2kéh
+2k1e2teté
+ke2tid
+ke1t2ra
+ke1t2ré
+ke1t2ri
+kettes1s
+ke2tűd
+keu2r
+keu2s
kevés3s
+ke2vid
+2k1e2vő
+keze2tés
+kezőa2
+kezőe2
+kezőkész1
+2k1ezr
1ké
-2ké2g
-ké2ja
-ké2j1u
-kéka2
-ké2k1á
+2k1é2ber
+2k1ébr
+ké2ge
+ké2gé
+ké2gő
+2k1é2hem
+2k1é2hen
+2k1é2hes
+2kéhezé
+2kéhezt
+2k1éhs
+ké2j1ak
+ké2j1elé
+ké2jö
+ké2jut
+2k1é2ke.
+2k1é2kei
+2kékekk
+2kékem
ké2k1e2r
-ké2kin
+kékes3s
+kéke2s3z
+ké2kén
+ké2k1o2
+2k1é2kük
+2k1é2kű
+ké2lel
+2kéles
+2k1é2letek
+2k1é2letet
+2k1élm
+ké2lőd
+2k1é2lől
+2k1élr
+2k1é2lű
ké2lya
-ké2ly1ü2
+ké2ly1esz
+ké2lyid
+ké2ly1ü2l
+kéma2
+ké2mad
+ké2m1al
+ké2m1an
+ké2map
+ké2m1as
+ké2m1á
+kémi2as
+ké2min
+ké2mis
+ké2mí
+ké2mo
+ké2mö
+ké2mő
+ké2m1u2
+kéna2
+ké2n1al
+ké2nan
+ké2n1ar
+ké2n1at
+kéndio2
+2k1é2neke
+2k1é2nekh
+2k1é2neki
+2k1é2nekk
+2kénekl
+ké2n1e2l
+ké2n1em
+ké2n1er
+kén1éte
+ké2nig
+ké2nil
+ké2n1ing
+ké2no
+ké2ny1e2g
+ké2ny1elv
ké2nyú
-ké2pa
+ké2p1a2
ké2p1á
-ké2p1ele
-ké2per
-ké2pid
+képá2r
+ké2peg
+ké2p1e2lő
+ké2p1elté
+ké2p1elv
+képe2r
+ké2p1ill
+ké2pim
+ké2p1i2p
ké2pí
-ké2po
-2k1érm
-ké2r1o
+2k1épít
+ké2p1o
+ké2pó
+ké2p1ö
+ké2pő
+kép1s
+ké2pu
+ké2pú
+ké2p1ü2lé
+ké2p1ü2lő
+kéra2
+ké2rab
+ké2ral
+ké2ram
+ké2r1an
+ké2rar
+ké2r1as
+ké2rat
+ké2r1á2
+2k1érdeke
+kér1dr
+2k1é2retts
+ké2ro
+ké2rö
+2kértelm
+2kértékb
2k1értéke
-ké2ru
-ké2rú
-2kérzeté
-ké2sá
-ké2so
-ké2sz1a2
-ké2szá
-ké2szét
-ké2s3zö
-ké2tan
+2k1értékh
+2k1értékn
+2k1értékr
+2k1értés
+kértő2iké
+ké2r1u2
+ké2r1ú
+kérü2
+kér1ülé
+2k1érvek
+2k1érzé
+késa2
+ké2san
+ké2s1á2
+ké2s1é2g
+ké2s1o
+ké2só
+kés3sza
+kés3szer
+kés3szél
+ké2su
+ké2süt
+ké2sza2
+kész1al
+ké2sz1á2
+ké2szeg
+késze2l
+ké2szeml
+ké2szesz
+ké2széd
+ké2sz1ékné
+ké2szin
+ké2szir
+ké2szo
+ké2sz1ó2
+ké2szö
+ké2szőr
+készt2
+ké2szu
+ké2sz1ú
+két1akar
+ké2takn
+ké2t1akó
+két1ala
+két1asp
ké2tál
-ké2t1ele
-ké2t1em
+ké2t1ed
+ké2t1eg
+ké2tel.
+ké2teln
+ké2t1e2m
+ké2t1ep
+2ké2te2r
+két1ere
+két1erk
+két1erű
+ké2tesé
+ké2t1esté
ké2t1esz
-ké2tev
+ké2t1e2v
ké2t1é2
-ké2tis
+ké2t1i2
ké2tí
-ké2t1os
-ké2tö
-ké2tu
+ké2tol
+ké2t1or
+kétó2
+ké2t1ór
+ké2t1ö
+ké2tud
ké2t1ü2
+2kétv
2k1év.
+2k1évad
2k1évb
-2k1é2vei
-ké2ves
-2k1é2vi
+2kévei
+2k1é2vem
+2k1é2ven
+2kévet
+2k1évf
+2k1évh
+2k1é2vi.
+ké2vig
+2k1évin
+2k1évk
2k1évn
-ké2za
-ké2zá
-ké2z1e2l
-ké2zem
-kf2
-k1fl
-kh2
-k2hai
-k2hája
-1k2hed
-khe2i
+2k1évr
+2k1évs
+2k1évt
+2k1é2vü
+2k1évv
+ké2z1a
+ké2z1á2
+ké2zeg
+kéz1elt
+kéze2m
+kéz1eme
+ké2z1e2r
+ké2z1ism
+ké2zí
+ké2z1o
+ké2zö
+kézs2
+ké2z3sé
+kéz3st
+ké2zsu
+ké2z1u2
+kfe2l1em
+kfil2mér
+kfi2sar
+kf2jo
+kf2la
+kf2le
+kf2li
+kf2lo
+kf2ló
+kfolyói2k
+kfo2n1ó2
+kf2ra
+kf2rá
+kf2re
+kf2ri
+kf2rí
+kf2ro
+kf2rö
+kf2ru
+kg2la
+kg2nó
+kg2ra
+k1g2ráf.
+kg2ri
+kg2rí
+kg2ru
+khá2t1al
+khelyköz1
+1k2hia
+khiá2b
k2hil
-1k2hos
-k2hó
-1khr
-1k2hü
+kh2me
1ki
kia2d
+ki2aé
+ki2af
kia2g
kia2j
-kia2l
+kia2kar
+kia2kas
+kia2lap
+kia2lá
kia2n
kia2p
-kia2s
+kia2ra
+kia2sz
+ki2aú
+kia2v
kiá2z
-kib2
-ki1br
-2kide
-kideg1
+ki1b2l
+ki1b2r
+2k1i2deá
+2k1i2deg
+2kidej
+2k1i2dét
+2kidéz
+2kidi
+ki2dio
+2kidőb
+2kidők
+2kidőm
+2k1i2dőn
+2kidőt
+ki1dró
kie2l
kie2m
-kie2re
-kié2h
-kié2r
+kie2r
+ki2eset.
+kie2t
+ki2ew
+kié2d
+kié2k
2k1ifj
-ki1fr
+ki1f2r
2kiga
-kigaz1
-2k1i2gé
-kii2
-ki1k2rá
+ki2ga.
+2kigá
+ki2gát
+2kige
+ki2gén
+ki2géz
+ki1g2r
+ki1k2l
+ki2konn
+ki2kono
+ki1k2ré
ki1k2ri
+ki1k2v
+2k1ille
+2kily
+ki2lye
+2k1i2ma.
+2k1i2mai
+ki2mak
+ki2máb
+2kimád
+ki2mái
+ki2máj
+ki2mák
+2k1i2mám
+ki2mán
+2kimár
+ki2mát
+ki2máv
+ki2mit
+2k1imp
+2k1i2na.
+2k1i2nai
+2k1i2náb
+2k1i2nár
+kin2csa
kin2csá
-2k1ind
+kin2csel
+kin2cso
+2kind
2k1inf
-2k1ink
-kin2tét
-2k1inv
-kio2k
+kin2gas
+2k1inj
+2k1integ
+kio2l
kio2m
-kió2v
-ki1pla
+2k1i2onn
+2k1i2ono
+2kiont.
+ki3óh
+2k1i2ón.
+2kipar
+ki1pf
+ki1p2la
ki1ple
ki1p2r
-ki2rat
-ki2rod
-ki2sab
+2k1ips
+2k1i2rat
+2kiránn
+2kirány
+2kirg
+2k1irh
+2k1irk
+2k1i2rod
+2kirom
+2k1irr
+2k1irt
+ki2sad
ki2s1ajtó
+ki2s1akn
ki2sal
-ki2san
-kis1asz
-ki2sat
+ki2sap
+ki2sas
+ki2sál
+ki2s1e2c
+ki2s1elő
ki2s1emb
-ki2sen
ki2s1es
-ki2s1é2r
-ki2sis
-2kisk
+ki2s1é2k
+ki2si.
+ki2s1in
+kis1ipa
+ki2s1i2ra
+ki2s1isk
+ki1skál
2kism
-ki2s1ok
-kiso2r
-ki2s1oro
-kis1p
+ki1smár
+ki1s2min
+kis2nyá
+kis1oko
+ki2s1oros
+ki2sör
+ki2ső
+kisp2
+kis1pl
+ki1s2por
+ki1s2pó
kis3sz
+kist2
+ki1s2tar
+ki1steri
+ki1stí
+ki1stop
+ki1str
+ki1stu
ki1t2r
-kiu2
-kiú2
+kit2t1er
+kit2t1ö
+kiu2s
+kiu2t
+kiú2s
+kiú2t
+kivíz1
+2k1i2vó
1kí
-2k1í2rá
+2k1í2gé
+k1így.
+kí2ja
+kí2nal
+kí2n1árb
+kí2n1e
+kí2nél
+kí2n1ó2
+kí2rá
+2k1í2re
2k1í2ró
+2kítm
+kítőa2
+kítőe2
+2k1ív.
+2k1ívb
2k1í2ve
-2kí2z
-kjelenés1
-kj1els
-k2k1ál
-kk1áru
-k2k1e2g
-k2k1in
-kk1ír
-kk1ó2ra
-k1k2ri
-klá2má
-klá2mos
+2k1í2vé
+2k1í2vű
+kí2zé
+kí2zü
+kí2zű
+kk1abl
+k2k1a2da
+kk1ajt
+k2k1a2kad
+k2k1akk
+k2kalá
+k2k1alj
+k2k1alm
+kka2ró2ra
+k2k1a2u
+k2k1azo
+k2k1áll
+kk1árf
+kká2rok
+k2k1á2ru
+kká2s
+k2k1ásá
+k2k1áth
+k2k1átl
+kk1átu
+k2k1átv
+kk1á2zó
+kk1br
+kke2c
+kk1ecse
+kk1e2dz
+kk1e2gé
+kke2l1e2g
+k2k1e2lem
+k2k1ellő
+kke2lőá
+kk1emu
+kke2ra
+kk1erd
+kke2ró
+k2k1e2rő
+kk1e2ti
+kk1e2vé
+k2k1ég
+k2k1é2l
+k2k1épí
+k2k1érté
+k2k1érz
+kk1fr
+kk1gr
+kkiá2
+kk1i2do
+kkie2
+kk1i2ga
+k2k1igé
+k2kill
+kk1ind
+k2k1ing
+k2k1ink
+k2k1int
+kk1i2par
+k2k1i2ro
+kk1isko
+kk1ism
+k2k1í2r
+k2k1íz
+k1k2lí
+kk2ló.
+k1k2lu
+kko2laj
+kk1olló
+k2k1o2pe
+kkor2dá
+k2k1org
+kko2r1os
+kko2r1út
+k2k1orz
+k2k1oszl
+kkó1p2
+kk1ó2rá
+kkö2l
+kk1ölő
+k2k1önt
+kk1ötl
+kk1ő2ri
+kk1ő2rö
+kk1őrs
+kk1őrü
+kk1pr
+kk2ris
+kk2rit
+kk2rí
+kk1sm
+kk1sp
+kk1st
+kk1t2r
+kk1udv
+kk1urt
+k2k1utá
+k2k1új
+k2k1üg
+kk1ü2lő
+k2k1ü2t
+k2k1ü2v
+kk1üzl
+kk1űr
+kk2vó
+kla1g
+kla3ko
+kla1kri
+kla2p1áta
+kla1pla
+kla1s2k
+kla2uzá
+kláma2
+klá2mal
+klá2m1an
+klá2mas
+klá2m1á2
+klámár1a2d
+klá2m1e2g
+klá2m1eh
+klá2mel
+klá2mer
+klá2m1ér.
+klá2m1érté
+klá2m1i2k
+klá2min
+klá2mis
+klá2mol
+kleí2
+kle2t1a2n
+kle2tál
+kle2t1elv
+kle2t1e2r
+kle2t1e2v
+kle2t1ér.
+kle2t1étbe
+kle2t1é2té
+kle2t1é2ve.
kle2tin
-1k2lí
+k2lini
+klió2
+kli2pel
+k2lisé
+kli2só
+1k2lím
+k2loá
+k2lopf
+k2loty
+kló2rad
+kló2raj
+kló2ran
+kló2rat
+kló2ris
+kló2rol
k2lub
-klu2bé
+klu2b1a
+klu2bá
+klu2b1e
+klu2bir
+klu2bol
+klu2se
klus3s
-kmá2nyú
-kme2g
+klu2s3z
+kma1b
+kmai2ko
+kmas2
+kmá2nyan
+knag2
+knak2
+kna1kr
+kni2a2
+knika2
+kni2k1al
+kni2k1as
+kni1sz2
+knőc1c
+kn2ő3r
1ko
-ko1g2r
+ko2áz
+ko2be
+2k1obs
+ko2cho
+2k1o2dav
+2k1o2dú
+kogás1s
+ko1g2ra
+ko2kád
+2koke2
+ko2k1er
+2k1o2k1ir
+2k1o2kí
+2k1okl
+2k1okm
+2k1o2kol
+ko2k1o2v
2k1o2koz
+kok2sze
2k1okta
kol1ajt
-2k1olda
-ko2lim
+kol1áro
+2k1oldal
+2k1oldá
+2k1oldó
+ko2lid
+ko2l1igá
+ko2limp
+ko2l1i2na.
+ko2lita
+kol2l1ad
+kol2lál
+kol2lel
+kol2les
+kol2l1ét
+ko2lö
+2k1oltár
+2kolvas
+2k1ombu
+ko2mil
+kom2p1ér.
+kom2p1ol
+ko2n1a2d
ko2naj
-ko2n1al
+ko2n1a2l
+ko2n1a2n
+ko2n1ar
+ko2n1as
+ko2n1au
ko2n1ál
+2konbá
+2konbet
+konc1c
+koncé2
+kon2ch
+kon2csá
+kon2c3sor.
+kon2c3soro
+ko2n1e
+2konén
+ko2n1ér.
+2kongu
+2konhab
+ko2nir
+2konog
+ko2n1ol
+2konola
ko2nor
-ko2nyé
-koo2
-2kope
+2konosn
+2konosr
+2konost
+2konpa
+2konpr
+2konrét
+2kontö
+ko2nü
+ko2nyag
+ko2nyal
+ko2nye
+ko2nyó
+konz2
+2konzs
+ko2ón
+kopá2sé
+2kopc
ko1pro
-ko2r1ad
+2kopti
+ko2r1a2d
+ko2rag
+ko2r1aj
+ko2r1a2n
+kor1ass
+ko2r1aszt
ko2r1átl
-ko2rel
+2k1orch
+kor2csal
+kor2dad
+kor2d1ag
+kor2d1a2s
+kor2dác
+kord1d
+kor2d1e2l
+kor2dem
+kor2des
+k1ordít
+kor2d1ö
+kor2d3z
+ko2r1e2c
+ko2reg
+ko2r1el
+ko2r1er
ko2r1es
-ko2r1il
-ko2r1osz
+kor1f2
+korgás1s
+2korie
+kor1ill
+ko2r1ing
+ko2r1inte
+kor1isk
+ko2r1i2zom
+ko2rosz
+ko2r1o2v
+ko2r1ói
+ko2rón
+ko2rö
+ko2rő
+2k1orr.
+2korrk
+2k1orrt
kor1s2
-kos3s
-2koszl
-2k1ou
-2k1o2x
+kor1t2r
+ko2r1úto
+ko2rü
+ko2s1as
+ko2sál
+ko2se
+kos3sze
+kos3szo
+kos3szü
+2k1ostr
+ko2sü
+ko2szal
+ko2szer
+ko2szir
+ko2szí
+k2oszo
+ko2szó
+2kosztá
+kotókész1
+kotó1st
+ko2ut
+2kovaria
+ko2vié
+ko2xi
+koza2tal
+kozókész1
+kozóköz1
+2kozóö
1kó
-kó2d1é
-kó1fr
-kóku2
-2kóp.
-2kópb
-2kóph
-2kópj
-2kópk
-2kópo
-2kópp
-2kóps
-2kópu
-kóra2
-kó2r1an
-kó2res
+kóa2d
+kó1bl
+kóc3c
+kó2cem
+kó2ch
+kó2d1ab
+kó2dak
+kó2d1a2l
+kó2d1a2n
+kó2daz
+kód1d
+kó2d1e2l
+kó2dem
+kó2d1e2r
+kó2d1es
+kó2d1és
+kó2din
+kó2dö
+kó2dü
+kó2dzá
+kóé2r
+kó1f2r
+kói2g
+kóí2v
+kó1kré
+kó1kv
+2k1ó2né.
+kó2nét
+2k1ó2ni.
+2k1ó2no
+kó2pan
+kó2p1as
+kó2p1e2l
+kó2pir
+kópó2
+kó2p1ór
+kó2pü
+2k1ó2raa
+kó2r1a2c
+2k1ó2rai
+kó2r1a2n
+kó2ras
+kó2ráb
+kó2rád
+kó2rág
+kó2rái
+k1ó2ráj
+kó2rám
+kó2rán
+kó2rár
+kó2rát
+kó2ráv
+kó2rel
+kóre2s
+kó2réj
+kó2r1éve
+kó2r1ir
+kó2r1ok
+kóro2ka
+kóro2ko
+kór1osto
+2kóród
+kó2r1ódá
+kó2rő
+2k1ó2ságú
+kó1slá
+kó2s1os
+kó1s2pe
+kó1spi
+kó1s2po
+kó1str
+kó2s1ü2
+kó2s3zára
+2k1ó2vó
+kó2z1a2m
1kö
-kö2b1öl
+kö2ba
+köb1öll
+köb1öln
+köb1ölr
+köb1ölt
+kö2da
+kö2dá
+kö2del
+kö2der
+kö2dev
+kö2do
+kö2dó
+kö2du
+kö2dú
kö2dz
+2k1ö2ko
+2k1ökrö
+köl2csal
+köl2csá
+köl2csel
+köl2cs1ő2
+2k1ölel
+köles3s
+2k1ö2léssz
+kö2lí
+kö2lőe
+költa2
+köl2tal
+köl2t1e2v
2k1öng
-2köv.
-kö2zí
+k1önté
+k1öntő
+k1öntv
+köny2v1a
+köny2vá
+kö2ra
+kö2rá
+k1ördö
+kö2red
+kö2r1e2g
+kö2rék
+kö2r1étt
+kör1f2
+kö2rik
+kö2r1iz
+kö2ro
+kö2ró
+kö2r1ö2l
+kö2r1ő2
+kör1p2
+kör1s2
+kört2
+kör1tr
+kö2ru
+kö2rú
+körü2l1et
+körü2lé
+kö2r1ülés
+körü2lő
+kö2r1ülő.
+2körv.
+2körvb
+2körvh
+2körvn
+2k1örvö
+2körvr
+2körvt
+2körvü
+2körvű
+2körvv
+k1öszt
+2kötlé
+k1ötvö
+2k1öv.
+2k1övb
+2k1övh
+2k1ö2vig
+2k1övr
+2k1övv
+kö2za
+kö2zá
+kö2zen
+kö2z1é2k
+kö2z1í
+kö2zo
+kö2zó
+közőe2
+kö2z3s
+kö2zu
+kö2zú
+kö2z1ü2lé
+kö2z1ü2lő
1kő
-kőe2
-kőé2
-kők2
+kőa2n
+kő1bl
+kő2ch
+kő1dra
+kőe2k
+kőe2l
+kőe2r
+kőé2l
+kőé2ne
+kő1f2r
+kő1gn
+kő1gr
+kői2t
kő1kr
-kőu2
-k1p2
-kpá2ra
-k2rip
-1kripc
-krosz2k
-1k2rómá
-krös3s
-k1s2h
-k1s2k
-k1s2p
-k1s2t2
-k1sz2f
+kő1pl
+kő1pr
+kőr1an
+k1ő2rei
+kőre2s
+kőr1esz
+k1ő2ri.
+kő2ril
+kő2rip
+kő2riv
+k1őrl
+kőr1s2
+kő2rül
+2k1őrz
+kő1s2k
+kő2sö
+kő1s2t
+kő1tr
+kőu2t
+kpára2
+kpá2rad
+kpá2r1at
+kpá2r1ál
+kpá2r1út
+kp2la
+kp2le
+kp2lé
+kp2lu
+kpó2t
+kp2ra
+kp2re
+kp2ré
+kp2ri
+kp2rí
+kp2ro
+kp2ró
+kp2sz
+k2rach
+kra2chi
+1k2rajc
+k2rakk
+kra1p
+krá2sz1e
+kren2d1ő2
+k2reo
+k2repá
+1k2rémh
+1k2réml
+1k2rémr
+kré3p2
+1k2rist
+1k2riti
+kro1g2
+1krokett.
+1krokod
+kro2n1a2
+kro2ná
+kron1d2
+kro2n1e
+kro1p2
+kro1str
+kro1sz2f
+kró2mar
+kró2m1e
+kró2mis
+k2rómo
+1k2rónik
+k2rup
+k2s1a2rá
+ks1elo
+ksé2gele
+ksé2gis
+kségü2l
+ksé2g1ülé
+k1s2ká
+ks2ko
+k1s2la
+ks2lá
+ks2lu
+ks2mi
+k1s2ni
+ks2pa
+ks2pe
+ks2pi
+ks2po
+ks2pó
+ksp2r
+ks2rá
+k1s2ta
+k1s2tá
+ks2ti
+k1s2tí
+ks2to
+k1st2r
+k1s2tu
+k1s2tú
+k2sz1a2d
+kszae2
+k2szagy
+k2sz1aj
+ksza2ke
+ksza2ké
+ksza2k1ü
+k2sz1am
+ksz1any
+ksz1aré
+k2sz1ág
+kszáraz1
+k2sz1e2gy
+k2sz1ela
+k2szemu
+k2sz1eng
+k2szev
+ksz1élet
+kszé2t1
+k2sz1id
+kszilá2
+kszi2p
+ksz1ipa
+ksz1isk
+k2szír
+k2sz1old
+k2szoltó
+k2sz1osz
+kszö2g1ell
+kszö2g1elv
kszt2
-kt1alk
+k2szuni
+k2szut
+k2sz1üg
+k2szüt
+k2sz1ü2z
+ksz1z
+kt1a2da
+kt1ajá
+kt1a2lap
+k2t1alb
+k2t1all
+kta2n1á2s
+kta2n1ó2
kta1p2
-kte2rá
+k2t1arm
+kt1a2ud
+kt1azo
+kt1ábr
+ktá2lal
+kt1álló
+k2t1álm
+ktára2d
+ktá2r1ada
+ktár1adó
+ktá2raj
+ktá2r1az
+k2t1átf
+k2t1átv
+k2t1e2g
+k2t1elg
+k2t1elh
+kt1eljá
+k2t1ell
+k2t1els
+k2t1elv
+k2t1enz
+kte2rad
+kte2ral
+kte2rár
+kte2rát
+kte2reg
+kte2r1e2l
+kte2r1in
+kte2rosz
+k2t1esem
+kté2lő
+k2t1érl
+k2térmi
+k2t1érte
+k2t1éss
+k2t1é2vet
+kt1fr
+kt1gr
+k2t1id
+kti2g
+k2t1igé
+kt1ill
+kti2m
+kt1ima
+k2t1ind
+k2t1inf
k2t1i2r
-kto1g2
-kto1s
-ktosz2
-k1tré
-ktro1g
-ktro1s2
+k2t1isk
+k2t1ism
+k2t1i2vás
+k2t1íg
+k2t1í2r
+ktív1e2l
+kto1g2ra
+kto2n1á
+kt1ope
+kto2ras
+kto2r1e
+kto2rol
+k2t1ös
+k2t1öt
+kt1pr
+k1t2ran
+k1trau
+k1tréf
+k1t2rén
+k1t2rió
+ktro2ná
+k1t2rón
+kt1sp
+kt1st
+kt1sz
+kt1t2r
+ktu2m1e
+ktu2min
+ktu2sab
+ktu2s1an
+ktu2szár
+ktu2sze
+ktu2szé
+ktü2l
+k2t1ülé
+k2t1üt
+k2t1ü2v
1ku
-2k1udv
-2ku2g
-2kuj
-kul2csi
-kun2d1é
-ku1p2r
-ku2se
-2kutaz
-2k1u2tá
+kuá2r
+2k1ucc
+kue2l
+kue2r
+kue2s
+ku1f2r
+2k1u2go
+2k1ugr
+ku2gya
+2k1ujj.
+2kujja.
+2kujjad
+kuj2j1a2da
+2kujjai
+2kujjak
+2k1ujjal
+2kujjam
+2kujjas
+2kujjat
+2k1ujjá
+2kujjb
+2kujjg
+2kujjh
+2kujji
+2kujjk
+2kujjn
+2k1ujjo
+2kujjp
+2kujjr
+2kujjs
+2kujjt
+2kujju
+2kujjú
+kuk2k1ó2
+kula1k
+kul2csal
+kul2cse
+kulus1s
+ku2m1a2d
+ku2mal
+ku2mü
+ku2nad
+ku2nal
+ku2n1ás
+ku2ne
+ku2n1in
+kun3n
+ku2nor
+ku2n1ó2
+ku2nü
+2k1up.
+2kupr
+2kupu
+ku2rad
+2k1u2rai
+ku2rak
+2kural
+ku2ram
+ku2ráu
+2k1urn
+ku2rol
+kuru2c3s
+ku2sal
+ku2sas
+ku2sál
+ku2s1e2
+ku2sis
+ku2s1i2z
+ku2s1ó2
+ku2sö
+kus3sze
+ku2s1ú
+ku2sü
+ku2szal
+ku2szar
+kusz1es
+ku2sz1é2l
+ku2sz1é2p
+ku2szét
+ku2sz1il
+ku2szis
+ku2szü
+2kutaló
+2k1u2tasí
+2k1u2taz
+ku2tál
+2k1u2tán
+2k1utc
+2k1u2tol
+2k1u2tód
+ku2tóp
ku2zs
1kú
-2k1úg
-2k1új
-kú2tá
-kú2t1o
-2kútr
+kú2jí
+2k1újs
+kú2p1a2
+kú2p1á
+kú2p1e
+kú2t1a2
+kú2t1á2
+kú2t1e
+kútfé2
+kútfél1
+kú2tos
+kú2t1ő
+2kú2tu
+kú2t1ü2
1kü
-2küdü
-2k1ü2g
-kü2la
+kü2ge
+kü2gy
+2k1ü2lep
kü2lo
-kü2tö
-kü2tő
-kü2tü
-kü2z
-2k1üzl
+kül2t1á
+2küreg
+2k1ü2rí
+kü2rü
+2k1üst
+kü2szá
+kü2szí
+2k1ütk
+küvés3s
+2k1ü2vö
+2k1ü2ze
1kű
-1k2vad
-k2van
+2k1űrh
+2k1űrm
+kű2ro
+kű2r1ős
+kű2zé
+kű2ző
+1k2van
+k2varc
+1k2vark
+kvá2nyol
+kvárosi2
+kvé2sel
+kvé2so
kvés3s
+1k2vin
+1k2vitt
+k2vóc
+k2vóta
+k2vótá
+kvőcsa2
1ky
-ky1ü
+kyd2n
+ky2fajtán
+ky2fajtár
+ky2fajtát
+ky1i2s
+ky1i2v
+kyk2k
+kyk2ne
+ky2se
+ky2s1ü2
+ky1üz
+kza2tal
+kza2t1e2
+kza2t1ó2
+2l.
1la
-la2ar
-laá2
-lab2la.
-lac3há
-2l1a2dag
-l1adl
-2l1adm
-la2dod
-la2dog
-la2dom
-la2dóe
-la2dói
-la2dój
-la2dól
-la2dór
-la2dóv
-la1dy
-lae2
-laga2l
-lag1ala
-la2gan
-la2g1ál
+laa2d
+laát1
+laáta2
+2labár
+3labd
+2labr
+2l1abs
+la2c1ag
+la2c1aj
+la2c1al
+la2cem
+la2c1ete
+la2c3ha
+la2ché
+lac1ita
+lac2k1orr
+lac1orr
+la2c1ö2
+la2cő
+la2csalj
+lac3ság
+la2c3sor
+lac3sül
+lac3süt
+lac3sz
+la2cú
+la2cü
+2l1a2data
+2l1a2datb
+2l1a2datk
+2l1a2datn
+2l1a2dato
+2l1a2datr
+2l1a2datt
+2l1a2datu
+ladás1s
+2l1adl
+2l1a2dog
+2ladomá
+3l2a3don
+ladói2ko
+2l1a2duk
+la1dy2
+lae2d
+lae2l
+lae2r
+laé2d
+laé2r
+2laff
+la1fl
+la2gac
+lag1a2dó
+la2g1a2n
+lag1ass
+la2g1a2t
+la2gau
+la2gav
+la2gág
+lag1áll
lag1ár.
-la2gá2ra
-la2gép
-la2g1ér
-lag3gy
-la2gor
+lag1árá
+lag1árb
+lag1áre
+lag1á2ré
+lag1árf
+lag1árh
+lag1árk
+lag1árm
+lag1árn
+lag1á2ro
+lag1árr
+lag1árs
+lag1árt
+la2g1ere
+la2gés
+la2gid
+la2g1i2k
+la2gim
+la2gis
+la2gí
+la2g1ont
la2g1osz
-lai2g
-la2i2re
-la2j1ad
-la2j1ág
+la2góc
+la2g1ó2rá
+la2góvá
+la2gön
+la2g1ud
+la2g1ur
+la2g1ut
+la2g1ü
+la2gű
+la2gyú
+la2ire
+la2jag
+la2j1a2l
+la2jap
+la2j1ar
+laj1ass
+laj1a2sz
+la2j1az
+la2j1ál
+2lajánl
la2j1ár.
-la2j1el
-la2jol
-la2jü
+la2j1árh
+la2j1árn
+la2j1árs
+la2j1árt
+la2jás
+la2j1áth
+la2j1áts
+la2j1elt
+la2jen
+la2j1es
+laji2
+la2jin
+la2j1is
+la2jí
+la2j1ol
+la2j1oml
+la2j1or
+2lajoz
+la2j1ór
+la2j1ös
+la2jő
+l2ajs
+laj1sz
+la2j1u2t
+la2j1ü2
la2kad
-la2k1a2n
-la2kel
-la2k1es
+lak1alj
+la2k1alm
+la2k1a2lo
+laka2t1a2n
+la2k1ác
+la2k1álk
+lak1áll
+la2k1árn
+lak1ásás
+2lakci
+la2k1eg
+la2k1e2l
+la2k1ér.
la2kérte
-2lakí
+la2k1iko
+la2k1ír
+lak2k1as
+lak2kec
+lak2kel
+lak2kol
+2l1akkor
+lak2köl
+la1klu
+2laknáb
+2laknáh
+2laknás
+la2kob
+la2k1op
+la2k1orm
la2k1osz
-2l1alg
-la2mad
-la2m1al
-la2map
-la2n1á2r
-la2n1ér
-lanye2
-lany1er
-lany1es
-la2nyé
+la2k1ov
+2lakóz
+la2k1ös
+la1k2rém
+lak2rip
+la1k2ru
+lakt2
+2l1akt.
+2l1aktiv
+la2kuj
+2lakulá
+2lakulg
+2lakulh
+2lakulj
+2lakuln
+2lakulo
+2lakuló
+2lakuls
+2lakulu
+2lakulv
+2lakús
+la2k1ú2to
+2lakúv
+2lakza
+la2la2g1
+la2laku
+2laláí
+lalás1s
+2l1alb
+2l1alc
+2l1alf
+2laljn
+2l1alka
+2l1alkot
+2l1alku
+2l1alle
+lal2tár
+lal2te
+2l1alti.
+2laltonk
+lal2t1ó2
+lal2t1ü2
+2laltvé
+2l1alvi
+lam1ada
+la2m1aka
+la2m1any
+la2m1a2p
+la2m1ará
+la2m1a2z
+lame2g
+la2m1egy
+la2m1ele
+lam1emb
+la2m1esz
+la2mék
+lam1éle
+la2méne
+la2m1érv
+la2minv
+la2m1ism
+la2m1ist
+la2m1í2
+2l1ammó
+la2m1ol
+lam1org
+la2m1osz
+la2m1ó2r
+la2mö
+la2m1ur
+la2m1ü
+la2n1a2d
+lana2g
+la2n1aj
+la2nal
+lan1ala
+la2nam
+la2nar
+la2n1áll
+la2n1ár.
+la2n1á2rai
+la2n1á2rak
+la2n1á2rá
+la2n1árr
+la2n1árv
+lanás1s
+lan2csel
+lan2csem
+lan2csi
+lan2csol
+lan2d1ál
+lan2d1el
+lan2d1ér.
+lan2diz
+la2ner
+la2nes
+la2n1ép
+lan2g1as
+lan2gen
+lang3g
+2l1angin
+la2nil
+la2nip
+la2nis
+2l1ankét
+lan1kr
+la2n1osz
+lans2
+lan2tag
+2lantác
+la2nü
+la2nyag
+lany1a2la
+la2nyau
+2lanyái
+la2ny1ál
+2lanyán
+la2nyás
+2lanyáv
+la2ny1e2lem
+lany1e2rő
la2ny1í2r
+la2ny1ol
la2nyó
-laó2
-la2p1at
-lap1áll
-lapá2r
-lap1ár.
-lap1áro
-lap1áta
-la2p1el
+la2nyü
+laó2r
+2l1a2pa.
+lap1akk
+lap1akt
+lap1a2la
+lap1alk
+la2p1atm
+la2p1att
+la2p1a2u
+la2paz
+la2páb
+la2p1á2g
+la2pák
+la2pán
+lap1á2rá
+lap1árh
+la2p1árr
+la2pe2l
+lap1ele
+la2pem
+la2p1en
la2p1es
-la2p1ér
-la2p1in
-la2p1ir
-la2p1ír
-2l1a2pó
+la2pik
+lap1illa
+lap1ille
+la2p1im
+la2p1i2na.
+la2p1ing
+la2p1int
+la2p1i2p
+la2p1i2s
+la2p1ita
+la2p1iz
+lap2lat
+la2p1o2ku
+lap1org
+lap1orn
+lap1orz
+lapos1s
+la2pó.
+la2pób
+la2pón
+la2pór
la2pö
-2lapv
-la2rán
+la2pő
+2lappar
+2laprí
+lap1s2
+2lapún
+2lapúv
+la2pű
+la2ra.
+la2ran
2l1arc
-laro1
-la2s1as
-las3sze
-la2su
-la2sz1ar
-laszkész1
-lasz1óra
-la2t1a2la
+larc3c
+2l1a2rén
+lar2m1e
+lar2min
+2l1art
+2l1arz
+la1s2pa
+la1s2pi
+la1stra
+la2sz1abl
+lasz1alt.
+la2szas
+2l1a2szat
+la2szás
+la2sz1én
+la2szód
+lasz3s
+lasz2t1alj
+l1asztam
+la2sz1út
+la2t1a2d
+la2t1aj
+lat1alak
+la2t1alk
+la2t1alt
lat1ará
-lata2t
-lat1ato
-la2t1árb
+la2t1a2ro
+lat1arti
+lat1aszt
+lat1att
+la2tau
+la2taz
+la2t1áj
+lat1áll
+la2t1árad
+la2t1á2rai
+la2t1á2rak
+la2t1á2ram
+la2t1á2rat
+la2t1á2ráb
+la2t1á2ráh
+la2t1á2rán
+la2t1á2ré
+la2t1árh
+la2t1árn
+la2t1á2rok
+la2t1árr
+lat1ártá
+la2t1ártó
+la2t1á2rú
+la2t1árv
+lat1ász
+la2t1áta
+latdi2al
la2t1e2g
-lat1ele
+la2telem
la2t1ell
-la2tem
la2tep
-la2t1ék
-la2ting
+la2t1erk
+late2s
+la2t1ess
+la2tesze
+la2t1eti
+la2t1eto
+la2t1e2vő
+la2t1éke
+lat1é2ké
+lat1ékk
+la2t1é2ré
+la2t1é2rő
+la2térte
+la2t1érv
+lat1éss
+la2t1i2ko
+lat1ikra
+lat1inte
+la2t1inv
+la2t1ist
+la2t1iz
+la2t1ír
+lat1ívé
+lat1k2
+la2toj
+la2t1okm
+lat1olda
+la2toll
+lat1oml
la2t1osz
+la2t1otth
+la2t1órá
la2t1óri
-la2t1ö2v
-2latti
-la2vu
-2lazm
-la2zon
+la2t1övi
+la2t1ö2vö
+la2t1őr
+2l1attako
+latta2n1ó2
+2lattv
+la2tut
+la2tül
+lat1üze
+latű2z
+la2t1űző
+la2tyá
+la2ub
+la2uk
+la2us
+la2uto
+laü2z
+la2vat
+2l1a2vu
+la1yé
+la1yig
+2layrő
+lazac1c
+laza2c3s
+lazma1
+2lazmá
+2l1a2zon
1lá
-lá2b1iz
+lá2bar
+lábas1s
+lá2bál
+lá2b1e2l
+lá2b1ina
+lá2b1i2z
+láb1org
+láb1orr
+lá2bö
+lá2bő
2lábrá
-lá2but
-lá2d1al
-lá2dan
-lá2dor
-lá2d1ö
-lá2gal
-lág1g
+lá2b1u2s
+lá2bü
+lácsé2
+lá2csét
+lá2cs1il
+lá2csip
+lá2csí
+láda1s
+lá2d1az
+lá2d1e2r
+lá2det
+lá2dim
+lá2d1or
+lá2d1ott
+lá2d1ó
+lá2dül
+lá2dz
+lá2gab
+lá2gac
+lág1a2da
+lá2g1a2g
+lá2g1al
+lá2gan
+lá2gas
+lág1ass
+lága2t
+lá2g1atl
+lá2g1ato
+lá2g1att
+lá2gál
+lág1áll
+lá2gám
+lá2g1á2rak
+lá2g1á2ro
+lá2g1á2to
+lá2gép
+lá2gid
+lá2gigé
+lá2gim
+lá2g1ott
lá2g1ó2
+lá2gő
lág1s
-lá2hor
-2láí
-2láldá
-2láldo
-lá2l1e2
-2l1állo
-lá2lö
-lá2man
-lá2m1eg
-lá2m1el
+lá2gü
+lá2gű
+2lágyá
+2lágyo
+lá2has
+2láhe
+láí2r
+lá2lad
+lá2l1aka
+lá2l1al
+lála2n
+lá2l1any
+lá2l1ar
+lá2lau
+lá2l1ág
+lá2l1á2l
+lálás1s
+lá2l1átj
+2láldás
+2láldoz
+lá2lel
+lá2l1est
+lá2l1e2v
+lá2lél
+lá2lim
+lá2l1is
+lá2lí
+2l1állam
+2l1állat
+2l1állás
+2l1állk
+2l1állom
+2l1állv
+2lálmaim
+2lálmok.
+2lálmom
+2l1álmos
+2lálmuk
+2lálmunkb
+2lálokaih
+2lálokain
+2lálokair
+2lálokán
+2lálokát
+2lálokáu
+lá2l1o2ko
+2lálokonk
+2láloku
+lál1órá
+lálö2
+lá2l1öv
+2l1álut
+lá2l1út
+lá2lü
+lá2lű
+lá2m1a2d
+lá2m1aj
+lám1ass
+lá2m1au
+lá2m1ál
+lá2m1á2z
+lám1b2
+lám1ell
+lám1erő
+lá2mes
+lá2mék
+lá2m1érv
+lá2m1int
+lám1ist
lá2mí
-lá2molv
-lám1osz
-lá2mu
+lá2m1or
+lá2mó
+lá2mö
+lá2mő
+lá2m1út.
+lá2mü
+lá2mű
lána2
+lá2n1ag
lá2nal
lá2n1an
-lá2nas
+lá2nar
+lá2n1as
láná2
lá2nár
-lánc1c
-lá2nyol
-lá2pol
-lár1akt
-lá2ral
-lá2rat
-2láre
-lá2rö
-2l1á2ru
-l1á2rú
+lánc3c
+lán2cel
+lán2c1ég
+lán2csá
+lá2nem
+lá2n1er
+lá2nép
+lán2g1at
+lán2gál
+lán2g1e
+lá2nil
+lá2n1is
+lán2k1e2l
+lán2k1ó2ra
+lán2k1ö2v
+lá3nok
+lá2nol
+lán1sp
+lán1sz
+lánt2
+lán1tr
+lá2nü
+lá2nyaj
+lá2nyala
+lá2nyam
+lánya2n
+lá2nyar
+lá2ny1as
+lá2nyav
+lá2nyel
+lá2ny1ér.
+lá2nyó
+lá2nyö
+lá2pét
+lápi2
+2l1á2pol
+lá2rad
+2l1á2rai
+lá2raka
+l1á2rakb
+l1á2rakk
+l1á2rakr
+lá2r1a2l
+2l1á2ram
+2l1á2rat
+lá2r1av
+l1á2raz
+2láren
+lá2res
+l1árkot
+2l1árnya
+lár1s2
+lárt2
+lár1tr
+2láru.
+lá2rug
+2l1á2ruh
+2l1á2ruk
+2l1á2rul
+2lárus
+2l1árut
+2láruv
+lá2rúa
+lá2rü
+lá2s1a2d
+lá2s1aj
lá2sal
-lá2s1e
-lá2s1ó2
+lá2s1a2r
+lá2saz
+lá2s1á2g
+lá2s1á2rai
+lá2s1árak
+lá2s1á2rá
+lá2s1árb
+lá2s1á2ré
+lá2s1árh
+lá2s1árr
+lá2s1árt
+2l1á2sás
+lá2s1á2to
+lá2se
+lásegyez1
+lá2sír
+lá2sott
+lás1otth
+lásó2
+2l1á2só.
+lás1ór
+lá2ső
+lás3szé
lá2sut
-lá2sze
-lát1al
-2láté
+lá2sű
+lá2szas
+lás3zav
+2lászed
+lá2szeg
+lá2sz1e2m
+lá2szen
+lá2szip
+lászkész1
+lászö2
+lá2szöl
+lá2szöv
+lász3s
+lá2szü
+lá2taj
+lá2t1e2re
+láté2tel
+2l1áthe
+lá2t1i2o
+2l1á2tí
+2látkö
+lá2t1osz
+lá1t2rá
+lá1tri
+2l1átte
+2l1áttö
+2l1áttű
+l1átús
+2l1átvé
+l1átvi
2lávi
-lá2z1e
-lbá2szá
-l1b2l
-lc1e2v
-lc1e2z
-lc1é2v
-l2c3h
+lá2viz
+2l1á2vó
+2lávu
+lá2z1adot
+lá2z1al
+lá2z1árh
+láz2árus
+3lázb
+lá2z1el
+lá2z1i2s
+lázo2
+lá2z1olt
+lá2zsal
+lá2zsan
+lá2zsó
+láz3sz
+l2b1is
+lb2li
+lb2lo
+lb2lú
+lb2ra
+lb2re
+lb2ri
+lb2ro
+lb2ró
+lb2ru
+lc1ajt
+lc1alk
+l2c1a2to
+l2c1ág
+l2c1ál
+lc3csi
+lc3cso
+lc3csö
+l2c1e2le
+lc1elr
+l2c1emb
+lc1emel
+lc1esz
+l2c1e2v
+lce2z
+l2c1eze
+l2c1ép
+lc1évi
+lc1fr
+lc3ha
+lc3há
+lc3ho
+lc3hu
+lc3hú
+lc3hü
+l2c1i2d
+lci2tér
lc1ív
-l2c1ó2
-lcs1á2g
+lc1k2r
+l1c2lu
+l2c1ost
+l2c1osz
+lc1ó2r
+lc1ök
+lc1ös
+lc1pr
+l2cs1a2d
+l2csakt
+lcs1alap
+l2cs1a2n
+lcsa2p1á2g
+lcs1apr
+lcsa2r
+lcs1ara
+lcs1aro
+l2cs1a2s
+l2csaz
+lcs1ág
l2cs1ál
-l2csáta
+l2cs1á2t1a2
+l2csátá
+l2cs1áth
+l2cs1átj
+l2csátv
+l2csec
+l2cs1e2g
+l2c3sej
+lcs1elf
+l2cs1elt
+l2cs1elv
+lcs1emb
+lcs1eml
+l2cserd
+lcse2r1e2l
+lcs1erő
+lcs1ese
+lcse2t
+l2cs1ete
l2csél
-lcs1ing
-lcsó2r
-lc3sz
+l2cs1é2rés
+l2csérle
+l2csérte
+l2cs1érté
+lcs1érve
+l2cs1érvé
+lcsé2sz1ék
+l2cs1é2te
+l2cs1étk
+l2cs1é2vét
+l2csidé
+l2csimi
+l2cs1inf
+l2cs1ing
+l2cs1int
+l2cs1i2pa
+l2cs1irt
+l2cs1isk
+l2cs1ism
+l2csita
+l2cs1í2z
+lcs1k2
+l2cs1okm
+lcs1ors
+l2cs1ö2l
+lcs1ő2sé
+lcs1s
+lc3str
+lc3sug
+lcs1ült
+lc3szo
+lc3szó
+lc1tr
+l2c1uj
+lc1ül
+lc1üt
+lc3zá
+lc3zo
+ld1abl
ld1abr
-ld1a2ny
-lda1p
-lda2tál
+l2d1a2cé
+ld1a2dato
+l2d1a2dá
+ldai2
+lda2lag
+lda2laj
+lda2l1e2g
+lda2lel
+lda2les
+lda2l1é2l
+lda2liz
+lda2l1í2
+lda2los
+ldalt2
+l2d1ant
+lda2nya
+lda2nyá
+ld1apó
+l2d1aran
+l2d1arc
+l2d1ark
+lda2t1as
+lda2t1eg
+lda2t1in
+lda2tós
+ld1ág
ld1áll
+ld1álm
+ld1árn
+ldás3s
+ld1br
ld1egy
-l2demel
-l2d1ep
-ldes1s
-lde2tér
+l2d1e2kék
+l2d1e2kén
+l2d1e2kétő
+l2d1e2l1a
+l2d1e2leme
+l2d1e2lemi
+l2d1e2lemn
+l2d1elér
+l2d1elk
+l2d1ellá
+l2d1elo
+l2d1e2lőh
+l2d1e2lővez
+l2d1els
+l2d1eltá
+l2d1elvé
+l2d1ember
+l2d1e2mel
+l2d1eml
+lde1p2
+ld1epe
+l2d1erő
+ld1e2vé
+l2d1ex
+l2d1é2g
+l2d1é2jér
+ld1élm
+l2d1ép
+l2d1érc
+l2d1éré
+l2d1é2ri
+l2d1érte
+l2d1érz
+l2d1ész
+ldé2ves
+ld1fl
+ld1fr
+ld1gl
+ld1gr
+l2d1i2ga
l2d1igé
-l2d1i2p
+l2d1ill
+l2d1imi
+ld1ind
+l2d1int
+ldi2p
+ld1ipa
+l2d1isza
l2d1ín
-ldo2gas
+l2d1ír
+l2d1íz
+ld1kr
+ld1kv
+ldo2g1as
+l2d1ola
l2d1old
-ld1osz
-l2d1ó2r
-l2d1öl
-ldt2
-ld1tr
-l2d1ut
-l2d1út
+l2d1olt
+ld1oml
+ld1orc
+ld1org
+l2d1osz
+l2d1ó2rá
+l2d1óri
+l2d1öb
+ld1ökle
+l2d1örök
+l2d1öv
+ld1őri
+ld1ősk
+ld1pl
+ld1pr
+ld2rót
+ld1sp
+ld1st
+ld1udv
+ldu2r
+ld1ura
+ldus3s
+l2d1u2t
+l2d1új
+l2d1úr
+l2d1ú2t
+l2d1üg
+l2d1üle
+l2d1ür
+l2d1üz
+l2d1űr
ld3zá
+ld3zó
+ld3zu
1le
-le2ab
+lea2bá
+lea2d
+lea2g
lea2k
+lea2l
+lea2n
+lea2p
+le2aré
+lea2sz
lea2v
-leá2p
-leá2zi
-2l1edd.
+leá2j
+leá2s
+leá2z
+2l1e2béd
+le2bin
+le1bla
+le1bra
+leb2rek
+leb2s
+2lecc
+2l1e2cet
+2l1ecset
l1eddi
+le1d2res
+le1dro
lee2s
+leé2r
+lefona2
+lefo2nal
le1fr
-le3gali
+2l1eft
+le2gala
+lega2r
+le2g1a2s
le2g1áll
-le3gáz
-le3ge.
-le3gek.
-le3gelőt
-lege2r
-le3get
+le3g2áto
+le3g2áz
+le3geb
+le2g1e2g
+le3g2elem.
+leg1ell
+le3g2előa
+le3g2előj
+le3g2előké
+le3g2előt
+le3gelőze
+le3g2elve.
+le3g2elvé
+le2gene
+le3g2erj
+le3ges.
+le3geseb
+le3gesek
+le3gesen.
+le3g2esn
+le3gesr
+le3gest
+le2g1e2sz
legé2d
+legé2l
le3gén
-leg3g
-le2gig
-le3görö
-legő2
-le2gu
-le3gya
-le3gyá
-l1e2gye.
-l1e2gyedne
-l1egyedü
-le3gyé
+legg2
+le2gid
+le2g1is
+legmeg1
+le3g2on
+le2góv
+le3göng
+le2g1ös
+legpec1
+legvíz1
+legyá2
+2legyb
+2legyed
+l1e2gyel
+legy1e2lőr
+l1e2gyenge
+l1e2gyék
le3gyi
+2legyí
2l1egyl
-le3gyö
+le3gyo
+2legys
+l1egysé
+le3gyú
+le3gyű
+2l1egyv
+le2ic
lei2g
+lei2rá
lei2s
-2leji
+lej2ta
+lej2t1á
le2kad
-leka2t
-le2kál
-le2k1á2r
-le2k1e2l
-le2k1e2m
+le2k1a2pu.
+le2k1ál
+leká2p
+le2k1ár.
+le2k1ára
+le2k1árb
+2l1e2ke.
+le2k1eg
+lek1els
+lek1emb
+lek1eme
+lek1erj
lek1e2rő
+le2k1értő
+2l1e2kés.
le2k1id
-le2kő
-le1kri
-2lektr
-le1kvi
-2l1e2lemz
-2lelev
-le2liz
+le2kij
+le2k1ik
+lek1ist
+le2kiz
+lekkész1
+le1kli
+lek1olt
+le2k1orz
+le2k1ó2r
+le2k1ő2
+2lektro
+2lektró
+le2k1út
+le2küd
+2l1elad
+l1eldo
+2l1e2lekt
+lele2ma
+2lelemei
+2le2lemek
+2l1e2lemes
+2lelemz
+lele2t1a2
+lele2tel
+lele2to
+2lelég
+2l1e2l1ér
+lelés1s
+lelé2s3z
+2l1elgo
+2l1elha
+2l1elhá
+2l1elhel
+l1elho
+le2lim
+lel1ing
+le2l1iz
+2l1eljá
+2l1ellá
+2l1ellé
+2l1ellő
+2l1elméj
+2l1elmés
+2l1elnev
+2l1elnö
+2l1elny
+2l1e2los
+2l1e2l1ö2l
+2l1e2lőél
+2l1e2lőfo
+le2lőí
+le2lőszű
+l1elso
+l1elsö
+2l1elszá
+2l1elta
+l1eltáv
+2l1eltér
+2l1elto
+l1eltö
+2l1elv.
+2l1elvá
+2l1elvét
+2l1elvh
+l1elvn
+2l1elvs
2l1elz
-le2m1a2d
-2leman.
-2lemanj
-2lemank
-lemec1
2l1e2mel.
-2l1e2melé
-2l1e2melh
+2l1e2meld
+l1emeled
+l1emelek
+2le2melé
+l1emelés
+2l1e2melg
+le2melh
+l1emelhe
2l1e2meli
2l1e2melj
-2lemelk
-le2mell
+l1emellek
2l1e2meln
-2l1e2melő
+le2melő
+2l1emelő.
+2lemelős
+le2mels
le2melt
+l1emelt.
+l1emelté
+l1emeltü
2l1e2melü
-2l1e2melv
+le2melv
+l1emelve
+lem1erk
+le2m1essz
+lem1eszt
+le2m1e2ti
+le2m1ék
le2m1éle
-2lemés
-lem1irá
+lem1élte
+le2m1élv
+lem1érde
+2l1e2méss
+le2m1ill
+le2mind
+le2m1ing
+le2m1isz
+le2mita
le2m1itt
-l1emleg
+l1emlege
+le2mok
le2mol
+le2m1org
le2m1osz
le2m1ó2r
-le2mö
-2lemu
-le2nál
-le2náz
+le2möl
+le2m1ő2
+lem1p2
+lem1u2r
+le2n1a2d
+le2nal
+le2n1ál
+le2nát
+lenc1c
+len2cel
+len2ceme
+l2end
le2n1e2g
-le2n1el
+le2n1e2l
le2ner
+lene2tel
+lené2k
+le2n1éke
+le2n1ékk
+le2n1ékt
+lené2l
+len1élé
lenés3s
-le2nir
-le2n1o2
+le2n1ész
+le2n1év.
+len2g1e2l
+le2nid
+le2n1ip
+le2n1o2k
+le2nol
+le2n1or
+le2n1óv
+len1őré
+len1s2p
+len1sta
len1tra
-2lentrü
-l1e2nyész.
-l1e2nyésze
-l1e2nyészé
-l1e2nyészi
-l1e2nyészne
-l1e2nyésző
-le2o1g2
+len1t2ren
+lenu2
+le2n1ur
+le2n1ut
+le2n1üg
+le2n1üt
+2l1enyv
+le2oa
+le2oc
leo2k
-le2oló
-leó2v
-le1pla
+le2oli
+leo2m
+le2oz
+leó2c
+leö2r
+le2p1aj
+lepa2p
+lep1apa
+lep1álla
+le2p1eg
+lepe2le
+le2pék
+le2pél
+lep1illé
+lep1iz
le1p2lo
-le1p2ré
-le1pri
-2l1erd
-le2reg
-le2rő.
-le2rőb
-le2rők
-le2rőn
-le2rőr
-2lerőszakol.
-le2rőv
-ler1s2
-le2s1es
-l1e2sése
-l1e2sésé
-l1e2sésü
+le2p1osz
+le2p1ó2d
+lep2p1elv
+le1p2rése
+le1p2ri
+le1pro
+le1pró
+le2p1ü2lőh
+2lerdő
+2leredm
+le2rejé
+le2r1ék
+ler1éte
+le2r1il
+le2rir
+2leróz
+2l1e2rő
+le2s1al
+le2s1ál
+l1esdé
+2lesege
+le2s1e2kéh
+2l1esemé
+l1e2setb
+2l1e2setei
+lese2tel
+2l1e2seté
+l1e2seth
+l1e2seti
+l1e2setk
+l1e2setn
+lese2t1o2
+l1e2setr
+le2sésű
+le1s2ka
+le1ski
2leskü
-le1smá
-lesp2
-le1spr
-lest2
-le1sto
-le1str
-le2szik
-2l1eszm
-2leszű
-let1e2lem
-le2t1ell
-letes1s
-le2t1í2
-le2t1ó2
-let2tas
+le1sla
+le1s2li
+le1sma
+le1s2mi
+le1s2p2
+les3sza
+les3szá
+le1s2tar
+le1stemp
+2l1esten
+l1estébe
+2lesti.
+le1s2til
+2l1estj
+les2t1or
+2lestr
+l1estt
+2l1eszkö
+le1szto
+le2t1ab
+le2tac
+let1a2la
+let1all
+le2t1am
+le2t1ana
+let1apr
+le2t1e2kéb
+le2t1e2la
+le2t1elb
+let1eleg
+le2t1elf
+let1elk
+let1előa
+le2t1e2lőké
+let1elr
+let1emel
+le2t1eml
+le2tene
+le2t1ent
+let1ered
+le2t1eré
+le2t1erk
+le2testé
+let1eszk
+2l1e2teté
+2l1e2teth
+2l1e2tetj
+2l1e2tetv
+le2t1éd
+le2t1é2j
+leté2l
+let1éle
+let1élé
+let1élv
+le2t1é2nekn
+le2t1érb
+le2t1é2ren
+le2t1é2ri
+le2t1érr
+le2t1értő
+let1é2rül
+leté2sz
+let1éter
+let1é2té.
+leté2vede
+let1éves
+le2t1é2véb
+le2t1évéi
+le2t1é2vér
+le2t1é2vét
+le2t1é2vév
+le2tid
+let1ikr
+let1ill
+le2tim
+le2t1ing
+le2t1ist
+leti2sz
+let1iszo
+le2tivá
+le2tod
+le2t1o2k
+le2t1on
+let1ora
+le2t1ox
+le2t1ö2v
+letőe3d
+le2t1őri
+le1traf
+let2teg
+letü2l
+le2t1ülé
+let1üzé
2lety
-leu2tá
+leu2g
+le2uk
+leu2r
+leu2t
+2levene
+2levení
+2levenü
l1e2vez.
+l1e2vezg
+l1e2vezh
+l1e2vezn
l1e2vezt
-2lexer
-l1exp
+le2vezü
+l1e2vezv
+levél1l
+le2volú
+le2xá
+le2x1el
+le2x1e2p
+lexkész1
+le2xö
+le1yé
le2zer
+lezőa2
+lezőe2r
+lezőé2n
+lező1s2p
2l1ezr
1lé
2l1ébr
+lé2ca
+lé2cá
+léc3c
+lé2c1ék
lé2c3h
-lé2gem
-l1é2gés
+léci2
+lé2cim
+lé2co
+lécs2
+léc3sk
+lé2d1as
+lé2d1el
+lé2d1emb
+lé2dél
+lé2d1és
+lé2dil
+lé2dos
+lé2dot
+lé2dö
+lé2d1ő2
+lée2r
+léé2r
+lé1f2r
+lé2gal
+lé2g1e2c
+2léged
+lé2g1eg
+lég1ell
+lég1els
+lé2g1em
+lé2g1e2r
+lég1ér.
+2l1é2gés
+l1éghet
+lé2gil
2légí
-lé2g1o
-2légt
-lé2gu
+lé2g1ö
+2lé2gő
+lé1g2ráf
+l1égtem
+l1égtet
+l1égtél
+lé2gú
+2légü
+l1é2gün
+lé2gyel
+lé2gyes
lé2gyi
-lé2kal
-lé2k1any
-lé2k1eg
+lé2gyo
+lé2gyö
+3légz
+léh1asz
+2l1é2he.
+lé2hed
+lé2h1em
+2léhes
+2léhet
+2léhező
+lé2h1é
+lé2hol
+2léhs
+2l1éj.
+2l1é2ji
+2l1éjj
+2l1éjs
+lé2kab
+lé2k1a2d
+lé2k1a2g
+lé2k1aj
+lék1aka
+lé2k1a2la
+léka2p
+lé2k1apo
+lé2k1as
+léka2t
+lék1ato
+lé2k1au
+lé2k1av
+lé2kaz
+lé2k1e2g
+lé2k1ep
lé2kesí
-lék1est
-lé2kép
-lé2k1ir
-lé2kú
-l1éld
-lé2led
-lé2les
+lé2k1e2sz
+lék1evé
+lé2k1é2k
+léké2l
+lé2k1éle
+lé2k1élv
+lé2k1é2te
+lé2kid
+lé2kít
+lékköz1
+lék1ors
+lé2k1osz
+lé2k1öl
+lé2kör
+lé2köz
+lé2kő
+lé2k1u2r
+lékü2l
+lé2k1ülé
+lé2k1ült
+lékve2g
+l1élc
+2l1é2le.
+2l1é2lei
+2l1é2les
+lé2léb
lé2lén
+lé2lér
+2l1élm
+lélőkész1
+2l1élr
+lé2lük
+2l1é2lű
+2l1é2mel
+lé2nag
+léná2
+lé2neg
+lé2nekb
+2lénekl
+lé2nel
+2lénkí
+lé2no
+lé2nyö
+lé2p1a2l
+lé2p1el
+lépés3s
2l1é2pí
-2l1é2pül
-l1érd
-2l1é2red
-lé2r1el
-lé2rés
-lé2rik
-lé2rin
+lé2pó
+2lépül
+lé2pülé
+lé3rad
+lé2ral
+lé2rap
+lé2ras
+lé2rat
+lé2rav
+lé2r1á
+2l1érc.
+2l1ércb
+2l1érde
+lé2reg
+lé2r1e2l
+lé2r1eső
+2l1é2rez.
+2l1é2rezv
+lé2r1é2j
+2l1é2rés
+2l1é2rik
+lé2ris
lé2rit
+lé2rí
+2l1érni
+2l1érnü
lé2r1osz
+lé2rö
2l1é2rő.
-l1é2rők
-2l1érté
-2l1értü
-lé2rün
-l1érve
-2lérz
-lé2sel
-lés3s
-2l1észh
-léta1
-lé2tál
-lé2te2l
-lét1ele
-lét1elé
-lét1elü
-lé2tig
-lé2tö
-2l1év.
+lé2rőd
+2l1é2rőe
+lé2rői
+2l1é2rőj
+2l1é2rők
+lé2rőn
+2l1é2rőt
+2l1é2rőv
+2lértelm
+2l1érték
+2l1értj
+2l1értő.
+lé2rut
+2lérvel
+2l1érvén
+2l1érze
+2l1érzé
+lésa2
+lé2s1aj
+lé2sak
+lé2sal
+lé2sar
+lé2s1az
+lé2s1á2
+lé2seg
+lé2s1e2l
+lé2s1eti
+lé2s1é2g
+lé2sés
+lé2s1ikr
+lé2só
+lé2s1ő
+lés3sza
+lés3szer
+lésü2l
+lé2s1ülé
+lé2s1ülő
+lé2s1üt
+lész1ék
+2lészést
+2l1észl
+lés3zse
+lé2tag
+lé2taz
+lé2t1eg
+lé2tel.
+lét1elo
+lét1elő
+lét1elv
+lé2tene
+lé2tesé
+2l1é2teth
+lé2teti
+2l1é2tetn
+lé2tev
+lé2t1ér.
+lé2t1é2te
+lé2t1is
+lé2tít
+2létl
+lé2t1o2k
+3l2étó
+lé2tóh
+lé3tól
+lé2t1ó2r
+létö2
+lét1örö
+lét2rág
+lé2tun
+2l1évad
2l1évb
+2l1é2ve.
+2l1é2ved
+2lévei
+2l1é2vek
+2lévelf
+2léveli
+2l1é2vem
2l1é2ven
-2l1é2ves
-2lévez
+2l1é2vet.
2l1é2véb
-2lévi
+2l1é2véh
+2l1é2véi
+2lévén
+lév1ért
+2l1é2vét
+2l1é2vév
+2l1évf
+2l1évh
+2l1é2vi.
+2l1é2vig
+lé2vir
+lé2vis
+2l1évk
+2l1évl
+2l1évm
+2l1évn
+2l1é2vó
+2l1évr
2l1évs
-l1é2vü
-lfi2t1
+2l1évt
+2lévü
+lé2vük
+lé2vün
+2l1é2vű
+2l1évv
+2l1évz
+lfa2l1e2
+lfat2
+lfa1tr
+lf1aut
+lfá2t1i2
+lf1cl
+lf1ese
+lfe2t
+lf1eti
+lfé2l1é2v
+l2f1élm
+lfé2m1e2ké
+lfi2d1é
+lfin3n
+lfi2nos
+lf1iro
+lf1isk
+lf1kl
+lf2lo
+lf2ló
+lf2lö
+lf2lu
+l2f1okta
+l2f1ó2r
+lf1pr
+lf2ri
+l1f2rí
+l1f2ro
+lf2rö
+lf2rő
+lf1sp
+lf1sz2
+lf1ülő
lga1p2
+lgatói2ko
+lgau2
+lgár1as
+lgés3s
+lgi2as
+lg2la
+lg2lo
+lg2ló
+lgör2cso
l1g2ra
-lgy1as
-l2gyelőv
+lg2ru
+l2gy1ad
+l2gy1ag
+l2gyaj
+lgy1ala
+lgy1alj
+lgy1any
+l2gy1a2s
+l2gy1au
+l2gyáb
+l2gyál
+l2gyát
+l2gy1e2g
+l2gyelá
+l2gy1e2le
+l2gy1elz
+l2gyembe
+lgy1eré
+l2gy1esem
+l2gy1e2v
+l2gyél
+lgy1ér.
+l2gy1és
+l2gyid
+l2gyikr
+l2gyip
l2gyis
+l2gy1ok
l2gy1ol
-l2gy1ú2s
+l2gyop
+l2gy1os
+l2gy1ó2r
+l2gy1ö2r
+l2gy1ös
+l2gy1u2t
+l2gy1út
+lhai2
+lhón1al
1li
-lia2d
-li2af
+li2aa
+li2aá
+li2abi
+li2abo
+lia2cé
+li2aci
+li2acs
+li2acu
+li2a1d2
+li2ae
+li2aé
+li2ag
+li2ah
+li2aid
+li2aí
+li2aj
+li2akép
+li2ala
+li2ale
+li2ali
+li2amé
+li2amo
+li2ao
+li2aó
+li2aő
li2ap
-li2at
-li2deg
+li2ara
+li2aré
+li2asá
+li2aso
+lia1sz
+li2asza
+li2aszá
+li2aszé
+li2aszf
+li2aszi
+li2a1t2
+li2aü
+li2av
+li2az
+li3be
+lic3sz
+li2cü
+li1cy
+li2deá
+2li2deg
+li2dén
+li2dét
2l1i2di
-li2dom
2l1i2dő
-li2eu
-l1i2gaz
+li2ec
+lie2d
+2lien
+lié2d
+lié2k
+lié2n
+lié2vé
+lifé2l1é2v
+li2fí
+li1fl
+li1f2r
+l2ig.
+2l1i2gaz
+ligán1n
li2ge.
-2l1i2gé
-li1g2ra
-2likk
+2l1i2geb
+2l1i2gek
+2l1i2gep
+li2géb
+li2géh
+li2géi
+li2géj
+li2gék
+li2gén
+li2gér
+li2gés
+li2gét
+li2gév
+li2géz
+li2hat
+2l1ihl
+2l1i2ker.
+2l1i2kerb
+lik2k1ell
+lik2k1elv
+lik2k1e2r
+lik2kérd
li1k2l
+2l1i2konc
+2l1i2konf
+2l1i2kong
+2l1i2konig
+2l1i2konk
+2likonl
+2l1i2konm
+2l1i2konp
+2l1i2kons
+li1kré
2lill
+2lima.
+2limád
+li2mák
+li2máv
+l1imbo
+li2me.
+lime2rá
+lim1p2
+2limpo
+limű1
+li2nakr
li2nal
-2lindí
+lin1any
+lin1ará
+2linas.
+lin2cs1ö2
2l1indu
-2l1inf
-lin2ko
-li2nö
-2l1inté
-li2o1g2
-li2pő
+li2ne.
+li2neg
+linék2
+2l1inger
+lin1grá
+ling2rádi
+2l1ingré
+lin1ing
+lin1inj
+lin1kl
+lin3ny
+li2nor
+2l1integ
+2l1intéz
+li2n1u2s
+li2n1ut
+2l1i2nú
+li2oc
+lio2l
+li2oni
+li2óke
+lió2raj
+li2őá
+li2őd
+li2őe
+li2őf
+li2őg
+li2őm
+li2őp
+li2pa.
+li2pai
+li2p1aj
+li2p1á2r
+li2pát
+li2peg
+lip1ele
+li2p1elv
+li2p1esz
+li2pö
+li2p1ő2
li1pro
2l1i2ram
2l1i2rat
-li2rán
-l1irt
-2l1isko
-2lism
-l1ismé
-li1spo
-l1iste
-li2s1ü2
-li2szö
-lis3zs
-li2t1el
+2l1i2rán
+2l1irh
+li2rig
+li2rod
+2l1irr
+2l1irt
+li2sál
+li2s1el
+lise2s
+li2sid
+lis1isk
+2l1iskol
+l1ism
+lis1p2
+2l1ispá
+2l1isten
+2l1istr
+li2s1ü2t
+lis1ü2v
+2l1iszl
+lisz2t1á2z
+li1sztir
+li2t1a2g
+2lital.
+li2tala
+lit1alk
+li2t1áta
+li2t1e2g
+li2t1e2l
+li2t1emb
+li2tez
+li2t1érd
+li2térte
+li2til
+lit1int
+li2t1i2o
+li2t1is
+li2t1okt
li2t1old
-li2vad
-li2vás
-2l1izg
+li2tön
+litő2
+li2t1őr
+l1ittak
+l1ittas
+l1ittat
+li2t1ura
+liú2t
+2l1i2vad
+li2vot
+l1i2vó
+3lix.
+l1izél
+2l1i2zén
+2lizésí
+l1izgu
2l1izmo
-2l1i2zo
+2lizzí
+2l1izzó
1lí
-l1íg
-2l1í2ny
+lí2gé
+lí2ja
+lí2ju
+líma1
+2l1íns
+l1í2ny
línyenc1
-lí2ran
-2lírá
+l1írd
l1írh
l1írj
-l1írn
-l1í2ró
-l1írt
-l1írv
-lí2tél
+l1írl
+lí2rod
+lí2rog
+lí2rok
+lí2rom
+2l1í2ró
+l1írs
+l1í2ru
lítés3s
-2l1ív.
-l1í2vá
-2l1ívs
-lízis1s
-lji2
+lítőa2
+lítő2p3r
+2lív.
+líva1
+lívak2
+2l1íz.
+2l1í2ze
+l2ízi
+lízis3s
+2l1ízl
+2l1í2zü
+l1í2zű
+l2j1a2da
+l2j1e2lő
+l2j1er
+ljes1s
+ljharc1
+l2j1ip
l2j1ir
+l2j1iz
+lj1ír
+l2j1or
+l2j1os
+lj1pr
+lj1sp
+lj1üz
+lka1sl
lka2tel
-lke2ma
-lkis1a
-lkó2c3
-l1k2v
+lka2t1é
+lka2tin
+lka2t1ó2
+lké2p1ell
+lké2szel
+lkia2k
+lkiá2
+l1k2lin
+lk2lí
+l1k2lu
+lkö2z1ön.
+l1k2rá
+lk2reá
+l1k2rémb
+l1k2ri
+l1k2rí
+lk2rom
+l1k2ró
+lk1sh
+lkukész1
+lk2va
+lk2vá
+lk2vó
+lla2dój
+lla1f2
+lla2g1ad
lla2gal
-lla2m1el
-lla2nyá
-lla2ny1e
-lla2tal
-lla2tat
-lla2tel
-lla2tet
-lla2tor
-l2l1azo
-l2l1áll
+lla2g1a2s
+lla2gál
+lla2gen
+lla2gép
+llag3g
+lla2gol
+ll1a2ja
+ll1akad
+l2l1akc
+ll1a2kóz
+l2l1akti
+l2l1a2lap
+l2l1alm
+lla2mad
+lla2mal
+lla2mem
+lla2mél
+lla2mor
+l2l1anal
+lla2nyer
+llany1ó2
+lla2pal
+ll1aszf
+llata2l
+lla2tala
+llat1any
+lla2t1ál
+lla2t1ár.
+llatár1a2d
+lla2t1árb
+lla2tés
+lla2tint
+lla2t1olt
+l2latomo
+lla2tors
+lla2t1ű
+l2l1aty
+l2l1aut
+l2l1á2ga
+l2l1ágb
+l2l1ágg
+ll1ágy.
+ll1ágyá
+l2l1állo
+l2l1álm
+llá2mag
+llá2m1al
+llá2m1e2
+llá2m1érté
+llá2mik
+llá2mis
+llá2m1ut
+llán2k1e2
l2l1á2p
+llára2
+llár1ad
llá2rak
-llás3s
-l2l1edz
-l2l1elm
-lle2ma
+llá2r1á2
+llá2s1ikr
+llá2sü
+llá2sza
+l2l1átd
+l2l1átf
+l2l1á2ti
+l2l1átk
+ll1bl
+ll1br
+ll1cl
+ll1d2r
+l2l1e2dz
+ll1eff
+lle2ger
+lleg1g
+lle2gyé
+lleí2
+l2l1e2kés
+lle2l1a
+lle2lin
+l2l1ell
+l2l1e2lőa
+l2l1e2lőd
+lle2m1a2
lle2m1á
-l2lemo
-llen1n
-llé2ká
+lle2m1e2g
+lle2mel
+ll1emelé
+llem1ell
+lle2mer
+lle2m1él
+lle2m1ér.
+lle2m1érté
+lle2m1o2
+lle2mu
+lle2na
+llen3n
+lle2n1ő2r
+llens2
+lle2r1in
+l2l1e2ró
+l2l1e2sőt
+ll1estr
+lle2tos
+l2l1e2vet
+l2l1ex
+ll1é2het
+l2l1é2jek
+llé2k1aps
+lléká2
+llé2kár
llé2k1ol
-ll1í2rá
-ll1k2
-l2l1ös
-ll1p2
-lls2
-ll1st
+llé2kos
+llé2kó
+llé2k1út
+l2l1é2let.
+l2l1é2letb
+l2l1é2lete
+l2l1é2letén
+l2l1é2letét
+l2l1é2letk
+l2l1élt
+l2l1élv
+llé3nya
+llé1sp
+l2l1é2ter
+llét2o
+l2l1év.
+ll1é2vén
+ll1f2l
+ll1fr
+ll1g2r
+ll1ide
+l2l1i2ga
+l2l1igé
+ll1ill
+l2l1i2ma
+l2l1imp
+ll1ina.
+l2l1ind
+ll1inga
+l2l1ingf
+l2l1ingm
+l2l1ings
+lli2nin
+l2l1inv
+lli2p
+l2l1ipa2
+l2l1irá
+l2l1iro
+l2l1isi
+ll1isko
+l2lism
+l2l1iste
+lli2ta
+l2l1ita.
+l2lital
+l2l1izé
+ll1izma
+ll1izmá
+l2l1i2zo
+l2l1íg
+l2l1íj
+l2l1í2v
+ll1k2l
+ll1k2r
+ll1kv
+l2l1oá
+ll1obj
+l2l1off
+l2l1o2l
+ll1ope
+llos3s
+llóá2
+lló1gr
+llóó2
+lló2rák
+lló2rát
+lló2riá
+l2lóvo
+l2l1öb
+l2l1öl
+ll1önt
+l2l1ör
+ll1öss
+ll1ösz
+l2l1ö2z
+l2l1őr.
+ll1ő2rei
+l2l1ő2rö
+l2l1őrt
+l2l1ő2si
+l2l1ő2ze.
+ll1p2l
+ll1p2r
+ll2si.
+ll1sk
+ll1sp
+lls3s
+llsz2
+ll1szt
+ll1tré
+ll1tri
+ll1tró
+ll1u2bo
+l2l1ug
+ll1ult
+llus1s
+l2l1u2t
+l2l1ús
+l2l1ú2to
+l2l1üd
+l2l1üg
+l2l1ür
l2l1üt
+l2l1üz
+l2l1űz
+llvé2d1e2l
l2ly
-l3lyu
-lm1ajá
-lm1a2ny
-l2m1arc
-lmá2nyé
+lly1ö
+l3lyw
+lma2kad
+lma1kré
+l2m1ant
+lma1trá
+l2m1att
+lmá2l
+lm1álm
+lm1álo
+lmá2nyan
+lmá2ny1út
+lmá2ris
+lm1átk
+lm1átt
+lm1bl
+lm1b2r
+lm1cl
+lm1dr
+lme3gon
+lme1kl
+lm1elb
+lm1e2li
lm1elm
lm1e2lő
-lmfe2
+l2m1ember
+l2m1enc
+l2m1eng
+lmeó2
+lm1epi
+lm1e2seté
+l2m1essz
+l2m1etn
+l2m1etű
+l2m1ex
+l2m1ég
+l2m1élv
+l2m1é2neke
+l2m1ép
+l2m1értő
+l2m1éva
+lm1gl
+lm1gr
+lm1i2dő
+lmi2g
+l2m1iga
+lmigaz1
+l2m1ind
+l2m1inf
+l2m1ing
+l2m1ins
+l2m1inte
+l2m1inté
+l2m1inv
+l2m1i2p
+lm1irá
+lm1iro
+lm1isk
+lm1izz
+lm1íg
+lm1ír
+lm1íz
+lm1kl
+lm1kr
+lm1old
+lm1olv
l2m1o2p
-lm1s2
-lmsz2
-lná2ros
-lne2o
-lnia2
+lm1ors
+l2m1ov
+l2m1ódá
+lm1ó2rá
+lm1ö2k
+lm1ön
+lm1ö2r
+lm1ös
+lm1öt
+lm1ö2z
+lm1ő2r
+lm1p2l
+lm1p2r
+lm1sk
+lm1sl
+lm1sn
+lm1sp
+lm1st
+lm1sz2
+lm1t2r
+l2m1u2g
+l2m1u2r
+lm1utó
+l2m1új
+l2m1üg
+l2m1ünn
+l2m1üz
+lnak2
+lna2p1e
+lná2ris
+lné2v1á
+lni2ker
+lni2s1
1lo
+lo2áz
+lo2b1a2r
2lobá
-lo1dr
-loé2d
+lo2b1á2c
+2lo2be
+lo2b1iv
+lo2b1ó2
+2lobu
+lo1by
+lo2ch
+lo1cy
+lo2éc
+lo2éo
+lo2ép
+lo2éz
lo2g1a2d
-lo2gál
-lo1g2rá
+lo2gal
+lo2g1ál
+logás1s
+lo2ger
+lo2gí
+lo2g1or
+lo2gö
+lo1g2ráf.
+lo1g2ráff
lo2g1ú
+lo2gü
+lo2ir
+lo2kab
+lo2k1a2d
+lo2k1aj
+2l1o2kak
+lo2kárb
+lo2k1á2ro
+lo2k1árr
+lo2k1áru
+lo2k1átj
+lo2káu
lo2k1e2
-lo2kos
+lo2kék
+lo2kid
+lok1is
+lo2k1i2z
+lo2kí
+lokka2l
+lok2k1ala
+lok2k1el
+lok2k1ó2
+lok2kös
+lok2k1ut
+lo2k1ol
+lo2konk
+lo2kor
+2l1o2koz
+lo2kü
lo2laj
-lo2map
+2l1old
+2l1o2li
+2l1olló
+2l1oltár
+lom1adá
+lom1aga
+lo2m1ajt
+lom1aka
+lom1a2lap
+lom1a2lo
+lom1ará
+lom1ass
+lo2m1att
+lo2maz
+lom1ács
+lo2mág
lo2m1ál
-lom1á2ro
-lo2mec
-lomi2
-lo2mid
-lo2min
-lom1itt
-lo2mí
+lo2m1áré
+lom1ári
+lom1árk
+lo2m1árn
+lo2m1á2ro
+lomba2l
+lom2bala
+lom2bav
+lo2med
+lo2meg
+lo2men
+lom1erk
+lom1erő
+lo2m1es
+lo2méd
+lo2mék
+lo2mél
+lom1é2ne
+lo2m1éri
+lo2m1i2d
+lo2m1i2k
+lo2m1im
+lo2mink
+lom1int
+lomi2s
+lom1isz
+lo2miz
+lo2m1í2
+l1omló
+lo2m1okoz
+lo2mol
lo2m1o2r
+lo2m1osz
+lom1ott
lo2m1ó2
-lona2
-lo2nag
+lo2mö
+lo2mő
+lom1p2l
+lo2mü
+lo2mű
+lo2nab
+lo2n1a2d
+lo2n1a2g
lo2naj
-lon2c1i
-lo2ne
+lo2nak
+lo2n1a2l
+lo2n1ar
+lo2n1as
+lo2n1au
+lo2n1av
+lo2n1á2z
+lon2ch
+lon2cil
+lon2d1ó2
+lo2n1el
+lo2n1ir
+lon1k2
+lo2nol
+lo2n1ó2
+lo2nö
+lon1s2
+lon1tr
+lo2nü
+lo2oi
+lo2oj
+lo2or
+lo2ós
+lo2pap
+lop1ál
lo2pe
-l1org
-l1o2roz
+lop1e2l
+lo2piz
+lo2pí
+lo2p1o2r
+lo2p1osz
+lo2pö
+lop2p1in
+lop1t2
+2l1opti
+lo2pü
+lor2din
+lore2t
+2l1org
+2l1orm
+2lorn
2l1ors
2l1orv
-l1orz
-lo1sz2k
-2l1oszl
-lo1t2h
-lo2u2
+2l1orz
+l2os.
+l2osa
+l2osb
+lo2se
+lo2sü
+lo1t2ha
+2lottl
lo2xá
lo2xi
-lo1y
1ló
-lói2d
-2l1ónn
-ló1p2
-2lórab
-2lórm
-ló1t2h
-ló1t2r
-ló2ze
+lóa2d
+lóá2r
+ló1bl
+ló1br
+lóc3c
+ló2cem
+ló2ch
+lócsa2p1á2g
+2l1ó2dát
+ló1dro
+lófé2l1é2v
+lófi2úké
+ló1fl
+lóg1g
+ló2gí
+ló1grá
+lóí2v
+ló1k2l
+ló1kré
+ló2nar
+2l1ó2ni.
+2lónn
+2lóno
+2lónr
+2lónt
+lópárba2
+ló1p2l
+ló1p2r
+ló2rac
+lór1ada
+lór1a2la
+lóra2n
+lór1any
+ló2rar
+2lórái
+2lóráj
+ló2rámr
+2lórár
+2lórát
+ló2rem
+ló2r1e2s
+ló2r1ér
+ló2r1ing
+lór1ism
+ló2rí
+lór1old
+ló2rü
+ló2s1aj
+lósa2n
+lós1any
+ló1ski
+ló1sla
+ló1spe
+ló1s2po
+ló1s2rá
+lós3s
+ló1s2ta
+ló1str
+ló1sz
+ló1t2rá
+ló1tre
+ló1tré
+ló1tri
+ló1tro
+2lóvod
+l1ó2vó
+ló2zad
+ló2z1a2k
+ló2zal
+lóza2n
+lóz1any
+lóza2t1e
+ló2zál
+ló2z1es
+ló2zim
+ló2z1ir
+lóz1isk
+lóz1ism
+ló2zolv
+ló2ző
+ló2zü
+ló2z1ű
1lö
-lö2kel
-lök1o
-lö2m
-lö2n1á
-lö2n1é2
-lön3n
+lö2bö
+lö2ca
+löc3c
+lö2ch
+lö2cő
+2l1ö2dé
+lö2ka
+lö2ká
+lö2ko
+l1öldö
+löl2t1a
+löl2tá
+2l1öltés
+l1ölthe
+löl2to
+l1öltöt
+l1öltöz
+l1öltő
+2l1öml
+lö2möl
+lö2na
+lö2ná
+lön2b1ékét
+lö2ne
+lö2né
+lö2n1o
lö2nó
-lö2pé
-2lö2r
+lö2nu
+lö2nú
+lö2pa
+lö2pá
+lö2pe
+lö2pöl
+löpü2
+lö2p1ülé
+lö2p1ülő
+lö2re
+lö2rö
+lös3szá
+2lössze
lö2sü
-l1ötl
+lö2sze
+lö2szis
+2l1ötl
+löt2ter
+2l1ötv
+2l1öv.
+2l1övb
+l1ö2ve.
+l1ö2vez
+2l1övh
+2l1övn
+l1ö2vön
+2l1övr
+l1ö2vük
+2l1övv
1lő
-2lőbbi
-2lőbbr
-2lőd.
-2lőhív
-lői2d
-lőí2
-2lőkel
+lőa2c
+lőa2n
+lőá2g
+lő1bl
+lő1br
+lő2dad
+lő2dá
+2lőde.
+2lődei
+lő2del
+lő2d1ék
+lő2din
+lő2d1iv
+2lődje.
+2lődjét
+lődköz1
+2lődöke
+2lődökn
+2lődökr
+2lődöt.
+lő2d3ze
+lőe2l
+lőe2s
+2lőesé
+lő1fl
+lő1f2r
+lőgépi2
+lőgé2p1ip
+l1őgyel
+2lőhű
+lői2ta
+2lőít
+2lőkése
+lő1kl
+lőko2r1út
+lő1kv
+2lőlege
2lőnn
2lőny.
-2lőnyé
+lő2nyal
+lő2nyár
+2lőnyb
+2lőnye.
+2lőnyei
+lő2ny1elvi
+2lőnyéb
+2lőnyén
+2lőnyér
+2lőnyét
+2lőnyév
2lőnyh
+2lőnyk
+2lőnyn
2lőnyö
2lőnyr
2lőnyt
2lőnyü
-2l1őrl
-2l1ő2rö
-2l1ő2rü
-lő2s1égg
+lőőr2s1é2g
+2lőpán
+lő1pl
+lő1pr
+lő1ps
+2lőreh
+2lőrej
+lőre3m
+2lőret
+2lőréb
+lő2r1is
+lő2rül
+2l1őrz
+lő2sál
+lő2sin
+lő1s2ka
+lő1ská
+lő1sla
+lősó2
+lő2sór
+lő2s1ót
+lő2ső
+lő1s2pi
+lő1spr
+lő1srá
lős3s
+lős2tar
+lő1str
+lő1sy
+lősz2
+lős3zára
+lős3zárr
+lő1szf
+l1ő2szít
lő1szt
-2lőté2t1
-2lőtol
-lőu2
-2lővés
-2lővét
+2lőtét.
+2lőtolá
+lő1tre
+lőu2t
+lőü2l
+2lővig
+2l1ő2zét
+2lőzié
+2lőzl
+2lőzm
+2l1ő2zük
+lp1a2lag
+l2p1a2lap
+l2p1alát
l2p1a2láv
-lpen1
-lp2h
-l1phe
-lp2lá
-lpo2ka
+l2p1alk
+lpanto1
+l2p1any
+l2p1áll
+l2p1átm
+l2p1áts
+lpcsa2p1
+l2p1eg
+lp1e2lu
+l2p1e2m
+lpen1n
+l2p1e2rő
+l2p1ég
+lpé2l
+l2p1éle
+lpé2r
+l2p1éri
+l2p1i2d
+l2p1i2na
+lp1izm
+lp1i2zo
+l2p1ív
+l1p2lá
+l2p1old
lpo2n
lpon1á
-lp2rak
-l1p2re
+lp1p2r
+l1prd
l1p2ri
l1p2ro
-l1p2ró
-lreá2
-lsá2r
-l1s2k
-l1s2l
-l1s2m
-lsőü2
-l1s2p
-l1s2r
-lst2
-ls2ta
-ls2ti
-lsus3s
+l1p2rób
+lpu2s
+lp1uszo
+lrá2k1e
+lrei2
+lre1p2ré
+lre1sz
+lreü2
+lsa2v1a2m
+lság3g
+ls1eprik
+ls2ho
+ls2ka
+ls2ká
+ls2ki
+ls2la
+ls2lá
+ls2li
+ls2ma
+ls2mi
+lsors1s
+lsóé2r
+lső1sz2
+l1s2pa
+l1s2pe
+l1s2pé
+l1s2pi
+l1s2po
+l1s2pó
+l1sp2r
+l1s2rá
+l1s2ró
+l1s2ta
+ls2tá
+lste2i
+l1s2ti
+l1s2tí
+l1s2to
+l1st2r
+l1s2tu
+l1s2tú
lsza2ké
+lsza2k1ü
+lszá2rú
+l2sz1e2gű
l1sz2f
l1sz2l
-lta2d
-lt1ada
-lt1a2gy
-lt1ajt
-lta2l1e2
-lta2l1é
-l2tarc
+l1sz2p
+lszt2
+lsz2tá
+l1sztr
+l1sz2v
+lta2gyá
+lt1ajá
+lta2lapb
+lta2l1á2s
+lta2l1á2z
+lta2len
+lta2l1ev
+lta2l1é2
+lta2liz
+ltal1l
+lta2lö
+l2t1amp
+l2t1apr
+lt1ará
+l2t1arc
+lta2riá
+lt1assz
+lt1aszt
l2t1a2u
+lt1azo
lt1ág.
lt1á2ga
-lt1ápo
-l2t1árf
-lt1áta
-ltá2v1i2
-ltés1s
-lt1iva
-lt1í2v
-ltornác1
-lt1ö2vi
-lt1őr.
-l1t2ri
+lt1ágb
+lt1ágg
+lt1ágn
+lt1ágr
+l2t1áll
+ltána2
+ltá2nan
+ltá2rada
+ltár2s1ág
+lt1árur
+ltá2s1á2g
+ltá2tal
+l2t1átr
+lt1bl
+lt1br
+l2t1ell
+l2t1elö
+l2t1emu
+lte2rad
+l2t1e2reik
+l2t1erő
+l2teru
+lte2t1a2
+lte2ték
+l2t1ékné
+lté2l
+lt1éle
+lt1élm
+lt1érc
+l2t1érz
+lté2sa
+lté2s1é2g
+ltés3s
+lté2t1é2
+lté2ves.
+lt1fl
+lt1gl
+lt1gr
+lt1ide
+ltig2
+l2t1i2gé
+lti1kl
+l2t1ill
+lt1imp
+l2t1ind
+l2t1ing
+l2t1i2o
+l2t1isi
+lt1ism
+l2t1ist
+l2t1i2ta
+l2t1ín
+l2t1í2r
+lt1ít
+l2t1í2v
+ltív1e2l
+l2t1í2z
+lt1kr
+l2t1oml
+l2t1ord
+l2t1org
+l2t1orj
+l2t1orr
+lt1ors
+ltos3s
+l2t1o2x
+ltó1p
+ltó1s2p
+ltó1sz
+ltót2
+ltö2l
+l2t1ölé
+lt1önt
+lt1öss
+ltőa2
+ltőe2l
+lt1ő2rö
+lt1pl
+lt1pr
+ltra1s
+lt2rág
+lt2rén
+lt2rik
+lt2ril
+lt2róf
+l1t2rón
+lt2róp
+ltsé2g1el
+lt1sl
+lt1sp
+lt1st
+lt1t2r
+l2t1udv
+l2t1una
+ltu2n1i
+lt1ura
+ltu2sze
l2t1u2t
+ltú2ri
+l2t1üg
+lt1ü2lé
+lt1üst
+l2t1ü2v
+lt1ü2zem
1lu
-lu2de
+lua2g
+luá2r
+lu2b1a2d
+lu2bal
+luba2n
+lu2b1as
+lu2bár
+lu2b1e2g
+lube2r
+lu2bes
+lu2bél
+lu2b1in
+lubó2
+lu2bór
+lu2bö
+lub1t2
+lu2bü
2ludj
-2ludn
-2ludt
2ludv
-l1u2go
-l1ugr
-lu2le
-2luli
+lu1dy
+lue2l
+lu2esé
+lugas1s
+lu2gat
+lu1g2l
+2l1u2gor
+2l1ugr
+lui2r
+2l1ujj
+lu1kl
+lu2k1os
+lu2k1o2v
+lu2l1inf
+lu2lí
2lulr
-lu2m1é
+lu2mad
+lu2maz
+lu2mál
+lumen1n
+lu2mer
+lu2mes
+lu2m1i2k
+lu2m1ip
2lumí
+lum2pel
+2lund
+l1unh
+2l1u2ni
+l1unj
+l1unl
+l1unn
+l1u2no
+l1u2nó
+l1unv
lu2rak
+lu2ram
+lu2rat
2l1u2ru
-lu2se
-lu2sza
+2l1u2rú
+lu2sad
+lu2s1aka
+lu2sakr
+lu2sal
+lu2s1a2n
+lu2s1ág
+lu2sál
+lu2s1e2r
+lu2s1érté
+lu2sim
+lu2sis
+lu2sír
+luskész1
+lu2s1ó2
+lusö2
+lu2sör
+lu2ső
+lus3sze
+lus3szi
+lust2
+2lutánz
+2l1utc
lu1t2h
+lu2tód
+lu1tra
+lu2zs
1lú
lú2d1a
-lú2gá
-2l1ú2j
+lú2dá
+lú2de
+lú2dét
+lú2d3z
+lú2ga
+lú2g1á
+lú2ge
+lúg3g
+lú2gi
+lú2gol
+2l1újd
+2l1ú2jí
+lú2ju
+lú2ri
+lú2ru
+lú2rü
2l1ú2sz
-lú2té
-2l1úth
-lú2ti
-2l1útj
-lú2to
+lú2té.
+2l1útv
+lú2z1a2n
1lü
-2lüd
-2l1ü2g
+lü2cs
+lü2dí
+lü2dü
+lü2ge
+lü2gy
+lü2lá
l1üldö
-lü2l1em
-lü2l1é
-2l1ülhe
-2l1üljö
-2l1ülne
+lü2lel
+lü2l1e2m
+l1ülep
+lü2lé
+lül1ér
+2l1ülés
+2l1ülhet.
+2l1ülhetne
+2l1ülhets
+lü2lí
+2l1üljek
+2l1ülnek
+2l1ülnék
2l1ülni
+2l1ü2lö
2l1ü2lő
+2l1ülsz.
2l1ült.
+l1ülte.
+2l1ültek
2l1ültem
+2l1ültes
2l1ültet.
+2l1ültete
+2l1ülteti
+2l1ültetj
+2lültetl
+2l1ültetn
+2lültets
2l1ültett
-l1ülté
+2l1ültetü
+2l1ültetv
+2lülté
+l1ültéi
+l1ülték
+l1ültél
+l1ültén
+l1ültér
+l1ültét
+l1ültn
+2l1ültü
+lü2lú
lü2lü
-2l1ü2r
+2l1ülün
+2l1ülve.
+2l1ünn
+lü2re
+lü2rí
+lü2rü
+lü2sz
+lü2te
lü2té
lü2ti
lü2tö
lü2tő
lü2tü
-2l1ü2v
-2l1ü2z
+lü2ve
+lü2vö
+lü2ze
+lü2zé
1lű
-l1ű2z
-lv1alk
+lű2rá
+2l1űrb
+2l1ű2ri
+l1űrl
+lű2ze
+lű2zé
+lű2zi
+lű2zö
+lű2ző
+lű2zü
+lva2dat
+l2v1adm
+lvaj1ak
+lva2j1e
+lv1akad
+l2v1akc
+l2v1a2la
+l2v1alg
+l2v1alk
+l2v1ant
+l2v1a2ny
+l2v1a2rás
+l2v1a2z
+lvá2gy1ón
+l2v1állat
+l2v1állt
+l2v1áp
+lvá2rain
+l2v1á2rak.
+lvá2ras
+lvá2rár
+l2v1árny
+lvá2rol
+l2v1á2rul
lvás3s
-l2v1e2le
-l2v1előt
-l2v1els
-l2v1ember
+lvá2szi
+lv1áta
+lv1áth
+lv1átk
+lv1br
+l2v1e2dz
+lv1egys
+lv1egyv
+lv1e2kéb
+l2ve2leme
+l2v1elk
+l2v1ell
+l2v1eró
+l2v1ex
+l2v1é2gés
+lvé2gül
+l2v1élm
+l2v1é2neke
l2v1ép
-l2v1érzé
-l2v1észl
-l2v1isk
-lvkész1
+lvé2ri.
+l2vértel
+l2v1érté
+l2v1é2rü
+l2vérzési
+lvé2sza
+lv1fr
+l2v1i2de
+l2v1i2do
+l2v1iga
+lv1iko
+l2v1i2m
+lv1inté
+lv1i2pa
+l2v1iro
+l2v1irt
+l2v1isko
+l2v1ism
+l2v1izm
+l2v1izo
+l2v1í2ve
+lvíze2
+lvíz1es
+lv1kl
+lv1kr
l2v1ok
+l2v1old
+l2v1olv
+l2v1onto
+l2v1op
+l2v1or
l2v1os
-l2v1öl
-l2v1ő
-l2v1ú
+lv1ödé
+lvö2l
+l2v1ölé
+l2v1ölt
+l2v1ön
+l2v1ös
+l2v1öv
+l2v1ö2z
+lv1ő2r
+lv1ős
+lv1pr
+lv1ps
+lv1sp
+lv1st
+l2v1ut
+lv1új
+l2v1üg
+l2v1üt
l2y
1lya
-lya2gya
+lya2dat
+2ly1adm
+2ly1a2dó
+2lyagy.
+2lyagyr
+2lyajt
+2ly1a2kas
ly1akc
-ly1a2la
-ly1alk
-lya2m1é
-lyan3n
-ly1a2rá
-ly1arc
-2ly1ass
-ly1aut
-2lya2z
-ly1azo
+2ly1akná
+2lyakós
+2lyakt
+ly1a2lat
+2ly1alb
+2ly1alk
+2ly1alm
+ly1a2lom
+ly1alt
+lya2maj
+lya2mará
+lya2m1el
+lya2mem
+lya2m1érté
+2lyang
+2lyani
+lya2nyag
+ly1a2nyá
+ly1a2pán
+lya1p2r
+2ly1arc
+lya2sal
+ly1aspe
+ly1assz
+2ly1atl
+lya1t2r
+2lyaty
+2lyazo
1lyá
+2lyábé
+2lyábr
+2ly1ág
+ly1áld
ly1áll
-ly1árn
-ly1á2ro
-2ly1áru
+2ly1áp
+2ly1á2rad
+2ly1á2rak
+2ly1á2ram
+2ly1á2rat
+ly1árk
+2ly1árn
+2ly1árr
+2ly1á2ru
+lyás3s
+lyá2sz
+2lyáta
+2lyátf
+2lyáth
+2lyátlá
+2lyátlé
+2lyátm
+2lyáts
+2lyátt
+2lyátv
+ly1bl
+ly1br
+ly1dr
1lye
-2ly1e2c
-lye2gi
-lye2l
+lye2ga
+ly1e2gye
+lyegyez1
+ly1ej
+2lyeke.
+2lyekek
+2ly1e2kéb
+2ly1e2kérő
+ly1e2le
+ly1elf
+ly1elh
+ly1ell
ly1elm
-2ly1elv
-lyenü2
-ly1e2r
+ly1e2lő
+ly1elr
+ly1els
+ly1elt
+ly1elü
+ly1elv
+ly1elz
+lye2m1a
+2lyember
+2ly1e2mel
+lye2min
+2lyemlí
+2ly1eng
+ly1erk
+ly1e2rő
+2ly1esd
+2ly1esemé
+2ly1e2sete
+2lyeseté
+2ly1e2sett
+2lyesél
+2ly1e2sés
+2ly1este
+2lyeszk
+2lyeszm
+2lyeszű
+2lyetet
+2lyevő
+2ly1ex
1lyé
2ly1ég
+2lyéhe.
+2lyéhen
+2lyéhet
+lyé2l
+ly1éle
+ly1élm
+2lyéneke
2ly1ép
+2ly1ér.
+2ly1érc
2ly1érd
+2ly1é2ré
+2ly1érm
+2lyérő.
+2lyérői
+2lyérők
+2ly1érr
2ly1érte
2ly1érté
+2ly1é2rü
2ly1érv
2ly1érz
+ly1ész
+2ly1étt
+2lyév.
+2lyéve.
+2lyévei
+2lyévek
+2lyéven
+2lyévet
+2lyévév
+2lyévi
+2lyévr
+2lyévv
+ly1fl
+lyf1ölt
+ly1gl
+ly1gr
1lyi
-2ly1id
-2ly1i2gé
-ly1ill
-2ly1im
-ly1int
-2ly1irá
+2lyibo
+2lyideá
+2lyideg
+2lyiden
+2lyidi
+2ly1ido
+2lyidő
+lyié2h
+lyi2g
+2lyiga
+2lyigá
+2ly1ige
+2ly1igé
+2ly1iha
+2ly1ill
+ly1ima
+2lyimá
+2lyimp
+2lyind
+2lyinf
+2ly1ing
+2ly1ini
+2ly1int
+2lyinv
+2ly1i2p
+ly1i2rat
+2lyirá
+2lyiri
2ly1iro
+2lyirr
+2lyirt
+2ly1isk
2lyism
-2ly1i2sz
+2lyisp
+2lyist
+2ly1ita
+2lyivad
+2ly1i2z
1lyí
+2ly1íg
+2ly1ín
+2ly1í2r
+ly1ív
+ly2kiz
+ly1kl
+ly1kró
+1lyn.
1lyo
+2ly1ob
2lyodú
+2ly1of
+2lyokal
+2ly1okl
+2lyokm
2lyokoz
-2ly1or
+2lyokta
+lyo2l
+ly1ola
+ly1old
+ly1oll
+ly1olt
+ly1olv
+lyo2m1as
+2ly1op
+2ly1o2r
+2ly1osz
+2ly1ott
1lyó
+ly1ódá
+lyó2s1á
1lyö
-ly1ös
-2ly1ő2
-lyt1áll
+2ly1öb
+2ly1ö2l
+2ly1ö2r
+ly1öss
+2ly1öv
+1lyő
+ly1ő2r
+ly1pl
+ly1pr
+lyrádi2
+lyre1p
+1lys.
+ly1sk
+ly1sp
+lys2t
+lyszá2m1é
+ly2tac
+ly1t2r
1lyu
2ly1ud
+2lyugr
+2ly1uh
2ly1uj
-2ly1ur
+lyu2kás
+2lyuni
+2ly1u2r
+2ly1u2t
1lyú
-ly1úr.
-2ly1út
+2lyújs
+2ly1úr.
+2lyúth
+2lyútr
+2lyútt
+2lyútv
1lyü
-ly1ü2v
+2ly1üd
+2ly1üg
+2lyünn
+2ly1ür
+2ly1ü2v
2ly1üz
1lyű
-lzus1s
+2ly1űr.
+2ly1űrh
+2ly1űrl
+1lywo
+lyze2t1el
+lzás1s
+lze2ta
+lze2t1e2l
+lze2t1ér.
+lzé2sa
+lzőa2
+lzőe2
+lző2s1orr
+lzus3s
+lzu2s3z
+2m.
1ma
-2m1abl
-2m1a2cé
-ma2dé
-madi2a
-mad1osz
-ma2dóm
-ma2es
-ma2g1al
+maa2d
+ma1bra
+2m1abs
+ma2cél.
+ma2célb
+ma2célt
+2madag
+2m1adap
+ma2datb
+ma2dato
+ma2datt
+madás1s
+ma2d1é2v
+madókész1
+ma2dóz
+3m2a3dz
+mae2r
+maé2r
+ma1f2ra
+ma1fri
+ma2gac
+ma2g1a2dato
+ma2g1a2dá
+ma2g1a2dó
+ma2g1a2du
+maga2l
+mag1ala
+ma2ga2n
+mag1any
+maga2r
+mag1ara
magas1s
-ma2g1en
-ma2gor
-ma2gö
-ma2gyú
-ma2io
-2maja
-2m1ajt
+ma2g1asza
+mag1azo
+ma2gág
+mag1áll
+mag1á2ré
+mag1árn
+mag1árr
+mag1árt
+mag1áta
+ma2g1áto
+ma2geb
+ma2g1el
+2m1aggr
+ma2gid
+ma2g1i2k
+ma2g1í
+magkia3dó
+ma2g1or
+ma2g1osz
+mag1óra
+ma2g1óv
+ma2g1u2r
+ma2g1ü2
+2m1agy.
+2m1agyb
+2m1a2gyu
+m1ahh
+ma2il.
+ma2ilt
+mai2z
+2m1ajta
+maj2ti
+ma2kará
+ma2kác
2m1akc
-2makó
-ma2kón
-ma2kós
-makro1
-2m1a2lak
-ma2lap
+mak2k1e2
+2makkr
+2m1akku
+ma1klu
+2m1a2kol.
+ma1k2rém
+ma1k2ri
+2makro
+m1akti
+ma2kus
+malac3há
+mala2c3s
+2malag
+mala2g1ú
+ma2laku
+2m1alakz
+2m1a2lan
+2m1a2lapí
+malasz2t1a
+2m1alb
+2m1alc
+2m1ald
+2malg
+m1algo
+2m1alj
2m1alk
-mal1t
-ma2lu
+malo2m1e
+mal1os
+m1alr
+2m1alt.
+mal1th
+2m1a2lu
2malv
+2m1amp
+2m1a2nal
ma2nat
-maó2
+2maná
+ma2n1eg
+2m1angi
+2m1anto
+2m1antr
+2m1a2nya.
+ma2nyag
+2m1a2nyá
+2m1a2nyó
+mao2k
+ma2pa.
ma2pas
-2m1apj
-ma1p2r
-ma2s1i2k
+2m1a2pát
+ma1p2l
+ma1p2re
+ma1p2ré
+ma1p2ri
+ma1p2ro
+2m1aps
+2m1a2rány
+2m1arb
+2m1arc.
+2m1arcc
+2m1arch
+mar1cko
+2m1arcu
+2m1arcú
+2m1a2rén
+ma2r1i2si
+mar2k1al
+mar2k1in
+mar2k1ón
+mar2k1ó2r
+2marm
+maro2k1
+ma2romá
+maros1s
+marók2
+maró1kh
+maró1kk
+maró1kn
+maró1kr
+ma1ry
+2m1arz
+ma1s2ká
+ma1s2pe
+ma1spr
+ma1s2rá
mast2
+ma1s2ta
+ma1ste
ma1str
-ma2szö
-mat1á2ru
-ma2t1e2l
-ma2tig
-mat1int
-ma2t1ir
-2matő
-ma2va
-ma2z1e
+masz1egy
+masz1e2me
+ma2sz1ét
+ma2szév
+ma2szis
+maszí2v
+masz1íve
+masz1ös
+mat1ada
+mat1alap
+mat1anya
+ma2taz
+ma2tág
+matá2raka
+ma2t1á2ras
+mat1á2rár
+ma2t1árn
+ma2t1á2rú
+ma2t1áz
+ma2t1e2g
+mat1eli
+ma2t1ell
+mat1elő
+mat1elt
+ma2t1eme
+mate2s
+ma2tél
+ma2t1érte
+matfé2
+matfél1
+matfélé2
+ma2tid
+ma2t1ind
+ma2t1inf
+ma2t1ing
+ma2t1int
+ma2t1örö
+ma1t2ran
+mat2rág
+mat2tin
+ma2t1ut
+2m1a2tya
+ma2tyá
+2m1a2uk
+mau2ra
+ma2uri
+ma2us
+mau2ta
+2m1a2uto
+2m1a2vat
+ma2z1a2l
+ma2zál
+ma2z1átl
+ma2zel
+mazókész1
+ma2z3sű
1má
+2m1á2bé
2m1ábr
+má2cs1as
+má2cs1e2
+má2csin
+má2csir
+má2csis
+má2csó
+má2csü
+má2fá
2m1ág.
2m1á2ga
+2m1á2gá
+2m1ágb
+2m1á2gé
+2m1ágg
+má2gi.
+2m1á2gig
+2m1ágk
+m1ágna
+2mágo
+2mágó
+2m1ágr
+má2guk
+má2gun
2m1á2gú
2m1á2gy
-má2j1o2
-mála2
-má2l1al
+mágya2d
+mágy1ada
+má2hí
+má2jan
+má2j1árt
+má2j1e2
+májo2
+má2j1ol
+májren2
+má2j1ul
+má2jü
+máka2
+má2k1al
+má2kar
+má2k1e2
+má2k1ér.
+má2kil
+má2k1ó
+má2kő
+má2k1ü
+má2l1a2l
+2m1álar
má2lál
-má2l1e
-má2l1ér
-m1állí
-má2lu
+2m1álc
+má2l1e2
+mál1ért
+2m1állam
+m1állap
+m1állat
+2m1állí
+m1állom
+2m1álma
+2m1álmo
+má2los
má2m1as
-má2mu
-má2ne
-má2nin
-má2nyal
+2m1á2mí
+mána2
+má2n1as
+má2nav
+má2nár
+mánc1c
+mán2ce
+mán2c1ég
+mán2cip
+mán2csé
+má2n1e
+má2n1in
+má2nis
+má2n1it
+má2n1ö2
+má2nő
+máns3s
+mán2tac
+mán2tag
+mán2t1al
+mán2t1as
+mántá2
+mán2t1ék
+mán2t1öl
+má2nú
+má2nü
+má2ny1a2d
+má2ny1a2g
+má2nyaj
+má2ny1aka
+má2ny1a2l
+mánya2n
+má2nyany
+má2nyap
+má2nyar
+má2nyau
+má2nyav
má2nyaz
-má2nye
-mányi2
-má2ny1ir
-má2nyí
-má2ny1út
-m1á2p
+má2ny1e2
+má2ny1ér.
+má2nyérd
+má2nyérz
+má2ny1í2
+má2ny1ó2
+má2nyö
+má2po
2m1á2rad
-m1á2rak
-má2ru
-2m1á2rú
-má2se
-má2sir
-más3zs
-2m1á2t1a2
-2m1átm
+má2r1a2g
+2máram
+má2r1a2n
+má2ras
+már1ass
+2m1á2rat
+má2r1au
+má2r1ál
+má2re2
+már1em
+má2rés
+má2r1id
+má2r1ik
+má2r1i2p
+má2r1i2si
+már1isk
+már1istá
+má2rí
+2márkok
+2márol
+má2rö
+má2rő
+má2rug
+m1á2ruh
+má2ruk
+m1árur
+má2rü
+má2s1a2d
+má2sal
+má2sap
+má2s1a2r
+má2s1av
+má2saz
+má2s1á2rá
+má2s1árn
+má2sás
+2m1ásásá
+2m1ásásn
+2m1ásásr
+másbe2j1
+másbejá2
+má2s1e2
+má2sír
+má2sor
+2m1á2só
+má2sö
+má2ső
+mást2
+más1tr
+má2s1ü2
+más3zav
+2m1á2ta
+mát1a2k
+2m1á2tá
+2m1átc
+2m1átd
+máte2
+má2ten
+2máté
+2m1átf
+2m1átg
+2m1áth
+2m1á2tir
+2m1á2tí
+m1átj
+2m1átló
+2m1átn
+má2t1ol
+2m1á2t1ö
+2m1átp
+2m1átre
+2m1áts
+2m1átte
+2m1á2tú
+2m1á2tü
2m1átv
-mbak2
+má2zal
+má2ze
+mázi2a
+mázi2é
+má2z1i2s
+má2ző
+má2zsal
+mázs1e
+máz3sz
+mb1akc
+m2b1akk
+mba1k2r
+mb1akv
+m2b1a2lag
+m2b1alj
+m2b1alk
+m2b1a2na
+m2b1a2nya
+mba1p
+mb1a2var
+mb1a2zo
mb1á2gy
-m2b1e2p
-mbe2r1a
-mbe2rep
-mbe2r1és
-m2b1ing
-mb2lo
-mb1ús
-m1d2
+m2b1áll
+m2b1á2ron
+m2b1árró
+mbá2száv
+m2b1ászná
+m2b1á2szoka
+m2b1á2szokk
+m2b1á2szoko
+m2b1á2szokr
+m2b1áta
+m2b1áth
+mbeá2
+mb1e2ce
+mbe1k2
+mbe2led
+mb1e2leg
+m2b1ell
+mb1elr
+mb1elsz
+mb1epe
+mbe2r1a2g
+mbe2ral
+mbe2ran
+mbe2ras
+mbe2rá
+mbe2reg
+mbere2sz
+mber1eszű
+mbe2rev
+mbe2r1él
+mbe2r1é2s
+mbe2rimá
+mbe2ring
+mbe2risz
+mbe2rol
+mbe2ros
+mbert2
+mbe2r1ú
+m2b1é2g
+mb1é2ke
+m2b1ékí
+m2b1ép
+mbé2ress
+m2b1érté
+m2b1érz
+mb1gr
+m2b1ide
+mbi2k1al
+mbi2ke
+m2b1illa
+m2b1i2na.
+m2b1i2nai
+m2binam
+mb1ind
+m2b1inf
+m2b1ing.
+mb1inv
+m2b1ipa
+m2b1izm
+mb1i2zom
+m2b1izz
+m2b1ív
+mb1íz
+mb1kl
+m1b2lú
+mb1ly
+m2b1ob
+mb1olda
+mbo2lyak
+mb1ond
+m2b1op
+m2b1ormá
+m2b1ormú
+m2b1o2roz
+m2b1oszl
+mb1öle
+m2b1öv
+mb1ő2si
+m2b1ő2sz
+mb1pl
+mb1pr
+mbrádi2
+mb2rev
+mb2rok
+mb2ron
+mb1sp
+mb1st2
+mb1sz
+mb1tr
+mbu2sze
+mbu2szí
+m2b1u2t
+mb1új
+m2b1üg
+m2b1ül
+m2b1üs
+m2b1üt
+m2b1üz
+mbvezé2
+mc2lu
+mcsa2p1á2g
+mda1b2
+mda1g2
mda1p2
+mdi2ale
+mdi3ap
+md2ra
+md2rá
+md2ro
+md2ró
1me
-meá2r
-2m1e2bé
-me2cet
-me2dén
+mea2l
+mea2n
+me2av
+me2béd
+mede2r1e2
+2medény
+me1d2rá
+2m1e2dz
+mee2s
+me2et
+2m1eff
+me2gaba
me2g1ala
-me2gan
-me2gác
-me2gát
-me2g1á2z
-me2g1ec
+me2g1alu
+me2g1alv
+me2g1an
+me2g1a2r
+mega1sz2
+me2gav
+me2g1á
+me3gám
+megá2s
+megá2t
+megá2z
+me2g1eg
me2g1el
-me2g1em
-me2g1e2r
-meg1esk
-meg1esn
-me2g1ette
-me2g1etté
-me2g1ettü
-me2g1éd
+mege2le
+mege2lő
+me2ger
+me2g1esem
+meg1eszt
+me2geta
+me2g1e2te
+me2gez
me2g1é2l
-me2gép
-megi2
-me2gih
-me2gil
-me2g1ir
-me2giv
-me2giz
-me2g1í2
-me2g1o2
+megés3s
+megész1
+meg1f
+megg2
+meg1gr
+me2gi
+meg1igá
+meg1inn
+meg1ir
+meg1is
+meg1itt
+me2g1í
+me2g1o
me2g1ó2
me2g1ö2
-megő2
-meg1s
+me2gőr
me2g1u2
+me2gú
+me2g1ü2g
me2g1ü2l
+2megyez
+2m1egyh
+2m1egyl
2m1egys
-me2k1ar
-me2k1á2
+2megyüt
+me2hető
+mei2rá
+me2k1ad
+me2k1ag
+mek1alk
+me2k1am
+mek1arc
+me2k1a2s
+me2k1att
+me2k1á2l
+me2k1á2p
+me2k1ár.
+me2k1ára
+me2kát
+mek1egy
+mek1ell
+me2kep
+me2k1ers
+meke2sz
+me2k1esze
+me2keszm
+mek1eszte
+me2kev
+me2k1ék
me2kél
-me2k1és
-me2k1id
-me2k1ir
-me2kis
-me2kí
+me2k1ér.
+mek1érde
+me2k1érk
+me2k1érte
+me2k1érté
+me2k1éss
+me2k1éte
+me2kido
+me2kij
+mek1imá
+me2k1ing
+me2k1int
+me2k1i2p
+me2k1ist
+me2k1ita
+me2kír
+me2kít
mek1k2
-me2kor
+mek3lu
+me2kob
+me2k1ok
+me2k1old
+me2k1olt
+me2k1onk
+me2kop
+meko2r
+mek1ora
+mek1oro
+mek1ort
me2k1os
-me2k1ot
-me2köl
-2meled
+mek1ott
+me2k1ó2v
+mek1öltö
+me2kön
+mek1öröm
+me2k1öt
+me2k1ő
+mek1s
+meksz2
+mek1t2
+me2kuj
+me2kun
+me2kur
+me2k1ú2
+me2küd
+me2k1üg
+me2k1üld
+me2k1ü2lé
+me2k1ü2lő
+me2küz
+m1elad
+mel1ak
+me2lág
+me2lál
+2melb
+2m1e2lef
+me2lekt
+mel1e2l
+2m1e2leme
+2m1e2lemz
+2m1e2les
2melet
+mele2t1ér.
+2m1e2lég
+2m1e2l1é2l
+2m1e2l1ér
+melés3s
+2m1elf
+2m1elgo
+m1elha
+2m1elhá
+2m1elhel
+me2lit.
+2me2l1í2
+2m1eljá
2melk
-mel2l1é2rü
-mel2l1u
+m1elké
+m1elkí
+m1elkö
+mel2lál
+m1ellene
+mel2ler
+mel2l1ér.
+mel2ling
+mel2l1iz
+mel2lo
+mel2lö
+mel2l1u2
2m1elmé
2m1elnö
-me2lőa
-m1e2lőá
-melőe2
+me2los
+m1előde
+2m1e2lőí
+m1e2lőle
+m1e2lőtt
+2melőz
+me2lőző
2m1elr
+2m1elszá
+2m1elta
+2m1eltá
m1elter
-2m1emel
-men2tan
+2m1eltett.
+2m1eltettn
+2m1eltér
+2m1elti
+2melty
+2m1elv.
+2m1elvá
+2m1elves
+2m1elvn
+2m1elvo
+me2ly1ék
+2m1elz
+2m1eml
+2m1e2mul
+me2n1a2d
+me2nal
+me2nar
+me2nau
+me2nát
+me2n1e2g
+me2n1el
+me2ner
+mene2t1á2
+mene2tö
+menés3s
+2m1enges
+me2nil
+me2n1ip
+me2ní
+me2nö
+men2s1é2g
+men2t1ell
+men2tip
+men2t1is
+me2n1u
+me2nú
me2nya
-me2op
-2m1e2p
+menye2ma
+me2om
+me2óe
+me1p2h
+me2pik
+me2pos
+me1p2r
+mera1p2
+mer1ass
+2merdő
+2m1e2rec
+2meredm
+mer1egy
2m1e2rej
+me2r1e2l
+me2r1eml
+mere2t1a
+mere2t1e2l
+mere2t1ér.
+2merezőkh
+me2r1ép
+me2r1il
+me2rim
+mer1inf
+mer1ing
+me2r1ip
2mernyő
-me2rőm
-me2rőv
-2m1e2rű
-me2s1er
-me2s1o2
-me2su
-me2s1ú
-2m1eszm
+me2r1ol
+me2ror
+me2r1os
+me2rov
+2meről
+2merősí
+mers2
+mer1st
+mer1tró
+me2r1ü2g
+me2sas
+me2s1emb
+2m1esemén
+mese1s
+2meseté
+2m1e2sett
+2mesély
+2m1e2sésé
+2m1e2sésh
+2mesésk
+2mesésr
+2meséss
+2mesést
+2m1e2ső
+me1s2po
+2m1estb
+2m1este.
+2m1estek
+2m1esté
+2m1estf
+me1s2tó
+2m1estr
+2m1estün
+me2szan
+2meszem
+me1sz2tá
+met1anya
+meta1s
+metasz2
+me2t1e2gy
met1ell
-me2t1or
-me2t1ó2r
+2m1e2teté
+met1ing
+me2tór
me2tú
+me2tűd
+2m1e2ug
+me2uk
+meus3s
+meu2t
me2vő
-me2zár
+me2zac
+me2z1aj
+meza2k
+me2zau
+me2zál
+me2zedé
+me2zeg
+me2z1elj
+me2z1ell
+me2zelőh
+me2zer
+mez1ere
+me2z1ék
+me2z1ér.
+me2z1érd
+mez1éret
+me2z1é2ri
+me2z1id
+me2zim
me2zin
-me2zor
-me2zö
-me2zs
+me2zio
+me2zír
+me2z1ol
+me2z1or
+me2z1ö
+mezőe2
+me2z1ő2rö
+me2z1őss
+2mezrem
+m1ezrese
+m1ezresr
+m1ezrest
+me2z3sa
+me2zsá
+me2zsö
+me2zu
+me2zú
1mé
+mé2ber
2m1ébr
-mé2g
-még1a
-még1i
+mé2cs1a2
+mé2cso
+mé2g1a
+mé2ge
+még1eg
+mé2gé
+mé2gi
+még1is
+mé2g1o2
+mé2gő
+mé2gú
+mé2h1a2
+mé2h1á
+mé2heg
+mé2hel
+mé2hir
+mé2h1is
+mé2h1or
+mé2hö
+méhren2
+2méhsé
+2m1éj.
+2m1éjb
+mé2jes
+2m1éjs
+méka2
+mé2k1ad
+mé2k1aj
+mé2k1ak
+mé2k1al
+mé2k1an
+mé2kar
+mé2kaz
mé2k1á2
-méke2l
+mé2k1e2g
+mék1elh
mék1ell
-mék1elő
-mé2kin
+mék1e2lő
+mé2k1ese
+mé2kev
+mé2kez
+mé2k1é2k
+mé2k1é2l
+mé2kid
+mé2kirá
+mé2kí
+mé2k1o
+mé2k1ö
+mé2kő
+mé2k1u2
+mé2k1ú
+mé2le.
+2m1é2lel
+mé2les
+mé2lez
+2m1é2lén
2m1élm
-mé2ly1a
+mé2lya
mé2lyá
-mé2lyig
-mé2ny1el
-mé2nyir
-2m1é2p
-mér2v1a
+mé2lyeg
+mé2ly1ú
+mé2n1a2r
+mé2n1a2t
+2ménekb
+2ménekh
+2ménekl
+mé2n1el
+mé2n1é2k
+mé2n1és
+mé2nid
+mé2nin
+mé2n1is
+mé2niv
+mént2
+mé2ny1e2g
+mé2ny1e2l
+mé2nyer
+mé2nyék
+mé2nyim
+mé2nyír
+mé2ny1o
+mé2nyö
+mé2nyú
+ményü2l
+mé2ny1ülé
+mé2pí
+mé2pü
+2m1érc.
+2m1é2retts
+2m1é2rén
+mé2rér
+mérés1s
+2m1é2rév
+2m1é2rie
+2m1é2rin
+2m1érké
+2m1érlel
+mé2r1ón
+2mérteke
+2m1értes
+2m1értér
+2m1értés
+2m1é2rül
+mér2v1a2
2m1érz
-mé2sá
+mé2s1a2
+mé2s1á2
+mé2s1e2l
mé2s1er
-mé2szé
-mé2szo
-mé2tap
-mé2t1em
-mé2té
+mé2sez
+mé2sin
+mé2sö
+més3sza
+mésza2
+mész1al
+mé2sz1ál
+mé2sz1á2ra
+mé2szed
+mé2sz1el
+2mészl
+mé2sz1ő
+mész3s
+2mészté
+2mészth
+2mészti
+2mésztj
+2mésztl
+2mésztü
+2mésztv
+mé2sz1ü2
+mé2t1ad
+mé2t1ak
+mé2t1a2n
+mét1árt
+mét1elho
+mét1elta
+mé2t1e2v
+mé2tég
+2m1étje
+2m1étjér
+2m1étjév
+2m1étjü
+2m1étke.
+mé2t1o
+mé2tö
+métő2
+mé2tőr
+mé2t1u
+mé2t1ű
2m1év.
+2m1évb
+2m1é2ve.
+2mévei
+2m1é2vek
mé2ven
mé2ves
+2m1é2vet
+2m1é2véb
+mé2vén
+2m1évf
+2m1évh
2m1é2vi
-2m1é2vü
+2m1évk
+2m1évn
+2m1évr
+2m1évs
+2m1évt
+2m1évv
+mé2z1a
+mé2z1á2
+mé2zeg
mé2zil
+mé2zim
+mé2zin
+méz1ism
+mé2zit
+mé2zí
mé2z1o
-mé2zs
+mé2z3s
+mé2zu
+mé2zű
+mfa2l1e2
+mfa2lom
+mfa1s2
+mfé2m1a2
+mfit2
+mfi1tr
+mf2la
+m1f2lo
+mf2ló
+mf2lu
+mfog1adat
+m1f2rak
+m1f2ran
mf2rá
-mg2
-m1gr
-mgubanc1
+m1f2re
+m1f2ri
+m1f2rí
+m1f2ro
+m1f2rö
+mgé2p1e2l
+mgépi2
+mgé2p1ip
+mg2li
+mg2ló
+mgör2cso
+mg2ra
+mg2rá
+mha2sábr
+mhossz1út
1mi
+mi2aa
+mi2aá
+mi2abo
mi2ac
-mia2d
-mi2aj
-mia2l
-mi2ap
-mia2r
-mi2deá
-mi2deg
-m1i2dé
+mi2ae
+mi2aé
+mia1f2
+mi2afr
+mi2ag
+mi2ah
+mi2aí
+mi2ale
+mi2amé
+mi2ao
+mi2aó
+mi2aö
+mi2aő
+mi2a1p
+mi2aré
+mias2
+mi2aszá
+mi2aszé
+mi2aszi
+mi2aszó
+mi2atá
+mi2ati
+mi2ato
+mi2aü
+mi2av
+2m1i2áz
+mi1bl
+micsa2p1
+2m1i2deá
+2m1i2deg
+2m1i2dei
+2midej
+2miden
+mi2dent
+2m1i2deo
+mi2dén
+mi2dio
+mi2dió
+mi2dol
2midő
-mie2lőt
-2m1i2ga
-migaz1
-2m1i2ge
-2m1i2gé
-2m1i2má
-m1imp
-min2ce
+m1időz
+mie2l
+mi2éf
+mi1fl
+mi1fr
+2m1i2gaz
+2m1i2gén
+mi1gri
+2m1ihl
+mii2d
+mi1k2li
+mi1klu
+mi2kono
+mi2kont
+2miks
+mi2lal
+2mille
+2millu
+2millú
+mi2ma.
+mi2máh
+mi2mit
+mi2mór
+mi2naj
+2m1i2nam
+mina2n
+min1any
+2m1i2nas
+mi2n1ára
+min2c1e2
min2ch
-min2da
-min2der
-mi2ol
-mi2ono
-mi2onr
-mió2t
-2m1i2pa
-2m1i2ro
-2mirt
-mis1eme
-mita2
+min2d1a2
+2m1indá
+min2dek
+min2d1er
+min2din
+2m1indí
+2mindu
+mi2neg
+mine2s
+2minfl
+2m1infú
+min2g1á
+2m1ingé
+min1g2h
+min1inj
+min2k1a2l
+min2k1an
+min2k1as
+min2kec
+min2kó
+min2kö
+2m1insp
+2m1i2nuk
+mi2nü
+2m1inz
+mio2n1a
+mio2n1á
+mio2r
+mió2r
+mi1p2l
+mi1p2r
+mi2ram
+2m1i2rat
+2mi2rán
+2mirg
+2mirh
+miri2gyel
+2m1irk
+2m1i2rod
+2m1i2rom
+mi2rón
+2m1irr
+mi2sal
+mis1elv
+mis1epe
+mis1ing
+2misit
+mi2s1í2r
+mi1s2pi
+mis3szab
+mis3szer
+mi2s1ü2t
+mi2s1ü2v
+mi2s1ű
+mi2szár
+mis3zár.
+mi1sz2f
+mi2tac
+mita2n
+mit1any
+2m1i2tat
+2mitác
mit1ár.
-mi2tu
-mi2zom
+mit1árá
+mit1árh
+mit1ári
+mit1árk
+mit1árn
+mit1árr
+mit1árt
+mit1árú
+2mitbo
+mit1ing
+miti2s
+2mitlá
+mi2tök
+mi1tri
+2mitro
+2mitrú
+mi2tür
+miumé2
+miu2min
+miu2s
+2m1i2vad
+2m1i2vó
+mi2x1i
+mi2xö
+mi2xő
+mi2zé.
+mi2zét
1mí
-m1í2rá
-mí2ró
+m1í2gé
+mí2ja
+mí2já
+m1íns
+2m1í2rá
+2m1í2ró
+m1ív.
+mí2vá
+m1ívb
+mí2vé
+m1ívh
+m1ívr
+m1ívv
+mí2zü
+mí2zű
+mjé2ná
+mjobb1o
+mjo2g1á2s
m2j1ol
-m1k2
-mla2u
-mlás1s
+mj1ósá
+mj1ős
+mkaró2
+mka2r1ór
+mke1p
+mkia2
+mkiá2
+mkie2
+mk2la
+mk2li
+mk2lí
+mk2lo
+mk2lu
+mkó2rost
+mk2ra
+mk2rá
+mk2re
+mk2ré
+mk2ri
+mk2rí
+mk2ro
+mk2ró
+mk2va
+mk2vó
+mla1f
+mlapá2r
+mla2p1áro
+mla2p1e2
+mla2pin
+mla1s2t
+mlás3s
+mlá2s3z
+mle1g2
+mleí2
+mle1kn
+mle1pla
mlé2k1a2
-mlé2kes
-mma2gá
-mme2g
+mlé2k1á
+mlé2k1el
+mlé2k1est.
+mlé2k1ér.
+mlé2k1ol
+mlé2kos
+mlé2kó
+mlé2k1ú2
+mlé2szé
+mlo2k1ál
+mlo2ké
+mlő2s1a2
+mlő2s1ű2
+mmag1g
+mma1gl
+mmai2
+mmas2
+m2m1atk
+m2me.
+mme2g1é
+mmifé2l1é2v
1mo
-mo1g2rá
-mo2ir
-moki2
-mo2kó
-2m1oktá
-mo2k1ú
-mo2laj
+mo2be
+2m1obj
+moci1
+2m1off
+mo1g2ráf.
+mo1g2ráff
+mo1g2ráfk
+mo1g2ráfn
+mo2gy1a2
+mohu2
+mo2is
+mo2kab
+mo2k1ad
+mo2k1a2k
+mo2k1a2l
+mo2k1a2n
+mo2kar
+mo2kád
+mo2k1ál
+mo2k1á2s
+mo2k1e2
+mo2k1il
+mok1k2
+mo2k1ol
+mo2k1or
+mo2k1ó2
+mo2kö
+mok1t
+2m1oktat
+moku2
+mo2kur
+mokú2
+mo2kús
+mo2k1úto
+mo2kü
+2m1o2laj
+2m1olda
+m1oldó
+2m1o2lim
+molli2
+mol2l1in
+2m1olló
+molói2ko
+2m1oltár
+2m1oltás
+2molvad
2molvas
-mo2lyi
-mo2ne.
-mo2né.
+2m1oml
+mon1acé
+mo2n1a2d
+mo2n1a2l
+mo2n1an
+mo2n1a2p
+mona2r
+mo2n1as
+mo2n1áll
+mo2neg
+mo2n1er
+mo2n1is
+mon2or
+mo2nö
+mons2
+mon1sp
+mon1tré
mo2nü
+mo2nű
+monyá2
+mo2nyáz
mo2or
+2m1opc
+2mope
+mo2per
mo1p2l
+2m1opt
+mo2r1ad
+mora2n
+mor1any
+morá2la
+2m1ordí
+mo2r1el
mo2ren
-mo2rég
+mo2r1e2r
+mo2r1est
mo2rid
2morie
-mország1
-mo2sar
-mo2se
-most2
-mosz2fé
-mo2szim
-2moszl
-mosz1th
-2m1o2x
+mori2s
+mo2r1isk
+mo2r1iszo
+mor1izg
+2morjaia
+2morjaié
+2m1orjait
+mo2r1ol
+mo2r1ont
+mo2r1ón
+mo2r1ó2r
+mo2rós
+mo2rö
+2m1orr.
+mor1s2
+mort2
+mor3tá
+mor1tr
+mo2rü
+mo2rű
+mo2sál
+mo2s1e
+2mosto
+2m1ostr
+2m1osty
+mo2sü
+mo2szal
+mo2szis
+2m1oszlo
+mo1t2h
+2m1ottha
+mot2to
+mo2un
+mo2us2
+mo2vi
+mo2xi
+mo3zso
1mó
-2m1ó2rá
-mó1th
+móá2g
+mó1bl
+mó2ch
+mócsa2p1
+mócsapá2
+mó2d1a2l
+mó2dau
+mó2dák
+mó2dár
+mó2d1e2
+mó2dip
+mó2d1o2r
+módó2
+mó2d1ór
+módu2
+módus1
+mó1fl
+mói2ko
+mó1k2l
+mókus1s
+mó2lar
+mó1p2r
+mó2rak
+mó2rar
+mó2rág
+mó2rái
+mó2ráj
+mó2rám
+móri2as
+móró2
+mó2r1ón
+mó2rö
+mó1s2k
+mó1the
1mö
-2m1öld
-2m1önt
-2m1öv
+mö2bö
+mö2ko
+möl2cs1a
+möl2csá
+möl2csel
+möl2cs1es
+möl2cs1ér.
+möl2cs1il
+möl2cs1o
+möl2cs1ő
+mö2le
+mö2nu
+mö2ro
+mö2r1ő
+m1ötl
+mö2ve
+mö2vö
+mö2vü
+mö2vű
1mő
-mőe2
-mő2rá
-mp2he
-mp2hi
+mőa2n
+mőá2g
+mőe2l
+mőe2r
+mőé2l
+mőé2te
+mő1kl
+mő1ps
+mő2r1á2r
+2m1őrh
+2m1ő2ri
+mő2si
+mő2sü
+mős3zár
+mőü2l
+mő2zi
+mpa1dr
+m2p1akc
+m2p1aktá
+m2p1áll
+m2p1árko
+m2p1átj
+m2p1átk
+mp2ci
+mp1elt
+mp1fr
+mp1ind
+mpi2re
+mp2lak
+mplo2mal
+m1p2lu
+mpon1d2
+m2p1ord
+mporta2
+mpor2t1al
mpor2t1á2r
-m1p2resszi
-m1p2ró
-m1q
-mst2
-m1str
+mpor2t1e2
+m2p1osztás
+m2p1ös
+m1p2ref
+m1p2rep
+m1p2rés
+m1prib
+m1p2ric
+mp2rio
+m1p2rod
+m1prof
+m1prog
+m1proj
+m1p2ro1p
+m1p2rot
+m1p2rób
+m1p2ru
+m1p2szi
+m2p1u2ta
+m2p1utó
+m2p1üz
+mra1p
+mren2d1ő2
+mré2m1
+msa2vo
+ms2ka
+ms2ká
+ms2ki
+ms2ko
+ms2lá
+ms2mi
+ms2ni
+ms1ond
+ms2pa
+ms2pe
+ms2pi
+ms2po
+ms2pó
+ms2rá
+ms2ta
+ms2tá
+ms2te
+ms2ti
+ms2tí
+ms2to
+mst2r
+ms2tú
msza2ké
+msza2k1ü
+mszáraz1
msz2c
+mszé2dem
m1sz2f
-mszt2
-mte2o
-mtes2s
-m1t2r
+mszín3n
+msz2l
+msz2m
+m1sz2p
+msz2tá
+m1sz2v
+mta2n1ó2
+mtára2d
+mtá2r1ada
+mtés3s
+mtőkész1
+mtran2s
+mtransz1
+mt2rá
+mt2re
+mt2ré
+mt2ri
+m1t2ró
+mt2rö
+mt2rü
1mu
-2mule
-mu2se
-mus3s
+2m1udv
+2m1ugr
+m1ujj
+2mulet
+2mulz
+mu2m1ad
+mu2m1el
+mu2mél
+mu2m1és
+mu2min
+mu2m1ir
+mu2mis
+mu2m1iv
+mumkész1
+mu2m1ó2
+mu2mö
+mu2mő
+mumus1s
+mun1g
+mu2nok
+2mur.
+mu2ral
+mu2ram
+mu2rat
+mu2rál
+mur1izm
+mu2r1u2
+mu2sal
+mu2san
+mu2sar
+mu2sas
+mu2sat
+mu2s1á2g
+mu2sál
+mu2s1e
+mu2s1érté
+mu2sir
+mu2sor
+mu2s1ó2
+mu2ső
+muss2
+mus3sze
+mus2tárá
+mus2t1erj
+mu2szal
+mus3zav
+mu2szál
+mu2szás
mu2t1a2g
-mu2tár
+mu2tal
+mut1a2la
+2m1utalá
+2mutalv
+muta2n
+mu2t1any
+mu2tasí
+m1u2taz
+mu2t1á2ra
+mu2t1árb
+mu2t1á2ru
+2m1u2tás
+2mutca
+mu2t1el
+mu2til
+mu2t1in
+2m1u2tol
+2m1u2tód
+2m1u2tóp
+mu2t1ö
+mu2tü
1mú
-mú2g
-múgy1
-2m1új
-mú2t
+mú2jí
+múl2t1e2
+múl2tol
+2m1úr.
+mú2ri
+2m1úrn
+2m1ú2sz
+2m1útb
m1úth
-2m1úto
+2m1ú2ti
+2m1útj
+2m1útk
+2m1útm
+2m1útn
+2m1ú2to
+2m1útr
+2m1útt
+2m1útv
1mü
-2müg
+mü2dí
+mü2dü
mü2gy
-mü2ka
-2m1ünn
-2mü2r
-2m1üs
-2m1ü2v
-mü2z
+mü2ná
+mü2re
+mü2rí
+mü2rü
+mü2te
+mü2té
+mü2tő
+mü1tz
+mü2ve
+mü2vö
+mü2ze
1mű
-műi2
-műk2
-mű1kr
-mű1st
-2műz
+mű1bl
+mű1br
+mű1fl
+mű1fr
+mű1gr
+mű1kl
+mű1pl
+mű1pn
+mű1pr
+2m1űrl
+mű1sp
+műsú2
+mű1sz
+műtőkész1
+műves3s
mű2zé
mű2zi
mű2zö
mű2ző
-mvas3s
-mze2t1á
-mze2tel
-mze2tő
+mű2zü
+m2v1a2dot
+mvágya2d
+mvá2gy1ada
+mverés3s
+mw2hi
+mza2t1e
+mzás3s
+mze2r1o
+mze2t1a2
+mze2t1á2
+mze2t1e2g
+mze2t1el
+mze2ter
+mze2tesz
+mze2t1é2k
+mze2t1érd
+mze2to
+mze2t1ö2
+mze2t1ő2
+mzé2s1a
+mzé2so
+mzókész1
+mzőe2r
+mz2rí
+2n.
1na
+naa2d
n1abbó
-2n1abl
-2n1a2cé
+2n1abr
+2n1abs
+na1cl
+2n1a2dag
+2n1a2dás
+2n1add
+na2dek
+2n1adm
2n1a2dó
-na1dró
-n1adt
-nae2g
-na2ge
-2n1a2gi
-nagy1ap
-nagy1as
-na2gyer
-na2gyor
-na2gyó
-na2gy1ú
-na2ig
-nai2s
-2n1a2kad.
-2n1a2kadá
-2n1a2kadh
-2n1a2kadnak
-2n1a2kado
-2n1akadó
-2n1a2kadt
-naki2á
-na2kőr
-nakü2
-2n1a2lap
+na1d2re
+2n1adt
+na2du.
+na2dus
+na2ei
+naé2r
+2n1aff
+na2ga.
+na2gár
+na2git
+na2gón
+na1grá
+nagy1agg
+na2gy1a2l
+na2gyapj
+na2gy1as
+na2gyav
+na2gy1é2k
+nagyú2
+nagy1úr
+nagy1út
+na2ire
+na2ji
+2n1ajk
+2n1a2kad
+nakaró2
+nak1á2sz
+na2k1át
+n1akko
+na1kli
+na1klu
+nako2l
+nak1ola
+2n1a2kó.
+na1k2ré
+n1akti
+2n1a2kus
+na2k1útn
+na2l1a2dó
+2n1a2la2g1
+na2l1aj
+na2l1a2l
+na2lana
+2n1a2lapa
+2n1a2lapd
+na2lapr
+na2lapt
+na2lar
+na2lav
+na2l1ábr
+na2lág
+na2l1á2l
+na2l1á2ro
+nal1á2t1ö
+na2l1áts
+na2l1elá
+na2l1ell
+nal1eng
+nal1ent
+nal1ég.
+na2l1ék
+na2l1éri
na2lid
-2nalí
-n1alj.
-2n1ann
-na2nya
-nao2
-naó2
+na2l1ing
+na2l1i2o
+na2l1í2r
+2nalízisb
+2nalízise
+2nalízisé
+2nalízish
+2nalízisi
+2nalízisk
+2nalízisn
+2nalízisr
+2nalízist
+2nalízisü
+2nalj.
+n1alja.
+3naljac
+n1aljad
+n1aljai
+2naljak
+n1aljam
+n1aljat
+n1alji
+2naljon
+2nalju
+2naljz
+2n1alkat
+na2l1ob
+na2l1ol
+na2lop
+nal1osz
+na2l1ó2r
+na2l1ő
+nalt2
+nal1tr
+na2lulj
+na2l1ut
+na2lü
+na2mer
+2namitbo
+2n1a2mite
+2n1a2mitg
+2namitha
+2n1a2mitk
+2n1amitl
+2namitm
+2namitö
+2n1a2mitp
+2namitro
+2namitrú
+2namits
+2namittá
+2namittö
+2n1amö
+2n1amp
+2n1a2nal
+2n1ang
+2n1anh
+nano1
+nanog2
+na2nód
+2n1a2nyag
+nao2l
+naó2r
+2napa.
+nap1adó
+na2p1a2g
+na2p1ala
+na2p1alk
+nap1a2pa
+nap1apá
+nap1ará
+na2p1as
+na2pád
+na2p1á2g
na2pák
nap1áll
-na2p1el
-na2pen
-na2p1er
+na2pám
+na2p1árb
+na2p1átm
+nape2l
+nap1ell
+na2pem
+nap1est
+na2p1ill
+na2p1ing
+na2p1int
+nap1isk
+na2pí
+nap2lat
+na2p1ola
+nap1orm
+napos1s
+na2p1ostá
+na2p1ott
+na2pó.
na2p1ó2r
-napu2
-na2pud
-na2put
-na2tab
-na2tel
-na2t1ér
+napp2
+2nappo
+nap1pr
+n1aprí
+2napróz
+na2p1u2t
+na2p1úr
+2n1a2rai
+2narann
+2n1arany.
+2n1a2ranya.
+2n1a2ranyá
+2naranyb
+2naranyh
+2naranyk
+2naranyn
+2naranyr
+2naranys
+2n1aranyt
+2n1arc.
+2n1arcá
+narchi2ab
+2n1arco
+2n1arcu
+2n1arcú
+n1arró
+2n1arz
+na2sév
+nas1isk
+2nask
+na1s2ka
+na1s2rá
+nast2
+na1s2ta
+na1s2tá
+na1str
+na2sz1an
+na2sz1árad
+naszkész1
+nasz1üg
+na2t1ab
+na2t1aj
+na2t1alk
+na2t1alt
+nat1ará
+nat1áll
+na2t1á2ré
+na2t1árn
+na2t1eg
+nate3le
+na2t1elé
+nat1elle
+na2tél
+nat1érke
+na2t1érv
+na2t1i2m
+na2t1ing
+na2t1old
+nat1ors
na2t1osz
+na2t1u2t
+na2tül
+natű2z
2n1a2ty
-na2uk
-na2us
+na2uc
+na2ul
+nau2ra
+na2urá
+nau2s
na2uto
+naü2z
+na2vart
+na2vat
+2n1avv
+na1wh
+2n1azb
na2zé
-na2zo
+2n1a2zo
1ná
-ná2ch
+2n1á2bé
+2nábr
+ná2caj
+ná2c3h
+ná2cí
+ná2csal
+ná2csap
+ná2cs1as
ná2cse
+nác3sik
+ná2csis
+2nácsolat
+nác3sor
+ná2csö
ná2csü
+nác3sz
+ná2d1ala
+ná2dap
+ná2d1a2r
+ná2d1asz
+ná2d1a2v
+ná2dá
+nád1d
ná2d1e2
-2n1á2g
+ná2d1ö
+ná2dud
+ná2d1ü2
+ná2d3z
+ná2ga
+ná2gá
+ná2gi
+ná2gu
+ná2gú
+ná2gy
+2n1á2hí
+ná2k1ér.
+ná2kol
+ná2kü
ná2lab
-2n1álar
+ná2l1a2l
+ná2lana
+n1álar
+nála2te
+ná2l1az
+ná2l1át
nále2
-n1állá
-2n1állo
+ná2l1eg
+ná2l1el
+ná2lem
+ná2les
+n2álé
+ná2l1ép
+ná2l1in
+ná2lir
+nál2is
+ná2lí
+2n1áll.
+2n1álla.
+2n1állap
+2n1állat
+2n1állí
+2n1állom
+nállóköz1
+ná2lü
ná2mí
+ná2mu
ná2nad
-nán2c1
-n1á2ram
+ná2n1al
+ná2nar
+ná2n1á2r
+nán2c1e
+ná2n1e2
+náné2
+ná2nét
+ná2nin
+ná2ní
+nán2se
+ná2nü
+ná2rad
+2n1á2raka
+2n1á2rakb
+2n1á2rakh
+2n1á2rakk
+2n1á2rakn
+2n1á2rako
+2n1á2rakr
+2n1á2rakt
+2n1á2ram
+ná2r1a2n
+ná2rap
+ná2ras
+nár1ass
+2n1á2rat.
+ná2r1att
+ná2r1av
+ná2r1ác
+ná2r1ál
ná2r1e2
-2nárui
-ná2rú
-2n1árv
-ná2sü
-ná2szat
+ná2r1éve
+2n1á2riai
+2n1á2riá
+ná2r1i2p
+ná2rí
+náró2
+ná2r1ór
+ná2rő
+nár1s2
+nárt2
+nár1tr
+2n1árud
+ná2rug
+2nárun.
+nár1ur
+2nárus
+náru2t
+nár1utá
+ná2rút
+ná2rü
+ná2s1as
+nás1áré
+ná2s1á2ru
+2n1á2sás
+ná2s1e2
+ná2s1i2k
+nást2
+nás1tr
+ná2szan
+ná2szas
+ná2szág
+ná2szál
ná2sze
-ná2s3zö
-ná2szú
-ná2szü
-ná2tal
-n1átf
-ná2tí
-2n1átl
-2n1átm
-nba2l1
-n1b2l
-n2c1a2g
-n2c1ann
-nc1asz
-n2c1á2ro
-n2cáru
+ná2szén
+ná2szil
+ná2szin
+ná2szis
+2n1ászka.
+2n1ászoks
+ná2sz1ö
+ná2sz1ú
+ná2sz1ü
+ná2tala
+ná2t1a2n
+ná2tál
+nát1ásv
+ná2t1e2
+2n1áthi
+ná2t1i2o
+2n1á2t1ir
+2n1á2tí
+2n1átlé
+ná2t1ö
+2n1átru
+2n1átug
+2n1átut
+2n1á2tú
+ná2tü
+2n1átvi
+nba2ká
+nba2k1e2
+n2b1é2kéb
+n2b1é2kén
+n2b1é2kér
+n2b1é2kév
+nb2la
+nb2lo
+nb2lú
+nbo2n1a2
+nb2ra
+n1b2ri
+nb2ro
+nb2ró
+nburg2hi
+nc1acé
+n2c1ajá
+nc1ajt
+n2c1akn
+n2c1akt
+nc1a2la
+nc1alj
+n2c1alk
+nc1alt
+nc1alv
+nc1ana
+nc1ant
+nc1a2nya
+nc1ari
+nc1att
+nca2u
+n2c1ava
+n2c1ág
+nc1árb
+nc1árk
+n2c1árn
+nc1árt
+nc1á2sa
+nc1ásá
+nc1bl
+nc1br
+nc3csi
+nc3cso
nc3csö
+nc3csu
+nc1dr
+ncea2
+nc1egg
+n2c1eld
+nc1e2lek
+nc1e2lem
+nc1elm
+n2c1elv
+nc1e2red
+nc1eró
+n2c1eszt
+nc1etn
+n2c1ex
+ncé2g1ér
+ncé2hes
n2c1ép
+n2c1évi
+nc1fl
+nc1fr
+nc1gr
n2c3ha
n2c3há
+n2che.
+nc3hel
nc3het
n2c3hé
-nc3hoz
-nc3hu
+nc3hiá
+nc3hí
+nc3hol
+nc3hon
+n2c3hoz
+n2c3hó
+nc3hö
+n2c3hu
+n2c3hú
nci2alis
-nc1ing
-nc1i2r
-nc1ork
-n2c1ó2
-n2csab
+nci2aso
+n2c1ige
+n2c1i2gé
+n2c1i2ko
+nc1i2má
+n2c1i2na.
+n2c1ind
+nc1inf
+n2c1ing
+n2c1int
+n2c1irá
+nc1iro
+n2c1ist
+n2c1i2ta
+n2c1i2z
+nc1íj
+n2c1ír
+n2c1ív
+n2c1íz
+nc1kl
+nc1kre
+n2c1ob
+n2c1okta
+n2c1o2li
+nc1orv
+n2c1ott
+n2c1ölt.
+nc1öss
+ncö2t
+nc1őr
+nc1pl
+nc1pr
+n2cs1ab
+n2csac
+n2csad
+n2cs1ag
+n2cs1ajt
+n2csakt
+ncs1alap
+n2cs1alj
+n2csam
+n2csan
+ncsa2p1á2g
+ncsa2r
+ncs1ara
+ncs1arg
+ncs1aro
+n2cs1au
+n2csaz
+ncs1ágr
+n2cs1ál
+n2c3sár.
+n2cs1á2rá
+ncs1árb
+n2cs1árn
+ncs1árr
n2csáru
-ncs1árv
-ncs1elc
+n2csáta
+n2csátá
+n2csátv
+ncs1elf
+ncs1é2rés
n2csérte
-n2cs1íz
+n2cs1érté
+n2c3sérü
+n2c3séta
+ncs1i2kon
+ncs1int
+n2cs1io
+n2csipa
+n2csirá
+ncs1irt
+n2cs1ism
+n2csita
+ncs1izz
+nc3síki
+n2cs1í2rá
+ncs1ízt
+n2csob
+n2cs1oks
+n2csokta
n2csosz
-ncs1őr
+n2cs1ö2lé
+n2cs1ös
+n2cs1öz
+n2cs1őr.
+ncs1őrö
+ncs1s
n2csur
+ncsu2t
+ncs1uta
+n2csút
+n2csüg
+n2csüt
+ncs3zár
+nc3sze
+nc3szó
+nc3szö
+nc1tr
+n2c1ud
+n2c1ug
+nc1uj
+n2c1ur
+n2c1új
+nc1út
+n2c1üg
+n2c1üt
+nc1üv
+n2c1üz
+n2c1űr
+nc1ya
+n2c3zá
+nc3ze
+n2c3zó
+nc3zö
+nc3zs
+nc3zü
+nczy1i
+nd1abl
+nda1br
+nd1a2dat
+nda2dás
+nd1add
+n2d1ajá
+n2d1akc
+n2d1akk
+nd1akt
+n2d1alj
+n2d1alr
+nd1ann
+nd1apó
+nd1a2rán
nd1arr
-nda2tal
-nda2tel
-n2d1a2z
-n2d1eb
-n2d1edd
-nd1egy
-n2deh
-nd1ekö
+ndat1any
+nda2tap
+nda2t1eg
+nda2tin
+nda2tir
+nd1azo
+nd1azt
+nd1azz
+nd1á2rak
+ndás1s
+nd1bl
+nd1cl
+nd1dr
+nd1ebb
+n2d1e2kéb
+n2d1e2kéin
+nde2köz
+n2d1elf
+n2d1ellen
+n2d1elm
+nd1elö
+nde2mer
+nde2mu
+nde2m1ü
nde2ná
-nde2n1ev
-n2d1é2l
-n2d1ész.
-nd1éti
-nd1ink
-ndme2
-n2dőrá
+n2dennek
+nde1p2
+nde2r1a
+nde2rál
+nde2ráz
+nde2rel
+nde2ro
+n2d1erő
+n2d1e2sett
+n2d1e2sés
+n2d1e2ső
+nde2sza
+n2d1e2szü
+nd1eza
+ndé2go
+ndé2kel
+nd1ékez
+ndé2kö
+n2d1éle
+nd1élm
+n2d1ép
+ndé2raj
+n2d1éssz
+n2d1észh
+n2d1észl
+n2d1észr
+n2d1é2te
+n2d1étt
+nd1fr
+nd1gr
+n2d1iga
+n2d1ige
+n2d1ill
+n2d1i2na.
+n2d1ing
+n2d1ins
+n2d1i2onj
+ndi2óé2
+ndi2óf
+ndi2óm
+n2d1isza
+ndí2j1a2da
+nd1kl
+n2d1oá
+ndo2k1út
+ndo2rál
+n2d1orni
+ndo2r1ú
+n2d1ou
+n2d1ov
+ndóé2r
+nd1ó2ni
+n2d1ó2rá
+ndö2b
+nd1öss
+n2d1ö2z
+n2d1őr.
+n2d1ő2r1a2
+n2d1őrb
+n2d1őrc
+n2d1őrd
+nd1ő2reg
+nd1ő2rei
+nd1ő2rek
+nd1ő2rel
+nd1ő2rék
+nd1ő2rén
+nd1ő2rér
+nd1ő2rét
+nd1ő2rév
+n2d1őrf
+n2d1őrg
+nd1ő2rig
+nd1őris
+nd1ő2rit
+n2d1őrj
+n2d1őrk
+n2d1őrl
+n2d1őrm
n2d1őrn
-n2d1ő2ro
-nd1őrö
-n1d2ram
-n1dy
+nd1őrok
+nd1őros
+n2d1ő2rö
+nd1őrős
+n2d1őrp
+n2d1őrr
+n2d1őrs
+n2d1őrt
+n2d1őrú
+n2d1őrv
+nd1pr
+nd2raz
+n1d2ruk
+nd1sl
+nd1sp
+nd1st
+ndszá2m1út
+ndsze2r1e2l
+ndtár2s1a2d
+nd1u2szo
+ndu2t
+n2d1uta
+nd1új
+ndú2rá
+nd1úsz
+n2d1üg
+nd1ünn
+n2d1üz
+n2d1űr.
+n2d1űrr
+n2d1űrt
+n2d1űz
+ndy2b
+ndy2h
+ndy2n
+ndy2r
+ndy2t
+ndy2v
nd3zav
+nd3zár
+n2d3ze
n2d3zó
+n2d3zu
1ne
+nea2j
nea2k
-ne2áp
-2n1egy.
+nea2la
+ne2alo
+nea2n
+nea2r
+ne2bé
+ne1bl
+ne1dra
+ne1d2rá
+ned2v1el
+ne1dy
+2n1e2dzé
+2neff
+2n1e2ger
+2n1egér.
+ne2g1ö
+n1egy.
+n1egyb
+ne2gyek
+ne2gyen
+ne2gyes
+ne2gyet
+ne2gyez
+2n1e2gyé
n1egyf
-n1e2gyi
+n1egyh
+ne2gyig
n1egyk
-2n1egyn
-n1egys
-ne2k1eg
-ne2k1ó2
-ne1kri
-n1elk
+n1egym
+n1egyn
+n1egyr
+2n1egys
+n1egyt
+ne2gyün
+nehéz1
+2n1ehh
+nei2g
+neí2r
+ne2k1aj
+ne2k1a2n
+ne2kát
+ne2k1e2g
+nek1erő
+nek1é2jé
+ne2kék
+nek1ékn
+nekie2
+2nekj
+nek1k2
+2nekka
+2nekki
+ne1klu
+ne2k1ok
+nekö2r
+ne1kreá
+nek1t2
+ne2k1üg
+nek1üldö
+ne2lag
+ne2laj
+ne2l1an
+ne2lál
+nelá2r
+ne2lef
+ne2leg
+n1elegy.
+nel1e2le
+nele2ma
+nelem1el
+nel1e2més
+nel1eng
+ne2ler
+ne2l1ép
+nelfé2
+nel1g2
+2n1elha
+ne2l1id
+ne2lim
+ne2l1in
+n1elló
+2n1elnev
+ne2l1ot
+ne2l1ó2
+ne2l1ö2
2n1e2lőa
-ne2lők
-ne2lőt
-2n1elv
-ne2má
+2n1e2lőá
+ne2lőd
+ne2lőf
+ne2lőhí
+2n1e2lőí
+2n1e2lőké
+ne2lől
+2n1előny
+2nelőrej
+2n1e2lőté
+2n1eltér
+ne2l1ül
+2n1elz
+ne2mak
+2nemba
2n1ember
-ne2m1eg
-nemes1s
-ne2més
-nem1id
-nem1iss
-n1eng
-n1enn
+neme2g
+nem1egy
+2nemele
+2n1emelk
+ne2m1esz
+ne2m1ér.
+ne2m1id
+nem1isz
+2nems
+2nemul
+2n1eng
+2n1enn
+nen2sa
+nense2s
+nen2s1ese
+nens3s
+nen2s3z
+2n1enyv
+2n1enz
+ne2ob
+ne2od
ne2of
+ne2og
+ne2oh
+ne2oko
+ne2ola
ne2oli
-ne2olo
-ne2oló
-ne2or
-ne2os
-ne2ot
-neó2r
-n1erd
-2n1e2red
+ne2oro
+ne2pad
+ne2pelm
+ne2p1est
+ne2pid
+ne2p1ó2r
+ne2p1ut
+ne2r1a2d
+ne2r1a2k
+ne2r1a2n
+ne2r1a2r
+ne2r1as
+ne2raz
+ne2ráb
+ner2co
+ne2r1e2g
+n1e2rej
+ne2r1e2ke.
+ne2r1e2l
+ner1emel
+ne2r1er
+ne2rez
+ne2rég
+ne2r1él
+ne2r1ép
+ne2r1étt
+ne2r1id
+ne2r1iga
+ne2r1il
+ne2r1i2m
+ne2r1inf
+ne2r1ing
+ne2r1int
+ne2ris
+ner1k2
+ne2r1ol
+ne2ror
+ne2r1os
+ne2ró
+ne2r1ön
2n1e2rő
-ne2sá
-ne2sem
-ne2setr
-ne2so
+3n2e3rőkü
+ner1s
+ner1tr
+ne2r1u2
+ne2r1üg
+ne2s1aljá
+ne2sas
+ne2s1ál
+ne2sár
+2n1e2setb
+2n1e2setr
+2n1e2sés
2n1e2ső
-nesü2
-ne2süv
-nes3zs
-2n1e2szű
-ne2t1eg
-ne2tír
-ne2tok
+nes3sza
+nes3szá
+2n1esté
+2n1esti
+ne2s1ü2v
+nesz1ál
+ne2s3zár
+ne2sz1él
+ne2sz1ű2
+ne2t1ab
+net1a2la
+ne2t1a2ny
+ne2tál
+ne2t1át1
+ne2t1e2g
+net1elá
+net1elm
+ne2t1előa
+ne2t1eml
+net1este
+ne2t1esz
+ne2t1etet
+ne2t1eti
+ne2t1é2k
+ne2t1é2l
+ne2t1ér.
+ne2t1érd
+ne2t1éré
+ne2t1é2rő.
+ne2t1é2rők
+ne2t1érr
+ne2térte
+ne2t1értő
+ne2t1é2rü
+ne2t1ész
+ne2t1é2ve.
+ne2tid
+ne2t1i2ko
+ne2t1int
+ne2tip
+netké2sz1ü
+ne2t1o2k
ne2tol
-ne2t1öl
-ne2vés.
+net1old
+ne2t1ő2
+net2tév
+ne2tun
+ne2t1ut
+netü2l
+net1ülé
+ne2t1ü2z
2n1e2vő
-ne2zer
+2n1evv
+nexpor2t1ő2
+ne1yé
+2n1e2zer
+2n1ezred
2nezüs
1né
+2n1ébr
+2nédl
+né1f2r
2n1ég.
-2nége
-né2get
-2négő
-né2gyá
-né2lű
-né2p1a2
-né2pá
+2n1é2gek
+2n1é2geté
+2n1é2gető.
+2négetőh
+2n1é2getők
+2négetőn
+2négetőt
+2n1é2gé
+2n1égj
+2n1égn
+2n1é2gő
+2n1égs
+2n1égt
+2n1é2gü
+né2gyer
+né2gyén
+né2gy1o
+né2gyök
+2n1é2hes
+2n1éhs
+né2kaj
+né2kak
+né2k1a2n
+né2kar
+né2k1á
+néke2l
+nék1ele
+né2ker
+né2kév
+né2kid
+nék1isz
+2n1é2kí
+né2kó
+nékü2
+né2kül
+n1é2les
+2n1é2let
+2n1élm
+né2lői
+né2lőn
+2néneke
+2n1é2neké
+népa2
+né2pad
+né2p1ak
+né2p1al
+né2p1an
+né2pap
+né2p1as
+né2pau
+népá2
+né2p1ál
+né2p1ár
+né2pát
+né2p1áz
né2peg
né2p1e2l
-2n1é2pítk
+népe2r
+nép1etet
+né2p1etn
+né2pev
+né2p1és
+nép1f2
+2né2pí
né2p1o
-né2pu
-2n1érc
-2n1érd
-né2ren
-2n1é2ré
-2n1érh
-2n1érm
-né2rő.
-2n1érte
+né2p1ö
+né2pő
+nép1s
+né2p1us
+né2pú
+2népül
+néra2
+né2raj
+né2r1an
+n1érd
+2nérde
+2n1é2rem
+né2ré.
+né2rés
+né2ri.
+né2rin
+né2rip
+né2rö
+2n1é2rő.
2n1érté
-2n1érv
+né2rü
2n1érz
-né2szá
+né2s1e2l
+né2s1ég
+nés3szer
+nész1ak
+nész1al
+né2sz1á
né2szeg
-2n1étk
+né2sz1e2l
+né2sz1emb
+né2sz1e2sz
+né2sz1ék
+né2szik
+né2sz1í
+nészkész1
+né2szó
+né2sz1ö2
+né2szu
+né2sz1ú
+né2szül
+né2t1eg
+2n1é2tel
+né2t1es
+2n1é2tet
+néti2
+né2tir
+né2tö
+né1t2r
néva2
+név1ada
+név1adá
+né2vaj
+né2var
+né2vav
+né2v1ág
+2n1évbú
+2n1é2ve.
+2névei
+2n1é2vek
néve2l
+né2v1ele
név1elő
+2né2vem
+2névenk
+2névent
+né2v1e2r
né2ves
-né2vü
-2névz
-nfe2li
-nfüs2
-nfüst1
-nfüstö2
-ng1a2dá
+név1esz
+2né2vet
+2névéb
+né2v1é2l
+né2v1éri
+né2vérő
+né2v1érz
+né2vis
+2névny
+né2v1o
+né2vö
+né2vő
+né2v1u2
+né2vú
+né2vün
+né2za
+néziu2m1i2
+nfe2lemé
+n1f2la
+n1f2lo
+nfluor1e
+nfol2ta
+n1f2rak
+n1f2rá
+n1f2rek
+n1f2ri
+n1f2rí
+n1f2rö
+n1f2ru
+nfüs2t1ölé
+n2g1abl
+n2g1a2dat
+n2g1a2dá
ng1a2dó
-n2g1a2la
+n2gadó.
+n2gadóa
+n2gadób
+n2gadói
+n2gadój
+n2gadók
+n2gadór
+n2gadós
+n2gadót
+n2gadóv
+ng1akn
+n2g1akr
+n2g1akt
+nga2lag
+nga2lak
+nga2lap
+ng1alát
+ng1alel
+n2g1alg
n2g1alj
-n2g1ág
-n2g1árn
-ngás1s
-n2g1e2g
-ng1elm
-nge2rá
+n2g1a2ny
+nga1p2
+n2g1a2rán
+n2g1arc
+n2g1art
+n2g1arz
+n2g1asp
+ng1assz
+n2g1aszt
+nga1tr
+n2g1a2u
+n2g1ava
+nga2zon
+ngá2c
+n2g1á2g
+ng1állá
+ng1állo
+ng1álló
+n2g1áp
+ng1á2rak
+ng1áras
+ng1árat
+ngá2rát
+ngá2ráv
+ngá2ré
+n2g1árnya
+n2g1árta
+ngá2ruk
+n2g1á2rú
+n2g1á2szaib
+n2g1á2szair
+n2g1á2szait
+n2g1á2száv
+n2g1á2szé
+n2g1á2szi.
+n2g1á2szig
+n2g1á2szoké
+n2g1á2szos
+n2g1átá
+ng1átc
+n2g1á2t1e2
+n2g1á2ti
+n2g1átk
+n2g1átl
+n2g1átm
+n2g1áts
+n2g1átv
+n2g1á2zój
+n2g1á2zós
+n2g1áztato
+ng1bl
+ng1br
+ng1d2r
+ng1edz
+ngegész1
+n2g1ela
+nge2lis
+nge2r1a
+nge2rál
+nger1e2sz
+nger2im
+nge2ro
+n2g1esem
+n2g1eszk
+nge2tika
+n2g1ex
+n2g1é2g
+ngé2les
+n2g1épí
+n2g1érc
+ng1érl
+ng1é2rő.
ng1érté
-n2g1id
+ngé2sa
+n2g1éte
+ng1fr
+ng1g2r
+ng3gyi
+ng3gyo
+n2g1i2d
ngi2g
-ng1iga
-ng1igé
+n2g1iga
+n2g1ige
+n2g1igé
+ng1i2ko
+n2g1ikr
+n2gill
+ngi2m
+ng1imi
+ng1inf
n2g1ing
-n2g1int
+ng1ins
+ng1iro
+n2g1izg
+ng1íg
ng1ír
-ngo1szk
-n2g1ön
-ng1ö2z
-ng1ug
-ng1üz
-n2g1ű
+ng1ív
+ng1íz
+ng1kl
+ng1kr
+ng1kv
+n1glec
+ngmeg1
+n1g2nó
+n2g1of
+n2g1op
+ngora1
+n2g1ord
+n2g1org
+n2g1ork
+ng1osto
+ng1oszt
+n2g1otth
+ngó2riá
+n2g1öb
+ng1önt
+ngö2r
+ng1örö
+ng1örv
+n2g1öv
+n2g1ö2z
+ng1őrö
+ngő2z1ős
+ng1pr
+ng1ps
+n1g2ram
+ng2rádih
+ng2rádj
+n1g2ráf
+ng2run
+ng1sh
+ng1sk
+ng1sp
+ng1tr
+n2g1ud
+n2g1ug
+n2g1uj
+n2g1und
+ng1u2ra
+n2g1uta
+n2g1új
+ng1útt
+n2g1üd
+n2g1ü2g
+ng1ür
+ng1üt
+n2g1üz
+ng1űr
+ngy1a2gya
+ngya2l1ó2
+ngy1ass
+n2gy1á2l
n2gy1em
-n2gyél
-n2gyis
-n2gyí
-nhá2zig
+n2gy1es
+n2gyez
+n2gy1é2d
+ngy1éks
+ngy1ékt
+ngy1ér.
+n2gyid
+n2gyim
+n2gy1ut
+n2gy1ü2lő
+nha2b1i
+nhal1k2
+nha2sábr
+nhá2z1alt
+nhá2zip
+nhá2zol
+nhá2zó
+nhá2z3s
+nhe2d3z
nhe2i
-nhé2t1
+nhú2sá
+nhús3s
1ni
+ni2aa
+ni2aá
+ni2abo
+ni2ac
ni2ad
+ni2ae
+ni2aé
+ni2afo
+nia1g2
+ni2agy
ni2ah
+ni2aí
+ni2aj
+ni2ala
+ni2alá
ni2am
-2n1i2de
-ni2dom
+ni2ao
+ni2aó
+ni2aö
+ni2aő
+ni2a1p
+ni2ar
+ni2asza
+ni2aszá
+nia1t2
+ni2ato
+ni2atr
+nia3u
+ni2aü
+ni2av
+ni2az
+niát1a2
+2n1i2bo
+ni1br
+ni2c1e2l
+ni2cha
+ni2c3he
+ni2c3hé
+ni2c3ho
+ni2de.
+2n1i2deg
2n1i2dő
-nie2l
-ni1f2
-2n1i2ga
+ni2dü
+ni2et
+2n1ifj
+2n1i2gal
+2nigaz.
2n1i2gá
-2nigé
+ni2ge.
+ni2géj
+2n1i2gén
+ni2géz
+2nigm
+2n1ihl
+ni2keb
+ni2k1el
+ni2k1em
+ni2k1érté
+nikk2
+ni1klu
+ni2konr
+2n1ikrit.
+ni2kud
+n1ille
+2nillu
2n1i2ly
+2nimád
+n1i2máé
2n1imp
-2n1ind
-2n1inj
+2n1i2na.
+ni2nas
+ni2n1áll
+2nind
+2n1info
+2n1infú
+nin2gas
+nin2gá
+2n1inge.
+2ningei
+nin2g1e2l
+nin2g1ó2
+nin1g2rá
+nin2gu
+2n1ingük
+ni2n1i2p
+ni2nol
2n1inté
-ni2pa
-ni1p2r
+2n1i2onb
+ni2onc
+ni2onh
+ni2onj
+ni2onk
+2n1i2onn
+2n1i2ono
+2n1i2onr
+2n1i2ont
+ni2óa
+ni2ód
+ni2óe
+ni2óp
+ni2óta
+ni2ótá
+ni2óü
+nióvá2
+nip2p1i
+ni1pr
ni2rat
-2n1i2rá
+2nirá
+nirész1
2n1irg
-2n1i2ro
-2n1isk
-ni2s1ü2
-ni2sza
+2n1irh
+2n1irk
+2n1i2rod
+ni2rón
+ni2si.
+ni2s1in
+nisü2v
+nisz1ak
+ni2szeg
+ni2szeml
+ni2szese
+ni2sz1é2l
+ni2szip
+ni2szis
+nisz1okt
+nisz1ol
+2n1iszon
+ni2szö
+ni2sz1ő
+ni2szu
+ni2t1a2d
+ni2t1ag
+ni2t1aj
ni2tal
+nit1a2la
+ni2t1as
+2n1i2tat
+nit1ell
+ni2t1ép
+ni2t1ér
+ni2tim
+ni2t1in
+ni2tir
+ni2tob
+nit1old
+nit1olt
+ni2t1osz
+ni2tür
+niu2m1i2o
+2n1i2vad
+2n1i2var
+2n1i2vó
+ni2xa
+ni2xő
+ni2zén
+2n1izg
+2n1izmá
+n1izom
+ni2zsol
1ní
-2n1íg
-ní2ra
+ní2gé
+ní2ja
+ní2ju
+níli2a
+ní2ra2
2n1í2rá
+ní2r1é2
+ní2r1ot
2n1í2ró
-2n1í2tél
-nka1b
-nk1adós
-nk1ajá
-n2k1alk
-nk1a2ut
-nk1áll
+ní2r1ú
+2nítél
+nítőa2
+ní2ve
+2n1í2vi
+ní2ze
+ní2zű
+nk1a2dós
+nkai2k
+nk1ajt
+n2k1akk
+n2k1alv
+n2k1anó
+nka2nyá
+nkaó2
+nka1p2l
+nk1app
+nka2ris
+nka1s2k
+nka1sp
+nka2tom
+nka1t2r
+nk1azo
+n2k1ág
+nk1árad
+nká2rál
+nká2rol
+nká2ruk
+nká2sad
+nká2sal
+nká2sav
nkás3s
-n2kátu
-nkci2ósz
-n2k1ell
-nké2pel
-nki2g
-nk1iga
+nká2s3z
+nkáta2
+n2k1átj
+n2k1átm
+n2k1áts
+n2k1átu
+nk1br
+nkci2ósű
+nk1dr
+nk1e2cse
+nk1e2dz
+nk1ela
+n2kellá
+n2k1eltá
+nke2r1a
+nk1ered
+n2k1e2rő
+n2k1e2ti
+n2k1e2vé
+n2k1é2l
+nké2p1el
+nké2p1és
+n2k1épí
+n2k1érc
+nk1é2szé
+nk1g2r
+nkia2
+nkiá2
+nk1i2ga
+n2k1igé
+n2k1imi
+nk1ind
n2k1ing
-nk1inté
-nki2s1a
-nk1k2
-nk1old
+n2k1int
+n2kinz
+nk1i2on
+nki2s1i2
+nk1ism
+nkká2
+nk1k2r
+nk2lar
+n1k2ló
+n2k1ob
+nk1oke
+nkos3s
+n2k1oszl
+n2k1ox
+n2k1óné
+n2k1óni
+nkó1p2
+n2k1ó2ri
n2k1ö2lé
-nk2rit
+n2k1ö2lő
+nk1öss
+nk1ötl
+nk1őrs
+nk1pl
+nk1pr
+nk2rac
+n1k2ris
+n1k2rí
+nk2roma
nkron1n
-nk1uz
-nk1üz
+nk1sp
+nk1st
+nk1sz2
+n2k1ud
+n2k1u2ra
+n2k1u2s
+nk1utal
+n2k1utá
+n2k1uz
+n2k1új
+n2k1ús
+n2k1üg
nlac1
-nla2kos
-nlo2n1
-nme2g1
-nmono2x
+nla2pa
+nlap1e
+nla2p1osz
+nla2tal
+nla2t1a2n
+nla2t1e2
+nla2t1é2te
+nlás3s
+nle2g1á
+nleí2
+nle2t1o
+nletü2
+nle2tüz
+nlé2tés
+nlé2t1é2ve.
+nme2g1a2
+nme2g1é
+nműé2n
+nműt2
+nna2ié
+nnak2
+nna1kr
+nn1alv
+nna1p2ré
+nna1s2
nn1áll
-nn1ége
-n2n1or
-nn1ug
-n2n1ú
-nnü2
+n2n1eml
+nne2p1a2
+nne2se
+nn1ess
+nn1esz
+n2n1e2tet
+n2n1ett
+nn1evez
+nné2get
+nn1éri
+n2n1id
+nn1irt
+nn1ors
+nnőé2h
+nnőé2n
+nn1sy
+n2n1ug
+nn1ú2s
+n2n1ü2c
+nnü2l
nn1ülő
+nn1ült
+nn1ülv
n2ny
+n3nyak
n3nyalá
nny1a2n
-nny1ár
-nny1á2z
-n3nyil
-n3nyol
+n3nyar
+nnyá2r
+nny1áz
+n3nydr
+nny1ell
+n3nyelő
+nny1elt
+nny1elvá
+nny1elvez
+nny1e2sett
+nny1e2sés
+nny1e2ső
+nny1ég
+nny1é2ké
+nny1é2ki
+nnyié2h
+nnyié2ne
+nnyi2g
+nny1igé
+n3nyjé
+nny1old
+nny1on
nny1öz
-n3nyu
-n3nyú
+n3nyst
1no
-no1ch
-n1off
+no1d2rá
+2n1o2dú
+2nog.
+2nogh
+2nogj
2nogn
-no1g2rá
+2nogo
+2nogs
2nogt
-no2kar
-no2kas
-noke2
-no2ker
-no2k1ir
+2nogv
+no2ir
+2nokal
+nok1ala
+no2k1a2r
+no2kau
+no2k1ál
+no2k1é2l
+no2kép
+no2k1ing
+nok1ist
+nok1k2
+2n1okke
+2n1o2koz
no2kö
-no1kro
-2n1okta
-no2k1ú
+no2kő
+no1k2ro
+nok1s
+noksz2
+no2kur
+no2kúr
+no2kü
2n1o2la
+nol1f2
+2n1o2lim
+2n1olló
2n1o2ly
-no2mér
-no2mol
+no2m1a2c
nom1p
-non2c3
-no2n1in
-no2o
+nona2
+no2n1al
+nonc3c
+non2ch
+nonc3sz
+no2n1e
+non1k2
+no2nö
+no2nő
+non1s2
+no1ny
+no2ok
2n1o2pe
-no1p2h
no1p2la
-n1ord
-2nore
-n1org
-no1szkó
-2n1oszl
-nosz3s
+no2r1al
+no2r1a2t
+no2raz
+no2r1el
+no2r1iv
+no2rí
+2n1ormo
+2n1orré
+nor1s2
+no2rü
+2n1orvo
+no2sál
+no2se
+nossz2
+nos3sze
+nos3szf
+nos3szi
+no1s2tab
+nosza2u
+no1sz2f
+2noszl
+no1t2r
+2n1otth
+no1ty
+no2ui
+2n1o2vi.
+no2xi
1nó
-nó2dár
-nó2rák
-n1ó2rán
-nó2rí
-nósz2
-nó2s3zen
+nóa2k
+nóá2r
+nó2ce
+nó2ch
+nó2da.
+nó2d1a2n
+nó2dák
+nó2d1e2s
+nó2d1is
+nó1fl
+nó1fr
+nó1k2l
+nó2mac
+nó2m1em
+nó2mik
+nó2m1u2t
+nó2mü
+nó2nib
+nó2non
+nó1p2r
+n1ó2rac
+nó2r1ad
+n1ó2raf
+2n1ó2rai
+nó2r1a2l
+n1ó2rar
+n1ó2ras
+n1ó2rat
+nórádi2
+nó2rás
+nó2riá
+nó2rü
+nós1akk
+nó2seg
+nó1sl
+nó1s2p
+nó1s2rá
+nós3s
+nó1s2ta
+nó1sz2
+nós3zene
+nós3zené
+nót1ala
+nó2til
+nó1trá
+nó2vó
1nö
-nö2l
-2n1ö2r
-n1össz
-nö2t1e
+nö2ka
+nö2ká
+nö2k1el
+nöke2t
+nök1eti
+nö2k1é2j
+nö2k1ék
+nö2k1é2l
+nö2k1ér.
+nö2k1éri
+nö2k1érté
+nö2ko
+nö2kó
+nö2ku
+nö2kú
+n1ö2le
+n1ö2lé
+nö2lő
+n1öml
+2n1ö2nö
+2n1önz
+nö2rö
+2n1össz
+2n1ö2sz
+nö2te
+nö2té
nö2ti
+n1ötl
+nöt1t2
+nö2tü
+2n1öv.
+n1övb
+n1ö2ve.
+nö2vön
+2n1övr
+2n1ö2zön
1nő
-nőe2
-nő2ir
+nőa2l
+nőa2n
+nőá2g
+nő1br
+nő2ca
+nő2ch
+nő2csár
+nő2csős
+nő2csü
+nőe2r
+nőé2l
+nőfé2l1é2
+nő1kl
+nő1pl
+nő1pr
2n1őr.
-2n1ő2ré
+2n1ő2r1an
+2n1őras
+2n1őrb
+2n1őrc
+2n1ő2rei
+2n1ő2réh
+2n1ő2rén
+nő2rét.
+nő2rétő
+2n1ő2rév
+2n1őrg
+2n1őrh
2n1ő2ri
2n1őrk
+2n1őrl
2n1őrn
2n1ő2rö
-2n1őrs
+2n1őrr
+n1őrs
2n1őrt
+2n1őrü
+nő2rül
+nő2rün
+2n1őrv
2n1őrz
-n1p2
-n1r
-n2s1akk
-n2s1a2l
-ns1e2le
-ns1elt
-ns1ív
-ns3s
+nő2s1a2l
+nő2s1e2l
+nő2ses
+nő2s1í2r
+nő2sok
+nő1spe
+nős3s
+nő1sz2t
+nő1t2r
+nőt2tin
+nőu2t
+nőü2l
+npa2dal
+npe2s
+npesz1
+np2la
+np2lá
+np2le
+np2lé
+np2lo
+np2lü
+npon2t1a2
+npo2r1a
+np2ra
+np2re
+np2ré
+np2ri
+np2ro
+np2ró
+np2sz
+npu2t1a
+npu2t1á2
+npu2t1e2
+npu2t1i
+nrefle2x1í2
+nren2da
+n2s1a2d
+n2s1akc
+ns1alk
+ns1a2rá
+ns1ass
+n2s1au
+nsa2vár
+nsa2v1e2
+nsa2vil
+nsa2vol
+n2s1a2z
+nság1g
+ns1áll
+n2s1á2rak
+ns1áta
+ns1átv
+ns2ch
+nsc3he.
+nsc3hei
+nsc3hé
+ns1dr
+ns1e2lé
+ns1elm
+ns1eln
+ns1elo
+ns1els
+ns1elv
+n2s1ene
+n2s1esz
+nsé2gel
+nsé2g1éj
+nségü2két
+n2s1ék
+n2s1é2l
+n2s1ép
+ns1é2ve.
+ns1fr
+n2s1i2d
+ns1imp
+ns1inf
+n2s1ing
+n2s1iró
+ns1isk
+nsi2z
+ns1izo
+n2s1í2r
+n2s1í2v
+n1s2kál
+ns1kl
+n2s1ob
+n2s1ol
+n2s1op
+ns1osz
+n2s1ott
+n2s1ó2r
+n2s1ös
+ns2pec
+ns1p2l
+ns2por
+n1s2rá
+ns1st
+ns1sy
+ns3szer
+ns3szi
+ns3szo
+ns3szö
n1s2tab
-nste2
-ns2tei
-n1stein.
-n1steine
-ns1ur
+n1s2tác
+nste2i
+n1s2tim
+ns2top
+nsu2r
+ns1ura
+n2s1u2t
ns1úr
-n1sy
-nsza2ké
-nszeng1
-nsz2fé
-n2t1akk
-ntan2t1
-ntap2
+n2sz1a2d
+nsza2k1ü
+nsz1alk
+n2sz1a2n
+ns3zará
+n2sz1á2ba.
+ns3zárá
+nsz1á2ru
+n2sz1it
+n2sziz
+n2sz1omm
+nsz1p2
+n2szut
+n2sz1ü2z
+nsz1z
+nt1abla
+n2t1abr
+nta2cél
+ntad2
+nt1a2dó
+nt1a2ga.
+n2t1agg
+nta2gyu
+nta2gyú
+ntai2k
+n2t1ajk
+n2t1ajt
+n2t1akc
+n2t1aktá
+nt1alát
+nt1alel
+n2t1alf
+nt1anta
+nt1a2ra.
+nta2ran
n2t1a2rá
+n2t1arc
n2t1ark
-nt1aut
-nt1azo
-n2táld
-n2t1áll
-n2t1árf
-n2t1áru
-nt1átl
-nt1e2dé
-n2t1egy
+nta1s2p
+nt1assz
+n2t1aty
+nt1a2ura
+ntaü2
+n2t1azo
+nt1ábr
+ntá2cs
+nt1ácsi
+nt1ácso
+ntá2r1a2d
+n2táram
+ntá2ráv
+nt1árny
+ntá2ruk
+n2t1ásó
+n2t1ásvá
+n2t1áti
+n2t1átl
+n2t1átr
+n2t1áts
+n2t1átv
+ntá2zsi
+nt1bl
+nt1br
+nt1dr
+nt1ebe
+n2tedén
+nt1edi
+nte3gá
n2t1ela
-nt1elr
-nte2m
-n2t1emb
-n2t1eme
-nte2r1a
-nte2sz
-nt1esze
-nt1eva
+n2t1elb
+ntele2mé
+nt1elf
+n2t1eljá
+n2t1elk
+n2t1ellen
+n2telmél
+n2telnö
+n2t1e2lo
+nte2lőá
+n2t1elr
+n2t1elto
+n2t1elvá
+n2t1elz
+n2t1ember
+n2t1e2mel
+n2t1eml
+n2t1emu
+n2t1endr
+n2t1ent
+nte2rál
+nte2rele
+nte2r1in
+nter2v1e2l
+n2t1erz
+n2t1esth
+n2t1eszk
+n2t1eva
+nt1e2vet
+nt1e2vez
+nt1ég.
+nt1é2gé
+n2t1é2kek
+nté2kes
nté2ké
+n2t1éks
n2t1é2le
+n2t1é2lés
+n2t1élm
+n2t1élt
+nt1élű
+n2t1é2neke
+n2t1épü
+n2t1érin
+n2t1érmé
n2t1érté
-nt1érz
-ntés1s
-nt1étke
-n1t2hu
+n2t1érz
+ntés3s
+nté2ter
+n2t1é2ven
+n2t1é2vet
+n2t1é2véb
+n2t1é2vén
+n2t1é2vér
+n2t1é2vét
+nt1évh
+nt1évk
+nt1évt
+nt1fl
+nt1fr
+nt1gr
+nt2hon
+ntia2n
+ntia2t
+nt1ido
+n2t1ige
nti1k2l
-nti1p2
-nt1irá
+ntil2lát.
+n2t1ille
+n2t1imp
+n2t1info
+n2t1ing.
+n2t1inga
+nti1nk.
+n2t1inté
+ntió1
+nti2par
+n2t1irá
+n2t1iro
+n2t1isk
+n2t1ism
+n2t1iste
+nti2vás
nt1izo
+n2t1íg
+n2t1íj
nt1írá
-nt1írt
-n2t1íz
-nto1g2
-nt1o2ly
-nt1ó2ri
-n2t1ö2v
+n2t1ívb
+n2t1í2z
+nt1kl
+nt1kr
+n2t1of
+ntoka2
+n2t1o2k1al
+n2t1okl
+n2t1olda
+n2t1oldó
+n2t1o2ly
+nto2m1e2
+nt1opc
+nto2ras
+nto2rék
+nto2rin
+nt1ormá
+nt1orro
+n2t1oszl
+n2t1oszt
+n2t1otth
+ntó1p
+n2t1ó2rá
+n2t1ó2ri
+ntót2
+ntó1tr
+nt1ökl
+nt1ö2kö
+nt1ö2lő
+nt1önt
+n2t1örd
+ntőa2
+ntőé2n
+nt1őrb
+nt1őrl
+nt1őrn
+n2t1őz
+nt1pl
+nt1pr
+nt2rans
+ntransz1
+ntranszk2
+n1t2réf
+n1t2róf
+nt1ry
+nt1sh
+nt1sk
+nt1sp
+nt1st
+ntsz2
+ntszá2m1é
+nt1szv
+nt1t2r
+n2t1udv
n2t1ug
-ntus3s
-n2t1ü2s
+n2t1uj
+ntu2mor
+ntu2n
+n2t1una
+nt1und
+ntun1i
+nt1u2rá
+ntu2sza
+nt1utá
+n2t1úg
+n2t1új
+ntú2ral
+ntú2ran
+nt1ú2sz
+n2t1üg
+n2t1ü2lő
+nt1ült
n2t1üt
-ntya2
-n2ty1al
+n2t1ü2v
+n2ty1a2l
+n2ty1a2n
+n2tyál
+n2ty1e2l
+n2ty1él
+n2ty1ik
+n2ty1int
+n2ty1iv
+n2tyí
+n2ty1ő2r
+n2tyut
1nu
-2nud
-2nug
+n1ucc
+nu2ga
nu2go
-nu2s1ol
-2n1u2tó
+2n1ujj
+nu1k2la
+nu1klu
+nu2mü
+2n1und
+2n1u2ni
+2n1u2no
+2n1unt
+nu2ram
+nu2rá
+nu2sal
+nu2sas
+nu2s1av
+nu2s1e
+nu2s1érté
+nu2sik
+nu2sol
+nu1s2po
+nuss2
+nus3szi
+nu2szab
+nu2s3zav
+nu2szir
+nu2szí
+nu2sz1ol
+nu2tal
+nu2tat
+nu2taz
+nu2tál
+nu2te
1nú
-2n1úg
-2n1úté
+n1újd
+nú2jí
+2n1újs
+núkész1
+nú1pr
+2n1úr.
+2n1úrb
+2n1úrh
+2n1úrn
+2n1úrr
+2n1úrt
+2n1ú2szá
+2nútb
+2núth
+2nútj
+2n1útk
+2n1útn
+2nútr
+2n1úts
+2nútt
+2n1útv
1nü
-2n1ü2g
+nü1bl
+2n1ü2dí
+2n1üdv
+nü1fr
+2n1ügg
+nü1gr
+2n1ügy.
+2n1ügyb
+2n1ügyc
+2n1ü2gye.
+2n1ü2gyei
+2n1ü2gyek
+2n1ü2gyes
+2n1ü2gyet
+2n1ü2gyé
+nügy1és
+2n1ügyh
+2n1ü2gyi
+2n1ügyk
+2n1ügyl
+2n1ügyn
+2n1ügyr
2n1üld
-n1üss
-2n1ü2te
+nü1pr
+nü2rí
+nüst2
+nü1str
+2n1ü2tem
+nü2tés
nü2ti
-nü2tö
-n1ü2tő
-2n1ü2z
+nü2tő.
+nü2tők
+nü2tős
+nü2tü
+nü2vö
+nü2zé
+2n1üzl
1nű
-nvers1
+nű2zé
+nű2ző
+nva2su
+nvágya2d
+nvá2gy1ada
+nvá2gy1ón
+nvá2r1al
+n2v1át
+nven2ta
+nvé2d1a
+nvé2d1ő2r
+nv1ind
+nvona2l1út
+n2v1os
+nv1sk
+nx1ar
n2y
1nya
-2nyabl
+2ny1abl
+2ny1abr
+nya2cél
+2ny1adag
+2nyadás
2nyadó
-2nyaga
-2nyagá
-2nyagb
-2nyagh
-2nyagn
-nya2gos
-2nyagr
-2nyagy
-nya2k1ék
-nya2kér
-nya2lap
-2nyalm
+nya2dóz
+2nyaff
+nya2gar
+2nyagáh
+2nyagár
+2nyagáv
+2nyagc
+nya2gen
+2nyagi
+2nyagj
+2nyagm
+2nyagos
+2nyagta
+2nyaguk
+2nyagú
+2nyaján
+2nyajk
+2nyajt
+3nyak.
+nya2k1ala
+nya2kara
+2nyakc
+nya2kel
+nya2k1é2k
+nya2kiz
+2nyakt.
+2nyaktá
+2nyaktb
+2nyakti
+2nyaktj
+2nyakto
+2nyaktu
+2ny1a2lag
+2ny1a2lak.
+2nyalakj
+2nyalakk
+2ny1a2lakr
+2nyalany
+nya2lapb
+nya2laph
+nya2lapo
+nya2lapp
+nya2laps
+2ny1alász
+2ny1alb
+ny1alép
+2ny1alm
+ny1alte
+2nyaltú
+2nyamal
+2nyanal
+2nyang
2ny1ant
-nya2nyá
-ny1apa
-2ny1arc
-ny1aut
+2nyaot
+ny1a2pad
+nya2pát
+2nyapp
+nya2rén
+2ny1arma
+2ny1arz
+nya1sp
+2nyassz
+2nyaszt
+2nyatká
+nya1trá
+2nyaty
+2nyauk
+2nyavat
1nyá
-2nyág
-ny1á2lo
-2nyámh
-2nyámn
+2nyábr
+2nyádná
+2nyádt
+2nyáék
+2ny1ág
+2nyáld
+2nyállí
+nyá2lom
+2nyámék
+2nyámná
2nyáp
+2ny1á2rad
+2ny1á2rai
+2ny1á2rak
+2ny1á2ram
+2nyáras
2ny1á2rat
+nyá2ráb
+nyá2rán
+nyá2rát
+nyá2ráv
+2nyárc
+2nyáre
+2nyárh
+2ny1árj
+2nyárk
2nyárp
-2nyáru
+3nyárt.
+2nyá2ru
+2nyárú
+2nyárv
2nyásó
+nyá2szak
+nyá2szár
2nyáta
+2nyátá
+2nyáté
+2nyátf
+2nyáth
+2nyátk
+2nyátm
+2nyátn
+2nyátö
+2nyátr
+2nyáts
+2nyátt
+2nyátü
+2nyátv
+ny1bl
+ny1br
+ny1cv
+1nydre.
1nye
-2ny1e2gy
+2nyedén
+2nyedzé
+2nyeff
+2nyegyl
+2nyegys
+2nyeke.
+2nyekei
+2nyekéé
+2ny1elb
2nyelc
-ny1elny
-ny1elo
-ny1előh
-2ny1előn
-nyel2vá
+2nyelef
+2nyelemz
+2ny1elf
+ny1elha
+2nyeljá
+ny1elk
+2ny1ellá
+ny1elma
+2nyelnö
+2nyelőí
+2ny1e2lőő
+2nyelőz
+2ny1elr
+2nyelső
+2ny1eltá
+2nyeltér
+2nyelto
+2ny1elül
+nyel2vesz
+2nyelvev
+2nyember
+2nyembl
+2nyembr
2nyemel
-2ny1ene
-nyereg1
-2nyeső
+2ny1emit
+2ny1eml
+2nyenc
+2nyene
+2ny1eng
+nye1p
+2nyerdő
+2nyerej
+nye2rekl
+2ny1erk
+2nyerny
+2nyerőm
+2ny1esemé
+ny1eser
+2nyeseté
+2nyesél
+2nyestj
+2nyeszk
+2nyetik
+2nyeve
+nye2vez
+2nyevé
+2nyevo
+2nyevő
+2ny1ex
+2nyezr
+2nyezüs
1nyé
+2ny1ébr
+2nyéhen
2nyéhes
-ny1éle
+2nyéhs
+ny1é2jek
+2nyélet
+2nyélm
+2nyéneke
+2ny1é2neké
+2ny1é2nekn
2ny1ép
-2nyészőe
+2nyérc.
+2nyérem.
+nyé2r1e2s
+2nyérin
+2nyérő.
+2nyérői
+2nyérőt
+2nyérték
+nyérü2
+2nyérv.
+2nyérzé
+2nyétel
+2nyétke
+2nyétl
2nyév.
2nyévb
+2nyéve.
+2nyévei
2nyévek
+2nyévem
+2nyéven
+2nyéves
2nyévet
+2nyévez
+2nyévéb
+2nyévér
+2nyévét
+2nyévév
+2nyévf
+2nyévi
+2nyévk
+2nyévm
2nyévn
2nyévr
+2nyévs
+2nyévt
+2nyévü
+2nyévű
2nyévv
+ny1fl
+ny1f2r
+ny1gl
+ny1gr
1nyi
-2nyid
-2ny1iga
+2nyibo
+2nyideg
+2nyidej
+2nyidő
+nyié2b
+2nyifjú.
+2nyifjúb
+2nyifjúé
+2nyifjúi
+2nyifjúké
+2nyifjún
+2nyifjúr
+2nyifjús
+2nyifjút
+2nyifjúv
+2nyiga
+2nyiha
+2nyihl
2ny1ill
+2ny1ima
2nyimá
+2ny1imb
+2nyimp
+2nyinas
+2nyinc
2nyind
2nyinf
+ny1ing.
+2nyinj
+2nyins
2ny1int
+2nyinv
2ny1i2p
+2nyirá
+2nyiri
+2nyirod
2nyirt
-2nyisk
+2nyisko
2nyism
-2ny1ist
-2ny1iz
+2nyisp
+2nyist
+2nyivad
+2nyivás
+2nyivó
+2ny1izn
+2ny1izt
1nyí
-2nyív
-ny1k2
-nylo2n1
+2ny1íg
+2ny1íj
+3nyíl
+2ny1ín
+2ny1ív
+2ny1íz
+1nyjéb
+3nyk.
+nykar1óra
+1nyket.
+1nykk
+ny1kl
+1nykn
+ny1k2r
+ny1k2v
+1nym.
+1nymet.
+1nymt
+1nyn.
1nyo
+2ny1ob
+2nyodú
+2ny1of
+2ny1okke
+2ny1okl
+2nyokos
2nyokoz
-3nyom
-ny1op
+2nyokta
+2ny1o2laj
+nyolc1c
+2ny1olda
+2nyoldá
+2nyoldó
+ny1olló
+2ny1oltár
+2nyoltás
+2nyolvas
+3nyom.
+3nyomat.
+3nyomatk
+3nyomatom
+3nyomo
+3nyomt
+2ny1op
+ny1orc
+ny1orm
ny1ors
+ny1orv
+2ny1osko
+2nyosto
+2nyoszl
+2nyoszt
2ny1ott
+2ny1ov
+2ny1ox
1nyó
+ny1ó2ni
+nyó2rác
+nyó2rán
+2nyóri
+nyó2s1ü
1nyö
-ny1öl
+2ny1öb
+2ny1öc
+2ny1ö2l
+ny1önt
+2ny1öv
1nyő
-ny1p2
-nys2
+2nyőrs
+ny1pl
+ny1pr
+ny1ps
3nys.
+ny1sc
+3nysek
+ny1sh
+ny1sk
+ny1sl
+ny1sp
+nys2t
1nyst.
+ny1sta
+ny1stá
1nyu
-ny1ud
-2ny1uj
+2nyud
+2nyuj
+2nyuká
+2ny1ukrá
+3nyul
+2nyuni
2nyuno
-2nyus
-2ny1u2t
+ny1urá
+2nyut
+ny1u2ta
+ny1u2tá
1nyú
+2nyújd
+2nyújé
+2nyújí
2nyújs
-ny1úr.
-ny1ú2sz
+3nyúl
+nyú2lő
+2ny1úr.
+2nyúrb
+2ny1úrh
+2nyúri
+2nyúrk
+2ny1úrn
+2ny1ú2ro
+2nyúrr
+2ny1ú2sz
+2nyútb
+2ny1úté
+2nyúth
+2ny1úti
2nyútj
+2nyútk
+ny1útl
+2nyútm
+2nyútn
+2nyútp
+2nyútr
2nyútt
+2nyútv
1nyü
-2ny1üg
-2nyüld
-ny1ür
+2ny1üd
+2ny1ü2g
+2ny1üld
+ny1üle
+2nyünn
+2ny1ür
2ny1üt
+2nyüze
1nyű
-2nyűr
-ny1űr.
-2nyűz
-ny1ű2zé
-ny2van
-n2z1ak
+2ny1űr.
+2nyűrb
+2ny1űré
+2ny1űrh
+2ny1ű2ri
+2ny1űrj
+2ny1űrl
+2ny1űrn
+2ny1ű2rö
+2nyűrr
+2ny1űrt
+2ny1ű2zé
+2ny1ű2ző.
+2nyűzőb
+2nyűzően
+2nyűzőé
+2nyűzőh
+2nyűzők
+2nyűzőn
+2nyűzőr
+2nyűzőt
+2nyűzőv
+ny2vék
+ny2v1isk
+ny2vó
+ny2vös
+ny2vő
+ny2vú
+nyzé2ke
+nza2c
+n2z1acé
+nz1adá
+nz1ado
+nz1adó
+nz1a2ga
+nz1agg
+nz1ajta
+nz1akc
+nz1akk
+nzak2o
+n2z1akt
+nz1ald
+n2z1alk
+nz1ang
n2z1a2ny
-n2z1a2p
-nz1á2ru
-nz1e2dé
-n2z1eg
+nz1app
+nz1ara
+nz1ará
+nz1arc
+nz1ari
+nz1aut
+nz1á2gy
+nz1áll
+n2z1á2rad
+nz1árny
+nzá2r1ó2ra
+n2z1á2ru
+nzá2s1e2
+nz1ásó
+nzás3s
+nz1át1a2
+nz1d2r
+n2z1e2g
+n2z1elb
+n2ze2leme
+n2z1e2lér
n2z1elf
-n2z1ell
-n2z1e2lő
-n2z1ember
+n2z1elha
+n2z1elis
+n2z1elk
+n2z1ellá
+nz1ellen
+n2z1elm
+n2z1elny
+n2z1elo
+n2z1e2lőá
+n2z1e2lől
+n2z1e2lőt
+n2zelőz
+n2z1els
+n2z1elta
+n2z1eltü
+n2z1elver
+n2z1elvé
+n2z1elvo
+nz1ember
+n2z1e2mel
nz1e2més
-nze2s
+n2z1emi
+nz1eml
+n2zener
+nz1erő
+nzer2t1a2
+nzer2v1a2d
+nzervé2t
+nzer2v1éte
+nzer2vi
+nze2su
nz1eszk
-nz1éhe
-nz1ére
+n2z1ez
+n2z1ég
+nzé2k1el
+n2z1é2l
+n2z1ér.
+n2z1érd
+n2z1é2rem
+n2z1érk
n2z1érm
-n2z1érő
+n2z1érté
+n2z1érv
+n2z1érz
+nz1étv
+nz1gr
+nzi2a
+n2z1i2ga
+n2z1igé
+n2z1ill
+nzi2m1a2
+nzi2má
+nzi2mi
+nzi2n1á2
+nzi2n1o
+nzi2n1ó2
n2z1i2p
-nz1k2
+nz1irá
+nz1ism
+n2z1ist
+nzi2tár
+nzite2
+nzi2t1el
+nzi2ten
+nzi2t1í2ve.
+n2z1íb
+nz1íg
+nz1ín
+nz1kl
+nz1kr
+n2z1okl
+nzo2lin
+nzo2ló
+nzo2n1a
+nzo2né
+nzo2rin
+n2z1osz
+nzókész1
n2z1ön
-nz1ös
-nz1p2
-nz3ság
-nz3sár
+nzö2r
+nz1örö
+n2z1ös
+n2z1ö2v
+n2z1öz
+nz1pl
+nz1pr
+nz3saj
+n2z3sár
+n2z3sát
+n2zsáv
nz3seg
+n2z3ser
+nz3sik
+n2z3sis
+n2z3sod
+nz3sor
n2z3só
-nz1ü2g
-nz1üz
-nz3z
+nz3s2p
+nz3s2t
+nz3sz
+nztá2r1a2d
+nz1t2r
+n2z1uj
+nzu2l1a
+nzu2mé
+nz1u2ra
+nzu2san
+nzus3s
+n2z1u2t
+nz1új
+nz1ú2t
+n2z1üd
+n2z1ü2g
+nz1üs
+nz1üv
+n2z1ü2z
+nz3zs
2o.
-2o1a
+o1a
oa2cé
-oa2n
-oan1e
+oa1fr
+o2aki
+o2a1k2v
+o2ami
+oa2nali
+o2asi
+o2aszó
o1á
-2oba
-obai2
+oá2ga
+oá2r1a2n
+oá2ril
+oá2rí
+oá2r1ol
+oá2zs
+oba1b2
+oba1d2
+o2b1alj
+obal2t1a2
+oba1p
+ob1a2ra
+obau2
obás3s
-ob2bol
+ob1átm
+ob2b1eg
ob2bö
-2obi
-obi2lan
-obi2o
-2obo
-obo2ra
-o2b1ü2
-2oca
-2oce
-oc1e2m
-2océ
-oc2k1é2
-2ocö
-o2csí
-o2csú
-oc3sz
-o2c3z
-oda1p
-1o2dáz.
-1o2dázh
-1o2dázn
-1o2dázó
-1o2dázt
-1o2dázzu
-2ode
-2odé
-od1éve
-o2d1í2
-1o2dú
-2o1e
-o2ei
-oe2l
-oe2m
-o2er
-o2es
-oe1t2
-oe2v
-2o1é
-oé2dere
-o2ég
-oé2l
-2ofa
-2ofe
-2ofé
-o1fl
-2ofo
-2ofó
-o1f2ri
-og1a2la
-o2g1alt
+o2b1eg
+ob1ele
+o2b1e2m
+o2b1erő
+o2b1ez
+o2b1é2g
+o2b1érz
+obi2ki
+obi2k1ó2
+obi2lin
+obi2lip
+obina2
+ob1ina.
+obi2n1al
+o2b1ing
+o2b1i2s
+ob1ív
+1objek
+ob1kl
+1o2boa
+o2b1oll
+obo2r1a
+obo2rin
+obo2r1os
+obo2t1á2
+obo2tin
+obókész1
+o2b1ó2né
+ob1ó2rá
+ob1öt
+ob1pr
+1obst
+o2b1ut
+o2b1ú2s
+ob1üg
+ob1ür
+ob1üt
+ob1űr
+oca2ké
+o2c1ág
+o2c1ál
+oc1er
+oc1é2k
+o2c3hi.
+oc3hok
+oc3hot
+oci3a
+ocie2
+oci1k2r
+oció2
+oci1p
+oci1sz2
+o1c2kef
+oc2k1é2l
+ocké2n
+ock1éne
+o1c2kér
+o1c2két
+o1c2ki.
+oc2kia
+o1c2kig
+o1c2kin
+o1c2kit
+o1c2kiv
+oc2kop
+o1c2kosn
+o1c2koso
+o1c2kosr
+o1c2koss
+oc1pr
+o2c3sap
+o2cs1ál
+ocsá2s
+o2cs1ász
+o2cs1á2z
+o2cs1e2
+oc3sér
+ocsié2ra
+o2cs1ing
+ocs1izm
+o2csí2
+oc3sín
+o2csop
+ocs1s
+ocs1t
+o2csuj
+o2cs1ü2
+oc3sza
+ocs3zá
+oc3sze
+oc3zs
+o2daad
+oda1b2
+o2d1adj
+oda1dr
+o2d1akk
+o2d1alj
+oda1p2
+odas2
+o2d1ass
+od1aszt
+odat2
+oda1tr
+od1autó
+odáb2
+od1állá
+o2dáru
+odáskész1
+odás3s
+odá2s3z
+1o2dáz
+od1ed
+ode2l
+odel2l1a
+ode2min
+od1e2v
+o2d1é2g
+od1é2ne
+o2d1ép
+o2d1érd
+o2d1é2te
+o2d1é2ve
+od1é2vé
+2odéz
+od1ide
+odi2g
+o2d1iga
+o2d1ikre
+odi2l1e
+odi2lid
+odi2lik
+odi2l1is
+o2d1int
+o2d1iro
+od1isp
+od1í2z
+od1kl
+od1obo
+o2d1okt
+o2d1op
+odo2rak
+odo2rosz
+od1ö2l
+od1ö2r
+od1ő2r
+od1pr
+o1d2ram
+o1d2ráma
+od1st
+odu2l1a2l
+o2d1u2r
+1odún
+od1üg
+od1ün
+od1üz
+1odváb
+od3ze
+od3zo
+o1e
+oe2ir
+oe2le
+oe2mu
+oe2ne
+oe1t2he
+oe2ur
+oe2uv
+o1é
+o2éfa
+o2éfá
+o2éfo
+o2éke
+o2éki
+oéna2
+oé2n1al
+oé2n1an
+oé2n1ar
+oéná2
+oé2n1ár
+oé2nis
+o2ész
+o2évi
+ofi2lad
+ofi2lak
+ofi2l1á
+ofi2lel
+ofi2lér
+ofili2
+ofi2l1iga
+ofi2l1igá
+ofi2lis
+ofi2l1osz
+ofi2tal
+ofi2t1e2
+of2la
+of2ló
+ofona2
+ofo2n1al
+ofo2nan
+ofo2n1á
+ofo2n1ér.
+ofon3n
+ofo2n1ó2
+ofor2m1á2
+ofő2r1e
+ofőrü2
+of2rí
+og1abr
+o2g1a2g
+oga2kar
+o2g1aká
+o2g1a2la
+o2g1a2lá
+o2g1alj
+og1all
+og1alt
+og1alu
+o2g1a2ny
o2g1ap
-og1assz
-o2g1asz
+o2g1a2ran
+og1arc
+o2g1a2sz
+oga2t1a2g
oga2t1e2
-2ogá
-og1átk
-og1átr
-2oge
+oga2t1i2n
+og1a2ty
+2ogaz
+o2g1á2g
+og1áll
+og1álm
+o2g1áp
+o2g1á2rak
+o2g1áre
+o2g1árja
+o2g1árját
+o2g1á2rok
+ogá2ros
+o2g1á2ru
+ogáskész1
+o2gásó
+o2g1áta
+o2g1áte
+o2g1átj
+o2g1átk
+o2g1átl
+o2g1átn
+o2g1á2to
+o2g1átr
+o2g1áts
+o2g1átt
+og1átü
+o2g1átv
+og1bl
+ogdí2j1a2d
+og1dr
o2g1e2d
-og1e2g
+o2g1e2g
+ogegész1
o2g1e2l
o2g1em
-oge2o
+o2g1e2p
+oge2r
og1ere
+og1ern
+og1erő
oge2s
+o2g1ese
+o2g1e2v
o2g1ez
-o2g1él
-og1érv
-o2g1id
-o2g1i2g
-og1int
-o2g1i2p
-og1ir
+o2g1é2g
+o2g1é2l
+ogén1n
+o2g1é2p
+o2g1ér.
+og1érte
+og1érté
+o2g1értő
+o2g1érv
+o2g1és
+og1fl
+og1fr
+og1g2l
+o2g1ic
+o2g1i2d
+o2g1if
+ogi2g
+o2g1iga
+o2g1igé
+o2gill
+og1inf
+o2g1ing
+og1ins
+o2g1int
+o2g1ip
+og1i2ro
+og1ita
+o2g1íj
+og1ín
+og1ír
+og1ív
+og1kl
+og1kr
o1g2lic
-og2lób
o1g2nai
-2ogó
-o2g1ö
-2o1g2raf
-2ográ
+o2g1odv
+og1org
+og1orr
+og1orz
+o2g1oszl
+o2g1oszt
+o2g1o2v
+og1ö2b
+og1ö2l
+og1ö2r
+og1ös
+og1ő2r
+og1pl
+og1pr
+2ografi
+2ograp
+2ográf.
+2ográff
+o1g2ráffa
+o1g2ráfh
+o1g2ráfj
+o1g2ráfr
+o1g2rál
+og1sk
+og1sp
+og1s2t
+og1tr
+og1u2ra
+og1u2ru
+o2g1u2s
o2g1u2t
-o2g1ü2
-2ogy
-ohó2cs
+o2g1új
+og1ü2g
+og1ül
+og1ür
+og1üt
+og1üz
+og1űz
+ogy1a2c
+ogy1a2p
+ogy1is.
+ogy1os
+ogyóé2
+oha2mal
+oha2mel
+oha2mes
+oha2mis
+ohas2
+oha1sp
+o2h1ág
+o2h1ál
+ohá2nyad
+ohá2nyan
+ohá2r1e
+ohá2szi
+ohá2sz1odv
+o2h1á2z
+oh1e2c
+oh1ing
+oh2ni
+o2h1orr
+ohó2csi
+oh1órá
+oh1ö2v
+oh1urá
o1i
-o2ib
-o2ih
-o2inte
-oi2o
-2oiz
+oi2ae
+oi2af
+oi2an
+oi2av
+oi2ába
+oida1
+oi2d1ad
+oi2dan
+oi2dál
+oi2d1e2
+oi2dol
+oi2d3z
+oilet2
+oina2
+oi2n1ad
+oi2ne
+oi2re
+oisel2
oi2zo
o1í
-2ojá
-2oje
-ok1ajá
-o2k1a2la
-ok1alj
+ojá2r1as
+ojás3s
+ojás3z
+ojek2t1á2
+ojek2t1í2
+ojek2t1o2
+oj1in
+oj2t1ára
+oj2t1orják
+ojtóá2
+ok1abl
+ok1a2cé
+o2k1a2dat
+o2k1a2dá
+o2k1a2dó
+o2k1a2kar
+ok1akv
+o2k1alj
+o2k1alk
+ok1alm
+ok1alt
+ok1ang
+ok1ani
+ok1ant
+oka1p2l
+ok1app
ok1a2ra
ok1arc
-ok1ass
-o2k1a2to
-okás1s
-2oke
+oka2ris
+o2k1asp
+o2k1ass
+ok1aszf
+ok1aszt
+o2k1att
+o2k1aty
+oka2u
+ok1aut
+o2k1ava
+o2k1ág
+ok1ájt
+ok1árad
+o2k1á2rak
+oká2rul
+o2k1árv
+oká2sal
+ok1ásó
+okás3s
+ok1ász
+o2k1áte
+ok1bl
+ok1br
+ok1dr
+o2ke.
+ok1e2b
+o2k1e2c
oke2d
ok1edé
-ok1e2g
+o2k1e2g
+o2k1e2l
o2k1e2m
-ok1ere
-ok1erő
-o2k1es
-ok1e2v
-ok1ez
-2oké
-ok1é2ne
+ok1eré
+ok1erk
+ok1ernel.
+ok1e2rő
+o2ke2s
+ok1esé
+o2k1e2v
+ok1e2z
+o2k1ég
+ok1é2ke
+ok1é2ké
+o2k1él.
+ok1é2les
+ok1é2let
+ok1é2lé
+ok1éln
+ok1élt
+o2k1é2ne
+oké2p
+oké3pá
+ok1épí
+o2k1épü
o2k1ér.
+o2k1érb
o2k1érc
+o2k1érd
+o2k1érg
+o2k1érh
+o2k1é2ri
+o2k1érm
+o2k1érr
+ok1értá
o2k1érte
-o2k1éve
-ok2hi
-o2k1i2d
-ok1i2rá
-ok1ist
-ok1izm
-o2kí
+o2k1érté
+ok1értö
+o2k1érz
+oké1s2
+okész2
+o2k1étk
+o2k1étt
+o2k1é2ve
+ok1fl
+ok1fr
+ok1gr
+o2k1i2de
+o2k1i2do
+ok1i2ga
+okigaz1
+ok1igá
+o2k1igé
+ok1ind
+o2k1int
+o2k1i2rá
+o2k1i2ro
+o2k1isk
+ok1ism
+o2k1isp
+ok1iste
+o2k1i2ta
+o2k1izm
+ok1íj
+ok1ír
ok1ív
ok1íz
-ok2lim
+ok2kab
+ok2k1a2d
+ok2k1aj
+ok2k1ale
+okk1alk
+ok2k1as
+ok2kaz
+okk1elh
+okk1elö
+okk1elő
+okk1elr
+1okkeré
+ok2k1es
+ok2képü
+ok2kid
+ok1kló
+ok2kob
+okk1öss
+okk1ö2vű
+ok1kri
+ok2kud
+ok2k1ur
+o1k2lí
ok2lor
+o2k1ob
+okola2
+oko2lár
+o2k1oltás
okon1n
+oko2n1oks
+oko2ra
+oko2r1á
+oko2ril
+oko2ris
+o2k1ormú
+ok1o2ro
o2k1osz
-ok1ó2r
+ok1o2varia
+o2k1o2vi
o2k1öb
-o2k1ö2l
+o2k1ö2d
+ok1ö2k
+o2k1öl
+o2k1ön
okö2r
-ok2ris
-ok2rom
-2oku
-o2k1u2s
-o2k1ü2
-ola1d
-ol1ada
-1olajf
+o2k1ös
+o2k1ö2v
+ok1ö2z
+ok1ő2r
+ok1pl
+ok1pr
+o1k2ris
+o1k2róm
+ok2sel
+ok1sp
+oksz1alm
+ok2szan
+ok2sz1es
+ok2sz1is
+1oktán
+o2k1ud
+o2k1ug
+o2k1uj
+ok1u2ra
+o2k1u2t
+ok1úr.
+ok1úrb
+ok1úrh
+ok1úrr
+ok1úsz
+o2k1útb
+o2k1úth
+o2k1ú2ti
+o2k1útj
+o2k1útk
+o2k1útn
+o2k1útr
+o2k1útt
+ok1útu
+o2kútv
+ok1üg
+ok1ü2l
+ok1ün
+ok1ür
+ok1ü2t
+ok1ü2v
+ok1üz
+ok1űz
+o3la.
+ol1abl
+ola1d2
+ola1f2
+1o2laj.
+1o2lajb
+1o2lajf
+1o2lajg
+1o2lajh
+1o2laji
+1o2lajj
+1o2lajk
+1o2lajm
+1o2lajn
+1o2lajp
+1o2lajr
+1o2lajs
o2lajt
-olaszó2
-ola2szór
-2olat
-ola2tol
+o2laju
+1o2lajú
+o2lajv
+ola1k2r
+o2l1alg
+ol1alk
+ol1amn
+ol1anya
+ola1p2
+ola1s2p
+ola1s2t
+ola2t1ala
+olat1any
+ola2tál
+ola2táp
+ola2ték
+ola2t1inf
+ola2t1í2v
+ola2t1ol
+ola2t1orn
+ola2t1öl
+ola2tüz
+olau2r
+ol1ábrá
+o2l1á2g
+olá2ha
ol1áll
-olás1s
-ol2c1e
-ol2cé
-ol2csin
+o2l1árb
+o2l1árh
+o2l1á2ria
+olá2riá
+o2l1árk
+o2l1árn
+olá2rok
+olá2ron
+o2l1árr
+o2l1árt
+o2l1á2ru
+olá2sza
+o2l1á2ti
+o2l1átv
+ol2caj
+ol2cal
+olca2n
+olc1any
+ol2c1e2k
+ol2cel
+ol2ces
+ol2c1év
+ol2c3h
+olc1iko
+ol2cí
+ol2có
+ol2cö
ol2c3sor
+ol2csű
+olc3sz
+ol2cü
+ol2cz
+ol2dab
+1oldal.
+1oldalá
+1oldalb
+olda2le
+1oldalh
+1oldalk
+1oldall
+1oldaln
+1oldalo
+1oldalr
+1oldalt
+1oldalu
+1oldalú
+ol2d1any
ol2dap
+olda2tel
+ol2d1au
ol2dál
+ol2deg
+ol2d1elé
+ol2d1ell
+ol2d1elv
+old1emb
+ol2d1e2r
+ol2d1e2s
+ol2dev
+ol2dez
+ol2dés
+ol2d1éve
+ol2dip
ol2d1is
-ol2d1ud
+ol2dor
+1oldós
+ol2d1ö2
+ol2dud
+ol2d1u2g
ol2d1ü
-2ole
+ol2dű
+ol1e2g
o2l1e2l
-o2l1é2r
-ol2f1ö
-ol2fü
-o2l1il
-ol1ind
-2olit
-olki2
-ol2l1ő
-ol1ó2rá
-ol1p2
-ol2taj
-ol2tág
-olte2
-ol2t1el
+o2l1é2d
+o2l1é2g
+o2l1él
+ol1ér.
+ol1érd
+ol1é2re
+ol1éré
+ol1érh
+ol1é2ri
+ol1érj
+ol1érl
+ol1érn
+ol1érő
+ol1érs
+o2l1érté
+ol1é2rü
+ol1érv
+o2l1érz
+olfa2k
+ol2fau
+ol2f1ár
+ol2fes
+ol2fet
+olf1ing
+ol2fir
+ol2fis
+olfu2
+ol2f1ut
+ol2fúj
+ol1gl
+ol1g2r
+2olib
+o2l1i2du
+1o2liga
+oli2gáz
+o2l1igé
+ol1ill
+ol1i2ma.
+o2l1i2má
+1olimp
+oli2nu
+o2l1i2pa
+olipe2
+oli2p1et
+o2l1isk
+oli2szál
+ol1ív.
+oll1a2gy
+ol2l1aj
+olla2l
+ol2l1ala
+ol2l1alj
+ollan2d1ó2
+oll1any
+ol2l1atk
+oll1att
+ol2l1á2g
+ol2l1e2c
+oll1ege
+oll1egé
+ol2l1e2gy
+ol2l1e2h
+olle2l
+oll1ele
+ol2l1emb
+oll1ese
+ol2l1é2k
+ol2l1éri
+ol2l1inf
+oll1inge
+oll1ingé
+oll1ingi
+oll1ingj
+oll1ingn
+oll1ingr
+oll1inj
+ol2lins
+ol2l1int
+oll1isk
+ol2lob
+ol2lor
+ol2l1osz
+ol2l1ö
+ol2l1ő2
+oll1s
+ol2lub
+ol2lul
+ol2l1u2s
+ol2lü
+ol3lyu
+oln1ike
+o2l1o2l
+o2l1op
+olo2r1e
+ol1ott
+o2l1ox
+olóe3dénn
+oló1f2
+o2l1ó2né
+ol1ónn
+ol1ó2no
+ol1ónr
+ol1ónt
+oló2rái
+oló2ráj
+oló2rák
+oló2rán
+oló2rár
+oló2rát
+ol1ó2ri
+olót2
+oló1tr
+ol1ö2l
+ol1ör
+ol1ös
+ol1p2l
+ol1p2r
+ol1sk
+ol2t1aj
+1oltalm
+1oltalo
+ol2t1ari
+ol2t1ág
+ol2t1áta
+ol2t1eg
ol2t1em
-ol2t1ér
-ol2tí
-ol2tőr
-ol2t1ü
+olte2r
+ol2t1ere
+olte2s
+ol2t1e2v
+ol2t1ép
+ol2t1ér.
+ol2t1érr
+ol2t1és
+ol2tid
+ol2tim
+ol2tis
+ol2tiz
+ol2t1old
+1oltóé
+1oltóh
+1oltóké
+1oltólo
+1oltóm
+1oltón
+oltö2r
+ol2t1őr
+ol2tür
o2l1ug
+o2l1ur
+o2l1u2tá
+ol1ús
+ol1üg
+ol1ül
+ol1üv
+ol1üz
1olvad
1olvas
-oly1agy
-o2lyaj
+o2lyabr
+oly1ada
+oly1aggy
+olyame2
+olya2mes
+oly1aszt
o2lyál
+o2ly1e2
+1o2lyéb
+1o2lyéh
+1o2lyéi
+o2lyél
+1o2lyén.
+1o2lyiér
+o2lyim
+2olyó
+o2ly1ö
+o2lyő
+o2lyug
o2ly1ü2
+o2ly1ű2
+o2m1abl
+om1a2dat
+o2m1adm
o2m1a2dó
o2m1adt
-om1agy
-o2m1a2j
-o2m1akn
-om1akó
-o2m1a2l
-o2m1ana
+oma1f
+omaga2
+oma2ga.
+oma2g1ad
+oma2gal
+oma2g1á2
+oma2ge
+omagi2
+oma2g1in
+o2m1a2gya
+om1agyú
+o2m1ajá
+o2m1ajk
+oma1kré
+o2m1akt
+om1a2lag
+oma2lapo
+oma2lapr
+o2m1alm
+om1alt
+om1alv
+o2m1amb
+om1ang
o2m1ann
-om1app
-o2m1ar
-om1atom
-o2m1árb
-o2m1áru
+om1apad
+o2m1app
+oma1pr
+o2m1a2ra
+o2m1arc
+o2m1arg
+oma2t1árak
+o2m1atká
+o2m1aty
+o2m1au
+om1a2zo
+omá2cs
+omá2g
+om1ági
+om1ágo
+omá2nyan
+ományká2
+o2m1áp
+o2m1á2rai
+om1á2rak
+om1á2ram
+om1áras
+o2m1á2rá
+o2m1árd
+o2m1áre
+omá2ré.
+omá2rét
+o2m1árg
+omá2ria
+omá2riá
+o2m1árm
+o2m1á2ru
+omá2sí
omás3s
-2omb
+omá2sz
+omás3zó
+o2m1á2t1e
+om1á2t1é
+o2m1átk
+o2m1átm
+om1átol
+o2m1átr
+om2b1a2lo
om2bág
-om2ber
-2ome
-om1ece
-o2m1edé
-o2meg
-om1egy
+om2b1eg
+omb1elh
+om2b1elt
+omb1éne
+om2b1éri
+omb1ón.
+ombó2r
+omb1óra
+om1bro
+om2buj
+omdio2
+om1dr
+o2m1e2b
+o2m1e2ce
+o2m1e2dé
+om1ef
+ome2g
+ome3gá
+om1ege
+om1egé
+o2m1egy
ome2l
+o2m1ela
+om1elá
+om1elb
o2m1ele
-o2m1ell
+o2m1elé
+om1elk
+om1ellá
o2m1elm
-o2m1elt
+o2m1eln
+o2m1elo
+o2m1elő
+o2m1els
+om1elte
+o2m1elu
+o2m1elv
o2m1e2m
om1ene
-ome2o1
-omeosz2
-o2m1e2rő
+om1eng
+om1eny
+om1enz
+ome2o
+o2mep
+om1erd
+o2m1e2red
+o2m1e2rei
+o2m1erny
+om1e2ro
+ome2rő
+o2m1erő.
+o2m1erőb
+o2m1erőh
+o2m1erőn
+o2m1erőr
+om1erősí
+omer1őss
+o2m1erőt
+o2m1erőv
+om1e2rű
+ome2s
+om1ese
+om1esé
+om1ess
+om1est
+o2m1e2ti
+o2m1etn
+o2m1etű
o2m1e2v
-o2m1e2z
-2oméd
-om1érc
+o2m1ex
+ome2z
+o2m1eze
+o2m1ezred
+o2m1ébe
+om1é2de
+o2m1ég
+o2m1é2he
+o2méhs
+om1éje
+o2m1é2ke
+o2m1é2le
+om1élé
+om1é2lő
+o2m1ép
+o2m1ér.
+o2m1érb
+o2m1érc
+o2m1é2re
+o2m1é2ré
+omé2ri.
+o2m1érm
+o2m1é2rő
+o2m1érr
o2m1érte
-om1éve
+o2m1érté
+o2m1értő
+o2m1érv
+o2m1é2s
+omé2tel
+o2m1étt
+o2m1éve
+om1évé
+om1f2l
+om1gl
+om1gr
om1ide
-o2m1il
-om1ind
-o2m1ip
-o2m1i2r
+omid1i2
+om1i2dő
+omi2g
+o2m1iga
+o2m1igé
+om1iks
+o2m1ill
+om1imá
+omime2
+omi2mel
+omi2m1é
+om1i2na.
+omi2náb
+omi2náv
+o2m1ind
+om1inf
+o2m1ing
+om1inv
+o2m1i2ono
+o2m1i2p
+o2m1irá
+o2m1i2ri
+o2m1iro
+o2m1irt
+o2m1isk
o2m1ism
+o2m1iste
+omi2sz1á
+om1i2tal
+omi2tan
+omi2t1ás
+omi2t1e
+omi2tis
+om1izé
om1izo
-om1ír
+om1izz
+om1íj
+o2m1ír
om1í2v
-omog2
-o2m1ola
-o2m1old
-o2m1op
-2omor
-o2m1ö2
-o2m1ő2
-om1p2lo
-om1p2re
-oms2
+om1í2z
+omjó2
+om2jő
+omká2rok.
+om1kl
+om1kr
+omlá2b1út
+omo2dor
+omo2kas
+2omoly
+o2m1ont
+om1ope
+omo2ras
+omo2re
+omo2riz
+o2m1orjá
+om1osto
+omosz2f
+o2m1oszt
+o2m1ox
+om1ök
+om1ö2l
+om1ön
+om1ö2r
+om1ös
+om1ö2t
+om1öv
+om1ö2z
+om1ő2r
+om1ő2s
+om2pel
+om1pla
+om2p1ors
+om2pő
+om2p1u2tá
+om1sk
+om1sl
+om1sp
om1st
+om2te.
+omtes2s
+om1t2r
o2m1ud
+o2m1ug
o2m1uj
-o2m1ü2
-2omű
+omu2n
+o2m1uno
+o2m1ur
+o2m1u2t
+o2m1u2z
+o2m1új
+om1üd
+om1üg
+om1ü2l
+om1ür
+om1üs
+om1üt
+om1üv
+om1üz
+om1űr
om1űz
-on1agá
-on1ajt
-ona2le
-on1a2va
-o2n1átr
-on1átv
-on2cas
-on2c1é2
-onc3sz
-on2d1ó2r
-o2n1e2g
-o2nek
+om1ya
+o2n1abl
+ona2cél
+ona2dat
+ona1dr
+on1ads
+onae2
+on1agg
+on1agi
+on1agó
+on1agyh
+on1ajn
+o2n1ajt
+2onak
+on1akc
+o2n1akk
+on1akn
+o2n1akt
+ona2len
+ona2l1e2s
+ona2lint
+on1alj.
+on1alju
+ona2lok
+ona2los
+1onani
+o2n1a2no
+o2n1ant
+on1app
+ona1pr
+ona1ps
+ona2rác
+onarádi2
+ona1s2p
+ona2tál
+onatü2
+ona2tüz
+on1ábr
+2onác
+o2n1ág
+o2n1állo
+o2n1állv
+o2n1á2p
+on1árad
+o2n1á2rak
+on1á2rat
+on1árb
+o2n1árk
+o2n1árn
+o2n1á2ro
+o2n1árt
+o2n1á2ru
+o2n1á2rú
+on1árv
+o2n1á2sza
+o2n1á2szokr
+o2n1átál
+oná2tás
+o2n1átc
+o2n1áte
+oná2t1ér
+o2n1átf
+o2n1áthe
+o2n1átm
+o2n1átre
+on1bl
+on1br
+on2cal
+on2c1ál
+on2c1e2g
+once2s
+on2c1ez
+on2c1ék
+on2c1ér.
+on2c1éré
+on2che
+on2cid
+on2c1ikr
+onc1ill
+on2cös
+onc3ság
+on2cseg
+oncs1emb
+oncs1ég
+on2cs1ér.
+onc3sikk
+on2cs1im
+on2cú
+on2cü
+on2de.
+ond1iko
+on2d1o2kos
+ond1oksá
+on2d1osz
+2ondoz
+on2d1öl
+on1e2b
+o2n1e2d
+on1e2ge
+on1egg
+o2n1e2gy
+on1e2h
one2l
-on1ele
+o2n1ela
+o2n1ele
+on1el1é
+o2n1elh
+on1elj
+o2n1elm
+o2n1eln
+o2n1elo
on1elő
-one2r
-on1ern
-o2n1ég
-on1éhe
+o2n1elr
+on1els
+on1elt
+o2n1elv
+o2n1e2m
+one2n
+on1ene
+on1erj
+on1erk
+on1ers
+one2s
+o2n1ese
+ones2s
+on1est
+o2n1e2v
+o2n1ex
+2onéb
+oné2d
+on1éde
+o2n1é2g
+o2n1é2he
+on1é2ke
+on1éks
o2n1é2l
-on1éne
+on1é2ne
o2n1é2p
-on1év.
-on1éve
-ong1asz
+o2n1érbe
+o2n1érc
+o2nérd
+o2n1éri
+o2n1érl
+o2n1érm
+o2n1érp
+o2n1érs
+o2n1érte
+o2n1érv
+o2n1év.
+o2névad
+o2n1évb
+o2n1é2ve
+on1é2vi
+o2n1évk
+o2n1évn
+on1évr
+on2g1áll
+ongás1s
+on2g1e2c
+on2ged
+on2g1eg
+on2g1e2l
+on2gik
+on1g2ló
+on2gü
+on2gyad
+on2győ
+onháro2
+onhárom1
+o2n1i2d
oni2g
-on1igé
-o2n1ip
-on1ism
-on1izz
-onkás1
+o2n1iga
+o2n1ige
+o2n1igé
+o2n1ij
+on1i2ke
+o2n1ill
+o2n1inb
+on1ind
+o2n1inf
+o2n1ing
+o2n1inj
+o2n1inn
+o2n1inr
+o2n1ins
+o2n1int
+o2n1i2p
+on1i2rá
+o2n1iro
+o2n1irt
+o2n1isk
+o2n1ism
+on1iste
+onita2
+o2n1i2zé
+on1izo
+o2n1izz
+on1íg
+o2n1ín
+o2n1ív
+on1íz
+onk1áll
+onká2rok.
+onké2t1
+on2ne.
+on3nyár
on3nye
on3nyo
+on3nyú
+on3nyü
+o2n1ob
+ono1g2ráf.
+ono1g2ráfn
+onoka2
+on1o2kal
+on1o2kos
+o2n1okta
o2n1old
+on1oll
on1opt
-ono2szi
-o2n1ö2
-o2n1ő
+on1oszl
+ono1sztr
+o2n1o2v
+o2n1ox
+o2n1óri
+onó2sak
+onó2si
+onó2szen
+on1öb
+on1öl
+on1ön
+on1ör
+on1ös
+on1ö2t
+on1ö2v
+on1ö2z
+on1ő2s
+on1pl
+on1pr
+on1ps
+2ons.
+onsa2v1a2m
+on1s2k
+on1sl
+on1s2m
+on1spe
+on1spo
+on1spr
+on1sr
+on1sto
+onsz2
+on1szf
+on1szt
+ont1agy
on2t1aj
-ont1á2ron
-on2tát
-on2ted
-on2t1ér
+on2t1alk
+on2t1ara
+on2t1atr
+on2taz
+on2t1áll
+ont1árv
+on2teb
+on2t1ed
+on2t1e2g
+ont1elá
+ont1eld
+ont1elh
+ont1ell
+ont1elm
+on2teln
+on2t1elő
+ont1elt
+ont1elv
+ont1emb
+onte2s
+on2t1ese
+ont1éké
+on2tél
+on2tigé
+on2t1i2ko
+ont1ikr
+on2t1i2m
+on2t1inf
+on2t1int
+onti2sz
+ont1iszo
+on2t1iz
+on2t1í2v
+on2t1oml
+on2t1ors
+ont1óni
+1ontóst
on2t1ös
-on1t2ri
-on1ud
-on1ug
-o2n1ut
-onú2
-o2núj
-on1ús
-2onü
+on2t1öz
+on2tül
+on2tür
+on2t1üz
+on2tye
+o2n1ud
+o2n1ug
+o2n1uj
+onu2n
+o2n1una
+o2n1u2r
+o2n1u2t
+o2n1új
+o2n1ú2s
+onú2t
+on1útb
+on1úté
+on1úth
+on1úti
+on1útj
+on1úto
+on1útr
+on1útt
+on1ü2c
+o2n1ü2g
on1ü2l
-on1üt
+o2n1ün
+o2n1ür
+o2n1ü2t
on1ü2v
-ony1any
+o2n1ü2z
+on1űr
+on1űz
+o2ny1acé
+ony1a2dó
+ony1akc
+ony1alj
+o2ny1alk
+ony1alt
+ony1anya
+onya1p2
+o2ny1apó
o2ny1ál
-ony1em
-o2nyer
-ony1es
-ony1ég
-o2ny1ir
-o2ny1it
-o2ny1ó2
-o2nyö
+ony1árk
+o2ny1árn
+ony1ázó
+ony1e2c
+ony1e2g
+o2ny1e2l
+o2ny1e2m
+o2nyen
+o2ny1e2r
+ony1e2s
+o2ny1ég
+o2ny1é2j
+o2ny1é2k
+o2ny1él
+o2ny1é2ne
+o2ny1ér.
+o2nyéré
+onygóc1
+o2nyigé
+ony1iko
+ony1ing
+o2nyita
+o2nyitók
+o2ny1í2r
+ony1old
+ony1oml
+o2ny1o2r
+o2nyosz
+ony1ó2r
+o2ny1ö
o2ny1ő2
-2onysiosá
-on2zed
+o2nyug
+o2ny1ur
+o2ny1ü2
+onz1abl
+on2zag
+onz1ajtó
+on2zar
+on2zág
+on2z1á2l
+on2z1ed
+on2z1e2l
+on2z1e2m
on2z1es
-onzé2
-on2zér
-on2zsá
-2o1o
-o2ob
-o2of
-o2og
-o2ol
-oo2r
-o2ot
-oo2x
-o2ó
-o1ö2
+on2z1ék
+on2z1ére
+on2z1im
+onz1ing
+onz3sel
+on2zü
+o1o
+oo2ib
+oo2in
+oo2pe
+oo2re
+oo2xi
+o1ó
+o1ö
o1ő
-2opa
+o2p1a2b
+o2p1a2d
+o2pal
+op1a2la
+o2p1any
+op1a2po
+op1a2r
+opa2u
+o2p1a2z
+o2pál
+o2p1ám
+o2p1á2rat
+opáskész1
+o2p1áth
+o2p1átl
+o2p1átm
+op1bl
+op1e2dé
op1e2g
-2oph2
-op2his
-2opl
-op2le
-2opo
-2opr
+op1ejt
+op1elő
+op1em
+opera1s
+operasz2
+op1erd
+op1erk
+op1erő
+op1es
+op1e2t
+o2p1é2l
+o2p1é2n
+op1gr
+op1i2ko
+op1ikr
+o2p1im
+op1ind
+o2p1ing
+o2p1i2p
+o2piram
+o2p1i2rá
+op1isi
+op1ist
+o2p1i2ta
+opi2z
+op1izo
+op1izz
+op1ív
+op1kl
+op1kr
+o2p1ob
+2opol
+o2p1orj
+o2p1orr
+opor2t1a2
+opor2t1á2
+opor2t1e2
+opor2t1érd
+opor2tö
+o2p1orzó
+oposz2f
+o2p1ov
+op1ös
+op2pé
+op2p1is
+op1py
+2opro
+op2roc
op2rod
-2ops
-opsz2t
-2opü1
-or1abl
-or1ala
-or1alj
-or1alm
-ora2n
+op1sl
+op1sp
+op1sr
+op1s2t
+o2p1ud
+o2p1u2r
+o2p1u2t
+op1új
+o2p1ús
+op1üd
+op1üg
+op1üt
+op1üz
+o2r1abl
+o2r1abr
+ora2dat
+o2r1a2dá
+or1adm
+o2r1a2dó
+or1aff
+or1agg
+or1a2gó
+ora2kad
+ora2kas
+o2r1akc
+ora1kl
+ora2kol
+o2r1akt
+or1alg
+o2r1alj
+or1alk
+o2r1alm
+o2r1alt
+o2r1alv
+or1amp
o2r1ana
+o2r1ane
+o2r1ank
+o2r1a2no
o2r1ant
-or1any
-ora1p
-or1arc
-or1atl
+or1a2nya
+oraó2
+or1app
+o2r1a2rá
+o2r1arc
+or1a2ri
+or1aszk
+o2r1atk
+o2r1atl
+or1att
+or1aty
+o2r1a2zo
+o2r1ábr
+orá2cs
+or1ács.
+or1ácsa
+or1ácso
o2r1á2g
-or1á2rak
-or1áru
-or2cső
-or2dö
-or2dú
+orá2le
+or1álló
+o2r1állv
+orá2lö
+o2r1á2p
+o2r1ár.
+o2r1á2rak
+o2r1árá
+o2r1árb
+o2r1árk
+o2r1á2ro
+o2r1árp
+o2r1árr
+o2r1árt
+or1á2ru
+or1árú
+o2r1árv
+o2r1ásv
+orá2sze
+o2r1áta
+o2r1á2t1e2
+o2r1átf
+o2r1áth
+o2r1átj
+o2r1átk
+o2r1átm
+o2r1átr
+o2r1áts
+o2r1átt
+o2r1átv
+or1bl
+or1br
+or2c1a2l
+or2car
+1orcád
+or2chá
+or2c3hé
+or2c3ho
+orc3ság
+or2c3seb
+or2c3sé
+or2cú
+or2cz
+or2d1au
+ord1eme
+ord1e2ső
+or2dex
+or2d1ing
+2orea
+o3reá
+o2r1e2b
+or1ecs
o2r1e2d
+o2r1ef
+or1e2ge
+or1e2gé
+o2r1e2gy
+2ore2k
+or1eke
+or1eké
+ore2l
+or1ela
+or1ele
+or1elh
+or1elj
or1elm
or1eln
or1elo
-or1e2lő
+or1elő
+or1elr
or1els
+or1elt
+or1elv
o2r1e2m
+ore2n
+or1ene
o2r1eng
or1eny
-o2r1e2r
+o2r1ep
+or1eró
ore2s
+or1ese
+or1esé
or1eső
-or1é2gé
+o2r1ess
+o2r1esze
+o2r1e2v
+or1ez
+o2r1é2d
+o2r1é2g
+o2r1é2j
+oré2kás
+oré2k1e2
+or1ékné
o2r1é2l
-or1é2ne
+o2r1é2m
+o2r1é2ne
o2r1ép
-2orgia
-orgi2ai
-2orgiá
-or1i2de
+o2r1éré
+o2r1é2te
+o2r1étk
+o2r1év.
+o2r1é2ve
+o2r1é2vé
+o2r1é2vi
+o2r1évn
+o2r1évr
+orfé2l1é2v
+orfi2úér
+2orgiai
+or1gl
+o2r1ibo
+o2r1i2de
+o2r1i2dé
+oridi2
+ori2d1io
1o2rie
-o2riga
-o2r1ing
-or1i2pa
-o2r1is.
+o2r1ifj
+o2r1i2ga
+o2r1i2gá
+o2r1i2gy
+or1iha
+o2r1i2ma.
+o2r1i2má
+o2r1i2na.
+o2rinas
+o2r1i2nán
+o2r1i2nát
+or1i2náv
+o2r1ind
+o2r1inf
+o2r1ing.
+o2r1ingc
+o2r1ingé
+o2r1ingi
+o2r1ingn
+o2r1ingr
+o2r1ings
+or1inh
+o2r1inj
+o2r1ins
+orin2t1a2
+orin2tel
+orin2t1ő
+ori2og
+o2r1i2p
+o2r1i2si
+o2r1ism
or1isp
-or1iss
-or1iste
-ori2sz
+o2r1iste
+o2r1i2szá
+ori2tan
+o2r1i2zé
+o2r1íg
+o2r1í2j
+o2r1í2n
o2r1ír
-o2ríz
-or1kr
+o2r1í2v
+o2r1í2z
+1orjaia
+1orjaié
+or3já
+or1k2l
+orkö2z1e2p
+or1k2v
+or2m1app
+orma1t2re
+or2m1att
+or2m1azo
+or2m1eb
+orme2g
+or2m1egy
+orm1eli
+orm1elv
+orm1erők
+orm1esz
+ormé2t
+or2m1éte
+or2m1osz
+or2móv
+or2m1ö
+or2m1ő
+or2mü
or2ne.
-o2r1or
-or1ó2r
-o2r1ö
+ornis1s
+o2r1o2á
+orogkész1
+oro2k1á2
+oro2kor
+o2r1olda
+o2r1o2li
+o2roltól
+o2r1ontó.
+o2r1ontób
+or1ontóé
+or1ontóig
+o2r1ontój
+o2r1ontón
+o2r1ontór
+o2r1ontót
+o2r1ontóv
+oro2nya
+oro2nyo
+or1ope
+or1opt
+o2r1o2r
+o2r1osko
+o2r1osto
+1o2roszi
+1o2roszr
+o2rosztá
+o2r1o2x
+or1ó2ia
+or1ó2ni
+or1ó2rá
+or1óri
+or1ó2sá
+oróso2r
+oró2soro
+or1ö2b
+or1ö2c
+or1ö2l
+or1ön
+or1ör
+or1ös
+or1öt
+or1öv
+or1ö2z
+or1ő2r
+or1ő2s
+or1ph
or1pl
-or1pr
-or2r1e2v
-orse2
-or2sel
-or2ses
-or2set
-orsé2
-or2s1ég
-or2s1ér
-or2sét
-or2sis
-ors3s
-1ország.
-or2t1a2d
-or2táru
-or2teg
-ort1elm
-or2t1em
-ort1esz
-ort1ért
-ort1ing
-or2t1osz
+or1p2n
+or1p2r
+orr1abl
+or2r1a2r
+or2r1áta
+1orrb
+1orri.
+or2rin
+or2riz
+1orrk
+1orruk
+1orrú.
+1orrúc
+or2s1a2d
+or2s1ajtók
+ors1alk
+ors1ass
+or2s1ál
+or2sed
+or2s1e2s
+or2s1é2ne
+or2sérte
+ors1é2tát
+or2s1í2r
+or2sön
+or2ső
+or1srá
+or1s2tab
+ors1ült
+ors1ü2tő
+1ország
+orszi2l1
+ors3zóná
+or1sz2t
+or2t1agg
+or2t1alm
+or2tana
+orta2n1á2c
+or2t1aré
+or2tág
+ort1árad
+ort1á2ram
+ort1á2rán
+ort1á2rár
+ort1árbe
+ort1árná
+ort1á2ruk
+or2t1á2rú
+or2t1e2g
+ort1ejt
+or2t1ela
+ort1e2lem
+or2t1elé
+or2t1ell
+or2t1elm
+or2t1eln
+or2t1elo
+or2t1elő
+or2t1elt
+ort1elv
+ort1emb
+or2tene
+orte2r1a
+or2t1ess
+ort1eti
+ort1éle
+ort1élé
+ort1élt
+ort1élv
+or2t1érm
+or2tid
+ort1i2ku
+or2t1int
+or2t1ist
+or2t1ita
+or2tít
+or2t1okm
+or2t1o2kol
+or2t1okta
+or2t1old
+or2t1orm
+or2t1ott
+or2t1ó2r
+or2t1ön
or2t1ös
+or2t1ö2v
+ort1ura
+or2t1u2t
+ort1úr.
+or2t1ü2zér
o2r1ud
-o2r1ug
-or1u2r
+o2r1u2g
+o2r1u2r
o2r1u2t
-o2r1ü
-o1ry
+o2r1útb
+o2r1úth
+o2r1ú2ti
+o2r1útj
+o2r1útn
+o2r1ú2ton
+o2r1útr
+or1úts
+o2r1útt
+or1üd
+or1ü2g
+or1ü2l
+or1ün
+or1ür
+or1ü2s
+or1üt
+or1ü2v
+or1üz
+or1űr
+1orv.
+or2v1a2n
+2orvá
+orv1isi
+1orvos
+or2vő
+1orvv
+or2z1a2var.
+or2z1e2c
+or2zes
+or2zsan
orz1z
-o2s1ac
-o2s1a2la
-o2s1alk
-osa2t
-os1aty
-o2s1áf
-os1áll
-ose2
-os1ed
-os1eg
-os1el
+o2s1abl
+o2s1a2da
+o2s1a2dó
+o2s1akc
+o2s1a2l
+osa2n
+o2s1ang
+o2s1ant
+o2s1any
+o2s1a2p
+os1arc
+os1assz
+os1a2ty
+o2s1au
+o2s1ábr
+o2s1á2g
+os1áld
+o2s1áll
+os1á2lom
+osára2
+osá2rak
+osári2
+osá2rik
+osá2rok
+o2s1áru
+osás1s
+os1á2t1a
+os1áté
+os1átj
+os1átk
+o2s1átr
+os1e2d
+o2s1e2g
+o2s1e2l
os1emb
-os1en
-os1er
-os1esz
+os1e2n
+o2s1er
+o2s1es
+os1e2t
+os1ex
+os1ez
+o2s1é2g
+o2s1é2l
o2s1ép
-o2s1id
-os1ina
-os1int
-o2sir
+o2s1érd
+o2s1érte
+o2s1érté
+osgé2
+o2s1ide
+o2s1if
+osi2g
+os1iga
+os1ikr
+os1inf
+o2s1int
+o2s1i2p
+o2s1i2rá
+os1iro
+os1irt
+o2s1ism
+os1isp
+os1iste
+o2s1i2sz
+o2s1íj
o2s1í2r
-os1k
-oski2
-osme2
-os1p2
+o2s1í2z
+os1kl
+os1kró
+2osok
+o2sonh
+o2sonn
+o2sono
+1o2sont
+o2sonu
+1osonv
+o2s1o2r
+os1osz
+osó1p
+os1ök
+os1ö2l
+os1ön
+os1ö2v
+os1ő2r
+os1p2l
+os1p2r
+os1ps
+os1sta
+ossu2
+os2s1ur
+ossz1áll
+ossz1á2ro
ossz1es
-os3szék
-os3szö
+ossz1íj
+osszó2
os3sző
-os2t1any
-os1the
-1ostro
+ost1e2te
+os2tip
+os2tir
+os2tiz
+1ostob
+ost1old
+os2t1ös
+2ostu
+os2t1ü2
1ostya
+o2s1ud
o2s1uj
-o2s1ut
+o2s1u2r
+o2s1u2t
os1úr.
-os1út
-o2s1ü2
+o2s1ú2s
+o2s1üg
+o2s1ün
+o2s1ü2v
+o2s1üz
+os3zabá
+o2szaj
+osz1alá
osz1alk
+osz1alt
+osza2n
+osz1any
+o2szar
+osz1aré
+osza2t1e2
+o2sz1ál
+o2sz1ed
+o2sz1e2g
o2sz1e2l
-o1sz2fe
-2o1szkl
-2oszkóp.
-2oszkópk
-2oszkópo
-2oszkópp
+o2s3zen
+osz1ep
+osz1es
+o2szég
+o2széj
+o2sz1é2l
+o2sz1é2p
+o2sz1és
+o2szige
+osz1ing
+osz1ism
+osz1ist
+oszí2
+osz1ív
+o1szkl
+o2sz1o2ro
osz1ors
+o2sz1orz
+os3zón
osz1ó2r
-o2s3zö
-o2s3ző
-o2szut
-o2szű
-ota1g
-o2t1a2u
-o2t1ág
+o2szö
+os3zöl
+osz2t1alm
+oszt1any
+osz2t1apo
+osz2tár.
+osz2t1árn
+osz2ted
+osz2tell
+osz2t1em
+oszté2r
+osz2t1éré
+osz2t1ív
+osz2t1osz
+o2szur
+osz1úr
+o2szü
+osz1üg
+os3zül
+ot1abl
+ot1a2da
+otag2
+ota1gr
+ota1k
+ot1ana
+o2t1ant
+ot1a2ny
+ota1p2
+ot1arc
+ot1arz
+ot1ass
+o2t1a2z
+ot1ábr
+o2t1á2g
ot1á2rak
-2ote
+o2t1á2rá
+o2t1árb
+o2t1á2ré
+ot1árn
+ot1bl
+o2teb
o2t1e2g
-2otéka
+otel1a
+ote2l1á
+ote2lel
+ote2lő
+ote2m1á
+ote2m1o
+ot1e2v
+o2t1é2l
+o2t1ép
+o2t1ér.
o2t1érté
-o1t2he
-ot2hi
-2otí
-oto1g2
-oto1p
+o2t1érz
+ot1fr
+ot1gr
+oth2r
+o2t1id
+o2t1im
+otina2
+ot1i2na.
+oti2nar
+oti2nár
+o2t1ind
+otinká2
+2otipa
+2otipi
+2otipn
+2otipt
+o2t1irá
+o2t1is
+o2t1izé
+ot1íj
+ot1ín
+ot1kl
+ot1k2r
+o2t1ob
+oto1gram
+ot1ola
+otona2
+oto2n1á
+oto2n1in.
+oto2nis
+oton3n
+oto2rak
+oto2rál
+oto2rár
+oto2re
+oto2rim
+oto2rin
+oto2rol
otosz2f
-otot2
-otókész1
-otó2pa
-o2t1ó2sá
-2otro
-ot2tar
-ot2tég
-o2t1ü2
+otó1f2
+2otóp
+otó2pan
+otó2pas
+otó2pin
+otó2p1osz
+otó2sétá
+otós3s
+otó1sta
+otó1sz
+otó2s3zár
+otót2
+otó1tr
+ot1ö2l
+ot1ös
+ot1pl
+ot1pr
+ot1ps
+o1t2rag
+ot1sp
+ot1sr
+ot1st
+otta1g2
+ot2t1é2g
+1ottl
+ot1ura
+ot1u2sz
+o2t1új
+ot1úri
+ot1ü2l
+ot1üt
+ot1ü2z
+ot1űr
+otva1k2
+otya1
o1u
-o2uc
-o2un
-o2ur
-o2us
-o2ut
-ouv2
+ou2ag
+ou2il
+ou2le
o1ú
o1ü
o1ű
+ova2ga
+ova2g1i2n
+ova2r1an
+ova2rát
+ova2r1el
+ova2rék
+ova2rés
+ova2ris
ovas3s
-owat2
-o2wi
-1oxido
-o1ya
-o1ye
-oy1s2
-oza2g1
-oza2tí
-ozatkész1
+ovau2
+ováb2b1o
+ová2s1á2rá
+ová2sik
+ovio2
+ow1el
+1oxidb
+1oxidr
+o2xigé
+1oxilc
+oy2ce
+oza2g
+ozag1a
+oz1agi
+o2z1a2l
+oza2mal
+oza2m1e2
+oza2m1érté
+oza2min
+oza2n
+o2z1any
+oza2r
+oz1ara
+oza2tat
+oza2tál
+oza2t1e2
+oza2tés
+oza2t1é2te
+ozat1ill
+oza2t1í2
oza2t1ol
+o2z1au
+o2z1á2g
+ozá2ke
+oz1áll
+o2z1á2ro
+o2z1áru
+ozá2s1e
ozás3s
-oz1é2p
-o2z1il
+ozá2s3z
+o2z1átl
+oz1e2g
+oz1e2m
+oz1en
+ozé2k1e2
+o2z1é2l
+o2z1é2p
+o2z1é2ré
+oz1i2do
+o2z1i2par
+oz1iro
+ozi2s1aj
+ozi1sl
+ozi1st
ozi1sz2
-oz3sz
+ozi2t1a2
+oz1í2n
+o2zor
+oz1ors
+o2z1osz
+ozóegyez1
+2ozófia
+2ozófiáb
+2ozófiáh
+2ozófiája
+2ozófián.
+2ozófiána
+2ozófiár
+2ozófiát.
+2ozófiátó
+2ozófiáva
+ozó2tan
+oz1p2r
+o2zs1a2l
+ozsa2n
+ozs1any
+o2zs1ő
+ozs1s
+o2zsü
+oz1ün
+oz1ü2z
+oz1űr
+ozzá1s2
2ó.
ó1a
-óa2c
-2óa2d
-óa2g
-óa2j
-2óak
-2óa2l
-2óa2m
-óa2n
-2óa2r
-2óa2u
-óa2v
-2óa2z
-2ó1á
-óá2c
-óá2gak
-óá2l
-óá2p
-óá2r
-óá2t1
-2óbar
-óba1s2
+óa2cé
+óa2dag
+óa2dá
+óa2do
+óa2dó
+óa2ga
+óa2gi
+óa2gy
+óa2já
+óajtói2
+óa2kad
+óa2kar
+óa2ká
+óa2ku
+óa2la
+óala2g1
+óa2lá
+óa2l1e
+óalmana2
+óalmanac3
+óa2lo
+óal1os
+óa2lu
+óa2ma
+óa2na
+óa2nó
+óa2ny
+óa2pá
+óa2po
+óa2pó
+óa2pu
+óa2ra
+óa2rá
+óa2ré
+óa2ri
+óa2ro
+óa2to2
+óatom1
+óa2ty
+óa2uk
+óa2ur
+óa2ut
+óa2va
+óa2xi
+óa2zo
+ó1á
+óá2bé
+óá2cs
+óá2ga
+óá2gi
+óá2go
+óá2gyú
+óá2hí
+óá2la
+óá2lo
+óá2po
+óá2rá
+óá2ru
+óá2rú
+óá2sa
+óá2só
+óá2sz
+óá2ta
+óát1a2dó.
+óá2tá
+óá2t1e2
+óá2té
+óá2t1i2
+óá2tí
+óá2to
+óá2t1ö
+óá2tu
+óá2tú
+óá2tü
+2óbab
+2óbaj
+2óbak
+2óbal
+2óband
+2óbank
+óba1p2
+2óbará
+2óbark
+2óbarna
+óbas2
+óba1t2r
+óbau2
2óbec
2óbef
+2óbeg
+2óbeh
+2óbej
+2óbek
+2óbele
+2óbelé
+2óbels
2óbem
-2óbes
-2óbé
+2óbeo
+2óber
+2óbet
+2óbev
+2óbez
+ó2bég
2óbil
2óbio
2óbir
2óbit
-óbo2rá
-ó2c1an
-óc3c
+2óbiz
+ó1b2le
+ó1b2lo
+2óbój
+2óbólé
+ób2rá
+ó1b2ro
+ób2rók
+ó1b2ru
+óbuda2ik
+óbuszt2
+óbu2sz1ú
+ó2c1aj
+ó2c1akr
+óc1a2la
+óc1alk
+ó2c1ar
+ó2c1ass
+óc1att
+ó2c1ál
+1ó2ceá
+ó2c1e2g
+óce2l
+óc1ele
+óc1elm
+óc1elő
+óc1emb
+ó2c1e2v
+ó2c1ép
+ó2c1ét
+óc3há
+óc3he
óc3ho
-2óci
-2ócí
+óci2m
+óc1imi
+óc1ing
+ó2c1i2pa
+ó2c1is
+óc2lu
+ó2c1or
+ó2c1osz
+óc1ó2r
+óc1pr
+2ócsa
óc3ság
-ó2csár
-óc3sip
+ó2cs1áru
+2ócse
+2ócsé
+2ócsi
+ó2csit
+2ócsí
+2ócso
+2ócsö
+2ócső
+ócs1p
+óc3s2pá
óc3sz
-2ódar
+óc1tr
+ó2c1ud
+óc1ün
+óc1üz
+óc3za
+óc3ze
+óc3zu
+ód1ada
+ód1a2dá
+óda2j
+ód1ajá
+ód1akt
+2ódal.
+2ódala
+ód1alg
+ó2d1am
+ód1ana
+2ódarabk
+2ódará
+ód1aut
+ód1azo
+ó2d1áf
+ó2d1ág
ó2d1ál
-ódá2r
-ód1ára
-ódás1s
-2óde
-ó2d1id
-ód1isk
-2ódí
+ó2d1áp
+ó2d1árn
+ód1á2ru
+ódás3s
+ód1bl
+ód1br
+ó2d1e2d
+ó2d1e2g
+ód1e2lem
+ó2d1elh
+ód1elj
+ó2d1ell
+ó2d1elm
+ó2d1elo
+ód1elő
+ód1elr
+ó2d1elv
+ód1emb
+ód1eme
+ód1ep
+óde2ra
+ód1erő
+óde2sés
+ó2d1e2v
+ó2d1ez
+ó2d1é2g
+ó2d1ép
+ó2d1érte
+ó2d1érz
+ód1fr
+ód1gl
+ó2d1i2d
+ó2d1igé
+ó2d1int
+ódi2p
+ó2d1ipa
+ó2d1iro
+ódi2sz
+ód1izo
ó2d1ír
-ód1öl
-ód2res
-ód2rót
-ó1dy
-ód3zs
-2ó1e2
-óel1a2
+ód1kl
+ód1kr
+ód1kv
+2ódob
+ódo2ga
+2ódok
+2ódol
+2ódom
+ó2d1op
+ó2d1osz
+ó2d1o2x
+ódókész1
+ód1órá
+ó2d1ö2l
+ód1ös
+ó2d1öt
+ó2d1öv
+ód1őr
+ód1pr
+2ó1d2ram
+2ódrá
+ód2rám
+ó1d2rog
+ó1d2rót
+ód2ruk
+ód1sp
+ód1st
+2ódug
+ódu2r
+ó2d1ura
+ódus3s
+ódu2s3z
+ó2d1u2t
+ó2d1új
+ód1úr.
+ód1üg
+ó2d1ür
+ód1üv
+ód1üz
+ód3zár
+ó2d3ze
+ód3zso
+ó1e
+óe2bé
+óe2ch
+óe2cs
+óe2dé
+óe2dz
+óe2ge
+óe2gé
+óegész1
+óe2gy
+óe2ke
+óe2ké
+óe2l1a2
+óe2l1á2
+óe2le
+óel1en
+óe2lé
+óel1ér
+óe2l2i
+óe2l1í2
+óe2lo
+óe2lő
+óe2lü
+óembe2r1ék
+óe2me
+óe2mé
+óe2mu
+óe2ne
+óe2pé
+óe2pi
+óe2po
+óe2re
+óe2ré
+óe2ró
+óe2rő
+óe2se
+óe2sé
+óe2ső
+óe2sz
+óe2te
+óe2ti
+óe2tű
+óe2ve
+óe2vé
+óe2vő
+óe2zü
ó1é
-óé2g
-óé2l
-óé2ne
-óé2p
-óé2ré
+óé2be
+óé2ge
+óé2gé
+óé2gő
+2óé2he
+2óéhs
+óé2ke
+óé2ké
+óé2kí
+óé2le
+óé2lé
+óé2lő
+2óé2ne
+óé2pí
+óé2pü
+2óér.
+2óérd
+2óé2re
+2óé2ré
óé2ri
óé2rő
+2óérte
2óérté
2óérz
óé2te
+2óétk
óé2ve
+óé2vé
+óé2vi
+óé2vü
2ófa.
+2ófaa
+2ófaá
+2ófab
+2ófac
+2ófad
2ófae
-2ófá
-2ófi
-2ófo
-2ófr
-óf2ri
-ófus1s
-2ófü
-2óg
-ógi2as
-ógo2r1as
-ógy1a2n
-ógy1el
-ógy1es
-ógy1ér
-ógy1in
-ó2gyü
-2óhá
-2óhé
-2óhi
-2óhí
+2ófaf
+2ófag
+2ófah
+2ófak
+2ófal
+2ófao
+2ófap
+2ófar
+2ófas
+ófa1st
+2ófa1t2
+2ófaü
+2ófav
+2ófaz
+ófe2l1em
+ófe2len
+ó2f1ev
+2ófék
+2ófélő
+2ófélt
+2ófén
+ó2f1ér.
+ófi2ab
+ófi2ad
+ófi2ag
+ó1f2la
+ó1f2lo
+óf2ló
+óf2lö
+óf2lu
+2ófoc
+2ófog
+2ófok
+2ófol
+2óford
+2óforg
+2óformác
+2óformáj
+2óformál
+2óforr
+2ófos
+2ófot
+ó2f1ov
+ó1f2rak
+ó1f2ri
+ó1f2rí
+ó1f2ro
+ó1f2rö
+ó2f1ud
+ófu2r
+óf1ura
+óf1úr.
+óf1úrn
+óga1p
+óg1dr
+óge2o
+ógé2p1i2p
+óg3gy
+ógi2al
+óg1ír
+óg2la
+óg2le
+ógo2ras
+ó1g2raf
+óg2rán
+ógu2sab
+ógu2s3z
+ó2gy1el
+ó2gy1es
+ó3gyi.
+ógy1int
+ógyö2k1érb
+ógyta2n1á2
+ógyte2a
+ógy1ús
+óha2de
+2óhal
+2óhan
+2óhas
+2óhat
+óháza2d
+óhá2z1ada
+2óhon
2óhor
-2óhő
-2óhu
+2óhos
+óhús1s
ó1i
2ói2de
+2óidé
+ói2dén
+ói2di
+2ói2dom
2ói2dő
-ói2g
+2ói2ga
+2ói2ge
2óigé
-ói2má
+ói2géb
+ói2géi
+ói2géj
+ói2gék
+ói2gén
+ói2gér
+ói2gét
+ói2gév
+ói2konb
+2ói2konj
+2ói2konn
+2ói2kono
+ói2konr
+ói2kont
+óile2
+2óill
+ói2ma.
+2ói2má
+ói2mi
+2óimp
+2ói2na.
+ói2nai
+ói2naka
+ói2nas
+ói2nat
+ói2nán
+ói2nár
+ói2nát
+2óind
+2óinf
2óing
+2ói2ni
+2óinj
+2óinp
2óint
-2ói2p
-ói2rat
+2óinv
+ói2pa
+2ói2rat
2ói2rá
-ói2ro
-2ói2s
-ói2ta
-ói2z
-2ó1í2
+2ói2ro
+ói2sz
+2ói2ta
+ói2tók
+ói2vad
+ói2zé
+ói2zo
+ó1í
+óí2rá
+óí2ri
+óí2ro
+óí2ró
+óí2té
+óí2vé
+óí2vü
+óí2vű
+óí2ze
+óí2zé
+óí2zi
+óí2zü
+óí2zű
+ója1g2
+2ójakén.
+ójak2r
+2ójam
+ója1p2
+2ójav
+2ójárá
+2ójárm
+2ójáró.
+2ójáru
+2ójárv
2ójáté
-2óje
-2ókap
+2ójáts
+óje2gy1á2
+2ójut
+2ókab
+ók1a2da
+ók1ajt
+ó2k1akó
+ó2k1alj
+ók1alko
+2ókaló
+2ókamp
+2ókamr
+2ókapa
+2ókapc
+2ókaps
+2ókar.
+2ókara
+2ókarr
+2ókart
+2ókata
2ókate
-ók1áll
-ók1áru
-ó2k1eg
-2ókel
+óka1t2r
+ók1aut
+2ókav
+2ókaz
+ó2k1áll
+ók1árad
+ó2k1á2ri
+ó2k1árn
+ó2k1áru
+2óke2d
+ó2k1edz
+ók1egé
+2ókem
+ó2k1emb
2óker
+óker1este
+óke2r1ékné
+óke2rig
+ó2k1e2rő
+óke2r1üg
+óke2sz
+ók1esze
+óke2t
+ók1ete
+2ókev
2ókez
+ó2k1é2l
+2ókém
2ókény
+2ókép.
+2óképb
2óképe
+óké2p1e2l
+2óképé
2óképl
2óképn
+2óképpel
+2óképr
2óképt
2óképz
+ó2k1ér.
+2ókérd
+2ókére
2ókéré
2ókérő
2ókés
-ó1k2hi
-2ókie
+ó2k1étt
+ók1étv
+ók1gr
+ók2hiá
+2ókia
+2ókiá
+2ókic
+2ókie2
+2ókié
+2ókif
+óki2g
+ók1iga
+ó2k1igé
+2ókií
+2ókij
+ók1ill
+2ókim
+ók1imi
+2ókinc
2ókine
-ók1int
+ó2k1int
2ókiny
-ók1iro
-2ókomm
+2ókio
+ó2k1isk
+ó2k1ist
+2ókisz
+2ókit
+2ókiv
+ók1i2va
+ók1k2r
+ók2lim
+ó1k2lí
+2ó1k2ló
+2ó1k2lu
+2ókock
+2ókoco
+2ókoe
+2ókoh
+2ókoll
+2ókomé
+2ókomf
+2ókomp
+2ókonc
+2ókonf
+2ókonj
+2ókons
+2ókont
+2ókony
+2ókonz
2ókoo
-2ókö
-ó1kraj
-ó1k2ré
-ók2ri
-ó1k2ro
+2ókop
+2ókorá
+óko2r1á2s
+2ókorb
+2ókore
+ó2k1org
+2ókori
+2ókorl
+2ókorm
+2ókorn
+2ókoro
+2ókorr
+2ókors
+2ókoru
+ó2k1oszl
+2ókód
+ók1ó2l
+2ókór
+ó2k1óv
+2óköl
+ók1ö2lé
+ók1ö2lő
+ók1örd
+ók1ötl
+ók1pl
+ók1pr
+ó1k2rá
+ók2reá
+2ó1k2rém
+ók2rét
+2ó1k2ri
+ó1k2rí
+ók2ron
+ók2ros
+2ó1k2rón
+ók1sk
+ók1st
+ó2k1ug
ó2kum
+2ókup
+2ókur
+óku2sz1ál
+óku2sze
2ókut
+2ókúr
+ó2k1üg
2ókül
2óküs
-ó2k1üz
-ól1aj
-ó2l1a2r
+ók1üzl
+2ó1k2vó
+ól1ajt
+óla2man
+óla2pa
+ó2l1a2pál
+óla2pol
+óla2p1osz
+ól1a2rá
+ól1azo
+ólá2b1út
+1ó2lál
ólás3s
-1ólb
-2óle
-ó2l1e2se
-ó2l1e2si
-ó2l1ér
-óli2óé
+ólá2sü
+ól1átl
+óleí2
+ól1e2se
+ól1e2sé
+ól1esh
+ól1esn
+ól1ess
+ól1est
+óle2ta
+ólete2
+óle2t1ev
+ó2l1érz
+ólé2tel
+ólé2tés
+óli2ako
+óli2am
+óli2s
+ól1iszo
+ól1ín
+óloma2
+ólo2m1al
+ólo2m1á
ólo2m1e
-ólo2mé
-ól1öl
-ólu2mi
-2ómag
-2óme
-ómen1k2
+ólo2mis
+1ó2lomr
+ó2l1osz
+ólóá2
+óló1sl
+óló1sp
+ólót2
+ó2l1öl
+ó2l1ör
+ó2l1ös
+ó2l1ö2z
+ól1p2r
+ólu2m1e
+ólus3s
+ólu2szá
+ól1üt
+ól1üv
+ólya2ga
+ólyag1g
+óly2á
+óm1abl
+ó2m1a2cé
+2ómagn
+óm1akn
+óm1all
+2óman
+2ómara
+2ómarc
+ómaren2
+2ómarh
+2ómark
+ómas2
+óma1sp
+2ómass
+2ómate
+óm1a2to
+ó2m1au
+2ómax
+2ómág
+óm1áll
+2ómárk
+2ómárt
+2ómáz
+óm1b2r
+óm1e2gy
+ó2men.
+2óméd
+2ómél
+óm1éle
+ó2m1ép
2ómére
2óméré
+2ómérg
+2ómérk
2ómérn
-2ómét
-2ómi
+2ómérő
+2ómérs
+2ómérté
+ómiac1
+ómi2as
+ó2m1i2b
+ómi2g
+ó2m1igé
+2ómi2k
+óm1iko
+2ómin
+ó2m1i2ono
+ó2m1i2ont
+ó2m1i2p
+2ómis
+ó2m1isk
+ó2m1ist
+ómi2sz
+ó2m1i2z
+2ómod
+2ómog
+2ómoh
+ó2m1ola
+ó2m1old
+2ómond
+2ómoni
+2ómono
+2ómont
2ómor
+2ómos
+ó2m1osz
+2ómot
+ó2m1ox
2ómoz
-2ómó
-2ómű
+óm1öt
+óm1őr
+óm1pr
+óm1üt
+óm1üz
+óműt2
+2ónad
2ónag
-óna2ké
-óna2kü
-ó2n1al
+óna2kás
+óna2k1e2
+óna2kol
+ón1alj.
+ón1aljak
+ón1aljá
+ón1aljo
+ón1alju
+2ónap
+óna2pa.
+óna2pá
+ó2n1apába
+óna2pe
+ón1arc
+ó2n1asp
+ón1aszt
+óna1t2
+2ónav
+óná2l
ó2n1áll
-ón1e2d
-2óné
-ón1o2x
-2ónö
+ó2n1álo
+ónás1s
+ón1br
+óne2d
+ón1ez
+1ó2néé
+2óném
+ón1épí
+1ó2néra
+ón1érc
+ó2nérd
+1ó2néró
+óné2v1á
+2ónéz
+óni2g
+ó2n1igé
+ó2n1ist
+ón1odv
+1ó2nokul
+2ónor
+ón1ox
ón1ön
+ó2n1ör
ón1öt
-ónus3s
-ó2n1ut
-ó2n1ü2
+ónőé2h
+ón1pr
+ó2n1u2t
+ón1ür
+2ónya
+2ónye
2ónyil
-2ó1o2
-ó1ó2
-2ó1ö2
+2ónyitá
+2ónyitó.
+2ónyí
+2ónyo
+2ónyu
+2ónyú
+ó1o
+óo2dú
+óo2ka
+óo2ká
+óo2k1i2
+óo2ku
+óo2la
+óo2li
+óo2pe
+óo2ra
+óo2ri
+óo2ro
+óo2vi
+óo2xi
+ó1ó
+óó2la
+óó2lá
+óó2li
+óó2lo
+óó2ra
+óó2ri
+óó2sá
+óó2vá
+óó2vo
+óó2vó
+ó1ö
+óö2bö
+óö2ko
+óö2kö
+óö2lé
+óö2lő
+óö2rö
+óö2ve
+óö2zö
ó1ő
-2ópa
-óp1a2rá
-2ópá
-ó1p2l
-ó1p2ré
-ó1p2ro
-ó1p2ró
-ó2raa
-1ó2rab
-1ó2ral
-2órád
-1ó2ráé
-órá2g
-ór1ágy
-1ó2ráh
-1ó2rár
-1ó2ráv
-2óre
-ó2r1e2g
-ó2r1e2l
-óre2s
-ór1ese
-ó2r1e2ti
+óő2re
+óő2ré
+óő2ri
+óő2rö
+óő2rü
+óő2sé
+óő2sö
+ó2p1a2da
+ó2p1alk
+óp1anal
+ó2p1a2no
+óp1ant
+ó2p1any
+óp1a2rán
+óp1áll
+ópcsa2p1
+ó2p1ef
+ó2p1e2g
+óp1elo
+ó2p1id
+óp1ind
+ó2p1i2o
+óp1i2rá
+ó1p2lak
+ó1p2las
+ó1p2lu
+ó2p1ob
+ó2p1o2la
+ópo2rad
+óp1óra
+ó1p2ri
+óp2rod
+óp2rop
+ó1prób
+óp1t2r
+ópus3s
+ó2p1új
+óp1üv
+ó2rabé
+ór1ace
+2órada
+óra2dat
+ó2raib
+ó2raié
+óra2iér
+ó2raih
+ó2raii
+ó2raij
+ó2raik
+óra2iké
+óra2iko
+ó2raim
+ó2rain
+ó2raip
+ó2rais
+ó2rait
+ó2raiv
+1ó2raje
+2órajo
+2órajz
+óra1kv
+ó2rala
+ór1alk
+ó2ramo
+ó2r1ani
+ór1ant
+óra1p2l
+ór1arc
+1órare
+óra1s2p
+ó2r1a2tom
+1ó2raü
+1óráén
+ór1ágg
+ór1á2gy
+1órákh
+1ó2ráki
+ó2r1ál
+1ó2rámé
+1ó2rámo
+1órámr
+ó2r1á2p
+órá2se
+2óráta
+ór1átv
+ór1br
+ór1ege
+ó2r1e2gy
+ó2r1e2le
+ór1ell
+ór1elm
+ó2r1elo
+ó2r1e2lő
+ór1elv
+ór1emb
+ór1eml
+ó2r1e2r
+ó2r1e2set
+ó2r1e2tá
+ó2r1e2té
+ó2rezü
+ór1é2je
ó2r1é2l
-ó2r1i2o
-ó2r1ism
-ór1ír
-2óro
-ó2r1o2ki
-ó2r1o2ko
-2órö
-ó2s1as
-ó2s1ál
-2óse
-ó2s1e2g
+ór1é2ri
+óré2vek
+ór1fl
+órhá2zot
+óri2aka
+óri2al
+ó2riási
+óriás3s
+óri2ch
+ó2r1id
+ó2r1int
+ór1i2onn
+ór1i2ono
+2órip
+ó2r1i2pa
+ó2r1i2si
+ó2r1isme
+2órit
+óri2z
+ór1izo
+ór1í2j
+ó2r1ír
+ór1í2z
+ór1kl
+órmé2s
+ór1o2ká
+ó3roké
+ór1o2ki
+óro2kok
+óro2koz
+ór1o2ku
+ór1okú
+ó2r1osz
+ó2r1o2x
+ó2r1óda
+óró2dáj
+órói2ko
+óró1p
+ór1ósá
+2óróz
+ó2r1ö2l
+ó2r1öml
+ó2r1ös
+ó2r1öt
+ór1őr
+ór1p2r
+ór1trá
+óru2mag
+óru2me
+ó2r1u2r
+óru2sab
+óru2san
+óru2se
+órus3s
+óru2sü
+óru2s3z
+ó2r1uta
+ó2r1ú2s
+ó2r1út
+ór1ün
+ór1ü2v
+ór1üz
+2ósabl
+ó2s1a2d
+ó2s1a2g
+ó2s1alj
+ós1alt
+ós1amn
+ó2s1apr
+2ósar
+ó2s1arcot
+ó2s1asp
+ós1ass
+ó2s1atl
+ó2s1au
+ósa2vo
+ó2s1ábr
+ó2s1áf
+óság1g
+ó2s1áll
+ós1á2lo
+ó2s1á2ro
+ós1áti
+2ósáto
+ós1bl
+ós1br
+óscsap1á2
+2óseb
+ós1e2gy
+2ósej
+ós1elj
+ós1elm
+ós1e2lő
+ós1els
+ós1elv
+óse2m
ós1emb
-ó2s1id
-ó2s1i2n
-ós1isk
-ós1k
-óskész1
+ós1emi
+ó2s1en
+óse2p
+ós1epo
+ós1erő
+ó2s1es
+ó2s1e2t
+ó2s1ez
+ó2s1é2l
+2ósém
+ós1é2ne
+ó2s1ép
+ó2s1ér.
+ó2s1érte
+2ósét
+ósé2táka
+ó2s1é2te
+ós1étk
+ós1étt
+ós1fr
+ó2s1i2d
+ósi2g
+ós1ige
+ósi2kerb
+2ósikl
+ós1ind
+ós1inf
+ósi2p
+ós1ipa
+ós1iro
+ó2s1isk
+ós1ist
+2ósík
+ó2s1ính
+ós1í2rá
+ós1í2ró
+ó1s2kat
+ós2kic
+óski2s
+ós1kl
+ós1kv
+ós2lag
+2óslá
+ó1s2ni
+2ósokas
+2ósokko
+2ósoks
+ós1oli
2ósor
-ó2s1os
-ósó2
-ós1ór
-ós1p2
-2óspe
-ós2pek
-ós2por
-óst2
-ó1s2tí
-2ó1str
-2ósu
-ó2s1ur
-ó2s1úr
-ósü2l
-2ósű
+ó2s1org
+ó2s1orj
+ó2s1orm
+ó2s1ott
+ó2s1ov
+ó2s1ó2r
+ó2s1ö2l
+ó2s1ös
+ó2s1öt
+ós1őr
+ó1s2pec
+2ó1s2pek
+2ó1s2pir
+ós1pl
+ó1s2pu
+ós1s2k
+ós1s2p
+ós3sze
+ós3szö
+2ó1s2tab
+ó1s2tad
+ó1s2taf
+2ó1stand
+2ó1s2tat
+2óstá
+ós2tább
+ó1s2tád
+ó1s2tát
+ó1s2tég
+2óstí
+ós2topo
+2óst2r
+ós1tré
+ós1tri
+ó1stru
+2óstú
+2ósug
+ó2s1u2r
+ó2s1u2t
+ós1úr.
+ós1ú2ri
+ós1úrn
+2ósül
+2ósür
+ó2s1üs
+ó2s1üz
+2ósűrí
2ósza
-ós3zac
+ó2s3zac
+ósza2k1ü
+ó2sz1a2lap
2ószá
+ószá2gol
+2ószed
+2ószeg
+ó2sz1e2gű
+2ószek
2ószel
2ószem
2ószen
+2ószer.
+2ószere
+ósze2r1e2pé
+2ószerk
+2ószerv
+2ószerz
+2ószez
2ószé
+ószé2n1é2
2ószi
+ó2szima
2ószí
-ósz2láv.
+2ószk
+ósz2l
+2ószob
+2ószoc
+2ószof
2ószol
+2ószon
2ószó
-ószóza2
2ószö
+ó2sz1ös
+2ósző
+2ószp
ós3zs
-ósz1th
-ószt2r
-ó1sz2v
-ót1a2d
-2ótag
+2ószt
+ó1sz2tá
+ószt2rá
+2ószú
+2ószü
+ó2sz1üg
+2ószűk
+2ószűré
+2ószűrő
+ó2s3zűrt
+ósz2v
+ót1adó
+2ótag.
+2ótaga
+óta2gal
+2ótagb
+2ótag1g
+2ótagi
+2ótagj
+2ótagk
+2ótagn
+2ótago
+2ótags
+2ótagu
+ót1ajk
+2ótalap
+2ótalá
+ót1alk
+ó2t1alm
+2ótan
+ót1anti
+2ótap
2ótar
-ót1áll
-2ótár
-2ótáv
-ótá2v1i2
-ótá2v1í2
-2ótec
-ót1e2g
-ót1ej
-2ótel
-2óten
-2óter
-2ótén
-ót1il
-ót1ing
-2ótí
-ót1í2v
-ótme2g1
-ót1orr
+ótas2
+ó2t1ass
+2ótat
+ót1a2ur
+2ótax
+2ótág
+ót1á2ga
+ót1ágg
+2ótáp
+ótára2d
+ótá2r1ada
+2ótáro
+2ótárs
+2ótávc
+2ótávi2
+ótá2v1ir
+2ótáví
+2ótávk
+ó2t1e2g
+ó2t1elh
+ó2t1e2lő
+ó2t1emb
+ó2terd
+ót1égé
+ó2t1é2ké
+óté2t1ö2
+ót1fr
+ó2t1i2d
+óti2g
+ó2t1igé
+ót1ill
+ó2t1im
+ó2t1ing
+ót1i2pa
+óti2sz
+ó2t1í2r
+ó2t1í2v
+ó2t1íz
+ót1kr
+ótlé2ke
+2ótoj
+2ótol
+ótol2l1a2d
+ót1oml
+2óton
+2ótor
ó2t1ors
2ótov
-2ótö
-ót2ré
-óttűz1
-2ótu
-ót1u2t
-2ótü
-ó1u2
-ó1ú2
-2ó1ü2
+2ótó.
+2ótón
+ót1öko
+ótőe2
+ót2rad
+ót2raf
+ót2rak
+ót2ran
+ót2rén
+ót2rik
+ót2ril
+ót2rió
+ót2rom
+ót1sl
+ót1sp
+ótsze2r1ep
+ótu2sze
+ót1ülé
+ót1ü2lő
+ót1üst
+ó2t1ü2v
+ótű2z3s
+ó1u
+óu2bo
+óu2ga
+óugrás1s
+óuj2j1a2da
+óu2ni
+óu2no
+óu2ra
+óu2sz
+óu2ta
+óu2tá
+óu2to
+óu2tó
+óu2tu
+ó1ú
+óú2jí
+óú2ré
+óú2sz
+óú2ti
+óú2to
+ó1ü
+óü2gy
+óü2le
+óü2lé
+óü2lő
+óü2nő
+óü2re
+óü2rí
+óü2rü
+óü2sz
+óü2te
+óü2té
+óü2tő
+óü2ve
+óü2ze
ó1ű
+óű2ző
+2óvad
+2óvag
+2óvaj
+2óvak.
+2óvaks
+2óvaku
+2óvaló
+2óvar
+2óvas
ó2vat
+2óvág
+2óvák
2óvál
-2óve
-2óvé
-1óvh
-2óvi
+2óván
+óvá2r1al
+óvárosi2h
+ó2vása
+1ó2vási
+ó2váso
+1ó2vásr
+1ó2váss
+1ó2vást
+2óváz
+óve2r1a
+óveri2
+óve2rip
óv1in
-1óvj
-1óvn
1ó2vod
-1óvt
-2óza
+ó2vom
+2óvon
+óza1d2
+óz1a2dá
+óz1a2dó
+2ózaj
+óz1akc
+óza1kr
+óz1akt
+óz1a2la
+óz1arc
óza1s
-óza2tak
-óza2t1al
-óza2t1e
-óz1e2m
-ó2z1é2
-ózi2a
-ó2z1i2n
+óza2t1a2l
+óza2tan
+óza2tál
+óza2tés
+óza2told
+óza2t1ü2
+2ózav
+ó2z1á2g
+óz1áll
+ó2z1á2ru
+ó2z1á2rú
+óz1bl
+1ózdi
+ó2z1e2g
+ó2z1el
+óz1em
+óz1erő
+ó2z1ex
+óz1ez
+ó2z1é2l
+ó2z1é2te
+óz1fl
+óz1fr
+ózhajói2
+óz1imp
+óz1ing
+ó2z1i2p
+ózi2s1e2
+ózi2sir
+ózis3s
+ózi2s3z
+ó2z1old
+ózo2n1a2
+ózo2n1á
+ózo2ni
+ózós2
+ózó1sp
+óz1őr
+óz1pr
+ózsa1k2
+ó2z3ser
+óz3sor
+óz3sz
+óz1t2r
+2ózuh
ó2z1u2r
-ó2z1ú2
-óz3zs
+ó2z1u2t
+óz1ú2s
+ó2z1út
+óz1ü2g
+óz1ül
+óz1ü2z
2ö.
ö1a
ö1á
-ö2b1á2
+öb1a2n
+öb1ál
+öb1á2r
+öb1át
öb2b1a2
-öb2bá
-öb2b1ez
+öb2b1á2
+öb2b1eg
+öbbe2l
+öb2b1ele
+öbbe2m
+öbb1eme
+öb2b1e2r
+öb2b1esz
+öbb1eve
+öb2bél
+öb2bid
öb2b1is
-öb2b1o
+öb2bí
+öb2b1ol
+öb2b1os
+öb2bot
öb2bó
+öb2bö
+öbbü2
+öb2b1ül
+ö2b1ef
ö2b1eg
ö2b1e2l
+ö2b1e2m
ö2b1e2n
-ö2b1ért
-öbme2
-ö2csé
-ö2d1a2
-ö2d1é2v
-ödfé2
-ö2d1is
-ö2d1í
-ö2d1o
-ö2d1ó2
-öd3zs
+ö2b1er
+ö2b1él
+ö2b1ér.
+ö2b1érté
+ö2b1érz
+öb1fr
+ö2b1i2d
+ö2b1ing
+ö2b1int
+1öbli
+1öblö
+öb1or
+öb1ón
+ö2böll
+1öböltő
+öc1aj
+öccs1a2
+öccs1i
+ö2c1ép
+ö2c1éve
+öc3he
+öc3hö
+öció2
+öc1őr
+ö2cs1a
+öcs1éj
+öcs1ék
+ö2cs1é2te
+ö2csiz
+öcs1izz
+öcs1ó
+ö2cs1ö2l
+öcs1ű2r
+öc3sz
+öd1a2l
+öd1a2n
+öd1ar
+öd1á2l
+öd1ár
+ö2d1ef
+öd1ell
+ö2d1em
+öd1e2vé
+ödé2m1o
+ödé2sa
+ödés3s
+ödé2s3z
+ö2d1é2ves
+öd1é2vén
+öd1é2vér
+öd1gr
+öd1íz
+öd1os
+öd1óc
+öd1ó2r
+öd1sp
+öd1u2s
+öd1új
+öd1ú2s
+ö2d1üv
+ö2d1űz
+öd3zá
+ödzáró2
öd3zu
ö1e
ö1é
-ö2g1a2
+öfés3s
+ög1ab
+ög1a2c
+ög1a2d
+ög1ag
+ög1a2k
+ög1a2l
+ög1a2n
+ög1ap
+ög1ar
+ög1as
+ög1a2t
+ög1áb
+ög1ág
+ög1á2l
+ög1á2r
+ög1át
+ög1dr
+ö2g1e2g
+ö2g1e2kéi
+ög1elb
+ö2ge2leme
ö2g1elf
+ö2g1elha
+ö2g1elm
+ö2g1elo
+ö2gemel
+ö2g1er
ö2g1esz
-ö2g1ev
+ög1e2vé
+ö2g1é2g
+ög1ékt
+ö2g1é2p
+ö2g1ér.
+ö2g1érs
+ög1érté
ögés3s
-ög3g
+ög1fr
ö2g1id
-ö2g1im
-ö2g1in
-ö2g1o
-ö2g1u2
+ö2g1i2m
+ög1inf
+ö2g1ist
+ö2g1iva
+ö2g1i2z
+ög1ín
+ög1ír
+ög1ív
+ög1kr
+ög1o2l
+ög1op
+ög1o2r
+ög1os
+ög1ó2r
+ög1öli
+ög1ölö
+ö2g1öv
+ög1pr
+ögre1p2
+ög1sk
+ög1sp
+ög1tr
+ög1ud
+ög1u2n
+ög1u2t
+ö2g1üg
+ö2g1üs
+ö2g1üt
+ö2g1üv
+ö2g1üz
+ö2g1űz
+ög3ya
ö1i
ö1í
-ö2k1a2
-ö2k1á
+öj2tél
+öj2t1o
+ök1ab
+ök1a2g
+ök1a2k
+ök1a2l
+ök1a2n
+ök1a2p
+ök1ar
+ök1as
+ök1a2t
+ök1au
+ök1a2v
+ök1ág
+ök1ál
+ök1á2p
+ök1á2r
+ök1át
+ök1áz
+ök1dr
+ö2k1e2d
+ö2k1e2g
+ö2k1eke
+öke2l
+ök1ela
+ök1ele
ök1elh
+ök1elm
+ök1eln
+ök1elő
+ök1elv
ö2k1e2m
-ö2k1érté
+öke2né
+öken1s
+ök1erd
+ö2k1e2resz
+ö2k1e2rő
+ö2k1es
+öke2vés
+ö2k1ez
+ö2k1ég
+ö2k1ékn
+ök1éks
+ök1é2les
+ö2k1ép
+öké2r1e2l
+öké2r1em
+ö2k1é2rez
+ö2k1é2rés
ökés3s
-ök1ész
-öki2
-ö2k1id
-ö2k1if
-ö2k1im
+ö2k1é2te
+ö2k1é2ve.
+ö2k1é2vek
+ök1é2vet
+ök1fr
+ök1gl
+öki2d
+ök1ide
+ök1ido
+öki2g
+ök1iga
+ö2k1igé
+ö2k1ikt
+ö2k1i2na
+ök1ind
+ö2k1ing
+ö2k1int
+ö2k1i2o
+ö2k1i2p
+ö2k1iro
+ö2k1is
+ö2k1iz
+ök1íj
+ö2k1ír
ök1ív
ök1íz
-ökma2
-ö2ko
-ökös3s
-1ökrö
-öksza2
+ök1kl
+ök1k2r
+1öklű
+ök1ok
+ök1old
+1ökoló
+1ökon
+ök1o2p
+ök1o2ro
+ök1orr
+ök1ors
+ök1o2v
+ök1ó2r
+ök1óv
+1ökör.
+ökö2rö
+ökőár1a2d
+ökőé2
+ök1pr
+1ökrös
+1ökrü
+1ökrű
+ök1sp
+ök1sr
+ökszi2l1
+ök1t2r
+ök1u2n
+ök1u2r
+ök1us
+ök1u2t
+ök1új
+ök1úr
+ök1út
+ö2k1üg
ökü2l
ö2k1ülé
-ö2l1a2
-ö2l1á
-öl2csá
-öl2cs1í
-öl2cso
+ö2k1ült
+ö2k1ü2t
+ö2k1ü2v
+ö2k1üz
+öl1a2d
+öl1ag
+öl1a2j
+öl1a2k
+öl1al
+öl1ap
+öl1a2r
+öl1au
+öl1a2v
+öl1á2g
+öl1ál
+öl1á2m
+öl1á2p
+öl1á2r
+öl1á2s
+öl1át
+öl1á2z
+öl1br
+ölcsa2l
+ölcs1á2p
+ölcs1á2r
+ölcs1ell
+öl2csev
+öl2csid
+öl2csiz
+öl2cs1ok
+ölcs1ol
+öl2csos
+öl2csüg
+öl2csül
öl2dab
-öl2d1a2l
-öl2dan
+öl2d1a2d
+öl2d1a2k
+öl2d1a2la
+öl2d1alj
+öl2d1alk
+öl2d1a2n
+öl2dap
öl2d1as
öl2d1á2
-öl2d1éh
-öld1ing
-öl2d1is
+öl2deg
+öl2dep
+öl2dev
+öl2d1éd
+öl2dél
+öl2d1ing
+öl2dip
+öl2d1o2r
öl2dos
-öl2dz
-öl1e2b
-öl1egy
+öl2d1ó2
+öldő2
+öl2dőr
+öl2dős
+öl1dró
+öl2dur
+öl2d3z
+1ö2l1e2b
+öle2gel
+öleg1g
ö2lel
-ö2le2m
-öl1eme
-öl1emé
-öl1eml
-öl1eng
ö2l1e2r
-ö2l1esz
+ö3l2e3sü
+öle2t1á2
+öle2t1el
+öle2to
+öle2t1u
ö2l1e2v
+ölé2d
+ö2l1éde
+1ö2léé
ö2l1é2g
-ölé2k
-öl1éke
-ö2l1é2l
-ölé2nyeg
+ö2l1é2kes
+ö2l1ékí
+ö2l1él.
+ö2l1é2le
+ö2l1é2lé
+ö2l1élh
+ö2l1é2li
+ö2l1élj
+ö2l1éln
+ö2l1éls
+ö2l1élt
+ö2l1élv
+ö2l1éme
+ö2l1é2neke
ö2l1é2p
ö2l1ér.
+ö2l1é2red
ö2l1é2rek
+ö2l1é2rezn
+ö2l1éré
ö2l1érh
+ö2l1é2ri
ö2l1érj
+ö2l1érk
+ö2l1érl
ö2l1érn
-ö2lérő
-ö2l1ért
-öl1f2
-öl2gya
-öl2gyá
-ö2l1id
+ö2l1érs
+ö2l1érte
+ö2l1érté
+ö2l1értü
+ö2l1é2rü
+ö2l1érv
+ö2l1érz
+ölés3s
+ö2l1é2tet
+öl1fr
+ölgyá2
+öl2gyer
+ö2l1i2d
+öli2g
+ö2l1iga
+ö2l1igé
+ö2l1igy
ö2l1ij
ö2l1il
+ö2l1im
+ö2l1i2n
+ö2l1i2p
ö2l1i2r
-ö2l1is
+ö2l1i2s
+ö2l1i2ta
+ö2l1itt
ö2l1iz
öl1í2r
-ö2l1o2
+öl1í2v
+öl1o2c
+öl1o2k
+öl1ol
+öl1or
+öl1o2s
+öl1ó2v
+ölö2ki
+ö2l1ökl
ö2l1öl
-ölös3s
+öl1önt
+ö2l1ör
ö2l1ö2v
-öl1p2
-ö2l1u2
-ö2lú
-ö2l1ült
+öl1őrl
+öl1őrö
+ölpárba2
+öl1p2r
+öl1sk
+öl1sr
+öl1st
+öl2t1ad
+öl2taj
+ölt1ala
+ölt1alj
+ölta2n
+öl2tid
+öl2til
+öl2tí
+öl1tro
+öl2tur
+öl1u2g
+öl1uj
+öl1u2s
+öl1u2t
+öl1új
+öl1ús
+ö2l1üd
+ö2l1üg
+ölü2le
+öl1ülté
+ö2l1ültö
+ö2l1ülve
+ö2l1üs
ö2l1üt
-1ölyv
-ö2m1a2
-ö2m1á2
-2ömb
-öm2b1a2
+ö2l1üv
+ö2l1üz
+ö2l1űz
+ö2ly1a2
+ö2ly1á
+öly1e2g
+ö2lyel
+öly2föl
+öm1a2d
+öm1a2g
+öm1al
+öm1a2n
+öm1a2p
+öm1ar
+öm1au
+öm1áb
+öm1ág
+öm1áh
+öm1ál
+öm1áp
+öm1á2r
+öm1á2t
+öm1áz
+öm2b1a2c
+öm2b1ak
+ömba2l
+öm2b1a2n
+öm2baz
öm2b1á
-ömbé2
+öm2bec
+ömb1ele
+öm2b1e2m
+öm2b1es
+öm2bék
+öm2b1i2d
+öm2bin
+öm2bí
+öm2b1os
+öm2b1ó2
öm2bú
-ö2m1eb
-öme2g1a
-ömeg1g
-ö2m1el
-ö2m1él
-ö2m1it
-ö2m1o2
-öm1p2
-ömpin2
-ö2m1u
-ö2n1a2
+öm2bür
+ö2m1e2b
+öme2g1a2
+ömeg1e2r
+öme2gesz
+öme2g1ék
+öme2gép
+ömeg3g
+öm1egy
+ö2m1e2l
+ö2m1ember
+ö2m1emel
+ö2m1e2r
+öme2s
+ö2m1ese
+ö2m1este
+ö2m1ég
+ö2méhs
+ö2m1é2l
+öm1é2nekb
+ö2m1é2neke
+ö2m1é2neké
+öm1é2nekh
+ö2m1é2nekk
+ö2m1é2nekr
+ömé2ny1ü
+ö2m1ép
+ö2m1ér.
+ö2m1érte
+ö2m1érté
+ömés3s
+öm1gr
+ömi2g
+ö2m1igé
+ö2m1in
+ö2m1i2p
+ö2m1i2ta
+ö2m1itt
+ö2m1izm
+ö2m1i2zo
+öm1í2z
+ömkész1
+öm1kl
+öm1kr
+ömlés3s
+1ömlöt
+öm1o2k
+öm1o2l
+öm1or
+öm1os
+öm1ó2d
+öm1ó2r
+ö2m1önt
+öm1p2r
+öm1sp
+öm1st
+öm1tr
+öm1u2g
+öm1uj
+öm1u2t
+ö2m1üg
+ö2m1ünn
+ö2m1üv
+ö2m1üz
+ö2m1űz
+ön1ab
+ön1a2d
+ön1a2g
+ön1a2j
+ön1a2k
+ön1a2l
+ön1am
+ön1a2n
+ön1a2p
+ön1ar
+ön1as
+ön1at
+ön1au
+ön1a2v
+ön1az
+ön1áb
+ön1ág
+ön1ál
ön1ám
ön1á2p
-ön1át
-2önc
-ön2ci
-ön1e2g
+ön1á2r
+ön1á2t
+önát1a2dó.
+önát1é
+ön1áz
+önbé2két.
+ön1bl
+ön2c1ál
+ön2ch
+ön2cő
+önc3ség
+önc3sz
+ön2cz
+ön2dab
+ön2dap
+önde2m
+ön2d1ér.
+ön2d1érn
+ön2d1érr
+ön2d1értő
+ön2d1or
+ön2d1ő
+ön2dz
+ö2n1eb
+ö2n1e2d
+ö2n1ef
+ö2n1e2g
ö2n1e2l
-ö2n1em
-ön1e2r
-ön1es
+ö2n1e2m
+öne2n
+ön1ene
+ö2n1e2r
+ö2n1es
ön1e2v
+ön1ex
+ön1é2g
+ö2n1éj
+ö2n1é2k
ö2n1é2l
-ön1é2p
+ö2n1é2p
+ö2nérd
+ön1éri
+ön1érl
+ön1érte
+ön1érv
+önés3s
ön1ész
-ö2név
-ön1év.
-ön2gyá
-öni2
-ön1ig
-ön1im
-ön1in
-ön1ir
-ön1is
+ö2n1éte
+ö2n1étt
+ö2n1év.
+ö2n1éves
+ön1évet
+ö2n1é2vér
+ö2n1é2vét
+ö2n1évv
+önfe2lem
+ön1f2r
+ön1g2l
+ön1g2r
+öngy1as
+ön2gyék
+öngy1ó2r
+2öngyö
+ön2győ
+ö2n1i2d
+ön1if
+öni2g
+ö2n1iga
+ön1ige
+ö2n1igé
+ön1ill
+ö2n1im
+ö2n1in
+ö2n1i2p
+ö2n1i2r
+ö2n1is
+ön1ita
+ö2n1i2z
+ön1íj
ö2n1ír
-önké2r1e
-ön2n1a2
+ö2n1íz
+ön2k1ag
+ön2k1any
+önk1áru
+ön2kát
+önk1olt
+ön2k1ú
+önkü2
+önmeg1g
+önna2k
ön2n1á
+önny1a2d
+önny1á
+önny1e2dz
+ön3nyú
+ön1o2d
+ön1o2k
+ön1op
ön1or
ön1os
+ön1ox
+ön1ó2c
ön1ó2r
-ön1ő2r
+ön1óv
+ön1öb
+ö2n1ör
+ö2n1ö2v
+ön1őr
+önő2re
+ön1őz
+ön1pl
+ön1pr
+ön1ps
+önségü2ké
+ön1s2p
+ön1s2t2
+önsz2
+ön2t1ell
+öntgen1n
öntös3s
-ö2n1u2
-ö2n1ú
-ön1üt
+1öntöz
+ön1t2ra
+ön1t2rá
+ön1t2ré
+ön1ud
+ön1un
+ön1u2r
+ön1u2s
+ön1u2t
+ön1új
+ön1ú2s
+ön1út
+ön1üd
+ö2n1ü2g
+ö2n1ür
+ö2n1ü2t
+ö2n1üz
ö2ny1a2
+ö2ny1á
+öny1d
+ö2ny1el
+ö2ny1id
+ö2ny1in
+ö2nyí
ö2ny1o
-öny2v1a2
-öny2vár
-önyves1
+ö2nyüz
+öny2vaj
+öny2v1a2l
+öny2van
+öny2v1á2r
+öny2v1e2g
+öny2v1er
+öny2v1esz
+öny2vev
öny2v1ég
+öny2vél
+öny2v1ér.
+öny2v1ill
+öny2v1í
+öny2v1o
ö1o
ö1ó
ö1ö
ö1ő
-öp1ép
-öpi2
-öp1ir
-ö2r1a2
-ö2r1á2
-2örb
-2örc
+öp1aj
+öp1a2l
+öp1ál
+öp1e2l
+öpe2nyá
+öp1e2r
+ö2p1ép
+öp1ö2lő
+ör1ab
+ör1a2c
+ör1a2d
+ör1a2g
+ör1aj
+ör1a2k
+ör1a2l
+ör1a2n
+ör1a2r
+ör1as
+ör1a2t
+ör1a2u
+ör1a2x
+ör1a2z
+ör1áb
+ör1á2c
+ör1á2g
+ör1á2l
+ör1á2r
+ör1á2s
+ör1á2t
+ör1br
+örcs1ál
+örcs1ell
+örcskész1
+ör2csos
2ördí
+ör1d2r
2ördü
-1ö2reg
+ö2r1e2c
+ör1e2dz
+ö2r1ef
öre2ga
-öre2gu
-ö2r1el
-ö2r1er
-ö2rég
+öre2g1ék
+ör1e2gy
+öre2j1á
+öre2k1e2sz
+öreké2
+ö2r1e2l
+ö2r1em
+ör1enc
+ö2r1e2p
+ö2r1e2r
+ör1e2se
+ö2r1e2tető
+ö2r1e2v
+ö2r1ex
+ö2r1ez
+ö2r1é2de
+ö2r1é2g
+ö2r1éj.
+ör1éks
ö2r1é2l
-ör1é2ri
-örés1s
-örfö2l
-ör2f1ölé
-2örg
+ö2r1éneke
+ö2r1ép
+ö2r1éré
+ö2r1é2ri
+öré2sel
+öré2t1e2g
+ö2r1étv
+ör1é2ve.
+ö2r1évk
+ör2fá
+ör2f1év
+ör2f1i2p
+ör2fis
+ör2f1os
+ör2főr
+ör1g2r
+ö2r1i2d
öri2g
ö2r1iga
-ö2r1in
-ör1i2p
-ö2r1ir
-ö2r1is
-ör1i2v
+ö2r1igá
+öri2k
+ör1iko
+ö2r1ill
+ö2r1im
+ö2r1ind
+ö2r1ing
+ö2r1inj
+ö2r1ink
+ö2r1int
+ö2r1inv
+ö2r1i2p
+ö2r1ira
+ö2r1i2s
+ö2r1i2ta
+ör1itt
+ö2r1ivá
+ör1i2zo
ö2r1ír
-ö2r1ív
-2örn
-ör2ny1a2
-ö2r1o
+ö2r1í2v
+ö2r1í2z
+ör1k2l
+ör2k1öltő
+ör1k2r
+örle2ta
+ör2l1in
+örny1a2l
+örny1a2n
+örny1as
+örnye2l
+örny1ele
+ör2ny1er
+ör2nyéj
+ör2nyés
+örny1í2r
+ör2nyó
+ör1ob
+ör1o2k
+ör1o2l
+ör1op
+ör1o2r
+ör1os
+ör1ó2r
2örög
-örös3s
-örösz2
-ör2t1a2l
-ör2t1í2
-ö2r1u2
-ö2r1ú2
+örö3g2e
+1örömü
+ö2r1önt
+ö2r1ör
+ö2rössze
+ö2r1ösz
+örpe1t2
+ör1s2p
+ör1s2v
+örta2r
+örtá2v1
+ör2t1éks
+örté2l
+ör2t1élé
+ör2t1élő
+ört1érne
+örté2sz
+ör2tív
+ör2t1ok
+ör2top
+ör1ud
+ör1uj
+ör1u2n
+ör1u2r
+ör1u2s
+ör1u2t
+ör1új
+ör1úr
+ör1ú2t
+ö2r1üd
+ö2r1ü2g
+örü2l1ék
+ö2r1ür
+ö2r1üs
+ö2r1üt
+ö2r1ü2v
+ö2r1üz
1örv.
-ör2zs1a
-ör2zs1á
-ö2s1a2
-ö2s1á2
+örva2s
+1örvb
+1örvek
+1örvem
+1örvet
+1örvéb
+1örvéh
+1örvév
+1örvh
+1örvn
+1örvr
+1örvt
+1örvü
+1örvű
+1örvv
+örz4s
+ör2zs1á2
+ör2zs1e2l
+ör2zsid
+ör2zsin
+ör2zsir
+ör2zs1í2
+ör2zs1o
+ör2zsó
+ör2zsu
+ör2zsú
+ös1a2g
+ös1al
+ös1ár
ö2s1el
-ö2s1em
öses3s
ö2s1ez
-ösi2
-ö2s1in
-ö2s1iz
-ös1k
-ö2s1o2
-ö2s1ó2
-ös1őr
-össz1ál
+ösié2
+ö2s1i2p
+ös1k2r
+ös1o2l
+ös1o2r
+összá2r
+1összeg
+össz1emb
+1összes
ös3szí
-ö2s1üg
-ös1ü2v
-öszt1an
-ösz2t1el
-öt1a
-öt1á2
+öst1arc
+ö2s1ü2v
+ö2sz1a2
+ösz1e2r
+öszi2s
+ösz1isz
+ö2sz1o2
+ö2sz1ő
+ösz2t1ell
+öt1ab
+öt1aj
+öt1a2k
+öt1a2l
+öt1am
+öt1as
+öt1a2t
+öt1áb
+öt1ág
+öt1ál
+öt1ár
+öt1á2s
+öt1eké
öt1e2m
-öte2z
-öt1eze
-öt1ér
-öt1é2v
-1ötf
-2öth
-1ötk
-1ötm
-öt1ó2
-ö2tön
+öt1ep
+öt1es
+öte2t1a2
+öte2tel
+öte2u
+öt1e2v
+öt1e2z
+ötélé2
+öté2lék
+öté2l1o
+öt1érté
+öt1érz
+ötés3s
+öt1é2ves
+öt1fl
+öt1fr
+öt1gr
+öt1i2r
+öt1í2v
+öt1kr
+1ötlet
+ötle2t1á
+1ötlé
+öt1ok
+öt1ol
+öt1or
+öt1os
+öt1ó2r
+ö2tödb
+1ö2tödd
+1ö2tödne
+1ötödöt
+1ö2tödr
+1ötödü
ö2tös
-öt2t1á2
-öt1u
-ötü2
-öt1ül
-ötve2g
-ötvé2nyé
+ötőa2
+ötőe2
+ötőé2
+öt1pr
+öt1sc
+öt1st
+öt2t1a2c
+öt2tar
+öt2t1as
+öt2t1ál
+öttá2r
+ött1erk
+ött1érte
+öt2t1ut
+öt1uj
+öt1un
+öt1u2t
+öt1ü2l
+ötve2n1ez
ö1u
ö1ú
ö1ü
ö1ű
-1öv.
+öv1ab
+öv1ak
+öv1á2r
+öv1e2dz
+öve2g1a2
+öveg1és
öveg1g
-övis1s
-1övn
-1övv
-ö2z1a2
-ö2z1á2
-ö2z1eb
+öve2go
+öv1e2r
+öve2t1a2
+öve2teg
+öve2t1é2l
+öve2to
+öve2t1ú
+övetü2l
+öve2t1ülé
+ö2vé.
+öv1ég
+öv1é2j
+övé2nyel
+övé2nyer
+övé2nyö
+övé2sza
+övé2szá
+övé2szer
+övé2szo
+övé2szö
+övé2szül
+övi2dá
+ö2vih
+övis3s
+ö2viv
+öv1or
+öv1ó2d
+öv1ölt
+övőrés3s
+öv1ut
+öz1ab
+öz1a2c
+öz1a2d
+öz1a2j
+öz1a2k
+öz1a2l
+öz1a2m
+öz1a2n
+öz1a2p
+öz1a2r
+öz1at
+öz1au
+öz1az
+öz1á2g
+öz1ál
+öz1á2m
+öz1á2p
+öz1á2r
+öz1á2t
+özát1é
+öz1d2r
+ö2z1e2b
+ö2z1e2d
+öze2gel
ö2z1egés
-ö2zellá
-ö2z1em
+özegész1
+ö2z1e2gy
+ö2z1ela
+öze2leme
+ö2z1e2m
+öz1eng
+öz1ent
+öz1epr
ö2z1er
-ö2z1e2s
-öz1e2v
+ö2z1es
+öze2t1é2k
+özető2
+öze2t1őr
+ö2z1e2v
+ö2z1ég
+ö2z1é2je
+özé2k1e2l
öz1élel
öz1é2let.
-özé2pem
-öz1é2pí
+öz1é2lé
+öz1élm
+öz1élt
+özé2m
+öz1éme
+özé2p1a
+özé2p1el
+özé2p1em
+özé2pí
+öz1épít
+özé2p1o
+ö2z1ér.
+ö2z1érb
ö2z1érd
+ö2z1érh
+ö2z1é2ri
+özér2t1e2h
+ö2z1értele
+ö2z1érté
+ö2z1értő
+ö2z1érv
+ö2z1érz
öz1étk
-ö2z1i2g
+öz1fr
+özi2g
+ö2z1iga
+özigaz1
+ö2z1igá
+ö2z1igé
+ö2z1igy
+ö2z1i2ko
+ö2z1ikt
+ö2z1ill
+ö2z1i2m
+ö2z1inf
+ö2z1ing
+ö2z1inp
ö2z1int
-ö2z1i2r
+ö2z1inú
+ö2z1inv
+ö2z1ira
+öz1irá
+ö2z1i2ri
+öz1iro
+ö2z1iró
+öz1isko
+ö2z1ism
+ö2z1isp
+ö2z1i2sz
+ö2z1iz
öz1ír
-özme2
-ö2z1o2
-özok1
-ö2z1ó2
-öz1p2
-ö2z3s
-ö2z1u2
-ö2z1ú2
-öz1ü2g
-öz1ü2z
-ö1zy
+öz1íz
+özmeg1g
+öz1ob
+öz1o2k
+öz1ol
+öz1op
+öz1os
+öz1ov
+öz1ó2h
+öz1ón
+1özönt
+ö2z1ö2r
+öz1össz
+ö2z1öv
+özőa2
+özőe2r
+öz1őr.
+öz1őrk
+öz1ő2rö
+öz1pl
+öz1p2r
+öz3sa
+öz3sá
+öz3se
+öz3sé
+öz3s2k
+öz3so
+öz3s2p
+öz3sú
+öz3sz
+öz1t2r
+öz1ug
+öz1u2n
+öz1ur
+öz1ut
+öz1ú2r
+öz1út
+ö2z1üd
+ö2z1ü2g
+öz1ünn
+ö2z1üt
+ö2z1üv
+ö2z1ü2z
+öz3zs
2ő.
ő1a
-őa2c
-őa2dan
-őa2dati
+őa2da
őa2dá
-őa2dok
-őa2dot
+őadás1s
+őadá2sz
+őa2do
őa2dó
-őadókész1
-őa2g
-őa2j
-őa2k
-őa2l
-őa2n
-őa2p
-őa2r
-őa2t
-őa2u
-őa2z
-ő1á2
-őát1
-őba2l1
-őb2bis
-őb2bu
-ő1b2l
-ő1b2r
-ő2d1el
+őa2du
+őa2ga
+őa2gá
+őa2gi
+őa2gy
+őagyag1
+őa2ja
+őa2já
+őa2ka
+őa2ká
+őa2kó
+őa2la
+őala2g1
+őa2l1e
+őa2lo
+őa2mő
+őa2na
+őa2no
+őa2nó
+őa2nyá
+őa2pa
+ő2apar
+őa2pá
+őa2po
+őa2pó
+őa2pu
+őa2ra
+őa2rá
+őa2ri
+őa2ro
+őa2sz
+őa2to
+őa2ty
+őa2ul
+őa2ur
+őa2ut
+őautói2k
+őa2va
+őa2xi
+őa2zo
+ő1á
+őá2cs
+őá2gai
+őá2gak
+őá2gas
+őá2gat
+őá2gá
+őá2gé
+őá2gi
+őá2go
+őá2gú
+őá2gy
+őá2hí
+őá2la
+őá2lo
+őá2mí
+őá2po
+őá2ra
+őá2rá
+őá2re2
+őár1em
+őá2ri
+őá2ro
+őá2ru
+őá2rú
+őá2sa
+őá2sá
+őá2so
+őá2só
+őá2su
+őá2sz
+őá2ta
+őá2t1á2
+őá2t1e2
+őá2té
+őá2tí
+őá2tü
+őá2vó
+őba1p
+őb2le
+őb2lo
+őb2ri
+őb2ro
+őb2ró
+őb2ru
+őc1ap
+őc3cso
+őc1gr
+őc3há
+őc3hé
+őc3hö
+őc2lu
+ő2cs1ala
+őcsa2p1á2g
+ő2cs1é2j
+ő2cs1é2rü
+őcs1őst
+őcs1s
+őc3sz
+őd1a2da
+őd1a2dá
+ő2d1a2lap
+ő2d1au
+őd1ál
+őd1á2z
+ődea2
+ő2d1e2g
+őd1eld
+őd1elj
+őd1elk
+őd1e2lő
+őd1els
+ő2d1ép
+ő2d1érte
+ő2d1érz
+ődé2sa
+ődé2so
ődés3s
-ő2d1in
-őd2ró
-2ő1e
-őe2c
-őe2d
-őe2g
-őe2le
-őel1o
-őe2lőtte
-őe2n
-őe2p
+ődé2s3z
+ő2d1id
+ődi2g
+ő2d1iga
+őd1ind
+őd1int
+ő2d1isk
+ő2d1op
+őd1ost
+ő2d1ö2l
+ő2d1öv
+őd1őr.
+őd1ő2ré
+őd1őrn
+őd1őrr
+őd1őrt
+ő2d1őst
+őd1pr
+őd2ram
+őd2rap
+ő1d2rá
+ő1d2res
+ő1d2rog
+ő1d2ró
+ő1d2ru
+őd1st
+őd1t2r
+ő2d1üg
+ő2d1üz
+ő2d3zá
+ő1e
+őe2ce
+őe2cs
+őe2dé
+őe2dz
+őe2ge
+őe2gé
+őe2gy
+őe2ke.
+őe2kék
+őe2la
+őe2l1á2
+őe2lek
+őe2lemé
+őe2lemg
+őe2lemh
+őe2lemm
+őe2lemn
+őe2lemr
+őe2lemü
+őe2li
+őe2lo
+őe2lö
+őe2lőd
+őe2lü
+őe2ma
+őe2me
+őe2mé
+őe2mu
+őe2ne
+őe2pi
+őe2po
őe2re
-őe2rőb
-őe2rői
+őe2ré
+őe2rőd
+őe2rőé
+őe2rőh
+őe2rői.
őe2rők
-őe2rőne
-őe2rőnk.
-őe2rőr
-őe2rős
-őe2rőt
-őe2rőv
-őe2s
+őe2rőm
+őe2rőrő
+őe2rü
+őe2sé
+őe2si
+őe2ső
+őe2ta
+őe2te
+őe2ti
+őe2un
+őe2vé
+őe2vi
+őe2vo
+őe2vő
+őe2ze
ő1é
-őé2g
-őé2l
-őé2p
+őé2de
+őé2et
+őé2ge
+őé2gé
+őé2gi
+őé2gő
+őé2hem
+őé2hes
+őé2ji
+őé2ke
+őé2ké
+őé2kí
+őé2lé
+őé2lő
+őé2lű
+őé2nekb
+őé2neke
+őéne2kest
+őé2neké
+őé2nekk
+őé2nekr
+őé2pí
+őé2pü
+őé2rem
+őé2ren
+őé2rez
+őé2ré
őé2ri
-őé2te
-ő1f2r
-őga2z1
-őge2o
+őé2tek
+őé2va
+őé2ve.
+őé2vek
+őé2ves
+őé2vet
+őé2véb
+őé2vén
+őé2vér
+őé2vét
+őé2vi
+őfa2l1a2d
+őf2la
+őf2le
+őf2lo
+őf2ló
+őf2lö
+őf2lu
+őfo2kál
+őfo2kér
+őfo2kin
+őf2ra
+őf2rá
+őf2ri
+ő1f2ro
+őf2rö
+őgé2p1e2l
+őgépü2l
+őgép1ülé
+őgés3s
+őg2le
+őg2ló
+őg2nó
+ő2g1ö2l
+őg2ra
+őg2rá
+őg2ri
+őg2ró
+őguba2
+őgy1a2la
+őgy1art
+ő2gyeg
+ő2gyel
+őgy1e2lő
+őgy1elv
+őgy1elz
+ő2gyin
+ő2gy1ör
+őhangá2
+őhan2g1ára
ő1i
ői2dea
ői2deá
ői2deg
-ői2dé
+ői2deo
+ői2dén
+ői2do
ői2dő
-ői2g
+ői2ga
+ői2ge
+ői2gé
+ői2gy
+ői2ko
ői2ma
ői2má
-ői2na
-ői2p
+ői2mi
+őim1p2l
+ői2nas
+ői2on
+ői2pa
ői2ra
+ői2rá
+ői2ri
ői2ro
-ő2isz
-ői2ta
+ő2iru
+ői2si
+ői2sz
+ői2tala
+ői2talá
+ői2talé
+ői2tali
+ői2tall
ői2va
-ői2z
+ői2vá
+ői2vó
+ői2zé
+ői2zo
ő1í
-őí2r
-őí2v
-őjob2
+őí2gé
+őí2ja
+őí2ra
+őí2rá
+őí2ro
+őí2ró
+őí2ru
+őí2vá
+őí2ve
+őí2vé
+őí2vi
+őí2vükb
+őí2vüke
+őí2vün
+őí2vű
+őí2ze
+őí2zü
+őí2zű
+ője2gy1á2
+őjob2b1ol
+őjob2b1ó
+őjogá2szi
+őke1k2
+őke1p2
+őkes2
+őke1sp
+őke1st
+őké2p1el
+őké2s1el
+őkiá2
+őkie2
+ők2la
+ők2le
+ők2li
+ők2lí
+ők2ló
+ők2lu
+őkóro2
+ő1k2ra
+ő1k2rá
+ő1k2reá
+ők2red
ő1k2ré
-ő1o2
-ő1ó2
-ő1ö2
-ő1ő2
-ő1p2
-őpo2ra
-őr1al
-őr1at
-1ő2r1a2u
-1ő2r1ál
-őr1á2p
-őr1ár
-őr1át
-őr1e2ge
-őr1e2gé
+ő1k2ri
+ő1k2rí
+ő1k2ro
+ő1k2ró
+ők2va
+őleí2
+őlés3s
+őlőé2r
+őlőt2
+őlő1tr
+őma2gár
+őmag1g
+őma2g1ó2
+őműé2h
+őműé2n
+őműt2
+ő2n1e2ke
+őn1ems
+őnéve2
+őnév1es
+ő2ny1a2d
+őnya2g
+ő2ny1aga
+őny1a2la
+őny1ára
+őny1á2ro
+ő2nyát
+ő2nyef
+őnye2lem
+ő2ny1elh
+ő2ny1ell
+ő2ny1elo
+ő2ny1em
+ő2ny1élv
+ő2ny1ő
+ő2nyüz
+ő1o
+őo2áz
+őo2be
+őo2dú
+őo2ká
+őo2k1i2
+őo2kí
+őo2ko
+őo2la
+őola2j1á2r
+őola2je
+őo2pe
+őo2rá
+őo2ri
+őo2ro
+őo2so
+őo2ve
+őo2xi
+ő1ó
+őó2ce
+őó2ha
+őó2no
+őó2nu
+őó2ra
+őó2rá
+őó2ri
+őó2va
+őó2vó
+ő1ö
+őö2bö
+őö2dé
+őö2ko
+őö2kö
+őö2lé
+őö2lő
+őö2na
+őö2re
+őö2rö
+őö2ve
+őö2vé
+őö2vi
+őö2vö
+őö2zö
+ő1ő
+őő2re
+őő2ré
+őő2ri
+őő2rö
+őőr2s1égb
+őőr2s1égn
+őő2se
+őő2si
+őpárba2jo
+őp2la
+őp2le
+őp2lé
+őp2ne
+őponc1
+őpo2ral
+őp2re
+őp2ré
+őprés1s
+őp2ri
+őp2ro
+őp2ró
+őp2sz
+őr1a2dó
+őr1a2gá
+őr1agg
+őr1ajk
+őraj2t1ól
+őr1akc
+ő2r1a2l
+őral1e
+őra2n
+őr1any
+őr1ap
+ő2r1a2r
+ő2r1a2s
+ő2r1at
+ő2r1au
+ő2r1a2z
+1ő2r1áb
+őrádi2ók
+őr1ágy
+őrá2k1e
+ő2r1á2l
+ő2r1á2p
+őr1á2ru
+1őrbí
+1őr1bl
+1őr1br
+2őrea
+őreá2li
+őree2
+őre2get
+őr1e2gye
őrei2g
-őr1elv
-őrendő2
+ő2r1ekc
+ő2r1ekh
+őre2lem
+őr1elh
+ő2r1ell
+őr1e2lőa
+őr1els
+őr1elt
+ő2r1elv
+ő2r1emb
+őr1eml
+őren2d1ő2
+őr1enz
+őreo2
+őre1prog
+ő2r1e2ső
+őreu2
+őreü2
+ő2r1ex
+1őrezr
+1ő2r1ég.
+1őrégn
+1őr1égt
+1ő2r1ékh
+őr1ékné
+őr1éks
ő2r1é2l
-őr1iga
-1ő2ril
-őr1ing
-ő2r1i2p
-ő2r1ir
-ő2r1o2l
-őron2g
-1ő2r1or
-őr1osz
-1őrör
-őrös1s
-ő2r1öv
+őr1épü
+ő2r1é2ri
+őré2sa
+őré2sza
+1ő2réü
+őr1é2ve.
+őr1é2vek
+őr1fl
+1őrfő
+őr1fr
+őr1g2r
+ő2r1i2d
+ő2r1if
+ő2r1i2ga
+ő2r1i2gá
+őr1iha
+őr1ill
+ő2rim
+őr1imi
+őr1i2na
+őr1ind
+ő2r1inf
+ő2r1int
+őr1i2pa
+őri2s1á
+őr1ivá
+őr1i2zé.
+ő2rizg
+őr1izm
+őr1i2zo
+őr1ír
+1őrjö
+őr1k2l
+őr1k2r
+1őrlö
+ő2r1okt
+őr1old
+1ő2r1o2li
+őr1oll
+ő2r1or
+ő2r1osz
+ő2r1ó2r
+ő3rög
+1ő2rökü
+ő2röl
+1őrömü
+őr1öng
+ő2r1ör
+ő2r1össze
1ő2r1őr
-őr1p2
-1őrse
-őrt2
-1őrti
-1őr1tr
-őr1u2t
-ő2rül
+ő2r1ő2s
+1őrősr
+ő2r1ő2z
+őr1pl
+őr1p2r
+1őr1p2s
+1őrs.
+őr2s1ál
+1őrsí
+1őrsö
+őr1s2pe
+őr1spi
+őr1srá
+őrs3s
+őr1sz2
+1őrszen
+őr2s3zöm
+1őr1t2r
+1ő2r1un
+1ő2r1u2r
+őr1utá
+ő2r1új
+őr1úr
+ő2r1út
+ő2r1üd
+őr1üld
+1ő2rüle
+ő2r1üs
+ő2r1üt
+ő2r1üz
+2őrzősö
ő2s1ad
-ős1a2g
-ő2s1ak
-ő2s1a2l
-ős1a2n
-ős1ará
-ősa2v
-ő2s1ál
-ős1egy
-ős1e2l
-ő2s1em
-ő2s1ep
-ős1erd
-őse2s
-ős1ese
-ő2sib
-ő2s1id
-ős1iz
+ő2s1a2g
+ős1ajtób
+ő2s1ajtók
+ősa2n
+ős1ana
+ősa2p
+ős1arc
+ős1ass
+ős1au
+ő2s1áb
+ő2s1á2g
+ősá2l
+ős1áll
+ős1ára
+ős1árv
+ős1dr
+ős1e2d
+ő2s1e2ge
+ő2s1e2gy
+ős1elm
+ős1e2lő
+ős1elv
+ő2s1e2m
+őse2n
+ős1ene
+őse2p
+ős1epi
+ős1epo
+ős1e2rej
+ős1erő
+ős1ess
+ős1esz
+ős1etn
+ő2s1e2v
+ő2s1ez
+ősé2g1e2l
+ő2s1éger
+ősé2gés
+ő2s1ék
+ő2s1é2l
+ős1ép
+ős1fl
+ős1fr
+ős1gn
+ős1gr
+ő2s1i2d
+ő2s1if
+ősi2g
+ős1iga
+ős1i2ma
+ős1i2má
+ős1imi
+ős1inf
+ős1ing
+ős1int
+ő2s1i2pa
+ős1i2ra
+ős1ist
+ős1i2sz
+ő2s1i2z
+ősí2ka
+ős1í2ró
+ős1í2z
ős2kál
-ős1okt
-ős1p2
-ős2pe
+ős1kl
+ős1k2r
+ős1kv
+ős2lat
+ős2nit
+ős1ob
+őso2k
+ős1oko
+ő2s1o2l
+ő2s1op
+ő2s1org
+ő2s1os
+ős1óc
+ős1óri
+ő2s1ö2l
+ős1önz
+ősö2r
+ős1örd
+ős1öre
+ős1örö
+ős1örv
+ő2s1ö2z
+ős1őr
+ős1ő2s
+ős2pec
+ős2pek
+ős1p2l
+ős2pór
+ősp2r
+ős2rác
+ős1sk
+ős1s2p
+ős1s2t
őssz2
+ős3sza
+ős3szá
+ős3szeg
+ős3szek
+ős3szell
+ős3szem
+ős3szen
+ős3szer
+ős3szes
+ős3szék
+ős3szén
+ős3szf
+ős3szi
+ős3szí
ős3szl
+ős3szo
+ős3szó
+ős3szö
+ős3sző
+ős3szu
ős3szü
-őst2
-ő1str
-ő2s1ür
+ős2tad
+ős2tat
+ő1s2tát
+ő1s2teri
+ős2tég
+ős2til
+őst2r
+ős1tre
+ős1un
+ősu2t
+ős1uta
+ős1úr.
+ős1ú2s
+ősza2k1e
+ősza2k1ü
ősz1e2lő
+2őszerk
+ő2szerő
+ősz1est
+őszi2l1i2
+ősz1ill
+ősz1ist
+őszö2l
+ősz1ölé
+ősz1ölő
+ősz1ölt
+ős3zse
+ősz3sir
őszt2
-őt1áll
-őt2ra
-őt2ri
-őt2t1o
+ő2s3zűrű
+őtermo1
+őtermosz2
+őtes2t1ő
+őtol2l1a2d
+ő1t2ra
+ő1t2ré
+ő1t2ri
+őt2ro
+ő1t2ró
+őttes3s
+őt2tés
+őtt1int
+őt2t1o2
+őt2t1u2
+őtűfé2
+őtűfél1
ő1u
-őu2r
+őu2go
+őu2ni
+őu2ra
+őu2rá
+őu2ru
+őu2ta
+őu2tó
+őu2tu
ő1ú
-őú2r
-őú2s
+őú2jo
+őú2ré
+őú2ri
+őú2ro
+őú2sz
+őú2té
+őú2ti
+őú2to
ő1ü
-őü2g
-őü2r
-őü2t
-őü2v
-őü2z
+őü2dü
+őü2ge
+őü2gy
+őü2le
+őü2re
+őü2rí
+őü2sz
+őü2te
+őü2té
+őü2ti
+őü2tö
+őü2tő
+őü2ve
+őü2vö
+őü2ze
+őü2zé
ő1ű
+őű2ré
+őű2ri
+őű2rö
+őű2zé
+őű2ző
+ővasfé2
+ővasfél1
+ővár1al
+őve2r1a
+2ővet
+ővé2res
+ővé2ret
+őz1abs
+ő2z1a2d
őz1a2g
+ő2z1ak
+ő2z1a2l
+ő2z1a2t
+ő2z1au
+ő2z1ál
+őz1á2t1e2
+őz1bl
+őzeg1g
+őze2g1i
+őz1e2gy
+1ő2zekn
őz1elo
-ő2z1er
-őz3sug
+őz1els
+őz1elv
+ő2zem
+őz1emb
+őz1e2mel
+ő2z1e2r
+őze2t1a2
+őze2t1eg
+őze2t1el
+őze2ter
+őze2t1o
+ő2z1ér.
+őzé2rem
+ő2z1é2ri
+ő2z1érl
+őz1érté
+1ő2zié
+ő2zi2g
+őz1igé
+ő2z1in
+ő2z1iz
+őz1k2r
+őz1o2k
+őz1ol
+őz1os
+őz1össz
+őzőa2
+őzőe2l
+őzőe2r
+őz1p2r
+őz3saj
+őz3sap
+őz3sát
+őz3sik
+őz3sis
+őz3s2t
ő2z3sü
őz3sz
-őzü2
-őz1üz
+őz1t2r
+őz1út
+őz1üg
+ő2z1üs
+ő2z1ü2z
+őz1ű2z
+2p.
1pa
-paá2
-pa2ce
+2p1abl
+pa2cem
pa2ch
-pa2dag
-pa2de
-pae2
-pa1g2n
+pa1cl
+pa2csú
+p1a2dag
+pad1ala
+pa2d1as
+pa2d1á2l
+pade2
+pa2d1el
+pa2d1em
+pa2d1id
+pa2d1iga
+p1a2dott
+pa2du.
+pa2dut
+pa2dül
+pae2r
+paé2r
+pa1fl
+pa1f2r
+pa2ga.
+pai2dé
+2p1ajtó
pa2kad
-pa2lap
-2p1alj
-pa2m1as
-pa2mur
+paka2r1ó
+pa2k1e2m
+pa2k1ér.
+2pakku
+pa1klu
+pa2k1ó2
+pa1k2ré
+2p1akta.
+pak2tal
+pak2t1e2l
+pak2t1es
+pak2t1e2v
+2p1akti
+pak2t1or.
+pak2t1orr
+pak2tos
+2palag
+pala2g1ú
+pa2lapí
+paláza2d
+palá2z1adá
+pa2l1é2l
+2p1alf
+2p1alg
+2p1alle
+2p1almá
+pal1ud
+pam1ass
+pa2m1ur
+pamu2ta
+pana2d
+pa2n1ag
pa2nal
-p1a2nya
+pan1ala
+pa2n1á2r
+panás1s
+pan1d2
+pang1g
+pa2n1il
+pan1kro
+p1anny
+pa2nol
+pans2
+pansz2
+pan1szt
+pa2nü
+2p1a2nya
+p1a2nyu
+pa2p1ad
+pa2p1a2pa
+papa2r
+pap1ara
+pa2p1aszt
+pap1áll
pa2p1il
-par1ágá
+pa2p1i2na.
+pa2p1i2p
+pa2p1o2ku
+pa2pö
+pap1p2
+pa2p1ur
+pa2p1u2t
+pa2pú
+2para.
+para2je
+par1a2la
+2parann
+2p1a2rany
+2pa2r1a2r
+pa2r1ágá
+pa2r1ágn
+pa2r1ágo
+pa2r1ágv
+2paráh
+2p1a2ráj
+par1áll
+2parár
+2paráv
2parb
+2p1arc.
+2p1arca
+2p1arcc
+2p1arch
+2parci
+2p1arco
+2p1arct
+2p1arcu
+2p1arcú
pa2r1el
+pa2r1é2l
+2parig
+2paril
+pa2r1ill
par1isk
-pa2r1ok
+par2k1a2l
+par2k1á
+par2kel
+par2k1ing
+par2kov
+par2kó
+par2kön
+par2k1ö2v
+par2k1ő2
+par2k1ü
+2paros.
+2parosi
+2paroso
+pa2rö
+pa2rő
2parr
-par2t1a2l
-par2tol
-pa2t1eg
-pat1ért
-pa2ul.
-pa2x
-2p1axi
+pars2
+par2tem
+par2t1ol
+par2t1ő2
+pa2r1ü2
+pa2rű
+past2
+pasz1alj
+pasz1alt
+pa2szas
+pat1ada
+patakö2
+pa2t1alk
+pat1anya
+pa2t1ara
+pat1álc
+pa2t1árk
+pa2t1e2g
+pa2t1ell
+pate2s
+pa2tél
+pa2t1ér.
+pa2t1érd
+pa2t1ére
+pa2t1érte
+pa2tid
+pa2t1int
+pa2tir
+2p1atka.
+2p1atkánk
+pa2t1old
+pa2t1olt
+2patombe
+pa2t1osz
+pa2t1otth
+pa2t1ut
+pa2tús
+patü2
+pa2t1üz
+2p1a2tya
+2p1a2tyá
+2paur
+pau2ra
+p1a2vat
+pa1wh
+2p1a2xi
1pá
+2p1á2bé
+2p1ábr
+2páca
+2pácá
+pá2c1e
+pácé2
+pá2c3h
+pá2c3só
+pá2csö
pá2csü
-pá2ga
-pá2gy
-p1állí
-p1álló
-pá2mí
-2pámn
+2p1ág.
+2p1á2ga
+2p1ágg
+2p1ágy.
+2p1á2gya.
+2p1á2gyac
+2p1á2gyad
+pá2gyaib
+pá2gyaid
+pá2gyaih
+pá2gyaik
+pá2gyaim
+2p1á2gyain
+pá2gyair
+p1á2gyakb
+pá2gyaké
+pá2gyaki
+p1á2gyako
+2p1á2gyakr
+pá2gyakt
+2p1á2gyal
+2p1á2gyam
+2p1á2gyan
+pá2gyast
+2p1ágyaz
+2p1á2gyáb
+2p1ágyál
+2p1á2gyán
+pá2gyátó
+2p1á2gyáv
+2p1ágyb
+2p1ágyc
+2p1ágye
+2p1á2gyé
+2p1ágyf
+2p1ágyga
+2p1ágygo
+2p1ágyh
+2p1á2gyi
+2p1ágyj
+2p1ágyk
+2p1ágyl
+2p1ágym
+2p1ágyná
+2p1á2gyos
+2p1á2gyö
+2p1ágyp
+2p1ágyr
+2p1ágys
+2p1ágyt
+2p1á2gyu
+pá2gyú
+2p1ágyü
+2p1ágyv
+2p1ágyz
+2p1ájt
+pála2
+pá2lab
+pá2lac
+2p1álar
+2p1áldo
+pá2le
+p1álla.
+2pállap
+2p1állí
+2p1állom
+2p1állv
+2pálmo
+pá2lü
+p2ály
+pálya1s
+2pámi
+2p1á2mí
pá2mu
pána2
+pá2naf
pá2n1am
-pá2n1e
-pá2ny1át
-pá2po
-2páram
-pá2r1ato
+pá2n1an
+pá2nar
+pá2n1as
+pá2nár
+pá2n1e2
+pá2nék
+pá2nil
+pá2nir
+pá2nis
+pá2ní
+pán1kré
+2pánkt
+pá2n1ó2
+pá2nö
+pá2nő
+pán1sz
+pánte2
+pán2tek
+pán2t1el
+pá2nü
+pá2ny1ad
+pá2ny1a2l
+pá2ny1a2n
+pá2nyar
+pá2nyat
+pá2nyau
+pá2nyaz
+pá2ny1e2
+pá2nyérd
+pá2nyim
+pá2nyö
+2p1á2po
+pár1adó
+2páras
+2páráé
+pár2d1a2
+pár2del
pá2r1e2
-pár2tak
+pá2r1i2p
+pá2rő
+pár1s2
+pár2t1ag
+2pártal
+párt1any
+pár2tari
pár2tál
-pár2tár
-pár2t1e
-pár2tér
-pá2rus
+párte2
+pár2t1el
+pár2tem
+pár2tes
+pár2tet
+pár2tél
+pár2t1ér.
+pár2t1é2te
+pár2tiz
+pár2tott
+pártö2
+pár2tök
+pár2t1ő
+pár2tus
+pártü2
+pár2t1üz
+pá2ruh
+pá2ruk
+páru2t
+pár1utu
+pá2rún
+pá2rü
+2p1á2sás
+pá2s1e
pá2sir
-pá2t1a
-2p1átm
+pá2ső
+pás3s
+pá2s1ü2
+2p1ásván
+pá2t1a2
+pá2tá
+pá2tel
+pá2t1e2m
+pá2tis
+2p1átka.
+2p1átkát
+2p1átkáv
+p1átlag
+2p1átló
+pá2t1or
+2p1átrak
+2p1átté
pá2t1uk
+pát1úrt
+pá2tü
+2p1átvét
pba2l1
-pci2ókér
-pd2
-p1dr
+pbé2r1e2l
+pb2lo
+pb2ra
+pb2ri
+pb2ro
+pci2ófo
+pcsa2p1á2g
+pcső2s1orr
+pda2l1ad
+pdal1an
+pda2leg
+pda2lel
+pda2l1es
+pda2lén
+pda2l1í2
+pd2ra
+pd2rá
+pd2ro
+pd2ró
1pe
-pea2
-2peci
-pe2dén
+pea2p
+pea2r
+peca1
+pec3c
+pe2cz
+pe2ed
+2p1eff
+pe1fl
+2p1e2gese
pegész1
-pe2is
-p1elemz
-2p1elk
-2p1elm
-2pelo
-pe2l1os
+pe1g2r
+2p1egz
+2p1e2ke.
+2p1e2kei
+pe1k2ré
+2pektr
+pe2lál
+pe2lár
+pe2lekt
+2pelemb
+2pe2lemek
+pe2lemet
+2p1e2lemé
+2p1e2lemg
+2p1e2lemh
+2p1e2lemi
+2p1e2lemk
+2p1e2lemm
+2p1e2lemn
+2pelemr
+2p1e2lemz
+pel1eró
+pele2t
+pel1ete
+2p1elgo
+2p1elha
+2p1elhel
+2peljá
+2p1elleb
+2p1elnev
+2p1elny
+pe2los
+2p1e2lö
+2p1e2lőa
2p1e2lőá
-2p1eltér
+2p1e2lőe
+pe2lőg
+2p1e2lőh
+pe2lőí
+2p1e2lőjá
+2p1e2lőjeg
+2p1e2lől
+2p1e2lőz
+2p1elren
+2p1elsö
+2p1eltá
+2p1elto
+2pelu
+2p1elv.
+2p1elvá
+pel2v1el
+2p1elven
+2p1elvh
+2p1elvi
+2p1elvo
+2p1elvű
+3pely
+2p1elz
2p1ember
2p1e2mel
-pe2mó
-2pene
-pen3ny
-pe2no
+2p1e2més
+2p1eml
+2p1ems
+2p1e2mu
+2p1e2ner
+2penged
+pen3ny.
+pen3nyb
+penny1ér
+pen3nyh
+2p1ennyi.
+pen3nyj
+pen3nyk
+pen3nym
+pen3nyn
+pen3nyr
+pen3nyt
+pen3nyv
pe2nya
-pe2po
-per1akt
-pe2r1él
+penyá2
+pe2ny1e2l
+pe2ny1e2r
+peo2l
+peo2p
+peó2r
+pe2pe.
+2p1e2pé
+pe1p2r
+pe2r1akt
+per1all
+pera1p2
+perc1c
+per2c1el
+per2c1in
+2perdő
+perec1c
+peregyez1
+p1e2rej
+pe2r1elk
+pe2r1e2lőf
+pe2r1e2lőké
+pere2mért
+per1evé
+2perfa
pe2rid
-per1int
+pe2r1il
+pe2r1i2na
+pe2r1i2ná
+pe2r1ind
+pe2r1ing
+pe2rí
+per1k2
+p2erl
+per1okt
pe2r1os
-pe2rox
-pe2ró
-pe2rö
-2p1e2rő
+pe2r1o2x
+pe2r1ó2r
+pe2rőd
+pe2rőf
+pe2rői
+pe2rőm
+pe2rőn
+pe2rőr
+2p1e2rős
+pe2rőt
+pe2rőv
+per1st
+persz2
pe2rú
-pe2sú
-pe2sz1á
+pe2r1ü2g
+perü2l
+per1ülő
+per1ült
+p2erz
+pe2s1ebbel
+pe2s1ebbő
+pe2sésig
+2p1e2sésű
+pe2sői
+pe1s2p
+2p1esszév
+pes2t1a2
+pes2t1er
+pe2szak
+pe2sz1ál
+pesz1ell
+pe2sz1elv
+pesze2m
+pe2szeme
pe2szu
-pe2sz1ü2
-2p1e2v
+pe2sz1ü2l
+pe2tal
+pe2t1a2n
+pet2á
+petet2
+2petete
+2peteté
+2p1e2tető
+2p1e2tika
+2petim
+2p1e2to
+pet2t1i
+pe2tűd
+pe2ug
+pe2vő
+2p1ezr
1pé
-2p1é2g
-2p1é2je
-péki2
-pé2kü
+pé2csu
+pédü2
+pé2d1ülé
+2pééb
+2pééi
+2péén
+2p1é2ge
+2p1é2gé
+pégés3s
+2p1é2hen
+2p1é2hes
+2p1é2het
+2p1éhs
+2p1éj.
+péje2
+pé2j1eg
+2p1é2ji
+2p1éjj
+pé2k1as
+pé2k1au
+pé2k1á2
+pé2k1er
+pé2k1ék
+pé2k1é2l
+péké2t
+pé2k1éte
+pé2k1i2n
+pé2kis
+2p1él.
+2p1élb
+pé2le.
+pé2lei
+pé2lek
+péle2l
+pél1ele
+pél1elmei
+pé2len
+pé2let
2p1é2lé
-2p1élm
-2p1élr
-2p1é2neke
+2pélm
+2p1éln
+2p1é2lő
+2p1élt
+2p1é2lű
+2p1élv
+2péneka
+2p1é2nekb
+2pénekd
+2p1é2neké
+2pénekf
+2pénekg
+2p1é2neki
+2pénekí
+2pénekj
+2p1é2nekk
+2p1é2nekn
+2p1é2nekr
+2p1é2nekt
+2p1é2nekü
+pé2ny1el
+pén2z1a
+pén2z1á2
+pén2zs
+pé2p1i2p
2p1é2pí
-pé2pü
+2pépü
+2p1érc
2p1érd
+2p1é2ré
+2p1érh
+pé2rig
+2p1é2rin
+2p1érm
+2p1érn
+2p1é2rő.
+2p1érr
+2p1érte
+2p1érté
+2p1értő
2p1érv
2p1érz
+pé2s1aj
+pé2sal
pé2s1e2l
+pé2sés
+péskész1
+pé2so
+pés3sza
+pé2s1ü2t
+pé2sza
+pés3zaj
+pész1ak
+pés3zav
pé2sz1á2
-pé2szü
+pé2sz1emb
+2p1é2széné
+pé2szin
+pé2sz1o
+pé2sz1ö
+pész3s
+pé2szu
+pé2szú
+pé2sz1ű
+péta1
+pé2tel
+2p1étk
+2pétl
+p1étla
+2p1étr
+2p1étv
2p1év.
+2p1évb
+2p1é2ve.
+2pévei
+2p1é2vek
+pé2ven
+pé2ves
+2p1é2vet
+2p1évf
+2p1évh
+p1évk
+2p1évn
+2p1évr
+2p1évs
+2p1évt
2p1évv
-pfe2li
+pé2zak
+pé2z1ár
+pé2zel
+pé2z1e2m
+pézi2
+pé2zid
+pé2zin
+pé2ziz
+pé2zol
+pé2zsa
+pé2zu
+p2f1ép
+pfi2úé
+pfi2úkér
+pf2lo
+pf2ló
+pf2lu
+pf2rá
+p1f2re
p1f2ri
+p1f2rí
p1f2ro
-p2hem
-p2hiá
+pf2ru
+pf1st
+pg2ra
+pg2ru
+pg2rü
+pha2de
+p2ha2i
+1phanész
+1p2hed
+phelyü2kü
+1p2hia2
+p2hic
1phila
-p2hiu
-1p2hok
-1p2hó
+1p2hoi
+phó2i
1pi
+pi2aa
+pi2aá
+pi2aba
+pia2cel
+pia2cél
+pia2cik
+pia2c3se
pi2ad
+pi2ae
+pi2aé
+pi2ag
+pi2ah
+pi2aj
+pi2akén.
+pi2al
+pi2am
+pi2ao
+pi2aö
+pi2ap
+pi2aré
+pi2asza
+pi2at
+pi2aú
+pi2aü
+pi2ave
+pi2az
+2picc
+pi2ce.
2picl
+pida2
+pi2dan
+pi2dea
+pi2deá
+pi2dei
pi2den
pi2deo
+2p1i2dom
2p1i2dő
+2p1i2du
pi2eg
-pier2re.
+pi2er
+pi2ég
+pi1fr
2p1i2ga
-pigaz1
-2pige
+2p1i2ge
2p1i2gé
+2pigo
+2p1ihl
+pi2k1ö
+pil2i
+pilis3s
+2pilles
+2p1illet
+2pillés
+2pillu
2p1i2ly
2p1i2má
-pin2g1a
-ping1ár
-pi2óh
-pi2ós
-pi2rat
-pi2rod
-2p1ism
-pi1t2h
-2pizz
+2p1i2mi
+2p1imm
+pinak2
+pina1p
+2pind
+2p1inf
+pin2gas
+pin2g1á2r
+pin2gelj
+pin2gép
+pin2gos
+2p1ingó
+2pinj
+2p1inp
+pin2tác
+pin2t1or
+pin2tőr
+pintu2
+pin2tur
+pi2nü
+2p1inv
+2p1inz
+pion1n
+pi2óa
+pi2óá
+pi2óe
+pi2óf
+pi2óg
+pi2óki
+pi2ól
+pi2óma
+pi2ómé
+pi2óo
+pi2óp
+2pipai
+2pipar.
+2p1i2pará
+2piparb
+2piparh
+2piparn
+2piparr
+2p1irh
+2p1i2rod
+pisau2
+2pisko
+pi2s1op
+2p1iste
+2p1isza
+piszkos1s
+pi2t1aj
+pi2tala
+pi2tall
+pi2t1a2n
+pi2t1á2p
+pi1tä
+pi1the
+pitos1s
+pi2t1ü2
+pi2vás
+2p1i2zé
1pí
-2p1íg
+pí2gé
+pí2já
+pí2né
pí2r1a2
pí2rá
+pír1ál
+pír1á2r
+2p1írás
+pí2r1e2
+pí2r1in
+pír1i2s
+pí2rí
pí2rol
2p1í2ró
-p1í2tél
-pki2s1
-plas2
-1play.
-ple2is
-p2lö
-plüs2
-plüss1
-pno1g2
+pí2r1ö2
+pír1s
+pírt2
+pír1tr
+pí2rü
+pí2rű
+2pítél
+2pítm
+pítőa2
+pítőe2l
+pí2ve
+pí2ze
+pí2zé
+pí2zü
+pí2zű
+pke1p2
+pke1s2
+pkés1s
+pkia2
+pkiá2
+pkie2
+pk2la
+pk2li
+pk2lí
+pk2lu
+pk2rá
+pk2re
+pk2ré
+pk2ri
+pk2ro
+pk2ró
+pk2va
+pk2vó
+p2lacc
+pla1k2l
+pla2pal
+plap1áll
+pla2p1osz
+p2latf
+1plazmá
+pleí2
+ple2t1a2n
+ple2t1e2l
+pléé2
+plé2has
+pli2s3zá
+plo2m1e
+plo2mén
+plom1ol
+plót2
+pló1tr
+plő2sa
+plő1stá
+plő2szár
+plu2m1e
+p2lur
+pmás1s
+pmeg1g
1po
-po2csiz
-po1gra
-po1g2rá
+po2be
+pocsi2
+po2cs1iz
+po2da.
+po2dz
+pogás1s
+po2in
+poki2
+2p1o2k1ir
+po2kí
+2p1okle
+po1k2ló
2p1okm
-po2laj
+poko2la
+pokol1l
+2p1okta
+2p1oktá
+polás1s
+pol2can
+polc3c
pol2c3s
-2p1old
-2p1oml
-pon2gas
-pon2t1e
+2p1olda
+polóá2
+2poltár
+2p1oltás
+2p1olti
+2p1oltó
+2polvas
+po2n1a
+pon2c3so
+po2nel
+pon2g1e
+poni2
+po2niz
+pon3n
+po2n1osz
+pon2t1a2d
+pon2tag
+pon2t1a2l
+pont1any
+pon2tál
+pon2tár
+ponte2
+pon2t1el
+pon2tem
+pon2ten
+pon2tes
+pon2ték
+pon2t1ér.
+pon2t1éte
+pon2tisz
+pon2tí
+pon2t1ő2
2ponz
+po2ol
+po2p1a2
+po2p1á2
+2popc
2po2pe
-po2p1é2
-po1pl
+pop1el
+popi2
+po2pik
+po2p1in
+po2p1ir
+po2pis
+po2p1o2l
+pop1p2
pop1s
-por1adó
+popsz2
+2pop1t2
+po2pú
+po2pü
+po2r1a2c
+po2r1ag
+po2rakk
+por1ala
+por1all
+po2ram
+pora2n
+por1any
+po2r1a2r
+po2rat
+por1ács
+por1áll
+por2can
+por2c3h
+por2c3sí
+pore2
+po2rec
po2res
-por1s
-por2t1el
-por2tes
-por2tér
-por2tin
-por2tü
-po2se
-po2s1é
-po1szf
+por1f2
+por1g2
+po2rid
+2porie
+po2rih
+po2r1il
+po2r1i2m
+po2r1in
+por1k2
+po2rö
+po2rő
+por2tamb
+por2t1au
+por2t1á2rá
+por2tárb
+por2tárn
+por2tej
+por2t1em
+por2tet
+por2tél
+por2t1ér.
+por2t1érk
+por2t1i2k
+por2tiz
+por2t1ív
+por2tur
+por2t1usz
+por2túr
+por2tű
+po2rü
+2p1orvo
+pos3szo
+pos3szö
+2postol
+2p1osty
+po2sü
+po2sze
+po2szí
2p1oszl
-po2t1el
+posz2tü
+po2tab
+po2tad
+po2t1a2l
+po2tan
+po2t1a2u
+po2t1e2l
+po2t1inf
+po2t1ip
+po2t1í2
+po2tol
+po2tö
+po2tus
+po2tü
+po2vi
1pó
-póka2
-pó2k1ag
-pó2rák
-pó2rán
-pó2rát
+pó2ce
+pó1fr
+pói2g
+pó2k1ass
+pó2kau
+pó2k1e2l
+pó2kem
+pó2ket
+pó2k1id
+pó2kim
+póki2s
+pók1isz
+pó2kiv
+pó2k1ös
+pó2k1ú
+pó2l1an
+pó2l1á
+pó2lom
+2p1ó2né.
+pó1p2r
+p1ó2rad
+pór1á2sz
+póre2
+pó2reg
+pó2rem
+p1ó2riá
+pó2rö
+pó2s1or
pós3s
-pó2t1a2
-pó2tá
-pó2t1e2
-pó2t1é2
-pó2ti
-pó2tor
-pó2tu
-pó2t1ü2
+pó2s1ü2v
+póta2
+pó2t1ad
+pó2tal
+pó2t1an
+póté2r
+pó2til
+pótü2
+pó2tül
+2póün
+2p1ó2vó
+pó2ze
+pó2z3sá
1pö
+pö2ka
+pö2ká
+pö2kel
+pö2ker
+pö2kid
+p1ö2ko
+pö2ku
+pö2kú
+pö2lye
+2pönt
+pö2ra
+p1ördö
+pö2res
+3pörg
+pö2ro
+pö2r1ő
+pö2rú
+2p1öss
+p1ötl
+pötty1in
+2p1ötv
+pö2ve
1pő
-pő1kr
+pőa2n
+pőá2g
+pő1bl
+pő1dro
+pőe2r
+pőé2h
+pőé2l
+pő1kl
+pő1pl
+pő1pr
2p1őr.
+pő2ri.
+p1őrj
+p1őrl
+2p1őrn
+p1őrs
+2p1őrt
+p1ő2rü
+2p1őrz
+pő1sz
+pp1ada
+ppai2
+ppa2j
+pp1ajá
pp1akk
-pp1ekk
-ppko2
-ppo2d
-pp1oda
-pp2ró
-p2pú
-p2rec
-prek2
-pre1kl
-pre1p2
-1presszionis
-1p2resszí
-1prédál.
-1prédálá
-1p2riv
+ppa2nad
+ppa2n1ell
+ppan1k2
+pp1any
+pp1arc
+ppa1s
+pp1áll
+p2p1árj
+p2p1á2rok
+pp1átm
+p2p1á2to
+pp1átv
+p2p1e2gy
+p2p1e2kéh
+p2p1elo
+p2p1elr
+ppe2r1a
+ppe2ró
+p2p1ég
+p2p1éks
+pp2hó
+ppin2g1e2
+pp1íg
+pp1kl
+pp2las
+pp2lat
+pp1o2ly
+p2p1o2rom
+ppor2t1á2r
+ppor2t1e2
+ppor2t1ő2
+p2p1ó2l
+pp1órá
+pp1ön
+pp1öv
+pp1ö2z
+p1p2ref
+p1p2rem
+p1p2rez
+p1p2rém
+pp2rin
+pp2rio
+p1p2roc
+p1p2rod
+p1prof
+p1prog
+p1proj
+p1p2ros
+p1p2rot
+pp2rób
+pp1sp
+p2p1úg
+p2p1úr.
+ppví2
+ppvíz1
+1p2rax
+p2remi
+1p2repa
+pressz2b
+2pret
+pret2á
+1p2rédi
+p2rép
+pré2sa
+pré2s3zá
+p2riccs
+p2rius
+p2rizm
+prí2m1e2l
+prí2mem
+1probl
1p2roce
-1p2rog
+p2rof
+1profe
+p2rog
p2roj
-pro1k2h
-pru2s1á
-prus3s
-p1sc
-p1s2k
-p2s1ork
-p1s2p
-p1st2
-1pszic
-psz1ön
-pszt2
+1proje
+pro2mo
+p2ropa
+1p2rote
+1proté
+1p2roto
+1p2rovo
+1próbá
+pró2d1e
+pró2dz
+1p2róza
+pru2s1ág
+pru2se
+1p2rüs
+p2s1a2d
+psé2gel
+ps1i2ha
+ps1í2ze
+p1s2ká
+p1s2mi
+p2s1ón
+p2s1ö2z
+p1s2pe
+ps2pi
+p1s2po
+ps1pr
+ps2rá
+ps3szó
+p1s2tá
+ps2ti
+p1s2tí
+ps2to
+p1st2r
+ps2tu
+p1s2tú
+psza2k1ü
+psz1any
+p2sz1as
+psz1atl
+p2sz1ág
+ps3záp
+p2szég
+psz2fé
+1p2szic
+p2sz1ill
+pszis3s
+psz1k2
+psz1old
+psz1orn
+p2sz1ön
+p2sz1ös
+psz3s
+pta2d
+pt1ada
+pta2n1á2s
+pta2ne
+ptá2raj
+ptáró2
+ptá2rór
+p2t1eg
+p2t1e2ke.
+p2t1e2lő
+p2t1els
+pte2rál
+pté2ká
+pté2k1el
+p2t1érd
+pt1i2ma.
+p2t1i2n
p2t1i2o
-pto1g2
-pt1olv
+p2t1i2r
+p2t1í2r
+pt1kl
+p2t1öt
+p1t2rag
+p1t2ran
+p1t2rá
+pt2ré
+ptu2sze
+ptu2szi
+p2t1úrr
+p2t1üt
1pu
-pu2s1a2n
-pu2se
+pua2d
+pu2csor
+pue2l
+2p1ugr
+2puká
+pul2tas
+2p1u2ni
+2puno
+2p1u2nó
+puo2r
+pu1pr
+pu2rak
+pu2ral
+pu2sad
+pu2sal
+pusa2n
+pus1any
+pu2sap
+pu2sál
+pu2s1átl
+pu2s1e2
+pu2s1érté
+pu2sik
+pu2sis
+pu2sí
+pu2sol
+pu2sö
+pu2ső
+puss2
+pussz2
+pust2
+pu2sü
+pu2szag
+pu2szal
+pu2s3zár.
+pusz1é2p
+pu2szö
+pu2tab
+pu2t1a2d
+pu2tak
+puta2n
+2p1u2taz
+put1ing
+pu2tol
+pu2tód
+2p1u2tóp
+pu1trá
1pú
-p1úg
-pú2t
+2p1úrf
+pú2sz
+2p1útb
+pú2té
+2p1ú2ti
+2p1útj
+2p1útk
+2p1útn
+2p1ú2to
+2p1útp
+2p1útr
+2p1útt
+2p1útv
1pü
-2p1ü2g
-pügyész1
-2p1üld
+pü2ge
+pü2gy
+pü2kü
2püle
+püle2t1o
2p1ünn
-püt2
-pü1th
-2p1ü2z
+pü2re
+2p1ü2rí
+2p1üst
+2p1ü2te
+pü2té
+2p1ütk
+2p1ü2tö
+pü2ve
+pü2ze
1pű
-1py
+pű2ző
+pvá2r1al
+pw2hi
+pwhisky2
+py2ba
+py2bó
+py2do
+py2ho
+py2ja
+py2já
+py2ka
+py2ké
+py2ki
+py2ko
+py2ma
+py2na
+py2ná
+py2ra
+py2ró
+py1t2h
+py2tó
+py2va
+py2vá
+pze2t1a2
+pze2t1á2
+pze2t1e2r
+pzőa2
+pzőe2
+pzőé2
+2q.
1qa
1qá
1qe
@@ -9877,3590 +45189,17631 @@ pü1th
1qö
1qő
1qu
-qu2i
+qu2ae
+qu2at
+qu2er
+qu2ez
+que2zi
+qu2éb
+qu2ie
+qu2ij
+qu2il
+qu2in
+qu2is
+qu2od
1qú
1qü
1qű
-q2v
+2r.
1ra
-ra2b1ár
+raa2d
+raáta2d
+ra2bad
+rab1asz
+rab1á2ra
+rab1árb
+rab1árr
+ra2b1át
+ra2b1ele
+ra2b1ell
+ra2bid
rabi2g
-rab1iga
-rab1igá
-r1a2dag
+ra2b1iga
+ra2b1igá
+ra2b1im
+ra2b1i2na.
+ra2b1i2ná
+ra2bind
+ra2b1int
+2rabla
+ra1bri
+ra2buj
+ra2c1aj
+rac3csa
+ra2cet
+ra2cha
+rac3hig
+ra2c3hok
+ra2c3hos
+ra2c3hot
+2r1a2cid
+rac2kar
+rac2kit
+rac2k1ö2
+rac2kü
+ra2dag
+ra2dalé
+rada2rad
+2radaté
+radás1s
+ra2de.
+r2a3dí
+2radíc
2radm
-rae2g
-ra2et
+3radósi.
+2r1a2dóz
+ra1drá
+ra1dru
+2r1a2du.
+ra2dus
+rae2r
+raé2derb
raé2dere
-2rafik
-ra1f2r
-rai2g
-2rajc
-2r1a2kar
-ra2kác
-ra1klé
-ra1k2ro
-ra2lak
-ra2l1eg
+raé2derh
+raé2dern
+raé2derr
+raé2dert
+raé2r
+rafikus1s
+ra1fl
+2r1a2ga.
+ra2gak
+rag1alo
+ra2g1ác
+ra2gáé
+2r1a2gán
+rag2de
+ragdi2
+rag2din
+ra2gel
+ra2g1i2na.
+2r1agy.
+ra2gyat
+2r1agyn
+ra2gyon
+2r1agyr
+rai2o
+2raizá
+2raizi
+2raizn
+2raizó
+2raizu
+ra2j1a2d
+ra2j1au
+ra2j1á2ru
+ra2j1es
+ra2jin
+2rajkáró
+2r1ajkú
+rajob2
+raj2t1e2l
+raj2t1en
+raj2zat
+raj2z1e
+raj2z1ón
+raj2z3s
+2r1a2kara
+rak2kép
+rak2kis
+ra1k2li
+ra1klo
+ra1kló
+ra1klu
+2raknáb
+2raknái
+r1a2kóz
+rak2re
+ra1k2ré
+ra1k2ri
+rak2rom
+raktus1s
+2r1a2kus
+r2alab
+2r1a2la2g1
+2ra2laku
+ra2lapa
+r1a2lapú
+ra2lázá
+ra2lázó
+2r1alb
+2r1aljai.
+2r1alji
2ralk
-ral2lá
-2r1als
-ra2mad
-ra2mir
-ra2mí
-ra2nal
-ran2ga
+ralla2k
+ral2l1akó
+ral2l1at
+rallá2
+ral2lág
+ral2lál
+ral2lev
+ralo2m1e
+ra2mab
+ram1ada
+2ramai
+ram1akk
+rama2l
+ram1ala
+ra2m1any
+ram1áll
+ra2m1árá
+ra2m1árb
+ra2m1áre
+ra2m1árh
+ra2m1árn
+ra2m1árr
+ram1b
+ra2m1éhe
+ram1ide
+ram1i2ko
+ram1ill
+ra2m1im
+ram1ina
+ram1inf
+ram1ing
+ram1inj
+ra2m1i2p
+2rammb
+2rammet
+2rammi
+2rammj
+2rammn
+2rammr
+2rammt
+ra2m1osz
+ra2m1ó2r
+ra2mö
+ra2mő
+ra2mü
+2r1a2nal
+2r1a2nat
+ranás1s
+ran2csal
+rancs1ág
+ran2cse
+ran2csik
+ran2cső
+rancs3z
+2rand.
+ran2dat
+ran2d1au
+2randj
+ran2dz
+ra2nek
+ran2g1a2
+ran2g1á
ran2ge
-ran2szá
-ra2nyal
-ra2nyál
-ranye2
-rany1er
-ra2nyé
-ra2nyó
+rang1e2l
+ran2g1ó2
+ran2gye
+ra2nil
+ra2nim
+2ranka
+ran2szál
+ran2sze
+ransz1omb
+2rany.
+ra2nyag
+rany1a2la
+ra2ny1a2n
+ra2nyap
+ra2ny1ar
+r1a2nyáit
+r1a2nyáka
+r1a2nyákh
+r1a2nyákk
+ra2ny1ál
+ra2nyás
+r1anyás.
+2ranyb
+ra2ny1e2s
+2ranyé
+ra2nyél
+2ranyh
+ra2nyid
+ra2nyin
+ra2nyir
+rany1í2r
+2ranyk
+2ranyn
+ra2ny1ol
+2ra2nyó
+rany1ó2r
+ra2nyö
+2ranyr
+2ranys
+2ranyt
+ra2ny1ü
2ranza
-2ranziti
-rao2
+ra2óa
+ra2óá
+ra2óf
+ra2ólá
+ra2óm
+ra2óp
+ra2ósz
+2rapa.
ra2pák
2rapp
-ra1p2r
-ra2rán
+rap2pin
+ra1p2re
+ra1pré
+ra1p2ri
+ra1p2ro
+2rarann
+2r1arany.
+2r1a2ranya.
+2r1a2ranyá
+2raranyb
+2raranyn
+2raranyr
+2r1aranyt
+ra2rat
+2r1arco
+ra2rén
+2r1art
+2r1arz
+ra1s2ká
+ra1s2l
+ra1s2pe
+ra1s2po
+rassz1e
+2rasszoc
rast2
-ra1sta
-rasztá2r
-raszt1áro
+ra1s2ta
+ra1stá
+ra1str
+ra2sz1abl
+ra2sz1aj
+ra2szas
+ra2szat
+ra2szág
+ra2sz1árr
+rasz1emb
+ra2sz1étt
+ra2szób
+ra2szói
+ra2szón
+ra2szös
+rasz2t1a2ny
+rasz2t1el
+rasz2t1é2te
+rasz2tö
+rasz2tü
+ra2t1a2d
+rat1ajt
+rat1a2la
+rat1alt
+rat1ará
2r1a2tád
-2ratc
-ra1thó
-ra2tir
-2ratké
-2ratki
-2ratokn
-ra2tomo
+rat1áll
+ra2t1árad
+ra2t1á2rai
+ra2t1á2rak
+ra2t1árb
+ra2t1árv
+ratát1a2
+ratá2vi
+ra2t1e2g
+ra2t1elk
+ra2t1ell
+2ratég
+rat1ége
+ra2t1érd
+rat1érke
+ra2térte
+ra2t1érv
+rat1ing
+ra2t1ír
+ra2t1íve
+2r1atká
+2ratlé
2ratoz.
-2ratozi
-2ratst
+ra1t2ran
+2r1attr
ra2tür
-ra2ub
-ra2us
-2raví
-raza2
-raz1any
+2raty
+ra2tya
+ra2tyá
+ra2tyu
+ra2udi
+2r1a2uk
+ra2ulá
+2raum
+rau2n
+rau2ta
+rau2tá
+ra2uto
+2r1autó
+rautóé2
+raü2t
+raü2z
+2ravató
+2ravú
+ra2xü
+ra1ye
+ra1yé
+raz1ajt
+raza2n
+ra2z1any
ra2zel
+ra2z1olt
+ra2zono
1rá
-2r1ábr
-rá2ca
-2ráfia
-2ráfiái
-2ráfián
-2ráfiát
-2ráfj
-2ráfp
-2ráfu
-2rá2fü
-rá2ge
-rá2gén
-rág3g
-rá2gi.
+rá1bre
+rá2cal
+rá2c1e
+rá2c3h
+rá2c1i2n
+ráci2óf
+rá2cö
+rá2csala
+rác3ság
+rá2csét
+rá2csir
+rá2cs1is
+rá2cú
+rá2cü
+rá2d1any
+2rádáh
+2ráddá
+2rádju
+2ráfha
+2ráfhe
+2ráfhi
+2ráfid
+2ráfre
+rág1ad
+2rágam
+2r1á2gaz
+rág1á2zá
+rá2gia
rá2gil
-2rágun
-2rágy
+rá2gim
+rá2gis
+2rágí
+rá2g1osz
+rágus4
+rá2gü
+2rágya
+2rágyáb
+2rágyáé
+2rágyáh
+2rágyái
+2rágyáj
+2rágyák
+2rágyán
+2rágyár
+2rágyás
+2rágyát
+2rágyáv
+rá2gyu
+ráí2r
+ráj2k1a2
+ráj2kel
+ráj2k1ó2
+rá2jü
+rá2kát
+rá2k1ered
+rá2k1e2s
+rá1kla
+2rákog
+rá2k1osz
+rá2k1ón
+rá2k1ó2r
+rá1krá
+rá1krét
+rá2l1ak
rá2l1a2l
-2r1állan
-2r1állo
-rá2lyú
-rá2nér
-ránt1ak
-ránt1a2l
-ránt1á2r
-rán2t1e
-2rányí
+rá2lana
+2r1álar
+rála2t1e
+rá2lál
+rál1átl
+r1álcá
+2r1áldá
+rá2lid
+rá2lim
+rá2lí
+2r1állam
+2r1állap
+2r1állat
+2r1állí
+2r1állom
+2r1álma
+rá2lü
+rá2lyal
+rá2ly1a2n
+rá2lyap
+rá2ly1as
+rá2lyav
+rá2lyús
+rá2lyút
+rá2mö
+rá2nal
+rá2n1a2n
+rá2n1a2t
+rá2n1ár
+rá2nás
+ránc1c
+rá2nék
+rán2gál
+rá2niz
+rá2ní
+rán1kl
+rá2nol
+rá2not
+rá2n1ó2
+rán2sav
+ráns3s
+rán2t1ak
+rá2nü
+rá2ny1a2d
+rá2nyag
+rá2nyako
+rány1alt
+rá2ny1a2n
+rá2ny1ap
+rá2nyar
+rá2nyaz
+rá2ny1ár.
+rá2nyérm
+rá2nyérz
+rá2ny1í2r
rá2nyol
-2rányú
-rá1p2
-rá2rad
-2rárak
-r1á2ram
+rá2nyó
+rá1p2l
+2rápo
+rá2pol
+rá1p2r
+2r1á2rad
+rár1a2dá
+2r1á2rai
+2r1á2ram
+2r1á2ras
+2r1á2rat
+rá2raz
+rá2ráb
+rá2ráh
rá2r1ál
rá2rár
-rárboc1
-rá2r1é
+rá2rát
+rá2ráv
+rá2r1em
+rá2rér
+2r1árh
+rá2riai
+2r1á2riá
rá2rin
-rá2rok
-rá2rol
+2r1árj
+2r1árl
+2r1árn
+rá2r1ol
+r1ártó
2ráru
rá2rul
-rá2rus
-2r1á2rú
-rá2sir
+rá2run
+2rárú
+rá2rú.
+rá2rút
+rá2rúv
+rá2s1a2d
+rá2s1akn
+rá2sal
+rása2r
+rás1ará
+rá2s1as
+2rásatá
+rás1a2to
+rá2saz
+rás1á2ga
+rá2s1árad
+rá2s1árak
+rá2s1á2rá
+rá2s1á2ré
+rá2sás
+rá2ser
+rá2sis
rá2s1ol
-2rásó
-rás1ó2r
-rát1ad
-rát1á2r
-2rátlé
-2r1átm
+2r1á2só.
+2rásób
+2rásóé
+2rásóg
+2r1á2sóh
+2rásói
+2rásój
+2rásók
+2rásón
+rás1ó2ra
+2rásóró
+2r1ásós
+2rásót
+2r1ásóv
+rá2ső
+rást2
+rás1tr
+rá2sut
+rá2szan
+rá2szas
+rá2sz1á2ru
+rá2sziv
+rás3zón
+rá2tad
+rát1a2da
+rát1ala
+r1á2tál
+rá2tég
+rá2tél
+2rátép
+rá2t1i2o
+rá2tí
+2r1átlé
+rá1tri
rá1tro
-2r1átv
-rá2zsár
-rba2ná
+rátus1s
+rátú2
+rá2túr
+2r1á2tül
+rá2zal
+2rázisb
+2rázisé
+2rázish
+2rázisk
+2rázisn
+2rázisr
+2ráziss
+2rázist
+rázi2sz
+rá2zsal
+ráz4sá
+rázs1e2
+rázsé2
+rá2zsén
+rázsi2a
+rá2zsis
+rá2zsó
+rázs1ü2
+rba2j1e
+rba2jokt
+rba2n1á
+rbátyá2t
+rbá2ty1áto
+r2b1ell
r1b2la
-r1b2r
-rc1ab
-r2c1al
-rc1a2m
+r1b2lo
+rb2lú
+rboc1c
+r2b1olda
+rbo2n1a2
+r1b2ra
+r1b2rá
+rb2ri
+rb2ro
+r1b2ró
+rb2ru
+rbu2t1e
+rc1adá
+rc1ajt
+rca2lak
+r2c1alk
+r2c1ana
+rc1anya
+rca1p
+rc1ara
rc1ará
-r2c1ál
-r2c1áp
-rc1edé
-r2c1ele
-r2c1elő
-rc1esz
-rcé2l
-r2c1él.
+rc1ass
+rc1a2to
+r2c1ág
+r2c1á2l
+rc1ár.
+r2c1ári
+r2c1árn
+r2c1á2ro
+r2c1árr
+r2c1árt
+r2c1á2ru
+rc3csi
+rc3csí
+rc3cso
+rc3csó
+rc3csö
+rce2g1a2
+rceg1g
+rc1egy
+rc1e2leg
+rc1elk
+rc1e2lőd
+r2c1els
+r2c1ember
+r2c1epe
+rc1e2ve
+r2c1ex
+r2c1ez
+rc1é2két
r2c1éle
-r2c1élé
-r2c1éll
-rc1élt
-rcés3
+r2c1é2lé
+r2c1é2li
+r2c1élm
+r2c1élü
+r2c1ép
+r2c1ér.
+r2c1érb
+r2c1é2ri
+r2c1érr
+rc1ész
+rc1fr
+rc1gr
+r2c3has
rc3hel
-r2c1i2d
-rc1ing
-r2c1izo
-rckész1
-rc1kr
-rc1or
-r2c1ó2
-rc1ön
-rc1ös
-rc3sőt
-rc3za
-rd1ág
-rde2kér
-rd1él.
-rd1é2le
+r2chen
+r2chig
+r2chom
+rc3hu
+r2c3hú
+r2c3hű
+rci2d
+r2c1ide
+r2c1i2ko
+r2c1ikr
+rc1ill
+r2cimá
+r2c1imi
+rc1i2na.
+rci2náb
+rci2náé
+rc1i2nár
+r2c1i2nát
+r2c1ind
+rc1i2oni
+r2c1i2pa
+r2c1isi
+r2c1isk
+r2c1ist
+rc1izm
+rc1i2zo
+r2c1íj
+r2c1ív
+r1c2ké.
+r1c2kéh
+r1c2kéi
+r1c2két
+r1c2ki.
+r1c2kia
+r1c2kig
+r1c2kok
+rc1k2ré
+rc1kv
+r1c2lu
+r2c1op
+r2c1o2r
+r2c1osz
+rc1ón
+rc1ó2r
+rc1óv
+r2c1öb
+r2c1ön
+r2c1ör
+r2c1ös
+rc1őr
+rc1pl
+rc1pr
+rcs1abl
+rcs1alak
+rcsa2p1á2g
+r2c3sara
+r2csarl
+r2c3sáp
+r2c3sár.
+rcs1áru
+r2c3sej
+r2cseleme
+r2cs1elr
+r2cs1érb
+r2csikr
+rcs1írás
+rc3s2ká
+r2c3sora
+r2c3soro
+rcsóna2k1á2
+rcs1ős.
+rcs1p
+rc3s2pi
+rcs1s
+rc3sto
+rc3sz
+rc1tr
+r2c1ud
+r2c1ur
+r2c1ut
+r2c1új
+rc1üg
+r2c1ür
+r2c1üs
+r2c1üt
+rc1üv
+rc1üz
+rc1űz
+r2c3zá
+rc3zó
+rc3zs
+rc3zu
+rc3zú
+rda2cél
+rd1a2dat
+r2d1akc
+rda2l1í2
+rd1alka
+rd1alko
+r2d1a2nya
+rda1p
+rd1a2rán
+r2d1arc
+rd1aszt
+r2d1azo
+rd1ács.
+rd1á2rak
+rd1árat
+rd1á2ron
+r2d1árv
+rdás1s
+rd1bl
+rd3dz
+r2d1e2g
+rde2k1a2
+rde2ker
+rde2kék
+rde2kol
+rde2k1ö2
+r2d1ela
+rde2sőt
+rd1exp
+rdező2p3
+r2d1é2g
+rd1é2lé
rd1élr
-r2d1id
-r2d1i2nak
-rd1íz
-r2d1or
-rd1ös
-r1d2rá
-rdu2s1
-rd1út
-r1dy
+rd1élt
+rd1é2lü
+r2d1ép
+r2d1ér.
+r2d1érd
+r2d1é2ri
+rdé2sa
+rdé2sza
+r2d1é2vé
+rd1fr
+r2d1i2d
+r2d1i2ga
+r2d1igé
+r2d1ima
+r2d1i2na.
+r2d1i2nai
+r2d1i2nát.
+rdio2x
+rd1izo
+r2d1íg
+r2d1íz
+rd1kl
+r2d1okta
+r2d1old
+rd1orr
+r2d1osz
+r2d1ou
+rdóa2
+rd1ó2rá
+rdö2g1öl
+r2d1öl
+r2d1ös
+rd1öv
+rdő2s1orr
+rd1pr
+r1d2ram
+rd2rap
+r1d2raz
+rd2rog
+r1d2rót
+rd1sk
+rd1sp
+rd1st
+rdsza2k1
+rd1t2r
+rd1udv
+r2d1urá
+rd1üg
+r2d1üt
+r2d3za
+r2d3zá
rd3zo
+rd3zó
+r2d3zö
+rd3zsí
+r2d3zú
1re
-re2ájá
-re2ák
-reá2l1u
-re2áv
+rea2d
+rea2j
+rea2ka
+rea2la
+rea2r
+2reálá
+2reáló
+2r1eb.
+2r1ebbő
+reb1egy
+2r1e2béd
2r1ebh
+2r1ebk
+2r1ebm
+2r1ebn
+2r1ebs
+2r1ebv
+re2caj
+re2cal
re2cá
+2recets
re2ch
-redenc1
+rec3sar
+2r1e2cset
+rec3sor
+re2cz
+re2dan
+red1elv
+2redend
+re2d1e2r
+2redeti
+2redetű
+2redény
+re2d1é2ves
re2dir
-re2dí
re2dor
-ree2s
+2r1edzőb
+2redzőj
+2r1e2dzők
+2redzőr
+2r1e2dzőt
+2redzőv
re2et
-re2g1a2l
+re2ew
+2reff
re2gap
-r1egóv
+re2gas
+reg1áll
+re2gár
+reg1e2le
+reg1elh
+reg1ell
+re2g1elr
+reg1elv
+reg1eng
+reg1e2tető
+reg1e2vé
+regész1
+re2gid
+reg1inj
+re2giz
+re2góc
+reg2óv
+re2gú
+regü2l
+re2g1ülé
2r1egy.
-re2gyez1
+2r1egyb
+re2gye.
+re2gyed
+re2gyen
+2r1e2gyes
+re2gyet
+2r1e2gyez
2r1e2gyé
+2r1egyh
+2r1egyk
+2r1egyl
+2r1egyn
+2r1egyr
2r1egys
-re2inh
+2r1egyt
+re2gyün
+r1egyv
rei2rá
-2rejü
-rek1arc
+re2ja
+2rejéé
+2rejűe
+2rejűn
+2rejűr
+2rejűt
+re2k1ag
+re2k1ará
re2k1asz
-re2k1emb
-re2kid
-re2k1ot
-re2lad
-2relemi.
-2r1e2lemz
+re2k1á2l
+re2k1á2p
+re2k1ár.
+re2kás
+rek1elh
+rek1elt
+rek1elü
+rek1erd
+re2k1e2rő
+reke2sz1á
+2rekééh
+re2kéj
+re2kék
+2r1ekék.
+rek1ékh
+re2kél
+2r1e2kénk
+re2k1ér.
+re2k1érd
+re2k1érte
+2r1e2kés.
+re2k1éss
+re2k1id
+re2kij
+re2kil
+re2k1ing
+re2k1int
+re2k1ip
+re2kír
+rek1k2
+re1klu
+re2k1ok
+re2k1old
+rek1opt
+re2k1os
+rek1ott
+re2kór
+re2kök
+re2kötl
+re2kő
+rek1s
+reksz2
+re2k1u2s
+re2küd
+re2k1üg
+rekü2l
+re2k1ülé
+re2k1ülő
+re2küt
+2r1elad
+2r1e2lág
+2r1elbí
+2r1elbo
+2r1elc
+2r1eldo
+2r1e2lef
+2relektr
+rele2ma
+2re2leme.
+2r1e2lemed
+rele2meg
+2relemei
+2re2lemek
+2relemem.
+2r1e2lememe
+2relememm
+2r1e2lemen
+rele2m1er
+2relemes.
+2r1e2lemese
+2relemesn
+2r1e2lemet
+re2lemezé
+rele2m1ér.
+2r1e2lemtel
+2relemük
+2relemünk
+2relemzé
+2relemző
+2r1e2l1eng
+2relér
+2r1elf
+2r1elha
+2r1elhá
+2r1elhel
+2r1elhú
+2r1eljá
+2r1elké
+rella2
+rel2l1an
+2r1ellá
+2r1ellő
+2r1elma
+2r1elmééé
+2relmééh
+2r1elméi.
2relmél
+2relméte
+2r1elnev
2r1elnö
-2relo
-re2l1os
-re2lői
-2r1elr
-2r1elto
+2r1elny
+2r1e2los
+2r1e2lőad
+2relődei
+2r1e2lődök
+2relőnn
+2r1előnye
+2relőzm
+2r1elso
+2r1elszá
+2r1elta
+rel2tár
+2r1eltáv
+2r1eltett.
+2reltettk
+2r1eltéré
+2r1eltév
+2relú
+2r1e2l1ül
+2relű
2r1elv.
2r1elvá
+2r1elvb
+2relved
+2r1elvei
2r1elvek
-2r1elvet
+2r1elvem
+2r1elven
+2r1elves
+2r1elvé.
+2r1elvéne
+2r1elvér
+2r1elvéü
2r1elvév
+2r1elvh
+2r1elvi
2r1elvk
2r1elvn
-r1elz
-re2maj
-2r1ember
+2r1elvo
+2r1elvr
+2r1elvs
+2r1elvt
+2r1elvü
+2r1elvű
+2r1elvv
+2r1elz
+re2m1a2d
+re2m1asz
+re2maz
+re2m1ál
+re2mát
+2rembar
+2r1ember.
+2r1emberb
+2r1embere.
+2rembered
+2r1emberei
+2r1emberek
+2r1emberes
+2r1emberé
+2r1emberh
+2r1emberi
+2r1emberk
+2r1embern
+2r1emberr
+2rembers
+2r1embert
+2r1emberü
+rem1ble
+r1embó
+2rembr
re2mel
-re2m1ő
-2r1enti
+rem1e2lem
+2r1emelé
+2r1emelg
+r1emelk
+rem1előd
+rem1els
+re2m1eng
+re2m1esz
+re2m1ér.
+re2m1érm
+re2m1é2te
+re2migr
+re2m1ór
+re2mö
+re2m1ő2r
+rem1p2
+2remuk
+2r1e2mul
+rem1ur
+2r1e2mus
+2r1encik
+ren2d1e2r
+ren2d1ég
+ren2déj
+ren2dék
+ren2d1o
+ren2d1ö
+ren2d1ő2s
+2r1e2ner
+renés3s
+2r1enged
+2rení
+ren2s1ég
+rens3s
re2of
-re2o1g2
-re2ok
-re2op
-re2ot
-re2ók
+re2óa
+re2óc
+re2óe
+re2óé
+re2óf
+re2óka
re2ól
-re2ós
-re2ót
-re2óv
-re2pad
-re2pak
-re2pal
-re2pas
-re1pla
-rep1os
-re1p2res
+re2óo
+re2óp
+re2ósá
+re2ósz
+re2p1aj
+rep1ana
+rep1asz
+re2pau
+re2paz
+rep1áll
+rep1álm
+re2pás
+re2pát
+re2p1e2g
+re2p1elf
+re2p1elk
+re2p1ell
+re2pelm
+re2p1eng
+re2p1ep
+2r1e2per.
+re2p1erk
+2repéd
+rep1é2j
+2repénk
+2r1e2pés
+re2p1i2d
+rep1ille
+rep1int
+re2pok
+2reposz.
+2reposzt.
+rep1osztó
+repö2
+re2p1örö
+rep1pl
+rep1pr
+re2pú
2r1erd
+re2rei
+re2rej
re2res
+re2rez
+2r1erg
+re2róz
2r1e2rő
2r1ers
-re2sa
-re2sá
+re2sas
+re1s2c
+2r1esemé
+res1epr
+rese2t1e2l
+2r1esél
2reskü
-2resszionis
-2r1eszm
-re2t1any
-ret1ell
-ret1elo
-reu2t
-rev1e2le
-re2vés
+r1essi
+re2szaj
+2r1e2szet
+resz1ív
+2reszkö
+2reszm
+reszta2
+resz2t1an
+resz2tál
+resz2t1ár
+resz2t1í2v
+resz2t1o2r
+resz2t1os
+2reszű.
+2r1e2szűe
+re2t1ab
+re2t1akt
+re2tal
+ret1a2la
+re2tant
+re2t1a2ny
+re2tág
+re2t1ára
+re2t1áro
+ret1átf
+re2t1elb
+re2t1ell
+re2telm
+ret1emel
+re2t1erk
+rete2sz1á
+2r1e2tetés.
+2r1e2tetésé
+2retetésn
+re2t1é2k
+re2t1él
+re2t1érb
+re2t1érd
+re2tid
+2r1e2tika
+re2tiká
+ret1ill
+r1e2tilt
+re2t1ing
+re2t1int
+re2tis
+r1etnik
+re2t1ok
+re2t1old
+re2t1os
+re2tór
+re2t1örö
+re2t1ö2v
+ret2t1est
+ret2téne
+ret2t1in
+re2t1ut
+re2t1ült
+re2tűd
+re2ud
+re2ute
+re2vező
2r1e2vő
-re2x1
+2r1exp
+2rezetn
+2rezetü
+2rezor
+2rezőkh
2r1ezr
+2rezüs
1ré
-2rédál.
-2rédálá
-2r1é2de
-2réf
-ré2gá
+ré2bá
+ré2bis
+ré2biv
+ré2bí
+2rébres
+ré2bü
+2r1é2des
+2réfá
+2r1égb
+ré2gét
+2r1égn
ré2g1ó2
+ré2gő
+2régt
+2r1éh.
+2r1é2hen
2r1é2hes
-ré2kal
+2r1é2het
+2r1éhs
+2r1éht
+ré2jen
+2r1é2jet
+2r1é2jün
+ré2k1ab
+ré2kac
+ré2k1a2g
+ré2k1a2n
+ré2k1au
+rék1á2sá
+ré2k1e2b
+ré2k1eg
ré2kel
+rék1ele
rék1elő
-r1é2kes
-ré2les
-2r1é2let
+rék1elr
+rék1els
+ré2k1esz
+ré2k1éte
+ré2kik
+ré2kin
+ré2kit
+rék1ola
+rék1old
+ré2kör
+ré2k1ö2v
+ré2köz
+ré2kő
+réku2
+ré2k1ut
+ré2k1ú
+ré2let.
+ré2letb
+2r1é2lete
+ré2leté
+ré2leth
+ré2letn
+ré2letr
+ré2lett
+ré2letü
+2r1élf
2r1élm
2rély
-ré2mo
-ré2mu
+ré2mad
+ré2m1a2l
+ré2m1an
+ré2mar
+ré2mau
+ré2m1ál
+ré2már
+ré2mel
+rém1e2le
+ré2mer
+ré2m1é2ré
+ré2mil
+ré2m1ist
+ré2mos
+ré2mó
+ré2mö
+2rémtu
+réna1p2
+2r1é2nekh
+2r1é2neki
+2rénekl
+2r1é2nekü
+ré2nel
+2réner
+ré2n1é2j
+ré2nö
+ré2ny1e2l
ré2p1ed
+ré2peg
+ré2pes
+répi2
+ré2p1ip
2r1é2pí
+ré2pol
+ré2pö
ré2pü
+2r1épül
2r1ér.
-r1érd
+2r1érb
+2r1érc
+2r1érd
2r1é2ret
-2réri
+2r1é2rez
+ré2ré.
+ré2réb
+ré2rén
+ré2rér
+ré2rés.
+ré2rése
+ré2résé
+ré2résh
+ré2rési
+ré2résk
+ré2résn
+ré2résr
+ré2réss
+ré2rést
+ré2résü
+ré2rét
+2r1érf
+2r1érh
+ré2rie
+ré2rig
+2r1érk
+2r1érl
+2r1érm
+2r1érn
+2r1é2rő.
+ré2rők
+2r1érr
+2r1értá
+2r1érte
2r1érté
+2r1értí
+2r1értő
+2r1é2rü
+2r1érv
2r1érz
-ré2sza
-ré2szá
-ré2sz1er
-ré2szo
-ré2sz1ö
-ré2tal
-ré2tí
-2r1étk
-ré2tö
-2réven
-2r1é2ves
-ré2z1a
-ré2z1e2
+résa2
+ré2sal
+ré2sar
+ré2s1ár
+ré2sát
+ré2seg
+rés1ell
+ré2s1er
+ré2sés
+ré2s1ő2
+rés3sza
+ré2sú
+ré2s1ü2t
+ré2s1ü2v
+rész1a2l
+ré2szan
+rés3zav
+rész1ál
+ré2sz1eml
+ré2sz1e2sz
+ré2sz1é2k
+ré2szinte
+rész1í2v
+ré2szok
+ré2szol
+ré2szó
+rész1ó2r
+ré2szőr
+rész3s
+rész1t2r
+ré2szu
+ré2szú
+részü2l
+ré2sz1ülő
+2rétáz
+ré2t1egy
+2ré2tel
+rét1elm
+2réter
+ré2t1e2sz
+2r1é2tető
+ré2t1é2k
+ré2tiz
+ré2tol
+ré2t1os
+ré1tré
+ré2tud
+révá2
+ré2vát
+2réve.
+2révei
+rév1eké
+ré2v1é2l
+ré2v1éri
+2révé2t
+ré2v1éte
+2r1é2vév
+2révf
+2révh
+2révt
+ré2vú
+2révv
+ré2z1a2
+rézá2
+ré2z1ár
+ré2z1e2g
+réze2l
+réz1elő
+ré2zer
+ré2zes
+réze2t
+réz1ete
+ré2zid
ré2zin
-ré2z1o
-ré2zsi
-réz3sz
-rfi1s
-r1f2l
-r2f1öln
-r1f2r
-rgás1s
+ré2zio
+ré2zip
+réz1isz
+ré2zos
+rézó2
+ré2z1ór
+ré2zö
+ré2zsa
+ré2z3sá
+ré2z3se
+ré2z3si
+ré2zsí
+ré2zso
+ré2zsu
+rf1ál
+r2f1ép
+rfé2sza
+rfé2szá
+rf1fl
+rfia2n
+rfi1b2
+rfid2
+rfii2
+rfik2
+rfi1kr
+rf1ind
+rf1isk
+rfi1sz2
+rfit2
+rfi1tr
+rf1kl
+rf1kr
+rf2la
+rf2lo
+rf2ló
+rf2lu
+rf1okt
+rf1őrü
+rf1pr
+r1f2rá
+rf2rí
+r1f2rö
+rf1sp
+rf1st
+r2f1út
+rga1k2
+rgá2csal
+rgá2csan
+rgá2csav
+rgá2z1é
+rge2o
+rge2r1a
rgés3s
-rg2ha
+rg2ha.
+rgi2aia
+rgi2ako
+rgi2al
+rgi2aso
+rg2il
rg2la
-r1g2r
+rg2le
+rg2lo
+rg2ló
+r1g2nó
+rg2öl
+rgö3le
+rgőcsa2
+rgő2z1ölt
+rgő2z1ős
+r1g2rá
+r1g2ru
+r2gyado
+r2gy1aj
+r2gyalak
+r2gy1alap
+r2gy1algá
+r2gy1alk
+r2gy1any
+r2gyap
+r2gyarc
r2gy1asz
+r2gyau
+r2gy1az
r2gyál
-rgy1e2s
-r2gyis
+r2gy1á2z
+r2gy1eg
+r2gy1e2l
+r2gy1enc
+r2gy1e2s
+r2gy1és
+r2gyévé
+r2gyim
+r2gy1int
+r2gyip
+rgy1ira
+r2gy1ok
+r2gy1öz
+r2győr
+rhajóé2r
+rhatá2s1út
+rháza2d
+rhá2z1ada
+rhá2zal
+rhá2zip
+rhá2z3s
+rhitköz1
+1rhoeá
1ri
+ri2aa
+ri2aá
+ria1b
+ri2aba
+ri2abá
+ri2abo
ri2ac
-ri2af
-ri2ag
+ri2ae
+ri2aé
+ria1f
+ri2afag
+ri2afr
+ri2a1g2
ri2ah
+ri2ai2k
+ri2aí
ri2aj
+ri2akén.
+ri2akó
ri2ala
-ri2amé
-ri2ap
+ri2alá
+ri2alu
+ri2am
+ri2ana
+ri2ao
+ri2aó
+ri2aö
+ri2aő
+ri2a1p2
+ri2ará
+ri2aré
+ri2asza
+ri2aszá
+ri2aszi
+ri2aszo
+ri2até
+ri2ato
+ri2a1t2r
+ri2au
+ri2aú
+ri2aü
+ri2av
+ri2az
+2riásá
+2riász
+r1i2ázós
+2ribé
+ri2bol
+2r1ibr
2ribü
-ri2deá
+ri2c1e2l
+rics1il
+ri2d1a2l
+ri2dál
+rid1d
+ri2de.
+2r1i2deá
ri2dei
+2ridej
+ri2del
ri2deo
-2ridg
+rid1ere
+ri2d1esz
+2ridil
+2r1i2dom
2r1i2dő
+ri2du
ri2ed
-rie2m
-riet2te
-r1i2gaz
+3rie2l
+3rier
+ri1fl
+ri1f2rá
+2r1i2ge.
2r1i2gé
+2rigi
+ri1gla
+2r1igr
+ri2har
+2r1ihl
+rihó2
+rihón1
+2rijes
ri1klo
ri1k2ló
+ri1k2ri
ri2lal
-ri1ly
-2r1i2nas
+ril2l1e2h
+ril2lét
+ril2l1in
+ril2l1ő
+2rillu
+2rillú
+2riló
+2rimáda
+2rimádá
+2r1imp
+ri2n1a2d
+2r1i2nai
+ri2naj
+ri2n1a2l
+ri2n1a2n
+ri2n1a2r
+2rinas.
+2r1i2nasá
+2rinasn
+2r1i2naso
+ri2nass
+2r1i2nast
+rina1sz2
+ri2nat.
+rin2c1a
+rin2cá
rinc3c
-rin2c3s
-2r1inf
-2ringb
-2r1integ
-rin1tho
-riog2
-rio1k2
+rin2c1eg
+rin2cel
+rin2cer
+rin2co
+rin2csér
+rin2csi
+2r1inde
+2r1indu
+ri2neg
+2rinfl
+rin2gál
+rin2gel
+2r1ingét
+rin2gül
+2r1inha
+2r1i2nic
+ri2nil
+ri2n1ip
+2r1injek
+rin1kré
+rin3n
+2r1insp
+2r1inst
+rin2t1ad
+rintá2r
+rin2tára
+rin2táro
+rin2társ
+2rinten
+2rinterf
+rinté2r
+rin2t1ér.
+rin2t1éré
+rin2t1éri
+2rintő.
+2rintők
+ri2nül
+ri2o1k2
+rio2lok
ri2om
-ri2ósz
-2r1i2ra
-ri2rá
-r1i2ri
+2rionn
+2riono
+2riox
+ri2óa
+ri2óá
+ri2óc
+ri2ódar
+ri2óe
+ri2óg
+ri2óke
+ri2ól
+ri2ómá
+ri2ómé
+ri2óo
+ri2ó1p
+ri2óü
+2r1i2pai
+2ripar.
+2r1ipara
+2r1i2pará
+2riparb
+2riparé
+2riparh
+2riparil
+2riparin
+2riparn
+2riparr
+2ripars
+2riparte
+2ripartó
+2riparu
+2ripl
+ripor2ta
+2r1i2ram
+2r1i2rat
+2r1i2rá
+2r1irh
+2r1i2ri
2r1i2ro
-ri2rón
+2r1i2rón
+2r1irr
2r1irt
-2riskolát
-ri2sor
-2risten.
-2ristene
-2ristenné
-2ristennő.
-2ristennők
-2risza
-2r1i2tal
-ri2vás
+ri2s1ar
+ri2s1as
+ri2s1ál
+ri2sáp
+ri2s1e2l
+ri2s1emb
+ri2s1e2r
+ri2sid
+ri2sii
+ri2sil
+ri2s1is
+2rismérv
+ri2s1or.
+ri2s1ort
+2r1ispá
+2ristál
+ri2sut
+ris1üté
+ri2s1ü2tő.
+ri2s1ü2v
+2r1i2szák
+ri2t1a2d
+ri2tal
+2rital.
+2r1italb
+rit1alk
+2r1itall
+2ritaln
+2r1italo
+2ritalr
+2r1italt
+rit1a2ny
+ri2tág
+rit1ell
+ri2t1i2o
+ri2t1í
+riu2méne
+riumhid2
+riumhidr1
+riu2m1i2o
+2r1i2vad
+ri2var
+2r1i2vás
+2rivo
2r1i2vó
+rixe2
ri2x1el
-ri2xi
+ri2xí
+ri2xö
+2riza
+r1i2zét
+2r1izmi
2r1izmo
-r1i2zom
-2rizz
+2rizmuk
+2rizmú
+ri2zsar
+ri2zseb
+ri2zsel
+2r1izza
+2r1izzó
1rí
-2ríj
-rí2ja
-rí2rá
-rí2ró
-rí2ve
-rí2vé
-rí2vü
-r2j1er
+rí2gé
+2ríj.
+rí2jai
+rí2jak
+rí2jam
+rí2jas
+2ríjá
+rí2ján
+rí2ját
+rí2jáv
+2r1íjh
+2r1íjj
+2r1íjl
+2r1íjr
+2r1íjv
+rí2m1a2l
+2rímá
+rím1emb
+rí2mo
+rí2mö
+rí2né
+2r1íns
+rí2ra
+r1í2rá
+r1í2ró
+2rítél
+rítés3s
+rítőa2
+rítőe2
+rítőkész1
+2r1ív.
+ríva2
+2r1ívb
+2r1í2ve
+2r1í2vé
+2r1ívh
+rí2vi
+r1í2vü
+rí2vű
+2r1ívv
+rí2za
+rí2z1el
+rízis3s
+rí2zo
+r2j1ado
+rj1any
+r2j1ág
+r2j1áp
+rjet2
+r2j1id
+r2j1ös
r2j1u2r
+rka1b
rk1ang
-rkas3s
-rká2n1e2
-rkes2
+rka1pr
+rkaros3
+rka2ró2r
+rka2s1ü2v
+rka1t2r
+r2k1ács.
+rká2csá
+rká2ne
+r2k1á2ri
+rkár1om
+r2k1á2ru
+r2k1e2dz
+rk1e2lem
+rk2elm
+r2k1eltá
+rke1p
+r2k1erd
+rk1eredő
+r2k1e2rei
+r2k1e2rez
+r2k1e2rő
+rke2szö
+r2k1ex
+rké2p1e2l
+rké2p1éss
+r2k1ér.
+r2k1érté
+r2k1étt
r1k2hé
-r1k2hi
+rk2hón
+rkia2
+rkie2
rki2g
rk1iga
-r2k1ill
-rki2s1
-r1k2la
-rk2rá
-rk2re
-rk2ré
+rkigaz1
+rkilenc1
+r2k1imi
+rk1inga
+rki2ont.
+rki2sem
+rki2z1a
+rk1izo
+rk1kl
+r1klie
+r1k2lí
+r1k2lo
+r1k2ló
+rk1o2laj
+rko2nya
+rko2vi.
+rko2vit
+r2k1óné
+rk1ó2rá
+rk1ó2ri
+r2k1öltési
+r2k1ötl
+rkö2ző
+rk1őr.
+rk1ő2ré
+rk1őrk
+rk1őrn
+rk1ő2rö
+rk1őrr
+rk1őrs
+rk1őrt
+rk2rém
r1k2ri
-r2k1út
-rle2g1a
+r1k2rí
+r1k2rom
+rk1sh
+rktus1s
+rk1udv
+r2k1ug
+rku2sze
+r2k1ú2sz
+r2k1üd
+r2k1üg
+rk2vó
+rlag1g
+rla2g1ol
+rla2p1a
+rla2pál
+rlap1e
+rla2pol
+rla2p1osz
+rla1pro
+rla1s2t
+rla2t1a2n
+rla2t1ó2
+rlá2pe
+rlás3s
+rlá2s1út
+rlá2t1e2
+rlá2t1é
+rlá2tor
+rle2g1a2
rle2g1á
-rm1akó
-rma2tal
-rma2tár
-r2m1áll
-rmá2nyi
-rme2g1á
-rmé2kel
+rle2ger
+rleg1g
+rlegigaz1
+rleí2
+rle2t1á2
+rle2t1eg
+rle2tell
+rle2t1elő
+rle2t1ék
+rle2tél
+rle2t1ér.
+rle2t1érv
+rleü2
+rlésát1
+rlésáta2
+rlés3s
+rl1gr
+rló1g2
+rlóó2
+rlót2
+rlőe2
+rlő1sta
+r2m1akad
+rmaké2sz1ü
+r2m1a2kó
+rma1kré
+r2m1alt
+r2m1a2nya
+rmaó2
+rma2t1á2ru
+rma2t1ur
+rma2zon
+rmá2lér
+rmá2nyan
+rm1á2ram
+r2m1á2ro
+r2máru
+rm1cl
+rmege2
+rmeg1er
+rme2g1es
+rme2g1é
+rme3g2ö
+rme2k1an
+rme2kar
+rmeká2
+rme2k1eg
+rme2k1e2l
+rme2kérd
+rme2kor
+rme2kot
+rme2k1ó2
+rmekö2r
+rme2körö
+rm1elk
+r2m1elm
+rme2ran
+rme2ras
+rme2rin
+r2m1e2rői
+rme2rők.
+rme2rőke
+rme2rőkn
+r2m1e2rőm
+rmert2
+rmer1tr
+rm1esem
+rme2t1él
+rme2tin
+rmé2k1e2l
+rmé2ker
+r2m1é2le
+r2m1ép
+r2m1ér.
+r2m1érte
+r2m1étk
+r2m1étr
+r2m1étt
+rmi2g
+r2m1iga
+r2m1igé
+rm1illa
+rminc3s
+rm1inte
+r2m1irá
+rmi2si
+r2m1isko
+r2m1ism
+rmite2
+rmi2t1el
+r2m1íg
+rmjob2
+rm1kl
+rmo2n1a
+rmo2nár
+rmo2n1e
+rmon1n
+rm1ope
r2m1ors
-rmo1sz2t
-rm1s2
+rmo1sz2fér
+rmő2szá
+rm1p2l
+rm1p2r
+rm1sk
+rm1st
+rm1sz2
+rm1tr
+rm1üg
+rm1üz
+rmű1s
+rm1ya
+rna1b
+rna1f2
+rna2gyú
+rnai2k
+rna1k2r
+rna2pes
+rna1pro
+rnas2
+rna1sp
+rna1sz2
rna1t2
-rndi2
-rne2mis
-rne2tel
+rná2cs
+r2n1el.
+r2n1elb
+r2n1elf
+r2n1elh
+r2n1elj
+r2n1ell
+r2n1eln
+r2n1elr
+r2n1elt
+rne2m1is
+r2n1est
+rne2t1a2
+rne2t1e2l1
rnet1o
-r2n1ip
-rno1g2
-r2n1ó2d
-rnó1s
-rn1s2
-r2nyaj
-r2nyalak
+rnés2
+rné1st
+r2n1i2d
+rni2g
+r2n1iga
+rno2kis
+rnó1d2
+rnö2ket
+rnus3sze
+rny1a2dó
+r2nyakad
+r2nyalako
+r2ny1alk
+r2nyarc
+rny1álm
+r2ny1ell
+r2nyelm
+r2ny1eln
+r2ny1elo
+rny1elvo
+rny1emb
+r2nyerd
+r2ny1e2rez
+rny1e2ső
+rny1ékné
+rny1ész
+r2ny1id
+r2nyiz
+rnyolc1
rny1old
-r2nyús
+r2ny1or
+rny1ök
+r2nyöt
+rny1s
+r2ny1ur
1ro
-roá2
+ro2ad
+roa2n
+2r1obj
2robl
-2rodú
-2rofe
+r1obs
+roc2ke
+ro1cker
+roc2kén
+ro1c2kok
+ro1c2kon
+roc2kos.
+2r1o2dú
+rofi2tár
+ro1fl
+ro1fr
ro2g1ad
-ro2gár
-ro1gráf
-ro2k1as
-rok1ás
+ro2g1ak
+ro2gal
+ro2g1am
+ro2gar
+ro2g1á2r
+ro2g1áz
+rog1enc
+ro2ger
+ro1g2ló
+ro2g1o2l
+ro2gor
+ro2g1osz
+ro2gö
+3rográ
+ro1g2ráf.
+ro1g2ráff
+rogu2
+ro2gur
+ro2gü
+3rogy
+ro2he
+ro2hö
+ro2is
+3rojt
+ro2ka.
+ro2kab
+ro2kac
+ro2k1a2d
+ro2kait
+ro2k1aj
+ro2kak
+ro2k1al
+ro2k1a2n
+ro2k1a2s
+ro2káb
+r1o2kád
+ro2k1ál
+ro2kán
+ro2k1á2s
roke2
ro2ked
-ro2ker
-ro2kiz
-ro1kli
-ro1kri
+ro2k1en
+2rokett.
+r2oké
+ro2kék
+ro2k1é2l
+ro2kép
+ro2kid
+ro2k1ing
+ro2k1í
+2rokod
+rok1old
+ro2kő
+2r1okság
+rok1t2
+2r1oktat
+2roktán
+ro2k1u2s
+rokú2
+ro2kú.
+ro2kús
+ro2kü
2r1o2laj
-2r1olda
-2r1oltó
+rola2n
+rolás1s
+2r1oldá
+2r1oldó
+ro2l1i2d
+roligar2
+roligarc3
+rol2l1a2d
+rol2lag
+rol2l1akn
+rol2lan
+rol2lat
+rol2leg
+rol2lel
+rol2lis
+2r1olló
+2r1oltás
+2r1oltó.
+2r1oltób
+2roltóé
+2roltóh
+2r1oltói
+2roltóké
+2roltóm
+2roltón
+2r1oltót
+2r1oltóv
+2r1oltv
+ro2lü
+2rolvad
+2rolvas
+2r1o2lyai
+2r1o2lyáh
+2r1o2lyán
+2r1o2lyár
+2rolyéb
+2rolyéh
+2rolyéi
+2rolyén.
+2rolyiér
+2r1o2lyuk
+rom1ajt
+rom1akk
+rom1akó
+ro2m1a2ro
ro2m1ál
+2romám
+ro2m1á2ri
+ro2m1árk
+ro2m1árn
ro2m1á2ro
-2rombi
-ro2mel
+rombé2
+rom2bén
+ro2meg
+ro2m1el
+ro2m1e2r
ro2m1es
-rom1ért
-ro2mév
+ro2méj
+ro2m1é2ne
+rom2f1os
+ro2mim
+rom1iná
rom1ist
-ro2m1iz
+ro2mita
+ro2miz
ro2mí
-ro2m1or
+romköz1
+2r1omni
+ro2m1o2r
ro2m1ó2r
+ro2mö
+ro2mő
+rom1pr
+ro2mü
+ron1alj
+ron1alt
+ron1alu
+ron1any
+rona1t2
+rona2ut
+ro2n1áta
+ro2n1átr
+ron2csel
+ron2csem
+ro2nen
+ron1esz
+ro2n1ér.
+ron2gal
+ro2n1i2ko
+ro2n1i2m
+ro2ní
ro2nop
-ro2nú
+ro2nóc
+ro2n1ó2r
+ro2nö
+ro2nő
+ron1s2
+ron2tab
+ron2tem
+ron2tev
+ron2t1én
+ron2tin
+ron2tí
+2rontóé
+2r1ontóh
+2rontóig
+2rontós
ro2nü
-ro2nyu
-ron2zá
-ro1p2r
-2r1org
-2r1o2ro
-ro2ru
-2r1orv
+ro2nyac
+rony1a2l
+ro2nyid
+ro2nyik
+ro2nyir
+ro2nyó
+ron2zab
+ron2z1al
+ron2zer
+ron2zin
+ron2z1ol
+ron2z1or
+ron2z1ó2
+ronz1z
+ro2om
+ro2os
+2r1opc
+2rope
+ro2per
+ro1p2l
+ropo1s
+rop2s
+ro2rak
+ro2r1a2l
+ro2rat
+ror1áll
+rore2
+ro2reg
+ro2r1el
+ro2r1es
+ro2r1in
+ro2rosz
+rort2
+ror1tr
+ro2rü
ro2sar
-ro2se
-ro2sin
-ros3szá
-rosz2fé
-roszlán1n
+ros1ass
+ro2s1atl
+ro2s1av
+ro2s1árk
+ro2s1áro
+ro2sem
+ro2s1ist
+ro2s1ol
+ro2s1ó2
+ro2sö
+ro2ső
+ros3sze
+ros3szék
+ros2tet
+2rostob
+ros2tol
+2rostya
+ro2s1út
+ro2szal
+ro2szan
+ro2szás
+2r1oszlo
ro2szó
+r1osztá
+2roté
+ro1t2he
+roto2na
+ro1t2ró
+2rotth
+ro2un
+ro2us
+rova2re
+rovás1s
+2r1o2vi.
+2r1o2vib
+2r1o2vik
+ro2vis
+2ro2xidb
+2ro2xidr
+2roxilc
+ro1xy
+ro1ya
+roza2tal
+ro2zsan
1ró
-róa2
-ró2dis
-ró2dö
-róme2
-rómeg1
-ró2mez
-2róms
-róp2
-ró1pr
-ró2ráj
-ró2rák
-ró2rán
-ró2rát
-ró2ri
-ró2t1ak
-ró2tin
-róz1z
+róa2d
+rób1ajt
+2róbá
+róc3c
+ró2c3h
+ró2cin
+ró2c1ö
+ró2c3sá
+ró2cz
+ró2dai
+ró2dep
+ródi2ad
+ró2dő
+ró2dü
+2r1óév.
+2róéve
+2r1óévé
+ró2f1ag
+2rófea
+2rófeá
+ró2f1iv
+2rófs
+ró2fur
+ró1g2r
+rói2g
+róke2rest
+róke2r1in
+ró1k2l
+ró1kré
+2r1ólm
+r1ó2lom
+ró2m1a2l
+róma2r
+róm1ara
+ró2mál
+róme2l
+ró2mél
+róm1isz
+ró2mí
+2rómk
+ró2mö
+ró2mü
+róne2m
+2r1ó2néb
+2rónéé
+2r1ó2néh
+2r1ó2nén
+2rónér
+2rónét
+2rónév
+2rónj
+2rónn
+2rónr
+rónus3s
+2rónú
+ró2nü
+róo2k
+róó2r
+ró1p2l
+ró1pro
+2r1ó2raa
+2r1ó2rac
+2r1ó2rad
+2r1ó2rae
+2r1ó2raf
+2r1ó2rag
+2róraje
+2r1ó2ram
+2r1ó2ran
+2r1ó2rap
+2r1ó2rar
+2r1ó2ras
+2r1ó2rat
+2róraü
+2r1ó2rav
+2r1ó2ráb
+2r1ó2rád
+2r1ó2ráé.
+2ró2ráén
+2r1ó2ráév
+2r1ó2ráh
+2r1ó2rái
+ró2rája
+2r1ó2ráka
+2r1ó2rákb
+2r1ó2ráké
+2ró2rákh
+2róráki
+2r1ó2rákk
+2r1ó2rákn
+2r1ó2ráko
+2r1ó2rákr
+2r1ó2rákt
+2r1ó2rán.
+2r1ó2rána
+2r1ó2ráná
+2r1ó2ránk
+2r1ó2rány
+2r1ó2rár
+2r1ó2rás
+2r1ó2rát
+2r1ó2ráv
+2r1ó2riá
+rós1orom
+ró1spi
+2rótb
+2róth
+ró2tip
+rót1ist
+2rótj
+2rótk
+2rótm
+2rótn
+ró2t1ö2v
+ró1tri
+ró2tül
+2r1ó2vó
+róza1t2
+ró2z1e
+ró2z1in
+ró2zú
+ró2zü
1rö
-2r1ö2b
+2r1öbl
+2r1ö2böl.
+2r1öbölb
+2r1öbölh
+2r1öböli
+2r1öböll
+2r1ö2böln
+2r1öbölr
+2röböltő
+rö2ga
+rö2go
+rö2gó
rö2k1é2l
rö2k1érv
2rökí
-2rökl
-rök1o
-rö2le
+2röklé
+rö2ko
+2r1ö2kör
+2rökösé
+2rökösö
+2r1ökrö
+rö2lős
+rö2lyü
+rö2ma
+rö2má
2röme.
-2römé
-2römne
-rö2pi
-2r1ö2r
-rö2ső
-rö2sü
-rö2ve
+2römed
+rö2meg
+2römei
+2römén
+2römét
+2römév
+rö2mí
+2römmű
+rö2mo
+rö2mó
+2römöd
+2römök
+2römöt
+rö2mu
+2römü
+2römű
+rön2d1e
+rön2k1a2
+rön2k1e2
+rön2kép
+rön2kol
+rön2kos
+rön2k1öl
+rön2k1ü
+rö2p1i2
+rö2re
+rö2rö
+rö2sa
+rö2sá
+rö2so
+rös3sza
+2r1öv.
+2r1övb
+2r1ö2ve
+r1ö2vé
+2r1övh
+2r1övn
+2r1ö2vö
+2r1övr
+r1ö2vü
+2r1övv
1rő
-2rődb
-2rődí
-2rődr
-rőe2
-rő1g2
-rői2rá
-2rőlk
+rőa2n
+rőát1
+rőáta2
+rő1bl
+rő1br
+rő2dá
+rő2d1e2l
+rő2dos
+rő2d1ő2r
+rőe2l
+rőe2r
+rőe2s
+rőé2h
+rőé2l
+rőé2r
+rőé2te
+rő2f1as
+rő1fl
+rő2f1ő
+rőgé2p1és
+rői2ta
+rő1kl
+rő1kv
2rőlt
-2rőnke
-2rőnkk
+rő1pl
+rő1pr
+2r1őr.
+rőr1ak
+rőr1eg
+r1ő2rei
+r1őrh
+rőr1in
+rő2riz
+rőrköz1
+2r1őrl
+2r1őrm
2r1őrn
-rő2s1á2
-rő2si
-2rősítő.
-2rősítőr
-2rőszakol.
-2rőszakolá
-2rőszakolj
-2rőszakolt
-2rőtl
-r1p2h
-rp2la
+rő2rö
+2r1őrp
+2r1őrr
+2r1őrs
+2r1őrt
+2r1ő2rü
+2r1őrz
+rősá2
+rő2sár
+rő2sír
+rő1ská
+rő2ső
+rő1spe
+rő1s2pi
+rő1sta
+rő1str
+rősü2l
+rő2s1ülő
+rő2s1ült
+rő2s1ü2t
+rő2s1ű2
+rősza2kál
+rőu2t
+rőü2l
+rőva2s1
+rő2zi.
+rő2zön
+rpei2
+rpe2szel
+rp2he
+r2p1ig
+rpis1á2
+rpi2t1a
+rpi2t1e2
+r2p1ivá
+r1p2la
rp2le
-rpo2i
-rp2ré
+rp2lé
+rp2lu
+rp2lü
+rprecíz1
+r1p2ré
+r1p2ri
r1p2rí
r1p2ro
r1p2ró
-rqu2
+rpu2szé
+r2p1üz
+r2r1a2lap
+rra2sza
+rra2szi
+rrata2n
+rrat1any
+rra2t1á2r
+rra2t1e
+r2r1ábr
+rrádiók2
+rrádió1kb
+r2r1á2ga
+r2r1á2gy
r2r1árb
-rrás1s
+rrá2saj
+rrá2sar
+rrá2ság
+rrá2se
+rrás3s
+rrá2sü
+rrá2s3z
+rrá2tal
+r2r1áts
+rre2l1i
+rr1emb
+rren2d1ő2
+r2r1ék
+rré2r
+r2r1éri
+rré2sem
+rr1fl
+rr1fr
+r2r1i2de
+rr1in.
+rr1ing
r2r1ir
rri2ta
-r2r1oll
-rró1d2
-rr1p2
+rr1i2zé
+rr1izg
+rr1izm
+rr1k2r
+rr1ope
+rro2rál
+rror1osz
+rró1dr
+rró1p
+r2r1öb
+r2r1ös
+rr1pl
+rr1pr
rr1sp
-r2rü
-r2s1ac
+rr1t2r
+r2r1u2r
+r2r1ür
+r2r1üt
+rry2n
+r2s1a2dó
+r2s1a2g
rsa2il2
-r2s1a2la
-rs1alu
+rs1akku
+rs1alan
+rsa2lap
+r2s1ale
+rs1alm
+r2s1a2lomb
+r2s1ana
rs1a2ny
-rs1ara
-rs1áru
-rs1ele
-rs1esz
-rse2t
-rs1ete
+r2s1a2pá
+r2s1a2po
+rs1a2ra.
+r2s1arc
+rs1arom
+rs1arz
+rs1att
+rsa2v1ar
+rsa2v1é2
+rsa2v1i
+r2s1ax
+r2s1a2z
+r2s1ábr
+rság1g
+rs1áld
+r2s1á2ré
+r2s1árn
+r2s1árr
+r2s1á2ru
+rs1áté
+rs1áti
+rs1bl
+rs1br
+rs2ch2
+r1sche
+rsc3hé
+rs1d2r
+rs1edz
+r2s1ef
+rs1e2gét
+r2s1e2gy
+rse2il
+rse2k1a2
+rse2keg
+r2s1e2leme
+rs1elf
+r2s1elk
+r2s1e2lőa
+r2s1e2lől
+rs1e2mi
+r2s1e2mu
+rse2ny1a2
+rse2nyeg
+rse2ny1e2l
+rse2nyer
+rse2nyí
+rse2nyő
+r2s1erd
+r2s1erk
+rs1erő
+r2s1ess
+r2s1esz
+rsé2g1el
+r2s1él
r2s1ép
-rs1éte
+r2s1ér.
+r2s1érd
+r2s1érl
+r2s1érték
+r2s1és
+rs1é2te
+rs1étk
rs1étt
-r2s1i2d
+rs1fr
+rs1gl
+rs1gr
+rsi2d
+rs1ide
+rs1ido
+rsi2g
rs1iga
-r2s1in
+r2s1ikr
+r2s1ill
+r2simm
+rs1ind
+r2s1ing
+r2s1int
r2s1i2o
-r2s1i2r
-rs1ist
-r2s1í2r
-r1smi
-r2s1olv
-r2s1ors
-rsp2
-rs1st
-rs3sza
+rs1i2pa
+rs1iro
+r2s1i2si
+r2s1isk
+r2s1ism
+r2s1ist
+rs1írn
+r2s1í2ró
+r2s1írt
+r1s2kál
+r1skj
+rs1kl
+rs1k2r
+r1s2lu
+rs2mink
+rs2ni
+rs1ond
+rsonya2
+rso2nyal
+rso2nyan
+rso2nyat
+rso2nyé
+r2s1op
+r2s1ord
+r2s1org
+rs1osz
+rsócsa2
+rsócsap1
+r2s1ódá
+r2s1óné
+rsó2s3zárr
+r2s1öb
+rs1önt
+rs1örv
+r2s1ös
+r2s1ö2z
+rs1őr
+rs1pl
+rsp2r
+r1s2rác
+rs1s2t
+rs3szag
+rs3szak
rs3szá
+rs3szem.
+rs3szemet
+rs3szer.
+rs3szerű.
+rs3szerűb
+rs3szerűe
+rs3szerűn
+rs3szerűs
+rs3szerűt
+rs3szerűv
+rs3szi
rs3szí
+rs3szó
rs3szö
-rs2tab
-rste2i
-r1s2to
+r1stand
+r1s2tat
+r1s2tác
+r1s2tát
+rs2top
rst2r
+r1strat
+rs1tre
+rs1tré
+r1stró
r1stru
-r2s1ur
-r2s1u2t
+r1s2tú
+rsu2r
+rs1ura
+rsu2t
+r2s1uta
+rs1utá
+rs1úr.
+rs1ú2ri
r2s1ú2s
+rs1úto
+r2s1üd
rs1üld
-rsza2ké
+r2s1üz
+rsza2k1a2l
+rsza2k1e
+rsza2kö
+rsza2k1ü
+r2szaló
+r2s3zam
+rszág1g
rszáraz1
+rs3zárl
+r2s3zené
r1sz2f
-r1sz2k
-r1szn
-r1sz2tá
-r1szt2r
-rta1g2
-r2t1aj
-r2t1als
-rta2me
+rsz2lo
+rsz2m
+rszom2j1a2d
+rs3zse
+rs3zsi
+rsz2ta
+rszt1al
+rszt1árv
+rszt2rá
+r2s3zűr.
+r1sz2v
+r2t1abla
+r2t1abr
+r2t1a2dat
+rt1a2dó
+r2t1a2ga.
+rt1agit
+r2t1ajá
+rt1ajtó
+r2t1a2kara
+r2t1akc
+rta1kre
+rta1k2ré
+rt1alapj
+rt1a2láb
+r2t1alár
+r2t1alb
+r2t1alel
+r2t1alg
+r2t1alj
+r2t1alk
+r2t1alt
+r2t1alv
+rta2m1ér
+rt1anim
+rta2n1ó2r
+r2t1anto
+r2t1antr
+rt1a2nyag
rt1app
-r2t1a2u
-r2t1a2z
+rt1arán
+r2t1arc
+rta2rén
+rt1a2ty
+rt1a2uto
+r2t1azo
+rt1ábr
+r2t1áf
rt1ág.
-r2t1á2ga
+rt1á2ga
+rt1ágb
+rt1ágg
+rt1ágj
+rt1ágn
rt1ágr
-rtá2ló.
-rtá2ly1át
-rtá2rul
+rt1ágs
+rtá2lad
+rtá2lala
+rtá2rada
+rtá2raj
+rtá2ramr
+rt1ária
+rt1áriá
+r2t1árin
+rt1árszi
+rt1árszí
+r2t1árta
+rtá2ruké
+rtá2rukk
+rtá2rukn
+rtá2rukr
+rtá2rukt
+r2t1árur
+r2t1árut
+rtá2s1ág
+r2t1ásás
+rtá2s3z
+r2t1á2t1a
r2t1átl
-rteá2
-rt1e2gy
-rt1eml
+r2t1áts
+r2t1átv
+rtá2v1é
+rtávi2
+rt1bl
+rt1br
+rt1cl
+rt1cr
+rt1dr
+rtea2
+rt1e2gé
+rt1e2gye
+rtei2
+r2t1eks
+r2t1elad
+r2t1elb
+r2t1elf
+rt1eljá
+rt1elker
+rt1elkö
+rt1elkü
+rtel2la
+rtel2l1á2
+rt1elma
+rt1e2lőa
+rte2lől
+r2t1elr
+r2t1ember
+r2t1eml
+r2t1enc
r2t1ent
-rtes1s
-r2t1é2le
-r2t1érd
-rt1érte
+rte1p
+rte2rac
+rte2rál
+rte2r1in
+rtermo1
+rtermosz2
+rte2r1os
+r2t1e2ró
+r2t1erő
+rte1sp
+rt1esték
+rt1estné
+r2t1estün
+rte2sze.
+rte2szei
+rte2szek
+rte2szem
+rte2szet
+r2t1eszk
+r2t1eszm
+r2t1e2szü
+r2t1é2d
+rt1é2gi
+rté2kaj
+rté2k1a2l
+rtékát1a2
+rték1í
+rté2kos
+rté2ku
+r2t1é2let
+rté2lén
+rt1é2li
+r2t1élm
+r2t1é2neke
+r2t1é2nekk
+r2t1é2nekr
+r2t1épü
+r2t1érdem
+r2t1érem
+r2t1é2ré
+r2t1érin
+r2t1é2rit
+r2t1értek
+r2t1érté
+r2t1érv
r2t1érz
-rt2hág
-r1t2hen
-r2t1i2d
-rti2g
-rt1iga
+rté2s1ég
+rtéskész1
+rtés3sza
+rté2sül
+rté2szá
+rté2szo
+rté2szö
+rtés3zsí
+r2t1étk
+r2t1étl
+r2t1étt
+r2t1étv
+r2t1é2ve.
+r2t1é2vet
+rté2véné
+r2t1é2vér
+rt1évk
+rt1fl
+rt1fr
+rt1gr
+r1t2ha.
+r1t2hág
+r2t1i2de
+rt1idé
+rt1idi
+rt1ifj
+r2t1i2gé
r2t1ill
+r2timá
+r2t1i2mi
+r2t1imp
+r2t1i2náb
+r2t1i2náé
+r2t1i2náh
+r2t1i2nán
+r2t1ind
r2t1inf
+r2t1ing
+rti2nik
+r2t1i2pa
+r2t1irá
r2t1iro
+r2t1isi
r2t1isk
-rtme2g1
-r2t1oli
-rt1oml
-rton1n
+r2t1ism
+r2t1isza
+rt1i2tal
+r2t1izé
+rt1izm
+r2t1izz
+r2t1íg
+r2t1íj
+r2t1ín
+rtí2ra
+rtí2rá
+rt1í2ve
+rt1í2vű
+rtí2z
+rt1ízl
+rt1kl
+rt1kr
+rt1kv
+rtmű1
+rtműt2
+r2t1of
+rto2kad
+rto2k1a2l
+rto2k1ar
+r2t1o2li
+r2t1oml
+rto2n1a2
+rtoná2
+rto2nár
+rt1opá
+rt1ope
+rt1opt
r2t1org
+r2t1o2rom
+r2t1orr
+r2t1ors
r2t1orv
-rt2ran
-rt2rom
-rt1t2
-r2t1u2t
+r2t1osz
+rtóe3rejü
+rtó1p
+rtó2rák
+rtó2s1ín.
+rtó1sp
+rtó2s3zár
+r2t1ökl
+rt1ököl
+r2t1ö2lőse
+rtön3n
+rt1ö2rök
+rt1öröm
+r2t1össz
+rt1ö2vez
+rtőé2h
+rtőkész1
+r2t1őrköd
+rt1őrl
+r2tőrül
+rt1pl
+rt1pr
+rt1ps
+rt2rad
+r1t2raf
+r1t2ranz
+r1t2rág
+r1t2riá
+r1t2rik
+r1t2ril
+r1t2rió
+r1t2rón
+r1t2rü
+rt1sk
+rt1sl
+rt1sp
+rt1st
+rtsz2
+rt1t2r
+r2t1udv
+rtu2k
+rt1uká
+r2tunik
+rtu2rai
+rtu2ral
+rt1u2rá
+rtu2sze
+rt1utá
r2t1új
-r2tüd
-rt1ünn
-rt1ür
+r2t1ú2s
+r2t1üg
+r2t1üld
+r2t1ü2lé
+rt1ülő
r2t1üt
-rty2v
+r2t1ü2v
+rt1ű2ző
+r2tying
+rty2j
+rty2s
+r1t2zé
+r1t2zi
+rt2ző
1ru
-rua2
-r1ubb
-r1udv
-rue2
-rug3g
-rugós1
+ru2ac
+ru2b1i2k
+ru2c3h
+ru2cz
+2r1udv
+rue2l
+rue2r
+ru1fr
+2rugar
+2r1u2gat
+rug3gy
2r1ugr
+ruhás1s
+2r1ujj
+ru1k2l
+2ruktu
2ruktú
-ru2ru
-ru2se
-ru2sin
-2rusí
-ru2su
-ru2szu
-ru2tak
-ru2tat
-ru2tó.
-ru2tu
-2ruü
+rum1agr
+ru2maj
+ru2mal
+ru2maz
+ru2m1eng
+ru2mer
+ru2mes
+ru2mél
+ru2m1i2k
+rum1ill
+ru2m1i2p
+ru2mis
+ru2m1iv
+ru2miz
+ru2mí
+ru2mol
+ru2m1o2r
+ru2mö
+ru2mő
+ru2mü
+2r1unc
+run2da
+ru2nit
+r1u2nok
+ru2pad
+ru2pe
+ru2p1il
+ru2pü
+ru2rad
+ru2rai
+r1u2ral
+ru2ras
+ru2rat
+r1u2raz
+ru2rán
+ru2rát
+2r1urb
+ru2ruk
+rus1abl
+ru2sad
+ru2sal
+rusa2n
+rus1any
+rusa2r
+rus1aro
+ru2sas
+ru2sál
+ru2s1iz
+ru2sír
+ru2s1ol
+ru2s1ó2
+ru2ső
+russ2
+russz2
+rust2
+rus1tra
+ru2s1ű2
+ru2sz1é2p
+ru2szip
+r1u2tac
+r1u2tak
+r1u2tat
+r1u2taz
+2r1utc
+r1u2tó.
+r1u2tób
+r1u2tód
+r1u2tói
+r1u2tój
+r1u2tók
+r1u2tón
+ru2tóp
+r1u2tór
+r1u2tós
+r1u2tót
+r1u2tóv
1rú
-rú2d1a2
+rúda2
+rú2dad
+rú2d1al
+rú2d1ar
+rú2d1á
+rú2del
+rú2din
rú2du
-rú2ri
-2r1útj
-2r1ú2to
-2r1útr
+rú2dü
+rú1dy
+rú2d3z
+rú1gr
+2r1újd
+rú2jí
+2r1újk
+2r1újs
+2r1úr.
+2r1úrb
+2r1úrh
+2r1ú2ri
+2r1úrk
+2r1úrn
+rú2ro
+2r1úrr
+2r1úrt
+rú2szó
+rú2t1a2l
+2r1ú2t1e2
+2r1ú2té.
+rú2tér
+rú2tit
+2r1útk
+2r1útle
+2r1útm
+rúto2
+2rúts
+2r1ú2tü
+2r1útv
+rú2zsad
+rú2zse
1rü
+rü2dí
+rü2dü
+rü2gyel
+2rügyn
+rü2ha
+rü2la
+rü2lá
+rü2led
+rü2les
+rü2lép
rü2lér
-rü2l1öl
+rü2lí
+rü2l1o
+rü2ló
+rülö2
rü2l1ön
+rü2l1öz
+rü2l1őg
+rü2lu
+rü2lú
+rü2l1ül
2r1ünn
-2r1ü2r
-2rü2t
-2r1ü2v
-2r1ü2z
+2r1ü2nő
+rü2rí
+rü2rü
+rü2te
+rü2té
+rü2tö
+rü2tő
+rü2vö
+rü2ze
+rü2zé
1rű
-r1űrt
-rvas3s
-r2v1e2lői2
-rve2ra
-r2v1érte
-r2v1ip
+rű1gr
+rű1kl
+rű1pr
+2r1űr.
+2r1űrh
+2r1űrm
+rű2rö
+2r1űrt
+rű2s1orr
+rűs1ors
+rű1sp
+rű1str
+r2v1agá
+r2v1akc
+rva2lap
+r2v1alj
+r2v1alk
+r2v1a2rán
+rva2sáb
+rva2sék
+rvasu2
+r2v1a2szó
+rva1t2r
+rvavá2
+r2v1ága
+rvá2gyi
+r2vállam
+r2v1állo
+rv1állv
+rvá2nyad
+rvá2nyan
+rvá2nyú
+r2v1áp
+rvá2r1al
+r2v1á2ram
+rváro2s1os
+rv1á2rú
+r2v1á2sás
+r2v1áta
+rvá2tors
+r2v1e2b
+r2v1e2dz
+r2v1e2gye
+rv1ela
+rv1e2led
+rve2lemb
+r2ve2leme
+rv1e2les
+r2v1elk
+r2v1ell
+r2v1elo
+r2v1e2lőa
+rv1e2lőá
+r2v1e2lőkép
+r2v1előr
+r2velőz
+r2v1eng
+r2v1ep
+rve2r1a
+rve2r1á2
+r2v1e2retn
+rverés3s
+rve2rip
+rve2r1o
+r2v1e2rői
+r2v1e2sete
+r2v1e2sés
+r2v1ex
+rv1éke
+rv1ékk
+rv1ékn
+rv1ékü
+rv1é2lel
+r2v1é2lé
+rvé2ny1el
+r2v1ép
+r2v1é2rem
+r2v1é2ré.
+r2v1érés
+r2v1érp
+r2v1érté
+r2v1érv
+r2v1é2vet
+r2v1évi
+rv1fr
+r2v1ido
+r2v1iga
+rvigaz1
+r2v1igé
+r2v1ik
+r2v1inf
+rv1inte
+rv1inté
+r2v1i2p
+r2virán
+r2v1isme
+rvis3sze
+rv1ital
+rvi2z1a2
+rvi2z1á2
+rvi2z1elv
+rviz1o
+rvi2zó
+rvíze2
+rvíz1es
+rv1kl
+rv1kr
+r2v1ob
+r2v1olv
+r2v1op
r2v1or
rv1osz
-ry1é2
+r2v1ov
+r2v1ó2h
+r2v1órá
+rv1öss
+rv1ős
+rv1pr
+rv1sk
+rv1sp
+rv1st
+rv1tr
+r2v1ub
+r2v1u2t
+r2v1üg
+rvü2l
+r2v1ülé
+r2v1ülő
+r2v1ült
+r2v1üt
+r2v1ü2v
+r2v1ü2z
+ry2be
+ry2bó
+ry2bő
+ry1é2n
+ry2ho
+ry2na
+ry2ne
+ry2ra
+ry2re
+rys2n
+ry2tó
+ry2tő
+ry2va
+ry2ve
+r2z1a2dot
r2z1a2la
-rza2t1al
-r2z1ára
-rze2tel
-rzs1a2n
-rz3ság
-r2zső
-rz3sz
+r2z1alj
+r2z1alk
+rz1almás
+rza2sz
+r2z1aszó
+rza2tal
+rza2t1e2
+rza2tol
+r2z1áll
+rzá2r1ó2r
+rzá2se
+rzás1s
+rz1e2be
+rze1p2
+rz1est
+rze2tal
+rze2t1eg
+rze2t1e2l
+rzetes3s
+rze2t1o
+rzetü2két
+rzéna2
+rzé2n1al
+rzé2nat
+rzé2ná
+r2z1érm
+rzé2so
+rzi2ab
+rzis3s
+r2z1ín
+rzo2r1ál
+rzó2s3zár
+rzőa2
+rzőe2
+rz1p2r
+rzs1ala
+rzs1any
+rzs1apa
+r2zsaz
+r2z3sár.
+rz3seben
+r2zs1e2g
+r2zs1e2r
+r2zség
+r2zs1ék
+r2zs1ér.
+r2zséva
+r2zs1iga
+rzs1inj
+rzs1int
+r2zsip
+r2zsita
+rzs1or
+r2zs1ö2r
+r2zs1ő2
+rzs1s
+rzs1u2t
+rzs1úr
+rzs1ült
+rzu2sak
+rzu2san
+rzus3s
+rzu2s3z
+r2z1ut
+2s.
1sa
-2s1abr
-sa2cé
+2sabo
+2sabr
+2s1abs
+2s1a2cé
+sa2dalé
+2s1adap
+2s1a2data
+2s1a2dato
+2s1adató
+sadás1s
+2s1adm
+sa2dog
+sa2dóc
+sa2dód
+sa2dóé
+sa2dóh
sa2dói
sa2dój
-sa2dók
+sa2dóm
+sa2dón
sa2dór
-3sajd
-2s1ajta
-2sajtón
-sa2kan
-2sakar
-s1akc
-sa2k1el
-sa2kis
-sa2k1í
+sa2dóu
+sa2dóz
+sae2r
+sa1f2r
+2saga
+sa2gan
+sa2g1ál
+2sagg
+sa1gne
+2s1a2gó
+sa2gő
+sa1grá
+s1agy.
+s1agyb
+s1a2gyo
+sa2gyú
+3sah.
+saha2r
+sa2hov
+sa2ig
+2saja
+sa2jak
+sa2jág
+2saján
+sa2j1ö
+saj2tal
+saj2t1a2n
+saj2tar
+sajté2r
+saj2t1éré
+saj2tor
+saj2t1ö
+saj2t1ü2
+sa2k1ab
+2s1a2kad
+sa2k1an
+sa2kas
+2s1akci
+sak2k1a2r
+sak2k1as
+sakke2
+sak2k1eg
+sak2ker
+sak2kes
+sak2kis
+sak2kol
+sak2k1orr
+sak2k1ó2
+2sakku
+sa1klu
+2s1akna.
+2saknáb
+2saknái
+2s1aknák
+sak1ola
+sa2k1orm
+sa2k1ös
+sa1k2ru
+2s1akt.
+2s1akti
+2s1aktu
+sa2k1ug
+2s1a2kus
+sa1k2va
+2salab
+sala2g1
+sala2ka
+sa2laku
+2s1a2lapa
+sa2lapí
+sa2lapl
+sa2lapoz
+s1a2lapr
+sa2lapt
+salá2da
+2saláí
+salán1n
+salás1s
+2s1aláté
+2s1alb
+s1a2lel
+s1alépí
+salé2t
+sa2l1éte
2salf
-2salji
+2s1algáh
+2s1algái
+2s1algán
+2salgásat
+2s1aljai
+2s1aljáh
+2s1aljár
+2s1alját.
+2s1alka
+2s1alkot
+s1alku
2salm
-2salu
+2s1a2lomn
+2s1a2lomr
+sal2tag
+2s1alte
+2s1alth
+2s1altit
+sa2l1ú
+sa2m1any
+sa2mec
sa2m1il
-sa2mí
-sao2
-2sapa
-2sapá
-2sapr
-sa1pré
-sa2ran
-2s1a2ri
-3sas.
-sa2s1or
+sa2m1í
+sa2mol
+sa2m1osz
+2s1a2mő
+sa2nal
+sa2nat
+s2and
+2sane
+sa2nek
+2s1angy
+sa2nód
+sa3nö
+s1ante
+sa2nya.
+s1a2nyag
+sa3nyar
+2sanyá
+saó2r
+sa2p1a2dó
+sa2p1a2g
+sapa2te
+sa2pác
+sap1á2cs
+sap1áll
+sa2p1átm
+sa2páto
+sa2p1el
+sa2p1ék
+3sapka
+3sapkáb
+3sapkán
+3sapkás
+3sapkát
+3sapkáv
+sa2p1osz
+s1a2pókr
+s1a2pósab
+2sapp
+s1aprí
+sa1pro
+2sapu
+sa2ratá
+sa2rató
+sa2rány
+sar2c3ho
+sar2cin
+sa2rén
+sa2rit
+sar2j1e
+sar2k1e2
+3sarki
+sar2kin
+sar2kir
+sar2k1ö2
+3sarkú
+3sarló
+2sarm
+2sarom
+2sarz
+sase2
+sa2s1eb
+sa1s2m
+sa1s2po
+sas3sza
+sas3szá
sas3sze
2s1asszo
-sa2su
-2s1a2tom
+3sast
+sa2s1u2t
+sa2sú
+s1aszf
+2saszt
+sata2kés
+sa2t1alj
+sa2t1alt
+sa2t1a2nyá
+sat1apu
+sa2t1á2rak.
+sa2t1árka
+sa2t1érk
+sa2t1érr
+sa2t1i2k
+sa2t1ing
+s1atlé
+satmo1
+satmosz2
+2s1a2tombó
+2s1a2tomo
+sa2t1orm
+sa2t1ó2d
+sa2t1ó2né
+sa1t2rá
2saty
-sa2uc
-sa2un
-savar1a
-sa2v1ál
+sa2tyá
+sa2ul
+sa2urá
+2saut
+sa2uto
+s1autó.
+sautóé2r
+sautói2ko
+sa2uv
+3sav.
+3sava.
+sa2v1a2da
+sa2v1a2l
+3saván
+sav1ára
+sav1ária
+sa2v1árt
+sa2v1el
+sa2v1ér
+sav1ill
+sa2v1i2n
+sa2vő
+sa2vü
+sa2xi
+sa2zon
1sá
-sábe2
-sá2b1er
-sá2fo
+sá2b1ak
+sá2b1e2l
+sá2b1e2r
+sá2big
+sá2b1il
+sá2bö
+sá2buj
+sá2b1ut
+sá2bü
+sá2csá
+sá2gab
+sága2d
+ság1ada
+2ságadd
sá2gal
+sá2gan
+sá2gas
+2s1ágas.
+ság1ass
+sá2gat
+2s1á2gaz
sá2g1ál
-3ságb
-3ságd
-3sá2ge
-3ságé
-3ságf
-3ságg
-3ságh
-3sági
+sá2g1á2rak
+sá2g1árn
+sá2g1á2ru
+sá2g1e2
+sá2gép
+sá2g1i2ko
sá2gí
-3ságk
-3ságm
-3ságo
sá2g1osz
-3ságp
-3ságr
-3ságs
-3ságu
-3ságü
-2s1á2gy
-2s1áld
-2sáll
-3sámf
-sán1t2
-sá2r1a2g
-2s1á2rai.
-s1á2rak
-sá2r1al
+sá2g1ó2
+sá2g1ö
+sá2gő
+ság1s
+sá2gü
+sá2gű
+4s1á2gy
+ságy1a2d
+sáka2
+sá2kal
+sá2k1an
+sá2kar
+sá2kát
+sá2k1e2
+sákköz1
+sá2k1ö
+sá2kü
+s1álc
+sá2l1in
+2s1álm
+s1á2lomb
+3sámá
+sán2c1é
+sán2c3so
+sán1k2r
+sánt2
+sán1th
+sá2nü
+sá2p1ost
+sá2rad
+sár1adá
+sár1a2dó
+sá2r1ag
+sá2raj
+2s1á2rak.
+sá2raka
+2s1á2rakb
+2s1á2rakh
+2s1á2rakk
+2s1á2rakn
+2s1á2rako
+2s1á2rakr
+sá2rakt
+sá2r1a2l
2s1á2ram
+sá2r1a2n
+2sá2ras
+sár1ass
+sár1asz
+2s1á2rat
+sá2rág
sá2r1ál
-s1árbo
-sá2r1e
-2s1árfor
-2sáru
-s1á2ruk
-sá2rul
-s1á2rus
-2s1á2rú
+sár1d2
+sá2r1e2
+2sárét
+sá2r1év
+sá2ria.
+2s1á2riá
+sár1iko
+sá2r1i2p
+sá2r1i2s
+sá2rí
+sár1k2
+sá2r1osz
+sár1ott
+sár1óni
+sá2rö
+sá2rő
+2sárro
+sár1s2
+sárt2
+sár1tr
+sá2rug
+2s1á2ruh
+2s1á2rul
+2sárus
+sárú2
+2s1á2rú.
+sá2rü
+sá2s1ad
+sá2sar
sá2sás
+sá2s1e2
+sá2sis
sáskész1
-s1á2só
+sá2só
+2s1ásó.
+sás1ó2r
+2s1ásóv
+sá2sö
+sá2ső
+sás3sz
+sá2s3za
+sászá2r1a2d
+2s1á2szo
2sáta
s1átad
-s1átf
+sá2t1alj
+s1á2tál
+s1á2t1á2z
+2s1átb
+2s1átc
+2s1átd
+2s1á2t1e2
+2sáté
+sá2tél
+2s1átf
2sáth
-2s1á2ti
-s1á2tí
-2sátl
+2sáti
+sá2t1ir
+2s1á2tí
+2sátj
+2sátk
2s1átm
+s1á2tokt
+3sátor
+sátókész1
+2s1á2t1ö
+3sátra
+3sátrá
+s1átre
+2sáts
+2sátt
+s1áttö
+2sátu
2s1á2tü
2sátv
-sá2ve
-sá2v1i2
-sb2
-s1bl
-s1br
+s1átve
+s1átvé
+s1átvi
+3sáv.
+sá2v1a2d
+sáva2l
+sá2v1a2r
+sá2v1ál
+sá2v1á2r
+3sávb
+sá2v1e2
+sá2v1érz
+sá2vis
+sá2viz
+3sávj
+sá2v1or
+sá2vö
+3sávr
+3sávú
+3sávv
+sba2l1
+sbeá2
+sbér2cs
+sb2lo
+sb2lú
+sb2ra
+sb2ri
+sb2ro
+sb2ró
scar2
-s2ch
-1sche
-1sché
-sda2d1
-s1d2r
-s1dy
+1scheie
+sc3hek
+sc3hen
+sc3het
+sc3hé.
+1schébe.
+sc3héd
+1schéére
+1schére
+sc3hés
+sc3hi.
+sc3hig
+1schil
+sc2ri
+sda2dal
+sdai2
+sdeá2
+sde1b2
+sde2del
+sde1kr
+sdes2
+sde1sp
+sde1st
+sdesz2t
+sdi2ale
+sd2ra
+sd2rá
+sd2ro
+sd2ru
1se
-sea2
-se2bat
-se2b1o
-se2bó
-se2cs1a
-2s1e2dén
-2s1e2dz
-se2ger
-2s1e2gér
-segész1
+sea2d
+sea2l
+sea2n
+seá2l
+seá2r
+se2bag
+se2b1ak
+seb1alt
+sebá2
+se2b1ág
+se2bár
+se2b1e2g
+seb1ell
+seb1elz
+se2b1esh
+seb1esze
+s1e2béd
+3sebés
+se2b1ó2
+se2bö
+se2b1ő2
+seb1p
+seb1s
+se2b1u
+se2bú
+se2bül
+3sebzé
+secs1a2p
+se2csev
+se2cs1ék
+2sedez
+sedél1
+2sedény
+se1dra
+se1d2rá
+se2dzé
+se2dző
+see2l
+see2n
+2seff
+se1f2ra
+2s1e2ger
+3segéd
+2segér
+segés3s
+s1egész1
+2segét
+3segg
+seg2ga
+seg2go
+3segí
se2gyed
-2s1egz
-se2her
-se2il2
-se1kra
-2selá
+segy1e2l
+s1e2gyé
+2s1egyh
+2s1együ
+sehü2
+se2h1üv
+seí2r
+sej2t1a2
+sej2t1e2ny
+sej2ter
+sej2tér
+sej2t1o
+sej2tö
+seka2r
+se2k1ál
+2s1e2kés.
+sek2k1á
+sek2kos
+sek2k1ö
+se1klu
+se1k2ra
+se1k2ré
+se2kur
+se2kúr
+sel1ak
se2lál
-2s1elnö
-2selo
-se2l1os
-2s1e2lőa
-2s1e2lől
-2s1elto
-2s1e2lu
-2semel
-2semé
-2senc
-sen2d1ő2r
-se2nyer
-se2nyir
+2selb
+s1eldö
+2s1e2lef
+s1e2legy
+se2l1e2h
+se2l1eké
+se2lemek
+2s1e2lemé
+se2lemk
+se2lemm
+2s1e2lemz
+se2l1ere
+s1e2lesé
+sele2sz
+se2l1eszü
+sele2t1a2
+sele2t1e2l
+se2l1e2vé
+se2l1e2vő
+selés3s
+2self
+2s1elha
+2s1elhel
+s1elho
+sel1id
+se2lis
+2s1eljá
+s1ellá
+2selmél
+selnö2k1öl
+2s1elny
+s1e2los
+2s1e2lö
+se2lőad
+s1e2lőí
+2s1e2lőz
+2selr
+s1elta
+s1eltá
+2s1eltö
+2s1elv.
+2s1elvek
+s1elvű
+2s1elvv
+2selz
+2sember
+s1ember.
+s1emberb
+s1embern
+2s1embr
+2semén
+2semlé
+se2nat
+se2n1ál
+sen2d1a
+sen2d1á
+s1e2ner
+senés3s
+2s1enged
+sen1ist
+se2n1or
+s1enta
+seny1ag
+seny1ak
+se2ny1á2
+seny1ell
+seny1ere
+se2ny1él
+se2ny1ér.
+se2nyérd
+se2nyérte
+2senyhi.
+se2nyigé
+se2nyös
+se2nyu
se2nyú
-se2ö
-2s1e2pi
-2s1e2po
-se2rej
-2s1e2rő
-se2sá
-s1esem
-se2sés
-ses2ti
+se2ny1ü2l
+2senyve.
+s1enz
+seó2r
+se2pid
+s1epiz
+sep2pa
+sep2p1á2
+sep2per
+2sepri
+se1p2ro
+se1p2ró
+se2r1agy
+se2ral
+se2ram
+se2r1a2n
+se2r1a2r
+se2r1as
+se2rau
+se2r1á2g
+ser1áll
+se2rár
+s1erde
+2serdő
+sereg1g
+3seregs
+2serej
+se2r1e2lem.
+se2r1e2lő
+se2r1elt
+se2r1elv
+sere1p
+sere2pedő
+ser1e2sze.
+ser1eszk
+sere1t
+se2r1észb
+se2r1iga
+se2r1il
+seri2n
+se2r1ina
+ser1inf
+ser1ing
+ser1int
+se2ris
+se2riz
+ser1k
+se2r1ol
+se2ró
+s1eróz
+2se2rő
+s1erő.
+s1erőb
+s1erőd
+s1erőé
+s1erőf
+s1erők
+s1erőm
+s1erőn
+ser1ős.
+s1erőt
+s1erőv
+ser1s
+sert2
+ser1tr
+se2r1ü2g
+serví2
+2s1esemé
+2s1e2seté
+2s1esél
+2s1e2sés
+2seskü
+2s1e2ső
+se1s2p
+sessz1a2
+sesszé2l
+sessz1o
+2s1este
+se1sti
+s1eszen
+2seszk
s1eszkö
+2s1eszm
se2szű
-se2tik
-2seto
-se2tok
-se2t1ol
+se2t1a2la
+se2tana
+se2t1a2ny
+se2tát
+se2t1e2g
+set1eleg
+se2t1elk
+se2t1elm
+2setenk
+2setes.
+2setese
+2s1e2teté
+2s1e2tető
+seté2k
+se2t1ékb
+se2t1éké
+se2t1é2l
+se2t1énk
+se2t1ér.
+se2t1é2ri
+se2t1érté
+se2tika
+se2tiká
+se2tike
+se2t1ing
+se2tol
+set1old
+se1tran
+se1tri
+se1t2ro
+2settk
+seü2t
2s1e2vés
-se2vo
2s1e2vő
+se1ye
+se1yé
+se1yi
+s1ezr
1sé
-sé2g1a
+2s1ébr
+sé2f1a
+sé2f1á
+sé2g1a2
sé2g1á2
+3sége.
sé2g1eg
-sége2l
-sé2g1ele
-ség1eli
-sé2gés
+3ségei
+3ségek
+ség1ele
+sége2lem
+sé2g1ell
+3ségem
+sé2g1ent
+sé2ger
+ség1erk
+sé2g1esz
+sé2geté
+sé2g1e2ti
+sé2gev
+ség1é2je
+sé2g1é2k
+sé2gép
+sé2g1ér.
+sé2g1é2ré
+sé2g1érn
+sé2g1érr
+sé2g1értő
+sé2g1é2rü
+sé2g1érv
ség1ész
ség3g
-sé2gigé
-sé2g1í2
-sé2g1o2
+ség1iga
+sé2g1igé
+ség1ist
+sé2gí
+3ségk
+ségo2
+sé2g1ok
+sé2gol
+sé2g1ó2
+sé2gör
+sé2gő2
+ség1őr
+ség1ős
ség1s
+sé2gu
+sé2gú
+3ségü
+sé2g1ü2lő
+ség1ült
2s1éh.
+2s1é2he.
+2s1é2hek
+2s1é2hes
+2s1é2het
+2s1é2hé
+2s1éhh
+2s1éhr
2s1éhs
-s1élm
+sé2jem
+s1é2ji
+s1éjs
+sé2kek
+s1ékho
+2s1ékm
+2s1éks
+sé2k1ú
+sé2lel
+s1é2let
+2séll
+2s1élm
+sélőkész1
+sé2lű
2sély
+sé2lya
sé2lyeg
-sé2mas
+3sémá
sé2mu
-s1é2pí
-sé2pü
-2s1érc
-sé2rin
-s1értel
+s1é2nekb
+2s1é2neke
+s1é2neké
+2s1é2nekh
+2s1é2neki
+s1é2nekk
+2sénekl
+2s1é2nekn
+s1é2nekr
+s1é2nekt
+s1é2nekü
+2s1é2pí
+2s1é2pü
+sé2ral
+sé2ran
+sé2rát
+2sérb
+2sérc
+s1érde
+sé2réé
+sé2rie
+sé2rig
+s1érlel
+2sérm
+sé3ró
+2sérr
+s1értéke
+3sérvb
+s1érvei
+3sérvem
+3sérves
+3sérvh
+3sérvr
+3sérvv
+4sé1ry
2s1érz
-2s1étk
+2sésdi
+2séseki
+sé2s1el
+2séssz
+2séstú
+sész1ak
+sé2sz1á
+sé2sz1emb
+sé2szir
+sé2sz1o
+sész3s
+sét1abl
+sé2t1a2d
+2sétk
+sé2t1o
+sétő2
+sé2t1őr
+2sétr
2sétt
2sétv
+2s1év.
+2s1évad
+2s1évb
2séve.
-sé2vei
-s1f2
-s1g2
-sha2k
-s2hi.
-s2hin
+2s1é2ved
+2sévei
+2s1é2vek
+2s1é2ven
+2sévet
+2sévéb
+2s1é2véi
+2sévén
+2sévét
+2sévév
+2s1évf
+2sévh
+2sévi.
+2s1évk
+2s1évn
+2s1évr
+2s1évt
+2s1é2vü
+2s1évv
+sfaá3gac
+sfa2gy1al
+sfenyőé2
+sfé2má
+sfé2m1e2kéh
+sfé2m1é
+sfé2mi
+sfiúé2
+sfi2úéra
+sfi2úét
+sf2le
+sf2lo
+sf2ló
+sf2lu
+sfo2k1út
+sf2ra
+sf2rá
+sf2re
+sf2ri
+sf2rí
+sf2ro
+sf2rö
+sga1b
+sga1d2
+sga1p
+sga1tr
+sge2o
+sg2le
+sg2ló
+sg2nó
+s1g2ra
+sg2rá
+sg2ri
+sg2ró
+shelyü2kü
+1s2hi.
+1s2hih
+1s2hij
+1s2hik
+shitköz1
+s2hop
+s2horr
+3s2how
+shú2sár
+shús1s
1si
-si2bá
-si2dé
-s1i2dő
+si2ac
+sia2d
+si2aé
+si3ak
+sia2l
+sia2ny
+siá2ro
+si2b1á2
+sibilis1
+sidás1s
+si2dea
+si2deá
+si2deg
+si2dei
+si2den
+si2deo
+s2idet
+2sidé
+s1i2dén
+si2dom
+2s1i2dő
+si2du
+si2eg
sie2l
-si2em
+si2en
+si2eu
2s1ifj
2siga
-s1i2gaz
-si2ge.
+s1i2gazo
+2sigá
+2sige
+s1i2ge.
+s1i2gek
+s1i2ges
2s1i2gé
-si1gl
-sig2ni
-s1i2nas
+sig2n1e
+sig2n1ó2
+2siha
+3sihed
+2s1ihl
+si2k1a2n
+sike2r1esz
+sike2s
+si2k1in
+si2k1ir
+si2k1old
+s1i2konh
+s1i2konj
+2s1i2konk
+s1i2konn
+2s1i2kono
+s1i2konr
+2s1i2kont
+s1i2konu
+sik1orr
+si1kré
+sikus1s
+2simád
+si2m1el
+s1i2mit
+3simí
+3simog
+2simp
+s1impor
+si2m1u2t
+2s1i2nas
+2sind
+s1indu
+si2ner
2sinf
-si2ójá
-2sipa
-si2rod
-3sisak
-2sisk
-2s1isp
+2singa
+s1ingá
+s1inget
+s1ingé
+s1ingók
+si2nic
+2sinj
+2s1inku
+2s1ins
+s1inte
+2sinv
+s1invá
+2s1inz
+si2onn
+s1i2ono
+si2óa
+si2óá
+si2óc
+si2óda
+si2óe
+si2óg
+si2ói2k
+si2óo
+si2óp
+si2óú
+2sipar.
+2sipara
+2sipará
+2siparb
+2s1iparc
+2siparh
+2siparm
+2siparn
+2s1i2paro
+2siparr
+2sipartá
+2sipartó
+2siparu
+3sipí
+3sipka
+3sipká
+3sipol
+2s1i2ram
+s1irg
+2s1irh
+2siro
+s1i2rod
+2s1i2rón
+2sirt
+s1irtó
+si2sad
+si2sél
+si2s1is
+si2s1í2
sis3s
+sist2
si2s1ü2
-si2tal
-si2tá
-siú2
+si2s3zab
+s1i2tal
+sita2li
+si2te.
+si2t1i
+si2t1ö
+sit2tin
+3sity
+siú2t
+2s1i2vad
+2s1i2var
+2sivás
+3siví
+2s1i2vó
+2sizé
+si2zé.
+si2zéb
s1izmo
-2sizo
-si2zol
-si2zom
1sí
-sí2ka
-sí2ke
-sí2nü
-sí2r1e2
-sító1b
-2sív
-s1í2zes
-s1ízü
-sk2
-skás3s
-1s2kic
-ski2s1a
-s1kl
-sközé2
-skö2z1él
-s1kv
-1s2lag
-sla2te
-1s2lav
-sle2t1á2
-sme2g1á
-smerés1s
+sí2gé
+sí2ja
+sí2ju
+sí2kas
+síke2
+sí2k1er
+sí2kí
+sí2kü
+sína2
+sí2nac
+sí2nal
+sí2nan
+sí2n1á2
+sí2nel
+sí2nö
+2síns
+sí2n1ú
+sí2r1ad
+sí2r1ál
+sírá2s3z
+sír1á2to
+sí2red
+sí2r1e2m
+sí2ren
+sí2res
+sí2r1e2t
+sí2r1én
+sí2rir
+sí2rí
+s1í2róa
+sí2róf
+sí2ról
+sí2róp
+sí2rö
+sír2t1e2v
+sí2r1ü
+sí1sp
+sí1st
+síté2kol
+2sítél
+sítés3s
+sítőa2
+sítőe2
+sí1tr
+2s1ív.
+sí2vá
+2s1ívb
+s1í2vek
+s1í2ven
+s1í2vet
+sí2vé
+sí2vű
+sí2za
+sí2ze.
+2s1ízl
+s1ízr
+2sízü
+sí2zül
+sje2gy1á2
+skao2
+skapocs1
+ska2r1i2m
+skaros3
+ska2ró2r
+ska1sm
+skat2
+ska1tr
+skau2
+1skálák
+1skálár
+ske1p2
+ske1s2p
+ské2p1el
+skiá2
+1s2kicc
+skie2
+sk2jö
+sk2la
+sk2li
+sk2lí
+sk2lo
+sk2ló
+sk2lu
+skolás1s
+s2korpi
+sko2s1a2rai
+skó1p
+s1k2rá
+s1k2ré
+s1k2rit
+sk2rí
+sk2rón
+sk2ru
+sk2va
+sk2vi
+sk2vó
+sky1ér
+sky1i
+sla1d2
+sla2g1e2
+sla1s2p
+sla2t1a2l
+sla2t1a2n
+sla2tel
+sla2tev
+sla2tés
+sla2t1é2t
+s2lág
+1slágerei
+slá2nyal
+slás3s
+slega2
+sleg1g
+sleí2
+sle2tal
+sle2t1el
+sle2t1em
+sle2tél
+sleves1s
+sléi2
+sléke2
+slé2kev
+slé2k1ol
+slés3s
+slic2c1elv
+sli2d
+sli2ká
+1s2liss
+slős2
+s2lus
+smaó2
+smarc2
+smas2
+sma1sp
+3s2már.
+3s2máru
+sme2g1a2
+sme2g1é
+smen2tel
+1smirg
+sna2pal
+sna2p1e
+sna2p1or
+snap2sz1e2
+sne1yi
+snit2t1elv
+snőé2h
1so
-2sob
+s1obj
+so1c2k
+sodaéne2
+soda1g2
so2d1e
-sodé2
+so2dén
so2dév
+so2did
+so2dis
+so2dí
+so2dob
+so2d1org
so2d1os
-2sodú
-3sof
-so2kaj
+so2dö
+so2dő
+sodrás1s
+so2dú
+sod1út
+so2dü
+so2d3z
+so2kab
+so2kai
+so2k1aj
+so2k1a2la
+so2k1ap
so2kar
-so2ke
-so2kir
-2s1okke
-2s1o2kos
-so2kó
+soka2t
+so2k1ato
+so2k1ál
+so2k1árn
+so2k1e2
+sok1ill
+so2kí
+3sokk.
+sokka2l
+sok2k1ala
+sok2k1a2p
+2sokke
+sok2k1el
+sok2kir
+sok2k1ö2v
+sok2k1ü
+2sokl
+2sokm
+so2kok
+sok1old
+2so2kos
+2s1o2koz
+so2k1ó2
2sokta
-s1o2laj
-s1oldó
-s1oltó
-so2n1al
+s1oktat
+so2k1ú2
+so2kü
+2s1o2laj
+sola2j1á2r
+sola2je
+sola2tel
+solás1s
+2s1olda
+2s1oldá
+2soldó
+s1oldó.
+s1oldók
+s1oldóm
+s1oldón
+s1oldór
+s1oldót
+s1oldóv
+so2lim
+2s1olló
+solóó2
+s1oltás
+2solvas
+so2lyan
+so2lyó
+so2m1ad
+somag1g
+so2m1a2l
+soma2t
+som1ato
+so2m1e2
+so2mél
+so2m1éte
+so2mil
+so2m1ita
+so2mí
+so2m1odo
+som1ort
+so2m1osz
+som1p
+so2mú
+so2mü
+son2ch
+2sond
so2n1e
-so2n1é
-son2t1ár
-son2t1e
+son2kál
+son2k1e2
+2sonó
+son2tab
+son2t1a2l
+son2t1a2n
+son2tar
+son2t1á2r
+son2t1e2
+sonté2r
+son2t1éré
+son2tik
+son2tip
+son2tö
+son2tő
+2sonv
so2nye
+so2nyis
+so2ór
+so2ós
+s1opc
+s1o2pe
+sor1ada
+sor1ala
sor1áll
-so2r1e2
+so2r1átl
+3so2r1e2
+sor1f2
+s1orgi
+so2rid
+2sorie
+so2rif
+so2rim
+so2r1ing
+so2ris
+3sorké
+sormű1
+sorműt2
+sor1oszt
+3soroza
+so2r1ó2
+so2rö
+so2rő
+2s1orr.
+s1orrát
+2sorrb
+2s1orrn
+2s1orro
2s1orrú
-3sort
+3sors.
+sor2sal
+sor2sar
+sor2sas
+sor2s1e2
+sor2sir
+2sorsó
+sor2sü
+sor1sz
+sor2szón
+sor1tre
+sorú2t
+so2r1úto
+so2rü
+so2rű
+2s1osto
+2s1ostr
+s1osty
2sosz
+s1oszl
s1oszt
-2s1otth
-2s1o2x
+so2ul
+so2ur
+so2ve
+so2vis
+so2xi
1só
-só2kál
-2s1ó2lo2
-2sórá
+sóá2g
+sóá2r
+sócsapá2
+só2dái
+só2dák
+só2dáv
+sógé2p1e2ké
+só1g2r
+sói2g
+sóí2v
+só2k1a2d
+só2kil
+só2kim
+só2kó
+só1kré
+sómű1
+só2né.
+só2ni
+sóó2r
+só2rai
+só2ráb
+só2rái
+só2ráj
+só2rám
só2rán
-sós3s
+só2rár
+só2rát
+só2riá
+só2s1ü2
+só1sz
+sótá2ny1ér
+só1t2r
+2s1ótv
+2s1ó2vó
1sö
-2s1öbl
-2söc
-s1öko
-s1önte
-2s1öntv
-sö2r1i2
-2sös
+sö2bű
+sö2ga
+sö2gá
+sö2g1e2l
+sö2g1em
+sö2g1ék
+sög3g
+sö2go
+sö2g1ö2lé
+sö2g1ölt
+sö2gű
+sö2ka
+sö2k1el
+sö2kid
+2s1ö2ko
+s1ö2kör
+sö2kú
+sö2lőj
+s1ö2lőz
+s1öly
+sö2na
+sö2ná
+sön2d1a2
+sö2no
+sö2n1öl
+sö2n1ő
+s1öntv
+sö2nú
+3sör.
+sö2ra
+sö2rá
+3sörb
+2sörd
+sö2r1ed
+sö2reg
+sö2ren
+sör1f2
+sö2r1iz
+3sörk
+sö2ro
+sö2ró
+sö2r1ö2l
+sö2r1ő
+sör1s
+sö2ru
+2sörv
+s1össz
s1ösv
+s1ösz
+2s1ötl
+2s1ötv
+2s1öv.
+2söve
+s1övv
+s1ö2zön
1ső
-sőe2
-sőé2
-s1őrm
-s1őrn
-ső2sok
-1sparh
-1s2páj
-spiros1
+sőa2c
+sőa2l
+sőa2n
+2sőá2g
+ső1bl
+2sőbok
+ső2dad
+ső2dalk
+ső2dá
+ső2del
+ső2din
+ső2d1ő2r
+ső1dro
+sőe2l
+sőe2r
+sőe2s
+ső1gr
+ső1kl
+ső1pl
+ső1pn
+ső1pr
+ső2r1aj
+ső2r1á2csot
+ső2riz
+ső2rol
+sőr1ö2l
+s1őrti
+s1őrz
+ső2s1av
+ső2sim
+sős1orra.
+ső2s1orrá
+ső2s1orró
+ső1s2p
+ső1sta
+ső1str
+sősü2
+ső2s1ül
+ső2s1üt
+ső2szap
+ső2sz1áll
+sőszé2k
+sősz1éké
+ső2sz1í
+spa2d1a2
+s2patu
+s2páj
+spá2n1a
+1s2párg
+3s2peci
+1spektr
+1s2peku
+1s2pék
+s2p1ér
+1spirálú
spis3s
-sp2l
-spor2te
-spor2tö
-1s2pór
-3spra
-s1pro
-s1p2s
+sp2le2
+s1p2lé
+sp2lu
+sp2ne
+1s2pong
+sporta2
+spor2t1al
+1s2portág
+spor2tár
+3s2portb
+spor2t1e2
+1s2porté
+spor2t1érd
+1s2porth
+spor2t1i2n
+1s2portj
+1s2portn
+1s2portoka
+1s2portol
+1s2porton
+1s2portos
+3s2portot
+spor2t1ö
+spor2tő
+1s2portra
+1s2portró
+1s2porttó
+1s2portu
+spor2t1ü2
+1spórák.
+1spórol
+sp2ra
+s1prak
+3spray
+s1p2re
+s1p2ré
+1spric
+s1p2ro
+s1p2ró
+sp2sz
+1s2raf
srau2
-sren2d1ő
-sré2z1
-1s2róf
-s1s2k
-ss2rá
-ss3s
-sst2
-s1s2ta
-ss2tí
+1s2ráco
+sren2d1ő2
+3s2róf
+srú2de
+ssab2b1i
+ssa2vo
+sság3g
+ssé2g1e2l
+ssé2g1é2j
+ssé2gid
+s2s1ékt
+s2s1i2z
+ss2kál
+ss2ko
+ss1k2r
+ss2lá
+sso2m1o
+ss2pó
+s1s2rá
+ss3sz
+ss2tad
+ss2tar
+ss2tat
+s1s2tí
+ss2to
+s1st2r
+ss2tú
+ss1ura
+ssy1ér
+ssy1ét
s2sz
+sszae2
+ssza1p2r
sszat2
-ssz1á2ru
-s3szele
-s3szél
-s3szép
-ssz1ér.
+ssza1tr
+ssz1á2g
+ssz1á2ram
+ssz1á2ruk
+ssz1á2sz
+s3száza
+s3szedé
+sszeg1ér.
+sszegü2l
+ssze2g1ülő
+ssz1egye
+s3szekv
+ssz1e2lőa
+s3szeml
+s3szemm
+ssze1p2
+ssze2reib
+ssze2reid
+ssze2rein
+ssze2reké
+ssze2rekt
+ssze2rem.
+ssze2remm
+ssze2rese
+sszer2t1á2r
+ssze1t2r
+s3széki
+ssz1é2lő
+sszér1in
+s3széto
+s3szige
ssz1ing
-s3szom
-s3szóko
-s3szól
+sszis1s
+sszí2vel
+ssz1k2
+sszkész1
+s3szob
+ssz1osz
+ssz1ósá
+s3szöc
+s3ször
ssz1ös
s3szöv
-ssz3s
+ssz1p2
+ss3zsi
sszt2
-s3sztr
-s3szű
+ssz1tro
+s3szur
+sszus1s
+ssz1úr.
+1stabil
+1stadio
+st1a2dó
1stafí
s2t1alj
s2t1alk
-1stansan
-s2t1a2rá
-1stájg
-s2t1eb
-1steinig
-1steinj
-1steinr
-1steint
-ste2ná
-ste2ra
+s2tand
+1standa
+sta2n1ó2r
+stan2s1é
+st1a2nyag
+s2tarc
+1s2tart.
+star2tas
+1startos
+1s2tartot
+1startt
+sta1sl
+sta1s2t
+sta1t2r
+sta3u
+stau2t
+s2t1a2x
+st1azo
+3stáb.
+1stábj
+1stábk
+1stábn
+1stábot
+st1ág.
+st1áld
+stán2c1ol
+stán2s1á2
+stá2riá
+s2t1árka
+s2t1árká
+st1á2t1a2
+st1áts
+1s2tátu
+st1átv
+st1br
+st1dr
+ste2a
+1s2teak
+s2t1ebé
+s2tedén
+s2t1e2gy
+s2t1e2ke.
+s2t1elf
+s2t1elh
+s2t1ellen
+s2t1elm
+s2t1e2lo
+s2t1elö
+s2t1e2lő
+s2t1elr
+s2t1elt
+s2t1elv
+s2t1ember
+s2t1e2mel
+s2t1eml
+ste2n1a
+ste2n1á
+ste2neg
+ste2n1és
+sten3n
+ste2nos
+ste2n1ő2
+1stepp
+ste2rad
+ste2raj
+ste2ral
+ste2rav
+ste2rác
+ste2rál
+ste2r1e2le
+1sterili
+ste2r1int
+ste2ris
+ste2r1o
+s2t1erő
+ste2sz
+s2t1eszm
ste2u
+1stégek
+1stéget
+1stégg
+1stégr
+sté2k1a2
sté2ká
-s2t1é2li
+stékát1
+stékáta2
+sté2k1el
+st1é2kesí
+st1ékí
+sté2k1o
+sté2ku
+s2t1é2le
+st1é2lé
+s2t1élm
+s2t1élt
+st1élv
s2t1érc
-st1érm
+s2t1érem
+s2t1é2ré
+s2t1é2rőt
+s2t1érté
s2t1érz
-s2t1i2r
-1s2tíl
-st1íz
-sto1g2
+stés3s
+s2t1észl
+s2t1étk
+s2t1é2ve.
+st1fl
+st1fr
+st1gr
+s2t1i2d
+sti2g
+s2t1ige
+s2t1igé
+s2t1i2ma
+s2t1i2má
+1s2timm
+s2t1imp
+sti2na.
+s2t1ind
+s2tinf
+s2t1ing
+s2t1inv
+s2t1i2o
+st1i2pa
+st1irá
+st1iró
+stis3s
+sti2sz
+s2t1isza
+s2t1i2vá
+st1i2zo
+s2t1íj
+3s2tíl
+s2tír
+st1írá
+st1í2v
+st1í2z
+stká2ro
+st1kr
+st1kv
+stola2t
+sto2lato
+sto2p1a
+1s2topb
+1s2toph
+1s2topr
+1s2topt
+sto2rál
+sto2rás
+sto2re
sto2ris
-stő2r
-st1őr.
-st1őrc
-st1őre
-st1őrö
-st1őrs
-s1trag
-st2rap
+st1o2x
+3s2tóla
+3s2tólá
+st1ó2rá
+1s2tós
+stö2k1ölt
+s2t1önt
+s2t1örö
+s2t1össz
+stőa2
+stőe2
+stőkész1
+s2t1őra
+s2t1őrb
+s2t1őrc
+s2t1őreg
+s2t1őrei
+s2t1őré.
+s2t1őrén
+s2t1őrér
+s2t1őrév
+s2t1őrf
+s2t1őrg
+s2t1őrh
+s2t1ő2ri
+st1őrl
+s2t1őrm
+s2t1őrn
+st1őrp
+s2t1őrs
+s2t1ő2rü
+s2t1őrv
+st1pf
+st1pl
+st1pr
+1strando
+1st2rap
+1straté
+s1trág
+1st2réb
+s1t2rén
+st2riá
st2róf
+1strófá
+1st2ruc
1struktú
-st1új
-s2t1ür
+st1sc
+st1st
+st1sz
+st1t2r
+s2t1udv
+1stukk
+st1uni
+st1u2ral
+3s2túd
+st1úr.
+st1út
+s2t1üg
+s2t1ü2lő
+st1üst
+s2t1üt
+s2t1ü2v
+s2t1űr.
+s2t1ű2ri
+s2t1űrn
+s2t1űrt
1su
+suá2r
+subi1
+s1udm
+2s1udv
+3sugár.
+3sugárr
2s1ugr
-2s1ujj
-s1u2ra
-s1u2rá
+3suhi
+2sujj
+suj2j1a2da
+su2k1ará
+su2ke
+su2k1ö
+su2k1ü
+3summ
+su2nal
+2s1und
+2s1u2ni
+su2no
+supe2
+2sura
+s1u2rad
+su2rai
+su2rak
+su2ral
+su2rat
+su2rát
2surn
-su2tal
+2s1u2ru
+su2szo
+2s1u2tac
+2s1u2tad
+2sutak
+s1u2tal
+2s1u2tam
+2s1u2tan
sutas1s
-2sutá
-su2tó
-2suz
+2s1u2tat
+2su2tazi
+s1u2tazó
+2s1utc
+2sutó
+su2tód
+2sutu
1sú
-sú2cse
-s1újd
-2sújí
-s1újs
+sú2csal
+sú2csat
+sú2csem
+sú2cser
+sú2csip
+súcská2
+sú2cs1ö
+sú2cs1ü2
+súcs3z
+súdi2
+súi2m
+s1újh
+2s1ú2jí
+2s1újs
+3súly
2súr.
-sú2r1as
-s1úrb
-sú2t1á
-sú2té
-sú2ti
-sú2tü
+2súrb
+2súré
+2súrh
+2súri
+2súrk
+3súrl
+2súrn
+2súrp
+2súrr
+2súrt
+sú2sén
+sú2só
+2súsz
+súszó2s3z
+2s1útb
+sút1en
+2súté
+s1úth
+2súti
+sú2tig
+2s1útj
+2s1útk
+s1útn
+2súto
+s1ú2ton
+sú2t1ő
+2s1útr
+2s1útt
+sútü2
+sút1üz
+2s1útv
1sü
-2süd
+sü2d1e
+sü2dí
+sü2dü
+3sü3gé
+s1üggy
2s1ü2gy
-2süld
-sü2nő
-sü2re
-sü2rü
-2süs
-sü2sz
-3sütő
-2s1ü2z
+3sü2k1a
+sü2kü
+2süldö
+sü2led
+3sültr
+sülye2
+sü2lyes
+sü2ná
+süne2
+sü2nev
+sü2n1é
+2s1ü2nő
+sü2rí
+2s1ü2rü
+2süst
+2s1ü2sz
+2sütk
+3sütőb
+sü2ze
+sü2zé
1sű
-sűs1
-1s2vin
+sű1pr
+sű2r1a
+3sűrí
+s1ű2ru
+sű2ző
+sva2s1u2
+svá2gy1ón.
+svá2nyan
+svá2r1al
+svárosi2
+sven1
+svezetőé2
+své2nyel
+své2tes
+svíze2
+svíz1es
+s2vun
+sw2hi
+swhisky2
+sy2bő
+sy1ig
s2z
1sza
-2szac
-sza2dá
-sz1a2dó
-3szaká
+szaa2
+3szabáz
+3szabd
+sz1a2dás
+2sz1a2dó
+szaé2
+3szaft
+3szag.
+3szagb
+3szagú
+2szagy.
+2szagya
+2szaj.
+2szajá
+2szajj
+2szajú
+2szakci
3szakm
-3szaks
-2sz1alj
-2szalk
-sz1ass
-sza1tro
+sza2k1ó2r
+sza2köz
+2szalás
+2sz1alb
+2sz1alf
+2szalg
+2szalj
+sz1alj.
+sz1aljak
+sz1aljo
+2szall
+2szaln
+2sz1alp
+2sz1als
+2szalt.
+2sz1alte
+2szalto
+2szaltu
+2szane
+sz1antr
+2szanya
+2szanyó
+2szap.
+2szapá
+2szapb
+sza2pel
+2szapé
+2szaph
+2szapi
+2szapj
+2szapn
+2szapr
+2szapt
+2szarán
+3szarb
+2szarc
+2szaré
+3szart
+3szarv
+2szasp
+sz1assz
+sz1aszt
+sza2tala
+3szaty
+2szaut
+szau2ta
+3szax
+2szazo
1szá
-3szám
-szá2m1e
-szá2m1ér
-s3záp
-3szárn
-3szárú
-3száza
-3százn
-3százö
-szd2
-sz1dr
+2szábr
+2szágó
+2szágy
+szá2gyá
+szá2gyo
+szá2j1e
+szá2ke
+2száldo
+szá2lin
+3szálú
+szá2man
+szá2mar
+3számá
+szá2mál
+3számc
+szá2m1e2
+3számé
+szá2m1érté
+3számí
+3számk
+3száml
+3számm
+3számn
+szá2mor
+3számt
+3számú
+3szánd
+3szánt
+2száp
+2száradd
+2szárás
+szá2r1e
+2száriá
+3szárí
+3szárm
+szá2r1ó2ra
+szárt2
+2száru.
+2száruh
+2szárus
+2szásó.
+2szátd
+2sz1á2t1é
+2száti
+2szátl
+2szátm
+2szá2t1ö
+2száts
+2sz1átu
+2sz1á2tü
+2szátv
+sz1bl
+sz1br
+1szcéna
+sz1cl
+sz1d2r
1sze
+2szeb.
+2szebé
+2szech
+2szecse
2szedz
-3szekr
+2szeger
+3szegfű
+2szegz
+2szeh
+3szekcső.
+sze2keg
+2szekéit
+2szekés
+sze2kés.
+3szekrén
+3szekto
+3szele.
+2szelef
+2szelemb
+2szelemek
+2szelemé
+2sz1e2lemk
+2szelemm
+2sz1e2lemr
+2szelemü
2szelemz
+2szelere
+3szelet
+3szelén
+2sz1elf
+2sz1elgo
+2sz1elha
+2szelhá
+2sz1eljá
+2szelkü
+2sz1ellá
+3szellő
2sz1elm
-3szemc
-3szemü
+2szelnev
+2szelnö
+2szelo
+2szelö
+2sz1e2lőá
+sze2lődö
+2sz1e2lőf
+sze2lőré
+2szelső
+2sz1elszá
+2sz1elta
+2szeltá
+2szeltű
+2szelu
+2sz1elül
+2szelv.
+2sz1elvá
+2szelvek
+2szelves
+2szelvez
+sz1elvi
+2szelvn
+2szelvt
+2sz1elz
+2szember
+3szemek
+3személ
+3szem1p2
3szemű.
-3szend
-3szepl
+2szenc
+2szener
+3szenny
+3szentm
+3szenz
+szeo2
+2szepi
+sze2r1á2l
+2szeredm
+szer1e2ge
sze2rej
-3szerk
+3szerel
+szer1eszt
+3szerke
3szers
+3szerta
+szer2tálo
3szerv
+szervíz1
3szerz
-2szesem
-sze1tro
-sz1ezr
+2sz1esd
+2sz1esemé
+2szesetb
+2szesete
+2szeseté
+2szeseti
+2szesetr
+2sz1e2sés
+2szeskü
+2szeső
+sze1sp
+2szeste
+2szesté
+2szesti
+2szestj
+2szestr
+sze2t1e2lő
+sze2t1é2k
+2szetika
+sze2ton
+sze2tőr
+2szeve
+2szevő
+2szexp
+3szezo
+2szezr
1szé
-3széké
-szé2nö
-sz1érc
+2széber
+2szébr
+2szég.
+2szége
+2szégő
+2szégr
+2széhe.
+2széhen
+2széhet
+2széhs
+2széji
+3széke.
+3széked
+3székei
+3székek
+3székem
+3székes
+2székez
+3székéb
+3székév
+szé2k1ol
+szé2kos
+3széks
+3székü
+3szélek
+2széneke
+2szénekn
+szé1pró
+3széps
+2sz1ér.
+2sz1érb
+2sz1érc
2sz1érd
-2sz1éré
+sz1é2rel
+2szérem
+szé2rem.
+szé2remm
+2sz1é2ren
+2széré
+szé2ré.
+szé2rén
+szé2rér
+szé2rét
+szé2rév
+sz1érf
+sz1érg
+sz1érh
+2sz1érin
+sz1érj
+2sz1érk
+2sz1érl
+2sz1érm
+sz1érn
+2szérő.
+2szérői
+2szérők
+2szérőt
+sz1érp
+2sz1érr
+sz1érs
sz1értá
-2szérté
-sz1érv
-széte2
-1szférá
+2sz1érte
+2sz1érté
+sz1értí
+2sz1értő
+3széru
+2sz1é2rü
+2sz1érv
+2sz1érz
+szé2tel
+széte2s
+2szév.
+2szévad
+2szévb
+2széve.
+2szévei
+2szévek
+2sz1é2vet
+2szévén
+2szévét
+2szévév
+2szévf
+2szévi
+2szévk
+2szévn
+2szévr
+2szévs
+2szévt
+2szévü
+1szférai
+1szféráé
+1szféráso
+sz1fl
+sz1fr
+sz1gl
1szi
-2szic
-2sz1iga
-sz1igé
-3szigo
+szi2ab
+2szide
+2sz1idé
+2szidő
+2szifj
+2sz1i2ga
+2sz1igé
+3szign
+szi2k1a2s
+szi2k1e2r
+szi2k1ó2
+sz1imak
+2sz1i2má
3szimb
-2szira
-2szisk
-2szism
-sz1isza
+sz1impr
+2szimpu
+2szinas
+2szinde
+2szindí
+2szindu
+sz1info
+2szing
+sz1inko
+2szinteg
+2szio
+2szirat
+2szirá
+2sz1i2ri
+2szirod
+szi2sí
+2sz1i2sza
+szi2szá
+3szitu
+2szivad
+2szivás
+2szivó
+sz1izg
+2sz1izz
1szí
+2sz1íg
+3színe
+2színna
+szí2vár
+2szívi
3szívű
-1szkóp.
-1szkópk
-1szkópo
-1szkópp
+2sz1íz
+szka1pr
+1szkarab
+szk1arch
+1szkenn
+1szlávh
+1szlávok
+1szleng.
+1szlengn
+1szlengr
+szle2t1e2l
+szle2t1o
+1szloge
+1sz2mok
+1sznob
1szo
-3szob
+2szobj
+2szoda.
+2szodai
+2szodak
+2szodú
3szof
+3szoká
+2szokke
+2szokoz
+2szoksö
+2szolaj
szo2l1ál
-3szorg
+2szolda
+sz1oldá
+2szoldó
+2szo2lim
+2szolló
+2sz1oltár
+2szoltás
+2szolvad
+2szolvas
+2szombor.
+3szoms
+szo2nas
+szo2nár
+3szond
+2szora
+szo2r1ál
+2szorm
+2szorn
2szors
2szorv
+2szostá
+2szosto
+2sz1otth
+3szov
+2sz1ox
1szó
+2szólm
+3szóló
+2szónád
+2szónái
+2szóni
+2szónod
+2sz1ó2rán
+2szórát
+2szóri
+szó2sík
+3szósz.
+szósza2k
+szó2száll
+szó2szón
+szó2szülő
+szó1tr
1szö
+2szöbli
3szöge
-3szögk
-2szövv
+2szöldes
+2sz1öle
+2szöre
+2szöv.
+2szövei
+2sz1öz
1sző
-3szől
-szs2
+szőa2
+szőe2r
+szőé2
+3szőlő
+sző2ra
+sz1ősi
+2szőz
+sz1őze
+1sz2pí
+sz1pl
+1szponz
+szrádi2
+sz3saj
sz3sap
sz3sas
+sz3sav
s3zsák
+sz3sán
sz3sár
+sz3sás
sz3sát
+sz3sáv
sz3seg
-sz3sel
s3zsem
+s3zsen
+sz3sep
sz3ser
sz3sé
+sz3sh
sz3sik
-sz3sir
-sz3so
+s3zsin
+sz3sis
+sz3siv
+sz3sín
+sz3s2k
+sz3sl
+sz3sod
+sz3sok
+s3zsol
+sz3sor
sz3só
-s3zsö
-sz3sp
-sz3st
-sz3sú
+sz3sör
+sz3söv
+sz3s2p
+sz3s2r
+sz3s2t
+s3zsúll
sz3sü
sz3sz
-sz2t1ap
-sz2t1á2rak
-sz2táro
-1sztárr
-sz2táto
-1sztorit
-1sztráj
+sz2t1álla
+sztá2r1a2d
+szt1á2ram
+sz2tá2ras
+sztá2rat
+sz2táre
+sz2tárf
+sz2tárh
+1sz2tárj
+sz2tárny
+sztáró2
+sz2táru
+szt1á2ruk
+sz2tárv
+szte2r1el
+1sztereo
+szté2g
+szt1ége
+sz2térte
+sz2t1érv
+sz2t1été
+szt1örök
+sz2t1őrn
+1sztrádá
+1sztrájk
+sz2tür
+1sztye
1szu
-2szu2b
-2szutó
-2szuz
+szu2b
+szub1o
+szuc1
+2szud
+sz1udv
+2szugo
+2sz1ugr
+2szuh
+2sz1uj
+3szuká
+sz1u2ra
+2sz1u2rá
+2szuta
+sz1utó
+2szutu
+2s3zuz
1szú
+2szúg
+2szúj
+sz1úron
+2sz1úrr
+sz1úrtó
+2szús
+2szúté
2szúth
+2szúti
+2szútj
+2szútn
2szúto
-2szúts
+2szútr
+2szútt
+2szútv
+2szúz
1szü
-2szüg
-3szür
-2szüt
+2sz1üd
+2szügg
+3szüks
+2szüld
+2sz1ü2led
+2szülőse
+3szüne
+3szürke
+3szürkés
+2sz1üs
+2sz1üv
1szű
-2szűe
-2szűs
-sz1z
-sz2zo
+3szűk
+2szűrödn
+1szvit.
+1szvitet
+1szvitj
+1szvitn
+1szvitt
sz3zs
+2t.
1ta
-2t1abr
-2t1a2cé
-t1a2dan
-ta2datá
-ta2dati
-ta2dato
+taa2d
+taa2l
+taát1
+taáta2
+taboz1
+ta1bra
+2t1abro
+ta1bró
+2t1abs
+ta1cl
+ta2dalé
+2t1adap
+ta2das
+t1a2data
+2t1a2datb
+2t1a2dato
+ta2datu
2t1a2dá
-t1adh
+2tadio
t1adj
t1adl
-t1adn
+2t1adm
ta2dod
-ta2dog
-ta2dok
-ta2dom
-ta2dot
+2t1a2dog
+2t1a2dot
2tadó
-t1a2dó.
-t1a2dója
+t1a2dóa
+ta2dóá
+ta2dób
+ta2dód
+ta2dóf
+ta2dóg
+t1a2dóh
+t1a2dóig
+t1a2dóik
+t1a2dóin
+t1a2dóit
+ta2dóí
+t1a2dój
+t1a2dóka
+t1a2dóké
+t1a2dóko
+t1a2dókra
+ta2dól
+t1a2dóna
+t1a2dóná
+ta2dóp
+t1a2dór
+t1a2dótó
+ta2dóü
+t1a2dóv
+ta1drá
+ta1d2re
+ta1dro
+t1ads
+ta2dun
t1adv
-tae2
+tae2l
+tae2r
+ta2ero
+taé2r
2tafí
-ta1fr
-ta2g1av
+ta1f2r
+taf2ta
+ta2g1aj
+ta2gav
+taga2z
+tag1azo
+ta2gág
ta2g1ál
-tag1g
-tai2g
-ta2iga
-ta2i2re
-ta2kad
-2t1akc
+ta2gec
+ta2g1el
+ta2g1e2r
+ta2g1é2g
+2taggo
+2t1aggr
+ta2gid
+ta2giz
+ta2g1osz
+ta2g1ott
+ta2góc
+2t1a2gón
+ta2g1ó2r
+ta2góv
+ta1g2raf
+ta1g2ram
+tagrádi2
+ta2g1u2s
+ta2gut
+ta2g1ü2
+2t1agy.
+ta2gya.
+ta2gyáb
+ta2gyáh
+2t1agyb
+2t1agyn
+2t1agyr
+2t1agyv
+ta2ire
+tai2rón
+tai2z
+ta2jé
+ta2j1u2s
+ta2jús
+2t1a2kad
+ta2k1ál
+taká2r
+tak1áro
+ta2kás
+ta2kátk
+2t1akce
+2t1akci
+take2l
+tak1ele
+ta2k1ér.
+tak1é2sze
+2t1akkora
+2takkord
+2t1akku
+ta1k2la
+ta1klu
+t1akna.
+ta2kó.
+ta2k1öb
+ta2k1öröm
+ta2k1ös
+ta1krá
+tak2reá
+ta1krí
+2t1akro
+ta1k2rón
+2t1akta.
+tak2tem
+2takti.
+2t1aktiv
2t1aktí
+2t1aktj
+taktus1s
+ta2kus
+ta1k2va
+ta2l1a2da
+ta2l1a2dá
+ta2l1adh
+ta2l1adj
ta2l1adn
-ta2lakb
+ta2l1a2do
+ta2l1a2dó
+ta2l1adt
+ta2l1a2du
+ta2l1adv
+2tala2g1
+t1a2lagu
+ta2lagú
+2t1a2lakb
+tal1akc
2talakí
-t1a2laku
+2t1a2lakj
+2ta2laku
+2t1alakz
+ta2l1a2l
2t1alany
-ta2lapú
+2t1a2lapa
+2t1a2lapí
+ta2lapk
+t1a2lapl
+2t1a2lapsz
+ta2l1a2r
ta2l1as
-ta2l1áll
+tala2te
+2talatti
+ta2l1au
+2taláá
+ta2l1á2g
+2taláí
+ta2l1állo
+tal1á2rak
talás1s
-ta2l1em
-ta2l1e2s
+ta2l1áta
+tal1átr
+tal1ell
+ta2l1elő
+ta2l1eng
+tal1esi
+talé2g
talé2k1e2
-ta2l1ur
-talú2
+ta2l1ér.
+2t1alge
+ta2l1i2ko
+tal1ikr
+tal1imp
+tal1ina.
+ta2lip
+ta2l1isk
+ta2l1í2r
+2taljas
+2t1alji
+2taljz
+2t1alkal
+2talkím
+2talkoh
+2talkot
+2taller
+tal3ly
+ta2l1ol
+talo2m1e
+ta2l1osz
+ta2l1őr
+tal2p1á2ro
+tal2pel
+tal2p1il
+tal2pus
+tal1t2re
+ta2lud
+2t1a2lulj
+ta2l1u2r
+ta2l1u2t
ta2lúr
-ta2l1út
-ta2mid
+ta2l1út.
+ta2lü
+ta2lű
+2talveo
+ta2mal
+tam1alm
+ta2maz
+ta2m1i2d
+2t1a2mő
+t1ampa
+2t1ampu
+2t1amur
+ta2mü
+ta2n1aj
+ta2nal
ta2nan
-ta2n1év
-2t1anny
-tan1osz
-ta2n1ó2r
-2tansan
-ta2nyag
-tao2
-ta2pa.
-ta2pán
-ta1ph
+2t1a2nat
+tan1áll
+tan1álo
+tanás1s
+tan2del
+2tandr
+ta2n1el
+ta2ner
+2ta2n1es
+ta2n1ez
+ta2n1éj
+ta2n1ér.
+ta2n1érk
+tan1évb
+tan1é2vé
+tan1é2vi
+tan1évm
+ta2nid
+2ta2nim
+tan1ist
+tanké2r
+tan2kére
+tan2kés
+tankó2
+tan2k1óra
+2tanny
+ta2n1osz
+ta2nód
+tan2te.
+tan2t1el
+tan2tors
+tan1trá
+ta2nü
+ta2nű
+2tanyag
+2tanyád
+2t1a2nyó
+tao2l
+taó2r
+2t1a2pa.
+2t1a2pai
+ta2paké
+ta2pasá
+2t1a2páb
+2t1a2pád
+2t1a2páé
+2t1a2páh
+2t1a2pái
+2t1a2páj
+2t1a2pák
+2t1a2pám
+ta2pára
+ta2páró
+2tapáu
+2t1a2páv
+ta1p2la
+ta1plé
+t1a2pó.
2tapp
-ta1pré
-2taran
-2tarán
-ta2s1á2r
-ta2sel
+ta1p2ré
+2t1aprí
+ta1p2ro
+tap2sor
+taps3s
+tap2s1ü2
+2tapun
+ta2rabe
+ta2rai
+2t1a2ras
+2t1a2rat
+2t1a2ráb
+tarádi2
+2t1a2ráh
+2ta2rán
+2t1a2rát
+2t1a2ráv
+2t1arbi
+2t1arc.
+2t1arch
+2t1arco
+t1arcu
+2t1arcú
+ta2r1i2k
+ta2romá
+tar1s2
+tar2tab
+tar2t1e2l
+tar2t1em
+tar2t1en
+tar2t1ér.
+tar2tit
+tar2told
+2tartos
+2tartr
+2tartt
+2tasc
ta2sem
-ta1s2p
+2tasf
+ta1s2ká
+ta1slu
+ta1s2m
+2tasnő
+ta2s1ol
+2t1aspi
+ta1spr
+2tasru
2tassz
tas3szá
-ta1sta
-tat1ato
+tas3szt
+tast2
+ta1s2ta
+2taste
+ta1str
+2tasv
+ta1sy
+2t1aszk
+ta1szl
+ta2t1alj
+ta2t1alm
+ta2t1aszt
+tatá2rai.
+2t1a2tei
+tate2s
+2tatika
2tatiká
-2t1a2ty
-ta2utó
-2tazo
+ta2t1i2na.
+ta2t1i2ná
+ta2t1ing
+t1atlas
+t1a2tomo
+tat1orj
+ta2t1őr
+ta1t2ri
+2t1atti
+tat1u2ra
+ta2tya
+ta2tyá
+2t1a2uk
+tau2ta
+tau2tá
+2tauto
+taü2z
+2tavan
+2tavatá
+2tavató
+ta1wh
ta2zon
1tá
-2t1ábr
-2tádi
+2táb.
+tá2b1á
+tábe2sz1é2l
+2tábé
+tá2big
+tá2bin
+2tábj
+2tábk
+2tábn
+2tábok
+2tábon
+2tábot
+tá2bö
+2tábr
+t1ábrá
+tá2bü
+2táciu
+tá2fa
+tá2fá
2tág.
tá2ga.
-tá2gat
+tága2d
+tág1ada
+2t1á2gai
+tá2gaz
2t1á2gá
-2t1ágb
-tá2ge
-2t1ágg
+2tágb
+2t1ágc
+2t1á2ge
+2t1á2gé
+2t1ágf
+2tágg
+2t1ágh
+2t1á2gi
+2tágj
+2t1ágk
+2t1ágm
2tágn
2t1á2go
2tágr
-t1á2gun
-tá2gú
+2t1ágt
+2t1á2guk
+2t1á2gun
+2t1á2gú
+2t1ágv
2t1á2gy
-táje2
-tá2j1eg
-2tájg
-tá2lét
+tá2hí
+tá2jal
+tá2jaz
+tá2j1e2g
+tá2j1e2l
+tá2jí
+tá2j1ok
+tá2j1ö2
+tá2jő
+t1á2jul
+tá2lab
+tála2d
+tál1ada
+tá2laj
+tál1a2lap
+tá2lap
+2t1álar
+tá2l1ál
+tá2l1áth
+2t1áldá
+2t1áldo
+tále2
+tá2l1eg
+tá2l1el
+tá2lél
2t1áll.
+2t1állam
+2t1állan
+2t1állat
+2t1állás
+2t1állh
+2t1állí
2t1állj
2t1álln
2t1állo
+2t1álls
2t1állt
-tá2lyéb
-tá2lyér
+2t1állu
+t1állú
+2t1állv
+2t1álma
+2t1álmi
+2t1álmok
+2t1á2lomr
+tá2lomt
+tá2lö
+2t1álru
+tá2lü
+tá2lyab
+tá2ly1a2c
+tá2lyad
+tá2ly1a2g
+tá2ly1a2l
+tá2ly1a2n
+tá2lyap
+tá2ly1at
+tá2lyau
+tá2lyátl
+tá2ly1á2z
+tá2lyid
+tá2lyir
+tá2lyis
+táma2sze
tá2mí
-tá2m1os
+tá2mos
+2t1á2mu
tán1alm
-tánc1c
-tá2ne
-2tánv
-tá2nyú
+tá2nár
+tánc3c
+tán2c1e
+tán2céh
+tán2cél
+tán2cén
+tánckész1
+táncs2
+tán2csá
+tán2csor
+tán1d2
+tá2n1e2
+tá2ní
+tá2n1ó2
+tá2nö
+2tánpó
+tán2s1e
+tá2nü
+tá2nű
+tá2nyal
+tá2ny1as
+tá2nye
2tánz
-tá2pa
-tá2pe
-tá2pin
-tá2rab
-tá2raj
+tá2p1a2
+tápá2
+tá2pál
+tá2p1ár
+tá2pát
+tá2p1e2
+tá2p1il
+tá2p1in
+táp1oll
+tá2p1osz
+tá2pő
+tá2pü
+2t1á2radá
+tár1a2dot
+tá2radó
+tá2r1a2g
+tár1ajt
+tá2r1a2l
+2tárama.
+2táramá
+2tárami
+2t1á2raml
+2táramok
+2táramol
+2táramot
+2t1á2ramt
+2táramu
+2táramú
+tára2n
+tá2r1any
+tá2rap
+tá2r1asz
+tá2r1att
+tá2r1au
+tá2r1av
+tá2rág
tá2r1ál
+tá2r1á2sz
+tá2r1átl
+2tárboc
tá2r1e2
-tá2r1ér
-tá2rid
-tá2rin
+tá2réd
+tá2rés
+tár2gyö
+tá2r1i2k
+tá2r1i2p
+tár1isk
+tá2r1ism
tá2rí
+tár1k2
+2t1árkád
+2t1árkána
+2tárkár
+2t1árnyé
+tár1okm
tá2r1osz
+tá2róc
+tár1órá
+tá2rö
+tá2rő
+tár2s1alt
+2tártás
+tárt1öltő
+tár1tro
2táru.
-tá2ruh
-tár1ur
-2t1á2rus
-tá2rút
-tá2s1ár.
-tá2s1e
-tá2sin
+2tárua
+2tárub
+2táruc
+2t1á2rug
+2t1á2ruh
+2tárui
+2t1áruj
+2táruna
+2tárus
+2tárut.
+tár1uta
+2táruü
+2táruv
+2tárúé
+tá2rúj
+2tárúk
+tá2rús
+tá2rü
+tá2rű
+tá2s1a2d
+tá2s1aj
+tá2sal
+tá2s1a2r
+tá2saz
+tás1á2ga
+tá2s1á2rai
+tá2s1á2rá
+tá2s1á2ré
+tá2s1árh
+tá2s1árn
+tá2s1á2ro
+tá2s1árr
+tá2s1árt
+tá2sás
+2t1ásáso
+tá2s1á2to
+tá2s1e2
+tá2sis
+tá2sodv
+tá2s1ol
+tá2sor
tá2só
+2tásók
tás1ó2r
+tá2sö
+tá2ső
tás3s
tást2
tás1tr
-tá2sü
-tá2sza
-2t1át1ad
+tá2sut
+tá2s1ü2
+tá2sű
+t1ásván
+tá2sz1ak
+tá2szal
+tás3zav
+tá2s3zá
+tá2sze
+tás3zen
+2tászi
+2tászo
+tá2szos
+tá2s3zó
+2tászt
+2t1átad
+2t1á2tál
+2t1átc
+2t1átd
+2t1á2t1e2
+2t1á2t1é
+2t1átfo
+2t1átg
+2t1áthe
+2t1áthi
+tá2t1ir
+2t1á2tí
+2t1átje
+2t1átkö
+2t1átlag
2t1átm
-2t1áts
-2t1átt
+2t1á2t1ol
+2t1á2t1ö
+2t1á2tő
+2t1átp
+2t1átre
+2t1átru
+2t1átsz
+2t1átte
+2t1átté
+2t1áttö
+2t1áttű
+2t1átut
2t1á2tü
-táva2
-tá2v1ad
-tá2vér
-tá2zsa
-tb2
-t1bl
-tbor2dó
-t1br
-tca1f2
-t1d2
+2t1átvi
+2t1átvo
+tá2v1a2d
+tá2vak
+táva2l
+tá2v1a2n
+tá2vas
+tá2vaz
+tá2v1ál
+tá2v1e2
+tá2véd
+tá2v1érz
+tá2v1és
+tá2vin
+tá2vis
+tá2ví
+tá2v1or
+2t1á2vó
+tá2vö
+tá2vő
+tá2vü
+tá2zsal
+tá2zsál
+tá2zsó
+tázs1p
+tbal2le
+tbeá2
+tb2la
+tb2le
+tb2li
+tb2lo
+tb2lú
+tb2ra
+tb2re
+t1b2ri
+tb2ro
+tb2ró
+tb2ru
+tca1k
+tca1s
+tca1t2
+tc2lu
+tc2re
+tcsap1á2g
+tdíja2d
+tdí2j1ada
+td2ra
+td2rá
+td2re
+td2ro
+td2ró
+td2ru
1te
-te2ad
-te2ai
-te2aka
-te2as
+te2aa
+te2aá
+te2ab
+te2ac
+te2a3d
+te2ae
+te2aé
+te2ag
+te2ah
+teai2
+te2aiv
+te2aí
+te2aj
+te2aku
+te2alap
+te2aláz
+te2ali
+te2ana
+te2ao
+te2aö
+te2aő
+te2apa
+te2apá
+teas2
+te2a1sp
+te2asza
+te2aszá
+te2aszo
+tea1tró
+te2aú
+te2aü
te2av
+te2az
+te2ber
+te2béd
+2techó
+te2csá
+te2dit
+te2dí
2t1e2dz
-te2g1á
+2t1eff
+te1f2r
+te2gan
+te2g1a2r
+tega2z
+teg1azo
+te2gá
+teg1ál
+teg1ár
+te2g1eg
+teg1e2lem
+te2g1ell
+te2g1elr
+te2gene
+2tegere.
+teg1ered
+te2g1él
+te2g1é2p
tegész1
+teg3g
+te2gid
+te2gis
+te2giz
+te2g1on
+te2g1ö
+te2gú
+te2g1ü2g
+tegü2l
+te2g1ülé
+te2g1ülő
+2t1egy.
+2t1e2gyes
+t1e2gyez
+t1egyén
+2t1egyh
+2t1egyl
2t1egys
-tejá2
+2tegyüt
+tei2g
+tein1s
+te2j1a
+teje2g
te2j1ell
+te2j1elv
+te2j1er
+te2jin
+te2jí
te2jo
+te2j1ó
+te2j1ös
+te2jő
te2j1u2
-te2k1ó2
-te2kú
-te2kür
-tela2
-te2l1ad
-2t1e2lál
-te2lár
-te2lát
-2t1elha
-2t1elhá
-2t1elhel
-2telix
-2te2l1os
-2t1eltá
+te2jú
+te2k1ag
+te2k1ál
+te2k1el
+tek1éret
+te2k1i2p
+te2kí
+te1klu
+te2k1ok
+te2k1ös
+te2k1und
+te2k1út
+te2lab
+te2lag
+te2laj
+te2l1an
+te2lap
+te2lar
+te2las
+te2lav
+te2l1á2g
+te2lál
+telá2r
+te2l1át
+2telbü
+teleí3rá
+2telej
+tel1ejt
+2telektr
+tel1e2len
+te2l1elk
+te2l1ell
+te2lemba
+te2leme.
+2telemei
+2te2lemek
+te2lemes
+te2lemén
+2t1e2lemű
+tel1esés
+te2l1e2ső
+te2l1este
+tel1esti
+tele2t1ér.
+t1e2lég
+tel1érét
+te2l1éte
+t1elfoga
+telié2h
+te2l1imi
+te2lind
+te2l1inf
+te2l1ing
+2t1elix
+te2lír
+tel2l1eg
+2tellenf
+2tellenő
+2tellenz
+2t1ellniv
+2telméle
+te2l1ó2
+te2l1öl
+2telőadá
+2t1e2lőí
+2telőnn
+2t1e2lőny
+te2lőtt
+2t1e2lőtu
+te2lővét
+tel1őzi.
+tel1p2
+2t1elsa
+2t1első
+2t1eltelé
+2t1eltett.
+2t1eltéré
+te2lú
+telü2ké.
2t1elv.
-2t1elvi
+2t1elvb
+2t1elvei
+2t1elvek
+2t1elvet
+2t1elvév
+2t1elvh
+2t1elvi.
+2t1elvil
+2t1elvk
+2t1elvn
+2t1elvr
+2t1elvt
+2t1elvü
2t1elvű
-te2m1ál
-t1embl
-2t1e2mel
-te2més
-te2m1os
-te2n1a2
-2t1endr
-te2nel
+2t1elvv
+te2map
+te2m1as
+2t1embl
+2t1embr
+te2m1e2g
+tem1e2leg
+2t1emelé
+2t1emelk
+2te2melő
+te2melv
+te2m1él
+te2m1ér.
+te2m1é2rő.
+tem1érté
+2t1e2més
+te2m1éte
+te2m1étk
+te2mid
+te2migr
+tem1ill
+te2mim
+tem1ing
+te2m1int
+te2móc
+te2m1ó2r
+te2m1ő2
+2tempá
+2templi
+2t1e2mul
+te2mus
+te2mut
+temü2l
+te2m1ülé
+te2nad
+te2n1a2g
+te2nal
+te2n1a2r
+te2n1as
+te2nat
+te2nau
+te2n1á2t
+ten1d2h
+tene2g
+ten1egy
+te2n1el
te2ner
-ten3n
-te2n1u
+2tenerg
+te2n1esz
+te2n1ékt
+te2n1év.
+te2n1évi
+2t1enged
+te2n1i2p
+te2n1ol
+te2n1ó2
+te2nö
+ten2tin
+ten2t1í2v
+ten1tri
+te2n1u2
+te2nú
+te2n1üg
+te2nünn
+2t1enyh
t1enyv
-te2oló
-te2rad
-te2ran
-te2r1ar
-te2r1ár
+te2oc
+te2of
+teo2s
+2t1epiz
+2t1e2pos
+2tepp
+tep2p1é2k
+ter1abl
+ter1a2cé
+te2r1ada
+ter1aka
+te2r1a2n
+te2r1a2r
+te2rau
+ter1á2cs
+te2ráf
+te2r1áll
+ter1álm
+te2r1á2ri
+ter1áta
+ter2ch
+ter1d2
2terdő
+2teredm
+te2r1e2dz
+ter1egé
ter1egy
2t1e2rej
-te2r1est
+te2r1e2ke.
+2t1e2rekl
+te2r1elm
+tereme2
+te2r1ent
+2tereo
+tere2pa
+tere2p1e2l
+tere2p1ü2lé
+te2r1er
+te2r1e2ső
+te2r1este
+te2r1esté
+te2reta
+te2r1eti
+te2retn
+te2rég
+te2r1é2j
+ter1éka
+te2ré2l
+ter1éle
+ter1élv
+ter1g2
+ter1iko
+2terili
+ter1illa
+teri2na
+te2r1i2p
+te2rism
+ter1ist
+ter1izm
+ter1k2
+t1erkölc
+termés1s
+te2r1old
te2ror
-te2rö
-2t1e2rő
-te2rut
-te2s1a
-2tesemé
-2t1esél
-t1e2sés
-tesi2
-te2sin
+te2r1ox
+te2r1ó2r
+te2rök
+te2r1ön
+te2rő
+2t1erő.
+2t1erőb
+2t1erőf
+2t1erős
+t1erőt
+t1erőv
+ter1s2
+tersz2
+tert2
+ter1tr
+te2rur
+te2r1ut
+te2r1út
+te2r1üg
+te2r1üld
+ter2vaj
+ter2van
+te2sar
+te2sár
+te2sel
+tes1ell
+2t1esemé
+2t1e2setb
+2t1e2sete.
+2t1e2setei
+2t1e2seten
+2t1e2setet
+2t1e2seté
+2t1e2seth
+2t1e2seti
+2t1e2setn
+2t1e2setr
+2t1e2sett
+te2sél
+2teséll
+2tesély
+2t1e2sés
+te2s1int
+tesí2r
+te2sírn
+te2s1író
+te2síz
+2teskü
t1esni
+te2sot
2t1e2ső
-tes2tal
-te2süv
-tesz1ál
-2t1eszm
-tes3zs
-2t1e2szű
-teto1s
+tesp2
+2t1esszen
+tes2tak
+tes2t1áll
+testá2r
+tes2tára
+tes2t1elk
+tes2t1ell
+tes2t1er
+2testéj
+2testék
+tes2t1ékn
+tes2t1éks
+2testém
+tes2tism
+tes2t1o
+testő2
+tes2t1őre
+tes2t1őré
+tes2tur
+te2s1ú
+te2s1ü2v
+2teszet
+2t1eszmé
+tesz2t1a2
+teszte2r
+tesz2t1ere
+tesz2t1é2te
+tesz2tor
+te2t1a2k
+te2t1a2l
+te2tana
+te2t1a2p
+te2tág
+te2t1ál
+tetá2r
+te2t1ára
+te2tát
+te2t1e2g
+te2t1ell
+tet1e2lő
+tet1elr
+te2t1elv
+te2tene
+tete2r
+te2t1eré
+te2t1esz
+te2t1éj
+tet1ékk
+te2t1é2l
+te2t1éri
+te2t1érv
+te2tid
+2t1e2tika
+2t1e2tiká
+te2tim
+te2t1int
+tetkész1
+te2t1olt
te2t1ot
-te2t1öl
-te1t2ro
-teu2tá
+te2tór
+te2tur
+te2t1üz
+2t1e2tűd
+te2t1ű2z
+tevés3s
+te2vol
+te2w1a
+2t1exp
2t1e2zer
-2tezr
+tezőa2
+t1ezred
1té
2t1ébr
+té2cő
+té2des
2tég.
-té2hes
-t1éhs
-té2kal
+2tégb
+2téget
+2tégé
+té2gép
+té2gés
+2tégg
+2tégj
+2t1égk
+tégla1
+2tégn
+2t1é2gö
+2t1é2gő
+2tégr
+2tégt
+tégü2
+té2g1ül
+2t1éh.
+2t1é2hek
+2t1é2hen
+2t1é2hes
+2t1é2het
+2t1é2hé
+2t1éhs
+2t1é2jen
+té2jes
+2t1éjr
+2t1éjs
+2t1éjt
+té2kab
+té2kad
+ték1ada
+té2k1aka
+ték1alk
+té2kam
té2k1a2n
-té2k1as
-té2k1au
-té2k1eg
-té2k1ell
+té2k1ar
+téka2t
+té2k1att
+té2kaz
+té2k1ág
+té2k1e2c
+té2kedé
+té2k1e2g
+té2k1e2kéh
+té2k1e2lőá
+té2k1elr
+té2k1er
+té2k1esz
+té2k1eti
+té2k1é2k
+té2k1é2l
té2kép
-té2k1ir
-té2k1í2
-té2kö
-té2lá
+té2k1ér.
+té2k1és
+tékfélé2
+tékfé2l1év
+té2kid
+té2kik
+té2kim
+té2kirá
+té2k1i2s
+té2kí2
+té2k1o2r
+té2k1osz
+tékó2
+té2kór
+té2k1ö2
+té2kő
+té2k1u2t
+tékü2l
+téla2
+té2lak
+té2l1an
+té2lap
+té2las
+t2élá
+té2láb
+té2lál
+té2lár
+té2l1á2t
+té2lei
+té2le2l
+tél1ele
+tél1ell
+tél1elő
+tél1elv
té2l1e2r
-té2l1os
-2téls
-té2lu
-2télü
-té2lű
-té2lyem
-té2nin
-té2ny1el
+té2les
+tél1est
+té2lez
+tél1ékb
+tél1éké
+té2lí
+té2ló
+té2l1ö2
+télőkész1
+télu2
+té2lut
+2té2lű
+té2lyeg
+télyigaz1
+téma1p
+té2mé
+té2mil
+téna2
+té2n1an
+2t1é2nekb
+2t1éneke.
+2ténekek
+2t1é2neké
+2ténekl
+té2n1in
+té2n1ö2
+té2ny1e2g
+té2ny1e2l
+té2nyék
+tényigaz1
+té2nyim
+té2nyo
+té2nyö
+tépés3s
2t1é2pí
-té2ran
-térá2
-té2r1ár
-2térdek
+té1p2la
+2t1é2pül
+té2rab
+té2raj
+tér1akt
+té2r1a2n
+té2rar
+té2ras
+té2rav
+té2r1á2r
+2térdekb
+2térdekl
+2térdekn
+2térdekü
+2térdekű
+tér2d1e2mel
+tér2d1í2j
+té2reg
té2r1e2l
té2rem
-tér1emb
+tér1eml
+té2r1eng
+té2r1eső
+té2r1essz
+té2r1esz
+2t1é2rett
+térés1s
té2r1ész
-té2r1in
+tér1éte
+téri2d
+té2r1ide
+té2ril
+té2rip
té2ris
-2térm
+2térkez
+2t1érmü
+té2r1os
+té2rö
+2t1értes
2t1érték
-té2sa
-té2s1á
-té2sel
-té2s1o
-té2szes
-tés3zsí
-té2tar
-té2tál
-2tév.
+2tértő.
+2t1értők
+tér1t2r
+2t1értv
+té2r1u2
+2t1érv.
+2t1érvei
+2térvek
+2t1érvény
+tésa2
+té2sab
+té2sag
+té2s1aj
+té2sak
+té2s1al
+té2san
+té2sap
+té2s1as
+té2s1az
+té2s1á2
+tésát1a2
+té2s1eg
+té2s1e2l
+té2s1e2r
+té2sés
+tés1iko
+té2s1or
+té2só
+té2s1ő2
+té2su
+tésü2l
+té2s1ülé
+tés1ülő
+té2s1üt
+tés3zav
+tész1ál
+tés3zár
+té2szeg
+té2sz1emb
+tés3zene
+té2szesz
+té2sz1ék
+tés3zsi
+té2t1a2l
+tétcsa2
+té2t1e2g
+tét1e2lemt
+tét1elkés
+té2t1elve
+2t1éteri
+té2t1ers
+té2t1e2v
+té2t1é2te
+té2tok
+té2tol
+té2t1os
+tétó2
+té2tón
+té2t1ór
+2t1év.
+2t1évad
2t1évb
-2t1é2vei
-té2ven
-2tévet
-2tévéb
-2tévét
+2t1évc
+2t1é2vedb
+2tévei
+2t1é2vek
+2t1é2vem
+2téves.
+tévé1sz2
+2t1évf
2tévh
2t1é2vi
+2tévk
+2t1évn
2t1évr
-2t1é2vü
+2t1évs
+2tévt
+té2vú
+2t1évü
+té2vükö
+té2vün
+2t1é2vű
+2t1évv
té2zs
-t1f2l
-tg2
-tgár2
-t1gn
-t1gr
-tha2d1é
-t2hai
-t2hak
-tha2l1ás
-tha2me
+tfa2l1aj
+tfa2lan
+tfa2le
+tfa2lom
+tf2jo
+tf2la
+tf2le
+tf2li
+tf2lo
+tf2ló
+tf2ra
+tf2rá
+tf2re
+tf2ri
+tf2rí
+tf2ro
+tf2rö
+tf2ru
+tgá2zak
+tgá2zár
+tgá2zé
+tge2n1el
+tge2né
+tgen1s
+tg2lo
+tg2ló
+tg2ne
+tg2ra
+tg2rá
+tg2ri
+tg2ró
+tg2ru
+tg2rü
+tha2de
+1thagore
+t2har.
1t2hau
-1theid
-1theu
-1t2hod
-1t2hos.
-1thosb
-1thosi
-t2hov
+1t2he.
+the2i2d1
+1theidp
+1theusz
+t2holi
+thon1n
+tho1ny
+1thosz
+th1sc
1thy
1ti
-tia2t
-2t1i2dé
-2t1i2do
+ti2aa
+ti2ae
+ti2aé
+ti2af
+ti2ah
+ti2aj
+tiakész1
+ti2ala
+ti2am
+ti2a1p
+ti2ata
+ti2atl
+ti2aü
+ti2av
+ti2chi
+ti2dea
+2t1i2deá
+2t1i2deg
+ti2dei
+2tidej
+2t1i2deo
+ti2dén
+2tidéz
+ti2dio
+2t1i2dom
2t1i2dő
-tien2
-tie2r
-2t1ifj
-ti1f2r
-2t1i2ge
-2t1ign
+tie2le
+tie2n
+tié2b
+ti1fl
+2t1i2ga
+2t1i2gá
+2t1i2ge.
+2t1i2gék
+ti1g2lo
ti1g2ra
-ti1grá
-ti1kh
-ti1k2le
-ti1k2ló
+2t1ihl
+ti3ki
+ti1kle
+ti1klu
+ti2konb
+ti2kono
+ti2konr
+tiko1sz2
ti1k2ri
+ti2lac
+ti2lad
ti2lan
+ti2l1ág
+tile2g
+til1egy
+ti2lex
+ti2lim
+til1ing
ti2l1i2p
-t1illat
-2t1imr
-2t1ind
+ti2lir
+til1isk
+2t1illato
+2tillú
+ti2l1ö2
+2t1i2ly
+ti2mak
+ti2máb
+2timádó
+ti2máj
+ti2már
+ti2máz
+ti2mes
+2timmu
+2timrei
+2tinakat.
+2t1inakk
+tin1akt
+ti2n1a2n
+tin1ará
+tina1t2
+ti2n1au
+ti2n1áll
+tin1árt
+2t1indá
+2t1inde
+2t1indí
+2t1indu
ti2ne.
-ti2n1es
-tin2gi
-tin2g1o
+ti2neg
+ti2n1eké
+ti2nem
+2t1infar
+2tinfl
+2t1infr
+tin2gal
+tin2gas
+tin2g1ár
+tin2g1e2l
+2t1ingeni
+tin2g1eti
+tin2gos
+tin2g1ó2
+2t1i2nic
+tini2g
+tin1iga
+ti2n1i2m
+tini1sz2
+2t1inku
+2t1inkv
+tin3n
+tin1órá
ti2nö
-ti2nú
-ti2par
+2t1insp
+2t1integ
+2t1intéz
+ti2n1ut
+ti2nű
+ti2ol
+ti2onb
+ti2onh
+ti2oni
+ti2onj
+2t1i2onn
+2t1i2ono
+2t1i2onr
+2t1i2ont
+tio2x
+ti2pad
+ti1p2la
+tip2pin
+tip2po
+2t1i2rat
2t1i2rán
-ti2rén
+2t1irg
ti2rig
-ti2rod
-ti1sl
-2t1ism
-tis3s
-ti1str
+2t1irk
+2t1i2rod
+2tirol
+ti2rom
+ti2rón
+2t1irr
+2t1irt
+tis2as
+ti2s1a2u
+ti2s1el
+2t1i2si.
+ti2sim
+ti2sin
+ti2s1i2r
+2t1i2sis
+2t1isko
+ti2sor
2tistv
-ti2sü
+tisz2tina
+ti2t1i2o
+ti1t2ri
+ti1t2ro
+tiu2mé
+tiu2m1i2
+2tivad
+2t1i2var
+2t1i2ván
2t1i2vó
+ti2xa
tize2n1
-ti2zom
-2t1i2zü
+ti2zé.
+2tizéj
+2tizék
+ti2zér
+ti2zét
+ti2zév
+tizo2m
1tí
-2t1íg
-2t1í2j
-t1í2rás
+tí2gé
+tí2ja
+tí2já
+tí2jú
+tí2la
+tí2l1ó2
+2tínio
+2t1í2no
+2t1ínr
+2t1íns
+2t1í2ny
+tí2ra2n
+tí2rar
+tí2r1ál
+2t1í2rás
+tí2r1e
2t1í2ró
+tí2rő
+tí2rü
+títés3s
+títőa2
+títőe2
+tí2v1ec
+2t1í2vei
tí2vel
-tív1ele
-tí2v1ér
-tí2vű
+tí2ver
+2t1í2véi
+tívi2
+tí2vik
+tí2vir
+tí2viv
+tí2v1ó2
+tí2vö
+tí2vő
+tív1s
tí2za
-tí2zó
-t1k2
-tká2nya
+tí2zá
+tí2zel
+tíz1ele
+tí2z1emb
+tízi2
+tí2zik
+tí2z1is
+tí2zí
+2tízl
+tí2z1o
+tí2zö
+tí2zsá
+tí2zu
+tí2zül
+tíz1ülé
+2t1í2zű
+tje2gy1á2
+tjó2t1
+tka1pr
+tka2ró2r
+tkende2
+tké2p1e2kéh
+tkia2l
+tkiá2
+tkie2
+tkié2
+tk2la
+tk2li
+tk2lí
+tk2ló
+tk2lu
+tkö2z1él
+tkőé2h
+tk2ra
+tk2rá
+t1k2reác
+t1k2ré
+t1k2ri
+tk2rí
+t1k2ro
+t1k2ró
+tk2ru
+tk2va
+tk2vi
+tk2vó
tla2c3
+tla2g1a2d
+tla2g1ar
+tla2gas
+tla2gál
tla2g1e
-tlag1g
-tlas1s
+tlag3g
+tla2g1ó
+tla2n1e2
+tlanká2
+tla2nó
+tla2pár
+tleí2
+tlen3n
+tle2t1a2n
+tle2tas
+tle2tele
+tle2t1elv
+tle2t1ér.
+tle2tos
+tle2tő
+tleü2
+tlé2kal
+tlé2kem
+tlé3pe
+tlés3s
+tlé1trá
+tló1dr
+tma2gál
+tma1k
+tmá2nyir
+tme2g1e2
tme2g1é
-tna2k
-tno1g2
+tme3gif
+tmu2sí
+tmus3s
+tmu2sz
+tna2gya
+tná2d1
+tne2k1el
+tne2küld
+tne2m1e2r
+tne2r1a
+tne2r1á
+tne2sz1a
+tne2szi
+tne2sz1ó2
+tnév1a
+tnómen1
+tnómenk2
+tnö2k1öl
+tnőé2n
1to
2t1obj
-todé2
-to2dév
-to2k1ad
+2t1obl
+2t1obs
+to1cki
+to2daa
+to2das
+to2dí
+2t1o2dú
+2t1odv
+2t1off
+togás1s
+to1g2ráf.
+to1g2ráff
+to2il
+to2k1aka
+to2k1a2n
+to2k1ap
+tok1ari
+to2k1ál
+tok1á2rok
+to2k1átl
+to2k1átm
+to2k1átr
+to2k1áts
+to2k1átt
+to2k1átv
+to2ker
+to2k1é2l
+to2kép
+to2kid
+to2k1im
+to2k1in
+to2k1ip
+to2k1iv
+to2kí
+t1o2kozá
to2k1ö
+to2kő
+to1k2ro
+tok1s
+toksz2
+to2k1ur
+to2kúr
+to2kü
+to2kű
+to2l1a2d
2t1o2laj
-to2lim
+to2l1akt
+tola2n
+to2l1any
+to2l1a2r
+tol1atom
+tol1ábr
+2toldalo
+2toldalt
+2t1o2lim
+tol1k2
+tol2l1árb
+tol2l1á2ré
+tol2l1árh
+tol2l1árr
+tol2leg
+tol2l1in
+tol2l1í2
+to2l1o2r
+2t1oltás
+to2l1ut
2tolvas
-to2lyag
-tome2
-to2mel
+to2m1ag
+to2m1ak
+to2m1a2l
+to2m1a2n
+to2m1ap
+to2m1ál
+to2m1á2r
+tom1b
+2tombe
+to2m1el
to2men
-2toml
-t1omlá
-to2mó
+tom1erő
+to2m1es
+to2mí
+to2m1osz
+to2m1ó2
+to2mö
+tom1p2
+tom1s
+2tomtö
2tomú
+to2mü
+to2mű
to2nalm
-to2nel
+tona1t2
+tonau2
+ton1áll
+ton1álm
+to2n1á2z
+to2n1el
+to2n1en
+to2ner
+ton1gr
+to2nil
+ton1k2
+to2nol
+to2n1or
+to2n1osz
+to2nóc
+to2nór
+to2nö
+to2nő
+ton1s2
+tont2
+ton1tr
+to2n1út
to2nü
+to2nű
+to2nyal
to2nye
-to1p2h
-to2rab
-to2ral
-to2r1as
-to2r1e2l
+to2p1at
+2topc
+2to2pe
+to2pik
+to2piz
+2topp.
+2toppo
+2toppr
+top1t2
+to2pü
+to2r1a2d
+to2r1ag
+to2r1aj
+to2r1aka
+to2r1akn
+to2r1ako
+to2r1a2l
+tora2n
+to2r1any
+to2r1a2p
+to2r1ar
+tor1ass
+to2rat
+to2r1au
+to2r1av
+tor1ács
+to2r1áll
+to2r1álm
+tor1áté
+to2r1átl
+to2r1á2z
+2t1orcá
+tord2
+tor1dr
+tore2
+to2rec
+to2rek
+to2r1el
+to2ren
+to2r1er
+tor1f2
+tor1g2
+2t1organ
2torie
+to2r1ill
+to2r1int
to2r1isk
-toros1s
-to2ró
-tor1s2
-tosi2
-to2sin
-to2sze
-tosz2kó
-2t1oszl
-to1tra
-2t1ou
-to1y
+tor1k2
+2tornó
+to2rop
+to2rosz
+tor1oszt
+to2r1ov
+toró2
+to2rón
+to2r1ór
+to2rö
+to2rő
+2t1orr.
+2t1orráv
+2t1orri
+tors2
+tor1sc
+tor1sk
+2t1orsó
+tor1sp
+tor1st
+tort2
+tor1tr
+to2rü
+3torvá
+2torvos
+2torvv
+to1ry
+to2s1as
+to2s1e
+to2sik
+to2s1in
+to2sis
+tos3sze
+t1osto
+2t1osty
+to2sü
+to2szal
+to2szan
+to2sz1e
+tosz1k
+2t1oszlop.
+tosz1tr
+3t2ot.
+2t1otthon
+to2ut
+tova1
+2t1o2ve
+2t1o2vi
+2t1o2vu
+2t1oxid
+2t1o2xig
+to1yo
+toza2t1al
1tó
-2tódok
-2t1ó2év.
-2t1ó2rai
-tó2rás
-tó2s1e2
-tó1spe
-tó1spo
-tós3s
-tó1t2r
+tóá2gy
+tóá2r
+tóát1
+tóáta2
+tó1bl
+tó1bra
+tó1bró
+tó1cl
+tócsa2p1á2g
+tó2daj
+tó2d1a2n
+tó2d1esé
+tó1dro
+tó2dúr
+tó1fl
+tó1gl
+tó1g2r
+tói2g
+tóí2v
+tóká2rok
+tó1k2l
+tó1kre
+tó1kré
+tó1kro
+tónus3s
+tóo2k
+tóó2r
+tóp1ass
+tó2p1e2l
+tóp1int
+tó1pro
+tó2ras
+tó2ráb
+tó2ráh
+2t1ó2rái
+tó2rár
+2t1ó2rás
+tó2rát
+t1ó2ráv
+tó2sep
+tós1éták
+tós1é2tát
+tó2sír
+tó1s2kan
+tó1skál
+tó2s1ol
+tó1s2porto
+tó1s2portt
+tó1s2rác
+tó2s1ü2l
+tó2s3zene
+tó1sz2f
+tó1szk
+tó2taj
+tó2tág
+tó2tom
+tó1t2rá
+tó1t2re
+tó1tro
2tóvod
+2t1ó2vó
1tö
-2tödn
+töb2bev
+töb2b1o
+2t1öbl
+2tödéé
+tö2dém
+tö2dí
+2tödné
+tö2do
+2tödöt
2tödü
-tö2kör
-t1öltöz
-tö2n1í2
-tö2nő
-2t1öntu
-tö2s1i
-t1ötr
-2töv.
-2tövn
-2tövö
+tö2ka
+tö2ká
+tö2k1e2v
+tö2k1ér.
+tö2k1érd
+tö2kid
+tö2kí
+2tö2ko
+2t1ö2kör
+tökös3s
+tö2k1ő
+2tökrös
+tö2ku
+2t1ölb
+2t1ölci
+töl2gya
+töl2t1á2
+t1öltön
+2t1öltöz
+töm2b1a
+tömbe2
+töm2bel
+töm2b1o
+t1ömle
+2t1ömlé
+t1ömli
+tö2möl
+tö2na
+tö2ná
+tön1d2
+tö2nen
+tö2n1í
+tön2kár
+tönkész1
+tö2no
+tö2n1ő
+tön1s
+tö2nu
+tö2nú
+2t1ö2reg
+törés3s
+2töröks
+tör2t1a2
+tör2teg
+tör2t1e2lem
+tör2ter
+tör2térn
+tör2t1és
+tör2t1o2
+tör2t1öl
+tör2tös
+tör2zsa
+tör2zs1ö2l
+2t1ösv
+2t1ösz
+2t1ötl
+töt2t1á
+2t1ötv
+2t1öv.
+2t1övb
+2t1övh
+2t1ö2vie
+2tövig
+2t1övj
+2t1övk
+2t1övn
+2t1övr
+2t1övv
+2t1ö2zön
+tözőe2
1tő
-tő1dz2n
-tőe2
-tői2rá
-2tőrb
-2t1őrl
-2t1ő2rü
+tőa2c
+tőa2l
+tőá2g
+tő1bl
+tő1br
+tőe2ké
+tőe2r
+tőé2l
+tő1fl
+tő1gr
+tőí2t
+tőí2v
+tő1kl
+tő1kv
+tő1pl
+tő1pr
+tő1ps
+tő2rag
+t1őral
+2t1ő2r1an
+tőr1egy
+2t1őrez
+2t1ő2rék
+2tőréü
+tő2rin
+tő2r1is
+2t1ő2rí
+2t1őrjá
+2t1őrjel
+2tőrjö
+2tőrka
+2tőrl
+2tőr1öl
+2tőrp
+2t1őrti
+2tőrtr
2t1őrz
+tő2s1a2l
+2t1ősny
+tő1spe
+tő1s2pi
+tő1spr
+tő1srá
+tő1sta
+tő1s2tá
tő1sté
-tőu2
-tőü2
-t1p2
-tpen1
-1t2rafá
-1tranziti
-tra1ps
-tras2
-t2rádá
-trás1s
-1tréf
-1t2ril
-troa2
+tő1str
+2tősű
+tő2sű.
+tősz2
+tő1szt
+tő1tr
+tőü2l
+tőzá2
+tőzár1
+tpen3n
+tp2fe
+tp2la
+tp2lá
+tp2lé
+tp2lu
+tp2ra
+tp2re
+tp2ré
+tp2ri
+tp2ro
+tp2ró
+tp2ru
+tp2sz
+tpu2tin
+t2rafó
+1t2ragé
+1tragi
+tra1k2l
+tra1kro
+tran2d1a2
+tran2dá
+trans1s
+tran2sz1ai
+tran2sz1o2m
+tra1s2p
+trat2
+t2rati
+tra1tr
+1trágya
+1trágyáb
+1trágyáé
+1trágyáh
+1trágyái
+1trágyáj
+1trágyák
+1trágyán
+1trágyár
+1trágyás
+1trágyát
+1trágyáv
+t2rájk
+trán2sz
+trá2nyal
+trá2t1ér
+tre2csa
+tre2cso
+t2rego
+tren2da
+tren2d1ő2
+1trení
+tréé2
+1t2réni
+tré1p2
+tré2sz1á2
+tri1g2
+trii2
+t2rikó
+t2rill
+1t2rió.
+t2riój
+t2riók
+trol2l1in
+tro2mad
+tro2maj
+trona2
+tro2n1ag
+tro2nal
+tro2nan
+tro2nes
tron3n
-trosz2
-tro1szk
-tró2zs
+tron1tr
+tr2os
+tro1sz2f
+tro1sz2ta
+t2r1o2x
+tró2de
+tró2nas
+tró2n1e
+1trónj
+1t2róno
+t2rónt
+tró1sz
+tró2zsi
+t3röm
+1t2rös
+1t2rub
+tru2mad
1t2rup
-1t2rü
-t1ry
-tsa2va
-1t2sé.
-t1s2k
-t1s2p2
-t1s2t2
+tsa2vo
+ts2ch
+1tsche
+tsé2g1éj
+ts2ká
+ts2ko
+ts2la
+ts2lá
+ts2le
+ts2li
+ts2má
+ts2mi
+ts2ni
+tsói2
+ts2pa
+ts2pe
+ts2pi
+ts2po
+ts2pó
+tsp2r
+ts2rá
+t1s2ta
+t1s2tá
+ts2te
+ts2té
+ts2ti
+ts2tí
+ts2to
+tst2r
+ts2tu
+ts2tú
1t2sub
-1tsy
tsza2ké
-tsza2te
-tszá2ze
+tsza2k1ü
+tsza2t1e2
+tsza2tö
+tszé2t
t1sz2f
-t1sz2t
-tt1aszt
-t2t1a2u
-t2t1áll
-tt1egy
-t2t1elm
-tt1eml
-tté2g
-tt1ége
-tté2l
-tté2res
-t2t1id
+t1sz2k
+t1sz2l
+tszö2g1e2le
+t1sz2p
+t1sz2t2
+ttad2
+tta2dó.
+ttag1g
+tta2g1o2ku
+tta2n1ér
+t2t1ará
+t2t1aszt
+tta1t2r
+ttaü2
+t2t1a2z
+ttán2s1á2g
+ttá2v1i2
+tte2leme
+t2t1e2lőa
+tte2r1in
+t2t1erő
+tte2s1a2
+tt1ég.
+t2t1é2le
+tté2rak
+ttér1em
+tté2r1es
+tté2r1é2ne
+tté2rid
+ttér1in
+tt1éss
+tt1é2vér
+t2t1i2o
+t2t1iro
t2t1isk
+t2tizz
+ttír1a
+tt1írá
+tt1kr
+ttornác1
t2t1ors
-tt1ott
-tt1óra
-ttő2sa
-tt2rén
-ttűz3s
+ttó1dr
+ttó1p2
+t2t1ó2rá
+ttó1s2r
+ttö2l
+tt1ölő
+tt1pr
+t1t2raf
+t1t2rag
+t1t2ran
+ttransz1
+ttranszk2
+t1t2rav
+t1t2róf
+tt2rón
+ttsé2gel
+tt2si
+t2t1ug
+t2t1üd
+t2t1üt
+t2t1ü2v
+ttwe2
t2ty
+tty1or
+tty1ö2l
+ttyü2
+tty1ül
+ttyülés1
1tu
+tuá2r
+tubus1s
+tu1ck
+tuda2te
+tuda2t1ö
+2tudí
+tu2ga
tu2go
+2t1ugr
+tu2hu
+tu2in
+2t1ujj
+2tuká
+tulo2
+2t1ulti
+2t1ultr
+tu2lü
+tu2mab
+tu2m1a2d
+tu2maj
+tu2mal
+tu2man
+tu2mar
+tu2maz
tu2mál
-tu2min
+tu2meg
+tu2m1el
+tu2mer
+tu2mes
+tu2m1i2k
+tu2mim
+tu2m1inf
+tu2m1int
+tu2m1ir
+tu2mis
+tu2miz
+tu2mí
+tu2mol
+tu2mö
+tu2mő
+tum1p2
+tu2mü
+tu2nal
+2t1unc
+2tunió
+tu2nit
+2t1u2no
+2t1u2nó
+2t1unt
+tu1p2r
+tu2rac
+2turai
+2t1u2rak
+tu2ralo
+tu2ram
+2t1u2ras
+tu2ráh
+2turán
+tu2rár
+tur2g1a
+tu2run
+tus1abl
+tu2sar
+tu2ság
tu2se
-tu2sze
-tu2sz1é2
-tu2szi
+tu2s1érté
+tu2sis
+tu2s1í
+tu2sor
+tu2s1ó2
+tu2s1ö
+tu2ső
+tuss2
+tus3sze
+tus3szi
+tus3szo
+tu2sü
+tu2szab
+tu2sz1a2d
+tu2szag
+tu2szal
+tu2szap
+tu2szar
+tus3zav
+tu2szál
+tusz1em
+tu2sz1é2l
+tu2sz1é2p
+tuszi2
+tu2sz1il
+tu2szin
+tu2sz1ip
+tu2szir
+tu2szis
+tu2sz1it
+tu2szí
+tusz1k2
+tu2szol
+tu2s3zó
+tu2szö
+tu2sző
+tusz3sa
+tus3zse
+tuszt2
+tusz1tr
+tu2szü
+2t1u2tad
2t1u2tak
-tu2tas
+2t1u2tal
+2t1u2tam
+2t1u2tas
+2t1u2taz
+2tutá
+tu2tán
2t1utc
-tu2u
+2t1u2to
+tu2tód
+tu2tóp
+tu2tót
+tu2tun
+tu2um
+2t1uzso
1tú
-2t1úg
-2t1újd
-2t1újs
-tú2lan
-tú2lat
+tú2ja
+tú2jí
+tú2jo
+tú2ju
+tú2l1a2
tú2l1á2
+tú2l1e2
tú2l1é2
-tú2ló
+tú2list
+tú2lí
+tú2lok
+tú2lop
+tú2l1ó2
tú2lö
-tú2r1e
-tú2r1é
+tú2l1ő
+túl1s
+túlt2
+tú2lú
+tú2lü
+tú2lű
+túra1sz
+tú2rál
+tú2r1e2
+tú2r1ér
+tú2r1és
+tú2r1ol
+tú2rot
+tú2rö
+tú2rü
tú2sze
-tú2to
+tú2szö
+tú2szü
+tú2tá
+2t1útb
+tú2t1e2
+2t1ú2té
+2t1úth
+2t1ú2ti
+2t1útj
+2t1útl
+2t1útn
+2t1ú2to
+2t1útr
+2t1útt
+2t1útv
1tü
-2t1ü2g
+2t1ü2dí
+2t1ü2dü
+2t1üdv
+tü2ge
+tü2gy
+tü2l1a
+tü2lá
+2t1ü2led
+tü2l1e2m
tü2len
+tü2lep
tü2l1e2s
-tü2lér
-tü2lo
-tü2lü
-tü2te
-tü2té
+tü2l1e2v
+tü2l1ér
+tü2lir
+tü2lí
+tü2l1o2
+tü2l1ökl
+tü2löm
+tü2l1ön
+tü2l1öz
+tü2lők
+tü2lőr
+tü2lu
+tü2lú
+tü2ma
+tü2mék
+tü2m1ő
+tüne2tel
+2t1ünn
+2türeg
+2türes
+2t1ü2rí
+2t1ü2rü
+2tüst
+2t1ü2te
+2t1ü2té
+tü2ti
+2t1ütk
tü2tö
-tü2tő
-2t1ü2v
+2t1ü2tő
+tü2vö
+2t1ü2zen
2t1üzl
1tű
-tű2za
-tű2zőr
-tű2zs
-tva1k2
-tva2ra
-tváro2s1u
-tve2neg
-tve2ra
-twa2
+tűcsa2p1
+tű2d1al
+tű2dá
+tűe2két
+tűé2h
+tűfélé2
+tű1gr
+tű1kv
+tűleü2
+tű1pl
+tű1pr
+tűrés1s
+tű1sp
+tű2z1a2
+tűzá2r
+tű2z1ára
+tű2zát
+tű2zene
+tű2zis
+tű2zí
+tű2zo
+tű2z1ös
+tűz3seb
+tű2zú
+tva2n1e
+tva2név
+tva2raj
+tvá2nyad
+tvá2nyí
+tvá2z1al
+tvá2zip
+tve2n1e2v
+tven3n
+tven3t
+tvenü2
+tve2nül
+tve2n3y
+tve2raj
+tve2ral
+tve2r1á2
+tve2reg
+tve2r1é2sz
+tve2rint
+tve2rip
+tve2r1o
+tvers2
+tver1st
+tve3se
+tvé2nyel
+tvér1int
+tvé2r1o
+tviselőé2
+tvis3szá
+t2víve
t2y
1tya
+tyai2ko
+tya1kl
+tya1p2
+tya1sz2
+tyat2
+tya1tr
tyau2
1tyá
+2ty1ág
+ty1áld
+ty1áll
+tyá2ran
+tyár1s
tyás3s
1tye
+ty1e2gy
+ty1ela
+ty1ell
+ty1emb
+ty1e2rő
+2ty1ex
1tyé
+2ty1éte
1tyi
1tyí
+ty1í2r
+ty1ív
+tynk2
1tyo
+tyo2lan
+tyo2r1os
1tyó
1työ
1tyő
+ty1ős
+ty2pe
+ty1pr
+ty2sa
+ty1sp
1tyu
+2ty1ug
+ty1u2tá
1tyú
+tyú2kü
1tyü
1tyű
-ty2vá
+1t2zekn
+1tzekrő
+1t2zen.
+t2zenj
+1t2zer
+1t2zes
+tz1ő2r
tz3sc
2u.
u1a
-u2ad
-ua2e
+ua2ch
+ua2da
+ua2dá
+u2ador.
+u2adorb
+u2adoré
+u2adorn
+u2adoro
+u2adorr
+u2adort
+ua2dó
+ua2es
+ua2gá
+ua2ja
+ua2já
+ua2la
+ua2lá
+ua2ny
+ua2sz
+ua2ty
+ua2ut
+ua1yá
+ua1yé
ua1yi
+ua1yo
+ua2zo
u1á
-uá2ru
-uba2l
-u2b1ala
+uá2ga
+uá2gy
+uá2po
+uá2r1á
+uá2r1e
+uá2réj
+uá2r1is
+uá2sz
+uá2t1a2
+uá2t1e
+ub1a2la
+ub1alk
+u2b1ang
+ub1arc
+ub1a2ri
+ub1ár.
+ub1á2ro
+ub1dr
+u2b1e2b
+u2b1ed
+ube2lá
+ube2lel
+ub1elö
+ub1e2se
+ub1est
+u2b1éj
ub1éle
-ub1ord
-uca2t1á
-2uch
+u2b1é2n
+u2b1ép
+u2b1érd
+u2b1é2re
+u2b1érm
+u2b1érte
+u2b1éve
+ubi2g
+u2b1iga
+u2b1ige
+ubi2ke
+u2b1ina.
+ub1ism
+ub1kr
+ub1olda
+u2bork
+u2b1orv
+u2b1osz
+ub1óri
+ub1öl
+ub1ös
+ub1öv
+ub1pl
+ub1pr
+ub1sl
+ub1sp
+u2b1ud
+ubu2sz
+u2b1új
+ub1üd
+ub1üg
+ub1ü2l
+ub1üz
+uca2t1á2
+uc2c1e
+uc2c3h
+uc2c1ina
+uc2cip
+uc2cö
+ucc3sz
+uc2cú
+uc2cü
+uc2cz
+uc1emb
+uc3há
+u2c3hé
+u2c3ho
+uciá2r
+uci1p
+u1c2kig
+u1c2kon
+u1c2kot
+uc2ky
+uc1ö2l
+uc1pr
+ucsa2p1á2
uc3ság
u2cs1ál
+u2csáru
+u2cs1e2l
+u2cs1id
+ucs1s
+u2c3sü
+uc3sz
+u2c1ug
+uc1üg
+uc3zá
+uc3ze
uda2tal
uda2tál
-uda2te
+uda2t1á2ram
+uda2t1eg
+uda2ter
+udáskész1
udás3s
-2ude
udi2o
-2udiz
-2udoc
-2udod
-2udoé
-2udok
-2udot
-u1dy
+u2d1isk
+udo1kr
+udó2se
+udó2sor
+u1d2rá
+u1d2ro
u1e
-ue2g
-uel1o
-ue2s
-ues3ze
-ue2v
+ue2bé
+ue2dz
+ue2gé
+uegész1
+ue2gy
+uel1ér
+ue2lő
+ue2me
+ue2rő
+uervíz1
+u2es.
+u2esb
+ue2s1e
+u2esh
+u2esi
+u2esk
+u2esn
+ue2ső
+u2esr
+u2est
+u2esu
+ue2s3zen
+ue2te
+ue2ve
u1é
-ué2p
-2uf
+ué2ge
+ué2gé
+ué2ké
+ué2le
+ué2pí
+ué2pü
+ué2te
+ufé2nye
+u1f2le
+uf2ri
+uf2ru
+uf2tü
+ug1agy
ug1alj
+uga1p
+ug1apa
+1u2garo
+uga2t1el
+uga2tés
+uga2tol
+uga2t1ó2r
ug1ág
+ugára2
+ugár1ad
ugá2rá
-2uge
+ugá2ros
+ugá2ru
+ugár1ú
+ugás3s
+ug1á2sz
ug1el
-u2gé.
-2ugg
-2ugh
-u2g1ir
-u2g1iv
+ug1e2v
+ug1é2l
+ugg2l
+ugi2e
+ug1ing
+ug1int
+ug1iro
+ugi2t
+ug1ita
+ug1ivá
ug1ír
-ugosz2l
-ug1ut
-u2g1ü
-ugya2
-uh1ako
-u2h1ál
-uhás1s
+ug1kl
+ugo2r1á2
+ugó1sv
+ugó2s3zá
+ug1ös
+ug1pr
+ug1sk
+2ugui
+u2g1ut
+u2g1új
+ug1üg
+ug1üz
+ug1űr
+ugya2n
+uh1a2dó
+uh1alk
+uha2r1as
+uha1t2r
+uh1att
+u2h1á2g
+uh1áll
+u2h1ár.
+u2h1árb
+u2h1árf
+u2h1árh
+u2h1árn
+u2h1árr
+u2h1árv
+uhá2szak
+uh1em
+uh1ex
+uh1ind
+uh1ing
+uh1orz
+uh1őr
+uh1pr
+uh1tr
+u2hu.
+u2huj
+uh1ujj
+uh1üz
u1i
+ui2de
+ui2dő
+ui2eu
+ui2ga
+ui2gé
+u2i1gn
+ui2pa
+ui2rá
+ui2zé
u1í
-uk2kór
-uk1üt
-ula2tin
-u2l1áll
+uí2ja
+uí2ju
+uí2ve
+uí2vű
+u2j1an
+1ujja.
+1ujjad
+1ujjai
+1ujjak
+1ujjam
+1ujjas
+1ujjat
+uj2j1á2ru
+1ujjb
+1ujjc
+1ujjd
+1uj2j1e2
+1ujjé
+1ujjf
+1ujjg
+1ujjh
+1ujji
+uj2jí
+1ujjk
+1ujjl
+1ujjm
+1ujjn
+1ujjp
+1ujjr
+1ujjs
+1ujjt
+1ujju
+1ujjú
+uj2jü
+1ujjv
+u2j1op
+uk1abl
+uka2c3se
+u2k1a2lap
+uka1pl
+uka2rán
+u2k1arc
+uka2szás
+uka1t2r
+uk1áll
+uká2sar
+u2k1ásó
+ukás3s
+u2k1átm
+uk1bl
+uke2l
+uk1e2m
+uk1ex
+u2k1ég
+u2k1érz
+u2k1i2p
+uk2k1alt
+uk2k1eg
+uk2k1em
+uk2k1ola
+uk2köl
+uklás1s
+ukló2s3zá
+u2k1old
+ukora2
+uko2ras
+uko2r1á2
+uko2ril
+uko2rin
+uko2r1o
+ukós2
+uk1öb
+uk1pr
+u1k2rón
+uk1ü2t
+uk1űr
+ula2cs1ö2
+ula1g2
+ula2jas
+ul1aleg
+u2l1alj
+ula1s2p
+ulata2l
+ula2t1ala
+ula2t1a2n
+ula2tál
+ula2tem
+ula2tik
+ula2tol
+u2l1ábr
+ulá2k1e
+ulá2k1ü
+u2l1á2ria
+ulá2s1i2k
+uláskész1
ulás3s
-ul2cs1e2
-ul2cs1ó
-ul1ex
-u2l1ér
-ulit2
-uli1tz
-u2l1í2
-2ulk
-ul2l1os
-2ulo
-ul2t1ü2
-u2l1ü2
-2uly
-um1a2da
-u2m1a2l
-um1áll
-um1e2d
-ume2g1
-u2m1e2l
-um1ev
+ulá2sza
+ulá2sze
+ul1bl
+ulcs1e2l
+ulcs1es
+ul2cs1ér.
+ul2csérv
+ul2cs1é2vé
+ul2csiga
+ul2csip
+ul2cs1í2
+ul2csor
+ul2cs1ö2
+ul2cs1ő
+ul2csut
+ul2csü
+ulcs3z
+ule2i
+uleí2
+ule2l
+ul1elő
+ulet2ta
+u2l1ex
+ulé2kal
+ulé2k1e2
+ulé2k1ol
+ulé2kut
+ul1épü
+u2l1érté
+uli2nar
+uli2nin
+ul1í2r
+ul1k2r
+ul2lef
+ul2l1e2l
+ul2l1em
+ul2l1en
+ul2l1ér
+ulot2
+uló1f2
+ulói2kon
+ulókész1
+ulóó2
+ulót2
+uló2zan
+uló2z1á2ra
+uló2z3s
+ul1öt
+ul1pr
+ul1st
+ul2t1aj
+ulta2r
+ult1asz
+ul2taz
+ul2tül
+ul1úr
+ul1üt
+ul1űr
+u2lyi
+u2m1abl
+um1abr
+um1a2cé
+um1ach
+um1a2dat
+u2m1adm
+um1a2do
+um1a2dó
+2umaé
+um1ajá
+u2m1a2ka
+umakész1
+u2m1akk
+u2m1akt
+u2m1a2la
+um1alg
+um1all
+um1alt
+u2m1ana
+u2m1ank
+u2m1a2no
+u2m1a2ny
+2umao
+2uma1p2
+u2m1a2rá
+um1arc
+um1arg
+u2m1a2ri
+um1a2ro
+um1asp
+u2m1atl
+u2m1au
+um1a2zo
+u2m1ág
+u2m1áll
+um1álm
+u2m1á2rak
+um1á2ram
+u2m1áras
+u2m1á2rá
+u2m1árf
+u2m1árk
+u2m1árn
+u2m1á2ro
+u2m1árr
+u2m1árt
+u2m1á2ru
+u2m1árv
+umát1a
+u2m1á2t1e
+u2m1átm
+u2m1átu
+um1bl
+um1b2r
+um1dr
+u2m1e2d
+u2m1ef
+ume2g
+um1egy
+um1ela
+um1elb
+u2m1e2le
+um1elé
+um1elh
+um1elí
+um1elj
+um1elm
+u2m1eln
+um1elo
+um1e2lő
+u2m1elt
+um1elv
+u2m1e2m
+ume2n1á
+ume2n1ó2
+um1e2re
+um1erk
+um1e2rő
+um1e2se
+um1ess
+um1e2sz
+u2m1e2t
+u2m1e2v
+u2m1ex
+um1ezr
+u2m1ég
+u2méhs
+um1é2le
+um1élv
+u2m1ép
+u2m1ér.
+u2m1érc
+u2m1érm
+u2m1érte
u2m1érté
-umik2
-umi1kr
-um1ing
-um1i2on
-um1ivá
+u2m1érv
+u2m1é2te
+um1fl
+um1f2r
+um1gl
+um1gr
+umia2
+um1i2dő
+umig2
+umi1gr
+um1imp
+umi2na.
+u2m1ind
+u2m1ing
+u2m1inv
+um1i2onb
+um1i2oné
+um1i2onh
+u2m1i2onj
+um1i2onk
+u2m1i2onn
+u2m1i2ono
+um1i2onr
+um1i2ont
+u2m1irt
+um1isk
+umi1sl
+um1ism
+umi1sp
+umi2szü
+umit2
+umi1tr
+um1izé
um1ív
-u2m1ol
+um1íz
+umkész1e
+um1kl
+um1kr
+um1kv
+umna2
+u2m1o2koz
+um1ola
+um1old
+um1oll
+um1olt
+um1olv
+u2m1o2p
+umo2ran
+um1o2rat
+umo2rál
+umo2rin
+um1osto
u2m1osz
-u2m1ő2
-umplis1
-um1pr
-u2nal
-u2n1ar
-2une
-un1g2l
-1unj
+u2m1ox
+um1ó2rá
+um1ö2l
+um1öm
+um1ön
+um1ö2r
+um1ös
+um1öt
+um1öv
+um1ö2z
+um1ő2r
+um1ős
+umpe2l
+ump1ele
+um2p1ing
+um1p2r
+um1sk
+um1sp
+um1st
+um1sz
+um1t2r
+u2m1ud
+u2m1ug
+u2muni
+umu2r
+um1ura
+u2m1u2t
+um1üg
+um1ü2l
+um1ür
+um1üs
+um1üt
+um1üv
+um1üz
+umva2s
+una1b
+un1adu
+un1akt
+u2n1arc
+u2n1á2g
+un2cs1e
+un2csiv
+un2dz
+un1e2r
+un1e2t
+un1ég
+un2g1a2g
+un2g1eg
+un2g1er
+ung3g
+un2g1ol
+u2n1i2d
+1u2nif
+1u2niku
+u2n1il
+u2n1ingo
+1u2nió
+1u2niv
+unka1p2
+unka1s
+un2k1eg
+u2nod
+u2n1orr
+un1ors
+u2not
+un1pr
+un1s2t2
+unta2i
+u2nun
+un1útj
+un1ü2l
u1o
+uo2la
+uo2li
+uo2r1a2
+uore2
+uo2r1et
+uo2r1i2o
+uo2xi
u1ó
-uó2l
+u2óbu
+u2óne
+uó1p2r
+u2óré
+uó2ri
+u2óso
+u2ósz
+u2óve
u1ö
-u1ő2
-2upa
-upe2r1e2
-upe2rin
-upla1
-u1p2ró
-u2rad
-2uralgia
-2uralgik
-u2ralo
-1u2ram
-ura2m1i
-2uran
-ure2u
-2uréká
-ur2f1e
-2urí
-2urob
-uro2ka
-2urol
-2uróp
-u1ry
-us1abl
-u2s1a2d
-u2s1a2l
-u2s1ar
-u2s1as
-u2s1a2u
+uö2ko
+uö2kö
+uö2rö
+uö2zö
+u1ő
+uő2re
+uő2ré
+uő2ri
+uő2rö
+uő2rü
+upa1b2
+up1ada
+upa1pr
+upas2
+upa1sp
+upa1t2r
+upda2
+upe2r1a
+upe2rel
+upe2r1in
+uper1s
+up1e2s
+upé1p2
+up2hi
+upli2n
+up1üz
+1u2raim
+1u2rak.
+1u2rakh
+1u2rakk
+1u2rakn
+1u2rakr
+u2ralh
+1uralk
+1u2ralm
+1u2ram.
+ura2m1is
+1u2rasa
+ura1s2p
+ur1áll
+urát1a
+ur2dar
+ur2d1e
+u2r1ef
+ur2fí
+ur2f1ú
+1urná
+ur2ne
+urn2é
+uro1b2
+uro2k1á
+uro2ke
+uro2ne
+uro1p
+uro1t2
+ur1öl
+urpi2
+ur2t1ag
+ur2t1e2t
+ur2t1e2v
+urti2t
+urt1ita
+ur2t1okta
+uru2c1e
+2urul
+uru1p2
+uru2szál
+u2rú.
+us1abla
+us1a2da
+us1a2dá
+u2s1a2dó
+u2s1a2g
+u2s1a2j
+usa2kar
+u2s1akc
+u2s1a2la
+us1alg
+us1alj
+us1alk
+u2s1alt
+us1alv
+u2s1ana
+us1ane
+us1ant
+us1apá
+u2s1a2ra
+u2s1a2rá
+u2s1arc
+us1arz
+u2s1ass
+u2s1att
+us1a2ty
+u2s1au
u2s1a2z
-us1áru
-us1eb
-us1e2g
-us1e2l
+u2s1ábr
+u2s1á2gá
+us1ágb
+u2s1ágg
+us1ágh
+u2s1ágr
+us1áld
+us1áll
+u2s1á2p
+u2s1árad
+u2s1á2rai
+u2s1á2rak
+u2s1á2rá
+u2s1árb
+u2s1árh
+u2s1á2ri
+u2s1árk
+u2s1árn
+u2s1á2ro
+u2s1árr
+u2s1árt
+u2s1á2ru
+us1áta
+us1áth
+us1áti
+us1átk
+us1átt
+us1átu
+us1átv
+us1bl
+us1br
+us1dr
+us1e2c
+us1e2d
+u2s1ef
+us1e2gy
+u2s1e2l
+u2s1e2m
+u2s1e2n
+us1erd
+u2s1e2s
+use1t
+u2s1e2v
+u2s1ex
us1ez
-u2s1ék
-us1ép
-u2s1id
-us1int
-u2s1i2r
-u2s1is
-us1izo
-us1k
-us1old
-us1ó2r
-u2s1ö2
-us1p2
+u2s1ég
+u2s1éhe
+u2s1é2k
+u2s1é2l
+u2s1é2ne
+u2s1ép
+u2s1érd
+u2s1érte
+u2s1érv
+u2s1és
+u2s1é2te
+us1étk
+us1étt
+u2s1éve
+us1fr
+us1gr
+u2s1i2d
+usi2g
+us1iga
+u2s1i2ko
+u2s1ill
+u2s1i2ma
+u2s1i2má
+us1imi
+u2simm
+us1imp
+u2s1inc
+us1ind
+us1inf
+u2s1ing
+u2s1ink
+u2s1int
+us1inv
+u2s1i2p
+u2s1i2rat
+u2s1i2rá
+us1iro
+us1irt
+u2s1isk
+u2s1ism
+us1ita
+us1izé
+us1íg
+u2s1íj
+usí2r
+us1írá
+us1író
+u2s1í2v
+u1s2kál
+us1kl
+uskói2k
+us1k2r
+us1kv
+u2sodú
+u2s1of
+us1okl
+us1okm
+us1okta
+us1ola
+u2s1old
+us1oli
+u2s1oml
+us1ond
+u2s1op
+u2s1org
+u2sori
+u2s1orr
+u2s1ors
+us1osz
+u2s1ott
+us1óc
+us1ó2s
+u2s1ö2l
+u2s1ön
+us1örd
+us1ö2rö
+u2s1ös
+u2s1öt
+us1ö2v
+u2s1ö2z
+us1ő2r
+u1s2pec
+us1pl
+us1pn
+us1pr
+us1ps
2uss.
-2ussé
-2ussh
-2ussn
-2ussr
-2usst
+us2se.
+us1ská
+us1spe
+us1spi
+us1sta
us1sy
-us3szem
+us3szab
+us3szag
+us3szak
+us3szál
+us3szám
+us3szen
+us3szé
+us3szig
us3szí
+us3szó
+us3szö
+us3sző
+usszü2
+ussz1ül
+us3szű
+ust1á2rár
+us2teg
+us2t1il
+us1trad
+us1tre
+us1tré
+us1tro
+u1stru
+us2t1ül
+u2s1uj
+usu2s
+us1usz
u2s1u2t
-u2s1ü2
-us3zav
-u2sz1ág
-u2sz1el
-u2sz1ö
-usz3s
-u2t1a2ny
-1u2taz
+u2s1új
+us1úté
+us1üd
+u2s1üg
+usü2l
+us1ülé
+u2s1ün
+u2s1ür
+us1üz
+usz1abl
+u2szaj
+usz1a2la
+usz1alk
+usz1alv
+u2sz1a2n
+usz1app
+usza2r
+usz1ará
+usz1aré
+usz1aro
+usz1asz
+u2sz1au
+u2sz1á2g
+usz1állá
+usz1á2p
+u2sz1á2rad
+u2s3zárako
+u2sz1á2ram
+usz1árje
+usz1ásv
+u2száth
+usz1átö
+u2sz1e2c
+u2szef
+usz1e2ge
+usz1e2gy
+usze2k
+usz1eke
+u2sz1e2l
+usz1emb
+usz1eml
+us3zene
+usz1eng
+u2sz1erd
+usz1e2ré
+usze2s
+u2sz1e2v
+u2sz1ex
+u2széne
+usz1éte
+usz1éto
+usz1imp
+usz1ind
+usz1inj
+usz1isk
+usz1ism
+u2sz1isz
+uszí2j1a2d
+u2sz1ír
+1u2szodá
+u2szola
+u2sz1old
+u2szony
+u2szop
+u2szosz
+u2sz1ö2b
+usz1öl
+usz1ön
+u2sz1ös
+usz1p2
+uszte2r1a
+usz1t2ran
+u2sz1u2s
+u2szut
+usz1útr
+uszü2
+usz1üg
+u2sz1ül
+u2sz1üz
+usz1z
+ut1abl
+uta2csel
+ut1a2dó
+2utakép
+1u2taló
+1u2talv
+utame2
+uta2mel
+uta2mer
+uta1p
+ut1ará
+1utasc
+uta2se
+1utasf
+1u2tasl
+1utasv
+utaü2
+2utav
+1utazi
+2utáb
+2utáé
+2utáib
+2utáin
+2utáju
+2utákb
+2utákt
+2utám
+2utáná
után1n
1utánz
-u2t1e2l1
-u1t2he
-u1t2hi
-ut2hu
-u2t1i2p
+2utáró
+utá2rú
+ut1bl
+1utca
+1utcá
+u2t1e2g
+ute2r1a
+ute2rá
+ute2reg
+ute2rim
+ute2ru
+utén3n
+ut1fr
+uti2k1á2r
+uti2ke
+ut1ill
+uti2m
+uti2n1e2
+uti2nér
+utini2
+uti2nig
+uti2n1ik
+uti2n1ó
+utin1s
+u2t1i2pa
+u2t1isk
+ut1kl
+ut1okke
+u2t1old
+uto2l1é
+u2tols
+2utomata
+uto2rim
+2utos
+2utot
+utó2dal
+u2tódá
+utó2del
+utó1p2
+utó2s1aj
+utós3s
+utó1s2to
utó1sz
-2utü1
+utó1tr
+utótűz1
+ut1pr
+ut2rak
+ut2ran
+ut2rák
+ut1sp
+ut1st
+ut1t2r
+ut1üg
+ut1ü2z
+utya1s2
u1u
-uu2m1á
-uu2miz
+uu2m1ag
+uu2mal
+uu2m1as
+uu2mál
+uu2m1e2
+uu2m1é2r
+uu2mim
+uu2min
+uu2mö
+uum1p2
+uu2mü
+uu2ta
+uu2tá
+uu2zs
u1ú
-u1ü2
+u1ü
+uü2gy
+uü2rí
+uü2té
+uü2ve
+uü2ze
u1ű
-2ux.
-u1y
-2uzal
-uzeo2
-2uzó
-uzz2
+uva2r1a
+uva2r1á2
+uva2r1e
+uva2rin
+uva2szál
+uvata2
+uva2t1ag
+uvi1g2
+uv2re
+uxi2t1a
+uxi2t1á
+uxi2t1e
+uzala2
+uza2lac
+uza2lad
+uza2lan
+uza2lág
+uza2l1át
+uza2lel
+uza2l1ék
+uza1p2
+uza1s2
+2uzál.
+2uzálb
+2uzáll
+2uzálr
+u2z1id
+uz1i2gye
+uz1ír
+uzki2
+uzói2
+uz3sap
+uz3sz
+uz1t2r
+uz1ü2g
+uzü2l
2ú.
ú1a
-úa2l
-úa2n
-ú1á2
+úa2da
+úa2dá
+úa2dó
+úa2gy
+úa2já
+úa2kar
+úa2kas
+úa2la
+úa2lá
+úa2ny
+úa2sz
+úa2ud
+úa2va
+ú1á
+úá2ga
+úá2gá
+úá2gi
+úá2go
+úá2gy
+úá2hí
+úá2lo
+úá2po
+úá2ra
+úá2ri
+úá2ru
+2úbab
+2úband
2úbar
-ú1b2r
-ú2cs1as
-ú2csárb
-úcse2
-úcs1em
-úcs1en
-úcs1er
-úcs1es
-ú2cs1é2
-ú2csid
-ú2csí
-úda2n
-ú2d1ez
-úd1ug
-ú1e2
+úb2lo
+2úbód
+úb2ri
+úb2ro
+ú2c1aj
+ú2c1a2l
+ú2c1a2n
+ú2c1a2v
+úc1e2t
+úc3he
+úc3ho
+ú2c1i2d
+úci2ókép
+úc1pr
+2úcsa
+ú2csab
+ú2csad
+ú2cs1ag
+ú2cs1aj
+ú2csakt
+úcs1ala
+ú2cs1a2n
+úcsa2p1á2
+ú2cs1a2s
+ú2cs1au
+ú2csaz
+úcs1á2g
+ú2cs1ál
+ú2cs1árá
+ú2cs1árf
+ú2cs1ári
+ú2cs1árv
+ú2csátv
+2úcse
+ú2cs1eb
+ú2cs1e2g
+úc3sej
+ú2cs1e2l
+úcs1emb
+ú2cs1en
+úcs1erő
+ú2cs1e2s
+ú2cs1él
+ú2cs1ér.
+ú2csérd
+ú2cs1érte
+ú2cs1érté
+ú2cs1é2v
+ú2cs1id
+ú2csigaz
+ú2cs1il
+ú2csim
+ú2cs1inf
+ú2cs1int
+úcs1i2pa
+ú2csirá
+ú2cs1is
+ú2cs1iz
+2úcso
+ú2csokta
+ú2csosz
+2úcsó
+ú2cs1ó2r
+úcs1öl
+úcs1ös
+úcs1p
+úcs1s
+úcs1t
+úcsús1s
+úcs1ü2t
+úcs3za
+ú2d1a2c
+úda2d
+úd1ada
+ú2d1a2k
+ú2d1a2n
+úd1ág
+úd1ál
+úd1á2r
+ú2d1e2g
+ú2d1ej
+úde2l
+úd1ele
+úd1elh
+úd1elő
+ú2d1e2m
+úde2ra
+úde2r1ec
+úd1erő
+úd1e2v
+ú2d1ék
+ú2d1ér.
+ú2d1érc
+údé2t
+úd1éte
+ú2d1i2d
+údi2g
+ú2d1igé
+úd1ing
+údi2ódar
+údi2óz
+ú2d1os
+úd1pr
+úd2rá
+úd2ro
+úd1üv
+údy1éh
+údy1ét
+údy1i
+údy2s
+úd3zá
+ú1e
+úe2bé
+úe2gé
+úegész1
+úe2gy
+úe2la
+úe2le
+úe2lo
+úe2lö
+úe2lő
+úe2me
+úe2pi
+úe2re
+úe2ré
+úe2rő
+úe2rű
+úe2sz
+úe2ta
+úe2te
+úe2ve
+úe2vő
ú1é
-úg1ál
+úé2he
+úé2le
+úé2lő
+2úé2ne
+úé2pí
+2úér.
+úé2r1á
+úé2re
+úé2ri
+2úérz
+úé2te
+úé2ve
+úfélé2
+úfé2l1év
+úf2lö
+úf2rá
+úf2ri
+úf2rí
+úf2ro
+úg1a2d
úgás1s
-ú2gya2
+úg1el
+úg1i2v
+úg1old
+úgós2
+úg2rá
úgy1ag
-úgy1ah
+úgy1el
+úgy1ér.
+úgyi2
úgy1is
-úhús3
+úgy1iv
+ú2gy1u2
+úgy1út
ú1i
-úi2d
-2úis
+2úi2de
+úi2dő
+úi2ga
+úi2gé
+2úi2ke
+2úikre
+2úill
+2úi2má
+úi2mi
+2úing
+2úint
+úi2pa
+úi2rat
+úi2rá
+2úisk
+2úism
+2úist
+úi2ta
+2úi2vad
+úi2vás
ú1í
-új1ang
+úí2rá
+úí2ve
+úí2vi
+úí2vü
+2újáté
új1es
új1ez
-új1é2
-1újf
-1ú2jí
-új1k2
-1újr
+új1éve
+új1évé
+új1k2r
+1ú2jon
+új1or
+új1pl
+újra1
+1újsá
új1ud
-ú2k1al
-ú2k1a2n
-ú2k1e2s
+ú2jul
+2úkab
+ú2k1a2g
+ú2k1a2j
+úk1a2lak
+2úkalan
+ú2k1alk
+ú2k1any
+2úkap
+ú2k1a2pó
+2úkar
+2úkate
+ú2k1atk
+ú2k1ál
+ú2káru
+úke2l
+úk1ele
+úk1ell
+ú2k1em
+úke2s
+úke2t
+úk1ete
+úk1e2vé
+2úkérd
+2úkéré
+2úkés
+ú2k1éss
+ú2k1észr
+ú2k1é2te
+2úkéz
+úkia2
+ú2k1i2d
+2úkin
+ú2k1is
+ú2k1i2t
+ú1k2li
+úk2lu
+2úkol
+ú2k1olt
+2úkom
+2úkonf
+2úkong
+2úkorá
2úkoro
-2úkó
-úk1ól
-ú2k1ü2
-2úl
-ú2l1ad.
-ú2l1ada
-ú2l1a2dá
-ú2l1a2dó
-ú2l1aj
+2úkos
+úk1ó2l
+úkö2l
+úk1ölő
+úk1pr
+ú1k2re
+úk1t2r
+ú2k1ud
+ú2k1úr
+úkü2l
+úk1ülő
+úk1ült
+ú2k1ür
+ú2k1ü2t
+ú2k1üz
+úl1a2d
+úl1a2ja
+úl1a2l
+úl1a2m
úla2n
-úl1ál
-úl1d2
-ú2l1e2d
-ú2l1eg
-ú2l1e2m
-ú2l1erő
-ú2l1e2s
-ú2l1ex
+ú2l1any
+úl1a2ro
+ú2l1á2g
+ú2l1ál
+úl1árn
+ú2l1á2sz
+úl1átv
+úl1br
+úl1d2r
+úl1e2d
+úle2l
+úl1ele
+úl1ell
+ú2l1emb
+úl1en
+ú2l1e2re
+úl1e2s
+ú2l1e2vő
+úl1ex
+ú3lé.
úl1é2d
-úl1ég
-úl1é2r
-ú2l1in
-ú2l1is
-ú2l1iz
-ú2l1í2
+úlé2g
+ú3l2é3va
+úl1fr
+úl1gl
+ú2l1i2d
+ú2l1igé
+ú2l1ij
+ú2l1il
+ú2limá
+ú2l1ind
+ú2l1inf
+ú2l1ing
+ú2l1inj
+ú2l1int
+ú2l1inv
+ú2l1i2p
+ú2l1irá
+ú2l1isk
+ú2l1i2sz
+ú2l1i2ta
+ú2l1itt
+ú2livás
+ú2livo
+ú2lizgato
+ú2l1izz
+úl1íg
+úl1í2v
+úl1k2l
+úl1kv
+úlo2k
+úl1oko
ú2l1ol
-úl1ó2r
+úl1ope
+ú2l1or
+ú2l1os
+ú2l1ox
+úl1öb
úl1öl
-úl1öm
-úl2tag
-ú2lyar
+úl1ö2m
+úl1ö2n
+úl1ör
+ú2l1ös
+úlövés1s
+úl1őrü
+úl1p2l
+úl1p2r
+úl1p2s
+úl1sk
+úl1sm
+úl1sp
+úl1s2t
+úlsz2
+úlsztá2
+últ1agg
+últ1agy
+úl2t1aj
+úl2t1al
+úl2t1árn
+úl2tél
+úl2térte
+úl2t1és
+últ1éves
+últi2
+úl2tid
+úl2t1im
+úl2t1in
+úl2t1ip
+úl2tis
+úl2tí
+últ1old
+úl2tös
+úl2t1ő2r
+úl1trá
+ú2l1ud
+ú2l1u2g
+ú2l1ur
+ú2l1u2t
+ú2l1úr
+úl1ús
+úl1üg
+úl1ül
+úl1ün
+úl1ür
+úl1üt
+úl1üv
+úl1üz
+úl1űz
+ú2ly1a2d
+ú2ly1a2l
+ú2ly1an
+ú2ly1a2r
+ú2ly1au
+ú2lyál
+ú2ly1átl
ú2ly1e2
-ú2lyér
-2úm
-únyi2
-úny1ir
-ú2ny1ö2
+ú2lyél
+ú2lyés
+ú2lyol
+ú2ly1ö
+ú2lyő
+úly1s
+ú2lyug
+2úmac
+2úmad
+2úmag
+2úmaj
+2úmar
+2úmatr
+úmi2al
+2úmoz
+2únac
+2únap
+únau2
+ú2ny1a2n
+ú2ny1i2r
+úny1tr
ú1o
+úo2ko
+úo2ve
ú1ó
+úó2ra
+úó2rá
+úó2sá
+úó2vo
ú1ö
-ú1ő2
-úpos3s
-ú2r1an
-ú2r1att
-ú2r1a2u
-ú2r1áll
+úö2le
+úö2lé
+úö2lő
+úö2rö
+úö2ve
+ú1ő
+úő2rö
+úp1eg
+úpe2l
+úp1es
+ú2p1in
+úp2la
+úp2lé
+ú2p1or
+úp1p2l
+úp2rí
+úp2ro
+úraát1
+2úrab
+2úraj
+úr1akk
+úr1alu
+ú2r1ant
+úr1a2nya
+úra1p2
+úra1szp
+ú2rattas
+úrau2r
+ú2r1ábr
+úr1áll
ú2r1á2ri
-úr1e2g
+úrás1s
+ú2r1átm
+úr1br
+úr1d2r
+úr1e2c
úr1e2l
-úr1es
-1ú2ré.
-úr1ék
-úr1é2l
-ú2rig
-ú2rin
-úr1int
-ú2r1ot
-ú2r1ö
-úrs2
-úr1sm
-2úru
-úsa2
-ú2s1ad
-ús1e2l1
-úsele2
+úr1ez
+ú2rék
+úr1ékk
+ú2r1é2l
+úr1é2ne
+2úrés
+úrfé2l1é2v
+úri2al
+ú2r1i2d
+ú2rie
+úr1ifj
+úri2g
+ú2r1iga
+úri3gényé
+úr1i2m
+ú2r1inf
+úr1ing
+ú2r1int
+ú2ris
+úr1ist
+úr1k2r
+1úrnőr
+úr1ott
+úró1p2
+úró1sp
+úr1ö2c
+úr1ö2l
+úr1ön
+úr1öt
+úr1ős
+úr1pr
+úr1s2k
+úr1sn
+úr1s2r
+úr1s2t
+úr1szn
+úr1u2t
+úr1ü2l
+úr1ü2v
+2úsabl
+ús1abr
+ú2s1a2d
+ú2s1a2j
+ús1a2la
+úsa2n
+ús1any
+ús1apr
+úsa2r
+ús1ará
+ú2s1arc
+2úsarj
+úsá2gol
+ús1áld
+ú2s1á2p
+ú2s1á2rai
+ú2s1á2rak
+ú2s1árb
+ú2s1áre
+ú2s1á2ro
+ú2s1á2ru
+ú2s1á2rú
+ú2s1árv
+2úsát
+ús1átl
+ú2s1á2z
+ús1dr
+ús1e2c
+ús1e2l
ús1e2v
ús1ex
-úsé2
-ú2s1ét
+ú2s1é2g
+ú2s1é2l
+ús1é2ne
+ú2s1é2ré
+ús1érm
+ú2s1érté
+ú2s1é2tá
+ú2s1é2te
+ús1étr
+ús1fr
+úsi2g
+ús1iga
ú2s1il
+ús1imp
+ú2s1in
ú2s1i2p
+ú2s1i2r
+ú2s1is
+ús1í2z
+ús1kl
+ús1kv
+ú2s1ola
ú2s1old
-ú2s1ő
+ús1org
+ú2s1orr
+ús1osz
+ús1ó2h
+ús1ös
+ús1őr
+ús2pe
+ús1pr
+ús1s2p
+ús3szag
+ússza2k1
+ús3szav
ús3sze
+ús3szi
ús3szí
+ús3szó
+ús3szö
+ús3szú
+ús3szü
+ús2tat
+ús1t2r
+ú2s1u2ga
+ú2s1u2t
+ús1üg
+ús1ün
+ús1ü2t
+ús1üz
+úsvé2t1e
+ú2sz1a2d
+ú2sz1akc
+ú2sz1á2g
+úszás1s
2úsze
úsz1ej
-úsz1es
-úsz1ev
-úsz1ez
-úsz1év
-úsz1öl
+úsz1e2s
+úsz1e2v
+2úszé
+ú2sz1év
+ú2szigá
+2úszí
+úsz1k2
+úsz1old
+úsz1osz
+ú2szóe
+2úszö
+úsz1ös
+úsz1p
+ús3zse
+ú2s3zú
+2úszü
+úsz1ü2g
+úsz2ve
út1a2d
-út1á2g
+út1a2i
+ú2t1a2j
+út1a2v
+ú2t1ál
+út1á2ro
út1á2s
-út1át
-1útd
+ú2t1á2t1
+útá2v1i2
+út1bl
út1ef
-út1e2g
-út1ép
-út1ér
+ú2t1e2g
+út1elá
+út1ell
+út1elz
+ú2téh
+út1é2l
+ú2tén
+ú2t1ép
+út1érd
+ú2t1é2ri
+út1érz
+útfélé2
+út1gr
+ú2tiakh
+ú2tiakn
+út1id
útie2
-úti1p
+ú2tié
+úti2g
+út1igé
+1ú2tij
+1ú2t1i2ko
+út1ill
+1ú2tiná
+út1ind
+út1inf
+út1ing
+út1int
+út1i2pa
+1ú2tir
út1irá
+út1ism
+út1ist
+1ú2t1i2z
+út1íg
+út1íj
+út1ív
+út1okm
+ú2t1ola
út1old
-1úto2n1
-út1ő
-2ú1u2
+út1oml
+úto2n1
+út1ont
+út1op
+2útor
+úto2ran
+úto2r1as
+úto2rál
+úto2re
+út1ost
+út1osz
+út1ös
+útő2r
+út1pl
+út1pr
+ú1t2rag
+2ú1t2ri
+útsá2gi
+út1st
+útu2m1é
+útu2r
+út1urá
+ú2t1út
+ú2t1üg
+1útvo
+ú1u
+úu2no
+úu2ra
ú1ú
-ú1ü2
+ú1ü
+úü2gy
+úü2lé
+úü2re
+úü2te
+úü2ve
+úü2vö
+úü2ze
ú1ű
+úű2ző
+2úvál
+úv2ár
+úvá2rad
+úvá2ral
+úvá2ris
+úvá2rosz
+úvá2r1ó2
+úváru2
+úzae2
+úzaé2
+úzak2
+úza1p2
+úz1arc
+úza1t2r
+ú2z1ál
+ú2záru
+úzás1s
+úz1i2d
+úzido2
+úzót2
+úzó1tr
+úz1p2r
+ú2zs1a2l
+ú2zsál
+2úzse
+úzs1e2c
+2úzsi
úz3sz
+úz1t2r
2ü.
ü1a
+üa2já
+üa2la
ü1á
-ü2dí
+üá2ga
+üá2go
+üá2gu
+üá2ra
+üá2sz
+üb2lo
+ücsö2k1
+ü2des
+1ü2dít
üd1íz
-1ü2dü
-üd2v1i2
+ü2d1ör
+üdös3s
+üdőé2
+1ü2dül
+üd2v1a2
+üd2v1el
+üd2v1e2s
+üd2vél
+üd2vid
+üd2v1í
üd2vo
-ü1e2
+1üdvö
+üd2völ
+üd2vő
+üd2vu
+üd2vú
+ü1e
+üe2bé
+üe2ge
+üe2gé
+üe2le
+üe2l1é2
+üe2me
ü1é
-ü2g1el
-ügy1in
-ügy1o
+üé2ke
+üé2pí
+üf2f1ö2
+üfö3le
+üf2ro
+üge1k2
+üge3l
+üg2ra
+ü2gy1a2
+ü2gy1á
+ü2gyef
+ügy1e2lemb
+ügy1e2lemm
+ügy1elf
+ü2gy1ell
+ügy1elm
+ügy1elo
+ügy1éjé
+ügy1ékb
+ügy1éré
+ügy1érr
+ü2gyés
+ü2gyil
+1ü2gyin
+ügy1int
+ügy1ira
+ü3gyí
+1ügynö
+ügy1os
ü2gy1ő2
-ü2h1a
+üh1af
+üh1at
+üh1ás
+ü2h1e2le
+üh1elf
+üh1ellen
+ü2h1e2lő
+üh1elv
+ü2h1éh
+ü2h1ér.
+ü2h1in
+ü2h1it
+üh1or
+üh1ős
ü1i
+üi2gé
+üi2ko
ü1í
-ük1ac
-üka2n
+üí2rá
+ük1a2n
üka2p
-ü1k2hé
-ü1k2hi
+ük2kal
+ük2ká
+ükke2
+ükkel1
ük2ker
-ük1u2
-ü2l1a2d
-ü2l1ag
-ül1a2l
-ü2l1á2
+ükko2
+ük2kop
+ük1u2n
+ül1ab
+ül1a2d
+ül1ag
+ül1aj
+ül1a2k
+ü2l1a2l
+ül1a2r
+ül1at
+ül1au
+ül1á2c
+ül1á2g
+ül1ál
+ül1á2p
+ül1á2r
+ül1á2s
+ül1br
+ül1d2r
+ü2l1ecse
+ül1e2dz
+ü2l1e2g
+2ülek
+ül1ell
+ü2l1e2lőte
ül1eng
-1ü2lep
-ül1esh
+ül1enn
+ü2l1e2r
ül1e2ső
-üle2t1a
-üle2tá
-üle2teg
+ületa2
+üle2tal
+üle2t1an
+üle2t1as
+üle2tav
+üle2t1á2
+üle2t1eg
üle2t1e2l
-ü2l1ég
-ü2l1ép
-ül1ér.
-ül1érz
-ü2l1í2
-ül1ol
+üle2t1ék
+üle2t1ér.
+üle2t1érn
+üle2t1é2rő.
+üle2térü
+üle2t1é2ve.
+ületo2
+üle2t1or
+üle2tos
+üle2t1ó2
+üle2t1ö2
+ület1t2
+ül1ette.
+ül1etted
+üle2t1u
+üle2tüz
+ü2l1ex
+ü2l1é2g
+ülé2k1a2
+ülé2k1á2
+ülé2k1e2l
+ülé2kev
+ülé2kir
+ülé2k1o
+ülé2ku
+ü2l1él
+ül1é2pü
+ü2l1ér.
+ü2l1é2ré
+ül1éri
+ül1érj
+ül1érn
+ül1érs
+ü2l1é2rü
+ül1érv
+ü2l1érz
+ülé2sa
+ülé2so
+ülés3s
+ülé2s3zá
+ül1fr
+ü2l1i2d
+üli2g
+ü2l1iga
+ül1ill
+ü2l1im
+ü2l1int
+ül1ira
+ü2l1itt
+ü2l1iz
+ül1íg
+ül1í2r
+ül1í2v
+ül2l1a2n
+ül2l1in
+ül2l1ö2vü
+ül2l1u2
+ül3lyu
+ülnö2k1öl
+ül1o2d
+ül1o2l
+ül1om
+ül1op
ül1or
-ül1ölt
+ül1ó2v
+ü2l1öb
+ü2l1ö2l
+ü2l1ömö
+ü2l1ör
ü2l1ö2v
ülőe2
-ülői2r
-ül2tad
-ültá2
-ül2táp
-ül2t1ár
-ül2tát
-1ültes
-ü2l1u2
-ü2l1ú2
-ü2l1ü2l
-ül1üt
-üm1il
+ülőé2l
+ülő1sl
+ülő1s2p
+ülő1sta
+ülőt2
+ül1p2l
+ül1p2r
+ül1sl
+ül1sp
+ül1st
+ül2t1ad
+ültá2r
+1ültetl
+1ültets
+ül2t1e2v
+ül1tra
+ül1ud
+ül1u2g
+ül1u2t
+ül1ús
+ü2l1üg
+ülü2l
+ül1ülé
+ül1ülh
+ül1üli
+ül1ülj
+ül1üln
+ül1ült
+ül1ülv
+ü2l1ür
+ü2l1üt
+ü2l1üv
+ü2lyel
+üly1ess
+üly1esz
+üm1a2l
+üm1a2n
+üm1a2r
+üm1á2r
+üme3gi
+üm1éks
+ü2m1ép
+ü2m1érd
+üm1fl
+üm1fr
+ümi2g
+ü2m1iga
+ü2m1il
+ü2m1im
+ü2m1i2p
+ü2m1is
+ü2m1iz
+üm1kl
+üm1kr
+üm1o2l
+üm1or
+üm1os
+ü2m1öss
+üm1őr
+üm1p2r
+üm1tr
+üm1új
+ü2m1ü2l
+ü2m1üv
+ü2m1üz
+ün1ál
+ün1á2r
+ün1e2l
+üne2t1elet
+üne2tés
+ün1evé
+ü2n1é2p
ün1id
-ün1kri
-ü2n1ó2
+ü2n1ing
+ü2n1irt
+1ünnep
ü1o
+üo2k1i2
ü1ó
+üó2rá
ü1ö
ü1ő
-ü1p2h
+üő2re
+üp2ri
+üp2ro
+ürdés1s
1ü2reg
+üre2g1a
+üre2gá
üreg1g
-1ü2rí
-ür2ja
-ürke1
+1ü2res
+üre2tö
ü2röm
-üss1eg
-üs2t1a
-üs2t1á
+ür2t1a
+ür2t1á
+ür2t1e2
+ür2tis
+ür2t1o2
+ürtok1
+ürtü2
+ür2tül
+1ü2rül
+üs2s1a2
+üs2s1á
+üs2s1eg
+üs2s1o2
+üss1s
+üssü2
+üs2s1ül
+üs2t1a2
+üs2tá2
+üst1ág
+üst1ál
+üst1ár
üs2t1e2
-üsté2
+üst1ég
+üs2t1ék
+üs2tél
+üs2t1ér.
üs2t1ére
+üs2t1érm
üs2t1il
-üs2t1í2
-üs2t1o
+üs2tim
+üs2tir
+üs2t1is
+üs2tí
+üs2t1o2
üs2t1ó2
-ü2teg
+üs2t1ör
+üs2t1ö2v
+üs2t1őr
+üs2t1ős
+üs2t1u2
+üs2tú
+üstű2
+üs2t1űz
+üsz1ál
+üszi2
+ü2sz1iv
+üsz1í2v
+ü2sz1önt
+ü2szür
+üt1ab
+üt1aj
+1ü2teg
+1ü2tem.
+üte2m1a2
+ü2temb
+1ü2teme
+üte2m1el
+ü2teméb
+üte2mért
+üte2min
+ütési2
+üté2sik
ütés3s
+üté2s3z
+1ütkö
+ütő1s2p
üt2t1á
-üt2tem
üt2t1é2
+ütty1e2g
+üt2zi
ü1u
+üu2ta
ü1ú
ü1ü
ü1ű
-üveg1g
-üze2ma
-üze2mo
-1ü2zene
+üve2g1a2
+üveg3g
+üvezé2r
+1üze2m1a2
+üze2m1á
+üze2meg
+üze2m1érté
+üze2m1étk
+1ü2zemi
+üze2m1o
+ü2zemt
+üze2m1u2
+ü2zemű
+üze2t1a
+üze2t1o
+üzé2ra
+üzé2r1e2l
+1üzlet.
+1üzletn
2ű.
-ű1a2
-ű1á2
-ű2cs1á
-űcs1ip
-ű2d1e
+ű1a
+űa2da
+űa2dó
+űa2gy
+űa2ka
+űa2la
+űala2g1
+űa2lo
+űa2na
+űa2ny
+űa3nyagoc
+űa2or
+űa2pa
+űa2pá
+űa2ra
+űa2rá
+űa2to
+űa2ut
+űa2va
+űa2xi
+űa2zo
+ű1á
+űá2bé
+űá2ga
+űá2gá
+űá2gy
+űá2hí
+űá2je
+űá2lo
+űá2po
+űá2ra
+űá2ri
+űá2ro
+űá2ru
+űá2sí
+űá2té
+űá2tí
+űba2l1
+űbé2rel
+űb2lo
+űb2ró
+űcsapá2
+űcsa2p1ág
+űcs1as
+ű2cs1ék
+űcs1i2pa
+űd1ál
+ű2d1e2l
+ű1d2rá
+űd2ro
+ű1d2ró
+űd1sk
ű1e
-űe2g
-űe2p
-űe2v
+űe2cs
+űe2ge
+űe2gé
+űe2gy
+űe2kére
+űe2la
+űe2le
+űe2lé
+űe2l1í2
+űe2lő
+űe2lü
+űe2me
+űe2pi
+űe2po
+űe2re
+űe2rő
+űe2se
+űe2sé
+űe2ső
+űe2te
+űe2ti
+űe2vé
+űe2vő
ű1é
-űé2l
-űé2p
-űfa2je
+űé2le
+űé2lé
+űé2nekb
+űé2neke
+űéne2kest
+űé2neké
+űé2nekr
+űé2pí
+űé2te
+űfa2j1e2
+űf2lo
+űfo2g1a2l
+űf2ra
+űf2ri
+űf2ro
+ű2g1ö2lé
+ű2g1ö2lő.
+űg1ős
+űgő2z
+űg2ra
+űg2rá
+űholda2d
+űhol2d1ada
ű1i
-űi2p
-ű1í2
-űka2g
+űi2do
+űi2ga
+űi2gé
+űi2má
+űi2mi
+űi2pa
+űi2rá
+űi2ro
+űi2sz
+űi2ta
+űi2zé
+űi2zo
+ű1í
+űí2rá
+űí2ri
+űí2ró
+űí2té
+űí2ve
+űí2zü
+űí2zű
+űkia2
+űk2la
+űk2li
+űk2lí
+űk2lo
+űk2rep
+ű1k2ré
+ű1k2ri
ű1k2ro
-űlőú2
-ű2n1el
-ű2n1e2s
-űn3n
-ű1o2
+ű1k2ró
+űk2va
+űme2g1
+űn1al
+űn1ar
+űn1ál
+űn1á2r
+űn1e2le
+űn1elh
+űn1e2li
+űn1elk
+űn1e2lő
+űn1elr
+űn1elt
+űn1eml
+űn1e2se
+űn1est
+űne1t2
+ű2n1ér.
+ű2n1érte
+űni2g
+ű2n1iga
+ű2n1in
+ű2n1i2p
+ű2n1i2r
+ű2n1is
+űnme2
+űn3ny
+űn1o2k
+űn1ol
+űn1os
+űn1ó2r
+űn1pr
+űn1s2k
+űn1s2t
+űn1u2n
+űn1u2t
+ű2n1üs
+ű2n1üz
+űn1űz
+ű1o
+űo2dú
+űo2ká
+űo2ko
+űo2la
+űo2rá
+űo2ro
ű1ó
+űó2ce
+űó2ra
+űó2rá
+űó2ri
ű1ö
+űö2lő
+űö2rö
+űö2ve
+űö2zö
ű1ő
-űra2
-űr1an
-űr1at
+űő2rö
+űp2la
+űp2lü
+űp2ne
+űp2ré
+űp2ri
+űp2rí
+űp2ro
+űp2ró
+űr1ad
+űr1a2l
+űr1a2m
+űr1a2n
+űr1au
+űr1a2v
+űr1áb
űr1ál
-űr1es
+űr1ás
+űr1áz
+űr1egy
+űr1e2l
+űre2n
+ű2r1e2r
+űr1ex
+ű2r1é2j
+űr1é2l
+űr1ép
+űrés3szer
+űré2sza
+űré2szá
+űré2szí
+űré2szo
+űr1fl
+űr1id
+űri2g
+űr1iga
+ű2r1i2m
+űr1int
űr1i2p
+űr1ist
+ű2r1ír
+űr1o2d
ű2r1ol
-űr1öl
-űr1p2
-ű2r1u2
+űr1o2p
+űr1or
+űros2t1a2
+űr1ot
+űr1ón
+ű2r1ö2l
+űr1ör
+űrő1f2
+űr1pl
+űr1pr
+űr1p2s
+űr1s2p
+űr1s2t
+űrszt2
+űr1tra
+űr1uj
+űr1un
+űr1u2t
+űr1út
űr1üg
+űr1üz
+ű2s1ajtó
+űs1ál
+űsé2g1el
+ű2s1ín.
+ű2s1í2r
+ű1s2ka
ű1s2ká
-űs3s
-űs2to
-ű2s1u
-ű1t2r
-ű1u2
+űso2rad
+űso2raj
+űso2ral
+űso2ran
+űso2rál
+űso2rosz
+űsor1s
+űsort2
+űs2pe
+űs2pi
+űs2po
+űsp2r
+űs2rá
+űs3sz
+ű1s2ta
+ű1s2tí
+ű1s2to
+űst2r
+űs1tro
+ű2s1uj
+ű2s1ü2t
+űsze2r1á
+űsze2r1e2le
+űszere2p
+űsze2r1epé
+űsze2r1ült
+űsz2k
+űsz2t
+űtés3s
+űtőa2
+űtőe2
+ű1t2ra
+ű1t2rágá
+ű1t2re
+űt2ri
+ű1t2ro
+ű1u
+űu2ga
+űu2ra
+űu2sz
+űu2ta
+űu2tá
+űu2tu
ű1ú
-ű1ü2
+űú2ri
+űú2sz
+űú2ti
+űú2to
+ű1ü
+űü2gy
+űü2lé
+űü2rí
+űü2te
+űü2té
+űü2tö
+űü2ve
+űü2vö
+űü2ze
ű1ű
-űve2r
-űves1s
-űza2
+űű2ző
+űvé2sz1a
+űvé2sz1á
+űvé2sz1e2l
+űvé2szer
+űvé2szint
+űvé2szo
+űvé2sz1ó2
+űvé2szö
+űvé2szú
+űví2z1
+űvíze2
+ű2z1a2b
+űz1a2d
+űz1a2g
űz1ak
-űz1an
-ű2z1á
-ű2z1el
+űz1a2l
+űzal1e
+űz1a2p
+űz1a2r
+űz1a2s
+űz1a2t
+űz1a2u
+űz1á2g
+ű2z1ál
+ű2z1árb
+ű2z1árj
+űz1átl
+űz1átu
+ű2z1ed
+ű2z1ef
+ű2z1e2l
+ű2z1em
ű2z1e2r
-ű2z1e2s
-űz1ev
-űz1érm
-ű2z1im
-ű2z1is
-ű2z1o2
-ű2z1ör
-űz1ö2v
-űz1őr.
-űz1őrs
+űze2s
+ű2z1ese
+ű2z1esé
+ű2z1est
+ű2z1esz
+űze2teg
+űze2tel
+ű2z1e2v
+ű2z1ég
+ű2z1é2l
+ű2z1érm
+ű2z1érté
+ű2z1érz
+ű2z1ész
+űz1fr
+űz1gl
+űz1g2r
+űzi2g
+ű2z1iga
+űzigaz1
+ű2z1igé
+ű2z1i2m
+ű2z1i2r
+űz1isk
+űz1ism
+űz1ist
+űz1i2sz
+ű2z1iz
+űz1ín
+űz1ír
+űz1í2v
+űz1kl
+űz1kr
+űz1o2k
+űz1o2l
+ű3zom
+űz1on
+űz1op
+űz1or
+űz1os
+ű2z1óc
+ű2z1ó2r
+ű2z1ö2kö
+űzöl2d1el
+ű2z1ö2v
+ű2z1öz
+űzőa2
+űzőe2
+ű2z1őr.
+űz1ő2rei
+ű2z1ő2ri
+űz1őrk
+űz1őrm
+ű2z1őrn
+ű2z1ő2rö
+ű2z1őrr
+ű2z1őrs
+ű2z1őrt
űz1őrz
-űz1p2
-űz3su
+űz1p2r
+űz3sa
+ű2zsám
+ű2z3sár
+ű2z3sáv
+ű2z3ser
+ű2z3sé
+ű2z3só
+ű2z3sö
+űz3s2p
+ű2z3suga
+űz3sü
+ű2z3sű
+űz3sz
+űz1t2r
+ű2z1ug
+űz1úr
+űz1út
+ű2z1ü2g
+ű2z1ül
+űz1ünn
+ű2z1üt
+űz3zs
+2v.
1va
-vaa2
+vaa2d
+vaát1
+vaáta2
+2v1abl
+va1bra
+v1abs
+vacs1ala
+va2cs1an
+va2csap
+va2csál
+va2cs1ü2
+vacs3z
+2v1a2dag
+va2d1aj
+va2dalé
+2v1adap
+va2d1asz
+v1a2data
+v1a2datb
+v1a2datk
+v1a2dato
+v1a2datr
+va2daz
va2d1ál
-va2d1ár
-va2d1e2
-vadi2
-va2did
+va2deg
+va2d1e2l
+va2den
+va2dep
+va2d1e2r
+va2d1e2t
+va2dél
+vad1éte
+va2dib
+va2d1id
+va2d1ir
+va2d1i2t
+va2d1ír
va2d1ol
-v1a2dón
-va2dö
-va2d1ő
-va2d3z
-va2ge
-vaja2
-va2j1ad
-va2j1e
+2vadom
+va2dóh
+va2dói
+v1a2dój
+va2dór
+v1a2dóu
+va2d1ör
+va2d1ő2
+va2d1ú
+va2dű
+va2dza
+va2dzá
+va2dze
+vaé2r
+va2g1as
+va2gav
+va2gás
+va2g1e2
+va2g1é2n
+vag1g
+va2gid
+va1gle
+va2g1o2ku
+va2goli
+vag1ost
+va2g1osz
+va2g1ura
+va2gú
+2v1a2gyú
+va2j1ar
+va2j1ác
+va2j1á2ro
+va2j1e2g
+va2jí
+va2j1ol
+va2j1ó2s
va2jö
-va2k1e2s
-va2n1eg
-van1es
-va2név
+va2jü
+2va2kad
+vak1a2dá
+va2k1aj
+vak1akn
+vak1apá
+vak1árn
+va2k1ás
+va2k1át
+va2keg
+va2kem
+va2k1érté
+va2kis
+va2k1ír
+va2k1ó2s
+va1krí
+vak1t2
+2vakti
+2v1aktu
+2vakup
+va2k1út
+va2lac
+va2laku
+va2lap.
+va2lapí
+va2lapú
+vallás1s
+2v1amp
+2v1a2nal
+va2n1e2g
+vane2m
+van1eme
+va2n1es
+vané2v
+van1éve
+van1évi
2vang
van3n
va2nol
-va2n1ó2
-va2nö
-vao2
+va2nó
+2v1a2nyá
+2v1a2nyó
+va1p2l
+va2pos
+va1p2r
+2v1a2pu
+va2r1ab
+vara2c
+var1acé
+va2r1a2d
+var1ajt
+var1akt
va2r1al
va2rany
-va2rar
-va2r1ir
-2varú
+var1a2nya
+va2r1a2p
+va2r1a2r
+va2r1assz
+va2r1at
+va2r1av
+va2rág
+va2r1ál
+2v1a2rány
+va2r1ászn
+var1áta
+va2r1átf
+va2r1átm
+va2r1á2to
+va2r1á2zá
+varca2
+var2cag
+var2cal
+var2can
+varc1c
+var2c3ho
+va2r1es
+va2r1e2t
+va2rev
+va2rég
+var1ék.
+var1éks
+va2r1é2l
+va2rép
+va2r1éré
+va2rid
+va2r1i2ko
+va2r1ikr
+va2r1ill
+va2rim
+var1inf
+var1ink
+va2r1inv
+va2r1i2p
+var1isk
+var1ism
+va2rí
+var2k1an
+var1k2b
+var1k2j
+var1k2ká
+var1kl
+va2r1okm
+var1old
+va2rop
+va2ror
+va2rön
+va2rő
+vars2
+varsz2
+var2t1i2n
+var2tor
+vartó2
+var2t1ór
+va2r1ut
+va2r1út
+va2r1ü2
+va2rű
+vas1abl
+va2sag
va2s1aj
-va2s1e2
-va2sék
+vas1arc
+vas1asz
+va2s1ábr
+va2s1ál
+va2s1árl
+va2sek
+va2s1e2l
+va2sem
+va2s1e2r
+va2set
+va2s1ék.
+vas1ékk
+va2s1ékn
+vas1ékt
+vasé2r
+va2s1ére
+va2s1érté
+va2s1érv
+vasfélé2v
va2sid
-va2s1in
-va2sö
+va2s1i2na.
+va2s1ing
+va2s1i2s
+va2s1iz
+va2s1ön
+va2ső
vas3sze
-vas3szé
+vas3szi
+vas3sző
vast2
-vas1tr
-va2s1ü
-vasz3s
-va2t1á2r
-va2t1é
-vat1int
+vas1tró
+va2sus
+va2s1ü2t
+va2sű
+vasz1e2l
+va2szis
+va2t1a2d
+va2t1aj
+va2tau
+va2t1ál
+va2t1á2ru
+va2t1e2v
+va2t1ék
+va2tél
+va2t1érte
+va2t1é2te
+va2t1id
+va2tim
+vat1inf
+vat1ing
+va2t1is
+va2t1ír
+vatmo1
+vatmosz2
+va2t1okm
+va2t1old
+va2t1ö2v
+vatő2
+va2t1őr
vatt2
+2vattako
+va2t1ur
+2v1a2uk
+vau2n
+vaza2t1e
+2v1a2zon
1vá
-váb2bal
-váb2be
-vá2csi
+váb2baj
+váb2b1as
+váb2b1e2
+váb2b1é
+váb2bil
+váb2bol
+váb2bos
+váb2bő
+váb2bu
+2vábr
+vá2c3h
+vá2cs1a2p
+vá2cse
+vá2cs1ék
+vá2csip
+vá2cs1is
+vá2cső
+vá2csú
vá2csü
-vá2dal
-vádi2
-vá2dir
-v1állap
-v1állás
-2vállo
-2vállv
-vá2ma
-vá2m1á
-vá2m1e
-vá2mi
-vá2m1u2
-vá2n1a2r
-vá2n1ár
-vá2ne
+vács3z
+vá2d1al
+vá2d1a2n
+váde2
+vá2des
+vádé2
+vá2dén
+vá2dik
+vá2d1ir
+vá2d1or
+vá2dö
+vá2dü
+2v1á2gaz
+2v1ágr
+vá2gú
+vá2gyal
+vá2gyan
+vá2gyö
+vá2győ
+vá2k1e
+vá2k1ü
+vá2laj
+vá2l1a2l
+vála2n
+vá2l1any
+vá2l1ap
+vá2lar
+vála2szin
+vá2l1á2r
+vá2l1át
+vá2l1e2
+vá2lél
+vá2lid
+vá2lin
+vá2lir
+vá2lism
+2v1állás
+vál2l1e2
+2v1állom
+2v1álló
+vál2l1ö2
+vá2lú
+vá2lü
+váma2
+vá2m1ad
+vá2m1aj
+vá2m1ak
+vá2m1al
+vá2m1as
+vá2mau
+vá2m1á2
+vám1b2
+vá2m1e2
+vá2m1ér.
+vá2m1érté
+vá2mil
+vá2m1in
+vá2m1ir
+vá2mis
+vá2mí
+vá2m1or
+vá2mö
+vá2mő
+vámu2
+vá2m1ut
+vá2mü
+vá2naj
+vána2n
+ván1any
+vá2n1e
vá2nis
-vá2nú
+váns3s
+vá2n1ú
+vá2nü
+ványa2d
+vá2nyaj
+vá2ny1a2l
+ványa2n
+vá2nyany
+vá2ny1ap
+vá2nyar
vá2ny1as
-vá2ny1e
-vány1ér
-vá2ral
-vá2re
-2várf
-vá2ris
+vá2nyau
+vá2nyaz
+vá2ny1e2
+vá2ny1ér.
+vá2nyérd
+vá2nyérr
+vá2nyérv
+vá2nyérz
+vá2ny1ing
+vá2nyis
+vány1í2r
+vá2ny1ó2
+vá2nyö
+vá2po
+vár1a2dato
+vá2radá
+vá2r1a2dó
+vá2r1a2du
+vára2l
+vá2r1ala
+vár1ale
+vá2raml
+vára2n
+vá2r1any
+vá2r1ar
+vá2r1assz
+vá2r1a2sz
+vá2rág
+vá2r1ál
+várd2
+vá2r1e2
+vár1isk
+vár1ism
+vár1ist
+vá2rí
+vár1old
vá2r1oml
+vá2r1ont
+váro2sz
+vár1oszt
+vá2r1ó2né
vá2rö
+vá2rő
várs2
vár1sp
+vár1sr
+vár2t1es
+vár2t1ér.
+2váru.
vá2ruh
-vá2rus
-vá2r1ú2
-vá2szi
-v1átm
-vá2t1ors
+vár1u2r
+vár1usz
+vár1ut
+várú2
+vá2rús
+vá2rü
+vá2s1a2d
+vá2sam
+vá2saz
+vásár1a2d
+vá2s1e
+vási2k
+vás1iko
+vá2sis
+vá2sír
+váskész1
+vásó2
+vást2
+vás1tr
+vá2s1ü
+vá2sű
+vá2szan
+vá2s3zav
+vá2sz1e
+vá2szin
+váta2
+vá2t1al
+2v1átd
+2v1á2t1e2r
+2v1átfe
+vá2t1ir
+2v1á2tí
+v1átlé
+2v1átm
+2v1á2t1ö
+2v1átp
2v1á2tü
-vá2zal
+2v1átv
+vá2z1alj
+vá2z1alt
+vá2z1a2tom
+vá2z1a2v
vá2z1e2
+vázi1s2
vá2ziz
+vá2zí
+vá2zos
+vá2zö
+vá2ző
+vá2z3sa
+vá2z3sá
+váz3se
+vá2z3sé
+váz3sö
+vá2z3su
váz3sz
-vd2
-v1dr
+vá2zü
+vb2lo
+vb2ra
+vcsőé2ne
+vd2rá
1ve
-ve2g1a2
-ve2g1á
-ve2g1ele
-veg1ért
-ve2g1i
+vea2g
+vea2l
+vea2n
+vea2r
+veá2l
+2vece
+ve2cet
+ve1cl
+ve2cseg
+2vedény
+ve2gab
+ve2gac
+ve2gar
+ve2g1as
+vega2z
+ve2g1á2
+ve2g1eg
+ve2g1e2kéh
+ve2g1ell
+vege2lőké
+ve2g1elr
+ve2g1e2r
+ve2g1esem
+ve2g1esz
+ve2g1e2tet
+ve2g1ék
+ve2g1él
+ve2g1ép
+veg1éré
+veg1érte
+veg1érv
+vegés3s
+vegé2sz
+vegg2
+veg1gr
+ve2gid
+ve2gik
+ve2gim
ve2gí
-ve2g1ö
-ve2gya
-ve2gy1e2lem
+ve2gol
+ve2gor
+ve2g1ó2
+ve2g1ö2
+ve2g1u
+ve2gú
+ve2gyelem
ve2gyemb
-ve2gyér
-ve2gyip
-ve2il
-2v1elég
-2v1elhá
+ve2gyez
+2v1egyl
+2vegyv
+ve2k1ak
+2v1e2ke.
+2v1e2kei
+2vekéb
+ve2kébő
+2v1e2kék
+2v1e2kés
+ve1klu
+2vela
+2v1e2lef
+2v1e2lemz
+vele2t1e2l
+2v1e2lég
+velés3s
+2v1elf
+v1elgy
+2v1elha
+2v1elhel
+ve2lis
+2v1e2l1í2
+v1eljá
2v1elm
-ve2l1o
+ve2los
+2v1e2lőirá
+2v1e2lőí
+2velőkés
+2v1előleg
+2v1elr
+2v1elsa
+2v1elszá
+2v1elszo
+2v1eltá
+2v1elter
+2v1eltér
+2v1elto
+2v1elv.
2v1elvá
+2v1elvek
+ve2lyö
+ve2lyu
+2v1elz
+2v1embó
2v1e2mel
2v1eml
-vene2g
-ve2n1egy
-ve2n1emb
+2v1e2mu
+ve2n1ad
+ve2nau
+ve2n1á
+ve2n1e2g
+ve2n1e2l
ve2n1esz
-ve2n1e2v
-ve2n1év
-ven3n
-ve2nó
+ve2n1é2vi
+ven1f2
+ven1g2
+ven3k2
+ve2n1o
+ve2n1ó2
ve2nö
-ve1p2
-vera2
-ve2r1á
+ventü2
+ven2t1ül
+ven1ülé
+ve2nyö
+2v1enz
+veó2r
+ve2ör
+ve2pe
+ve1p2r
+ve2rab
+ve2r1a2c
+ve2r1a2d
+ve2r1a2g
+ve2rajá
+vera2l
+vera2n
+ve2r1a2r
+ve2r1au
+ve2raz
+ve2r1ág
+ve2r1ál
+2verdő
+ver1egy
+ve2r1e2h
+ve2r1e2ke.
+ve2rekl
+ve2r1e2l
ve2r1eng
+ve2r1er
+ve2r1e2ső
ve2r1esz
-ve2r1ip
+ve2r1é2l
+ver1g2
+ve2r1iga
+ve2r1ill
+ve2rim
+ve2r1inc
+ve2rind
+ve2r1inf
+ve2r1ing
+ver1inte
+ver1ipa
+ve2ris
ve2r1ol
ve2ror
ve2ró
-2verősítő.
-2verősítőr
+ver1ó2r
+ve2rö
+ver1p2
+ver2s1al
+ver2sár
+versé2g
+ver2s1égé
+ver2s1égg
+ver2s1égn
+ver2s1égt
+ver2sir
+ver2s1í2
+ver2só
vers3s
-ver2s3ze
-ve2sa
-ve2ser
-ve2sú
-ve2süv
+ver2s1üt
+vers3zár
+vers3zen
+ver1tra
+ve2rur
+ve2r1ut
+ve2rút
+ve2r1ü2g
+ve2san
+ve2sas
+ve2s1ál
+ve2s1e2kétő
+veset2
+2v1e2sett
+ve2sip
+ve2sis
+ve2s1íz
+ve1ská
+2v1e2ső
+ve1s2pe
+ves3sza
+ves3szer
+vest2
+ve2s1u2
+2v1e2sze.
+2v1e2szekn
2v1eszm
-ve2s3zö
-ve2t1a2
-ve2tár
+2v1e2szű
+veta2l
+ve2tas
+ve2tál
+ve2t1á2r
+vet1egy
+ve2t1e2lől
+ve2tég
+ve2t1é2k
+ve2tid
+2v1e2tika
+v1e2tim
+ve2t1ing
+ve2t1ol
+ve2t1öl
+ve2töv
+vetőé2
+ve2tur
+ve2t1ut
+ve2t1ű2z
+ve2vet
+2v1e2vo
+vezőe2r
+vezőkész1
+vező2sorr
+vezős1s
+2v1ezr
1vé
-vé2der
-vé2do
+véá2g
+2v1ébr
+vé2dak
+véda2l
+vé2d1as
+vé2dá
+vé2d1emb
+vé2dos
+vé2dóv
+vé2dö
+vé2dú
vé2dz
-vé2ga
-vé2gá
+vé1f2r
+véga2
+vé2gab
+vé2gak
+vé2gal
+vé2g1á2
vé2g1eg
-vé2g1ele
+vé2g1e2le
+vé2g1elg
+vé2g1elh
+vé2g1eli
+vé2g1ell
+vé2g1els
+vé2g1elv
+vég2em
+vége2n
+vé2g1eny
+vé2g1ep
vé2g1er
+vé2g1esem
+vé2g1e2sete
vé2geté
-végig1
-vé2gin
-vé2g1í2
-vé2gó
-vé2la
-vé2l1á2
+vé2gető
+vé2g1ér.
+vé2g1é2ren
+vé2g1é2ré
+vé2g1érr
+vég1érv
+vég3g
+2véghü
+vé2g1id
+végigaz1
+vé2gim
+vé2giz
+vé2g1í
+végkötés1
+vé2gol
+vé2g1ó2
+vé2gö
+vé2gú
+2v1éh.
+2v1é2he.
+2v1é2hen
+2v1é2hes
+2v1éhs
+vé2kei
+vé2kít
+vé1k2l
+vé1k2ré
+vé1k2ri
+2v1éks
+vé2kük
+vé2l1a2
+vé2láb
+vé2lál
+vé2l1ár
+vé2leg
+vél1ell
+vél1els
+vél1elt
+vél1emb
+vé2l1eme
vé2l1e2r
-vé2l1o
-vé2lu
-vé2nas
-vé2ny1e2l
-vé1p2
-vé2pí
-vé2r1á2
-vé2rel
-vé2ron
-2vérté
-vé2rú
-vé2rül
-vé2sz1á2
+vé2les
+vél1ess
+vél1est
+vé2lev
+vé2lez
+vé2l1é2k
+vé2lin
+vé2lir
+vé2lí
+vé2los
+vé2lői
+vé2lős
+véltá2v
+vé2l1u
+vé2lú
+vé2lű
+véna1p
+2vénekl
+vé2n1emb
+vé2ny1eg
+vénye2l
+vény1ele
+vény1els
+vé2nyid
+vé2nyis
+vé2ny1í
+vé2nyú
+vényü2l
+vé2ny1ülé
+vé2ny1ült
+2v1é2pí
+vé1p2l
+vé1p2r
+2v1é2pü
+vé2ral
+vé2r1a2n
+vé2rap
+vé2rar
+vé2raz
+vé2r1ár
+vé2rát
+vér1d2
+vé2r1e2l
+vér1eml
+véres3s
+vér1eti
+vé2rés
+vér1ész
+vér1éte
+vér1ikr
+vé2rir
+vé2r1o2k
+vé2rot
+vé2róv
+vér1s
+vértes1s
+vér2t1ón.
+vér2töv
+véru2
+vé2rug
+vé2rut
+vé2r1ú
+vérü2kü
+2v1érzet.
+vé2sak
+vé2sal
+vé2seg
+vése2l
+vés1ele
+vés1elt
+vé2s1er
+vé2só
+vé1s2pe
+vés3szer
+vés2táb
+vé2s1ü2v
+vés3zav
+vész1á2r
vé2szeg
-vé2sz1o
-vé2tí
+vész1ell
+vé2sz1ékn
+vé2sz1ő2
+vész3s
+vé2szu
+vészú2
+vész1úr
+vészü2l
+vész1ülé
+vét1est
2v1év.
-v1f2
-vgé2
+vé3va
+2v1évb
+2vévei
+2v1é2vek
+2v1é2ven
+2v1é2véé
+2v1é2vér
+vé2vi.
+2v1évr
+2v1évt
+2v1é2vü
+vfe2l1em
+vf2ra
+vf2re
+vf2ri
+vf2ro
+vge2o
+vg2ra
+vg2rá
+vhang2a3
vhez1
1vi
-2vick
-vi2cs1a
-vi2csö
+vi2aa
+vi2ab
+vi2ac
+vi2aé
+vi2ag
+via2p
+via2szal
+via2sz1ál
+via2sz1árn
+via2sz1em
+viaszé2
+via2szél
+via2szö
+viára2
+viár1ad
+vic2c1a
+2vické
+vi2csag
+vi2csal
+vi2cs1an
+vi2cs1as
+vi2csál
+vi2cs1e2l
+vi2cs1ér.
+vi2csérté
+vicsi2
+vi2csim
+vi2csip
+vi2cs1ö2
+vi2csú
+vics3z
+vi2deg
+vi2d1esz
+2vidéz
2v1i2dő
vi2dz
-2v1inh
-vin2t1es
-vi2pa
+vi2ew
+2v1i2gaz
+2v1i2gén
+vika2
+vi2k1ag
+vi2k1el
+vi2kon
+vi2l1ék
+villa1s
+villasz2
+2villu
+vi2má
+2v1imm
+vina1t2
+2vind
+vi2n1emb
+vi2n1ó
+vin2tess
+vin2tesz
+2vinté
+vin2tos
+2v1i2on
+2vipa
+vi1p2s
2v1i2rat.
-2v1i2rata
-2v1i2ratá
-2v1i2rath
-2virati
-2v1iratk
-2v1i2ratok
2v1i2ratot
2viratoz.
-2viratozi
-2v1i2rats
-2v1i2ratv
-2v1ism
-vissz1e2
-2v1izg
+2v1i2rod
+visa2
+vi2sal
+vi2s1au
+vi2s1á2g
+vi2ser
+vi2s1ék
+vi2sim
+vi2s1is
+vi2siz
+vi2sö
+vi2szár
+vi2szok
+vit2a
+vi3tad
+vitakész1
+2vital
+vitelő2
+2vitn
+vi2t1ú
+vi2zeg
+vi2z1ell
+viz1é2l
+vi2zin
+vi2zok
+vi2zol
+vi2zom
+viz1os
+vi2zsá
+viz3sz
+vi2zud
+vi2zú
1ví
-2v1í2rás.
-2vírász.
-2vírászat.
-2v1írda
-2vírdáb
+vídi2
+ví2ge
+ví2ny
+vínyenc1
+2v1í2ra
+2v1í2rá
2v1í2ró
+2vítélet.
+v2í3téletb
+2vítélete
+2v1ívb
+vívókész1
ví2z1a2
ví2zá
-víze2
-ví2z1el
-ví2zer
-ví2z1es
+ví2zel
+víz1e2le
+víz1elf
+víz1elh
+víz1ell
+víz1eln
+víz1elő
+víz1elp
+víz1els
+víz1elt
+víz1elv
+víze2m
+víz1emb
+víz1eme
+víz1emé
+ví2zék
+ví2zés
+ví2z1ing
+vízi1sk
+ví2z1ist
+ví2z1isz
+ví2zí
ví2z1o
-ví2zó
-ví2zs
-2vízű
-v1k2
+ví2z1ó2
+ví2zö
+ví2z1ő2
+ví2z3s2
+ví2zú
+vízü2
+2v1í2zű
+víz3z
+vjára2t1út
+vje2gya
+vje2tel
+vje2tu
+vkia2l
+vkiá2
+vk2li
+vk2ló
+vk2lu
+vk2ri
+vk2rí
+vk2ró
+vla2te
+vleí2
+vleü2
+vme2g1
+vna2p1in
1vo
-vo2lál
-vo2l1e2
-vo2r1a
-vo2se
-vos3s
+vo2il
+vo2ji
+vo2kí
+2v1okm
+voks3s
+2v1okta
+vola1t
+2v1oldá
+2v1oldó.
+vol2t1a2d
+vome2
+vomec3
+vona2l1e2
+vona2t1e
+vonás1s
+voná2s3z
+vo2od
+vo2pe
+vo2r1a2
+vo2r1in
+2v1orm
+vo2s1as
+vo2s1av
+vo2s1e
+vos3s2
+vo2s1ú
+vo2sü
+vo2uc
+vo2vá
+vo2xi
1vó
-vóé2
-v1ó2rá
-vó1s2p
+vóa2k
+vóá2g
+vóá2r
+vócsa2p1á2
+vó1d2re
+vó1f2r
+vó1k2l
+2v1ónn
+vóó2r
+vó1p2l
+vó1p2r
+vó2ran
+vó2rák
+vó2rán
+vó2rát
+vó2s1akk
+vó2s1a2l
+vó2seg
+vó2s1iv
+vó2sol
+vó2s1orr
+vó2só
+vó2sö
+vó2ső
+vó1spi
+vós3s
+vós1tr
+vó1sz2
+vósza2k1
+vó2s3zár
vó2s3zen
-vóví2
+vóta1t2
+vó1t2r
+vóváros1u
1vö
-vöt2
+vö2bö
+vö2dém
+2v1ö2ko
+völ2gya
+2v1ö2rök
+2v1ötl
+vö2ve
+vö2vé
+2v1özön
+vözőe3
+vö2zs
1vő
-vőu2
-v1p2
-vso2rol
-vsza2ké
-v1t2
+vőa2n
+vőá2g
+vőe2l
+vőe2r
+vőé2j
+vőé2n
+vő1fl
+vő1f2r
+vői3dejű
+vő1kl
+vőo2l
+vő1pl
+vő1pr
+v1őrm
+v1ő2rü
+vő1s2p
+vő1sta
+vő1str
+vő1t2r
+vőü2l
+vő2zi
+vp2la
+vp2ra
+vp2re
+vp2ré
+vp2ri
+vp2ro
+vp2ró
+vp2sz
+vs2ká
+vs2ki
+vs2ko
+vs2lá
+vs2pe
+vs2ta
+vs2ti
+vs2tí
+vs2to
+vst2r
+vs2tú
+vsz2p
+v1sz2t
+vta2n1á2s
+vta2n1á2to
+vta2n1ó2
+vtá2raj
+vtá2r1ass
+vtá2ris
+vtáró2
+vtá2r1ór
+vtelés1s
+vt2ra
+vt2ré
+vt2ri
+vt2ro
1vu
-2v1u2t
+vu2bo
+vu2mal
+vu2man
+vu2m1e2
+vu2mis
+vu2mö
+2v1u2ni
+vu2ra
+vu2ru
+2v1u2tak
+2v1u2tas
+2v1u2tat
+vu2tá
+v1utc
+v1u2tó
1vú
-vú2sz
+vú1fr
+v1újd
+v1ú2jí
+v1újs
+vú2r1ad
+vú2re
+vúré2
+vú2rén
+vú2rö
+vú2szó
+v1útn
1vü
-2vüg
vü2gy
-vü2les
-v1ünn
-2v1ü2t
-2v1üz
+vü2kü
+vü2lá
+2v1üld
+2v1ünn
+vü1pr
+vü2rí
+vü1st
+vü1sz2
+vü2te
+vü2té
+vü2zé
1vű
-1vy
+2v1űrl
+vű2ző
+vvágy1ób
+vverés3s
+vzá2r1ó2ra
+2w.
1wa
-wa2e
-wa2i
+wa2ii
wa2le
-wa1sh
-wat2t1á2
+war2d1i
+wa2re
+wa1s2h
+wa1ye
+wa1yé
1wá
1we
+we2b1a2
+we2b1á2
+we2b1ele
+we2b1é
+we2bir
we2b1o
-we2i
-we2ö
-wesze1
+we2b1ú
+we2bü
+we2ed
+we2ek
+we2ig
+we2is
+we2le
+we2ör
1wé
-w2h
-whi2
+whi2t
1wi
-wi2c
-wi2e
-wi2r
+wi2ch
+wi2cz
1wí
-1wo2
+1wo
+wo2od
1wó
1wö
1wő
+wri2t
+wsto2
1wu
1wú
1wü
1wű
+wyo2m1
+2x.
1xa
-2x1a2l
-x1ar
+x1a2da
+xa2dá
+xaé2d
+xa1fl
+xa1k2l
+2x1akt
+2x1a2la
+2x1alg
+2x1alj
+2x1alk
+xa2na
+x1a2ny
+x1a2rá
+xa2ri
+xa2vi
1xá
-x1b2
+2x1ábr
+xá2gy
+2x1áll
+xá2rak
+2x1á2ram
+xá2ras
+2x1á2ro
+2x1árr
+2x1á2ru
+2x1átj
+2x1átr
+2x1átv
+xba2l1
+xb2la
+xb2lo
+xb2ra
+xd2ró
1xe
-2xe2g
+x1e2gy
+2x1e2ke.
+xe2l1a
+xe2l1á
+2x1e2lekt
+xe2lel
+xe2l1emb
+2x1e2lemr
+xe2l1esz
+xe2l1in
+xe2l1o
+2x1emel
+2x1eml
+2x1e2rő
+2x1e2sé
+2x1e2zü
1xé
+2x1éhs
+xé2pí
+2x1ér.
+2x1érte
+2x1érté
+2x1értő
+2x1érz
+2xévei
+xf2re
+xha2u
1xi
-2xidj
-2xido
-2xidt
-2xio
-xi2ol
+xia2n
+xi2av
+xi2d1a2l
+2xidá
+xi2dás
+2xi2de
+2xidé
+2xidgá
+xi2d1i2
+2xidjá
+2xidjé
+2xidl
+2xidm
+xi2dol
+xi2dö
+2xi2dő
+xid1őz
+xi1d2ro
+2xidró
+2xids
+2xidu
+2xidv
+2xi2dz
+xi2el
+2x1i2ga
+xigén1n
+2xilc
+2x1ill
+xina2
+xi2n1an
+2x1ind
+xine2
+xi2n1et
+xi2n1i2
+xi2nö
xi2on
+xi2óc
+xi2óe
+xi2óg
+xi2ómé
+xi2óo
+xi2óö
+xi2óp
+xió2rá
+2x1i2rá
+2x1i2ro
+xi2sad
+xi2sal
+xise2
+xi2s1el
+xi2s1es
+xi1s2ká
+xis1p
+xis3s
+xi2s1ü
+xi2t1e2g
+xi2t1e2r
+xi2t1é
+xi2t1i2
+xi2t1ü2
1xí
-x1ív
+xí2ja
+xí2já
+xí2jo
+xí2ju
+x1í2rá
+xí2ró
+2x1ívn
+2x1í2vü
+2x1ívv
1xo
-xo2d
-xo2g
+2x1old
+xo2n1ai
+xo2n1al
+xo2n1e
+xo2pe
+xo1p2l
+2x1osz
1xó
1xö
+xö2dé
+xö2rö
+xö2zö
1xő
+xő2sé
+xp2la
+xpor2t1a2
xpor2t1á2r
+xpor2t1e2
+xpor2t1érd
+xpor2t1ü2
+xp2ri
+x1p2ro
+x1p2ró
+xs2ká
+xs2pe
+xs2ta
+xst2r
+x2t1e2d
+xti2la
+xti2lá
+xti2leg
+xti2lin
+xti2lis
+xti2l1o
+xt1ört
1xu
-xusá2
-xu2s1é
+xu2sad
+xu2sal
+xu2s1a2n
+xu2s1e
+xu2s1érté
+xusi2
+xu2sil
+xu2sim
+xu2sin
+xu2sit
+xu2s1ol
+xu2s1ó2
+xu2s1ö2
xus3s
+xust2
+xus1tr
+xu2sus
+xusú2
+xu2s1út
+xu2sü
+xu2s1ű
+xu2s3z
+xu2ta
1xú
-2x1ü2
+1xü
+xü2lé
+xü2ve
+xü2ze
1xű
-x2x
-yaá2
-y1abl
-ya2cél
-y1a2dag
-y1a2dón
-yae2
-ya2gar
-ya2g1ál
-ya2gá2r
-yag1ár.
-ya2ged
+2y.
+yaa2d
+y1abla
+y1a2bon
+y1abra
+ya1bri
+y1abs
+ya2cél.
+ya2dako
+ya2dalé
+y1adap
+y1a2data
+y1a2datb
+ya2dati
+y1a2dato
+ya2datu
+yadé2ki
+ya2d1és
+ya2dév
+y1admi
+ya2dóan
+ya2dóbó
+ya2dóé
+y1a2dói
+y1a2dój
+ya2dóké
+ya2dókt
+y1a2dóm
+ya2dóná
+y1a2dór
+y1a2dós
+y1a2dóu
+yae2r
+ya2ero
+yae2t
+yaé2r
+y1aff
+ya1f2r
+ya2g1a2d
+ya2g1ag
+ya2g1am
+ya2gan
+y1aganc
+ya2g1a2s
+ya2g1atl
+ya2g1ato
+ya2gau
+yaga2z
+yag1azo
+ya2g1áll
+yag1árá
+yag1árb
+yag1á2ré
+yag1árh
+yag1ári
+yag1árj
+yag1árk
+yag1á2ro
+yag1árra.
+yag1árs
+yag1árt
+ya2gás
+yag1át1a2
+ya2g1átf
+ya2g1átl
+ya2g1átr
+yag1d2
+ya2gec
ya2g1el
-ya2g1en
-yag3g
-ya2gig
-ya2gor
-yag1osz
+ya2g1es
+ya2g1é2g
+ya2gék
+y1aggr
+yag3gyú
+ya2gid
+ya2gim
+ya2g1io
+yag1isz
+ya2giz
+ya2gí
+ya2g1osz
+ya2g1ó2r
+ya2gő
+yag1s
+ya2gur
+ya2g1ut
y1agy.
-ya2gyak
+y1a2gyat
+y1agyb
+y1agyf
y1agyk
-y1a2gyú
+y1a2gyon
+y1agyr
+y1a2jak
+y1a2ján
+y1ajk
y1ajt
-ya2kala
-yaké2r
-yak1ére
-ya2kiz
-y1a2lak.
-ya2l1ék.
-y1alm
-ya2m1al
-ya2m1ár.
+y1akadá
+ya2k1áll
+ya2k1átk
+ya2k1átm
+yak1elm
+yak1elt
+yak1ékn
+ya2k1ér.
+ya2k1éri
+yak1i2zo
+ya1klu
+y1akna.
+y1aknák
+ya1kné
+y1a2kol.
+ya2k1ola
+ya2k1old
+ya2k1ón
+y1a2kós
+ya2k1örv
+ya1k2rém
+ya1kri
+ya1krí
+y1akt.
+y1akták
+y1aktb
+y1aktiv
+y1aktj
+y1aktot
+y1aktu
+yala2g1ú
+ya2l1agy
+yal1ajk
+ya2lakb
+y1a2lakj
+y1a2lakk
+y1a2lakok
+y1a2lakom
+y1a2lakot
+ya2lakt
+ya2laku
+y1alakz
+ya2l1a2l
+y1alany
+ya2lapa
+y1a2lapí
+ya2lapjá
+y1a2lapú
+yala2te
+yal1ága
+ya2l1ál
+yalás1s
+y1aláté
+ya2l1é2ne
+ya2lif
+yal1i2ko
+ya2l1inv
+y1aljai
+y1alji
+ya2lor
+yalókész1
+ya2l1órá
+ya2l1ő2
+y2alta
+yal1t2r
+y1altú
+ya2lü
+ya2lű
+y1amalg
+ya2m1any
+yam1a2rár
+yama2tal
ya2m1árb
-ya2m1árh
ya2m1árn
-ya2mel
+yamászás1
+ya2m1á2to
+yam1b2
+yam1emb
+yam1esés
+yami2k
+ya2m1iko
+ya2mind
+ya2m1i2o
ya2m1is
-yan1ar
-yan1at
-ya2n1e
-ya2n1i
-yan1o2d
-ya2nő
-yan1ők
-yan1őt
-ya2nyáé
-ya2nyái
-ya2nyák
-ya2nyám
-ya2nyán
-ya2nyát
+ya2m1osz
+ya2m1ó2r
+ya2mö
+ya2mő
+ya2mü
+y1a2nal
+ya2nan
+ya2nar
+yan1arr
+ya2nat
+yan1att
+ya2n3e.
+ya2n1e2g
+ya2nek
+ya2ner
+ya2n1et
+ya2nez
+y1a2ném
+y1ang
+ya2nid
+ya2n1in
+ya2n1is
+ya2nit
+y1a2niz
+y1anny
+yano2d
+yan1oda
+yan1onn
+ya2nő.
+ya2nyas
y1anyj
y1a2nyó
-ya2pa.
-ya2pas
+y1a2nyuk
+yaó2r
+y1a2pa.
+y1a2pai
+y1a2pas
y1a2páb
+y1a2pád
+y1a2páé
+y1a2pái
y1a2pák
y1a2pám
-y1a2pán
-y1a2pár
-y1a2pás
-y1a2pát
+y1a2pára
+y1a2páró
+y1a2pát.
+y1a2páto
+y1a2pátó
y1a2páv
-y1a2pi
+y1a2pi.
+y1apjáh
+y1apjái
+y1apju
+ya1p2l
+ya2post
yapo2tá
-y1a2pó
+y1a2pó.
+y1a2póé
+y1a2póh
+y1a2pói
+y1a2pój
+ya2póké
+ya2póna
+y1a2pós
+ya2pót.
+ya2pótó
+y1a2póv
y1app
-ya1p2r
-y1a2pu
+ya1pre
+ya1p2ri
+y1aprí
+ya1pro
+ya2r1a2dá
+ya2r1a2dó
+ya2r1a2du
+ya2rasz
+ya2ránn
y1a2rány
+ya2r1átv
+y1arc.
+y1arca
+y1arcá
+y1arcb
+y1arcc
+y1arch
+y1arck
y1arcn
y1arco
y1arcr
+y1arcu
+y1arcú
1yard.
1yardn
-ya2r1el
-y1argu
-ya2s1ol
-y1atád
-yat2te
+3yardom
+1yardos
+yar1drá
+yar1ell
+ya2roma
+ya2ror
+yar1ó2rá
+yar1óvá
+ya2róz
+yar1s2
+yas1alj
+ya2sap
+ya2s1as
+yaság1g
+ya1sl
+ya1sne
+ya1s2pi
+ya1s2po
+ya1s2rá
+yast2
+ya1s2ta
+ya1sto
+ya1str
+ya1svi
+yasz2tár
+y1a2tád
+yatékát1a2
+y1atka.
+y1atká
+ya2tomh
+y1a2tomm
+y1a2tomo
+yat2rág
+ya1tré
+ya1tróf
+y1attr
y1a2ty
-ya2utó
+y1a2uk
+y1a2ulá
+yau2tá
+y1a2uto
+y1autó
+yautói2ko
+yaü2t
+yaü2z
+y1a2vat
y1a2zon
+y1a2zúr
+y1á2bé
y1ábr
-yá2du
-y1á2g
-y1álar
-yálas3
-y1áld
+yá2ga
+yá2gá
+yá2gé
+yá2gi
+yá2go
+yá2gu
+yá2gú
+yá2gy
+yá2jal
+yá2j1e
+yá2j1ö
+yá2jő
+yáka2
+yá2k1an
+yá2k1á
+yá2k1e
+yá2kü
+yálas3s
+yá2lál
+y1áldo
+yá2l1e
+y1állam
+y1állat
+y1állás
+y1állí
+y1állo
+y1álló
+y1állv
+yá2lü
yáma2
-yá2man
-yá2map
+yá2m1al
+yá2m1an
+yá2m1ap
yá2m1as
-yá2mí
-yá2m1os
-yá2mu
+yámi2
+yá2m1in
+yá2mü
+yá2n1e
+yá2nék
+yán3n
+yá2nö
+yánt2
+yán1tr
+yá2nü
+yá1ny2
y1á2po
-yá2rad
-y1á2ram
-y1árbo
-yá2r1e
-yá2r1i2p
+yá2r1a2l
+y1á2raml
+y1á2ramo
+yára2n
+yár1any
+yá2rap
+yá2rar
+yá2r1ass
+yá2r1av
+yá2raz
+y1árazá
+yár1azo
+yá2r1ál
+y1árbev
+yár1d2
+yá2r1e2
+y1árem
+yá2réj
+y1á2riá
+yá2rim
+yá2r1is
+y1árnya
+yáró2
+yá2rór
yá2rö
-y1árp
-y1árud
+yá2rő
+y1árpá
+yár2sé
+y2árt.
+y1ártám
+yár1tr
y1á2ruh
-yá2rul
-y1á2rus
-yár1ut
-yá2sar
-yási2
-yá2sir
+y1árur
+yá2rú2
+y1árú.
+yá2rü
+y1árva
+y1árver
+yá2sal
+yá2sas
+yá2s1á2g
+yá2s1á2rá
+yá2s1árt
+y1á2sás
+yá2se
+yáská2
y1á2só
+yá2sö
+yá2szab
+yá2szag
+yá2szal
+yá2szas
+yá2sz1ál
yá2sze
+yász1el
+yász1em
yás3zen
-yá2szé
-yá2szor
-yá2szü
-y1á2t1a
+yá2szét
+yá2szév
+yá2szim
+yá2szin
+yá2szis
+yá2szit
+yász1ó2d
+yász1ó2r
+yá2sz1ö2
+yá2sző
+yá2sz1ü2
+y1á2ta
+yát1a2l
+y1á2tá
+y1átb
y1á2t1e2
+y1á2té
+y1átf
y1áth
+y1á2t1i2
y1átk
+y1átlag
+y1átlá
+y1átlé
+y1átm
y1átn
-yátne2
+y1á2t1ö
+y1átp
+y1átr
y1áts
+y1átt
y1á2tü
-y1b2
-ybee2
-ybor2d
-y1d2r
-ye2d1a
-ye2dá
+y1átv
+ybeá2
+yb2la
+yb2le
+yb2lé
+yb2li
+yb2lo
+yb2lú
+yb2ra
+yb2ri
+yb2ro
+yb2ró
+ycsa2p1á2g
+ycsőé2
+yc2vi
+yd2be
+y2desd
+yd2ni
+y1d2ra
+y1d2rá
+yd2ro
+yd2ró
+y1d2ru
+yea2v
+yeá2r
+ye1bl
+y1ecset
+ye2d1á
+ye2deg
+ye2d1esz
+ye2dol
ye2d1ó2
-ye2d1u
-ye2g1a2
-ye2gá
+ye2d1u2
+ye2d1ú
+ye2d1ü2lő
+yed2vér
+yee2s
+y1eff
+yega2
+ye2g1ala
+ye2gan
+ye2g1az
+ye2g1á2
ye2g1el
+yeg1e2red
+ye2g1él
+yeg1érbe
+y1egérr
yegész1
-yeg1g
-y1egy.
-ye2gyen
-ye2gyes
+yeg1észn
+yeg3g2
+ye2gid
+ye2gí
+ye2gú
+ye2g1üg
+ye2gyed
+y1e2gyen
+y1e2gyes
+ye2gyet
+ye2gyez
+y1e2gyé
+y1egyh
y1egyl
-y1e2l1a2
+y1egys
+y1együ
+y1egyv
+yei2g
+y1ejt
+y1e2ke.
+y1e2kei
+y1e2kek
+y1e2kéé
+ye2kéj
+y1e2kés.
+y1e2kése
+ye1k2ré
+y1elad
+y1e2lág
+ye2lál
y1elc
-y1e2lemz
-yeletes1
-y1elha
-ye2l1o
-y1e2lőg
-y1elr
-y1eltá
-ye2man
-ye2mas
-ye2mat
+y1e2lef
+ye2lege
+ye2l1e2h
+ye2lemek
+y1e2lemez
+y1e2lemű
+y1e2l1e2re
+ye2légt
+ye2l1é2ké
+ye2l1ér.
+yelés3s
+yelé2s3z
+y1elhal
+y1elhel
+y1elhú
+y1e2l1in
+ye2liv
+y1e2l1í2
+y1eljá
+y1elka
+y1elnev
+y1elnö
+y1elny
+ye2los
+y1e2lö
+y1e2lőad
+y1e2lőí
+ye2lőtt
+y1e2lőz
+y1elsa
+y1első
+y1eltér
+y1elto
+y1eltö
+yel2vad
+yel2v1áll
+yel2vás
+yel2v1eg
+yel2v1e2r
+yel2vessz
+yelve2sz
+yelv1esze
+y1elvevé
+yel2véd
+yel2v1ég
+yel2vél
+yel2v1érz
+yel2v1í
+yel2vol
+ye2mak
+ye2m1a2l
+ye2map
+yema2r
+ye2m1at
+ye2mál
y1ember
-ye2mel
+y1e2melé
+y1emelk
ye2m1er
-ye2m1es
-ye2na
+y1e2més
+yemi2
+yem1ing
+ye2m1is
+ye2mit
+yem1ita
+ye2miz
+y1emlék
+y1emlí
+y1emlő
+yem1ost
+ye2m1ö
+yem1p2
+yemu2s
+yem1usz
ye2n1á2
-ye2ner
-yenes1s
+yen2csa
+yen2c3ser
+ye2n1elj
+ye2n1eln
+ye2n1elv
+y1e2ner
+yenes3s
ye2n1é2l
-ye2ni
+yenfé2l1é2v
+ye2nid
+ye2n1i2p
+yen1k2
ye2n1o
-y1e2po
+ye2n1üg
+yenyá2
+y1enz
+ye2pag
+yep1alo
+ye2p1ará
+ye2p1áll
+ye2pát
+ye2p1e2l
+ye2p1é2k
+y1e2pik
+y1epiz
+ye2pos
+yep2p1e2r
+ye1pro
+yep1t2
+y1erde
+yere2ga
+yere2gete
yereg1g
y1e2rej
-y1e2rőr
-ye2rőv
-yers1s
-yesa2
-ye2s1al
-ye2s1á
+yere2k1a
+yere2ká
+yere2k1e2sz
+yere2ko
+yere2k1ö2
+y1e2rény
+y1erké
+y1erkö
+y1erny
+y1e2ro
+ye2rőér
+ye2rőig
+ye2rőné
+ye2rőrő
+ye2rősí
+ye2rőss
+ye2rővá
+yer2s1a
+y1erszé
+ye2sá
+yes1egé
yes1egy
-yesi2
+ye2s1ej
+yes1e2kétő
+y1esemén
+ye2s1er
+y1e2setb
+y1e2seté
+y1e2seti
+y1e2setk
+y1e2setr
+y1e2setű
+y1esél
+ye2sip
ye2s1í2r
-ye2sú
+y1esőá
+ye2sőbe
+y1e2sőh
+ye2sője
+ye2sők.
+ye2sőkh
+ye2sőkr
+y1e2sőn
+y1e2sőr
+y1e2sős
+ye2sővé
+ye1s2pe
+yes2t1a2
+y1estés
+y1estév
+y1estjü
+yes2tőr
+y1estű
+y1eszk
y1eszm
-ye2s3zö
-yes3zs
-yesz2t1ék
-ye2szű
-ye2t1ér
-y1e2ve
+y1esztét
+y1e2szű
+y1e2tal
+yeteg1ér.
+y1e2tet
+ye2t1ért
+y1e2tik
+y1etn
+y1e2tűd
+ye2vet
+ye2vező
y1e2vé
+y1e2vol
y1e2vő
y1e2zer
-yezernyolc1
-y1é2ber
-yé2g
+yeze2t1ék
+yezőa2
+yé2b1á
+yé2b1ér.
+yé2b1i2
+yé2bü
+yé2des
y1égb
-y1ége
-y1éhes
-yé2let
-y1élm
+y1é2ge
+y1é2gé
+y1é2gi
+y1é2gő
+y1égt
+y1é2he.
+y1é2hen
+y1é2hes
+y1é2het
+y1éhs
+y1éj.
+y1éjb
+yé2jei
+yé2jen
+yé2jért
+y1é2ji
+y1éjj
+y1éjs
+y1éjt
+yé2kab
+yé2kad
+yé2k1aka
+yé2k1a2l
+y1é2kat
+yé2k1el
+yé2ker
+yé2k1é2k
+yé2k1é2l
+yé2k1ér.
+yé2kik
+yé2k1ó2
+yé2k1ö
+yé2kő
+yé2kúr
+yé2l1á
+yé2le.
+yé2les
+y1é2let
+y1é2lén
+yé2lét
+yé2lim
+yél3l
+yé2lős
+y1élsp
+y1é2lű
+yéná2
+yé2n1ár
+yén1e2ke.
+yé2nel
+yé2n1ikr
+yé2no
yé2pí
-y1é2pü
-yé2rak
-yér1ára
-y1érde
-yé2r1el
-yé2ri
-yé2rol
+yé2pü
+yéra2
+yé2r1aj
+yé2r1ak
+yé2ral
+yé2r1an
+yé2rar
+yé2r1á2
+y1érch
+yér1d2
+y1érdek
+yé2reg
+yé2r1e2l
+yé2rem
+y1érem.
+yér1eme
+yé2r1enc
+yér1eső
+y1é2ret
+yé2rev
+y1é2rez
+y1é2rés
+yé2ril
+y1é2rin
+y1érmü
+yé2r1osz
+yéró2
+yé2r1ór
+y1é2rő.
+y1é2rői
+y1é2rők
+y1é2rőt
+y1érpa
y1érték
-y1érze
+yéru2
+yé2rut
+y1érv.
+y1érvén
+y1érvv
+y1érzet
y1érzé
-yé2sza
-yé2szá
-y1étk
-y1é2tű
+y1érző
+yé2sz1á
+yé2sz1emb
+yé2sz1o
+yé2sz1ú
+yé2t1a
+y1é2tel
+y1é2ter
+yé2tén
+y1étke
+y1étl
y1év.
+y1évad
y1évb
+y1é2ve.
y1é2vek
-yé2ven
+y1é2vem
+y1é2ven
y1é2ves
y1é2vet
+y1évez
+y1é2véb
+y1é2vén
+y1é2vér
+y1é2vét
+y1é2vév
+y1évf
+y1évh
y1é2vi
+y1évk
+y1évm
y1évn
y1évr
+y1évs
+y1évt
+y1é2vü
+y1é2vű
y1évv
-y1f2l
-y1f2r
-yha2d
-y2h1adó
-y1icc
-y1i2de
-y1i2do
+yfas2
+yfé2lá
+yf1gl
+yf2la
+yf2le
+yf2li
+yf2lo
+yf2ló
+y2föl.
+yf1ő2sö
+y1f2ra
+yf2ri
+yf2rí
+y1f2ro
+yf2rö
+yg2le
+yg2ló
+ygó1g2
+ygót2
+yg2ra
+yg2rá
+yg2ri
+yg2ró
+yg2ru
+yg2rü
+y2h1a2dó
+yha1p2
+yha1t2r
+yhá2zal
+y2h1elv
+y1i2bo
+y1i2deá
+y1i2deg
+y1i2den
+y1i2deo
+y1i2dé
+y1i2dom
y1i2dő
-y1ifj
-y1i2gaz
+y1i2ga
+y1i2gá
+y1i2géz
+y1igm
+y1i2har
+yi2hat
+y1ihl
+y1i2ker
+yi2k1érn
+yi2kont
yi1k2ri
+y1i2ma.
y1i2má
+y1i2mit
y1imp
-yi2nas
+y1i2nas
+y1inc
y1ind
y1inf
-y1inge
-y1i2par
-yi2ram
+y1inga
+yi2nic
+y1inj
+y1ins
+y1inv
+yi2ono
+yi2par
+y1i2ram
y1i2rat.
-y1i2rán
-y1i2rás
+y1i2rata
+yira2t1é
+y1i2ratn
+y1i2rato
+yi2ratt
+y1i2rá
+y1i2ri
y1i2rod
+y1irr
y1irt
y1ish
-y1isk
+y1isko
y1ism
-y1isn
-yi2tal
+y1isp
+y1ist
+y1i2sza
+yi2szel
+yi2szon
+y1i2tal
+y1i2tat
+y1i2var
+y1i2vás
y1i2vó
-yí2le
-yí2róé
-yí2rói
-yí2rón
-yí2rór
-yí2rót
-y1í2v
-yki2s1a
-y1k2l
-yközé2
-ykö2z1él
-yk1uj
-yme2g
-ymeg1á
-yo2gi
-yoki2
+y1i2zé
+y1izg
+y1izm
+yi2zom
+yí2gé
+yí2ja
+yí2já
+yí2ju
+yí2ka
+yí2ká
+yí2ke
+yí2kí
+yí2kol
+yí2k1ö
+yí2la
+yí2l1e2
+yí2lí
+yí2lö
+yí2ral
+yí2ráb
+yír1á2sz
+yí2rog
+yí2rő
+yítőa2
+yí2vá
+yí2ve
+yí2vé
+yí2vó
+yí2vü
+yí2vű
+yí2zü
+yí2zű
+yje2gy1á2
+y2jév
+yjob2b1o
+ykai2
+yka1k2
+yka2ró2ra
+yk2bó
+y2k1e2lem
+yk1é2jév
+yké2p1el
+yk2ho
+ykiá2
+ykie2
+yk1izm
+yk2ka
+yk2la
+yk2le
+yk2li
+yk2lí
+yk2ló
+yk2lu
+yk2ná
+ykóro2
+yk2ra
+y1k2rá
+y1k2ri
+yk2rí
+yk2ro
+yk2ró
+yk2vó
+ylal2ta
+yla2t1a2n
+yla2t1é2t
+ylei2
+yleí2
+yle2tal
+yle2tá
+ylóá2
+ylót2
+yma1d2
+y2mat.
+ymá2s1ik
+yme2g1é
+ym2ma
+yné2vér
+yn2ka
+ynk2r
+ynőé2n
+ynő2ié
+yo2be
+y1obj
+y1o2dú
+yo2gal
+yo2gál
+yo2g1ár
+yo2ge
+yog3g
+yogi2
+yo2git
+yo2g1iv
+yo2gí
+yo2g1osz
+yo2gö
+yo2gü
+yo2gű
+yoka2
+y1o2k1al
+y1o2ká
y1o2k1ir
+y1okm
+y1o2kol
y1o2kos
y1o2koz
-y1oktá
-yo2laj
+y1okta
+yo2l1a2l
+yola2n
+yol1any
+yo2l1ári
+yol2cem
+yolci2
+yol2cik
y1oldá
+y1oldó
+y1o2lim
+y1oltás
+yol2ter
+yo2lú
+yo2lü
+yolví2
+yo2m1a2l
+yoma2n
+yo2m1any
+yoma2s
+yo2m1aszó
+yo2maz
+yo2m1ál
+yo2m1árk
+yo2m1á2to
+yo2m1á2z
yo2m1e
+yo2m1ik
+yo2mil
+yo2m1is
+yo2mí
yo2m1ol
-yo2n1e
-yoné2
+yo2mö
+yo2mő
+yom1p2
+yo2n1a2d
+yo2nag
+yo2naj
+yon1a2ka
+yo2n1a2l
+yo2n1am
+yo2n1a2n
+yo2nap
+yo2n1a2r
+yo2n1a2s
+yo2n1a2t
+yo2n1au
+yo2n1ál
+yo2n1át1a2
+yo2n1áté
+yo2n1átj
+yon1átk
+yo2n1átr
+yo2n1áts
+yo2n1átv
+yo2n1á2z
+yon1d2
+yo2n1e2
+yo2néd
yo2néh
-yo2nis
+yo2nék
+yo2nén
+yon1f2
+yo2nim
+yo2n1is
+yon1itt
yo2niz
-yo2n1í
+yo2ní
+yon1k2
yon3n
-yon1s
-yo2nü
+yo2n1ol
+yo2nop
+yo2n1osz
+yo2nö
+yo2n1ő2
+yon1s2
+yont2
+yon1tr
+yo2n1ü
y1o2pe
-y1orm
-y1orom
+y1opt
+yo2rad
+yo2r1a2k
+yo2r1a2p
+y1ord
+y1orgi
y1orrú
+yor2sol
+y1orsó
+yors3s
yo2se
yos3s
-yo2sú
+y1osto
+y1oszl
+yos3zs
y1oszt
-yó2gya
-yó2gy1e2
-yó2gyé
+yo2ut
+yo2ve
+yo2xi
+yóá2g
+yóá2r
+yócsa2p1á2
+yó2dák
+y1ó2dár
+y1ó2dásak
+yó1f2l
+yó1g2r
+yó2gyár
yó2gyi
-y1ó2lo
+yó2gyú
+yóí2v
+yóo2k
+yóó2r
+yó1p2r
+y1ó2rac
+y1ó2rad
+yó2rag
yó2rai
-yó2ráj
-yó2rák
-yó2rán
-yó2rás
-yó2rát
-yó2riá
+y1ó2ras
+y1ó2ráb
+y1ó2rád
+y1ó2ráé
+y1ó2ráh
+y1ó2rái
+y1ó2ráj
+y1ó2rák
+y1ó2rám
+y1ó2rár
+y1ó2rás
+y1ó2rát
+y1ó2ráv
+y1ó2ri
+yó2s1aj
+yóscsa2
+yó2sír
+yó2s1ol
+yó2s1orr
+yós1ors
yós3s
-yó2s1ü
-y1öb
-yö2kés
-y1önt
-yö2r1i
-y1ö2töd
+yósü2l
+yó2s1ű2
+yö2bö
+yö2bű
+yö2cs
+yö2dém
+yö2ka
+yö2ká
+yö2kel
+yö2k1ék
+yö2kid
+yö2kí
+yö2ko
+yök1os
+yö2kó
+yö2kör
+yö2k1öss
+yö2ku
+yö2lők
+y1öltés
+y1öml
+y1ö2ná
+yön2gya
+yön2gyá
+yön2gyó
+yön2gy1öl
+y1önk
+y1önté
+y1önz
+yö2ra
+y1örd
+yö2rit
+yö2ro
+yö2ru
+yö2so
+y1össz
+y1ösv
+y1öszt
+y1ötl
+y1ö2töd.
+y1ö2töde
+y1ö2tödé
+y1ötp
+y1ött
y1ötv
-yö2zön
-yőe2
+yö2ve
+yö2vé
+yö2vi
+y1ö2vö
+y1ö2zön
+yőa2n
+yő1bl
+yőe2l
+yőe2r
+yő1fr
+yő1pr
+yő2ra
+y1ő2rei
+y1őrg
y1őrl
-y1őrr
-y1őrs
+y1őrp
+y1őrszi
+y1ő2rül
y1őrz
-ypen3
+yő2seg
+yő1str
+yősz2
+yő2s3zár.
+yős3zs
+yő1szt
+yőzőkész1
+ypen1n
+ype2te
+yp2la
+yp2le
+yp2lé
+yp2lu
+yponté2
+yp2ra
yp2re
yp2ré
+yp2ri
+yp2rí
yp2ro
yp2ró
-y1p2s
-yren2d1ő
-ysé2gel
-y1s2k
-y1s2p
-yst2
-y1stí
-y1str
+y2prő
+yp2ru
+yp2sz
+yrádi2ón
+yrágás1
+yrea2
+yren2d1ő2
+yreu2
+ysa2van
+yság1g
+ys2ch
+ysé2g1e2l
+ysé2gés
+ys2ho
+ys2ka
+ys2ká
+ys2ki
+ys2la
+ys2lá
+ys2le
+ys2lu
+ys2mi
+ys2na
+ys2ni
+ys2pe
+ys2pi
+ys2po
+ys2pó
+ysp2r
+ys2ra
+ys2rá
+ys2rő
+ys2sa
+ys2sá
+ys2se
+y1s2tí
+y1s2to
+y1s2tó
+y1st2r
+y1s2tu
+y1s2tú
+ys2tü
+ysza2k1ü
+y2szaló
+y2száld
+yszáraz1
+ysze2ra
+yszer2v1ó2
+y1sz2f
+y1sz2k
y1sz2l
-y1sz2r
+y1sz2m
+yszö2g1el
+y1sz2p
y1sz2t
-y2t1ac
-y1t2h
-y1t2r
+y1sz2v
+yta2c
+yt1acé
+yta2n1é
+yta2n1ó2
+ytá2l1é2
+y2t1állá
+y2t1álló
+yt2raf
+yt2ran
+yt2rap
+y1t2rá
+y1t2re
+y1t2ré
+y1t2ri
+y1t2ro
+yt2rón
+yt2rö
+y1udv
yu2g1á
yu2ge
y1ugr
yu2gy
+yu2hu
y1ujj
-yu2l1e
-yu2n
-y1uno
-y1u2ra
-y1u2rá
-yu2sé
+yuj2j1a2da
+yu2kab
+yu2kar
+yu2k1aszá
+yu2k1ác
+yu2kál
+yuká2s
+yuk1ásá
+yu2k1e
+yu2k1ö
+yu2kő
+yuk1t2
+yu2kű
+y1und
+y1u2ni
+y1u2no
+yu2rad
+yu2rai
+yu2rak
+yu2ral
+yu2ram
+yu2ras
+yu2rat
+y1u2rán
+y1u2ráv
+y1urn
+y1u2ru
+yu2sál
+yus3s
+yu2szá
y1u2szo
+yu2tak
+yu2tal
+yu2tam
+yu2tat
+yu2taz
+yu2tál
y1utc
+yu2tód
+y1u2tu
+y1u2tú
+yú1bl
+yú1br
+yú1gr
+y1újd
+y1ú2jé
+y1ú2jí
+y1újr
y1újs
+yú2kel
+yú2k1es
+yú2ket
+yú2kev
yú2kó
-yúl1l
-yú1p2
+yú2köl
+yú2l1ag
+yú2laj
+yú2lar
+yú2l1á2r
+yú2lát
+yú2l1eg
+yú2l1el
+yú2l1e2t
+yú2lin
+yú2l1is
+yúl2tag
+yú2lü
+yú2lű
+yú1pl
+yú1p2r
+y1úrb
+y1ú2ré.
+y1úrél
+y1ú2rév
+y1úrho
y1ú2ri
-yú2szá
+y1úrk
+y1úrnő
+y1úrr
+y1úrtó
+yú1sta
+yú2sü
+y1úszt
+y1útb
+yú2té.
+y1úth
+yúti2
+yú2ti.
+yú2tig
y1útj
-yú2ton
-y1útró
+y1útk
+y1útm
+y1útn
+y1ú2ton
+y1útp
+y1útr
+y1úts
y1útt
-y1üd
+y1útv
+yü2dü
y1ü2gy
-y1üld
-yü2t
-y1üte
-y1üté
-yü2ze
-yü2zé
+yü2két
+yü2lá
+yü2led
+y1ülteté
+y1ünn
+yü2rí
+y1ü2rü
+y1ü2te
+y1ü2té
+y1ütk
+y1ü2tő
+y1ü2veg
+yü2völ
+y1ü2ze
+y1ü2zé
y1üzl
-y1ű2ző
+yű1bl
+yűé2n
+yű2g1ő
+yű1kl
+yű1pl
+y1űrb
+y1ű2ré.
+yű2réb
+yű2rén
+yű2rön
+y1űrr
+yű2sá
+yű2s1orra.
+yűs1s
+y1ű2zőb
+y1ű2zően
+y1ű2zőé
+y1ű2zőh
+y1ű2zők
+y1ű2zőn
+y1ű2zőr
+y1ű2zőt
+y1ű2zőv
+y2v1abr
+y2v1a2dó
+yva2d3z
yvai2
-yva2j
-yv1ajá
-yv1ank
-yv1a2ra
+y2v1akc
+y2v1alb
+y2v1alk
+y2v1ank
+y2v1ant
+yv1a2nya
+y2v1apo
+y2v1arz
+yva2s1u2
+y2v1atk
+y2v1au
+y2v1azo
+yv1ábr
yv1állo
yv1állv
-yv1á2rak
-y2v1áru
-yve2g
-yvegy1
-yv1érté
-y2v1in
-y2v1í2r
-y2vu
-y2v1ú
-yv1üg
+yv1á2rai
+yv1á2rán
+y2v1áre
+y2v1árj
+y2v1árl
+yvárosi2b
+yv1árre
+y2v1á2ru
+y2v1árv
+y2v1áta
+y2v1áti
+y2v1átt
+yv1br
+yv1dr
+yv1e2gye
+yv1egys
+yv1e2kéb
+yv1ela
+y2v1e2lá
+y2v1ell
+y2v1elo
+y2v1elti
+y2v1ember
+yven3n
+y2v1e2p
+yve2r1a
+yve2r1á2
+yve2reg
+yve2r1ész
+yve2rip
+yve2r1o
+yvert2
+y2v1esszé
+y2v1eva
+y2v1e2vé
+yv1e2vő.
+y2v1ex
+yvezé2rel
+yvé2du
+yv1ékí
+yv1é2let
+y2v1élm
+y2v1élt
+y2v1ép
+y2v1érd
+y2v1é2ri
+y2v1érrő
+y2v1érté
+y2v1é2rü
+y2v1érze
+y2v1é2ve.
+yv1fr
+yv1gr
+yvigaz1
+y2v1igé
+y2v1i2k
+y2v1ille
+y2v1im
+yv1ind
+y2vint
+y2v1i2p
+y2v1ism
+y2v1ist
+y2v1íg
+y2v1ín
+yví2zis
+yví2zü
+yv1kl
+yv1kr
+y2v1old
+y2v1olv
+y2v1or
+y2v1os
+yv1ó2r
+yv1öss
+y2v1ö2z
+yv1őr
+yv1pr
+yv1sk
+yv1sl
+yv1st
+yv1sz2
+yv1tr
+y2v1ub
+y2v1ud
+y2v1ur
+y2v1u2t
+yv1új
+yv1út
+y2v1üg
+y2v1ü2z
+yza2t1a2l
+yza2t1e
+yza2t1érd
+yzá2r1ó2ra
+yzás3s
yze2t1a2
-yze2tele
+yze2t1á
+yze2t1ér.
+yze2t1é2rő.
+yze2tés
+yze2téte
yze2t1o
+yze2t1öl
+yzé2k1e2l
+yzőa2
+yz2rí
+2z.
1za
-2z1a2cé
-z1a2dag
-za2d1ár
-zade2
-za2del
-za2dí
-z1a2dog
-za2dóh
-za2dói
-za2dót
-zae2
-za2g1e
-zai2g
+3zaba.
+zab2b1i2ko
+za2b1i2ga
+za1bre
+za1bri
+z1abro
+2zabs
+za2ce
+za2c1ég
+za2cho
+zac1ikr
+za2c1im
+za2cipa
+za2c1iv
+za2cí
+zac1k2
+zac3st
+za2dad
+2zadag
+zad1alj
+za2dan
+za2data
+2z1a2dato
+z1a2datr
+zadás1s
+zadi2a
+za2d1ír
+za2dóme
+za2dóz
+za1d2rá
+za2d1ut
+za2dzá
+za1fl
+za1f2r
+za2g1a2d
+za2gak
+za2ga2n
+zag1any
+za2gara
+za2g1a2t
+za2gau
+za2gág
+za2g1ál
+zag1árn
+zag1árt
+za2g1áz
+za2gel
+za2gés
+z1aggy
+2zagi
+za2gin
+z1a2git
+za2g1osz
+zagren2
+za2g1ü
+z1agy.
+z1a2gyak
+z1a2gyar
+z1agyb
+za2ijá
+zai2z
+3zaj.
+3zaja.
+za2j1a2d
za2jan
-za2j1árt
-z1a2kara
+za2j1átv
+3zajáv
+za2jes
+3zajf
+za2jin
+3zajj
+zajká2rok
+3zajol
+za2j1or
+2zajta
+2zajtó.
+z1ajtók
+2zajtót
+zaj1tr
+3zajú
+za2j1ü2
+2zakad
+za2k1a2dat.
+zakai2ko
+za2k1aka
+zak1alk
+za2k1alv
+za2kana
+za2k1ant
+za2kara
+z1akarat
+z1a2karás
z1a2karó
-za2k1av
-za2kem
-za2k1i2r
+z1akarv
+za2k1atl
+za2k1á2p
+za2k1áta
+za2k1átl
+2zakc
+z1akció
+za2k1e2g
+za2k1ele
+za2kelm
+za2k1eln
+za2k1elő
+za2ket
+za2k1é2l
+za2k1int
+za2k1i2p
+zak1iro
za2k1ír
-za2k1osz
-zalé2ké
-2zanya
-zao2
+zak1k2
+za1klu
+2z1aknák
+zak1oszt
+za2k1o2v
+za2kős
+za1krí
+2zaktá
+2zakti
+z1aktív
+2zaktú
+zaku1p2
+zaku2r
+zak1ura
+za2k1urá
+zakü2
+za1kvó
+zal1acé
+zala2gá
+zalag1g
+2zalakí
+za2lakj
+za2laku
+zala2n
+zal1any
+z1a2lapb
+za2lapj
+zal1átk
+zale2l
+zal1ele
+zal1ell
+zal1elő
+za2l1e2m
+z1algá
+z1alge
+za2lid
+z1alkal
+z1alkat
+z1alkot
+2zalmás
+za2lól
+zalta2n
+zal2tel
+zal2tem
+z1alti
+za2m1a2d
+za2m1aj
+zam1ala
+za2m1a2p
+zama2t1ő2
+za2maz
+2z1ambu
+za2mem
+zam1ing
+za2m1is
+za2mí
+za2m1osz
+za2mü
+z1a2nal
+z1a2nek
+2zang
+z1angy
+2z1ankét
+zan2tes
+z1antil
+za2nya.
+z1a2nyag
+z1a2nyó
+zao2k
+zao2s
+zaó2h
+zaó2v
+z1a2pa.
+za2pad
+za2p1a2g
+z1a2pai
+za2p1ág
+z1a2pán
+za2p1ára
+z1a2pát
+z1a2páv
+zape2l
+zap1ele
+za2pem
+za2pes
+za2pí
+za1p2lán
z1a2pó.
+z1a2póé
z1a2pók
-z1a2ráb
-za2rány
+2zap1p2
+zappa2ne
+zap3rof
+zap1s2
+za2r1a2dá
+za2ran
+zar1a2nya
+zar1apa
+za2rar
+z1a2rái
+za2r1ál
+z1a2rány
+z1a2rár
2zarc
+z1arc.
+z1arca
+z1arcá
+z1arch
+z1arci
+z1arck
+z1arco
+z1arcú
+zare2t
+za2r1ete
+za2rev
+za2réna
+za2réná
+2zarm
+za2r1ön
+za2r1ü
+zar2vág
+2zarz
za2sem
-za1s2l
-zat1akt
-za2t1a2n
-zata2r
+za1s2ká
+za1s2ko
+za1s2li
+za1s2pó
+za1spr
+za2t1ab
+za2t1a2d
+za2t1aj
+zat1alap
+zat1alj
+zat1ana
+za2t1a2ny
zat1ará
-za2tem
-za2t1in
-za2t1ív
+zat1att
+za2tau
+za2taz
+za2t1áll
+zat1álo
+zatá2p
+zat1ápo
+za2t1árad
+za2t1áré
+za2t1á2ru
+za2t1elé
+zat1elk
+za2t1e2ré
+za2t1erk
+za2t1é2g
+za2tél
+zat1i2ko
+za2tim
+za2t1ind
+za2t1ing
+za2tins
+za2t1int
+za2t1ist
+za2tiz
+zat1k2
+2z1atka.
+z1atlas
+zatmo1s
+zatmosz2
+za2t1okos
+zat1olda
+2zatomj
+zat1oml
+za2t1osz
+za2tök
+za2t1ön
+zat2rok
+za1trom
+zatt2
+zat1tr
+za2tura
+za2tül
+za2tür
2zaty
-z1a2tya
+za2tya
za2tyá
-zau2t
+za2ula
+za2ulá
+za2urá
+zau2tak
+z1a2uto
+z1autó
+zaü2t
+zaü2z
+za3vará
+3zavarb
+2zavat
z1az.
z1azh
-za2zo
+z1a2zo
1zá
-z1ábr
-záé2
+2z1ábr
+zá2de
+zág1a2d
+zá2gak.
+zá2gako
zá2g1al
-zá2gat
+z1á2gas
+z1á2gat
+zá2gaz
+zág1azo
zá2g1ál
-zá2ge
-zág1g
-zá2g1ú
-2z1á2gy
+zá2g1á2rak
+zá2g1áru
+zá2g1e
+zá2gép
+zá2golta
+z1á2gói
+zá2g1út.
+zá2gü
+z1ágy.
+z1á2gya
+zágy1a2da
+z1ágyb
+z1ágyh
+z1ágyn
+z1ágyr
+z1á2gyu
+záí2r
+zá2j1ék
+zá2jí
+zá2j1ol
+zá2j1ös
+zá2jő
+zá2jü
+zá2jű
zá2kin
-zále2
-zá2l1eg
+zá2k1ö2v
+zála2n
+zá2l1any
+zál1apr
+z1álar
+zál1assz
+z1álca
+z1álcá
+z1áldá
+zá2l1e2g
+zá2l1e2l
zá2l1em
-zá2lér
-2záll
+zá2lib
+zá2lid
+zál1ing
+zá2lir
+z1állam
+z1állap
+z1álma
+z1álmá
+z1álmo
+zá2lob
+zálo2d
+zá2l1oda
zá2los
-zál1t2r
+zá2lü
+zá2ly1a2l
+zá2mac
zá2m1a2d
-zá2map
-zá2mar
-zá2mis
-zá2nú
-z1á2rada
-z1á2ram
+zá2m1aj
+zá2m1a2l
+zám1any
+zá2m1a2p
+záma2r
+zám1ará
+zá2maz
+zá2m1átl
+zá2m1á2to
+zá2mél
+zá2m1é2rő
+zá2m1ik
+zá2mip
+zá2mir
+zám1orm
+zám1ors
+zá2mó
+zá2mö
+zá2mő
+zá2m1ut
+zá2mü
+zá2mű
+zá2naj
+zá2n1as
+zá2n1at
+zá2n1át
+zá2nem
+zá2nis
+zá2n1it
+zán3n
+zá2n1osz
+zán1sp
+zá2nü
+zány2
+zá2p1ad
+zá2p1ag
+zá2p1orzó
+zá1p2r
+z1á2radd
+zá2r1a2dot
+zá2r1a2l
+z1á2ramk
+z1á2raml
+zára2n
+zá2r1any
+zá2r1ap
+zá2rar
+zá2r1ati
+zá2r1a2to
+zá2r1att
+zá2r1av
+zá2r1ál
+3zárás.
+3zárása
+3zárásb
+3zárási
+zárás1s
+zá2r1á2sz
+z1árbev
+3zárdá
+zár2dem
+zár2d3z
+2zá2r1em
+zá2réb
+2zárf
+2z1á2riá
+zá2rid
+zá2r1i2k
+zá2rim
zá2r1is
+zá2r1iz
+zár1k2
+3zárkák
+2zárkö
+3zárlat
+2zárnö
+2zárny
+zár2nyál
zá2r1osz
-zá2r1ó2ra
-zá2rö
-zár1s2
-zá2sin
-záskész1
-2z1á2só
-záte2r
-z1átv
-zázé2
+3záró.
+3záróa
+zá2r1óbo
+3záród
+zár1óév
+zá2r1ó2rá
+zá2rő
+2zárré
+zárs2
+zár1sk
+zárt1anyá
+zár2t1es
+zárté2r
+zár1tro
+zá2rug
+z1á2ruh
+z1áruj
+2zárunkn
+2zárunkr
+zá2rü
+z1árvah
+zá2s1a2d
+zá2saj
+zá2sal
+zá2s1a2r
+zá2s1at
+zá2saz
+zá2s1á2g
+zá2s1árad
+zá2s1á2rá
+zá2s1á2ré
+zá2s1árh
+zá2s1árn
+zá2s1árt
+z1á2sás
+zá2sep
+zás1ikon
+zá2sis
+zá2s1í
+zá2s1ol
+z1á2só.
+zás1ó2r
+z1ásóv
+zá2sut
+zá2sü
+zá2s3zav
+3zászl
+zász3se
+z1átad
+zát1a2dó.
+zát1a2dók
+zátá2r
+2zátb
+2z1átc
+z1átd
+zát1e2m
+zá2tél
+2z1átf
+2záth
+z1átha
+z1áthe
+zá1t2hi
+z1á2t1i2
+2z1átj
+2z1átm
+zá1tra
+zá1tro
+2záts
+2z1átv
+zá2z1ala
+záza2t
+zá2z1ato
+zá2z1e2
zá2zév
zá2z1ol
-záz3sz
-z1b2
-zbee2
+zá2zos
+zázó2
+zá2zór
+zá2zö
+zá2zsaj
+zá2zsas
+záz4sá
+zá2zsál
+zá2zsol
+zba2ki
+zbeá2
+zb2le
+zb2lo
+zb2lú
+zb2ri
+zb2ró
+zb2rú
+zc2lu
+zcsa2p1á2g
+zda1p2
zdas2
z2d1ass
-zd2ró
-zd1ur
+zd1áll
+zdés1s
+zdő1s2p
+zd2ri
+zd1u2r
1ze
-2zea2
+zea2d
+zea2g
+zea2k
+zea2l
+zea2s
+zeán2sze
+zeá2r
zeá2z
2z1eb.
+2zebe
+ze2be.
ze2bei
ze2bek
-z1e2dz
-zee2
-zegész1
+z1e2béd
+z1ebf
+z1ebh
+z1ebk
+2z1ebn
+ze1bru
+2zece
+z1e2cet
+z1e2ch
+z1e2cset
+ze2d1ál.
+ze2d1álj
+ze2d1áln
+ze2d1ált
+ze2d1álv
+zede2r1e
+ze2dil
+ze2d1ó2
+2z1e2dz
+zee2s
+z1eff
+ze1fr
+ze2g1a2l
+ze2gap
+ze2gar
+ze2g1ál
+ze2g1ár
+ze2g1eg
+zeg1ell
+ze2gep
+zeget2t1eb
+zeg1érr
+zegé2sz
+zeg1észb
+zeg1észé
+ze2gid
+ze2gil
ze2gol
-2zegy
-ze2gyes
-z1egyn
+ze2gú
+ze2gyed
+ze2gy1e2l
+ze2gyene
+ze2gyez
+z1egyl
z1egys
+ze2het
+ze2ia
zei2g
zei2s
-ze2k1e2g
-ze2kép
+zeí2r
+zekci2ósz
+zek1e2gy
+ze2k1ell
+z1e2kéit
+2zekék
+ze2kil
+ze1k2lap
+ze2k1ott
+zek1övek
+ze2kő
+ze1k2reá
+zek1t2
+ze2k1ü2lő
+z1ekviv
+ze2lag
+ze2lar
ze2lál
-z1elej
-ze2l1eml
-z1e2lemz
+z1elbo
+2zeledel
+z1e2lefá
+ze2leji
+2zelekt
+ze2leme.
+ze2lemek
+zelem1el
+zele2m1ér.
+ze2lemű
+zele2pá
+zele2p1el
+zele2po
+zele2p1ü2l
+z1e2l1e2re
+ze2l1esz
+zele2tá
+zele2ter
+2z1e2lég
+2z1eléré
+zel1érh
+zelés1s
z1elhá
+2z1elhel
+2z1elher
+ze2litet
+z1elkü
+2z1elláto
2zellen
+z1ellene
+2z1elnev
z1elnö
-ze2l1os
-ze2lőg
-z1elvo
-ze2mad
-ze2már
-zeme2iké
+ze2lof
+z1e2los
+z1e2lö2l
+z1elön
+2z1e2lőha
+zelő2saj
+z1e2lőző
+z1első
+z1eltá
+2z1eltér
+2z1elto
+2z1eltű
+z1e2lu
+2z1e2lú
+z1elv.
+z1elvek
+z1elves
+2z1elvev
+z1elvez
+z1elvn
+z1elvt
+2z1elvű
+z1elzá
+2zema
+ze2mak
+ze2m1ág
+ze2m1ár
+ze2mát
+2zember
+z1ember.
+z1emberb
+z1emberé
+z1emberh
+z1emberk
+z1embern
+z1emberr
+z1embert
+z1embl
+2zeme.
+ze2m1egé
+2zemei
+2zemek
ze2m1ell
+ze2m1eng
+2zeméb
+2zeméh
+ze2m1ék
+ze2m1éle
+ze2m1é2lé
+ze2m1é2lő
+ze2m1élt
+ze2m1élv
+ze2m1é2rét
2zemés
-zem1id
+zemé2te
+ze2m1éten
+ze2m1étet
+ze2m1étjé
+2zemév
+ze2migr
+ze2m1ing
+ze2m1int
+ze2mis
ze2m1iz
-zenci2a
-zene2tel
-zen2tan
-zen2t1est
+ze2m1í
+2zemk
+2zeml
+2zemmó
+ze2mol
+ze2m1osz
+ze2m1ó2
+ze2m1ő
+2zems
+z1emul
+zem1ur
+ze2mú
+2zemü
+2zemv
+zemvíz1
+3zeneir
+3zeneka
+zenesz2
+3zenéé
+3zenéi
+3zenéj
+ze2nép
+zenké2
+zenkét1
+ze2n1o
+zen2tag
+zen2tal
+zen2t1an
+zen2t1as
+zente2g
+zen2t1egy
+zen2telm
+zen2t1ere
+zen2tev
+zen2t1é2j
+zen2t1imr
+zen2tip
+zen2tis
zen2tí
+zen2tol
+zen2t1ó2
+zen2t1ö
+zentő2s
+zen2t1őse
+2zenz
+zeo2k
zeo2m
-zeö2
-ze2per
-ze1ph
-ze1p2r
-ze2rad
-ze2raj
-ze2ran
-ze2r1ar
+zeö2r
+2zepééb
+2zepééi
+2zepéén
+2zepéit
+2z1epéj
+2z1e2pém
+2z1e2pés
+z1epiz
+ze1pla
+ze1ple
+2zepr
+ze1p2ri
+ze1pró
+ze2r1a2d
+ze2rajá
+ze2r1ajt
+ze2rakr
+ze2r1al
+ze2ram
+ze2r1a2n
+ze2r1a2r
ze2r1as
-zer1ára
-ze2redő
-zere2g
-zer1egg
+ze2r1a2t
+ze2r1au
+ze2raz
+ze2r1ága
+ze2r1á2r
+ze2rás
+ze2r1á2t
+zer2bin
+zer1d2
+z1erdé
+ze2r1eb
+ze2r1e2ce
+ze2redé
+ze2rege
+zer1e2ge.
+ze2r1e2gé
+ze2r1egg
ze2r1egy
+z1e2reje
zer1ejt
-2zerejü
-ze2r1él
+z1e2rejü
+z1e2rejű
+ze2r1e2ke.
+z1e2rekl
+ze2relődj
+ze2r1ember
+ze2r1emi
+ze2r1eng
+zere2p1a
+ze2r1e2r
+ze2r1e2sés
+ze2r1essz
+ze2r1este
+zer1e2sze.
+zer1eszk
+ze2reszt
+ze2r1eu
+ze2r1e2v
+ze2rég
+ze2r1é2j
+ze2r1ék
+ze2r1é2l
+ze2r1ép
+zer1g2
+ze2r1i2d
+ze2r1iga
+ze2r1iko
ze2r1ill
-ze2r1ip
-ze2ris
-2zerj
+ze2r1i2m
+ze2r1ina
+ze2rind
+ze2r1inf
+ze2r1ing
+ze2r1inj
+ze2r1ink
+ze2r1intel
+ze2r1inté
+zer1intő
+ze2rio
+ze2rism
+ze2riz
+ze2r1í2j
+zer1k2
+zer2nal
+ze2r1okt
+ze2r1old
+ze2rolv
ze2ror
-2z1e2rő
+ze2r1ost
+ze2r1osz
+ze2roti
+ze2r1ó2r
+ze2rök
+2ze2rő
+z1erő.
+z1erőf
+z1erői
+z1erők
+z1eről
+z1erőn
+z1erős
+z1erőt
+z1erőv
+zer1őz
+zer1p2
zer1s
-ze2r1u2
-ze2set
-ze2sit
-ze2ső
+zers2k
+zers2p
+zers2t
+zert1á2lom
+zer2tit
+zer2tór
+zer1tra
+zer1tren
+ze2r1un
+ze2rur
+ze2rus
+ze2r1u2t
+ze2r1út
+ze2r1ü2g
+2zerű
+zer2v1a2dó
+zer2van
+zer2vel
+zer2vél
+2z1e2sedék
+ze2s1e2kéh
+z1e2setb
+z1e2sete.
+z1esetes
+z1e2setet
+z1e2seté
+z1e2seti
+z1e2setr
+2z1e2sés.
+2z1e2sésb
+2z1esésd
+2z1e2sése.
+2z1e2sései
+2z1e2sések
+2z1e2sésem
+2z1e2sésen
+2z1e2séses
+2z1e2sésé
+2z1e2sésh
+2z1e2sési
+2z1e2sésk
+2z1e2sésn
+2z1e2sésr
+2z1e2séss
+2z1e2sést
+ze2s1it
+ze1s2mi
+2z1e2ső
+zesp2
+ze1s2pe
+ze1spr
+2zeste
+z1estek
+z1estem
2z1esté
-zes1ut
-ze2süv
-zesz1ár.
-ze2széle
+z1esti.
+ze1s2til
+2z1estj
+ze1sto
+z1estre
+z1estt
+ze2s1ü2v
+ze2szág
+zesz1e2get
+ze2szelle
+ze2szeng
+ze2széh
+ze2sz1é2le
+ze2sz1im
ze2szip
2zeszk
-zes3zs
-ze2t1any
-ze2tál
-ze2tát
+z1eszkö
+ze2szol
+zeszt2
+zesz1tr
+ze2t1ab
+ze2tac
+ze2t1ala
+ze2t1a2ny
+ze2táj
+ze2t1á2l
+ze2t1á2p
+ze2t1át
+zet1egé
+zet1elá
ze2t1ell
ze2telm
+ze2t1e2lőá
+ze2t1e2lőd
+ze2t1elr
+zet1emel
+ze2t1eml
+ze2tene
+zet1erk
+zet1e2ró
+zete2s1ég
+zetest2
+zetes1tr
+z1e2teté
+ze2t1eti
+ze2tetn
+ze2t1éd
+ze2t1é2j
+ze2t1é2l
ze2térte
-ze2tí
-zetme2
-zetmeg1
-ze2tok
+ze2t1érté
+zet1értő
+ze2t1é2rü
+zeté2sz
+zet1észe
+zet1éter
+ze2tid
+z1e2tika
+ze2t1i2ko
+zet1ill
+ze2t1ing
+ze2tít
+zetkész1e
+ze2tom
+zet1ont
+ze2top
ze2t1ó2r
+ze2t1ö2v
+zet1őri
+zet1őrö
+zet1őrt
+ze2tut
+ze2tür
+ze2t1ü2z
ze2ty
+zeu2g
z1e2ur
-2zev
-ze2vez
-z1e2vol
-ze2vő
-ze2zer
-2z1ezre.
-2zezred
-2zezrei.
-2zezreir
-2zezreit
-2zezreiv
-2zezrek
-2zezrel
-2zezres
-2zezret
+zeü2t
+z1e2vő
+ze2x1id
+ze2xim
+ze2x1i2p
+z1expe
+zex2t1ö
+ze2xú
+z1e2zer
+z1ezr
1zé
-zé2dal
-zé2d1elem
+z1é2ber
+2z1ébr
+zé2dak
+zé2d1a2l
+zé2d1a2r
+zé2d1as
+zé2dat
+zé2d1á2
+zé2d1ekét
+zé2d1e2lem
+zé2delm
+zéde2r1
+zéd1esem
+zé2d1esz
+zé2d1eti
zé2d1és
-zé2dz
-2zég
+zé2dik
+zé2dó
+zé2d1ő
+zédren2
+zédu2
+zé2dur
+zé2dú
+zé2d3z
+zé2fá
+z1ég.
+z1égb
z1é2ge
-zé2hes
+zé2gé
+z1é2gi
+z1égn
+z1é2gő
+z1égr
+z1égt
+z1é2he.
+z1é2hen
+2z1é2hes
+z1é2het
2z1éhs
+2zéid
+z1éj.
+zé2jen
+z1é2ji
+zéjje2l1e2
z1éjs
-zé2kin
+2z1éjül
+2z1é2jün
+zé2k1a2d
+zé2k1a2l
+zé2k1a2n
+zé2k1ap
+zé2k1as
+zé2kás
+zé2k1eg
+zé2k1e2két
+zé2k1elr
+zé2ker
+z1é2kez
+zé2k1ék
+zé2k1é2l
+zé2k1és
+zék1old
+zék1osz
+zé2k1ó2
+zé2kör
+zé2kúr
+zékü2l
+zé2k1ülé
+zé2k1ülő
+zéla2
+zé2lab
+zé2lad
zé2lak
+zé2l1an
+zé2las
zé2l1á2
-2zé2lel
+2zé2le2l
+zél1ele
+zél1ell
+zél1elő
zél1elt
-zé2lene
zé2l1e2r
2zélet.
2z1é2letb
-2z1é2lete
+2z1é2lete.
+2z1é2leten
2z1é2leté
+zé2letf
+2z1é2leth
2z1é2leti
+2z1é2letn
+2z1é2letp
2z1é2letr
-zé2lir
-zé2lo
-zé2lu
+2z1é2lets
+2z1é2lettő
+2z1é2letü
+2z1é2letű
+2zélé
+zé2l1ékh
+zé2lim
+zé2l1ist
+zé2lí
+2zélm
+zé2l1o
+zé2l1ö2
+2zélős
+2zélt
+zé2l1u2
+zé2lú
+zé2lya
+zé2lyá
+zé2ly1esh
+zé2lyo
+2zéme
+zé2n1árn
zéndio2
-zéne2
zé2neg
-zé2n1el
+2z1é2nekb
+2z1é2neke
+z1é2neké
+zé2nekk
+2zénekl
+z1é2nekn
+zé2nekr
+zé2nekü
+zé2n1e2l
+zé2n1e2r
+zéni2
+zé2nik
+zé2nil
+zé2nim
+zé2n1io
zé2n1is
-zé2nu
-zé2p1a2
-zé2pá
-zép1emb
-zé2p1ér
+zé2ní
+zé2nom
+zé2nö
+zé2nő
+zént2
+zé2n1ü2lő
+zé2p1a2g
+zé2p1a2l
+zé2p1any
+zé2p1a2p
+zé2p1a2r
+zé2pas
+zé2pat
+zé2pau
+zé2pav
+zé2p1á2r
+zé2pát
+zé2peg
+zép1ell
+zé2pez
+zép1f2
+zé2pin
+zé2p1i2p
zé2pir
-zé2pis
-2zépí
-zé2p1o
-zé2pu
+zé2p1i2s
+2zépít
+zépo2
+zé2pol
+zé2pos
+zé2pó
+zé2pö
+zép1s
+zé2pud
+zé2p1us
+zé2pú
2zépül
+zé2rab
+zé2rag
+zé2r1a2l
+z1é2ram
+zé2r1a2n
+zé2rap
+zé2rar
+zé2r1as
+zé2rat
+zé2rav
zé2r1á2
-zé2reg
-zér1emb
-zé2rés
-zé2rig
-zé2r1o
-zé2rőt
-2z1érté
-2z1érth
-2z1érz
-zé2sa
-zé2sel
-zé2sí
+zér1d2
+zé2r1e2lemé
+zé2r1e2lemk
+zé2r1e2lemn
+zé2remb
+zér1eml
+zé2r1esz
+2zérett
+zé2rev
+zé2rés.
+zé2résb
+zé2rése
+zé2rési
+zé2résk
+zé2résn
+zé2r1id
+zé2rim
+zé2ris
+zé2r1o2k
+zé2r1os
+3zérós
+zé2rö
+2z1é2rő.
+z1é2rői
+z1é2rők
+zé2rős
+z1é2rőt
+zér1s
+zér2taj
+2zértekez
+2zértelm
+2z1értetl
+2z1értető
+2z1érték
+2z1érthet
+z1érto
+zé2rú
+zé2sab
+zé2san
+zé2sar
+zé2s1az
+zé2s1á2
+zé2seg
+zé2s1e2l
+zé2s1e2r
+zé2s1eti
+zé2s1ég
+zé2sés
+zé2s1i2k
+zé2sok
+zé2só
zés3s
-zé2tap
+zé2s1ü2t
+zé2s3za
+z1észb
+z1é2szé
+z1észl
+zé2szó
+zés3zs
+zé2t1a2b
+zé2t1ad
+zé2tag
+zé2t1aj
+zé2t1a2k
+zé2t1a2l
+zé2t1ap
+zé2t1a2s
+zé2t1au
zé2t1á2
-zé2te2l
-zét1ele
-zét1ese
-zét1esn
-zét1est
-zé2ti
+zéte2n
+zéte2se
+zéte2sü
+zé2tég
+zé2t1é2n
+zé2t1i2
2zétk
-zé2t1o
-zé2tö
-zé2tu
+zé2tol
+zé2t1o2m
+zé2tor
+zé2t1o2s
+zé2tun
zé2tú
-zé2t1ü
-zé2tű
-z1év.
-zé2vek
+zé2t1ü2
+zé2t1ű
+2zétv
+2z1év.
+2z1évad
+z1évb
+2z1é2ve.
+2z1é2vek
2z1é2ven
2z1é2ves
-2z1é2vi
+z1é2vén
+z1é2vét
+z1é2vév
+z1évf
+2zévi
+z1é2vi.
+z1évk
2z1évn
-zf2
+z1évr
+z1évs
+z1évt
+z1é2vü
+2z1évv
+zfa2l1a2da
+zfa2l1aj
+zfa2l1e2l
+zfa2les
zfe2l1em
-zfe2li
-z2féri
-z1fr
-z1g2
+zfe2len
+zfe2reg
+zf2la
+zf2le
+zf2li
+zf2lo
+zf2ló
+zfora2
+zfo2rat
+zfo2riz
+zföldié2
+zf2ra
+zf2rá
+zf2re
+zf2ri
+zf2rí
+zf2ro
+zf2rö
zgás3s
-zgá2sz
+zgá2s3z
+zgá2zó
+zgé2p1e2két
+zgé2sa
+zgé2sá
+zgé2sem
zgés3s
-zgó1s2
-zhad1
-zharminc1
+zg2la
+zg2ló
+zgó1g2
+zgő2nyá
+zgő2z1á2
+zgő2zér
+zgő2z1ő
+z1g2ra
+z1g2ráf.
+z1g2ráff
+z1g2ráfh
+z1g2ráfj
+z1g2ráfk
+z1g2ráfn
+z1g2ráfr
+zg2ró
+z1g2ru
+zhán2
+zhá2t1a2d
+zházköz1
1zi
+zi2aa
+zi2aá
+zi2abo
zi2ac
+zi2ad
+zi2ae
+zi2aé
+zi2ag
+zi2ah
+zi2aí
+zi2aj
+zi2akép
+zi2akó
+zi2al
+zi2am
+zi2ao
+zi2aö
+zi2a1p2
+zi2ar
+zi2asza
+zi2aszo
+zi2aszó
+zi2at
+zi2au2
+zi2aú
+zi2aü
+zi2av
+2z1ibr
2zicc
zi1ch
-z1i2dé
-z1i2dő
+z1i2deá
+z1i2deg
+z1i2deo
+zi2dén
+2z1i2dő
zie2l
zie2m
-zigaz1
-2zigazg
-zi2gáz
+zi2éa
+zi2éá
+zi2éke
+zi2ép
+zi2éta
+zi2étá
+zi2éü
+z1ifj
+z2ig.
+zi2ga.
+2z1igazg
+2z1i2gazo
+z1i2gás
+zi2géj
2z1i2gén
zi1g2r
+2zigye
+zi2k1a2n
+zik1ékek
+zi2kik
+zi2kim
+zi2k1ing
+zi1klu
+zi2k1u2r
zikus1s
-z1imma
-zi2n1á2r
+zi2ler
+zi2l1é2j
+zi2l1ék
+zi2l1ing
+zi2l1ü
+z1i2ma.
+zi2mak
+zi2máb
+zi2máj
+zi2mák
+zim1áll
+zi2már
+zi2mát
+zi2máz
+zim1b
+zi2m1e2g
+zi2m1e2l
+zi2m1é2ré
+zi2m1érté
+zim1ind
+zi2m1ip
+z1i2mit
+zi2mö
+zi2n1a2d
+zi2n1a2l
+zi2n1a2n
+zi2n1a2r
+2z1i2nas
+zi2n1au
+zi2nái
+zi2n1áll
z1indu
+zin1emb
+zi2nég
+zin2gas
+zin2gál
+zi2n1i2m
+zi2n1in
+zi2ní
+zin3n
zi2nol
-zi2nór
-zin2t1el
-zin2ter
-zin2to
+zin1s2
+zin2t1a2d
+zin2t1a2l
+zin2t1a2s
+zin2tát
+zin2t1á2z
+zinte2l
+zin2t1ele
+zin2telő
+zin2telt
+z1interj
+z1interp
+z1interv
+zin2tom
+zin2t1ón
+zi2n1u2t
+zi2nú
zi2ol
+2z1i2ono
+2z1i2ons
+zi2ot
+zi2óa
+zi2óá
zi2óc
-zi2óp
-z1i2par
+zi2óe
+zi2óg
+zi2óí
+zi2ókam
+zi2ókap
+zi2óká
+zi2óke
+zi2ó1kl
+zi2ól
+zi2ómá
+zi2ómé
+zi2óné
+zi2óny
+zi2óo
+zi2ó1p2
+zi2órá
+zi2ósá
+zi2ósé
+zi2ó1s2ká
+zi2ó1sp
+zi2ószű
+zi2óta
+zi2ótá
+zi2óú
+zi2óü
+zi2óű
+zi2pai
+zi2pari
+zi2páj
zi1p2l
zi1p2r
z1i2rat
-2z1i2rá
-zi2rod
+2zirá
+z1i2rán
+z2i3re
+2ziro
+z1i2rod
+zi2rón
+z2i3rő
+2zirt
+zir2t1a2
+z1irtá
+zir2to
+z1irtó
+zi2sad
zi2sal
-zi2seg
-zise2l
-zis1ele
-z1isko
-2z1ism
-zi2sor
-zis3szi
-2z1iste
-zi2tut
-ziú2
+zi2sam
+zi2sar
+zi2s1a2s
+zi2sál
+zi2s1áro
+zi2s1e2g
+zi2s1e2l
+zi2s1er
+zise2s
+zi2s1ese
+zi2s1esz
+zi2s1ék
+zi2sérte
+zis1évi
+zi2s1il
+zi2sin
+zi2s1is
+zi2sit
+zi2s1o2v
+zi2s1ó2
+zi2sö
+zi2ső
+ziss2
+zis3sza
+zis3szá
+zis3szo
+zist2
+zis1tra
+zis1tre
+zi2sut
+zi2s1ü2v
+zi2s3zaj
+zis3zav
+zis3zón
+zi2t1áll
+zit1áru
+zi2t1e2g
+zi2t1elr
+zit1eng
+zi2tét
+zi2til
+zi2tin
+zi2tip
+zi2tir
+zi2t1or
+zitó2
+zi2tór
+zi2t1út
+ziú2r
+z1i2vad
2z1i2vó
+2z1i2zé
2zizm
-zi2zom
-2zizz
+z1izmo
+z1i2zom
1zí
-zí2n1ál
-zí2nár
-zí2n1o
+zí2gé
+zí2jan
+zí2je
+zí2jö
+zí2jü
+zí2nac
+zí2nad
+zí2naku
+zí2nal
+zí2nan
+zí2nas
+zí2nat
+zí2n1áll
+zí2n1ár
+zí2nát
+zí2n1e2r
+zí2nél
+zí2ní
+z1ínna
+zín3nye
+zíno2
+zí2n1od
+zí2n1ok
+zí2nos
+zí2n1ó2
+zí2nö
zí2nu
-z1í2ró
-zítés3s
+zí2nú
+z1í2ny
+zínyenc1
+zí2r1a
+2z1í2rá
+zí2rog
+2z1í2ró
+zítőa2
+zítőe2
+zítőkész1
+zí2vaj
+zív1akt
zí2val
-zí2viz
-2z1í2z
-z1kh
+zí2var
+zí2ver
+zí2v1ő
+zí2vul
+zí2vú
+zí2ze
+zí2zü
+zí2zű
+zje2gy1á2
+z2k1abl
+z2k1alak
+z2k1alj
+z2k1alt
+zka1p2l
+z2k1a2rád
+z2k1a2ráj
+z2k1a2rén
+zkaró2
+zka2rór
+zka1s2k
+z2k1állv
+zk1bl
+zk1dr
+zk1egys
+z2kenn
+zk1eszk
+z2k1etű
+z2k1ér.
+z2k1érté
+z1k2hü
+zkia2
zkiá2
zkie2
-z2k1ing
-zk2le
-z1k2lin
+zki2g
+z2k1igé
+zki2sé
+zk2la
+z1k2lá
+zk2ler
+z1k2lí
+zk2ló
z1k2lu
-zkon2tár
-z2kopi
-z2kópiá
-z2kópr
-z1k2ra
-z1k2ru
+z2k1olda
+zkon2t1ár
+z2k1ontó
+zko2r1os
+z2k1oszl
+z3koszt
+z2kókor
+zk1ókort
+zkó2pá
+zkó2z3s
+zkö2zele
+zköz1ell
+zkö2z1é2l
+zkőé2h
+zk1pr
+z1k2rak
+zk2rá
+z1k2reá
+z1k2rém
+z1k2réta
+z1k2rétá
+zk2rí
+z1k2ro
+z1k2rón
+zkultú3
+zkultúr2
+z2k1u2rán
+z2k1u2rát.
+z2k1utá
z1k2val
-zle2ta
-zle2tá
-zle2t1emb
-zle2ter
-zle2t1o
-z2log
-zme2g1á
+zk2vó
+zky2b
+zky2h
+zky2j
+zky2k
+zky2n
+zky2r
+zky2t
+zky2v
+zla2tal
+zlata2n
+zlat1any
+zlá2m1e
+zlá2mis
+zlás3s
+z2láv.
+z2láve
+z2lávé
+z2lávk
+z2lávn
+z2lávo
+z2lávv
+zleg1g
+zlei2
+zleí2
+z2leng.
+zle2tak
+zle2tal
+zle2t1a2n
+zle2tál
+zle2t1á2r
+zle2t1eg
+zle2t1ell
+zle2tesz
+zle2tél
+zle2t1ér.
+zlet1érv
+zle2tés
+zle2t1é2té
+zle2t1é2ve.
+zletigaz1
+zle2t1u
+zle2tüz
+zlé2sí
+zlé2so
+zlés3s
+zlina2
+zli2nan
+zli2nin
+z2loge
+zlo2p1as
+zlo2pó
+zlóó2
+zló2s1orr
+zma1pr
+zmas2
+zma1sp
+zmeá2
+zme2ge
+zme3gom
+zmi2n1a2
+zmi2n1e
+zmuskész1
+zmu2sö
+zmu2s3z
+zmu2tok
+zna2pes
+znie2
+zni2ó
z2nob
+znó1str
+znót2
+znó1tr
1zo
+z1obj
+z1o2dú
+zo2es
+z1o2ka.
+z1o2k1a2d
+z1o2kai
+zo2k1ál
zoki2
-zok1ir
-zo2koz
+zo2k1ip
+z1o2k1ir
+z1okke
+z1okle
+2z1o2koz
+2zokta
+zo2lab
2z1o2laj
-2z1oll
-zo2mag
-2zomh
-2zomv
+zolajá2
+zola2j1ár
+zola2je
+zo2l1a2l
+zo2l1as
+zol1ábr
+zo2l1áro
+z1oldal
+2z1oldh
+2z1oldó
+zo2l1e
+zol1f2
+zol1inf
+zo2l1is
+zo2l1í
+z1olló
+zo2lö
+z1oltás
+z1oltó.
+zol1t2re
+zo2lü
+2zolvad
+zo2m1a2g
+zo2mak
+zo2m1a2l
+zo2m1a2n
+zo2map
+zo2m1a2s
+zom1áll
+zo2m1á2r
+zom1b2
+3zombor.
+2zome
+zo2meg
+zo2m1el
+zo2men
+2zomé
+zo2mél
+zomé2t
+zo2m1éte
+2zomf
+2zomg
+zomi2
+zo2min
+zo2miz
+zom2jó
+2zoml
+zo2m1ors
+zo2m1os
+2zo2mö
+2zom1p2
+2zom1s
2zomz
-zo2naj
+zo2n1aj
+zo2n1ak
+zo2n1a2la
+zo2n1alá
+zo2n1alk
+zona2n
+zo2n1any
+zo2n1a2r
+zon1asz
+zo2n1au
+zo2náld
zo2n1áll
-zo2ner
-zoné2
+zo2n1átl
+zone2
+zo2neg
+zo2nel
+zo2n1er
+zo2nes
zo2név
-zon2tel
-zon2tol
-zo2nyan
+zo2nin
+zo2n1i2o
+zo2n1or
+zono2sé
+zo2n1ó2
+zo2nö
+zon1s2
+zon2t1es
+zon2tin
+zon1tre
+zo2nü
+zo2ny1ad
+zo2ny1a2l
+zo2ny1a2n
+zo2nyar
+zo2nyav
zo2nye
-zo1phi
+zo2nyid
+zo2nyij
+zo2nyó
+zo2ol
+zo2om
+z1opál
+z1o2pe
+zo1pho
+zo2r1a2d
+zo2raf
+zo2r1ag
+zo2r1aj
+zo2r1a2l
zo2ran
-zo2rar
zo2r1as
-2zorg
-z1orke
+z1o2rat
+zo2r1au
+zo2r1e2
+zor1f2
+zo2rid
+zo2r1il
+zor1ing
+z1ormá
+zo2r1ol
+zo2rop
+zo2rosz
+zo2r1ó2
+zo2rö
z1orr.
z1orrú
-z1orvo
-2z1o2x
+z1orsó
+zor1t2re
+zo2rü
+2z1osko
+z1ostá
+z1osto
+zo1sz2f
+z1oszl
+zosz2tat
+2zote
+2zotó
+zotó2pa
+zo2vi
+zo2xi
1zó
-zóá2
-zó1dre
-zó1p2
-z1ó2rai
-z1ó2ras
-zó2ta.
-zó2t1ért
-zó1t2h
-zó1t2r
-zózat1át
+zóa2d
+zóá2g
+zóá2r
+zó1bl
+zó1b2r
+zó1cl
+zó2d1e2l
+zó1fl
+zó1f2r
+zó1gl
+zógyö2k1ér
+zói2g
+zóí2v
+zója1
+zó1k2l
+zó1kré
+zókupac1
+2zól.
+z1ólm
+zó2lomb
+3zónád
+3zónái
+z1ó2ni
+2z1ónj
+2z1ónn
+z1ó2nod
+2z1ónt
+zóó2r
+zó1p2l
+zó1p2r
+z1ó2rad
+z1ó2rar
+zó2rasz
+zó2rái
+z1ó2ráj
+z1ó2rák
+z1ó2rár
+zórás1s
+z1ó2rát
+z1ó2ráv
+z1ó2riá
+zós1ík.
+zó2s1ín.
+zó1s2ká
+zó1sl
+zó1s2ta
+zó1sté
+zósz1akad
+zósz1állí
+zó2szene
+zó2sz1é2le
+zó2sz1íj
+zósz1ü2lő.
+zóta2g1a2
+zóté2g
+zót1ége
+zó1tré
+z1ó2vó
1zö
-zög1ért
+zö2bá
+zö2bo
+zö2bó
+z1öcc
+zö2dé
+zö2dú
+zö2ga
+zö2gá
+zög3g
+zö2gil
+zö2gí
+zö2go
+zögö2
zö2g1öl
-3zölde
-zöl2din
-z1ölel
+zö2gu
+zö2gy
+2z1ökl
+2z1ö2ko
+2zökrü
+3zöldes
+3zölds
+2zöleb
zö2les
+2z1ölniv
+z1ölyv
+2z1öml
+z1ö2na
+z1ö2ná
+2zönb
2zöne
+2zöné
+2zöni
+2zönl
+2zönne
2zönö
+2zönr
+2zönt
+3zörej
+zör2f1e
+zör2f1o
+zör2nya
+zör2nyá
+zör2nyel
+zör2nyesz
+zör2nyék
+zör2nyí
+zö2rök
+zör2p1a2
+zör2pá
+2z1örv
+2zössz
+z1ösv
+z1ösztö
+zö2te
+2z1ötl
2z1ötv
-2zöv
-2z1ö2z
+z1öv.
+z1ö2vei
+z1ö2vek
+zöve2t1e2l
+z1ö2vez
+zö2zö
1ző
-ző1dr
-zőe2r
-zőren2
-zőrend1
-ző2ro
-2zőrs
+zőa2c
+zőa2l
+zőá2g
+ző1bl
+ző1br
+zőé2l
+ző1fl
+ző1f2r
+zőgépi2
+zőgé2p1ip
+ző1gr
+ző1kl
+zőmű1
+zőnyá2
+ző2ny1er
+ző2ny1é2k
+ző2nyért
+ző1pl
+ző1pr
+ző2ran
+ző2r1e2c
+ző2r1ege
+ző2rel
+ző2r1er
+2zőrk
+2zőrl
+z1őrlő
+2zőrm
+ző2rol
+2zőrü
+ző2r1ü2g
2zőrz
-zőu2
-zpen3
-z1p2l
+z1őrzé
+z1őrző
+ző2sis
+ző1ská
+ző1spe
+ző1s2pi
+ző1sta
+ző1sti
+ző1str
+zősz2
+ző1szf
+ző1szt
+ző1tr
+zőü2l
+zpen1n
+zp2fe
+zp2la
+zp2lé
+zp2lo
+zpor2t1e2
+zpor2t1ő2
+zpor2t1ú
+z1p2ra
+z1p2ri
z1p2ro
-z1p2ró
+z1p2ru
+zrae3le
+zrádiói2t
+zre2d1á2
+zre2del
+zre2d1é2k
zre2d3z
-zren2d1ő
+zren2d1ő2
+3z2rí.
z2s
1zsa
-2zsaj
-zs1a2la
-2zs1amu
-z3sapk
+zs1abla
+2zs1a2dat
+2zs1a2dó
+zsag2
+2zsah.
+2zsajt
+2zs1akc
+2zs1alj
+2zs1alm
+2zs1alt
+zsa2nyá
+zsa2pa.
+2z3sapk
+zsa2rán
+z3sarj
+2z3sark
+2z3sarl
+2zs1arz
+2zs1aszt
+zs1atl
+zsa1tr
+2zs1a2ty
+2zsautó.
+2zsautón
+zs1azo
1zsá
-2zság
-z3ság.
-z3sága
-z3ságá
-z3ságt
-zsá2rá
+2zs1ábr
+2z3sáf
+2z3ság
+zs1ággy
+zsá2kó
+2zs1ála
+2zsálc
+2zsálm
+2zs1á2p
+2zs1á2rak
+2zsárat
+2z3sári
+2zsáru
+2zsáte
+2zs1átk
+2zsáto
+2zsátö
+2zs1áts
+2zs1á2zós
+zs1bl
+zs1br
+z3s2ch
+zscsapá2
+zsde1s
+zs1dr
1zse
+zse2ba
+zse2biro
+zse2b1o2
+2zsebz
+zs1e2ce
+zs1e2dé
z3sej
+2zsell
+zs1elm
+2zselö
+zs1e2lőf
+zs1e2lőr
+2zsember
+2zs1e2mel
+zs1enc
+zs1ene
+zse2raj
+zse2r1á2
+zse2rel
+zsere2s
+zse2r1esz
+zse2r1ék
+zse2rin
+zse2r1o
+2zsese
+zse2szü
+zs1evé
+2zs1ex
+2zsez
1zsé
-2z3ség
-2zs1ép
-zs1érv
+z3ség
+zsé2ge2l
+2zséhs
+2zsél
+zs1éle
+2zsép
+2zs1érd
+2zs1érte
+2zs1érté
+3zséry
+2zsérz
+2zséte
+2zs1étk
+2zs1étr
+2zs1étt
+2zs1é2ve.
+zs1fl
+zs1fr
+zs1gr
1zsi
-2zsir
-zs1iro
-2zs1ita
+2zsidő
+2zsigá
+2zsigé
+zsi2kor
+2zs1ill
+2zs1i2má
+zsi2min
+zsi2m1u
+2zsinas
+zs1i2pa
+z3sipk
+2zsirat
+zs1irato
+2zs1iro
+2zs1irt
+2zs1ism
+2zsist
+zsi2tat
+2zsivó
+zs1izé
+2zs1izm
+2zs1i2zo
+zs1izz
1zsí
-z3sík
+2z3síb
+zs1íj
+2z3sík
2z3síp
+zsí2r1a2
+zsí2rá2
+3zsírbó
+3zsíré
+3zsíros
+3zsírr
+3zsírt2
+2zs1í2v
+2zs1í2z
+zs1kl
+zs1k2r
1zso
+2z3sof
+2zs1okm
+2zs1okta
+2zsolaj
+zs1oli
+3zsom
+2zs1op
2zsor
-zs1orv
+z3soro
+2zsosty
+2zs1osz
1zsó
+zs1óné
+zs1órá
1zsö
+2zsökör
+2zsölőz
+2zs1ös
+zs1ö2ve
1zső
-zsp2
-zs3s
-zst2
-z3s2tí
+zs2pir
+zs1p2l
+zsp2r
+zs1s2k
+zs1s2p
+zs1st
+zs3sz
+zssze2r1e2l
+z3s2tad
+z3s2tat
+z3s2top
+zst2r
+zs1tro
+z3s2tú
1zsu
+2zs1ud
+2zsugár.
+2zsugárr
+2zsugr
+3zsul
+2zsum
+zsu1s
+zsusz2
1zsú
-z3súl
+2zs1új
+2zsúl
+zsú2r1a
1zsü
-zs1üg
-zs1ü2té
+2zsüg
+2zsült
+2zsünn
+zs1üs
+2zsüt
+2zs1üz
1zsű
-zsz2
-z3sza
-z3szá
-z3szeg
-z3szek
+zs1wh
+zs3zac
+z3szag
+zsza2ké
+zsza2k1ü
+z3szav
+zs3záp
+zs3zás
z3szem
-zs3zen
-z3szere
+zs3zené
+z3szer
z3szé
+zsz2f
+z3szi
+zszind2
z3szí
+z3sz2k
+zsz2l
z3szo
z3szó
-z3sző
-zszt2
-z3szu
+z3szö
+zsz2p
+zs3zs
+zsz2t2
z3szü
z3szű
+zt1abla
+z2t1a2bor
+z2t1a2cé
+z2ta2dal
+zt1a2dat
zt1a2dó
-zt1apá
+z2t1agre
+z2t1a2ká
+z2t1akc
+z2t1akk
+zt1akn
+ztaköz1
+z2t1akv
+zt1a2lapú
+ztale2l
+zta2lele
+z2t1anal
+ztan2e
+zt1anes
+zt1anké
+zta2n1ó2
+zt1a2nyag
+zt1anyak
+zt1anyas
+zt1anyád
+zt1anyám
+zt1anyáu
+z2t1anyu
+zt1a2pán
+zt1a2pás
+zt1a2pát
+z2t1apó
+zt1app
+z2t1aps
+zt1a2puk
+z2t1a2ra.
+zt1arán
z2t1arc
+ztaso2
+zta1sp
zt1assz
-z2táld
-zt1á2ram
-z2tátj
-z2tátu
-ztá2v1i2
-z2t1elo
-z2t1emb
-z2tep
-z2tered
-z2tesem
-z2t1é2g
+z2taszt
+zt1aszta
+z2tatig
+z2t1atk
+z2t1aty
+z2t1a2ut
+zt1ábr
+ztá2cs
+zt1ácso
+zt1ág.
+z2t1á2ga
+z2táli
+z2t1álm
+ztá2raj
+ztá2r1ass
+zt1árem
+ztá2ris
+z2t1árnö
+zt1árnya
+z2tároc
+z2tárokk
+ztá2r1olt
+ztá2r1óra
+ztár1sm
+ztár1s2p
+ztárt2
+zt1árví
+ztá2sz
+zt1ászo
+zt1ászt
+z2t1átha
+z2t1áts
+z2t1átv
+ztávi2
+ztá2v1ir
+zt1bl
+zt1dr
+z2t1e2b
+z2t1ef
+z2t1e2gé
+z2t1egy
+z2t1e2ke.
+z2t1e2kés
+z2t1ela
+z2t1elá
+z2t1elb
+z2t1e2legy
+z2t1e2leme
+z2t1e2lemm
+z2telemz
+z2t1elf
+z2t1eljá
+z2t1ellát
+z2t1elm
+z2telnö
+z2t1e2lo
+zt1e2lőadá
+z2t1e2lőc
+z2t1elr
+z2t1eltá
+z2t1elto
+z2t1ember
+z2t1e2mel
+z2t1eml
+z2tent
+zt1ente
+zte2raj
+zte2rak
+zte2rál
+zte2rár
+z2terde
+ztere2ot
+zte2repo
+zte2rill
+zte2ris
+zte2riz
+zte2rosz
+z2t1e2rot
+z2t1e2ró
+z2t1erő
+zte2r1ü2lé
+zte2sz
+z2t1esze
+z2t1eszé
+z2t1eszk
+z2t1ezr
+zt1ég.
+zt1égb
+zt1é2gé
+zt1égr
+z2t1é2j
+zté2k1e2l
+z2t1ékné
z2t1é2le
+z2télé
+zt1é2lés
+z2t1élm
+z2t1é2lő
+z2t1élt
+zt1élű
+z2t1épü
+zté2rá
+z2t1érd
+z2t1érl
z2t1érté
-zt2hen
-ztia2
-z2t1id
-zti2g
-z2t1igé
-z2t1i2p
+z2t1érz
+zté2sz
+z2t1észh
+z2t1észn
+zté2tét
+z2t1étk
+zt1é2ves.
+zt1évt
+zt1fl
+zt1fr
+zt1gr
+z1t2hen
+ztia2g
+zt1i2den
+z2t1idé
+z2tidi
+z2t1ifj
+z2t1i2gé
+z2t1i2kon
+z2t1ille
+z2timá
+z2t1imp
+z2t1ind
+z2tinfe
+z2t1info
+z2t1ing.
+z2t1ingá
+z2t1ingb
+z2t1inge
+z2t1ingé
+z2t1ingg
+z2tingu
+z2t1inte
+z2t1inté
+z2t1invá
+zti2p
+z2t1ipa
z2t1irá
-z2t1iré
+z2t1isk
+z2t1ism
+z2t1istá
+z2t1iste
+z2tital
+z2t1i2tat
+z2t1íj
z2t1í2r
-zto1g2
-zto2n1
-zto2ris
-z2torit
-zto1szk
-ztó1dr
-zt2ráj
-z1t2ré
-z2túj
-z2t1út
+zt1í2veke
+zt1kl
+zt1kr
+zt1kv
+z2toi
+z2t1o2koz
+z2t1oltó
+zto2lyag
+zt1ope
+zto2ras
+zto2r1e
+z2t1orgi
+ztorkész1
+zt1ornam
+z2torrú
+z2torvo
+z2t1oszl
+zt1osztá
+ztóá2
+ztóigaz1
+z2t1ó2ni
+ztó1p2
+ztó1sp
+ztó1tr
+zt1öko
+ztö2l
+z2t1öle
+ztön3n
+ztö2röks
+z2t1öss
+zt1ö2vez
+zt1övig
+z2t1öz
+ztőa2
+ztőe2l
+ztőé2b
+z2t1őrh
+zt1őrl
+z2t1őrs
+zt1ő2sei
+z2t1ő2sö
+zt1ősű
+zt1pl
+zt1pr
+zt1ps
+z1tranz
+zt2rádá
+z1t2rág
+z1tréf
+z1t2rén
+z1trikó
+z1tril
+z1t2rió
+z1t2rü
+zt1sl
+zt1sn
+zt1sp
+zt1st
+zt1sz
+zt1t2r
+z2t1udv
+z2t1ug
+z2t1ura
+z2t1uru
+ztus3s
+zt1u2tat
+z2t1utu
+z2t1új
+z2t1úr.
+z2t1úrb
+z2t1ú2ré
+z2t1úrh
+z2t1ú2ri
+z2t1úrk
+z2t1úrn
+z2t1ú2ro
+z2t1úrr
+z2t1úrt
+z2t1üg
+ztü2lé
+z2t1ülés
ztül1l
z2t1üt
+z2t1ü2v
+zt1ü2zem
+z2t1űr.
+z2t1ű2ri
+z2tye
1zu
zu2b1a
3zubb
zu2b1i
-zu1c2
-zu2g1ár
+zu2bu
+zu2c3s
+3zug.
+zu2gag
+zu2gap
+zu2gáru
+zu2g1ás
+3zugb
+zu2g1e2
+zu2gé
+zu2gin
+zu2git
+zu2giv
zu2gí
-z1ugr
-zu2gu
-2z1uj
+3zugo
+zu2g1or
+zu2gö
+zu2gü
+zu2gű
+3zuha
zule2
-zu2l1esi
-z1urn
-zu2só
-2zut
-z1u2ta
+zu2lel
+zu2l1enc
+zu2l1es
+zuli2ná
+zu2lú
+zulya2
+zu2ly1ag
+zu2mab
+zu2m1a2d
+zu2maj
+zu2mal
+zu2mar
+zu2m1as
+zume2
+zumegyez1
+zu2mel
+zu2m1en
+zu2mél
+zu2m1é2n
+zu2m1id
+zu2m1in
+zu2m1i2p
+zu2mí
+zumkész1
+zu2mol
+zu2mő
+zu2mur
+zu2mü
+2zund
+z1undo
+zu2ne
+zu2n1é
+2zuni
+zu2n1ö2
+zu2ral
+zu2ram
+zurat2
+2z1urn
+zu2rú
+zu2sad
+zus1aka
+zu2sal
+zusa2n
+zus1any
+zu2sas
+zu2s1ág
+zu2s1e2
+zu2s1érté
+zu2sis
+zu2s1í
+zuskész1
+zu2s1ol
+zu2s1ó2
+zu2ső
+zuss2
+zussz2
+zus3sze
+zus3szi
+zust2
+zus1tr
+zu2s1ü2
+zu2sz1i2k
+zu2szon
+zu2s3zó
+2z1u2ta
z1u2tá
-z1u2tó
-3zuz
+2z1utc
+zu2tol
+zu2tó.
+zu2tób
+zu2tói
+zu2tój
+zu2tón
+z1u2tu
1zú
-2zúj
-z1ú2jo
+zú1dr
+zú1fl
+3zúgá
+z1újd
+z1ú2jé
+z1ú2jí
z1újs
-2zút
+zú2r1e2
+zúré2t
+z1ú2szás
+zú2té.
+z1ú2tér
z1úth
+z1úti
+zú2ti.
+zú2tiak.
+3z2útiaka
+zú2tiakr
+zú2tib
+zú2tig
+zú2tih
+zú2tin
+zú2tiv
+z1ú2tí
z1útj
-z1ú2to
-z1úts
-3zúz
+z1útn
+z1ú2ton
+z1útró
+z1útt
+zú2tü
+z1útv
+3zúzá
+3zúzd
+3zúzó
1zü
-2z1üd
-2züg
+zü2dü
+zügy1és
+z1ügyk
+z1üldö
+z1ü2lep
+z1ü2lőseb
+z1ü2lőset
zü2ni
-zürkés1
-2züs
-2züt
+2zünn
+zü2rí
+z1ü2rü
+z1ü2te
z1ü2té
+z1ütk
z1ü2tő
-z1ü2v
-2züz
-zü2zem
+zü2ve
+zü2vö
+zü2zen
z1üzl
1zű
-zű2csi
-zű2k1a
-zű2za
-zű2zér
+zű2csa
+zű2csá
+zű2csip
+zű2cs1o
+zű2ra
+zű2rá
+zűrés3s
+zű2r1i2z
+z1űrla
+zű2ró
+zű2ru
+zű2z1a2
+zű2z1á
+zű2ze
+zűzé2r
+zű2z1ére
+zű2zo
z1ű2ző
-zz1áll
-z2zs2
+zű2zs
+zű2zú
+zva2su
+zvárosé2
+zváro2s1om
+zve2gya
+zvé2nyel
+z2vit.
+zvi2tác
+z2vitj
+zy1ak
+z1yar
+zy2be
+zy2je
+zy2ne
+zy2né
+zy2re
+zy2rő
+zy2sa
+zy2so
+zy2tő
+zy2ve
+z2z1áll
+zzá2r1ó2r
+zzát2
+zzá1tr
+zzi2n1é2
+zz2le
+zz1ly
+z2zs
+z3zsák
+z3zsám
+z3zsi
z3zsí
-zz3st} \ No newline at end of file
+z3zso} \ No newline at end of file
diff --git a/Master/texmf-dist/tex/context/patterns/lang-hu.rme b/Master/texmf-dist/tex/context/patterns/lang-hu.rme
index c4c8d760599..049dfe06a44 100644
--- a/Master/texmf-dist/tex/context/patterns/lang-hu.rme
+++ b/Master/texmf-dist/tex/context/patterns/lang-hu.rme
@@ -1,70 +1,11 @@
% generated by mtxrun --script pattern --convert
-% This file is part of hyph-utf8 package and resulted from
-% semi-manual conversions of hyphenation patterns into UTF-8 in June 2008.
+% Huhyphn - hungarian hyphenation patterns v20081106
%
-% Source: huhyphn.tex (2003-11-07)
-% Author: NAGY Bence <huhyphn at tipogral.hu>
-%
-% The above mentioned file should become obsolete,
-% and the author of the original file should preferaby modify this file instead.
-%
-% Modificatios were needed in order to support native UTF-8 engines,
-% but functionality (hopefully) didn't change in any way, at least not intentionally.
-% This file is no longer stand-alone; at least for 8-bit engines
-% you probably want to use loadhyph-foo.tex (which will load this file) instead.
-%
-% Modifications were done by Jonathan Kew, Mojca Miklavec & Arthur Reutenauer
-% with help & support from:
-% - Karl Berry, who gave us free hands and all resources
-% - Taco Hoekwater, with useful macros
-% - Hans Hagen, who did the unicodifisation of patterns already long before
-% and helped with testing, suggestions and bug reports
-% - Norbert Preining, who tested & integrated patterns into TeX Live
-%
-% However, the "copyright/copyleft" owner of patterns remains the original author.
-%
-% The copyright statement of this file is thus:
-%
-% Do with this file whatever needs to be done in future for the sake of
-% "a better world" as long as you respect the copyright of original file.
-% If you're the original author of patterns or taking over a new revolution,
-% plese remove all of the TUG comments & credits that we added here -
-% you are the Queen / the King, we are only the servants.
-%
-% If you want to change this file, rather than uploading directly to CTAN,
-% we would be grateful if you could send it to us (http://tug.org/tex-hyphen)
-% or ask for credentials for SVN repository and commit it yourself;
-% we will then upload the whole "package" to CTAN.
-%
-% Before a new "pattern-revolution" starts,
-% please try to follow some guidelines if possible:
-%
-% - \lccode is *forbidden*, and I really mean it
-% - all the patterns should be in UTF-8
-% - the only "allowed" TeX commands in this file are: \patterns, \hyphenation,
-% and if you really cannot do without, also \input and \message
-% - in particular, please no \catcode or \lccode changes,
-% they belong to loadhyph-foo.tex,
-% and no \lefthyphenmin and \righthyphenmin,
-% they have no influence here and belong elsewhere
-% - \begingroup and/or \endinput is not needed
-% - feel free to do whatever you want inside comments
-%
-% We know that TeX is extremely powerful, but give a stupid parser
-% at least a chance to read your patterns.
-%
-% For more unformation see
-%
-% http://tug.org/tex-hyphen
-%
-%------------------------------------------------------------------------------
-%
-% Huhyphn - hungarian hyphenation patterns v20031107
-%
-% Copyright (C) 2003, NAGY Bence <huhyphn@tipogral.hu>
+% Copyright (C) 2003-2008, Bence Nagy <nagybence@tipogral.hu>
% This file can be distributed under the terms of the
% GNU General Public License version 2.
+%
+% Encoding: UTF8
%
-% \message{Huhyphn - hungarian hyphenation patterns v20031107}
-% \ No newline at end of file
+\message{Huhyphn - hungarian hyphenation patterns v20081106} \ No newline at end of file
diff --git a/Master/texmf-dist/tex/context/patterns/lang-il.pat b/Master/texmf-dist/tex/context/patterns/lang-il.pat
deleted file mode 100644
index 5d809e3b717..00000000000
--- a/Master/texmf-dist/tex/context/patterns/lang-il.pat
+++ /dev/null
@@ -1,1905 +0,0 @@
-% generated by mtxrun --script pattern --convert
-
-% for comment and copyright, see ./lang-il.rme
-
-% used: а б в г д е ж з и й к л м н о п р с т у ф х ц ч ш щ ь ю я є і ї ґ
-
-\patterns{
-2а1
-а3а
-а3е
-а3і
-а3о
-а3у
-а3ю
-а3я
-а3є
-а3ї
-2е1
-е3а
-е3е
-е3і
-е3о
-е3у
-е3ю
-е3я
-е3є
-е3ї
-2и1
-и3а
-и3е
-и3і
-и3о
-и3у
-и3ю
-и3я
-и3є
-и3ї
-2і1
-і3а
-і3е
-і3и
-і3о
-і3у
-і3ю
-і3я
-і3є
-і3ї
-2о1
-о3а
-о3е
-о3і
-о3о
-о3у
-о3ю
-о3я
-о3є
-о3ї
-2у1
-у3а
-у3е
-у3і
-у3о
-у3у
-у3ю
-у3я
-у3є
-у3ї
-2ю1
-ю3а
-ю3е
-ю3і
-ю3о
-ю3у
-ю3ю
-ю3я
-ю3є
-ю3ї
-2я1
-я3а
-я3е
-я3о
-я3у
-я3ю
-я3я
-я3є
-я3ї
-2є1
-є3у
-є3ю
-є3є
-є3ї
-2ї1
-ї3е
-ї3о
-ї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т
-2м1ф
-2м1х
-2м1ц
-2м1ч
-2м1ш
-2м1щ
-2н1б
-2н1в
-2н1г
-2н1д
-2н1ж
-2н1з
-2н1к
-2н1л
-2н1м
-2н1п
-2н1р
-2н1с
-2н1т
-2н1ф
-2н1х
-2н1ц
-2н1ч
-2н1ш
-2н1щ
-2п1б
-2п1д
-2п1з
-2р1б
-2р1в
-2р1г
-2р1ґ
-2р1д
-2р1ж
-2р1з
-2р1к
-2р1л
-2р1м
-2р1н
-2р1п
-2р1с
-2р1т
-2р1ф
-2р1х
-2р1ц
-2р1ч
-2р1ш
-2р1щ
-2р1й
-2с1б
-2с1г
-2с1д
-2т1б
-2т1г
-2т1д
-2т1ж
-2т1з
-2ф1б
-2ф1г
-2ф1з
-2х1г
-2х1д
-2ц1б
-2ц1г
-2ц1д
-2ц1з
-2ч1б
-2ч1д
-2ч1ж
-2ш1б
-2ш1г
-2й1б
-2й1в
-2й1г
-2й1д
-2й1ж
-2й1з
-2й1к
-2й1л
-2й1м
-2й1н
-2й1п
-2й1р
-2й1с
-2й1т
-2й1ф
-2й1х
-2й1ц
-2й1ч
-2й1ш
-2й1щ
-2дь1к
-2дь1с
-2дь1т
-2дь1ц
-2зь1к
-2зь1с
-2зь1т
-2ль1б
-2ль1в
-2ль1г
-2ль1д
-2ль1ж
-2ль1з
-2ль1к
-2ль1м
-2ль1н
-2ль1п
-2ль1р
-2ль1с
-2ль1т
-2ль1ф
-2ль1х
-2ль1ц
-2ль1ч
-2ль1ш
-2ль1щ
-2ль1й
-2нь1б
-2нь1г
-2нь1з
-2нь1к
-2нь1л
-2нь1м
-2нь1с
-2нь1т
-2нь1х
-2нь1ц
-2нь1ч
-2нь1ш
-2нь1й
-2рь1к
-2рь1ц
-2сь1б
-2сь1д
-2ть1б
-2к1сп
-2к1ст
-2к1ськ
-2п1сп
-2п1ст
-2п1ськ
-2с1пк
-2с1пп
-2с1пс
-2с1пт
-2с1пх
-2с1пч
-2с1ськ
-2с1тк
-2с1тп
-2с1тс
-2с1тсь
-2с1тт
-2с1тф
-2с1тц
-2с1шт
-2сь1кк
-2сь1кс
-2сь1кт
-2т1ск
-2т1сп
-2т1ст
-2т1ськ
-2т1шк
-2ф1сп
-2ф1ст
-2ф1ськ
-2ф1шт
-2х1ст
-2х1ськ
-2ц1ст
-2ц1шк
-2ш1тк
-2ш1тсь
-2б1б
-2в1в
-2г1г
-2ґ1ґ
-2д1д
-2ж1ж
-2з1з
-2к1к
-2л1л
-2м1м
-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ння
-3ття
-3ттю
-3лля
-3ллє
-3ллю
-3ддя
-д4ж
-д4з
-а2й
-е2й
-и2й
-і2й
-о2й
-у2й
-ю2й
-я2й
-є2й
-ї2й
-3й6о
-ь6о
-6ь
-.бд6
-.бр6
-.вб6
-.вг6
-.вд6
-.вж6
-.вз6
-.вз6д6
-.вк6
-.вл6
-.вм6
-.вп6
-.вп6х6
-.вс6
-.вс6т6
-.вт6
-.вш6к6
-.дж6
-.дз6
-.дл6
-.дс6
-.зб6
-.зг6
-.зд6
-.зд6з6
-.зл6
-.зс6
-.зс6к6
-.зс6т6
-.зч6
-.зш6
-.зш6к6
-.зґ6
-.йш6
-.кл6
-.кп6
-.кс6
-.кх6
-.кш6
-.лк6с6
-.лс6
-.ль6
-.мс6
-.мф6
-.нб6
-.пр6
-.пс6
-.пх6
-.рт6
-.ск6
-.ск6л6
-.сл6
-.сп6
-.сп6л6
-.сп6х6
-.ст6
-.сх6
-.сх6л6
-.тк6
-.тр6
-.тх6
-.ть6
-.фл6
-.хл6
-.ць6
-.чх6
-.шк6
-.шл6
-.шп6
-.шт6
-6бв.
-6бз.
-6бй.
-6бл.
-6б6ль.
-6бн.
-6бр.
-6бс.
-6б6ст.
-6б6с6тв.
-6б6с6тр.
-6б6с6ьк.
-6б6ць.
-6вб.
-6вв.
-6вд.
-6в6др.
-6в6дь.
-6вж.
-6вз.
-6в6зь.
-6вй.
-6вк.
-6вл.
-6в6ль.
-6вм.
-6вн.
-6вп.
-6вр.
-6вс.
-6в6с6тв.
-6в6с6ть.
-6в6сь.
-6в6с6ьк.
-6вт.
-6вх.
-6в6ць.
-6вч.
-6вш.
-6вщ.
-6гв.
-6гг.
-6гд.
-6гл.
-6г6ль.
-6гм.
-6гн.
-6гр.
-6гс.
-6г6с6тв.
-6г6сь.
-6гт.
-6дж.
-6дз.
-6д6зь.
-6дл.
-6дм.
-6дн.
-6др.
-6д6с6тв.
-6д6с6ьк.
-6дт.
-6дь.
-6д6ь6сь.
-6жб.
-6жв.
-6ж6дь.
-6ж6сь.
-6зв.
-6зг.
-6зд.
-6з6дв.
-6з6дн.
-6з6дь.
-6зк.
-6зл.
-6зм.
-6зн.
-6з6нь.
-6зр.
-6з6сь.
-6зь.
-6з6ьб.
-6з6ьк.
-6йб.
-6йв.
-6йг.
-6йд.
-6йз.
-6йк.
-6й6кл.
-6йл.
-6й6ль.
-6йм.
-6й6мс.
-6йн.
-6й6нс.
-6йп.
-6йр.
-6йс.
-6й6ст.
-6й6с6тв.
-6й6с6тр.
-6й6сь.
-6й6с6ьк.
-6йт.
-6й6тс.
-6йф.
-6йх.
-6йц.
-6йч.
-6йш.
-6кв.
-6кк.
-6кл.
-6к6ль.
-6кр.
-6кс.
-6к6ст.
-6к6сь.
-6кт.
-6к6тр.
-6кх.
-6кш.
-6лб.
-6лг.
-6лд.
-6лк.
-6лл.
-6л6ль.
-6лм.
-6л6мс.
-6лн.
-6лп.
-6лс.
-6лт.
-6л6хв.
-6ль.
-6л6ьб.
-6л6ьв.
-6л6ьг.
-6л6ьд.
-6л6ь6дс.
-6л6ьз.
-6л6ьк.
-6л6ьм.
-6л6ьн.
-6л6ьп.
-6л6ьс.
-6л6ь6ств.
-6л6ь6сь.
-6л6ь6ськ.
-6л6ьт.
-6л6ь6тр.
-6л6ьф.
-6л6ьх.
-6л6ьц.
-6л6ьч.
-6л6ьш.
-6л6ьщ.
-6мб.
-6м6б6ль.
-6м6бр.
-6мг.
-6мж.
-6мк.
-6мл.
-6м6ль.
-6мм.
-6мн.
-6мп.
-6мр.
-6мс.
-6м6с6тв.
-6м6сь.
-6м6с6ьк.
-6мт.
-6мф.
-6мх.
-6мш.
-6нв.
-6нг.
-6н6гл.
-6н6г6ль.
-6н6гр.
-6н6гс.
-6нд.
-6н6дж.
-6н6дз.
-6н6дп.
-6н6др.
-6нж.
-6нз.
-6нк.
-6н6кс.
-6н6кт.
-6нм.
-6нн.
-6нр.
-6нс.
-6н6ск.
-6н6ст.
-6н6с6тв.
-6н6с6тр.
-6н6с6ьк.
-6н6с6ькй.
-6нт.
-6н6тк.
-6н6тр.
-6н6т6ств.
-6н6ть.
-6нф.
-6нх.
-6нц.
-6н6ць.
-6нч.
-6нш.
-6нь.
-6н6ьб.
-6н6ьг.
-6н6ьк.
-6н6ь6сь.
-6пд.
-6пл.
-6пр.
-6пс.
-6п6с6тв.
-6п6сь.
-6пт.
-6п6тр.
-6пф.
-6пц.
-6рб.
-6рв.
-6рг.
-6рд.
-6р6дв.
-6р6дж.
-6р6дь.
-6рж.
-6рз.
-6р6зн.
-6р6зь.
-6рк.
-6р6кс.
-6р6кт.
-6рл.
-6р6ль.
-6р6л6ьз.
-6рм.
-6рн.
-6р6нс.
-6р6н6ст.
-6р6нь.
-6рп.
-6рр.
-6рс.
-6р6ср.
-6р6ст.
-6р6с6тв.
-6р6с6ть.
-6р6сь.
-6р6с6ьк.
-6рт.
-6р6тв.
-6р6тр.
-6р6ть.
-6рф.
-6рх.
-6рц.
-6р6ць.
-6рч.
-6рш.
-6рщ.
-6р6щ6сь.
-6рь.
-6с6дп.
-6с6д6рп.
-6ск.
-6сл.
-6с6ль.
-6см.
-6сн.
-6сп.
-6сс.
-6ст.
-6с6тв.
-6с6тй.
-6с6тм.
-6с6тр.
-6с6т6рь.
-6с6ть.
-6с6ць.
-6сь.
-6с6ьб.
-6с6ьк.
-6с6ьм.
-6тв.
-6т6вт.
-6т6зт.
-6тл.
-6т6ль.
-6тм.
-6т6мр.
-6тр.
-6тс.
-6т6с6тв.
-6т6с6ьк.
-6тт.
-6тц.
-6тч.
-6ть.
-6т6ь6сь.
-6фм.
-6фр.
-6ф6с6тв.
-6фт.
-6ф6ть.
-6фф.
-6фь.
-6хв.
-6хм.
-6хн.
-6хр.
-6хт.
-6хш.
-6ц6тв.
-6ць.
-6ц6ьк.
-6чб.
-6чм.
-6чн.
-6чт.
-6шв.
-6ш6ль.
-6шм.
-6шн.
-6ш6нл.
-6ш6сь.
-6шт.
-6ш6тв.
-6щ6сь.
-.бе4з3
-.безу4
-.бе5з4о3д
-.без5о4соб
-.безві4д3
-.без3ро4з3
-виї4
-.ві5д4ом
-.ві5д4озв
-.ві5д4ун
-віду4ч
-.ві5д4а
-.ві5д4ер
-.ві5д4і
-.ві4д3
-.мі4ж3
-безві4д3
-ові4д3
-ді4єві4д3
-за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ч
-.пере3
-.пона4д3
-.пона5д4і
-.пона5д4и
-.пона5д4я
-3п4ре
-3п4ри
-приї4
-3п4ро
-3п4рі
-.пі5д4о
-.пі5д4і
-.пі4д3
-.пі5д4е
-.пі5д4и
-.пі5д4у
-.пі4в3
-.спі4в3
-.напі4в3
-.ро5з4і
-.ро5з4е
-ро5з4йом
-.ро5з4а
-.ро4з3
-.чере4з3
-оо4б
-ооб3м
-ооб3ро
-за5о4р
-до5о4р
-по5о4р
-пере5о4р
-пі6д5о4р
-бе4з5і4дей
-за3ю4ш
-за3я4ло
-коу4роч
-зу4роч
-наду4роч
-позау4роч
-поу4роч
-приу4роч
-на4й3у4бог
-нао4р
-прио4р
-неу4к
-3в4б4лаг
-3в4к4лад
-3в4п4лив
-3в4п4равн
-3в4р4одлив
-3в4т4рут
-3в4т4руч
-3з4б4рой
-3з4б4рою
-3з4б4роє
-3й4ш4л
-3м4к4не
-3м4к4ну
-3м4к4ні
-3п4с4ков
-3с4к4лад
-3с4к4ле
-3с4к4лит
-3с4к4ло
-3с4к4рипт
-3с4п4лав
-3с4п4лат
-3с4п4лач
-3с4п4рав
-3с4п4ритн
-3с4п4рият
-3с4п4ромо
-3с4т4вор
-3с4т4ражд
-3с4т4рах
-3с4т4риб
-3с4т4риж
-3с4т4рой
-3с4т4рок
-3с4т4ром
-3с4т4роф
-3с4т4роч
-3с4т4рою
-3с4т4роя
-3с4т4роє
-3с4т4рої
-3с4т4рукт
-3с4т4рукц
-3с4т4рій
-3с4т4ріл
-3с4т4річ
-3т4к4нен
-3т4ь4мар
-3т4ь4мяні
-3у4п4рав
-3блаж
-3ближ
-3близ
-3блиск
-3блок
-3блоці
-3бран
-3брати
-3брест
-3бризк
-3британ
-3бруд
-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глиб
-3глин
-3глоб
-3глуз
-3глуш
-3гляд
-3глян
-3гнан
-3гнил
-3гноз
-3гнучк
-3грав
-3град
-3грай
-3грам
-3гран
-3грати
-3граф
-3граш
-3граю
-3грає
-3грес
-3грець
-3гроб
-3грож
-3гроз
-3громад
-3груван
-3грунт
-3груп
-3грів
-3гріт
-3гріш
-3г4ідро
-3д4ан
-3д4бав
-3д4бал
-3д4бан
-3д4бат
-3д4бає
-3двиг
-3двою
-3двоє
-3двій
-3двір
-3двічі
-3драж
-3дром
-3друж
-3друк
-3дряп
-3дріб
-3дріма
-3жвав
-3жміть
-3жріть
-3з4бага
-3з4баланс
-3з4був
-3з4бут
-3зваж
-3зван
-3звед
-3звел
-3звест
-3звись
-3звич
-3звищ
-3зворуш
-3звук
-3звуч
-3звіт
-3з4год
-3з4дат
-3з4довж
-3з4доров
-3з4дійсн
-3змін
-3зйом
-3зміш
-3знав
-3знай
-3знак
-3знал
-3знан
-3знат
-3знаход
-3знач
-3знаю
-3знає
-3зниж
-3знім
-3зрозум
-3зрюв
-3зрів
-3зріл
-3зрін
-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с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с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а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е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о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я4зик
-3я4кіс
-3я4рус
-3я4скрав
-3є4д3н
-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хат
-.заї4к
-.заї4ц
-.заї4ч
-.наї4д
-аві4а
-авої4д
-ае4тил
-альбі5он
-ахої4д
-ауді4о
-ай4с3берг
-бактері4о
-ба4с3енер
-ба4с3антра
-.бе5зе.
-бей4сбол
-бе5кон
-бйор4нс
-бі4о3
-бо4г3дан
-бран4д
-брі4дж3порт
-без5і4мен
-бо4є3гол
-бо4є3гот
-бо4є3зап
-бо4є3здат
-бо4є3комп
-бо4є3пост
-бо4є3прип
-бори4с5п
-4в3антрац
-вер4х3н
-ви3й4д
-вина3й4д
-ви3й4т
-вина3й4т
-від7зна
-ві5д4ен
-ві5д4е4о
-ві5д4ом
-від5о4браж
-від5о4браз
-во4с5ко
-водо5с4ток
-водо5з4бір
-воль4т3метр
-воль4т3ампер
-ге2ть3ман
-ге4о
-го4с4п5роз
-гі4д5ро5мет
-4д7зем
-дер4ж5а4том
-дер4ж5а4дм
-дер4ж5бюдж
-дер4ж5вид
-дер4ж5дум
-дер4ж5замов
-дер4ж5ком
-дер4ж5нафт
-дер4ж5реєс
-дер4ж3без
-дер4ж3резерв
-дер4ж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функц
-ді3й4т
-ді3й4д
-д4ні3п4р
-.дої4в
-.дої4л
-.дої5ль
-дої4д
-дої4м
-дої4х
-дої4ж
-дої4ст
-до3з4вол
-до3з4віл
-дорого5в4каз
-еу4стр
-ео4сві
-енерго3з4береж
-енерго3з4беріг
-ек2с1к
-ек2с1п
-ек2с1т
-ек2с1ц
-єв4р3атом
-єпі4с5коп
-єпи4с5коп
-за4п3част
-заї4д
-заї4ж
-заї4з
-заї4л
-заї4м
-заї4х
-зе4кономити
-зна3й4д
-зна3й4т
-зо4ка
-зо4ке
-зо4ки
-зо4ку
-зо4кі
-игої4д
-ий4ти
-іе4тил
-і4л3е4тил
-ій4ти
-інфор4м3аген
-йо4сві
-каза4х3стан
-квої4д
-корої4д
-квар4т3плат
-киї4венер
-кон4трре
-кон4тр3арг
-жко4м5а4том
-кому4ненерг
-мі4н5е4ко
-мі4н5е4нер
-мо4к5рий
-на3б4лиз
-на3в4ряд
-на3в4ча
-на3з4в
-на4д7з4в
-наї4вс
-наї4вш
-наї4ж
-наї4з
-наї4л
-наї4м
-наї4с
-наї4х
-на4й3а
-на4й3е
-на4й3обереж
-на4й7о4бер
-на4й7о4гид
-на4й7о4гол
-на4й7о4гряд
-на4й7о4пук
-на4й7о4хай
-на4й3масл
-на4й3спри
-на4й3якіс
-на3в4чен
-на3в4чіть
-не3в4том
-не3д4бан
-на3д4бан
-не3з4вич
-не3з4важ
-нео4пал
-недої4
-неї4ст
-на5п4лив
-ні4т5рат
-оної4д
-оо4пал
-ео4пал
-обі3д4ран
-обі3й4д
-обі3й4т
-об5у4мов
-онаї4д
-оо4сві
-оо4к
-оу4стр
-оа4том
-об4лдер4ж
-об4л3а4дмін
-переї4д
-переї4ж
-переї4з
-переї4л
-переї4с
-переї4х
-пере5п4лив
-пере3й4д
-пре4й4с
-пере3й4т
-перег4ній
-перед5о4бід
-пере3в4том
-пере4д5см
-перед5у4мов
-під5о4дин
-пів5о4с4тр
-пі5в4ень
-по3б4лизу
-по3в4тор
-поч4не
-поч4ни
-поч4ну
-поя4в
-по3в4чен
-по3в4чіть
-по3д4роб
-по3д4раз
-по3д4во
-по5ж4ніть
-по5з4бав
-.пої4
-пої4д
-прої4
-пої4зд
-по4с4т5радян
-по4с4т5кому
-по4с4т3декр
-по4с4т3контра
-по4с4т3менопауз
-по4с4тприват
-по4с4т3раді
-по4с4т5соці
-пос4т3кап
-пос4т3ком
-пос4т3нат
-пос4т3проц
-пос4т3соц
-пос4т3фікс
-при3й4т
-про3с4тирад
-про4ф3с
-полі4т5екон
-пор4т3н
-пор4т3рет
-пор4т3фел
-при3й4д
-при4нцип
-про4ект3н
-про3б4лем
-про4м3май
-пр4о5плат
-раді4о
-рай3в4но
-ро4з5д4во
-ро4з5мінний
-роз5у4чен
-роз5і4мен
-роз5вант
-роз5вин
-роз5вит
-ро4з5діл
-ро4з5гор
-ро4з5вер
-ро4з5чеп
-руко5с4тиск
-ро5з4ум
-ро4з3гром
-ро4з3лив
-рмої4д
-сан4к4т3
-сеї4д
-серцеї4д
-спе4ц3кур
-спе4ц3мон
-спе4цпр
-спе4ц3с
-спор4т3вир
-спор4т3зал
-спор4т3ком
-спор4т3клуб
-спор4т3май
-спор4т4с3ме
-сор4тн
-3с4промож
-сь4квуг
-стат5упр
-тор4г3пред
-тран4с3
-тур4к3мен
-цук3ро
-у4к4р
-укр3а4вт
-укр3а4гр
-укр3е4кс
-укр3і4н4банк
-убої4д
-чорно3б4рив
-цен4т4р3енерг
-ясої4д
-ви3у4ч
-за3у4ч
-на3у4ч
-недо3у4ч
-не3у4ч
-під3у4ч
-пед3у4чи
-пере3у4ч
-само3у4ч
-вия4в
-зая4в
-ная4в
-уя4в
-во4євод
-во4єнач
-сво4єчас
-сво4єкорис
-сво4єрід
-хво4є3г4риз
-гелі4о
-ді4о
-еті4о
-мі4о
-і4он
-полі4о
-соці4о
-фізі4о
-хімі4о
-гоме4о
-ді4алог
-ді4оген
-дея4к
-оо4динок
-ао4пік
-ао4ха
-ео4ха
-зо6о
-ка5нал
-оі4зол
-міжу4соб
-мете4о
-абия4к
-нія4к
-вия4сн
-най3я4сн
-нея4сн
-поя4сн
-проя4сн
-ро5з4ора.
-ро5з4о5рам
-ро5з4орах
-ро5з4ори
-ро5з4оро
-ро5з4ору
-ро5з4оря
-ро5з4орю
-ро5з4орі
-ро6з5о4ри.
-розо4ра
-розо4ре
-розо4реш
-розо4рн
-напоу4м
-неа4би
-ео4цін
-оо4цін
-доу4к
-доу4м
-ео4бур
-ео4голош
-ео4зор
-бальне4о
-не4оліт
-не4омальт
-не4оклас
-не4окомун
-не4оландш
-не4олог
-не4олібер
-не4онац
-не4офіт
-нею4н
-нея4к
-нея4рок
-но4к3а4ут
-пі5в4оні
-піво4с
-пале4о
-па4н3о4тець
-.пе4ом.
-д3у4сім
-п4о5бере
-ао4хот
-ое4ко
-ео4хот
-ео4щад
-ао4щад
-оо4чищ
-поя4с
-те4одоліт
-те4олог
-те4ософ
-оо4біг
-оу4сун
-оу4ком
-пів3о4вал
-а3у4дар
-о3у4дар
-з3у4дар
-в3у4дар
-контр3у4дар
-о3о4кисл
-и3о4кисл
-ень7о4кисл
-е3о4кисл
-х3о4кисл
-и3і4стор
-о3і4стор
-і3і4стор
-а3і4стор
-я3і4стор
-е3і4стор
-наді4стор
-най3і4стор
-пів3і4стор
-перед3і4стор
-пост3і4стор
-ар4т3афіш
-ар4т3взвод
-ар4т3десант
-ар4т3кафе
-ар4т3майс
-ар4т3медіа
-ар4т3мейс
-ар4т3мін
-ар4т3о4бстр
-ар4т3о4дин
-ар4т3о4збр
-ар4т3під
-ар4т3рин
-ар4т3у4стан
-ар4т3факт
-ар4т3хім
-ар4т3центр
-наді4стот
-найі4стот
-еі4стот
-оі4стот
-ау4т3екол
-оо4чист
-з3а4кт
-оа4кт
-еа4кт
-гіпер3а4кт
-найа4кт
-піва4кт
-ао4браз
-ео4браз
-оо4браз
-граф3о4браз
-най3о4браз
-супер3о4браз
-ар4т3мейст
-баге4р3мейст
-бале4т3мейст
-бран4д3мейст
-ва4ль4д3мейст
-ве4ль4т3мейст
-го4ф3мейст
-гро4с3мейст
-декре4т3мейст
-до4к3мейст
-капе4ль3мейст
-кварти4р3мейст
-конце4р4т3мейст
-кра4н3мейст
-полі4ц3мейст
-по4ш4т3мейст
-фо4р4с4т3мейст
-хо4р3мейст
-шапі4т3мейст
-шта4л3мейст
-єге4р3мейст
-иа4варі
-яа4варі
-оа4варі
-еа4варі
-беза4варі
-між3а4варі
-над3а4варі
-пост3а4варі
-напів3а4варі
-перед3а4варі
-супер3а4варі
-аа4дрес
-еа4дрес
-оа4дрес
-іа4дрес
-без3а4дрес
-ае4фект
-ее4фект
-ое4фект
-най3е4фект
-супер3е4фект
-ое4місі
-ие4місі
-яе4місі
-ее4місі
-безе4місі
-гіпер3е4місі
-еу4бог
-й3у4бог
-ий4ня
-зай4ня
-здій4ня
-най4ня
-обій4ня
-перей4ня
-підій4ня
-прий4м
-пій4м
-дій4ма
-вий4м
-най4ма
-зай4м
-д4о3й4м
-обой4м
-прой4м
-обій4м
-перей4м
-безу4гл
-безу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наліз
-оу4год
-ау4год
-еу4год
-пів3у4год
-роз3у4год
-гос4п3у4год
-ео4пис
-оо4пис
-ао4пис
-бо4р4т3мех
-бо4р4т3о4пер
-бо4р4т3про
-бо4р4т3рад
-бо4р4т3і4нж
-оа4каці
-оу4с
-оо4держ
-оа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ча
-.ом4рі
-е3м4рій
-.ви3м4р
-.віді3м4р
-.зав3м4р
-.за3м4р
-.зі3м4р
-.на3м4р
-.пере3м4р
-.по3м4р
-.при3м4р
-.роз3м4р
-.ум4ри
-.ум4рі
-.ум4ру
-.ум4ре
-во4станнє
-най3о4станн
-перед3о4станн
-ие4стет
-ое4стет
-ее4стет
-й3е4стет
-пан3е4стет
-пар3е4стет
-оо4ктан
-іо4ктан
-оо4плачув
-ео4плачув
-перед3о4пла
-виу4ди
-о3в4каз
-е3в4каз} \ No newline at end of file
diff --git a/Master/texmf-dist/tex/context/patterns/lang-is.hyp b/Master/texmf-dist/tex/context/patterns/lang-is.hyp
index 48c26abf16d..5b7b550fb3e 100644
--- a/Master/texmf-dist/tex/context/patterns/lang-is.hyp
+++ b/Master/texmf-dist/tex/context/patterns/lang-is.hyp
@@ -1,30 +1,8 @@
-% context hyphenation file, see lang-all.xml for original comment
+% generated by mtxrun --script pattern --convert
-% source of data: ishyph.tex
+% for comment and copyright, see e:/tmp/patterns/lang-is.rme
-% begin description data
-
-% <!-- copied from lang-all.xml
-%
-% <?xml version='1.0' standalone='yes'?>
-%
-% <description language='is'>
-% <sourcefile>dehyphn.tex</sourcefile>
-% <title>Plain TeX hyphenation patterns for the Icelandic language</title>
-% <remarks>[NOT TO BE CHANGED IN ANY WAY!]</remarks>
-% <copyright>
-% <year>1987</year>
-% <owner>Jorgen Pind</owner>
-% </copyright>
-% </description>
-%
-% end of copy -->
-
-% end description data
-
-% begin hyphenation data
-
-\hyphenation {}
-
-% end hyphenation data
+% used:
+\hyphenation{
+} \ No newline at end of file
diff --git a/Master/texmf-dist/tex/context/patterns/lang-is.pat b/Master/texmf-dist/tex/context/patterns/lang-is.pat
index d0088ed4c8f..4069fa0edc0 100644
--- a/Master/texmf-dist/tex/context/patterns/lang-is.pat
+++ b/Master/texmf-dist/tex/context/patterns/lang-is.pat
@@ -1,30 +1,4195 @@
-% context pattern file, see lang-all.xml for original comment
+% generated by mtxrun --script pattern --convert
-% source of data: ishyph.tex
+% for comment and copyright, see e:/tmp/patterns/lang-is.rme
-% begin description data
-
-% <!-- copied from lang-all.xml
-%
-% <?xml version='1.0' standalone='yes'?>
-%
-% <description language='is'>
-% <sourcefile>dehyphn.tex</sourcefile>
-% <title>Plain TeX hyphenation patterns for the Icelandic language</title>
-% <remarks>[NOT TO BE CHANGED IN ANY WAY!]</remarks>
-% <copyright>
-% <year>1987</year>
-% <owner>Jorgen Pind</owner>
-% </copyright>
-% </description>
-%
-% end of copy -->
-
-% end description data
-
-% begin pattern data
-
-\patterns {}
-
-% end pattern data
+% used: a b c d e f g h i j k l m n o p q r s t u v w x y z á æ é í ð ó ö ú ý þ
+\patterns{
+.að3
+.aða4
+.aðk2
+.aðl4a
+.af3n
+.af3re
+.afr3í
+.af1s4
+.agn5ú
+.al3e
+.al4l
+.am4s
+.an3k
+.ann4e
+.ar2
+.ar3a4b5
+.arth5
+.asp3
+.aum5a
+.ám4
+.án4a
+.ba4
+.da4
+.dam5a
+.dav3
+.dr4
+.ds4
+.du4
+.dust5
+.ed5ik
+.eftir5
+.eigin5g
+.eink4
+.ekt4
+.er4m
+.eyf2
+.fa4
+.fi4
+.fjár3
+.fl4
+.fla4
+.fr4
+.frá1
+.ga2
+.gar4
+.gas5l
+.gd4
+.gem5
+.gja2
+.gl2
+.gr4
+.gu4
+.her5sk
+.il4
+.ingj5
+.is4m
+.ís1l
+.ja2
+.jar4
+.ka4
+.kal5e
+.kam5e
+.kapí3
+.kart5
+.kast3
+.kn4
+.kr4
+.kur4
+.la4
+.lag5e
+.leik5sv
+.líb5
+.lu4
+.ma2
+.maj5
+.mak5r
+.mi4
+.mj4
+.mu4
+.mynst4
+.na2
+.ní5f
+.ný5f
+.ol4íu.
+.óa4
+.óð5al
+.óf4
+.óg2
+.ók4
+.óm4i
+.ós2
+.pa4
+.pl4
+.ra2
+.ram4
+.rí4
+.róð4
+.rúm3
+.saman5
+.sk4
+.ski4
+.skj4
+.skr4
+.sl2
+.sm4
+.smá3l
+.sn4
+.snar5a
+.sp4
+.spr4
+.st4
+.sta2
+.ta4
+.ti2
+.til3
+.tí5f
+.tr4
+.tu2
+.tví1
+.ung3l
+.unn5usta
+.úr1
+.út1
+.út5s
+.vegg5s
+.vist3
+.yfir3
+.ævi3s
+.öfl3
+.ögr5
+.ör3s
+.öt3u
+2a3a4
+a4ab
+a4ad
+2a1á2
+2a1b
+ab4a
+3abís
+a5by
+abæk4l
+4ac
+2a1d4
+a5dó
+a4du
+1að
+4aðað
+að3al
+að3ar
+2aðfa
+4aðfö
+að3g
+að3i
+2aðl
+að4li
+4að2m
+2aðsh
+3aðu.
+2aðv
+2a1e
+a5ei
+a4es
+2af
+af3ald
+af3arn
+a3fá
+af4fr
+af3g
+a1fj
+a3fló
+a1flu
+af5ork
+a1fr
+af3ré
+afr4u
+a5fræ
+4afsd
+af1sk
+4afsso
+af2u
+a1ful
+a1fun
+3afurð
+2ag
+a3gau
+ag5ál
+ag5is
+a5gj
+agn4ara
+ag2ne
+ag5ot
+a1gr
+ag4ra
+ags4ið
+ag4sp
+ag4stj
+ag4ul
+ag3æð
+4a1h
+4ai
+a3ið
+a4in
+aí4h
+2aj
+a3jö
+2ak
+akaup4s
+a5ká
+a1ke
+a5kinnin
+a5kistu
+a1kj
+ak5rei
+aks4l
+4akss
+ak3u
+a3kv
+a5ky
+a5ký
+a3kö
+2al
+a1lag
+4aland
+a5landið
+a5landinu
+alas4
+alá4
+a4lem
+al3er
+al1f
+al1g
+5alge
+3alh
+alis4
+al4ín
+al3kj
+alk5s
+al3k2u
+al4lí
+all2s
+allst4
+al4lý
+4almað
+al5mann
+al5m2i
+a3log
+a5lok
+al5op
+a5lóð
+al4sæt
+al5up
+al5ú
+al3v4
+a3ly
+a1læ
+a1lö
+2am
+am3ang
+a3mann
+am3ari
+am3ars
+am3a4s
+am3dr
+a3mí
+am3k
+am2m
+amm4is
+a1mó
+am3se
+ams2i
+am1t
+1an
+3an.
+3ana.
+an3ada
+4anag
+2anal
+4anau
+2aná
+4and.
+and1e
+4an4dí
+andr4
+4andö
+4ane
+an5ei
+2ang
+an4ga
+ang1d
+an4gj
+ang5spi
+an2g3ö
+4anib
+4anið
+an5ín
+2ank
+ank5l
+ank3v
+3anm
+ann5d
+4annf
+4annh
+ann1k
+4annl
+4anns
+annsk4
+4an4o
+anst4
+an3sti
+an3tí
+3anu
+4anú
+4aný
+4anæ
+4anö
+2a3o
+2a3ó
+2ap
+ap3al
+a3per
+a3pil
+a3po
+a5pre
+ap3te
+a5p4un
+a5pör
+1ar
+3ar.
+ar3afu
+ara5kr
+ar3ang
+4arani
+ar4arp
+ar2as
+ar5ast.
+ar3au
+2ará4
+4aráð
+5ar3ák
+3ar3ár
+3ar1ás
+ar1át
+3ard2
+4ardí
+4arð.
+arðar5á
+4arði
+4arðs
+3arðu.
+2are
+3ar1ef
+4aref.
+5areig
+5arein
+a3rek
+ar3el
+ar3en
+ar5er
+a3ret
+4a1ré
+2arf
+3arfe
+3arfé
+arfs3k
+ar1fu
+ar3gj
+ar4græ
+args4
+arg3sl
+4ar5ið
+4arif
+ar3in
+ar4ind
+ar5ist.
+4a5rit
+4a1rí
+ar3j4
+4ark.
+ark4is
+ar5kj
+ar3kr4
+4arms
+ar3mú
+4arna.
+4aroð
+4arol
+4arot
+2aró
+2arp
+4arra
+arr2i
+arr4u
+ar4sá
+3arse
+ar1sk
+ar4spi
+arst4
+5arstí
+ar3su
+ar5til
+artr2
+ar5trað
+ar3u
+ar4uð
+4ar4ug
+5arum
+2ar1ú
+a5rús
+ar3v4
+ar3yf
+4arý
+2aræ
+a3ræð
+ar5æv
+4arö
+as2
+4a1sa
+as3an
+2a3sá
+4ase
+4asé
+2asi
+a5sinna
+2asj
+4a1sk
+2asl
+a3slag
+2a1sm
+4asn
+4aso
+4asó
+2asp
+aspít4
+4ass
+ass4v
+1ast
+4astað
+ast4and
+4astau
+4aste
+4asté
+4astig
+4astin
+ast4ing
+4astirð
+4a1stí
+4astj
+ast3l
+4asto
+2astó
+4astrá
+ast5ráð
+4astrí
+4a3stræ
+4aströ
+4astul
+4a3st4un
+4astú
+4a3sty
+4astæ
+4astö
+2a1su
+2a1sv
+4as4y
+2asý
+4asæ
+2asö
+2at
+at3að
+a3tak
+a3tal
+at4anv
+ata4r
+a1te
+at3ey
+3ath
+a1til
+a3tj
+3atk
+atns3
+a4tó
+atr4a
+at1re
+3at1ri
+at2sp
+a5t2un
+a1tú
+at4ve
+3atvi
+a1tö
+2a4u2
+4auð.
+auð5li
+5auðn
+aug4as
+au4m
+aum5ba
+aum5un
+aun5dr
+aup5e
+aup3l
+a5upp
+au4s
+ausa5m
+au4t
+2a1ú
+2a1v
+av4ar.
+a3vir
+2ay
+a5yf
+4az
+2a1þ
+a2þó
+2a3æ
+4a5ö
+á1a
+áak4
+áa5lo
+á1b
+á4bu
+á1d4
+4áð
+áð2s
+áð3sn
+áð3sta
+áð2u
+áð3us
+á1e
+áf2
+á5fá
+á5fí
+á3fl
+áflæð4
+áf5un
+ág2i
+ágl4
+ágr2
+ág1s
+ág3v
+á1h
+á1i
+ák2a
+ákam4
+ákap4
+ákó4
+ála3m
+ál3arf
+ál2as
+á5lau
+á3let
+álf3d4
+álf5sk
+ál4m
+álm5an
+álm5u
+álp3
+ál4se
+ál5sva
+ál5ug
+á5lú
+ál3æð
+2ám
+ámál5a
+ámsl4
+á2n
+án4aro
+án2as
+án4o
+á3ný
+5ánæ
+á3o
+4áp
+ára5g
+ár3an
+árar4
+á5ré
+ár3f4
+ár5g
+ár5k4
+ár1m
+árns4
+árn5sl
+ár2st
+ár5t
+ár1u
+ár3v
+á5ræ
+ás5en
+á1sk
+á2ska
+á4ske
+á3s4l
+ás2m
+ást2
+ást5i
+ást5ráð
+ást5rík
+ást5v
+4ásu4
+ás5va
+át3að
+á1te
+átr4as
+áttar3
+5áttin.
+átt3un
+á1tæ
+á1u
+áuk4
+á3ve
+á3ví
+á1væ
+á1þ
+á5æð
+b2a
+4ba.
+baðk4
+ba4h
+bak5sl
+ba2n
+4bana
+4baní
+bank5an
+4bans
+b5ant
+bar2b
+barð4as
+bar2n
+bá4s
+2b4b
+bb3að
+bb3an
+bb5arn
+bb3i
+bb3uð
+1be
+bess4
+b2i2
+bið5i
+bið5lis
+bið5r4
+bif1
+bilj5
+bill5
+4binn
+bisk3
+b4it
+bit2a
+4bía
+2b3ís
+2b3íu
+3bj
+bjar2
+b4l2
+bl4íunn
+4bn
+5bo
+3bó4
+bók3s
+b4r2
+br5að
+bra4s
+3bro
+br4u
+3brú
+4bum4
+bur2
+3burð
+burst5að
+bu4s
+1bú
+búf4
+bú3sta
+1by
+1bý
+bæk2i
+bæn4a
+1bær
+b5ættism
+1bö
+4böki
+c4a
+ci4
+ck4
+4da.
+daf4
+dak2
+3dal.
+5dals
+da1m4
+d5ang
+d4aní
+d4arad
+d4ar4að
+dar4ár
+d3arf
+d5arp
+dask4
+da3sl
+4dav
+d1b
+2dd
+4dea
+d5ef
+3deg
+1deil
+d1en
+d5eó
+5dep
+d1f4
+d1g2
+d4gi
+d1h
+d1i
+di5fu
+d3ill
+dim4
+di3ma
+di3nav
+d2ine
+dir3s
+dí3d
+d5íð
+d5ínu
+3dís
+dív3
+3dj4
+djarf5a
+d1k2
+d1l2
+d2la
+dl3að
+d3lag
+d3lau
+d4lið
+dl3u
+d1m
+d5olf
+d5óð
+d3óf
+dó5lí
+1dó2m
+dóm5an
+dó5ne
+3dór
+dó2s
+dós5e
+4dq
+d5raðf
+dr4aðs5
+d5raðst
+drafn4
+dr4ara
+3dreg
+d5reip
+d5rey
+d5riða
+d3rík
+d5roð
+dru4
+d4ræt
+2ds
+d5sal
+d4sjö
+dsk2
+ds4ko
+ds5kun
+ds1l
+d5snö
+ds1s4
+d1st4
+d4sti
+ds4uð
+d4söf
+d1t2
+d1u
+duf4
+5duft
+duk4
+d4umb
+du5ræ
+d4usta
+d3ún
+dún4a
+dút4
+d1v4
+4dw
+1dy
+1dý
+d3þ
+1dæ
+4dæf
+4dær
+3dö
+ð1a
+ðaf4
+ða3g
+ðak4
+ð4albo
+ð3ald
+ðal4is
+ð4a1m4
+ð3a4n
+ðanmeg4
+ðar1a
+ð3ar3f
+ðar3l
+ðar4lis
+ðar3t4
+ð3arú
+ðat4a
+ð3au
+ð3á2
+ð1b
+ð1d2
+ð1e
+ð3f4
+ð1g
+ð2ga
+ð2gi
+ðg4l
+ð4gn
+ðgu4
+ð3g4ul
+ð1h
+ð1i
+ði3g
+ðik4
+ð3in
+ðis5l
+ðist4
+ð4ista
+ðis4ve
+ðj3as
+ð3jó
+ð4ju
+ð3ke
+ð1kr
+ðk2un
+ð3kunn
+ð1kv
+ð1lá
+ðl2in
+ðl4ist
+ð3lí
+ðl4ur
+ð1læ
+ð1m2
+ðnum4
+ð3o
+ð3ó
+ð1p2
+ðr5át
+ð1re
+ð1ré
+ð3rik
+ð3rík
+ð5ró
+ðr1u
+ð3rú
+ð1ræ
+ðræðis5
+ðs5afl
+ðs5á
+ð4seg
+ðs4inn
+ð1sk
+ðskr4
+ð4skú
+ðs5kv
+ð4skö
+ðs4lu
+ð2so
+ðs3or
+ðss4
+ð1st2
+ð2stí
+ð3stö
+ðs4u
+ð4svi
+ð2sæ
+ð1t4
+ð1u
+ð3uð
+ð3ug
+ð3ull
+ð5uls
+ð5unn
+ð3unu
+ð3ur
+ður5á
+ður3f
+ður5g4
+ður5st
+ð1v
+ðv5að
+ðv3ann
+ðv3arn
+ð1y
+ð5ý
+ð1þ
+eat4
+ebr5e
+ed4e
+e1dik
+ed3it
+eð3a2
+eðal1
+eð3il
+eð4is
+e2f
+e3fal
+ef3i
+efj5an
+ef4n
+4eft.
+2efts5
+eg4ge
+eg3i
+egr5u
+eg3u4l
+egur4s
+e4i
+eið5ar
+eið4st
+eif4as
+ei4ka
+eik3li
+eik3u
+eil3ag
+eil5ö
+ei2m
+eim5u
+eing4
+1eink
+4eino
+eist5að
+e4k
+ek2is
+ekj5a
+ekn3
+ek3u
+ek5ú
+e2l
+el5ás
+el4d
+el3eg
+elf3in
+el4gr
+el1i
+4elí
+el3ín
+el4ke
+el2l
+ell5an
+ell3e
+elleg4
+el3ó
+el3r
+el1sí
+5elsk
+el4te
+elu5s
+e2m
+em4ba
+1embe
+em5ens
+em3i4
+emj3
+em4l
+eml2i
+empl5
+em5u
+e2n
+4enc
+en4g
+eng3a
+enik4
+2enn
+enn4t
+en4t
+ep4h
+ep3i
+epl5i
+e4pr
+ep4t
+e4r
+er3al
+er5au
+er5á
+4erð
+5ere
+er5et
+erf5ar
+er2fr
+erf3u
+erg5l
+er4gr
+er3i
+er2k
+er4la
+erl3i
+er4lí
+er4mi
+erm5in
+er5ól
+er5skj
+er1un
+er2v
+er3ö
+eröf4
+e2s
+es3a
+es4ban
+es4bu
+4esj
+e5ske
+4eso
+esp3a
+es2s
+est3að
+est5ö
+e3sæ
+etik4
+et5ils
+etna4
+et5o
+etr5an
+etr3u
+etul4
+et2us
+ext4u
+5eyrar
+é3b
+é1d
+éð2s
+é3fe
+é1g4
+é5ky
+é1l
+éla4g
+él4ara
+é2li
+é4lj
+él3r
+ér1
+ér4á
+ér4r
+érs4
+ér4un
+ér3v
+é3sm
+étt4ug
+ét4un
+étur4
+f3að
+fa2g
+fa5k
+1fall
+fal4u
+fa4ná
+fa5p4
+f2ar
+f3arð
+f4are
+f4arg
+farka5l
+f3arl
+fast3e
+fá3f
+f5áns
+fá3rá
+fá3ta
+fá3v
+f1b4
+fd2an
+f1dr
+f5dú
+fða4l
+1fe
+f3ef
+f3ein
+3fel
+f3end
+ferl5i
+fer3t
+f1ey
+1fé
+f4fa
+f2fo
+f1fr
+ff4st
+ffær4a
+f1g2
+f2ga
+f2gi
+fg4n
+f1h
+f3ið
+fik4
+f5il.
+f5ili
+f3ill
+f5ils
+f5ilv
+fim3a
+f4ine
+f3inu
+3firði
+f3irðu
+firg2
+f3irn
+1firs
+3f4isk
+fi5so
+f3ist.
+f3istu
+fis5v
+fí4
+f5íkv
+f3ís
+fj4a
+fj5aðu
+fj5ann
+fj4e
+f1k2
+fl3and
+fl4at
+3flata
+f5lát
+f4len
+fl5g
+1flo
+5flut
+flv4
+4flý
+1flö
+f1m
+4fn
+fn1g
+f5n4í
+fn3k
+fn5ok
+1fo
+4fop
+forf4
+fork4
+1fó
+fr2
+4fra.
+fr3að
+fra4m
+fram3l
+fr5and
+4frar
+2fri.
+fr5in
+frí5m4
+f3róf
+fru4
+fr3uð
+1fræ
+2f3ræk
+4fræn
+fs3á
+f4sel
+f4skaf
+fsl4
+fs3li
+fs5na
+f2so
+fs5or
+fsr4
+fss4
+f4sti
+f5s4tæ
+fs1v
+f4sæ
+ft3að
+fta4sk
+ft5á
+f3te
+ft2s
+fts5l
+ft3u
+ft4ul
+f1u
+4fu.
+f3uð
+3fugl
+fund4as
+2f3ur
+5furðul
+fur5e
+furs4
+fur3t
+4f2us
+f5ust.
+f3ustu
+f1v4
+1fy
+f3yrt
+f1þ
+1fæ
+1fö
+för4l
+g1a
+4ga.
+4g3að
+gaf4ar
+gagl4
+3gagn
+gak4
+ga4lag
+gal4is
+5gals
+5galt
+gam3al
+gam4i
+g5and
+1gang
+gap4a
+g4ard.
+g2arð
+3garð.
+3garða
+3garði
+3garð4s
+5garður
+g3ar3f
+gar4kl
+gar3l
+gar3t
+4gas
+g4as.
+g4así
+g3ast.
+ga5stað
+1gata
+gat4r
+gá2
+3gáf
+gá5le
+g1b
+gd4ans
+g3de
+g4du
+gd4v
+gð4aro
+1ge
+3gei
+2g1el
+gen4
+g5end
+3geng
+g3ent
+5gerð
+ger5í
+germ4
+gerv5a
+get3r
+g1f2
+ggis5
+ggjaf3
+ggj5ar
+gg5rá
+gg3ræ
+ggs4v
+gg3ug
+gg2v
+g4gö
+g1h
+g1i
+4gi.
+4gik
+gi5kv
+3gild
+g5ill
+5gilt
+gim4a
+4g3i4n
+gis4a
+g4isp
+g5istæ
+gír5a
+gís4
+gjaf5ar
+gjaf5o
+gjak4
+gjal4
+gj4asta
+1gjö
+g1k4
+gkal4
+g1lá
+g4leð
+g3leg
+gl5é
+gl3f2
+g3lit
+g5lín
+gl3ót
+glsk4
+3glugg
+glu3s
+gl4y
+g3lær
+g1m4
+gnap4
+gnart4
+g4ná
+gn3g
+g3nó
+gn4se
+gn5ug
+g4ný.
+3gol
+g3or
+3góð
+gór5
+gó4ur
+g1p
+g3rak4
+gr4an
+gra2s
+gras5sv
+g2rá
+1grei
+g3reis
+g5reyð
+gr2i
+2gri.
+grið4
+g3rík
+3gró
+3grund
+3grunn
+g3ræði
+g2ræn
+4gs
+gs1á
+g4sei
+gsk4
+gs4len
+gsl2u
+gs4lö
+gs3m
+gs5or
+gs3s4
+gs4si
+gs1v
+gt3að
+g3te
+gt4s
+2g1u
+g4uði
+guðl4
+5g2uðs
+guð4só
+g3uðu
+5gufu
+gu4lagi
+g5ulin
+g3ull
+g3uls
+gu5mið
+g3un
+gurf4
+gur3g
+g4usta
+g3ú
+gúst5a
+g1v
+g2va
+g3val
+5gyð
+g1þ
+1gæ
+gæð4as
+gæl4
+gær3
+1gö4
+h2a4
+4ha.
+hað4
+haf4sp
+hand5r
+hat3r
+há3g
+hál4
+há3re
+há4ski
+há5sta
+hás4u
+hát4
+há5ti
+hátr4
+há1v
+he4
+hei2
+hellis5
+hen2r
+herk4
+her3l4
+hersk4
+4hersla
+hey5st
+4hg
+h4i
+hig4
+him5b
+hin4
+hit4as
+hit4n
+2hí2
+h5ía
+hí5b
+hj4
+h2l2
+4hl.
+4hls
+hlu4
+h4n2
+hnja4
+hnjá3l
+holl3u
+horm5
+hó2
+hóm5e
+hót3
+hr4
+4hs
+hu4
+hug1r
+hug3u
+hul5i
+hundr4
+hú2
+húm3
+4húr
+hús5k
+hv4
+hvar4
+hvik3
+5hy
+hæf5a
+hætt4us
+höst3
+2ia
+i5as
+4i5á
+4i1b
+ibb3
+ibl3í
+4ic
+2id4
+i3da
+i1de
+i3dr
+1ið.
+4iðf
+2ið3g
+ið5jarð
+4iðr
+4iðs
+ið5sal
+2iðu
+4ie
+i3ef
+4if
+if5arn
+ifat4
+i2fen
+if4g
+if3is
+if4t
+i4fy
+4i2g
+iga3m
+igð5u
+ig1en
+ig5rí
+2i1h
+2ii
+i5ið
+4ij
+4ik
+ik5á
+ik3i
+ik4is
+ikt5o
+i4kvö
+2il
+ila2g
+il4ara
+i1lá
+4ile
+ilf4a
+il1fi
+il1g4
+i5liðu
+il5in
+il3ip
+il5ís
+ilí4um
+il4kv
+il3lag
+ill5an
+il3lá
+i1lo
+il4sa
+il1sk
+il3sn
+ilst4
+ilæk4
+i5lön
+4im
+im4b
+imb3u
+im3i
+im4ið
+im4la
+im4m
+i5mó
+im4sv
+1i2n
+4inaf
+in3an
+4inar
+inat5r
+2i3nau
+2ina2v
+inav3í
+4iná
+4ind.
+in4ga
+ingj6arni
+4ingr
+ingv4
+2inns
+2innu
+in1o
+4inó
+in1s4k
+in2sp
+in3sta
+in5ul
+4iný
+2i3o
+4ió
+2ip
+i5pil
+3ir.
+4ira
+2i1rá
+2irði
+4irðn
+4ire
+4iré
+irf2i
+4irfs
+4irig
+2irit
+4i1rí
+2irk
+irk3u
+ir3l
+ir1m4
+4irnd
+4irni.
+4irnin
+4irnis
+4iró
+irs4á
+irst4
+ir3tal
+irt5i
+4irtl
+irt4ö
+ir3ug
+4irú
+4irö
+i2s
+1is.
+2isa
+4isag
+i5saga
+i3sam
+is2as
+3isd
+2ise
+4ishv
+3isins
+4isí4
+4isj
+i3sjó
+2isk
+is4ka
+isk5el
+iski3m
+isk5inn.
+3isko
+isk2u
+isk1v
+5iskö
+2islé
+is3læ
+5isma
+is5me
+4isni
+isp3að
+isp3u
+iss2i
+is5sú
+ist3al
+2iste
+4isté
+4istig
+i5stik
+ist4is
+ist5ín
+4isto
+4istó
+4isty
+4istæ
+2istö
+is5tök
+is1v
+4isvi
+is4við
+5isvin
+i3svæ
+2isö
+2it
+it3að
+it5ann
+i5tei
+4ith
+it4ha
+it5ill
+itis4m
+it2ka
+itn5es
+it3rí
+it4stö
+it3un
+it4urn
+it4ve
+4iu
+4iú
+4i1v
+i2v5ís
+4ixs
+2i3þ
+4iæ
+4iö
+í1a
+4í5ak
+íal3
+í5ald
+í3ali
+í2as
+í5at
+í5au
+í5á
+íb4a
+í5bar
+í4be
+5íbú
+í5dag
+íð2s3
+íðsk4
+í3el
+í3en
+íet3n
+í5ett
+í2f
+íf3eð
+í4f3i
+íf5rí
+ífs3k
+íf4sp
+í2g
+íg3e
+í3gil
+í1h
+í1i
+ík3a4
+4ík4anar
+4ík4ani
+ík5is
+íkk2i
+5íkm
+ík2n
+íkn5e
+ík4s
+ík3us
+2íl
+ílak4
+íl2as
+íl5ár
+íl5f4
+í3lí
+5ílmá
+íl3sk
+4ím
+ím3að
+íma3l4
+ím3an
+ím4g
+ím5o
+ím5t
+ím3un
+í2n
+í5ná
+ín5e
+ín3ge
+ín5t
+ínu3g4
+ín3ú
+í3óp
+íóp5íu
+4íp
+ír5ak
+íra4s
+í4r5i
+ír4sv
+ír3t
+í1ræ
+ír5ö
+í2se
+í4s5j
+ísl2
+3íslen
+ísl5i
+ís2m
+í2st
+ís5ter
+ít5að
+ít5als
+ít3i
+ítj5
+ít3re
+ítr5ó
+4íub
+í5uð
+4íul
+íu1ma
+í3un
+íu5p
+í3ur
+í4ura
+4íusa
+íu3t
+4íuv
+ívo4
+í5þ
+j2a
+j3að
+j5aði
+3jaf4n
+ja5kl
+jal2
+jal5ið
+ja5ló
+j4am
+j3an
+j4aram
+j3ari
+jark4i
+jarn4ið
+j4aræ
+jas4
+jask4u
+j3ast
+jál5as
+jál4f
+jálf3a
+3járn
+jár4u
+jáv3
+jávar5
+j1e
+jend4a
+j4ep
+j4er
+j4et
+j1i
+jó5b
+jó5fr
+jó2s
+jó5ug
+jó3ve
+j1u
+juf4
+jug2
+jug5as
+ju4gó
+j4u1l2
+jur4e
+5j2urt
+jurt4i
+j2us4
+j3ust.
+3jöfn
+3jök
+jöl3k
+jöl1m
+kað4s
+kaf4an
+ka4fr
+kag4as
+ka4j
+kaj5a
+kak4l
+kal2
+3kald
+4kalf
+k4all
+3kam4b
+kam2s5
+k3ana
+k4anaf
+k3ann.
+k4anó
+k4ant
+5kanta
+4kapa
+kark4
+1k2ar2l
+k4arm
+k3arn
+kar2r
+k4art
+kar4v
+kask4
+3kass
+5kastal
+k5astu.
+1kau
+5kaup
+kák5
+kám3
+k1b
+k1d4
+2k1end
+3kenn
+3kerf
+5kerl
+ker4m
+k1f4
+kfalls5
+k3g
+kgl4
+k1h
+k3ið
+kið5l
+kig4
+k5ill
+k5ilsi
+kim2
+k5ing
+k4ip
+k1ir
+k3irð
+5kirk
+k5irn
+k4irt
+k1is
+k5ise
+kisk4
+k3ist.
+k4it
+ki3te
+3kíl
+kís3
+kít3u
+kja4l
+kjar4a
+kjar5f
+kju3g
+1kjö
+3kjör
+kka5l
+kk5e
+kkj1ó
+k2kl
+kk1lá
+kk4li
+kk3rí
+kk4se
+kkul4
+kkv5ið
+kl2
+kl3að
+kl3ann
+klá4
+5klef
+kleif5a
+k4lem
+k1lin
+3klj
+3kluk
+3klú
+1klæ
+k1m2
+k4mið.
+kn3ar
+k2ney
+kni5svi
+3knú
+1ko
+2kob
+koff5
+kol5d
+kol4l
+kol5sv
+3kon
+4kons
+3kos
+kot4as
+kó3d
+kó3m4
+kór5a
+k1ótt
+kra5l
+kr2as
+k2rá
+k5ré
+kr2i
+krif3a
+1krö
+3kröf
+4ks
+ks4lí
+ks4lö
+ks4má
+ks4n
+ksp4
+k4ste
+k4stó
+k4str
+ksyf4
+kt3að
+kt5er
+k4tí
+k3tora
+k5ty
+2k1u
+k3uð
+k4uði
+kuf4
+kuk4
+kulegr4
+kum4
+kumb5
+k5un.
+k5una.
+k3unar
+k5uni
+5kunnátta
+k3unu
+k3ups
+k2urð
+kur5k
+k2us
+ku5sl
+k3ust.
+k5ustum
+ku3sty
+kú2
+3kúlu
+k3ún
+kú3re
+kút4us
+3kven
+4kvé
+4kvu
+kv4un.
+1k4væ
+3kvö
+4kvör
+k5þ
+3kök
+5köld
+5könn
+5kös
+2la.
+4lac
+la4dan
+2lað
+lað4al
+4laf
+laf4as
+laf4r
+l3afs
+3lagð
+4lage
+2lak
+la5kó
+la1l2
+l3ald
+lam4b
+2lana
+l2and
+3land.
+3lands
+1lang
+lank5as
+4lann
+l5anna.
+l4anó
+lan4t
+la3pl4
+2lar
+l4aram
+l4are
+larg4
+l4aris
+l3arn
+la3ró
+lart4
+l4ary
+2las
+las3i
+las3le
+la5sli
+last5að
+lat3ín
+lat4u
+1lau
+2laum
+laut5as
+lá2g
+lám5a
+lán5e
+4lár
+lá4t
+5látum
+lá3v
+2l1b
+2ld
+ld3ar
+ld3d
+ldem4
+ld3ey
+ldig4
+ldr4as
+ld5rau
+l4dri
+ld5ro
+ldr3ó
+1le
+4le.
+2lef
+l1efn
+4legn
+leif5as
+leik3v
+4lein
+4lek
+4lel
+4lenn
+4lep
+2ler
+le5rí
+les5e
+2let
+l3ex
+2ley.
+4leyj
+2leym
+lf4as
+lf5át
+lf4dr
+lf3f
+lf2i
+lf5inn.
+l3fj
+lf2l
+lfla4
+l4fó
+lf4sp
+lftr4
+lft4un
+4lg
+lg2a
+lgar4s
+lg5ast
+l1gá
+l4ges
+lgil4
+lg4isi
+lg3í
+lgl4
+lgni5s
+l1gr
+lg4ú
+l1h
+4li.
+lik4a
+li5kv
+lil2
+li5la
+li3li
+l2ind
+4lingsá
+l3inn
+l5inn.
+2l3inu
+4l3ir
+l1is
+l5is.
+l4isá
+l3isi
+lisk4
+l5isr
+l4isti
+l5istu.
+lit4ar
+3litl
+l3ía.
+lí4b
+1líf
+líf5a
+lík3k
+lím5ug
+4líp
+1lít
+l1íu
+l4íuf
+l4íuh
+l4íutr
+lj3ar
+lj5arð
+1ljós
+ljós5k
+ljós3l
+lj3ug
+ljur4
+lj4uru
+2lk
+lkap4
+lk4as
+l1ke
+l3kr
+l3kúr
+l1kv
+l3ky
+2ll
+ll3et
+l4ley
+ll3f
+ll1g2
+ll3iða
+lli3g
+lliss4
+l1lit
+llít4
+ll3k4
+ll3m
+ll1ót
+lls5tæ
+ll5te
+ll5ug
+ll3v
+2lm
+lm5ari
+lm3ars
+lmb4
+l3me
+l1mó
+lnar4
+ln4ið
+l5no
+lo4
+5loð
+5loki
+4lon
+4l1or
+5los
+lóð3r
+ló5gr
+ló4ma
+lp5t
+2l1r
+l2ri
+l3rit
+2ls
+lsí4
+l2sj4
+l5skin
+ls4kon
+ls4nesi
+l3stað
+lst4in
+ls1ve
+4lt
+lt3að
+l5til
+lt4s
+lt4ú
+l1tæ
+2lu
+4lu.
+l3uð
+lugl4
+luk4i
+l4u1l4
+l1um
+lu1ma
+l1un
+3lund
+l3unu
+lu5pe
+l1ur
+2l1v
+l2va
+lv3að
+l3val
+l4víu
+ly4
+3lyf
+1lyn
+l1yr
+1lý
+2lýf
+lýt4a
+4lýti
+2l1þ
+1læg
+lækj3
+lækjar5
+5lækk
+1læti
+1lög
+l5öl
+4löt
+m2a
+2ma.
+m4ab
+m4ad
+m3að.
+m3aða
+m3aði
+m3aðr
+m5aðs
+1maðu
+maf4
+m4ag
+3mag4n
+m4ak
+mal4as
+mal3dr
+m3alf
+m3all
+m4alp
+mal4t
+ma1m4
+4man.
+4mana.
+m4aná
+m3anb
+2m3and2
+m3ank
+m3anl
+mann4as
+3manni
+3manns
+mann5t
+2m3ans
+man5sa
+m3ant
+4manu
+ma2r
+m3ara
+m3arb
+m3arð
+1m4ark
+marks5
+m3arn
+mar3o
+mar4s
+mars5m
+m4arú
+m1as
+mask4
+ma4sp
+m3ast.
+1má
+4má.
+3má2l
+mál3f4
+2mám
+má5mu
+má5p
+4már
+4mb
+mb5aði
+m1ban
+mb3i
+mb4ir
+mb3un
+md2as
+md5asta
+md4v
+1me
+4me.
+með3
+m5ef
+megin3
+5m2eis
+meltr4
+m1end
+3menn
+m5erh
+m3er3í
+mest5a
+m1f4
+m4fí
+mför4u
+m1g2
+mgl4
+m1h
+mið3i
+miðr4
+mi3ge
+3mik
+milj3
+mil4l
+millj3
+m3ing
+5minj
+m3inn.
+min4s
+m3inu
+m3ir
+m1is
+mis3k
+mis3lu
+mism4
+2mí
+mjó3sl
+m1k
+m2ka
+mk4arg
+mk4as
+mk2i
+mk4l
+m1l
+m2la
+m3lag
+m3lau
+m2lá
+ml3ár
+m2li
+m5luk
+4mm
+m2m3a
+mm5b
+m4mó
+mm4sv
+mm3u
+m4nesku
+2mog
+4mok
+3mol
+mong5
+mód3
+móð4s
+mó5g4
+m5óní
+mó3rau
+mó4s
+3mót
+mp3á
+m5pe
+mp3i
+m3rau
+m5rá
+m3re
+m3rý
+m1ræ
+4ms
+ms5ál
+m2se
+ms5ei
+m5skau
+ms5kj
+ms5lá
+msn4
+mssetr4
+m1sv
+m4sví
+mt3að
+m4ti
+mt2is
+m3tug
+mt5un
+mt4us
+mt2v
+m1tö
+m1u
+4mu.
+mug4u
+4mul
+4mum
+m2un
+1mund
+m3ung
+4mur
+m4uru
+mu5sta
+m3úð
+múg4u
+m1ún
+mús4a
+m1v4
+1my
+3mý
+mý5m
+m1þ
+1mæ
+1mö
+mör4
+n1a
+4na.
+na2da
+na4dí
+naðar3
+naf4
+nafl4
+nafl5an
+3nafn
+nak4a
+na4kr
+nal2
+na3la
+n3ald
+na3li
+na1ma
+n4anaf
+n5ang
+n5ann
+n4arak
+n3ar3f
+n4arfi
+n4arfö
+narg4
+n4aris
+nar5m
+nar5rin
+n4aru
+n4arú
+nat4
+n5aug
+n3auk
+naum5a
+1ná
+ná1g
+ná1k
+3ná4m
+nán5ast
+n1b
+nbæj4
+nd3er
+nd4isv
+n4dj
+nd3ót
+nd3rek
+ndr1u
+nd1ræ
+nd4sen
+nd3ug
+nd5ul
+ndur5g
+nd3ú
+1ne
+neð2s
+3n2ef
+4nefl
+n4em
+nem5a
+2n1en
+4n4er
+nestr4
+netl4
+n5eyi
+n3eyj
+né5sk
+n1f2
+nfr4
+nga1m
+ng5are
+ng2as
+n2ge
+ng5ek
+n3ger
+n3get
+ng1ey
+ngi5k
+ngil4i
+ngi5lið
+ng5lag
+ngl2i
+ngl5ið
+ng5ólfs
+ng4ra
+ngr5an
+n3grí
+ngr3u
+ng3ræ
+ng4sj
+ng4sp
+ng4ste
+ngurs3
+ngu3t
+n1h
+4n1i
+n4iði
+ni5fr
+ni3gr
+ni3lu
+ni5m
+n4iru
+n3isa
+n4isá
+nisk4
+ni3skó
+nis2m
+nis5s
+ni3ste
+ni5stæ
+n3ía
+n3ísk
+n1íu
+ní4um
+njál4
+nk2
+nk3að
+nk5and
+nk3ans
+n5ká
+n1ke
+nk3i
+n5kó
+n3kunn
+n5ky
+n5kö
+n1l2
+nli4
+n4list.
+n1m4
+n2n
+nn1á
+nn1e
+nn3g2
+nnk4i
+nn4sj
+nn5ske
+nn4sto
+nn5stun
+nn5tó
+nn3ug
+nn2us
+nn3úð
+n1or
+1not
+n5ólf
+5nóttin
+n3p4
+n1r
+n3ram
+n5rau
+n2r4i
+n3rit
+n3sak
+n5sát
+n4seg
+ns5es
+ns5is
+ns1í
+n3skil
+nskír4
+ns5kja
+n5skö
+nsn4a
+ns5r
+nst4e
+nt3að
+n5tak.
+n5taki
+n3tal
+n1te
+ntgen5
+n3til
+n2tí
+nt2s
+nt5sk
+nt5sm
+nt3ug
+nt4v
+n1tý
+n1tö
+n1u
+nuf4
+n4ugr
+nuk2
+nu1l
+nu1ma
+5numd
+nungs3
+nur5f
+nur4l
+n3ust.
+nu5stað
+nu4sv
+nu5ta
+3núm3
+nú4s
+n1v
+n5yf
+n3yrk
+1ný
+n3ýg
+ný3l
+ný5sk
+n1þ
+1næ
+næl4a
+3nöf
+n3öld
+n5ön
+5obs
+oða3l
+oðr4
+oðs5l
+oð4ug
+o2f
+of3ang
+off4u
+of3o
+of5r
+of4sj
+of5su
+oga3l4
+ogast4
+ogs4u
+ok4as
+olak4
+old3u
+ol2g
+oll5eg
+ol5lit
+oll4st
+ol3m
+ol3ó
+oltal4
+o2m
+om3a
+om4m3
+om2u
+om3un
+on3sv
+on4t
+on5tó
+on4us
+opa5p
+op2h3
+op5u4
+ora4
+or4di
+or1e
+or2fe
+or2gr
+3orí
+orlag4
+or2ma
+or4mi
+4orn
+or4ne
+or4sta
+ortr4
+ort3ug
+or1u
+or3ug
+or3v4
+or4við
+or3y
+o4s
+osk3i
+os3m
+os2s
+ost5i
+ost5un
+4o4t
+ot3að
+ota5l4
+otam4
+ot3ro
+ots4á
+ot5un
+o4u
+o3ve
+ox4
+ó1a
+óaflat4
+ó5an
+óar4s
+ób3ak
+ód4a
+óði4
+óðl4
+óðm4
+óðv4
+ó5e
+óf3ar
+óf4as
+óflu5s
+ófr4
+óf5us
+ó2fy
+ó4fö
+ó2g
+ó1h
+ó1i
+ók5lo
+ó3kr
+ók2u
+óla3m
+ól2as
+ól5ik
+ól4is
+ól4kv
+ól5om
+3ólsk
+ó4m3að
+óm3ar
+óm4bæ
+óm2g
+óm4is
+óml4
+óm3p
+óm3stu
+óm3u
+ó2mö
+ó4n
+ón3í
+ón5kv
+óp4e
+óp2h5
+ór4as
+órá4
+ór2d
+ór4dö
+ór5es
+órf4
+órg4
+ó4ri
+ór4is
+órík4
+órj4
+órk4
+órm4
+órn4o
+ór3ón
+órr4
+órs4a
+ór1u
+ósa5f
+ósak4
+ó3sem
+ós3end
+ó5skaf
+ósk4as
+ósk5in
+ós2l
+óslav3
+ó2só
+ósp4
+ós4se
+ó4ta
+ót3að
+ótap4
+ót5ef
+ótil4t
+ó5tí
+ót4ó
+ót2v
+ó1u
+óum5b
+óv4a
+ó5vat
+óy4
+ó5þ
+p1a
+pag4
+pa4le
+pa3m
+pa4n
+pan3gó
+pa2r
+p4arat
+pari3f
+par5í
+p2art
+par5te
+p4aru
+p2ák
+p4ál
+pá5m
+p4ár
+pá2s
+p4át
+p1b
+p5d
+p1el
+1peni
+3pers
+p1f2
+p1g2
+p1h
+p1i
+pil5ar
+5pilt
+p4ink
+pist5i
+pit4
+3píp
+pí2t
+pl2
+pl3að
+pla4s
+p4læ
+3plö
+p1m4
+1pok
+3pós
+p2p
+pp5aks
+pp5e
+pp3í
+ppk4
+pp1l
+pp3ó
+pp1r
+ppsk4
+4pra
+pr2i
+p4ris
+prí4
+3prj
+1pró
+pró5fas
+pró5m
+p1sa
+pss4
+p1st
+pt2ú
+p1u
+puk4i
+pu1l
+pur4a
+3pú
+púf4
+p1v
+qu4
+2ra
+4ra.
+5raðsh
+raf4f
+r3ald
+ral4i
+r4all
+r3als
+3ranal
+r4ani.
+3ranns
+r4anó
+4r3ar
+r4arað
+r4arú
+r4ary
+r4aræ
+ras3i
+ra3tu
+r4aum
+1ráð
+ráf4i
+rá5kvæ
+rárs4
+r4ása
+r1b4
+rba4
+r1d
+r2dí
+r4ð
+rð4ar4á
+rð5is
+rð1l2
+rð4mu
+rð5rá
+rð5su
+rð3sv
+rðv4
+r4ef.
+r4efs
+5reftsk
+1regl
+r3eig
+3reik
+r5enu
+r5eu
+r4eyn
+r4é
+r1fal2
+rfa5li
+rf4ar
+r3fá
+r5feð
+rf1is
+r1fj
+rfjár4
+rf4lö
+rfóg5
+r1fr
+rfr4u
+rf4st
+r3fund
+rf4urð
+rgj4að
+rgj4ar
+rg2l4
+r5gly
+r1gr
+r2gra
+r4grey
+r5h
+4ri.
+4r3ið.
+rig2
+riga5s
+r3ild
+4rin
+rin5e
+ringj5ar
+r3inu
+rip4s
+4r3ir
+ri3sk
+ris5l2
+3risn
+rist5að
+ris4un
+1ri4t
+rit3li
+4rí.
+4ríf
+ríkis3
+4ríl
+ríst4
+4ríu
+4ríþ
+rj3ar
+rjá4l
+rjó3sa
+rjósk5a
+rka1m
+rkaup4s
+r3ká
+r1ke
+rk1ef
+r4kell
+r4kelss
+rkju3s
+rk4se
+rk1sm
+rk4sp
+rk4ú
+rk5vei
+r3kö
+r1l2
+rl3að
+rl5ann
+r2li4
+rl4ið
+rlis5s
+r3lit
+rl3m
+rlof4
+rmak4
+r1man
+rmáls5
+rmb4
+rm2i
+r1mið
+rmil4
+r5mj
+rmk4
+rml4
+r3móð
+rmr4
+rn3ar
+rnar5l
+rn1g
+rn5ór
+rn5sí
+rn5sm
+rn4so
+r4nu
+r5numi
+ro4
+rog4as
+ron4
+r1or
+ró5gr
+ró4m
+ró4sa
+rós3ó
+5róti
+r5pal
+r3pó
+r1pr
+r4pri
+rp2s
+rp3sk
+r5py
+rr5ar
+r1rá
+r1re
+r1ré
+r1rí
+rr2k
+r3ró
+rr1u
+r5rú
+r1ræ
+r1sa
+r4saf
+rs4ár
+rsegl4
+r3ser
+rs4inn
+r3ske
+r5skil
+rs4lan
+rs2má
+r1st
+r2sti
+rst4v
+r3stö
+rs2u
+r5sund
+r4sú
+r1sv
+rt3að
+rta5g
+r3tak
+rta4sk
+r5tá
+rt5er
+rt3ey
+rt2hu
+r4tík
+r3tó
+r3trö
+rt4se
+rt5sl
+rtt4
+rt4uru
+rt4ú
+r4tv
+rt4ve
+r1tæ
+rt1öf
+r1uð
+r4uðun
+ruk4i
+ru5li
+ru2m
+r1ur
+r4uss
+r3ust.
+rut4v
+r4úð
+3rúm
+rúst5
+r1v
+rv3að
+r3ve
+r2vi
+rvi3g
+rv3ing
+rv4un
+r3væ
+r3yr
+1rým
+r1þ
+1rækt
+ræmd5a
+1ræn
+ræt3i
+röf4ug
+rök1r
+röl4
+2sa.
+4sab
+2s3að
+s4aðf
+1sag
+4sagr
+4sagt
+sal5at
+4s3ald
+1sa2m
+sam5b
+4sam1e
+sam3m
+sam1s
+sam5y
+2san
+s4ands
+2s3ar
+s4are
+sarg4
+s4aro
+s4arp
+2s1as
+2sat
+sat4a
+2sau
+s3auk
+4sav
+sá4
+s3áb
+s5áf
+sálar5
+s1ár
+s3ás
+s1b
+s3d4
+1se
+2s1ef
+4seld.
+5semi
+5sens
+2ser
+2ses
+3set
+sex3
+2s1ey
+s4eyð
+1sé
+s5f4
+sfl4
+sfr4
+s1g4
+sgl2
+s1h
+shá4s
+s1i
+s3ið.
+5s4iða
+s4iði
+sif2
+si5fi
+1sig
+sind4ar
+sind4as
+5sinnu
+2s5ins
+s3ir
+s3ist
+s4isv
+si3ta
+sí3br
+1síð
+síðk4
+sígl4
+s3ík
+sí4m
+sínk5a
+s3ír
+s1ís
+s5íu.
+sí3v
+sí4ve
+1sj
+s3jaf
+sjar4
+s4já
+sjó5l
+sjó3m4
+sjó3s
+4sju
+3sjú
+s2k
+2sk.
+4ska.
+4skað
+skaf4a
+4skal
+2skan
+1ska4p
+4skas
+1ská
+1skei
+3skemm
+4sken
+3skey
+s4k2i
+2ski.
+4skið
+sk3inu
+3skip
+2skir
+4skis
+3skír
+5skjá
+4sk4n
+3skoð
+4skon
+4skos
+1s4kot
+1skó
+5skóg
+1skrá
+4skró
+3skrú
+4sks
+sk3uri
+sk3ust
+2skv
+1sky
+3ský
+1skæ
+sla2
+sla3f
+s4lam
+slands5
+3s4lé
+sl2is
+s1lí
+s4líð
+s3lof
+s3lok
+1sló
+slu3s
+1slys
+s3læk
+s1m2
+4sma
+smá1s
+smá5v
+4sme
+s4mek
+s2mi
+1smí
+smj4
+4smö
+s2ne
+3sneið
+5sner
+s3nes
+3sneyd
+sn4ið
+sn2o
+1snú
+4snúm
+s4ný
+snæð5
+1so
+4sod
+3son
+2sor
+s5orði
+1só4
+s4ól
+sól3e
+sól3s
+2sóm
+s5ómag
+4sós
+1sp2
+spít3
+spj4
+4spl
+4spra
+2spró
+s5pund
+sr2an
+s5rau
+s1rá
+s1re
+s1ré
+s1rí
+s5ro
+s5ræ
+s3rö
+s3s4á
+ss3er
+ss5í
+s1s4k4
+ssl2
+ssm4
+ss5or
+s1st
+s4stir
+s1sv
+s2t
+2st.
+s4ta
+2sta.
+4stal
+4stap
+5starfi
+5starfs
+4staæ
+1ste
+3stef
+3stein
+5stekk
+4stet
+1sté
+st4he
+4sti.
+1stig
+st4isl
+3stíg
+2stím
+4stíu
+1stj4
+4stjón
+5stjór
+5stjör
+4stl
+st3le
+1sto
+3stof
+1stó
+4stón
+3stór
+st2r
+str5al
+5stranda
+5strang
+5straum
+5strá.
+1stre
+3strí
+4strú
+s3try
+5strön
+st5t
+2s4tu
+3stund
+1st2ú
+4stv
+3stý
+1stæ
+2stæk
+1s4tö
+3stöð
+4stöl
+5stöng
+s1u
+su3f4
+5sum3a
+s2ung
+s5upp
+s5ura
+sust4i
+sú4
+súln4
+s5ún
+s5úrs
+sút5
+sv4
+4svag
+4sval
+s3vat
+s5veð
+s4vef
+s2vei
+s3veik
+3svein
+5svep
+4svex
+s4viði
+5sviði.
+s4vik
+svik3u
+s5vin
+s1vo
+s2væ
+1svæð
+1sy
+2s3yfi
+3syn
+4s3yr
+3s4ý
+s1þ
+1sæ
+4sæð
+sæf4
+sæ5fa
+3sæj
+3sæl
+4sæs
+1sö
+3sög
+sögu5s
+2s3öld
+3söm
+2s3ör
+t2að
+ta2fr
+1taka
+5takend
+t4al.
+tala4m
+4tam
+ta1ma
+t5amt
+ta4ná
+3tang
+4tar
+t4ar4að
+tar5is5
+tark4
+tarp4
+tar5sá
+taræv4
+t1as
+t4as.
+ta5sl
+tat4
+ta4ví
+t4á4
+5tákn
+4tánd
+t1b
+t1d
+4tegí
+5tegu
+tei4
+tein5g
+t1eis
+1tek
+3tekj
+tekkj5
+t1end
+ten5ó
+4tepl
+t3ett
+2tey
+té4l
+t3f2
+tfirr4
+t1g
+t1h
+th5ers
+t1i
+ti4an
+ti5kis
+tild4
+4tin
+tirk4
+t4iræ
+tist4
+t5ist.
+ti3sta
+tistil4
+t2isv
+1tit
+1tí
+4tí.
+4tía
+3tíð
+tí4l
+3tím
+4tín
+4tít
+tív3
+t4jö
+t1k
+tk4a
+t4k2i
+tlaf4
+t3lag
+t4lag.
+tl2an
+tl5ann
+t1lá
+tl2i
+tlur4
+t1læ
+2t3m4
+tn2s
+tnsk4
+tnskr4
+to4
+1tog
+t3on
+3torg
+5toru
+1tóm
+tóm3a
+tóm5as
+5tónl
+tór1
+tór5au
+tóri3s
+t1ót
+t3p
+tra2b
+5traðari
+tr3alí
+tr2an
+tr3ann
+tr5ar
+3traus
+t4rey
+1tré
+tr4is
+t5risi
+t5ríka
+3trj
+t5róf
+tr3ótt
+tr3ug
+tr3una
+tr5uni
+1t4rú
+1try
+t5ryð
+t3ræn
+3tröð
+4ts
+t1sa
+ts4inn
+t5sí
+tsj4
+t1sk4
+ts1s
+t1st4
+ts4u
+t2sy
+tt3að
+ttak4i
+ttar5f
+tt5á
+tte5rí
+tt5ern
+t4tí
+tt5j
+tt1l
+tt1or
+tt3ræ
+tt3ug
+tt4ugl
+ttv4
+t1tæ
+t1u
+4tu.
+t4uði
+tugl4
+tuk4
+tu3l4ið
+tum2
+tu5min
+t2ung
+3t4ungl
+tup4
+t3ur3e
+tur3k
+t5urs
+t4usa
+t4usu
+tutr4
+túd3
+t3úð
+tú4l
+1tún
+tún4a
+t1úr
+tú3sk
+t1v
+5tveggj
+t5ver
+5týs
+t1þ
+3tæk
+1tök
+1töl
+t5öls
+2u1a
+u3af
+u5au
+2u1á4
+uáætl4
+4u1b4
+4uc
+4ud4
+u1da
+u5dá
+u3de
+u3dó
+u3dr
+2uða
+uð4are
+uð3k4
+2uðl
+uðm4
+2uð4n
+2uðr
+uð5ris
+uð4se
+uð3sv
+uð5sæ
+4uðul
+2u5e
+4ué
+4uf
+uf5á
+ufd4
+u5fit
+u3fj
+u1fr
+u3ful
+u5fú
+2ug
+4ugal
+4ugat
+4uge
+4ugil
+4u1gj
+4ugla
+ug1lj
+4uglu
+ug4n
+4ugó
+u5gran
+4ugre
+4ugrj
+4ugró
+ug3ræ
+ug3ta
+4ugö
+4u1h
+4ui
+u5ið
+4uí4
+2uj
+2uk
+ukak4
+uk4as
+u1ke
+u5kinnin
+ukku3s
+u5kó
+u3kv
+2ul
+3ul.
+4u1lag
+ul3ar
+3ulb
+4ule
+u5lind
+ul4is
+u1lí
+ul3k2
+ul4la
+4ulln
+ullt4
+4u3lo
+u3ló
+ul5sv
+ult4i
+ul3us
+ul5v4
+u3læ
+4u1lö
+3um.
+2uma
+umak4
+u1man
+um4aran
+2umá
+umál4ar
+um4ba
+um5bæ
+um4bö
+2umd
+2ume
+um3ein
+4umi
+umj4
+um4ki
+4uml
+umm4a
+4u5mo
+2umó
+4ump
+2umr
+ums4
+um3sl
+3umst.
+um1t4
+4umu
+um5unn
+4umú
+2umy
+2umý
+2umæ
+2umö
+un3ar1
+unar5a
+un2as
+4unat
+2u1nau
+2uná
+2und
+4une
+4unk
+2unná
+4unns
+2unnu
+unn5ug
+4uno
+4unó
+uns4an
+4unt
+1unu
+4unur
+4unæ
+4unö
+2u3o
+uol4
+4uó
+2up
+upp1
+upp5a
+uppal5
+upp4i
+3ur.
+2ura
+ura4f
+ur5a4m
+ur2an
+ur5anna
+2urá
+urða5rá
+2ure
+u1rek
+ur3ey
+4u1ré
+urf4a
+ur3fl
+urg4e
+ur3gj
+ur5in
+4urit
+4urí
+u3rík
+ur3j4
+urk4a
+ur1m
+ur3ní
+4uro
+4uró
+ur1sk4
+ur3sna
+ur4sta
+ur4svö
+ur5til
+urt4ir
+ur1u
+ur4unn
+4urus
+ur3v4
+ur4vis
+4uryk
+4urý
+2uræ
+4urö
+2usa
+u3sal
+4us4á
+2use
+4usí
+2usj
+4u1sk
+4usl
+2u3s4m
+2usn
+4uso
+4usó
+4usp
+u5starf
+4ustá
+4uste
+2usté
+2usti
+2ustí
+4usto
+4ustó
+4ustr
+3ustu.
+2ustú
+4usty
+4ustý
+4ustæ
+4ustö
+u5sund
+4u3sv
+4usy
+2usý
+2usö
+2ut
+ut3að
+ut2as
+u3te
+u5til
+u3tó
+ut4stó
+ut2ú
+u1tæ
+2u3u
+4u5ú
+4u3v
+2uy
+u3yf
+2u1þ
+4uæ
+2u5ö
+ú1a
+úal4
+ú3arf
+úb3an
+úbli3
+úð3ar
+úð5g
+ú3e
+úf5ar
+úfl2
+úf5li
+úf5ly
+úfs4á
+ú5gala
+úgó3
+ú4gæ
+4ú1i
+úk1l
+úkr1u
+úk4s
+úl5er
+5úl4f
+úlf5al
+úl4í3
+úlíp4
+ú3lo
+4ú2m
+úm4r
+úm4si
+ú4n
+únd4ug
+ún4gö
+úpl5i
+úr5ef
+úrít4
+úr5sl
+úr1t
+úr3un
+úr5v
+ú3ræ
+2ús
+ú4sa
+ús3ei
+ús3í
+ús4sti
+ús4sv
+ús1v
+út3e
+út2he
+úti5f
+út2is
+útj4
+út1l2
+út1r
+4ú1u
+ú1v
+ú4va
+ú5þ
+v2a2
+vaðr5
+va5fo
+va5h
+5vallag
+va4n
+var4ma
+varps3
+var5ú
+var4v
+v3ast
+va4t
+3vax
+veð5l
+ve3fe
+1veg
+v2ei
+3veið
+vein4as
+5veis
+4velg
+2vep
+v4er
+1verð
+ver3gj
+3verk
+ver2s
+vé2
+v5és
+v3ét5
+2v3h
+v2i
+2vi.
+v4ið
+5viðar
+við3l
+vil4i
+vi3lið
+3viln
+vi4lo
+vin3gj
+4vip
+3virk
+visk5un
+3viss
+vis4v
+5vita
+vitk5
+vit2n
+4viv
+4víb
+2víð
+5vík
+3vísi
+vísl3a
+ví1v
+2vn
+vo3k
+vol4
+vork4
+vor4r
+4vr1
+4vs
+2vu
+v1uð
+v1un
+5væg
+wa4
+win4s4
+x5ar
+x2as
+x3e
+x3f
+x5i
+xis4
+xí3
+xík4
+x5íu
+xt5að
+x1u4
+y5ba
+yð2s
+yf5a
+yf1i
+yfj5að
+yft4is
+y1i
+yj3ar
+yj5ó
+yk5e
+yk3i
+yk3su
+yk3u
+yk3v
+ylf5i
+ylgn4
+yll5a
+yl4v
+ym3a
+ymp5í
+y4n
+ynj5ar
+ynj3ó
+yn4k
+yn4t
+yn5u
+yp2us
+yr5e
+yr1i
+yr3il
+yrir3
+yrj3
+yrkv3a
+yr2l
+yr2s
+yr1u
+y2s
+ysj3
+ys2s
+yst3ug
+yt4h
+ytil4
+yt4k
+y3v
+ý5a
+ýaf5
+ý5á
+ýð2s
+ýfl4
+ý3flu
+ýg4r
+ýg4uð
+ý1i
+ýja5f4
+ým4a
+ým4k
+ýpru4
+ýp2s
+ýrf4
+ýri3m
+ýri5p4
+ýr3l
+ý4si
+ýsig4
+ýs4l
+ýs4m
+ý3stá
+ý5u
+ý5ú
+ý3v
+ý5y
+zó4
+þ2a
+þam4
+þarf5a
+þar4m
+4þb
+þ2i
+þist3i
+þjó4
+þol5a
+þor3f4
+þor3g
+þorm4
+þ1ól
+3þór
+þór5i
+þ2r2
+þra4
+þrás4
+þris4
+þríl4
+þrí3t
+þru4
+þum5a
+þumb3
+þur2
+þús3
+þ2v
+þver5sk
+æ1b
+æðn5
+æðnis5
+æð2s
+æð4ug
+4æf
+æf1a
+æ4fi
+æf3ust
+æg5ist
+æ1i
+æj3
+æj4al
+æjark4
+æk1a
+æk1li
+æk3u
+æ2l
+æl3an
+æl3e
+æl3us
+æm3a
+æm4al
+æ4mundu
+ænak4
+æn4k
+ær1a
+ær3e
+ærgöng5
+ærif4
+ær3ist
+æri3sv
+ær3l
+ær4n
+ær2s
+ær5un
+ær1us
+æ5rú
+æs4is
+æt5ise
+ætl5i
+æ5u
+æva5g
+æ5val
+æv3ar
+æv4ara
+æ3ve
+æv3in
+öð2
+öðl3
+öðm5
+öð3un
+öðv5an
+öðv3ar
+ö1fa
+öfl3ó
+öfn5
+öfr3u
+öf3u
+ö4g
+ög3gj
+öggv3
+ög1re
+ög2us
+ök5e
+ök5rá
+ök3st
+ök3ul
+ökv3a
+ö4l
+öl1f4
+ölk2
+ölu5mi
+öl5un
+öl2v
+ölv5an
+öm4b
+öm3u
+önd4l
+öng5sv
+öng4us
+öng4v
+öngv3a
+önk3
+önn4l
+ön3ug
+ön5un
+ör1e
+ör4ge
+ör4lan
+örm5un
+ör3ó
+ör3ug
+ör1un
+ör3und
+örus4
+ör2v
+4örva
+örv5al
+örv5an
+örv5ar
+örv4i
+ör1y
+ör5æ
+ö4s
+ösk3ul
+ös3u
+öt4s
+ö3tug
+öt2v
+ötv3a
+ö5u
+þ6ó} \ No newline at end of file
diff --git a/Master/texmf-dist/tex/context/patterns/lang-is.rme b/Master/texmf-dist/tex/context/patterns/lang-is.rme
new file mode 100644
index 00000000000..ad574059bd4
--- /dev/null
+++ b/Master/texmf-dist/tex/context/patterns/lang-is.rme
@@ -0,0 +1,79 @@
+% generated by mtxrun --script pattern --convert
+
+% This file is part of hyph-utf8 package and resulted from
+% semi-manual conversions of hyphenation patterns into UTF-8 in June 2008.
+%
+% Source: icehyph.tex (2004-03-08)
+% Author: Jorgen Pind <jorgen at lexis.hi.is>
+%
+% The above mentioned file should become obsolete,
+% and the author of the original file should preferaby modify this file instead.
+%
+% Modificatios were needed in order to support native UTF-8 engines,
+% but functionality (hopefully) didn't change in any way, at least not intentionally.
+% This file is no longer stand-alone; at least for 8-bit engines
+% you probably want to use loadhyph-foo.tex (which will load this file) instead.
+%
+% Modifications were done by Jonathan Kew, Mojca Miklavec & Arthur Reutenauer
+% with help & support from:
+% - Karl Berry, who gave us free hands and all resources
+% - Taco Hoekwater, with useful macros
+% - Hans Hagen, who did the unicodifisation of patterns already long before
+% and helped with testing, suggestions and bug reports
+% - Norbert Preining, who tested & integrated patterns into TeX Live
+%
+% However, the "copyright/copyleft" owner of patterns remains the original author.
+%
+% The copyright statement of this file is thus:
+%
+% Do with this file whatever needs to be done in future for the sake of
+% "a better world" as long as you respect the copyright of original file.
+% If you're the original author of patterns or taking over a new revolution,
+% plese remove all of the TUG comments & credits that we added here -
+% you are the Queen / the King, we are only the servants.
+%
+% If you want to change this file, rather than uploading directly to CTAN,
+% we would be grateful if you could send it to us (http://tug.org/tex-hyphen)
+% or ask for credentials for SVN repository and commit it yourself;
+% we will then upload the whole "package" to CTAN.
+%
+% Before a new "pattern-revolution" starts,
+% please try to follow some guidelines if possible:
+%
+% - \lccode is *forbidden*, and I really mean it
+% - all the patterns should be in UTF-8
+% - the only "allowed" TeX commands in this file are: \patterns, \hyphenation,
+% and if you really cannot do without, also \input and \message
+% - in particular, please no \catcode or \lccode changes,
+% they belong to loadhyph-foo.tex,
+% and no \lefthyphenmin and \righthyphenmin,
+% they have no influence here and belong elsewhere
+% - \begingroup and/or \endinput is not needed
+% - feel free to do whatever you want inside comments
+%
+% We know that TeX is extremely powerful, but give a stupid parser
+% at least a chance to read your patterns.
+%
+% For more unformation see
+%
+% http://tug.org/tex-hyphen
+%
+%------------------------------------------------------------------------------
+%
+% The Icelandic Plain TeX hyphenation tables
+% as of Nov 2 1988.
+% Jorgen Pind, Institute of Lexicography, Univ. of Iceland
+% jorgen@lexis.hi.is (Internet)
+%
+% Mar 2 2004: Uploaded a new version to CTAN, with a clarified license
+% statement, at the request of the author, Jorgen Pind.
+% Kristinn Gylfason (kristgy@ieee.org)
+
+% This file may be distributed and/or modified under the
+% conditions of the LaTeX Project Public License, either version 1.2
+% of this license or (at your option) any later version.
+% The latest version of this license is in
+% http://www.latex-project.org/lppl.txt
+% and version 1.2 or later is part of all distributions of LaTeX
+% version 1999/12/01 or later.
+% \ No newline at end of file
diff --git a/Master/texmf-dist/tex/context/patterns/lang-it.hyp b/Master/texmf-dist/tex/context/patterns/lang-it.hyp
index 6a2b5be2bc6..07d5963c848 100644
--- a/Master/texmf-dist/tex/context/patterns/lang-it.hyp
+++ b/Master/texmf-dist/tex/context/patterns/lang-it.hyp
@@ -1,6 +1,6 @@
% generated by mtxrun --script pattern --convert
-% for comment and copyright, see ./lang-it.rme
+% for comment and copyright, see e:/tmp/patterns/lang-it.rme
% used:
diff --git a/Master/texmf-dist/tex/context/patterns/lang-it.pat b/Master/texmf-dist/tex/context/patterns/lang-it.pat
index da2bfc2b233..8e7ed87ebba 100644
--- a/Master/texmf-dist/tex/context/patterns/lang-it.pat
+++ b/Master/texmf-dist/tex/context/patterns/lang-it.pat
@@ -1,6 +1,6 @@
% generated by mtxrun --script pattern --convert
-% for comment and copyright, see ./lang-it.rme
+% for comment and copyright, see e:/tmp/patterns/lang-it.rme
% used: a b c d e f g h i j k l m n o p q r s t u v w x y z
diff --git a/Master/texmf-dist/tex/context/patterns/lang-la.hyp b/Master/texmf-dist/tex/context/patterns/lang-la.hyp
index 11ad9d17aae..08f73571b97 100644
--- a/Master/texmf-dist/tex/context/patterns/lang-la.hyp
+++ b/Master/texmf-dist/tex/context/patterns/lang-la.hyp
@@ -1,6 +1,6 @@
% generated by mtxrun --script pattern --convert
-% for comment and copyright, see ./lang-la.rme
+% for comment and copyright, see e:/tmp/patterns/lang-la.rme
% used:
diff --git a/Master/texmf-dist/tex/context/patterns/lang-la.pat b/Master/texmf-dist/tex/context/patterns/lang-la.pat
index b89e20b2a85..d9173db3ed2 100644
--- a/Master/texmf-dist/tex/context/patterns/lang-la.pat
+++ b/Master/texmf-dist/tex/context/patterns/lang-la.pat
@@ -1,6 +1,6 @@
% generated by mtxrun --script pattern --convert
-% for comment and copyright, see ./lang-la.rme
+% for comment and copyright, see e:/tmp/patterns/lang-la.rme
% used: a b c d e f g h i j k l m n o p q r s t u v x z æ œ
diff --git a/Master/texmf-dist/tex/context/patterns/lang-il.hyp b/Master/texmf-dist/tex/context/patterns/lang-lt.hyp
index cce19dd7d0d..9cbd13b63ed 100644
--- a/Master/texmf-dist/tex/context/patterns/lang-il.hyp
+++ b/Master/texmf-dist/tex/context/patterns/lang-lt.hyp
@@ -1,6 +1,6 @@
% generated by mtxrun --script pattern --convert
-% for comment and copyright, see ./lang-il.rme
+% for comment and copyright, see e:/tmp/patterns/lang-lt.rme
% used:
diff --git a/Master/texmf-dist/tex/context/patterns/lang-lt.pat b/Master/texmf-dist/tex/context/patterns/lang-lt.pat
new file mode 100644
index 00000000000..5af2c9f8fbd
--- /dev/null
+++ b/Master/texmf-dist/tex/context/patterns/lang-lt.pat
@@ -0,0 +1,1553 @@
+% generated by mtxrun --script pattern --convert
+
+% for comment and copyright, see e:/tmp/patterns/lang-lt.rme
+
+% used: a b c d e f g h i j k l m n o p r s t u v w y z ą č ė ę į š ū ų ž
+
+\patterns{
+.ap1
+.api1
+.ap3r
+.arbi1
+.arti1
+.as3p
+.at1
+.ata1
+.at3r
+.aš3v
+.dina1
+.ek3r
+.i2š3
+.iši2
+.kirti1
+.nu1
+.nusi1
+.pie2č
+.sam1
+.sida1
+.sk4
+.st4
+.su5kr
+.te3s2
+.uk3
+.u2š3
+.už1
+.įs4
+.šven1
+a1a2
+a1b
+a1c
+a2ch
+a1d
+a4dra
+a1e
+ae2l
+a1f
+2a1g
+a4gr
+ag3ra
+a5grio
+a5gro
+a1h
+a5inf
+ai4sk
+ai4tr
+a1j
+a1k
+ak2l
+ak2vi
+a2kėt
+a1l
+a3li
+a5lo1
+a3ly
+a3lė
+a3lū
+a1m
+a1n
+an3k2l
+an4sk
+an4tr
+a2o
+a1p
+ap1a4k
+ap3ei
+ap3i2m
+ap3l
+a3pr
+ap3s2
+a1r
+ar1eit
+a4rg
+ari4s
+a1s
+asi1
+asi5s
+a4sk
+as3kl
+a3sl
+as2mi
+as2mu
+a5s4n
+a4stu
+a1t
+at3aug
+ate5ist
+at3i2m
+ato1
+atp4
+a4tru
+at1ė2
+atū2ž
+a4u
+au4kl
+au4sk
+au4sl
+au4t3r
+a1v
+a1w
+a1y
+a1z
+a1ą
+2a1č
+a1ę
+a1ė2
+a1į
+a1š
+a3šn
+aš4tr
+aš2v
+a1ų
+a1ū2
+a1ž
+až2l
+ba3c
+balta1
+ba4sl
+2b1b
+2b1c
+4b3d
+bep4
+be3s2
+besi1
+be3t2
+2b1f
+2b1g
+2b1h
+b1j
+2b1k
+2b1l
+b2la
+b2liz
+3b2lo
+b2lu
+2b1m
+2b1n
+2b1p
+2b2r
+b3ri
+2b1s
+2b3t
+bu4k
+2b1v
+2b1w
+2b1z
+2b1č
+2b1š
+2b1ž
+car4
+2c1b
+2c1c
+2c1d
+2c1f
+2c1g
+3chi
+2c1k
+2c1l
+2c1m
+2c1n
+2c1p
+2c1r
+2c1s
+2c1t
+cu4
+cuk5
+2c1v
+2c1w
+2c1z
+2c1č
+2c1š
+2c1ž
+da3b4
+2d1b
+2d1c
+2d1d
+de4k
+dema1
+de4pr
+de4sp
+2d1f
+2d1g
+2d1h
+di4p
+di4s
+dis5k
+2d1j
+2d3k
+4d3l
+2d1m
+2d1n
+do3ri
+2d1p
+2d1r
+dro1
+dro2b
+d2rė
+4drų
+2d1s
+2d1t
+du2a
+du4k
+du5ka
+du4sl
+2d1v
+d3va
+dvi3a
+2d1w
+d4z
+2d1č
+2d1š
+d4ž
+džio1
+e1a2
+e2a3l
+eapi1
+eat1
+e1b2
+ebe1
+e3bl
+eb3r
+e1c
+e2ch
+e3d2
+ed3ri
+e4dro
+ed3rė
+e1e
+e1f
+e1g
+eg3ra
+e1h
+e1ie
+ei4k3l
+1ein
+ei4sk
+ei4sl
+2eis3t
+eist2ra
+ei2š1
+e1j
+e1k
+e3kr
+e1l
+e1m
+ema5s4
+2e1n
+en3k2l
+enk4la
+eno1
+ens4
+4enta
+enu1
+e2o
+e3or
+e3o2š
+e3p
+ep4li
+ep4r
+epra1
+epri1
+e1r
+ere3a4
+eri4s
+ero1
+erė2
+e1s
+esi5s
+es4k
+eska1
+e5sko
+e3s2v
+e1t
+e1u4
+euž3
+e1v
+e3vi
+e1w
+e1y
+e1z
+e1ą
+e1č
+e1ę
+e1ė
+e1į4
+eįp3
+eįs3k
+eįt3r
+e1š
+e3šn
+eš2v
+ešė3
+e1ų
+e1ū
+e1ž
+2f1b
+2f1c
+2f1d
+2f1f
+2f1g
+2f1h
+fi4s5
+2f1k
+2f1l
+2f1m
+2f1n
+2f1p
+2f1r
+fri1
+2f1s
+2f1t
+2f1v
+2f1w
+2f1z
+2f1č
+2f1š
+2f1ž
+gaš3
+2g1b
+2g1c
+2g1d
+ge4o1
+2g1f
+2g1g
+2g1h
+2g1k
+2g1l
+g2le
+g2lo
+2g1m
+2g1n
+3g2nų
+2g1p2
+3g2r
+grai2
+g3ran
+5g3re
+g4rei
+g3ri
+4g4rio
+g3ro.
+g4rą
+5grį
+4grų
+2g1s
+4g1t
+3gu
+2g1v
+2g1w
+gyva1
+2g1z
+2g1č
+2g1š
+2g1ž
+2h1b
+2h1c
+2h1d
+2h1f
+2h1g
+2h1h
+hi4b
+2h1k
+2h2l
+2h1m
+h2me
+2h1n
+2h1p
+2h1r
+2h1s
+2h1t
+2h1v
+2h1w
+2h1z
+2h1č
+2h1š
+2h1ž
+i2a
+ia5g4
+i3aiš
+ia3k
+i3antę
+i3antė
+iap4
+i3ar
+i3b2
+i1c
+ice1
+i1d
+id2r
+id3rė
+i2dėm
+i2e
+ie4d3r
+ie3g
+i3ei
+ie3kl
+i3ent
+ie4p5r
+ie4sk
+i1f
+2i1g
+i3g2l
+ig3ru
+2i1h
+i1i2
+i1j
+i1k
+i3k2n
+ik3r
+i1l
+ilo1
+i1m
+1imd
+4i1n
+in4kl
+5inv
+i2o
+io4g3r
+iok2
+io4pl
+i3or
+i1p
+i2p1j
+ip3ru
+i1r
+ira3s2
+i3ri
+4i1s
+i5sa
+i5si
+is4k
+i3sl
+is4li
+i5s4n
+i4ste
+isto1
+2i3t2
+i2u
+i1v
+i1w
+i1y
+i1z
+i2ą
+i1č
+i1ę
+i1ė2
+i1į
+i1š
+i3šn
+iš5t
+i4šv
+išė2
+1išš
+i2ų
+i2ū
+i3ž
+3ja.
+jauna1
+2j1b
+2j1c
+2j1d
+2j1f
+2j1g
+2j1h
+2j1j
+2j1k
+2j1l
+2j1m
+2j1n
+jot3
+jo4tv
+2j1p
+2j1r
+2j1s
+2j1t
+1ju
+2j1v
+2j1w
+2j1z
+2j1č
+2j1š
+1jū
+2j1ž
+3ka.
+5ka3d
+kak3
+ka4kl
+ka4pr
+3kar
+3kas
+3kati
+5kav
+kavar1
+ka3z2
+2k1b
+2k1c
+2k1d
+3ke
+ke4b3
+keren1
+2k1f
+2k1g
+2k1h
+k4i
+5ki.
+5kia
+3kib
+3kil
+5kit
+2k1k
+2k1l
+3k2la
+k4lan
+4kle.
+k2lel
+4klo.
+4klu.
+k2ly
+4klą
+4klų
+2k1m
+2k1n
+3ko
+2k1p
+2k2r
+k4rau
+kris2
+kri5st
+k3ro
+k4rov
+4k3ru
+5krun
+k4ry
+k5rą
+2k1s
+k4sk
+ks3l
+k4s3p
+4k1t
+k3ta
+3ku
+4kub
+ku4k
+ku4pr
+2k1v
+k2va
+k3vo
+k2vė
+2k1w
+3kyt
+2k1z
+5ką
+2k1č
+2k1š
+kš2ly
+kšė3
+2k1ž
+3la.
+lap4s3to
+2l1b
+lb3r
+2l1c
+2l1d
+3le.
+le3c
+le4gr
+4leč
+2l1f
+2l1g
+lg3s2t
+2l1h
+3li.
+li4a
+5li4o
+3lių
+2l1j
+2l1k
+lko1
+2l1l
+2l1m
+2l1n
+3lo.
+log4
+4lop
+4l1p
+lpna1
+2l1r
+4l1s
+l4sk
+l4s3p
+4l3t
+3lu.
+2lup
+4l1v
+2l1w
+3lyč
+2l1z
+3lą
+2l1č
+3lęs
+3lėm
+3lės
+2lėč
+3lį4
+4l1š
+3lų
+2l1ž
+m2a
+2m3aid
+3mas
+mas3ki
+2m1b
+mb3r
+2m1c
+2m1d
+me3c
+meis1
+2m1f
+2m1g
+2m1h
+mi4gl
+mi4gr
+min4s
+mi4tr
+2m1k
+2m1l
+2m1m
+2m1n
+m2o
+2mod
+2m1p
+m4pl
+m3pr
+2m1r
+4m1s
+2m1t
+m3ta
+3muo
+2m1v
+2m1w
+2m1z
+2m1č
+2m1š
+2m1ž
+na3s2
+na3t2
+2n1b
+2n1c
+ncen1
+2n1d
+n3drė
+ne1
+neg4
+nei2m
+ne4o3
+neor2
+nerė3
+nesi1
+ne3sl
+ne3s2t
+ne3t2
+neįs3t
+2n1f
+4n1g
+ng3l
+ng4r
+2n1h
+ni4s
+2n1j
+2n1k
+nk3la
+nk3r
+n3kry
+2n1l
+2n1m
+2n1n
+5no
+2n1p
+2n1r
+4n1s
+ns4ku
+ns3l
+n4s3p
+nst3r
+4n1t
+n3ta
+nt4pl
+n3tru
+nt2ruo
+nua4
+nu3b2
+nu3g
+nu1i
+nuk2
+nu4o3
+nuos2
+nu5s4
+2n1v
+2n1w
+2n1z
+4n1č
+2n1š
+2n1ž
+o1a
+o1b
+o1c
+o1d
+o3dr
+o1e
+o2et
+o1f
+o1g
+o1h
+o1i
+o1j
+o1k
+o3kr
+o1l
+olen1
+o1m
+om4pr
+o1n
+ono1
+o1o2
+o1p
+o1r
+o2rie
+ori4s
+or4tr
+o2rę
+o1s
+o3sl
+os3le
+os4lo
+o3s2v
+o3t2
+oto1
+o1v
+o1w
+o1y
+o1z
+o1ą
+o1č
+o1ę
+o1ė
+o1į
+o1š
+oš2v
+o1ų
+o1ū
+o1ž
+pa3
+pad2
+pai2l
+pai2m
+pai2r
+3pan
+pap4
+p2ar
+parsi1
+pa4r1ė2
+pas2
+pa5sr
+p2at2
+2p1b
+4p1c
+4p3d2
+p2e
+per1
+pe2re
+pe2r3im
+per3s
+pe2rė
+2p1f
+2p1g
+2p1h
+p2i
+p3ieš
+2p3k2
+3p2l
+p3le
+p3li
+4plio
+p4liu
+p3lo
+p4loj
+p4lu
+p4ly
+2p1m
+4p1n
+3po
+po4g
+poli1
+2p1p
+2p2r
+p3rai
+prau2si
+p3raš
+p3ri
+pris2
+p5ro.
+p3rom
+p3ry
+4prą
+p3rė
+p3rū
+4p1s
+psi1
+p5s4k
+p4s3ty
+p3s2v
+4p3t2
+3p4u
+pusiau1
+pu4sk
+pu4sl
+pu4tr
+2p1v
+2p1w
+p2y
+2p1z
+2p1č
+p2ė
+4p3š2
+4p3ž
+r2a
+3ra.
+ra3b
+3rac
+ra1im
+rai4tį
+ra3kr
+3ral
+3ram
+ras4l
+ra3sm
+rau4ka.
+3rav
+2r1b
+rbo1
+r3b4r
+2r1c
+4r1d
+2reb
+4rein
+4reit
+3rel
+re4p5
+5res
+res3l
+3ret
+2r1f
+2r1g
+2r1h
+r2i
+3ri.
+ri3d
+3rij
+ri3kr
+2ril
+ri2ma.
+2r3imt
+3rio
+ri3p
+risi1
+ri3st
+rivin1
+3rią
+3rių
+2riū
+4r1k
+rk3ly
+r3k4r
+4r1l
+2r1m
+4r1n
+r2o
+3rod2
+ro4gr
+3roj
+3rok
+3ron
+3rop
+2r3org
+5ros
+2r1p
+r3p4r
+2r1r
+4r1s
+rs4ko.
+rs4p
+4r1t
+rti5k4
+rti3s2
+r3t2r
+r3t2v
+r2u
+2ruk
+3rul
+4run
+3ruos
+2rup
+3rus
+ru4sk
+4ruto
+4r1v
+2r1w
+2r1z
+3rą
+4rąs
+4r1č
+4r1š
+r3š2l
+r3š2m
+5rų
+2r1ž
+sala1
+2s1amž
+san5t
+sarka1
+2s3b
+2s1c
+2s3d
+s2e
+se4kr
+senat4
+2s1f
+2s1g
+2s1h
+si3auk
+si3a2v
+si3a2š
+si3d
+si3k4
+si3p4
+si3s2
+si5š2v
+3s2k2
+4sk.
+s5ka.
+4ske
+5s4ken
+5ski
+5s4kle
+5sk4r
+5skub
+sk3va
+sk3vi
+5sky
+4ską
+5skę
+2s2l
+3sle
+s3li
+s3lo
+4s3lu
+4s3lū
+2s1m
+4sme.
+4smę
+4s3n
+so4dr
+3s2p
+s3pe
+4spn
+4spu
+4s1r
+s3ri
+2s1s
+2s1t
+s2tal
+s2ten
+4stin
+s2tod
+s2toj
+3s2tov
+st2rai
+st2v
+4stę
+4s3tė
+4stų
+s2tū
+su1
+su3bl
+su3d2
+su3g2
+suk2l
+su3s2
+susi1
+suž4
+2s1v
+s2ve
+3s2vy
+2s1w
+2s1z
+są3
+4s3č
+5sė
+2s1š
+2s1ž
+t2a
+2tab
+ta3kr
+ta5s
+2tat
+taura1
+2tač
+2t1b
+2t1c
+2t1d
+2teb
+3tem
+te4o
+te3t2
+2t1f
+4t3g
+2t1h
+t2i
+ti4gr
+ti4k3l
+3tin
+2tip
+4t3j
+4t3k
+t4kl
+4t3l
+4t3m
+2t1n
+t2o
+3toje
+2tolį
+to3s2
+2tow
+2t3p
+t4pj
+tp3lū
+tp4r
+2t1r
+4trio
+t2riš
+4tro
+4trą
+4trų
+4t3s4
+tsi1
+tskri1
+4t1t
+tua4
+3tur
+2t1v
+t2vo
+4tvėj
+2t1w
+3tyd
+2t1z
+2t1č
+3tę
+t2ėm
+t3ėmu
+t3ėmę
+t3ėmė
+2t3š2
+2t3ž
+u1a2
+u3ai
+u1b
+u2bj
+u1c
+u1d
+u1e2
+u1f
+u1g
+ug4r
+ug5rio
+u1h
+u1i2m
+u5in
+ui2r
+u1j
+u1k
+u3kl
+uk2le
+u3kr
+u3kv
+u5kų
+u1l
+u1m
+u1n
+u2o
+u3or
+uo4sl
+u3p
+up4l
+up3ro
+u1r
+urk2
+ur3kl
+u5ro1
+ur3s2
+u1s
+u2s1al
+u3sl
+us3la
+us3le
+usva1
+us3ve
+u3t2
+uto1
+2utr
+u1u
+u1v
+u1w
+u1y
+u1z
+u1ą
+u1č
+u1ę
+u1ė2
+u1į
+u1š
+u3š2l
+u3š2n
+uš2v
+u1ų
+u1ū2
+u1ž
+uži2m
+u3žl
+už3v
+už1ė2
+3va.
+vap4
+va3t
+2v1b
+2v1c
+2v1d
+v2e
+2vep
+3ves
+2v1f
+2v1g
+2v1h
+viesia1
+vi4s5k
+vi4t3r
+2v1j
+2v1k
+2v1l
+2v1m
+2v1n
+2v1p
+2v1r
+2v4s
+2v1t
+2v1v
+2v1w
+2vydau
+2v1z
+3vą
+2v1č
+3vė
+4vėp
+2v1š
+2v1ž
+2w1b
+2w1c
+2w1d
+2w1f
+2w1g
+2w1h
+2w1k
+2w1l
+2w1m
+2w1n
+2w1p
+2w1r
+2w1s
+2w1t
+2w1v
+2w1w
+2w1z
+2w1č
+2w1š
+2w1ž
+y1a
+y1b
+y1c
+y1d
+y1e
+y1f
+y1g
+ygia1
+y1h
+y1i
+y1j
+y1k
+y4k3l
+y1l
+y1m
+y1n
+y1o
+y1p
+y3r
+y1s
+y4sk
+y1t
+y1u
+y1v
+y1w
+y1y
+y1z
+y1ą
+y1č
+y1ę
+y1ė
+y1į
+y1š
+y1ų
+y1ū
+y1ž
+2z1b
+2z1c
+2z1d
+2z1f
+2z1g
+2z1h
+2z1k
+2z1l
+2z1m
+2z1n
+2z1p
+2z1r
+2z1s
+2z1t
+2z1v
+2z1w
+2z1z
+2z1č
+2z1š
+2z1ž
+ą1a
+ą1b
+ą1c
+ą1d
+ą1e
+ą1f
+ą1g
+ą1h
+ą1i
+ą1j
+ą1k
+ą1l
+ą1m
+ą1n
+ą1o
+ą1p
+ą1r
+ą1s
+ą1t
+ą1u
+ą1v
+ą1w
+ą1y
+ą1z
+ą1ą
+ą1č
+ą1ę
+ą1ė
+ą1į
+ą1š
+ą1ų
+ą1ū
+ą1ž
+2č1b
+2č1c
+2č1d
+čeko1
+2č1f
+2č1g
+2č1h
+čin1
+2č1k
+2č1l
+2č1m
+2č1n
+2č1p
+2č1r
+2č1s
+2č1t
+2č1v
+2č1w
+2č1z
+2č1č
+2č1š
+2č1ž
+ę1a
+ę1b
+ę1c
+ę1d
+ę1e
+ę1f
+ę1g
+ę1h
+ę1i
+ę1j
+ę1k
+ę1l
+ę1m
+ę1n
+ę1o
+ę1p
+ę1r
+ę1s
+ę1t
+ę1u
+ę1v
+ę1w
+ę1y
+ę1z
+ę1ą
+ę1č
+ę1ę
+ę1ė
+ę1į
+ę1š
+ę1ų
+ę1ū
+ę1ž
+ė1a
+ė1b
+ė1c
+ė1d
+ė1e
+ė1f
+ė1g
+ė1h
+ė1i
+ė1j
+ė1k
+ė4k3l
+2ė3l
+ė1m
+ė3me
+ė1n
+ė1o
+ė1p
+ė1r
+2ė1s
+ės3l
+2ė3t
+ė4tr
+ė1u
+ė1v
+ė1w
+ė1y
+ė1z
+ė1ą
+ė1č
+ė1ę
+ė1ė
+ė1į
+ė1š
+ė1ų
+ė1ū
+ė1ž
+į1a
+į1b
+į1c
+į1d2
+į2e
+į1f
+į4g
+į1h
+į1i
+į1j
+į2k4
+į2l
+į2m
+į1n
+į1o
+į4p
+į2r
+į1s
+įsi1
+įs3l
+įs2m
+įs2r
+įst2
+į2t2
+į1u
+į2v
+į1w
+į1y
+į1z
+į1ą
+į1č
+į1ę
+į1ė2
+į1į
+į1š
+į1ų
+į1ū
+į1ž
+2š1b2
+2š1c
+2š3d2
+š1ei
+še2v
+2š1f
+2š1g4
+2š1h
+2š5ist
+šiuk1
+2š1k2
+2š1l
+š2lij
+š2lu
+3šly
+2š1m
+2š1n
+š2ne
+šno1
+šo2r
+2š1p4
+2š1r
+2š3s4
+šsi1
+šsikap1
+4š3t2
+šu4š
+3š1v
+š2vi
+š4vyd
+2š1w
+2š1z
+4š3č
+šė2j
+2š1š
+2š1ž
+ų1a
+ų1b
+ų1c
+ų1d
+ų1e
+ų1f
+ų1g
+ų1h
+ų1i
+ų1j
+ų1k
+ų1l
+ų1m
+ų1n
+ų1o
+ų1p
+ų1r
+ų1s
+ų1t
+ų1u
+ų1v
+ų1w
+ų1y
+ų1z
+ų1ą
+ų1č
+ų1ę
+ų1ė
+ų1į
+ų1š
+ų1ų
+ų1ū
+ų1ž
+ū1a
+ū1b
+ū1c
+ū1d
+ū1e
+ū1f
+ū1g
+ū1h
+ū1i
+ū1j
+ū1k
+ū4k3l
+ū1l
+ū1m
+ū1n
+ū1o
+ū1p
+ū1r
+ū1s
+ū4s3k
+ūs3l
+ūs3t
+ū1t
+ū1u
+ū1v
+ū1w
+ū1y
+ū1z
+ū1ą
+ū1č
+ū1ę
+ū1ė
+ū1į
+ū1š
+ū1ų
+ū1ū
+ū1ž
+žant4
+žants5
+2ž3b2
+2ž1c
+2ž3d2
+žen1
+2ž3f4
+2ž3g
+2ž1h
+ži3mu
+žio3
+ž1j
+2ž3k2
+2ž1l
+ž2lu
+4ž1m
+2ž1n
+2ž3p
+2ž1r
+2ž1s
+žsi1
+ž4sk
+ž4s5l
+žs3t
+4ž3t2
+ž2u
+žu3s2
+3ž2v
+ž4vi
+ž3vo
+2ž1w
+2ž1z
+2ž1č
+žįs3
+2ž1š
+2ž1ž} \ No newline at end of file
diff --git a/Master/texmf-dist/tex/context/patterns/lang-lt.rme b/Master/texmf-dist/tex/context/patterns/lang-lt.rme
new file mode 100644
index 00000000000..7def4fe7242
--- /dev/null
+++ b/Master/texmf-dist/tex/context/patterns/lang-lt.rme
@@ -0,0 +1,47 @@
+% generated by mtxrun --script pattern --convert
+
+% This file is part of hyph-utf8 package and resulted from
+% semi-manual conversions of hyphenation patterns into UTF-8
+% in October 2008 by Mojca & Arthur.
+%
+% Source available on:
+% - http://www.vtex.lt/tex/littex/index.html
+%
+% Authors:
+%
+% First version in LT encoding (modified T1):
+% - Vytas Statulevičius <vytas at vtex.lt>
+% - Yannis Haralambous
+% (Vilnius, March 4, 1992)
+% Conversion into Latin 7 and aditional support files (babel, fonts):
+% - Sigitas Tolusis <sigitas at vtex.lt>
+% (2002-11-20)
+% Adaptation for hyph-utf8:
+% - Mojca & Arthur (see below), October 2008
+%
+% The copyright statement of this file is:
+%
+% Do with this file whatever needs to be done in future for the sake of
+% "a better world" as long as you respect the copyright of original file.
+%
+% If you want to change this file, rather than uploading directly to CTAN,
+% we would be grateful if you could send it to us (http://tug.org/tex-hyphen)
+% or ask for credentials for SVN repository and commit it yourself;
+% we will then upload the whole "package" to CTAN.
+%
+% For more unformation see
+%
+% http://tug.org/tex-hyphen
+%
+%------------------------------------------------------------------------------
+%
+% A note about lefthyphenmin/righthyphenmin (by Sigitas, February 2009):
+%
+% At the moment the lefthyphenmin & righthyphenmin are both set to 2.
+% The Lithuanian patterns were build earlier then the latest grammatical rules
+% took place in 1997. At that time it was forbidden to leave one character at boundary.
+% One may change it to one now, but from typographical point of view there is no need to do
+% any changes. Even more, changing lefthyphen and righthyphen to 1 requires
+% to review and maybe rebuild the patterns file.
+%
+%------------------------------------------------------------------------------ \ No newline at end of file
diff --git a/Master/texmf-dist/tex/context/patterns/lang-mn.hyp b/Master/texmf-dist/tex/context/patterns/lang-mn.hyp
new file mode 100644
index 00000000000..bd1591d8d96
--- /dev/null
+++ b/Master/texmf-dist/tex/context/patterns/lang-mn.hyp
@@ -0,0 +1,8 @@
+% generated by mtxrun --script pattern --convert
+
+% for comment and copyright, see e:/tmp/patterns/lang-mn.rme
+
+% used:
+
+\hyphenation{
+} \ No newline at end of file
diff --git a/Master/texmf-dist/tex/context/patterns/lang-mn.pat b/Master/texmf-dist/tex/context/patterns/lang-mn.pat
new file mode 100644
index 00000000000..a54630e4997
--- /dev/null
+++ b/Master/texmf-dist/tex/context/patterns/lang-mn.pat
@@ -0,0 +1,995 @@
+% generated by mtxrun --script pattern --convert
+
+% for comment and copyright, see e:/tmp/patterns/lang-mn.rme
+
+% used: а б в г д е ж з и й к л м н о п р с т у ф х ц ч ш щ ъ ы ь э ю я ё ү ө
+
+\patterns{
+1ба
+1бе
+1бё
+1би
+1бо
+1бө
+1бу
+1бү
+1бы
+1бь2ю
+1бэ
+1бю
+1бя
+1ва
+1ве
+1вё
+1ви
+1во
+1вө
+1ву
+1вү
+1вы
+1вь2ю
+1вэ
+1вю
+1вя
+1га
+1ге
+1гё
+1ги
+1го
+1гө
+1гу
+1гү
+1гы
+1гь2ю
+1гэ
+1гю
+1гя
+1да
+1де
+1дё
+1ди
+1до
+1дө
+1ду
+1дү
+1ды
+1дь2ю
+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ю
+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мё
+1ми
+1мо
+1мө
+1му
+1мү
+1мы
+1мэ
+1мю
+1мя
+1на
+1не
+1нё
+1ни
+1но
+1нө
+1ну
+1нү
+1ны
+1нь2ю
+1нэ
+1ню
+1ня
+1па
+1пе
+1пё
+1пи
+1по
+1пө
+1пу
+1пү
+1пы
+1пь2ю
+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та
+1те
+1тё
+1ти
+1то
+1тө
+1ту
+1тү
+1ты
+1ть2ю
+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цё
+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шү
+1шэ
+1шю
+1шя
+1ща
+1ще
+1щи
+1щу
+2а1я
+2аа
+2б3ю4у
+2б3ю4ү
+2в3ю4у
+2в3ю4ү
+2г3ю4у
+2г3ю4ү
+2д3ю4у
+2д3ю4ү
+2ж3ю4у
+2ж3ю4ү
+2з3ю4у
+2з3ю4ү
+2и1е
+2й1е
+2й1ё
+2й1ю
+2й1я
+2л3ю4у
+2л3ю4ү
+2м3ю4у
+2м3ю4ү
+2н3ю4у
+2н3ю4ү
+2о1е
+2о1ё
+2о1я
+2оо
+2ө1е
+2өө
+2п3ю4у
+2п3ю4ү
+2р3ю4у
+2р3ю4ү
+2с3ю4у
+2с3ю4ү
+2т3ю4у
+2т3ю4ү
+2у1я
+2у3ю
+2уу
+2үү
+2х3ю4у
+2х3ю4ү
+2ц3ю4у
+2ц3ю4ү
+2ч3ю4у
+2ч3ю4ү
+2ш3ю4у
+2ш3ю4ү
+2ъ3е
+2ъ3ё
+2ъ3ю
+2ъ3я
+2ь3е
+2ь3ё
+2ь3я
+2э3е
+2ээ
+2ю3а
+2ю3и
+2ю3о
+.авто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с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к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о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с4к
+.био3с4п
+.био3с4т
+.био3с4ф
+.био3х4р
+.био3э4к
+.био3э4л
+.био3э4н
+.био3э4т
+.бь4
+.въ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г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н
+.гипе2р3а4д
+.гипе2р3а4з
+.гипе2р3а4к
+.гипе2р3а4л
+.гипе2р3а4м
+.гипе2р3а4р
+.гипе2р3а4ц
+.гипе2р3а4э
+.гипе2р3е4а
+.гипе2р3е4м
+.гипе2р3е4р
+.гипе2р3е4с
+.гипе2р3и4з
+.гипе2р3и4м
+.гипе2р3и4н
+.гипе2р3о4в
+.гипе2р3о4к
+.гипе2р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а4к
+.гомо3а4т
+.гомо3к4л
+.гомо3п4л
+.гомо3с4п
+.гомо3т4р
+.гомо3ф4т
+.гомо3э4н
+.гомо3э4п
+.гь4
+.ди1а3г4н
+.ди4ст5ри
+.ди4ст5ро
+.диа3д4р
+.диа3к4л
+.диа3к4р
+.диа3с4к
+.диа3с4п
+.диа3с4т
+.диа3т4р
+.диа3ф4р
+.диазо3т4р
+.диазо3э4т
+.диазо3э4ф
+.дина3т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п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тр
+.инте2р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а4г
+.ко3а4д
+.ко3а4к
+.ко3и4н
+.ко3о4п
+.ко3о4р
+.ко3п4л
+.ко3э4ф
+.кь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э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о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а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к4р
+.мото3п4л
+.мото3п4р
+.мото3с4п
+.мото3ш4л
+.мь4
+.на3у
+.нано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с
+.нь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к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к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и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р
+.пъ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т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ф
+.съ4
+.сь4
+.ть4
+.фь4
+.хризо3и4д
+.хризо3п4р
+.хризо3с4т
+.хь4
+.элек3тро
+.элек3тро3а4в
+.элек3тро3а4г
+.элек3тро3а4к
+.элек3тро3а4н
+.элек3тро3а4э
+.элек3тро3б4л
+.элек3тро3и4з
+.элек3тро3и4с
+.элек3тро3о4б
+.элек3тро3о4в
+.элек3тро3о4г
+.элек3тро3о4д
+.элек3тро3о4к
+.элек3тро3о4п
+.элек3тро3о4с
+.элек3тро3о4т
+.элек3тро3о4ф
+.элек3тро3о4ч
+.элек3тро3с4т
+.элек3тро3т4р
+.элек3тро3э4к
+.элек3тро3э4н
+.элек3тро3э4р
+3авто
+3актив
+3аппа
+3г4рад
+3г4рам
+3г4раф
+3им4пул
+3ин3ст4ру
+3ин3те4р
+3к4ва
+3к4лас
+3к4ри
+3оп3тик
+3п3роек
+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ш2таб
+3ш2тат
+3э4к5ви
+3э4ко
+3э4лек4т
+3э4леме
+3э4нерг
+3э4нтро
+3эффе} \ No newline at end of file
diff --git a/Master/texmf-dist/tex/context/patterns/lang-mn.rme b/Master/texmf-dist/tex/context/patterns/lang-mn.rme
new file mode 100644
index 00000000000..338ec58fc81
--- /dev/null
+++ b/Master/texmf-dist/tex/context/patterns/lang-mn.rme
@@ -0,0 +1,86 @@
+% generated by mtxrun --script pattern --convert
+
+% This file is part of hyph-utf8 package and resulted from
+% semi-manual conversions of hyphenation patterns into UTF-8 in June 2008.
+%
+% Source: mnhyphn.tex (2008-03-30)
+% Author: Dorjgotov Batmunkh <bataak at gmail.com>
+%
+% The above mentioned file should become obsolete,
+% and the author of the original file should preferaby modify this file instead.
+%
+% Modificatios were needed in order to support native UTF-8 engines,
+% but functionality (hopefully) didn't change in any way, at least not intentionally.
+% This file is no longer stand-alone; at least for 8-bit engines
+% you probably want to use loadhyph-foo.tex (which will load this file) instead.
+%
+% Modifications were done by Jonathan Kew, Mojca Miklavec & Arthur Reutenauer
+% with help & support from:
+% - Karl Berry, who gave us free hands and all resources
+% - Taco Hoekwater, with useful macros
+% - Hans Hagen, who did the unicodifisation of patterns already long before
+% and helped with testing, suggestions and bug reports
+% - Norbert Preining, who tested & integrated patterns into TeX Live
+%
+% However, the "copyright/copyleft" owner of patterns remains the original author.
+%
+% The copyright statement of this file is thus:
+%
+% Do with this file whatever needs to be done in future for the sake of
+% "a better world" as long as you respect the copyright of original file.
+% If you're the original author of patterns or taking over a new revolution,
+% plese remove all of the TUG comments & credits that we added here -
+% you are the Queen / the King, we are only the servants.
+%
+% If you want to change this file, rather than uploading directly to CTAN,
+% we would be grateful if you could send it to us (http://tug.org/tex-hyphen)
+% or ask for credentials for SVN repository and commit it yourself;
+% we will then upload the whole "package" to CTAN.
+%
+% Before a new "pattern-revolution" starts,
+% please try to follow some guidelines if possible:
+%
+% - \lccode is *forbidden*, and I really mean it
+% - all the patterns should be in UTF-8
+% - the only "allowed" TeX commands in this file are: \patterns, \hyphenation,
+% and if you really cannot do without, also \input and \message
+% - in particular, please no \catcode or \lccode changes,
+% they belong to loadhyph-foo.tex,
+% and no \lefthyphenmin and \righthyphenmin,
+% they have no influence here and belong elsewhere
+% - \begingroup and/or \endinput is not needed
+% - feel free to do whatever you want inside comments
+%
+% We know that TeX is extremely powerful, but give a stupid parser
+% at least a chance to read your patterns.
+%
+% For more unformation see
+%
+% http://tug.org/tex-hyphen
+%
+%------------------------------------------------------------------------------
+%
+%% mnhyphn.tex v1.2 2008/03/23 (2010/04/03)
+%% Copyright 2007-2010 by Dorjgotov Batmunkh, National University of Mongolia
+%% email bataak@gmail.com
+%
+% This work may be distributed and/or modified under the
+% conditions of the LaTeX Project Public License, either version 1.3
+% of this license or (at your option) any later version.
+% The latest version of this license is in
+% http://www.latex-project.org/lppl.txt
+% and version 1.3 or later is part of all distributions of LaTeX
+% version 2005/12/01 or later.
+%
+% Special thanks to: Jim Hefferon and Robin Fairbairns
+%
+% There are few basic rules in mongolian
+%
+% 1. If there is a consonant then it can use hyphen before it.
+% And if there're two consonants then it can use hyphen before second consonant.
+% Are there three consonants then it can put hyphen before third consonant,
+% also are there four consonants then it can use hyphen before fourth consonant.
+% 2. In the case of hardsign or softsign, it's possible to hyphen after these signs.
+% For instance, байгуулъ-я, үзүүль-е
+% 3. However one vowel can be belong to a syllable, it's not possible to use hyphen.
+% \ No newline at end of file
diff --git a/Master/texmf-dist/tex/context/patterns/lang-nb.hyp b/Master/texmf-dist/tex/context/patterns/lang-nb.hyp
index 4c0b225c8be..cc740c93010 100644
--- a/Master/texmf-dist/tex/context/patterns/lang-nb.hyp
+++ b/Master/texmf-dist/tex/context/patterns/lang-nb.hyp
@@ -1,6 +1,6 @@
% generated by mtxrun --script pattern --convert
-% for comment and copyright, see ./lang-nb.rme
+% for comment and copyright, see e:/tmp/patterns/lang-nb.rme
% used: D N S a b c d e f g h i j k l m n o p r s t u v w y z å æ ø ü
diff --git a/Master/texmf-dist/tex/context/patterns/lang-nb.pat b/Master/texmf-dist/tex/context/patterns/lang-nb.pat
index 992e67d6c73..1102ee60ca5 100644
--- a/Master/texmf-dist/tex/context/patterns/lang-nb.pat
+++ b/Master/texmf-dist/tex/context/patterns/lang-nb.pat
@@ -1,6 +1,6 @@
% generated by mtxrun --script pattern --convert
-% for comment and copyright, see ./lang-nb.rme
+% for comment and copyright, see e:/tmp/patterns/lang-nb.rme
% used: a b c d e f g h i j k l m n o p q r s t u v w x y z å æ è é ê ò ó ô ø
diff --git a/Master/texmf-dist/tex/context/patterns/lang-nl.hyp b/Master/texmf-dist/tex/context/patterns/lang-nl.hyp
index 2cad20e7149..a65f61ed405 100644
--- a/Master/texmf-dist/tex/context/patterns/lang-nl.hyp
+++ b/Master/texmf-dist/tex/context/patterns/lang-nl.hyp
@@ -1,6 +1,6 @@
% generated by mtxrun --script pattern --convert
-% for comment and copyright, see ./lang-nl.rme
+% for comment and copyright, see e:/tmp/patterns/lang-nl.rme
% used: a b c d e f g h i j k l m n o p r s t u v w
diff --git a/Master/texmf-dist/tex/context/patterns/lang-nl.pat b/Master/texmf-dist/tex/context/patterns/lang-nl.pat
index b56bc6ebbf6..205b43700ec 100644
--- a/Master/texmf-dist/tex/context/patterns/lang-nl.pat
+++ b/Master/texmf-dist/tex/context/patterns/lang-nl.pat
@@ -1,6 +1,6 @@
% generated by mtxrun --script pattern --convert
-% for comment and copyright, see ./lang-nl.rme
+% for comment and copyright, see e:/tmp/patterns/lang-nl.rme
% used: a b c d e f g h i j k l m n o p q r s t u v w x y z ä ç è é ê ë î ï ñ ö û ü
diff --git a/Master/texmf-dist/tex/context/patterns/lang-nn.hyp b/Master/texmf-dist/tex/context/patterns/lang-nn.hyp
index 45e028584c8..0b30104cdab 100644
--- a/Master/texmf-dist/tex/context/patterns/lang-nn.hyp
+++ b/Master/texmf-dist/tex/context/patterns/lang-nn.hyp
@@ -1,6 +1,6 @@
% generated by mtxrun --script pattern --convert
-% for comment and copyright, see ./lang-nn.rme
+% for comment and copyright, see e:/tmp/patterns/lang-nn.rme
% used: D N S a b c d e f g h i j k l m n o p r s t u v w y z å æ ø ü
diff --git a/Master/texmf-dist/tex/context/patterns/lang-nn.pat b/Master/texmf-dist/tex/context/patterns/lang-nn.pat
index b0531f596e6..ff12a14a73a 100644
--- a/Master/texmf-dist/tex/context/patterns/lang-nn.pat
+++ b/Master/texmf-dist/tex/context/patterns/lang-nn.pat
@@ -1,6 +1,6 @@
% generated by mtxrun --script pattern --convert
-% for comment and copyright, see ./lang-nn.rme
+% for comment and copyright, see e:/tmp/patterns/lang-nn.rme
% used: a b c d e f g h i j k l m n o p q r s t u v w x y z å æ è é ê ò ó ô ø
diff --git a/Master/texmf-dist/tex/context/patterns/lang-no.hyp b/Master/texmf-dist/tex/context/patterns/lang-no.hyp
deleted file mode 100644
index bbdd58e4df4..00000000000
--- a/Master/texmf-dist/tex/context/patterns/lang-no.hyp
+++ /dev/null
@@ -1,118 +0,0 @@
-% context hyphenation file, see lang-all.xml for original comment
-
-% source of data: nohyphbx.tex
-
-% begin description data
-
-% <!-- copied from lang-all.xml
-%
-% <?xml version='1.0' standalone='yes'?>
-%
-% <description language='no'>
-% <sourcefile>nohyph.tex</sourcefile>
-% <title>TeX hyphenation patterns for the Norwegian language</title>
-% <copyright>
-% <year>2005</year>
-% <owner>Rune Kleveland with patches from Ole Michael Selberg</owner>
-% <comment>nohyphbx.tex</comment>
-% </copyright>
-% <copyright>
-% <year>200+</year>
-% <owner>Rune Kleveland</owner>
-% <comment>nohyphb.tex</comment>
-% </copyright>
-% <copyright>
-% <year>199+</year>
-% <owner>Dag Langmyhr and student</owner>
-% <comment>nohyph2.tex</comment>
-% </copyright>
-% <copyright>
-% <year>199+</year>
-% <owner>Ivar Aavatsmark and others</owner>
-% <comment>nohyph.tex sometimes named nohyph1.tex</comment>
-% </copyright>
-% <copyright>
-% <year>1992,1993</year>
-% <owner>Ivar Aavatsmark</owner>
-% <comment>nohyphen.tex based on danhyph.tex</comment>
-% </copyright>
-% <copyright>
-% <year>1994</year>
-% <owner>Preben Randhol, Jon Martin Solaas</owner>
-% </copyright>
-% <copyright>
-% <year>1995</year>
-% <owner>Thomas Esser (te@dbs.uni-hannover.de)</owner>
-% <comment>Make patterns work with non-T1 encoding</comment>
-% </copyright>
-% </description>
-%
-% end of copy -->
-
-% end description data
-
-% begin hyphenation data
-
-\hyphenation {
-and-ror
-and-ro-ren
-atten-de
-aust-røn
-aviser
-betre
-borta-for
-bortan-for
-borte-fra
-bort-om
-bort-over
-bortre
-Dansk-øya
-der-iblant
-der-ifra
-der-igjen-nom
-der-imot
-dess-uak-tet
-dit-over
-esprit
-finger-spitzen-ge-fühl
-finger-spitz-ge-fühl
-fram-ifrå
-før-enn
-hen-imot
-her-etter
-her-etter-dags
-He-ro-des
-høyere-lig-gen-de
-høyt-ærede
-gi-vet-vis
-kvar-and-re
-lands-øl
-lands-ølet
-lands-ølets
-langt-ifra
-Mosk-va
-Mosk-vas
-ned-imot
-noens
-Not-odden
-nøye-reg-nen-de
-opp-imot
-oven-ikjøpet
-promp-te
-pyrrhus-seier
-spleen
-sel-ves-te
-smal-enden
-sørpe-is
-sørpe-isen
-skrov-is
-skrov-isen
-Steins-land
-Steins-dalen
-syd-enden
-tvert-om
-velan
-}
-
-% end hyphenation data
-
diff --git a/Master/texmf-dist/tex/context/patterns/lang-no.pat b/Master/texmf-dist/tex/context/patterns/lang-no.pat
deleted file mode 100644
index e61c157b5bf..00000000000
--- a/Master/texmf-dist/tex/context/patterns/lang-no.pat
+++ /dev/null
@@ -1,26818 +0,0 @@
-% context pattern file, see lang-all.xml for original comment
-
-% source of data: nohyphbx.tex
-
-% begin description data
-
-% <!-- copied from lang-all.xml
-%
-% <?xml version='1.0' standalone='yes'?>
-%
-% <description language='no'>
-% <sourcefile>nohyph.tex</sourcefile>
-% <title>TeX hyphenation patterns for the Norwegian language</title>
-% <copyright>
-% <year>2005</year>
-% <owner>Rune Kleveland with patches from Ole Michael Selberg</owner>
-% <comment>nohyphbx.tex</comment>
-% </copyright>
-% <copyright>
-% <year>200+</year>
-% <owner>Rune Kleveland</owner>
-% <comment>nohyphb.tex</comment>
-% </copyright>
-% <copyright>
-% <year>199+</year>
-% <owner>Dag Langmyhr and student</owner>
-% <comment>nohyph2.tex</comment>
-% </copyright>
-% <copyright>
-% <year>199+</year>
-% <owner>Ivar Aavatsmark and others</owner>
-% <comment>nohyph.tex sometimes named nohyph1.tex</comment>
-% </copyright>
-% <copyright>
-% <year>1992,1993</year>
-% <owner>Ivar Aavatsmark</owner>
-% <comment>nohyphen.tex based on danhyph.tex</comment>
-% </copyright>
-% <copyright>
-% <year>1994</year>
-% <owner>Preben Randhol, Jon Martin Solaas</owner>
-% </copyright>
-% <copyright>
-% <year>1995</year>
-% <owner>Thomas Esser (te@dbs.uni-hannover.de)</owner>
-% <comment>Make patterns work with non-T1 encoding</comment>
-% </copyright>
-% </description>
-%
-% end of copy -->
-
-% end description data
-
-% begin pattern data
-
-\patterns {
-.a4
-.aa4
-.ab4ba
-.ab7be
-.ab6s5t
-.ac6tin
-.adel4s
-.ad8la.
-.ad6le.
-.ad2r
-.ad1s2
-.af7f
-.af5t4
-.af5f6u
-.ag6na.
-.ag6ne.
-.ag4r
-.ai2
-.a6k
-.ak6ka.
-.ak6ke.
-.ak3kl
-.ak3kr
-.ak6ne.
-.ak6r
-.ak8sa.
-.ak4se.
-.ak6ta
-.ak4te.
-.akte4r
-.akter5e
-.ak5tr
-.akva7
-.a6l
-.albu5en
-.alfa3
-.al4ge.
-.al5gi
-.al6ka.
-.al4ke.
-.al4kom
-.al4la.
-.al4le.
-.al5leg
-.al5lo
-.all5s6
-.al4ma.
-.al8me.
-.al5m6in
-.al4na
-.al6s7k
-.als5o
-.alt4a
-.al4ta.
-.al5tar
-.al4te.
-.alt3o
-.al6ve.
-.am7b
-.a6me
-.am6ma.
-.am4me.
-.am4s4
-.am6ta
-.a6n
-.ana3b
-.an4da.
-.an4de.
-.an5d4ra
-.an4d5ø
-.an3er
-.anes5
-.an4ga.
-.an3ge
-.an4ge.
-.ange4s
-.an4ja.
-.an4ka.
-.an4ke.
-.an4la.
-.an3n
-.an4na.
-.an7nal
-.ann4e
-.an4ne.
-.an5s8
-.an4sa.
-.an4se.
-.ant2
-.an4ta.
-.an4te.
-.an5tem
-.an5tep
-.an4ti.
-.an6tin
-.an4tis
-.an4tiv
-.ap8lan
-.ap1p6
-.ap8t
-.arbi5
-.ar6de.
-.ar4ge.
-.ar5ges
-.ari6a
-.ari8e
-.arie5ne
-.ar5ka
-.ar8ka.
-.arlan9
-.ar4me.
-.ar7mea
-.ar4na.
-.ar3ne
-.ar4ne.
-.ar5nes
-.ar6ra.
-.ar6r7u
-.ar6ta.
-.ar4te.
-.ar9ti
-.ar6va.
-.ar4ve.
-.ar4ved
-.ar4ver
-.arvi6
-.a6s
-.as8ka
-.as4ke.
-.as5kese
-.as7keta
-.as4le.
-.as6pa.
-.as5s
-.ast5ru
-.at4h
-.at4ki
-.at4le.
-.at4na.
-.at2o4
-.at3s
-.atte4
-.att6r
-.a5ty
-.au8de
-.au6e
-.au8ga
-.au4ge
-.au4ka.
-.au8le.
-.au4r
-.au6sa.
-.au6se.
-.aus9k
-.au4sp
-.avi2
-.av7i6d
-.av7inde
-.av4la.
-.av4le.
-.av7s6
-.b6
-.ba6by
-.ba6la.
-.ba4le.
-.ba4ne.
-.ban4k3l
-.ba4re.
-.ba4ri.
-.ba8te.
-.be4de.
-.bede4n
-.be6d5ene
-.be4d5et
-.be8di.
-.be3e4d
-.be6ke.
-.be4la.
-.be9nar
-.be4ne.
-.be6re.
-.be4res
-.ber6ett
-.be8ri.
-.be7ska
-.be6sten
-.be4ta.
-.be6te.
-.be5t4v
-.bi6de.
-.bi6en
-.bi4le.
-.bilet5
-.bi6t3r
-.bl4
-.bla4d
-.ble4k3
-.ble5k4e
-.blek4k3f
-.blekk3s4t6
-.blekk9s8v4
-.bling5
-.bo8da
-.bo8de.
-.bogs8
-.bok5
-.bo4k4en.
-.bo8la
-.bon2
-.bo4na.
-.bor6t5
-.bort6e
-.bor8ti8
-.bort9r
-.brudd7s6
-.bruddså7
-.bu6da.
-.bu3d6r
-.bu4et
-.bus6sy
-.by6de.
-.by8ta.
-.bæ2
-.bø6k5a
-.bø8nen
-.bø8ner
-.c4
-.ca4en.
-.car4s5
-.ca6se
-.ce6b
-.cos1
-.co4st
-.d6
-.da4ge.
-.da4le.
-.dags6e
-.da2m
-.da4ne.
-.da4ta
-.dau3s
-.deka9r
-.deko7d
-.de4le.
-.de4l5ei
-.delei8ge.
-.del5s6
-.de4mi.
-.demo7e
-.den5sl
-.de4re.
-.de4r5et
-.de4ri.
-.de6rim
-.de4r5om
-.de6s5m
-.de4so
-.de4sto
-.de4u
-.devi5s
-.di2a
-.di5e4l
-.di6er
-.di4et.
-.di9f6t
-.di4ne.
-.dings7a
-.di4sk
-.di8s3t
-.do4en.
-.do4er
-.do8et.
-.dome5
-.do4ra
-.do6re.
-.drau4m
-.ds4
-.du4a
-.du4en.
-.du4er
-.duft3
-.du4ge.
-.duk3n
-.du4se.
-.du4st
-.dy4re.
-.dø6la.
-.dø6r3
-.dø7r4a
-.dø7r4e
-.dø4ve.
-.då5ren
-.då7ret
-.e6
-.eb4ba
-.ecu6
-.ed4da
-.ed4le.
-.efo7
-.ef4ta
-.efta5s
-.ef6ter
-.eg8de.
-.ege2
-.ege5l
-.eg6ga.
-.eg4ge.
-.eg4gel
-.eg8la.
-.eg4le.
-.eg6na.
-.eg4ne.
-.ego7t8
-.egs4
-.eg8se.
-.eg5si
-.ei2
-.eid5a
-.ei5den
-.ei4ga.
-.ei7ger
-.eik5a
-.ei4ke.
-.ei3l
-.ei3m
-.ei8ma.
-.ei8me.
-.ein7as
-.ei3ni
-.ein5og5
-.ein5s6ta
-.ein8s7to
-.ei9rar
-.ei5res
-.eir9u
-.ei5te
-.eit9r
-.ekk4o
-.ek4le.
-.ek3li
-.ek6ne.
-.ek4r
-.ek8sa.
-.ek3se
-.ek8se.
-.ek4sp
-.eks6pi
-.eks3t4
-.ek8ta
-.ek4te.
-.ek7to
-.el8da.
-.el4de.
-.el4g5r
-.eli5ne
-.el3k
-.el5l
-.el6s
-.els6a
-.els4kl
-.els6t
-.el6ta.
-.el6te.
-.el4ve.
-.el6veg
-.em3b2
-.emfa9
-.em4ma.
-.em8me.
-.em6na.
-.em5p
-.en5a
-.en4da.
-.en4de.
-.end5r
-.en4ga.
-.en6gav
-.en3ge
-.en4ge.
-.en6g5r
-.engs6
-.en6ka
-.en4ke.
-.en5og5
-.en6sa
-.en4se.
-.en5so
-.en3sp
-.en5t
-.en6te.
-.ent4r
-.en6t5ra
-.ent8re
-.en3ø4
-.ep6t
-.er8a
-.er4e
-.er4g5r
-.er4ke
-.er4la.
-.er4le.
-.er6ma.
-.er4me.
-.er4mek
-.er4na.
-.er6ta.
-.er4te.
-.es9ast
-.es1k
-.es3ka
-.es8ka.
-.es4ke.
-.es5l
-.es8la.
-.es8le.
-.es3p
-.es6pa.
-.es6r
-.es8sa.
-.es4se.
-.es4so
-.es5ta
-.es3te
-.es6te.
-.es7tet
-.es5ti
-.est3r
-.es7tu
-.et8la.
-.et8le.
-.et4na
-.et4ne.
-.et4s
-.et8sa.
-.et5s4e
-.et6se.
-.ets4i
-.et1te4
-.et6ter
-.et6ti
-.ev8ja
-.ev4je.
-.ev4ne.
-.ex4
-.f4
-.fa2e
-.fag3s4
-.fa4ne.
-.fan3t4o
-.fe4e
-.feil5i
-.fe2l
-.fela9
-.fel5l
-.fel4ta
-.fe4ma
-.fe8me
-.fem5o6g5
-.fem5t
-.fer8ro
-.fer6s
-.fe8sl
-.fe8st5
-.fes3t6e
-.fi4b5
-.fi6a
-.fi4le.
-.fire5o6g5
-.fis6k
-.fjel4
-.fla4t5o
-.fo4bi.
-.fol2
-.fo2r
-.for3d6ri
-.for7d6ra
-.for5en.
-.form5s
-.for7s6o
-.fre6e
-.fri5e6re
-.fug2
-.fu6ge.
-.ful2
-.fu8se.
-.fy8se
-.fø8rel
-.g6
-.gaf7
-.ga4le.
-.ga8li.
-.ga4me
-.ga4ne.
-.gang5s4
-.gas4
-.gas5ta
-.ga2t
-.ga4ve.
-.ga9vee
-.ge2a
-.gel4e
-.ge3ne
-.ge6ni5
-.gen5s
-.ge4o
-.ge4st
-.ge5s6tap
-.ge9sv
-.gha5
-.gift5s
-.gi4n
-.gi4s
-.gis7p
-.gi8v3a
-.gl6
-.glo6i
-.glo9v
-.gly5s
-.glø9se
-.gnå7la
-.go5des
-.gos7
-.gra4v3end
-.grei4e
-.grunn5s
-.grus5s
-.gu4de.
-.gud3v4
-.gu4lat
-.gus1
-.gu4tu.
-.gø2
-.gås4e5
-.gå4v
-.h4
-.hai5s6
-.ha6ka.
-.ha8ma.
-.hand5s6l
-.handsla9
-.ha6v5ak
-.ha6vi
-.he4er.
-.hei5e
-.he2n
-.he6r5i6
-.he6r5o6
-.he9r6oe
-.he7r6oi
-.he7r6ol
-.he9r8os
-.hes4s5
-.het6s5
-.het7s6e
-.he4t5
-.he5t6e
-.hil4l
-.hi4n
-.hi6re.
-.ho2d
-.ho2e
-.ho4re.
-.ho5ren
-.ho7ret
-.ho8ta.
-.ho8va.
-.hu4di
-.hus6val
-.hvit3
-.hvi3t4e
-.hy6ra.
-.hy4re.
-.høi5
-.hø4re
-.hø4va
-.hø4ve.
-.høy6st5æ
-.hå8en.
-.hå8er
-.hånd5s6l
-.i2
-.i3a4
-.i3bl
-.i4da
-.ifø5re
-.ig8la.
-.ig4le.
-.i4her
-.ik2
-.ik6k
-.ikke5
-.i3k6l
-.ik5t
-.ik8te.
-.i5kv
-.i3la
-.i4la.
-.i8lande
-.ilbo8da
-.il6d3r
-.il6de.
-.i3leg
-.i6les
-.il4ja
-.il6je.
-.il6ke.
-.il4le.
-.il6sk
-.il4te.
-.i6me
-.imø5te.
-.in5ad
-.in5de
-.in8ga.
-.in4ge.
-.in3gr
-.in6gri
-.in5k6
-.in6ka.
-.in4n3
-.in4ne.
-.in5n6e
-.in6n7eks
-.in6n7ets
-.in6n7ett
-.in4n3i
-.in5s
-.in7tes
-.io4na
-.io4nom
-.i4rer
-.ir7k8
-.ir8ra.
-.ir6re.
-.i6sa
-.i3sc
-.i6se
-.is7k6
-.isla8ga
-.is6lam
-.is4le.
-.is4let
-.is4me.
-.is8na.
-.is8ne.
-.i5spe
-.is3s4
-.is6sa.
-.is4se.
-.is5sk
-.ist6
-.is8te.
-.i5sted
-.i5stem
-.is7ti
-.i6s7tj
-.i6s7tr
-.is8ut.
-.i6s5ø
-.i5ti
-.i3va
-.i4van
-.i4var.
-.i3ve
-.i4vel
-.i6ven
-.i4ver.
-.i4vere
-.iv8ra.
-.iv6re.
-.i3ø
-.j4
-.ja4de.
-.ja6e
-.ja4ne
-.ja8se.
-.ja4va.
-.je2a
-.je2l
-.je2m
-.je5re
-.jern5s4
-.je4ta
-.ji4
-.jo8en.
-.jo4se.
-.ju6a
-.ju6la
-.jule3
-.ju4li3
-.jø4dep
-.k6
-.kaf2
-.ka6la.
-.ka6li.
-.kalve5l8
-.ka5me
-.ka3na
-.ka4ne.
-.ka4p3r
-.ka4ra.
-.ka5r6a5v
-.ka6re.
-.ka5rin
-.ka4te.
-.ka5t6h
-.kau9k
-.ka6va.
-.ka4ve.
-.ke6e
-.kel3
-.kier3
-.ki4na
-.ki7ni
-.kino3
-.kir2
-.ki4se.
-.ki8va.
-.ki6ve.
-.kje3de5
-.kje4k
-.kjek7l
-.kjønn4
-.kle4s
-.kli5ne
-.klo9va
-.kly7sa
-.kna7se
-.kne4p3r
-.ko6da.
-.ko7gr
-.ko4la
-.ko3le
-.ko8le.
-.kol5j
-.ko3pe
-.ko6pe.
-.kor6s5ed
-.ko4se.
-.ko6ta.
-.ko4te.
-.ko6ve.
-.kring5s
-.ks6
-.ku4le
-.ku8ra.
-.ku4re.
-.ku8ta.
-.ku8te.
-.kva9ra
-.kva9re
-.kve9ka
-.kve5ke
-.ky8la.
-.ky4le.
-.ky6te.
-.kø3s
-.kå6pa
-.l6
-.la4da.
-.la4de.
-.la4ga
-.la4ge.
-.la5ger
-.la4ma.
-.la6ta.
-.la4te.
-.la3tr
-.la4va
-.la3ve
-.la4ve.
-.le8ar
-.le4da.
-.le4de.
-.le4er
-.le6et
-.le2f
-.lef3l
-.lega5ta
-.le4ge.
-.le4gel
-.le8gi.
-.lei5er.
-.lei4ve
-.le4ke.
-.le4k5r
-.lemu9
-.le4ne.
-.le7s6a
-.le4se.
-.le4sek
-.le4ses
-.le4s5p
-.le2t
-.le7ta
-.let6tan
-.le2u3
-.le3va
-.le4va.
-.le4ve.
-.le4ves
-.li8a
-.li4de.
-.li4e4
-.li5ene
-.li2g
-.liga3
-.li2k
-.lik5k6
-.lik3o
-.lik3s
-.li4ma
-.link6
-.li6ra
-.li4re.
-.li4sa
-.li4se.
-.li4ta.
-.li4te.
-.li5ti
-.li4ve.
-.li4v5en
-.liv8s7u6
-.liv4s5v
-.lo4e
-.lo6ge.
-.lo8gi.
-.lo6g5r
-.lo4i
-.lo6na
-.lo8o
-.lo6ri
-.lo8sa.
-.lo4se.
-.lo6te
-.lo4va
-.lo3ve
-.lo4ve.
-.lpe4
-.lu4d
-.lu2e
-.lu4na
-.lu6pa
-.lu4pe.
-.lu6ra.
-.lu4re.
-.lu6se.
-.lu4ta.
-.lu9tas
-.ly4de.
-.lyd3s
-.ly8e
-.ly8ge
-.ly4se.
-.ly4sk
-.ly5s6e
-.lys5s
-.ly8str
-.ly4te.
-.ly4ve.
-.lø8de.
-.lø6en.
-.lø8ne.
-.lø6pa.
-.lø4pe.
-.løv5i
-.løye5ne
-.lå8ma
-.lå5re
-.lå6re.
-.lå4te.
-.m8
-.ma4ge.
-.mag9r
-.ma3ka
-.ma4ke.
-.mak6t5at
-.makt5s
-.ma4le.
-.ma4li.
-.ma4na.
-.ma4ne.
-.ma4ni.
-.ma4ra.
-.ma4re.
-.ma4ri.
-.ma4sa.
-.ma4si
-.ma6st
-.ma8ta.
-.ma6t8h
-.ma4v
-.me4d3
-.me6d5ei
-.me6d4i
-.me6d7in
-.me6d5r
-.mei5er.
-.mei5et
-.mek5l
-.me6la.
-.mel3l6o
-.me4l5ø
-.me6na.
-.me4ne.
-.me3ri
-.me4sk
-.me2ta3
-.me3ta4ll
-.mes5ti
-.me4tri
-.mi6kj
-.mi4le.
-.mi4me.
-.mi4ni.
-.mi4nik
-.mi6nise
-.mins5ki
-.mi6s3t4
-.mne6
-.mo5de
-.mo6er
-.mo4na.
-.mo8ne.
-.mon4st
-.mons6t5r
-.mor5d6e
-.mo4re.
-.mor3t6a5
-.mo4se.
-.mo4ta
-.mo4tek
-.mo4ter
-.mo4tr
-.mo5v
-.mu8ga
-.mu8ge.
-.mu6le.
-.mul5es
-.mur7
-.mu5r8e
-.my8ka
-.my4ke.
-.mø4re.
-.mø5res
-.mø2t
-.må6la.
-.mål3o
-.n8
-.nabo3
-.na6ge.
-.nak2
-.na8ke.
-.nan5s
-.na4r
-.na4sa.
-.nat2
-.na3tr
-.nat6tr
-.ne4de.
-.ne4den
-.ne4d5i
-.ne4d3r
-.ned3s4
-.nei5e
-.ne8pa.
-.ne6pe.
-.ne2s
-.ne4t
-.ni8ar
-.ni6er
-.nig4l
-.ni4na.
-.ni5o6g5
-.ni4pa.
-.ni6pe.
-.ni8sa
-.ni6se.
-.nita9
-.ni4to
-.ni4va
-.no6de.
-.no6e
-.no8ka
-.no4me.
-.no8mi.
-.no4r
-.no8se
-.no8si.
-.no4va.
-.ns6
-.nt4
-.nu4e
-.ny5a
-.ny8sa.
-.ny6se.
-.ny4te.
-.nær9ast.
-.næ4re.
-.nød4d
-.nø4re.
-.nå6da.
-.nå4de.
-.nå6le.
-.o6
-.obo5e
-.od4da.
-.od4de.
-.od8la.
-.od8le.
-.offsi6
-.of4te.
-.of5teb
-.og4
-.ok1k
-.ok8ka.
-.ok8ke
-.ok4se.
-.old3s
-.ol4ga.
-.oli5
-.ol8la
-.ol8le.
-.ol6m
-.om1
-.om4ar.
-.om6bo.
-.om4e6n
-.om4gå.
-.om4me
-.om5s2
-.on4de.
-.on5des
-.ond3s
-.on6kl
-.on6na
-.on8ne.
-.op5ar
-.op4pa
-.op4pe
-.opp7el
-.op4pi
-.opp3l
-.oppla8te.
-.opp5s6
-.or4da
-.or4de.
-.or4del
-.or4dr
-.ord5s4
-.or5ga
-.or6ka.
-.or4ke.
-.or6me.
-.or4re.
-.ort6
-.or6va
-.osa5
-.os4k
-.os4s
-.os4te.
-.ot5r
-.ot7t8a
-.ot4ta.
-.ot4te.
-.ot4tes
-.ot3to
-.ot4to.
-.ove6
-.over3
-.overen6d
-.over3i4
-.over5k8
-.ov8re
-.ov5u
-.p6
-.pa8la.
-.pa4le.
-.pa5n6e
-.pa6n7eu
-.pa5n6i
-.pa6re.
-.pe3do
-.pe4ke.
-.pek5t
-.pel4sj
-.pe4ne.
-.pe2p
-.pep3r
-.pe8sa.
-.pese5t
-.pe4st
-.pi6le.
-.pi6p
-.pi9ra
-.pi2s
-.plen5g6
-.plus6s5
-.plus7s6e
-.plø7se
-.po4et
-.po3la
-.po8la.
-.po4le.
-.po4log
-.po2p1
-.po2p2e
-.pop3p
-.po3p2u
-.po8ra
-.po6re.
-.po4res
-.po6st
-.po8ta.
-.po6tek
-.ps2
-.pøn3
-.pøn9s6
-.på5d6
-.r6
-.ra6da.
-.ra6et
-.ra4ga.
-.ra4ge.
-.ra4ja.
-.ra4ka
-.raks7
-.ra2m
-.ra4na
-.ra4ne.
-.ran7s6a
-.ra6pa.
-.ra6pe.
-.rap4s
-.rap5s4e
-.rap5s4o4
-.ra4re.
-.ra6sa.
-.ra7ti
-.ra6va.
-.ra4ve.
-.re4al
-.re6da.
-.re4de.
-.ree6l
-.re7ela
-.rege4l
-.re4gi.
-.rei2
-.rei7de
-.rei5en
-.rei5er.
-.re4ins
-.re6ka.
-.re4ke.
-.re8klar
-.re8kle
-.re4kli
-.re6kn
-.re8le.
-.re4ma.
-.re4na.
-.re4ne.
-.ren6sk
-.ren4t
-.rep5s
-.res9s
-.re5s6tan
-.rett7s8kri
-.re4ve.
-.re4ves
-.rev9n
-.ri2d
-.ri8e
-.rie5ne
-.ri6ka.
-.ri6ma
-.ri4me.
-.rins9ke
-.ri4pa.
-.ri4pe.
-.ri4p5o
-.ri4sa.
-.ri4se.
-.ri5sko
-.ri4s3ø
-.ri4ta.
-.ri6te.
-.ri6va.
-.ri4ve.
-.ro4an
-.ro4de.
-.ro8di
-.ro4e
-.ro8ke.
-.ro4ma.
-.ro4mi
-.ro6pa
-.ro9par
-.ro3pe
-.ro4pe.
-.ro4sa
-.ro9sar
-.ro4se.
-.ro4sed
-.ro4ta.
-.ro4te.
-.ro4tek4
-.ro8va
-.ro3ve
-.ro8ve.
-.ru8ga.
-.ru4ge.
-.rug9le
-.ru8ka
-.ru4na.
-.ru4ne.
-.runes6
-.run7g
-.ru4se.
-.ru4sk
-.ru8va.
-.ru4ve.
-.ry2e
-.rye7ne
-.ry6ke.
-.ræ6ge.
-.rø7du
-.rø8la.
-.rø8le.
-.rø4re.
-.rø1v
-.rø8va.
-.rø4ve.
-.røy7e
-.rå8da.
-.rå4de.
-.rå4en
-.rå8er.
-.rå6ka.
-.rå4ke.
-.rå6na.
-.rå8sa.
-.s6
-.sa4ge.
-.sag6n
-.sa4la.
-.sa4le.
-.sa4me.
-.sa4mer
-.san6d7
-.san7d8e
-.san7d8i
-.san8s7ku
-.sch6
-.se2b
-.se2e
-.se4i
-.se4k5l
-.sek4s5o6g5
-.sel4v5
-.sel4v5i6
-.se6na.
-.se4ne.
-.sen7s
-.se4ra.
-.ser7vel
-.se4te.
-.sha8kar
-.sha9ke.
-.si2d
-.si6er
-.si6ga.
-.si4ge.
-.sik5k6e
-.si8la.
-.si4le.
-.si4ne.
-.sinn6s5
-.si4ra.
-.si5str
-.si4va
-.si4ve.
-.sje4i
-.sju5o6g5
-.sk4
-.ska7ka
-.ska5ke
-.skat4
-.skei5d
-.ski6n
-.sko7de.
-.skog5u
-.skudd5s6
-.skuddså7
-.sku6m5
-.sky6f7la
-.skå5ra
-.slim5
-.slotts5
-.slu9ka
-.slu5ke.
-.slø5se
-.sma4s
-.smas5k
-.smo9g
-.småa4
-.små9l
-.små5t6e
-.små3t4r
-.sn4
-.sne3
-.snitt5s6
-.snø3k
-.soa8
-.so8de
-.somma4
-.son6a
-.sop4pa
-.sor4t5
-.so4ta.
-.sp6
-.spa5ra
-.spe6e
-.spi9la
-.spri5s6
-.st6
-.sta9ka
-.sta5li
-.stat4s
-.sted4s
-.ste4i
-.stein7a8
-.stein7s8
-.stem4m
-.stev9na
-.sti7me
-.sto5ne
-.sto6ra
-.strek5s6
-.stu8a
-.stu9va
-.stål5l6
-.sund5s6
-.su4ri
-.su5te
-.sv8
-.sva5la
-.sva5ra.
-.sva5re
-.svar5s
-.sver8n
-.syd5
-.sy5d6e
-.sy6na.
-.sy4ne.
-.sy5ter
-.sy3ti
-.sy6v5
-.sy6v5o6g5
-.sz6
-.sæ2
-.sær1
-.sær3e4g
-.sø8ka
-.sø4ke.
-.søl6v5
-.sør3a
-.søye5
-.søy6en
-.så5pen
-.så3re
-.t8
-.ta4ka.
-.ta8ke.
-.tak9r
-.tak5sk
-.tak7sp
-.ta4la.
-.ta4le.
-.ta4les
-.tal4li
-.tam5m
-.tan5de
-.ta4p5r
-.ta4ra.
-.ta4re.
-.ta2s
-.te4e
-.te6i
-.tei9er
-.te8ke.
-.te4ma.
-.te6o
-.te8ne.
-.te4se.
-.te7si
-.te4sta
-.te4str
-.ti8a
-.tid5r
-.tid6s3
-.ti4de.
-.ti4e
-.ti4g3r
-.ti4ki
-.ti4l5
-.tili6
-.ti4med
-.ti4na.
-.ti4ne.
-.ti4p5l
-.ti4s
-.to5arm
-.to6en.
-.to4er.
-.to6et.
-.tokk8
-.to6le.
-.to6na.
-.to5o6g5
-.toppla8ga
-.to4ra.
-.to4re.
-.to6reb
-.to3ro
-.torsk6e5
-.tor4s5v
-.to5rye
-.to4str
-.tota9la.
-.to5t8
-.to8te.
-.to6va
-.to4ve.
-.tra7c
-.tre3b
-.tre5o6g5
-.tre6skja
-.tres9kjare
-.tre3s8ko
-.tre3sp
-.tre5s6t
-.ts2
-.tsj2
-.tu4en.
-.tu6na
-.tu4ne.
-.tu6ra.
-.tu4re.
-.tu8ve.
-.tve6n
-.tver6r5a6
-.två7g
-.ty6da.
-.ty4de.
-.ty8et
-.ty8re.
-.tyr8s9
-.ty5ter
-.ty5ti
-.tæ4re.
-.tøv9d
-.tø6ve.
-.tø9ver
-.tø5vet
-.tå5ker
-.tå4le.
-.tåp9n
-.tå5ren
-.tå7ret
-.u5a6
-.u1b2
-.u6berg
-.u3d2
-.u7de
-.u3e6
-.u4er.
-.u6era
-.u4ere
-.uf4f
-.uf8sa
-.u4ga
-.u5gi
-.ug6la.
-.ug8n
-.u1i
-.ui6m
-.u1k6
-.u4ka.
-.u6ke
-.u7kn
-.u3le
-.u4le.
-.ule8k
-.ulen4d
-.u6lende
-.u8lene
-.u6let
-.u4lin
-.ul6ka
-.ul4ke.
-.ul4la.
-.ul8le.
-.ul8ma.
-.ul4me.
-.ul4ne.
-.ul5t
-.ul6te
-.u1lu
-.ul4v5i
-.u1ly
-.u3lå
-.u5ma
-.umu7
-.u2n
-.unde6ri
-.und5r
-.une8
-.u5nek
-.u9net
-.un4ge.
-.un2n
-.unn3s
-.u3no
-.un4se.
-.un4t
-.u5nu
-.u1o
-.u1p
-.u4pi
-.up2l
-.u2ra
-.u5raf
-.ur6an
-.u6rane
-.ur4d
-.ure4n
-.u4ret.
-.u6rets
-.u2r2i
-.ur4ke
-.ur6na
-.ur4ne.
-.u1ro
-.ur1s
-.ur8ta
-.ur4te.
-.urte5m8
-.ur6tet
-.u5rut
-.u3ry
-.u5rå
-.u1s2
-.u4sa.
-.u4sas
-.u5se
-.u3ska
-.u5sn
-.u7sp
-.us3se
-.us6t4
-.u7stek
-.u5stel
-.usy5r
-.u2t
-.uta4g
-.ut5age
-.u3tak
-.u4ten.
-.ut5esk
-.ut6e7sko
-.u4ti.
-.ut3kan6t5
-.ut4ne.
-.u5tol
-.ut3ov
-.ut6rer
-.ut6rov
-.u3trø
-.ut6se.
-.ut4si.
-.ut3t4
-.u3tu
-.v6
-.va4da.
-.va4de.
-.va6ga.
-.va4ge.
-.vai4
-.va4ke.
-.va8la.
-.va4le.
-.va6les
-.valg5s
-.va4ne.
-.van4n5
-.vann5s4
-.va6reta
-.vari4e
-.var5sk
-.ve8en.
-.ve4ga.
-.ve6ge.
-.ve4g3i
-.veg3s4
-.vei3s
-.vei4ta
-.ve4l3
-.ve5l4ar
-.ve6l5art
-.vel5d
-.ve4l3e
-.vel5l
-.ve5l4os
-.ve4l5ov
-.ve4ly
-.ve8læ
-.ve4ne.
-.ve4net
-.ve4ra.
-.ve4ras
-.ve6re.
-.vermo9
-.vers4t
-.ver5ste
-.ve4sl
-.ve4st
-.vete5
-.ve8te.
-.ve4ve.
-.vi4da.
-.vide4
-.vi6de.
-.vi4d5å4
-.vi2e
-.vi4ka.
-.vil5l6a5l
-.vil5l6a5t
-.vi6ma.
-.vi8me.
-.ving7s
-.vin5n
-.vi4sa.
-.vi4se.
-.vi6seri
-.vi4ta.
-.vi4te.
-.vi5tr
-.vok4s3
-.vok5s6e
-.vo6r
-.vo6ta.
-.vy4
-.vye5ne
-.væ4ra
-.væ4re.
-.vå4d
-.vå4r3
-.vå5r4e
-.vå6r5eng
-.vå6r5er
-.vå6r5et
-.wa4r
-.wi6e
-.xe2
-.y6
-.ye4
-.yn8da.
-.yn4de.
-.yn6ge.
-.yn8ka.
-.yn6ke.
-.yn4kv
-.yns2
-.yp8pa.
-.yp4pe.
-.yr8ja.
-.yr8je.
-.yr8ka
-.yr4ke.
-.yrkes5
-.yr6t
-.ys4
-.ysterie8
-.yt9ren
-.yt5t
-.yt6te.
-.yv6
-.z4
-.zj8
-.æ8
-.ære4s5a
-.ære4st
-.æt4te.
-.ø6
-.øg8la
-.øg4le.
-.øi5
-.øi6e
-.øko5
-.øk6ta
-.øk4te.
-.øl3s6
-.øl3v6
-.øm4me.
-.øres8t
-.ør4je
-.ør5k
-.ør8na.
-.ør4ne.
-.ør6ski
-.ør9sm
-.ør3st
-.ør8ta
-.ørt9an
-.ør8te.
-.øs2
-.øs4t
-.øv4d
-.øve4r5
-.øve4r6s
-.øv4re.
-.øy6de.
-.øy2e
-.øyele8ge.
-.øy5ene
-.øy4n
-.øy6na
-.øy6ra
-.øy4re
-.øy8rer
-.øy4str
-.å2
-.å6e
-.å6f
-.å6g
-.å6k4
-.å8l
-.ål6t
-.ål8ut.
-.å8m
-.ån8da.
-.ån4de.
-.ånd6s5
-.åp6na
-.års3k
-.å6se
-.ås3k
-.ås7l
-.ås3m
-.å3st
-.ås5v
-.å4t
-.åt4te.
-.åtte5o6g5
-.å6v
-a1ad
-4aaf
-a3aft
-aa4g
-a1aks
-aak5v
-aa3la
-aa2m
-a1a2n
-a6an.
-aans9t
-a7antr
-a1ap
-aa4ri6
-aarie9ne
-aar5n
-aa2s
-3aase
-aa5t6h
-a1av
-a6bab
-ab7av
-ab9b8l
-ab4but
-abe4lei
-abel5t
-abe9na.
-abes9ka
-a5bh
-abie6
-abi9er
-abi9la
-a4bist
-ab1l
-ab9lara
-ab4lok
-abl7u
-a5bo9a
-abo3b
-abo3e
-a3boer
-abo3kl
-a3bord
-5aborte
-ab1r
-ab8re
-ab2sl
-abu5e
-a4buel
-a4buf
-a6busk
-a4bute
-a4by.
-a4byb
-a4byk
-aby3r
-8ac
-aca5
-a6ca.
-ache3a
-ack3
-a1co
-6ada
-a5dal
-ad5ant
-a4dart
-ad9da
-a2deb
-ade5i6s
-a2dek
-a4del
-a4d5elv
-a5dend
-a3dene
-a2deo
-a2dep
-a5der.
-aderle7
-a2des
-a5de4ser
-a3desl
-a3det.
-a3dets
-3adfer
-1adg
-ad8ge
-adi4ene
-ad1j
-1adju
-2adl
-1adm
-ad5n
-ado7a
-a4dob
-ad7opp
-4ador
-a7dora
-ad5raf
-ad7ran
-a2dre
-ad7rel
-ad5rep
-ad3ret
-ad3rid
-ad1ro
-a7drø
-ad4s5amt
-ad4si
-adsle6ge.
-ad5s4let
-ads5te
-ad5s6tek
-ad3str
-ad5un
-1adv
-adva5re
-2adve
-a4dy.
-a4d5øy
-2a1e2
-4aea
-a4ed
-ae3de
-aed7r
-aek5t
-a4el.
-ae5la
-ae3li
-ael5o
-aen5t
-a3ep
-aes8ke.
-aes4t
-6afa
-6afc
-a4fe.
-afei5
-af4fan
-af4fei
-affe3s
-af7fi.
-affi3d
-af5f4u
-af4i
-afia1
-afi5an
-a2fib
-a6f5inn
-afi7re
-a4fiti
-a5fjo
-af9la.
-af9lar
-af3le
-af5li
-a4frik
-6afo
-afo7ra.
-afo7r8e
-afore5ne
-afra5s
-1afri
-afs1l
-aft5ei
-af4t5e4l
-af6t5o
-aft1s4
-af5yr
-afø4r
-afø5ri
-4aga
-a2gaa
-a5gae
-a4ganf
-agang7s8
-a4gart
-a5gas.
-aga6ve.
-ag5de
-a7gelen
-a2gem
-3a4gent
-age4r3a
-age6rek
-age5risk
-a7gers
-a5geru
-age5s2
-a4geta
-a4gé
-ag5gar
-ag4gas
-ag5ge
-agg1s2
-agg7u
-ag6gut
-a4gi.
-ag5id
-agi6s
-ag1la
-ag4lem
-ag6lesa
-ag5lå
-agmo8e
-agn5om
-4ago
-ago5d8
-ag1or
-a5gos
-a3got
-ag5ov
-ag7ras
-ag1re
-ag1ri
-a3gru
-ag1rå
-ag4samb
-ags4ang
-ag3s4ei
-ag4sel
-ag3sem
-ag5s6ing
-ag6sju
-ag4ska
-ags4kul
-ag2sl
-agsmå6la
-ags3tr
-ag2sy
-a6gu.
-agu3ay
-agå8va
-agå8ve.
-a1h
-a5hi
-ah4n5
-ah4v
-ai1a4
-ai3e2
-ai3er.
-ai4is
-ai5ke.
-ai5ko
-ai9kv
-ai5ne
-a3ing
-a1inn
-ai4n5o4
-ai1ro
-ais4e
-ai4s3k
-aisk2h
-ai8sm
-ais6om
-ais5s
-ai5s4v
-ai5ve
-ai5ø
-a1j
-aja9d
-a7je
-a8je.
-ajes7
-a4jé
-a4ji
-a6jl
-6ak.
-a1ka
-4aka.
-1a2kad
-6akaf
-ak3aks
-6akan
-4akar
-ak6arb
-aka4t5r
-ak4au
-2akd
-2ake
-a9kec
-a2keh
-a3kei5
-a6kek
-akel8e
-akelei9er
-ake5l4i
-ake4rek
-a4kerø
-ake5sm
-akes6p
-a8kete
-akhe6n
-4a1ki
-a6kid
-a6kik
-ak7ind
-akis1
-2a1kj
-akk6and
-ak5ke.
-ak3ken
-akk5erst
-ak4kes
-akki4
-ak5kim
-ak4k5is
-ak6kj
-ak1ko
-akk3ol
-ak6k5ri
-ak1ku
-ak4kul
-ak4k5v
-2ak1l
-ak3lev
-ak6lik
-ak6lus
-6akn
-ak5ne
-a5kno
-2a1ko
-ak5om.
-a5kon
-a7kos
-ak1o2v
-ak4pe6
-akra8sa
-ak5reg
-akregi4
-ak3res
-ak3ro.
-ak3roe
-ak1ru
-ak4s5and
-ak4sek
-ak4s5elv
-ak4ses
-ak7s6id
-3aksje
-ak2s1k
-ak7sku
-ak6sl
-4akso
-4aksr
-aks5ti
-ak5stol
-aks4tr
-akst7ren
-4aksu
-ak4tab
-ak4tai
-ak4tak
-akta6le.
-akt5all
-ak6tam
-ak6tans
-ak4tap
-ak4tas
-ak4tav
-ak4teg
-ak4tek
-ak5teme
-4akth
-7aktig
-ak5tit
-aktle6ge.
-ak2tr
-ak6tre
-akt3rå
-akt5s4la
-5aktue
-akut2
-2akv
-ak3val
-ak5øl
-a5kå
-8ala.
-al7adr
-ala4g
-ala9ga
-a5lagm
-alag8ra
-a5lah
-a1lai
-al3all
-al3a4me
-al3ana
-a3land
-a5lande.
-a5lane
-alan5gr
-al3anl
-al3anv
-ala5pr
-a5lar.
-a3lara
-a5laren
-al3ark
-a7larl
-3a4larm
-al5arr
-a5lars
-al3art
-a7larv
-al3a4si
-2alat
-ala7tr
-4alau
-al5auk
-al1av
-ala4va
-al4ba.
-albo4g
-albu7er.
-5album
-al3de
-al7der
-4aldo
-ald3re
-2ale
-a2lef
-a2leg
-a9leg.
-aleie6n
-a9l8eik
-a5leke
-a4leks
-a4leli
-a2lem
-al5e4mu
-al8en.
-a4l3enh
-a4l5en5tr
-ale4pos
-a7lept
-a4lered
-alere6de.
-a4le5ro
-a4leru
-ale1s2
-ale7se
-a4lesk
-ale6s5kr
-a4lesl
-a6lesu
-a4leta
-a4le3te
-a2leu
-ale5v
-a4leva
-a4levi
-3alfab
-2alg.
-al3geb
-al2gu
-al4går
-al3ill
-a2lim
-a9lin.
-ali5na.
-a4l3ind
-a4l3ins
-al3int
-al9ja.
-al3je.
-alj5end
-al3jer
-al1jo
-al4jor
-al1jø
-alj5ø6v
-al9kera
-alk7s6
-alla4ga
-alla6ge.
-al4lap
-all5art
-al5lea
-alle6ge.
-al4lek
-al5len.
-all5erst
-alle3s4
-al4lest
-al5let
-3allia
-al4lid
-5alli5e
-alli9ne
-al6list.
-al4lo3m
-all4sen
-all4sti
-al6lul
-al6løs.
-al4løse
-al8løst
-al6lå
-al6mek
-al4met
-4aln
-a5lo.
-al1o4b
-a5loi
-al1om
-a1lon
-al3ope
-al7ord
-alori5
-alo6rit
-al3ove
-alow7
-alp2
-al3ps
-2als
-al7sed
-al9skap
-al7skare
-als1l
-als5lø
-al2sn
-al6spu
-als4te
-als6ter
-6alsu
-alt6ak
-alta8le.
-al3ted
-al7tema
-5alterna
-alte4t
-al4t5eta
-al4t5ete
-al4t3op
-a4l5u4k
-alul8la
-al5und
-alu8re.
-al5va.
-alv5aks
-alvak8se.
-al4ved
-al5v6er
-al8v9er8m
-alve5s
-al9ves.
-alvi8se
-al1vo
-alv3s
-6a1ly
-a2l5y4te
-alø5se
-al3øv
-a1lå
-al7å6t
-a4mah
-ama5is
-a2mak
-a5maki
-am3aks
-a2mal
-am5ald
-a3man
-a3mar.
-a5mara
-a7mas.
-amaso7
-3a4matø
-am4bar
-3ambas
-am4bat
-am5be
-a2mei
-am3eie
-a3meis
-a2mek
-am3eks
-amen8de.
-amen4s3
-amen6t7arv
-ame4ram
-a4meret
-3a4meri
-4amerin
-ame5u
-amhu7
-2ami
-ami7na
-ami7ne
-amisk3
-amis4ku
-am4lese
-am6lest
-am4mad
-6amn.
-am4ned
-a2mo
-amo5e
-am1op
-am1or
-amo6ve
-am4pap
-am4pare
-amp5ei
-am8peria
-am6perie
-ampes6
-amp7inn
-am2p3l
-am5p4let
-am4p4re
-am4pun
-am2på
-amru4
-am5rå
-am1s
-am7s6ku
-ams4l
-amst6
-am4s3tr
-ams9ut
-ams2v
-am4s5ve
-am2sø
-am3ti
-amti5da
-5amtm
-am7tv
-am6ul
-am5yr
-am5øy
-6ana.
-anak8te.
-ana3la
-anal4f
-3analy
-8anan
-a3nane
-a5nang
-anant8
-4anar
-a6narb
-an5art
-ana3to
-6an7au
-anaus7
-an9av.
-3anbef
-4and.
-an4da5m6
-anda5ta
-an4dek
-an5den
-anderle7
-an9det
-6ando
-an4dos
-4ands
-and4sel
-and8send
-and7slet
-and5s6tre
-a2ned
-an5egg
-a4n5elv
-a2nem
-2anen
-2aner
-ane3ru
-a5nes.
-a4nest
-ane5sv
-an5e6tika
-a5netike
-an5e6tikk
-an5e4tis
-a2nev
-3anfal
-anfø5re.
-ang4e
-an4ged
-an4g5enh
-ang5erme
-an8geste
-an4gi.
-5angiv
-ang5of
-an5gos
-an4g9ra
-an4gre.
-an6gres
-an4gret
-an4g3ry
-ang4sm
-angs6tro
-angs8t9rå
-angst5y
-ang5sva
-ang6søy
-ang4t5re
-ang5t6ve
-an4gun
-an4gå.
-ania7
-a6nib
-a4nisj
-an4kana
-4anki
-4ankj
-an4kob
-an4kop
-an4kos
-an2k1r
-ankra8na.
-ank3re
-ank3ut
-8an2kv
-an4kø
-an6k5å6
-2anla
-anland6
-anlø9pa
-ann5ans
-an6neme
-an5nen
-an5ner
-an5nid
-an4ninn
-an4nom
-5annon
-an4nov
-ann4sei
-ann4sid
-ann6s7kå
-ann3st
-ann5sta
-ann4s3u
-an4ny
-an2nø
-a3no.
-a9noa.
-ano6deb
-2anog
-a7norm
-a6not
-a2no4v
-ano5va
-an3ove
-anri7ke
-ans5aft
-ansa7ka
-4ansan
-3ansat
-an4sek
-an4sent
-anseri8e9ne
-an4ses
-3ansik
-ans5ind
-ans5ins
-an4ski
-an3skj
-ans4k3l
-ans6kun
-an5skø
-an6slø
-an4sn
-ans5or
-an4s3pi
-ansport7s6
-an1st6
-6anstar
-ans4te4
-6ans6ti
-2ansu
-5ansunda
-1an1sv
-4ansve
-6ansy
-an4så
-anta8la
-an5t6and
-an4tans
-an3ted
-ant5emi
-5antenn
-an4tesl
-anti7kl
-an4tim
-an5toi
-ant5ord
-ant5rab
-ant7rom
-ant5ryg
-ant5s6
-an4tul
-antus4t
-2anu
-anus7a
-an5ut
-3anven
-6anvin
-6any
-a4nya
-a2n1æ2
-anær8
-2anø
-a2nøk
-an7å
-a1o
-ao9a
-aog9
-a2oi
-ao6k
-aon8de.
-ao2p
-ao4r
-a5pea
-a7pé
-a1pi
-a2pia
-ap1id
-a6pik
-a6pins
-a2pio
-api6r5
-api7r6e
-api7se
-ap1j
-a1pla
-ap3li
-ap9lo
-ap2ly
-4apol
-a4pon
-a4poo
-apo3p
-apo5s4ti
-a2pot
-3ap3par
-4appar.
-6appare
-app9esk
-ap5plas
-ap4ple
-ap5pli
-ap6pri
-ap3ra
-ap5ren
-ap5ret
-ap3rin
-ap2s1
-apsa4
-ap3sel
-apse4s
-ap8s9l
-a3psy
-ap4s5ø
-8apu
-a6p5ut
-a1py
-ap7ø
-a3p8øls
-a5på.
-a1ra
-ara9bi
-ar5aks
-arak5t
-ar3alt
-a4rami
-2aran
-a4ranor
-a4rans
-a4ranv
-2arar
-a4r5ass
-ara5te.
-ar5aug
-ar7auk
-arau9ken
-ar7avh
-1arb
-2arba
-arba8ne.
-6arbeh
-4arben
-6arbet
-2arbi
-4arbj
-6arbl
-2arbo
-arbo8da
-2arbr
-2arbu
-2arby
-2arbø
-4arbå
-ar7deb
-ar6deli
-ardfø5re
-ard3re
-ard5sta
-a1re
-1a2rea
-4arear
-a4reb
-areba4r
-a2red
-a2ref
-a2rei
-are3in
-a2rek
-a6r5ekt
-a4rela
-ar7elek
-a4reli
-ar7emn
-a5remo.
-3arena
-a6r5eng
-a4reni
-aren5tes
-a2reo
-a2rep
-a6rerel
-a4r5erfa
-a6rerk
-a4rero
-a6rerø
-a5res.
-ares8ka
-ar4et
-a7reta.
-a4rev
-ar7e6va
-ar3evn
-arev6ne.
-8a1ré
-6arf
-ar7g6h
-ar5g6i
-6argj
-arg4l
-ar7go
-arg5stj
-2a1ri
-aria7ne
-a3rib
-ariba9
-ar5idr
-a4rim
-ar3inn
-ar3ins
-arins9k
-ar3int
-ari3se
-arise4a
-a4risto
-a2riv
-ar4kau
-ar3ke
-ar4ke5s
-ar5kha
-3arkit
-3arkiv
-ar4kle
-ar4k5løf
-ar6kod
-ark6ste
-ark4str
-ark7veg
-ar4køy
-arla4ga
-ar4map
-5armbå
-ar4medi
-arme7t
-ar6metr
-ar4minf
-armle6ne.
-armå6la
-2ar2n
-ar4nad
-ar4nal
-arneva7la
-ar3ni
-ar3no
-ar3nu
-ar3nå
-a1ro.
-aro8de.
-a5rok
-a1ron
-ar1op
-aro6pa
-a4r1o4r
-a1ros
-ar7ost
-a1rot
-ar3ove
-ar6ped
-ar9po
-arp5ret
-1arra
-ar5ree
-ar7resk
-arri8e7
-arrå6da
-2ars
-arsa6ka
-ars5ans
-ar3sel
-ar6s5ers
-ar4sin
-ars5kam
-ar5skar
-ars5kes
-ars7kre
-ar4spr
-ars6tr
-ars4vei
-ars7æ
-arta4la
-arta6le.
-ar3te
-ar7tele
-8artets
-art4ha.
-art4has
-ar4tika
-6ar4tim
-4artn
-4arto
-ar4top
-6artr
-ar6trin
-arts5ø
-6artu
-8arty
-ar4tyv
-ar1ul
-ar1un
-ar5u6r
-a1rus
-ar5utb
-ar5utn
-arve3s
-ar6vete
-arvi8sa
-arvi8se.
-a1ry
-ar7æ6
-arø8ve.
-ar1øy
-a1rå
-arå8de.
-ar7åp
-a6r5åt
-6as.
-4a1sa
-asab4
-asak4
-a4salo
-as6an
-as7aug
-asbe2
-a1sc
-a2se.
-asea4
-a2sed
-a2seg
-a2sek
-as4el
-ase5le
-a2sem
-a6senet
-a4senk
-a7seol
-a2se5s
-a6sest
-a4sete
-a2se3u
-as2h
-ash5et
-as5hu
-a4sib
-a2sip
-a2sir
-a7sis.
-asis5t
-a2siv
-as4ja
-as5jet.
-a6sjett
-as5jin
-as5jor
-as3kar
-as5keti
-ask2i
-as5kis
-a5skj
-as5ko.
-as5koe
-a4s5kopi
-as3kor
-as3kot
-a1skr
-as7kra
-as3kul
-a5s6kula
-as6kule
-ask9u8t
-as4kv
-ask5øy
-as1l
-asla8ga
-as4lev
-as4lit
-a1so
-a4so.
-a2s5om
-as5ov
-as4pan
-as3pe
-as7pis
-as5pl
-as9sa.
-as4sab
-as4sal
-ass5ald
-ass5alt
-as4sam
-as5se.
-as4sed
-as4sek
-asseri7e6
-as4serv
-as4ses
-as6sifr
-as5sing
-assi3s
-as4sit
-as2sj
-as6s1k
-assku6le.
-as2s3n
-as5so.
-asso9a
-as7sos.
-as6s1p
-as2s3t
-as4stan
-as4str
-ass5tru
-as2s1v
-as4sys
-as4søk
-as2s5å
-as1ta
-as6tab
-a6stande
-a4statu
-as5te.
-as3ted
-as4teg
-as4tek
-as4t5enh
-a1stj
-a9stof
-a5stok
-ast5ov
-ast5ren
-as4tro
-as9tua
-astu8ve.
-ast5ø4v
-a1su
-asu3n
-asu9sa
-as1va
-a6sym
-asyn7d
-as7øye
-as5å
-4at.
-4ata1
-a5taene
-at6af
-ata8ka.
-ata8la.
-a4tang
-ata9rar
-a6t7arv
-atas4
-a5tas.
-atat8
-a2tau
-at5avh
-atch5
-a2tea
-a2tec
-at7edd
-a2tee
-a4tei
-at5eid
-at3eig
-ate3in
-a4teka
-ate5k8e
-ateke7ta
-a6t5ekte
-ate7le
-at3emb
-4aten
-a5tene.
-a4teni
-a4tenu
-a2teo
-4ater
-a5ter.
-a6terat
-a8terek
-a4teril
-a2tes
-a4t3ett
-a4té
-3atfer
-at4ha.
-at8has
-4ati
-atik6ka
-atili5
-ati5nea
-ati4rep
-ati8sta
-at3jo
-5atlant
-atl9øy
-3atmos
-at4nel
-ato5a
-ato5gr
-at1oi
-a2tom
-a6t5oppr
-a1tor
-a5tose
-a3to1v
-a1tra
-at5reg
-at3ren
-at3rer
-a4trif
-at3rin
-at5rot
-a9tru
-at5røs
-at5røy
-2ats
-at7sje
-at7s6kat
-at7skj
-ats6kul
-at2s3ø
-4att.
-at6tat
-4at5te.
-at5tens
-attfø7re
-at4tid
-atti4s
-att5ise
-at3tit
-att1o
-att9o6p
-atto6v
-at1tr
-at4traf
-at4t3re
-at6trin
-att3s6k
-att5s8l
-att3sp
-att3sv
-at6tys
-at2t3ø2
-a1tu
-atu5e4
-a2tut
-at5v
-atvi5er.
-a3t3w
-a1ty
-atyr8ke.
-a1tø
-atør3s
-atø9se
-a4t5øy
-a3tå.
-a7tåa
-a1tåe
-at5år
-at5å4se
-at7åt8
-4au.
-8a8ua
-au9ar.
-4au5b
-auba6ne.
-au3c
-au5da.
-au9det
-au4di.
-4a6ue
-aue5re
-au3est
-au6e5ta
-au5e6te.
-au4gal
-au4gas
-au4gel
-augele8ge.
-5aug2n
-3augu
-au5i
-au5keli
-au5ket
-auk5la
-1auk7s6
-au5kve
-au6las
-au4lat
-aul5l
-aul8la
-au5lu
-au9men
-au6mo
-aum5s6k
-aum7s4t
-a5und
-au5rae
-aure5s
-au5ret
-au5ri
-aur5s6
-au1ru
-auru4e
-au1sa
-aus9kj
-au6skr
-au1so
-aus5s
-au6s8tas
-aus8tett
-austi6s
-aus6t7ise
-aus6ton
-au5str
-au6stri
-au1su
-au4sun
-au2s5ø4
-aut6a
-au3ta.
-au7tar
-au5te
-1auto
-auto5v
-au3t4re
-au4ty
-2aux
-a1va
-av5ab
-a5vae
-ava7g
-6aval
-av3alv
-a4v3and
-av3ang
-a4v5anl
-3a4van5s
-a9var.
-av3art
-avar6ta.
-4avas
-5avbi
-1avd
-3avdel
-2a1ve
-a2ve3d2
-a5vede.
-a7veil
-ave3in
-a2vek
-a4vela
-a4vele
-a5veleg
-avens4
-a5ver.
-ave7ras
-aver5d
-a6verei
-a2ves
-a2vev
-1avfa
-1avg
-avi4ar
-4a5vig
-a1vik
-avi9ke
-a1vin
-a4v5int
-2avir
-5avisa
-avi5sa.
-3a6vise
-av5ising
-avis3t
-a5vit
-avlu9t
-avlø5se
-6avn
-av7na
-av4nes
-a1vo
-a4vok
-avo3r
-avo4v
-av1r
-av4res
-av5ri
-av1sa
-av5seg
-avs2i
-avsko7g
-3avsni
-av1s2p
-avspe9g4
-avs4te
-av5su
-av1s2v
-1avt
-avta9ka
-2avu
-1avvi
-av3øl
-4a1vå
-a6v7å6l
-a1wa
-awat4
-a5we
-awe9ne
-a1wi
-ay2a
-ay7ane.
-ay5ar
-ay9s8t
-a5y4t
-a5zu
-azz3o
-a1ø
-a7å6
-1b4a
-ba3a
-baby5
-ba4bys
-ba5cl
-ba2d
-ba4da.
-ba7dan
-b5add
-ba8de.
-ba4deb
-ba5den.
-ba7dens
-ba3di
-bad1s
-4baf
-ba2k
-ba5kan7
-ba3kar
-bakars9
-ba3ken
-ba4k5end
-baken6de.
-ba3ker
-bake3s
-ba9ket.
-bak9ett
-ba3ki
-ba8ki.
-bak6kers
-bak6ko
-bak5kr
-4bakr
-bak4re
-ba5kri
-bak3ro
-bak3sm
-bak5sp
-bak5s6ti
-bak5str
-bak3t
-bak1v
-ba3la
-bal7ak
-ba4les
-ba4li.
-bal3j
-bal4lag
-bal4lan
-bal4led
-bal4leg
-bal4lei
-bal4lev
-bal4lig
-bal6lov
-ball5s6
-bal6læ
-ba1lo
-bal5t
-ba1lu
-ban4a
-ba4na.
-ba5nan
-ba5nar
-ban9da
-ba4nel
-ba4nes
-ban6kap
-ban4kor
-bantu5
-ba3re
-baret5t
-ba3ri
-bari6e7n
-bark5s
-bar5skr
-bar5tr
-ba5ru
-ba5sen
-ba4seru
-ba4set
-ba3si
-ba2s1k
-bas6sak
-bas4san
-bassi4
-bassis5
-bas4so
-bas4st
-bass6tr
-ba2st
-ba7s8u
-ba1ta
-2ba1tr
-bat6ti
-bau9la
-6bav
-ba5z
-2b1b
-b3ba
-b6bak
-b4b5arb
-b6base
-b3be.
-b4beb
-b4beda
-b2bef
-b4beg
-b6beh
-b2bei
-bb3eie
-bb5eig
-b2bek
-b6belo
-bbelt3
-bbelte4
-b4bem
-b9bene.
-b2beo
-b3ber
-b4b5erf
-b4bes6
-b7beska
-b6beta
-b6beten
-b4beti
-b6beto
-b6betr
-b2bev
-b8b1h
-b3bi
-bbi9e8
-b4b5inn
-b2b1l
-bb7len
-bb5op
-bb5rek
-bbu9ra
-bb5ut.
-bb5ute
-b2by5
-bby3e
-bby1k
-b4bø
-b6bå
-2bc
-2b1d
-b2dek
-b7den
-b4dep
-1be
-be2au
-be4bo.
-bebo5er.
-bebo9k
-be4da.
-be9dar
-be3der
-bedi9e8
-be4dre
-bed5red
-bed2s1
-bedy9ra
-be1då3
-2bee
-be5ed
-be6ef
-b4ef
-befa5re
-be3g
-bega9
-be4ga.
-be4gi.
-be4gn
-be5go
-be4g5re.
-be4g5rene.
-be4gå.
-be6ha.
-beha7g
-behers7
-4behu
-behå4r
-be6i
-be5ke
-be2k3i
-bek6kel
-bekke5r
-bek4kes
-bek6l
-4beks
-be4l3ab
-bela9ga
-bel5eie
-bel5eig
-bel5ein
-be4lek
-beli9na
-beli9v
-belle5sa
-bel5let
-bel5læ
-be2l1o
-bel5s4p
-bel7s4t
-bel4tag
-bel4te5s
-bel4t3ø
-bel3u
-bel5v
-belæ5re
-belå7ne
-be4na
-be5nat
-be3ne
-4bened
-be4nest
-ben5gu
-be5ni
-ben5s4i
-ben5skj
-ben5sp
-ben5te
-2bep
-b4er
-4berai
-be7ras
-ber5d
-be4rep
-8berest
-bere5te
-ber4ga
-ber4g5ende
-ber5ges
-berg3l
-berg3o
-ber4g3å
-be5rib
-beri5ke
-be7ris
-ber6kl
-ber5na
-ber5ne
-be1ro
-be4ro.
-bero9a
-berri6
-ber5te
-ber5ti
-be1ru
-beru9sa
-berø5v
-b4e1s2
-5bes.
-be4se.
-be5s4i
-4besik
-6besj
-bes5ke
-bes6k5n
-be3sn
-bes7ne
-4be3so
-beso9v
-be5sp
-bes3s
-bes6s7a6
-bes6sel
-bes7si
-bes7tens
-bes6tes
-be5stes.
-be6så
-3b4et
-5bet.
-be4tab
-be3te
-4betei
-be7tes
-beto5ne
-be6trar
-be6tre.
-be4t3ri
-4betu
-be4ty.
-beva5re
-be6ve.
-bevi5se.
-be9vo
-bev9r
-6beå
-beån9
-7bé
-2b5f
-6bg
-2bh
-bhu1
-1b4i
-bi5ak
-bi6bla
-bi5ce
-bi1d
-bi5dee
-bi8dé
-bid6r
-bidu8
-bi5el
-bi6ele
-bi5erv
-4bifa
-bi5g
-bi3ka
-bik1k
-bik6ki
-bi5k4l
-4bi7kr
-bi6la.
-bi4las
-bi4lau
-bi3let
-bilet5r
-bi4lin
-bil3j
-bil5la
-billa8ga
-bil5leg
-bil1o
-6bi5m
-bi4nans
-bingo5
-bin4gol
-bi7no
-4b5int
-bio7
-bi3o8m3s4
-4bip
-bi4ri5
-bi7ris.
-bir4ken
-bi1ro
-bis2a
-bi3se
-b5ish
-bis6hi
-bis7ke
-bi5s4la
-8bisn
-bi4sp
-bis4p5i
-bis5se
-bi1st
-bi5s6ta
-bis4til
-bis5tru
-bi3s4v
-bi6ta.
-bi4te.
-bi5tes
-bi8ti.
-bi4tre
-bi6tri
-bjar3
-bjek4t5o
-bjø6r
-2b1k4
-b5kh
-bl2
-1b2lad
-blad3a
-bla6f3
-bla8ga
-blak5r
-bla5me
-blan9da
-b4lank
-blan5ke
-b4lant
-b1lar
-b8larar
-b3lat
-bla4u
-b4lef
-bleie5
-blei5er
-b4lek
-ble4k3a
-ble5kes
-ble4mo
-b3ler
-ble7r6a
-b6lesa
-blesse9ne
-b4lest
-2blet
-bli9ke
-bli5ma
-bli5me
-blings6i
-blis3s
-b5lj
-blja4
-blo6dr
-1blok
-blom5m
-b6lu
-blues3
-blu9sa
-bly7gl
-blæ5re.
-blå5n
-blå3r
-blå7sa
-blå5se.
-2b1m
-6bn
-b3ne.
-b3ner
-b7nes.
-b7ni
-b2o
-boa5s4
-bobba6ne.
-bob5by.
-bob9bye
-bo2bl
-bob7la
-bobs4
-bo3de
-bo6din
-bo6d7r
-bo2dø
-4boef
-1boen
-bo2er
-bo4et.
-2bo3f6
-bo4gel
-bogn7
-bog1s
-2boh
-2boj
-3bok.
-bo2ka
-bo6kel
-bo4k3et
-bok1i
-bok1k
-bo6kop
-bo6k5ri
-5bok1s
-boksi8da
-boks4p
-bo2ku
-bok3ve
-b4ol
-bol5eie
-bo7li
-boli7n
-bo7lo.
-bo5loi
-bo4l5o4r
-bol5s4p
-bolst6
-1bomb
-bom4bel
-bom5m
-bo6mo
-bom1s4
-bo5nap
-bon5ato
-4bonn
-bon5ne
-bons4
-bo5nus
-boo6
-boom1
-bo1p4
-bo1ra
-bo4ra.
-bo6re.
-bo7rel
-bo3ren
-bo3ret
-bo4rete
-bo6ri.
-bo3ro
-bor6t7ef
-bor6tei
-bor4tes
-bor6t7et
-bor4ti
-bort5s6
-b4o1s
-bose8te.
-3boska
-bo2sl
-bos5se
-bo4sto
-1bot
-bo4ta.
-bo4tak
-bo4tal
-bo6te.
-2bo7to
-4bot6r
-4bot4v
-bou3c
-4bo1v
-bow4e
-bo6y
-4bp
-b7pl
-br8
-1b4ra
-bra5ka
-brak5s
-bra5se
-bred5sp
-brei5e
-brei3s
-bret7te
-b6rev
-brevi9er.
-bre4vin
-bri5a
-b4rio
-b2ro
-bro9ar
-bro1s4
-3b4ru
-bru5ke
-bruk4s3
-bru4na
-bru7na.
-bru5nes
-bru5pl
-bru7ren
-bru5sa
-brus4l
-1bry
-bryn4s
-b4rø
-brø5de
-bråe6
-brå9ne
-brå5te.
-6b1s
-bs4e
-b4s5el
-b5s6i
-bsk4
-b4sli
-b2sm
-b2s1of
-bs2t6
-b6st7f
-b7s6v
-bså5
-6b5t
-b7t6s
-1b2u
-bu4ar
-4bub
-bu3da
-bud5d6h
-bu3de
-4bu3em
-bu4en.
-bu9ene
-bu4er.
-bue5s
-bu1i
-bu6is
-6buki
-buk3l
-bu5la
-bu4le.
-bul3le
-bun7de
-bund4s3
-bun8ge.
-bunk3r
-bunnla8ga
-bunn3s
-2bu3o
-bu1p
-bu6ra.
-bu4re.
-4bu3ro
-bu3ru
-bus6e
-bu4se.
-bus4h5e
-busk7ø
-bus6sek
-bus4sel
-bus6sent
-bus6set
-busse6te.
-bus6sj
-bus4sn
-bus4sp
-bus4st
-buss3v
-bu1st
-4bustr
-4busy
-bu1ta
-bu4tal
-bu7tem
-b5utg
-4butst
-bu2tu
-bu1tø
-4buv
-6buø
-2b1v
-4b5w
-1by
-bya2
-by5al
-by9are
-by7dep
-by4en.
-by7ene
-by5ens
-by2er
-by3ers
-by4ge.
-byg3l
-3byi
-by1lo
-4bylø
-by5n
-by1re
-by6re.
-by1s
-5bys.
-4byse
-6bysi
-6bysp
-byst4
-by4ste
-4bysv
-by5tar
-by4te.
-by1tr
-2byv
-bæ5rar
-bæ6rar.
-bæ4re.
-bæ5ren
-bæ5rer.
-bæ5rere
-bæ5res.
-bæ5ret.
-bæ3ri
-bæ4r5is
-bæ3ru
-1b4ø
-bø4e
-bø7ens
-bøf3
-bø4kes
-bø6la.
-bø6le.
-bø2n
-bøne5
-bøn6nes
-bøn7o
-bø6re.
-bør4s5k
-bør4sp
-børs3t
-børs8ta.
-børs3v
-bø5ta
-bø1v
-bøy7ar
-bøye5
-bøy4ene
-bøy4es
-bøy4et
-1b4å
-bå4de
-bå9des
-bå6e
-bå7ene
-bå4la
-bå1re
-bå6reg
-bå4rep
-bå4s3te
-bå6s7ti
-bå6t5j
-bå6to
-båt5r
-1c4a
-cab4
-ca4e
-ca5le
-ca5me
-ca5mo
-ca4pe.
-cap1r
-ca6pris
-ca3ra
-car5n
-ca5ro
-car4te.
-ca2sa3
-ca6set
-cash5
-ca5s4til
-cas5to
-ca1t
-cath5
-ca4to.
-6cb
-4cc
-c1ci
-c2d
-cde6
-cebo9
-ce3d
-ce1i
-1cel
-ce5le
-cel4les
-cel4lev
-3cen.
-ce4ned
-ce4nee
-ce4nem
-ce4ne5s4
-ce5nes.
-ce4net
-ce4nev
-5cens
-cen4ti9m
-cen6to
-ce5o4
-1cer
-cerba6ne.
-ce3re
-ce1ro5
-cer3t
-6ceru
-cest3o
-2ch.
-cha5le
-3cham4
-cha7ne
-cha5t
-2chb
-4chei
-chel5s
-che7te
-chi4li
-4ch3h
-2chm
-4chn
-ch5ne
-chom9
-2chp
-8chs
-6cht
-ch1v
-ci1c
-3cid
-ci2e
-cie8n
-cie2s5
-cil5l
-ci3ne
-ci5ta
-2c6k
-ck5ar.
-ck5art
-ck1en
-ck3er.
-ck4ere
-ck5e4t3
-ck5et.
-ck1i
-ck1k
-ck1o2
-ck7r
-ck5s2
-cku6
-ckup3
-ck9ut
-c2l
-clai4r5
-cly4
-c1m
-cmini4
-coa6
-coat5
-co6bid
-1co4c
-2cod
-6cof
-6cog
-co4la.
-co4lab
-co4lak
-co4la5r
-co2m
-co5ma
-com5t
-co6n5os
-con5s
-con7t
-co2o
-co7pa
-2cor
-co3r6a
-co1re
-co4so
-4cost
-co4ver
-c1pr
-cr8
-cras4h
-crack4
-cre2e
-creen7
-cros2
-5cru
-4c4s
-4c1t
-c6ta
-cty5
-1cu
-4cu.
-cu5la
-cu5le
-cu5lu
-cup1l
-cu6po
-cup1r
-cup7s
-cu4på
-2cur
-cures4
-cu6t
-cy2a
-cy6p7
-cys3
-c6z
-cæ5
-1da
-4daa
-4daber
-8dabo
-d5abs
-6d5adel
-d4adg
-dadø4
-dadør5
-4daef
-2daf
-5dagb
-da4gev
-4dagj
-dag7l
-da6go.
-da4g1r
-da6gun
-4dagå
-4dahe
-5dahl
-da1i
-2daka
-4dako
-4dakr
-dak4se.
-4daktig
-da5kv
-7d6al5j
-da1la
-da8la.
-da4las
-6dalau
-dalbu8er
-4d5ald
-da4les
-dal6so
-da1lu
-da4ma.
-da4man
-da3mas
-da4me.
-da3men
-6d5ameri
-dame3s
-dame5t6
-da3mo
-dam7pe
-5dan.
-6danal
-d8ane
-9dani
-2d1anl
-3dann
-dan5neb
-4danno
-7dano
-d4ans.
-dan3sa
-dan4sel
-dan9s8kan
-4dansv
-9dant.
-9danti
-8dany
-2da3o
-2dap
-da3pe
-d3app
-3dar.
-5dara
-2darb
-dard3s4
-4darea
-da4res
-d5arn
-da2ro
-dar5os.
-dar5s6
-dar4ta.
-dar6va.
-dar8ve.
-4dasei
-2dash
-6dasi
-4dasjef
-da4sk
-da9sko
-6dastr
-6dasu
-data5
-4da4tal
-data6le.
-datali8na
-da4tek
-7d6ato
-da3toa
-4da5tr
-dats6j
-d6aud
-daud7s8
-dau5go
-2daut
-2dav
-d5avb
-d1avl
-d3av5s
-4daø
-2d1b2
-dba8le.
-dba4ne.
-dbe8ta.
-dbe6te.
-dbling7
-dbo6en.
-d6byf
-4d1c
-6d1d
-d2dad
-ddag4
-d4dak
-d4d5arm
-dd3eie
-d2dek
-dde4lap
-dde4l5o
-ddel5sv
-d4demi
-dder5s
-d4desu
-ddie8
-d7dom
-d4d1re
-dd5run
-ddsa4
-dd4sala
-dd4skap
-dds5tab
-dd3s4te
-dds5tr
-d2dyb
-ddø2
-ddør3
-d4d5øy
-dd1år
-1de
-2dea
-deak3
-de2al
-de7b
-6debar
-4debas
-3debat
-2debe
-4debl
-2debo
-5debon.
-2debr
-3debut
-2deby
-4debø
-de1c
-5ded.
-2deda
-6d7edd
-7dede.
-4dedek
-4dedel
-4dedia
-2ded4r
-2dedy
-2dee
-5dee.
-de7er
-2def
-d5eff
-d5eft
-2deg
-6d6e5ge
-5degg
-de3gl
-2deh
-5dehavs
-2dei
-dei4d
-dei4ene
-3deig.
-dei8ge.
-5deigen
-dei4g5r
-5deik
-d2e1in
-3deir
-de5is.
-de3ist
-7de7it
-2dej
-8deka
-2deke
-2deki
-2dekj
-5dekk
-dekk3a
-dek4kan
-dek4kel
-dek2l
-6dekly
-5dekni
-de5ko
-4dekod
-4dekon
-4dekos
-2de5k6r
-dek6st
-deks7ti
-deks6tr
-5dekt
-2deku
-4dekv
-4dekø
-4dekå
-d4el.
-6delad
-6delage
-de6lans
-4delau
-4deled
-de4lef
-4delei
-del5ei4d
-del5eie
-4de4lek
-de5lele
-4d5elem
-de4lest
-6d3e4lev
-4delid
-6delinj
-del5int
-4delis
-4deliv
-del4lap
-del6lei
-del4lek
-del6lerf
-del6lig
-d4els
-del4s5at
-del3se
-delses7
-del4si
-del4spo
-d4elt
-del6tala
-del3te
-del7tr
-6deluk
-del5ve
-4dely
-4delæ
-2delø
-delø6pa.
-6deløy
-2delå
-2de5ma
-d3emb
-2deme
-demie4
-4demj
-dem8na.
-de4mo.
-de4mog
-5demok
-4demol
-demo5no
-5demos
-dem5pe
-3demr
-5dems
-4demu
-2demø
-2demå
-d2en.
-4dena
-de7nak
-6d5en6den.
-de5neb
-4dened
-6denel
-4denem
-4denet
-4denev
-6d5engen.
-4deni
-4deno
-de4nom
-d2ens
-den4sin
-den4s3t8
-den6t5ant
-4dentif
-4dentit
-dent3o
-den4tr
-dent5s8
-den6t5u6
-den6tå
-4denu
-2denæ
-2denø
-de2ob
-2deol
-4deopp
-4de3or
-de4ove
-4depak
-4depap
-2depe
-4depi
-4depl
-6depu
-d2er
-de6rant
-de4rare
-de4rark
-5de7rast
-dera5te
-der3av
-der5d
-4derea
-4dered
-de4ref
-4dereg
-4derep
-6deresi
-der5est
-8derest.
-6dereste
-4derett
-de4rif
-de4ril
-5derin
-de4rinæ
-der5k
-der5ne
-de5rob
-4derog
-4deros
-de5rose
-dero8se.
-6de7rot
-dero4v
-der5s6n
-der4sp
-der3t
-der5un
-de5rup
-6derus
-der3v
-4derør
-2derå
-de1s
-3d6es.
-2desa
-4desc
-2dese
-de5seg
-des5ers
-4desho
-desi4s5t
-2desj
-2desk
-9desk.
-5deske
-4des4le
-2deso
-2desp
-7despl
-6de5s6pr
-d4es2t
-5dest.
-5deste.
-de5sti
-4destj
-4desto
-4destrå
-4destu
-6desty
-de4s3tå
-6desup
-2desy
-deså7
-d2et.
-2deta
-deta8ka.
-de3te
-4detea
-6deteg
-6detekk
-4detel
-4deten
-4detep
-detes7
-2deti
-2detj
-4deto
-4det6r
-2detu
-4dety
-4detø
-6detå
-2deu
-d1eur
-5deus
-2dev
-deva8ne.
-devi9er.
-3devik
-d7ev8n
-de5vu
-2dey
-4deø
-2deå
-2d1f
-dfø6rarar
-2d1g4
-d4gel
-d5gi
-dgi6n
-dgjø6re7n6h
-d3go
-2d1h
-dhav4s
-dheim2s5
-dhu9ga
-dhø4r
-1di
-di6ak
-di5alg
-dia5li
-di1ar
-dia3re
-dia1s
-dia7sp
-dias6t
-diats4
-2diav
-2dib
-did5ri
-di7ell
-di5en.
-4di5end
-di1er
-dies4
-3diff
-diffe5
-3diful
-4difø
-di8g9and
-di4gat
-di3ge4s5
-dig7g
-2digj
-dig8la.
-dig6le.
-4digren
-dig5ret
-4digru
-di2gu
-4dih
-4dii
-2dij
-di5ka
-di8ka.
-di5kem
-2dikj
-6dikn
-2diko
-2di1kr
-dik7v
-2dili
-dil4les
-di5ma
-6dimed
-6d5i6mel
-4dimes
-4dimet
-2dimo
-4d5imp
-4dimå
-di5na
-2d1ind
-di7nen
-4d5ingk
-din3gr
-ding8s5en
-ding6s5er
-din8g9å
-dini4
-di4ni.
-4d1inn
-2dino
-2dinv
-4dinø
-3diog
-7diol
-dio3na
-dio4no
-di3ori
-dio5tr
-2dip
-3dipl
-4dired
-4direg
-4d5irs
-5dis.
-di6sc
-di6sed
-dis4i
-disie5ne
-d6isk
-dis6kam
-di4skj
-dis6k7l
-di4sk6o
-dis5ko.
-dis7koe
-dis7ku
-dis5s
-dis1t
-dis7tik
-di5sv
-dis4vi
-2disy
-di4tal
-di7te
-4ditek
-dit4tet
-ditt3r
-di9us.
-di4va.
-4dival
-di7van
-4divek
-div6i
-2divu
-2diøk
-d1ja
-d1je.
-d1jen
-djer5ve
-d7jes.
-dje9ve
-d6jingan
-d6jingar
-d1jo
-dju8la.
-5djup
-6djupar
-d4jø.
-2d5k2
-dka8ra.
-dki6
-d5kj
-dko2r
-dku4le.
-4d1l4
-d3la
-dla4ga
-dland7as
-dla6te.
-dla4v
-d4ledi
-d2lef
-d4lega
-d7legar
-dle3ge
-dlei7er.
-d5leka
-d2lel
-dlem4st
-d4lenet
-d4leru
-dleva8ne.
-d5li
-dli4f
-dli5ke
-d5lo
-dly8se.
-dlø8pa.
-d5lå
-dlå9re
-2d1m
-dme6la.
-dmo4e
-dmors6
-dmo8s
-dmø4re.
-dmå6la.
-8d1n
-dn6a
-dno8de.
-1do
-2doav
-do2b3
-4doba
-do3be
-8do9b8lan
-2dobå
-do4da
-dodø4
-dodør5
-4doeu
-2dof
-d3off
-d5ofr
-dog6med
-dog4me5s
-2dogr
-6do5i
-do3ki
-4dokine
-dok6kan
-4dokn
-do5le
-4doled
-doli8ne.
-4dolinj
-6dolis
-4dolj
-dol5l4
-4domes
-do5mis
-4doml
-do4mo
-dom7p
-2domr
-dom8sa
-dom8s5e6
-dom6s5i
-dom4s3k
-doms3l
-domsla6ga
-dom4so
-do4mu
-do4na.
-don5g
-4donke
-6d7on6kl
-don5st
-don5t4
-2dop
-do4pa.
-do4pe.
-3dopi
-d6o1ra
-do5ran
-2d1ord
-dor4da
-do1re
-dor6gest
-d5orie
-dorm8
-do3ro
-5dorp
-3dorr
-dors6
-dor5ska
-dor5ske
-do1ru
-do7rye
-5dos.
-do4se.
-do4set
-do1sk
-6do7s6l
-2doso
-4dosp
-2dost
-do3str
-4dotr
-2dov
-do5va
-do5ven
-do4ver
-dov9n
-4doø
-2d1p2
-5dq
-dr4
-d1ra.
-d5raa
-d9rad.
-d5rade
-1d6rag
-dra5gen
-dra6kes
-3drakt
-1dram
-5d6rang
-3drap.
-5drapa
-3drape
-d3rapp
-d1rar
-d6rarar
-d3rarb
-dra6ret
-d5rarm
-d5rarr
-d9ra8sa
-9dratt
-drau7ma
-2dre.
-5dreass
-2dred
-d5rede.
-d5reder
-dre7d6r
-d5reds
-9dreg.
-9drege.
-d3regj
-3dreie
-drei5en
-drei5er.
-drei7ern
-d5rej
-d6reka
-d7rekk
-3drekt
-4drel
-d7relig
-4drem
-d1ren
-4drer
-d3ret.
-d3retn
-d6retr
-d3rets
-drett4
-dretts5
-5drevet
-3drevn
-4dria
-3d2rif
-2d1rig
-d2rik
-d3rik.
-dri8ka.
-d3rike
-3drikk
-drik7s6
-d9rikt
-5d4ril
-2d1rin
-dring6
-drit7tr
-drit5u
-dritun8ge.
-1d2riv
-3dronn
-dro6pa.
-drop5s
-3d4ros
-dro8ta.
-2d1rov
-dro5va
-dro3ve
-2dru
-3druk
-d1rul
-d1rum
-d3rup
-6d5rut
-2dryk
-drykk4
-d2rys
-d4røm
-drø6re.
-d7røt
-drø3ve
-d1råd
-drå4de.
-3dråp
-8ds
-d5sa.
-d3sabl
-ds1ad
-ds3a6del
-d1sag
-dsa9ga
-dsak6se.
-d1sal
-dsa8la.
-d4s3alf
-d6sall
-d9same
-ds1a6n
-ds5ane
-ds1a2r
-d2sas
-d4satf
-dsbø6n
-d5se.
-dse4d
-ds1ef
-d2s1ei
-ds3ela
-dsel4s5a
-dse2m
-ds3emi
-d6s7enda
-dsen8de.
-d4s3eng
-d5sens
-ds3e2p
-d7ser.
-d6serf
-ds5erk
-d4s5e4sk
-ds5e4st
-ds3eta
-dse4te.
-d5setj
-ds1ev
-d2s1i
-d3s2id
-d7sida
-ds5ident
-ds3idr
-d7sil
-ds5ind
-d3sir
-ds3i4s
-dsi4ve
-d4s3jen
-d2sjo
-ds7jor
-ds6ju
-ds5kab
-d4s3kan
-ds3kar
-d4skat
-d8s9ki8n
-d1skj
-ds5kjen
-ds1ko
-d5skot
-ds3kro
-ds1kv
-ds1l
-ds5la.
-ds5lan
-ds6lem
-dsli6k
-ds6lo.
-d9slott.
-ds4luk
-ds3ma
-d6smo
-dsmå6la
-ds3ne
-ds5no
-ds1o2
-d7somst
-d4s5os
-d7sot
-ds1p
-d3spek
-d3spel
-ds2pi
-d9s8py
-ds5s4
-dst4
-ds3tak
-d4s3tal
-d3s8tar
-d5s4tat
-ds6tau
-d8s9te.
-ds9teik
-dste6ma.
-ds5teo
-d3s4tig
-d3s4tik
-d5stilli
-ds1tj
-d3stor
-d3stri
-dstu8na
-d5stund
-ds3tv
-dsty8e
-ds3tyv
-ds1u2
-dsure6
-d5s6us
-d6s7usk
-ds1v
-dsva8ne.
-d3s4vet
-dsvi6ka.
-d3syn
-dsy6na
-ds1yt
-d2s1ø
-d6sør
-ds1å6
-4d1t
-d3t4a
-dta6la.
-dta4le.
-dta4s
-d3tem
-dte4ma.
-dt4eng
-dterle7
-dte4se.
-d5t4et
-d3ti
-dt6j
-d7to
-d5t4rag
-d5t4rø
-d6t1s2
-d3t2va
-dtø8
-dt6øk
-dtørs3
-dtå4
-1du
-dub5b
-dub5l
-du1c
-du9ene
-du9ens
-due5s
-4dufo
-3dug
-4dugu
-duit6
-du6ka.
-dul5l
-4duly
-dums2
-du4na.
-dun7de
-4d5uni
-dun5s6
-dun7sta
-7duo
-d3upk
-3dur
-du6ra.
-du6re.
-du6rei
-dur8ta
-du1s
-du5s4a
-du9sem
-du5s2i
-du2sk
-du2sl
-du2sp
-duss4
-dust4
-du2sv
-2d1ut
-du6va.
-du4ve.
-2d1v
-dva6la.
-dva6lel
-dva4ne.
-dve6s
-dve6va
-dve8ve.
-d7vo
-dvo8r
-2d1w
-1dy
-dy9a
-2dyba
-2dyf
-dy5ke.
-4dykl
-4dykø
-2dyl
-dy4na.
-dy4ne.
-4dynk
-dynk6s5
-dy3pes
-dy2p3r
-dy4ra.
-dy5reba
-dyrle8ge.
-dyr5s4
-dy2r5u
-dyr5ø
-7dys.
-dy8sa
-4dyse
-dy6se.
-dys7s
-dyst7r
-dy2t
-d5z
-8dz.
-1dæ
-dærs4
-1dø
-4dø.
-død2s1
-dø3gr
-2døk
-d5økn
-dø4ma
-dø4pe.
-dø4pen
-d2ør
-dør3i
-2døs
-d6øs.
-dø2st3
-døt3
-dø9va
-dø3vel
-dø1vi
-6døvl
-døv8le.
-2døy.
-døya8
-døy8g
-4d9øys
-1dåd
-dåd6s5
-då8na.
-1dåp
-då8ra.
-då5ri
-d3ås.
-då8sa.
-då7sem
-d7åt.
-2ea
-e1a2b
-e1ad
-ea2d1i
-eadli5
-e1af
-ea2gu
-e1a2k
-e4akr
-eak6se.
-e1al.
-e5alle
-eal8le.
-ea4lov
-e3alte
-ea2lø
-ea4m1
-e3aman
-e5amn
-e1an
-e2an.
-ea4ne.
-e6a5net
-e4ani
-ean7n
-ea4nor
-e6ans.
-ean3sl
-e1ap
-ea4pe
-e1ar
-ea2re
-ea5rer
-ea5ret
-ea5r4i
-ear6ka.
-ear8ma.
-ear4ta.
-ea2s1i
-e3asp
-e1ass
-ea7ta
-e5a4tel
-eate6ren
-ea4t3et
-eat8h
-eat6le
-e8ato
-ea5tri
-e1att
-e1au
-eau6ga
-eau6ge.
-eau8ra.
-eau6re
-eau5s
-eau8sa
-eau8se.
-e1av
-eav8la
-eav8le.
-2e1b2
-eba3d
-eba4ne.
-eb3be
-eb4be.
-ebe4d3e6
-ebei7er.
-eben6s5k
-ebers6
-ebesku5
-ebet5s
-eb3h
-e5b6lo
-eblæ5
-ebob3
-ebo4da
-ebo5ers.
-ebo6kr
-ebo6la
-eb5s
-ebu4e5re
-ebu5ern
-ebu6et
-eby4ta
-ebø6n
-2ec
-e4ca
-ec4c
-e1ce
-e5cha
-e3com
-e2dad
-ed5ad.
-e5d4ag
-e2dar
-ed3ark
-ed3arv
-ed7dela
-ed4dyr
-e3de.
-ed5e6ge
-ed5eg4n
-ed3eie
-e4deks
-ede8le.
-e4denf
-e8d5eng
-eden5t
-e6depr
-ede4ra
-e4derø
-e4desk
-ede4sl
-ede4sm
-e4desn
-ede4s5p
-ede4ta
-e6d5ett
-e8dé
-e5d6ia
-edi6a5ne
-edi4ene
-edi6gj
-ed4is
-edi3si
-edi4s5k
-e7div
-edle6ge.
-ed8ob
-edok8se.
-e4dol
-ed1op
-ed1ov
-e1dr
-ed2ra
-ed3reg
-e5drev.
-ed3rom
-e6d5ryg
-ed7ski
-ed3skr
-ed3s4la
-ed2sm
-ed5ta
-ed3te
-edt6r
-edu8a
-ed7va
-edvi6s
-e3dyk
-ed5ynk
-edyr6ke.
-edæ4
-e3d6ø1r
-e3e2
-eea7
-ee3b
-e2ed
-ee3di
-eeg4ga
-eeg6n
-ee5gå
-eei4d
-eei7ni
-eek1e
-eek4te
-ee3la
-e5e4li
-eem6na
-ee4n
-e5enb
-een3in
-een6k
-een5t
-e3epl
-ee8ra
-eer3en
-ee3ri
-e4er3l
-eer4me.
-ees8ka
-ees6ke.
-e3e6t
-eev4ne.
-e1f
-4efa
-efal6s9
-e4fana
-ef3ank
-e4fark
-efar6s5
-ef7ea
-ef5ef
-ef3fe
-3effek
-ef3fo
-4efi
-e4f3id
-e5fig
-efi7ren
-efisken8
-4e3fj
-2efl
-efle6ge.
-eflå3
-e2fn
-efo8bi.
-efo4no
-ef2sj
-ef2sk
-ef2sp
-ef6str
-e8ft
-ef2ta
-efta5r
-eft5ei
-ef5ter
-eftle8ge.
-eft1s4
-6efu
-efyrs5
-e3fæ
-4efø
-efø5le
-eføy9
-2ega
-e3gaf
-e6gala
-e7gam
-ega4ve.
-egde8l
-eg7des
-e5gedo
-egei9e
-ege4let
-e2gem
-e3geme
-egen5s
-e7geom
-e2ges2
-ege5sp
-eg9gen
-egg3l
-eg8g9ut
-egi3an
-egie2
-e4giko
-egis4p
-e3g6lad
-e3g4led
-eg7lesa
-e5g4lit
-eg7ly
-e5g6lø
-6egm
-e9g8nag
-eg4nem
-eg6no
-e7gnå
-4ego
-e4go.
-7egoi
-eg2r
-egrans5
-e7g8rø
-egs4am
-egs4ki
-egs4ta
-e1gø
-egøy6e5ne
-4egå
-egå4va
-egå4ve.
-e1h
-ehea4
-ehei9e
-eh5er.
-e4h5ere
-eh7ern
-eher4s
-ehog5
-ehov2
-ehy6re.
-ehø8va
-e6hå.
-2e8ia
-e9iakt
-ei9a4n
-ei7ar.
-ei4c
-e8id.
-ei3d8ar
-e3idea
-e3ideo
-ei9der
-ei5det
-5eidf
-5eidg
-e6i2do
-e1idr
-ei3d4u
-ei7e
-eie5d
-ei8eg
-eie2n
-ei9en.
-eier3a
-ei4ert
-ei6es
-ei1fl
-8eig.
-ei3ga
-eig6e
-ei6gev
-ei5gi
-ei6gra
-ei6gu
-4eii
-ei5kaa
-ei3ke.
-ei6kee
-ei6keh
-ei4kel
-ei6keri
-ei4ket
-ei1kr
-eiks3a
-eik6se
-eik4so
-4eil
-ei9led
-eil5egg
-e3illu
-ei3lo.
-ei9loa
-eil5op
-ei5los
-eil5s6
-4eim
-ei7ma.
-e5imag
-ei4m5a6l
-ei4med
-ei6mei
-ei7men
-ei4me5s
-ei4met
-eim9ett
-ei6mo
-e1imp
-ei4n3al
-ei4nans
-ein5ant
-ei7nare
-ein1d
-e3indu
-ei5ned
-ei7nel
-ein9f
-einga6
-ein3gr
-e4ini
-ein3k4
-e5inkar
-2e1inn
-ei4nom
-ei4nov
-einsi9d
-ein4s3l
-e4inspi
-ein7sto
-ei2n1u4
-ei2n3ø
-ei5or
-ei9pa
-ei3pe
-eip5s
-2eir
-eir9ak
-ei7ren
-ei3ri
-eir5s
-2eis
-ei5sar
-e4ise
-ei3se.
-eise5i
-ei3sen
-eiseri9e8
-ei3s4ha
-ei4sil
-e3isk.
-e3iske
-ei6s3kj
-eis3ko
-ei3s4pe
-ei4spi
-ei4tek
-ei4tera
-ei4tere
-ei2to
-eit7ta
-ei6t7ut
-ei3tve
-ei6t7ø
-ei4vak
-eiva9r
-ei9ven
-ei3vi
-eiv5s4
-e1j
-ejo8en.
-eju6la
-4e1ka
-ekali7
-ekalie6
-ekam6s5
-eka6ra.
-e5kavr
-ek3eie
-e4kero
-e4kes
-ek5e4ta
-e6key
-e5k6hov
-e1ki
-e4ki.
-4e1kj
-2ekk
-ekke7le
-ekk9ist
-ek1kj
-ek4kjø
-ekk3l
-ek5kok
-ekko5v
-ek6ku
-ek4ky
-e1kl
-e8klane
-ek6leg
-e6klen
-ek5let
-e3klu
-e5klæ
-ek2lø
-4ekn
-ek9na.
-e3knek
-ekne7s
-ekni7p
-ek3no
-e3k4nok
-e1knu
-e5knø
-e1k2o
-e4ko.
-eko7le
-eko6te.
-e4kov
-2e1kr
-e3k2ra
-e3k4red
-e7kref
-e3kren
-e4k5ret.
-e5krets
-e5k4rev
-e3k2ri
-e3kro
-ek4ry
-e3k4rå
-ek5råd
-ek3s4ak
-ek4sal
-3eksam
-ek3sel
-3eksem
-ek4sig
-eks1k
-ek4ska
-1eksp
-eks5pe
-ek4sta
-ek7s6tel
-ek3sti
-ek5stil
-ekst5o
-ekst3å
-ek4sæ
-ek6t7arm
-ekt3av
-ek3tef
-5ek3tep
-ek5tes
-ek6test
-ek4tid
-ekti5m
-ek5tiv
-4ekto
-ektori6a
-ek4t3ra
-e1ku
-eku4le.
-e1k2v
-ek4val
-ek6var.
-6ekve
-e4k5ve4d
-e4k5vik
-ek4vin
-ek6vis
-3ekviv
-e5ky
-eky6te.
-e3kæ
-e1kø
-e1kå
-ekå6pa
-2e1la
-ela4ga
-el3agg
-e2l1ak
-e5lake
-elak8se.
-el7akt
-el1al
-el3anl
-e4larr
-el7arti
-e5las.
-e5lase
-ela4te.
-el5ato
-el5avl
-el3avs
-elbo8da
-el4ch
-el5do
-eld4rer
-eld5sle
-4eled
-e4ledi
-e4ledr
-e3lee
-eleg5d
-ele7ger
-eleg8na
-e7leir
-e7leis
-e5leke
-e2lel
-e2lem
-e5lem.
-e5lemat
-5elemen
-e5lemet
-e3lemm
-4elen
-ele9na
-e4l5enh
-elens3
-e4lentu
-e5lepa
-2e3ler
-ele8ra.
-e7leret
-e6l7erg
-ele3sk
-e6lesku
-e4leta
-e4lete
-5e8lev.
-ele4vak
-el5fi
-el9ga.
-el5gele
-el5gi
-elg3s8
-2eli
-e9lie
-eli5e6rer
-e4lif
-e4li5g4r
-e4l3ind
-elin5es
-e4linsp
-eli6o5s
-eli8ta.
-eli4tet
-eli6v7en
-el1j
-elk2
-el4ke5s
-el4kete
-el3kn
-el5la.
-el5l6ar
-el4led
-el4leg
-ell5eie
-el5ler
-el3le4s
-el6lete
-elli7ga.
-el4lisj
-ell7sa
-ell5sk
-ell5s4l
-ell5sp
-ell5sv
-el5l4ur
-el4læ
-el5m4o
-el5mu
-el5n
-2e1lo
-elo6ka.
-e2lom
-e3lomm
-el3omn
-el3oms
-el1op
-e2l1or
-e3lort
-el3ost
-el4ot
-elo7vers.
-e4l5ovn
-el4pet
-el5ph
-elro4s
-el4sei
-els5eie
-el3sen
-el3se6s3
-el3si
-el4sje
-el4skal
-7elskand
-els5kare
-els1l
-el6sno
-el4spe
-el3spr
-els4ten
-el4sti
-el4stj
-el2sø
-els5øk
-el5s6åpe
-elta8le.
-el5te.
-el6teg
-el4tero
-el4t5ett
-el4t3op
-el4tro
-elt5rop
-el2tu
-e3lua
-e1lu2e
-e3luk
-e7lum
-el3ung
-elun6ge.
-e7lup
-elu8pe.
-e1lur
-e7lus
-el3utr
-elv3an
-el4ve3d
-el4vei
-el6vere
-elv1r
-5elvs.
-elvæ6re.
-4e1ly
-ely8et.
-el5ynd
-2elæ
-elæ5res
-el9ærv
-e6l5æt
-2elø
-e4l3ø4r
-el3øy.
-el5øya
-el5øyd
-e6l3øyn
-2e1lå
-el1år
-e5låt
-4em.
-e2mad
-emafo5
-ema4ge.
-e4magr
-e2mah
-ema4ke.
-e4mako
-em5akti
-e4maku
-ema6le.
-5e4malj
-e4mam
-e4mana
-ema4ni.
-e6manu
-e4mare
-em7ar8m
-e4masi
-e6masku
-e4mata
-ema3uk
-ema5ve
-5emball
-3embed
-embe6r5
-3embet
-6emd
-8eme
-emei9e
-eme4li
-e4mend
-eme5tri
-eme6trisk
-em5e4v
-e4mib
-emi5ert
-e4mig
-4emin
-emi5ni
-emini6st
-e4minor
-e6mir
-emi9sa
-em7je
-e5mju
-em5le
-emle6s
-em5me.
-em5men
-em8mi.
-8emnd
-em4ne.
-em4ned
-em4nem
-6emni
-emo5nol
-em1op
-e2m3o4v
-em4ped
-em6peri
-em2p3l
-emp9lane.
-em6pli
-empo3
-em4pol
-em4pos
-em4ses
-emse8te.
-em4s5ju
-em4s1l
-em2sn
-em4sor
-em1st8
-ems4te
-ems3u
-emta8la
-em4til
-e3mug
-e2muk
-e5my
-emy4k
-6emø
-emø8r
-e5møy
-emå4la
-emå9lan
-emål4s
-em1å8r
-2ena
-en1ak
-en3ald
-ena5li
-en3all
-en5and
-e5nane
-e6n7ang
-e4n3ant
-e5nar.
-en8are
-e4narr
-en3ass
-enat6s5p
-ena2v
-en3avi
-4enb
-enbe9na
-en4d5and
-en4dek
-en3del
-endelø7se
-en5demi
-en3der
-en4desl
-end5l
-1endr
-en4d3ro
-end3st
-en7dø
-endø4r
-endør5e
-en5egg
-eneg8ga
-en3eie
-en5eks
-e3nekt
-4enem
-2enen
-en5eng
-3energ
-e4nesk
-4enev
-ene7ven
-eng6a
-en7gar
-en4gem
-en4geri
-enge6r5u
-en4gle
-eng4les
-eng4r
-eng3s4e
-eng5so
-eng5sp
-engs4ti
-en4gut
-en4g5å
-4enhj
-e4ni.
-e4nierk
-e2nif
-e5nir
-en4kera
-en4keri
-2enna
-en9nal
-2enne
-en4nem
-ennes6t
-enne4s5v
-enn2i
-enn2o
-enn4sj
-enn5sta
-enn7ø
-2eno
-en3ok
-en3og
-en3om.
-en1op
-e6n5ord
-2enp
-en4pås
-en4rem
-en5sab
-ens5af
-en6s7a6ker
-en4sek
-en4seli
-5ensemb
-en4ses4
-en3si
-ensi8de.
-ensi5ert
-en4sim
-ensle7g
-ens6lev
-en7s6opt
-en7so9v
-en1st
-en6s7tal
-ens4ter
-ens4ti
-ens7und
-ens4ve
-ensvi6
-en2sø
-ens3øk
-ens7å
-en5ta.
-en4tap
-en5te.
-en4tec
-en4teg
-en4tel
-en3ti
-en5tie
-en5tig
-en5tik
-en9tima
-en7timen
-en4to4r
-ent5ori
-ent5rab
-en4tre
-ent5ren
-en4t5rol
-entropi5
-en4t3rå
-en6tul
-entun6ge.
-3entus
-2enu
-e2n7ul
-e4n5ur
-2en3v
-4enw
-e4ny.
-e2nyb
-e6nyr
-e2nys
-e4nyta
-4e7næ
-enæ8m
-enø4k
-e2n3øv
-en5øyd
-4enå
-en1ås
-en6ås.
-e3o6
-eo3a
-e6obe
-eo2bl
-eo5d
-eod8de.
-e1og1
-eo7gr
-e2o1i
-e2ok
-e3oks
-e2ol
-e4o7lo
-eom1s4
-eon8de.
-eo5ne
-e7onk
-eon4kl
-e3ont
-eo2p
-eo3pa
-eo5pl
-eopo3
-eopp5r
-eo3pr
-eor4da
-eo5re
-e2ori
-eo4rid
-eori5e6
-eo4rik
-eo4ris
-eo1ro
-eo1s
-eos6l
-e2o1u
-2e1p
-epa3t
-e6peno
-epe6p
-eper5r
-e3pes
-epe4st
-e4peta
-e6peu
-3epid
-epi6ka.
-epi7kr
-3episo
-ep2l
-e8plen
-ep5lene
-ep5ler
-3eplet
-epo6et
-3epoke
-epp2s
-ep6sem
-ep4ses4
-ep6s5lu
-eps1t
-ep2su
-e3p2sy
-ep6tin
-ept6r
-2e1ra
-e4r3abb
-era8da.
-e4rael
-e2raf
-er3aft
-e4ra4g
-e2r1ak
-e3rake
-era5kl
-eral3u
-e4rama
-era6na.
-e5rande.
-e5ra7ne
-er7anli
-era4no
-er5ape.
-er5aper
-er5a4pin
-er3apo
-er5appe
-e5rar.
-e4rarg
-e5rasane
-e5rasar
-e4rasje
-e4rask
-e6raso
-e4r3ass
-er6ast
-e4ratek
-era7tor
-e4ratr
-er5att
-e2rau
-er5auk
-erau9ken
-erau8s
-er3av.
-er3avh
-er5avl
-e3ravn
-er3avr
-er3avs
-4erb
-erbi9ti
-erbo8da
-erbo8de.
-er8byl
-erd2e
-er4ded
-erden8s
-er4dis
-er1dr
-erd4ra
-erd8re
-erd4skj
-erds3t
-erd4sto
-erdsto8ga
-erd4v
-e1re
-er3eff
-er3eft
-er5e4gen
-er3eid
-er3eie
-ere6ka
-ere6ke.
-e4r3eks
-e4r3e4le
-ere4lit
-e6relli
-e4r3els
-e9rem.
-e5remm
-er3emn
-er5enden
-e4r3eng
-e4r5enh
-e3re4o7
-er8er.
-e4r3erf
-e5reri
-er3ess
-ere4t
-e5ret.
-e4r3eta
-eret6h
-ere5to
-e7rets
-6erett
-eretts5
-e4r3e4va
-e4r5e4ve
-e4r3evn
-erev6ne.
-e8ré
-5erfari
-6erfi
-4erfr
-2erg
-erg5elv
-ergi3f
-er6gli
-er4go.
-erg5ret
-erg5sko
-erg5sp
-2erh
-erhø6re.
-e1ri
-e4riad
-e4riak
-erib3b
-eri3bl
-e4rice
-e2rid
-e5rid.
-e5ridn
-eri4kat
-e6rikn
-4eril
-e7ri6ma.
-er3ind
-e3ring
-6eringar
-ering6si
-er3inn
-er3ins
-er3int
-e5riori
-e5ris.
-e4risa
-eri3se
-e4riso
-e6risp
-e5rist.
-e7rista
-e5riste
-eri5stil
-e4ri5s6to
-eri5sø
-e4rite
-e4rito
-er7ivo
-er7jes.
-4erka
-8erke
-erkeri6e
-er4kesa
-er4kese
-er4kete
-er6k5ett
-3erklæ
-6erkn
-4er5k4o
-4erkr
-erland7as
-erle6ge.
-erle7s8t
-er3me
-ermo8de.
-erm1s
-ermå6la.
-2ern
-er4nad
-er4ned
-er5nede
-er6nee
-er4nero
-er4nest
-er2no
-er3nob
-2ero
-e3roa
-er3obl
-5ero4b7r
-e1roe
-er3off
-e1rog
-er5oks
-e1rol
-er3oly
-e1rom
-er5omk
-ero5mo
-e1ron
-er5ond
-erono5
-er1op
-e5rop.
-e7ro6pa
-e5ropen
-er1o2r
-e5ror.
-e3rore
-e7ro4sa
-3erosj
-er3osl
-ero4ta
-er1ov
-2erp
-2err
-er3ra
-er4rae
-er4rel
-errie9n
-6ersa
-ersa8ka
-ers6al
-er3sep
-6ersj
-er1sk
-er3ska
-ers4ka.
-er8skaran
-er9s6karar
-ers5kor
-er1sl
-ers4la
-ers6led
-ers4mi
-er5sne
-6ersp
-ers5tens
-ers5ter
-er7stev
-er1su
-4ersv
-er4sva
-ers4ve
-er1så
-er4s5år
-2erta
-er4tare
-er4te3s4
-er5tia
-er3tib
-erti4e
-er5til
-erti4mo
-er4top
-ert5rol
-4erts
-ert3sa
-erty6e
-ertå7ren
-2eru
-e1rua
-e5rud3
-e1rui
-er1u2k
-e3rum
-e4r3ung
-er3uni
-e3rup.
-er1u8r
-erure8
-e1rus
-er5ut.
-e5ruta
-e3rute
-er5utn
-er9uto
-e4ruts
-er7u6v
-ervele8
-6ervi
-ervs3
-ervæ6re.
-e1ry4
-erye7ne
-er1yr
-erys3
-e1ræ
-e9r4ære
-2e1rø
-er5økn
-er1ø4l
-e4r5øn
-erø8ra
-e6r5ør6s
-er3øya
-e4r5øy7e
-erøy4n
-e4r5øys.
-er7øysk
-2e1rå
-e9rå.
-erå4da
-erå8de.
-erå6e
-erå4k
-er5åke
-er3å4l
-e2r1ån
-er3å4p
-er3å4se
-erå6t
-er7åta9
-e6råv
-2es.
-e1sa
-es5aa
-e2sad
-esag6
-es4al
-esa6la.
-esa9met
-e4s3ant
-es5arab
-es5arv
-esbi9e
-2ese
-es5ege
-es3ei4d
-es5eie.
-es3eig
-esei8ge.
-e3sek
-e4seku
-esel5s4
-e3s2en
-e5ser.
-e5sere
-e5seri
-e4s3erk
-ese5s2
-e3sest
-e4sesv
-ese5tas
-ese4te.
-e5setj
-e9sets
-e4seu
-e4sha
-es6har
-esh9ar.
-es4h5er
-e4shi
-e1sho
-esi6ar
-esi5ert
-e4sil
-e5sili
-es3ill
-e4s3ins
-esi6v
-esi3st
-es3jor
-e5skab
-es6ked
-es4kee
-es4ker
-e4sking
-eskinns5
-e1skj
-e8s9kjer.
-es4kjæ
-e6skjøn
-es5k4n
-e5sko.
-es7koa
-e3skot
-e1skr
-e1sku
-esku5et
-es3kvi
-e5sky
-e6skyr
-e1skø
-e7skå
-eskå7r
-e1sla
-es4lek
-es4let
-es7let.
-es7lets
-es4lit
-e4s5lok
-es4løk
-es4make
-e7s4mett
-es9na.
-es4ner
-es2no
-es4nu
-es2ny
-esnæ5re
-4e1so
-eso4b
-e2s3od
-e2s1of
-es3oks
-e2som
-e3somm
-e4s3ori
-e1s2p
-espa9ra
-es3pas
-es5pe.
-e4s4ped
-es5perm
-es3pl
-es4p5le
-es3pol
-e3spor
-es3pun
-es4sed
-es4see
-es4seg
-esse7i
-es6sendi
-es4s5enk
-es4ses
-es4sete
-ess5e4va
-es4s3ja
-es4sje
-es4skr
-ess4let
-ess3om
-es4sos
-es4spa
-ess5tilt
-es4stol
-ess5tor
-ess9tua
-ess5tue
-esstu8en.
-4essu
-es2s1v
-e7stad
-es5tae
-es7takt
-es9tala
-e8stane
-e5stans
-es5tant
-es3tap
-e5start
-e3stat
-es5tato
-e4s3tau
-e7stav.
-est5avs
-e6s5te.
-es4teg
-est5eie
-est5eig
-es4tek
-es4tel
-e5stell
-es5tels
-e4stema
-e6steme
-e4stemo
-es5temp
-6esten
-e7steng
-es5tenk
-e8s7ter.
-e5s6terk
-esterne8
-este3s4
-es4test
-es4tien
-e3stif
-es4tig
-e3stik
-es4tikk
-es4tis
-e4stiv
-e1stj
-es3t6on
-e4stog
-e3stok
-e3s4tol
-es6tone
-est5ord
-est5ori
-es5trak
-est5rene
-est5rer
-est9ré
-es5trib
-e5stryk
-e3strå
-e1stu
-e5stud
-es5tus
-8estå
-estå5ren
-estå6s
-est7åse
-e1su
-es5ut
-esva5re
-e5s4vek
-es5vig
-e5svikt
-es3vis
-2e3sy
-esy4na
-e4s5yt
-es5øvi
-es7øye
-e1ta
-4eta.
-e4tae
-e2taf
-etafo7
-e3tak
-e6tako
-e3tal
-eta3la
-eta4la.
-et5ald
-eta5le
-etal6list
-etall5s6
-etal4s7
-et3amb
-e6tand
-eta4nen
-et4ap
-e9tapa
-e5tape
-3etappe
-et8ar.
-et8are
-et5art
-5e6tasjes
-1e2tat
-4e5tati
-e5tato
-e3tatt
-et5aun
-e8tax
-et1c
-2ete
-e4teka
-ete4ma.
-e5teran
-ete5ru
-etes5i
-e4tesl
-et8et
-e5tet.
-e7tets
-4eté
-4eth
-2eti
-e3tit
-2e1tj
-e7tjer
-et3jø
-6etl
-et5m
-2etn
-et6nev
-etning4
-etnings7
-2e1to
-eto4er
-et5oppd
-et3ord
-e4tot
-2e1tr
-e5t4rad
-e7t6rak
-e5tree
-e5tref
-e4t3ris
-e9tru.
-et5rum
-ets1
-et9sar.
-et4sku
-etsku8le.
-ets7l
-etsla8ga
-etsnæ4
-et2sø
-et4tak
-et4tal
-etta6le.
-ett5alt
-et4tank
-et8tap
-et5te.
-et6tei
-et6telt
-et4tenk
-et4tenn
-ettera4
-etter5at
-et5t6erf
-5etterk
-5etterr
-ett5esk
-2etti
-et6tia
-ettian8
-et4til
-et2tj
-etto5a
-et4tr
-ett3re
-ett4ski
-ett4sti
-et3tug
-et4tur
-ettvi5se
-et2ty
-2e1tu
-5e6tui
-etu6na
-et3uni
-2e3t2v
-e4t3va
-e5t6vang
-2e1ty
-4etz
-4etæ
-etæ3ra
-e1tø
-e1tå
-etå5re
-e1u
-eu4a
-e8uf
-eug8la
-eu4h
-eu4ka.
-eu2ke
-eu5kem
-eu7kr
-eu2l
-eum2
-e3u2n
-eun4ge.
-eu5nu
-e4up5a
-e6upk
-e2ur
-eu6rat
-eure4
-2euri
-e3urn
-eur8na
-eur6ne.
-euro1
-3europ
-e3urt
-e2us
-eu4si
-eu1ta
-e3uts
-eut7t
-e4u3z
-e1v
-evad6r
-ev5akti
-eva4la
-evann4s
-e4v5anta
-e4varar
-e4varb
-e4v5ark
-e6vatf
-6eved
-eve5d6a
-eve5del
-6eveg
-e5vegg
-evei6s5
-even5s
-5eventy
-e4veny
-e9ver.
-e5ves.
-e5veta
-e5vev.
-evi4e
-evi5ere
-evi5ert
-evin4s
-evi4se.
-evis3t
-e2vj
-ev2na
-evn5a4k
-ev7nu
-ev7oms
-e7vri.
-ev9rå
-ev1s
-evs8v
-evta8la
-evti4
-e2v3un
-e5vyrk
-e2vø
-ew3a
-ey1
-eybal4
-e1y2d
-ey5k
-e1yng
-e1yr
-eyr6ka
-eyr4ke.
-e1y2t
-e7yti
-ey3tr
-e3zi
-e1zu
-e1æ2
-eær3
-e1ø4
-eør6na.
-eøy4
-eøy9an
-eøy7en
-e1å6
-eåk4
-eån8da
-eåt8t
-é1a
-é1b
-é1d
-édø4r5
-é5e8
-é1f
-é1g
-é1h
-é1i
-é1k
-é1l
-é1m
-é4n5e
-é5n6et
-é5o
-é1p
-é1r
-é2rj
-é1s
-ése2
-é1t
-é1v
-éva8la
-évo8re.
-é5å
-è1r
-è2red
-è2ref
-è2rek4
-è4rener
-è2rep
-ère3s2
-è4rest
-è2rev
-è6ves
-ê8lan
-ê6ra
-ê1re
-êr7o
-êr9sl
-1fa
-4fabo
-fac8
-fa1ci
-fa3de
-fa6de.
-6fadm
-fa4f
-fa2g1a
-fa5ger
-fage4t
-fag5eti
-fa2gi
-fa2go
-fa2gr
-6f5agro
-fag3sk
-fa2g1u
-fai5
-2fakr
-fakse9t
-fakta3
-fa1ku
-5fal
-fa1la
-fal6kes
-fal4k3l
-fal6lers
-fal5m
-fa4lo
-fal4sk
-4fa5mo
-fa4na.
-7fan5d
-5fane
-fanfa5
-fang4s
-fangst7ev
-4fank
-2f3anl
-fan5s6
-fan7tesk
-fan5ti
-fan3to
-fan4try
-6fanu
-2fap
-3far
-9f8ar.
-fa3ra
-fa4ra.
-fa4re.
-fa4res
-far4gel
-far4ges
-fa4rit
-far5n
-far6skj
-fart2
-far4vel
-4fary
-fa7sa
-fa4sel
-fa4seru
-2fasl
-fast3r
-fa3tal
-fa4te.
-fa6t7ers
-fa1to
-fat2r
-fa3t6re
-fav5ne
-fa1vø
-2f1b
-fba4ne.
-2f1d
-1fe
-3fe.
-2fe1a4
-5fea.
-fe5a6l
-2fec
-fe4da
-3fede
-fe2dr
-fe3dra
-fe3d4ri
-fe7ene
-2fef
-2fe3g
-2fehj
-fei5en
-fei5er.
-feig4de
-fei5ge
-feil5es
-fei4li
-9fein.
-7feine
-fei7ter
-8fej
-2feka
-4fekl
-2feko
-4fekr
-fek6tes
-fekt5ev
-fe5lag
-fe5len
-fe5li
-feli7e6
-6felik
-felles5
-fel7læ
-2felo
-fel5ok
-fel9ta.
-fel4tek
-fel4ti
-fel4tra
-fem5ak
-fem9b
-fem9ne
-fe4mo
-fem5s
-fem4tid
-fe2m1ø
-5fen.
-4fena
-fend9r
-4feni
-5fens
-fentleg5
-2feo
-2fe3p2
-5fer.
-fe6ral
-4feram
-fe5ras
-fer6at
-fer4dam
-fer5de
-4ferea
-4fereg
-fe4rek
-fer6en
-fe7rer.
-fer5ers
-feri6e
-feri8e5ne
-7fern
-fer2r
-fers9kar
-fers7ke
-2fe1ru
-3fes.
-2fesi
-2fe1sk
-fe2st
-fes9t6i
-fest3r
-fes9tum
-fe6st9ø
-4fesy
-fe6ta.
-4fetap
-fe4te.
-4fetea
-fe5ti
-4fetil
-2fet6r
-fett5j
-4fe4ty
-2feu
-2fev
-fe4ven
-2feø
-fe6øy.
-2feå
-1fér
-2ff
-f7fa.
-f4fab
-f2f3a2g
-f4f3ak
-ffa7l
-f6fann
-f4farb
-ffar6d
-ffa7re
-f9fas
-f6fat
-f8f9au
-f2f3av
-f2feb
-f2fe3d
-f2fee
-f6feh
-f2fem
-f6ferdi
-ffe4rer
-f2fes
-f4feti
-f4feto
-ff5eve
-f2fib
-f4fice
-f2fid
-f9fien
-f4finn
-ff5int
-f2fip
-ffi5s4
-f2fj
-ff3la
-ffla8ga
-ff9leg
-ff3li
-f2fo
-ff1re
-ff1ro
-ff5sl
-ff5t4
-ffu6r
-ff5ut
-f3fæ
-f4fø
-2f3g2
-2f1h
-1fi
-fia7l
-fia4n
-4fiap
-fi4as1
-fibi6en
-fi9cen
-fici7
-fi7di
-fie2
-fi1er
-fi7e6re
-fi4f
-fi5fi
-fi5fo
-fi7fl
-f6ig
-figh9t
-fi7g6r
-4fih
-fi9ka
-fikali7
-fikalie6
-fi7ken
-fik6ka
-fik6k5n
-fi5ko
-fik7sa
-4fiku
-fi4la.
-fi3li
-fil6lel
-fil6leri
-fil4les
-fil7leti
-fil8m7at
-fi1lo
-filt6re
-fil7tres
-fil4tri
-4filæ
-fin5art
-fin5d
-fi4ne.
-fi5ner
-fing3r
-6finj
-finn5ei
-6finnsa
-fi4n3o
-fi9nor
-2fins
-fin6sleg
-fin6te5s
-fi2nu
-7fio5
-fi2r
-fi3ra
-fi6ra.
-fi9rene
-fi5res.
-fi3ri
-fi5s4a
-4fisc
-fi6se.
-fiser6s
-fi8si.
-fi2sk
-fi6ska
-fisk5a6d
-fis7kal
-fisk5and
-fis6kart
-fis6k5end
-fis4k3l
-6fiskol
-6fisku
-fis5ti
-6fistu
-fiti6me.
-4fitr
-fitt5s
-fi7ty
-fi4ve.
-1fj
-f1jeg
-fjel6lend
-f5jen
-fjer5ne
-fje4sk
-fje2t3
-f5ju
-fjære5
-fjæ4res8
-2f5k6
-f2l2
-f5lag.
-fla7ke
-f4las
-2fleg
-fle6i
-f4lek
-f6lel
-fle4sl
-f4lett
-f3lev
-fli7ne
-flis7t
-flit9t8
-1flo
-flo9ga
-flok9s
-flo2m3
-flo6r5o
-flos6kl
-f6lu
-flue3s
-flus8
-fl5ut
-3fly
-fly3s4
-f3løn
-flø5s
-1flå
-flå9sa
-flå7se
-2f1m
-fn6
-1fo
-2fo.
-fo9ar
-2foe
-4fof
-foi7la
-fo8ke.
-fo6la.
-fol4dr
-fo4le.
-fo5led
-fol6k5v
-fol9ler
-fol5lese
-folke5s6
-fol5li
-fo4lu
-3fon
-fo4na
-fond2
-fo5ne
-fo4nin
-fon1s2
-f1op
-for1a
-for9drev
-for7dro
-for5d6u
-fo6re.
-for9ei
-for7e6n
-for5ent
-for5ess
-for4et
-for9e8te.
-for9e8ten
-for9g6
-forh6
-fo4r9in
-fork8
-forlo7v
-forlø9pa
-forlø9se
-formo9r
-for3n
-foro6
-for5p
-for3se
-forsi9da
-forsi7de.
-for3s4m
-fors8t
-for9ste
-fors4v
-forta8le.
-for5t6e
-fortei9e
-for7t6i
-forti5da
-for3t4v
-for3u4l
-for7v6
-forva9re
-for5æ4
-for5ø4
-for9å
-fo9se
-fosfo5re
-4fosj
-fo4ta
-fo6te.
-foto5
-fo4tok
-fo4tom
-fo6top
-fo4tor
-fot3s
-fots6v
-fot3t
-4f1ov
-3fô
-2f3p2
-fpo6e
-fr2
-1fra
-fra5l
-fra4m5e
-fra6mi
-framma8ne.
-franko5
-fran7se
-fra7r8
-fra1s
-fra5se.
-fra7sep
-frasi8e
-fra7sk
-fras6p
-fra7v
-fra7v6r
-f2re.
-fred8sel
-freds5t
-fre2e3
-8freg
-f4rek
-fre4m5
-fremma8ne.
-frems4
-fre7ne
-fre6sk
-fres7ko.
-fres5koe
-fre8s9v
-fri5a6re
-6f5ridi
-fri4erf
-f1rin
-fris6ka
-fri5s4p
-fri5s6til
-frite8re.
-friti8me.
-fro7f
-fronta9le
-fro8st
-frus1
-fruta6le.
-f1ryt
-frø5b
-frø7ko
-frå9r
-fråve4
-2f1s
-fs2h
-fsho6
-fsi2
-f5sjuk
-f2sl
-fsle6ge.
-f4sm
-f2sn
-fs7ne8
-fs5ov
-fs2t
-f6s5tan
-f4s9v
-2ft
-f1ta
-f3ta.
-fta7f
-ft1ak
-fta8la.
-ft3alg
-f2t1am
-f4tana
-f7tane
-ft3anl
-f5tar.
-ft8as4
-f6t1av
-f2tea
-f3ted
-f4tee
-f2teg
-f2tei
-f2tek
-f6tem
-fte4na
-ften3d
-f4t3enh
-ften5s6v
-f2teo
-fte4r5a4
-f4terin
-fter5s
-f4test
-f4teta
-f4t5ett
-ft3ind
-f2t5i4s
-ft5l
-ft7n
-f2t1o2
-f5tog
-3fton
-ft3r
-fts5alt
-fts3ei
-fts5ers
-fts5erv
-ft2s1i
-fts1k
-ftsla6ga
-ft5s4lan
-ftsle6ge.
-ft3sto
-ft5s6tri
-ft5stø
-fts1u
-ft2s1ø4
-ft5t
-ftta8ka
-ft1u
-1fu
-fu8ga.
-fug9le.
-fug6l7eg
-fu6le
-full3
-ful9lar
-fulle6
-ful9le.
-ful4len
-fullen8de.
-ful4ler
-ful7les
-fullfø7re
-funn2
-funns3
-funnsla8ga
-fu6ra.
-fu6re.
-fu9ret
-fu7ro
-furu1
-fu7sel
-fu6sk
-fus6o7
-fu4s5t
-fut4h
-futu1
-4f1v
-fva8la
-1fy
-fy5la
-fyr2
-fy8ra.
-fy4r5a4b
-fy1re
-fy4re.
-fyr7k
-fyr8ke.
-fyr5t
-fy3s
-fysa7
-fy8sa.
-2fæ1
-1fø
-fø4da.
-fø4dek
-fø5den
-fø4des
-fø5des.
-fø1f
-2føk
-fø4le.
-f8ør
-før6a
-fø5rar
-fø4re.
-fø4res
-fø7resv
-fø8rete
-før6tin
-4få
-få7ren
-få7ret
-få5ri
-får7u
-få7va
-1ga
-4gaba
-ga1bo
-6gabø
-ga3da
-ga4ded
-4gadg
-2gadm
-4g5adr
-6gaflo
-g3aft
-6gah
-6gak
-g1aks
-gak8ta.
-gak8te
-ga1la
-ga4la.
-galei5
-ga7len
-gal4les
-4galli
-5ga7lo
-ga4ma.
-4gamb
-ga5mer
-gamme6l5
-6gand.
-6ganden
-9gane
-gan5g6en
-gan4g5j
-4gan5k
-2g1anl
-4gann
-4gansa
-4gansv
-4g5antre
-ga6pa.
-ga4pe.
-ga4p5l
-gap3s2
-ga6p7u
-9gar.
-ga6raf
-ga6r5ak
-2garb
-5garbr
-5garby
-gar4dek
-7gare.
-4garea
-gar5es
-gares6ke.
-gar2i
-4garki
-gar3ne
-gar6ta.
-g5arte
-gar8te.
-g3arti
-gart5s6la
-gar4un
-ga4ryl
-ga4sc
-ga5s2i
-gas8ka.
-gas8ke.
-ga6ski
-4gasp
-gas6sel
-gas5sen
-gas7ser
-gass5ett
-gass3l
-5gast.
-gas5te
-ga5sto
-gas7t6ra
-gas9tri
-g2at
-ga4te.
-ga5tens
-gate5s
-ga3ti
-ga1to
-ga3tr
-gat6tap
-gau5la.
-9gav.
-2gavd
-6ga4vei
-ga4veri
-4gavg
-g5avk
-2g1avs
-2gavt
-4gavv
-2gaw
-4gaø
-2g1b
-gba4ne.
-g6byk
-2g1c
-8g1d
-gd5alt
-g6d5au
-gde3a
-g2deb
-g3deba
-g4dedi
-gde5lo
-g2dem
-g4dend
-g2de5o
-g4dera
-g4de5re
-g6dero
-g2des
-g2det
-g3det.
-gdevi8sa
-gd5op
-gd1or
-gdy4d
-g6d1øy
-1ge
-2ge1a
-geak8ta
-geak6te.
-gea7ren
-ge4ark
-2geb
-6geba
-4ge5be
-3gebri
-4gebrå
-3gebyr
-ged4
-4gedan
-6gedel
-gedia5
-9gedom.
-7gedoma
-9gedome
-7gedomme
-6gedoms
-4gedos
-2gedr
-2gedy
-2gedø
-2gee
-geen8de.
-2gef
-g5eft
-3gefæ
-2ge1g2
-g5egg
-g3e2gn
-2geh
-gehø8ve.
-2gei
-g1eie
-ge1in
-gei4r3
-gei9re
-gei8s7p
-gei6st5
-3geit
-geit3a
-geit3o
-gei4t3r
-2gej
-2gek2
-ge9kl
-ge3kn
-g1eks
-6gekt
-5gel.
-ge4lar
-4gelau
-ge6le.
-ge7lea
-4geled
-4gelei
-gelei5er
-4gelek
-4g3elem
-ge5len.
-ge5lens
-5gelet
-gel5ett
-3geli
-4gelid
-6geligg
-4gelit
-6geliv
-2gelo
-ge5lov
-7gels4
-gel3se
-gel5si
-gelsk7l
-gel5t4
-4gelu
-ge5lun
-gel7ve
-4gely
-2gelæ
-2gelø
-2gelå
-5gem.
-2gema
-9gema.
-2gemi
-3geml
-4g5emn
-gem6na
-2gemo
-9gemr
-3gems
-3gem4s5t
-2gemy
-2gemø
-2gemå
-g2en
-3gen.
-ge2n1a
-ge7n6am
-gends6t
-ge3nea
-4genem
-gen5erf
-ge5nes
-gene4t
-gen5eti
-4genev
-gene5ve.
-gen8ga.
-gen5gr
-ge4ni6n
-6geniv
-gen5k
-genle6ge.
-gen3n
-gens5l
-gen6sun
-gen5tr
-4genum
-4geny
-4genæ
-4genø
-2geo
-5geog
-3geol
-geome5
-geomet4
-ge5on
-6geop
-ge9ope
-2gep
-g2er
-3ger.
-ge5ra.
-ge6ral
-ge4r5ant
-ge9ras
-ger5di
-4gered
-4geref
-4gereg
-4gerek
-ge6rene
-4gerep
-6gerese
-4gerett
-ger4i5d
-4gerik
-geri8ka
-6gerike
-ge4rim
-ge4ris
-ge4rit
-ge4riv
-gerle9g
-g9er8ma.
-ger3n
-gerne6
-4geroa
-4gerom.
-4geromm
-6gerop.
-4gerope
-ger5p
-ger4s5af
-5gerud
-ge5rup
-ger5v
-gerø6re.
-ge4r3ø4v
-4gerå
-g6es
-5ges.
-2gesa
-2gese
-5gesen.
-5gesens
-4gesi
-4gesja
-4gesje
-2ge1sk
-ge1sl
-geslu7
-ges4lø
-4geso
-4gespe
-ge4spr
-ge5spra
-2ge1st
-3gest.
-gesta7b6l
-5geste.
-ges6tekk
-ges8ti.
-gest5rid
-gestri8de.
-6gestå
-2gesu
-ges5vik.
-2gesy
-6gesæ
-2gesø
-2ge1så
-geså5re
-5get.
-ge5tak
-geta6le.
-6getat.
-6getate
-4ge3te
-5gete.
-2geti
-2getj
-2geto
-2getr
-5get5s
-2getu
-2gety
-gety8e
-2getø
-2geu
-g2ev
-2ge9v8a
-2geve
-4gevir
-gevi6sa
-4g5evn
-gev6ne.
-4ge5vo
-5gevå
-2gey
-4geæ
-2geø
-2geå
-1gé
-2g1f
-gfe2l
-4g1g
-g6gal
-gg5ask
-g2g1av
-g4gedi
-gg1ei
-g4gela
-g4gele
-g2gem
-g4genu
-g6gerei
-gge4rin
-g4gerø
-gges6b
-gges5l
-g4gesm
-g6geso
-g4gesp
-g6ges6tio
-g6ge5sv
-g2gev
-ggie6
-g4gif
-g4g5i4m
-gg4je
-ggje5s
-g2gl
-g7glu
-g4gn
-g2g1o2
-g3go.
-g5gos
-gg3rad
-ggra6da
-gg5rat
-gg8re.
-gg3red
-gg7rek
-gg5s4par
-gg3sto
-gg4sy
-gg3sø
-g7g8ud
-g4g5u4r
-2g1h
-ghe8n
-ght5ene
-gh4to
-ghæ8
-1gi
-3gi.
-4giak
-gi1ar
-4giarb
-6giav
-2gib
-gi8c
-2gid
-gi3de
-gi1e
-4giek
-3gien
-gi9end
-5gier
-4gifa
-2gifo
-4gifr
-4gifu
-gi6ga.
-2gigr
-2gih
-2gii
-5gika
-3gike
-4giki
-3gikk
-gi5k4r
-4giku
-gi5le
-4gimess
-gi4metr
-4gimi
-4gimø
-2g1ind
-6gingeni
-gi4nin
-2g1inn
-gin5nu
-4gino
-4g1ins
-4g1int
-2ginv
-4gi5om
-2gi1op
-gio4r
-2gip
-gip5si
-6gira
-gi3re
-gi4re.
-giro3
-gi6rob
-5gis.
-2gisa
-gi3se
-4gisel
-4gisen
-5gisk
-6giska
-gis8lu
-gis4lø
-4giso
-4gisp
-gi3s4pa
-gi5s4pr
-giste6ru
-gis5ti
-gist5ra
-gi5stré
-4gistu
-6gisty
-gi5ta
-4gi5te
-gite4s
-gi2t9r
-git5te
-2giu
-gi7va
-4gival
-4givo
-4givu
-1gj
-2g1jak
-g5jarn
-2gjaz
-gje5f
-4g3jeg
-gjels4
-gje2n
-gjen1opp3s4
-gjen5s8
-6gjent
-3gjer
-gje7sk
-gje4s3p
-gje8v9ak
-2g1ju
-7g6jut
-gjø9de
-2g3k2
-gkly9
-gl2a
-6gla.
-gla3de
-4glag
-gla4ga
-gla8ge.
-g3land
-g1lar
-gl5art
-glar7v
-1g2las
-7glase
-g6lass
-6glast
-g5last.
-3glat
-g5lau
-gl6e
-gle6dero
-g2lef
-gle3ge
-gleg8ga
-6glei
-glei7er.
-g2lek
-g7lek.
-g5leke
-g2lel
-3glemt
-4glen
-g9len.
-g9lene.
-g9lenes
-g9lens
-gle9pl
-4gler
-gle4ra
-glere8de.
-g9les.
-gle6se.
-g4le5sk
-g6le7sm
-4glet
-g2lev
-1g2lid
-gli4del
-gli7e6n
-gli8er
-glig1
-3g2lim
-gli9me
-4glio
-glitt4
-6g7liv
-4glj
-gl7ja
-gl5l
-g4lo.
-g2loa
-5glob
-1g4lor
-gloria7
-glori6an
-glorie7ne
-g4los
-glo5ste
-6glov
-gls4
-5glug
-g5luk
-6glun
-gl5ung
-glun8ge.
-gl5ut
-g5lyd
-3glyf
-gly4se.
-g2løg
-glø8pa
-2gløs
-gl7øy.
-5gløym
-2g1m
-g4mete
-g4metr
-g5mé
-gmini6
-gmo4e
-g3mu
-gmu8le.
-gmå6la
-g1n
-gn1ak
-gna5lem
-gna4lo
-g2nav
-gn1d
-gndø6
-gndør5
-gn4e
-g2nee
-g4nelo
-g6nero
-g6nerø
-gne1s4
-gne8se.
-g4nesk
-g4nest
-g5net
-g6netr
-g2nev
-g4nib
-g4nid
-g6nik
-gning4
-gnings5
-gni4s
-g6ni5sk
-gni6st
-gnist9r
-gn5k4
-g2nom
-gn5o6p
-gn7o6v
-gn5r
-gn1s
-gn4skr
-gn6sm
-gn4som
-gns4pr
-gn4sti
-gn2s1v
-gn5t4
-gnu5re
-gnæ6re
-g2nå
-1go
-7goan
-go1ar
-7goar.
-2gob
-gobe5
-go4da
-go5dal
-god5ar
-2godd
-go4de.
-gods9t
-2gof
-go9ga
-go5ge.
-go9g8r
-6goi
-2gok
-gok4se.
-go3le
-gol6fa
-go5lo
-gol4va
-gol6var
-go4lå
-2gom
-g7o6ma
-6gometris
-7gomm
-go4n5and
-go9ne.
-go7ni
-go5nok
-gon9s
-2g1op
-3g6or4a5
-go5ra.
-go7rae
-go7ras
-2gord
-gor6da
-go1re
-gore8a7
-2gorg
-g4ori
-gori5e6
-g5orv
-gor8va
-go5rø
-gos3p
-4gost
-6goto
-got6r
-4gov
-go8ve.
-go8vi.
-2g1p6
-1gr4
-8gr.
-4grab
-6grac
-gra5ce
-9grads
-graf5f
-graf5t6
-gra4m5
-grand3s4
-gran5to
-grant4r
-gra9se.
-gra9set
-gra6sk
-gras3t
-gra5t
-gra8te.
-grati4s
-gra4u
-gra4v3ak
-gra7vis
-gravta8
-2grea
-4g5reds
-gre4en
-2gref
-g7refe
-g4rega
-greie5n
-grei6ene
-6g3reis
-4grek
-2grel
-g5rent
-4grepi
-grep4s3
-g7rese
-gres6sak
-gres6sent
-6g5rest
-4grett
-4g5ri.
-grib3
-4grid
-4grif
-4g1rig
-gri5sete
-4grit
-gro9ar
-g4ro7i
-grom5m
-g4ron
-gro5sk
-gro3ve
-4g5rui
-grun7g
-5g4rup
-gru7sa
-grus5t
-2g1rut
-2gryd
-4g5ryg
-grø5de.
-4g5røv
-grø5ve
-4grøy
-gr7øy.
-6gråd
-grå6da
-gråk4
-grå7n
-grå5te.
-8gs1
-gsa2
-gs5akers
-g7sal.
-g7sale
-g5salg.
-g5salge
-gsam3
-gs3amb
-gs7amn
-g3s6ank
-g5sard
-g2sas
-g7sast
-gsbø6n
-gs2ce
-gs5ef
-g2seg
-g2sei
-g2sek
-g5sekr
-g7sekv
-gse9la.
-gsel4s5a
-gsel4st
-g2sem
-gs6ende.
-gsen6ke.
-g5sens
-g3sent
-g2ser
-g5ser.
-g3seri
-gse4st
-gse4t
-g3sete
-gs3eti
-g9sets
-gs4ett
-gse2v
-gsfø2
-g2si
-g5sider
-gs5is
-gsi2v
-gs4jar
-g3sjef
-g5sji
-g2sjo
-g5sjå
-gs4ka.
-g5skad
-gs4kal
-g5skall
-g6skam
-g4skan
-g4skapa
-g5skape
-g4skapi
-gs7kav
-g5skilt
-g7s6kjæ
-g3skot
-g5skren
-g7skug
-g6skv
-gsla6ga
-gsle6ge.
-gs6leri
-g4sluk
-gs4lun
-gsl9ut.
-g5slyn
-gs5med
-g9s6mert
-g7snel
-g5sog
-gs9ope
-g5spal
-g3spel
-gs2pi
-gs5pik
-g3spil
-gs5pile
-g3spur
-gs3s4
-gsse4e
-gs5tak
-g9s8tand
-g5stang
-gs4tasj
-g7s4tat
-gstatsrå7
-gst6e
-gs5te.
-g5ste4e
-gs4tell
-gs5tema
-gste6ma.
-g7stemt
-gs4tere
-g5s4terf
-g5s4terk
-g5s4tern
-g5s4ters
-g5s4terv
-gst7evnen
-g5s4ti.
-g3s4tie
-g3stif
-g3s4tig
-gs5tiå
-g5sto.
-gs4tol
-g5stol.
-g7stola
-g5stole
-gs5toll
-gs4trap
-g5strau
-gst5rea
-g5strede
-gst5rei
-g5streke
-gs6tret
-gstri8de.
-g5s4trof
-g3strø
-g5s6trå
-g5stue
-gst5ut
-gstyr8ka
-gs4tør
-g5s4tå
-gsu2
-gsu5g
-gs4vane
-gs5vik
-gs7væ
-gsy2d
-g7sym
-gsy6na
-gsy6t
-g2sø
-gsø6ki
-gs6øt
-gså4
-2g1t
-g3ta
-gta8ka.
-gta8ke.
-gta6la.
-gta4le.
-g9t6e
-gte6ke.
-gte6ma.
-g3ti
-gti8de.
-g4t5if
-gt6re.
-gtråd5s6
-gt7sv
-gt5t
-gtu8en.
-gtvek8
-gty8e
-gt9yt
-1gu
-4g5u4bå
-gu2di
-guds3t
-gu4el
-6gug
-g5ug6l
-gui4d
-guid5ar
-gu4le.
-4g5ulk
-gul8ke.
-gul4la
-gul5o
-gul7ø
-7gum
-gun4g
-gur2g
-gu4ri
-gur8na
-gur6ne.
-gu5rua
-gu3rue
-gu4st
-gu1ta
-2gutb
-4gutd
-g5ute.
-6gutg
-g7utl
-2guts
-gut4tak
-gut4tes
-4guttr
-2g1v
-gva4ke.
-gva8la
-gvedli6
-gvi8ta
-6g1w
-1gy
-g9y8a
-gy4da.
-7gym
-gy3ne
-gyr6
-gy8sa.
-gy6se.
-gy4te.
-gy4ve.
-g5æt
-4g5øk
-gør3s
-2g3øv
-gøy9a
-gøye6r
-gøy5n
-1gå
-gå6as
-gå6en.
-gå4er.
-4g5å4k
-4gåm
-4g3ån
-gån8da
-2g1å4p
-2g3åre
-gå2s
-gå3st
-gå9ven
-gå4vet
-h2a
-ha4a
-haba9
-4hae
-ha2el
-4hafi
-ha2g
-ha3ga
-ha4ga.
-ha3gen
-hai1
-ha7ism
-ha5ka
-ha4ke.
-ha5ken
-ha7kera
-ha4ke5s
-ha1la
-ha6la.
-hald4s7
-ha4le.
-ha4lev
-hal6lei
-hal6lø
-hal4s3k
-hal4so
-hal4s3t
-ha5lu
-hal4v5
-ha5ma
-ha8me.
-ham6nest
-ha5mo
-ham4st
-ha5na
-han6d5r
-hand7skr
-hand5ø
-ha4ne.
-hani1
-hanis4
-han2n3
-han4ne
-han6nel
-han5nen
-han5n4o5
-han3se
-han4sk
-ha4pe
-ha4re.
-ha5rei
-ha4rel
-ha3rem
-ha4res
-har5k
-ha5rov
-har7se
-har5tre
-har4tri
-ha4sj
-hasj5e
-ha2sl
-has6p7l
-has5v
-ha3tar
-ha4te.
-hat6le
-h4au
-hau5ke.
-hau6st
-hau4t5r
-hav4a
-ha4va.
-ha5van5
-ha4ve.
-ha4veg
-ha4vei
-have3s
-ha1vi
-ha4vo
-hav4sl
-ha6vu6
-hav1ø
-4havå
-2h1b
-hba4ne.
-4hc
-2he.
-he2a
-he7ans
-heat4r
-heb5n
-he4de.
-heder6s5
-he2d9r
-hef9ta
-hef7tes
-he3ge
-he4ge.
-he2g3r
-he2i
-heia3
-hei5en
-3heim
-he3ins
-hei4sk
-heit4s
-he2k
-hek4sek
-hek6serin
-hel1a
-he4la.
-he4le.
-he4l5ei4
-hel6lesu
-hel3o
-hel2s2
-hel3sa
-hel4se7
-helses4
-hel3sk
-hel5sp
-hel5ste
-hel3sv
-hel4tes
-hel9ve
-he4mak
-hem5ne
-hem3s8k
-henfø5re
-hen5o6
-hen1s2
-hen5se
-hera9da
-he5ret
-he4ri.
-her5j
-herle9ge
-herli9ga
-4her5n
-he1ro
-he4ro.
-hero9a
-her7p
-her6rei
-her6resi
-her6ret
-her6ska.
-her8s7kare
-her6sv
-her5un4
-he2r3ø
-he4se.
-he2sp
-hes7pa
-hes5pel
-hes5pen
-hes9per
-heste5ri
-hes4tes
-he6stø
-het2
-he4te.
-he5t6i
-het4s3a4
-het3t
-he6va.
-he6v7arm
-he4ve.
-hev9na.
-2hf
-2hh
-h5hu
-hi5ao
-hi4bak
-hie4n
-hi2et
-hi4f1
-hiff2
-hif9r
-hi6ge.
-hik7e
-himme6l5o
-hi6n7an
-hin4nes
-hins4
-hins9ke
-hi4pl
-hip3p
-hi1ro
-hi2s1
-hi9se.
-hi3sen
-hi5s4i
-4hisk
-hit7o
-hi4t5r
-hit5ti
-hi8va.
-hi4ve.
-hiv1s
-hjar4
-hje4
-hjem7e
-hjorte5
-hju6l7
-hju7l8e
-2hl
-h5lan
-2h1m
-hma8n
-2hn
-h2na
-hne6n
-hn1s
-h4o
-ho5ar.
-hob6
-ho6da
-ho4de.
-ho5den
-hode3r
-ho5der.
-ho5dy
-hof4f3
-hof4f3a4
-hof4f3e4
-hof5f6er
-hof4fi
-hogs6
-hog6str
-hog7stra
-hoi5
-ho2la
-ho5lag
-ho5lan
-ho4le.
-ho4lin
-hol5l
-ho4lom
-hols4
-ho4lu
-hol7ut
-ho4me.
-ho4mo.
-ho4mod
-ho4mos
-ho5n6o
-ho4o
-ho8pa.
-ho4pe.
-ho8pi.
-ho5ra
-ho6ra.
-hor2e1
-ho1ro
-2hort
-ho4s
-hos5a
-ho5sen
-ho5ser
-ho5si5
-hou2
-ho1v
-hove5re
-ho4vé
-2how
-h1p
-2hr
-h1ra
-h1re
-hri5ne
-hri2s3
-6h1s
-h5s4e
-4ht
-h5ter
-htere4
-h1tr
-ht5t
-hu4da
-hu4d3
-hud5s6
-hudså9re
-hu4er
-hu6et.
-hu4ga
-hu4ge.
-hu8ja.
-hu6ka.
-huk8ra
-hu4la
-hu4le.
-hu4leg
-hu5les
-hu4lev
-hu5ma
-hun6des
-hun2n3
-hu1ru4
-hus1a
-hu8sa.
-hu5s6a6r
-hu6s7arr
-husa7r8e
-hu4se.
-hu4s3ed
-hu2s1i
-hu2s5j
-hu2s1k
-hus7m
-hus5s4
-hus1t
-hu8str
-hust9ran
-hus4tre
-hu6sty
-hu6s5u6
-hu2sø
-hu4va
-hu4ve.
-hu4ves
-hv4
-hva5le
-hvas5
-hve2r
-hver3a
-hvi5l6i
-h4v4ir
-hvits4
-hvo2
-hvor5
-hvor5i6
-h6y
-hya3
-hy2bl
-hyd4
-hy2e
-hye5ne.
-hye9nes
-hyg5gel
-hy6la.
-hyldes7
-hy4le.
-hyr4des
-hys3
-hy8sa
-hy4se.
-hy2s1j
-hys5t
-hæ5g
-hærfø9
-hær3s6
-hø4e
-høf5
-hø2g
-høg3ri
-høg7rø
-høk6
-hø6le.
-hø4na
-hø4ne.
-hø5rar
-hø5ren
-hø5rer
-hø4res
-hør6sp
-hø2s
-høst7a
-høst5ø
-hø1va
-hø1ve
-hø1vi
-høy5a6
-høy5k
-høy7n
-høy7rar
-høys4
-høyse6te.
-h6å
-hå7a
-hå8le
-hå6na.
-hånd5skr
-hå5nel
-hå6pa.
-hå4pe.
-hå4p5l
-hå1re
-hå1ri
-hår3s
-hår7u
-hå8va.
-hå4ve.
-ia9al
-i1abl
-ia1bo
-i2a3de
-i1adj
-ia5d8r
-ia1g2
-ia2ge
-ia1in
-ia1kr
-i1aks
-iak8se.
-ia5ku
-i1al.
-ial1a
-ial5ein
-iale4t
-ial5eti
-ia4l5ett
-i2alf
-ial3g
-ia4lin
-i4alk
-ial3op
-ia6lov
-i5als.
-ials4t
-i3alt.
-ial1u
-ia2lø
-i1an.
-i2ana
-ia4nal
-ian5ald
-ia5nar
-i7andr
-i5a4ne.
-ia8nes
-ia7net
-i5ank
-i1anm
-ia2no1
-i1ans
-ian3sa
-ian3sl
-i1ant
-ia7nø
-ia2pa
-i3app
-i1ar.
-iar4do
-iard5s4
-iar4du
-i2are
-i5area
-iar5e6l
-i5arn.
-i9arns
-i7arska
-i6asi
-i1asm
-ia4sp
-ias3s6
-i3assi
-i1ast
-i7ast.
-ia1t
-ia5te
-iat6r
-iaty6ra
-i1att
-i7auk
-i1av
-i1b2
-iba4ne.
-ib5bo
-ib3bu
-i3bere
-ibe4ro
-ibi5er.
-ib7lar
-i2b3le
-ib4leg
-ib4le5s
-i5bo
-ibo4e
-ibo7n
-ib4r
-ib3st
-ib8t
-ibya7
-iby9ar.
-8icanarar
-ice5ne
-i1ci
-ick1
-ick7ete
-i1co
-i5cy
-2ida
-i5dal
-i3das
-id1av
-id3del
-iddel5u
-id6dep
-2ide.
-3ideal
-i2deb
-i6def
-id5e4ge
-i7deki
-i9del.
-id3elv
-2iden
-i5dend
-iden5sv
-5identif
-5identit
-ideo3v
-i6derap
-i9de5re.
-i7deren
-i9deres
-iderla8ga
-iderle7g
-i7dern
-i5ders
-i6desm
-id6gem
-id4ges
-idi4en
-1i2dio
-i8dj
-id7jer
-id9na
-1i4dol
-id9ran
-id5reg
-4i3drev
-2idri
-id2s1
-id5sam
-idse4
-id6sel
-id5sim
-ids5l
-idsla6ga
-ids3t
-id4s5tu
-id2t1
-i2d1un
-i2dy
-3idyl
-i3dø
-i6d7øy
-id7å
-2ie
-ie1a2
-i2ed
-i1eff
-ie4ge
-iego4
-ie1i
-iei6d
-i1eie
-i3eig
-i5eini
-iek8l
-i1eks
-i2ele
-i5elem
-ie4lev
-i7e6lim
-i1els
-i9elt
-ielø8pa
-i8e9ma
-iem7b8
-ie3me
-i1en
-ie7na
-i2end
-ien6dela
-ie8né
-i2e5ni
-ien7n
-ie5no
-i5ens
-ien4sk
-ien4s5v
-ien4t3r
-ie5nu
-i6eny
-ie4ran
-i4erd
-ie6re.
-ie5reg
-ie4r5eng
-i6eret
-i2eri
-ie4ril
-ie4ris
-ie4riv
-i2erl
-i6ero
-ie7ro.
-ier4ra
-ier4sp
-iers3v
-ier5t
-ie3run
-ier5v
-i2e1s
-i6es.
-ies4c
-ie3se
-ies5s
-ies4ti
-i1et
-i2eta
-i5e4tabl
-i3etat
-ie9te
-ie5té
-iet4re
-ieu2
-ie7ved
-2if
-ife4s1
-if2fa
-ifi6e
-ifjø8
-if3le
-if4les
-iform4
-if1re
-i8ft
-if4tal
-if4tere
-ifte5s
-ift2s
-i3fø
-2ig
-i2gae
-ig3ann
-i7gark
-ig4art
-iga3ru
-iga7te
-ig3att
-i2gav
-ig3d
-i6geb
-i6gedi
-i6gedomm
-igedoms5
-i2gem
-i3gen
-ige6no
-i5gers
-i4gerø
-i4gesp
-ig3e4ta
-ig5ett
-ig4ged
-igges4
-ig4gra
-igg9s2
-i6gh
-i2g1ia
-i5gib
-i4gim
-igion4
-igje9va
-ig1l
-igl6d
-igli6se.
-ig5loa
-ig5neu
-ig5no
-igof6
-igo5fr
-ig1om
-igo4no
-ig2ra
-ig2re
-i2g1rø
-ig3råd
-igrå5t
-igs4al
-ig5sel
-igs2j
-ig5s4ka
-ig3s4kr
-igs4mu
-ig3s4pa
-igst4
-igs4ta
-ig4ste
-ig5stek
-ig7stel
-ig5stem
-igs4tra
-ig5s4va
-ig1un
-ig9ut
-i3h
-ihen3
-iho7le.
-i4huk
-ihu9la
-ihu5le.
-i1i
-i5in
-i7is.
-i6ita
-i1j
-2ik
-i1k2a
-i2kab
-i5kabel
-i2kaf
-i2kak
-ikan9d
-i2kao
-i4kapo
-i5kar.
-i5kara
-ika5re
-i4karei
-i6kasa
-ika3sp
-i2ke.
-i2ked
-ik9ei
-i9keleg
-i5keli
-ike5lu
-i5ken.
-i4kena
-i5kene
-i9kens
-i3ker.
-i4kera
-i5kere.
-ike5ri
-ike4r5o
-i2ke1s2
-ike3si
-i6kesk
-i5keso
-ike5su
-i5ket.
-i5kets
-i1ki
-iki9ne
-ik5inn
-iki5st
-i1kj
-ik4kaf
-ik6kana
-ik4kap
-ikk5arv
-ik4kas
-ik4kat
-ikk5att
-ik6k7ent
-ik4keru
-ik8kesk
-ik4kest
-ik3kjø
-ik4kjøp
-ik4kl
-ikk5lag
-ik2ko
-ikk5ord
-ik4kr
-ikk3re
-ikk5sv
-4ik2ku2
-ikk5und
-ik2kv
-ik6ky
-ik1l
-i5klæ
-i1ko
-i2koa
-i9koar
-i2kob
-i4kod
-iko5de
-i2ko3f
-i4kog
-i4koh
-i2kok
-iko5na.
-i2koo
-i5k6ord
-i4kore
-i2kov
-ik1r
-ik4rak
-ik5rem
-ik5robe
-ik3ros
-ik2ry
-ik2sa
-ik4sek
-iksmå8la
-ik7sot
-ik5spel
-iks5ti
-iks5to
-ik8stu
-ik4tav
-ik4teg
-ik2t1r
-iktsla8ga
-i1ku
-iku6le.
-i6k7u6t
-ik1v
-ik4vin
-i1ky
-i3kø
-i3kå
-ikå8pa
-i1la
-il5adr
-il7af
-i2l3ak
-il3al
-i4lana
-il6and
-i4lark
-il3art
-il5ass
-ilas5t6
-ila5t
-il5av
-il4dak
-il4deko
-il4dete
-il7dj
-ild3re
-ildsfa9re
-ild3s4t
-ilea9r
-ile8are
-i3le7e
-i2lef
-ile4ge.
-i4l3egn
-i2l1ei
-i6leig
-i2lek
-i2lel
-i4leno
-i4lero
-ile1s
-i4lese
-i4le5sk
-i4lest
-ile6tri
-ilet5te
-ile4tu
-i1lé
-ilfø5re
-il5ge
-il1gl
-i4lid
-ili5ers
-ili9ga
-i5lik
-i2l1im
-i4l3ind
-i7line
-i4lins
-i4l3i4r
-ili5s6tik
-il3ja.
-il1je
-il5jese
-il1jo
-il1ju
-ilke3
-il5ker
-il4kes
-ilk7o6s
-il5ku
-il4lab
-il6lam
-illan8da
-il6lap
-il9lau
-il4lee
-illei9e
-il6l7ender
-il6lesk
-il4lev
-illi9ga
-il4lo5m
-ill3s2
-illæ4
-illæ9re.
-il4m5est
-ilm5e4v
-il4mi
-ilm5s
-i1loe
-i9lolo
-i4lom
-il5omv
-i5lon
-il3opp
-i4l1o4r
-i5loso
-ilot3u
-ilo1w
-ilret4
-ilset8je
-il3sl
-ilsla7
-ilsle7ge
-ils4mu
-ils2p
-ils2t
-il5str
-il7su
-il3s2v
-ilsva9ra
-ilsva5re
-ilta9la
-ilt5rett
-il6t7å
-ilu4h
-i5luk
-il7ul8
-il3un
-i5lur
-i9lus
-il1ut
-il5v6
-ilve8d
-ilve4r
-i1ly
-il1å8
-ilår6
-8im.
-4ima
-i2mad
-i4maen
-i2mag
-i6m5akk
-i4mako
-imal8n
-i2mam
-i9man
-i2map
-i5mar.
-ima5s
-i4matr
-imb2
-i4mee
-i2me1g
-i2mek
-i6melu
-im5enh
-im8et
-i9met.
-i4meta
-i4meti
-i6mey
-i8mé
-imi9la
-imini6
-i7mj
-im4lev
-im8l9u
-im5m
-i6mog
-imo9l
-im5ord
-imor8da
-im7o6v
-imp2
-5imperi
-imp4l
-1impo
-imp9s
-impse8
-1impu
-im4ref
-im4rek
-im4res
-im9se
-ims4k5l
-ims3kr
-im5s4me
-im1s4t
-im6sti
-imta8la
-4imu
-i3mø2
-2in.
-6ina
-i4nag
-in5agg
-i5nakk
-ina4let
-i4na2m
-in3ame
-in2an
-i9nane
-in5ann
-i2nap
-in5app
-i5nar.
-i5nars
-i4nask
-i4nasp
-i4n5ass
-ina4t5ak
-i6nau
-in7auk
-in5avl
-in5avr
-ince2
-in7der
-6indig
-in4dog
-ind9ra
-in3dru
-indr5ø
-ind5sk
-ind3sp
-ind5s4t
-5industr
-ind7å
-4ine
-ine8are
-i2ned
-inedy6
-in5egg
-in5eid
-in3eie
-i6nele
-ine4li
-in7eng
-ine8pa
-ine8pe.
-i7nere.
-i5neren
-i9neres
-ine4rik
-i7nern
-i5nert
-i5nes.
-i4nesk
-ines8ka
-ines8ke.
-ines4st
-ine5s4ti
-i4nesø
-i2nev
-8iné
-3infek
-in4fos
-in4fot
-infu9
-4infy
-in4g5ald
-in4gav
-in5gebj
-in6gem
-5ingeni
-in5geri
-in4geru
-in3gev
-ing5jen
-in4goa
-in4gos
-in2gr
-ing5rep
-ing7ris
-ing2s
-ings5om
-ingst8
-ings5v
-6ingu
-in2g5ø
-i7nia
-ini9ar.
-i2nib
-i5nie
-i4nif
-i2nig
-i4nil
-ini7m
-i4ninn
-i2nip
-i4nisa
-ini3se
-i4nises
-5initia
-i4nito
-5injek
-2ink
-in5kel
-in4kero
-in4k3la
-in4kok
-in5l
-inla8ga
-2inn.
-in4nal
-in4nem
-in4nerø
-in4nesi
-innes6t
-4innet
-in6n7ette
-innfa9s
-1inng
-5innhal
-3innho
-2inni4
-in4ni.
-in4n5om
-in5n6ova
-inn1s4
-6inns.
-3innsa
-inn5se
-inn9sen
-inn9ste
-inn7sve
-1innt
-in4n5u4
-4innæ
-in2nø4
-2ino
-ino5a
-i5noar
-i4nod
-inok6
-in7oks
-in1s
-4ins.
-8insa
-in9sa.
-in7sal
-in5sar
-in5se.
-in4sek
-in3sen
-inseri8e9ne
-in3si
-insis5
-6insj
-in4sja
-in3sje
-4insk
-in9s8kas
-in5skat
-inske4t
-ins4ki
-in3skj
-ins5kjøt
-ins6kor
-ins4k3v
-ins6kø
-insle7g
-ins8lega
-in3slo
-in5s4ma
-in3sop
-1insp
-in4spa
-in5s4pl
-ins4po
-5instal
-in8s5te.
-ins5ten.
-ins9tens
-3in3s4ti
-in4stin
-4in3s6to
-in5stra
-inst5rel
-5instru
-in6stå
-in7sul
-in2sv
-6in3sy
-8int.
-2in3ta
-inta8la
-4inte.
-5in9teg
-in5ter
-int5ess
-in5te4t5
-4in5ti
-inti5me
-int2r
-intran4
-int4rer
-in5tres
-6inu
-inu6i
-i8n9ul8
-in7ut.
-in9u8te
-1inv
-6invev
-iny4i
-iny4t
-6inø
-in7øk
-i7nøt
-in3øv
-4io
-io1a4
-io4dere
-i1off
-io5gn
-io1i
-i1oks
-iol4
-io3le
-iol7jen
-io3mu
-io4nans
-io4narr
-io6n5erst
-ion3g4
-io4nin
-io4nu
-io1pl
-i1opp
-io5ra.
-ior8da
-io1re
-io4rie
-io4r5in
-iorla8ga
-iosk3v
-io1st
-iota6le.
-io3t4e
-io4tra
-i5pap
-ipa4ti.
-i4pee
-ipela9
-i7pe6p
-i1pi
-ipi1e
-ipi9ne
-i4p5ings
-i1pl
-i2ple
-ip4peli
-ippel7s6
-ipp6lan
-ipplæ8re.
-ip2pr
-ipp4s3t
-ippsy8na
-ipp4sø
-ip7pun
-i1pr
-i6pra
-ip5ru
-ipru8te.
-ips1a
-ipse4l
-ipsfø5
-ip2si
-ip2s1k
-ipsle6ge.
-ips1t
-ip6tar
-i5py7
-i3pø
-2ir
-i1ra
-i9r6and
-ir5ark
-i9rast
-ira6tr
-ir5de
-ird5s
-i1re
-ir3eie
-ir6ek
-i3repo
-i3rer
-ire6r5a
-ire7st
-i3ret
-i8reto
-ir7g
-i1ri
-iri4a
-iri8ka.
-ir3ind
-ir3inn
-ir5inst
-iri9t
-ir5ka.
-ir4kat
-ir5ker.
-irke3s6
-ir4kest
-ir4kle
-ir5kv
-irk5ø
-ir4mag
-ir4mal
-ir4mast
-ir9mé
-i5roa
-i1roe
-i4roi
-i1rol
-ir5opp
-iro1s
-ir3re
-ir7sko
-irs2p
-ir3s4t
-irt6
-ir3ta
-irti6g5r
-i1ru
-ir5u4k
-iru8m
-iru7sa.
-i1rø
-i1rå
-ir7å6l
-i1sa
-i4saks
-i4sanb
-is3ann
-i4s3ans
-is3ant
-i7sas
-is5aud
-3isbry
-is6cen
-isch5
-is3co
-i5scr
-i2sed
-i4seel
-i4seen
-ise5ern
-i2s2e3g4
-i2sei
-is3eie
-is5eig
-ise5is
-i2sek
-i3sekt
-i6s7eld
-is4e5li
-i2sem
-ise5ne
-i4seno
-isensi6
-i5ser.
-i5sers
-i2ses
-is5ess
-i4sete
-iset8je
-i2seu
-8isé
-isha7ne
-3ishav
-is4h5in
-ishø9ve
-isi6ene
-is5ild
-i4s3ind
-isis5t
-is7jun
-is9ka.
-is3kal
-is3kar
-isk9art.
-isk5arte
-i8ske
-is5ke.
-is8kee
-is4kel
-isk5els
-iske5s4
-is3kje
-i3skjo
-iskla8ga
-is6k5le
-isk3lo
-isko5g
-is7kogr
-is3kop
-is3kot
-is1kr
-is6k5rin
-is1ku
-is4kul
-i5skula
-is1kv
-is4kvi
-is1l
-i6slu
-isl7ut
-isl9øy.
-i5smak
-is4med
-ismo5e
-is5ne
-is5nu
-1isol
-6isold
-5isomo
-is5omr
-iso3pa
-iso5pe
-iso7pr
-3isot
-is1ov
-is1p
-is4pan
-is5pane.
-is6pis
-is7pru
-is4ses
-is5si
-issis5
-is6s7kj
-is4sko
-is7skr
-is5sky
-is4skå
-is5sok
-is7sto
-is6sve
-is5svo
-is4søk
-i5stab
-ista9le
-is5tane
-is5tap
-i4s5tar
-ist5avb
-ist7avi
-i2ste
-is5te.
-is4tek
-ist5ekt
-istel5l
-iste6ma.
-ist6en
-is5ten.
-is5tene
-is5ter.
-is5tern
-is6terø
-is6té
-is4tik
-is5tilb
-is5tis
-is3tok
-is3tol
-i2str
-i8s8tre.
-i4st5ren
-i5strer
-i6strer.
-i4stres
-i6stret
-is3try
-is3tus
-6isu
-is5uf
-is5ul
-is1un
-is1v
-is4vak
-is7w
-isy8na
-isy5r
-is5yt
-i2s1øk
-i4søy
-is7åk
-is3år
-i1ta
-ita4l3a
-ita6l5ers
-ita4lo
-ita4ly
-i6tang
-itan7s6v
-itau4
-i4tav
-i4tec
-i2teg
-ite8ke.
-i7teky
-i6t7elg
-i4teni
-i2teo
-ite3re
-i4tero
-iter6s5
-i4te5ru
-i2te1s
-ite6se.
-itet6s5
-i1té
-it2i
-iti6er.
-i4ties
-i2tif
-i4tikam
-i4ti3kv
-iti5me
-i2tio
-i2tip
-iti3r
-i4tisa
-i4tisen
-i4tisi
-i4tisj
-i4tisko
-i4ti3sp
-i4tist
-iti5str
-i2tiu
-itiv4
-itivs5
-it7jaran
-it7jer
-it7ji
-itma6le.
-itnes4s
-i1to
-ito9a
-i4tom
-it5ord
-ito4s
-itostra6
-ito8v
-i1tr
-i4tra.
-i6trae
-it3rel
-it3ren
-it5rim
-itri8ma
-it3rin
-i5tris
-it7ro6s
-it1sa
-it4s3ei
-it3ser
-it6ses
-it5sku
-itsla8ga
-it1sn
-it6sti
-it3sun
-it4tag
-it6tak
-it4tal
-itta9la
-it6tann
-it6tap
-it4t5at
-it5ted
-itte4l5o
-it4tenk
-itte5s4
-itt5ett
-it4tid
-it4til
-it4tj
-itt1o
-it6tof
-it7ton
-it4tr
-itt5skr
-itt4sø
-it4ty
-it7tys
-i1tu
-itu5e
-itær1
-i1tø
-i5tå9
-i1u
-iu6a
-iu2b
-i5u6l
-i5um.
-ium4f5ar
-iu2m1i
-ium5m
-iu4mo
-i6umse
-i4um5s4t
-i4umsu
-iu2n
-iu8p
-i2ur
-iu5se
-4i1va
-i4vad
-i6vaj
-i4v3aks
-i5val
-iva6la.
-i4vana
-i4v5ank
-i4varb
-ivar5s6
-i4v5ass
-ivat3t
-i1ve
-i2veg
-ive6ge
-iv5eg6n
-i4vei
-iv7eig
-i2vek
-ive4ra
-ive5ras
-iver5d
-i6veret
-i4vesk
-i4vesti
-i6vesv
-i6vetø
-i2vev
-i1vé
-i1vi
-iv5ins
-iv5is.
-iv5isb
-ivle6ge.
-iv3n
-i1vo
-iv7om
-iv3r
-iv4sal
-iv2si
-iv2sk
-iv2sl
-iv2sn
-iv4so
-ivs5v
-i2v3un
-iv7y
-ivyr8ke.
-i9væ
-iv7åpn
-i1wa
-iwi5
-i5wie6
-i5y
-iyr8ke.
-i5za.
-i7zas
-i4ze
-i1zo
-i1ø
-i1ø4k
-i1ør.
-iør5i
-iør5s
-i4øs
-iø3se
-i1øy
-i1å4
-iårs7l
-iåt4te.
-ja1ak
-ja9ar
-ja4da
-1jae
-ja7en
-5jag.
-ja4ga.
-ja7gar
-ja4ge.
-jag6r
-ja4ha
-ja4hv
-ja4j
-jak4kel
-jak7kele
-jak4ko
-jakk5s4
-ja1k8r
-ja8kre
-jaktel
-ja7ku
-ja3lo
-ja1lu
-jam7b
-6jambi
-jamhø8ve.
-5jamm
-jams2
-jan4gr
-j5anl
-ja6ra.
-ja6r5ap
-ja9rek
-jarn3s4
-jar5ta
-jar5te.
-jar5tet.
-jar7ti
-6jarø
-ja6rå
-ja7se
-ja8ski
-ja5sti
-ja5ta
-jau4ere
-ja9vi
-1jaz
-j1b
-2jd
-j2e
-2je1a2
-je5ak
-2jeb
-jeb9b
-je4deb
-6je4dek
-4jedr
-jeep1
-6jeev
-2jef
-je4f3et
-je2fj
-jef5lag
-je4f3re
-jef4sa
-jef6s5i
-jef3t4r
-je5ge
-jeg5ge
-6jegl
-jeg6les
-4jego
-4jegr
-4jegy
-2jeh
-je1i
-je5i8s
-4jej
-2jeka
-jek6keru
-4jekl
-je4kli
-2jeko
-jekt3a
-jek4tan
-jek6tes
-jekt5ev
-jek4t5in
-jek4t3r
-jekts4t
-4jekø
-2jel
-je6legr
-jelei7er
-je7lele
-je4les
-jel7ge
-jel6lag
-jell5ang
-jel5len
-jel4lo
-jelt3
-jel4tr
-jel9ut
-jel7va.
-2jem
-je4mia
-je4mit
-jemp6
-jem5pl
-jem5se
-jem4sti
-2je7na
-jen1d
-4jendr
-je3ne.
-je7ne8s
-4jenet
-jen5ged
-jeng5s4
-2jeni
-4jenl
-4jeno
-4jenu
-je2n1y4
-4jenæ
-2je5o4
-2jep
-je3raf
-je4r5ant
-jer4dep
-jerd6s
-je3r6e
-4jered
-6jereg
-6jerei
-6jerenn
-je5rik
-je6rim
-je6rinæ
-jer4kes
-jer6k5l
-jer4kv
-jerle7
-jer6mu
-jer6n5as
-jern5sl
-je6ron
-jer4sp
-jert5s
-4je1ru
-6jerå
-5jesf
-5jesh
-jes4kil
-2je3sp
-jes4tea
-je6stim
-je3str
-5jesut
-je5sve
-je4t3ag
-jeta6ka
-je9tar.
-je7tara
-je9tare
-je4t3ru
-jets2
-jet4t5an
-jet6term
-jett3o
-jett5s6
-je4t3v
-jety8e
-2jeu6
-4jev6a
-je7vark
-je6vas
-4jeve
-jevi4s
-jev7na.
-jev7ne
-6jeø
-j1f
-4jg
-j1h
-4ji.
-jib5b
-ji7e6
-6jik
-2j3inf
-ji7ro
-ji6sj
-4jiø
-2j1k
-j4kap
-6j1l
-6j1m
-6j1n
-6jn.
-j5ni
-j2o
-1job
-5joc
-jo4da.
-jo6dat
-jo6dis
-jo4fl
-jok9ker
-jokk9o8
-jol5t6
-j3omr
-jon2
-jo5ne
-jon7n
-jons1
-jons5a
-jonse4
-jons3p
-jons5t
-jon6sti
-jon4str
-jonsu4
-4jop
-jo5ra
-jor6dek
-jor6d7erv
-jor6d7is.
-jor4d3o
-jord3r
-jord5s
-jords4l
-jor6du
-jo1re
-jo4rie
-jort6a
-jor5tet
-jo3r4u
-2jos
-jo3se
-jo4ses
-jo5stei
-1jou
-jour5
-j1p
-4j1r
-2j1s2
-j1t
-ju8are
-1jub
-jubi3
-ju9bo
-ju3de
-ju2do
-ju7doe
-jue7ni
-ju4e5re
-jue9s
-jug9le
-5jugo
-4ju2k
-ju3ka
-ju3ke.
-ju3ken
-juk9sar
-ju2l
-ju3la.
-ju5lar
-ju5las
-ju4li.
-ju6lid
-ju4lik
-jul7inn
-1jung
-jun7ge
-ju6nis
-8jup
-jup7s
-ju6p5å6
-ju4ra
-ju7ras
-3juris
-ju9ro
-ju3ru
-5jury
-1jus
-ju5so5
-ju1ta
-jut5o
-ju6va.
-ju6vak
-ju1å
-j5v
-jy1
-jy8de.
-jy2p3
-jæ5le.
-jæ3ra.
-jæ9ran
-jæ9res.
-jæ7te.
-j2ø
-1jø.
-1jøa.
-jø5b4
-1jøe
-2jøef
-4jøeg
-6jøei
-2jøek
-4jøend
-4jøeng
-4jøeta
-jø1f
-jø3gr
-jø9kj
-4jøl
-jø4les
-jøl6ver
-jø5me
-jøn5ne
-jø5pa
-jøp9sle
-jør4kel
-jør4sp
-jørs5v
-jør4tel
-jø3ru
-jør7ut
-jø1rø
-jø4ses
-jøst2
-jø9ta
-jø3te.
-jøte4t
-jøt5eta
-jø1tr
-jøtte4
-4jø1v
-jø4vel
-2jå
-jå5ar.
-jå9ge.
-jå6la.
-jå4le.
-jå7les
-jå5let
-1ka.
-2kaa
-5kaa.
-5ka4an4
-k3aas
-ka3at
-6kabes
-ka7bo
-4ka1br
-4kaby
-ka3da
-6kadale
-ka5del
-ka6del.
-ka4deri
-4kadg
-kadi7e
-2kadr
-5kadu
-4kady
-3kaen
-ka3fe
-kaf5fere
-2kafo
-ka9fr
-2kaft
-kaf5ta
-6kafø
-2kag
-k5a4gi
-kag2r
-2kah
-ka5isk
-ka5ism
-6kajo
-ka4ka.
-ka4ke.
-ka4ked
-ka4kel
-ka4kes
-ka4ki.
-ka4kis
-4kakt
-ka3ku
-ka3lam
-ka3lan
-ka6lant
-ka3las
-kald5s
-5kaldt
-kal2e
-3kalen
-ka5lev
-5kalis
-k6alk
-5kalky
-kal7la
-kal6lero
-kall4s
-ka1lo
-kal3p
-kal7s6v
-kal4ves
-1kam
-ka6ma.
-ka8me.
-4kammel
-kam4p3i
-kam4pr
-7kamu
-1kana
-ka8na.
-4kanda
-kan6da.
-5k6ande.
-1kane
-ka5ner
-kan4i
-ka5nin
-2k1anl
-4k1anm
-k3anno
-5kano
-ka4no.
-ka8nom
-4kansa
-6kansi
-3kansl
-1kant
-kan6t7end
-kan6t9r
-2kap.
-5kapad
-ka4pak
-3kapas
-ka5pe
-5kapell
-4kapen
-3kapit
-1kapp
-kap3re
-kap4s3t
-1kar.
-1kara
-4karab
-4karam
-karan5
-ka3rav
-1karb
-4karbei
-4karea
-ka6rek
-ka5rel
-1karf
-5karg
-ka4ri.
-ka6rid
-6k3arki
-6k5arkt
-1karm
-kar3n
-ka3rol
-kar3om
-kar5pes
-karp3s
-3karri
-7karsj
-kars4t
-1kart
-kar5ti
-5karu
-4karå
-1kas
-7kas.
-ka5se4i
-ka3sek
-kas5ev
-6kasjø
-ka4sk
-kas3ka
-kasko5
-6kasp
-ka4spi
-kass6
-kas6sad
-kas4sak
-4k3assi
-kas4so
-ka4st
-8kas5to
-kas3t6r
-1ka7t6a
-ka3ted
-3kateg
-ka3tet
-ka1to
-ka4t5op
-4ka1t4r
-kat7s
-kat5ta
-kat4tel
-kat6term
-katte5s
-kat4til
-kat4tri
-ka4t5y
-k7au4r
-2kav
-ka7ves
-k9avis
-kav8l9u
-9kay
-2k1b4
-2kc
-k5ce
-kcen4
-2k1d
-k5d6v
-1ke
-2ke1a8
-ke9al
-2keb
-4kebr
-4kebuk
-4kec
-ked4
-ke5da
-4kedag
-4kedal
-5kedan.
-9kedant
-ke5de
-6kedei
-4kedem
-4kedes
-7kedes.
-2kedi
-2ke5dr
-kedu6
-4kedy
-2kedø
-2keeg
-2keek
-2keel
-ke4ep
-ke7ern
-2keev
-4kef
-k3eff
-k5eft
-2ke1g
-k3egg
-keg8ga
-5kegladh
-ke5h
-3kehet
-4kehj
-2kei
-k3ei2d
-k1eig
-ke5il
-ke1im
-k6e1in
-keis2
-2kej
-2kek
-kek2l
-ke3kn
-k1eks
-k5ek4t
-k6el.
-2kela
-ke3l4ak
-5kelal
-ke6lans
-ke6lat
-kel5eier
-kel5eig
-kel7eik
-kelei8ke.
-6keleis
-kel3e4l
-4k5elem
-4keleng
-4ke5lep
-4keles
-7k6elet
-4kelev
-keli8e8
-keli9en
-3kelig
-4kelign
-4kelinj
-kel5int
-4kelis
-ke4lise
-5kelit
-4keliv
-kel5l
-4kelof
-6kelov.
-4kelove
-kels4
-kels7kar
-kel5sl
-kel5sp
-kel5st
-kel3sv
-kelsva9
-kel2t
-kelt3e
-6kelua
-4kelue
-kel9uka
-kel5uke
-ke4l3ur
-6keluv
-kel5v
-2kely
-2kelæ
-2kelø
-kelø8pa.
-6ke5l4å
-kelå7re
-2kem
-ke4mit
-5kena.
-6kenam
-ken6ap
-ke4nas
-5kenatts
-ken5de
-6k5en6den
-6k5en4der
-4kend5r
-ke3ne
-4keneb
-4kenek
-4kenel
-4kenem
-6kenett
-4kenev
-3kenf
-ke4ni
-5k6enh
-4ke5niv
-ken3k
-ken7n
-ke4nom
-ken1s2
-4k5ense
-kens6t
-ken7te
-ken5t6r
-4k3entu
-6ke3ny
-6kenø
-2keo
-ke3on
-4kep
-5kepi.
-9kepia
-7kepie
-6kepl
-kera7l
-4keram
-ke4ran
-ker5ant
-6kerau
-4kered
-4kereg
-kerei4d
-4kereir
-6kereis
-4kerek
-4ke5rem
-kere6n
-6kerene
-ke6r5eng
-4kerenn
-4kerep
-ke4r5ert
-ke3res
-4keress
-4kerest
-4keresu
-4keret
-5keret.
-5kereta
-7kerets
-3keri
-ke4rif
-6kerik.
-4kerike
-6kerikt
-ke4rim
-ke4rine
-6keringi
-6keringj
-ke4rinæ
-ke4ris
-8kerist.
-8kerista
-6keriste
-3kerm
-7kerop
-5keror
-4ke3ros
-kero6se.
-ke3rot
-k4ert
-ker5to
-ker3t4v
-ker3un
-4kerus
-keru6se.
-kerø6re.
-8ker8øya
-6ker6øye
-2kerå
-5kes.
-4kesam
-9kesam.
-7kesdale
-5kese.
-k5esel
-ke5sil
-4kesit
-2kesj
-k9es8ka.
-4k5eske
-kes8ke.
-4keski
-4keskj
-6keskå
-kesle6ge.
-kes5ped
-5kespot
-5ke4spu
-5kest.
-4ke3sta
-5keste.
-4ke5sted
-4ke5stei
-4ke5s4ten
-ke3sto
-4kestri
-4ke5stru
-4kestu
-4kestø
-ke4s5un
-kes1v
-2kesy
-kes1å
-2keta
-keta6ka
-keta6le.
-5ketals
-k6etar
-ke3te
-5kete.
-4ketek
-7keth
-2keti
-2ketj
-2keto
-2ket2r
-kets2
-ket6t7enh
-ket8tes
-2ketu
-2kety
-kety6e
-4ketæ
-ketøy6s5
-2ketå
-2keu2
-ke5ur
-2kev
-kev2a
-keva8ne.
-5kevas
-3kevel
-kevi6sa.
-k1evj
-kev6ja
-kev4je.
-k3evn
-kev6ne.
-ke3vr
-kevæ8ra
-ke2yt
-6keæ
-2keø
-2keå
-1ké4
-két5
-2k1f
-k5fi
-4k5g2
-k3ge
-k5gh
-kgu4
-4k1h
-kh5ak
-k4har
-khe4o
-khjul8s
-kh6m
-ki3a2r
-k3ideo
-4kidol
-ki3dr
-k4ie2
-kie5re
-ki6el
-ki3er.
-2kif
-ki5g4
-ki6ka.
-ki1k8l
-ki3k2r
-kik4s
-ki8la.
-3kilde
-ki4le.
-ki5li
-4kilj
-kil9ja
-kil6le5st
-ki7loa
-ki4log
-ki3los
-ki4lov
-2kilt
-ki7lå
-ki8ma.
-ki4me.
-5kimo5
-ki4mol
-2k1imp
-kin9and
-ki4nark
-ki5nas.
-6kind
-ki5ne
-ki6ne.
-2kinf
-1king
-king5and
-kin3ge
-kin5ing
-2kinn
-kinnsi8da
-kinnsi8de.
-kinn4sp
-ki2no
-2kins
-kinsi6de.
-2kint
-kinti8me.
-ki6nu
-2kinv
-kio4
-4kiol
-7kios
-2kip
-ki5pe
-ki4p5l
-kip5pe
-kip2s3
-1kir
-ki5re
-ki5ri
-4kirs
-ki3se
-ki5sko
-ki3smu
-ki1s2p
-ki5stav
-ki5str
-ki6ten
-ki7ti
-5kito
-ki4ton
-4kiu
-k6iv
-ki4vek
-ki4v5enh
-ki6vi.
-kiv3s
-kj2
-3k8jan
-kjap5pe
-6k7jarn
-kje7fj
-kje7f6r
-4kjegg
-3kjeld
-kjel7leg
-5kjemas
-3kjemp
-6kjenk
-kje9ny
-kje1s
-kje6t5r
-kjet5t
-6kjor
-kju5le.
-kju5len
-kju9r
-3kjærl
-k5jødi
-1kjøp
-3kjøri
-kjø4tr
-2kk
-k1ka
-k2kab
-kk3aft
-k2k1ak
-k2k3al
-k2kam
-k4kanb
-kk5and
-k8kand.
-k6kanden
-k4k5ang
-k4kann
-k4kao
-k4karb
-k6karg
-k4k7art
-kkar6ta.
-k5kast
-k6kasu
-k6katt
-k2k1au
-kk1av
-k6kedo
-k4kedu
-k2kee
-k2keh
-kk1ei
-k5kel.
-kke6lei
-kk5e4lev
-kkel3t
-kkelu4
-kke4luk
-kkel5un
-kke6nan
-k5ker.
-k4kerei
-k4kerel
-k6kerent
-k4kerig
-k4kerit
-kke5r6und
-k4kesa
-k5kesau
-k4kese
-k4kesi
-kke3s4l
-k4kesp
-k6kestad
-k4kete
-k5ketet
-k4ketø
-k4k9g2
-k1ki
-kk3ind
-kk3inf
-kk9inn
-kk3ins
-kk3int
-k2kir
-k1kja
-kkjek8
-kk5jent
-k4k5jern
-kkje7t
-kk5ju
-kk5k
-kkla4g
-kk3lan
-kk8lar
-kk7lau
-kk1lo
-kk1ly
-kk3læ
-k4kn
-kk5ne
-kk5ny
-kk6s5v
-k1kod
-k1koe
-k4k1of
-kko6lig
-kk5oml
-kk7oms
-kk9omt
-k6koo
-kk1op
-kko7s
-k4kosi
-k6kosk
-k4kost
-kk3ove
-k4kra
-kk5ram
-kk3rap
-kk3rea
-kk5rei
-kk3ren
-kk3res
-kkri6k
-kk3ro
-kkro8e
-kkro4s
-kk3ru
-kk4rus
-kk7rø
-kk7rå
-kk7s
-kks6al
-kk4sar
-kk5sed
-kk3s4ei
-kk4sin
-kk1sk
-kks4kj
-kks4l
-kk3sla
-kk7sle
-kk5sli
-kk3spe
-kk1s2t
-kks5tak
-kks7tep
-kkst4r
-kk8s7va
-kk5s4å7
-kk3t2
-kk5uk
-k2k1u6t
-kk1v
-k2kvo
-k1ky6
-kkyl4
-kk5yr
-kk7yt
-k2k1ø
-k8køl
-kkø6r
-kkøy6
-kk1å2
-kl4
-6kl.
-4kla.
-4k5lagt
-2klak
-kla9ke.
-kla4mel
-3k2las
-k7lati
-kla4tr
-kleby7t
-3k4ledd
-kle4deb
-kle4des
-2kleg
-klei9e
-k7leik
-k4leiv
-k2lem
-5k6lem.
-7k4leno
-k6lerik
-kles7j
-kle5sno
-kle4sp
-kle5sti
-2klet
-8klia
-4klie.
-4klig
-1k2lim2
-3k4lini
-k5linj
-1klip
-4klit
-klon7a8l
-1klos
-2klov
-k3lukt
-4klun
-klun5t
-k5lyd
-6k7lyf
-klyse7te
-k2læ
-klæ5res
-klø7na
-k6lør
-6kløs
-klø9va
-klø5ve
-6k1lån
-klå5re
-2k3m
-kmann6
-kmål2
-2k1n2
-3k2nap
-kna5t4re
-kne4b3l
-k4nedi
-5k2nee
-kne8se.
-k4nest
-kn5f
-3k4nip
-knippe6
-kni2t3
-3k2niv
-kno7g
-kno6kl
-5knop
-kno9ta
-kno5te
-3k2nu
-4k3num
-3k2ny
-kny4s
-k2nø
-knø9le
-kn3øy
-9koa.
-4ko1ak
-9koane
-ko7ar
-ko2b3
-ko3bo
-4ko3br
-ko5da
-4kodd
-ko4de.
-3kodek
-5koden
-2kodø
-ko3e
-3koef
-4koek
-4koel
-4koes
-4koev
-ko4g5eng
-kog9ger
-kog3l
-ko4gre
-kogst6
-ko4gu
-ko6gå
-2koi
-koi4e5ne
-ko7i6k
-ko1in
-2koj
-ko8ja.
-ko4ka.
-ko4kab
-ko4ke.
-ko6kel
-ko1ki
-kokk6o
-k3okku
-4kok4l
-4koko
-2koku
-kolba5
-2kole
-ko4leg
-ko4lei
-ko6lel
-ko4let
-ko4leu
-3kolle
-ko5lo.
-kol5p
-4koly
-2kolå
-1kom
-ko4ma.
-4komaf
-ko4me.
-6komg
-ko4mi.
-4komil
-4komisb
-ko4mise
-2komr
-4komse
-kom3sl
-kom5so
-kom4st
-4kom5t
-4komu
-4komå
-k6on
-ko4na.
-kon3d
-kon6dr
-kone5l6å
-4koniv
-kon3s2
-kon6s7v
-kon6ton
-ko4nu
-1ko1o
-4koom
-ko5pa
-ko5pers
-4kopet
-ko4pi.
-ko4pip
-ko4p9l
-4kopo
-kop5per
-2kopr
-ko1ra
-ko4ra.
-kor6da.
-kor4d3o
-kord5s4ø
-kor4du
-ko1r6e
-6koref
-4ko7rei9
-ko5rem
-ko7ret
-ko3ri
-ko6rik
-4korm
-ko5rol
-6korpa
-6korpe
-1kor3r
-kor4sal
-kor6s5inn
-kor4s5l
-kor6str
-kor4sv
-kor5tes
-kor6top
-kor4t5r
-kort5s4
-ko5ru
-ko6rume
-1kos
-2kosa
-ko6sa.
-ko4sed
-ko4sek
-5kosele
-ko5sen
-ko4ses
-ko9si
-kosi9d
-ko2sk
-ko1sl
-4kosmu
-2koso
-2ko1s2p
-ko6sta
-kost7as
-kos6t5ers
-kost5j
-4kosø
-kotes7
-ko5t4i
-4kotil
-4kotr
-ko6tre
-kot2s
-kots5tr
-kot4ti
-kott4s
-kotts5t
-4koty
-2kou4
-kout3
-kou7ta
-ko1va
-kover7e
-4kovr
-1kov4s3
-4koø
-4koå
-6k1p
-kr6
-k3rad
-1k4raf
-5krag
-3krakk
-krani6e7n
-6krank
-3krans
-4krap
-kra9se
-kra4sj
-kras9ja
-kras5je
-kras5s
-kra4to
-kra4u
-1krav
-4kred.
-3kredi
-4k1reg
-kregi3
-4krei
-krei9e
-krei5s
-6krek
-kre4kli
-2krel
-k5rela
-4k3renn
-4krent
-6kreo
-k5repr
-5kreps
-5kresj
-kreta9
-6k7retn
-k4rets
-k3rett
-2krib
-4krif
-3k2rig
-kri9ga
-4krik
-kri5ke
-kri4kj
-krik6ka
-1krim
-kri4me
-3k6rins
-krin6s7t
-kri2p
-1k2ris
-7krisene
-k2rit
-3krite
-6kriv
-k2ro
-kro5b4
-kro5de
-k3rofo
-k4rofor
-krok7k
-k6roni
-k5ronl
-kro4nom
-k4rop
-krop9n
-kropp4
-k4rost
-kro9t8e
-kroten9
-kro3v
-kru3i4
-krum3
-kru5sa
-krutt5i
-kru3tr
-2k5ryg
-kry7pa
-kry5pe
-kry4pi
-3krys
-krø5ke
-krø3v
-4kråd
-krå8da
-kråe6
-5kråk
-krå5le
-krå9m
-krå7ne
-4ks
-k1sa
-k3sa.
-k2s3ad
-ks3alt
-ksa5me
-k3sane
-k4sans
-k4s3ant
-k3sar.
-k7sara
-k6s3ark
-k7sas
-k1sc
-k2sed
-k2see
-kse6ge
-k2s1ei
-k5sekt
-k5sela
-kse5lev
-ksen5to
-k4serf
-ks3erk
-k5serol
-k4sesa
-k4ses6k
-k4se3sm
-k5seso
-kses4p
-k5sess
-kses6sel
-kses8serie
-kses4sp
-kses4st
-kse6te.
-ksfø4
-k5sia
-k2sif
-ksi5ko
-ks3ind
-k3sing
-ksi7ni
-ks3inn
-k4s3ins
-k7sio
-ksi3st
-k4siti
-ks9kab
-k6s3kal
-k6skio
-ks1kj
-ks5kl
-ksko7na
-ksko5ne
-ks1kr
-ksk8u
-ks9ku.
-ks7kua
-ks8kut
-ks1k6v
-ks1l
-ksla8ga.
-ks5lo
-k7s6lu
-k8s7lug
-ks5løs
-kslø8va
-kslø8ve.
-k5s4mak
-ks4mel
-k5s4no
-k7s8nø
-k1so
-k6s7oa
-k6sod
-k4sog
-k4somb
-k2s1or
-k2sot
-ks1ov
-k3spal
-ks3pek
-ks5pio
-ks3pir
-kspor6t5r
-ks1pr
-k3spy
-kss2
-ks3sm
-k5stad
-k4stak
-ks3tal
-ks5tant
-k9s8vak
-ks6tav
-kste4da
-ks4teg
-k3stei
-k4stek
-kst3ev
-kstev6ne.
-ks4til
-k4stin
-ks1tj
-ks1tr
-kst6ran
-ks4t5rek
-k6stren
-k6strer
-ks4tri
-ks4tro
-ks9tum
-k5stus
-ks3tyv
-k2stå
-k1su
-k6sun
-ks1v
-k9s8vake
-ksva8ne.
-ks5veg
-k7s6vert
-k5s4vin
-ks5w
-ksy8na
-ksy8s7m
-ks5ær
-ksø4ke.
-k6s3øl
-ks1å
-k3så.
-k4såp
-ksår4
-ksåt4
-6k1t
-k5ta.
-k4tag
-kta6ka
-k4t3aks
-k4takt
-kta6la.
-k4t3ana
-kta9na.
-kt3anl
-k4t3ann
-k4tanv
-kt3app
-k9tar.
-k4t3arr
-k4t3art
-k6tass
-k5tast
-k6t7atl
-kt5avh
-kt5avk
-k6t3avl
-k3ted
-k4teda
-k6tee
-k4tefø
-kt5e4ge
-k2te5i
-k6teka
-kte5le
-k6t5elsk
-kt5e4lit
-ktem8
-kt7emn
-k4t3enh
-k9ter.
-kterie5n
-kterie7ns
-kter5s6
-k7tes.
-k6tesa
-k6tese
-kt5eske
-ktes6ke.
-kt5esti
-k4t5e4ta
-k4tete
-kt5evn
-ktev6ne.
-k5tib
-k3til
-k4t3ins
-k5tir
-ktis5t
-kt7i6te
-kti6v7end
-k2tja
-kt7ju
-kto9a
-kt5off
-k6togram
-k4toli
-k2tom
-kt5omf
-k2t1op
-k9tor.
-k7tora
-kt5ord.
-k5tore
-ktori9e8
-ktor7s
-kt1ov
-kt3ral
-k2t1re
-kt2ro
-ktro5s
-k2t1ru
-kt4s5amb
-kts5ar
-kt5sek
-kt7sem
-kt4s5er
-kt6sin
-kts5kra
-kt5sku
-kts4kv
-ktsle6ge.
-kt6sok
-kt5spre
-kt4sta
-kts6ton
-kts5top
-kt4stå
-kt3t8
-ktu9er.
-k4tuk
-kt7und
-k2t1ut
-kt7yrk
-ktyr8ke.
-ktør7
-ktør8e
-k6t5øs
-kt1øv
-k2t3år
-ku2a
-ku9an
-ku4be.
-ku3bj
-2kud
-ku4dal
-ku4er.
-kue4r5a
-ku4et
-6kuf
-ku4f3l
-6kug
-k5u4gr
-ku7is
-kuit6
-6kuldi
-kuld3r
-ku4led
-ku4leg
-ku6lei
-ku4lem
-ku5len
-ku4let
-ku4lev
-ku5li
-ku6li.
-3kull
-1kult
-ku4man
-kumen6tal
-ku6mi
-kum2s
-3kumu
-1kun
-kund5s6l
-2k1ung
-kun4ge.
-k6unn
-ku4o
-1kup
-ku4pe.
-kup4pl
-ku7ra
-ku4rek
-ku8r7o
-ku7r6op
-kuro8pa
-1kurs
-kur6sk
-kur4sp
-kur4s3t
-kurs3v
-kur3t
-ku5ru6
-kuru9ken
-kuru7ker
-1kurv
-kur4v3i
-1kus
-5kus.
-ku7sa.
-kus5a6k
-5kuse
-ku4s5el
-ku4ska
-ku7s6pe
-kus3t
-6k1ut.
-ku1ta
-4ku5te.
-ku5to
-ku6t7r
-2kuts
-1kuu8
-kuøy6
-kv2
-kva8ke
-k4vali
-k6vard
-kvari6e5n
-k6vart
-kva9se
-kve3d2
-kve7e
-k6veil
-kvei9se
-1k4vel
-kve5la
-4k3verd
-5kvern
-kverns8
-2kves
-kves5t
-7k6via
-4kvid
-3k4vie
-kvi4ene
-kvi5er
-kvi7la
-3kvinn
-kvi5se
-7kvist
-2kviv
-1kvo
-k1vog
-6kvok
-k4vot
-k2vu
-4k3væ
-k1vå
-k7we
-k5wu
-ky5a
-ky6el
-4kyf
-kyf5le
-2kyg
-ky4leg
-2k3yns
-kyn6skjer
-ky2p1
-ky4p5r
-1kyr
-kyrie5ne
-kyr8ke.
-ky8sa
-4kyse
-ky6se.
-kyse8te.
-ky3skr
-kys6sk
-1ky4st
-kyst3a
-kys4tel
-2kyt
-ky6ta.
-kyte3s
-k1æt3
-1kø.
-kø2ar
-1køe
-kø4en.
-kø2er
-6k1øk
-kø4le
-k1øn
-køn6skjer
-k3ørr
-køs4
-kø5se
-køy7ar.
-k7øyd
-køy4e5ne
-1k6øyr
-4kåke
-kå3le
-kån8da
-kå5ne
-kå4pe.
-kå7pen
-kå9ras
-kå1re
-kå1ri
-kå2t5
-k5åt6t
-1la.
-2laa
-la1b
-4laba
-la6bl
-1labo
-4laby
-4lad.
-l6ade
-la4dem
-4ladg
-ladi9e8
-2ladm
-2ladr
-lad1s4
-1lae
-2laei
-4laent
-4laep
-2laf
-la3fl
-4lagg
-lagi4
-6lagne
-la2go8
-lag5om
-la2g1r
-lag5san
-lag4sj
-2laha
-2la1in
-la5ka
-la4ke.
-4lakj
-l2akk
-la2kr
-l7aksj
-l5aksl
-4lakt
-lakterie6
-la5kø
-2lal
-l1alk
-la5mab
-4lamb
-la4mes
-la4met
-la3mo
-l8a8mu
-4l3anal
-lan2c
-lan6das
-lan6deb
-land3r
-l6a3ne
-3lane.
-4lanet
-lan6gel
-lan4gem
-lan6germ
-lan4gr
-lang3s4
-lang4s5e
-lan6g5ø6
-4lanl
-4lann
-l3anno
-la4nor
-6l5ansi
-lan5ti
-4lanv
-l3anvi
-2lao
-la6pal
-la7pi
-la8pl
-lap5sa
-lap5sen
-lap5s4i
-1l8ar.
-6l7arab
-2larb
-l8are.
-4l7area
-la9red
-la5rem
-l6aren.
-4larena
-lare6t
-la6r7eta
-5larf
-la7ria
-lari6e7n
-4l3arki
-l2arm
-lar3n
-6l7arr
-4lart
-lar6ta.
-lar7vet
-la6sc
-la5se
-lasi9e
-la2sk
-7laskj
-4lasm
-la5smi
-4la4sp
-las6sak
-las6sam
-las6sat
-las6sel
-l6ast
-4lastr
-las3v
-la1ta
-lat5ang
-6latau
-la4teg
-lat6ek
-la4teno
-late5s4
-la5ti
-la6ti.
-4latm
-la1to
-lat7ra.
-lat9ran
-lat5rar
-lat4t5is
-lat4tra
-latt6u
-lau7a
-2laud
-laue6
-4laun
-4laur
-lau7se
-lau6st
-2laut
-2lav
-la4v5al
-la4vel
-l5avh
-lav5inn
-6lavs
-7lavå
-1law
-lay1
-2l1b2
-lba3de
-lba4k
-lba5ke.
-lba4ne.
-l5be
-lbe9na
-lbe8re.
-l4boa
-l6buh
-lby4e
-l5bå
-2l1c
-l4ce.
-6ld
-l7da.
-ld5aks
-ld5akt
-l9dand
-lda6t5o
-lda6t5y
-l2deb
-l5den
-l2de5o
-l2dep
-l3der
-l7der.
-lder7a
-l4derek
-l6derik
-l6derklæ
-lderle9g
-lder5s6te
-lder6s5ti
-l4desh
-l6destr
-l9dé
-ldis7k
-ldo9a
-l8d5oks
-l2dol
-l4dore
-ld5ovn
-l3drak
-ld3ran
-ld5ras
-l6dre.
-ld7regn
-ld5rer.
-l8dres.
-ld1ri
-l7dry
-ld1rø
-ldse8
-ld4sek
-ld4sel
-ld4ses
-lds1k
-ld4ska
-lds4kj
-ldsla8ga
-lds6leg
-lds4let
-ld4s9m
-ld5s4om
-lds3tr
-ld6tus
-ldø2
-ldø5d
-ldø5l
-ld7øy
-1le
-2lea
-le7ag
-le3ak
-le1al
-lea5la
-3leas
-le5at
-2leb
-le4bem
-le6bosta
-5lebæk
-lec4
-2leda
-5ledar
-led4dø
-4ledeb
-le4dem
-6ledep
-le5der
-le3des
-2ledo
-3ledop
-5ledov
-le4dro
-le5dry
-led1s2
-6ledu
-4ledy
-2ledø
-4le3då
-2lee
-6leei
-6lefa
-lefa6ne.
-4l1eff
-2lefi
-4lefl
-4lefor
-4lefot
-2lefr
-l1eft
-6lefy
-4lefø
-6legap
-5legas
-3lege
-le4ged
-le9gen
-le4gera
-le9geran
-le9geras
-le4gero
-le4geta
-le4gev
-7leggi
-le3gi
-6legif
-4legj
-2le1g2l
-le4gol
-4legre
-leg3s4
-2legu
-2legå
-2leh
-6lehal
-6lehamr
-6lehan
-6lehau
-6lehave
-le3ido
-l6eie.
-lei5ende
-lei4e5ne
-l6eiet
-leig6d
-lei4ger
-lei7ger.
-lei4get
-leig4h5
-leig6na
-leig8ne
-2lein
-le3int
-lei6r7u
-leis7t
-l6eit
-2lej
-2leka
-le4ka.
-6lekan
-le3ki
-2lekj
-lekk7s
-2lek2l
-2lekn
-lek4na
-2leko
-2lekr
-4l3ekso
-4leksp
-lekt5ord
-lekt4s5t
-2leku
-2lekv
-4lekø
-4lekå
-2le3la
-8l9eld
-2lele
-l3elem
-4l5elg
-5lelig
-2lelo
-3lels
-4l3elsk
-le1lu
-4leluk
-l5elv
-2lely
-4lelæ
-2lelø
-lelø6pa
-4lema
-le3me
-le8me.
-4lemet
-8lemetrisk
-8l9emn
-lem8na
-2lemo
-lem9ped
-lem5pes
-3lemr
-lem4si
-lem4s5ø
-2lemt
-lem5ti
-2lemu
-6lemy
-4lemø
-2lemå
-le4na.
-le4nal
-4lenav
-lend8a
-len9dan
-6lenden
-l6endre
-4lendri
-4lened
-4lenem
-4lenev
-len4g5r
-leng9u
-le5ni
-4leniv
-lensa4
-len4s5ak
-4lensem
-len5ses
-len4sta
-len4tam
-len4tr
-len8t9ra
-2lenø
-4lenå
-2leo
-5leol
-2lep
-le5pa
-le4pel
-le8p9enden
-le2p3j
-le8pla.
-le4ple
-4lepo
-4leraba
-4leram
-ler5d
-l8ere
-le9re.
-6lerea
-4leref
-4lereg
-4le9r8ei
-4lerek
-le5res
-4lereso
-4leresu
-4leret
-4lerev
-9leri.
-7lerie
-le6riei
-le7rina
-le4riv
-4l5ernæ
-le5ro.
-4lerom
-6lerope
-le3ros
-4le3rot
-7lers.
-lers4p
-ler7te
-le1ru
-4lerus
-leru8se.
-2lery
-5leryr
-2lerø
-2lerå
-5l6es.
-le4sab
-4lesam
-7lesar
-4lesau
-2lesc
-le5sed
-le4seg
-4lesek
-le5sen
-le3ser
-4leset
-4lesho
-le6si.
-4lesig
-le7sing
-les5inn
-4lesit
-4lesju
-le7skap
-le4s3kj
-6leskol
-le6sk9u8t
-4lesla
-2lesp
-6lespal
-les3s6
-lesse6ne.
-4lesta
-9lesta.
-7lestal
-le5sted
-le5steg
-le5stel
-le4stim
-le3sto
-4lestrø
-4lestyr
-4lestø
-4lestå
-4lesug
-les1v
-le5s6vi
-4le5sy
-4lesø
-5lesøy
-3let.
-le4tab
-6letak
-leta8ka
-leta8le.
-l5e4tas
-5lete.
-6letea
-4leteg
-4letek
-le5ten
-6letenk
-6le7tep
-le5ter.
-4letes
-2le3ti
-l5e4tik
-2letj
-2leto
-2let2r
-le7tre
-le5t4ri
-3lets
-let6sj
-lets8k
-let6tea
-let6tr
-lett3s4
-2letu
-le4tv
-2lety
-lety8e
-4letø
-8letå
-4leul
-2leun
-l1eur
-2leut
-le4ute
-2lev.
-le6vad
-le6valu
-le4ved
-4leveg
-4levei
-4levek
-6levern
-4le4vev
-levi6d
-lev5n
-2levo
-lev1r
-4levs
-4levæ
-lex1
-4leø
-2leå
-5lée
-1lér
-7lét.
-7lè
-5lê
-4l1f
-l4fa.
-lf5ant
-l5far
-l5fe
-lf3f
-l5f6in
-lf5ja
-l7fje
-l6f3nul
-l4fom
-l4fut
-2lg
-l6gaf
-lga8le.
-l4g5alt
-l4g3ana
-lga5t
-lga4ve.
-l2ged
-l4gela
-l4gele
-l2gem
-lge4r5an
-lge4rap
-lge5ri
-lger5un
-l4gery
-l4gesl
-l6ge7sp
-lg5g
-lgie8n
-lg1lo
-lg5ly
-lg5n
-lg3ob
-lgo2d
-lg1ok
-lg1om
-lg5ov
-lg3ref
-lgr9øy
-lg3s2e
-lg2sk
-lg5s4kre
-lgsle9g
-lg5s4tr
-lgu4l
-lg3un
-lg3ur
-l1gæ
-lg5ø
-l6gå.
-lg5år.
-lgå8va
-lgå8ve.
-8l1h
-lha8ka.
-lhav6s5
-l5hj
-1li
-li1a
-li4ala
-li2am
-li5ans
-li4as
-liba5
-libe5ro
-libi5
-libie6
-liby5e
-li4dak
-li4ded
-li4do.
-2l1idr
-lid3t
-li4ene
-li3er.
-li5ers.
-lie5s
-3lif
-4lifat
-lif5f
-3lig
-li4ga.
-li4g3an
-li4gar
-lig9art
-li8gas.
-li4g5enh
-li4get
-5lign
-li4g3re
-lig3se
-lig3s4i
-lig3sl
-lig3s4p
-lig5s4ti
-lig5str
-li2gu
-4lih
-li5kan
-li9kar
-li7kas
-li5kee
-li3ken
-li5keså
-li9ki
-likk3o
-li1k2l
-9likn
-liks4t
-li5ku
-6lila
-4l5ild
-li3le
-lil5lebe
-lil5let
-li4mar
-li4mas
-li6mate
-l6ime
-li4me.
-4limh
-limp3r
-lim7r
-lim9u
-li4na.
-4lina6l
-lin6c
-linch5
-5l4indr
-4lindu
-l5indus
-li4ne.
-li3ne6a
-li6nem
-2l1inf
-lin4g3j
-ling5l
-ling7sen.
-5lingv
-4l5inju
-lin5kes
-lin5kle
-lin4kv
-2l1inn
-lin5net
-3linni
-6linns
-6l5inntr
-li4nor
-l4inse
-5linsk
-4l3inst
-4lint
-2linv
-li6n5ø6
-lio4no
-lion5sp
-lion5sv
-li5o6s
-2lip
-lipes4
-lipp4s3
-li9rar
-li4rek
-4lisak
-li5set
-lis4kl
-2liso
-4lisp
-lis6sp
-lis7tan
-lis6terk
-lis5ti
-4lis6til
-list3o
-li6s8tr
-list7rø
-lis4t3u4
-li4st5y
-listyr8ke.
-li4tee
-li4tek
-li4ti3a
-li4tid
-li4tig
-li4til
-li4tim
-liti5st
-li4tiv
-lit5j
-6litn
-li5to
-li2t1r
-lit5rer
-lit6tele
-lit6terk
-lit6term
-litt5s6
-li5ty
-7liu
-li6va.
-li4v3ak
-liv5eg
-livi5e
-liv2s3
-2lj
-l1jan
-l1jar
-l4jarb
-ljar5s6
-ljas4
-l4jed
-l6jee
-l2jei
-l2jek
-lje3l
-lj9elv
-l1jen
-l3jer.
-l4je1s
-l5jes.
-ljes4t
-l5jet.
-l4jete
-l5jete.
-l6je5t6r
-l2jev
-l5jé
-l1ji
-3l2jod
-ljo8e
-l4jom
-lj5ori
-3ljos
-lj5un
-l7jur
-lj7ut
-ljø3
-l5jøs.
-6l1k
-l3ka
-l5ka6l
-lkali9e8
-lk4an
-l6k5b
-lk4e
-l3ke.
-l2ked
-l5kedal
-l3kede
-lkeei4
-l6keh
-l5keleg
-l3ken
-l7ker.
-l4kera
-l4keri
-l4k5ers
-l4ke3ru
-l5kestad
-l5ket.
-l5kets
-lk2l
-lk4li
-l5k4lu
-l6k5nin
-l6ko.
-lko9ma
-lko9sa
-l2kot
-lkras5
-lk5ri6k
-lk4ser
-lk1s4t
-lku4le.
-lku8t
-lk9ute
-l6kveg
-lkå1
-2l1l
-l5la6a
-ll6a5f
-l2lak
-ll1al
-l4lami
-l5lane
-ll3anl
-l4l5ano
-llans4
-ll5ansk
-ll7apa
-llap3s
-ll4as
-ll5asp
-ll5aur
-llau6re
-ll7avl
-ll5avr
-ll3d2
-lle5a
-l5leak
-lle8da.
-lle4d3r
-l3lee
-l2lef
-lle5gev
-lle5gr
-l5leha
-l5leho
-l5lehå
-l4l5eig
-l4leki
-l6l5ekst
-l4leli
-l2lem
-llen6da.
-ll5enden
-l4lendr
-l6lendt
-l4lenk
-l5l8ens
-l4lentu
-l4lenu
-ll5eple
-l6l5e6rik
-l4lerob
-ll6es
-lle4so
-lles5pr
-lle5stø
-l5let.
-l4leta
-l5lets
-llet6tele
-l8letæ
-l2leu
-ll5even
-lle7vev
-l5levå
-l2lé.
-ll3g2
-lli1e
-lli5e4n
-l9lig
-l2lim
-l4l3ind
-l4lins
-ll3int
-l9lint.
-l3lip
-l4lir
-lli6sen
-l4liv
-ll1j
-ll3k2
-ll5m
-llmue9ne
-llmu7ens
-llmu9er
-l5lo.
-llob5
-l2lod
-l4l3off
-llo5id
-ll5oks
-llo2m1
-ll3op
-ll5opp
-l2l1or
-l4loso
-l6lote
-ll5p
-llra7n
-ll4sak
-llsa6me.
-ll4sem
-lls5end
-llsk4
-lls6kar
-lls5kv
-ll5skå
-lls5lag
-ll3smy
-lls4no
-lls4te
-lls6tig
-lls7øk
-ll3t4
-llto4e
-l8lua
-l4lu4e
-l4luf
-ll7ug
-llu4k
-l8l7uka
-l4l3uke
-l6luks
-l5lum
-l4l1un
-llun6ge.
-llu4pi
-l2l1ur
-l3lus
-l2l1ut
-ll1v
-llva8n
-lly4se.
-l4løk
-ll5øks
-llø6pa.
-l4løve
-ll7øy.
-ll5øya
-ll3øye
-lløy6er
-ll5øy6n
-ll1å8r
-ll3å2s
-2l1m
-l5ma.
-lm3anm
-l4map
-l4marki
-lm3av
-lm7b
-l4m3els
-l4melu
-lm5e4po
-l4m5erf
-lme7ri
-lme7sti
-lme5t4r
-l5mil
-lmi8le.
-lm3ind
-l5ming
-lmini6
-lmin7ne
-lm3ins
-lm5int
-l7mis
-lm5l
-lm5m
-lm1op
-lm1s
-lms6j
-lm5s2p
-lm3t
-lmu4le.
-lm3ut
-lmyr8ke.
-l4mø.
-l6m5øs
-lm5øy6
-lmøya9
-lmå6la.
-lm5å4r
-l4m5ås
-2l1n
-l2nab
-l3ne
-lni4u
-l7ny
-lo1al
-7loane
-lo1a4r
-5loar.
-2lob
-lob5by.
-lob9byan
-lob9byar.
-lob5bye
-lo2bl
-lo2d3a
-lo3de
-lo4d3ri
-lod3s4m
-lod7ste
-lod7s6v
-lo6d5u
-6loeng
-6lofj
-3loft
-1log
-lo5ge
-lo4gir
-log2o
-lo3gop
-log8res
-lo6g5ro
-log5sa
-4loh
-lo5id.
-lo3ide
-lo1in
-3loja
-lo1ki
-lok4ko
-lok6kul
-2lo1k4l
-4lokon
-2lok7s4
-lok8se.
-lo1k4v
-lole6ge.
-2lolj
-lolo9
-l5omdr
-lo4m5in
-lom4mel
-lomst9r
-lo4nal
-6lond
-lo5ne
-lon4g3r
-lo4nit
-lon7skj
-2lop
-lo3pa
-lo4pea
-lop5pa
-5l4opt
-lo1ra
-2lord
-lor6da.
-lo1re
-4l1org
-lor4g5l
-lorie6
-lo1ro
-lo7rød
-lo7sa
-lo6sek
-lo4ses
-lo5sev
-los4kle
-lo1sl
-lo9sp
-2lost
-lo9tes
-lo8ti.
-lo3to
-4lottet
-lo1un
-1lov
-lov7ald
-lo3van
-lo9vand
-lo7vane
-lo3var
-lo3ve7d6
-l6over.
-love5re
-l5overn
-l5overt
-7lovo
-lov3sa
-2l1p
-l7pa
-lpa5re
-lpas5
-l4pedo
-l4pee
-l2pei
-l2pel
-l5peleg
-l3peli
-l4pelin
-l3pesm
-l4peti
-l2peu
-lp2h
-lp2i
-lpin3e
-lpi5ne.
-lp2l
-lpo6et
-l4put
-l5q
-2l5r4
-lra8da
-lradi4u
-lra6ne.
-lre4de
-lre4i
-lre8ka
-lre8ke.
-lre8va
-lri8ma
-lri4ve.
-lro8de.
-lro6pa.
-lro8sa.
-lro4se.
-lrot5s
-lrø6re.
-lrø5v
-lrå8da.
-lrå4de.
-8l1s
-l2sad
-lsag6
-ls5ald
-ls4am
-l7sana
-lsan6ke.
-l4s5ano
-l4s3ans
-ls5ark
-l4sat.
-l4scu
-l3se.
-l2sed
-l2see
-ls3eid
-ls5eig
-l4s3ele
-l4s3elv
-l2sem
-ls5emb
-l4seno
-l7ser.
-lse2s
-lses5ku
-lses3l
-lses5pa
-lses5s
-lse8s5tr
-lse4te.
-l2seu
-l6sev
-l4sf
-l2sh
-l5sig
-l5sik
-l6s5ill
-l4sim
-l5simu
-l4s3inn
-ls5jakk
-l5sjef
-ls3jeg
-ls3jen
-8lsk.
-ls5kabi
-l4s5kan
-ls5kari
-lsk5art
-l6s5ke
-lskif5
-lskinn6
-lskinns5
-ls3kjo
-l6skl
-lsk3læ
-ls3koa
-ls5kor
-ls3kov
-l4skra
-lsk5un
-ls7kva
-ls3kvi
-l4skå
-ls3kåp
-lskå6pa
-l2sl
-lsla4ga
-l7slagn
-lsle6ge.
-ls5lo
-l5s4luk
-l6s5løs
-l2sm
-l5smør
-lsmå6la
-l2snu
-lsok3
-ls5ond
-lson6de.
-l2s1or
-ls7o6se
-l5sot
-ls1ov
-l2spa
-l9speg
-l5spei
-l9spel
-l5spi
-l4spr
-l5spred
-ls3pri
-ls7s2
-l4s3tak
-l4s3tal
-l6stank
-l6ste.
-ls4ted
-l4steg
-l3ste4i
-ls4tel
-ls5terr
-ls6ti.
-ls4tie
-ls6ton
-ls5tren
-l9stri
-l2su
-l5sub
-l3suk
-ls1un
-l2s1v
-ls7vea
-ls5vee
-lsve8en.
-lsve7re
-l4svik
-ls6vind
-l4sør
-l2s1øy
-l2s1å
-2l1t
-l4taa
-l4taf
-lt3akt
-l3tal
-lta4la.
-l4t3alb
-lta6lev
-lt3anl
-lta6no
-lt3art
-lta4st
-lta4t3o
-ltat3r
-lt3avk
-l5tavæ
-lt9b
-l3tede
-l4teka
-lte6ma.
-lt4en.
-l4t5enh
-lt3epi
-l4teras
-l4t5erst
-ltesa8me.
-l4tiet
-l2tif
-lti6g5
-l2tik
-l4tina
-lt3ind
-lt9inn
-lt3ins
-l4tivi
-l2t1ja
-ltle8ge.
-lt9n
-lto9ar
-l3tog
-lto4s
-lt3ost
-lt2r
-l3tra
-lt3reg
-lt3rei
-l6treko
-l6t5rel
-l6t7rem
-l4trens
-lt3res
-l5t4rest
-l5trev
-l4t5rit
-lt3rol
-lt3rom
-ltro8pa
-l5tros
-l4t5rød
-l5trå
-lt1s2
-ltsa8me.
-lt5s4i
-lt7s6t
-lt2s3v
-lts4vi
-lt7t8
-lt3und
-ltu4ra
-ltur5e6
-ltu5r6en
-ltu5r6er
-ltur5s6
-ltur5å6
-l2tut
-l5tv.
-ltva8la
-l3tvs
-l4t5w
-l3ty
-lty8d
-lt7øl
-lt3øv
-lua8r
-2lub
-lub6band
-lu6bri
-lu5c
-lu7ere
-1luf
-3lugar
-lu7go
-lui6
-luid6er
-1luj
-4luk.
-lu4ka.
-4luket
-luk6keri
-lu3kr
-4luly
-l4um
-lu6mel
-lu2mo
-lum6sk
-lu4mø
-lun5d4r
-lu4ne.
-lun4gel
-l7u2ni
-lun5ne
-3lunsj
-4lunt
-lu6o
-lup4s
-lu2p3u
-lur2e
-6lurei
-lu5ren
-lu5ri
-6l5urn
-lur8na
-lur8ne.
-lur8ta
-1lus.
-lusa5
-lu7sak
-lu6sel
-lush7e
-lu2s5k
-lus4o5
-lus4sid
-lus4s3t
-lus1t
-luta3
-lu3ta.
-lu7tet
-6lutf
-4lutg
-luth
-3lu5t6he
-lutla9
-lut6m
-lu1to
-lu4t5r
-2luts
-lut4tal
-lut4tap
-lut4t5at
-6lutv
-1luv
-lu4va
-lu4ve.
-lu9ven
-lu9ver
-8lv
-l1va
-l4va.
-lva6k
-l4vakti
-lva6la
-l4va4m
-l4vana
-lv8and
-l7var.
-lv7asa
-l4v5ass
-lve3d4a
-lve5i6s
-l4vela
-l4vele
-lv4en
-lve9ne
-l9ver.
-lve9rau
-l4veru
-l4vesk
-lve5sl
-l7v6et.
-lve5str
-l9vé
-l1vi
-lvi8ene
-lvi9er
-lvi6ka.
-lv9im
-lvin5g6r
-lv3iro
-lv1j
-lvly8se.
-lv3n
-lv1of
-lv9op
-lvo8re.
-lvor4s
-lv5o4v
-l6v5p
-lvra8r
-lv9ri
-lv1s2
-lv5se
-lv7s6k
-lvs6l
-lv9ta
-l5vøe
-lv1å
-l3våg
-lvå4p4
-lvå6r
-l5w
-ly1a
-2lyb
-ly4d9r
-ly5e
-lyes3
-ly4gel
-ly5g6l
-ly8is
-2lykj
-lyk6keri
-ly5ku
-ly7kv
-6lykø
-ly5l
-ly5me
-2lymp
-ly2n3a
-ly4ne.
-ly4n5il
-lyn3s2
-2lyo
-ly5ok
-ly3pe
-ly1r8
-ly8ra.
-ly6re.
-6l7yrk
-ly4sa.
-ly4s5a4k
-lyse6te.
-lysk4
-lys3kj
-lys9kl
-ly2s1l
-4lysp
-lyst9ra
-6lysy
-ly8ta.
-4lytek
-ly4teri
-lyte5s
-l5y4tin
-ly1tr
-ly3ve
-l3z
-l6z5b
-1læ1
-læ6ra.
-læ5rar
-lær4arm
-læ4re.
-lære3i
-læ3rer
-læ4re3s
-læ5res.
-lær6sv
-læ6ta
-1lø
-lø3de.
-lø4del
-lø5dem
-lø4er
-løk5kj
-4l1økn
-2løko
-lø4k5r
-l5ø6l
-lø9me
-lø2na
-løns5t
-løp6s5
-lør5n
-4l5ørr
-5løs.
-lø2sa
-lø5san
-lø5ser
-løs3k
-løs3s
-2løt
-lø9ta.
-lø3te.
-lø4teg
-løva9r
-6l7øv8d
-lø4ve.
-lø3ver
-lø5ves
-6løy.
-4løya
-2løyd
-4løye
-løy8ed
-løy5el
-2løyf
-løy4g
-løyg5e
-4løym
-6l5øys.
-løy5ter
-lå6gal
-lå6gre
-lågs4
-lå4gå
-2låi
-lå1k4
-lå6ke.
-lå9me
-lå2m5o
-lå2n
-6l5ånd
-lån2s1
-2låp
-l1åp9n
-2lår
-lå8ra.
-lå9rar
-lå5ras
-lå3rin
-lå1ru
-lå6sa.
-lå1sk
-lå6sko
-lå4s5l
-lå4ste
-lås7ten
-lås5ter
-lå5su
-lå3te.
-lå4teg
-lå4tek
-lå8ti.
-4lått
-lå4ve.
-1ma
-2maa
-3maa.
-ma3ar
-2mab
-ma5br
-ma3che
-mada5me
-ma4del
-ma3dra
-m6ad9s
-4maef
-4maek
-7maene
-2ma1f
-3mafia
-3mafr
-6mafrå
-ma8ga.
-ma4ged
-ma4gel
-ma4ges
-3magn
-ma2gr
-2mahe
-ma4is
-ma4ja
-2mak.
-ma5kab
-4makad
-ma4kes
-mak7ke
-4makl
-mak6le
-ma4kot
-mak2r
-ma3kre
-mak5ron
-mak4tal
-4makti
-mak4to
-makts4t
-ma1ku
-2ma1kv
-ma1la
-ma7leb
-ma6leng
-ma4let
-mali9e8n
-mal5l
-ma4lov
-mals4
-mal4t5ek
-mal3u
-mal3å
-4mamer
-ma3mo
-m4an.
-ma3nak
-m3anal
-6manam
-4manav
-man8ce
-man4dom
-man4don
-ma3ne
-m4anf
-man5g4a
-m6ange
-4mangr
-mania8
-2manl
-m3anle
-4manm
-5m4ann
-man4nem
-manns5l
-ma4no
-2mao
-4mapa
-2mapr
-4marb
-mar5d6
-7mare.
-6mareg
-ma3rei
-ma7rel
-5ma9ren
-ma5res
-3mar4i
-mari8e9ne
-ma3rin
-m4arka
-4markit
-mar4kv
-mar5m
-marmo9ra.
-mar7n
-ma1ro
-ma4ro6p
-mar3s4h
-mar7sl
-mar5te
-ma4ry.
-ma6rå
-4masel
-ma5set
-mash3
-ma4sia
-ma4sik
-ma4sis
-6masju
-mas4ki
-4masko
-4masp
-mas4see
-mas6set
-massø9
-7mast.
-ma5stem
-4masto
-4ma5str
-2masy
-m6at
-ma1ta
-ma5tad
-ma3te
-ma4te.
-ma6ted
-ma4tel
-7maten
-7mater.
-6matera
-7matet
-6m7atfe
-4matil
-7matil.
-ma1to
-ma1tr
-4matra
-ma4t5ras
-ma4t3re
-ma6t7rom
-mat3s2
-mat5ta
-2mau
-mau4k
-mau7l
-ma1un
-5maur
-mau7su
-2mav
-ma6ve.
-ma5ven
-m7avh
-m5avk
-ma4ze
-ma3zo
-2m1b
-m4bao
-mbar3d
-m2bea
-m4beb
-mbe9da
-m4bedø
-m2bef
-m2bek
-m4beli
-m2bem
-m4bena
-m4beo
-m4bereg
-m4bero
-mbet2
-mbi6ar
-m2bib
-m3b4l
-mboe2
-mbo4end
-mbo5er.
-mbo5ere
-mbo5id
-mbo5n
-m4bop
-mbo5re
-mbo9t
-mbu7ar.
-mbu4e
-mbue7re
-mbus5
-m1c
-m6co
-2m1d2
-m3de
-md7om
-1me
-2mea2
-me5al
-mea5m
-2meb
-2mec
-meck4
-4medat
-2medb
-5mede.
-me4ded
-med5ei
-me7den
-me7det
-4medf
-me3di
-4medik
-4medir
-2medm
-me6dok
-4medom
-2medr
-me6dret
-med1s4
-4medu
-me6dun
-me5d4us
-med5v
-7medve
-2medy
-4medå
-me7e
-2meef
-6meek
-2meel
-4mees
-4meev
-2mef
-m3eff
-6me2ga
-me7gal
-2megr
-2megu
-4meh
-mei2e
-meie5n
-m1eig
-me3ild
-me3ind
-mei5ni
-me7isk
-4meiso
-2mej
-4meki
-4mekj
-2mekk
-me2k1l
-me3kn
-4meko
-2me5k8r
-4meks
-mek5t
-6mekte
-m2el
-4mela
-5melane
-5melar
-me3le
-me4le.
-4meled
-4melei
-4melek
-6m5e6lem
-me4l5eng
-4melik
-4melis
-4melit
-4meliv
-mel5le
-4melok
-4melov
-mel4si
-melsk4
-mel5s4t
-mel7tr
-me1lu
-mel5v
-melvi6
-2mely
-2melæ
-4melø
-4me5l4å5
-2mem
-me6mo.
-4m5enga
-men5k
-menle6ge.
-m6enn
-men4ny
-me4nom
-me4nor
-men4si
-men3sm
-men5spl
-men5te
-men6tek
-men4tom
-men5tr
-me4nyt
-2me3o
-me6os
-2mep
-5mer.
-me6rab
-4merad
-me4ra5l
-me4r5ant
-mer5di
-4mered
-4mereg
-4merei
-4merek
-4merel
-me6rense
-me3res
-4meress
-mere6t
-m4eri
-4me5rib
-meri5ke
-5merin
-merle7g
-mer9n
-mer5os
-5mers
-mer5sk
-me3run
-mer5und
-4merus
-2mery
-me2r3ø
-2merå
-me4råk
-5mes.
-2me5sa
-4me5s4h
-2mesj
-2me1sk
-mes5ke
-2me1sl
-mes6le
-4me3so
-2mesp
-5mess
-7mest.
-4mesta
-5meste.
-mes4ti
-6me7sto
-mest3r
-me5stro
-6mestrø
-4mestrå
-4mestu
-4mesu
-2mesy
-2mesø
-4metab
-4me9tap
-me4tar
-me3te
-4meteg
-4metei
-4metek
-4metel
-4metep
-4metil
-2metj
-4meton
-me4t3ra
-me4tre
-met5ren
-met7rer
-met5res
-met5rik
-me4tru
-4metræ
-2metu
-4metv
-2mety
-2metø
-4metå
-2meu4
-7m4eu3s
-2mev
-meva8n
-2meø
-2meå
-2mé
-2m1f
-mfa9ra
-mfar8ta
-mfav5
-m2fek
-m6f3ess
-m4fi.
-m4fibr
-m2fit
-m5fru5s6
-m5funn8s5
-mfu6se.
-2m5g6
-m4ga.
-m4gi.
-mgå8va
-mgå8ve.
-2m1h
-mhea4
-m4hu.
-1mi
-mi1a
-5mi6al
-mia2n
-9miane
-7miar.
-2miav
-mi6c
-miche6l
-8m9idé
-2midi
-mid5j
-mid3s4
-mid4t
-4mi3ele
-mi3er.
-mie9s8
-2mi5f
-5migraf
-2mih
-2mii
-4mij
-mik6h
-4mikj
-2miko
-mik5ro.
-mik5ron
-mik5sa
-6miku
-mi4la.
-mile6t
-mil7eti
-mi4lev
-mi7li
-4milin
-mil6s5v
-4milæ
-2mim
-mi8ma.
-5mimo
-m7imp
-mi4na.
-mi5nar
-mi4ne.
-mi4n5ers
-4m3innh
-4m3inns
-min2s
-min3sp
-mins4t
-mi3nu
-m4inv
-mi4n5y
-mi7ov
-2mip
-4misa
-mi4san
-mi3se
-4misek
-4misel
-9misé
-misha9ge
-4mi7si
-mi2sk
-mis4ko
-mi3s4la
-mis9le
-7mism
-mis4s5k
-mis4s7p
-mista9k
-5mis7te
-mis4tra
-4mistu
-2misy
-4miså
-6mita
-mi3te
-4mitj
-4mito
-2mit6r
-mitt3s
-mi5ur
-2miv
-mi5vå
-m6ja.
-m6jan
-m5jar.
-m7jarn
-2mje
-m7je.
-m1ji
-m8jingan
-m8jingar
-mju7ke
-1mjø
-mjøs5t
-2m3k2
-m4ko.
-mkro5
-mku6le.
-mkå8pa
-4m3l
-m7la
-mla6ga
-m2lef
-mlei5er.
-m2lek
-m2lel
-m2lem
-m4lera
-mle6se.
-m4lesk
-m6le5s8v
-m4leta
-mle4ve.
-ml6i
-ml5ja
-mly6se.
-mlø6pe.
-mløy3
-2m1m4
-m6mai
-mma5kl
-mmal5
-mma8le.
-m4mam
-mmando5
-mman6dol
-m5mar
-mmar7in
-mmar7o
-mmatik7ka
-m4medø
-m2meg
-m2mei
-m2me3k2
-m4melu
-m6meni
-m4menu
-mmer5t
-mme4run
-m2me1s
-mmest6
-m5met.
-m4meta
-m4meti
-m4metra
-mme5t6re
-mme3u
-m3mé
-m4mia
-m7mian
-m2mib
-m4mid
-mmie6n
-m2mik
-mmi5sk
-mmi5so
-mmi3st
-mm5n
-m3mu
-mmø2
-mmå8la.
-2m1n
-m2nee
-mn7eid
-m2ne9l
-mne4ra
-m5nese
-m4nesk
-m4nesta
-mnes9tie
-m9net.
-m4nete
-m2nev
-m6nip
-mn7sk
-1mo
-3moa
-mo2ar
-4moba
-5mode
-mo3dem
-mo5di
-mo6di.
-2mody
-3moe
-mo4en.
-m1off
-mofo6bi.
-mo6gi
-5mogl
-mo5go
-m5ogs
-4moh
-2moka
-mo8ka.
-mo8ke
-mo1ki
-mo6la.
-mo3le
-mo4le.
-mo7le6s
-4molt
-mo3ly
-m5om.
-4momf
-2momr
-mom4s5ø
-mo5ne
-mo4nisa
-mo2no
-mon1s
-mon4ste
-mon5t6
-2mop
-5mo1ra
-mo4ra.
-mo4rar
-mo7rar.
-mor5d6e
-4mordl
-mor6d5r
-mo3re
-mores7
-m2ori
-mo4ri.
-mo6rid
-4m3o4rie
-mor4kl
-morla8ga
-mo5rok
-mo4rom
-mor4si
-mor4skj
-mor7sky
-mor4sp
-mo1rø
-mo9sen
-mo2s7k
-mos4o
-6mostab
-4motap
-mo4te.
-mo6te6g6e
-mo4tei
-mote7kl
-mo5ter.
-mo4tes
-mo5to
-4motr
-mot7re
-mot1s2
-6motsagd
-motsva5
-mot7t
-mour5
-3mo3va
-mo5w
-8m1p
-m4pana
-m4p5anta
-m4pee
-m4pelot
-m6pena
-m6pep
-mpera8te.
-mpe5res
-m6peress
-m4p5erfa
-mperi6e7n
-mpes2
-mpes6te
-mpe4sti
-m5pett
-m2pe5u
-mp3id
-m4pinje
-m8pla.
-m3p4lan
-mp5le.
-m6p5lin
-m6p5n
-m6p5ob
-mpoe4
-m4poeta
-m4pog
-m6pok
-m2pop
-mp3opp
-mp1p2
-mp3rad
-mp5ret
-mp3rop
-mpro8pa
-mp1s
-mp3sek
-mp5s6t
-mpun6ge.
-m9pur
-mp5ut.
-mp5ys
-mpø5
-m9på.
-m3q
-2m1r6
-mro8sa.
-mro6se.
-mru7te.
-mrø9de
-m9rår
-6ms
-m5sa.
-ms1ak
-ms5ant
-m1sc
-mse5lu
-m9s6ei
-m4sem
-m4s3eng
-ms5e4pl
-m4serv
-mse5s
-m5s6etn
-mse6t7jare
-mse8t9jas
-msi6e
-ms4ing
-ms3inn
-m4s5ja
-ms5kab
-mska9k
-ms6kin
-msk5ing
-ms3kor
-msk8u
-ms3lan
-ms6lega
-ms9lua
-ms3lue
-ms4ly
-m2sm
-m1s2n
-ms9ne
-ms5no
-ms3næ
-m1so
-m4soms
-ms3ori
-ms1ov
-ms3s2
-m4s3tal
-m8s7te.
-ms7tea
-ms2ti
-ms5tilb
-ms3tim
-m1sto
-m4s5top
-mst5ord
-m8strand
-m5strane
-mst5red
-ms5tref
-mst5ren
-ms5trik
-ms4tru
-ms3unn
-msu9ta
-msu7ten
-ms1v
-msva9ra
-msva5re
-ms3ynd
-msø4ke.
-m4s5ør
-ms1øy
-ms1å
-2m1t
-m3ta
-mt4b
-mtbe6
-m2tee
-m2teg
-mteks7
-m6te7kv
-m4tel
-m6testu
-mti9a
-m9tida
-mti5e
-m6tien.
-m6tif
-m2tik
-m6tini
-m4tiø
-mtiør6
-m5to
-mt4r
-mt6ve
-mt4vin
-mtå5
-1mu
-mu6a
-m1u2b
-mu2e
-mu3el
-mue7r
-mues1
-2mug
-mug5l
-mu4he
-mu2k
-8m9uka
-4m1uke
-mu5la
-mu4leg
-mule6s
-mull2
-mull6s7
-mul6tiv
-4muly
-7mum
-mu3mi
-mum2s
-mun2c
-munes6
-4mung
-mun6ge.
-mun3k
-munn3s
-mu6ra.
-mu4re.
-2murn
-murs4
-m2us
-mu4se.
-mu4ses4
-mu4sé
-mu2s3k
-muske6l5a
-must4
-mus5tan
-2mut
-3mu1ta
-mu8ta.
-mutsa8la
-mut7t6r
-2m1v
-mvak5t
-mva6la
-mvari6
-mveg5s4
-mvi7e6
-mvi6se.
-2mw
-1my
-my5a
-myg4ga
-my3ke
-myk4kes
-myk3l
-my8kr
-my2ra
-my9ran
-my9rar
-my1re
-my4re.
-4myrk
-m5yrke
-my4r5u
-mys3
-my6sa
-my4se.
-my4so
-my4te.
-mytt6s5
-5mæ
-mæ6la.
-1mø
-møb3l
-mø7des
-mø6e
-mø9ens
-m3økn
-2møko
-mø6na
-mø4ne.
-møne9s
-mø8nest
-mø2o
-3mørke
-mør4k5r
-mør5sm
-mør3ø
-mø5se
-7møt
-mø9tas
-mø4tere
-møt9t
-2møy
-møy9ar
-m5øys.
-1må
-2må.
-må5a
-6måenh
-må7g2
-må1k
-må4ka.
-må4ke.
-må4kes
-m6ål
-må5lar
-må4le.
-må6led
-måle3i
-målø6pe.
-må4ne5s6
-må9nese
-må8pa.
-må4pe.
-må7pl
-2mår
-måra6r
-må1re
-må1ro
-må1ru
-må1s4
-må6tak
-6måtf
-må5tr
-må3tø
-1na
-na6ans
-2nabo
-7na7bortr
-na6bot
-4naby
-na4ded
-na8dem
-nadi4
-n3adop
-nad2s1
-4nadv
-8naf
-n1aff
-nafo7r
-na3fr
-naf7t
-na8ga.
-na3ge
-4nagen
-nag3s4
-nagså5
-na7gø
-6nah
-4nair
-2nak
-n6akk
-nak7ka
-nak6ko
-5nakl
-na1kr
-n1aks
-nak8sa
-nak8se.
-8n1akt
-nak6ta.
-na7kv
-na9lag
-na6lare
-6nalarv
-na7leg
-na4l3ei
-na4lek
-nal5epo
-na4les
-na4l5ett
-na4lev
-nal5g
-nal6ge.
-na4lil
-nal6lag
-nal4løp
-nal3op
-nal5s2
-nal3t
-na3lur
-2naly
-na2l5ø
-4nalå
-na3lå5r
-5nam.
-na7mere
-na5mes
-na5mo9
-5nams
-2namø
-9nan.
-4nana
-n3anal
-n6ane
-nanfø8
-4n5angr
-nan5k
-nan6ke.
-4n3anl
-6n5anle
-nan4ne
-na4n5o
-n4n5ans
-nan4sin
-nan4skj
-nan4s5t
-4nany
-na7o
-na5pe
-nape4s
-nap3s4
-n4ar.
-na4rap
-2narb
-nar5dr
-4narea
-nar7ei
-4na5rek
-nari4e5n
-7nariksk
-4narkiv
-6n5armé
-6n5arme
-nar8ma.
-nar5s
-nar8ste
-2nart
-nar6ta.
-nar5ti
-nar7v
-nar5ø
-nasa3r
-na4sas
-nas7h
-8nasik
-na4ski
-na2s5t4
-nasta5
-8nasu
-na1ta
-nate8k
-na7tem
-4natl
-4natom
-natori5e6
-nat8ra
-nat3sp
-nat6tak
-nat6tea
-naty5
-2nauk
-naus6p
-na6va.
-4navd
-6navf
-2navg
-2n3avh
-na1vi
-4n5avk
-4navl
-nav4les
-3navn
-6navo
-4navr
-n1avs
-4navt
-4n1b2
-n5ba2
-nba3d
-nba9ser
-nben4s
-nbo5et
-n6buf
-n6butr
-nbyr5
-nbø9le
-nbø6n
-n1c
-n5ca
-ncel5
-n3che
-nch3ei
-n6cot
-n2cy1
-6nd
-n7daa.
-n6dabi
-n4dad
-nda5f
-n7dag4
-ndags5
-n4daks
-n3dal
-n4dalf
-n4d5all
-ndals3
-n4dark
-n6d3art
-n8dask
-nda5tal
-nd5d4
-n3de.
-nde5a
-n2deb
-n2ded
-n5defi
-nd1ei
-nd4ein
-nd6ek
-n4dekl
-n4deko
-n5d4e5l
-nde4le.
-n4delik
-ndel4sk
-ndel4st
-n2dem
-n5dem.
-nde5mo
-n5den.
-n6dener
-n5dens
-n2de5o2
-n2dep
-n4derab
-n4deras
-n4derei
-n4derim
-nd6erk
-nderla6ga
-n4desi
-n4dest
-n4desu
-n1dé
-ndi4en
-n4d3int
-ndi6sk
-nditori5
-nditorie6
-ndit4t5a
-nd3jer
-nd1ju
-nd5k
-nd4lem
-nd4lese
-nd4lest
-nd4lev
-ndo9a
-n6dob
-n6d5okk
-nd4om4s3
-n2doo
-nd1op
-n2dor
-nd3org
-nd5orm
-n6dote
-nd5rae
-n4d3ram
-nd3ran
-nd6rek
-ndre4ra
-nd5resen
-nd5rett
-nd1ri
-n1dro
-nd4sag
-nds3ak
-nd4s5amb
-nds5elv
-nds5ende
-nd4ser
-nd4sje
-nd4skj
-nds7kul
-ndsla6ga
-nds6lett
-nd7spu
-nd3s4te
-nds9teg
-nds5trek
-nd5stry
-ndta6ka.
-n6duf
-ndu3is
-n4dun
-nd3ung
-ndun6ge.
-n2dup
-ndu6si
-ndus7k
-nd7v
-n2dyg
-ndy1k
-n2dys
-ndy5sp
-ndø5l
-n2d1øy
-1ne
-2nea
-5neae
-nea4g
-ne7a6le
-ne5alp
-ne5als
-nea9m
-ne9a8r9an
-nea9ren
-ne1as
-6ne7av
-2neb
-3nebb
-4nebe
-ne4ble
-neck5
-2neda
-3nedal
-ned3d
-4nedeb
-4nedeg
-4nedel
-5nedg
-ne4di.
-nedi4s
-2nedo
-ned5over7
-ned1r
-ne6dre
-5neds
-ned3st
-6nedu
-4nedø
-ne5dår
-4neeg
-4neei
-2neek
-5ne4e4r5
-2nef
-n1eff
-n5eft
-2neg
-5negati
-ne3gla
-neg5lesp
-neg8r
-6negru
-6neh
-2nei
-n2eid
-nei8dan
-n5eig
-n2e1in
-n3eini
-5neir
-2nej
-2nek
-ne4ka.
-6nek2l
-ne3kn
-nek2r
-nek5rin
-n7ekser
-nek5t
-4nela
-nel3de
-4neled
-6nelegg
-7neleggj
-4nelei
-nelei5er
-4n3elem
-6nelê
-4nelid
-4neliga
-4nelis
-4nelit
-4neliv
-nel4lov
-nel7s
-2ne1lu
-4nely
-2nelæ
-2nelø
-nelø8pa
-4nelås
-2nema
-4n3emb
-4nemel
-4nemer
-6nemes
-2nemi
-nemie8
-6nemj
-nem6k
-5nemn
-nem5ne.
-nem7nel
-2nemo
-2nemu
-2nemy
-2nemø
-2nemå
-3nen
-4nena
-nen5at.
-6n5en6den
-6nendr
-nene4
-4nened
-4nenem
-ne3nes
-4nenesl
-4nenet
-nen5eta
-4nenev
-nen4ga.
-4n3enhe
-6nenhet
-4neni
-nen5se
-nent5ei
-6n3en5tr
-4nenu
-4neny
-4nenæ
-2neo
-5neo.
-ne5o4r
-7neos
-2nep
-ne5pe
-3n4er.
-4nerad
-6nerap
-3nerb
-4nerea
-4nered
-nere6de.
-4neref
-4nereg
-4nerek
-4nerent
-4nerep
-ne5res
-4neress
-4neresu
-4neret
-4nerev
-4nerfar
-4ner2g
-ner3ga
-ner3ge
-4ne3rib
-4nerik
-4nerit
-ne4ri9v
-5nerl
-nerla8ga
-n3erob
-6neroc
-ne7rof
-ne5rok
-4nerom
-ne5rot
-ner4ov
-n6ers.
-ner7se
-ner5s4i
-ners4p
-ners8ten
-4ne3rul
-ner5un
-2nery
-3neryr
-4nerør
-2nerå
-2nesa
-ne4sa.
-5nesar
-4nesc
-4nese
-6nesek
-nes6er
-5nesets
-nes5eva
-ne3si
-nes5ind
-4nesit
-2ne5sj
-ne5skam
-4ne5skar
-nesk4e
-4neski
-5neskins
-4neskj
-4ne5sko
-4neskr
-6nesku
-2nesl
-ne3sli
-ne7slø
-nes6mi
-6nesn
-ne7snø
-2neso
-3nesot
-2nesp
-nes6sam
-nes4stu
-5nest.
-4nestas
-nes9tas.
-nes9te.
-4nesto
-nes5tor
-4ne3str
-4nestu
-4nestø
-2nesu
-2ne1sv
-nes8va
-6nesy
-4nesæ
-5nesøy
-4ne5så
-neså5re
-3net.
-2neta
-4netaks
-neta6le.
-ne3te
-5nete.
-4ne3ti
-6netid
-2netj
-2ne5to
-6netom
-2net4r
-3nets
-net5s4p
-nett3a4
-net6tel
-2netu
-ne4tv
-4nety
-4netå
-netå5ker
-2neu
-neu1r
-ne5us
-ne6va.
-ne4ve.
-5nevik
-nevi8sa
-3nevn
-nev1r
-ne4y5t
-2neø
-4neå
-1né
-4néb
-4néd
-2néf
-6néh
-2nél
-4ném
-6néo
-2nép
-5nér
-4név
-4néå
-4n1f
-nfall4
-nfalls5
-nfan5t
-n6foa
-n4fob
-n4fole
-n4fom
-n4fora
-nfor9en.
-nfos4
-nfø5des
-nføy8ed
-6ng
-n8g8ad
-n4gaf
-n6gag
-ng1ak
-ng5and.
-n8gan8da
-ng3ank
-n4g5arm
-n4gart
-ng5art.
-n5garta
-ngar5u
-n2gat
-ng5ato
-nga4ve.
-ng7avi
-ngd4
-ng4ded
-ng4del
-ng4dep
-ng3dr
-n4geda
-n4gela
-n3gen
-n4gena
-n7gene
-n4g3eng
-n6geno
-n4genu
-n3ger
-n4geret
-nge5run
-n2ges
-nge3sl
-n4geta
-n2ge7v
-ngfø4
-ng5g2
-ng5id
-ngjen5g
-ng1l
-n5glem
-ng4lu
-ng7n
-ngo4d
-ng5odd
-n7goe
-n8g7o8m
-ng9ome
-ng5ond
-ng7o6pe
-n2gor
-ng5ord
-ng3ork
-ngos6p
-n2got
-ng3ra.
-n5grad.
-ng5rand
-ng7rea
-ng3reg
-ng3ren
-n4grend
-n4grer
-ng5rest
-ng3ret
-ng3rev
-ng3rid
-ng3rin
-ng7ro.
-ng9roa
-ng7roe
-n5g6ros5
-ng3råd
-ng8sa.
-ngs5elv
-ng4sem
-ng4ses
-ng2sj
-ng2sk
-ng6skj
-ngs7leg
-ng5sløy
-ngsmå6la.
-ngs3ne
-ngs7tep
-ngst5rid
-ngstyr8ke.
-ngs9tør
-ng3und
-ngu5ru.
-ngvi4s
-ng5ye
-n1gø
-n2g1øy
-ngå8va
-ngå8ve.
-4n1h2
-nhat5
-nhet4s
-1ni
-ni1ak
-ni1a2n
-nian5dep
-ni2bl
-4niby
-4nibå
-4nicr
-n8ida
-ni4del
-ni7dele
-n5idé
-ni6do
-nid7r
-nids4
-nid5st
-4nieg
-ni1el
-7ni3e2n
-ni3er.
-nie5ri
-ni7ers
-ni5ert
-4n3i4fr
-ni5gla
-ni9glo
-2nih
-8nij
-ni3ke
-2nikj
-4ni5ko
-2nikr
-4nikv
-ni5l4i
-5nilu
-4nimar
-4nimas
-4nimo
-2nimp
-ni6n7al
-2n1ind
-4ninf
-ning3o
-nin5gr
-ning6s5
-ningse4
-nings5te
-2n1inj
-n1inn
-4ninnb
-4ninnh
-4ninns
-4ninnt
-2n1ins
-2n1int
-2ninv
-5nio.
-nion2
-nions3
-4niop
-7nios
-4ni5ov
-ni4pet
-ni9pet.
-ni9pets
-ni2pl
-nip3li
-nip5si
-4nir
-nir7kel
-4nisem
-ni5set
-4ni3skj
-nis4k3o
-ni9sol
-niso5ne
-niss4
-4nistas
-6nistat
-nis5tik
-4nistil
-ni3str
-4nisty
-4nistø
-6nisu
-6nisy
-n4it
-ni3ted
-6nitj
-ni4tog
-ni4tos
-nitt4r
-nitt4s3
-4nitu
-ni3ty
-nit5z
-nitær6e
-2niub
-ni4umf
-2niut
-4niva
-2nive
-niv5ei8
-4n5ivo
-niv3s2
-6niå
-4n1j
-n6jah
-njav9
-n2jed
-n5jede.
-n4jee
-n6jei
-n2je1s
-n3jes.
-n2jet
-n3jet.
-njet6r
-n5jett
-2nk
-n1ka
-n2kak
-nk3aks
-nkal5l
-n2kau
-n4kedo
-n4keer
-n4keh
-nk5eie
-nkel5s
-nkelt3
-n4k5enh
-n8keno
-n4k5erfa
-nker4st
-n4ke1s4
-n6ketø
-n1ki
-n4kid
-n4kie
-nk3ier
-nk5ind
-nk7inf
-nk3inn
-nk7int
-n5kj
-nk1k4
-n1kla
-n5k6lang
-n7k4lis
-nk3lok
-n1klu
-nk3ly
-n3klæ
-nk1lå
-n1knu
-n1kny
-n1ko
-n4kof
-nkofi8
-nk5oks
-nko5le
-nkol4la
-n6kot
-n6kov
-n1kr
-nk1s2
-nk4tak
-nk6tal
-nk4tin
-nkt3sk
-n1ku
-nku4le.
-nkuri9
-nkurie8
-n4ku6t
-nk9ute
-n1kv
-nk3ve
-n7kvit
-n6kvo
-n9ky
-n1kø
-n1kå
-nkå6pa
-4n1l
-nland9a
-nland6se
-n5le
-nlei7er.
-nle8ma.
-nli4en.
-n3lj
-nlu4e
-nly6de.
-nly6di
-nly4se.
-nlø6pa.
-n7lå
-4n3m
-nma4le.
-nmik3
-nmi8l
-nmini6
-nmo6se.
-nmusik7k
-nmå6la.
-4nn
-n2nad
-nn5ad.
-nn9aft
-nn5air
-n6n1ak
-n4nala
-nn5alg
-n4name
-nn4an
-nn5ana
-n9nane
-nna8ni
-n4n5ank
-n5nanl
-n6n7anta
-n9nar.
-n4nari
-n6nasi
-n4nask
-n2nat
-n2nav
-nn3avl
-nnbo9e
-nnbu9e
-nn5d2
-nndø4
-nndør3
-n5nea.
-n5neap
-n5nebar
-nnebe8r
-n5nebu
-n4nedi
-n2nee
-n6nef
-nn1ei
-n3neke
-n4nelo
-n3n4en
-nne6nat
-nne4n3o
-n9ner.
-n4nerel
-n4nero
-n7nes.
-n6nesj
-n5nes4la
-n4ne3st
-n5n6et.
-n4nesø
-n4nete
-n2nev
-n2ney
-nn3g2
-nnhø8re.
-n4nid
-nn3ide
-nni3e
-n2nim
-nn7inf
-n5nis
-nni4sj
-nni4s3t6
-nn7k2
-nnle6ge.
-nnlø6pe.
-n4no.
-nn5of
-nno2m1
-nn6oms
-nnomsy8na
-nn1op
-n2n1o4r
-nn7ord
-n4n3o4ve
-nn9r
-nnsa9ka
-nn4s5amb
-nns5and
-nns3ar
-nn5seg
-nnsei8g
-nn4s3em
-nn6s5enk
-nn4s3es
-nnse6te.
-nnsi7da
-nn4s3in
-nn4s5i6s
-nn6s5jak
-nns5kan
-nn5s4kli
-nns5op
-nns3or
-nnst6
-nns5tab
-nns5tal
-nns5telt
-nns4ten
-nns5tep
-nns7tin
-nns5top
-nn6s5tre
-nns5tro
-nns3tv
-nn4s5ul
-nns3va
-nn6s5vo
-nnsy8na
-nn2sø
-nns3øk
-nn3så5r
-nn7t4
-nnte6se.
-nnto9ga
-nnu1i
-nn6ung
-nn1ut
-nnvi4s
-nn1yn
-nny4t
-nn7øk
-nn1øv
-nn1å
-1no
-noa4g
-no1ak
-5noane
-no7ar.
-2nob
-nobe4l
-no4bl
-nob5le
-no3b4r
-no5co
-nodi4e5n
-3noe
-4noef
-4noei
-4noek
-4noent
-2nof
-n1off
-3no3ft
-n6ogra
-no5id
-no3in
-2nok
-no1ki
-nok8r
-nok6se.
-n3oksi
-no9le
-2nolj
-no6mid
-no6mik
-no4mil
-4nomj
-nom9m
-nom7s2
-5nomy
-non1s4
-non5t
-2noo
-2nop
-n1opp
-no1r4a
-no5ran
-no5rar
-no5ras
-nor4da
-nor6d5end
-4nordn
-nor4d5r
-nord3s4
-nor4dø
-no9ree
-no3rek
-no3ren
-no7ret
-nor5g
-3norge
-norges5
-n3o4rie
-7norit
-4nork
-nor6kla
-nor6kle
-n4orm
-normlø7se
-nor2s
-nors6ka.
-no3ræ
-no4sel
-no4ses
-nose8te.
-4nosp
-no3stj
-nostra4
-2nosy
-no4ta.
-no4te.
-note5i
-5notek
-no4tel
-no4tes
-not3s
-4noty
-4nou
-no1v
-no3ve
-4no5vi
-4n5ovn
-7nó
-6n3p2
-n5pe
-npo8ta
-n4påk
-n3q
-2n1r2
-n9ra
-nra8na
-nra8sa
-n3re
-n4reb
-nrei7e
-n6renem
-n6reo
-n6ri.
-nro6de.
-nro6t
-nry6
-nrå8da
-6ns
-n1sa.
-ns1a4d
-n5sag
-n5sakk
-n5sa4kr
-ns3aks
-nsak6se.
-6n5akti
-ns5akv
-n3sala
-ns3ald
-n6s5alp
-n5sane
-n4sanf
-n5sann
-n5sanse
-ns5ansi
-ns5ant
-n5saren.
-ns6arm
-n6sart
-n4sati
-n1sch
-n3sco
-nse9a8l
-n2sed
-ns5edd
-ns8ede
-n2see
-nse5ei
-nse6er
-n6sef
-n2seg
-ns5ege
-nsei6d
-ns5eie.
-ns9eig
-n4seks
-n4s3elv
-n2sem
-n5sen.
-n5sene.
-n4sener
-n9senes
-n4senet
-n4seni
-n7sens
-n3ser.
-n4sera
-nseri7e6
-n4sesa
-n4sesi
-n4se3sk
-nse3sl
-n4ses4p
-n4sest
-n6sesu
-n4se3s4v
-n4sete
-n9sets
-n2seu
-ns5fr
-n2sh
-ns3ha
-ns7he
-ns5hi
-nsi5de.
-nsi4ent
-nsi6er.
-nsin5d
-n3s4ing
-ns3inn
-n4sinte
-nsi8ra
-nsis7k
-ns3jak
-n4sjav
-n5sjef
-n6s5jord
-n4skan
-n6s5kauk
-ns7kele
-ns4kete
-n9skim
-ns5kir
-n5skis
-n6skja
-n6skjele
-ns5kjen
-n3skjæ
-ns5kor
-ns3kro
-nsku9et
-n4skug
-ns5kuli
-n5skum
-ns1kv
-n5s6ky.
-n5s4kye
-n5skyss
-n5slang
-n7slarar
-ns5las
-nsle6ge.
-ns6leri
-ns5lid
-n5slyn
-n1slå
-ns3mi
-n4s5mo
-n4smur
-nsmå6la.
-n5s4nar
-ns5nes
-nso4d
-ns1of
-n3s2ok
-n1sol
-n4sond
-nson6de.
-nso5ris
-ns1ov
-n3sovn
-nspa9ra
-ns5pels
-n5spet
-ns1pr
-n6spros
-n7spur
-ns5s6
-nsse4e
-nsså5
-ns4ta.
-n4stak
-ns5take
-n3stam
-nst5art
-nstar8ta.
-ns4tau
-n3s6ted
-ns4tel
-nste6ma.
-ns5tenk
-n6step
-n5s4tik
-ns5tild
-ns7tilf
-n4s5tils
-ns4tin
-ns4t3i4s
-ns1tj
-n5sto.
-n3stru
-ns7trøy
-n3stue
-n6stuk
-ns5tur
-nst3ut
-n1su
-ns1uk
-n4sung
-ns5vang
-nsva9ra
-n2s3ve
-ns9veg
-ns5verd
-ns5vern
-ns1vi
-ns4vind
-ns9vis
-n4svu
-n3s4væ
-nsy4d
-ns1yt
-n5søn
-ns1øv
-ns5øya
-n5såpe
-nså7pen
-ns7ås.
-6n1t
-n5tab
-n4tagr
-nta4lan
-ntall4
-nta5na.
-n4t5and
-nt3anl
-nt4anv
-nt3app
-n7tart
-n6t5arvi
-nt6as
-nta5sia
-nt4at
-nt3avi
-nt5avr
-nt7avs
-n2tea
-n5teat
-n2tee
-n4tef
-n4tege
-n4tegi
-n7tegn
-n2tei
-nt5eini
-nte5ins
-n5teis
-n4teka
-n7tekn
-n4tekse
-n9teleg
-n5telig
-n5tell
-n4tels
-n9telt
-nte4ma.
-nt3emb
-nte4mis
-n5ten.
-n4te7na
-n5tene.
-n4t3enh
-n5tens
-n2teo
-n5teori
-n5tepp
-nt4er
-n5ter.
-n7terek
-n6terest
-nte6risk
-nteriø7ra.
-n5ters
-n7tes.
-n4tesel
-n4teta
-n4tete
-nt4e3u
-nt5e4va
-nt9g
-nti1a
-n4tiat
-n4tid
-n5tiem
-n4tig
-n4tikap
-n5tiki
-n4tikl
-nti5kli
-n5tile
-nti3lo
-n9time.
-n7times
-n4t3ind
-nti6net
-n6tini
-n2tio
-n2tip
-n4tisa
-n4ti5sti
-nt5l
-nt5n
-nto3a
-n2tob
-nt5omf
-nt5omn
-nt3oms
-n2t1op
-n5tor.
-n5to5re
-n6torg
-n2tou
-nt1ov
-nt6ran
-n4trep
-n5trer
-nt5resi
-ntres9kjare
-n4t3rin
-ntrol6li
-n6trom
-n6trul
-ntrøy4
-nt5skj
-nt5s6la
-nts2t
-nt3t
-n6t7ub
-ntu9e
-ntu4l
-n2t1u2n
-n4t5uro
-n2t1ut
-ntva8la
-nty6e
-ntyr3s
-nt7år.
-1nu
-4nu.
-nu3an
-nu4av
-nuft4
-nufts5
-2nug
-nug6la
-4nu4h
-nuit8e
-nuk5
-nul9t8
-4nulu
-6nuly
-nu9me
-2n1un
-nun4ge.
-nuo2
-6nup
-nu3pl
-nu4re
-nu5sa.
-nu5sen
-nu7ser
-nus4k5l
-nus7l
-nuss4
-nu6st
-nus3ta
-2nut
-nu7ta
-nu3te.
-nute6r
-nut5eri
-n7utl
-nu6ume
-6n1v
-nva6la
-nvand5
-nverle9
-nves1
-n5vi
-nvi4et
-nvi4ka.
-nvi5ke
-n3vu
-nvæ8ra
-n3w
-1ny
-ny5ar.
-ny9ast
-2nyd
-ny4de.
-4nyef
-4nyg
-ny5ge
-ny3ke
-ny3k4le
-4nyko
-ny1lo
-2nyn
-nyn8da.
-nyn4de.
-4nyo
-4nyp
-ny8pa
-ny6ra.
-ny4re.
-ny7rev
-ny4ru
-ny1s
-ny5se
-ny9s6k
-nyst4
-nystu4
-ny3te
-ny3tr
-2nyv
-ny8va.
-ny8ve.
-4nyø
-n1z
-1næ1
-næ8ra.
-nær9and
-næ8rast.
-1nø
-nø2da
-4nødd
-nødde5
-nød5sto
-nø9dun
-2nøe
-4nøf
-nø1fl
-nø1fr
-nø7gr
-4nøks
-nø4le.
-nø9mo
-nø5mu
-nø3p4
-nø7ra
-nø6red
-nø1ry
-nø3se
-nø1sk
-nøs4l
-nø7te
-nø7tr
-nøtt6r
-nøv4d
-nø3ver
-nøy1
-2n1øy.
-nøy8a9n
-n7øyh
-4nøys
-n3øys.
-nå6as
-1nåd
-nå5ded
-nå8en
-nå6et
-nå8j
-n1å2k4
-1nål
-nå2la
-nå5lev
-nå8ma
-nån6de.
-n1å4p
-nåp8na
-n1å6r
-nå2s
-nå5sa
-nåse4
-2oa
-oa5c
-o1af
-oa4k
-oak6kana
-oak4ku
-o1all
-o3alt
-o1a2m
-o3a6n
-o9and
-o1a6p
-oar6d7e
-oar4d5in
-oa4r5e4g
-oa4r5enh
-oa6ré
-oa4r5i
-oar5m
-oa9té
-o1au
-o1a4v
-2o3ba
-obb4l
-ob4bo
-ob4b5r
-ob4b3u
-ob4e
-o4bea
-ober5et
-ober4s
-obers5ta
-obers5te
-o3bes
-2o3bi
-obi5e6
-1ob1j
-o1b2l
-ob5la.
-ob3le.
-ob3len
-o2b5li
-3oblig
-ob4lo
-o1b4o
-obo9a
-2obr
-ob5rar
-ob1re
-ob1ri
-3obser
-ob5st
-2obu
-2oby
-obyl5
-o5bø
-o3bå
-4oc
-ock5ers
-o5cy
-2o1d
-o6dab
-oda4f
-od7att
-odd5ei
-od4del
-od4dest
-od9do
-od4e
-o2deb
-o6d5ei
-o4deko
-o5deku
-o2dep
-oderle7
-o2des
-o5det.
-o5dets
-odie4n
-o4d3igl
-o4dj
-odko5
-od3oml
-od3ov
-o2d5re
-o4d3rø
-od3sk
-ods4ka
-od3s4po
-od5s4tol
-ods8t
-odu7s
-o4dy.
-o4dyb
-od5øk
-o5døs
-od5øy
-o2d1å4
-6o1e
-oe6f
-o4ein
-oek6s
-oe2l
-oe4mu
-oe2n
-oen5a
-o7ene
-oeng5d
-oeng7r
-oeng3s
-oeng3u
-o5ens4
-o7ens.
-oen5t
-o3e4re
-o6erer
-oer8ma
-o3ersk
-o2es
-oe6sip
-oe6sit
-oes8ka
-oes8ke.
-o4etan
-oet2h
-oe5ti
-oev6ne.
-2ofa
-o2fa.
-ofag6a
-o4fara
-ofa4se
-o2fav
-o2feb
-o4fei
-o4fera
-o4fe3st
-o1fé
-off9and
-of4fek
-of5fes
-of6fia
-off5id
-of6fr
-of2fu
-of6fy
-2ofi
-o4fip
-o1fl
-of5le
-2ofo
-o6fra.
-of9ras
-of1re
-6o5fri
-of8sa
-of8se.
-6oft
-of4tel
-oft2s3
-2ofy
-2og
-o2ga.
-og7ank
-o4gare
-o2g7av
-o2ge.
-o4ged
-og1ei
-oge7na.
-o3get
-og4gera
-og4g5j
-ogg3s4
-og6g7u
-ogi3a4
-ogie2
-o4giev
-o2gif
-o6gig
-o4giko
-o2gil
-o2gim
-o2gin
-o3ging
-o2gi1o
-o6gista
-o6gi7str
-o2giv
-og5jer
-og7la
-ogly7
-og4ned
-5o4g5ni
-og6nel
-o5g6nos
-o2go.
-og6ra
-og4re.
-o4g3reg
-o4g3rei
-og4rer
-og7rett
-o4g3ri
-og3ryd
-o4g5rø
-og5rå
-ogs6an
-og3s2e
-og1sk
-ogs4kj
-og5sl
-ogs4le
-og1s4p
-og5ste
-og3sti
-og4s5tj
-ogs4to
-ogs4tr
-ogs5t6ra
-og5stre
-og5sy
-5og5s6y4v3
-ogt6r
-5o4g5åt
-og1un
-og5ø
-og7ås
-2o1h6
-ohe5te
-ohm9a
-o4ho.
-ohø4
-oia4
-o1i2d9i
-o1idr
-oid5t
-oie4n
-oi5er
-oi6es
-oi5k
-oi4la
-o1im
-o3in.
-o1ing
-oi2n1o4
-o4insp
-oi6r
-o1is
-o2is.
-o6isa
-o2ise
-o4isi
-4o1j
-o8je.
-o4jo.
-o1ka
-ok7aft
-ok1ak
-oka4n5i6
-ok2ar
-ok5ark
-o3kas
-ok1ef
-ok5els5
-ok5elv
-o5k6en
-o4kesk
-o6kev
-o1kj
-ok4kand
-4okke
-ok6kera
-ok4ke5s
-ok3kje
-ok3ko.
-ok5kol
-ok4kun
-4okl
-ok8la.
-okla5m
-ok8le.
-o1klu
-ok7lut
-oklå5
-2okn
-okna8sa
-o3ko
-o8ko.
-ok8ol
-o4k3oms
-ok3omt
-oko5pe
-ok5opp
-ok3orm
-oko4s
-oko9se
-o6kov
-o1kr
-ok5reo
-o4k5ru
-oks4al
-oks4e
-ok4sek
-okse5kr
-ok4sem
-ok7sen
-ok6serin
-ok4ses
-okse9te
-ok5s4i
-oksi7da
-okst2
-oks6ti
-oks6tr
-ok5ta
-3oktan
-ok3ti
-ok5to
-okto4r5i
-okt6r
-o1ku
-ok5u4k
-oku8le.
-oku6t
-ok7ute
-o5kva
-o3kvi
-ok5øy
-o3kå
-8ol.
-4o1la
-ola6ded
-ola8ga
-ol5anl
-ol3ant
-o9lar.
-o6larbe
-ola5t
-olber4
-olbo7e
-olbo7ge.
-ol4bol
-olbu7
-2old
-ol9dan
-ol5de.
-ol4dem
-ol4dest
-ol5det
-ol3do
-oldo7ve7
-ol5drev
-ol3dri
-old3s4kr
-2ole
-o5leaks
-o6leb
-o2led
-o2lef
-ol5eig
-ole5in
-o2lek
-o7leki
-o2lel
-olele6ge.
-o2lem
-o5lem.
-o5lems
-o7lene.
-o9lenes
-o4lenet
-o4leni
-o4leno
-o6lered
-o4leru
-o2les
-ole5sta
-ole5str
-o9let.
-o2lev
-o1lé
-ol4f5i
-ol4fj
-ol3g4e
-ol1g4l
-2oli
-o4liba
-oli9e6n
-oli7ert
-oli5ne
-3o6lj
-olke3s4
-ol4kese
-ol4kesk
-ol4kest
-ol2k3l
-ol9ko
-ol6ku
-ol5kv
-ol5la.
-oll3ak
-ol4lam
-ol7le.
-ol4led
-ol4lel
-ol7len
-ol4les
-ol6linj
-ol4log
-ol4lom
-ol5los
-ol4lov
-oll5over
-olls4t
-oll5sv
-ol2lu
-ol4løp
-ol6løs
-ol6løy
-ol2lå
-olme5s
-ol4mest
-ol4må
-ol9n
-2o1lo
-o4lo.
-o5loan
-o3loe
-o4lof
-olo3i
-ol5oks
-ol3oms
-ol3op
-o6l7os.
-o6l7o6se
-o6l5osf
-olo5ve
-ol4ped
-ol7so
-ols8t
-ol9str
-ol5sva
-ols5vik
-ol3ted
-ol5tep
-ol2tr
-ol6t7ra
-olt5re.
-olt5rer
-olt5ret
-o1lu
-olu5l
-o4l3ung
-olun8ge.
-o4l5ur
-ol5va
-ol1vo
-o1ly
-oly7d
-ol5ør
-o1lå
-2om.
-2oma
-om3ald
-o2ma2m
-om5ang
-oma4nif
-omann4
-oman5t
-om3ars
-omar7ø8
-om4as
-om9att
-om1av
-omb6
-om4bet
-om4bis
-om3bl
-5ombod
-1ombu
-2ome
-o2m1ek
-o5meka
-o7menes
-omer6s
-o6mese
-o5met
-ome4tak
-ome7tar
-om1eu
-3omfan
-3omgre
-8omh
-o2mia
-o2mib
-omi3e4
-o4miek
-o2mig
-o7mikk
-o7mine
-om7inn
-om3in5s
-o4mio
-o2mir
-o4misj
-o4mist
-o2miu
-om1j
-2omm
-om6mat
-om4med
-om4metr
-3ommø
-2omo
-o4mofo
-om1op
-omo1v
-omp2
-ompa3t
-1omr
-2omre
-2omro
-2omru
-6oms.
-oms3al
-om4sek
-3omset
-omsko9d
-omsku9la
-om4som
-oms3un
-oms4ø
-omt2
-3omtal
-om4tes
-om3ti
-om3tv
-o2m1u
-o3mus
-omvæ8re.
-6omy
-omyr8ke.
-o2møk
-omø4r
-om5øy6
-o5må
-2on
-on3abo
-o4nac
-o6nak
-o4n3ang
-o4nap
-on3app
-o6narb
-o4n3arg
-o4n3arv
-onat5r
-o2n1a4v
-on5b
-on4dar
-onder6e
-ond3re
-on4d5ri
-onds4i
-o4ne.
-on5eie
-o4nele
-o7nell
-o2nem
-o3ner
-o4neru
-onesi6
-o4nesk
-o4ne3s8t
-o4nete
-o2nev
-on7f
-on7ga.
-ong3d
-on5ge.
-on6ged
-onges4
-on5gi
-on5go.
-ong2r
-on8gro
-ong9ros
-ongs4j
-on2gu
-on4gy
-on4g5ø
-o9ni.
-o2n3i2d
-oni1e
-o2nil
-on5ild
-o2nim
-oni6mi
-on3inf
-o6n7inn
-o2ni1o
-o4ni5p
-o6niso
-on3j
-on1k
-on5k6a
-3onkel
-on5k6i
-on4kle
-on5ku
-onle6g
-on5nad
-on3ni
-on5ny
-o4no.
-o5nor.
-o4no4v
-on3ove
-on4sh
-ons1i
-onsi3s
-onsi4v
-ons1k4
-ons7ke
-ons1l
-onsla6ga
-onstitue9ra
-onstitue9re
-onst5rum
-ons5und
-ons1v
-on4sve
-ons1å
-ont6a
-on3te
-on4ted
-on5ten
-on5ti
-on4tok
-on5tor
-ont2r
-on7ul8
-on5ur
-onu4sk
-o4n5ø4
-on6øy.
-on7å6
-2oo
-ood1s
-o1off
-oo2k1
-oo5k8a
-ook5es
-ool7a
-oo4m5i
-oo6mo
-o1o2p
-oopa8
-oop9an
-oo4pe
-oop5en
-oop5et
-o6opi
-o1o4r
-oor6da
-oo5s
-oo6sp
-o1o4v
-2op.
-2opa
-o4pab
-o2pak
-opan9d
-o4pa3re
-o7paren
-o4pasj
-o4pau
-o3pea
-ope1i
-opel6lø
-2open
-o4pena
-o9pend
-o4penet
-o7pent
-o2per
-6o3per.
-3opera
-ope6rar
-o7pero
-o5pert
-2opet
-o4peta
-4oph
-o1pi
-o4piek
-oping9s
-o4pir
-2opl
-o1pla
-o4p5land
-op3li
-op9lu
-op4na.
-op4ne
-2o3po
-2opp.
-4oppa
-op4p5art
-op4pas
-4oppe
-1oppg
-op4pi.
-op6pia
-op4pis
-opp3li
-3opply
-op6poe
-op6pr
-opp5rop
-opp5und
-opp1å2
-2o1pr
-op6re
-op7ru
-op7rå
-op6sa.
-o8p8si
-op2t1r
-o4q
-4or.
-o6r7add
-or3adr
-o2rag
-or1ak
-2oral
-or5ald
-o4r5alg
-oral4st
-or6alt.
-o3r4am
-o4rana
-o3rane
-o4rang
-o4rans
-or3att
-o4rau
-ora3uk
-or1a4v
-4orb
-orbit5
-or7by
-4orc
-orda9ta
-or3dea
-6ordel
-ord7e6pl
-or7dik
-ordi4s
-or4d5ise
-ord3it
-1ordn
-ordre8gi.
-ordsa6me.
-ords6e
-ord3st
-ordy9ra
-8ore
-orear8a
-orear8e
-o5rebra
-o8redi
-or1ei
-or1el
-o4rela
-o6reld
-ore6na.
-ore4ned
-ore4net
-or3enk
-oren3s
-ore6o5g6
-o6rerf
-o4rero
-ore1s2
-o5resc
-o4reta
-or9et8n
-o6retv
-o2rev
-2orf
-orfa6re.
-orfi7ne
-orfø9re.
-1orga
-4orga.
-or3ge
-or5ger
-orge4s
-orgi6e5ne
-org4sk
-orha9g
-orha9le
-o1ri
-o3ria
-ori5b4
-ori4e5ne
-5orient
-o7riet
-o2rig
-ori7ka
-o6rim
-or3ind
-or3ink
-or3inn
-or3ins
-oriro8
-6oris
-oris4a
-6orit
-o4riti
-oriti6me.
-or5ka
-3orkes
-or5ko
-orko6se.
-ork7s2
-6orl
-orla7te
-or5le
-orm5ang
-or6map
-or5mel
-or4m3un
-ormæ9
-or4nar
-orned5
-orne6dr
-or5net
-or4nol
-orn3t
-4oro
-o3roa
-o3roe
-or3off
-o5rog
-oro5i
-o1ron
-or1op
-o4r1or
-oror9da
-o5rosa
-o5rot
-or3ove
-or5ovn
-orpe6s
-4orr
-2ors
-ors5alt
-or5sen
-or4serk
-orse9ta
-orse7te.
-or3si
-ors5kar
-orsk5ei4
-ors8k9l
-ors4ku
-or1s4l
-orsmå8la
-or1sn
-or3s2o
-orso9na
-orso9ne
-orso9v
-ors4pa
-ors4ten
-or1su
-orsva9re
-or3sy
-or9sø
-2ort
-or4t3ak
-orta8la.
-or4t5and
-orta9pe
-or4t5av
-orte5i6g
-or4tek
-or3tem
-or6t5erf
-or4t5erm
-or5tii
-or7til
-or5tis
-3ortod
-or6tok
-orto9ne
-orto4r
-ort5ori
-or4tou
-ort5res
-ort5råd
-ortå4
-or4t3år
-or1u
-oru8d
-or9ude
-oru4h
-o5rum
-oru4t5
-oruta4
-or4utf
-orva9ra
-or5veg
-orv3s
-4ory
-o7rya
-or1yn
-o9r4ære
-2orø
-or9ø8k
-orøk8t
-or5ør
-or3ø4v
-orøv8d
-or1øy
-or5ås
-2os
-o1sa
-o4sa5b
-o6sad
-o2saf
-o4saku
-osbi7
-osefi5
-o2seg
-o5selei
-o2sem
-os2en
-o6sena
-ose5sl
-ose5sm
-oses4sk
-oses6sp
-oses4st
-o4seu
-osfa9ta
-os2hi
-os7his
-osi6e7ne
-osi5ere
-osi5ert
-osk3ei
-oskei6e
-o4skil
-osk9lar
-osk5len
-o1sko
-osko5p
-o3skri
-os2l
-os3le
-oslo1
-os3lod
-os5lu
-os5lø
-os9ma
-os5me
-os3mo
-o2sn
-o3so
-os7ove
-os6pa.
-os6pe.
-os4pil
-os4por
-os4sek
-os3sem
-os5sens
-osseri7e6
-osse5v
-ossis5te
-os6ski
-oss3kj
-os4s5ko
-oss9l
-os6spa
-oss7tro
-os7sty
-os8sv
-ost5adr
-os5tal
-osta5le
-o8ste.
-os4teg
-ost5egg
-os4tek
-ost6el
-os5teo
-o4sti.
-o8stia
-o4stie
-o4stin
-os5tis
-ost1o
-os6tons
-ost5ran
-ost3re
-o3stro
-ost5rup
-ost7rå
-o5stø
-os1v
-os5øy
-os7år
-2ot
-o1ta
-o5tad
-ota4l5a
-ot5ald
-otal7ev
-ota4lov
-o9tane
-o9tar.
-ot3arg
-o8t9arm
-o5tas
-ote7d
-ot6ei
-ote5int
-otek5i
-ote6k7la
-otekla8ga
-ote4kle
-ot5elem
-ote5lev
-otel6lan
-otel6lek
-otel4li
-otel8lø
-o4tena
-o4t5ende
-oten8de.
-o2teo
-o4teram
-o4teret
-o6terev
-o4tero
-oter5s
-ote5r8u
-o4terå
-otes6ter
-ote5sté
-otet5a
-otet5o
-otet3s6
-otfø4
-oti7ert
-oti2k
-otika3
-ot7i6ko
-o1tj
-o6tja
-ot5jer
-ot6nero
-otno7te.
-ot6nå
-o1to
-o2to.
-o4to3a
-o5toa.
-o2tob
-oto6en.
-o6tof
-ot3off
-o6toga
-o6togram
-o4toi
-o2tol
-oto5ne
-oto4ral
-otor5d
-o2tot
-o2tou
-o1tr
-ot7red
-ot5rer
-ot5rev
-o6t7ri
-o6t5rom
-o6t5rø
-ots5el
-ot6sh
-otshusvæ8
-ot4s3ki
-ots6op
-otsopp6
-ots5pr
-ots5tab
-ot7ste
-ot6tank
-ot5tas
-ot5tegn
-ot6tenk
-ot5tese
-ot5tin
-ot5toa
-ott4s3k
-otts5po
-otts4ti
-ot7tug
-ot4typ
-o1tu
-o6t5ut
-o1ty
-oty8e
-ot1yt
-o1tø
-ot7å
-oub8
-oul5l
-oun6ge.
-ou4r
-ou7ri
-ou5ro
-ou9sa
-out8a
-ouve4
-o5vae
-o1vak
-ovanfø8
-ovan9o
-ov3anv
-o7var.
-o6varb
-ova9re
-ov5art
-ov7arv
-oved3
-o1vei
-o1vel
-ove4la
-4oven
-o4vend
-o5vende
-ove6nya
-ove2r
-over3a
-ove7ra.
-ove9ras
-overe6
-ove8r5es
-3o4verf
-3overg
-o5verks
-5overr
-5oversik
-overs4p
-over9v
-o1vet
-6ovh
-2o1vi
-oviso3
-2ovj
-6ovna
-ov4nes
-2ovni
-4ovo
-o5vo.
-o7vom
-ov1or
-o5vot
-ov1o2v
-ov5sal
-ov4sek
-ov4sen
-ov9ske
-ov4sle
-ovs1p
-ovs5te
-ov4sti
-ov7sun
-ovsy5k
-ovta6le.
-ovveg7i
-ow1
-owa8
-o7was
-owat2
-ow5h
-ox3
-oy9ar
-oys5l
-o1y2t
-o1za
-o3zy
-o1ø
-o1å
-ô6ra
-ô2re
-ôr5ei
-ô1ri
-ô4t
-ó9sa
-ó7t
-ó8v
-ò9re
-1pa
-4paa
-2pac
-pa8cen
-p5ad.
-pa3deb
-p4adg
-pads4
-2paj
-6pak.
-6paka
-4pake
-pak4kas
-pakke4s
-pakk7esl
-4pakti
-3pa1la
-pa3le
-pa7lim
-pal5in
-pal1j
-pal5lø
-5palm
-4palø
-2pam
-pa5me
-p3anal
-pa4nap
-pan9de
-pa5ne
-pang5s
-pan3ka
-9panne.
-pan5se
-pan5sl
-pant8r
-4panv
-pa4ny
-2papa
-pa8pa.
-pa3pe
-4papo
-pap4pr
-4papr
-pap3ri
-pa4ra.
-5parad
-2parb
-4parek
-4parena
-par5ess
-par5g
-2pari
-pa4ri.
-pa3ris
-4parki
-par6k7l
-par4kv
-par3m8
-pa1ro
-4parr
-par8ra.
-par9s4
-par6tid
-par4tig
-par4tin
-par5u
-par7v
-parvi6
-6parø
-4parå
-p6as
-pasa5
-pa9se
-pase6r5
-4pasp
-3pass
-pas5sab
-pa4s3t
-pas4tar
-pas5ti
-pas9v
-pa1t
-pa3te
-pa4tist
-pa6tre
-p8atta
-pat6tak
-2patu
-pau7k
-2pav
-pa4ve.
-3pa1vi
-2p1b6
-pba4ne.
-pbo6da
-pce6
-2p1d4
-pde4le.
-pdø2
-pdø9d
-1pe
-2pea
-peak3
-pe4a3re
-4peb
-pec3
-pe7d6a
-5pedas
-4pedd
-pe3de
-pedfø9
-pedi9e8
-pe6doa
-pe6don
-4pedr
-pe4dro
-4pedu
-4pedy6
-2pedø
-pe7då
-pee6
-pe3er
-2pef
-p5eft
-2peg
-p5egg
-peg8ge.
-pego4
-2peh
-pe4il
-pei4leg
-2pe1in
-pe6ism
-2pej
-2pek
-pe8ka.
-pek4l
-pek4tro
-pekt7ros
-8peku
-p6el
-4pela
-pe5l4aks
-5pelal
-pe5lar
-pel9d
-4peled
-pe4lef
-4pelei
-pe6lep
-4peler
-pe6lev
-6peliv
-6pelj
-pel4lo
-4pelov
-pel5s6e
-pel5s4i
-pel7st
-4pelu
-pe5lun
-2pely
-2pelø
-6pelå
-2pem
-p1emb
-pe4nan
-pe4n3ar
-pen3de
-6p5enden.
-4pener
-pe3net
-5peng8
-pen4gel
-pen7gl
-peni4n
-4peniv
-penly4
-pen7s8a
-pensa7k
-pensa8la
-pen5sk
-pen4s5l
-pen3s6m
-pen5s6o
-pens4t
-pen9sta
-pen7ste
-pen7tag
-pen5tr
-6peny
-2penå
-2peo
-pe7o6s
-2pep
-pep5ar.
-pep7p
-pera3a
-4pe4rab
-4perad
-pe4rai
-pe4ral
-4perap
-pera5t
-4perate
-4pered
-4perei
-4perek
-4peresp
-4perest
-4peresu
-4peret
-pe4rev
-3peri
-perie8ns
-4pe5rik
-peri3s4
-4perit
-per5k
-per6les
-per5mu
-per5n
-4pero
-pe3ros
-pero6se.
-per6regj
-per6rei
-5perro
-per4tro
-per4t5rå
-pervi6k
-2pery
-6perø
-4pe7rå
-2pe1s
-3pes.
-pe3se
-pe6se.
-pe7si
-pes8ka.
-p3eske
-pes4ke.
-6pesl
-pes4n
-5pess
-3pest.
-5peste.
-pes5til
-4petab
-peta6ka
-4petal
-4petas
-4petau
-pe3te
-5pete.
-4peted
-6petei
-6petek
-4petel
-4petem
-pe3ti
-4petid
-4petil
-pe4tim
-2petj
-2peto
-2pet4r
-pe4t5ru
-pet1s6
-4pett
-2petu
-4petø
-4petå
-pe2u
-2pev
-peva8ne.
-pe5vi
-p5evn
-pev6ne.
-4peø
-4peå
-3pér
-2p1f
-3p6fenn
-p3fo
-p5fr
-pfri4
-pfø5re
-2p1g2
-pgjer4
-2p1h
-phav2
-pha9va
-phavs5
-phe9te
-phe7va
-phe5ve
-phi5li
-7pi3ane
-7piar
-pi4as
-7piase
-4piav
-4pib
-pi6ca.
-2pid
-pie2n
-6piend
-pi3er.
-pi9ers
-2pif
-pi9fr
-pig5ge
-pig6g9u
-p7i6gj
-2pih
-6pii
-pi4keh
-pi6kel
-pi4ké
-8pikk
-pik3ko
-4pikl
-piku5
-pi5la
-pi6la.
-pi3lep
-pil4lag
-pillba6
-pil6led
-pil4leg
-pillega6
-pille6ra
-pil4le5s6
-pi1lo
-2pim
-pi4na.
-pi4ne.
-pi9ned
-pi4nel
-pine4v
-3ping
-pin6go
-ping3r
-ping5sk
-6pinns
-pin4sl
-pi2nø
-pio6n5an
-pion5s
-3pi2p
-pi4pi
-pip9la
-pi4rar
-pi4res
-pi4rut
-pisi9e
-pi4ski
-2piso
-piss4l
-pis4sp
-pis4st
-pis1t
-pis4t5r
-pis9t8ra.
-1pit
-pi9ta
-pita7la.
-pi5té
-2piti
-4pitj
-4pitr
-pit5t
-2piu
-2pi5v
-4piø
-4p5k4
-pka5v
-pka8va
-pl6
-8pl.
-2plad
-pla8de.
-p4lak
-p4lan.
-plan7de
-4plane.
-plan5g
-plan5s
-plap3
-4p1lar
-p2las
-pla4st
-p2lat
-platina5
-2ple.
-2pled
-4pleis
-p2lek
-p6le5n4u
-ple5n4a
-ple6r5u
-ple8se.
-4plev
-p2li
-4plit
-p3liv
-pli7va
-plo4gj
-p4lo8i
-p1lok
-4p5lov
-plu4e
-p4luk
-plun3
-plun6d7ri
-p1ly
-plæ5re
-plø6pa
-p1lå
-2p3m
-2p1n4
-p7ner
-pne6se.
-1po
-po9a
-pod8
-po6da.
-po4de.
-po6em
-2pof
-po6f7r
-pog6
-4poh
-po5id
-2poke
-po6lan
-po3le
-po4lek
-6polj
-pol5li
-po6lom
-pol6s4ka
-polst9ra
-po2lu
-2pom
-pom6p9u
-pom5s
-4pon.
-pon5d
-pon4gr
-pongs6
-2pon1s
-pon5sa
-pon4sv
-po2p1a
-po6pe.
-p5opn
-pop1s
-2por.
-po1ra
-2p5ord
-po1r4e
-po4ref
-po6reg
-po8ré
-2p1org
-2pori
-2pork
-por6s7v
-por4tor
-por4t5ro
-por4trå
-2porv
-po1ræ
-po1rø
-po4se.
-po4ses
-4posj
-po2st
-po4sta
-pos5tas
-po5stat
-pos3te
-4pos4v
-5pot.
-7pota
-potak9
-po3te
-po4te.
-potek5l
-po5t6ha
-3poti
-4potr
-4pou
-2po4v
-pove6
-pover6n
-pow4
-2pp
-p2pad
-p2pak
-pp3akt
-p2p3a4l
-p9pane
-pp5angr
-pp5ank
-p4p3anl
-p2pap
-p9par.
-pp5arr
-p7past
-p4p7at
-p4pee
-p2pe5i4
-p4pena
-p8p9ender
-p4pendr
-ppe9nes
-ppe5p8
-p4penø
-ppe5ra
-p7pere.
-p4perkl
-pp7e6sen
-pp9esn
-ppes8ti
-p4peta
-pp5e4tas
-p4pete
-pp5ett
-p2peu
-p1pi
-pp1id
-p2p1il
-pp5im
-pp3inf
-p4p5inn
-pp7ir
-ppir8re.
-p4pist
-pp1j
-pp3k
-pp1l
-pp5last
-pp3led
-pp5lei
-pp9lev
-pp5n
-pp1of
-p2pol4
-pp3old
-pp5om
-p2p1op
-pp3ork
-pp1ov
-pp5p
-pp1r
-pp5rei
-pp5rin
-pp4ris
-pp7riss
-pp9riv
-pp9ro.
-ppropri6
-pp7rot
-pp1s
-ppse6te.
-pp3ska
-ppska9k
-pps2p
-pp9spe
-pp3spl
-pps2t
-pp7sto
-pp7t2
-p2pu
-pp1uk
-pp5ut
-pp3ø4
-ppøs8
-p6på
-pr6
-4pr.
-4prad
-3praks
-pra7li
-2pran
-pran3s
-5prat.
-5prate
-pra5te.
-4pray
-5pref
-prei7er.
-4preii
-pr5elem
-1prem
-pren4s
-1pres
-6pres.
-pres6sak
-p6restas
-4prett
-p3rif
-pri5ke
-4pring
-5prino
-3pr6in6s5
-3pr6in7s6e
-3pr6in7s6i
-1pris
-pri6s5k
-pris3t
-2prit
-pri9ve
-1p2ro
-8pro.
-6p7roc
-3prof
-4prog.
-4proge
-4progl
-4p3roi
-p5rop.
-3pros
-7prose
-6pru
-prun7ge
-pru5ta
-pru5te
-6prør
-prørs5t
-prø5s4
-5prøv
-prø5vels
-2prøy
-4prå
-prå8da
-pråk3i
-prå4ko
-pråk5k6
-2ps
-p1sa.
-ps5a6n
-p1sc
-p3se.
-psei8ge
-p2sek
-p2s1el
-ps5e4ly
-p3sen.
-p5sens
-p7ser.
-p5sete
-p5sets
-p2sh
-p6sib
-ps5ins
-p7sis
-p3s4jo
-p4s3kil
-ps7kjen
-p2s1ko
-p7s6ko.
-p3skod
-p5s4koe
-p2sle
-p9s8lo.
-pslø8va
-pslø6ve.
-p3s4lå
-p2sm
-psmå8la.
-p2sn
-ps4no
-ps1o
-p3sod
-pspi9la
-ps5ple
-p3s4pre
-p4s5pro
-ps5pu
-ps3s2
-pst2
-ps7tal
-p4s5tem
-ps3tv
-psu4r
-p3s4us
-ps1v
-p2sva
-p2sve
-ps4ving
-p4svæ
-ps5w
-psy3ke
-3psyko
-p2s1ø
-p3s2øk
-psø4ke.
-psøy8
-psøy9ene
-ps1å
-2p1t
-pta8la.
-pta4le.
-pt7ark
-p3te
-pte6k
-pte4ma.
-pte7re
-p5ti
-pto7g
-p4tou
-ptus5t
-p4tut
-1pu
-5puc
-6pu6dy
-pu2k
-pu7la
-pu8le.
-pull6
-5pum
-pu4ma.
-punk4t5
-punk5t6e
-2punn
-2pur
-pu4re.
-pu8rea
-3puri
-3purk
-pur5u
-pur3v
-pu7sa
-pus4h
-pusl7u
-pu1ta
-pu4ta.
-pu5tas
-pu5ter
-pu5tev
-4putg
-2puts
-put6tr
-put4tu
-2putv
-6putø
-2p1v
-pver7
-pvi4se.
-py4dr
-py8o
-3pyra
-py1re
-py1ro
-6pys
-py6sa.
-py4se.
-pys6t
-4p5z
-1pæ
-pæ4re.
-pø1kj
-pør4ret
-pø8sa.
-pø9ta
-pø9te
-p1ø2v8
-5påb
-på4by.
-på1k2
-1pål
-på4la.
-på4le.
-p5ån
-på3pe
-på1pl
-p1åpn
-på1r
-1pås
-på7sko
-på5sm
-på3t2
-6påtå7
-1påv
-qa5
-qu2
-qu9ar.
-1que
-que7r
-4raam
-4raar
-4rabis
-ra1bo4
-4rabr
-2raby
-ra3cet
-ra3ch
-5raci
-ra3d2a
-4radf
-3radio3
-4radir
-4radj
-2radm
-2ra1dr
-r3adre
-rad2s3
-radvi4
-ra5ede
-rael4
-4raerk
-raf4fer
-ra4fiu
-ra2fj
-2rafo
-ra5fo.
-ra4fos
-2rafr
-ra5fre
-6raft
-ra4fu
-ra6fy
-ra7gea
-ra5gee
-2ragl
-2rah6
-7raid
-ra5int
-ra3isk
-6r5akad
-ra9kar
-ra7kel
-ra5k6ha
-r2akk
-rak4kel
-r6akr
-ra5kro
-2raks
-rak6sa
-rak3s4e
-rak6se.
-rakst6
-4rakti
-rakt3r
-r4a5ku
-4rakv
-ral5ans
-6ralbum
-5ralds
-4raled
-ra5leo
-ral3g
-4r5alge
-4r5algo
-rali5e6n
-ra4lin
-ral1j
-ral5le
-ral7m
-ralo6i
-ral3op
-ra5ly
-4ralø
-4ralå
-ra4mag
-ra4mas
-ram3b
-rambu9ens
-6ramed
-4ra4mer
-ram8et.
-4ramil
-ram1o
-ramperi8
-ram6p3u
-ramse8te.
-ramta8la.
-ramta6le.
-4ramu
-6ramy
-r4an.
-ra4naa
-6r3anal
-ra5nar
-ran9cs
-r4an9de.
-r5andel
-rand3r
-r4ane
-4ranfa
-ran5ge
-6rangi
-rang5st
-rania8
-ra6nin
-ran3kv
-2r5anl
-r6anli
-2r1anm
-r4ann
-ran6n5ett
-ran4n5in
-rann3s4
-rans7kar
-4ransv
-ran4tik
-ra5nu
-ran6ut
-4ranø
-2rao
-4rapa
-ra4pel
-4rapin
-ra4pir
-ra4pis
-ra6pit
-ra1pl
-4rapo
-ra4pos
-4rappa
-4r5appl
-3rappo
-2ra1pr
-4raps
-4rapu
-1r4ar.
-2rarb
-7rarbeh
-4rarea
-4rareg
-rar5e6l
-4ra3rep
-rar7eta
-r1arg
-6rargu
-8rarinna
-6rarinne
-rar8ka.
-4r1arm
-rar8ma.
-6rarn
-4rarr
-rar3re
-rar5s
-2r1ar5t
-rar6ta.
-ra3rø
-4rasa
-2rasc
-ra3sea
-4rasel
-ras3h
-ras7ja.
-raska8ra
-ras3ke
-ra4ski
-ra7s6ko
-ra6sl
-rass4l
-ras7st
-4rasti
-ra5s4til
-4rastj
-rast5re
-6rasty
-ras7v
-ra1ta
-ratak9
-r6ate
-ra4te.
-6ra5teg
-8r7a6teli
-4ratfe
-ra1to
-ra1t4r
-ra4t5ro
-ra4trø
-rat5tel
-ratte4s
-4ratub
-rat5ut
-6raty
-7raud
-raud3s
-6raug
-rau6ga
-rau6ge.
-4rau4k
-raus6s
-2rav
-6ravd
-rave5s4
-4ravg
-ra1vi
-r3a4vis
-4ravl
-rav8l9ut
-ravlø8pa
-ravlø8s
-rav6r
-4ravt
-ra5vy
-ra3vør
-4raw
-raz5z6
-2raø
-raøy4
-2r1b8
-rba3d
-rbe2d
-rbede4
-rbed5en
-rbed5et
-rbed9ra
-rbie8
-rbi9er
-r2big
-r2bik
-rbist6
-rbis5tr
-rbo8di.
-rbo4ni
-rbon7s
-rbo5re
-rbra5s
-rbrei6
-rbu5en
-r5bø
-r1c
-4rd
-r4dab
-r5dag
-r5dah
-r4d5ak
-rdal4
-r4dala
-rda4le.
-rdals5
-rda4mes
-rda8n9o
-r4dant
-rd5anta
-r4d3arm
-r4d3art
-rd5atl
-r4datm
-r4d3au
-rd3d
-r6dedi
-rde4en
-r3defi
-rd5e4ge
-rd1ei
-r9deka
-r4dekl
-r4deks
-r6delo
-r6demi
-r7dena
-r6d7eng
-r6d7enh
-rden4s3
-rdense4
-rdenta8le.
-r4deo
-r6depo
-r4derik
-r4d5erst
-rde6sm
-r6d7ett
-r8dé
-rdfes5
-rdi3an
-r4diana
-r4dians
-r6diau
-r4did
-rdi3e2
-r2dif
-rdi6gres
-rdig3s4
-r4dika
-r4dikl
-r4diku
-r2dil
-r6dimi
-r2dio
-rdi3ov
-r4dish
-r2dit
-r2diu
-rd5je
-r1dju
-rd7m
-rd3n
-rdnæ4
-r9dob
-r4d5od
-r4dol
-rdon8na.
-rd1op
-r6dor
-rd3ost
-rd1o4v
-rdover5
-r9drad
-r3drak
-rd5ran
-rd7rara
-rd3ras
-r3drei
-rd3ret
-r5drev.
-rd1ri
-rd3rot
-rd8ske
-rds4kv
-rds5tan
-rd3sto
-rdsto5g
-rds9tre
-rds9tu
-rdsva9r
-rd5t
-rdta8ka
-rd5tr
-rd7tø
-rd3und
-rd5ve
-rdvi8ka.
-r4dyg
-rdy5pe
-rdy3re
-r6d7yt
-r6d5æ
-r7d6ær
-r7d6æ5r6e
-rd1øs6
-rdø4ve.
-rd3år
-rd7å6s
-1re.
-2rean
-re7a6r7an
-rear5e
-4reav
-2reb
-3redak
-6redam
-re3def
-re5den
-re3des
-re3di
-3redig
-r1edl
-2redo
-2redr
-re4d5ri
-red5sku
-red4sl
-reds5la
-red7s6led
-3reduk
-6redy
-2redø
-2ree
-re4el.
-re3er
-8refa
-4reff
-4refi
-2refj
-6refos
-6refr
-4reft
-2refø
-4regar
-rega7ta
-re3ge
-4regeb
-re5gel
-4regen
-4reger
-4regg
-1regi
-re4gia
-re4gil
-reg1l
-2regr
-4regub
-4regud
-2regå
-2reh
-2reid
-2reie
-2r1eig
-rei8ga.
-rei8ge.
-4reik
-rei9l
-rei5na.
-rei7nas
-re5inde
-rei5ne.
-rei7nes
-rein6skj
-re4inva
-rei9ra
-rei5sa
-rei3si
-rei7ska
-reis6led
-re7ism
-rei7va
-rei5ve
-2rej
-6rek.
-re5ka.
-re5kav
-re7ken
-4rekj
-rekk6an
-rek4k5v
-5reklam
-rek4led
-re5k6lir
-re7ko
-4rekob
-4rekom
-4rekon
-6rekos
-4rekra
-3rekru
-r3eksa
-6reksp
-rek4ter
-4reku
-r8el.
-re9la
-4relag
-9relandsk.
-9relandske
-2r2ele
-rele8ge.
-6relek
-re7len
-7relene
-6relg
-r3elit
-4re3lj
-r2ell
-rel4lag
-rel6land
-rel5led
-rel4lev
-5r4elm
-rel5ses
-rel4sk
-4re1lu
-4relv
-2re5ly
-2relæ
-2relø
-4re7l6å
-relå7r
-2rem
-remann6
-r1emb
-remi6ene
-remi6l
-re7mis
-rem9ji
-remmed5
-rem8na
-rem5p4
-rem1s
-remti9da
-4remu
-8remy
-4remå
-2re3na
-ren4del
-4rendr
-8rened
-re5neg
-re7nei
-4renek
-r3e4nel
-4renest
-6renet
-6rengd
-reng5l
-4rengn
-reng5st
-re5ni
-2renk
-ren6kl
-r3enl
-ren8ne8sl
-rennes9la
-re5no
-ren5sa
-r3enss
-6r7entit
-4r3en5tr
-6rentu
-4renu
-5renz
-6renæ
-4renø
-re5og
-2reop
-re3o2r
-5reou
-8repen
-6r5e6pi
-1repu
-6repus
-1rer
-6rerad
-6re9rang
-4rerat
-re5re.
-4rered
-4reref
-4rereg
-4rerei
-re4rek
-4rerent
-4rerep
-4rerese
-4reresu
-4reret
-6rerfa
-4rerig
-4rerik
-4r3ernæ
-4rerol
-4rerom
-re3ros
-rero6se.
-re5rot
-3rers
-rers4p
-4rerute
-re6r7øy
-2rerå
-1res.
-2resa
-re2s3c
-re3se
-4resel
-re4sem
-4reset
-resi7ere
-4resin
-2resj
-2resk
-res5ke
-re6s7kje.
-res6kl
-res7kod
-re6sky
-6re1sl
-re4slu
-1resm
-re5smo
-re9spe
-4respi
-4respr
-2ress
-res4sal
-res4sek
-res4sit
-res4sj
-res6sk
-res6sort
-res4sp
-res4st
-res4sy
-res9tane
-5restau
-res6t5erv
-res4tes
-res3té
-4re3sti
-res4til
-re3str
-4restre
-7restv
-4re5sty
-4restå
-1resu
-6resuk
-4resun
-re3svi
-2resy
-2resø
-4retaki
-4retal
-re4tap
-4retea
-8retek.
-6reteke
-4retekn
-6retel
-6re5tem
-re5ten
-4re5ti
-4retj
-4retoa
-2re5t2r
-rets4i
-ret4st
-ret7ted
-ret5ter
-rett8o
-rett6set
-4re5tu
-2rety
-2retø
-5retøya.
-7retøyets
-4re7tå
-2reu
-reu6r
-4revak
-re5van
-reva5re.
-6reveg
-4revei
-4revel
-re6v7enh
-re5ver
-reve5s
-r3e4vig
-re4v5inn
-re7vom
-1revy
-re4v5åp
-3rew
-2reå
-2r1f
-rfa5re
-rfat5
-rfe8en.
-rfe8er
-rfe4et.
-rfei5li
-r4fik
-rflå3
-rft2
-rfu8se
-rfyr4
-r9fæ
-rfø8rarar
-2r1g
-r5ga.
-rga8le.
-rga8li
-rg5and
-r7gann
-r4g5anv
-rga3ri
-rg3art
-rga4ve.
-r6gedi
-r4gef
-r2gem
-rgent4
-r3geo
-r4gerei
-r4geret
-r4ge3ru
-r4gesj
-r4gesl
-r4gesta
-rgi1a
-rgie4n
-r2gik
-r2gil
-r2gim
-r2gio
-r2gir
-rg3i4ri
-rgi7sl
-r2giø
-rg2le
-rg5le.
-rglem5
-rg3len
-rg3ler
-r2gn
-r4gog
-r3gom
-r2got
-rg5rab
-rg3rea
-rg3rel
-rg5reps
-rg5rin
-r3gru
-rg5sc
-rgs6kor
-rg5s4le
-rg5s6till
-rg5sto
-rg9stu
-rg2sy
-rgu7d
-rg6ut
-rgå9as
-rgå6va
-rgå6ve.
-2r1h
-rhav2
-rhavs3
-rhjul8s
-rho3d
-r9hu
-rhø5re
-rhånd6s9
-rhå9ne
-ri1an
-4rianf
-4rianl
-6riansv
-ri1ar
-4riarb
-4riarr
-6riau
-2riav
-2rib
-ri2b3l
-ri8ca.
-ri4co.
-ri5da
-4ridale
-ri5der
-ri5di
-2r1idr
-rid3t
-4rieie
-4rieig
-4rieks
-ri1el
-6rield
-4rielem
-6rielim
-riel4la
-rie4n
-ri3end
-4rienh
-4rient
-rien5t4r
-ri1er
-rie5ra
-rie5ri
-4rietat
-ri5even
-2rifa
-riferi9e8
-rif4fi
-rifiserba8
-6rifj
-1rifl
-rif5la
-2rifo
-2rifu
-4rifø4
-ri4ga.
-rig4gr
-ri3gi
-4rigj
-4rigre
-rig2s
-rig6s7t
-2rih
-2rii
-2rij
-5rij.
-ri4kali
-ri5kan
-5rikd
-ri3kes
-ri7ki
-rik7ken
-rikk5j
-4rikl
-ri8k9la
-2ri7ko
-6rikon
-2ri1k2r
-rik4sk
-rik4s5u
-rikt6
-rikts3
-riku6m
-ri3k4v
-4rikå
-2rila
-6r5ilde
-6riled
-ri5lei
-ril6lest
-2ri5lo
-ril4sn
-2rilø
-4rima
-ri9mab
-ri9mar
-6rimes
-ri5met
-2rimi
-ri4mi.
-7rimis
-rim7l
-4rimm
-4rimo
-ri4mor
-4r1imp
-4rimu
-rim9ut
-4rimy
-rina5l
-ri5n6am
-4rinas
-4r5inc
-4rind
-r3indu
-ri4nee
-ri4nes
-2r1inf
-rin7gom
-ring3r
-ring4sa4
-rings5ak
-ring8spa
-2r3inj
-2rink
-4rinn
-rin9nes
-4rinor
-2rins
-rins6k
-rin6sm
-2rint
-rin4t5j
-rin4tr
-2rinv
-ri6nø
-2ri1of
-6ri3om
-2ri1op
-2rior
-rio5s4
-riot3r
-2rip
-4ripe
-ripo4s3
-4ri1r
-4risau
-4rised
-rise5i
-6risek
-4risel
-ri4seli
-4rish
-5risiko
-2risj
-ri6sju
-4riska
-ri4ski
-6risku
-4risky
-6ristad
-4ri5sted
-ris5tik
-4ristil
-ri4sto
-ris5tof
-ri5stun
-6ristø
-ri6stå
-4risv
-4risy
-4risø
-ri3te
-6riteo
-ri7ti
-riti9da
-4ritil
-4ritj
-ri5t6o
-ri5tr
-rit1s6
-ri6tun
-4rity
-2riun
-riu4r
-2riut
-4rivar
-ri6ved
-rive9ge
-ri5vei
-4riverk
-2rivi
-ri4vi4s
-riv5ise
-6rivo
-4riøk
-riø4r3a
-8riøya
-4riå
-r1j
-rj7ambi
-r4jere
-r2jes
-r4jeti
-r4jetr
-r4jetu
-rju6la
-2r1k
-rk3akt
-r6kanf
-r4kao
-r4kapr
-r6katr
-r3ke.
-r2keh
-rk5eik
-rkei8ka
-r6kek
-r4kelo
-r4ke3lu
-r3ken.
-r4kenav
-r3kene
-r4keni
-r5kens
-rke5ri
-r4keris
-r4kero
-r5kers
-r4ke3ru
-r4kerø
-rke4se
-rkeslø7se
-r9ket.
-rk4han
-r3ki
-rki3d
-rki3e
-rki4vi
-rkjek8
-rk5jor
-rk1k2
-r5k8led
-rk2li
-rk5lun
-rk9lut
-rklæ5re
-rk2lø
-rklå9ra
-r3knek
-r5knep
-rk7nes
-r3kno
-r2kob
-rko6b5r
-r6kofo
-r2koh
-r4kola
-r4koli
-r4kope
-r4kora
-r4koru
-r4kosel
-rko6sele
-r4kosj
-r6k7ras
-rk5rei
-r5k6rem
-rk4sar
-rk2s1i
-rk4ska
-rk1st
-rk6stal
-rk4sten
-rk4s5ti
-rk4stj
-rk4sto
-rk5ti
-rkti4s
-rk5to
-rku4le.
-r6k7u6t
-r4k5ve6d
-rk9vei
-r5kvel
-r4kver
-rk3ves
-rk5vik
-r4k5øl
-rk5øy.
-rk9øys
-rkå4k
-rk5åke
-rkå6pa
-rk5å4s
-2r1l
-rla4te.
-rle4a
-r2lef
-r3lep
-r4l5e4ri
-r6le7sl
-rle4st
-r4lesu
-r4leu
-r3l4i
-rli9ke
-rli8ta
-rli4te.
-r3lj
-rl6o
-rlog2
-rlo5ve
-rl4sk
-rlu4e
-r3ly
-rlys7k
-r6l5z
-rlø8pa.
-r5løy9
-2r1m
-rma6ge.
-rma5k4l
-r4m5alte
-rm3anl
-rm4ans
-r6manv
-r4mare
-r4marr
-rm5av
-rm3b
-r2me7g
-r2mek
-rme6lap
-rme5ne
-r4menet
-r6merev
-r4mese
-rme9tar
-r4mey
-r4m5ide
-rmi6ene
-rmini6
-rmin5ski
-r6m5inst
-rm5i4v
-rm1je
-rmlø8pa
-rmo4e
-r2mof
-rm1op
-rmo7st
-rm7p
-rm5s6ko
-rm1sl
-rms6n
-rm1st
-rms5til
-rm1su
-rmta8la
-rm3te
-rmu7an
-rmue4
-rmue5ne
-rmu8la.
-rmu6le.
-rm5øy.
-r9må.
-rmål4
-r6m5åp
-r9mår
-r6m7åta
-2rn
-r3na
-r4n1ak
-r4n3ald
-r6n5appar
-r4narb
-r4n3art
-rnat7r
-r4natv
-r6n9a6vis
-rn3avl
-rn3d
-rndø4
-rndør5
-r3ne.
-rne5a2
-r5neboe
-r2nec
-r4nef
-r2nel
-rnele6ge.
-r3nell
-r3nels
-r4n3eng
-r4nenh
-r4nerei
-r6neris
-rne3ro
-rne1s2
-r5nes.
-rne6se.
-r8nesi
-r4ne3sk
-r4nesm
-rne3so
-rn5e4tab
-r4nete
-r2nev
-rne5vr
-r2nés
-rn5g6
-r4ninn
-rn5k4
-rn3n
-r5no.
-r4noa
-rno5b
-r4nod
-r4noi
-r6nok
-r2nom
-rn5omn
-rn3oms
-r4n1op
-rn3ork
-r2nos
-r4n1o4v
-rn7se
-rn4s3in
-rn5ske
-rn3skr
-rn5sla
-rnsle7ge
-rn7s6mi
-rn6s3ovn
-rn5spon
-rn3s4pr
-rn1st
-rn4sti
-rn3te
-rn5ti
-rn7tr
-rntre4
-rnt4v
-rnu4
-rn5ug
-r6n3ut
-r7nøt
-r4n5øv
-rnå8le.
-rn3ås
-ro1ak
-roa4s
-ro5asi
-9roban
-9robar
-1robe
-ro4bed
-ro4bef
-5roben
-ro4bes
-5robølgj
-1roc
-r3odds
-7rodo
-ro5end
-ro7ens
-ro7fa
-ro4fel
-ro4fem
-roff5ri
-ro7ga.
-roga9ta
-ro7ge.
-rog5ret
-ro6gry
-rog1s4
-ro2gu
-1roi
-ro4kel
-ro5ki
-rok6kat
-rok6keri
-rok5kl
-rok4kom
-ro7k6l
-rok5n
-rok7s
-rok8se.
-rok5v
-roli7ga
-4rolj
-rol4lab
-rol4lap
-rol4leg
-rolle8ge.
-rolle8se.
-rol4lis
-rol6ly
-rolo9v
-2roly
-ro6mak
-ro4mal
-3ro5m8an
-ro4mate
-2rom7b
-4ro3me
-rome5d
-4romk
-4r3omn
-ro4mor
-2romr
-rom5sla
-r7omsy
-romsø3
-rom3t
-ro5ne.
-ro7nim
-6ronism
-6ronista
-8roniste
-6ronisti
-4ronn
-ron4na
-rono5s
-ron1s4
-ronta6le.
-ro4pad
-5ropet
-ro4pia
-ro8pla.
-2ropp
-ro9py
-ror3a
-ror6da.
-ro3re
-ro1ru
-ro4sat
-ro5sel
-ro3sen
-4rosl
-ros3la
-ro4sm
-ro6sov
-ro1s1p
-ros4st
-ros4sy
-ros7tas
-ro3sti
-ro3str
-rost7rø
-rot5ekte
-ro5tes
-rote7ster
-roti7ka
-rot5ord
-ro5tu
-6roty
-roun2
-round3
-ro5ut
-ro5va.
-ro9vare
-ro7vas
-ro5vek
-ro7ven
-rove5re
-rov5sm
-rovve6
-rò6te.
-2r1p
-r5pa
-r6parb
-r5pefo
-r4peno
-r6penø
-r5pesk
-r5pet
-rp6j
-rp2l
-rp3lad
-rprø5ve
-r3pu
-rpun7g
-r6p5ut.
-r6p5øy
-r2påk
-2r1r
-r8raa
-r2rag
-rra3r
-r4raro
-rr3d
-rr6e
-r4reb
-r7rebart.
-r2ref
-rre7int
-r4rekl
-r5relat
-r4reo
-r4repl
-r4re3ru
-rre5sk
-r4resm
-r4reso
-r4respe
-r3ress
-rre4st
-rres5ta
-rre7sti
-rre5str
-rret6s5
-rre5u
-r3ri
-rri6ka.
-r6rip
-rri5v
-rrmå8la
-rro6e
-r5rom
-rro8sa
-rro8se.
-rro8ta
-rr5s2
-r2r3un
-rr5v
-rrå5de
-4rs
-r1sa
-rs3ab
-r2s7ad
-r3sak
-rsa5ka
-r6sakt
-rsa6la.
-r8s9ald
-rs3all
-r5sam
-r4sarr
-rs3arv
-r1sc
-5s6ch6l
-r8sedi
-rse6g7
-r4seku
-rs4ela
-rs7eld
-r4seli
-r4s3elv
-rs5e4rik
-r3ses
-r4sesi
-r6sesu
-rse4te.
-rs6ett
-rsett8o
-r7sim6
-rsimp7
-rs1in
-r5s4ing
-r4sins
-rsis5t
-r7sja
-r4sjh
-rsj3or
-r3skad
-r6s7kaf
-rs4kam
-r3skap
-r4skar.
-r4skas
-r4ski
-r5skil
-rsk7inns
-r1skj
-rs5kjens
-r6skl
-rskla8g
-rsk5lar
-rs4k5le
-rs4k3læ
-r5sko.
-r5skoe
-rsk3op
-r4skor
-r3skot
-r1skr
-r4s3kra
-r5skriv
-r4s3kro
-r1sku
-r5sku.
-r5skue
-rsku7et
-rsk5und
-rsk5var
-rs5kys
-rsk5ø
-rs4lef
-r4slei
-rs4lek
-rs4les
-rs3lok
-r4slun
-rs4make
-rs4mo.
-rsmål4
-rs6nev
-r1so
-rso9a
-rs5oml
-rso6n5
-rso7n6al
-rso5n8e
-rso5n6i
-r2s1or
-rs5ord
-rso7ris
-rs1ov
-r1sp
-rs4pan
-rs6pat
-r5spel
-r4sper
-r7spes
-r5spi
-rs4por
-r5spred
-r4spå
-rs3s2
-r1s2t
-r4s5tabb
-rs5tank
-rs3tap
-r6st7b
-rs4ted
-rs4tem
-rs5tend
-rs5ter.
-rstev9na
-r3stil
-r4s5tilf
-r4s5tilh
-r4s5tils
-r4s5tilv
-r5stis
-r4stit
-r6st5k
-rst4r
-rs9tre.
-rs7tree
-r4strin
-r4s5tro
-r5strø
-rst7ut
-rstu9va
-rstyg7
-r3st6ø
-r7stå
-rs5ukl
-rsu9r
-rsu7sa
-rs5usi
-r1sv
-rs8vak
-rsva9ra
-rsvar4s5
-rs1ve
-r4s5vek
-rs5vit
-rsy4na
-rsy3t
-rsøks3
-rs9øye
-6r1t
-rt5ad
-r4t5af
-rta4ka.
-r4tana
-rt3anl
-rta9pa
-r4tarr
-rt3art
-rt3avs
-r4tec
-r4teda
-r3tede
-r2tee
-r4tego
-r4tegr
-r4teie
-r4te3in
-r4teka
-rte6ke.
-r4teki
-r4teku
-rt5e4lit
-rte6ma.
-r3temp
-rten4s5k
-rtentle8
-r2teo
-r7t6er
-r5terd
-r5teres
-r4teris
-r5terk
-r4terå
-r4tese
-r6tesk
-r6testi
-r4teta
-r4tete
-r4tev
-r4th
-rtian8d
-r4tians
-r4tiar
-rti8ar.
-rti5en
-rti6gra
-r4ti3kv
-r4tila
-r4tili
-r4tilo
-r4ti7na
-r2tio
-r2tip
-rti7sa
-r6tiska
-r4tiski
-rt6i9so
-r4tisp
-rtis3s
-r4ti5str
-r3titu
-r2tiv
-rtma6le.
-r5to.
-rt3off
-r9tofo
-r9tok.
-rt3omk
-r4t3opp
-rt6opp.
-rt3ord
-r6t7o6s
-rt1o4v
-rt2r
-rt8ra
-r9tre.
-rt6red
-rt3reg
-rt3rei
-r4t5reko
-rt5rel
-rt5rep
-r7trib
-r4t3ris
-r4t5ros
-rt3rut
-rts3ar
-rt4seg
-rts5eng
-rt2si
-rt4s5ja
-rt5ske
-rt3skj
-rt5s4no
-rt3s4pe
-rt4sti
-rt4s5tøy
-rts5unde
-rt3t
-rtu6en.
-r7tug
-rt3und
-r2t1ut
-rtu8ve.
-rty8da.
-rty8de.
-rtyr5s
-rty6ra
-rt5yt
-rtæ9ra
-rt5øl
-r6t5ås3
-ru3and
-6ruav
-ru6avh
-ru8bl
-ru5bo
-ru4di.
-rud4r
-ruds4l
-ru4ele
-rue4r
-rue3s4
-ruga8l
-ruga5t
-rui3d6
-4ruk
-ruk4su
-rukt3s
-ru9la
-4ruli
-6r7ulk
-rul8ke.
-r2ull
-r7ulv
-r4um
-rum3al
-rum4p9l
-run5del
-r5unders
-rund3r
-rund3s4
-run6ge.
-4ru2ni
-run5kr
-ru4nøy
-ru2r
-ru5ra
-ru8ran
-ru8rar
-ru9rer
-rur8ta
-r4us
-rus2h3
-6r7u6sik
-rus5j
-rus7lu
-ru1s4o
-rus5sel
-rus4st
-ru4str
-r4uta
-ru3tal
-ruta8la.
-r7utan.
-r4utbe
-4rutd
-rut8e
-ru4tel
-ru9tene.
-ru9ter
-2rutg
-r1utk
-rut9o
-6rutr
-rut4re
-ru6trø
-rutto5
-2rutv
-ru5va
-ru4ved
-ru4veg
-ru4vei
-ru4vel
-ru4vere
-ru4ves
-ruvi8
-ru6v7is
-2r1v
-rv4a
-rva7ka
-rva6la
-rve3de
-rve4den
-r4vedr
-r4vega
-r4vegi
-r4vegr
-r4veim
-rveis7e6
-rve5kl
-r4vela
-rvel9le
-r4v5eng
-r5ver.
-rve5re
-r2ves
-r2vev
-rvil9l
-rville9d
-rv2j
-r4vos
-r4vov
-r3vr
-rv2s1
-rv5ung
-rvå7r
-4r1w
-rx1
-ry1a4
-ry2dr
-ry7fe
-ry5fl
-ry5ke.
-2ry1kl
-ry7le
-ryl4l5i8s
-ry4nes
-ry5nes.
-ry4pa.
-2ryr
-ry8re
-r1yrk
-ryr4ke.
-ry9ro
-ry5rø
-rys6sal
-ry5ta
-ry4tek
-1rytm
-r3ytr
-r4z
-ræ7le
-8r3æ4re
-8r3æ4ren
-rær5in
-rær8t
-ræ8v
-2rø.
-rø8ar
-6røb
-rø4be.
-rø4dek
-rød1s
-4røep
-røf5l
-rø4ke.
-rø4kero
-røk3l
-4røkn
-røk5s4
-røk7t
-røk1v
-2røl
-rø2m
-røm1a
-røn5nes
-rønn5s4a
-rønn5sk
-røn5sko
-rø4pe.
-røp9l
-1rør
-rør5d6
-r6ørende.
-rø7ret
-5rørl
-rør4sp
-r8øs.
-rø3se
-rø5sla
-røs5v
-rø8ta
-røt9as
-rø1va
-rø5vede
-rø9vers
-rø1vi
-2r1øy.
-4røya
-røy9ar
-røy6ed
-røy6ene
-røy5es
-røy4et
-5røyk
-3røyr
-røy5re
-røy8senes
-6røy4s3k
-røy4st
-2rå.
-rå7a
-4råag
-4råb
-3rådet
-rådy9ra
-rå9ene
-2råf
-4rå5g4
-2råkj
-råk3re
-rå2k3u
-råk1v
-4rål
-råle7s8
-rå4let
-rå5let.
-rå5lu
-r5ånd
-rån6da
-2råp
-2r1år
-rårs5k
-rå5ru
-rå1s
-4råsb
-2råse
-rå5si
-2råsj
-rås4t
-6råta
-råta8ka.
-rå5tr
-rå5tu
-2saa
-5saa.
-sa4ba.
-s6abe
-s8abl
-sa5bok
-s3abon
-sa5by
-sa3ce
-sa4dag
-4sadam
-sa4dere
-4sadm
-sa4do
-2sadv
-sae5d
-3saen
-7saer
-1safe
-5saga
-sa4ga.
-sa4gas
-sa4gat
-6s5a6gi
-sag8na
-sa6go.
-sa4gog
-2s1a2gr
-sag3s4
-sa3ik
-sa5ir
-sa1is
-5sak.
-sa2ka
-3saka.
-4sakad
-sa5kai
-3sakb
-3sakd
-3s4a3ke
-5sakf
-1sakh
-sakh5e
-1saki
-sa4kj
-sak5kr
-5sakl
-5sakm
-4sako
-3sakp
-sa1k2r
-5s4aks.
-sak4s3i
-4s3aksj
-sak4sp
-5saksr
-5saksu
-2s1akt
-sak6ta.
-5s4akto
-4sa7kø
-1s4al.
-sa1la
-7sala.
-5sa5lat
-1sa3le
-sa9let
-1salg
-s4alge
-4s5algo
-salg6s5
-s6ali
-sal4mes
-sa5lo
-5sal2s3
-sa1lu
-3salv
-sal5ved
-2saly
-1s2am
-5sam.
-sa2ma
-sa5ma.
-sam4an7
-sa5mas
-sam5ei
-sa4mel
-sa4met
-5saml
-sam4lev
-5samm
-sammen5
-sa4my
-4s1a2na
-sa9na.
-sa7nar
-sa3nat
-san6da.
-san7d8al
-5s6ande.
-sand5r
-sand5s6lo
-sand5st
-san4d5ø
-1s2a5ne
-4s3a6nek
-5sang.
-3sange
-4s3angr
-s7anken
-2s1anl
-s5anm
-san5ne
-sa2no
-s5anor
-san5os
-san1s
-5s4ans.
-4sansa
-5s4ansen
-san7s6k
-4s5ans8l
-4sansv
-s8ant.
-san9te
-4santy
-4s1anv
-2s1ap
-sa2po
-1s2ar.
-1sara
-6sarab
-2sarb
-s4ard
-9s8are.
-4sareal
-4sareg
-sa5rev
-3sari
-sa4ri.
-sar6ka.
-4s3arki
-2s1arm
-sar5me
-sar8me.
-s1arr
-2s1art
-sar4ta.
-sa4ru
-4sarv
-1sas
-8sasju
-2s1a4sp
-4s1ass
-s6ast
-4sasty
-2sasu
-4sasy
-1sat
-sa1ta
-sa5ten
-sa3ti
-2s1atl
-4s3atmos
-sa1to
-4sa5t6r
-s5atsk
-5satt.
-4s3atta
-satte4s
-5sau.
-sau4d
-sau5di.
-5saue
-4saug
-sau6ga
-s3auge
-sau6ge.
-2s1auk
-5saum
-3saus
-4saut
-2s1av
-s2ava
-sa4ve.
-sav5n
-3savu
-8s9b4
-sba4ne.
-sbi6e
-sbo4da
-sbu6et
-s6bug
-sbul3
-sby8ta
-4sca
-1sce
-2scel
-s4cene
-s3cer
-6sch.
-8schl.
-6s7cl
-4sco.
-4scos
-s4cus
-6s7d4
-sdam9p
-sde6le.
-sdu8en.
-sdu8er
-sdø8v
-1se
-2se1a
-3sea.
-sea4g
-se3an5d
-se7ansa
-sea9re
-5se4au3sk
-2seb
-4sec
-4sedag
-sed5d
-se3de
-5sede.
-5sedl
-4sedo
-2sedr
-2sedu
-6sedvanle
-2sedø
-5see.
-see3d
-2seef
-2seeg
-se6e3i
-se3e4l
-se5en
-seer1
-5sees
-2seev
-2sef
-s1eff
-4s1eft
-6sega
-sega6l
-se2ge
-se6ges
-se3gev
-seg8ga.
-9segl.
-7seglet
-4se7g8r
-2seh
-2seid
-sei8dan
-sei9den
-sei8e9nes
-s5ei4et
-2seig
-sei6ga.
-sei5ge
-sei5k
-3se8il
-6seim
-2sein
-se3ind
-s3eini
-se6ink
-se3ins
-se3int
-sei5r
-3seis
-2sej
-5sej.
-2se5ka
-3seke
-4seki
-2sekj
-5sekk
-sek4kes
-2sek4l
-4se3kn
-2seko
-se2k1r
-4sekra
-4sekri
-4sekro
-4seksp
-sek4st
-sek6te.
-sekte9ra
-3sek5to
-4seky
-4sekå
-s2el
-2sela
-se6la.
-3selak
-5selane
-5selar
-sel5art
-s3e4las
-se6l5at
-sel1d
-se4le.
-4se5led
-6selega
-4selei
-4s3elem
-4seleng
-4seles
-4s3e4lev
-3selg
-4selik
-4selil
-4selis
-4s3e4lit
-sel6løp
-2selo
-7selol
-se3lom
-3sels
-sel4sin
-4s5elske
-sel9s8lag
-sel4spo
-sel5t6
-2selu
-se6l7u6r
-sel4v5ak
-sel4van
-selv3e4
-sel4ve.
-selvei4
-sel4ver
-sel8vin
-2sely
-2selæ
-2selø
-selø8pa.
-6selå
-2se3ma
-3semb
-7semd
-se5me
-se4mi.
-semini6
-2s1emn
-sem4na
-9semnd
-2semo
-sem5pe
-2semå
-s2en.
-6senau
-sen9d8a
-sen6dela
-6senden
-4sendr
-s2ene
-4sened
-se3neg
-4senem
-8senesa
-6senese
-sene8se.
-s5engas
-2s1enh
-se6nin
-s3enkj
-5sen3n
-s2ens
-4s5ensem
-sen6s5end
-sen4sj
-sen3so
-7s6ent
-sen5ter
-sen5trep
-4senum
-4seny
-2senæ
-6senø
-2seo2
-7seod
-se3or
-2sep
-se3pe
-seperso5
-3sept
-s2er.
-se3ra
-4seram
-5seran
-4serap
-5seras
-6serau
-ser5d
-s2e5r4e
-5sere.
-4serea
-4sered
-4seref
-4sereg
-4serei
-4serek
-4serel
-4serenn
-4serent
-4serep
-4sereso
-4seress
-4serest
-4seresu
-4seret
-4serev
-s1erf
-s2eri
-seri6e5ne
-4serik
-4serkje
-5serkr
-5sern
-ser7nev
-2se1ro
-se4rop
-se4ror
-se4ros
-3s4ert
-ser4tak
-ser6tat
-ser4tr
-se1ru
-4serul
-se4r3un
-ser4ved
-ser4vel
-2sery
-2serø
-2serå
-5ses.
-ses5ald
-5sesals
-ses5alt
-4sesc
-2sese
-se4sene
-ses5in
-se3sj
-4sesje
-4sesjuk
-ses5kal
-ses5kar
-ses5kv
-ses5lit
-se3sna
-ses3pr
-ses4s5in
-se1st
-5sest.
-5seste.
-4sesto
-ses5un
-ses1v
-2sesy
-4sesø
-ses3å
-3s2et.
-2se2t6a
-3seta.
-se5tae
-seta8ka
-se5tar
-6setea
-4seteg
-4setei
-4setek
-se7tel
-se4tera
-se5tero
-4setes
-2se3ti
-se8ti.
-s3e4tik
-s3e4tis
-4setje
-5setje.
-7setl
-5setn
-2seto
-2set6r
-s4ets
-s5etters
-2setu
-2setv
-2sety
-6setø
-3seum
-4seun
-seure9ne
-seu2t
-2sev
-seva6ne.
-s8e5var
-sev4d
-sevi4sa
-s1evn
-sev4ne.
-se3vr
-3sevåg
-2seyn
-2seø
-2seå
-1sé
-2séa
-6séb
-4sée
-4séf
-4séj
-4sék
-2sél
-4séo
-6sép
-9sér
-4sés
-2sév
-2s1f
-sfa4ne.
-sfe6et.
-sfes5
-sfisken8
-sflå3
-s5fo
-sfo8ra
-sforlø9
-sfra5s
-sfri5e6re
-sfyrs5
-3sfæ
-sfø9ren
-sfø5rer
-sfø5ri
-6s9g2
-sga4l
-sga8va
-sga4ve.
-sgen9s
-sge4st
-sgå4va
-sgå4ve.
-s1h
-4sh.
-sha2k
-s7hat
-s3hau
-6she
-shea4
-s5hei5
-s4hi.
-sh5isk
-4shj
-3short
-3show
-6shs
-2shu
-4s5hy
-s5hø
-shø8l
-shø6va
-shø6ve.
-s7hå
-1si
-4sia5m
-si7ans
-4siap
-4siav
-si2bl
-3si2da
-3si4de.
-3si3den
-si4deo
-s4ider
-si5der.
-si4dete
-2si2do
-4s1idr
-sid8ra
-4sidy
-4sieg
-si1el
-sie4n
-si5er.
-si6eren
-sie4s
-si3est
-6sife
-si3fl
-2sifo
-si4f3r
-2sifu
-4sifø
-3sig
-siger4s
-4sigi
-4s3iglo
-si5gr
-4sih
-3sik
-si3ka
-si5ke.
-sik2h7
-sik4ka
-sikk8artet
-sik4k5el
-sik4ko
-siko3
-si4kom
-si4kop
-si4kos
-si4kot
-sikt4s3
-s2il
-5sil.
-3sild
-sil4del
-sil4der
-sil4des
-sil5j
-sil2k
-sil4les
-2silø
-si6mel
-4simet
-2simp
-si3mu
-4sinde
-4s3indu
-si3nek
-2s1inf
-sing4s5a4
-7singu
-si4ni
-4sinj
-2sinn
-3s4inn.
-7s4inna
-s6inne.
-5sinnet
-s3innh
-s5innk
-s3innl
-4sinnt
-si5nob
-sinsk5e
-2s1int
-4sinv
-si6nø
-4si5ov
-si4pa.
-si8pe.
-si6re.
-si7ren
-si4ri.
-sir8kl
-s2is
-si5sel
-si4serf
-sis5e4v
-si6sin
-6sisju
-si4sk
-sis5ke
-si4sn
-si4s5te
-si4sti
-sis3to
-4sisy
-3s2it
-si5ta
-sit8ji
-si6t7ra
-si4t5re
-si4tri
-sit3s4
-sitsva9
-sit6term
-sit4tes
-si4umf
-4siut
-5siva
-si9van
-si8vi.
-si9våt
-1sj
-2sj.
-4sja9g
-4sjam
-s4jan
-4sjanl
-s7jarn
-2sjb
-6sjd
-sje4f3i
-sje4fla
-sjef5t
-sje3g
-sjek4t5o
-3sjel
-sje4lev
-4s3jent
-sje5s4
-sjet4ti
-2sjf
-2sjk
-2sjl
-2sjm
-2sjn
-2sjob
-5sjok
-4sjom
-9sjon
-sjons5
-2sjor
-2sjou
-2sjp
-2sjr
-2sjs
-2sjt
-s6j3t6sj
-sju1a
-6sjub
-6s7jug
-sju8la
-4sjun
-2sjus
-5s2jø
-sjø3k6
-sjø1p
-sjø9rø
-sjø1s2
-sjø3t8
-6sk.
-1ska
-2ska.
-4skab
-skabe3
-s2kad
-8skae
-4s6kag
-2skak
-5s4kal8a
-ska5lar
-2skam
-s4kaml
-4skana
-4skande
-4skane
-4skano
-6skant
-5s6kap.
-9s8kapa.
-4skapas
-5skapen.
-4skapp
-2sk2ar
-sk5arab
-sk7arbe
-5skard
-4s5kark
-6skars
-3s8karv
-2skas
-4skate
-8skay
-4skb
-6skd
-2ske
-s4keda
-s6kedo
-s2keh
-s6kei
-skei5er.
-s8k5e4lev
-s6kelik
-skel3t
-s4kelu
-s3ken.
-s4kena
-s6kenav
-s4keno
-s5kens
-5skept
-s5ker.
-s4kero
-s5kers
-s2ke1s
-ske3si
-skes4m
-ske5sn
-s4ketet
-s3ke4t3j
-s6kev
-s2key
-2skf
-2skh
-1ski
-5s6ki.
-7skia
-4skid
-5skie
-5skif
-5skik
-s6kill
-ski6net
-ski4nin
-5sk8inns5
-skino6
-5skiol
-5skip
-2skir
-s4kire
-6s5kirk
-sk5irs
-s6kis.
-7skiss
-4s5kist
-5s2kiv
-s6kje.
-5skjema
-6skjemas
-3skjer4m3
-3skjer5m4e
-7skjers
-3skjor
-4s5kjærl
-5skjøn
-skjø5res
-2sk1k4
-2s1k2l
-sk5lak
-s6k5lan
-sk9leg
-s6klei
-sk3lek
-sk5ling
-sk5lit
-s4k5luf
-2skm
-2skn
-s1knu
-4skoa
-7skodd
-4skof
-3s2kog
-1skol
-7s4kola
-3skole
-4skoll
-4skom
-s6koma
-6s1kon
-4skoo
-sk5ord
-s7kors
-4skort
-2skos
-s2kot
-3skott
-sk8ra
-5s4kral
-s4krat
-sk6re.
-4s3kref
-6skreg
-5skrek
-s3kret
-5skrevn
-3skrib
-3skrif
-4skrig
-3skrik
-3skrip
-4skrite
-3skriv
-s3kron
-4s3krop
-sk6rud
-skru3s6
-6skryss
-1s2krå
-2sk1s2
-2sk3t4
-5skud
-1s4kue
-sku4end
-sku4er
-skue5re
-1skuf
-5skulan
-5skular
-3skule
-6s5kulis
-4skull
-s4kulp
-4skult
-skum3s
-2skun
-s6k5underv
-4skup
-4skurv
-2skv
-sk5va.
-3skvad
-sk3vas
-s6kven
-sk3ver
-sk5vit
-3skvu
-1sky
-s6kya
-s6kye
-4skyr
-sky3re
-4skys
-3skyt
-6skæ
-6skø.
-6s5køa
-4skøe
-1skå
-skå5re
-6skåt
-sl4
-sla8da
-s3lade
-sla5ge
-sla8ge.
-sla5ke
-s5laks
-3slal
-4s3land
-slap5pe
-s5laran
-s5lare
-4s5last
-s1lat
-sla4te.
-4s1lau
-s5laus
-sla1v
-3slave
-sla4vin
-2sle.
-s8leda
-7slegare
-5s6legas
-s4legi
-s4legn
-s6legr
-6slei
-slei5er.
-s4leiv
-sle8ke.
-s5lekk
-s2lel
-s4leme
-4sle7ne
-s6lener
-s6len6t3
-2sler
-s6lesj
-s4leso
-s6lest
-s4leta
-s4leva
-4sley
-s5lia
-2slid
-sli4en.
-6slig
-sli5ke
-s4likk
-2slin
-slin6t5
-3slip
-5s4lit.
-3s4lite
-4s5liv
-slob5b
-slott4
-s6lott.
-7slottet
-1slu
-8slu7a
-2slu2e
-slu5es
-6sluf
-4slug
-sluk3s6
-slum4p5
-slum5p6e
-s3lund
-s5luns
-s6lup
-slu7sa
-s4lut
-s1ly
-sly8et.
-1s4lyn
-4s5lys
-sly8t
-slæ6rari
-2sløn
-4sløp
-slø4pa.
-s6lør
-2sløs
-slø8s5a
-3s4løsi
-slø5va
-slø5ve
-slø5vi
-5sløyd
-sløye7
-9s4lå.
-s4låe
-s1lån
-slå5ner
-1slåt
-s1m
-sma6d
-3smak.
-5s4maken
-sma9let
-4sman
-s4med.
-s4mede
-s4medk
-smeg5
-4smei
-smek7l
-s4mekt
-3s4mell
-5s4melt
-2s5men
-3s4mert
-6smes
-s6mesi
-s6mia
-s4mie
-smi4ene
-s4mig
-s6mil.
-smi7la
-s6mile
-smini6
-s2mit
-smo7a
-smo8de.
-s2mok
-3smug
-6s5mugg
-smul2
-s6mula
-s4muld
-s6mule
-1s2my4k
-6smøn
-1s2mør
-smør3s
-4smøt
-5små.
-små5r
-s8mått
-s1n
-8sna.
-s4nab
-7snak
-4s3nas
-6s3nat
-4snav
-4sne.
-4sneb
-4sned
-s6nee
-s4neg
-3snei
-snei5er
-sne4kri
-s7nekt
-s4nel
-2snem
-4sner
-6snes
-sne9sa
-snes9v
-4snet
-s6nif
-sni6gl
-s2nik
-snik5ko
-3s2nil
-6s3nin
-3s2nip
-snir4
-5s2nit
-2s3niv
-s8no.
-s6noe
-s5nord
-6s7not
-5s6nud
-s3num
-s4nur
-7snut
-6snyh
-2snæ
-snæ4re.
-5s6nø.
-snø5d4r
-5snøe
-1s2nør
-snø1s
-snø5vi
-so3al
-so8ar
-4soav
-2s1ob
-so2bl
-1sod
-so4da.
-5soe
-sofa1
-so4fag
-so4fas
-6s5off
-6s5ofre
-soft1
-so2ga
-so8gi
-so7gl
-sog6nem
-6soh
-5s4oi4
-so5id
-5sokn
-4soks
-sok4se.
-7sol.
-so4la.
-sol5av
-1sold
-so4le.
-solei5er
-so4lene
-1so7li
-2solj
-so2lo
-so8lo.
-sol3s2
-sol5t4
-so4lum
-so4lø
-3som.
-so6mend
-4s3omfa
-4s1omg
-5somh
-2s1omk
-4soml
-1som5m
-sommar5a
-3somme
-somme6r5e6
-2somr
-7somren
-5somrer
-4sområ
-s1oms
-som5sl
-s4omst
-som5sti
-4somsy
-1s2omt
-5somt.
-6somta
-3son
-so4na.
-son7da
-7s6one
-so8nea
-song3s4
-so4n3o
-sons4k
-son5st
-so2nu
-so4ny.
-2s1o2p
-so7pak
-so9par
-so7pet
-3sopp.
-5soppa
-3soppe
-sop4pi
-so3pr
-1sor.
-7sora
-so3ran
-5sorb
-4s1ord
-sor4da
-1so1re
-so4rek
-7sorga.
-sor4gl
-so2ri
-4s3orie
-7soris
-so5riu
-4sorke
-sor5n
-3sor5s
-3sort
-1sos
-4s5osc
-so8se.
-6sosf
-4sosj
-so4sl
-so5te
-so8te.
-so4tra
-sots4
-sot5te
-sot4ti
-4sou
-2sov
-so3va
-so4ve.
-so5ven
-sover5e
-sove3s4
-5sovet
-3sovj
-sp2
-4sp.
-spa5g6h
-7spak.
-7spaka
-5spake
-s2pal
-s3pall
-5spalt
-3s4pann
-3spari
-4spas
-5s6paser
-4spe.
-spe4a
-spe9dé
-s4pee
-1s2pei
-s2pel
-spe4leg
-spe4les
-5spelet
-3s4penn
-s4pent
-s5pep
-6speri
-s4perr
-s3pers
-3spesi
-s4pest
-s9pet.
-1spi
-4sping
-s2pio
-2spip
-spi7res
-spi7ri
-spi7ro
-5s6piss
-2s1pl
-sp9lar
-4sple
-s4plin
-3split
-sp6o
-2spoe
-spo6et
-2spol
-5s6pole
-s4pora
-s4pore
-sport6s5
-3sporv
-2s5pos
-4spot
-s3pote
-spo5v
-9sprag
-5spran
-6s3preg
-5sprei
-s4prek
-spre5ke
-s3prem
-5s4pren
-6s5pres
-5s4pret
-s5prio
-8sprinsi
-4s3pris
-6s5prob
-s3prod
-4sprof
-5sprog.
-5sproge
-5s6pross
-1spru
-s4pry
-3sprøy
-5språ
-2s3ps
-2spul
-5s2pø
-sp5øy
-9spå.
-5spåd
-6s3r
-s7ra
-s5re
-sre8ka
-sre8ke.
-sri8e9
-sri8ka
-sri8ma
-sri4ve.
-s5ro
-sro4e
-sro6pa
-sro6sa
-sro6se.
-sro2t
-sro9te
-srot5o
-s9rø
-srø1v
-srå4da.
-sråde9r
-srå6ders
-srå8ma
-4s1s
-s7sabel
-s7sabl
-s6sae
-s4saj
-ssa8ke.
-ssa6la.
-ss5all
-ssa4me.
-ss5amp
-s5sane
-s7s8ar.
-ssari8e9n
-s7s6arm
-s4sarr
-ssar8ve.
-ss6as
-ssau8sa
-ssau6se.
-s6seet
-s2seg
-sse5ge
-ss5egg
-ss4el
-sse5li
-ssel5s
-ss9elv.
-s2sem
-s5sen.
-sse8na.
-ss5enden
-s5sene
-s4seni
-ssen6ke.
-s4senu
-s6senå
-s5ser.
-s6serab
-s6serat
-sse7sk
-s4seski
-s4sest
-s7set.
-s9sets
-s2seu
-s4sey
-s2sh
-ssi4a
-ssi7e6rer
-s4siff
-s6silo
-s8s9ime
-s6s3ind
-ss5init
-ss3inj
-ss3inn
-s4s3ins
-s5sis4
-ssis5m
-ssi6v7end
-s5s6jarg
-ss4kape
-ss3kar
-sska8ra
-ss3kof
-s7skog
-s4skor
-ss6ky.
-ss4kye
-ss4kå
-ss5kål
-s7skåp
-s2sl
-ss1lo
-ss5ly
-s2sm
-ss6nar
-ss2no
-ss4nø
-ss5nøk
-s2sof
-s4sok6
-sso5lo
-s2som
-ss4oma
-sso3ra
-s4sorga
-ss3ove
-ss6pil
-ss4por
-ss9ri
-ss2t
-s5stad
-ss4ted
-ss3tek
-sstel6li
-ss5tep
-ss7tilp
-s7stip
-sst6r
-ss5tren
-ss4trå
-ss3tus
-ss3t4v
-s2sul
-s3sur
-ssva7ra
-ss1ve
-ssy6na
-ssy5r
-ss7øye
-s6så
-6st.
-2s1ta.
-stabs3
-3s6t2ad
-stad3a
-sta6d3o
-s5tafa
-3stafe
-sta5fl
-st3aft
-sta7ge
-4stah
-sta6ka.
-5stakk
-6stal.
-6sta4la
-sta5lak
-st5ald
-4stale
-sta4le.
-5s6tali
-5stalt
-s3tame
-3stamm
-sta5na.
-3s4tand
-6stande.
-st8ane
-s4tanf
-s4tang
-st3anl
-sta8n9o
-s6t5antr
-st3anv
-4stao
-2stap
-s7tapa
-s4tapp
-s8tapå
-s3tari
-1stas
-3s8tasj
-4s5tast
-1stat
-4stato
-sta5top
-sta3tu
-3stave
-2s4t5b
-st7c
-2std
-2s3te.
-2stea
-2steb
-3sted.
-s4teda
-5stedt
-s2tee
-2s4tef
-3s6teg.
-stega6l
-s4tege
-3stegh
-4s5tegn
-s4tegr
-4stegsp
-5stegspl
-ste4her
-s2t4ei
-stei5er
-4steikn
-ste6in6s5
-3s4tek.
-4s4teka
-s6teke
-ste4ket
-s4teki
-4s5tekn
-4steko
-v4s5tekst
-s4tekt
-s8te5kv
-4stela
-ste5le.
-s5teleg
-ste5lev
-s5telig
-5stemd
-3s4temm
-3stemn
-4stemø
-sten5a
-ste4nar
-5s4tenen
-s4tener
-4ste5nes
-3s6teng
-s4teni
-6stenk
-4steno
-stens5l
-4steo
-s5teol
-2step
-step7per
-st8er.
-s4teram
-s6terest
-s4terev
-s7t6erf
-s4terid
-ste7ris
-s6teri6v
-4s3term
-6sterr
-ste5run
-2stes
-s4tese
-ste7sle
-4stet
-s4teta
-ste7t6r
-s6tetø
-4steve
-4stevi
-6stevl
-6steå
-2s4t5f
-2stg
-stga6ve.
-stgå8va
-stgå8ve.
-2s6t5h
-st5he
-2s3tia
-4stib
-s5tibe
-s9tibl
-3stic
-6s5tid
-s6tidel
-sti5en
-s2tif
-3stift
-s4tigen
-7s6tigi
-st9i8gj
-3stign
-s5tij
-6s5tika
-4s5tike
-s4tikl
-3s6til.
-5s4tila
-sti4lag
-4stild
-3stile
-stile9ge
-s6tilk
-6stiln
-s4tilo
-6s5tils
-5s4tilt.
-5stilte
-4stime
-sti7mer
-6stimé
-3s6timu
-s6t3ind
-s6tini
-4s6tinn
-s6tinst
-s6tint
-1s2tip
-5stir
-2stis
-6s7tisk
-4stitt
-4stiå
-s4tja
-5stjel
-4s3tjen
-s6t5jent
-3stjer
-4stju
-2stk
-2stl
-2stm
-2st5n2
-s2to.
-1stof
-2s3tog
-4stoks
-3stoli
-4stolj
-4stom
-s9tomm
-st3oms
-4stoni
-st3ope
-st5oppl
-6s8t5ord
-sto4ret
-s6torm
-stor3o
-4stors
-st5o4s
-s1tot
-sto4t5r
-5s6tore.
-st5ou
-5stova
-2stp
-8str.
-st3ra.
-4strad
-s8traff
-st3ral
-st4ran
-stra8na.
-5strand
-4strane
-6strans
-4strap
-4strar
-st7ras.
-st7rast.
-5s4traum
-s4tre3a
-s4tred
-st5reis
-7strek.
-st5rekl
-6streni
-st5rer.
-6strers
-6strh
-9stria
-5strie
-st5rige
-st3rin
-3s4t6rip
-5stri3s
-6stroe
-s5t4rog
-5s4trok
-st3rol
-6s4t5rom
-st3ron
-st7rop.
-st7ro6pa
-s6trope
-3s4truk
-st5rum.
-2stry
-6stryg
-s7trykt
-4s3træ
-1s2trø
-st6røm
-4strør
-4strøs
-st5røse
-s5trøst
-4strøy
-6stråd
-2st5s6
-stsa6me.
-stsy8na
-4st7t6
-stta6le.
-st3t4r
-s4tua
-1s2tub
-3s4tud
-s2tue
-stu4er
-stue5re
-3s4tum
-6s3tung
-6stur
-2s4tut
-2stv
-s3t4ved
-1sty
-2stya
-2styd
-3s4tyk
-sty6l
-2s5tyn
-2s7typ
-3s4tyr
-styrs3
-6stysk
-4styv
-sty5ve
-1stø
-2støk
-5støl
-5støp
-6størk
-5støt
-stø7va.
-stø5var
-stø3ve
-stø5vi
-st8øy
-1stå
-5s4tåe
-stå5k
-4su.
-1su4a
-su7a8l
-1su2b
-sub7l
-sub3o
-s3ubå
-1sue
-su8er
-su2f
-5s2ug
-su6ga.
-su4ge.
-sug3g
-su2h
-3sui6
-su3is5
-suit5a
-su2k
-4s1uke
-3suk5k
-suk3r
-1suk5s
-su4le.
-3s4ulf
-su4lik
-sul4t5r
-s1ulu
-2suly
-sulæ5
-3s2um
-4s3umid
-su2mo
-sums6
-5sund.
-5sundet
-sun6d7r
-9sunds
-sun4ge.
-6s7u2ni
-su4o
-3s2up
-su4pe.
-super3
-supi9
-sup4r
-su8pre
-sur5d
-su4re.
-4s3u4rei
-1surf
-su4rie
-su4riu
-surs5k
-sur4sp
-sur4sti
-1sus
-su3san
-su4se.
-4susi
-su4sik
-sus3p
-su2sy
-2s1u4t1
-sut6ra.
-sut8reg
-7suv
-8s5u6vi
-sv2
-6sv.
-sva5a
-svai5
-5svak.
-3svake
-sva4la
-sva4les
-6svalet
-5s6vali
-7s6vam
-s4var.
-s4varet
-3s4vart
-s1vas
-6s1veg
-sve6g7i
-s5veie
-3s4veis
-s5veka
-5s4vens
-sverd5s4
-sve4re
-sve8res
-3s4verg
-5s4verj
-s5verk
-sver4ki
-s4verm
-6s7verv
-7s4vev
-s4vie
-svi6e3l
-4svig
-svi5ke.
-6svikg
-4sviks.
-4svil
-svi4nes
-sving5s4
-ll6svint
-4svir
-2svis
-svi4sa.
-svi4se
-svi5sen
-svi5ser
-s8viv
-svi9ve
-4svol
-5s2vor
-svor7t
-s3vr
-3svul
-5s6vulm
-s3vy4
-svye7ne
-1s2vø
-2s7vå
-1sy
-sy4c
-sy4de.
-sy5den
-5sye
-sy2er
-sy8ka
-sy4ker
-sy5kere
-2syko
-sy6kog
-sy7me
-s2yn
-synk4
-syn6sk
-syn3te
-sy4ra
-sy5rar
-s6yre
-sy4re.
-2s1yrk
-syr4ka
-syr4ke.
-3sy1s
-sy4se
-sy2sl
-sy2s3t
-2sy2t
-sy5ten
-sy5t6h
-9sytt
-sy2vå
-s4z
-sz3c4z
-6szt.
-1sæ
-sæ2l
-8s3æ4re
-8s3æ4ren
-sæ4r1i
-særle9
-sær5s8
-7s6æ5te4
-4sætt
-1sø
-4sø.
-sø2d
-s1øde
-4søf
-søg4
-4søj
-9søk.
-3s6øke
-5søkj
-5søkk
-søk7kj
-2søko
-søk4sk
-søk6s3e6
-søk4ta
-3s4øl
-sø4la.
-sø4le.
-sø5let
-3s2øm
-sø6må
-3sønn
-s1øns
-sø4ras
-sø4re.
-sø4r5end
-søren6de.
-sø8ret
-sør9ett
-7sørl
-sør3s
-sør5ø
-3s2øs
-4søs.
-sø8sa
-7søt
-sø7tast
-sø7tel
-sø5tes
-2søv
-s1øve
-3søvn
-2s5øy.
-4s3øya
-søy8de.
-6s5øyd
-8søye
-3søyl
-6s5øy4n
-søy2r
-2s7øys
-5såg
-s3å2ke
-5s4ål
-så4le.
-6s1ån
-sån4da
-sån6de.
-så2p
-9såpa
-så5pet
-6s1åpn
-såp9u
-så2r
-så6ra
-sår9ast.
-så4re.
-sår3sk
-sår7ø
-så2s
-s7åsa
-s4åsb
-s5åse
-sås5k
-sås5t
-9såv
-såva7
-ta1a
-4tabo
-tab2r
-tab2s
-ta4bu.
-4tabø
-ta1c
-4tad
-ta2da
-ta8d3ei
-ta6d3e4t
-tad5spa
-tad7s6v
-ta6du
-t8ae
-6taei
-4taek
-4tael
-1taen
-4taend
-4taenh
-ta6es
-2ta5fe
-taf7f6
-5tafis
-4tafl
-1tage
-4tagj
-8tah
-ta7is
-1tak.
-4takau
-ta7ken
-ta5ker
-tak7kel
-tak5k4l
-ta8k9la
-2takr
-tak4sal
-tak6se.
-tak4si
-4t3aksj
-5takst
-tak4tal
-4taktig
-tak4to
-t5aktø
-ta1ku
-tak3v
-1tal.
-ta9lam
-ta3lan
-tal5ang
-ta7las
-3tale
-ta4lei
-tal5eie
-ta4lek
-ta5ler.
-1talg
-tal6ge.
-7talj
-talj5es
-tal4led
-tal4leg
-tall7es
-tal8lign
-tall6s9a
-tal4ly
-tal3op
-6talter
-t5altern
-ta6l9u
-ta6lå
-2tamb
-tamba6ne.
-t3ambi
-t4ame
-4tamet
-tam4i
-2ta3m4o
-t6an.
-ta2na
-4t3anal
-ta3nar
-ta5nas
-ta5nat
-t5andak
-5t6ande.
-t7andel.
-t5andele
-tand5r
-tandø4
-tandør5e
-1tane
-ta4nel
-ta5nem
-4tanett
-t3anfa
-tanfø6
-6tangf
-6t3angr
-1tank
-2tanl
-t3anle
-2t1anm
-3tannl
-t5anno
-tanns4
-tan6sk
-tans5ka
-t5an5sl
-4t5anstr
-4tansv
-8tantil
-tan4tra
-6t7antre
-t3anve
-2ta3o4
-5tap.
-ta4pa.
-1tape
-ta4pe.
-3tapi
-4tapl
-4tappa
-5tappi
-1t4ar.
-t6ara
-ta4r3ak
-4taram
-ta6rare
-2tarb
-3tarbo
-5tarbø
-6t7ark.
-tar8ka.
-4t5arke
-4t3arki
-4tarra
-tar9si
-tar7sp
-tars6v
-4tart
-tart7est
-t5artik
-tar7tit
-tar4t3r
-ta6r5å8k
-4tasa
-ta3se
-6t9asf
-t3a4sia
-tasi3e
-ta4sif
-ta4sil
-ta4si5s4
-tas4p
-tas5s4
-6ta7sto
-ta7str
-4tasu
-ta1ta
-ta7tes
-tate8se.
-tat5e4v
-tati1
-tat3op
-tat2s1
-tat3te
-t3attr
-1tau
-9tau.
-7taue
-4t5aug
-2t1a4uk
-4taun
-tau4ne.
-tau4sk
-2taut
-2tav
-6tavin
-3tavl
-4tavli
-ta9xy
-6t1b2
-tba3d
-tba2n
-t6be.
-tbe6te.
-tbe6t7r
-tbe6t8ra
-tbo6da
-tbu8da
-tby3k
-tby4s
-tby7te
-2tc
-t1ce
-tcen4
-tch5e
-t5co
-2t3d
-tdy5pe
-1te
-4tead
-4te3ag
-2teak
-2te9a8l
-tea6m
-2tea2n
-2teap
-2tear
-te5arb
-tea4s
-3teatr
-4teatt
-2teau
-2teav
-4teb
-t5ebb
-tebu8da
-4tecel
-te1co
-2ted
-3tede.
-4tedeb
-te7def
-4tedek
-4tedel
-4tedem
-te5den
-4tedi
-5tedil
-4tedo
-tedo6en.
-tedo4er
-tedo8et.
-te4dor
-ted4sk
-ted4sl
-6tedu
-4tedy
-tedyr9k
-4tedø
-te3e4
-2tef
-8tefa
-4tefi
-4tefl
-4tefo
-tefo8r
-t3efte
-3tefø
-2tega
-5tegat
-4t3egd
-te7gea
-te9gee
-4tegg
-teg8ga.
-2tegh
-te4gim
-2tegj
-2tegl
-te3gla
-te9g8li
-8tegs.
-6tegspl
-6tegsv
-2tegu
-tegvi8
-2tegå
-5tegås
-4teh
-5tei.
-2tei4d
-t3eie
-t3eiga
-tei6ga.
-t7ei6ge.
-6teigr
-3teikn
-tei5le
-te1im
-6teinf
-te4inne
-te5inte
-te5i4s
-6teiso
-2tej
-te7ken
-te5ker
-4tekil
-2tekj
-5tek1k
-2tekl
-te5k4la
-tek6lede.
-tek4li
-4teknu
-2teko
-2tekr
-te7kra
-te6k5ru
-9teks.
-4t3eksa
-t3ekse
-4teksp
-t4ekst
-tek8t9r
-tekt4s
-tek6ty
-2teku
-te2k3v
-4teky
-2tekø
-4tekå
-2te3la
-tel6ak
-5te4l5ar
-3telav
-8te4le.
-4teled
-4telei
-4telek
-4teleme
-te4lene
-6teler
-te4les
-te5lesk
-4te4lev
-te6leva
-4telid
-4telik
-4telil
-4telin
-te4lir
-4telis
-4telit
-4teliv
-tel5lef
-tel4lei
-tel4lev
-tel8lign
-tel4lo
-2telo
-tel3se
-telses5
-t3elsk
-tel7s6v
-5teltet
-2te1lu
-7telut
-2tely
-6telæ
-2telø
-telø8pa.
-2telå
-2tem
-3temae
-6teman
-te4mans
-t5emba
-6temenn
-5temik
-tem9ma
-6temn
-tem5ne.
-tem5ord
-tem5pe
-3tempo
-tem3s
-4temø
-3ten.
-te5nab
-te4n5al
-ten8am
-te4nan
-te4nat
-ten5at.
-6t7enc
-6t5en6den
-4tendr
-4tened
-te5neg
-6tenem
-6tenerg
-5tenes
-4tenet
-2teng
-7tengon
-t5e4nig
-7tenik
-5tenis
-4teniv
-ten9no
-te4nom
-te5nor
-6tenorm
-4tenot
-te6nov
-6tenó
-ten3sa
-ten5sko
-ten6slu
-ten3so
-tens5v
-ten4t5in
-tentle8ge.
-4tenum
-4teny
-4tenæ
-2tenø
-ten5øks
-2teom
-5teon
-4teop
-te6ora
-4teord
-2teov
-2tep
-te3pa
-4tepak
-tepa9ra
-4tepas
-4te5pe
-7tepee
-9tepé
-tep6pere
-t5e6ple
-4tepr
-4terac
-te7rakk
-6teramm
-ter7apa
-4terapp
-te4rare
-6terasa
-4terase
-7terast
-terba6ne.
-t6er5d
-4tered
-4teref
-4tereg
-4tereis
-te4rel
-8terem.
-6teremm
-te4r5eng
-teren6ga
-6terenn
-4terep
-te4rerk
-ter5esti
-4terett
-6terevo
-3ter5g
-3terh
-te4rig
-4terik
-4terisi
-te4riv
-ter5j
-4terk.
-4terke
-4terkh
-7terkr
-6terks4
-4terkt
-terla6ga
-terle7ge
-terle6ve.
-ter8ma.
-ter3no
-tern5s
-te5ro.
-tero6e
-te3rof
-4teroll
-4terom
-5teromr
-4te3ros
-4te3rot
-tero6v
-ter5r
-5ters.
-5tersjøo
-ters4kl
-ter7s6ko
-ters4l
-ter3s4m
-ters6ne
-ter5sv
-tersø6ke.
-3ter3t
-ter9to
-ter9ul
-8terum
-ter7v
-tervi6se
-2tery
-ter5ør
-4terøt
-te4r3øv
-4teråd
-te4r3ås
-t4es
-5tes.
-2tesa
-5tesar
-te7sen
-2te1sh
-4tesid
-4tesik
-6te3sin
-4tesit
-4tesj
-6tesjef
-4te1sk
-t9es6ka.
-6teski
-te5sko
-2te1s2m
-7tesmåe
-2te1sn
-2te3so
-6tesp
-5tesr
-3tess
-5test.
-4testaf
-tes5tas
-4testat
-5tes7te.
-4te5stei
-te5s6tiv
-5testid
-tes4tik
-4te5s4til
-4te3sto
-4te3str
-4testy
-4testø
-2tesu
-4te1sv
-tes8væ
-2tesy
-2te3sø
-te7så
-teså9re
-3tet.
-teta6ka
-teta6le.
-te4tap
-te3te
-5tete.
-tete4e
-4teteg
-4tetei
-4tetek
-4tetem
-2teti
-3tetik
-3tetis
-2tetj
-2teto
-2tet2r
-3tet2s
-tet5ti
-tett3s
-2tetu
-5tetu.
-2tetv
-2tety
-te2t3å
-2teu
-teu8k
-t1eur
-3teus
-2tev
-t6eva
-te4valu
-3tevl
-tevo6r
-te3vr
-2tey6
-2teø
-2teå
-4téa
-2téb
-2téf
-2téh
-2téi
-4téle
-2tém
-2tése
-4tést
-6t1f
-tfe6e
-tfe4l
-tflå3
-t7fo
-2t3g2
-t4ga.
-tge4a
-tgei5
-t4gi.
-tgi5ros
-tgrei9e
-t4gå.
-2t1h
-t4hap
-t4hea3
-thei5m
-tho7li
-tho3re
-3thr
-thu5le
-thu6s
-thy5r
-1ti
-2tiad
-ti3ag
-2ti1ak
-4ti3all
-ti5als
-2tia2m
-2ti1ap
-ti3asp
-4tiau
-2tiav
-2tib
-2tick
-3tid
-ti2da
-4tidan
-tid7d
-6t3idee
-4ti5dem
-4t7idé
-4tidis
-4tido
-4tidr
-2tidu
-tidvi4
-6tidy
-4tidø
-ti1e2
-2tief
-2tiei
-2tiem
-4tienh
-tie5ra
-4tierf
-4tierk
-ti4ert
-ties3
-ti3esk
-ti3et
-4tieta
-4tiett
-2tifa
-tifa8ne.
-2tife
-4tifl
-2tifo
-2ti5f6r
-t8ifrå
-4tift
-tif5te
-2tifu
-4tifø
-ti9ge.
-4tigj
-2tign
-3tigno
-ti6gun
-2tih
-2tii
-2tij
-ti3ka.
-6tikarr
-ti5ke
-4tiket
-4tiki
-6tikj
-tik4kj
-2ti3ko
-2ti1k2r
-ti3ku
-6tikular
-6tikult
-6tiky
-4tikø
-t4il
-tila6ga
-til1d4
-3tilde
-2tile
-ti3lei
-3tilfe
-3tilg
-til3id
-4tilke
-3tilkn
-4tille.
-4tillh
-4tillin
-tillø7
-4tilm
-7tilnæ
-3tilst
-til3t4
-4tilte
-2tilu
-2tilø
-ti7mab
-5timat
-ti4me.
-5timedie
-ti4mera
-5timeri
-2timl
-4timo7
-2t1imp
-tim7s
-2timu
-2timy
-2timø
-ti6nab
-tin5art
-4tinaz
-2tind
-t3indu
-ti4nem
-4t1inf
-tin5ge4s
-6t5inj
-2tink
-7tinks
-4t1inn
-6t5inne
-ti5no
-tinsk5
-4tinsp
-4t3inst
-4t1int
-2tinv
-4tiny
-9tiol
-6ti7om
-tion9s
-4tiop
-ti1or
-ti1ov
-ti3pa
-ti6pla
-4tipr
-3tips
-2tir
-tira4t
-ti4ref
-ti1ro
-6tisak
-4tisam
-ti5s6an
-ti3se
-4tis4ei
-4tisek
-4tisel
-4tisem
-4tisep
-tise8ra.
-4tisers
-6tisig
-4tisio
-4tisje
-4tisju
-tis4ka
-4tiskan
-4tiskil
-tis5kok
-6tisku
-tis5l
-4tisn
-4tiso
-6tisprå
-4tistat
-tis4ti.
-tis4til
-ti5stre
-4tisty
-4tistø
-ti8støy
-2tisy
-2tit
-ti7ta
-ti3te
-ti1tj
-3titl
-tit4r
-tit3s
-3titt
-4tiub
-2tiut
-ti4v5and
-tiva9re
-ti4v5art
-2tivo
-tiv5si
-tiv5sk
-4tiy
-ti5ær.
-ti7ære
-ti9ært.
-ti1ø8
-2tiå
-6t3jag
-2t1jak
-t5jarn
-2t1je.
-2t1jeg
-2tjel
-1tjen
-tjen6st
-6tjep
-2tjer
-t5jev
-2t1ji
-5t6jingan
-5t6jingar
-2tjo
-t5jord
-2tjub
-tju4e
-2tjun
-6tjur
-3tjuv
-tjæ4res
-2tjø
-4tjå
-4t3k2
-t6kag
-tka8ra.
-tkly9
-tku6le.
-tkå8pa
-6t3l6
-tla4ga
-tla8te.
-tle6da.
-t4ledr
-t6lef
-tlei5er.
-tle8se.
-tle5ti
-tligh6
-tlight5
-tli6nes
-tli4te.
-tlu4e
-t6l7ut
-tlø4pa.
-tl7øy.
-tlå3ne
-tlå7r
-2t1m
-tma3d
-tma8ge.
-t6maku
-t2mam
-t2meg4
-tme3in
-t2mek
-tmini6
-tmin5s6
-t2mos
-tmå4la.
-8t1n
-t3na
-t6nee
-t4neli
-t7nelig
-tne4rek
-tne4r5ø
-tne8se.
-t4nesk
-t4nest
-t5ni
-t8no.
-tn5sk
-tnæ6re
-7toan
-7toar.
-toa6t
-6toau
-2toav
-tobe6r
-t3o2bl
-4toc
-to5da
-to9de.
-to4dera
-3todo
-1toe
-2toek
-6toel
-toe4t
-2tof
-6toff.
-t3ofre
-to5fri
-to7gen
-4togg
-to6gl
-6tograv
-to4gre
-tog3st
-to2gu
-2toh
-toil3
-2to1in
-4toj
-t6ok
-1to3ke
-to3ki
-2tokj
-2tokk
-tokk5end
-to3kl
-5toksi
-5tokt
-2toku
-to4l5arm
-5tolat
-to5lel
-tolele7
-5tolera
-toli8ne.
-2tolj
-1to4l3k
-7tolki
-tol4lab
-tol4lag
-tol6leg
-tol6lett
-3tolo
-tol5tr
-4tolå
-to9ma.
-2tomb
-to5mene.
-2tomf
-4tomg
-to3mi
-to5mise
-to7mist
-4tomk
-tomlø8pa
-t8omm
-2tomr
-4tom1s
-5toms.
-1ton
-to5na
-to4ned
-to4nel
-tong5s4
-to8nib
-2tono
-ton3sa
-ton5s4l
-ton5sp
-2tonu
-to4ny.
-2to3o
-4to1pl
-4toppd
-6toppg
-top4po
-4toppt
-4topr
-to1ra
-to4rak
-tor5alt
-tor5ang
-to4r5ant
-to4r3as
-4tord
-tor8da.
-to1re
-6toreg
-to4rek
-tor7eks
-to7rem
-6torent
-5torer
-tore4t
-tor5ete
-4torga
-tor5int
-tor7me
-torm5s
-tor5na
-tors4i
-tor5t8
-torvei5
-to4rø
-4torå
-to1s
-4tosa
-4to3se
-to2sh
-6tosj
-tos5ke
-to8sku
-4tos2p
-2tosy
-4tota
-to5te
-to8ti.
-to5to.
-to4tor
-6toty
-2tov
-to1va
-to7veg
-to5verd
-tove7re
-t5overs
-5tow
-4toø
-6t3p2
-t7pa
-tpi7ne
-tpi7pi
-tpo4et
-t4påk
-tr4
-8tr.
-3trafi
-tra8ka.
-trak7to
-t5rane
-3t6rans
-tran7ske
-5trap
-tra3pe
-tra5po
-tra5r4
-5trase
-tra5se.
-tra5ses
-5trasé
-t2rat
-t5rate.
-3trav
-tre4al.
-tre1c
-4t3reds
-t3refu
-6t1reg
-t5regi
-4trei
-tre5int
-6trek.
-4treke
-4trekl
-4trela
-3t6re7na
-tre5ne
-t6reng
-3t6reni
-4t3renn
-tren6sk
-t7repe
-t5repres
-t2rer
-t4rero
-t4re3ru
-2tres
-6tresi
-tre5sko
-tres4l
-3tresn
-t5resu
-t1ret
-t4reta
-t6reto
-t5retted
-5t6rettel
-4trev
-tre9va
-tr5h
-t6rib
-4t1ric
-4t4rid
-tri7ei
-t5rig.
-t4rikk
-t8rina
-t4ri5ne
-4t5ring
-3trinn
-t4rist
-tri5to
-t4riu
-t2riv
-tri7vi
-5trix
-3t4ro.
-5troa
-tro9ar
-3troe
-t4rof
-tro5g
-3t2roi
-tro3in
-t4rok
-t2rol
-4t3rom.
-t6rond
-5t4rong
-tro5per
-t2ros
-5t6rosk
-tros3l
-tro1v
-t8ru.
-t8rua
-7trua.
-5trued
-5truet
-3trug
-tru1i
-5trukn
-t3rull
-2t1run9
-t3rund
-4trupe
-tru5sa.
-7t6rusk
-2trut
-t5ruta
-t3rute
-t3ruti
-tru5v
-try3dr
-3t2ryg
-tryg5ge
-7trykk.
-5trykke
-try7pe.
-t6ræ
-trø8a
-t5rød.
-t5rødt
-4trøk
-4trøm
-2trør
-5trøt
-5trøya
-5trøye5
-trøy9et
-4trøyr
-6trøys
-5trøyt
-trå8da.
-4trådet
-trå4dr
-t6råkl
-t3råst
-4ts
-6ts.
-t5sa.
-t5sab
-tsa2g
-tsak6se.
-ts1an
-ts4ang
-tsau6r
-t1sc
-t6scha
-t6sch5k
-t5se.
-tse6d
-tse4er
-ts5ege
-tsei4d
-ts3eig
-ts2em
-t3sen.
-ts4ende
-t5sendi
-tsen8ka
-tsen6ke.
-t5sens
-t4sentu
-t5ser.
-6t5erf
-t3seri
-t4s3erk
-tser3o
-t5s6ers.
-ts4es
-t4sesk
-ts3eta
-tse4te.
-ts1e4v
-ts3f
-ts4fæ
-ts7ill
-ts3inn
-t4s3ins
-t5sir
-ts5jeg
-tsje5t6sj
-ts5jor
-5t6sjov.
-t7sjuk
-t4sjur
-t5skad
-t4skan
-ts6kis
-t4s5kjed
-ts6kjø
-t5skol
-t6skoll
-t7skot
-ts5kren
-tsk5ru
-ts5krø
-ts1k6v
-ts9kvi
-ts6ky.
-t6s7kyn
-ts1l
-t7s6lo.
-t3s4lot
-ts2lu
-ts5lø
-t5smit
-tsmå6la.
-ts1o
-t4s5o4d
-t5sok
-t5somst
-t5spek
-t3spel
-ts2pi
-t3s4por
-ts5s4
-t1st4
-t5stad
-ts3tak
-t4s3tal
-t5stand
-t5stang
-t5star
-t5stat
-ts6tau
-t3sted
-t4steg
-t4stek
-ts6tig
-ts4tik
-t4stilk
-t4stin
-t4stit
-t2s1tj
-ts5ton
-ts5tors
-ts5tree
-ts5tren
-t4s5tro
-ts3try
-t5stu
-ts3tv
-t4sua
-tsu7ge
-tsu4l
-ts3uli
-ts3u4r
-ts5usi
-ts1v
-t3svik
-ts1w
-t5syk
-ts5yt
-tsø8ka
-ts5økni
-ts5øv
-tsøy8er
-ts1å
-tsåt8
-6tt
-t1ta
-t3ta.
-t2tab
-ttaba6ne.
-tt9abo
-tt5adr
-t2taf
-tta9fr
-tt3aft
-tta4la.
-t6t3ald
-tta7lel
-ttall4
-t4t3ana
-t5t6ane
-t4t3ang
-t4tans
-t4tanv
-tt5appe
-t7t8ar.
-ttare6
-t4tarr
-tt5ar5t
-tt6arta
-t4tase
-t4tasj
-t4tav
-tt3avi
-tt5avk
-tt5avr
-t3te.
-t2tea
-t3ted
-t4teda
-t5tede.
-t8tedr
-t2tee
-t4tef
-tt3eff
-t2teg
-t2tei
-tt7eid
-tte3in
-t2tek
-tte7kv
-tt7elev
-tteli6te.
-t4tem
-tte4ma.
-tt5emn
-ttem8na
-ttem6ne.
-t3ten
-t5ten.
-t4tena
-t5tene.
-t4teni
-tten5s
-t9tens.
-t4t5ense
-t2teo
-t5ter.
-t4terei
-tter5un
-tte4r5ø
-t4terå
-t4tese
-t4tesi
-ttes6ke.
-t4tesl
-t5tet.
-t4teta
-t4tete
-t1té
-t4th
-tt5he
-tti5a
-t4tidel
-tti3e
-t2tif
-t5tig
-tti4g5j
-tt3ind
-t5tine
-t7tiné
-t5ting
-t4tini
-t4t3ins
-t4tisj
-t6tisti
-t7tite
-ttle6de.
-ttlin5
-t1to.
-t5tofr
-tt5om.
-t7tomr
-t2ton
-tton6na
-tt3opp
-t5tora
-tt3ord
-tto5re
-tt5o4ri
-tt3orm
-tto5u
-ttpar4
-tt6pås
-tt9raka
-tt5rake
-tt3ram
-tt3rap
-tt7rat
-t4t3rep
-tt3res
-tt3rev
-tt5rom
-t5trop
-t5try
-t2t1rø
-t6ts
-tt7saf
-tts3ar
-tts5kan
-tts5kj
-ttsla6ga
-tt3sok
-tt5still
-tts5top
-tts5tra
-tts5tøy
-tt3ugl
-t1tum
-tt1un
-ttun6ge.
-tt1ut
-tt8ute
-ttva8la
-tt5ve
-tt6vun
-t5tw
-t5ty.
-tty8e
-tt1y6t
-ttæ6
-tt3ø4l
-t1tør
-tt3øv
-tt7øy6r
-tt1å4
-5tual
-4tu4av
-tuba3
-tu4be.
-tu6bå
-tu6dem
-5tuel
-tu4er.
-tug8la
-tu1in
-tu2k
-t5uka
-t1uke
-7tukt
-3tula
-1tule
-tul5les
-tum5m
-tum4s
-3tun.
-4tund
-3tune
-tun5gesv
-tung9s
-6t5uni
-tu4nio
-5tun5n
-9tuns
-3t2ur
-tur7ant
-tu4ras
-4tu4rei
-tu4rek
-turi4
-tu4rin
-tur1o
-tur3p
-tur5s2
-tur3uk
-tu5rus
-tur1ø
-1tus.
-tu1sa
-3tusb
-3tusf
-tu4sin
-tu4sm
-tus5o
-tus7s6t
-tust6r
-tus5u
-2tutg
-t5utj
-t5utk
-t1utr
-tut6tenk
-tut5tor
-tutt5ov
-tu8va.
-2t1v
-tv4a
-tva8k
-tva6ne.
-3tvang
-t4v5anl
-8t9var
-tve5del
-3tveit
-tvert5
-t2vet
-3tvet.
-7tvets
-t5vik
-tvi8ka.
-t8viklas
-5t4vil.
-tvi5la
-5t4vile
-t4vi5l4i
-t6ving
-tvi4sa.
-tvi4se.
-6t7vo
-3tvung
-6twa2
-1tyd
-tyg9gel
-tyg5ges
-6tyh
-tykk5s6
-ty4med
-1tyn
-ty4ne.
-6t5yo
-1typ
-ty4pere
-ty4pet
-ty4rak
-5tyrann
-6tyreg
-ty4rep
-tyre5st
-ty4ri.
-tyri9e
-ty4ri5s
-ty2s
-3tysk
-tys3t
-2ty2t
-ty8ta
-t3ytel
-ty5ten
-ty4ve.
-2tz
-t5za
-5t6zel
-6t6z5l
-1tæ
-tæ5l
-tær6ene
-tæ4renh
-tær4er
-tær4et
-tær5s4
-tøf3l
-2t1øk
-tø9ket
-tøk8ta
-4tøl
-t7ø4let
-5t4øm5
-tøn5nes
-4tøp
-tøp5se
-t2ør
-tø4r3as
-tør3in
-tørk4
-7tørk.
-9tørka
-5tørke
-tør5ne
-tørs7ta.
-tørs7ter
-tørs5tin
-tør3t
-tøs4
-tø8sa
-4tøt
-tøt5a
-tø5ta.
-tø3te
-tøtt6
-2tøv
-tøv6d
-tø7vele
-t4øy
-tøy5a
-t9øyem
-tøy5r
-tøy5te
-tå4en.
-tå2k
-tå5ket.
-tå5ki
-tåk6r
-tå2l3a
-tå9la.
-tå4leg
-tå7lel
-tål5s4
-tån8da
-tån6de.
-tå3ne
-4tåp
-tå6pe.
-t1åpn
-tå6re.
-tå4rep
-t3året
-3tårn
-2t1års1
-tå3s
-tå2t
-t3åtak
-tå7ten
-ua7g
-u1ak
-uak3s
-u1al.
-ua7la
-ual5l
-ual3o
-ual3u
-u3a4ne.
-u5anl
-u3ans
-u1ar.
-uar5d
-u4arr
-u5ars.
-uash3
-ua3t
-u5au8
-u1av
-1uavh
-u4ba.
-ub7alt
-ub7ant
-ub5ark
-ub4bo
-ub2br
-ub4bu
-ubel5s
-ub5h
-ubi6s
-ubis7t
-ub1j
-ub7lande.
-uble3s4
-u1b4r
-ub5rin
-2ubs
-ubu8e
-uch5en
-uch5er
-u1ci
-uck1
-ucu5
-2ud
-u3da.
-u7das.
-ud4dag
-ud2dr
-udd4s5e
-ud2då
-udea9
-ude8are
-u2deb
-udeie5
-udei5er
-u2dek
-ude3lu
-u2dep
-u6dero
-u2des
-u3d2et
-u6d5ett
-u5devo
-udia2
-udi3an
-udi4en
-udio5
-ud7ir
-ud7ji
-ud5leg
-udle6ge.
-u7dob
-u6doe
-u2dot
-udover7
-ud1r
-udse4
-ud3t
-ud5v
-3u4dy
-udy9ra
-ud5å4s
-ue5a8
-u5ei
-u1el
-uem8na
-u1e2n
-uend5r
-uensar4
-ue7o
-u1er
-u5e6rast
-ue4re.
-ue5ren
-ue4rer
-ue4res
-ue5ri
-uerle7
-u2erm
-ue4se
-ue2si
-ues6n
-u1et
-uet8r
-ueul8
-u4fe.
-u6feb
-ufe6e
-uf1f4
-uf4f5erm
-ufi9l
-ufi5ne
-u1fl
-u6foa
-ufor3s
-u1fr
-uft3a
-uf4tan
-uft5s4la
-uft3sp
-ufø6
-u5gag
-u5gar
-u6g5av
-ugby7
-u2gem
-u5gen
-u3ger
-u4gerø
-u2ge5s4
-u9get.
-u8geta
-u2gev
-ugg3s4
-u5gis
-u4gl
-ug1la
-u5g4lad
-ug9lar.
-ug4le.
-ug9ler.
-ugle7s
-ug5ly
-ug7na
-ug7ne.
-ugo1
-u4go.
-ug4re
-ugrei9er
-u4grø
-ug5s4i
-ugs4k
-ug7so
-ug3s4pr
-ug5s4va7
-uguay7ans
-ug5øyn
-u1h
-3uhel
-ui8a
-u4i6c
-ui2d
-uid5el
-uid5en.
-uid5ens
-uid5er
-uid5in
-ui3e6
-u4il
-uil5l
-u1im
-ui3ne
-u1ing
-uinnsmi8
-uinnsmig9
-u1ism
-uista7
-uit3en
-uit5er
-u1itt
-u1j
-u4jas
-u8je.
-u7jå
-4uk.
-u1k2a
-u7kar
-ukare6
-ukar5t4
-u5kat
-u2ke.
-u4ked
-uke5l4
-4ukem
-uker5an
-uke4rek
-uker5i
-ukho7
-u7ki
-u1kj
-4ukk
-ukk6a
-uk7kestal
-uk8k9l
-ukk7n
-ukks6
-u5klem
-uk8lu
-ukl7ut
-u5k4no
-u1ko
-u4k5og
-u2kra
-uk3rus
-2uks
-uk2sa
-uk4sek
-uk4sel
-ukse7te
-uk2si
-uk2s1k
-uk7ski
-uk2so
-uks5t
-uk4s3un
-uk2sø
-ukt5e4sk
-ukteslø9se
-uk4t3id
-uk6tj
-uk4t5ori
-uk2t7r
-ukts6l
-ukt3sp
-ukt9s6v
-uktu8e9ra
-uktue5re
-u1ku
-uku6e
-uku5le
-uk5vik
-ukys8
-uk3ø4
-uk5å4
-6ul.
-u1la
-u4la.
-ula7d
-u6l1af
-ul3aks
-ul5art
-ul4det
-u4lef
-u2lek
-u2lel
-ulele8ge.
-ule5ma
-u3len.
-u6leni
-u3lens
-u5ler.
-u5lere.
-ule3ri
-u2l3erl
-u4lero
-u2les
-ule3st
-u5lest.
-u5leste.
-u2leu
-u1lé
-ul4f5l
-ul4fo
-ul4fr
-u3l4i
-ulie8
-uli9en
-uli5ke.
-3ulikh
-uli9na.
-uli5ne
-u7linj
-ul1j
-ul5ka
-ul4k3v
-ul4lag
-ul4lam
-ull7arm
-ul4leg
-ull5egg
-ulleg8ga
-ul6leng
-ul9lere
-ul4le3s4
-ul8li.
-ul8lig
-ulling7s
-ull5i4v
-ul4l3o6s
-ul8lot
-ullo3v
-ull5sle
-ull3s6m
-ulls4t
-ull3sv
-ul2lu4
-ul6ly
-ul2lø
-u1lo
-ulo6i
-ul5op
-ulo7va
-ul4sk
-uls4po
-ul8sn
-ul2st
-ul8s3t6r
-4ult
-ul4teg
-ul4tek
-ul4tes
-ul4til
-ul4tim
-ul4to
-ul7tor
-ul4t3re
-ult3ri
-u7lua
-u3lue
-1uluk
-u5lup
-u5lus
-ul9ut.
-u7luta
-u9lute
-ul7va.
-ul5van
-ul4var
-ul4ve.
-ul4veg
-ul4vei
-ul4ves
-ulv3t
-ulv3u
-1uly
-ulyk5kes
-ulæ6ra
-ulæ5re
-ulø3se
-uløy6e
-ul5å6l
-2uma
-uma8ge.
-u6mare
-um5au
-umau7ken
-um3av
-2umb
-um5be
-4umc
-4umd
-2ume
-u4mend
-u4m3enh
-umen4t5i
-ume5ra
-2umfo
-2umh
-2umi
-u6midd
-umie6n
-umi9na
-u4mint
-um9ja
-2umk
-4uml
-4umm
-um3me
-um4mil
-um4mis
-um3n
-umna8
-4umo
-umo6g
-um5ok
-2ump
-um7pan
-um4ple
-um4p7ut
-4umr
-ums1
-um7se.
-um4sku
-umsku8le.
-um2sn
-um4sor
-ums3t
-6um7t
-umta8l
-um5ut
-4umve
-umør3s
-um7øy
-umå7
-2un.
-una6da
-un5alg
-u4n3ap
-u9nar
-u7nas
-u3nat
-2und.
-6unda
-6unde.
-un4dek
-un4del
-6unden
-5undersk
-5underv
-4undet
-un6d7im
-4unds
-und5s4i
-u2ned
-u4nee
-u9nei.
-u2nel
-unele6ge.
-u4n5eng
-u4neno
-u2ne1s2
-u3nes.
-u2nev
-unev5n
-1ungd
-ungele8ge.
-un4gem
-un2g1j
-un4g5l
-un4go
-un2g1r
-un9g8ru
-ung3s4i
-un6i
-u4ni.
-u2nid
-1u2nif
-u4nim
-u3nin
-3union
-uni4st
-4unk
-un4k5l
-un7ko
-un4kr
-un7nak
-unn5erf
-un4n5ers
-un4n5erv
-un5nes
-un4niv
-un2no
-unn5ste
-unnta8la
-un4n3y
-u4no.
-u2n3os
-uno7t
-4uns
-un6sj5i
-un3skr
-un5s4p
-un3stek
-unst5e6l
-unst3o
-un1s2v
-un4tal
-un4tam
-un4tas
-un3t2r
-unt5rep
-un4tri
-untun8ge.
-unu6
-un5ut
-u3ny
-u3nø
-un5øy6d
-u7nøyg
-u3nå
-uo9a
-u1ob
-u1om
-uom7s
-u1op
-uor8da
-uo1re
-uo5ro
-u1ov
-up3av
-u3pea4
-u5per
-uper3a
-upe6ren
-u4peta
-6upf
-u3pi
-u8pi.
-up3ins
-up3li
-up6nev
-upo9pe
-up1p2
-up4ped
-up4pla
-up6pre
-upp5s
-4upr
-u3pra
-6ups
-up6sen
-up2s3k
-ups4ke
-ups5pr
-6upt
-6upu
-u1på
-upåvi6
-u1ra
-u2rad
-u2raf
-ur3aft
-u2r1ak
-ura6ly
-u4ram
-u5rane
-u3rans
-uran6t5re
-u5rar.
-u6r7arl
-ur3arv
-u9ras.
-ur5asp
-ur3att
-ur7au
-urau9ken
-ur1av
-ur4bod
-ur4c
-urd4
-ur3di
-ur4d5o
-u1re
-ure8al
-ureer6e
-ur5egg
-uregi6
-uregist5
-3urein
-ure4l
-ur3ele
-u4reli
-u7r8ell
-u7r8elt
-u4r3els
-u4r5eng
-u7reom
-ure7o6s
-u4resu
-u4reta
-u4rete
-ur4e5v
-2urf
-ur4feb
-ur6fed
-ur3ge
-u1ri
-u4ri.
-uri6a7ne
-uri9en.
-uri4e5ne
-uri9er.
-u3rik
-u3rim
-uri5ne
-ur3inn
-ur3ins
-ur3int
-uri6sp
-ur4ke5s
-ur6k7ja
-ur8kla
-ur4kle
-ur6k5n
-urk5s
-urla8ga
-urle6ge.
-urle8se.
-urma7g
-ur3nea
-urn1s2
-urnæ6re
-u4ro.
-u6roc
-5uroe
-urom5s
-u2rop
-uro7pi
-ur3opp
-ur1or
-uro3s4
-uro4sta
-uro8ta
-ur4pel
-ur6p9ut
-ur3re
-ursa8ka
-ur4sal
-ur4s3el
-ur4sin
-ur4skr
-ur4spe
-ur5ste
-urs5til
-ur4stj
-ur2sv
-urs3va
-ur2s1ø
-ur3teo
-ur5ti
-ur4to
-urts4t
-urue7re
-u6rug8
-ur7ugl
-uruk6
-uru4ke
-uru7kn
-ur6ul
-urumo7
-urun4g
-u7runk
-uru7v
-ur4vel
-urv3s
-u6rys
-urø2
-ur1ød
-ur1øy
-4usa
-u9sane
-us3ang
-u9sar.
-u7saren
-u6s7ark
-us7au
-us1c
-2use
-u5seal
-use4al.
-us7edvanle
-u2s1ei
-u2sek
-u4sele
-u2sem
-u6s5endi
-us7erk
-u4s5erm
-u6sesi
-uset8je
-us3eva
-4usg
-u2sh
-u2s3h4a
-u2s3h4o
-us4id
-us3ind
-us5inn
-us7jag
-u4sji
-us5kaf
-u4s3kan
-uska8ra
-us7kat
-us5ken
-u6s5kis
-usk4l
-us6k5le
-us5klo
-us1ko
-u1skr
-us7kru
-usk7u6t
-us4ky
-us1l
-usle6ge.
-us5lin
-u4slu
-us7mø
-u4sn
-us1ok
-uso5l
-uso6l5d
-us1or
-u3sori
-usove7r6e
-us1p
-u1s2pin
-us5sar
-us6sat
-us4sjå
-us4skj
-uss5kor
-us4skur
-uss1l
-us7smi
-uss7mø
-us4s5ti
-us4str
-us2sv
-u6stande
-u4stat
-us3tav
-u2ste
-us3ted
-u5stei
-us7ten
-ust9ette
-us5ti
-u5s6tig
-us1tj
-ust5of
-uston8
-ust7onn
-us5tor
-ust5o6v
-us8tra.
-us8tran
-us8trar
-u6stre
-ust5ren
-us4tri
-us3tro
-ust5rød
-u6st5rå
-ust7ut
-u4stå
-us3ung
-u2sur
-us1v
-u5svale
-u7s6valt
-usva8n
-usvi8ka.
-6usæ
-usæ9le
-usø6m
-us1øy
-u1tae
-u2tag
-u7tagg
-u9tal.
-ut3alb
-ut5ald
-u3tall
-u5tande
-uta7no
-ut6anv
-ut3arm
-ut3art
-uta1s4
-u5tas.
-u6t5a6sa
-u6t5a6se
-u2ta1u4
-1utb
-ut4ba.
-utbe8d
-4utbi
-ut6by.
-utch5
-1utd
-4utdat
-utda7ta.
-u2te.
-u2tea
-u4tee
-u4tei
-u2tek
-ut3eks
-u5tekst
-ute6ma.
-u5temm
-u9temt
-ut2en
-u6tena
-u3tenk
-u4tenu
-u2teo
-2uter
-u6terø
-u2te1s6
-u4teta
-u3tett
-ut6eu
-uteva9
-1utf
-utfa7s
-utfø5re
-1utg
-8utgåe
-6u3ti
-u4t5if
-utikk6u
-utiku9
-u4tili
-u6tiven
-ut1j
-u5tjen
-ut6ju
-3utlei
-utlø5se
-utlå7na
-utmå5le
-u8tni
-1utny
-2uto
-ut7oms
-uto5s
-uto4v
-3utpr
-ut4på
-ut1r
-u5t4radi
-ut3re
-u5treng
-u3triv
-u3trol
-u3tros
-5utru
-u5t6rul
-ut4rø
-ut9rød
-1ut1s4
-4uts.
-4utsei
-utse8t9ja
-2utsj
-ut3sk
-5utst
-7uttak.
-5uttake
-ut4terk
-utt5eva
-ut4tid
-ut4til
-ut5torea
-ut1tr
-ut4tra
-3uttry
-utt1s2
-u1tu
-utu5e
-u6t5un
-utun8ge.
-u2t5ut
-1utv
-u3t4vil
-utvi5se
-2u3ty
-3u4t6yd
-u8ty.
-8utz
-ut1ø
-u5tør
-ut4ø8s
-utøs7t
-1utø4v
-ut5øya
-ut7åk
-u3tål
-ut1ån
-ut7år
-u1u
-u7uma
-u5ume
-u7ut
-u1v
-uve5di
-uve3in
-uve6ris
-uve3s
-u7ves.
-uvet5ø
-u6vev
-u5vi
-uvi6k
-uvjo8en.
-uv5ra
-uv9sa
-u5vu
-uvø9re
-u1w
-4ux1
-ux4a4
-uy6a
-u7yn
-u1æ
-uærle9ge
-u1ø6
-uøv5
-u9åra
-u7åre
-va3am
-va8an
-4vab
-6vadj
-vad1r
-vaf3
-vaf6r
-vai5r
-vai5s
-va6ka.
-va7kan
-va5ker
-6vakh
-va8ki.
-4vako
-vak3r
-7v6aksi
-4v3aksj
-vak5s6t
-1vakt
-vakt5r
-va1ku
-vak3v
-va3lan
-va4led
-val9eks
-4valel
-val4g3r
-vali9e8
-val3la
-val6mes
-va6l1o
-va1lu
-va4lun
-4valv
-va4løy
-val7å
-vam8pu
-4v3anal
-vand5s
-v4ane
-vane5s
-va4net
-2vang
-van4gr
-vang4s7
-va8ni.
-1v4ann
-van4nan
-van4niv
-vann6sti
-va4nom
-v4ans
-van5sem
-5vansk
-van5s6ki
-van3sm
-van3ti
-van9tr
-va4ny
-2vap
-va5po
-va4ra.
-va6rak
-va4ral
-va4ram
-va4rap
-va4re.
-va4reg
-va6rem
-va4res
-var8ka
-var5ma
-var4mee
-var4sa
-var4sk
-var4s5ti
-var4sv
-varta9la
-var6tem
-var4t5i4s
-4vasa
-va4sa.
-va9set
-6vasid
-va6sie
-va4sif
-va4sik
-va4sil
-va6sis
-va2sk
-vass5a
-vas4sau
-vas4sel
-vas6s7ø
-4vasta
-vat5a
-va3ta.
-va6t7e8l
-vatle6ge.
-5vatn
-va1to
-va6tr
-vat7ra
-vat1s
-4vau
-2v1av
-va4z
-2v1b2
-vba4ne.
-vber5g
-vbo6da
-6v1d
-v7dev
-vding5s4
-v7doi
-v7don
-vd6r
-vdu6en.
-vdu6er
-v7dø
-1ve.
-2ve1a2
-ve6ag
-ve6ar.
-2veb
-2vec
-ve2d1
-ve9dob
-vedom5
-veds2
-ved5s4k
-3ve8d5t
-vedø4
-vedå6
-2vee
-ve4er
-2vef
-ve6g5av
-ve5ge
-3vegg
-veggs4
-2vegj
-4vegl
-ve3gle
-ve5g6lød
-veg5n
-2vego
-6vegre
-veg5rett
-4vegru
-ve4gut
-ve4g5å
-2veh
-1vei1e
-vei3en
-4veill
-6veit
-2vej
-4veka
-5ve4ka.
-ve4ke.
-ve4ked
-4vekee
-2veki
-4vekj
-2vekl
-vek8la
-vek8le
-ve4kli
-2veko
-2vekr
-3veks
-vek4st
-veks4t5r
-1vekt
-vek4t5an
-vek5to
-vek4t5r
-2vekå
-5vel.
-ve4l5as
-5velat.
-5velatp
-6veld.
-vel4del
-8velds
-4veled
-6velei
-7velet
-4velis
-4velit
-6veliv
-2velo
-5veloc
-vels2
-vel3se
-velses5
-vel3sm
-vel5sp
-vel5st
-4velug
-vel5un
-vel5v
-2vely
-2velæ
-2velø
-velø8pa
-2vem
-ve5ma
-1ven
-ve8na.
-4venem
-ve5net
-ve6nete
-4venev
-ve4nin
-ven6n5i
-vennle7
-ve2no
-ven6sti
-ven6str
-vent6a
-ven5t6r
-vent4s
-4venty
-2venu
-ve4nus
-ve5ny.
-4venya
-ve4nym
-2ve3o4
-2vep
-1v8er.
-ver5ak
-ver3al
-8verau
-ver6des
-ver6din
-ver6dir
-verd7v
-ve3re.
-4vered
-4vereg
-5vereig
-4verek
-ve4rel
-ve6r7eng
-4verenn
-4verep
-ve5rer
-ve5res.
-4verett
-4veretu
-verfø5re
-ve9ri.
-veri3a
-ve4rial
-ve7rie
-4verik
-ver3il
-5verkn
-ver5m6
-ver6nal
-vern6s5
-ve9ro.
-ve3rom
-ver8ska.
-ver5ski
-ver7spo
-verta8la.
-verta6le.
-ve1ru
-5verum.
-6very
-verø6
-ver3øs4
-4verå
-v4es
-3ves.
-2ves4a
-ve5san
-4veset
-4vesh
-4vesi
-4vesj
-4veski
-2vesl
-ve9sli
-ve1s2m
-6ve3so
-4vesp
-ve5sted
-ves6t5end
-vest5o4v
-4vestr
-4vestu
-4vestø
-vesva7
-5vesynds
-2vesø
-ve1så
-veså5re
-v4et
-1vet.
-2veta
-8vetaka
-4veteg
-4vetek
-ve5te6s7
-6vetev
-2ve7ti
-4vetj
-2veto
-ve4to.
-veto7e
-9vetoke
-9vetoks.
-ve4tor
-2vetr
-1vets
-vett5sk
-6vetv
-4vety
-vety8e
-2veu
-ve8um
-2veva
-ve6vak
-ve5van
-ve9var
-2vevi
-vevi8sa
-2veø
-2veå
-1vê
-2v1f
-vfall4
-vfø7re.
-2v1g2
-v4ga.
-vga4le.
-vga6li
-vga8ve.
-v9ge
-v4gi.
-vgjer6s7
-vgo4
-v4gå.
-2v1h
-vhø4re.
-1via
-vi1an
-vi6bl
-vice5s
-1vid
-vi5de
-vide4o7
-vi4d5o4
-vid3r
-vid3s4
-vi1el
-vi5end
-vig4m
-vi4gu
-vi5gø
-vi4kat
-5vikb
-vi5ked
-7vikg
-vik5ke
-vik5n
-vi2k3o6
-3viks.
-vik5sa
-vik5s6l
-4vikt
-5vikti
-vi4k5ø4
-vi2l1a
-vi5la.
-vi4les4
-vi4l3in
-1vilj
-vil4l5an
-vil4led
-ville6de.
-vil4lei
-vill9ep
-6v5illu
-vil5m
-vil1o
-vil4sti
-vilt7o
-vil6tret
-vil4tri
-vi2lø
-4vim
-vim7p
-vim7u
-4vindl
-5vindu
-vine5st
-v6ing
-4vingn
-vin5gom.
-ving3r
-vin8g9u
-vin3na
-vin4ned
-6vinnh
-4v5innl
-4v5inns
-4vinnt
-vi6n5o6ver
-v2in2s
-vin7sja
-vin4tes
-vin5tre
-vi8pa.
-vi6pe.
-vip5s
-1vir
-4viro
-vis3ab
-vis3ak
-vis5and
-vi4see
-vi3sen
-vi6seng
-vi2s1k
-visk6re
-vis5m
-vi1so
-vis3om
-vi4sp
-vis9pa
-viss4p
-vis5ti
-vi4tak
-vi5tese
-5vi6t5j
-vi4t3o
-vi4tr
-vit7ra
-vit5re
-vit5skr
-vit6te6s7
-vi4t5un
-vitun6ge.
-vi4t5øy4
-vi4va.
-vi6ves
-vivi3
-v1ja
-v1je
-vje4t5a
-vje5t6e
-vje4t5r
-vjet3t
-vje4tu
-v1ji
-4v5jo
-vju3t
-6v3k6
-vk4le
-vk4ler
-vku4le.
-6v1l2
-v6lab
-vla6ga
-v9led
-v9leg
-vlei9e
-vl6el
-vle4se.
-v5lesn
-vle5str
-v6lesv
-vli7v
-vls9
-vlu9sa
-2v1m
-vma8le.
-vmo8de.
-vmord4
-vmå8la
-2v1n
-v3nad
-vna8ke.
-vn5al
-v9nar
-vn5dy
-vne7b
-v2ned
-vne7de
-v4nele
-v4neli
-v4nelo
-v2nem
-vne5r6e
-v4nero
-vne1s
-v4nesta
-v6neste
-v2nev
-vnor9s8kas
-vn4s5pa
-vn1s4t
-vn5t4
-vnæ4re.
-vn5ør
-vo1al
-vo2ar
-6vob
-2vof
-vof8fan
-vo4gu
-voi1
-1vok
-4voko
-voks3k
-vok6s5
-1vol
-voli7
-vo4litu
-vol4tes
-2vom
-vo4na
-vo9nal
-vo9nar
-von5de
-vons6
-von5sh
-2v1o6p
-2vord
-vor8da.
-vo1re
-vo9ren
-2v1org
-4voro
-vors7k
-1vos
-4vosj
-vos4se
-vo4teg
-vo4tel
-6votr
-vo1v
-vo4ve.
-vo6vi.
-2v1p4
-2vr8
-3v6rak
-v7rar
-v1re
-vregi3
-6vrenge
-4vrengi
-v6rengj
-v6rengt
-vrett4s
-v6ri.
-3vrid
-7vrie
-v6rigas
-vri6ma.
-vri8me.
-v3ring
-vrin5s
-vri6ve.
-v1ro
-v4rob
-v4rof
-v4rok
-v4rop
-vro8te.
-v1ru
-v7ry
-vrø3ve
-v1rå
-vrå8da.
-8vs
-v6sa.
-v7sali
-v6se.
-v4seg
-vs3egg
-v3s4el
-v4s5e4li
-vse4n
-v5sen.
-v4s5eng
-v5s4ens
-v2ser
-v6si.
-vs1in
-v1sk
-vs8ke
-v6s5kum
-vs1kv
-v1sl
-vs3lan
-vs6let
-vsmå8la
-v1s2n
-v6s7na
-vs3ne
-vs3ny
-vs3næ
-v4s3nø
-vs5od
-vsom5
-vs5oms4
-v7son
-vs1or
-vs2pe
-vsre6de.
-vs4s5å
-v1s2t2
-vste6ma.
-vs3til
-vs1v
-vsø6ke.
-vsøl5
-v2s5øy
-vsøy4er
-v8så.
-vså7re
-2v1t
-vta1
-v4ta.
-vta8ka.
-vta6led
-vta9len
-vta4lev
-vta6s
-v5tepp
-v5t4i
-vti8na
-vti8ne.
-v5t4r
-v3t2v
-vty8e
-1vu
-vu2d1
-vud5d
-vuden5t
-vuds4
-8vué
-vu8k
-2vul
-2vung
-vun4ge.
-6vu6o
-2v1ut
-2v1v
-vva8la
-vve8g9ing.
-vve6g7inga
-vven7n6i
-vvi5ke
-vvi6k7l
-vvi8s9an
-vvi4se.
-2vy1
-vya4
-vy7ens
-1væ
-væ1ra
-væ9ret
-væ8ta.
-v3ø4d
-vø4l
-vø7li
-vøm4met
-3vøre
-vø6re.
-v3ørke
-vør8na.
-vø3se.
-v5øv
-4v1øy
-vøy6e
-vøy7ene.
-vøy9enes
-1våa
-1våe
-4våend
-v4åk
-vå8ka.
-vå4ke.
-vå4kene
-vå9kene.
-vå4le.
-1vån
-vå5ne
-4vånu
-vå3ren
-vå8sa.
-vå5tes
-6våtf
-våt7å
-w2a
-wa6l
-5wald
-wal4k
-walk5o4
-wal4l
-2wap
-war6d7er
-wash3
-1wat
-wa3z
-w1b
-wboy5
-we2
-weate7
-we7b
-we3g
-we5re
-wes2
-wes3s
-wester6
-western7
-wet5
-wett4
-w4i2
-wi9ar.
-wich3
-3wicz
-wi3d
-5wi6en
-wi9er.
-wi5f
-wi3ni
-wi5ra
-wi3ren
-wi5ta
-wk3r
-w1l
-w1m
-wn5s
-wob5
-wou6
-wout7
-ws5
-ws6k
-wurs6
-wy2
-w1yo
-wyor2
-wyork3
-w1z
-xan5t
-x7b
-xga6
-x7h
-x1ic
-5x6id
-xi5e4
-x5k
-x1l
-x1p6
-x3r
-x1s
-x7t
-x6u
-xy2
-ya7b
-1yac
-ya5f
-ya4h
-y1ak
-yak6te.
-ya2l
-y7am
-y1an
-y6an.
-y2ana
-ya4ne.
-yan7k
-yan7sl
-y9ap
-y1ark
-y7arr
-yas4
-ya5si
-ya5t
-y1av
-y1b
-yba4ne.
-yb4bed
-ybde3
-ybo2
-ybu6er
-ybue7re
-ybu7ern
-ybyg5
-y1c
-y8ce.
-y8cé
-y2co3
-y6dab
-yd5av
-4ydd
-yd6dela
-yd4dep
-y6d7enh
-y4deo
-y2dep
-y4dero
-y2d1is
-yd6je
-yd1ji
-ydo4
-yd3op
-yd5ov
-y1dr
-y4d4r5au
-yd1re
-yd5rem
-y4dro
-y4d4r5oks
-yd3si
-yds4v
-y2du
-yd1un
-ydø4
-y4døm
-ydør5
-yd1øs
-4y1e
-yed8l
-ye6dre
-y2ek
-y5eks
-ye4len
-ye6let
-yel4s5j
-yel4sk
-yels3m
-yel6s5t
-y2em
-ye2n
-y8ener
-y2enh
-ye5ni
-y2enk
-y2enl
-yenle6ge.
-yens4
-y4ense
-y3e6re
-ye4rel
-y3ern
-yer8sk
-y4erst
-yes2
-ye5sm
-ye2t
-ye9te
-ye5ty
-y2ev
-y1f
-yfan9
-yfjell4
-y4fle
-yf5le.
-y8ga.
-yga8ve.
-yg4dal
-yg4dek
-yg4del
-yg4dep
-yg2do
-yg2d1r
-yg2d1y
-yg2dø
-yge5i
-ygen5s
-y6geret
-y2ges
-y4gev
-yg6gam
-ygg7art
-ygges4
-yg5gj
-ygg5l
-yg6gr
-ygg3s2
-yg6gu
-yg6g5å
-ygi2
-y5glo
-yg7m
-yg6r
-y1h
-yhes5
-y1i
-y9in.
-yis7t
-y1j
-6yk
-y1ka
-ykap3
-y6kara
-y2ke
-y7kel.
-y5kelen
-y3keli
-y7kels
-y3ken
-y3ker
-y4kerel
-y4kero
-y5ket.
-y9kets
-y1ki
-y1kj
-y4kjar
-y5kjare
-ykjeva8ne.
-yk4kana
-yk4k5enh
-yk5kesj
-ykke6s5ta
-yk1kj
-ykk5ni
-ykk4s5k
-yk8k5vi6
-yk4ky
-yk1la
-yk6lest
-y1klo
-y3klub
-yk3lus
-y5klæ
-y1ko
-y2koa
-y6koli
-y4komo
-y5kosa
-y2kot
-y5koti
-y1kr
-yk1s
-yku6le.
-yk3var
-y1la
-yla8ga
-yl4dan
-yl4derk
-ylde4s
-yld1r
-yld5s6k
-yle6ge.
-y7les
-y4lev
-yligh9
-yl5k8
-ylke2
-ylke4s3
-ylkesla8ga
-yl4lev
-yll5is.
-yl3s6
-ylst7re
-yl5tet
-y8luse
-3ylven
-y1ly
-ylæ7re
-y6mei
-y4mete
-ym4fe5d6
-ym5jara
-y4mo.
-ymo5e
-ym3p2
-ym1s
-ym8sa.
-ym4se
-ym8sl
-ym6ta.
-ym6te.
-ymå6la
-y9n8and
-yndes8
-yn5det
-y2nel
-yn7eld
-yner3g
-yne5s4
-ynesi8
-y6nev
-yn5gel
-yn4gem
-yn2gr
-yn4g5ø
-ynko3
-yn6k5v
-yn5na
-yn5ne
-ynn3s4
-ynn4ø
-y3no
-y4no.
-yns1
-yns6are
-yn4sem
-yn9set
-yn2si
-yn2sk
-yns9ket.
-yns7ki
-yn5skj
-yns7kjele
-yn8s9kjer.
-yn4st
-yn2su
-yn4tap
-yn8teg
-ynt5ei
-yn4tek
-yn6tete
-yo4gat
-yo6gi.
-y1om
-yon4
-yon5nen
-yo6nu
-y1o2p
-y1o2r
-yor6da
-yo5re
-you4
-yout5
-yp8e
-y2pe.
-y4pee
-y4pena
-y4penet
-ype4rel
-y6peta
-y1pi
-y4pi.
-y7ping
-yp5inn
-ypin8na
-y1p2l
-y5po
-yp7p6a
-yp3pe
-y1pr
-yp5s8
-yp4tok
-y3pu
-y1ra
-yra8ka
-y4r3a6l
-y7rarb
-y4r5au
-yr5av
-yr7da
-yr5dø
-y7real
-yre3in
-y5reis
-yrek4
-y7rek7k
-y3rels
-y5rems
-y1ren
-yre9ne
-y4reo
-y6rerel
-y4rero
-yre5sc
-y5rest.
-yre5ste
-y5reste.
-yres6ten
-y1ret
-y4reta
-y4rete
-y4reto
-y7retø
-yr7ga
-y1ri
-yrin5g6
-yri6ene.
-y4rif
-yri8ka.
-yr3inn
-yris6p
-yr4kee
-yrke4s
-yr5kj
-yr3m
-y7roe
-y3romm
-yr1op
-y5rosk
-yr5r6
-yr4san
-yr7set
-yr5sk
-yr6skj
-yr6skr
-yr2sp
-yrs7tan
-yrs5tar
-yrs7tene
-yrs5tens
-yr3sti
-yr4sv
-yr3te
-yr6tek
-yr2t3r
-yrty8
-y1ru
-yrul8la.
-yr5ut5r
-yr3v
-y1ry
-yr3øk
-yrøy4
-y1rå1
-yråd2
-yrå8da
-yråde7r
-yrå6ders
-y4rådi
-y2råm
-y6råst
-y4råt
-y4råv
-2ys
-y1sa
-ys6a7kers
-ys4e
-yse4bu
-y4sed
-y4see
-yse5ei
-y2seg
-y2sek
-ys7ekte
-y2sem
-y4sera
-yse7rid
-yseri7e6
-y4sesj
-y4sesk
-y4se5s6l
-y4sest
-y5seste
-y6sesu
-y9set.
-y4seu
-ys6i
-ysi8e
-y5sjk
-y7skag
-ys6kara
-ys7kare
-ysk9au
-ys2k3l
-ysk5øs
-ys4mi
-ys4nø
-y1so
-y4s5or
-ys2pe
-ys5pis
-y5s4po
-ys6sak
-ys6sam
-ys4s3ei
-ys4s3ek
-ys4s5il
-ys2sj
-ys4sku
-ys2so
-ys2sp
-yss5pe
-ys4sta
-yss5tab
-ys4s5ti
-ys4su
-ys2s5v
-ys2t
-ys3ta
-y8star.
-ys4tat
-ys3tel
-ys3ten
-y4s3ter
-ysterie7n
-ys7tesl
-y2s3ti
-yst3op
-yst3r
-ys5t6ry
-ys6ty
-y1su
-ys1ve
-ys5år
-y1ta
-y4t3ana
-y2tee
-y4tef
-y2teg
-yt5e4ge
-yte3in
-y4teka
-y4teki
-y4tena
-y4teno
-y2teo
-y4teret
-yte6ro
-yters6
-yter5ske
-yte5r6ø
-y2tes2
-y2tet
-y6tj
-yt9ja
-yt5jen
-yt9jer
-yt4mei
-yt4mes
-y3to
-yt8ra
-yt4re.
-yt5rer
-yt1ri
-yt4rik
-y5trå
-yt4s3en
-yt3sk
-yt5sv
-4ytt
-yt5t6a
-ytt4e
-ytte8r9end
-yttes6
-yt4test
-yt8tien.
-yttsa6me.
-2y3tu
-y1ty
-yt4ys
-y7tå8
-y1u
-y6ua
-y8ue
-yu8g
-yu4l
-y1v
-y4vak
-yva8la
-y2ved
-yve4ria
-yve4ris
-y4vese
-y6vesy
-y6vev
-yvi8sa
-yvi6se.
-yv1år
-yvå5te
-y1w
-y5æ
-y5ø
-y1å2
-za5b
-3zae
-4zaes
-za4g5
-za5k6h
-zani4
-zania5
-5za5v
-z1b4
-zbu4
-z1c
-z1d
-1ze
-zea1
-zebu9
-zeli5
-zen3s
-4z3ense
-4z3ent
-z1f
-z1g
-5zha
-z3hi
-z5hu
-5zie
-1zifi
-5zing
-z5int
-1zis
-6zisty
-4zi5s4v
-2zisy
-z1k
-4z1l
-z1m
-5zo.
-5zoe
-zo1f2
-zo4no
-zo5re
-6zos
-z1p
-z5r
-z1s
-4z1t
-zu3e
-z1un
-z1v
-z1za.
-z2z3el
-æ5by
-æ2bø
-æ5de
-æ7di
-æ1f
-æg6
-æ2k
-æ3ke
-æ5ki
-æ8kj
-æk1ja
-æk7je.
-æk9jer.
-ække7
-ækkel6
-æk6l
-æ1la
-æ4le.
-æ2le3d
-æ4lena
-æ4lev
-æl5j
-ælsle9
-æ4r1ak
-æ3rane
-æ4rans
-æ4rarb
-æ6rarbe
-ær4arte
-æ4r1at
-ærbu5e
-ær1d4
-æ1re
-æ2rea
-æ4red
-æ2ref
-æ2reg
-æ8r7ei
-ærei6e
-æ2rek
-æ6r7eld
-ære5ne.
-ære7nes
-æ2rep
-æ5rern
-æresa4m
-ære6skr
-ære4sl
-ære4sp
-æ4reta
-æ4retek
-æ9rets
-æ2rev
-4ærf
-ærgen5
-ærhø8
-æ1ri
-æri6e7ne
-æ4r3il
-ær3ins
-æri6s
-ær5is.
-4ærk2
-ærle6ge.
-4ærm
-ærmå8la
-ær3n
-ær5ne4
-ær4nå
-æ2r7o6
-ærom5
-æroms4
-ær5r
-ær6sel
-ær4s5il
-ær1sk
-ær7s6no
-ær2sp
-æ2r1u
-ærut5
-ær3v
-æ2r1ø4
-ærøy7e
-ær3å4
-æ8se.
-æ2sj
-æ2s1k
-æ5ta
-4æte
-æ4te.
-æt4r
-æt4ta
-æ5va
-ævar5
-æve4s
-æ5vi
-6ø1a2
-øa7re
-øau4
-ø1b
-øbe6lev
-øbe4li
-ø2bl
-øbl9u
-øb4r
-ød3ag
-ø4dak
-ød3d
-ød9de.
-ø2de.
-ø4dede
-ø6def
-ø4dela
-ø4dem
-ø4deo
-ø4deri
-ø4dero
-ø5dj
-ød1r
-ød4red
-ød4rek
-ød4rep
-ød2sc
-ød6s5ek
-øds7ke
-øds4ko
-ød6sku6
-øds4mu
-ødt6r
-ø2du
-ød3und
-ø4d5ur
-ø6d5ø
-4ø1e2
-ø4ed
-ø5ene
-ø5ep
-ø3e6re
-øfe8
-øf3fe
-øf6j
-øf8la.
-øf8le.
-ø5fn
-øfte5s
-øg1
-øg2a
-øg5ak
-øg5al
-ø7gar
-ø5gas
-ø3ger
-øg5gl
-øg8gå
-ø7g4j
-øglo8ve
-øgn6s7p
-ø2g2r
-øg5re.
-øg5res.
-øgs2
-øg4ste
-øg4str
-øgta5
-øg4u
-ø1h
-ø4i
-øi4e
-ø5ing
-ø5isk
-ø4it
-ø1j
-6øk.
-6ø1ka
-ø5kav
-øka8ve.
-ø6keh
-ø4kelo
-ø6kerada
-ø6kerel
-ø4ke5ru
-øke1s
-ø6kese
-ø8kesl
-ø4kest
-ø4kete
-ø1ki
-4økj
-ø5kjare
-ø5kjas
-ø1kje
-2økk
-øk5kel
-øk5ket
-øk4k5l
-økk5r
-øk3lag
-øk3lan
-2økna
-1øko
-øk5opp
-ø1kr
-ø8krar
-øk8sa.
-øk6se.
-øk4ses
-øk4si
-øk2so
-øks1t6
-øks5ti
-øku4r
-øk5ur.
-øk5ure
-øk7ve
-ø7ky
-ø1la
-ø2lah
-ø6lam
-øl3d
-ø4ledi
-ø6lelu
-ø4lero
-ø6leta
-ø4le5te
-ø2lev
-øl4gera
-ølge5s6v
-øl1j
-øl2ke
-ølke7s
-øl4lese
-øl9leti
-øl6lev
-ø1lo
-øl7op
-ølrå4
-øl6sel
-øl4sere
-øl4se3s
-øls6t4
-øl5s4v
-ø5luk
-øl7ut
-ølva6
-øl4var
-øl4v3ei
-øl6vek
-øl8vel
-ølv7erk
-øl4v3in
-ølv5o
-ølv7r
-ø1ly
-ø4me.
-ø9met
-1ømfi
-ø5mi
-ømini6
-øm4med
-øm4mero
-ømmet6
-øm4metr
-øm3op
-øm4pel
-øm7s6p
-øm1st
-øm5svi
-ø2m1u
-ømå8la
-øn2ad
-ø6n5al
-ø5nas
-ø2nem
-ø3nes.
-ø9nese
-ønhø8re.
-4ønn
-øn4nal
-ønni4
-øn4n5it
-ønns5al
-ønn4s3e
-ønn4s5i4d
-ønns5kje
-ønns5kre
-ønns5ku
-ønns3l
-ønns3t
-øn2nø
-ø6nom
-øn2s
-øn9sa.
-øn5sak
-øn5sam
-øn5se.
-øn3ser
-øn3skj
-øn8skjer.
-ønst3r
-ønst9ra
-ønt1
-øn2ta
-øn2to
-øn7u8
-ø1o
-ø4peda
-ø6pe5i
-ø4penu
-ø5pero
-ø4peru
-øpes4
-ø4pete
-ø4peti
-ø1pi
-øp3li
-øp5p
-øp6pl
-ø1pr
-øp2s1
-øpsa4
-øpsla8ga
-øps8leg
-øp5ste
-ø1ra
-ø2ra.
-ø2r1af
-ø2r1ak
-ø2r1a2m
-ø4rans
-ø4r3ant
-øra8sa
-øra6si
-ø4r7au
-ørd4e
-ø1re
-ø2rea
-ør7edd
-ø6redu
-ø2ref
-ø2reg
-ø6rein
-ø2rek
-ørek6l
-ør3eks
-ør5ekt
-ørele8se
-ø9relet
-ø4r5eng
-ø2re5o4
-ø2rep
-ø6reret
-ø4reru
-øre1s2
-ø5res.
-ø4rese
-ø6resi
-ø7reskrivi
-ø8reso
-ø4rest
-øre6s7v
-ø4reta
-ør1eu
-ø2rev
-ør5fe
-ørge5s
-ø1ri
-øri8m
-ør4jet
-ør4keri
-ør4kes
-ør8k9lag
-ør6k5n
-ør4kve
-ør4kå
-ørla8ga
-ørm9ut
-ørn4e
-ør4nere
-ør4nes4
-ør4n3u
-ør4n5ø
-ør1o
-ø5r6ok
-ø1ros
-ø4r3ost
-øro4v
-ør4rek
-ør4rep
-ørri4
-ør4r5is
-ør4råt
-ør4sak
-ørsa8ka
-ørsa6me.
-ør4sc
-ør6ses
-ør2si
-ør5ski
-ør4skr
-ørs6lev
-ør4som
-ør4spe
-ør2st
-ørs9tar
-ørste5i
-ørs5tens
-ørs5tig
-ør3sto
-ørs9u
-ør2sv
-ørs1å
-ør9tar
-ør4tek
-ør6ti9a
-ør4tide
-ør8tien.
-ør6tif
-ør3to
-ørum5
-ø6rut
-ør5v
-ør1ø2s
-ørø1v
-ør1åp
-ø1sa
-øsa6me.
-ø8sarar
-ø1sc
-ø2se.
-ø2sem
-øse4n5o
-øseri7
-øserie6
-øs5jo
-øs7kar
-øs1l
-øs4lag
-ø4slu
-øs2me
-ø1s2p
-øs8tas
-øst9ast
-øs6teg
-øs5terse
-øst9ett
-østo2
-øst5of
-øst5ov
-øst1r
-øst3re
-østø4
-ø2s1ø2
-4øt
-øt3ak
-ø9tar
-øta4s
-øt5asa
-ø2te.
-ø2tea
-ø6tef
-ø6tege
-ø2tei
-ø2tel
-ø5tela.
-ø3ten
-ø4teni
-ø3ter.
-øte3ru
-ø2te1s
-øte7sn
-ø4teta
-øt7ri
-øt1sa
-øt3s4p
-øt7s6å
-øtså9re
-øt4tero
-øt6test
-øtt5eta
-øtt5ete
-øtt5ra
-øtt7ri
-øtt1s2
-øttså7re
-øt4tur
-øt4ty
-ø1tu
-ø5ty
-ø1u2
-øug8la
-øv5aa
-øv5ans
-øve5in
-ø4vek
-øveren8
-øve1s
-øves4t
-øve3te
-ø5vik
-øv6l7ut
-øv7ne
-øv6nø
-øv9o8
-øv1r
-øv5reb
-øv1s
-øv9sa
-ø5vå
-øy3al
-øya2n
-7øyan.
-9øy8ans
-øy4dek
-øy4dere
-øyd8i
-5øyeb
-øy7e4de
-øy2ee
-øy4ele
-øye4n
-øy4erf
-øy1gl
-øy3ke.
-øyks4
-øyk5t
-2øyl
-øy4led
-øy4leg
-øy5na
-øy5ni
-øy3o
-6øyp
-øy3pe.
-øy4pel
-øy4ra.
-øy6rarar
-øy4rare
-øy4rer
-øy5rer.
-øyri6v
-øy6run
-øy3rø
-øy1s
-øy5s4ar
-øy5si
-øys2l
-øy4sm
-øy4spi
-5øysund.
-7øysunds
-øy4tei
-øy4tel
-øy4tere
-øyte5s6
-øyti7da
-øy1tr
-øy2t3y6
-øy5tø
-øy4vei
-5øyvå
-ø1ø2
-ø5å6
-å1a
-åa4g
-åak6ta
-åa4n5
-åan8ka.
-åan6ke.
-å2ar
-å5aran
-åau4re
-å1b4
-åba8ne.
-åber2
-åbo9ta
-6å1d
-å7dan
-å9dar
-å4ded
-å4dek
-å4dela
-å4delo
-å4dem
-å4deo
-å4dep
-å4dere
-å4deri
-å6dero
-å2des
-å7di
-åd4ra
-åd8re
-åds1
-åd2sk
-åd3s4la
-åd7s8leg
-åd7slo
-åd3slå
-åd1s2n
-åd3s4pe
-åd7spu
-åd5st
-åd6ste
-4å1e
-å2ele
-åem8na
-åe2n
-å7ens
-å3er
-å3e6re.
-å1f
-åfe6
-åfø5re
-2åg
-å4ga.
-åg7ald
-å4ge.
-åg7ei
-å2ges
-ågna5
-åg5ne
-åg4r
-åg5rin
-ågs6k
-åg5sl
-åg7sp
-ågs4t
-ågu4l
-åg5ø
-å4gå.
-å1h
-å1i
-å1j
-å1ka
-å3kan
-å3kar
-å4karb
-åk7av
-å4keh
-å3ken
-å4kena
-å4k3enh
-å4kere
-åke5s
-å4kesl
-å5kevi
-å1ki
-å6kid
-å1kj
-åk1k
-åk5ka
-åkk6l
-åk7kr
-åk7lau
-åklist7
-åk3læ
-å1ko
-åk3opp
-åko4s
-åk6ra
-åk5røk
-åk3rå
-åk1s2
-åks7l
-åk3t4
-åku8
-å5k8ul
-åkva8la.
-åkøy8rar.
-å2k3å
-å1la
-å5l6amp
-å6larb
-å9las
-ål5au8
-ål9av
-ål3d
-å2lef
-ål5eini
-å2lek
-å2lem
-å4l5enh
-å4leni
-åle6ris
-å2le1s2
-å4lete
-å2lev
-ålgå6
-å6lio
-ål5j
-ålla6ga
-ål3or
-ål4san
-ål4sek
-ål4ser
-åls7i
-ål2sp
-ål4sti
-ålsy8na
-ål5ti
-ålti5d
-ål1u
-ålul8la
-å1ly
-å2l1øy
-åløy4e
-ål5å6k
-ålå8te.
-6åm
-å6me.
-åm4li.
-åm1om
-åm5øy
-å3nar
-å9nas
-ånd3r
-ånd4sa
-ånd4se
-ånd4so
-å4ne.
-åned4
-åneds5
-åne5i6
-å2nel
-ånely6
-å5nes.
-å3net
-å4netr
-å3ni
-ån5o
-å9ny
-å3o
-åp2e
-åpe4n3a
-åpe4n5i
-åpen3s
-å5per
-å6pero
-å1pi
-å1pla
-åp4ne.
-åp7p
-å1pr
-åpra5
-åp2s1
-åp6ta
-å4på
-år3ak
-å9ran
-å7rara
-ård5str
-å2re.
-å5rei
-å6rel
-åre7s
-å4rest
-åreta8ka
-årfi4
-å7riv
-år3k2
-år4le.
-årmå8la
-2årn
-årn5s
-år3on
-år3op
-årpo8
-år2s
-års5af
-års3el
-år3sem
-års3ko
-år8sku
-årsla8ga
-år3sol
-års3ta
-år7ste
-års3ti
-år7sto
-år5stu
-års1u
-års1v
-år5sy
-år5u4k
-år3un
-år5y4
-å1rø
-å5r8å
-ås2
-å1sa
-ås7au
-å4se.
-å4see
-ås5eid
-å4sek
-å4sem
-åseri7e6
-åse3s2
-å4sesm
-å4seso
-åse5ta
-ås3h
-å8si.
-ås5ka.
-ås9kene
-ås8ki
-å1skj
-ås7kop
-å1skr
-å5sku
-å1sl
-ås5ne
-ås3ni
-å5so
-å1sp
-ås7pl
-ås5sa
-ås5se
-ås3si
-åss3k
-4å1st
-å7stei
-åsu4
-ås3un
-ås7ut
-ås7væ
-ås5øy
-åså9
-å1ta
-å4ta.
-åtaks5
-åta2l
-åta9la
-åtale3
-åta5le.
-åta5len
-å4tang
-å4tark
-å4t5arm
-å2te.
-å2tea
-å4tee
-å2t1ei
-åte6ke.
-å4teo
-å9ter
-å2tes
-5åtferd
-å5ti
-åti7da
-2åtn
-å1to
-åt7ov
-6åtp
-åt1re
-åtri6pa.
-åtri8pe.
-åt1ru
-åt5sk
-åt1t
-åt4ted
-åt4ti
-ått3o
-åt4tri
-åtts4
-åt6t5æ
-åt1u
-åt4un
-åtva5ra
-åtva7re
-åt5ve
-å5ty
-åt1øv
-å3u
-åun8ge.
-å1v
-åv4a
-å2ve7d
-å4veg
-åve5l
-å4veni
-å9ver.
-å2vev
-åvlø8pa
-åv7s6
-å7vy
-åvæ4re.
-å1ø8
-åøy4
-åøy5ene
-}
-
-% end pattern data
-
diff --git a/Master/texmf-dist/tex/context/patterns/lang-pl.hyp b/Master/texmf-dist/tex/context/patterns/lang-pl.hyp
index 11af8cb0740..060fa5083f1 100644
--- a/Master/texmf-dist/tex/context/patterns/lang-pl.hyp
+++ b/Master/texmf-dist/tex/context/patterns/lang-pl.hyp
@@ -1,6 +1,6 @@
% generated by mtxrun --script pattern --convert
-% for comment and copyright, see ./lang-pl.rme
+% for comment and copyright, see e:/tmp/patterns/lang-pl.rme
% used: a b c d e g h i j k l m n o p r s t w y z ó ą ł ż
diff --git a/Master/texmf-dist/tex/context/patterns/lang-pl.pat b/Master/texmf-dist/tex/context/patterns/lang-pl.pat
index 9739f19deaa..6c2e61a83af 100644
--- a/Master/texmf-dist/tex/context/patterns/lang-pl.pat
+++ b/Master/texmf-dist/tex/context/patterns/lang-pl.pat
@@ -1,6 +1,6 @@
% generated by mtxrun --script pattern --convert
-% for comment and copyright, see ./lang-pl.rme
+% for comment and copyright, see e:/tmp/patterns/lang-pl.rme
% used: a b c d e f g h i j k l m n o p r s t u v w x y z ó ą ć ę ł ń ś ź ż
diff --git a/Master/texmf-dist/tex/context/patterns/lang-pt.hyp b/Master/texmf-dist/tex/context/patterns/lang-pt.hyp
index 2c992d59659..083b38298c1 100644
--- a/Master/texmf-dist/tex/context/patterns/lang-pt.hyp
+++ b/Master/texmf-dist/tex/context/patterns/lang-pt.hyp
@@ -1,6 +1,6 @@
% generated by mtxrun --script pattern --convert
-% for comment and copyright, see ./lang-pt.rme
+% for comment and copyright, see e:/tmp/patterns/lang-pt.rme
% used: a d e f h o r s t w
diff --git a/Master/texmf-dist/tex/context/patterns/lang-pt.pat b/Master/texmf-dist/tex/context/patterns/lang-pt.pat
index 3f168c334c4..dbf61783003 100644
--- a/Master/texmf-dist/tex/context/patterns/lang-pt.pat
+++ b/Master/texmf-dist/tex/context/patterns/lang-pt.pat
@@ -1,6 +1,6 @@
% generated by mtxrun --script pattern --convert
-% for comment and copyright, see ./lang-pt.rme
+% for comment and copyright, see e:/tmp/patterns/lang-pt.rme
% used: a b c d e f g h i j k l m n o p q r s t u v w x z á â ã ç é ê í ó ô õ ú
diff --git a/Master/texmf-dist/tex/context/patterns/lang-ro.hyp b/Master/texmf-dist/tex/context/patterns/lang-ro.hyp
index 60563e14b2f..33982f8cfc2 100644
--- a/Master/texmf-dist/tex/context/patterns/lang-ro.hyp
+++ b/Master/texmf-dist/tex/context/patterns/lang-ro.hyp
@@ -1,6 +1,6 @@
% generated by mtxrun --script pattern --convert
-% for comment and copyright, see ./lang-ro.rme
+% for comment and copyright, see e:/tmp/patterns/lang-ro.rme
% used:
diff --git a/Master/texmf-dist/tex/context/patterns/lang-ro.pat b/Master/texmf-dist/tex/context/patterns/lang-ro.pat
index 9c633ce1781..8c6b6a4608b 100644
--- a/Master/texmf-dist/tex/context/patterns/lang-ro.pat
+++ b/Master/texmf-dist/tex/context/patterns/lang-ro.pat
@@ -1,6 +1,6 @@
% generated by mtxrun --script pattern --convert
-% for comment and copyright, see ./lang-ro.rme
+% for comment and copyright, see e:/tmp/patterns/lang-ro.rme
% used: a b c d e f g h i j k l m n o p r s t u v x z î ă ș ț
diff --git a/Master/texmf-dist/tex/context/patterns/lang-ru.hyp b/Master/texmf-dist/tex/context/patterns/lang-ru.hyp
index b9ce0de9b72..0e5852ed423 100644
--- a/Master/texmf-dist/tex/context/patterns/lang-ru.hyp
+++ b/Master/texmf-dist/tex/context/patterns/lang-ru.hyp
@@ -1,6 +1,6 @@
% generated by mtxrun --script pattern --convert
-% for comment and copyright, see ./lang-ru.rme
+% for comment and copyright, see e:/tmp/patterns/lang-ru.rme
% used: а б в г д е ж з и й к л м н о п р с т у ф х ц ч ш щ ы ь э ю я
diff --git a/Master/texmf-dist/tex/context/patterns/lang-ru.pat b/Master/texmf-dist/tex/context/patterns/lang-ru.pat
index 2bb7c5fe3a7..7f5a4502b89 100644
--- a/Master/texmf-dist/tex/context/patterns/lang-ru.pat
+++ b/Master/texmf-dist/tex/context/patterns/lang-ru.pat
@@ -1,6 +1,6 @@
% generated by mtxrun --script pattern --convert
-% for comment and copyright, see ./lang-ru.rme
+% for comment and copyright, see e:/tmp/patterns/lang-ru.rme
% used: а б в г д е ж з и й к л м н о п р с т у ф х ц ч ш щ ъ ы ь э ю я ё
diff --git a/Master/texmf-dist/tex/context/patterns/lang-sk.hyp b/Master/texmf-dist/tex/context/patterns/lang-sk.hyp
index 2967e5d1c41..ee41c96034f 100644
--- a/Master/texmf-dist/tex/context/patterns/lang-sk.hyp
+++ b/Master/texmf-dist/tex/context/patterns/lang-sk.hyp
@@ -1,6 +1,6 @@
% generated by mtxrun --script pattern --convert
-% for comment and copyright, see ./lang-sk.rme
+% for comment and copyright, see e:/tmp/patterns/lang-sk.rme
% used: a b d e i k m n o p r s t y ó ť
diff --git a/Master/texmf-dist/tex/context/patterns/lang-sk.pat b/Master/texmf-dist/tex/context/patterns/lang-sk.pat
index 24e29989620..c2b22beb006 100644
--- a/Master/texmf-dist/tex/context/patterns/lang-sk.pat
+++ b/Master/texmf-dist/tex/context/patterns/lang-sk.pat
@@ -1,6 +1,6 @@
% generated by mtxrun --script pattern --convert
-% for comment and copyright, see ./lang-sk.rme
+% for comment and copyright, see e:/tmp/patterns/lang-sk.rme
% used: a b c d e f g h i j k l m n o p r s t u v w x y z á ä é í ó ô ú ý č ď ľ ň ŕ š ť ž
diff --git a/Master/texmf-dist/tex/context/patterns/lang-sl.hyp b/Master/texmf-dist/tex/context/patterns/lang-sl.hyp
index db032fe4aba..1dc0ccf59d2 100644
--- a/Master/texmf-dist/tex/context/patterns/lang-sl.hyp
+++ b/Master/texmf-dist/tex/context/patterns/lang-sl.hyp
@@ -1,6 +1,6 @@
% generated by mtxrun --script pattern --convert
-% for comment and copyright, see ./lang-sl.rme
+% for comment and copyright, see e:/tmp/patterns/lang-sl.rme
% used:
diff --git a/Master/texmf-dist/tex/context/patterns/lang-sl.pat b/Master/texmf-dist/tex/context/patterns/lang-sl.pat
index bde28598f49..17e1a9989ce 100644
--- a/Master/texmf-dist/tex/context/patterns/lang-sl.pat
+++ b/Master/texmf-dist/tex/context/patterns/lang-sl.pat
@@ -1,6 +1,6 @@
% generated by mtxrun --script pattern --convert
-% for comment and copyright, see ./lang-sl.rme
+% for comment and copyright, see e:/tmp/patterns/lang-sl.rme
% used: a b c d e f g h i j k l m n o p q r s t u v w x y z č š ž
diff --git a/Master/texmf-dist/tex/context/patterns/lang-sr.hyp b/Master/texmf-dist/tex/context/patterns/lang-sr.hyp
new file mode 100644
index 00000000000..cd2c5bc3197
--- /dev/null
+++ b/Master/texmf-dist/tex/context/patterns/lang-sr.hyp
@@ -0,0 +1,137 @@
+% generated by mtxrun --script pattern --convert
+
+% for comment and copyright, see e:/tmp/patterns/lang-sr.rme
+
+% used: а б в г д е з и к л м н о п р с т у ц ш ј њ ћ
+
+\hyphenation{
+на-дно
+на-тка
+на-тка-ти
+на-тка-ше
+о-дно
+о-тка
+о-тка-ти
+о-тка-ше
+по-дно
+по-дне
+по-тку
+по-тки
+по-тке
+по-тка
+у-дно
+и-где
+и-гдје
+сву-где
+све-где
+сву-гдје
+све-гдје
+по-не-где
+по-не-гдје
+и-зби
+и-збе
+и-зба
+и-зби-ци
+и-зби-це
+и-зби-ца
+и-звит
+и-зим
+изо-ба-ру
+изо-ба-ри
+изо-ба-ре
+изо-ба-ра
+и-скок
+и-ско-ку
+и-ско-ка
+и-скон
+и-ско-ну
+и-ско-ни
+и-ско-на
+и-скру
+и-скре
+и-скри
+и-скра
+и-скрав
+и-спод
+и-спо-да
+и-стру
+и-стри
+и-стро
+и-стре
+и-стра
+на-ју
+на-ји
+на-јо
+на-је
+на-ја
+на-јам
+на-јест
+о-браз
+о-брет
+о-дви-ка
+о-дран
+о-дра-ти
+пре-двој
+ра-зму
+ра-зми
+ра-змо
+ра-зме
+ра-зма
+ра-зну
+ра-зни
+ра-зно
+ра-зне
+ра-зна
+ра-склоп
+ра-спе-лу
+ра-спе-ло
+ра-спе-ла
+ра-спе-ћа
+ра-спе-ћу
+ра-спе-ће
+ра-сту
+ра-сти
+ра-сте
+ра-ста
+ра-стом
+ра-стер
+ра-шћу
+ра-шћи
+ра-шћо
+ра-шће
+ра-шћа
+у-зно
+у-зна
+у-зни
+у-зник
+у-зрок
+у-ску
+у-ски
+у-ско
+у-ске
+у-ска
+ус-кос
+у-спио
+у-спео
+у-спор
+у-шћу
+у-шће
+у-шћа
+ин-те-рес
+тран-су
+тран-са
+тран-сом
+те-ле-ви-зор
+те-ле-ви-зо-ру
+те-ле-ви-зо-ром
+те-ле-ви-зо-ра
+те-ле-ви-зо-ри
+при-ти-сак
+при-ти-с-ком
+при-ти-с-ку
+при-ти-с-ка
+по-ја-ви-ће
+на-пу-шта
+про-гра-ми-ра-ње
+сни-ма-ња
+сни-ма-ње} \ No newline at end of file
diff --git a/Master/texmf-dist/tex/context/patterns/lang-sr.pat b/Master/texmf-dist/tex/context/patterns/lang-sr.pat
new file mode 100644
index 00000000000..77ca7ef17b1
--- /dev/null
+++ b/Master/texmf-dist/tex/context/patterns/lang-sr.pat
@@ -0,0 +1,2432 @@
+% generated by mtxrun --script pattern --convert
+
+% for comment and copyright, see e:/tmp/patterns/lang-sr.rme
+
+% used: а б в г д е ж з и к л м н о п р с т у ф х ц ч ш ђ ј љ њ ћ џ
+
+\patterns{
+.ђ2
+.ћ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б3лок
+.а2б3лу
+.а2б3ориг
+.а2б3реак
+.а2б3рог
+.а2б3узус
+.а2д3ерац
+.а2д3ј
+.а2д3лат
+.а2д3рен
+.а2д3рог
+.а2д3верб
+.а2н3а4е2ро
+.а2н3афиј
+.а2н3афрод
+.а2н3аго
+.а2н3акуз
+.а2н3алд
+.а2н3алфа
+.а2н3алг
+.а2н3амерт
+.а2н3андр
+.а2н3ант
+.а2н3апто
+.а2н3арх
+.а2н3егер
+.а2н3екл
+.а2н3екум
+.а2н3елек
+.а2н3енер
+.а2н3епи
+.а2н3ерг
+.а2н3ерит
+.а2н3есте
+.а2н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набат
+.а2набаз
+.а2набио
+.а2набол
+.а2надем
+.а2надипл
+.а2надоз
+.а2нафаз
+.а2нафила
+.а2нафон
+.а2нафор
+.а2наген
+.а2нагно
+.а2награ
+.а2нахор
+.а2нахро
+.а2накал
+.а2накам
+.а2накат
+.а2накеф
+.а2накла
+.а2накли
+.а2накој
+.а2накол
+.а2накрон
+.а2накру
+.а2налеп
+.а2налис
+.а2налит
+.а2нализ
+.а2намне
+.а2нанео
+.а2напла
+.а2напле
+.а2напне
+.а2напно
+.а2напро
+.а2напти
+.а2нарт
+.а2насар
+.а2насеи
+.а2наспаз
+.а2наста
+.а2настиг
+.а2настом
+.а2натим
+.а2натоц
+.а2натом
+.а2натре
+.а2натри
+.а2натро
+.а2неор
+.а3г2нос
+.а3г2ноз
+.а4е2ро
+.б2
+.бе2ш3ћ
+.бе2ш3ч
+.бе2с3ц
+.бе2с3к
+.бе2с3п
+.бе2с3т
+.бе2з3алкохол
+.бе2з3атомск
+.бе2з3б
+.бе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с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з4уп
+.бе3з4вуча
+.бе3з4вучн
+.бе4о
+.бес4тселер
+.би4о
+.ц2
+.д2
+.џ2
+.ди2с3акор
+.ди2с3јунк
+.ди2с3конт
+.ди2с3корд
+.ди2с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
+.ге4о
+.х2
+.и2ш3ћ
+.и2ш3ч
+.и2ж3ђ
+.и2н3абруп
+.и2н3адек
+.и2н3афек
+.и2н3акце
+.и2н3акур
+.и2н3амор
+.и2н3аниц
+.и2н3аплик
+.и2н3апст
+.и2н3арт
+.и2н3аугур
+.и2н3аура
+.и2н3ед
+.и2н3ефек
+.и2н3ег
+.и2н3екс
+.и2н3екв
+.и2н3елиг
+.и2н3епц
+.и2н3евид
+.и2н3јек
+.и2н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нокор
+.и2с3ц
+.и2с3к
+.и2с3п
+.и2с3т
+.и2з3аба
+.и2з3ака
+.и2з3анал
+.и2з3б
+.и2з3бија
+.и2з3бива
+.и2з3д
+.и2з3дај
+.и2з3г
+.и2з3и
+.и2з3л
+.и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с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с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с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з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з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вор
+.инте2р3а
+.инте2р3е
+.инте2р3и
+.инте2р3је
+.инте2р3о
+.инте2р3у
+.инте3р4ежџ
+.инте3р4егн
+.инте3р4еса
+.инте3р4есе
+.инте3р4еси
+.инте3р4есн
+.инте3р4есо
+.инте3р4есу
+.инте3р4ије
+.инте3р4огат
+.ист2к
+.из3бе2з3обр
+.из3бе2з3ум
+.из3г2н
+.из3ва2н3евр
+.из4оанем
+.из4оаном
+.из4обат
+.из4оброн
+.из4одим
+.из4один
+.из4одоз
+.из4офон
+.из4офот
+.из4огам
+.из4огео
+.из4оглос
+.из4огон
+.из4ограф
+.из4охал
+.из4охаз
+.из4охел
+.из4охиј
+.из4охим
+.из4охипс
+.из4охит
+.из4охор
+.из4охро
+.из4оклин
+.из4околон
+.из4олекс
+.из4олукс
+.из4омер
+.из4ометр
+.из4оморф
+.из4онеф
+.из4оном
+.из4опат
+.из4опер
+.из4опле
+.из4опол
+.из4опсеф
+.из4орах
+.из4осеи
+.из4осинт
+.из4осист
+.из4оскел
+.из4оскоп
+.из4остаз
+.из4осте
+.из4отах
+.из4отал
+.из4отер
+.из4отон
+.из4отоп
+.из4отро
+.иза3г2н
+.иза3т2к
+.изд2на
+.изд2но
+.изд2ну
+.изр2к
+.јури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д3иск
+.на2д3јач
+.на2д3јах
+.на2д3јеч
+.на2д3јек
+.на2д3јез
+.на2д3јун
+.на2д3л
+.на2д3љ
+.на2д3оч
+.на2д3офи
+.на2д3ора
+.на2д3осе
+.на2д3осје
+.на2д3осо
+.на2д3рач
+.на2д3рашћ
+.на2д3ран
+.на2д3раст
+.на2д3реал
+.на2д3реп
+.на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д2нев
+.на3д2нич
+.на3д2ниц
+.на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ј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т2ках
+.на3т2кам
+.на3т2касм
+.на3т2каст
+.наг2н
+.наг2њ
+.ну2с3пос
+.ну2с3про
+.ну2з3бел
+.ну2з3биљ
+.ну2з3љуб
+.ну2з3ре
+.ну2з3рје
+.ну2з3уж
+.о2б3игр
+.о2б3истин
+.о2б3истињ
+.о2б3ј
+.о2б3лај
+.о2б3лакш
+.о2б3лам
+.о2б3ласк
+.о2б3лећ
+.о2б3леж
+.о2б3леден
+.о2б3лег
+.о2б3леп
+.о2б3лет
+.о2б3лијеж
+.о2б3лијег
+.о2б3лијеп
+.о2б3лијет
+.о2б3лист
+.о2б3лив
+.о2б3лизат
+.о2б3лизав
+.о2б3лизи
+.о2б3љ
+.о2б3лока
+.о2б3луч
+.о2б3лук
+.о2б3ору
+.о2б3р
+.о2б3уж
+.о2б3убож
+.о2б3уд
+.о2б3уме
+.о2б3уми
+.о2б3умр
+.о2б3уз
+.о2д3жал
+.о2д3жаљ
+.о2д3же
+.о2д3жи
+.о2д3жв
+.о2д3арг
+.о2д3и2з3д
+.о2д3и2з3в
+.о2д3игр
+.о2д3иск
+.о2д3исти
+.о2д3ј
+.о2д3л
+.о2д3љ
+.о2д3ок
+.о2д3онд
+.о2д3онл
+.о2д3оно
+.о2д3ону
+.о2д3озд
+.о2д3озг
+.о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б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б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д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д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т2ках
+.о3т2кам
+.о3т2касм
+.о3т2каст
+.обе2ш3ћ
+.обе2ш3ч
+.обе2с3ц
+.обе2с3к
+.обе2с3п
+.обе2с3т
+.обе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с4тан
+.обе3с4тиј
+.обе3с4тран
+.обе3з4нач
+.обе3з4нан
+.обе3з4нањ
+.обе3з4уб
+.обе3з4виј
+.од3г2н
+.од3м2н
+.ода3д2н
+.ода3г2н
+.по2д3адм
+.по2д3игр
+.по2д3изв
+.по2д3ј
+.по2д3лакат
+.по2д3лакт
+.по2д3лећ
+.по2д3леж
+.по2д3лег
+.по2д3леп
+.по2д3лет
+.по2д3лијећ
+.по2д3лијеж
+.по2д3лијег
+.по2д3лијеп
+.по2д3лијет
+.по2д3лист
+.по2д3лиз
+.по2д3љут
+.по2д3лок
+.по2д3лом
+.по2д3луч
+.по2д3луж
+.по2д3луп
+.по2д3оч
+.по2д3ош
+.по2д3оф
+.по2д3окн
+.по2д3ра2з3д
+.по2д3рад
+.по2д3рам
+.по2д3ран
+.по2д3рањ
+.по2д3рас
+.по2д3равн
+.по2д3равњ
+.по2д3разр
+.по2д3разу
+.по2д3реп
+.по2д3рес
+.по2д3рез
+.по2д3рик
+.по2д3рит
+.по2д3рож
+.по2д3рон
+.по2д3ров
+.по2д3руча
+.по2д3ручи
+.по2д3ручн
+.по2д3руб
+.по2д3рук
+.по2д3упла
+.по2д3усм
+.по2д3усн
+.по2д3вариј
+.по2д3веч
+.по2д3веж
+.по2д3вез
+.по2д3вик
+.по2д3вил
+.по2д3вир
+.по2д3влаш
+.по2д3влас
+.по2д3вођ
+.по2д3вож
+.по2д3вод
+.по2д3воз
+.по2д3врћ
+.по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д2нев
+.по3д4јеч
+.по3д4јен
+.по3г2н
+.по3м2н
+.по3м2њ
+.по3р2ђ
+.по3т2ках
+.по3т2кам
+.по3т2кат
+.по3т2кав
+.пре2д3же
+.пре2д3жи
+.пре2д3ид
+.пре2д3игр
+.пре2д3испи
+.пре2д3исто
+.пре2д3истр
+.пре2д3изб
+.пре2д3ј
+.пре2д3обј
+.пре2д3одре
+.пре2д3окус
+.пре2д3осе
+.пре2д3осје
+.пре2д3осв
+.пре2д3рач
+.пре2д3рад
+.пре2д3рат
+.пре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д4јен
+.пре3д4вај
+.пре3д4вар
+.пре3д4вест
+.пре3д4воја
+.пре3д4воје
+.пре3д4воји
+.пре3д4вор
+.пре3д4вос
+.пре3т2ках
+.пре3т2кам
+.пре3т2кат
+.пред3м2н
+.пред3м2њ
+.про3г2н
+.про3т2ка
+.про3т2ки
+.проти2в3акц
+.проти2в3оф
+.проти2в3отр
+.проти2в3р
+.проти2в3уд
+.проти2в3ус
+.р2
+.ра2ш3ћ
+.ра2ш3ч
+.ра2ж3ђ
+.ра2с3ц
+.ра2с3к
+.ра2с3п
+.ра2с3т
+.ра2з3анал
+.ра2з3б
+.ра2з3д
+.ра2з3е
+.ра2з3г
+.ра2з3и
+.ра2з3л
+.ра2з3љ
+.ра2з3м
+.ра2з3н
+.ра2з3њ
+.ра2з3оба
+.ра2з3обл
+.ра2з3обр
+.ра2з3од
+.ра2з3орат
+.ра2з3орав
+.ра2з3орт
+.ра2з3ору
+.ра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ш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с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з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з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врт
+.ра4с5турч
+.раз3д2ни
+.раз3г2н
+.раза3г2н
+.раза3т2ка
+.с2
+.су2б3а
+.су2б3инв
+.су2б3јунк
+.су2б3л
+.су2б3окс
+.су2б3орд
+.су2б3реп
+.су2б3рог
+.су3б4аш
+.супе2р3а
+.супе2р3е
+.супе2р3и
+.супе2р3о
+.супе2р3у
+.супе3р4иор
+.тран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с4еп
+.тран3с4кри
+.тран3с4уд
+.тран3с4ум
+.у2ш3ћ
+.у2ш3ч
+.у2с3ц
+.у2с3к
+.у2с3п
+.у2с3талас
+.у2с3тара
+.у2с3тећ
+.у2с3тег
+.у2с3тер
+.у2с3тов
+.у2с3трћ
+.у2с3трч
+.у2с3трај
+.у2с3трал
+.у2с3треб
+.у2с3треп
+.у2с3трес
+.у2с3трг
+.у2с3трк
+.у2с3трн
+.у2с3трп
+.у2с3тућ
+.у2с3тум
+.у2с3тур
+.у2с3тврђ
+.у2с3тврд
+.у2з3б
+.у2з3д
+.у2з3г
+.у2з3и
+.у2з3игр
+.у2з3инат
+.у2з3искр
+.у2з3л
+.у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г2ми
+.у3г2н
+.у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с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з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вој
+.у4с5кош
+.у4с5коко
+.у4с5коле
+.у4с5колу
+.у4с5ком
+.у4с5копа
+.у4с5кора
+.у4с5коси
+.у4с5котр
+.у4с5ков
+.уза3т2ка
+.ва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ч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ш3чв
+2ш3цј
+2ш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шч.
+2шчћ
+2шчч
+2шчш
+2шчж
+2шчб
+2шчц
+2шчд
+2шчџ
+2шчф
+2шчг
+2шчх
+2шчј
+2шчк
+2шчљ
+2шчм
+2шчн
+2шчр
+2шчс
+2шчт
+2шчз
+2шц.
+2шцћ
+2шцч
+2шцш
+2шцж
+2шцб
+2шцц
+2шцд
+2шцџ
+2шцф
+2шцг
+2шцх
+2шцк
+2шцљ
+2шцм
+2шцн
+2шцр
+2шцс
+2шцт
+2шцз
+2шк.
+2шкђ
+2шкћ
+2шкч
+2шкш
+2шкж
+2шкб
+2шкц
+2шкд
+2шкџ
+2шкф
+2шкг
+2шкх
+2шкк
+2шкм
+2шкн
+2шкс
+2шкт
+2шкз
+2шљ.
+2шм.
+2шмђ
+2шмч
+2шмш
+2шмж
+2шмб
+2шмц
+2шмд
+2шмџ
+2шмф
+2шмг
+2шмх
+2шмк
+2шмм
+2шмн
+2шмс
+2шмт
+2шмз
+2шн.
+2шп.
+2шпђ
+2шпч
+2шпш
+2шпж
+2шпб
+2шпц
+2шпд
+2шпџ
+2шпф
+2шпг
+2шпх
+2шпк
+2шпм
+2шпн
+2шпс
+2шпт
+2шпз
+2шт.
+2штђ
+2штч
+2штш
+2штж
+2штб
+2штц
+2штд
+2штџ
+2штф
+2штг
+2штх
+2штк
+2штм
+2штн
+2штс
+2штт
+2штз
+2шв.
+2швђ
+2швч
+2швш
+2швж
+2швб
+2швц
+2швд
+2швџ
+2швф
+2швг
+2швх
+2швк
+2швм
+2швн
+2швс
+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ж3бј
+2ж3бл
+2ж3бљ
+2ж3бр
+2ж3дј
+2ж3дл
+2ж3дљ
+2ж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жб.
+2жбђ
+2жбч
+2жбш
+2жбж
+2жбб
+2жбц
+2жбд
+2жбџ
+2жбф
+2жбг
+2жбх
+2жбк
+2жбм
+2жбн
+2жбс
+2жбт
+2жбз
+2жд.
+2ждч
+2ждш
+2ждб
+2ждц
+2ждд
+2ждџ
+2ждф
+2ждг
+2ждх
+2ждк
+2ждм
+2ждн
+2ждс
+2ждт
+2ждз
+2жг.
+2жгч
+2жгш
+2жгж
+2жгб
+2жгц
+2жгд
+2жгџ
+2жгф
+2жгг
+2жгх
+2жгк
+2жгм
+2жгн
+2жгс
+2жгт
+2жгз
+2жл.
+2жљ.
+2жм.
+2жмђ
+2жмч
+2жмш
+2жмж
+2жмб
+2жмц
+2жмд
+2жмџ
+2жмф
+2жмг
+2жмх
+2жмк
+2жмм
+2жмн
+2жмс
+2жмт
+2жмз
+2жн.
+2жњ.
+2жвђ
+2жвч
+2жвш
+2жвж
+2жвб
+2жвц
+2жвд
+2жвџ
+2жвф
+2жвг
+2жвх
+2жвк
+2жвм
+2жвн
+2жвс
+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с
+2б1т
+2б1з
+2бј.
+2бл.
+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с
+2ц1т
+2ц1з
+2ц3вл
+2ц3вљ
+2цј.
+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з
+2д3вл
+2д3вљ
+2д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џ.
+2дј.
+2дл.
+2дљ.
+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с
+2ф1т
+2ф1з
+2фј.
+2фл.
+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т
+2г1з
+2г3вј
+2г3вл
+2г3вљ
+2г3вр
+2гј.
+2гл.
+2гљ.
+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т
+2х1з
+2х3вј
+2х3вл
+2х3вљ
+2х3вр
+2хј.
+2хл.
+2хљ.
+2хр.
+2хв.
+2хвђ
+2хвч
+2хвш
+2хвж
+2хвб
+2хвц
+2хвд
+2хвџ
+2хвф
+2хвг
+2хвх
+2хвк
+2хвм
+2хвн
+2хвс
+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м
+2ј1н
+2ј1р
+2ј1с
+2ј1т
+2ј1з
+2к1ђ
+2к1ћ
+2к1ч
+2к1ш
+2к1ж
+2к1б
+2к1ц
+2к1д
+2к1џ
+2к1ф
+2к1г
+2к1х
+2к1к
+2к1м
+2к1н
+2к1с
+2к1т
+2к1з
+2к3вј
+2к3вл
+2к3вљ
+2кј.
+2кл.
+2кљ.
+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н
+2љ1р
+2љ1с
+2љ1т
+2љ1з
+2м1ђ
+2м1ћ
+2м1ч
+2м1ш
+2м1ж
+2м1б
+2м1ц
+2м1д
+2м1џ
+2м1ф
+2м1г
+2м1х
+2м1к
+2м1м
+2м1н
+2м1с
+2м1т
+2м1з
+2мј.
+2мл.
+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р
+2н1с
+2н1т
+2н1з
+2о1
+2пј.
+2пл.
+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н
+2р1р
+2р1с
+2р1т
+2р1з
+2с1ђ
+2с1ћ
+2с1ч
+2с1ш
+2с1ж
+2с1б
+2с1д
+2с1џ
+2с1ф
+2с1г
+2с1х
+2с1с
+2с1з
+2с3кј
+2с3кљ
+2с3тл
+2с3вљ
+2сц.
+2сцђ
+2сцћ
+2сцч
+2сцш
+2сцж
+2сцб
+2сцц
+2сцд
+2сцџ
+2сцф
+2сцг
+2сцх
+2сцк
+2сцљ
+2сцм
+2сцн
+2сцр
+2сцс
+2сцт
+2сцз
+2сј.
+2ск.
+2скђ
+2скћ
+2скч
+2скш
+2скж
+2скб
+2скц
+2скд
+2скџ
+2скф
+2скг
+2скх
+2скк
+2скм
+2скн
+2скс
+2скт
+2скз
+2сл.
+2сљ.
+2см.
+2смђ
+2смћ
+2смч
+2смш
+2смж
+2смб
+2смц
+2смд
+2смџ
+2смф
+2смг
+2смх
+2смк
+2смм
+2смн
+2смс
+2смт
+2смз
+2сн.
+2сњ.
+2сп.
+2спђ
+2спћ
+2спч
+2спш
+2спж
+2спб
+2спц
+2спд
+2спџ
+2спф
+2спг
+2спх
+2спк
+2спм
+2спн
+2спп
+2спс
+2спт
+2спв
+2спз
+2ср.
+2ст.
+2стђ
+2стћ
+2стч
+2стш
+2стж
+2стб
+2стц
+2стд
+2стџ
+2стф
+2стг
+2стх
+2стк
+2стм
+2стн
+2стп
+2стс
+2стт
+2стз
+2св.
+2свђ
+2свћ
+2свч
+2свш
+2свж
+2свб
+2свц
+2свд
+2свџ
+2свф
+2свг
+2свх
+2свк
+2свм
+2свн
+2свп
+2свс
+2свт
+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с
+2т1т
+2т1з
+2т3вј
+2т3вл
+2т3вљ
+2тј.
+2тл.
+2тљ.
+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п
+2в1с
+2в1т
+2в1в
+2в1з
+2вј.
+2вл.
+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з3бљ
+2з3дл
+2з3дљ
+2з3дв
+2з3гј
+2з3гљ
+2з3мл
+2з3мр
+2з3вл
+2з3вљ
+2зб.
+2збђ
+2збћ
+2збч
+2збш
+2збж
+2збб
+2збц
+2збд
+2збџ
+2збф
+2збг
+2збх
+2збк
+2збм
+2збн
+2збп
+2збс
+2збв
+2збз
+2зд.
+2здђ
+2здћ
+2здч
+2здш
+2здб
+2здц
+2здд
+2здџ
+2здф
+2здг
+2здх
+2здк
+2здм
+2здн
+2здп
+2здс
+2здз
+2зг.
+2згђ
+2згћ
+2згч
+2згж
+2згб
+2згц
+2згд
+2згџ
+2згф
+2згг
+2згх
+2згк
+2згм
+2згн
+2згп
+2згс
+2згз
+2зј.
+2зл.
+2зљ.
+2зм.
+2змђ
+2змћ
+2змч
+2змш
+2змж
+2змб
+2змц
+2змд
+2змџ
+2змф
+2змг
+2змх
+2змк
+2змм
+2змн
+2змп
+2змс
+2змв
+2змз
+2зн.
+2зњ.
+2зр.
+2зв.
+2звђ
+2звћ
+2звч
+2звш
+2звж
+2звб
+2звц
+2звд
+2звџ
+2звф
+2звг
+2звх
+2звк
+2звм
+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мок
+3г2дегод.
+3г2декад
+3г2декак
+3г2дјегод.
+3г2дјекад
+3г2дјекак
+3г2мил
+3г2миљ
+3г2миз
+3г2нај
+3г2нежђ
+3г2нев
+3г2незд
+3г2нијежђ
+3г2нијезд
+3г2њав
+3г2њеч
+3г2њес
+3г2њет
+3г2њев
+3г2њил
+3г2њиљ
+3г2њио
+3г2њит
+3г2њур
+3г2ној
+3г2нос
+3г2ноз
+3х2тел
+3х2тењ
+3х2тети
+3х2тев
+3х2тјел
+3х2тјењ
+3х2тјети
+3х2тјев
+3к2неж
+3к2нез
+3к2њиж
+3к2њиг
+3м2наж
+3м2нож
+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јем
+ч2в
+ш2ч
+ш2л
+ш2љ
+ш2м
+ш2н
+ш2п
+ш2т
+ш2в
+ж2ђ
+ж2б
+ж2д
+ж2г
+ж2л
+ж2љ
+ж2м
+ж2н
+ж2в
+а3а
+а3е
+а3и
+а3о
+а3у
+б2ј
+б2л
+б2љ
+б2р
+ц2ј
+ц2р
+ц2в
+д2ж
+д2ј
+д2л
+д2љ
+д2р
+д2в
+е3а
+е3е
+е3и
+е3о
+е3у
+ф2ј
+ф2л
+ф2љ
+ф2р
+г2л
+г2љ
+г2р
+г2в
+х2л
+х2љ
+х2р
+х2в
+и3а
+и3е
+и3и
+и3о
+и3у
+к2л
+к2љ
+к2р
+к2в
+л2ј
+м2л
+м2љ
+м2р
+не3г2де.
+не3г2дје.
+ни3г2де.
+ни3г2дје.
+о3а
+о3е
+о3и
+о3о
+о3у
+п2ј
+п2л
+п2љ
+п2р
+с2ц
+с2к
+с2л
+с2љ
+с2м
+с2н
+с2п
+с2р
+с2в
+т2ј
+т2л
+т2в
+у3а
+у3е
+у3и
+у3о
+у3у
+в2л
+в2љ
+в2р
+з2б
+з2д
+з2г
+з2ј
+з2л
+з2љ
+з2м
+з2н
+з2р
+з2в} \ No newline at end of file
diff --git a/Master/texmf-dist/tex/context/patterns/lang-sr.rme b/Master/texmf-dist/tex/context/patterns/lang-sr.rme
new file mode 100644
index 00000000000..7a4df255af8
--- /dev/null
+++ b/Master/texmf-dist/tex/context/patterns/lang-sr.rme
@@ -0,0 +1,80 @@
+% generated by mtxrun --script pattern --convert
+
+% This file is part of hyph-utf8 package and resulted from
+% semi-manual conversions of hyphenation patterns into UTF-8 in June 2008.
+%
+% Source: srhyphc.tex (2003-06-09)
+% Author: Aleksandar Jelenak <ajelenak AT yahoo.com>, Dejan Muhamedagić
+%
+% The above mentioned file should become obsolete,
+% and the author of the original file should preferaby modify this file instead.
+%
+% Modificatios were needed in order to support native UTF-8 engines,
+% but functionality (hopefully) didn't change in any way, at least not intentionally.
+% This file is no longer stand-alone; at least for 8-bit engines
+% you probably want to use loadhyph-foo.tex (which will load this file) instead.
+%
+% Modifications were done by Jonathan Kew, Mojca Miklavec & Arthur Reutenauer
+% with help & support from:
+% - Karl Berry, who gave us free hands and all resources
+% - Taco Hoekwater, with useful macros
+% - Hans Hagen, who did the unicodifisation of patterns already long before
+% and helped with testing, suggestions and bug reports
+% - Norbert Preining, who tested & integrated patterns into TeX Live
+%
+% However, the "copyright/copyleft" owner of patterns remains the original author.
+%
+% The copyright statement of this file is thus:
+%
+% Do with this file whatever needs to be done in future for the sake of
+% "a better world" as long as you respect the copyright of original file.
+% If you're the original author of patterns or taking over a new revolution,
+% plese remove all of the TUG comments & credits that we added here -
+% you are the Queen / the King, we are only the servants.
+%
+% If you want to change this file, rather than uploading directly to CTAN,
+% we would be grateful if you could send it to us (http://tug.org/tex-hyphen)
+% or ask for credentials for SVN repository and commit it yourself;
+% we will then upload the whole "package" to CTAN.
+%
+% Before a new "pattern-revolution" starts,
+% please try to follow some guidelines if possible:
+%
+% - \lccode is *forbidden*, and I really mean it
+% - all the patterns should be in UTF-8
+% - the only "allowed" TeX commands in this file are: \patterns, \hyphenation,
+% and if you really cannot do without, also \input and \message
+% - in particular, please no \catcode or \lccode changes,
+% they belong to loadhyph-foo.tex,
+% and no \lefthyphenmin and \righthyphenmin,
+% they have no influence here and belong elsewhere
+% - \begingroup and/or \endinput is not needed
+% - feel free to do whatever you want inside comments
+%
+% We know that TeX is extremely powerful, but give a stupid parser
+% at least a chance to read your patterns.
+%
+% For more unformation see
+%
+% http://tug.org/tex-hyphen
+%
+%------------------------------------------------------------------------------
+%
+% This is `srhyphc.tex' file. It contains hyphenation patterns for Serbian
+% language in the Cyrillic alphabet. TeX font encoding is T2A.
+%
+% This file is distributed under the terms of the GNU General Public License.
+% Latest version of the license is at <http://www.gnu.org/copyleft/gpl.html>.
+%
+% Version: 1.0a
+% Last change: 2003-06-09
+%
+% Credits:
+% - Initial hyphenation patterns for T1 font encoding by Dejan Muhamedagić
+% - Improvements and adaptation to T2A font encoding by Strahinja Radić
+% - Further improvements and integration into one file by Aleksandar Jelenak
+%
+% Current maintainer: Aleksandar Jelenak <ajelenak AT yahoo.com>
+%
+% \message{Serbian Cyrillic Hyphenation Patterns `srhyphc.tex' v1.0a <2003-06-09>}
+% \ No newline at end of file
diff --git a/Master/texmf-dist/tex/context/patterns/lang-sv.hyp b/Master/texmf-dist/tex/context/patterns/lang-sv.hyp
index 20860ee5da5..cff1490896b 100644
--- a/Master/texmf-dist/tex/context/patterns/lang-sv.hyp
+++ b/Master/texmf-dist/tex/context/patterns/lang-sv.hyp
@@ -1,6 +1,6 @@
% generated by mtxrun --script pattern --convert
-% for comment and copyright, see ./lang-sv.rme
+% for comment and copyright, see e:/tmp/patterns/lang-sv.rme
% used:
diff --git a/Master/texmf-dist/tex/context/patterns/lang-sv.pat b/Master/texmf-dist/tex/context/patterns/lang-sv.pat
index e1ffca965e8..b4aab06c324 100644
--- a/Master/texmf-dist/tex/context/patterns/lang-sv.pat
+++ b/Master/texmf-dist/tex/context/patterns/lang-sv.pat
@@ -1,6 +1,6 @@
% generated by mtxrun --script pattern --convert
-% for comment and copyright, see ./lang-sv.rme
+% for comment and copyright, see e:/tmp/patterns/lang-sv.rme
% used: a b c d e f g h i j k l m n o p q r s t u v w x y z ä å é ö
diff --git a/Master/texmf-dist/tex/context/patterns/lang-tk.hyp b/Master/texmf-dist/tex/context/patterns/lang-tk.hyp
new file mode 100644
index 00000000000..70002aa0520
--- /dev/null
+++ b/Master/texmf-dist/tex/context/patterns/lang-tk.hyp
@@ -0,0 +1,8 @@
+% generated by mtxrun --script pattern --convert
+
+% for comment and copyright, see e:/tmp/patterns/lang-tk.rme
+
+% used:
+
+\hyphenation{
+} \ No newline at end of file
diff --git a/Master/texmf-dist/tex/context/patterns/lang-tk.pat b/Master/texmf-dist/tex/context/patterns/lang-tk.pat
new file mode 100644
index 00000000000..33290cb1665
--- /dev/null
+++ b/Master/texmf-dist/tex/context/patterns/lang-tk.pat
@@ -0,0 +1,2378 @@
+% generated by mtxrun --script pattern --convert
+
+% for comment and copyright, see e:/tmp/patterns/lang-tk.rme
+
+% used: a b d e f g h i j k l m n o p r s t u w y z ä ç ö ü ý ň ş ž
+
+\patterns{
+ä1bä
+ä1be
+ä1bi
+ä1bö
+ä1bü
+ä1çä
+ä1çe
+ä1çi
+ä1çö
+ä1çü
+ä1dä
+ä1de
+ä1di
+ä1dö
+ä1dü
+ä1fä
+ä1fe
+ä1fi
+ä1fö
+ä1fü
+ä1gä
+ä1ge
+ä1gi
+ä1gö
+ä1gü
+ä1hä
+ä1he
+ä1hi
+ä1hö
+ä1hü
+ä1jä
+ä1je
+ä1ji
+ä1jö
+ä1jü
+ä1kä
+ä1ke
+ä1ki
+ä1kö
+ä1kü
+ä1lä
+ä1le
+ä1li
+ä1lö
+ä1lü
+ä1mä
+ä1me
+ä1mi
+ä1mö
+ä1mü
+ä1nä
+ä1ne
+ä1ni
+ä1nö
+ä1nü
+ä1pä
+ä1pe
+ä1pi
+ä1pö
+ä1pü
+ä1rä
+ä1re
+ä1ri
+ä1rö
+ä1rü
+ä1sä
+ä1se
+ä1si
+ä1sö
+ä1sü
+ä1tä
+ä1te
+ä1ti
+ä1tö
+ä1tü
+ä1wä
+ä1we
+ä1wi
+ä1wö
+ä1wü
+ä1ýä
+ä1ýe
+ä1ýi
+ä1ýö
+ä1ýü
+ä1zä
+ä1ze
+ä1zi
+ä1zö
+ä1zü
+ä1ňä
+ä1ňe
+ä1ňi
+ä1ňö
+ä1ňü
+ä1žä
+ä1že
+ä1ži
+ä1žö
+ä1žü
+ä1şä
+ä1şe
+ä1şi
+ä1şö
+ä1şü
+e1bä
+e1be
+e1bi
+e1bö
+e1bü
+e1çä
+e1çe
+e1çi
+e1çö
+e1çü
+e1dä
+e1de
+e1di
+e1dö
+e1dü
+e1fä
+e1fe
+e1fi
+e1fö
+e1fü
+e1gä
+e1ge
+e1gi
+e1gö
+e1gü
+e1hä
+e1he
+e1hi
+e1hö
+e1hü
+e1jä
+e1je
+e1ji
+e1jö
+e1jü
+e1kä
+e1ke
+e1ki
+e1kö
+e1kü
+e1lä
+e1le
+e1li
+e1lö
+e1lü
+e1mä
+e1me
+e1mi
+e1mö
+e1mü
+e1nä
+e1ne
+e1ni
+e1nö
+e1nü
+e1pä
+e1pe
+e1pi
+e1pö
+e1pü
+e1rä
+e1re
+e1ri
+e1rö
+e1rü
+e1sä
+e1se
+e1si
+e1sö
+e1sü
+e1tä
+e1te
+e1ti
+e1tö
+e1tü
+e1wä
+e1we
+e1wi
+e1wö
+e1wü
+e1ýä
+e1ýe
+e1ýi
+e1ýö
+e1ýü
+e1zä
+e1ze
+e1zi
+e1zö
+e1zü
+e1ňä
+e1ňe
+e1ňi
+e1ňö
+e1ňü
+e1žä
+e1že
+e1ži
+e1žö
+e1žü
+e1şä
+e1şe
+e1şi
+e1şö
+e1şü
+i1bä
+i1be
+i1bi
+i1bö
+i1bü
+i1çä
+i1çe
+i1çi
+i1çö
+i1çü
+i1dä
+i1de
+i1di
+i1dö
+i1dü
+i1fä
+i1fe
+i1fi
+i1fö
+i1fü
+i1gä
+i1ge
+i1gi
+i1gö
+i1gü
+i1hä
+i1he
+i1hi
+i1hö
+i1hü
+i1jä
+i1je
+i1ji
+i1jö
+i1jü
+i1kä
+i1ke
+i1ki
+i1kö
+i1kü
+i1lä
+i1le
+i1li
+i1lö
+i1lü
+i1mä
+i1me
+i1mi
+i1mö
+i1mü
+i1nä
+i1ne
+i1ni
+i1nö
+i1nü
+i1pä
+i1pe
+i1pi
+i1pö
+i1pü
+i1rä
+i1re
+i1ri
+i1rö
+i1rü
+i1sä
+i1se
+i1si
+i1sö
+i1sü
+i1tä
+i1te
+i1ti
+i1tö
+i1tü
+i1wä
+i1we
+i1wi
+i1wö
+i1wü
+i1ýä
+i1ýe
+i1ýi
+i1ýö
+i1ýü
+i1zä
+i1ze
+i1zi
+i1zö
+i1zü
+i1ňä
+i1ňe
+i1ňi
+i1ňö
+i1ňü
+i1žä
+i1že
+i1ži
+i1žö
+i1žü
+i1şä
+i1şe
+i1şi
+i1şö
+i1şü
+ö1bä
+ö1be
+ö1bi
+ö1bö
+ö1bü
+ö1çä
+ö1çe
+ö1çi
+ö1çö
+ö1çü
+ö1dä
+ö1de
+ö1di
+ö1dö
+ö1dü
+ö1fä
+ö1fe
+ö1fi
+ö1fö
+ö1fü
+ö1gä
+ö1ge
+ö1gi
+ö1gö
+ö1gü
+ö1hä
+ö1he
+ö1hi
+ö1hö
+ö1hü
+ö1jä
+ö1je
+ö1ji
+ö1jö
+ö1jü
+ö1kä
+ö1ke
+ö1ki
+ö1kö
+ö1kü
+ö1lä
+ö1le
+ö1li
+ö1lö
+ö1lü
+ö1mä
+ö1me
+ö1mi
+ö1mö
+ö1mü
+ö1nä
+ö1ne
+ö1ni
+ö1nö
+ö1nü
+ö1pä
+ö1pe
+ö1pi
+ö1pö
+ö1pü
+ö1rä
+ö1re
+ö1ri
+ö1rö
+ö1rü
+ö1sä
+ö1se
+ö1si
+ö1sö
+ö1sü
+ö1tä
+ö1te
+ö1ti
+ö1tö
+ö1tü
+ö1wä
+ö1we
+ö1wi
+ö1wö
+ö1wü
+ö1ýä
+ö1ýe
+ö1ýi
+ö1ýö
+ö1ýü
+ö1zä
+ö1ze
+ö1zi
+ö1zö
+ö1zü
+ö1ňä
+ö1ňe
+ö1ňi
+ö1ňö
+ö1ňü
+ö1žä
+ö1že
+ö1ži
+ö1žö
+ö1žü
+ö1şä
+ö1şe
+ö1şi
+ö1şö
+ö1şü
+ü1bä
+ü1be
+ü1bi
+ü1bö
+ü1bü
+ü1çä
+ü1çe
+ü1çi
+ü1çö
+ü1çü
+ü1dä
+ü1de
+ü1di
+ü1dö
+ü1dü
+ü1fä
+ü1fe
+ü1fi
+ü1fö
+ü1fü
+ü1gä
+ü1ge
+ü1gi
+ü1gö
+ü1gü
+ü1hä
+ü1he
+ü1hi
+ü1hö
+ü1hü
+ü1jä
+ü1je
+ü1ji
+ü1jö
+ü1jü
+ü1kä
+ü1ke
+ü1ki
+ü1kö
+ü1kü
+ü1lä
+ü1le
+ü1li
+ü1lö
+ü1lü
+ü1mä
+ü1me
+ü1mi
+ü1mö
+ü1mü
+ü1nä
+ü1ne
+ü1ni
+ü1nö
+ü1nü
+ü1pä
+ü1pe
+ü1pi
+ü1pö
+ü1pü
+ü1rä
+ü1re
+ü1ri
+ü1rö
+ü1rü
+ü1sä
+ü1se
+ü1si
+ü1sö
+ü1sü
+ü1tä
+ü1te
+ü1ti
+ü1tö
+ü1tü
+ü1wä
+ü1we
+ü1wi
+ü1wö
+ü1wü
+ü1ýä
+ü1ýe
+ü1ýi
+ü1ýö
+ü1ýü
+ü1zä
+ü1ze
+ü1zi
+ü1zö
+ü1zü
+ü1ňä
+ü1ňe
+ü1ňi
+ü1ňö
+ü1ňü
+ü1žä
+ü1že
+ü1ži
+ü1žö
+ü1žü
+ü1şä
+ü1şe
+ü1şi
+ü1şö
+ü1şü
+a1ba
+a1by
+a1bo
+a1bu
+a1ça
+a1çy
+a1ço
+a1çu
+a1da
+a1dy
+a1do
+a1du
+a1fa
+a1fy
+a1fo
+a1fu
+a1ga
+a1gy
+a1go
+a1gu
+a1ha
+a1hy
+a1ho
+a1hu
+a1ja
+a1jy
+a1jo
+a1ju
+a1ka
+a1ky
+a1ko
+a1ku
+a1la
+a1ly
+a1lo
+a1lu
+a1ma
+a1my
+a1mo
+a1mu
+a1na
+a1ny
+a1no
+a1nu
+a1pa
+a1py
+a1po
+a1pu
+a1ra
+a1ry
+a1ro
+a1ru
+a1sa
+a1sy
+a1so
+a1su
+a1ta
+a1ty
+a1to
+a1tu
+a1wa
+a1wy
+a1wo
+a1wu
+a1ýa
+a1ýy
+a1ýo
+a1ýu
+a1za
+a1zy
+a1zo
+a1zu
+a1ňa
+a1ňy
+a1ňo
+a1ňu
+a1ža
+a1žy
+a1žo
+a1žu
+a1şa
+a1şy
+a1şo
+a1şu
+y1ba
+y1by
+y1bo
+y1bu
+y1ça
+y1çy
+y1ço
+y1çu
+y1da
+y1dy
+y1do
+y1du
+y1fa
+y1fy
+y1fo
+y1fu
+y1ga
+y1gy
+y1go
+y1gu
+y1ha
+y1hy
+y1ho
+y1hu
+y1ja
+y1jy
+y1jo
+y1ju
+y1ka
+y1ky
+y1ko
+y1ku
+y1la
+y1ly
+y1lo
+y1lu
+y1ma
+y1my
+y1mo
+y1mu
+y1na
+y1ny
+y1no
+y1nu
+y1pa
+y1py
+y1po
+y1pu
+y1ra
+y1ry
+y1ro
+y1ru
+y1sa
+y1sy
+y1so
+y1su
+y1ta
+y1ty
+y1to
+y1tu
+y1wa
+y1wy
+y1wo
+y1wu
+y1ýa
+y1ýy
+y1ýo
+y1ýu
+y1za
+y1zy
+y1zo
+y1zu
+y1ňa
+y1ňy
+y1ňo
+y1ňu
+y1ža
+y1žy
+y1žo
+y1žu
+y1şa
+y1şy
+y1şo
+y1şu
+o1ba
+o1by
+o1bo
+o1bu
+o1ça
+o1çy
+o1ço
+o1çu
+o1da
+o1dy
+o1do
+o1du
+o1fa
+o1fy
+o1fo
+o1fu
+o1ga
+o1gy
+o1go
+o1gu
+o1ha
+o1hy
+o1ho
+o1hu
+o1ja
+o1jy
+o1jo
+o1ju
+o1ka
+o1ky
+o1ko
+o1ku
+o1la
+o1ly
+o1lo
+o1lu
+o1ma
+o1my
+o1mo
+o1mu
+o1na
+o1ny
+o1no
+o1nu
+o1pa
+o1py
+o1po
+o1pu
+o1ra
+o1ry
+o1ro
+o1ru
+o1sa
+o1sy
+o1so
+o1su
+o1ta
+o1ty
+o1to
+o1tu
+o1wa
+o1wy
+o1wo
+o1wu
+o1ýa
+o1ýy
+o1ýo
+o1ýu
+o1za
+o1zy
+o1zo
+o1zu
+o1ňa
+o1ňy
+o1ňo
+o1ňu
+o1ža
+o1žy
+o1žo
+o1žu
+o1şa
+o1şy
+o1şo
+o1şu
+u1ba
+u1by
+u1bo
+u1bu
+u1ça
+u1çy
+u1ço
+u1çu
+u1da
+u1dy
+u1do
+u1du
+u1fa
+u1fy
+u1fo
+u1fu
+u1ga
+u1gy
+u1go
+u1gu
+u1ha
+u1hy
+u1ho
+u1hu
+u1ja
+u1jy
+u1jo
+u1ju
+u1ka
+u1ky
+u1ko
+u1ku
+u1la
+u1ly
+u1lo
+u1lu
+u1ma
+u1my
+u1mo
+u1mu
+u1na
+u1ny
+u1no
+u1nu
+u1pa
+u1py
+u1po
+u1pu
+u1ra
+u1ry
+u1ro
+u1ru
+u1sa
+u1sy
+u1so
+u1su
+u1ta
+u1ty
+u1to
+u1tu
+u1wa
+u1wy
+u1wo
+u1wu
+u1ýa
+u1ýy
+u1ýo
+u1ýu
+u1za
+u1zy
+u1zo
+u1zu
+u1ňa
+u1ňy
+u1ňo
+u1ňu
+u1ža
+u1žy
+u1žo
+u1žu
+u1şa
+u1şy
+u1şo
+u1şu
+a1bi
+a1be
+y1bä
+y1bi
+y1be
+o1bi
+o1be
+u1bi
+u1be
+i1ba
+i1bo
+e1ba
+e1bo
+ä1bo
+ä1ba
+ö1ba
+a1çi
+a1çe
+y1çä
+y1çi
+y1çe
+o1çi
+o1çe
+u1çi
+u1çe
+i1ça
+i1ço
+e1ça
+e1ço
+ä1ço
+ä1ça
+ö1ça
+a1di
+a1de
+y1dä
+y1di
+y1de
+o1di
+o1de
+u1di
+u1de
+i1da
+i1do
+e1da
+e1do
+ä1do
+ä1da
+ö1da
+a1fi
+a1fe
+y1fä
+y1fi
+y1fe
+o1fi
+o1fe
+u1fi
+u1fe
+i1fa
+i1fo
+e1fa
+e1fo
+ä1fo
+ä1fa
+ö1fa
+a1gi
+a1ge
+y1gä
+y1gi
+y1ge
+o1gi
+o1ge
+u1gi
+u1ge
+i1ga
+i1go
+e1ga
+e1go
+ä1go
+ä1ga
+ö1ga
+a1hi
+a1he
+y1hä
+y1hi
+y1he
+o1hi
+o1he
+u1hi
+u1he
+i1ha
+i1ho
+e1ha
+e1ho
+ä1ho
+ä1ha
+ö1ha
+a1ji
+a1je
+y1jä
+y1ji
+y1je
+o1ji
+o1je
+u1ji
+u1je
+i1ja
+i1jo
+e1ja
+e1jo
+ä1jo
+ä1ja
+ö1ja
+a1ki
+a1ke
+y1kä
+y1ki
+y1ke
+o1ki
+o1ke
+u1ki
+u1ke
+i1ka
+i1ko
+e1ka
+e1ko
+ä1ko
+ä1ka
+ö1ka
+a1li
+a1le
+y1lä
+y1li
+y1le
+o1li
+o1le
+u1li
+u1le
+i1la
+i1lo
+e1la
+e1lo
+ä1lo
+ä1la
+ö1la
+a1mi
+a1me
+y1mä
+y1mi
+y1me
+o1mi
+o1me
+u1mi
+u1me
+i1ma
+i1mo
+e1ma
+e1mo
+ä1mo
+ä1ma
+ö1ma
+a1ni
+a1ne
+y1nä
+y1ni
+y1ne
+o1ni
+o1ne
+u1ni
+u1ne
+i1na
+i1no
+e1na
+e1no
+ä1no
+ä1na
+ö1na
+a1pi
+a1pe
+y1pä
+y1pi
+y1pe
+o1pi
+o1pe
+u1pi
+u1pe
+i1pa
+i1po
+e1pa
+e1po
+ä1po
+ä1pa
+ö1pa
+a1ri
+a1re
+y1rä
+y1ri
+y1re
+o1ri
+o1re
+u1ri
+u1re
+i1ra
+i1ro
+e1ra
+e1ro
+ä1ro
+ä1ra
+ö1ra
+a1si
+a1se
+y1sä
+y1si
+y1se
+o1si
+o1se
+u1si
+u1se
+i1sa
+i1so
+e1sa
+e1so
+ä1so
+ä1sa
+ö1sa
+a1ti
+a1te
+y1tä
+y1ti
+y1te
+o1ti
+o1te
+u1ti
+u1te
+i1ta
+i1to
+e1ta
+e1to
+ä1to
+ä1ta
+ö1ta
+a1wi
+a1we
+y1wä
+y1wi
+y1we
+o1wi
+o1we
+u1wi
+u1we
+i1wa
+i1wo
+e1wa
+e1wo
+ä1wo
+ä1wa
+ö1wa
+a1ýi
+a1ýe
+y1ýä
+y1ýi
+y1ýe
+o1ýi
+o1ýe
+u1ýi
+u1ýe
+i1ýa
+i1ýo
+e1ýa
+e1ýo
+ä1ýo
+ä1ýa
+ö1ýa
+a1zi
+a1ze
+y1zä
+y1zi
+y1ze
+o1zi
+o1ze
+u1zi
+u1ze
+i1za
+i1zo
+e1za
+e1zo
+ä1zo
+ä1za
+ö1za
+a1ňi
+a1ňe
+y1ňä
+y1ňi
+y1ňe
+o1ňi
+o1ňe
+u1ňi
+u1ňe
+i1ňa
+i1ňo
+e1ňa
+e1ňo
+ä1ňo
+ä1ňa
+ö1ňa
+a1ži
+a1že
+y1žä
+y1ži
+y1že
+o1ži
+o1že
+u1ži
+u1že
+i1ža
+i1žo
+e1ža
+e1žo
+ä1žo
+ä1ža
+ö1ža
+a1şi
+a1şe
+y1şä
+y1şi
+y1şe
+o1şi
+o1şe
+u1şi
+u1şe
+i1şa
+i1şo
+e1şa
+e1şo
+ä1şo
+ä1şa
+ö1şa
+b1b
+.b2b
+b1ç
+.b2ç
+b1d
+.b2d
+b1f
+.b2f
+b1g
+.b2g
+b1h
+.b2h
+b1j
+.b2j
+b1k
+.b2k
+b1l
+.b2l
+b1m
+.b2m
+b1n
+.b2n
+b1p
+.b2p
+b1r
+.b2r
+b1s
+.b2s
+b1t
+.b2t
+b1w
+.b2w
+b1ý
+.b2ý
+b1z
+.b2z
+b1ň
+.b2ň
+b1ž
+.b2ž
+b1ş
+.b2ş
+ç1b
+.ç2b
+ç1ç
+.ç2ç
+ç1d
+.ç2d
+ç1f
+.ç2f
+ç1g
+.ç2g
+ç1h
+.ç2h
+ç1j
+.ç2j
+ç1k
+.ç2k
+ç1l
+.ç2l
+ç1m
+.ç2m
+ç1n
+.ç2n
+ç1p
+.ç2p
+ç1r
+.ç2r
+ç1s
+.ç2s
+ç1t
+.ç2t
+ç1w
+.ç2w
+ç1ý
+.ç2ý
+ç1z
+.ç2z
+ç1ň
+.ç2ň
+ç1ž
+.ç2ž
+ç1ş
+.ç2ş
+d1b
+.d2b
+d1ç
+.d2ç
+d1d
+.d2d
+d1f
+.d2f
+d1g
+.d2g
+d1h
+.d2h
+d1j
+.d2j
+d1k
+.d2k
+d1l
+.d2l
+d1m
+.d2m
+d1n
+.d2n
+d1p
+.d2p
+d1r
+.d2r
+d1s
+.d2s
+d1t
+.d2t
+d1w
+.d2w
+d1ý
+.d2ý
+d1z
+.d2z
+d1ň
+.d2ň
+d1ž
+.d2ž
+d1ş
+.d2ş
+f1b
+.f2b
+f1ç
+.f2ç
+f1d
+.f2d
+f1f
+.f2f
+f1g
+.f2g
+f1h
+.f2h
+f1j
+.f2j
+f1k
+.f2k
+f1l
+.f2l
+f1m
+.f2m
+f1n
+.f2n
+f1p
+.f2p
+f1r
+.f2r
+f1s
+.f2s
+f1t
+.f2t
+f1w
+.f2w
+f1ý
+.f2ý
+f1z
+.f2z
+f1ň
+.f2ň
+f1ž
+.f2ž
+f1ş
+.f2ş
+g1b
+.g2b
+g1ç
+.g2ç
+g1d
+.g2d
+g1f
+.g2f
+g1g
+.g2g
+g1h
+.g2h
+g1j
+.g2j
+g1k
+.g2k
+g1l
+.g2l
+g1m
+.g2m
+g1n
+.g2n
+g1p
+.g2p
+g1r
+.g2r
+g1s
+.g2s
+g1t
+.g2t
+g1w
+.g2w
+g1ý
+.g2ý
+g1z
+.g2z
+g1ň
+.g2ň
+g1ž
+.g2ž
+g1ş
+.g2ş
+h1b
+.h2b
+h1ç
+.h2ç
+h1d
+.h2d
+h1f
+.h2f
+h1g
+.h2g
+h1h
+.h2h
+h1j
+.h2j
+h1k
+.h2k
+h1l
+.h2l
+h1m
+.h2m
+h1n
+.h2n
+h1p
+.h2p
+h1r
+.h2r
+h1s
+.h2s
+h1t
+.h2t
+h1w
+.h2w
+h1ý
+.h2ý
+h1z
+.h2z
+h1ň
+.h2ň
+h1ž
+.h2ž
+h1ş
+.h2ş
+j1b
+.j2b
+j1ç
+.j2ç
+j1d
+.j2d
+j1f
+.j2f
+j1g
+.j2g
+j1h
+.j2h
+j1j
+.j2j
+j1k
+.j2k
+j1l
+.j2l
+j1m
+.j2m
+j1n
+.j2n
+j1p
+.j2p
+j1r
+.j2r
+j1s
+.j2s
+j1t
+.j2t
+j1w
+.j2w
+j1ý
+.j2ý
+j1z
+.j2z
+j1ň
+.j2ň
+j1ž
+.j2ž
+j1ş
+.j2ş
+k1b
+.k2b
+k1ç
+.k2ç
+k1d
+.k2d
+k1f
+.k2f
+k1g
+.k2g
+k1h
+.k2h
+k1j
+.k2j
+k1k
+.k2k
+k1l
+.k2l
+k1m
+.k2m
+k1n
+.k2n
+k1p
+.k2p
+k1r
+.k2r
+k1s
+.k2s
+k1t
+.k2t
+k1w
+.k2w
+k1ý
+.k2ý
+k1z
+.k2z
+k1ň
+.k2ň
+k1ž
+.k2ž
+k1ş
+.k2ş
+l1b
+.l2b
+l1ç
+.l2ç
+l1d
+.l2d
+l1f
+.l2f
+l1g
+.l2g
+l1h
+.l2h
+l1j
+.l2j
+l1k
+.l2k
+l1l
+.l2l
+l1m
+.l2m
+l1n
+.l2n
+l1p
+.l2p
+l1r
+.l2r
+l1s
+.l2s
+l1t
+.l2t
+l1w
+.l2w
+l1ý
+.l2ý
+l1z
+.l2z
+l1ň
+.l2ň
+l1ž
+.l2ž
+l1ş
+.l2ş
+m1b
+.m2b
+m1ç
+.m2ç
+m1d
+.m2d
+m1f
+.m2f
+m1g
+.m2g
+m1h
+.m2h
+m1j
+.m2j
+m1k
+.m2k
+m1l
+.m2l
+m1m
+.m2m
+m1n
+.m2n
+m1p
+.m2p
+m1r
+.m2r
+m1s
+.m2s
+m1t
+.m2t
+m1w
+.m2w
+m1ý
+.m2ý
+m1z
+.m2z
+m1ň
+.m2ň
+m1ž
+.m2ž
+m1ş
+.m2ş
+n1b
+.n2b
+n1ç
+.n2ç
+n1d
+.n2d
+n1f
+.n2f
+n1g
+.n2g
+n1h
+.n2h
+n1j
+.n2j
+n1k
+.n2k
+n1l
+.n2l
+n1m
+.n2m
+n1n
+.n2n
+n1p
+.n2p
+n1r
+.n2r
+n1s
+.n2s
+n1t
+.n2t
+n1w
+.n2w
+n1ý
+.n2ý
+n1z
+.n2z
+n1ň
+.n2ň
+n1ž
+.n2ž
+n1ş
+.n2ş
+p1b
+.p2b
+p1ç
+.p2ç
+p1d
+.p2d
+p1f
+.p2f
+p1g
+.p2g
+p1h
+.p2h
+p1j
+.p2j
+p1k
+.p2k
+p1l
+.p2l
+p1m
+.p2m
+p1n
+.p2n
+p1p
+.p2p
+p1r
+.p2r
+p1s
+.p2s
+p1t
+.p2t
+p1w
+.p2w
+p1ý
+.p2ý
+p1z
+.p2z
+p1ň
+.p2ň
+p1ž
+.p2ž
+p1ş
+.p2ş
+r1b
+.r2b
+r1ç
+.r2ç
+r1d
+.r2d
+r1f
+.r2f
+r1g
+.r2g
+r1h
+.r2h
+r1j
+.r2j
+r1k
+.r2k
+r1l
+.r2l
+r1m
+.r2m
+r1n
+.r2n
+r1p
+.r2p
+r1r
+.r2r
+r1s
+.r2s
+r1t
+.r2t
+r1w
+.r2w
+r1ý
+.r2ý
+r1z
+.r2z
+r1ň
+.r2ň
+r1ž
+.r2ž
+r1ş
+.r2ş
+s1b
+.s2b
+s1ç
+.s2ç
+s1d
+.s2d
+s1f
+.s2f
+s1g
+.s2g
+s1h
+.s2h
+s1j
+.s2j
+s1k
+.s2k
+s1l
+.s2l
+s1m
+.s2m
+s1n
+.s2n
+s1p
+.s2p
+s1r
+.s2r
+s1s
+.s2s
+s1t
+.s2t
+s1w
+.s2w
+s1ý
+.s2ý
+s1z
+.s2z
+s1ň
+.s2ň
+s1ž
+.s2ž
+s1ş
+.s2ş
+t1b
+.t2b
+t1ç
+.t2ç
+t1d
+.t2d
+t1f
+.t2f
+t1g
+.t2g
+t1h
+.t2h
+t1j
+.t2j
+t1k
+.t2k
+t1l
+.t2l
+t1m
+.t2m
+t1n
+.t2n
+t1p
+.t2p
+t1r
+.t2r
+t1s
+.t2s
+t1t
+.t2t
+t1w
+.t2w
+t1ý
+.t2ý
+t1z
+.t2z
+t1ň
+.t2ň
+t1ž
+.t2ž
+t1ş
+.t2ş
+w1b
+.w2b
+w1ç
+.w2ç
+w1d
+.w2d
+w1f
+.w2f
+w1g
+.w2g
+w1h
+.w2h
+w1j
+.w2j
+w1k
+.w2k
+w1l
+.w2l
+w1m
+.w2m
+w1n
+.w2n
+w1p
+.w2p
+w1r
+.w2r
+w1s
+.w2s
+w1t
+.w2t
+w1w
+.w2w
+w1ý
+.w2ý
+w1z
+.w2z
+w1ň
+.w2ň
+w1ž
+.w2ž
+w1ş
+.w2ş
+ý1b
+.ý2b
+ý1ç
+.ý2ç
+ý1d
+.ý2d
+ý1f
+.ý2f
+ý1g
+.ý2g
+ý1h
+.ý2h
+ý1j
+.ý2j
+ý1k
+.ý2k
+ý1l
+.ý2l
+ý1m
+.ý2m
+ý1n
+.ý2n
+ý1p
+.ý2p
+ý1r
+.ý2r
+ý1s
+.ý2s
+ý1t
+.ý2t
+ý1w
+.ý2w
+ý1ý
+.ý2ý
+ý1z
+.ý2z
+ý1ň
+.ý2ň
+ý1ž
+.ý2ž
+ý1ş
+.ý2ş
+z1b
+.z2b
+z1ç
+.z2ç
+z1d
+.z2d
+z1f
+.z2f
+z1g
+.z2g
+z1h
+.z2h
+z1j
+.z2j
+z1k
+.z2k
+z1l
+.z2l
+z1m
+.z2m
+z1n
+.z2n
+z1p
+.z2p
+z1r
+.z2r
+z1s
+.z2s
+z1t
+.z2t
+z1w
+.z2w
+z1ý
+.z2ý
+z1z
+.z2z
+z1ň
+.z2ň
+z1ž
+.z2ž
+z1ş
+.z2ş
+ň1b
+.ň2b
+ň1ç
+.ň2ç
+ň1d
+.ň2d
+ň1f
+.ň2f
+ň1g
+.ň2g
+ň1h
+.ň2h
+ň1j
+.ň2j
+ň1k
+.ň2k
+ň1l
+.ň2l
+ň1m
+.ň2m
+ň1n
+.ň2n
+ň1p
+.ň2p
+ň1r
+.ň2r
+ň1s
+.ň2s
+ň1t
+.ň2t
+ň1w
+.ň2w
+ň1ý
+.ň2ý
+ň1z
+.ň2z
+ň1ň
+.ň2ň
+ň1ž
+.ň2ž
+ň1ş
+.ň2ş
+ž1b
+.ž2b
+ž1ç
+.ž2ç
+ž1d
+.ž2d
+ž1f
+.ž2f
+ž1g
+.ž2g
+ž1h
+.ž2h
+ž1j
+.ž2j
+ž1k
+.ž2k
+ž1l
+.ž2l
+ž1m
+.ž2m
+ž1n
+.ž2n
+ž1p
+.ž2p
+ž1r
+.ž2r
+ž1s
+.ž2s
+ž1t
+.ž2t
+ž1w
+.ž2w
+ž1ý
+.ž2ý
+ž1z
+.ž2z
+ž1ň
+.ž2ň
+ž1ž
+.ž2ž
+ž1ş
+.ž2ş
+ş1b
+.ş2b
+ş1ç
+.ş2ç
+ş1d
+.ş2d
+ş1f
+.ş2f
+ş1g
+.ş2g
+ş1h
+.ş2h
+ş1j
+.ş2j
+ş1k
+.ş2k
+ş1l
+.ş2l
+ş1m
+.ş2m
+ş1n
+.ş2n
+ş1p
+.ş2p
+ş1r
+.ş2r
+ş1s
+.ş2s
+ş1t
+.ş2t
+ş1w
+.ş2w
+ş1ý
+.ş2ý
+ş1z
+.ş2z
+ş1ň
+.ş2ň
+ş1ž
+.ş2ž
+ş1ş
+.ş2ş
+ý2t1b
+ý2n1b
+ý2d1b
+r2t1b
+ý2p1b
+l2p1b
+l2t1b
+g2t1b
+n2t1b
+r2k1b
+r2p1b
+k2t1b
+r2h1b
+s2t1b
+l2k1b
+w2p1b
+n2s1b
+r2s1b
+l2m1b
+ý2t1ç
+ý2n1ç
+ý2d1ç
+r2t1ç
+ý2p1ç
+l2p1ç
+l2t1ç
+g2t1ç
+n2t1ç
+r2k1ç
+r2p1ç
+k2t1ç
+r2h1ç
+s2t1ç
+l2k1ç
+w2p1ç
+n2s1ç
+r2s1ç
+l2m1ç
+ý2t1d
+ý2n1d
+ý2d1d
+r2t1d
+ý2p1d
+l2p1d
+l2t1d
+g2t1d
+n2t1d
+r2k1d
+r2p1d
+k2t1d
+r2h1d
+s2t1d
+l2k1d
+w2p1d
+n2s1d
+r2s1d
+l2m1d
+ý2t1g
+ý2n1g
+ý2d1g
+r2t1g
+ý2p1g
+l2p1g
+l2t1g
+g2t1g
+n2t1g
+r2k1g
+r2p1g
+k2t1g
+r2h1g
+s2t1g
+l2k1g
+w2p1g
+n2s1g
+r2s1g
+l2m1g
+ý2t1j
+ý2n1j
+ý2d1j
+r2t1j
+ý2p1j
+l2p1j
+l2t1j
+g2t1j
+n2t1j
+r2k1j
+r2p1j
+k2t1j
+r2h1j
+s2t1j
+l2k1j
+w2p1j
+n2s1j
+r2s1j
+l2m1j
+ý2t1k
+ý2n1k
+ý2d1k
+r2t1k
+ý2p1k
+l2p1k
+l2t1k
+g2t1k
+n2t1k
+r2k1k
+r2p1k
+k2t1k
+r2h1k
+s2t1k
+l2k1k
+w2p1k
+n2s1k
+r2s1k
+l2m1k
+ý2t1l
+ý2n1l
+ý2d1l
+r2t1l
+ý2p1l
+l2p1l
+l2t1l
+g2t1l
+n2t1l
+r2k1l
+r2p1l
+k2t1l
+r2h1l
+s2t1l
+l2k1l
+w2p1l
+n2s1l
+r2s1l
+l2m1l
+ý2t1m
+ý2n1m
+ý2d1m
+r2t1m
+ý2p1m
+l2p1m
+l2t1m
+g2t1m
+n2t1m
+r2k1m
+r2p1m
+k2t1m
+r2h1m
+s2t1m
+l2k1m
+w2p1m
+n2s1m
+r2s1m
+l2m1m
+ý2t1n
+ý2n1n
+ý2d1n
+r2t1n
+ý2p1n
+l2p1n
+l2t1n
+g2t1n
+n2t1n
+r2k1n
+r2p1n
+k2t1n
+r2h1n
+s2t1n
+l2k1n
+w2p1n
+n2s1n
+r2s1n
+l2m1n
+ý2t1p
+ý2n1p
+ý2d1p
+r2t1p
+ý2p1p
+l2p1p
+l2t1p
+g2t1p
+n2t1p
+r2k1p
+r2p1p
+k2t1p
+r2h1p
+s2t1p
+l2k1p
+w2p1p
+n2s1p
+r2s1p
+l2m1p
+ý2t1s
+ý2n1s
+ý2d1s
+r2t1s
+ý2p1s
+l2p1s
+l2t1s
+g2t1s
+n2t1s
+r2k1s
+r2p1s
+k2t1s
+r2h1s
+s2t1s
+l2k1s
+w2p1s
+n2s1s
+r2s1s
+l2m1s
+ý2t1t
+ý2n1t
+ý2d1t
+r2t1t
+ý2p1t
+l2p1t
+l2t1t
+g2t1t
+n2t1t
+r2k1t
+r2p1t
+k2t1t
+r2h1t
+s2t1t
+l2k1t
+w2p1t
+n2s1t
+r2s1t
+l2m1t
+ý2t1ý
+ý2n1ý
+ý2d1ý
+r2t1ý
+ý2p1ý
+l2p1ý
+l2t1ý
+g2t1ý
+n2t1ý
+r2k1ý
+r2p1ý
+k2t1ý
+r2h1ý
+s2t1ý
+l2k1ý
+w2p1ý
+n2s1ý
+r2s1ý
+l2m1ý
+ý2t1z
+ý2n1z
+ý2d1z
+r2t1z
+ý2p1z
+l2p1z
+l2t1z
+g2t1z
+n2t1z
+r2k1z
+r2p1z
+k2t1z
+r2h1z
+s2t1z
+l2k1z
+w2p1z
+n2s1z
+r2s1z
+l2m1z
+ý2t1ş
+ý2n1ş
+ý2d1ş
+r2t1ş
+ý2p1ş
+l2p1ş
+l2t1ş
+g2t1ş
+n2t1ş
+r2k1ş
+r2p1ş
+k2t1ş
+r2h1ş
+s2t1ş
+l2k1ş
+w2p1ş
+n2s1ş
+r2s1ş
+l2m1ş
+s2k1d
+l1s2k
+l1s2t
+s1t2r
+n2g1l
+n1g2r
+s2k1w} \ No newline at end of file
diff --git a/Master/texmf-dist/tex/context/patterns/lang-tk.rme b/Master/texmf-dist/tex/context/patterns/lang-tk.rme
new file mode 100644
index 00000000000..d5a71a6368b
--- /dev/null
+++ b/Master/texmf-dist/tex/context/patterns/lang-tk.rme
@@ -0,0 +1,18 @@
+% generated by mtxrun --script pattern --convert
+
+% Hyphenation patterns for Turkmen (hyph-tk.tex)
+%
+% Author: Nazar Annagurban <nazartm at gmail.com>
+% License: Public domain
+% Version: 0.1
+% Date: 16 March 2010
+%
+% ----------------------------------------------------------------------
+%
+% The file has been auto-generated from generate_patterns_tk.rb
+% that is part of hyph-utf8.
+%
+% For more information about UTF-8 hyphenation patterns for TeX and
+% links to this file see
+% http://www.tug.org/tex-hyphen/
+% \ No newline at end of file
diff --git a/Master/texmf-dist/tex/context/patterns/lang-tr.hyp b/Master/texmf-dist/tex/context/patterns/lang-tr.hyp
index 94078d6209c..ad68813ae3c 100644
--- a/Master/texmf-dist/tex/context/patterns/lang-tr.hyp
+++ b/Master/texmf-dist/tex/context/patterns/lang-tr.hyp
@@ -1,6 +1,6 @@
% generated by mtxrun --script pattern --convert
-% for comment and copyright, see ./lang-tr.rme
+% for comment and copyright, see e:/tmp/patterns/lang-tr.rme
% used:
diff --git a/Master/texmf-dist/tex/context/patterns/lang-tr.pat b/Master/texmf-dist/tex/context/patterns/lang-tr.pat
index 5f48e998d39..0d91c5ca3dd 100644
--- a/Master/texmf-dist/tex/context/patterns/lang-tr.pat
+++ b/Master/texmf-dist/tex/context/patterns/lang-tr.pat
@@ -1,6 +1,6 @@
% generated by mtxrun --script pattern --convert
-% for comment and copyright, see ./lang-tr.rme
+% for comment and copyright, see e:/tmp/patterns/lang-tr.rme
% used: a b c d e f g h i j k l m n o p r s t u v y z â ç î ö û ü ğ ı ş
diff --git a/Master/texmf-dist/tex/context/patterns/lang-us.hyp b/Master/texmf-dist/tex/context/patterns/lang-us.hyp
index effc3e709e7..0bcdd12109d 100644
--- a/Master/texmf-dist/tex/context/patterns/lang-us.hyp
+++ b/Master/texmf-dist/tex/context/patterns/lang-us.hyp
@@ -1,6 +1,6 @@
% generated by mtxrun --script pattern --convert
-% for comment and copyright, see ./lang-us.rme
+% for comment and copyright, see e:/tmp/patterns/lang-us.rme
% used: a b c d e f g h i j l m n o p r s t u y z
diff --git a/Master/texmf-dist/tex/context/patterns/lang-us.pat b/Master/texmf-dist/tex/context/patterns/lang-us.pat
index fbe4050b07f..cbd86738594 100644
--- a/Master/texmf-dist/tex/context/patterns/lang-us.pat
+++ b/Master/texmf-dist/tex/context/patterns/lang-us.pat
@@ -1,6 +1,6 @@
% generated by mtxrun --script pattern --convert
-% for comment and copyright, see ./lang-us.rme
+% for comment and copyright, see e:/tmp/patterns/lang-us.rme
% used: a b c d e f g h i j k l m n o p q r s t u v w x y z
diff --git a/Master/texmf-dist/tex/context/patterns/lang-zh.hyp b/Master/texmf-dist/tex/context/patterns/lang-zh.hyp
new file mode 100644
index 00000000000..7b3e518b4b2
--- /dev/null
+++ b/Master/texmf-dist/tex/context/patterns/lang-zh.hyp
@@ -0,0 +1,8 @@
+% generated by mtxrun --script pattern --convert
+
+% for comment and copyright, see e:/tmp/patterns/lang-zh.rme
+
+% used:
+
+\hyphenation{
+} \ No newline at end of file
diff --git a/Master/texmf-dist/tex/context/patterns/lang-zh.pat b/Master/texmf-dist/tex/context/patterns/lang-zh.pat
new file mode 100644
index 00000000000..264c84b9b21
--- /dev/null
+++ b/Master/texmf-dist/tex/context/patterns/lang-zh.pat
@@ -0,0 +1,195 @@
+% generated by mtxrun --script pattern --convert
+
+% for comment and copyright, see e:/tmp/patterns/lang-zh.rme
+
+% used: a b c d e f g h i j k l m n o p q r s t u w x y z ü
+
+\patterns{
+a1b
+a1c
+a1d
+a1f
+a1g
+a1h
+a1j
+a1k
+a1l
+a1m
+a1p
+a1q
+a1r
+a1s
+a1t
+a1w
+a1x
+a1y
+a1z
+e1b
+e1c
+e1d
+e1f
+e1g
+e1h
+e1j
+e1k
+e1l
+e1m
+e1p
+e1q
+e1s
+e1t
+e1w
+e1x
+e1y
+e1z
+1ga
+g1b
+g1c
+g1d
+1ge
+g1f
+g1g
+g1h
+g1j
+g1k
+g1l
+g1m
+g1n
+1go
+g1p
+g1q
+g1r
+g1s
+g1t
+1gu
+g1w
+g1x
+g1y
+g1z
+i1b
+i1c
+i1d
+i1f
+i1g
+i1h
+i1j
+i1k
+i1l
+i1m
+i1p
+i1q
+i1r
+i1s
+i1t
+i1w
+i1x
+i1y
+i1z
+1na
+n1b
+n1c
+n1d
+1ne
+n1f
+n1h
+1ni
+n1j
+n1k
+n1l
+n1m
+n1n
+1no
+n1p
+n1q
+n1r
+n1s
+n1t
+1nu
+1nü
+n1w
+n1x
+n1y
+n1z
+o1b
+o1c
+o1d
+o1f
+o1g
+o1h
+o1j
+o1k
+o1l
+o1m
+o1p
+o1q
+o1r
+o1s
+o1t
+o1w
+o1x
+o1y
+o1z
+1ra
+r1b
+r1c
+r1d
+1re
+r1f
+r1g
+r1h
+1ri
+r1j
+r1k
+r1l
+r1m
+r1n
+1ro
+r1p
+r1q
+r1r
+r1s
+r1t
+1ru
+r1w
+r1x
+r1y
+r1z
+u1b
+u1c
+u1d
+u1f
+u1g
+u1h
+u1j
+u1k
+u1l
+u1m
+u1p
+u1q
+u1r
+u1s
+u1t
+u1w
+u1x
+u1y
+u1z
+ü1b
+ü1c
+ü1d
+ü1f
+ü1g
+ü1h
+ü1j
+ü1k
+ü1l
+ü1m
+ü1n
+ü1p
+ü1q
+ü1r
+ü1s
+ü1t
+ü1w
+ü1x
+ü1y
+ü1z} \ No newline at end of file
diff --git a/Master/texmf-dist/tex/context/patterns/lang-zh.rme b/Master/texmf-dist/tex/context/patterns/lang-zh.rme
new file mode 100644
index 00000000000..f2dd9def7f1
--- /dev/null
+++ b/Master/texmf-dist/tex/context/patterns/lang-zh.rme
@@ -0,0 +1,88 @@
+% generated by mtxrun --script pattern --convert
+
+% This file is part of hyph-utf8 package and resulted from
+% semi-manual conversions of hyphenation patterns into UTF-8 in June 2008.
+%
+% Source: pyhyph.tex (yyyy-mm-dd)
+% Author: Werner Lemberg <wl at gnu.org>
+%
+% The above mentioned file should become obsolete,
+% and the author of the original file should preferaby modify this file instead.
+%
+% Modificatios were needed in order to support native UTF-8 engines,
+% but functionality (hopefully) didn't change in any way, at least not intentionally.
+% This file is no longer stand-alone; at least for 8-bit engines
+% you probably want to use loadhyph-foo.tex (which will load this file) instead.
+%
+% Modifications were done by Jonathan Kew, Mojca Miklavec & Arthur Reutenauer
+% with help & support from:
+% - Karl Berry, who gave us free hands and all resources
+% - Taco Hoekwater, with useful macros
+% - Hans Hagen, who did the unicodifisation of patterns already long before
+% and helped with testing, suggestions and bug reports
+% - Norbert Preining, who tested & integrated patterns into TeX Live
+%
+% However, the "copyright/copyleft" owner of patterns remains the original author.
+%
+% The copyright statement of this file is thus:
+%
+% Do with this file whatever needs to be done in future for the sake of
+% "a better world" as long as you respect the copyright of original file.
+% If you're the original author of patterns or taking over a new revolution,
+% plese remove all of the TUG comments & credits that we added here -
+% you are the Queen / the King, we are only the servants.
+%
+% If you want to change this file, rather than uploading directly to CTAN,
+% we would be grateful if you could send it to us (http://tug.org/tex-hyphen)
+% or ask for credentials for SVN repository and commit it yourself;
+% we will then upload the whole "package" to CTAN.
+%
+% Before a new "pattern-revolution" starts,
+% please try to follow some guidelines if possible:
+%
+% - \lccode is *forbidden*, and I really mean it
+% - all the patterns should be in UTF-8
+% - the only "allowed" TeX commands in this file are: \patterns, \hyphenation,
+% and if you really cannot do without, also \input and \message
+% - in particular, please no \catcode or \lccode changes,
+% they belong to loadhyph-foo.tex,
+% and no \lefthyphenmin and \righthyphenmin,
+% they have no influence here and belong elsewhere
+% - \begingroup and/or \endinput is not needed
+% - feel free to do whatever you want inside comments
+%
+% We know that TeX is extremely powerful, but give a stupid parser
+% at least a chance to read your patterns.
+%
+% For more unformation see
+%
+% http://tug.org/tex-hyphen
+%
+%------------------------------------------------------------------------------
+%
+% This is the file pyhyph.tex of the CJK package
+% for hyphenating Chinese pinyin syllables.
+%
+% created by Werner Lemberg <wl@gnu.org>
+%
+% Version 4.8.0 (22-May-2008)
+%
+% Copyright (C) 1994-2008 Werner Lemberg <wl@gnu.org>
+%
+% This program is free software; you can redistribute it and/or modify
+% it under the terms of the GNU General Public License as published by
+% the Free Software Foundation; either version 2 of the License, or
+% (at your option) any later version.
+%
+% This program is distributed in the hope that it will be useful,
+% but WITHOUT ANY WARRANTY; without even the implied warranty of
+% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+% GNU General Public License for more details.
+%
+% You should have received a copy of the GNU General Public License
+% along with this program in doc/COPYING; if not, write to the Free
+% Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston,
+% MA 02110-1301 USA
+%
+% \message{Hyphenation patterns for unaccented pinyin syllables (CJK 4.7.0)}
+% \ No newline at end of file
diff --git a/Master/texmf-dist/tex/context/sample/demo-cld.cld b/Master/texmf-dist/tex/context/sample/demo-cld.cld
deleted file mode 100644
index 7e470da6297..00000000000
--- a/Master/texmf-dist/tex/context/sample/demo-cld.cld
+++ /dev/null
@@ -1,74 +0,0 @@
--- context.enabletrackers {"tud.trace"}
-
-context.setuplayout( {
- width = "middle",
- height = "middle",
-})
-
-context.showframe()
-
-context.starttext()
-
-context.chapter({ "someref" }, "Hello There")
-
-context.readfile("tufte","","not found")
-
-context.startitemize({ "packed" })
- for i=1,10 do
- context.startitem()
- context("this is item %i",i)
- context.stopitem()
- end
-context.stopitemize()
-
-context.startchapter({ title = "test" }, { more = "oeps" })
-
- context["in"]("chapter",{ "someref" })
-
- context.startlinecorrection( { "blank" })
- context.bTABLE()
- for i=1,10 do
- context.bTR()
- for i=1,20 do
- context.bTD({ align= "middle", style = "type" })
- context("%#2i",math.random(99))
- context.eTD()
- end
- context.eTR()
- end
- context.eTABLE()
- context.stoplinecorrection()
-
- context.mathematics("x^{2 \\times 4}")
-
- context.placefigure("caption", function()
- context.externalfigure( { "cow.pdf" } )
- end)
-
- context.placefigure("caption", function()
- context.bTABLE()
- context.bTR()
- context.bTD()
- context.externalfigure( { "cow.pdf" }, { width = "3cm", height = "3cm" } )
- context.eTD()
- context.bTD({ align = "{lohi,middle}" } )
- context("and")
- context.eTD()
- context.bTD()
- context.externalfigure( { "cow.pdf" }, { width = "4cm", height = "3cm" } )
- context.eTD()
- context.eTR()
- context.eTABLE()
- end)
-
-context.stopchapter()
-
-context.chapter("Speed Test 1")
-
-for i=1,50 do
- context.readfile("tufte","","not found")
- context.par()
-end
-
-context.stoptext()
-
diff --git a/Master/texmf-dist/tex/context/sample/sample.tex b/Master/texmf-dist/tex/context/sample/sample.tex
index d54d8b74780..5f97ea00964 100644
--- a/Master/texmf-dist/tex/context/sample/sample.tex
+++ b/Master/texmf-dist/tex/context/sample/sample.tex
@@ -9,39 +9,40 @@ If someone makes a nice bibtex file of these, the quotes can also be
used in testing bibliographic references and citations.
\starttabulate[|l|l|p|]
-\NC \bf file \NC \bf author \NC \bf source \NC \NR
+\NC \bf file \NC \bf author \NC \bf source \NC \NR
\HL
-%NC stork.tex \NC David F. Stork \NC \NC \NR
-\NC knuth.tex \NC Donald E. Knuth \NC \NC \NR
-\NC tufte.tex \NC Edward R. Tufte \NC \NC \NR
-\NC reich.tex \NC Steve Reich \NC \NC \NR
-\NC materie.tex \NC Louis Andriessen \NC De Materie \NC \NR
-\NC douglas.tex \NC Douglas R. Hofstadter \NC \NC \NR
-\NC dawkins.tex \NC Dawkins \NC \NC \NR
-\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
-\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
- Everything You Need to Know About American
- History but Never Learned, \endgraf
- HarperCollins, 2003 \NC \NR
-\NC thuan.tex \NC Trinh Xuan Thuan \NC Chaos and Harmony, Perspectives on Scientific
- 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
-\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
-\NC carrol.tex \NC Sean B. Carrol \NC The Making of the Fittest, \endgraf
- Quercus, London, 2006 \NC \NR
+%NC stork.tex \NC David F. Stork \NC \NC \NR
+\NC knuth.tex \NC Donald E. Knuth \NC \NC \NR
+\NC tufte.tex \NC Edward R. Tufte \NC \NC \NR
+\NC reich.tex \NC Steve Reich \NC \NC \NR
+\NC materie.tex \NC Louis Andriessen \NC De Materie \NC \NR
+\NC douglas.tex \NC Douglas R. Hofstadter \NC \NC \NR
+\NC dawkins.tex \NC Dawkins \NC \NC \NR
+\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
+\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
+ Everything You Need to Know About American
+ History but Never Learned, \endgraf
+ HarperCollins, 2003 \NC \NR
+\NC thuan.tex \NC Trinh Xuan Thuan \NC Chaos and Harmony, Perspectives on Scientific
+ 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
+\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
+\NC carrol.tex \NC Sean B. Carrol \NC The Making of the Fittest, \endgraf
+ Quercus, London, 2006 \NC \NR
+%NC schwarzenegger.tex \NC Arnold Schwarzenegger \NC Several place on the World Wide Web. \NC \NR
\stoptabulate
% Tufte: This quote will always produce hyphenated text, apart from the content,
@@ -68,4 +69,7 @@ used in testing bibliographic references and citations.
% The Making of the Fittest: nice sample for color ans subsentence testing. A very
% readable book but unfortunately it has inter-character spacing.
+% The Schwarzenegger letter was originally typeset at a width equivalent to 16.1cm in
+% a default ConTeXt setup.
+
\stoptext
diff --git a/Master/texmf-dist/tex/context/test/chem-str-test.tex b/Master/texmf-dist/tex/context/test/chem-str-test.tex
deleted file mode 100644
index fd6a8227a96..00000000000
--- a/Master/texmf-dist/tex/context/test/chem-str-test.tex
+++ /dev/null
@@ -1,560 +0,0 @@
-% Beware, integrated ppchtex support is incomplete and under
-% construction so when you depend on the full functionality
-% you need to use the module!
-%
-% For testing new functionality:
-%
-% \startMPextensions
-% input "mp-chem.mp" ;
-% \stopMPextensions
-% \startluacode
-% dofile(resolvers.find_file("chem-str.lua","tex"))
-% \stopluacode
-% \setbox\scratchbox\hbox{\startMPcode\stopMPcode}
-
-\enabletrackers[chemistry.structure]
-
-\starttext
-
-\defineprocessor[ch:r][color=red]
-\defineprocessor[ch:g][color=green]
-\defineprocessor[ch:b][color=blue]
-
-\setupchemical[frame=on,offset=3pt]
-
-\startbuffer[test-set]
-
- \dontleavehmode \startchemical \chemical[\ChemicalKind,B,MOV1,B] \stopchemical \quad
- \dontleavehmode \startchemical \chemical[\ChemicalKind,B,MOV2,B] \stopchemical \quad
- \dontleavehmode \startchemical \chemical[\ChemicalKind,B,MOV3,B] \stopchemical \quad
- \dontleavehmode \startchemical \chemical[\ChemicalKind,B,MOV4,B] \stopchemical \quad
- \dontleavehmode \startchemical \chemical[\ChemicalKind,B,MOV5,B] \stopchemical \quad
- \dontleavehmode \startchemical \chemical[\ChemicalKind,B,MOV6,B] \stopchemical \quad
-
- \dontleavehmode \startchemical \chemical[\ChemicalKind,B,R,AU] \stopchemical \quad
- \dontleavehmode \startchemical \chemical[\ChemicalKind,B,R,AD] \stopchemical \quad
- \dontleavehmode \startchemical \chemical[\ChemicalKind,B,EB] \stopchemical \quad
- \dontleavehmode \startchemical \chemical[\ChemicalKind,DB] \stopchemical \quad
- \dontleavehmode \startchemical \chemical[\ChemicalKind,ER] \stopchemical \quad
- \dontleavehmode \startchemical \chemical[\ChemicalKind,DR] \stopchemical \quad
- \dontleavehmode \startchemical \chemical[\ChemicalKind,BR] \stopchemical \quad
- \dontleavehmode \startchemical \chemical[\ChemicalKind,SB] \stopchemical \quad
- \dontleavehmode \startchemical \chemical[\ChemicalKind,-SB] \stopchemical \quad
- \dontleavehmode \startchemical \chemical[\ChemicalKind,+SB] \stopchemical \quad
- \dontleavehmode \startchemical \chemical[\ChemicalKind,B,C] \stopchemical \quad
- \dontleavehmode \startchemical \chemical[\ChemicalKind,B,CC] \stopchemical \quad
- \dontleavehmode \startchemical \chemical[\ChemicalKind,B,CD] \stopchemical \quad
- \dontleavehmode \startchemical \chemical[\ChemicalKind,B,CCD] \stopchemical \quad
- \dontleavehmode \startchemical \chemical[\ChemicalKind,SB,SR] \stopchemical \quad
- \dontleavehmode \startchemical \chemical[\ChemicalKind,SB,-SR] \stopchemical \quad
- \dontleavehmode \startchemical \chemical[\ChemicalKind,SB,+SR] \stopchemical \quad
- \dontleavehmode \startchemical \chemical[\ChemicalKind,B,R] \stopchemical \quad
- \dontleavehmode \startchemical \chemical[\ChemicalKind,B,RD] \stopchemical \quad
-
- \dontleavehmode \startchemical \chemical[\ChemicalKind,SB,Z] [a,b,c,d,e,f] \stopchemical \quad
- \dontleavehmode \startchemical \chemical[\ChemicalKind,B,R,RZ] [a,b,c,d,e,f] \stopchemical \quad
- \dontleavehmode \startchemical \chemical[\ChemicalKind,B,+R,+RZ] [a,b,c,d,e,f] \stopchemical \quad
- \dontleavehmode \startchemical \chemical[\ChemicalKind,B,-R,-RZ] [a,b,c,d,e,f] \stopchemical \quad
- \dontleavehmode \startchemical \chemical[\ChemicalKind,B,RB,RZ] [a,b,c,d,e,f] \stopchemical \quad
- \dontleavehmode \startchemical \chemical[\ChemicalKind,B,+RB,+RZ][a,b,c,d,e,f] \stopchemical \quad
- \dontleavehmode \startchemical \chemical[\ChemicalKind,B,-RB,-RZ][a,b,c,d,e,f] \stopchemical \quad
- \dontleavehmode \startchemical \chemical[\ChemicalKind,B,R,RT] [a,b,c,d,e,f] \stopchemical \quad
- \dontleavehmode \startchemical \chemical[\ChemicalKind,B,R,RTT] [a,b,c,d,e,f] \stopchemical \quad
- \dontleavehmode \startchemical \chemical[\ChemicalKind,B,R,RBT] [a,b,c,d,e,f] \stopchemical \quad
-
- \dontleavehmode \startchemical \chemical[\ChemicalKind,B,R,RN] \stopchemical \quad
- \dontleavehmode \startchemical \chemical[\ChemicalKind,B,R,RTN] \stopchemical \quad
- \dontleavehmode \startchemical \chemical[\ChemicalKind,B,R,RBN] \stopchemical \quad
-
- \dontleavehmode \startchemical \chemical[\ChemicalKind,B,R,RN] \stopchemical \quad
- \dontleavehmode \startchemical \chemical[\ChemicalKind,ROT1,B,R,RN] \stopchemical \quad
- \dontleavehmode \startchemical \chemical[\ChemicalKind,ROT2,B,R,RN] \stopchemical \quad
- \dontleavehmode \startchemical \chemical[\ChemicalKind,ROT3,B,R,RN] \stopchemical \quad
-
-\stopbuffer
-
-\dontcomplain
-
-% \startTEXpage
-
-\setupchemicalframed[frame=on]
-
-% \startTEXpage
-% \noindent \startchemical \chemical[THREE, B,R,RZ][RZ_1,RZ_2,RZ_3]\stopchemical
-% \noindent \startchemical \chemical[THREE,ROT1,B,R,RZ][RZ_1,RZ_2,RZ_3]\stopchemical
-% \noindent \startchemical \chemical[THREE,ROT2,B,R,RZ][RZ_1,RZ_2,RZ_3]\stopchemical
-% \noindent \startchemical \chemical[THREE,ROT3,B,R,RZ][RZ_1,RZ_2,RZ_3]\stopchemical
-% \noindent \startchemical \chemical[THREE,ROT4,B,R,RZ][RZ_1,RZ_2,RZ_3]\stopchemical
-
-% \noindent \startchemical \chemical[THREE, B,+R,+RZ][+RZ_1,+RZ_2,+RZ_3]\stopchemical
-% \noindent \startchemical \chemical[THREE,ROT1,B,+R,+RZ][+RZ_1,+RZ_2,+RZ_3]\stopchemical
-% \noindent \startchemical \chemical[THREE,ROT2,B,+R,+RZ][+RZ_1,+RZ_2,+RZ_3]\stopchemical
-% \noindent \startchemical \chemical[THREE,ROT3,B,+R,+RZ][+RZ_1,+RZ_2,+RZ_3]\stopchemical
-% \noindent \startchemical \chemical[THREE,ROT4,B,+R,+RZ][+RZ_1,+RZ_2,+RZ_3]\stopchemical
-
-% \noindent \startchemical \chemical[THREE, B,-R,-RZ][-RZ_1,-RZ_2,-RZ_3]\stopchemical
-% \noindent \startchemical \chemical[THREE,ROT1,B,-R,-RZ][-RZ_1,-RZ_2,-RZ_3]\stopchemical
-% \noindent \startchemical \chemical[THREE,ROT2,B,-R,-RZ][-RZ_1,-RZ_2,-RZ_3]\stopchemical
-% \noindent \startchemical \chemical[THREE,ROT3,B,-R,-RZ][-RZ_1,-RZ_2,-RZ_3]\stopchemical
-% \noindent \startchemical \chemical[THREE,ROT4,B,-R,-RZ][-RZ_1,-RZ_2,-RZ_3]\stopchemical
-% \stopTEXpage
-
-% \startTEXpage
-% \noindent \startchemical \chemical[SIX,ROT1,B, R, RZ, AU][RZ_1,RZ_2,RZ_3,RZ_4,RZ_5,RZ_6]\stopchemical
-% \noindent \startchemical \chemical[SIX,ROT2,B, R, RZ, AU][RZ_1,RZ_2,RZ_3,RZ_4,RZ_5,RZ_6]\stopchemical
-% \noindent \startchemical \chemical[SIX,ROT3,B, R, RZ, AU][RZ_1,RZ_2,RZ_3,RZ_4,RZ_5,RZ_6]\stopchemical
-% \noindent \startchemical \chemical[SIX,ROT4,B, R, RZ, AU][RZ_1,RZ_2,RZ_3,RZ_4,RZ_5,RZ_6]\stopchemical
-
-% \noindent \startchemical \chemical[SIX,ROT1,B,-R,-RZ][-RZ_1,-RZ_2,-RZ_3,-RZ_4,-RZ_5,-RZ_6]\stopchemical
-% \noindent \startchemical \chemical[SIX,ROT2,B,-R,-RZ][-RZ_1,-RZ_2,-RZ_3,-RZ_4,-RZ_5,-RZ_6]\stopchemical
-% \noindent \startchemical \chemical[SIX,ROT3,B,-R,-RZ][-RZ_1,-RZ_2,-RZ_3,-RZ_4,-RZ_5,-RZ_6]\stopchemical
-% \noindent \startchemical \chemical[SIX,ROT4,B,-R,-RZ][-RZ_1,-RZ_2,-RZ_3,-RZ_4,-RZ_5,-RZ_6]\stopchemical
-
-% \noindent \startchemical \chemical[SIX,ROT1,B,+R,+RZ][+RZ_1,+RZ_2,+RZ_3,+RZ_4,+RZ_5,+RZ_6]\stopchemical
-% \noindent \startchemical \chemical[SIX,ROT2,B,+R,+RZ][+RZ_1,+RZ_2,+RZ_3,+RZ_4,+RZ_5,+RZ_6]\stopchemical
-% \noindent \startchemical \chemical[SIX,ROT3,B,+R,+RZ][+RZ_1,+RZ_2,+RZ_3,+RZ_4,+RZ_5,+RZ_6]\stopchemical
-% \noindent \startchemical \chemical[SIX,ROT4,B,+R,+RZ][+RZ_1,+RZ_2,+RZ_3,+RZ_4,+RZ_5,+RZ_6]\stopchemical
-% \stopTEXpage
-
-% \startTEXpage
-% \noindent \startchemical \chemical[FIVE,ROT1,B, R, RZ, AU][RZ_1,RZ_2,RZ_3,RZ_4,RZ_5,RZ_6]\stopchemical
-% \noindent \startchemical \chemical[FIVE,ROT2,B, R, RZ, AU][RZ_1,RZ_2,RZ_3,RZ_4,RZ_5,RZ_6]\stopchemical
-% \noindent \startchemical \chemical[FIVE,ROT3,B, R, RZ, AU][RZ_1,RZ_2,RZ_3,RZ_4,RZ_5,RZ_6]\stopchemical
-% \noindent \startchemical \chemical[FIVE,ROT4,B, R, RZ, AU][RZ_1,RZ_2,RZ_3,RZ_4,RZ_5,RZ_6]\stopchemical
-
-% \noindent \startchemical \chemical[FIVE,ROT1,B,-R,-RZ][-RZ_1,-RZ_2,-RZ_3,-RZ_4,-RZ_5,-RZ_6]\stopchemical
-% \noindent \startchemical \chemical[FIVE,ROT2,B,-R,-RZ][-RZ_1,-RZ_2,-RZ_3,-RZ_4,-RZ_5,-RZ_6]\stopchemical
-% \noindent \startchemical \chemical[FIVE,ROT3,B,-R,-RZ][-RZ_1,-RZ_2,-RZ_3,-RZ_4,-RZ_5,-RZ_6]\stopchemical
-% \noindent \startchemical \chemical[FIVE,ROT4,B,-R,-RZ][-RZ_1,-RZ_2,-RZ_3,-RZ_4,-RZ_5,-RZ_6]\stopchemical
-
-% \noindent \startchemical \chemical[FIVE,ROT1,B,+R,+RZ][+RZ_1,+RZ_2,+RZ_3,+RZ_4,+RZ_5,+RZ_6]\stopchemical
-% \noindent \startchemical \chemical[FIVE,ROT2,B,+R,+RZ][+RZ_1,+RZ_2,+RZ_3,+RZ_4,+RZ_5,+RZ_6]\stopchemical
-% \noindent \startchemical \chemical[FIVE,ROT3,B,+R,+RZ][+RZ_1,+RZ_2,+RZ_3,+RZ_4,+RZ_5,+RZ_6]\stopchemical
-% \noindent \startchemical \chemical[FIVE,ROT4,B,+R,+RZ][+RZ_1,+RZ_2,+RZ_3,+RZ_4,+RZ_5,+RZ_6]\stopchemical
-% \stopTEXpage
-
-% \startTEXpage
-% \noindent \startchemical \chemical[FOUR,ROT1,B, R, RZ, AU][RZ_1,RZ_2,RZ_3,RZ_4,RZ_5,RZ_6]\stopchemical
-% \noindent \startchemical \chemical[FOUR,ROT2,B, R, RZ, AU][RZ_1,RZ_2,RZ_3,RZ_4,RZ_5,RZ_6]\stopchemical
-% \noindent \startchemical \chemical[FOUR,ROT3,B, R, RZ, AU][RZ_1,RZ_2,RZ_3,RZ_4,RZ_5,RZ_6]\stopchemical
-% \noindent \startchemical \chemical[FOUR,ROT4,B, R, RZ, AU][RZ_1,RZ_2,RZ_3,RZ_4,RZ_5,RZ_6]\stopchemical
-
-% \noindent \startchemical \chemical[FOUR,ROT1,B,-R,-RZ][-RZ_1,-RZ_2,-RZ_3,-RZ_4,-RZ_5,-RZ_6]\stopchemical
-% \noindent \startchemical \chemical[FOUR,ROT2,B,-R,-RZ][-RZ_1,-RZ_2,-RZ_3,-RZ_4,-RZ_5,-RZ_6]\stopchemical
-% \noindent \startchemical \chemical[FOUR,ROT3,B,-R,-RZ][-RZ_1,-RZ_2,-RZ_3,-RZ_4,-RZ_5,-RZ_6]\stopchemical
-% \noindent \startchemical \chemical[FOUR,ROT4,B,-R,-RZ][-RZ_1,-RZ_2,-RZ_3,-RZ_4,-RZ_5,-RZ_6]\stopchemical
-
-% \noindent \startchemical \chemical[FOUR,ROT1,B,+R,+RZ][+RZ_1,+RZ_2,+RZ_3,+RZ_4,+RZ_5,+RZ_6]\stopchemical
-% \noindent \startchemical \chemical[FOUR,ROT2,B,+R,+RZ][+RZ_1,+RZ_2,+RZ_3,+RZ_4,+RZ_5,+RZ_6]\stopchemical
-% \noindent \startchemical \chemical[FOUR,ROT3,B,+R,+RZ][+RZ_1,+RZ_2,+RZ_3,+RZ_4,+RZ_5,+RZ_6]\stopchemical
-% \noindent \startchemical \chemical[FOUR,ROT4,B,+R,+RZ][+RZ_1,+RZ_2,+RZ_3,+RZ_4,+RZ_5,+RZ_6]\stopchemical
-% \stopTEXpage
-
-% \startTEXpage
-% \noindent \startchemical \chemical[THREE,ROT1,B, R, RZ, AU][RZ_1,RZ_2,RZ_3,RZ_4,RZ_5,RZ_6]\stopchemical
-% \noindent \startchemical \chemical[THREE,ROT2,B, R, RZ, AU][RZ_1,RZ_2,RZ_3,RZ_4,RZ_5,RZ_6]\stopchemical
-% \noindent \startchemical \chemical[THREE,ROT3,B, R, RZ, AU][RZ_1,RZ_2,RZ_3,RZ_4,RZ_5,RZ_6]\stopchemical
-% \noindent \startchemical \chemical[THREE,ROT4,B, R, RZ, AU][RZ_1,RZ_2,RZ_3,RZ_4,RZ_5,RZ_6]\stopchemical
-
-% \noindent \startchemical \chemical[THREE,ROT1,B,-R,-RZ][-RZ_1,-RZ_2,-RZ_3,-RZ_4,-RZ_5,-RZ_6]\stopchemical
-% \noindent \startchemical \chemical[THREE,ROT2,B,-R,-RZ][-RZ_1,-RZ_2,-RZ_3,-RZ_4,-RZ_5,-RZ_6]\stopchemical
-% \noindent \startchemical \chemical[THREE,ROT3,B,-R,-RZ][-RZ_1,-RZ_2,-RZ_3,-RZ_4,-RZ_5,-RZ_6]\stopchemical
-% \noindent \startchemical \chemical[THREE,ROT4,B,-R,-RZ][-RZ_1,-RZ_2,-RZ_3,-RZ_4,-RZ_5,-RZ_6]\stopchemical
-
-% \noindent \startchemical \chemical[THREE,ROT1,B,+R,+RZ][+RZ_1,+RZ_2,+RZ_3,+RZ_4,+RZ_5,+RZ_6]\stopchemical
-% \noindent \startchemical \chemical[THREE,ROT2,B,+R,+RZ][+RZ_1,+RZ_2,+RZ_3,+RZ_4,+RZ_5,+RZ_6]\stopchemical
-% \noindent \startchemical \chemical[THREE,ROT3,B,+R,+RZ][+RZ_1,+RZ_2,+RZ_3,+RZ_4,+RZ_5,+RZ_6]\stopchemical
-% \noindent \startchemical \chemical[THREE,ROT4,B,+R,+RZ][+RZ_1,+RZ_2,+RZ_3,+RZ_4,+RZ_5,+RZ_6]\stopchemical
-% \stopTEXpage
-
-% \startTEXpage
-% \noindent \startchemical \chemical[EIGHT,ROT1,B, R, RZ, AU][RZ_1,RZ_2,RZ_3,RZ_4,RZ_5,RZ_6,RZ_7,RZ_8]\stopchemical
-% \noindent \startchemical \chemical[EIGHT,ROT2,B, R, RZ, AU][RZ_1,RZ_2,RZ_3,RZ_4,RZ_5,RZ_6,RZ_7,RZ_8]\stopchemical
-% \noindent \startchemical \chemical[EIGHT,ROT3,B, R, RZ, AU][RZ_1,RZ_2,RZ_3,RZ_4,RZ_5,RZ_6,RZ_7,RZ_8]\stopchemical
-% \noindent \startchemical \chemical[EIGHT,ROT4,B, R, RZ, AU][RZ_1,RZ_2,RZ_3,RZ_4,RZ_5,RZ_6,RZ_7,RZ_8]\stopchemical
-
-% \noindent \startchemical \chemical[EIGHT,ROT1,B,-R,-RZ][-RZ_1,-RZ_2,-RZ_3,-RZ_4,-RZ_5,-RZ_6,-RZ_7,-RZ_8]\stopchemical
-% \noindent \startchemical \chemical[EIGHT,ROT2,B,-R,-RZ][-RZ_1,-RZ_2,-RZ_3,-RZ_4,-RZ_5,-RZ_6,-RZ_7,-RZ_8]\stopchemical
-% \noindent \startchemical \chemical[EIGHT,ROT3,B,-R,-RZ][-RZ_1,-RZ_2,-RZ_3,-RZ_4,-RZ_5,-RZ_6,-RZ_7,-RZ_8]\stopchemical
-% \noindent \startchemical \chemical[EIGHT,ROT4,B,-R,-RZ][-RZ_1,-RZ_2,-RZ_3,-RZ_4,-RZ_5,-RZ_6,-RZ_7,-RZ_8]\stopchemical
-
-% \noindent \startchemical \chemical[EIGHT,ROT1,B,+R,+RZ][+RZ_1,+RZ_2,+RZ_3,+RZ_4,+RZ_5,+RZ_6,+RZ_7,+RZ_8]\stopchemical
-% \noindent \startchemical \chemical[EIGHT,ROT2,B,+R,+RZ][+RZ_1,+RZ_2,+RZ_3,+RZ_4,+RZ_5,+RZ_6,+RZ_7,+RZ_8]\stopchemical
-% \noindent \startchemical \chemical[EIGHT,ROT3,B,+R,+RZ][+RZ_1,+RZ_2,+RZ_3,+RZ_4,+RZ_5,+RZ_6,+RZ_7,+RZ_8]\stopchemical
-% \noindent \startchemical \chemical[EIGHT,ROT4,B,+R,+RZ][+RZ_1,+RZ_2,+RZ_3,+RZ_4,+RZ_5,+RZ_6,+RZ_7,+RZ_8]\stopchemical
-% \stopTEXpage
-
-% \enabletrackers[chemistry.molecules]
-
-% \startchemicalformula
-% \chemical{S}
-% \chemical{+}
-% \chemical{O_2}
-% \chemical{GIVES}
-% \chemical{\+{4}{S}}
-% \chemical{\+{4}{S}\-{2}{O_2}}
-% \chemical{\-{2}{O_2}}
-% \stopchemicalformula
-
-% \startformula
-% \chemical{S}
-% \chemical{+}
-% \chemical{O_2}
-% \chemical{GIVES}
-% \chemical{\+{4}{S}}
-% \chemical{\+{4}{S}\-{2}{O_2}}
-% \chemical{\-{2}{O_2}}
-% \stopformula
-
-
-\startTEXpage[offset=2cm]
-
-\startchemical[width=fit,size=small,scale=small,frame=on]
- \chemical[SIX,B]
-\stopchemical
-
-% \startchemical[width=fit,size=small,scale=small,frame=on]
-% \chemical[ONE,SB258]
-% \stopchemical
-
-% \startchemical[width=fit,size=small,scale=small,frame=on]
-% \chemical[ONE,ROT3,SB258]
-% \stopchemical
-
-% \startchemical[width=fit,size=small,scale=small,frame=on]
-% \chemical[FIVE,ROT3,SB34,+SB2,-SB5,Z345,DR35,SR4,CRZ35,SUB1,ONE,SB258,Z0,Z28][C,N,C,O,O,CH,COOC_2H_5,COOC_2H_5]
-% \stopchemical
-
-% \startchemical[scale=small,width=8000,height=8000,frame=on]
-% \chemical[SIX,SB2356,DB14,Z2346,SR36,RZ36] [C,N,C,C,H,H_2]
-% \chemical[PB:Z1,ONE,Z0,DIR8,Z0,SB24,DB7,Z27,PE][C,C,CH_3,O]
-% \chemical[PB:Z5,ONE,Z0,DIR6,Z0,SB24,DB7,Z47,PE][C,C,H_3C,O]
-% \chemical[SR24,RZ24] [CH_3,H_3C]
-% \stopchemical
-
-% \startchemical[scale=small,width=6000,height=6000,frame=on]
-% \chemical[SIX,SB2356,DB14,Z,SR36,RZ36,SR1245,RZ24][C,C,N,C,C,C,H,H_2,CH_3,H_3C]
-% \chemical[PB:RZ1,ONE,Z0,SB2,DB7,Z27,PE][C,CH_3,O]
-% \chemical[PB:RZ5,ONE,Z0,SB4,DB7,Z47,PE][C,H_3C,O]
-% \stopchemical
-
-% \startchemical[width=fit,size=small,scale=small,frame=on]
-% \chemical
-% [SIX,B,C,ADJ1,FIVE,ROT3,SB34,+SB2,-SB5,Z345,DR35,SR4,CRZ35,SUB1,ONE,OFF1,SB258,Z0,Z28]
-% [C,N,C,O,O,CH,COOC_2H_5,COOC_2H_5]
-% \stopchemical
-
-% \startchemical[width=fit,height=fit,frame=on,scale=small]
-% \chemical
-% [ONE,SB15,DB7,Z057,3OFF1,MOV1,Z0,3OFF1,MOV1,
-% Z017,SB1357,MOV3,Z0,MOV3,SB1357,Z013,3OFF5,
-% MOV5,Z0,3OFF5,SB5,Z5]
-% [C,H_2N,NH,(CH_2)_3,C,COOH,H,\SL{NH},C,COOH,H,
-% (CH_2)_2,HOOC]
-% \stopchemical
-
-% \startchemical[width=fit,height=fit,frame=on,scale=small]
-% \chemical
-% [ONE,SB15,DB7,Z057,3OFF1,MOV1,Z0,3OFF1,MOV1,Z017,SB1357,MOV3,Z0,MOV3,SB1357,Z013,3OFF5,MOV5,Z0,3OFF5,SB5,Z5]
-% [C,H_2N,NH,(CH_2)_3,C,COOH,H,\SL{NH},C,COOH,H,(CH_2)_2,HOOC]
-% \stopchemical
-
-% \startchemical
-% \chemical[ONE,Z0,DB,Z][C_0,C_1,C_1,C_3,C_4,C_5,C_6,C_7,C_8]
-% \stopchemical
-
-% \startchemical
-% \chemical[ONE,Z0,SB,Z][C_0,C_1,C_1,C_3,C_4,C_5,C_6,C_7,C_8]
-% \stopchemical
-
-% \startchemical
-% \chemical[ONE,Z0,DB,CZ][C_0,C_1,C_1,C_3,C_4,C_5,C_6,C_7,C_8]
-% \stopchemical
-
-% \startchemical
-% [width=fit,top=2000,bottom=2000,
-% scale=small,size=small]%
-% \chemical
-% [ONE,
-% SAVE,
-% Z0,SB731,MOV1,Z0,SB1,MOV1,Z0,DB8,CZ8,SB1,Z1,
-% RESTORE,
-% SAVE,
-% SUB4,ONE,Z0,SB3,SB1,MOV1,Z0,SB1,MOV1,Z0,DB8,CZ8,SB1,Z1,
-% RESTORE,
-% SUB2,ONE,Z0,SB7,SB1,MOV1,Z0,SB1,MOV1,Z0,DB8,CZ8,SB1,Z1]
-% [\SR{HC},O,C,O,C_{19}H_{39},
-% \SR{H_{2}C},O,C,O,C_{17}H_{29},
-% \SR{H_{2}C},O,C,O,C_{21}H_{41}]
-% \stopchemical
-
-% \chemical[width=fit,height=fit,frame=on,scale=small]
-% [ONE,Z0,MOV7,SB1357,Z017,3OFF5,MOV5,Z0,3OFF5,MOV5,SB15,DB7,Z057,MOV0,MOV3,SB1357,Z013,MOV5,3OFF5,Z0,6OFF5,SB5,Z5]
-% [\SL{NH},C,COOH,H,(CH_2)_3,C,H_2H,NH,C,COOH,H,(CH_2)_2,HOOC]
-% \stopchemical
-
-% \chemical[width=fit,height=fit,frame=on,scale=small]
-% [ONE,Z0,MOV7,SB1357,Z017,3OFF5,MOV5,Z0,3OFF5,MOV5,SB15,DB7,Z057,MOV0,MOV3,SB1357,Z013,MOV5,3OFF5,Z0,6OFF5,SB5,Z5]
-% [\SL{NH},C,COOH,H,(CH_2)_3,C,H_2H,NH,C,COOH,H,(CH_2)_2,HOOC]
-% \stopchemical
-
-% \startchemical[width=fit,top=1500,bottom=3500]
-% \chemical[ONE,Z0,DB1,SB3,SB7,Z7,MOV1,Z0,SB3,SB7,Z3,Z7,MOV0,SUB2,SIX,B,R6,C][C,H,C,H,H]
-% \chemical[ONE,Z0,DB1,SB3,SB7,Z7,MOV1,Z0,SB3,SB7,Z3,Z7,MOV0,SUB2,SIX,B,R6,C][C,H,C,H,H]
-% \bottext{styreen}
-% \stopchemical
-
-% \startchemical
-% \chemical[SPACE,PLUS,SPACE]
-% \stopchemical
-% \startchemical[right=600]
-% \chemical[ONE,CZ0][3CH_{3}OH]
-% \stopchemical
-% \startchemical
-% \chemical[SPACE,GIVES,SPACE,SPACE][H^+/H_2O]
-% \stopchemical
-% \startchemical
-% \chemical
-% [ONE,
-% SAVE,
-% Z0,SB7,SB3,SB1,Z1,
-% RESTORE,
-% SAVE,
-% SUB4,ONE,Z0,SB3,SB1,Z1,
-% RESTORE,
-% SUB2,ONE,Z0,SB7,SB1,Z1]
-% [\SR{HC},OH,
-% \SR{H_{2}C},OH,
-% \SR{H_{2}C},OH]
-% \stopchemical
-% \startchemical
-% \chemical[SPACE,PLUS,SPACE]
-% \stopchemical
-
-% \startchemical
-% \chemical
-% [ONE,
-% SAVE,
-% Z0,DB8,CZ8,SB1,SB5,Z5,MOV1,Z0,SB1,Z1,
-% RESTORE,
-% SAVE,
-% SUB4,ONE,Z0,DB8,CZ8,SB1,SB5,Z5,MOV1,Z0,SB1,Z1,
-% RESTORE,
-% SUB2,ONE,Z0,DB8,CZ8,SB1,SB5,Z5,MOV1,Z0,SB1,Z1]
-% [C,O,C_{19}H_{39},O,CH_{3},
-% C,O,C_{17}H_{29},O,CH_{3},
-% C,O,C_{21}H_{41},O,CH_{3}]
-% \stopchemical
-
-% \startchemical[height=4500,bottom=2500]
-% \bottext{$\beta$-D-Fructopyranose}
-% \chemical[SIX,FRONT,BB,B1236,+SB4,-SB5,Z5,+R12346,+RZ12346,-R12346,-RZ12346][Z_0,+R_1,+R_2,+R_3,+R_4,+R_6,-R_1,-R_2,-R_3,-R_4,-R_6]
-% \stopchemical
-
-% \startchemical[height=4500,bottom=2500]
-% \chemical[SIX,FRONT,BB,B]
-% \stopchemical
-
-% \startchemical
-% [width=fit,height=fit,frame=on]
-% \chemical
-% [SIX,DB135,SB246,Z,SR6,RZ6][C,C,N,\SR{HC},N,C,NH_2]
-% \chemical
-% [SIX,MOV1,DB1,SB23,SS6,Z1..3,SR3,RZ3][N,\SL{CH},N,H]
-% \stopchemical
-
-% \startchemical \chemical[SIX,B,R,RZ1=a] \stopchemical
-% \startchemical \chemical[SIX,B,R,RZ1..3=a] \stopchemical
-% \startchemical \chemical[SIX,B,R,RZ135=a] \stopchemical
-% \startchemical \chemical[SIX,B,R,RZ] [a] \stopchemical
-% \startchemical \chemical[SIX,B,R,RZ] [a,b] \stopchemical
-% \startchemical \chemical[SIX,B,R,RZ=a] \stopchemical
-
-% \definechemical[molecule]
-% {\chemical
-% [ONE,Z0,SB1357,
-% SAVE,SUB2,SIX,B,R6,C,RESTORE,
-% MOV1,Z0,SB137,MOV1,Z0,SB37,MOV1]
-% [C,C,C]}
-
-% \startchemical[width=fit,height=fit]
-% \chemical[molecule,molecule,molecule]
-% \stopchemical
-
-% \definechemical[molecule]
-% {\chemical
-% [ONE,Z0,SB1357,
-% SAVE,SUB2,SIX,B,R6,C,RESTORE,
-% MOV1,Z0,SB137,MOV1,Z0,SB37,MOV1]}
-
-% \startchemical[width=fit,height=fit]
-% \chemical[molecule,molecule,molecule][A,B,C,D,E,F,G,H,I]
-% \stopchemical
-
-\stopTEXpage
-
-% \noindent \startchemical
-% \chemical[SIX,B1..3]
-% \stopchemical
-
-% \noindent \startchemical[width=fit,height=fit] % auto5 ipb off5
-% \chemical[SIX,B,C,R,RZ][RZ_1,RZ_2,RZ_3,RZ_4,RZ_5,RZ_6]
-% \stopchemical
-% \noindent \startchemical[width=fit,height=fit] % auto5 ipb off5
-% \chemical[SIX,ROT1,B,C,R,RZ][RZ_1,RZ_2,RZ_3,RZ_4,RZ_5,RZ_6]
-% \stopchemical
-% \startchemical[width=fit,height=fit] % auto5 ipb off5
-% \chemical[SIX,ROT2,B,C,R,RZ][RZ_1,RZ_2,RZ_3,RZ_4,RZ_5,RZ_6]
-% \stopchemical
-% \startchemical[width=fit,height=fit] % auto5 ipb off5
-% \chemical[SIX,ROT3,B,C,R,RZ][RZ_1,RZ_2,RZ_3,RZ_4,RZ_5,RZ_6]
-% \stopchemical
-% \startchemical[width=fit,height=fit] % auto5 ipb off5
-% \chemical[SIX,ROT4,B,C,R,RZ][RZ_1,RZ_2,RZ_3,RZ_4,RZ_5,RZ_6]
-% \stopchemical
-
-% \startchemical[width=fit,height=fit,axis=on] % auto5 ipb off5
-% \chemical[SIX,B,C,R6,PB:RZ6,ONE,CZ0,OE1,SB5,MOV5,CZ0,OFF5,OE5,PE][CH,CH_2]
-% \stopchemical
-
-% \dontleavehmode \startchemical \chemical[SIX,B,R,RZ][1,2,3,4,5,6,] \stopchemical
-
-% \start
-% \setupchemicalframed[frame=off]
-% \dontleavehmode \startchemical[scale=medium,style=slanted,color=red,rulecolor=green,left=2000,right=4000,top=2000,bottom=2000,axis=on] \chemical[SIX,B,R,RZ][1,2,3,4,5,6,] \stopchemical
-
-% \dontleavehmode
-% \startchemical[width=fit,height=fit]
-% \chemical[SIX,B][1,2,3,4,5,6]
-% \start
-% \setupchemical[rulecolor=red]
-% \chemical[SIX,R][1,2,3,4,5,6]
-% \stop
-% \chemical[SIX,RZ][1,2,3,4,5,6]
-% \stopchemical
-% \stop
-
-% \stopTEXpage
-
-% \stoptext
-
-% \startTEXpage
-
-% \dontleavehmode \startchemical \chemical[ONE,SB,Z0,Z][0,1,2,3,4,5,6,7,8] \stopchemical \quad
-% \dontleavehmode \startchemical \chemical[ONE,DB,Z0,Z][0,1,2,3,4,5,6,7,8] \stopchemical \quad
-% \dontleavehmode \startchemical \chemical[ONE,TB,Z0,Z][0,1,2,3,4,5,6,7,8] \stopchemical \quad
-% \dontleavehmode \startchemical \chemical[ONE,EP,Z0][0] \stopchemical \quad
-% \dontleavehmode \startchemical \chemical[ONE,ES,Z0][0] \stopchemical \quad
-% \dontleavehmode \startchemical \chemical[ONE,ED,Z0][0] \stopchemical \quad
-% \dontleavehmode \startchemical \chemical[ONE,ET,Z0][0] \stopchemical \quad
-
-
-% \dontleavehmode \startchemical \chemical[ONE,SD,Z0][0] \stopchemical \quad
-% \dontleavehmode \startchemical \chemical[ONE,LDD,Z0][0] \stopchemical \quad
-% \dontleavehmode \startchemical \chemical[ONE,RDD,Z0][0] \stopchemical \quad
-% \dontleavehmode \startchemical \chemical[ONE,HB,Z0][0] \stopchemical \quad
-% \dontleavehmode \startchemical \chemical[ONE,BB,Z0][0] \stopchemical \quad
-% \dontleavehmode \startchemical \chemical[ONE,OE,Z0][0] \stopchemical \quad
-
-
-% \dontleavehmode \startchemical \chemical[ONE,SB,Z] [1,2,3,4,5,6,7,8] \stopchemical \quad
-% \dontleavehmode \startchemical \chemical[ONE,SB,CZ][1,2,3,4,5,6,7,8] \stopchemical \quad
-% \dontleavehmode \startchemical \chemical[ONE,SB,ZT][a,b,c,d,e,f,g,h] \stopchemical \quad
-% \dontleavehmode \startchemical \chemical[ONE,SB,ZN][1,2,3,4,5,6,7,8] \stopchemical \quad
-% \dontleavehmode \startchemical \chemical[ONE,SB,ZBT][1,2,3,4,5,6,7,8] \stopchemical \quad
-% \dontleavehmode \startchemical \chemical[ONE,SB,ZBN][1,2,3,4,5,6,7,8] \stopchemical \quad
-% \dontleavehmode \startchemical \chemical[ONE,SB,ZTT][1,2,3,4,5,6,7,8] \stopchemical \quad
-% \dontleavehmode \startchemical \chemical[ONE,SB,ZTN][1,2,3,4,5,6,7,8] \stopchemical \quad
-
-% \dontleavehmode \startchemical \chemical[ONE,SB,MOV1,SB] \stopchemical \quad
-% \dontleavehmode \startchemical \chemical[ONE,SB,MOV1,SB,MOV3,SB] \stopchemical \quad
-% \dontleavehmode \startchemical \chemical[SIX,B,MOV1,B] \stopchemical \quad
-
-
-% \dontleavehmode \startchemical \chemical[ONE,SB,Z0,Z][0,1,2,3,4,5,6] \stopchemical \quad
-% \stopTEXpage
-
-
-% \dorecurse{1000}{\dontleavehmode \startchemical \chemical[SIX,B,R,RZ][a,b,c,d,e,f] \stopchemical \quad}
-
-% \dontleavehmode \startchemical \chemical[SIX,B,R,RT] [a,b,c,d,e,f] \stopchemical \quad
-% \dontleavehmode \startchemical \chemical[SIX,B,R,RTT] [a,b,c,d,e,f] \stopchemical \quad
-% \dontleavehmode \startchemical \chemical[SIX,B,R,RBT] [a,b,c,d,e,f] \stopchemical \quad
-
-% \dontleavehmode \startchemical \chemical[SIX,B,R,+R,-R] \stopchemical \quad
-% \dontleavehmode \startchemical \chemical[SIX,B1..4] \stopchemical \quad
-
-% \dontleavehmode \startchemical \chemical[SIX,B,ZN] \stopchemical \quad
-% \dontleavehmode \startchemical \chemical[SIX,B,ZT][A,B,C,D,E,F] \stopchemical \quad
-% \dontleavehmode \startchemical \chemical[SIX,B,R,AU] \stopchemical \quad
-% \dontleavehmode \startchemical \chemical[SIX,B,R,AD] \stopchemical \quad
-
-% \dontleavehmode \startchemical \chemical[SIX,B,ADJ1,SIX,B] \stopchemical \quad
-% \dontleavehmode \startchemical \chemical[SIX,B,ADJ1,FIVE,ROT1,B] \stopchemical \quad
-% \dontleavehmode \startchemical \chemical[SIX,B,ADJ1,FOUR,B] \stopchemical \quad
-% \dontleavehmode \startchemical \chemical[SIX,B,ADJ1,THREE,B] \stopchemical \quad
-
-% \definechemical[sixring]
-% {\chemical[SIX,B,R]}
-
-% \startchemical[frame=on,width=6000]
-% \chemical[sixring,RZ][A,B,C,D,E,F]
-% \stopchemical
-
-% \definechemical[test]
-% {\chemical[SIX,SB,Z][A,B,C,D,E,F]}
-
-% \startchemical
-% \chemical[SIX,SB,Z,ADJ1,test,ADJ1,SIX,SB,Z][a,b,c,d,e,f,g,h,j,k,l,m,P,Q,R,S,T,U,W]
-% \chemical[ADJ1,SIX,SB,Z][1,2,3,4,5,6]
-% \stopchemical
-
-% \definechemical[test]{\chemical[SIX,SB,Z]}
-
-% \startchemical
-% \chemical[SIX,SB,Z,ADJ1,test,ADJ1,SIX,SB,Z][a,b,c,d,e,f,g,h,j,k,l,m,P,Q,R,S,T,U,W]
-% \chemical[ADJ1,SIX,SB,Z][1,2,3,4,5,6]
-% \stopchemical
-
-% \startchemical
-% \chemical[ADJ1,SIX,SB,Z][a_1,a_2,a_3,a_4,a_5,\ominus]
-% \stopchemical
-
-% \startchemical
-% \chemical[SIX,SB,Z,SAVE,ADJ1,SIX,SB,Z,ADJ1,SIX,SB,Z,RESTORE,ADJ3,SIX,SB,Z][1,2,3,4,5,6,a,b,c,d,e,f,A,B,C,D,E,F,!,!,!,!,!,!]
-% \stopchemical
-
-% $$
-% \startchemical
-% \chemical[OPENCOMPLEX]
-% \stopchemical
-% \startchemical
-% \chemical[SIX,SB,Z][1,2,3,4,5,6]
-% \stopchemical
-% \startchemical
-% \chemical[SPACE,GIVES,SPACE][a,b]
-% \stopchemical
-% \startchemical
-% \chemical[SIX,SB,Z][1,2,3,4,5,6]
-% \stopchemical
-% \startchemical
-% \chemical[CLOSECOMPLEX]
-% \stopchemical
-% $$
-
-% \stoptext
-
-% \page
-
-% \def\ChemicalKind{SIX} \getbuffer[test-set]
-% \def\ChemicalKind{FIVE} \getbuffer[test-set]
-% \def\ChemicalKind{FOUR} \getbuffer[test-set]
-% \def\ChemicalKind{THREE} \getbuffer[test-set]
-
-% \startchemical
-% \chemical[SIX,SB,C135,SR,Z0,Z,RZ][X,ch:r->A,ch:g->B,ch:b->C,D,E,F,a,b,c,d,e,f]
-% \chemical[MOV1,SIX,SB,C135,SR,Z0,Z,RZ][X,ch:r->A,ch:g->B,ch:b->C,D,E,F,a,b,c,d,e,f]
-% \chemical[MOV3,SIX,SB,C135,SR,Z0,Z,RZ][X,ch:r->A,ch:g->B,ch:b->C,D,E,F,a,b,c,d,e,f]
-% \stopchemical
-
-\stoptext
diff --git a/Master/texmf-dist/tex/context/test/sort-lan-test.tex b/Master/texmf-dist/tex/context/test/sort-lan-test.tex
deleted file mode 100644
index 0a368c091c7..00000000000
--- a/Master/texmf-dist/tex/context/test/sort-lan-test.tex
+++ /dev/null
@@ -1,38 +0,0 @@
-\starttext
-
-\mainlanguage[de]
-
-\index{paar}
-\index{Paar}
-\index{paarig}
-\index{paarmal}
-\index{Pace}
-\index{Pacht}
-\index{Pack}
-\completeindex
-
-\page
-
-\mainlanguage[fi]
-
-\index{Aaltonen}
-\index{Aravirta}
-\index{Eriksson}
-\index{Hämeenniemi}
-\index{Kaisa}
-\index{Maija}
-\index{Mäntylä}
-\index{Nuorela}
-\index{Päätalo}
-\index{Suomi}
-\index{Uotila}
-\index{Yli-Hannuksela}
-\index{Ähtäri}
-\index{Äänekoski}
-\index{Åke}
-\index{Åsa}
-\index{Öhman}
-
-\completeindex
-
-\stoptext
diff --git a/Master/texmf-dist/tex/context/test/x-cals-test.tex b/Master/texmf-dist/tex/context/test/x-cals-test.tex
deleted file mode 100644
index 30645c2bd67..00000000000
--- a/Master/texmf-dist/tex/context/test/x-cals-test.tex
+++ /dev/null
@@ -1,48 +0,0 @@
-% engine=luatex
-
-\usemodule[x][cals]
-
-\setupcolors[state=start]
-
-\startsetups cdx:cals:table:noframe
- \setupTABLE[frame=off]
-\stopsetups
-
-\startsetups cdx:cals:table:colors
- \setupTABLE[row] [odd] [frame=off,background=color,backgroundcolor=red]
- \setupTABLE[row] [even][frame=off,background=color,backgroundcolor=green]
- \setupTABLE[column][2] [frame=off,background=color,backgroundcolor=blue]
-\stopsetups
-
-\startsetups cdx:cals:table:vertical
- \setupTABLE[row] [odd] [frame=off,background=color,backgroundcolor=lightblue]
-\stopsetups
-
-\startsetups cdx:cals:table:horizontal
- \setupTABLE[column] [odd] [frame=off,background=color,backgroundcolor=lightblue]
-\stopsetups
-
-\startsetups cdx:cals:table:before:frame
- \framed [offset=overlay,frame=off,topframe=on,bottomframe=on,rulethickness=2pt,framecolor=red,align=normal] \bgroup
- \vskip2pt
- \framed [offset=overlay,frame=off,leftframe=on,rightframe=on,rulethickness=1pt,framecolor=red,align=normal] \bgroup
-\stopsetups
-
-\startsetups cdx:cals:table:after:frame
- \egroup
- \vskip2pt
- \egroup
-\stopsetups
-
-% \startxmlsetups xml:cals:process
-% \xmlsetsetup {\xmldocument} {cals:table} {*}
-% \stopxmlsetups
-% \startxmlsetups cals:table
-% \ctxlua{lxml.cals.table("#1")}
-% \stopxmlsetups
-% \xmlregistersetup{xml:cals:process}
-
-\starttext
- \xmlloaddirectives{x-cals-test.cdx}
- \xmlprocess{main}{x-cals-test.xml}{}
-\stoptext
diff --git a/Master/texmf-dist/tex/context/test/x-cals-test.xml b/Master/texmf-dist/tex/context/test/x-cals-test.xml
deleted file mode 100644
index dc03668e3ef..00000000000
--- a/Master/texmf-dist/tex/context/test/x-cals-test.xml
+++ /dev/null
@@ -1,522 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-
-<!-- this is a test file -->
-<!-- this is a test file -->
-<!-- this is a test file -->
-
-<root xmlns:cals="http://www.someplace.org/cals"
- xmlns:c="http://www.someplace.org/cals">
-
- <c:table cdx="vertical">
- <c:tgroup cols="3">
- <c:thead>
- <c:row>
- <c:entry>alpha</c:entry>
- <c:entry>beta</c:entry>
- <c:entry>gamma</c:entry>
- </c:row>
- </c:thead>
- <c:tbody>
- <c:row>
- <c:entry>one</c:entry>
- <c:entry>two</c:entry>
- <c:entry>three</c:entry>
- </c:row>
- <c:row>
- <c:entry>four</c:entry>
- <c:entry>five</c:entry>
- <c:entry>six</c:entry>
- </c:row>
- </c:tbody>
- </c:tgroup>
- </c:table>
-
- <c:table cdx="horizontal">
- <c:tgroup cols="3">
- <c:thead>
- <c:row>
- <c:entry>alpha</c:entry>
- <c:entry>beta</c:entry>
- <c:entry>gamma</c:entry>
- </c:row>
- </c:thead>
- <c:tbody>
- <c:row>
- <c:entry>one</c:entry>
- <c:entry>two</c:entry>
- <c:entry>three</c:entry>
- </c:row>
- <c:row>
- <c:entry>four</c:entry>
- <c:entry>five</c:entry>
- <c:entry>six</c:entry>
- </c:row>
- </c:tbody>
- </c:tgroup>
- </c:table>
-
- <c:table cdx="frame">
- <c:tgroup cols="3">
- <c:thead>
- <c:row>
- <c:entry>alpha</c:entry>
- <c:entry>beta</c:entry>
- <c:entry>gamma</c:entry>
- </c:row>
- </c:thead>
- <c:tbody>
- <c:row>
- <c:entry>one</c:entry>
- <c:entry>two</c:entry>
- <c:entry>three</c:entry>
- </c:row>
- <c:row>
- <c:entry>four</c:entry>
- <c:entry>five</c:entry>
- <c:entry>six</c:entry>
- </c:row>
- </c:tbody>
- </c:tgroup>
- </c:table>
-
- <c:table cdx="colors">
- <c:tgroup cols="3">
- <c:colspec colnum="1" colwidth="4cm" colname="first"/>
- <c:colspec colnum="2" colname="second"/>
- <c:thead>
- <c:row>
- <c:entry>alpha</c:entry>
- <c:entry>beta</c:entry>
- <c:entry>gamma</c:entry>
- </c:row>
- </c:thead>
- <c:tbody>
- <c:row>
- <c:entry>one</c:entry>
- <c:entry>two</c:entry>
- <c:entry>three</c:entry>
- </c:row>
- <c:row>
- <c:entry namest="first" nameend="second">four</c:entry>
- <c:entry>five</c:entry>
- </c:row>
- </c:tbody>
- </c:tgroup>
- </c:table>
-
- <cals:table cdx="noframe">
- <cals:tgroup cols="2">
- <cals:colspec colnum="1" colwidth="4cm" colname="first"/>
- <cals:colspec colnum="2" colname="second"/>
- <cals:thead>
- <cals:colspec colnum="1" colwidth="2cm"/>
- <cals:row>
- <cals:entry>alpha</cals:entry>
- <cals:entry>beta</cals:entry>
- <cals:entry>gamma</cals:entry>
- </cals:row>
- </cals:thead>
- <cals:tbody>
- <cals:colspec colnum="1" colwidth="2cm"/>
- <cals:row>
- <cals:entry>one</cals:entry>
- <cals:entry>two</cals:entry>
- <cals:entry>three</cals:entry>
- </cals:row>
- <cals:row>
- <cals:entry namest="first" nameend="second">four</cals:entry>
- <cals:entry>five</cals:entry>
- </cals:row>
- </cals:tbody>
- </cals:tgroup>
- </cals:table>
-
- <cls:table xmlns:cls="http://www.hereorthere.com/cals" id="200">
- <cls:tgroup cols="2">
- <cls:colspec colnum="1" colwidth="4cm" colname="first"/>
- <cls:colspec colnum="2" colname="second"/>
- <cls:spanspec colname="myspan" namest="first" nameend="second"/>
- <cls:thead>
- <cls:row>
- <cls:entry>alpha</cls:entry>
- <cls:entry>beta</cls:entry>
- <cls:entry>gamma</cls:entry>
- </cls:row>
- </cls:thead>
- <cls:tbody>
- <cls:row>
- <cls:entry>one</cls:entry>
- <cls:entry morerows='1'>two</cls:entry>
- <cls:entry>three</cls:entry>
- </cls:row>
- <cls:row>
- <cls:entry>one</cls:entry>
- <cls:entry>three</cls:entry>
- </cls:row>
- <cls:row align="center">
- <cls:entry>4m</cls:entry>
- <cls:entry>5m</cls:entry>
- </cls:row>
- </cls:tbody>
- </cls:tgroup>
- </cls:table>
-
- <table xmlns="http://www.nowhere.org/cals" id="300">
- <tgroup cols="2">
- <tbody>
- <row>
- <entry>alpha</entry>
- <entrytbl id="400">
- <tgroup cols="2">
- <tbody>
- <row>
- <entry align='middle'>one</entry>
- <entry>three</entry>
- </row>
- <row>
- <entry align='left'>4</entry>
- <entry align='right'>5</entry>
- </row>
- </tbody>
- </tgroup>
- </entrytbl>
- </row>
- <row>
- <entry>one</entry>
- <entry>two</entry>
- </row>
- </tbody>
- </tgroup>
- </table>
-
- <cals:table id="ex.calstable" frame='all'>
- <cals:title>Cals tabel 3 met kolommen: header + footer + 3 rijen </cals:title>
- <cals:tgroup cols='3' align='left' colsep='1' rowsep='1'>
- <cals:colspec colname='c1'/>
- <cals:colspec colname='c2'/>
- <cals:colspec colname='c3'/>
- <cals:thead>
- <cals:row>
- <cals:entry>h1</cals:entry>
- <cals:entry>h2</cals:entry>
- <cals:entry>h3</cals:entry>
- </cals:row>
- </cals:thead>
- <cals:tfoot>
- <cals:row>
- <cals:entry>f1</cals:entry>
- <cals:entry>f2</cals:entry>
- <cals:entry>f3</cals:entry>
- </cals:row>
- </cals:tfoot>
- <cals:tbody>
- <cals:row>
- <cals:entry>a1</cals:entry>
- <cals:entry>a2</cals:entry>
- <cals:entry>a3</cals:entry>
- </cals:row>
- <cals:row>
- <cals:entry>b1</cals:entry>
- <cals:entry>b2</cals:entry>
- <cals:entry>b3</cals:entry>
- </cals:row>
- <cals:row>
- <cals:entry>c1</cals:entry>
- <cals:entry>c2</cals:entry>
- <cals:entry>c3</cals:entry>
- </cals:row>
- </cals:tbody>
- </cals:tgroup>
- </cals:table>
-
- <cals:table id="ex.calstable" frame='all'>
- <cals:title>Cals tabel 4 met kolommen: header + footer + 3 rijen </cals:title>
- <cals:tgroup cols='4' align='left' colsep='1' rowsep='1'>
- <cals:colspec colnum='1' colname='c1'/>
- <cals:colspec colnum='2' colname='c2'/>
- <cals:colspec colnum='3' colname='c3'/>
- <cals:colspec colnum='4' colname='c4'/>
- <cals:thead>
- <cals:row>
- <cals:entry>h1</cals:entry>
- <cals:entry>h2</cals:entry>
- <cals:entry>h3</cals:entry>
- <cals:entry>h4</cals:entry>
- </cals:row>
- </cals:thead>
- <cals:tfoot>
- <cals:row>
- <cals:entry>f1</cals:entry>
- <cals:entry>f2</cals:entry>
- <cals:entry>f3</cals:entry>
- <cals:entry>f4</cals:entry>
- </cals:row>
- </cals:tfoot>
- <cals:tbody>
- <cals:row>
- <cals:entry>a1</cals:entry>
- <cals:entry>a2</cals:entry>
- <cals:entry>a3</cals:entry>
- <cals:entry>a4</cals:entry>
- </cals:row>
- <cals:row>
- <cals:entry>b1</cals:entry>
- <cals:entry>b2</cals:entry>
- <cals:entry>b3</cals:entry>
- <cals:entry>b4</cals:entry>
- </cals:row>
- <cals:row>
- <cals:entry>c1</cals:entry>
- <cals:entry>c2</cals:entry>
- <cals:entry>c3</cals:entry>
- <cals:entry>c4</cals:entry>
- </cals:row>
- </cals:tbody>
- </cals:tgroup>
- </cals:table>
-
- <cals:table id="ex.calstable" frame='all'>
- <cals:title>Cals tabel 3 met kolommen: horizontal span</cals:title>
- <cals:tgroup cols='3' align='left' colsep='1' rowsep='1'>
- <cals:colspec colnum='1' colname='c1'/>
- <cals:colspec colnum='2' colname='c2'/>
- <cals:colspec colnum='3' colname='c3'/>
- <cals:thead>
- <cals:row>
- <cals:entry>h1</cals:entry>
- <cals:entry>h2</cals:entry>
- <cals:entry>h3</cals:entry>
- </cals:row>
- </cals:thead>
- <cals:tfoot>
- <cals:row>
- <cals:entry>f1</cals:entry>
- <cals:entry>f2</cals:entry>
- <cals:entry>f3</cals:entry>
- </cals:row>
- </cals:tfoot>
- <cals:tbody>
- <cals:row>
- <cals:entry>a1</cals:entry>
- <cals:entry>a2</cals:entry>
- <cals:entry>a3</cals:entry>
- </cals:row>
- <cals:row>
- <cals:entry namest="c1" nameend="c2" align="center">hs</cals:entry>
- <!-- cals:entry>b2: weg in verband met horizontale span</cals:entry -->
- <cals:entry>b3</cals:entry>
- </cals:row>
- <cals:row>
- <cals:entry>c1</cals:entry>
- <cals:entry>c2</cals:entry>
- <cals:entry>c3</cals:entry>
- </cals:row>
- </cals:tbody>
- </cals:tgroup>
- </cals:table>
-
- <cals:table id="ex.calstable" frame='all'>
- <cals:title>Cals tabel 3 met kolommen: verticale span</cals:title>
- <cals:tgroup cols='3' align='left' colsep='1' rowsep='1'>
- <cals:colspec colnum='1' colname='c1'/>
- <cals:colspec colnum='2' colname='c2'/>
- <cals:colspec colnum='3' colname='c3'/>
- <cals:thead>
- <cals:row>
- <cals:entry>h1</cals:entry>
- <cals:entry>h2</cals:entry>
- <cals:entry>h3</cals:entry>
- </cals:row>
- </cals:thead>
- <cals:tfoot>
- <cals:row>
- <cals:entry>f1</cals:entry>
- <cals:entry>f2</cals:entry>
- <cals:entry>f3</cals:entry>
- </cals:row>
- </cals:tfoot>
- <cals:tbody>
- <cals:row>
- <cals:entry>a1</cals:entry>
- <cals:entry>a2</cals:entry>
- <cals:entry>a3</cals:entry>
- </cals:row>
- <cals:row>
- <cals:entry>b1</cals:entry>
- <cals:entry>b2</cals:entry>
- <cals:entry morerows='1' valign='middle'><p>vs</p></cals:entry>
- </cals:row>
- <cals:row>
- <cals:entry>c1</cals:entry>
- <cals:entry>c2</cals:entry>
- <!-- cals:entry>c3: weg in verband met verticale span</cals:entry-->
- </cals:row>
- </cals:tbody>
- </cals:tgroup>
- </cals:table>
-
- <cals:table id="ex.calstable" frame='all'>
- <cals:title>Cals tabel 3 met kolommen: verticale en horizontale span</cals:title>
- <cals:tgroup cols='3' align='left' colsep='1' rowsep='1'>
- <cals:colspec colnum='1' colname='c1'/>
- <cals:colspec colnum='2' colname='c2'/>
- <cals:colspec colnum='3' colname='c3'/>
- <cals:thead>
- <cals:row>
- <cals:entry>h1</cals:entry>
- <cals:entry>h2</cals:entry>
- <cals:entry>h3</cals:entry>
- </cals:row>
- </cals:thead>
- <cals:tfoot>
- <cals:row>
- <cals:entry>f1</cals:entry>
- <cals:entry>f2</cals:entry>
- <cals:entry>f3</cals:entry>
- </cals:row>
- </cals:tfoot>
- <cals:tbody>
- <cals:row>
- <cals:entry>a1</cals:entry>
- <cals:entry>a2</cals:entry>
- <cals:entry>a3</cals:entry>
- </cals:row>
- <cals:row>
- <cals:entry>b1</cals:entry>
- <cals:entry namest="c1" nameend="c2" align="center" morerows='1' valign='bottom'>vh</cals:entry>
- <!-- cals:entry>b3: weg in verband met verticale en horizontale span</cals:entry-->
- </cals:row>
- <cals:row>
- <cals:entry>c1</cals:entry>
- <!-- cals:entry>c2: weg in verband met verticale en horizontale span</cals:entry-->
- <!-- cals:entry>c3: weg in verband met verticale en horizontale span</cals:entry-->
- </cals:row>
- </cals:tbody>
- </cals:tgroup>
- </cals:table>
-
- <cals:table frame="all">
- <cals:tgroup cols="8">
- <cals:colspec colnum="1" colname="col1" colwidth="115.3pt"/>
- <cals:colspec colnum="2" colname="col2" colwidth="62.1pt"/>
- <cals:colspec colnum="3" colname="col3" colwidth="63.3pt"/>
- <cals:colspec colnum="4" colname="col4" colwidth="41.4pt"/>
- <cals:colspec colnum="5" colname="col5" colwidth="41.4pt"/>
- <cals:colspec colnum="6" colname="col6" colwidth="41.4pt"/>
- <cals:colspec colnum="7" colname="col7" colwidth="41.4pt"/>
- <cals:colspec colnum="8" colname="col8" colwidth="41.3pt"/>
- <cals:tbody>
- <cals:row>
- <cals:entry colname="col1" colsep="yes" rowsep="yes"
- valign="top">
- <p>Grootheid</p>
- </cals:entry>
- <cals:entry colname="col2" colsep="yes" rowsep="yes"
- valign="top">
- <p>Eenheid</p>
- </cals:entry>
- <cals:entry colname="col3" colsep="yes" rowsep="yes"
- valign="top">
- <p>Symbool</p>
- </cals:entry>
- <cals:entry colname="col4" namest="col4" nameend="col8"
- colsep="yes" rowsep="yes" valign="top">
- <p>Meetwaarden</p>
- </cals:entry>
- </cals:row>
- <cals:row>
- <cals:entry colname="col1" colsep="yes" rowsep="yes"
- valign="top">
- <p>massa</p>
- </cals:entry>
- <cals:entry colname="col2" colsep="yes" rowsep="yes"
- valign="top"/>
- <cals:entry colname="col3" colsep="yes" rowsep="yes"
- valign="top"/>
- <cals:entry colname="col4" colsep="yes" rowsep="yes"
- valign="top">
- <p>125</p>
- </cals:entry>
- <cals:entry colname="col5" colsep="yes" rowsep="yes"
- valign="top">
- <p>195</p>
- </cals:entry>
- <cals:entry colname="col6" colsep="yes" rowsep="yes"
- valign="top">
- <p>280</p>
- </cals:entry>
- <cals:entry colname="col7" colsep="yes" rowsep="yes"
- valign="top">
- <p>380</p>
- </cals:entry>
- <cals:entry colname="col8" colsep="yes" rowsep="yes"
- valign="top">
- <p>500</p>
- </cals:entry>
- </cals:row>
- <cals:row>
- <cals:entry colname="col1" colsep="yes" rowsep="yes"
- valign="top">
- <p>volume</p>
- </cals:entry>
- <cals:entry colname="col2" colsep="yes" rowsep="yes"
- valign="top"/>
- <cals:entry colname="col3" colsep="yes" rowsep="yes"
- valign="top"/>
- <cals:entry colname="col4" colsep="yes" rowsep="yes"
- valign="top">
- <p>16</p>
- </cals:entry>
- <cals:entry colname="col5" colsep="yes" rowsep="yes"
- valign="top">
- <p>25</p>
- </cals:entry>
- <cals:entry colname="col6" colsep="yes" rowsep="yes"
- valign="top">
- <p>36</p>
- </cals:entry>
- <cals:entry colname="col7" colsep="yes" rowsep="yes"
- valign="top">
- <p>49</p>
- </cals:entry>
- <cals:entry colname="col8" colsep="yes" rowsep="yes"
- valign="top">
- <p>64</p>
- </cals:entry>
- </cals:row>
- <cals:row>
- <cals:entry colname="col1" colsep="yes" rowsep="yes"
- valign="top">
- <p>dichtheid</p>
- </cals:entry>
- <cals:entry colname="col2" colsep="yes" rowsep="yes"
- valign="top"/>
- <cals:entry colname="col3" colsep="yes" rowsep="yes"
- valign="top"/>
- <cals:entry colname="col4" colsep="yes" rowsep="yes"
- valign="top">
- <p>7,8 </p>
- </cals:entry>
- <cals:entry colname="col5" colsep="yes" rowsep="yes"
- valign="top">
- <p>7,8 </p>
- </cals:entry>
- <cals:entry colname="col6" colsep="yes" rowsep="yes"
- valign="top">
- <p>7,8 </p>
- </cals:entry>
- <cals:entry colname="col7" colsep="yes" rowsep="yes"
- valign="top">
- <p>7,8</p>
- </cals:entry>
- <cals:entry colname="col8" colsep="yes" rowsep="yes"
- valign="top">
- <p>7,8 </p>
- </cals:entry>
- </cals:row>
- </cals:tbody>
- </cals:tgroup>
- </cals:table>
-
-
-</root>
diff --git a/Master/texmf-dist/tex/context/test/x-cml-test.tex b/Master/texmf-dist/tex/context/test/x-cml-test.tex
deleted file mode 100644
index 8df87b20aae..00000000000
--- a/Master/texmf-dist/tex/context/test/x-cml-test.tex
+++ /dev/null
@@ -1,9 +0,0 @@
-% engine=luatex
-
-\usemodule[x][cml]
-
-\starttext
-
-\xmlprocess{main}{x-cml-test.xml}{xml:process}
-
-\stoptext
diff --git a/Master/texmf-dist/tex/context/test/x-cml-test.xml b/Master/texmf-dist/tex/context/test/x-cml-test.xml
deleted file mode 100644
index b7a3893de98..00000000000
--- a/Master/texmf-dist/tex/context/test/x-cml-test.xml
+++ /dev/null
@@ -1,210 +0,0 @@
-<root>
-
- <cml:dchem>
- <cml:molecule>
- <cml:atom n="2">H</cml:atom>
- <cml:atom>O</cml:atom>
- </cml:molecule>
- </cml:dchem>
-
- <cml:dchem>
- <cml:reaction>
- <cml:molecule n="2">
- <cml:atom n="2"> H </cml:atom>
- <cml:caption> hydrogen </cml:caption>
- </cml:molecule>
- <cml:plus/>
- <cml:molecule>
- <cml:atom n="2"> O </cml:atom>
- <cml:caption> oxygen </cml:caption>
- </cml:molecule>
- <cml:gives>
- <cml:caption> hefty </cml:caption>
- </cml:gives>
- <cml:molecule n="2">
- <cml:atom n="2"> H </cml:atom>
- <cml:atom> O </cml:atom>
- <cml:caption> water </cml:caption>
- </cml:molecule>
- </cml:reaction>
- </cml:dchem>
-
- <cml:dchem>
- <cml:reaction>
- <cml:atom n="2"> O </cml:atom>
- </cml:reaction>
- </cml:dchem>
-
- <cml:dchem>
- <cml:reaction>
- <cml:molecule n="2">
- <cml:atom n="2"> H </cml:atom>
- </cml:molecule>
- <cml:plus/>
- <cml:molecule>
- <cml:atom n="2"> O </cml:atom>
- </cml:molecule>
- <cml:gives/>
- <cml:molecule n="2">
- <cml:atom n="2"> H </cml:atom>
- <cml:atom> O </cml:atom>
- </cml:molecule>
- </cml:reaction>
- </cml:dchem>
-
- <cml:dchem>
- <cml:atom n="6" charge="-5" weight="652" protons="339"> Rx </cml:atom>
- </cml:dchem>
-
- <cml:dchem> <cml:molecule n="2">
- <cml:ion charge="+2"> <cml:atom n="2"> H </cml:atom> </cml:ion>
- <cml:ion charge="-2"> <cml:atom> O </cml:atom> </cml:ion>
- </cml:molecule> </cml:dchem>
-
- <cml:dchem>
- <cml:ion charge="-1">
- <cml:atom> C </cml:atom>
- <cml:atom> O </cml:atom>
- <cml:atom> O </cml:atom>
- <cml:atom> H </cml:atom>
- </cml:ion>
- </cml:dchem>
-
- <cml:dchem>
- <cml:ion charge="-1" alternative='b'>
- <cml:atom> C </cml:atom>
- <cml:atom> O </cml:atom>
- <cml:atom> O </cml:atom>
- <cml:atom> H </cml:atom>
- </cml:ion>
- </cml:dchem>
-
- <cml:dchem>
- <?chemml ion alternative b?>
- <cml:ion charge="-1">
- <cml:atom> C </cml:atom>
- <cml:atom> O </cml:atom>
- <cml:atom> O </cml:atom>
- <cml:atom> H </cml:atom>
- </cml:ion>
- </cml:dchem>
-
- <cml:dchem>
- <cml:reaction>
- <cml:molecule n="2">
- <cml:atom n="2"> H </cml:atom>
- </cml:molecule>
- <cml:plus/>
- <cml:molecule>
- <cml:atom n="2"> O </cml:atom>
- </cml:molecule>
- <cml:equilibrium/>
- <cml:molecule n="2">
- <cml:atom n="2"> H </cml:atom>
- <cml:atom> O </cml:atom>
- </cml:molecule>
- <cml:gives>
- <cml:caption> wet feet </cml:caption>
- </cml:gives>
- <cml:molecule n="2">
- <cml:atom n="2"> H </cml:atom>
- <cml:atom> O </cml:atom>
- </cml:molecule>
- </cml:reaction>
- </cml:dchem>
-
- <cml:dchem>
- <cml:reaction>
- <cml:gives>
- </cml:gives>
- <cml:gives>
- <cml:caption>first entry</cml:caption>
- </cml:gives>
- <cml:gives>
- <cml:caption>first entry</cml:caption>
- <cml:caption>second entry</cml:caption>
- </cml:gives>
- <cml:gives/>
- </cml:reaction>
- </cml:dchem>
-
- <cml:dchem>
- <cml:molecule>
- <cml:atom> H </cml:atom>
- <cml:singlebond/>
- <cml:atom> C </cml:atom>
- <cml:doublebond/>
- <cml:atom> C </cml:atom>
- <cml:singlebond/>
- <cml:atom> H </cml:atom>
- </cml:molecule>
- </cml:dchem>
-
- <cml:dchem>
- <cml:molecule>
- <cml:atom> H </cml:atom>
- <cml:bond n="1"/>
- <cml:atom> C </cml:atom>
- <cml:bond n="2"/>
- <cml:atom> C </cml:atom>
- <cml:bond n="1"/>
- <cml:atom> H </cml:atom>
- </cml:molecule>
- </cml:dchem>
-
- <cml:dchem>
- <cml:structure>
- <cml:component>
- <cml:graphic>SIX,B</cml:graphic>
- <cml:graphic>r135</cml:graphic>
- </cml:component>
- <cml:component>
- <cml:graphic>R246</cml:graphic>
- </cml:component>
- <cml:component>
- <cml:graphic>RZ</cml:graphic>
- <cml:text>A,B,C,D,E,F</cml:text>
- </cml:component>
- </cml:structure>
- </cml:dchem>
-
- <cml:dchem>
- <cml:structure>
- <cml:component>
- <cml:graphic>SIX,B</cml:graphic>
- <cml:graphic>R135</cml:graphic>
- </cml:component>
- <cml:component>
- <cml:graphic>R246</cml:graphic>
- </cml:component>
- <cml:component>
- <cml:graphic>RZ</cml:graphic>
- <cml:text>A,B,C,D,E,F</cml:text>
- </cml:component>
- <cml:component>
- <cml:graphic>Z</cml:graphic>
- <cml:oxidation n="3">A</cml:oxidation>
- <cml:annotation location="tl">
- <cml:text>B</cml:text>
- <cml:caption>x</cml:caption>
- </cml:annotation>
- <cml:oxidation n="3" sign="+">C</cml:oxidation>
- <cml:text>D,E,F</cml:text>
- </cml:component>
- </cml:structure>
- <cml:structure>
- <cml:component>
- <cml:graphic>SIX,B</cml:graphic>
- <cml:graphic>r135</cml:graphic>
- </cml:component>
- <cml:component>
- <cml:graphic>R246</cml:graphic>
- </cml:component>
- <cml:component>
- <cml:graphic>RZ</cml:graphic>
- <cml:text>A,B,C,D,E,F</cml:text>
- </cml:component>
- </cml:structure>
- </cml:dchem>
-
-</root>
diff --git a/Master/texmf-dist/tex/context/test/x-ct-test.tex b/Master/texmf-dist/tex/context/test/x-ct-test.tex
deleted file mode 100644
index d47563e8441..00000000000
--- a/Master/texmf-dist/tex/context/test/x-ct-test.tex
+++ /dev/null
@@ -1,7 +0,0 @@
-% engine=luatex
-
-\usemodule[x][ct]
-
-\starttext
- \xmlprocess{main}{x-ct-test.xml}{}
-\stoptext
diff --git a/Master/texmf-dist/tex/context/test/x-ct-test.xml b/Master/texmf-dist/tex/context/test/x-ct-test.xml
deleted file mode 100644
index e61abb0549d..00000000000
--- a/Master/texmf-dist/tex/context/test/x-ct-test.xml
+++ /dev/null
@@ -1,149 +0,0 @@
-<?xml version='1.0' standalone='yes' ?>
-
-<root xmlns:ct="http://www.pragma-ade.com/context">
-
- one:
-
- <tabulate xmlns="http://www.pragma-ade.com/context">
- <template>
- <column align='flushleft'/>
- <column align='flushright'/>
- <column align='center'/>
- </template>
- <body>
- <row>
- <cell>one</cell>
- <cell>two</cell>
- <cell>three</cell>
- </row>
- <row>
- <cell>a</cell>
- <cell>b</cell>
- <cell>c</cell>
- </row>
- <row>
- <cell>alpha</cell>
- <cell>beta</cell>
- <cell>gamma</cell>
- </row>
- </body>
- </tabulate>
-
- two:
-
- <context:tabulate>
- <context:template>
- <context:column align='flushleft'/>
- <context:column align='flushright'/>
- <context:column align='center'/>
- </context:template>
- <context:body>
- <context:row>
- <context:cell>one</context:cell>
- <context:cell>two</context:cell>
- <context:cell>three</context:cell>
- </context:row>
- <context:row>
- <context:cell>a</context:cell>
- <context:cell>b</context:cell>
- <context:cell>c</context:cell>
- </context:row>
- <context:row>
- <context:cell>alpha</context:cell>
- <context:cell>beta</context:cell>
- <context:cell>gamma</context:cell>
- </context:row>
- </context:body>
- </context:tabulate>
-
- three:
-
- <context:tabulate>
- <context:body>
- <context:row>
- <context:cell>one</context:cell>
- <context:cell>two</context:cell>
- <context:cell>three</context:cell>
- </context:row>
- <context:row>
- <context:cell>a</context:cell>
- <context:cell>b</context:cell>
- <context:cell>c</context:cell>
- </context:row>
- <context:row>
- <context:cell>alpha</context:cell>
- <context:cell>beta</context:cell>
- <context:cell>gamma</context:cell>
- </context:row>
- </context:body>
- </context:tabulate>
-
- four:
-
- <context:tabulate template="|l|l|l|">
- <context:body>
- <context:row>
- <context:cell>one</context:cell>
- <context:cell>two</context:cell>
- <context:cell>three</context:cell>
- </context:row>
- <context:row>
- <context:cell>a</context:cell>
- <context:cell>b</context:cell>
- <context:cell>c</context:cell>
- </context:row>
- <context:row>
- <context:cell>alpha</context:cell>
- <context:cell>beta</context:cell>
- <context:cell>gamma</context:cell>
- </context:row>
- </context:body>
- </context:tabulate>
-
- five:
-
- <ct:combination nx='3' ny='2'>
- <ct:pair>
- <ct:content>some content 1</ct:content>
- <ct:caption>caption a</ct:caption>
- </ct:pair>
- <ct:pair>
- <ct:content>some content 2</ct:content>
- <ct:caption>caption b</ct:caption>
- </ct:pair>
- <ct:pair>
- <ct:content>some content 3</ct:content>
- <ct:caption>caption c</ct:caption>
- </ct:pair>
- <ct:pair>
- <ct:content>some content 4</ct:content>
- <ct:caption>caption d</ct:caption>
- </ct:pair>
- <ct:pair>
- <ct:content>some content 5</ct:content>
- <ct:caption>caption e</ct:caption>
- </ct:pair>
- <ct:pair>
- <ct:content>some content 6</ct:content>
- <ct:caption>caption f</ct:caption>
- </ct:pair>
- </ct:combination>
-
- six:
-
- <ct:combination>
- <ct:pair>
- <ct:content>some content 1</ct:content>
- <ct:caption>caption a</ct:caption>
- </ct:pair>
- <ct:pair>
- <ct:content>some content 2</ct:content>
- <ct:caption>caption b</ct:caption>
- </ct:pair>
- <ct:pair>
- <ct:content>some content 3</ct:content>
- <ct:caption>caption c</ct:caption>
- </ct:pair>
- </ct:combination>
-
-</ct:root>
diff --git a/Master/texmf-dist/tex/context/test/x-mmp-test.tex b/Master/texmf-dist/tex/context/test/x-mmp-test.tex
deleted file mode 100644
index f157c13f1e5..00000000000
--- a/Master/texmf-dist/tex/context/test/x-mmp-test.tex
+++ /dev/null
@@ -1,12 +0,0 @@
-% engine=luatex
-
-% \startsetups xml:process
-% \xmlregisteredsetups
-% \xmlall\xmldocument{/}
-% \stopsetups
-
-\usemodule[x][mml]
-
-\starttext
- \xmlprocess{main}{x-mmp-test.xml}{xml:process}
-\stoptext
diff --git a/Master/texmf-dist/tex/context/test/x-mmp-test.xml b/Master/texmf-dist/tex/context/test/x-mmp-test.xml
deleted file mode 100644
index 6b3e59a01bf..00000000000
--- a/Master/texmf-dist/tex/context/test/x-mmp-test.xml
+++ /dev/null
@@ -1,1270 +0,0 @@
-<?xml version="1.0"?>
-
-<!-- this file needs a bit of formatting -->
-
-<root>
-
- <mmp:math>
- <mmp:mtable>
- <mmp:mtr>
- <mmp:mtd>
- <mmp:mn>10</mmp:mn>
- </mmp:mtd>
- </mmp:mtr>
- </mmp:mtable>
- </mmp:math>
-
- <mmp:math>
- <mmp:mtable columnspacing='0' rowspacing='0'>
- <mmp:mtr>
- <mmp:mtd></mmp:mtd>
- <mmp:mtd columnalign='right'>
- <mmp:mn>10</mmp:mn>
- </mmp:mtd>
- </mmp:mtr>
- <mmp:mtr>
- <mmp:mtd columnalign='right'>
- <mmp:mn>131</mmp:mn>
- </mmp:mtd>
- <mmp:mtd columnalign='right'>
- <mmp:menclose notation='longdiv'>
- <mmp:mn>1413</mmp:mn>
- </mmp:menclose>
- </mmp:mtd>
- </mmp:mtr>
- <mmp:mtr>
- <mmp:mtd/>
- <mmp:mtd columnalign='right'>
- <mmp:mrow>
- <mmp:munder>
- <mmp:mn>131</mmp:mn>
- <mmp:mo> &UnderBar; </mmp:mo>
- </mmp:munder>
- <mmp:mphantom><mmp:mn>3</mmp:mn></mmp:mphantom>
- </mmp:mrow>
- </mmp:mtd>
- </mmp:mtr>
- <mmp:mtr>
- <mmp:mtd/>
- <mmp:mtd columnalign='right'>
- <mmp:mn>103</mmp:mn>
- </mmp:mtd>
- </mmp:mtr>
- </mmp:mtable>
- </mmp:math>
-
- <mmp:math>
- <mmp:mmultiscripts>
- <mmp:mi> R </mmp:mi>
- <mmp:mi> i </mmp:mi>
- <mmp:none/>
- <mmp:none/>
- <mmp:mi> j </mmp:mi>
- <mmp:mi> k </mmp:mi>
- <mmp:none/>
- <mmp:mi> l </mmp:mi>
- <mmp:none/>
- </mmp:mmultiscripts>
- </mmp:math>
-
- <mmp:math>
- <mmp:mmultiscripts>
- <mmp:mi> R </mmp:mi>
- <mmp:mi> i </mmp:mi>
- <mmp:mi> j </mmp:mi>
- <mmp:mprescripts/>
- <mmp:mi> k </mmp:mi>
- <mmp:mi> l </mmp:mi>
- <mmp:none/>
- </mmp:mmultiscripts>
- </mmp:math>
-
- <mmp:math>
- <mmp:mrow>
- <mmp:munder accentunder="true">
- <mmp:mrow>
- <mmp:mi> x </mmp:mi>
- <mmp:mo> + </mmp:mo>
- <mmp:mi> y </mmp:mi>
- <mmp:mo> + </mmp:mo>
- <mmp:mi> z </mmp:mi>
- </mmp:mrow>
- <mmp:mo> &UnderBrace; </mmp:mo>
- </mmp:munder>
- <mmp:mtext> versus </mmp:mtext>
- <mmp:munder accentunder="false">
- <mmp:mrow>
- <mmp:mi> x </mmp:mi>
- <mmp:mo> + </mmp:mo>
- <mmp:mi> y </mmp:mi>
- <mmp:mo> + </mmp:mo>
- <mmp:mi> z </mmp:mi>
- </mmp:mrow>
- <mmp:mo> &UnderBrace; </mmp:mo>
- </mmp:munder>
- </mmp:mrow>
- </mmp:math>
-
- <mmp:math>
- <mmp:mrow>
- <mmp:munder>
- <mmp:mo> ( </mmp:mo>
- <mmp:mo> &UnderBar; </mmp:mo>
- </mmp:munder>
- <mmp:mfrac>
- <mmp:mi> a </mmp:mi>
- <mmp:mi> b </mmp:mi>
- </mmp:mfrac>
- <mmp:mover>
- <mmp:mo> ) </mmp:mo>
- <mmp:mo> &OverBar; </mmp:mo>
- </mmp:mover>
- </mmp:mrow>
- </mmp:math>
-
-
- <mmp:math>
- <mmp:mrow>
- <mmp:msubsup>
- <mmp:mo> &int; </mmp:mo>
- <mmp:mn> 0 </mmp:mn>
- <mmp:mn> 1 </mmp:mn>
- </mmp:msubsup>
- <mmp:mrow>
- <mmp:msup>
- <mmp:mi> &ExponentialE; </mmp:mi>
- <mmp:mi> x </mmp:mi>
- </mmp:msup>
- <mmp:mo> &InvisibleTimes; </mmp:mo>
- <mmp:mrow>
- <mmp:mo> &DifferentialD; </mmp:mo>
- <mmp:mi> x </mmp:mi>
- </mmp:mrow>
- </mmp:mrow>
- </mmp:mrow>
- </mmp:math>
-
- <mmp:math>
- <mmp:mfrac>
- <mmp:mrow>
- <mmp:mi> x </mmp:mi>
- <mmp:mo> + </mmp:mo>
- <mmp:mi> y </mmp:mi>
- <mmp:mo> + </mmp:mo>
- <mmp:mi> z </mmp:mi>
- </mmp:mrow>
- <mmp:mrow>
- <mmp:mi> x </mmp:mi>
- <mmp:mphantom>
- <mmp:mo> + </mmp:mo>
- <mmp:mi> y </mmp:mi>
- </mmp:mphantom>
- <mmp:mo> + </mmp:mo>
- <mmp:mi> z </mmp:mi>
- </mmp:mrow>
- </mmp:mfrac>
- </mmp:math>
-
- <mmp:math>
- <mmp:mfrac>
- <mmp:mrow>
- <mmp:mi> x </mmp:mi>
- <mmp:mo> + </mmp:mo>
- <mmp:mi> y </mmp:mi>
- <mmp:mo> + </mmp:mo>
- <mmp:mi> z </mmp:mi>
- </mmp:mrow>
- <mmp:mrow>
- <mmp:mi> x </mmp:mi>
- <mmp:mphantom>
- <mmp:mo> + </mmp:mo>
- </mmp:mphantom>
- <mmp:mphantom>
- <mmp:mi> y </mmp:mi>
- </mmp:mphantom>
- <mmp:mo> + </mmp:mo>
- <mmp:mi> z </mmp:mi>
- </mmp:mrow>
- </mmp:mfrac>
- </mmp:math>
-
- <mmp:math>
- <mmp:mrow>
- <mmp:mo> ( </mmp:mo>
- <mmp:mfrac>
- <mmp:mi> a </mmp:mi>
- <mmp:mi> b </mmp:mi>
- </mmp:mfrac>
- <mmp:mo maxsize="1"> ) </mmp:mo>
- </mmp:mrow>
- </mmp:math>
-
- <mmp:math display='block'>
- <mmp:mrow>
- <mmp:mi>sin</mmp:mi>
- <mmp:mi>x</mmp:mi>
- </mmp:mrow>
- </mmp:math>
-
- <mmp:math display='block'>
- <mmp:mrow>
- <mmp:mn>2500</mmp:mn>
- <mmp:mstyle scriptlevel='+1'>
- <mmp:mfrac bevelled='true'>
- <mmp:mrow>
- <mmp:msup>
- <mmp:mtext>m</mmp:mtext>
- <mmp:mtext>3</mmp:mtext>
- </mmp:msup>
- </mmp:mrow>
- <mmp:mtext>s</mmp:mtext>
- </mmp:mfrac>
- </mmp:mstyle>
- </mmp:mrow>
- </mmp:math>
-
-<mmp:math display='block'>
- <mmp:mrow>
- <mmp:mn>2500</mmp:mn>
- <mmp:msup>
- <mmp:mrow>
- <mmp:mtext>km</mmp:mtext>
- </mmp:mrow>
- <mmp:mtext>3</mmp:mtext>
- </mmp:msup>
- <mmp:mtext>/s</mmp:mtext>
- </mmp:mrow>
-</mmp:math>
-
-<mmp:math display='block'>
- <mmp:mrow>
- <mmp:msup>
- <mmp:mrow>
- <mmp:mi>sin</mmp:mi>
- <mmp:mo>&#x2061;</mmp:mo>
- </mmp:mrow>
- <mmp:mn>2</mmp:mn>
- </mmp:msup>
- <mmp:mi>x</mmp:mi>
- <mmp:mo>=</mmp:mo>
- <mmp:mn>1</mmp:mn>
- <mmp:mo>&#x2212;</mmp:mo>
- <mmp:msup>
- <mmp:mrow>
- <mmp:mi>cos</mmp:mi>
- <mmp:mo>&#x2061;</mmp:mo>
- </mmp:mrow>
- <mmp:mn>2</mmp:mn>
- </mmp:msup>
- <mmp:mi>x</mmp:mi>
- </mmp:mrow>
-</mmp:math>
-
-<mmp:math display='block'>
- <mmp:semantics>
- <mmp:mrow>
- <mmp:msup>
- <mmp:mrow>
- <mmp:mrow><mmp:mo>&#x2016;</mmp:mo> <mmp:mover accent='true'>
- <mmp:mi>c</mmp:mi>
- <mmp:mo>&#x2192;</mmp:mo>
- </mmp:mover>
- <mmp:mo>&#x02016;</mmp:mo></mmp:mrow>
- </mmp:mrow>
- <mmp:mn>2</mmp:mn>
- </mmp:msup>
- <mmp:mo>=</mmp:mo><mmp:msup>
- <mmp:mrow>
- <mmp:mrow><mmp:mo>&#x2016;</mmp:mo> <mmp:mover accent='true'>
- <mmp:mi>a</mmp:mi>
- <mmp:mo>&#x2192;</mmp:mo>
- </mmp:mover>
- <mmp:mo>&#x02016;</mmp:mo></mmp:mrow>
- </mmp:mrow>
- <mmp:mn>2</mmp:mn>
- </mmp:msup>
- <mmp:mo>+</mmp:mo><mmp:msup>
- <mmp:mrow>
- <mmp:mrow><mmp:mo>&#x2016;</mmp:mo> <mmp:mover accent='true'>
- <mmp:mi>b</mmp:mi>
- <mmp:mo>&#x2192;</mmp:mo>
- </mmp:mover>
- <mmp:mo>&#x02016;</mmp:mo></mmp:mrow>
- </mmp:mrow>
- <mmp:mn>2</mmp:mn>
- </mmp:msup>
- </mmp:mrow>
- <mmp:annotation encoding='MathType-MTEF'>
- MathType@MTEF@5@5@+=feaafiart1ev1aaatCvAUfeBSjuyZL2yd9gzLbvyNv2CaerbuLwBLnhiov2DGi1BTfMBaeXatLxBI9gBaerbd9wDYLwzYbItLDharqqtubsr4rNCHbGeaGqiVu0Je9sqqrpepC0xbbL8F4rqqrFfpeea0xe9Lq=Jc9vqaqpepm0xbba9pwe9Q8fs0=yqaqpepae9pg0FirpepeKkFr0xfr=xfr=xb9adbaqaaeGaciGaaiaabeqaamaabaabaaGcbaWaauWaaeaaceWGJbGbaSaaaiaawMa7caGLkWoadaahaaWcbeqaaiaaikdaaaGccqGH9aqpdaqbdaqaaiqadggagaWcaaGaayzcSlaawQa7amaaCaaaleqabaGaaGOmaaaakiabgUcaRmaafmaabaGabmOyayaalaaacaGLjWUaayPcSdWaaWbaaSqabeaacaaIYaaaaaaa@4704@</mmp:annotation>
- </mmp:semantics>
-</mmp:math>
-
-<mmp:math display='block'>
- <mmp:semantics>
- <mmp:mrow>
- <mmp:mi>n</mmp:mi><mmp:mo>=</mmp:mo><mmp:mfrac>
-<mmp:mrow>
- <mmp:mi>log</mmp:mi>
- <mmp:mo>&#x2061;</mmp:mo>
- <mmp:msub>
- <mmp:mi>v</mmp:mi>
- <mmp:mn>1</mmp:mn>
- </mmp:msub>
- <mmp:mo>&#x2212;</mmp:mo>
- <mmp:mi>log</mmp:mi>
- <mmp:mo>&#x2061;</mmp:mo>
- <mmp:msub>
- <mmp:mi>v</mmp:mi>
- <mmp:mn>2</mmp:mn>
- </mmp:msub>
-</mmp:mrow>
- <mmp:mrow>
- <mmp:mi>log</mmp:mi><mmp:mo>&#x2061;</mmp:mo><mmp:msub>
- <mmp:mi>t</mmp:mi>
- <mmp:mn>1</mmp:mn>
- </mmp:msub>
- <mmp:mo>&#x2212;</mmp:mo><mmp:mi>log</mmp:mi><mmp:mo>&#x2061;</mmp:mo><mmp:msub>
- <mmp:mi>t</mmp:mi>
- <mmp:mn>2</mmp:mn>
- </mmp:msub>
- </mmp:mrow>
- </mmp:mfrac>
- </mmp:mrow>
- <mmp:annotation encoding='MathType-MTEF'>
- MathType@MTEF@5@5@+=feaafiart1ev1aaatCvAUfeBSjuyZL2yd9gzLbvyNv2CaerbuLwBLnhiov2DGi1BTfMBaeXatLxBI9gBaerbd9wDYLwzYbItLDharqqtubsr4rNCHbGeaGqiVu0Je9sqqrpepC0xbbL8F4rqqrFfpeea0xe9Lq=Jc9vqaqpepm0xbba9pwe9Q8fs0=yqaqpepae9pg0FirpepeKkFr0xfr=xfr=xb9adbaqaaeGaciGaaiaabeqaamaabaabaaGcbaGaamOBaiabg2da9maalaaabaGaciiBaiaac+gacaGGNbGaamODamaaBaaaleaacaaIXaaabeaakiabgkHiTiGacYgacaGGVbGaai4zaiaadAhadaWgaaWcbaGaaGOmaaqabaaakeaaciGGSbGaai4BaiaacEgacaWG0bWaaSbaaSqaaiaaigdaaeqaaOGaeyOeI0IaciiBaiaac+gacaGGNbGaamiDamaaBaaaleaacaaIYaaabeaaaaaaaa@4CB4@</mmp:annotation>
- </mmp:semantics>
-</mmp:math>
-
-<mmp:math display='block'>
- <mmp:semantics>
- <mmp:mrow>
- <mmp:msub>
- <mmp:mi>F</mmp:mi>
- <mmp:mtext>s</mmp:mtext>
- </mmp:msub>
- <mmp:mo>=</mmp:mo><mmp:msub>
- <mmp:mi>A</mmp:mi>
- <mmp:mtext>a</mmp:mtext>
- </mmp:msub>
- <mmp:mo>&#x00B7;</mmp:mo><mmp:msub>
- <mmp:mover accent='true'>
- <mmp:mi>&#x03C3;</mmp:mi>
- <mmp:mo>&#x00AF;</mmp:mo>
- </mmp:mover>
- <mmp:mtext>o</mmp:mtext>
- </mmp:msub>
- </mmp:mrow>
- <mmp:annotation encoding='MathType-MTEF'>
- MathType@MTEF@5@5@+=feaafiart1ev1aaatCvAUfeBSjuyZL2yd9gzLbvyNv2CaerbuLwBLnhiov2DGi1BTfMBaeXatLxBI9gBaerbd9wDYLwzYbItLDharqqtubsr4rNCHbGeaGqiVu0Je9sqqrpepC0xbbL8F4rqqrFfpeea0xe9Lq=Jc9vqaqpepm0xbba9pwe9Q8fs0=yqaqpepae9pg0FirpepeKkFr0xfr=xfr=xb9adbaqaaeGaciGaaiaabeqaamaabaabaaGcbaGaamOramaaBaaaleaacaqGZbaabeaakiabg2da9iaadgeadaWgaaWcbaGaaeyyaaqabaGccqWIpM+zcuaHdpWCgaqeamaaBaaaleaacaqGVbaabeaaaaa@4033@</mmp:annotation>
- </mmp:semantics>
-</mmp:math>
-
-<mmp:math display='block'>
- <mmp:semantics>
- <mmp:mrow>
- <mmp:msub>
- <mmp:mi>M</mmp:mi>
- <mmp:mrow>
- <mmp:mtext>z;pl;d</mmp:mtext>
- </mmp:mrow>
- </mmp:msub>
- <mmp:mo stretchy='false'>(</mmp:mo><mmp:mn>1</mmp:mn><mmp:mo>&#x2212;</mmp:mo><mmp:msup>
- <mmp:mrow>
- <mmp:mo stretchy='false'>(</mmp:mo><mmp:mfrac>
- <mmp:mrow>
- <mmp:mfrac>
- <mmp:mrow>
- <mmp:msub>
- <mmp:mi>N</mmp:mi>
- <mmp:mrow>
- <mmp:mtext>s;d</mmp:mtext>
- </mmp:mrow>
- </mmp:msub>
- </mmp:mrow>
- <mmp:mrow>
- <mmp:msub>
- <mmp:mi>N</mmp:mi>
- <mmp:mrow>
- <mmp:mtext>pl;d</mmp:mtext>
- </mmp:mrow>
- </mmp:msub>
- </mmp:mrow>
- </mmp:mfrac>
- <mmp:mo>&#x2212;</mmp:mo><mmp:msub>
- <mmp:mi>a</mmp:mi>
- <mmp:mn>1</mmp:mn>
- </mmp:msub>
- </mmp:mrow>
- <mmp:mrow>
- <mmp:mn>1</mmp:mn><mmp:mo>&#x2212;</mmp:mo><mmp:msub>
- <mmp:mi>a</mmp:mi>
- <mmp:mn>1</mmp:mn>
- </mmp:msub>
- </mmp:mrow>
- </mmp:mfrac>
- <mmp:mo stretchy='false'>)</mmp:mo>
- </mmp:mrow>
- <mmp:mn>2</mmp:mn>
- </mmp:msup>
- <mmp:mo stretchy='false'>)</mmp:mo>
- </mmp:mrow>
- <mmp:annotation encoding='MathType-MTEF'>
- MathType@MTEF@5@5@+=feaafiart1ev1aaatCvAUfeBSjuyZL2yd9gzLbvyNv2CaerbuLwBLnhiov2DGi1BTfMBaeXatLxBI9gBaerbd9wDYLwzYbItLDharqqtubsr4rNCHbGeaGqiVu0Je9sqqrpepC0xbbL8F4rqqrFfpeea0xe9Lq=Jc9vqaqpepm0xbba9pwe9Q8fs0=yqaqpepae9pg0FirpepeKkFr0xfr=xfr=xb9adbaqaaeGaciGaaiaabeqaamaabaabaaGcbaGaamytamaaBaaaleaacaqG6bGaae4oaiaabchacaqGSbGaae4oaiaabsgaaeqaaOGaaiikaiaaigdacqGHsislcaGGOaWaaSaaaeaadaWcaaqaaiaad6eadaWgaaWcbaGaae4CaiaabUdacaqGKbaabeaaaOqaaiaad6eadaWgaaWcbaGaaeiCaiaabYgacaqG7aGaaeizaaqabaaaaOGaeyOeI0IaamyyamaaBaaaleaacaaIXaaabeaaaOqaaiaaigdacqGHsislcaWGHbWaaSbaaSqaaiaaigdaaeqaaaaakiaacMcadaahaaWcbeqaaiaaikdaaaGccaGGPaaaaa@501B@</mmp:annotation>
- </mmp:semantics>
-</mmp:math>
-
-<mmp:math display='block'>
- <mmp:semantics>
- <mmp:mrow>
- <mmp:msub>
- <mmp:mi>M</mmp:mi>
- <mmp:mrow>
- <mmp:mtext>z;pl;d</mmp:mtext>
- </mmp:mrow>
- </mmp:msub>
- <mmp:mfenced open="(" close=")">
- <mmp:mn>1</mmp:mn><mmp:mo>&#x2212;</mmp:mo><mmp:msup>
- <mmp:mrow>
- <mmp:mo stretchy='false'>(</mmp:mo><mmp:mfrac>
- <mmp:mrow>
- <mmp:mfrac>
- <mmp:mrow>
- <mmp:msub>
- <mmp:mi>N</mmp:mi>
- <mmp:mrow>
- <mmp:mtext>s;d</mmp:mtext>
- </mmp:mrow>
- </mmp:msub>
- </mmp:mrow>
- <mmp:mrow>
- <mmp:msub>
- <mmp:mi>N</mmp:mi>
- <mmp:mrow>
- <mmp:mtext>pl;d</mmp:mtext>
- </mmp:mrow>
- </mmp:msub>
- </mmp:mrow>
- </mmp:mfrac>
- <mmp:mo>&#x2212;</mmp:mo><mmp:msub>
- <mmp:mi>a</mmp:mi>
- <mmp:mn>1</mmp:mn>
- </mmp:msub>
- </mmp:mrow>
- <mmp:mrow>
- <mmp:mn>1</mmp:mn><mmp:mo>&#x2212;</mmp:mo><mmp:msub>
- <mmp:mi>a</mmp:mi>
- <mmp:mn>1</mmp:mn>
- </mmp:msub>
- </mmp:mrow>
- </mmp:mfrac>
- <mmp:mo stretchy='false'>)</mmp:mo>
- </mmp:mrow>
- <mmp:mn>2</mmp:mn>
- </mmp:msup>
- </mmp:mfenced>
- </mmp:mrow>
- <mmp:annotation encoding='MathType-MTEF'>
- MathType@MTEF@5@5@+=feaafiart1ev1aaatCvAUfeBSjuyZL2yd9gzLbvyNv2CaerbuLwBLnhiov2DGi1BTfMBaeXatLxBI9gBaerbd9wDYLwzYbItLDharqqtubsr4rNCHbGeaGqiVu0Je9sqqrpepC0xbbL8F4rqqrFfpeea0xe9Lq=Jc9vqaqpepm0xbba9pwe9Q8fs0=yqaqpepae9pg0FirpepeKkFr0xfr=xfr=xb9adbaqaaeGaciGaaiaabeqaamaabaabaaGcbaGaamytamaaBaaaleaacaqG6bGaae4oaiaabchacaqGSbGaae4oaiaabsgaaeqaaOGaaiikaiaaigdacqGHsislcaGGOaWaaSaaaeaadaWcaaqaaiaad6eadaWgaaWcbaGaae4CaiaabUdacaqGKbaabeaaaOqaaiaad6eadaWgaaWcbaGaaeiCaiaabYgacaqG7aGaaeizaaqabaaaaOGaeyOeI0IaamyyamaaBaaaleaacaaIXaaabeaaaOqaaiaaigdacqGHsislcaWGHbWaaSbaaSqaaiaaigdaaeqaaaaakiaacMcadaahaaWcbeqaaiaaikdaaaGccaGGPaaaaa@501B@</mmp:annotation>
- </mmp:semantics>
-</mmp:math>
-
-<mmp:math display='block'>
- <mmp:semantics>
- <mmp:mrow>
- <mmp:mi>q</mmp:mi><mmp:mo>=</mmp:mo><mmp:mn>1</mmp:mn><mmp:mo>,</mmp:mo><mmp:mn>03</mmp:mn><mmp:msqrt>
- <mmp:mrow>
- <mmp:mn>1</mmp:mn><mmp:mo>&#x2212;</mmp:mo><mmp:msup>
- <mmp:mrow>
- <mmp:mo stretchy='false'></mmp:mo><mmp:mfrac>
- <mmp:mrow>
- <mmp:msub>
- <mmp:mi>V</mmp:mi>
- <mmp:mrow>
- <mmp:mtext>y;s;d</mmp:mtext>
- </mmp:mrow>
- </mmp:msub>
- </mmp:mrow>
- <mmp:mrow>
- <mmp:msub>
- <mmp:mi>N</mmp:mi>
- <mmp:mrow>
- <mmp:mtext>y;pl;d</mmp:mtext>
- </mmp:mrow>
- </mmp:msub>
- </mmp:mrow>
- </mmp:mfrac>
- <mmp:mo stretchy='false'>)</mmp:mo>
- </mmp:mrow>
- <mmp:mn>2</mmp:mn>
- </mmp:msup>
- </mmp:mrow>
- </mmp:msqrt>
- </mmp:mrow>
- <mmp:annotation encoding='MathType-MTEF'>
- MathType@MTEF@5@5@+=feaafiart1ev1aaatCvAUfeBSjuyZL2yd9gzLbvyNv2CaerbuLwBLnhiov2DGi1BTfMBaeXatLxBI9gBaerbd9wDYLwzYbItLDharqqtubsr4rNCHbGeaGqiVu0Je9sqqrpepC0xbbL8F4rqqrFfpeea0xe9Lq=Jc9vqaqpepm0xbba9pwe9Q8fs0=yqaqpepae9pg0FirpepeKkFr0xfr=xfr=xb9adbaqaaeGaciGaaiaabeqaamaabaabaaGcbaGaamyCaiabg2da9iaaigdacaGGSaGaaGimaiaaiodadaGcaaqaaiaaigdacqGHsislcaGGOaWaaSaaaeaacaWGwbWaaSbaaSqaaiaabMhacaqG7aGaae4CaiaabUdacaqGKbaabeaaaOqaaiaad6eadaWgaaWcbaGaaeyEaiaabUdacaqGWbGaaeiBaiaabUdacaqGKbaabeaaaaGccaGGPaWaaWbaaSqabeaacaaIYaaaaaqabaaaaa@4A85@</mmp:annotation>
- </mmp:semantics>
-</mmp:math>
-
-<mmp:math display='block'>
- <mmp:mi>&#x2115;</mmp:mi>
- <mmp:annotation encoding='MathType-MTEF'>
- MathType@MTEF@5@5@+=feaafiart1ev1aaatCvAUfeBSjuyZL2yd9gzLbvyNv2CaerbuLwBLnhiov2DGi1BTfMBaeXatLxBI9gBaerbd9wDYLwzYbItLDharqqtubsr4rNCHbGeaGqiVu0Je9sqqrpepC0xbbL8F4rqqrFfpeea0xe9Lq=Jc9vqaqpepm0xbba9pwe9Q8fs0=yqaqpepae9pg0FirpepeKkFr0xfr=xfr=xb9adbaqaaeGaciGaaiaabeqaamaabaabaaGcbaGaeSyfHukaaa@3759@</mmp:annotation>
-</mmp:math>
-
-
- <mmp:math>
- <mmp:mrow>
- <mmp:mo> ( </mmp:mo>
- <mmp:mfrac>
- <mmp:mn> 1 </mmp:mn>
- <mmp:msqrt>
- <mmp:mrow>
- <mmp:mo> - </mmp:mo>
- <mmp:mn> 1 </mmp:mn>
- </mmp:mrow>
- </mmp:msqrt>
- </mmp:mfrac>
- <mmp:mo> ) </mmp:mo>
- </mmp:mrow>
- </mmp:math>
-
- <mmp:math>
- <mmp:mrow>
- <mmp:mfrac>
- <mmp:mn> 1 </mmp:mn>
- <mmp:msqrt>
- <mmp:mrow>
- <mmp:mo> - </mmp:mo>
- <mmp:mn> 1 </mmp:mn>
- </mmp:mrow>
- </mmp:msqrt>
- </mmp:mfrac>
- <mmp:mo> ) </mmp:mo>
- </mmp:mrow>
- </mmp:math>
-
- <mmp:math>
- <mmp:mrow>
- <mmp:mo> ( </mmp:mo>
- <mmp:mfrac>
- <mmp:mn> 1 </mmp:mn>
- <mmp:msqrt>
- <mmp:mrow>
- <mmp:mo> - </mmp:mo>
- <mmp:mn> 1 </mmp:mn>
- </mmp:mrow>
- </mmp:msqrt>
- </mmp:mfrac>
- </mmp:mrow>
- </mmp:math>
-
- <mmp:math>
- <mmp:mrow>
- <mmp:mi> x </mmp:mi>
- <mmp:mo> + </mmp:mo>
- <mmp:mrow>
- <mmp:mi> a </mmp:mi>
- <mmp:mo> / </mmp:mo>
- <mmp:mi> b </mmp:mi>
- </mmp:mrow>
- </mmp:mrow>
- </mmp:math>
-
- <mmp:math>
- <mmp:msqrt>
- <mmp:mo> - </mmp:mo>
- <mmp:mn> 1 </mmp:mn>
- </mmp:msqrt>
- </mmp:math>
-
- <mmp:math>
- <mmp:msqrt>
- <mmp:mrow>
- <mmp:mo> - </mmp:mo>
- <mmp:mn> 1 </mmp:mn>
- </mmp:mrow>
- </mmp:msqrt>
- </mmp:math>
-
- <mmp:math>
- <mmp:mfenced>
- <mmp:mrow>
- <mmp:mi> a </mmp:mi>
- <mmp:mo> + </mmp:mo>
- <mmp:mi> b </mmp:mi>
- </mmp:mrow>
- </mmp:mfenced>
- </mmp:math>
-
- <mmp:math>
- <mmp:mfenced open="[">
- <mmp:mn> 0 </mmp:mn>
- <mmp:mn> 1 </mmp:mn>
- </mmp:mfenced>
- </mmp:math>
-
- <mmp:math>
- <mmp:mfrac>
- <mmp:mn> 1 </mmp:mn>
- <mmp:mn> 2 </mmp:mn>
- </mmp:mfrac>
- </mmp:math>
-
- <mmp:math>
- <mmp:mi> x </mmp:mi>
- <mmp:mi> D </mmp:mi>
- <mmp:mi> sin </mmp:mi>
- <mmp:mi></mmp:mi>
- </mmp:math>
-
- <mmp:math>
- <mmp:mrow>
- <mmp:mi> sin </mmp:mi>
- <mmp:mo> &ApplyFunction; </mmp:mo>
- <mmp:mi> x </mmp:mi>
- </mmp:mrow>
- </mmp:math>
-
- <mmp:math>
- <mmp:mrow>
- <mmp:mn> 1 </mmp:mn>
- <mmp:mo> + </mmp:mo>
- <mmp:mi> ... </mmp:mi>
- <mmp:mo> + </mmp:mo>
- <mmp:mi> n </mmp:mi>
- </mmp:mrow>
- </mmp:math>
-
- <mmp:math>
- <mmp:mi> &pi; </mmp:mi>
- <mmp:mi> &ImaginaryI; </mmp:mi>
- <mmp:mi> &ExponentialE; </mmp:mi>
- </mmp:math>
-
- <mmp:math>
- <mmp:mn> 2 </mmp:mn>
- <mmp:mspace/>
- <mmp:mn> 0.123 </mmp:mn>
- <mmp:mspace/>
- <mmp:mn> 1,000,000 </mmp:mn>
- <mmp:mspace/>
- <mmp:mn> 2.1e10 </mmp:mn>
- <mmp:mspace/>
- <mmp:mn> 0xFFEF </mmp:mn>
- <mmp:mspace/>
- <mmp:mn> MCMLXIX </mmp:mn>
- <mmp:mspace/>
- <mmp:mn> twenty one </mmp:mn>
- </mmp:math>
-
- <mmp:math>
- <mmp:mrow>
- <mmp:mn> 2 </mmp:mn>
- <mmp:mo> + </mmp:mo>
- <mmp:mrow>
- <mmp:mn> 3 </mmp:mn>
- <mmp:mo> &InvisibleTimes; </mmp:mo>
- <mmp:mi> &ImaginaryI; </mmp:mi>
- </mmp:mrow>
- </mmp:mrow>
- <mmp:mfrac> <mmp:mn> 1 </mmp:mn> <mmp:mn> 2 </mmp:mn> </mmp:mfrac>
- <mmp:mi> &pi; </mmp:mi>
- <mmp:mi> &ExponentialE; </mmp:mi>
- </mmp:math>
-
- <mmp:math>
- <mmp:mo> + </mmp:mo>
- <mmp:mo> &lt; </mmp:mo>
- <mmp:mo> &le; </mmp:mo>
- <mmp:mo> &lt;= </mmp:mo>
- <mmp:mo> ++ </mmp:mo>
- <mmp:mo> &sum; </mmp:mo>
- <mmp:mo> .NOT. </mmp:mo>
- <mmp:mo> and </mmp:mo>
- <mmp:mo> &InvisibleTimes; </mmp:mo>
- </mmp:math>
-
- <mmp:math>
- <mmp:mrow>
- <mmp:mo> ( </mmp:mo>
- <mmp:mrow>
- <mmp:mi> a </mmp:mi>
- <mmp:mo> + </mmp:mo>
- <mmp:mi> b </mmp:mi>
- </mmp:mrow>
- <mmp:mo> ) </mmp:mo>
- </mmp:mrow>
- </mmp:math>
-
- <mmp:math>
- <mmp:mrow>
- <mmp:mo> [ </mmp:mo>
- <mmp:mrow>
- <mmp:mn> 0 </mmp:mn>
- <mmp:mo> , </mmp:mo>
- <mmp:mn> 1 </mmp:mn>
- </mmp:mrow>
- <mmp:mo> ) </mmp:mo>
- </mmp:mrow>
- </mmp:math>
-
- <mmp:math>
- <mmp:mrow>
- <mmp:mi> f </mmp:mi>
- <mmp:mo> &ApplyFunction; </mmp:mo>
- <mmp:mrow>
- <mmp:mo> ( </mmp:mo>
- <mmp:mrow>
- <mmp:mi> x </mmp:mi>
- <mmp:mo> , </mmp:mo>
- <mmp:mi> y </mmp:mi>
- </mmp:mrow>
- <mmp:mo> ) </mmp:mo>
- </mmp:mrow>
- </mmp:mrow>
- </mmp:math>
-
- <mmp:math>
- <mmp:mrow>
- <mmp:mi> x </mmp:mi>
- <mmp:mo> &InvisibleTimes; </mmp:mo>
- <mmp:mi> y </mmp:mi>
- </mmp:mrow>
- <mmp:mrow>
- <mmp:mi> f </mmp:mi>
- <mmp:mo> &ApplyFunction; </mmp:mo>
- <mmp:mrow>
- <mmp:mo> ( </mmp:mo>
- <mmp:mi> x </mmp:mi>
- <mmp:mo> ) </mmp:mo>
- </mmp:mrow>
- </mmp:mrow>
- <mmp:mrow>
- <mmp:mi> sin </mmp:mi>
- <mmp:mo> &ApplyFunction; </mmp:mo>
- <mmp:mi> x </mmp:mi>
- </mmp:mrow>
- <mmp:msub>
- <mmp:mi> m </mmp:mi>
- <mmp:mrow>
- <mmp:mn> 1 </mmp:mn>
- <mmp:mo> &InvisibleComma; </mmp:mo>
- <mmp:mn> 2 </mmp:mn>
- </mmp:mrow>
- </mmp:msub>
- </mmp:math>
-
- <mmp:math>
- <mmp:mfrac>
- <mmp:mo> &DifferentialD; </mmp:mo>
- <mmp:mrow>
- <mmp:mo> &DifferentialD; </mmp:mo>
- <mmp:mi> x </mmp:mi>
- </mmp:mrow>
- </mmp:mfrac>
- </mmp:math>
-
-
- <mmp:math>
- <mmp:mrow>
- <mmp:mi> x </mmp:mi>
- <mmp:munder>
- <mmp:mo> &RightArrow; </mmp:mo>
- <mmp:mtext> maps to </mmp:mtext>
- </mmp:munder>
- <mmp:mi> y </mmp:mi>
- </mmp:mrow>
- </mmp:math>
-
- <mmp:math>
- <mmp:mtext> Theorem 1: </mmp:mtext>
- <mmp:mtext> &ThinSpace; </mmp:mtext>
- <mmp:mtext> &ThickSpace;&ThickSpace; </mmp:mtext>
- <mmp:mtext> /* a comment */ </mmp:mtext>
- </mmp:math>
-
- <mmp:math>
- <mmp:mrow>
- <mmp:mo> there exists </mmp:mo>
- <mmp:mrow>
- <mmp:mrow>
- <mmp:mi> &delta; </mmp:mi>
- <mmp:mo> &gt; </mmp:mo>
- <mmp:mn> 0 </mmp:mn>
- </mmp:mrow>
- <mmp:mo> such that </mmp:mo>
- <mmp:mrow>
- <mmp:mrow>
- <mmp:mi> f </mmp:mi>
- <mmp:mo> &ApplyFunction; </mmp:mo>
- <mmp:mrow>
- <mmp:mo> ( </mmp:mo>
- <mmp:mi> x </mmp:mi>
- <mmp:mo> ) </mmp:mo>
- </mmp:mrow>
- </mmp:mrow>
- <mmp:mo> &lt; </mmp:mo>
- <mmp:mn> 1 </mmp:mn>
- </mmp:mrow>
- </mmp:mrow>
- </mmp:mrow>
- </mmp:math>
-
- <mmp:math>
- <mmp:msup>
- <mmp:mrow>
- <mmp:mi> x </mmp:mi>
- <mmp:malignmark edge="right"/>
- </mmp:mrow>
- <mmp:mn> 2 </mmp:mn>
- </mmp:msup>
- </mmp:math>
-
- <mmp:math>
- <mmp:mrow>
- <mmp:mi><mmp:mglyph fontfamily="my-braid-font" index="2" alt="23braid"/></mmp:mi>
- <mmp:mo>+</mmp:mo>
- <mmp:mi><mmp:mglyph fontfamily="my-braid-font" index="5" alt="132braid"/></mmp:mi>
- <mmp:mo>=</mmp:mo>
- <mmp:mi><mmp:mglyph fontfamily="my-braid-font" index="3" alt="13braid"/></mmp:mi>
- </mmp:mrow>
- </mmp:math>
-
- <mmp:math>
- <mmp:mrow>
- <mmp:mrow>
- <mmp:mn> 2 </mmp:mn>
- <mmp:mo> &InvisibleTimes; </mmp:mo>
- <mmp:mi> x </mmp:mi>
- </mmp:mrow>
- <mmp:mo> + </mmp:mo>
- <mmp:mi> y </mmp:mi>
- <mmp:mo> - </mmp:mo>
- <mmp:mi> z </mmp:mi>
- </mmp:mrow>
- </mmp:math>
-
- <mmp:math>
- <mmp:mrow>
- <mmp:mo> ( </mmp:mo>
- <mmp:mrow>
- <mmp:mi> x </mmp:mi>
- <mmp:mo> , </mmp:mo>
- <mmp:mi> y </mmp:mi>
- </mmp:mrow>
- <mmp:mo> ) </mmp:mo>
- </mmp:mrow>
- </mmp:math>
-
- <mmp:math>
- <mmp:mrow>
- <mmp:mo> ( </mmp:mo>
- <mmp:mfrac linethickness="0">
- <mmp:mi> a </mmp:mi>
- <mmp:mi> b </mmp:mi>
- </mmp:mfrac>
- <mmp:mo> ) </mmp:mo>
- </mmp:mrow>
- <mmp:mfrac linethickness="2">
- <mmp:mfrac>
- <mmp:mi> a </mmp:mi>
- <mmp:mi> b </mmp:mi>
- </mmp:mfrac>
- <mmp:mfrac>
- <mmp:mi> c </mmp:mi>
- <mmp:mi> d </mmp:mi>
- </mmp:mfrac>
- </mmp:mfrac>
- </mmp:math>
-
- <mmp:math>
- <mmp:mfrac>
- <mmp:mn> 1 </mmp:mn>
- <mmp:mrow>
- <mmp:msup>
- <mmp:mi> x </mmp:mi>
- <mmp:mn> 3 </mmp:mn>
- </mmp:msup>
- <mmp:mo> + </mmp:mo>
- <mmp:mfrac>
- <mmp:mi> x </mmp:mi>
- <mmp:mn> 3 </mmp:mn>
- </mmp:mfrac>
- </mmp:mrow>
- </mmp:mfrac>
- <mmp:mo> = </mmp:mo>
- <mmp:mfrac bevelled="true">
- <mmp:mn> 1 </mmp:mn>
- <mmp:mrow>
- <mmp:msup>
- <mmp:mi> x </mmp:mi>
- <mmp:mn> 3 </mmp:mn>
- </mmp:msup>
- <mmp:mo> + </mmp:mo>
- <mmp:mfrac>
- <mmp:mi> x </mmp:mi>
- <mmp:mn> 3 </mmp:mn>
- </mmp:mfrac>
- </mmp:mrow>
- </mmp:mfrac>
- </mmp:math>
-
- <mmp:math>
- <mmp:mfrac>
- <mmp:mrow>
- <mmp:mn> 1 </mmp:mn>
- <mmp:mo> + </mmp:mo>
- <mmp:msqrt>
- <mmp:mn> 5 </mmp:mn>
- </mmp:msqrt>
- </mmp:mrow>
- <mmp:mn> 2 </mmp:mn>
- </mmp:mfrac>
- </mmp:math>
-
- <mmp:math>
- <mmp:mrow>
- <mmp:mo maxsize="1"> ( </mmp:mo>
- <mmp:mfrac> <mmp:mi> a </mmp:mi> <mmp:mi> b </mmp:mi> </mmp:mfrac>
- <mmp:mo maxsize="1"> ) </mmp:mo>
- </mmp:mrow>
- </mmp:math>
-
- <mmp:math>
- <mmp:mstyle maxsize="1">
- <mmp:mrow>
- <mmp:mo> ( </mmp:mo>
- <mmp:mfrac> <mmp:mi> a </mmp:mi> <mmp:mi> b </mmp:mi> </mmp:mfrac>
- <mmp:mo> ) </mmp:mo>
- </mmp:mrow>
- </mmp:mstyle>
- </mmp:math>
-
- <mmp:math>
- <mmp:merror>
- <mmp:mtext> Unrecognized element: mfraction;
- arguments were: </mmp:mtext>
- <mmp:mrow> <mmp:mn> 1 </mmp:mn> <mmp:mo> + </mmp:mo> <mmp:msqrt> <mmp:mn> 5 </mmp:mn> </mmp:msqrt> </mmp:mrow>
- <mmp:mtext> and </mmp:mtext>
- <mmp:mn> 2 </mmp:mn>
- </mmp:merror>
- </mmp:math>
-
- <mmp:math>
- <mmp:mrow>
- <mmp:mpadded width="0"> <mmp:mi> C </mmp:mi> </mmp:mpadded>
- <mmp:mspace width="0.3em"/>
- <mmp:mtext> | </mmp:mtext>
- </mmp:mrow>
- </mmp:math>
-
- <mmp:math>
- <mmp:semantics>
- <mmp:mrow>
- <mmp:mpadded width="0"> <mmp:mi> C </mmp:mi> </mmp:mpadded>
- <mmp:mspace width="0.3em"/>
- <mmp:mtext> | </mmp:mtext>
- </mmp:mrow>
- <mmp:annotation-xml encoding="MathML-Presentation">
- <mmp:mi> &Copf; </mmp:mi>
- </mmp:annotation-xml>
- </mmp:semantics>
- </mmp:math>
-
- <mmp:math>
- <mmp:mfrac>
- <mmp:mrow>
- <mmp:mi> x </mmp:mi>
- <mmp:mo> + </mmp:mo>
- <mmp:mi> y </mmp:mi>
- <mmp:mo> + </mmp:mo>
- <mmp:mi> z </mmp:mi>
- </mmp:mrow>
- <mmp:mrow>
- <mmp:mi> x </mmp:mi>
- <mmp:mphantom>
- <mmp:mo form="infix"> + </mmp:mo>
- <mmp:mi> y </mmp:mi>
- </mmp:mphantom>
- <mmp:mo> + </mmp:mo>
- <mmp:mi> z </mmp:mi>
- </mmp:mrow>
- </mmp:mfrac>
- </mmp:math>
-
- <mmp:math>
- <mmp:mfrac>
- <mmp:mrow>
- <mmp:mi> x </mmp:mi>
- <mmp:mo> + </mmp:mo>
- <mmp:mi> y </mmp:mi>
- <mmp:mo> + </mmp:mo>
- <mmp:mi> z </mmp:mi>
- </mmp:mrow>
- <mmp:mrow>
- <mmp:mi> x </mmp:mi>
- <mmp:mphantom>
- <mmp:mo> + </mmp:mo>
- </mmp:mphantom>
- <mmp:mphantom>
- <mmp:mi> y </mmp:mi>
- </mmp:mphantom>
- <mmp:mo> + </mmp:mo>
- <mmp:mi> z </mmp:mi>
- </mmp:mrow>
- </mmp:mfrac>
- </mmp:math>
-
- <mmp:math>
- <mmp:mrow> <mmp:mo> ( </mmp:mo> <mmp:mi>x</mmp:mi> <mmp:mo> ) </mmp:mo> </mmp:mrow>
- </mmp:math>
-
- <mmp:math>
- <mmp:mrow>
- <mmp:mo> ( </mmp:mo>
- <mmp:mrow> <mmp:mi>x</mmp:mi> <mmp:mo>,</mmp:mo> <mmp:mi>y</mmp:mi> </mmp:mrow>
- <mmp:mo> ) </mmp:mo>
- </mmp:mrow>
- </mmp:math>
-
- <mmp:math>
- <mmp:mrow>
- <mmp:mi>x</mmp:mi> <mmp:mo>+</mmp:mo> <mmp:mi>y</mmp:mi> <mmp:mo>+</mmp:mo> <mmp:mi>z</mmp:mi>
- </mmp:mrow>
- </mmp:math>
-
- <mmp:math>
- <mmp:mrow>
- <mmp:mi> f </mmp:mi>
- <mmp:mo> &ApplyFunction; </mmp:mo>
- <mmp:mfenced>
- <mmp:mi> x </mmp:mi>
- <mmp:mi> y </mmp:mi>
- </mmp:mfenced>
- </mmp:mrow>
- </mmp:math>
-
-
- <mmp:math>
- <mmp:msub>
- <mmp:mi>a</mmp:mi>
- <mmp:mrow>
- <mmp:menclose notation='actuarial'>
- <mmp:mi>n</mmp:mi>
- </mmp:menclose>
- <mmp:mo>&it;</mmp:mo>
- <mmp:mi>i</mmp:mi>
- </mmp:mrow>
- </mmp:msub>
- </mmp:math>
-
- <mmp:math>
- <mmp:msup>
- <mmp:mrow>
- <mmp:mo> ( </mmp:mo>
- <mmp:mrow>
- <mmp:mi> x </mmp:mi>
- <mmp:mo> + </mmp:mo>
- <mmp:mi> y </mmp:mi>
- </mmp:mrow>
- <mmp:mo> ) </mmp:mo>
- </mmp:mrow>
- <mmp:mn> 2 </mmp:mn>
- </mmp:msup>
- </mmp:math>
-
-
-
- <mmp:math>
- <mmp:mrow>
- <mmp:mover accent="true">
- <mmp:mi> x </mmp:mi>
- <mmp:mo> &Hat; </mmp:mo>
- </mmp:mover>
- <mmp:mtext> versus </mmp:mtext>
- <mmp:mover accent="false">
- <mmp:mi> x </mmp:mi>
- <mmp:mo> &Hat; </mmp:mo>
- </mmp:mover>
- </mmp:mrow>
- </mmp:math>
-
- <mmp:math>
- <mmp:mrow>
- <mmp:mover accent="true">
- <mmp:mrow>
- <mmp:mi> x </mmp:mi>
- <mmp:mo> + </mmp:mo>
- <mmp:mi> y </mmp:mi>
- <mmp:mo> + </mmp:mo>
- <mmp:mi> z </mmp:mi>
- </mmp:mrow>
- <mmp:mo> &OverBar; </mmp:mo>
- </mmp:mover>
- <mmp:mtext> versus </mmp:mtext>
- <mmp:mover accent="false">
- <mmp:mrow>
- <mmp:mi> x </mmp:mi>
- <mmp:mo> + </mmp:mo>
- <mmp:mi> y </mmp:mi>
- <mmp:mo> + </mmp:mo>
- <mmp:mi> z </mmp:mi>
- </mmp:mrow>
- <mmp:mo> &OverBar; </mmp:mo>
- </mmp:mover>
- </mmp:mrow>
- </mmp:math>
-
- <mmp:math>
- <mmp:mrow>
- <mmp:mover>
- <mmp:munder>
- <mmp:mo> &int; </mmp:mo>
- <mmp:mn> 0 </mmp:mn>
- </mmp:munder>
- <mmp:mi> &infin; </mmp:mi>
- </mmp:mover>
- <mmp:mtext> versus </mmp:mtext>
- <mmp:munderover>
- <mmp:mo> &int; </mmp:mo>
- <mmp:mn> 0 </mmp:mn>
- <mmp:mi> &infin; </mmp:mi>
- </mmp:munderover>
- </mmp:mrow>
- </mmp:math>
-
- <mmp:math>
- <mmp:mrow>
- <mmp:mmultiscripts>
- <mmp:mi> F </mmp:mi>
- <mmp:mn> 1 </mmp:mn>
- <mmp:none/>
- <mmp:mprescripts/>
- <mmp:mn> 0 </mmp:mn>
- <mmp:none/>
- </mmp:mmultiscripts>
- <mmp:mo> &ApplyFunction; </mmp:mo>
- <mmp:mrow>
- <mmp:mo> ( </mmp:mo>
- <mmp:mrow>
- <mmp:mo> ; </mmp:mo>
- <mmp:mi> a </mmp:mi>
- <mmp:mo> ; </mmp:mo>
- <mmp:mi> z </mmp:mi>
- </mmp:mrow>
- <mmp:mo> ) </mmp:mo>
- </mmp:mrow>
- </mmp:mrow>
- </mmp:math>
-
- <mmp:math>
- <mmp:mrow>
- <mmp:mo> ( </mmp:mo>
- <mmp:mtable>
- <mmp:mtr>
- <mmp:mtd> <mmp:mn>1</mmp:mn> </mmp:mtd>
- <mmp:mtd> <mmp:mn>0</mmp:mn> </mmp:mtd>
- <mmp:mtd> <mmp:mn>0</mmp:mn> </mmp:mtd>
- </mmp:mtr>
- <mmp:mtr>
- <mmp:mtd> <mmp:mn>0</mmp:mn> </mmp:mtd>
- <mmp:mtd> <mmp:mn>1</mmp:mn> </mmp:mtd>
- <mmp:mtd> <mmp:mn>0</mmp:mn> </mmp:mtd>
- </mmp:mtr>
- <mmp:mtr>
- <mmp:mtd> <mmp:mn>0</mmp:mn> </mmp:mtd>
- <mmp:mtd> <mmp:mn>0</mmp:mn> </mmp:mtd>
- <mmp:mtd> <mmp:mn>1</mmp:mn> </mmp:mtd>
- </mmp:mtr>
- </mmp:mtable>
- <mmp:mo> ) </mmp:mo>
- </mmp:mrow>
- </mmp:math>
-
- <mmp:math>
- <mmp:mtable>
- <mmp:mlabeledtr id='e-is-m-c-square'>
- <mmp:mtd>
- <mmp:mtext> (2.1) </mmp:mtext>
- </mmp:mtd>
- <mmp:mtd>
- <mmp:mrow>
- <mmp:mi>E</mmp:mi>
- <mmp:mo>=</mmp:mo>
- <mmp:mrow>
- <mmp:mi>m</mmp:mi>
- <mmp:mo>&it;</mmp:mo>
- <mmp:msup>
- <mmp:mi>c</mmp:mi>
- <mmp:mn>2</mmp:mn>
- </mmp:msup>
- </mmp:mrow>
- </mmp:mrow>
- </mmp:mtd>
- </mmp:mlabeledtr>
- </mmp:mtable>
- </mmp:math>
-
- <mmp:math>
- <mmp:mtable groupalign="decimalpoint left left decimalpoint left left decimalpoint">
- <mmp:mtr>
- <mmp:mtd>
- <mmp:mrow>
- <mmp:mrow>
- <mmp:mrow>
- <mmp:maligngroup/>
- <mmp:mn> 8.44 </mmp:mn>
- <mmp:mo> &InvisibleTimes; </mmp:mo>
- <mmp:maligngroup/>
- <mmp:mi> x </mmp:mi>
- </mmp:mrow>
- <mmp:maligngroup/>
- <mmp:mo> + </mmp:mo>
- <mmp:mrow>
- <mmp:maligngroup/>
- <mmp:mn> 55 </mmp:mn>
- <mmp:mo> &InvisibleTimes; </mmp:mo>
- <mmp:maligngroup/>
- <mmp:mi> y </mmp:mi>
- </mmp:mrow>
- </mmp:mrow>
- <mmp:maligngroup/>
- <mmp:mo> = </mmp:mo>
- <mmp:maligngroup/>
- <mmp:mn> 0 </mmp:mn>
- </mmp:mrow>
- </mmp:mtd>
- <mmp:mtd>
- <mmp:mrow>
- <mmp:mrow>
- <mmp:mrow>
- <mmp:maligngroup/>
- <mmp:mn> 3.1 </mmp:mn>
- <mmp:mo> &InvisibleTimes; </mmp:mo>
- <mmp:maligngroup/>
- <mmp:mi> x </mmp:mi>
- </mmp:mrow>
- <mmp:maligngroup/>
- <mmp:mo> - </mmp:mo>
- <mmp:mrow>
- <mmp:maligngroup/>
- <mmp:mn> 0.7 </mmp:mn>
- <mmp:mo> &InvisibleTimes; </mmp:mo>
- <mmp:maligngroup/>
- <mmp:mi> y </mmp:mi>
- </mmp:mrow>
- </mmp:mrow>
- <mmp:maligngroup/>
- <mmp:mo> = </mmp:mo>
- <mmp:maligngroup/>
- <mmp:mrow>
- <mmp:mo> - </mmp:mo>
- <mmp:mn> 1.1 </mmp:mn>
- </mmp:mrow>
- </mmp:mrow>
- </mmp:mtd>
- </mmp:mtr>
- </mmp:mtable>
- </mmp:math>
-
-</root>
diff --git a/Master/texmf-dist/tex/generic/context/luatex-fonts-merged.lua b/Master/texmf-dist/tex/generic/context/luatex-fonts-merged.lua
index 3834afce5d3..da81735ff23 100644
--- a/Master/texmf-dist/tex/generic/context/luatex-fonts-merged.lua
+++ b/Master/texmf-dist/tex/generic/context/luatex-fonts-merged.lua
@@ -1,18 +1,21 @@
--- merged file : c:/data/develop/context/texmf/tex/generic/context/luatex-fonts-merged.lua
--- parent file : c:/data/develop/context/texmf/tex/generic/context/luatex-fonts.lua
--- merge date : 08/19/09 17:12:50
+-- merged file : luatex-fonts-merged.lua
+-- parent file : luatex-fonts.lua
+-- merge date : 05/24/10 13:05:12
do -- begin closure to overcome local limits and interference
if not modules then modules = { } end modules ['l-string'] = {
version = 1.001,
- comment = "companion to luat-lib.tex",
+ comment = "companion to luat-lib.mkiv",
author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
copyright = "PRAGMA ADE / ConTeXt Development Team",
license = "see context related readme files"
}
-local sub, gsub, find, match, gmatch, format, char, byte, rep = string.sub, string.gsub, string.find, string.match, string.gmatch, string.format, string.char, string.byte, string.rep
+local sub, gsub, find, match, gmatch, format, char, byte, rep, lower = string.sub, string.gsub, string.find, string.match, string.gmatch, string.format, string.char, string.byte, string.rep, string.lower
+local lpegmatch = lpeg.match
+
+-- some functions may disappear as they are not used anywhere
if not string.split then
@@ -52,8 +55,16 @@ function string:unquote()
return (gsub(self,"^([\"\'])(.*)%1$","%2"))
end
+--~ function string:unquote()
+--~ if find(self,"^[\'\"]") then
+--~ return sub(self,2,-2)
+--~ else
+--~ return self
+--~ end
+--~ end
+
function string:quote() -- we could use format("%q")
- return '"' .. self:unquote() .. '"'
+ return format("%q",self)
end
function string:count(pattern) -- variant 3
@@ -73,12 +84,23 @@ function string:limit(n,sentinel)
end
end
-function string:strip()
- return (gsub(self,"^%s*(.-)%s*$", "%1"))
+--~ function string:strip() -- the .- is quite efficient
+--~ -- return match(self,"^%s*(.-)%s*$") or ""
+--~ -- return match(self,'^%s*(.*%S)') or '' -- posted on lua list
+--~ return find(s,'^%s*$') and '' or match(s,'^%s*(.*%S)')
+--~ end
+
+do -- roberto's variant:
+ local space = lpeg.S(" \t\v\n")
+ local nospace = 1 - space
+ local stripper = space^0 * lpeg.C((space^0 * nospace^1)^0)
+ function string.strip(str)
+ return lpegmatch(stripper,str) or ""
+ end
end
function string:is_empty()
- return not find(find,"%S")
+ return not find(self,"%S")
end
function string:enhance(pattern,action)
@@ -112,14 +134,14 @@ if not string.characters then
local function nextchar(str, index)
index = index + 1
- return (index <= #str) and index or nil, str:sub(index,index)
+ return (index <= #str) and index or nil, sub(str,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, byte(str:sub(index,index))
+ return (index <= #str) and index or nil, byte(sub(str,index,index))
end
function string:bytes()
return nextbyte, self, 0
@@ -132,7 +154,7 @@ end
function string:rpadd(n,chr)
local m = n-#self
if m > 0 then
- return self .. self.rep(chr or " ",m)
+ return self .. rep(chr or " ",m)
else
return self
end
@@ -141,7 +163,7 @@ end
function string:lpadd(n,chr)
local m = n-#self
if m > 0 then
- return self.rep(chr or " ",m) .. self
+ return rep(chr or " ",m) .. self
else
return self
end
@@ -189,6 +211,17 @@ function string:pattesc()
return (gsub(self,".",patterns_escapes))
end
+local simple_escapes = {
+ ["-"] = "%-",
+ ["."] = "%.",
+ ["?"] = ".",
+ ["*"] = ".*",
+}
+
+function string:simpleesc()
+ return (gsub(self,".",simple_escapes))
+end
+
function string:tohash()
local t = { }
for s in gmatch(self,"([^, ]+)") do -- lpeg
@@ -200,10 +233,10 @@ end
local pattern = lpeg.Ct(lpeg.C(1)^0)
function string:totable()
- return pattern:match(self)
+ return lpegmatch(pattern,self)
end
---~ for _, str in ipairs {
+--~ local t = {
--~ "1234567123456712345671234567",
--~ "a\tb\tc",
--~ "aa\tbb\tcc",
@@ -211,7 +244,10 @@ end
--~ "aaaa\tbbbb\tcccc",
--~ "aaaaa\tbbbbb\tccccc",
--~ "aaaaaa\tbbbbbb\tcccccc",
---~ } do print(string.tabtospace(str)) end
+--~ }
+--~ for k,v do
+--~ print(string.tabtospace(t[k]))
+--~ end
function string.tabtospace(str,tab)
-- we don't handle embedded newlines
@@ -219,7 +255,7 @@ function string.tabtospace(str,tab)
local s = find(str,"\t")
if s then
if not tab then tab = 7 end -- only when found
- local d = tab-(s-1)%tab
+ local d = tab-(s-1) % tab
if d > 0 then
str = gsub(str,"\t",rep(" ",d),1)
else
@@ -238,64 +274,89 @@ function string:compactlong() -- strips newlines and leading spaces
return self
end
+function string:striplong() -- strips newlines and leading spaces
+ self = gsub(self,"^%s*","")
+ self = gsub(self,"[\n\r]+ *","\n")
+ return self
+end
+
+function string:topattern(lowercase,strict)
+ if lowercase then
+ self = lower(self)
+ end
+ self = gsub(self,".",simple_escapes)
+ if self == "" then
+ self = ".*"
+ elseif strict then
+ self = "^" .. self .. "$"
+ end
+ return self
+end
+
end -- closure
do -- begin closure to overcome local limits and interference
if not modules then modules = { } end modules ['l-lpeg'] = {
version = 1.001,
- comment = "companion to luat-lib.tex",
+ comment = "companion to luat-lib.mkiv",
author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
copyright = "PRAGMA ADE / ConTeXt Development Team",
license = "see context related readme files"
}
-local P, S, Ct, C, Cs, Cc = lpeg.P, lpeg.S, lpeg.Ct, lpeg.C, lpeg.Cs, lpeg.Cc
-
---~ 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 = { }
+local lpeg = require("lpeg")
+
+lpeg.patterns = lpeg.patterns or { } -- so that we can share
+local patterns = lpeg.patterns
+
+local P, R, S, Ct, C, Cs, Cc, V = lpeg.P, lpeg.R, lpeg.S, lpeg.Ct, lpeg.C, lpeg.Cs, lpeg.Cc, lpeg.V
+local match = lpeg.match
+
+local digit, sign = R('09'), S('+-')
+local cr, lf, crlf = P("\r"), P("\n"), P("\r\n")
+local utf8byte = R("\128\191")
+
+patterns.utf8byte = utf8byte
+patterns.utf8one = R("\000\127")
+patterns.utf8two = R("\194\223") * utf8byte
+patterns.utf8three = R("\224\239") * utf8byte * utf8byte
+patterns.utf8four = R("\240\244") * utf8byte * utf8byte * utf8byte
+
+patterns.digit = digit
+patterns.sign = sign
+patterns.cardinal = sign^0 * digit^1
+patterns.integer = sign^0 * digit^1
+patterns.float = sign^0 * digit^0 * P('.') * digit^1
+patterns.number = patterns.float + patterns.integer
+patterns.oct = P("0") * R("07")^1
+patterns.octal = patterns.oct
+patterns.HEX = P("0x") * R("09","AF")^1
+patterns.hex = P("0x") * R("09","af")^1
+patterns.hexadecimal = P("0x") * R("09","AF","af")^1
+patterns.lowercase = R("az")
+patterns.uppercase = R("AZ")
+patterns.letter = patterns.lowercase + patterns.uppercase
+patterns.space = S(" ")
+patterns.eol = S("\n\r")
+patterns.spacer = S(" \t\f\v") -- + string.char(0xc2, 0xa0) if we want utf (cf mail roberto)
+patterns.newline = crlf + cr + lf
+patterns.nonspace = 1 - patterns.space
+patterns.nonspacer = 1 - patterns.spacer
+patterns.whitespace = patterns.eol + patterns.spacer
+patterns.nonwhitespace = 1 - patterns.whitespace
+patterns.utf8 = patterns.utf8one + patterns.utf8two + patterns.utf8three + patterns.utf8four
+patterns.utfbom = P('\000\000\254\255') + P('\255\254\000\000') + P('\255\254') + P('\254\255') + P('\239\187\191')
function lpeg.anywhere(pattern) --slightly adapted from website
- return P { P(pattern) + 1 * lpeg.V(1) }
-end
-
-function lpeg.startswith(pattern) --slightly adapted
- return P(pattern)
+ return P { P(pattern) + 1 * V(1) } -- why so complex?
end
function lpeg.splitter(pattern, action)
return (((1-P(pattern))^1)/action+1)^0
end
--- variant:
-
---~ local parser = lpeg.Ct(lpeg.splitat(newline))
-
-local crlf = P("\r\n")
-local cr = P("\r")
-local lf = P("\n")
-local space = S(" \t\f\v") -- + string.char(0xc2, 0xa0) if we want utf (cf mail roberto)
-local newline = crlf + cr + lf
-local spacing = space^0 * newline
-
+local spacing = patterns.spacer^0 * patterns.newline -- sort of strip
local empty = spacing * Cc("")
local nonempty = Cs((1-spacing)^1) * spacing^-1
local content = (empty + nonempty)^1
@@ -303,15 +364,15 @@ local content = (empty + nonempty)^1
local capture = Ct(content^0)
function string:splitlines()
- return capture:match(self)
+ return match(capture,self)
end
-lpeg.linebyline = content -- better make a sublibrary
+patterns.textline = content
---~ local p = lpeg.splitat("->",false) print(p:match("oeps->what->more")) -- oeps what more
---~ local p = lpeg.splitat("->",true) print(p:match("oeps->what->more")) -- oeps what->more
---~ local p = lpeg.splitat("->",false) print(p:match("oeps")) -- oeps
---~ local p = lpeg.splitat("->",true) print(p:match("oeps")) -- oeps
+--~ local p = lpeg.splitat("->",false) print(match(p,"oeps->what->more")) -- oeps what more
+--~ local p = lpeg.splitat("->",true) print(match(p,"oeps->what->more")) -- oeps what->more
+--~ local p = lpeg.splitat("->",false) print(match(p,"oeps")) -- oeps
+--~ local p = lpeg.splitat("->",true) print(match(p,"oeps")) -- oeps
local splitters_s, splitters_m = { }, { }
@@ -321,7 +382,7 @@ local function splitat(separator,single)
separator = P(separator)
if single then
local other, any = C((1 - separator)^0), P(1)
- splitter = other * (separator * C(any^0) + "")
+ splitter = other * (separator * C(any^0) + "") -- ?
splitters_s[separator] = splitter
else
local other = C((1 - separator)^0)
@@ -336,22 +397,79 @@ lpeg.splitat = splitat
local cache = { }
+function lpeg.split(separator,str)
+ local c = cache[separator]
+ if not c then
+ c = Ct(splitat(separator))
+ cache[separator] = c
+ end
+ return match(c,str)
+end
+
function string:split(separator)
local c = cache[separator]
if not c then
c = Ct(splitat(separator))
cache[separator] = c
end
- return c:match(self)
+ return match(c,self)
+end
+
+lpeg.splitters = cache
+
+local cache = { }
+
+function lpeg.checkedsplit(separator,str)
+ local c = cache[separator]
+ if not c then
+ separator = P(separator)
+ local other = C((1 - separator)^0)
+ c = Ct(separator^0 * other * (separator^1 * other)^0)
+ cache[separator] = c
+ end
+ return match(c,str)
+end
+
+function string:checkedsplit(separator)
+ local c = cache[separator]
+ if not c then
+ separator = P(separator)
+ local other = C((1 - separator)^0)
+ c = Ct(separator^0 * other * (separator^1 * other)^0)
+ cache[separator] = c
+ end
+ return match(c,self)
end
+--~ function lpeg.append(list,pp)
+--~ local p = pp
+--~ for l=1,#list do
+--~ if p then
+--~ p = p + P(list[l])
+--~ else
+--~ p = P(list[l])
+--~ end
+--~ end
+--~ return p
+--~ end
+
+--~ from roberto's site:
+
+local f1 = string.byte
+
+local function f2(s) local c1, c2 = f1(s,1,2) return c1 * 64 + c2 - 12416 end
+local function f3(s) local c1, c2, c3 = f1(s,1,3) return (c1 * 64 + c2) * 64 + c3 - 925824 end
+local function f4(s) local c1, c2, c3, c4 = f1(s,1,4) return ((c1 * 64 + c2) * 64 + c3) * 64 + c4 - 63447168 end
+
+patterns.utf8byte = patterns.utf8one/f1 + patterns.utf8two/f2 + patterns.utf8three/f3 + patterns.utf8four/f4
+
end -- closure
do -- begin closure to overcome local limits and interference
if not modules then modules = { } end modules ['l-boolean'] = {
version = 1.001,
- comment = "companion to luat-lib.tex",
+ comment = "companion to luat-lib.mkiv",
author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
copyright = "PRAGMA ADE / ConTeXt Development Team",
license = "see context related readme files"
@@ -411,7 +529,7 @@ do -- begin closure to overcome local limits and interference
if not modules then modules = { } end modules ['l-math'] = {
version = 1.001,
- comment = "companion to luat-lib.tex",
+ comment = "companion to luat-lib.mkiv",
author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
copyright = "PRAGMA ADE / ConTeXt Development Team",
license = "see context related readme files"
@@ -457,7 +575,7 @@ do -- begin closure to overcome local limits and interference
if not modules then modules = { } end modules ['l-table'] = {
version = 1.001,
- comment = "companion to luat-lib.tex",
+ comment = "companion to luat-lib.mkiv",
author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
copyright = "PRAGMA ADE / ConTeXt Development Team",
license = "see context related readme files"
@@ -466,9 +584,58 @@ if not modules then modules = { } end modules ['l-table'] = {
table.join = table.concat
local concat, sort, insert, remove = table.concat, table.sort, table.insert, table.remove
-local format, find, gsub, lower, dump = string.format, string.find, string.gsub, string.lower, string.dump
+local format, find, gsub, lower, dump, match = string.format, string.find, string.gsub, string.lower, string.dump, string.match
local getmetatable, setmetatable = getmetatable, setmetatable
-local type, next, tostring, ipairs = type, next, tostring, ipairs
+local type, next, tostring, tonumber, ipairs = type, next, tostring, tonumber, ipairs
+
+-- Starting with version 5.2 Lua no longer provide ipairs, which makes
+-- sense. As we already used the for loop and # in most places the
+-- impact on ConTeXt was not that large; the remaining ipairs already
+-- have been replaced. In a similar fashio we also hardly used pairs.
+--
+-- Just in case, we provide the fallbacks as discussed in Programming
+-- in Lua (http://www.lua.org/pil/7.3.html):
+
+if not ipairs then
+
+ -- for k, v in ipairs(t) do ... end
+ -- for k=1,#t do local v = t[k] ... end
+
+ local function iterate(a,i)
+ i = i + 1
+ local v = a[i]
+ if v ~= nil then
+ return i, v --, nil
+ end
+ end
+
+ function ipairs(a)
+ return iterate, a, 0
+ end
+
+end
+
+if not pairs then
+
+ -- for k, v in pairs(t) do ... end
+ -- for k, v in next, t do ... end
+
+ function pairs(t)
+ return next, t -- , nil
+ end
+
+end
+
+-- Also, unpack has been moved to the table table, and for compatiility
+-- reasons we provide both now.
+
+if not table.unpack then
+ table.unpack = _G.unpack
+elseif not unpack then
+ _G.unpack = table.unpack
+end
+
+-- extra functions, some might go (when not used)
function table.strip(tab)
local lst = { }
@@ -483,6 +650,14 @@ function table.strip(tab)
return lst
end
+function table.keys(t)
+ local k = { }
+ for key, _ in next, t do
+ k[#k+1] = key
+ end
+ return k
+end
+
local function compare(a,b)
return (tostring(a) < tostring(b))
end
@@ -526,7 +701,7 @@ end
table.sortedkeys = sortedkeys
table.sortedhashkeys = sortedhashkeys
-function table.sortedpairs(t)
+function table.sortedhash(t)
local s = sortedhashkeys(t) -- maybe just sortedkeys
local n = 0
local function kv(s)
@@ -537,6 +712,8 @@ function table.sortedpairs(t)
return kv, s
end
+table.sortedpairs = table.sortedhash
+
function table.append(t, list)
for _,v in next, list do
insert(t,v)
@@ -645,7 +822,7 @@ end
table.fastcopy = fastcopy
table.copy = copy
--- rougly: copy-loop : unpack : sub == 0.9 : 0.4 : 0.45 (so in critical apps, use unpack)
+-- roughly: 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) }
@@ -659,18 +836,18 @@ end
-- slower than #t on indexed tables (#t only returns the size of the numerically indexed slice)
-function table.is_empty(t)
+function table.is_empty(t) -- obolete, use inline code instead
return not t or not next(t)
end
-function table.one_entry(t)
+function table.one_entry(t) -- obolete, use inline code instead
local n = next(t)
return n and not next(t,n)
end
-function table.starts_at(t)
- return ipairs(t,1)(t,0)
-end
+--~ function table.starts_at(t) -- obsolete, not nice anyway
+--~ return ipairs(t,1)(t,0)
+--~ end
function table.tohash(t,value)
local h = { }
@@ -748,6 +925,8 @@ end
--
-- local propername = lpeg.P(lpeg.R("AZ","az","__") * lpeg.R("09","AZ","az", "__")^0 * lpeg.P(-1) )
+-- problem: there no good number_to_string converter with the best resolution
+
local function do_serialize(root,name,depth,level,indexed)
if level > 0 then
depth = depth .. " "
@@ -770,8 +949,9 @@ local function do_serialize(root,name,depth,level,indexed)
handle(format("%s{",depth))
end
end
+ -- we could check for k (index) being number (cardinal)
if root and next(root) then
- local first, last = nil, 0 -- #root cannot be trusted here
+ local first, last = nil, 0 -- #root cannot be trusted here (will be ok in 5.2 when ipairs is gone)
if compact then
-- NOT: for k=1,#root do (we need to quit at nil)
for k,v in ipairs(root) do -- can we use next?
@@ -792,10 +972,10 @@ local function do_serialize(root,name,depth,level,indexed)
if hexify then
handle(format("%s 0x%04X,",depth,v))
else
- handle(format("%s %s,",depth,v))
+ handle(format("%s %s,",depth,v)) -- %.99g
end
elseif t == "string" then
- if reduce and (find(v,"^[%-%+]?[%d]-%.?[%d+]$") == 1) then
+ if reduce and tonumber(v) then
handle(format("%s %s,",depth,v))
else
handle(format("%s %q,",depth,v))
@@ -832,29 +1012,29 @@ local function do_serialize(root,name,depth,level,indexed)
--~ if hexify then
--~ handle(format("%s %s=0x%04X,",depth,key(k),v))
--~ else
- --~ handle(format("%s %s=%s,",depth,key(k),v))
+ --~ handle(format("%s %s=%s,",depth,key(k),v)) -- %.99g
--~ end
if type(k) == "number" then -- or find(k,"^%d+$") then
if hexify then
handle(format("%s [0x%04X]=0x%04X,",depth,k,v))
else
- handle(format("%s [%s]=%s,",depth,k,v))
+ handle(format("%s [%s]=%s,",depth,k,v)) -- %.99g
end
elseif noquotes and not reserved[k] and find(k,"^%a[%w%_]*$") then
if hexify then
handle(format("%s %s=0x%04X,",depth,k,v))
else
- handle(format("%s %s=%s,",depth,k,v))
+ handle(format("%s %s=%s,",depth,k,v)) -- %.99g
end
else
if hexify then
handle(format("%s [%q]=0x%04X,",depth,k,v))
else
- handle(format("%s [%q]=%s,",depth,k,v))
+ handle(format("%s [%q]=%s,",depth,k,v)) -- %.99g
end
end
elseif t == "string" then
- if reduce and (find(v,"^[%-%+]?[%d]-%.?[%d+]$") == 1) then
+ if reduce and tonumber(v) then
--~ handle(format("%s %s=%s,",depth,key(k),v))
if type(k) == "number" then -- or find(k,"^%d+$") then
if hexify then
@@ -1063,7 +1243,7 @@ function table.tofile(filename,root,name,reduce,noquotes,hexify)
end
end
-local function flatten(t,f,complete)
+local function flatten(t,f,complete) -- is this used? meybe a variant with next, ...
for i=1,#t do
local v = t[i]
if type(v) == "table" then
@@ -1092,6 +1272,24 @@ end
table.flatten_one_level = table.unnest
+-- a better one:
+
+local function flattened(t,f)
+ if not f then
+ f = { }
+ end
+ for k, v in next, t do
+ if type(v) == "table" then
+ flattened(v,f)
+ else
+ f[k] = v
+ end
+ end
+ return f
+end
+
+table.flattened = flattened
+
-- the next three may disappear
function table.remove_value(t,value) -- todo: n
@@ -1227,7 +1425,7 @@ function table.clone(t,p) -- t is optional or nil or table
elseif not t then
t = { }
end
- setmetatable(t, { __index = function(_,key) return p[key] end })
+ setmetatable(t, { __index = function(_,key) return p[key] end }) -- why not __index = p ?
return t
end
@@ -1255,21 +1453,36 @@ function table.reverse(t)
return tt
end
---~ function table.keys(t)
---~ local k = { }
---~ for k,_ in next, t do
---~ k[#k+1] = k
---~ end
---~ return k
---~ end
+function table.insert_before_value(t,value,extra)
+ for i=1,#t do
+ if t[i] == extra then
+ remove(t,i)
+ end
+ end
+ for i=1,#t do
+ if t[i] == value then
+ insert(t,i,extra)
+ return
+ end
+ end
+ insert(t,1,extra)
+end
+
+function table.insert_after_value(t,value,extra)
+ for i=1,#t do
+ if t[i] == extra then
+ remove(t,i)
+ end
+ end
+ for i=1,#t do
+ if t[i] == value then
+ insert(t,i+1,extra)
+ return
+ end
+ end
+ insert(t,#t+1,extra)
+end
---~ function table.keys_as_string(t)
---~ local k = { }
---~ for k,_ in next, t do
---~ k[#k+1] = k
---~ end
---~ return concat(k,"")
---~ end
end -- closure
@@ -1277,7 +1490,7 @@ do -- begin closure to overcome local limits and interference
if not modules then modules = { } end modules ['l-file'] = {
version = 1.001,
- comment = "companion to luat-lib.tex",
+ comment = "companion to luat-lib.mkiv",
author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
copyright = "PRAGMA ADE / ConTeXt Development Team",
license = "see context related readme files"
@@ -1288,14 +1501,17 @@ if not modules then modules = { } end modules ['l-file'] = {
file = file or { }
local concat = table.concat
-local find, gmatch, match, gsub = string.find, string.gmatch, string.match, string.gsub
+local find, gmatch, match, gsub, sub, char = string.find, string.gmatch, string.match, string.gsub, string.sub, string.char
+local lpegmatch = lpeg.match
function file.removesuffix(filename)
return (gsub(filename,"%.[%a%d]+$",""))
end
function file.addsuffix(filename, suffix)
- if not find(filename,"%.[%a%d]+$") then
+ if not suffix or suffix == "" then
+ return filename
+ elseif not find(filename,"%.[%a%d]+$") then
return filename .. "." .. suffix
else
return filename
@@ -1318,20 +1534,39 @@ function file.nameonly(name)
return (gsub(match(name,"^.+[/\\](.-)$") or name,"%..*$",""))
end
-function file.extname(name)
- return match(name,"^.+%.([^/\\]-)$") or ""
+function file.extname(name,default)
+ return match(name,"^.+%.([^/\\]-)$") or default or ""
end
file.suffix = file.extname
---~ 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 = concat({...},"/")
+--~ pth = gsub(pth,"\\","/")
+--~ local a, b = match(pth,"^(.*://)(.*)$")
+--~ if a and b then
+--~ return a .. gsub(b,"//+","/")
+--~ end
+--~ a, b = match(pth,"^(//)(.*)$")
+--~ if a and b then
+--~ return a .. gsub(b,"//+","/")
+--~ end
+--~ return (gsub(pth,"//+","/"))
+--~ end
+
+local trick_1 = char(1)
+local trick_2 = "^" .. trick_1 .. "/+"
function file.join(...)
- local pth = concat({...},"/")
+ local lst = { ... }
+ local a, b = lst[1], lst[2]
+ if a == "" then
+ lst[1] = trick_1
+ elseif b and find(a,"^/+$") and find(b,"^/") then
+ lst[1] = ""
+ lst[2] = gsub(b,"^/+","")
+ end
+ local pth = concat(lst,"/")
pth = gsub(pth,"\\","/")
local a, b = match(pth,"^(.*://)(.*)$")
if a and b then
@@ -1341,17 +1576,28 @@ function file.join(...)
if a and b then
return a .. gsub(b,"//+","/")
end
+ pth = gsub(pth,trick_2,"")
return (gsub(pth,"//+","/"))
end
+--~ print(file.join("//","/y"))
+--~ print(file.join("/","/y"))
+--~ print(file.join("","/y"))
+--~ print(file.join("/x/","/y"))
+--~ 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.iswritable(name)
local a = lfs.attributes(name) or lfs.attributes(file.dirname(name,"."))
- return a and a.permissions:sub(2,2) == "w"
+ return a and sub(a.permissions,2,2) == "w"
end
function file.isreadable(name)
local a = lfs.attributes(name)
- return a and a.permissions:sub(1,1) == "r"
+ return a and sub(a.permissions,1,1) == "r"
end
file.is_readable = file.isreadable
@@ -1359,36 +1605,50 @@ file.is_writable = file.iswritable
-- todo: lpeg
-function file.split_path(str)
- local t = { }
- str = gsub(str,"\\", "/")
- str = gsub(str,"(%a):([;/])", "%1\001%2")
- for name in gmatch(str,"([^;:]+)") do
- if name ~= "" then
- t[#t+1] = gsub(name,"\001",":")
- end
- end
- return t
+--~ function file.split_path(str)
+--~ local t = { }
+--~ str = gsub(str,"\\", "/")
+--~ str = gsub(str,"(%a):([;/])", "%1\001%2")
+--~ for name in gmatch(str,"([^;:]+)") do
+--~ if name ~= "" then
+--~ t[#t+1] = gsub(name,"\001",":")
+--~ end
+--~ end
+--~ return t
+--~ end
+
+local checkedsplit = string.checkedsplit
+
+function file.split_path(str,separator)
+ str = gsub(str,"\\","/")
+ return checkedsplit(str,separator or io.pathseparator)
end
function file.join_path(tab)
return concat(tab,io.pathseparator) -- can have trailing //
end
+-- we can hash them weakly
+
function file.collapse_path(str)
- str = gsub(str,"/%./","/")
- local n, m = 1, 1
- while n > 0 or m > 0 do
- str, n = gsub(str,"[^/%.]+/%.%.$","")
- str, m = gsub(str,"[^/%.]+/%.%./","")
- end
- str = gsub(str,"([^/])/$","%1")
- str = gsub(str,"^%./","")
- str = gsub(str,"/%.$","")
+ str = gsub(str,"\\","/")
+ if find(str,"/") then
+ str = gsub(str,"^%./",(gsub(lfs.currentdir(),"\\","/")) .. "/") -- ./xx in qualified
+ str = gsub(str,"/%./","/")
+ local n, m = 1, 1
+ while n > 0 or m > 0 do
+ str, n = gsub(str,"[^/%.]+/%.%.$","")
+ str, m = gsub(str,"[^/%.]+/%.%./","")
+ end
+ str = gsub(str,"([^/])/$","%1")
+ -- str = gsub(str,"^%./","") -- ./xx in qualified
+ str = gsub(str,"/%.$","")
+ end
if str == "" then str = "." end
return str
end
+--~ print(file.collapse_path("/a"))
--~ print(file.collapse_path("a/./b/.."))
--~ print(file.collapse_path("a/aa/../b/bb"))
--~ print(file.collapse_path("a/../.."))
@@ -1418,27 +1678,27 @@ end
--~ local pattern = (noslashes^0 * slashes)^0 * (noperiod^1 * period)^1 * lpeg.C(noperiod^1) * -1
--~ function file.extname(name)
---~ return pattern:match(name) or ""
+--~ return lpegmatch(pattern,name) or ""
--~ end
--~ local pattern = lpeg.Cs(((period * noperiod^1 * -1)/"" + 1)^1)
--~ function file.removesuffix(name)
---~ return pattern:match(name)
+--~ return lpegmatch(pattern,name)
--~ end
--~ local pattern = (noslashes^0 * slashes)^1 * lpeg.C(noslashes^1) * -1
--~ function file.basename(name)
---~ return pattern:match(name) or name
+--~ return lpegmatch(pattern,name) or name
--~ end
--~ local pattern = (noslashes^0 * slashes)^1 * lpeg.Cp() * noslashes^1 * -1
--~ function file.dirname(name)
---~ local p = pattern:match(name)
+--~ local p = lpegmatch(pattern,name)
--~ if p then
---~ return name:sub(1,p-2)
+--~ return sub(name,1,p-2)
--~ else
--~ return ""
--~ end
@@ -1447,7 +1707,7 @@ end
--~ local pattern = (noslashes^0 * slashes)^0 * (noperiod^1 * period)^1 * lpeg.Cp() * noperiod^1 * -1
--~ function file.addsuffix(name, suffix)
---~ local p = pattern:match(name)
+--~ local p = lpegmatch(pattern,name)
--~ if p then
--~ return name
--~ else
@@ -1458,9 +1718,9 @@ end
--~ local pattern = (noslashes^0 * slashes)^0 * (noperiod^1 * period)^1 * lpeg.Cp() * noperiod^1 * -1
--~ function file.replacesuffix(name,suffix)
---~ local p = pattern:match(name)
+--~ local p = lpegmatch(pattern,name)
--~ if p then
---~ return name:sub(1,p-2) .. "." .. suffix
+--~ return sub(name,1,p-2) .. "." .. suffix
--~ else
--~ return name .. "." .. suffix
--~ end
@@ -1469,11 +1729,11 @@ end
--~ local pattern = (noslashes^0 * slashes)^0 * lpeg.Cp() * ((noperiod^1 * period)^1 * lpeg.Cp() + lpeg.P(true)) * noperiod^1 * -1
--~ function file.nameonly(name)
---~ local a, b = pattern:match(name)
+--~ local a, b = lpegmatch(pattern,name)
--~ if b then
---~ return name:sub(a,b-2)
+--~ return sub(name,a,b-2)
--~ elseif a then
---~ return name:sub(a)
+--~ return sub(name,a)
--~ else
--~ return name
--~ end
@@ -1507,11 +1767,11 @@ local rootbased = lpeg.P("/") + letter*lpeg.P(":")
-- ./name ../name /name c: :// name/name
function file.is_qualified_path(filename)
- return qualified:match(filename)
+ return lpegmatch(qualified,filename) ~= nil
end
function file.is_rootbased_path(filename)
- return rootbased:match(filename)
+ return lpegmatch(rootbased,filename) ~= nil
end
local slash = lpeg.S("\\/")
@@ -1524,29 +1784,38 @@ local base = lpeg.C((1-suffix)^0)
local pattern = (drive + lpeg.Cc("")) * (path + lpeg.Cc("")) * (base + lpeg.Cc("")) * (suffix + lpeg.Cc(""))
function file.splitname(str) -- returns drive, path, base, suffix
- return pattern:match(str)
+ return lpegmatch(pattern,str)
end
--- function test(t) for k, v in pairs(t) do print(v, "=>", file.splitname(v)) end end
+-- function test(t) for k, v in next, t do print(v, "=>", file.splitname(v)) end end
--
-- test { "c:", "c:/aa", "c:/aa/bb", "c:/aa/bb/cc", "c:/aa/bb/cc.dd", "c:/aa/bb/cc.dd.ee" }
-- test { "c:", "c:aa", "c:aa/bb", "c:aa/bb/cc", "c:aa/bb/cc.dd", "c:aa/bb/cc.dd.ee" }
-- test { "/aa", "/aa/bb", "/aa/bb/cc", "/aa/bb/cc.dd", "/aa/bb/cc.dd.ee" }
-- test { "aa", "aa/bb", "aa/bb/cc", "aa/bb/cc.dd", "aa/bb/cc.dd.ee" }
+--~ -- todo:
+--~
+--~ if os.type == "windows" then
+--~ local currentdir = lfs.currentdir
+--~ function lfs.currentdir()
+--~ return (gsub(currentdir(),"\\","/"))
+--~ end
+--~ end
+
end -- closure
do -- begin closure to overcome local limits and interference
if not modules then modules = { } end modules ['l-io'] = {
version = 1.001,
- comment = "companion to luat-lib.tex",
+ comment = "companion to luat-lib.mkiv",
author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
copyright = "PRAGMA ADE / ConTeXt Development Team",
license = "see context related readme files"
}
-local byte = string.byte
+local byte, find, gsub = string.byte, string.find, string.gsub
if string.find(os.getenv("PATH"),";") then
io.fileseparator, io.pathseparator = "\\", ";"
@@ -1575,7 +1844,7 @@ function io.savedata(filename,data,joiner)
elseif type(data) == "function" then
data(f)
else
- f:write(data)
+ f:write(data or "")
end
f:close()
return true
@@ -1704,20 +1973,21 @@ function io.ask(question,default,options)
end
io.write(string.format(" "))
local answer = io.read()
- answer = answer:gsub("^%s*(.*)%s*$","%1")
+ answer = gsub(answer,"^%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
+ for k=1,#options do
+ if options[k] == answer then
return answer
end
end
local pattern = "^" .. answer
- for _,v in pairs(options) do
- if v:find(pattern) then
+ for k=1,#options do
+ local v = options[k]
+ if find(v,pattern) then
return v
end
end
@@ -1744,11 +2014,21 @@ statistics = {
starttiming = dummyfunction,
stoptiming = dummyfunction,
}
+directives = {
+ register = dummyfunction,
+ enable = dummyfunction,
+ disable = dummyfunction,
+}
trackers = {
register = dummyfunction,
enable = dummyfunction,
disable = dummyfunction,
}
+experiments = {
+ register = dummyfunction,
+ enable = dummyfunction,
+ disable = dummyfunction,
+}
storage = {
register = dummyfunction,
shared = { },
@@ -1763,6 +2043,9 @@ tasks = {
appendaction = dummyfunction,
prependaction = dummyfunction,
}
+callbacks = {
+ register = function(n,f) return callback.register(n,f) end,
+}
-- we need to cheat a bit here
@@ -1775,13 +2058,14 @@ local remapper = {
ttf = "truetype fonts",
ttc = "truetype fonts",
dfont = "truetype dictionary",
- cid = "other text files", -- will become "cid files"
+ cid = "cid maps",
+ fea = "font feature files",
}
function resolvers.find_file(name,kind)
name = string.gsub(name,"\\","\/")
kind = string.lower(kind)
- return kpse.find_file(name,(kind and kind ~= "" and (remapper[kind] or kind)) or "tex")
+ return kpse.find_file(name,(kind and kind ~= "" and (remapper[kind] or kind)) or file.extname(name,"tex"))
end
function resolvers.findbinfile(name,kind)
@@ -1791,13 +2075,64 @@ function resolvers.findbinfile(name,kind)
return resolvers.find_file(name,(kind and remapper[kind]) or kind)
end
+-- Caches ... I will make a real stupid version some day when I'm in the
+-- mood. After all, the generic code does not need the more advanced
+-- ConTeXt features. Cached data is not shared between ConTeXt and other
+-- usage as I don't want any dependency at all. Also, ConTeXt might have
+-- different needs and tricks added.
+
+caches = { }
+
+--~ containers.usecache = true
+
+function caches.setpath(category,subcategory)
+ local root = kpse.var_value("TEXMFCACHE") or ""
+ if root == "" then
+ root = kpse.var_value("VARTEXMF") or ""
+ end
+ if root ~= "" then
+ root = file.join(root,category)
+ lfs.mkdir(root)
+ root = file.join(root,subcategory)
+ lfs.mkdir(root)
+ return lfs.isdir(root) and root
+ end
+end
+
+local function makefullname(path,name)
+ if path and path ~= "" then
+ name = "temp-" and name -- clash prevention
+ return file.addsuffix(file.join(path,name),"lua")
+ end
+end
+
+function caches.iswritable(path,name)
+ local fullname = makefullname(path,name)
+ return fullname and file.iswritable(fullname)
+end
+
+function caches.loaddata(path,name)
+ local fullname = makefullname(path,name)
+ if fullname then
+ local data = loadfile(fullname)
+ return data and data()
+ end
+end
+
+function caches.savedata(path,name,data)
+ local fullname = makefullname(path,name)
+ if fullname then
+ table.tofile(fullname,data,'return',false,true,false)
+ end
+end
+
end -- closure
do -- begin closure to overcome local limits and interference
if not modules then modules = { } end modules ['data-con'] = {
version = 1.001,
- comment = "companion to luat-lib.tex",
+ comment = "companion to luat-lib.mkiv",
author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
copyright = "PRAGMA ADE / ConTeXt Development Team",
license = "see context related readme files"
@@ -1808,8 +2143,6 @@ local format, lower, gsub = string.format, string.lower, string.gsub
local trace_cache = false trackers.register("resolvers.cache", function(v) trace_cache = v end)
local trace_containers = false trackers.register("resolvers.containers", function(v) trace_containers = v end)
local trace_storage = false trackers.register("resolvers.storage", function(v) trace_storage = v end)
-local trace_verbose = false trackers.register("resolvers.verbose", function(v) trace_verbose = v end)
-local trace_locating = false trackers.register("resolvers.locating", function(v) trace_locating = v trackers.enable("resolvers.verbose") end)
--[[ldx--
<p>Once we found ourselves defining similar cache constructs
@@ -1873,7 +2206,7 @@ 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
+ return storage and storage.cache_version == container.version
else
return false
end
@@ -1924,7 +2257,7 @@ do -- begin closure to overcome local limits and interference
if not modules then modules = { } end modules ['node-ini'] = {
version = 1.001,
- comment = "companion to node-ini.tex",
+ comment = "companion to node-ini.mkiv",
author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
copyright = "PRAGMA ADE / ConTeXt Development Team",
license = "see context related readme files"
@@ -2032,10 +2365,12 @@ local penalty = node.id('penalty')
local kern = node.id('kern')
local whatsit = node.id('whatsit')
-local traverse_id = node.traverse_id
-local traverse = node.traverse
-local free_node = node.free
-local remove_node = node.remove
+local traverse_id = node.traverse_id
+local traverse = node.traverse
+local free_node = node.free
+local remove_node = node.remove
+local insert_node_before = node.insert_before
+local insert_node_after = node.insert_after
function nodes.remove(head, current, free_too)
local t = current
@@ -2055,8 +2390,8 @@ function nodes.delete(head,current)
return nodes.remove(head,current,true)
end
-nodes.before = node.insert_before
-nodes.after = node.insert_after
+nodes.before = insert_node_before
+nodes.after = insert_node_after
-- we need to test this, as it might be fixed now
@@ -2096,21 +2431,31 @@ function nodes.after(h,c,n)
return n, n
end
-function nodes.replace(head,current,new)
- if current and next then
- local p, n = current.prev, current.next
- new.prev, new.next = p, n
- if p then
- p.next = new
- else
+-- local h, c = nodes.replace(head,current,new)
+-- local c = nodes.replace(false,current,new)
+-- local c = nodes.replace(current,new)
+
+function nodes.replace(head,current,new) -- no head returned if false
+ if not new then
+ head, current, new = false, head, current
+ end
+ local prev, next = current.prev, current.next
+ if next then
+ new.next, next.prev = next, new
+ end
+ if prev then
+ new.prev, prev.next = prev, new
+ end
+ if head then
+ if head == current then
head = new
end
- if n then
- n.prev = new
- end
free_node(current)
+ return head, new
+ else
+ free_node(current)
+ return new
end
- return head, current
end
-- will move
@@ -2136,7 +2481,7 @@ end
nodes.count = count
--- new
+-- new, will move
function attributes.ofnode(n)
local a = n.attr
@@ -2161,14 +2506,17 @@ do -- begin closure to overcome local limits and interference
if not modules then modules = { } end modules ['node-res'] = {
version = 1.001,
- comment = "companion to node-ini.tex",
+ comment = "companion to node-ini.mkiv",
author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
copyright = "PRAGMA ADE / ConTeXt Development Team",
license = "see context related readme files"
}
local gmatch, format = string.gmatch, string.format
-local copy_node, free_node, free_list, new_node = node.copy, node.free, node.flush_list, node.new
+local copy_node, free_node, free_list, new_node, node_type, node_id = node.copy, node.free, node.flush_list, node.new, node.type, node.id
+local tonumber, round = tonumber, math.round
+
+local glyph_node = node_id("glyph")
--[[ldx--
<p>The next function is not that much needed but in <l n='context'/> we use
@@ -2177,18 +2525,30 @@ for debugging <l n='luatex'/> node management.</p>
nodes = nodes or { }
+nodes.whatsits = { } -- table.swapped(node.whatsits())
+
local reserved = { }
+local whatsits = nodes.whatsits
+
+for k, v in next, node.whatsits() do
+ whatsits[k], whatsits[v] = v, k -- two way
+end
-function nodes.register(n)
+local function register_node(n)
reserved[#reserved+1] = n
return n
end
+nodes.register = register_node
+
function nodes.cleanup_reserved(nofboxes) -- todo
nodes.tracers.steppers.reset() -- todo: make a registration subsystem
local nr, nl = #reserved, 0
for i=1,nr do
- free_node(reserved[i])
+ local ri = reserved[i]
+ -- if not (ri.id == glue_spec and not ri.is_writable) then
+ free_node(reserved[i])
+ -- end
end
if nofboxes then
local tb = tex.box
@@ -2212,15 +2572,37 @@ function nodes.usage()
return t
end
-local disc = nodes.register(new_node("disc"))
-local kern = nodes.register(new_node("kern",1))
-local penalty = nodes.register(new_node("penalty"))
-local glue = nodes.register(new_node("glue"))
-local glue_spec = nodes.register(new_node("glue_spec"))
-local glyph = nodes.register(new_node("glyph",0))
-local textdir = nodes.register(new_node("whatsit",7))
-local rule = nodes.register(new_node("rule"))
-local latelua = nodes.register(new_node("whatsit",35))
+local disc = register_node(new_node("disc"))
+local kern = register_node(new_node("kern",1))
+local penalty = register_node(new_node("penalty"))
+local glue = register_node(new_node("glue")) -- glue.spec = nil
+local glue_spec = register_node(new_node("glue_spec"))
+local glyph = register_node(new_node("glyph",0))
+local textdir = register_node(new_node("whatsit",whatsits.dir)) -- 7 (6 is local par node)
+local rule = register_node(new_node("rule"))
+local latelua = register_node(new_node("whatsit",whatsits.late_lua)) -- 35
+local user_n = register_node(new_node("whatsit",whatsits.user_defined)) user_n.type = 100 -- 44
+local user_l = register_node(new_node("whatsit",whatsits.user_defined)) user_l.type = 110 -- 44
+local user_s = register_node(new_node("whatsit",whatsits.user_defined)) user_s.type = 115 -- 44
+local user_t = register_node(new_node("whatsit",whatsits.user_defined)) user_t.type = 116 -- 44
+local left_margin_kern = register_node(new_node("margin_kern",0))
+local right_margin_kern = register_node(new_node("margin_kern",1))
+local lineskip = register_node(new_node("glue",1))
+local baselineskip = register_node(new_node("glue",2))
+local leftskip = register_node(new_node("glue",8))
+local rightskip = register_node(new_node("glue",9))
+local temp = register_node(new_node("temp",0))
+
+function nodes.zeroglue(n)
+ local s = n.spec
+ return not writable or (
+ s.width == 0
+ and s.stretch == 0
+ and s.shrink == 0
+ and s.stretch_order == 0
+ and s.shrink_order == 0
+ )
+end
function nodes.glyph(fnt,chr)
local n = copy_node(glyph)
@@ -2228,48 +2610,195 @@ function nodes.glyph(fnt,chr)
if chr then n.char = chr end
return n
end
+
function nodes.penalty(p)
local n = copy_node(penalty)
n.penalty = p
return n
end
+
function nodes.kern(k)
local n = copy_node(kern)
n.kern = k
return n
end
-function nodes.glue(width,stretch,shrink)
- local n, s = copy_node(glue), copy_node(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_node(glue_spec)
s.width, s.stretch, s.shrink = width, stretch, shrink
return s
end
+
+local function someskip(skip,width,stretch,shrink)
+ local n = copy_node(skip)
+ if not width then
+ -- no spec
+ elseif tonumber(width) then
+ local s = copy_node(glue_spec)
+ s.width, s.stretch, s.shrink = width, stretch, shrink
+ n.spec = s
+ else
+ -- shared
+ n.spec = copy_node(width)
+ end
+ return n
+end
+
+function nodes.glue(width,stretch,shrink)
+ return someskip(glue,width,stretch,shrink)
+end
+function nodes.leftskip(width,stretch,shrink)
+ return someskip(leftskip,width,stretch,shrink)
+end
+function nodes.rightskip(width,stretch,shrink)
+ return someskip(rightskip,width,stretch,shrink)
+end
+function nodes.lineskip(width,stretch,shrink)
+ return someskip(lineskip,width,stretch,shrink)
+end
+function nodes.baselineskip(width,stretch,shrink)
+ return someskip(baselineskip,width,stretch,shrink)
+end
+
function nodes.disc()
return copy_node(disc)
end
+
function nodes.textdir(dir)
local t = copy_node(textdir)
t.dir = dir
return t
end
-function nodes.rule(w,h,d)
+
+function nodes.rule(width,height,depth,dir)
local n = copy_node(rule)
- if w then n.width = w end
- if h then n.height = h end
- if d then n.depth = d end
+ if width then n.width = width end
+ if height then n.height = height end
+ if depth then n.depth = depth end
+ if dir then n.dir = dir end
return n
end
+
function nodes.latelua(code)
local n = copy_node(latelua)
n.data = code
return n
end
+function nodes.leftmarginkern(glyph,width)
+ local n = copy_node(left_margin_kern)
+ if not glyph then
+ logs.fatal("nodes","invalid pointer to left margin glyph node")
+ elseif glyph.id ~= glyph_node then
+ logs.fatal("nodes","invalid node type %s for left margin glyph node",node_type(glyph))
+ else
+ n.glyph = glyph
+ end
+ if width then
+ n.width = width
+ end
+ return n
+end
+
+function nodes.rightmarginkern(glyph,width)
+ local n = copy_node(right_margin_kern)
+ if not glyph then
+ logs.fatal("nodes","invalid pointer to right margin glyph node")
+ elseif glyph.id ~= glyph_node then
+ logs.fatal("nodes","invalid node type %s for right margin glyph node",node_type(p))
+ else
+ n.glyph = glyph
+ end
+ if width then
+ n.width = width
+ end
+ return n
+end
+
+function nodes.temp()
+ return copy_node(temp)
+end
+--[[
+<p>At some point we ran into a problem that the glue specification
+of the zeropoint dimension was overwritten when adapting a glue spec
+node. This is a side effect of glue specs being shared. After a
+couple of hours tracing and debugging Taco and I came to the
+conclusion that it made no sense to complicate the spec allocator
+and settled on a writable flag. This all is a side effect of the
+fact that some glues use reserved memory slots (with the zeropoint
+glue being a noticeable one). So, next we wrap this into a function
+and hide it for the user. And yes, LuaTeX now gives a warning as
+well.</p>
+]]--
+
+if tex.luatexversion > 51 then
+
+ function nodes.writable_spec(n)
+ local spec = n.spec
+ if not spec then
+ spec = copy_node(glue_spec)
+ n.spec = spec
+ elseif not spec.writable then
+ spec = copy_node(spec)
+ n.spec = spec
+ end
+ return spec
+ end
+
+else
+
+ function nodes.writable_spec(n)
+ local spec = n.spec
+ if not spec then
+ spec = copy_node(glue_spec)
+ else
+ spec = copy_node(spec)
+ end
+ n.spec = spec
+ return spec
+ end
+
+end
+
+local cache = { }
+
+function nodes.usernumber(num)
+ local n = cache[num]
+ if n then
+ return copy_node(n)
+ else
+ local n = copy_node(user_n)
+ if num then n.value = num end
+ return n
+ end
+end
+
+function nodes.userlist(list)
+ local n = copy_node(user_l)
+ if list then n.value = list end
+ return n
+end
+
+local cache = { } -- we could use the same cache
+
+function nodes.userstring(str)
+ local n = cache[str]
+ if n then
+ return copy_node(n)
+ else
+ local n = copy_node(user_s)
+ n.type = 115
+ if str then n.value = str end
+ return n
+ end
+end
+
+function nodes.usertokens(tokens)
+ local n = copy_node(user_t)
+ if tokens then n.value = tokens end
+ return n
+end
+
statistics.register("cleaned up reserved nodes", function()
return format("%s nodes, %s lists of %s", nodes.cleanup_reserved(tex.count["lastallocatedbox"]))
end) -- \topofboxstack
@@ -2284,7 +2813,7 @@ do -- begin closure to overcome local limits and interference
if not modules then modules = { } end modules ['node-inj'] = {
version = 1.001,
- comment = "companion to node-ini.tex",
+ comment = "companion to node-ini.mkiv",
author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
copyright = "PRAGMA ADE / ConTeXt Development Team",
license = "see context related readme files"
@@ -2294,7 +2823,8 @@ if not modules then modules = { } end modules ['node-inj'] = {
-- This is very experimental (this will change when we have luatex > .50 and
-- a few pending thingies are available. Also, Idris needs to make a few more
--- test fonts.
+-- test fonts. Btw, future versions of luatex will have extended glyph properties
+-- that can be of help.
local next = next
@@ -2334,6 +2864,8 @@ local kerns = { }
-- explicitly i will provide an alternative; also, we can share
-- tables
+-- for the moment we pass the r2l key ... volt/arabtype tests
+
function nodes.set_cursive(start,nxt,factor,rlmode,exit,entry,tfmstart,tfmnext)
local dx, dy = factor*(exit[1]-entry[1]), factor*(exit[2]-entry[2])
local ws, wn = tfmstart.width, tfmnext.width
@@ -2344,18 +2876,19 @@ function nodes.set_cursive(start,nxt,factor,rlmode,exit,entry,tfmstart,tfmnext)
return dx, dy, bound
end
-function nodes.set_pair(current,factor,rlmode,spec,tfmchr)
+function nodes.set_pair(current,factor,rlmode,r2lflag,spec,tfmchr)
local x, y, w, h = factor*spec[1], factor*spec[2], factor*spec[3], factor*spec[4]
-- dy = y - h
if x ~= 0 or w ~= 0 or y ~= 0 or h ~= 0 then
local bound = has_attribute(current,kernpair)
if bound then
local kb = kerns[bound]
- kb[2], kb[3], kb[4], kb[5] = kb[2] + x, kb[3] + y, kb[4] + w, kb[5] + h
+ -- inefficient but singles have less, but weird anyway, needs checking
+ kb[2], kb[3], kb[4], kb[5] = (kb[2] or 0) + x, (kb[3] or 0) + y, (kb[4] or 0)+ w, (kb[5] or 0) + h
else
bound = #kerns + 1
set_attribute(current,kernpair,bound)
- kerns[bound] = { rlmode, x, y, w, h }
+ kerns[bound] = { rlmode, x, y, w, h, r2lflag, tfmchr.width }
end
return x, y, w, h, bound
end
@@ -2455,6 +2988,7 @@ end
function nodes.inject_kerns(head,where,keep)
local has_marks, has_cursives, has_kerns = next(marks), next(cursives), next(kerns)
if has_marks or has_cursives then
+--~ if has_marks or has_cursives or has_kerns then
if trace_injections then
nodes.trace_injection(head)
end
@@ -2474,7 +3008,7 @@ function nodes.inject_kerns(head,where,keep)
if k then
local kk = kerns[k]
if kk then
- local x, y, w, h = kk[2], kk[3], kk[4], kk[5]
+ local x, y, w, h = kk[2] or 0, kk[3] or 0, kk[4] or 0, kk[5] or 0
local dy = y - h
if dy ~= 0 then
ky[n] = dy
@@ -2589,14 +3123,15 @@ function nodes.inject_kerns(head,where,keep)
local d = mrks[index]
if d then
-- local rlmode = d[3] -- not used
- -- if rlmode and rlmode < 0 then
- -- n.xoffset = p.xoffset + d[1]
+ -- if rlmode and rlmode > 0 then
+ -- todo
-- else
- n.xoffset = p.xoffset - d[1]
---~ local k = wx[p]
---~ if k then
---~ wx[n] = k
---~ end
+ local k = wx[p]
+ if k then
+ n.xoffset = p.xoffset - d[1] - k[2]
+ else
+ n.xoffset = p.xoffset - d[1]
+ end
-- end
if mk[p] then
n.yoffset = p.yoffset + d[2]
@@ -2618,23 +3153,41 @@ function nodes.inject_kerns(head,where,keep)
if next(wx) then
for n, k in next, wx do
-- only w can be nil, can be sped up when w == nil
- local rl, x, w = k[1], k[2] or 0, k[4] or 0
+ local rl, x, w, r2l = k[1], k[2] or 0, k[4] or 0, k[6]
local wx = w - x
- if rl < 0 then
- if wx ~= 0 then
- insert_node_before(head,n,newkern(wx))
- end
- if x ~= 0 then
- insert_node_after (head,n,newkern(x))
- end
- else
- -- if wx ~= 0 then
- -- insert_node_after(head,n,newkern(wx))
- -- end
- if x ~= 0 then
- insert_node_before(head,n,newkern(x))
+--~ if rl < 0 then
+--~ if r2l then
+--~ if wx ~= 0 then
+--~ insert_node_before(head,n,newkern(wx))
+--~ end
+--~ if x ~= 0 then
+--~ insert_node_after (head,n,newkern(x))
+--~ end
+--~ else
+--~ if x ~= 0 then
+--~ insert_node_before(head,n,newkern(x))
+--~ end
+--~ if wx ~= 0 then
+--~ insert_node_after(head,n,newkern(wx))
+--~ end
+--~ end
+--~ else
+ if r2l then
+ if wx ~= 0 then
+ insert_node_before(head,n,newkern(wx))
+ end
+ if x ~= 0 then
+ insert_node_after (head,n,newkern(x))
+ end
+ else
+ if x ~= 0 then
+ insert_node_before(head,n,newkern(x))
+ end
+ if wx ~= 0 then
+ insert_node_after(head,n,newkern(wx))
+ end
end
- end
+--~ end
end
end
if next(cx) then
@@ -2660,29 +3213,54 @@ function nodes.inject_kerns(head,where,keep)
if trace_injections then
nodes.trace_injection(head)
end
- -- we assume done is true because there are kerns
for n in traverse_id(glyph,head) do
local k = has_attribute(n,kernpair)
if k then
local kk = kerns[k]
if kk then
- -- only w can be nil, can be sped up when w == nil
- local rl, x, y, w = kk[1], kk[2] or 0, kk[3] or 0, kk[4] or 0
- if y ~= 0 then
+ local rl, x, y, w = kk[1], kk[2] or 0, kk[3], kk[4]
+ if y and y ~= 0 then
n.yoffset = y -- todo: h ?
end
- local wx = w - x
- if rl < 0 then
- if wx ~= 0 then
- insert_node_before(head,n,newkern(wx))
- end
- if x ~= 0 then
- insert_node_after (head,n,newkern(x))
- end
+ if w then
+ -- copied from above
+ local r2l = kk[6]
+ local wx = w - x
+--~ if rl < 0 then
+--~ if r2l then
+--~ if x ~= 0 then
+--~ insert_node_before(head,n,newkern(x))
+--~ end
+--~ if wx ~= 0 then
+--~ insert_node_after(head,n,newkern(wx))
+--~ end
+--~ else
+--~ if wx ~= 0 then
+--~ insert_node_before(head,n,newkern(wx))
+--~ end
+--~ if x ~= 0 then
+--~ insert_node_after (head,n,newkern(x))
+--~ end
+--~ end
+--~ else
+ if r2l then
+ if wx ~= 0 then
+ insert_node_before(head,n,newkern(wx))
+ end
+ if x ~= 0 then
+ insert_node_after (head,n,newkern(x))
+ end
+ else
+ if x ~= 0 then
+ insert_node_before(head,n,newkern(x))
+ end
+ if wx ~= 0 then
+ insert_node_after(head,n,newkern(wx))
+ end
+ end
+--~ end
else
- -- if wx ~= 0 then
- -- insert_node_after(head,n,newkern(wx))
- -- end
+ -- simple (e.g. kernclass kerns)
if x ~= 0 then
insert_node_before(head,n,newkern(x))
end
@@ -2706,7 +3284,7 @@ do -- begin closure to overcome local limits and interference
if not modules then modules = { } end modules ['node-fnt'] = {
version = 1.001,
- comment = "companion to font-ini.tex",
+ comment = "companion to font-ini.mkiv",
author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
copyright = "PRAGMA ADE / ConTeXt Development Team",
license = "see context related readme files"
@@ -2751,13 +3329,15 @@ if tex.attribute[0] < 0 then
end
+-- this will be redone and split in a generic one and a context one
+
function nodes.process_characters(head)
-- either next or not, but definitely no already processed list
starttiming(nodes)
local usedfonts, attrfonts, done = { }, { }, false
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)
+ local font, attr = n.font, has_attribute(n,0) -- zero attribute is reserved for fonts in context
if attr and attr > 0 then
if font ~= prevfont or attr ~= prevattr then
local used = attrfonts[font]
@@ -2813,7 +3393,7 @@ function nodes.process_characters(head)
head, done = h or head, done or d
if n > 1 then
for i=2,n do
- local h, d = processors[i](head,font,0) -- false)
+ local h, d = processors[i](head,font,false)
head, done = h or head, done or d
end
end
@@ -2825,7 +3405,7 @@ function nodes.process_characters(head)
head, done = h or head, done or d
if n > 1 then
for i=2,n do
- local h, d = processors[i](head,font,0) -- false)
+ local h, d = processors[i](head,font,false)
head, done = h or head, done or d
end
end
@@ -2884,7 +3464,6 @@ else do
-- X000 1100 = 12 = 0x1C = leftghost
-- X001 0100 = 20 = 0x14 = rightghost
-
function nodes.protect_glyphs(head)
local done = false
for g in traverse_id(glyph,head) do
@@ -2941,7 +3520,7 @@ do -- begin closure to overcome local limits and interference
if not modules then modules = { } end modules ['font-ini'] = {
version = 1.001,
- comment = "companion to font-ini.tex",
+ comment = "companion to font-ini.mkiv",
author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
copyright = "PRAGMA ADE / ConTeXt Development Team",
license = "see context related readme files"
@@ -2952,6 +3531,8 @@ if not modules then modules = { } end modules ['font-ini'] = {
--ldx]]--
local utf = unicode.utf8
+local format, serialize = string.format, table.serialize
+local write_nl = texio.write_nl
if not fontloader then fontloader = fontforge end
@@ -2961,7 +3542,11 @@ fontloader.totable = fontloader.to_table
-- fix comes last
fonts = fonts or { }
-fonts.ids = fonts.ids or { } -- aka fontdata
+
+fonts.ids = fonts.ids or { } fonts.identifiers = fonts.ids -- aka fontdata
+fonts.chr = fonts.chr or { } fonts.characters = fonts.chr -- aka chardata
+fonts.qua = fonts.qua or { } fonts.quads = fonts.qua -- aka quaddata
+
fonts.tfm = fonts.tfm or { }
fonts.mode = 'base'
@@ -2971,8 +3556,11 @@ fonts.verbose = false -- more verbose cache tables
fonts.ids[0] = { -- nullfont
characters = { },
descriptions = { },
+ name = "nullfont",
}
+fonts.chr[0] = { }
+
fonts.methods = fonts.methods or {
base = { tfm = { }, afm = { }, otf = { }, vtf = { }, fix = { } },
node = { tfm = { }, afm = { }, otf = { }, vtf = { }, fix = { } },
@@ -3002,38 +3590,27 @@ fonts.define.specify.synonyms = fonts.define.specify.synonyms or { }
-- tracing
-fonts.color = fonts.color or { }
-
-local attribute = attributes.private('color')
-local mapping = (attributes and attributes.list[attribute]) or { }
+if not fonts.color then
-local set_attribute = node.set_attribute
-local unset_attribute = node.unset_attribute
+ fonts.color = {
+ set = function() end,
+ reset = function() end,
+ }
-function fonts.color.set(n,c)
- local mc = mapping[c]
- if not mc then
- unset_attribute(n,attribute)
- else
- set_attribute(n,attribute,mc)
- end
-end
-function fonts.color.reset(n)
- unset_attribute(n,attribute)
end
--- this will change ...
+-- format identification
-function fonts.show_char_data(n)
- local tfmdata = fonts.ids[font.current()]
- if tfmdata then
- if type(n) == "string" then
- n = utf.byte(n)
- end
- local chr = tfmdata.characters[n]
- if chr then
- texio.write_nl(table.serialize(chr,string.format("U_%04X",n)))
- end
+fonts.formats = { }
+
+function fonts.fontformat(filename,default)
+ local extname = file.extname(filename)
+ local format = fonts.formats[extname]
+ if format then
+ return format
+ else
+ logs.report("fonts define","unable to detemine font format for '%s'",filename)
+ return default
end
end
@@ -3043,7 +3620,7 @@ do -- begin closure to overcome local limits and interference
if not modules then modules = { } end modules ['font-tfm'] = {
version = 1.001,
- comment = "companion to font-ini.tex",
+ comment = "companion to font-ini.mkiv",
author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
copyright = "PRAGMA ADE / ConTeXt Development Team",
license = "see context related readme files"
@@ -3079,6 +3656,7 @@ fonts.initializers = fonts.initializers or { }
fonts.initializers.common = fonts.initializers.common or { }
local fontdata = fonts.ids
+local disc = node.id('disc')
local glyph = node.id('glyph')
local set_attribute = node.set_attribute
@@ -3090,33 +3668,9 @@ supplied by <l n='luatex'/>.</p>
tfm.resolve_vf = true -- false
tfm.share_base_kerns = false -- true (.5 sec slower on mk but brings down mem from 410M to 310M, beware: then script/lang share too)
tfm.mathactions = { }
+tfm.fontname_mode = "fullpath"
-function tfm.enhance(tfmdata,specification)
- local name, size = specification.name, specification.size
- local encoding, filename = match(name,"^(.-)%-(.*)$") -- 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
- local original = { }
- for k, v in next, characters do
- v.name = vector[k]
- v.index = k
- original[k] = v
- end
- for k,v in next, data.unicodes do
- if k ~= v then
- if trace_defining then
- logs.report("define font","mapping %s onto %s",k,v)
- end
- characters[k] = original[v]
- end
- end
- end
- end
-end
+tfm.enhance = tfm.enhance or function() end
function tfm.read_from_tfm(specification)
local fname, tfmdata = specification.filename or "", nil
@@ -3229,36 +3783,36 @@ fonts.trace_scaling = false
-- basekerns are scaled and will be hashed by table id
-- sharedkerns are unscaled and are be hashed by concatenated indexes
-function tfm.check_base_kerns(tfmdata)
- if tfm.share_base_kerns then
- local sharedkerns = tfmdata.sharedkerns
- if sharedkerns then
- local basekerns = { }
- tfmdata.basekerns = basekerns
- return sharedkerns, basekerns
- end
- end
- return nil, nil
-end
+--~ function tfm.check_base_kerns(tfmdata)
+--~ if tfm.share_base_kerns then
+--~ local sharedkerns = tfmdata.sharedkerns
+--~ if sharedkerns then
+--~ local basekerns = { }
+--~ tfmdata.basekerns = basekerns
+--~ return sharedkerns, basekerns
+--~ end
+--~ end
+--~ return nil, nil
+--~ end
-function tfm.prepare_base_kerns(tfmdata)
- if tfm.share_base_kerns and not tfmdata.sharedkerns then
- local sharedkerns = { }
- tfmdata.sharedkerns = sharedkerns
- for u, chr in next, tfmdata.characters do
- local kerns = chr.kerns
- if kerns then
- local hash = concat(sortedkeys(kerns), " ")
- local base = sharedkerns[hash]
- if not base then
- sharedkerns[hash] = kerns
- else
- chr.kerns = base
- end
- end
- end
- end
-end
+--~ function tfm.prepare_base_kerns(tfmdata)
+--~ if tfm.share_base_kerns and not tfmdata.sharedkerns then
+--~ local sharedkerns = { }
+--~ tfmdata.sharedkerns = sharedkerns
+--~ for u, chr in next, tfmdata.characters do
+--~ local kerns = chr.kerns
+--~ if kerns then
+--~ local hash = concat(sortedkeys(kerns), " ")
+--~ local base = sharedkerns[hash]
+--~ if not base then
+--~ sharedkerns[hash] = kerns
+--~ else
+--~ chr.kerns = base
+--~ end
+--~ end
+--~ end
+--~ end
+--~ end
-- we can have cache scaled characters when we are in node mode and don't have
-- protruding and expansion: hash == fullname @ size @ protruding @ expansion
@@ -3271,13 +3825,21 @@ local charactercache = { }
-- a virtual font has italic correction make sure to set the
-- has_italic flag. Some more flags will be added in the future.
-function tfm.do_scale(tfmtable, scaledpoints)
- tfm.prepare_base_kerns(tfmtable) -- optimalization
+function tfm.calculate_scale(tfmtable, scaledpoints, relativeid)
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 = { }
+ local units = tfmtable.units or 1000
+ local delta = scaledpoints/units -- brr, some open type fonts have 2048
+ return scaledpoints, delta, units
+end
+
+function tfm.do_scale(tfmtable, scaledpoints, relativeid)
+ -- tfm.prepare_base_kerns(tfmtable) -- optimalization
+ local t = { } -- the new table
+ local scaledpoints, delta, units = tfm.calculate_scale(tfmtable, scaledpoints, relativeid)
+ t.units_per_em = units or 1000
+ local hdelta, vdelta = delta, delta
-- unicoded unique descriptions shared cidinfo characters changed parameters indices
for k,v in next, tfmtable do
if type(v) == "table" then
@@ -3286,6 +3848,19 @@ function tfm.do_scale(tfmtable, scaledpoints)
t[k] = v
end
end
+ local extend_factor = tfmtable.extend_factor or 0
+ if extend_factor ~= 0 and extend_factor ~= 1 then
+ hdelta = hdelta * extend_factor
+ t.extend = extend_factor * 1000
+ else
+ t.extend = 1000
+ end
+ local slant_factor = tfmtable.slant_factor or 0
+ if slant_factor ~= 0 then
+ t.slant = slant_factor * 1000
+ else
+ t.slant = 0
+ end
-- status
local isvirtual = tfmtable.type == "virtual" or tfmtable.virtualized
local hasmath = (tfmtable.math_parameters ~= nil and next(tfmtable.math_parameters) ~= nil) or (tfmtable.MathConstants ~= nil and next(tfmtable.MathConstants) ~= nil)
@@ -3301,6 +3876,9 @@ function tfm.do_scale(tfmtable, scaledpoints)
t.unicodes = tfmtable.unicodes
t.indices = tfmtable.indices
t.marks = tfmtable.marks
+t.goodies = tfmtable.goodies
+t.colorscheme = tfmtable.colorscheme
+--~ t.embedding = tfmtable.embedding
t.descriptions = descriptions
if tfmtable.fonts then
t.fonts = table.fastcopy(tfmtable.fonts) -- hm also at the end
@@ -3310,18 +3888,18 @@ function tfm.do_scale(tfmtable, scaledpoints)
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
+ tp.space = (tfmp.space or tfmp[2] or 0)*hdelta
+ tp.space_stretch = (tfmp.space_stretch or tfmp[3] or 0)*hdelta
+ tp.space_shrink = (tfmp.space_shrink or tfmp[4] or 0)*hdelta
+ tp.x_height = (tfmp.x_height or tfmp[5] or 0)*vdelta
+ tp.quad = (tfmp.quad or tfmp[6] or 0)*hdelta
+ tp.extra_space = (tfmp.extra_space or tfmp[7] or 0)*hdelta
local protrusionfactor = (tp.quad ~= 0 and 1000/tp.quad) or 0
local tc = t.characters
local characters = tfmtable.characters
local nameneeded = not tfmtable.shared.otfdata --hack
local changed = tfmtable.changed or { } -- for base mode
- local ischanged = not table.is_empty(changed)
+ local ischanged = changed and next(changed)
local indices = tfmtable.indices
local luatex = tfmtable.luatex
local tounicode = luatex and luatex.tounicode
@@ -3329,14 +3907,15 @@ function tfm.do_scale(tfmtable, scaledpoints)
local defaultheight = luatex and luatex.defaultheight or 0
local defaultdepth = luatex and luatex.defaultdepth or 0
-- experimental, sharing kerns (unscaled and scaled) saves memory
- local sharedkerns, basekerns = tfm.check_base_kerns(tfmtable)
+ -- local sharedkerns, basekerns = tfm.check_base_kerns(tfmtable)
-- loop over descriptions (afm and otf have descriptions, tfm not)
-- there is no need (yet) to assign a value to chr.tonunicode
- local scaledwidth = defaultwidth * delta
- local scaledheight = defaultheight * delta
- local scaleddepth = defaultdepth * delta
+ local scaledwidth = defaultwidth * hdelta
+ local scaledheight = defaultheight * vdelta
+ local scaleddepth = defaultdepth * vdelta
local stackmath = tfmtable.ignore_stack_math ~= true
-local private = fonts.private
+ local private = fonts.private
+ local sharedkerns = { }
for k,v in next, characters do
local chr, description, index
if ischanged then
@@ -3357,9 +3936,9 @@ local private = fonts.private
local width = description.width
local height = description.height
local depth = description.depth
- if width then width = delta*width else width = scaledwidth end
- if height then height = delta*height else height = scaledheight end
- -- if depth then depth = delta*depth else depth = scaleddepth end
+ if width then width = hdelta*width else width = scaledwidth end
+ if height then height = vdelta*height else height = scaledheight end
+ -- if depth then depth = vdelta*depth else depth = scaleddepth end
if depth and depth ~= 0 then
depth = delta*depth
if nameneeded then
@@ -3405,6 +3984,7 @@ local private = fonts.private
end
end
if hasquality then
+ -- we could move these calculations elsewhere (saves calculations)
local ve = v.expansion_factor
if ve then
chr.expansion_factor = ve*1000 -- expansionfactor, hm, can happen elsewhere
@@ -3422,7 +4002,7 @@ local private = fonts.private
if hasitalic then
local vi = description.italic or v.italic
if vi and vi ~= 0 then
- chr.italic = vi*delta
+ chr.italic = vi*hdelta
end
end
-- to be tested
@@ -3438,14 +4018,19 @@ local private = fonts.private
for i=1,#vv do
local vvi = vv[i]
t[i] = {
- ["start"] = (vvi["start"] or 0)*delta,
- ["end"] = (vvi["end"] or 0)*delta,
- ["advance"] = (vvi["advance"] or 0)*delta,
+ ["start"] = (vvi["start"] or 0)*vdelta,
+ ["end"] = (vvi["end"] or 0)*vdelta,
+ ["advance"] = (vvi["advance"] or 0)*vdelta,
["extender"] = vvi["extender"],
["glyph"] = vvi["glyph"],
}
end
chr.vert_variants = t
+ --~ local ic = v.vert_italic_correction
+ --~ if ic then
+ --~ chr.italic = ic * hdelta
+ --~ print(format("0x%05X -> %s",k,chr.italic))
+ --~ end
else
local hv = v.horiz_variants
if hv then
@@ -3453,9 +4038,9 @@ local private = fonts.private
for i=1,#hv do
local hvi = hv[i]
t[i] = {
- ["start"] = (hvi["start"] or 0)*delta,
- ["end"] = (hvi["end"] or 0)*delta,
- ["advance"] = (hvi["advance"] or 0)*delta,
+ ["start"] = (hvi["start"] or 0)*hdelta,
+ ["end"] = (hvi["end"] or 0)*hdelta,
+ ["advance"] = (hvi["advance"] or 0)*hdelta,
["extender"] = hvi["extender"],
["glyph"] = hvi["glyph"],
}
@@ -3466,31 +4051,23 @@ local private = fonts.private
end
local vt = description.top_accent
if vt then
- chr.top_accent = delta*vt
+ chr.top_accent = vdelta*vt
end
if stackmath then
local mk = v.mathkerns
if mk then
local kerns = { }
- -- for k, v in next, mk do
- -- local kk = { }
- -- for i=1,#v do
- -- local vi = v[i]
- -- kk[i] = { height = delta*vi.height, kern = delta*vi.kern }
- -- end
- -- kerns[k] = kk
- -- end
local v = mk.top_right if v then local k = { } for i=1,#v do local vi = v[i]
- k[i] = { height = delta*vi.height, kern = delta*vi.kern }
+ k[i] = { height = vdelta*vi.height, kern = vdelta*vi.kern }
end kerns.top_right = k end
local v = mk.top_left if v then local k = { } for i=1,#v do local vi = v[i]
- k[i] = { height = delta*vi.height, kern = delta*vi.kern }
+ k[i] = { height = vdelta*vi.height, kern = vdelta*vi.kern }
end kerns.top_left = k end
local v = mk.bottom_left if v then local k = { } for i=1,#v do local vi = v[i]
- k[i] = { height = delta*vi.height, kern = delta*vi.kern }
+ k[i] = { height = vdelta*vi.height, kern = vdelta*vi.kern }
end kerns.bottom_left = k end
local v = mk.bottom_right if v then local k = { } for i=1,#v do local vi = v[i]
- k[i] = { height = delta*vi.height, kern = delta*vi.kern }
+ k[i] = { height = vdelta*vi.height, kern = vdelta*vi.kern }
end kerns.bottom_right = k end
chr.mathkern = kerns -- singular
end
@@ -3499,19 +4076,26 @@ local private = fonts.private
if not nodemode then
local vk = v.kerns
if vk then
- if sharedkerns then
- local base = basekerns[vk] -- hashed by table id, not content
- if not base then
- base = {}
- for k,v in next, vk do base[k] = v*delta end
- basekerns[vk] = base
- end
- chr.kerns = base
- else
- local tt = {}
- for k,v in next, vk do tt[k] = v*delta end
- chr.kerns = tt
+ --~ if sharedkerns then
+ --~ local base = basekerns[vk] -- hashed by table id, not content
+ --~ if not base then
+ --~ base = {}
+ --~ for k,v in next, vk do base[k] = v*hdelta end
+ --~ basekerns[vk] = base
+ --~ end
+ --~ chr.kerns = base
+ --~ else
+ --~ local tt = {}
+ --~ for k,v in next, vk do tt[k] = v*hdelta end
+ --~ chr.kerns = tt
+ --~ end
+ local s = sharedkerns[vk]
+ if not s then
+ s = { }
+ for k,v in next, vk do s[k] = v*hdelta end
+ sharedkerns[vk] = s
end
+ chr.kerns = s
end
local vl = v.ligatures
if vl then
@@ -3530,6 +4114,8 @@ local private = fonts.private
local vc = v.commands
if vc then
-- we assume non scaled commands here
+ -- tricky .. we need to scale pseudo math glyphs too
+ -- which is why we deal with rules too
local ok = false
for i=1,#vc do
local key = vc[i][1]
@@ -3543,8 +4129,12 @@ local private = fonts.private
for i=1,#vc do
local ivc = vc[i]
local key = ivc[1]
- if key == "right" or key == "down" then
- tt[#tt+1] = { key, ivc[2]*delta }
+ if key == "right" then
+ tt[#tt+1] = { key, ivc[2]*hdelta }
+ elseif key == "down" then
+ tt[#tt+1] = { key, ivc[2]*vdelta }
+ elseif key == "rule" then
+ tt[#tt+1] = { key, ivc[2]*vdelta, ivc[3]*hdelta }
else -- not comment
tt[#tt+1] = ivc -- shared since in cache and untouched
end
@@ -3560,6 +4150,8 @@ local private = fonts.private
-- t.encodingbytes, t.filename, t.fullname, t.name: elsewhere
t.size = scaledpoints
t.factor = delta
+ t.hfactor = hdelta
+ t.vfactor = vdelta
if t.fonts then
t.fonts = table.fastcopy(t.fonts) -- maybe we virtualize more afterwards
end
@@ -3567,20 +4159,20 @@ local private = fonts.private
-- mathematics.extras.copy(t) -- can be done elsewhere if needed
local ma = tfm.mathactions
for i=1,#ma do
- ma[i](t,tfmtable,delta)
+ ma[i](t,tfmtable,delta,hdelta,vdelta) -- what delta?
end
end
-- needed for \high cum suis
local tpx = tp.x_height
-if hasmath then
- if not tp[13] then tp[13] = .86*tpx end -- mathsupdisplay
- if not tp[14] then tp[14] = .86*tpx end -- mathsupnormal
- if not tp[15] then tp[15] = .86*tpx end -- mathsupcramped
- if not tp[16] then tp[16] = .48*tpx end -- mathsubnormal
- if not tp[17] then tp[17] = .48*tpx end -- mathsubcombined
- if not tp[22] then tp[22] = 0 end -- mathaxisheight
- if t.MathConstants then t.MathConstants.AccentBaseHeight = nil end -- safeguard
-end
+ if hasmath then
+ if not tp[13] then tp[13] = .86*tpx end -- mathsupdisplay
+ if not tp[14] then tp[14] = .86*tpx end -- mathsupnormal
+ if not tp[15] then tp[15] = .86*tpx end -- mathsupcramped
+ if not tp[16] then tp[16] = .48*tpx end -- mathsubnormal
+ if not tp[17] then tp[17] = .48*tpx end -- mathsubcombined
+ if not tp[22] then tp[22] = 0 end -- mathaxisheight
+ if t.MathConstants then t.MathConstants.AccentBaseHeight = nil end -- safeguard
+ end
t.tounicode = 1
t.cidinfo = tfmtable.cidinfo
-- we have t.name=metricfile and t.fullname=RealName and t.filename=diskfilename
@@ -3588,18 +4180,23 @@ end
-- can have multiple subfonts
if hasmath then
if trace_defining then
- logs.report("define font","math enabled for: %s %s %s",t.name or "noname",t.fullname or "nofullname",t.filename or "nofilename")
+ logs.report("define font","math enabled for: name '%s', fullname: '%s', filename: '%s'",t.name or "noname",t.fullname or "nofullname",t.filename or "nofilename")
end
else
if trace_defining then
- logs.report("define font","math disabled for: %s %s %s",t.name or "noname",t.fullname or "nofullname",t.filename or "nofilename")
+ logs.report("define font","math disabled for: name '%s', fullname: '%s', filename: '%s'",t.name or "noname",t.fullname or "nofullname",t.filename or "nofilename")
end
t.nomath, t.MathConstants = true, nil
end
- -- fullname is used in the subsetting
if not t.psname then
- t.psname = t.fullname -- else bad luck
+ -- name used in pdf file as well as for selecting subfont in ttc/dfont
+ t.psname = t.fontname or (t.fullname and fonts.names.cleanname(t.fullname))
end
+ if trace_defining then
+ logs.report("define font","used for accesing subfont: '%s'",t.psname or "nopsname")
+ logs.report("define font","used for subsetting: '%s'",t.fontname or "nofontname")
+ end
+--~ print(t.fontname,table.serialize(t.MathConstants))
return t, delta
end
@@ -3619,21 +4216,19 @@ local lastfont = nil
--
-- flushing the kern and ligature tables from memory saves a lot (only
-- base mode) but it complicates vf building where the new characters
--- demand this data
-
---~ for id, f in pairs(fonts.ids) do -- or font.fonts
---~ local ffi = font.fonts[id]
---~ f.characters = ffi.characters
---~ f.kerns = ffi.kerns
---~ f.ligatures = ffi.ligatures
---~ end
+-- demand this data .. solution: functions that access them
function tfm.cleanup_table(tfmdata) -- we need a cleanup callback, now we miss the last one
if tfm.auto_cleanup then -- ok, we can hook this into everyshipout or so ... todo
if tfmdata.type == 'virtual' or tfmdata.virtualized then
for k, v in next, tfmdata.characters do
- if v.commands then v.commands = nil end
+ if v.commands then v.commands = nil end
+ -- if v.kerns then v.kerns = nil end
end
+ else
+ -- for k, v in next, tfmdata.characters do
+ -- if v.kerns then v.kerns = nil end
+ -- end
end
end
end
@@ -3641,8 +4236,8 @@ end
function tfm.cleanup(tfmdata) -- we need a cleanup callback, now we miss the last one
end
-function tfm.scale(tfmtable, scaledpoints)
- local t, factor = tfm.do_scale(tfmtable, scaledpoints)
+function tfm.scale(tfmtable, scaledpoints, relativeid)
+ local t, factor = tfm.do_scale(tfmtable, scaledpoints, relativeid)
t.factor = factor
t.ascender = factor*(tfmtable.ascender or 0)
t.descender = factor*(tfmtable.descender or 0)
@@ -3676,7 +4271,8 @@ function fonts.analyzers.aux.setstate(head,font)
local descriptions = tfmdata.descriptions
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 id = current.id
+ if id == glyph and current.font == font then
local d = descriptions[current.char]
if d then
if d.class == "mark" then
@@ -3697,6 +4293,10 @@ function fonts.analyzers.aux.setstate(head,font)
end
first, last, n = nil, nil, 0
end
+ elseif id == disc then
+ -- always in the middle
+ set_attribute(current,state,2) -- midi
+ last = current
else -- finish
if first and first == last then
set_attribute(last,state,4) -- isol
@@ -3724,157 +4324,35 @@ function tfm.replacements(tfm,value)
-- 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
+-- checking
--- tfm features, experimental
-
-tfm.features = tfm.features or { }
-tfm.features.list = tfm.features.list or { }
-tfm.features.default = tfm.features.default or { }
-
-function tfm.enhance(tfmdata,specification)
- -- we don't really share tfm data because we always reload
- -- but this is more in sycn with afm and such
- local features = (specification.features and specification.features.normal ) or { }
- tfmdata.shared = tfmdata.shared or { }
- tfmdata.shared.features = features
- -- tfmdata.shared.tfmdata = tfmdata -- circular
- tfmdata.filename = specification.name
- if not features.encoding then
- local name, size = specification.name, specification.size
- local encoding, filename = match(name,"^(.-)%-(.*)$") -- context: encoding-name.*
- if filename and encoding and fonts.enc.known[encoding] then
- features.encoding = encoding
- end
- end
- tfm.set_features(tfmdata)
-end
-
-function tfm.set_features(tfmdata)
- -- todo: no local functions
- local shared = tfmdata.shared
--- local tfmdata = shared.tfmdata
- local features = shared.features
- if not table.is_empty(features) then
- local mode = tfmdata.mode or fonts.mode
- local fi = fonts.initializers[mode]
- if fi and fi.tfm then
- 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 fi.tfm[f] then -- brr
- if tfm.trace_features then
- logs.report("define font","initializing feature %s to %s for mode %s for font %s",f,tostring(value),mode or 'unknown',tfmdata.name or 'unknown')
- end
- fi.tfm[f](tfmdata,value)
- mode = tfmdata.mode or fonts.mode
- fi = fonts.initializers[mode]
- end
- end
+function tfm.checked_filename(metadata,whatever)
+ local foundfilename = metadata.foundfilename
+ if not foundfilename then
+ local askedfilename = metadata.filename or ""
+ if askedfilename ~= "" then
+ foundfilename = resolvers.findbinfile(askedfilename,"") or ""
+ if foundfilename == "" then
+ logs.report("fonts","source file '%s' is not found",askedfilename)
+ foundfilename = resolvers.findbinfile(file.basename(askedfilename),"") or ""
+ if foundfilename ~= "" then
+ logs.report("fonts","using source file '%s' (cache mismatch)",foundfilename)
end
end
- initialize(fonts.triggers)
- initialize(tfm.features.list)
- initialize(fonts.manipulators)
+ elseif whatever then
+ logs.report("fonts","no source file for '%s'",whatever)
+ foundfilename = ""
end
- local fm = fonts.methods[mode]
- if fm and fm.tfm then
- local function register(list) -- node manipulations
- if list then
- for i=1,#list do
- local f = list[i]
- if features[f] and fm.tfm[f] then -- brr
- if not shared.processors then -- maybe also predefine
- shared.processors = { fm.tfm[f] }
- else
- shared.processors[#shared.processors+1] = fm.tfm[f]
- end
- end
- end
- end
- end
- register(tfm.features.list)
- end
- end
-end
-
-function tfm.features.register(name,default)
- tfm.features.list[#tfm.features.list+1] = name
- tfm.features.default[name] = default
-end
-
-function tfm.reencode(tfmdata,encoding)
- if encoding and fonts.enc.known[encoding] then
- local data = fonts.enc.load(encoding)
- if data then
- local characters, original, vector = tfmdata.characters, { }, data.vector
- tfmdata.encoding = encoding -- not needed
- for k, v in next, characters do
- v.name, v.index, original[k] = vector[k], k, v
- end
- for k,v in next, data.unicodes do
- if k ~= v then
- if trace_defining then
- logs.report("define font","reencoding U+%04X to U+%04X",k,v)
- end
- characters[k] = original[v]
- end
- end
- end
- end
-end
-
-tfm.features.register('reencode')
-
-fonts.initializers.base.tfm.reencode = tfm.reencode
-fonts.initializers.node.tfm.reencode = tfm.reencode
-
-fonts.enc = fonts.enc or { }
-fonts.enc.remappings = fonts.enc.remappings or { }
-
-function tfm.remap(tfmdata,remapping)
- local vector = remapping and fonts.enc.remappings[remapping]
- if vector then
- local characters, original = tfmdata.characters, { }
- for k, v in next, characters do
- original[k], characters[k] = v, nil
- end
- for k,v in next, vector do
- if k ~= v then
- if trace_defining then
- logs.report("define font","remapping U+%04X to U+%04X",k,v)
- end
- local c = original[k]
- characters[v] = c
- c.index = k
- end
- end
- tfmdata.encodingbytes = 2
- tfmdata.format = 'type1'
+ metadata.foundfilename = foundfilename
+ -- logs.report("fonts","using source file '%s'",foundfilename)
end
+ return foundfilename
end
-tfm.features.register('remap')
-
-fonts.initializers.base.tfm.remap = tfm.remap
-fonts.initializers.node.tfm.remap = tfm.remap
-
-- status info
statistics.register("fonts load time", function()
- if statistics.elapsedindeed(fonts) then
- return format("%s seconds",statistics.elapsedtime(fonts))
- end
+ return statistics.elapsedseconds(fonts)
end)
end -- closure
@@ -3889,8 +4367,9 @@ if not modules then modules = { } end modules ['font-cid'] = {
license = "see context related readme files"
}
-local format, match = string.format, string.match
+local format, match, lower = string.format, string.match, string.lower
local tonumber = tonumber
+local lpegmatch = lpeg.match
local trace_loading = false trackers.register("otf.loading", function(v) trace_loading = v end)
@@ -3944,7 +4423,7 @@ function fonts.cid.load(filename)
local data = io.loaddata(filename)
if data then
unicodes, names = { }, { }
- grammar:match(data)
+ lpegmatch(grammar,data)
local supplement, registry, ordering = match(filename,"^(.-)%-(.-)%-()%.(.-)$")
return {
supplement = supplement,
@@ -3961,9 +4440,11 @@ end
local template = "%s-%s-%s.cidmap"
+
local function locate(registry,ordering,supplement)
- local filename = string.lower(format(template,registry,ordering,supplement))
- local cidmap = fonts.cid.map[filename]
+ local filename = format(template,registry,ordering,supplement)
+ local hashname = lower(filename)
+ local cidmap = fonts.cid.map[hashname]
if not cidmap then
if trace_loading then
logs.report("load otf","checking cidmap, registry: %s, ordering: %s, supplement: %s, filename: %s",registry,ordering,supplement,filename)
@@ -3975,7 +4456,7 @@ local function locate(registry,ordering,supplement)
if trace_loading then
logs.report("load otf","using cidmap file %s",filename)
end
- fonts.cid.map[filename] = cidmap
+ fonts.cid.map[hashname] = cidmap
cidmap.usedname = file.basename(filename)
return cidmap
end
@@ -4119,7 +4600,7 @@ otf.tables.scripts = {
['ugar'] = 'Ugaritic Cuneiform',
['xpeo'] = 'Old Persian Cuneiform',
['xsux'] = 'Sumero-Akkadian Cuneiform',
- ['yi' ] = 'Yi'
+ ['yi' ] = 'Yi',
}
otf.tables.languages = {
@@ -4601,6 +5082,7 @@ otf.tables.features = {
['rphf'] = 'Reph Form',
['rtbd'] = 'Right Bounds',
['rtla'] = 'Right-To-Left Alternates',
+ ['rtlm'] = 'Right To Left Math', -- math
['ruby'] = 'Ruby Notation Forms',
['salt'] = 'Stylistic Alternates',
['sinf'] = 'Scientific Inferiors',
@@ -4703,16 +5185,24 @@ local to_scripts = otf.tables.to_scripts
local to_languages = otf.tables.to_languages
local to_features = otf.tables.to_features
-for k, v in pairs(to_features) do
+for k, v in next, to_features do
local stripped = gsub(k,"%-"," ")
to_features[stripped] = v
local stripped = gsub(k,"[^a-zA-Z0-9]","")
to_features[stripped] = v
end
-for k, v in pairs(to_features) do
+for k, v in next, to_features do
to_features[lower(k)] = v
end
+otf.meanings.checkers = {
+ rand = function(v)
+ return v and "random"
+ end
+}
+
+local checkers = otf.meanings.checkers
+
function otf.meanings.normalize(features)
local h = { }
for k,v in next, features do
@@ -4741,7 +5231,9 @@ function otf.meanings.normalize(features)
v = b
end
end
- h[to_features[k] or k] = v
+ k = to_features[k] or k
+ local c = checkers[k]
+ h[k] = c and c(v) or v
end
end
return h
@@ -4980,9 +5472,384 @@ end -- closure
do -- begin closure to overcome local limits and interference
+if not modules then modules = { } end modules ['font-map'] = {
+ version = 1.001,
+ comment = "companion to font-ini.mkiv",
+ author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
+ copyright = "PRAGMA ADE / ConTeXt Development Team",
+ license = "see context related readme files"
+}
+
+local utf = unicode.utf8
+local match, format, find, concat, gsub, lower = string.match, string.format, string.find, table.concat, string.gsub, string.lower
+local lpegmatch = lpeg.match
+local utfbyte = utf.byte
+
+local trace_loading = false trackers.register("otf.loading", function(v) trace_loading = v end)
+local trace_unimapping = false trackers.register("otf.unimapping", function(v) trace_unimapping = v end)
+
+local ctxcatcodes = tex and tex.ctxcatcodes
+
+--[[ldx--
+<p>Eventually this code will disappear because map files are kind
+of obsolete. Some code may move to runtime or auxiliary modules.</p>
+<p>The name to unciode related code will stay of course.</p>
+--ldx]]--
+
+fonts = fonts or { }
+fonts.map = fonts.map or { }
+
+local function load_lum_table(filename) -- will move to font goodies
+ local lumname = file.replacesuffix(file.basename(filename),"lum")
+ local lumfile = resolvers.find_file(lumname,"map") or ""
+ if lumfile ~= "" and lfs.isfile(lumfile) then
+ if trace_loading or trace_unimapping then
+ logs.report("load otf","enhance: loading %s ",lumfile)
+ end
+ lumunic = dofile(lumfile)
+ return lumunic, lumfile
+ end
+end
+
+local hex = lpeg.R("AF","09")
+local hexfour = (hex*hex*hex*hex) / function(s) return tonumber(s,16) end
+local hexsix = (hex^1) / function(s) return tonumber(s,16) end
+local dec = (lpeg.R("09")^1) / tonumber
+local period = lpeg.P(".")
+
+local unicode = lpeg.P("uni") * (hexfour * (period + lpeg.P(-1)) * lpeg.Cc(false) + lpeg.Ct(hexfour^1) * lpeg.Cc(true))
+local ucode = lpeg.P("u") * (hexsix * (period + lpeg.P(-1)) * lpeg.Cc(false) + lpeg.Ct(hexsix ^1) * lpeg.Cc(true))
+local index = lpeg.P("index") * dec * lpeg.Cc(false)
+
+local parser = unicode + ucode + index
+
+local parsers = { }
+
+local function make_name_parser(str)
+ if not str or str == "" then
+ return parser
+ else
+ local p = parsers[str]
+ if not p then
+ p = lpeg.P(str) * period * dec * lpeg.Cc(false)
+ parsers[str] = p
+ end
+ return p
+ end
+end
+
+--~ local parser = fonts.map.make_name_parser("Japan1")
+--~ local parser = fonts.map.make_name_parser()
+--~ local function test(str)
+--~ local b, a = lpegmatch(parser,str)
+--~ print((a and table.serialize(b)) or b)
+--~ end
+--~ test("a.sc")
+--~ test("a")
+--~ test("uni1234")
+--~ test("uni1234.xx")
+--~ test("uni12349876")
+--~ test("index1234")
+--~ test("Japan1.123")
+
+local function tounicode16(unicode)
+ if unicode < 0x10000 then
+ return format("%04X",unicode)
+ else
+ return format("%04X%04X",unicode/1024+0xD800,unicode%1024+0xDC00)
+ end
+end
+
+local function tounicode16sequence(unicodes)
+ local t = { }
+ for l=1,#unicodes do
+ local unicode = unicodes[l]
+ if unicode < 0x10000 then
+ t[l] = format("%04X",unicode)
+ else
+ t[l] = format("%04X%04X",unicode/1024+0xD800,unicode%1024+0xDC00)
+ end
+ end
+ return concat(t)
+end
+
+--~ This is quite a bit faster but at the cost of some memory but if we
+--~ do this we will also use it elsewhere so let's not follow this route
+--~ now. I might use this method in the plain variant (no caching there)
+--~ but then I need a flag that distinguishes between code branches.
+--~
+--~ local cache = { }
+--~
+--~ function fonts.map.tounicode16(unicode)
+--~ local s = cache[unicode]
+--~ if not s then
+--~ if unicode < 0x10000 then
+--~ s = format("%04X",unicode)
+--~ else
+--~ s = format("%04X%04X",unicode/1024+0xD800,unicode%1024+0xDC00)
+--~ end
+--~ cache[unicode] = s
+--~ end
+--~ return s
+--~ end
+
+fonts.map.load_lum_table = load_lum_table
+fonts.map.make_name_parser = make_name_parser
+fonts.map.tounicode16 = tounicode16
+fonts.map.tounicode16sequence = tounicode16sequence
+
+local separator = lpeg.S("_.")
+local other = lpeg.C((1 - separator)^1)
+local ligsplitter = lpeg.Ct(other * (separator * other)^0)
+
+--~ print(table.serialize(lpegmatch(ligsplitter,"this")))
+--~ print(table.serialize(lpegmatch(ligsplitter,"this.that")))
+--~ print(table.serialize(lpegmatch(ligsplitter,"japan1.123")))
+--~ print(table.serialize(lpegmatch(ligsplitter,"such_so_more")))
+--~ print(table.serialize(lpegmatch(ligsplitter,"such_so_more.that")))
+
+fonts.map.add_to_unicode = function(data,filename)
+ local unicodes = data.luatex and data.luatex.unicodes
+ if not unicodes then
+ return
+ end
+ -- we need to move this code
+ unicodes['space'] = unicodes['space'] or 32
+ unicodes['hyphen'] = unicodes['hyphen'] or 45
+ unicodes['zwj'] = unicodes['zwj'] or 0x200D
+ unicodes['zwnj'] = unicodes['zwnj'] or 0x200C
+ -- the tounicode mapping is sparse and only needed for alternatives
+ local tounicode, originals, ns, nl, private, unknown = { }, { }, 0, 0, fonts.private, format("%04X",utfbyte("?"))
+ data.luatex.tounicode, data.luatex.originals = tounicode, originals
+ local lumunic, uparser, oparser
+ if false then -- will become an option
+ lumunic = load_lum_table(filename)
+ lumunic = lumunic and lumunic.tounicode
+ end
+ local cidinfo, cidnames, cidcodes = data.cidinfo
+ local usedmap = cidinfo and cidinfo.usedname
+ usedmap = usedmap and lower(usedmap)
+ usedmap = usedmap and fonts.cid.map[usedmap]
+ if usedmap then
+ oparser = usedmap and make_name_parser(cidinfo.ordering)
+ cidnames = usedmap.names
+ cidcodes = usedmap.unicodes
+ end
+ uparser = make_name_parser()
+ local aglmap = fonts.map and fonts.map.agl_to_unicode
+ for index, glyph in next, data.glyphs do
+ local name, unic = glyph.name, glyph.unicode or -1 -- play safe
+ if unic == -1 or unic >= private or (unic >= 0xE000 and unic <= 0xF8FF) or unic == 0xFFFE or unic == 0xFFFF then
+ local unicode = (lumunic and lumunic[name]) or (aglmap and aglmap[name])
+ if unicode then
+ originals[index], tounicode[index], ns = unicode, tounicode16(unicode), ns + 1
+ end
+ -- cidmap heuristics, beware, there is no guarantee for a match unless
+ -- the chain resolves
+ if (not unicode) and usedmap then
+ local foundindex = lpegmatch(oparser,name)
+ if foundindex then
+ unicode = cidcodes[foundindex] -- name to number
+ if unicode then
+ originals[index], tounicode[index], ns = unicode, tounicode16(unicode), ns + 1
+ else
+ local reference = cidnames[foundindex] -- number to name
+ if reference then
+ local foundindex = lpegmatch(oparser,reference)
+ if foundindex then
+ unicode = cidcodes[foundindex]
+ if unicode then
+ originals[index], tounicode[index], ns = unicode, tounicode16(unicode), ns + 1
+ end
+ end
+ if not unicode then
+ local foundcodes, multiple = lpegmatch(uparser,reference)
+ if foundcodes then
+ if multiple then
+ originals[index], tounicode[index], nl, unicode = foundcodes, tounicode16sequence(foundcodes), nl + 1, true
+ else
+ originals[index], tounicode[index], ns, unicode = foundcodes, tounicode16(foundcodes), ns + 1, foundcodes
+ end
+ end
+ end
+ end
+ end
+ end
+ end
+ -- a.whatever or a_b_c.whatever or a_b_c (no numbers)
+ if not unicode then
+ local split = lpegmatch(ligsplitter,name)
+ local nplit = (split and #split) or 0
+ if nplit == 0 then
+ -- skip
+ elseif nplit == 1 then
+ local base = split[1]
+ unicode = unicodes[base] or (aglmap and aglmap[base])
+ if unicode then
+ if type(unicode) == "table" then
+ unicode = unicode[1]
+ end
+ originals[index], tounicode[index], ns = unicode, tounicode16(unicode), ns + 1
+ end
+ else
+ local t = { }
+ for l=1,nplit do
+ local base = split[l]
+ local u = unicodes[base] or (aglmap and aglmap[base])
+ if not u then
+ break
+ elseif type(u) == "table" then
+ t[#t+1] = u[1]
+ else
+ t[#t+1] = u
+ end
+ end
+ if #t > 0 then -- done then
+ originals[index], tounicode[index], nl, unicode = t, tounicode16sequence(t), nl + 1, true
+ end
+ end
+ end
+ -- last resort
+ if not unicode then
+ local foundcodes, multiple = lpegmatch(uparser,name)
+ if foundcodes then
+ if multiple then
+ originals[index], tounicode[index], nl, unicode = foundcodes, tounicode16sequence(foundcodes), nl + 1, true
+ else
+ originals[index], tounicode[index], ns, unicode = foundcodes, tounicode16(foundcodes), ns + 1, foundcodes
+ end
+ end
+ end
+ if not unicode then
+ originals[index], tounicode[index] = 0xFFFD, "FFFD"
+ end
+ end
+ end
+ if trace_unimapping then
+ for index, glyph in table.sortedhash(data.glyphs) do
+ local toun, name, unic = tounicode[index], glyph.name, glyph.unicode or -1 -- play safe
+ if toun then
+ logs.report("load otf","internal: 0x%05X, name: %s, unicode: 0x%05X, tounicode: %s",index,name,unic,toun)
+ else
+ logs.report("load otf","internal: 0x%05X, name: %s, unicode: 0x%05X",index,name,unic)
+ end
+ end
+ end
+ if trace_loading and (ns > 0 or nl > 0) then
+ logs.report("load otf","enhance: %s tounicode entries added (%s ligatures)",nl+ns, ns)
+ end
+end
+
+-- the following is sort of obsolete
+--
+-- fonts.map.data = fonts.map.data or { }
+-- fonts.map.encodings = fonts.map.encodings or { }
+-- fonts.map.loaded = fonts.map.loaded or { }
+-- fonts.map.line = fonts.map.line or { }
+--
+-- function fonts.map.line.pdftex(e)
+-- if e.name and e.fontfile then
+-- local fullname = e.fullname or ""
+-- if e.slant and e.slant ~= 0 then
+-- if e.encoding then
+-- pdf.mapline(format('= %s %s "%g SlantFont" <%s <%s',e.name,fullname,e.slant,e.encoding,e.fontfile)))
+-- else
+-- pdf.mapline(format('= %s %s "%g SlantFont" <%s',e.name,fullname,e.slant,e.fontfile)))
+-- end
+-- elseif e.extend and e.extend ~= 1 and e.extend ~= 0 then
+-- if e.encoding then
+-- pdf.mapline(format('= %s %s "%g ExtendFont" <%s <%s',e.name,fullname,e.extend,e.encoding,e.fontfile)))
+-- else
+-- pdf.mapline(format('= %s %s "%g ExtendFont" <%s',e.name,fullname,e.extend,e.fontfile)))
+-- end
+-- else
+-- if e.encoding then
+-- pdf.mapline(format('= %s %s <%s <%s',e.name,fullname,e.encoding,e.fontfile)))
+-- else
+-- pdf.mapline(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 next, fonts.map.data do
+-- 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 gmatch(data,"(.-)[\n\t]") do
+-- if find(line,"^[%#%%%s]") then
+-- -- print(line)
+-- else
+-- local extend, slant, name, fullname, fontfile, encoding
+-- line = gsub(line,'"(.+)"', function(s)
+-- extend = find(s,'"([^"]+) ExtendFont"')
+-- slant = find(s,'"([^"]+) SlantFont"')
+-- return ""
+-- end)
+-- if not name then
+-- -- name fullname encoding fontfile
+-- name, fullname, encoding, fontfile = match(line,"^(%S+)%s+(%S*)[%s<]+(%S*)[%s<]+(%S*)%s*$")
+-- end
+-- if not name then
+-- -- name fullname (flag) fontfile encoding
+-- name, fullname, fontfile, encoding = match(line,"^(%S+)%s+(%S*)[%d%s<]+(%S*)[%s<]+(%S*)%s*$")
+-- end
+-- if not name then
+-- -- name fontfile
+-- name, fontfile = match(line,"^(%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),
+-- extend = tonumber(extend)
+-- }
+-- encodings[name] = encoding
+-- elseif line ~= "" then
+-- -- print(line)
+-- end
+-- end
+-- end
+-- end
+-- f:close()
+-- end
+-- return entries, encodings
+-- end
+
+end -- closure
+
+do -- begin closure to overcome local limits and interference
+
if not modules then modules = { } end modules ['font-otf'] = {
version = 1.001,
- comment = "companion to font-ini.tex",
+ comment = "companion to font-ini.mkiv",
author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
copyright = "PRAGMA ADE / ConTeXt Development Team",
license = "see context related readme files"
@@ -4993,6 +5860,8 @@ local utf = unicode.utf8
local concat, getn, utfbyte = table.concat, table.getn, utf.byte
local format, gmatch, gsub, find, match, lower, strip = string.format, string.gmatch, string.gsub, string.find, string.match, string.lower, string.strip
local type, next, tonumber, tostring = type, next, tonumber, tostring
+local abs = math.abs
+local lpegmatch = lpeg.match
local trace_private = false trackers.register("otf.private", function(v) trace_private = v end)
local trace_loading = false trackers.register("otf.loading", function(v) trace_loading = v end)
@@ -5000,13 +5869,10 @@ local trace_features = false trackers.register("otf.features", function(v
local trace_dynamics = false trackers.register("otf.dynamics", function(v) trace_dynamics = v end)
local trace_sequences = false trackers.register("otf.sequences", function(v) trace_sequences = v end)
local trace_math = false trackers.register("otf.math", function(v) trace_math = v end)
-local trace_unimapping = false trackers.register("otf.unimapping", function(v) trace_unimapping = v end)
+local trace_defining = false trackers.register("fonts.defining", function(v) trace_defining = v end)
--~ trackers.enable("otf.loading")
-local zwnj = 0x200C
-local zwj = 0x200D
-
--[[ldx--
<p>The fontforge table has organized lookups in a certain way. A first implementation
of this code was organized featurewise: information related to features was
@@ -5064,13 +5930,16 @@ otf.features.default = otf.features.default or { }
otf.enhancers = otf.enhancers or { }
otf.glists = { "gsub", "gpos" }
-otf.version = 2.628 -- beware: also sync font-mis.lua
+otf.version = 2.650 -- beware: also sync font-mis.lua
otf.pack = true -- beware: also sync font-mis.lua
otf.syncspace = true
otf.notdef = false
otf.cache = containers.define("fonts", "otf", otf.version, true)
otf.cleanup_aat = false -- only context
+local wildcard = "*"
+local default = "dflt"
+
--[[ldx--
<p>We start with a lot of tables and related functions.</p>
--ldx]]--
@@ -5086,6 +5955,7 @@ otf.tables.global_fields = table.tohash {
"names",
"unicodes",
"names",
+--~ "math",
"anchor_classes",
"kern_classes",
"gpos",
@@ -5158,7 +6028,7 @@ otf.tables.valid_fields = {
local function load_featurefile(ff,featurefile)
if featurefile then
- featurefile = resolvers.find_file(file.addsuffix(featurefile,'fea')) -- "FONTFEATURES"
+ featurefile = resolvers.find_file(file.addsuffix(featurefile,'fea'),'fea')
if featurefile and featurefile ~= "" then
if trace_loading then
logs.report("load otf", "featurefile: %s", featurefile)
@@ -5172,7 +6042,7 @@ function otf.enhance(name,data,filename,verbose)
local enhancer = otf.enhancers[name]
if enhancer then
if (verbose ~= nil and verbose) or trace_loading then
- logs.report("load otf","enhance: %s",name)
+ logs.report("load otf","enhance: %s (%s)",name,filename)
end
enhancer(data,filename)
end
@@ -5184,8 +6054,10 @@ local enhancers = {
"patch bugs",
"merge cid fonts", "prepare unicode", "cleanup ttf tables", "compact glyphs", "reverse coverage",
"cleanup aat", "enrich with features", "add some missing characters",
+ "reorganize mark classes",
"reorganize kerns", -- moved here
"flatten glyph lookups", "flatten anchor tables", "flatten feature tables",
+ "simplify glyph lookups", -- some saving
"prepare luatex tables",
"analyse features", "rehash features",
"analyse anchors", "analyse marks", "analyse unicodes", "analyse subtables",
@@ -5193,6 +6065,7 @@ local enhancers = {
"share widths",
"strip not needed data",
"migrate metadata",
+ "check math parameters",
}
function otf.load(filename,format,sub,featurefile)
@@ -5209,7 +6082,7 @@ function otf.load(filename,format,sub,featurefile)
local data = containers.read(otf.cache(), hash)
local size = lfs.attributes(filename,"size") or 0
if not data or data.verbose ~= fonts.verbose or data.size ~= size then
- logs.report("load otf","loading: %s",filename)
+ logs.report("load otf","loading: %s (hash: %s)",filename,hash)
local ff, messages
if sub then
ff, messages = fontloader.open(filename,sub)
@@ -5217,9 +6090,15 @@ function otf.load(filename,format,sub,featurefile)
ff, messages = fontloader.open(filename)
end
if trace_loading and messages and #messages > 0 then
- for m=1,#messages do
- logs.report("load otf","warning: %s",messages[m])
+ if type(messages) == "string" then
+ logs.report("load otf","warning: %s",messages)
+ else
+ for m=1,#messages do
+ logs.report("load otf","warning: %s",tostring(messages[m]))
+ end
end
+ else
+ logs.report("load otf","font loaded okay")
end
if ff then
load_featurefile(ff,featurefile)
@@ -5230,6 +6109,7 @@ function otf.load(filename,format,sub,featurefile)
logs.report("load otf","enhancing ...")
for e=1,#enhancers do
otf.enhance(enhancers[e],data,filename)
+ io.flush() -- we want instant messages
end
if otf.pack and not fonts.verbose then
otf.enhance("pack",data,filename)
@@ -5249,6 +6129,9 @@ function otf.load(filename,format,sub,featurefile)
end
end
if data then
+ if trace_defining then
+ logs.report("define font","loading from cache: %s",hash)
+ end
otf.enhance("unpack",data,filename,false) -- no message here
otf.add_dimensions(data)
if trace_sequences then
@@ -5336,6 +6219,29 @@ end
-- todo: normalize, design_size => designsize
+otf.enhancers["reorganize mark classes"] = function(data,filename)
+ if data.mark_classes then
+ local unicodes = data.luatex.unicodes
+ local reverse = { }
+ for name, class in next, data.mark_classes do
+ local t = { }
+ for s in gmatch(class,"[^ ]+") do
+ local us = unicodes[s]
+ if type(us) == "table" then
+ for u=1,#us do
+ t[us[u]] = true
+ end
+ else
+ t[us] = true
+ end
+ end
+ reverse[name] = t
+ end
+ data.luatex.markclasses = reverse
+ data.mark_classes = nil
+ end
+end
+
otf.enhancers["prepare luatex tables"] = function(data,filename)
data.luatex = data.luatex or { }
local luatex = data.luatex
@@ -5447,140 +6353,7 @@ otf.enhancers["analyse marks"] = function(data,filename)
end
end
-local separator = lpeg.S("_.")
-local other = lpeg.C((1 - separator)^1)
-local ligsplitter = lpeg.Ct(other * (separator * other)^0)
-
---~ print(table.serialize(ligsplitter:match("this")))
---~ print(table.serialize(ligsplitter:match("this.that")))
---~ print(table.serialize(ligsplitter:match("japan1.123")))
---~ print(table.serialize(ligsplitter:match("such_so_more")))
---~ print(table.serialize(ligsplitter:match("such_so_more.that")))
-
-otf.enhancers["analyse unicodes"] = function(data,filename)
- local tounicode16, tounicode16sequence = fonts.map.tounicode16, fonts.map.tounicode16sequence
- local unicodes = data.luatex.unicodes
- -- we need to move this code
- unicodes['space'] = unicodes['space'] or 32 -- handly later on
- unicodes['hyphen'] = unicodes['hyphen'] or 45 -- handly later on
- unicodes['zwj'] = unicodes['zwj'] or zwj -- handly later on
- unicodes['zwnj'] = unicodes['zwnj'] or zwnj -- handly later on
- -- the tounicode mapping is sparse and only needed for alternatives
- local tounicode, originals, ns, nl, private, unknown = { }, { }, 0, 0, fonts.private, format("%04X",utfbyte("?"))
- data.luatex.tounicode, data.luatex.originals = tounicode, originals
- local lumunic, uparser, oparser
- if false then -- will become an option
- lumunic = fonts.map.load_lum_table(filename)
- lumunic = lumunic and lumunic.tounicode
- end
- local cidinfo, cidnames, cidcodes = data.cidinfo
- local usedmap = cidinfo and cidinfo.usedname
- usedmap = usedmap and fonts.cid.map[usedmap]
- if usedmap then
- oparser = usedmap and fonts.map.make_name_parser(cidinfo.ordering)
- cidnames = usedmap.names
- cidcodes = usedmap.unicodes
- end
- uparser = fonts.map.make_name_parser()
- for index, glyph in next, data.glyphs do
- local name, unic = glyph.name, glyph.unicode or -1 -- play safe
- if unic == -1 or unic >= private or (unic >= 0xE000 and unic <= 0xF8FF) or unic == 0xFFFE or unic == 0xFFFF then
- local unicode = lumunic and lumunic[name]
- if unicode then
- originals[index], tounicode[index], ns = unicode, tounicode16(unicode), ns + 1
- end
- -- cidmap heuristics, beware, there is no guarantee for a match unless
- -- the chain resolves
- if not unicode and usedmap then
- local foundindex = oparser:match(name)
- if foundindex then
- unicode = cidcodes[foundindex] -- name to number
- if not unicode then
- local reference = cidnames[foundindex] -- number to name
- if reference then
- local foundindex = oparser:match(reference)
- if foundindex then
- unicode = cidcodes[foundindex]
- if unicode then
- originals[index], tounicode[index], ns = unicode, tounicode16(unicode), ns + 1
- end
- end
- if not unicode then
- local foundcodes, multiple = uparser:match(reference)
- if foundcodes then
- if multiple then
- originals[index], tounicode[index], nl, unicode = foundcodes, tounicode16sequence(foundcodes), nl + 1, true
- else
- originals[index], tounicode[index], ns, unicode = foundcodes, tounicode16(foundcodes), ns + 1, foundcodes
- end
- end
- end
- end
- end
- end
- end
- -- a.whatever or a_b_c.whatever or a_b_c (no numbers)
- if not unicode then
- local split = ligsplitter:match(name)
- local nplit = (split and #split) or 0
- if nplit == 0 then
- -- skip
- elseif nplit == 1 then
- unicode = unicodes[split[1]]
- if unicode then
- if type(unicode) == "table" then
- unicode = unicode[1]
- end
- originals[index], tounicode[index], ns = unicode, tounicode16(unicode), ns + 1
- end
- else
- local done = true
- for l=1,nplit do
- local u = unicodes[split[l]]
- if not u then
- done = false
- break
- elseif type(u) == "table" then
- split[l] = u[1]
- else
- split[l] = u
- end
- end
- if done then
- originals[index], tounicode[index], nl, unicode = split, tounicode16sequence(split), nl + 1, true
- end
- end
- end
- -- last resort
- if not unicode then
- local foundcodes, multiple = uparser:match(name)
- if foundcodes then
- if multiple then
- originals[index], tounicode[index], nl, unicode = foundcodes, tounicode16sequence(foundcodes), nl + 1, true
- else
- originals[index], tounicode[index], ns, unicode = foundcodes, tounicode16(foundcodes), ns + 1, foundcodes
- end
- end
- end
- if not unicode then
- originals[index], tounicode[index] = 0xFFFD, "FFFD"
- end
- end
- end
- if trace_unimapping then
- for index, glyph in table.sortedpairs(data.glyphs) do
- local toun, name, unic = tounicode[index], glyph.name, glyph.unicode or -1 -- play safe
- if toun then
- logs.report("load otf","internal: 0x%05X, name: %s, unicode: 0x%05X, tounicode: %s",index,name,unic,toun)
- else
- logs.report("load otf","internal: 0x%05X, name: %s, unicode: 0x%05X",index,name,unic)
- end
- end
- end
- if trace_loading and (ns > 0 or nl > 0) then
- logs.report("load otf","enhance: %s tounicode entries added (%s ligatures)",nl+ns, ns)
- end
-end
+otf.enhancers["analyse unicodes"] = fonts.map.add_to_unicode
otf.enhancers["analyse subtables"] = function(data,filename)
data.luatex = data.luatex or { }
@@ -5640,8 +6413,11 @@ otf.enhancers["analyse subtables"] = function(data,filename)
(flags.ignorecombiningmarks and "mark") or false,
(flags.ignoreligatures and "ligature") or false,
(flags.ignorebaseglyphs and "base") or false,
- flags.r2l or false
+ flags.r2l or false,
}
+ if flags.mark_class then
+ gk.markclass = luatex.markclasses[flags.mark_class]
+ end
end
end
end
@@ -5650,7 +6426,10 @@ end
otf.enhancers["merge cid fonts"] = function(data,filename)
-- we can also move the names to data.luatex.names which might
-- save us some more memory (at the cost of harder tracing)
- if data.subfonts and table.is_empty(data.glyphs) then
+ if data.subfonts then
+ if data.glyphs and next(data.glyphs) then
+ logs.report("load otf","replacing existing glyph table due to subfonts")
+ end
local cidinfo = data.cidinfo
local verbose = fonts.verbose
if cidinfo.registry then
@@ -5738,7 +6517,7 @@ otf.enhancers["prepare unicode"] = function(data,filename)
end
end
end
- -- beware: the indeces table is used to initialize the tfm table
+ -- beware: the indices table is used to initialize the tfm table
for unicode, index in next, mapmap do
if not internals[index] then
local name = glyphs[index].name
@@ -5934,6 +6713,129 @@ end
-- kern: ttf has a table with kerns
+--~ otf.enhancers["reorganize kerns"] = function(data,filename)
+--~ local glyphs, mapmap, unicodes = data.glyphs, data.luatex.indices, data.luatex.unicodes
+--~ local mkdone = false
+--~ for index, glyph in next, data.glyphs do
+--~ if glyph.kerns then
+--~ local mykerns = { }
+--~ for k,v in next, 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 not uvc then
+--~ if trace_loading then
+--~ logs.report("load otf","problems with unicode %s of kern %s at glyph %s",vc,k,index)
+--~ end
+--~ else
+--~ if type(vl) ~= "table" then
+--~ vl = { vl }
+--~ end
+--~ for l=1,#vl do
+--~ local vll = vl[l]
+--~ local mkl = mykerns[vll]
+--~ if not mkl then
+--~ mkl = { }
+--~ mykerns[vll] = mkl
+--~ end
+--~ if type(uvc) == "table" then
+--~ for u=1,#uvc do
+--~ mkl[uvc[u]] = vo
+--~ end
+--~ else
+--~ mkl[uvc] = vo
+--~ end
+--~ end
+--~ end
+--~ end
+--~ end
+--~ glyph.mykerns = mykerns
+--~ glyph.kerns = nil -- saves space and time
+--~ mkdone = true
+--~ end
+--~ end
+--~ if trace_loading and mkdone then
+--~ logs.report("load otf", "replacing 'kerns' tables by 'mykerns' tables")
+--~ end
+--~ if data.kerns then
+--~ if trace_loading then
+--~ logs.report("load otf", "removing global 'kern' table")
+--~ end
+--~ data.kerns = nil
+--~ end
+--~ local dgpos = data.gpos
+--~ if dgpos then
+--~ for gp=1,#dgpos do
+--~ local gpos = dgpos[gp]
+--~ local subtables = gpos.subtables
+--~ if subtables then
+--~ for s=1,#subtables do
+--~ local subtable = subtables[s]
+--~ local kernclass = subtable.kernclass -- name is inconsistent with anchor_classes
+--~ if kernclass then -- the next one is quite slow
+--~ for k=1,#kernclass do
+--~ local kcl = kernclass[k]
+--~ local firsts, seconds, offsets, lookups = kcl.firsts, kcl.seconds, kcl.offsets, kcl.lookup -- singular
+--~ if type(lookups) ~= "table" then
+--~ lookups = { lookups }
+--~ end
+--~ for l=1,#lookups do
+--~ local lookup = lookups[l]
+--~ -- weird, as maxfirst and maxseconds can have holes
+--~ local maxfirsts, maxseconds = getn(firsts), getn(seconds)
+--~ if trace_loading then
+--~ logs.report("load otf", "adding kernclass %s with %s times %s pairs",lookup, maxfirsts, maxseconds)
+--~ end
+--~ for fk, fv in next, firsts do
+--~ for first in gmatch(fv,"[^ ]+") do
+--~ local first_unicode = unicodes[first]
+--~ if type(first_unicode) == "number" then
+--~ first_unicode = { first_unicode }
+--~ end
+--~ for f=1,#first_unicode do
+--~ local glyph = glyphs[mapmap[first_unicode[f]]]
+--~ if glyph then
+--~ 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 next, seconds do
+--~ local offset = offsets[(fk-1) * maxseconds + sk]
+--~ --~ local offset = offsets[sk] -- (fk-1) * maxseconds + sk]
+--~ for second in gmatch(sv,"[^ ]+") do
+--~ local second_unicode = unicodes[second]
+--~ if type(second_unicode) == "number" then
+--~ lookupkerns[second_unicode] = offset
+--~ else
+--~ for s=1,#second_unicode do
+--~ lookupkerns[second_unicode[s]] = offset
+--~ end
+--~ end
+--~ end
+--~ end
+--~ elseif trace_loading then
+--~ logs.report("load otf", "no glyph data for U+%04X", first_unicode[f])
+--~ end
+--~ 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
+
otf.enhancers["reorganize kerns"] = function(data,filename)
local glyphs, mapmap, unicodes = data.glyphs, data.luatex.indices, data.luatex.unicodes
local mkdone = false
@@ -5986,6 +6888,9 @@ otf.enhancers["reorganize kerns"] = function(data,filename)
end
local dgpos = data.gpos
if dgpos then
+ local separator = lpeg.P(" ")
+ local other = ((1 - separator)^0) / unicodes
+ local splitter = lpeg.Ct(other * (separator * other)^0)
for gp=1,#dgpos do
local gpos = dgpos[gp]
local subtables = gpos.subtables
@@ -5993,54 +6898,75 @@ otf.enhancers["reorganize kerns"] = function(data,filename)
for s=1,#subtables do
local subtable = subtables[s]
local kernclass = subtable.kernclass -- name is inconsistent with anchor_classes
- if kernclass then
+ if kernclass then -- the next one is quite slow
for k=1,#kernclass do
local kcl = kernclass[k]
local firsts, seconds, offsets, lookups = kcl.firsts, kcl.seconds, kcl.offsets, kcl.lookup -- singular
if type(lookups) ~= "table" then
lookups = { lookups }
end
+ local split = { }
for l=1,#lookups do
local lookup = lookups[l]
+ -- weird, as maxfirst and maxseconds can have holes, first seems to be indexed, seconds starts at 2
local maxfirsts, maxseconds = getn(firsts), getn(seconds)
+ for _, s in next, firsts do
+ split[s] = split[s] or lpegmatch(splitter,s)
+ end
+ for _, s in next, seconds do
+ split[s] = split[s] or lpegmatch(splitter,s)
+ end
if trace_loading then
logs.report("load otf", "adding kernclass %s with %s times %s pairs",lookup, maxfirsts, maxseconds)
end
- for fk, fv in next, firsts do
- for first in gmatch(fv,"[^ ]+") do
- local first_unicode = unicodes[first]
- if type(first_unicode) == "number" then
- first_unicode = { first_unicode }
+ local function do_it(fk,first_unicode)
+ local glyph = glyphs[mapmap[first_unicode]]
+ if glyph then
+ local mykerns = glyph.mykerns
+ if not mykerns then
+ mykerns = { } -- unicode indexed !
+ glyph.mykerns = mykerns
end
- for f=1,#first_unicode do
- local glyph = glyphs[mapmap[first_unicode[f]]]
- if glyph then
- 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 next, seconds do
- local offset = offsets[(fk-1) * maxseconds + sk]
- --~ local offset = offsets[sk] -- (fk-1) * maxseconds + sk]
- for second in gmatch(sv,"[^ ]+") do
- local second_unicode = unicodes[second]
- if type(second_unicode) == "number" then
- lookupkerns[second_unicode] = offset
- else
- for s=1,#second_unicode do
- lookupkerns[second_unicode[s]] = offset
- end
+ local lookupkerns = mykerns[lookup]
+ if not lookupkerns then
+ lookupkerns = { }
+ mykerns[lookup] = lookupkerns
+ end
+ local baseoffset = (fk-1) * maxseconds
+ for sk=2,maxseconds do
+ local sv = seconds[sk]
+ local offset = offsets[baseoffset + sk]
+ --~ local offset = offsets[sk] -- (fk-1) * maxseconds + sk]
+ local splt = split[sv]
+ if splt then
+ for i=1,#splt do
+ local second_unicode = splt[i]
+ if tonumber(second_unicode) then
+ lookupkerns[second_unicode] = offset
+ else
+ for s=1,#second_unicode do
+ lookupkerns[second_unicode[s]] = offset
end
end
end
- elseif trace_loading then
- logs.report("load otf", "no glyph data for U+%04X", first_unicode[f])
+ end
+ end
+ elseif trace_loading then
+ logs.report("load otf", "no glyph data for U+%04X", first_unicode)
+ end
+ end
+ for fk=1,#firsts do
+ local fv = firsts[fk]
+ local splt = split[fv]
+ if splt then
+ for i=1,#splt do
+ local first_unicode = splt[i]
+ if tonumber(first_unicode) then
+ do_it(fk,first_unicode)
+ else
+ for f=1,#first_unicode do
+ do_it(fk,first_unicode[f])
+ end
end
end
end
@@ -6114,10 +7040,31 @@ otf.enhancers["migrate metadata"] = function(data,filename)
metadata.charwidth = pfminfo and pfminfo.avgwidth
end
+local private_math_parameters = {
+ "FractionDelimiterSize",
+ "FractionDelimiterDisplayStyleSize",
+}
+
+otf.enhancers["check math parameters"] = function(data,filename)
+ local mathdata = data.metadata.math
+ if mathdata then
+ for m=1,#private_math_parameters do
+ local pmp = private_math_parameters[m]
+ if not mathdata[pmp] then
+ if trace_loading then
+ logs.report("load otf", "setting math parameter '%s' to 0", pmp)
+ end
+ mathdata[pmp] = 0
+ end
+ end
+ end
+end
+
otf.enhancers["flatten glyph lookups"] = function(data,filename)
for k, v in next, data.glyphs do
- if v.lookups then
- for kk, vv in next, v.lookups do
+ local lookups = v.lookups
+ if lookups then
+ for kk, vv in next, lookups do
for kkk=1,#vv do
local vvv = vv[kkk]
local s = vvv.specification
@@ -6167,6 +7114,31 @@ otf.enhancers["flatten glyph lookups"] = function(data,filename)
end
end
+otf.enhancers["simplify glyph lookups"] = function(data,filename)
+ for k, v in next, data.glyphs do
+ local lookups = v.lookups
+ if lookups then
+ local slookups, mlookups
+ for kk, vv in next, lookups do
+ if #vv == 1 then
+ if not slookups then
+ slookups = { }
+ v.slookups = slookups
+ end
+ slookups[kk] = vv[1]
+ else
+ if not mlookups then
+ mlookups = { }
+ v.mlookups = mlookups
+ end
+ mlookups[kk] = vv
+ end
+ end
+ v.lookups = nil
+ end
+ end
+end
+
otf.enhancers["flatten anchor tables"] = function(data,filename)
for k, v in next, data.glyphs do
if v.anchors then
@@ -6234,10 +7206,12 @@ function otf.features.register(name,default)
otf.features.default[name] = default
end
+-- for context this will become a task handler
+
function otf.set_features(tfmdata,features)
local processes = { }
- if not table.is_empty(features) then
- local lists = {
+ if features and next(features) then
+ local lists = { -- why local
fonts.triggers,
fonts.processors,
fonts.manipulators,
@@ -6274,7 +7248,7 @@ function otf.set_features(tfmdata,features)
end
end
end
- local fm = fonts.methods[mode]
+ local fm = fonts.methods[mode] -- todo: zonder node/mode otf/...
if fm then
local fmotf = fm.otf
if fmotf then
@@ -6311,14 +7285,14 @@ function otf.otf_to_tfm(specification)
--~ print(cache_id)
if not tfmdata then
local otfdata = otf.load(filename,format,sub,features and features.featurefile)
- if not table.is_empty(otfdata) then
+ if otfdata and next(otfdata) then
otfdata.shared = otfdata.shared or {
featuredata = { },
anchorhash = { },
initialized = false,
}
tfmdata = otf.copy_to_tfm(otfdata,cache_id)
- if not table.is_empty(tfmdata) then
+ if tfmdata and next(tfmdata) then
tfmdata.unique = tfmdata.unique or { }
tfmdata.shared = tfmdata.shared or { } -- combine
local shared = tfmdata.shared
@@ -6371,6 +7345,11 @@ end
-- we cannot share descriptions as virtual fonts might extend them (ok, we could
-- use a cache with a hash
+fonts.formats.dfont = "truetype"
+fonts.formats.ttc = "truetype"
+fonts.formats.ttf = "truetype"
+fonts.formats.otf = "opentype"
+
function otf.copy_to_tfm(data,cache_id) -- we can save a copy when we reorder the tma to unicode (nasty due to one->many)
if data then
local glyphs, pfminfo, metadata = data.glyphs or { }, data.pfminfo or { }, data.metadata or { }
@@ -6378,14 +7357,11 @@ function otf.copy_to_tfm(data,cache_id) -- we can save a copy when we reorder th
local unicodes = luatex.unicodes -- names to unicodes
local indices = luatex.indices
local characters, parameters, math_parameters, descriptions = { }, { }, { }, { }
- local tfm = {
- characters = characters,
- parameters = parameters,
- math_parameters = math_parameters,
- descriptions = descriptions,
- indices = indices,
- unicodes = unicodes,
- }
+ local designsize = metadata.designsize or metadata.design_size or 100
+ if designsize == 0 then
+ designsize = 100
+ end
+ local spaceunits = 500
-- indices maps from unicodes to indices
for u, i in next, indices do
characters[u] = { } -- we need this because for instance we add protruding info and loop over characters
@@ -6407,7 +7383,7 @@ function otf.copy_to_tfm(data,cache_id) -- we can save a copy when we reorder th
local variants = m.horiz_variants
if variants then
local c = char
- for n in variants:gmatch("[^ ]+") do
+ for n in gmatch(variants,"[^ ]+") do
local un = unicodes[n]
if un and u ~= un then
c.next = un
@@ -6419,7 +7395,7 @@ function otf.copy_to_tfm(data,cache_id) -- we can save a copy when we reorder th
local variants = m.vert_variants
if variants then
local c = char
- for n in variants:gmatch("[^ ]+") do
+ for n in gmatch(variants,"[^ ]+") do
local un = unicodes[n]
if un and u ~= un then
c.next = un
@@ -6427,6 +7403,7 @@ function otf.copy_to_tfm(data,cache_id) -- we can save a copy when we reorder th
end
end
c.vert_variants = m.vert_parts
+ c.vert_italic_correction = m.vert_italic_correction
end
end
local kerns = m.kerns
@@ -6437,64 +7414,49 @@ function otf.copy_to_tfm(data,cache_id) -- we can save a copy when we reorder th
end
end
-- end math
- local designsize = metadata.designsize or metadata.design_size or 100
- if designsize == 0 then
- designsize = 100
- end
- local spaceunits = 500
- tfm.units = metadata.units_per_em or 1000
- -- we need a runtime lookup because of running from cdrom or zip, brrr
- tfm.filename = resolvers.findbinfile(luatex.filename,"") or luatex.filename
- tfm.fullname = metadata.fontname or metadata.fullname
- tfm.psname = tfm.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"
- local endash, emdash = 0x20, 0x2014 -- unicodes['space'], unicodes['emdash']
+ local endash, emdash, space = 0x20, 0x2014, "space" -- unicodes['space'], unicodes['emdash']
if metadata.isfixedpitch then
if descriptions[endash] then
- spaceunits, tfm.spacer = descriptions[endash].width, "space"
+ spaceunits, spacer = descriptions[endash].width, "space"
end
if not spaceunits and descriptions[emdash] then
- spaceunits, tfm.spacer = descriptions[emdash].width, "emdash"
+ spaceunits, spacer = descriptions[emdash].width, "emdash"
end
if not spaceunits and metadata.charwidth then
- spaceunits, tfm.spacer = metadata.charwidth, "charwidth"
+ spaceunits, spacer = metadata.charwidth, "charwidth"
end
else
if descriptions[endash] then
- spaceunits, tfm.spacer = descriptions[endash].width, "space"
+ spaceunits, spacer = descriptions[endash].width, "space"
end
if not spaceunits and descriptions[emdash] then
- spaceunits, tfm.spacer = descriptions[emdash].width/2, "emdash/2"
+ spaceunits, spacer = descriptions[emdash].width/2, "emdash/2"
end
if not spaceunits and metadata.charwidth then
- spaceunits, tfm.spacer = metadata.charwidth, "charwidth"
+ spaceunits, spacer = metadata.charwidth, "charwidth"
end
end
spaceunits = tonumber(spaceunits) or tfm.units/2 -- 500 -- brrr
+ -- we need a runtime lookup because of running from cdrom or zip, brrr (shouldn't we use the basename then?)
+ local filename = fonts.tfm.checked_filename(luatex)
+ local fontname = metadata.fontname
+ local fullname = metadata.fullname or fontname
+ local cidinfo = data.cidinfo
+ local units = metadata.units_per_em or 1000
+ --
+ cidinfo.registry = cidinfo and cidinfo.registry or "" -- weird here, fix upstream
+ --
parameters.slant = 0
- parameters.space = spaceunits -- 3.333 (cmr10)
- parameters.space_stretch = tfm.units/2 -- 500 -- 1.666 (cmr10)
- parameters.space_shrink = 1*tfm.units/3 -- 333 -- 1.111 (cmr10)
- parameters.x_height = 2*tfm.units/5 -- 400
- parameters.quad = tfm.units -- 1000
- if spaceunits < 2*tfm.units/5 then
+ parameters.space = spaceunits -- 3.333 (cmr10)
+ parameters.space_stretch = units/2 -- 500 -- 1.666 (cmr10)
+ parameters.space_shrink = 1*units/3 -- 333 -- 1.111 (cmr10)
+ parameters.x_height = 2*units/5 -- 400
+ parameters.quad = units -- 1000
+ if spaceunits < 2*units/5 then
-- todo: warning
end
local italicangle = metadata.italicangle
- tfm.ascender = math.abs(metadata.ascent or 0)
- tfm.descender = math.abs(metadata.descent or 0)
if italicangle then -- maybe also in afm _
- tfm.italicangle = italicangle
parameters.slant = parameters.slant - math.round(math.tan(italicangle*math.pi/180))
end
if metadata.isfixedpitch then
@@ -6516,8 +7478,34 @@ function otf.copy_to_tfm(data,cache_id) -- we can save a copy when we reorder th
end
end
end
- -- [6]
- return tfm
+ --
+ return {
+ characters = characters,
+ parameters = parameters,
+ math_parameters = math_parameters,
+ descriptions = descriptions,
+ indices = indices,
+ unicodes = unicodes,
+ type = "real",
+ direction = 0,
+ boundarychar_label = 0,
+ boundarychar = 65536,
+ designsize = (designsize/10)*65536,
+ spacer = "500 units",
+ encodingbytes = 2,
+ filename = filename,
+ fontname = fontname,
+ fullname = fullname,
+ psname = fontname or fullname,
+ name = filename or fullname,
+ units = units,
+ format = fonts.fontformat(filename,"opentype"),
+ cidinfo = cidinfo,
+ ascender = abs(metadata.ascent or 0),
+ descender = abs(metadata.descent or 0),
+ spacer = spacer,
+ italicangle = italicangle,
+ }
else
return nil
end
@@ -6534,6 +7522,7 @@ function tfm.read_from_open_type(specification)
local s = specification.size
local m = otfdata.metadata.math
if m then
+ -- this will move to a function
local f = specification.features
if f then
local f = f.normal
@@ -6561,25 +7550,16 @@ function tfm.read_from_open_type(specification)
end
end
end
- tfmtable = tfm.scale(tfmtable,s)
- -- here we resolve the name; file can be relocated, so this info is not in the cache
- 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 = resolvers.findbinfile(filename,"") or filename
- tfmtable.fullname = tfmtable.fullname or otfdata.metadata.fontname or otfdata.metadata.fullname
- local order = otfdata and otfdata.metadata.order2
- if order == 0 then
- tfmtable.format = 'opentype'
- elseif order == 1 then
- tfmtable.format = 'truetype'
- else
- tfmtable.format = specification.format
+ tfmtable = tfm.scale(tfmtable,s,specification.relativeid)
+ if tfm.fontname_mode == "specification" then
+ -- not to be used in context !
+ local specname = specification.specification
+ if specname then
+ tfmtable.name = specname
+ if trace_defining then
+ logs.report("define font","overloaded fontname: '%s'",specname)
+ end
end
- tfmtable.name = tfmtable.filename or tfmtable.fullname
end
fonts.logger.save(tfmtable,file.extname(specification.filename),specification)
end
@@ -6587,13 +7567,46 @@ function tfm.read_from_open_type(specification)
return tfmtable
end
+-- helpers
+
+function otf.collect_lookups(otfdata,kind,script,language)
+ -- maybe store this in the font
+ local sequences = otfdata.luatex.sequences
+ if sequences then
+ local featuremap, featurelist = { }, { }
+ for s=1,#sequences do
+ local sequence = sequences[s]
+ local features = sequence.features
+ features = features and features[kind]
+ features = features and (features[script] or features[default] or features[wildcard])
+ features = features and (features[language] or features[default] or features[wildcard])
+ if features then
+ local subtables = sequence.subtables
+ if subtables then
+ for s=1,#subtables do
+ local ss = subtables[s]
+ if not featuremap[s] then
+ featuremap[ss] = true
+ featurelist[#featurelist+1] = ss
+ end
+ end
+ end
+ end
+ end
+ if #featurelist > 0 then
+ return featuremap, featurelist
+ end
+ end
+ return nil, nil
+end
+
end -- closure
do -- begin closure to overcome local limits and interference
if not modules then modules = { } end modules ['font-otd'] = {
version = 1.001,
- comment = "companion to font-ini.tex",
+ comment = "companion to font-ini.mkiv",
author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
copyright = "PRAGMA ADE / ConTeXt Development Team",
license = "see context related readme files"
@@ -6676,7 +7689,7 @@ do -- begin closure to overcome local limits and interference
if not modules then modules = { } end modules ['font-oti'] = {
version = 1.001,
- comment = "companion to font-ini.tex",
+ comment = "companion to font-ini.mkiv",
author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
copyright = "PRAGMA ADE / ConTeXt Development Team",
license = "see context related readme files"
@@ -6738,7 +7751,7 @@ do -- begin closure to overcome local limits and interference
if not modules then modules = { } end modules ['font-otb'] = {
version = 1.001,
- comment = "companion to font-ini.tex",
+ comment = "companion to font-ini.mkiv",
author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
copyright = "PRAGMA ADE / ConTeXt Development Team",
license = "see context related readme files"
@@ -6747,6 +7760,7 @@ if not modules then modules = { } end modules ['font-otb'] = {
local concat = table.concat
local format, gmatch, gsub, find, match, lower, strip = string.format, string.gmatch, string.gsub, string.find, string.match, string.lower, string.strip
local type, next, tonumber, tostring = type, next, tonumber, tostring
+local lpegmatch = lpeg.match
local otf = fonts.otf
local tfm = fonts.tfm
@@ -6807,7 +7821,7 @@ local function resolve_ligatures(tfmdata,ligatures,kind)
for k,v in next, ligatures do
local lig = v[1]
if not done[lig] then
- local ligs = split_at_space:match(lig)
+ local ligs = lpegmatch(split_at_space,lig)
if #ligs == 2 then
local uc = v[2]
local c, f, s = characters[uc], ligs[1], ligs[2]
@@ -6871,43 +7885,12 @@ local function resolve_ligatures(tfmdata,ligatures,kind)
end
end
-local function collect_lookups(otfdata,kind,script,language)
- -- maybe store this in the font
- local sequences = otfdata.luatex.sequences
- if sequences then
- local featuremap, featurelist = { }, { }
- for s=1,#sequences do
- local sequence = sequences[s]
- local features = sequence.features
- features = features and features[kind]
- features = features and (features[script] or features[default] or features[wildcard])
- features = features and (features[language] or features[default] or features[wildcard])
- if features then
- local subtables = sequence.subtables
- if subtables then
- for s=1,#subtables do
- local ss = subtables[s]
- if not featuremap[s] then
- featuremap[ss] = true
- featurelist[#featurelist+1] = ss
- end
- end
- end
- end
- end
- if #featurelist > 0 then
- return featuremap, featurelist
- end
- end
- return nil, nil
-end
-
local splitter = lpeg.splitat(" ")
function prepare_base_substitutions(tfmdata,kind,value) -- we can share some code with the node features
if value then
local otfdata = tfmdata.shared.otfdata
- local validlookups, lookuplist = collect_lookups(otfdata,kind,tfmdata.script,tfmdata.language)
+ local validlookups, lookuplist = otf.collect_lookups(otfdata,kind,tfmdata.script,tfmdata.language)
if validlookups then
local ligatures = { }
local unicodes = tfmdata.unicodes -- names to unicodes
@@ -6915,9 +7898,84 @@ function prepare_base_substitutions(tfmdata,kind,value) -- we can share some cod
local characters = tfmdata.characters
local descriptions = tfmdata.descriptions
local changed = tfmdata.changed
+ --
+ local actions = {
+ substitution = function(p,lookup,k,glyph,unicode)
+ local pv = p[2] -- p.variant
+ if pv then
+ local upv = unicodes[pv]
+ if upv then
+ if type(upv) == "table" then
+ upv = upv[1]
+ end
+ if characters[upv] then
+ if trace_baseinit and trace_singles then
+ logs.report("define otf","%s: base substitution %s => %s",cref(kind,lookup),gref(descriptions,k),gref(descriptions,upv))
+ end
+ changed[k] = upv
+ end
+ end
+ end
+ end,
+ alternate = function(p,lookup,k,glyph,unicode)
+ local pc = p[2] -- p.components
+ if pc then
+ -- a bit optimized ugliness
+ if value == 1 then
+ pc = lpegmatch(splitter,pc)
+ elseif value == 2 then
+ local a, b = lpegmatch(splitter,pc)
+ pc = b or a
+ else
+ pc = { lpegmatch(splitter,pc) }
+ pc = pc[value] or pc[#pc]
+ end
+ if pc then
+ local upc = unicodes[pc]
+ if upc then
+ if type(upc) == "table" then
+ upc = upc[1]
+ end
+ if characters[upc] then
+ if trace_baseinit and trace_alternatives then
+ logs.report("define otf","%s: base alternate %s %s => %s",cref(kind,lookup),tostring(value),gref(descriptions,k),gref(descriptions,upc))
+ end
+ changed[k] = upc
+ end
+ end
+ end
+ end
+ end,
+ ligature = function(p,lookup,k,glyph,unicode)
+ local pc = p[2]
+ if pc then
+ if trace_baseinit and trace_ligatures then
+ local upc = { lpegmatch(splitter,pc) }
+ for i=1,#upc do upc[i] = unicodes[upc[i]] end
+ -- we assume that it's no table
+ logs.report("define otf","%s: base ligature %s => %s",cref(kind,lookup),gref(descriptions,upc),gref(descriptions,k))
+ end
+ ligatures[#ligatures+1] = { pc, k }
+ end
+ end,
+ }
+ --
for k,c in next, characters do
local glyph = descriptions[k]
- local lookups = glyph.lookups
+ local lookups = glyph.slookups
+ if lookups then
+ for l=1,#lookuplist do
+ local lookup = lookuplist[l]
+ local p = lookups[lookup]
+ if p then
+ local a = actions[p[1]]
+ if a then
+ a(p,lookup,k,glyph,unicode)
+ end
+ end
+ end
+ end
+ local lookups = glyph.mlookups
if lookups then
for l=1,#lookuplist do
local lookup = lookuplist[l]
@@ -6925,62 +7983,9 @@ function prepare_base_substitutions(tfmdata,kind,value) -- we can share some cod
if ps 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 then
- if type(upv) == "table" then
- upv = upv[1]
- end
- if characters[upv] then
- if trace_baseinit and trace_singles then
- logs.report("define otf","%s: base substitution %s => %s",cref(kind,lookup),gref(descriptions,k),gref(descriptions,upv))
- end
- changed[k] = upv
- end
- end
- end
- elseif t == 'alternate' then
- local pc = p[2] -- p.components
- if pc then
- -- a bit optimized ugliness
- if value == 1 then
- pc = splitter:match(pc)
- elseif value == 2 then
- local a, b = splitter:match(pc)
- pc = b or a
- else
- pc = { splitter:match(pc) }
- pc = pc[value] or pc[#pc]
- end
- if pc then
- local upc = unicodes[pc]
- if upc then
- if type(upc) == "table" then
- upc = upc[1]
- end
- if characters[upc] then
- if trace_baseinit and trace_alternatives then
- logs.report("define otf","%s: base alternate %s => %s",cref(kind,lookup),gref(descriptions,k),gref(descriptions,upc))
- end
- changed[k] = upc
- end
- end
- end
- end
- elseif t == 'ligature' and not changed[k] then
- local pc = p[2]
- if pc then
- if trace_baseinit and trace_ligatures then
- local upc = { splitter:match(pc) }
- for i=1,#upc do upc[i] = unicodes[upc[i]] end
- -- we assume that it's no table
- logs.report("define otf","%s: base ligature %s => %s",cref(kind,lookup),gref(descriptions,upc),gref(descriptions,k))
- end
- ligatures[#ligatures+1] = { pc, k }
- end
+ local a = actions[p[1]]
+ if a then
+ a(p,lookup,k,glyph,unicode)
end
end
end
@@ -6997,37 +8002,46 @@ end
local function prepare_base_kerns(tfmdata,kind,value) -- todo what kind of kerns, currently all
if value then
local otfdata = tfmdata.shared.otfdata
- local validlookups, lookuplist = collect_lookups(otfdata,kind,tfmdata.script,tfmdata.language)
+ local validlookups, lookuplist = otf.collect_lookups(otfdata,kind,tfmdata.script,tfmdata.language)
if validlookups then
local unicodes = tfmdata.unicodes -- names to unicodes
local indices = tfmdata.indices
local characters = tfmdata.characters
local descriptions = tfmdata.descriptions
+ local sharedkerns = { }
for u, chr in next, characters do
local d = descriptions[u]
if d then
- local dk = d.mykerns
+ local dk = d.mykerns -- shared
if dk then
- local t, done = chr.kerns or { }, false
- for l=1,#lookuplist do
- local lookup = lookuplist[l]
- local kerns = dk[lookup]
- if kerns then
- for k, v in next, kerns do
- if v ~= 0 and not t[k] then -- maybe no 0 test here
- t[k], done = v, true
- if trace_baseinit and trace_kerns then
- logs.report("define otf","%s: base kern %s + %s => %s",cref(kind,lookup),gref(descriptions,u),gref(descriptions,k),v)
+ local s = sharedkerns[dk]
+ if s == false then
+ -- skip
+ elseif s then
+ chr.kerns = s
+ else
+ local t, done = chr.kerns or { }, false
+ for l=1,#lookuplist do
+ local lookup = lookuplist[l]
+ local kerns = dk[lookup]
+ if kerns then
+ for k, v in next, kerns do
+ if v ~= 0 and not t[k] then -- maybe no 0 test here
+ t[k], done = v, true
+ if trace_baseinit and trace_kerns then
+ logs.report("define otf","%s: base kern %s + %s => %s",cref(kind,lookup),gref(descriptions,u),gref(descriptions,k),v)
+ end
end
end
end
end
+ if done then
+ sharedkerns[dk] = t
+ chr.kerns = t -- no empty assignments
+ else
+ sharedkerns[dk] = false
+ end
end
- if done then
- chr.kerns = t -- no empty assignments
- end
- -- elseif d.kerns then
- -- logs.report("define otf","%s: invalid mykerns for %s",cref(kind),gref(descriptions,u))
end
end
end
@@ -7042,12 +8056,13 @@ end
-- to do complete mixed runs and not run featurewise (as we did before).
local supported_gsub = {
- 'liga','dlig','rlig','hlig',
- 'pnum','onum','tnum','lnum',
+ 'liga', 'dlig', 'rlig', 'hlig',
+ 'pnum', 'onum', 'tnum', 'lnum',
'zero',
- 'smcp','cpsp','c2sc','ornm','aalt',
- 'hwid','fwid',
- 'ssty', -- math
+ 'smcp', 'cpsp', 'c2sc', 'ornm', 'aalt',
+ 'hwid', 'fwid',
+ 'ssty', 'rtlm', -- math
+-- 'tlig', 'trep',
}
local supported_gpos = {
@@ -7114,7 +8129,7 @@ do -- begin closure to overcome local limits and interference
if not modules then modules = { } end modules ['font-otn'] = {
version = 1.001,
- comment = "companion to font-ini.tex",
+ comment = "companion to font-ini.mkiv",
author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
copyright = "PRAGMA ADE / ConTeXt Development Team",
license = "see context related readme files"
@@ -7124,6 +8139,11 @@ if not modules then modules = { } end modules ['font-otn'] = {
-- much functionality could only be implemented thanks to the husayni font
-- of Idris Samawi Hamid to who we dedicate this module.
+-- I'm in the process of cleaning up the code (which happens in another
+-- file) so don't rely on things staying the same.
+
+-- some day when we can jit this, we can use more functions
+
-- we can use more lpegs when lpeg is extended with function args and so
-- resolving to unicode does not gain much
@@ -7229,9 +8249,10 @@ results in different tables.</p>
-- remark: the 'not implemented yet' variants will be done when we have fonts that use them
-- remark: we need to check what to do with discretionaries
-local concat = table.concat
+local concat, insert, remove = table.concat, table.insert, table.remove
local format, gmatch, gsub, find, match, lower, strip = string.format, string.gmatch, string.gsub, string.find, string.match, string.lower, string.strip
local type, next, tonumber, tostring = type, next, tonumber, tostring
+local lpegmatch = lpeg.match
local otf = fonts.otf
local tfm = fonts.tfm
@@ -7250,6 +8271,8 @@ local trace_bugs = false trackers.register("otf.bugs", function
local trace_details = false trackers.register("otf.details", function(v) trace_details = v end)
local trace_applied = false trackers.register("otf.applied", function(v) trace_applied = v end)
local trace_steps = false trackers.register("otf.steps", function(v) trace_steps = v end)
+local trace_skips = false trackers.register("otf.skips", function(v) trace_skips = v end)
+local trace_directions = false trackers.register("otf.directions", function(v) trace_directions = v end)
trackers.register("otf.verbose_chain", function(v) otf.setcontextchain(v and "verbose") end)
trackers.register("otf.normal_chain", function(v) otf.setcontextchain(v and "normal") end)
@@ -7273,7 +8296,7 @@ local zwj = 0x200D
local wildcard = "*"
local default = "dflt"
-local split_at_space = lpeg.Ct(lpeg.splitat(" ")) -- no trailing or multiple spaces anyway
+local split_at_space = lpeg.splitters[" "] or lpeg.Ct(lpeg.splitat(" ")) -- no trailing or multiple spaces anyway
local glyph = node.id('glyph')
local glue = node.id('glue')
@@ -7415,16 +8438,30 @@ end
local function toligature(kind,lookupname,start,stop,char,markflag,discfound) -- brr head
if start ~= stop then
+--~ if discfound then
+--~ local lignode = copy_node(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
if discfound then
+ -- print("start->stop",nodes.tosequence(start,stop))
local lignode = copy_node(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
+ lignode.font, lignode.char, lignode.subtype = start.font, char, 2
+ local next, prev = stop.next, start.prev
+ stop.next = nil
+ lignode = node.do_ligature_n(start, stop, lignode)
+ prev.next = lignode
+ if next then
+ next.prev = lignode
+ end
+ lignode.next, lignode.prev = next, prev
+ start = lignode
+ -- print("start->end",nodes.tosequence(start))
else -- start is the ligature
local deletemarks = markflag ~= "mark"
local n = copy_node(start)
@@ -7499,16 +8536,19 @@ local function alternative_glyph(start,alternatives,kind,chainname,chainlookupna
value, choice = format("first, choice %s",1), alternatives[1]
elseif value == "last" then
value, choice = format("last, choice %s",n), alternatives[n]
- elseif type(value) ~= "number" then
- value, choice = "default, choice 1", alternatives[1]
- elseif value > n then
- value, choice = format("no %s variants, taking %s",value,n), alternatives[n]
- elseif value == 0 then
- value, choice = format("choice %s (no change)",value), start.char
- elseif value < 1 then
- value, choice = format("no %s variants, taking %s",value,1), alternatives[1]
else
- value, choice = format("choice %s",value), alternatives[value]
+ value = tonumber(value)
+ if type(value) ~= "number" then
+ value, choice = "default, choice 1", alternatives[1]
+ elseif value > n then
+ value, choice = format("no %s variants, taking %s",value,n), alternatives[n]
+ elseif value == 0 then
+ value, choice = format("choice %s (no change)",value), start.char
+ elseif value < 1 then
+ value, choice = format("no %s variants, taking %s",value,1), alternatives[1]
+ else
+ value, choice = format("choice %s",value), alternatives[value]
+ end
end
if not choice then
logwarning("%s: no variant %s for %s",cref(kind,chainname,chainlookupname,lookupname),value,gref(start.char))
@@ -7550,7 +8590,8 @@ end
function handlers.gsub_ligature(start,kind,lookupname,ligature,sequence) --or maybe pass lookup ref
local s, stop, discfound = start.next, nil, false
- if marks[start.char] then
+ local startchar = start.char
+ if marks[startchar] then
while s do
local id = s.id
if id == glyph and s.subtype<256 then
@@ -7573,7 +8614,7 @@ function handlers.gsub_ligature(start,kind,lookupname,ligature,sequence) --or ma
end
if stop and ligature[2] then
if trace_ligatures then
- local startchar, stopchar = start.char, stop.char
+ local stopchar = stop.char
start = markstoligature(kind,lookupname,start,stop,ligature[2])
logprocess("%s: replacing %s upto %s by ligature %s",pref(kind,lookupname),gref(startchar),gref(stopchar),gref(start.char))
else
@@ -7612,7 +8653,7 @@ function handlers.gsub_ligature(start,kind,lookupname,ligature,sequence) --or ma
end
if stop and ligature[2] then
if trace_ligatures then
- local startchar, stopchar = start.char, stop.char
+ local stopchar = stop.char
start = toligature(kind,lookupname,start,stop,ligature[2],skipmark,discfound)
logprocess("%s: replacing %s upto %s by ligature %s",pref(kind,lookupname),gref(startchar),gref(stopchar),gref(start.char))
else
@@ -7838,7 +8879,7 @@ function handlers.gpos_cursive(start,kind,lookupname,exitanchors,sequence) -- to
if exit then
local dx, dy, bound = set_cursive(start,nxt,tfmdata.factor,rlmode,exit,entry,characters[startchar],characters[nextchar])
if trace_cursive then
- logprocess("%s: moving %s to %s cursive (%s,%s) using anchor %s and bound %s",pref(kind,lookupname),gref(startchar),gref(nextchar),dx,dy,anchor,bound)
+ logprocess("%s: moving %s to %s cursive (%s,%s) using anchor %s and bound %s in rlmode %s",pref(kind,lookupname),gref(startchar),gref(nextchar),dx,dy,anchor,bound,rlmode)
end
done = true
break
@@ -7866,9 +8907,9 @@ end
function handlers.gpos_single(start,kind,lookupname,kerns,sequence)
local startchar = start.char
- local dx, dy = set_pair(start,tfmdata.factor,rlmode,kerns,characters[startchar])
+ local dx, dy, w, h = set_pair(start,tfmdata.factor,rlmode,sequence.flags[4],kerns,characters[startchar])
if trace_kerns then
- logprocess("%s: shifting single %s by (%s,%s)",pref(kind,lookupname),gref(startchar),dx,dy)
+ logprocess("%s: shifting single %s by (%s,%s) and correction (%s,%s)",pref(kind,lookupname),gref(startchar),dx,dy,w,h)
end
return start, false
end
@@ -7897,14 +8938,14 @@ local krn = kerns[nextchar]
local a, b = krn[3], krn[4]
if a and #a > 0 then
local startchar = start.char
- local x, y, w, h = set_pair(start,factor,rlmode,a,characters[startchar])
+ local x, y, w, h = set_pair(start,factor,rlmode,sequence.flags[4],a,characters[startchar])
if trace_kerns then
logprocess("%s: shifting first of pair %s and %s by (%s,%s) and correction (%s,%s)",pref(kind,lookupname),gref(startchar),gref(nextchar),x,y,w,h)
end
end
if b and #b > 0 then
local startchar = start.char
- local x, y, w, h = set_pair(snext,factor,rlmode,b,characters[nextchar])
+ local x, y, w, h = set_pair(snext,factor,rlmode,sequence.flags[4],b,characters[nextchar])
if trace_kerns then
logprocess("%s: shifting second of pair %s and %s by (%s,%s) and correction (%s,%s)",pref(kind,lookupname),gref(startchar),gref(nextchar),x,y,w,h)
end
@@ -8490,7 +9531,7 @@ function chainprocs.gpos_cursive(start,stop,kind,chainname,currentcontext,cache,
if exit then
local dx, dy, bound = set_cursive(start,nxt,tfmdata.factor,rlmode,exit,entry,characters[startchar],characters[nextchar])
if trace_cursive then
- logprocess("%s: moving %s to %s cursive (%s,%s) using anchor %s and bound %s",pref(kind,lookupname),gref(startchar),gref(nextchar),dx,dy,anchor,bound)
+ logprocess("%s: moving %s to %s cursive (%s,%s) using anchor %s and bound %s in rlmode %s",pref(kind,lookupname),gref(startchar),gref(nextchar),dx,dy,anchor,bound,rlmode)
end
done = true
break
@@ -8518,7 +9559,7 @@ function chainprocs.gpos_cursive(start,stop,kind,chainname,currentcontext,cache,
return start, false
end
-function chainprocs.gpos_single(start,stop,kind,chainname,currentcontext,cache,currentlookup,chainlookupname)
+function chainprocs.gpos_single(start,stop,kind,chainname,currentcontext,cache,currentlookup,chainlookupname,chainindex,sequence)
-- untested
local startchar = start.char
local subtables = currentlookup.subtables
@@ -8527,9 +9568,9 @@ function chainprocs.gpos_single(start,stop,kind,chainname,currentcontext,cache,c
if kerns then
kerns = kerns[startchar]
if kerns then
- local dx, dy = set_pair(start,tfmdata.factor,rlmode,kerns,characters[startchar])
+ local dx, dy, w, h = set_pair(start,tfmdata.factor,rlmode,sequence.flags[4],kerns,characters[startchar])
if trace_kerns then
- logprocess("%s: shifting single %s by (%s,%s)",cref(kind,chainname,chainlookupname),gref(startchar),dx,dy)
+ logprocess("%s: shifting single %s by (%s,%s) and correction (%s,%s)",cref(kind,chainname,chainlookupname),gref(startchar),dx,dy,w,h)
end
end
end
@@ -8538,7 +9579,7 @@ end
-- when machines become faster i will make a shared function
-function chainprocs.gpos_pair(start,stop,kind,chainname,currentcontext,cache,currentlookup,chainlookupname)
+function chainprocs.gpos_pair(start,stop,kind,chainname,currentcontext,cache,currentlookup,chainlookupname,chainindex,sequence)
-- logwarning("%s: gpos_pair not yet supported",cref(kind,chainname,chainlookupname))
local snext = start.next
if snext then
@@ -8553,12 +9594,11 @@ function chainprocs.gpos_pair(start,stop,kind,chainname,currentcontext,cache,cur
local factor = tfmdata.factor
while snext and snext.id == glyph and snext.subtype<256 and snext.font == currentfont do
local nextchar = snext.char
-local krn = kerns[nextchar]
+ local krn = kerns[nextchar]
if not krn and marks[nextchar] then
prev = snext
snext = snext.next
else
---~ local krn = kerns[nextchar]
if not krn then
-- skip
elseif type(krn) == "table" then
@@ -8566,14 +9606,14 @@ local krn = kerns[nextchar]
local a, b = krn[3], krn[4]
if a and #a > 0 then
local startchar = start.char
- local x, y, w, h = set_pair(start,factor,rlmode,a,characters[startchar])
+ local x, y, w, h = set_pair(start,factor,rlmode,sequence.flags[4],a,characters[startchar])
if trace_kerns then
logprocess("%s: shifting first of pair %s and %s by (%s,%s) and correction (%s,%s)",cref(kind,chainname,chainlookupname),gref(startchar),gref(nextchar),x,y,w,h)
end
end
if b and #b > 0 then
local startchar = start.char
- local x, y, w, h = set_pair(snext,factor,rlmode,b,characters[nextchar])
+ local x, y, w, h = set_pair(snext,factor,rlmode,sequence.flags[4],b,characters[nextchar])
if trace_kerns then
logprocess("%s: shifting second of pair %s and %s by (%s,%s) and correction (%s,%s)",cref(kind,chainname,chainlookupname),gref(startchar),gref(nextchar),x,y,w,h)
end
@@ -8617,19 +9657,30 @@ end
-- we don't need to pass the currentcontext, saves a bit
-- make a slow variant then can be activated but with more tracing
+local function show_skip(kind,chainname,char,ck,class)
+ if ck[9] then
+ logwarning("%s: skipping char %s (%s) in rule %s, lookuptype %s (%s=>%s)",cref(kind,chainname),gref(char),class,ck[1],ck[2],ck[9],ck[10])
+ else
+ logwarning("%s: skipping char %s (%s) in rule %s, lookuptype %s",cref(kind,chainname),gref(char),class,ck[1],ck[2])
+ end
+end
+
local function normal_handle_contextchain(start,kind,chainname,contexts,sequence,cache)
-- local rule, lookuptype, sequence, f, l, lookups = ck[1], ck[2] ,ck[3], ck[4], ck[5], ck[6]
local flags, done = sequence.flags, false
local skipmark, skipligature, skipbase = flags[1], flags[2], flags[3]
local someskip = skipmark or skipligature or skipbase -- could be stored in flags for a fast test (hm, flags could be false !)
+ local markclass = sequence.markclass -- todo, first we need a proper test
+ local skipped = false
for k=1,#contexts do
local match, current, last = true, start, start
local ck = contexts[k]
- local sequence = ck[3]
- local s = #sequence
+ local seq = ck[3]
+ local s = #seq
+ -- f..l = mid string
if s == 1 then
-- never happens
- match = current.id == glyph and current.subtype<256 and current.font == currentfont and sequence[1][current.char]
+ match = current.id == glyph and current.subtype<256 and current.font == currentfont and seq[1][current.char]
else
-- todo: better space check (maybe check for glue)
local f, l = ck[4], ck[5]
@@ -8643,7 +9694,7 @@ local function normal_handle_contextchain(start,kind,chainname,contexts,sequence
-- we cannot optimize for n=2 because there can be disc nodes
-- if not someskip and n == l then
-- -- n=2 and no skips then faster loop
- -- match = last and last.id == glyph and last.subtype<256 and last.font == currentfont and sequence[n][last.char]
+ -- match = last and last.id == glyph and last.subtype<256 and last.font == currentfont and seq[n][last.char]
-- else
while n <= l do
if last then
@@ -8654,11 +9705,13 @@ local function normal_handle_contextchain(start,kind,chainname,contexts,sequence
local ccd = descriptions[char]
if ccd then
local class = ccd.class
- if class == skipmark or class == skipligature or class == skipbase then
---~ if someskip and class == skipmark or class == skipligature or class == skipbase then
- -- skip 'm
+ if class == skipmark or class == skipligature or class == skipbase or (markclass and class == "mark" and not markclass[char]) then
+ skipped = true
+ if trace_skips then
+ show_skip(kind,chainname,char,ck,class)
+ end
last = last.next
- elseif sequence[n][char] then
+ elseif seq[n][char] then
if n < l then
last = last.next
end
@@ -8684,6 +9737,7 @@ local function normal_handle_contextchain(start,kind,chainname,contexts,sequence
-- end
end
if match and f > 1 then
+ -- before
local prev = start.prev
if prev then
local n = f-1
@@ -8696,10 +9750,12 @@ local function normal_handle_contextchain(start,kind,chainname,contexts,sequence
local ccd = descriptions[char]
if ccd then
local class = ccd.class
- if class == skipmark or class == skipligature or class == skipbase then
---~ if someskip and class == skipmark or class == skipligature or class == skipbase then
- -- skip 'm
- elseif sequence[n][char] then
+ if class == skipmark or class == skipligature or class == skipbase or (markclass and class == "mark" and not markclass[char]) then
+ skipped = true
+ if trace_skips then
+ show_skip(kind,chainname,char,ck,class)
+ end
+ elseif seq[n][char] then
n = n -1
else
match = false break
@@ -8712,32 +9768,33 @@ local function normal_handle_contextchain(start,kind,chainname,contexts,sequence
end
elseif id == disc then
-- skip 'm
- elseif sequence[n][32] then
+ elseif seq[n][32] then
n = n -1
else
match = false break
end
prev = prev.prev
- elseif sequence[n][32] then
+ elseif seq[n][32] then
n = n -1
else
match = false break
end
end
elseif f == 2 then
- match = sequence[1][32]
+ match = seq[1][32]
else
for n=f-1,1 do
- if not sequence[n][32] then
+ if not seq[n][32] then
match = false break
end
end
end
end
if match and s > l then
+ -- after
local current = last.next
if current then
- -- removed optimiziation for s-l == 1, we have to deal with marks anyway
+ -- removed optimization for s-l == 1, we have to deal with marks anyway
local n = l + 1
while n <= s do
if current then
@@ -8748,10 +9805,12 @@ local function normal_handle_contextchain(start,kind,chainname,contexts,sequence
local ccd = descriptions[char]
if ccd then
local class = ccd.class
- if class == skipmark or class == skipligature or class == skipbase then
---~ if someskip and class == skipmark or class == skipligature or class == skipbase then
- -- skip 'm
- elseif sequence[n][char] then
+ if class == skipmark or class == skipligature or class == skipbase or (markclass and class == "mark" and not markclass[char]) then
+ skipped = true
+ if trace_skips then
+ show_skip(kind,chainname,char,ck,class)
+ end
+ elseif seq[n][char] then
n = n + 1
else
match = false break
@@ -8764,23 +9823,23 @@ local function normal_handle_contextchain(start,kind,chainname,contexts,sequence
end
elseif id == disc then
-- skip 'm
- elseif sequence[n][32] then -- brrr
+ elseif seq[n][32] then -- brrr
n = n + 1
else
match = false break
end
current = current.next
- elseif sequence[n][32] then
+ elseif seq[n][32] then
n = n + 1
else
match = false break
end
end
elseif s-l == 1 then
- match = sequence[s][32]
+ match = seq[s][32]
else
for n=l+1,s do
- if not sequence[n][32] then
+ if not seq[n][32] then
match = false break
end
end
@@ -8790,7 +9849,7 @@ local function normal_handle_contextchain(start,kind,chainname,contexts,sequence
if match then
-- ck == currentcontext
if trace_contexts then
- local rule, lookuptype, sequence, f, l = ck[1], ck[2] ,ck[3], ck[4], ck[5]
+ local rule, lookuptype, f, l = ck[1], ck[2], ck[4], ck[5]
local char = start.char
if ck[9] then
logwarning("%s: rule %s matches at char %s for (%s,%s,%s) chars, lookuptype %s (%s=>%s)",cref(kind,chainname),rule,gref(char),f-1,l-f+1,s-l,lookuptype,ck[9],ck[10])
@@ -8807,39 +9866,79 @@ local function normal_handle_contextchain(start,kind,chainname,contexts,sequence
local chainlookup = lookuptable[chainlookupname]
local cp = chainprocs[chainlookup.type]
if cp then
- start, done = cp(start,last,kind,chainname,ck,cache,chainlookup,chainlookupname)
+ start, done = cp(start,last,kind,chainname,ck,cache,chainlookup,chainlookupname,nil,sequence)
else
logprocess("%s: %s is not yet supported",cref(kind,chainname,chainlookupname),chainlookup.type)
end
else
-- actually this needs a more complex treatment for which we will use chainmores
+--~ local i = 1
+--~ repeat
+--~ local chainlookupname = chainlookups[i]
+--~ local chainlookup = lookuptable[chainlookupname]
+--~ local cp = chainmores[chainlookup.type]
+--~ if cp then
+--~ local ok, n
+--~ start, ok, n = cp(start,last,kind,chainname,ck,cache,chainlookup,chainlookupname,i,sequence)
+--~ -- messy since last can be changed !
+--~ if ok then
+--~ done = true
+--~ start = start.next
+--~ if n then
+--~ -- skip next one(s) if ligature
+--~ i = i + n - 1
+--~ end
+--~ end
+--~ else
+--~ logprocess("%s: multiple subchains for %s are not yet supported",cref(kind,chainname,chainlookupname),chainlookup.type)
+--~ end
+--~ i = i + 1
+--~ until i > nofchainlookups
+
local i = 1
repeat
+if skipped then
+ while true do
+ local char = start.char
+ local ccd = descriptions[char]
+ if ccd then
+ local class = ccd.class
+ if class == skipmark or class == skipligature or class == skipbase or (markclass and class == "mark" and not markclass[char]) then
+ start = start.next
+ else
+ break
+ end
+ else
+ break
+ end
+ end
+end
local chainlookupname = chainlookups[i]
local chainlookup = lookuptable[chainlookupname]
local cp = chainmores[chainlookup.type]
if cp then
local ok, n
- start, ok, n = cp(start,last,kind,chainname,ck,cache,chainlookup,chainlookupname,i)
+ start, ok, n = cp(start,last,kind,chainname,ck,cache,chainlookup,chainlookupname,i,sequence)
-- messy since last can be changed !
if ok then
done = true
- start = start.next
- if n then
- -- skip next one(s) if ligature
- i = i + n - 1
- end
+ -- skip next one(s) if ligature
+ i = i + (n or 1)
+ else
+ i = i + 1
end
else
logprocess("%s: multiple subchains for %s are not yet supported",cref(kind,chainname,chainlookupname),chainlookup.type)
+ i = i + 1
end
- i = i + 1
+ start = start.next
until i > nofchainlookups
+
end
else
local replacements = ck[7]
if replacements then
- start, done = chainprocs.reversesub(start,last,kind,chainname,ck,cache,replacements)
+ start, done = chainprocs.reversesub(start,last,kind,chainname,ck,cache,replacements) -- sequence
else
done = true -- can be meant to be skipped
if trace_contexts then
@@ -8911,6 +10010,8 @@ end
local resolved = { } -- we only resolve a font,script,language pair once
+-- todo: pass all these 'locals' in a table
+
function fonts.methods.node.otf.features(head,font,attr)
if trace_steps then
checkstep(head)
@@ -8954,6 +10055,7 @@ function fonts.methods.node.otf.features(head,font,attr)
local ra = rl [attr] if ra == nil then ra = { } rl [attr] = ra end -- attr can be false
-- sequences always > 1 so no need for optimization
for s=1,#sequences do
+ local pardir, txtdir = 0, { }
local success = false
local sequence = sequences[s]
local r = ra[s] -- cache
@@ -8979,12 +10081,10 @@ function fonts.methods.node.otf.features(head,font,attr)
-- only first attribute match check, so we assume simple fina's
-- default can become a font feature itself
if l[language] then
---~ valid, what = true, language
valid, what = s_e or a_e, language
-- elseif l[default] then
-- valid, what = true, default
elseif l[wildcard] then
---~ valid, what = true, wildcard
valid, what = s_e or a_e, wildcard
end
if valid then
@@ -9019,12 +10119,12 @@ function fonts.methods.node.otf.features(head,font,attr)
local handler = handlers[typ]
local thecache = featuredata[typ] or { }
-- we need to get rid of this slide !
- start = find_node_tail(head) -- slow (we can store tail because there's always a skip at the end): todo
+ local start = find_node_tail(head) -- slow (we can store tail because there's always a skip at the end): todo
while start do
local id = start.id
if id == glyph then
---~ if start.subtype<256 and start.font == font and (not attr or has_attribute(start,0,attr)) then
- if start.subtype<256 and start.font == font and has_attribute(start,0,attr) then
+ if start.subtype<256 and start.font == font and (not attr or has_attribute(start,0,attr)) then
+--~ if start.subtype<256 and start.font == font and has_attribute(start,0,attr) then
for i=1,#subtables do
local lookupname = subtables[i]
local lookupcache = thecache[lookupname]
@@ -9052,8 +10152,8 @@ function fonts.methods.node.otf.features(head,font,attr)
local handler = handlers[typ]
local ns = #subtables
local thecache = featuredata[typ] or { }
- start = head -- local ?
- rlmode = 0
+ local start = head -- local ?
+ rlmode = 0 -- to be checked ?
if ns == 1 then
local lookupname = subtables[1]
local lookupcache = thecache[lookupname]
@@ -9063,8 +10163,8 @@ function fonts.methods.node.otf.features(head,font,attr)
while start do
local id = start.id
if id == glyph then
---~ if start.font == font and start.subtype<256 and (not attr or has_attribute(start,0,attr)) and (not attribute or has_attribute(start,state,attribute)) then
- if start.font == font and start.subtype<256 and has_attribute(start,0,attr) and (not attribute or has_attribute(start,state,attribute)) then
+--~ if start.font == font and start.subtype<256 and has_attribute(start,0,attr) and (not attribute or has_attribute(start,state,attribute)) then
+ if start.font == font and start.subtype<256 and (not attr or has_attribute(start,0,attr)) and (not attribute or has_attribute(start,state,attribute)) then
local lookupmatch = lookupcache[start.char]
if lookupmatch then
-- sequence kan weg
@@ -9097,21 +10197,35 @@ function fonts.methods.node.otf.features(head,font,attr)
local subtype = start.subtype
if subtype == 7 then
local dir = start.dir
- if dir == "+TRT" then
+ if dir == "+TRT" or dir == "+TLT" then
+ insert(txtdir,dir)
+ elseif dir == "-TRT" or dir == "-TLT" then
+ remove(txtdir)
+ end
+ local d = txtdir[#txtdir]
+ if d == "+TRT" then
rlmode = -1
- elseif dir == "+TLT" then
+ elseif d == "+TLT" then
rlmode = 1
else
- rlmode = 0
+ rlmode = pardir
+ end
+ if trace_directions then
+ logs.report("fonts","directions after textdir %s: pardir=%s, txtdir=%s:%s, rlmode=%s",dir,pardir,#txtdir,txtdir[#txtdir] or "unset",rlmode)
end
elseif subtype == 6 then
local dir = start.dir
if dir == "TRT" then
- rlmode = -1
+ pardir = -1
elseif dir == "TLT" then
- rlmode = 1
+ pardir = 1
else
- rlmode = 0
+ pardir = 0
+ end
+ rlmode = pardir
+ --~ txtdir = { }
+ if trace_directions then
+ logs.report("fonts","directions after pardir %s: pardir=%s, txtdir=%s:%s, rlmode=%s",dir,pardir,#txtdir,txtdir[#txtdir] or "unset",rlmode)
end
end
start = start.next
@@ -9119,14 +10233,13 @@ function fonts.methods.node.otf.features(head,font,attr)
start = start.next
end
end
-
end
else
while start do
local id = start.id
if id == glyph then
---~ if start.subtype<256 and start.font == font and (not attr or has_attribute(start,0,attr)) and (not attribute or has_attribute(start,state,attribute)) then
- if start.subtype<256 and start.font == font and has_attribute(start,0,attr) and (not attribute or has_attribute(start,state,attribute)) then
+ if start.subtype<256 and start.font == font and (not attr or has_attribute(start,0,attr)) and (not attribute or has_attribute(start,state,attribute)) then
+--~ if start.subtype<256 and start.font == font and has_attribute(start,0,attr) and (not attribute or has_attribute(start,state,attribute)) then
for i=1,ns do
local lookupname = subtables[i]
local lookupcache = thecache[lookupname]
@@ -9166,23 +10279,38 @@ function fonts.methods.node.otf.features(head,font,attr)
-- end
elseif id == whatsit then
local subtype = start.subtype
+ local subtype = start.subtype
if subtype == 7 then
local dir = start.dir
- if dir == "+TRT" then
+ if dir == "+TRT" or dir == "+TLT" then
+ insert(txtdir,dir)
+ elseif dir == "-TRT" or dir == "-TLT" then
+ remove(txtdir)
+ end
+ local d = txtdir[#txtdir]
+ if d == "+TRT" then
rlmode = -1
- elseif dir == "+TLT" then
+ elseif d == "+TLT" then
rlmode = 1
else
- rlmode = 0
+ rlmode = pardir
+ end
+ if trace_directions then
+ logs.report("fonts","directions after textdir %s: pardir=%s, txtdir=%s:%s, rlmode=%s",dir,pardir,#txtdir,txtdir[#txtdir] or "unset",rlmode)
end
elseif subtype == 6 then
local dir = start.dir
if dir == "TRT" then
- rlmode = -1
+ pardir = -1
elseif dir == "TLT" then
- rlmode = 1
+ pardir = 1
else
- rlmode = 0
+ pardir = 0
+ end
+ rlmode = pardir
+ --~ txtdir = { }
+ if trace_directions then
+ logs.report("fonts","directions after pardir %s: pardir=%s, txtdir=%s:%s, rlmode=%s",dir,pardir,#txtdir,txtdir[#txtdir] or "unset",rlmode)
end
end
start = start.next
@@ -9210,11 +10338,11 @@ otf.features.prepare = { }
-- document)
local function split(replacement,original,cache,unicodes)
- -- we can cache this too, but not the same
+ -- we can cache this too, but not the same (although unicode is a unique enough hash)
local o, t, n = { }, { }, 0
for s in gmatch(original,"[^ ]+") do
local us = unicodes[s]
- if type(us) == "number" then
+ if type(us) == "number" then -- tonumber(us)
o[#o+1] = us
else
o[#o+1] = us[1]
@@ -9223,7 +10351,7 @@ local function split(replacement,original,cache,unicodes)
for s in gmatch(replacement,"[^ ]+") do
n = n + 1
local us = unicodes[s]
- if type(us) == "number" then
+ if type(us) == "number" then -- tonumber(us)
t[o[n]] = us
else
t[o[n]] = us[1]
@@ -9280,142 +10408,153 @@ local function prepare_lookups(tfmdata)
-- we can change the otf table after loading but then we need to adapt base mode
-- as well (no big deal)
--
- for unicode, glyph in next, descriptions do
- local lookups = glyph.lookups
- if lookups then
- for lookup, whatever in next, lookups do
- for i=1,#whatever do -- normaly one
- local p = whatever[i]
- local what = p[1]
- if what == 'substitution' then
- local old, new = unicode, unicodes[p[2]]
- if type(new) == "table" then
- new = new[1]
- end
- local s = single[lookup]
- if not s then s = { } single[lookup] = s end
- s[old] = new
---~ if trace_lookups then
---~ logs.report("define otf","lookup %s: substitution %s => %s",lookup,old,new)
---~ end
- break
- elseif what == 'multiple' then
- local old, new = unicode, { }
- local m = multiple[lookup]
- if not m then m = { } multiple[lookup] = m end
- m[old] = new
- for pc in gmatch(p[2],"[^ ]+") do
- local upc = unicodes[pc]
- if type(upc) == "number" then
- new[#new+1] = upc
- else
- new[#new+1] = upc[1]
- end
- end
---~ if trace_lookups then
---~ logs.report("define otf","lookup %s: multiple %s => %s",lookup,old,concat(new," "))
---~ end
+ local action = {
+ substitution = function(p,lookup,k,glyph,unicode)
+ local old, new = unicode, unicodes[p[2]]
+ if type(new) == "table" then
+ new = new[1]
+ end
+ local s = single[lookup]
+ if not s then s = { } single[lookup] = s end
+ s[old] = new
+ --~ if trace_lookups then
+ --~ logs.report("define otf","lookup %s: substitution %s => %s",lookup,old,new)
+ --~ end
+ end,
+ multiple = function (p,lookup,k,glyph,unicode)
+ local old, new = unicode, { }
+ local m = multiple[lookup]
+ if not m then m = { } multiple[lookup] = m end
+ m[old] = new
+ for pc in gmatch(p[2],"[^ ]+") do
+ local upc = unicodes[pc]
+ if type(upc) == "number" then
+ new[#new+1] = upc
+ else
+ new[#new+1] = upc[1]
+ end
+ end
+ --~ if trace_lookups then
+ --~ logs.report("define otf","lookup %s: multiple %s => %s",lookup,old,concat(new," "))
+ --~ end
+ end,
+ alternate = function(p,lookup,k,glyph,unicode)
+ local old, new = unicode, { }
+ local a = alternate[lookup]
+ if not a then a = { } alternate[lookup] = a end
+ a[old] = new
+ for pc in gmatch(p[2],"[^ ]+") do
+ local upc = unicodes[pc]
+ if type(upc) == "number" then
+ new[#new+1] = upc
+ else
+ new[#new+1] = upc[1]
+ end
+ end
+ --~ if trace_lookups then
+ --~ logs.report("define otf","lookup %s: alternate %s => %s",lookup,old,concat(new,"|"))
+ --~ end
+ end,
+ ligature = function (p,lookup,k,glyph,unicode)
+ --~ if trace_lookups then
+ --~ logs.report("define otf","lookup %s: ligature %s => %s",lookup,p[2],glyph.name)
+ --~ end
+ local first = true
+ local t = ligature[lookup]
+ if not t then t = { } ligature[lookup] = t end
+ for s in gmatch(p[2],"[^ ]+") do
+ if first then
+ local u = unicodes[s]
+ if not u then
+ logs.report("define otf","lookup %s: ligature %s => %s ignored due to invalid unicode",lookup,p[2],glyph.name)
break
- elseif what == 'alternate' then
- local old, new = unicode, { }
- local a = alternate[lookup]
- if not a then a = { } alternate[lookup] = a end
- a[old] = new
- for pc in gmatch(p[2],"[^ ]+") do
- local upc = unicodes[pc]
- if type(upc) == "number" then
- new[#new+1] = upc
- else
- new[#new+1] = upc[1]
- end
+ elseif type(u) == "number" then
+ if not t[u] then
+ t[u] = { { } }
end
---~ if trace_lookups then
---~ logs.report("define otf","lookup %s: alternate %s => %s",lookup,old,concat(new,"|"))
---~ end
- break
- elseif what == "ligature" then
---~ if trace_lookups then
---~ logs.report("define otf","lookup %s: ligature %s => %s",lookup,p[2],glyph.name)
---~ end
- local first = true
- local t = ligature[lookup]
- if not t then t = { } ligature[lookup] = t end
- for s in gmatch(p[2],"[^ ]+") do
- if first then
- local u = unicodes[s]
- if not u then
- logs.report("define otf","lookup %s: ligature %s => %s ignored due to invalid unicode",lookup,p[2],glyph.name)
- break
- elseif type(u) == "number" then
- if not t[u] then
- t[u] = { { } }
- end
- t = t[u]
- else
- local tt = t
- local tu
- for i=1,#u do
- local u = u[i]
- if i==1 then
- if not t[u] then
- t[u] = { { } }
- end
- tu = t[u]
- t = tu
- else
- if not t[u] then
- tt[u] = tu
- end
- end
- end
+ t = t[u]
+ else
+ local tt = t
+ local tu
+ for i=1,#u do
+ local u = u[i]
+ if i==1 then
+ if not t[u] then
+ t[u] = { { } }
end
- first = false
+ tu = t[u]
+ t = tu
else
- s = unicodes[s]
- local t1 = t[1]
- if not t1[s] then
- t1[s] = { { } }
+ if not t[u] then
+ tt[u] = tu
end
- t = t1[s]
end
end
- t[2] = unicode
- elseif what == 'position' then
- -- not used
- local s = position[lookup]
- if not s then s = { } position[lookup] = s end
- s[unicode] = p[2] -- direct pointer to kern spec
- elseif what == 'pair' then
- local s = pair[lookup]
- if not s then s = { } pair[lookup] = s end
- local others = s[unicode]
- if not others then others = { } s[unicode] = others end
- -- todo: fast check for space
- local two = p[2]
- local upc = unicodes[two]
- if not upc then
- for pc in gmatch(two,"[^ ]+") do
- local upc = unicodes[pc]
- if type(upc) == "number" then
- others[upc] = p -- direct pointer to main table
- else
- for i=1,#upc do
- others[upc[i]] = p -- direct pointer to main table
- end
- end
- end
- elseif type(upc) == "number" then
- others[upc] = p -- direct pointer to main table
- else
- for i=1,#upc do
- others[upc[i]] = p -- direct pointer to main table
- end
+ end
+ first = false
+ else
+ s = unicodes[s]
+ local t1 = t[1]
+ if not t1[s] then
+ t1[s] = { { } }
+ end
+ t = t1[s]
+ end
+ end
+ t[2] = unicode
+ end,
+ position = function(p,lookup,k,glyph,unicode)
+ -- not used
+ local s = position[lookup]
+ if not s then s = { } position[lookup] = s end
+ s[unicode] = p[2] -- direct pointer to kern spec
+ end,
+ pair = function(p,lookup,k,glyph,unicode)
+ local s = pair[lookup]
+ if not s then s = { } pair[lookup] = s end
+ local others = s[unicode]
+ if not others then others = { } s[unicode] = others end
+ -- todo: fast check for space
+ local two = p[2]
+ local upc = unicodes[two]
+ if not upc then
+ for pc in gmatch(two,"[^ ]+") do
+ local upc = unicodes[pc]
+ if type(upc) == "number" then
+ others[upc] = p -- direct pointer to main table
+ else
+ for i=1,#upc do
+ others[upc[i]] = p -- direct pointer to main table
end
---~ if trace_lookups then
---~ logs.report("define otf","lookup %s: pair for U+%04X",lookup,unicode)
---~ end
end
end
+ elseif type(upc) == "number" then
+ others[upc] = p -- direct pointer to main table
+ else
+ for i=1,#upc do
+ others[upc[i]] = p -- direct pointer to main table
+ end
+ end
+ --~ if trace_lookups then
+ --~ logs.report("define otf","lookup %s: pair for U+%04X",lookup,unicode)
+ --~ end
+ end,
+ }
+ --
+ for unicode, glyph in next, descriptions do
+ local lookups = glyph.slookups
+ if lookups then
+ for lookup, p in next, lookups do
+ action[p[1]](p,lookup,k,glyph,unicode)
+ end
+ end
+ local lookups = glyph.mlookups
+ if lookups then
+ for lookup, whatever in next, lookups do
+ for i=1,#whatever do -- normaly one
+ local p = whatever[i]
+ action[p[1]](p,lookup,k,glyph,unicode)
+ end
end
end
local list = glyph.mykerns
@@ -9424,9 +10563,9 @@ local function prepare_lookups(tfmdata)
local k = kerns[lookup]
if not k then k = { } kerns[lookup] = k end
k[unicode] = krn -- ref to glyph, saves lookup
---~ if trace_lookups then
---~ logs.report("define otf","lookup %s: kern for U+%04X",lookup,unicode)
---~ end
+ --~ if trace_lookups then
+ --~ logs.report("define otf","lookup %s: kern for U+%04X",lookup,unicode)
+ --~ end
end
end
local oanchor = glyph.anchors
@@ -9440,9 +10579,9 @@ local function prepare_lookups(tfmdata)
local f = mark[lookup]
if not f then f = { } mark[lookup] = f end
f[unicode] = anchors -- ref to glyph, saves lookup
---~ if trace_lookups then
---~ logs.report("define otf","lookup %s: mark anchor %s for U+%04X",lookup,name,unicode)
---~ end
+ --~ if trace_lookups then
+ --~ logs.report("define otf","lookup %s: mark anchor %s for U+%04X",lookup,name,unicode)
+ --~ end
end
end
end
@@ -9454,9 +10593,9 @@ local function prepare_lookups(tfmdata)
local f = cursive[lookup]
if not f then f = { } cursive[lookup] = f end
f[unicode] = anchors -- ref to glyph, saves lookup
---~ if trace_lookups then
---~ logs.report("define otf","lookup %s: exit anchor %s for U+%04X",lookup,name,unicode)
---~ end
+ --~ if trace_lookups then
+ --~ logs.report("define otf","lookup %s: exit anchor %s for U+%04X",lookup,name,unicode)
+ --~ end
end
end
end
@@ -9570,6 +10709,46 @@ function prepare_contextchains(tfmdata)
end
end
end
+ elseif fmt == "glyphs" then
+ if lookuptype ~= "chainsub" and lookuptype ~= "chainpos" then
+ logs.report("otf process","unsupported coverage %s for %s",lookuptype,lookupname)
+ else
+ local contexts = contextchain[lookupname]
+ if not contexts then
+ contexts = { }
+ contextchain[lookupname] = contexts
+ end
+ local t = { }
+ for nofrules=1,#rules do
+ -- nearly the same as coverage so we could as well rename it
+ local rule = rules[nofrules]
+ local glyphs = rule.glyphs
+ if glyphs and glyphs.names then
+ local fore, back, names, sequence = glyphs.fore, glyphs.back, glyphs.names, { }
+ if fore and fore ~= "" then
+ fore = lpegmatch(split_at_space,fore)
+ uncover(fore,sequence,cache,unicodes)
+ end
+ local start = #sequence + 1
+ names = lpegmatch(split_at_space,names)
+ uncover(names,sequence,cache,unicodes)
+ local stop = #sequence
+ if back and back ~= "" then
+ back = lpegmatch(split_at_space,back)
+ uncover(back,sequence,cache,unicodes)
+ end
+ if sequence[1] then
+ t[#t+1] = { nofrules, lookuptype, sequence, start, stop, rule.lookups }
+ for unic, _ in next, sequence[start] do
+ local cu = contexts[unic]
+ if not cu then
+ contexts[unic] = t
+ end
+ end
+ end
+ end
+ end
+ end
end
end
end
@@ -9650,10 +10829,6 @@ local penalty = node.id('penalty')
local set_attribute = node.set_attribute
local has_attribute = node.has_attribute
local traverse_id = node.traverse_id
-local delete_node = nodes.delete
-local replace_node = nodes.replace
-local insert_node_after = node.insert_after
-local insert_node_before = node.insert_before
local traverse_node_list = node.traverse
local fontdata = fonts.ids
@@ -9669,7 +10844,6 @@ local a_to_language = otf.a_to_language
-- font related value, but then we also need dynamic features which is
-- somewhat slower; and .. we need a chain of them
-
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]
@@ -9746,7 +10920,8 @@ local isol_fina = {
[0x06D3] = true, [0x06D5] = true, [0x06EE] = true, [0x06EF] = true,
[0x0759] = true, [0x075A] = true, [0x075B] = true, [0x076B] = true,
[0x076C] = true, [0x0771] = true, [0x0773] = true, [0x0774] = true,
- [0x0778] = true, [0x0779] = true,
+ [0x0778] = true, [0x0779] = true, [0xFEF5] = true, [0xFEF7] = true,
+ [0xFEF9] = true, [0xFEFB] = true,
}
local isol_fina_medi_init = {
@@ -9807,8 +10982,6 @@ function fonts.analyzers.methods.nocolor(head,font,attr)
return head, true
end
-otf.remove_joiners = false -- true -- for idris who want it as option
-
local function finish(first,last)
if last then
if first == last then
@@ -9854,22 +11027,10 @@ function fonts.analyzers.methods.arab(head,font,attr) -- maybe make a special ve
local tfmdata = fontdata[font]
local marks = tfmdata.marks
local first, last, current, done = nil, nil, head, false
- local joiners, nonjoiners
- local removejoiners = tfmdata.remove_joiners -- or otf.remove_joiners
- if removejoiners then
- joiners, nonjoiners = { }, { }
- end
while current do
if current.id == glyph and current.subtype<256 and current.font == font and not has_attribute(current,state) then
done = true
local char = current.char
- if removejoiners then
- if char == zwj then
- joiners[#joiners+1] = current
- elseif char == zwnj then
- nonjoiners[#nonjoiners+1] = current
- end
- end
if marks[char] then
set_attribute(current,state,5) -- mark
if trace_analyzing then fcs(current,"font:mark") end
@@ -9915,25 +11076,9 @@ function fonts.analyzers.methods.arab(head,font,attr) -- maybe make a special ve
current = current.next
end
first, last = finish(first,last)
- if removejoiners then
- for i=1,#joiners do
- head = delete_node(head,joiners[i])
- end
- for i=1,#nonjoiners do
- head = replace_node(head,nonjoiners[i],nodes.glue(0)) -- or maybe a kern
- end
- end
return head, done
end
-table.insert(fonts.manipulators,"joiners")
-
-function fonts.initializers.node.otf.joiners(tfmdata,value)
- if value == "strip" then
- tfmdata.remove_joiners = true
- end
-end
-
end -- closure
do -- begin closure to overcome local limits and interference
@@ -9949,8 +11094,6 @@ if not modules then modules = { } end modules ['font-otc'] = {
local format, insert = string.format, table.insert
local type, next = type, next
-local ctxcatcodes = tex.ctxcatcodes
-
-- we assume that the other otf stuff is loaded already
local trace_loading = false trackers.register("otf.loading", function(v) trace_loading = v end)
@@ -9961,6 +11104,8 @@ local tfm = fonts.tfm
-- instead of "script = "DFLT", langs = { 'dflt' }" we now use wildcards (we used to
-- have always); some day we can write a "force always when true" trick for other
-- features as well
+--
+-- we could have a tnum variant as well
local extra_lists = {
tlig = {
@@ -10152,38 +11297,13 @@ 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
--- bonus function
-
-function otf.name_to_slot(name) -- todo: afm en tfm
- local tfmdata = fonts.ids[font.current()]
- if tfmdata and tfmdata.shared then
- local otfdata = tfmdata.shared.otfdata
- local unicode = otfdata.luatex.unicodes[name]
- if type(unicode) == "number" then
- return unicode
- else
- return unicode[1]
- end
- end
- return nil
-end
-
-function otf.char(n) -- todo: afm en tfm
- if type(n) == "string" then
- n = otf.name_to_slot(n)
- end
- if n then
- tex.sprint(ctxcatcodes,format("\\char%s ",n))
- end
-end
-
end -- closure
do -- begin closure to overcome local limits and interference
if not modules then modules = { } end modules ['font-def'] = {
version = 1.001,
- comment = "companion to font-ini.tex",
+ comment = "companion to font-ini.mkiv",
author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
copyright = "PRAGMA ADE / ConTeXt Development Team",
license = "see context related readme files"
@@ -10191,8 +11311,10 @@ if not modules then modules = { } end modules ['font-def'] = {
local format, concat, gmatch, match, find, lower = string.format, table.concat, string.gmatch, string.match, string.find, string.lower
local tostring, next = tostring, next
+local lpegmatch = lpeg.match
-local trace_defining = false trackers.register("fonts.defining", function(v) trace_defining = v end)
+local trace_defining = false trackers .register("fonts.defining", function(v) trace_defining = v end)
+local directive_embedall = false directives.register("fonts.embedall", function(v) directive_embedall = v end)
trackers.register("fonts.loading", "fonts.defining", "otf.loading", "afm.loading", "tfm.loading")
trackers.register("fonts.all", "fonts.*", "otf.*", "afm.*", "tfm.*")
@@ -10260,22 +11382,37 @@ and prepares a table that will move along as we proceed.</p>
local splitter, specifiers = nil, ""
+local P, C, S, Cc = lpeg.P, lpeg.C, lpeg.S, lpeg.Cc
+
+local left = P("(")
+local right = P(")")
+local colon = P(":")
+local space = P(" ")
+
+define.defaultlookup = "file"
+
+local prefixpattern = P(false)
+
function define.add_specifier(symbol)
specifiers = specifiers .. symbol
- local left = lpeg.P("(")
- local right = lpeg.P(")")
- local colon = lpeg.P(":")
- local method = lpeg.S(specifiers)
- local lookup = lpeg.C(lpeg.P("file")+lpeg.P("name")) * colon -- hard test, else problems with : method
- local sub = left * lpeg.C(lpeg.P(1-left-right-method)^1) * right
---~ local specification = lpeg.C(method) * lpeg.C(lpeg.P(1-method)^1)
- local specification = lpeg.C(method) * lpeg.C(lpeg.P(1)^1)
- local name = lpeg.C((1-sub-specification)^1)
- splitter = lpeg.P((lookup + lpeg.Cc("")) * name * (sub + lpeg.Cc("")) * (specification + lpeg.Cc("")))
+ local method = S(specifiers)
+ local lookup = C(prefixpattern) * colon
+ local sub = left * C(P(1-left-right-method)^1) * right
+ local specification = C(method) * C(P(1)^1)
+ local name = C((1-sub-specification)^1)
+ splitter = P((lookup + Cc("")) * name * (sub + Cc("")) * (specification + Cc("")))
+end
+
+function define.add_lookup(str,default)
+ prefixpattern = prefixpattern + P(str)
end
+define.add_lookup("file")
+define.add_lookup("name")
+define.add_lookup("spec")
+
function define.get_specification(str)
- return splitter:match(str)
+ return lpegmatch(splitter,str)
end
function define.register_split(symbol,action)
@@ -10294,8 +11431,8 @@ function define.makespecification(specification, lookup, name, sub, method, deta
--~ lookup = specification.lookup -- can come from xetex [] syntax
--~ specification.lookup = nil
--~ end
- if lookup ~= 'name' then -- for the moment only two lookups, maybe some day also system:
- lookup = 'file'
+ if not lookup or lookup == "" then
+ lookup = define.defaultlookup
end
local t = {
lookup = lookup, -- forced type
@@ -10315,7 +11452,7 @@ end
function define.analyze(specification, size)
-- can be optimized with locals
local lookup, name, sub, method, detail = define.get_specification(specification or "")
- return define.makespecification(specification,lookup, name, sub, method, detail, size)
+ return define.makespecification(specification, lookup, name, sub, method, detail, size)
end
--[[ldx--
@@ -10397,17 +11534,44 @@ end
<p>We can resolve the filename using the next function:</p>
--ldx]]--
+define.resolvers = resolvers
+
+function define.resolvers.file(specification)
+ specification.forced = file.extname(specification.name)
+ specification.name = file.removesuffix(specification.name)
+end
+
+function define.resolvers.name(specification)
+ local resolve = fonts.names.resolve
+ if resolve 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
+ else
+ define.resolvers.file(specification)
+ end
+end
+
+function define.resolvers.spec(specification)
+ local resolvespec = fonts.names.resolvespec
+ if resolvespec then
+ specification.resolved, specification.sub = fonts.names.resolvespec(specification.name,specification.sub)
+ if specification.resolved then
+ specification.forced = file.extname(specification.resolved)
+ specification.name = file.removesuffix(specification.resolved)
+ end
+ else
+ define.resolvers.name(specification)
+ end
+end
+
function define.resolve(specification)
if not specification.resolved or specification.resolved == "" then -- resolved itself not per se in mapping hash
- 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)
+ local r = define.resolvers[specification.lookup]
+ if r then
+ r(specification)
end
end
if specification.forced == "" then
@@ -10415,7 +11579,6 @@ function define.resolve(specification)
else
specification.forced = specification.forced
end
---~ specification.hash = specification.name .. ' @ ' .. tfm.hash_features(specification)
specification.hash = lower(specification.name .. ' @ ' .. tfm.hash_features(specification))
if specification.sub and specification.sub ~= "" then
specification.hash = specification.sub .. ' @ ' .. specification.hash
@@ -10454,7 +11617,7 @@ function tfm.read(specification)
local reader = sequence[s]
if readers[reader] then -- not really needed
if trace_defining then
- logs.report("define font","trying (sequence driven) type %s for %s with file %s",reader,specification.name,specification.filename or "unknown")
+ logs.report("define font","trying (reader sequence driven) type %s for %s with file %s",reader,specification.name,specification.filename or "unknown")
end
tfmtable = readers[reader](specification)
if tfmtable then
@@ -10466,7 +11629,9 @@ function tfm.read(specification)
end
end
if tfmtable then
- if tfmtable.filename and fonts.dontembed[tfmtable.filename] then
+ if directive_embedall then
+ tfmtable.embedding = "full"
+ elseif tfmtable.filename and fonts.dontembed[tfmtable.filename] then
tfmtable.embedding = "no"
else
tfmtable.embedding = "subset"
@@ -10589,16 +11754,22 @@ function readers.afm(specification,method)
return tfmtable
end
-local function check_otf(specification,suffix,what)
- local fullname, tfmtable = resolvers.findbinfile(specification.name,suffix) or "", nil
+-- maybe some day a set of names
+
+local function check_otf(forced,specification,suffix,what)
+ local name = specification.name
+ if forced then
+ name = file.addsuffix(name,suffix)
+ end
+ local fullname, tfmtable = resolvers.findbinfile(name,suffix) or "", nil -- one shot
if fullname == "" then
- local fb = fonts.names.old_to_new[specification.name]
+ local fb = fonts.names.old_to_new[name]
if fb then
fullname = resolvers.findbinfile(fb,suffix) or ""
end
end
if fullname == "" then
- local fb = fonts.names.new_to_old[specification.name]
+ local fb = fonts.names.new_to_old[name]
if fb then
fullname = resolvers.findbinfile(fb,suffix) or ""
end
@@ -10613,13 +11784,11 @@ end
function readers.opentype(specification,suffix,what)
local forced = specification.forced or ""
if forced == "otf" then
- return check_otf(specification,forced,"opentype")
- elseif forced == "ttf" then
- return check_otf(specification,forced,"truetype")
- elseif forced == "ttf" then
- return check_otf(specification,forced,"truetype")
+ return check_otf(true,specification,forced,"opentype")
+ elseif forced == "ttf" or forced == "ttc" or forced == "dfont" then
+ return check_otf(true,specification,forced,"truetype")
else
- return check_otf(specification,suffix,what)
+ return check_otf(false,specification,suffix,what)
end
end
@@ -10635,14 +11804,14 @@ a helper function.</p>
function define.check(features,defaults) -- nb adapts features !
local done = false
- if table.is_empty(features) then
- features, done = table.fastcopy(defaults), true
- else
+ if features and next(features) then
for k,v in next, defaults do
if features[k] == nil then
features[k], done = v, true
end
end
+ else
+ features, done = table.fastcopy(defaults), true
end
return features, done -- done signals a change
end
@@ -10668,7 +11837,10 @@ function define.register(fontdata,id)
if trace_defining then
logs.report("define font","loading at 2 id %s, hash: %s",id or "?",hash or "?")
end
- fonts.ids[id] = fontdata
+ fonts.identifiers[id] = fontdata
+ fonts.characters [id] = fontdata.characters
+ fonts.quads [id] = fontdata.parameters.quad
+ -- todo: extra functions, e.g. setdigitwidth etc in list
tfm.internalized[hash] = id
end
end
@@ -10778,8 +11950,8 @@ end
<p>We overload both the <l n='tfm'/> and <l n='vf'/> readers.</p>
--ldx]]--
-callback.register('define_font' , define.read)
-callback.register('find_vf_file', vf.find ) -- not that relevant any more
+callbacks.register('define_font' , define.read, "definition of fonts (tfmtable preparation)")
+callbacks.register('find_vf_file', vf.find , "locating virtual fonts, insofar needed") -- not that relevant any more
end -- closure
@@ -10787,7 +11959,7 @@ do -- begin closure to overcome local limits and interference
if not modules then modules = { } end modules ['font-xtx'] = {
version = 1.001,
- comment = "companion to font-ini.tex",
+ comment = "companion to font-ini.mkiv",
author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
copyright = "PRAGMA ADE / ConTeXt Development Team",
license = "see context related readme files"
@@ -10796,6 +11968,7 @@ if not modules then modules = { } end modules ['font-xtx'] = {
local texsprint, count = tex.sprint, tex.count
local format, concat, gmatch, match, find, lower = string.format, table.concat, string.gmatch, string.match, string.find, string.lower
local tostring, next = tostring, next
+local lpegmatch = lpeg.match
local trace_defining = false trackers.register("fonts.defining", function(v) trace_defining = v end)
@@ -10858,12 +12031,15 @@ local function istrue (s) list[s] = 'yes' end
local function isfalse(s) list[s] = 'no' end
local function iskey (k,v) list[k] = v end
+local function istrue (s) list[s] = true end
+local function isfalse(s) list[s] = false end
+
local spaces = lpeg.P(" ")^0
local namespec = (1-lpeg.S("/:("))^0 -- was: (1-lpeg.S("/: ("))^0
local crapspec = spaces * lpeg.P("/") * (((1-lpeg.P(":"))^0)/iscrap) * spaces
local filename = (lpeg.P("file:")/isfile * (namespec/thename)) + (lpeg.P("[") * lpeg.P(true)/isname * (((1-lpeg.P("]"))^0)/thename) * lpeg.P("]"))
local fontname = (lpeg.P("name:")/isname * (namespec/thename)) + lpeg.P(true)/issome * (namespec/thename)
-local sometext = (lpeg.R("az") + lpeg.R("AZ") + lpeg.R("09"))^1
+local sometext = (lpeg.R("az","AZ","09") + lpeg.S("+-."))^1
local truevalue = lpeg.P("+") * spaces * (sometext/istrue)
local falsevalue = lpeg.P("-") * spaces * (sometext/isfalse)
local keyvalue = (lpeg.C(sometext) * spaces * lpeg.P("=") * spaces * lpeg.C(sometext))/iskey
@@ -10873,15 +12049,17 @@ local option = spaces * (keyvalue + falsevalue + truevalue + somevalue) * sp
local options = lpeg.P(":") * spaces * (lpeg.P(";")^0 * option)^0
local pattern = (filename + fontname) * subvalue^0 * crapspec^0 * options^0
+local normalize_meanings = fonts.otf.meanings.normalize
+
function fonts.define.specify.colonized(specification) -- xetex mode
list = { }
- pattern:match(specification.specification)
- for k, v in next, list do
- list[k] = v:is_boolean()
- if type(list[a]) == "nil" then
- list[k] = v
- end
- end
+ lpegmatch(pattern,specification.specification)
+--~ for k, v in next, list do
+--~ list[k] = v:is_boolean()
+--~ if type(list[a]) == "nil" then
+--~ list[k] = v
+--~ end
+--~ end
list.crap = nil -- style not supported, maybe some day
if list.name then
specification.name = list.name
@@ -10895,7 +12073,8 @@ function fonts.define.specify.colonized(specification) -- xetex mode
specification.sub = list.sub
list.sub = nil
end
- specification.features.normal = list
+-- specification.features.normal = list
+ specification.features.normal = normalize_meanings(list)
return specification
end
@@ -10905,229 +12084,6 @@ end -- closure
do -- begin closure to overcome local limits and interference
-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"
-}
-
-local match, format, find, concat = string.match, string.format, string.find, table.concat
-
-local trace_loading = false trackers.register("otf.loading", function(v) trace_loading = v end)
-
-local ctxcatcodes = tex.ctxcatcodes
-
---[[ldx--
-<p>Eventually this code will disappear because map files are kind
-of obsolete. Some code may move to runtime or auxiliary modules.</p>
-<p>The name to unciode related code will stay of course.</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("=",format('%s %s "%g SlantFont" <%s <%s',e.name,fullname,e.slant,e.encoding,e.fontfile))
- else
- return fonts.map.line.pdfmapline("=",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("=",format('%s %s "%g ExtendFont" <%s <%s',e.name,fullname,e.stretch,e.encoding,e.fontfile))
- else
- return fonts.map.line.pdfmapline("=",format('%s %s "%g ExtendFont" <%s',e.name,fullname,e.stretch,e.fontfile))
- end
- else
- if e.encoding then
- return fonts.map.line.pdfmapline("=",format('%s %s <%s <%s',e.name,fullname,e.encoding,e.fontfile))
- else
- return fonts.map.line.pdfmapline("=",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(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 gmatch(data,"(.-)[\n\t]") do
- if find(line,"^[%#%%%s]") then
- -- print(line)
- else
- local stretch, slant, name, fullname, fontfile, encoding
- line = line:gsub('"(.+)"', function(s)
- stretch = find(s,'"([^"]+) ExtendFont"')
- slant = find(s,'"([^"]+) SlantFont"')
- return ""
- end)
- if not name then
- -- name fullname encoding fontfile
- name, fullname, encoding, fontfile = match(line,"^(%S+)%s+(%S*)[%s<]+(%S*)[%s<]+(%S*)%s*$")
- end
- if not name then
- -- name fullname (flag) fontfile encoding
- name, fullname, fontfile, encoding = match(line,"^(%S+)%s+(%S*)[%d%s<]+(%S*)[%s<]+(%S*)%s*$")
- end
- if not name then
- -- name fontfile
- name, fontfile = match(line,"^(%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
-
-function fonts.map.load_lum_table(filename)
- local lumname = file.replacesuffix(file.basename(filename),"lum")
- local lumfile = resolvers.find_file(lumname,"map") or ""
- if lumfile ~= "" and lfs.isfile(lumfile) then
- if trace_loading or trace_unimapping then
- logs.report("load otf","enhance: loading %s ",lumfile)
- end
- lumunic = dofile(lumfile)
- return lumunic, lumfile
- end
-end
-
-local hex = lpeg.R("AF","09")
-local hexfour = (hex*hex*hex*hex) / function(s) return tonumber(s,16) end
-local dec = (lpeg.R("09")^1) / tonumber
-local period = lpeg.P(".")
-
-local unicode = lpeg.P("uni") * (hexfour * (period + lpeg.P(-1)) * lpeg.Cc(false) + lpeg.Ct(hexfour^1) * lpeg.Cc(true))
-local index = lpeg.P("index") * dec * lpeg.Cc(false)
-
-local parser = unicode + index
-
-local parsers = { }
-
-function fonts.map.make_name_parser(str)
- if not str or str == "" then
- return parser
- else
- local p = parsers[str]
- if not p then
- p = lpeg.P(str) * period * dec * lpeg.Cc(false)
- parsers[str] = p
- end
- return p
- end
-end
-
---~ local parser = fonts.map.make_name_parser("Japan1")
---~ local function test(str)
---~ local b, a = parser:match(str)
---~ print((a and table.serialize(b)) or b)
---~ end
---~ test("uni1234")
---~ test("uni1234.xx")
---~ test("uni12349876")
---~ test("index1234")
---~ test("Japan1.123")
-
-function fonts.map.tounicode16(unicode)
- if unicode < 0x10000 then
- return format("%04X",unicode)
- else
- return format("%04X%04X",unicode/1024+0xD800,unicode%1024+0xDC00)
- end
-end
-
-function fonts.map.tounicode16sequence(unicodes)
- local t = { }
- for l=1,#unicodes do
- local unicode = unicodes[l]
- if unicode < 0x10000 then
- t[l] = format("%04X",unicode)
- else
- t[l] = format("%04X%04X",unicode/1024+0xD800,unicode%1024+0xDC00)
- end
- end
- return concat(t)
-end
-
---~ This is quite a bit faster but at the cost of some memory but if we
---~ do this we will also use it elsewhere so let's not follow this route
---~ now. I might use this method in the plain variant (no caching there)
---~ but then I need a flag that distinguishes between code branches.
---~
---~ local cache = { }
---~
---~ function fonts.map.tounicode16(unicode)
---~ local s = cache[unicode]
---~ if not s then
---~ if unicode < 0x10000 then
---~ s = format("%04X",unicode)
---~ else
---~ s = format("%04X%04X",unicode/1024+0xD800,unicode%1024+0xDC00)
---~ end
---~ cache[unicode] = s
---~ end
---~ return s
---~ end
-
-
-end -- closure
-
-do -- begin closure to overcome local limits and interference
-
if not modules then modules = { } end modules ['font-dum'] = {
version = 1.001,
comment = "companion to luatex-*.tex",
@@ -11140,8 +12096,9 @@ fonts = fonts or { }
-- general
-fonts.otf.pack = false
-fonts.tfm.resolve_vf = false -- no sure about this
+fonts.otf.pack = false -- only makes sense in context
+fonts.tfm.resolve_vf = false -- no sure about this
+fonts.tfm.fontname_mode = "specification" -- somehow latex needs this
-- readers
@@ -11169,52 +12126,56 @@ function fonts.logger.save()
end
-- names
+--
+-- Watch out, the version number is the same as the one used in
+-- the mtx-fonts.lua function scripts.fonts.names as we use a
+-- simplified font database in the plain solution and by using
+-- a different number we're less dependent on context.
fonts.names = fonts.names or { }
+fonts.names.version = 1.001 -- not the same as in context
fonts.names.basename = "luatex-fonts-names.lua"
fonts.names.new_to_old = { }
fonts.names.old_to_new = { }
local data, loaded = nil, false
+local fileformats = { "lua", "tex", "other text files" }
+
function fonts.names.resolve(name,sub)
if not loaded then
local basename = fonts.names.basename
if basename and basename ~= "" then
- for _, format in ipairs { "lua", "tex", "other text files" } do
+ for i=1,#fileformats do
+ local format = fileformats[i]
local foundname = resolvers.find_file(basename,format) or ""
if foundname ~= "" then
data = dofile(foundname)
- if data then
- local d = { }
- for k, v in pairs(data.mapping) do
- local t = v[1]
- if t == "ttf" or t == "otf" or t == "ttc" or t == "dfont" then
- d[k] = v
- end
- end
- data.mapping = d
- end
break
end
end
end
loaded = true
end
- if type(data) == "table" and data.version == 1.08 then
+ if type(data) == "table" and data.version == fonts.names.version then
local condensed = string.gsub(string.lower(name),"[^%a%d]","")
- local found = data.mapping and data.mapping[condensed]
+ local found = data.mappings and data.mappings[condensed]
if found then
- local filename, is_sub = found[3], found[4]
- if is_sub then is_sub = found[2] end
- return filename, is_sub
+ local fontname, filename, subfont = found[1], found[2], found[3]
+ if subfont then
+ return filename, fontname
+ else
+ return filename, false
+ end
else
return name, false -- fallback to filename
end
end
end
+fonts.names.resolvespec = fonts.names.resolve -- only supported in mkiv
+
-- For the moment we put this (adapted) pseudo feature here.
table.insert(fonts.triggers,"itlc")
@@ -11242,7 +12203,187 @@ end
fonts.initializers.base.otf.itlc = itlc
fonts.initializers.node.otf.itlc = itlc
+-- slant and extend
+
+function fonts.initializers.common.slant(tfmdata,value)
+ value = tonumber(value)
+ if not value then
+ value = 0
+ elseif value > 1 then
+ value = 1
+ elseif value < -1 then
+ value = -1
+ end
+ tfmdata.slant_factor = value
+end
+
+function fonts.initializers.common.extend(tfmdata,value)
+ value = tonumber(value)
+ if not value then
+ value = 0
+ elseif value > 10 then
+ value = 10
+ elseif value < -10 then
+ value = -10
+ end
+ tfmdata.extend_factor = value
+end
+
+table.insert(fonts.triggers,"slant")
+table.insert(fonts.triggers,"extend")
+
+fonts.initializers.base.otf.slant = fonts.initializers.common.slant
+fonts.initializers.node.otf.slant = fonts.initializers.common.slant
+fonts.initializers.base.otf.extend = fonts.initializers.common.extend
+fonts.initializers.node.otf.extend = fonts.initializers.common.extend
+
+-- expansion and protrusion
+
+fonts.protrusions = fonts.protrusions or { }
+fonts.protrusions.setups = fonts.protrusions.setups or { }
+
+local setups = fonts.protrusions.setups
+
+function fonts.initializers.common.protrusion(tfmdata,value)
+ if value then
+ local setup = setups[value]
+ if setup then
+ local factor, left, right = setup.factor or 1, setup.left or 1, setup.right or 1
+ local emwidth = tfmdata.parameters.quad
+ tfmdata.auto_protrude = true
+ for i, chr in next, tfmdata.characters do
+ local v, pl, pr = setup[i], nil, nil
+ if v then
+ pl, pr = v[1], v[2]
+ end
+ if pl and pl ~= 0 then chr.left_protruding = left *pl*factor end
+ if pr and pr ~= 0 then chr.right_protruding = right*pr*factor end
+ end
+ end
+ end
+end
+
+fonts.expansions = fonts.expansions or { }
+fonts.expansions.setups = fonts.expansions.setups or { }
+
+local setups = fonts.expansions.setups
+
+function fonts.initializers.common.expansion(tfmdata,value)
+ if value then
+ local setup = setups[value]
+ if setup then
+ local stretch, shrink, step, factor = setup.stretch or 0, setup.shrink or 0, setup.step or 0, setup.factor or 1
+ tfmdata.stretch, tfmdata.shrink, tfmdata.step, tfmdata.auto_expand = stretch * 10, shrink * 10, step * 10, true
+ for i, chr in next, tfmdata.characters do
+ local v = setup[i]
+ if v and v ~= 0 then
+ chr.expansion_factor = v*factor
+ else -- can be option
+ chr.expansion_factor = factor
+ end
+ end
+ end
+ end
+end
+
+table.insert(fonts.manipulators,"protrusion")
+table.insert(fonts.manipulators,"expansion")
+
+fonts.initializers.base.otf.protrusion = fonts.initializers.common.protrusion
+fonts.initializers.node.otf.protrusion = fonts.initializers.common.protrusion
+fonts.initializers.base.otf.expansion = fonts.initializers.common.expansion
+fonts.initializers.node.otf.expansion = fonts.initializers.common.expansion
+
+-- left over
+
function fonts.register_message()
end
+-- example vectors
+
+local byte = string.byte
+
+fonts.expansions.setups['default'] = {
+
+ stretch = 2, shrink = 2, step = .5, factor = 1,
+
+ [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,
+}
+
+fonts.protrusions.setups['default'] = {
+
+ factor = 1, left = 1, right = 1,
+
+ [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
+ [0x3001] = { 0, 1 }, -- ideographic comma 、
+ [0x3002] = { 0, 1 }, -- ideographic full stop 。
+ [0x060C] = { 0, 1 }, -- arabic comma ،
+ [0x061B] = { 0, 1 }, -- arabic semicolon ؛
+ [0x06D4] = { 0, 1 }, -- arabic full stop ۔
+
+}
+
+-- normalizer
+
+fonts.otf.meanings = fonts.otf.meanings or { }
+
+fonts.otf.meanings.normalize = fonts.otf.meanings.normalize or function(t)
+ if t.rand then
+ t.rand = "random"
+ end
+end
+
+-- bonus
+
+function fonts.otf.name_to_slot(name)
+ local tfmdata = fonts.ids[font.current()]
+ if tfmdata and tfmdata.shared then
+ local otfdata = tfmdata.shared.otfdata
+ local unicode = otfdata.luatex.unicodes[name]
+ return unicode and (type(unicode) == "number" and unicode or unicode[1])
+ end
+end
+
+function fonts.otf.char(n)
+ if type(n) == "string" then
+ n = fonts.otf.name_to_slot(n)
+ end
+ if type(n) == "number" then
+ tex.sprint("\\char" .. n)
+ end
+end
+
+-- another one:
+
+fonts.strippables = table.tohash {
+ 0x000AD, 0x017B4, 0x017B5, 0x0200B, 0x0200C, 0x0200D, 0x0200E, 0x0200F, 0x0202A, 0x0202B,
+ 0x0202C, 0x0202D, 0x0202E, 0x02060, 0x02061, 0x02062, 0x02063, 0x0206A, 0x0206B, 0x0206C,
+ 0x0206D, 0x0206E, 0x0206F, 0x0FEFF, 0x1D173, 0x1D174, 0x1D175, 0x1D176, 0x1D177, 0x1D178,
+ 0x1D179, 0x1D17A, 0xE0001, 0xE0020, 0xE0021, 0xE0022, 0xE0023, 0xE0024, 0xE0025, 0xE0026,
+ 0xE0027, 0xE0028, 0xE0029, 0xE002A, 0xE002B, 0xE002C, 0xE002D, 0xE002E, 0xE002F, 0xE0030,
+ 0xE0031, 0xE0032, 0xE0033, 0xE0034, 0xE0035, 0xE0036, 0xE0037, 0xE0038, 0xE0039, 0xE003A,
+ 0xE003B, 0xE003C, 0xE003D, 0xE003E, 0xE003F, 0xE0040, 0xE0041, 0xE0042, 0xE0043, 0xE0044,
+ 0xE0045, 0xE0046, 0xE0047, 0xE0048, 0xE0049, 0xE004A, 0xE004B, 0xE004C, 0xE004D, 0xE004E,
+ 0xE004F, 0xE0050, 0xE0051, 0xE0052, 0xE0053, 0xE0054, 0xE0055, 0xE0056, 0xE0057, 0xE0058,
+ 0xE0059, 0xE005A, 0xE005B, 0xE005C, 0xE005D, 0xE005E, 0xE005F, 0xE0060, 0xE0061, 0xE0062,
+ 0xE0063, 0xE0064, 0xE0065, 0xE0066, 0xE0067, 0xE0068, 0xE0069, 0xE006A, 0xE006B, 0xE006C,
+ 0xE006D, 0xE006E, 0xE006F, 0xE0070, 0xE0071, 0xE0072, 0xE0073, 0xE0074, 0xE0075, 0xE0076,
+ 0xE0077, 0xE0078, 0xE0079, 0xE007A, 0xE007B, 0xE007C, 0xE007D, 0xE007E, 0xE007F,
+}
+
+
end -- closure
diff --git a/Master/texmf-dist/tex/generic/context/luatex-fonts.lua b/Master/texmf-dist/tex/generic/context/luatex-fonts.lua
index 56768138be9..84acb2b18c6 100644
--- a/Master/texmf-dist/tex/generic/context/luatex-fonts.lua
+++ b/Master/texmf-dist/tex/generic/context/luatex-fonts.lua
@@ -111,6 +111,7 @@ else
loadmodule('font-tfm.lua') -- will be split (we may need font-log)
loadmodule('font-cid.lua')
loadmodule('font-ott.lua') -- might be split
+ loadmodule('font-map.lua') -- for loading lum file (will be stripped)
loadmodule('font-otf.lua')
loadmodule('font-otd.lua')
loadmodule('font-oti.lua')
@@ -120,7 +121,6 @@ else
loadmodule('font-otc.lua')
loadmodule('font-def.lua')
loadmodule('font-xtx.lua')
- loadmodule('font-map.lua') -- for loading lum file (will be stripped)
loadmodule('font-dum.lua')
end
diff --git a/Master/texmf-dist/tex/generic/context/luatex-mplib.lua b/Master/texmf-dist/tex/generic/context/luatex-mplib.lua
index 6f9bdc7ef41..0afad083ac2 100644
--- a/Master/texmf-dist/tex/generic/context/luatex-mplib.lua
+++ b/Master/texmf-dist/tex/generic/context/luatex-mplib.lua
@@ -1,6 +1,6 @@
if not modules then modules = { } end modules ['supp-mpl'] = {
version = 1.001,
- comment = "companion to supp-mpl.tex",
+ comment = "companion to luatex-mplib.tex",
author = "Hans Hagen & Taco Hoekwater",
copyright = "ConTeXt Development Team",
license = "public domain",
@@ -22,7 +22,7 @@ if metapost and metapost.version then
else
- local format, concat, abs = string.format, table.concat, math.abs
+ local format, concat, abs, match = string.format, table.concat, math.abs, string.match
local mplib = require ('mplib')
local kpse = require ('kpse')
@@ -320,7 +320,7 @@ else
metapost.report("flushing figure %s",f)
local figure = figures[f]
local objects = getobjects(result,figure,f)
- local fignum = tonumber((figure:filename()):match("([%d]+)$") or figure:charcode() or 0)
+ local fignum = tonumber(match(figure:filename(),"([%d]+)$") or figure:charcode() or 0)
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
diff --git a/Master/texmf-dist/tex/generic/context/luatex-test.tex b/Master/texmf-dist/tex/generic/context/luatex-test.tex
index 1c423ec5b2b..a142d163534 100644
--- a/Master/texmf-dist/tex/generic/context/luatex-test.tex
+++ b/Master/texmf-dist/tex/generic/context/luatex-test.tex
@@ -32,6 +32,12 @@
% \testy این یک متن نمونه است با قلم ذر که درست آمده است.
% \font\testz=name:linlibertineo \testz
+\pdfprotrudechars2 \pdfadjustspacing2
+
+\font\testb=file:lmroman12-regular:+liga;extend=1.5 at 12pt \testb \input tufte \par
+\font\testb=file:lmroman12-regular:+liga;slant=0.8 at 12pt \testb \input tufte \par
+\font\testb=file:lmroman12-regular:+liga;protrusion=default at 12pt \testb \input tufte \par
+
\setmplibformat{plain}
\mplibcode
diff --git a/Master/texmf-dist/tex/generic/context/m-ch-en.tex b/Master/texmf-dist/tex/generic/context/m-ch-en.tex
index 8c55a5669c4..6bd4353199b 100644
--- a/Master/texmf-dist/tex/generic/context/m-ch-en.tex
+++ b/Master/texmf-dist/tex/generic/context/m-ch-en.tex
@@ -1,6 +1,6 @@
-% name : PPCHTEX / english interface
+% name : PPCHTEX / english interface
% version : 1997.03.05
-% author : J. Hagen
+% author : J. Hagen
% copyright : J. Hagen, A.F. Otten
\chardef\interfacenumber=0