From f8ba0550d77fd6e2b307ff9dd3175fc0c613b8e2 Mon Sep 17 00:00:00 2001
From: Hans Hagen
Date: Mon, 4 Aug 2008 15:59:00 +0200
Subject: stable 2008.08.04 15:59
---
context/data/cont-cs-scite.properties | 74 +
context/data/cont-de-scite.properties | 115 +-
context/data/cont-en-scite.properties | 113 +-
context/data/cont-fr-scite.properties | 116 +-
context/data/cont-it-scite.properties | 89 +-
context/data/cont-nl-scite.properties | 131 +-
context/data/cont-ro-scite.properties | 110 +-
context/data/context-jedit-base.xml | 656 -
context/data/context-jedit-cz.xml | 459 -
context/data/context-jedit-de.xml | 461 -
context/data/context-jedit-en.xml | 461 -
context/data/context-jedit-fr.xml | 460 -
context/data/context-jedit-it.xml | 461 -
context/data/context-jedit-nl.xml | 461 -
context/data/context-jedit-ro.xml | 459 -
context/data/context-jedit.xml | 134 -
context/data/context.properties | 34 +-
metapost/context/base/mp-grph.mp | 4 +-
metapost/context/base/mp-mlib.mp | 2 +-
metapost/context/base/mp-tool.mp | 8 +-
scripts/context/lua/luatools.lua | 3041 +-
scripts/context/lua/mtx-babel.lua | 15 +-
scripts/context/lua/mtx-cache.lua | 6 +-
scripts/context/lua/mtx-chars.lua | 62 +-
scripts/context/lua/mtx-check.lua | 2 -
scripts/context/lua/mtx-context.lua | 293 +-
scripts/context/lua/mtx-convert.lua | 63 +-
scripts/context/lua/mtx-fonts.lua | 18 +-
scripts/context/lua/mtx-grep.lua | 80 +
scripts/context/lua/mtx-mptopdf.lua | 138 +
scripts/context/lua/mtx-patterns.lua | 362 +
scripts/context/lua/mtx-server.lua | 279 +-
scripts/context/lua/mtx-update.lua | 33 +-
scripts/context/lua/mtx-watch.lua | 26 +-
scripts/context/lua/mtxrun.lua | 3004 +-
scripts/context/lua/x-ldx.lua | 60 +-
scripts/context/perl/cont_mis.pm | 69 -
scripts/context/perl/cont_set.pm | 670 -
scripts/context/perl/path_tre.pm | 36 -
scripts/context/perl/texexec.pl | 3294 -
scripts/context/perl/texexec.rme | 169 -
scripts/context/perl/texfind.pl | 270 -
scripts/context/perl/texfont.pl | 1373 -
scripts/context/perl/texutil.pl | 2914 -
scripts/context/perl/utiplug.pm | 30 -
scripts/context/ruby/base/tex.rb | 67 +-
scripts/context/ruby/ctxtools.rb | 35 +-
scripts/context/ruby/texmfstart.rb | 8 +-
scripts/context/stubs/mswin/ctxtools.bat | 2 -
scripts/context/stubs/mswin/exatools.bat | 2 -
scripts/context/stubs/mswin/makempy.bat | 2 -
scripts/context/stubs/mswin/mpstools.bat | 2 -
scripts/context/stubs/mswin/mptopdf.bat | 2 -
scripts/context/stubs/mswin/pdftools.bat | 2 -
scripts/context/stubs/mswin/pdftrimwhite.bat | 2 -
scripts/context/stubs/mswin/pstopdf.bat | 2 -
scripts/context/stubs/mswin/rlxtools.bat | 2 -
scripts/context/stubs/mswin/runtools.bat | 2 -
scripts/context/stubs/mswin/texexec.bat | 2 -
scripts/context/stubs/mswin/texfind.bat | 2 -
scripts/context/stubs/mswin/texfont.bat | 2 -
scripts/context/stubs/mswin/texshow.bat | 2 -
scripts/context/stubs/mswin/textools.bat | 2 -
scripts/context/stubs/mswin/texutil.bat | 2 -
scripts/context/stubs/mswin/tmftools.bat | 2 -
scripts/context/stubs/mswin/xmltools.bat | 2 -
scripts/context/stubs/unix/context | 1 -
scripts/context/stubs/unix/ctxtools | 2 -
scripts/context/stubs/unix/exatools | 2 -
scripts/context/stubs/unix/makempy | 2 -
scripts/context/stubs/unix/mpstools | 2 -
scripts/context/stubs/unix/mptopdf | 2 -
scripts/context/stubs/unix/pdftools | 2 -
scripts/context/stubs/unix/pdftrimwhite | 2 -
scripts/context/stubs/unix/pstopdf | 2 -
scripts/context/stubs/unix/rlxtools | 2 -
scripts/context/stubs/unix/runtools | 2 -
scripts/context/stubs/unix/texexec | 2 -
scripts/context/stubs/unix/texfind | 2 -
scripts/context/stubs/unix/texfont | 2 -
scripts/context/stubs/unix/texshow | 2 -
scripts/context/stubs/unix/textools | 2 -
scripts/context/stubs/unix/texutil | 2 -
scripts/context/stubs/unix/tmftools | 2 -
scripts/context/stubs/unix/xmltools | 2 -
tex/context/base/attr-ini.lua | 54 +-
tex/context/base/char-def.lua | 193888 +++++++++++++-----------
tex/context/base/char-def.tex | 8 +-
tex/context/base/char-ini.lua | 387 +-
tex/context/base/char-ini.tex | 9 +
tex/context/base/char-utf.lua | 13 +-
tex/context/base/colo-new.mkii | 6 +-
tex/context/base/colo-new.mkiv | 15 +-
tex/context/base/colo-run.tex | 11 -
tex/context/base/cont-cs.tex | 31 +
tex/context/base/cont-cz.tex | 35 -
tex/context/base/cont-de.tex | 8 +-
tex/context/base/cont-en.tex | 10 +-
tex/context/base/cont-fil.tex | 3 +
tex/context/base/cont-fr.tex | 8 +-
tex/context/base/cont-gb.tex | 34 +
tex/context/base/cont-it.tex | 8 +-
tex/context/base/cont-new.mkiv | 12 +-
tex/context/base/cont-new.tex | 6 +-
tex/context/base/cont-nl.tex | 8 +-
tex/context/base/cont-ro.tex | 4 -
tex/context/base/cont-uk.tex | 38 -
tex/context/base/cont-usr.ori | 14 +-
tex/context/base/context.tex | 21 +-
tex/context/base/core-buf.mkii | 2 +-
tex/context/base/core-buf.mkiv | 13 +-
tex/context/base/core-buf.tex | 6 +-
tex/context/base/core-con.lua | 151 +-
tex/context/base/core-con.mkiv | 41 +-
tex/context/base/core-con.tex | 36 +-
tex/context/base/core-ctx.lua | 93 +
tex/context/base/core-ctx.mkii | 203 +
tex/context/base/core-ctx.mkiv | 27 +
tex/context/base/core-ctx.tex | 191 +-
tex/context/base/core-fig.tex | 25 +-
tex/context/base/core-fil.tex | 20 -
tex/context/base/core-gen.tex | 18 +-
tex/context/base/core-inc.lua | 131 +-
tex/context/base/core-int.tex | 4 +-
tex/context/base/core-job.lua | 131 +-
tex/context/base/core-job.mkiv | 13 +-
tex/context/base/core-job.tex | 7 +-
tex/context/base/core-lst.tex | 26 +-
tex/context/base/core-mat.tex | 6 +-
tex/context/base/core-mis.tex | 187 -
tex/context/base/core-ntb.tex | 12 +-
tex/context/base/core-num.tex | 17 -
tex/context/base/core-obj.lua | 10 +-
tex/context/base/core-pgr.tex | 33 +-
tex/context/base/core-pos.lua | 4 +-
tex/context/base/core-pos.mkiv | 2 +-
tex/context/base/core-ref.tex | 268 +-
tex/context/base/core-reg.tex | 4 +-
tex/context/base/core-rul.lua | 44 +
tex/context/base/core-rul.mkii | 73 +
tex/context/base/core-rul.mkiv | 35 +
tex/context/base/core-rul.tex | 57 +-
tex/context/base/core-sec.tex | 41 +-
tex/context/base/core-spa.lua | 919 +-
tex/context/base/core-spa.mkiv | 193 +-
tex/context/base/core-spa.tex | 79 +-
tex/context/base/core-swd.tex | 4 -
tex/context/base/core-sys.tex | 4 +-
tex/context/base/core-trf.tex | 41 +-
tex/context/base/core-uti.mkiv | 9 +-
tex/context/base/core-ver.mkiv | 2 +-
tex/context/base/enco-def.tex | 3 +
tex/context/base/enco-ec.tex | 1 +
tex/context/base/enco-ini.mkiv | 2 +
tex/context/base/font-afm.lua | 221 +-
tex/context/base/font-col.lua | 167 +
tex/context/base/font-col.tex | 104 +
tex/context/base/font-def.lua | 186 +-
tex/context/base/font-enc.lua | 6 +-
tex/context/base/font-fbk.lua | 172 +-
tex/context/base/font-ini.mkiv | 8 +-
tex/context/base/font-ini.tex | 20 +-
tex/context/base/font-otf.lua | 1293 +-
tex/context/base/font-syn.lua | 76 +-
tex/context/base/font-tfm.lua | 276 +-
tex/context/base/font-vf.lua | 67 +-
tex/context/base/l-aux.lua | 29 +
tex/context/base/l-boolean.lua | 6 +-
tex/context/base/l-dimen.lua | 360 +
tex/context/base/l-dir.lua | 74 +-
tex/context/base/l-file.lua | 158 +-
tex/context/base/l-io.lua | 5 +-
tex/context/base/l-os.lua | 3 +
tex/context/base/l-string.lua | 18 +-
tex/context/base/l-table.lua | 454 +-
tex/context/base/l-tex.lua | 114 -
tex/context/base/l-unicode.lua | 64 +-
tex/context/base/l-utils.lua | 14 +-
tex/context/base/l-xml.lua | 218 +-
tex/context/base/lang-all.xml | 2 +-
tex/context/base/lang-ara.tex | 151 +
tex/context/base/lang-ctx.tex | 5 +-
tex/context/base/lang-ger.tex | 268 +-
tex/context/base/lang-ini.lua | 24 +-
tex/context/base/lang-ini.mkii | 17 +-
tex/context/base/lang-ini.mkiv | 2 +
tex/context/base/lang-ini.tex | 60 +-
tex/context/base/lang-lab.tex | 83 +-
tex/context/base/lang-sla.tex | 102 +-
tex/context/base/lang-spe.tex | 2 +-
tex/context/base/lang-url.lua | 4 +-
tex/context/base/lang-vn.tex | 88 +-
tex/context/base/luat-crl.lua | 20 +-
tex/context/base/luat-env.lua | 145 +-
tex/context/base/luat-env.tex | 13 +-
tex/context/base/luat-exe.lua | 61 +-
tex/context/base/luat-ini.tex | 9 +-
tex/context/base/luat-inp.lua | 1247 +-
tex/context/base/luat-lib.lua | 99 +-
tex/context/base/luat-lib.tex | 9 +-
tex/context/base/luat-lmx.lua | 6 +-
tex/context/base/luat-log.lua | 143 +-
tex/context/base/luat-lua.lua | 42 +
tex/context/base/luat-tex.lua | 251 +-
tex/context/base/luat-tmp.lua | 169 +-
tex/context/base/luat-tra.lua | 126 +-
tex/context/base/luat-tre.lua | 2 +-
tex/context/base/luat-uni.lua | 12 +-
tex/context/base/luat-zip.lua | 119 +-
tex/context/base/lxml-ini.lua | 411 +-
tex/context/base/lxml-ini.tex | 250 +-
tex/context/base/math-def.lua | 3035 -
tex/context/base/math-ent.lua | 4183 +-
tex/context/base/math-ini.lua | 107 +-
tex/context/base/math-ini.mkiv | 7 +-
tex/context/base/meta-ini.mkii | 6 +-
tex/context/base/meta-ini.mkiv | 61 +-
tex/context/base/meta-pdf.lua | 4 +-
tex/context/base/mlib-pdf.lua | 268 +-
tex/context/base/mlib-pps.lua | 19 +-
tex/context/base/mlib-run.lua | 132 +-
tex/context/base/mult-com.tex | 4 -
tex/context/base/mult-con.tex | 19 +
tex/context/base/mult-ini.lua | 6 +-
tex/context/base/mult-sys.tex | 14 +-
tex/context/base/node-ini.lua | 224 +-
tex/context/base/page-flt.tex | 24 +-
tex/context/base/page-lin.mkiv | 1 +
tex/context/base/page-one.tex | 45 +-
tex/context/base/pdfr-def.tex | 1321 +-
tex/context/base/regi-ini.lua | 4 +-
tex/context/base/s-fnt-10.tex | 66 +
tex/context/base/sort-ini.lua | 2 +-
tex/context/base/sort-ini.mkii | 4 +-
tex/context/base/sort-lan.lua | 416 +-
tex/context/base/spec-fdf.mkiv | 16 +-
tex/context/base/spec-pdf.lua | 47 +-
tex/context/base/spec-tpd.mkii | 18 +
tex/context/base/spec-tpd.mkiv | 37 +
tex/context/base/spec-tpd.tex | 16 +-
tex/context/base/spec-tst.tex | 2 +-
tex/context/base/supp-box.tex | 8 +-
tex/context/base/supp-fil.lua | 2 +-
tex/context/base/supp-num.tex | 7 +-
tex/context/base/syst-con.lua | 28 +-
tex/context/base/syst-ext.tex | 12 +-
tex/context/base/syst-gen.tex | 94 -
tex/context/base/syst-new.tex | 10 +-
tex/context/base/syst-str.mkiv | 6 +-
tex/context/base/toks-ini.lua | 46 +-
tex/context/base/type-buy.tex | 44 +-
tex/context/base/type-exp.tex | 6 +-
tex/context/base/type-ghz.tex | 4 +-
tex/context/base/type-hgz.tex | 322 +
tex/context/base/type-one.tex | 32 +-
tex/context/base/type-otf.tex | 75 +-
tex/context/base/type-tmf.tex | 2 +-
tex/context/base/unic-004.tex | 2 +-
tex/context/base/verb-lua.lua | 4 +-
tex/context/base/verb-mp.lua | 2 +-
tex/context/base/verb-tex.lua | 2 +-
tex/context/base/x-calcmath.lua | 431 +
tex/context/base/x-calcmath.mkii | 24 +
tex/context/base/x-calcmath.mkiv | 89 +
tex/context/base/x-cals.mkiv | 55 +-
tex/context/base/x-chemml.mkii | 212 +
tex/context/base/x-chemml.mkiv | 262 +
tex/context/base/x-chemml.tex | 198 +-
tex/context/base/x-cml.mkiv | 262 -
tex/context/base/x-ldx.ctx | 4 +-
tex/context/base/x-ldx.tex | 282 +-
tex/context/base/x-mathml.lua | 485 +-
tex/context/base/x-mathml.mkii | 28 +
tex/context/base/x-mathml.mkiv | 2335 +
tex/context/base/x-mathml.tex | 16 +-
tex/context/base/x-mmb.mkiv | 256 -
tex/context/base/x-mmc.mkiv | 2201 -
tex/context/base/x-mml.mkiv | 49 -
tex/context/base/x-mmp.mkiv | 497 -
tex/context/base/x-newmml.mkii | 2745 +
tex/context/base/x-newmml.mkiv | 16 +
tex/context/base/x-newmml.tex | 2733 +-
tex/context/base/x-physml.mkii | 16 +
tex/context/base/x-physml.mkiv | 16 +
tex/context/base/x-physml.tex | 2 +-
tex/context/base/x-set-11.mkiv | 4 +-
tex/context/base/x-set-12.tex | 4 +-
tex/context/base/xtag-ini.mkii | 6 +
tex/context/base/xtag-ini.mkiv | 2 +
tex/context/base/xtag-ini.tex | 12 +-
tex/context/bib/bibl-apa.tex | 186 +-
tex/context/bib/t-bib.tex | 37 +-
tex/context/config/cont-cz.ini | 5 -
tex/context/config/cont-de.ini | 5 -
tex/context/config/cont-en.ini | 5 -
tex/context/config/cont-fr.ini | 5 -
tex/context/config/cont-it.ini | 5 -
tex/context/config/cont-nl.ini | 5 -
tex/context/config/cont-ro.ini | 5 -
tex/context/config/cont-uk.ini | 5 -
tex/context/config/cont-usr.tex | 14 +-
tex/context/interface/cont-cs.xml | 9910 ++
tex/context/interface/cont-cz.xml | 9 +
tex/context/interface/cont-de.xml | 19668 ++-
tex/context/interface/cont-en.xml | 19668 ++-
tex/context/interface/cont-fr.xml | 19666 ++-
tex/context/interface/cont-it.xml | 19666 ++-
tex/context/interface/cont-nl.xml | 19668 ++-
tex/context/interface/cont-ro.xml | 19676 ++-
tex/context/interface/keys-cs.xml | 1663 +
tex/context/interface/keys-cz.xml | 7 +-
tex/context/interface/keys-de.xml | 11 +-
tex/context/interface/keys-en.xml | 11 +-
tex/context/interface/keys-fr.xml | 11 +-
tex/context/interface/keys-it.xml | 11 +-
tex/context/interface/keys-nl.xml | 11 +-
tex/context/interface/keys-ro.xml | 11 +-
tex/context/patterns/lang-bg.hyp | 8 +
tex/context/patterns/lang-bg.pat | 1667 +
tex/context/patterns/lang-bg.rme | 86 +
tex/context/patterns/lang-ca.hyp | 38 +-
tex/context/patterns/lang-ca.pat | 38 +-
tex/context/patterns/lang-ca.rme | 125 +
tex/context/patterns/lang-cs.hyp | 12 +
tex/context/patterns/lang-cs.pat | 3643 +
tex/context/patterns/lang-cs.rme | 85 +
tex/context/patterns/lang-cz.hyp | 53 -
tex/context/patterns/lang-cz.pat | 3684 -
tex/context/patterns/lang-da.hyp | 28 +-
tex/context/patterns/lang-da.pat | 151 +-
tex/context/patterns/lang-da.rme | 74 +
tex/context/patterns/lang-de.hyp | 42 +-
tex/context/patterns/lang-de.pat | 19302 ++-
tex/context/patterns/lang-de.rme | 31 +
tex/context/patterns/lang-deo.hyp | 37 +-
tex/context/patterns/lang-deo.pat | 19447 ++-
tex/context/patterns/lang-deo.rme | 31 +
tex/context/patterns/lang-en.hyp | 42 -
tex/context/patterns/lang-en.pat | 4966 -
tex/context/patterns/lang-es.hyp | 34 +-
tex/context/patterns/lang-es.pat | 3442 +-
tex/context/patterns/lang-es.rme | 99 +
tex/context/patterns/lang-et.hyp | 12 +-
tex/context/patterns/lang-et.pat | 4364 +-
tex/context/patterns/lang-et.rme | 108 +-
tex/context/patterns/lang-eu.hyp | 8 +
tex/context/patterns/lang-eu.pat | 199 +
tex/context/patterns/lang-eu.rme | 45 +
tex/context/patterns/lang-fi.hyp | 47 +-
tex/context/patterns/lang-fi.pat | 49 +-
tex/context/patterns/lang-fi.rme | 78 +
tex/context/patterns/lang-fr.hyp | 36 +-
tex/context/patterns/lang-fr.pat | 120 +-
tex/context/patterns/lang-fr.rme | 106 +
tex/context/patterns/lang-gb.hyp | 15 +
tex/context/patterns/lang-gb.pat | 8534 ++
tex/context/patterns/lang-gb.rme | 60 +
tex/context/patterns/lang-hr.hyp | 31 +-
tex/context/patterns/lang-hr.pat | 33 +-
tex/context/patterns/lang-hr.rme | 70 +
tex/context/patterns/lang-hu.hyp | 27 +-
tex/context/patterns/lang-hu.pat | 29 +-
tex/context/patterns/lang-hu.rme | 70 +
tex/context/patterns/lang-il.hyp | 8 +
tex/context/patterns/lang-il.pat | 1905 +
tex/context/patterns/lang-il.rme | 70 +
tex/context/patterns/lang-it.hyp | 40 +-
tex/context/patterns/lang-it.pat | 67 +-
tex/context/patterns/lang-it.rme | 88 +
tex/context/patterns/lang-la.hyp | 37 +-
tex/context/patterns/lang-la.pat | 46 +-
tex/context/patterns/lang-la.rme | 105 +
tex/context/patterns/lang-nb.hyp | 9 +
tex/context/patterns/lang-nb.pat | 8 +
tex/context/patterns/lang-nb.rme | 3 +
tex/context/patterns/lang-nl.hyp | 38 +-
tex/context/patterns/lang-nl.pat | 38 +-
tex/context/patterns/lang-nl.rme | 98 +
tex/context/patterns/lang-nn.hyp | 9 +
tex/context/patterns/lang-nn.pat | 8 +
tex/context/patterns/lang-nn.rme | 3 +
tex/context/patterns/lang-pl.hyp | 30 +-
tex/context/patterns/lang-pl.pat | 30 +-
tex/context/patterns/lang-pl.rme | 88 +
tex/context/patterns/lang-pt.hyp | 30 +-
tex/context/patterns/lang-pt.pat | 31 +-
tex/context/patterns/lang-pt.rme | 86 +
tex/context/patterns/lang-ro.hyp | 28 +-
tex/context/patterns/lang-ro.pat | 925 +-
tex/context/patterns/lang-ro.rme | 110 +
tex/context/patterns/lang-ru.hyp | 14 +-
tex/context/patterns/lang-ru.pat | 329 +-
tex/context/patterns/lang-ru.rme | 77 +
tex/context/patterns/lang-sk.hyp | 38 +-
tex/context/patterns/lang-sk.pat | 38 +-
tex/context/patterns/lang-sk.rme | 83 +
tex/context/patterns/lang-sl.hyp | 41 +-
tex/context/patterns/lang-sl.pat | 43 +-
tex/context/patterns/lang-sl.rme | 94 +
tex/context/patterns/lang-sv.hyp | 31 +-
tex/context/patterns/lang-sv.pat | 33 +-
tex/context/patterns/lang-sv.rme | 112 +
tex/context/patterns/lang-tr.hyp | 34 +-
tex/context/patterns/lang-tr.pat | 362 +-
tex/context/patterns/lang-tr.rme | 26 +
tex/context/patterns/lang-uk.hyp | 35 -
tex/context/patterns/lang-uk.pat | 8554 --
tex/context/patterns/lang-us.hyp | 14 +-
tex/context/patterns/lang-us.pat | 14 +-
tex/context/patterns/lang-us.rme | 40 +
tex/context/test/sort-lan-test.tex | 38 +
tpm/t-bib.tpm | 4 +-
web2c/context.cnf | 2 +-
web2c/contextcnf.lua | 6 +-
414 files changed, 254062 insertions(+), 212318 deletions(-)
create mode 100644 context/data/cont-cs-scite.properties
delete mode 100644 context/data/context-jedit-base.xml
delete mode 100644 context/data/context-jedit-cz.xml
delete mode 100644 context/data/context-jedit-de.xml
delete mode 100644 context/data/context-jedit-en.xml
delete mode 100644 context/data/context-jedit-fr.xml
delete mode 100644 context/data/context-jedit-it.xml
delete mode 100644 context/data/context-jedit-nl.xml
delete mode 100644 context/data/context-jedit-ro.xml
delete mode 100644 context/data/context-jedit.xml
create mode 100644 scripts/context/lua/mtx-grep.lua
create mode 100644 scripts/context/lua/mtx-mptopdf.lua
create mode 100644 scripts/context/lua/mtx-patterns.lua
delete mode 100644 scripts/context/perl/cont_mis.pm
delete mode 100644 scripts/context/perl/cont_set.pm
delete mode 100644 scripts/context/perl/path_tre.pm
delete mode 100644 scripts/context/perl/texexec.pl
delete mode 100644 scripts/context/perl/texexec.rme
delete mode 100644 scripts/context/perl/texfind.pl
delete mode 100644 scripts/context/perl/texfont.pl
delete mode 100644 scripts/context/perl/texutil.pl
delete mode 100644 scripts/context/perl/utiplug.pm
delete mode 100755 scripts/context/stubs/mswin/ctxtools.bat
delete mode 100755 scripts/context/stubs/mswin/exatools.bat
delete mode 100755 scripts/context/stubs/mswin/makempy.bat
delete mode 100755 scripts/context/stubs/mswin/mpstools.bat
delete mode 100755 scripts/context/stubs/mswin/mptopdf.bat
delete mode 100755 scripts/context/stubs/mswin/pdftools.bat
delete mode 100755 scripts/context/stubs/mswin/pdftrimwhite.bat
delete mode 100755 scripts/context/stubs/mswin/pstopdf.bat
delete mode 100755 scripts/context/stubs/mswin/rlxtools.bat
delete mode 100755 scripts/context/stubs/mswin/runtools.bat
delete mode 100755 scripts/context/stubs/mswin/texexec.bat
delete mode 100755 scripts/context/stubs/mswin/texfind.bat
delete mode 100755 scripts/context/stubs/mswin/texfont.bat
delete mode 100755 scripts/context/stubs/mswin/texshow.bat
delete mode 100755 scripts/context/stubs/mswin/textools.bat
delete mode 100755 scripts/context/stubs/mswin/texutil.bat
delete mode 100755 scripts/context/stubs/mswin/tmftools.bat
delete mode 100755 scripts/context/stubs/mswin/xmltools.bat
delete mode 100755 scripts/context/stubs/unix/ctxtools
delete mode 100755 scripts/context/stubs/unix/exatools
delete mode 100755 scripts/context/stubs/unix/makempy
delete mode 100755 scripts/context/stubs/unix/mpstools
delete mode 100755 scripts/context/stubs/unix/mptopdf
delete mode 100755 scripts/context/stubs/unix/pdftools
delete mode 100755 scripts/context/stubs/unix/pdftrimwhite
delete mode 100755 scripts/context/stubs/unix/pstopdf
delete mode 100755 scripts/context/stubs/unix/rlxtools
delete mode 100755 scripts/context/stubs/unix/runtools
delete mode 100755 scripts/context/stubs/unix/texexec
delete mode 100755 scripts/context/stubs/unix/texfind
delete mode 100755 scripts/context/stubs/unix/texfont
delete mode 100755 scripts/context/stubs/unix/texshow
delete mode 100755 scripts/context/stubs/unix/textools
delete mode 100755 scripts/context/stubs/unix/texutil
delete mode 100755 scripts/context/stubs/unix/tmftools
delete mode 100755 scripts/context/stubs/unix/xmltools
create mode 100644 tex/context/base/cont-cs.tex
delete mode 100644 tex/context/base/cont-cz.tex
create mode 100644 tex/context/base/cont-gb.tex
delete mode 100644 tex/context/base/cont-uk.tex
create mode 100644 tex/context/base/core-ctx.lua
create mode 100644 tex/context/base/core-ctx.mkii
create mode 100644 tex/context/base/core-ctx.mkiv
create mode 100644 tex/context/base/core-rul.lua
create mode 100644 tex/context/base/core-rul.mkii
create mode 100644 tex/context/base/core-rul.mkiv
create mode 100644 tex/context/base/font-col.lua
create mode 100644 tex/context/base/font-col.tex
create mode 100644 tex/context/base/l-dimen.lua
delete mode 100644 tex/context/base/l-tex.lua
create mode 100644 tex/context/base/lang-ara.tex
create mode 100644 tex/context/base/luat-lua.lua
delete mode 100644 tex/context/base/math-def.lua
create mode 100644 tex/context/base/s-fnt-10.tex
create mode 100644 tex/context/base/spec-tpd.mkii
create mode 100644 tex/context/base/spec-tpd.mkiv
create mode 100644 tex/context/base/type-hgz.tex
create mode 100644 tex/context/base/x-calcmath.lua
create mode 100644 tex/context/base/x-calcmath.mkii
create mode 100644 tex/context/base/x-calcmath.mkiv
create mode 100644 tex/context/base/x-chemml.mkii
create mode 100644 tex/context/base/x-chemml.mkiv
delete mode 100644 tex/context/base/x-cml.mkiv
create mode 100644 tex/context/base/x-mathml.mkii
create mode 100644 tex/context/base/x-mathml.mkiv
delete mode 100644 tex/context/base/x-mmb.mkiv
delete mode 100644 tex/context/base/x-mmc.mkiv
delete mode 100644 tex/context/base/x-mml.mkiv
delete mode 100644 tex/context/base/x-mmp.mkiv
create mode 100644 tex/context/base/x-newmml.mkii
create mode 100644 tex/context/base/x-newmml.mkiv
create mode 100644 tex/context/base/x-physml.mkii
create mode 100644 tex/context/base/x-physml.mkiv
create mode 100644 tex/context/base/xtag-ini.mkii
create mode 100644 tex/context/base/xtag-ini.mkiv
delete mode 100644 tex/context/config/cont-cz.ini
delete mode 100644 tex/context/config/cont-de.ini
delete mode 100644 tex/context/config/cont-en.ini
delete mode 100644 tex/context/config/cont-fr.ini
delete mode 100644 tex/context/config/cont-it.ini
delete mode 100644 tex/context/config/cont-nl.ini
delete mode 100644 tex/context/config/cont-ro.ini
delete mode 100644 tex/context/config/cont-uk.ini
create mode 100644 tex/context/interface/cont-cs.xml
create mode 100644 tex/context/interface/keys-cs.xml
create mode 100644 tex/context/patterns/lang-bg.hyp
create mode 100644 tex/context/patterns/lang-bg.pat
create mode 100644 tex/context/patterns/lang-bg.rme
create mode 100644 tex/context/patterns/lang-ca.rme
create mode 100644 tex/context/patterns/lang-cs.hyp
create mode 100644 tex/context/patterns/lang-cs.pat
create mode 100644 tex/context/patterns/lang-cs.rme
delete mode 100644 tex/context/patterns/lang-cz.hyp
delete mode 100644 tex/context/patterns/lang-cz.pat
create mode 100644 tex/context/patterns/lang-da.rme
create mode 100644 tex/context/patterns/lang-de.rme
create mode 100644 tex/context/patterns/lang-deo.rme
delete mode 100644 tex/context/patterns/lang-en.hyp
delete mode 100644 tex/context/patterns/lang-en.pat
create mode 100644 tex/context/patterns/lang-es.rme
create mode 100644 tex/context/patterns/lang-eu.hyp
create mode 100644 tex/context/patterns/lang-eu.pat
create mode 100644 tex/context/patterns/lang-eu.rme
create mode 100644 tex/context/patterns/lang-fi.rme
create mode 100644 tex/context/patterns/lang-fr.rme
create mode 100644 tex/context/patterns/lang-gb.hyp
create mode 100644 tex/context/patterns/lang-gb.pat
create mode 100644 tex/context/patterns/lang-gb.rme
create mode 100644 tex/context/patterns/lang-hr.rme
create mode 100644 tex/context/patterns/lang-hu.rme
create mode 100644 tex/context/patterns/lang-il.hyp
create mode 100644 tex/context/patterns/lang-il.pat
create mode 100644 tex/context/patterns/lang-il.rme
create mode 100644 tex/context/patterns/lang-it.rme
create mode 100644 tex/context/patterns/lang-la.rme
create mode 100644 tex/context/patterns/lang-nb.hyp
create mode 100644 tex/context/patterns/lang-nb.pat
create mode 100644 tex/context/patterns/lang-nb.rme
create mode 100644 tex/context/patterns/lang-nl.rme
create mode 100644 tex/context/patterns/lang-nn.hyp
create mode 100644 tex/context/patterns/lang-nn.pat
create mode 100644 tex/context/patterns/lang-nn.rme
create mode 100644 tex/context/patterns/lang-pl.rme
create mode 100644 tex/context/patterns/lang-pt.rme
create mode 100644 tex/context/patterns/lang-ro.rme
create mode 100644 tex/context/patterns/lang-ru.rme
create mode 100644 tex/context/patterns/lang-sk.rme
create mode 100644 tex/context/patterns/lang-sl.rme
create mode 100644 tex/context/patterns/lang-sv.rme
create mode 100644 tex/context/patterns/lang-tr.rme
delete mode 100644 tex/context/patterns/lang-uk.hyp
delete mode 100644 tex/context/patterns/lang-uk.pat
create mode 100644 tex/context/patterns/lang-us.rme
create mode 100644 tex/context/test/sort-lan-test.tex
diff --git a/context/data/cont-cs-scite.properties b/context/data/cont-cs-scite.properties
new file mode 100644
index 000000000..b807c1bd2
--- /dev/null
+++ b/context/data/cont-cs-scite.properties
@@ -0,0 +1,74 @@
+keywordclass.macros.context.cs=\
+ MESIC Rimskecislice SLOVA SLOVO Slova Slovo \
+ VSEDNIDEN Znak Znaky aktualnicislonadpisu aktualnidatum barva \
+ bilemisto bublinkovanapoveda bypassblocks cernalinka cernelinky chem \
+ cisla cislonadpisu citace citovat completeregister crlf \
+ datum definetype definuj definujbarvu definujblok definujbloksekce \
+ definujbuffer definujfont definujformatodkazu 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 definujsynonyma definujtabelaci \
+ definujtext definujtrideni definujupravu definujvelikostpapiru definujverzi definujvycet \
+ definujvystup definujzakladnifont definujzasobnikpoli definujznaceni dodrzujprofil dodrzujverzi \
+ dodrzujverziprofilu dvoustrannypapir emptylines externiobraz footnotetext forceblocks \
+ hl hlavnijazyk ininner inouter instalacejazyka interakcnilista \
+ interakcnitlacitka jazyk jdidolu jdina jdinabox klonujpole \
+ komentar konvertujcislo kopirujpole korekcebilehomista listsymbol marginalnilinka \
+ marginalnitext matematika meritko mesic mezera mrizka \
+ nadpis nadruhyokraj nadtrzeni nadtrzeno 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 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 nivy nizky nop obrazovka \
+ odkaz odkaznadatum odkaznastranu odkaznatext odsazovani okr \
+ opis opissoubor oramovani oref orez otocit \
+ oznacverzi parovastrana pis placefloat 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 reset resetznaceni \
+ rimskecislice rozdelplvouciobjekt rozpojeneznaceni roztazene schovejbloky sedabarva \
+ settextcontent setupforms setupitemgroup setuppaper setupstrut sloupec \
+ slovovpravo spodek stanovcharakteristickuseznamu stanovcislonadpisu start startbarva \
+ startcitace startfakt startinteraktivnimenu startkomentar startkomponenta startmarginalnilinka \
+ startpozadi startprodukt startprojekt startprostredi starttextovalinka startverze \
+ startzhustene stop stopbarva stopcitace stopfakt stopinteraktivnimenu \
+ stopkomentar stopkomponenta stopmarginalnilinka stoppozadi stopprodukt stopprojekt \
+ stopprostredi stoptextovalinka stopverze stopzhustene strana sym \
+ symbol synchronizacnilista synchronizovat tab tecky tenkalinka \
+ tenkelinky tex texthlavicky textovalinka textpopisku tlacitko \
+ tref tvrdemezery typebuffer typstrany ukazbarvu ukazexterniobrazy \
+ ukazmrizku ukaznastaveni ukazpaletu ukazpodpery ukazpole ukazpostredizakladnihofontu \
+ ukazramecek ukazsadusymbolu ukazskupinubarev ukazupravu ukazvytisk ukazvzhled \
+ ukazzakladnifont umistikombinovanyseznam umistilegendu umistiloga umistilokalnipoznamkypodcarou umistinadsebe \
+ umistinamrizku umistipodrovnici umistipoznamkypodcarou umistirejstrik umistirovnici umistiseznam \
+ umistivedlesebe umistizalozky 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 zadnytest \
+ zalozka zapisdorejstriku zapisdoseznamu zapisdoseznamuodkazu zapismeziseznam zaramovani \
+ zarovnanonastred zarovnanovlevo zarovnanovpravo zasobnikpoli zaznamovepole zhustene \
+ ziskejbuffer ziskejznaceni zlomek znaceni znak znaky \
+ zpracujbloky zpracujstranu zrcadlit zref
diff --git a/context/data/cont-de-scite.properties b/context/data/cont-de-scite.properties
index ad7d38c69..90d3d6c5e 100644
--- a/context/data/cont-de-scite.properties
+++ b/context/data/cont-de-scite.properties
@@ -1,42 +1,40 @@
keywordclass.macros.context.de=\
Buchstabe Buchstaben MONAT Roemischezahlen WOCHENTAG WOERTER \
- WORT Woerter Wort amgitterausrichten amgitterneuausrichten arg \
- aufseite ausfuellfeld ausfuelltext ausschnitt bearbeitebloecke bearbeiteseite \
- behaltebloecke bei benutzekodierung benutzespezielles beschrifteversion beschriftung \
- bestimmekopfnummer bestimmelistencharakeristika bildschirm blanko bookmark bruch \
- buchstabe buchstaben but bypassblocks chem completeregister \
- crlf datum defineoutput definerawfont definerule definetextposition \
- definetextvariable definetype definiereabbsymbol definiereabsaetze definiereabschnitt definiereabschnittsblock \
- definierebeschreibung definierebeschreibungen definierebeschriftung definiereblanko definiereblock definiereeinzug \
- definierefarbe definierefarbengruppe definierefeld definierefeldstapel definierefliesstext definierefliesstextumgebung \
- definieregleitobjekt 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 doppelseite doppelseitigespapier \
- drehen duennelinie duennerumriss durchgestrichen durchstreichen einezeile \
- einziehen emptylines entknuepfebeschriftung externeabbildung farbe feld \
- feldstapel festesspatium folgeprofil folgeprofilversion folgeversion footnotetext \
- forceblocks format fussnote gefuelltesrechteck gefuelltezeile gestreckt \
- gitter graufarbe haarlinie hauptsprache heutigesdatum heutigeskopfnummer \
- hintergrund hl hoch holebeschriftung holepuffer imlinken \
- imrechten imumriss in inaktiviereinteraktionsmenue inanderermarginale ininner \
- inmarginalie inouter installieresprache interaktionsbalken interaktionsknopfe inzeile \
- irgendwo its keinebeschriftung keinebloeckemehr keinedateienmehr keinekopfundfusszeilen \
- keineliste keinspatium keintest keinzeilenobenundunten keinzwischenraum kleinerdurchschuss \
- klonierefeld knopf kommentar konvertierezahl kopf kopfnummer \
- kopierefeld korrigierezwischenraum labels labeltext linksbuendig listsymbol \
- mar marginallinie marginaltext mathematik monat nachunten \
- nichteinziehen nop notiz passelayoutan passendfeld placefloat \
- placereferencelist placerule placetextvariable platzierebookmarks platziereformel platzierefussnoten \
- platzierelegende platziereliste platzierelogo platzierelokalefussnoten platzierenebeneinander platziereregister \
- platziereuntereinander platziereunterformel platzierezusammengestellteliste pos position positiontext \
- posten programm publikation punkt ran rechteck \
- rechtecke rechtsbuendig ref referenz registrierefelder roemischezahlen \
- ruecksetzten ruecksetztenbeschriftung schreibezumregister schreibezurliste schreibezurreferenzliste schreibezwischenliste \
- seite seitenreferenz seitentyp settext settextvariable setupforms \
- setupitemgroup setuppaper setuprule setupstrut setuptextposition setuptextvariable \
+ WORT Woerter Wort amgitterausrichten amgitterneuausrichten aufseite \
+ ausfuellfeld ausfuelltext ausschnitt bearbeitebloecke bearbeiteseite behaltebloecke \
+ bei benutzekodierung benutzespezielles beschrifteversion beschriftung bestimmekopfnummer \
+ bestimmelistencharakeristika bildschirm blanko bookmark bruch buchstabe \
+ buchstaben but bypassblocks chem completeregister crlf \
+ datum defineoutput definetype definiereabbsymbol definiereabsaetze definiereabschnitt \
+ definiereabschnittsblock definierebeschreibung definierebeschreibungen definierebeschriftung definiereblanko definiereblock \
+ definiereeinzug definierefarbe definierefarbengruppe definierefeld definierefeldstapel definierefliesstext \
+ definierefliesstextumgebung definieregleitobjekt 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 doppelseite \
+ doppelseitigespapier drehen duennelinie duennerumriss durchgestrichen durchstreichen \
+ einezeile einziehen emptylines entknuepfebeschriftung externeabbildung farbe \
+ feld feldstapel festesspatium folgeprofil folgeprofilversion folgeversion \
+ footnotetext forceblocks format fussnote gefuelltesrechteck gefuelltezeile \
+ gestreckt gitter graufarbe haarlinie hauptsprache heutigesdatum \
+ heutigeskopfnummer hintergrund hl hoch holebeschriftung holepuffer \
+ imlinken imrechten imumriss in inaktiviereinteraktionsmenue inanderermarginale \
+ ininner inmarginalie inouter installieresprache interaktionsbalken interaktionsknopfe \
+ inzeile irgendwo its keinebeschriftung keinebloeckemehr keinedateienmehr \
+ keinekopfundfusszeilen keineliste keinspatium keintest keinzeilenobenundunten keinzwischenraum \
+ kleinerdurchschuss klonierefeld knopf kommentar konvertierezahl kopf \
+ kopfnummer kopierefeld korrigierezwischenraum labels labeltext linksbuendig \
+ listsymbol mar marginallinie marginaltext mathematik monat \
+ nachunten nichteinziehen nop notiz passelayoutan passendfeld \
+ placefloat placereferencelist platzierebookmarks platziereformel platzierefussnoten platzierelegende \
+ platziereliste platzierelogo platzierelokalefussnoten platzierenebeneinander platziereregister platziereuntereinander \
+ platziereunterformel platzierezusammengestellteliste pos position posten programm \
+ publikation punkt ran rechteck rechtecke rechtsbuendig \
+ ref referenz registrierefelder roemischezahlen ruecksetzten ruecksetztenbeschriftung \
+ schreibezumregister schreibezurliste schreibezurreferenzliste schreibezwischenliste seite seitenreferenz \
+ seitentyp settext setupforms setupitemgroup setuppaper setupstrut \
showsymbolset spalte spatium spiegeln sprache start \
startfarbe startgeg starthintergrund startinteraktionsmenue startkleinerdurchschuss startkommentar \
startkomponente startmarginallinie startprodukt startprojekt starttextlinie startumgebung \
@@ -44,26 +42,26 @@ keywordclass.macros.context.de=\
stelleanordnenein stelleausgabeein stelleausrichtungein stelleausschnittein stellebeschreibungein stellebeschriftungein \
stellebilderunterschriftein stellebildunterschriftein stellebindestrichein stelleblankoein stelleblockein stelledrehenein \
stelleduennerumrissein stelleeinziehenein stelleeinzuegein stelleengerein stelleexterneabbildungenein stellefarbeein \
- stellefarbenein stellefeldein stellefelderin stellefliesstextein stellefliesstextumgebungein stellefussnotendefinitionein \
- stellefussnotenein stellefusszeileein stellefusszeilentextein stellegefuelltesrechteckein stellegefuelltezeileein stellegegenueberplatzierenein \
- stellegleitobjekteein stellegleitobjektein stellehintergruendeein stellehintergrundein stelleinmarginalieein stelleinteraktionein \
- stelleinteraktionsbalkenein stelleinteraktionsbildschirmein 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 \
- stop stopfarbe stopgeg stophintergrund stopinteraktionsmenue stopkleinerdurchschuss \
- stopkommentar stopkomponente stopmarginallinie stopprodukt stopprojekt stoptextlinie \
- stopumgebung stopversion stopzitat switchtorawfont sym symbol \
- synchronisationsbalken synchronisieren tab teilegleitobjekt tex textlinie \
- textreferenz textvariable tief tiho tip tippedatei \
+ 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 stop stopfarbe stopgeg stophintergrund \
+ stopinteraktionsmenue stopkleinerdurchschuss stopkommentar stopkomponente stopmarginallinie stopprodukt \
+ stopprojekt stoptextlinie stopumgebung stopversion stopzitat sym \
+ symbol synchronisationsbalken synchronisieren tab teilegleitobjekt tex \
+ textlinie textreferenz tief tiho tip tippedatei \
tippen tippepuffer tooltip ueber ueberschrifttext uebersetzten \
ueberstreichen ueberstrichen umrahmt unterstreichen unterstrichen verbergebloecke \
vergleichefarbengruppe vergleichepalette verknuepfebeschriftung verknuepfedokument verknuepfregister version \
@@ -73,5 +71,4 @@ keywordclass.macros.context.de=\
wechselezumfliesstext wochentag wortrechts zeigedruck zeigeeinstellungen zeigeexterneabbildungen \
zeigefarbe zeigefarbengruppe zeigefelder zeigefliesstext zeigefliesstextumgebung zeigegitter \
zeigelayout zeigepalette zeigerahmen zeigestruts zeigeumbruch zentriert \
- ziffern zitat zitieren zu zurbox zusatz \
- zwischenraum
+ ziffern zitat zitieren zu zurbox zwischenraum
diff --git a/context/data/cont-en-scite.properties b/context/data/cont-en-scite.properties
index 0421582a4..e83ec1ddd 100644
--- a/context/data/cont-en-scite.properties
+++ b/context/data/cont-en-scite.properties
@@ -1,21 +1,20 @@
keywordclass.macros.context.en=\
Character Characters MONTH Romannumerals WEEKDAY WORD \
- WORDS Word Words about adaptlayout adding \
- arg at atpage background blackrule blackrules \
- blank bookmark but button bypassblocks character \
- characters chem clip clonefield color column \
- comment comparecolorgroup comparepalet completeregister convertnumber copyfield \
- correctwhitespace coupledocument 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 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 \
+ WORDS Word Words about adaptlayout at \
+ atpage background blackrule blackrules blank bookmark \
+ but button bypassblocks character characters chem \
+ clip clonefield color column comment comparecolorgroup \
+ comparepalet completeregister convertnumber copyfield correctwhitespace coupledocument \
+ 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 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 definetyping defineversion \
determineheadnumber determinelistcharacteristics disableinteractionmenu donttest emptylines externalfigure \
field fieldstack fillinfield fillinline fillinrules fillintext \
fitfield fixedspaces followprofile followprofileversion followversion footnote \
@@ -33,45 +32,43 @@ keywordclass.macros.context.en=\
numbers overbar overbars overstrike overstrikes packed \
page pagereference pagetype periods placebookmarks placecombinedlist \
placefloat placefootnotes placeformula placelegend placelist placelocalfootnotes \
- placelogos placeongrid placeontopofeachother placereferencelist placeregister placerule \
- placesidebyside placesubformula placetextvariable position positiontext processblocks \
- processpage program publication quotation quote ran \
- ref reference referral referraldate reset resetmarking \
- rightaligned romannumerals rotate scale screen 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 \
- setupframed setupframedtexts setuphead setupheader setupheadertexts setupheadnumber \
- setupheads setupheadtext setuphyphenmark setupindentations setupindenting setupinmargin \
- setupinteraction setupinteractionbar setupinteractionscreen setupinterlinespace setupitemgroup setupitems \
- setuplabeltext setuplanguage setuplayout setuplegend setuplinenumbering setuplines \
- setuplinewidth setuplist 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 space splitfloat start \
- startbackground startcolor startcomment startcomponent startenvironment startfact \
- startinteractionmenu startmarginrule startpacked startproduct startproject startquotation \
- starttextrule startversion stop stopbackground stopcolor stopcomment \
- stopcomponent stopenvironment stopfact stopinteractionmenu stopmarginrule stoppacked \
- stopproduct stopproject stopquotation stoptextrule stopversion stretched \
- switchtobodyfont switchtorawfont sym symbol synchronizationbar synchronize \
- tab tex textreference textrule textvariable thinrule \
- thinrules tooltip translate typ type typebuffer \
- typefile underbar underbars useURL useblocks usecommands \
- useencoding useexternaldocument useexternalfigure useexternalfile useexternalfiles useexternalsoundtrack \
- usemodule usereferences usespecials usesymbols version vl \
- weekday whitespace wordright writebetweenlist writetolist writetoreferencelist \
- writetoregister
+ placelogos placeongrid placeontopofeachother placereferencelist placeregister placesidebyside \
+ placesubformula position processblocks processpage program publication \
+ quotation quote ran ref reference referral \
+ referraldate reset resetmarking rightaligned romannumerals rotate \
+ scale screen 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 setupfooter setupfootertexts setupfootnotedefinition \
+ setupfootnotes setupforms setupformulae setupframed setupframedtexts setuphead \
+ setupheader setupheadertexts setupheadnumber setupheads setupheadtext setuphyphenmark \
+ setupindentations setupindenting setupinmargin setupinteraction setupinteractionbar setupinteractionmenu \
+ setupinteractionscreen setupinterlinespace setupitemgroup setupitems setuplabeltext setuplanguage \
+ setuplayout setuplegend setuplinenumbering setuplines setuplinewidth setuplist \
+ 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 space splitfloat \
+ start startbackground startcolor startcomment startcomponent startenvironment \
+ startfact startinteractionmenu startmarginrule startpacked startproduct startproject \
+ startquotation starttextrule startversion stop stopbackground stopcolor \
+ stopcomment stopcomponent stopenvironment stopfact stopinteractionmenu stopmarginrule \
+ stoppacked stopproduct stopproject stopquotation stoptextrule stopversion \
+ stretched switchtobodyfont sym symbol synchronizationbar synchronize \
+ tab tex textreference textrule thinrule thinrules \
+ tooltip translate typ type typebuffer typefile \
+ underbar underbars useURL useblocks usecommands useencoding \
+ useexternaldocument useexternalfigure useexternalfile useexternalfiles useexternalsoundtrack usemodule \
+ usereferences usespecials usesymbols version vl weekday \
+ whitespace wordright writebetweenlist writetolist writetoreferencelist writetoregister
diff --git a/context/data/cont-fr-scite.properties b/context/data/cont-fr-scite.properties
index 133f91ed0..419c54038 100644
--- a/context/data/cont-fr-scite.properties
+++ b/context/data/cont-fr-scite.properties
@@ -1,63 +1,61 @@
keywordclass.macros.context.fr=\
Caractere Caracteres Chiffresromains JOURSEMAINE MOIS MOT \
- MOTS Mot Mots a adaptedisposition affectevariabletexte \
- ajout ajustechamp alaligne alapage aligneadroite aligneagauche \
- aligneaumilieu arg arriereplan baha barreinteraction barresynchronisation \
- bas bouton boutonsinteraction but cacheblocs caractere \
- caracteres champ changepolicebrute changepolicecorps chem chiffresromains \
- citation citer clip clonechamp colonne commentaire \
- comparegroupecouleur comparepalette completeregistre composeenalinea concernant convertitnumero \
- copitchamp corrigeespaceblanc couleur couleurgrise coupledocument couplemarquage \
- couplepapier coupleregistre crlf dactylographier dans dansautremarge \
- dansdroite dansgauche dansmarge date datecourante daterecommandation \
- de decouplemarquage defineframed defineframedtext definit definitbloc \
- definitblocsection definitbuffer definitchamp definitcompoalinea definitconversion definitcouleur \
- definitdactylo definitdemarrestoppe definitdescription definitenumeration definitenvironnementpolicecorps definitetiquette \
- definitflottant definitformatreference definitgroupecouleur definitliste definitlisteimbriquee definitlistereference \
- definitlogo definitmakeup definitmarquage definitmenuinteraction definitnotepdp definitpalette \
- definitparagraphes definitpilechamp definitpolice definitpolicebrute definitpolicecorps definitpositiontexte \
- definitprofil definitprogramme definitreference definitregistre definitregle definitrevetement \
- definitsection definitsortie definitsouschamp definitsymbole definitsymbolefigure definitsynonymes \
- definittabulation definittaillepapier definittete definittexte definittrametableau definittri \
- definittype definitvariabletexte definitversion definitvide demarreciter deplacesurgrille \
- determinecaracteristiqueliste determinenumerotete echelle ecran ecritdansliste ecritdanslistereference \
- ecritentreliste ecritregistre el element elements emptylines \
- espace espaceblanc espacesfixes etiquettes etire fichierdactylo \
- figureexterne forceblocs fraction framed gardeblocs grille \
- groupe haut hl inframed inhibemenuinteraction ininner \
- inouter installelangue joursemaine labeltexte langue langueprincipale \
- ligneh lignenoire ligneregleetexte lignesnoires listesymbole logchamp \
- mar margereglee marquage marquageversion marquepage mathematique \
- mois montrecadre montrechamps montrecouleur montredisposition montreedition \
- montreenvironnementpolicecorps montrefiguresexternes montregrille montregroupecouleur montrejeusymboles montremakeup \
- montrepalette montrepolicecorps montrereglages montrestruts motdroit nop \
- note notepdp numeros numerotete numerotetecourant obtientmarquage \
- oriente overbar overbars page pagedouble pasplusdeblocs \
- pasplusdefichiers periodes pilechamp placecoteacote placeflottant placeformule \
- placelegende placelesunsaudessusdesautres placeliste placelisteinmbriquee placelistereference placelogos \
- placemarquespages placenotespdp placenotespdplocales placeregistre placeregle placesousformule \
- placesurgrille placevariabletexte position positionnetexte prendbuffer programme \
- publication qqpart ran raz razmarquage recommandation \
- ref reference referencepage referencetexte reflete 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 regleinf \
- regleinteraction regleintitule regleintitules reglejeusymboles reglelabeltexte reglelangue \
- reglelegende reglelignes reglelignesnoires reglelignesreglestexte regleliste reglelisteimbriquee \
- reglelistereference reglemakeup reglemargereglee reglemarquage reglemarquagehyphenation reglenotepdp \
- reglenumeropage reglenumerotation reglenumerotationligne reglenumerotationpage reglenumerotationparagraphe reglenumerotete \
- regleoriente reglepalette reglepapier regleparagraphes reglepdp regleplacementopposition \
- reglepolicecorps reglepositionnement reglepositiontexte regleprofils regleprogrammes reglepublications \
- reglereferencage regleregistre regleregle 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 reglevariabletexte regleversions \
+ MOTS Mot Mots a adaptedisposition ajustechamp \
+ alaligne alapage aligneadroite aligneagauche aligneaumilieu arriereplan \
+ baha barreinteraction barresynchronisation bas bouton boutonsinteraction \
+ but cacheblocs caractere caracteres champ changepolicecorps \
+ chem chiffresromains citation citer clip clonechamp \
+ colonne commentaire comparegroupecouleur comparepalette completeregistre composeenalinea \
+ concernant convertitnumero copitchamp corrigeespaceblanc couleur couleurgrise \
+ coupledocument couplemarquage couplepapier coupleregistre crlf dactylographier \
+ dans dansautremarge dansdroite dansgauche dansmarge date \
+ datecourante daterecommandation de decouplemarquage defineframed defineframedtext \
+ definit definitbloc definitblocsection definitbuffer definitchamp definitcompoalinea \
+ definitconversion definitcouleur definitdactylo definitdemarrestoppe definitdescription definitenumeration \
+ definitenvironnementpolicecorps definitetiquette definitflottant definitformatreference definitgroupecouleur definitliste \
+ definitlisteimbriquee definitlistereference definitlogo definitmakeup definitmarquage definitmenuinteraction \
+ definitnotepdp definitpalette definitparagraphes definitpilechamp definitpolice definitpolicecorps \
+ definitprofil definitprogramme definitreference definitregistre definitrevetement definitsection \
+ definitsortie definitsouschamp definitsymbole definitsymbolefigure definitsynonymes definittabulation \
+ definittaillepapier definittete definittexte definittrametableau definittri definittype \
+ definitversion definitvide demarreciter deplacesurgrille determinecaracteristiqueliste determinenumerotete \
+ echelle ecran ecritdansliste ecritdanslistereference ecritentreliste ecritregistre \
+ el element elements emptylines espace espaceblanc \
+ espacesfixes etiquettes etire fichierdactylo figureexterne forceblocs \
+ fraction framed gardeblocs grille groupe haut \
+ hl inframed inhibemenuinteraction ininner inouter installelangue \
+ joursemaine labeltexte langue langueprincipale ligneh lignenoire \
+ ligneregleetexte lignesnoires listesymbole logchamp mar margereglee \
+ marquage marquageversion marquepage mathematique mois montrecadre \
+ montrechamps montrecouleur montredisposition montreedition montreenvironnementpolicecorps montrefiguresexternes \
+ montregrille montregroupecouleur montrejeusymboles montremakeup montrepalette montrepolicecorps \
+ montrereglages montrestruts motdroit nop note notepdp \
+ numeros numerotete numerotetecourant obtientmarquage oriente overbar \
+ overbars page pagedouble pasplusdeblocs pasplusdefichiers periodes \
+ pilechamp placecoteacote placeflottant placeformule placelegende placelesunsaudessusdesautres \
+ placeliste placelisteinmbriquee placelistereference placelogos placemarquespages placenotespdp \
+ placenotespdplocales placeregistre placesousformule placesurgrille position prendbuffer \
+ programme publication qqpart ran raz razmarquage \
+ recommandation ref reference referencepage referencetexte reflete \
+ 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 sansalinea sansespace \
sansespaceblanc sanslignesenteteetpdp sanslignessupetinf sansliste sansmarquage sanstest \
sauteblocs selectionneblocs selectionnepapier selectionneversion separeflottant settext \
@@ -73,4 +71,4 @@ keywordclass.macros.context.fr=\
traitfin traitsfins typ uneligne utiliseURL utiliseblocs \
utilisecommandes utilisedocumentexterne utiliseencodage utilisefichierexterne utilisefichiersexternes utilisefigureexterne \
utilisemodule utilisepsiteaudioexterne utilisereferences utilisespecialites utilisesymboles va \
- vaalaboite vaenbas variabletexte version vide vl
+ vaalaboite vaenbas version vide vl
diff --git a/context/data/cont-it-scite.properties b/context/data/cont-it-scite.properties
index 192a7c07e..14aa9befa 100644
--- a/context/data/cont-it-scite.properties
+++ b/context/data/cont-it-scite.properties
@@ -1,22 +1,21 @@
keywordclass.macros.context.it=\
GIORNOSETTIMANA Lettera Lettere MESE Numeriromani PAROLA \
PAROLE Parola Parole accoppiacarta accoppiadocumento accoppiamarcatura \
- accoppiapagina accoppiaregistro adattacampo adattalayout adding al \
- allineacentro allineadestra allineasinistra ap apagina arg \
- barrainterazione barrasincronizzazione bastablocchi bastafile cambiaafontdeltesto campi \
- camporiempimento capello chim circondato citazione clip \
- clonacampo colonna colore coloregrigio commento completeregister \
- confrontagruppocolori confrontatavolozza convertinumero copiacampo correggispaziobianco crlf \
- da daqualcheparte data datadioggi datareferral definisci \
- definisciambientefontdeltesto definisciblocco definiscibloccosezione definiscibuffer definiscicampo definiscicapoversi \
- definiscicolore definisciconversione definiscidescrizione definiscidimensionicarta definiscielenco definiscielencocombinato \
- definiscienumerazione definiscietichetta definiscifigurasimbolo definiscifont definiscifontdeltesto definiscifontgrezzo \
- definisciformatoriferimento definiscigruppocolori definisciincorniciato definisciiniziatermina definiscilinea definiscilistariferimenti \
- definiscilogo definiscimakeup definiscimarcatura definiscimenuinterazione definiscimodellotabella definiscioggettomobile \
- definisciordinamento definiscioutput definisciposizionetesto definisciprofilo definisciprogramma definisciregistro \
- definiscirientro definisciriferimento definiscirigovuoto definiscisezione definiscisimbolo definiscisinonimi \
- definiscisottocampo definiscisovrapposizione definiscistackcampi definiscitabulato definiscitavolozza definiscitesta \
- definiscitesto definiscitestoincorniciato definiscitype definiscityping definiscivariabiletesto definisciversion \
+ accoppiapagina accoppiaregistro adattacampo adattalayout al allineacentro \
+ allineadestra allineasinistra ap apagina barrainterazione barrasincronizzazione \
+ bastablocchi bastafile cambiaafontdeltesto campi camporiempimento capello \
+ chim circondato citazione clip clonacampo colonna \
+ colore coloregrigio commento completeregister confrontagruppocolori confrontatavolozza \
+ convertinumero copiacampo correggispaziobianco crlf da daqualcheparte \
+ data datadioggi datareferral 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 \
+ definiscimodellotabella definiscioggettomobile definisciordinamento definiscioutput definisciprofilo definisciprogramma \
+ definisciregistro definiscirientro definisciriferimento definiscirigovuoto definiscisezione definiscisimbolo \
+ definiscisinonimi definiscisottocampo definiscisovrapposizione definiscistackcampi definiscitabulato definiscitavolozza \
+ definiscitesta definiscitesto definiscitestoincorniciato definiscitype definiscityping definisciversion \
determinacarattersticheelenco determinanumerotesta disabilitamenuinterazione el elaborablocchi elaborapagina \
elementi elemento emptylines etichette figuraesterna fondo \
forzablocchi frazione giornosettimana griglia hl impaccato \
@@ -25,13 +24,13 @@ keywordclass.macros.context.it=\
impostacaption impostacaptions impostacima impostaclippling impostacolonne impostacolore \
impostacolori impostacombinazioni impostacommento impostadefinizionenotepdp impostadescrizioni impostadimensionicarta \
impostaelementi impostaelenco impostaelencocombinato impostaenumerazioni impostafigureesterne impostafondo \
- impostafontdeltesto impostaforms impostaincorniciato impostainmargine impostainstestazione impostainterazione \
- impostainterlinea impostalayout impostalegenda impostalinea impostalineemargine impostalineenere \
+ impostafontdeltesto impostaforms impostaformule impostaincorniciato impostainmargine impostainstestazione \
+ impostainterazione impostainterlinea impostalayout impostalegenda impostalineemargine impostalineenere \
impostalineeriempimento impostalineesottili impostalineetesto impostalingua impostalistariferimenti impostamaiuscole \
- impostamakeup impostamarcatura impostamenzione impostanotepdp impostanumerazione impostanumerazionecapoversi \
- impostanumerazionepagina impostanumerazionerighe impostanumeropagina impostanumerosottopagina impostanumerotesta impostaoggettimobili \
- impostaoggettomobile impostaordinamento impostaoutput impostaparranging impostapdp impostapiustretto \
- impostaposizionamento impostaposizionamentoopposti impostaposizionetesto impostaprofili impostaprogrammi impostapubblicazioni \
+ 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 \
@@ -39,28 +38,27 @@ keywordclass.macros.context.it=\
impostatab impostatabelle impostatabulato impostatavolozza impostatesta impostateste \
impostatesticima impostatestifondo impostatestiincorniciati impostatestiintestazioni impostatestipdp impostatesto \
impostatestoetichette impostatestointestazioni impostatestotesti impostatolleranza impostatransizionepagina impostatype \
- impostatyping impostaurl impostavariabiletesto impostaversioni in inaltromargine \
- incorniciato indestra ininner inmargine inouter inriga \
- insinistra installalingua intorno lettera lettere lineamargine \
- lineanera lineasottile lineatesto lineenere lineeriempimento lineesottili \
- lingua linguaprincipale listsymbol logcampi mar marcatura \
- marcaversione matematica menzione mese mettielenco mettielencocombinato \
- mettifiancoafianco mettiformula mettiingriglia mettilegenda mettilinea mettiloghi \
- mettinotepdp mettinotepdplocali mettiregistro mettisegnalibro mettisottoformula mettiunosullaltro \
- mettivariabiletesto mostraambientefontdeltesto mostracampi mostracolore mostracornice mostrafiguresterne \
- mostrafontdeltesto mostragriglia mostragruppocolori mostraimpostazioni mostralyout mostramakeup \
- mostrasetsimboli mostrastampa mostrastruts mostratavolozza nascondiblocchi nienteelenco \
- nientelineecimafondo nientelineintestazionepdp nientemarcatura nienterientro nientespazio nientespaziobianco \
- nop nota notapdp notest numeri numeriromani \
- numerotesta numerotestacorrente pagina paroladestra passaafontgrezzo ped \
- pedap placefloat placereferencelist posizionatesto posizione prendibuffer \
- prendimarcatura programma pubblicazione pulsante pulsantinterazione punti \
- qualcheriga ran referral reimposta reimpostamarcatura rientro \
- rif riferimento riferimentopagina riferimentotesto riflessione rigariempimento \
- rigovuoto ruota saltablocchi sbarrati sbarrato scala \
- schermo scrividentroelenco scriviinelenco scriviinlistariferimenti scriviinregistro segnalibro \
- seguiprofilo seguiversione seguiversioneprofilo selezionablocchi selezionacarta selezionaversione \
- separamarcatura settext setupitemgroup setuppaper setvariabiletesto sfondo \
+ impostatyping impostaurl impostaversioni in inaltromargine incorniciato \
+ indestra ininner inmargine inouter inriga insinistra \
+ installalingua intorno lettera lettere lineamargine lineanera \
+ lineasottile lineatesto lineenere lineeriempimento lineesottili lingua \
+ linguaprincipale listsymbol logcampi mar marcatura marcaversione \
+ matematica menzione mese mettielenco mettielencocombinato mettifiancoafianco \
+ mettiformula mettiingriglia mettilegenda mettiloghi mettinotepdp mettinotepdplocali \
+ mettiregistro mettisegnalibro mettisottoformula mettiunosullaltro mostraambientefontdeltesto mostracampi \
+ mostracolore mostracornice mostrafiguresterne mostrafontdeltesto mostragriglia mostragruppocolori \
+ mostraimpostazioni mostralyout mostramakeup mostrasetsimboli mostrastampa mostrastruts \
+ mostratavolozza nascondiblocchi nienteelenco nientelineecimafondo nientelineintestazionepdp nientemarcatura \
+ nienterientro nientespazio nientespaziobianco nop nota notapdp \
+ notest numeri numeriromani numerotesta numerotestacorrente pagina \
+ paroladestra ped pedap placefloat placereferencelist posizione \
+ prendibuffer prendimarcatura programma pubblicazione pulsante pulsantinterazione \
+ punti qualcheriga ran referral reimposta reimpostamarcatura \
+ rientro rif riferimento riferimentopagina riferimentotesto riflessione \
+ rigariempimento rigovuoto ruota saltablocchi sbarrati sbarrato \
+ scala schermo scrividentroelenco scriviinelenco scriviinlistariferimenti scriviinregistro \
+ segnalibro seguiprofilo seguiversione seguiversioneprofilo selezionablocchi selezionacarta \
+ selezionaversione separamarcatura settext setupitemgroup setuppaper sfondo \
sim simbolo sincronizza sopralinea sopralinee sottolinea \
sottolinee spazifissi spazio spaziobianco spezzaoggettomobile spostaagriglia \
stackcampi start startambiente startcitazione startcolore startcommento \
@@ -73,5 +71,4 @@ keywordclass.macros.context.it=\
tooltip traduci typ type typebuffer typefile \
usaURL usablocco usacodifica usacolonnasonoraesterna usacomandi usadocumentoesterno \
usafiguraesterna usafileesterni usafileesterno usamodulo usariferimenti usasimboli \
- usaspecialita vaia vaiabox vaigiu variabiletesto versione \
- vl
+ usaspecialita vaia vaiabox vaigiu versione vl
diff --git a/context/data/cont-nl-scite.properties b/context/data/cont-nl-scite.properties
index df32e4283..7fee928b4 100644
--- a/context/data/cont-nl-scite.properties
+++ b/context/data/cont-nl-scite.properties
@@ -1,29 +1,28 @@
keywordclass.macros.context.nl=\
Letter Letters MAAND Romeins WEEKDAG WOORD \
- WOORDEN Woord Woorden about achtergrond arg \
- bepaalkopnummer bepaallijstkenmerken blanko blokje blokjes blokkeerinteractiemenu \
- bookmark breuk but button chem cijfers \
- citaat citeer clip commentaar converteernummer copieerveld \
- corrigeerwitruimte crlf datum definerawfont definieer definieeralineas \
- definieerbeeldmerk definieerblanko definieerblok definieerbuffer definieerconversie definieerfiguursymbool \
- definieerfont definieerinteractiemenu definieerkadertekst definieerkleur definieerkleurgroep definieerkop \
- definieerkorps definieerkorpsomgeving definieerlijn 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 definieertekstpositie definieertekstvariabele \
- definieertype definieertypen definieeruitvoer definieerveld definieerveldstapel definieerversie \
- doordefinieren doorlabelen doornummeren doorspringen doorstreep doorstrepen \
- dunnelijn dunnelijnen eenregel ergens externfiguur forceerblokken \
- gebruikURL gebruikblokken gebruikcommandos gebruikexterndocument gebruikexternefile gebruikexternefiles \
- gebruikexternfiguur gebruikexterngeluidsfragment gebruikmodule gebruikreferenties gebruikspecials gebruiksymbolen \
- geenblokkenmeer geenbovenenonderregels geenfilesmeer geenhoofdenvoetregels geenlijst geenmarkering \
- geenspatie geentest geenwitruimte grijskleur haalbuffer haalmarkering \
- haarlijn handhaafblokken hl hoofdtaal hoog huidigedatum \
- huidigekopnummer in inanderemarge inbinnen inbuiten inlijnd \
- inlinker inmarge inrechter inregel inspringen installeertaal \
- interactiebalk interactiebuttons invullijnen invulregel invultekst invulveld \
- items its kantlijn kenmerk kenmerkdatum kentekstvariabeletoe \
+ WOORDEN Woord Woorden about achtergrond bepaalkopnummer \
+ bepaallijstkenmerken blanko blokje blokjes blokkeerinteractiemenu bookmark \
+ breuk but button chem cijfers citaat \
+ citeer clip commentaar converteernummer copieerveld corrigeerwitruimte \
+ crlf datum definieer definieeralineas definieerbeeldmerk definieerblanko \
+ definieerblok definieerbuffer definieerconversie definieerfiguursymbool definieerfont 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 doordefinieren doorlabelen doornummeren doorspringen doorstreep \
+ doorstrepen dunnelijn dunnelijnen eenregel ergens externfiguur \
+ forceerblokken gebruikURL gebruikblokken gebruikcommandos gebruikexterndocument gebruikexternefile \
+ gebruikexternefiles gebruikexternfiguur gebruikexterngeluidsfragment gebruikmodule gebruikreferenties gebruikspecials \
+ gebruiksymbolen geenblokkenmeer geenbovenenonderregels geenfilesmeer geenhoofdenvoetregels geenlijst \
+ geenmarkering geenspatie geentest geenwitruimte grijskleur haalbuffer \
+ haalmarkering haarlijn handhaafblokken hl hoofdtaal hoog \
+ huidigedatum huidigekopnummer in inanderemarge inbinnen inbuiten \
+ 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 \
labels labeltekst laho legeregels letter letters \
@@ -32,46 +31,44 @@ keywordclass.macros.context.nl=\
omlijnd onderstreep onderstrepen ontkoppelmarkering op opelkaar \
oppagina overstreep overstrepen pagina paginareferentie paslayoutaan \
passeerblokken passendveld plaatsbeeldmerken plaatsbookmarks plaatsformule plaatslegenda \
- plaatslijn plaatslijst plaatslokalevoetnoten plaatsnaastelkaar plaatsonderelkaar plaatsopgrid \
- plaatsplaatsblok plaatsreferentielijst plaatsregister plaatssamengesteldelijst plaatssubformule plaatstekstvariabele \
- plaatsvoetnoten positioneer positioneertekst programma publicatie punten \
- ran ref referentie regellinks regelmidden regelrechts \
- registreervelden reset resetmarkering romeins rooster roteer \
- schaal scherm schrijfnaarlijst schrijfnaarreferentielijst schrijfnaarregister schrijftussenlijst \
- selecteerblokken selecteerpapier selecteerversie som soortpagina spatie \
- spiegel splitsplaatsblok start startachtergrond startcitaat startcommentaar \
- startgeg startinteractiemenu startkantlijn startkleur startomgeving startonderdeel \
- startopelkaar startprodukt startprojekt starttekstlijn startversie stelachtergrondenin \
- stelachtergrondin stelalineasin stelarrangerenin stelblankoin stelblokin stelblokjesin \
- stelblokkopjein stelblokkopjesin stelbovenin stelboventekstenin stelbufferin stelbuttonsin \
- stelciterenin stelclipin stelcombinatiesin stelcommentaarin steldoordefinierenin steldoornummerenin \
- steldoorspringenin steldunnelijnenin stelexternefigurenin stelformulierenin stelhoofdin stelhoofdtekstenin \
- stelinmargein stelinspringenin stelinteractiebalkin stelinteractiein stelinteractieschermin stelinterliniein \
- stelinvullijnenin stelinvulregelsin stelitemgroepin stelitemsin stelkadertekstenin stelkantlijnin \
- stelkapitalenin stelkleurenin stelkleurin stelkolommenin stelkopin stelkopnummerin \
- stelkoppeltekenin stelkoppenin stelkoptekstin stelkorpsin stelkorpsomgevingin stellabeltekstin \
- stellayoutin stellegendain stellijndiktein stellijnin 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 steltekstpositiein stelteksttekstenin steltekstvariabelein steltolerantiein steltypein \
- steltypenin steluitlijnenin steluitvoerin stelurlin stelveldenin stelveldin \
- stelversiesin stelvoetin stelvoetnootdefinitiein stelvoetnotenin stelvoettekstenin stelwitruimtein \
- stop stopachtergrond stopcitaat stopcommentaar stopgeg stopinteractiemenu \
- stopkantlijn stopkleur stopomgeving stoponderdeel stopopelkaar stopprodukt \
- stopprojekt stoptekstlijn stopversie suggestie switchnaarkorps switchtorawfont \
- sym symbool synchronisatiebalk synchroniseer taal tab \
- tekstlijn tekstreferentie tekstvariabele tex toevoegen toonexternefiguren \
- toongrid tooninstellingen toonkader toonkleur toonkleurgroep toonkorps \
- toonkorpsomgeving toonlayout toonopmaak toonpalet toonprint toonstruts \
- toonsymboolset toonvelden typ type typebuffer typefile \
- uit uitgerekt usecodering vastespaties veld veldstapel \
- verbergblokken vergelijkkleurgroep vergelijkpalet verplaatsopgrid versie vertaal \
- verwerkblokken verwerkpagina vl voetnoot voetnoottekst volgprofiel \
- volgprofielversie volgversie volledigregister weekdag wiskunde witruimte \
- woordrechts
+ plaatslijst plaatslokalevoetnoten plaatsnaastelkaar plaatsonderelkaar plaatsopgrid plaatsplaatsblok \
+ plaatsreferentielijst plaatsregister plaatssamengesteldelijst plaatssubformule plaatsvoetnoten positioneer \
+ programma publicatie punten ran ref referentie \
+ regellinks regelmidden regelrechts registreervelden reset resetmarkering \
+ romeins rooster roteer schaal scherm schrijfnaarlijst \
+ schrijfnaarreferentielijst schrijfnaarregister schrijftussenlijst selecteerblokken selecteerpapier selecteerversie \
+ som soortpagina spatie spiegel splitsplaatsblok start \
+ startachtergrond startcitaat startcommentaar startgeg startinteractiemenu startkantlijn \
+ startkleur startomgeving startonderdeel startopelkaar startprodukt startprojekt \
+ starttekstlijn 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 stop stopachtergrond stopcitaat stopcommentaar \
+ stopgeg stopinteractiemenu stopkantlijn stopkleur stopomgeving stoponderdeel \
+ stopopelkaar stopprodukt stopprojekt stoptekstlijn stopversie suggestie \
+ switchnaarkorps sym symbool synchronisatiebalk synchroniseer taal \
+ tab tekstlijn tekstreferentie tex toonexternefiguren toongrid \
+ tooninstellingen toonkader toonkleur toonkleurgroep toonkorps toonkorpsomgeving \
+ toonlayout toonopmaak toonpalet toonprint toonstruts toonsymboolset \
+ toonvelden typ type typebuffer typefile uit \
+ uitgerekt usecodering vastespaties veld veldstapel verbergblokken \
+ vergelijkkleurgroep vergelijkpalet verplaatsopgrid versie vertaal verwerkblokken \
+ verwerkpagina vl voetnoot voetnoottekst volgprofiel volgprofielversie \
+ volgversie volledigregister weekdag wiskunde witruimte woordrechts
diff --git a/context/data/cont-ro-scite.properties b/context/data/cont-ro-scite.properties
index b5106bc36..ae510e4c7 100644
--- a/context/data/cont-ro-scite.properties
+++ b/context/data/cont-ro-scite.properties
@@ -1,24 +1,23 @@
keywordclass.macros.context.ro=\
CUVANT CUVINTE Cuvant Cuvinte LUNA Litera \
- Litere Numereromane ZIDINSAPTAMANA adapteazaaspect adauga adubuffer \
- adumarcaje afiseazaaspect afiseazacampuri afiseazaculoare afiseazafiguriexterne afiseazafonttext \
- afiseazagrid afiseazagrupculoare afiseazamakeup afiseazamediufonttext afiseazapaleta afiseazarama \
- afiseazasetari afiseazasetsimboluri afiseazastruts afiseazatiparire aliniat aliniatcentru \
- aliniatdreapta aliniatstanga arg ascundeblocuri barainteractiune barasincronizare \
- barasus blanc but butoaneinteractiune buton camp \
- campumplere chem citat clip cloneazacamp coloana \
- comentariu comparagrupculoare comparapaleta completeregister convertestenumar copiazacamp \
- corecteazaspatiualb crlf culoare culoaregri cupleazadocument cupleazamarcaje \
- cupleazaregistru cuvantdreapta data datacurenta datareferit decupleazamarcaje \
- defineste definestealiat definesteantet definesteblanc definestebloc definesteblocsectiune \
- definestebuffer definestecamp definesteconversie definesteculoare definestedescriere definestedimensiunehartie \
- definesteenumerare definesteeticheta definestefloat definestefont definestefontraw definestefonttext \
- definesteformatreferinte definestegrupculori definesteinconjurare definestelista definestelistacombinata definestelistareferinte \
- definestelogo definestemakeup definestemarcaje definestemediulfonttext definestemeniuinteractiune definesteoutput \
- definesteoverlay definestepaleta definesteparagraf definestepozitietext definesteprofil definesteprogram \
- definestereferinte definesteregistru definesterigla definestesablontabel definestesectiune definestesimbol \
- definestesimbolfigura definestesinonim definestesortare definestestartstop definestestivacampuri definestesubcamp \
- definestetabulatori definestetext definestetexteinconjurate definestetextinconjurat definestetyping definestevariabilatext \
+ 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 ascundeblocuri barainteractiune barasincronizare barasus blanc \
+ but butoaneinteractiune buton camp campumplere chem \
+ citat clip cloneazacamp coloana comentariu comparagrupculoare \
+ comparapaleta completeregister convertestenumar copiazacamp corecteazaspatiualb crlf \
+ culoare culoaregri cupleazadocument cupleazamarcaje cupleazaregistru cuvantdreapta \
+ data datacurenta datareferit decupleazamarcaje 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 definesteoutput definesteoverlay definestepaleta definesteparagraf \
+ definesteprofil definesteprogram definestereferinte definesteregistru definestesablontabel definestesectiune \
+ definestesimbol definestesimbolfigura definestesinonim definestesortare definestestartstop definestestivacampuri \
+ definestesubcamp definestetabulatori definestetext definestetexteinconjurate definestetextinconjurat definestetyping \
definesteversiune definetype despre determinacaracteristicilelistei determinanumartitlu dezactiveazameniuinteractiune \
din dute dutebox ecran el element \
emptylines etichete faraaliniat farafisiere faraliniiantetsisubsol faraliniisussijos \
@@ -36,41 +35,40 @@ keywordclass.macros.context.ro=\
minicitat mutapegrid nop nota notasubsol numartitlu \
numartitlucurent numere numereromane nutesta olinie pagina \
paginadubla pastreazablocuri placefloat placereferencelist plaseazapegrid plaseazasemnecarte \
- potrivestecamp pozitie pozitietext proceseazabloc proceseazapagina program \
- publicatie puncte punedeasuprafiecareia punefatainfata puneformula punelegenda \
- punelista punelistacombinata punelogouri punenotesubsol punenotesubsollocale puneregistru \
- punerigla punesubformula punevariabilatext ran ref referinta \
- referintapagina referintatext referit reflexie reset reseteazamarcaje \
- riglatext rigleumplere roteste saripesteblocuri scala scriebuffer \
- scrieinlista scrieinlistareferinte scrieinregistru scrieintreliste 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 seteazafundal seteazafundaluri \
- seteazagrosimelinie seteazaimpartireafloat seteazainconjurat seteazaingust seteazainteractiunea seteazajos \
- seteazalegenda seteazalegendele seteazaliniesilabe seteazaliniesubtire seteazalinii seteazaliniimargine \
- seteazaliniinegre seteazaliniiumplere seteazalista seteazalistacombinata seteazalistareferinte seteazamajuscule \
- seteazamakeup seteazamarcaje seteazamarginal seteazamediulfonttext seteazaminicitat seteazanotasubsol \
- seteazanumarpagina seteazanumarsubpagina seteazanumartitlu seteazanumerotare seteazanumerotarelinii seteazanumerotarepagina \
- seteazanumerotareparagrafe seteazapaleta seteazaparagrafe seteazaplasareaopozita seteazapozitietext seteazaprofile \
- seteazaprograme seteazapublicatii seteazareferinte seteazaregistru seteazarigla 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 seteazavariabilatext seteazaversiuni settextcontent setupitemgroup \
- setuppaper setvariabilatext sim simbol sincronizeaza spatiifixate \
- spatiu spatiualb start startcitat startcomentariu startcomponenta \
- startculoare startfact startfundal startimpachetat startliniemargine startmediu \
- startmeniuinteractiune startprodus startproiect startriglatext startversiune stivacampuri \
- stop stopcitat stopcomentariu stopcomponenta stopculoare stopfact \
- stopfundal stopimpachetat stopliniemargine stopmediu stopmeniuinteractiune stopprodus \
- stopproiect stopriglatext stopversiune sublinie sublinii supralinie \
- tab tex texteticheta textmarginal texttitlu textumplere \
- tippagina titlu tooltip traduce trecilafontraw trecilafonttext \
+ potrivestecamp pozitie proceseazabloc proceseazapagina program publicatie \
+ puncte punedeasuprafiecareia punefatainfata puneformula punelegenda punelista \
+ punelistacombinata punelogouri punenotesubsol punenotesubsollocale puneregistru punesubformula \
+ ran ref referinta referintapagina referintatext referit \
+ reflexie reset reseteazamarcaje riglatext rigleumplere roteste \
+ saripesteblocuri scala scriebuffer scrieinlista scrieinlistareferinte scrieinregistru \
+ scrieintreliste 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 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 setupitemgroup setuppaper sim simbol sincronizeaza \
+ spatiifixate spatiu spatiualb start startcitat startcomentariu \
+ startcomponenta startculoare startfact startfundal startimpachetat startliniemargine \
+ startmediu startmeniuinteractiune startprodus startproiect startriglatext startversiune \
+ stivacampuri stop stopcitat stopcomentariu stopcomponenta stopculoare \
+ stopfact stopfundal stopimpachetat stopliniemargine stopmediu stopmeniuinteractiune \
+ stopprodus stopproiect stopriglatext stopversiune sublinie sublinii \
+ supralinie tab tex texteticheta textmarginal texttitlu \
+ textumplere tippagina titlu tooltip traduce trecilafonttext \
typ type typefile undeva urmeazaprofil urmeazaversiune \
- urmeazaversiuneprofil variabilatext versiune vl zidinsaptamana
+ urmeazaversiuneprofil versiune vl zidinsaptamana
diff --git a/context/data/context-jedit-base.xml b/context/data/context-jedit-base.xml
deleted file mode 100644
index 91e750410..000000000
--- a/context/data/context-jedit-base.xml
+++ /dev/null
@@ -1,656 +0,0 @@
-
-
-
-
-
-
-
-
-
-
- \above
- \abovedisplayshortskip
- \abovedisplayskip
- \abovewithdelims
- \accent
- \adjdemerits
- \advance
- \afterassignment
- \aftergroup
- \atop
- \atopwithdelims
- \badness
- \baselineskip
- \batchmode
- \begingroup
- \belowdisplayshortskip
- \belowdisplayskip
- \binoppenalty
- \botmark
- \box
- \boxmaxdepth
- \brokenpenalty
- \catcode
- \char
- \chardef
- \cleaders
- \closein
- \closeout
- \clubpenalty
- \copy
- \count
- \countdef
- \cr
- \crcr
- \csname
- \day
- \deadcycles
- \def
- \defaulthyphenchar
- \defaultskewchar
- \delcode delimiter
- \delimiterfactor
- \delimeters
- \delimitershortfall
- \delimeters
- \dimen
- \dimendef
- \discretionary
- \displayindent
- \displaylimits
- \displaystyle
- \displaywidowpenalty
- \displaywidth
- \divide
- \doublehyphendemerits
- \dp
- \dump
- \edef
- \else
- \emergencystretch
- \end
- \endcsname
- \endgroup
- \endinput
- \endlinechar
- \eqno
- \errhelp
- \errmessage
- \errorcontextlines
- \errorstopmode
- \escapechar
- \everycr
- \everydisplay
- \everyhbox
- \everyjob
- \everymath
- \everypar
- \everyvbox
- \exhyphenpenalty
- \expandafter
- \fam
- \fi
- \finalhyphendemerits
- \firstmark
- \floatingpenalty
- \font
- \fontdimen
- \fontname
- \futurelet
- \gdef
- \global
- \group
- \globaldefs
- \halign
- \hangafter
- \hangindent
- \hbadness
- \hbox
- \hfil
- \horizontal
- \hfill
- \horizontal
- \hfilneg
- \hfuzz
- \hoffset
- \holdinginserts
- \hrule
- \hsize
- \hskip
- \hss
- \horizontal
- \ht
- \hyphenation
- \hyphenchar
- \hyphenpenalty
- \hyphen
- \if
- \ifcase
- \ifcat
- \ifdim
- \ifeof
- \iffalse
- \ifhbox
- \ifhmode
- \ifinner
- \ifmmode
- \ifnum
- \ifodd
- \iftrue
- \ifvbox
- \ifvmode
- \ifvoid
- \ifx
- \ignorespaces
- \immediate
- \indent
- \input
- \inputlineno
- \input
- \insert
- \insertpenalties
- \interlinepenalty
- \jobname
- \kern
- \language
- \lastbox
- \lastkern
- \lastpenalty
- \lastskip
- \lccode
- \leaders
- \left
- \lefthyphenmin
- \leftskip
- \leqno
- \let
- \limits
- \linepenalty
- \line lineskip
- \lineskiplimit
- \long
- \looseness
- \lower
- \lowercase
- \mag
- \mark
- \mathaccent
- \mathbin
- \mathchar
- \mathchardef
- \mathchoice
- \mathclose
- \mathcode
- \mathinner
- \mathop
- \mathopen
- \mathord
- \mathpunct
- \mathrel
- \mathsurround
- \maxdeadcycles
- \maxdepth
- \meaning
- \medmuskip
- \message
- \mkern
- \month
- \moveleft
- \moveright
- \mskip
- \multiply
- \muskip
- \muskipdef
- \newlinechar
- \noalign
- \noboundary
- \noexpand
- \noindent
- \nolimits
- \nonscript
- \scriptscript
- \nonstopmode
- \nulldelimiterspace
- \nullfont
- \number
- \omit
- \openin
- \openout
- \or
- \outer
- \output
- \outputpenalty
- \over
- \overfullrule
- \overline
- \overwithdelims
- \pagedepth
- \pagefilllstretch
- \pagefillstretch
- \pagefilstretch
- \pagegoal
- \pageshrink
- \pagestretch
- \pagetotal
- \par
- \parfillskip
- \parindent
- \parshape
- \parskip
- \patterns
- \pausing
- \penalty
- \postdisplaypenalty
- \predisplaypenalty
- \predisplaysize
- \pretolerance
- \prevdepth
- \prevgraf
- \radical
- \raise
- \read
- \relax
- \relpenalty
- \right
- \righthyphenmin
- \rightskip
- \romannumeral
- \scriptfont
- \scriptscriptfont
- \scriptscriptstyle
- \scriptspace
- \scriptstyle
- \scrollmode
- \setbox
- \setlanguage
- \sfcode
- \shipout
- \show
- \showbox
- \showboxbreadth
- \showboxdepth
- \showlists
- \showthe
- \skewchar
- \skip
- \skipdef
- \spacefactor
- \spaceskip
- \span
- \special
- \splitbotmark
- \splitfirstmark
- \splitmaxdepth
- \splittopskip
- \string
- \tabskip
- \textfont
- \textstyle
- \the
- \thickmuskip
- \thinmuskip
- \time
- \toks
- \toksdef
- \tolerance
- \topmark
- \topskip
- \tracingcommands
- \tracinglostchars
- \tracingmacros
- \tracingonline
- \tracingoutput
- \tracingpages
- \tracingparagraphs
- \tracingrestores
- \tracingstats
- \uccode
- \uchyph
- \underline
- \unhbox
- \unhcopy
- \unkern
- \unpenalty
- \unskip
- \unvbox
- \unvcopy
- \uppercase
- \vadjust
- \valign
- \vbadness
- \vbox
- \vcenter
- \vfil
- \vfill
- \vfilneg
- \vfuzz
- \voffset
- \vrule
- \vsize
- \vskip
- \vsplit
- \vss
- \vtop
- \wd
- \widowpenalty
- \write
- \xdef
- \xleaders
- \xspaceskip
- \year
-
-
-
-
-
- \beginL
- \beginR
- \botmarks
- \clubpenalties
- \currentgrouplevel
- \currentgrouptype
- \currentifbranch
- \currentiflevel
- \currentiftype
- \detokenize
- \dimexpr
- \displaywidowpenalties
- \endL
- \endR
- \eTeXrevision
- \eTeXversion
- \everyeof
- \firstmarks
- \fontchardp
- \fontcharht
- \fontcharic
- \fontcharwd
- \glueexpr
- \glueshrink
- \glueshrinkorder
- \gluestretch
- \gluestretchorder
- \gluetomu
- \ifcsname
- \ifdefined
- \iffontchar
- \interactionmode
- \interactionmode
- \interlinepenalties
- \lastlinefit
- \lastnodetype
- \marks
- \topmarks
- \
- \muexpr
- \mutoglue
- \numexpr
- \pagediscards
- \parshapedimen
- \parshapeindent
- \parshapelength
- \predisplaydirection
- \savinghyphcodes
- \savingvdiscards
- \scantokens
- \showgroups
- \showifs
- \showtokens
- \splitdiscards
- \splitfirstmarks
- \TeXXeTstate
- \tracingassigns
- \tracinggroups
- \tracingifs
- \tracingnesting
- \tracingscantokens
- \unexpanded
- \unless
- \widowpenalties
-
-
-
-
-
- \pdfadjustspacing
- \pdfannot
- \pdfavoidoverfull
- \pdfcatalog
- \pdfcompresslevel
- \pdfdecimaldigits
- \pdfdest pdfdestmargin
- \pdfendlink
- \pdfendthread
- \pdffontattr
- \pdffontexpand
- \pdffontname
- \pdffontobjnum
- \pdffontsize
- \pdfhorigin
- \pdfimageresolution
- \pdfincludechars
- \pdfinfo
- \pdflastannot
- \pdflastdemerits
- \pdflastobj
- \pdflastvbreakpenalty
- \pdflastxform
- \pdflastximage
- \pdflastximagepages
- \pdflastxpos
- \pdflastypos
- \pdflinesnapx
- \pdflinesnapy
- \pdflinkmargin
- \pdfliteral
- \pdfmapfile
- \pdfmaxpenalty
- \pdfminpenalty
- \pdfmovechars
- \pdfnames
- \pdfobj
- \pdfoptionpdfminorversion
- \pdfoutline
- \pdfoutput
- \pdfpageattr
- \pdfpageheight
- \pdfpageresources
- \pdfpagesattr
- \pdfpagewidth
- \pdfpkresolution
- \pdfprotrudechars
- \pdfrefobj
- \pdfrefxform
- \pdfrefximage
- \pdfsavepos
- \pdfsnaprefpoint
- \pdfsnapx
- \pdfsnapy
- \pdfstartlink
- \pdfstartthread
- \pdftexrevision
- \pdftexversion
- \pdfthread
- \pdfthreadmargin
- \pdfuniqueresname
- \pdfvorigin
- \pdfxform
- \pdfximage
-
-
-
-
-
- \odelimiter
- \omathaccent
- \omathchar
- \oradical
- \omathchardef
- \omathcode
- \odelcode
- \leftghost
- \rightghost
- \charwd
- \charht
- \chardp
- \charit
- \localleftbox
- \localrightbox
- \localinterlinepenalty
- \localbrokenpenalty
- \pagedir
- \bodydir
- \pardir
- \textdir
- \mathdir
- \boxdir
- \nextfakemath
- \pagewidth
- \pageheight
- \pagerightoffset
- \pagebottomoffset
- \nullocp
- \nullocplist
- \ocp
- \externalocp
- \ocplist
- \pushocplist
- \popocplist
- \vclearocplists
- \ocptracelevel
- \addbeforeocplist
- \addafterocplist
- \removebeforeocplist
- \removeafterocplist
- \OmegaVersion
- \InputTranslation
- \OutputTranslation
- \DefaultInputTranslation
- \DefaultOutputTranslation
- \noInputTranslation
- \noOutputTranslation
- \InputMode
- \OutputMode
- \DefaultInputMode
- \DefaultOutputMode
- \noInputMode
- \noOutputMode
- \noDefaultInputMode
- \noDefaultOutputMode
-
-
-
-
-
- \TeX
- \bgroup
- \egroup
- \endgraf
- \space
- \empty
- \null
- \newcount
- \newdimen
- \newskip
- \newmuskip
- \newbox
- \newtoks
- \newhelp
- \newread
- \newwrite
- \newfam
- \newlanguage
- \newinsert
- \newif
- \maxdimen
- \magstephalf
- \magstep
- \frenchspacing
- \nonfrenchspacing
- \normalbaselines
- \obeylines
- \obeyspaces
- \raggedright
- \ttraggedright
- \thinspace
- \negthinspace
- \enspace
- \enskip
- \quad
- \qquad
- \smallskip
- \medskip
- \bigskip
- \removelastskip
- \topglue
- \vglue
- \hglue
- \break
- \nobreak
- \allowbreak
- \filbreak
- \goodbreak
- \smallbreak
- \medbreak
- \bigbreak
- \line
- \leftline
- \rightline
- \centerline
- \rlap
- \llap
- \underbar
- \strutbox
- \strut
- \cases
- \matrix
- \pmatrix
- \bordermatrix
- \eqalign
- \displaylines
- \eqalignno
- \leqalignno
- \pageno
- \folio
- \tracingall
- \showhyphens
- \fmtname
- \fmtversion
- \hphantom
- \vphantom
- \phantom
- \smash
-
-
-
-
-
- \eTeX
- \newmarks
- \grouptype
- \interactionmode
- \nodetype
- \iftype
- \tracingall
- \loggingall
- \tracingnone
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/context/data/context-jedit-cz.xml b/context/data/context-jedit-cz.xml
deleted file mode 100644
index 42fcbbe08..000000000
--- a/context/data/context-jedit-cz.xml
+++ /dev/null
@@ -1,459 +0,0 @@
-
-
-
-
-
-
-
- \MESIC
- \Rimskecislice
- \SLOVA
- \SLOVO
- \Slova
- \Slovo
- \VSEDNIDEN
- \Znak
- \Znaky
- \aktualnicislonadpisu
- \aktualnidatum
- \arg
- \barva
- \bilemisto
- \bublinkovanapoveda
- \bypassblocks
- \cernalinka
- \cernelinky
- \chem
- \cisla
- \cislonadpisu
- \citace
- \citovat
- \completeregister
- \crlf
- \datum
- \definerawfont
- \definerule
- \definetextposition
- \definetextvariable
- \definetype
- \definuj
- \definujbarvu
- \definujblok
- \definujbloksekce
- \definujbuffer
- \definujfont
- \definujformatodkazu
- \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
- \definujsynonyma
- \definujtabelaci
- \definujtext
- \definujtrideni
- \definujupravu
- \definujvelikostpapiru
- \definujverzi
- \definujvycet
- \definujvystup
- \definujzakladnifont
- \definujzasobnikpoli
- \definujznaceni
- \dodrzujprofil
- \dodrzujverzi
- \dodrzujverziprofilu
- \dvoustrannypapir
- \emptylines
- \externiobraz
- \footnotetext
- \forceblocks
- \hl
- \hlavnijazyk
- \ininner
- \inouter
- \instalacejazyka
- \interakcnilista
- \interakcnitlacitka
- \jazyk
- \jdidolu
- \jdina
- \jdinabox
- \klonujpole
- \komentar
- \konvertujcislo
- \kopirujpole
- \korekcebilehomista
- \listsymbol
- \marginalnilinka
- \marginalnitext
- \matematika
- \meritko
- \mesic
- \mezera
- \mrizka
- \nadpis
- \nadruhyokraj
- \nadtrzeni
- \nadtrzeno
- \naokraj
- \nastavbarvu
- \nastavbarvy
- \nastavbilamista
- \nastavblok
- \nastavbloksekce
- \nastavbuffer
- \nastavcernelinky
- \nastavcislonadpisu
- \nastavcislostrany
- \nastavcislovani
- \nastavcislovaniodstavcu
- \nastavcislovaniradku
- \nastavcislovanistran
- \nastavcitaci
- \nastavdefinicipoznamekpodcarou
- \nastavdeleniplvoucichobjektu
- \nastavdelitko
- \nastavdolnitexty
- \nastavexterniobrazy
- \nastavhorejsek
- \nastavhornitexty
- \nastavinterakci
- \nastavinterakcnilistu
- \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
- \nastavpoznamkypodcarou
- \nastavprechodstrany
- \nastavpreskok
- \nastavprofily
- \nastavprogramy
- \nastavprostredizakladnihofontu
- \nastavpublikace
- \nastavradkovani
- \nastavradky
- \nastavrastr
- \nastavrejstrik
- \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
- \nivy
- \nizky
- \nop
- \obrazovka
- \odkaz
- \odkaznadatum
- \odkaznastranu
- \odkaznatext
- \odsazovani
- \okr
- \opis
- \opissoubor
- \oramovani
- \oref
- \orez
- \otocit
- \oznacverzi
- \parovastrana
- \pis
- \placefloat
- \placereferencelist
- \placerule
- \placetextvariable
- \podtrzeni
- \podtrzeno
- \pol
- \pole
- \polozka
- \polozky
- \popisky
- \porovnejpaletu
- \porovnejskupinubarev
- \positiontext
- \pozadi
- \pozice
- \poznamka
- \poznamkapodcarou
- \pref
- \prelozit
- \premistinamrizku
- \prepninazakladnifont
- \preskoc
- \preskrtnuti
- \preskrtnuto
- \prizpusobivepole
- \prizpusobvzhled
- \program
- \propojeneznaceni
- \propojenydokument
- \propojenyrejstrik
- \publikace
- \ran
- \ref
- \reset
- \resetznaceni
- \rimskecislice
- \rozdelplvouciobjekt
- \rozpojeneznaceni
- \roztazene
- \schovejbloky
- \scitani
- \sedabarva
- \settextcontent
- \settextvariable
- \setupforms
- \setupitemgroup
- \setuppaper
- \setuprule
- \setupstrut
- \setuptextposition
- \setuptextvariable
- \sloupec
- \slovovpravo
- \spodek
- \stanovcharakteristickuseznamu
- \stanovcislonadpisu
- \start
- \startbarva
- \startcitace
- \startfakt
- \startinteraktivnimenu
- \startkomentar
- \startkomponenta
- \startmarginalnilinka
- \startpozadi
- \startprodukt
- \startprojekt
- \startprostredi
- \starttextovalinka
- \startverze
- \startzhustene
- \stop
- \stopbarva
- \stopcitace
- \stopfakt
- \stopinteraktivnimenu
- \stopkomentar
- \stopkomponenta
- \stopmarginalnilinka
- \stoppozadi
- \stopprodukt
- \stopprojekt
- \stopprostredi
- \stoptextovalinka
- \stopverze
- \stopzhustene
- \strana
- \switchtorawfont
- \sym
- \symbol
- \synchronizacnilista
- \synchronizovat
- \tab
- \tecky
- \tenkalinka
- \tenkelinky
- \tex
- \texthlavicky
- \textovalinka
- \textpopisku
- \textvariable
- \tlacitko
- \tref
- \tvrdemezery
- \typebuffer
- \typstrany
- \ukazbarvu
- \ukazexterniobrazy
- \ukazmrizku
- \ukaznastaveni
- \ukazpaletu
- \ukazpodpery
- \ukazpole
- \ukazpostredizakladnihofontu
- \ukazramecek
- \ukazsadusymbolu
- \ukazskupinubarev
- \ukazupravu
- \ukazvytisk
- \ukazvzhled
- \ukazzakladnifont
- \umistikombinovanyseznam
- \umistilegendu
- \umistiloga
- \umistilokalnipoznamkypodcarou
- \umistinadsebe
- \umistinamrizku
- \umistipodrovnici
- \umistipoznamkypodcarou
- \umistirejstrik
- \umistirovnici
- \umistiseznam
- \umistivedlesebe
- \umistizalozky
- \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
- \zadnytest
- \zalozka
- \zapisdorejstriku
- \zapisdoseznamu
- \zapisdoseznamuodkazu
- \zapismeziseznam
- \zaramovani
- \zarovnanonastred
- \zarovnanovlevo
- \zarovnanovpravo
- \zasobnikpoli
- \zaznamovepole
- \zhustene
- \ziskejbuffer
- \ziskejznaceni
- \zlomek
- \znaceni
- \znak
- \znaky
- \zpracujbloky
- \zpracujstranu
- \zrcadlit
- \zref
-
-
-
diff --git a/context/data/context-jedit-de.xml b/context/data/context-jedit-de.xml
deleted file mode 100644
index 820ea8fbc..000000000
--- a/context/data/context-jedit-de.xml
+++ /dev/null
@@ -1,461 +0,0 @@
-
-
-
-
-
-
-
- \Buchstabe
- \Buchstaben
- \MONAT
- \Roemischezahlen
- \WOCHENTAG
- \WOERTER
- \WORT
- \Woerter
- \Wort
- \amgitterausrichten
- \amgitterneuausrichten
- \arg
- \aufseite
- \ausfuellfeld
- \ausfuelltext
- \ausschnitt
- \bearbeitebloecke
- \bearbeiteseite
- \behaltebloecke
- \bei
- \benutzekodierung
- \benutzespezielles
- \beschrifteversion
- \beschriftung
- \bestimmekopfnummer
- \bestimmelistencharakeristika
- \bildschirm
- \blanko
- \bookmark
- \bruch
- \buchstabe
- \buchstaben
- \but
- \bypassblocks
- \chem
- \completeregister
- \crlf
- \datum
- \defineoutput
- \definerawfont
- \definerule
- \definetextposition
- \definetextvariable
- \definetype
- \definiereabbsymbol
- \definiereabsaetze
- \definiereabschnitt
- \definiereabschnittsblock
- \definierebeschreibung
- \definierebeschreibungen
- \definierebeschriftung
- \definiereblanko
- \definiereblock
- \definiereeinzug
- \definierefarbe
- \definierefarbengruppe
- \definierefeld
- \definierefeldstapel
- \definierefliesstext
- \definierefliesstextumgebung
- \definieregleitobjekt
- \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
- \doppelseite
- \doppelseitigespapier
- \drehen
- \duennelinie
- \duennerumriss
- \durchgestrichen
- \durchstreichen
- \einezeile
- \einziehen
- \emptylines
- \entknuepfebeschriftung
- \externeabbildung
- \farbe
- \feld
- \feldstapel
- \festesspatium
- \folgeprofil
- \folgeprofilversion
- \folgeversion
- \footnotetext
- \forceblocks
- \format
- \fussnote
- \gefuelltesrechteck
- \gefuelltezeile
- \gestreckt
- \gitter
- \graufarbe
- \haarlinie
- \hauptsprache
- \heutigesdatum
- \heutigeskopfnummer
- \hintergrund
- \hl
- \hoch
- \holebeschriftung
- \holepuffer
- \imlinken
- \imrechten
- \imumriss
- \in
- \inaktiviereinteraktionsmenue
- \inanderermarginale
- \ininner
- \inmarginalie
- \inouter
- \installieresprache
- \interaktionsbalken
- \interaktionsknopfe
- \inzeile
- \irgendwo
- \its
- \keinebeschriftung
- \keinebloeckemehr
- \keinedateienmehr
- \keinekopfundfusszeilen
- \keineliste
- \keinspatium
- \keintest
- \keinzeilenobenundunten
- \keinzwischenraum
- \kleinerdurchschuss
- \klonierefeld
- \knopf
- \kommentar
- \konvertierezahl
- \kopf
- \kopfnummer
- \kopierefeld
- \korrigierezwischenraum
- \labels
- \labeltext
- \linksbuendig
- \listsymbol
- \mar
- \marginallinie
- \marginaltext
- \mathematik
- \monat
- \nachunten
- \nichteinziehen
- \nop
- \notiz
- \passelayoutan
- \passendfeld
- \placefloat
- \placereferencelist
- \placerule
- \placetextvariable
- \platzierebookmarks
- \platziereformel
- \platzierefussnoten
- \platzierelegende
- \platziereliste
- \platzierelogo
- \platzierelokalefussnoten
- \platzierenebeneinander
- \platziereregister
- \platziereuntereinander
- \platziereunterformel
- \platzierezusammengestellteliste
- \pos
- \position
- \positiontext
- \posten
- \programm
- \publikation
- \punkt
- \ran
- \rechteck
- \rechtecke
- \rechtsbuendig
- \ref
- \referenz
- \registrierefelder
- \roemischezahlen
- \ruecksetzten
- \ruecksetztenbeschriftung
- \schreibezumregister
- \schreibezurliste
- \schreibezurreferenzliste
- \schreibezwischenliste
- \seite
- \seitenreferenz
- \seitentyp
- \settext
- \settextvariable
- \setupforms
- \setupitemgroup
- \setuppaper
- \setuprule
- \setupstrut
- \setuptextposition
- \setuptextvariable
- \showsymbolset
- \spalte
- \spatium
- \spiegeln
- \sprache
- \start
- \startfarbe
- \startgeg
- \starthintergrund
- \startinteraktionsmenue
- \startkleinerdurchschuss
- \startkommentar
- \startkomponente
- \startmarginallinie
- \startprodukt
- \startprojekt
- \starttextlinie
- \startumgebung
- \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
- \stellefussnotendefinitionein
- \stellefussnotenein
- \stellefusszeileein
- \stellefusszeilentextein
- \stellegefuelltesrechteckein
- \stellegefuelltezeileein
- \stellegegenueberplatzierenein
- \stellegleitobjekteein
- \stellegleitobjektein
- \stellehintergruendeein
- \stellehintergrundein
- \stelleinmarginalieein
- \stelleinteraktionein
- \stelleinteraktionsbalkenein
- \stelleinteraktionsbildschirmein
- \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
- \stop
- \stopfarbe
- \stopgeg
- \stophintergrund
- \stopinteraktionsmenue
- \stopkleinerdurchschuss
- \stopkommentar
- \stopkomponente
- \stopmarginallinie
- \stopprodukt
- \stopprojekt
- \stoptextlinie
- \stopumgebung
- \stopversion
- \stopzitat
- \switchtorawfont
- \sym
- \symbol
- \synchronisationsbalken
- \synchronisieren
- \tab
- \teilegleitobjekt
- \tex
- \textlinie
- \textreferenz
- \textvariable
- \tief
- \tiho
- \tip
- \tippedatei
- \tippen
- \tippepuffer
- \tooltip
- \ueber
- \ueberschrifttext
- \uebersetzten
- \ueberstreichen
- \ueberstrichen
- \umrahmt
- \unterstreichen
- \unterstrichen
- \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
- \zusatz
- \zwischenraum
-
-
-
diff --git a/context/data/context-jedit-en.xml b/context/data/context-jedit-en.xml
deleted file mode 100644
index 34359ca15..000000000
--- a/context/data/context-jedit-en.xml
+++ /dev/null
@@ -1,461 +0,0 @@
-
-
-
-
-
-
-
- \Character
- \Characters
- \MONTH
- \Romannumerals
- \WEEKDAY
- \WORD
- \WORDS
- \Word
- \Words
- \about
- \adaptlayout
- \adding
- \arg
- \at
- \atpage
- \background
- \blackrule
- \blackrules
- \blank
- \bookmark
- \but
- \button
- \bypassblocks
- \character
- \characters
- \chem
- \clip
- \clonefield
- \color
- \column
- \comment
- \comparecolorgroup
- \comparepalet
- \completeregister
- \convertnumber
- \copyfield
- \correctwhitespace
- \coupledocument
- \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
- \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
- \determineheadnumber
- \determinelistcharacteristics
- \disableinteractionmenu
- \donttest
- \emptylines
- \externalfigure
- \field
- \fieldstack
- \fillinfield
- \fillinline
- \fillinrules
- \fillintext
- \fitfield
- \fixedspaces
- \followprofile
- \followprofileversion
- \followversion
- \footnote
- \footnotetext
- \forceblocks
- \fraction
- \framed
- \from
- \getbuffer
- \getmarking
- \godown
- \goto
- \gotobox
- \graycolor
- \grid
- \hairline
- \head
- \headnumber
- \headtext
- \hideblocks
- \high
- \hl
- \in
- \indenting
- \inframed
- \ininner
- \inleft
- \inline
- \inmargin
- \inothermargin
- \inouter
- \inright
- \installlanguage
- \interactionbar
- \interactionbuttons
- \item
- \items
- \its
- \keepblocks
- \labels
- \labeltext
- \language
- \leftaligned
- \listsymbol
- \logfields
- \lohi
- \low
- \mainlanguage
- \mar
- \marginrule
- \margintext
- \marking
- \markversion
- \mathematics
- \midaligned
- \mirror
- \month
- \moveongrid
- \noheaderandfooterlines
- \noindenting
- \nolist
- \nomarking
- \nomoreblocks
- \nomorefiles
- \nop
- \nospace
- \note
- \notopandbottomlines
- \nowhitespace
- \numbers
- \overbar
- \overbars
- \overstrike
- \overstrikes
- \packed
- \page
- \pagereference
- \pagetype
- \periods
- \placebookmarks
- \placecombinedlist
- \placefloat
- \placefootnotes
- \placeformula
- \placelegend
- \placelist
- \placelocalfootnotes
- \placelogos
- \placeongrid
- \placeontopofeachother
- \placereferencelist
- \placeregister
- \placerule
- \placesidebyside
- \placesubformula
- \placetextvariable
- \position
- \positiontext
- \processblocks
- \processpage
- \program
- \publication
- \quotation
- \quote
- \ran
- \ref
- \reference
- \referral
- \referraldate
- \reset
- \resetmarking
- \rightaligned
- \romannumerals
- \rotate
- \scale
- \screen
- \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
- \setupframed
- \setupframedtexts
- \setuphead
- \setupheader
- \setupheadertexts
- \setupheadnumber
- \setupheads
- \setupheadtext
- \setuphyphenmark
- \setupindentations
- \setupindenting
- \setupinmargin
- \setupinteraction
- \setupinteractionbar
- \setupinteractionscreen
- \setupinterlinespace
- \setupitemgroup
- \setupitems
- \setuplabeltext
- \setuplanguage
- \setuplayout
- \setuplegend
- \setuplinenumbering
- \setuplines
- \setuplinewidth
- \setuplist
- \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
- \space
- \splitfloat
- \start
- \startbackground
- \startcolor
- \startcomment
- \startcomponent
- \startenvironment
- \startfact
- \startinteractionmenu
- \startmarginrule
- \startpacked
- \startproduct
- \startproject
- \startquotation
- \starttextrule
- \startversion
- \stop
- \stopbackground
- \stopcolor
- \stopcomment
- \stopcomponent
- \stopenvironment
- \stopfact
- \stopinteractionmenu
- \stopmarginrule
- \stoppacked
- \stopproduct
- \stopproject
- \stopquotation
- \stoptextrule
- \stopversion
- \stretched
- \switchtobodyfont
- \switchtorawfont
- \sym
- \symbol
- \synchronizationbar
- \synchronize
- \tab
- \tex
- \textreference
- \textrule
- \textvariable
- \thinrule
- \thinrules
- \tooltip
- \translate
- \typ
- \type
- \typebuffer
- \typefile
- \underbar
- \underbars
- \useURL
- \useblocks
- \usecommands
- \useencoding
- \useexternaldocument
- \useexternalfigure
- \useexternalfile
- \useexternalfiles
- \useexternalsoundtrack
- \usemodule
- \usereferences
- \usespecials
- \usesymbols
- \version
- \vl
- \weekday
- \whitespace
- \wordright
- \writebetweenlist
- \writetolist
- \writetoreferencelist
- \writetoregister
-
-
-
diff --git a/context/data/context-jedit-fr.xml b/context/data/context-jedit-fr.xml
deleted file mode 100644
index 0588718a4..000000000
--- a/context/data/context-jedit-fr.xml
+++ /dev/null
@@ -1,460 +0,0 @@
-
-
-
-
-
-
-
- \Caractere
- \Caracteres
- \Chiffresromains
- \JOURSEMAINE
- \MOIS
- \MOT
- \MOTS
- \Mot
- \Mots
- \a
- \adaptedisposition
- \affectevariabletexte
- \ajout
- \ajustechamp
- \alaligne
- \alapage
- \aligneadroite
- \aligneagauche
- \aligneaumilieu
- \arg
- \arriereplan
- \baha
- \barreinteraction
- \barresynchronisation
- \bas
- \bouton
- \boutonsinteraction
- \but
- \cacheblocs
- \caractere
- \caracteres
- \champ
- \changepolicebrute
- \changepolicecorps
- \chem
- \chiffresromains
- \citation
- \citer
- \clip
- \clonechamp
- \colonne
- \commentaire
- \comparegroupecouleur
- \comparepalette
- \completeregistre
- \composeenalinea
- \concernant
- \convertitnumero
- \copitchamp
- \corrigeespaceblanc
- \couleur
- \couleurgrise
- \coupledocument
- \couplemarquage
- \couplepapier
- \coupleregistre
- \crlf
- \dactylographier
- \dans
- \dansautremarge
- \dansdroite
- \dansgauche
- \dansmarge
- \date
- \datecourante
- \daterecommandation
- \de
- \decouplemarquage
- \defineframed
- \defineframedtext
- \definit
- \definitbloc
- \definitblocsection
- \definitbuffer
- \definitchamp
- \definitcompoalinea
- \definitconversion
- \definitcouleur
- \definitdactylo
- \definitdemarrestoppe
- \definitdescription
- \definitenumeration
- \definitenvironnementpolicecorps
- \definitetiquette
- \definitflottant
- \definitformatreference
- \definitgroupecouleur
- \definitliste
- \definitlisteimbriquee
- \definitlistereference
- \definitlogo
- \definitmakeup
- \definitmarquage
- \definitmenuinteraction
- \definitnotepdp
- \definitpalette
- \definitparagraphes
- \definitpilechamp
- \definitpolice
- \definitpolicebrute
- \definitpolicecorps
- \definitpositiontexte
- \definitprofil
- \definitprogramme
- \definitreference
- \definitregistre
- \definitregle
- \definitrevetement
- \definitsection
- \definitsortie
- \definitsouschamp
- \definitsymbole
- \definitsymbolefigure
- \definitsynonymes
- \definittabulation
- \definittaillepapier
- \definittete
- \definittexte
- \definittrametableau
- \definittri
- \definittype
- \definitvariabletexte
- \definitversion
- \definitvide
- \demarreciter
- \deplacesurgrille
- \determinecaracteristiqueliste
- \determinenumerotete
- \echelle
- \ecran
- \ecritdansliste
- \ecritdanslistereference
- \ecritentreliste
- \ecritregistre
- \el
- \element
- \elements
- \emptylines
- \espace
- \espaceblanc
- \espacesfixes
- \etiquettes
- \etire
- \fichierdactylo
- \figureexterne
- \forceblocs
- \fraction
- \framed
- \gardeblocs
- \grille
- \groupe
- \haut
- \hl
- \inframed
- \inhibemenuinteraction
- \ininner
- \inouter
- \installelangue
- \joursemaine
- \labeltexte
- \langue
- \langueprincipale
- \ligneh
- \lignenoire
- \ligneregleetexte
- \lignesnoires
- \listesymbole
- \logchamp
- \mar
- \margereglee
- \marquage
- \marquageversion
- \marquepage
- \mathematique
- \mois
- \montrecadre
- \montrechamps
- \montrecouleur
- \montredisposition
- \montreedition
- \montreenvironnementpolicecorps
- \montrefiguresexternes
- \montregrille
- \montregroupecouleur
- \montrejeusymboles
- \montremakeup
- \montrepalette
- \montrepolicecorps
- \montrereglages
- \montrestruts
- \motdroit
- \nop
- \note
- \notepdp
- \numeros
- \numerotete
- \numerotetecourant
- \obtientmarquage
- \oriente
- \overbar
- \overbars
- \page
- \pagedouble
- \pasplusdeblocs
- \pasplusdefichiers
- \periodes
- \pilechamp
- \placecoteacote
- \placeflottant
- \placeformule
- \placelegende
- \placelesunsaudessusdesautres
- \placeliste
- \placelisteinmbriquee
- \placelistereference
- \placelogos
- \placemarquespages
- \placenotespdp
- \placenotespdplocales
- \placeregistre
- \placeregle
- \placesousformule
- \placesurgrille
- \placevariabletexte
- \position
- \positionnetexte
- \prendbuffer
- \programme
- \publication
- \qqpart
- \ran
- \raz
- \razmarquage
- \recommandation
- \ref
- \reference
- \referencepage
- \referencetexte
- \reflete
- \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
- \regleinf
- \regleinteraction
- \regleintitule
- \regleintitules
- \reglejeusymboles
- \reglelabeltexte
- \reglelangue
- \reglelegende
- \reglelignes
- \reglelignesnoires
- \reglelignesreglestexte
- \regleliste
- \reglelisteimbriquee
- \reglelistereference
- \reglemakeup
- \reglemargereglee
- \reglemarquage
- \reglemarquagehyphenation
- \reglenotepdp
- \reglenumeropage
- \reglenumerotation
- \reglenumerotationligne
- \reglenumerotationpage
- \reglenumerotationparagraphe
- \reglenumerotete
- \regleoriente
- \reglepalette
- \reglepapier
- \regleparagraphes
- \reglepdp
- \regleplacementopposition
- \reglepolicecorps
- \reglepositionnement
- \reglepositiontexte
- \regleprofils
- \regleprogrammes
- \reglepublications
- \reglereferencage
- \regleregistre
- \regleregle
- \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
- \reglevariabletexte
- \regleversions
- \remplitchamp
- \remplitligne
- \remplitlignesreglees
- \remplittexte
- \sansalinea
- \sansespace
- \sansespaceblanc
- \sanslignesenteteetpdp
- \sanslignessupetinf
- \sansliste
- \sansmarquage
- \sanstest
- \sauteblocs
- \selectionneblocs
- \selectionnepapier
- \selectionneversion
- \separeflottant
- \settext
- \setupframedtexts
- \setupitemgroup
- \sousligne
- \souslignetout
- \start
- \startarriereplan
- \startcitation
- \startcommentaire
- \startcomposant
- \startcouleur
- \startenvironement
- \startfait
- \startgroupe
- \startligneregleetexte
- \startmargereglee
- \startmenuinteraction
- \startproduit
- \startprojet
- \startversion
- \stop
- \stoparriereplan
- \stopcitation
- \stopcommentaire
- \stopcomposant
- \stopcouleur
- \stopenvironement
- \stopfait
- \stopgroupe
- \stopligneregleetexte
- \stopmargereglee
- \stopmenuinteraction
- \stopproduit
- \stopprojet
- \stopversion
- \suggestion
- \suivantprofil
- \suivantversion
- \suivantversionprofil
- \surligne
- \surlignetout
- \sym
- \symbole
- \synchronise
- \tab
- \tapebuffer
- \tapepage
- \tete
- \tex
- \textemarge
- \textenotepdp
- \textetete
- \traduire
- \traiteblocs
- \traitepage
- \traitfin
- \traitsfins
- \typ
- \uneligne
- \utiliseURL
- \utiliseblocs
- \utilisecommandes
- \utilisedocumentexterne
- \utiliseencodage
- \utilisefichierexterne
- \utilisefichiersexternes
- \utilisefigureexterne
- \utilisemodule
- \utilisepsiteaudioexterne
- \utilisereferences
- \utilisespecialites
- \utilisesymboles
- \va
- \vaalaboite
- \vaenbas
- \variabletexte
- \version
- \vide
- \vl
-
-
-
diff --git a/context/data/context-jedit-it.xml b/context/data/context-jedit-it.xml
deleted file mode 100644
index ff09d98b2..000000000
--- a/context/data/context-jedit-it.xml
+++ /dev/null
@@ -1,461 +0,0 @@
-
-
-
-
-
-
-
- \GIORNOSETTIMANA
- \Lettera
- \Lettere
- \MESE
- \Numeriromani
- \PAROLA
- \PAROLE
- \Parola
- \Parole
- \accoppiacarta
- \accoppiadocumento
- \accoppiamarcatura
- \accoppiapagina
- \accoppiaregistro
- \adattacampo
- \adattalayout
- \adding
- \al
- \allineacentro
- \allineadestra
- \allineasinistra
- \ap
- \apagina
- \arg
- \barrainterazione
- \barrasincronizzazione
- \bastablocchi
- \bastafile
- \cambiaafontdeltesto
- \campi
- \camporiempimento
- \capello
- \chim
- \circondato
- \citazione
- \clip
- \clonacampo
- \colonna
- \colore
- \coloregrigio
- \commento
- \completeregister
- \confrontagruppocolori
- \confrontatavolozza
- \convertinumero
- \copiacampo
- \correggispaziobianco
- \crlf
- \da
- \daqualcheparte
- \data
- \datadioggi
- \datareferral
- \definisci
- \definisciambientefontdeltesto
- \definisciblocco
- \definiscibloccosezione
- \definiscibuffer
- \definiscicampo
- \definiscicapoversi
- \definiscicolore
- \definisciconversione
- \definiscidescrizione
- \definiscidimensionicarta
- \definiscielenco
- \definiscielencocombinato
- \definiscienumerazione
- \definiscietichetta
- \definiscifigurasimbolo
- \definiscifont
- \definiscifontdeltesto
- \definiscifontgrezzo
- \definisciformatoriferimento
- \definiscigruppocolori
- \definisciincorniciato
- \definisciiniziatermina
- \definiscilinea
- \definiscilistariferimenti
- \definiscilogo
- \definiscimakeup
- \definiscimarcatura
- \definiscimenuinterazione
- \definiscimodellotabella
- \definiscioggettomobile
- \definisciordinamento
- \definiscioutput
- \definisciposizionetesto
- \definisciprofilo
- \definisciprogramma
- \definisciregistro
- \definiscirientro
- \definisciriferimento
- \definiscirigovuoto
- \definiscisezione
- \definiscisimbolo
- \definiscisinonimi
- \definiscisottocampo
- \definiscisovrapposizione
- \definiscistackcampi
- \definiscitabulato
- \definiscitavolozza
- \definiscitesta
- \definiscitesto
- \definiscitestoincorniciato
- \definiscitype
- \definiscityping
- \definiscivariabiletesto
- \definisciversion
- \determinacarattersticheelenco
- \determinanumerotesta
- \disabilitamenuinterazione
- \el
- \elaborablocchi
- \elaborapagina
- \elementi
- \elemento
- \emptylines
- \etichette
- \figuraesterna
- \fondo
- \forzablocchi
- \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
- \impostaincorniciato
- \impostainmargine
- \impostainstestazione
- \impostainterazione
- \impostainterlinea
- \impostalayout
- \impostalegenda
- \impostalinea
- \impostalineemargine
- \impostalineenere
- \impostalineeriempimento
- \impostalineesottili
- \impostalineetesto
- \impostalingua
- \impostalistariferimenti
- \impostamaiuscole
- \impostamakeup
- \impostamarcatura
- \impostamenzione
- \impostanotepdp
- \impostanumerazione
- \impostanumerazionecapoversi
- \impostanumerazionepagina
- \impostanumerazionerighe
- \impostanumeropagina
- \impostanumerosottopagina
- \impostanumerotesta
- \impostaoggettimobili
- \impostaoggettomobile
- \impostaordinamento
- \impostaoutput
- \impostaparranging
- \impostapdp
- \impostapiustretto
- \impostaposizionamento
- \impostaposizionamentoopposti
- \impostaposizionetesto
- \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
- \impostavariabiletesto
- \impostaversioni
- \in
- \inaltromargine
- \incorniciato
- \indestra
- \ininner
- \inmargine
- \inouter
- \inriga
- \insinistra
- \installalingua
- \intorno
- \lettera
- \lettere
- \lineamargine
- \lineanera
- \lineasottile
- \lineatesto
- \lineenere
- \lineeriempimento
- \lineesottili
- \lingua
- \linguaprincipale
- \listsymbol
- \logcampi
- \mar
- \marcatura
- \marcaversione
- \matematica
- \menzione
- \mese
- \mettielenco
- \mettielencocombinato
- \mettifiancoafianco
- \mettiformula
- \mettiingriglia
- \mettilegenda
- \mettilinea
- \mettiloghi
- \mettinotepdp
- \mettinotepdplocali
- \mettiregistro
- \mettisegnalibro
- \mettisottoformula
- \mettiunosullaltro
- \mettivariabiletesto
- \mostraambientefontdeltesto
- \mostracampi
- \mostracolore
- \mostracornice
- \mostrafiguresterne
- \mostrafontdeltesto
- \mostragriglia
- \mostragruppocolori
- \mostraimpostazioni
- \mostralyout
- \mostramakeup
- \mostrasetsimboli
- \mostrastampa
- \mostrastruts
- \mostratavolozza
- \nascondiblocchi
- \nienteelenco
- \nientelineecimafondo
- \nientelineintestazionepdp
- \nientemarcatura
- \nienterientro
- \nientespazio
- \nientespaziobianco
- \nop
- \nota
- \notapdp
- \notest
- \numeri
- \numeriromani
- \numerotesta
- \numerotestacorrente
- \pagina
- \paroladestra
- \passaafontgrezzo
- \ped
- \pedap
- \placefloat
- \placereferencelist
- \posizionatesto
- \posizione
- \prendibuffer
- \prendimarcatura
- \programma
- \pubblicazione
- \pulsante
- \pulsantinterazione
- \punti
- \qualcheriga
- \ran
- \referral
- \reimposta
- \reimpostamarcatura
- \rientro
- \rif
- \riferimento
- \riferimentopagina
- \riferimentotesto
- \riflessione
- \rigariempimento
- \rigovuoto
- \ruota
- \saltablocchi
- \sbarrati
- \sbarrato
- \scala
- \schermo
- \scrividentroelenco
- \scriviinelenco
- \scriviinlistariferimenti
- \scriviinregistro
- \segnalibro
- \seguiprofilo
- \seguiversione
- \seguiversioneprofilo
- \selezionablocchi
- \selezionacarta
- \selezionaversione
- \separamarcatura
- \settext
- \setupitemgroup
- \setuppaper
- \setvariabiletesto
- \sfondo
- \sim
- \simbolo
- \sincronizza
- \sopralinea
- \sopralinee
- \sottolinea
- \sottolinee
- \spazifissi
- \spazio
- \spaziobianco
- \spezzaoggettomobile
- \spostaagriglia
- \stackcampi
- \start
- \startambiente
- \startcitazione
- \startcolore
- \startcommento
- \startcomponenet
- \startfatto
- \startimpaccato
- \startlineamargine
- \startlineatesto
- \startmenuinterattivo
- \startprodotto
- \startprogetto
- \startsfondo
- \startversione
- \stirato
- \stop
- \stopambiente
- \stopcitazione
- \stopcolore
- \stopcommento
- \stopcomponenet
- \stopfatto
- \stopimpaccato
- \stoplineamargine
- \stoplineatesto
- \stopmenuinterattivo
- \stopprodotto
- \stopprogetto
- \stopsfondo
- \stopversione
- \tab
- \testa
- \testoetichetta
- \testoinmargine
- \testoinstestazioni
- \testonotapdp
- \testoriempimento
- \tex
- \tieniblocchi
- \tipopagina
- \tooltip
- \traduci
- \typ
- \type
- \typebuffer
- \typefile
- \usaURL
- \usablocco
- \usacodifica
- \usacolonnasonoraesterna
- \usacomandi
- \usadocumentoesterno
- \usafiguraesterna
- \usafileesterni
- \usafileesterno
- \usamodulo
- \usariferimenti
- \usasimboli
- \usaspecialita
- \vaia
- \vaiabox
- \vaigiu
- \variabiletesto
- \versione
- \vl
-
-
-
diff --git a/context/data/context-jedit-nl.xml b/context/data/context-jedit-nl.xml
deleted file mode 100644
index 8dee0e106..000000000
--- a/context/data/context-jedit-nl.xml
+++ /dev/null
@@ -1,461 +0,0 @@
-
-
-
-
-
-
-
- \Letter
- \Letters
- \MAAND
- \Romeins
- \WEEKDAG
- \WOORD
- \WOORDEN
- \Woord
- \Woorden
- \about
- \achtergrond
- \arg
- \bepaalkopnummer
- \bepaallijstkenmerken
- \blanko
- \blokje
- \blokjes
- \blokkeerinteractiemenu
- \bookmark
- \breuk
- \but
- \button
- \chem
- \cijfers
- \citaat
- \citeer
- \clip
- \commentaar
- \converteernummer
- \copieerveld
- \corrigeerwitruimte
- \crlf
- \datum
- \definerawfont
- \definieer
- \definieeralineas
- \definieerbeeldmerk
- \definieerblanko
- \definieerblok
- \definieerbuffer
- \definieerconversie
- \definieerfiguursymbool
- \definieerfont
- \definieerinteractiemenu
- \definieerkadertekst
- \definieerkleur
- \definieerkleurgroep
- \definieerkop
- \definieerkorps
- \definieerkorpsomgeving
- \definieerlijn
- \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
- \definieertekstpositie
- \definieertekstvariabele
- \definieertype
- \definieertypen
- \definieeruitvoer
- \definieerveld
- \definieerveldstapel
- \definieerversie
- \doordefinieren
- \doorlabelen
- \doornummeren
- \doorspringen
- \doorstreep
- \doorstrepen
- \dunnelijn
- \dunnelijnen
- \eenregel
- \ergens
- \externfiguur
- \forceerblokken
- \gebruikURL
- \gebruikblokken
- \gebruikcommandos
- \gebruikexterndocument
- \gebruikexternefile
- \gebruikexternefiles
- \gebruikexternfiguur
- \gebruikexterngeluidsfragment
- \gebruikmodule
- \gebruikreferenties
- \gebruikspecials
- \gebruiksymbolen
- \geenblokkenmeer
- \geenbovenenonderregels
- \geenfilesmeer
- \geenhoofdenvoetregels
- \geenlijst
- \geenmarkering
- \geenspatie
- \geentest
- \geenwitruimte
- \grijskleur
- \haalbuffer
- \haalmarkering
- \haarlijn
- \handhaafblokken
- \hl
- \hoofdtaal
- \hoog
- \huidigedatum
- \huidigekopnummer
- \in
- \inanderemarge
- \inbinnen
- \inbuiten
- \inlijnd
- \inlinker
- \inmarge
- \inrechter
- \inregel
- \inspringen
- \installeertaal
- \interactiebalk
- \interactiebuttons
- \invullijnen
- \invulregel
- \invultekst
- \invulveld
- \items
- \its
- \kantlijn
- \kenmerk
- \kenmerkdatum
- \kentekstvariabeletoe
- \kleur
- \kloonveld
- \kolom
- \kop
- \kopnummer
- \koppeldocument
- \koppelmarkering
- \koppelpagina
- \koppelpapier
- \koppelregister
- \koptekst
- \laag
- \labels
- \labeltekst
- \laho
- \legeregels
- \letter
- \letters
- \lijstsymbool
- \maand
- \mar
- \margetekst
- \markeer
- \markeerversie
- \naar
- \naarbox
- \nietinspringen
- \noot
- \nop
- \omlaag
- \omlijnd
- \onderstreep
- \onderstrepen
- \ontkoppelmarkering
- \op
- \opelkaar
- \oppagina
- \overstreep
- \overstrepen
- \pagina
- \paginareferentie
- \paslayoutaan
- \passeerblokken
- \passendveld
- \plaatsbeeldmerken
- \plaatsbookmarks
- \plaatsformule
- \plaatslegenda
- \plaatslijn
- \plaatslijst
- \plaatslokalevoetnoten
- \plaatsnaastelkaar
- \plaatsonderelkaar
- \plaatsopgrid
- \plaatsplaatsblok
- \plaatsreferentielijst
- \plaatsregister
- \plaatssamengesteldelijst
- \plaatssubformule
- \plaatstekstvariabele
- \plaatsvoetnoten
- \positioneer
- \positioneertekst
- \programma
- \publicatie
- \punten
- \ran
- \ref
- \referentie
- \regellinks
- \regelmidden
- \regelrechts
- \registreervelden
- \reset
- \resetmarkering
- \romeins
- \rooster
- \roteer
- \schaal
- \scherm
- \schrijfnaarlijst
- \schrijfnaarreferentielijst
- \schrijfnaarregister
- \schrijftussenlijst
- \selecteerblokken
- \selecteerpapier
- \selecteerversie
- \som
- \soortpagina
- \spatie
- \spiegel
- \splitsplaatsblok
- \start
- \startachtergrond
- \startcitaat
- \startcommentaar
- \startgeg
- \startinteractiemenu
- \startkantlijn
- \startkleur
- \startomgeving
- \startonderdeel
- \startopelkaar
- \startprodukt
- \startprojekt
- \starttekstlijn
- \startversie
- \stelachtergrondenin
- \stelachtergrondin
- \stelalineasin
- \stelarrangerenin
- \stelblankoin
- \stelblokin
- \stelblokjesin
- \stelblokkopjein
- \stelblokkopjesin
- \stelbovenin
- \stelboventekstenin
- \stelbufferin
- \stelbuttonsin
- \stelciterenin
- \stelclipin
- \stelcombinatiesin
- \stelcommentaarin
- \steldoordefinierenin
- \steldoornummerenin
- \steldoorspringenin
- \steldunnelijnenin
- \stelexternefigurenin
- \stelformulierenin
- \stelhoofdin
- \stelhoofdtekstenin
- \stelinmargein
- \stelinspringenin
- \stelinteractiebalkin
- \stelinteractiein
- \stelinteractieschermin
- \stelinterliniein
- \stelinvullijnenin
- \stelinvulregelsin
- \stelitemgroepin
- \stelitemsin
- \stelkadertekstenin
- \stelkantlijnin
- \stelkapitalenin
- \stelkleurenin
- \stelkleurin
- \stelkolommenin
- \stelkopin
- \stelkopnummerin
- \stelkoppeltekenin
- \stelkoppenin
- \stelkoptekstin
- \stelkorpsin
- \stelkorpsomgevingin
- \stellabeltekstin
- \stellayoutin
- \stellegendain
- \stellijndiktein
- \stellijnin
- \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
- \steltekstpositiein
- \stelteksttekstenin
- \steltekstvariabelein
- \steltolerantiein
- \steltypein
- \steltypenin
- \steluitlijnenin
- \steluitvoerin
- \stelurlin
- \stelveldenin
- \stelveldin
- \stelversiesin
- \stelvoetin
- \stelvoetnootdefinitiein
- \stelvoetnotenin
- \stelvoettekstenin
- \stelwitruimtein
- \stop
- \stopachtergrond
- \stopcitaat
- \stopcommentaar
- \stopgeg
- \stopinteractiemenu
- \stopkantlijn
- \stopkleur
- \stopomgeving
- \stoponderdeel
- \stopopelkaar
- \stopprodukt
- \stopprojekt
- \stoptekstlijn
- \stopversie
- \suggestie
- \switchnaarkorps
- \switchtorawfont
- \sym
- \symbool
- \synchronisatiebalk
- \synchroniseer
- \taal
- \tab
- \tekstlijn
- \tekstreferentie
- \tekstvariabele
- \tex
- \toevoegen
- \toonexternefiguren
- \toongrid
- \tooninstellingen
- \toonkader
- \toonkleur
- \toonkleurgroep
- \toonkorps
- \toonkorpsomgeving
- \toonlayout
- \toonopmaak
- \toonpalet
- \toonprint
- \toonstruts
- \toonsymboolset
- \toonvelden
- \typ
- \type
- \typebuffer
- \typefile
- \uit
- \uitgerekt
- \usecodering
- \vastespaties
- \veld
- \veldstapel
- \verbergblokken
- \vergelijkkleurgroep
- \vergelijkpalet
- \verplaatsopgrid
- \versie
- \vertaal
- \verwerkblokken
- \verwerkpagina
- \vl
- \voetnoot
- \voetnoottekst
- \volgprofiel
- \volgprofielversie
- \volgversie
- \volledigregister
- \weekdag
- \wiskunde
- \witruimte
- \woordrechts
-
-
-
diff --git a/context/data/context-jedit-ro.xml b/context/data/context-jedit-ro.xml
deleted file mode 100644
index f1baedbfa..000000000
--- a/context/data/context-jedit-ro.xml
+++ /dev/null
@@ -1,459 +0,0 @@
-
-
-
-
-
-
-
- \CUVANT
- \CUVINTE
- \Cuvant
- \Cuvinte
- \LUNA
- \Litera
- \Litere
- \Numereromane
- \ZIDINSAPTAMANA
- \adapteazaaspect
- \adauga
- \adubuffer
- \adumarcaje
- \afiseazaaspect
- \afiseazacampuri
- \afiseazaculoare
- \afiseazafiguriexterne
- \afiseazafonttext
- \afiseazagrid
- \afiseazagrupculoare
- \afiseazamakeup
- \afiseazamediufonttext
- \afiseazapaleta
- \afiseazarama
- \afiseazasetari
- \afiseazasetsimboluri
- \afiseazastruts
- \afiseazatiparire
- \aliniat
- \aliniatcentru
- \aliniatdreapta
- \aliniatstanga
- \arg
- \ascundeblocuri
- \barainteractiune
- \barasincronizare
- \barasus
- \blanc
- \but
- \butoaneinteractiune
- \buton
- \camp
- \campumplere
- \chem
- \citat
- \clip
- \cloneazacamp
- \coloana
- \comentariu
- \comparagrupculoare
- \comparapaleta
- \completeregister
- \convertestenumar
- \copiazacamp
- \corecteazaspatiualb
- \crlf
- \culoare
- \culoaregri
- \cupleazadocument
- \cupleazamarcaje
- \cupleazaregistru
- \cuvantdreapta
- \data
- \datacurenta
- \datareferit
- \decupleazamarcaje
- \defineste
- \definestealiat
- \definesteantet
- \definesteblanc
- \definestebloc
- \definesteblocsectiune
- \definestebuffer
- \definestecamp
- \definesteconversie
- \definesteculoare
- \definestedescriere
- \definestedimensiunehartie
- \definesteenumerare
- \definesteeticheta
- \definestefloat
- \definestefont
- \definestefontraw
- \definestefonttext
- \definesteformatreferinte
- \definestegrupculori
- \definesteinconjurare
- \definestelista
- \definestelistacombinata
- \definestelistareferinte
- \definestelogo
- \definestemakeup
- \definestemarcaje
- \definestemediulfonttext
- \definestemeniuinteractiune
- \definesteoutput
- \definesteoverlay
- \definestepaleta
- \definesteparagraf
- \definestepozitietext
- \definesteprofil
- \definesteprogram
- \definestereferinte
- \definesteregistru
- \definesterigla
- \definestesablontabel
- \definestesectiune
- \definestesimbol
- \definestesimbolfigura
- \definestesinonim
- \definestesortare
- \definestestartstop
- \definestestivacampuri
- \definestesubcamp
- \definestetabulatori
- \definestetext
- \definestetexteinconjurate
- \definestetextinconjurat
- \definestetyping
- \definestevariabilatext
- \definesteversiune
- \definetype
- \despre
- \determinacaracteristicilelistei
- \determinanumartitlu
- \dezactiveazameniuinteractiune
- \din
- \dute
- \dutebox
- \ecran
- \el
- \element
- \emptylines
- \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
- \fundal
- \gatablocuri
- \grid
- \hartiedubla
- \hl
- \impachetat
- \impartefloat
- \in
- \inalt
- \inaltamargine
- \indreapta
- \inframed
- \ininner
- \injos
- \inlinie
- \inouter
- \instalarelimba
- \instanga
- \intins
- \jos
- \jossus
- \la
- \lapagina
- \limba
- \limbaprincipala
- \liniemargine
- \linieneagra
- \liniepeste
- \liniesubtire
- \linieumplere
- \liniinegre
- \liniipeste
- \liniisubtiri
- \listsymbol
- \litera
- \litere
- \logcampuri
- \luna
- \mar
- \marcaje
- \marcheazaversiune
- \marginal
- \matematica
- \minicitat
- \mutapegrid
- \nop
- \nota
- \notasubsol
- \numartitlu
- \numartitlucurent
- \numere
- \numereromane
- \nutesta
- \olinie
- \pagina
- \paginadubla
- \pastreazablocuri
- \placefloat
- \placereferencelist
- \plaseazapegrid
- \plaseazasemnecarte
- \potrivestecamp
- \pozitie
- \pozitietext
- \proceseazabloc
- \proceseazapagina
- \program
- \publicatie
- \puncte
- \punedeasuprafiecareia
- \punefatainfata
- \puneformula
- \punelegenda
- \punelista
- \punelistacombinata
- \punelogouri
- \punenotesubsol
- \punenotesubsollocale
- \puneregistru
- \punerigla
- \punesubformula
- \punevariabilatext
- \ran
- \ref
- \referinta
- \referintapagina
- \referintatext
- \referit
- \reflexie
- \reset
- \reseteazamarcaje
- \riglatext
- \rigleumplere
- \roteste
- \saripesteblocuri
- \scala
- \scriebuffer
- \scrieinlista
- \scrieinlistareferinte
- \scrieinregistru
- \scrieintreliste
- \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
- \seteazafundal
- \seteazafundaluri
- \seteazagrosimelinie
- \seteazaimpartireafloat
- \seteazainconjurat
- \seteazaingust
- \seteazainteractiunea
- \seteazajos
- \seteazalegenda
- \seteazalegendele
- \seteazaliniesilabe
- \seteazaliniesubtire
- \seteazalinii
- \seteazaliniimargine
- \seteazaliniinegre
- \seteazaliniiumplere
- \seteazalista
- \seteazalistacombinata
- \seteazalistareferinte
- \seteazamajuscule
- \seteazamakeup
- \seteazamarcaje
- \seteazamarginal
- \seteazamediulfonttext
- \seteazaminicitat
- \seteazanotasubsol
- \seteazanumarpagina
- \seteazanumarsubpagina
- \seteazanumartitlu
- \seteazanumerotare
- \seteazanumerotarelinii
- \seteazanumerotarepagina
- \seteazanumerotareparagrafe
- \seteazapaleta
- \seteazaparagrafe
- \seteazaplasareaopozita
- \seteazapozitietext
- \seteazaprofile
- \seteazaprograme
- \seteazapublicatii
- \seteazareferinte
- \seteazaregistru
- \seteazarigla
- \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
- \seteazavariabilatext
- \seteazaversiuni
- \settextcontent
- \setupitemgroup
- \setuppaper
- \setvariabilatext
- \sim
- \simbol
- \sincronizeaza
- \spatiifixate
- \spatiu
- \spatiualb
- \start
- \startcitat
- \startcomentariu
- \startcomponenta
- \startculoare
- \startfact
- \startfundal
- \startimpachetat
- \startliniemargine
- \startmediu
- \startmeniuinteractiune
- \startprodus
- \startproiect
- \startriglatext
- \startversiune
- \stivacampuri
- \stop
- \stopcitat
- \stopcomentariu
- \stopcomponenta
- \stopculoare
- \stopfact
- \stopfundal
- \stopimpachetat
- \stopliniemargine
- \stopmediu
- \stopmeniuinteractiune
- \stopprodus
- \stopproiect
- \stopriglatext
- \stopversiune
- \sublinie
- \sublinii
- \supralinie
- \tab
- \tex
- \texteticheta
- \textmarginal
- \texttitlu
- \textumplere
- \tippagina
- \titlu
- \tooltip
- \traduce
- \trecilafontraw
- \trecilafonttext
- \typ
- \type
- \typefile
- \undeva
- \urmeazaprofil
- \urmeazaversiune
- \urmeazaversiuneprofil
- \variabilatext
- \versiune
- \vl
- \zidinsaptamana
-
-
-
diff --git a/context/data/context-jedit.xml b/context/data/context-jedit.xml
deleted file mode 100644
index 8e91f75e5..000000000
--- a/context/data/context-jedit.xml
+++ /dev/null
@@ -1,134 +0,0 @@
-
-
-
-
-
-
-
-
-
-
- ^%.*interface=(dutch|nl).*
- ^%.*interface=(english|en).*
- ^%.*interface=(german|de).*
- ^%.*interface=(czech|cz).*
- ^%.*interface=(italian|it).*
- ^%.*interface=(romanian|ro).*
-
-
-
-
-
-
-
- ^%[A-Z](\s|$)
-
- \\[@?!]([^@?!a-zA-Z]|$)
-
- \\
-
- \$
- \{
- \}
-
- \#
- \(
- \)
- \[
- \]
- \<
- \>
- \=
-
- \~
- \%
- \^
- \&
- \-
- \+
- \/
- \|
-
- \`
- \*
- \_
- \:
- \;
- \"
- \'
- \.
- \,
-
- \1
- \2
- \3
- \4
- \5
- \6
- \7
- \8
- \9
- \0
-
- $
- {
- }
-
- #
- (
- )
- [
- ]
- <
- >
- =
- "
-
- ~
- %
- ^
- &
- -
- +
- /
- |
-
- `
- *
- _
- '
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/context/data/context.properties b/context/data/context.properties
index 484c9cd09..97347bf59 100644
--- a/context/data/context.properties
+++ b/context/data/context.properties
@@ -80,9 +80,10 @@ name.context.texexec=texmfstart texexec $(name.texexec.flag.pdfopen)
name.context.texshow=texmfstart texshow
name.context.purge=texmfstart ctxtools --purge --all
name.context.update=texmfstart ctxtools --update
-name.context.examplap=texmfstart --browser --file=http://localhost:8061/exalogin
name.context.showcase=texmfstart --file=showcase.pdf --program=context
+# name.context.examplap=texmfstart --browser --file=http://localhost:8061/exalogin
+
name.context.backend=pdf
name.example.xmlcheck=tidy -quiet -utf8 -xml -errors
@@ -90,12 +91,15 @@ name.example.xmlcheck=tidy -quiet -utf8 -xml -errors
name.metafun.mptopdf=texmfstart mptopdf.pl
# 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 "Local Example Service" texmfstart wwwserver.rb --direct
+ name.context.wwwserver=cmd /c start /min "Context Documentation" mtxrun --script server --start
if PLAT_GTK
- name.context.wwwserver=texmfstart wwwserver.rb --direct > ~/context-wwwserver.log &
+ name.context.wwwserver=texmfstart mtxrun --script server --start > ~/context-wwwserver.log &
# Commands: help info, e:\websites\www.pragma-ade.com\showcase.pdf / todo: manuals
@@ -234,15 +238,15 @@ command.name.4.$(file.patterns.example)=Show Documentation
# 5 : example framework applications
-command.5=$(name.context.examplap)
-command.5.$(file.patterns.context)=$(name.context.examplap)
-command.5.$(file.patterns.metafun)=$(name.context.examplap)
-command.5.$(file.patterns.example)=$(name.context.examplap)
+#~ command.5=$(name.context.examplap)
+#~ command.5.$(file.patterns.context)=$(name.context.examplap)
+#~ command.5.$(file.patterns.metafun)=$(name.context.examplap)
+#~ command.5.$(file.patterns.example)=$(name.context.examplap)
-command.name.5=Start Interfaces
-command.name.5.$(file.patterns.context)=Start Interfaces
-command.name.5.$(file.patterns.metafun)=Start Interfaces
-command.name.5.$(file.patterns.example)=Start Interfaces
+#~ command.name.5=Start Interfaces
+#~ command.name.5.$(file.patterns.context)=Start Interfaces
+#~ command.name.5.$(file.patterns.metafun)=Start Interfaces
+#~ command.name.5.$(file.patterns.example)=Start Interfaces
# 6 : console
@@ -342,10 +346,10 @@ command.14.$(file.patterns.example)=$(name.context.update)
# 15: example
-command.name.15=Example Service
-command.name.15.$(file.patterns.context)=Example Service
-command.name.15.$(file.patterns.metafun)=Example Service
-command.name.15.$(file.patterns.example)=Example Service
+command.name.15=Documentation Server
+command.name.15.$(file.patterns.context)=Documentation Service
+command.name.15.$(file.patterns.metafun)=Documentation Service
+command.name.15.$(file.patterns.example)=Documentation Service
command.15=$(name.context.wwwserver)
command.15.$(file.patterns.context)=$(name.context.wwwserver)
diff --git a/metapost/context/base/mp-grph.mp b/metapost/context/base/mp-grph.mp
index 87a179677..1ff2a9ec2 100644
--- a/metapost/context/base/mp-grph.mp
+++ b/metapost/context/base/mp-grph.mp
@@ -56,8 +56,8 @@ string graphictextformat ; graphictextformat := "plain" ;
string graphictextstring ; graphictextstring := "" ;
string graphictextfile ; graphictextfile := "dummy.mpo" ;
-def data_mpo_file = job_name & "-mp.mpo" enddef ;
-def data_mpy_file = job_name & "-mp.mpy" enddef ;
+def data_mpo_file = job_name & "-mpgraph.mpo" enddef ;
+def data_mpy_file = job_name & "-mpgraph.mpy" enddef ;
def savegraphictext (expr str) =
if (graphictextstring<>"") :
diff --git a/metapost/context/base/mp-mlib.mp b/metapost/context/base/mp-mlib.mp
index 6722c81e4..81bb07caf 100644
--- a/metapost/context/base/mp-mlib.mp
+++ b/metapost/context/base/mp-mlib.mp
@@ -26,7 +26,7 @@ def resettextexts =
_tt_p_ := nullpicture ;
enddef ;
-extra_endfig := ";draw _tt_p_; " & extra_endfig ;
+extra_endfig := ";addto currentpicture also _tt_p_; " & extra_endfig; % was draw _tt_p_
extra_beginfig := extra_beginfig & "resettextexts;";
vardef rawtextext(expr str) =
diff --git a/metapost/context/base/mp-tool.mp b/metapost/context/base/mp-tool.mp
index 24f2e6676..c1def83b3 100644
--- a/metapost/context/base/mp-tool.mp
+++ b/metapost/context/base/mp-tool.mp
@@ -193,7 +193,8 @@ if unknown collapse_data :
boolean collapse_data ; collapse_data := false ;
fi ;
-boolean savingdata ; savingdata := false ;
+boolean savingdata ; savingdata := false ;
+boolean savingdatadone ; savingdatadone := false ;
def savedata expr txt =
if collapse_data :
@@ -208,6 +209,7 @@ enddef ;
def startsavingdata =
savingdata := true ;
+ savingdatadone := true ;
if collapse_data :
write
"\MPdata{" & decimal charcode & "}{%"
@@ -224,7 +226,9 @@ def stopsavingdata =
enddef ;
def finishsavingdata =
- write EOF to data_mpd_file ;
+ if savingdatadone :
+ write EOF to data_mpd_file ;
+ fi ;
enddef ;
%D Instead of a keystroke eating save and allocation
diff --git a/scripts/context/lua/luatools.lua b/scripts/context/lua/luatools.lua
index 89e5e0eb4..936b32e7b 100644
--- a/scripts/context/lua/luatools.lua
+++ b/scripts/context/lua/luatools.lua
@@ -3,12 +3,14 @@
-- one can make a stub:
--
-- #!/bin/sh
--- env LUATEXDIR=/....../texmf/scripts/context/lua luatex --luaonly=luatools.lua "$@"
+-- env LUATEXDIR=/....../texmf/scripts/context/lua texlua luatools.lua "$@"
+
-- filename : luatools.lua
-- comment : companion to context.tex
-- author : Hans Hagen, PRAGMA-ADE, Hasselt NL
-- copyright: PRAGMA ADE / ConTeXt Development Team
-- license : see context related readme files
+
-- Although this script is part of the ConTeXt distribution it is
-- relatively indepent of ConTeXt. The same is true for some of
-- the luat files. We may may make them even less dependent in
@@ -111,7 +113,7 @@ end
function string:splitchr(chr)
if #self > 0 then
local t = { }
- for s in string.gmatch(self..chr,"(.-)"..chr) do
+ for s in (self..chr):gmatch("(.-)"..chr) do
t[#t+1] = s
end
return t
@@ -120,22 +122,6 @@ function string:splitchr(chr)
end
end
---~ function string.piecewise(str, pat, fnc) -- variant of split
---~ local fpat = "(.-)"..pat
---~ local last_end = 1
---~ local s, e, cap = string.find(str, fpat, 1)
---~ while s ~= nil do
---~ if s~=1 or cap~="" then
---~ fnc(cap)
---~ end
---~ last_end = e+1
---~ s, e, cap = string.find(str, fpat, last_end)
---~ end
---~ if last_end <= #str then
---~ fnc((string.sub(str,last_end)))
---~ end
---~ end
-
function string.piecewise(str, pat, fnc) -- variant of split
for k in string.splitter(str,pat) do fnc(k) end
end
@@ -654,35 +640,283 @@ function table.starts_at(t)
return ipairs(t,1)(t,0)
end
-do
+--~ do
+
+--~ -- one of my first exercises in lua ...
+
+--~ table.serialize_functions = true
+--~ table.serialize_compact = true
+--~ table.serialize_inline = true
+
+--~ local function key(k,noquotes)
+--~ if type(k) == "number" then -- or k:find("^%d+$") then
+--~ return "["..k.."]"
+--~ elseif noquotes and k:find("^%a[%a%d%_]*$") then
+--~ return k
+--~ else
+--~ return '["'..k..'"]'
+--~ end
+--~ end
+
+--~ local function simple_table(t)
+--~ if #t > 0 then
+--~ local n = 0
+--~ for _,v in pairs(t) do
+--~ n = n + 1
+--~ end
+--~ if n == #t then
+--~ local tt = { }
+--~ for i=1,#t do
+--~ local v = t[i]
+--~ local tv = type(v)
+--~ if tv == "number" or tv == "boolean" then
+--~ tt[#tt+1] = tostring(v)
+--~ elseif tv == "string" then
+--~ tt[#tt+1] = ("%q"):format(v)
+--~ else
+--~ tt = nil
+--~ break
+--~ end
+--~ end
+--~ return tt
+--~ end
+--~ end
+--~ return nil
+--~ end
+
+--~ local function serialize(root,name,handle,depth,level,reduce,noquotes,indexed)
+--~ handle = handle or print
+--~ reduce = reduce or false
+--~ if depth then
+--~ depth = depth .. " "
+--~ if indexed then
+--~ handle(("%s{"):format(depth))
+--~ else
+--~ handle(("%s%s={"):format(depth,key(name,noquotes)))
+--~ end
+--~ else
+--~ depth = ""
+--~ local tname = type(name)
+--~ if tname == "string" then
+--~ if name == "return" then
+--~ handle("return {")
+--~ else
+--~ handle(name .. "={")
+--~ end
+--~ elseif tname == "number" then
+--~ handle("[" .. name .. "]={")
+--~ elseif tname == "boolean" then
+--~ if name then
+--~ handle("return {")
+--~ else
+--~ handle("{")
+--~ end
+--~ else
+--~ handle("t={")
+--~ end
+--~ end
+--~ if root and next(root) then
+--~ local compact = table.serialize_compact
+--~ local inline = compact and table.serialize_inline
+--~ local first, last = nil, 0 -- #root cannot be trusted here
+--~ if compact then
+--~ for k,v in ipairs(root) do -- NOT: for k=1,#root do (we need to quit at nil)
+--~ if not first then first = k end
+--~ last = last + 1
+--~ end
+--~ end
+--~ for _,k in pairs(table.sortedkeys(root)) do
+--~ local v = root[k]
+--~ local t = type(v)
+--~ if compact and first and type(k) == "number" and k >= first and k <= last then
+--~ if t == "number" then
+--~ handle(("%s %s,"):format(depth,v))
+--~ elseif t == "string" then
+--~ if reduce and (v:find("^[%-%+]?[%d]-%.?[%d+]$") == 1) then
+--~ handle(("%s %s,"):format(depth,v))
+--~ else
+--~ handle(("%s %q,"):format(depth,v))
+--~ end
+--~ elseif t == "table" then
+--~ if not next(v) then
+--~ handle(("%s {},"):format(depth))
+--~ elseif inline then
+--~ local st = simple_table(v)
+--~ if st then
+--~ handle(("%s { %s },"):format(depth,table.concat(st,", ")))
+--~ else
+--~ serialize(v,k,handle,depth,level+1,reduce,noquotes,true)
+--~ end
+--~ else
+--~ serialize(v,k,handle,depth,level+1,reduce,noquotes,true)
+--~ end
+--~ elseif t == "boolean" then
+--~ handle(("%s %s,"):format(depth,tostring(v)))
+--~ elseif t == "function" then
+--~ if table.serialize_functions then
+--~ handle(('%s loadstring(%q),'):format(depth,string.dump(v)))
+--~ else
+--~ handle(('%s "function",'):format(depth))
+--~ end
+--~ else
+--~ handle(("%s %q,"):format(depth,tostring(v)))
+--~ end
+--~ elseif k == "__p__" then -- parent
+--~ if false then
+--~ handle(("%s __p__=nil,"):format(depth))
+--~ end
+--~ elseif t == "number" then
+--~ handle(("%s %s=%s,"):format(depth,key(k,noquotes),v))
+--~ elseif t == "string" then
+--~ if reduce and (v:find("^[%-%+]?[%d]-%.?[%d+]$") == 1) then
+--~ handle(("%s %s=%s,"):format(depth,key(k,noquotes),v))
+--~ else
+--~ handle(("%s %s=%q,"):format(depth,key(k,noquotes),v))
+--~ end
+--~ elseif t == "table" then
+--~ if not next(v) then
+--~ handle(("%s %s={},"):format(depth,key(k,noquotes)))
+--~ elseif inline then
+--~ local st = simple_table(v)
+--~ if st then
+--~ handle(("%s %s={ %s },"):format(depth,key(k,noquotes),table.concat(st,", ")))
+--~ else
+--~ serialize(v,k,handle,depth,level+1,reduce,noquotes)
+--~ end
+--~ else
+--~ serialize(v,k,handle,depth,level+1,reduce,noquotes)
+--~ end
+--~ elseif t == "boolean" then
+--~ handle(("%s %s=%s,"):format(depth,key(k,noquotes),tostring(v)))
+--~ elseif t == "function" then
+--~ if table.serialize_functions then
+--~ handle(('%s %s=loadstring(%q),'):format(depth,key(k,noquotes),string.dump(v)))
+--~ else
+--~ handle(('%s %s="function",'):format(depth,key(k,noquotes)))
+--~ end
+--~ else
+--~ handle(("%s %s=%q,"):format(depth,key(k,noquotes),tostring(v)))
+--~ -- handle(('%s %s=loadstring(%q),'):format(depth,key(k,noquotes),string.dump(function() return v end)))
+--~ end
+--~ end
+--~ if level > 0 then
+--~ handle(("%s},"):format(depth))
+--~ else
+--~ handle(("%s}"):format(depth))
+--~ end
+--~ else
+--~ handle(("%s}"):format(depth))
+--~ end
+--~ end
+
+--~ --~ name:
+--~ --~
+--~ --~ true : return { }
+--~ --~ false : { }
+--~ --~ nil : t = { }
+--~ --~ string : string = { }
+--~ --~ 'return' : return { }
+--~ --~ number : [number] = { }
+
+--~ function table.serialize(root,name,reduce,noquotes)
+--~ local t = { }
+--~ local function flush(s)
+--~ t[#t+1] = s
+--~ end
+--~ serialize(root, name, flush, nil, 0, reduce, noquotes)
+--~ return table.concat(t,"\n")
+--~ end
+
+--~ function table.tohandle(handle,root,name,reduce,noquotes)
+--~ serialize(root, name, handle, nil, 0, reduce, noquotes)
+--~ end
+
+--~ -- sometimes tables are real use (zapfino extra pro is some 85M) in which
+--~ -- case a stepwise serialization is nice; actually, we could consider:
+--~ --
+--~ -- for line in table.serializer(root,name,reduce,noquotes) do
+--~ -- ...(line)
+--~ -- end
+--~ --
+--~ -- so this is on the todo list
+
+--~ table.tofile_maxtab = 2*1024
+
+--~ function table.tofile(filename,root,name,reduce,noquotes)
+--~ local f = io.open(filename,'w')
+--~ if f then
+--~ local concat = table.concat
+--~ local maxtab = table.tofile_maxtab
+--~ if maxtab > 1 then
+--~ local t = { }
+--~ local function flush(s)
+--~ t[#t+1] = s
+--~ if #t > maxtab then
+--~ f:write(concat(t,"\n"),"\n") -- hm, write(sometable) should be nice
+--~ t = { }
+--~ end
+--~ end
+--~ serialize(root, name, flush, nil, 0, reduce, noquotes)
+--~ f:write(concat(t,"\n"),"\n")
+--~ else
+--~ local function flush(s)
+--~ f:write(s,"\n")
+--~ end
+--~ serialize(root, name, flush, nil, 0, reduce, noquotes)
+--~ end
+--~ f:close()
+--~ end
+--~ end
+
+--~ end
+
+--~ t = {
+--~ b = "123",
+--~ a = "x",
+--~ c = 1.23,
+--~ d = "1.23",
+--~ e = true,
+--~ f = {
+--~ d = "1.23",
+--~ a = "x",
+--~ b = "123",
+--~ c = 1.23,
+--~ e = true,
+--~ f = {
+--~ e = true,
+--~ f = {
+--~ e = true
+--~ },
+--~ },
+--~ },
+--~ g = function() end
+--~ }
- -- one of my first exercises in lua ...
-
- -- 34.055.092 32.403.326 arabtype.tma
- -- 1.620.614 1.513.863 lmroman10-italic.tma
- -- 1.325.585 1.233.044 lmroman10-regular.tma
- -- 1.248.157 1.158.903 lmsans10-regular.tma
- -- 194.646 153.120 lmtypewriter10-regular.tma
- -- 1.771.678 1.658.461 palatinosanscom-bold.tma
- -- 1.695.251 1.584.491 palatinosanscom-regular.tma
- -- 13.736.534 13.409.446 zapfinoextraltpro.tma
-
- -- 13.679.038 11.774.106 arabtype.tmc
- -- 886.248 754.944 lmroman10-italic.tmc
- -- 729.828 466.864 lmroman10-regular.tmc
- -- 688.482 441.962 lmsans10-regular.tmc
- -- 128.685 95.853 lmtypewriter10-regular.tmc
- -- 715.929 582.985 palatinosanscom-bold.tmc
- -- 669.942 540.126 palatinosanscom-regular.tmc
- -- 1.560.588 1.317.000 zapfinoextraltpro.tmc
+--~ print(table.serialize(t), "\n")
+--~ print(table.serialize(t,"name"), "\n")
+--~ print(table.serialize(t,false), "\n")
+--~ print(table.serialize(t,true), "\n")
+--~ print(table.serialize(t,"name",true), "\n")
+--~ print(table.serialize(t,"name",true,true), "\n")
+
+do
table.serialize_functions = true
table.serialize_compact = true
table.serialize_inline = true
+ local sortedkeys = table.sortedkeys
+ local format, concat = string.format, table.concat
+ local noquotes, hexify, handle, reduce, compact, inline, functions
+ local pairs, ipairs, type, next, tostring = pairs, ipairs, type, next, tostring
+
local function key(k)
if type(k) == "number" then -- or k:find("^%d+$") then
- return "["..k.."]"
+ if hexify then
+ return ("[0x%04X]"):format(k)
+ else
+ return "["..k.."]"
+ end
elseif noquotes and k:find("^%a[%a%d%_]*$") then
return k
else
@@ -701,7 +935,13 @@ do
for i=1,#t do
local v = t[i]
local tv = type(v)
- if tv == "number" or tv == "boolean" then
+ if tv == "number" then
+ if hexify then
+ tt[#tt+1] = ("0x%04X"):format(v)
+ else
+ tt[#tt+1] = tostring(v)
+ end
+ elseif tv == "boolean" then
tt[#tt+1] = tostring(v)
elseif tv == "string" then
tt[#tt+1] = ("%q"):format(v)
@@ -716,53 +956,38 @@ do
return nil
end
- local function serialize(root,name,handle,depth,level,reduce,noquotes,indexed)
- handle = handle or print
- reduce = reduce or false
- if depth then
+ local function do_serialize(root,name,depth,level,indexed)
+ if level > 0 then
depth = depth .. " "
if indexed then
handle(("%s{"):format(depth))
- else
+ elseif name then
handle(("%s%s={"):format(depth,key(name)))
- end
- else
- depth = ""
- local tname = type(name)
- if tname == "string" then
- if name == "return" then
- handle("return {")
- else
- handle(name .. "={")
- end
- elseif tname == "number" then
- handle("[" .. name .. "]={")
- elseif tname == "boolean" then
- if name then
- handle("return {")
- else
- handle("{")
- end
else
- handle("t={")
+ handle(("%s{"):format(depth))
end
end
if root and next(root) then
- local compact = table.serialize_compact
- local inline = compact and table.serialize_inline
local first, last = nil, 0 -- #root cannot be trusted here
if compact then
- for k,v in ipairs(root) do -- NOT: for k=1,#root do (why)
+ for k,v in ipairs(root) do -- NOT: for k=1,#root do (we need to quit at nil)
if not first then first = k end
last = last + 1
end
end
- for _,k in pairs(table.sortedkeys(root)) do
+ --~ for _,k in pairs(sortedkeys(root)) do -- 1% faster:
+ local sk = sortedkeys(root)
+ for i=1,#sk do
+ local k = sk[i]
local v = root[k]
local t = type(v)
if compact and first and type(k) == "number" and k >= first and k <= last then
if t == "number" then
- handle(("%s %s,"):format(depth,v))
+ if hexify then
+ handle(("%s 0x%04X,"):format(depth,v))
+ else
+ handle(("%s %s,"):format(depth,v))
+ end
elseif t == "string" then
if reduce and (v:find("^[%-%+]?[%d]-%.?[%d+]$") == 1) then
handle(("%s %s,"):format(depth,v))
@@ -775,17 +1000,17 @@ do
elseif inline then
local st = simple_table(v)
if st then
- handle(("%s { %s },"):format(depth,table.concat(st,", ")))
+ handle(("%s { %s },"):format(depth,concat(st,", ")))
else
- serialize(v,k,handle,depth,level+1,reduce,noquotes,true)
+ do_serialize(v,k,depth,level+1,true)
end
else
- serialize(v,k,handle,depth,level+1,reduce,noquotes,true)
+ do_serialize(v,k,depth,level+1,true)
end
elseif t == "boolean" then
handle(("%s %s,"):format(depth,tostring(v)))
elseif t == "function" then
- if table.serialize_functions then
+ if functions then
handle(('%s loadstring(%q),'):format(depth,string.dump(v)))
else
handle(('%s "function",'):format(depth))
@@ -798,7 +1023,11 @@ do
handle(("%s __p__=nil,"):format(depth))
end
elseif t == "number" then
- handle(("%s %s=%s,"):format(depth,key(k),v))
+ if hexify then
+ handle(("%s %s=0x%04X,"):format(depth,key(k),v))
+ else
+ handle(("%s %s=%s,"):format(depth,key(k),v))
+ end
elseif t == "string" then
if reduce and (v:find("^[%-%+]?[%d]-%.?[%d+]$") == 1) then
handle(("%s %s=%s,"):format(depth,key(k),v))
@@ -811,17 +1040,17 @@ do
elseif inline then
local st = simple_table(v)
if st then
- handle(("%s %s={ %s },"):format(depth,key(k),table.concat(st,", ")))
+ handle(("%s %s={ %s },"):format(depth,key(k),concat(st,", ")))
else
- serialize(v,k,handle,depth,level+1,reduce,noquotes)
+ do_serialize(v,k,depth,level+1)
end
else
- serialize(v,k,handle,depth,level+1,reduce,noquotes)
+ do_serialize(v,k,depth,level+1)
end
elseif t == "boolean" then
handle(("%s %s=%s,"):format(depth,key(k),tostring(v)))
elseif t == "function" then
- if table.serialize_functions then
+ if functions then
handle(('%s %s=loadstring(%q),'):format(depth,key(k),string.dump(v)))
else
handle(('%s %s="function",'):format(depth,key(k)))
@@ -831,14 +1060,46 @@ do
-- handle(('%s %s=loadstring(%q),'):format(depth,key(k),string.dump(function() return v end)))
end
end
- if level > 0 then
- handle(("%s},"):format(depth))
+ end
+ if level > 0 then
+ handle(("%s},"):format(depth))
+ end
+ end
+
+ local function serialize(root,name,_handle,_reduce,_noquotes,_hexify)
+ noquotes = _noquotes
+ hexify = _hexify
+ handle = _handle or print
+ reduce = _reduce or false
+ compact = table.serialize_compact
+ inline = compact and table.serialize_inline
+ functions = table.serialize_functions
+ local tname = type(name)
+ if tname == "string" then
+ if name == "return" then
+ handle("return {")
+ else
+ handle(name .. "={")
+ end
+ elseif tname == "number" then
+ if hexify then
+ handle(format("[0x%04X]={",name))
else
- handle(("%s}"):format(depth))
+ handle("[" .. name .. "]={")
+ end
+ elseif tname == "boolean" then
+ if name then
+ handle("return {")
+ else
+ handle("{")
end
else
- handle(("%s}"):format(depth))
+ handle("t={")
end
+ if root and next(root) then
+ do_serialize(root,name,"",0,indexed)
+ end
+ handle("}")
end
--~ name:
@@ -850,17 +1111,17 @@ do
--~ 'return' : return { }
--~ number : [number] = { }
- function table.serialize(root,name,reduce,noquotes)
+ function table.serialize(root,name,reduce,noquotes,hexify)
local t = { }
local function flush(s)
t[#t+1] = s
end
- serialize(root, name, flush, nil, 0, reduce, noquotes)
- return table.concat(t,"\n")
+ serialize(root,name,flush,reduce,noquotes,hexify)
+ return concat(t,"\n")
end
- function table.tohandle(handle,root,name,reduce,noquotes)
- serialize(root, name, handle, nil, 0, reduce, noquotes)
+ function table.tohandle(handle,root,name,reduce,noquotes,hexify)
+ serialize(root,name,handle,reduce,noquotes,hexify)
end
-- sometimes tables are real use (zapfino extra pro is some 85M) in which
@@ -874,10 +1135,9 @@ do
table.tofile_maxtab = 2*1024
- function table.tofile(filename,root,name,reduce,noquotes)
+ function table.tofile(filename,root,name,reduce,noquotes,hexify)
local f = io.open(filename,'w')
if f then
- local concat = table.concat
local maxtab = table.tofile_maxtab
if maxtab > 1 then
local t = { }
@@ -888,13 +1148,13 @@ do
t = { }
end
end
- serialize(root, name, flush, nil, 0, reduce, noquotes)
+ serialize(root,name,flush,reduce,noquotes,hexify)
f:write(concat(t,"\n"),"\n")
else
local function flush(s)
f:write(s,"\n")
end
- serialize(root, name, flush, nil, 0, reduce, noquotes)
+ serialize(root,name,flush,reduce,noquotes,hexify)
end
f:close()
end
@@ -902,35 +1162,6 @@ do
end
---~ t = {
---~ b = "123",
---~ a = "x",
---~ c = 1.23,
---~ d = "1.23",
---~ e = true,
---~ f = {
---~ d = "1.23",
---~ a = "x",
---~ b = "123",
---~ c = 1.23,
---~ e = true,
---~ f = {
---~ e = true,
---~ f = {
---~ e = true
---~ },
---~ },
---~ },
---~ g = function() end
---~ }
-
---~ print(table.serialize(t), "\n")
---~ print(table.serialize(t,"name"), "\n")
---~ print(table.serialize(t,false), "\n")
---~ print(table.serialize(t,true), "\n")
---~ print(table.serialize(t,"name",true), "\n")
---~ print(table.serialize(t,"name",true,true), "\n")
-
do
local function flatten(t,f,complete)
@@ -1121,7 +1352,7 @@ function io.loaddata(filename)
end
function io.savedata(filename,data,joiner)
- local f = io.open(filename, "wb")
+ local f = io.open(filename,"wb")
if f then
if type(data) == "table" then
f:write(table.join(data,joiner or ""))
@@ -1131,6 +1362,9 @@ function io.savedata(filename,data,joiner)
f:write(data)
end
f:close()
+ return true
+ else
+ return false
end
end
@@ -1465,6 +1699,9 @@ end
-- copyright: PRAGMA ADE / ConTeXt Development Team
-- license : see context related readme files
+
+--~ print(table.serialize(os.uname()))
+
if not versions then versions = { } end versions['l-os'] = 1.001
function os.resultof(command)
@@ -1561,9 +1798,11 @@ if not versions then versions = { } end versions['l-file'] = 1.001
if not file then file = { } end
function file.removesuffix(filename)
- return filename:gsub("%.[%a%d]+$", "")
+ return (filename:gsub("%.[%a%d]+$",""))
end
+file.stripsuffix = file.removesuffix
+
function file.addsuffix(filename, suffix)
if not filename:find("%.[%a%d]+$") then
return filename .. "." .. suffix
@@ -1573,11 +1812,7 @@ function file.addsuffix(filename, suffix)
end
function file.replacesuffix(filename, suffix)
- if not filename:find("%.[%a%d]+$") then
- return filename .. "." .. suffix
- else
- return (filename:gsub("%.[%a%d]+$","."..suffix))
- end
+ return (filename:gsub("%.[%a%d]+$","")) .. "." .. suffix
end
function file.dirname(name)
@@ -1598,10 +1833,6 @@ end
file.suffix = file.extname
-function file.stripsuffix(name)
- return (name:gsub("%.[%a%d]+$",""))
-end
-
--~ function file.join(...)
--~ local t = { ... }
--~ for i=1,#t do
@@ -1650,6 +1881,16 @@ function file.is_readable(name)
end
end
+function file.iswritable(name)
+ local a = lfs.attributes(name)
+ return a and a.permissions:sub(2,2) == "w"
+end
+
+function file.isreadable(name)
+ local a = lfs.attributes(name)
+ return a and a.permissions:sub(1,1) == "r"
+end
+
--~ function file.split_path(str)
--~ if str:find(';') then
--~ return str:splitchr(";")
@@ -1677,34 +1918,26 @@ function file.join_path(tab)
return table.concat(tab,io.pathseparator) -- can have trailing //
end
---~ print('test' .. " == " .. file.collapse_path("test"))
---~ print("test/test" .. " == " .. file.collapse_path("test/test"))
---~ print("test/test/test" .. " == " .. file.collapse_path("test/test/test"))
---~ print("test/test" .. " == " .. file.collapse_path("test/../test/test"))
---~ print("test" .. " == " .. file.collapse_path("test/../test"))
---~ print("../test" .. " == " .. file.collapse_path("../test"))
---~ print("../test/" .. " == " .. file.collapse_path("../test/"))
---~ print("a/a" .. " == " .. file.collapse_path("a/b/c/../../a"))
-
---~ function file.collapse_path(str)
---~ local ok, n = false, 0
---~ while not ok do
---~ ok = true
---~ str, n = str:gsub("[^%./]+/%.%./", function(s)
---~ ok = false
---~ return ""
---~ end)
---~ end
---~ return (str:gsub("/%./","/"))
---~ end
-
function file.collapse_path(str)
- local n = 1
- while n > 0 do
- str, n = str:gsub("([^/%.]+/%.%./)","")
- end
- return (str:gsub("/%./","/"))
-end
+ str = str:gsub("/%./","/")
+ local n, m = 1, 1
+ while n > 0 or m > 0 do
+ str, n = str:gsub("[^/%.]+/%.%.$","")
+ str, m = str:gsub("[^/%.]+/%.%./","")
+ end
+ str = str:gsub("([^/])/$","%1")
+ str = str:gsub("^%./","")
+ str = str:gsub("/%.$","")
+ if str == "" then str = "." end
+ return str
+end
+
+--~ print(file.collapse_path("a/./b/.."))
+--~ print(file.collapse_path("a/aa/../b/bb"))
+--~ print(file.collapse_path("a/../.."))
+--~ print(file.collapse_path("a/.././././b/.."))
+--~ print(file.collapse_path("a/./././b/.."))
+--~ print(file.collapse_path("a/b/c/../.."))
function file.robustname(str)
return (str:gsub("[^%a%d%/%-%.\\]+","-"))
@@ -1717,6 +1950,98 @@ function file.copy(oldname,newname)
file.savedata(newname,io.loaddata(oldname))
end
+-- lpeg variants, slightly faster, not always
+
+--~ local period = lpeg.P(".")
+--~ local slashes = lpeg.S("\\/")
+--~ local noperiod = 1-period
+--~ local noslashes = 1-slashes
+--~ local name = noperiod^1
+
+--~ local pattern = (noslashes^0 * slashes)^0 * (noperiod^1 * period)^1 * lpeg.C(noperiod^1) * -1
+
+--~ function file.extname(name)
+--~ return pattern:match(name) or ""
+--~ end
+
+--~ local pattern = lpeg.Cs(((period * noperiod^1 * -1)/"" + 1)^1)
+
+--~ function file.removesuffix(name)
+--~ return pattern:match(name)
+--~ end
+
+--~ file.stripsuffix = file.removesuffix
+
+--~ local pattern = (noslashes^0 * slashes)^1 * lpeg.C(noslashes^1) * -1
+
+--~ function file.basename(name)
+--~ return pattern:match(name) or name
+--~ end
+
+--~ local pattern = (noslashes^0 * slashes)^1 * lpeg.Cp() * noslashes^1 * -1
+
+--~ function file.dirname(name)
+--~ local p = pattern:match(name)
+--~ if p then
+--~ return name:sub(1,p-2)
+--~ else
+--~ return ""
+--~ end
+--~ 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)
+--~ if p then
+--~ return name
+--~ else
+--~ return name .. "." .. suffix
+--~ end
+--~ 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)
+--~ if p then
+--~ return name:sub(1,p-2) .. "." .. suffix
+--~ else
+--~ return name .. "." .. suffix
+--~ end
+--~ 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)
+--~ if b then
+--~ return name:sub(a,b-2)
+--~ elseif a then
+--~ return name:sub(a)
+--~ else
+--~ return name
+--~ end
+--~ end
+
+--~ local test = file.extname
+--~ local test = file.stripsuffix
+--~ local test = file.basename
+--~ local test = file.dirname
+--~ local test = file.addsuffix
+--~ local test = file.replacesuffix
+--~ local test = file.nameonly
+
+--~ print(1,test("./a/b/c/abd.def.xxx","!!!"))
+--~ print(2,test("./../b/c/abd.def.xxx","!!!"))
+--~ print(3,test("a/b/c/abd.def.xxx","!!!"))
+--~ print(4,test("a/b/c/def.xxx","!!!"))
+--~ print(5,test("a/b/c/def","!!!"))
+--~ print(6,test("def","!!!"))
+--~ print(7,test("def.xxx","!!!"))
+
+--~ local tim = os.clock() for i=1,250000 do local ext = test("abd.def.xxx","!!!") end print(os.clock()-tim)
+
-- filename : l-url.lua
-- author : Hans Hagen, PRAGMA-ADE, Hasselt NL
@@ -1837,51 +2162,6 @@ dir = { }
if lfs then do
---~ local attributes = lfs.attributes
---~ local walkdir = lfs.dir
---~
---~ local function glob_pattern(path,patt,recurse,action)
---~ local ok, scanner = xpcall(function() return walkdir(path) end, function() end) -- kepler safe
---~ if ok and type(scanner) == "function" then
---~ if not path:find("/$") then path = path .. '/' end
---~ for name in scanner do
---~ local full = path .. name
---~ local mode = attributes(full,'mode')
---~ if mode == 'file' then
---~ if name:find(patt) then
---~ action(full)
---~ end
---~ elseif recurse and (mode == "directory") and (name ~= '.') and (name ~= "..") then
---~ glob_pattern(full,patt,recurse,action)
---~ end
---~ end
---~ end
---~ end
---~
---~ dir.glob_pattern = glob_pattern
---~
---~ local function glob(pattern, action)
---~ local t = { }
---~ local action = action or function(name) t[#t+1] = name end
---~ local path, patt = pattern:match("^(.*)/*%*%*/*(.-)$")
---~ local recurse = path and patt
---~ if not recurse then
---~ path, patt = pattern:match("^(.*)/(.-)$")
---~ if not (path and patt) then
---~ path, patt = '.', pattern
---~ end
---~ end
---~ patt = patt:gsub("([%.%-%+])", "%%%1")
---~ patt = patt:gsub("%*", ".*")
---~ patt = patt:gsub("%?", ".")
---~ patt = "^" .. patt .. "$"
---~ -- print('path: ' .. path .. ' | pattern: ' .. patt .. ' | recurse: ' .. tostring(recurse))
---~ glob_pattern(path,patt,recurse,action)
---~ return t
---~ end
---~
---~ dir.glob = glob
-
local attributes = lfs.attributes
local walkdir = lfs.dir
@@ -1959,13 +2239,17 @@ if lfs then do
glob(s,t)
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
local t = t or { }
local action = action or function(name) t[#t+1] = name end
local root, path, base = split[1], split[2], split[3]
- local recurse = base:find("**")
+ local recurse = base:find("%*%*")
local start = root .. path
local result = filter:match(start .. base)
glob_pattern(start,result,recurse,action)
@@ -1993,16 +2277,21 @@ if lfs then do
for name in walkdir(path) do
if name:find("^%.") then
--- skip
- elseif attributes(name,'mode') == "directory" then
- if recurse then
- globfiles(path .. "/" .. name,recurse,func,files)
- end
- elseif func then
- if func(name) then
- files[#files+1] = path .. "/" .. name
- end
else
- files[#files+1] = path .. "/" .. name
+ local mode = attributes(name,'mode')
+ if mode == "directory" then
+ if recurse then
+ globfiles(path .. "/" .. name,recurse,func,files)
+ end
+ elseif mode == "file" then
+ if func then
+ if func(name) then
+ files[#files+1] = path .. "/" .. name
+ end
+ else
+ files[#files+1] = path .. "/" .. name
+ end
+ end
end
end
return files
@@ -2210,7 +2499,7 @@ function toboolean(str,tolerant)
if tolerant then
local tstr = type(str)
if tstr == "string" then
- return str == "true" or str == "yes" or str == "on" or str == "1"
+ return str == "true" or str == "yes" or str == "on" or str == "1" or str == "t"
elseif tstr == "number" then
return tonumber(str) ~= 0
elseif tstr == "nil" then
@@ -2229,9 +2518,9 @@ end
function string.is_boolean(str)
if type(str) == "string" then
- if str == "true" or str == "yes" or str == "on" then
+ if str == "true" or str == "yes" or str == "on" or str == "t" then
return true
- elseif str == "false" or str == "no" or str == "off" then
+ elseif str == "false" or str == "no" or str == "off" or str == "f" then
return false
end
end
@@ -2301,8 +2590,8 @@ function unicode.utftype(f) -- \000 fails !
end
end
-function unicode.utf16_to_utf8(str, endian)
- garbagecollector.push()
+function unicode.utf16_to_utf8(str, endian) -- maybe a gsub is faster or an lpeg
+--~ garbagecollector.push()
local result = { }
local tc, uc = table.concat, unicode.utf8.char
local tmp, n, m, p = { }, 0, 0, 0
@@ -2324,30 +2613,32 @@ function unicode.utf16_to_utf8(str, endian)
end
end
for l,r in str:bytepairs() do
- if endian then
- n = l*256 + r
- else
- n = r*256 + l
- end
- if m > 0 then
- n = (m-0xD800)*0x400 + (n-0xDC00) + 0x10000
- m = 0
- doit()
- elseif n >= 0xD800 and n <= 0xDBFF then
- m = n
- else
- doit()
+ if r then
+ if endian then
+ n = l*256 + r
+ else
+ n = r*256 + l
+ end
+ if m > 0 then
+ n = (m-0xD800)*0x400 + (n-0xDC00) + 0x10000
+ m = 0
+ doit()
+ elseif n >= 0xD800 and n <= 0xDBFF then
+ m = n
+ else
+ doit()
+ end
end
end
if #tmp > 0 then
result[#result+1] = tc(tmp,"")
end
- garbagecollector.pop()
+--~ garbagecollector.pop()
return result
end
function unicode.utf32_to_utf8(str, endian)
- garbagecollector.push()
+--~ garbagecollector.push()
local result = { }
local tc, uc = table.concat, unicode.utf8.char
local tmp, n, m, p = { }, 0, -1, 0
@@ -2392,10 +2683,36 @@ function unicode.utf32_to_utf8(str, endian)
if #tmp > 0 then
result[#result+1] = tc(tmp,"")
end
- garbagecollector.pop()
+--~ garbagecollector.pop()
return result
end
+function unicode.utf8_to_utf16(str,littleendian)
+ if littleendian then
+ return char(255,254) .. utf.gsub(str,".",function(c)
+ local b = byte(c)
+ if b < 0x10000 then
+ return char(b%256,b/256)
+ else
+ b = b - 0x10000
+ local b1, b2 = b/1024 + 0xD800, b%1024 + 0xDC00
+ return char(b1%256,b1/256,b2%256,b2/256)
+ end
+ end)
+ else
+ return char(254,255) .. utf.gsub(str,".",function(c)
+ local b = byte(c)
+ if b < 0x10000 then
+ return char(b/256,b%256)
+ else
+ b = b - 0x10000
+ local b1, b2 = b/1024 + 0xD800, b%1024 + 0xDC00
+ return char(b1/256,b1%256,b2/256,b2%256)
+ end
+ end)
+ end
+end
+
-- filename : l-utils.lua
-- comment : split off from luat-lib
@@ -2429,12 +2746,18 @@ function utils.report(...)
print(...)
end
+utils.merger.strip_comment = true
+
function utils.merger._self_load_(name)
local f, data = io.open(name), ""
if f then
data = f:read("*all")
f:close()
end
+ if data and utils.merger.strip_comment then
+ -- saves some 20K
+ data = data:gsub("%-%-~[^\n\r]*[\r\n]", "")
+ end
return data or ""
end
@@ -2512,108 +2835,62 @@ function utils.merger.selfclean(name)
)
end
-utils.lua.compile_strip = true
-
-function utils.lua.compile(luafile, lucfile)
+function utils.lua.compile(luafile, lucfile, cleanup, strip) -- defaults: cleanup=false strip=true
-- utils.report("compiling",luafile,"into",lucfile)
os.remove(lucfile)
local command = "-o " .. string.quote(lucfile) .. " " .. string.quote(luafile)
- if utils.lua.compile_strip then
+ if strip ~= false then
command = "-s " .. command
end
- if os.spawn("texluac " .. command) == 0 then
- return true
- elseif os.spawn("luac " .. command) == 0 then
- return true
- else
- return false
+ local done = (os.spawn("texluac " .. command) == 0) or (os.spawn("luac " .. command) == 0)
+ if done and cleanup == true and lfs.isfile(lucfile) and lfs.isfile(luafile) then
+ -- utils.report("removing",luafile)
+ os.remove(luafile)
end
+ return done
end
--- filename : luat-lib.lua
--- comment : companion to luat-lib.tex
--- author : Hans Hagen, PRAGMA-ADE, Hasselt NL
--- copyright: PRAGMA ADE / ConTeXt Development Team
--- license : see context related readme files
-
-if not versions then versions = { } end versions['luat-lib'] = 1.001
-
--- mostcode moved to the l-*.lua and other luat-*.lua files
+if not modules then modules = { } end modules ['luat-lib'] = {
+ version = 1.001,
+ 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",
+}
--- os / io
+-- most code already moved to the l-*.lua and other luat-*.lua files
os.setlocale(nil,nil) -- useless feature and even dangerous in luatex
--- os.platform
-
--- mswin|bccwin|mingw|cygwin windows
--- darwin|rhapsody|nextstep macosx
--- netbsd|unix unix
--- linux linux
-
-if not io.fileseparator then
- if string.find(os.getenv("PATH"),";") then
- io.fileseparator, io.pathseparator, os.platform = "\\", ";", os.type or "windows"
- else
- io.fileseparator, io.pathseparator, os.platform = "/" , ":", os.type or "unix"
- end
-end
-
-os.platform = os.platform or os.type or (io.pathseparator == ";" and "windows") or "unix"
-
--- arg normalization
---
--- for k,v in pairs(arg) do print(k,v) end
-
--- environment
-
-if not environment then environment = { } end
-
-environment.ownbin = environment.ownbin or arg[-2] or arg[-1] or arg[0] or "luatex"
-
-local ownpath = nil -- we could use a metatable here
-
-function environment.ownpath()
- if not ownpath then
- for p in string.gmatch(os.getenv("PATH"),"[^"..io.pathseparator.."]+") do
- local b = file.join(p,environment.ownbin)
- if lfs.isfile(b..".exe") or lfs.isfile(b) then
- ownpath = p
- break
- end
- end
- if not ownpath then ownpath = '.' end
- end
- return ownpath
+function os.setlocale()
+ -- no way you can mess with it
end
if arg and (arg[0] == 'luatex' or arg[0] == 'luatex.exe') and arg[1] == "--luaonly" then
arg[-1]=arg[0] arg[0]=arg[2] for k=3,#arg do arg[k-2]=arg[k] end arg[#arg]=nil arg[#arg]=nil
end
-environment.arguments = { }
-environment.files = { }
-environment.sorted_argument_keys = nil
-
-environment.platform = os.platform
+environment = environment or { }
+environment.arguments = { }
+environment.files = { }
+environment.sortedflags = nil
function environment.initialize_arguments(arg)
- environment.arguments = { }
- environment.files = { }
- environment.sorted_argument_keys = nil
+ local arguments, files = { }, { }
+ environment.arguments, environment.files, environment.sortedflags = arguments, files, nil
for index, argument in pairs(arg) do
if index > 0 then
local flag, value = argument:match("^%-+(.+)=(.-)$")
if flag then
- environment.arguments[flag] = string.unquote(value or "")
+ arguments[flag] = string.unquote(value or "")
else
flag = argument:match("^%-+(.+)")
if flag then
- environment.arguments[flag] = true
+ arguments[flag] = true
else
- environment.files[#environment.files+1] = argument
+ files[#files+1] = argument
end
end
end
@@ -2635,18 +2912,20 @@ function environment.setargument(name,value)
end
function environment.argument(name)
- if environment.arguments[name] then
- return environment.arguments[name]
+ local arguments, sortedflags = environment.arguments, environment.sortedflags
+ if arguments[name] then
+ return arguments[name]
else
- if not environment.sorted_argument_keys then
- environment.sorted_argument_keys = { }
- for _,v in pairs(table.sortedkeys(environment.arguments)) do
- table.insert(environment.sorted_argument_keys, "^" .. v)
+ if not sortedflags then
+ sortedflags = { }
+ for _,v in pairs(table.sortedkeys(arguments)) do
+ sortedflags[#sortedflags+1] = "^" .. v
end
+ environment.sortedflags = sortedflags
end
- for _,v in pairs(environment.sorted_argument_keys) do
+ for _,v in ipairs(sortedflags) do
if name:find(v) then
- return environment.arguments[v:sub(2,#v)]
+ return arguments[v:sub(2,#v)]
end
end
end
@@ -2694,21 +2973,24 @@ if arg then
end
--- filename : luat-inp.lua
--- comment : companion to luat-lib.tex
--- author : Hans Hagen, PRAGMA-ADE, Hasselt NL
--- copyright: PRAGMA ADE / ConTeXt Development Team
--- license : see context related readme files
-
--- This lib is multi-purpose and can be loaded again later on so that
--- additional functionality becomes available. We will split this
--- module in components when we're done with prototyping.
+if not modules then modules = { } end modules ['luat-inp'] = {
+ version = 1.001,
+ 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",
+}
-- TODO: os.getenv -> os.env[]
-- TODO: instances.[hashes,cnffiles,configurations,522] -> ipairs (alles check, sneller)
-- TODO: check escaping in find etc, too much, too slow
--- This is the first code I wrote for LuaTeX, so it needs some cleanup.
+-- This lib is multi-purpose and can be loaded again later on so that
+-- additional functionality becomes available. We will split this
+-- module in components once we're done with prototyping. This is the
+-- first code I wrote for LuaTeX, so it needs some cleanup. Before changing
+-- something in this module one can best check with Taco or Hans first; there
+-- is some nasty trickery going on that relates to traditional kpse support.
-- To be considered: hash key lowercase, first entry in table filename
-- (any case), rest paths (so no need for optimization). Or maybe a
@@ -2718,12 +3000,6 @@ end
-- Beware, loading and saving is overloaded in luat-tmp!
-if not versions then versions = { } end versions['luat-inp'] = 1.001
-if not environment then environment = { } end
-if not file then file = { } end
-
-if environment.aleph_mode == nil then environment.aleph_mode = true end -- temp hack
-
if not input then input = { } end
if not input.suffixes then input.suffixes = { } end
if not input.formats then input.formats = { } end
@@ -2749,8 +3025,16 @@ input.debug = false
input.cnfname = 'texmf.cnf'
input.luaname = 'texmfcnf.lua'
input.lsrname = 'ls-R'
-input.luasuffix = '.tma'
-input.lucsuffix = '.tmc'
+input.homedir = os.env[os.platform == "windows" and 'USERPROFILE'] or os.env['HOME'] or '~'
+
+--~ input.luasuffix = 'tma'
+--~ input.lucsuffix = 'tmc'
+
+-- for the moment we have .local but this will disappear
+input.cnfdefault = '{$SELFAUTOLOC,$SELFAUTODIR,$SELFAUTOPARENT}{,{/share,}/texmf{-local,.local,}/web2c}'
+
+-- chances are low that the cnf file is in the bin path
+input.cnfdefault = '{$SELFAUTODIR,$SELFAUTOPARENT}{,{/share,}/texmf{-local,.local,}/web2c}'
-- we use a cleaned up list / format=any is a wildcard, as is *name
@@ -2786,7 +3070,8 @@ input.suffixes['lua'] = { 'lua', 'luc', 'tma', 'tmc' }
-- FONTFEATURES = .;$TEXMF/fonts/fea//
-- FONTCIDMAPS = .;$TEXMF/fonts/cid//
-function input.checkconfigdata(instance) -- not yet ok, no time for debugging now
+function input.checkconfigdata() -- not yet ok, no time for debugging now
+ local instance = input.instance
local function fix(varname,default)
local proname = varname .. "." .. instance.progname or "crap"
local p = instance.environment[proname]
@@ -2795,7 +3080,15 @@ function input.checkconfigdata(instance) -- not yet ok, no time for debugging no
instance.variables[varname] = default -- or environment?
end
end
- fix("LUAINPUTS" , ".;$TEXINPUTS;$TEXMFSCRIPTS")
+ local name = os.name
+ if name == "windows" then
+ fix("OSFONTDIR", "c:/windows/fonts//")
+ elseif name == "macosx" then
+ fix("OSFONTDIR", "$HOME/Library/Fonts//;/Library/Fonts//;/System/Library/Fonts//")
+ else
+ -- 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")
end
@@ -2822,14 +3115,20 @@ input.formats ['sfd'] = 'SFDFONTS'
input.suffixes ['sfd'] = { 'sfd' }
input.alternatives['subfont definition files'] = 'sfd'
-function input.reset()
+-- 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
+-- instance but for practical pusposes we now avoid this and use a
+-- instance variable.
+
+function input.newinstance()
local instance = { }
instance.rootpath = ''
instance.treepath = ''
- instance.progname = environment.progname or 'context'
- instance.engine = environment.engine or 'luatex'
+ instance.progname = 'context'
+ instance.engine = 'luatex'
instance.format = ''
instance.environment = { }
instance.variables = { }
@@ -2853,12 +3152,12 @@ function input.reset()
instance.cachepath = nil
instance.loaderror = false
instance.smallcache = false
+ instance.sortdata = false
instance.savelists = true
instance.cleanuppaths = true
instance.allresults = false
instance.pattern = nil -- lists
instance.kpseonly = false -- lists
- instance.cachefile = 'tmftools'
instance.loadtime = 0
instance.starttime = 0
instance.stoptime = 0
@@ -2869,23 +3168,13 @@ function input.reset()
instance.fakepaths = { }
instance.lsrmode = false
- if os.env then
- -- store once, freeze and faster
- for k,v in pairs(os.env) do
- instance.environment[k] = input.bare_variable(v)
- end
- else
- -- we will access os.env frequently
- for k,v in pairs({'HOME','TEXMF','TEXMFCNF'}) do
- local e = os.getenv(v)
- if e then
- -- input.report("setting",v,"to",input.bare_variable(e))
- instance.environment[v] = input.bare_variable(e)
- end
- end
+ -- store once, freeze and faster (once reset we can best use instance.environment)
+
+ for k,v in pairs(os.env) do
+ instance.environment[k] = input.bare_variable(v)
end
- -- cross referencing
+ -- cross referencing, delayed because we can add suffixes
for k, v in pairs(input.suffixes) do
for _, vv in pairs(v) do
@@ -2899,68 +3188,42 @@ function input.reset()
end
-function input.reset_hashes(instance)
- instance.lists = { }
- instance.found = { }
-end
-
-function input.bare_variable(str) -- assumes str is a string
- -- return string.gsub(string.gsub(string.gsub(str,"%s+$",""),'^"(.+)"$',"%1"),"^'(.+)'$","%1")
- return (str:gsub("\s*([\"\']?)(.+)%1\s*", "%2"))
-end
+input.instance = input.instance or nil
-if texio then
- input.log = texio.write_nl
-else
- input.log = print
+function input.reset()
+ input.instance = input.newinstance()
+ return input.instance
end
-function input.simple_logger(kind, name)
- if name and name ~= "" then
- if input.banner then
- input.log(input.banner..kind..": "..name)
- else
- input.log("<<"..kind..": "..name..">>")
- end
- else
- if input.banner then
- input.log(input.banner..kind..": no name")
- else
- input.log("<<"..kind..": no name>>")
- end
- end
+function input.reset_hashes()
+ input.instance.lists = { }
+ input.instance.found = { }
end
-function input.dummy_logger()
+function input.bare_variable(str) -- assumes str is a string
+ -- return string.gsub(string.gsub(string.gsub(str,"%s+$",""),'^"(.+)"$',"%1"),"^'(.+)'$","%1")
+ return (str:gsub("\s*([\"\']?)(.+)%1\s*", "%2"))
end
function input.settrace(n)
input.trace = tonumber(n or 0)
if input.trace > 0 then
- input.logger = input.simple_logger
input.verbose = true
- else
- input.logger = function() end
end
end
-function input.report(...) -- inefficient
+input.log = (texio and texio.write_nl) or print
+
+function input.report(...)
if input.verbose then
- if input.banner then
- input.log(input.banner .. table.concat({...},' '))
- elseif input.logmode() == 'xml' then
- input.log(""..table.concat({...},' ').."")
- else
- input.log("<<"..table.concat({...},' ')..">>")
- end
+ input.log("<<"..format(...)..">>")
end
end
-function input.reportlines(str)
- if type(str) == "string" then
- str = str:split("\n")
+function input.report(...)
+ if input.trace > 0 then -- extra test
+ input.log("<<"..format(...)..">>")
end
- for _,v in pairs(str) do input.report(v) end
end
input.settrace(tonumber(os.getenv("MTX.INPUT.TRACE") or os.getenv("MTX_INPUT_TRACE") or input.trace or 0))
@@ -2989,7 +3252,7 @@ do
instance.stoptime = stoptime
instance.loadtime = instance.loadtime + loadtime
if report then
- input.report('load time', format("%0.3f",loadtime))
+ input.report("load time %0.3f",loadtime)
end
return loadtime
end
@@ -3005,18 +3268,18 @@ end
function input.report_loadtime(instance)
if instance then
- input.report('total load time', input.elapsedtime(instance))
+ input.report('total load time %s', input.elapsedtime(instance))
end
end
input.loadtime = input.elapsedtime
-function input.env(instance,key)
- return instance.environment[key] or input.osenv(instance,key)
+function input.env(key)
+ return input.instance.environment[key] or input.osenv(key)
end
-function input.osenv(instance,key)
- local ie = instance.environment
+function input.osenv(key)
+ local ie = input.instance.environment
local value = ie[key]
if value == nil then
-- local e = os.getenv(key)
@@ -3034,81 +3297,106 @@ end
-- we follow a rather traditional approach:
--
-- (1) texmf.cnf given in TEXMFCNF
--- (2) texmf.cnf searched in TEXMF/web2c
+-- (2) texmf.cnf searched in default variable
--
--- for the moment we don't expect a configuration file in a zip
+-- also we now follow the stupid route: if not set then just assume *one*
+-- cnf file under texmf (i.e. distribution)
-function input.identify_cnf(instance)
- -- we no longer support treepath and rootpath (was handy for testing);
- -- also we now follow the stupid route: if not set then just assume *one*
- -- cnf file under texmf (i.e. distribution)
- if #instance.cnffiles == 0 then
- if input.env(instance,'TEXMFCNF') == "" then
- local ownpath = environment.ownpath() or "."
- if ownpath then
- -- beware, this is tricky on my own system because at that location I do have
- -- the raw tree that ends up in the zip; i.e. I cannot test this kind of mess
- local function locate(filename,list)
- local ownroot = input.normalize_name(file.join(ownpath,"../.."))
- if not lfs.isdir(file.join(ownroot,"texmf")) then
- ownroot = input.normalize_name(file.join(ownpath,".."))
- if not lfs.isdir(file.join(ownroot,"texmf")) then
- input.verbose = true
- input.report("error", "unable to identify cnf file")
- return
+input.ownpath = input.ownpath or nil
+input.ownbin = input.ownbin or arg[-2] or arg[-1] or arg[0] or "luatex"
+input.autoselfdir = true -- false may be handy for debugging
+
+function input.getownpath()
+ if not input.ownpath then
+ if input.autoselfdir and os.selfdir then
+ input.ownpath = os.selfdir
+ else
+ local binary = input.ownbin
+ if os.platform == "windows" then
+ binary = file.replacesuffix(binary,"exe")
+ end
+ for p in string.gmatch(os.getenv("PATH"),"[^"..io.pathseparator.."]+") do
+ local b = file.join(p,binary)
+ if lfs.isfile(b) then
+ -- we assume that after changing to the path the currentdir function
+ -- resolves to the real location and use this side effect here; this
+ -- trick is needed because on the mac installations use symlinks in the
+ -- path instead of real locations
+ local olddir = lfs.currentdir()
+ if lfs.chdir(p) then
+ local pp = lfs.currentdir()
+ if input.verbose and p ~= pp then
+ input.report("following symlink %s to %s",p,pp)
end
- end
- local texmfcnf = file.join(ownroot,"texmf-local/web2c",filename) -- for minimals and myself
- if not lfs.isfile(texmfcnf) then
- texmfcnf = file.join(ownroot,"texmf/web2c",filename)
- if not lfs.isfile(texmfcnf) then
- input.verbose = true
- input.report("error", "unable to locate",filename)
- return
+ input.ownpath = pp
+ lfs.chdir(olddir)
+ else
+ if input.verbose then
+ input.report("unable to check path %s",p)
end
+ input.ownpath = p
end
- table.insert(list,texmfcnf)
- local ie = instance.environment
- if not ie['SELFAUTOPARENT'] then ie['SELFAUTOPARENT'] = ownroot end
- if not ie['TEXMFCNF'] then ie['TEXMFCNF'] = file.dirname(texmfcnf) end
- end
- locate(input.luaname,instance.luafiles)
- locate(input.cnfname,instance.cnffiles)
- if #instance.luafiles == 0 and instance.cnffiles == 0 then
- input.verbose = true
- input.report("error", "unable to locate",filename)
- os.exit()
+ break
end
- -- here we also assume then TEXMF is set in the distribution, if this trickery is
- -- used in the minimals, then users who don't use setuptex are on their own with
- -- regards to extra trees
- else
- input.verbose = true
- input.report("error", "unable to identify own path")
- os.exit()
end
- else
- local t = input.split_path(input.env(instance,'TEXMFCNF'))
- t = input.aux.expanded_path(instance,t)
- input.aux.expand_vars(instance,t)
- local function locate(filename,list)
- for _,v in ipairs(t) do
- local texmfcnf = input.normalize_name(file.join(v,filename))
- if lfs.isfile(texmfcnf) then
- table.insert(list,texmfcnf)
- end
+ end
+ if not input.ownpath then input.ownpath = '.' end
+ end
+ return input.ownpath
+end
+
+function input.identify_own()
+ local instance = input.instance
+ local ownpath = input.getownpath() or lfs.currentdir()
+ local ie = instance.environment
+ if ownpath then
+ if input.env('SELFAUTOLOC') == "" then os.env['SELFAUTOLOC'] = file.collapse_path(ownpath) end
+ if input.env('SELFAUTODIR') == "" then os.env['SELFAUTODIR'] = file.collapse_path(ownpath .. "/..") end
+ if input.env('SELFAUTOPARENT') == "" then os.env['SELFAUTOPARENT'] = file.collapse_path(ownpath .. "/../..") end
+ else
+ input.verbose = true
+ input.report("error: unable to locate ownpath")
+ os.exit()
+ end
+ if input.env('TEXMFCNF') == "" then os.env['TEXMFCNF'] = input.cnfdefault end
+ if input.env('TEXOS') == "" then os.env['TEXOS'] = input.env('SELFAUTODIR') end
+ if input.env('TEXROOT') == "" then os.env['TEXROOT'] = input.env('SELFAUTOPARENT') end
+ if input.verbose then
+ for _,v in ipairs({"SELFAUTOLOC","SELFAUTODIR","SELFAUTOPARENT","TEXMFCNF"}) do
+ input.report("variable %s set to %s",v,input.env(v) or "unknown")
+ end
+ end
+ function input.identify_own() end
+end
+
+function input.identify_cnf()
+ local instance = input.instance
+ if #instance.cnffiles == 0 then
+ -- fallback
+ input.identify_own()
+ -- the real search
+ input.expand_variables()
+ local t = input.split_path(input.env('TEXMFCNF'))
+ t = input.aux.expanded_path(t)
+ input.aux.expand_vars(t) -- redundant
+ local function locate(filename,list)
+ for _,v in ipairs(t) do
+ local texmfcnf = input.normalize_name(file.join(v,filename))
+ if lfs.isfile(texmfcnf) then
+ table.insert(list,texmfcnf)
end
end
- locate(input.luaname,instance.luafiles)
- locate(input.cnfname,instance.cnffiles)
end
+ locate(input.luaname,instance.luafiles)
+ locate(input.cnfname,instance.cnffiles)
end
end
-function input.load_cnf(instance)
+function input.load_cnf()
+ local instance = input.instance
local function loadoldconfigdata()
for _, fname in ipairs(instance.cnffiles) do
- input.aux.load_cnf(instance,fname)
+ input.aux.load_cnf(fname)
end
end
-- instance.cnffiles contain complete names now !
@@ -3123,27 +3411,27 @@ function input.load_cnf(instance)
instance.rootpath = file.dirname(instance.rootpath)
end
instance.rootpath = input.normalize_name(instance.rootpath)
- instance.environment['SELFAUTOPARENT'] = instance.rootpath -- just to be sure
if instance.lsrmode then
loadoldconfigdata()
elseif instance.diskcache and not instance.renewcache then
- input.loadoldconfig(instance,instance.cnffiles)
+ input.loadoldconfig(instance.cnffiles)
if instance.loaderror then
loadoldconfigdata()
- input.saveoldconfig(instance)
+ input.saveoldconfig()
end
else
loadoldconfigdata()
if instance.renewcache then
- input.saveoldconfig(instance)
+ input.saveoldconfig()
end
end
- input.aux.collapse_cnf_data(instance)
+ input.aux.collapse_cnf_data()
end
- input.checkconfigdata(instance)
+ input.checkconfigdata()
end
-function input.load_lua(instance)
+function input.load_lua()
+ local instance = input.instance
if #instance.luafiles == 0 then
-- yet harmless
else
@@ -3155,14 +3443,14 @@ function input.load_lua(instance)
instance.rootpath = file.dirname(instance.rootpath)
end
instance.rootpath = input.normalize_name(instance.rootpath)
- instance.environment['SELFAUTOPARENT'] = instance.rootpath -- just to be sure
- input.loadnewconfig(instance)
- input.aux.collapse_cnf_data(instance)
+ input.loadnewconfig()
+ input.aux.collapse_cnf_data()
end
- input.checkconfigdata(instance)
+ input.checkconfigdata()
end
-function input.aux.collapse_cnf_data(instance) -- potential optmization: pass start index (setup and configuration are shared)
+function input.aux.collapse_cnf_data() -- potential optimization: pass start index (setup and configuration are shared)
+ local instance = input.instance
for _,c in ipairs(instance.order) do
for k,v in pairs(c) do
if not instance.variables[k] then
@@ -3177,21 +3465,22 @@ function input.aux.collapse_cnf_data(instance) -- potential optmization: pass st
end
end
-function input.aux.load_cnf(instance,fname)
+function input.aux.load_cnf(fname)
+ local instance = input.instance
fname = input.clean_path(fname)
- local lname = fname:gsub("%.%a+$",input.luasuffix)
+ 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 not instance.configuration[dname] then
- input.aux.load_configuration(instance,dname,lname)
+ input.aux.load_configuration(dname,lname)
instance.order[#instance.order+1] = instance.configuration[dname]
end
else
f = io.open(fname)
if f then
- input.report("loading", fname)
+ input.report("loading %s", fname)
local line, data, n, k, v
local dname = file.dirname(fname)
if not instance.configuration[dname] then
@@ -3223,227 +3512,226 @@ function input.aux.load_cnf(instance,fname)
end
f:close()
else
- input.report("skipping", fname)
+ input.report("skipping %s", fname)
end
end
end
-- database loading
-function input.load_hash(instance)
- input.locatelists(instance)
+function input.load_hash()
+ local instance = input.instance
+ input.locatelists()
if instance.lsrmode then
- input.loadlists(instance)
+ input.loadlists()
elseif instance.diskcache and not instance.renewcache then
- input.loadfiles(instance)
+ input.loadfiles()
if instance.loaderror then
- input.loadlists(instance)
- input.savefiles(instance)
+ input.loadlists()
+ input.savefiles()
end
else
- input.loadlists(instance)
+ input.loadlists()
if instance.renewcache then
- input.savefiles(instance)
+ input.savefiles()
end
end
end
-function input.aux.append_hash(instance,type,tag,name)
- input.logger("= hash append",tag)
- table.insert(instance.hashes, { ['type']=type, ['tag']=tag, ['name']=name } )
+function input.aux.append_hash(type,tag,name)
+ if input.trace > 0 then
+ input.logger("= hash append: %s",tag)
+ end
+ table.insert(input.instance.hashes, { ['type']=type, ['tag']=tag, ['name']=name } )
end
-function input.aux.prepend_hash(instance,type,tag,name)
- input.logger("= hash prepend",tag)
- table.insert(instance.hashes, 1, { ['type']=type, ['tag']=tag, ['name']=name } )
+function input.aux.prepend_hash(type,tag,name)
+ if input.trace > 0 then
+ input.logger("= hash prepend: %s",tag)
+ end
+ table.insert(input.instance.hashes, 1, { ['type']=type, ['tag']=tag, ['name']=name } )
end
-function input.aux.extend_texmf_var(instance,specification) -- crap
- if instance.environment['TEXMF'] then
- input.report("extending environment variable TEXMF with", specification)
- instance.environment['TEXMF'] = instance.environment['TEXMF']:gsub("^%{", function()
- return "{" .. specification .. ","
- end)
- elseif instance.variables['TEXMF'] then
- input.report("extending configuration variable TEXMF with", specification)
- instance.variables['TEXMF'] = instance.variables['TEXMF']:gsub("^%{", function()
- return "{" .. specification .. ","
- end)
+function input.aux.extend_texmf_var(specification) -- crap, we could better prepend the hash
+ local instance = input.instance
+-- local t = input.expanded_path_list('TEXMF') -- full expansion
+ local t = input.split_path(input.env('TEXMF'))
+ table.insert(t,1,specification)
+ local newspec = table.join(t,";")
+ if instance.environment["TEXMF"] then
+ instance.environment["TEXMF"] = newspec
+ elseif instance.variables["TEXMF"] then
+ instance.variables["TEXMF"] = newspec
else
- input.report("setting configuration variable TEXMF to", specification)
- instance.variables['TEXMF'] = "{" .. specification .. "}"
+ -- weird
end
- if instance.variables['TEXMF']:find("%,") and not instance.variables['TEXMF']:find("^%{") then
- input.report("adding {} to complex TEXMF variable, best do that yourself")
- instance.variables['TEXMF'] = "{" .. instance.variables['TEXMF'] .. "}"
- end
- input.expand_variables(instance)
- input.reset_hashes(instance)
+ input.expand_variables()
+ input.reset_hashes()
end
-- locators
-function input.locatelists(instance)
- for _, path in pairs(input.simplified_list(input.expansion(instance,'TEXMF'))) do
- path = file.collapse_path(path)
- input.report("locating list of",path)
- input.locatedatabase(instance,input.normalize_name(path))
+function input.locatelists()
+ local instance = input.instance
+ for _, path in pairs(input.clean_path_list('TEXMF')) do
+ input.report("locating list of %s",path)
+ input.locatedatabase(input.normalize_name(path))
end
end
-function input.locatedatabase(instance,specification)
- return input.methodhandler('locators', instance, specification)
+function input.locatedatabase(specification)
+ return input.methodhandler('locators', specification)
end
-function input.locators.tex(instance,specification)
+function input.locators.tex(specification)
if specification and specification ~= '' and lfs.isdir(specification) then
- input.logger('! tex locator', specification..' found')
- input.aux.append_hash(instance,'file',specification,filename)
- else
- input.logger('? tex locator', specification..' not found')
+ if input.trace > 0 then
+ input.logger('! tex locator found: %s',specification)
+ end
+ input.aux.append_hash('file',specification,filename)
+ elseif input.trace > 0 then
+ input.logger('? tex locator not found: %s',specification)
end
end
-- hashers
-function input.hashdatabase(instance,tag,name)
- return input.methodhandler('hashers',instance,tag,name)
+function input.hashdatabase(tag,name)
+ return input.methodhandler('hashers',tag,name)
end
-function input.loadfiles(instance)
+function input.loadfiles()
+ local instance = input.instance
instance.loaderror = false
instance.files = { }
if not instance.renewcache then
for _, hash in ipairs(instance.hashes) do
- input.hashdatabase(instance,hash.tag,hash.name)
+ input.hashdatabase(hash.tag,hash.name)
if instance.loaderror then break end
end
end
end
-function input.hashers.tex(instance,tag,name)
- input.aux.load_files(instance,tag)
+function input.hashers.tex(tag,name)
+ input.aux.load_files(tag)
end
-- generators:
-function input.loadlists(instance)
- for _, hash in ipairs(instance.hashes) do
- input.generatedatabase(instance,hash.tag)
+function input.loadlists()
+ for _, hash in ipairs(input.instance.hashes) do
+ input.generatedatabase(hash.tag)
end
end
-function input.generatedatabase(instance,specification)
- return input.methodhandler('generators', instance, specification)
+function input.generatedatabase(specification)
+ return input.methodhandler('generators', specification)
end
-do
-
- local weird = lpeg.anywhere(lpeg.S("~`!#$%^&*()={}[]:;\"\'||<>,?\n\r\t"))
+local weird = lpeg.anywhere(lpeg.S("~`!#$%^&*()={}[]:;\"\'||<>,?\n\r\t"))
- function input.generators.tex(instance,specification)
- local tag = specification
- if not instance.lsrmode and lfs and lfs.dir then
- input.report("scanning path",specification)
- instance.files[tag] = { }
- local files = instance.files[tag]
- local n, m, r = 0, 0, 0
- local spec = specification .. '/'
- local attributes = lfs.attributes
- local directory = lfs.dir
- local small = instance.smallcache
- local function action(path)
- local mode, full
- if path then
- full = spec .. path .. '/'
+function input.generators.tex(specification)
+ local instance = input.instance
+ local tag = specification
+ if not instance.lsrmode and lfs.dir then
+ input.report("scanning path %s",specification)
+ instance.files[tag] = { }
+ local files = instance.files[tag]
+ local n, m, r = 0, 0, 0
+ local spec = specification .. '/'
+ local attributes = lfs.attributes
+ local directory = lfs.dir
+ local small = instance.smallcache
+ local function action(path)
+ local mode, full
+ if path then
+ full = spec .. path .. '/'
+ else
+ full = spec
+ end
+ for name in directory(full) do
+ if name:find("^%.") then
+ -- skip
+ -- elseif name:find("[%~%`%!%#%$%%%^%&%*%(%)%=%{%}%[%]%:%;\"\'%|%<%>%,%?\n\r\t]") then -- too much escaped
+ elseif weird:match(name) then
+ -- texio.write_nl("skipping " .. name)
+ -- skip
else
- full = spec
- end
- for name in directory(full) do
- if name:find("^%.") then
- -- skip
- -- elseif name:find("[%~%`%!%#%$%%%^%&%*%(%)%=%{%}%[%]%:%;\"\'%|%<%>%,%?\n\r\t]") then -- too much escaped
- elseif weird:match(name) then
- -- texio.write_nl("skipping " .. name)
- -- skip
- else
- mode = attributes(full..name,'mode')
- if mode == "directory" then
- m = m + 1
- if path then
- action(path..'/'..name)
- else
- action(name)
- end
- elseif path and mode == 'file' then
- n = n + 1
- local f = files[name]
- if f then
- if not small then
- if type(f) == 'string' then
- files[name] = { f, path }
- else
- f[#f+1] = path
- end
- end
- else
- files[name] = path
- local lower = name:lower()
- if name ~= lower then
- files["remap:"..lower] = name
- r = r + 1
- end
- end
- end
- end
- end
- end
- action()
- input.report(format("%s files found on %s directories with %s uppercase remappings",n,m,r))
- else
- local fullname = file.join(specification,input.lsrname)
- local path = '.'
- local f = io.open(fullname)
- if f then
- instance.files[tag] = { }
- local files = instance.files[tag]
- local small = instance.smallcache
- input.report("loading lsr file",fullname)
- -- for line in f:lines() do -- much slower then the next one
- for line in (f:read("*a")):gmatch("(.-)\n") do
- if line:find("^[%a%d]") then
- local fl = files[line]
- if fl then
+ mode = attributes(full..name,'mode')
+ if mode == 'directory' then
+ m = m + 1
+ if path then
+ action(path..'/'..name)
+ else
+ action(name)
+ end
+ elseif path and mode == 'file' then
+ n = n + 1
+ local f = files[name]
+ if f then
if not small then
- if type(fl) == 'string' then
- files[line] = { fl, path } -- table
+ if type(f) == 'string' then
+ files[name] = { f, path }
else
- fl[#fl+1] = path
+ f[#f+1] = path
end
end
else
- files[line] = path -- string
- local lower = line:lower()
- if line ~= lower then
- files["remap:"..lower] = line
+ files[name] = path
+ local lower = name:lower()
+ if name ~= lower then
+ files["remap:"..lower] = name
+ r = r + 1
+ end
+ end
+ end
+ end
+ end
+ end
+ action()
+ input.report("%s files found on %s directories with %s uppercase remappings",n,m,r)
+ else
+ local fullname = file.join(specification,input.lsrname)
+ local path = '.'
+ local f = io.open(fullname)
+ if f then
+ instance.files[tag] = { }
+ local files = instance.files[tag]
+ local small = instance.smallcache
+ input.report("loading lsr file %s",fullname)
+ -- for line in f:lines() do -- much slower then the next one
+ for line in (f:read("*a")):gmatch("(.-)\n") do
+ if line:find("^[%a%d]") then
+ local fl = files[line]
+ if fl then
+ if not small then
+ if type(fl) == 'string' then
+ files[line] = { fl, path } -- table
+ else
+ fl[#fl+1] = path
end
end
else
- path = line:match("%.%/(.-)%:$") or path -- match could be nil due to empty line
+ files[line] = path -- string
+ local lower = line:lower()
+ if line ~= lower then
+ files["remap:"..lower] = line
+ end
end
+ else
+ path = line:match("%.%/(.-)%:$") or path -- match could be nil due to empty line
end
- f:close()
end
+ f:close()
end
end
-
end
-- savers, todo
-function input.savefiles(instance)
- input.aux.save_data(instance, 'files', function(k,v)
- return instance.validfile(k,v) -- path, name
+function input.savefiles()
+ input.aux.save_data('files', function(k,v)
+ return input.instance.validfile(k,v) -- path, name
end)
end
@@ -3451,8 +3739,8 @@ end
-- we join them and split them after the expansion has taken place. This
-- is more convenient.
-function input.splitconfig(instance)
- for i,c in ipairs(instance) do
+function input.splitconfig()
+ for i,c in ipairs(input.instance) do
for k,v in pairs(c) do
if type(v) == 'string' then
local t = file.split_path(v)
@@ -3463,8 +3751,9 @@ function input.splitconfig(instance)
end
end
end
-function input.joinconfig(instance)
- for i,c in ipairs(instance.order) do
+
+function input.joinconfig()
+ for i,c in ipairs(input.instance.order) do
for k,v in pairs(c) do
if type(v) == 'table' then
c[k] = file.join_path(v)
@@ -3487,8 +3776,9 @@ function input.join_path(str)
end
end
-function input.splitexpansions(instance)
- for k,v in pairs(instance.expansions) do
+function input.splitexpansions()
+ local ie = input.instance.expansions
+ for k,v in pairs(ie) do
local t, h = { }, { }
for _,vv in pairs(file.split_path(v)) do
if vv ~= "" and not h[vv] then
@@ -3497,19 +3787,19 @@ function input.splitexpansions(instance)
end
end
if #t > 1 then
- instance.expansions[k] = t
+ ie[k] = t
else
- instance.expansions[k] = t[1]
+ ie[k] = t[1]
end
end
end
-- end of split/join code
-function input.saveoldconfig(instance)
- input.splitconfig(instance)
- input.aux.save_data(instance, 'configuration', nil)
- input.joinconfig(instance)
+function input.saveoldconfig()
+ input.splitconfig()
+ input.aux.save_data('configuration', nil)
+ input.joinconfig()
end
input.configbanner = [[
@@ -3538,7 +3828,7 @@ function input.serialize(files)
end
end
t[#t+1] = "return {"
- if instance.sortdata then
+ if input.instance.sortdata then
for _, k in pairs(sorted(files)) do
local fk = files[k]
if type(fk) == 'table' then
@@ -3570,11 +3860,11 @@ end
if not texmf then texmf = {} end -- no longer needed, at least not here
-function input.aux.save_data(instance, dataname, check, makename) -- untested without cache overload
- for cachename, files in pairs(instance[dataname]) do
+function input.aux.save_data(dataname, check, makename) -- untested without cache overload
+ for cachename, files in pairs(input.instance[dataname]) do
local name = (makename or file.join)(cachename,dataname)
- local luaname, lucname = name .. input.luasuffix, name .. input.lucsuffix
- input.report("preparing " .. dataname .. " for", luaname)
+ local luaname, lucname = name .. ".lua", name .. ".luc"
+ input.report("preparing %s for %s",dataname,cachename)
for k, v in pairs(files) do
if not check or check(v,k) then -- path, name
if type(v) == "table" and #v == 1 then
@@ -3592,38 +3882,38 @@ function input.aux.save_data(instance, dataname, check, makename) -- untested wi
time = os.date("%H:%M:%S"),
content = files,
}
- local f = io.open(luaname,'w')
- if f then
- input.report("saving " .. dataname .. " in", luaname)
- f:write(input.serialize(data))
- f:close()
- input.report("compiling " .. dataname .. " to", lucname)
- if not utils.lua.compile(luaname,lucname) then
- input.report("compiling failed for " .. dataname .. ", deleting file " .. lucname)
+ local ok = io.savedata(luaname,input.serialize(data))
+ if ok then
+ input.report("%s saved in %s",dataname,luaname)
+ if utils.lua.compile(luaname,lucname,false,true) then -- no cleanup but strip
+ input.report("%s compiled to %s",dataname,lucname)
+ else
+ input.report("compiling failed for %s, deleting file %s",dataname,lucname)
os.remove(lucname)
end
else
- input.report("unable to save " .. dataname .. " in " .. name..input.luasuffix)
+ input.report("unable to save %s in %s (access error)",dataname,luaname)
end
end
end
-function input.aux.load_data(instance,pathname,dataname,filename,makename) -- untested without cache overload
+function input.aux.load_data(pathname,dataname,filename,makename) -- untested without cache overload
+ local instance = input.instance
filename = ((not filename or (filename == "")) and dataname) or filename
filename = (makename and makename(dataname,filename)) or file.join(pathname,filename)
- local blob = loadfile(filename .. input.lucsuffix) or loadfile(filename .. input.luasuffix)
+ local blob = loadfile(filename .. ".luc") or loadfile(filename .. ".lua")
if blob then
local data = blob()
if data and data.content and data.type == dataname and data.version == input.cacheversion then
- input.report("loading",dataname,"for",pathname,"from",filename)
+ input.report("loading %s for %s from %s",dataname,pathname,filename)
instance[dataname][pathname] = data.content
else
- input.report("skipping",dataname,"for",pathname,"from",filename)
+ input.report("skipping %s for %s from %s",dataname,pathname,filename)
instance[dataname][pathname] = { }
instance.loaderror = true
end
else
- input.report("skipping",dataname,"for",pathname,"from",filename)
+ input.report("skipping %s for %s from %s",dataname,pathname,filename)
end
end
@@ -3636,13 +3926,14 @@ end
-- TEXMFBOGUS = 'effe checken of dit werkt',
-- }
-function input.aux.load_texmfcnf(instance,dataname,pathname)
+function input.aux.load_texmfcnf(dataname,pathname)
+ local instance = input.instance
local filename = file.join(pathname,input.luaname)
local blob = loadfile(filename)
if blob then
local data = blob()
if data then
- input.report("loading","configuration file",filename)
+ input.report("loading configuration file %s",filename)
if true then
-- flatten to variable.progname
local t = { }
@@ -3662,169 +3953,168 @@ function input.aux.load_texmfcnf(instance,dataname,pathname)
instance[dataname][pathname] = data
end
else
- input.report("skipping","configuration file",filename)
+ input.report("skipping configuration file %s",filename)
instance[dataname][pathname] = { }
instance.loaderror = true
end
else
- input.report("skipping","configuration file",filename)
+ input.report("skipping configuration file %s",filename)
end
end
-function input.aux.load_configuration(instance,dname,lname)
- input.aux.load_data(instance,dname,'configuration',lname and file.basename(lname))
+function input.aux.load_configuration(dname,lname)
+ input.aux.load_data(dname,'configuration',lname and file.basename(lname))
end
-function input.aux.load_files(instance,tag)
- input.aux.load_data(instance,tag,'files')
+function input.aux.load_files(tag)
+ input.aux.load_data(tag,'files')
end
-function input.resetconfig(instance)
+function input.resetconfig()
+ input.identify_own()
+ local instance = input.instance
instance.configuration, instance.setup, instance.order, instance.loaderror = { }, { }, { }, false
end
-function input.loadnewconfig(instance)
+function input.loadnewconfig()
+ local instance = input.instance
for _, cnf in ipairs(instance.luafiles) do
local dname = file.dirname(cnf)
- input.aux.load_texmfcnf(instance,'setup',dname)
+ input.aux.load_texmfcnf('setup',dname)
instance.order[#instance.order+1] = instance.setup[dname]
if instance.loaderror then break end
end
end
-function input.loadoldconfig(instance)
+function input.loadoldconfig()
+ local instance = input.instance
if not instance.renewcache then
for _, cnf in ipairs(instance.cnffiles) do
local dname = file.dirname(cnf)
- input.aux.load_configuration(instance,dname)
+ input.aux.load_configuration(dname)
instance.order[#instance.order+1] = instance.configuration[dname]
if instance.loaderror then break end
end
end
- input.joinconfig(instance)
+ input.joinconfig()
end
-function input.expand_variables(instance)
- instance.expansions = { }
---~ instance.environment['SELFAUTOPARENT'] = instance.environment['SELFAUTOPARENT'] or instance.rootpath
- if instance.engine ~= "" then instance.environment['engine'] = instance.engine end
- if instance.progname ~= "" then instance.environment['progname'] = instance.progname end
- for k,v in pairs(instance.environment) do
+function input.expand_variables()
+ local instance = input.instance
+ local expansions, environment, variables = { }, instance.environment, instance.variables
+ local env = input.env
+ instance.expansions = expansions
+ if instance.engine ~= "" then environment['engine'] = instance.engine end
+ if instance.progname ~= "" then environment['progname'] = instance.progname end
+ for k,v in pairs(environment) do
local a, b = k:match("^(%a+)%_(.*)%s*$")
if a and b then
- instance.expansions[a..'.'..b] = v
+ expansions[a..'.'..b] = v
else
- instance.expansions[k] = v
+ expansions[k] = v
end
end
- for k,v in pairs(instance.environment) do -- move environment to expansions
- if not instance.expansions[k] then instance.expansions[k] = v end
+ for k,v in pairs(environment) do -- move environment to expansions
+ if not expansions[k] then expansions[k] = v end
end
- for k,v in pairs(instance.variables) do -- move variables to expansions
- if not instance.expansions[k] then instance.expansions[k] = v end
+ for k,v in pairs(variables) do -- move variables to expansions
+ if not expansions[k] then expansions[k] = v end
end
while true do
local busy = false
- for k,v in pairs(instance.expansions) do
+ for k,v in pairs(expansions) do
local s, n = v:gsub("%$([%a%d%_%-]+)", function(a)
busy = true
- return instance.expansions[a] or input.env(instance,a)
+ return expansions[a] or env(a)
end)
local s, m = s:gsub("%$%{([%a%d%_%-]+)%}", function(a)
busy = true
- return instance.expansions[a] or input.env(instance,a)
+ return expansions[a] or env(a)
end)
if n > 0 or m > 0 then
- instance.expansions[k]= s
+ expansions[k]= s
end
end
if not busy then break end
end
- for k,v in pairs(instance.expansions) do
- instance.expansions[k] = v:gsub("\\", '/')
+ for k,v in pairs(expansions) do
+ expansions[k] = v:gsub("\\", '/')
end
end
-function input.aux.expand_vars(instance,lst) -- simple vars
+function input.aux.expand_vars(lst) -- simple vars
+ local instance = input.instance
+ local variables, env = instance.variables, input.env
for k,v in pairs(lst) do
lst[k] = v:gsub("%$([%a%d%_%-]+)", function(a)
- return instance.variables[a] or input.env(instance,a)
+ return variables[a] or env(a)
end)
end
end
-function input.aux.expanded_var(instance,var) -- simple vars
+function input.aux.expanded_var(var) -- simple vars
+ local instance = input.instance
return var:gsub("%$([%a%d%_%-]+)", function(a)
- return instance.variables[a] or input.env(instance,a)
+ return instance.variables[a] or input.env(a)
end)
end
-function input.aux.entry(instance,entries,name)
+function input.aux.entry(entries,name)
if name and (name ~= "") then
+ local instance = input.instance
name = name:gsub('%$','')
local result = entries[name..'.'..instance.progname] or entries[name]
if result then
return result
else
- result = input.env(instance,name)
+ result = input.env(name)
if result then
instance.variables[name] = result
- input.expand_variables(instance)
+ input.expand_variables()
return instance.expansions[name] or ""
end
end
end
return ""
end
-function input.variable(instance,name)
- return input.aux.entry(instance,instance.variables,name)
+function input.variable(name)
+ return input.aux.entry(input.instance.variables,name)
end
-function input.expansion(instance,name)
- return input.aux.entry(instance,instance.expansions,name)
+function input.expansion(name)
+ return input.aux.entry(input.instance.expansions,name)
end
-function input.aux.is_entry(instance,entries,name)
+function input.aux.is_entry(entries,name)
if name and name ~= "" then
name = name:gsub('%$','')
- return (entries[name..'.'..instance.progname] or entries[name]) ~= nil
+ return (entries[name..'.'..input.instance.progname] or entries[name]) ~= nil
else
return false
end
end
-function input.is_variable(instance,name)
- return input.aux.is_entry(instance,instance.variables,name)
-end
-function input.is_expansion(instance,name)
- return input.aux.is_entry(instance,instance.expansions,name)
+function input.is_variable(name)
+ return input.aux.is_entry(input.instance.variables,name)
end
-function input.simplified_list(str)
- if type(str) == 'table' then
- return str -- troubles ; ipv , in texmf
- elseif str == '' then
- return { }
- else
- local t = { }
- for _,v in ipairs(string.splitchr(str:gsub("^\{(.+)\}$","%1"),",")) do
- t[#t+1] = (v:gsub("^[%!]*(.+)[%/\\]*$","%1"))
- end
- return t
- end
+function input.is_expansion(name)
+ return input.aux.is_entry(input.instance.expansions,name)
end
-function input.unexpanded_path_list(instance,str)
- local pth = input.variable(instance,str)
+function input.unexpanded_path_list(str)
+ local pth = input.variable(str)
local lst = input.split_path(pth)
- return input.aux.expanded_path(instance,lst)
+ return input.aux.expanded_path(lst)
end
-function input.unexpanded_path(instance,str)
- return file.join_path(input.unexpanded_path_list(instance,str))
+
+function input.unexpanded_path(str)
+ return file.join_path(input.unexpanded_path_list(str))
end
do
local done = { }
- function input.reset_extra_path(instance)
+ function input.reset_extra_path()
+ local instance = input.instance
local ep = instance.extra_paths
if not ep then
ep, done = { }, { }
@@ -3834,7 +4124,8 @@ do
end
end
- function input.register_extra_path(instance,paths,subpaths)
+ function input.register_extra_path(paths,subpaths)
+ local instance = input.instance
local ep = instance.extra_paths or { }
local n = #ep
if paths and paths ~= "" then
@@ -3879,7 +4170,8 @@ do
end
-function input.expanded_path_list(instance,str)
+function input.expanded_path_list(str)
+ local instance = input.instance
local function made_list(list)
local ep = instance.extra_paths
if not ep or #ep == 0 then
@@ -3920,39 +4212,41 @@ function input.expanded_path_list(instance,str)
-- engine+progname hash
str = str:gsub("%$","")
if not instance.lists[str] then -- cached
- local lst = made_list(input.split_path(input.expansion(instance,str)))
- instance.lists[str] = input.aux.expanded_path(instance,lst)
+ local lst = made_list(input.split_path(input.expansion(str)))
+ instance.lists[str] = input.aux.expanded_path(lst)
end
return instance.lists[str]
else
- local lst = input.split_path(input.expansion(instance,str))
- return made_list(input.aux.expanded_path(instance,lst))
+ local lst = input.split_path(input.expansion(str))
+ return made_list(input.aux.expanded_path(lst))
end
end
-function input.expand_path(instance,str)
- return file.join_path(input.expanded_path_list(instance,str))
+
+function input.clean_path_list(str)
+ local t = input.expanded_path_list(str)
+ if t then
+ for i=1,#t do
+ t[i] = file.collapse_path(input.clean_path(t[i]))
+ end
+ end
+ return t
end
---~ function input.first_writable_path(instance,name)
---~ for _,v in pairs(input.expanded_path_list(instance,name)) do
---~ if file.is_writable(file.join(v,'luatex-cache.tmp')) then
---~ return v
---~ end
---~ end
---~ return "."
---~ end
+function input.expand_path(str)
+ return file.join_path(input.expanded_path_list(str))
+end
-function input.expanded_path_list_from_var(instance,str) -- brrr
+function input.expanded_path_list_from_var(str) -- brrr
local tmp = input.var_of_format_or_suffix(str:gsub("%$",""))
if tmp ~= "" then
- return input.expanded_path_list(instance,str)
+ return input.expanded_path_list(str)
else
- return input.expanded_path_list(instance,tmp)
+ return input.expanded_path_list(tmp)
end
end
-function input.expand_path_from_var(instance,str)
- return file.join_path(input.expanded_path_list_from_var(instance,str))
+function input.expand_path_from_var(str)
+ return file.join_path(input.expanded_path_list_from_var(str))
end
function input.format_of_var(str)
@@ -3982,9 +4276,9 @@ function input.var_of_format_or_suffix(str)
return ''
end
-function input.expand_braces(instance,str) -- output variable and brace expansion of STRING
- local ori = input.variable(instance,str)
- local pth = input.aux.expanded_path(instance,input.split_path(ori))
+function input.expand_braces(str) -- output variable and brace expansion of STRING
+ local ori = input.variable(str)
+ local pth = input.aux.expanded_path(input.split_path(ori))
return file.join_path(pth)
end
@@ -3999,6 +4293,7 @@ end
-- {a,b,c/{p,q,r}/d/{x,y,z}//}
-- {a,b,c/{p,q/{x,y,z}},d/{p,q,r}}
-- {a,b,c/{p,q/{x,y,z},w}v,d/{p,q,r}}
+-- {$SELFAUTODIR,$SELFAUTOPARENT}{,{/share,}/texmf{-local,.local,}/web2c}
-- this one is better and faster, but it took me a while to realize
-- that this kind of replacement is cleaner than messy parsing and
@@ -4007,19 +4302,20 @@ 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
--- get rid of piecewise here, just a gmatch is ok
-
function input.aux.splitpathexpr(str, t, validate)
-- no need for optimization, only called a few times, we can use lpeg for the sub
t = t or { }
local concat = table.concat
+ str = str:gsub(",}",",@}")
+ str = str:gsub("{,","{@,")
+ -- str = "@" .. str .. "@"
while true do
local done = false
while true do
local ok = false
- str = str:gsub("([^{},]+){([^{}]-)}", function(a,b)
+ str = str:gsub("([^{},]+){([^{}]+)}", function(a,b)
local t = { }
- b:piecewise(",", function(s) t[#t+1] = a .. s end)
+ for s in b:gmatch("[^,]+") do t[#t+1] = a .. s end
ok, done = true, true
return "{" .. concat(t,",") .. "}"
end)
@@ -4027,9 +4323,9 @@ function input.aux.splitpathexpr(str, t, validate)
end
while true do
local ok = false
- str = str:gsub("{([^{}]-)}([^{},]+)", function(a,b)
+ str = str:gsub("{([^{}]+)}([^{},]+)", function(a,b)
local t = { }
- a:piecewise(",", function(s) t[#t+1] = s .. b end)
+ for s in a:gmatch("[^,]+") do t[#t+1] = s .. b end
ok, done = true, true
return "{" .. concat(t,",") .. "}"
end)
@@ -4037,50 +4333,41 @@ function input.aux.splitpathexpr(str, t, validate)
end
while true do
local ok = false
- str = str:gsub("([,{]){([^{}]+)}([,}])", function(a,b,c)
+ str = str:gsub("{([^{}]+)}{([^{}]+)}", function(a,b)
+ local t = { }
+ for sa in a:gmatch("[^,]+") do
+ for sb in b:gmatch("[^,]+") do
+ t[#t+1] = sa .. sb
+ end
+ end
ok, done = true, true
- return a .. b .. c
+ return "{" .. concat(t,",") .. "}"
end)
if not ok then break end
end
- if not done then break end
- end
- while true do
- local ok = false
- str = str:gsub("{([^{}]-)}{([^{}]-)}", function(a,b)
- local t = { }
- a:piecewise(",", function(sa)
- b:piecewise(",", function(sb)
- t[#t+1] = sa .. sb
- end)
- end)
- ok = true
- return "{" .. concat(t,",") .. "}"
- end)
- if not ok then break end
- end
- while true do
- local ok = false
- str = str:gsub("{([^{}]-)}", function(a)
- ok = true
- return a
+ str = str:gsub("({[^{}]*){([^{}]+)}([^{}]*})", function(a,b,c)
+ done = true
+ return a .. b.. c
end)
- if not ok then break end
+ if not done then break end
end
+ str = str:gsub("[{}]", "")
+ str = str:gsub("@","")
if validate then
- str:piecewise(",", function(s)
+ for s in str:gmatch("[^,]+") do
s = validate(s)
if s then t[#t+1] = s end
- end)
+ end
else
- str:piecewise(",", function(s)
+ for s in str:gmatch("[^,]+") do
t[#t+1] = s
- end)
+ end
end
return t
end
-function input.aux.expanded_path(instance,pathlist) -- maybe not a list, just a path
+function input.aux.expanded_path(pathlist) -- maybe not a list, just a path
+ local instance = input.instance
-- a previous version fed back into pathlist
local newlist, ok = { }, false
for _,v in ipairs(pathlist) do
@@ -4112,17 +4399,16 @@ input.is_readable = { }
function input.aux.is_readable(readable, name)
if input.trace > 2 then
if readable then
- input.logger("+ readable", name)
+ input.logger("+ readable: %s",name)
else
- input.logger("- readable", name)
+ input.logger("- readable: %s", name)
end
end
return readable
end
function input.is_readable.file(name)
- -- return input.aux.is_readable(file.is_readable(name), name)
- return input.aux.is_readable(input.aux.is_file(name), name)
+ return input.aux.is_readable(lfs.isfile(name), name)
end
input.is_readable.tex = input.is_readable.file
@@ -4130,12 +4416,13 @@ input.is_readable.tex = input.is_readable.file
-- name
-- name/name
-function input.aux.collect_files(instance,names)
+function input.aux.collect_files(names)
+ local instance = input.instance
local filelist = { }
for _, fname in pairs(names) do
if fname then
if input.trace > 2 then
- input.logger("? blobpath asked",fname)
+ input.logger("? blobpath asked: %s",fname)
end
local bname = file.basename(fname)
local dname = file.dirname(fname)
@@ -4149,7 +4436,7 @@ function input.aux.collect_files(instance,names)
local files = blobpath and instance.files[blobpath]
if files then
if input.trace > 2 then
- input.logger('? blobpath do',blobpath .. " (" .. bname ..")")
+ input.logger('? blobpath do: %s (%s)',blobpath,bname)
end
local blobfile = files[bname]
if not blobfile then
@@ -4182,7 +4469,7 @@ function input.aux.collect_files(instance,names)
end
end
elseif input.trace > 1 then
- input.logger('! blobpath no',blobpath .. " (" .. bname ..")" )
+ input.logger('! blobpath no: %s (%s)',blobpath,bname)
end
end
end
@@ -4237,15 +4524,17 @@ do
end
-function input.aux.register_in_trees(instance,name)
+function input.aux.register_in_trees(name)
if not name:find("^%.") then
+ local instance = input.instance
instance.foundintrees[name] = (instance.foundintrees[name] or 0) + 1 -- maybe only one
end
end
-- split the next one up, better for jit
-function input.aux.find_file(instance,filename) -- todo : plugin (scanners, checkers etc)
+function input.aux.find_file(filename) -- todo : plugin (scanners, checkers etc)
+ local instance = input.instance
local result = { }
local stamp = nil
filename = input.normalize_name(filename) -- elsewhere
@@ -4254,16 +4543,22 @@ function input.aux.find_file(instance,filename) -- todo : plugin (scanners, chec
if instance.remember then
stamp = filename .. "--" .. instance.engine .. "--" .. instance.progname .. "--" .. instance.format
if instance.found[stamp] then
- input.logger('! remembered', filename)
+ if input.trace > 0 then
+ input.logger('! remembered: %s',filename)
+ end
return instance.found[stamp]
end
end
if filename:find('%*') then
- input.logger('! wildcard', filename)
- result = input.find_wildcard_files(instance,filename)
+ if input.trace > 0 then
+ input.logger('! wildcard: %s', filename)
+ end
+ result = input.find_wildcard_files(filename)
elseif input.aux.qualified_path(filename) then
if input.is_readable.file(filename) then
- input.logger('! qualified', filename)
+ if input.trace > 0 then
+ input.logger('! qualified: %s', filename)
+ end
result = { filename }
else
local forcedname, ok = "", false
@@ -4271,22 +4566,26 @@ function input.aux.find_file(instance,filename) -- todo : plugin (scanners, chec
if instance.format == "" then
forcedname = filename .. ".tex"
if input.is_readable.file(forcedname) then
- input.logger('! no suffix, forcing standard filetype tex')
+ if input.trace > 0 then
+ input.logger('! no suffix, forcing standard filetype: tex')
+ end
result, ok = { forcedname }, true
end
else
for _, s in pairs(input.suffixes_of_format(instance.format)) do
forcedname = filename .. "." .. s
if input.is_readable.file(forcedname) then
- input.logger('! no suffix, forcing format filetype', s)
+ if input.trace > 0 then
+ input.logger('! no suffix, forcing format filetype: %s', s)
+ end
result, ok = { forcedname }, true
break
end
end
end
end
- if not ok then
- input.logger('? qualified', filename)
+ if not ok and input.trace > 0 then
+ input.logger('? qualified: %s', filename)
end
end
else
@@ -4304,10 +4603,14 @@ function input.aux.find_file(instance,filename) -- todo : plugin (scanners, chec
local forcedname = filename .. '.tex'
wantedfiles[#wantedfiles+1] = forcedname
filetype = input.format_of_suffix(forcedname)
- input.logger('! forcing filetype',filetype)
+ if input.trace > 0 then
+ input.logger('! forcing filetype: %s',filetype)
+ end
else
filetype = input.format_of_suffix(filename)
- input.logger('! using suffix based filetype',filetype)
+ if input.trace > 0 then
+ input.logger('! using suffix based filetype: %s',filetype)
+ end
end
else
if ext == "" then
@@ -4316,16 +4619,18 @@ function input.aux.find_file(instance,filename) -- todo : plugin (scanners, chec
end
end
filetype = instance.format
- input.logger('! using given filetype',filetype)
+ if input.trace > 0 then
+ input.logger('! using given filetype: %s',filetype)
+ end
end
local typespec = input.variable_of_format(filetype)
- local pathlist = input.expanded_path_list(instance,typespec)
+ local pathlist = input.expanded_path_list(typespec)
if not pathlist or #pathlist == 0 then
-- no pathlist, access check only / todo == wildcard
if input.trace > 2 then
- input.logger('? filename',filename)
- input.logger('? filetype',filetype or '?')
- input.logger('? wanted files',table.concat(wantedfiles," | "))
+ input.logger('? filename: %s',filename)
+ input.logger('? filetype: %s',filetype or '?')
+ input.logger('? wanted files: %s',table.concat(wantedfiles," | "))
end
for _, fname in pairs(wantedfiles) do
if fname and input.is_readable.file(fname) then
@@ -4335,7 +4640,7 @@ function input.aux.find_file(instance,filename) -- todo : plugin (scanners, chec
end
end
-- this is actually 'other text files' or 'any' or 'whatever'
- local filelist = input.aux.collect_files(instance,wantedfiles)
+ local filelist = input.aux.collect_files(wantedfiles)
local fl = filelist and filelist[1]
if fl then
filename = fl[3]
@@ -4344,12 +4649,12 @@ function input.aux.find_file(instance,filename) -- todo : plugin (scanners, chec
end
else
-- list search
- local filelist = input.aux.collect_files(instance,wantedfiles)
+ local filelist = input.aux.collect_files(wantedfiles)
local doscan, recurse
if input.trace > 2 then
- input.logger('? filename',filename)
- -- if pathlist then input.logger('? path list',table.concat(pathlist," | ")) end
- -- if filelist then input.logger('? file list',table.concat(filelist," | ")) end
+ input.logger('? filename: %s',filename)
+ -- if pathlist then input.logger('? path list: %s',table.concat(pathlist," | ")) end
+ -- if filelist then input.logger('? file list: %s',table.concat(filelist," | ")) end
end
-- a bit messy ... esp the doscan setting here
for _, path in pairs(pathlist) do
@@ -4370,11 +4675,11 @@ function input.aux.find_file(instance,filename) -- todo : plugin (scanners, chec
if f:find(expr) then
-- input.debug('T',' '..f)
if input.trace > 2 then
- input.logger('= found in hash',f)
+ input.logger('= found in hash: %s',f)
end
--- todo, test for readable
result[#result+1] = fl[3]
- input.aux.register_in_trees(instance,f) -- for tracing used files
+ input.aux.register_in_trees(f) -- for tracing used files
done = true
if not instance.allresults then break end
else
@@ -4388,12 +4693,12 @@ function input.aux.find_file(instance,filename) -- todo : plugin (scanners, chec
local pname = pathname:gsub("%.%*$",'')
if not pname:find("%*") then
local ppname = pname:gsub("/+$","")
- if input.aux.can_be_dir(instance,ppname) then
+ if input.aux.can_be_dir(ppname) then
for _, w in pairs(wantedfiles) do
local fname = file.join(ppname,w)
if input.is_readable.file(fname) then
if input.trace > 2 then
- input.logger('= found by scanning',fname)
+ input.logger('= found by scanning: %s',fname)
end
result[#result+1] = fname
done = true
@@ -4422,40 +4727,29 @@ function input.aux.find_file(instance,filename) -- todo : plugin (scanners, chec
return result
end
-input.aux._find_file_ = input.aux.find_file
+input.aux._find_file_ = input.aux.find_file -- frozen variant
-function input.aux.find_file(instance,filename) -- maybe make a lowres cache too
- local result = input.aux._find_file_(instance,filename)
+function input.aux.find_file(filename) -- maybe make a lowres cache too
+ local result = input.aux._find_file_(filename)
if #result == 0 then
local lowered = filename:lower()
if filename ~= lowered then
- return input.aux._find_file_(instance,lowered)
+ return input.aux._find_file_(lowered)
end
end
return result
end
-if lfs and lfs.isfile then
- input.aux.is_file = lfs.isfile -- to be done: use this
-else
- input.aux.is_file = file.is_readable
-end
-
-if lfs and lfs.isdir then
- function input.aux.can_be_dir(instance,name)
- if not instance.fakepaths[name] then
- if lfs.isdir(name) then
- instance.fakepaths[name] = 1 -- directory
- else
- instance.fakepaths[name] = 2 -- no directory
- end
+function input.aux.can_be_dir(name)
+ local instance = input.instance
+ if not instance.fakepaths[name] then
+ if lfs.isdir(name) then
+ instance.fakepaths[name] = 1 -- directory
+ else
+ instance.fakepaths[name] = 2 -- no directory
end
- return (instance.fakepaths[name] == 1)
- end
-else
- function input.aux.can_be_dir()
- return true
end
+ return (instance.fakepaths[name] == 1)
end
if not input.concatinators then input.concatinators = { } end
@@ -4463,7 +4757,8 @@ if not input.concatinators then input.concatinators = { } end
input.concatinators.tex = file.join
input.concatinators.file = input.concatinators.tex
-function input.find_files(instance,filename,filetype,mustexist)
+function input.find_files(filename,filetype,mustexist)
+ local instance = input.instance
if type(mustexist) == boolean then
-- all set
elseif type(filetype) == 'boolean' then
@@ -4472,16 +4767,17 @@ function input.find_files(instance,filename,filetype,mustexist)
filetype, mustexist = nil, false
end
instance.format = filetype or ''
- local t = input.aux.find_file(instance,filename,true)
+ local t = input.aux.find_file(filename,true)
instance.format = ''
return t
end
-function input.find_file(instance,filename,filetype,mustexist)
- return (input.find_files(instance,filename,filetype,mustexist)[1] or "")
+function input.find_file(filename,filetype,mustexist)
+ return (input.find_files(filename,filetype,mustexist)[1] or "")
end
-function input.find_given_files(instance,filename)
+function input.find_given_files(filename)
+ local instance = input.instance
local bname, result = file.basename(filename), { }
for k, hash in ipairs(instance.hashes) do
local files = instance.files[hash.tag]
@@ -4509,11 +4805,12 @@ function input.find_given_files(instance,filename)
return result
end
-function input.find_given_file(instance,filename)
- return (input.find_given_files(instance,filename)[1] or "")
+function input.find_given_file(filename)
+ return (input.find_given_files(filename)[1] or "")
end
-function input.find_wildcard_files(instance,filename) -- todo: remap:
+function input.find_wildcard_files(filename) -- todo: remap:
+ local instance = input.instance
local result = { }
local bname, dname = file.basename(filename), file.dirname(filename)
local path = dname:gsub("^*/","")
@@ -4569,13 +4866,14 @@ function input.find_wildcard_files(instance,filename) -- todo: remap:
return result
end
-function input.find_wildcard_file(instance,filename)
- return (input.find_wildcard_files(instance,filename)[1] or "")
+function input.find_wildcard_file(filename)
+ return (input.find_wildcard_files(filename)[1] or "")
end
-- main user functions
-function input.save_used_files_in_trees(instance, filename,jobname)
+function input.save_used_files_in_trees(filename,jobname)
+ local instance = input.instance
if not filename then filename = 'luatex.jlg' end
local f = io.open(filename,'w')
if f then
@@ -4594,24 +4892,24 @@ function input.save_used_files_in_trees(instance, filename,jobname)
end
end
-function input.automount(instance)
+function input.automount()
-- implemented later
end
-function input.load(instance)
- input.starttiming(instance)
- input.resetconfig(instance)
- input.identify_cnf(instance)
- input.load_lua(instance)
- input.expand_variables(instance)
- input.load_cnf(instance)
- input.expand_variables(instance)
- input.load_hash(instance)
- input.automount(instance)
- input.stoptiming(instance)
+function input.load()
+ input.starttiming(input.instance)
+ input.resetconfig()
+ input.identify_cnf()
+ input.load_lua()
+ input.expand_variables()
+ input.load_cnf()
+ input.expand_variables()
+ input.load_hash()
+ input.automount()
+ input.stoptiming(input.instance)
end
-function input.for_files(instance, command, files, filetype, mustexist)
+function input.for_files(command, files, filetype, mustexist)
if files and #files > 0 then
local function report(str)
if input.verbose then
@@ -4624,7 +4922,7 @@ function input.for_files(instance, command, files, filetype, mustexist)
report('')
end
for _, file in pairs(files) do
- local result = command(instance,file,filetype,mustexist)
+ local result = command(file,filetype,mustexist)
if type(result) == 'string' then
report(result)
else
@@ -4638,14 +4936,11 @@ end
-- strtab
-function input.var_value(instance,str) -- output the value of variable $STRING.
- return input.variable(instance,str)
-end
-function input.expand_var(instance,str) -- output variable expansion of STRING.
- return input.expansion(instance,str)
-end
-function input.show_path(instance,str) -- output search path for file type NAME
- return file.join_path(input.expanded_path_list(instance,input.format_of_var(str)))
+input.var_value = input.variable -- output the value of variable $STRING.
+input.expand_var = input.expansion -- output variable expansion of STRING.
+
+function input.show_path(str) -- output search path for file type NAME
+ return file.join_path(input.expanded_path_list(input.format_of_var(str)))
end
-- input.find_file(filename)
@@ -4697,53 +4992,55 @@ function table.sequenced(t,sep) -- temp here
return table.concat(s, sep or " | ")
end
-function input.methodhandler(what, instance, filename, filetype) -- ...
+function input.methodhandler(what, filename, filetype) -- ...
local specification = (type(filename) == "string" and input.splitmethod(filename)) or filename -- no or { }, let it bomb
local scheme = specification.scheme
if input[what][scheme] then
- input.logger('= handler',specification.original .." -> " .. what .. " -> " .. table.sequenced(specification))
- return input[what][scheme](instance,filename,filetype) -- todo: specification
+ if input.trace > 0 then
+ input.logger('= handler: %s -> %s -> %s',specification.original,what,table.sequenced(specification))
+ end
+ return input[what][scheme](filename,filetype) -- todo: specification
else
- return input[what].tex(instance,filename,filetype) -- todo: specification
+ return input[what].tex(filename,filetype) -- todo: specification
end
end
-- also inside next test?
-function input.findtexfile(instance, filename, filetype)
- return input.methodhandler('finders',instance, input.normalize_name(filename), filetype)
+function input.findtexfile(filename, filetype)
+ return input.methodhandler('finders',input.normalize_name(filename), filetype)
end
-function input.opentexfile(instance,filename)
- return input.methodhandler('openers',instance, input.normalize_name(filename))
+function input.opentexfile(filename)
+ return input.methodhandler('openers',input.normalize_name(filename))
end
-function input.findbinfile(instance, filename, filetype)
- return input.methodhandler('finders',instance, input.normalize_name(filename), filetype)
+function input.findbinfile(filename, filetype)
+ return input.methodhandler('finders',input.normalize_name(filename), filetype)
end
-function input.openbinfile(instance,filename)
- return input.methodhandler('loaders',instance, input.normalize_name(filename))
+function input.openbinfile(filename)
+ return input.methodhandler('loaders',input.normalize_name(filename))
end
-function input.loadbinfile(instance, filename, filetype)
- local fname = input.findbinfile(instance, input.normalize_name(filename), filetype)
+function input.loadbinfile(filename, filetype)
+ local fname = input.findbinfile(input.normalize_name(filename), filetype)
if fname and fname ~= "" then
- return input.openbinfile(instance,fname)
+ return input.openbinfile(fname)
else
return unpack(input.loaders.notfound)
end
end
-function input.texdatablob(instance, filename, filetype)
- local ok, data, size = input.loadbinfile(instance, filename, filetype)
+function input.texdatablob(filename, filetype)
+ local ok, data, size = input.loadbinfile(filename, filetype)
return data or ""
end
input.loadtexfile = input.texdatablob
-function input.openfile(filename) -- brrr texmf.instance here / todo ! ! ! ! !
- local fullname = input.findtexfile(texmf.instance, filename)
+function input.openfile(filename)
+ local fullname = input.findtexfile(filename)
if fullname and (fullname ~= "") then
- return input.opentexfile(texmf.instance, fullname)
+ return input.opentexfile(fullname)
else
return nil
end
@@ -4789,16 +5086,18 @@ end
-- beware: i need to check where we still need a / on windows:
function input.clean_path(str)
---~ return (((str:gsub("\\","/")):gsub("^!+","")):gsub("//+","//"))
if str then
- return ((str:gsub("\\","/")):gsub("^!+",""))
+ str = str:gsub("\\","/")
+ str = str:gsub("^!+","")
+ str = str:gsub("^~",input.homedir)
+ return str
else
return nil
end
end
function input.do_with_path(name,func)
- for _, v in pairs(input.expanded_path_list(instance,name)) do
+ for _, v in pairs(input.expanded_path_list(name)) do
func("^"..input.clean_path(v))
end
end
@@ -4807,7 +5106,8 @@ function input.do_with_var(name,func)
func(input.aux.expanded_var(name))
end
-function input.with_files(instance,pattern,handle)
+function input.with_files(pattern,handle)
+ local instance = input.instance
for _, hash in ipairs(instance.hashes) do
local blobpath = hash.tag
local blobtype = hash.type
@@ -4834,37 +5134,22 @@ function input.with_files(instance,pattern,handle)
end
end
---~ function input.update_script(oldname,newname) -- oldname -> own.name, not per se a suffix
---~ newname = file.addsuffix(newname,"lua")
---~ local newscript = input.clean_path(input.find_file(instance, newname))
---~ local oldscript = input.clean_path(oldname)
---~ input.report("old script", oldscript)
---~ input.report("new script", newscript)
---~ if oldscript ~= newscript and (oldscript:find(file.removesuffix(newname).."$") or oldscript:find(newname.."$")) then
---~ local newdata = io.loaddata(newscript)
---~ if newdata then
---~ input.report("old script content replaced by new content")
---~ io.savedata(oldscript,newdata)
---~ end
---~ end
---~ end
-
-function input.update_script(instance,oldname,newname) -- oldname -> own.name, not per se a suffix
+function input.update_script(oldname,newname) -- oldname -> own.name, not per se a suffix
local scriptpath = "scripts/context/lua"
newname = file.addsuffix(newname,"lua")
local oldscript = input.clean_path(oldname)
- input.report("to be replaced old script", oldscript)
- local newscripts = input.find_files(instance, newname) or { }
+ input.report("to be replaced old script %s", oldscript)
+ local newscripts = input.find_files(newname) or { }
if #newscripts == 0 then
input.report("unable to locate new script")
else
for _, newscript in ipairs(newscripts) do
newscript = input.clean_path(newscript)
- input.report("checking new script", newscript)
+ input.report("checking new script %s", newscript)
if oldscript == newscript then
input.report("old and new script are the same")
elseif not newscript:find(scriptpath) then
- input.report("new script should come from",scriptpath)
+ input.report("new script should come from %s",scriptpath)
elseif not (oldscript:find(file.removesuffix(newname).."$") or oldscript:find(newname.."$")) then
input.report("invalid new script name")
else
@@ -4892,10 +5177,10 @@ do
local resolvers = { }
- resolvers.environment = function(instance,str)
+ resolvers.environment = function(str)
return input.clean_path(os.getenv(str) or os.getenv(str:upper()) or os.getenv(str:lower()) or "")
end
- resolvers.relative = function(instance,str,n)
+ resolvers.relative = function(str,n)
if io.exists(str) then
-- nothing
elseif io.exists("./" .. str) then
@@ -4913,16 +5198,16 @@ do
end
return input.clean_path(str)
end
- resolvers.locate = function(instance,str)
- local fullname = input.find_given_file(instance,str) or ""
+ resolvers.locate = function(str)
+ local fullname = input.find_given_file(str) or ""
return input.clean_path((fullname ~= "" and fullname) or str)
end
- resolvers.filename = function(instance,str)
- local fullname = input.find_given_file(instance,str) or ""
+ resolvers.filename = function(str)
+ local fullname = input.find_given_file(str) or ""
return input.clean_path(file.basename((fullname ~= "" and fullname) or str))
end
- resolvers.pathname = function(instance,str)
- local fullname = input.find_given_file(instance,str) or ""
+ resolvers.pathname = function(str)
+ local fullname = input.find_given_file(str) or ""
return input.clean_path(file.dirname((fullname ~= "" and fullname) or str))
end
@@ -4934,15 +5219,15 @@ do
resolvers.file = resolvers.filename
resolvers.path = resolvers.pathname
- local function resolve(instance,str)
+ local function resolve(str)
if type(str) == "table" then
for k, v in pairs(str) do
- str[k] = resolve(instance,v) or v
+ str[k] = resolve(v) or v
end
elseif str and str ~= "" then
- str = str:gsub("([a-z]+):([^ ]+)", function(method,target)
+ str = str:gsub("([a-z]+):([^ ]*)", function(method,target)
if resolvers[method] then
- return resolvers[method](instance,target)
+ return resolvers[method](target)
else
return method .. ":" .. target
end
@@ -4951,10 +5236,173 @@ do
return str
end
+ if os.uname then
+ for k, v in pairs(os.uname()) do
+ if not resolvers[k] then
+ resolvers[k] = function() return v end
+ end
+ end
+ end
+
input.resolve = resolve
end
+function input.boolean_variable(str,default)
+ local b = input.expansion("PURGECACHE")
+ if b == "" then
+ return default
+ else
+ b = toboolean(b)
+ return (b == nil and default) or b
+ end
+end
+
+
+if not modules then modules = { } end modules ['luat-log'] = {
+ version = 1.001,
+ comment = "companion to luat-lib.tex",
+ author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
+ copyright = "PRAGMA ADE / ConTeXt Development Team",
+ license = "see context related readme files"
+}
+
+--[[ldx--
+This is a prelude to a more extensive logging module. For the sake
+of parsing log files, in addition to the standard logging we will
+provide an structured file. Actually, any logging that
+is hooked into callbacks will be \XML\ by default.
+--ldx]]--
+
+-- input.logger -> special tracing, driven by log level (only input)
+-- input.report -> goes to terminal, depends on verbose, has banner
+-- logs.report -> module specific tracing and reporting, no banner but class
+
+
+input = input or { }
+logs = logs or { }
+
+--[[ldx--
+This looks pretty ugly but we need to speed things up a bit.
+--ldx]]--
+
+logs.levels = {
+ ['error'] = 1,
+ ['warning'] = 2,
+ ['info'] = 3,
+ ['debug'] = 4
+}
+
+logs.functions = {
+ 'report', 'start', 'stop', 'push', 'pop', 'line', 'direct'
+}
+
+logs.callbacks = {
+ 'start_page_number',
+ 'stop_page_number',
+ 'report_output_pages',
+ 'report_output_log'
+}
+
+logs.tracers = {
+}
+
+logs.xml = logs.xml or { }
+logs.tex = logs.tex or { }
+
+logs.level = 0
+
+local write_nl, write, format = texio.write_nl or print, texio.write or io.write, string.format
+
+if texlua then
+ write_nl = print
+ write = io.write
+end
+
+function logs.xml.report(category,fmt,...) -- new
+ write_nl(format("%s",category,format(fmt,...)))
+end
+function logs.xml.line(fmt,...) -- new
+ write_nl(format("%s",format(fmt,...)))
+end
+
+function logs.xml.start() if logs.level > 0 then tw("<%s>" ) end end
+function logs.xml.stop () if logs.level > 0 then tw("%s>") end end
+function logs.xml.push () if logs.level > 0 then tw("" ) end end
+
+function logs.tex.report(category,fmt,...) -- new
+ -- write_nl(format("%s | %s",category,format(fmt,...))) -- arg to format can be tex comment so .. .
+ write_nl(category .. " | " .. format(fmt,...))
+end
+function logs.tex.line(fmt,...) -- new
+ write_nl(format(fmt,...))
+end
+
+function logs.set_level(level)
+ logs.level = logs.levels[level] or level
+end
+
+function logs.set_method(method)
+ for _, v in pairs(logs.functions) do
+ logs[v] = logs[method][v] or function() end
+ end
+ if callback and input[method] then
+ for _, cb in pairs(logs.callbacks) do
+ callback.register(cb, input[method][cb])
+ end
+ end
+end
+
+function logs.xml.start_page_number()
+ write_nl(format("")
+ write_nl("")
+end
+
+function logs.xml.report_output_pages(p,b)
+ write_nl(format("", p))
+ write_nl(format("", b))
+ write_nl("")
+end
+
+function logs.xml.report_output_log()
+end
+
+function input.logger(...) -- assumes test for input.trace > n
+ if input.trace > 0 then
+ logs.report(...)
+ end
+end
+
+function input.report(fmt,...)
+ if input.verbose then
+ logs.report(input.banner or "report",format(fmt,...))
+ end
+end
+
+function input.reportlines(str) -- todo:
+ for line in str:gmatch("(.-)[\n\r]") do
+ logs.report(input.banner or "report",line)
+ end
+end
+
+function input.help(banner,message)
+ if not input.verbose then
+ input.verbose = true
+ -- input.report(banner,"\n")
+ end
+ input.report(banner,"\n")
+ input.report("")
+ input.reportlines(message)
+end
+
+logs.set_level('error')
+logs.set_method('tex')
+
if not modules then modules = { } end modules ['luat-tmp'] = {
version = 1.001,
@@ -4980,63 +5428,82 @@ being written at the same time is small. We also need to extend
luatools with a recache feature.
--ldx]]--
+local format = string.format
+
caches = caches or { }
dir = dir or { }
texmf = texmf or { }
-caches.path = caches.path or nil
-caches.base = caches.base or "luatex-cache"
-caches.more = caches.more or "context"
-caches.direct = false -- true is faster but may need huge amounts of memory
-caches.trace = false
-caches.tree = false
-caches.paths = caches.paths or nil
-caches.force = false
-
-input.usecache = not toboolean(os.getenv("TEXMFSHARECACHE") or "false",true) -- true
-
-function caches.temp(instance)
- local function checkpath(cachepath)
- if not cachepath or cachepath == "" then
- return nil
- elseif lfs.attributes(cachepath,"mode") == "directory" then -- lfs.isdir(cachepath) then
- return cachepath
- elseif caches.force or io.ask(string.format("Should I create the cache path %s?",cachepath), "no", { "yes", "no" }) == "yes" then
- dir.mkdirs(cachepath)
- return (lfs.attributes(cachepath,"mode") == "directory") and cachepath
- else
- return nil
+caches.path = caches.path or nil
+caches.base = caches.base or "luatex-cache"
+caches.more = caches.more or "context"
+caches.direct = false -- true is faster but may need huge amounts of memory
+caches.trace = false
+caches.tree = false
+caches.paths = caches.paths or nil
+caches.force = false
+caches.defaults = { "TEXMFCACHE", "TMPDIR", "TEMPDIR", "TMP", "TEMP", "HOME", "HOMEPATH" }
+
+function caches.temp()
+ local cachepath = nil
+ local function check(list,isenv)
+ if not cachepath then
+ for _, v in ipairs(list) do
+ cachepath = (isenv and (os.env[v] or "")) or v or ""
+ if cachepath == "" then
+ -- next
+ else
+ cachepath = input.clean_path(cachepath)
+ if lfs.isdir(cachepath) and file.iswritable(cachepath) then -- lfs.attributes(cachepath,"mode") == "directory"
+ break
+ elseif caches.force or io.ask(format("\nShould I create the cache path %s?",cachepath), "no", { "yes", "no" }) == "yes" then
+ dir.mkdirs(cachepath)
+ if lfs.isdir(cachepath) and file.iswritable(cachepath) then
+ break
+ end
+ end
+ end
+ cachepath = nil
+ end
end
end
- local cachepath = input.expanded_path_list(instance,"TEXMFCACHE")
- cachepath = cachepath and #cachepath > 0 and checkpath(cachepath[1])
+ check(input.clean_path_list("TEXMFCACHE") or { })
+ check(caches.defaults,true)
if not cachepath then
- cachepath = os.getenv("TEXMFCACHE") or os.getenv("HOME") or os.getenv("HOMEPATH") or os.getenv("TMP") or os.getenv("TEMP") or os.getenv("TMPDIR") or nil
- cachepath = checkpath(cachepath)
- end
- if not cachepath then
- print("\nfatal error: there is no valid cache path defined\n")
+ print("\nfatal error: there is no valid (writable) cache path defined\n")
os.exit()
- elseif lfs.attributes(cachepath,"mode") ~= "directory" then
- print(string.format("\nfatal error: cache path %s is not a directory\n",cachepath))
+ elseif not lfs.isdir(cachepath) then -- lfs.attributes(cachepath,"mode") ~= "directory"
+ print(format("\nfatal error: cache path %s is not a directory\n",cachepath))
os.exit()
end
- function caches.temp(instance)
+ cachepath = input.normalize_name(cachepath)
+ function caches.temp()
return cachepath
end
return cachepath
end
-function caches.configpath(instance)
- return table.concat(instance.cnffiles,";")
+function caches.configpath()
+ return table.concat(input.instance.cnffiles,";")
end
function caches.hashed(tree)
return md5.hex((tree:lower()):gsub("[\\\/]+","/"))
end
-function caches.treehash(instance)
- local tree = caches.configpath(instance)
+--~ tracing:
+
+--~ function caches.hashed(tree)
+--~ tree = (tree:lower()):gsub("[\\\/]+","/")
+--~ local hash = md5.hex(tree)
+--~ if input.verbose then -- temp message
+--~ input.report("hashing %s => %s",tree,hash)
+--~ end
+--~ return hash
+--~ end
+
+function caches.treehash()
+ local tree = caches.configpath()
if not tree or tree == "" then
return false
else
@@ -5044,14 +5511,14 @@ function caches.treehash(instance)
end
end
-function caches.setpath(instance,...)
+function caches.setpath(...)
if not caches.path then
if not caches.path then
- caches.path = caches.temp(instance)
+ caches.path = caches.temp()
end
caches.path = input.clean_path(caches.path) -- to be sure
if lfs then
- caches.tree = caches.tree or caches.treehash(instance)
+ caches.tree = caches.tree or caches.treehash()
if caches.tree then
caches.path = dir.mkdirs(caches.path,caches.base,caches.more,caches.tree)
else
@@ -5071,9 +5538,9 @@ function caches.setpath(instance,...)
return caches.path
end
-function caches.definepath(instance,category,subcategory)
+function caches.definepath(category,subcategory)
return function()
- return caches.setpath(instance,category,subcategory)
+ return caches.setpath(category,subcategory)
end
end
@@ -5096,26 +5563,38 @@ function caches.is_writable(filepath,filename)
return file.is_writable(tmaname)
end
-function caches.savedata(filepath,filename,data,raw) -- raw needed for file cache
+function input.boolean_variable(str,default)
+ local b = input.expansion("PURGECACHE")
+ if b == "" then
+ return default
+ else
+ b = toboolean(b)
+ return (b == nil and default) or b
+ end
+end
+
+function caches.savedata(filepath,filename,data,raw)
local tmaname, tmcname = caches.setluanames(filepath,filename)
local reduce, simplify = true, true
if raw then
reduce, simplify = false, false
end
if caches.direct then
- file.savedata(tmaname, table.serialize(data,'return',true,true))
+ file.savedata(tmaname, table.serialize(data,'return',true,true,false)) -- no hex
else
- table.tofile (tmaname, data,'return',true,true) -- maybe not the last true
+ table.tofile(tmaname, data,'return',true,true,false) -- maybe not the last true
end
- utils.lua.compile(tmaname, tmcname)
+ local cleanup = input.boolean_variable("PURGECACHE", false)
+ local strip = input.boolean_variable("LUACSTRIP", true)
+ utils.lua.compile(tmaname, tmcname, cleanup, strip)
end
-- here we use the cache for format loading (texconfig.[formatname|jobname])
--~ if tex and texconfig and texconfig.formatname and texconfig.formatname == "" then
-if tex and texconfig and (not texconfig.formatname or texconfig.formatname == "") and texmf.instance then
+if tex and texconfig and (not texconfig.formatname or texconfig.formatname == "") and input and input.instance then
if not texconfig.luaname then texconfig.luaname = "cont-en.lua" end -- or luc
- texconfig.formatname = caches.setpath(texmf.instance,"formats") .. "/" .. texconfig.luaname:gsub("%.lu.$",".fmt")
+ texconfig.formatname = caches.setpath("formats") .. "/" .. texconfig.luaname:gsub("%.lu.$",".fmt")
end
--[[ldx--
@@ -5138,7 +5617,7 @@ do -- local report
local function report(container,tag,name)
if caches.trace or containers.trace or container.trace then
- logs.report(string.format("%s cache",container.subcategory),string.format("%s: %s",tag,name or 'invalid'))
+ logs.report(format("%s cache",container.subcategory),"%s: %s",tag,name or 'invalid')
end
end
@@ -5163,7 +5642,7 @@ do -- local report
enabled = enabled,
version = version or 1.000,
trace = false,
- path = caches.setpath(texmf.instance,category,subcategory),
+ path = caches.setpath(category,subcategory),
}
c[subcategory] = s
end
@@ -5228,13 +5707,16 @@ end
-- reimplement the saver.
local save_data = input.aux.save_data
+local load_data = input.aux.load_data
-input.cachepath = nil
+input.cachepath = nil -- public, for tracing
+input.usecache = true -- public, for tracing
-function input.aux.save_data(instance, dataname, check)
- input.cachepath = input.cachepath or caches.definepath(instance,"trees")
- save_data(instance, dataname, check, function(cachename,dataname)
+function input.aux.save_data(dataname, check)
+ save_data(dataname, check, function(cachename,dataname)
+ input.usecache = not toboolean(input.expansion("CACHEINTDS") or "false",true)
if input.usecache then
+ input.cachepath = input.cachepath or caches.definepath("trees")
return file.join(input.cachepath(),caches.hashed(cachename))
else
return file.join(cachename,dataname)
@@ -5242,12 +5724,11 @@ function input.aux.save_data(instance, dataname, check)
end)
end
-local load_data = input.aux.load_data
-
-function input.aux.load_data(instance,pathname,dataname,filename)
- input.cachepath = input.cachepath or caches.definepath(instance,"trees")
- load_data(instance,pathname,dataname,filename,function(dataname,filename)
+function input.aux.load_data(pathname,dataname,filename)
+ load_data(pathname,dataname,filename,function(dataname,filename)
+ input.usecache = not toboolean(input.expansion("CACHEINTDS") or "false",true)
if input.usecache then
+ input.cachepath = input.cachepath or caches.definepath("trees")
return file.join(input.cachepath(),caches.hashed(pathname))
else
if not filename or (filename == "") then
@@ -5262,13 +5743,13 @@ end
input.automounted = input.automounted or { }
-function input.automount(instance,usecache)
- local mountpaths = input.simplified_list(input.expansion(instance,'TEXMFMOUNT'))
+function input.automount(usecache)
+ local mountpaths = input.clean_path_list(input.expansion('TEXMFMOUNT'))
if table.is_empty(mountpaths) and usecache then
- mountpaths = { caches.setpath(instance,"mount") }
+ mountpaths = { caches.setpath("mount") }
end
if not table.is_empty(mountpaths) then
- input.starttiming(instance)
+ input.starttiming(input.instance)
for k, root in pairs(mountpaths) do
local f = io.open(root.."/url.tmi")
if f then
@@ -5277,16 +5758,16 @@ function input.automount(instance,usecache)
if line:find("^[%%#%-]") then -- or %W
-- skip
elseif line:find("^zip://") then
- input.report("mounting",line)
+ input.report("mounting %s",line)
table.insert(input.automounted,line)
- input.usezipfile(instance,line)
+ input.usezipfile(line)
end
end
end
f:close()
end
end
- input.stoptiming(instance)
+ input.stoptiming(input.instance)
end
end
@@ -5335,17 +5816,17 @@ function input.storage.dump()
else
name = str
end
- initialize = string.format("%s %s = %s or {} ", initialize, name, name)
+ initialize = format("%s %s = %s or {} ", initialize, name, name)
end
if evaluate then
finalize = "input.storage.evaluate(" .. name .. ")"
end
input.storage.max = input.storage.max + 1
if input.storage.trace then
- logs.report('storage',string.format('saving %s in slot %s',message,input.storage.max))
+ logs.report('storage','saving %s in slot %s',message,input.storage.max)
code =
initialize ..
- string.format("logs.report('storage','restoring %s from slot %s') ",message,input.storage.max) ..
+ format("logs.report('storage','restoring %s from slot %s') ",message,input.storage.max) ..
table.serialize(original,name) ..
finalize
else
@@ -5374,6 +5855,8 @@ end
if not versions then versions = { } end versions['luat-zip'] = 1.001
+local format = string.format
+
if zip and input then
zip.supported = true
else
@@ -5405,7 +5888,7 @@ else
zip.archives = { }
zip.registeredfiles = { }
- function zip.openarchive(instance,name)
+ function zip.openarchive(name)
if not name or name == "" then
return nil
else
@@ -5413,7 +5896,7 @@ else
if arch then
return arch
else
- local full = input.find_file(instance,name) or ""
+ local full = input.find_file(name) or ""
local arch = (full ~= "" and zip.open(full)) or false
zip.archives[name] = arch
return arch
@@ -5421,7 +5904,7 @@ else
end
end
- function zip.closearchive(instance,name)
+ function zip.closearchive(name)
if not name or name == "" and zip.archives[name] then
zip.close(zip.archives[name])
zip.archives[name] = nil
@@ -5432,20 +5915,22 @@ else
-- zip:///texmf.zip?tree=/tex/texmf-local
-- zip:///texmf-mine.zip?tree=/tex/texmf-projects
- function input.locators.zip(instance,specification) -- where is this used? startup zips (untested)
+ function input.locators.zip(specification) -- where is this used? startup zips (untested)
specification = input.splitmethod(specification)
local zipfile = specification.path
- local zfile = zip.openarchive(instance,name) -- tricky, could be in to be initialized tree
- if zfile then
- input.logger('! zip locator', specification.original ..' found')
- else
- input.logger('? zip locator', specification.original ..' not found')
+ local zfile = zip.openarchive(name) -- tricky, could be in to be initialized tree
+ if input.trace > 0 then
+ if zfile then
+ input.logger('! zip locator, found: %s',specification.original)
+ else
+ input.logger('? zip locator, not found: %s',specification.original)
+ end
end
end
- function input.hashers.zip(instance,tag,name)
- input.report("loading zip file",name,"as",tag)
- input.usezipfile(instance,tag .."?tree=" .. name)
+ function input.hashers.zip(tag,name)
+ input.report("loading zip file %s as %s",name,tag)
+ input.usezipfile(tag .."?tree=" .. name)
end
function input.concatinators.zip(tag,path,name)
@@ -5460,101 +5945,124 @@ else
return true
end
- function input.finders.zip(instance,specification,filetype)
+ function input.finders.zip(specification,filetype)
specification = input.splitmethod(specification)
if specification.path then
local q = url.query(specification.query)
if q.name then
- local zfile = zip.openarchive(instance,specification.path)
+ local zfile = zip.openarchive(specification.path)
if zfile then
- input.logger('! zip finder',specification.path)
+ if input.trace > 0 then
+ input.logger('! zip finder, path: %s',specification.path)
+ end
local dfile = zfile:open(q.name)
if dfile then
dfile = zfile:close()
- input.logger('+ zip finder',q.name)
+ if input.trace > 0 then
+ input.logger('+ zip finder, name: %s',q.name)
+ end
return specification.original
end
- else
- input.logger('? zip finder',specification.path)
+ elseif input.trace > 0 then
+ input.logger('? zip finder, path %s',specification.path)
end
end
end
- input.logger('- zip finder',filename)
+ if input.trace > 0 then
+ input.logger('- zip finder, name: %s',filename)
+ end
return unpack(input.finders.notfound)
end
- function input.openers.zip(instance,specification)
+ function input.openers.zip(specification)
local zipspecification = input.splitmethod(specification)
if zipspecification.path then
local q = url.query(zipspecification.query)
if q.name then
- local zfile = zip.openarchive(instance,zipspecification.path)
+ local zfile = zip.openarchive(zipspecification.path)
if zfile then
- input.logger('+ zip starter',zipspecification.path)
+ if input.trace > 0 then
+ input.logger('+ zip starter, path: %s',zipspecification.path)
+ end
local dfile = zfile:open(q.name)
if dfile then
input.show_open(specification)
return input.openers.text_opener(specification,dfile,'zip')
end
- else
- input.logger('- zip starter',zipspecification.path)
+ elseif input.trace > 0 then
+ input.logger('- zip starter, path %s',zipspecification.path)
end
end
end
- input.logger('- zip opener',filename)
+ if input.trace > 0 then
+ input.logger('- zip opener, name: %s',filename)
+ end
return unpack(input.openers.notfound)
end
- function input.loaders.zip(instance,specification)
+ function input.loaders.zip(specification)
specification = input.splitmethod(specification)
if specification.path then
local q = url.query(specification.query)
if q.name then
- local zfile = zip.openarchive(instance,specification.path)
+ local zfile = zip.openarchive(specification.path)
if zfile then
- input.logger('+ zip starter',specification.path)
+ if input.trace > 0 then
+ input.logger('+ zip starter, path: %s',specification.path)
+ end
local dfile = zfile:open(q.name)
if dfile then
input.show_load(filename)
- input.logger('+ zip loader',filename)
+ if input.trace > 0 then
+ input.logger('+ zip loader, name: %s',filename)
+ end
local s = dfile:read("*all")
dfile:close()
return true, s, #s
end
- else
- input.logger('- zip starter',specification.path)
+ elseif input.trace > 0 then
+ input.logger('- zip starter, path: %s',specification.path)
end
end
end
- input.logger('- zip loader',filename)
+ if input.trace > 0 then
+ input.logger('- zip loader, name: %s',filename)
+ end
return unpack(input.openers.notfound)
end
-- zip:///somefile.zip
-- zip:///somefile.zip?tree=texmf-local -> mount
- function input.usezipfile(instance,zipname)
+ function input.usezipfile(zipname)
zipname = validzip(zipname)
- input.logger('! zip use','file '..zipname)
+ if input.trace > 0 then
+ input.logger('! zip use, file: %s',zipname)
+ end
local specification = input.splitmethod(zipname)
local zipfile = specification.path
if zipfile and not zip.registeredfiles[zipname] then
local tree = url.query(specification.query).tree or ""
- input.logger('! zip register','file '..zipname)
- local z = zip.openarchive(instance,zipfile)
+ if input.trace > 0 then
+ input.logger('! zip register, file: %s',zipname)
+ end
+ local z = zip.openarchive(zipfile)
if z then
- input.logger("= zipfile","registering "..zipname)
+ local instance = input.instance
+ if input.trace > 0 then
+ input.logger("= zipfile, registering: %s",zipname)
+ end
input.starttiming(instance)
- input.aux.prepend_hash(instance,'zip',zipname,zipfile)
- input.aux.extend_texmf_var(instance,zipname) -- resets hashes too
+ input.aux.prepend_hash('zip',zipname,zipfile)
+ input.aux.extend_texmf_var(zipname) -- resets hashes too
zip.registeredfiles[zipname] = z
instance.files[zipname] = input.aux.register_zip_file(z,tree or "")
input.stoptiming(instance)
- else
- input.logger("? zipfile","unknown "..zipname)
+ elseif input.trace > 0 then
+ input.logger("? zipfile, unknown: %s",zipname)
end
- else
- input.logger('! zip register','no file '..zipname)
+ elseif input.trace > 0 then
+ input.logger('! zip register, no file: %s',zipname)
end
end
@@ -5565,7 +6073,9 @@ else
else
filter = "^"..tree.."/(.+)/(.-)$"
end
- input.logger('= zip filter',filter)
+ if input.trace > 0 then
+ input.logger('= zip filter: %s',filter)
+ end
local register, n = input.aux.register_file, 0
for i in z:files() do
local path, name = i.filename:match(filter)
@@ -5581,7 +6091,7 @@ else
n = n + 1
end
end
- input.report('= zip entries',n)
+ input.logger('= zip entries: %s',n)
return files
end
@@ -5598,6 +6108,8 @@ if not versions then versions = { } end versions['luat-tex'] = 1.001
-- special functions that deal with io
+local format = string.format
+
if texconfig and not texlua then
input.level = input.level or 0
@@ -5620,13 +6132,17 @@ if texconfig and not texlua then
function input.show_load () end
end
- function input.finders.generic(instance,tag,filename,filetype)
- local foundname = input.find_file(instance,filename,filetype)
+ function input.finders.generic(tag,filename,filetype)
+ local foundname = input.find_file(filename,filetype)
if foundname and foundname ~= "" then
- input.logger('+ ' .. tag .. ' finder',filename,'filetype')
+ if input.trace > 0 then
+ input.logger('+ finder: %s, file: %s', tag,filename)
+ end
return foundname
else
- input.logger('- ' .. tag .. ' finder',filename,'filetype')
+ if input.trace > 0 then
+ input.logger('- finder: %s, file: %s', tag,filename)
+ end
return unpack(input.finders.notfound)
end
end
@@ -5639,7 +6155,9 @@ if texconfig and not texlua then
local u = unicode.utftype(file_handle)
local t = { }
if u > 0 then
- input.logger('+ ' .. tag .. ' opener (' .. unicode.utfname[u] .. ')',filename)
+ if input.trace > 0 then
+ input.logger('+ opener: %s (%s), file: %s',tag,unicode.utfname[u],filename)
+ end
local l
if u > 2 then
l = unicode.utf32_to_utf8(file_handle:read("*a"),u==4)
@@ -5654,7 +6172,9 @@ if texconfig and not texlua then
handle = nil,
noflines = #l,
close = function()
- input.logger('= ' .. tag .. ' closer (' .. unicode.utfname[u] .. ')',filename)
+ if input.trace > 0 then
+ input.logger('= closer: %s (%s), file: %s',tag,unicode.utfname[u],filename)
+ end
input.show_close(filename)
end,
--~ getline = function(n)
@@ -5690,7 +6210,9 @@ if texconfig and not texlua then
end
}
else
- input.logger('+ ' .. tag .. ' opener',filename)
+ if input.trace > 0 then
+ input.logger('+ opener: %s, file: %s',tag,filename)
+ end
-- todo: file;name -> freeze / eerste regel scannen -> freeze
local filters = input.filters
t = {
@@ -5710,7 +6232,9 @@ if texconfig and not texlua then
return line
end,
close = function()
- input.logger('= ' .. tag .. ' closer',filename)
+ if input.trace > 0 then
+ input.logger('= closer: %s, file: %s',tag,filename)
+ end
input.show_close(filename)
file_handle:close()
end,
@@ -5726,7 +6250,7 @@ if texconfig and not texlua then
return t
end
- function input.openers.generic(instance,tag,filename)
+ function input.openers.generic(tag,filename)
if filename and filename ~= "" then
local f = io.open(filename,"r")
if f then
@@ -5734,16 +6258,20 @@ if texconfig and not texlua then
return input.openers.text_opener(filename,f,tag)
end
end
- input.logger('- ' .. tag .. ' opener',filename)
+ if input.trace > 0 then
+ input.logger('- opener: %s, file: %s',tag,filename)
+ end
return unpack(input.openers.notfound)
end
- function input.loaders.generic(instance,tag,filename)
+ function input.loaders.generic(tag,filename)
if filename and filename ~= "" then
local f = io.open(filename,"rb")
if f then
input.show_load(filename)
- input.logger('+ ' .. tag .. ' loader',filename)
+ if input.trace > 0 then
+ input.logger('+ loader: %s, file: %s',tag,filename)
+ end
local s = f:read("*a")
f:close()
if s then
@@ -5751,18 +6279,20 @@ if texconfig and not texlua then
end
end
end
- input.logger('- ' .. tag .. ' loader',filename)
+ if input.trace > 0 then
+ input.logger('- loader: %s, file: %s',tag,filename)
+ end
return unpack(input.loaders.notfound)
end
- function input.finders.tex(instance,filename,filetype)
- return input.finders.generic(instance,'tex',filename,filetype)
+ function input.finders.tex(filename,filetype)
+ return input.finders.generic('tex',filename,filetype)
end
- function input.openers.tex(instance,filename)
- return input.openers.generic(instance,'tex',filename)
+ function input.openers.tex(filename)
+ return input.openers.generic('tex',filename)
end
- function input.loaders.tex(instance,filename)
- return input.loaders.generic(instance,'tex',filename)
+ function input.loaders.tex(filename)
+ return input.loaders.generic('tex',filename)
end
end
@@ -5778,13 +6308,13 @@ if texconfig and not texlua then do
local ss = { }
- function ctx.writestatus(a,b)
+ function ctx.writestatus(a,b,...)
local s = ss[a]
if not ss[a] then
s = a:rpadd(15) .. ": "
ss[a] = s
end
- texio.write_nl(s .. b .. "\n")
+ texio.write_nl(s .. format(b,...) .. "\n")
end
-- this will become: ctx.install_statistics(fnc() return ..,.. end) etc
@@ -5797,62 +6327,69 @@ if texconfig and not texlua then do
end
function ctx.show_statistics() -- todo: move calls
+ local loadtime, register_statistics = input.loadtime, ctx.register_statistics
if caches then
- ctx.register_statistics("used config path", "%s", function() return caches.configpath(texmf.instance) end)
- ctx.register_statistics("used cache path", "%s", function() return caches.path end)
+ register_statistics("used config path", "%s", function() return caches.configpath() end)
+ register_statistics("used cache path", "%s", function() return caches.temp() or "?" end)
end
if status.luabytecodes > 0 and input.storage and input.storage.done then
- ctx.register_statistics("modules/dumps/instances", "%s/%s/%s", function() return status.luabytecodes-500, input.storage.done, status.luastates end)
+ register_statistics("modules/dumps/instances", "%s/%s/%s", function() return status.luabytecodes-500, input.storage.done, status.luastates end)
end
- if texmf.instance then
- ctx.register_statistics("input load time", "%s seconds", function() return input.loadtime(texmf.instance) end)
+ if input.instance then
+ register_statistics("input load time", "%s seconds", function() return loadtime(input.instance) end)
end
if fonts then
- ctx.register_statistics("fonts load time","%s seconds", function() return input.loadtime(fonts) end)
+ register_statistics("fonts load time","%s seconds", function() return loadtime(fonts) end)
end
if xml then
- ctx.register_statistics("xml load time", "%s seconds, backreferences: %i, outer filtering time: %s", function() return input.loadtime(xml), #lxml.self, input.loadtime(lxml) end)
+ register_statistics("xml load time", "%s seconds, lpath calls: %s, cached calls: %s", function()
+ local stats = xml.statistics()
+ return loadtime(xml), stats.lpathcalls, stats.lpathcached
+ end)
+ register_statistics("lxml load time", "%s seconds preparation, backreferences: %i", function()
+ return loadtime(lxml), #lxml.self
+ end)
end
if mptopdf then
- ctx.register_statistics("mps conversion time", "%s seconds", function() return input.loadtime(mptopdf) end)
+ register_statistics("mps conversion time", "%s seconds", function() return loadtime(mptopdf) end)
end
if nodes then
- ctx.register_statistics("node processing time", "%s seconds (including kernel)", function() return input.loadtime(nodes) end)
+ register_statistics("node processing time", "%s seconds including kernel", function() return loadtime(nodes) end)
end
if kernel then
- ctx.register_statistics("kernel processing time", "%s seconds", function() return input.loadtime(kernel) end)
+ register_statistics("kernel processing time", "%s seconds", function() return loadtime(kernel) end)
end
if attributes then
- ctx.register_statistics("attribute processing time", "%s seconds", function() return input.loadtime(attributes) end)
+ register_statistics("attribute processing time", "%s seconds", function() return loadtime(attributes) end)
end
if languages then
- ctx.register_statistics("language load time", "%s seconds, n=%s", function() return input.loadtime(languages), languages.hyphenation.n() end)
+ register_statistics("language load time", "%s seconds, n=%s", function() return loadtime(languages), languages.hyphenation.n() end)
end
if figures then
- ctx.register_statistics("graphics processing time", "%s seconds, n=%s (including tex)", function() return input.loadtime(figures), figures.n or "?" end)
+ register_statistics("graphics processing time", "%s seconds including tex, n=%s", function() return loadtime(figures), figures.n or "?" end)
end
if metapost then
- ctx.register_statistics("metapost processing time", "%s seconds, loading: %s seconds, execution: %s seconds, n: %s", function() return input.loadtime(metapost), input.loadtime(mplib), input.loadtime(metapost.exectime), metapost.n end)
+ register_statistics("metapost processing time", "%s seconds, loading: %s seconds, execution: %s seconds, n: %s", function() return loadtime(metapost), loadtime(mplib), loadtime(metapost.exectime), metapost.n end)
end
if status.luastate_bytes then
- ctx.register_statistics("current memory usage", "%s bytes", function() return status.luastate_bytes end)
+ register_statistics("current memory usage", "%s bytes", function() return status.luastate_bytes end)
end
if nodes then
- ctx.register_statistics("cleaned up reserved nodes", "%s nodes, %s lists of %s", function() return nodes.cleanup_reserved(tex.count[24]) end) -- \topofboxstack
+ register_statistics("cleaned up reserved nodes", "%s nodes, %s lists of %s", function() return nodes.cleanup_reserved(tex.count[24]) end) -- \topofboxstack
end
if status.node_mem_usage then
- ctx.register_statistics("node memory usage", "%s", function() return status.node_mem_usage end)
+ register_statistics("node memory usage", "%s", function() return status.node_mem_usage end)
end
if languages then
- ctx.register_statistics("loaded patterns", "%s", function() return languages.logger.report() end)
+ register_statistics("loaded patterns", "%s", function() return languages.logger.report() end)
end
if fonts then
- ctx.register_statistics("loaded fonts", "%s", function() return fonts.logger.report() end)
+ register_statistics("loaded fonts", "%s", function() return fonts.logger.report() end)
end
if xml then -- so we are in mkiv, we need a different check
- ctx.register_statistics("runtime", "%s seconds, %i processed pages, %i shipped pages, %.3f pages/second", function()
- input.stoptiming(texmf)
- local runtime = input.loadtime(texmf)
+ register_statistics("runtime", "%s seconds, %i processed pages, %i shipped pages, %.3f pages/second", function()
+ input.stoptiming(input.instance)
+ local runtime = loadtime(input.instance)
local shipped = tex.count['nofshipouts']
local pages = tex.count['realpageno'] - 1
local persecond = shipped / runtime
@@ -5861,8 +6398,8 @@ if texconfig and not texlua then do
end
for _, t in ipairs(statusinfo) do
local tag, pattern, fnc = t[1], t[2], t[3]
- ctx.writestatus("mkiv lua stats", string.format("%s - %s", tag:rpadd(n," "), pattern:format(fnc())))
- end
+ ctx.writestatus("mkiv lua stats", "%s - %s", tag:rpadd(n," "), pattern:format(fnc()))
+ end-- input.expanded_path_list("osfontdir")
end
end end
@@ -5875,65 +6412,65 @@ if texconfig and not texlua then
-- if still present, we overload kpse (put it off-line so to say)
- if not texmf then texmf = { } end
-
- input.starttiming(texmf)
+ input.starttiming(input.instance)
- if not texmf.instance then
+ if not input.instance then
- if not texmf.instance then -- prevent a second loading
+ if not input.instance then -- prevent a second loading
- texmf.instance = input.reset()
- texmf.instance.progname = environment.progname or 'context'
- texmf.instance.engine = environment.engine or 'luatex'
- texmf.instance.validfile = input.validctxfile
+ input.instance = input.reset()
+ input.instance.progname = 'context'
+ input.instance.engine = 'luatex'
+ input.instance.validfile = input.validctxfile
- input.load(texmf.instance)
+ input.load()
end
if callback then
- callback.register('find_read_file' , function(id,name) return input.findtexfile(texmf.instance,name) end)
- callback.register('open_read_file' , function( name) return input.opentexfile(texmf.instance,name) end)
+ callback.register('find_read_file' , function(id,name) return input.findtexfile(name) end)
+ callback.register('open_read_file' , function( name) return input.opentexfile(name) end)
end
if callback then
- callback.register('find_data_file' , function(name) return input.findbinfile(texmf.instance,name,"tex") end)
- callback.register('find_enc_file' , function(name) return input.findbinfile(texmf.instance,name,"enc") end)
- callback.register('find_font_file' , function(name) return input.findbinfile(texmf.instance,name,"tfm") end)
- callback.register('find_format_file' , function(name) return input.findbinfile(texmf.instance,name,"fmt") end)
- callback.register('find_image_file' , function(name) return input.findbinfile(texmf.instance,name,"tex") end)
- callback.register('find_map_file' , function(name) return input.findbinfile(texmf.instance,name,"map") end)
- callback.register('find_ocp_file' , function(name) return input.findbinfile(texmf.instance,name,"ocp") end)
- callback.register('find_opentype_file' , function(name) return input.findbinfile(texmf.instance,name,"otf") end)
- callback.register('find_output_file' , function(name) return name end)
- callback.register('find_pk_file' , function(name) return input.findbinfile(texmf.instance,name,"pk") end)
- callback.register('find_sfd_file' , function(name) return input.findbinfile(texmf.instance,name,"sfd") end)
- callback.register('find_truetype_file' , function(name) return input.findbinfile(texmf.instance,name,"ttf") end)
- callback.register('find_type1_file' , function(name) return input.findbinfile(texmf.instance,name,"pfb") end)
- callback.register('find_vf_file' , function(name) return input.findbinfile(texmf.instance,name,"vf") end)
-
- callback.register('read_data_file' , function(file) return input.loadbinfile(texmf.instance,file,"tex") end)
- callback.register('read_enc_file' , function(file) return input.loadbinfile(texmf.instance,file,"enc") end)
- callback.register('read_font_file' , function(file) return input.loadbinfile(texmf.instance,file,"tfm") end)
+ callback.register('find_data_file' , function(name) return input.findbinfile(name,"tex") end)
+ callback.register('find_enc_file' , function(name) return input.findbinfile(name,"enc") end)
+ callback.register('find_font_file' , function(name) return input.findbinfile(name,"tfm") end)
+ callback.register('find_format_file' , function(name) return input.findbinfile(name,"fmt") end)
+ callback.register('find_image_file' , function(name) return input.findbinfile(name,"tex") end)
+ callback.register('find_map_file' , function(name) return input.findbinfile(name,"map") end)
+ callback.register('find_ocp_file' , function(name) return input.findbinfile(name,"ocp") end)
+ callback.register('find_opentype_file' , function(name) return input.findbinfile(name,"otf") end)
+ callback.register('find_output_file' , function(name) return name end)
+ callback.register('find_pk_file' , function(name) return input.findbinfile(name,"pk") end)
+ callback.register('find_sfd_file' , function(name) return input.findbinfile(name,"sfd") end)
+ callback.register('find_truetype_file' , function(name) return input.findbinfile(name,"ttf") end)
+ callback.register('find_type1_file' , function(name) return input.findbinfile(name,"pfb") end)
+ callback.register('find_vf_file' , function(name) return input.findbinfile(name,"vf") end)
+
+ callback.register('read_data_file' , function(file) return input.loadbinfile(file,"tex") end)
+ callback.register('read_enc_file' , function(file) return input.loadbinfile(file,"enc") end)
+ callback.register('read_font_file' , function(file) return input.loadbinfile(file,"tfm") end)
-- format
-- image
- callback.register('read_map_file' , function(file) return input.loadbinfile(texmf.instance,file,"map") end)
- callback.register('read_ocp_file' , function(file) return input.loadbinfile(texmf.instance,file,"ocp") end)
- callback.register('read_opentype_file' , function(file) return input.loadbinfile(texmf.instance,file,"otf") end)
+ callback.register('read_map_file' , function(file) return input.loadbinfile(file,"map") end)
+ callback.register('read_ocp_file' , function(file) return input.loadbinfile(file,"ocp") end)
+ callback.register('read_opentype_file' , function(file) return input.loadbinfile(file,"otf") end)
-- output
- callback.register('read_pk_file' , function(file) return input.loadbinfile(texmf.instance,file,"pk") end)
- callback.register('read_sfd_file' , function(file) return input.loadbinfile(texmf.instance,file,"sfd") end)
- callback.register('read_truetype_file' , function(file) return input.loadbinfile(texmf.instance,file,"ttf") end)
- callback.register('read_type1_file' , function(file) return input.loadbinfile(texmf.instance,file,"pfb") end)
- callback.register('read_vf_file' , function(file) return input.loadbinfile(texmf.instance,file,"vf" ) end)
+ callback.register('read_pk_file' , function(file) return input.loadbinfile(file,"pk") end)
+ callback.register('read_sfd_file' , function(file) return input.loadbinfile(file,"sfd") end)
+ callback.register('read_truetype_file' , function(file) return input.loadbinfile(file,"ttf") end)
+ callback.register('read_type1_file' , function(file) return input.loadbinfile(file,"pfb") end)
+ callback.register('read_vf_file' , function(file) return input.loadbinfile(file,"vf" ) end)
end
- if callback and environment.aleph_mode then
- callback.register('find_font_file' , function(name) return input.findbinfile(texmf.instance,name,"ofm") end)
- callback.register('read_font_file' , function(file) return input.loadbinfile(texmf.instance,file,"ofm") end)
- callback.register('find_vf_file' , function(name) return input.findbinfile(texmf.instance,name,"ovf") end)
- callback.register('read_vf_file' , function(file) return input.loadbinfile(texmf.instance,file,"ovf") end)
+ if input.aleph_mode == nil then environment.aleph_mode = true end -- some day we will drop omega font support
+
+ if callback and input.aleph_mode then
+ callback.register('find_font_file' , function(name) return input.findbinfile(name,"ofm") end)
+ callback.register('read_font_file' , function(file) return input.loadbinfile(file,"ofm") end)
+ callback.register('find_vf_file' , function(name) return input.findbinfile(name,"ovf") end)
+ callback.register('read_vf_file' , function(file) return input.loadbinfile(file,"ovf") end)
end
if callback then
@@ -6021,16 +6558,16 @@ if texconfig and not texlua then
if kpse then
function kpse.find_file(filename,filetype,mustexist)
- return input.find_file(texmf.instance,filename,filetype,mustexist)
+ return input.find_file(filename,filetype,mustexist)
end
function kpse.expand_path(variable)
- return input.expand_path(texmf.instance,variable)
+ return input.expand_path(variable)
end
function kpse.expand_var(variable)
- return input.expand_var(texmf.instance,variable)
+ return input.expand_var(variable)
end
function kpse.expand_braces(variable)
- return input.expand_braces(texmf.instance,variable)
+ return input.expand_braces(variable)
end
end
@@ -6057,7 +6594,7 @@ if texconfig and not texlua then
function luatex.variables()
local t, x = { }, nil
for _,v in pairs(luatex.variablenames) do
- x = input.var_value(texmf.instance,v)
+ x = input.var_value(v)
if x and x:find("^%d+$") then
t[v] = tonumber(x)
end
@@ -6081,28 +6618,34 @@ if texconfig and not texlua then
end
--- some tex basics
+-- some tex basics, maybe this will move to ctx
-if not cs then cs = { } end
+if tex then
-function cs.def(k,v)
- tex.sprint(tex.texcatcodes, "\\def\\" .. k .. "{" .. v .. "}")
-end
+ local texsprint, texwrite = tex.sprint, tex.write
-function cs.chardef(k,v)
- tex.sprint(tex.texcatcodes, "\\chardef\\" .. k .. "=" .. v .. "\\relax")
-end
+ if not cs then cs = { } end
-function cs.boolcase(b)
- if b then tex.write(1) else tex.write(0) end
-end
+ function cs.def(k,v)
+ texsprint(tex.texcatcodes, "\\def\\" .. k .. "{" .. v .. "}")
+ end
-function cs.testcase(b)
- if b then
- tex.sprint(tex.texcatcodes, "\\firstoftwoarguments")
- else
- tex.sprint(tex.texcatcodes, "\\secondoftwoarguments")
+ function cs.chardef(k,v)
+ texsprint(tex.texcatcodes, "\\chardef\\" .. k .. "=" .. v .. "\\relax")
+ end
+
+ function cs.boolcase(b)
+ if b then texwrite(1) else texwrite(0) end
+ end
+
+ function cs.testcase(b)
+ if b then
+ texsprint(tex.texcatcodes, "\\firstoftwoarguments")
+ else
+ texsprint(tex.texcatcodes, "\\secondoftwoarguments")
+ end
end
+
end
@@ -6235,6 +6778,7 @@ own.libs = { -- todo: check which ones are really needed
'l-utils.lua',
'luat-lib.lua',
'luat-inp.lua',
+ 'luat-log.lua',
'luat-tmp.lua',
'luat-zip.lua',
'luat-tex.lua',
@@ -6288,19 +6832,21 @@ if not input then
os.exit()
end
-instance = input.reset()
+input.instance = input.reset()
input.verbose = environment.arguments["verbose"] or false
-input.banner = 'LuaTools | '
+input.banner = 'LuaTools'
utils.report = input.report
input.defaultlibs = { -- not all are needed
'l-string.lua', 'l-lpeg.lua', 'l-table.lua', 'l-boolean.lua', 'l-number.lua', 'l-set.lua', 'l-unicode.lua',
- 'l-md5.lua', 'l-os.lua', 'l-io.lua', 'l-file.lua', 'l-url.lua', 'l-dir.lua', 'l-utils.lua', 'l-tex.lua',
- 'luat-env.lua', 'luat-lib.lua', 'luat-inp.lua', 'luat-tmp.lua', 'luat-zip.lua', 'luat-tex.lua'
+ 'l-md5.lua', 'l-os.lua', 'l-io.lua', 'l-file.lua', 'l-url.lua', 'l-dir.lua', 'l-utils.lua', 'l-dimen.lua',
+ 'luat-lib.lua', 'luat-inp.lua', 'luat-env.lua', 'luat-tmp.lua', 'luat-zip.lua', 'luat-tex.lua'
}
-- todo: use environment.argument() instead of environment.arguments[]
+local instance = input.instance
+
instance.engine = environment.arguments["engine"] or 'luatex'
instance.progname = environment.arguments["progname"] or 'context'
instance.luaname = environment.arguments["luafile"] or "" -- environment.ownname or ""
@@ -6325,19 +6871,19 @@ if environment.arguments["minimize"] then
end
end
-function input.my_prepare_a(instance)
- input.resetconfig(instance)
- input.identify_cnf(instance)
- input.load_lua(instance)
- input.expand_variables(instance)
- input.load_cnf(instance)
- input.expand_variables(instance)
+function input.my_prepare_a()
+ input.resetconfig()
+ input.identify_cnf()
+ input.load_lua()
+ input.expand_variables()
+ input.load_cnf()
+ input.expand_variables()
end
-function input.my_prepare_b(instance)
- input.my_prepare_a(instance)
- input.load_hash(instance)
- input.automount(instance)
+function input.my_prepare_b()
+ input.my_prepare_a()
+ input.load_hash()
+ input.automount()
end
-- barename
@@ -6379,10 +6925,11 @@ messages.help = [[
--lsr use lsr and cnf directly
]]
-function input.my_make_format(instance,texname)
+function input.my_make_format(texname)
+ local instance = input.instance
if texname and texname ~= "" then
if input.usecache then
- local path = file.join(caches.setpath(instance,"formats")) -- maybe platform
+ local path = file.join(caches.setpath("formats")) -- maybe platform
if path and lfs then
lfs.chdir(path)
end
@@ -6391,22 +6938,22 @@ function input.my_make_format(instance,texname)
if barename == texname then
texname = texname .. ".tex"
end
- local fullname = input.find_files(instance,texname)[1] or ""
+ local fullname = input.find_files(texname)[1] or ""
if fullname == "" then
- input.report("no tex file with name",texname)
+ input.report("no tex file with name: %s",texname)
else
local luaname, lucname, luapath, lualibs = "", "", "", { }
-- the following is optional, since context.lua can also
-- handle this collect and compile business
if environment.arguments["compile"] then
if luaname == "" then luaname = barename end
- input.report("creating initialization file " .. luaname)
+ input.report("creating initialization file: %s",luaname)
luapath = file.dirname(luaname)
if luapath == "" then
luapath = file.dirname(texname)
end
if luapath == "" then
- luapath = file.dirname(input.find_files(instance,texname)[1] or "")
+ luapath = file.dirname(input.find_files(texname)[1] or "")
end
lualibs = string.split(instance.lualibs,",")
luaname = file.basename(barename .. ".lua")
@@ -6416,27 +6963,28 @@ function input.my_make_format(instance,texname)
if lualibs[1] then
local firstlib = file.join(luapath,lualibs[1])
if not lfs.isfile(firstlib) then
- local foundname = input.find_files(instance,lualibs[1])[1]
+ local foundname = input.find_files(lualibs[1])[1]
if foundname then
- input.report("located library path : " .. luapath)
+ input.report("located library path: %s",luapath)
luapath = file.dirname(foundname)
end
end
end
- input.report("using library path : " .. luapath)
- input.report("using lua libraries: " .. table.join(lualibs," "))
+ input.report("using library path: %s",luapath)
+ input.report("using lua libraries: %s",table.join(lualibs," "))
utils.merger.selfcreate(lualibs,luapath,luaname)
- if utils.lua.compile(luaname, lucname) and io.exists(lucname) then
+ local strip = input.boolean_variable("LUACSTRIP", true)
+ if utils.lua.compile(luaname,lucname,false,strip) and io.exists(lucname) then
luaname = lucname
- input.report("using compiled initialization file " .. lucname)
+ input.report("using compiled initialization file: %s",lucname)
else
- input.report("using uncompiled initialization file " .. luaname)
+ input.report("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")
if v and (v ~= "") then
- luaname = input.find_files(instance,v)[1] or ""
+ luaname = input.find_files(v)[1] or ""
if luaname ~= "" then
break
end
@@ -6445,22 +6993,30 @@ function input.my_make_format(instance,texname)
end
if luaname == "" then
input.reportlines(messages.no_ini_file)
- input.report("texname : " .. texname)
- input.report("luaname : " .. instance.luaname)
- input.report("progname : " .. instance.progname)
- input.report("barename : " .. barename)
+ input.report("texname : %s",texname)
+ input.report("luaname : %s",instance.luaname)
+ input.report("progname: %s",instance.progname)
+ input.report("barename: %s",barename)
else
- input.report("using lua initialization file " .. luaname)
+ input.report("using lua initialization file: %s",luaname)
+ local mp = dir.glob(file.stripsuffix(file.basename(luaname)).."-*.mem")
+ if mp and #mp > 0 then
+ for _, name in ipairs(mp) do
+ input.report("removing related mplib format %s", file.basename(name))
+ os.remove(name)
+ end
+ end
local flags = { "--ini" }
if environment.arguments["mkii"] then
flags[#flags+1] = "--progname=" .. instance.progname
else
flags[#flags+1] = "--lua=" .. string.quote(luaname)
end
- local bs = (environment.platform == "unix" and "\\\\") or "\\" -- todo: make a function
+ local bs = (os.platform == "unix" and "\\\\") or "\\" -- todo: make a function
local command = "luatex ".. table.concat(flags," ") .. " " .. string.quote(fullname) .. " " .. bs .. "dump"
- input.report("running command: " .. command .. "\n")
+ input.report("running command: %s\n",command)
os.spawn(command)
+ -- todo: do a dummy run that generates the related metafun and mfplain formats
end
end
else
@@ -6468,22 +7024,22 @@ function input.my_make_format(instance,texname)
end
end
-function input.my_run_format(instance,name,data,more)
+function input.my_run_format(name,data,more)
-- hm, rather old code here; we can now use the file.whatever functions
if name and (name ~= "") then
local barename = name:gsub("%.%a+$","")
local fmtname = ""
if input.usecache then
- local path = file.join(caches.setpath(instance,"formats")) -- maybe platform
+ local path = file.join(caches.setpath("formats")) -- maybe platform
fmtname = file.join(path,barename..".fmt") or ""
end
if fmtname == "" then
- fmtname = input.find_files(instance,barename..".fmt")[1] or ""
+ fmtname = input.find_files(barename..".fmt")[1] or ""
end
fmtname = input.clean_path(fmtname)
barename = fmtname:gsub("%.%a+$","")
if fmtname == "" then
- input.report("no format with name",name)
+ input.report("no format with name: %s",name)
else
local luaname = barename .. ".luc"
local f = io.open(luaname)
@@ -6494,11 +7050,11 @@ function input.my_run_format(instance,name,data,more)
if f then
f:close()
local command = "luatex --fmt=" .. string.quote(barename) .. " --lua=" .. string.quote(luaname) .. " " .. string.quote(data) .. " " .. string.quote(more)
- input.report("running command: " .. command)
+ input.report("running command: %s",command)
os.spawn(command)
else
- input.report("using format name",fmtname)
- input.report("no luc/lua with name",barename)
+ input.report("using format name: %s",fmtname)
+ input.report("no luc/lua with name: %s",barename)
end
end
end
@@ -6516,8 +7072,9 @@ local function tabstr(str)
end
end
-local function list(instance,list)
- local pat = string.upper(instance.pattern or "","")
+local function list(list)
+ local instance = input.instance
+ local pat = string.upper(pattern or "","")
for _,key in pairs(table.sortedkeys(list)) do
if instance.pattern == "" or string.find(key:upper(),pat) then
if instance.kpseonly then
@@ -6531,10 +7088,11 @@ local function list(instance,list)
end
end
-function input.listers.variables (instance) list(instance,instance.variables ) end
-function input.listers.expansions(instance) list(instance,instance.expansions) end
+function input.listers.variables () list(input.instance.variables ) end
+function input.listers.expansions() list(input.instance.expansions) end
-function input.listers.configurations(instance)
+function input.listers.configurations()
+ local instance = input.instance
for _,key in pairs(table.sortedkeys(instance.kpsevars)) do
if not instance.pattern or (instance.pattern=="") or key:find(instance.pattern) then
print(key.."\n")
@@ -6549,61 +7107,58 @@ function input.listers.configurations(instance)
end
end
-input.report(banner,"\n")
+input.report("%s\n",banner)
local ok = true
if environment.arguments["find-file"] then
- input.my_prepare_b(instance)
+ input.my_prepare_b()
instance.format = environment.arguments["format"] or instance.format
if instance.pattern then
instance.allresults = true
- input.for_files(instance, input.find_files, { instance.pattern }, instance.my_format)
+ input.for_files(input.find_files, { instance.pattern }, instance.my_format)
else
- input.for_files(instance, input.find_files, environment.files, instance.my_format)
+ input.for_files(input.find_files, environment.files, instance.my_format)
end
elseif environment.arguments["find-path"] then
- input.my_prepare_b(instance)
- local path = input.find_file(instance, environment.files[1], instance.my_format)
+ input.my_prepare_b()
+ local path = input.find_file(environment.files[1], instance.my_format)
if input.verbose then
input.report(file.dirname(path))
else
print(file.dirname(path))
end
---~ elseif environment.arguments["first-writable-path"] then
---~ input.my_prepare_b(instance)
---~ input.report(input.first_writable_path(instance,environment.files[1] or "."))
elseif environment.arguments["run"] then
- input.my_prepare_a(instance) -- ! no need for loading databases
+ input.my_prepare_a() -- ! no need for loading databases
input.verbose = true
- input.my_run_format(instance,environment.files[1] or "",environment.files[2] or "",environment.files[3] or "")
+ input.my_run_format(environment.files[1] or "",environment.files[2] or "",environment.files[3] or "")
elseif environment.arguments["fmt"] then
- input.my_prepare_a(instance) -- ! no need for loading databases
+ input.my_prepare_a() -- ! no need for loading databases
input.verbose = true
- input.my_run_format(instance,environment.arguments["fmt"], environment.files[1] or "",environment.files[2] or "")
+ input.my_run_format(environment.arguments["fmt"], environment.files[1] or "",environment.files[2] or "")
elseif environment.arguments["expand-braces"] then
- input.my_prepare_a(instance)
- input.for_files(instance, input.expand_braces, environment.files)
+ input.my_prepare_a()
+ input.for_files(input.expand_braces, environment.files)
elseif environment.arguments["expand-path"] then
- input.my_prepare_a(instance)
- input.for_files(instance, input.expand_path, environment.files)
+ input.my_prepare_a()
+ input.for_files(input.expand_path, environment.files)
elseif environment.arguments["expand-var"] or environment.arguments["expand-variable"] then
- input.my_prepare_a(instance)
- input.for_files(instance, input.expand_var, environment.files)
+ input.my_prepare_a()
+ input.for_files(input.expand_var, environment.files)
elseif environment.arguments["show-path"] or environment.arguments["path-value"] then
- input.my_prepare_a(instance)
- input.for_files(instance, input.show_path, environment.files)
+ input.my_prepare_a()
+ input.for_files(input.show_path, environment.files)
elseif environment.arguments["var-value"] or environment.arguments["show-value"] then
- input.my_prepare_a(instance)
- input.for_files(instance, input.var_value, environment.files)
+ input.my_prepare_a()
+ input.for_files(input.var_value, environment.files)
elseif environment.arguments["format-path"] then
- input.my_prepare_b(instance)
- input.report(caches.setpath(instance,"format"))
+ input.my_prepare_b()
+ input.report(caches.setpath("format"))
elseif instance.pattern then -- brrr
- input.my_prepare_b(instance)
+ input.my_prepare_b()
instance.format = environment.arguments["format"] or instance.format
instance.allresults = true
- input.for_files(instance, input.find_files, { instance.pattern }, instance.my_format)
+ input.for_files(input.find_files, { instance.pattern }, instance.my_format)
elseif environment.arguments["generate"] then
instance.renewcache = true
input.verbose = true
@@ -6611,46 +7166,42 @@ elseif environment.arguments["generate"] then
elseif environment.arguments["make"] or environment.arguments["ini"] or environment.arguments["compile"] then
input.my_prepare_b(instance)
input.verbose = true
- input.my_make_format(instance,environment.files[1] or "")
+ input.my_make_format(environment.files[1] or "")
elseif environment.arguments["selfmerge"] then
utils.merger.selfmerge(own.name,own.libs,own.list)
elseif environment.arguments["selfclean"] then
utils.merger.selfclean(own.name)
elseif environment.arguments["selfupdate"] then
- input.my_prepare_b(instance)
+ input.my_prepare_b()
input.verbose = true
- input.update_script(instance,own.name,"luatools")
+ input.update_script(own.name,"luatools")
elseif environment.arguments["variables"] or environment.arguments["show-variables"] then
- input.my_prepare_a(instance)
- input.listers.variables(instance)
+ input.my_prepare_a()
+ input.listers.variables()
elseif environment.arguments["expansions"] or environment.arguments["show-expansions"] then
- input.my_prepare_a(instance)
- input.listers.expansions(instance)
+ input.my_prepare_a()
+ input.listers.expansions()
elseif environment.arguments["configurations"] or environment.arguments["show-configurations"] then
- input.my_prepare_a(instance)
- input.listers.configurations(instance)
+ input.my_prepare_a()
+ input.listers.configurations()
elseif environment.arguments["help"] or (environment.files[1]=='help') or (#environment.files==0) then
if not input.verbose then
input.verbose = true
- input.report(banner,"\n")
+ input.report("%s\n",banner)
end
- input.reportlines(messages.help)
+ input.reportlines(messages.help) -- input.help ?
else
- input.my_prepare_b(instance)
- input.for_files(instance, input.find_files, environment.files, instance.my_format)
+ input.my_prepare_b()
+ input.for_files(input.find_files, environment.files, instance.my_format)
end
if input.verbose then
input.report("")
- input.report(string.format("runtime: %0.3f seconds",os.runtime()))
+ input.report("runtime: %0.3f seconds",os.runtime())
end
---~ if ok then
---~ input.report("exit code: 0") os.exit(0)
---~ else
---~ input.report("exit code: 1") os.exit(1)
---~ end
-
-if environment.platform == "unix" then
+if os.platform == "unix" then
io.write("\n")
end
+
+
diff --git a/scripts/context/lua/mtx-babel.lua b/scripts/context/lua/mtx-babel.lua
index c9855b86a..44254352c 100644
--- a/scripts/context/lua/mtx-babel.lua
+++ b/scripts/context/lua/mtx-babel.lua
@@ -8,8 +8,6 @@ if not modules then modules = { } end modules ['mtx-babel'] = {
-- data tables by Thomas A. Schmitz
-texmf.instance = instance -- we need to get rid of this / maybe current instance in global table
-
scripts = scripts or { }
scripts.babel = scripts.babel or { }
@@ -384,22 +382,22 @@ do
local structure = environment.argument("structure") or "document"
converter = converter[structure]
if converter then
- input.report(string.format("converting '%s' using language '%s' with structure '%s'", filename, language, structure))
+ input.report("converting '%s' using language '%s' with structure '%s'", filename, language, structure)
data = converter:match(data)
local newfilename = filename .. ".utf"
io.savedata(newfilename, data)
- input.report(string.format("converted data saved in '%s'", newfilename))
+ input.report("converted data saved in '%s'", newfilename)
else
- input.report(string.format("unknown structure '%s' language '%s'", structure, language))
+ input.report("unknown structure '%s' language '%s'", structure, language)
end
else
- input.report(string.format("no converter for language '%s'", language))
+ input.report("no converter for language '%s'", language)
end
else
- input.report(string.format("provide language"))
+ input.report("provide language")
end
else
- input.report(string.format("no data in '%s'",filename))
+ input.report("no data in '%s'",filename)
end
end
end
@@ -427,4 +425,3 @@ if environment.argument("convert") then
else
input.help(banner,messages.help)
end
-
diff --git a/scripts/context/lua/mtx-cache.lua b/scripts/context/lua/mtx-cache.lua
index 8091eaa65..0432168ee 100644
--- a/scripts/context/lua/mtx-cache.lua
+++ b/scripts/context/lua/mtx-cache.lua
@@ -6,20 +6,18 @@ if not modules then modules = { } end modules ['mtx-cache'] = {
license = "see context related readme files"
}
-texmf.instance = instance -- we need to get rid of this / maybe current instance in global table
-
scripts = scripts or { }
scripts.cache = scripts.cache or { }
function scripts.cache.collect_one(...)
- local path = caches.setpath(instance,...)
+ local path = caches.setpath(...)
local tmas = dir.glob(path .. "/*.tma")
local tmcs = dir.glob(path .. "/*.tmc")
return path, tmas, tmcs
end
function scripts.cache.collect_two(...)
- local path = caches.setpath(instance,...)
+ local path = caches.setpath(...)
local rest = dir.glob(path .. "/**/*")
return path, rest
end
diff --git a/scripts/context/lua/mtx-chars.lua b/scripts/context/lua/mtx-chars.lua
index a05ab9f08..f4f751377 100644
--- a/scripts/context/lua/mtx-chars.lua
+++ b/scripts/context/lua/mtx-chars.lua
@@ -6,7 +6,7 @@ if not modules then modules = { } end modules ['mtx-chars'] = {
license = "see context related readme files"
}
-texmf.instance = instance -- we need to get rid of this / maybe current instance in global table
+local format, concat = string.format, table.concat
scripts = scripts or { }
scripts.chars = scripts.chars or { }
@@ -35,7 +35,6 @@ function scripts.chars.stixtomkiv(inname,outname)
C = "closing",
F = "fence"
}
- local format, concat = string.format, table.concat
local valid, done = false, { }
local g = io.open(outname,'w')
g:write([[
@@ -81,7 +80,44 @@ if not characters then characters = { } end
end
end
-scripts.chars.banner_utf_1 = [[
+local banner_pdf_1 = [[
+% filename : pdfr-def.tex
+% comment : generated by mtxrun --script chars --pdf
+% author : Hans Hagen, PRAGMA-ADE, Hasselt NL
+% copyright: PRAGMA ADE / ConTeXt Development Team
+% license : see context related readme files
+%
+]]
+
+local banner_pdf_2 = [[
+%
+\endinput
+]]
+
+function scripts.chars.makepdfr()
+ local chartable = input.find_file("char-def.lua") or ""
+ if chartable ~= "" then
+ dofile(chartable)
+ if characters and characters.data then
+ local f = io.open("pdfr-def.tex", 'w')
+ if f then
+ f:write(banner_pdf_1)
+ local cd = characters.data
+ local sd = table.sortedkeys(cd)
+ for i=1,#sd do
+ local char = cd[sd[i]]
+ if char.adobename then
+ f:write(format("\\pdfglyphtounicode{%s}{%04X}%%\n",char.adobename,char.unicodeslot))
+ end
+ end
+ f:write(banner_pdf_2)
+ f:close()
+ end
+ end
+ end
+end
+
+local banner_utf_1 = [[
% filename : enco-utf.tex
% comment : generated by mtxrun --script chars --utf
% author : Hans Hagen, PRAGMA-ADE, Hasselt NL
@@ -98,33 +134,32 @@ scripts.chars.banner_utf_1 = [[
\fi
]]
-scripts.chars.banner_utf_2 = [[
+local banner_utf_2 = [[
% lc/uc/catcode mappings
]]
-scripts.chars.banner_utf_3 = [[
+local banner_utf_3 = [[
% named characters mapped onto utf (\\char is needed for accents)
]]
-scripts.chars.banner_utf_4 = [[
+local banner_utf_4 = [[
\endinput
]]
function scripts.chars.makeencoutf()
- local chartable = input.find_file(instance,"char-def.lua") or ""
+ local chartable = input.find_file("char-def.lua") or ""
if chartable ~= "" then
dofile(chartable)
if characters and characters.data then
local f = io.open("enco-utf.tex", 'w')
if f then
- local char, format = unicode.utf8.char, string.format
- f:write(scripts.chars.banner_utf_1)
- f:write(scripts.chars.banner_utf_2)
+ f:write(banner_utf_1)
+ f:write(banner_utf_2)
local list = table.sortedkeys(characters.data)
local length = 0
for i=1,#list do
@@ -142,7 +177,7 @@ function scripts.chars.makeencoutf()
end
end
end
- f:write(scripts.chars.banner_utf_3)
+ f:write(banner_utf_3)
for i=1,#list do
local code = list[i]
if code > 0x5B and code <= 0xFFFF then
@@ -157,7 +192,7 @@ function scripts.chars.makeencoutf()
end
end
end
- f:write(scripts.chars.banner_utf_4)
+ f:write(banner_utf_4)
f:close()
end
end
@@ -169,6 +204,7 @@ banner = banner .. " | character tools "
messages.help = [[
--stix convert stix table to math table
--utf generate enco-utf.tex (used by xetex)
+--pdf generate pdfr-def.tex (used by pdftex)
]]
if environment.argument("stix") then
@@ -177,6 +213,8 @@ if environment.argument("stix") then
scripts.chars.stixtomkiv(inname,outname)
elseif environment.argument("utf") then
scripts.chars.makeencoutf()
+elseif environment.argument("pdf") then
+ scripts.chars.makepdfr()
else
input.help(banner,messages.help)
end
diff --git a/scripts/context/lua/mtx-check.lua b/scripts/context/lua/mtx-check.lua
index dd8a71264..7c44fa855 100644
--- a/scripts/context/lua/mtx-check.lua
+++ b/scripts/context/lua/mtx-check.lua
@@ -6,8 +6,6 @@ if not modules then modules = { } end modules ['mtx-check'] = {
license = "see context related readme files"
}
-texmf.instance = instance -- we need to get rid of this / maybe current instance in global table
-
scripts = scripts or { }
scripts.checker = scripts.checker or { }
diff --git a/scripts/context/lua/mtx-context.lua b/scripts/context/lua/mtx-context.lua
index 6c444d531..d90da11e0 100644
--- a/scripts/context/lua/mtx-context.lua
+++ b/scripts/context/lua/mtx-context.lua
@@ -6,8 +6,6 @@ if not modules then modules = { } end modules ['mtx-context'] = {
license = "see context related readme files"
}
-texmf.instance = instance -- we need to get rid of this / maybe current instance in global table
-
scripts = scripts or { }
scripts.context = scripts.context or { }
@@ -30,11 +28,11 @@ end
function input.locate_format(name) -- move this to core / luat-xxx
local barename, fmtname = name:gsub("%.%a+$",""), ""
if input.usecache then
- local path = file.join(caches.setpath(instance,"formats")) -- maybe platform
+ local path = file.join(caches.setpath("formats")) -- maybe platform
fmtname = file.join(path,barename..".fmt") or ""
end
if fmtname == "" then
- fmtname = input.find_files(instance,barename..".fmt")[1] or ""
+ fmtname = input.find_files(barename..".fmt")[1] or ""
end
fmtname = input.clean_path(fmtname)
if fmtname ~= "" then
@@ -137,7 +135,7 @@ do
elseif ctxdata.ctxname then
ctlname = file.replacesuffix(ctxdata.ctxname,'ctl')
else
- input.report(string.format("invalid ctl name %s",ctlname or "?"))
+ input.report("invalid ctl name: %s",ctlname or "?")
return
end
end
@@ -145,7 +143,7 @@ do
input.report("nothing prepared, no ctl file saved")
os.remove(ctlname)
else
- input.report(string.format("saving logdata in %s",ctlname))
+ input.report("saving logdata in: %s",ctlname)
f = io.open(ctlname,'w')
if f then
f:write("\n\n")
@@ -190,8 +188,8 @@ do
ctxdata.jobname = file.addsuffix(ctxdata.jobname,'tex')
ctxdata.ctxname = file.addsuffix(ctxdata.ctxname,'ctx')
- input.report("jobname:",ctxdata.jobname)
- input.report("ctxname:",ctxdata.ctxname)
+ input.report("jobname: %s",ctxdata.jobname)
+ input.report("ctxname: %s",ctxdata.ctxname)
-- mtxrun should resolve kpse: and file:
@@ -238,17 +236,9 @@ do
ctxdata.flags = ctxrunner.reflag(ctxdata.flags)
for _, message in ipairs(ctxdata.messages) do
- -- message ctxdata.justtext(xml.tostring(message))
+ input.report("ctx comment: %s", xml.tostring(message))
end
- --~ REXML::XPath.each(root,"//ctx:block") do |blk|
- --~ if @jobname && blk.attributes['pattern'] then
- --~ root.delete(blk) unless @jobname =~ /#{blk.attributes['pattern']}/
- --~ else
- --~ root.delete(blk)
- --~ end
- --~ end
-
xml.each(ctxdata.xmldata,"ctx:value[@name='job']", function(ek,e,k)
e[k] = ctxdata.variables['job'] or ""
end)
@@ -259,8 +249,8 @@ do
commands[ek.at and ek.at['name'] or "unknown"] = ek
end)
- local suffix = xml.first(ctxdata.xmldata,"/ctx:job/ctx:preprocess/@suffix") or ctxdata.suffix
- local runlocal = xml.first(ctxdata.xmldata,"/ctx:job/ctx:preprocess/ctx:processors/@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)
@@ -283,6 +273,7 @@ do
pattern = ctxrunner.justtext(xml.tostring(pattern))
local oldfiles = dir.glob(pattern)
+
local pluspath = false
if #oldfiles == 0 then
-- message: no files match pattern
@@ -333,11 +324,12 @@ do
end
end)
-- potential optimization: when mtxrun run internal
+ command = xml.text(command)
command = ctxrunner.justtext(command) -- command is still xml element here
- input.report("command",command)
- local result = os.spawn(command)
+ input.report("command: %s",command)
+ local result = os.spawn(command) or 0
if result > 0 then
- input.report("error, return code",result)
+ input.report("error, return code: %s",result)
end
if ctxdata.runlocal then
oldfile = file.basename(oldfile)
@@ -348,7 +340,7 @@ do
file.syncmtimes(oldfile,newfile)
ctxdata.prepfiles[oldfile] = true
else
- input.report("error, check target location of new file", newfile)
+ input.report("error, check target location of new file: %s", newfile)
ctxdata.prepfiles[oldfile] = false
end
else
@@ -400,15 +392,13 @@ scripts.context.backends = {
dvips = 'dvips'
}
-function scripts.context.multipass.makeoptionfile(jobname,ctxdata)
+function scripts.context.multipass.makeoptionfile(jobname,ctxdata,kindofrun,currentrun,finalrun)
-- take jobname from ctx
local f = io.open(jobname..".top","w")
if f then
- local finalrun, kindofrun, currentrun = false, 0, 0
local function someflag(flag)
return (ctxdata and ctxdata.flags[flag]) or environment.argument(flag)
end
---~ local someflag = environment.argument
local function setvalue(flag,format,hash,default)
local a = someflag(flag) or default
if a and a ~= "" then
@@ -445,21 +435,23 @@ function scripts.context.multipass.makeoptionfile(jobname,ctxdata)
end
setalways("\\unprotect")
setvalue('output' , "\\setupoutput[%s]", scripts.context.backends, 'pdftex')
- setalways( "\\setupsystem[\\c!n=%s,\\c!m=%s]", kindofrun, currentrun)
+ setalways( "\\setupsystem[\\c!n=%s,\\c!m=%s]", kindofrun or 0, currentrun or 0)
setalways( "\\setupsystem[\\c!type=%s]",os.platform)
setfixed ("batchmode" , "\\batchmode")
setfixed ("nonstopmode" , "\\nonstopmode")
setfixed ("tracefiles" , "\\tracefilestrue")
setfixed ("paranoid" , "\\def\\maxreadlevel{1}")
setvalues("modefile" , "\\readlocfile{%s}{}{}")
+ setvalue ("inputfile" , "\\setupsystem[inputfile=%s]")
setvalue ("result" , "\\setupsystem[file=%s]")
setvalues("path" , "\\usepath[%s]")
setfixed ("color" , "\\setupcolors[\\c!state=\\v!start]")
- setfixed ("nompmode" , "\\runMPgraphicsfalse") -- obsolete, we assume runtime mp graphics
- setfixed ("nomprun" , "\\runMPgraphicsfalse") -- obsolete, we assume runtime mp graphics
- setfixed ("automprun" , "\\runMPgraphicsfalse") -- obsolete, we assume runtime mp graphics
+ -- setfixed ("nompmode" , "\\runMPgraphicsfalse") -- obsolete, we assume runtime mp graphics
+ -- setfixed ("nomprun" , "\\runMPgraphicsfalse") -- obsolete, we assume runtime mp graphics
+ -- setfixed ("automprun" , "\\runMPgraphicsfalse") -- obsolete, we assume runtime mp graphics
setfixed ("fast" , "\\fastmode\n")
setfixed ("silentmode" , "\\silentmode\n")
+ setfixed ("nostats" , "\\nomkivstatistics\n")
setvalue ("separation" , "\\setupcolors[\\c!split=%s]")
setvalue ("setuppath" , "\\setupsystem[\\c!directory={%s}]")
setfixed ("noarrange" , "\\setuparranging[\\v!disable]")
@@ -468,7 +460,7 @@ function scripts.context.multipass.makeoptionfile(jobname,ctxdata)
end
setvalue ("arguments" , "\\setupenv[%s]")
setvalue ("randomseed" , "\\setupsystem[\\c!random=%s]")
- setvalues("modes" , "\\enablemode[%s]")
+--~ setvalues("modes" , "\\enablemode[%s]")
setvalues("mode" , "\\enablemode[%s]")
setvalues("filters" , "\\useXMLfilter[%s]")
setvalues("usemodules" , "\\usemodule[%s]")
@@ -480,8 +472,8 @@ function scripts.context.multipass.makeoptionfile(jobname,ctxdata)
setvalues(ctxdata.environments, "\\environment %s ")
end
-- done
- setalways( "\\protect")
- setalways( "\\endinput")
+ setalways("\\protect")
+ setalways("\\endinput")
f:close()
end
end
@@ -509,6 +501,13 @@ scripts.context.xmlsuffixes = table.tohash {
"xml",
}
+scripts.context.beforesuffixes = {
+ "tuo", "tuc"
+}
+scripts.context.aftersuffixes = {
+ "pdf", "tuo", "tuc", "log"
+}
+
function scripts.context.run(ctxdata)
local function makestub(format,filename)
local stubname = file.replacesuffix(file.basename(filename),'run')
@@ -530,9 +529,9 @@ function scripts.context.run(ctxdata)
end
local files = environment.files
if #files > 0 then
- input.identify_cnf(instance)
- input.load_cnf(instance)
- input.expand_variables(instance)
+ input.identify_cnf()
+ input.load_cnf()
+ input.expand_variables()
local formatname = "cont-en"
local formatfile, scriptfile = input.locate_format(formatname)
if formatfile and scriptfile then
@@ -542,26 +541,59 @@ function scripts.context.run(ctxdata)
if pathname == "" then
filename = "./" .. filename
end
- -- also other stubs
- if environment.argument("forcexml") or scripts.context.xmlsuffixes[file.extname(filename) or "?"] then -- mkii
- filename = makestub("\\processXMLfilegrouped{%s}",filename)
- elseif environment.argument("processxml") then -- mkiv
- filename = makestub("\\xmlprocess{%s}",filename)
+ -- we default to mkiv xml !
+ if scripts.context.xmlsuffixes[file.extname(filename) or "?"] or environment.argument("forcexml") then
+ if environment.argument("mkii") then
+ filename = makestub("\\processXMLfilegrouped{%s}",filename)
+ else
+ filename = makestub("\\xmlprocess{\\xmldocument}{%s}{}",filename)
+ end
+ end
+ --
+ -- todo: also other stubs
+ --
+ local resultname, oldbase, newbase = environment.argument("result"), "", ""
+ if type(resultname) == "string" then
+ oldbase = file.removesuffix(jobname)
+ newbase = file.removesuffix(resultname)
+ if oldbase ~= newbase then
+ for _, suffix in pairs(scripts.context.beforesuffixes) do
+ local oldname = file.addsuffix(oldbase,suffix)
+ local newname = file.addsuffix(newbase,suffix)
+ os.remove(oldname)
+ os.rename(newname,oldname)
+ end
+ else
+ resultname = nil
+ end
+ else
+ resultname = nil
end
--
if environment.argument("autopdf") then
os.spawn(string.format('pdfclose --file "%s" 2>&1', file.replacesuffix(filename,"pdf")))
+ if resultname then
+ os.spawn(string.format('pdfclose --file "%s" 2>&1', file.replacesuffix(resultname,"pdf")))
+ end
end
--
local command = "luatex --fmt=" .. string.quote(formatfile) .. " --lua=" .. string.quote(scriptfile) .. " " .. string.quote(filename)
local oldhash, newhash = scripts.context.multipass.hashfiles(jobname), { }
- scripts.context.multipass.makeoptionfile(jobname,ctxdata)
- for i=1, scripts.context.multipass.nofruns do
- input.report(string.format("run %s: %s",i,command))
- local returncode = os.spawn(command)
- input.report("return code: " .. returncode)
- if returncode > 0 then
- input.report("fatal error, run aborted")
+ local once = environment.argument("once")
+ local maxnofruns = (once and 1) or scripts.context.multipass.nofruns
+ for i=1,maxnofruns do
+ -- 1:first run, 2:successive run, 3:once, 4:last of maxruns
+ local kindofrun = (once and 3) or (i==1 and 1) or (i==maxnofruns and 4) or 2
+ scripts.context.multipass.makeoptionfile(jobname,ctxdata,kindofrun,i,false) -- kindofrun, currentrun, final
+ input.report("run %s: %s",i,command)
+ local returncode, errorstring = os.spawn(command)
+ if not returncode then
+ input.report("fatal error, message: %s",errorstring or "?")
+ os.exit(1)
+ break
+ elseif returncode > 0 then
+ input.report("fatal error, code: %s",returncode or "?")
+ os.exit(returncode)
break
else
scripts.context.multipass.copyluafile(jobname)
@@ -575,25 +607,63 @@ function scripts.context.run(ctxdata)
end
end
--
- -- todo: result
+ -- todo: extra arrange run
+ --
+ if environment.argument("purge") then
+ scripts.context.purge_job(filename)
+ elseif environment.argument("purgeall") then
+ scripts.context.purge_job(filename,true)
+ end
--
+ if resultname then
+ for _, suffix in pairs(scripts.context.aftersuffixes) do
+ local oldname = file.addsuffix(oldbase,suffix)
+ local newname = file.addsuffix(newbase,suffix)
+ os.remove(newname)
+ os.rename(oldname,newname)
+ end
+ input.report("result renamed to: %s",newbase)
+ end
if environment.argument("autopdf") then
- os.spawn(string.format('pdfopen --file "%s" 2>&1', file.replacesuffix(filename,"pdf")))
+ if resultname then
+ os.spawn(string.format('pdfopen --file "%s" 2>&1', file.replacesuffix(resultname,"pdf")))
+ else
+ os.spawn(string.format('pdfopen --file "%s" 2>&1', file.replacesuffix(filename,"pdf")))
+ end
end
--
end
else
input.verbose = true
- input.report("error", "no format found with name " .. formatname)
+ input.report("error, no format found with name: %s",formatname)
end
end
end
+local fallback = {
+ en = "cont-en",
+ uk = "cont-uk",
+ de = "cont-de",
+ fr = "cont-fr",
+ nl = "cont-nl",
+ cz = "cont-cz",
+ it = "cont-it",
+ ro = "cont-ro",
+}
+
+local defaults = {
+ "cont-en",
+ "cont-nl",
+ "mptopdf",
+ "plain"
+}
+
function scripts.context.make()
- local list = (environment.files[1] and environment.files) or { "cont-en", "cont-nl", "mptopdf" }
+ local list = (environment.files[1] and environment.files) or defaults
for _, name in ipairs(list) do
+ name = fallback[name] or name
local command = "luatools --make --compile " .. name
- input.report("running command: " .. command)
+ input.report("running command: %s",command)
os.spawn(command)
end
end
@@ -601,7 +671,7 @@ end
function scripts.context.generate()
-- hack, should also be a shared function
local command = "luatools --generate "
- input.report("running command: " .. command)
+ input.report("running command: %s",command)
os.spawn(command)
end
@@ -613,14 +683,14 @@ function scripts.context.ctx()
end
function scripts.context.version()
- local name = input.find_file(instance,"context.tex")
+ local name = input.find_file("context.tex")
if name ~= "" then
- input.report(string.format("main context file: %s",name))
+ input.report("main context file: %s",name)
local data = io.loaddata(name)
if data then
local version = data:match("\\edef\\contextversion{(.-)}")
if version then
- input.report(string.format("current version : %s",version))
+ input.report("current version: %s",version)
else
input.report("context version: unknown, no timestamp found")
end
@@ -632,10 +702,87 @@ function scripts.context.version()
end
end
+local generic_files = {
+ "texexec.tex", "texexec.tui", "texexec.tuo",
+ "texexec.tuc", "texexec.tua",
+ "texexec.ps", "texexec.pdf", "texexec.dvi",
+ "cont-opt.tex", "cont-opt.bak"
+}
+
+local obsolete_results = {
+ "dvi",
+}
+
+local temporary_runfiles = {
+ "tui", "tua", "tup", "ted", "tes", "top",
+ "log", "tmp", "run", "bck", "rlg",
+ "mpt", "mpx", "mpd", "mpo", "mpb",
+ "ctl",
+}
+
+local persistent_runfiles = {
+ "tuo", "tub", "top", "tuc"
+}
+
+local function purge_file(dfile,cfile)
+ if cfile and lfs.isfile(cfile) then
+ if os.remove(dfile) then
+ return file.basename(dfile)
+ end
+ else
+ if os.remove(dfile) then
+ return file.basename(dfile)
+ end
+ end
+end
+
+function scripts.context.purge_job(jobname,all)
+ 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)
+ end
+ end
+ if #deleted > 0 then
+ input.report("purged files: %s", table.join(deleted,", "))
+ end
+end
+
+function scripts.context.purge(all)
+ local all = all or environment.argument("all")
+ local pattern = environment.argument("pattern") or "*.*"
+ local files = dir.glob(pattern)
+ local obsolete = table.tohash(obsolete_results)
+ local temporary = table.tohash(temporary_runfiles)
+ local persistent = table.tohash(persistent_runfiles)
+ local generic = table.tohash(generic_files)
+ local deleted = { }
+ for _, name in ipairs(files) do
+ local suffix = file.extname(name)
+ local basename = file.basename(name)
+ if obsolete[suffix] or temporary[suffix] or persistent[suffix] or generic[basename] then
+ deleted[#deleted+1] = purge_file(name)
+ end
+ end
+ if #deleted > 0 then
+ input.report("purged files: %s", table.join(deleted,", "))
+ end
+end
+
+--~ purge_for_files("test",true)
+--~ purge_all_files()
+
function scripts.context.touch()
if environment.argument("expert") then
local function touch(name,pattern)
- local name = input.find_file(instance,name)
+ local name = input.find_file(name)
local olddata = io.loaddata(name)
if olddata then
local oldversion, newversion = "", os.date("%Y.%M.%d %H:%m")
@@ -656,12 +803,12 @@ function scripts.context.touch()
end
local done, oldversion, newversion, foundname = touch("context.tex", "(\\edef\\contextversion{)(.-)(})")
if done then
- input.report(string.format("old version : %s", oldversion))
- input.report(string.format("new version : %s", newversion))
- input.report(string.format("touched file: %s", foundname))
+ input.report("old version : %s", oldversion)
+ input.report("new version : %s", newversion)
+ input.report("touched file: %s", foundname)
local ok, _, _, foundname = touch("cont-new.tex", "(\\newcontextversion{)(.-)(})")
if ok then
- input.report(string.format("touched file: %s", foundname))
+ input.report("touched file: %s", foundname)
end
end
end
@@ -671,18 +818,22 @@ function scripts.context.timed(action)
input.starttiming(scripts.context)
action()
input.stoptiming(scripts.context)
- input.report("total runtime: " .. input.elapsedtime(scripts.context))
+ input.report("total runtime: %s",input.elapsedtime(scripts.context))
end
banner = banner .. " | context tools "
messages.help = [[
--run process (one or more) files (default action)
---make create context formats formats
+--make create context formats
--generate generate file database etc.
--ctx=name use ctx file
--version report installed context version
---autopdf open pdf file afterwards
+--forcexml force xml stub (optional flag: --mkii)
+--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
--expert expert options
]]
@@ -703,18 +854,26 @@ if environment.argument("run") then
scripts.context.timed(scripts.context.run)
elseif environment.argument("make") then
scripts.context.timed(scripts.context.make)
+elseif environment.argument("generate") then
+ scripts.context.timed(scripts.context.generate)
elseif environment.argument("ctx") then
scripts.context.timed(scripts.context.ctx)
elseif environment.argument("version") then
scripts.context.version()
elseif environment.argument("touch") then
scripts.context.touch()
-elseif environment.argument("help") then
- input.help(banner,messages.help)
elseif environment.argument("expert") then
input.help(banner,messages.expert)
+elseif environment.argument("help") then
+ input.help(banner,messages.help)
elseif environment.files[1] then
scripts.context.timed(scripts.context.run)
+elseif environment.argument("purge") then
+ -- only when no filename given, supports --pattern
+ scripts.context.purge()
+elseif environment.argument("purgeall") then
+ -- only when no filename given, supports --pattern
+ scripts.context.purge(true)
else
input.help(banner,messages.help)
end
diff --git a/scripts/context/lua/mtx-convert.lua b/scripts/context/lua/mtx-convert.lua
index 1bfc10c0f..eca050f29 100644
--- a/scripts/context/lua/mtx-convert.lua
+++ b/scripts/context/lua/mtx-convert.lua
@@ -14,30 +14,53 @@ do
local gsprogram = (os.platform == "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.epstopdf(inputpath,outputpath,epsname)
- inputpath = inputpath or "."
- outputpath = outputpath or "."
- local oldname = file.join(inputpath,epsname)
- local newname = file.join(outputpath,file.replacesuffix(epsname,"pdf"))
- local et = lfs.attributes(oldname,"modification")
- local pt = lfs.attributes(newname,"modification")
- if not pt or et > pt then
- dir.mkdirs(outputpath)
- local tmpname = file.replacesuffix(newname,"tmp")
- local command = string.format(gstemplate,gsprogram,tmpname,oldname)
- os.spawn(command)
- os.remove(newname)
- os.rename(tmpname,newname)
- end
+ function graphics.converters.eps(oldname,newname)
+ return gstemplate:format(gsprogram,newname,oldname)
+ end
+
+ local improgram = "convert"
+ local imtemplate = {
+ low = "%s -quality 0 -compress zip %s pdf:%s",
+ medium = "%s -quality 75 -compress zip %s pdf:%s",
+ high = "%s -quality 100 -compress zip %s pdf:%s",
+ }
+
+ function graphics.converters.jpg(oldname,newname)
+ local ea = environment.arguments
+ local quality = (ea.high and 'high') or (ea.medium and 'medium') or (ea.low and 'low') or 'high'
+ return imtemplate[quality]:format(improgram,oldname,newname)
end
+ graphics.converters.tif = graphics.converters.jpg
+ graphics.converters.tiff = graphics.converters.jpg
+ graphics.converters.png = graphics.converters.jpg
+
function graphics.converters.convertpath(inputpath,outputpath)
- for name in lfs.dir(inputpath or ".") do
+ inputpath = inputpath or "."
+ outputpath = outputpath or "."
+ for name in lfs.dir(inputpath) do
+ local suffix = file.extname(name)
if name:find("%.$") then
-- skip . and ..
- elseif name:find("%.eps$") then
- graphics.converters.epstopdf(inputpath,outputpath, name)
- elseif lfs.attributes(inputpath .. "/".. name,"mode") == "directory" then
+ elseif graphics.converters[suffix] then
+ local oldname = file.join(inputpath,name)
+ local newname = file.join(outputpath,file.replacesuffix(name,"pdf"))
+ local et = lfs.attributes(oldname,"modification")
+ local pt = lfs.attributes(newname,"modification")
+ if not pt or et > pt then
+ dir.mkdirs(outputpath)
+ local tmpname = file.replacesuffix(newname,"tmp")
+ local command = graphics.converters[suffix](oldname,tmpname)
+ input.report("command: %s",command)
+ io.flush()
+ os.spawn(command)
+ os.remove(newname)
+ os.rename(tmpname,newname)
+ if lfs.attributes(newname,"size") == 0 then
+ os.remove(newname)
+ end
+ end
+ elseif lfs.isdir(inputpath .. "/".. name) then
graphics.converters.convertpath(inputpath .. "/".. name,outputpath .. "/".. name)
end
end
@@ -45,8 +68,6 @@ do
end
-texmf.instance = instance -- we need to get rid of this / maybe current instance in global table
-
scripts = scripts or { }
scripts.convert = scripts.convert or { }
diff --git a/scripts/context/lua/mtx-fonts.lua b/scripts/context/lua/mtx-fonts.lua
index 395e9764e..c9f1d2f18 100644
--- a/scripts/context/lua/mtx-fonts.lua
+++ b/scripts/context/lua/mtx-fonts.lua
@@ -6,15 +6,13 @@ if not modules then modules = { } end modules ['mtx-fonts'] = {
license = "see context related readme files"
}
-dofile(input.find_file(instance,"font-syn.lua"))
-
-texmf.instance = instance -- we need to get rid of this / maybe current instance in global table
+dofile(input.find_file("font-syn.lua"))
scripts = scripts or { }
scripts.fonts = scripts.fonts or { }
-function scripts.fonts.reload()
- fonts.names.load(true)
+function scripts.fonts.reload(verbose)
+ fonts.names.load(true,verbose)
end
function scripts.fonts.list(pattern,reload,all)
@@ -42,7 +40,8 @@ function scripts.fonts.list(pattern,reload,all)
end)
action(function(v,n,f,s)
if s then s = "(sub)" else s = "" end
- print(string.format("%s %s %s %s",v:padd(w[1]," "),n:padd(w[2]," "),f:padd(w[3]," "), s))
+ 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
end
@@ -51,13 +50,13 @@ function scripts.fonts.save(name,sub)
local function save(savename,fontblob)
if fontblob then
savename = savename:lower() .. ".lua"
- logs.report("fontsave","saving data in " .. savename)
+ logs.report("fontsave","saving data in %s",savename)
table.tofile(savename,fontforge.to_table(fontblob),"return")
fontforge.close(fontblob)
end
end
if name and name ~= "" then
- local filename = input.find_file(texmf.instance,name) -- maybe also search for opentype
+ local filename = input.find_file(name) -- maybe also search for opentype
if filename and filename ~= "" then
local suffix = file.extname(filename)
if suffix == 'ttf' or suffix == 'otf' or suffix == 'ttc' then
@@ -88,7 +87,8 @@ messages.help = [[
]]
if environment.argument("reload") then
- scripts.fonts.reload()
+ local verbose = environment.argument("verbose")
+ scripts.fonts.reload(verbose)
elseif environment.argument("list") then
local pattern = environment.argument("pattern") or environment.files[1] or ""
local all = environment.argument("all")
diff --git a/scripts/context/lua/mtx-grep.lua b/scripts/context/lua/mtx-grep.lua
new file mode 100644
index 000000000..18e36d2ea
--- /dev/null
+++ b/scripts/context/lua/mtx-grep.lua
@@ -0,0 +1,80 @@
+if not modules then modules = { } end modules ['mtx-babel'] = {
+ 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"
+}
+
+scripts = scripts or { }
+scripts.grep = scripts.grep or { }
+
+banner = banner .. " | simple grepper "
+
+function scripts.grep.find(pattern, files, offset)
+ if pattern and pattern ~= "" then
+ local format = string.format
+ input.starttiming(scripts.grep)
+ local count, nofmatches, noffiles, nofmatchedfiles = environment.argument("count"), 0, 0, 0
+ local function grep(name)
+ local data = io.loaddata(name)
+ if data then
+ noffiles = noffiles + 1
+ local n, m = 0, 0
+ for line in data:gmatch("[^\n]+") do -- faster than loop over lines
+ n = n + 1
+ if line:find(pattern) then
+ m = m + 1
+ if not count then
+ input.log(format("%s %s: %s",name,n,line))
+ io.flush()
+ end
+ end
+ end
+ if count and m > 0 then
+ nofmatches = nofmatches + m
+ nofmatchedfiles = nofmatchedfiles + 1
+ input.log(format("%s: %s",name,m))
+ io.flush()
+ end
+ end
+ end
+--~ for i=offset or 1, #files do
+--~ local filename = files[i]
+--~ if filename:find("%*") then
+--~ for _, name in ipairs(dir.glob(filename)) do
+--~ grep(name)
+--~ end
+--~ else
+--~ grep(filename)
+--~ end
+--~ end
+ for i=offset or 1, #files do
+ for _, name in ipairs(dir.glob(files[i])) do
+ grep(name)
+ end
+ end
+ input.stoptiming(scripts.grep)
+ if count and nofmatches > 0 then
+ input.log(format("\nfiles: %s, matches: %s, matched files: %s, runtime: %0.3f seconds",noffiles,nofmatches,nofmatchedfiles,input.loadtime(scripts.grep)))
+ end
+ end
+end
+
+messages.help = [[
+--pattern search for pattern (optional)
+--count count matches only
+]]
+
+input.verbose = true
+
+local pattern = environment.argument("pattern")
+local files = environment.files and #environment.files > 0 and environment.files
+
+if pattern and files then
+ scripts.grep.find(pattern, files)
+elseif files then
+ scripts.grep.find(files[1], files, 2)
+else
+ input.help(banner,messages.help)
+end
diff --git a/scripts/context/lua/mtx-mptopdf.lua b/scripts/context/lua/mtx-mptopdf.lua
new file mode 100644
index 000000000..0c685a249
--- /dev/null
+++ b/scripts/context/lua/mtx-mptopdf.lua
@@ -0,0 +1,138 @@
+if not modules then modules = { } end modules ['mtx-mptopdf'] = {
+ version = 1.303,
+ comment = "companion to mtxrun.lua",
+ author = "Taco Hoekwater, Elvenkind BV, Dordrecht NL",
+ copyright = "Elvenkind BV / ConTeXt Development Team",
+ license = "see context related readme files"
+}
+
+scripts = scripts or { }
+scripts.mptopdf = scripts.mptopdf or { }
+scripts.mptopdf.aux = scripts.mptopdf.aux or { }
+
+do
+ -- setup functions and variables here
+
+ local dosish, miktex, escapeshell = false, false, false
+
+ if os.platform == 'windows' then
+ dosish = true
+ if environment.TEXSYSTEM and environment.TEXSYSTEM:find("miktex") then
+ miktex = true
+ 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)
+ local name, suffix = file.nameonly(fname), file.extname(fname)
+ local pdfsrc = name .. ".pdf"
+ if lfs.isfile(pdfsrc) then
+ pdfdest = name .. "-" .. suffix .. ".pdf"
+ os.rename(pdfsrc, pdfdest)
+ if lfs.isfile(pdfsrc) then -- rename failed
+ file.copy(pdfsrc, pdfdest)
+ end
+ done = 1
+ end
+ 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
+ else
+ if latex then
+ mpbin = "mpost --mem=mpost"
+ else
+ mpbin = "texexec --mptex"
+ end
+ end
+ local runner = mpbin .. rest .. fn
+ input.report("running: %s\n", runner)
+ return (os.execute(runner))
+ end
+
+end
+
+function scripts.mptopdf.convertall()
+ local rawmp = environment.arguments.rawmp or false
+ local metafun = environment.arguments.metafun or false
+ local latex = environment.arguments.latex or false
+ local files = dir.glob(environment.files)
+ if #files > 0 then
+ local fn = files[1]
+ if #files == 1 and fn:find("%.mp$") then
+ latex = scripts.mptopdf.aux.find_latex(fn) or latex
+ end
+ if scripts.mptopdf.aux.make_mps(fn,latex,rawmp,metafun) then
+ files = dir.glob(file.nameonly(fn) .. ".*") -- reset
+ else
+ input.report("error while processing mp file '%s'", fn)
+ exit(1)
+ end
+ local report = { }
+ for _,fn in ipairs(files) do
+ local success, name = scripts.mptopdf.aux.do_convert(fn)
+ if success > 0 then
+ report[#report+1] = { fn, name }
+ end
+ end
+ if #report > 0 then
+ input.report("number of converted files: %i", #report)
+ input.report("")
+ for _, r in ipairs(report) do
+ input.report("%s => %s", r[1], r[2])
+ end
+ else
+ input.report("no input files match %s", table.concat(files,' '))
+ end
+ else
+ input.report("no files match %s", table.concat(environment.files,' '))
+ end
+end
+
+banner = banner .. " | mptopdf converter "
+
+messages.help = [[
+--rawmp raw metapost run
+--metafun use metafun instead of plain
+--latex force --tex=latex
+]]
+
+input.verbose = true
+
+if environment.files[1] then
+ scripts.mptopdf.convertall()
+else
+ if not environment.arguments.help then
+ input.report("provide MP output file (or pattern)")
+ input.report("")
+ end
+ input.help(banner,messages.help)
+end
diff --git a/scripts/context/lua/mtx-patterns.lua b/scripts/context/lua/mtx-patterns.lua
new file mode 100644
index 000000000..be190af43
--- /dev/null
+++ b/scripts/context/lua/mtx-patterns.lua
@@ -0,0 +1,362 @@
+if not modules then modules = { } end modules ['mtx-patterns'] = {
+ 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"
+}
+
+local format = string.format
+
+scripts = scripts or { }
+scripts.patterns = scripts.patterns or { }
+
+scripts.patterns.list = {
+ { "??", "hyph-ar.tex", "arabic" },
+ { "bg", "hyph-bg.tex", "bulgarian" },
+-- { "ca", "hyph-ca.tex", "" },
+ { "??", "hyph-cop.tex", "coptic" },
+ { "cs", "hyph-cs.tex", "czech" },
+ { "??", "hyph-cy.tex", "welsh" },
+ { "da", "hyph-da.tex", "danish" },
+ { "de", "hyph-de-1901.tex", "german, old spelling" },
+ { "deo", "hyph-de-1996.tex", "german, new spelling" },
+--~ { "??", "hyph-el-monoton.tex", "" },
+--~ { "??", "hyph-el-polyton.tex", "" },
+--~ { "agr", "hyph-grc", "ancient greek" },
+--~ { "???", "hyph-x-ibycus", "ancient greek in ibycus encoding" },
+--~ { "gr", "", "" },
+ { "??", "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" },
+ { "fi", "hyph-fi.tex", "finnish" },
+ { "fr", "hyph-fr.tex", "french" },
+-- { "??", "hyph-ga.tex", "" },
+-- { "??", "hyph-gl.tex", "" },
+-- { "??", "hyph-grc.tex", "" },
+ { "hr", "hyph-hr.tex", "croatian" },
+ { "??", "hyph-hsb.tex", "upper sorbian" },
+ { "hu", "hyph-hu.tex", "hungarian" },
+ { "??", "hyph-ia.tex", "interlingua" },
+ { "??", "hyph-id.tex", "indonesian" },
+ { "??", "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)" },
+ { "nb", "hyph-nb.tex", "norwegian bokmål" },
+ { "nl", "hyph-nl.tex", "dutch" },
+ { "nn", "hyph-nn.tex", "norwegian nynorsk" },
+ { "pl", "hyph-pl.tex", "polish" },
+ { "pt", "hyph-pt.tex", "portuguese" },
+ { "ro", "hyph-ro.tex", "romanian" },
+ { "ru", "hyph-ru.tex", "russian" },
+ { "sk", "hyph-sk.tex", "" },
+ { "sl", "hyph-sl.tex", "slovenian" },
+ { "??", "hyph-sr-cyrl.tex", "serbian" },
+ { "sv", "hyph-sv.tex", "swedish" },
+ { "tr", "hyph-tr.tex", "turkish" },
+ { "??", "hyph-uk.tex", "ukrainian" },
+ { "??", "hyph-zh-latn.tex", "zh-latn, chinese Pinyin" },
+}
+
+
+-- stripped down from lpeg example:
+
+local utf = unicode.utf8
+
+local cont = lpeg.R("\128\191") -- continuation byte
+
+local utf8 = lpeg.R("\0\127")
+ + lpeg.R("\194\223") * cont
+ + lpeg.R("\224\239") * cont * cont
+ + lpeg.R("\240\244") * cont * cont * cont
+
+local validutf = (utf8^0/function() return true end) * (lpeg.P(-1)/function() return false end)
+
+function utf.check(str)
+ return lpeg.match(validutf,str)
+end
+
+local permitted_commands = table.tohash {
+ "message",
+ "endinput"
+}
+
+local permitted_characters = table.tohash {
+ 0x0027, -- apostrofe
+ 0x002D, -- hyphen
+}
+
+function scripts.patterns.load(path,name,mnemonic,fullcheck)
+ local fullname = file.join(path,name)
+ local data = io.loaddata(fullname) or ""
+ local byte, char = utf.byte, utf.char
+ if data ~= "" then
+ data = data:gsub("\\input ([^ \n\r]+)", function(subname)
+ local subname = file.addsuffix(subname,"tex")
+ local subfull = file.join(file.dirname(name),subname)
+ local subdata = io.loaddata(subfull) or ""
+ if subefile == "" then
+ if mnemonic then
+ input.report("no subfile %s for language %s",subname,mnemonic)
+ else
+ input.report("no subfile %s",name)
+ end
+ end
+ return subdata
+ end)
+ local comment = data:match("^(.-)[\n\r]\\patterns") or ""
+ local n, okay = 0, true
+ local cd = characters.data
+ for line in data:gmatch("[^ \n\r]+") do
+ local ok = utf.check(line)
+ n = n + 1
+ if not ok then
+ okay = false
+ line = line:gsub("%%","%%%%")
+ if fullcheck then
+ if mnemonic then
+ input.report("invalid utf in language %s, file %s, line %s: %s",mnemonic,name,n,line)
+ else
+ input.report("invalid utf in file %s, line %s: %s",name,n,line)
+ end
+ else
+ if mnemonic then
+ input.report("file %s for %s contains invalid utf",name,mnemonic)
+ else
+ input.report("file %s contains invalid utf",name)
+ end
+ break
+ end
+ end
+ end
+ local c, h = { }, { }
+ for line in data:gmatch("[^\n\r]+") do
+ local txt, cmt = line:match("^(.-)%%(.*)$")
+ if not txt then
+ txt, cmt = line, ""
+ end
+ for s in txt:gmatch("\\([a-zA-Z]+)") do
+ h[s] = (h[s] or 0) + 1
+ end
+ for s in cmt:gmatch("\\([a-zA-Z]+)") do
+ c[s] = (c[s] or 0) + 1
+ end
+ end
+ h.patterns = nil
+ h.hyphenation = nil
+ for k, v in pairs(h) do
+ if not permitted_commands[k] then okay = false end
+ if mnemonic then
+ input.report("command \\%s found in language %s, file %s, n=%s",k,mnemonic,name,v)
+ else
+ input.report("command \\%s found in file %s, n=%s",k,name,v)
+ end
+ end
+ if not environment.argument("fast") then
+ for k, v in pairs(c) do
+ if mnemonic then
+ input.report("command \\%s found in comment of language %s, file %s, n=%s",k,mnemonic,name,v)
+ else
+ input.report("command \\%s found in comment of file %s, n=%s",k,name,v)
+ end
+ end
+ end
+ data = data:gsub("%%.-[\n\r]","")
+ data = data:gsub(" *[\n\r]+","\n")
+ local patterns = data:match("\\patterns[%s]*{[%s]*(.-)[%s]*}") or ""
+ local hyphenations = data:match("\\hyphenation[%s]*{[%s]*(.-)[%s]*}") or ""
+ patterns = patterns:gsub(" +","\n")
+ hyphenations = hyphenations:gsub(" +","\n")
+ local p, h = { }, { }
+ local pats, hyps = { } , { }
+ local pused, hused = { } , { }
+ local period = byte(".")
+ for line in patterns:gmatch("[^ \n\r]+") do
+ local ok = true
+ for b in line:utfvalues() do
+ if b == period then
+ -- ok
+ else
+ local ct = cd[b].category
+ if ct == "lu" or ct == "ll" then
+ pused[char(b)] = true
+ elseif ct == "nd" then
+ -- ok
+ else
+ p[b] = (p[b] or 0) + 1
+ ok = false
+ end
+ end
+ end
+ if ok then
+ pats[#pats+1] = line
+ end
+ end
+ local hyphen = byte("-")
+ for line in hyphenations:gmatch("[^ \n\r]+") do
+ local ok = true
+ for b in line:utfvalues() do
+ if b == hyphen then
+ -- ok
+ else
+ local ct = cd[b].category
+ if ct == "lu" or ct == "ll" then
+ hused[char(b)] = true
+ else
+ h[b] = (h[b] or 0) + 1
+ ok = false
+ end
+ end
+ end
+ if ok then
+ hyps[#hyps+1] = line
+ end
+ end
+ local stripped = { }
+ for k, v in pairs(p) do
+ if mnemonic then
+ input.report("invalid character %s (0x%04X) in patterns of language %s, file %s, n=%s",char(k),k,mnemonic,name,v)
+ else
+ input.report("invalid character %s (0x%04X) in patterns of file %s, n=%s",char(k),k,name,v)
+ end
+ if not permitted_characters[k] then
+ okay = false
+ else
+ stripped[k] = true
+ end
+ end
+ for k, v in pairs(h) do
+ if mnemonic then
+ input.report("invalid character %s (0x%04X) in exceptions of language %s, file %s, n=%s",char(k),k,mnemonic,name,v)
+ else
+ input.report("invalid character %s (0x%04X) in exceptions of file %s, n=%s",char(k),k,name,v)
+ end
+ if not permitted_characters[k] then
+ okay = false
+ else
+ stripped[k] = true
+ end
+ end
+ local stripset = ""
+ for k, v in pairs(stripped) do
+ input.report("entries that contain character %s will be omitted",char(k))
+ stripset = stripset .. "%" .. char(k)
+ end
+ return okay, pats, hyps, comment, stripset, pused, hused
+ else
+ if mnemonic then
+ input.report("no file %s for language %s",fullname,mnemonic)
+ else
+ input.report("no file %s",fullname)
+ end
+ return false, { }, { }, "", "", { }, { }
+ end
+end
+
+function scripts.patterns.save(destination,mnemonic,patterns,hyphenations,comment,stripped,pused,hused)
+ local nofpatterns = #patterns
+ local nofhyphenations = #hyphenations
+ local pu = table.concat(table.sortedkeys(pused), " ")
+ local hu = table.concat(table.sortedkeys(hused), " ")
+ input.report("language %s has %s patterns and %s exceptions",mnemonic,nofpatterns,nofhyphenations)
+ if mnemonic ~= "??" then
+ local rmefile = file.join(destination,"lang-"..mnemonic..".rme")
+ local patfile = file.join(destination,"lang-"..mnemonic..".pat")
+ local hypfile = file.join(destination,"lang-"..mnemonic..".hyp")
+ local topline = "% generated by mtxrun --script pattern --convert"
+ local banner = "% for comment and copyright, see " .. rmefile
+ input.report("saving language data for %s",mnemonic)
+ if not comment or comment == "" then comment = "% no comment" end
+ if not type(destination) == "string" then destination = "." end
+ os.remove(rmefile)
+ os.remove(patfile)
+ os.remove(hypfile)
+ io.savedata(rmefile,format("%s\n\n%s",topline,comment))
+ io.savedata(patfile,format("%s\n\n%s\n\n%% used: %s\n\n\\patterns{\n%s}",topline,banner,pu,table.concat(patterns,"\n")))
+ io.savedata(hypfile,format("%s\n\n%s\n\n%% used: %s\n\n\\hyphenation{\n%s}",topline,banner,hu,table.concat(hyphenations,"\n")))
+ end
+end
+
+function scripts.patterns.prepare()
+ dofile(input.find_file("char-def.lua"))
+end
+
+function scripts.patterns.check()
+ local path = environment.argument("path") or "."
+ local found = false
+ local verbose = input.verbose
+ input.verbose = true
+ if #environment.files > 0 then
+ for _, name in ipairs(environment.files) do
+ input.report("checking language file %s", name)
+ local okay = scripts.patterns.load(path,name,nil,not environment.argument("fast"))
+ if #environment.files > 1 then
+ input.report("")
+ end
+ end
+ else
+ for k, v in pairs(scripts.patterns.list) do
+ local mnemonic, name = v[1], v[2]
+ input.report("checking language %s, file %s", mnemonic, name)
+ local okay = scripts.patterns.load(path,name,mnemonic,not environment.argument("fast"))
+ if not okay then
+ input.report("there are errors that need to be fixed")
+ end
+ input.report("")
+ end
+ end
+ input.verbose = verbose
+end
+
+function scripts.patterns.convert()
+ local path = environment.argument("path") or "."
+ local destination = environment.argument("destination") or "."
+ if path == destination then
+ input.report("source path and destination path should differ (use --path and/or --destination)")
+ else
+ local verbose = input.verbose
+ input.verbose = true
+ for k, v in pairs(scripts.patterns.list) do
+ local mnemonic, name = v[1], v[2]
+ input.report("converting language %s, file %s", mnemonic, name)
+ local okay, patterns, hyphenations, comment, stripped, pused, hused = scripts.patterns.load(path,name,false)
+ if okay then
+ scripts.patterns.save(destination,mnemonic,patterns,hyphenations,comment,stripped,pused,hused)
+ else
+ input.report("convertion aborted due to error(s)")
+ end
+ input.report("")
+ end
+ end
+ input.verbose = verbose
+end
+
+banner = banner .. " | pattern tools "
+
+messages.help = [[
+--convert generate context language files (mnemonic driven, if not given then all)
+--check check pattern file (or those used by context when no file given)
+
+--fast only report filenames, no lines
+]]
+
+if environment.argument("check") then
+ scripts.patterns.prepare()
+ scripts.patterns.check()
+elseif environment.argument("convert") then
+ scripts.patterns.prepare()
+ scripts.patterns.convert()
+else
+ input.help(banner,messages.help)
+end
+
+-- mtxrun --script pattern --check hyph-*.tex
+-- 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
diff --git a/scripts/context/lua/mtx-server.lua b/scripts/context/lua/mtx-server.lua
index 293bc0c1c..1df4b4663 100644
--- a/scripts/context/lua/mtx-server.lua
+++ b/scripts/context/lua/mtx-server.lua
@@ -1,82 +1,283 @@
if not modules then modules = { } end modules ['mtx-server'] = {
version = 1.001,
comment = "companion to mtxrun.lua",
- author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
+ author = "Hans Hagen & Taco Hoekwater",
copyright = "PRAGMA ADE / ConTeXt Development Team",
license = "see context related readme files"
}
-texmf.instance = instance -- we need to get rid of this / maybe current instance in global table
-
--- The starting point was stripped down webserver.lua by Samuel
--- Saint-Pettersen (as downloaded on 21-5-2008) which only served
--- html and was not configureable. In due time I will extend the
--- next code. Eventually we may move code to l-server.
-
scripts = scripts or { }
-scripts.webserver = scripts.webserver or {}
+scripts.webserver = scripts.webserver or { }
local socket = require("socket")
+local format = string.format
+
+-- The following two lists are taken from webrick (ruby) and
+-- extended with a few extra suffixes.
+
+local mimetypes = {
+ ai = 'application/postscript',
+ asc = 'text/plain',
+ avi = 'video/x-msvideo',
+ bin = 'application/octet-stream',
+ bmp = 'image/bmp',
+ bz2 = 'application/x-bzip2',
+ cer = 'application/pkix-cert',
+ class = 'application/octet-stream',
+ crl = 'application/pkix-crl',
+ crt = 'application/x-x509-ca-cert',
+ css = 'text/css',
+ dms = 'application/octet-stream',
+ doc = 'application/msword',
+ dvi = 'application/x-dvi',
+ eps = 'application/postscript',
+ etx = 'text/x-setext',
+ exe = 'application/octet-stream',
+ gif = 'image/gif',
+ gz = 'application/x-tar',
+ hqx = 'application/mac-binhex40',
+ htm = 'text/html',
+ html = 'text/html',
+ jpe = 'image/jpeg',
+ jpeg = 'image/jpeg',
+ jpg = 'image/jpeg',
+ lha = 'application/octet-stream',
+ lzh = 'application/octet-stream',
+ mov = 'video/quicktime',
+ mpe = 'video/mpeg',
+ mpeg = 'video/mpeg',
+ mpg = 'video/mpeg',
+ pbm = 'image/x-portable-bitmap',
+ pdf = 'application/pdf',
+ pgm = 'image/x-portable-graymap',
+ png = 'image/png',
+ pnm = 'image/x-portable-anymap',
+ ppm = 'image/x-portable-pixmap',
+ ppt = 'application/vnd.ms-powerpoint',
+ ps = 'application/postscript',
+ qt = 'video/quicktime',
+ ras = 'image/x-cmu-raster',
+ rb = 'text/plain',
+ rd = 'text/plain',
+ rgb = 'image/x-rgb',
+ rtf = 'application/rtf',
+ sgm = 'text/sgml',
+ sgml = 'text/sgml',
+ snd = 'audio/basic',
+ tar = 'application/x-tar',
+ tgz = 'application/x-tar',
+ tif = 'image/tiff',
+ tiff = 'image/tiff',
+ txt = 'text/plain',
+ xbm = 'image/x-xbitmap',
+ xls = 'application/vnd.ms-excel',
+ xml = 'text/xml',
+ xpm = 'image/x-xpixmap',
+ xwd = 'image/x-xwindowdump',
+ zip = 'application/zip',
+}
+
+local messages = {
+ [100] = 'Continue',
+ [101] = 'Switching Protocols',
+ [200] = 'OK',
+ [201] = 'Created',
+ [202] = 'Accepted',
+ [203] = 'Non-Authoritative Information',
+ [204] = 'No Content',
+ [205] = 'Reset Content',
+ [206] = 'Partial Content',
+ [300] = 'Multiple Choices',
+ [301] = 'Moved Permanently',
+ [302] = 'Found',
+ [303] = 'See Other',
+ [304] = 'Not Modified',
+ [305] = 'Use Proxy',
+ [307] = 'Temporary Redirect',
+ [400] = 'Bad Request',
+ [401] = 'Unauthorized',
+ [402] = 'Payment Required',
+ [403] = 'Forbidden',
+ [404] = 'Not Found',
+ [405] = 'Method Not Allowed',
+ [406] = 'Not Acceptable',
+ [407] = 'Proxy Authentication Required',
+ [408] = 'Request Timeout',
+ [409] = 'Conflict',
+ [410] = 'Gone',
+ [411] = 'Length Required',
+ [412] = 'Precondition Failed',
+ [413] = 'Request Entity Too Large',
+ [414] = 'Request-URI Too Large',
+ [415] = 'Unsupported Media Type',
+ [416] = 'Request Range Not Satisfiable',
+ [417] = 'Expectation Failed',
+ [500] = 'Internal Server Error',
+ [501] = 'Not Implemented',
+ [502] = 'Bad Gateway',
+ [503] = 'Service Unavailable',
+ [504] = 'Gateway Timeout',
+ [505] = 'HTTP Version Not Supported',
+}
+
+local handlers = { }
+
+local function errormessage(client,configuration,n)
+ local data = format("%s %s%s %s
",n,messages[n],n,messages[n])
+ input.report("handling error %s: %s",n,messages[n])
+ handlers.generic(client,configuration,data,nil,true)
+end
-local function message(str)
- return string.format("%s
",str)
+function handlers.generic(client,configuration,data,suffix,iscontent)
+ if not iscontent then
+ data = io.loaddata(file.join(configuration.root,data))
+ end
+ if data and data ~= "" then
+ client:send("HTTP/1.1 200 OK\r\n")
+ client:send("Connection: close\r\n")
+ client:send(format("Content-Length: %s\r\n",#data))
+ client:send(format("Content-Type: %s\r\n",(suffix and mimetypes[suffix]) or "text/html"))
+ client:send("\r\n")
+ client:send(data)
+ client:send("\r\n")
+ else
+ errormessage(client,configuration,404)
+ end
+end
+
+--~ return os.date()
+
+--~ return { content = "crap" }
+
+--~ return function(configuration,filename)
+--~ return { content = filename }
+--~ end
+
+function handlers.lua(client,configuration,filename,suffix,iscontent)
+ local filename = file.join(configuration.root,configuration.scripts,filename)
+ -- todo: split url in components, see l-url; rather trivial
+ if lfs.isfile(filename) then
+ local result = loadfile(filename)
+ if result and type(result) == "function" then
+ -- result() should return a table { [type=,] [length=,] content= }, function or string
+ result = result()
+ end
+ if result and type(result) == "function" then
+ result = result(configuration,filename) -- sedond argument will become query
+ end
+ if result and type(result) == "string" then
+ result = { content = result }
+ end
+ if result and type(result) == "table" then
+ if result.content then
+ local suffix = result.type or "text/html"
+ local action = handlers[suffix] or handlers.generic
+ action(client,configuration,filename,suffix,true) -- content
+ elseif result.filename then
+ local suffix = file.extname(filename) or "text/html"
+ local action = handlers[suffix] or handlers.generic
+ action(client,configuration,filename,suffix,false) -- filename
+ else
+ errormessage(client,configuration,404)
+ end
+ else
+ errormessage(client,configuration,500)
+ end
+ else
+ errormessage(client,configuration,404)
+ end
end
+handlers.luc = handlers.lua
+handlers.html = handlers.htm
+
+local indices = { "index.htm", "index.html" }
+
function scripts.webserver.run(configuration)
- local server = assert(socket.bind("*", tonumber(configuration.port or 8080)))
- while true do
+ -- check configuration
+ configuration.port = tonumber(configuration.port or os.getenv("MTX_SERVER_PORT") or 8080) or 8080
+ if not configuration.root or not lfs.isdir(configuration.root) then
+ configuration.root = os.getenv("MTX_SERVER_ROOT") or "."
+ end
+ -- locate root and index file in tex tree
+ if not lfs.isdir(configuration.root) then
+ for _, name in ipairs(indices) do
+ local root = input.resolve("path:" .. name) or ""
+ if root ~= "" then
+ configuration.root = root
+ configuration.index = configuration.index or name
+ break
+ end
+ end
+ end
+ if not configuration.index then
+ for _, name in ipairs(indices) do
+ if lfs.isfile(file.join(configuration.root,name)) then
+ configuration.index = name -- we will prepend the rootpath later
+ break
+ end
+ end
+ configuration.index = configuration.index or "unknown"
+ end
+ configuration.scripts = configuration.scripts or "cgi"
+ -- so far for checks
+ input.report("running at port: %s",configuration.port)
+ input.report("document root: %s",configuration.root)
+ input.report("main index file: %s",configuration.index)
+ input.report("scripts subpath: %s",configuration.scripts)
+ local server = assert(socket.bind("*", configuration.port))
+ while true do -- no multiple clients
local client = server:accept()
client:settimeout(configuration.timeout or 60)
local request, e = client:receive()
if e then
- client:send(message("404 Not Found"))
+ errormessage(client,configuration,404)
else
- -- GET /showcase.pdf HTTP/1.1
+ local from = client:getpeername()
+ input.report("request from: %s",tostring(from))
local filename = request:match("GET (.+) HTTP/.*$") -- todo: more clever
- -- filename = filename:gsub("%%(%d%d)",function(c) return string.char(tonumber(c,16)) end)
- filename = socket.url.unescape(filename)
- if filename == nil or filename == "" then
- filename = configuration.index or "index.html"
- end
- -- todo chunked
- local fullname = file.join(configuration.root,filename)
- local data = io.loaddata(fullname)
- if data and data ~= "" then
- local result
- client:send("HTTP/1.1 200 OK\r\n")
- client:send("Connection: close\r\n")
- if filename:find(".pdf$") then -- todo: special handler
- client:send(string.format("Content-Length: %s\r\n",#data))
- client:send("Content-Type: application/pdf\r\n")
+ if filename then
+ filename = socket.url.unescape(filename)
+ input.report("requested action: %s",filename)
+ if filename:find("%.%.") then
+ filename = nil -- invalid path
+ end
+ if filename == nil or filename == "" or filename == "/" then
+ filename = configuration.index
+ input.report("invalid filename, forcing: %s",filename)
+ end
+ local suffix = file.extname(filename)
+ local action = handlers[suffix] or handlers.generic
+ if action then
+ input.report("performing action: %s",filename)
+ action(client,configuration,filename,suffix,false) -- filename and no content
else
- client:send("Content-Type: text/html\r\n")
+ errormessage(client,configuration,404)
end
- client:send("\r\n")
- client:send(data)
- client:send("\r\n")
else
- client:send(message("404 Not Found"))
+ errormessage(client,configuration,404)
end
end
client:close()
end
end
-
banner = banner .. " | webserver "
messages.help = [[
--start start server
--port port to listen to
--root server root
+--scripts scripts sub path
--index index file
]]
if environment.argument("start") then
scripts.webserver.run {
- port = environment.argument("port") or "8080",
- root = environment.argument("root") or ".", -- "e:/websites/www.pragma-ade.com",
- index = environment.argument("index") or "index.html",
+ port = environment.argument("port"),
+ root = environment.argument("root"), -- "e:/websites/www.pragma-ade.com",
+ index = environment.argument("index"),
+ scripts = environment.argument("scripts") or "cgi",
}
else
input.help(banner,messages.help)
diff --git a/scripts/context/lua/mtx-update.lua b/scripts/context/lua/mtx-update.lua
index 581774f1e..d8a838fec 100644
--- a/scripts/context/lua/mtx-update.lua
+++ b/scripts/context/lua/mtx-update.lua
@@ -11,8 +11,6 @@ if not modules then modules = { } end modules ['mtx-update'] = {
-- Together with Arthur Reutenauer she made sure that it worked well on all
-- platforms that matter.
-texmf.instance = instance -- we need to get rid of this / maybe current instance in global table
-
scripts = scripts or { }
scripts.update = scripts.update or { }
@@ -122,17 +120,23 @@ scripts.update.engines = {
}
scripts.update.platforms = {
- ["mswin"] = "mswin",
- ["windows"] = "mswin",
- ["win32"] = "mswin",
- ["win"] = "mswin",
- ["linux"] = "linux",
- ["freebsd"] = "freebsd",
- ["linux-32"] = "linux",
- ["linux-64"] = "linux-64",
- ["osx"] = "osx-intel",
- ["osx-intel"] = "osx-intel",
- ["osx-ppc"] = "osx-ppc",
+ ["mswin"] = "mswin",
+ ["windows"] = "mswin",
+ ["win32"] = "mswin",
+ ["win"] = "mswin",
+ ["linux"] = "linux",
+ ["freebsd"] = "freebsd",
+ ["linux-32"] = "linux",
+ ["linux-64"] = "linux-64",
+ ["linux32"] = "linux",
+ ["linux64"] = "linux-64",
+ ["osx"] = "osx-intel",
+ ["osx-intel"] = "osx-intel",
+ ["osx-ppc"] = "osx-ppc",
+ ["osx-powerpc"] = "osx-ppc",
+ ["osxintel"] = "osx-intel",
+ ["osxppc"] = "osx-ppc",
+ ["osxpowerpc"] = "osx-ppc",
}
function scripts.update.run(str)
@@ -185,7 +189,8 @@ function scripts.update.synchronize()
local destination = string.format("%s/%s", texroot, collection[2]:gsub("", platform))
destination = destination:gsub("\\","/")
archive = archive:gsub("",version)
- if platform == "windows" or platform == "mswin" then
+--~ if platform == "windows" or platform == "mswin" then
+ if os.currentplatform() == "windows" or os.currentplatform() == "mswin" then
destination = destination:gsub("([a-zA-Z]):/", "/cygdrive/%1/")
end
individual[#individual+1] = { archive, destination }
diff --git a/scripts/context/lua/mtx-watch.lua b/scripts/context/lua/mtx-watch.lua
index f9e81da42..a720fb47a 100644
--- a/scripts/context/lua/mtx-watch.lua
+++ b/scripts/context/lua/mtx-watch.lua
@@ -6,13 +6,30 @@ if not modules then modules = { } end modules ['mtx-watch'] = {
license = "see context related readme files"
}
-texmf.instance = instance -- we need to get rid of this / maybe current instance in global table
-
scripts = scripts or { }
scripts.watch = scripts.watch or { }
do
+ function scripts.watch.save_exa_modes(modes,ctmname)
+ if modes then
+ local t= { }
+ t[#t+1] = "\n"
+ t[#t+1] = ""
+ if modes then
+ for k, v in ipairs(modes) do
+ local key, value = v:match("^(.*):([^:]-)$")
+ if key and value then
+ t[#t+1] = string.format("\t%s",key,value)
+ end
+ end
+ end
+ t[#t+1] = ""
+ 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 ""
@@ -74,12 +91,17 @@ do
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.modes,ctmname)
if pipe then result = os.resultof(command) else result = os.spawn(command) end
lfs.chdir(oldpath)
else
+ scripts.watch.save_exa_modes(joblog.modes,ctmname)
if pipe then result = os.resultof(command) else result = os.spawn(command) end
end
logs.report("watch",string.format("return value: %s", result))
diff --git a/scripts/context/lua/mtxrun.lua b/scripts/context/lua/mtxrun.lua
index 040214178..45a881839 100644
--- a/scripts/context/lua/mtxrun.lua
+++ b/scripts/context/lua/mtxrun.lua
@@ -37,9 +37,10 @@ if not modules then modules = { } end modules ['mtxrun'] = {
-- remember for subruns: _CTX_K_S_#{original}_
-- remember for subruns: TEXMFSTART.#{original} [tex.rb texmfstart.rb]
-banner = "version 1.0.2 - 2007+ - PRAGMA ADE / CONTEXT"
texlua = true
+banner = "version 1.1.0 - 2007+ - PRAGMA ADE / CONTEXT" -- not local
+
-- begin library merge
-- filename : l-string.lua
-- comment : split off from luat-lib
@@ -125,7 +126,7 @@ end
function string:splitchr(chr)
if #self > 0 then
local t = { }
- for s in string.gmatch(self..chr,"(.-)"..chr) do
+ for s in (self..chr):gmatch("(.-)"..chr) do
t[#t+1] = s
end
return t
@@ -134,22 +135,6 @@ function string:splitchr(chr)
end
end
---~ function string.piecewise(str, pat, fnc) -- variant of split
---~ local fpat = "(.-)"..pat
---~ local last_end = 1
---~ local s, e, cap = string.find(str, fpat, 1)
---~ while s ~= nil do
---~ if s~=1 or cap~="" then
---~ fnc(cap)
---~ end
---~ last_end = e+1
---~ s, e, cap = string.find(str, fpat, last_end)
---~ end
---~ if last_end <= #str then
---~ fnc((string.sub(str,last_end)))
---~ end
---~ end
-
function string.piecewise(str, pat, fnc) -- variant of split
for k in string.splitter(str,pat) do fnc(k) end
end
@@ -668,35 +653,283 @@ function table.starts_at(t)
return ipairs(t,1)(t,0)
end
-do
+--~ do
+
+--~ -- one of my first exercises in lua ...
+
+--~ table.serialize_functions = true
+--~ table.serialize_compact = true
+--~ table.serialize_inline = true
+
+--~ local function key(k,noquotes)
+--~ if type(k) == "number" then -- or k:find("^%d+$") then
+--~ return "["..k.."]"
+--~ elseif noquotes and k:find("^%a[%a%d%_]*$") then
+--~ return k
+--~ else
+--~ return '["'..k..'"]'
+--~ end
+--~ end
+
+--~ local function simple_table(t)
+--~ if #t > 0 then
+--~ local n = 0
+--~ for _,v in pairs(t) do
+--~ n = n + 1
+--~ end
+--~ if n == #t then
+--~ local tt = { }
+--~ for i=1,#t do
+--~ local v = t[i]
+--~ local tv = type(v)
+--~ if tv == "number" or tv == "boolean" then
+--~ tt[#tt+1] = tostring(v)
+--~ elseif tv == "string" then
+--~ tt[#tt+1] = ("%q"):format(v)
+--~ else
+--~ tt = nil
+--~ break
+--~ end
+--~ end
+--~ return tt
+--~ end
+--~ end
+--~ return nil
+--~ end
+
+--~ local function serialize(root,name,handle,depth,level,reduce,noquotes,indexed)
+--~ handle = handle or print
+--~ reduce = reduce or false
+--~ if depth then
+--~ depth = depth .. " "
+--~ if indexed then
+--~ handle(("%s{"):format(depth))
+--~ else
+--~ handle(("%s%s={"):format(depth,key(name,noquotes)))
+--~ end
+--~ else
+--~ depth = ""
+--~ local tname = type(name)
+--~ if tname == "string" then
+--~ if name == "return" then
+--~ handle("return {")
+--~ else
+--~ handle(name .. "={")
+--~ end
+--~ elseif tname == "number" then
+--~ handle("[" .. name .. "]={")
+--~ elseif tname == "boolean" then
+--~ if name then
+--~ handle("return {")
+--~ else
+--~ handle("{")
+--~ end
+--~ else
+--~ handle("t={")
+--~ end
+--~ end
+--~ if root and next(root) then
+--~ local compact = table.serialize_compact
+--~ local inline = compact and table.serialize_inline
+--~ local first, last = nil, 0 -- #root cannot be trusted here
+--~ if compact then
+--~ for k,v in ipairs(root) do -- NOT: for k=1,#root do (we need to quit at nil)
+--~ if not first then first = k end
+--~ last = last + 1
+--~ end
+--~ end
+--~ for _,k in pairs(table.sortedkeys(root)) do
+--~ local v = root[k]
+--~ local t = type(v)
+--~ if compact and first and type(k) == "number" and k >= first and k <= last then
+--~ if t == "number" then
+--~ handle(("%s %s,"):format(depth,v))
+--~ elseif t == "string" then
+--~ if reduce and (v:find("^[%-%+]?[%d]-%.?[%d+]$") == 1) then
+--~ handle(("%s %s,"):format(depth,v))
+--~ else
+--~ handle(("%s %q,"):format(depth,v))
+--~ end
+--~ elseif t == "table" then
+--~ if not next(v) then
+--~ handle(("%s {},"):format(depth))
+--~ elseif inline then
+--~ local st = simple_table(v)
+--~ if st then
+--~ handle(("%s { %s },"):format(depth,table.concat(st,", ")))
+--~ else
+--~ serialize(v,k,handle,depth,level+1,reduce,noquotes,true)
+--~ end
+--~ else
+--~ serialize(v,k,handle,depth,level+1,reduce,noquotes,true)
+--~ end
+--~ elseif t == "boolean" then
+--~ handle(("%s %s,"):format(depth,tostring(v)))
+--~ elseif t == "function" then
+--~ if table.serialize_functions then
+--~ handle(('%s loadstring(%q),'):format(depth,string.dump(v)))
+--~ else
+--~ handle(('%s "function",'):format(depth))
+--~ end
+--~ else
+--~ handle(("%s %q,"):format(depth,tostring(v)))
+--~ end
+--~ elseif k == "__p__" then -- parent
+--~ if false then
+--~ handle(("%s __p__=nil,"):format(depth))
+--~ end
+--~ elseif t == "number" then
+--~ handle(("%s %s=%s,"):format(depth,key(k,noquotes),v))
+--~ elseif t == "string" then
+--~ if reduce and (v:find("^[%-%+]?[%d]-%.?[%d+]$") == 1) then
+--~ handle(("%s %s=%s,"):format(depth,key(k,noquotes),v))
+--~ else
+--~ handle(("%s %s=%q,"):format(depth,key(k,noquotes),v))
+--~ end
+--~ elseif t == "table" then
+--~ if not next(v) then
+--~ handle(("%s %s={},"):format(depth,key(k,noquotes)))
+--~ elseif inline then
+--~ local st = simple_table(v)
+--~ if st then
+--~ handle(("%s %s={ %s },"):format(depth,key(k,noquotes),table.concat(st,", ")))
+--~ else
+--~ serialize(v,k,handle,depth,level+1,reduce,noquotes)
+--~ end
+--~ else
+--~ serialize(v,k,handle,depth,level+1,reduce,noquotes)
+--~ end
+--~ elseif t == "boolean" then
+--~ handle(("%s %s=%s,"):format(depth,key(k,noquotes),tostring(v)))
+--~ elseif t == "function" then
+--~ if table.serialize_functions then
+--~ handle(('%s %s=loadstring(%q),'):format(depth,key(k,noquotes),string.dump(v)))
+--~ else
+--~ handle(('%s %s="function",'):format(depth,key(k,noquotes)))
+--~ end
+--~ else
+--~ handle(("%s %s=%q,"):format(depth,key(k,noquotes),tostring(v)))
+--~ -- handle(('%s %s=loadstring(%q),'):format(depth,key(k,noquotes),string.dump(function() return v end)))
+--~ end
+--~ end
+--~ if level > 0 then
+--~ handle(("%s},"):format(depth))
+--~ else
+--~ handle(("%s}"):format(depth))
+--~ end
+--~ else
+--~ handle(("%s}"):format(depth))
+--~ end
+--~ end
+
+--~ --~ name:
+--~ --~
+--~ --~ true : return { }
+--~ --~ false : { }
+--~ --~ nil : t = { }
+--~ --~ string : string = { }
+--~ --~ 'return' : return { }
+--~ --~ number : [number] = { }
+
+--~ function table.serialize(root,name,reduce,noquotes)
+--~ local t = { }
+--~ local function flush(s)
+--~ t[#t+1] = s
+--~ end
+--~ serialize(root, name, flush, nil, 0, reduce, noquotes)
+--~ return table.concat(t,"\n")
+--~ end
+
+--~ function table.tohandle(handle,root,name,reduce,noquotes)
+--~ serialize(root, name, handle, nil, 0, reduce, noquotes)
+--~ end
+
+--~ -- sometimes tables are real use (zapfino extra pro is some 85M) in which
+--~ -- case a stepwise serialization is nice; actually, we could consider:
+--~ --
+--~ -- for line in table.serializer(root,name,reduce,noquotes) do
+--~ -- ...(line)
+--~ -- end
+--~ --
+--~ -- so this is on the todo list
+
+--~ table.tofile_maxtab = 2*1024
+
+--~ function table.tofile(filename,root,name,reduce,noquotes)
+--~ local f = io.open(filename,'w')
+--~ if f then
+--~ local concat = table.concat
+--~ local maxtab = table.tofile_maxtab
+--~ if maxtab > 1 then
+--~ local t = { }
+--~ local function flush(s)
+--~ t[#t+1] = s
+--~ if #t > maxtab then
+--~ f:write(concat(t,"\n"),"\n") -- hm, write(sometable) should be nice
+--~ t = { }
+--~ end
+--~ end
+--~ serialize(root, name, flush, nil, 0, reduce, noquotes)
+--~ f:write(concat(t,"\n"),"\n")
+--~ else
+--~ local function flush(s)
+--~ f:write(s,"\n")
+--~ end
+--~ serialize(root, name, flush, nil, 0, reduce, noquotes)
+--~ end
+--~ f:close()
+--~ end
+--~ end
+
+--~ end
+
+--~ t = {
+--~ b = "123",
+--~ a = "x",
+--~ c = 1.23,
+--~ d = "1.23",
+--~ e = true,
+--~ f = {
+--~ d = "1.23",
+--~ a = "x",
+--~ b = "123",
+--~ c = 1.23,
+--~ e = true,
+--~ f = {
+--~ e = true,
+--~ f = {
+--~ e = true
+--~ },
+--~ },
+--~ },
+--~ g = function() end
+--~ }
+
+--~ print(table.serialize(t), "\n")
+--~ print(table.serialize(t,"name"), "\n")
+--~ print(table.serialize(t,false), "\n")
+--~ print(table.serialize(t,true), "\n")
+--~ print(table.serialize(t,"name",true), "\n")
+--~ print(table.serialize(t,"name",true,true), "\n")
- -- one of my first exercises in lua ...
-
- -- 34.055.092 32.403.326 arabtype.tma
- -- 1.620.614 1.513.863 lmroman10-italic.tma
- -- 1.325.585 1.233.044 lmroman10-regular.tma
- -- 1.248.157 1.158.903 lmsans10-regular.tma
- -- 194.646 153.120 lmtypewriter10-regular.tma
- -- 1.771.678 1.658.461 palatinosanscom-bold.tma
- -- 1.695.251 1.584.491 palatinosanscom-regular.tma
- -- 13.736.534 13.409.446 zapfinoextraltpro.tma
-
- -- 13.679.038 11.774.106 arabtype.tmc
- -- 886.248 754.944 lmroman10-italic.tmc
- -- 729.828 466.864 lmroman10-regular.tmc
- -- 688.482 441.962 lmsans10-regular.tmc
- -- 128.685 95.853 lmtypewriter10-regular.tmc
- -- 715.929 582.985 palatinosanscom-bold.tmc
- -- 669.942 540.126 palatinosanscom-regular.tmc
- -- 1.560.588 1.317.000 zapfinoextraltpro.tmc
+do
table.serialize_functions = true
table.serialize_compact = true
table.serialize_inline = true
+ local sortedkeys = table.sortedkeys
+ local format, concat = string.format, table.concat
+ local noquotes, hexify, handle, reduce, compact, inline, functions
+ local pairs, ipairs, type, next, tostring = pairs, ipairs, type, next, tostring
+
local function key(k)
if type(k) == "number" then -- or k:find("^%d+$") then
- return "["..k.."]"
+ if hexify then
+ return ("[0x%04X]"):format(k)
+ else
+ return "["..k.."]"
+ end
elseif noquotes and k:find("^%a[%a%d%_]*$") then
return k
else
@@ -715,7 +948,13 @@ do
for i=1,#t do
local v = t[i]
local tv = type(v)
- if tv == "number" or tv == "boolean" then
+ if tv == "number" then
+ if hexify then
+ tt[#tt+1] = ("0x%04X"):format(v)
+ else
+ tt[#tt+1] = tostring(v)
+ end
+ elseif tv == "boolean" then
tt[#tt+1] = tostring(v)
elseif tv == "string" then
tt[#tt+1] = ("%q"):format(v)
@@ -730,53 +969,38 @@ do
return nil
end
- local function serialize(root,name,handle,depth,level,reduce,noquotes,indexed)
- handle = handle or print
- reduce = reduce or false
- if depth then
+ local function do_serialize(root,name,depth,level,indexed)
+ if level > 0 then
depth = depth .. " "
if indexed then
handle(("%s{"):format(depth))
- else
+ elseif name then
handle(("%s%s={"):format(depth,key(name)))
- end
- else
- depth = ""
- local tname = type(name)
- if tname == "string" then
- if name == "return" then
- handle("return {")
- else
- handle(name .. "={")
- end
- elseif tname == "number" then
- handle("[" .. name .. "]={")
- elseif tname == "boolean" then
- if name then
- handle("return {")
- else
- handle("{")
- end
else
- handle("t={")
+ handle(("%s{"):format(depth))
end
end
if root and next(root) then
- local compact = table.serialize_compact
- local inline = compact and table.serialize_inline
local first, last = nil, 0 -- #root cannot be trusted here
if compact then
- for k,v in ipairs(root) do -- NOT: for k=1,#root do (why)
+ for k,v in ipairs(root) do -- NOT: for k=1,#root do (we need to quit at nil)
if not first then first = k end
last = last + 1
end
end
- for _,k in pairs(table.sortedkeys(root)) do
+ --~ for _,k in pairs(sortedkeys(root)) do -- 1% faster:
+ local sk = sortedkeys(root)
+ for i=1,#sk do
+ local k = sk[i]
local v = root[k]
local t = type(v)
if compact and first and type(k) == "number" and k >= first and k <= last then
if t == "number" then
- handle(("%s %s,"):format(depth,v))
+ if hexify then
+ handle(("%s 0x%04X,"):format(depth,v))
+ else
+ handle(("%s %s,"):format(depth,v))
+ end
elseif t == "string" then
if reduce and (v:find("^[%-%+]?[%d]-%.?[%d+]$") == 1) then
handle(("%s %s,"):format(depth,v))
@@ -789,17 +1013,17 @@ do
elseif inline then
local st = simple_table(v)
if st then
- handle(("%s { %s },"):format(depth,table.concat(st,", ")))
+ handle(("%s { %s },"):format(depth,concat(st,", ")))
else
- serialize(v,k,handle,depth,level+1,reduce,noquotes,true)
+ do_serialize(v,k,depth,level+1,true)
end
else
- serialize(v,k,handle,depth,level+1,reduce,noquotes,true)
+ do_serialize(v,k,depth,level+1,true)
end
elseif t == "boolean" then
handle(("%s %s,"):format(depth,tostring(v)))
elseif t == "function" then
- if table.serialize_functions then
+ if functions then
handle(('%s loadstring(%q),'):format(depth,string.dump(v)))
else
handle(('%s "function",'):format(depth))
@@ -812,7 +1036,11 @@ do
handle(("%s __p__=nil,"):format(depth))
end
elseif t == "number" then
- handle(("%s %s=%s,"):format(depth,key(k),v))
+ if hexify then
+ handle(("%s %s=0x%04X,"):format(depth,key(k),v))
+ else
+ handle(("%s %s=%s,"):format(depth,key(k),v))
+ end
elseif t == "string" then
if reduce and (v:find("^[%-%+]?[%d]-%.?[%d+]$") == 1) then
handle(("%s %s=%s,"):format(depth,key(k),v))
@@ -825,17 +1053,17 @@ do
elseif inline then
local st = simple_table(v)
if st then
- handle(("%s %s={ %s },"):format(depth,key(k),table.concat(st,", ")))
+ handle(("%s %s={ %s },"):format(depth,key(k),concat(st,", ")))
else
- serialize(v,k,handle,depth,level+1,reduce,noquotes)
+ do_serialize(v,k,depth,level+1)
end
else
- serialize(v,k,handle,depth,level+1,reduce,noquotes)
+ do_serialize(v,k,depth,level+1)
end
elseif t == "boolean" then
handle(("%s %s=%s,"):format(depth,key(k),tostring(v)))
elseif t == "function" then
- if table.serialize_functions then
+ if functions then
handle(('%s %s=loadstring(%q),'):format(depth,key(k),string.dump(v)))
else
handle(('%s %s="function",'):format(depth,key(k)))
@@ -845,14 +1073,46 @@ do
-- handle(('%s %s=loadstring(%q),'):format(depth,key(k),string.dump(function() return v end)))
end
end
- if level > 0 then
- handle(("%s},"):format(depth))
+ end
+ if level > 0 then
+ handle(("%s},"):format(depth))
+ end
+ end
+
+ local function serialize(root,name,_handle,_reduce,_noquotes,_hexify)
+ noquotes = _noquotes
+ hexify = _hexify
+ handle = _handle or print
+ reduce = _reduce or false
+ compact = table.serialize_compact
+ inline = compact and table.serialize_inline
+ functions = table.serialize_functions
+ local tname = type(name)
+ if tname == "string" then
+ if name == "return" then
+ handle("return {")
+ else
+ handle(name .. "={")
+ end
+ elseif tname == "number" then
+ if hexify then
+ handle(format("[0x%04X]={",name))
+ else
+ handle("[" .. name .. "]={")
+ end
+ elseif tname == "boolean" then
+ if name then
+ handle("return {")
else
- handle(("%s}"):format(depth))
+ handle("{")
end
else
- handle(("%s}"):format(depth))
+ handle("t={")
+ end
+ if root and next(root) then
+ do_serialize(root,name,"",0,indexed)
end
+ handle("}")
end
--~ name:
@@ -864,17 +1124,17 @@ do
--~ 'return' : return { }
--~ number : [number] = { }
- function table.serialize(root,name,reduce,noquotes)
+ function table.serialize(root,name,reduce,noquotes,hexify)
local t = { }
local function flush(s)
t[#t+1] = s
end
- serialize(root, name, flush, nil, 0, reduce, noquotes)
- return table.concat(t,"\n")
+ serialize(root,name,flush,reduce,noquotes,hexify)
+ return concat(t,"\n")
end
- function table.tohandle(handle,root,name,reduce,noquotes)
- serialize(root, name, handle, nil, 0, reduce, noquotes)
+ function table.tohandle(handle,root,name,reduce,noquotes,hexify)
+ serialize(root,name,handle,reduce,noquotes,hexify)
end
-- sometimes tables are real use (zapfino extra pro is some 85M) in which
@@ -888,10 +1148,9 @@ do
table.tofile_maxtab = 2*1024
- function table.tofile(filename,root,name,reduce,noquotes)
+ function table.tofile(filename,root,name,reduce,noquotes,hexify)
local f = io.open(filename,'w')
if f then
- local concat = table.concat
local maxtab = table.tofile_maxtab
if maxtab > 1 then
local t = { }
@@ -902,13 +1161,13 @@ do
t = { }
end
end
- serialize(root, name, flush, nil, 0, reduce, noquotes)
+ serialize(root,name,flush,reduce,noquotes,hexify)
f:write(concat(t,"\n"),"\n")
else
local function flush(s)
f:write(s,"\n")
end
- serialize(root, name, flush, nil, 0, reduce, noquotes)
+ serialize(root,name,flush,reduce,noquotes,hexify)
end
f:close()
end
@@ -916,35 +1175,6 @@ do
end
---~ t = {
---~ b = "123",
---~ a = "x",
---~ c = 1.23,
---~ d = "1.23",
---~ e = true,
---~ f = {
---~ d = "1.23",
---~ a = "x",
---~ b = "123",
---~ c = 1.23,
---~ e = true,
---~ f = {
---~ e = true,
---~ f = {
---~ e = true
---~ },
---~ },
---~ },
---~ g = function() end
---~ }
-
---~ print(table.serialize(t), "\n")
---~ print(table.serialize(t,"name"), "\n")
---~ print(table.serialize(t,false), "\n")
---~ print(table.serialize(t,true), "\n")
---~ print(table.serialize(t,"name",true), "\n")
---~ print(table.serialize(t,"name",true,true), "\n")
-
do
local function flatten(t,f,complete)
@@ -1135,7 +1365,7 @@ function io.loaddata(filename)
end
function io.savedata(filename,data,joiner)
- local f = io.open(filename, "wb")
+ local f = io.open(filename,"wb")
if f then
if type(data) == "table" then
f:write(table.join(data,joiner or ""))
@@ -1145,6 +1375,9 @@ function io.savedata(filename,data,joiner)
f:write(data)
end
f:close()
+ return true
+ else
+ return false
end
end
@@ -1499,6 +1732,9 @@ end
-- copyright: PRAGMA ADE / ConTeXt Development Team
-- license : see context related readme files
+
+--~ print(table.serialize(os.uname()))
+
if not versions then versions = { } end versions['l-os'] = 1.001
function os.resultof(command)
@@ -1575,9 +1811,11 @@ if not versions then versions = { } end versions['l-file'] = 1.001
if not file then file = { } end
function file.removesuffix(filename)
- return filename:gsub("%.[%a%d]+$", "")
+ return (filename:gsub("%.[%a%d]+$",""))
end
+file.stripsuffix = file.removesuffix
+
function file.addsuffix(filename, suffix)
if not filename:find("%.[%a%d]+$") then
return filename .. "." .. suffix
@@ -1587,11 +1825,7 @@ function file.addsuffix(filename, suffix)
end
function file.replacesuffix(filename, suffix)
- if not filename:find("%.[%a%d]+$") then
- return filename .. "." .. suffix
- else
- return (filename:gsub("%.[%a%d]+$","."..suffix))
- end
+ return (filename:gsub("%.[%a%d]+$","")) .. "." .. suffix
end
function file.dirname(name)
@@ -1612,10 +1846,6 @@ end
file.suffix = file.extname
-function file.stripsuffix(name)
- return (name:gsub("%.[%a%d]+$",""))
-end
-
--~ function file.join(...)
--~ local t = { ... }
--~ for i=1,#t do
@@ -1664,6 +1894,16 @@ function file.is_readable(name)
end
end
+function file.iswritable(name)
+ local a = lfs.attributes(name)
+ return a and a.permissions:sub(2,2) == "w"
+end
+
+function file.isreadable(name)
+ local a = lfs.attributes(name)
+ return a and a.permissions:sub(1,1) == "r"
+end
+
--~ function file.split_path(str)
--~ if str:find(';') then
--~ return str:splitchr(";")
@@ -1691,34 +1931,26 @@ function file.join_path(tab)
return table.concat(tab,io.pathseparator) -- can have trailing //
end
---~ print('test' .. " == " .. file.collapse_path("test"))
---~ print("test/test" .. " == " .. file.collapse_path("test/test"))
---~ print("test/test/test" .. " == " .. file.collapse_path("test/test/test"))
---~ print("test/test" .. " == " .. file.collapse_path("test/../test/test"))
---~ print("test" .. " == " .. file.collapse_path("test/../test"))
---~ print("../test" .. " == " .. file.collapse_path("../test"))
---~ print("../test/" .. " == " .. file.collapse_path("../test/"))
---~ print("a/a" .. " == " .. file.collapse_path("a/b/c/../../a"))
-
---~ function file.collapse_path(str)
---~ local ok, n = false, 0
---~ while not ok do
---~ ok = true
---~ str, n = str:gsub("[^%./]+/%.%./", function(s)
---~ ok = false
---~ return ""
---~ end)
---~ end
---~ return (str:gsub("/%./","/"))
---~ end
-
function file.collapse_path(str)
- local n = 1
- while n > 0 do
- str, n = str:gsub("([^/%.]+/%.%./)","")
- end
- return (str:gsub("/%./","/"))
-end
+ str = str:gsub("/%./","/")
+ local n, m = 1, 1
+ while n > 0 or m > 0 do
+ str, n = str:gsub("[^/%.]+/%.%.$","")
+ str, m = str:gsub("[^/%.]+/%.%./","")
+ end
+ str = str:gsub("([^/])/$","%1")
+ str = str:gsub("^%./","")
+ str = str:gsub("/%.$","")
+ if str == "" then str = "." end
+ return str
+end
+
+--~ print(file.collapse_path("a/./b/.."))
+--~ print(file.collapse_path("a/aa/../b/bb"))
+--~ print(file.collapse_path("a/../.."))
+--~ print(file.collapse_path("a/.././././b/.."))
+--~ print(file.collapse_path("a/./././b/.."))
+--~ print(file.collapse_path("a/b/c/../.."))
function file.robustname(str)
return (str:gsub("[^%a%d%/%-%.\\]+","-"))
@@ -1731,6 +1963,98 @@ function file.copy(oldname,newname)
file.savedata(newname,io.loaddata(oldname))
end
+-- lpeg variants, slightly faster, not always
+
+--~ local period = lpeg.P(".")
+--~ local slashes = lpeg.S("\\/")
+--~ local noperiod = 1-period
+--~ local noslashes = 1-slashes
+--~ local name = noperiod^1
+
+--~ local pattern = (noslashes^0 * slashes)^0 * (noperiod^1 * period)^1 * lpeg.C(noperiod^1) * -1
+
+--~ function file.extname(name)
+--~ return pattern:match(name) or ""
+--~ end
+
+--~ local pattern = lpeg.Cs(((period * noperiod^1 * -1)/"" + 1)^1)
+
+--~ function file.removesuffix(name)
+--~ return pattern:match(name)
+--~ end
+
+--~ file.stripsuffix = file.removesuffix
+
+--~ local pattern = (noslashes^0 * slashes)^1 * lpeg.C(noslashes^1) * -1
+
+--~ function file.basename(name)
+--~ return pattern:match(name) or name
+--~ end
+
+--~ local pattern = (noslashes^0 * slashes)^1 * lpeg.Cp() * noslashes^1 * -1
+
+--~ function file.dirname(name)
+--~ local p = pattern:match(name)
+--~ if p then
+--~ return name:sub(1,p-2)
+--~ else
+--~ return ""
+--~ end
+--~ 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)
+--~ if p then
+--~ return name
+--~ else
+--~ return name .. "." .. suffix
+--~ end
+--~ 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)
+--~ if p then
+--~ return name:sub(1,p-2) .. "." .. suffix
+--~ else
+--~ return name .. "." .. suffix
+--~ end
+--~ 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)
+--~ if b then
+--~ return name:sub(a,b-2)
+--~ elseif a then
+--~ return name:sub(a)
+--~ else
+--~ return name
+--~ end
+--~ end
+
+--~ local test = file.extname
+--~ local test = file.stripsuffix
+--~ local test = file.basename
+--~ local test = file.dirname
+--~ local test = file.addsuffix
+--~ local test = file.replacesuffix
+--~ local test = file.nameonly
+
+--~ print(1,test("./a/b/c/abd.def.xxx","!!!"))
+--~ print(2,test("./../b/c/abd.def.xxx","!!!"))
+--~ print(3,test("a/b/c/abd.def.xxx","!!!"))
+--~ print(4,test("a/b/c/def.xxx","!!!"))
+--~ print(5,test("a/b/c/def","!!!"))
+--~ print(6,test("def","!!!"))
+--~ print(7,test("def.xxx","!!!"))
+
+--~ local tim = os.clock() for i=1,250000 do local ext = test("abd.def.xxx","!!!") end print(os.clock()-tim)
+
-- filename : l-dir.lua
-- comment : split off from luat-lib
@@ -1746,51 +2070,6 @@ dir = { }
if lfs then do
---~ local attributes = lfs.attributes
---~ local walkdir = lfs.dir
---~
---~ local function glob_pattern(path,patt,recurse,action)
---~ local ok, scanner = xpcall(function() return walkdir(path) end, function() end) -- kepler safe
---~ if ok and type(scanner) == "function" then
---~ if not path:find("/$") then path = path .. '/' end
---~ for name in scanner do
---~ local full = path .. name
---~ local mode = attributes(full,'mode')
---~ if mode == 'file' then
---~ if name:find(patt) then
---~ action(full)
---~ end
---~ elseif recurse and (mode == "directory") and (name ~= '.') and (name ~= "..") then
---~ glob_pattern(full,patt,recurse,action)
---~ end
---~ end
---~ end
---~ end
---~
---~ dir.glob_pattern = glob_pattern
---~
---~ local function glob(pattern, action)
---~ local t = { }
---~ local action = action or function(name) t[#t+1] = name end
---~ local path, patt = pattern:match("^(.*)/*%*%*/*(.-)$")
---~ local recurse = path and patt
---~ if not recurse then
---~ path, patt = pattern:match("^(.*)/(.-)$")
---~ if not (path and patt) then
---~ path, patt = '.', pattern
---~ end
---~ end
---~ patt = patt:gsub("([%.%-%+])", "%%%1")
---~ patt = patt:gsub("%*", ".*")
---~ patt = patt:gsub("%?", ".")
---~ patt = "^" .. patt .. "$"
---~ -- print('path: ' .. path .. ' | pattern: ' .. patt .. ' | recurse: ' .. tostring(recurse))
---~ glob_pattern(path,patt,recurse,action)
---~ return t
---~ end
---~
---~ dir.glob = glob
-
local attributes = lfs.attributes
local walkdir = lfs.dir
@@ -1868,13 +2147,17 @@ if lfs then do
glob(s,t)
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
local t = t or { }
local action = action or function(name) t[#t+1] = name end
local root, path, base = split[1], split[2], split[3]
- local recurse = base:find("**")
+ local recurse = base:find("%*%*")
local start = root .. path
local result = filter:match(start .. base)
glob_pattern(start,result,recurse,action)
@@ -1902,16 +2185,21 @@ if lfs then do
for name in walkdir(path) do
if name:find("^%.") then
--- skip
- elseif attributes(name,'mode') == "directory" then
- if recurse then
- globfiles(path .. "/" .. name,recurse,func,files)
- end
- elseif func then
- if func(name) then
- files[#files+1] = path .. "/" .. name
- end
else
- files[#files+1] = path .. "/" .. name
+ local mode = attributes(name,'mode')
+ if mode == "directory" then
+ if recurse then
+ globfiles(path .. "/" .. name,recurse,func,files)
+ end
+ elseif mode == "file" then
+ if func then
+ if func(name) then
+ files[#files+1] = path .. "/" .. name
+ end
+ else
+ files[#files+1] = path .. "/" .. name
+ end
+ end
end
end
return files
@@ -2119,7 +2407,7 @@ function toboolean(str,tolerant)
if tolerant then
local tstr = type(str)
if tstr == "string" then
- return str == "true" or str == "yes" or str == "on" or str == "1"
+ return str == "true" or str == "yes" or str == "on" or str == "1" or str == "t"
elseif tstr == "number" then
return tonumber(str) ~= 0
elseif tstr == "nil" then
@@ -2138,9 +2426,9 @@ end
function string.is_boolean(str)
if type(str) == "string" then
- if str == "true" or str == "yes" or str == "on" then
+ if str == "true" or str == "yes" or str == "on" or str == "t" then
return true
- elseif str == "false" or str == "no" or str == "off" then
+ elseif str == "false" or str == "no" or str == "off" or str == "f" then
return false
end
end
@@ -2364,7 +2652,7 @@ do
end
dt = top.dt
dt[#dt+1] = toclose
- if at.xmlns then
+ if toclose.at.xmlns then
remove(xmlns)
end
end
@@ -2378,10 +2666,10 @@ do
local t = { ns=namespace or "", rn=resolved, tg=tag, at=at, dt={}, __p__ = top }
dt[#dt+1] = t
setmetatable(t, mt)
- at = { }
if at.xmlns then
remove(xmlns)
end
+ at = { }
end
local function add_text(text)
if cleanup and #text > 0 then
@@ -2638,22 +2926,19 @@ do
elseif not nocommands then
local ec = e.command
if ec ~= nil then -- we can have all kind of types
-
-if e.special then -- todo test for true/false
- local etg, edt = e.tg, e.dt
- local spc = specialconverter and specialconverter[etg]
- if spc then
---~ print("SPECIAL",etg,table.serialize(specialconverter), spc)
- local result = spc(edt[1])
- if result then
- handle(result)
- return
- else
- -- no need to handle any further
- end
- end
-end
-
+ 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)
@@ -2704,17 +2989,7 @@ end
end
end
if ern and xml.trace_remap and ern ~= ens then
---~ if ats then
---~ ats[#ats+1] = format("xmlns:remapped='%s'",ern)
---~ else
---~ ats = { format("xmlns:remapped='%s'",ern) }
---~ end
---~ if ats then
---~ ats[#ats+1] = format("remappedns='%s'",ens or '-')
---~ else
---~ ats = { format("remappedns='%s'",ens or '-') }
---~ end
-ens = ern
+ ens = ern
end
if ens ~= "" then
if edt and #edt > 0 then
@@ -2758,7 +3033,16 @@ ens = ern
handle("<" .. etg .. ">")
end
for i=1,#edt do
- serialize(edt[i],handle,textconverter,attributeconverter,specialconverter,nocommands)
+ 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 .. ">")
@@ -2781,7 +3065,16 @@ ens = ern
end
else
for i=1,#e do
- serialize(e[i],handle,textconverter,attributeconverter,specialconverter,nocommands)
+ 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
@@ -2811,14 +3104,14 @@ ens = ern
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,"")
+ 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
- end
return ""
end
@@ -2883,6 +3176,18 @@ function xml.content(root) -- bugged
return (root and root.dt and xml.tostring(root.dt)) or ""
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
+end
+
--[[ldx--
The next helper erases an element but keeps the table as it is,
and since empty strings are not serialized (effectively) it does
@@ -2925,6 +3230,9 @@ of and since we're not compatible we call it . We
will explain more about its usage in other documents.
--ldx]]--
+local lpathcalls = 0 -- statisctics
+local lpathcached = 0 -- statisctics
+
do
xml.functions = xml.functions or { }
@@ -3184,11 +3492,13 @@ do
local cache = { }
function xml.lpath(pattern,trace)
+ lpathcalls = lpathcalls + 1
if type(pattern) == "string" then
local result = cache[pattern]
- if not result then
+ if result == nil then -- can be false which is valid -)
result = compose(pattern)
cache[pattern] = result
+ lpathcached = lpathcached + 1
end
if trace or xml.trace_lpath then
xml.lshow(result)
@@ -3199,6 +3509,10 @@ do
end
end
+ function lpath_cached_patterns()
+ return cache
+ end
+
local fallbackreport = (texio and texio.write) or io.write
function xml.lshow(pattern,report)
@@ -3291,35 +3605,20 @@ do
return (rdt and rdt[k]) or root[k] or ""
end
end
- functions.name = function(root,k,n)
- -- way too fuzzy
- local found
- if not k or not n then
- local ns, tg = root.rn or root.ns or "", root.tg
- if not tg then
- for i=1,#root do
- local e = root[i]
- if type(e) == "table" then
- found = e
- break
- end
- end
- elseif ns ~= "" then
- return ns .. ":" .. tg
- else
- return tg
- end
+ 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 e = root[k]
- if type(e) ~= "table" then
- found = e
- end
+ local dk = d[k]
+ found = dk and (type(dk) == "table") and dk
elseif n < 0 then
for i=k-1,1,-1 do
- local e = root[i]
- if type(e) == "table" then
+ local di = d[i]
+ if type(di) == "table" then
if n == -1 then
- found = e
+ found = di
break
else
n = n + 1
@@ -3327,12 +3626,11 @@ do
end
end
else
---~ print(k,n,#root)
- for i=k+1,#root,1 do
- local e = root[i]
- if type(e) == "table" then
+ for i=k+1,#d,1 do
+ local di = d[i]
+ if type(di) == "table" then
if n == 1 then
- found = e
+ found = di
break
else
n = n - 1
@@ -3351,6 +3649,41 @@ do
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
local function traverse(root,pattern,handle,reverse,index,parent,wildcard) -- multiple only for tags, not for namespaces
if not root then -- error
@@ -4116,15 +4449,20 @@ do
xml.each_element(xmldata, pattern, include)
end
- function xml.strip_whitespace(root, pattern)
+ function xml.strip_whitespace(root, pattern) -- 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" and str:find("^[ \n\r\t]*$") then
- -- stripped
+ if type(str) == "string" then
+ str = str:gsub("^[ \n\r\t]*(.-)[ \n\r\t]*$","%1")
+ if str == "" then
+ -- stripped
+ else
+ t[#t+1] = str
+ end
else
t[#t+1] = str
end
@@ -4326,9 +4664,9 @@ original entity is returned.
do if unicode and unicode.utf8 then
- xml.entities = xml.entities or { } -- xml.entities.handler == function
+ xml.entities = xml.entities or { } -- xml.entity_handler == function
- function xml.entities.handler(e)
+ function xml.entity_handler(e)
return format("[%s]",e)
end
@@ -4338,8 +4676,6 @@ do if unicode and unicode.utf8 then
return char(tonumber(s,16))
end
- local entities = xml.entities -- global entities
-
function utfize(root)
local d = root.dt
for k=1,#d do
@@ -4361,11 +4697,11 @@ do if unicode and unicode.utf8 then
if e:find("#x") then
return char(tonumber(e:sub(3),16))
else
- local ee = entities[e]
+ local ee = xml.entities[e] -- we cannot shortcut this one (is reloaded)
if ee then
return ee
else
- local h = xml.entities.handler
+ local h = xml.entity_handler
return (h and h(e)) or "&" .. e .. ";"
end
end
@@ -4427,6 +4763,13 @@ do if unicode and unicode.utf8 then
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)
@@ -4505,12 +4848,18 @@ function utils.report(...)
print(...)
end
+utils.merger.strip_comment = true
+
function utils.merger._self_load_(name)
local f, data = io.open(name), ""
if f then
data = f:read("*all")
f:close()
end
+ if data and utils.merger.strip_comment then
+ -- saves some 20K
+ data = data:gsub("%-%-~[^\n\r]*[\r\n]", "")
+ end
return data or ""
end
@@ -4588,108 +4937,62 @@ function utils.merger.selfclean(name)
)
end
-utils.lua.compile_strip = true
-
-function utils.lua.compile(luafile, lucfile)
+function utils.lua.compile(luafile, lucfile, cleanup, strip) -- defaults: cleanup=false strip=true
-- utils.report("compiling",luafile,"into",lucfile)
os.remove(lucfile)
local command = "-o " .. string.quote(lucfile) .. " " .. string.quote(luafile)
- if utils.lua.compile_strip then
+ if strip ~= false then
command = "-s " .. command
end
- if os.spawn("texluac " .. command) == 0 then
- return true
- elseif os.spawn("luac " .. command) == 0 then
- return true
- else
- return false
+ local done = (os.spawn("texluac " .. command) == 0) or (os.spawn("luac " .. command) == 0)
+ if done and cleanup == true and lfs.isfile(lucfile) and lfs.isfile(luafile) then
+ -- utils.report("removing",luafile)
+ os.remove(luafile)
end
+ return done
end
--- filename : luat-lib.lua
--- comment : companion to luat-lib.tex
--- author : Hans Hagen, PRAGMA-ADE, Hasselt NL
--- copyright: PRAGMA ADE / ConTeXt Development Team
--- license : see context related readme files
-
-if not versions then versions = { } end versions['luat-lib'] = 1.001
-
--- mostcode moved to the l-*.lua and other luat-*.lua files
+if not modules then modules = { } end modules ['luat-lib'] = {
+ version = 1.001,
+ 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",
+}
--- os / io
+-- most code already moved to the l-*.lua and other luat-*.lua files
os.setlocale(nil,nil) -- useless feature and even dangerous in luatex
--- os.platform
-
--- mswin|bccwin|mingw|cygwin windows
--- darwin|rhapsody|nextstep macosx
--- netbsd|unix unix
--- linux linux
-
-if not io.fileseparator then
- if string.find(os.getenv("PATH"),";") then
- io.fileseparator, io.pathseparator, os.platform = "\\", ";", os.type or "windows"
- else
- io.fileseparator, io.pathseparator, os.platform = "/" , ":", os.type or "unix"
- end
-end
-
-os.platform = os.platform or os.type or (io.pathseparator == ";" and "windows") or "unix"
-
--- arg normalization
---
--- for k,v in pairs(arg) do print(k,v) end
-
--- environment
-
-if not environment then environment = { } end
-
-environment.ownbin = environment.ownbin or arg[-2] or arg[-1] or arg[0] or "luatex"
-
-local ownpath = nil -- we could use a metatable here
-
-function environment.ownpath()
- if not ownpath then
- for p in string.gmatch(os.getenv("PATH"),"[^"..io.pathseparator.."]+") do
- local b = file.join(p,environment.ownbin)
- if lfs.isfile(b..".exe") or lfs.isfile(b) then
- ownpath = p
- break
- end
- end
- if not ownpath then ownpath = '.' end
- end
- return ownpath
+function os.setlocale()
+ -- no way you can mess with it
end
if arg and (arg[0] == 'luatex' or arg[0] == 'luatex.exe') and arg[1] == "--luaonly" then
arg[-1]=arg[0] arg[0]=arg[2] for k=3,#arg do arg[k-2]=arg[k] end arg[#arg]=nil arg[#arg]=nil
end
-environment.arguments = { }
-environment.files = { }
-environment.sorted_argument_keys = nil
-
-environment.platform = os.platform
+environment = environment or { }
+environment.arguments = { }
+environment.files = { }
+environment.sortedflags = nil
function environment.initialize_arguments(arg)
- environment.arguments = { }
- environment.files = { }
- environment.sorted_argument_keys = nil
+ local arguments, files = { }, { }
+ environment.arguments, environment.files, environment.sortedflags = arguments, files, nil
for index, argument in pairs(arg) do
if index > 0 then
local flag, value = argument:match("^%-+(.+)=(.-)$")
if flag then
- environment.arguments[flag] = string.unquote(value or "")
+ arguments[flag] = string.unquote(value or "")
else
flag = argument:match("^%-+(.+)")
if flag then
- environment.arguments[flag] = true
+ arguments[flag] = true
else
- environment.files[#environment.files+1] = argument
+ files[#files+1] = argument
end
end
end
@@ -4711,18 +5014,20 @@ function environment.setargument(name,value)
end
function environment.argument(name)
- if environment.arguments[name] then
- return environment.arguments[name]
+ local arguments, sortedflags = environment.arguments, environment.sortedflags
+ if arguments[name] then
+ return arguments[name]
else
- if not environment.sorted_argument_keys then
- environment.sorted_argument_keys = { }
- for _,v in pairs(table.sortedkeys(environment.arguments)) do
- table.insert(environment.sorted_argument_keys, "^" .. v)
+ if not sortedflags then
+ sortedflags = { }
+ for _,v in pairs(table.sortedkeys(arguments)) do
+ sortedflags[#sortedflags+1] = "^" .. v
end
+ environment.sortedflags = sortedflags
end
- for _,v in pairs(environment.sorted_argument_keys) do
+ for _,v in ipairs(sortedflags) do
if name:find(v) then
- return environment.arguments[v:sub(2,#v)]
+ return arguments[v:sub(2,#v)]
end
end
end
@@ -4770,21 +5075,24 @@ if arg then
end
--- filename : luat-inp.lua
--- comment : companion to luat-lib.tex
--- author : Hans Hagen, PRAGMA-ADE, Hasselt NL
--- copyright: PRAGMA ADE / ConTeXt Development Team
--- license : see context related readme files
-
--- This lib is multi-purpose and can be loaded again later on so that
--- additional functionality becomes available. We will split this
--- module in components when we're done with prototyping.
+if not modules then modules = { } end modules ['luat-inp'] = {
+ version = 1.001,
+ 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",
+}
-- TODO: os.getenv -> os.env[]
-- TODO: instances.[hashes,cnffiles,configurations,522] -> ipairs (alles check, sneller)
-- TODO: check escaping in find etc, too much, too slow
--- This is the first code I wrote for LuaTeX, so it needs some cleanup.
+-- This lib is multi-purpose and can be loaded again later on so that
+-- additional functionality becomes available. We will split this
+-- module in components once we're done with prototyping. This is the
+-- first code I wrote for LuaTeX, so it needs some cleanup. Before changing
+-- something in this module one can best check with Taco or Hans first; there
+-- is some nasty trickery going on that relates to traditional kpse support.
-- To be considered: hash key lowercase, first entry in table filename
-- (any case), rest paths (so no need for optimization). Or maybe a
@@ -4794,12 +5102,6 @@ end
-- Beware, loading and saving is overloaded in luat-tmp!
-if not versions then versions = { } end versions['luat-inp'] = 1.001
-if not environment then environment = { } end
-if not file then file = { } end
-
-if environment.aleph_mode == nil then environment.aleph_mode = true end -- temp hack
-
if not input then input = { } end
if not input.suffixes then input.suffixes = { } end
if not input.formats then input.formats = { } end
@@ -4825,8 +5127,16 @@ input.debug = false
input.cnfname = 'texmf.cnf'
input.luaname = 'texmfcnf.lua'
input.lsrname = 'ls-R'
-input.luasuffix = '.tma'
-input.lucsuffix = '.tmc'
+input.homedir = os.env[os.platform == "windows" and 'USERPROFILE'] or os.env['HOME'] or '~'
+
+--~ input.luasuffix = 'tma'
+--~ input.lucsuffix = 'tmc'
+
+-- for the moment we have .local but this will disappear
+input.cnfdefault = '{$SELFAUTOLOC,$SELFAUTODIR,$SELFAUTOPARENT}{,{/share,}/texmf{-local,.local,}/web2c}'
+
+-- chances are low that the cnf file is in the bin path
+input.cnfdefault = '{$SELFAUTODIR,$SELFAUTOPARENT}{,{/share,}/texmf{-local,.local,}/web2c}'
-- we use a cleaned up list / format=any is a wildcard, as is *name
@@ -4862,7 +5172,8 @@ input.suffixes['lua'] = { 'lua', 'luc', 'tma', 'tmc' }
-- FONTFEATURES = .;$TEXMF/fonts/fea//
-- FONTCIDMAPS = .;$TEXMF/fonts/cid//
-function input.checkconfigdata(instance) -- not yet ok, no time for debugging now
+function input.checkconfigdata() -- not yet ok, no time for debugging now
+ local instance = input.instance
local function fix(varname,default)
local proname = varname .. "." .. instance.progname or "crap"
local p = instance.environment[proname]
@@ -4871,7 +5182,15 @@ function input.checkconfigdata(instance) -- not yet ok, no time for debugging no
instance.variables[varname] = default -- or environment?
end
end
- fix("LUAINPUTS" , ".;$TEXINPUTS;$TEXMFSCRIPTS")
+ local name = os.name
+ if name == "windows" then
+ fix("OSFONTDIR", "c:/windows/fonts//")
+ elseif name == "macosx" then
+ fix("OSFONTDIR", "$HOME/Library/Fonts//;/Library/Fonts//;/System/Library/Fonts//")
+ else
+ -- 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")
end
@@ -4898,14 +5217,20 @@ input.formats ['sfd'] = 'SFDFONTS'
input.suffixes ['sfd'] = { 'sfd' }
input.alternatives['subfont definition files'] = 'sfd'
-function input.reset()
+-- 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
+-- instance but for practical pusposes we now avoid this and use a
+-- instance variable.
+
+function input.newinstance()
local instance = { }
instance.rootpath = ''
instance.treepath = ''
- instance.progname = environment.progname or 'context'
- instance.engine = environment.engine or 'luatex'
+ instance.progname = 'context'
+ instance.engine = 'luatex'
instance.format = ''
instance.environment = { }
instance.variables = { }
@@ -4929,12 +5254,12 @@ function input.reset()
instance.cachepath = nil
instance.loaderror = false
instance.smallcache = false
+ instance.sortdata = false
instance.savelists = true
instance.cleanuppaths = true
instance.allresults = false
instance.pattern = nil -- lists
instance.kpseonly = false -- lists
- instance.cachefile = 'tmftools'
instance.loadtime = 0
instance.starttime = 0
instance.stoptime = 0
@@ -4945,23 +5270,13 @@ function input.reset()
instance.fakepaths = { }
instance.lsrmode = false
- if os.env then
- -- store once, freeze and faster
- for k,v in pairs(os.env) do
- instance.environment[k] = input.bare_variable(v)
- end
- else
- -- we will access os.env frequently
- for k,v in pairs({'HOME','TEXMF','TEXMFCNF'}) do
- local e = os.getenv(v)
- if e then
- -- input.report("setting",v,"to",input.bare_variable(e))
- instance.environment[v] = input.bare_variable(e)
- end
- end
+ -- store once, freeze and faster (once reset we can best use instance.environment)
+
+ for k,v in pairs(os.env) do
+ instance.environment[k] = input.bare_variable(v)
end
- -- cross referencing
+ -- cross referencing, delayed because we can add suffixes
for k, v in pairs(input.suffixes) do
for _, vv in pairs(v) do
@@ -4975,68 +5290,42 @@ function input.reset()
end
-function input.reset_hashes(instance)
- instance.lists = { }
- instance.found = { }
-end
-
-function input.bare_variable(str) -- assumes str is a string
- -- return string.gsub(string.gsub(string.gsub(str,"%s+$",""),'^"(.+)"$',"%1"),"^'(.+)'$","%1")
- return (str:gsub("\s*([\"\']?)(.+)%1\s*", "%2"))
-end
+input.instance = input.instance or nil
-if texio then
- input.log = texio.write_nl
-else
- input.log = print
+function input.reset()
+ input.instance = input.newinstance()
+ return input.instance
end
-function input.simple_logger(kind, name)
- if name and name ~= "" then
- if input.banner then
- input.log(input.banner..kind..": "..name)
- else
- input.log("<<"..kind..": "..name..">>")
- end
- else
- if input.banner then
- input.log(input.banner..kind..": no name")
- else
- input.log("<<"..kind..": no name>>")
- end
- end
+function input.reset_hashes()
+ input.instance.lists = { }
+ input.instance.found = { }
end
-function input.dummy_logger()
+function input.bare_variable(str) -- assumes str is a string
+ -- return string.gsub(string.gsub(string.gsub(str,"%s+$",""),'^"(.+)"$',"%1"),"^'(.+)'$","%1")
+ return (str:gsub("\s*([\"\']?)(.+)%1\s*", "%2"))
end
function input.settrace(n)
input.trace = tonumber(n or 0)
if input.trace > 0 then
- input.logger = input.simple_logger
input.verbose = true
- else
- input.logger = function() end
end
end
-function input.report(...) -- inefficient
+input.log = (texio and texio.write_nl) or print
+
+function input.report(...)
if input.verbose then
- if input.banner then
- input.log(input.banner .. table.concat({...},' '))
- elseif input.logmode() == 'xml' then
- input.log(""..table.concat({...},' ').."")
- else
- input.log("<<"..table.concat({...},' ')..">>")
- end
+ input.log("<<"..format(...)..">>")
end
end
-function input.reportlines(str)
- if type(str) == "string" then
- str = str:split("\n")
+function input.report(...)
+ if input.trace > 0 then -- extra test
+ input.log("<<"..format(...)..">>")
end
- for _,v in pairs(str) do input.report(v) end
end
input.settrace(tonumber(os.getenv("MTX.INPUT.TRACE") or os.getenv("MTX_INPUT_TRACE") or input.trace or 0))
@@ -5065,7 +5354,7 @@ do
instance.stoptime = stoptime
instance.loadtime = instance.loadtime + loadtime
if report then
- input.report('load time', format("%0.3f",loadtime))
+ input.report("load time %0.3f",loadtime)
end
return loadtime
end
@@ -5081,18 +5370,18 @@ end
function input.report_loadtime(instance)
if instance then
- input.report('total load time', input.elapsedtime(instance))
+ input.report('total load time %s', input.elapsedtime(instance))
end
end
input.loadtime = input.elapsedtime
-function input.env(instance,key)
- return instance.environment[key] or input.osenv(instance,key)
+function input.env(key)
+ return input.instance.environment[key] or input.osenv(key)
end
-function input.osenv(instance,key)
- local ie = instance.environment
+function input.osenv(key)
+ local ie = input.instance.environment
local value = ie[key]
if value == nil then
-- local e = os.getenv(key)
@@ -5110,81 +5399,106 @@ end
-- we follow a rather traditional approach:
--
-- (1) texmf.cnf given in TEXMFCNF
--- (2) texmf.cnf searched in TEXMF/web2c
+-- (2) texmf.cnf searched in default variable
--
--- for the moment we don't expect a configuration file in a zip
+-- also we now follow the stupid route: if not set then just assume *one*
+-- cnf file under texmf (i.e. distribution)
-function input.identify_cnf(instance)
- -- we no longer support treepath and rootpath (was handy for testing);
- -- also we now follow the stupid route: if not set then just assume *one*
- -- cnf file under texmf (i.e. distribution)
- if #instance.cnffiles == 0 then
- if input.env(instance,'TEXMFCNF') == "" then
- local ownpath = environment.ownpath() or "."
- if ownpath then
- -- beware, this is tricky on my own system because at that location I do have
- -- the raw tree that ends up in the zip; i.e. I cannot test this kind of mess
- local function locate(filename,list)
- local ownroot = input.normalize_name(file.join(ownpath,"../.."))
- if not lfs.isdir(file.join(ownroot,"texmf")) then
- ownroot = input.normalize_name(file.join(ownpath,".."))
- if not lfs.isdir(file.join(ownroot,"texmf")) then
- input.verbose = true
- input.report("error", "unable to identify cnf file")
- return
+input.ownpath = input.ownpath or nil
+input.ownbin = input.ownbin or arg[-2] or arg[-1] or arg[0] or "luatex"
+input.autoselfdir = true -- false may be handy for debugging
+
+function input.getownpath()
+ if not input.ownpath then
+ if input.autoselfdir and os.selfdir then
+ input.ownpath = os.selfdir
+ else
+ local binary = input.ownbin
+ if os.platform == "windows" then
+ binary = file.replacesuffix(binary,"exe")
+ end
+ for p in string.gmatch(os.getenv("PATH"),"[^"..io.pathseparator.."]+") do
+ local b = file.join(p,binary)
+ if lfs.isfile(b) then
+ -- we assume that after changing to the path the currentdir function
+ -- resolves to the real location and use this side effect here; this
+ -- trick is needed because on the mac installations use symlinks in the
+ -- path instead of real locations
+ local olddir = lfs.currentdir()
+ if lfs.chdir(p) then
+ local pp = lfs.currentdir()
+ if input.verbose and p ~= pp then
+ input.report("following symlink %s to %s",p,pp)
end
- end
- local texmfcnf = file.join(ownroot,"texmf-local/web2c",filename) -- for minimals and myself
- if not lfs.isfile(texmfcnf) then
- texmfcnf = file.join(ownroot,"texmf/web2c",filename)
- if not lfs.isfile(texmfcnf) then
- input.verbose = true
- input.report("error", "unable to locate",filename)
- return
+ input.ownpath = pp
+ lfs.chdir(olddir)
+ else
+ if input.verbose then
+ input.report("unable to check path %s",p)
end
+ input.ownpath = p
end
- table.insert(list,texmfcnf)
- local ie = instance.environment
- if not ie['SELFAUTOPARENT'] then ie['SELFAUTOPARENT'] = ownroot end
- if not ie['TEXMFCNF'] then ie['TEXMFCNF'] = file.dirname(texmfcnf) end
- end
- locate(input.luaname,instance.luafiles)
- locate(input.cnfname,instance.cnffiles)
- if #instance.luafiles == 0 and instance.cnffiles == 0 then
- input.verbose = true
- input.report("error", "unable to locate",filename)
- os.exit()
+ break
end
- -- here we also assume then TEXMF is set in the distribution, if this trickery is
- -- used in the minimals, then users who don't use setuptex are on their own with
- -- regards to extra trees
- else
- input.verbose = true
- input.report("error", "unable to identify own path")
- os.exit()
end
- else
- local t = input.split_path(input.env(instance,'TEXMFCNF'))
- t = input.aux.expanded_path(instance,t)
- input.aux.expand_vars(instance,t)
- local function locate(filename,list)
- for _,v in ipairs(t) do
- local texmfcnf = input.normalize_name(file.join(v,filename))
- if lfs.isfile(texmfcnf) then
- table.insert(list,texmfcnf)
- end
+ end
+ if not input.ownpath then input.ownpath = '.' end
+ end
+ return input.ownpath
+end
+
+function input.identify_own()
+ local instance = input.instance
+ local ownpath = input.getownpath() or lfs.currentdir()
+ local ie = instance.environment
+ if ownpath then
+ if input.env('SELFAUTOLOC') == "" then os.env['SELFAUTOLOC'] = file.collapse_path(ownpath) end
+ if input.env('SELFAUTODIR') == "" then os.env['SELFAUTODIR'] = file.collapse_path(ownpath .. "/..") end
+ if input.env('SELFAUTOPARENT') == "" then os.env['SELFAUTOPARENT'] = file.collapse_path(ownpath .. "/../..") end
+ else
+ input.verbose = true
+ input.report("error: unable to locate ownpath")
+ os.exit()
+ end
+ if input.env('TEXMFCNF') == "" then os.env['TEXMFCNF'] = input.cnfdefault end
+ if input.env('TEXOS') == "" then os.env['TEXOS'] = input.env('SELFAUTODIR') end
+ if input.env('TEXROOT') == "" then os.env['TEXROOT'] = input.env('SELFAUTOPARENT') end
+ if input.verbose then
+ for _,v in ipairs({"SELFAUTOLOC","SELFAUTODIR","SELFAUTOPARENT","TEXMFCNF"}) do
+ input.report("variable %s set to %s",v,input.env(v) or "unknown")
+ end
+ end
+ function input.identify_own() end
+end
+
+function input.identify_cnf()
+ local instance = input.instance
+ if #instance.cnffiles == 0 then
+ -- fallback
+ input.identify_own()
+ -- the real search
+ input.expand_variables()
+ local t = input.split_path(input.env('TEXMFCNF'))
+ t = input.aux.expanded_path(t)
+ input.aux.expand_vars(t) -- redundant
+ local function locate(filename,list)
+ for _,v in ipairs(t) do
+ local texmfcnf = input.normalize_name(file.join(v,filename))
+ if lfs.isfile(texmfcnf) then
+ table.insert(list,texmfcnf)
end
end
- locate(input.luaname,instance.luafiles)
- locate(input.cnfname,instance.cnffiles)
end
+ locate(input.luaname,instance.luafiles)
+ locate(input.cnfname,instance.cnffiles)
end
end
-function input.load_cnf(instance)
+function input.load_cnf()
+ local instance = input.instance
local function loadoldconfigdata()
for _, fname in ipairs(instance.cnffiles) do
- input.aux.load_cnf(instance,fname)
+ input.aux.load_cnf(fname)
end
end
-- instance.cnffiles contain complete names now !
@@ -5199,27 +5513,27 @@ function input.load_cnf(instance)
instance.rootpath = file.dirname(instance.rootpath)
end
instance.rootpath = input.normalize_name(instance.rootpath)
- instance.environment['SELFAUTOPARENT'] = instance.rootpath -- just to be sure
if instance.lsrmode then
loadoldconfigdata()
elseif instance.diskcache and not instance.renewcache then
- input.loadoldconfig(instance,instance.cnffiles)
+ input.loadoldconfig(instance.cnffiles)
if instance.loaderror then
loadoldconfigdata()
- input.saveoldconfig(instance)
+ input.saveoldconfig()
end
else
loadoldconfigdata()
if instance.renewcache then
- input.saveoldconfig(instance)
+ input.saveoldconfig()
end
end
- input.aux.collapse_cnf_data(instance)
+ input.aux.collapse_cnf_data()
end
- input.checkconfigdata(instance)
+ input.checkconfigdata()
end
-function input.load_lua(instance)
+function input.load_lua()
+ local instance = input.instance
if #instance.luafiles == 0 then
-- yet harmless
else
@@ -5231,14 +5545,14 @@ function input.load_lua(instance)
instance.rootpath = file.dirname(instance.rootpath)
end
instance.rootpath = input.normalize_name(instance.rootpath)
- instance.environment['SELFAUTOPARENT'] = instance.rootpath -- just to be sure
- input.loadnewconfig(instance)
- input.aux.collapse_cnf_data(instance)
+ input.loadnewconfig()
+ input.aux.collapse_cnf_data()
end
- input.checkconfigdata(instance)
+ input.checkconfigdata()
end
-function input.aux.collapse_cnf_data(instance) -- potential optmization: pass start index (setup and configuration are shared)
+function input.aux.collapse_cnf_data() -- potential optimization: pass start index (setup and configuration are shared)
+ local instance = input.instance
for _,c in ipairs(instance.order) do
for k,v in pairs(c) do
if not instance.variables[k] then
@@ -5253,21 +5567,22 @@ function input.aux.collapse_cnf_data(instance) -- potential optmization: pass st
end
end
-function input.aux.load_cnf(instance,fname)
+function input.aux.load_cnf(fname)
+ local instance = input.instance
fname = input.clean_path(fname)
- local lname = fname:gsub("%.%a+$",input.luasuffix)
+ 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 not instance.configuration[dname] then
- input.aux.load_configuration(instance,dname,lname)
+ input.aux.load_configuration(dname,lname)
instance.order[#instance.order+1] = instance.configuration[dname]
end
else
f = io.open(fname)
if f then
- input.report("loading", fname)
+ input.report("loading %s", fname)
local line, data, n, k, v
local dname = file.dirname(fname)
if not instance.configuration[dname] then
@@ -5299,227 +5614,226 @@ function input.aux.load_cnf(instance,fname)
end
f:close()
else
- input.report("skipping", fname)
+ input.report("skipping %s", fname)
end
end
end
-- database loading
-function input.load_hash(instance)
- input.locatelists(instance)
+function input.load_hash()
+ local instance = input.instance
+ input.locatelists()
if instance.lsrmode then
- input.loadlists(instance)
+ input.loadlists()
elseif instance.diskcache and not instance.renewcache then
- input.loadfiles(instance)
+ input.loadfiles()
if instance.loaderror then
- input.loadlists(instance)
- input.savefiles(instance)
+ input.loadlists()
+ input.savefiles()
end
else
- input.loadlists(instance)
+ input.loadlists()
if instance.renewcache then
- input.savefiles(instance)
+ input.savefiles()
end
end
end
-function input.aux.append_hash(instance,type,tag,name)
- input.logger("= hash append",tag)
- table.insert(instance.hashes, { ['type']=type, ['tag']=tag, ['name']=name } )
+function input.aux.append_hash(type,tag,name)
+ if input.trace > 0 then
+ input.logger("= hash append: %s",tag)
+ end
+ table.insert(input.instance.hashes, { ['type']=type, ['tag']=tag, ['name']=name } )
end
-function input.aux.prepend_hash(instance,type,tag,name)
- input.logger("= hash prepend",tag)
- table.insert(instance.hashes, 1, { ['type']=type, ['tag']=tag, ['name']=name } )
+function input.aux.prepend_hash(type,tag,name)
+ if input.trace > 0 then
+ input.logger("= hash prepend: %s",tag)
+ end
+ table.insert(input.instance.hashes, 1, { ['type']=type, ['tag']=tag, ['name']=name } )
end
-function input.aux.extend_texmf_var(instance,specification) -- crap
- if instance.environment['TEXMF'] then
- input.report("extending environment variable TEXMF with", specification)
- instance.environment['TEXMF'] = instance.environment['TEXMF']:gsub("^%{", function()
- return "{" .. specification .. ","
- end)
- elseif instance.variables['TEXMF'] then
- input.report("extending configuration variable TEXMF with", specification)
- instance.variables['TEXMF'] = instance.variables['TEXMF']:gsub("^%{", function()
- return "{" .. specification .. ","
- end)
+function input.aux.extend_texmf_var(specification) -- crap, we could better prepend the hash
+ local instance = input.instance
+-- local t = input.expanded_path_list('TEXMF') -- full expansion
+ local t = input.split_path(input.env('TEXMF'))
+ table.insert(t,1,specification)
+ local newspec = table.join(t,";")
+ if instance.environment["TEXMF"] then
+ instance.environment["TEXMF"] = newspec
+ elseif instance.variables["TEXMF"] then
+ instance.variables["TEXMF"] = newspec
else
- input.report("setting configuration variable TEXMF to", specification)
- instance.variables['TEXMF'] = "{" .. specification .. "}"
- end
- if instance.variables['TEXMF']:find("%,") and not instance.variables['TEXMF']:find("^%{") then
- input.report("adding {} to complex TEXMF variable, best do that yourself")
- instance.variables['TEXMF'] = "{" .. instance.variables['TEXMF'] .. "}"
+ -- weird
end
- input.expand_variables(instance)
- input.reset_hashes(instance)
+ input.expand_variables()
+ input.reset_hashes()
end
-- locators
-function input.locatelists(instance)
- for _, path in pairs(input.simplified_list(input.expansion(instance,'TEXMF'))) do
- path = file.collapse_path(path)
- input.report("locating list of",path)
- input.locatedatabase(instance,input.normalize_name(path))
+function input.locatelists()
+ local instance = input.instance
+ for _, path in pairs(input.clean_path_list('TEXMF')) do
+ input.report("locating list of %s",path)
+ input.locatedatabase(input.normalize_name(path))
end
end
-function input.locatedatabase(instance,specification)
- return input.methodhandler('locators', instance, specification)
+function input.locatedatabase(specification)
+ return input.methodhandler('locators', specification)
end
-function input.locators.tex(instance,specification)
+function input.locators.tex(specification)
if specification and specification ~= '' and lfs.isdir(specification) then
- input.logger('! tex locator', specification..' found')
- input.aux.append_hash(instance,'file',specification,filename)
- else
- input.logger('? tex locator', specification..' not found')
+ if input.trace > 0 then
+ input.logger('! tex locator found: %s',specification)
+ end
+ input.aux.append_hash('file',specification,filename)
+ elseif input.trace > 0 then
+ input.logger('? tex locator not found: %s',specification)
end
end
-- hashers
-function input.hashdatabase(instance,tag,name)
- return input.methodhandler('hashers',instance,tag,name)
+function input.hashdatabase(tag,name)
+ return input.methodhandler('hashers',tag,name)
end
-function input.loadfiles(instance)
+function input.loadfiles()
+ local instance = input.instance
instance.loaderror = false
instance.files = { }
if not instance.renewcache then
for _, hash in ipairs(instance.hashes) do
- input.hashdatabase(instance,hash.tag,hash.name)
+ input.hashdatabase(hash.tag,hash.name)
if instance.loaderror then break end
end
end
end
-function input.hashers.tex(instance,tag,name)
- input.aux.load_files(instance,tag)
+function input.hashers.tex(tag,name)
+ input.aux.load_files(tag)
end
-- generators:
-function input.loadlists(instance)
- for _, hash in ipairs(instance.hashes) do
- input.generatedatabase(instance,hash.tag)
+function input.loadlists()
+ for _, hash in ipairs(input.instance.hashes) do
+ input.generatedatabase(hash.tag)
end
end
-function input.generatedatabase(instance,specification)
- return input.methodhandler('generators', instance, specification)
+function input.generatedatabase(specification)
+ return input.methodhandler('generators', specification)
end
-do
-
- local weird = lpeg.anywhere(lpeg.S("~`!#$%^&*()={}[]:;\"\'||<>,?\n\r\t"))
+local weird = lpeg.anywhere(lpeg.S("~`!#$%^&*()={}[]:;\"\'||<>,?\n\r\t"))
- function input.generators.tex(instance,specification)
- local tag = specification
- if not instance.lsrmode and lfs and lfs.dir then
- input.report("scanning path",specification)
- instance.files[tag] = { }
- local files = instance.files[tag]
- local n, m, r = 0, 0, 0
- local spec = specification .. '/'
- local attributes = lfs.attributes
- local directory = lfs.dir
- local small = instance.smallcache
- local function action(path)
- local mode, full
- if path then
- full = spec .. path .. '/'
+function input.generators.tex(specification)
+ local instance = input.instance
+ local tag = specification
+ if not instance.lsrmode and lfs.dir then
+ input.report("scanning path %s",specification)
+ instance.files[tag] = { }
+ local files = instance.files[tag]
+ local n, m, r = 0, 0, 0
+ local spec = specification .. '/'
+ local attributes = lfs.attributes
+ local directory = lfs.dir
+ local small = instance.smallcache
+ local function action(path)
+ local mode, full
+ if path then
+ full = spec .. path .. '/'
+ else
+ full = spec
+ end
+ for name in directory(full) do
+ if name:find("^%.") then
+ -- skip
+ -- elseif name:find("[%~%`%!%#%$%%%^%&%*%(%)%=%{%}%[%]%:%;\"\'%|%<%>%,%?\n\r\t]") then -- too much escaped
+ elseif weird:match(name) then
+ -- texio.write_nl("skipping " .. name)
+ -- skip
else
- full = spec
- end
- for name in directory(full) do
- if name:find("^%.") then
- -- skip
- -- elseif name:find("[%~%`%!%#%$%%%^%&%*%(%)%=%{%}%[%]%:%;\"\'%|%<%>%,%?\n\r\t]") then -- too much escaped
- elseif weird:match(name) then
- -- texio.write_nl("skipping " .. name)
- -- skip
- else
- mode = attributes(full..name,'mode')
- if mode == "directory" then
- m = m + 1
- if path then
- action(path..'/'..name)
- else
- action(name)
- end
- elseif path and mode == 'file' then
- n = n + 1
- local f = files[name]
- if f then
- if not small then
- if type(f) == 'string' then
- files[name] = { f, path }
- else
- f[#f+1] = path
- end
- end
- else
- files[name] = path
- local lower = name:lower()
- if name ~= lower then
- files["remap:"..lower] = name
- r = r + 1
- end
- end
+ mode = attributes(full..name,'mode')
+ if mode == 'directory' then
+ m = m + 1
+ if path then
+ action(path..'/'..name)
+ else
+ action(name)
end
- end
- end
- end
- action()
- input.report(format("%s files found on %s directories with %s uppercase remappings",n,m,r))
- else
- local fullname = file.join(specification,input.lsrname)
- local path = '.'
- local f = io.open(fullname)
- if f then
- instance.files[tag] = { }
- local files = instance.files[tag]
- local small = instance.smallcache
- input.report("loading lsr file",fullname)
- -- for line in f:lines() do -- much slower then the next one
- for line in (f:read("*a")):gmatch("(.-)\n") do
- if line:find("^[%a%d]") then
- local fl = files[line]
- if fl then
+ elseif path and mode == 'file' then
+ n = n + 1
+ local f = files[name]
+ if f then
if not small then
- if type(fl) == 'string' then
- files[line] = { fl, path } -- table
+ if type(f) == 'string' then
+ files[name] = { f, path }
else
- fl[#fl+1] = path
+ f[#f+1] = path
end
end
else
- files[line] = path -- string
- local lower = line:lower()
- if line ~= lower then
- files["remap:"..lower] = line
+ files[name] = path
+ local lower = name:lower()
+ if name ~= lower then
+ files["remap:"..lower] = name
+ r = r + 1
+ end
+ end
+ end
+ end
+ end
+ end
+ action()
+ input.report("%s files found on %s directories with %s uppercase remappings",n,m,r)
+ else
+ local fullname = file.join(specification,input.lsrname)
+ local path = '.'
+ local f = io.open(fullname)
+ if f then
+ instance.files[tag] = { }
+ local files = instance.files[tag]
+ local small = instance.smallcache
+ input.report("loading lsr file %s",fullname)
+ -- for line in f:lines() do -- much slower then the next one
+ for line in (f:read("*a")):gmatch("(.-)\n") do
+ if line:find("^[%a%d]") then
+ local fl = files[line]
+ if fl then
+ if not small then
+ if type(fl) == 'string' then
+ files[line] = { fl, path } -- table
+ else
+ fl[#fl+1] = path
end
end
else
- path = line:match("%.%/(.-)%:$") or path -- match could be nil due to empty line
+ files[line] = path -- string
+ local lower = line:lower()
+ if line ~= lower then
+ files["remap:"..lower] = line
+ end
end
+ else
+ path = line:match("%.%/(.-)%:$") or path -- match could be nil due to empty line
end
- f:close()
end
+ f:close()
end
end
-
end
-- savers, todo
-function input.savefiles(instance)
- input.aux.save_data(instance, 'files', function(k,v)
- return instance.validfile(k,v) -- path, name
+function input.savefiles()
+ input.aux.save_data('files', function(k,v)
+ return input.instance.validfile(k,v) -- path, name
end)
end
@@ -5527,8 +5841,8 @@ end
-- we join them and split them after the expansion has taken place. This
-- is more convenient.
-function input.splitconfig(instance)
- for i,c in ipairs(instance) do
+function input.splitconfig()
+ for i,c in ipairs(input.instance) do
for k,v in pairs(c) do
if type(v) == 'string' then
local t = file.split_path(v)
@@ -5539,8 +5853,9 @@ function input.splitconfig(instance)
end
end
end
-function input.joinconfig(instance)
- for i,c in ipairs(instance.order) do
+
+function input.joinconfig()
+ for i,c in ipairs(input.instance.order) do
for k,v in pairs(c) do
if type(v) == 'table' then
c[k] = file.join_path(v)
@@ -5563,8 +5878,9 @@ function input.join_path(str)
end
end
-function input.splitexpansions(instance)
- for k,v in pairs(instance.expansions) do
+function input.splitexpansions()
+ local ie = input.instance.expansions
+ for k,v in pairs(ie) do
local t, h = { }, { }
for _,vv in pairs(file.split_path(v)) do
if vv ~= "" and not h[vv] then
@@ -5573,19 +5889,19 @@ function input.splitexpansions(instance)
end
end
if #t > 1 then
- instance.expansions[k] = t
+ ie[k] = t
else
- instance.expansions[k] = t[1]
+ ie[k] = t[1]
end
end
end
-- end of split/join code
-function input.saveoldconfig(instance)
- input.splitconfig(instance)
- input.aux.save_data(instance, 'configuration', nil)
- input.joinconfig(instance)
+function input.saveoldconfig()
+ input.splitconfig()
+ input.aux.save_data('configuration', nil)
+ input.joinconfig()
end
input.configbanner = [[
@@ -5614,7 +5930,7 @@ function input.serialize(files)
end
end
t[#t+1] = "return {"
- if instance.sortdata then
+ if input.instance.sortdata then
for _, k in pairs(sorted(files)) do
local fk = files[k]
if type(fk) == 'table' then
@@ -5646,11 +5962,11 @@ end
if not texmf then texmf = {} end -- no longer needed, at least not here
-function input.aux.save_data(instance, dataname, check, makename) -- untested without cache overload
- for cachename, files in pairs(instance[dataname]) do
+function input.aux.save_data(dataname, check, makename) -- untested without cache overload
+ for cachename, files in pairs(input.instance[dataname]) do
local name = (makename or file.join)(cachename,dataname)
- local luaname, lucname = name .. input.luasuffix, name .. input.lucsuffix
- input.report("preparing " .. dataname .. " for", luaname)
+ local luaname, lucname = name .. ".lua", name .. ".luc"
+ input.report("preparing %s for %s",dataname,cachename)
for k, v in pairs(files) do
if not check or check(v,k) then -- path, name
if type(v) == "table" and #v == 1 then
@@ -5668,38 +5984,38 @@ function input.aux.save_data(instance, dataname, check, makename) -- untested wi
time = os.date("%H:%M:%S"),
content = files,
}
- local f = io.open(luaname,'w')
- if f then
- input.report("saving " .. dataname .. " in", luaname)
- f:write(input.serialize(data))
- f:close()
- input.report("compiling " .. dataname .. " to", lucname)
- if not utils.lua.compile(luaname,lucname) then
- input.report("compiling failed for " .. dataname .. ", deleting file " .. lucname)
+ local ok = io.savedata(luaname,input.serialize(data))
+ if ok then
+ input.report("%s saved in %s",dataname,luaname)
+ if utils.lua.compile(luaname,lucname,false,true) then -- no cleanup but strip
+ input.report("%s compiled to %s",dataname,lucname)
+ else
+ input.report("compiling failed for %s, deleting file %s",dataname,lucname)
os.remove(lucname)
end
else
- input.report("unable to save " .. dataname .. " in " .. name..input.luasuffix)
+ input.report("unable to save %s in %s (access error)",dataname,luaname)
end
end
end
-function input.aux.load_data(instance,pathname,dataname,filename,makename) -- untested without cache overload
+function input.aux.load_data(pathname,dataname,filename,makename) -- untested without cache overload
+ local instance = input.instance
filename = ((not filename or (filename == "")) and dataname) or filename
filename = (makename and makename(dataname,filename)) or file.join(pathname,filename)
- local blob = loadfile(filename .. input.lucsuffix) or loadfile(filename .. input.luasuffix)
+ local blob = loadfile(filename .. ".luc") or loadfile(filename .. ".lua")
if blob then
local data = blob()
if data and data.content and data.type == dataname and data.version == input.cacheversion then
- input.report("loading",dataname,"for",pathname,"from",filename)
+ input.report("loading %s for %s from %s",dataname,pathname,filename)
instance[dataname][pathname] = data.content
else
- input.report("skipping",dataname,"for",pathname,"from",filename)
+ input.report("skipping %s for %s from %s",dataname,pathname,filename)
instance[dataname][pathname] = { }
instance.loaderror = true
end
else
- input.report("skipping",dataname,"for",pathname,"from",filename)
+ input.report("skipping %s for %s from %s",dataname,pathname,filename)
end
end
@@ -5712,13 +6028,14 @@ end
-- TEXMFBOGUS = 'effe checken of dit werkt',
-- }
-function input.aux.load_texmfcnf(instance,dataname,pathname)
+function input.aux.load_texmfcnf(dataname,pathname)
+ local instance = input.instance
local filename = file.join(pathname,input.luaname)
local blob = loadfile(filename)
if blob then
local data = blob()
if data then
- input.report("loading","configuration file",filename)
+ input.report("loading configuration file %s",filename)
if true then
-- flatten to variable.progname
local t = { }
@@ -5738,169 +6055,168 @@ function input.aux.load_texmfcnf(instance,dataname,pathname)
instance[dataname][pathname] = data
end
else
- input.report("skipping","configuration file",filename)
+ input.report("skipping configuration file %s",filename)
instance[dataname][pathname] = { }
instance.loaderror = true
end
else
- input.report("skipping","configuration file",filename)
+ input.report("skipping configuration file %s",filename)
end
end
-function input.aux.load_configuration(instance,dname,lname)
- input.aux.load_data(instance,dname,'configuration',lname and file.basename(lname))
+function input.aux.load_configuration(dname,lname)
+ input.aux.load_data(dname,'configuration',lname and file.basename(lname))
end
-function input.aux.load_files(instance,tag)
- input.aux.load_data(instance,tag,'files')
+function input.aux.load_files(tag)
+ input.aux.load_data(tag,'files')
end
-function input.resetconfig(instance)
+function input.resetconfig()
+ input.identify_own()
+ local instance = input.instance
instance.configuration, instance.setup, instance.order, instance.loaderror = { }, { }, { }, false
end
-function input.loadnewconfig(instance)
+function input.loadnewconfig()
+ local instance = input.instance
for _, cnf in ipairs(instance.luafiles) do
local dname = file.dirname(cnf)
- input.aux.load_texmfcnf(instance,'setup',dname)
+ input.aux.load_texmfcnf('setup',dname)
instance.order[#instance.order+1] = instance.setup[dname]
if instance.loaderror then break end
end
end
-function input.loadoldconfig(instance)
+function input.loadoldconfig()
+ local instance = input.instance
if not instance.renewcache then
for _, cnf in ipairs(instance.cnffiles) do
local dname = file.dirname(cnf)
- input.aux.load_configuration(instance,dname)
+ input.aux.load_configuration(dname)
instance.order[#instance.order+1] = instance.configuration[dname]
if instance.loaderror then break end
end
end
- input.joinconfig(instance)
+ input.joinconfig()
end
-function input.expand_variables(instance)
- instance.expansions = { }
---~ instance.environment['SELFAUTOPARENT'] = instance.environment['SELFAUTOPARENT'] or instance.rootpath
- if instance.engine ~= "" then instance.environment['engine'] = instance.engine end
- if instance.progname ~= "" then instance.environment['progname'] = instance.progname end
- for k,v in pairs(instance.environment) do
+function input.expand_variables()
+ local instance = input.instance
+ local expansions, environment, variables = { }, instance.environment, instance.variables
+ local env = input.env
+ instance.expansions = expansions
+ if instance.engine ~= "" then environment['engine'] = instance.engine end
+ if instance.progname ~= "" then environment['progname'] = instance.progname end
+ for k,v in pairs(environment) do
local a, b = k:match("^(%a+)%_(.*)%s*$")
if a and b then
- instance.expansions[a..'.'..b] = v
+ expansions[a..'.'..b] = v
else
- instance.expansions[k] = v
+ expansions[k] = v
end
end
- for k,v in pairs(instance.environment) do -- move environment to expansions
- if not instance.expansions[k] then instance.expansions[k] = v end
+ for k,v in pairs(environment) do -- move environment to expansions
+ if not expansions[k] then expansions[k] = v end
end
- for k,v in pairs(instance.variables) do -- move variables to expansions
- if not instance.expansions[k] then instance.expansions[k] = v end
+ for k,v in pairs(variables) do -- move variables to expansions
+ if not expansions[k] then expansions[k] = v end
end
while true do
local busy = false
- for k,v in pairs(instance.expansions) do
+ for k,v in pairs(expansions) do
local s, n = v:gsub("%$([%a%d%_%-]+)", function(a)
busy = true
- return instance.expansions[a] or input.env(instance,a)
+ return expansions[a] or env(a)
end)
local s, m = s:gsub("%$%{([%a%d%_%-]+)%}", function(a)
busy = true
- return instance.expansions[a] or input.env(instance,a)
+ return expansions[a] or env(a)
end)
if n > 0 or m > 0 then
- instance.expansions[k]= s
+ expansions[k]= s
end
end
if not busy then break end
end
- for k,v in pairs(instance.expansions) do
- instance.expansions[k] = v:gsub("\\", '/')
+ for k,v in pairs(expansions) do
+ expansions[k] = v:gsub("\\", '/')
end
end
-function input.aux.expand_vars(instance,lst) -- simple vars
+function input.aux.expand_vars(lst) -- simple vars
+ local instance = input.instance
+ local variables, env = instance.variables, input.env
for k,v in pairs(lst) do
lst[k] = v:gsub("%$([%a%d%_%-]+)", function(a)
- return instance.variables[a] or input.env(instance,a)
+ return variables[a] or env(a)
end)
end
end
-function input.aux.expanded_var(instance,var) -- simple vars
+function input.aux.expanded_var(var) -- simple vars
+ local instance = input.instance
return var:gsub("%$([%a%d%_%-]+)", function(a)
- return instance.variables[a] or input.env(instance,a)
+ return instance.variables[a] or input.env(a)
end)
end
-function input.aux.entry(instance,entries,name)
+function input.aux.entry(entries,name)
if name and (name ~= "") then
+ local instance = input.instance
name = name:gsub('%$','')
local result = entries[name..'.'..instance.progname] or entries[name]
if result then
return result
else
- result = input.env(instance,name)
+ result = input.env(name)
if result then
instance.variables[name] = result
- input.expand_variables(instance)
+ input.expand_variables()
return instance.expansions[name] or ""
end
end
end
return ""
end
-function input.variable(instance,name)
- return input.aux.entry(instance,instance.variables,name)
+function input.variable(name)
+ return input.aux.entry(input.instance.variables,name)
end
-function input.expansion(instance,name)
- return input.aux.entry(instance,instance.expansions,name)
+function input.expansion(name)
+ return input.aux.entry(input.instance.expansions,name)
end
-function input.aux.is_entry(instance,entries,name)
+function input.aux.is_entry(entries,name)
if name and name ~= "" then
name = name:gsub('%$','')
- return (entries[name..'.'..instance.progname] or entries[name]) ~= nil
+ return (entries[name..'.'..input.instance.progname] or entries[name]) ~= nil
else
return false
end
end
-function input.is_variable(instance,name)
- return input.aux.is_entry(instance,instance.variables,name)
-end
-function input.is_expansion(instance,name)
- return input.aux.is_entry(instance,instance.expansions,name)
+function input.is_variable(name)
+ return input.aux.is_entry(input.instance.variables,name)
end
-function input.simplified_list(str)
- if type(str) == 'table' then
- return str -- troubles ; ipv , in texmf
- elseif str == '' then
- return { }
- else
- local t = { }
- for _,v in ipairs(string.splitchr(str:gsub("^\{(.+)\}$","%1"),",")) do
- t[#t+1] = (v:gsub("^[%!]*(.+)[%/\\]*$","%1"))
- end
- return t
- end
+function input.is_expansion(name)
+ return input.aux.is_entry(input.instance.expansions,name)
end
-function input.unexpanded_path_list(instance,str)
- local pth = input.variable(instance,str)
+function input.unexpanded_path_list(str)
+ local pth = input.variable(str)
local lst = input.split_path(pth)
- return input.aux.expanded_path(instance,lst)
+ return input.aux.expanded_path(lst)
end
-function input.unexpanded_path(instance,str)
- return file.join_path(input.unexpanded_path_list(instance,str))
+
+function input.unexpanded_path(str)
+ return file.join_path(input.unexpanded_path_list(str))
end
do
local done = { }
- function input.reset_extra_path(instance)
+ function input.reset_extra_path()
+ local instance = input.instance
local ep = instance.extra_paths
if not ep then
ep, done = { }, { }
@@ -5910,7 +6226,8 @@ do
end
end
- function input.register_extra_path(instance,paths,subpaths)
+ function input.register_extra_path(paths,subpaths)
+ local instance = input.instance
local ep = instance.extra_paths or { }
local n = #ep
if paths and paths ~= "" then
@@ -5955,7 +6272,8 @@ do
end
-function input.expanded_path_list(instance,str)
+function input.expanded_path_list(str)
+ local instance = input.instance
local function made_list(list)
local ep = instance.extra_paths
if not ep or #ep == 0 then
@@ -5996,39 +6314,41 @@ function input.expanded_path_list(instance,str)
-- engine+progname hash
str = str:gsub("%$","")
if not instance.lists[str] then -- cached
- local lst = made_list(input.split_path(input.expansion(instance,str)))
- instance.lists[str] = input.aux.expanded_path(instance,lst)
+ local lst = made_list(input.split_path(input.expansion(str)))
+ instance.lists[str] = input.aux.expanded_path(lst)
end
return instance.lists[str]
else
- local lst = input.split_path(input.expansion(instance,str))
- return made_list(input.aux.expanded_path(instance,lst))
+ local lst = input.split_path(input.expansion(str))
+ return made_list(input.aux.expanded_path(lst))
end
end
-function input.expand_path(instance,str)
- return file.join_path(input.expanded_path_list(instance,str))
+
+function input.clean_path_list(str)
+ local t = input.expanded_path_list(str)
+ if t then
+ for i=1,#t do
+ t[i] = file.collapse_path(input.clean_path(t[i]))
+ end
+ end
+ return t
end
---~ function input.first_writable_path(instance,name)
---~ for _,v in pairs(input.expanded_path_list(instance,name)) do
---~ if file.is_writable(file.join(v,'luatex-cache.tmp')) then
---~ return v
---~ end
---~ end
---~ return "."
---~ end
+function input.expand_path(str)
+ return file.join_path(input.expanded_path_list(str))
+end
-function input.expanded_path_list_from_var(instance,str) -- brrr
+function input.expanded_path_list_from_var(str) -- brrr
local tmp = input.var_of_format_or_suffix(str:gsub("%$",""))
if tmp ~= "" then
- return input.expanded_path_list(instance,str)
+ return input.expanded_path_list(str)
else
- return input.expanded_path_list(instance,tmp)
+ return input.expanded_path_list(tmp)
end
end
-function input.expand_path_from_var(instance,str)
- return file.join_path(input.expanded_path_list_from_var(instance,str))
+function input.expand_path_from_var(str)
+ return file.join_path(input.expanded_path_list_from_var(str))
end
function input.format_of_var(str)
@@ -6058,9 +6378,9 @@ function input.var_of_format_or_suffix(str)
return ''
end
-function input.expand_braces(instance,str) -- output variable and brace expansion of STRING
- local ori = input.variable(instance,str)
- local pth = input.aux.expanded_path(instance,input.split_path(ori))
+function input.expand_braces(str) -- output variable and brace expansion of STRING
+ local ori = input.variable(str)
+ local pth = input.aux.expanded_path(input.split_path(ori))
return file.join_path(pth)
end
@@ -6075,6 +6395,7 @@ end
-- {a,b,c/{p,q,r}/d/{x,y,z}//}
-- {a,b,c/{p,q/{x,y,z}},d/{p,q,r}}
-- {a,b,c/{p,q/{x,y,z},w}v,d/{p,q,r}}
+-- {$SELFAUTODIR,$SELFAUTOPARENT}{,{/share,}/texmf{-local,.local,}/web2c}
-- this one is better and faster, but it took me a while to realize
-- that this kind of replacement is cleaner than messy parsing and
@@ -6083,19 +6404,20 @@ 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
--- get rid of piecewise here, just a gmatch is ok
-
function input.aux.splitpathexpr(str, t, validate)
-- no need for optimization, only called a few times, we can use lpeg for the sub
t = t or { }
local concat = table.concat
+ str = str:gsub(",}",",@}")
+ str = str:gsub("{,","{@,")
+ -- str = "@" .. str .. "@"
while true do
local done = false
while true do
local ok = false
- str = str:gsub("([^{},]+){([^{}]-)}", function(a,b)
+ str = str:gsub("([^{},]+){([^{}]+)}", function(a,b)
local t = { }
- b:piecewise(",", function(s) t[#t+1] = a .. s end)
+ for s in b:gmatch("[^,]+") do t[#t+1] = a .. s end
ok, done = true, true
return "{" .. concat(t,",") .. "}"
end)
@@ -6103,9 +6425,9 @@ function input.aux.splitpathexpr(str, t, validate)
end
while true do
local ok = false
- str = str:gsub("{([^{}]-)}([^{},]+)", function(a,b)
+ str = str:gsub("{([^{}]+)}([^{},]+)", function(a,b)
local t = { }
- a:piecewise(",", function(s) t[#t+1] = s .. b end)
+ for s in a:gmatch("[^,]+") do t[#t+1] = s .. b end
ok, done = true, true
return "{" .. concat(t,",") .. "}"
end)
@@ -6113,50 +6435,41 @@ function input.aux.splitpathexpr(str, t, validate)
end
while true do
local ok = false
- str = str:gsub("([,{]){([^{}]+)}([,}])", function(a,b,c)
+ str = str:gsub("{([^{}]+)}{([^{}]+)}", function(a,b)
+ local t = { }
+ for sa in a:gmatch("[^,]+") do
+ for sb in b:gmatch("[^,]+") do
+ t[#t+1] = sa .. sb
+ end
+ end
ok, done = true, true
- return a .. b .. c
+ return "{" .. concat(t,",") .. "}"
end)
if not ok then break end
end
- if not done then break end
- end
- while true do
- local ok = false
- str = str:gsub("{([^{}]-)}{([^{}]-)}", function(a,b)
- local t = { }
- a:piecewise(",", function(sa)
- b:piecewise(",", function(sb)
- t[#t+1] = sa .. sb
- end)
- end)
- ok = true
- return "{" .. concat(t,",") .. "}"
- end)
- if not ok then break end
- end
- while true do
- local ok = false
- str = str:gsub("{([^{}]-)}", function(a)
- ok = true
- return a
+ str = str:gsub("({[^{}]*){([^{}]+)}([^{}]*})", function(a,b,c)
+ done = true
+ return a .. b.. c
end)
- if not ok then break end
+ if not done then break end
end
+ str = str:gsub("[{}]", "")
+ str = str:gsub("@","")
if validate then
- str:piecewise(",", function(s)
+ for s in str:gmatch("[^,]+") do
s = validate(s)
if s then t[#t+1] = s end
- end)
+ end
else
- str:piecewise(",", function(s)
+ for s in str:gmatch("[^,]+") do
t[#t+1] = s
- end)
+ end
end
return t
end
-function input.aux.expanded_path(instance,pathlist) -- maybe not a list, just a path
+function input.aux.expanded_path(pathlist) -- maybe not a list, just a path
+ local instance = input.instance
-- a previous version fed back into pathlist
local newlist, ok = { }, false
for _,v in ipairs(pathlist) do
@@ -6188,17 +6501,16 @@ input.is_readable = { }
function input.aux.is_readable(readable, name)
if input.trace > 2 then
if readable then
- input.logger("+ readable", name)
+ input.logger("+ readable: %s",name)
else
- input.logger("- readable", name)
+ input.logger("- readable: %s", name)
end
end
return readable
end
function input.is_readable.file(name)
- -- return input.aux.is_readable(file.is_readable(name), name)
- return input.aux.is_readable(input.aux.is_file(name), name)
+ return input.aux.is_readable(lfs.isfile(name), name)
end
input.is_readable.tex = input.is_readable.file
@@ -6206,12 +6518,13 @@ input.is_readable.tex = input.is_readable.file
-- name
-- name/name
-function input.aux.collect_files(instance,names)
+function input.aux.collect_files(names)
+ local instance = input.instance
local filelist = { }
for _, fname in pairs(names) do
if fname then
if input.trace > 2 then
- input.logger("? blobpath asked",fname)
+ input.logger("? blobpath asked: %s",fname)
end
local bname = file.basename(fname)
local dname = file.dirname(fname)
@@ -6225,7 +6538,7 @@ function input.aux.collect_files(instance,names)
local files = blobpath and instance.files[blobpath]
if files then
if input.trace > 2 then
- input.logger('? blobpath do',blobpath .. " (" .. bname ..")")
+ input.logger('? blobpath do: %s (%s)',blobpath,bname)
end
local blobfile = files[bname]
if not blobfile then
@@ -6258,7 +6571,7 @@ function input.aux.collect_files(instance,names)
end
end
elseif input.trace > 1 then
- input.logger('! blobpath no',blobpath .. " (" .. bname ..")" )
+ input.logger('! blobpath no: %s (%s)',blobpath,bname)
end
end
end
@@ -6313,15 +6626,17 @@ do
end
-function input.aux.register_in_trees(instance,name)
+function input.aux.register_in_trees(name)
if not name:find("^%.") then
+ local instance = input.instance
instance.foundintrees[name] = (instance.foundintrees[name] or 0) + 1 -- maybe only one
end
end
-- split the next one up, better for jit
-function input.aux.find_file(instance,filename) -- todo : plugin (scanners, checkers etc)
+function input.aux.find_file(filename) -- todo : plugin (scanners, checkers etc)
+ local instance = input.instance
local result = { }
local stamp = nil
filename = input.normalize_name(filename) -- elsewhere
@@ -6330,16 +6645,22 @@ function input.aux.find_file(instance,filename) -- todo : plugin (scanners, chec
if instance.remember then
stamp = filename .. "--" .. instance.engine .. "--" .. instance.progname .. "--" .. instance.format
if instance.found[stamp] then
- input.logger('! remembered', filename)
+ if input.trace > 0 then
+ input.logger('! remembered: %s',filename)
+ end
return instance.found[stamp]
end
end
if filename:find('%*') then
- input.logger('! wildcard', filename)
- result = input.find_wildcard_files(instance,filename)
+ if input.trace > 0 then
+ input.logger('! wildcard: %s', filename)
+ end
+ result = input.find_wildcard_files(filename)
elseif input.aux.qualified_path(filename) then
if input.is_readable.file(filename) then
- input.logger('! qualified', filename)
+ if input.trace > 0 then
+ input.logger('! qualified: %s', filename)
+ end
result = { filename }
else
local forcedname, ok = "", false
@@ -6347,22 +6668,26 @@ function input.aux.find_file(instance,filename) -- todo : plugin (scanners, chec
if instance.format == "" then
forcedname = filename .. ".tex"
if input.is_readable.file(forcedname) then
- input.logger('! no suffix, forcing standard filetype tex')
+ if input.trace > 0 then
+ input.logger('! no suffix, forcing standard filetype: tex')
+ end
result, ok = { forcedname }, true
end
else
for _, s in pairs(input.suffixes_of_format(instance.format)) do
forcedname = filename .. "." .. s
if input.is_readable.file(forcedname) then
- input.logger('! no suffix, forcing format filetype', s)
+ if input.trace > 0 then
+ input.logger('! no suffix, forcing format filetype: %s', s)
+ end
result, ok = { forcedname }, true
break
end
end
end
end
- if not ok then
- input.logger('? qualified', filename)
+ if not ok and input.trace > 0 then
+ input.logger('? qualified: %s', filename)
end
end
else
@@ -6380,10 +6705,14 @@ function input.aux.find_file(instance,filename) -- todo : plugin (scanners, chec
local forcedname = filename .. '.tex'
wantedfiles[#wantedfiles+1] = forcedname
filetype = input.format_of_suffix(forcedname)
- input.logger('! forcing filetype',filetype)
+ if input.trace > 0 then
+ input.logger('! forcing filetype: %s',filetype)
+ end
else
filetype = input.format_of_suffix(filename)
- input.logger('! using suffix based filetype',filetype)
+ if input.trace > 0 then
+ input.logger('! using suffix based filetype: %s',filetype)
+ end
end
else
if ext == "" then
@@ -6392,16 +6721,18 @@ function input.aux.find_file(instance,filename) -- todo : plugin (scanners, chec
end
end
filetype = instance.format
- input.logger('! using given filetype',filetype)
+ if input.trace > 0 then
+ input.logger('! using given filetype: %s',filetype)
+ end
end
local typespec = input.variable_of_format(filetype)
- local pathlist = input.expanded_path_list(instance,typespec)
+ local pathlist = input.expanded_path_list(typespec)
if not pathlist or #pathlist == 0 then
-- no pathlist, access check only / todo == wildcard
if input.trace > 2 then
- input.logger('? filename',filename)
- input.logger('? filetype',filetype or '?')
- input.logger('? wanted files',table.concat(wantedfiles," | "))
+ input.logger('? filename: %s',filename)
+ input.logger('? filetype: %s',filetype or '?')
+ input.logger('? wanted files: %s',table.concat(wantedfiles," | "))
end
for _, fname in pairs(wantedfiles) do
if fname and input.is_readable.file(fname) then
@@ -6411,7 +6742,7 @@ function input.aux.find_file(instance,filename) -- todo : plugin (scanners, chec
end
end
-- this is actually 'other text files' or 'any' or 'whatever'
- local filelist = input.aux.collect_files(instance,wantedfiles)
+ local filelist = input.aux.collect_files(wantedfiles)
local fl = filelist and filelist[1]
if fl then
filename = fl[3]
@@ -6420,12 +6751,12 @@ function input.aux.find_file(instance,filename) -- todo : plugin (scanners, chec
end
else
-- list search
- local filelist = input.aux.collect_files(instance,wantedfiles)
+ local filelist = input.aux.collect_files(wantedfiles)
local doscan, recurse
if input.trace > 2 then
- input.logger('? filename',filename)
- -- if pathlist then input.logger('? path list',table.concat(pathlist," | ")) end
- -- if filelist then input.logger('? file list',table.concat(filelist," | ")) end
+ input.logger('? filename: %s',filename)
+ -- if pathlist then input.logger('? path list: %s',table.concat(pathlist," | ")) end
+ -- if filelist then input.logger('? file list: %s',table.concat(filelist," | ")) end
end
-- a bit messy ... esp the doscan setting here
for _, path in pairs(pathlist) do
@@ -6446,11 +6777,11 @@ function input.aux.find_file(instance,filename) -- todo : plugin (scanners, chec
if f:find(expr) then
-- input.debug('T',' '..f)
if input.trace > 2 then
- input.logger('= found in hash',f)
+ input.logger('= found in hash: %s',f)
end
--- todo, test for readable
result[#result+1] = fl[3]
- input.aux.register_in_trees(instance,f) -- for tracing used files
+ input.aux.register_in_trees(f) -- for tracing used files
done = true
if not instance.allresults then break end
else
@@ -6464,12 +6795,12 @@ function input.aux.find_file(instance,filename) -- todo : plugin (scanners, chec
local pname = pathname:gsub("%.%*$",'')
if not pname:find("%*") then
local ppname = pname:gsub("/+$","")
- if input.aux.can_be_dir(instance,ppname) then
+ if input.aux.can_be_dir(ppname) then
for _, w in pairs(wantedfiles) do
local fname = file.join(ppname,w)
if input.is_readable.file(fname) then
if input.trace > 2 then
- input.logger('= found by scanning',fname)
+ input.logger('= found by scanning: %s',fname)
end
result[#result+1] = fname
done = true
@@ -6498,40 +6829,29 @@ function input.aux.find_file(instance,filename) -- todo : plugin (scanners, chec
return result
end
-input.aux._find_file_ = input.aux.find_file
+input.aux._find_file_ = input.aux.find_file -- frozen variant
-function input.aux.find_file(instance,filename) -- maybe make a lowres cache too
- local result = input.aux._find_file_(instance,filename)
+function input.aux.find_file(filename) -- maybe make a lowres cache too
+ local result = input.aux._find_file_(filename)
if #result == 0 then
local lowered = filename:lower()
if filename ~= lowered then
- return input.aux._find_file_(instance,lowered)
+ return input.aux._find_file_(lowered)
end
end
return result
end
-if lfs and lfs.isfile then
- input.aux.is_file = lfs.isfile -- to be done: use this
-else
- input.aux.is_file = file.is_readable
-end
-
-if lfs and lfs.isdir then
- function input.aux.can_be_dir(instance,name)
- if not instance.fakepaths[name] then
- if lfs.isdir(name) then
- instance.fakepaths[name] = 1 -- directory
- else
- instance.fakepaths[name] = 2 -- no directory
- end
+function input.aux.can_be_dir(name)
+ local instance = input.instance
+ if not instance.fakepaths[name] then
+ if lfs.isdir(name) then
+ instance.fakepaths[name] = 1 -- directory
+ else
+ instance.fakepaths[name] = 2 -- no directory
end
- return (instance.fakepaths[name] == 1)
- end
-else
- function input.aux.can_be_dir()
- return true
end
+ return (instance.fakepaths[name] == 1)
end
if not input.concatinators then input.concatinators = { } end
@@ -6539,7 +6859,8 @@ if not input.concatinators then input.concatinators = { } end
input.concatinators.tex = file.join
input.concatinators.file = input.concatinators.tex
-function input.find_files(instance,filename,filetype,mustexist)
+function input.find_files(filename,filetype,mustexist)
+ local instance = input.instance
if type(mustexist) == boolean then
-- all set
elseif type(filetype) == 'boolean' then
@@ -6548,16 +6869,17 @@ function input.find_files(instance,filename,filetype,mustexist)
filetype, mustexist = nil, false
end
instance.format = filetype or ''
- local t = input.aux.find_file(instance,filename,true)
+ local t = input.aux.find_file(filename,true)
instance.format = ''
return t
end
-function input.find_file(instance,filename,filetype,mustexist)
- return (input.find_files(instance,filename,filetype,mustexist)[1] or "")
+function input.find_file(filename,filetype,mustexist)
+ return (input.find_files(filename,filetype,mustexist)[1] or "")
end
-function input.find_given_files(instance,filename)
+function input.find_given_files(filename)
+ local instance = input.instance
local bname, result = file.basename(filename), { }
for k, hash in ipairs(instance.hashes) do
local files = instance.files[hash.tag]
@@ -6585,11 +6907,12 @@ function input.find_given_files(instance,filename)
return result
end
-function input.find_given_file(instance,filename)
- return (input.find_given_files(instance,filename)[1] or "")
+function input.find_given_file(filename)
+ return (input.find_given_files(filename)[1] or "")
end
-function input.find_wildcard_files(instance,filename) -- todo: remap:
+function input.find_wildcard_files(filename) -- todo: remap:
+ local instance = input.instance
local result = { }
local bname, dname = file.basename(filename), file.dirname(filename)
local path = dname:gsub("^*/","")
@@ -6645,13 +6968,14 @@ function input.find_wildcard_files(instance,filename) -- todo: remap:
return result
end
-function input.find_wildcard_file(instance,filename)
- return (input.find_wildcard_files(instance,filename)[1] or "")
+function input.find_wildcard_file(filename)
+ return (input.find_wildcard_files(filename)[1] or "")
end
-- main user functions
-function input.save_used_files_in_trees(instance, filename,jobname)
+function input.save_used_files_in_trees(filename,jobname)
+ local instance = input.instance
if not filename then filename = 'luatex.jlg' end
local f = io.open(filename,'w')
if f then
@@ -6670,24 +6994,24 @@ function input.save_used_files_in_trees(instance, filename,jobname)
end
end
-function input.automount(instance)
+function input.automount()
-- implemented later
end
-function input.load(instance)
- input.starttiming(instance)
- input.resetconfig(instance)
- input.identify_cnf(instance)
- input.load_lua(instance)
- input.expand_variables(instance)
- input.load_cnf(instance)
- input.expand_variables(instance)
- input.load_hash(instance)
- input.automount(instance)
- input.stoptiming(instance)
+function input.load()
+ input.starttiming(input.instance)
+ input.resetconfig()
+ input.identify_cnf()
+ input.load_lua()
+ input.expand_variables()
+ input.load_cnf()
+ input.expand_variables()
+ input.load_hash()
+ input.automount()
+ input.stoptiming(input.instance)
end
-function input.for_files(instance, command, files, filetype, mustexist)
+function input.for_files(command, files, filetype, mustexist)
if files and #files > 0 then
local function report(str)
if input.verbose then
@@ -6700,7 +7024,7 @@ function input.for_files(instance, command, files, filetype, mustexist)
report('')
end
for _, file in pairs(files) do
- local result = command(instance,file,filetype,mustexist)
+ local result = command(file,filetype,mustexist)
if type(result) == 'string' then
report(result)
else
@@ -6714,14 +7038,11 @@ end
-- strtab
-function input.var_value(instance,str) -- output the value of variable $STRING.
- return input.variable(instance,str)
-end
-function input.expand_var(instance,str) -- output variable expansion of STRING.
- return input.expansion(instance,str)
-end
-function input.show_path(instance,str) -- output search path for file type NAME
- return file.join_path(input.expanded_path_list(instance,input.format_of_var(str)))
+input.var_value = input.variable -- output the value of variable $STRING.
+input.expand_var = input.expansion -- output variable expansion of STRING.
+
+function input.show_path(str) -- output search path for file type NAME
+ return file.join_path(input.expanded_path_list(input.format_of_var(str)))
end
-- input.find_file(filename)
@@ -6773,53 +7094,55 @@ function table.sequenced(t,sep) -- temp here
return table.concat(s, sep or " | ")
end
-function input.methodhandler(what, instance, filename, filetype) -- ...
+function input.methodhandler(what, filename, filetype) -- ...
local specification = (type(filename) == "string" and input.splitmethod(filename)) or filename -- no or { }, let it bomb
local scheme = specification.scheme
if input[what][scheme] then
- input.logger('= handler',specification.original .." -> " .. what .. " -> " .. table.sequenced(specification))
- return input[what][scheme](instance,filename,filetype) -- todo: specification
+ if input.trace > 0 then
+ input.logger('= handler: %s -> %s -> %s',specification.original,what,table.sequenced(specification))
+ end
+ return input[what][scheme](filename,filetype) -- todo: specification
else
- return input[what].tex(instance,filename,filetype) -- todo: specification
+ return input[what].tex(filename,filetype) -- todo: specification
end
end
-- also inside next test?
-function input.findtexfile(instance, filename, filetype)
- return input.methodhandler('finders',instance, input.normalize_name(filename), filetype)
+function input.findtexfile(filename, filetype)
+ return input.methodhandler('finders',input.normalize_name(filename), filetype)
end
-function input.opentexfile(instance,filename)
- return input.methodhandler('openers',instance, input.normalize_name(filename))
+function input.opentexfile(filename)
+ return input.methodhandler('openers',input.normalize_name(filename))
end
-function input.findbinfile(instance, filename, filetype)
- return input.methodhandler('finders',instance, input.normalize_name(filename), filetype)
+function input.findbinfile(filename, filetype)
+ return input.methodhandler('finders',input.normalize_name(filename), filetype)
end
-function input.openbinfile(instance,filename)
- return input.methodhandler('loaders',instance, input.normalize_name(filename))
+function input.openbinfile(filename)
+ return input.methodhandler('loaders',input.normalize_name(filename))
end
-function input.loadbinfile(instance, filename, filetype)
- local fname = input.findbinfile(instance, input.normalize_name(filename), filetype)
+function input.loadbinfile(filename, filetype)
+ local fname = input.findbinfile(input.normalize_name(filename), filetype)
if fname and fname ~= "" then
- return input.openbinfile(instance,fname)
+ return input.openbinfile(fname)
else
return unpack(input.loaders.notfound)
end
end
-function input.texdatablob(instance, filename, filetype)
- local ok, data, size = input.loadbinfile(instance, filename, filetype)
+function input.texdatablob(filename, filetype)
+ local ok, data, size = input.loadbinfile(filename, filetype)
return data or ""
end
input.loadtexfile = input.texdatablob
-function input.openfile(filename) -- brrr texmf.instance here / todo ! ! ! ! !
- local fullname = input.findtexfile(texmf.instance, filename)
+function input.openfile(filename)
+ local fullname = input.findtexfile(filename)
if fullname and (fullname ~= "") then
- return input.opentexfile(texmf.instance, fullname)
+ return input.opentexfile(fullname)
else
return nil
end
@@ -6865,16 +7188,18 @@ end
-- beware: i need to check where we still need a / on windows:
function input.clean_path(str)
---~ return (((str:gsub("\\","/")):gsub("^!+","")):gsub("//+","//"))
if str then
- return ((str:gsub("\\","/")):gsub("^!+",""))
+ str = str:gsub("\\","/")
+ str = str:gsub("^!+","")
+ str = str:gsub("^~",input.homedir)
+ return str
else
return nil
end
end
function input.do_with_path(name,func)
- for _, v in pairs(input.expanded_path_list(instance,name)) do
+ for _, v in pairs(input.expanded_path_list(name)) do
func("^"..input.clean_path(v))
end
end
@@ -6883,7 +7208,8 @@ function input.do_with_var(name,func)
func(input.aux.expanded_var(name))
end
-function input.with_files(instance,pattern,handle)
+function input.with_files(pattern,handle)
+ local instance = input.instance
for _, hash in ipairs(instance.hashes) do
local blobpath = hash.tag
local blobtype = hash.type
@@ -6910,37 +7236,22 @@ function input.with_files(instance,pattern,handle)
end
end
---~ function input.update_script(oldname,newname) -- oldname -> own.name, not per se a suffix
---~ newname = file.addsuffix(newname,"lua")
---~ local newscript = input.clean_path(input.find_file(instance, newname))
---~ local oldscript = input.clean_path(oldname)
---~ input.report("old script", oldscript)
---~ input.report("new script", newscript)
---~ if oldscript ~= newscript and (oldscript:find(file.removesuffix(newname).."$") or oldscript:find(newname.."$")) then
---~ local newdata = io.loaddata(newscript)
---~ if newdata then
---~ input.report("old script content replaced by new content")
---~ io.savedata(oldscript,newdata)
---~ end
---~ end
---~ end
-
-function input.update_script(instance,oldname,newname) -- oldname -> own.name, not per se a suffix
+function input.update_script(oldname,newname) -- oldname -> own.name, not per se a suffix
local scriptpath = "scripts/context/lua"
newname = file.addsuffix(newname,"lua")
local oldscript = input.clean_path(oldname)
- input.report("to be replaced old script", oldscript)
- local newscripts = input.find_files(instance, newname) or { }
+ input.report("to be replaced old script %s", oldscript)
+ local newscripts = input.find_files(newname) or { }
if #newscripts == 0 then
input.report("unable to locate new script")
else
for _, newscript in ipairs(newscripts) do
newscript = input.clean_path(newscript)
- input.report("checking new script", newscript)
+ input.report("checking new script %s", newscript)
if oldscript == newscript then
input.report("old and new script are the same")
elseif not newscript:find(scriptpath) then
- input.report("new script should come from",scriptpath)
+ input.report("new script should come from %s",scriptpath)
elseif not (oldscript:find(file.removesuffix(newname).."$") or oldscript:find(newname.."$")) then
input.report("invalid new script name")
else
@@ -6968,10 +7279,10 @@ do
local resolvers = { }
- resolvers.environment = function(instance,str)
+ resolvers.environment = function(str)
return input.clean_path(os.getenv(str) or os.getenv(str:upper()) or os.getenv(str:lower()) or "")
end
- resolvers.relative = function(instance,str,n)
+ resolvers.relative = function(str,n)
if io.exists(str) then
-- nothing
elseif io.exists("./" .. str) then
@@ -6989,16 +7300,16 @@ do
end
return input.clean_path(str)
end
- resolvers.locate = function(instance,str)
- local fullname = input.find_given_file(instance,str) or ""
+ resolvers.locate = function(str)
+ local fullname = input.find_given_file(str) or ""
return input.clean_path((fullname ~= "" and fullname) or str)
end
- resolvers.filename = function(instance,str)
- local fullname = input.find_given_file(instance,str) or ""
+ resolvers.filename = function(str)
+ local fullname = input.find_given_file(str) or ""
return input.clean_path(file.basename((fullname ~= "" and fullname) or str))
end
- resolvers.pathname = function(instance,str)
- local fullname = input.find_given_file(instance,str) or ""
+ resolvers.pathname = function(str)
+ local fullname = input.find_given_file(str) or ""
return input.clean_path(file.dirname((fullname ~= "" and fullname) or str))
end
@@ -7010,15 +7321,15 @@ do
resolvers.file = resolvers.filename
resolvers.path = resolvers.pathname
- local function resolve(instance,str)
+ local function resolve(str)
if type(str) == "table" then
for k, v in pairs(str) do
- str[k] = resolve(instance,v) or v
+ str[k] = resolve(v) or v
end
elseif str and str ~= "" then
- str = str:gsub("([a-z]+):([^ ]+)", function(method,target)
+ str = str:gsub("([a-z]+):([^ ]*)", function(method,target)
if resolvers[method] then
- return resolvers[method](instance,target)
+ return resolvers[method](target)
else
return method .. ":" .. target
end
@@ -7027,10 +7338,173 @@ do
return str
end
+ if os.uname then
+ for k, v in pairs(os.uname()) do
+ if not resolvers[k] then
+ resolvers[k] = function() return v end
+ end
+ end
+ end
+
input.resolve = resolve
end
+function input.boolean_variable(str,default)
+ local b = input.expansion("PURGECACHE")
+ if b == "" then
+ return default
+ else
+ b = toboolean(b)
+ return (b == nil and default) or b
+ end
+end
+
+
+if not modules then modules = { } end modules ['luat-log'] = {
+ version = 1.001,
+ comment = "companion to luat-lib.tex",
+ author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
+ copyright = "PRAGMA ADE / ConTeXt Development Team",
+ license = "see context related readme files"
+}
+
+--[[ldx--
+This is a prelude to a more extensive logging module. For the sake
+of parsing log files, in addition to the standard logging we will
+provide an structured file. Actually, any logging that
+is hooked into callbacks will be \XML\ by default.
+--ldx]]--
+
+-- input.logger -> special tracing, driven by log level (only input)
+-- input.report -> goes to terminal, depends on verbose, has banner
+-- logs.report -> module specific tracing and reporting, no banner but class
+
+
+input = input or { }
+logs = logs or { }
+
+--[[ldx--
+This looks pretty ugly but we need to speed things up a bit.
+--ldx]]--
+
+logs.levels = {
+ ['error'] = 1,
+ ['warning'] = 2,
+ ['info'] = 3,
+ ['debug'] = 4
+}
+
+logs.functions = {
+ 'report', 'start', 'stop', 'push', 'pop', 'line', 'direct'
+}
+
+logs.callbacks = {
+ 'start_page_number',
+ 'stop_page_number',
+ 'report_output_pages',
+ 'report_output_log'
+}
+
+logs.tracers = {
+}
+
+logs.xml = logs.xml or { }
+logs.tex = logs.tex or { }
+
+logs.level = 0
+
+local write_nl, write, format = texio.write_nl or print, texio.write or io.write, string.format
+
+if texlua then
+ write_nl = print
+ write = io.write
+end
+
+function logs.xml.report(category,fmt,...) -- new
+ write_nl(format("%s",category,format(fmt,...)))
+end
+function logs.xml.line(fmt,...) -- new
+ write_nl(format("%s",format(fmt,...)))
+end
+
+function logs.xml.start() if logs.level > 0 then tw("<%s>" ) end end
+function logs.xml.stop () if logs.level > 0 then tw("%s>") end end
+function logs.xml.push () if logs.level > 0 then tw("" ) end end
+
+function logs.tex.report(category,fmt,...) -- new
+ -- write_nl(format("%s | %s",category,format(fmt,...))) -- arg to format can be tex comment so .. .
+ write_nl(category .. " | " .. format(fmt,...))
+end
+function logs.tex.line(fmt,...) -- new
+ write_nl(format(fmt,...))
+end
+
+function logs.set_level(level)
+ logs.level = logs.levels[level] or level
+end
+
+function logs.set_method(method)
+ for _, v in pairs(logs.functions) do
+ logs[v] = logs[method][v] or function() end
+ end
+ if callback and input[method] then
+ for _, cb in pairs(logs.callbacks) do
+ callback.register(cb, input[method][cb])
+ end
+ end
+end
+
+function logs.xml.start_page_number()
+ write_nl(format("")
+ write_nl("")
+end
+
+function logs.xml.report_output_pages(p,b)
+ write_nl(format("", p))
+ write_nl(format("", b))
+ write_nl("")
+end
+
+function logs.xml.report_output_log()
+end
+
+function input.logger(...) -- assumes test for input.trace > n
+ if input.trace > 0 then
+ logs.report(...)
+ end
+end
+
+function input.report(fmt,...)
+ if input.verbose then
+ logs.report(input.banner or "report",format(fmt,...))
+ end
+end
+
+function input.reportlines(str) -- todo:
+ for line in str:gmatch("(.-)[\n\r]") do
+ logs.report(input.banner or "report",line)
+ end
+end
+
+function input.help(banner,message)
+ if not input.verbose then
+ input.verbose = true
+ -- input.report(banner,"\n")
+ end
+ input.report(banner,"\n")
+ input.report("")
+ input.reportlines(message)
+end
+
+logs.set_level('error')
+logs.set_method('tex')
+
if not modules then modules = { } end modules ['luat-tmp'] = {
version = 1.001,
@@ -7056,63 +7530,82 @@ being written at the same time is small. We also need to extend
luatools with a recache feature.
--ldx]]--
+local format = string.format
+
caches = caches or { }
dir = dir or { }
texmf = texmf or { }
-caches.path = caches.path or nil
-caches.base = caches.base or "luatex-cache"
-caches.more = caches.more or "context"
-caches.direct = false -- true is faster but may need huge amounts of memory
-caches.trace = false
-caches.tree = false
-caches.paths = caches.paths or nil
-caches.force = false
-
-input.usecache = not toboolean(os.getenv("TEXMFSHARECACHE") or "false",true) -- true
-
-function caches.temp(instance)
- local function checkpath(cachepath)
- if not cachepath or cachepath == "" then
- return nil
- elseif lfs.attributes(cachepath,"mode") == "directory" then -- lfs.isdir(cachepath) then
- return cachepath
- elseif caches.force or io.ask(string.format("Should I create the cache path %s?",cachepath), "no", { "yes", "no" }) == "yes" then
- dir.mkdirs(cachepath)
- return (lfs.attributes(cachepath,"mode") == "directory") and cachepath
- else
- return nil
+caches.path = caches.path or nil
+caches.base = caches.base or "luatex-cache"
+caches.more = caches.more or "context"
+caches.direct = false -- true is faster but may need huge amounts of memory
+caches.trace = false
+caches.tree = false
+caches.paths = caches.paths or nil
+caches.force = false
+caches.defaults = { "TEXMFCACHE", "TMPDIR", "TEMPDIR", "TMP", "TEMP", "HOME", "HOMEPATH" }
+
+function caches.temp()
+ local cachepath = nil
+ local function check(list,isenv)
+ if not cachepath then
+ for _, v in ipairs(list) do
+ cachepath = (isenv and (os.env[v] or "")) or v or ""
+ if cachepath == "" then
+ -- next
+ else
+ cachepath = input.clean_path(cachepath)
+ if lfs.isdir(cachepath) and file.iswritable(cachepath) then -- lfs.attributes(cachepath,"mode") == "directory"
+ break
+ elseif caches.force or io.ask(format("\nShould I create the cache path %s?",cachepath), "no", { "yes", "no" }) == "yes" then
+ dir.mkdirs(cachepath)
+ if lfs.isdir(cachepath) and file.iswritable(cachepath) then
+ break
+ end
+ end
+ end
+ cachepath = nil
+ end
end
end
- local cachepath = input.expanded_path_list(instance,"TEXMFCACHE")
- cachepath = cachepath and #cachepath > 0 and checkpath(cachepath[1])
- if not cachepath then
- cachepath = os.getenv("TEXMFCACHE") or os.getenv("HOME") or os.getenv("HOMEPATH") or os.getenv("TMP") or os.getenv("TEMP") or os.getenv("TMPDIR") or nil
- cachepath = checkpath(cachepath)
- end
+ check(input.clean_path_list("TEXMFCACHE") or { })
+ check(caches.defaults,true)
if not cachepath then
- print("\nfatal error: there is no valid cache path defined\n")
+ print("\nfatal error: there is no valid (writable) cache path defined\n")
os.exit()
- elseif lfs.attributes(cachepath,"mode") ~= "directory" then
- print(string.format("\nfatal error: cache path %s is not a directory\n",cachepath))
+ elseif not lfs.isdir(cachepath) then -- lfs.attributes(cachepath,"mode") ~= "directory"
+ print(format("\nfatal error: cache path %s is not a directory\n",cachepath))
os.exit()
end
- function caches.temp(instance)
+ cachepath = input.normalize_name(cachepath)
+ function caches.temp()
return cachepath
end
return cachepath
end
-function caches.configpath(instance)
- return table.concat(instance.cnffiles,";")
+function caches.configpath()
+ return table.concat(input.instance.cnffiles,";")
end
function caches.hashed(tree)
return md5.hex((tree:lower()):gsub("[\\\/]+","/"))
end
-function caches.treehash(instance)
- local tree = caches.configpath(instance)
+--~ tracing:
+
+--~ function caches.hashed(tree)
+--~ tree = (tree:lower()):gsub("[\\\/]+","/")
+--~ local hash = md5.hex(tree)
+--~ if input.verbose then -- temp message
+--~ input.report("hashing %s => %s",tree,hash)
+--~ end
+--~ return hash
+--~ end
+
+function caches.treehash()
+ local tree = caches.configpath()
if not tree or tree == "" then
return false
else
@@ -7120,14 +7613,14 @@ function caches.treehash(instance)
end
end
-function caches.setpath(instance,...)
+function caches.setpath(...)
if not caches.path then
if not caches.path then
- caches.path = caches.temp(instance)
+ caches.path = caches.temp()
end
caches.path = input.clean_path(caches.path) -- to be sure
if lfs then
- caches.tree = caches.tree or caches.treehash(instance)
+ caches.tree = caches.tree or caches.treehash()
if caches.tree then
caches.path = dir.mkdirs(caches.path,caches.base,caches.more,caches.tree)
else
@@ -7147,9 +7640,9 @@ function caches.setpath(instance,...)
return caches.path
end
-function caches.definepath(instance,category,subcategory)
+function caches.definepath(category,subcategory)
return function()
- return caches.setpath(instance,category,subcategory)
+ return caches.setpath(category,subcategory)
end
end
@@ -7172,26 +7665,38 @@ function caches.is_writable(filepath,filename)
return file.is_writable(tmaname)
end
-function caches.savedata(filepath,filename,data,raw) -- raw needed for file cache
+function input.boolean_variable(str,default)
+ local b = input.expansion("PURGECACHE")
+ if b == "" then
+ return default
+ else
+ b = toboolean(b)
+ return (b == nil and default) or b
+ end
+end
+
+function caches.savedata(filepath,filename,data,raw)
local tmaname, tmcname = caches.setluanames(filepath,filename)
local reduce, simplify = true, true
if raw then
reduce, simplify = false, false
end
if caches.direct then
- file.savedata(tmaname, table.serialize(data,'return',true,true))
+ file.savedata(tmaname, table.serialize(data,'return',true,true,false)) -- no hex
else
- table.tofile (tmaname, data,'return',true,true) -- maybe not the last true
+ table.tofile(tmaname, data,'return',true,true,false) -- maybe not the last true
end
- utils.lua.compile(tmaname, tmcname)
+ local cleanup = input.boolean_variable("PURGECACHE", false)
+ local strip = input.boolean_variable("LUACSTRIP", true)
+ utils.lua.compile(tmaname, tmcname, cleanup, strip)
end
-- here we use the cache for format loading (texconfig.[formatname|jobname])
--~ if tex and texconfig and texconfig.formatname and texconfig.formatname == "" then
-if tex and texconfig and (not texconfig.formatname or texconfig.formatname == "") and texmf.instance then
+if tex and texconfig and (not texconfig.formatname or texconfig.formatname == "") and input and input.instance then
if not texconfig.luaname then texconfig.luaname = "cont-en.lua" end -- or luc
- texconfig.formatname = caches.setpath(texmf.instance,"formats") .. "/" .. texconfig.luaname:gsub("%.lu.$",".fmt")
+ texconfig.formatname = caches.setpath("formats") .. "/" .. texconfig.luaname:gsub("%.lu.$",".fmt")
end
--[[ldx--
@@ -7214,7 +7719,7 @@ do -- local report
local function report(container,tag,name)
if caches.trace or containers.trace or container.trace then
- logs.report(string.format("%s cache",container.subcategory),string.format("%s: %s",tag,name or 'invalid'))
+ logs.report(format("%s cache",container.subcategory),"%s: %s",tag,name or 'invalid')
end
end
@@ -7239,7 +7744,7 @@ do -- local report
enabled = enabled,
version = version or 1.000,
trace = false,
- path = caches.setpath(texmf.instance,category,subcategory),
+ path = caches.setpath(category,subcategory),
}
c[subcategory] = s
end
@@ -7304,13 +7809,16 @@ end
-- reimplement the saver.
local save_data = input.aux.save_data
+local load_data = input.aux.load_data
-input.cachepath = nil
+input.cachepath = nil -- public, for tracing
+input.usecache = true -- public, for tracing
-function input.aux.save_data(instance, dataname, check)
- input.cachepath = input.cachepath or caches.definepath(instance,"trees")
- save_data(instance, dataname, check, function(cachename,dataname)
+function input.aux.save_data(dataname, check)
+ save_data(dataname, check, function(cachename,dataname)
+ input.usecache = not toboolean(input.expansion("CACHEINTDS") or "false",true)
if input.usecache then
+ input.cachepath = input.cachepath or caches.definepath("trees")
return file.join(input.cachepath(),caches.hashed(cachename))
else
return file.join(cachename,dataname)
@@ -7318,12 +7826,11 @@ function input.aux.save_data(instance, dataname, check)
end)
end
-local load_data = input.aux.load_data
-
-function input.aux.load_data(instance,pathname,dataname,filename)
- input.cachepath = input.cachepath or caches.definepath(instance,"trees")
- load_data(instance,pathname,dataname,filename,function(dataname,filename)
+function input.aux.load_data(pathname,dataname,filename)
+ load_data(pathname,dataname,filename,function(dataname,filename)
+ input.usecache = not toboolean(input.expansion("CACHEINTDS") or "false",true)
if input.usecache then
+ input.cachepath = input.cachepath or caches.definepath("trees")
return file.join(input.cachepath(),caches.hashed(pathname))
else
if not filename or (filename == "") then
@@ -7338,13 +7845,13 @@ end
input.automounted = input.automounted or { }
-function input.automount(instance,usecache)
- local mountpaths = input.simplified_list(input.expansion(instance,'TEXMFMOUNT'))
+function input.automount(usecache)
+ local mountpaths = input.clean_path_list(input.expansion('TEXMFMOUNT'))
if table.is_empty(mountpaths) and usecache then
- mountpaths = { caches.setpath(instance,"mount") }
+ mountpaths = { caches.setpath("mount") }
end
if not table.is_empty(mountpaths) then
- input.starttiming(instance)
+ input.starttiming(input.instance)
for k, root in pairs(mountpaths) do
local f = io.open(root.."/url.tmi")
if f then
@@ -7353,16 +7860,16 @@ function input.automount(instance,usecache)
if line:find("^[%%#%-]") then -- or %W
-- skip
elseif line:find("^zip://") then
- input.report("mounting",line)
+ input.report("mounting %s",line)
table.insert(input.automounted,line)
- input.usezipfile(instance,line)
+ input.usezipfile(line)
end
end
end
f:close()
end
end
- input.stoptiming(instance)
+ input.stoptiming(input.instance)
end
end
@@ -7411,17 +7918,17 @@ function input.storage.dump()
else
name = str
end
- initialize = string.format("%s %s = %s or {} ", initialize, name, name)
+ initialize = format("%s %s = %s or {} ", initialize, name, name)
end
if evaluate then
finalize = "input.storage.evaluate(" .. name .. ")"
end
input.storage.max = input.storage.max + 1
if input.storage.trace then
- logs.report('storage',string.format('saving %s in slot %s',message,input.storage.max))
+ logs.report('storage','saving %s in slot %s',message,input.storage.max)
code =
initialize ..
- string.format("logs.report('storage','restoring %s from slot %s') ",message,input.storage.max) ..
+ format("logs.report('storage','restoring %s from slot %s') ",message,input.storage.max) ..
table.serialize(original,name) ..
finalize
else
@@ -7457,6 +7964,11 @@ provide an structured file. Actually, any logging that
is hooked into callbacks will be \XML\ by default.
--ldx]]--
+-- input.logger -> special tracing, driven by log level (only input)
+-- input.report -> goes to terminal, depends on verbose, has banner
+-- logs.report -> module specific tracing and reporting, no banner but class
+
+
input = input or { }
logs = logs or { }
@@ -7472,8 +7984,7 @@ logs.levels = {
}
logs.functions = {
- 'error', 'warning', 'info', 'debug', 'report',
- 'start', 'stop', 'push', 'pop'
+ 'report', 'start', 'stop', 'push', 'pop', 'line', 'direct'
}
logs.callbacks = {
@@ -7483,89 +7994,100 @@ logs.callbacks = {
'report_output_log'
}
+logs.tracers = {
+}
+
logs.xml = logs.xml or { }
logs.tex = logs.tex or { }
logs.level = 0
-do
- local write_nl, write, format = texio.write_nl or print, texio.write or io.write, string.format
+local write_nl, write, format = texio.write_nl or print, texio.write or io.write, string.format
- if texlua then
- write_nl = print
- write = io.write
- end
+if texlua then
+ write_nl = print
+ write = io.write
+end
- function logs.xml.debug(category,str)
- if logs.level > 3 then write_nl(format("%s",category,str)) end
- end
- function logs.xml.info(category,str)
- if logs.level > 2 then write_nl(format("%s",category,str)) end
- end
- function logs.xml.warning(category,str)
- if logs.level > 1 then write_nl(format("%s",category,str)) end
- end
- function logs.xml.error(category,str)
- if logs.level > 0 then write_nl(format("%s",category,str)) end
- end
- function logs.xml.report(category,str)
- write_nl(format("%s",category,str))
- end
+function logs.xml.report(category,fmt,...) -- new
+ write_nl(format("%s",category,format(fmt,...)))
+end
+function logs.xml.line(fmt,...) -- new
+ write_nl(format("%s",format(fmt,...)))
+end
- function logs.xml.start() if logs.level > 0 then tw("<%s>" ) end end
- function logs.xml.stop () if logs.level > 0 then tw("%s>") end end
- function logs.xml.push () if logs.level > 0 then tw("" ) end end
+function logs.xml.start() if logs.level > 0 then tw("<%s>" ) end end
+function logs.xml.stop () if logs.level > 0 then tw("%s>") end end
+function logs.xml.push () if logs.level > 0 then tw("" ) end end
- function logs.tex.debug(category,str)
- if logs.level > 3 then write_nl(format("debug >> %s: %s" ,category,str)) end
- end
- function logs.tex.info(category,str)
- if logs.level > 2 then write_nl(format("info >> %s: %s" ,category,str)) end
- end
- function logs.tex.warning(category,str)
- if logs.level > 1 then write_nl(format("warning >> %s: %s",category,str)) end
- end
- function logs.tex.error(category,str)
- if logs.level > 0 then write_nl(format("error >> %s: %s" ,category,str)) end
- end
- function logs.tex.report(category,str)
- write_nl(format("report >> %s: %s" ,category,str))
- end
+function logs.tex.report(category,fmt,...) -- new
+ -- write_nl(format("%s | %s",category,format(fmt,...))) -- arg to format can be tex comment so .. .
+ write_nl(category .. " | " .. format(fmt,...))
+end
+function logs.tex.line(fmt,...) -- new
+ write_nl(format(fmt,...))
+end
- function logs.set_level(level)
- logs.level = logs.levels[level] or level
- end
+function logs.set_level(level)
+ logs.level = logs.levels[level] or level
+end
- function logs.set_method(method)
- for _, v in pairs(logs.functions) do
- logs[v] = logs[method][v] or function() end
- end
- if callback and input[method] then
- for _, cb in pairs(logs.callbacks) do
- callback.register(cb, input[method][cb])
- end
+function logs.set_method(method)
+ for _, v in pairs(logs.functions) do
+ logs[v] = logs[method][v] or function() end
+ end
+ if callback and input[method] then
+ for _, cb in pairs(logs.callbacks) do
+ callback.register(cb, input[method][cb])
end
end
+end
- function logs.xml.start_page_number()
- write_nl(format("")
+ write_nl("")
+end
+
+function logs.xml.report_output_pages(p,b)
+ write_nl(format("", p))
+ write_nl(format("", b))
+ write_nl("")
+end
+
+function logs.xml.report_output_log()
+end
- function logs.xml.stop_page_number()
- write("/>")
- write_nl("")
+function input.logger(...) -- assumes test for input.trace > n
+ if input.trace > 0 then
+ logs.report(...)
end
+end
- function logs.xml.report_output_pages(p,b)
- write_nl(format("", p))
- write_nl(format("", b))
- write_nl("")
+function input.report(fmt,...)
+ if input.verbose then
+ logs.report(input.banner or "report",format(fmt,...))
end
+end
- function logs.xml.report_output_log()
+function input.reportlines(str) -- todo:
+ for line in str:gmatch("(.-)[\n\r]") do
+ logs.report(input.banner or "report",line)
end
+end
+function input.help(banner,message)
+ if not input.verbose then
+ input.verbose = true
+ -- input.report(banner,"\n")
+ end
+ input.report(banner,"\n")
+ input.report("")
+ input.reportlines(message)
end
logs.set_level('error')
@@ -7758,7 +8280,7 @@ end
-- end library merge
-own = { }
+own = { } -- not local
own.libs = { -- todo: check which ones are really needed
'l-string.lua',
@@ -7778,6 +8300,7 @@ own.libs = { -- todo: check which ones are really needed
-- 'l-tex.lua',
'luat-lib.lua',
'luat-inp.lua',
+ 'luat-log.lua',
-- 'luat-zip.lua',
-- 'luat-tex.lua',
-- 'luat-kps.lua',
@@ -7807,7 +8330,7 @@ table.insert(own.list,own.path.."/../../../tex/context/base")
table.insert(own.list,own.path.."/mtx")
table.insert(own.list,own.path.."/../sources")
-function locate_libs()
+local function locate_libs()
for _, lib in pairs(own.libs) do
for _, pth in pairs(own.list) do
local filename = string.gsub(pth .. "/" .. lib,"\\","/")
@@ -7834,38 +8357,19 @@ if not input then
os.exit()
end
-instance = input.reset()
+input.instance = input.reset()
input.verbose = environment.argument("verbose") or false
-input.banner = 'MtxRun | '
+input.banner = 'MtxRun'
utils.report = input.report
+local instance = input.instance
+
instance.engine = environment.argument("engine") or 'luatex'
instance.progname = environment.argument("progname") or 'context'
instance.lsrmode = environment.argument("lsr") or false
-- use os.env or environment when available
---~ function input.check_environment(tree)
---~ input.report('')
---~ os.setenv('TMP', os.getenv('TMP') or os.getenv('TEMP') or os.getenv('TMPDIR') or os.getenv('HOME'))
---~ if os.platform == 'linux' then
---~ os.setenv('TEXOS', os.getenv('TEXOS') or 'texmf-linux')
---~ elseif os.platform == 'windows' then
---~ os.setenv('TEXOS', os.getenv('TEXOS') or 'texmf-windows')
---~ elseif os.platform == 'macosx' then
---~ os.setenv('TEXOS', os.getenv('TEXOS') or 'texmf-macosx')
---~ end
---~ os.setenv('TEXOS', string.gsub(string.gsub(os.getenv('TEXOS'),"^[\\\/]*", ''),"[\\\/]*$", ''))
---~ os.setenv('TEXPATH', string.gsub(tree,"\/+$",''))
---~ os.setenv('TEXMFOS', os.getenv('TEXPATH') .. "/" .. os.getenv('TEXOS'))
---~ input.report('')
---~ input.report("preset : TEXPATH => " .. os.getenv('TEXPATH'))
---~ input.report("preset : TEXOS => " .. os.getenv('TEXOS'))
---~ input.report("preset : TEXMFOS => " .. os.getenv('TEXMFOS'))
---~ input.report("preset : TMP => " .. os.getenv('TMP'))
---~ input.report('')
---~ end
-
function input.check_environment(tree)
input.report('')
os.setenv('TMP', os.getenv('TMP') or os.getenv('TEMP') or os.getenv('TMPDIR') or os.getenv('HOME'))
@@ -7873,10 +8377,10 @@ function input.check_environment(tree)
os.setenv('TEXPATH', (tree or "tex"):gsub("\/+$",''))
os.setenv('TEXMFOS', os.getenv('TEXPATH') .. "/" .. os.getenv('TEXOS'))
input.report('')
- input.report("preset : TEXPATH => " .. os.getenv('TEXPATH'))
- input.report("preset : TEXOS => " .. os.getenv('TEXOS'))
- input.report("preset : TEXMFOS => " .. os.getenv('TEXMFOS'))
- input.report("preset : TMP => " .. os.getenv('TMP'))
+ input.report("preset : TEXPATH => %s", os.getenv('TEXPATH'))
+ input.report("preset : TEXOS => %s", os.getenv('TEXOS'))
+ input.report("preset : TEXMFOS => %s", os.getenv('TEXMFOS'))
+ input.report("preset : TMP => %s", os.getenv('TMP'))
input.report('')
end
@@ -7965,9 +8469,9 @@ function file.needs_updating(oldname,newname) -- size modification access change
end
end
-function file.mdchecksum(name)
+function file.checksum(name)
if md5 then
- local data = io.loadall(name)
+ local data = io.loaddata(name)
if data then
return md5.HEXsum(data)
end
@@ -7976,24 +8480,18 @@ function file.mdchecksum(name)
end
function file.loadchecksum(name)
- if md then
- local data = io.loadall(name .. ".md5")
- if data then
- return string.gsub(md5.HEXsum(data),"%s$","")
- end
+ if md5 then
+ local data = io.loaddata(name .. ".md5")
+ return data and data:gsub("%s","")
end
return nil
end
function file.savechecksum(name, checksum)
- if not checksum then checksum = file.mdchecksum(name) end
+ if not checksum then checksum = file.checksum(name) end
if checksum then
- local f = io.open(name .. ".md5","w")
- if f then
- f:write(checksum)
- f:close()
- return checksum
- end
+ io.savedata(name .. ".md5",checksum)
+ return checksum
end
return nil
end
@@ -8097,46 +8595,46 @@ messages.help = [[
--progname=str format or backend
--edit launch editor with found file
---launch (--all) launch files (assume os support)
+--launch (--all) launch files like manuals, assumes os support
--intern run script using built in libraries
]]
-function input.runners.my_prepare_a(instance)
- input.resetconfig(instance)
- input.identify_cnf(instance)
- input.load_lua(instance)
- input.expand_variables(instance)
- input.load_cnf(instance)
- input.expand_variables(instance)
+function input.runners.my_prepare_a()
+ input.resetconfig()
+ input.identify_cnf()
+ input.load_lua()
+ input.expand_variables()
+ input.load_cnf()
+ input.expand_variables()
end
-function input.runners.my_prepare_b(instance)
- input.runners.my_prepare_a(instance)
- input.load_hash(instance)
- input.automount(instance)
+function input.runners.my_prepare_b()
+ input.runners.my_prepare_a()
+ input.load_hash()
+ input.automount()
end
-function input.runners.prepare(instance)
+function input.runners.prepare()
local checkname = environment.argument("ifchanged")
if checkname and checkname ~= "" then
local oldchecksum = file.loadchecksum(checkname)
local newchecksum = file.checksum(checkname)
if oldchecksum == newchecksum then
- report("file '" .. checkname .. "' is unchanged")
+ input.report("file '%s' is unchanged",checkname)
return "skip"
else
- report("file '" .. checkname .. "' is changed, processing started")
+ input.report("file '%s' is changed, processing started",checkname)
end
file.savechecksum(checkname)
end
local oldname, newname = string.split(environment.argument("iftouched") or "", ",")
if oldname and newname and oldname ~= "" and newname ~= "" then
if not file.needs_updating(oldname,newname) then
- report("file '" .. oldname .. "' and '" .. newname .. "'have same age")
+ input.report("file '%s' and '%s' have same age",oldname,newname)
return "skip"
else
- report("file '" .. newname .. "' is older than '" .. oldname .. "'")
+ input.report("file '%s' is older than '%s'",oldname,newname)
end
end
local tree = environment.argument('tree') or ""
@@ -8155,15 +8653,16 @@ function input.runners.prepare(instance)
end
local runpath = environment.argument("path")
if runpath and not dir.chdir(runpath) then
- input.report("unable to change to path '" .. runpath .. "'")
+ input.report("unable to change to path '%s'",runpath)
return "error"
end
return "run"
end
-function input.runners.execute_script(instance,fullname,internal)
+function input.runners.execute_script(fullname,internal)
+ local instance = input.instance
if fullname and fullname ~= "" then
- local state = input.runners.prepare(instance)
+ local state = input.runners.prepare()
if state == 'error' then
return false
elseif state == 'skip' then
@@ -8187,16 +8686,16 @@ function input.runners.execute_script(instance,fullname,internal)
if suffix == "" then
-- loop over known suffixes
for _,s in pairs(input.runners.suffixes) do
- result = input.find_file(instance, name .. "." .. s, 'texmfscripts')
+ result = input.find_file(name .. "." .. s, 'texmfscripts')
if result ~= "" then
break
end
end
elseif input.runners.applications[suffix] then
- result = input.find_file(instance, name, 'texmfscripts')
+ result = input.find_file(name, 'texmfscripts')
else
-- maybe look on path
- result = input.find_file(instance, name, 'other text files')
+ result = input.find_file(name, 'other text files')
end
end
if result and result ~= "" then
@@ -8212,7 +8711,7 @@ function input.runners.execute_script(instance,fullname,internal)
local before, after = environment.split_arguments(fullname)
local command = result .. " " .. environment.reconstruct_commandline(after)
input.report("")
- input.report("executing: " .. command)
+ input.report("executing: %s",command)
input.report("\n \n")
io.flush()
local code = os.exec(command) -- maybe spawn
@@ -8224,9 +8723,9 @@ function input.runners.execute_script(instance,fullname,internal)
return false
end
-function input.runners.execute_program(instance,fullname)
+function input.runners.execute_program(fullname)
if fullname and fullname ~= "" then
- local state = input.runners.prepare(instance)
+ local state = input.runners.prepare()
if state == 'error' then
return false
elseif state == 'skip' then
@@ -8237,7 +8736,7 @@ function input.runners.execute_program(instance,fullname)
fullname = fullname:gsub("^bin:","")
local command = fullname .. " " .. environment.reconstruct_commandline(after)
input.report("")
- input.report("executing: " .. command)
+ input.report("executing: %s",command)
input.report("\n \n")
io.flush()
local code = os.exec(command) -- (fullname,unpack(after)) does not work / maybe spawn
@@ -8247,12 +8746,12 @@ function input.runners.execute_program(instance,fullname)
return false
end
-function input.runners.handle_stubs(instance,create)
+function input.runners.handle_stubs(create)
local stubpath = environment.argument('stubpath') or '.' -- 'auto' no longer supported
local windows = environment.argument('windows') or environment.argument('mswin') or false
local unix = environment.argument('unix') or environment.argument('linux') or false
if not windows and not unix then
- if environment.platform == "unix" then
+ if os.platform == "unix" then
unix = true
else
windows = true
@@ -8267,41 +8766,41 @@ function input.runners.handle_stubs(instance,create)
local command = "luatex --luaonly mtxrun.lua " .. name
if windows then
io.savedata(base..".bat", {"@echo off", command.." %*"}, "\013\010")
- input.report("windows stub for '" .. base .. "' created")
+ input.report("windows stub for '%s' created",base)
end
if unix then
io.savedata(base, {"#!/bin/sh", command..' "$@"'}, "\010")
- input.report("unix stub for '" .. base .. "' created")
+ input.report("unix stub for '%s' created",base)
end
else
if windows and (os.remove(base..'.bat') or os.remove(base..'.cmd')) then
- input.report("windows stub for '" .. base .. "' removed")
+ input.report("windows stub for '%s' removed", base)
end
if unix and (os.remove(base) or os.remove(base..'.sh')) then
- input.report("unix stub for '" .. base .. "' removed")
+ input.report("unix stub for '%s' removed",base)
end
end
end
end
end
-function input.runners.resolve_string(instance,filename)
+function input.runners.resolve_string(filename)
if filename and filename ~= "" then
- input.runners.report_location(instance,input.resolve(instance,filename))
+ input.runners.report_location(input.resolve(filename))
end
end
-function input.runners.locate_file(instance,filename)
+function input.runners.locate_file(filename)
if filename and filename ~= "" then
- input.runners.report_location(instance,input.find_given_file(instance,filename))
+ input.runners.report_location(input.find_given_file(filename))
end
end
-function input.runners.locate_platform(instance)
- input.runners.report_location(instance,os.currentplatform())
+function input.runners.locate_platform()
+ input.runners.report_location(os.currentplatform())
end
-function input.runners.report_location(instance,result)
+function input.runners.report_location(result)
if input.verbose then
input.report("")
if result and result ~= "" then
@@ -8314,9 +8813,9 @@ function input.runners.report_location(instance,result)
end
end
-function input.runners.edit_script(instance,filename)
+function input.runners.edit_script(filename)
local editor = os.getenv("MTXRUN_EDITOR") or os.getenv("TEXMFSTART_EDITOR") or os.getenv("EDITOR") or 'scite'
- local rest = input.resolve(instance,filename)
+ local rest = input.resolve(filename)
if rest ~= "" then
os.launch(editor .. " " .. rest)
end
@@ -8361,7 +8860,8 @@ function input.launch(str)
os.launch(str)
end
-function input.runners.launch_file(instance,filename)
+function input.runners.launch_file(filename)
+ local instance = input.instance
instance.allresults = true
input.verbose = true
local pattern = environment.arguments["pattern"]
@@ -8371,25 +8871,30 @@ function input.runners.launch_file(instance,filename)
if not pattern or pattern == "" then
input.report("provide name or --pattern=")
else
- local t = input.find_files(instance,pattern)
- -- local t = input.aux.find_file(instance,"*/" .. pattern,true)
+ local t = input.find_files(pattern)
+ if not t or #t == 0 then
+ t = input.aux.find_file("*/" .. pattern,true)
+ end
+ if not t or #t == 0 then
+ t = input.aux.find_file("*/" .. pattern .. "*",true)
+ end
if t and #t > 0 then
if environment.arguments["all"] then
for _, v in pairs(t) do
- input.report("launching", v)
+ input.report("launching %s", v)
input.launch(v)
end
else
- input.report("launching", t[1])
+ input.report("launching %s", t[1])
input.launch(t[1])
end
else
- input.report("no match for", pattern)
+ input.report("no match for %s", pattern)
end
end
end
-function input.runners.execute_ctx_script(instance,filename,arguments)
+function input.runners.execute_ctx_script(filename,arguments)
local function found(name)
local path = file.dirname(name)
if path and path ~= "" then
@@ -8404,25 +8909,25 @@ function input.runners.execute_ctx_script(instance,filename,arguments)
local fullname = filename
-- just
fullname = filename .. suffix
- fullname = input.find_file(instance,fullname)
+ fullname = input.find_file(fullname)
-- mtx-
if not fullname or fullname == "" then
fullname = "mtx-" .. filename .. suffix
- fullname = found(fullname) or input.find_file(instance,fullname)
+ fullname = found(fullname) or input.find_file(fullname)
end
-- mtx-s
if not fullname or fullname == "" then
fullname = "mtx-" .. filename .. "s" .. suffix
- fullname = found(fullname) or input.find_file(instance,fullname)
+ fullname = found(fullname) or input.find_file(fullname)
end
-- mtx-
if not fullname or fullname == "" then
fullname = "mtx-" .. filename:gsub("s$","") .. suffix
- fullname = found(fullname) or input.find_file(instance,fullname)
+ fullname = found(fullname) or input.find_file(fullname)
end
-- that should do it
if fullname and fullname ~= "" then
- local state = input.runners.prepare(instance)
+ local state = input.runners.prepare()
if state == 'error' then
return false
elseif state == 'skip' then
@@ -8439,7 +8944,7 @@ function input.runners.execute_ctx_script(instance,filename,arguments)
end
filename = environment.files[1]
if input.verbose then
- input.report("using script: " .. fullname)
+ input.report("using script: %s\n",fullname)
end
dofile(fullname)
local savename = environment.arguments['save']
@@ -8452,20 +8957,16 @@ function input.runners.execute_ctx_script(instance,filename,arguments)
end
else
input.verbose = true
- input.report("unknown script: " .. filename)
+ if filename == "" then
+ input.report("unknown script")
+ else
+ input.report("unknown script: %s",filename)
+ end
return false
end
end
-input.report(banner,"\n")
-
-function input.help(banner,message)
- if not input.verbose then
- input.verbose = true
- input.report(banner,"\n")
- end
- input.reportlines(message)
-end
+input.report("%s\n",banner)
-- this is a bit dirty ... first we store the first filename and next we
-- split the arguments so that we only see the ones meant for this script
@@ -8476,9 +8977,9 @@ local ok = true
local before, after = environment.split_arguments(filename)
-input.runners.my_prepare_b(instance)
-before = input.resolve(instance,before) -- experimental here
-after = input.resolve(instance,after) -- experimental here
+input.runners.my_prepare_b()
+before = input.resolve(before) -- experimental here
+after = input.resolve(after) -- experimental here
environment.initialize_arguments(before)
@@ -8490,60 +8991,53 @@ elseif environment.argument("selfclean") then
utils.merger.selfclean(own.name)
elseif environment.argument("selfupdate") then
input.verbose = true
- input.update_script(instance,own.name,"mtxrun")
+ input.update_script(own.name,"mtxrun")
elseif environment.argument("ctxlua") or environment.argument("internal") then
-- run a script by loading it (using libs)
- ok = input.runners.execute_script(instance,filename,true)
+ ok = input.runners.execute_script(filename,true)
elseif environment.argument("script") then
-- run a script by loading it (using libs), pass args
- ok = input.runners.execute_ctx_script(instance,filename,after)
+ ok = input.runners.execute_ctx_script(filename,after)
elseif environment.argument("execute") then
-- execute script
- ok = input.runners.execute_script(instance,filename)
+ ok = input.runners.execute_script(filename)
elseif environment.argument("direct") then
-- equals bin:
- ok = input.runners.execute_program(instance,filename)
+ ok = input.runners.execute_program(filename)
elseif environment.argument("edit") then
-- edit file
- input.runners.edit_script(instance,filename)
+ input.runners.edit_script(filename)
elseif environment.argument("launch") then
- input.runners.launch_file(instance,filename)
+ input.runners.launch_file(filename)
elseif environment.argument("make") then
-- make stubs
- input.runners.handle_stubs(instance,true)
+ input.runners.handle_stubs(true)
elseif environment.argument("remove") then
-- remove stub
- input.runners.handle_stubs(instance,false)
+ input.runners.handle_stubs(false)
elseif environment.argument("resolve") then
-- resolve string
- input.runners.resolve_string(instance,filename)
+ input.runners.resolve_string(filename)
elseif environment.argument("locate") then
-- locate file
- input.runners.locate_file(instance,filename)
+ input.runners.locate_file(filename)
elseif environment.argument("platform")then
-- locate platform
- input.runners.locate_platform(instance)
+ input.runners.locate_platform()
elseif environment.argument("help") or filename=='help' or filename == "" then
input.help(banner,messages.help)
-- execute script
if filename:find("^bin:") then
- ok = input.runners.execute_program(instance,filename)
+ ok = input.runners.execute_program(filename)
else
- ok = input.runners.execute_script(instance,filename)
+ ok = input.runners.execute_script(filename)
end
end
---~ if input.verbose then
---~ input.report("")
---~ input.report(string.format("runtime: %0.3f seconds",os.runtime()))
---~ end
-
---~ if ok then
---~ input.report("exit code: 0") os.exit(0)
---~ else
---~ input.report("exit code: 1") os.exit(1)
---~ end
-
-if environment.platform == "unix" then
+if os.platform == "unix" then
io.write("\n")
end
+
+if ok == false then ok = 1 elseif ok == true then ok = 0 end
+
+os.exit(ok)
diff --git a/scripts/context/lua/x-ldx.lua b/scripts/context/lua/x-ldx.lua
index d9d4e6a72..67d5f925c 100644
--- a/scripts/context/lua/x-ldx.lua
+++ b/scripts/context/lua/x-ldx.lua
@@ -150,38 +150,38 @@ function ldx.enhance(data) -- i need to use lpeg and then we can properly autoin
cod = cod:gsub("(%a+)",function(key)
local class = ldx.keywords.reserved[key]
if class then
- return "" .. key .. ""
+ return "" .. key .. ""
else
return key
end
end)
cod = cod:gsub("<<<<(%d+)>>>>", function(s)
- return "" .. dqs[tonumber(s)] .. ""
+ return "" .. dqs[tonumber(s)] .. ""
end)
cod = cod:gsub("<<(%d+)>>", function(s)
- return "" .. sqs[tonumber(s)] .. ""
+ return "" .. sqs[tonumber(s)] .. ""
end)
cod = cod:gsub("%[%[%[%[(%d+)%]%]%]%]", function(s)
return cmt[tonumber(s)]
end)
cod = cod:gsub("%[%[(%d+)%]%]", function(s)
- return "" .. com[tonumber(s)] .. ""
+ return "" .. com[tonumber(s)] .. ""
end)
cod = cod:gsub("##d##", "\\\"")
cod = cod:gsub("##s##", "\\\'")
if ldx.make_index then
local lines = cod:split("\n")
- local f = "(function)%s+([%w%.]+)%s*%("
+ local f = "(function)%s+([%w%.]+)%s*%("
for k,v in pairs(lines) do
-- functies
v = v:gsub(f,function(key, str)
- return "" .. str .. "("
+ return "" .. str .. "("
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] = "" .. v .. ""
+ t[k] = "" .. v .. ""
end
return table.join(t,", ") .. rest
end)
@@ -222,19 +222,19 @@ function ldx.enhance(data) -- i need to use lpeg and then we can properly autoin
cod = cod:gsub("(%a+)",function(key)
local class = ldx.keywords.reserved[key]
if class then
- return "" .. key .. ""
+ return "" .. key .. ""
else
return key
end
end)
cod = cod:gsub(">>s>", function(s)
- return "" .. sqs[tonumber(s)] .. ""
+ return "" .. sqs[tonumber(s)] .. ""
end)
cod = cod:gsub(">>d>", function(s)
- return "" .. dqs[tonumber(s)] .. ""
+ return "" .. dqs[tonumber(s)] .. ""
end)
cod = cod:gsub(">>c>", function(s)
- return "" .. com[tonumber(s)] .. ""
+ return "" .. com[tonumber(s)] .. ""
end)
cod = cod:gsub(">>l>", function(s)
return cmt[tonumber(s)]
@@ -243,17 +243,17 @@ function ldx.enhance(data) -- i need to use lpeg and then we can properly autoin
cod = cod:gsub("##s##", "\\\'")
if ldx.make_index then
local lines = cod:split("\n")
- local f = "(function)%s+([%w%.]+)%s*%("
+ local f = "(function)%s+([%w%.]+)%s*%("
for k,v in pairs(lines) do
-- functies
v = v:gsub(f,function(key, str)
- return "" .. str .. "("
+ return "" .. str .. "("
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] = "" .. v .. ""
+ t[k] = "" .. v .. ""
end
return table.join(t,", ") .. rest
end)
@@ -279,44 +279,46 @@ it possible to change the indentation afterwards.
function ldx.as_xml(data)
local t, cmode = { }, false
t[#t+1] = "\n"
- t[#t+1] = "\n\n"
- for _,v in pairs(data) do
+ t[#t+1] = "\n\n"
+ for _,v in pairs(data) do -- ldx: not needed
if v.code and not v.code:is_empty() then
- t[#t+1] = "\n\n"
+ t[#t+1] = "\n\n"
for k,v in pairs(v.code:split("\n")) do -- make this faster
local a, b = v:find("^(%s+)")
+ if v then v = v:gsub("[\n\r ]+$","") end
if a and b then
+ v = v:sub(b+1,#v)
if cmode then
- t[#t+1] = "" .. v:sub(b+1,#v) .. "\n"
+ t[#t+1] = "" .. v .. "\n"
else
- t[#t+1] = "" .. v:sub(b+1,#v) .. "\n"
+ t[#t+1] = "" .. v .. "\n"
end
elseif v:is_empty() then
if cmode then
- t[#t+1] = "\n"
+ t[#t+1] = "\n"
else
- t[#t+1] = "\n"
+ t[#t+1] = "\n"
end
elseif v:find("^%-%-%[%[") then
- t[#t+1] = "" .. v .. "\n"
+ t[#t+1] = "" .. v .. "\n"
cmode= true
elseif v:find("^%]%]%-%-") then
- t[#t+1] = "" .. v .. "\n"
+ t[#t+1] = "" .. v .. "\n"
cmode= false
elseif cmode then
- t[#t+1] = "" .. v .. "\n"
+ t[#t+1] = "" .. v .. "\n"
else
- t[#t+1] = "" .. v .. "\n"
+ t[#t+1] = "" .. v .. "\n"
end
end
- t[#t+1] = "
\n"
+ t[#t+1] = "\n"
elseif v.comment then
- t[#t+1] = "\n\n" .. v.comment .. "\n\n"
+ t[#t+1] = "\n\n" .. v.comment .. "\n\n"
else
-- cannot happen
end
end
- t[#t+1] = "\n\n"
+ t[#t+1] = "\n\n"
return table.concat(t,"")
end
@@ -377,6 +379,8 @@ as the module to be used.
The main conversion call is:
--ldx]]--
+-- todo: assume usage of "mtxrun --script x-ldx", maybe make it mtx-ldx
+
if arg and arg[1] then
ldx.convert(arg[1],arg[2])
end
diff --git a/scripts/context/perl/cont_mis.pm b/scripts/context/perl/cont_mis.pm
deleted file mode 100644
index 6bd449bf0..000000000
--- a/scripts/context/perl/cont_mis.pm
+++ /dev/null
@@ -1,69 +0,0 @@
-#D \module
-#D [ file=cont\_mis.pm,
-#D version=1999.05.05,
-#D title=General modules,
-#D subtitle=all kind of subs,
-#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 licen-en.pdf for
-#C details.
-
-#D Not yet documented, source will be cleaned up.
-
-package cont_mis ;
-
-use strict ;
-
-my ($message, $separator, $content) ;
-
-format =
-@>>>>>>>>>>>>>>>>>>>>> @ @<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
-$message,$separator,$content
-.
-
-sub report
- { ($message, $separator, $content) = @_ ; write }
-
-sub crlf { print "\n" }
-sub banner { crlf ; report (shift , '/', shift) ; crlf }
-sub message { report (shift , ':', shift) }
-sub help { report (shift , ' ', shift) }
-sub status { message ('status' , shift) }
-sub warning { message ('warning' , shift) }
-sub error { message ('error' , shift) }
-sub continue { message ('' , shift) }
-
-sub hex_color
- { my ($r,$g,$b) = @_ ;
- if ($r>1) { $r=0xffff } else { $r = 0xffff*$r }
- if ($g>1) { $g=0xffff } else { $g = 0xffff*$g }
- if ($b>1) { $b=0xffff } else { $b = 0xffff*$b }
- local $_ = sprintf "%4x%4x%4x", $r, $g, $b ;
- s/ /0/go ;
- return $_ }
-
-sub InterfaceFound
- { local $_ = shift ;
- if (/^\%.*interface=(.*?)\b/)
- { return $1 }
- elsif (/\\(starttekst|stoptekst|startonderdeel)/)
- { return 'nl' }
- elsif (/\\(stelle|verwende|umgebung|benutze)/)
- { return 'de' }
- elsif (/\\(stel|gebruik|omgeving)/)
- { return 'nl' }
- elsif (/\\(use|setup|environment)/)
- { return 'en' }
- elsif (/(hoogte|breedte|letter)=/)
- { return 'nl' }
- elsif (/(height|width|style)=/)
- { return 'en' }
- elsif (/(hoehe|breite|schrift)=/)
- { return 'de' }
- else
- { return '' } }
-
-1;
diff --git a/scripts/context/perl/cont_set.pm b/scripts/context/perl/cont_set.pm
deleted file mode 100644
index 41c62e754..000000000
--- a/scripts/context/perl/cont_set.pm
+++ /dev/null
@@ -1,670 +0,0 @@
-#D \module
-#D [ file=cont\_set.pm,
-#D version=1999.04.01,
-#D title=General modules,
-#D subtitle=showing \CONTEXT\ commands,
-#D author=Hans Hagen,
-#D date=\currentdate,
-#D copyright={PRAGMA / Hans Hagen \& Ton Otten},
-#D suggestions={Tobias Burnus \& Taco Hoekater}]
-#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.
-
-# todo: tacos speed patch
-
-#D As always: thanks to Taco and Tobias for testing this
-#D module and providing suggestions and code snippets as
-#D well as haunting bugs.
-
-package cont_set ;
-
-#D This module (package) deals with providing help information
-#D about the \CONTEXT\ commands. The data needed is derived
-#D from the setup files by \CONTEXT\ itself. The data is
-#D stored in files with suffix \type {tws} (tex work setup).
-#D This module introduces some subroutines:
-#D
-#D \starttabulatie[|Tl|p|]
-#D \NC \type {set\_setup\_interface} \NC sets the primary interface
-#D to search in \NC \NR
-#D \NC \type {set\_setup\_title} \NC sets the title of the main
-#D window title \NC \NR
-#D \NC \type {setups\_found} \NC locate the \type {tws} files
-#D using the \type {kpsewhich}
-#D program \NC \NR
-#D \NC \type {show\_setups} \NC allocate the radio buttons
-#D that can be used to select a
-#D command set \NC \NR
-#D \NC \type {load\_setup(filename)} \NC load the names \type {tws}
-#D file \NC \NR
-#D \NC \type {load\_setups} \NC all found command files can
-#D be loaded at once \NC \NR
-#D \NC \type {setup\_found(filename)} \NC this routine returns~1 when
-#D the file is loaded \NC \NR
-#D \NC \type {update\_setup} \NC when we browse the list with
-#D commands, this routine takes care
-#D of updating the text area \NC \NR
-#D \NC \type {change\_setup} \NC we can manually set the
-#D command set we want to browse,
-#D and this routine takes care of
-#D this \NC \NR
-#D \NC \type {show\_setup(command)} \NC context sensitive help can be
-#D provided by calling this sub \NC \NR
-#D \stoptabulatie
-#D
-#D First we load some packages and set some constants.
-
-use Tk ;
-use Tk::ROText ;
-use Config ;
-
-use strict;
-
-use subs qw/ update_setup / ;
-
-my $dosish = ($Config{'osname'} =~ /dos|win/i) ;
-my $default_size = $dosish ? 9 : 12 ;
-
-my $textfont = "Courier $default_size " ;
-my $userfont = "Courier $default_size italic" ;
-my $buttonfont = "Helvetica $default_size bold " ;
-
-unless ($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" }
-
-my $s_vertical = 30 ;
-my $s_horizontal = 72 ;
-my $c_horizontal = 24 ;
-
-#D The main window is not resizable, but the text area and
-#D command list will have scrollbars.
-
-my %lw ; # stack of lists
-
-my $mw = MainWindow -> new ( -title => 'ConTeXt commands' ) ;
-
-$mw -> withdraw() ; $mw -> resizable ('y', 'y') ;
-
-sub SetupWindow { return $mw } ;
-
-my $bw = $mw -> Frame () ; # buttons
-my $tw = $mw -> Frame () ; # sw + fw
-my $fw = $tw -> Frame () ; # string + list
-
-my $request = $fw -> Entry ( -font => $textfont ,
- -background => 'ivory1' ,
- -width => $c_horizontal ) ;
-
-my $cw = $fw -> Scrolled ( 'Listbox' ,
- -scrollbars => 'e' ,
- -font => $textfont ,
- -width => $c_horizontal ,
- -selectbackground => 'gray' ,
- -background => 'ivory1' ,
- -selectmode => 'browse' ) ;
-
-$cw -> pack ( -side => 'bottom' , -fill => 'both' , -expand => 1 ) ;
-$request -> pack ( -side => 'top' , -fill => 'x' ) ;
-
-my $sw = $tw -> Scrolled ( 'ROText' ,
- -scrollbars => 'se' ,
- -height => $s_vertical ,
- -width => $s_horizontal ,
- -wrap => 'none' ,
- -background => 'ivory1' ,
- -font => $textfont ) ;
-
-
-#D And the whole bunch of widgets are packed in the main
-#D window.
-
-sub pack_them_all
- { $sw -> pack ( -side => 'left' , -fill => 'both' , -expand => 1 ) ;
- $fw -> pack ( -side => 'right' , -fill => 'y' , -expand => 0 ) ;
- $bw -> pack ( -side => 'top' , -fill => 'x' , -anchor => 'w' , -expand => 1 ) ;
- $tw -> pack ( -side => 'bottom', -fill => 'both' , -expand => 1 ) }
-
-sub unpack_them_all
- { }
-
-pack_them_all ;
-
-#D We scan for available setup files, with suffix \type {tws}.
-#D These should be somewhere on the system, grouped in one
-#D directory. At least the english file \type {cont-en.tws}
-#D should be found.
-
-my $tws_path = '' ;
-my @setup_files = ('cont-en.tws') ;
-my $setup_file = $setup_files[0] ;
-my $setup_interface = 'en' ;
-my $old_setup_file = '' ;
-
-sub set_setup_interface
- { $setup_interface = shift }
-
-sub set_setup_title
- { $mw -> configure ( -title => shift ) }
-
-sub setups_found
- { $tws_path = `kpsewhich --format="other text files" --progname=context cont-en.tws` ;
- $tws_path =~ s/cont-en\.tws.*// ;
- chop $tws_path ;
- @setup_files = glob ("$tws_path*.tws") ;
- if (@setup_files)
- { foreach (@setup_files) { s/\.tws// ; s/.*\/// }
- $setup_file = $setup_files[0] ;
- return 1 }
- else
- { return 0 } }
-
-#D A hide button
-
-sub show_hide_button
- { my $hb = $bw -> Button ( -text => "hide" ,
- -font => $buttonfont ,
- -command => \&hide_widget ) ;
- $hb -> pack ( -padx => '2p',
- -pady => '2p',
- -side => 'right' ) }
-
-sub hide_widget
- { $mw -> withdraw() }
-
-#D The setup files can be shown and chosen.
-
-sub show_setups
- { unpack_them_all ;
- foreach (@setup_files)
- { $lw{$_} = $bw -> Radiobutton ( -text => lc $_ ,
- -value => $_ ,
- -font => $buttonfont ,
- -selectcolor => 'ivory1' ,
- -indicatoron => 0 ,
- -command => \&change_setup ,
- -variable => \$setup_file ) ;
- $lw{$_} -> pack ( -padx => '2p',
- -pady => '2p',
- -side => 'left' ) }
- pack_them_all }
-
-$cw -> bind ('', \&update_setup ) ;
-$cw -> bind ('<1>' , \&update_setup ) ;
-$cw -> bind ('' , \&update_setup ) ;
-
-$sw -> tag ('configure', 'user' , -font => $userfont ) ;
-$sw -> tag ('configure', 'command' , -foreground => 'green3' ) ;
-$sw -> tag ('configure', 'variable' , -font => $userfont ) ;
-$sw -> tag ('configure', 'default' , -underline => 1 ) ;
-$sw -> tag ('configure', 'symbol' , -foreground => 'blue3' ) ;
-$sw -> tag ('configure', 'or' , -foreground => 'yellow3' ) ;
-$sw -> tag ('configure', 'argument' , -foreground => 'red3' ) ;
-$sw -> tag ('configure', 'par' , -lmargin1 => '4m' ,
- -lmargin2 => '6m' ) ;
-
-my %setups ;
-my %commands ;
-my %loadedsetups ;
-my %positions ;
-my %crosslinks ;
-
-my $current_setup = '' ;
-
-#D Setups are organized in files called \type {*.tws} and
-#D alike. Several files can be loaded simultaneously. When
-#D loading, we grab whole paragraphs. The variables and values
-#D belonging to a command, are stored in the hash table \type
-#D {setups}, one per language. The command templates are
-#D stored in \type {commands}.
-#D
-#D A \type {tws} file is generated by \CONTEXT\ from the setup
-#D definition files. Only \CONTEXT\ knows the current meaning
-#D of commands and keywords. The files are generating by
-#D simply saying something like:
-#D
-#D \starttypen
-#D texexec --interface=en setupd
-#D texexec --interface=de setupd
-#D texexec --interface=nl setupd
-#D texexec --interface=cz setupd
-#D texexec --interface=it setupd
-#D \stoptypen
-#D
-#D This results in files formatted as:
-#D
-#D \starttypen
-#D startsetup
-#D com:setupcolors
-#D typ:vars/
-#D var:state:start,stop,global,local:
-#D var:conversion:yes,no,always:
-#D var:reduction:yes,no:
-#D var:rgb:yes,no:
-#D var:cmyk:yes,no:
-#D stopsetup
-#D \stoptypen
-#D
-#D This format can be stored rather efficient and parsed rather
-#D fast. What more do we need.
-
-sub load_setup
- { my $filename = shift ;
- unless (keys %{$commands{$filename}})
- { local $/ = 'stopsetup' ; # in plaats van '' ivm unix ; (taco)
- $current_setup = '' ;
- if (open(SETUP, "$tws_path$filename.tws" ))
- { my $position = 0 ;
- while ()
- { chomp ;
- s/startsetup//mso ;
- s/stopsetup//mso ; # redundant geworden
- s/\r\n //gms ; # in plaats van s/ //gms ; (taco)
- s/com\:(.*?)\:\s(.*)//mso ;
- my $string = $1 ;
- my $command = $1 ;
- my $setup = $2 ;
- ++$position ;
- $string =~ s/(.*?)\<\<(.*?)\>\>(.*?)/$1$2$3/o ;
- $setups {$filename}{$string} = $setup ;
- $commands {$filename}{$string} = $command ;
- $positions {$filename}{$string} = $position ;
- $crosslinks{$filename}[$position] = $string }
- close (SETUP) } }
- my @list = sort {lc $a cmp lc $b} keys %{$commands{$filename}} ;
- $cw -> delete ('0.0', 'end') ;
- $cw -> insert ('end', @list) ;
- $cw -> selectionSet ('0.0', '0.0') ;
- $cw -> activate ('0.0') ;
- $setup_file = $filename ;
- update_setup }
-
-sub load_setups
- { foreach my $setup (@setup_files) { load_setup ($setup) } ;
- $mw -> deiconify() }
-
-#D The core of this module deals with transforming the
-#D definitions like shown earlier. Details on the format
-#D can be found in the file \type {setupd.tex}. We use the
-#D \type {Tk::Text} automatic hanging identation features.
-#D The next subs are examples of the kind you write once
-#D and never look at again.
-
-my @arguments = () ;
-my $nested_setup = 0 ;
-my $continue_setup = 0 ;
-my $argument = 0 ;
-my $stopsuffix = '' ;
-my $stopcommand = '' ;
-
-my %arg ;
-
-$arg {repeat} = '//n*/' ;
-$arg {arg} = 'argument/{/.../}' ;
-$arg {args} = 'argument/{/..,...,../}' ;
-$arg {dis} = 'argument/$$/.../$$' ;
-$arg {idx} = 'argument/{/.../}' ;
-$arg {idxs} = 'argument/{/..+...+../}' ;
-$arg {mat} = 'argument/$/...:$' ;
-$arg {nop} = '//.../' ;
-$arg {fil} = '//.../' ;
-$arg {pos} = 'symbol/(/.../)' ;
-$arg {poss} = 'symbol/(/...,.../)' ;
-$arg {sep} = 'command//\\\\/' ;
-$arg {ref} = 'symbol/[/ref/]' ;
-$arg {refs} = 'symbol/[/ref,../]' ;
-$arg {val} = 'symbol/[/.../]' ;
-$arg {vals} = 'symbol/[/..,...,../]' ;
-$arg {var} = 'symbol/[/..=../]' ;
-$arg {vars} = 'symbol/[/..,..=..,../]' ;
-$arg {cmd} = 'command//\cmd/' ;
-$arg {dest} = 'symbol/[/..ref/]' ;
-$arg {dests} = 'symbol/[/..,..refs,../]' ;
-$arg {trip} = 'symbol/[/x:y:z=/]' ;
-$arg {trips} = 'symbol/[/x:y:z=,../]' ;
-$arg {wrd} = 'argument/{/.../}' ;
-$arg {wrds} = 'argument/{/......./}' ;
-$arg {par} = 'command//\par/' ;
-$arg {stp} = '//stop/' ;
-$arg {par} = 'command///' ;
-
-sub show_command
- { my $command = shift ;
- local $_ = $commands{$setup_file}{$command} ;
- if ($command eq $_)
- { $sw -> insert ('end', "\\$command", 'command' ) }
- elsif (/(.*?)\<\<(.*?)\>\>(.*?)/o)
- { $sw -> insert ('end', "\\", 'command' ) ;
- if ($1) { $sw -> insert ('end', $1, 'command' ) }
- if ($2) { $sw -> insert ('end', $2, ['command','user'] ) }
- if ($3) { $sw -> insert ('end', $3, 'command' ) }
- $stopsuffix = $2 } }
-
-sub show_left_argument
- { local $_ = shift ;
- my @thearg = split (/\//, $arg{$arguments[$_]}) ;
- $sw -> insert ('end', $thearg[1], ['par',$thearg[0]] ) }
-
-sub show_middle_argument
- { local $_ = shift ;
- my @thearg = split (/\//, $arg{$arguments[$_]}) ;
- if ($thearg[1])
- { $sw -> insert ('end', $thearg[2], 'par' ) }
- else
- { $sw -> insert ('end', $thearg[2], ['par',$thearg[0]] ) } }
-
-sub show_right_argument
- { local $_ = shift ;
- my @thearg = split (/\//, $arg{$arguments[$_]}) ;
- $sw -> insert ('end', $thearg[3], ['par',$thearg[0]] ) ;
- ++$argument }
-
-sub show_reference
- { if (($nested_setup<=1)&&(defined($arguments[$argument])))
- { if ($arguments[$argument]=~/ref/)
- { $sw -> insert ('end', "\n" ) ;
- show_left_argument ($argument) ;
- show_middle_argument ($argument) ;
- show_right_argument ($argument) } } }
-
-sub show_stop_command
- { my $before_stop = shift ;
- if ($stopcommand)
- { if ($stopsuffix)
- { $sw -> insert ('end', '\\stop', 'command' ) ;
- $sw -> insert ('end', $stopsuffix, ['command','user'] ) }
- else
- { $sw -> insert ('end', $stopcommand, 'command' ) } } }
-
-sub show_whatever_left
- { while ($argument<@arguments)
- { $sw -> insert ('end', "\n" ) ;
- show_left_argument ($argument) ;
- show_middle_argument ($argument) ;
- show_right_argument ($argument) ;
- ++$argument }
- if ($stopcommand)
- { $sw -> insert ('end', "\n...\n...\n...\n", 'par') ;
- show_stop_command } }
-
-sub do_update_setup # type: 0=all 1=vars 2=vals
- { my ($command, $type) = @_ ;
- my $setup = $setups{$setup_file}{$command} ;
- my $default = '' ;
- my $key = '' ;
- my $meaning = '' ;
- my @values = () ;
- local $_ ;
- ++$nested_setup ;
- while ($setup=~/(typ|var|val|ivr|ivl)\:(.*?)\:\s/mgo)
- { $key = $1 ;
- $meaning = $2 ;
- if (($key=~/var/o)&&($type!=2))
- { $_ = $meaning ; s/(.*?)\:(.*?)\:(.*)//o ;
- if (($nested_setup>1)&&(!$2)) { next }
- $key = $1 ;
- if ($3) { $default = $3 } else { $default = '' }
- $_= $2 ; s/\s//go ; @values = split (/,/,$_) ;
- if ($continue_setup)
- { $sw -> insert ('end', ",\n ", 'par') }
- else
- { $continue_setup = 1 ;
- $sw -> insert ('end', "\n", 'par') ;
- show_left_argument($argument) }
- $sw -> insert ('end', $key , 'par' ) ;
- $sw -> insert ('end', '=', ['symbol','par'] ) ;
- #while (1)
- while (@values)
- { my $value = shift @values ;
- if ($value =~ /^\*/o)
- { $value =~ s/^\*//o ;
- $sw -> insert ('end', lc $value, ['variable','par'] ) }
- elsif ($value eq $default)
- { $sw -> insert ('end', $value, ['default','par'] ) }
- else
- { $sw -> insert ('end', $value, 'par' ) }
- if (@values)
- { $sw -> insert ('end', '|' , ['or','par'] ) }
- else
- { last } } }
- elsif (($key=~/val/o)&&($type!=1))
- { $_ = $meaning ; s/(.*)\:(.*)//o ;
- if (($nested_setup>1)&&(!$2)) { next }
- $_ = $1 ; s/\s//go ; @values = split (/,/,$_) ;
- if ($2) { $default = $2 } else { $default = '' }
- if ($continue_setup)
- { $continue_setup = 0 ;
- show_right_argument($argument) }
- $sw -> insert ('end', "\n" , 'par') ;
- show_left_argument($argument) ;
- #while (1)
- while (@values)
- { unless (@values) { last }
- my $value = shift (@values) ;
- if ($value =~ /^\*/o)
- { $value =~ s/^\*//o ;
- $sw -> insert ('end', lc $value, ['variable','par'] ) }
- elsif ($value eq $default)
- { $sw -> insert ('end', $value, ['default','par'] ) }
- else
- { $sw -> insert ('end', $value, 'par' ) }
- if (@values)
- { $sw -> insert ('end', ', ', 'par' ) }
- else
- { last } }
- show_right_argument($argument) }
- elsif ($key=~/typ/o)
- { if ($nested_setup==1)
- { show_command ($command) ;
- my $arguments = $meaning ;
- if ($arguments=~/stp/)
- { $_ = $command ;
- s/start(.*)/$1/o ;
- $stopcommand = "\\stop$_" ;
- $arguments =~ s/stp//go }
- @arguments = split (/\//,$arguments) ;
- if (@arguments)
- { for (my $i=0;$i<@arguments;$i++)
- { show_left_argument ($i) ;
- show_middle_argument ($i) ;
- show_right_argument ($i) }
- if ($stopcommand)
- { $sw -> insert ('end', ' ... ') ;
- show_stop_command }
- $sw -> insert ('end', "\n\n") ;
- show_command ($command) }
- $argument = 0 ;
- $continue_setup = 0 } }
- elsif ($key=~/ivr/o)
- { $meaning =~ s/(.*)\:(.*)//o ;
- do_update_setup ($1,1) }
- elsif ($key=~/ivl/o)
- { $meaning =~ s/(.*)\:(.*)//o ;
- do_update_setup ($1,2) }
- show_reference }
- --$nested_setup ;
- if (($continue_setup)&&(!$nested_setup))
- { show_right_argument ;
- show_whatever_left } }
-
-#D Now the real work is done, we only have to define a few
-#D housekeeping routines. The next sub adapts the text area
-#D to the current selected command and normally is bound to
-#D the list browsing commands.
-
-sub update_setup
- { $old_setup_file = $setup_file ;
- if (keys %{$commands{$setup_file}})
- { my $key ;
- unless ($cw->curselection)
- { $cw -> selectionSet('0.0','0.0') }
- $key = $cw -> get($cw->curselection) ;
- if ($current_setup ne $key)
- { $current_setup = $key ;
- $sw -> delete ('1.0', 'end' ) ;
- $nested_setup = 0 ;
- $argument = 0 ;
- $stopcommand = '' ;
- $stopsuffix = '' ;
- do_update_setup ($key,0) ;
- $mw -> raise ;
- $mw -> focus } } }
-
-#D In editors we want to provide context sensitive help
-#D information. The next sub first tries to locate the
-#D commands asked for in the setup data currently selected,
-#D and when not found takes a look at all the loaded files.
-
-sub show_setup
- { my $asked_for = shift ;
- unless ($asked_for) { return }
- my $found = 0 ;
- $asked_for =~ s/^\\// ;
- if ($setup_interface)
- { $found = 0 ;
- foreach my $name (@setup_files)
- { if (($name=~/\-$setup_interface/)&&(exists($commands{$name}{$asked_for})))
- { $found = 1 ;
- $setup_file = $name ;
- last } } }
- if (!($found)&&(exists($commands{$setup_file}{$asked_for})))
- { $found = 1 }
- else
- { $found = 0 ;
- foreach my $name (@setup_files)
- { if (exists($commands{$name}{$asked_for}))
- { $found = 1 ;
- $setup_file = $name ;
- last } } }
- if ($found)
- { my @list = sort {lc $a cmp lc $b} keys %{$commands{$setup_file}} ;
- $cw -> delete ('0.0', 'end') ;
- $cw -> insert ('end', @list) ;
- $found = 0 ;
- foreach (@list) { if ($_ eq $asked_for) { last } ++$found }
- my $index = "$found.0" ;
- $cw -> selectionSet ($index, $index) ;
- $cw -> activate ($index) ;
- $cw -> see ($index) ;
- update_setup ;
- $mw -> raise ;
- $mw -> focus } }
-
-#D Whenever a new set of commands is selected (by means of the
-#D buttons on top the screen) the list and text are to be
-#D updated.
-
-sub change_setup
- { my $command = '' ;
- if ($old_setup_file)
- { unless ($cw->curselection)
- { $cw -> selectionSet('0.0','0.0') }
- $command = $cw -> get($cw->curselection) ;
- my $position = $positions{$old_setup_file}{$command} ;
- $command = $crosslinks{$setup_file}[$position] }
- load_setup($setup_file) ;
- my @list = sort {lc $a cmp lc $b} keys %{$commands{$setup_file}} ;
- $cw -> delete ('0.0', 'end') ;
- $cw -> insert ('end', @list) ;
- if ($command)
- { show_setup($command) }
- else
- { $cw -> selectionClear ('0.0','end') ;
- $cw -> selectionSet ('0.0', '0.0') ;
- $cw -> see ('0.0') ;
- $cw -> activate ('0.0') }
- update_setup ;
- $mw -> raise ;
- $mw -> focus }
-
-#D Sometimes we want to make sure the dat is loaded indeed:
-
-sub setup_found
- { my $filename = shift ;
- if (-e "$tws_path$filename.tws")
- { $setup_file = $filename ;
- return 1 }
- else
- { return 0 } }
-
-#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 = $cw -> index('end') ;
- unless ($index) { return }
- my $req = $request -> get ;
- unless ($req) { return }
- $req =~ s/\\//o ;
- $req =~ s/\s//go ;
- $request -> delete('0','end') ;
- $request -> insert('0',$req) ;
- unless ($req) { return }
- my ($l,$c) = split (/\./,$index) ;
- for (my $i=0;$i<=$l;$i++)
- { $index = "$i.0" ;
- my $str = $cw -> get ($index, $index) ;
- if ($str =~ /^$req/)
- { $cw -> selectionClear ('0.0','end') ;
- $cw -> selectionSet ($index, $index) ;
- $cw -> activate ($index) ;
- $cw -> see ($index) ;
- update_setup ;
- $mw -> raise ;
- $mw -> focus ;
- return } } }
-
-$request -> bind ('', sub { handle_request } ) ;
-
-sub insert_request
- { my ($self, $chr) = @_ ;
- if ($self ne $request)
- { $request -> insert ('end', $chr) }
- handle_request }
-
-foreach my $chr ('a'..'z','A'..'Z')
- { $mw -> bind ( "", sub { insert_request(shift, $chr) } ) }
-
-$mw -> bind ( "", sub { insert_request(shift, "\\") } ) ;
-
-sub delete_request
- { my $self = shift ;
- if ($self ne $request)
- { my $to = $request -> index ('end') ;
- my $from = $to - 1 ;
- if ($from<0) { $from = 0 }
- $request -> delete ($from,$to) }
- handle_request }
-
-$mw -> bind ( "", sub { delete_request } ) ;
-
-sub new_request
- { $request -> delete (0,'end') ;
- handle_request }
-
-$mw -> bind ( "", sub { new_request } ) ;
-
-#D Just in case:
-
-sub raise_setup
- { $mw -> raise }
-
-sub dont_exit
- { $mw -> protocol( 'WM_DELETE_WINDOW' => sub { } ) }
-
-#D An example use is:
-#D
-#D \starttypen
-#D load_setup ("cont-$nl") ;
-#D show_setup ('omlijnd') ;
-#D MainLoop () ;
-#D \stoptypen
-#D
-#D Now everything is done, we return 1:
-
-1 ;
diff --git a/scripts/context/perl/path_tre.pm b/scripts/context/perl/path_tre.pm
deleted file mode 100644
index 546afcd27..000000000
--- a/scripts/context/perl/path_tre.pm
+++ /dev/null
@@ -1,36 +0,0 @@
-#D \module
-#D [ file=path\_tre.pm,
-#D version=1999.05.05,
-#D title=Path modules,
-#D subtitle=selecting a path,
-#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 licen-en.pdf for
-#C details.
-
-#D Not yet documented, source will be cleaned up.
-
-package Tk::path_tre ;
-
-use Tk;
-require Tk::DirTree ;
-
-use base qw(Tk::DirTree);
-use strict;
-
-Construct Tk::Widget 'PathTree';
-
-sub ClassInit
- { my ($class,$mw) = @_ ;
- return $class -> SUPER::ClassInit ($mw) }
-
-sub dirnames
- { my ( $w, $dir ) = @_ ;
- unless ($dir=~/\//) { $dir .= '/' }
- my @names = $w->Callback("-dircmd", $dir, $w->cget("-showhidden"));
- return( @names ) }
-
-__END__
diff --git a/scripts/context/perl/texexec.pl b/scripts/context/perl/texexec.pl
deleted file mode 100644
index fb564bbd5..000000000
--- a/scripts/context/perl/texexec.pl
+++ /dev/null
@@ -1,3294 +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=texexec.pl,
-#D version=2004.08.29,
-#D title=running \ConTeXt,
-#D subtitle=\TEXEXEC,
-#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 readme.pdf for
-#C details.
-
-# Thanks to Tobias Burnus for the german translations.
-# Thanks to Thomas Esser for hooking it into web2c
-# Thanks to Taco Hoekwater for suggesting improvements
-# Thanks to Wybo Dekker for the advanced help interface and making it strict
-# Thanks to Fabrice Popineau for windows path trickery and fixes
-
-# (I still have to completely understand the help code -)
-
-#D We started with a hack provided by Thomas Esser. This
-#D expression replaces the unix specific line \type
-#D {#!/usr/bin/perl}.
-
-#D History has learned that writing wrappers like this is quite painful
-#D because of differences between platforms, changes in the tex command
-#D line flags (fmt), default behaviour (e.g. 8 bit), and the assumption
-#D that everyone runs the same tex and that distributers take care of
-#D everything. Well, the result is a messy script like this ... Sorry.
-
-use strict ;
-
-my $OriginalArgs = join(' ',@ARGV) ;
-
-#~ use warnings ; # strange warnings, todo
-
-# todo: second run of checksum of mp file with --nomprun changes
-# todo: warning if no args
-# todo: <<<< in messages
-# todo: cleanup
-
-use Cwd;
-use Time::Local;
-use Config;
-use Getopt::Long;
-use Class::Struct; # needed for help subsystem
-use FindBin;
-use File::Compare;
-use File::Temp;
-use Digest::MD5;
-
-#~ use IO::Handle; autoflush STDOUT 1;
-
-my %ConTeXtInterfaces; # otherwise problems with strict
-my %ResponseInterface; # since i dunno how to allocate else
-
-my %Help;
-
-#D In this script we will launch some programs and other
-#D scripts. \TEXEXEC\ uses an ini||file to sort out where
-#D those programs are stored. Two boolean variables keep
-#D track of the way to call the programs. In \TEXEXEC,
-#D \type {$dosish} keeps track of the operating system.
-#D It will be no surprise that Thomas Esser provided me
-#D the neccessary code to accomplish this.
-
-$ENV{"MPXCOMMAND"} = "0"; # otherwise loop
-
-my $TotalTime = time;
-
-# start random seed hack
-#
-# This hack is needed since tex has 1 minute resolution, so
-# we need to be smaller about 1440 (== 24*60 == tex's max time)
-# in which case (david a's) random calculator will overflow.
-
-# my ( $sec, $min, $rest ) = gmtime;
-# my $RandomSeed = $min * 60 + $sec;
-#
-# # i have to look up the mod function -)
-#
-# if ( $RandomSeed > 2880 ) { $RandomSeed -= 2880 }
-# if ( $RandomSeed > 1440 ) { $RandomSeed -= 1440 }
-
-my ($sec, $min) = gmtime;
-my $RandomSeed = ($min * 60 + $sec) % 2880; # else still overflow
-
-# See usage of $Random and $RandomSeed later on.
-#
-# end random seed hack
-
-my $dosish = ( $Config{'osname'} =~ /^(ms)?dos|^os\/2|^mswin/i );
-my $escapeshell = ( ($ENV{'SHELL'}) && ($ENV{'SHELL'} =~ m/sh/i ));
-
-my $TeXUtil = 'texutil';
-my $TeXExec = 'texexec';
-my $MetaFun = 'metafun';
-my $MpToPdf = 'mptopdf';
-
-$Getopt::Long::passthrough = 1; # no error message
-$Getopt::Long::autoabbrev = 1; # partial switch accepted
-
-my $AddEmpty = '';
-my $Alone = 0;
-my $Optimize = 0;
-my $ForceTeXutil = 0;
-my $Arrange = 0;
-my $BackSpace = '0pt';
-my $Background = '';
-my $CenterPage = 0;
-my $ConTeXtInterface = 'unknown';
-my $Convert = '';
-my $DoMPTeX = 0;
-my $DoMPXTeX = 0;
-my $EnterBatchMode = 0;
-my $EnterNonStopMode = 0;
-my $Environments = '';
-my $Modules = '';
-my $FastMode = 0;
-my $FinalMode = 0;
-my $Format = '';
-my $MpDoFormat = '';
-my $HelpAsked = 0;
-my $Version = 0;
-my $MainBodyFont = 'standard';
-my $MainLanguage = 'standard';
-my $MainResponse = 'standard';
-my $MakeFormats = 0;
-my $Markings = 0;
-my $Mode = '';
-my $NoArrange = 0;
-my $NoDuplex = 0;
-my $NOfRuns = 8;
-my $NoMPMode = 0;
-my $NoMPRun = 0;
-my $NoBanner = 0;
-my $AutoMPRun = 0;
-my $OutputFormat = 'standard';
-my $Pages = '';
-my $PageScale = '1000'; # == 1.0
-my $PaperFormat = 'standard';
-my $PaperOffset = '0pt';
-my $PassOn = '';
-my $PdfArrange = 0;
-my $PdfSelect = 0;
-my $PdfCombine = 0;
-my $PdfOpen = 0;
-my $PdfClose = 0;
-my $AutoPdf = 0;
-my $UseXPdf = 0;
-my $PrintFormat = 'standard';
-my $ProducePdfT = 0;
-my $ProducePdfM = 0;
-my $ProducePdfX = 0;
-my $ProducePdfXTX = 0;
-my $ProducePs = 0;
-my $Input = "";
-my $Result = '';
-my $Suffix = '';
-my $RunOnce = 0;
-my $Selection = '';
-my $Combination = '2*4';
-my $SilentMode = 0;
-my $TeXProgram = '';
-my $TeXTranslation = '';
-my $TextWidth = '0pt';
-my $TopSpace = '0pt';
-my $TypesetFigures = 0;
-my $ForceFullScreen = 0;
-my $ScreenSaver = 0;
-my $TypesetListing = 0;
-my $TypesetModule = 0;
-my $UseColor = 0;
-my $Verbose = 0;
-my $PdfCopy = 0;
-my $PdfTrim = 0;
-my $LogFile = "";
-my $MpyForce = 0;
-my $InpPath = "";
-my $AutoPath = 0;
-my $RunPath = "";
-my $Arguments = "";
-my $Pretty = 0;
-my $SetFile = "";
-my $TeXTree = "";
-my $TeXRoot = "";
-my $Purge = 0;
-my $Separation = "";
-my $ModeFile = "";
-my $GlobalFile = 0;
-my $AllPatterns = 0;
-my $ForceXML = 0;
-my $Random = 0;
-my $Filters = '';
-my $NoMapFiles = 0 ;
-my $Foxet = 0 ;
-my $TheEnginePath = 0 ;
-my $Paranoid = 0 ;
-my $NotParanoid = 0 ;
-my $BoxType = '' ;
-my $Local = '' ;
-
-my $TempDir = '' ;
-
-my $StartLine = 0 ;
-my $StartColumn = 0 ;
-my $EndLine = 0 ;
-my $EndColumn = 0 ;
-
-my $MpEngineSupport = 0 ; # not now, we also need to patch executemp in context itself
-
-# makempy :
-
-my $MakeMpy = '';
-
-&GetOptions(
- "arrange" => \$Arrange,
- "batch" => \$EnterBatchMode,
- "nonstop" => \$EnterNonStopMode,
- "color" => \$UseColor,
- "centerpage" => \$CenterPage,
- "convert=s" => \$Convert,
- "environments=s" => \$Environments,
- "usemodules=s" => \$Modules,
- "xml" => \$ForceXML,
- "xmlfilters=s" => \$Filters,
- "fast" => \$FastMode,
- "final" => \$FinalMode,
- "format=s" => \$Format,
- "mpformat=s" => \$MpDoFormat,
- "help" => \$HelpAsked,
- "version" => \$Version,
- "interface=s" => \$ConTeXtInterface,
- "language=s" => \$MainLanguage,
- "bodyfont=s" => \$MainBodyFont,
- "results=s" => \$Result,
- "response=s" => \$MainResponse,
- "make" => \$MakeFormats,
- "mode=s" => \$Mode,
- "module" => \$TypesetModule,
- "figures=s" => \$TypesetFigures,
- "fullscreen" => \$ForceFullScreen,
- "screensaver" => \$ScreenSaver,
- "listing" => \$TypesetListing,
- "mptex" => \$DoMPTeX,
- "mpxtex" => \$DoMPXTeX,
- "noarrange" => \$NoArrange,
- "nomp" => \$NoMPMode,
- "nomprun" => \$NoMPRun,
- "nobanner" => \$NoBanner,
- "automprun" => \$AutoMPRun,
- "once" => \$RunOnce,
- "output=s" => \$OutputFormat,
- "pages=s" => \$Pages,
- "paper=s" => \$PaperFormat,
- "paperformat=s" => \$PaperFormat,
- "passon=s" => \$PassOn,
- "path=s" => \$InpPath,
- "autopath" => \$AutoPath,
- "pdf" => \$ProducePdfT,
- "pdm" => \$ProducePdfM,
- "dpm" => \$ProducePdfM,
- "pdx" => \$ProducePdfX,
- "dpx" => \$ProducePdfX,
- "xtx" => \$ProducePdfXTX,
- "ps" => \$ProducePs,
- "pdfarrange" => \$PdfArrange,
- "pdfselect" => \$PdfSelect,
- "pdfcombine" => \$PdfCombine,
- "pdfcopy" => \$PdfCopy,
- "pdftrim" => \$PdfTrim,
- "scale=s" => \$PageScale,
- "selection=s" => \$Selection,
- "combination=s" => \$Combination,
- "noduplex" => \$NoDuplex,
- "offset=s" => \$PaperOffset,
- "paperoffset=s" => \$PaperOffset,
- "backspace=s" => \$BackSpace,
- "topspace=s" => \$TopSpace,
- "markings" => \$Markings,
- "textwidth=s" => \$TextWidth,
- "addempty=s" => \$AddEmpty,
- "background=s" => \$Background,
- "logfile=s" => \$LogFile,
- "print=s" => \$PrintFormat,
- "suffix=s" => \$Suffix,
- "runs=s" => \$NOfRuns,
- "silent" => \$SilentMode,
- "tex=s" => \$TeXProgram,
- "verbose" => \$Verbose,
- "alone" => \$Alone,
- "optimize" => \$Optimize,
- "texutil" => \$ForceTeXutil,
- "mpyforce" => \$MpyForce,
- "input=s" => \$Input,
- "arguments=s" => \$Arguments,
- "pretty" => \$Pretty,
- "setfile=s" => \$SetFile, # obsolete
- "purge" => \$Purge,
- #### yet undocumented #################
- "runpath=s" => \$RunPath,
- "random" => \$Random,
- "makempy=s" => \$MakeMpy,
- "allpatterns" => \$AllPatterns,
- "separation=s" => \$Separation,
- "textree=s" => \$TeXTree,
- "texroot=s" => \$TeXRoot,
- "translate=s" => \$TeXTranslation,
- "pdfclose" => \$PdfClose,
- "pdfopen" => \$PdfOpen,
- "autopdf" => \$AutoPdf,
- "xpdf" => \$UseXPdf,
- "modefile=s" => \$ModeFile, # additional modes file
- "globalfile" => \$GlobalFile,
- "nomapfiles" => \$NoMapFiles,
- "foxet" => \$Foxet,
- "engine" => \$TheEnginePath,
- "paranoid" => \$Paranoid,
- "notparanoid" => \$NotParanoid,
- "boxtype=s" => \$BoxType, # media art crop bleed trim
- "local" => \$Local,
- #### unix is unsafe (symlink viruses)
- "tempdir=s" => \$TempDir,
- #### experiment
- "startline=s" => \$StartLine,
- "startcolumn=s" => \$StartColumn,
- "endline=s" => \$EndLine,
- "endcolumn=s" => \$EndColumn
-); # don't check name
-
-if ($Foxet) {
- $ProducePdfT = 1 ;
- $ForceXML = 1 ;
- $Modules = "foxet" ;
- $Purge = 1 ;
-}
-
-# a set file (like blabla.bat) can set paths now
-
-if ( $SetFile ne "" ) { load_set_file( $SetFile, $Verbose ); $SetFile = "" }
-
-# later we will do a second attempt.
-
-$SIG{INT} = "IGNORE";
-
-if ( $ARGV[0] && $ARGV[0] =~ /\.mpx$/io ) { # catch -tex=.... bug in mpost
- $TeXProgram = '';
- $DoMPXTeX = 1;
- $NoMPMode = 1;
-}
-
-####
-
-if ($Version) {
- $Purge = 1 ;
- }
-
-####
-
-if ($Paranoid) {
- $ENV{shell_escape} = 'f' ;
- $ENV{openout_any} = 'p' ;
- $ENV{openin_any} = 'p' ;
-} elsif ($NotParanoid) {
- $ENV{shell_escape} = 't' ;
- $ENV{openout_any} = 'p' ;
- $ENV{openin_any} = 'a' ;
-}
-
-if (defined $ENV{openin_any} && $ENV{openin_any} eq 'p') {
- $Paranoid = 1 ; # extra test in order to set readlevel
-}
-
-if ((defined $ENV{shell_escape} && $ENV{shell_escape} eq 'f') ||
- (defined $ENV{SHELL_ESCAPE} && $ENV{SHELL_ESCAPE} eq 'f')) {
- $AutoMPRun = 1 ;
-}
-
-if ($ScreenSaver) {
- $ForceFullScreen = 1;
- $TypesetFigures = 'c';
- $ProducePdfT = 1;
- $Purge = 1;
-}
-
-if ( $DoMPTeX || $DoMPXTeX ) {
- $RunOnce = 1;
- $ProducePdfT = 0;
- $ProducePdfX = 0;
- $ProducePdfM = 0;
- $ProducePdfXTX = 0;
- $ProducePs = 0;
-}
-
-if ( $PdfArrange || $PdfSelect || $PdfCopy || $PdfTrim || $PdfCombine ) {
- $ProducePdfT = 1;
- $RunOnce = 1;
-}
-
-if ($ProducePdfT) { $OutputFormat = "pdftex" }
-elsif ($ProducePdfM) { $OutputFormat = "dvipdfm" }
-elsif ($ProducePdfX) { $OutputFormat = "dvipdfmx" }
-elsif ($ProducePdfXTX) { $OutputFormat = "xetex" }
-elsif ($ProducePs) { $OutputFormat = "dvips" }
-
-if ( $ProducePdfXTX ) {
- $TeXProgram = 'xetex' ; # ignore the default pdfetex engine
- $PassOn .= ' -no-pdf ' ; # Adam Lindsay's preference
-}
-
-if ($AutoPdf) {
- $PdfOpen = $PdfClose = 1 ;
-}
-
-my $PdfOpenCall = "" ;
-
-if ($PdfOpen) {
- $PdfOpenCall = "pdfopen --file" ;
-}
-
-if ($UseXPdf && !$dosish) {
- $PdfOpenCall = "xpdfopen" ;
-}
-
-# this is our hook into paranoid path extensions, assumes that
-# these three vars are part of path specs in texmf.cnf
-
-foreach my $i ('TXRESOURCES','MPRESOURCES','MFRESOURCES') {
- foreach my $j ($RunPath,$InpPath) {
- if ($j ne '') {
- if ($ENV{$i} ne '') {
- $ENV{$i} = $ENV{$i} . ',' . $j ;
- } else {
- $ENV{$i} = $j ;
- }
- }
- }
-}
-
-if ( $RunOnce || $Pages || $TypesetFigures || $TypesetListing ) { $NOfRuns = 1 }
-
-if ( ( $LogFile ne '' ) && ( $LogFile =~ /\w+\.log$/io ) ) {
- open( LOGFILE, ">$LogFile" );
- *STDOUT = *LOGFILE;
- *STDERR = *LOGFILE;
-}
-
-my $Program = " TeXExec 5.4.3 - ConTeXt / PRAGMA ADE 1997-2005";
-
-print "\n$Program\n\n";
-
-if ($Verbose) { print " current path : " . cwd . "\n" }
-
-my $pathslash = '/';
-if ( $FindBin::Bin =~ /\\/ ) { $pathslash = "\\" }
-my $cur_path = ".$pathslash";
-
-# we need to handle window's "Program Files" path (patch by Fabrice P)
-
-my $own_path = "$FindBin::Bin/";
-my $own_type = $FindBin::Script;
-my $own_quote = ( $own_path =~ m/^[^\"].* / ? "\"" : "" );
-my $own_stub = "";
-
-if ( $own_type =~ /(\.pl|perl)/oi ) { $own_stub = "perl " }
-
-if ( $own_type =~ /(\.(pl|bin|exe))$/io ) { $own_type = $1 }
-else { $own_type = '' }
-
-sub checked_path {
- my $path = shift;
- if ( ( defined($path) ) && ( $path ne '' ) ) {
- $path =~ s/[\/\\]/$pathslash/go;
- $path =~ s/[\/\\]*$//go;
- $path .= $pathslash;
- } else {
- $path = '';
- }
- return $path;
-}
-
-sub checked_file {
- my $path = shift;
- if ( ( defined($path) ) && ( $path ne '' ) ) {
- $path =~ s/[\/\\]/$pathslash/go;
- } else {
- $path = '';
- }
- return $path;
-}
-
-sub CheckPath {
- my ( $Key, $Value ) = @_;
- if ( ( $Value =~ /\// ) && ( $Value !~ /\;/ ) ) # no multipath test yet
- {
- $Value = checked_path($Value);
- unless ( -d $Value ) {
- print " error : $Key set to unknown path $Value\n";
- }
- }
-}
-
-# set to
-# for